[Tutorial] Hyperthreading und FSX/ Prepar3D

  • Guten Morgen ^^


    da draußen fällt ja schon wieder dieses komische weiße Zeugs runter ...
    Wir werden noch Ostereier im Schnee suchen.


    Sodele, ... ich hab jetzt wieder eine kleine Testreihe durchgeführt, aber eins nach dem Anderen, da inzwischen glaube ich kaum mehr einer mehr durch den Thread durchsteigt.
    Eine kleine Zusammenfassung dessen, was ich hier nachvollziehen kann:


    AfiinityMask ist eine Maske, ein 8-stelliger Wert, der auch immer Acht Stellen enthält, unabhängig davon, wieviele CPU- Kerne vorhanden sind.


    - Wie eine Schablone, ein Rahmen mit 8 Löchern.
    - Eine 1 bedeutet, man kan hindurchsehen und Daten durchleiten.
    - Eine 0 bedeutet, der Durchgang ist geschlossen.
    - Wird kein AFM-Wert angegeben, ist diese Schablone trotzdem vorhanden, sie hat nur alle acht Türen geöffnet, alle Löcher sind frei.


    - Der AFM, Also der Schablone an sich, ist es egal, ob unter der Schablone ein physikalischer oder ein virtueller oder gar kein Kern steht, es werden immer 8 Luken aufgemcht oder geschlossen.
    Der Rechner ist sich aber im Klaren darüber, dass er keine Daten an einen Kern schickt, der nicht vorhanden ist, aber das ist für die Maske als solche egal.
    - Sind mehr Kerne vorhanden, als die Schablone Löcher hat, dann werden diese zusätzlichen Kerne nach einem Standardverhalten verwendet, so als wäre die Schablone ungenutzt.


    Alles, was ich aktuell sagen kann ist:
    Was ich sehe ist logisch, schlüssig, reproduzierbar, vorhersagbar und entspricht in jeder Hinsicht exakt dem, was Zach vom LM Support ebenfalls erklärt hat.
    Ich kann an keinem Punkt erkennen, dass da was falsch oder unschlüssig wäre.


    Hier sind die Ergebnisse des Tests mit den AFM-Werten 142, 206 und 254 und einmal ein Bild von der Auslastung, wenn AFM nicht in der Config gesetzt wird.
    Erwartungsgemäß ergeben sie auf einem 4-Kerner ohne HT alle das selbe Bild (außer dem letzten natürlich, der wieder eine "Hinterwandkontrolle" ist).
    Was auch vollkommen logisch ist, denn die ersten vier Bits des Wertes sind bei diesen Wörtern immer gleich.
    AFM_Vergleich_02.png
    Was hier übrigens ebenfalls auffällt ist, dass AFM nicht gesetzt einen deutlichen Unterschied gegenüber den anderen Bildern in der Auslastung ausmacht.
    Die Auslastung ist höher und wesentlich ungleichmäßiger (es ist immer noch jedesmal der gleiche Flug, Start EDXF vorm Tower, scharfe Rechtskurve, über die Stadt)
    Auch habe ich dann, obwohl ich BP gesetzt habe, Ruckler und vor allem auch Blitzer.
    Das lässt wiederum vermuten, dass es auch dann Sinn macht, AFM zu setzen, wenn man die BP nicht auf Null stehen hat, wie es bei mir der Fall ist, allein schon um CPU Null für BS & Co freizuhalten.


    Im Moment komme ich nicht drauf, an welcher Stelle ich falsch liege.
    It makes all perfect sense.
    Und es stimmt mit den Angaben von LM überein.



    Und zur Ergänzung nochmal die Auslastungen im FS bei zwei Zuständen in EDDF. Vorweg AFM in P3D ist nur nötig, wenn man BP=0 fährt, sonst ist es nutzlos, weil P3D das im
    Gegensatz zum FSX völlig alleine verwalten kann.


    S.o.
    Das dachte ich an sich auch immer, aber die Auslastungsmonitore zeigen etwas anderes.
    Es scheint also auf jeden Fall Sinn zu machen, die AFM so zu setzen, dass Kern 0 seine Ruhe vor den Fibers hat.



    1. Die CPU entscheidet immer völlig alleine wann sie welche Cores zuschaltet und in welchem Umfange. AFM sagt nur ja oder nein.


    Genau.
    Wenn ich meinen Flusi mit dem LFZ im Stand habe, ist das auch gut zu sehen, alle Screens, die ich gepostet habe, stammen immer aus dem Flug heraus.
    Aber es ist genauso wie Du sagst: AFM sagt, ob Ja oder Nein.
    Insofern ist es egal, wie die Last auf die Cores verteilt wird, solange ich den Rechner dazu bringe, alle Cores, die er nutzen darf, auch zu nutzen und dass passiert eben, wenn ich in diesen Flug gehe.


    Das kannst Du nicht reproduzieren, weil Kerne , die tatsächlich gar nicht da sind , nicht angesprochen werden können. Nicht mal in der Informatik.


    Das meinte ich auch nicht, sorry mein Fehler in der Formulierung.



    Stellen wir und einen Spieler (Werfer) vor der vor einer Wand steht, in der sich 8 Türen befinden.
    Der Spieler soll Bälle werfen und zwar in diese 8 Türen.
    Hinter den Türen steht jeweils maximal ein weiterer Spieler (Fänger), der die Bälle auffangen und ablegen soll.
    Ich kann das Spiel beeinflussen, aber nur über einen Weg: Ich kann Türen öffnen oder schließen.
    Es sind immer 8 Türen.
    Ich kann sie nur öffnen oder schließen, aber weder welche ausbauen noch weitere dazustellen.


    Von sich aus möchte der Werfer die Bälle nach einem bestimmten Schema in die Türen werfen.
    Da die Fänger hinter einer Tür stehen, kann ich als "Zuschauer" in das Spiel eingreifen und entscheiden, welche Tür ich aufmache (1) und welche ich schließe (0).
    Der Werfer kann immer noch selber entscheiden, wie er seine Bälle wirft, aber ich habe entschieden, welche Fänger er überhaupt bedienen darf.
    Dem Werfer ist es egal, ob hinter der Tür ein echter oder ein "virtueller" Fänger steht.
    Wenn er hinter der Tür einen Fänger sieht, dann wirft er ihm wann es ihm passt, Bälle zu.
    Er kann aber sehen, wenn hinter einer Tür kein Fänger steht, also wird er dort auch nicht hinwerfen, egal ob die Tür auf oder zu ist.
    Wenn die Tür, hinter der kein Fänger steht, zu ist, sieht er's eh' nicht und selgst wenn er's wüsste, nützt es ihm nichts, denn es ist ihm auf jeden Fall nicht möglich, dorthin zu werfen.
    Ist die Tür offen, sieht er das aber und wirft nicht. (Es ist also keine CPU hinter der Maske, also wird auch nichts an Daten dorthin geschickt).
    Jetzt kommen noch weitere Fänger hinzu, obwohl ich nur 8 Türen habe (was z.B. bei einem 6-Kerner MIT HT passiert)
    Die stellen sich also einfach rechts neben die Mauer.
    Die haben keine Türen, der Werfer kann sie aber sehen und er wirft ihnen Bälle zu, und zwar so, wie er das gerne mag.
    Auf diese zusätzlichen Fänger kann ich keinen Einfluss nehmen.


    Für mich macht das perfekt Sinn und ich sehe auch, dass das umgesetzt wird.
    Und ich kann an keiner Stelle irgendwelche Zufallsprodukte erkennen, denn dann müsste ich das hier sehen.
    Ich habe aber IMMER die Ergebnisse, die ich voraussage und die ich erwarte.



    Ich suche immer noch einen möglichen Denkfehler, aber ich fürchte diesmal: da ist keiner.
    Möglich ist allerdings, dass wir beide das Gleiche meinen und beschreiben, aber ich das nicht erkenne.
    Das wäre für mich nicht das erste Mal.
    Im Moment vermute ich das aber eher nicht.


    Aber Bojote Thesen sind nicht falsch, das ist etwas sehr kühn.


    Ich muss gestehen, dass mir diese Behauptung von mir auch ein bisschen Angst macht, aber ich komme zu keinem anderen Schluss, obwohl ich die ganze Zeit versuche, mir zu beweisen, dass ich falsch liege.
    Ich gehe wirklich an die Sache heran indem ich sage: "Ich glaube eher Rainer als mir, also muss hier ein Denkfehler vorliegen, ich bin zwar Techniker, aber kein Informatiker"
    Und schon gar nicht würde ich solche Größen wie Bojote anzweifeln ...
    Also versuche ich mich selber zu Fall zu bringen, aber diesmal schaffe ich das einfach nicht.
    Das ist wirklich seeehr kühn, aber es kann auch einfach am Tweaker liegen oder andere Gründe haben, aber nach allem was ich erkennen und nachvollziehen kann, macht es keinen Sinn bei einem 4-Kerner sowohl mit, als auch ohne HT die AFM auf dem selben Wert zu halten und LM bestätigt das.
    Aber ich sage mir immer wieder, dass es ein Denkfehler auf meiner Seite geben muss.


    Allerdings finde ich die von Kostabesser.


    Ja, ich auch, muss die allerdings noch mal durchlesen.
    Da gibt es auch noch Jan Vaane, der sich daran ebenfalls reichlich ausgetobt hat, aber wenn ich das richtig in Erinnerung habe, kommt er zu den gleichen Ergebnissen wie ich, irgendwas war da mal.


    Rätselnde, aber sehr faszinierte Grüße ^^
    Marcus

  • Hi Füchti,
    ich würde mir echt nicht anmaßen wollen, Bojote, der dort über Jahre dran gearbeitet hat, anzuzweifeln. Aber jeder darf das machen, was er denkt.


    Hab damit auch gewaltige Probleme ... eben genau wegen dem, was Du sagst.



    Zitat

    Mache doch bitte mal folgenden Test, nämlich den, wenn nicht der erste Kern auf Null steht, sondern der zweite.
    also : 1101 =13 und: 11111101 = 253


    Ich kann ja schon mal vorab schreiben, was ich erwarte:


    13= 00 00 11 01
    Gespiegelt: 10 11 00 00
    Meine Erwartung: CPU0 an, CPU1 aus, CPU2 an, CPU3 an


    253= 11 11 11 01
    Gespiegelt: 10 11 11 11
    Meine Erwartung: Gleiches Bild wie bei 13.


    Schalte ich HT an, erwarte ich bei 13, dass zusätzlich zu den ersten 4 CPU's, die unverändert bleiben, die CPU' 4 bis 7 aus sind,
    bei 253 sind die CPU's 4 bis 7 aktiv, die ersten 4 bleiben ebenfalls unverändert.


    Das werde ich alsbald testen :)


    Ich hab heut Vormittag noch einige Tests gemacht, was die vierstelligen Werte betrifft.
    Ich dachte mir, dass ich bei einem vierstelligen Wert erwarten würde, dass er entweder ignoriert würde oder aber übernommen wird, aber nur soweit, wie er in die Maske passt.


    Das Ergebnis war faszinierend und entsprach meinen Erwartungen.


    Als erstes hab ich einfach willkürlich 1000 eingegeben und mir gesagt, was ich erwarten könnte wäre, dass entweder alle Kerne laufen, wie ein nichtgesetzter AFM ooooder ... das nur die letzte CPU arbeitet, die CPU's 0 bis 2 aber die Füße still halten.
    Warum:


    1000 = 00 11 11 10 10 00
    Gespiegelt: 00 01 01 11 11 00


    Meine Erwartung war, dass die ersten vier Zeichen des umgerechneten und gespiegelten AFM-Wertes (die dunkelblau markierten), egal wie lang es ist, die ersten vier Kerne steuert, die darauf folgenden, hellblauen steuern die nächsten 4 PCPU's.
    Und alles was danach kommt, wird einfach ignoriert und steuert gar nichts, und wenn da hundert Zeichen stehen.
    Der Wert, egal wie lang er ist, wird gespiegelt und die ersten acht Zeichen werden ausgelesen und steuern die CPU's.


    Das Ergebnis:


    Prozessorauslastung: CPU0 aus/ CPU1 aus/ CPU2 aus/ CPU3 an


    Und tatsächllich war nur CPU3 aktiv.
    (Ich hab den Screenshot vergessen ... sorry, hole ich nach.
    EDIT: Hier ist der Screenshot:
    AFM_1000_kl.png


    Dann dachte ich mir, kann auch Zufall sein.
    Also nochmal, ebenfalls willkürlich, den Wert 4021 eingetragen.


    4021 = 11 11 10 11 01 01
    Gespiegelt: 10 10 11 01 11 11


    Sollte meine Annahme (und die Aussage von LM) stimmen, würde als Ergebnis CPU0 ein, CPU1 aus, CPU2 an und CPU3 aus sein.
    Bei einem Achtkerner wären dann CPU4 an, CPU5 an, CPU6 aus und CPU7 an ...
    Das müsste ich noch testen, ich hab HT wieder abgeschaltet.


    Und hier das (nicht verblüffende) Ergebnis ^^ :
    AFM_4021_kl.png


    Prozessorauslastung: CPU0 an/ CPU1 aus/ CPU2 an CPU3 aus :)


    Demnach kann man also jeden beliebigen Binärwert nehmen, die ersten 8 Stellen entscheiden, der Rest wird ingnoriert, so meine Annahme.



    Ich bin echt gespannt, wie das am Ende ausgeht :) und finde das ebenfalls hammerspannend und unglaublich interessant.


    Viele Grüße
    Marcus


  • Ok, Done. :)


    Hier das Ergebnis (wie erwartet :) )


    AFM_13_u_253.png


    Bei einem 6-Kerner ohne HT würde ich erwarten, dass die CPU's 0 bis 3 identisch verlaufen, bei 253 wird auch CPU 4 und 5 aktiv sein, bei 13 vermute ich, dass die Cores 4 und 5 inaktiv sein werden.




    Ich hab grad mal spaßeshalber nur den AFM-wert 3 eingetragen, in der Erwartung, dass dann Kern 0 und 1 aktiv sind und die Kerne 2 und 3 nicht, ...
    Auch das hat sich bestätigt:
    AFM_3_kl.png
    (Der WErt macht natürlich keinen Sinn, aber mir gehts um das voraussagbare Verhalten)


    Viele Grüße
    Marcus

  • Vertuschen wir das jetzt oder stehen wir dazu? :S:whistling:^^


    Denn damit hätten wir ja doch so ein klein bisschen den Nachweis erbracht, dass der Tweaker von Jesus zumindest nicht die richtigen Werte ausgibt.
    Kann auch ein schlichter Programmierfehler sein ...


    Ansonsten können wir hier jetzt wenigstens mit Fug und Recht sagen, dass wir die AFM wirklch verstanden haben ^^



    Das war und ist eine wirklich spannende und fesselnde Diskussion :):):)


    Viele Grüße
    Marcus

  • das Fazit ist, dass eigentlich das Startposting reicht plus die Zusammenfassung von Basti in Posting Nr3.


    Der Rest fällt dann mehr unter Diskussion zum Tutorial und bestätigt im Grunde das meiste über mehrere Testreihen.
    Lesenswert ist es gewiss dennoch, aber Posting Nr.1 und Nr3 sind essentiell


    Ich hätte wohl einen eigenen Thread zur Diskussion zum Tutorial machen sollen, sorry, daran hatte ich gar nicht gedacht :S:rolleyes:


    Viele Grüße
    Marcus

  • was sollte ich denn beim Sechskerner ohne HT setzen?



    mfg Kai

    Mainboard: Gigabyte Z690 UD DDR4, CPU: AlderLake I7 12700K , Grafikkarte RTX 4080, Monitor: LG ULTRAWIDE(38UC99) 3840*1600, 32 GB RAM DDR4 3200 GSkill, Windows 11 pro, MSFS

  • Füchti: Ich habe Affinity Mask 4092 also 12 Bit und die Kerne werden exakt so angesprochen.
    Die ersten beiden mit 0 , die restlichen zehn mit 1.
    Und das klappt auch nur mit 4092.Sim ist P3D.
    Erklärung?


    Nicht die Leiseste ... 8|?( das ist gemäß den Angaben von LM unlogisch.
    (hatte ich hier in Posting Nr. 12 in diesem Thread schon mal verlünkt
    Deren Postings stammen von Mittel letzten Jahres, da hatten wir auch schon die 1.4 ...)


    ok, ich kenne Dein Argument, dass die Kerne größer 8 dann einfach als 1 behandelt werden. Stimmt aber nicht.


    Korrekt, das stimmt nicht und war auch hoffentlich nie mein Argument ;) , denn korrekt ist, dass alle Kerne größer 8 bei eingeschaltetem HT nicht einfach als 1 behandelt werden, sondern als 1 0, also nur der erste Thread pro Kern aktiv sein dürfte.
    Das ist auch nicht mein Argument, sondern das von LM ...


    Das wäre wirklich mal eine Anfrage im LM Supportforum wert.
    Es ist ja nicht auszuschließen, dass die das bereits erweitert und in der 1.4er Version eingebaut, aber noch nicht veröfentlicht haben.


    Ich kann hier ja nur bis 8 Kerne bei aktivem HT nachstellen und da zeigt sich, dass das verhalten tatsächlich so ist, dass ein Kern, der über die Maske nicht definiert wurde (kann ja auch nur einen einstelligen Wert eingeben), so wie von LM geschrieben, auf 1 0 geht.
    Das entspricht deren Angaben, dass nicht definierte Kerne automatisch auf 1 0 laufen.
    Irgendwo in diesem Thread hatte ich das glaube ich auch mal getestet und mit Grafik gepostet.


    Wie Du zu diesem wirklich verblüffendem Ergebnis kommst, ist mir nicht klar, keine Erklärung, nicht mal im Ansatz.


    Würde mich wirklich sehr interessieren, was LM dazu sagen kann.


    Wenn ich mich recht erinnere, hatten wir im Vorfeld ja schon einige Tests, allerdings mit dreistelligen Werten gemacht, die das so nicht erkennen ließen.


    Ich kann mir nicht vorstellen, dass die SW einen vierstelligen Wert als, ... wie soll man sagen ... zweimal zweistellig, also zwei 8-Bit Befehle annimmt ... das wäre zwar faszinierend ... aber wohl sehr unwahrscheinlich, ... aber witzig


    Viele Grüße
    Marcus


  • Ich war ehrlich gesagt genauso verblüfft, aber ich kann wirkliche jeden beliebigen 12-Bit Wert nehmen und es werden exakt die ausgewählten Kerne angesprochen und zwar so, wie ich möchte.


    Hab grad eine Antwort von Zach Heylmun im LM-Supportforum gelesen, welche das Rätsel löst :) :


    Zitat von Zach Heylmun


    Feel free to experiment, but 1364 is a good value for the affinity mask on the 3960x. It allows Prepar3D to run one thread on each physical core but the primary, which is reserved for system and background tasks. As was mentioned in the other thread on this topic, I was mistaken, and the affinity mask can cover all 12 cores of the 3960x.


    Demnach lassen sich alle Threads adressieren und der AM Wert ist also NICHT nur ein 8-Bit Wort :).

  • Und jetzt mal hervorgeholt und nachgefragt:
    HT aus oder an bei Euch (HT am BIOS an und per Software für denP3D aus)?
    AM per Lasso oder sonstwas drauf oder den P3D alles von selber machen lassen?

    Ich hatte am Samstag und auch heute mal massive Probleme mit dem FSLabs und Lasso auf 1-7 (also Null aus), bei allerdings schlechtem Wetter per ActiveSky.
    Eben beim herumsurfen bin mal wieder auf diesen Thread gestoßen und habe HT per Lasso ausgeschaltet und nur 1, 3, 5, 7 aktiviert und meine, das der Bus und auch die Umgebung sehr gut geflogen/dargestellt wurde.
    Werde ich morgen noch einmal testen, hoffe, dass ich meine etwas untermotorisierte Maschine weiter am Laufen halten kann.

  • hoffentlich hört der Alptraum mit dem FS2020 auf. Ich habe HT immer aus gehabt bei meinen Intel HT CPUs.

    Bin bis jetzt sehr zufrieden damit gewesen.

    MB: Asus Rog Strix Z790-F Gaming // CPU: I9-13900k // GPU: MSI RTX 4090 Suprim X // RAM: TeamGroup 32GB DDR5-6200 MHz


    Mit freundlichen Grüßen

    Martin



  • Vielen Dank Martin.
    Ich habe HT jetzt für den P3DV4 per Lasso auch mal ausgeschaltet.

    Ich habe einen I7 6700, lt. Lasso langweilt der sich im Reiseflug bei ca. 20%, meine GTX1080 läuft bei 47 Grad. Trotzdem habe ich bei manchen Flügen furchtbar unscharfe Texturen.
    Leider kann ich das bis jetzt nicht so richtig eingrenzen, ob es an ActiveSky liegen mag oder woran auch immer. Vielleicht auch an diesem Tool FFTF Dynamic, welches hier bei einigen tolle Dinge verrichten soll.


    Ich suche weiter... ;)