【发布时间】:2012-09-22 04:36:29
【问题描述】:
我有一个嵌套循环,中间有一个计数器。 我已经设法将 CUDA 索引用于外部循环,但我想不出任何方法可以在这种循环中利用更多的并行性。 你有过类似的工作经验吗?
int i = threadIdx.x + blockIdx.x * blockDim.x;
if (i < Nx) {
counter = 0;
for (k = 0; k < Ny; k++) {
d_V[i*Ny + k] = 0;
if ( d_X[i*Ny + k] >= 2e2 ) {
/* do stuff with i and k and counter i.e.*/
d_example[i*length + counter] = k;
...
/* increment counter */
counter++;
}
}
}
我看到的问题是如何处理计数器,因为k 也可以在 CUDA 中用threadIdx.y + blockIdx.y * blockDim.y 进行索引
【问题讨论】:
-
您也可以使用 threadIdx.y 作为“k”变量。即 2D 块在 CUDA 中是可能的。您可以将 counter 定义为 shared 变量,并将其存储回全局内存。