问题标签 [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.

0 投票
2 回答
763 浏览

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呢?(另外,如果它是免费的,我该如何关闭警告?)

0 投票
1 回答
1500 浏览

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 无法为非页面锁定的主机内存抛出错误。我的印象是严格禁止。

0 投票
1 回答
78 浏览

cuda - nvlink 可以从单独的编译单元中内联设备功能吗?

如果作为输入提供的单独编译单元nvlink包含 cuda 内核和调用标记为的设备函数的设备函数__forceinline__,这些函数是否会被内联?假设如果将所有源代码放入一个文件中,它们将被内联。

0 投票
0 回答
248 浏览

tensorflow - 使用 NCCL all_sum 测试在 NVLINK 上看不到任何传输

使用以下代码(使用tensorflow.contrib.nccl.all_sum),我希望看到通过 NVLINK 传输的字节。实际上,我没有。

我的机器是一个 AWS 实例p3.8xlarge。我的理解是,这个配置支持NVLINK。

执行很好,但是当我使用nvidia-smi nvlink -g 0 -i 0链接时,Tx/Rx 计数为零。

0 投票
1 回答
454 浏览

deep-learning - NVLink 是否使用 DistributedDataParallel 加速训练?

Nvidia 的NVLink加速了同一台机器上多个 GPU 之间的数据传输。我使用 PyTorch 在这样的机器上训练大型模型。

我明白为什么 NVLink 会使模型并行训练更快,因为一次通过模型将涉及多个 GPU。

但它会加速使用DistributedDataParallel的数据并行训练过程吗?

0 投票
1 回答
114 浏览

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'

0 投票
1 回答
350 浏览

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(实际上,它仍然只有一个迭代):

并在经典电话之后做:

但错误仍然存​​在,在消息下方:

只有一个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 = -44status2 = -44.

更新 5

我在代码中添加clGetProgramBuildInfo了以下代码片段,以便能够查看clCreateKernl failed错误的问题:

不幸的是,这个函数clGetProgramBuildInfo只给出输出:

如何打印“ value”的内容?

更新 6

如果我做一个printf

我得到一个status=-6对应于CL_​OUT_​OF_​HOST_​MEMORY

哪些轨道可以解决这个问题?

部分解决方案

通过使用 Intel 编译器 (iccicpc) 进行编译,可以很好地执行编译并且代码运行良好。我不明白为什么它不适用于GNU gcc/g++-8编译器。如果有人有想法...

0 投票
1 回答
39 浏览

cuda - 使用NCCL时如何指定Nvlink类型

在 DGX-1 系统(8xV100)中,有两种类型的 NVlink:NVlink-V1 和 NVlink-V2,

我们有什么方法可以明确指定我们用于 p2p 和集体通信的 NVlink 类型?

0 投票
1 回答
226 浏览

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:你怎么看?