Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cuda 如何使用NVIDIA K80?_Cuda - Fatal编程技术网

Cuda 如何使用NVIDIA K80?

Cuda 如何使用NVIDIA K80?,cuda,Cuda,机器设置了4个NVIDIA K80,NVIDIA smi的输出是4个卡的信息。他们的GPU ID是0,1,2,3。每个K80都有两种类型的GPU内存:FB和BAR1,都有12GB。但是CUDA程序总是使用FB内存,而BAR1内存是空闲的。当CUDA程序在每个卡中分配超过12 Gb的GPU内存时,将发生内存不足的错误,但BAR1内存仍不能使用 如何在此设置中正确使用BAR1内存 已更新 英伟达smi的部分输出为 Compute Mode: < Default (

机器设置了4个NVIDIA K80,NVIDIA smi的输出是4个卡的信息。他们的GPU ID是
0,1,2,3
。每个K80都有两种类型的GPU内存:
FB
BAR1
,都有12GB。但是CUDA程序总是使用
FB
内存,而
BAR1
内存是空闲的。当CUDA程序在每个卡中分配超过12 Gb的GPU内存时,将发生
内存不足
的错误,但
BAR1
内存仍不能使用

如何在此设置中正确使用
BAR1
内存

已更新 英伟达smi的部分输出为

      Compute Mode:
         < Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) >
    > Peer access from Tesla K80 (GPU0) -> Tesla K80 (GPU1) : Yes
    > Peer access from Tesla K80 (GPU0) -> Tesla K80 (GPU2) : No
    > Peer access from Tesla K80 (GPU0) -> Tesla K80 (GPU3) : No
    > Peer access from Tesla K80 (GPU1) -> Tesla K80 (GPU0) : Yes
    > Peer access from Tesla K80 (GPU1) -> Tesla K80 (GPU2) : No
    > Peer access from Tesla K80 (GPU1) -> Tesla K80 (GPU3) : No
    > Peer access from Tesla K80 (GPU2) -> Tesla K80 (GPU0) : No
    > Peer access from Tesla K80 (GPU2) -> Tesla K80 (GPU1) : No
    > Peer access from Tesla K80 (GPU2) -> Tesla K80 (GPU3) : Yes
    > Peer access from Tesla K80 (GPU3) -> Tesla K80 (GPU0) : No
    > Peer access from Tesla K80 (GPU3) -> Tesla K80 (GPU1) : No
    > Peer access from Tesla K80 (GPU3) -> Tesla K80 (GPU2) : Yes
计算模式:

>来自特斯拉K80(GPU0)->特斯拉K80(GPU1)的对等访问:是
>来自特斯拉K80(GPU0)->特斯拉K80(GPU2)的对等访问:否
>来自特斯拉K80(GPU0)->特斯拉K80(GPU3)的对等访问:否
>来自特斯拉K80(GPU1)->特斯拉K80(GPU0)的对等访问:是
>来自特斯拉K80(GPU1)->特斯拉K80(GPU2)的对等访问:否
>来自特斯拉K80(GPU1)->特斯拉K80(GPU3)的对等访问:否
>来自特斯拉K80(GPU2)->特斯拉K80(GPU0)的对等访问:否
>来自特斯拉K80(GPU2)->特斯拉K80(GPU1)的对等访问:否
>来自特斯拉K80(GPU2)->特斯拉K80(GPU3)的对等访问:是
>来自特斯拉K80(GPU3)->特斯拉K80(GPU0)的对等访问:否
>来自特斯拉K80(GPU3)->特斯拉K80(GPU1)的对等访问:否
>来自特斯拉K80(GPU3)->特斯拉K80(GPU2)的对等访问:是

来自nvidia smi手册页:

BAR1 Memory Usage
       BAR1 is used to map the FB (device memory) so that it can  be  directly
       accessed  by  the CPU or by 3rd party devices (peer-to-peer on the PCIe
       bus).
BAR1是一个虚拟地址空间,映射用于从主机和/或其他启用DMA的设备进行DMA访问的设备内存。
这意味着BAR1不是物理内存,您的K80(如规范中所述)每个GK210B GPU只有12 GB VRAM。当内存耗尽时,您的内存确实不足。

来自nvidia smi的手册页:

BAR1 Memory Usage
       BAR1 is used to map the FB (device memory) so that it can  be  directly
       accessed  by  the CPU or by 3rd party devices (peer-to-peer on the PCIe
       bus).
BAR1是一个虚拟地址空间,映射用于从主机和/或其他启用DMA的设备进行DMA访问的设备内存。
这意味着BAR1不是物理内存,您的K80(如规范中所述)每个GK210B GPU只有12 GB VRAM。当这些内存耗尽时,您的内存确实不足。

您好,谢谢您的回复!我已经用nvidia smi的输出更新了帖子,请检查一下。从这些输出,如果我理解正确的话,似乎只有两个物理K80。GPU0和GPU1属于第一个K80;GPU2和GPU3属于另一个K80。是吗?我试着在多GPU程序中使用这四种设备。在这个程序中,它在这些卡之间进行一些数据传输。如CUDA示例所示,数据传输有两种类型:使用P2P和不使用P2P。在程序中,我们应该检查卡是否相互具有P2P和UVA。如果是,我们可以使用
cudaMemcpyDefault
;如果没有,我们应该首先将数据从源GPU复制到CPU内存,然后复制到目标GPU。我已将
P2P
设置为启用,但
BAR1
内存似乎仍然没有使用。它总是显示“BAR1内存使用总量:16384 MiB已使用:6 MiB空闲:16378 MiB计算模式:默认值”。事实上,我从未见过物理K80卡。机器是小型集群中的一个计算节点。我不知道机器中设置了多少个卡。输出肯定看起来像两个物理卡,每个卡有两个设备。从您的后续评论中不清楚您是否提出了任何特定问题。您好,谢谢您的回复!我已经用nvidia smi的输出更新了帖子,请检查一下。从这些输出,如果我理解正确的话,似乎只有两个物理K80。GPU0和GPU1属于第一个K80;GPU2和GPU3属于另一个K80。是吗?我试着在多GPU程序中使用这四种设备。在这个程序中,它在这些卡之间进行一些数据传输。如CUDA示例所示,数据传输有两种类型:使用P2P和不使用P2P。在程序中,我们应该检查卡是否相互具有P2P和UVA。如果是,我们可以使用
cudaMemcpyDefault
;如果没有,我们应该首先将数据从源GPU复制到CPU内存,然后复制到目标GPU。我已将
P2P
设置为启用,但
BAR1
内存似乎仍然没有使用。它总是显示“BAR1内存使用总量:16384 MiB已使用:6 MiB空闲:16378 MiB计算模式:默认值”。事实上,我从未见过物理K80卡。机器是小型集群中的一个计算节点。我不知道机器中设置了多少个卡。输出肯定看起来像两个物理卡,每个卡有两个设备。从您的后续评论中不清楚您是否提出了任何特定问题。