注意官网的压缩包和 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 架构

image.png

当然注意到有一个警报,但是和我们没什么关系,接下来进到我们的 build 并且开始编译就行了

cd build && make -j

因为 2.9 版本废弃了 v1 的接口,因此跑 make 会有很多的警报,但是不影响我们的构建。

image.png

好了,构建完成,

image.png

最后执行 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 的产物。