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

È stato utile?

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.

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