首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AMD OpenCL异步执行效率

AMD OpenCL异步执行效率
EN

Stack Overflow用户
提问于 2017-02-18 21:06:27
回答 1查看 343关注 0票数 2

例如,我有三个任务A、B和C,其中B和C依赖于A,并且有足够的CU同时运行B和C。然后我在queue0上排队A和C,在queue1上排队B。而且在A结束后B开始之前有一个巨大的延迟,这使得整个作业比只使用一个队列花费更长的时间。

这是正常的吗?还是我做错了什么?

如果需要,我会写一个示例代码,原始代码被大量封装。但实际上我只是在A入队时创建了一个事件,并将其传递给B的入队,这两个队列在顺序队列中都是正常的。似乎没什么特别的。

EN

回答 1

Stack Overflow用户

发布于 2017-02-19 18:06:05

我找不到关于延迟的信息,但是,要称之为正常,我们需要统计得出所有平台的延迟基础,下面是我的:

HD7870和R7-240表现出相同的行为。Windows 10.双通道RAM。OpenCl 1.2(64位内部版本)。CodeXL分析。所有有序队列。一些老司机在深红之前。

使用非阻塞命令的

  • eventless单队列:几微秒到200微秒波动,但平均值必须很低,比如50微秒,取决于驱动程序,对于某些内核,它可能会达到500微秒,这可能是因为太多的参数和类似的准备工作。
  • event源=单个队列-A,事件目标=队列-B:队列100-150微秒到半毫秒(看起来是恒定的)
  • event源= N-1个队列列表,事件目标=队列-N:关于队列的所有等待时间的总和,但某种等待时间隐藏在那里,因此其不超过2毫秒(有时峰值为3-5毫秒rarely)
  • event源=队列,由主机的clWaitForEvents等待:关于millisecond
  • event源=的,while循环中主机的clGetEventInfo正在等待:对于单队列,等待时间接近0.5毫秒,有时甚至是less
  • clFinish:这是每个队列的最大延迟,如least.
  • user事件时的1ms:在codeXL中生成错误,因此我无法查询它们的性能,但它是较旧的驱动程序和较旧的codeXL版本。

有后台进程: avira,google chrome,..它们先进到足以使用GPU来实现它们的目的,并且可能会阻碍内核执行。

我对这些问题的解决方案是通过使用许多独立的队列来进行流水线操作,以隐藏它们的事件延迟,效果非常好。R7-240在16个队列上运行良好。它只有2个ACE单元,因此具有4-8个ACE单元的较新卡可以使用更多队列。

我没有尝试和怀疑的是:N个队列等待完成,M个其他队列具有事件列表性能。也许树状等待结构对于许多队列来说可能更好,如果它们延迟太多。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42315537

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档