Por que minha CPU não opera em seu potencial máximo, mesmo quando meu aplicativo (que utiliza os recursos da CPU) está atrasado?

30

Por que minha CPU nunca atinge o limite máximo, mesmo quando meu aplicativo, que consome 40% da CPU (mas 30 a 40% da CPU ainda permanece ocioso), ficando atrasado?

Isso significa:

  1. Existe uma maneira de forçar a CPU a rodar a 100%
  2. As CPUs são fabricadas dessa maneira e a única coisa que posso fazer é comprar um novo hardware.
  3. A limitação está no aplicativo e o atraso não melhorará mesmo com uma CPU melhor. (Supondo que o aplicativo seja perfeito, o que estou perguntando é se o software é executado dessa maneira?)
  4. Algo mais.
Nhu Thai Sanh Nguyen
fonte
4
Eu entendo como o OP está chegando, desprezo como, quando o antivírus ou a atualização do Windows está sendo executado, ele atola completamente meu sistema, atingindo o máximo de um único núcleo ... deixando o resto deles fazendo o que? Acabei sentado por 12 minutos até voltar ao trabalho.
10
Qualquer aplicativo que maximize ao máximo um dos vários recursos compartilhados em um computador (CPU, armazenamento, memória ou rede) pode tornar o sistema inteiro lento, apesar dos recursos compartilhados restantes terem capacidade não utilizada.
Eu digo Restabelecer Monica
78
Venho programando há 25 anos. E posso lhe garantir - isso não é uma conspiração. É raro encontrar aplicativos onde a CPU é o gargalo, na maioria das vezes os aplicativos aguardam outras coisas, como disco rígido, RAM ou rede.
Contango
10
Suponha que você esteja fazendo algum trabalho computacional - fazendo seus impostos, digamos. Se você não fizer nenhum trabalho enquanto aguarda a chegada dos formulários de imposto pelo correio, não fará nenhum trabalho por muito, muito tempo. Aplicativos atrasados ​​geralmente são mal escritos; eles bloqueiam o encadeamento da interface do usuário em operações de alta latência, como E / S de disco ou rede, que não têm nada a ver com a CPU e, portanto, a CPU está ociosa e o aplicativo não responde. Obter uma CPU mais rápida não ajuda; isso apenas leva você às operações de bloqueio de alta latência mais rapidamente .
precisa
3
@ TwistyImpersonator: Essa é uma boa analogia para programas multithread de alta contenção. Às vezes, vemos que um programa multithread é executado mais lentamente em uma CPU mais rápida porque a CPU está colocando mais threads em um estado bloqueado mais rapidamente do que uma CPU mais lenta. Se todos os motoristas da cidade de Nova York recebessem um carro 10x mais rápido amanhã, os tempos de deslocamento não melhorariam . Eles piorariam.
precisa

Respostas:

94

Você provavelmente está executando aplicativos single-threaded que podem apenas maximizar um único núcleo da CPU. Como 100% de um núcleo é inferior a 100% da capacidade da CPU com vários núcleos, a utilização total da CPU não atinge 100%.

Você pode confirmar isso visualizando a utilização do núcleo individual no Gerenciador de tarefas. Procure núcleos únicos que estão se aproximando da utilização máxima.

Eu digo Restabelecer Monica
fonte
24
Devido à alternância, você verá apenas o uso distribuído que resume o uso de um núcleo. Basicamente, o aplicativo usa exatamente um núcleo, mas passa entre os núcleos, de modo que cada um atinge a média de 1 / n.
Aganju
62
Eu também diria que é possível que a CPU não seja realmente o gargalo.
16
Lembro-me vagamente de que o Dwarf Fortress famosa gargalhou um núcleo a 100%, então ele começou a bifurcar outros bits em um segundo segmento, levando o segmento "principal" a 100% e o segmento "em segundo plano" pairando em torno de 20-60%. Em um quad core, isso é ... 30-40%.
Mooing Duck
3
Não se esqueça do modo Turbo nas CPUs. O Taskmanager não leva isso em consideração ao calcular a porcentagem de carga. No meu i5-4570S, vejo frequentemente uma carga de cerca de 30%. Isso é um núcleo (25%) com turbo regular de 2,9 GHz a 3,4 GHz. 25 * 3,4 / 2,9 é quase 30%. Com uma propagação mais alta entre a frequência normal e a Turbo, podemos aumentar.
Sunzi 3/11
7
@AytAyt - eu daria um passo adiante e diria que não é apenas possível, é quase certo . A menos que o aplicativo do OP esteja processando números puros (ou usando bloqueios de rotação em todos os lugares), é realmente muito difícil carregar completamente uma CPU, mesmo com um programa multithread. Qualquer E / S de disco ou rede deixará ciclos inativos e, dada a menção do OP de um aplicativo "atrasado", parece provável que haja alguma comunicação de rede em jogo.
Aroth # 03/11
49

Você não especificou seu sistema operacional. Então a resposta será comum como.

Os aplicativos podem ser limitados por vários motivos. O gargalo pode estar em:

  • CPU
    • baixa velocidade
    • aplicativos de thread único / baixo (não capazes de usar todos os núcleos / threads)
  • I / O
    • taxa de transferência do disco
    • latência do disco
    • taxa de transferência de rede
    • Latência da rede
  • memória
    • capacidade
    • throuthput
    • latência
    • cache insuficiente
    • localidade (NUMA)
    • troca

E há mais razões, que não são tão comuns.

Portanto, dê uma olhada nos recursos do sistema e tente analisá-lo em busca de outros gargalos, além da carga total da CPU.

Jaroslav Kucera
fonte
9
Além disso: a placa de vídeo possui GPU, E / S e memória separadas; qualquer um desses também pode ser o problema.
Mooing Duck
2
@MooingDuck É verdade, mas que normalmente só ser um problema se a aplicação em questão está realmente usando a GPU (ou seja, um jogo 3D ou um aplicativo CUDA / OpenCL ou alguma coisa assim.)
reirab
13

Em geral, quando as pessoas falam que o computador está lento, eu menciono poeira. Como um ex-técnico de informática com 15 anos de experiência profissional, descobri que simplesmente expelir poeira pode melhorar significativamente o desempenho.

Não estou falando de uma quantidade fina e quase imperceptível de poeira, mas sim de grandes aglomerados ou até tapetes que impedem o fluxo de ar normal. Eu vi dissipadores de calor que tinham basicamente um filtro sobre eles que era poeira, em vez de um filtro real. Isso impede que uma quantidade muito significativa de ar resfrie a CPU. Remover poeira assim tenderá a acalmar os ventiladores instantaneamente e permitirá que seus componentes sobrevivam por mais tempo. O calor matou muitos computadores que me pediram para consertar.

Seguindo a ideia da questão do calor, você também pode tentar uma pasta térmica melhor. O cr @ p branco que a maioria dos processadores vem é como o Yugo da pasta térmica. Eu uso o Arctic Silver, mas há coisas melhores do que isso, até. Arctic Silver é sobre um Porche (usando a escala de classificação de carros), mas existem variedades da Ferrari e de supercarros por aí.

Os processadores tendem a desacelerar quando estão superaquecendo. Isso é algo físico, além de uma "preservação própria" programada em muitas CPUs. Não sei se ainda será exibido 100% no Gerenciador de tarefas ou se será exibido 40% (como você vê), mas pode ser uma desaceleração significativa enquanto a CPU tenta deixar o calor dissipar e ventilar " alcançar."

Outra coisa que pode estar diminuindo a velocidade da CPU é a GPU. Se você estiver executando jogos ou utilitários gráficos intensivos (como CAD), sua GPU pode estar retendo sua CPU. Obter uma placa de vídeo melhor pode ser algo para se olhar. Além disso, o uso do cartão correto errado pode estar impedindo você. As placas de jogos (geralmente) não são projetadas para funcionar com CAD e as placas de estação de trabalho, e as placas de estação de trabalho (geralmente) também não são muito boas. Alguns sim, mas a maioria não.

Como @Jaroslav Kucera mencionou, ele pode estar relacionado ao disco. Atingir muito o (s) HD (s) pode atrasar o seu caminho. Eu normalmente corro várias unidades. Um dedicado ao SO e outro (s) software, arquivo de paginação do Windows, arquivos pessoais, etc. Além de não ter que se preocupar tanto com o backup de dados pessoais em caso de falha do SO, ter vários HDs espalha a carga de trabalho consideravelmente. Ler e gravar no mesmo disco ao mesmo tempo pode reduzir a velocidade do HD. O uso de SHDs pode atenuar isso, mas não totalmente. Sabe-se que o Photoshop e o software de edição de vídeo atingem os HDs com força. A leitura de um HD e a saída para um segundo HD é o caminho a percorrer. Isso também ajuda a vida dos seus HDs. Eu também uso resfriamento ativo em meus HDs. Não matei um disco rígido desde que coloquei um ventilador e um dissipador de calor + 15 anos atrás. Google eles, eles são seguros baratos.

Acredite ou não, sua fonte de alimentação também pode estar atrasando você. Se você não tiver energia suficiente (ou o seu PSU for antigo ou um POS chinês barato e supervalorizado), poderá haver problemas de desempenho. Eu já vi em primeira mão que problemas estranhos no SO um PSU esquisito pode fazer. Você está procurando tensão e amplificadores. Portanto, verifique se todos correspondem às especificações da fonte de alimentação, se você seguir esse caminho, e também atenda ou exceda suas necessidades de energia. Se seus componentes totalizam 500 watts e você está dando a eles até 475, isso é ruim. Eu recomendo revisar seus requisitos em cerca de 20%, para que a sua PSU fique mais velha (e diminua a energia) e os outros componentes fiquem mais velhos (e exija mais energia), você não ficará preso a comprar uma nova PSU tão rapidamente.

Incluindo as outras respostas aqui, ainda há mais motivos para o seu computador ficar lento. Exceto pela opção PSU, o que eu falei era muito comum quando eu era técnico em informática. Fazer um benchmark e outros testes é a única maneira de descobrir as coisas. A troca de peças pode nem resolver o problema se for uma combinação de várias partes que está causando a desaceleração.

E, AFAIK, não há como forçar seu computador a usar 100% do processador. A CPU e o SO sabem o que precisam fazer e são realmente bons em seus trabalhos, geralmente. :-) Eu acho que ninguém ainda descobriu uma maneira de forçar a alimentação de uma CPU para fazê-la funcionar a 100% quando você pensa que deveria. Pelo menos não sem alimentá-lo com lixo extra para fazer com que a porcentagem "pareça boa".

Com você vendo 40% e não e uma divisão de número inteiro de 100% (como 25%, 33% ou 50%), sinto que não é um único problema de segmentação. Poderia ser, mas não é para onde minha mente vai. +1 ao @Twisty Impersonator por trazê-lo imediatamente, no entanto.

Boa sorte tentando descobrir isso! Passei dias tentando descobrir esse tipo de coisa, apenas para substituir a maior parte do intestino como um "último recurso".

computercarguy
fonte
11
+1 por apontar a possibilidade de um aplicativo ser desligado em uma GPU máxima.
Eu digo Restabelecer Monica
6
Esqueci de mencionar, fumar perto do computador é uma das piores coisas que você pode fazer. Deixa uma bagunça pegajosa, desagradável, grosseira e repugnante (não pode enfatizar isso o suficiente), laranja-ish, que não pode ser limpa. A poeira fica endurecida e impossível de limpar. Você pode conseguir com um banho de óleo de autopeças ou um banho de água sônico, mas nunca passei por esse problema. Até limpar o estojo é um esforço de futilidade.
computercarguy
2
Apenas da perspectiva de um desenvolvedor, a CPU fará o que você pedir. Se não for atingido o limite máximo de 100%, é porque seu programa está aguardando outras coisas acontecerem (E / S de disco, rede, entrada do usuário, mensagens do sistema, etc.). Se você tem algo para a CPU fazer, ela usará automaticamente 100% (assumindo um aplicativo multithread) para fazer o que seu programa precisa - você não precisa "fazê-lo" usar 100% ou desbloqueá-lo ou algo assim.
precisa saber é o seguinte
2
@ JPhi1618: Você está esquecendo o calor. Independentemente do que você pede, se a CPU estiver superaquecendo, ela se acelerará para rodar em menos de 100%.
Mooing Duck
9
As CPUs @ JPhi1618 costumam ser reduzidas ao escalar sua frequência (underclocking); portanto, em vez de rodar em, digamos, em vez de 3,0 GHz, elas rodam em 2,0 GHz. Portanto, a CPU com controle térmico ainda pode relatar 100% de carga, pois todos os "slots de trabalho" estão ocupados, mas há menos "slots de trabalho" na unidade de tempo disponível.
el.pescado
3

Pode ser configurações de economia de energia no BIOS ou no sistema operacional. Muitas CPUs e placas-mãe modernas têm configurações para permitir que a CPU seja mais econômica com o uso de eletricidade (principalmente para laptops que desejam que a bateria dure). Provavelmente, você pode desativar essa configuração, mas certifique-se de saber o que está fazendo ao lado da configuração. Geralmente, existem outras coisas que podem afetar a funcionalidade do computador de outras maneiras importantes.

mathreadler
fonte
2

Costumo atingir 100% de utilização ao executar tarefas de renderização e matemática. Vou verificar se o hyperthreading atingirá 100%, e a ordem das instruções é um grande problema. A Intel e a AMD possuem grandes quantidades de hardware dedicadas ao reordenamento de instruções para preencher o maior número possível de núcleos de execução. Se você obtém 30% de uma máquina moderna, pode

  • Verifique a temperatura - a Intel e a AMD fazem o downclock quando ficam quentes e aparecem como gaguez e picos.
  • Não estamos fazendo muito com isso .... exemplos são:
    1. Navegação na Web
    2. O email
    3. Jogos mais simples
    4. Eu quase garantiria que seu problema é um ou todos os seguintes, começando pelo topo:
  • Obter um SSD
  • Obter um SSD
  • Coloque seu sistema operacional no SSD e mova os dados normais para uma unidade multi-TB tradicional. O Windows precisa de mais acesso aos arquivos locais do que qualquer coisa.
  • Bonazai Buddy?
  • Mantenha todas as unidades acima de 10% da capacidade, pelo menos. O NTFS é um sistema de arquivos com registro em diário e o desempenho diminui quanto mais a unidade fica.
  • Você precisa de uma unidade NVMe / SSD para sua unidade OS o mais rápido possível (sim, eu disse isso novamente). O desempenho é incrível e continua na parte dois ... Um grande varejista estava vendendo unidades Samsung 961 NMVe 512GB por US $ 300 hoje, o que é suficiente para o uso normal.
  • O Windows 10 é pesado para GPU. Uma placa de vídeo dedicada barata pode tirar a carga da memória e da CPU. Você ainda pode usar a APU em combinação com a placa de vídeo, mas economizará RAM e a VRAM geralmente é muito mais rápida.
  • CPUs com contagem de núcleo mais baixa também são vinculadas à memória. Se você olhar para os i7s, todos estão executando DDR de canal quádruplo em 4 bancos. Os chips Epyc da AMD serão DDR5 de 8 canais com 64 núcleos. Não ajuda Por fim, e não posso enfatizar isso o suficiente, despeje o dinheiro na memória RAM necessária para a sua máquina. Eu tenho 32 GB e estou comprando mais 32 ainda este ano. O Windows faz algo semelhante ao superfetch, um pouco mais recente, que comprime a memória na RAM que não está sendo usada, para que programas e dados possam ser descompactados apenas quando necessário. Como outro exemplo, eu executo uma VM Linux para desenvolvimento, alocando 6/12 núcleos e 16 GB de RAM e, após o primeiro carregamento do SSD, ele inicia em ~ 3 segundos. Atualmente, a CPU é considerada muito barata por otimizações como essa ...

Todas essas coisas parecem exageradas até que eu fique preso compilando um projeto de arquivo de 70k ou escalonando arquivos gigantes de câmera bruta para 17 "x26" x600 dpi em cores de 16 bits. Mesmo com 100% de utilização, os recursos são tão exagerados que você não fica lento. Na outra noite, percebi que tinha duas VMs e um Wolf 2 carregado junto com 2 IDEs (estou distraído, me processe) e não estava percebendo a desaceleração. Esta é uma máquina de aproximadamente US $ 1500, nada de especial e, mais lentamente, comprada ao longo dos anos. Metade disso é um dos Radeon RX64s porque minha placa de vídeo tinha 6 anos. Enorme diferença na renderização e tal. A atualização provavelmente fará com que você use mais seu hardware do que suponha que seus 30% de uso sejam tudo o que você terá.

Se eu jogasse um disco rígido de 5400 RPM nesta máquina para SO, ele funcionaria como uma porcaria total.

TL; DR parece que você está vinculado à CPU no momento. Gaste algumas centenas em pelo menos um SSD de 256 GB para o sistema operacional, 8 GB de RAM e um cartão de jogador de última geração, e o computador durará anos. Este sobreviveu por 6 anos antes que eu finalmente fiz um processador e o Mobo atualizasse e eu estava compilando um conjunto inteiro de compiladores cruzados cerca de 25 vezes por dia com o equipamento antigo.

Chame-me um exagero, mas não recomendo 8 cartões Tesla ou algo assim. :-) Faça pequenas atualizações quando puder e acho que resolverá muitos desses problemas. Eu fiz anos atrás adicionando um SSD a um sistema Q6600 e assistindo o desempenho triplo.

JimmyShinny
fonte
1

Sem saber as especificidades do seu programa, é difícil dizer, mas como outra resposta analisa a possibilidade do aplicativo ser encadeado único, analisarei o aplicativo como se estivesse usando o multithreading adequado.

Uma coisa comum que é negligenciada são os núcleos físicos versus os "núcleos hiperencadeados". O Hyperthreading se destaca em muitas tarefas curtas com gargalos diferentes da CPU. Para tarefas com gargalo de CPU em loop apertado, você ainda está limitado pela sua contagem de núcleos físicos, que geralmente é metade da sua contagem de núcleos com hyperthread. Na pior das hipóteses, o gerenciador de tarefas pode mostrar apenas 50% de uso porque conta núcleos com hyperthread em seus gráficos; quando, na realidade, seus núcleos físicos podem estar com 100% de uso. Geralmente, você mostraria mais do que isso, pois seu sistema operacional poderá usar o hyperthreading para outras tarefas não relacionadas.


fonte
"Multithreading adequado" não significaria ter um encadeamento com trabalho a ser feito para cada núcleo lógico e não para todo núcleo físico ? Se você estiver executando um loop apertado em todos os núcleos lógicos, o Gerenciador de tarefas deverá relatar 100% com hyperthreading. AFAIK, a "porcentagem de uso" no Gerenciador de Tarefas baseia-se na quantidade de tempo em que o encadeamento em questão estava no estado executável e agendado em um núcleo lógico, não necessariamente na quantidade de tempo em que estava realmente, digamos, fazendo algo em uma ALU . O sistema operacional provavelmente nem sabem que (apenas o microcódigo CPU faria.)
reirab
11
O código de máquina "regular" usa apenas 2 a 3 das 6 ou mais portas de instruções em CPUs modernas. Sem mencionar todas as paradas do pipeline causadas por falhas de ramificação e cache. O Hyperthreading ajuda a preencher essas lacunas. É quase sempre uma vitória usá-lo. Alguns tipos de código não se dão bem com ele, como codificação / decodificação de vídeo ou matemática matricial altamente otimizada. Mas esses são incomuns.
Zan Lynx