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
golgol 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
Khabarakh 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
golgol 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]
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!