异步数据处理

时间:2016-02-24 19:48:09

标签: opencl

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

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

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

感谢您的回复。 问候, 阿里。

1 个答案:

答案 0 :(得分:0)

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

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