Autor Beitrag
TRomano
Hält's aus hier
Beiträge: 9

Win95 Win98 Win2000 WinXP Win2003
D6 Prof., D7 Enterprises, D8 Architect
BeitragVerfasst: Mi 10.09.03 10:12 
Unter Delphi7 habe ich das Problem, das keine explizite Angabe der Datenausrichtung möglich ist (wie z.b. in C++ mit Align(16) oder MASM mit ALIGN 16). Dadurch entfallen beim Inline-Assembler leider SSE2-Befehle wie MOVDQA, die an der 16Byte-Grenze ausgerichtet sind.
Das bedeutet aber gerade beim Moven von daten erhebliche geschwindigkeitsverluste. Gibt es eine Möglichkeit die Daten trotzdem an 16 Byte auszurichten ?
Danke.
AndyB
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1173
Erhaltene Danke: 14


RAD Studio XE2
BeitragVerfasst: Mi 10.09.03 10:25 
Du könntest den Speicher mit VirtualAlloc reservieren. Dieser ist auf 4KB ausgerichtet (was durch 16 Teilbar ist).

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
function VAllocMem(Size: Integer): Pointer;
begin
  Result := VirtualAlloc(nil, Size, MEM_COMMIT, PAGE_READWRITE);
end;

procecedure VFreeMem(var P);
begin
  VirtualFree(Pointer(P), 0, MEM_FREE);
end;

_________________
Ist Zeit wirklich Geld?
maximus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 896

Win XP, Suse 8.1
Delphi 4/7/8 alles prof
BeitragVerfasst: Mi 10.09.03 15:01 
Also ich weiss, dass man mit der direktive {$A} das alignment von records und klassen-feldern ändern kann! Ob man das aber auch mit 16 byte machen kann und ob dir das hilft, weiss ich nicht?

viel glück

_________________
mfg.
mâximôv
AndyB
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1173
Erhaltene Danke: 14


RAD Studio XE2
BeitragVerfasst: Mi 10.09.03 23:59 
{$ALIGN x} geht nur mit 1, 2, 4 und 8. Die 16 wird noch nicht unterstützt.

_________________
Ist Zeit wirklich Geld?
TRomano Threadstarter
Hält's aus hier
Beiträge: 9

Win95 Win98 Win2000 WinXP Win2003
D6 Prof., D7 Enterprises, D8 Architect
BeitragVerfasst: Mo 15.09.03 13:20 
Die Allokierung von Speicher erfolgt bei meinem Projekt (Arrays) automatisch, da ich in der Hauptsache mit dynamischen Arrays arbeite. Daher sind die Daten mal auf 4,8 oder 16 Byte ausgerichtet. nach langen Probieren und Studieren (System.pas) bin ich zu dem Schluss gekommen, dass Delphi7 mir hier nicht weiter hilft. Trotzdem herzlichen Dank !!!