Frage

Ich schrieb ein Programm, ein kompliziertes Problem zu lösen. Dieses Programm ist nur eine Konsolenanwendung c # und nicht tun Console.Write, bis der Berechnungsteil abgeschlossen ist, so dass eine Ausgabe nicht auf die Leistung auswirken. Das Programm ist wie folgt:

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();
        }

Jetzt dauert es 3 Minuten zu laufen, wenn ich meine Task-Manager öffnen, ich sehe es nur 12% der CPU-Zeit in Anspruch nehmen. Ich habe eigentlich ein Intel-CPU mit i7 6G drei Kanal DDR3-Speicher. Ich frage mich, wie ich die Nutzung meiner Hardware verbessern.

Vielen Dank

War es hilfreich?

Lösung

1 Thread kann besetzen nur 1 Kern, so dass Sie die Aufgabe in mehrere Threads trennen müssen Ihre CPU zu nutzen. Sind Ihre absolut sicher, dass Sie nicht zu tun, IO-Operationen in Ihrem Algorithmus werden?

Andere Tipps

Ihr i7 unterstützt Hyper-Threading, so dass ein Quad-Core-i7 acht Threads gleichzeitig verarbeiten kann.

Ihr Programm scheint ein Thread zu verwenden, so dass der Windows-Task-Manager Sie eine CPU-Auslastung von 12 zeigen -. 13%, nur weil Sie einen der acht verfügbaren „virtuellen“ CPUs nutzen

Wie HeavyWave sagte, müssen Sie einen Weg finden, Ihre Berechnung in mehr Threads aufteilen, dass Sie parallel laufen können eine höhere CPU-Auslastung zu erhalten.

Ein Intel i7 sollte als 8 Kern berichtet (4 physischen Kern, jede Berichterstattung als 2-Kern aufgrund Hyper-Threading).

Mit einem einzigen Thread starten, sollten Sie 12,5% der CPU erhalten, insgesamt. Das ist fast perfekt inline mit dem, was Sie beschreiben.

Ein Thread kann nicht und wird nicht auf mehrere Cores laufen alle Ressourcen verbrauchen. Wenn Sie mehr Ressourcen verwenden möchten, müssen Sie mehrere Threads starten. Idealerweise verfügen Sie ein Minimum von 4 Threads benötigen, und wahrscheinlicher 6 bis 8 Fäden 100% Auslastung zu nähern.

Um dies zu tun, müssen Sie einen Weg finden, Ihr „kompliziertes Problem“ in parallelizable Anweisung Wege zu brechen.

Finden Sie heraus, was es ist, ist es Zeit zu verbringen tun, prozentual gesehen. Dies ist die Methode, die ich verwendet, und zwar unabhängig die Plattform. ich Programme habe, wo ich sicher war ich keine E / A und erraten, was tun? Ich war für die dunkelste Gründe.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top