2012-10-01 47 views
1

大家都在这里。因为OpenCL可以像在GPU上一样运行CPU上的内核。在GPU中,物理上存在私有内存(寄存器)和共享内存,但是如果我选择CPU作为OpenCL设备,那么私有内存和共享内存是如何实现的?我的意思是,它们是由DRAM还是其他模拟器(L1,L2,甚至L3缓存?),我不确定)。另外,与CPU相比,在CPU上使用共享内存的性能会受到限制,对吧?在OpenCL中,如何在CPU上实现私有内存和共享内存?

回答

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

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

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