我一直在看下面的例子來自官方CUDA網站:爲什麼這個CUDA示例內核有for循環?
http://docs.nvidia.com/cuda/cuda-samples/index.html#simple-cufft
這裏下載:http://developer.download.nvidia.com/compute/DevZone/C/Projects/x64/simpleCUFFT.zip
它包含以下內核:
// Complex pointwise multiplication
static __global__ void ComplexPointwiseMulAndScale(Complex *a, const Complex *b, int size, float scale)
{
const int numThreads = blockDim.x * gridDim.x;
const int threadID = blockIdx.x * blockDim.x + threadIdx.x;
for (int i = threadID; i < size; i += numThreads)
{
a[i] = ComplexScale(ComplexMul(a[i], b[i]), scale);
}
}
我的問題是,爲什麼在這裏有for循環? CUDA不會同時調用線程數組嗎?我刪除了線程,用下面的代碼替換它,並生成了相同的輸出。
// Complex pointwise multiplication
static __global__ void ComplexPointwiseMulAndScale(Complex *a, const Complex *b, int size, float scale)
{
const int threadID = blockIdx.x * blockDim.x + threadIdx.x;
a[threadID] = ComplexScale(ComplexMul(a[threadID], b[threadID]), scale);
}
由於這是CUDA網站上的官方示例,我想我必須缺少一些東西。