我正在使用Visual Studio 2015(在GeForce GTX 1060上运行)探索CUDA 8.0。
我尝试设置2000个块来运行1024个线程(支持的值)但是在启动内核后我得到了错误代码4。这些块没有做任何异国情调,事实上我甚至没有使用共享内存。我做错了什么?
我的代码如下:
#include "cuda_runtime.h"
#include "device_launch_parameters.h"
#include <stdio.h>
#include <stdlib.h>
__global__
void addKernel()
{
unsigned int i, ans = 0;
for (i = 0; i < 100000; i++)
{
ans += i;
}
}
int main()
{
addKernel << <2000, 1024 >> >();
cudaError_t cudaStatus = cudaDeviceSynchronize();
if (cudaStatus != cudaSuccess) {
fprintf(stderr, "cudaDeviceSynchronize returned error code %d after launching addKernel!\n", cudaStatus);
}
cudaDeviceReset();
getchar();
return 0;
}
输出:
cudaDeviceSynchronize returned error code 4 after launching addKernel!
当我将块数减少一半时,错误就会消失。有趣的是,我可以通过将内核中循环的100,000次迭代减少到1000来消除错误。