1

对于这个问题的含糊之处,我提前道歉。

背景:

我正在尝试在 OpenCL 中编写形态图像处理函数。我有一个 __local 缓冲区,用于存储每个像素的数据(每个像素由一个工作项表示,还没有循环展开)。此外,由于我处于测试早期,我只使用一个工作组(8x8 像素图像,因此我可以手动验证结果)。

问题:

有时必须将来自一个、两个、三个甚至四个像素的数据添加到另一个像素缓冲区中。由于这些是同一工作组中的相邻像素,我确信我会导致本地内存库冲突。没关系,速度不是我的首要任务(还!)。然而,这些银行冲突似乎正在丢弃数据,甚至破坏数据。我一直非常小心不要溢出或过度运行缓冲区。

所以,我的第一个问题是:实际上,银行冲突是否可能导致数据损坏和丢失?Opencl 规范似乎表明该操作应该序列化,从而降低带宽 - 但没有提到数据丢失。

我的第二个问题是:救命!- 我能做些什么呢?

任何指导将不胜感激 - 谢谢!

4

1 回答 1

0

也许 nvidia 白皮书Prefix Sum (Scan) with CUDA可以让您走上正轨。它是关于all-prefix-sums algorithm,is a good example of a computation that seems inherently sequential, but for which there is an efficient parallel algorithm.

all-prefix-sums operation数字列表[3,4,1,2]转换为它们的总和:[0,3,7,8].

我知道这篇论文是关于 CUDA 的,但我发现生成的内核非常相似,因为两种技术都使用相似的概念。

我希望,这篇论文可以帮助你。

干杯

于 2011-05-05T18:04:28.537 回答