我有一个非常小的数据集,但它足够大,不适合目前市场上任何GPU中的工作区或私人存储器。这意味着每个内核必须访问GPU上全局内存中的数据。如果我将此数据复制到全局内存中的多个副本,它是否可以提高性能/减少延迟,还是限制内存控制器,并且一次只允许一个内核访问全局内存?如果这是特定设备,是否有任何具有此功能的型号?将在兼容OpenCL的设备上复制全局数据可提高性能?
回答
这是非常受显卡的内存控制器的约束,并且多个相同的数据副本不会帮助你。我不知道有一个以上的内存控制器用于全局访问。
您的内存访问模式将极大地影响内核的整体吞吐量。你有没有需要优化的特定示例/内核?
尚未,但谢谢你的回答。基本上我有一个“三维数组”,它存储了GPU中每次迭代必须计算的数据,这意味着每当内核想要分析某些数据时,它都必须遍历整个数组。 – user1876508
主流级别的游戏GPU具有150GB/s的峰值带宽。本地存储器(LDS)可以达到5TB/s,而私有寄存器访问可以达到15TB/s +。而且它通常拥有2GB的全局内存,足以将gpu压缩到极限。当你在同一时间和不同的字节(也是不同的缓存行)上使用所有内核时,GPU和特别是AMD类型具有相当不错的性能。为了隐藏内存延迟,您可以创建并发内核,或者只是优化单个内核以获得更多占用。 –
全局存储器访问的一个简单,通用的优化是通过读取彼此靠近的相邻存储器地址来利用合并。做一个“合并访问opencl”的搜索,你会发现我的意思是很多的例子。当多次重复使用全局数据时,当将其复制到本地内存时,访问时间通常会减少很多。 – mfa
- 1. 全局设备变量OpenCL
- 2. OpenCL - 将树复制到设备内存
- 3. OpenCL的兼容性差异
- 4. 安卓设备兼容性
- 5. Android APK设备兼容性?
- 6. Android设备兼容性
- 7. Android:设备兼容性
- 8. 提高IE对弹性布局的兼容性
- 9. OpenCL中的全局同步可能吗?
- 10. 无处不在的OpenCL兼容性?
- 11. OpenCL全局内存提取
- 12. 高兼容性的安全WCF Webservice
- 13. OpenCL兼容DSP
- 14. C++中的全局数组可以打破二进制兼容性吗?
- 15. Mali在Android上不兼容的DDK OpenCL
- 16. 如何提高从cosmosdb复制数据时的性能?
- 17. XCode如何将兼容设备设置为仅兼容ARkit的设备?
- 18. 提高MySQL复制性能的问题
- 19. 不同的Android设备兼容性
- 20. Android中的设备兼容性
- 21. Android与多个设备的兼容性
- 22. 不兼容的设备,如何兼容?
- 23. Android设备兼容
- 24. WBF兼容设备
- 25. 提高数据表性能
- 26. OpenCL设备唯一性
- 27. 提高mongodb全扫描查询性能:复制还是分片?
- 28. 为什么必须将版本兼容性设置为不兼容二进制兼容性,然后回到二进制兼容性才能使其工作?
- 29. Android设备兼容性 - 停止安装
- 30. Adobe AIR和设备兼容性
为了澄清,你是否试图在GPU上同时运行多个内核,因此多个内核将同时访问相同的缓冲区? – chippies