wxThread bei Mehrkernprozessoren



  • Hallo alle miteinander,

    Ich bin mir zwar nicht ganz sicher ob dieser thread hierher gehört frage, hoffe aber trotzdem auf hilfe 🙂

    Mein Problem:

    Auf meinem 4-Kernprozessor, belegt ein (rechenintensiver) wxThread maximal 25% der CPU Auslastung.

    Meine Fragen:

    1. Wie kann ich für mehr Prozessorzeit( bsp. 75%) sorgen?
    2. Wie kann ich allg. herausfinden wieviele Kerne( wenn das für die
    threadresourcen wichtige ist) ein Computer hat?

    Ich sage schon mal im voraus danke und wünsche allen ein fröhliches Weihnachten und einen Guten Rutsch :xmas1:

    btw: was hat der Spammfilter gegen voraus mit 2 r?


  • Mod

    Der Spamfilter hat nix dagegen, nur uns nervt das ständige Falschschreiben 😉

    Generell ist es Sache des OS die Prozessoren etc zu zu ordnen.
    Du kannst aber ca. von der Faustregel ausgehen, das ein Thread immer nur auf einem Thread ausgeführt wird,
    mehrere Threads können also Paralell auf mehreren Prozessoren ausgeführt werden.



  • erstmal dankeschön für die schnelle antwort. 🙂

    heißt das wenn ich jetzt "alles" an rechenpower ausnutzen wollte müßte ich bei mir z.b. 4 threads starten?


  • Mod

    Jein.
    Nicht immer kann man etwas schneller machen in dem man es auf 4 Prozessoren verteilt. Und das OS hat da immer noch das letzte Wort.
    Programiere lieber effizient, so das du nicht 4 Prozessoren brauchst 😉

    Was ist überhaupt an deinem Programm so rechenlastig?



  • Simulation. 😃

    dankeschön und tschau
    :xmas2:


  • Mod

    Dann musst du halt mal schauen, was du in einen Thread packen kannst. Erstmal natürlich die Simulation selber, das kannst du ja von der GUI in einen Thread auslagern.
    Und dann kommts natürlich darauf an was du simulierst... 😉



  • so hab ich mir das auch gedacht. danke für die echt flotte hilfe 🙂



  • Naja, ganz so trivial isses auch wieder nich ....

    zumindest unter windows, X Threads != Benutzung von X Kernen ...

    standardmaessig, zumindest wenn man ueber die winapi geht, werden alle threads aufm selben kern ausgefuehrt, was eigentlich auch SInn macht. Threads nimmt man meist, weil man sich eine kopie der Programmierumgebung sparen will, und "Schnell" auf gemeinsame Daten zugreifen.

    Gemeinsame Daten innerhalb von 2 kernen bedeutet aber overhaed fuer die architektur um den prozessor.
    Man kann nun aber auch expliziet seine threads auf andere kerne legen. Dann sollte man aber genau wissen was man tut, und die "Ausgelagerten" threads sollten recht wenig daten untereinander austauschen, bzw recht wenig auf die gemeinsamen daten zugreifen, sonst hasst den effekt, das dein programm zwar auf x kernen laeuft, aber trotzdem langsammer ist als wie auf nen einzelnen kern, weil staendig daten ueber den cache von den registern des einen kerns zu dem anderen geshiftet werden. und das costet auch rechenzeit .... und muss abgesichert werden, also wartezyklen (mutexe) drinnen.

    Wenn du aber die threads gut "trennen" kannst, also sie gut separierbare aufgaben fuer sich loesen, und im idealfall nur bei begin und am ende ihres jobs daten in den gemeinsamen pool schreiben, ist der "Vorteil" der threads gegenueber "Prozessen" nur noch marginal. Also von sicht des BS und der ressourcen aus.
    Programmiertechnisch ist multiprozessing doch noch aufwendiger (IPC). Gibt aber mittlerweile auch gute bibliotheken fuer.
    Bei Multiprozessing sind die BS meist cleverer und versuchen so intelligent sie halt koennen, mehrere kerne zu nutzen ....

    Ciao ...



  • Das bezweifle ich.

    Ich habe grad mal zum Spass ein kleines Lua-Script laufen lassen, das nur aus einer For-Schleife mit 10000000 Durchläufen besteht, um einen Thread zu erzeugen, der eine CPU voll auslastet.

    Dabei habe ich mir die Auslastung der einzelnen Kerne angeschaut, und siehe da, es ist nicht so wie von dir beschrieben. Windows verteilt selbst einen einzelnen Thread auf beide CPUs. Zumindest Vista.



  • Ich kanns nur bei XP nachvollziehen .... und mit der Winapi

    Nen programm was 20 threads baut, wo jeder thread nur xmal den sinus von nem wert ausrechnet, ohne irgendwelchen datenaustausch zwischen den Threads (ideal fuer mehrere Kerne), Benutzt bei mir hier nur einen Kern .... Ich muss da mit SetThreadIdealProcessor nachhelfen, dann gehts

    Ich weiss ned was LUA macht ... und ob du nen auf MP und deine architektur optimierten Interpreter hasst. Was bei LUA wiederum sinn macht.

    Ciao ...


Anmelden zum Antworten