2017-04-10 3 views

Antwort

0

Ich nehme an, dass Sie ein Programm ausführen, das eine festgelegte Menge an Arbeit ausführt und dass die Arbeit CPU-gebunden ist, die auf einem Prozessor mit nur einem Kern ausgeführt wird.

Wenn Ihre Anwendung eine Parallelität aufweist, die von Multi-Threading ausgenutzt werden kann, erhöht die intelligente Verwendung mehrerer Threads die CPU-Auslastung und verringert somit die Ausführungszeit. Wenn der parallele Bereich Ihres Tasks beispielsweise in A Sekunden mit einer Auslastung von 10% über dem Leerlauf ausgeführt wird und 5 Threads unterstützt, beträgt die Ausführungszeit A/5 Sekunden und die CPU-Auslastung erhöht sich um den Faktor 5 oder 50%. Ich nehme eine CPU-gebundene Aufgabe an. Bei einer blockierenden Task kann sich die Ausführungszeit verringern, ohne die CPU-Auslastung zu beeinträchtigen.

Wenn Ihre Aufgabe die Parallelität nicht ausnutzen kann, gibt es eine gewisse Erhöhung der CPU-Auslastung aufgrund unnötigen Thread-Overheads.

Es gibt andere Probleme, die sich auf die CPU-Auslastung auswirken können, z. B. die Belastung der CPU vor der Ausführung der Anwendung. Wenn es bereits hoch ist, kann Multithreading eine Menge Thrashing verursachen. Wenn Ihre parallelen Chunks zu kurz sind, wird zusätzlich die Thread-Erstellung und der Overhead für die Erstellung von Threads geändert.

Auch bei der gleichen Aufgabe A, die parallelisiert werden kann, erhöht die Serialisierung die Gesamtlaufzeit und verringert die CPU-Auslastung.

Beachten Sie, dass in den oben genannten Fällen die Gesamtleistung konstant ist.

Verwandte Themen