新来的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;
}
答案 0 :(得分:3)
你不能用5000个线程创建块。那是你的问题。这就是为什么你的代码使用size = 1000而不使用size = 5000.Block最多有1024个线程(通常)。