Thema: Delphi Delphi 64 Speicherfragen

Einzelnen Beitrag anzeigen

BigAl

Registriert seit: 6. Sep 2008
Ort: Kehl
504 Beiträge
 
Delphi 12 Athens
 
#11

AW: Delphi 64 Speicherfragen (Memory Mapped Files)

  Alt 19. Feb 2014, 20:59
Hallo zusammen,

ich habe noch eine Frage zu dem Thema Memory Mapped Files. Ich habe mir ein Objekt gebaut, um die verschiedenen Matrizen im MMF zu bearbeiten. Das funktioniert echt super. Ich kann den Speicher von/zu Platte streamen und auf die diversen Elemente zugreifen. Ich möchte nun das Ganzen noch etwas tunen, da ich wie gesagt teilweise sehr viele Zugriffe habe. Speziell beim Lösen von linearen Gleichungssystem mittels Gauss finden extrem viele Zugriffe statt. Da werden aus jeder Nanosekunde gleich mehrere Minuten.

Folgende Zugriffe habe ich erstellt und möchte ich optimieren:

Delphi-Quellcode:
function TMatrixMMF<T>.GetValue(Y, X: Cardinal): T;
// Wert lesen
type
  P = ^T;
begin
  Result := P(UInt64(FMMFPtr) + (Y * FCountX + X) * SizeOf(T))^;
end;

procedure TMatrixMMF<T>.SetValue(Y, X: Cardinal; const Value: T);
// Wert schreiben
type
  P = ^T;
begin
  P(UInt64(FMMFPtr) + (Y * FCountX + X) * SizeOf(T))^ := Value;
end;
FMMPtr ist die Startadresse des MMF-Speichers. FCountX ist die Breite der Matrix.

Ich habe mir das Ganze mal im Assembler angeschaut und etwas potential entdeckt. Leider will Delphi XE5 keinen Inline-Assembler im 64-bit Code??? Meine Idee wäre folgende gewesen:

Nach jeder Teiloperation wird eine Bereichsprüfung auf die Variable durchgeführt. Auf diese würde ich gerne verzichten, da ein Überlauf eigentlich nicht möglich ist. Hat irgendwer vielleicht eine Idee wie man das sonst noch was rauskitzeln könnte? "inline" habe ich schon gemacht, bringt aber nicht viel...

Bin für jeden Tipp dankbar.

So long

Alex
Man sollte nie so viel zu tun haben, dass man zum Nachdenken keine Zeit mehr hat. (G.C. Lichtenberg)
  Mit Zitat antworten Zitat