OpenCL中的上下文机制的内存对象分配

时间:2014-05-12 22:03:49

标签: opencl

我想知道在OpenCL中将内存对象分配给上下文时到底发生了什么。

  • 运行时是否将数据复制到与上下文关联的所有设备?

如果你能帮助我理解这个问题,我将感激不尽: - )

1 个答案:

答案 0 :(得分:1)

通常,当运行时处理clEnqueueWriteBuffer / clEnqueueReadBuffer命令时,通常会发生复制。

但是,如果您使用某些标志组合创建了内存对象,则运行时可以选择比此更快地复制内存(如创建之后)或更晚(如运行内核之前的按需,甚至是按需)因为它需要它)。供应商文档通常表明他们是否特别利用了这些标志中的任何一个。

有趣的"有趣的"变体形式:

  • 共享内存(英特尔嵌入式图形GPU,AMD APU和CPU驱动程序):您可以分配缓冲区并且从不将其复制到设备,因为设备可以访问主机内存。
  • 按需分页:一些独立的GPU可以在内核读取或写入时通过PCIe复制缓冲区内存。

这些都是"先进的"使用OpenCL缓冲区。你应该从"常规"开始如果他们没有做你需要的事情,就要缓冲并努力工作。

This post相当好地描述了额外的标记。