Entwickler-Ecke

Basistechnologien - Threads auf CPU-Kerne verteilen


golgol - Mo 28.01.08 11:49
Titel: Threads auf CPU-Kerne verteilen
Hi allerseits,

ich habe eine kleine Frage zu den Threads bei .NET. Wenn ich regulär einen Thread starte wird dieser ja automatisch auf dem selben CPU-Kern ausgeführt wie der Prozess, der den Thread gestartet hat. Leider bin ich an eine lange (variierende) Parameterliste gebunden, weshalb ich nicht ein seperates Programm starten kann (ausser ich würde Remoting einsetzen, was aber nicht umbedingt sein muss). Da ich darüber hinaus auf .NET Version 2.0 festgelegt bin kann ich leider auch kein PLINQ einsetzen. Die eigentliche Frage ist nun also, ob jemand von euch eine Möglichkeit kennt einen Thread auf einen anderen Prozessor zu veschieben?
Achja: Es handelt sich dabei um einige Berechnungen, die voneinander unabhängig sind und daher gut auf unterschiedlichen Kernen eines Quad- oder Dual-Core laufen könnten.

Ich hoffen ihr habt da ein Tipp für mich :)


Kha - Mo 28.01.08 16:42
Titel: Re: Threads auf CPU-Kerne verteilen
user profile icongolgol hat folgendes geschrieben:
Wenn ich regulär einen Thread starte wird dieser ja automatisch auf dem selben CPU-Kern ausgeführt wie der Prozess, der den Thread gestartet hat.
Wo hast du das gelesen :gruebel: ? Meine Erfahrung sagt mir nämlich, dass das ziemlicher Lötzinn ist ;) . Und ein "Prozess" wird wohl auf keinem Kern ausgeführt, du kannst höchstens vom primary Thread dieses Prozesses reden.


golgol - Mo 28.01.08 17:00
Titel: Re: Threads auf CPU-Kerne verteilen
user profile iconKhabarakh hat folgendes geschrieben:
Wo hast du das gelesen :gruebel: ? Meine Erfahrung sagt mir nämlich, dass das ziemlicher Lötzinn ist ;) . Und ein "Prozess" wird wohl auf keinem Kern ausgeführt, du kannst höchstens vom primary Thread dieses Prozesses reden.


Du hast recht, in normalen Situationen is das echt Blödsinn - hab das im Nachhinein auch festgestellt (und hätte mir eigentlich auch klar sein müssen). Das Problem bei der ganzen Sache ist, dass es bei mir hier seltsame Phänomene gibt. Führe ich zwei rechenintensive Berechnungen (hab mir da zu Testzwecken eine FFT implementiert) in zwei Threads aus so werden auch beide Kerne "belastet".
Ersetze ich nun den Inhalt der Berechnung durch die eigentliche Berechnung (die ich nur als COM-Server [dll] habe), so wandelt sich das Blatt und das ganze rennt nurnoch auf einem Kern - das ganze ist schon arg seltsam.


arj - Sa 02.02.08 23:54

Wenn du das nur als COM-Server hast, kann es sein, dass dieser nur in einem Thread läuft und nicht zwei Threads verwendet?
Dann kann natürlich nichts parallel laufen.


Heffalump - Mo 04.02.08 12:35
Titel: Re: Threads auf CPU-Kerne verteilen
user profile icongolgol hat folgendes geschrieben:
Hi allerseits,

ich habe eine kleine Frage zu den Threads bei .NET. Wenn ich regulär einen Thread starte wird dieser ja automatisch auf dem selben CPU-Kern ausgeführt wie der Prozess, der den Thread gestartet hat. Leider bin ich an eine lange (variierende) Parameterliste gebunden, weshalb ich nicht ein seperates Programm starten kann (ausser ich würde Remoting einsetzen, was aber nicht umbedingt sein muss). Da ich darüber hinaus auf .NET Version 2.0 festgelegt bin kann ich leider auch kein PLINQ einsetzen. Die eigentliche Frage ist nun also, ob jemand von euch eine Möglichkeit kennt einen Thread auf einen anderen Prozessor zu veschieben?
Achja: Es handelt sich dabei um einige Berechnungen, die voneinander unabhängig sind und daher gut auf unterschiedlichen Kernen eines Quad- oder Dual-Core laufen könnten.

Ich hoffen ihr habt da ein Tipp für mich :)

Schau mal hier [http://msdn2.microsoft.com/de-de/library/system.diagnostics.processthread.processoraffinity.aspx]