Cuda 为什么for循环的运行速度不超过1000000
我是一个书呆子,遵循一个教程 这是一个非常简单的程序 为什么我的结果是零 我认为我的for循环有问题,因为当我将for循环的值减少到百万时,它工作正常 老师使用了1000万的值,他的程序运行良好,但我看不出我的程序有什么问题,尽管我正在复制每一个和所有内容 请看一看 这是内核Cuda 为什么for循环的运行速度不超过1000000,cuda,Cuda,我是一个书呆子,遵循一个教程 这是一个非常简单的程序 为什么我的结果是零 我认为我的for循环有问题,因为当我将for循环的值减少到百万时,它工作正常 老师使用了1000万的值,他的程序运行良好,但我看不出我的程序有什么问题,尽管我正在复制每一个和所有内容 请看一看 这是内核 __global__ void AddIntsCUDA(int* a, int* b) { for (int i = 0; i < 10000005; i++) a[0] += b[0]; }
__global__ void AddIntsCUDA(int* a, int* b)
{
for (int i = 0; i < 10000005; i++)
a[0] += b[0];
}
\uuuuu全局\uuuuu无效附加数据(int*a,int*b)
{
对于(int i=0;i<10000005;i++)
a[0]+=b[0];
}
这是主要的
int main()
{
int a = 0;
int b = 1;
int *d_a, *d_b;
if (cudaMalloc(&d_a, sizeof(int)) != cudaSuccess)
{
cout << "Error" << endl;
}
if (cudaMalloc(&d_b, sizeof(int)) != cudaSuccess)
{
cout << "Error" << endl;
}
if (cudaMemcpy(d_a, &a, sizeof(int), cudaMemcpyHostToDevice) != cudaSuccess)
{
cout << "Error" << endl;
}
if (cudaMemcpy(d_b, &b, sizeof(int), cudaMemcpyHostToDevice) != cudaSuccess)
{
cout << "Error" << endl;
}
AddIntsCUDA << <1, 1 >> >(d_a, d_b);
if (cudaMemcpy(&a, d_a, sizeof(int), cudaMemcpyDeviceToHost) != cudaSuccess)
{
cout << "Error in back copy" << endl;
cudaFree(d_a);
cudaFree(d_b);
return 0;
}
cout << "The answer is " << a << endl;
cudaFree(d_a);
cudaFree(d_b);
cudaDeviceReset();
system("pause");
return 0;
}
intmain()
{
int a=0;
int b=1;
int*d_a,*d_b;
如果(cudamaloc(&d_a,sizeof(int))!=cudaSuccess)
{
cout这应该可以正常工作。如果您的CUDA设备也用作图形卡,这意味着它将在内核函数完成之前超时。因此,答案将是错误的
以下是一些提示:
不要在循环内更新全局内存
增加CUDA设备的超时时间,这取决于您的
操作系统,您应该检查这个问题
你的for循环被编码为运行1000000次,然后停止。你还期望什么?你希望它做什么?老师正在运行1000005次的循环,但当我提出我的循环大于10000次时,结果会出错。不要在不理解的情况下复制代码,独自做作业。这很清楚为什么不超过1000.000次。告诉我这次请。我正在寻找很长一段时间的解决方案。我想如果您不想回答我提出的问题,我可能无法帮助您。在这种情况下,是否会产生设备无响应错误?它只会在没有完成循环的情况下杀死内核函数。在[0]中留下一些不完整的值。