Kann man Boostthreads einzelnen Core´s zuweisen?



  • Hallo, im Rahmen meiner Bachelorarbeit versuche ich ein Programm zu schreiben, mit dem ich durch mehrere Threads dynamische Speicherverwaltung parallel organisieren kann, will heissen, ich belege und lösche mit dem "Malloc" befehl willkürlich Speicherplätze und möchte dies mit einer belieben Anzahlt von Threads parallel machen.
    Zu meiner Frage: gibt es die Möglichkeit bei einem Mulitcoresystem Boost-Threads dedizierten (bestimmten)Core´s zuzuweisen?
    Meine Kenntnisse: Ich habe in meinem Ingenieurstudium erfolgreich an einem C-Programmierkurs teilgenommen, in die Unterschiede zu C++ muss ich mich noch einarbeiten.

    Über Antworten und eventuell auch Literaturverweisen, die für meine Frage oder auch meine Arbeit im Allgemeinen hilfreich sind, würde ich mich sehr freuen.



  • Ist es möglich? Nicht, dass ich wüsste. Das, was Du willst ist sehr System-spezifisch und eventuell sogar gar nicht möglich unter dem Betriebssystem, was Du benutzt. Man kann eventuell eien Prozess (mit samt seinen Threads) auf bestimmte Kerne beschränken (Taskmanager) aber das war's auch schon.

    Es würde mich sehr wundern, wenn eine Bibliothek wie Boost.Thread, welche ja versucht plattformunabhängig zu sein, so eine Funktion anbieten würde. Wenn Du allerdings für Dein Betriebssystem so eine Funktion in der OS-API finden solltest, müsste es möglich sein, die entsprechenden "handles" oder "IDs" von Boost.Thread-Threads zu bekommen, so dass Du das einstellen kannst.

    Gruß,
    SP



  • Unter Windows sollte da afaik etwas zur Verfügung stellen. Kam irgendwo hier im Fourm glaube ich sogar mal.



  • such im source nach SetThreadAffinityMask



  • Genau das war es. 🙂

    Ich bin mal so frei und Link dahin:
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-232206.html



  • Danke für die schnellen Antworten.

    Ich bin von meinem Professor daran gehalten unter Linux (Suse) zu programmieren und ich soll ausdrücklich boost-Bibliotheken benutzen. Ich bin mir nicht sicher ob der "SetThreadAffinityMask" mit Boost funktioniert. Wie gesagt, bin ein Anfänger und muss jedes zweite Wort hier nachschlagen.





  • timobachtel schrieb:

    Wie gesagt, bin ein Anfänger und muss jedes zweite Wort hier nachschlagen.

    Dann lass die Finger von Thread-Affinität. Brauchst du nicht. Wenn du glaubst dass du's brauchst, machst du garantiert was falsch 😉



  • ich habe unter http://lists.boost.org/boost-users/2009/02/45121.php
    die Header-Dateien für boost-bind_processor gefunden und in den boost-Ordner kopiert.

    Ich habe sie so in meine Programm eingebunden:

    #include <boost/thread/bind_processor.hpp>

    (genauso wie die anderen boost-Dateien.)

    Beim Kompilieren/Linken bekam ich diese Meldung

    /tmp/ccKqcdx5.o: In function \_\_static\_initialization\_and\_destruction_0(int, int)': bt.cpp:(.text+0x8a): undefined reference toboost::system::get_system_category()'
    bt.cpp:(.text+0x94): undefined reference to boost::system::get\_generic\_category()' bt.cpp:(.text+0x9e): undefined reference toboost::system::get_generic_category()'
    bt.cpp:(.text+0xa8): undefined reference to boost::system::get\_generic\_category()' bt.cpp:(.text+0xb2): undefined reference toboost::system::get_system_category()'
    collect2: ld returned 1 exit status

    fehlt mir vielleicht noch die Bibliothek? Wenn ja, diese war leider nicht dabei, der download bestand nur aus .hpp-Dateien.



  • Ja, dir fehlt noch boost::system. Die ist aber beim normalen boost Paket dabei (muss natürlich kompiliert werden).



  • Hey, Danke.


Anmelden zum Antworten