Bedarfserhebung: "Zukunftssicherer" x265 Benchmark

  • Ah, und noch was: Zur NUMA-Geschichte: Das platzt, hutze. Grund ist, daß ich jetzt Statements von einem x265 Kernentwickler (Herrn Pradeep Ramachandran) bekommen habe, die klarstellen, daß dieses Verhalten zumindest unter Linux leider bekannt ist, also der Leistungsverlust beim Splitten von NUMA Pools. So gesehen ist der NUMA Support leistungstechnisch komplett sinnlos. Allerdings habe ich auch gelernt, daß man unter allen 64-bit Betriebssystemen nie mehr als 64 CPUs pro Prozess nutzen kann, es sei denn man erzeugt Prozessgruppen und/oder NUMA Pools. Für 32-bit sind's 32 CPUs. S.u.

    Unter Windows gibt es das zusätzliche Problem, daß man bei aktivem NUMA scheinbar keinen Prozeß starten kann, der Threads über ALLE Numa Knoten (=Sockel!) spawned.

    Hier muß eine Applikation also Threadgruppen bzw. NUMA Pools erzeugen. In jedem "Pool" gibt es einen separaten 32/64 Bits breiten Bitvektor, der die entsprechende Anzahl von CPUs innerhalb des Pools ansprechen kann. Darüber existiert ein weiterer Adressierer, der individuelle Pools bzw. Threadgruppen anspricht. Weil's im Pool ein Bitvektor ist, heißen 64 Bit hier eben nicht 264, sondern wirklich genau 64.

    Die x265 Entwickler MUSSTEN also NUMA Pools unterstützen, um in der Zukunft überhaupt mehr als 64 CPUs ansprechen zu können, bzw. auf Windows auch, um überhaupt mehrere Sockel auf NUMA Systemen ansprechen zu können.

    Laut Entwickler trifft x265 hierbei immer die bestmögliche Entscheidung, also NUMA Pools immer auf Windows, und niemals auf Linux, es sei denn es sind zuviele CPUs da, und es geht nicht mehr ohne.

    Soviel dazu. Werde in diesem Bereich also NICHT eingreifen, mit Ausnahme von Haiku OS, weil dort muß ich, weil die Detektion der CPU Anzahl fehlschlägt.

    1-6000-banner-88x31-jpg

    Stolzer Besitzer eines 3dfx Voodoo5 6000 AGP Prototypen:

    • 3dfx Voodoo5 6000 AGP HiNT Rev.A-3700

    [//wp.xin.at] - No RISC, no fun!

    QotY: Girls Love, BEST Love; 2018 - Lo and behold, for it is the third Coming; The third great Year of Yuri, citric as it may be! Edit: 2019 wasn't too bad either... Edit: 2020... holy crap, we're on a roll here~♡!

    Quote Bier.jpg@IRC 2020: "Je schlimmer der Fetisch, desto besser!"

  • Das ist mal krankes Zeug :spitze:

    Gibts jetzt eigentlich eine aktuellere Beta, die man mal durchjagen könnte, oder bist da noch beim Feintuning der Videosettings? Du hattest ja mal irgendwo einen Link zu deinem FTP gepostet, könntest den im Startpost mit eintragen?

  • 666psycho: Am FTP liegen aktuell keine Public Releases, die nicht im ersten Post wären, deswegen steht er (noch!) nicht drin. Kommt noch. Und jo, die Settings sind noch nicht optimal angepaßt!

    Ich habe aktuell ein wenig Zeit für macOS Sierra verbraten, hier funktionierte der Bootstrapper super (langsam, weil noch nicht viele Binärpakete in Homebrew, aber er hat alles fehlende super nachkompiliert, dauert nur etwas). Der eigentliche Benchmark jedoch hat Schwächen in meiner Apple Unterstützung (und enorme Seltsamkeiten in Mac OS X' Speicherverwaltung) aufgedeckt.

    Das hat etwas Zeit gekostet, aber Mac OS X / macOS ist das zweite große, kommerzielle Desktop OS, daher wollte ich neben Windows 10 halt auch Sierra unterstützt wissen, auch wenn ich persönlich die Nutzung beider Betriebssysteme nur wenig gutheiße. Unterstützt gehören's trotzdem.

    Grindhavoc: Hier sind logische CPUs gemeint, es zählen also auch HT/SMT CPUs. Sprich: 32 echte Kerne mit HT = 64, und er "steht an". Das bedeutet eine Reihe von Dingen (nicht nur für x265 übrigens, aber eben auch dafür):

    • Der "klassische" XP x64 / Vista x64 / Server 2008 x64 Build für Windows kann nicht mit mehr als 64 logischen CPUs umgehen. Aus, Ende. Mit etwas Pech gehen sogar nur 32, je nach Implementierung in Windows, das weiß ich noch nicht so genau.
    • Der Build für alles andere außer Windows und Linux (FreeBSD/OpenBSD/NetBSD/DragonFly BSD/TrueOS/NetBSD UNICES, Mac OS X/macOS, Solaris und Haiku OS) kann NUMA genauso wenig, auch WENN diese Betriebssysteme sowas prinzipiell können sollten, Beispiel Solaris. x265 wird diese Implementierungen nach aktuellen Erkenntnissen niemals unterstützen, womit auch diese Systeme bei 64 CPUs ihr Ende finden dürften. Soweit ich das sehe gleicht es einem Wunder, daß ich x265 überhaupt so "leicht" drauf adaptieren konnte, viele dieser Systemen waren komplett ungetestet und absolut nicht unterstützt.
    • Bitte installiert die NUMA Libraries auf Linux, wenn ihr Manycore habt.
    • Fazit: Nur >=Windows 7, >=Server 2008 R2 und Linux mit libnuma können den Benchmark auf >64 logische CPUs hochskalieren, so wie ich das aktuell verstehe!


    Edit 21:46: Ich habe immer noch NULL Support für RISC/VLIW drin. :(

    1-6000-banner-88x31-jpg

    Stolzer Besitzer eines 3dfx Voodoo5 6000 AGP Prototypen:

    • 3dfx Voodoo5 6000 AGP HiNT Rev.A-3700

    [//wp.xin.at] - No RISC, no fun!

    QotY: Girls Love, BEST Love; 2018 - Lo and behold, for it is the third Coming; The third great Year of Yuri, citric as it may be! Edit: 2019 wasn't too bad either... Edit: 2020... holy crap, we're on a roll here~♡!

    Quote Bier.jpg@IRC 2020: "Je schlimmer der Fetisch, desto besser!"

    3 Mal editiert, zuletzt von GrandAdmiralThrawn (24. Mai 2017 um 21:40)

  • Ich finde das richtig heftig die Arbeit und zeit die du Investierst! Und beobachte es mit großen Interesse auch aus dem Urlaub heraus. Logge mich halt auf dem Server ein und dann hier auf die HP. Mit Gewohnten Desktop arbeiten ist schon schön und hat seinen wert. Und mit meinen 2 PCs können wir auch einen richtig guten Leistungsunterschied test machen. Da nur die CPUs unterschiedlich sind.

  • Hmm, Arbeit ist wie Streß: Distress und Eustress. Es gibt eben zwei Arten: Die, die du machen mußt, und die die du machen willst!

    Die, die du machen willst, fühlt sich nicht Mal wie Arbeit an, sondern wie Spaß! ;) So gesehen ist die Zeit auch kein Verlust. ;)

    1-6000-banner-88x31-jpg

    Stolzer Besitzer eines 3dfx Voodoo5 6000 AGP Prototypen:

    • 3dfx Voodoo5 6000 AGP HiNT Rev.A-3700

    [//wp.xin.at] - No RISC, no fun!

    QotY: Girls Love, BEST Love; 2018 - Lo and behold, for it is the third Coming; The third great Year of Yuri, citric as it may be! Edit: 2019 wasn't too bad either... Edit: 2020... holy crap, we're on a roll here~♡!

    Quote Bier.jpg@IRC 2020: "Je schlimmer der Fetisch, desto besser!"

  • @GAT ist das hier normal? Ich habe im Taskmanager mal die Anzeige auf Numa geändert.

    Es scheinen mir immer nur 2 Numa Nodes gleichzeitig zu laufen. (Alpha 5, mit 2 x Opteron 6234, davon hat ja jeder 2 Nodes)

    [Blockierte Grafik: http://www.bilder-upload.eu/thumb/f42d7a-1497024023.jpg]

    Edit, ab so ca. 70 Frames scheint er doch alle 4 Nodes auszulasten.
    Edit 2 ich sehe gerade, ich hätte die Beta 1 laden sollen, das benche ich denn Morgen nochmal, Alpha 5 läuft gerade.

    2 Mal editiert, zuletzt von Maniac81 (9. Juni 2017 um 19:51)

  • Mir ist nicht ganz klar, warum du überhaupt 4 NUMA Knoten haben sollst?! Macht das in irgendeiner Form Sinn? Weil normal hast lokalen RAM ja pro Sockel.. Oder sind da zwei komplett getrennte Dies mit getrennten Speichercontrollern in jeder CPU, und die müssen selber über Hypertransport miteinander reden, anstatt direkt?

    1-6000-banner-88x31-jpg

    Stolzer Besitzer eines 3dfx Voodoo5 6000 AGP Prototypen:

    • 3dfx Voodoo5 6000 AGP HiNT Rev.A-3700

    [//wp.xin.at] - No RISC, no fun!

    QotY: Girls Love, BEST Love; 2018 - Lo and behold, for it is the third Coming; The third great Year of Yuri, citric as it may be! Edit: 2019 wasn't too bad either... Edit: 2020... holy crap, we're on a roll here~♡!

    Quote Bier.jpg@IRC 2020: "Je schlimmer der Fetisch, desto besser!"

  • Bei den Interlagos CPUs sollten (so weit ich mich erinnern kann) 2 Dies auf einer CPU sein, so dass es mit 4 Nodes hinkommt.
    Im Bios kann ich mir auch Informationen für 4 Nodes ansehen.

  • Ok, macht Sinn. Antwort habe ich aber auf die prinzipielle Frage keine. Es sollten die gesamten CPUs ausgelastet werden, mit 32 Kernen unter Linux hat das auch vorzüglich funktioniert. Da ist auch (für Windows) kein besonderer Hickhack drinnen soweit ich das jetzt im Kopf habe, also das sollte x265 Standardverhalten sein. 24 Kerne wären eigentlich ein Klacks, wenn sich 32 schon so fein ausfahren lassen.

    ?(

    1-6000-banner-88x31-jpg

    Stolzer Besitzer eines 3dfx Voodoo5 6000 AGP Prototypen:

    • 3dfx Voodoo5 6000 AGP HiNT Rev.A-3700

    [//wp.xin.at] - No RISC, no fun!

    QotY: Girls Love, BEST Love; 2018 - Lo and behold, for it is the third Coming; The third great Year of Yuri, citric as it may be! Edit: 2019 wasn't too bad either... Edit: 2020... holy crap, we're on a roll here~♡!

    Quote Bier.jpg@IRC 2020: "Je schlimmer der Fetisch, desto besser!"

  • Es ist nicht ganz abnormal, daß es eine Zeit dauert bis er Gas gibt. Das liegt daran, daß es braucht, bis der Input Buffer gefüllt ist. Am Anfang baut sich der erst Mal eine Weile auf, und in dieser Phase bleibt die Last geringer. Das konnte ich auch am 32-CPU System unter Linux so beobachten. Nach einer Zeit ist der Buffer prall gefüllt, und dann geht's erst richtig los. Das muß ich so auch noch in der Readme vermerken.

    1-6000-banner-88x31-jpg

    Stolzer Besitzer eines 3dfx Voodoo5 6000 AGP Prototypen:

    • 3dfx Voodoo5 6000 AGP HiNT Rev.A-3700

    [//wp.xin.at] - No RISC, no fun!

    QotY: Girls Love, BEST Love; 2018 - Lo and behold, for it is the third Coming; The third great Year of Yuri, citric as it may be! Edit: 2019 wasn't too bad either... Edit: 2020... holy crap, we're on a roll here~♡!

    Quote Bier.jpg@IRC 2020: "Je schlimmer der Fetisch, desto besser!"

  • Ok, denn ist ja alles OK.

    Edit Hier das Ergebnis mit Alpha 5:

    7:31:37.053 | Maniac81 | 2/12/12 | Opteron 6234 2,40Ghz| Asus KGPE-D16 | AMD SR5690 | 64GB DDR ECC Reg 1333 | Win 8.1 x64 Prof.

    Beta 1 läuft gerade

    Edit2 hier das Ergebnis der Beta1

    7:31:16.326 | Maniac81 | 2/12/12 | Opteron 6234 2,40Ghz| Asus KGPE-D16 | AMD SR5690 | 64GB DDR ECC Reg 1333 | Win 8.1 x64 Prof.

    2 Mal editiert, zuletzt von Maniac81 (10. Juni 2017 um 14:51)

  • Sry für den Doppelpost. Hier das X265 Ergebnis mit den beiden Opteron 6282 SE:

    04:17:24.422| Maniac81 | 2/16/16 | Opteron 6282SE 2,60Ghz | Asus KGPE-D16 | AMD SR5690 | 64GB DDR ECC Reg 1333 | Win 8.1 x64 Prof.

    Ist schon ne krasse Steigerung zu den beiden 6234, so viel hätte ich nicht gedacht!

  • Das legt nahe, daß der x265er im Vergleich zum alten x264er Test in der Tat besser (=also so wie es sich gehört) skaliert, und die 32 Kerne nach der "Warmlaufphase" auch wirklich hinreichend belastet.

    Hast vielleicht hin und wieder im Taskmanager zugeschaut, was die CPU Auslastung angeht? Rein aus Neugierde. Ist immerhin die erste 32-Kern Box mit MS Windows auf der des gelaufen ist.

    1-6000-banner-88x31-jpg

    Stolzer Besitzer eines 3dfx Voodoo5 6000 AGP Prototypen:

    • 3dfx Voodoo5 6000 AGP HiNT Rev.A-3700

    [//wp.xin.at] - No RISC, no fun!

    QotY: Girls Love, BEST Love; 2018 - Lo and behold, for it is the third Coming; The third great Year of Yuri, citric as it may be! Edit: 2019 wasn't too bad either... Edit: 2020... holy crap, we're on a roll here~♡!

    Quote Bier.jpg@IRC 2020: "Je schlimmer der Fetisch, desto besser!"

  • Alles klar, dann funktioniert der Windows NUMA Code schon Mal sauber (anders als unter Linux). Das deckt sich dann alles mit den Aussagen der Entwickler. Danke für's Testen!

    1-6000-banner-88x31-jpg

    Stolzer Besitzer eines 3dfx Voodoo5 6000 AGP Prototypen:

    • 3dfx Voodoo5 6000 AGP HiNT Rev.A-3700

    [//wp.xin.at] - No RISC, no fun!

    QotY: Girls Love, BEST Love; 2018 - Lo and behold, for it is the third Coming; The third great Year of Yuri, citric as it may be! Edit: 2019 wasn't too bad either... Edit: 2020... holy crap, we're on a roll here~♡!

    Quote Bier.jpg@IRC 2020: "Je schlimmer der Fetisch, desto besser!"

  • 03:38:20.086| Maniac81 | 2/16/16 | Opteron 6386SE 2,8Ghz | Asus KGPE-D16 | AMD SR5690 | 64GB DDR ECC Reg 1333 | Win 8.1 x64 Prof.

    Das Ergebnis war ich noch schuldig, immerhin auch deutlisch schneller als die beiden 6282 SE!

    Einmal editiert, zuletzt von Maniac81 (31. Oktober 2017 um 16:45)

  • So, nach einem Hiatus von fast einem halben Jahr habe ich mich heute Mal wieder ein wenig in den ganzen Buildprozeß einarbeiten müssen (nicht Mal mehr gewußt wo hinten und vorne ist nach all der Zeit).


    Für's erste einmal ganz langsam wieder reinarbeiten:

    • ALLE: x265 Versionsupdate: 2.4+2-5bc5e73760cd => 2.5+48-bd438ce10843
    • ALLE: Mehrere nicht mehr anwendbare und/oder unnötige Quellcodepatches entfernt[1]
    • WIN64: Microsoft VS2017 VisualC++ Compiler Versionsupdate: 19.10.25019 => 19.11.25547.0
    • ALLE: Benchmarkversionsupdate: 0.2.3 (b3rc) => 0.2.4 (b4rc)
    • ALLE: Keine direkte Ergebnisvergleichbarkeit mit vergangenen Versionen mehr, da neuere x265 Version!

    Diese Beta ist nicht public.


    [1] Rückgängig gemachte Patches:

    source/encoder/encoder.cpp:139 (Framelevel Parallelism, bei aktuellem Quellcode nicht mehr anwendbar)

    Code
    -        if (!p->bEnableWavefront)-            p->frameNumThreads = X265_MIN3(cpuCount, (rows + 1) / 2, X265_MAX_FRAME_THREADS);-        else if (cpuCount >= 32)-            p->frameNumThreads = (p->sourceHeight > 2000) ? 8 : 6; // dual-socket 10-core IvyBridge or higher-        else if (cpuCount >= 16)-            p->frameNumThreads = 5; // 8 HT cores, or dual socket-        else if (cpuCount >= 8)-            p->frameNumThreads = 3; // 4 HT cores-        else if (cpuCount >= 4)-            p->frameNumThreads = 2; // Dual or Quad core-        else-            p->frameNumThreads = 1;+        if (!p->bEnableWavefront)+            p->frameNumThreads = X265_MIN3(cpuCount, (rows + 1) / 2, X265_MAX_FRAME_THREADS);+        else if (cpuCount >= 128) // 64 cores with SMT or 128 cores+            p->frameNumThreads = (p->sourceHeight > 2000) ? 16 : 13;+        else if (cpuCount >= 112) // 56 cores with SMT or 112 cores+            p->frameNumThreads = (p->sourceHeight > 2000) ? 15 : 13;+        else if (cpuCount >= 96)  // 48 cores with SMT or 96 cores+            p->frameNumThreads = (p->sourceHeight > 2000) ? 14 : 12;+        else if (cpuCount >= 80)  // 40 cores with SMT or 80 cores+            p->frameNumThreads = (p->sourceHeight > 2000) ? 13 : 11;+        else if (cpuCount >= 64)  // 32 cores with SMT or 64 cores+            p->frameNumThreads = (p->sourceHeight > 2000) ? 12 : 10;+        else if (cpuCount >= 56)  // 28 cores with SMT or 56 cores+            p->frameNumThreads = (p->sourceHeight > 2000) ? 11 : 9;+        else if (cpuCount >= 50)  // 25 cores with SMT or 50 cores+            p->frameNumThreads = (p->sourceHeight > 2000) ? 10 : 8;+        else if (cpuCount >= 44)  // 22 cores with SMT or 44 cores+            p->frameNumThreads = (p->sourceHeight > 2000) ? 9 : 7;+        else if (cpuCount >= 32)  // 16 cores with SMT or 32 cores+            p->frameNumThreads = (p->sourceHeight > 2000) ? 8 : 6;+        else if (cpuCount >= 24)  // 12 cores with SMT or 24 cores+            p->frameNumThreads = 7; +        else if (cpuCount >= 20)  // 10 cores with SMT or 20 cores+            p->frameNumThreads = 6; +        else if (cpuCount >= 16)  // 8 cores with SMT or 16 cores+            p->frameNumThreads = 5; +        else if (cpuCount >= 12)  // 6 cores with SMT or 12 cores+            p->frameNumThreads = 4; +        else if (cpuCount >= 8)   // 4 cores with SMT or 8 cores+            p->frameNumThreads = 3;+        else if (cpuCount >= 4)   // 2 cores with SMT or 4 cores+            p->frameNumThreads = 2;+        else                      // 1 core with SMT or 1-3 cores+            p->frameNumThreads = 1;

    source/encoder/slicetype.cpp:1815 (Explicit double() Typecasting zwecks Compilerkompatibilität. Nicht mehr nötig, da auf Seiten der x265 Entwickler gefixt.)

    Code
    -                    displacement += sqrt(pow(abs(x), 2) + pow(abs(y), 2));+                    displacement += sqrt(pow((double)abs(x), 2) + pow((double)abs(y), 2));

    source/encoder/encoder.h:36 (Windows/UNIX Typo Fix. Nicht mehr nötig, da auf Seiten der x265 Entwickler gefixt.)

    Code
    -    #include "dynamicHDR10\hdr10plus.h"
    
    
    +    #include "dynamicHDR10/hdr10plus.h"

    1-6000-banner-88x31-jpg

    Stolzer Besitzer eines 3dfx Voodoo5 6000 AGP Prototypen:

    • 3dfx Voodoo5 6000 AGP HiNT Rev.A-3700

    [//wp.xin.at] - No RISC, no fun!

    QotY: Girls Love, BEST Love; 2018 - Lo and behold, for it is the third Coming; The third great Year of Yuri, citric as it may be! Edit: 2019 wasn't too bad either... Edit: 2020... holy crap, we're on a roll here~♡!

    Quote Bier.jpg@IRC 2020: "Je schlimmer der Fetisch, desto besser!"