【发布时间】:2018-11-03 07:51:18
【问题描述】:
使用CU_CTX_SCHED_BLOCKING_SYNC 创建 CUDA 上下文是否会使 CUDA 内核启动实际上是同步的(即像普通的 CPU 同线程函数一样停止 CPU 线程)?
仅文档说明
CU_CTX_SCHED_BLOCKING_SYNC:指示 CUDA 在等待 GPU 完成工作时在同步原语上阻塞 CPU 线程。
但我不确定我是否理解正确。
【问题讨论】:
使用CU_CTX_SCHED_BLOCKING_SYNC 创建 CUDA 上下文是否会使 CUDA 内核启动实际上是同步的(即像普通的 CPU 同线程函数一样停止 CPU 线程)?
仅文档说明
CU_CTX_SCHED_BLOCKING_SYNC:指示 CUDA 在等待 GPU 完成工作时在同步原语上阻塞 CPU 线程。
但我不确定我是否理解正确。
【问题讨论】:
没有。
当使用主机 API 调用主机设备同步 API(如 cuCtxSynchronize 、cuEventSynchronize 或 cuStreamSynchonize)时,这些标志控制主机线程的行为。其他非阻塞 API 调用在这两种情况下都是异步的。
主机行为有两种模型,阻塞或让步。阻塞意味着调用主机线程将在等待调用返回并阻止其他线程对驱动程序的访问时旋转,yield 意味着它可以让步给试图与 GPU 驱动程序交互的其他主机线程。
如果您想在内核启动时强制执行阻塞行为,请使用CUDA_LAUNCH_BLOCKING 环境变量。
【讨论】: