Alignment-Probleme mit SIMD-Bibliotheken
-
Hallo,
wir haben ja seit C++11 glücklicherweise
alignof
undalignas
. 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 mitalignas
spezifiziert wird, sollten standardmässig dennew
- undnew[]
-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?
-
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 KlasseA
überlädt, dann muss man dasselbe tun für alle vonA
abgeleiteten Klassen und alle, dieA
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 überladenennew
-Operator: http://eel.is/c++draft/default.allocator
Beispiel: http://coliru.stacked-crooked.com/a/b63bce98bbc71b18