大家都在这里。因为OpenCL可以像在GPU上一样运行CPU上的内核。在GPU中,物理上存在私有内存(寄存器)和共享内存,但是如果我选择CPU作为OpenCL设备,那么私有内存和共享内存是如何实现的?我的意思是,它们是由DRAM还是其他模拟器(L1,L2,甚至L3缓存?),我不确定)。另外,与CPU相比,在CPU上使用共享内存的性能会受到限制,对吧?在OpenCL中,如何在CPU上实现私有内存和共享内存?
1
A
回答
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上,对全局内存,共享内存和常量内存的访问通过相同的缓存层次结构。
当然,使用本地内存实现可以提高性能,因为缓存命中将会增加。
相关问题
- 1. OpenCL中的共享内存
- 2. OpenCL-共享内存访问
- 3. 如何与shm_open共享现有内存?
- 4. 在共享内存
- 5. 如何在Windows中实现共享内存?
- 6. 在不同的上下文之间共享OpenCL内存对象
- 7. openCL CPU上的最大内存分配
- 8. 使用共享内存实现管道
- 9. 处理OpenCL内核中的临时矩阵和私有内存
- 10. 在Nvidia的opencl中的共享内存中的动态分配
- 11. C++共享内存泄漏,如何清除共享内存?
- 12. 检查共享内存是否存在,以及是否存在共享内存
- 13. 内存共享
- 14. linux共享内存实际在哪里?
- 15. 在内存中缓存数据共享
- 16. IPC与共享内存的共享内存有什么区别?
- 17. 共享内存在Unix的
- 18. 共享内存中内部进程的屏障实现
- 19. 如何在共享内存中得到共享对象
- 20. 在C++中实现共享内存管理器
- 21. Linux内核如何在2个进程间实现共享内存
- 22. PHP和共享内存
- 23. Java和C++共享内存
- 24. POSIX共享内存和msync
- 25. 共享内存和IPC
- 26. 共享内存和多
- 27. C-fork()和共享内存
- 28. electron.atom.io和共享内存
- 29. 指针和共享内存
- 30. 共享内存和常量