Skip to content

Commit c9a5e23

Browse files
author
jgtong
authored
Merge pull request #11 from oneapi-src/easywave/code_update
[easywave] Updating CMake build scripts
2 parents 5626bb7 + 45f9471 commit c9a5e23

File tree

5 files changed

+85
-33
lines changed

5 files changed

+85
-33
lines changed

easywave/CUDA/CMakeLists.txt

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,26 @@ set(SOURCES
4444
)
4545
include_directories(${CMAKE_SOURCE_DIR}/../common ${CMAKE_SOURCE_DIR}/src ${CMAKE_SOURCE_DIR}/../../infrastructure)
4646

47+
### NVCC RELATED FLAGS START HERE
48+
set(NVCC_WL_CXX_FLAGS "")
49+
set(NVCC_DEF_CXX_FLAGS "-O3 ") # For NVCC
50+
set(NVCC_DEF_COMBINED_FLAGS "${NVCC_WL_CXX_FLAGS} ${NVCC_DEF_CXX_FLAGS}")
51+
### END OF NVCC RELATED FLAGS
52+
53+
if(NOT "${CMAKE_CXX_FLAGS}" STREQUAL "" AND NOT "${OVERRIDE_GENERAL_CXX_FLAGS}" STREQUAL "")
54+
message(FATAL_ERROR "Both CMAKE_CXX_FLAGS and OVERRIDE_GENERAL_CXX_FLAGS cannot be passed in together")
55+
elseif("${CMAKE_CXX_FLAGS}" STREQUAL "" AND "${OVERRIDE_GENERAL_CXX_FLAGS}" STREQUAL "")
56+
message(STATUS "Using DEFAULT compilation flags")
57+
set(CMAKE_CXX_FLAGS "${NVCC_DEF_COMBINED_FLAGS}")
58+
elseif(NOT "${OVERRIDE_GENERAL_CXX_FLAGS}" STREQUAL "")
59+
message(STATUS "OVERRIDING GENERAL compilation flags")
60+
set(CMAKE_CXX_FLAGS "${OVERRIDE_GENERAL_CXX_FLAGS}")
61+
string(APPEND CMAKE_CXX_FLAGS ${NVCC_WL_CXX_FLAGS})
62+
elseif(NOT "${CMAKE_CXX_FLAGS}" STREQUAL "")
63+
message(STATUS "OVERRIDING GENERAL and WORKLOAD SPECIFIC compilation flags")
64+
endif()
65+
66+
4767
if(ENABLE_KERNEL_PROFILING)
4868
message(STATUS "Enabling kernel profiling")
4969
add_compile_options(-DENABLE_KERNEL_PROFILING)

easywave/HIP/CMakeLists.txt

Lines changed: 26 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313
cmake_minimum_required(VERSION 3.10)
1414
project(easywave_hip)
15-
set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} "-Wall -O3 -Wextra -DUSE_HIP -DENABLE_HIP_LOGGING ")
15+
set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} "-Wall -O3 -Wextra -DUSE_HIP -DENABLE_HIP_LOGGING -D__HIP_PLATFORM_AMD__ ")
1616
set(CMAKE_CXX_STANDARD 17)
1717
set(CMAKE_CXX_STANDARD_REQUIRED ON)
1818
set(CMAKE_CXX_EXTENSIONS OFF)
@@ -21,16 +21,34 @@ set(CMAKE_CXX_EXTENSIONS OFF)
2121
option(SHOW_GRID "Show intermediate grid size during propagation" OFF)
2222
option(ENABLE_GPU_TIMINGS "Show GPU timings at end of execution" OFF)
2323

24-
if(NOT DEFINED HIP_PATH AND NOT DEFINED ENV{HIP_PATH})
25-
set(HIP_PATH /opt/rocm/hip CACHE PATH "HIP Path")
24+
if(NOT DEFINED HIP_PATH)
25+
if(NOT DEFINED ENV{HIP_PATH})
26+
set(HIP_PATH "/opt/rocm/hip" CACHE PATH "Path to which HIP has been installed")
27+
else()
28+
set(HIP_PATH $ENV{HIP_PATH} CACHE PATH "Path to which HIP has been installed")
29+
endif()
2630
endif()
27-
list(APPEND CMAKE_MODULE_PATH ${HIP_PATH}/cmake)
31+
set(CMAKE_MODULE_PATH "${HIP_PATH}/cmake" ${CMAKE_MODULE_PATH})
2832

2933
find_package(HIP REQUIRED)
30-
if (NOT HIP_FOUND)
31-
message(FATAL_ERROR "HIP compiler and libraries were not found")
32-
else()
33-
message(STATUS "HIP Compiler found in path " ${HIP_PATH})
34+
35+
### ROCM RELATED FLAGS START HERE
36+
set(ROCM_WL_CXX_FLAGS "")
37+
set(ROCM_DEF_CXX_FLAGS "-O3 -D__HIP_PLATFORM_AMD__ ")
38+
set(ROCM_DEF_COMBINED_FLAGS "${ROCM_WL_CXX_FLAGS} ${ROCM_DEF_CXX_FLAGS}")
39+
### END OF ROCM RELATED FLAGS
40+
41+
if(NOT "${CMAKE_CXX_FLAGS}" STREQUAL "" AND NOT "${OVERRIDE_GENERAL_CXX_FLAGS}" STREQUAL "")
42+
message(FATAL_ERROR "Both CMAKE_CXX_FLAGS and OVERRIDE_GENERAL_CXX_FLAGS cannot be passed in together")
43+
elseif("${CMAKE_CXX_FLAGS}" STREQUAL "" AND "${OVERRIDE_GENERAL_CXX_FLAGS}" STREQUAL "")
44+
message(STATUS "Using DEFAULT compilation flags")
45+
set(CMAKE_CXX_FLAGS "${ROCM_DEF_COMBINED_FLAGS}")
46+
elseif(NOT "${OVERRIDE_GENERAL_CXX_FLAGS}" STREQUAL "")
47+
message(STATUS "OVERRIDING GENERAL compilation flags")
48+
set(CMAKE_CXX_FLAGS "${OVERRIDE_GENERAL_CXX_FLAGS}")
49+
string(APPEND CMAKE_CXX_FLAGS ${ROCM_WL_CXX_FLAGS})
50+
elseif(NOT "${CMAKE_CXX_FLAGS}" STREQUAL "")
51+
message(STATUS "OVERRIDING GENERAL and WORKLOAD SPECIFIC compilation flags")
3452
endif()
3553

3654
if(SHOW_GRID)

easywave/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ To compile the SYCL code on NVIDIA GPUs, please use the following:
3131

3232
To compile the SYCL code on AMD GPUs, please use the following:
3333

34-
`-DUSE_AMDHIP_BACKEND=gfx90a` for MI250 or `-DUSE_AMDHIP_BACKEND=gfx908` for MI100
34+
`-DUSE_AMD_BACKEND=ON -DUSE_AMD_ARCH={gfx90a|gfx908}` for MI250 and MI100 respectively
3535

3636
## CUDA:
3737

easywave/SYCL/CMakeLists.txt

Lines changed: 37 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ option(ENABLE_KERNEL_PROFILING "Build using kernel profiling"
2121
option(GPU_AOT "Build AOT for Intel GPU" OFF)
2222
option(USE_INTEL_CPU "Build AOT for Intel CPU" OFF)
2323
option(USE_NVIDIA_BACKEND "Build for NVIDIA backend" OFF)
24-
option(USE_AMDHIP_BACKEND "Build for AMD HIP backend" OFF)
24+
option(USE_AMD_BACKEND "Build for AMD backend" OFF)
2525
option(SHOW_GRID "Show intermediate grid size during propagation" OFF)
2626
option(ENABLE_GPU_TIMINGS "Show GPU timings at end of execution" OFF)
2727

@@ -68,47 +68,61 @@ endif()
6868
# Use either default or user defined CXX flags
6969
# -DCMAKE_CXX_FLAGS=" -blah -blah " overrides the default flags
7070

71-
set(USE_DEFAULT_FLAGS ON)
72-
set(INTEL_GPU_CXX_FLAGS " -O2 -fsycl -ffast-math ")
73-
set(NVIDIA_GPU_CXX_FLAGS " -O3 -fsycl -ffast-math ")
74-
set(AMD_GPU_CXX_FLAGS " -O3 -fsycl -ffast-math ")
71+
set(DEF_INTEL_GENERAL_CXX_FLAGS " -O2 -fsycl -ffast-math ")
72+
set(DEF_NVIDIA_GENERAL_CXX_FLAGS " -O3 -fsycl -ffast-math ")
73+
set(DEF_AMD_GENERAL_CXX_FLAGS " -O3 -fsycl -ffast-math ")
7574

76-
if("${CMAKE_CXX_FLAGS}" STREQUAL "")
77-
message(STATUS "Using DEFAULT compilation flags for the application")
78-
string(APPEND CMAKE_CXX_FLAGS "${INTEL_GPU_CXX_FLAGS}") # Default flags for NV backend
79-
else()
80-
message(STATUS "OVERRIDING compilation flags")
81-
set(USE_DEFAULT_FLAGS OFF)
75+
set(DEF_INTEL_WL_CXX_FLAGS " ")
76+
set(DEF_NVIDIA_WL_CXX_FLAGS " ")
77+
set(DEF_AMD_WL_CXX_FLAGS " ")
78+
79+
if(NOT "${CMAKE_CXX_FLAGS}" STREQUAL "" AND NOT "${OVERRIDE_GENERAL_CXX_FLAGS}" STREQUAL "")
80+
message(FATAL_ERROR "Both CMAKE_CXX_FLAGS and OVERRIDE_GENERAL_CXX_FLAGS cannot be passed in together")
81+
elseif("${CMAKE_CXX_FLAGS}" STREQUAL "" AND "${OVERRIDE_GENERAL_CXX_FLAGS}" STREQUAL "")
82+
message(STATUS "Using DEFAULT compilation flags")
83+
set(INTEL_GPU_CXX_FLAGS "${DEF_INTEL_GENERAL_CXX_FLAGS} ${DEF_INTEL_WL_CXX_FLAGS}")
84+
set(NVIDIA_GPU_CXX_FLAGS "${DEF_NVIDIA_GENERAL_CXX_FLAGS} ${DEF_NVIDIA_WL_CXX_FLAGS}")
85+
set(AMD_GPU_CXX_FLAGS "${DEF_AMD_GENERAL_CXX_FLAGS} ${DEF_AMD_WL_CXX_FLAGS}")
86+
elseif(NOT "${OVERRIDE_GENERAL_CXX_FLAGS}" STREQUAL "")
87+
message(STATUS "OVERRIDING GENERAL compilation flags")
88+
set(INTEL_GPU_CXX_FLAGS "${OVERRIDE_GENERAL_CXX_FLAGS} ${DEF_INTEL_WL_CXX_FLAGS}")
89+
set(NVIDIA_GPU_CXX_FLAGS "${OVERRIDE_GENERAL_CXX_FLAGS} ${DEF_NVIDIA_WL_CXX_FLAGS}")
90+
set(AMD_GPU_CXX_FLAGS "${OVERRIDE_GENERAL_CXX_FLAGS} ${DEF_AMD_WL_CXX_FLAGS}")
91+
elseif(NOT "${CMAKE_CXX_FLAGS}" STREQUAL "")
92+
message(STATUS "OVERRIDING GENERAL and WORKLOAD SPECIFIC compilation flags")
93+
set(INTEL_GPU_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
94+
set(NVIDIA_GPU_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
95+
set(AMD_GPU_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
8296
endif()
8397

8498
# JIT compilation
85-
if(GPU_AOT)
99+
if(GPU_AOT)
100+
set(CMAKE_CXX_FLAGS "${INTEL_GPU_CXX_FLAGS}") # Default flags for Intel backend
86101
if( (${GPU_AOT} STREQUAL "pvc") OR (${GPU_AOT} STREQUAL "PVC") )
87102
message(STATUS "Enabling Intel GPU AOT compilation for ${GPU_AOT}")
88103
string(APPEND CMAKE_CXX_FLAGS " -fsycl-targets=spir64_gen -Xs \"-device 0x0bd5 -revision_id 0x2f\" ")
89104
else()
90105
message(STATUS "Using custom AOT compilation flag ${GPU_AOT}")
91106
string(APPEND CMAKE_CXX_FLAGS " ${GPU_AOT} ") # User should be aware of advanced AOT compilation flags
92107
endif()
93-
elseif(USE_INTEL_CPU)
94-
message(STATUS "Compiling for Intel CPU")
95-
string(APPEND CMAKE_CXX_FLAGS " -ffast-math -mprefer-vector-width=512 -mfma -fsycl-targets=spir64_x86_64 \"-device avx512\" ")
96108
elseif(USE_NVIDIA_BACKEND)
97109
message(STATUS "Enabling NVIDIA backend")
98-
if(USE_DEFAULT_FLAGS)
99-
set(CMAKE_CXX_FLAGS "${NVIDIA_GPU_CXX_FLAGS}") # Default flags for NV backend
100-
endif()
110+
set(CMAKE_CXX_FLAGS "${NVIDIA_GPU_CXX_FLAGS}")
101111
string(APPEND CMAKE_CXX_FLAGS " -fsycl-targets=nvptx64-nvidia-cuda ") # -O3 will be used, even though -O2 was set earlier
102112
if(USE_SM)
103113
message(STATUS "Building for SM_${USE_SM} architecture")
104114
string(APPEND CMAKE_CXX_FLAGS " -Xsycl-target-backend --cuda-gpu-arch=sm_${USE_SM} ")
105115
endif()
106-
elseif(USE_AMDHIP_BACKEND)
107-
message(STATUS "Enabling AMD HIP backend for ${USE_AMDHIP_BACKEND} AMD architecture")
108-
if(USE_DEFAULT_FLAGS)
109-
set(CMAKE_CXX_FLAGS "${AMD_GPU_CXX_FLAGS}")
116+
elseif(USE_AMD_BACKEND)
117+
if ("${USE_AMD_ARCH}" STREQUAL "")
118+
message(FATAL_ERROR "Must specify AMD arch, e.g., -DUSE_AMD_ARCH=gfx90a")
110119
endif()
111-
string(APPEND CMAKE_CXX_FLAGS " -fsycl-targets=amdgcn-amd-amdhsa -Xsycl-target-backend --offload-arch=${USE_AMDHIP_BACKEND} ")
120+
message(STATUS "Enabling AMD backend for ${USE_AMD_ARCH} AMD architecture")
121+
set(CMAKE_CXX_FLAGS "${AMD_GPU_CXX_FLAGS}")
122+
string(APPEND CMAKE_CXX_FLAGS " -fsycl-targets=amdgcn-amd-amdhsa -Xsycl-target-backend --offload-arch=${USE_AMD_ARCH} ")
123+
else()
124+
message(STATUS "Enabling INTEL backend")
125+
set(CMAKE_CXX_FLAGS "${INTEL_GPU_CXX_FLAGS}") # Default flags for Intel backend
112126
endif()
113127

114128
# Output the compiler flags that were constructed for visual inspection

easywave/SYCL/src/ewCudaKernels.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ SYCL_EXTERNAL __attribute__((always_inline)) void fluxUpdate(KernelData data, sy
2828
SYCL_EXTERNAL __attribute__((always_inline)) void fluxBoundary(KernelData data, sycl::nd_item<1> item_ct1);
2929
SYCL_EXTERNAL __attribute__((always_inline)) void gridExtend(KernelData data, sycl::nd_item<1> item_ct1);
3030

31-
#ifdef USE_AMDHIP_BACKEND
31+
#ifdef USE_AMD_BACKEND
3232
#include "ewCudaKernels.cpp"
3333
#endif // llvm-amd backend has a bug
3434

0 commit comments

Comments
 (0)