2015-05-28 18 views
0

我需要爲CUDA內核實現2D圓環,所以如果可能的話,應該是沒有分支的。如何實現沒有分支的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,壞名字,對不起。

回答

2

我想這些應該做的伎倆:

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

隨着firstRowId我的意思是它行的第一個ID,但無論如何,我認爲它的工作原理忽略你的firstRowId。我會測試,謝謝! –

+1

@ rxp90 - 明白了。這就是我原來的,所以現在又回到了這一點。 :) –