diff --git a/GPU/GPUTracking/CMakeLists.txt b/GPU/GPUTracking/CMakeLists.txt index 816d578fb31a3..14118d9b71e9c 100644 --- a/GPU/GPUTracking/CMakeLists.txt +++ b/GPU/GPUTracking/CMakeLists.txt @@ -107,6 +107,25 @@ set(SRCS_NO_H SectorTracker/GPUTPCTrackerDump.cxx Global/GPUChainTrackingDebugAndProfiling.cxx Global/GPUChainTrackingIO.cxx) +if(GPUCA_OVERRIDE_PARAMETER_FILE) + set(GPU_PARAM_JSON ${GPUCA_OVERRIDE_PARAMETER_FILE}) +else() + set(GPU_PARAM_JSON ${CMAKE_CURRENT_SOURCE_DIR}/Definitions/Parameters/GPUParameters.csv) +endif() +set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS "${GPU_PARAM_JSON}") + +get_filename_component(GPU_PARAM_JSON_EXT ${GPU_PARAM_JSON} EXT) +string(TOLOWER "${GPU_PARAM_JSON_EXT}" GPU_PARAM_JSON_EXT) +if(GPU_PARAM_JSON_EXT STREQUAL .csv) + execute_process( + COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/Definitions/Parameters/csv_to_json.sh "${GPU_PARAM_JSON}" + OUTPUT_FILE ${CMAKE_CURRENT_BINARY_DIR}/gpu_parameters.json + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + ) + message(STATUS "Converted ${GPU_PARAM_JSON} to ${CMAKE_CURRENT_BINARY_DIR}/gpu_parameters.json") + set(GPU_PARAM_JSON ${CMAKE_CURRENT_BINARY_DIR}/gpu_parameters.json) +endif() + set(ON_THE_FLY_DIR ${CMAKE_CURRENT_BINARY_DIR}/include_gpu_onthefly) file(MAKE_DIRECTORY ${ON_THE_FLY_DIR}) include(cmake/gpu_param_header_generator.cmake) @@ -410,12 +429,11 @@ target_sources(${targetName} BASE_DIRS ${CMAKE_CURRENT_BINARY_DIR}) make_directory(${CMAKE_CURRENT_BINARY_DIR}/genGPUArch) -set(GPU_CONST_PARAM_ARCHITECTUES AMPERE TURING VEGA MI100) set(GPU_CONST_PARAM_FILES "") +set(GPU_ARCH_PARAMS_HEADER ${CMAKE_CURRENT_BINARY_DIR}/genGPUArch/GPUDefParametersDefaults_OnTheFly.h) +generate_gpu_param_header("ALL" ${GPU_ARCH_PARAMS_HEADER} "GPU_CONST_PARAM_ARCHITECTUES") foreach(GPU_ARCH ${GPU_CONST_PARAM_ARCHITECTUES}) set(PARAMFILE ${CMAKE_CURRENT_BINARY_DIR}/genGPUArch/gpu_const_param_${GPU_ARCH}.par) - set(GPU_ARCH_PARAMS_HEADER ${CMAKE_CURRENT_BINARY_DIR}/genGPUArch/GPUDefParametersDefaults_${GPU_ARCH}.h) - generate_gpu_param_header(${GPU_ARCH} ${GPU_ARCH_PARAMS_HEADER}) add_custom_command( OUTPUT ${PARAMFILE} COMMAND bash -c diff --git a/GPU/GPUTracking/Definitions/Parameters/GPUParameters.csv b/GPU/GPUTracking/Definitions/Parameters/GPUParameters.csv new file mode 100644 index 0000000000000..5afa99554f5d0 --- /dev/null +++ b/GPU/GPUTracking/Definitions/Parameters/GPUParameters.csv @@ -0,0 +1,113 @@ +Architecture,default,MI100,VEGA,TAHITI,TESLA,FERMI,PASCAL,KEPLER,AMPERE,TURING,default_cpu +,,,,,,,,,,, +CORE:,,,,,,,,,,, +WARP_SIZE,32,64,64,32,32,32,32,32,32,32, +THREAD_COUNT_DEFAULT,256,256,256,,,,,,512,512, +,,,,,,,,,,, +LB:,,,,,,,,,,, +GPUTPCCreateTrackingData,256,"[256, 7]","[192, 2]",,,,,,384,256, +GPUTPCTrackletConstructor,256,"[768, 8]","[512, 10]","[256, 2]","[256, 1]","[256, 2]","[1024, 2]","[512, 4]","[256, 2]","[256, 2]", +GPUTPCTrackletSelector,256,"[384, 5]","[192, 10]","[256, 3]","[256, 1]","[256, 3]","[512, 4]","[256, 3]","[192, 3]","[192, 3]", +GPUTPCNeighboursFinder,256,"[192, 8]","[960, 8]",256,256,256,512,256,"[640, 1]","[640, 1]", +GPUTPCNeighboursCleaner,256,"[128, 5]","[384, 9]",256,256,256,256,256,512,512, +GPUTPCExtrapolationTracking,256,"[256, 7]","[256, 2]",,,,,,"[128, 4]","[192, 2]", +GPUTRDTrackerKernels_gpuVersion,512,,,,,,,,,, +GPUTPCCreateOccupancyMap_fill,256,,,,,,,,,, +GPUTPCCreateOccupancyMap_fold,256,,,,,,,,,, +GPUTRDTrackerKernels_o2Version,512,,,,,,,,,, +GPUTPCCompressionKernels_step0attached,256,"[128, 1]","[64, 2]",,,,,,"[64, 2]",128, +GPUTPCCompressionKernels_step1unattached,256,"[512, 2]","[512, 2]",,,,,,"[512, 3]","[512, 2]", +GPUTPCDecompressionKernels_step0attached,256,"[128, 2]","[128, 2]",,,,,,"[32, 1]","[32, 1]", +GPUTPCDecompressionKernels_step1unattached,256,"[64, 2]","[64, 2]",,,,,,"[32, 1]","[32, 1]", +GPUTPCDecompressionUtilKernels_sortPerSectorRow,256,,,,,,,,,, +GPUTPCDecompressionUtilKernels_countFilteredClusters,256,,,,,,,,,, +GPUTPCDecompressionUtilKernels_storeFilteredClusters,256,,,,,,,,,, +GPUTPCCFDecodeZS,"[128, 4]","[64, 4]","[64, 1]",,,,,,"[64, 10]","[64, 8]", +GPUTPCCFDecodeZSLink,"""GPUCA_WARP_SIZE""","""GPUCA_WARP_SIZE""","""GPUCA_WARP_SIZE""",,,,,,"""GPUCA_WARP_SIZE""","""GPUCA_WARP_SIZE""", +GPUTPCCFDecodeZSDenseLink,"""GPUCA_WARP_SIZE""","[""GPUCA_WARP_SIZE"", 4]","[""GPUCA_WARP_SIZE"", 14]",,,,,,"""GPUCA_WARP_SIZE""","""GPUCA_WARP_SIZE""", +GPUTPCCFGather,"[1024, 1]","[1024, 5]","[1024, 1]",,,,,,"[1024, 1]","[1024, 1]", +COMPRESSION_GATHER,1024,1024,1024,,,,,,1024,1024, +GPUTPCGMMergerTrackFit,256,"[192, 2]","[64, 7]",,,,,,"[64, 4]","[32, 8]", +GPUTPCGMMergerFollowLoopers,256,"[256, 5]","[256, 4]",,,,,,"[64, 12]","[128, 4]", +GPUTPCGMMergerSectorRefit,256,"[64, 4]","[256, 2]",,,,,,"[32, 6]","[64, 5]", +GPUTPCGMMergerUnpackResetIds,256,256,256,,,,,,256,256, +GPUTPCGMMergerUnpackGlobal,256,256,256,,,,,,256,256, +GPUTPCGMMergerResolve_step0,256,512,256,,,,,,256,256, +GPUTPCGMMergerResolve_step1,256,512,256,,,,,,256,256, +GPUTPCGMMergerResolve_step2,256,512,256,,,,,,256,256, +GPUTPCGMMergerResolve_step3,256,512,256,,,,,,256,256, +GPUTPCGMMergerResolve_step4,256,512,256,,,,,,"[256, 4]","[256, 4]", +GPUTPCGMMergerClearLinks,256,256,256,,,,,,256,256, +GPUTPCGMMergerMergeWithinPrepare,256,256,256,,,,,,256,256, +GPUTPCGMMergerMergeSectorsPrepare,256,256,256,,,,,,"[256, 2]","[256, 2]", +GPUTPCGMMergerMergeBorders_step0,256,512,256,,,,,,192,192, +GPUTPCGMMergerMergeBorders_step2,256,512,256,,,,,,"[64, 2]",256, +GPUTPCGMMergerMergeCE,256,512,256,,,,,,256,256, +GPUTPCGMMergerLinkExtrapolatedTracks,256,256,256,,,,,,256,256, +GPUTPCGMMergerCollect,256,"[768, 1]","[1024, 1]",,,,,,"[256, 2]","[128, 2]", +GPUTPCGMMergerSortTracksPrepare,256,256,256,,,,,,256,256, +GPUTPCGMMergerPrepareForFit_step0,256,256,256,,,,,,256,256, +GPUTPCGMMergerPrepareForFit_step1,256,256,256,,,,,,256,256, +GPUTPCGMMergerPrepareForFit_step2,256,256,256,,,,,,256,256, +GPUTPCGMMergerFinalize_step0,256,,256,,,,,,,, +GPUTPCGMMergerFinalize_step1,256,,256,,,,,,,, +GPUTPCGMMergerFinalize_step2,256,,256,,,,,,,, +GPUTPCGMMergerMergeLoopers_step0,256,,,,,,,,,, +GPUTPCGMMergerMergeLoopers_step1,256,,,,,,,,,, +GPUTPCGMMergerMergeLoopers_step2,256,,,,,,,,,, +GPUTPCGMO2Output_prepare,256,,,,,,,,,, +GPUTPCGMO2Output_output,256,,,,,,,,,, +GPUTPCStartHitsFinder,256,"[1024, 2]","[1024, 7]",256,256,256,256,256,512,512, +GPUTPCStartHitsSorter,256,"[1024, 5]","[512, 7]",256,256,256,256,256,"[512, 1]","[512, 1]", +GPUTPCCFCheckPadBaseline,576,"[576, 2]","[576, 2]",,,,,,"[576, 2]",, +GPUTPCCFChargeMapFiller_fillIndexMap,512,512,512,,,,,,448,, +GPUTPCCFChargeMapFiller_fillFromDigits,512,512,512,,,,,,448,, +GPUTPCCFChargeMapFiller_findFragmentStart,512,512,512,,,,,,448,, +GPUTPCCFPeakFinder,512,"[512, 9]","[512, 4]",,,,,,128,, +GPUTPCCFNoiseSuppression,512,512,512,,,,,,448,, +GPUTPCCFDeconvolution,512,"[512, 5]","[512, 5]",,,,,,384,, +GPUTPCCFClusterizer,512,"[448, 3]","[512, 2]",,,,,,448,, +GPUTPCNNClusterizerKernels,512,,,,,,,,,, +GPUTrackingRefitKernel_mode0asGPU,256,,,,,,,,,, +GPUTrackingRefitKernel_mode1asTrackParCov,256,,,,,,,,,, +GPUMemClean16,"[""GPUCA_THREAD_COUNT_DEFAULT"", 1]",,,,,,,,,, +GPUitoa,"[""GPUCA_THREAD_COUNT_DEFAULT"", 1]",,,,,,,,,, +GPUTPCCFNoiseSuppression_noiseSuppression,"""GPUCA_LB_GPUTPCCFNoiseSuppression""",,,,,,,,,, +GPUTPCCFNoiseSuppression_updatePeaks,"""GPUCA_LB_GPUTPCCFNoiseSuppression""",,,,,,,,,, +GPUTPCNNClusterizerKernels_runCfClusterizer,"""GPUCA_LB_GPUTPCNNClusterizerKernels""",,,,,,,,,, +GPUTPCNNClusterizerKernels_fillInputNNCPU,"""GPUCA_LB_GPUTPCNNClusterizerKernels""",,,,,,,,,, +GPUTPCNNClusterizerKernels_fillInputNNGPU,1024,,,,,,,,,, +GPUTPCNNClusterizerKernels_determineClass1Labels,"""GPUCA_LB_GPUTPCNNClusterizerKernels""",,,,,,,,,, +GPUTPCNNClusterizerKernels_determineClass2Labels,"""GPUCA_LB_GPUTPCNNClusterizerKernels""",,,,,,,,,, +GPUTPCNNClusterizerKernels_publishClass1Regression,"""GPUCA_LB_GPUTPCNNClusterizerKernels""",,,,,,,,,, +GPUTPCNNClusterizerKernels_publishClass2Regression,"""GPUCA_LB_GPUTPCNNClusterizerKernels""",,,,,,,,,, +GPUTPCNNClusterizerKernels_publishDeconvolutionFlags,"""GPUCA_LB_GPUTPCNNClusterizerKernels""",,,,,,,,,, +GPUTPCCFStreamCompaction_scanStart,"""GPUCA_PAR_CF_SCAN_WORKGROUP_SIZE""",,,,,,,,,, +GPUTPCCFStreamCompaction_scanUp,"""GPUCA_PAR_CF_SCAN_WORKGROUP_SIZE""",,,,,,,,,, +GPUTPCCFStreamCompaction_scanTop,"""GPUCA_PAR_CF_SCAN_WORKGROUP_SIZE""",,,,,,,,,, +GPUTPCCFStreamCompaction_scanDown,"""GPUCA_PAR_CF_SCAN_WORKGROUP_SIZE""",,,,,,,,,, +GPUTPCCFStreamCompaction_compactDigits,"""GPUCA_PAR_CF_SCAN_WORKGROUP_SIZE""",,,,,,,,,, +GPUTPCCompressionGatherKernels_unbuffered,"""GPUCA_LB_COMPRESSION_GATHER""",,,,,,,,,, +GPUTPCCompressionGatherKernels_buffered32,"""GPUCA_LB_COMPRESSION_GATHER""",,,,,,,,,, +GPUTPCCompressionGatherKernels_buffered64,"""GPUCA_LB_COMPRESSION_GATHER""",,,,,,,,,, +GPUTPCCompressionGatherKernels_buffered128,"""GPUCA_LB_COMPRESSION_GATHER""",,,,,,,,,, +GPUTPCCompressionGatherKernels_multiBlock,"""GPUCA_LB_COMPRESSION_GATHER""",,,,,,,,,, +GPUTPCGMMergerFinalize_0,256,256,,,,,,,256,256, +GPUTPCGMMergerFinalize_1,256,256,,,,,,,256,256, +GPUTPCGMMergerFinalize_2,256,256,,,,,,,256,256, +,,,,,,,,,,, +PAR:,,,,,,,,,,, +AMD_EUS_PER_CU,0,4,4,,,,,,,,0 +SORT_STARTHITS,1,,,,,,,,,,0 +NEIGHBOURS_FINDER_MAX_NNEIGHUP,6,10,4,,,,,,4,4,0 +NEIGHBOURS_FINDER_UNROLL_GLOBAL,4,4,2,,,,,,,,0 +NEIGHBOURS_FINDER_UNROLL_SHARED,1,0,0,,,,,,,,0 +TRACKLET_SELECTOR_HITS_REG_SIZE,12,9,27,,,,,,20,20,0 +ALTERNATE_BORDER_SORT,0,1,1,,,,,,1,1,0 +SORT_BEFORE_FIT,0,1,1,,,,,,1,1,0 +NO_ATOMIC_PRECHECK,0,1,1,,,,,,1,1,0 +DEDX_STORAGE_TYPE,"""float""","""uint16_t""","""uint16_t""",,,,,,"""uint16_t""","""uint16_t""","""float""" +MERGER_INTERPOLATION_ERROR_TYPE,"""float""","""half""","""half""",,,,,,"""half""","""half""","""float""" +COMP_GATHER_KERNEL,0,4,4,,,,,,4,4,0 +COMP_GATHER_MODE,2,3,3,,,,,,3,3,0 +CF_SCAN_WORKGROUP_SIZE,512,,,,,,,,,,0 diff --git a/GPU/GPUTracking/Definitions/Parameters/GPUParameters.json b/GPU/GPUTracking/Definitions/Parameters/GPUParameters.json.example similarity index 99% rename from GPU/GPUTracking/Definitions/Parameters/GPUParameters.json rename to GPU/GPUTracking/Definitions/Parameters/GPUParameters.json.example index 285919559c04c..3c6f1af1aab2f 100644 --- a/GPU/GPUTracking/Definitions/Parameters/GPUParameters.json +++ b/GPU/GPUTracking/Definitions/Parameters/GPUParameters.json.example @@ -2,7 +2,6 @@ "CORE": { "WARP_SIZE": { "default": 32, - "default_cpu": 1, "MI100": 64, "VEGA": 64, "TAHITI": 32, diff --git a/GPU/GPUTracking/Definitions/Parameters/csv_to_json.sh b/GPU/GPUTracking/Definitions/Parameters/csv_to_json.sh index ae9d3b7704284..373bd18ba7cd4 100755 --- a/GPU/GPUTracking/Definitions/Parameters/csv_to_json.sh +++ b/GPU/GPUTracking/Definitions/Parameters/csv_to_json.sh @@ -2,7 +2,13 @@ [[ -z $1 ]] && { echo "Usage: csv_to_json.sh CSV_FILE"; exit 1; } -awk -vFPAT='([^,]*)|(\"([^\"]|\"\")*\")' \ +DELIM=$'\xFF' +sed -E \ + ':loop + s/^(([^"]*"[^"]*")*[^"]*),/\1'$DELIM'/; + t loop' \ + $1 | \ +awk -F$DELIM \ 'BEGIN { print "{" } { @@ -42,5 +48,4 @@ awk -vFPAT='([^,]*)|(\"([^\"]|\"\")*\")' \ if (paramprinted) print "\n }" if (catprinted) print " }" print "}" - }' \ - $1 + }' diff --git a/GPU/GPUTracking/Standalone/cmake/config.cmake b/GPU/GPUTracking/Standalone/cmake/config.cmake index ca723063b6d3b..9355311db617c 100644 --- a/GPU/GPUTracking/Standalone/cmake/config.cmake +++ b/GPU/GPUTracking/Standalone/cmake/config.cmake @@ -41,3 +41,4 @@ set(CUDA_COMPUTETARGET "default") # 86 89 #set(GPUCA_CONFIG_COMPILER gcc) # gcc / clang #set(GPUCA_CONFIG_WERROR 1) #add_definitions(-DGPUCA_GPU_DEBUG_PRINT) +#set(GPUCA_OVERRIDE_PARAMETER_FILE "foo.csv") diff --git a/GPU/GPUTracking/cmake/gpu_param_header_generator.cmake b/GPU/GPUTracking/cmake/gpu_param_header_generator.cmake index 3770e30f2583c..e79a96034103d 100644 --- a/GPU/GPUTracking/cmake/gpu_param_header_generator.cmake +++ b/GPU/GPUTracking/cmake/gpu_param_header_generator.cmake @@ -12,7 +12,12 @@ # file gpu_param_header_generator.cmake # author Gabriele Cimador -function(generate_macros json_content header types arch_key use_ifndef_guard) +function(generate_macros json_content output types arch_list arch_list_output) + foreach(arch IN LISTS arch_list) + set(OUTPUT_TMP_${arch} "") + endforeach() + set(arch_list_output_tmp) + list(FIND arch_list "ALL" do_all_architectures) foreach(TYPE IN LISTS types) string(JSON n_params LENGTH "${json_content}" "${TYPE}") math(EXPR last "${n_params} - 1") @@ -22,8 +27,19 @@ function(generate_macros json_content header types arch_key use_ifndef_guard) math(EXPR last_arch "${n_archs} - 1") foreach(iArch RANGE 0 ${last_arch}) string(JSON arch MEMBER "${JSON_CONTENT}" "${TYPE}" "${param_name}" "${iArch}") - if(arch STREQUAL "${arch_key}") - string(JSON param_values GET "${JSON_CONTENT}" "${TYPE}" "${param_name}" "${arch_key}") + if(arch STREQUAL "default_cpu" AND NOT TYPE STREQUAL "PAR") + message(FATAL_ERROR "Bogus entry ${param_name} for ${arch}") + endif() + if(do_all_architectures GREATER -1) + if(arch_list_output AND NOT arch MATCHES ^default) + list(APPEND arch_list_output_tmp "${arch}") + endif() + set(list_idx 0) + else() + list(FIND arch_list "${arch}" list_idx) + endif() + if(list_idx GREATER -1) + string(JSON param_values GET "${JSON_CONTENT}" "${TYPE}" "${param_name}" "${arch}") if(TYPE STREQUAL "LB") set(MACRO_NAME "GPUCA_LB_${param_name}") elseif(TYPE STREQUAL "PAR") @@ -36,20 +52,27 @@ function(generate_macros json_content header types arch_key use_ifndef_guard) string(REGEX REPLACE " *\\]$" "" vals "${vals}") string(REGEX REPLACE "\"" "" vals "${vals}") set(MACRO_DEFINITION "#define ${MACRO_NAME} ${vals}") - if(use_ifndef_guard) + if(arch MATCHES ^default) # fallback defaults are wrapped in #ifndef - file(APPEND "${header}" "#ifndef ${MACRO_NAME}\n ${MACRO_DEFINITION}\n#endif\n\n") + string(APPEND OUTPUT_TMP_${arch} "#ifndef ${MACRO_NAME}\n ${MACRO_DEFINITION}\n#endif\n\n") else() - file(APPEND "${header}" "${MACRO_DEFINITION}\n") + string(APPEND OUTPUT_TMP_${arch} "${MACRO_DEFINITION}\n") endif() endif() endforeach() endforeach() endforeach() + foreach(arch IN LISTS arch_list) + set(${output}_${arch} "${OUTPUT_TMP_${arch}}" PARENT_SCOPE) + endforeach() + if(arch_list_output) + list(REMOVE_DUPLICATES arch_list_output_tmp) + list(SORT arch_list_output_tmp) + set(${arch_list_output} "${arch_list_output_tmp}" PARENT_SCOPE) + endif() endfunction() function(generate_gpu_param_header GPU_ARCH OUT_HEADER) - set(GPU_PARAM_JSON ${CMAKE_CURRENT_SOURCE_DIR}/Definitions/Parameters/GPUParameters.json) set(TARGET_ARCH "UNKNOWN") if(GPU_ARCH STREQUAL "AUTO") detect_gpu_arch("ALL") @@ -57,42 +80,42 @@ function(generate_gpu_param_header GPU_ARCH OUT_HEADER) set(TARGET_ARCH ${GPU_ARCH}) endif() file(READ "${GPU_PARAM_JSON}" JSON_CONTENT) - set(TMP_HEADER "${OUT_HEADER}.tmp") - file(WRITE "${TMP_HEADER}" "#ifndef GPUDEFPARAMETERSDEFAULTS_H\n#define GPUDEFPARAMETERSDEFAULTS_H\n\n") - file(APPEND "${TMP_HEADER}" "// This file is auto-generated from gpu_params.json. Do not edit directly.\n") + set(TMP_HEADER "#ifndef GPUDEFPARAMETERSDEFAULTS_H\n#define GPUDEFPARAMETERSDEFAULTS_H\n\n") + string(APPEND TMP_HEADER "// This file is auto-generated from gpu_params.json. Do not edit directly.\n") string(REPLACE "," ";" ARCH_LIST "${TARGET_ARCH}") - file(APPEND "${TMP_HEADER}" "// Architectures: ${TARGET_ARCH}\n\n") - file(APPEND "${TMP_HEADER}" "#if defined(GPUCA_GPUCODE) && !defined(GPUCA_GPUCODE_GENRTC) && !defined(GPUCA_GPUCODE_NO_LAUNCH_BOUNDS) // Avoid including for RTC generation besides normal include protection.\n\n") + string(APPEND TMP_HEADER "// Architectures: ${TARGET_ARCH}\n\n") + string(APPEND TMP_HEADER "#if defined(GPUCA_GPUCODE) && !defined(GPUCA_GPUCODE_GENRTC) && !defined(GPUCA_GPUCODE_NO_LAUNCH_BOUNDS) // Avoid including for RTC generation besides normal include protection.\n\n") # Types set(TYPES CORE LB PAR) # Per architecture definitions - set(_first TRUE) + generate_macros("${JSON_CONTENT}" TMP_OUTPUT "${TYPES}" "${ARCH_LIST};default;default_cpu" "JSON_ARCHITECTURES") + list(FIND ARCH_LIST "ALL" do_all_architectures) + if(ARGC GREATER 2) + set(${ARGV2} "${JSON_ARCHITECTURES}" PARENT_SCOPE) + endif() + if(do_all_architectures GREATER -1) + set(ARCH_LIST ${JSON_ARCHITECTURES}) + endif() + string(APPEND TMP_HEADER "#if 0\n") foreach(ARCH IN LISTS ARCH_LIST) - if(_first) - file(APPEND "${TMP_HEADER}" "#if defined(GPUCA_GPUTYPE_${ARCH})\n\n") - set(_first FALSE) - else() - file(APPEND "${TMP_HEADER}" "#elif defined(GPUCA_GPUTYPE_${ARCH})\n\n") - endif() - generate_macros("${JSON_CONTENT}" "${TMP_HEADER}" "${TYPES}" "${ARCH}" "") + string(APPEND TMP_HEADER "\n#elif defined(GPUCA_GPUTYPE_${ARCH})\n") + string(APPEND TMP_HEADER ${TMP_OUTPUT_${ARCH}}) endforeach() - if(NOT _first) - file(APPEND "${TMP_HEADER}" "#else\n#error GPU TYPE NOT SET\n#endif\n") - endif() + string(APPEND TMP_HEADER "#else\n#error GPU TYPE NOT SET\n#endif\n") # Default parameters - file(APPEND "${TMP_HEADER}" "\n// Default parameters if not defined for the target architecture\n\n") - generate_macros("${JSON_CONTENT}" "${TMP_HEADER}" "${TYPES}" "default" "use_ifndef_guard") - file(APPEND "${TMP_HEADER}" "#endif // defined(GPUCA_GPUCODE) && !defined(GPUCA_GPUCODE_GENRTC) && !defined(GPUCA_GPUCODE_NO_LAUNCH_BOUNDS)\n\n") + string(APPEND TMP_HEADER "\n// Default parameters if not defined for the target architecture\n\n") + string(APPEND TMP_HEADER ${TMP_OUTPUT_default}) + string(APPEND TMP_HEADER "#endif // defined(GPUCA_GPUCODE) && !defined(GPUCA_GPUCODE_GENRTC) && !defined(GPUCA_GPUCODE_NO_LAUNCH_BOUNDS)\n\n") # CPU fallback - file(APPEND "${TMP_HEADER}" "#ifndef GPUCA_GPUCODE_GENRTC //Defaults for non-LB parameters also for CPU fallback\n\n") - generate_macros("${JSON_CONTENT}" "${TMP_HEADER}" "PAR" "default_cpu" "use_ifndef_guard") - file(APPEND "${TMP_HEADER}" "\n#endif // GPUCA_GPUCODE_GENRTC\n") + string(APPEND TMP_HEADER "#ifndef GPUCA_GPUCODE_GENRTC // Defaults for non-LB parameters also for CPU fallback\n\n") + string(APPEND TMP_HEADER ${TMP_OUTPUT_default_cpu}) + string(APPEND TMP_HEADER "\n#endif // GPUCA_GPUCODE_GENRTC\n") - file(APPEND "${TMP_HEADER}" "\n#endif // GPUDEFPARAMETERSDEFAULTS_H\n") - file(RENAME "${TMP_HEADER}" "${OUT_HEADER}") + string(APPEND TMP_HEADER "\n#endif // GPUDEFPARAMETERSDEFAULTS_H\n") + file(GENERATE OUTPUT "${OUT_HEADER}" CONTENT "${TMP_HEADER}") message(STATUS "Generated ${OUT_HEADER}") add_custom_target(GPU_PARAM_HEADER_${GPU_ARCH}_ALL ALL DEPENDS ${OUT_HEADER} ${CMAKE_CURRENT_SOURCE_DIR}/cmake/gpu_param_header_generator.cmake ${GPU_PARAM_JSON}) -endfunction() \ No newline at end of file +endfunction()