[CUDA] 设置sync模式cudaSetDeviceFlags

1. 设置cuda synchronize的等待模式

  • 参考资料:https://docs.nvidia.com/cuda/pdf/CUDA_Runtime_API.pdf

cuda的 synchronize等待模式分为: Yield方式, busy waiting方式(spin), blocking方式

  • busy waiting (spin): 是一直占用cpu,属于轮训式等待
  • yield:是让出时间片,将时间片轮空,可能会导致很多切入切出
  • blocking:方式会导致线程阻塞,从而让出cpu,等待stream上的gpu操作结束后,会触发block 的cpu线程/进程,然后恢复执行;但是这个是被动唤醒模式;可能会导致block的cpu恢复产生延迟,从而产生空白时间,导致线程整体执行耗时增加。
    前两个模式,在gpu操作完成后,cpu主线程会及时响应,从而继续往后执行;但是第三个会产生block空隙,如果主线程是FIFO这种实时线程,优先级高且抢占cpu资源,并且CPU资源充足的情况,则block的cpu线程会恢复较快但不排除存在延迟情况。
  • 采用blocking模式后,nsight观察的现象有几个
    - gpu context切换更加频繁了,应该是block阻塞导致的
    - block恢复存在延迟,导致一些空白gpu时间,如下图红色框
    <

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值