当前位置:  开发笔记 > 编程语言 > 正文

如何降低程序的CPU使用率?

如何解决《如何降低程序的CPU使用率?》经验,为你挑选了4个好方法。

我编写了一个多线程程序,它通过大量浮点运算来执行一些CPU繁重的计算.更具体地说,它是一个逐帧比较动画序列的程序.即它将动画A中的帧数据与动画B中的所有帧进行比较,对于动画A中的所有帧.我对不同动画并行执行此强化操作,因此程序可以处理AB对,BC对和CA对在平行下.该程序使用QtConcurrent和"map"函数,该函数将带有运动的容器映射到函数上.QtConcurrent为我管理线程池,我正在使用英特尔四核处理器,因此它产生了4个线程.

现在,问题是我的进程会破坏我的CPU.用法是100%不变的,如果我在一个足够大的运动集上运行我的程序(非分页区域中的页面错误),我实际上得到了一个蓝屏死机.我怀疑这是因为我的电脑超频了.但是,这可能是因为我编写程序的方式吗?我用来测试机器稳定性的一些非常密集的benchamrking工具从未使我的PC崩溃.有没有办法控制我的程序如何使用我的CPU来减少负载?或许我误解了我的问题?



1> Kosi2801..:

超频PC可能会导致各种奇怪的问题.如果您怀疑是问题的根本原因,请尝试在合理范围内计时并重试测试.

它也可能是某种非常奇怪的内存错误,你以某种方式破坏你的RAM(因为BSOD,我猜那个操作系统)无法恢复(非常不可能,但谁知道).

我能想到的另一种可能性是,你的线程实现中有一些错误会杀死windows.

但首先,我会看一下超频问题......



2> Jimmy J..:

我怀疑这是因为我的电脑超频了.

这绝对是可能的.尝试将其设置为正常速度一段时间.

这可能是因为我编写程序的方式?

在用户模式下运行的程序不太可能导致BSOD.



3> SingleNegati..:

您描述的操作类型已经高度可并行化.运行多个工作实际上可能会损害性能.原因是因为任何处理器的缓存大小有限,并且尝试并发执行的越多,每个线程的缓存份额就越小.

您也可以使用GPU查看选项以吸收部分处理负载.对于大多数类型的视频转换而言,现代GPU比类似代的CPU更有效.



4> Mike Dunlave..:

这里有一些很好的答案.

我只想从进行大量性能调整的角度来补充,除非每个线程都经过积极优化,否则它有很大的空间可以减少周期.

为了与长途汽车比赛进行类比,有两种方法可以赢得比赛:

    让汽车变得更快

    减少停靠和往返

根据我的经验,大多数首次编写的软件距离最直接的路径还很远,特别是随着软件的大量增加.

正如Kenneth Cochran所说,要在程序中找到浪费的周期,永远不要猜测.如果你在没有证明这是一个问题的情况下修复某些东西,你就会投入猜测.

找到性能问题的流行方法是使用分析器.

但是,我做了很多,我的方法是这样的:http://www.wikihow.com/Optimize-Your-Program%27s-Performance

推荐阅读
雯颜哥_135
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有