Mr. Zet
Vereinsmitgliedresident spacenerd
|
Es ist auch ein ziemlicher no-brainer, dass 4 Threads, jeder auf einem Core, deutlich schneller sind als wenn diese 4 Threads lustig über alle 4 Cores hüpfen.
Natürlich wäre es wünschenswert, wenn der Scheduler so etwas optimal löst. Aber woher soll der denn Wissen, ob es für einen arbeitsintensiven Thread besser wäre bei einer Unterbrechung zu warten oder auf einen anderen Core transferiert zu werden?
|
PIMP
ElderElder
|
Das ut99 problem mit der verzögerung auf moderner hardware lässt sich btw nicht immer mit affinity lösen (xp/fista/7). Selbes spiel unter osx läuft 1a auf einem c2d (rosetta).
|
Mr. Zet
Vereinsmitgliedresident spacenerd
|
Hab ich doch eh geschrieben
|
Chrissicom
Rise of the Ryzen
|
Es ist auch ein ziemlicher no-brainer, dass 4 Threads, jeder auf einem Core, deutlich schneller sind als wenn diese 4 Threads lustig über alle 4 Cores hüpfen. Das sehe ich anders. Es ist durchaus realistisch anzunehmen, dass es möglich ist 4 Threads die maximale Last auf einem Core verursachen und erst durch User Interaktion beendet werden zu erkennen. Wenn man nur einen einzigen dieser x264 Threads ohne MT ausführt, wechselt er die Cores auch (egal ob Linux oder Windows) und das ist einfach nicht nötig... wozu? Na ja, nächstes Semester höre ich Betriebssysteme, da werde ich dann tiefer in Scheduler einsteigen
|
COLOSSUS
AdministratorGNUltra
|
Das ist keineswegs immer so - CPUtime ist nicht die einzige Resource, die ein Scheduler im Auge behalten muss. Disk-IO ist z. B. eine Sache, auf NUMA-Systemen aber auch die Speicherlokalitaet (das kann der "vanilla" Linux-Scheduler z. B. noch nicht richtig, afaik).
Zu behaupten, es waere fuer die Anwendungsperformance grundsaetzlich besser, Affinitaet fuer einen Prozess auf einen Kern festzulegen, ist jedenfalls einfach falsch.
|
Ringding
Pilot
|
Klar ist's langsamer, wenn ein Task zwischen Cores herumhüpft. Aber das passiert typischerweise vielleicht ein paar Mal pro Sekunde, und das ist wirklich nicht spürbar. Wenn es 20% Performance-Einbruch gibt, dann muss da irgendwas richtig im Argen sein.
|
stevke
in the bin
|
Zu behaupten, es waere fuer die Anwendungsperformance grundsaetzlich besser, Affinitaet fuer einen Prozess auf einen Kern festzulegen, ist jedenfalls einfach falsch. Er hat ja auch nicht geschrieben das es grundsätzlich besser ist, sondern wenn er 4 x264 Videos gleichzeitig encoden will ist das manuelle setzen performanter.
|
Maekloev
linux addicted
|
ich sags mal so: threads sind verglichen zu prozessen sehr leicht-gewichtig. nicht umsonst werden sie auch so bezeichnet. d.h. im klartext: wenn es sich im beispiel oben mit den 4 threads um vier prozesse handeln würde, dann würde ich das problem noch einigermaßen nachvollziehen können. bei threads geht der context switch bedeutend schneller vonstatten, da viele strukturen nicht gesichert werden müssen, da sie ja ohnehin geshared werden. es macht also bei 4 cores keinen _wesentlichen_ unterschied, ob du jetzt einen prozess auf 4 threads oder auf 100 aufteilst. erst im (wesentlich) höherstelligen bereich wirds dann schon spürbar, dass der scheduler mehr mit dem verteilen von threads, als mit dem eigentlichen arbeiten aktiv ist. ein paar infos dazu gibts auf den angehängten vorlesungsfolien zu diesem thema (s. p. 40ff).
wie hast du die zeiten gemessen? 30% find ich dann schon etwas sehr viel.
|
Ringding
Pilot
|
Ich möchte das zwar jetzt nicht mit Sicherheit behaupten, aber ich glaube zu wissen, dass die Zeit für einen Context-Switch zumindest bei x86/x86_64 bei einem Prozess-Switch nicht wesentlich höher ist als bei einem Thread-Switch. Aber darum geht’s auch überhaupt nicht. Die paar Context Switches, die bei langlaufenden CPU-intensiven Prozessen passieren – höchstens ein paar hundert pro Sekunde, typischerweise weit weniger – machen das Kraut nicht wirklich fett.
|
Chrissicom
Rise of the Ryzen
|
@Maekloev Ok, wenn man es genau nimmt, dann sind es 4 x264 Prozesse und diese Prozesse starten logischerweise Threads. Es ist nicht ein x264 Prozess, der 4 Threads startet, falls meine Aussage so aufgefasst wurde. Das sollte in der Tat deutlich effizienter sein! Ich überlege mir grad wie man das vergleichen könnte. 1* 1 Stunde WVC-1 nach H.264 encoden mit 1 Prozess in 4 Threads (x264 ist ja an sich MT fähig) und dann die gleiche 1 Stunde in 4* 15 Minuten WVC-1 splitten und nach H.264 encoden und dann mit 4 Prozessen die je 1 Thread starten arbeiten. Mal schauen ob es da einen Unterschied gibt, werd ich aber erst nächste Woche machen. Im Moment muss ich paar Datenbank Benchmarks unter Ubuntu für die Uni machen  wie hast du die zeiten gemessen? 30% find ich dann schon etwas sehr viel. Ich hab keine genauen Daten notiert, da ich es nicht als Benchmark ausgeführt hab. Ich hab einfach getestet auf welche Weise ich am schnellsten viele WVC-1 Videos nach H.264 konvertieren/encoden kann und mir die verstrichene Zeit angeschaut. Ich gebe zu das es durch unterschiedliches Input Material zu Abweichungen kommen kann, dass die so groß sind kann ich mir aber nicht vorstellen. Wie gesagt ich schau es mir nochmal genauer an.
Bearbeitet von Chrissicom am 03.11.2009, 21:55
|
johnny1981
Little Overclocker
|
Hier ist eine recht interessante Maske der process Affinity, die ich von einem multiboxing guide kopiert habe.
╔══════╦════════╤════════╤════════╤════════╗
║ Mask ║ Core 1 │ Core 2 │ Core 3 │ Core 4 ║
╠══════╬════════╪════════╪════════╪════════╣
║ 1 ║ ██ │ ░░ │ ░░ │ ░░ ║
╟──────╫────────┼────────┼────────┼────────╢
║ 2 ║ ░░ │ ██ │ ░░ │ ░░ ║
╟──────╫────────┼────────┼────────┼────────╢
║ 3 ║ ██ │ ██ │ ░░ │ ░░ ║
╟──────╫────────┼────────┼────────┼────────╢
║ 4 ║ ░░ │ ░░ │ ██ │ ░░ ║
╟──────╫────────┼────────┼────────┼────────╢
║ 5 ║ ██ │ ░░ │ ██ │ ░░ ║
╟──────╫────────┼────────┼────────┼────────╢
║ 6 ║ ░░ │ ██ │ ██ │ ░░ ║
╟──────╫────────┼────────┼────────┼────────╢
║ 7 ║ ██ │ ██ │ ██ │ ░░ ║
╟──────╫────────┼────────┼────────┼────────╢
║ 8 ║ ░░ │ ░░ │ ░░ │ ██ ║
╟──────╫────────┼────────┼────────┼────────╢
║ 9 ║ ██ │ ░░ │ ░░ │ ██ ║
╟──────╫────────┼────────┼────────┼────────╢
║ 10 ║ ░░ │ ██ │ ░░ │ ██ ║
╟──────╫────────┼────────┼────────┼────────╢
║ 11 ║ ██ │ ██ │ ░░ │ ██ ║
╟──────╫────────┼────────┼────────┼────────╢
║ 12 ║ ░░ │ ░░ │ ██ │ ██ ║
╟──────╫────────┼────────┼────────┼────────╢
║ 13 ║ ██ │ ░░ │ ██ │ ██ ║
╟──────╫────────┼────────┼────────┼────────╢
║ 14 ║ ░░ │ ██ │ ██ │ ██ ║
╟──────╫────────┼────────┼────────┼────────╢
║ 15 ║ ██ │ ██ │ ██ │ ██ ║
╚══════╩════════╧════════╧════════╧════════╝
|
Ringding
Pilot
|
Ah, hier hat jemand das Binärsystem entdeckt…
|
Mr. Zet
Vereinsmitgliedresident spacenerd
|
Ah, hier hat jemand das Binärsystem entdeckt… Made my Day!
|
johnny1981
Little Overclocker
|
hättest ja vorher hinweisen können, wie sich die nummer der process affinity ergibt.
ich helf dagegen wenigstens.
|
sk/\r
i never asked for this
|
Aha, wusste nicht, dass das auch vom Prozessor so stark beeinflusst wird. Ich kann nur sagen, dass es mit Athlon 64 X2 (3800+) weder mit WinXP, noch mit Win7 geht.
Es hängt fest, rennt im Anschluss super schnell, quasi Zeitraffer, bis wieder der Punkt erreicht wurde, wo man eigentlich gerade sein sollte, und das ganze wiederholt sich sogleich von vorne.
Auf einen Core beschränken und es geht problemlos (meistens jedenfalls)... 1) leider erst jetzt gelesen.  nein. auf einen core beschränken hat bei mir nicht geholfen und ja es lief auch auf meinem a64 schon zu schnell. 2) problemlösung: click here <= angefügte opengl datei ins system verzeichniss von ut, to (jedes game dass halt die erste ue nutzt) kopieren. wurde von fans geschrieben iirc. jeweiliges spiel mit opengl starten. tab (console) => preferences => rendering => opengl => frame limit auf zB 100 setzen. dann gibts weder zeitraffer noch zeitlupen momente. nachdem ich selbst noch immer begeisterter ut und to zocker bin, weiß ich wovon ich hier spreche. hth
|