boost::threads verwenden doch mehr als nur 1 Core?



  • Ich habe ein Programm parallelisiert indem ich mehere boost::threads gebaut habe. Das Programm läuft soweit ich weiß auf einem 16-Kerner (zumindest nach "cat /proc/cpuinfo"). Wenn ich nun "top" ausführe oder ein "ps aux | grep benutzername" mache, dann wird aber das Programm, das ich ausführe, nur einmal angezeigt.

    Laufen diese Threads nun parallel auf die Cores verteilt oder nur pseudo-parallel auf einem Core?



  • wenn du keinen mist gebaut hast, dann laufen die natürlich nicht nur auf einen Core



  • Thread != Prozess



  • Mein Programm läuft einwandfrei.

    Wie kann ich rausfinden, ob mein Programm mehr als nur einen Kern verwendet?


  • Mod

    HändyÄndy schrieb:

    Mein Programm läuft einwandfrei.

    Wie kann ich rausfinden, ob mein Programm mehr als nur einen Kern verwendet?

    Du kannst dir zum Beispiel mit top die Kern-Auslastung anzeigen lassen ('1' drücken, während top läuft). Damit siehst du zwar nicht, welcher Prozess welche CPU belegt, aber wenn dein Programm das einzige sein sollte und trotzdem mehrere Kerne beschäftigt sind, kannst du dir den Rest denken.



  • Ich bin mir jetzt nicht sicher, wie ich deise Ausgabe von top verstehen soll.

    Was bedeutet us, sy, id,..., st etc ?

    top - 17:01:32 up 14 days, 21:45, 12 users, load average: 4.05, 2.85, 2.62
    Tasks: 277 total, 2 running, 275 sleeping, 0 stopped, 0 zombie
    Cpu0 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
    Cpu1 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
    Cpu2 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
    Cpu3 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
    Cpu4 : 0.3%us, 3.0%sy, 0.0%ni, 72.3%id, 13.3%wa, 0.0%hi, 11.0%si, 0.0%st
    Cpu5 : 0.0%us, 2.0%sy, 0.0%ni, 84.0%id, 0.3%wa, 0.3%hi, 13.3%si, 0.0%st
    Cpu6 : 0.0%us, 0.7%sy, 0.0%ni, 98.7%id, 0.3%wa, 0.0%hi, 0.3%si, 0.0%st
    Cpu7 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
    Cpu8 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
    Cpu9 : 0.3%us, 0.3%sy, 0.0%ni, 99.3%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
    Cpu10 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
    Cpu11 : 0.0%us, 0.3%sy, 0.0%ni, 96.0%id, 3.7%wa, 0.0%hi, 0.0%si, 0.0%st
    Cpu12 : 9.0%us, 10.3%sy, 0.0%ni, 0.3%id, 73.0%wa, 1.0%hi, 6.3%si, 0.0%st
    Cpu13 : 0.0%us, 1.7%sy, 0.0%ni, 83.3%id, 4.0%wa, 0.3%hi, 10.7%si, 0.0%st
    Cpu14 : 0.0%us, 2.3%sy, 0.0%ni, 75.7%id, 12.0%wa, 0.3%hi, 9.6%si, 0.0%st
    Cpu15 : 0.0%us, 1.0%sy, 0.0%ni, 88.4%id, 0.0%wa, 0.7%hi, 9.9%si, 0.0%st
    Mem: 49449524k total, 48251532k used, 1197992k free, 121652k buffers
    Swap: 51511288k total, 280k used, 51511008k free, 46656748k cached



  • HändyÄndy schrieb:

    Mein Programm läuft einwandfrei.

    Wie kann ich rausfinden, ob mein Programm mehr als nur einen Kern verwendet?

    man top

    Das sollte dir zeigen, dass mit H die Threadanzeige ein- und ausgeschaltet werden kann.

    Lars


  • Mod

    HändyÄndy schrieb:

    Ich bin mir jetzt nicht sicher, wie ich deise Ausgabe von top verstehen soll.

    Was bedeutet us, sy, id,..., st etc ?

    top - 17:01:32 up 14 days, 21:45, 12 users, load average: 4.05, 2.85, 2.62
    Tasks: 277 total, 2 running, 275 sleeping, 0 stopped, 0 zombie
    Cpu0 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
    Cpu1 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
    Cpu2 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
    Cpu3 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
    Cpu4 : 0.3%us, 3.0%sy, 0.0%ni, 72.3%id, 13.3%wa, 0.0%hi, 11.0%si, 0.0%st
    Cpu5 : 0.0%us, 2.0%sy, 0.0%ni, 84.0%id, 0.3%wa, 0.3%hi, 13.3%si, 0.0%st
    Cpu6 : 0.0%us, 0.7%sy, 0.0%ni, 98.7%id, 0.3%wa, 0.0%hi, 0.3%si, 0.0%st
    Cpu7 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
    Cpu8 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
    Cpu9 : 0.3%us, 0.3%sy, 0.0%ni, 99.3%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
    Cpu10 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
    Cpu11 : 0.0%us, 0.3%sy, 0.0%ni, 96.0%id, 3.7%wa, 0.0%hi, 0.0%si, 0.0%st
    Cpu12 : 9.0%us, 10.3%sy, 0.0%ni, 0.3%id, 73.0%wa, 1.0%hi, 6.3%si, 0.0%st
    Cpu13 : 0.0%us, 1.7%sy, 0.0%ni, 83.3%id, 4.0%wa, 0.3%hi, 10.7%si, 0.0%st
    Cpu14 : 0.0%us, 2.3%sy, 0.0%ni, 75.7%id, 12.0%wa, 0.3%hi, 9.6%si, 0.0%st
    Cpu15 : 0.0%us, 1.0%sy, 0.0%ni, 88.4%id, 0.0%wa, 0.7%hi, 9.9%si, 0.0%st
    Mem: 49449524k total, 48251532k used, 1197992k free, 121652k buffers
    Swap: 51511288k total, 280k used, 51511008k free, 46656748k cached

    Das bedeutet übrigens, dass dein Programm die ganze Zeit am Warten ist. Parallelisiert wohl nicht so gut, dein Algorithmus?



  • Jo danke, wenn ich top eingebe und dann H, werden tatsächliche alle drei Threads angezeigt, die ich ausführe.

    Trotzdem, wie ist die Ausgabe von top + 1 zu verstehen?



  • Ja, mein Programm sollte erwartungsgemäß viel Zeit mit Warten verbringen, so soll das auch sein. Außerdem laufen zur Zeit nur 3 Threads. Das wird sich noch ändern.

    Was bedeute jetzt us, sy, id,..., st etc? id vermutlich idle?


  • Mod

    HändyÄndy schrieb:

    Ja, mein Programm sollte erwartungsgemäß viel Zeit mit Warten verbringen, so soll das auch sein. Außerdem laufen zur Zeit nur 3 Threads. Das wird sich noch ändern.

    Was bedeute jetzt us, sy, id,..., st etc? id vermutlich idle?

    wa = Waiting for I/O
    us = User space
    sy = system/kernel
    ni = Nice Process
    id = Idle
    hi = Hardware Interrupts
    si = Software Interrupts



  • Danke!



  • HändyÄndy schrieb:

    Ja, mein Programm sollte erwartungsgemäß viel Zeit mit Warten verbringen, so soll das auch sein.

    Gute Arbeit. 👍


Log in to reply