@@ -28,11 +28,9 @@ cmake_minimum_required(VERSION 3.21)
2828cmake_policy (VERSION 3.21...3.27)
2929
3030# C Language is needed in order to verify Fortran compiler is C-interoperable
31- # CXX language is needed to properly find "hip" package
3231project (SELF VERSION 1.0.0
3332 DESCRIPTION "Spectral Element Library in Fortran"
34- LANGUAGES Fortran C CXX)
35-
33+ LANGUAGES Fortran C)
3634
3735option (SELF_ENABLE_MULTITHREADING "Option to enable CPU multithreading for `do concurrent` loop blocks." OFF )
3836option (SELF_ENABLE_TESTING "Option to enable build of tests. (Default On)" ON )
@@ -48,13 +46,6 @@ if(SELF_ENABLE_MULTITHREADING)
4846 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." )
4947endif ()
5048
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 ()
5849
5950
6051# Fortran compiler requirements
@@ -157,11 +148,7 @@ if(SELF_ENABLE_DOUBLE_PRECISION)
157148 set ( CMAKE_Fortran_FLAGS_PROFILE "${CMAKE_Fortran_FLAGS_PROFILE} -DDOUBLE_PRECISION" )
158149 set ( CMAKE_Fortran_FLAGS_RELEASE "${CMAKE_Fortran_FLAGS_RELEASE} -DDOUBLE_PRECISION" )
159150
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+
165152endif ()
166153
167154if (SELF_ENABLE_GPU)
@@ -172,12 +159,6 @@ if(SELF_ENABLE_GPU)
172159 set ( CMAKE_Fortran_FLAGS_PROFILE "${CMAKE_Fortran_FLAGS_PROFILE} -DENABLE_GPU" )
173160 set ( CMAKE_Fortran_FLAGS_RELEASE "${CMAKE_Fortran_FLAGS_RELEASE} -DENABLE_GPU" )
174161
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-
181162 # Check MPI for GPU awareness
182163 # Add SELF's cmake module directory to the search path
183164 set (CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH} ;${CMAKE_CURRENT_SOURCE_DIR} /cmake" )
@@ -193,49 +174,49 @@ if(SELF_ENABLE_GPU)
193174 if (hip_FOUND)
194175 if (MPI_HAS_QUERY_HIP_SUPPORT)
195176 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)
198179 set ( CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -DHAVE_HIP" )
199180 set ( CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG} -DHAVE_HIP" )
200181 set ( CMAKE_Fortran_FLAGS_COVERAGE "${CMAKE_Fortran_FLAGS_COVERAGE} -DHAVE_HIP" )
201182 set ( CMAKE_Fortran_FLAGS_PROFILE "${CMAKE_Fortran_FLAGS_PROFILE} -DHAVE_HIP" )
202183 set ( CMAKE_Fortran_FLAGS_RELEASE "${CMAKE_Fortran_FLAGS_RELEASE} -DHAVE_HIP" )
203184
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 ()
210192 set ( BACKEND_LIBRARIES hip::device roc::hipblas)
211193 else ()
212194 message ( FATAL_ERROR "MPI installation is not GPU-aware" )
213195 endif ()
214196 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" )
236214 endif ()
215+
216+ set ( BACKEND_LIBRARIES CUDA::cuda_driver CUDA::cudart CUDA::cublas)
217+
237218 else ()
238- message ( FATAL_ERROR "Enabling GPU support requires either HIP or CUDA. " )
219+ message ( FATAL_ERROR "MPI installation is not GPU-aware " )
239220 endif ()
240221 endif ()
241222endif ()
0 commit comments