我是OpenCl的新手。我想知道你是否能回答我下面的问题。
我有一个数据分组队列,它的作用类似于路由器队列。数据包到达,存储在队列中,然后由路由器处理。最后,它们被插入到外出队列中。我正在尝试使用OpenCl并发处理数据包。我知道我们可以使用缓冲区,例如,在主机和OpenCl设备之间传输数据。我们用输入/输出数据加载缓冲区。然后,我们使用这些输入/输出缓冲区设置内核参数。当内核运行完成后,我们从OpenCl设备读取数据。
我的问题是,如何独立于其他数据包为每个单独的数据包写入/读取缓冲区?换句话说,假设一个数据包到达,路由器需要在计算设备上处理它(例如,GPU上的核心#1 )。然后另一个数据包到达。路由器需要在不同的计算设备(例如,GPU上的核心#2 )上处理第二个分组。这两个数据包的处理实际上是并发但异步进行的。如何在OpenCl中实现这一点?
感谢您的提前回复。你好,阿里雷扎。
发布于 2016-02-25 04:44:07
我建议使用OpenCL缓冲区的环形缓冲区来保存传入的数据,并在填充它们时将内核排入队列以处理它们。只有当内核有并行数据可处理时,你才能获得良好的性能。即使是可以同时在多个内核上工作的GPU,这个数字也很小(比如可能2个)。真正强大的是内核中的并行计算,否则你的硬件将会闲置。
要让内核并行运行,您需要使用单独的命令队列,因为使用单个命令队列意味着串行执行(除非它是一个无序的命令队列,但这些命令队列没有得到广泛的支持)。
https://stackoverflow.com/questions/35611638
复制相似问题