0
hy,我試圖從全局內存複製2個數組到共享內存: 全局數組類型是雙倍的,每個人都有32個元素。 網格是1D,塊是1D。網格尺寸爲10000和NumberThreadPerBlock是32cuda從全局內存複製數組到共享內存
__global__ void kernel_0(double px[], double py[], int N)
{
int ii,
jj,tid;
tid=blockIdx.x*blockDim.x + threadIdx.x;
__shared__ double s_px[256];
__shared__ double s_py[256];
__shared__ double s[256];
s_px[threadIdx.x]=px[tid];
s_py[threadIdx.x]=py[tid];
s[threadIdx.x]=py[tid];
__syncthreads();
}
int main (int argc, char *argv[]){
double *px, *py , *x, *y, PI, step, *d_x, *d_y,*d_px, *d_py,sharedMemSize;
int N, Nx, ii;
PI = 4*atan(1.0);
Nx = 10000;
N = 32;
px = (double *) malloc(N*sizeof(double));
py = (double *) malloc(N*sizeof(double));
// lookup table: sin // from 0 to PI
step = 1.0/(N-1);
for (ii = 0; ii < N; ii++){
px[ii] = ii*step*PI;
py[ii] = sin(px[ii]);
}
cudaMalloc((void **) &d_px, N*sizeof(double));
cudaMalloc((void **) &d_py, N*sizeof(double));
cudaMemcpy(d_px, px, N*sizeof(double), cudaMemcpyHostToDevice);
cudaMemcpy(d_py, py, N*sizeof(double), cudaMemcpyHostToDevice);
dim3 dimGrid(Nx);
dim3 dimBlock(N,1,1);
kernel_0<<< dimGrid, dimBlock>>>(px, py, N);
}
它編譯,但CUDA-memmcheck告訴我很多錯誤:
========= Invalid __global__ read of size 8
========= at 0x00000058 in kernel_0
========= by thread (31,0,0) in block (6,0,0)
========= Address 0x11e0db38 is out of bounds
=========
========= ERROR SUMMARY: 96 errors
你能幫助我嗎?
這個內核不會像這裏顯示的那樣運行。請發佈您正在使用的實際內核。 –
請同時包含您對全局數組和內核調用的分配。如果你發佈一個完整的,簡單的,可編輯的例子來證明這個問題,那麼這可能是最好的選擇。 –
我敢打賭'tid'正被用在'px'或'py'的其中一個讀取中,但是你必須顯示你的* actual *代碼來確認它。 – talonmies