cuda - GPUDirect Peer 2 peer using PCIe bus : If I need to access too much data on other GPU, 不会导致死锁吗?

标签 cuda pci-e multi-gpu

我有一个需要大量数据的模拟程序。 我将数据加载到 GPU 中进行计算,数据中存在很多依赖性。 由于 1 个 GPU 不足以处理数据,所以我将其升级为 2 个 GPU。 但限制是,如果我需要其他 GPU 上的数据,必须先有一个副本到主机。

那么,如果我使用 GPU Direct P2P,PCI 总线是否会处理 GPU 之间那么多的来回通信?不会导致死锁吗?

我是新手,所以需要一些帮助和见解。

最佳答案

PCI Express 在两个方向上都是全速的。不应出现“死锁”,就像您在需要握手才能继续进行的同步 MPI 通信中可能遇到的那样。

正如 Robert 在评论中提到的“通过 PCIE 总线访问数据比从板载内存访问数据要慢得多”。但是,它应该比将数据从 GPU1 传输到 CPU,然后从 CPU 传输到 GPU2 快得多,因为您不必复制两次。

您应该尽量减少 GPU 到 GPU 的传输量,特别是如果您必须在同步数据之前同步数据(在某些算法中可能会发生)。但是,您也可以尝试在传输数据时进行一些并发执行。您可以查看 CUDA C 指南的对等内存部分。 http://docs.nvidia.com/cuda/cuda-c-programming-guide/#peer-to-peer-memory-copy

关于cuda - GPUDirect Peer 2 peer using PCIe bus : If I need to access too much data on other GPU, 不会导致死锁吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27832273/

相关文章:

c++ - 将内核函数的参数作为 C++ 结构传递?

pci - PCIe 中的基地址寄存器 (BAR) 是什么?

OpenGL 多 GPU 支持

c# - .NET 中的多个监视器

c++ - 在 Windows 8 中为 CUDA 禁用 TDR

c++ - 将 OpenCV 图像数据类型转换为 Devil 图像格式,反之亦然

c++ - CUDA 并发内核启动不起作用

linux - ISR 内的 PCIe 读写

linux - ioread 中的延迟

cuda - 需要在多个 GPU 上分配数据的指导