2012-10-07 29 views
5

我有点困惑如何零拷贝工作。在OpenCL零拷贝访问路径

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仍然限制了整个带宽。 或者唯一的好处是我们可以避免在上述情况下复制c1 & c1/c3?

回答

13

你对你的零拷贝工作方式的理解是正确的。基本前提是您可以从设备访问主机内存,或从主机访问设备内存,而无需在两者之间执行中间缓冲步骤。

您可以通过以下标志缓冲区的建立执行零拷贝:

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); 

使用零拷贝你可以能够通过执行以下操作来实现性能:

  1. 将文件复制到主机buff呃
  2. 复制缓存到设备

相反,你可以做到这一切在一个步骤

  1. 内存映射设备侧的缓冲
  2. 从主机
  3. 将文件复制到设备
  4. 不映射内存

在一些实现中,映射和解映射的调用可以隐藏数据传输的成本。正如在我们的例子中,

  1. 存储器映射装置侧缓冲液[实际创建相同大小的主机侧缓冲器]
  2. 从主机到设备的[实际上写入到主机侧缓冲器]
  3. 复制文件
  4. 取消映射存储器[从主机缓冲器经由clEnqueueWriteBuffer实际上将数据复制到设备缓冲器]

如果实现执行此方法,则会有使用映射方法并无益处。然而,AMD更新的OpenCL驱动程序允许直接写入数据,从而使映射和取消映射的成本几乎为0.对于独立显卡,请求仍然发生在PCIe总线上,因此数据传输速度可能会很慢。然而,在APU体系结构的情况下,使用零拷贝语义的数据传输成本可以大大提高由于APU独特体系结构而产生的传输速度(如下图所示)。在这种架构中,PCIe总线被统一北桥(UNB)取代,从而实现更快速的传输。

BE BEWARE当在存储器映射中使用零拷贝语义时,从主机读取设备端缓冲区时将看到非常可怕的带宽。这些带宽大约为0.01 Gb/s,很容易成为您的代码的新瓶颈。

对不起,如果这是太多的信息。这是我的论文主题。

APU Architecture

+0

+5的详细解释! – gpuguy

+0

我们可以看到你的论文吗?听起来太酷了!我也为我的论文打了很多东西 –

+0

@自制果酱当然。在这里,你去:http://scholar.lib.vt.edu/theses/available/etd-07272012-152625/unrestricted/Lee_KS_T_2012.pdf – KLee1