这是我的第一个(抄袭)CUDA 程序;
__global__ void vecAdd(float* A, float* B, float* C)
{
int i = threadIdx.x;
A[i]=0;
B[i]=i;
C[i] = A[i] + B[i];
}
#include <stdio.h>
#define SIZE 10
int main()
{
int N=SIZE;
float A[SIZE], B[SIZE], C[SIZE];
float *devPtrA;
float *devPtrB;
float *devPtrC;
int memsize= SIZE * sizeof(float);
cudaMalloc((void**)&devPtrA, memsize);
cudaMalloc((void**)&devPtrB, memsize);
cudaMalloc((void**)&devPtrC, memsize);
cudaMemcpy(devPtrA, A, memsize, cudaMemcpyHostToDevice);
cudaMemcpy(devPtrB, B, memsize, cudaMemcpyHostToDevice);
vecAdd<<<1, N>>>(devPtrA, devPtrB, devPtrC);
cudaMemcpy(C, devPtrC, memsize, cudaMemcpyDeviceToHost);
for (int i=0; i<SIZE; i++)
printf("C[%d]=%f B[%d]=%f\n",i,C[i],i,B[i]);
cudaFree(devPtrA);
cudaFree(devPtrA);
cudaFree(devPtrA);
}
这是输出:
erin@ubuntu:~$ nvcc -lcudart vecadd.cu
erin@ubuntu:~$ ./a.out
C[0]=0.000000 B[0]=0.000000
C[1]=0.000000 B[1]=0.000000
C[2]=-0.344699 B[2]=0.000000
C[3]=0.000000 B[3]=0.000000
C[4]=-0.344700 B[4]=0.000000
C[5]=0.000000 B[5]=0.000000
C[6]=0.000000 B[6]=0.000000
C[7]=0.000000 B[7]=0.000000
C[8]=0.000000 B[8]=-0.344690
C[9]=0.000000 B[9]=0.000000 erin@ubuntu:~$
这是在 Pathetic Panda(?) 12.04 上的 Ubuntu 64 位上。
谢谢你的帮助!
真挚地,
艾琳
预期的输出应该打印 和的i
值。B[i]
C[i]