![]() |
16 Byte Alignment? (SSE)
NAbend,
Mich würde mal interressieren, ob es möglich ist irgendwie 16byte alignment in Delphi zu nutzen. Soweit ich das sehen konnte funktioniert effektiv nur 8byte alignment v.v. SSE hätte aber gerne 16byte alignment. JA, ich kann auch mit unaligned memory arbeiten, aber das ist nen quäntchen langsamer. Testrecord:
Delphi-Quellcode:
ps: wenn überhaupt, ab welchem compiler wirds unterstützt?
Type
TTest = record X, Y, Z, W: Single; end; MFG Memnarch |
AW: 16 Byte Alignment? (SSE)
|
AW: 16 Byte Alignment? (SSE)
Zitat:
|
AW: 16 Byte Alignment? (SSE)
Zitat:
|
AW: 16 Byte Alignment? (SSE)
Zitat:
a) die Speicheradressen der Record-Felder X, Y, Z und W sollen jeweils auf einer 16-Bit-Grenze liegen b) der gesamte Record soll auf einer 16-Bit-Grenze liegen Leider geht a) nur, wenn du entsprechende Füller einbaust. Für b) gibt es aber ein Keyword, daß ein (nicht-gepacktes) Record auf eine 16-Bit-Grenze setzt:
Delphi-Quellcode:
Ab wann das geht, kann ich im Moment nicht sagen; getestet habe ich es unter XE2.
type
TTest = record X: Single; Y: Single; Z: Single; W: Single; end align 16; |
AW: 16 Byte Alignment? (SSE)
Zitat:
Also 128-Bit Alignment. |
AW: 16 Byte Alignment? (SSE)
Zitat:
|
AW: 16 Byte Alignment? (SSE)
ah danke :)
align als record zusatz scheint wohl auch unter XE zu funktionieren(D7 noch nicht). @Uwe sofern ich das richtig verstanden habe, sollte der Record auf einer 16Byte grenze liegen, um bei den SSE befehlen z.B. movaps nutzen zu können anstatt movups(a für aligned und u für unaligned). Bei dem versuch aligned zu nutzen klatschts aber gerade noch gewaltig^^. "AV read of address FFFFFFFF" so schauts gerade aus:
Delphi-Quellcode:
das ganze ist in einer funktion geschrieben, die die beiden vectoren übergeben bekommt.(vom typ TTest).
movaps XMM0, [VecA];
movaps XMM1, [VecB]; addps XMM0, XMM1; movups [Result], XMM0; VecA u. VecB sind als const parameter deklariert. Irgendwas läuft schief o.O |
AW: 16 Byte Alignment? (SSE)
Zitat:
Ich muss auch gestehen, daß mein Wissen hierbei auch nur theoretischer Natur ist. |
AW: 16 Byte Alignment? (SSE)
Habe keinen packed record ABER es könnte sein dass da was mit dem stack passiert. Es gibt auch noch die Directive {$CodeAlign X} ( x = 1, 2, 4, 8, 16). Diese sorgt wohl dafür das auch funktionen etc auf diese grenzen ausgerichtet werden. Knallt aber immernoch fröhlich >.<
edit: AH global deklarierte records werden sauber aligned. Nur die lokalen und die parameter nicht o.O. Hab mir mal die adressen ausgeben lassen. (Mit den globalen klappts auch) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:09 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz