Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Stringoperationen :: Performancemessung am bsp ANSI->ASCII (https://www.delphipraxis.net/12888-stringoperationen-performancemessung-am-bsp-ansi-ascii.html)

negaH 8. Dez 2003 18:14

Re: Stringoperationen :: Performancemessung am bsp ANSI->
 
Eines verstehe ich aber nicht ?!

Delphi-Quellcode:
  for iChar:= Length(Result) downto 1 do
Warum nutzt du eine TopDown Schleife statt einer BottomUp ?

Delphi-Quellcode:
  for iChar:= 1 to Length(Result) do
Normalerweise sollte vom Speicherzugriff/Cache die zweite Methode schneller sein.

Gruß hagen

Robert Marquardt 8. Dez 2003 19:04

Re: Stringoperationen :: Performancemessung am bsp ANSI->
 
Fragt sich nur ob Delphi die Schleife nicht sowieso als downto-Schleife optimiert.
Also mal mit und ohne Optimierung probieren.

negaH 9. Dez 2003 01:19

Re: Stringoperationen :: Performancemessung am bsp ANSI->
 
Zitat:

Fragt sich nur ob Delphi die Schleife nicht sowieso als downto-Schleife optimiert.
Also mal mit und ohne Optimierung probieren.
Nein, dies macht Delphi nicht. D.h. die Reihenfolge der effektiven Speicheradressen ergibt sich immer aus der Schleife, egal ob Delphi optimiert oder nicht. Denoch kann Delphi eine BottomUp Schleife in eine TopDown Schleife um-optimieren, wird dann aber beim indizierten Arrayzugriff dies so berücksichtigen das dieser wieder exakt den Vorgaben aus dem Source entspricht.

Gruß Hagen

choose 9. Dez 2003 08:30

Re: Stringoperationen :: Performancemessung am bsp ANSI->
 
Zitat:

Zitat von Hagen
[...] die Reihenfolge der effektiven Speicheradressen ergibt sich immer aus der Schleife, egal ob Delphi optimiert oder nicht

Das stimmt, Hagen. Lediglich für die Abbruchbedingung und den Debugger ist der Iterator relevant, weshalb dies beim debuggen mitunter recht merkwürdig aussieht.

Ich könnte eine Bottom-Up-Schleife gerne einmal ausprobieren, und überprüfen, ob das Prefetching des Cache tatsächlich anschlägt, bin aber darüber hinaus überzeugt davon, dass eine ASM-Variante merkbar performanter gestaltet werden kann, wenn man davon ausgeht, dass Delphi-Strings idR an DWord-Grenzen ausgerichtet sind.
In diesem Fall könnte man, den ganzzahligen vierten Teil der Länge in einer Schleife bearbeiten, bei der nur 1Dword+4Bytes (+4 Bytes schreiben) statt 4Bytes+4Bytes (+4 Bytes schreibend) lesende Speicherzugriffe notwendig sind, um vier Zeichen zu verarbeiten. Außerdem wäre eine Tabelle denkbar, bei der jeweils ein Tupel von Zeichen abgelegt wird, um auch hier effizienter zu arbeiten (1DWord+2Words lesend +2Words schreibend).

Vielleicht möchte jemand von Euch, der bereits mit Delphi-Strings gearbeitet hat, so eine Lösung umsetzen? Ich persönlich scheitere am Aufruf von _LStrLen bzw beim Alloziieren eines Strings, so dass ich die Lösung nur für PChars umsetzen könnte, und ein Delphi-Wrapper notwendig wäre... :gruebel:


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:36 Uhr.
Seite 2 von 2     12   

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-2025 by Thomas Breitkreuz