这是我从 udacity 的“并行计算简介”中获得的简短代码。这段代码中的索引让我感到困惑。
__global__ void use_shared_memory_GPU(float *array)
{
int i, index = threadIdx.x;
float average, sum=0.0f;
__shared__ float sh_arr[128];
sh_arr[index] = array[index];
__syncthreads();
// Now it begins to confuse me
for(i=0; i<index; i++) { sum += sh_arr[i]; } // what is the index here?
average = sum / (index + 1.0f); // what is the index here?
// why add 1.0f?
if(array[index] > average) {array[index] = average;}
}
索引是作为每个线程的 Id 创建的,我可以理解。但是在计算平均值时,该指数用作线程数。第一个索引用作数组的并行计算 id,而第二个索引与普通 c 一样使用。我在我的程序中重复这个过程,但结果不会重复。
指数背后的诀窍是什么?我在 cuda-gdb 中打印它,它只显示 0。对此有详细解释吗?
加一分。计算平均值时,为什么要加 1.0f?