gpt4 book ai didi

c - 为什么我们需要 cudaDeviceSynchronize();在带有 device-printf 的内核中?

转载 作者:太空狗 更新时间:2023-10-29 16:52:28 25 4
gpt4 key购买 nike

__global__ void helloCUDA(float f)
{
printf("Hello thread %d, f=%f\n", threadIdx.x, f);
}

int main()
{
helloCUDA<<<1, 5>>>(1.2345f);
cudaDeviceSynchronize();
return 0;
}

为什么是cudaDeviceSynchronize();在许多地方,例如 here内核调用后不需要它?

最佳答案

内核启动是异步的。这意味着它会在启动 GPU 进程后、内核完成执行之前立即将控制权返回给 CPU 线程。

那么这里的 CPU 线程接下来要干什么?应用程序退出。

在应用程序退出时,操作系统会终止将输出发送到标准输出的能力。

因此内核稍后生成的输出无处可去,您将看不到它。

另一方面,如果您使用 cudaDeviceSynchronize(),则内核保证完成(内核的输出将找到一个等待的标准输出队列),之前 允许应用程序退出。

关于c - 为什么我们需要 cudaDeviceSynchronize();在带有 device-printf 的内核中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19193468/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com