假设我有一个从MxN 2D矩阵转换而来的一维数组,并且我想对每列进行并行化并执行一些操作。我如何为每列分配一个线程?在CUDA中进行并行化,为每列分配线程
例如,如果我有一个3×3矩阵:
1 2 3
4 5 6
7 8 9
我要添加在取决于列#列中的每个数(因此第一列将加1,第二加2 .. ..),它变成:
1+1 2+1 3+1
4+2 5+2 6+2
7+3 8+3 9+3
我该如何在CUDA中执行此操作?我知道如何将线程分配给数组中的所有元素,但我不知道如何将线程分配给每列。所以,我想要发送每一列(1,2,3)(4,5,6)(7,8,9)并进行操作。
哦,谢谢你的回复,但是如果我想在每一行中将每个元素从右向左移动而不是添加?因此,在我的例子中,第一行(1 2 3)将变成(2 3 3)[保持最后一个元素相同],(4 5 6)变成(5 6 6)并且(7 8 9)变成(8 9 9)?它可能像你显示的加法操作一样吗?谢谢! – overloading 2012-04-26 20:07:03
在这种情况下,就像 'matrix [gid] =(gid%N)?矩阵[gid + 1]:矩阵[gid];' 可能工作。 – limes 2012-04-26 20:19:25
模运算符是在GPU上的昂贵的操作,尽量避免它! – djmj 2012-04-27 00:23:21