Delphi-PRAXiS
Seite 3 von 8     123 45     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi 64 Bit langsamer als 32 Bit (https://www.delphipraxis.net/176010-delphi-64-bit-langsamer-als-32-bit.html)

jobo 7. Aug 2013 07:38

AW: Delphi 64 Bit langsamer als 32 Bit
 
Zitat:

Zitat von BigAl (Beitrag 1223717)
Hat irgendjemand eine Idee, warum die 64 Bit Anwendungen langsamer sind als die 32 Bit Anwendungen?

Auch wenn es um ein sehr spezifisches Problem (Routine/Integer) geht, ich wunder mich etwas über die Diskussion.
Ich selbst bin nie in die Verlegenheit gekommen, an der Stelle um Millisekunden kämpfen zu müssen, aber ich dachte, es sei allgemein bekannt, dass 64 bit Compiler bei weitem nicht so ausgereift sind, wie 32-bit compiler.
Konkret habe ich da Aussagen zu IE64 versus 32 von MS himself im Kopf. Sie geben nicht nur unumwunden zu, dass die 64bit Version langsamer ist, sie sagen gleich dazu, dass es keine Tuning Maßnahmen geben wird.
Eine Quelle dazu kenne ich leider nicht.

Unabhängig vom Optimierungsgrad des Compilers:
Theoretisch kann ein System, das größere Datenmengen (hier größere Zahlen) in einem Befehl verarbeiten kann, diesen Vorteil erst ausspielen, wenn tatsächlich Zahlen verarbeitet werden, die größer sind, als das Vergleichsystem in "einer Operation" beherrscht. Das kleinere System müsste diese Ops ja in mehrere Schritte splitten.
Das Float-Beispiel von Jaenicke passt da ganz gut ins Bild.

Für Performancevergleiche im Bereich CPU finde ich nebenbei gesagt noch die Tests mittels Datenbank realtiv unglücklich. Eine DB ist mit dem Festplattenzugriff um Faktoren langsamer als die CPU. Sortieroperation drehen sich da bspw. eigentlich nur um die Frage, ob sie klein genug fürs RAM sind oder auf der Festplatte vorgenommen werden müssen. Erst wenn man auf der gesamten Strecke von der Festplattenblockgröße, über Treiber bis in die DB Zugriffsroutinen optimierten 64 bit Code hat, kann man sich vermutlich wirklich über ein 64bit (Datenbank-)System freuen.

Eine naheliegende Optimierung hat Robotiker ja gerade genannt. Ich glaube Intel treibt da einen relativ großen Aufwand, um seine Mehrkern Optimierungen "an den Mann" zu bringen.

Robotiker 7. Aug 2013 07:45

AW: Delphi 64 Bit langsamer als 32 Bit
 
Zitat:

Zitat von jobo (Beitrag 1223788)
Konkret habe ich da Aussagen zu IE64 versus 32 von MS himself im Kopf. Sie geben nicht nur unumwunden zu, dass die 64bit Version langsamer ist, sie sagen gleich dazu, dass es keine Tuning Maßnahmen geben wird.
Eine Quelle dazu kenne ich leider nicht.

Na, dann fangen wir mal mit dieser an, gleich noch mit einem Vergleich zu C#
http://www.codeproject.com/Articles/...-Csharp-vs-NET
Die 32- und 64-Bit VC++ Compiler nehmen sich nicht viel bei der Optimierung.

jobo 7. Aug 2013 08:27

AW: Delphi 64 Bit langsamer als 32 Bit
 
Zitat:

Zitat von Robotiker (Beitrag 1223790)
Na, dann fangen wir mal mit dieser an, gleich noch mit einem Vergleich zu C#
Die 32- und 64-Bit VC++ Compiler nehmen sich nicht viel bei der Optimierung.

Interessant! Ich hab's erstmal überflogen. Vielleicht vertiefe ich mein Halbwissen bald noch weiter :)

1. Wie weit sind solche number crunching Geschichten übertragbar auf ein "komplexes" Programm (IE, usw), meinetwegen eingeschränkt auf CPU/Grafik?
2. Berücksichtigen solche Tests eine potentiell höhere "Payload" eines 64 bit Systems?
3. Die Testergebnisse überraschen mich auf den ersten Blick nicht so sehr.

2 kleine Beispiele
Nehme ich einen 4 bit microcontroller und lasse in im Zahlenraum 1 bis 16 addieren ist er mit Sicherheit genauso schnell wie ein "baugleicher" 8 bit microcontroller mit der gleichen Aufgabe. Compileroptimierung ist hier nicht möglich.
Nehme ich einen herkömmlichen Großraum LKW und einen neuen Mega Trailer (oder wie die heißen), packe sie mit der gleichen Menge Styroporblöcken voll, werden sie auf gleicher Strecke, mit gleicher Ladung die gleiche Zeit benötigen und damit die gleiche Leistung bringen. Der große LKW war im Test dann allerdings nur halbvoll.

Die verlinkten Tests sind sicher recht nahe an der spezifischen Situation des TE, andererseits wird hier im Thread allgemein von 64bit Compilern geschrieben. Äpfel und Birnen..?

mkinzler 7. Aug 2013 08:42

AW: Delphi 64 Bit langsamer als 32 Bit
 
AMD64 aka IA32_64 aka EMT unterscheiden sich von IA32 aber um mehr als die Breite des Buses der Register.
Unter 64Bit gibt es (wie schon kurz erwähnt) keine FPU mehr, es gibt "nur" noch die Entsprechenden Vektorerweiterungen ( SSE, AVX, ...), die aber grundsätzlich mächtiger sind; es kann aber u.U. Optimierung des Codes notwendig sein.
Zudem ist der 64Bit Delphi-Compiler eine Neuentwicklung (basiert nicht auf dem 32-Bit-Compiler), was bei VC nicht so sein wird. Zudem belegen 64-Bit Programme mehr Speichern. Beim Kopieren von Speicherbereichen muss u.U. auch mehr kopiert werden. Es wird eine andere RTL, VCL und andere Funktionen der Windows-API verwendet.

Robotiker 7. Aug 2013 08:58

AW: Delphi 64 Bit langsamer als 32 Bit
 
[QUOTE=jobo;1223793]
Zitat:

Zitat von Robotiker (Beitrag 1223790)
1. Wie weit sind solche number crunching Geschichten übertragbar auf ein "komplexes" Programm (IE, usw), meinetwegen eingeschränkt auf CPU/Grafik?

Das ist wirklich schwer zu sagen, "komplexe Programme" sind alle sehr unterschiedlich.

Vielleicht mal ein konkretes Beispiel
http://www.innovmetric.com/polyworks...d.aspx?lang=en
Das ist in VC++ geschrieben, es gibt eine 32- und 64-Bit Version. Man braucht die 64-Bit Version schon, wegen der großen Datenmenge, deshalb verwendet man selten auf Rechnern mit 64-Bit Betriebssystem noch die 32-Bit Variante. Ob die dann noch etwas schneller wäre, müsste man mal testen, gefühlt ist sie es nicht.


Ansonsten kann ich von einigen eigenen Libs berichten, die sich mit dem C++ Builder, VC++ und Intel C++ übersetzen lassen, alles 32 Bit.

Derselbe Code mit VC++ oder Intel übersetzt ist schon mal deutlich (30 - 70 %) schneller, als mit dem zugegeben uralten 32-Bit Borland Compiler (in XE2, was neueres habe ich nicht).

Bei wirklich numeriklastigen Sachen ist Intel schneller als MS, aber bei anderen Dingen können kann auch MS vorne liegen oder beide gleichauf. Da der Intel Compiler unter Windows quasi ein Zusatzpaket zu Visual Studio ist, lohnt er sich meist nur, wenn man einen "Nachbrenner" braucht, wenn VC++ nicht mehr hergibt. Das ist bei uns aber eher selten der Fall.

mentaltec 7. Aug 2013 09:50

AW: Delphi 64 Bit langsamer als 32 Bit
 
Hi,

gibt es dafür

Zitat:

Zitat von mkinzler (Beitrag 1223797)
Unter 64Bit gibt es (wie schon kurz erwähnt) keine FPU mehr

einen Beleg?
ich persönlich glaube :: wer ein A20 Gate bis zur 48 bit Adressierung durchschleppt, kappt keine noch so crazy FPU.

evtl. ist es ja nur eine Empfehlung für zukünftige Entwicklungen

mfg

jfheins 7. Aug 2013 09:58

AW: Delphi 64 Bit langsamer als 32 Bit
 
Was hier auch noch nicht gesagt wurde: x64 hat mehr Register. Das kann bei manchen Sachen schon etwas ausmachen, wenn die innerste Schleife komplett in den registern läuft und keinen Cache mehr benötigt.

Hier gab' es auch mal eine interessante Begebnheit: http://stackoverflow.com/questions/17328641 . Hier wurde durch eine kleine Änderung am Code eine zusätzliche Variable alloziert. Im x64 war das zwar unnötig langsam, passte aber alles in die Register. Beim x86 wurde dafür ein Cache Zugriff nötig. In diesem Beispiel war also x64 immer schneller als x86.

Was den x87 angeht: Im 64-bit Modus ist die x87 FPU zwar nicht mehr verfügbar - aber dafür gibt es ja seit geraumer Zeit die SSE Befehle & Co
(Zumindest "hört" man das überall so. Eine genauer Quelle habe ich dafür nicht, und auch keine Lust mich durch die x64 spec zu lesen...)

Union 7. Aug 2013 10:25

AW: Delphi 64 Bit langsamer als 32 Bit
 
Viel schlimmer ist, dass man hier Äpfel mit Birnen vergleicht. Es wird unter 64 bit von Delphi nicht nur anderer Maschinen-Code durch einen zusätzlichen Compiler erzeugt, sondern auch die Funktionalität des zugrundeliegenden Source ist durch $ifdef teils eine ganz andere. Wenn man also einen echten Vergleich machen möchte, darf man nur Aufrufe machen, die sich zwischen 32 und 64 Bit vom Source nicht so stark unterscheiden.

MEissing 7. Aug 2013 11:22

AW: Delphi 64 Bit langsamer als 32 Bit
 
Noch ein Hinweis (unabhängig vom oben dargestellten Problem):
Arbeitet man mit SINGLE Werten und 64-Bit, so werden bei Berechnungen dieser SINGLE Werte die Daten vorher in ein DOUBLE kopiert und anschliessend wieder in ein SINGLE (um genauere Zwischenergebnisse zu bekommen).

Das kann uU schon mal etwas dauern... und unerwünscht sein :-)

Man kann das Verhalten des 64-Bit Compilers aber steuern:
http://docwiki.embarcadero.com/RADSt...elphi_für_x64)

Dadurch bekommt man durchaus mit 64 Bit schnelleren Code, als zB mit 32 Bit (bei rechenintensiven Anwendungen)
Siehe zB hier:
http://delphitools.info/2011/09/05/x...isappointment/
Anschaulich mit Apfelmännchen:
http://delphitools.info/2011/03/24/k...cemonkey-team/

(Der 64 Bit Compiler nutzt SSE2)

Patito 7. Aug 2013 11:26

AW: Delphi 64 Bit langsamer als 32 Bit
 
Zitat:

Zitat von mentaltec (Beitrag 1223829)
gibt es dafür
Zitat:

Zitat von mkinzler (Beitrag 1223797)
Unter 64Bit gibt es (wie schon kurz erwähnt) keine FPU mehr

einen Beleg?
ich persönlich glaube :: wer ein A20 Gate bis zur 48 bit Adressierung durchschleppt, kappt keine noch so crazy FPU.

evtl. ist es ja nur eine Empfehlung für zukünftige Entwicklungen

mfg

Also in der Hardware ist es wohl noch drin. Die Unterstützung von Microsoft aus
war wohl ein wenig am wackeln.

http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx

"In 64-bit versions of Windows, the operating system preserves the MMX/x87 registers across thread (and process) switches. However, there is no explicit calling convention for the MMX/x87 registers. Code that is produced by the 64-bit compiler for x64 processors does not use these registers and does not preserve them across function calls."

Technisch könnte der Delphi-Compiler vermutlich weiter die alte FPU-Präzision behalten.

Ich interpretiere dieses "does not preserve them across function calls." jetzt mal so,
dass die Gefahr besteht, dass ein Aufruf einer Microsoft C++ dll eventuell den FPU-Status zerschießt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:49 Uhr.
Seite 3 von 8     123 45     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz