2013年3月8日 星期五

CUDA sample 1 vector Adder


__global__ void vectorAdder(float *result,float* src1,float *src2,int N)
{
int x=gridDim.x*blockIdx.x+threadIdx.x;
if(x result[x]=src1[x]+src2[x];
}
為何要有x<N
vectorAdder<<<1,N>>>(c_d,a_d,b_d,N);

在CUDA by Example這本書上說是為了處理當你的thread*block不等於你的data量的情況,但我
我實際上測試時發現,如果沒有if(x<N)

vectorAdder<<<2,N/2>>>(c_d,a_d,b_d,N);執行時就會出錯

但用vectorAdder<<<1,N>>>(c_d,a_d,b_d,N);or vectorAdder<<
<N,1>>>(c_d,a_d,b_d,N);時,會正確。

沒有留言:

張貼留言