0
extern "C" void callKernel()
{
    for(int i=0;i<10;i++)
    {
        calc<<< grid, thread >>>(d_arr);
        copyElement<<< grid, thread >>>(d_arr,d_arr_part,3);
        findMax<<< grid, thread >>>(d_arr_part, d_max);
        positionChange<<< grid, thread >>>(d_arr, d_max);
    }
}

上面的代码是关于计算内核的。

内核函数的功能是这样的。

"calc" : 在 d_arr 中计算并更新 d_arr 的元素值。

“copyElement”:例如,d_arr 是 4step 数组,在数组中,我只想要第 3 个元素,所以我分配其他变量 d_arr_part 并将 d_arr 的第 3 个元素复制到 d_arr_part。

"findMax" : 在 d_arr_part 中找到最大值并将最大值存储到 d_max。

"positionChange" : d_arr 元素根据 d_max 值更新。

问题

当我执行我的程序时,结果没有一致性。每当我执行时,结果都会改变。我在谷歌搜索这个问题,发现内核函数是同时执行的。我的意图是所有内核函数都按顺序执行。我在第 3.2.5 节阅读了 NVIDIA 的 CUDA C 编程指南。但我不明白该怎么做才能解决这个问题。如果有人有想法,请告诉我方法。提前致谢。

4

1 回答 1

1

您可以cudaDeviceSynchronize在内核执行之间使用以保证顺序。但是,您的代码不需要这样做,所以我认为您的内核中可能存在错误。

于 2012-07-23T05:41:37.123 回答