PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [Linux, C] Frage zu POSIX-Threads auf Multiprozessorsystemen


Gast
2006-03-27, 17:02:01
Tach,

ich habe soeben ein kleines Programm mit Hilfe von POSIX-Threads multithreadingfähig gemacht. Zu meiner Verwunderung scheint das Programm aber nur einen der beiden vorhandenen CPUs zu benutzen und ist deswegen genauso langsam wie vorher.
Ich hab die Berechnungen zu gleichen Teilen auf 2 Threads verteilt, starte die beiden Threads und joine sie anschließend. Da beide Threads so ziemlich genau die selben Sachen Rechnen (halt nur mit anderen Startwerten) sollten sie auch zur gleichen zeit fertig werden.

(Das Programm läuft unter Linux auf einem Dual-Opteron. Programmiersprache ist C.)

Mein Frage:
Angenommen ich würde alles richtig machen und die Rechenarbeit zu gleichen teilen in 2 Threads aufteilen: Sollte das Programm dann nicht beide Prozessoren benutzen?

Trap
2006-03-27, 18:35:58
Es gibt verschiedene Implementierung von POSIX-Threading in Linux, wenn du Pech hast, hast du die dazugelinkt, die userspace-threading macht.

Welche Kommandozeile hast du zum complieren/linken benutzt?

Gast
2006-03-27, 20:53:57
Dem normalem Gedöns hab ich ein '-lpthread' angehangen. Für genaueres müsste ich morgen auf der Arbeit nochmal kucken.

Gast
2006-03-28, 13:55:25
Jetzt bin ich irgendwie völlig verwirrt. Nachdem ich mir das eben nochmal genauer angesehen habe, bin ich zu dem Schluss gekommen, dass doch alles richtig läuft, d.h. dass die Threads sehr wohl auf mehreren Prozessoren laufen.
Aber irgendwie bin ich trotzdem mit je einem Thread auf 2 Prozessoren langsamer als mit nur einem einzigen Thread der auf einem einzelnen Prozessor.

Hachja, Fehlersuche bei so Anwendungen ist schon was feines... :(

Gast
2006-03-28, 16:04:32
argh, man sollte halt nicht "clock()" zum zeitmessen benutzen! kein wunder, dass da immer die selben zeiten rauskamen...

peinlich, peinlich :(

Gast
2006-03-28, 17:24:52
argh, man sollte halt nicht "clock()" zum zeitmessen benutzen! kein wunder, dass da immer die selben zeiten rauskamen...

peinlich, peinlich :(

Hm, wieso? Zählt das die Gesamtlaufzeit beider Thread extra zusammen? Was ist besser?

Gast
2006-03-28, 20:06:47
clock() misst (zumindest soweit ich das verstanden haben) die CPU-Zeit die ein Programm (inkl. aller Threads) verbraucht. Dadurch kommt halt immer ungefähr das selbe raus, egal wieviele threads ich benutze

Aqualon
2006-03-28, 20:12:25
Hast du mal mit time laufen lassen? Dann sollte immerhin die Realzeit weniger betragen.

Aqua

Stone2001
2006-03-28, 20:37:19
argh, man sollte halt nicht "clock()" zum zeitmessen benutzen! kein wunder, dass da immer die selben zeiten rauskamen...

peinlich, peinlich :(
LOL
So ein ähnliches Problem hatten mein Bruder und ich vor kurzem auch mit Java-Threads.
Bei der Verwendung von nanotime() war sein Singelsystem genauso schnell wie mein Dualsystem, obwohl der Taskmanager bei mir die Auslastung von beiden Prozessoren angezeigt hat. Nachdem wir die Zeitmessung wieder auf die herkömmliche Art mit currentMillis() gemacht haben, war alles wieder in Ordnung.

Gast
2006-03-28, 20:50:22
@Aqualon:
Ja, das hab ich sogar recht früh gemacht, aber dann dummerweise die angezeigten Zeiten falsch zugeordnet/interpretiert... Ab und an sollte man halt doch besser _vorher_ die Bedienungsanleitung konsultieren ;)