CUDA application.exe已停止工作;错误
我是cuda的新手。上面的代码是我正在使用的cuda程序。执行for循环时,它显示lat.exe已停止工作。但是当我将for循环从5000减少到1000时,它工作得非常好。我如何使它与5000工作,因为这是我将工作的数字 int main() {CUDA application.exe已停止工作;错误,cuda,nvidia,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*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));
Cudamaloc(&d_a,尺寸*sizeof(int));
Cudamaloc(&d_b,尺寸*sizeof(int));
Cudamaloc(&d_c,尺寸*sizeof(int));
对于(int i=0;i(d_a、d_b、d_c、大小);
cudaMemcpy(c,d_c,SIZE*sizeof(int),cudaMemcpyDeviceToHost);
对于(int i=0;i<5000;i++)
printf(“c[%d]=%d\n”,i,c[i]);
免费(a);
免费(b);
免费(c);
库达弗里(杜阿);
库达弗里(杜布);
库达弗里(d_c);
返回0;
}不能创建具有5000个线程的块。那是你的问题。这就是为什么您的代码使用size=1000而不使用size=5000。块最多有1024个线程(通常)。不能创建包含5000个线程的块。那是你的问题。这就是为什么您的代码使用size=1000而不使用size=5000。块最多有1024个线程(通常)。不能创建包含5000个线程的块。那是你的问题。这就是为什么您的代码使用size=1000而不使用size=5000。块最多有1024个线程(通常)。不能创建包含5000个线程的块。那是你的问题。这就是为什么您的代码使用size=1000而不使用size=5000。块最多有1024个线程(通常)。提供了分配d_b、d_c、d_a和c的代码,当然,
大小>=5000,不是吗?@user3018144已使用您请求的代码对其进行了编辑。@jackolanter。是的,你是对的,我错过了。他现在正在工作。谢谢你不能用5000个线程创建块?!提供分配d_b、d_c、d_a和c的代码,当然,SIZE>=5000,不是吗?@user3018144已经用您请求的代码编辑了它。@jackolanten。是的,你是对的,我错过了。他现在正在工作。谢谢你不能用5000个线程创建块?!提供分配d_b、d_c、d_a和c的代码,当然,SIZE>=5000,不是吗?@user3018144已经用您请求的代码编辑了它。@jackolanten。是的,你是对的,我错过了。他现在正在工作。谢谢你不能用5000个线程创建块?!提供分配d_b、d_c、d_a和c的代码,当然,SIZE>=5000,不是吗?@user3018144已经用您请求的代码编辑了它。@jackolanten。是的,你是对的,我错过了。他现在正在工作。谢谢你不能用5000个线程创建块?!
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;