Come utilizzare le mie risorse di calcolo
-
23-09-2019 - |
Domanda
Ho scritto un programma per risolvere un problema complicato. Questo programma è solo un'applicazione C # console e non fa Console.Write fino a quando la parte di calcolo è finito, quindi uscita non influisce sulle prestazioni. Il programma è in questo modo:
static void Main(string[] args)
{
Thread WorkerThread = new Thread(new ThreadStart(Run), StackSize);
WorkerThread.Priority = ThreadPriority.Highest;
WorkerThread.Start();
Console.WriteLine("Worker thread is runing...");
WorkerThread.Join();
}
Ora ci vogliono tre minuti di corsa, quando ho aperto il mio task manager, lo vedo prendere solo il 12% del tempo di CPU. Io in realtà ho una CPU Intel i7 con memoria DDR3 canale 6G tre. Mi chiedo come posso migliorare l'utilizzo del mio hardware.
Grazie mille
Soluzione
1 thread può occupare solo 1 base, quindi è necessario separare il compito in più thread di utilizzare la CPU. Sono i tuoi assolutamente sicuro che non sta facendo operazioni di IO nel vostro algoritmo?
Altri suggerimenti
I vostri supporti i7 Hyper Threading, quindi un i7 quad-core in grado di gestire otto thread contemporaneamente.
Il programma sembra utilizzare un thread, in modo che il task manager di Windows vi mostrerà un utilizzo della CPU del 12 -. 13% semplicemente perché si utilizzano uno degli otto disponibili CPU "virtuali"
Come HeavyWave ha detto, è necessario trovare un modo per dividere il calcolo in più thread che è possibile eseguire in parallelo per ottenere un utilizzo della CPU superiore.
Un processore Intel i7 dovrebbe riferire come 8 core (4 core fisici, ogni segnalazione come 2-core, a causa di hyper-threading).
Per la prima volta un singolo thread, si dovrebbe ottenere il 12,5% della CPU, nel complesso. Che è quasi perfettamente in linea con ciò che si descrive.
Un thread non può e non verrà eseguito su più core consumano tutte le risorse. Se si desidera utilizzare più risorse, è necessario avviare più thread. Idealmente, avrete bisogno di un minimo di 4 thread, e più probabile da 6 a 8 thread per avvicinare l'utilizzo al 100%.
Per fare questo, è necessario trovare un modo per rompere il vostro "problema complicato" in percorsi di istruzione parallelizzabili.
Scopri cosa è spenderli di tempo a fare, percentuale-saggio. Questo è l'uso metodo che, a prescindere della piattaforma. ho avuto programmi in cui ero sicuro di essere stato non fare alcun I / O e indovinate un po? Sono stato, per la maggior parte dei motivi oscuri.