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编程指南。但我无法理解如何解决问题。如果有人有想法,请告诉我。提前谢谢。
答案 0 :(得分:1)
您可以在内核执行之间使用cudaDeviceSynchronize
来保证顺序。但是,您的代码不需要这样,所以我认为您的内核可能存在错误。