OpenCL银行冲突 - 丢失内存/破坏数据?

时间:2011-02-17 04:41:27

标签: opencl bank-conflict

我提前为这个问题的模糊性道歉。

背景:

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

问题:

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

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

我的第二个问题是:帮助! - 我该怎么办?

非常感谢任何指导 - 谢谢!

1 个答案:

答案 0 :(得分:0)

也许nvidia白皮书Prefix Sum (Scan) with CUDA可以带你走上正轨。它是all-prefix-sums algorithmis 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的,但我发现生成的内核非常相似 两种技术都使用类似的概念。

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

干杯