每个人都在这里。因为 OpenCL 可以在 CPU 上以与在 GPU 上类似的方式运行内核。在 GPU 中,物理上有私有内存(寄存器)和共享内存,但是如果我选择 CPU 作为 OpenCL 设备,那么私有内存和共享内存是如何实现的呢?
我的意思是,它们是由 DRAM 还是其他东西模拟的(L1、L2 甚至 L3 缓存?我不确定)。另外,在 CPU 上使用共享内存的性能与 GPU 相比会受到限制,对吧?
没有语言可以直接访问 CPU 缓存(被引用但我没有足够的代表来拥有 3 个 url...)。这反过来意味着 OpenCL 无法将私有内存保留在缓存中。
在 AMD 的演示文稿中, 他们简单地将内存模型称为由上下文抽象的一系列内存对象(第 16 页)。只要缓冲区对上下文中的设备可用,它们就可以读取。当涉及到不同类型的内核内存时,您可以放心地假设它们在 CPU 而不是 GPU 上运行时不会有性能差异(因为有不同类型的 DRAM)。
但是请记住,如果您在集群上进行计算,主机内存和本地内存仍然会有所不同,这仍然需要您考虑传输速率。关于您问题的第二部分,请参阅这篇关于 OpenCL 中的内存模型的文章。以您只需要在给定工作组内进行通信的方式构建程序可以提高性能。
如需进一步阅读,请参阅 -http://software.intel.com/sites/landingpage/opencl/optimization-guide/index.htm
OpenCL 内存模型是基于 GPU 架构创建的。在 CPU 上,对全局内存、共享内存和常量内存的访问通过相同的缓存层次结构。
当然,使用本地内存实现可以提高性能,因为缓存命中会增加。