Skip to content

Commit 42905eb

Browse files
authored
Merge pull request #17 from eth-cscs/main
Update reframe-ci branch to include FFT tests
2 parents fddcea7 + 8b12200 commit 42905eb

File tree

13 files changed

+817
-13
lines changed

13 files changed

+817
-13
lines changed

.gitlab/includes/common_pipeline.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ include:
33

44
.cmake_common:
55
variables:
6-
CMAKE_COMMON_FLAGS: "-S parallel_algos -GNinja -DCMAKE_BUILD_TYPE=Release"
6+
CMAKE_COMMON_FLAGS: "-GNinja -DCMAKE_BUILD_TYPE=Release"
77

88
.build_common:
99
variables:

.gitlab/includes/pipeline_beverin.yml

Lines changed: 40 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,11 @@ stages:
66
- test
77

88
variables:
9-
UENV_IMAGE: "prgenv-gnu/25.07-6.3.3:v5"
10-
WITH_UENV_VIEW: "default-llvm-amdgpu"
9+
UENV_IMAGE: "prgenv-gnu/25.07-6.3.3:v9"
10+
WITH_UENV_VIEW: "default"
1111

1212

13-
build_benchmarks_mi300:
13+
build_parallel_algos_mi300:
1414
extends:
1515
- .uenv-runner-beverin-mi300
1616
- .cmake_common
@@ -21,23 +21,54 @@ build_benchmarks_mi300:
2121
- cmake --version
2222
- hipcc --version || echo "HIP not found in PATH"
2323

24-
- cmake -Bbuild $CMAKE_COMMON_FLAGS
24+
- cmake -B build_parallel_algos $CMAKE_COMMON_FLAGS
25+
-S parallel_algos
2526
-DWITH_HIP=ON
2627
-DWITH_CUDA=OFF
27-
- cmake --build build
28+
- cmake --build build_parallel_algos
2829

2930
artifacts:
3031
paths:
31-
- build/
32+
- build_parallel_algos/
3233
expire_in: 1 hour
3334

3435

35-
test_benchmarks_mi300:
36-
needs: [build_benchmarks_mi300]
36+
test_parallel_algos_mi300:
37+
needs: [build_parallel_algos_mi300]
3738
extends:
3839
- .uenv-runner-beverin-mi300
3940
- .test_common
4041
stage: test
4142
image: $UENV_IMAGE
4243
script:
43-
- ctest --test-dir build --output-on-failure
44+
- ctest --test-dir build_parallel_algos --output-on-failure
45+
46+
47+
build_fft_mi300:
48+
extends:
49+
- .uenv-runner-beverin-mi300
50+
- .cmake_common
51+
- .build_common
52+
stage: build
53+
image: $UENV_IMAGE
54+
script:
55+
- cmake -B build_fft $CMAKE_COMMON_FLAGS
56+
-S fft
57+
-DFFT_BENCH_GPU_BACKEND=ROCM
58+
- cmake --build build_fft
59+
60+
artifacts:
61+
paths:
62+
- build_fft/
63+
expire_in: 1 hour
64+
65+
66+
test_fft_mi300:
67+
needs: [build_fft_mi300]
68+
extends:
69+
- .uenv-runner-beverin-mi300
70+
- .test_common
71+
stage: test
72+
image: $UENV_IMAGE
73+
script:
74+
- ctest --test-dir build_fft --output-on-failure
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
include:
2+
- local: '.gitlab/includes/common_pipeline.yml'
3+
4+
stages:
5+
- build
6+
- test
7+
8+
variables:
9+
UENV_IMAGE: "prgenv-gnu/25.6:v2"
10+
WITH_UENV_VIEW: "default"
11+
SLURM_PARTITION: "normal"
12+
13+
14+
build_parallel_algos_gh200:
15+
extends:
16+
- .uenv-runner-daint-gh200
17+
- .cmake_common
18+
- .build_common
19+
stage: build
20+
image: $UENV_IMAGE
21+
script:
22+
- cmake --version
23+
- nvcc --version || echo "CUDA not found in PATH"
24+
25+
- cmake -B build_parallel_algos $CMAKE_COMMON_FLAGS
26+
-S parallel_algos
27+
-DWITH_HIP=OFF
28+
-DWITH_CUDA=ON
29+
- cmake --build build_parallel_algos
30+
31+
artifacts:
32+
paths:
33+
- build_parallel_algos/
34+
expire_in: 1 hour
35+
36+
37+
test_parallel_algos_gh200:
38+
needs: [build_parallel_algos_gh200]
39+
extends:
40+
- .uenv-runner-daint-gh200
41+
- .test_common
42+
stage: test
43+
image: $UENV_IMAGE
44+
script:
45+
- ctest --test-dir build_parallel_algos --output-on-failure
46+
47+
48+
build_fft_gh200:
49+
extends:
50+
- .uenv-runner-daint-gh200
51+
- .cmake_common
52+
- .build_common
53+
stage: build
54+
image: $UENV_IMAGE
55+
script:
56+
- cmake -B build_fft $CMAKE_COMMON_FLAGS
57+
-S fft
58+
-DFFT_BENCH_GPU_BACKEND=CUDA
59+
- cmake --build build_fft
60+
61+
artifacts:
62+
paths:
63+
- build_fft/
64+
expire_in: 1 hour
65+
66+
67+
test_fft_gh200:
68+
needs: [build_fft_gh200]
69+
extends:
70+
- .uenv-runner-daint-gh200
71+
- .test_common
72+
stage: test
73+
image: $UENV_IMAGE
74+
script:
75+
- ctest --test-dir build_fft --output-on-failure

.gitlab/pipeline_prod.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
include:
2+
- local: '.gitlab/includes/pipeline_daint.yml'

README.md

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,10 @@ Support for both ROCm's rocPRIM and NVIDIA's cub/thrust.
1919
* Prefix sums
2020
* Reductions
2121

22-
## rocSOLVER
22+
## FFT
23+
24+
FFT benchmark for 1D, 2D and 3D transforms.
25+
Supports hipFFT / rocFFT and cuFFT.
2326

24-
## rocFFT
27+
## rocSOLVER
2528

fft/CMakeLists.txt

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
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)

fft/README.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# FFT benchmarks
2+
3+
## Build
4+
CMake options:
5+
- `FFT_BENCH_GPU_BACKEND `: `ROCM` or `CUDA`. Build with ROCm or CUDA.
6+
- `FFT_BENCH_BUNDLED_CLI11`: `ON` or `OFF`. Download header-only library for command line parsing.
7+
8+
## Running
9+
The application accepts the following parameters:
10+
- `-n`: Size of the FFT. Between one and three numbers for 1D, 2D or 3D.
11+
- `-b`: FFT batch size.
12+
- `-s`: Number for samples to combute the mean execution time.
13+
- `-p`: The precision to use for computation (`single` or `double`).
14+
15+
Example:
16+
```
17+
./fft_bench -n -256 256 256 -p double -b 1 -s 10
18+
```
19+

0 commit comments

Comments
 (0)