@@ -37,6 +37,8 @@ option(USE_HIP "Whether to use HIP for GPU code compilation for AMD GPUs. Set to
3737
3838set (GPU_ARCH gfx90 CACHE STRING "GPU hardware dependent, used for AMD GPUs when USE_HIP=1. Lookup at https://llvm.org/docs/AMDGPUUsage.html#amdgpu-processor-table. Write without fullstop" )
3939
40+ option (USE_CUQUANTUM "Whether to use NVIDIA's cuQuantum library (requires prior installation) in lieu of QuEST's bespoke GPU kernel. Set to 1 to enable." 0)
41+
4042
4143# *****************************************************************************
4244# ***** NO CHANGES SHOULD BE REQUIRED FROM THE USER BEYOND THIS POINT *********
@@ -49,6 +51,7 @@ message(STATUS "OMP acceleration is ${MULTITHREADED}")
4951message (STATUS "MPI distribution is ${DISTRIBUTED} " )
5052if (${GPUACCELERATED} )
5153 message (STATUS "HIP compilation is ${USE_HIP} " )
54+ message (STATUS "cuQuantum compilation is ${USE_CUQUANTUM} " )
5255endif ()
5356
5457
@@ -119,25 +122,28 @@ endif()
119122if (GPUACCELERATED)
120123 if (USE_HIP)
121124
122- if (NOT DEFINED HIP_PATH)
123- if (NOT DEFINED ENV{HIP_PATH})
124- message (WARNING "WARNING: HIP_PATH is not defiend. Using default HIP_PATH=/opt/rocm/hip " ${HIP_VERSION} )
125- set (HIP_PATH "/opt/rocm/hip" CACHE PATH "Path to which HIP has been installed" )
126- else ()
127- set (HIP_PATH $ENV{HIP_PATH} CACHE PATH "Path to which HIP has been installed" )
125+ if (NOT DEFINED HIP_PATH)
126+ if (NOT DEFINED ENV{HIP_PATH})
127+ message (WARNING "WARNING: HIP_PATH is not defiend. Using default HIP_PATH=/opt/rocm/hip " ${HIP_VERSION} )
128+ set (HIP_PATH "/opt/rocm/hip" CACHE PATH "Path to which HIP has been installed" )
129+ else ()
130+ set (HIP_PATH $ENV{HIP_PATH} CACHE PATH "Path to which HIP has been installed" )
131+ endif ()
128132 endif ()
129- endif ()
130133
131- if (EXISTS "${HIP_PATH} " )
132- set (CMAKE_MODULE_PATH "${HIP_PATH} /cmake" ${CMAKE_MODULE_PATH} )
133- find_package (HIP REQUIRED)
134- message (STATUS "Found HIP: " ${HIP_VERSION} )
135- message (STATUS "HIP PATH: " ${HIP_PATH} )
136- endif ()
137-
138- ADD_DEFINITIONS ( -DUSE_HIP )
139- ADD_DEFINITIONS ( -D__HIP_PLATFORM_AMD__ )
134+ if (EXISTS "${HIP_PATH} " )
135+ set (CMAKE_MODULE_PATH "${HIP_PATH} /cmake" ${CMAKE_MODULE_PATH} )
136+ find_package (HIP REQUIRED)
137+ message (STATUS "Found HIP: " ${HIP_VERSION} )
138+ message (STATUS "HIP PATH: " ${HIP_PATH} )
139+ endif ()
140+
141+ ADD_DEFINITIONS ( -DUSE_HIP )
142+ ADD_DEFINITIONS ( -D__HIP_PLATFORM_AMD__ )
140143
144+ elseif (USE_CUQUANTUM)
145+ find_package (CUDA REQUIRED)
146+ ADD_DEFINITIONS ( -DUSE_CUQUANTUM )
141147 else ()
142148 find_package (CUDA REQUIRED)
143149 endif ()
@@ -280,7 +286,12 @@ endif()
280286# ----- C++ COMPILER FLAGS --------------------------------------------------
281287
282288# set C++ flags that are common between compilers and build types
283- set (CMAKE_CXX_STANDARD 98)
289+ if (USE_CUQUANTUM)
290+ set (CMAKE_CXX_STANDARD 14)
291+ set (CMAKE_CXX_STANDARD_REQUIRED ON )
292+ else ()
293+ set (CMAKE_CXX_STANDARD 98)
294+ endif ()
284295
285296# Use -O2 for all but debug mode by default
286297if (NOT ("${CMAKE_BUILD_TYPE} " STREQUAL "Debug" ))
@@ -412,6 +423,14 @@ target_link_libraries(QuEST PUBLIC ${MPI_C_LIBRARIES})
412423# ----- GPU -------------------------------------------------------------------
413424if (USE_HIP)
414425 target_link_libraries (QuEST PUBLIC ${HIP_PATH} /lib/libamdhip64.so )
426+ elseif (USE_CUQUANTUM)
427+ find_library (CUQUANTUM_LIBRARIES custatevec)
428+ if (NOT CUQUANTUM_LIBRARIES)
429+ message (FATAL_ERROR "cuQuantum library (specifically custatevec) not found" )
430+ endif ()
431+
432+ target_link_libraries (QuEST ${CUDA_LIBRARIES} ${CUQUANTUM_LIBRARIES} )
433+ target_include_directories (QuEST PUBLIC "/usr/local/cuda/include" )
415434else ()
416435 target_link_libraries (QuEST ${CUDA_LIBRARIES} )
417436endif ()
0 commit comments