Leistungstests werden häufig aus den falschen Gründen oder schlecht durchgeführt. Die Gründe dafür sind sehr unterschiedlich, aber oft in einem Nichtverstehen der Art der Leistungsanalyse und der Überzeugung, dass “etwas besser ist als nichts”. Wie wir immer wieder sehen werden, ist dieser Glaube bestenfalls eine gefährliche Halbwahrheit. Was Sie wählen, müssen Sie zuerst herausfinden, wie Sie auf die Daten in Ihren kritischsten Schleifen zugreifen werden, um zu verstehen, wie Sie sie sehr effektiv entwerfen und darstellen können. Und Sie müssen in der Regel einige Austausche machen, die den seltenen Fall zugunsten des gemeinsamen Falles verlangsamen, denn wenn Sie mit einem SoA-Design gehen, können Sie immer noch einige Stellen im System haben, die mehr von AoS profitieren würden, also beschleunigen Sie den allgemeinen Fall mit SoA, wenn Ihre kritischen Pfade sequenziell sind, während Sie den seltenen Fall verlangsamen, wenn Ihre nicht kritischen Pfade zufällige Zugriffsmuster verwenden. Es gibt eine Menge zu nehmen und Kompromisse zu machen, um mit den effizientesten Lösungen zu kommen, und natürlich hilft es zu messen, aber auch Dinge effizient im Voraus zu entwerfen, müssen Sie auch über Speicherzugriffsmuster nachdenken. Ein gutes Speicherlayout für ein Zugriffsmuster ist nicht unbedingt gut für ein anderes. Dies würde auf einen SoA-Ansatz (Structure of Arrays) hinarbeiten und ist sinnvoll, wenn der Großteil Ihrer kritischen Schleifen Zeit damit verbringt, auf die Position eines Spielers in sequenziellen oder zufälligen Zugriffsmustern zuzugreifen, aber nicht, sagen wir, Rotation. Wenn sowohl auf Rotation als auch auf Position in einem Muster mit zufälligem Zugriff häufig zugegriffen wird, kann eine Struktur, die beide mit einem AoS-Ansatz (Array von Strukturen) speichert, am sinnvollsten sein.

Wenn beide überwiegend in einem sequenziellen Zugriffsmuster ohne zufälligen Zugriff aufgerufen werden, dann könnte die SoA besser funktionieren, nicht weil sie Cache-Fehler reduziert (es wäre nahe an der Gleichnis mit AoS), sondern weil es eine effizientere Anweisungsauswahl durch den Optimierer ermöglichen kann, wenn Sie z. B. 8 SPFP-Positionen Felder auf einmal in ein YMM-Register laden können, ohne dass Rotationsfelder mit homogeneren vertikalen Arithmetik in Verarbeitungsschleifen überlagert werden. Designmuster können den Entwicklungsprozess beschleunigen, indem sie erprobte, bewährte Entwicklungsparadigmen bereitstellen. [4] Für das effektive Softwaredesign müssen Probleme berücksichtigt werden, die möglicherweise erst später in der Implementierung sichtbar werden. Frisch geschriebener Code kann oft versteckte subtile Probleme haben, die Zeit brauchen, um erkannt zu werden, Probleme, die manchmal große Probleme auf der Straße verursachen können. Die Wiederverwendung von Entwurfsmustern hilft, solche subtilen Probleme zu vermeiden, und verbessert auch die Lesbarkeit von Code für Programmierer und Architekten, die mit den Mustern vertraut sind. Einer der häufigsten Fehler ist es, allgemein von “Leistungstests” zu sprechen, ohne sich mit den Besonderheiten zu beschäftigen.


[easy-social-share buttons="facebook,twitter,google,pinterest,linkedin,whatsapp" counters=1 counter_pos="right" total_counter_pos="none" hide_names="force" template="dark-retina"]

Reacties zijn gesloten.

Scroll to top