CUDA内存库冲突



我想确保我正确理解了共享内存中的银行冲突。

我有32段数据。

每段由128个整数组成。

[[0, 1, ..., 126, 127], [128, 129, ..., 255], ..., [3968, 3969, ..., 4095]]

经纱中的每条线只能访问自己的部分。

  • 线程0访问索引0对应的部分0的位置0

  • 线程1访问部分1对应索引128的位置0

  • ……

  • 线程31访问索引3968对应的部分31的位置0

这是否意味着我有32倍的银行冲突?

如果是,那么如果我为每个段添加一个填充元素(即总共129个元素),那么每个线程将访问一个唯一的银行。我说的对吗?

是的,您将有32路银行冲突。对于银行冲突的目的,它可能有助于将共享内存可视化为一个二维数组,其宽度为32个元素(例如,32个intfloat数量)。这个二维数组中的每一列都是一个"银行"。

在上面覆盖你的存储模式。当您这样做时,您将看到您所声明的访问模式将导致warp中的所有线程将从第0列请求项。

是的,通常的"诡计"。这里是将存储空间填充为每一行1个元素。(在您的情况下,这可能是每个"部分"一个元素)。这应该可以消除您指定的访问模式的银行冲突。

相关内容

  • 没有找到相关文章

最新更新