如何实现没有分支的2D环面

时间:2015-05-28 21:51:16

标签: c arrays algorithm multidimensional-array

我需要为CUDA内核实现2D环面,如果可能的话,它应该没有分支。

E.g。

  |  |  |
--0--1--2--
--3--4--5--
--6--7--8--
  |  |  |

所以线程0应该知道他的邻居是1,3,6和2;等等。

我得到左右邻居如下:

right = (id + 1) % columns + firstRowId
left  = (id - 1) % columns + firstRowId

但我不知道如何有效地利用上下ids。

更新:firstRowId表示其行的第一个元素的ID,坏名称,抱歉。

1 个答案:

答案 0 :(得分:2)

我认为这些应该可以解决问题:

n = rows * columns;
up = (id - columns + n) % n;
down = (id + columns) % n;