Back to home page

EIC code displayed by LXR

 
 

    


Warning, /acts/Traccc/device/cuda/CMakeLists.txt is written in an unsupported language. File is not indexed.

0001 # TRACCC library, part of the ACTS project (R&D line)
0002 #
0003 # (c) 2021-2026 CERN for the benefit of the ACTS project
0004 #
0005 # Mozilla Public License Version 2.0
0006 
0007 # Enable CUDA as a language.
0008 enable_language(CUDA)
0009 
0010 # CMake 3.26 is the first to support C++20 in CUDA.
0011 cmake_minimum_required(VERSION 3.26)
0012 
0013 # Find the CUDA toolkit
0014 find_package(CUDAToolkit REQUIRED)
0015 
0016 # Project include(s).
0017 include(traccc-compiler-options-cpp)
0018 include(traccc-compiler-options-cuda)
0019 
0020 # Set up the build of the traccc::cuda library.
0021 traccc_add_library( traccc_cuda cuda TYPE SHARED
0022   # Utility definitions.
0023   "include/traccc/cuda/utils/algorithm_base.hpp"
0024   "src/utils/algorithm_base.cpp"
0025   "src/utils/barrier.hpp"
0026   "src/utils/cuda_error_handling.hpp"
0027   "src/utils/cuda_error_handling.cpp"
0028   "src/utils/global_index.hpp"
0029   "src/utils/magnetic_field_types.hpp"
0030   "src/utils/sync.cuh"
0031   "src/utils/thread_id.hpp"
0032   "src/utils/utils.hpp"
0033   "src/utils/utils.cpp"
0034   "src/sanity/contiguous_on.cuh"
0035   "src/sanity/ordered_on.cuh"
0036   # Seed finding code.
0037   "include/traccc/cuda/seeding/seed_parameter_estimation_algorithm.hpp"
0038   "src/seeding/seed_parameter_estimation_algorithm.cu"
0039   "include/traccc/cuda/seeding/triplet_seeding_algorithm.hpp"
0040   "src/seeding/triplet_seeding_algorithm.cu"
0041   "include/traccc/cuda/seeding/silicon_pixel_spacepoint_formation_algorithm.hpp"
0042   "src/seeding/silicon_pixel_spacepoint_formation_algorithm.cu"
0043   #GBTS seed finding code
0044   "include/traccc/cuda/gbts_seeding/gbts_seeding_algorithm.hpp"
0045   "src/gbts_seeding/gbts_seeding_algorithm.cu"
0046   # Clusterization
0047   "include/traccc/cuda/clusterization/clusterization_algorithm.hpp"
0048   "src/clusterization/clusterization_algorithm.cu"
0049   "include/traccc/cuda/clusterization/measurement_sorting_algorithm.hpp"
0050   "src/clusterization/measurement_sorting_algorithm.cu"
0051   "src/clusterization/kernels/ccl_kernel.cu"
0052   "src/clusterization/kernels/ccl_kernel.cuh"
0053   "src/clusterization/kernels/reify_cluster_data.cu"
0054   # Track finding algorithm(s).
0055   "include/traccc/cuda/finding/combinatorial_kalman_filter_algorithm.hpp"
0056   "src/finding/combinatorial_kalman_filter_algorithm.cpp"
0057   "src/finding/combinatorial_kalman_filter_algorithm.cu"
0058   "src/finding/kernels/fill_finding_propagation_sort_keys.cu"
0059   "src/finding/kernels/fill_finding_propagation_sort_keys.cuh"
0060   "src/finding/kernels/fill_finding_duplicate_removal_sort_keys.cu"
0061   "src/finding/kernels/remove_duplicates.cu"
0062   "src/finding/kernels/build_tracks.cu"
0063   "src/finding/kernels/build_tracks.cuh"
0064   "src/finding/kernels/condense_tracks.cuh"
0065   "src/finding/kernels/condense_tracks.cu"
0066   "src/finding/kernels/find_tracks.cuh"
0067   "src/finding/kernels/gather_best_tips_per_measurement.cu"
0068   "src/finding/kernels/gather_measurement_votes.cu"
0069   "src/finding/kernels/update_tip_length_buffer.cu"
0070   "src/finding/kernels/progressive_kalman_filter.hpp"
0071   "src/finding/kernels/propagate_to_next_surface.hpp"
0072   # Ambiguity resolution
0073   "include/traccc/cuda/ambiguity_resolution/greedy_ambiguity_resolution_algorithm.hpp"
0074   "src/ambiguity_resolution/greedy_ambiguity_resolution_algorithm.cu"
0075   "src/ambiguity_resolution/kernels/add_block_offset.cu"
0076   "src/ambiguity_resolution/kernels/add_block_offset.cuh"
0077   "src/ambiguity_resolution/kernels/block_inclusive_scan.cu"
0078   "src/ambiguity_resolution/kernels/block_inclusive_scan.cuh"
0079   "src/ambiguity_resolution/kernels/count_shared_measurements.cu"
0080   "src/ambiguity_resolution/kernels/count_shared_measurements.cuh"
0081   "src/ambiguity_resolution/kernels/fill_inverted_ids.cu"
0082   "src/ambiguity_resolution/kernels/fill_inverted_ids.cuh"
0083   "src/ambiguity_resolution/kernels/fill_tracks_per_measurement.cu"
0084   "src/ambiguity_resolution/kernels/fill_tracks_per_measurement.cuh"
0085   "src/ambiguity_resolution/kernels/fill_unique_meas_id_map.cu"
0086   "src/ambiguity_resolution/kernels/fill_unique_meas_id_map.cuh"
0087   "src/ambiguity_resolution/kernels/fill_track_candidates.cu"
0088   "src/ambiguity_resolution/kernels/fill_track_candidates.cuh"
0089   "src/ambiguity_resolution/kernels/fill_vectors.cu"
0090   "src/ambiguity_resolution/kernels/fill_vectors.cuh"
0091   "src/ambiguity_resolution/kernels/update_status.cu"
0092   "src/ambiguity_resolution/kernels/update_status.cuh"
0093   "src/ambiguity_resolution/kernels/rearrange_tracks.cu"
0094   "src/ambiguity_resolution/kernels/rearrange_tracks.cuh"
0095   "src/ambiguity_resolution/kernels/scan_block_offsets.cu"
0096   "src/ambiguity_resolution/kernels/scan_block_offsets.cuh"
0097   "src/ambiguity_resolution/kernels/sort_tracks_per_measurement.cu"
0098   "src/ambiguity_resolution/kernels/sort_tracks_per_measurement.cuh"
0099   "src/ambiguity_resolution/kernels/sort_updated_tracks.cu"
0100   "src/ambiguity_resolution/kernels/sort_updated_tracks.cuh"
0101   "src/ambiguity_resolution/kernels/remove_tracks.cu"
0102   "src/ambiguity_resolution/kernels/remove_tracks.cuh"
0103   # Track fitting algorithm(s).
0104   "include/traccc/cuda/fitting/kalman_fitting_algorithm.hpp"
0105   "src/fitting/kalman_fitting_algorithm.cpp"
0106   "src/fitting/kalman_fitting_algorithm.cu"
0107   "src/fitting/kernels/fill_fitting_sort_keys.cu"
0108   "src/fitting/kernels/fit_prelude.cu"
0109 )
0110 
0111 function(traccc_add_cuda_specialization TEMPLATE_FILE)
0112     cmake_parse_arguments(ARG "" "DETECTOR_NAME;BFIELD_NAME" "" ${ARGN})
0113 
0114     set(DETECTOR_NAME "${ARG_DETECTOR_NAME}")
0115     set(BFIELD_NAME "${ARG_BFIELD_NAME}")
0116 
0117     set(FNAME_POSTFIX "")
0118     if(NOT "${DETECTOR_NAME}" STREQUAL "")
0119         string(APPEND FNAME_POSTFIX ".${DETECTOR_NAME}")
0120     endif()
0121     if(NOT "${BFIELD_NAME}" STREQUAL "")
0122         string(APPEND FNAME_POSTFIX ".${BFIELD_NAME}")
0123     endif()
0124     string(REPLACE "<scalar>" "" FNAME_POSTFIX "${FNAME_POSTFIX}")
0125 
0126     configure_file(
0127         "${TEMPLATE_FILE}"
0128         "${TEMPLATE_FILE}${FNAME_POSTFIX}.cu"
0129         @ONLY
0130     )
0131     target_sources(
0132         traccc_cuda
0133         PRIVATE
0134             "${CMAKE_CURRENT_BINARY_DIR}/${TEMPLATE_FILE}${FNAME_POSTFIX}.cu"
0135     )
0136 endfunction()
0137 
0138 # Generate specializations for the kernels.
0139 foreach(DETECTOR_NAME ${TRACCC_SUPPORTED_DETECTORS})
0140     traccc_add_cuda_specialization(
0141       "src/finding/kernels/specializations/find_tracks.cu.in"
0142       DETECTOR_NAME "${DETECTOR_NAME}"
0143     )
0144     foreach(
0145         BFIELD_NAME
0146         "const_bfield_backend_t<scalar>"
0147         "inhom_global_bfield_backend_t<scalar>"
0148         "inhom_texture_bfield_backend_t"
0149     )
0150         traccc_add_cuda_specialization(
0151           "src/finding/kernels/specializations/progressive_kalman_filter.cu.in"
0152           DETECTOR_NAME "${DETECTOR_NAME}" BFIELD_NAME "${BFIELD_NAME}"
0153         )
0154         traccc_add_cuda_specialization(
0155           "src/finding/kernels/specializations/propagate_to_next_surface.cu.in"
0156           DETECTOR_NAME "${DETECTOR_NAME}" BFIELD_NAME "${BFIELD_NAME}"
0157         )
0158         traccc_add_cuda_specialization(
0159           "src/fitting/kernels/specializations/fit_forward.cu.in"
0160           DETECTOR_NAME "${DETECTOR_NAME}" BFIELD_NAME "${BFIELD_NAME}"
0161         )
0162         traccc_add_cuda_specialization(
0163           "src/fitting/kernels/specializations/fit_backward.cu.in"
0164           DETECTOR_NAME "${DETECTOR_NAME}" BFIELD_NAME "${BFIELD_NAME}"
0165         )
0166     endforeach()
0167 endforeach()
0168 
0169 if(TRACCC_ENABLE_NVTX_PROFILING)
0170     traccc_add_library(
0171         nvtx_instrumentation
0172         TYPE OBJECT
0173         "src/inst_nvtx.cpp"
0174     )
0175 
0176     set_target_properties(
0177         nvtx_instrumentation
0178         PROPERTIES POSITION_INDEPENDENT_CODE ON
0179     )
0180 
0181     target_link_libraries(
0182         nvtx_instrumentation
0183         PRIVATE CUDA::nvtx3 ${CMAKE_DL_LIBS}
0184     )
0185 
0186     target_compile_options(
0187         traccc_cuda
0188         PRIVATE
0189             $<$<COMPILE_LANGUAGE:CUDA>:-Xcompiler=-finstrument-functions;-Xcompiler=-finstrument-functions-exclude-file-list=nvtx3/>
0190             $<$<COMPILE_LANGUAGE:CXX>:-finstrument-functions;-finstrument-functions-exclude-file-list=nvtx3/>
0191     )
0192 
0193     target_link_libraries(traccc_cuda PRIVATE nvtx_instrumentation)
0194 endif()
0195 
0196 target_link_libraries(
0197     traccc_cuda
0198     PUBLIC traccc::core traccc::cuda_utils detray::core vecmem::core
0199     PRIVATE CUDA::cudart traccc::device_common vecmem::cuda covfie::cuda
0200 )
0201 target_include_directories(traccc_cuda PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}")
0202 
0203 # Set up Thrust specifically for the traccc::cuda library.
0204 thrust_create_target( traccc::cuda_thrust
0205   HOST CPP
0206   DEVICE CUDA
0207 )
0208 target_link_libraries(traccc::cuda_thrust INTERFACE CUDA::cudart)
0209 target_link_libraries(traccc_cuda PRIVATE traccc::cuda_thrust)
0210 
0211 # For CUDA 11 turn on separable compilation. This is necessary for using
0212 # Thrust 2.1.0.
0213 if(
0214     ("${CMAKE_CUDA_COMPILER_ID}" STREQUAL "NVIDIA")
0215     AND ("${CMAKE_CUDA_COMPILER_VERSION}" VERSION_LESS "12.0")
0216 )
0217     set_target_properties(traccc_cuda PROPERTIES CUDA_SEPARABLE_COMPILATION ON)
0218 endif()