如何使用 GPU-DMA 从 GPU-CUDA 代码来复制数据
How can I use GPU-DMA from GPU-CUDA code to copying data?
使用 CUDA SDK 5.5,我可以用来复制数据:
- 从主机:如果内存固定,
cudaMemcpy();
使用 GPU-DMA - 从主机:如果内存未固定,则
memcpy();
或cudaMemcpy();
使用 CPU 内核 - 从 GPU:
for() { dst[i] = src[i]; }
或memcpy();
使用 GPU 内核 - 从 GPU:使用 GPU-DMA ???
如何在 GPU-CUDA 代码的内核功能中使用 GPU-DMA 来复制数据?
如果设备端不支持计算能力 3.5,则无法从设备端尝试执行的操作。如果您有这样的卡片,请参阅编辑。
是的,您可以通过将另一台设备上分配的设备指针传递给内核来从另一台设备访问 GPU RAM。执行运行时会将请求的数据提供给正确的 GPU。但是,这不是很有效,因为每次访问另一个设备内存都会导致对等或设备主机设备之间的内存复制操作。
您可以做的是从主机代码中执行预取数据,并使用不同的流进行memcopy操作(cudaMemcpy_async
(和内核执行。但是,这仅在您有一个带有一个单独复制单元的体面卡并且您必须进行显式锁定时才有效,因为没有内置结构可以容纳您的内核,直到数据传输完成。
编辑:
如果您有计算能力 3.5 设备,则可以使用 cuda 设备运行时在设备代码中从一个设备复制到另一个设备。请参阅此处的动态并行性文档:http://docs.nvidia.com/cuda/pdf/cuda_dynamic_parallelism_programming_guide.pdf 请注意,设备上的所有内存拷贝操作也是异步的。您将再次自行保持数据一致性。
相关文章:
- 在 C++ AMP 数组中复制数据多少次?
- 字符串是否在其构造函数中复制数据
- 在不复制数据的情况下,将double数组转换为只有double成员的structs数组
- 有没有一种方法可以在不复制数据的情况下从string_view创建字符串流
- 如何在不复制数据的情况下将 cv::Mat 转换为 2d 标准::矢量
- C++ 在节点内存储对数据对象的引用,而不复制数据
- 是否可以在不分配内存或复制数据的情况下构造对象?
- 如何在不复制数据的情况下在平面数组和多维数组之间进行转换?
- C 2D char阵列有时会在随机位置复制数据
- 在不复制数据的情况下更改 opencv mat 中的列顺序
- 有没有办法将 EGL 绘制到 /dev/fb1 而不是 /dev/fb0,而无需在树莓派上复制数据
- 使用C 和目标C从原始图像中复制数据
- 给定 myvector.start() 和 myvector.end(),我想在不复制数据的情况下创建 myvector
- 复制数据时出现奇怪错误
- 如何在 C/C++ 中从数组末尾开始复制数据
- glTexImage2D 复制数据或仅指定数据
- 如何在C++中从void指针复制数据
- 在不复制数据的情况下将OpenCV Mat发送到MATLAB工作区的方法
- 如何使用 GPU-DMA 从 GPU-CUDA 代码来复制数据
- 在矢量到矢量中复制数据<float> <Mat> (Opencv/C++)