gpt4 book ai didi

OpenCL 部分缓冲区 DMA 读/写

转载 作者:行者123 更新时间:2023-12-04 04:49:51 26 4
gpt4 key购买 nike

所以我有一个我喜欢使用 OpenCL 实现的应用程序,它分布在使用 MPI 的多台机器上。

现在在算法的每次迭代中,我需要同步 MPI 进程之间的缓冲区,但这里有一个问题:只有 2D 缓冲区的边界需要同步/复制,而不是整个区域。

所以我的问题是,是否有可能使用 OpenCL 的内存映射机制(clEnqueueMapBuffer 和 clEnqueueUnmapMemObject)仅读取/写入 2D 缓冲区的边界而不触发整个缓冲区的完整副本。

基本上,这只有在 OpenCL 使用 DMA 而不是主机端缓冲区副本时才有效。所以我的问题实际上是 OpenCL 是否支持对离散 PCIe GPU 上的设备缓冲区数据进行 DMA 访问。如果是,在什么硬件和哪个操作系统上?

最佳答案

为了能够使用 DMA,缓冲区应该位于页面锁定内存中。 AMD 和 NVIDIA 在他们的编程指南中指出,要在页面锁定内存中创建缓冲区,应使用 CL_MEM_ALLOC_HOST_PTR 标志创建。这是 NVIDIA 在其 guide: 的第 3.3.1 节中所说的内容

OpenCL applications do not have direct control over whether memory objects are allocated in page-locked memory or not, but they can create objects using the CL_MEM_ALLOC_HOST_PTR flag and such objects are likely to be allocated in page-locked memory by the driver for best performance.



注意粗体的“可能”。

哪个操作系统? NVIDIA 不谈论操作系统,因此 NVIDIA 为任何操作系统提供驱动程序(对于 AMD 也是如此)。
哪个硬件?我猜任何有 DMA Controller 的人。

现在只写缓冲区的一部分,您可以查看 function :
clEnqueueWriteBufferRect()

此函数允许写入缓冲区的 2 或 3D 区域。另一种可能性是使用子缓冲区通过 function 创建它们。 :
clCreateSubBuffer()

但是,它没有 2D 缓冲区的概念。

关于OpenCL 部分缓冲区 DMA 读/写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17592295/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com