AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Hilfe: Schnellste möglichkeit ein 4-Byte Array zu Sortieren
Thema durchsuchen
Ansicht
Themen-Optionen

Hilfe: Schnellste möglichkeit ein 4-Byte Array zu Sortieren

Ein Thema von Dano · begonnen am 4. Feb 2012 · letzter Beitrag vom 18. Feb 2012
 
Horst_

Registriert seit: 22. Jul 2004
Ort: Münster Osnabrück
116 Beiträge
 
#27

AW: Hilfe: Schnellste möglichkeit ein 4-Byte Array zu Sortieren

  Alt 14. Feb 2012, 15:18
Hallo,

so eine Erkältung macht wohl wirr...
In Beitrag #26 habe ich die Assemblerausgabe angehängt gehabt, aua, da kann ja niemand etwas mit anfangen.

@Bjoerk:
Warum funktioneren die Assembler Varianten bei Dir nicht?
Nach etwas suchen, habe ich es gefunden.
Weil du eine Klasse von TList genommen hast und dort auch die Funktionen definiert hast.
Code:
 Var A located in register edx
# Var $self located in register eax !
Jetzt sind alle Assembler-Versionen davon ausgegangen, dass der Zeiger auf A in EAX steht, jetzt wird aber innerhalb der Klasse "self" in EAX übergeben.
Scheinbar habe ich falsch herum sortiert, ein BSWAP beseitigt das auf die Schnelle.

Wie himitsu schon angedeutet hat, kann man durch ganz andere Dinge die Performance so verschlechtern, das eine geschickte Sortierung völlig untergeht.

Wenn networkSort2 2236,67 ms für 1e8 Elemente/LongInt braucht sind dass 4*1e2/2,23667 = 178 MByte/s also noch gerade so schneller als eine heutige Festplatte.

miT tList statt eines einfachen Feldes sind die Zeiten sowieso egal.
Für 1e7 Werte ergab sich:
Code:
Erstellen der Werte: 1459 ms
DummySort: 188 ms
Selectionsort: 625 ms
Networksort: 601 ms
SelectionsortASM: 342 ms
SelectionsortASM2: 346 ms
SelectionsortASM2Horst: 328 ms
SelectionsortASM3Horst: 267 ms
Drücken Sie eine beliebige Taste . . .
Wenn der Zugriff auf die Daten schon DummySort: 188 ms dauert , geht der Rest darin unter.
SelectionsortASM3Horst: 267 ms-188 ms = 79 ms für das Sortieren.

Gruß Horst
P.S.
In Testvier halte ich die Datenmenge mit 32767 Elementen recht klein, es werden eben entsprechend viele Runden gemacht.
Ein dynamisches Array hätte 380 MByte gebraucht.

Das Anlegen einer Liste von 1e8 Werten braucht 2 GB an Platz und ist etwas zeitaufwändig.
Code:
Erstellen der Werte: 14684 ms
DummySort: 1828 ms
Selectionsort: 6188 ms
Networksort: 5994 ms
SelectionsortASM: 3425 ms
SelectionsortASM2: 3428 ms
SelectionsortASM2Horst: 3172 ms
SelectionsortASM3Horst: 2627 ms
Angehängte Dateien
Dateityp: zip Bjoerk.zip (103,5 KB, 2x aufgerufen)
  Mit Zitat antworten Zitat
 


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