Loading [MathJax]/jax/output/CommonHTML/config.js
社区首页 >问答首页 >OpenCL内核上GPU性能慢

OpenCL内核上GPU性能慢
EN

Stack Overflow用户
提问于 2017-07-13 03:12:26
回答 1查看 1.3K关注 0票数 3

我有点迷失与一些性能与OpenCL在一个AMD (夏威夷核心或Radeon R9 390)。

该行动如下:

  • 将内存对象#1发送到GPU
  • 执行内核#1
  • 将内存对象#2发送到GPU
  • 执行内核#2
  • 将内存对象#3发送到GPU
  • 执行内核#3

依赖性是:

  • 内存对象#1的内核#1
  • 内存对象#2上的内核#2以及内核#1的输出内存
  • 内存对象#3上的内核#3以及内核#1和#2的输出内存

内存传输和内核执行在两个单独的命令队列中执行。命令依赖由OpenCL中定义的GPU事件完成。

现在,整个操作被循环起来,以便使用相同的输入数据进行性能分析。

正如您在时间线中所看到的,主机在GPU上等待很长时间才能完成clWaitForEvents(),而GPU大部分时间都在闲置。您还可以看到重复的操作。为了方便起见,我还提供了所有发出的OpenCL命令的列表。

我现在的问题是:

  1. 为什么GPU会空转这么久?在我的头脑中,我可以很容易地把所有的“蓝色”项目放在一起,并立即开始操作。内存传输为6GB/s,这是预期的速率。
  2. 为什么内核执行得这么晚?为什么内核#2和内核#3的执行之间存在差距?
  3. 为什么内存传输和内核不并行执行?我使用两个命令队列,只有一个队列--性能更差。

只要把所有的命令都集中在我的脑子里(当然,保持依赖性,第一绿色必须在第一蓝色之后开始),我就可以提高三倍的性能。我不知道为什么GPU这么慢。有人有洞察力吗?

某数运算

  • 内存传输#1是253 s
  • 内存传输#2是120 s
  • 内存传输#3是143 s-由于未知原因总是太高,应该是#2的1/2或在70-80 s范围内。
  • 内核#1是74
  • 内核#2是95 s
  • 内核#3是107

由于内核#1比内存传输#2更快,内核#2比内存传输#3更快,所以总的时间应该是:

  • 253 s+ 120 s+ 143 s+ 107 s= 623 s

但clWaitForEvents是

  • 1758秒

是的,有一些损失,我很好,大约10% (60 %),但300%是太多。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-13 08:18:10

正如@DarkZeros所说,您需要通过使用多个命令队列在时间行中重叠来隐藏内核队列开销。

为什么GPU会空转这么久?

因为您使用的是两个命令队列,而且它们(可能)是连续运行的(可能),而这些事件会使它们等待时间更长。

如果所有内容都是串行的,则应该使用单个队列。如果可以添加双缓冲或类似技术来推进计算,则应该允许两个队列重叠操作。

为什么内核执行得这么晚?

宽漏洞由主机端延迟(如排队命令、设备刷新命令、主机端算法和设备端事件控制逻辑)组成。也许事件可以小到20-30微秒,但主机设备之间的交互作用更大。

如果您摆脱了事件并使用了单个队列,驱动程序甚至可以添加早期计算技术来填补这些空白,甚至在您对这些命令进行排队之前(可能),就像CPU进行早期分支(预测)一样。

为什么内存传输和内核不并行执行?

没有强制执行,但是驱动程序也可以检查内核和副本之间的依赖关系,为了保持数据的完整性,他们可以停止一些操作,直到其他一些操作完成(可能)。

您确定内核和缓冲区副本完全独立吗?

另一个原因可能是两个队列没有太多可选择的重叠。如果两个队列都有两种类型的操作,那么它们将有更多的选项可以重叠,比如内核+内核,复制+复制,而不仅仅是kernel+copy。

如果程序有太多的小内核,您可以尝试OpenCL 2.0动态并行,这使得设备调用内核本身比主机端队列更快。

也许您可以添加一个更高级别的并行性,例如图像级并行(如果它的图像处理是这样的话),以保持gpu的忙碌。同时处理5-10个映像,这应该确保独立的内核/缓冲区执行,除非所有映像都在同一个缓冲区中。如果这不起作用,那么您可以启动相同程序的5-10个进程(进程级并行)。但是,太多的上下文可能会限制驱动程序,所以图像级的并行性必须更好。

R9 390必须能够使用8-16命令队列进行处理。

1758 s

有时,即使是空的内核也会让它等待500到100秒。最可能的情况是,您应该排队1000个周期,在结束时等待一次。如果每个周期在用户单击按钮后都能工作,那么用户就不会注意到1.7ms的延迟。

  • 使用多个队列。
  • 消除队列之间的事件(如果有的话)。
  • 让每个队列做各种工作。
  • 在主机端的单个等待事件之前进行多次迭代。
  • 如果存在OpenCL 2.0,也可以尝试设备端的队列,但这只适用于内核执行,而不适用于主机的副本。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45078951

复制
相关文章
使用python判断IP段可用IP及数量
使用python判断IP段可用IP及数量, 很简单.几个命令就可以(本文基于python3).
用户8851537
2021/07/22
2.3K0
静态住宅代理可以帮助facebook养号吗?使用静态住宅ip时该如何购买ip?
在当前的互联网环境下,许多企业都需要使用facebook等社交媒体平台进行市场推广、品牌宣传和客户服务等业务,而频繁更换ip、账号被封等问题也时常发生,导致市场推广等业务受阻。在这种情况下,使用静态住宅代理可以有效避免facebook等社交媒体平台对国内ip的封锁,从而提高账号的使用效果和稳定性。那么,静态住宅代理究竟能否帮助facebook养号呢?要想使用静态住宅ip时又该如何购买ip呢?本文将从这两个方面进行探讨。
用户10526222
2023/05/04
9360
如何在Java中使用HttpClient发送HTTP请求?并使用静态IP代理?
Java是一种流行的编程语言,可以使用HttpClient库发送HTTP请求。在某些情况下,使用IP代理可以隐藏您的IP地址并保护您的隐私。本文将介绍如何在Java中使用HttpClient库发送HTTP请求,并使用IP代理。
garry5544..
2023/03/28
3.1K0
跨境电商通常选择使用动态IP还是静态IP?
跨境电商需要用到IP代理服务的原因是因为在跨境交易过程中,涉及到不同国家和地区的网络环境和政策法规,有些国家和地区可能会限制或禁止访问特定的网站或应用程序。此外,一些电商平台还会限制同一IP地址对其网站的访问次数,以避免恶意攻击或滥用行为。因此,使用IP代理服务可以实现虚拟地理位置和多IP轮换,帮助电商卖家绕过这些限制,提高访问成功率和交易效率。
互联网的鱼
2023/04/23
6800
跨境电商SEO优化需要用到静态住宅代理吗?想使用静态住宅ip如何购买ip?
随着全球市场的不断扩大,跨境电商也越来越受到重视。然而,针对跨境电商的SEO优化需要考虑很多因素,其中之一就是ip地址。静态住宅代理是一个不错的选择,那么我们为什么需要使用静态住宅代理?如果想使用静态住宅ip,又该如何购买ip呢?接下来,我们将逐一探讨这些问题。
用户10526222
2023/05/06
4090
静态ip代理如何更好帮助跨境业务的开展,需要使用ip代理池吗?
随着全球化进程的加速,越来越多的企业开始涉足跨境业务,而跨境业务的开展需要解决很多技术问题,其中ip地址的问题是一个非常重要的方面。静态ip代理作为一种常见的技术手段,可以帮助企业更好地开展跨境业务,那么静态ip代理如何更好地帮助跨境业务的开展?为了业务更好开展是否需要使用ip代理池?本文将详细解答。
用户10526222
2023/04/28
4120
Linux (KDE) 中使用Network Settings设置静态ip
在 Linux (KDE) 中使用 Network Settings 设置s5静态IP详细教程 。
华科云商小徐
2023/10/26
5090
TCP/IP之DHCP协议静态配置DHCP协议
有两种获取方法,一种是静态配置,就是从网络管理员获取一个给定的IP地址,也叫硬编码,还有一种就是动态配置IP地址,这就是我们即将要讲的DHCP协议,动态主机配置协议。
desperate633
2018/08/22
1.7K0
TCP/IP之DHCP协议静态配置DHCP协议
linux ip命令如何使用
ifconfig命令已被ip命令替换。ip命令有点类似于ifconfig命令,但它更强大,附加了更多的功能。ip命令可以执行一些网络相关的任务,是ifconfig不能操作的。
用户8418197
2022/03/25
3.3K0
浏览器使用静态IP的操作指南
大家好!今天我将为大家分享关于如何在360极速浏览器中使用静态ip的知识。静态ip可以帮助我们隐藏真实的IP地址,实现匿名浏览以及访问特定的区域限制网站。现在,让我们一起来了解并学习使用静态ip的方法吧!
华科云商小徐
2023/09/18
4430
DHCP:IP 并非与生俱来
众所周知,因特网上的每台设备都规定了其全世界唯一的地址,也就是说 “IP 地址”,正是由于有了 IP 地址,才保证了用户在连网的计算机上操作时,能够高效而且方便地从千千万万台计算机中选出自己所需的对象来。
飞天小牛肉
2021/06/24
7390
如果使用第三方综合工具,Xilinx IP…
第一步:如果明确使用第三方综合工具,那么对于IP应采用Manage IP的流程,如下图所示。这个方法本质上就是创建了一个IP工程,所有用到的IP都在此工程下被管理。
Lauren的FPGA
2020/08/10
8280
如果使用第三方综合工具,Xilinx IP…
购买后的静态IP代理如何在各个环境下设置使用?(教程)
使用静态IP代理可以帮助我们在各个环境下访问特定的网站或者应用程序,保护我们的隐私和安全性。在本文中,我将介绍如何在不同的环境下设置静态IP代理。
garry5544..
2023/03/29
2K0
使用 nmcli 命令行工具配置静态 IP 地址
每当我们安装 RHEL 8 服务器时,就会自动安装命令行工具 nmcli,它是由网络管理器使用的,可以让我们在以太网卡上配置静态 IP 地址。
用户8989785
2021/09/10
20.3K0
如何有效使用独立ip?有无类似911s5的软件能够提供静态ip购买?
在互联网的世界中,每一个网站都需要一个ip地址来让其被其他用户访问。然而,有些网站拥有独立ip地址,而有些则是共享ip地址。那么什么是独立ip地址呢?简单来说,独立ip地址是指一个网站拥有自己单独的ip地址,无论您输入其网址或其ip地址,都可以访问该网站。相反,共享ip地址是指多个网站共享同一ip地址,服务器需要根据用户输入的网址来判断用户所请求的网站。在这篇文章中,我们将探讨独立ip地址的优势,以及如何有效使用独立ip地址。另外,也会介绍是否存在类似于911s5的软件能够提供静态ip购买的服务。
用户10526222
2023/05/04
7080
如何利用selenium使用代理IP?
Selenium是一种用于自动化浏览器的工具,可以用于模拟用户行为,例如访问网站、填写表单、单击按钮等,也可以使用Selenium和HTTP代理来模拟真实用户行为,绕过网站反爬虫机制,以及保护我们的隐私。
阿秋数据采集
2023/02/28
3.9K0
通过DHCP动态管理IP地址
DHCP 动态主机配置协议是一个局域网的网络协议,使用UDP协议工作,主要有两个用途:给内部网络或网络服务供应商自动分配IP地址、子网掩码、网关以及DNS等tcp/ip信息,给用户或者内部网络管理员作为对所有计算机作中央管理的方法.
微软技术分享
2022/12/28
1.6K0
通过DHCP动态管理IP地址
手动设置的静态DNS老是变成DHCP,如何破
https://cloud.tencent.com/document/product/213/30000
Windows技术交流
2021/09/28
2.2K0
静态ip与动态ip区别_怎么设置静态IP
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/167147.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/20
3.9K0
静态ip与动态ip区别_怎么设置静态IP
Ubuntu 12.04 安装使用DHCP Server
在创建HDFS集群的时候,深感/etc/hosts中添加配置的不方便,容易不一致导致错误,工作量也大。
星哥玩云
2022/07/01
5000

相似问题

我们真的需要空吗?

44

我真的需要这个tsx组件的构造函数吗?

15

接口真的没有构造函数吗?

32

JPA:默认构造函数需要为空吗?

30

React本机真的支持Android片段吗?

33
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档