1
- cmake_minimum_required (VERSION 3.5)
1
+ cmake_minimum_required (VERSION 3.5)
2
2
project (sycl-bench)
3
3
4
4
set (CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR} /cmake)
5
5
set_property (GLOBAL PROPERTY USE_FOLDERS ON )
6
6
7
7
if (NOT CMAKE_BUILD_TYPE )
8
- set (CMAKE_BUILD_TYPE "Release" CACHE STRING "CMake Build Type" FORCE)
8
+ set (CMAKE_BUILD_TYPE "Release" CACHE STRING "CMake Build Type" FORCE)
9
9
endif ()
10
10
11
11
set (CMAKE_CXX_STANDARD 17)
12
12
set (CMAKE_CXX_STANDARD_REQUIRED ON )
13
13
set (CMAKE_CXX_EXTENSIONS OFF )
14
14
15
- # Due to CMake limitations, hipSYCL requires C++ standard to be set manually
16
- set (CMAKE_SYCL_FLAGS "${CMAKE_SYCL_FLAGS} -std=c++17" )
15
+ # Default build flags
16
+ set (CMAKE_CXX_FLAGS_DEBUG "-O0 -g -DDEBUG -fno-omit-frame-pointer" CACHE STRING "Flags used by the C++ compiler during debug builds." FORCE)
17
+ set (CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG -march=native -ffast-math" CACHE STRING "Flags used by the C++ compiler during release builds." FORCE)
18
+ set (CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -DNDEBUG -march=native -ffast-math -g -fno-omit-frame-pointer" CACHE STRING "Flags used by the C++ compiler during release builds with debug info." FORCE)
19
+
17
20
18
21
if (CMAKE_GENERATOR STREQUAL "Ninja" )
19
- set (CMAKE_SYCL_FLAGS "${CMAKE_SYCL_FLAGS} -fdiagnostics-color=always" )
20
- set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fdiagnostics-color=always" )
21
- set (COMPUTECPP_USER_FLAGS "${COMPUTECPP_USER_FLAGS} -fdiagnostics-color=always" )
22
+ set (CMAKE_SYCL_FLAGS "${CMAKE_SYCL_FLAGS} -fdiagnostics-color=always" )
23
+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fdiagnostics-color=always" )
24
+ set (COMPUTECPP_USER_FLAGS "${COMPUTECPP_USER_FLAGS} -fdiagnostics-color=always" )
25
+ endif ()
26
+
27
+ if (SYCL_BENCH_ENABLE_QUEUE_PROFILING)
28
+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DSYCL_BENCH_ENABLE_QUEUE_PROFILING" )
22
29
endif ()
23
30
24
31
include (InstallRequiredSystemLibraries)
@@ -28,31 +35,55 @@ include_directories(${CMAKE_SOURCE_DIR}/include)
28
35
include_directories (${CMAKE_SOURCE_DIR} /polybench/common)
29
36
30
37
set (supported_implementations
31
- ComputeCpp
32
- hipSYCL
33
- LLVM
34
- LLVM-CUDA
35
- triSYCL
38
+ AdaptiveCpp
39
+ dpcpp
40
+ triSYCL
36
41
)
37
42
38
43
list (FIND supported_implementations ${SYCL_IMPL} impl_idx)
44
+
39
45
if (NOT SYCL_IMPL OR impl_idx EQUAL -1)
40
- message (FATAL_ERROR "Please specify SYCL_IMPL (one of: ${supported_implementations} )" )
46
+ message (FATAL_ERROR "Please specify SYCL_IMPL (one of: ${supported_implementations} )" )
41
47
endif ()
42
48
43
- if (SYCL_IMPL STREQUAL "ComputeCpp" )
44
- find_package (ComputeCpp MODULE REQUIRED)
45
- elseif (SYCL_IMPL STREQUAL "hipSYCL" )
46
- find_package (hipSYCL CONFIG REQUIRED)
47
- elseif (SYCL_IMPL STREQUAL "LLVM" )
48
- set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsycl" )
49
- elseif (SYCL_IMPL STREQUAL "LLVM-CUDA" )
50
- set (CMAKE_CXX_FLAGS
51
- "${CMAKE_CXX_FLAGS} -fsycl -fsycl-targets=nvptx64-nvidia-cuda-sycldevice" )
49
+ if (SYCL_IMPL STREQUAL "AdaptiveCpp" )
50
+ find_package (AdaptiveCpp REQUIRED)
51
+ elseif (SYCL_IMPL STREQUAL "dpcpp" )
52
+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsycl" )
53
+
54
+ if (DPCPP_WITH_CUDA_BACKEND)
55
+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsycl-targets=nvptx64-nvidia-cuda" )
56
+
57
+ set (CUDA_ARCH "" CACHE STRING "CUDA device architecture e.g. sm_70" )
58
+
59
+ if (NOT CUDA_ARCH STREQUAL "" )
60
+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Xsycl-target-backend --cuda-gpu-arch=${CUDA_ARCH} " )
61
+ endif ()
62
+ endif ()
63
+
64
+ if (DPCPP_WITH_ROCM_BACKEND)
65
+ set (ROCM_ARCH "" CACHE STRING "ROCm device architecture e.g. gfx908" )
66
+
67
+ if (NOT ROCM_ARCH STREQUAL "" )
68
+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsycl-targets=amd_gpu_${ROCM_ARCH} " )
69
+ endif ()
70
+ endif ()
71
+
72
+ if (DPCPP_WITH_LZ_BACKEND)
73
+ set (LZ_ARCH "" CACHE STRING "Level Zero device architecture e.g. acm-g10" )
74
+
75
+ if (NOT LZ_ARCH STREQUAL "" )
76
+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsycl-targets=${LZ_ARCH} " )
77
+ endif ()
78
+ endif ()
79
+
52
80
elseif (SYCL_IMPL STREQUAL "triSYCL" )
53
- find_package (TriSYCL MODULE REQUIRED)
81
+ find_package (TriSYCL MODULE REQUIRED)
54
82
endif ()
55
83
84
+ # Check if SYCL implementation implements the required SYCL features
85
+ include (HasFeatures)
86
+
56
87
set (benchmarks
57
88
micro/arith.cpp
58
89
micro/DRAM.cpp
@@ -92,42 +123,56 @@ set(benchmarks
92
123
polybench/mvt.cpp
93
124
polybench/syr2k.cpp
94
125
polybench/syrk.cpp
95
- #compiletime/compiletime.cpp
96
- )
97
126
98
- foreach (benchmark IN LISTS benchmarks)
99
- get_filename_component (target ${benchmark} NAME_WE )
127
+ # compiletime/compiletime.cpp
128
+ sycl2020/atomics/atomic_reduction.cpp
129
+ sycl2020/USM/usm_accessors_latency.cpp
130
+ sycl2020/USM/usm_instr_mix.cpp
131
+ sycl2020/USM/usm_pinned_overhead.cpp
132
+ sycl2020/USM/usm_allocation_latency.cpp
133
+ )
134
+ # Selectively add benchmarks based on some SYCL 2020 features
135
+ if (SYCL_BENCH_HAS_SPEC_CONSTANTS)
136
+ list (APPEND benchmarks sycl2020/spec_constants/spec_constant_convolution.cpp)
137
+ endif ()
138
+ if (SYCL_BENCH_HAS_KERNEL_REDUCTIONS)
139
+ list (APPEND benchmarks sycl2020/kernel_reduction/kernel_reduction.cpp)
140
+ endif ()
141
+ if (SYCL_BENCH_HAS_GROUP_ALGORITHMS)
142
+ list (APPEND benchmarks sycl2020/group_algorithms/reduce_over_group.cpp)
143
+ endif ()
100
144
101
- add_executable (${target} ${benchmark} )
145
+ # Setting variables
146
+ add_compile_definitions (SYCL_BENCH_HAS_FP64_SUPPORT=$<BOOL :${SYCL_BENCH_HAS_FP64_SUPPORT} >)
102
147
103
- if (SYCL_IMPL STREQUAL "ComputeCpp" OR SYCL_IMPL STREQUAL "hipSYCL" )
104
- add_sycl_to_target(TARGET ${target} SOURCES ${benchmark} )
105
- endif ()
148
+ foreach (benchmark IN LISTS benchmarks)
149
+ get_filename_component (target ${benchmark} NAME_WE )
106
150
107
- if (SYCL_IMPL STREQUAL "ComputeCpp" AND COMPUTECPP_BITCODE STREQUAL "ptx64" )
108
- target_compile_definitions (${target} PRIVATE SYCL_BENCH_ENABLE_QUEUE_PROFILING)
109
- endif ()
151
+ add_executable (${target} ${benchmark} )
110
152
111
- if (SYCL_IMPL STREQUAL "LLVM " )
112
- target_compile_definitions ( ${target} PRIVATE __LLVM_SYCL__ )
113
- endif ()
153
+ if (SYCL_IMPL STREQUAL "AdaptiveCpp " )
154
+ add_sycl_to_target( TARGET ${target} SOURCES ${benchmark} )
155
+ endif ()
114
156
115
- if (SYCL_IMPL STREQUAL "LLVM-CUDA " )
116
- target_compile_definitions (${target} PRIVATE __LLVM_SYCL_CUDA__ )
117
- endif ()
157
+ if (SYCL_IMPL STREQUAL "dpcpp " )
158
+ target_compile_definitions (${target} PRIVATE __DPCPP__ )
159
+ endif ()
118
160
119
161
if (SYCL_IMPL STREQUAL "triSYCL" )
120
162
add_sycl_to_target(${target} )
121
163
target_compile_definitions (${target} PRIVATE __TRISYCL__)
122
164
endif ()
123
-
165
+
166
+ if (ENABLE_TIME_EVENT_PROFILING)
167
+ target_compile_definitions (${target} PUBLIC SYCL_BENCH_ENABLE_QUEUE_PROFILING=1)
168
+ endif ()
169
+
124
170
install (TARGETS ${target} RUNTIME DESTINATION bin/benchmarks/)
125
171
get_filename_component (dir ${benchmark} DIRECTORY )
126
172
set_property (TARGET ${target} PROPERTY FOLDER ${dir} )
127
173
endforeach (benchmark)
128
174
129
175
# The "compiletime" target should only be used in the context of the compile time evaluation script
130
- #set_target_properties(compiletime PROPERTIES EXCLUDE_FROM_ALL 1)
131
-
176
+ # set_target_properties(compiletime PROPERTIES EXCLUDE_FROM_ALL 1)
132
177
install (PROGRAMS bin/run-suite DESTINATION bin/)
133
- install (FILES ${PROJECT_SOURCE_DIR} /Brommy.bmp DESTINATION share/)
178
+ install (FILES ${PROJECT_SOURCE_DIR} /share/ Brommy.bmp DESTINATION share/)
0 commit comments