【问题标题】:Asynchronous data processing异步数据处理
【发布时间】:2016-02-25 04:44:07
【问题描述】:

我是 OpenCl 的新手。我想知道您是否可以回答我的以下问题。

我有一个数据包队列,其作用类似于路由器队列。数据包到达,存储在队列中,然后由路由器处理。最后,它们被插入到传出队列中。 我正在尝试使用 OpenCl 同时处理数据包。我知道我们可以使用缓冲区,例如,在主机和 OpenCl 设备之间传输数据。我们用输入/输出数据加载缓冲区。然后,我们使用这些输入/输出缓冲区设置内核参数。当内核运行完成后,我们从 OpenCl 设备中读取数据。

我的问题是,如何独立于其他数据包为每个数据包写入/读取缓冲区? 换句话说,假设一个数据包到达,路由器需要在计算设备上处理它(例如 GPU 上的核心 #1)。然后另一个数据包到达。路由器需要在不同的计算设备(例如 GPU 上的核心 #2)上处理第二个数据包。这两个数据包的处理实际上是同时发生的,但是是异步的。这如何在 OpenCl 中实现?

感谢您提前回复。 问候, 阿里雷萨。

【问题讨论】:

    标签: opencl


    【解决方案1】:

    我建议使用 OpenCL 缓冲区的环形缓冲区来保存传入的数据,并在填充它们时让内核排队处理它们。如果内核有并行数据可以处理,您只会获得良好的性能。即使是可以同时在多个内核上工作的 GPU,这个数量也很小(可能是 2 个)。真正的力量是内核中的并行计算,否则您的硬件将处于空闲状态。

    要让内核并行运行,您需要使用单独的命令队列,因为使用单个命令队列意味着串行执行(除非它是无序命令队列,但这些命令队列并未得到广泛支持)。

    【讨论】:

    • 感谢 Dithermaster。
    猜你喜欢
    • 2014-02-13
    • 1970-01-01
    • 2017-09-06
    • 1970-01-01
    • 2019-09-04
    • 2014-08-05
    • 2018-12-12
    • 2019-08-29
    • 2018-10-25
    相关资源
    最近更新 更多