AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Delphi 64 Bit langsamer als 32 Bit

Ein Thema von BigAl · begonnen am 6. Aug 2013 · letzter Beitrag vom 12. Aug 2013
Antwort Antwort
Seite 1 von 2  1 2   
Insider2004
(Gast)

n/a Beiträge
 
#1

AW: Delphi 64 Bit langsamer als 32 Bit

  Alt 7. Aug 2013, 23:12
Alles ganz einfach:

1. 64 bit müssen einfach langsamer sein als 32 bit, weil die Pipelines im Prozessor mehr Füllung haben, um das mal so auszudrücken.

2. Floats unter 64 bit sind schneller, weil Delphi da die neuen SSE-Befehle nutzt. In 32 bit wird der uralte FPU-Codegenerator von Turbo Pascal anno 1988 benutzt.
  Mit Zitat antworten Zitat
Benutzerbild von danielmagin
danielmagin

Registriert seit: 6. Dez 2003
Ort: Frankfut am Main
54 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#2

AW: Delphi 64 Bit langsamer als 32 Bit

  Alt 8. Aug 2013, 01:09
In diesem Blog geht es zwar um die Problematik MSSQL 64bit ist teilweise langsamer als 32bit.

Jedoch die Ansatzpunkte sind nicht schlecht (in der zweiten Hälfte).

http://blogs.msdn.com/b/sqlprogramma...edirected=true
Daniel Magin
  Mit Zitat antworten Zitat
Benutzerbild von JamesTKirk
JamesTKirk

Registriert seit: 9. Sep 2004
Ort: München
604 Beiträge
 
FreePascal / Lazarus
 
#3

AW: Delphi 64 Bit langsamer als 32 Bit

  Alt 8. Aug 2013, 08:25
Um mal noch kurz einzustreuen, wie das bei Free Pascal ist:

Da die FPU nur unter Windows 64-Bit als "deprecated" deklariert ist, nicht aber unter Linux, Mac OS X und Co verwenden wir nur unter Win64 per default die SSE Unit (Standard ist hier SSE Version 1) mit maximal Double-Precision, aber unter den anderen x86_64-Systemen verwenden wir weiterhin per Default die FPU mit Extended-Precision. Es gibt übrigens ein Define für den Compiler, welches es erlaubt auch die FPU für Win64 zu verwenden, dieses ist aber standardmäßig deaktiviert (und wahrscheinlich auch nicht wirklich getestet). Dies funktioniert aber deswegen, weil Windows trotzdem die FPU Register sichern muss, damit 32-Bit Anwendungen (welche ja die FPU erwarten) weiterhin korrekt laufen. Die Verwendung von SSE bedeutet aber nicht automatisch, dass der Compiler auch Vectorizing oder ähnliche Späße macht. In dem Zusammenhang wird SSE einfach nicht als SIMD, sondern als SISD (Single Instruction Single Data) verwendet...
Das es manchmal sinnvoll sein kann von SSE auf SSE2 oder SSE3 zu wechseln zeigt dieser Bugreport in dem die Laufzeit eines Algorithmus unter x86_64 von 125ms auf 64ms gedrückt werden konnte (und noch ein paar Millisekunden mehr nach einer weiteren Optimierung).

Ein anderer Fall ist "reine Pascalcode" vs. "Assemblercode". Da hatten wir das Beispiel von Move und FillChar . Die Einführung von Assemblerroutinen für diese beiden Basisfunktionen hat bei einem Nutzer den Code von etwa 4 Sekunden auf etwa 500ms beschleunigt.

Nebenbei erwähnt: FPC erlaubt es auch für x86_64 die Verwendung von inline Assembler Abschnitten (es muss also nicht die gesamte Routine Assembler sein).

Gruß,
Sven
Sven
[Free Pascal Compiler Entwickler]
this post is printed on 100% recycled electrons
  Mit Zitat antworten Zitat
Robotiker
(Gast)

n/a Beiträge
 
#4

AW: Delphi 64 Bit langsamer als 32 Bit

  Alt 8. Aug 2013, 09:31
Um mal noch kurz einzustreuen, wie das bei Free Pascal ist:
Sind Anwendungen, wie die des Threaderstellers, eigentlich eine Zielgruppe für Pascal Compiler Entwickler ?

Leute die solche Berechnungen mit Millionen Daten und Millarden Operationen darauf machen, haben ja meist dicke Rechner mit mehreren Prozessoren. (GPUs usw. lassen wir mal ganz außen vor.) Bei den oben erwähnten C++ Lösungen dafür hat man ja heute Libs zum z.B. große Arrays auf CPUs zu partitionieren und hinterher die Teillösungen zusammenzubringen.

Sind die Delphi/Pascal Lösungen dafür Assemblerroutinen und Threads ? Tiling, Loadbalancing usw. alles händisch ? Arbeitet nicht die Zeit gegen solche Lösungen ? Es gibt schliessich immer mehr Kerne auf CPUs, die aber einzeln nicht schneller werden.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.876 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Delphi 64 Bit langsamer als 32 Bit

  Alt 8. Aug 2013, 10:04
@Robotiker: Wir befinden uns hier in einem Delphi (also Pascal Forum) und da wunderst Du dich, dass man hier über Delphi diskutiert? Nach Deiner Definition/Sichtweise gibt es natürlich keinen Grund überhaupt auf die Idee zu kommen, etwas nicht mit (Visual) C++ zu lösen zu wollen, da man mit VC++ ja alles besser machen kann als mit irgendeinem anderen Tool.
Native Gemüter (was wir ja aus Deiner Sicht zu sein scheinen) verwenden, aus vielleicht sentimentalen Gründen, "veraltete" Dinge wie Delphi/FPC/Lazarus, ...

Dieser Beitrag habe ich als Mitglied und nichta als Moderator verfasst, das heisst er muss nicht unbedingt der Meinung des Teams entsprechen.
Markus Kinzler
  Mit Zitat antworten Zitat
Robotiker
(Gast)

n/a Beiträge
 
#6

AW: Delphi 64 Bit langsamer als 32 Bit

  Alt 8. Aug 2013, 10:34
Native Gemüter (was wir ja aus Deiner Sicht zu sein scheinen)
Dieser Eindruck entsteht da in der Tat.

Der Fragesteller hat weiter oben festgestellt, dass ihm schon eine kleine Verbesserung des Codes 200 Minuten (!) Verbesserung bringen würden. Ist es bei solchen Dimensionen vermessen mal zu fragen, warum keiner überhaupt mal über das Thema Parallelisierung redet ?

Ich arbeite seit Turbo Pascal 3 mit Pascal, aber bei solchen Aufgaben heute nicht mehr. Aber ich habe Erfahrungen mit solchen Datenmengen.

Geht es hier also darum möglichst schnell solche Berechnungen zu lösen, oder einfach nur darum "ein Programm wie früher" zu schreiben ?

Besteht "native Code Performance" in Delphi heutzutage daraus "stunning multimedia apps" in FireMonkey zu schreiben, über die dann alle ganz "exited" sind ?

Meine Absicht war nicht den Fragesteller zu einer anderen Programmiersprache zu drängen, sondern zu zeigen, was man braucht um auf heutiger Hardware solche Probleme zu lösen. Deswegen meine Frage, ob und wie man sich bei FreePascal dieser Entwicklung stellt. Das solche Frage nicht erwünscht sind, weil man ja auf dem richten Weg ist, habe ich jetzt verstanden.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.876 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Delphi 64 Bit langsamer als 32 Bit

  Alt 8. Aug 2013, 10:45
Zitat:
Das solche Frage nicht erwünscht sind, weil man ja auf dem richten Weg ist, habe ich jetzt verstanden.
Darum geht es nicht, sondern um die Tatsache, dass in fast jedem Deiner Beiträge etwas von VC, C++ u.ä. steht.

Zitat:
Ist es bei solchen Dimensionen vermessen mal zu fragen, warum keiner überhaupt mal über das Thema Parallelisierung redet ?
Nein es ging hier aber um 32Bit vs. 64Bit. Parallelisierung sollte unabhängig von der Busbreite ein Thema sein.

Zitat:
Besteht "native Code Performance" in Delphi heutzutage daraus "stunning multimedia apps" in FireMonkey zu schreiben, über die dann alle ganz "exited" sind ?
Nein, ich würde sogar sagen "reines FM2 wäre hierfür nicht meine 1. Wahl.
Zitat:
Meine Absicht war nicht den Fragesteller zu einer anderen Programmiersprache zu drängen, sondern zu zeigen, was man braucht um auf heutiger Hardware solche Probleme zu lösen
Nämlich die Verwendung von Bibliotheken für (V)C++, welche in Delphi/BC++ nicht funktionieren.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von JamesTKirk
JamesTKirk

Registriert seit: 9. Sep 2004
Ort: München
604 Beiträge
 
FreePascal / Lazarus
 
#8

AW: Delphi 64 Bit langsamer als 32 Bit

  Alt 9. Aug 2013, 08:26
Um mal noch kurz einzustreuen, wie das bei Free Pascal ist:
Sind Anwendungen, wie die des Threaderstellers, eigentlich eine Zielgruppe für Pascal Compiler Entwickler ?

Leute die solche Berechnungen mit Millionen Daten und Millarden Operationen darauf machen, haben ja meist dicke Rechner mit mehreren Prozessoren. (GPUs usw. lassen wir mal ganz außen vor.) Bei den oben erwähnten C++ Lösungen dafür hat man ja heute Libs zum z.B. große Arrays auf CPUs zu partitionieren und hinterher die Teillösungen zusammenzubringen.
Es sehe hier durchaus Anwendungsmöglichkeiten für Pascal Compiler. Aktuell ist FPC und vielleicht auch die Laufzeitbibliothek nicht unbedingt darauf ausgelegt, aber das heißt ja nicht, dass das so bleiben muss. Vor allem bei einem Open Source Projekt, wo jeder was beitragen kann.
Meine Idee ist zum Beispiel die Funktionalität von Vector Pascal in FPC zu integrieren, was eine native Nutzung von SIMD Units ermöglichen würde (FPC unterstützt zwar aktuell SIMD Instructions, wendet die aber nur für einzelne Werte an, also eher als FPU-Ersatz). Dann müssten auch noch ein paar Optimierungen her wie Auto Vectorizing oder sonstige Nettigkeiten, wie sie LLVM zur Zeit bekommt. Vielleicht auch ein paar Threading Erweiterungen wie sie Oxygene kennt (z. B. parallel for ).

Sind die Delphi/Pascal Lösungen dafür Assemblerroutinen und Threads ? Tiling, Loadbalancing usw. alles händisch ? Arbeitet nicht die Zeit gegen solche Lösungen ? Es gibt schliessich immer mehr Kerne auf CPUs, die aber einzeln nicht schneller werden.
Meine Anmerkung mit Assembler betraf zwei Grundroutinen, die sehr häufig implizit aufgerufen werden. Wenn die nicht schnell sind, dann bringt dir auch die ganze sonstige Optimiererei nicht allzu viel. Und auch wenn natürlich der Compiler auch entsprechend optimieren können muss gibt es hier und da Routinen wo es besser ist, wenn man von Hand ne Assemblerroutine schreibt (eben zum Beispiel diese beiden besagten Routinen FillChar und Move ), da hierdurch Prozessorbefehle verwendet werden können, die der Compiler normalerweise nicht verwendet (ein Compiler reizt das Instruction Set eines Prozessors normal nie voll aus).
Was aktuell (zumindest so weit ich das Überblicke) allerdings tatsächlich noch fehlt sind Frameworks (ich nenn es mal einfach so), die einem das Arbeiten mit und Verwalten von vielen Threads abnehmen (du magst das nennen wie du willst, aber von der OS Perspektive her sind es am Ende immer noch Threads, die da parallel laufen).

Gruß,
Sven
Sven
[Free Pascal Compiler Entwickler]
this post is printed on 100% recycled electrons
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.961 Beiträge
 
Delphi 12 Athens
 
#9

AW: Delphi 64 Bit langsamer als 32 Bit

  Alt 9. Aug 2013, 08:39
Was aktuell (zumindest so weit ich das Überblicke) allerdings tatsächlich noch fehlt sind Frameworks (ich nenn es mal einfach so), die einem das Arbeiten mit und Verwalten von vielen Threads abnehmen
Wobei die OmniThreadLibrary dabei durchaus einiges an Arbeit abnimmt. Ob die auch für solche massiven Berechnungen sinnvoll nutzbar ist, kann ich nicht sagen, dafür kenne ich beides zu wenig.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Robotiker
(Gast)

n/a Beiträge
 
#10

AW: Delphi 64 Bit langsamer als 32 Bit

  Alt 9. Aug 2013, 09:00
Wobei die OmniThreadLibrary dabei durchaus einiges an Arbeit abnimmt. Ob die auch für solche massiven Berechnungen sinnvoll nutzbar ist, kann ich nicht sagen, dafür kenne ich beides zu wenig.
Ja, das legt zumindest den nächsten Level, man hat nicht mehr nur TThread.

Aber so was wäre schön (einfach die Diagramme anschauen, den Code ignorieren):
http://www.parallel-universe-online....123-flow-graph

[Edit]
Sollte aber eigentlich mit dem neuen Compiler im Builder irgendwann verwendbar sein.

Geändert von Robotiker ( 9. Aug 2013 um 09:13 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 17:36 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