@@ -28,11 +28,9 @@ cmake_minimum_required(VERSION 3.21)
28
28
cmake_policy (VERSION 3.21...3.27)
29
29
30
30
# C Language is needed in order to verify Fortran compiler is C-interoperable
31
- # CXX language is needed to properly find "hip" package
32
31
project (SELF VERSION 1.0.0
33
32
DESCRIPTION "Spectral Element Library in Fortran"
34
- LANGUAGES Fortran C CXX)
35
-
33
+ LANGUAGES Fortran C)
36
34
37
35
option (SELF_ENABLE_MULTITHREADING "Option to enable CPU multithreading for `do concurrent` loop blocks." OFF )
38
36
option (SELF_ENABLE_TESTING "Option to enable build of tests. (Default On)" ON )
@@ -48,13 +46,6 @@ if(SELF_ENABLE_MULTITHREADING)
48
46
set (SELF_MULITHREADING_NTHREADS "4" CACHE STRING "Number of threads to use for `do concurrent` loop blocks. This option is only used with GNU compilers. Other compilers use OMP_NUM_THREADS environment variable at runtime." )
49
47
endif ()
50
48
51
- if (NOT DEFINED ROCM_PATH)
52
- if (NOT DEFINED ENV{ROCM_PATH})
53
- set (ROCM_PATH "/opt/rocm/" CACHE PATH "Path to which ROCm has been installed" )
54
- else ()
55
- set (ROCM_PATH $ENV{ROCM_PATH} CACHE PATH "Path to which ROCm has been installed" )
56
- endif ()
57
- endif ()
58
49
59
50
60
51
# Fortran compiler requirements
@@ -157,11 +148,7 @@ if(SELF_ENABLE_DOUBLE_PRECISION)
157
148
set ( CMAKE_Fortran_FLAGS_PROFILE "${CMAKE_Fortran_FLAGS_PROFILE} -DDOUBLE_PRECISION" )
158
149
set ( CMAKE_Fortran_FLAGS_RELEASE "${CMAKE_Fortran_FLAGS_RELEASE} -DDOUBLE_PRECISION" )
159
150
160
- set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DDOUBLE_PRECISION" )
161
- set ( CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DDOUBLE_PRECISION" )
162
- set ( CMAKE_CXX_FLAGS_COVERAGE "${CMAKE_CXX_FLAGS_COVERAGE} -DDOUBLE_PRECISION" )
163
- set ( CMAKE_CXX_FLAGS_PROFILE "${CMAKE_CXX_FLAGS_PROFILE} -DDOUBLE_PRECISION" )
164
- set ( CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DDOUBLE_PRECISION" )
151
+
165
152
endif ()
166
153
167
154
if (SELF_ENABLE_GPU)
@@ -172,12 +159,6 @@ if(SELF_ENABLE_GPU)
172
159
set ( CMAKE_Fortran_FLAGS_PROFILE "${CMAKE_Fortran_FLAGS_PROFILE} -DENABLE_GPU" )
173
160
set ( CMAKE_Fortran_FLAGS_RELEASE "${CMAKE_Fortran_FLAGS_RELEASE} -DENABLE_GPU" )
174
161
175
- set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DENABLE_GPU" )
176
- set ( CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DENABLE_GPU" )
177
- set ( CMAKE_CXX_FLAGS_COVERAGE "${CMAKE_CXX_FLAGS_COVERAGE} -DENABLE_GPU" )
178
- set ( CMAKE_CXX_FLAGS_PROFILE "${CMAKE_CXX_FLAGS_PROFILE} -DENABLE_GPU" )
179
- set ( CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DENABLE_GPU" )
180
-
181
162
# Check MPI for GPU awareness
182
163
# Add SELF's cmake module directory to the search path
183
164
set (CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH} ;${CMAKE_CURRENT_SOURCE_DIR} /cmake" )
@@ -193,49 +174,49 @@ if(SELF_ENABLE_GPU)
193
174
if (hip_FOUND)
194
175
if (MPI_HAS_QUERY_HIP_SUPPORT)
195
176
find_package (hipblas REQUIRED)
196
- # message("-- HIP found. Enabling HIP language.")
197
- # enable_language(HIP)
177
+ message ("-- HIP found. Enabling HIP language." )
178
+ enable_language (HIP)
198
179
set ( CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -DHAVE_HIP" )
199
180
set ( CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG} -DHAVE_HIP" )
200
181
set ( CMAKE_Fortran_FLAGS_COVERAGE "${CMAKE_Fortran_FLAGS_COVERAGE} -DHAVE_HIP" )
201
182
set ( CMAKE_Fortran_FLAGS_PROFILE "${CMAKE_Fortran_FLAGS_PROFILE} -DHAVE_HIP" )
202
183
set ( CMAKE_Fortran_FLAGS_RELEASE "${CMAKE_Fortran_FLAGS_RELEASE} -DHAVE_HIP" )
203
184
204
- set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DHAVE_HIP" )
205
- set ( CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DHAVE_HIP" )
206
- set ( CMAKE_CXX_FLAGS_COVERAGE "${CMAKE_CXX_FLAGS_COVERAGE} -DHAVE_HIP" )
207
- set ( CMAKE_CXX_FLAGS_PROFILE "${CMAKE_CXX_FLAGS_PROFILE} -DHAVE_HIP" )
208
- set ( CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DHAVE_HIP" )
209
-
185
+ if (SELF_ENABLE_DOUBLE_PRECISION)
186
+ set ( CMAKE_HIP_FLAGS "${CMAKE_HIP_FLAGS} -DDOUBLE_PRECISION" )
187
+ set ( CMAKE_HIP_FLAGS_DEBUG "${CMAKE_HIP_FLAGS_DEBUG} -DDOUBLE_PRECISION" )
188
+ set ( CMAKE_HIP_FLAGS_COVERAGE "${CMAKE_HIP_FLAGS_COVERAGE} -DDOUBLE_PRECISION" )
189
+ set ( CMAKE_HIP_FLAGS_PROFILE "${CMAKE_HIP_FLAGS_PROFILE} -DDOUBLE_PRECISION" )
190
+ set ( CMAKE_HIP_FLAGS_RELEASE "${CMAKE_HIP_FLAGS_RELEASE} -DDOUBLE_PRECISION" )
191
+ endif ()
210
192
set ( BACKEND_LIBRARIES hip::device roc::hipblas)
211
193
else ()
212
194
message ( FATAL_ERROR "MPI installation is not GPU-aware" )
213
195
endif ()
214
196
else ()
215
- # CUDA (Optional)
216
- find_package (cuda)
217
- if (cuda_FOUND)
218
- if (MPI_HAS_QUERY_CUDA_SUPPORT)
219
- #message("-- CUDA found. Enabling CUDA language.")
220
- #enable_language(CUDA)
221
- set ( CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -DHAVE_CUDA" )
222
- set ( CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG} -DHAVE_CUDA" )
223
- set ( CMAKE_Fortran_FLAGS_COVERAGE "${CMAKE_Fortran_FLAGS_COVERAGE} -DHAVE_CUDA" )
224
- set ( CMAKE_Fortran_FLAGS_PROFILE "${CMAKE_Fortran_FLAGS_PROFILE} -DHAVE_CUDA" )
225
- set ( CMAKE_Fortran_FLAGS_RELEASE "${CMAKE_Fortran_FLAGS_RELEASE} -DHAVE_CUDA" )
226
-
227
- set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DHAVE_CUDA" )
228
- set ( CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DHAVE_CUDA" )
229
- set ( CMAKE_CXX_FLAGS_COVERAGE "${CMAKE_CXX_FLAGS_COVERAGE} -DHAVE_CUDA" )
230
- set ( CMAKE_CXX_FLAGS_PROFILE "${CMAKE_CXX_FLAGS_PROFILE} -DHAVE_CUDA" )
231
- set ( CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DHAVE_CUDA" )
232
-
233
- # TO DO - need cuda libraries and hipblas libraries
234
- else ()
235
- message ( FATAL_ERROR "MPI installation is not GPU-aware" )
197
+ # CUDA
198
+ find_package (CUDAToolkit REQUIRED)
199
+ message ("-- CUDA found. Enabling CUDA language." )
200
+ enable_language (CUDA)
201
+ if (MPI_HAS_QUERY_CUDA_SUPPORT)
202
+ set ( CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -DHAVE_CUDA" )
203
+ set ( CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG} -DHAVE_CUDA" )
204
+ set ( CMAKE_Fortran_FLAGS_COVERAGE "${CMAKE_Fortran_FLAGS_COVERAGE} -DHAVE_CUDA" )
205
+ set ( CMAKE_Fortran_FLAGS_PROFILE "${CMAKE_Fortran_FLAGS_PROFILE} -DHAVE_CUDA" )
206
+ set ( CMAKE_Fortran_FLAGS_RELEASE "${CMAKE_Fortran_FLAGS_RELEASE} -DHAVE_CUDA" )
207
+
208
+ if (SELF_ENABLE_DOUBLE_PRECISION)
209
+ set ( CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} -DDOUBLE_PRECISION" )
210
+ set ( CMAKE_CUDA_FLAGS_DEBUG "${CMAKE_CUDA_FLAGS_DEBUG} -DDOUBLE_PRECISION" )
211
+ set ( CMAKE_CUDA_FLAGS_COVERAGE "${CMAKE_CUDA_FLAGS_COVERAGE} -DDOUBLE_PRECISION" )
212
+ set ( CMAKE_CUDA_FLAGS_PROFILE "${CMAKE_CUDA_FLAGS_PROFILE} -DDOUBLE_PRECISION" )
213
+ set ( CMAKE_CUDA_FLAGS_RELEASE "${CMAKE_CUDA_FLAGS_RELEASE} -DDOUBLE_PRECISION" )
236
214
endif ()
215
+
216
+ set ( BACKEND_LIBRARIES CUDA::cuda_driver CUDA::cudart CUDA::cublas)
217
+
237
218
else ()
238
- message ( FATAL_ERROR "Enabling GPU support requires either HIP or CUDA. " )
219
+ message ( FATAL_ERROR "MPI installation is not GPU-aware " )
239
220
endif ()
240
221
endif ()
241
222
endif ()
0 commit comments