@@ -53,8 +53,8 @@ endif (__GIT_EXECUTABLE)
53
53
54
54
# This must be set because version tags
55
55
set (HYDROGEN_VERSION_MAJOR 1)
56
- set (HYDROGEN_VERSION_MINOR 3 )
57
- set (HYDROGEN_VERSION_PATCH 4 )
56
+ set (HYDROGEN_VERSION_MINOR 4 )
57
+ set (HYDROGEN_VERSION_PATCH 0 )
58
58
set (HYDROGEN_VERSION_MAJOR_MINOR
59
59
"${HYDROGEN_VERSION_MAJOR} .${HYDROGEN_VERSION_MINOR} " )
60
60
set (HYDROGEN_VERSION
@@ -154,20 +154,32 @@ option(Hydrogen_ENABLE_CUDA
154
154
"Search for CUDA support and enable related features if found."
155
155
OFF )
156
156
157
- if (Hydrogen_ENABLE_CUDA)
157
+ option (Hydrogen_ENABLE_ROCM
158
+ "Search for ROCm/HIP support and enable related features if found."
159
+ OFF )
160
+
161
+ if (Hydrogen_ENABLE_CUDA OR Hydrogen_ENABLE_ROCM)
158
162
option (Hydrogen_ENABLE_CUB
159
163
"Search for CUB support and enable related features if found."
160
164
ON )
161
165
162
- option (Hydrogen_ENABLE_CUBLAS_TENSOR_MATH
163
- "Use the cuBLAS tensor operation math ."
166
+ option (Hydrogen_ENABLE_GPU_TENSOR_MATH
167
+ "Use the GPU tensor operations when available ."
164
168
OFF )
165
169
166
170
option (Hydrogen_ENABLE_GPU_FP16
167
171
"Enable FP16 arithmetic in GPU code."
168
172
ON )
169
173
endif ()
170
174
175
+ if (Hydrogen_ENABLE_ROCM AND Hydrogen_ENABLE_CUDA)
176
+ message (FATAL_ERROR
177
+ "ROCm and CUDA code paths are mutually exclusive. "
178
+ "Please enable the one that corresponds to your hardware. "
179
+ "If you have mixed hardware, please contact the Hydrogen developers "
180
+ "as this would be of great interest." )
181
+ endif ()
182
+
171
183
#
172
184
# MEMORY-RELATED OPTIONS
173
185
#
@@ -334,8 +346,8 @@ if (Hydrogen_ENABLE_CUDA)
334
346
find_package (CUDA REQUIRED) # Enable all the macros
335
347
find_package (NVML REQUIRED)
336
348
337
- if (Hydrogen_ENABLE_CUBLAS_TENSOR_MATH )
338
- set (HYDROGEN_CUBLAS_USE_TENSOR_OP_MATH TRUE )
349
+ if (Hydrogen_ENABLE_GPU_TENSOR_MATH )
350
+ set (HYDROGEN_GPU_USE_TENSOR_OP_MATH TRUE )
339
351
endif ()
340
352
341
353
if (Hydrogen_ENABLE_GPU_FP16)
@@ -387,38 +399,64 @@ if (Hydrogen_ENABLE_CUDA)
387
399
set (HYDROGEN_HAVE_CUDA FALSE )
388
400
389
401
endif ()
390
-
391
402
endif (Hydrogen_ENABLE_CUDA)
392
403
393
- set (HYDROGEN_HAVE_GPU ${HYDROGEN_HAVE_CUDA} )
404
+ if (Hydrogen_ENABLE_ROCM)
405
+ set (CMAKE_MODULE_PATH "/opt/rocm/hip/cmake" ${CMAKE_MODULE_PATH} )
406
+ find_package (HIP REQUIRED)
407
+
408
+ if (Hydrogen_ENABLE_CUB)
409
+ set (CMAKE_PREFIX_PATH "/opt/rocm/hip" ${CMAKE_PREFIX_PATH} )
410
+ set (HIP_FOUND FALSE )
411
+ find_package (HIP CONFIG REQUIRED)
412
+ find_package (rocPRIM REQUIRED)
413
+ find_package (hipCUB REQUIRED)
414
+ set (HYDROGEN_HAVE_CUB TRUE )
415
+ else ()
416
+ set (HYDROGEN_HAVE_CUB FALSE )
417
+ endif ()
418
+
419
+ if (HIP_FOUND)
420
+ set (CMAKE_CXX_EXTENSIONS FALSE )
421
+ find_package (ROCBLAS REQUIRED)
422
+ set (HYDROGEN_HAVE_ROCM TRUE )
423
+ message (STATUS "Found ROCm/HIP toolchain. Using HIP/ROCm." )
424
+ else ()
425
+ message (FATAL_ERROR "ROCm requested but not found." )
426
+ endif ()
427
+ endif (Hydrogen_ENABLE_ROCM)
428
+
429
+ if (HYDROGEN_HAVE_CUDA OR HYDROGEN_HAVE_ROCM)
430
+ set (HYDROGEN_HAVE_GPU TRUE )
431
+ endif ()
394
432
395
433
if (Hydrogen_ENABLE_ALUMINUM)
396
- find_package (Aluminum 0.3 .0 NO_MODULE
434
+ find_package (Aluminum 0.4 .0 NO_MODULE
397
435
HINTS ${Aluminum_DIR} ${ALUMINUM_DIR} ${AL_DIR}
398
436
$ENV{Aluminum_DIR} $ENV{ALUMINUM_DIR} $ENV{AL_DIR}
399
437
PATH_SUFFIXES lib64/cmake/aluminum lib/cmake/aluminum
400
438
NO_DEFAULT_PATH)
401
439
if (NOT Aluminum_FOUND)
402
- find_package (Aluminum 0.3 .0 NO_MODULE)
440
+ find_package (Aluminum 0.4 .0 NO_MODULE)
403
441
endif ()
404
442
405
443
if (Aluminum_FOUND)
406
444
set (HYDROGEN_HAVE_ALUMINUM TRUE )
407
445
message (STATUS "Found Aluminum: ${Aluminum_DIR} " )
408
446
409
- if (HYDROGEN_HAVE_CUDA AND AL_HAS_NCCL)
447
+ if (HYDROGEN_HAVE_GPU AND AL_HAS_NCCL)
410
448
set (HYDROGEN_HAVE_NCCL2 TRUE )
411
449
message (STATUS "Aluminum detected with NCCL2 backend support." )
412
450
else ()
413
451
set (HYDROGEN_HAVE_NCCL2 FALSE )
414
- endif (HYDROGEN_HAVE_CUDA AND AL_HAS_NCCL)
452
+ endif (HYDROGEN_HAVE_GPU AND AL_HAS_NCCL)
415
453
416
- if (HYDROGEN_HAVE_CUDA AND AL_HAS_MPI_CUDA)
454
+ if (HYDROGEN_HAVE_GPU AND AL_HAS_MPI_CUDA)
417
455
set (HYDROGEN_HAVE_AL_MPI_CUDA TRUE )
418
456
message (STATUS "Aluminum detected with MPI-CUDA backend support." )
419
457
else ()
420
458
set (HYDROGEN_HAVE_AL_MPI_CUDA FALSE )
421
- endif (HYDROGEN_HAVE_CUDA AND AL_HAS_MPI_CUDA)
459
+ endif (HYDROGEN_HAVE_GPU AND AL_HAS_MPI_CUDA)
422
460
else ()
423
461
set (HYDROGEN_HAVE_ALUMINUM FALSE )
424
462
set (HYDROGEN_HAVE_NCCL2 FALSE )
@@ -497,7 +535,12 @@ configure_file("${PROJECT_SOURCE_DIR}/cmake/configure_files/hydrogen_config.h.in
497
535
configure_file ("${PROJECT_SOURCE_DIR} /doxy/Doxyfile.in"
498
536
"${PROJECT_BINARY_DIR} /doxy/Doxyfile" )
499
537
500
- add_library (Hydrogen_CXX "${HYDROGEN_SOURCES} " "${HYDROGEN_HEADERS} " )
538
+ if (HYDROGEN_HAVE_ROCM)
539
+ hip_add_library(Hydrogen_CXX "${HYDROGEN_SOURCES} " "${HYDROGEN_HEADERS} " )
540
+ else ()
541
+ add_library (Hydrogen_CXX "${HYDROGEN_SOURCES} " "${HYDROGEN_HEADERS} " )
542
+ endif ()
543
+
501
544
target_include_directories (Hydrogen_CXX PUBLIC
502
545
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR} /include >
503
546
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR} /include /El>
@@ -509,40 +552,60 @@ target_include_directories(Hydrogen_CXX PUBLIC
509
552
# be forced to build with that (even though they maybe should)...
510
553
target_compile_options (Hydrogen_CXX PRIVATE ${EXTRA_CXX_FLAGS} )
511
554
512
- target_link_libraries (Hydrogen_CXX PUBLIC ${Aluminum_LIBRARIES} )
513
- target_link_libraries ( Hydrogen_CXX PUBLIC ${HALF_LIBRARIES} )
514
-
515
- if ( TARGET OpenMP::OpenMP_CXX)
516
- target_link_libraries (Hydrogen_CXX PUBLIC OpenMP::OpenMP_CXX)
517
- endif ()
518
- target_link_libraries (Hydrogen_CXX PUBLIC MPI::MPI_CXX)
519
- target_link_libraries (Hydrogen_CXX PUBLIC LAPACK::lapack)
520
- target_link_libraries (Hydrogen_CXX PUBLIC EP::extended_precision)
521
-
522
- target_link_libraries (Hydrogen_CXX PUBLIC ${VTUNE_LIBRARIES} )
523
- target_link_libraries (Hydrogen_CXX PUBLIC ${NVTX_LIBRARIES} )
524
- if (HYDROGEN_HAVE_CUDA)
525
- target_link_libraries (Hydrogen_CXX PUBLIC cuda::toolkit)
526
- endif ( )
555
+ target_link_libraries (
556
+ Hydrogen_CXX PUBLIC
557
+ ${Aluminum_LIBRARIES}
558
+ ${HALF_LIBRARIES}
559
+ ${VTUNE_LIBRARIES}
560
+ ${NVTX_LIBRARIES}
561
+ ${ROCBLAS_LIBRARIES}
562
+ $<TARGET_NAME_IF_EXISTS:OpenMP::OpenMP_CXX>
563
+ $<TARGET_NAME_IF_EXISTS:MPI::MPI_CXX>
564
+ $<TARGET_NAME_IF_EXISTS:LAPACK::lapack>
565
+ $<TARGET_NAME_IF_EXISTS:EP::extended_precision>
566
+ $<TARGET_NAME_IF_EXISTS:cuda::toolkit>
567
+ $<TARGET_NAME_IF_EXISTS:hip::rocprim_hip>
568
+ $<TARGET_NAME_IF_EXISTS:hip::hipcub>
569
+ )
527
570
528
571
# Add the CXX library to "Hydrogen"
529
572
set (HYDROGEN_LIBRARIES Hydrogen_CXX)
530
573
531
574
if (HYDROGEN_HAVE_CUDA)
532
- add_library (Hydrogen_CUDA "${HYDROGEN_CUDA_SOURCES } " )
575
+ add_library (Hydrogen_CUDA "${HYDROGEN_GPU_SOURCES } " )
533
576
target_include_directories (Hydrogen_CUDA PUBLIC
534
577
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR} /include >
535
578
$<BUILD_INTERFACE:${PROJECT_BINARY_DIR} /include >
536
579
$<INSTALL_INTERFACE:include >)
537
580
538
- target_link_libraries (Hydrogen_CUDA PUBLIC ${HALF_LIBRARIES} )
539
- target_link_libraries (Hydrogen_CUDA PUBLIC ${NVTX_LIBRARIES} )
540
- target_link_libraries (Hydrogen_CUDA PUBLIC cuda::toolkit)
581
+ target_link_libraries (
582
+ Hydrogen_CUDA PUBLIC
583
+ ${HALF_LIBRARIES}
584
+ ${NVTX_LIBRARIES}
585
+ $<TARGET_NAME_IF_EXISTS:cuda::toolkit>
586
+ )
541
587
542
588
target_link_libraries (Hydrogen_CXX PUBLIC Hydrogen_CUDA)
543
589
list (APPEND HYDROGEN_LIBRARIES Hydrogen_CUDA)
544
590
endif ()
545
591
592
+ if (HYDROGEN_HAVE_ROCM)
593
+ hip_add_library(Hydrogen_ROCM STATIC "${HYDROGEN_GPU_SOURCES} " )
594
+ target_include_directories (Hydrogen_ROCM PUBLIC
595
+ $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR} /include >
596
+ $<BUILD_INTERFACE:${PROJECT_BINARY_DIR} /include >
597
+ $<INSTALL_INTERFACE:include >
598
+ )
599
+
600
+ target_link_libraries (Hydrogen_ROCM PUBLIC
601
+ ${HALF_LIBRARIES}
602
+ ${ROCBLAS_LIBRARIES}
603
+ )
604
+
605
+ #set_target_properties(Hydrogen_ROCM PROPERTIES LINKER_LANGUAGE CXX)
606
+ list (APPEND HYDROGEN_LIBRARIES Hydrogen_ROCM)
607
+ endif ()
608
+
546
609
# Setup the tests
547
610
if (Hydrogen_ENABLE_TESTING OR Hydrogen_ENABLE_UNIT_TESTS)
548
611
include (CTest)
0 commit comments