Cuda 使用二维启动的内核不工作
我有一个初始化数组的简单内核:Cuda 使用二维启动的内核不工作,cuda,Cuda,我有一个初始化数组的简单内核: __global__ void test(int *result) { unsigned int gID = blockIdx.x * blockDim.x + threadIdx.x; unsigned int sID = blockIdx.y * blockDim.y + threadIdx.y; result[sID] = sID + gID; } 我想启动这个内核,就像它是一个双循环的方式。我的设置如下: int size =
__global__ void test(int *result) {
unsigned int gID = blockIdx.x * blockDim.x + threadIdx.x;
unsigned int sID = blockIdx.y * blockDim.y + threadIdx.y;
result[sID] = sID + gID;
}
我想启动这个内核,就像它是一个双循环的方式。我的设置如下:
int size = 30;
int * result = (int*) malloc(sizeof(int)*size);
int *resultD;
cudaMalloc((void**)&resultD, sizeof(int)*size);
for(int i = 0; i < size; i++) {
result[i] = 0;
}
cudaMemcpy(resultD, result, sizeof(int)*size, cudaMemcpyHostToDevice);
dim3 block(100,30);
test<<<1, block>>>(resultD);
cudaMemcpy(result, resultD, sizeof(int)*size, cudaMemcpyDeviceToHost);
for(int i = 0; i < size; i++) {
cout << result[i] << endl;
}
int size=30;
int*result=(int*)malloc(sizeof(int)*size);
int*resultD;
cudamaloc((void**)和resultD,sizeof(int)*size;
对于(int i=0;i cout结果保持不变的原因是内核无法启动
确保始终检查主机CUDA api调用返回的错误代码,以捕获这些类型的错误
在这种情况下,您会发现一个指定启动失败的错误,其原因是您的块大小(30*100=3000)大于允许的最大大小,即1024,您需要将它们划分为多个线程块。结果保持不变的原因是内核无法启动
确保始终检查主机CUDA api调用返回的错误代码,以捕获这些类型的错误
在这种情况下,您会发现一个指定启动失败的错误,其原因是您的块大小(30*100=3000)大于允许的最大大小,即1024。如果您想要一个内核有那么多线程(这不是不合理的),您需要将它们划分为多个线程块