gpu - 在 OpenCL 上使用阻塞写入和 event.wait() 与非阻塞写入之间的区别

标签 gpu opencl blocking nonblocking read-write

这可能会很愚蠢,但我偶然发现了这个问题,而且我自己无法回答。

在 OpenCL 中写入缓冲区时使用以下两段代码有什么实际区别?

  1. 阻止写入:
queue->enqueueWriteBuffer(d_vec, CL_TRUE, 0, sizeof(int) * vec.size(), vec.data());
  • 使用 event.wait() 进行非阻塞写入:
  • cl::Event event;
    queue->enqueueWriteBuffer(d_vec, CL_FALSE, 0, sizeof(int) * vec.size(), vec.data(), nullptr, &event);
    event.wait();
    

    在我看来,这两个代码最终的行为是相同的。谁能解释一下其中的区别吗?

    谢谢!

    最佳答案

    是的,如果您只是这么做的话,它们实际上是相同的。但是,如果您另外将内核或其他非阻塞操作排队到并发队列或其他队列,则缓冲区写入或读取可能会与这些其他操作并行运行。您还可以通过使用事件作为后续排队任务的输入(依赖项)来跳过等待写入事件完成的过程。

    阻塞写入只是当您不需要任何这些功能时的捷径。

    关于gpu - 在 OpenCL 上使用阻塞写入和 event.wait() 与非阻塞写入之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64547520/

    相关文章:

    cuda - 对 GPU 上的数组执行推力::min_element

    linux - 如何正确链接opencl和ros?

    multithreading - 我们可以使用 `shuffle()` 指令在 WaveFront 中的项目(线程)之间进行 reg-to-reg 数据交换吗?

    使用 CPU 和 GPU 添加数组的 Java 基准测试并比较性能

    Python 多处理意外阻塞

    java - Akka actor 被另一个运行 CPU 密集型作业的 actor 阻止

    sql-server-2000 - SQL SPID 阻塞本身

    pytorch - 训练 DNN 时如何监控 GPU 内存使用情况?

    python - 不使用 GPU 的 Tensorflow 数据集 API

    c++ - 简单的 GPU 编程(用 Cg?)