CUDA应用程序.exe已停止工作;错误

时间:2014-04-16 12:48:01

标签: cuda nvidia

新来的cuda。上面的代码是我正在研究的cuda程序。执行for循环时,它显示lat.exe已停止工作。但是当我将for循环从5000减少到1000时,它的效果非常好。我如何使它与5000一起使用,因为这是我将要使用的数字。

int main() {

int *a, *b, *c;
int *d_a, *d_b, *d_c;


a = (int *)malloc(SIZE*sizeof(int));
b = (int *)malloc(SIZE*sizeof(int));
c = (int *)malloc(SIZE*sizeof(int));

cudaMalloc( &d_a, SIZE*sizeof(int));
cudaMalloc( &d_b, SIZE*sizeof(int));
cudaMalloc( &d_c, SIZE*sizeof(int));


for( int i = 0; i < SIZE; i++ )
{
    a[i] =i;
    b[i] =i;
    c[i] =0;
}

cudaMemcpy( d_a, a, SIZE*sizeof(int), cudaMemcpyHostToDevice );
cudaMemcpy( d_b, b, SIZE*sizeof(int), cudaMemcpyHostToDevice );
cudaMemcpy( d_c, c, SIZE*sizeof(int), cudaMemcpyHostToDevice );


InitialAdd<<< 3 , SIZE >>>( d_a, d_b, d_c, SIZE);

cudaMemcpy( c, d_c, SIZE*sizeof(int), cudaMemcpyDeviceToHost );

for( int i = 0; i < 5000; i++)
    printf("c[%d] = %d\n", i, c[i]);

free(a);
free(b);
free(c);

cudaFree(d_a);
cudaFree(d_b);
cudaFree(d_c);

return 0;

}

1 个答案:

答案 0 :(得分:3)

你不能用5000个线程创建块。那是你的问题。这就是为什么你的代码使用size = 1000而不使用size = 5000.Block最多有1024个线程(通常)。