为什么for循环运行不超过1000000

时间:2017-04-28 14:02:26

标签: cuda

我是一个菜鸟并且遵循教程。

这是一个非常简单的程序。

为什么我的结果为零。

我认为我的for循环有问题,因为当我将for循环值减少到百万时,它运行正常。

老师正在使用1000万的价值,他的程序工作正常,但我无法看到我的程序有什么问题,虽然我正在复制每一个和所有内容。

请看一下。

这是内核。

__global__ void AddIntsCUDA(int* a, int* b)
{
    for (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;
}

1 个答案:

答案 0 :(得分:-1)

这应该可以正常工作。如果您的CUDA设备也用作图形卡,这意味着它将在内核功能完成之前超时。因此答案是错误的。

以下是一些提示:

  1. 不要更新循环内的全局内存
  2. 增加CUDA设备的超时时间,这取决于您的 操作系统,你应该检查这个问题 How can I override the CUDA kernel execution time limit on Windows with a secondary GPUs?