PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Anzahl Cores = Anzahl Threads bei Videoencoding?


NotoricTonic
2008-09-09, 17:31:14
Hallo

Ich befasse mich seit einigen Tagen wieder mit Videoencoding.

Beim Xvid Codec bspw. kann die Anzahl der Threads manuell eingestellt werden und ich frage mich nun ob es generell besser ist die Anzahl der Threads mit der Anzahl der Verfügbaren Cores gleichzusetzen.

Ich verwende einen E8400 der ja pro Core 'bis zu' 4 Befehle gleichzeitig abarbeiten soll bzw. einzelne Teile der Pipeline sollen dies können.

Nun die Frage: Kann ich die vorhande Leistung besser ausreizen wenn ich den 2 Kernen zB. 4 Threads zum arbeiten gebe? Oder verschenke ich durch den höheren Verwaltungsaufwand wieder Leistung?
Der Taskmanager verrät kein eindeutiges Bild da die Auslastung relativ stark schwankt.


MfG
NotoricTonic

Phantom1
2008-09-09, 17:38:08
Probiere es doch einfach aus und stoppe die zeit wie lange es dauert (einmal mit 2 threads und einmal mit 4 threads mit sonst gleichen einstellungen), dann weiß du es ;)

Gast
2008-09-09, 17:38:14
Nun die Frage: Kann ich die vorhande Leistung besser ausreizen wenn ich den 2 Kernen zB. 4 Threads zum arbeiten gebe?

kannst du machen bringt aber nicht wirklich etwas

NotoricTonic
2008-09-09, 18:36:43
Phantom, ich zeichne nur Sachen von meiner TV Karte auf und da ist es schwer 2x hintereinander das selbe Video zu bekommen ;)

Coda
2008-09-09, 18:37:43
2 Threads reichen.

Bumsfalara
2008-09-09, 18:38:34
2 Threads reichen.

Das ist so zumindest für x264 nicht richtig. Edit: Für Xvid (mencoder) langt das auch nicht.
Bei x264 gilt die Regel: Kerne * 1,5 = Anzahl Threads.

Das ist auch genau die Formel, die x264 benutzt wenn man threads auto einstellt.
Ansonsten einfach mal ausprobieren, ab welcher Anzahl Threads die CPU komplett ausgelastet ist.

http://forum.doom9.org/showthread.php?t=136663&highlight=threads

Gast
2008-09-09, 18:52:18
Beim Xvid Codec bspw. kann die Anzahl der Threads manuell eingestellt werden und ich frage mich nun ob es generell besser ist die Anzahl der Threads mit der Anzahl der Verfügbaren Cores gleichzusetzen.

Ich verwende einen E8400 der ja pro Core 'bis zu' 4 Befehle gleichzeitig abarbeiten soll bzw. einzelne Teile der Pipeline sollen dies können.ich glaube jetzt verwechselst du was. Es gibt in modernen Prozessoren zwei Stufen der Parallelisierung:

- einmal das Vorhandensein zweier oder mehrerer Kerne. Um dieses auszunutzen, braucht es mehrere Threads.

- andererseits Superskalarität und Pipelining innerhalb eines Kerns, was es auch schon bei Einkernprozessoren - seit dem Pentium 1 glaube ich - gab. Hier bringt dir Multithreading nicht viel (Ausnahme: Pentium 4 HT), da kümmert sich der Prozessor durch Sachen wie Out-Of-Order-Execution selbst drum.

Du kannst dir das auch so vorstellen: der erstere Fall ist eine Parallelität im großen, da laufen ganze Operationssequenzen (=Threads) parallel ab, der zweitere Fall eine Parallelität nur im kleinen, da werden nur einzelne Operationen parallelisiert.

Phantom1
2008-09-09, 19:25:25
Phantom, ich zeichne nur Sachen von meiner TV Karte auf und da ist es schwer 2x hintereinander das selbe Video zu bekommen ;)
nimm doch einfach ein beliebiges video was du bereits auf deiner platte hast und wandle das mit einem programm um, da kannste es doch genauso sehen was schneller ist