我需要为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,坏名称,抱歉。
答案 0 :(得分:2)
我认为这些应该可以解决问题:
n = rows * columns;
up = (id - columns + n) % n;
down = (id + columns) % n;