out of order 与多个queue的命令执行区别?

时间:2021-06-02 17:39:01
本人第一次使用out of order,有些不明白的地方
out of order是不知只针对一个queue中多个命令的执行顺序? 然后通过等待事件调整执行顺序?
如果创建多个queue,然后每个queue的命令执行设为非阻塞,是不是也可以通过等待事件来调整执行顺序?

这两者的主要区别在哪? 先谢谢!

5 个解决方案

#1


cl_event在与命令绑定 成功后获取到了信息,进而使下个与其等待相关的命令进行执行,然后cl_event是否需要进行释放?如果是循环执行不释放是否有影响?

#2


我的理解是通过 等待 cl_event 调整执行顺序 其实质是完全由 Host 端来确定执行顺序,因为通常情况下 只有一个Host 线程来提交任务并进行等待。 

#3


引用 1 楼 shihufeng 的回复:
cl_event在与命令绑定 成功后获取到了信息,进而使下个与其等待相关的命令进行执行,然后cl_event是否需要进行释放?如果是循环执行不释放是否有影响?


应该需要调用clReleaseEvent来释放之前绑定的事件对象。由于每次调用clEnqueue类接口而绑定的事件对象都是不同的,所以如果在循环里面的话,需要在每次迭代完成后使用该事件对象。

#4


首先顺序的command queue里执行顺序就是加入顺序,没办法改的。

然后无序command queue和多个command queue是两回事。不同command queue里的任务是可以并发的,所以有一个command queue负责提交kernel,一个command queue负责处理IO的模式。新的GPU支持4路以上的多任务并发,要用上4路并发就得有4个command queue。

一个command queue里的任务最终还是一个接一个的执行,是不是无序只是说是不是按添加的顺序执行(但是据说N卡没按套路出牌,无序command queue里的任务能并行,但是没用过不知道)。

#5


该回复于2015-11-07 13:01:36被管理员删除

#1


cl_event在与命令绑定 成功后获取到了信息,进而使下个与其等待相关的命令进行执行,然后cl_event是否需要进行释放?如果是循环执行不释放是否有影响?

#2


我的理解是通过 等待 cl_event 调整执行顺序 其实质是完全由 Host 端来确定执行顺序,因为通常情况下 只有一个Host 线程来提交任务并进行等待。 

#3


引用 1 楼 shihufeng 的回复:
cl_event在与命令绑定 成功后获取到了信息,进而使下个与其等待相关的命令进行执行,然后cl_event是否需要进行释放?如果是循环执行不释放是否有影响?


应该需要调用clReleaseEvent来释放之前绑定的事件对象。由于每次调用clEnqueue类接口而绑定的事件对象都是不同的,所以如果在循环里面的话,需要在每次迭代完成后使用该事件对象。

#4


首先顺序的command queue里执行顺序就是加入顺序,没办法改的。

然后无序command queue和多个command queue是两回事。不同command queue里的任务是可以并发的,所以有一个command queue负责提交kernel,一个command queue负责处理IO的模式。新的GPU支持4路以上的多任务并发,要用上4路并发就得有4个command queue。

一个command queue里的任务最终还是一个接一个的执行,是不是无序只是说是不是按添加的顺序执行(但是据说N卡没按套路出牌,无序command queue里的任务能并行,但是没用过不知道)。

#5


该回复于2015-11-07 13:01:36被管理员删除