高负载下gpu内存一直0.几

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了高负载下gpu内存一直0.几相关的知识,希望对你有一定的参考价值。

负载0您好亲,CPU负载率高而显卡没有使用率,那是显卡工作在低负载率状态,比如多开很多网页或者2d小游戏,或者就算是3d游戏也是小游戏,显卡性能太高同样也是工作在低负载率下,需要加强CPU多核性能,优化应用程序,减少自启动程序,如果有某程序出现停止响应问题,也会造成同样CPU满载显卡空载问题。希望我的解答对您有所帮助, 最后再次祝您身体健康,心情愉快!
抢首赞
分享评论
买老花镜什么牌子好,潮流新品,好货热卖,更多优惠尽在淘宝!
买老花镜什么牌子好,购物上淘宝,优选材质,用的舒心!在线下单,省时省力。你要的好货尽在淘宝网,安心享受网购乐趣!
淘宝热卖广告
成都 沃可眼镜--LINDBERG林德伯格授权经销商
林德伯格来自丹麦,专业眼镜高端品牌,屡获国际设计大奖,时尚且舒适,深受政要名流追捧。沃可眼镜为LINDBERG直接授权,陈列上百款现货,眼镜各部件颜色尺寸均可接受私人定制。
成都沃可互联科技有..广告

问题还没解决?快来咨询专业答主~
cpu负载高.gpu负载0
在线
4301位答主在线答
服务保障
专业
响应快
马上提问

gpu使用率为0怎么解决
82位网友正在问
cpu负载高.gpu负载0

问答小萌
高赞答主
亲亲您好,很高兴为您解答。已为您找到:cpu负载高.gpu负载0原因:1:数据量太小,或者说你每个batch处理的数据比较小,cpu给gpu的数据直接并行处理了,没必要占用显存,所以不显示占用。可以把batch size调整到整个epoch或者调大就行,如果这个时候程序占用显存的话就是这个原因,如果还是没有就考虑其他原因。2:第二个原因,你没表述清楚,深度学习模型分为处理数据和运行model调节参数两个部分,在处理数据的时候肯定不会咱用gpu的显存的,例如拿nlp举例,数据都是在cpu上embedding之后才会在gpu上运行model进行梯度反传,调节参数,刚开始不占用gpu很正常。3:第三个原因,你的程序就是在cpu上运行的,没有拿到gpu上,那当然不占用gph。建议在gpu运行时看看gpu利用率,看看程序哪一部分占用了内存。希望我的回答能够帮助到您,祝您生活愉快~
参考技术A 当你处于高负载下时,GPU内存可能会出现0,这是正常情况,因为在这个情况下,GPU内存被完全使用,以最大限度地提高GPU的性能。

GPU 负载下 CGEventPost 的性能较弱

【中文标题】GPU 负载下 CGEventPost 的性能较弱【英文标题】:Weak performance of CGEventPost under GPU load 【发布时间】:2012-12-29 19:54:32 【问题描述】:

我们偶然发现了 Quartz Events 的性能问题,更具体地说是 CGEventPost:在 GPU 负载过重时,CGEventPost 可能会阻塞。我们创建了a small benchmark application to demonstrate the issue。这个应用程序只是一个创建、发布和发布事件的循环。

您可以在下面看到运行应用程序的结果。第一次运行是在空闲系统上。第二次运行是使用 FurMark(GPU 压力测试),表盘尽可能地向上转动。

Inner 是内部循环所花费的时间,基本上只是使用 Quartz Events 创建、发布和发布事件。 Outer 是我们的程序等待唤醒(睡眠)的时间。应该接近我们睡觉的时间,但如果系统处于压力之下,它可能会延迟。 发布是事件发布所需的时间。

 

18:58:01.683 EventPerformance[4946:707] Measurements: (outer should be close to 10)
18:58:01.684 EventPerformance[4946:707] inner (ms): 0.04, outer (ms): 11.02, CGEventPost (ms): 0.03
18:58:01.684 EventPerformance[4946:707] inner (ms): 0.04, outer (ms): 11.02, CGEventPost (ms): 0.03
18:58:01.685 EventPerformance[4946:707] inner (ms): 0.07, outer (ms): 10.26, CGEventPost (ms): 0.03
18:58:01.685 EventPerformance[4946:707] inner (ms): 0.06, outer (ms): 10.85, CGEventPost (ms): 0.05
18:58:01.686 EventPerformance[4946:707] inner (ms): 0.07, outer (ms): 10.41, CGEventPost (ms): 0.04
18:58:01.686 EventPerformance[4946:707] inner (ms): 0.04, outer (ms): 10.39, CGEventPost (ms): 0.03
18:58:01.686 EventPerformance[4946:707] inner (ms): 0.05, outer (ms): 11.02, CGEventPost (ms): 0.03
18:58:01.687 EventPerformance[4946:707] inner (ms): 0.03, outer (ms): 10.67, CGEventPost (ms): 0.03
18:58:01.687 EventPerformance[4946:707] inner (ms): 0.08, outer (ms): 10.09, CGEventPost (ms): 0.05
18:58:01.688 EventPerformance[4946:707] Averages: (outer should be close to 10)
18:58:01.688 EventPerformance[4946:707] avg inner (ms): 0.05, avg outer (ms): 10.64, avg post (ms): 0.03

在这里我们可以看到发布事件平均需要大约 0.03 毫秒。此外,线程似乎在 0.5ms 左右被唤醒为时已晚。 CGEventPost 中没有峰值。

19:02:02.150 EventPerformance[5241:707] Measurements: (outer should be close to 10)
19:02:02.151 EventPerformance[5241:707] inner (ms): 0.03, outer (ms): 10.23, CGEventPost (ms): 0.02
19:02:02.151 EventPerformance[5241:707] inner (ms): 0.02, outer (ms): 10.54, CGEventPost (ms): 0.02
19:02:02.151 EventPerformance[5241:707] inner (ms): 0.02, outer (ms): 11.01, CGEventPost (ms): 0.01
19:02:02.152 EventPerformance[5241:707] inner (ms): 0.02, outer (ms): 10.74, CGEventPost (ms): 0.01
19:02:02.152 EventPerformance[5241:707] inner (ms): 0.02, outer (ms): 10.20, CGEventPost (ms): 0.01
19:02:02.152 EventPerformance[5241:707] inner (ms): 10.35, outer (ms): 11.01, CGEventPost (ms): 10.35
19:02:02.152 EventPerformance[5241:707] inner (ms): 0.03, outer (ms): 10.02, CGEventPost (ms): 0.02
19:02:02.153 EventPerformance[5241:707] inner (ms): 58.90, outer (ms): 10.11, CGEventPost (ms): 58.90
19:02:02.153 EventPerformance[5241:707] inner (ms): 0.03, outer (ms): 10.12, CGEventPost (ms): 0.02
19:02:02.153 EventPerformance[5241:707] Averages: (outer should be close to 10)
19:02:02.371 EventPerformance[5241:707] avg inner (ms): 7.71, avg outer (ms): 10.44, avg post (ms): 7.71

当系统处于繁重的 GPU 负载下时,发布事件可能需要(峰值)毫秒而不是微秒。在极端 GPU 压力(有时似乎在等待 GPU 完成一些工作后再返回。我们的线程仍然正常调度,没有明显的延迟/尖峰(外部)。

感谢任何想法。

【问题讨论】:

在提交大量 OpenCL 工作时,我在 Windows(我知道您使用的是 osx)中看到了更糟糕的效果:所有 GPU 绘图都会慢得像爬行一样。就好像 GPU 没有优先级或波前有多早的概念。 尝试使用 Instruments 对其进行分析以查看减速发生的位置。 您运行此程序的计算机是什么类型的显卡?集成、集成+离散,还是离散?看看您是否在具有不同显卡配置的系统上运行不同的行为会很有趣。 似乎两个程序都在争夺锁定的资源。将 gdb 与您的代码一起使用以逐步执行 CGEventPost,检查调用了哪些系统调用以及它是否进入了一些互斥锁。使用带有 FurMark 的 dtruss(gdb 在那里会更难使用)并检查是否调用了相同的系统调用。这可以让你知道正在发生的事情。 OSX 的时间片是 10 毫秒;唯一的异常是 60 毫秒的尖峰。 【参考方案1】:

我猜你正在填满队列(底层 mach 端口)......

您可以使用 Instruments 中的“调度”或“系统调用”工具来确认这一点。 (创建一个新的空白文档,添加仪器,然后在File > Record Options... 下确保选中“延迟模式”。)这将显示应用程序中的所有线程活动(线程阻塞时、睡眠时、激活时以及为什么)。

我会首先尝试提高调用CGEventPost 的线程的线程优先级(参见man 3 PTHREAD_SCHEDPARAM)。如果您的线程在较低优先级的线程上被阻塞,内核应暂时提升阻塞线程的优先级以避免优先级倒置并帮助您的任务更早完成。

总体而言,我认为您将必须实现 2 线程解决方案,如下所示:

为您要发布的事件创建一个队列。从您的主线程(或事件发布线程)向此队列发布事件,然后向第二个线程(您创建的事件使用者线程)发出信号以遍历队列并使用CGEventPost 发布任何未完成的事件。

CGEventPost 阻塞时,您的第二个事件发布线程将阻塞,但这不会阻塞任何其他线程。当CGEventPost 最终解除阻塞时,它将消耗您的事件消费者线程发布的任何未完成的事件,并且事件消费者线程可以恢复发布事件。

另一种可能性:你能合并事件吗?您可以将某些类型的事件(鼠标移动?)合并成更少的事件。有时您可能仍会遇到CGEventPost 的队列限制,我认为2 线程方法可能是您最好的选择。

【讨论】:

自从我提出这个问题以来,我们已经从 CGEventPost 切换到 IOHIDPostEvent,它在 GPU 负载下的性能要好得多,但在其他情况下仍然会阻塞。 使用 Instruments 我们发现对于 IOHID 和 Quartz,我们都在 mach_msg_trap 中阻塞,可能正在等待接收消息。我们还没有设法获得更多详细信息(即谁在另一端,以及他为什么阻止)。 关于实时优先级,它被意外地从测试应用程序中删除了,但我们在实际项目中确实有它。 (但是没有区别)。我们已经实现了合并和线程 - 感谢您的建议!

以上是关于高负载下gpu内存一直0.几的主要内容,如果未能解决你的问题,请参考以下文章

宝塔 杰奇负载状态过高优化

【Linux】Linux系统下简单模拟高CPU\高内存\高负载的方法

树莓派CPUGPU磁盘内存负载监控Python脚本

Linux系统下怎么查看应用CPU、内存、负载?

GPU 负载下 CGEventPost 的性能较弱

linux查看cpu占用率