2016-02-24 132 views
0

我是OpenCl中的新成员。我想知道你能否回答我下面的问题。异步数据处理

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

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

感谢您的提前回复。 Regards, Alireza。

回答

0

我建议使用OpenCL缓冲区的环形缓冲区来保存传入的数据,并且在您填充内核时将它们排入内核以处理它们。如果内核具有并行数据,你只能获得良好的性能。甚至可以在同一时间在多个内核上工作的GPU数量很少(例如2)。真正的力量是内核中的并行计算,否则你的硬件将空闲。

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

+0

谢谢Dithermaster。 –