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

OpenCL银行冲突-内存丢失/数据损坏?,opencl,bank-conflict,Opencl,Bank Conflict,我为这个问题的模糊性提前道歉 背景: 我正试图在OpenCL中编写一个形态学图像处理函数。我有一个_u本地缓冲区,用于存储每个像素的数据。每个像素由一个工作项表示,没有循环展开。此外,由于我在测试早期,我只使用单个工作组8x8像素图像,因此我可以手动验证结果 问题: 有时,必须将来自一个、两个、三个甚至四个像素的数据添加到另一个像素的像素缓冲区中。由于这些是同一工作组中的相邻像素,我确信我造成了本地内存库冲突。没关系,速度还不是我的首要任务!。然而,这些银行冲突似乎正在丢弃数据,甚至破坏数据。我

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

背景:

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

问题:

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

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

我的第二个问题是:帮助我能做些什么


任何指导都将不胜感激-谢谢 “全部前缀和”操作将数字[3,4,1,2]列表转换为它们的和:[0,3,7,8]

我知道这篇论文是关于CUDA的,但我发现结果的内核与 两种技术使用相似的概念

我希望,这篇论文能对你有所帮助


干杯

只是想让你知道我的NVIDIA卡也有同样的问题。。。共享内存的实现似乎对计时问题非常挑剔,显然编译器无法解决这些问题。我还必须删除循环中的一个分支,并展开循环,以便正确计算。不管怎样,它在没有分支和一些额外的虚拟计算的情况下速度更快;你能分享代码吗?如何执行添加?你是否在必要的地方使用原子操作系统。您是否正在将内存访问与屏障同步?银行冲突是否会导致数据损坏值得怀疑。这更像是不合适的内存访问模式。但是我们只能在没有代码的情况下猜测。