Ich verstehe Multithreading und Tasking bis zu einem gewissen Grad, weiß aber, dass außerhalb des Betriebssystems die meisten Windows-Apps auf die Verwendung von nur 1/N CPUs für die durchschnittliche maximale Auslastung beschränkt sind.
Das sind 50 % bei einem Dual-Core, 25 % bei 4 CPUs und 12,5 % bei allen 8 CPUs. Das Ergebnis wird dadurch nicht verändert, wenn Sie Procexp.exe verwenden, um CPUs freizugeben oder CPUs mit geraden oder ungeraden Nummern auszuwählen.
Meine Frage
Gibt es eine Möglichkeit, die Auslastung über dieses vom Betriebssystem beschränkte Limit hinaus zu erhöhen? Ich verstehe, wenn man einer App 100 % auferlegt. Das Betriebssystem könnte einen Bluescreen anzeigen, wenn die Hardware-E/A innerhalb des erwarteten oder erforderlichen Timeout-Zeitraums nicht reagiert, aber selbst 50 % oder 75 % würden meine Ergebnisse verbessern.
Dennoch kann die Leistung von explorer.exe usw. im Betriebssystem bei der Ausführung großer Aufgaben manchmal 50 % oder mehr(?) betragen.
- normalerweise ist die CPU zu 98 bis 99,5 % im Leerlauf, wenn nur ein Browser geöffnet ist und 10 Tabs vorhanden sind (Brave)
Ich verwende Win7 i7-4770S Haswell 3,1 GHz mit 16 GB RAM auf LibreOffice SCALC.exe mit einer Tabelle mit 1,5 Millionen Zellen mit CV19-US-Daten und habe eine Suche/Ersetzung des Textpräfixes ' durchgeführt, um zu versuchen, Text in eine Zellennummer für tägliche Daten umzuwandeln (mit einigen Optionen vonText in Werte) und es läuft immer noch (ja) und ich habe offensichtlich die falsche Methode verwendet.
Wenn es nicht möglich ist, die Betriebssystemauslastungsverhältnisse zu ändern, sollte ich diese Frage zum Konvertieren von 400 Texteinträgen in einen Datumswert „1\20\2020“ in einen Wert zum Neuformatieren nach meinen Wünschen umschreiben.
- Diese Textdatei wurde aus dem GitHub-Repository für die kumulierten täglichen Sterblichkeitszahlen der US-Bezirke JHU CV19 heruntergeladen und mittels Text-in-Spalten-Konvertierung in SCALC importiert.
SCALC läuft noch!“, laut PERFMON bei 12,5 % bei Verwendung von 11 Threads.
Das Problem begann mit der Suche und Ersetzung eines Zeichens in einer Tabelle mit 1,5 Millionen Zellen. Ich habe die Option „Ähnlichkeit“ gewählt, was ein Fehler war, aber das Problem liegt nicht bei Excel oder Open Office Apps.Viele Apps sind Multithread-fähig, aber im Durchschnitt auf 1/N CPUs beschränkt, ohne dass sich dies ändern lässt. Ich kann das mit Bildern beweisen, aber einige von Ihnen wissen, dass es wahr ist.
Andere verstehen die Frage nicht. Ja, es ist möglich, dies zu schreiben oder für Windows durchzuführen, aber nicht für vorgefertigte Apps.
BEISPIEL 1: Die einfache Wiederherstellung eines großen Dateiprozesses dauerte nur Sekunden und erreichte einen Spitzenwert von über 20 %. Der Spitzenwert kann für eine Sekunde durchschnittlich gut über 12,5 % liegen, aber vermutlich nicht dauerhaft, wenn es eine Speicherdurchsatzbeschränkung gibt. (Also nehme ich an, dass sich das nicht verbessern lässt?)
Hier eine Suche und ein Ersetzen von 0 durch 0 in 1,5 Millionen Zellen. Der Durchschnitt lag unmittelbar vor der Aufnahme des Screenshots bei genau 12,5 %.
Hier sind fast GENAU 1/N oder 12,5 % der gesamten CPU-Arbeitslast einer Anwendung mit vielen Threads gewidmet.
Ich kann diesen Test mit dieser Architektur auf VIELEN ANDEREN ANWENDUNGEN unter Windows wiederholen. Ist die Architektur also durch den Speichercachebus begrenzt und gibt es eine Lösung?
Wie andere in diesem Forum geschrieben haben, 1/N CPUs begrenzt oder 12,50 %
Dies ist der Beweis.
Weiterer Beweis für Multithread-MS-App i=nutzt nur 1/N CPU % Durchschnitt MAX
Aktualisieren
Habe WordPerfect 2020 mit QUattro Pro installiert und genau denselben Multithread-Prozess ausgeführt und genau DAS GLEICHE ERGEBNIS erhalten: MAXIMALE CPU-NUTZUNG auf allen 8 CPUs = 1/8 = 12,5 %
Beispiel Nr. 4
- eines Multithread-Prozesses nutzte wieder alle CPUs, aber insgesamt nur 1/N CPUs oder 12,5 % ist Mark Russinovichs Process Explorer, auch bekannt als PROCMON.exe. Er war unabhängig von allen anderen Prozessen und nutzte nur wenige Ressourcen.
Ich bezweifle, dass es hier an Marks Fähigkeit lag, Multithreading zu programmieren. :) (MS Fellow)
Antwort1
Nicht alle Aufgaben können grundsätzlich in eine Aufgabe aufgeteilt werden, die gleichzeitig auf allen Kernen der CPU ausgeführt werden kann.
Jeder Kern in Ihrer CPU ist ein vollwertiger Prozessor. Er kann Informationen über den Ausführungsstatus eines Hardware-„Threads“ verwalten. Jeder Kern verfügt über einen eigenen Cache und eine eigene Datenverarbeitung, die von jedem anderen Kern unabhängig ist. Sie teilen sich möglicherweise einen Cache und einen Speicherbus, sind aber ansonsten vollständig getrennt.
Dieser Thread entspricht in etwa dem, was in der Software als Thread bezeichnet wird.
Das Problem, das Sie sehen, besteht darin, dass die jeweilige Aufgabe, die die Arbeit innerhalb dieser Software ausführt, von Natur aus einfädig ist.
Ein einzelner Thread kann nur auf einem Kern gleichzeitig ausgeführt werden. Auf einem 8-Kern-Prozessor bedeutet das, dass ein einzelner Thread höchstens 1/8 Ihres Prozessors oder laut Task-Manager 12,5 % nutzen kann. Auf einem 4-Kern-Prozessor ist das 1/4 oder 25 %.
Ein Programm kann mehrere Threads haben, aber diese Threads können nur an Dingen arbeiten, die überhaupt nichts miteinander zu tun haben. Ein Thread könnte sich um die Aktualisierung von Daten kümmern, also um die Szenen, ein anderer könnte die GUI aktualisieren und so weiter.
Threads können nicht gleichzeitig an denselben Daten arbeiten, ohne miteinander zu kommunizieren. Und genau diese Einschränkung sehen Sie.
Um mehr als einen CPU-Kern zu verwenden, muss die zu erledigende Aufgabe aufgeteilt und auf mehrere Threads verteilt werden. Diese Aufteilung ist ein Programmierproblem und muss von den Softwareentwicklern umgesetzt werden. Ob eine bestimmte Aufgabe multithreaded ist oder nicht, hängt von der Komplexität der Aufgabe ab und davon, ob sie überhaupt aufgeteilt werden kann.
- Enthält die Aufgabe Daten, die in unabhängige Datensätze aufgeteilt werden können, damit sie von separaten Threads bearbeitet werden können?
- wurde die Software so geschrieben, dass diese bestimmte Aufgabe in separate Threads aufgeteilt wird?
Wenn die Daten vollständig von einer bestimmten Art der Bearbeitung abhängig sind, dürfen sie auf keinen Fall mehr als einen Kern verwenden.
Wenn die Daten zwar aufgeteilt werden können, das Aufteilen und erneute Zusammenführen jedoch einen wesentlich größeren Arbeitsaufwand erfordert, entscheiden die Softwareentwickler möglicherweise, dass sich der Aufwand nicht lohnt, und bleiben stattdessen bei der Verwendung eines Threads/Kerns.
Wenn die Daten aufgeteilt werden können und die Software dafür ausgelegt istDannSie werden sehen, dass mehr als ein Kern verwendet wird.
Ich weiß, dass Excel für eine Reihe von Aufgaben Multi-Core-Berechnungen unterstützt, aber es hängt völlig davon ab, dass die Daten absolut nicht voneinander abhängig sind.