1- cmake_minimum_required (VERSION 3.5)
1+ cmake_minimum_required (VERSION 3.5)
22project (sycl-bench)
33
44set (CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR} /cmake)
55set_property (GLOBAL PROPERTY USE_FOLDERS ON )
66
77if (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)
99endif ()
1010
1111set (CMAKE_CXX_STANDARD 17)
1212set (CMAKE_CXX_STANDARD_REQUIRED ON )
1313set (CMAKE_CXX_EXTENSIONS OFF )
1414
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+
1720
1821if (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" )
2229endif ()
2330
2431include (InstallRequiredSystemLibraries)
@@ -28,31 +35,55 @@ include_directories(${CMAKE_SOURCE_DIR}/include)
2835include_directories (${CMAKE_SOURCE_DIR} /polybench/common)
2936
3037set (supported_implementations
31- ComputeCpp
32- hipSYCL
33- LLVM
34- LLVM-CUDA
35- triSYCL
38+ AdaptiveCpp
39+ dpcpp
40+ triSYCL
3641)
3742
3843list (FIND supported_implementations ${SYCL_IMPL} impl_idx)
44+
3945if (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} )" )
4147endif ()
4248
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+
5280elseif (SYCL_IMPL STREQUAL "triSYCL" )
53- find_package (TriSYCL MODULE REQUIRED)
81+ find_package (TriSYCL MODULE REQUIRED)
5482endif ()
5583
84+ # Check if SYCL implementation implements the required SYCL features
85+ include (HasFeatures)
86+
5687set (benchmarks
5788 micro/arith.cpp
5889 micro/DRAM.cpp
@@ -92,42 +123,56 @@ set(benchmarks
92123 polybench/mvt.cpp
93124 polybench/syr2k.cpp
94125 polybench/syrk.cpp
95- #compiletime/compiletime.cpp
96- )
97126
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 ()
100144
101- add_executable (${target} ${benchmark} )
145+ # Setting variables
146+ add_compile_definitions (SYCL_BENCH_HAS_FP64_SUPPORT=$<BOOL :${SYCL_BENCH_HAS_FP64_SUPPORT} >)
102147
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 )
106150
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} )
110152
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 ()
114156
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 ()
118160
119161 if (SYCL_IMPL STREQUAL "triSYCL" )
120162 add_sycl_to_target(${target} )
121163 target_compile_definitions (${target} PRIVATE __TRISYCL__)
122164 endif ()
123-
165+
166+ if (ENABLE_TIME_EVENT_PROFILING)
167+ target_compile_definitions (${target} PUBLIC SYCL_BENCH_ENABLE_QUEUE_PROFILING=1)
168+ endif ()
169+
124170 install (TARGETS ${target} RUNTIME DESTINATION bin/benchmarks/)
125171 get_filename_component (dir ${benchmark} DIRECTORY )
126172 set_property (TARGET ${target} PROPERTY FOLDER ${dir} )
127173endforeach (benchmark)
128174
129175# 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)
132177install (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