对于这个问题的含糊之处,我提前道歉。
背景:
我正在尝试在 OpenCL 中编写形态图像处理函数。我有一个 __local 缓冲区,用于存储每个像素的数据(每个像素由一个工作项表示,还没有循环展开)。此外,由于我处于测试早期,我只使用一个工作组(8x8 像素图像,因此我可以手动验证结果)。
问题:
有时必须将来自一个、两个、三个甚至四个像素的数据添加到另一个像素缓冲区中。由于这些是同一工作组中的相邻像素,我确信我会导致本地内存库冲突。没关系,速度不是我的首要任务(还!)。然而,这些银行冲突似乎正在丢弃数据,甚至破坏数据。我一直非常小心不要溢出或过度运行缓冲区。
所以,我的第一个问题是:实际上,银行冲突是否可能导致数据损坏和丢失?Opencl 规范似乎表明该操作应该序列化,从而降低带宽 - 但没有提到数据丢失。
我的第二个问题是:救命!- 我能做些什么呢?
任何指导将不胜感激 - 谢谢!