为什么即使我的应用程序(利用CPU资源的资源)滞后,我的CPU为什么也不能发挥最大的潜力?


30

为什么即使我的应用程序吃完了(尽管它占用了40%的CPU(但是30-40%的CPU仍然保持空闲)),但为什么我的CPU却永远也不会满负荷运行呢?

这是否意味着:

  1. 有一种方法可以强制CPU以100%运行
  2. 这样制造CPU,我唯一能做的就是购买新硬件。
  3. 限制在于应用程序,并且即使使用更好的CPU,延迟也不会得到改善。(假设应用程序是完美的,我要问的是软件是否以此方式运行?)
  4. 还有别的

4
我了解OP的含义,我不屑一顾防病毒程序或Windows Update运行时它如何使我的系统完全瘫痪,使一个核心发挥最大作用。...让其余的人去做什么?我坐了12分钟,直到可以恢复工作。

10
即使剩余的共享资源未使用容量,任何即使计算机(CPU,存储,内存或网络)中的多个共享资源之一都耗尽的应用程序都可能使整个系统变慢。
我说恢复莫妮卡

78
我已经编程25年了。我可以向您保证-这不是阴谋。很少会找到CPU成为瓶颈的应用程序,大多数情况下,应用程序都在等待其他事情,例如硬盘,RAM或网络。
Contango

10
假设您正在做一些计算工作-让您说些税。如果您在等待纳税表到达邮件时进行零工作,那么您将长期从事零工作。落后的应用程序经常写得不好。它们会在与磁盘无关的高延迟操作(例如磁盘或网络IO)上阻止UI线程,因此CPU处于空闲状态,应用程序无响应。获得更快的CPU并没有帮助。只是使您能够更快地阻止高延迟操作。
埃里克·利珀特

3
@TwistyImpersonator:这是高争用多线程程序的一个很好的类比。有时,我们看到多线程程序在速度更快的CPU上运行速度变慢,因为与速度较慢的CPU相比,CPU使更多线程进入阻塞状态的速度更快。如果明天给纽约市的每个驾驶员提供的汽车速度提高 10倍,那么通勤时间就不会缩短。他们会变得更糟。
埃里克·利珀特

Answers:


94

您可能正在运行单线程应用程序,该应用程序最多只能使用一个CPU内核。由于一个内核的100%不足多核CPU容量的100%,因此 CPU利用率不会达到100%。

您可以通过在任务管理器中查看各个核心利用率来确认这一点。寻找接近最大利用率的单核。


24
由于进行了切换,您将只能看到分布式用法的总和,该总和等于一个内核的使用。基本上,该应用程序仅使用一个内核,但它在内核之间跳来跳去,因此每个内核的平均值为1 / n。
Aganju '17

62
我还要说的是,CPU实际上可能不是瓶颈。

16
我隐约记得矮人要塞曾以100%的瓶颈瓶颈,所以他开始将其他部分分叉到第二个线程,导致“主”线程锁定为100%,“背景”线程徘徊在20-60%左右。在四核上,这是30-40%。
Mooing Duck's

3
不要忘记CPU上的Turbo模式。在计算负载百分比时,Taskmanager不会考虑这一点。在我的i5-4570S上,我经常看到大约30%的负载。多数民众赞成一个核心(25%)与常规的2.9 GHz涡轮增压到3.4 GHz。25 * 3,4 / 2,9接近30%。在正常频率和Turbo频率之间有较高的扩展,我们可以获得更高的频率。
Sunzi

7
@AytAyt-我走得更远,说这不仅可能,而且几乎可以肯定。除非OP的应用程序进行纯数字运算(或在各处使用自旋锁),否则即使使用多线程程序,要完全加载CPU实际上也非常困难。任何磁盘或网络I / O都会留下空闲周期,并且考虑到OP提到的“滞后”应用程序,似乎有一些网络通信在起作用。
aroth

49

您尚未指定操作系统。因此答案将是常见的。

应用程序可能由于各种原因而受到限制。瓶颈可能在:

  • 中央处理器
    • 低速
    • 单线程/低线程应用程序(无法使用所有内核/线程)
  • 输入输出
    • 磁盘吞吐量
    • 磁盘延迟
    • 网络吞吐量
    • 网络延迟
  • 记忆
    • 容量
    • 吞吐量
    • 潜伏
    • 缓存不足
    • 地区(NUMA)
    • 交换

还有更多原因,并不常见。

因此,请查看您的系统资源,并尝试分析系统中的其他瓶颈,而不仅仅是CPU总负载。


9
另外:视频卡具有单独的GPU,I / O和内存,其中的任何一个也可能是问题。
Mooing Duck's

2
@MooingDuck True,但是通常只有在所涉及的应用程序实际使用GPU的情况下(例如3D游戏或CUDA / OpenCL应用程序或类似的东西)
这才是问题。– reirab

13

通常,当人们谈论计算机运行缓慢时,我会提到灰尘。作为拥有15年专业经验的前计算机技术人员,我发现仅吹尘便可以显着提高性能。

我不是在说稀薄的尘埃,几乎不是察觉到的尘埃,而是在说是大块或什至是阻止正常气流的垫子。我已经看到散热器上基本上有一个灰尘过滤器,而不是一个实际的过滤器。这会阻止大量的空气冷却CPU。这样清除灰尘将使风扇立即安静下来,并使组件的使用寿命更长。热火杀死了我要修理的许多计算机。

遵循散热问题的想法,您也可以尝试使用更好的散热膏。大多数处理器附带的白色cr @ p就像导热膏的Yugo。我使用北极银(Arctic Silver),但是比这更好的东西。北极银大约是保时捷(使用汽车评级表),但是那里有法拉利和超级跑车的品种。

处理器过热时趋向于减慢速度。这是物理上的事情,也是编程到许多CPU中的“自我保护”。我不知道它是否仍会在任务管理器上显示100%或是否会显示40%(如您所见),但是当CPU尝试让散热器和风扇“跟上来。”

可能会减慢CPU速度的另一件事是GPU。如果您正在运行图形密集型游戏或实用程序(例如CAD),则GPU可能会阻碍CPU。获得更好的视频卡可能是要看的东西。另外,使用错误的右卡可能会阻碍您前进。游戏卡(通常)并非设计为可与CAD以及工作站卡一起使用,并且工作站卡(通常)也无法很好地进行游戏。有的有,但大多数没有。

正如@Jaroslav Kucera提到的,它可能与磁盘相关。大量击中HD可能会减慢您的速度。我通常运行多个驱动器。其中一个专门用于OS,另一个用于软件,Windows页面文件,个人文件等。除了不必担心在操作系统发生故障时备份个人数据外,拥有多个HD可以大大分散工作量。同时读取和写入同一磁盘会严重降低HD的速度。使用SHD可以缓解这种情况,但不能完全缓解。众所周知,Photoshop和视频编辑软件会严重影响HD。从一个高清硬盘读取然后输出到第二个高清硬盘是必经之路。这也有助于延长HD的使用寿命。我还对硬盘进行主动散热。自15年前我在其上安装风扇和散热器以来,我还没有杀死过硬盘。谷歌他们,他们是便宜的保险。

信不信由你,您的PSU可能也会减慢您的速度。如果您没有足够的功率(或者您的PSU太旧或便宜,价格过高的中国POS),则可能会出现性能问题。我亲眼目睹了不稳定的PSU可以解决奇怪的操作系统问题。您正在寻找电压和安培,因此,如果按照这种方法操作,请确保它们都符合PSU上的规格,并确保它们满足或超过您的电源需求。如果您的组件总功率为500瓦,而您却给了475瓦,那就不好了。我建议将要求提高约20%,以使PSU变老(并降低功率),而其他组件变老(并要求动力),因此您不必急于购买新的PSU。

包括此处的其他答案,还有更多原因导致计算机运行缓慢。除了PSU选项外,当我是计算机技术人员时,我谈论的内容很常见。进行基准测试和其他测试是您确定问题的唯一方法。如果零件由多个零件组合导致减速,则交换零件甚至可能无法解决问题。

而且,AFAIK无法强制您的计算机使用100%的处理器。通常,CPU和OS知道他们需要做什么,并且真的很擅长工作。:-)我认为还没有人想到一种方法来强制馈送CPU,使其在您认为应该的时候以100%的速度运行。至少没有不给它额外的垃圾,以使百分比“看起来不错”。

看到40%而不是40%的整数除法(例如25%,33%或50%),我感到这不是一个线程问题。可以,但是那不是我的想法。但是,+ 1到@Twisty Impersonator可以立即将其启动。

祝你好运,想找出这一点!我花了几天的时间试图弄清楚这种事情,最终以替换大多数胆量为“最后手段”。


1
+1指出应用程序可能挂在最大GPU上的可能性。
我说恢复莫妮卡的时间

6
我忘了提,在计算机旁吸烟是您可以做的最糟糕的事情之一。它留下了无法清除的令人讨厌,粗暴和令人恶心(无法强调足够)的橙色粘稠烂摊子。灰尘堆积在上面,无法清除。您可能可以使用自动零件的油浴或声波水浴将其卸下,但我从未遇到过这种麻烦。即使清洁外壳也是徒劳的。
computercarguy

2
仅从开发人员的角度来看,CPU会按照您的指示进行操作。如果未达到100%的最大值,那是因为您的程序正在等待其他事情发生(磁盘IO,网络,用户输入,系统消息等)。如果您有CPU需要执行的操作,它将自动使用100%(假设是多线程应用程序)来执行程序所需的操作-您不必“使它”使用100%或对其进行解锁。
JPhi1618

2
@ JPhi1618:你忘记了热量。无论您要执行什么操作,如果CPU过热,它都会以低于100%的速度运转。
Mooing Duck's

9
@ JPhi1618通常通过扩展其频率(降频)来节制CPU,因此它们不是以例如3.0GHz的频率运行,而是以2.0GHz的频率运行。因此,由于每个“工作插槽”都被占用,因此热节流的CPU仍可能报告100%的负载,而单位时间内可用的“工作插槽”则更少。
el.pescado

3

可能是BIOS或操作系统中的节能设置。许多现代CPU和主板都进行了设置,以使CPU在用电方面更加经济(特别是对于希望电池持续使用的笔记本电脑而言)。您可能可以关闭此类设置,但请确保您知道自己正在做什么,因为该设置旁边通常还存在其他可能以其他重要方式影响计算机功能的东西。


2

在执行渲染和数学任务时,我经常达到100%的利用率。我将验证超线程将达到100%的高水平,并且指令排序很重要。Intel和AMD都有大量专用于指令重新排序的硬件,以填充尽可能多的执行内核。如果您在现代机器上获得30%的收益,则可能

  • 检查温度-英特尔和AMD变热时都降频,并显示为断续和尖峰。
  • 没有做太多...。示例是:
    1. 网页浏览
    2. 电子邮件
    3. 最简单的游戏
    4. 我几乎可以保证您的问题是从顶部开始的以下一项或多项:
  • 取得SSD
  • 取得SSD
  • 将操作系统安装在SSD上,然后将常规数据移动到传统的多TB驱动器中。Windows需要比本地访问更多的本地文件。
  • Bonazai好友?
  • 将所有驱动器的容量至少保持在10%以上。NTFS是一个日记文件系统,整个驱动器性能下降。
  • 您需要尽快将NVMe驱动器/ SSD用作OS驱动器(是的,我再次说过)。性能是惊人的,它可以继续进行到第二部分...一家主要零售商今天以300美元的价格出售Samsung 961 NMVe 512GB驱动器,对于正常使用来说已经足够了。
  • Windows 10占用大量GPU。便宜的专用视频卡可以减轻内存和CPU的负担。您仍然可以将APU与视频卡结合使用,但可以节省一些RAM,并且VRAM通常更快。
  • 内核数较少的CPU也受内存限制。如果您查看i7,它们都在4个存储区中运行四通道DDR。AMD的Epyc芯片将是具有64核的8通道DDR5。无济于事。最后,我对此压力不够大,请将钱倾销到您的计算机将要占用的尽可能多的RAM上。我有32GB,今年晚些时候还要购买32GB。Windows所做的事情与superfetch类似,只是更新了一点,它压缩了未使用的RAM中的内存,因此可以在需要时解压缩程序和数据。再举一个例子,我运行一个Linux VM进行开发,分配了6/12核心和16GB内存,在第一次卸载SSD后,它在大约3秒钟内开始运行。如今,通过这样的优化,CPU被认为非常便宜...

在我坚持编译70k文件项目或将巨型相机原始文件按16位色升级到17“ x26” x600 dpi之前,所有这些东西似乎都是过大的。即使在100%的利用率下,资源也是如此过大,以至于您不会变慢。前一天晚上,我意识到我有两个虚拟机和一个Wolf 2以及2个IDE(我分心了,起诉我),并且没有注意到速度下降。这是一个〜$ 1500的机器顺便说一句,没什么特别的,并且多年来最缓慢地购买。其中一半是Radeon RX64之一,因为我的视频卡已经使用了6年。渲染等方面的巨大差异。升级将使您更多地利用硬件,而不是假设您将获得30%的使用率。

如果我将5400RPM硬盘驱动器放入此OS操作系统,它将像垃圾一样运行。

TL; DR听起来您现在受CPU限制了。花至少几百美元购买至少256GB的SSD操作系统,8GB的RAM和一个较低端的玩家卡,并且计算机将使用数年。在我最终完成处理器和Mobo刷新之前,该代码生存了6年,然后我每天使用旧设备编译整个交叉编译器套件大约25次。

称我为过大杀手,但我不建议您使用8张Tesla卡或其他任何东西。:-)可以的话,做些小规模的升级,我想您会解决很多这样的问题。几年前,我通过在Q6600系统上添加SSD并观察了三倍的性能来做到这一点。


1

在不知道程序细节的情况下,很难说出来,但是由于另一个答案着眼于应用程序是单线程的可能性,因此,我将把该应用程序视为正在使用适当的多线程处理。

常见的一件事是物理内核与“超线程内核”。在许多短期任务中,超线程在CPU以外的瓶颈方面表现出色。对于紧密循环的CPU瓶颈任务,您仍然受到物理核心数量的限制,物理核心数量通常是超线程核心数量的一半。在绝对最坏的情况下,您的任务管理器可能只显示50%的使用率,因为它在其图形中计算超线程核心,而实际上,您的物理核心可能处于100%的使用率。通常,您将展示更多,因为您的操作系统将能够使用超线程来执行其他不相关的任务。


“适当的多线程”是否意味着要为每个逻辑核心而不是每个物理核心都有一个工作要做的线程?如果您在每个逻辑内核上都运行紧密循环,则任务管理器应报告100%具有超线程。AFAIK,任务管理器中的“百分比使用率”是基于所讨论的线程处于可运行状态并在逻辑核心上进行调度的时间量,而不是它实际上在ALU上执行某项操作所花费的时间。操作系统可能甚至都不知道(只有CPU微码会知道。)
reirab

1
“常规”机器代码仅使用现代CPU上6个或更多指令端口中的2至3个。更不用说所有由分支和缓存未命中引起的流水线停顿了。超线程有助于填补这些空白。使用它几乎总是一个胜利。某些类型的代码不能很好地使用它,例如视频编码/解码或高度优化的矩阵数学。但是这些都不寻常。
Zan Lynx
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.