这一系列的文章是CUDA5.5样例代码的阅读笔记,每篇文章针对某一特定的样例代码。
本篇文章所涉及的项目是simpleMultiGPU。
项目所在的位置:0_Simple/simpleMultiGPU
源程序的分析
首先我们查看该程序的内核函数(kernel function),以了解程序中GPU所完成的核心功能:
__global__ static void reduceKernel(float *d_Result, float *d_Input, int N) {
const int tid = blockIdx.x * blockDim.x + threadIdx.x;
const int threadN = gridDim.x * blockDim.x;
float sum = 0;
for (int post = tid; pos < N; pos += threadN)
sum += d_Input[pos];
d_Result[tid] = sum;
}
可以看出,threadN代表的是当前GPU中运行的总的线程数,每个线程所完成的工作,是统计数组中所有下标index满足index % threadN == tid的元素的累加和。
然后我们定位到main函数,我们首先查看main函数的前数十行:
// Solver config
TGPUplan plan[MAX_GPU_COUNT];
// GPU reduction results
float h_SumGPU[MAX_GPU_COUNT];
float sumGPU;
double sumCPU, diff;
int i, j, gpuBase, GPU_N;
const int