【发布时间】:2011-07-07 15:30:09
【问题描述】:
我想了解如何将基本的 C/C++ 循环转换为 CUDA 内核。让我们简单地说:
for (int i=0;i < MAXi;i++)
for(int j=0;j< MAXj;j++){
...code that uses i and j....
}
每个 i 都需要计算 MAXj 个元素。 对于某些人来说,这可能是非常基本的,但我在这里真的很挣扎。 假设 Maxj 在一百万左右,MAXj=1000000;我们希望所有线程都可以工作。 我只用内循环就成功了:
int tid=threadIdx.x + blockDim.x*blockIdx.x + blockDim.x*gridDim.x*blockIdx.y;
使用二维块,我怎样才能并行化这种循环?它们在 C 语言中很常见,学习如何做会非常有用。
【问题讨论】:
-
答案完全取决于“...使用 i 和 j....的代码”的作用。在问题中添加一些进一步的细节,可能会得到有用的答案。您可能会发现 this thread 也值得一看。