daemon777
Lt. Commander
- Registriert
- Dez. 2003
- Beiträge
- 1.371
Hallo Leute,
heute bin ich auf eine merkwürdige Sache gestoßen und kann sie mir bisher nicht so ganz erklären. Eigentlich war meine ursprüngliche Intention nur (mal wieder) ein bisschen mit Sortieralgorithmen zu experimentieren und habe damit auf meinem Laptop (Ubuntu) begonnen.
Da mein Desktop (Windows) mehr Leistung (und Ram) besitzt wollte ich hier dann weiter testen und habe den Code einfach kopiert.
Bei den meisten Tests gab es jetzt keine Überraschungen, bis ich zum Quicksort kam. Der ist auf dieser Maschine aus irgendeinem Grund vergleichsweise absolut lahm. Das Ganze habe ich als release für 32 und 64bit kompiliert. In der Debug-Version ist alles verständlicherweise ziemlich langsam. Aber auch hier musste der Quicksort am Stärksten drunter leiden.
Die zu sortierenden Daten liegen auf dem Heap, da ich sehr große Datenmengen testen wollte. Der Quicksort ist eine rekursive Variante. Das klappt auf meinem Laptop unter Linux auch direkt. In Visual Studio musste ich jetzt erstmal noch die Größe von Stack und Heap erweitern.
Damit lief es dann auch bis zu einer gewissen Größe ohne Probleme. Nur der Quicksort ist nicht so glücklich. Der wird hier sogar langsamer als der Mergesort.
Um mal die Größenordnung deutlich zu machen:
Als Debug kompiliert:
Merge: 32,853 s
Quick: 310,949 s
Quick2:313,646 s
x64 release:
Merge: 11,778 s
Quick: 84,442 s
Quick2: 84,489 s
x32 release:
Merge: 13,774 s
Quick: 84,302 s
Quick2: 83,959 s
Auf dem Laptop(Ubuntu):
Merge: 62,885 s
Quick: 46,107 s
Quick2: 45,686 s
Also der Unterschied ist schon gigantisch. Vielleicht hat ja jemand eine Idee woher so etwas kommen kann? Schließlich ist der Code absolut identisch.
Vielleicht werde ich mal eine iterative Variante probieren, um zu schauen, ob es hier einen ähnlichen Effekt gibt.
viele Grüße
daemon
heute bin ich auf eine merkwürdige Sache gestoßen und kann sie mir bisher nicht so ganz erklären. Eigentlich war meine ursprüngliche Intention nur (mal wieder) ein bisschen mit Sortieralgorithmen zu experimentieren und habe damit auf meinem Laptop (Ubuntu) begonnen.
Da mein Desktop (Windows) mehr Leistung (und Ram) besitzt wollte ich hier dann weiter testen und habe den Code einfach kopiert.
Bei den meisten Tests gab es jetzt keine Überraschungen, bis ich zum Quicksort kam. Der ist auf dieser Maschine aus irgendeinem Grund vergleichsweise absolut lahm. Das Ganze habe ich als release für 32 und 64bit kompiliert. In der Debug-Version ist alles verständlicherweise ziemlich langsam. Aber auch hier musste der Quicksort am Stärksten drunter leiden.
Die zu sortierenden Daten liegen auf dem Heap, da ich sehr große Datenmengen testen wollte. Der Quicksort ist eine rekursive Variante. Das klappt auf meinem Laptop unter Linux auch direkt. In Visual Studio musste ich jetzt erstmal noch die Größe von Stack und Heap erweitern.
Code:
#pragma comment(linker, "/STACK:2000000")
#pragma comment(linker, "/HEAP:8000000")
Damit lief es dann auch bis zu einer gewissen Größe ohne Probleme. Nur der Quicksort ist nicht so glücklich. Der wird hier sogar langsamer als der Mergesort.
Um mal die Größenordnung deutlich zu machen:
Als Debug kompiliert:
Merge: 32,853 s
Quick: 310,949 s
Quick2:313,646 s
x64 release:
Merge: 11,778 s
Quick: 84,442 s
Quick2: 84,489 s
x32 release:
Merge: 13,774 s
Quick: 84,302 s
Quick2: 83,959 s
Auf dem Laptop(Ubuntu):
Merge: 62,885 s
Quick: 46,107 s
Quick2: 45,686 s
Also der Unterschied ist schon gigantisch. Vielleicht hat ja jemand eine Idee woher so etwas kommen kann? Schließlich ist der Code absolut identisch.
Vielleicht werde ich mal eine iterative Variante probieren, um zu schauen, ob es hier einen ähnlichen Effekt gibt.
viele Grüße
daemon