define N 10;/* 定义10个GPU运算线程 */
define SIZE N*sizeof(int);
/* 运行在GPU端的程序 */
__global__ void vectorADD(int* a, int* b, int* c)
{
int index = threadIdx.x;
//
获得当前线程的序号
if
(index < blockDim.x)
c[index] = a[index] + b[index];
}
int main ()
{
/* 本地开辟三个数组存放我们要计算的内容 */
int* a = (int*) malloc (SIZE);
int* b = (int*) malloc (SIZE);
int* c = (int*) malloc (SIZE);
/* 初始化数组A, B和C */
for
(int i=0; i<N; i++)
{
h_a[i] = i;
h_b[i] = i;
}
/* 在GPU上分配同样大小的三个数组 */
int* d_a;
int* d_b;
int* d_c;
cudaMalloc((void**)&d_a, SIZE);
cudaMalloc((void**)&d_b, SIZE);
cudaMalloc((void**)&d_c, SIZE);
/* 把本地的数组拷贝进GPU内存 */
cudaMemcpy(d_a, a, SIZE, cudaMemcpyHostToDevice);
cudaMemcpy(d_b, b, SIZE, cudaMemcpyHostToDevice);
/* 定义一个GPU运算块 由 10个运算线程组成 */
dim3 DimBlock = N;
/* 通知GPU用10个线程执行函数vectorADD */
vectorADD<<<1 dimblock="">>>(d_a, d_b, d_c);
/* 将GPU运算完的结果复制回本地 */
cudaMemcpy(c, d_c, SIZE, cudaMemcpyDeviceToHost);
/* 释放GPU的内存 */
cudaFree(d_a);
cudaFree(d_b);
cudaFree(d_c);
/* 验证计算结果 */
for
(int j=0; j<N; j++)
printf
(“%d “, c[j]);
printf
(“\n”);
}