C#: CPU-Kerne gezielt ansteuern
lima-city → Forum → Programmiersprachen → Programmieren mit .NET & Mono
art
aufgabenstellung
beleg
besten umsetzen
bestimmte berechnungen
bestimmten kern
gefunden url
http
kern
konkrete verteilung
machen
magazin
maske
mehrzahl
multi
problem
programm
steuer
url
zuweisung
-
Ich suche nach einer Methode, wie ich ein Programm auf mehreren Kernen ausführen kann. Und Ich meine damit nicht, die CPU Affinität (dazu reicht sogar der Task-Manager), sondern bestimmte Berechnungen gezielt von einem bestimmten Kern ausführen zu lassen. Wie kann ich das am besten umsetzen ?
Edit: Und was noch viel wichtiger ist: Wie kann ich überhaupt herausfinden, welche Kerne dem Programm gerade zur Verfügung stehen ?
Liebe Grüße
- VampireSilence
Beitrag zuletzt geändert: 23.3.2010 23:19:14 von vampiresilence -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Normalerweise macht man das mit Hilfe von Threads. Jeder Thread kann dabei einen Kern belegen. Auf welchem Kern genau jetzt welcher Thread läuft, ist doch für dich selbst irrelevant, denke ich ...
http://www.c-sharpcorner.com/uploadfile/mgold/multithreadingintro10062005000439am/multithreadingintro.aspx
Es gibt aber dazu auch geeignete Framworks (wobei ich gerade keines bei der Hand habe...) -
Naja es ist schon wichtig zu wissen, wo welcher Thread ausgeführt wird. Denn ich muss ja erstmal sicherstellen, dass die Threads auch tatsächlich auf verschiedenen Kernen verteilt sind, um die Last für alle Kernen annähernd gleich zu halten und damit dann schlussendlich den Geschwindigkeitsvorteil zu schaffen. Soweit ich den Link überflogen habe, ist dort auch ganz gut erklärt, wie man mit den Threads umgeht, wenn sie erstmal erstellt sind, aber die konkrete Verteilung ist dabei doch fundamental und das ist leider aussen vor gelassen.
Liebe Grüße
- VampireSilence -
Soweit mir bekannt, übernimmt das OS die Zuweisung der Threads an die Kerne. Ich hab' in der MSDN-Library allerdings noch was dazu gefunden:
http://msdn.microsoft.com/de-de/magazine/cc163340.aspx
In diesem Beitrag werden die Funktionen Thread.BeginThreadAffinity() und SetThreadAffinityMask() erwähnt. Damit solltest du dich befassen.
Grundsätzlich wird das Problem eher darin bestehen, dass du ein Problem / eine Aufgabenstellung so in Threads aufgliedern kannst, dass nicht die Mehrzahl der Threads geparkt sind, und auf Ergebnisse anderer Threads warten, um weiterrechnen zu können.
Vielleicht hilft dir ja davon was weiter... -
Ok, habs mir mal durchgelesen und das macht im Moment noch nen relativ komplizierten Eindruck, allerdings ist es genau das, was ich gesucht habe. Danke !
Liebe Grüße
- VampireSilence -
Also wenn du unter Windows arbeitest, gibt es die möglichkeit den Threads so eine Art Maske mitzugeben, die festlegt auf welchen Kernen der Thread ausgeführt werden darf. Allerdings ist das System selbst schlau genug die Threads optimal zu verteilen. Ich würde dir höchstens empfehlen die Threads mit ihrer Priorität zu steuern.
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage