If Anweisung wird übersprungen



  • @Columbo
    Du hast meine beiden Fragen nicht beantwortet.



  • @Wutz

    Die Frage, welche Beiträge @Columbo z.B. meint, hat doch @Quiche-Lorraine schon für ihn beantwortet.



  • @Columbo sagte in If Anweisung wird übersprungen:

    Du benutzt std::map im high-performance Sektor? Also einen red-black tree der jeden Knoten mit new alloziert?

    Lies Dir bitte den Thread noch einmal genau durch, da war die Rede von .at() auf beliebigen Containern. Denn Swordfish schrieb folgendes : „@Bushmaster Deswegen gibt es bei Containern generell at() UND operator[].“

    Zum Thema map und HPC, das Einfügen in eine map ist langsam beim Verwenden des Standardallokators. Solange man meistens nur liest, ist das aber nicht von Nachteil.

    Und weshalb sprechen wir von Cache-hits, wo es hier um zwei Funktionen operator[]/at geht, deren einziger Unterschied darin besteht, was eine branch, die im gegebenen Rahmen (Key soll bereits existieren) als "unlikely" kategorisiert wird, macht?

    Sobald man Datenstrukturen verwendet, die größer sind als der L1, L2, L3, L4 … Cache, muss man die Algorithmen darauf optimieren. D.h. auch beim operator[] wirkt sich das zum Teil dramatisch aus. Wie stark hängt immer davon ab, was für einen Container, mit welchen Allokator und mit welchem Algorithmus man nutzt. Wenn man nur einmal über den Arbeitsspeicher schreibt z.B. für eine Initialisierung, dann ist die Auswirkung gleich null. Wenn man aber öfters die gleichen Elemente nutzt, dann kann eine Optimierung auf Cache Lines und die Cache Größen Wunder wirken – auch bei so schnöden Dingen wie eine Sortierung. Im Grunde kann man die alten Kapitel aus TAOCP von Knuth mit dem externen Sortieren wieder hervor kramen. Zwar nutzt man keine Tapes mehr, aber die Wartezeit auf den Hauptspeicher ist mittlerweile sehr lang.


Anmelden zum Antworten