问题标签 [nvlink]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
cuda - 为什么 nvlink 警告我缺少 sm_20(计算能力 2.0)目标代码?
我正在使用 GTX Titan 卡(计算能力 3.5)的机器上使用 CUDA 6.5。我正在构建我的代码-gencode=arch=compute_30,code=sm_30 -gencode=arch=compute_35,code=sm_35
- 当我链接我的二进制文件时,nvlink 说:
为什么它会警告我?我需要sm_20
一些我不知道的东西吗?如果仅仅是因为缺乏较低的计算能力支持,那为什么不sm_10
呢?(另外,如果它是免费的,我该如何关闭警告?)
cuda - cudaMemcpyAsync 的奇怪行为: 1. cudaMemcpyKind 没有区别。2. 复制失败,但静默
我正在熟悉一个配备 Pascal P100 GPUs+Nvlink 的新集群。我编写了一个乒乓程序来测试 gpu<->gpu 和 gpu<->cpu 带宽和点对点访问。(我知道 cuda 样本包含这样的程序,但我想自己做以便更好地理解。) Nvlink 带宽似乎是合理的(双向约 35 GB/s,理论最大值为 40)。然而,在调试乒乓球时,我发现了一些奇怪的行为。
首先,无论我指定什么 cudaMemcpyKind,cudaMemcpyAsync 都会成功,例如,如果 cudaMemcpyAsync 正在将内存从主机复制到设备,即使我将 cudaMemcpyDeviceToHost 作为类型传递,它也会成功。
其次,当主机内存没有页面锁定时,cudaMemcpyAsync 会执行以下操作:
- 将内存从主机复制到设备似乎成功(没有段错误或 cuda 运行时错误,并且数据似乎可以正确传输)。
- 将内存从设备复制到主机失败:没有发生segfault,并且在memcpy返回cudaSuccess后cudaDeviceSynchronize,但检查数据发现gpu上的数据没有正确传输到主机。
这种行为是可以预期的吗?我已经包含了一个在我的系统上演示它的最小工作示例代码(该示例不是 ping-pong 应用程序,它所做的只是使用各种参数测试 cudaMemcpyAsync)。
P100 启用了 UVA,因此我认为 cudaMemcpyAsync 只是简单地推断 src 和 dst 指针的位置并忽略 cudaMemcpyKind 参数是合理的。但是,我不确定为什么 cudaMemcpyAsync 无法为非页面锁定的主机内存抛出错误。我的印象是严格禁止。
cuda - nvlink 可以从单独的编译单元中内联设备功能吗?
如果作为输入提供的单独编译单元nvlink
包含 cuda 内核和调用标记为的设备函数的设备函数__forceinline__
,这些函数是否会被内联?假设如果将所有源代码放入一个文件中,它们将被内联。
tensorflow - 使用 NCCL all_sum 测试在 NVLINK 上看不到任何传输
使用以下代码(使用tensorflow.contrib.nccl.all_sum
),我希望看到通过 NVLINK 传输的字节。实际上,我没有。
我的机器是一个 AWS 实例p3.8xlarge
。我的理解是,这个配置支持NVLINK。
执行很好,但是当我使用nvidia-smi nvlink -g 0 -i 0
链接时,Tx/Rx 计数为零。
deep-learning - NVLink 是否使用 DistributedDataParallel 加速训练?
Nvidia 的NVLink加速了同一台机器上多个 GPU 之间的数据传输。我使用 PyTorch 在这样的机器上训练大型模型。
我明白为什么 NVLink 会使模型并行训练更快,因为一次通过模型将涉及多个 GPU。
但它会加速使用DistributedDataParallel的数据并行训练过程吗?
c++ - OpenACC nvlink 未定义类的引用
我是 OpenACC 的新手,我正在从头开始编写一个新程序(我很清楚以前处理类似问题的循环计算成本高昂)。我从 nvlink 得到一个“未定义的引用”。根据我的研究,我发现这是因为没有为我创建的类生成设备代码。但是,我不明白为什么会发生这种情况以及如何解决它。
下面我从我的代码中发送一个 MWE。
包括/vec1.h
src/vec1.cpp
vec1_test_gpu.cpp
我按以下方式编译它们
错误消息出现在最后一个命令之后并显示nvlink error : Undefined reference to '_ZN4Vec1mlEd' in '/tmp/nvc++jOtCBiT_m38d.o'
c++ - N-body OpenCL 代码:错误 CL_OUT_OF_HOST_MEMORY 与 GPU 卡 NVIDIA A6000
我想运行一个使用 OpenCL 的旧 N-body。
我有 2 张 NVIDIA A6000 卡NVLink
,这是一个从硬件(可能还有软件?)角度绑定的组件,这 2 张 GPU 卡。
但在执行时,我得到以下结果:
下面是使用的内核代码(我已经放了我估计对 NVIDIA 卡有用的编译指示):
设置内核代码的部分代码如下:
因此,错误发生在创建内核代码时。有没有办法将其视为the 2 GPU
独特的 GPU NVLINK component
?我的意思是从软件的角度来看?
如何解决创建内核代码的错误?
更新 1
I) 我自愿通过修改下面的这个循环将 GPU 设备的数量限制为只有一个 GPU(实际上,它仍然只有一个迭代):
并在经典电话之后做:
但错误仍然存在,在消息下方:
II)如果我不修改此循环并应用建议的解决方案,即设置devices[current_device]
而不是devices
我得到如下编译错误:
我怎样才能绕过这个编译问题?
更新 2
我status
在这部分代码中打印了变量的值:
我得到了status = -44
. 从CL/cl.h
,它将对应一个CL_INVALID_PROGRAM
错误:
然后,当我执行应用程序时,我得到:
我想知道我是否没有错过在内核代码中添加特殊的编译指示,因为我在 NVIDIA 卡上使用 OpenCL,不是吗?
顺便问一下,变量的类型是devices
什么?我无法正确打印它。
更新 3
我添加了以下几行,但仍在-44 error
执行中。我没有放置所有相关代码,而是提供以下链接来下载源文件:http: //31.207.36.11/NBody.cpp和用于编译的 Makefile:http: //31.207.36.11/Makefile。也许有人会发现一些错误,但我主要想知道我为什么会得到这个error -44
。
更新 4
我正在接手这个项目。
这是 clinfo 命令的结果:
所以我有一个带有 2 个 GPU 卡 A6000 的平台。
鉴于我想运行我的代码的原始版本(即使用 a single GPU card
),我必须在源代码中只选择一个 ID NBody.cpp
(我将在第二次看到如何使用 2 个 GPU 卡进行管理,但这是为了后)。所以,我刚刚在这个来源中进行了修改。
代替:
我做了:
如你所见,我已经强行考虑到了deviceIds[0]
,也就是单GPU卡。
一个关键点也是构建程序的一部分。
status1
在执行时,我得到了and的以下值status2
:
第一个错误是内核创建失败。这是我的NBody_Kernels.cl
来源:
修改后的源代码可以在这里找到:
我不知道如何解决创建此内核代码以及以下值status1 = -44
和status2 = -44
.
更新 5
我在代码中添加clGetProgramBuildInfo
了以下代码片段,以便能够查看clCreateKernl failed
错误的问题:
不幸的是,这个函数clGetProgramBuildInfo
只给出输出:
如何打印“ value
”的内容?
更新 6
如果我做一个printf
:
我得到一个status=-6
对应于CL_OUT_OF_HOST_MEMORY
哪些轨道可以解决这个问题?
部分解决方案
通过使用 Intel 编译器 (icc
和icpc
) 进行编译,可以很好地执行编译并且代码运行良好。我不明白为什么它不适用于GNU gcc/g++-8
编译器。如果有人有想法...
cuda - 使用NCCL时如何指定Nvlink类型
在 DGX-1 系统(8xV100)中,有两种类型的 NVlink:NVlink-V1 和 NVlink-V2,
我们有什么方法可以明确指定我们用于 p2p 和集体通信的 NVlink 类型?
c++ - 有没有一种方法可以结合 2 个 GPU 卡的功能来逆大矩阵 120k x 120k 双精度
在 Debian 10 上,我有 2 个带有 NVlink 硬件组件的 GPU 卡 RTX A6000,我希望受益于这两张卡的潜在组合功能。
目前,我有以下由 Makefile 调用的 magma.make :
当我执行我的代码时,我有内存错误,因为在这段代码中,我尝试逆矩阵 size 120k x 120k
。
如果我们仔细观察,120k x 120k 矩阵需要双精度:120k x 120k x 8 字节,因此差不多 108GB。
隐含的函数不能接受单精度。
不幸的是,我有 2 个 48GB 的 NVIDIA GPU 卡:
问题 :
从计算的角度或从编码的角度来看,有没有办法合并 2 个 GPU 卡的 2 个内存(将提供 96GB)以反转这些大矩阵?
我正在使用MAGMA
这样的编译和反演例程:
如果这不可能直接使用两个 GPU 卡之间的 NVlink 硬件组件来实现,我们可以找到哪种解决方法来允许这种矩阵反转?
编辑 :
@user2357112supportsMonica
. 感谢您的快速答复。是的,如您所见,我意识到我没有足够的内存来存储 120k x 120k。但我们的目标是以 60k x 60k 矩阵为例,大概是 54GB:在这种情况下,我怎样才能合并两个 48GB GPU 卡的能力,以便能够反转这个 54GB 矩阵?我正在使用岩浆。
如果我可以将 GPU 内存与 2 张卡合并,也许第三张 48GB 的 GPU 卡可以让我反转 120k x 120k:你怎么看?