在这些天中,我正在尝试在移动GPU(Adreno)上进行程序
我用于图像处理的算法具有"随机性"用于内存访问。
它在"固定"范围中引用了一些像素以进行过滤。
但是,我不知道将要引用哪个像素(取决于图像)
据我了解,。如果多线程访问本地内存库 它导致银行冲突。因此,就我而言,这应该会导致银行冲突。
我的问题:我可以在随机内存访问时消除银行冲突吗?
或我可以减少它们?
假设您随机访问的像素的距离是正常分布的,您可以想到将图像铺成子映像。
我的意思是:您可能拥有4x4张尺寸256x256的图像,而不是使用(说)1024x1024图像。它们每个人都放在内存中,因此"近"像素访问停留在同一图像对象中。只有远距离操作才需要访问不同的子图像。
第二个选项:而不是使用CLImage
对象,而是尝试将数据保存到数组中。数组中的数据可以存储在 Z阶曲线排序中。这也导致空间分布降低(与行排序相比)
但是,当然,这很大程度上取决于您的图像大小。
有多种处理银行冲突的方法 - 您正在使用的元素的大小,行之间的步幅以及将坐标转移到不同的内存地址。它永远不会像非随机/冲突那样好,因此您会注意到的是根据图像的不同 - 您会看到明显不同的计算时间。
在