Perché la mia CPU non funziona al massimo delle sue potenzialità anche quando la mia applicazione (che utilizza le risorse della CPU) è in ritardo?


30

Perché la mia CPU non si esaurisce mai anche quando la mia applicazione, che consuma il 40% della CPU (ma il 30 - 40% della CPU rimane ancora inattiva), essendo in ritardo?

Vuol dire:

  1. C'è un modo per forzare il funzionamento della CPU al 100%
  2. Le CPU sono prodotte in questo modo e l'unica cosa che posso fare è acquistare nuovo hardware.
  3. Il limite sta nell'applicazione e il ritardo non migliorerà anche con una CPU migliore. (Supponendo che l'applicazione sia perfetta, ciò che sto chiedendo è se il software funziona in questo modo?)
  4. Qualcos'altro.

4
Capisco a cosa sta arrivando l'OP, disprezzo il modo in cui quando l'aggiornamento antivirus o windows lo sta eseguendo impantana completamente il mio sistema, massimizzando quel singolo core .... lasciando il resto di loro a fare cosa? Finisco seduto per 12 minuti fino a quando non posso tornare al lavoro.

10
Qualsiasi applicazione che massimizza anche una delle diverse risorse condivise in un computer (CPU, memoria, memoria o rete) può rallentare l'intero sistema, nonostante le risorse condivise rimanenti abbiano capacità inutilizzata.
Dico Reinstate Monica il

78
Ho programmato per 25 anni. E posso assicurarti che questa non è una cospirazione. È raro trovare applicazioni in cui la CPU è il collo di bottiglia, il più delle volte le applicazioni sono in attesa di altre cose come il disco rigido, la RAM o la rete.
Contango,

10
Supponiamo che tu stia facendo un lavoro di calcolo - facendo le tue tasse, diciamo. Se lavori zero mentre stai aspettando che i tuoi moduli fiscali arrivino per posta, allora farai zero lavoro per molto, molto tempo. Le app ritardate sono spesso scritte male; bloccano il thread dell'interfaccia utente su operazioni ad alta latenza come l'IO del disco o della rete che non hanno nulla a che fare con la CPU, quindi la CPU è inattiva e l'app non risponde. Ottenere una CPU più veloce non aiuta; che ti porta alle operazioni di blocco ad alta latenza più velocemente .
Eric Lippert,

3
@TwistyImpersonator: questa è una buona analogia per i programmi multithread ad alta contesa. A volte vediamo che un programma multithread funzionerà più lentamente su una CPU più veloce perché la CPU sta ottenendo più thread in uno stato bloccato più velocemente di una CPU più lenta. Se domani a ogni guidatore di New York venisse data un'auto 10 volte più veloce, i tempi di percorrenza non migliorerebbero . Andrebbero peggio.
Eric Lippert,

Risposte:


94

Probabilmente stai eseguendo applicazioni a thread singolo che possono massimizzare un singolo core della CPU. Poiché il 100% di un core è inferiore al 100% della capacità della CPU multi-core, l'utilizzo totale della CPU non raggiunge il 100%.

È possibile confermare ciò visualizzando l'utilizzo dei singoli core in Task Manager. Cerca i singoli core che si stanno avvicinando al massimo utilizzo.


24
A causa del passaggio, vedrai solo un uso distribuito che si somma all'utilizzo di un core. Fondamentalmente, l'app utilizza esattamente un core, ma si sposta tra i core, quindi ognuno ha una media di 1 / n.
Aganju,

62
Direi anche che è possibile che la CPU non sia effettivamente il collo di bottiglia.

16
Ricordo vagamente che la Fortezza dei Nani ha notoriamente il collo di bottiglia di un nucleo al 100%, quindi ha iniziato a trascinare altri bit in un secondo thread, portando il thread "principale" bloccato al 100% e il thread "di sfondo" si aggirava intorno al 20-60%. Su un quad core, questo è ... 30-40%.
Mooing Duck,

3
Non dimenticare la modalità Turbo sulle CPU. Taskmanager non ne tiene conto quando si calcola la percentuale di carico. Sul mio i5-4570S vedo spesso un carico di circa il 30%. Quello è un core (25%) con 2,9 GHz regolari turbo a 3,4 GHz. 25 * 3,4 / 2,9 è quasi il 30%. Con una maggiore diffusione tra frequenza normale e turbo possiamo aumentare.
Sunzi,

7
@AytAyt - Farei un passo avanti e direi che non è solo possibile, è quasi certo . A meno che l'applicazione dell'OP non stia eseguendo un puro scricchiolio dei numeri (o utilizzando spin-lock ovunque), in realtà è abbastanza difficile caricare completamente una CPU, anche con un programma multithread. Qualsiasi I / O su disco o in rete lascerà cicli inattivi e, data la menzione dell'OP di un'app "ritardata", sembra probabile che ci siano delle comunicazioni di rete in gioco.
aroth,

49

Non hai specificato il tuo sistema operativo. Quindi la risposta sarà comune come.

Le applicazioni possono essere limitate da vari motivi. Il collo di bottiglia può essere in:

  • processore
    • bassa velocità
    • app a thread singolo / basso (non in grado di utilizzare tutti i core / thread)
  • I / O
    • throughput del disco
    • latenza del disco
    • throughput di rete
    • latenza di rete
  • memoria
    • capacità
    • throuthput
    • latenza
    • cache insufficiente
    • località (NUMA)
    • scambio

E ci sono più ragioni, che non sono così comuni.

Dai un'occhiata alle risorse del tuo sistema e prova ad analizzare il tuo sistema per altri bottlenec, non solo per il carico totale della CPU.


9
Inoltre: la scheda video ha GPU, I / O e memoria separati, anche uno di questi potrebbe essere il problema.
Mooing Duck,

2
@MooingDuck Vero, ma di solito sarebbe un problema solo se l'applicazione in questione utilizza effettivamente la GPU (ovvero un gioco 3D o un'app CUDA / OpenCL o qualcosa del genere)
reirab

13

In generale, quando le persone parlano della lentezza del loro computer, menziono la polvere. Come ex tecnologia informatica con 15 anni di esperienza professionale, ho scoperto che il semplice espulsione della polvere può migliorare significativamente le prestazioni.

Non sto parlando di una quantità sottile e quasi impercettibile di polvere, ma piuttosto grossi ciuffi o persino tappeti che impediscono il normale flusso d'aria. Ho visto dissipatori di calore che avevano sostanzialmente un filtro su di loro che era polvere, piuttosto che un vero filtro. Ciò impedisce a una quantità molto significativa di aria di raffreddare mai la CPU. Rimuovere la polvere in questo modo tenderà a calmare i fan all'istante e permetterà ai tuoi componenti di sopravvivere più a lungo. Il calore aveva ucciso molti computer che mi era stato chiesto di riparare.

Accanto all'idea del problema termico, potresti anche provare una migliore pasta termica. Il cr @ p bianco che viene fornito con la maggior parte dei processori è come lo Yugo di pasta termica. Uso Arctic Silver, ma ci sono cose migliori di così, anche. Arctic Silver parla di una Porche (usando la scala di valutazione dell'auto), ma ci sono varietà di Ferrari e supercar là fuori.

I processori tendono a rallentare quando si surriscaldano. Questa è una cosa fisica così come una "autoconservazione" programmata in molte CPU. Non so se mostrerà ancora il 100% sul Task Manager o se mostrerà il 40% (come vedi), ma può essere un rallentamento significativo mentre la CPU cerca di lasciare che il dissipatore di calore e la ventola " raggiungere."

Un'altra cosa che potrebbe rallentare la CPU è la GPU. Se stai utilizzando giochi o programmi di utilità grafica (come CAD), la tua GPU potrebbe trattenere la CPU. Ottenere una scheda video migliore potrebbe essere qualcosa da guardare. Inoltre, l'uso della carta giusta sbagliata potrebbe trattenerti. Le carte da gioco non sono (di solito) progettate per funzionare con CAD così come le schede di workstation, e le schede di workstation (di solito) non giocheranno molto bene. Alcuni lo fanno, ma la maggior parte no.

Come menzionato da @Jaroslav Kucera, potrebbe essere relativo al disco. Colpire molto HD (s) può rallentare fino in fondo. Normalmente eseguo più unità. Uno dedicato al sistema operativo e altri per software, file di pagine di Windows, file personali, ecc. Oltre a non doversi preoccupare così tanto del backup dei dati personali in caso di errore del sistema operativo, avere più HD distribuisce il carico di lavoro in modo considerevole. Leggere e scrivere sullo stesso disco contemporaneamente può rallentare seriamente l'HD. L'uso di SHD può mitigarlo, ma non del tutto. Photoshop e il software di editing video sono noti per colpire duramente gli HD. Leggere da un HD e poi emetterlo in un secondo HD è la strada da percorrere. Questo aiuta anche la vita dei tuoi HD. Vado anche con il raffreddamento attivo sui miei HD. Non ho ucciso un disco rigido da quando ho messo un ventilatore e un dissipatore di calore su di loro +15 anni fa. Google loro, sono un'assicurazione economica.

Che ci crediate o no, anche il vostro alimentatore potrebbe rallentare. Se non hai abbastanza energia (o il tuo alimentatore è vecchio o un POS cinese economico, sopravvalutato), puoi avere problemi di prestazioni. Ho visto di persona quali strani problemi di sistema operativo possono fare una PSU traballante. Stai cercando tensione e amplificatori, quindi assicurati che corrispondano tutti alle specifiche dell'alimentatore, se segui questa rotta e assicurati anche che soddisfino o superino le tue esigenze di alimentazione. Se i tuoi componenti ammontano a 500 watt e stai dando loro anche 475, è un male. Ti consiglio di superare le tue esigenze di circa il 20%, quindi man mano che la tua PSU invecchia (e diminuisce la potenza) e gli altri componenti invecchiano (e richiedono potenza media), non sei bloccato ad acquistare una nuova PSU così rapidamente.

Includendo le altre risposte qui, ci sono ancora più motivi per rallentare il tuo computer. Ad eccezione dell'opzione PSU, ciò di cui ho parlato è stato visto molto comunemente quando ero un tecnico informatico. Fare un benchmark e altri test sono l'unico modo in cui sarai in grado di capire le cose. Lo scambio di parti potrebbe non risolvere nemmeno il problema se si tratta di una combinazione di più parti che causa il rallentamento.

E, AFAIK, non c'è modo di forzare il tuo computer a utilizzare il 100% del processore. La CPU e il sistema operativo sanno cosa devono fare e di solito sono davvero bravi nel loro lavoro. :-) Non penso che nessuno abbia ancora trovato un modo per forzare l'alimentazione di una CPU per farla funzionare al 100% quando pensi che dovrebbe. Almeno non senza dargli cibo extra per rendere la percentuale "bella".

Con il 40% e non una divisione intera del 100% (come il 25%, il 33% o il 50%), ho la sensazione che non si tratti di un singolo problema di threading. Potrebbe essere, ma non è qui che va la mia mente. +1 a @Twisty Impersonator per averlo pubblicato subito, però.

Buona fortuna a provare a capirlo! Ho trascorso giorni cercando di capire questo genere di cose, solo per finire per sostituire la maggior parte delle viscere come "ultima risorsa".


1
+1 per indicare la possibilità che un'applicazione possa rimanere bloccata su una GPU massima.
Dico Reinstate Monica il

6
Ho dimenticato di dire che fumare vicino al tuo computer è una delle cose peggiori che puoi fare. Lascia un brutto, disgustoso e disgustoso (non sottolineo abbastanza) pasticcio appiccicoso arancione che non può essere ripulito. La polvere diventa incrostata e impossibile da pulire. Potresti riuscire a toglierlo con un bagno d'olio di ricambi auto o un bagno d'acqua sonico, ma non ho mai avuto problemi. Anche pulire il caso è uno sforzo inutile.
computercarguy,

2
Proprio dal punto di vista di uno sviluppatore, la CPU farà qualsiasi cosa tu gli dica. Se non è al massimo al 100%, è perché il tuo programma è in attesa di altre cose (IO del disco, rete, input dell'utente, messaggi di sistema, ecc.). Se hai qualcosa da fare per la CPU, userà automaticamente il 100% (supponendo un'applicazione multithread) per fare ciò di cui il tuo programma ha bisogno - non devi "farlo" usare al 100% o sbloccarlo o qualcosa del genere.
JPhi1618,

2
@ JPhi1618: stai dimenticando il caldo. Indipendentemente da ciò che gli dici di fare, se la CPU si surriscalda, si accenderà a velocità inferiore al 100%.
Mooing Duck,

9
@ JPhi1618 Le CPU sono spesso limitate ridimensionando la loro frequenza (underclocking), quindi invece di funzionare a, diciamo invece di 3.0GHz, funzionano a 2.0GHz. Quindi la CPU con limitazione termica può ancora riportare un carico del 100%, poiché ogni "slot di lavoro" è occupato, solo ci sono meno "slot di lavoro" nell'unità di tempo disponibile.
el.pescado,

3

Potrebbe essere impostazioni di risparmio energetico nel BIOS o nel sistema operativo. Molte CPU e schede madri moderne dispongono di impostazioni che consentono alla CPU di essere più economica con l'utilizzo dell'elettricità (soprattutto per i laptop che vogliono che la batteria duri). Probabilmente puoi disattivare tale impostazione, ma assicurati di sapere cosa stai facendo, poiché accanto all'impostazione ci sono solitamente altre cose che possono influenzare la funzionalità del computer in altri modi importanti.


2

Colpisco regolarmente il 100% di utilizzo durante le attività di rendering e matematica. Verificherò che l'hyperthreading raggiungerà il 100% e l'ordine delle istruzioni è un grosso problema. Intel e AMD hanno entrambi una grande quantità di hardware dedicato al riordino delle istruzioni per riempire il maggior numero possibile di core di esecuzione. Se ottieni il 30% su una macchina moderna, puoi farlo

  • Controlla le temperature: Intel e AMD eseguono entrambi il downclock quando si surriscaldano e viene visualizzato come stutter e picchi.
  • Non farci molto .... esempi sono:
    1. Navigare su Internet
    2. E-mail
    3. I giochi più semplici
    4. Garantirei quasi che il tuo problema sia uno o tutti i seguenti, a partire dall'alto:
  • Ottieni un SSD
  • Ottieni un SSD
  • Ottieni il tuo sistema operativo sull'SSD e sposta i dati normali su un'unità multi-TB tradizionale. Windows ha bisogno di più accesso ai suoi file locali di ogni altra cosa.
  • Amico Bonazai?
  • Mantenere almeno tutte le unità con una capacità superiore al 10%. NTFS è un file system di journaling e le prestazioni diminuiscono al massimo dell'azionamento.
  • Hai bisogno di un'unità NVMe / SSD per il tuo sistema operativo il prima possibile (sì, l'ho detto di nuovo). Le prestazioni sono incredibili e continuano fino alla seconda parte di questo ... Un importante rivenditore stava vendendo oggi Samsung 961 NMVe da 512 GB a $ 300, il che è abbastanza per un uso normale.
  • Windows 10 è pesante GPU. Una scheda video dedicata economica può scaricare sia la memoria che la CPU. Puoi comunque utilizzare l'APU in combinazione con la scheda video ma risparmierai un po 'di RAM e VRAM è generalmente molto più veloce.
  • Anche le CPU con numero di core inferiore sono associate alla memoria. Se guardi i7, tutti eseguono DDR quad-channel in 4 banchi. I chip Epyc di AMD saranno DDR5 a 8 canali con 64 core. Non aiuta Infine, e non posso sottolineare abbastanza questo, scaricare i soldi su tutta la RAM che la tua macchina richiederà. Ho 32 GB e ne comprerò altri 32 entro la fine dell'anno. Windows fa qualcosa di simile al superfetch che è un po 'più recente che comprime la memoria nella RAM che non viene utilizzata, quindi programmi e dati possono essere decompressi quando necessario. Come altro esempio, eseguo una VM Linux per lo sviluppo, ho allocato 6/12 core e 16 GB di RAM, e dopo il primo caricamento dall'SSD inizia in ~ 3 secondi. La CPU è considerata molto economica in questi giorni da ottimizzazioni del genere ...

Tutta questa roba sembra eccessiva fino a quando non sono bloccato a compilare un progetto di file da 70k o a convertire i file raw della fotocamera gigante a 17 "x26" x600 dpi a colori a 16 bit. Anche al 100% di utilizzo le risorse sono così eccessive che non si ottiene rallentamento. L'altra sera mi sono reso conto di avere due VM e un Wolf 2 caricati insieme a 2 IDE (sono distratto, citami in giudizio) e non ho notato rallentamento. Questo è un BTW da $ 1500, niente di speciale e acquistato più lentamente nel corso degli anni. La metà è una delle Radeon RX64 perché la mia scheda video aveva 6 anni. Enorme differenza nel rendering e così via. L'aggiornamento probabilmente ti consentirà di utilizzare più l'hardware rispetto al presupposto che il tuo utilizzo del 30% sia tutto ciò che otterrai.

Se avessi lanciato un disco rigido da 5400 RPM in questa macchina per sistema operativo, avrebbe funzionato come una schifezza totale.

TL; DR sembra che tu sia legato alla CPU in questo momento. Spendi un paio di centinaia su almeno un SSD da 256 GB per il sistema operativo, 8 GB di RAM e una scheda giocatore di fascia bassa e il computer durerà anni. Questo è sopravvissuto per 6 anni prima che finalmente eseguissi un processore e un aggiornamento di Mobo e stavo compilando un'intera suite di cross-compilatore circa 25 volte al giorno con la vecchia attrezzatura.

Chiamami eccessivo ma non sto raccomandando 8 carte Tesla o altro. :-) Fai aggiornamenti minori quando puoi e penso che risolverai molti di questi problemi. L'ho fatto anni fa aggiungendo un SSD a un sistema Q6600 e guardando il triplo delle prestazioni.


1

Senza conoscere le specifiche del tuo programma, è difficile da dire, ma poiché un'altra risposta esamina la possibilità che l'applicazione sia a thread singolo, guarderò l'applicazione come se stesse usando il multithreading corretto.

Una cosa comune che viene trascurata sono i nuclei fisici rispetto ai "core iperthreaded". L'hyperthreading eccelle in molte attività brevi con colli di bottiglia diversi dalla CPU. Per le attività a collo di bottiglia della CPU a ciclo stretto, sei ancora limitato dal numero di core fisici, che è generalmente la metà del numero di core hyperthreaded. Nel peggiore dei casi, il tuo task manager può mostrare solo il 50% di utilizzo perché conta i core ipertestuali nei suoi grafici, quando in realtà i tuoi core fisici possono essere al 100% di utilizzo. In generale, tuttavia, mostreresti di più, poiché il tuo sistema operativo sarà in grado di utilizzare l'hyperthreading per altre attività non correlate.


"Multithreading corretto" non significherebbe avere un filo con il lavoro da fare per ogni nucleo logico piuttosto che per ogni nucleo fisico ? Se stai eseguendo un ciclo stretto su ogni core logico, Task Manager dovrebbe riportare il 100% con hyperthreading. AFAIK, l '"utilizzo percentuale" in Task Manager si basa sulla quantità di tempo in cui il thread in questione si trovava nello stato eseguibile e programmato su un core logico, non necessariamente sulla quantità di tempo in cui, in realtà, stava facendo qualcosa su una ALU . Il sistema operativo probabilmente non lo saprebbe nemmeno (lo farebbe solo il microcodice della CPU.)
Reirab il

1
Il codice macchina "normale" utilizza solo da 2 a 3 delle 6 o più porte di istruzione sulle CPU moderne. Per non parlare di tutte le bancarelle della pipeline causate da mancate filiali e cache. L'hyperthreading aiuta a colmare queste lacune. È quasi sempre una vittoria usarlo. Alcuni tipi di codice non vanno bene con esso, come la codifica / decodifica video o la matematica della matrice fortemente ottimizzata. Ma quelli sono insoliti.
Zan Lynx,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.