1
首先错误: 分段错误(在高亮cudaMalloc行,如果使一个>约61432)cudaMalloc段故障高值
unsigned int xarray[a];
unsigned int *dev_a;
int result[33*a];
int *dev_result;
**cudaMalloc((void **)&dev_a,a * sizeof(unsigned int));**
cudaMemcpy(dev_a,xarray,a*sizeof(int),cudaMemcpyHostToDevice);
kernel<<<a,66>>>(dev_a,dev_result);
cudaMemcpy(result,dev_result,33*a*sizeof(int),cudaMemcpyDeviceToHost);
为什么我提到“大约”以上是因为有时其原因它在a = 61432时有效,有时不适用。我无法理解为什么。
此外,这仅适用于一维网格块的启动。我的意图是推出3D网格[a * a * a]。
你不能指望编译器能够静态分配的数组('result' )在堆栈上很大。改为使用'std :: vector'。 –
2012-07-18 18:35:08
你想分配一个'61432³'电网吗?你从哪里得到一个8PB内存的GPU? – leftaroundabout 2012-07-18 18:51:42
我用malloc来代替,它似乎解决了这个问题。谢谢 ! – dparkar 2012-07-18 19:06:15