注意官网的压缩包和 github 的仓库不同,github 的仓库并没有进行 codegen
。
官方的 README 告诉我们可以构建一个这样的 make.inc
,但是在新版本中似乎无法使用。
BACKEND = cuda
FORT = true
新版本必须指定 GPU 架构。所以笔者用的这样的 make.inc
。因为后面我们用 CMake 构建,因此这里的 make.inc
只影响 codegen
,因此也无所谓。
BACKEND = cuda
FORT = true
GPU_TARGET = sm_80 sm_86 sm_87 sm_89 sm_90 sm_90a
这样子代码才可阅读,可能是考虑到 github 的效率问题,没有上传 codegen
后的代码
接下来就能使用 CMake 构建了,注意这里不要指定太多的 GPU 架构,否则会出现产物的 PC-relative offset overflow:
cmake -S . -B build -DMAGMA_ENABLE_CUDA=ON -DCMAKE_INSTALL_PREFIX=./magma_install -DGPU_TARGET="sm_89 sm_90"
这里的
-DMAGMA_ENABLE_CUDA=ON
是指定启用 CUDA
-DCMAKE_INSTALL_PREFIX
是指定安装的位置
-DGPU_TARGET
是 GPU 架构
当然注意到有一个警报,但是和我们没什么关系,接下来进到我们的 build 并且开始编译就行了
cd build && make -j
因为 2.9 版本废弃了 v1 的接口,因此跑 make
会有很多的警报,但是不影响我们的构建。
好了,构建完成,
最后执行 make install
就会安装到我们的 magma_install
文件夹下,要想更改的话就在 cmake 命令那边修改。
此外,我们的服务器上应该是有了我们的 lapack
库,因此我们不需要另外引入,如果你是 CMake 用户,那么直接
set(MAGMA_INCLUDE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/magma/magma_install/include)
find_library(MAGMA_LIB NAMES magma PATHS ${CMAKE_CURRENT_SOURCE_DIR}/magma/magma_install/lib REQUIRED)
add_executable(test_magma tests/test_magma.cpp)
# --- Set Include Options ---
target_include_directories(test_magma PRIVATE include ${MAGMA_INCLUDE_PATH})
target_link_libraries(test_magma PRIVATE fmt::fmt ${MAGMA_LIB} CUDA::cublas CUDA::cusparse CUDA::cudart)
就能构建对应链接上 magma 的产物。