在OpenCL中,如何在CPU上实现私有内存和共享内存?

时间:2012-10-01 08:13:47

标签: memory opencl

大家都在这里。因为OpenCL可以以类似于GPU的方式在CPU上运行内核。在GPU中,物理上有私有内存(寄存器)和共享内存,但如果我选择CPU作为OpenCL设备,私有内存和共享内存是如何实现的?

我的意思是,他们是用DRAM还是其他东西模拟的(L1,L2甚至L3缓存?我不确定)。此外,与GPU相比,在CPU上使用共享内存的性能会受到限制,对吧?

2 个答案:

答案 0 :(得分:4)

没有语言可以直接访问CPU缓存(被引用但是我没有足够的代表来拥有3个URL ...)。这反过来意味着OpenCL无法将私有内存保留在缓存中。

In this presentation from AMD 它们只是将内存模型称为上下文抽象的一系列内存对象(第16页)。只要缓冲区在上下文中可用于设备,它们就是可读的。当涉及到不同类型的内核内存时,您可以放心地假设在CPU而不是GPU上运行时它们之间没有性能差异(因为存在不同类型的DRAM)。

但请记住,如果您在群集上进行计算,主机内存和本地内存仍会有所不同,这仍然需要您考虑传输速率。 关于问题的第二部分,请参阅此文on memory models in OpenCL。通过以仅需要在给定工作组内进行通信的方式构建程序,可以获得性能。

如需进一步阅读,请参阅-http://software.intel.com/sites/landingpage/opencl/optimization-guide/index.htm

答案 1 :(得分:-1)

OpenCL内存模型是基于GPU架构创建的。在CPU上,访问全局内存,共享内存和常量内存通过相同的缓存层次结构。

当然,使用本地内存实现可以提高性能,因为缓存命中率会增加。