2014-02-14 23 views
0

我有一个非常小的数据集,但它足够大,不适合目前市场上任何GPU中的工作区或私人存储器。这意味着每个内核必须访问GPU上全局内存中的数据。如果我将此数据复制到全局内存中的多个副本,它是否可以提高性能/减少延迟,还是限制内存控制器,并且一次只允许一个内核访问全局内存?如果这是特定设备,是否有任何具有此功能的型号?将在兼容OpenCL的设备上复制全局数据可提高性能?

+0

为了澄清,你是否试图在GPU上同时运行多个内核,因此多个内核将同时访问相同的缓冲区? – chippies

回答

1

这是非常受显卡的内存控制器的约束,并且多个相同的数据副本不会帮助你。我不知道有一个以上的内存控制器用于全局访问。

您的内存访问模式将极大地影响内核的整体吞吐量。你有没有需要优化的特定示例/内核?

+0

尚未,但谢谢你的回答。基本上我有一个“三维数组”,它存储了GPU中每次迭代必须计算的数据,这意味着每当内核想要分析某些数据时,它都必须遍历整个数组。 – user1876508

+0

主流级别的游戏GPU具有150GB/s的峰值带宽。本地存储器(LDS)可以达到5TB/s,而私有寄存器访问可以达到15TB/s +。而且它通常拥有2GB的全局内存,足以将gpu压缩到极限。当你在同一时间和不同的字节(也是不同的缓存行)上使用所有内核时,GPU和特别是AMD类型具有相当不错的性能。为了隐藏内存延迟,您可以创建并发内核,或者只是优化单个内核以获得更多占用。 –

+0

全局存储器访问的一个简单,通用的优化是通过读取彼此靠近的相邻存储器地址来利用合并。做一个“合并访问opencl”的搜索,你会发现我的意思是很多的例子。当多次重复使用全局数据时,当将其复制到本地内存时,访问时间通常会减少很多。 – mfa