AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

16 Byte Alignment? (SSE)

Ein Thema von Memnarch · begonnen am 12. Dez 2011 · letzter Beitrag vom 13. Dez 2011
Antwort Antwort
Seite 1 von 3  1 23      
Benutzerbild von Memnarch
Memnarch

Registriert seit: 24. Sep 2010
737 Beiträge
 
#1

16 Byte Alignment? (SSE)

  Alt 12. Dez 2011, 17:19
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:
Type
  TTest = record
    X, Y, Z, W: Single;
  end;
ps: wenn überhaupt, ab welchem compiler wirds unterstützt?

MFG
Memnarch
Da man Trunc nicht auf einen Integer anwenden kann, muss dieser zuerst in eine Float kopiert werden
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#2

AW: 16 Byte Alignment? (SSE)

  Alt 12. Dez 2011, 17:24
Siehe hier: http://docwiki.embarcadero.com/RADSt...chten_(Delphi)

Geändert von jfheins (12. Dez 2011 um 17:39 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.462 Beiträge
 
Delphi 12 Athens
 
#3

AW: 16 Byte Alignment? (SSE)

  Alt 12. Dez 2011, 17:30
Dem Link fehlt die schließende Klammer!
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#4

AW: 16 Byte Alignment? (SSE)

  Alt 12. Dez 2011, 17:39
Dem Link fehlt die schließende Klammer!
Ich schiebe das mal auf den DP URL Parser, hab's aber trotzdem korrigiert
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.462 Beiträge
 
Delphi 12 Athens
 
#5

AW: 16 Byte Alignment? (SSE)

  Alt 12. Dez 2011, 18:12
Mich würde mal interressieren, ob es möglich ist irgendwie 16byte alignment in Delphi zu nutzen.
Ich bin mir nicht ganz sicher, was du genau erreichen willst:

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:
type
  TTest = record
    X: Single;
    Y: Single;
    Z: Single;
    W: Single;
  end align 16;
Ab wann das geht, kann ich im Moment nicht sagen; getestet habe ich es unter XE2.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#6

AW: 16 Byte Alignment? (SSE)

  Alt 12. Dez 2011, 18:53
... sollen jeweils auf einer 16-Bit-Grenze liegen
16-Byte nicht Bit
Also 128-Bit Alignment.
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.462 Beiträge
 
Delphi 12 Athens
 
#7

AW: 16 Byte Alignment? (SSE)

  Alt 12. Dez 2011, 20:34
... sollen jeweils auf einer 16-Bit-Grenze liegen
16-Byte nicht Bit
Also 128-Bit Alignment.
Klar!
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Memnarch
Memnarch

Registriert seit: 24. Sep 2010
737 Beiträge
 
#8

AW: 16 Byte Alignment? (SSE)

  Alt 13. Dez 2011, 09:21
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:
movaps XMM0, [VecA];
movaps XMM1, [VecB];
addps XMM0, XMM1;
movups [Result], XMM0;
das ganze ist in einer funktion geschrieben, die die beiden vectoren übergeben bekommt.(vom typ TTest).

VecA u. VecB sind als const parameter deklariert.


Irgendwas läuft schief o.O
Da man Trunc nicht auf einen Integer anwenden kann, muss dieser zuerst in eine Float kopiert werden
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.462 Beiträge
 
Delphi 12 Athens
 
#9

AW: 16 Byte Alignment? (SSE)

  Alt 13. Dez 2011, 09:47
Bei dem versuch aligned zu nutzen klatschts aber gerade noch gewaltig^^.
Das align bei records funktioniert nur bei non-packed records! Dummerweise bekommt man bei einem packed record mit align auch keinen Hinweis - es wird nur einfach nicht aligned.

Ich muss auch gestehen, daß mein Wissen hierbei auch nur theoretischer Natur ist.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Memnarch
Memnarch

Registriert seit: 24. Sep 2010
737 Beiträge
 
#10

AW: 16 Byte Alignment? (SSE)

  Alt 13. Dez 2011, 10:07
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)
Da man Trunc nicht auf einen Integer anwenden kann, muss dieser zuerst in eine Float kopiert werden

Geändert von Memnarch (13. Dez 2011 um 10:14 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:20 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz