gpt4 book ai didi

opencl - OpenCL 中零拷贝的访问路径

转载 作者:行者123 更新时间:2023-12-04 13:23:57 39 4
gpt4 key购买 nike

我对零拷贝的工作原理有点困惑。

1-要确认以下内容对应于opencl中的零拷贝。

 .......................
. . .
. . .
. . CPU .
. SYSTEM . .
. RAM . c3 X .
. <=====> .
...|...................
PCI-E / /
| / /
c2 |X /PCI-E, CPU directly accessing GPU memory
| / / copy c3, c2 is avoided, indicated by X.
...|...././................
. MEMORY<====> .
. OBJECT .c1 .
. . GPU .
. GPU RAM . .
. . .
...........................




.......................
. . .
. . .
. . CPU .
.SYSTEM RAM . .
. . .
. . c3 .
. MEMORY<====> .
...| OBJECT............
| \ \
PCI-E \ \PCI-E, GPU directly accessing System memory. copy c2, c1 is avoided
| \ \
C2 |X \ \
...|.........\..\...........
. | . .
. <=======> .
. GPU c1 X GPU .
. RAM . .
. . .
............................

GPU/CPU 直接访问系统/GPU-RAM,无需显式复制。

2-拥有这个有什么好处? PCI-e 仍然限制总带宽。
或者唯一的好处是我们可以避免在上述情况下复制 c2 & c1/c3 ?

最佳答案

您对零拷贝工作原理的理解是正确的。基本前提是您可以从设备访问主机内存,也可以从主机访问设备内存,而无需在两者之间执行中间缓冲步骤。
您可以通过使用以下标志创建缓冲区来执行零复制:

CL_MEM_AMD_PERSISTENT_MEM //Device-Resident Memory
CL_MEM_ALLOC_HOST_PTR // Host-Resident Memory
然后,可以使用内存映射语义访问缓冲区:
void* p = clEnqueueMapBuffer(queue, buffer, CL_TRUE, CL_MAP_WRITE, 0, size, 0, NULL, NULL, &err);
//Perform writes to the buffer p
err = clEnqueueUnmapMemObject(queue, buffer, p, 0, NULL, NULL);
使用零复制,您可以通过执行以下操作的实现获得性能:
  • 将文件复制到主机缓冲区
  • 将缓冲区复制到设备

  • 相反,您可以一步完成所有工作
  • 内存映射设备端缓冲区
  • 将文件从主机复制到设备
  • 取消映射内存

  • 在某些实现中,映射和取消映射的调用可以隐藏数据传输的成本。在我们的例子中,
  • Memory Map 设备端缓冲区【实际创建一个相同大小的主机端缓冲区】
  • 将文件从主机复制到设备 [实际写入主机端缓冲区]
  • 取消映射内存 [实际上通过 clEnqueueWriteBuffer 将数据从主机缓冲区复制到设备缓冲区]

  • 如果实现以这种方式执行,那么使用映射方法将没有任何好处。然而,AMD 较新的 OpenCL 驱动程序允许直接写入数据,使得映射和取消映射的成本几乎为零。对于独立显卡,请求仍然通过 PCIe 总线进行,因此数据传输可能会很慢。
    然而,在 APU 架构的情况下,由于 APU 独特的架构(如下图所示),使用零复制语义的数据传输成本可以大大提高传输速度。在此架构中,PCIe 总线被统一北桥 (UNB) 取代,以实现更快的传输。
    请注意 当在内存映射中使用零复制语义时,从主机读取设备端缓冲区时,您将看到绝对可怕的带宽。这些带宽约为 0.01 Gb/s,很容易成为代码的新瓶颈。
    对不起,如果这是太多的信息。这是我的论文题目。
    APU Architecture

    关于opencl - OpenCL 中零拷贝的访问路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12766578/

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