CPU und Arbeitsspeicher nicht ausgelastet trotz mathematisch anspruchsvollen Berechnungen?

3 Antworten

Von Experte Palladin007 bestätigt

Wenn der Arbeitsspeicher 100% erreicht, "friert" der PC sozusagen eine Weile ein weil der dann Speicher von der langsammeren Festplatte ausleihen muss bzw. damit schwer beschäftigt ist alten Kram zu erkennen und los zu werden und den Speicher neu zu organisieren. Also ganz, ganz schlecht!

Und mehr Speicher als die Berechnung an Variablen hat belegen macht ja auch keinen Sinn! Hat das Programm eine Million Variablen/Arrays, können da je nach Datentypen halt nur wenige Millionen Bytes an RAM verbraucht werden.

Zur CPU, da gibt es mehrere Gründe, warum da nur wenige Prozent Auslastung ist.

Die CPU ist schneller als der RAM. braucht die CPU Anweisungen bzw. Variablendaten aus dem RAM, muss die ein paar Takte warten bis die Zugriff auf den RAM hat. Dafür gibt es den Cache, der hat aber hauptsächlich nur die Programmanweisungen parat, wird wild in Variablen herumgesprungen muss die CPU jedes mal lange auf das RAM warten. Wie schnell ein Programm also mit vielen Variablen rechnen kann hängt davon ab wie wild es in den Variablen herum springt, also wie viel mit dem leider sehr kleinen Cache gearbeitet werden kann.

Allerdings spielt das bei der Auslastungsanzeige keine Rolle, denn auch die Wartezeiten sind für das System eine Auslastung. Das wirkt sich also nur auf die Zeit aus die das Programm braucht, nicht auf die Prozentangabe!

Die 25% max die Du da angibst deutet darauf hin, dass Deine CPU 4 Kerne hat. Die Auslastanzeige sind alle Kerne zusammen, jeder Kern kann also maximal 25% ausgelastet sein.

Ob ein Programm mehrere Kerne benutzen kann hängt davon ab ob es Multi-threading kann oder nicht. Ein "normal geschriebenes" Programm kann nur einen Kern verwenden. Das liegt daran, dass Tasks unabhängig voneinander arbeiten müssen wenn die auf verschiedenen Kernen laufen sollen. Du kannst also das Programm 4× starten um 100% zu bekommen damit je eine Instanz auf einem Kern läuft.

Warum sich die Kerne nicht die Programmbvefehle teilen können, das kennt man ja aus der Grundschule! Bei der Punkt-Vor-Strich Regel kann man eine Formel ja nicht in mehrere Teile zerschneiden und jedem Schüler einen eigenen Teil zum bearbeiten geben. Nachfolgende Rechenschritte hängen von vorherigen Rechenschritten ab. Würde man das auf verschiedene Kerne verteilen, könnten die auch nur nacheinander arbeiten, das ist also noch langsammer als ein Kern alleine!

Der programmierer muss das Problem in mehrere, unabhängige Teile zerlegen die er dann verschiedenen Tasks zuordnet die dann auf unterschiedlichen Kernen laufen können. Bei Videoberechnungen zerschneidet man das ganze Bild in Teile und kann die dann unabhängig bearbeiten. Moderne Videocodecs sind darauf ausgelegt kein Gesamtbild zum verarbeiten haben zu müssen, bestimmte Bildbereiche haben keinen Einfluss aufeinander.

Kann man das Problem nicht in mehrere Unabhängige Teile zerlegen oder der Programmierer hat das einfach nicht gemacht, dann läuft das Programm nur auf einen einzigen Kern und beim 4-Kern Prozessor erreicht das Programm maximal genau 25%.

Die anderern Kerne kümmern sich dann um das Betriebssystem und andere Programme so dass das Programm den einen Kern den es nutzt voll auslasten kann. Also sind mindestens 2 Kerne bei so was immer noch schneller als ein Single Core Prozessor - nur nicht doppelt bzw. x-fach schneller!

Woher ich das weiß:Berufserfahrung

Flo721 
Beitragsersteller
 23.06.2021, 11:22

AMD Ryzen™ 53500U
ProzessorTaktfrequenz4x 2.10
GHzTurboBoost bis zu3.70 GHz
Cache2 MB

Das ist mein Prozessor, du hast also vollkommen recht, vielen Dank für die wirklich ausführliche Antwort!
Beim nächsten PC ist für mich also erstmal nicht wichtig wie viele Kerne er hat, sondern was das absolute Maximum an GHz pro Kern ist, richtig?

Gibt es eigentlich Software, die ein Multithreading für andere Programme möglich macht? Dass das bei solchen Rechnungen nicht möglich ist habe ich verstanden, zwecks der Reihenfolge die eingehalten werden muss. Aber bei Programmen, die viele Aufgaben gleichzeitig erledigen müssen, da müsste es doch etwas geben, oder?

0
Commodore64  23.06.2021, 12:27
@Flo721

Es ist leider nicht möglich, die Abhängigkeiten "von Außen" festzustellen.

Das nächste Problem ist ja vor allem das Timing. Man kann ein Programm nicht einfach in mehrere Teile "zerschneiden" und die dann gleichzeitig abarbeiten, denn oft muss eine korrekte Reihenfolge der Arbeitsschritte eingehalten werden.

Stell Dir einfach mal eine Ampelsteuerung vor wo dann Teile "voreilig" arbeiten ;)

Du hast Recht, hast Du nur ein Programm das kein Multithreading (nicht zu verwechseln mit reinem Multitasking) beherrscht, dann sind reine GHz besser als viele Cores. Aber zwei sollten es mindestens sein, denn Das Betriebssystem und andere Dinge die der PC machen sollen ja keine Zyklen vom CPU Kern auf dem das Programm läuft abzweigen müssen. Daher ist es auch nicht verkehrt einen 4-Kern oder mehr PC zu verwenden.

Hier ist übrigens auch ein Intel einer AMD leicht überlegen bei gleichen GHz, außer natürlich das Programm ist für AMD optimiert. Der Intel ist bei reinem präzisen Rechnen etwas besser, der AMD dagegen bei Befehlen die mehrere Dinge gleichzeitig tun aber die mehr ein "schätzen" sind was für 3D Spiele ideal ist.

Auch richtig wichtig ist natürlich wie schnell das RAM taktet und wie schnell das Board CPU und RAM miteinander verbindet. Das ist eigentlich noch wichtiger als die reinen GHz der CPU!

1
Palladin007  23.06.2021, 14:05
@Flo721

Ergänzend zum Thema CPU und GHz:

Der Takt alleine sagt nichts über die tatsächliche Leistung einer CPU pro Kern aus, sondern nur, wie viele Einzelschritte pro Zeiteinheit ausgeführt werden können. Viel spannender ist, wie viel die CPU innerhalb eines Einzelschritts erledigen kann, doch dafür wirst Du nicht "den einen" Wert zum Vergleichen finden.

Außerdem ist der Takt physikalisch begrenzt und (solange nicht irgendwer eine zündende Idee hat) diese Grenze haben wir erreicht. Dennoch werden die CPUs der Hersteller permanent weiterentwickelt, sie optimieren viele Details, damit die Einzelschritte selber schneller laufen können.

Achte bei deiner Suche also nicht auf die reinen GHz-Werte, damit wirst Du nicht glücklich. Den besten Vergleich der Performance bekommst Du, wenn Du Benchmarks anschaust, die sind dafür gemacht, auch zwischen den Generationen vergleichbare Werte zu liefern. Ach ja und Tests lesen lohnt immer.

1
Commodore64  24.06.2021, 00:43
@Palladin007
Außerdem ist der Takt physikalisch begrenzt und (solange nicht irgendwer eine zündende Idee hat) diese Grenze haben wir erreicht. 

Das hatten wir ja bereits ein paar mal.

Damals kurz vor der Zeit als der 486 angekündigt wurde: "Wie, Lüfter auf die CPU, das gab es doch noch nie!?"

Das nächste war dann: "200MHz kann man nicht überschreiten, da muss dann ein ganz anderes Material als Silizium genommen werden, CPUs werden dann aus Polymeren gefertigt!". Das dauerte fast ein Jahr lang während die CPUs immer nur wenige MHz schneller wurden. Das höchste der Gefühle stellte dann 233MHz dar, gerade als ich den gekauft habe hat man es dann geschafft wie Siliziumteile in einem Chip mit Kupfer zu verbinden, damit war mehr Energie und Takt möglich als mit Aluminium was man vorher verwenden musste.

Und dann ging es in Riesenschritten auf die 450MHz zu die man dann auch für undurchbrechbar hielt. Hier war dann die Lösung die Belichtung der Chips mit Röntgenstrahlen statt normalem Licht zu machen, die Strukturen wurden schlagartig kleiner und die CPUs damit wieder rasant schneller. Davor hat man dann aber auf 64-Bit umgestellt weil man ja noch nicht wusste, dass die CPUs doch mehr Takt haben können.

Bei etwas über 1GHz kam dann die nächste Hürde. Hier weiß ich allerdings nicht woran das lag und wie es gelöst wurde. Der Hürde haben wir aber Multicore zu verdanken, denn das schien damals die einzige Lösung zu sein mehr aus den CPUs heraus zu holen.

Das Problem ist, dass die ganze Computer Industrie auf "Mooer's Law" basiert:

https://de.wikipedia.org/wiki/Mooresches_Gesetz

Die Leistung eines PC muss sich nach einem bestimmten Zeitraum verdoppeln. Nur so werden genug neue Computer gekauft und neue Anwendungsgebiete erschlossen so dass die Computerindustrie funktioniert.

Jedes mal als Not aufkam MHz bzw. GHz zu erhöhen hat man dann zuerst was anderes gemacht um mehr Leistung auf dem Papier zu haben, Kam die Takterhöhung nicht nach hat man dann an den Maßstäben wie diese Leistung bewertet werden soll herum gepfuscht. Und jedes mal als die "notlösung" raus kam aber dann doch ein Durchbruch bei MHz bzw. GHz erzielt wurde, hat man sich natürlich sehr viel Zeit gelassen da die Computer ja jetzt auf zwei Arten schneller wurden.

Ohne diese Politik wären wir jetzt viel Weiter mit der Entwicklung - oder weit zurück da keiner mehr richtig Investiert ohne garantierte Gewinne.

Die tatsächlcieh Grenze bei Elektronik liegt bei etwa 40GHz, mit so hohen Frequenzen kann man noch arbeiten, aber da ist dann wirklich Schluß! Das erfordert aber sehr kleine CPUs, da sonst die Laufzeiten der Takte Teile der CPU mit unterschiedlicher Phasenlage antreiben und die damit nicht mehr zusammen arbeiten können. Die Extrem aufgeblasene Intel CISC Bauweise lässt so hohe GHz Zahlen bei weitem nicht zu. Vermutlich wird man dann irgendwann auf RISC wie z.B. den ÁVRs umschwenken, also die Prozessorarchitekturen auf der Smartphones basieren. Die sind ja mit viel weniger Takt und einem Bruchteil der Energie genau so "stark" wie eine PC CPU.

1

Wenn du alles rausholen willst, brauchst du eine andere Programiersprache!

Vorzugsweise C++ in Kombination mit Threads und SIMD-Intrinsics.

Das Ganze auf Linux und nicht auf Windows, da MS ab Windows 10 die maximale Nutzbarkeit von CPU-Kernen für den Userspace stark eingeschränkt hat.

Hab letztens ein Pythonscript in C++ übersetzt, das über eine Woche für eine Berechnung benötigte. Danach waren es noch 13 Sekunden.

R ist komfortabel für Alltägliches, aber wer wirklich rechnen will, braucht etwas Richtiges! :)

Woher ich das weiß:Berufserfahrung

Das Problem wird wohl die fehlende Verteilung der Last auf die einzelnen Kerne sein. Es wird nur ein Kern ausgelastet, während die anderen kaum Aufgaben haben. Da kann man relativ wenig gegen machen.


tunik123  22.06.2021, 23:56

Das wird wohl so sein. Quad-Core, aber nur ein Kern ausgelastet -> 25%. (kein Multithreading)

0