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 编程指南。但我不明白该怎么做才能解决这个问题。如果有人有想法,请告诉我方法。提前致谢。