|
| 1 | +cmake_minimum_required(VERSION 3.20 FATAL_ERROR) |
| 2 | +project(rocfft_bench LANGUAGES CXX VERSION 0.1) |
| 3 | + |
| 4 | +# set language and standard |
| 5 | +set(CMAKE_CXX_STANDARD 17) |
| 6 | +set(CMAKE_CUDA_STANDARD 17) |
| 7 | +set(CMAKE_HIP_STANDARD 17) |
| 8 | + |
| 9 | +cmake_policy(SET CMP0135 NEW) |
| 10 | + |
| 11 | +# set default build type to RELEASE |
| 12 | +if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) |
| 13 | + set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Build type" FORCE) |
| 14 | + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS |
| 15 | + "Debug" "Release" "MinSizeRel" "RelWithDebInfo" |
| 16 | + ) |
| 17 | +endif() |
| 18 | + |
| 19 | +# Options |
| 20 | +option(FFT_BENCH_BUNDLED_CLI11 "Use bundled CLI11" ON) |
| 21 | +set(FFT_BENCH_GPU_BACKEND "ROCM" CACHE STRING "GPU backend") |
| 22 | +set_property(CACHE FFT_BENCH_GPU_BACKEND PROPERTY STRINGS |
| 23 | + "CUDA" "ROCM" |
| 24 | + ) |
| 25 | + |
| 26 | +# Get GNU standard install prefixes |
| 27 | +include(GNUInstallDirs) |
| 28 | + |
| 29 | +set(FFT_BENCH_EXTERNAL_LIBS) |
| 30 | + |
| 31 | +# Options combination check |
| 32 | +set(FFT_BENCH_CUDA OFF) |
| 33 | +set(FFT_BENCH_ROCM OFF) |
| 34 | +if(FFT_BENCH_GPU_BACKEND STREQUAL "CUDA") |
| 35 | + set(FFT_BENCH_CUDA ON) |
| 36 | +elseif(FFT_BENCH_GPU_BACKEND STREQUAL "ROCM") |
| 37 | + set(FFT_BENCH_ROCM ON) |
| 38 | +else() |
| 39 | + message(FATAL_ERROR "Invalid GPU backend option") |
| 40 | +endif() |
| 41 | + |
| 42 | + |
| 43 | +# add command line parser |
| 44 | +include(FetchContent) |
| 45 | +if(FFT_BENCH_BUNDLED_CLI11) |
| 46 | + FetchContent_Declare( |
| 47 | + cli11 |
| 48 | + URL https://github.com/CLIUtils/CLI11/archive/refs/tags/v2.6.1.tar.gz |
| 49 | + URL_MD5 e22053ecf400a7205a1bd3029d001ac6 |
| 50 | + ) |
| 51 | + FetchContent_MakeAvailable(cli11) |
| 52 | +else() |
| 53 | + find_package(CLI11 CONFIG REQUIRED) |
| 54 | +endif() |
| 55 | +list(APPEND FFT_BENCH_EXTERNAL_LIBS CLI11::CLI11) |
| 56 | + |
| 57 | + |
| 58 | +if(FFT_BENCH_CUDA) |
| 59 | + find_package(CUDAToolkit REQUIRED) |
| 60 | + list(APPEND FFT_BENCH_EXTERNAL_LIBS CUDA::cudart CUDA::cufft) |
| 61 | +endif() |
| 62 | + |
| 63 | +if(FFT_BENCH_ROCM) |
| 64 | + find_package(hip CONFIG REQUIRED) |
| 65 | + find_package(hipfft CONFIG REQUIRED) |
| 66 | + list(APPEND FFT_BENCH_EXTERNAL_LIBS hip::hipfft hip::host) |
| 67 | +endif() |
| 68 | + |
| 69 | +enable_testing() |
| 70 | + |
| 71 | +add_executable(fft_bench fft_bench.cpp) |
| 72 | +target_link_libraries(fft_bench PRIVATE ${FFT_BENCH_EXTERNAL_LIBS}) |
| 73 | + |
| 74 | +if(FFT_BENCH_CUDA) |
| 75 | + target_compile_options(fft_bench PRIVATE -DFFT_BENCH_CUDA) |
| 76 | +endif() |
| 77 | +if(FFT_BENCH_ROCM) |
| 78 | + target_compile_options(fft_bench PRIVATE -DFFT_BENCH_ROCM) |
| 79 | +endif() |
| 80 | + |
| 81 | +add_test(NAME fft COMMAND fft_bench -n 128 128 -p double -s 5 -b 1) |
0 commit comments