Autor Beitrag
deusr
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17



BeitragVerfasst: Di 15.05.07 12:31 
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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: 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 ;)