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()