kostenloser Webspace werbefrei: lima-city


C#: CPU-Kerne gezielt ansteuern

lima-cityForumProgrammiersprachenProgrammieren mit .NET & Mono

  1. Autor dieses Themas

    vampiresilence

    Kostenloser Webspace von vampiresilence

    vampiresilence hat kostenlosen Webspace.

    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
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. burgi

    Co-Admin Kostenloser Webspace von burgi

    burgi hat kostenlosen Webspace.

    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...)
  4. Autor dieses Themas

    vampiresilence

    Kostenloser Webspace von vampiresilence

    vampiresilence hat kostenlosen Webspace.

    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
  5. burgi

    Co-Admin Kostenloser Webspace von burgi

    burgi hat kostenlosen Webspace.

    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...
  6. Autor dieses Themas

    vampiresilence

    Kostenloser Webspace von vampiresilence

    vampiresilence hat kostenlosen Webspace.

    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
  7. 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.
  8. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!