synchronization - CUDA 阻塞标志

标签 synchronization cuda

创建 CUDA 事件时,您可以选择打开 cudaEventBlockingSync旗帜。但是 - 如果创建带有或不带有标志的事件之间的区别呢?我read the fine manual ;这对我来说没有意义。什么是“调用主机线程”,不使用标志时什么“阻塞”?

4.6.2.7 cudaError_t cudaEventSynchronize(cudaEvent_t event)

Blocks until the event has actually been recorded. ... Waiting for an event that was created with the cudaEventBlockingSync flag will cause the calling host thread to block until the event has actually been recorded.

最佳答案

cudaEventBlockingSync将定义主机将如何等待事件发生。

cudaEventBlockingSync是 SET CPU 可以放弃主机线程。即 CPU 将被传递一个不同的线程(可能是一个进程)。宿主线程稍后将重新获取 CPU。通过这种方式,主机线程不会独占所有CPU时间,可以让主机做其他工作。

cudaEventBlockingSync未设置 CPU 将忙等待,即 CPU 将进入检查事件循环。当这种情况发生时,CPU 只会旋转,寻找要发生的事件。这通常会导致 CPU 性能计指向 100%。通过这种方式,宿主线程独占了所有的 CPU 时间。

未设置 cudaEventBlockingSync导致从内核执行结束到控制权返回线程的最小延迟。您想使用哪种设置取决于内核在做什么。即事件发生需要多长时间,而 CPU 阻塞涉及多少调度开销。不设置此标志的代价是在等待事件发生时无法执行任何其他 CPU 工作(其他线程)。

关于synchronization - CUDA 阻塞标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4822809/

相关文章:

architecture - NVPTX 通用内存空间在架构中的位置

python - Python 中的 GPU 加速数据绘图

c++ - 如何正确实现在 Cuda/C++ 中从主机和设备代码调用其成员的类?

c++ - 如何克服 WaitForMultipleObjects 的 MAXIMUM_WAIT_OBJECTS 限制?

c# - 如何使Windows服务请求等到上一个请求完成

c++ - 特定的生产者-消费者场景

java - 确保所有任务完成的同步对象

android - 在 Android/Eclipse 上使用 3 个 MediaPlayer 对象同步播放音乐

parallel-processing - 如何将传输数据与执行推力算法重叠?

linux - 在Linux下编译原本在Windows下开发的CUDA代码时出现错误