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