Mehrkernoptimierung in Wolfenstein 2 mit Hunderten von Fps | PCGH Raw & Uncut

AW: Mehrkernoptimierung in Wolfenstein 2 mit Hunderten von Fps | PCGH Raw & Uncut

Wenn man sich die Average Werte anschaut, sind das rund 5% Unterschied. Ohne die Mehrkernoptimierung müsste der Ryzen deutlich weiter zurückliegen. Ich habe zum Schluss mit 4,2GHz gemessen. JackTheHeros 7700k läuft mit 4,8Ghz und hat ca. 5% mehr IPC. Die Kerne haben sozusagen bis auf die IPC den Takt wieder wett gemacht. Finde ich zwar nicht überwältigend, aber dennoch gut. Wie sich jetzt die unterschiedlichen Grafikkarten auswirken, weiß ich nicht...

Machs doch einfach mit OCAT und dann eben FLAT. Dann haste die Grafik wie ich. Viel genauer und komfortabler.

Schau' ich mir demnächst mal an!

Edit:
Mit welcher Rate sampelst du? Wenn ich 250ms einstelle, dann geht das übelst auf die Performance. Ich habe mal gehört, dass Ryzen ohnehin nicht gut mit Monitoring Tools klar kommt, weil die in den Event Timer reinfuschen.
 
Zuletzt bearbeitet von einem Moderator:
AW: Mehrkernoptimierung in Wolfenstein 2 mit Hunderten von Fps | PCGH Raw & Uncut

Da musste einfach nur sprinten, wenn ich das richtig in Erinnerung hab.

Ich sprinte hin und wollte in die schließende Luke reinspringen und stürze ab. Jetzt habe ich einfach vor der geschlossenen Luke gewartet und danach hat Anya die Luke wieder aufgemacht. Vielleicht habe ich mich auch nur selten dämlich angestellt.
 
AW: Mehrkernoptimierung in Wolfenstein 2 mit Hunderten von Fps | PCGH Raw & Uncut

Ich hab 500 ms eingestellt in HWinfo und AB. war ja vorher kein Problem. Muss mit Treiber zusammenhängen oder irgendwie mit RTSS. Macht aber nichts, auch wenn ich GPU Power nicht überwache, dann hab ich diese kleinen Spikes. Muss fast schon eher an AB liegen oder so..

Wenn ich HWinfo ausschalte, dann geht es. Alles andere spielt keine olle und die Spikes sind immer da.

NewColossus_x64vk_2017_11_12_16_49_45_745.jpg NewColossus_x64vk_2017_11_12_16_51_07_980.jpg NewColossus_x64vk_2017_11_12_16_53_42_094.jpg
 
Zuletzt bearbeitet:
AW: Mehrkernoptimierung in Wolfenstein 2 mit Hunderten von Fps | PCGH Raw & Uncut

Liegt tatsächlich am Treiber. 388.00 installiert und die Spikes sind weg.
 
AW: Mehrkernoptimierung in Wolfenstein 2 mit Hunderten von Fps | PCGH Raw & Uncut

Einfach die Thread-Affinität ändern ist kein besonders guter Test, weil dadurch wesentlich mehr Context-Switches erzwungen werden. Die Engine erzeugt immer noch 8 Worker-Threads, die sich dann um die 4 Cores streiten.
 
AW: Mehrkernoptimierung in Wolfenstein 2 mit Hunderten von Fps | PCGH Raw & Uncut

Einfach die Thread-Affinität ändern ist kein besonders guter Test, weil dadurch wesentlich mehr Context-Switches erzwungen werden. Die Engine erzeugt immer noch 8 Worker-Threads, die sich dann um die 4 Cores streiten.

Meinst du wirklich Context Switches? Wie soll das passieren, wenn der Threadpool der Anwendung der gleiche ist? Ist es nicht eher das Problem, dass ein Thread nicht als busy deklariert wird und mit Tasks belastet wird, obwohl der Scheduler keinen freien Kern hat und Thread daher erstmal in den Queue packt? Push und dequeue ist doch kein Context Switching...
 
Zuletzt bearbeitet von einem Moderator:
AW: Mehrkernoptimierung in Wolfenstein 2 mit Hunderten von Fps | PCGH Raw & Uncut

Ja, context switches. Zwischen 8 worker threads, die erzeugt werden obwohl der OS-Kernel nur auf vier Cores scheduled. Die Affinity zu aendern ist kein guter Test. Das einzig wirklich brauchbare ist die Cores wenn moeglich im BIOS zu deaktivieren.

Der OS-Kernel weiss nichts ueber die Threads und macht relativ faires time slicing. Und wenn auf einem Core von einem Worker-Thread auf den anderen umgeschalten wird ist das ein Context-Switch. Dauerte zig tausend Takte und wirft dir den Cache moeglicherweise aus dem Fenster.
 
AW: Mehrkernoptimierung in Wolfenstein 2 mit Hunderten von Fps | PCGH Raw & Uncut

Ok, danke für die Info. Was ich mich frage, wie der Kernel die Aufgaben aufteilt, wenn er nichts von Threads weiß. Welche Abstraktion ist denn nach außen bekannt, ausgehend von der Anwendung? Außerdem, wie soll es zu Kontext Switches kommen, wenn Threads die gleiche Priorität haben?

Außerdem wenn stets gleiche Slices gebildet werden, würde das ja zu extrem vielen Context Switches führen. Eigentlich müsste das was Dynamisches sein mit einer gewissen Intelligenz...
 
Zuletzt bearbeitet von einem Moderator:
AW: Mehrkernoptimierung in Wolfenstein 2 mit Hunderten von Fps | PCGH Raw & Uncut

Normalerweise gibts einen Mainthread der die Workerthreads startet. Um die einzelnen Threads kümmert sich dann der OS-Scheduler. (Verteilung auf Kerne, priorität usw). Der Mainthread müsste auch die Vermittlung zwischen den einzelnen Threads übernehmen.

Wie sich das aber alles auf die Context-Switches auswirkt, weiß ich nicht.
 
AW: Mehrkernoptimierung in Wolfenstein 2 mit Hunderten von Fps | PCGH Raw & Uncut

Ich werde das am Wochenende auf jeden Fall mal in Ruhe testen. Das ist ein interessantes Thema.
 
AW: Mehrkernoptimierung in Wolfenstein 2 mit Hunderten von Fps | PCGH Raw & Uncut

Wenn du mehr Threads am laufen hast als Kerne hast du zwangslaeufig context switches alle paar hundert Microsekunden. Stichwort Preemtive Multitasking.
 
AW: Mehrkernoptimierung in Wolfenstein 2 mit Hunderten von Fps | PCGH Raw & Uncut

Wenn du mehr Threads am laufen hast als Kerne hast du zwangslaeufig context switches alle paar hundert Microsekunden. Stichwort Preemtive Multitasking.

Hm, das bezieht sich aber auf Prozesse. Man muss doch zwischen "Process" und "Thread" unterscheiden. Es geht doch aber um die Threads innerhalb eines Prozesses. Inwiefern ist dann eine Prozess-Slicing-Strategie relevant?
 
AW: Mehrkernoptimierung in Wolfenstein 2 mit Hunderten von Fps | PCGH Raw & Uncut

Meine übliche Betrachtungsweise

Eingebundener Inhalt
An dieser Stelle findest du externe Inhalte von Youtube. Zum Schutz deiner persönlichen Daten werden externe Einbindungen erst angezeigt, wenn du dies durch Klick auf "Alle externen Inhalte laden" bestätigst: Ich bin damit einverstanden, dass mir externe Inhalte angezeigt werden. Damit werden personenbezogene Daten an Drittplattformen übermittelt.
Für mehr Informationen besuche die Datenschutz-Seite.

Sorry für das Starren auf die Tür, aber ich hab noch keine wirklich übel CPU-Limitierte Stelle gefunden :-)
 
AW: Mehrkernoptimierung in Wolfenstein 2 mit Hunderten von Fps | PCGH Raw & Uncut

Hm, das bezieht sich aber auf Prozesse. Man muss doch zwischen "Process" und "Thread" unterscheiden. Es geht doch aber um die Threads innerhalb eines Prozesses. Inwiefern ist dann eine Prozess-Slicing-Strategie relevant?
Nein, fuer den Kernel ist das das selbe. Ein Thread ist nichts anderes als ein Prozess der (bis auf TLS) den selben Speicherraum wie der erzeugende Prozess hat. Wenn du mehr Threads als Cores hast (egal von welchen Prozessen sie kommen) hast du time slicing und context switches.

Wenn ein Prozess 100 threads erzeugt und sie alle nicht schlafen, dann muessen sie ja irgendwie an die Reihe kommen. Der Kernel kann ja nicht einfach manche nicht ausfuehren. Und nein, Threads sind auch nicht kooperatives Multitasking.
 
AW: Mehrkernoptimierung in Wolfenstein 2 mit Hunderten von Fps | PCGH Raw & Uncut

Sorry, das kann nicht dasselbe sein, allein schon, weil ein Prozess einen Speicherraum definiert, innerhalb dessen die Threads "leben". Der Kernel muss zwischen Threads unterschiedlicher Prozesse unterscheiden, um Speicherzugriffsverletzungen zu verhindern. Außerdem muss der Scheduler als Teil des Kernels Scheduling-Strategien anwenden können, um abhängige Threads geschickt gruppieren zu können (CCX Modul eines Zen Dies, Dual Socket Systeme). Der Kernel muss also, wenigstens implizit durch eine Markierung, zwischen Threads unterschiedlicher Prozesse unterscheiden können. Es spricht eher dafür, dass der Kernel mit Threads als Ausführungseinheit agiert und zusätzlich Kenntnisse der Prozesse besitzt. Eine Internetrecherche hat zudem ergeben, dass man zwischen Thread und Prozess/Task Context Switches unterscheidet. Aber letzlich hast du natürlich Recht. Je mehr Threads man gleichzeitig ausführen will bei gleicher Kernzahl, desto mehr Context Switches gibt es, was Performance kostet.

Hier noch ein Beitrag (multithreading - What is the difference between a process and a thread? - Stack Overflow) von Stack Overflow:

Process
Each process provides the resources needed to execute a program. A process has a virtual address space, executable code, open handles to system objects, a security context, a unique process identifier, environment variables, a priority class, minimum and maximum working set sizes, and at least one thread of execution. Each process is started with a single thread, often called the primary thread, but can create additional threads from any of its threads.


Thread
A thread is an entity within a process that can be scheduled for execution. All threads of a process share its virtual address space and system resources. In addition, each thread maintains exception handlers, a scheduling priority, thread local storage, a unique thread identifier, and a set of structures the system will use to save the thread context until it is scheduled. The thread context includes the thread's set of machine registers, the kernel stack, a thread environment block, and a user stack in the address space of the thread's process. Threads can also have their own security context, which can be used for impersonating clients.

Und von Microsoft (MSDN Content Issue);

Microsoft Windows supports preemptive multitasking, which creates the effect of simultaneous execution of multiple threads from multiple processes. On a multiprocessor computer, the system can simultaneously execute as many threads as there are processors on the computer.

Ich habe hier noch ein paar Tests gemacht: [Info] Multithread-Test Wolfenstein II Threadripper 1950X

Edit: Falls du der Axel von id Software bist, habe ich mal ein paar Fragen an dich. Welche Vorteile hat es eigentlich, dass die Engine die Last so gleichmäßig auf die Kerne verteilt? Sind die Threads zumeist unabhängig? Wenn nein, was wird geteilt? Oder sind das nur "billige" Sync-Flags? Verwendet ihr das async/await Pattern? Wie kann man die Anzahl der Threads in Wolfenstein II selbst setzen?
 
Zuletzt bearbeitet von einem Moderator:
AW: Mehrkernoptimierung in Wolfenstein 2 mit Hunderten von Fps | PCGH Raw & Uncut

Ich hab dir doch gesagt, dass der einzige Unterschied ist wie der Addressraum gemapt ist. Der Scheduler arbeitet auf Threads, nicht auf Prozessen. Jeder Prozess hat automatisch einen Haupt-Thread beim erzeugen, der ist ansonsten aber nicht besonders.

Du brauchst mir eigentlich auch wirklich nicht erklaeren was Threads und Prozesse sind.

Edit: Falls du der Axel von id Software bist, habe ich mal ein paar Fragen an dich. Welche Vorteile hat es eigentlich, dass die Engine die Last so gleichmäßig auf die Kerne verteilt?
Gegenfrage: Welchen Nachteil hat es? Das Ziel ist es die Arbeit so bald wie moeglich abzuarbeiten und die CPUs nehmen sie halt so schnell wie sie koennen.

Sind die Threads zumeist unabhängig? Wenn nein, was wird geteilt? Oder sind das nur "billige" Sync-Flags? Verwendet ihr das async/await Pattern? Wie kann man die Anzahl der Threads in Wolfenstein II selbst setzen?
Jobs mit Thread-Pool, wie jede andere grosse Engine. Ein Thread pro virtuellem CPU-Kern. Es gibt auch noch einen Main-Thread aus historischen Gruenden, aber der verschwindet auch bald.
 
Zuletzt bearbeitet:
Zurück