Entwickler-Ecke

C# - Die Sprache - Multiprozessor CPU


deusr - Di 15.05.07 12:31
Titel: Multiprozessor CPU
Hallo Leute,

ich wollte mal nachfragen, wie ich mit C# alle CPUs meines Rechners auslasten kann. Mein Programm macht folgendes:

Es wird zunächst einmal eine 40.000 Zeilen TXT Datei eingelesen. Anschließend wird diese Datei analysiert, mit den geometrischen Objekten dieser Datei wird dann rumgerechnet und anschließend das Resultat angezeigt. Dauer der ganzen Prozedur: ca. 5 Min.

Dabei wird jedoch nur eine CPU im System ausgelastet, die Kiste hätte eigentlich noch genug Power, die ich derzeit nicht nutzen kann. Ich wollte deshalb nachfragen, wie ich die restlichen CPUs nutzen kann.


UGrohne - Di 15.05.07 12:42

Du musst dazu mehrere Threads nutzen. So wie Du es erzählt, wird alles in mehr oder weniger einer einzigen Prozedur abgearbeitet. Du musst versuchen, Möglichkeiten zu finden, wo Berechnungen wirklich parallel ablaufen können und diese dann eben auf mehrere (mindestens 2) Threads zu verteilen. Das Problem ist dann aber die Synchronisation, da musst Du sehr ordentlich arbeiten, damit es Dir Dein Haus nicht zum Einsturz bringt.


deusr - Di 15.05.07 21:31

Okay, ich hab das ganze jetzt auf 3 Threads aufgeteilt.

Das Hauptprogramm
1) Die Berechnung
2) Real Time Logs
3) Bild zeichnen

Mittlerweile werden zwei CPUs beschäftigt, ich habe aber ein paar mehr. Muss ich sonnst noch irgendetwas machen, damit auch der Rest verwendet wird?


UGrohne - Mi 16.05.07 08:53

Du musst so viele Threads haben, wie Du Cores hast, wenn Du alle gleichermaßen nahe an der Auslastung fahren willst. Ein Thread kann nur auf einer CPU bearbeitet werden. Die Tatsache, dass bei zwei Cores und einem Thread beide Cores zu etwa 50% ausgelastet sind, liegt daran, dass der TaskScheduler von Windows die Threads regelmäßig auf andere CPUs verschiebt.


deusr - Mi 16.05.07 12:53

Also ich habe aktuell in der Kiste 8 CPU Cores drinn und bei 3 gestarteten Threads + Hauptprogramm werden nur zwei Cores ausgelastet. Das ist eigentlich das, was mich verwundert....


UGrohne - Mi 16.05.07 13:25

user profile icondeusr hat folgendes geschrieben:
Also ich habe aktuell in der Kiste 8 CPU Cores drinn und bei 3 gestarteten Threads + Hauptprogramm werden nur zwei Cores ausgelastet. Das ist eigentlich das, was mich verwundert....

Arbeiten alle wirklich immer am Limit, also ohne Pausen oder auf etwas warten zu müssen? Das bezweifle ich nämlich ;)