You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何正确使用-Xnvlink编译选项 实现双NVLink连接NVIDIA GPU算力合并

问题解决方法

1 编译报错原因修复

你当前遇到的undefined reference to main报错和NVLink功能本身无关,是参数使用错误导致的:

  • -Xnvlink是nvcc专用的参数,作用是向CUDA设备侧链接器传递选项,不能直接放在主机链接器的LDFLAGS配置中,主机端的ld链接器无法识别该参数,会导致解析逻辑错乱,无法正确找到程序入口函数。
  • 第一步先删除LDFLAGS末尾的-Xnvlink参数,先保证基础编译流程正常。

2 启用NVLink合并算力的正确配置

要让两块RTX A6000通过NVLink输出合并算力,不需要额外添加特殊的链接标记,按以下步骤配置即可:

  • 首先确认硬件连接正常:执行nvidia-smi topo -m命令,查看两块GPU的互联类型,如果显示为NVx(x为数字,数字越大NVLink带宽越高)则说明硬件和驱动层面NVLink已经正常工作。
  • 编译参数适配:RTX A6000属于安培架构,算力版本为8.6,在CXXFLAGS中添加对应架构的生成参数,能最大化NVLink调度效率:-gencode=arch=compute_86,code=sm_86
  • 运行时启用对等访问:MAGMA本身已经封装了多GPU调度和NVLink适配逻辑,你只需要在代码的MAGMA初始化流程后,调用cudaDeviceEnablePeerAccess()接口开启两块GPU的互相访问权限,MAGMA的多GPU接口会自动识别NVLink通道,自动分配负载使用合并算力。

3 修改后的完整配置示例

CXX = nvcc -std=c++17 -O3
LAPACK = /opt/intel/oneapi/mkl/latest
LAPACK_ANOTHER=/opt/intel/mkl/lib/intel64
MAGMA = /usr/local/magma
INCLUDE_CUDA=/usr/local/cuda/include
LIBCUDA=/usr/local/cuda/lib64

SEARCH_DIRS_INCL=-I${MAGMA}/include -I${INCLUDE_CUDA} -I${LAPACK}/include
SEARCH_DIRS_LINK=-L${LAPACK}/lib/intel64 -L${LAPACK_ANOTHER} -L${LIBCUDA} -L${MAGMA}/lib

CXXFLAGS = -c -DMAGMA_ILP64 -DMKL_ILP64 -m64 ${SEARCH_DIRS_INCL} -gencode=arch=compute_86,code=sm_86

LDFLAGS = ${SEARCH_DIRS_LINK} -lmkl_intel_lp64 -lmkl_gnu_thread -lmkl_core -lgomp -lcuda -lcudart -lcublas -lmagma -lpthread -lm -ldl

SOURCES = main_magma.cpp XSAF_C_magma.cpp
EXECUTABLE = main_magma.exe

4 运行验证

编译完成后,执行nvidia-smi dmon -s p,t命令监控GPU状态,启动你的可执行文件后,如果观察到两块GPU的使用率都接近100%,同时NVLink吞吐量有持续数据输出,就说明已经成功调用两块显卡的合并算力。

内容的提问来源于stack exchange,提问作者user1773603

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 04:15:06