Domanda

Sono in esecuzione alcune cose piuttosto-intensivo del processore sul mio PC, e notare il mio aspetto utilizzo della CPU piuttosto strano. Il mio PC è un quad-core i7-870, che presumibilmente ha otto core virtuali.
Sto utilizzando la libreria Task Parallel in .NET 4, quindi aspettatevi tutti i core ad essere ben utilizzati, ma sto ricevendo informazioni di questo tipo da Process Monitor:

utilizzo della CPU

Nuclei 6 e 8 sono difficilmente sempre toccato, e, a parte una breve scoppio, 4 non è neanche.
E 'questo quello che mi devo aspettare?

È stato utile?

Soluzione

Per la maggior parte, sì, penso che questo sembra ragionevole. Tenete a mente che hyperthreading realtà solo falsificazioni due core. Ogni core fisico è dato due interfacce, in modo che possa leggere due flussi di istruzioni in parallelo. Ma ancora condividono le stesse unità di esecuzione. Così, quando un core HT è occupato, siano prese le unità di esecuzione, e così il suo nucleo "gemello" sarà in grado di fare un lavoro molto poco.

Questo sembra essere quello che stai vedendo sui primi due nuclei (il secondo in particolare, rende molto evidente)

Oltre a questo, si sarà quasi mai in grado di ottenere l'utilizzo della CPU perfetta. A volte, un nucleo deve solo stallo in attesa per la memoria. A volte è eseguire un'istruzione non pipeline costosa, efficace bloccare le unità di esecuzione su quel core fisico per forse decine o centinaia di cicli.

E, a volte, le dipendenze tra istruzioni potrebbe solo significare che non si sono qualsiasi cosa per uno o più core per eseguire.

Oltre a questo, si veda 8 grafici, e hai solo 4 core, in modo sì, certo hyperthreading sta lavorando . ;)

Altri suggerimenti

In breve

  1. Si funziona (ovviamente)
  2. il profilo it
  3. YMMV - hyperthreading non è multi-carotaggio e come tale dipende fortemente dal tipo di carico di istruzioni e cache di saturazione ecc Non sapendo nulla circa il codice (se non che è C #, in realtà) si potrebbe guardare per le collezioni di 'piccola oggetti che potrebbe essere fatto in rettilineo System.Array dispone di struct (a List<> generico anche utilizzare un array internamente ed ottimizza per tipi di elementi struct)

$ 0.02

Tutto dipende dalla vostra implementazione dell'algoritmo. TPL utilizzerà il corretto numero di core a seconda della dipendenza dei dati nel vostro algoritmo

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top