例如,我有三个任务A、B和C,其中B和C依赖于A,并且有足够的CU同时运行B和C。然后我在queue0上排队A和C,在queue1上排队B。而且在A结束后B开始之前有一个巨大的延迟,这使得整个作业比只使用一个队列花费更长的时间。
这是正常的吗?还是我做错了什么?
如果需要,我会写一个示例代码,原始代码被大量封装。但实际上我只是在A入队时创建了一个事件,并将其传递给B的入队,这两个队列在顺序队列中都是正常的。似乎没什么特别的。
发布于 2017-02-19 18:06:05
我找不到关于延迟的信息,但是,要称之为正常,我们需要统计得出所有平台的延迟基础,下面是我的:
HD7870和R7-240表现出相同的行为。Windows 10.双通道RAM。OpenCl 1.2(64位内部版本)。CodeXL分析。所有有序队列。一些老司机在深红之前。
使用非阻塞命令的
有后台进程: avira,google chrome,..它们先进到足以使用GPU来实现它们的目的,并且可能会阻碍内核执行。
我对这些问题的解决方案是通过使用许多独立的队列来进行流水线操作,以隐藏它们的事件延迟,效果非常好。R7-240在16个队列上运行良好。它只有2个ACE单元,因此具有4-8个ACE单元的较新卡可以使用更多队列。
我没有尝试和怀疑的是:N个队列等待完成,M个其他队列具有事件列表性能。也许树状等待结构对于许多队列来说可能更好,如果它们延迟太多。
https://stackoverflow.com/questions/42315537
复制相似问题