Alignment-Probleme mit SIMD-Bibliotheken



  • Hallo,

    wir haben ja seit C++11 glücklicherweise alignof und alignas . Aber meiner Einsicht nach bestehen immer noch viel zu viele Probleme diesbezüglich und es liegt einzig am C++-Standard. Für Leute die mit der Problematik nicht vertraut sind: Link.

    Was IMO geändert werden müsste:
    - Klassen, bei denen das Alignment mit alignas spezifiziert wird, sollten standardmässig den new - und new[] -Operator überladen, damit dieser dem Alignment auch gerecht wird.
    - Klassen, die aligned Klassen als Basis oder Member haben, sollen selbst wiederum diesem Alignment gerecht werden (implizit!).

    • std::allocator soll das vorausgesetzte Alignment des Typs berücksichtigen.
      - Call-By-Value soll das vorausgesetzte Alignment des Typs berücksichtigen.

    Wieso hat das Committee Alignment als Sprachelement eingeführt, aber nicht an z.B. Heap-Allocations gedacht?


  • Mod

    raaaant!! schrieb:

    - Klassen, die aligned Klassen als Basis oder Member haben, sollen selbst wiederum diesem Alignment gerecht werden (implizit!).

    http://coliru.stacked-crooked.com/a/e1c3109c60f40c91
    Übersehe ich da jetzt was?

    • std::allocator soll das vorausgesetzte Alignment des Typs berücksichtigen.

    Das ist in deinem ersten Stichpunkt inbegriffen.

    Wieso hat das Committee Alignment als Sprachelement eingeführt, aber nicht an z.B. Heap-Allocations gedacht?

    Feature Entwicklung ist i.d.R. ein iterativer Prozess.



  • Arcoth schrieb:

    Übersehe ich da jetzt was?

    Nein. Mein Fehler, sorry. Worauf ich eigentlich anspielen wollte: Selbst wenn man operator new und Konsorten für seine Klasse A überlädt, dann muss man dasselbe tun für alle von A abgeleiteten Klassen und alle, die A als Member haben.

    Arcoth schrieb:

    • std::allocator soll das vorausgesetzte Alignment des Typs berücksichtigen.

    Das ist in deinem ersten Stichpunkt inbegriffen.

    Nein, denn std::allocator::allocate ignoriert den überladenen new -Operator: http://eel.is/c++draft/default.allocator
    Beispiel: http://coliru.stacked-crooked.com/a/b63bce98bbc71b18


Anmelden zum Antworten