![]() |
Geschwindigkeitsvorteil 64 ggüb. 32 Bit - woran ermitteln?
Hallo Pascal-/Lazarusfreunde!
Zur Zeit interessiert mich der Geschwindigkeitsvorteil von 64 gegenüber 32 Bit. Den festzustellen kommt zur Zeit ja nur Lazarus infrage. Weiß jemand, bei welchen Operationen, Datentypen u.ä. sich der Geschwindigkeitsvorteil von 64 zu 32 Bit besonders signifikant feststellen läßt? Auf Anhieb fällt mir eigentlich nur der Datentyp Int64 mit den entsprechenden Operationen (am besten jenseits der 2^32? vermutlich aber doch in jeder Größe) ein, der ja auch unter 32-Bit-Pascal (ab Delphi 4) nutz-/verwendbar ist. Sind z.B. die relativ rechenintensiven Stringoperationen unter 64 Bit auch beschleunigt? Für eventuelle Antworten danke ich schon mal im voraus! Viele Grüße Delphi-Laie |
Re: Geschwindigkeitsvorteil 64 gegenüber 32 Bit - wie ermitt
Int64-Operationen sollten sehr, sehr viel schneller laufen,
denn in 32 Bit werden diese über zwei Integer "aufwändig" berechnet. Und was noch ein Vorteil wäre: - über 2 GB Arbeitsspeicher - bessere Integration in ein 64-Bit-Betriebssystem Wenn man z.B. die MMX-Register nutzt, dann kann man auch unter 32-Bit schneller/optimaler arbeiten. |
Re: Geschwindigkeitsvorteil 64 gegenüber 32 Bit - wie ermitt
Danke! War meine Vermutung mit dem Int64 also anscheinend richtig.
Zitat:
|
Re: Geschwindigkeitsvorteil 64 gegenüber 32 Bit - wie ermitt
Zitat:
Zitat:
(Installation eines TeamSpeak-Servers unter 64bit-Debian war grausam, bis ich den Grund dann rausfand...) Liebe Grüße, Valle |
Re: Geschwindigkeitsvorteil 64 gegenüber 32 Bit - wie ermitt
Zitat:
Zitat:
|
Re: Geschwindigkeitsvorteil 64 ggüb. 32 Bit - woran ermittel
Standardmäßig kann ein 32-Bit-Programm nur 2 GB (2^31, da Signed) nutzen, aber man kann ein bestimmtes PE-Flag setzen und bis zu etwa 3,5 GB freischalten.
Zusammen mit PEA sind aber "offiziell" bei Homesystemen (Windows) bis zu 8 GB und Server 64 GB möglich. Bei 64 Bit-CPUs sind physikalisch theoretisch bis zu 16 EB möglich, aber praktisch nur bis zu 256 TB, da es nur 48 Adressleitungen gibt. Die neueren Server-CPUs haben aber alle 64 Adressleitungen. |
Re: Geschwindigkeitsvorteil 64 gegenüber 32 Bit - wie ermitt
Zitat:
|
Re: Geschwindigkeitsvorteil 64 ggüb. 32 Bit - woran ermittel
@ Bernhard Geyer
.....Die Itanium-Prozessoren waren echte Schnecken was 32-Bit Anwendungen betrifft Der ITANIUM musste ja den x86-Befehlssatz emulieren ... |
Re: Geschwindigkeitsvorteil 64 ggüb. 32 Bit - woran ermittel
Hallo,
Zitat:
Eine Google-Suche "windows 3GB" bringt mir ![]() PAE suchen bringt was zur Programmierung Heiko |
Re: Geschwindigkeitsvorteil 64 ggüb. 32 Bit - woran ermittel
Zitat:
Von Windows' internem Speichermanagement hab' ich als Linuxer keine Ahnung. :mrgreen: Liebe Grüße, Valle |
Re: Geschwindigkeitsvorteil 64 ggüb. 32 Bit - woran ermittel
Aber als Linuxer muss man Google weit aus mehr befragen, als ein Windows-User :mrgreen:
|
Re: Geschwindigkeitsvorteil 64 ggüb. 32 Bit - woran ermittel
Zitat:
Liebe Grüße, Valle |
Re: Geschwindigkeitsvorteil 64 ggüb. 32 Bit - woran ermittel
Hallo,
es gibt doch noch das shootout Spiel: 64-Bit: ![]()
Code:
32-Bit:
Program N CPU secs Elapsed secs Memory KB Code B
binary-trees 12 0.13 0.13 ? 769 binary-trees 16 2.06 2.08 7,192 769 binary-trees 20 44.93 44.93 131,420 769 ![]()
Code:
64-Bit ist langsamer, es wird ja auch die doppelte Datenmenge bewegt.
Program N CPU secs Elapsed secs Memory KB Code B
binary-trees 12 0.10 0.11 ? 769 binary-trees 16 1.60 1.60 4,176 769 binary-trees 20 36.44 36.44 65,684 769 Wenigstens ist 64-Bit bei k-nucleotide 25,000,000 wirksam/ ohne Fehler im Ablauf. Ein Vorteil von 64-Bit ist der Umstand, dass die 1 Gbyte Grafikkarte Dir nicht den Hauptspeicher um diese Größe eindampft, weil nun in einem Adressbereich oberhalb 4 GByte liegen kann, jedenfalls waren bei mir 3,9 Gbyte frei statt 3,5 Gbyte (ja nur eine kleine Grafikkarte ;-) ). Programmtechnisch könnten die 8 zusätzlichen CPU-Register etwas beschleunigend wirken, wenn die Kompiler das auch nutzt und auch alle Daten schön aligned ausrichtet sind. Gruß Horst |
Re: Geschwindigkeitsvorteil 64 ggüb. 32 Bit - woran ermittel
Also unter 32-Bit kann man 2^32 Adressen ansprechen und das sind 4294967296 Stück. Mehr Speicher kann ein 32-Bit OS nicht verwalten. Unter Windows hat jeder Prozess seinen eigenen, geschützten Adressraum. Dieser ist genau 2^32 GB groß. Da aber ein Prozess nicht aus seinem Adressraum so einfach rauskommt, er aber natürlich die Betriebssystemfunktionen braucht, werden diese in seinen Adressraum eingeblendet. Dem Betriebssystem steht dazu die Hälfte des Adressraumes zu: 2GB. Demzufolge kann ein Prozess über die restlichen 2GB frei verfügen. Mit einem Schalter kann man den frei verfügbaren Adressraum für einen Prozess auf 3GB vergrößern. Dies ist aber nicht zu empfehlen, da dann für das Betriebssystem nur noch 1GB übrig bleiben.
So, womit ich mich noch nicht beschäftigt habe, ist wie der Adressraum und dessen Verwaltung unter 64-Bit aussieht. Wenn ich da mal was gescheites zu lesen finden würde im Internet oder so, wäre das eine schöne Sache. Sehe gerade ist genauso: halbe/halbe. 16TB davon 8TB für das Betriebssystem und 8TB für den Prozess. ![]() Was jetzt interessant wäre bei der Geschwindigkeit: Ist das gleiche Programm einmal als 64-Bit unter einem 64-Bit OS schneller als 32-Bit unter einem 32-Bit OS. |
Re: Geschwindigkeitsvorteil 64 ggüb. 32 Bit - woran ermittel
Es ist eigentlich nebenwirkungsfrei einem 32-Bit Prozess (hier D6 mit FastMM) per Compilerflag eine 3GB-Adressierung zu ermöglichen. Was problematisch ist, in einem 32-Bit Windows diese Adressierung freizuschalten, da es genügend HW-Treiber für Win32 gibt die damit nicht klar kommen.
Für uns war mal dieser Schalter die einzige Möglichkeit ein Problem per Hotfix zu lösen. Normalerweise lassen wir aber das Programm mit max. 2GB laufen. Selbst bei größeren DB's im 2stelligen GB-Bereich kommt unsere Programm sehr selten über 100-200 MB Speichernutzung. |
Re: Geschwindigkeitsvorteil 64 ggüb. 32 Bit - woran ermittel
Zitat:
Zitat:
|
Re: Geschwindigkeitsvorteil 64 ggüb. 32 Bit - woran ermittel
Hi,
auch mal was sagen... Zum Thema 32-Bit-Programm mit mehr als 2 GB (in die DPR):
Delphi-Quellcode:
Achtung: Der Standard-Memorymanager von Delphi < 2006 rechnet mit Vorzeichen!
{$SetPEFlags $20} //IMAGE_FILE_LARGE_ADRESS_AWARE
Zum Thema Adressraum: Unter 64-Bit ist physikalische = logische Adresse. Speichersegmentierung gibt es nicht mehr. Gruß FAlter |
Re: Geschwindigkeitsvorteil 64 ggüb. 32 Bit - woran ermittel
Speichersegemente gab es auch unter 32-Bit nicht mehr. der Adressraum ist linear ansprechbar. Nur gibt es unter 64-Bit keinen virtuellen Adressraum mehr, deswegen gilt, wie du sagst physikalische Adresse = logische Adresse.
|
Re: Geschwindigkeitsvorteil 64 ggüb. 32 Bit - woran ermittel
Zitat:
|
Re: Geschwindigkeitsvorteil 64 ggüb. 32 Bit - woran ermittel
Hallo,
![]() Wenn viel FPU Rechnerei vorliegt und/oder viele Register von Vorteil sind -> 64-Bit. Die meisten Anwender werden nicht über mehrere Gigabyte gleichzeitig verarbeiten müssen, aber wer weiß, es reichen ja 640 kByte ;-) Gruß Horst |
Re: Geschwindigkeitsvorteil 64 ggüb. 32 Bit - woran ermittel
Zitat:
Denn FPC64 scheint nicht großartig anderen Code zu erzeugen als die 32Bit Variante. Es wird nicht "aggressiv" für die Register und den Befehlsatz optmimiert, den man auf AMD64 CPU voraussetzen kann. Ein Delphi64 compiler würde höchstwahrscheinlich besseren Code erzeugen. Aber das wissen wir erst wenn er da ist, und wenn er 5 Jahre später die meisten Kinderkrankheiten losgeworden ist. Wenn du also wirklich jetzt wissen willst was dir x64 bringt, wäre wohl eine Test suite für einen Compiler, der x64 auch tatsächlich nutzt, angemessener. Pascal Code kannsu da natürlich nicht erwarten. |
Re: Geschwindigkeitsvorteil 64 ggüb. 32 Bit - woran ermittel
Zitat:
Lesen Sie mal bitte, was oben geschrieben wurde: Zitat:
Die 3-GByte-Startoption kenne ich schon lang und verwende sie auch seit geraumer Zeit. Jedoch werden, soweit mir bekannt, damit nur der gesamten Anwendungssoftware (also wohl den Programmen, die im Usermodus laufen) die 3 GByte zugewiesen, die 2-GByte-Schranke gilt dennoch für jedes Programm. Also erlaube ich mir, meine Frage zu wiederholen: Wo bitteschön kann man dem Compiler mitteilen, daß die Exe-Datei 3 GByte nutzt? Edit: FastMM scheint wohl das Stichwort dazu zu sein. |
Re: Geschwindigkeitsvorteil 64 ggüb. 32 Bit - woran ermittel
FastMM oder ein beliebiger SpeicherManager, welcher damit umgehen kann
UND der PF-Flag, welches die Speicherverwaltung seitens Windows (z.B. VirtualAlloc) dafür freischaltet. Grund: "Früher" wurde oftmals ein ungültiger Pointer durch (P < 0) gekennzeichnet und/oder oder das oberste Bit für Statusinformationen mißbraucht (dieses Bit konnte ja eh nicht für die Speicherverwaltung verwendet werden). Darum sperrt Windows erstmal die Nutzung dieses Bits, damit die "älteren" Programme auch noch lauffähig sind. Programme, welche aber dieser Einschränkung nicht unterliegen, können Windows über das PE-Flag ( {$SetPEFlags $20} ) dieses mitteilen und kommen dann in den Genuß dieser erweiterten Möglichkeiten. |
Re: Geschwindigkeitsvorteil 64 ggüb. 32 Bit - woran ermittel
Zitat:
![]() Gruß, Sven |
Re: Geschwindigkeitsvorteil 64 ggüb. 32 Bit - woran ermittel
Ich rate dringend davon ab, über 2GB zu gehen. Der Schalter ist nicht ohne Grund optional und versteckt. Sonst hätte ja Borland den per default eingebaut. Es ist durchaus möglich, dass 99% des Codes schön mit 3GB laufen, Aber wehe, ein Programteil castet einen Pointer. Dann wird der Pointer verbogen und zeigt irgendwo hin. Das Programm verabschiedet sich.
|
AW: Geschwindigkeitsvorteil 64 ggüb. 32 Bit - woran ermitteln?
Wirkt sich eine Performancesteigerung auch auf das Arbeiten mit größeren Werten als Int64 aus? Mir schwebt da z.B. Extended vor.
|
AW: Geschwindigkeitsvorteil 64 ggüb. 32 Bit - woran ermitteln?
Extended war bereits ein ein Register breit, und der Datentyp ist eigentlich auch mehr ein Hack, da dies nur das FPU interne Format sein sollte. Vor allem: FPU! Ob die ALU dabei 64 Bit, 32 16 oder 8 hat ist der prinzipiell erstmal egal. Einzig, wenn man Floats durch die CPU Register schubsen muss helfen die 64 Bit, aber dann auch nur bei Double so wirklich. Kurzantwort also: Nein, Langantwort: In konstruierten Ausnahmefällen in Nuancen vielleicht, aber für die Praxis wohl nicht relevant.
|
AW: Geschwindigkeitsvorteil 64 ggüb. 32 Bit - woran ermitteln?
Zitat:
Nen bisschen was über 64-bit und floating point Performance kann man bei Eric Grange auf dem Blog lesen: ![]() ![]() ![]() |
AW: Geschwindigkeitsvorteil 64 ggüb. 32 Bit - woran ermitteln?
Zitat:
Was sollte man bei XE2 statt Extended denn dann wohl besser nehmen? |
AW: Geschwindigkeitsvorteil 64 ggüb. 32 Bit - woran ermitteln?
Zitat:
Mit viel Aufwand könnte man einen Record mit überladenen Operatoren schreiben, der Extended simuliert (nicht zu vergessen die passende Funtionen: Sin, Arcsin, Cos, Arcos, Abs, ...). Das wäre doch was, wenn wieder jemand fragt, was er machen soll :mrgreen: |
AW: Geschwindigkeitsvorteil 64 ggüb. 32 Bit - woran ermitteln?
Zitat:
![]() |
AW: Geschwindigkeitsvorteil 64 ggüb. 32 Bit - woran ermitteln?
Leider (aus dem Link):
Zitat:
|
AW: Geschwindigkeitsvorteil 64 ggüb. 32 Bit - woran ermitteln?
Also bisher habe ich bei XE2 (Trial) nur Nachteile entdeckt. So ist eine leere Form bei x86 6 MB und x64 7,5 MB groß.
|
AW: Geschwindigkeitsvorteil 64 ggüb. 32 Bit - woran ermitteln?
Zitat:
![]() Edit: Ups, war ja Dein eigenes Thema.... |
AW: Geschwindigkeitsvorteil 64 ggüb. 32 Bit - woran ermitteln?
Zitat:
Beachte aber auch, dass die Größe einer leeren Applikation nahezu keine Aussagekraft hat (übrigens ist die Standard Config auf Debug gesetzt, die sind standardmäßig nochmal um einiges größer). Interessant wird es, wenn es eine richtige Applikation ist, und dann fällt das u.U. nicht mehr ins Gewicht. |
AW: Geschwindigkeitsvorteil 64 ggüb. 32 Bit - woran ermitteln?
Zitat:
Extended80 <> TExtended80Rec! Oder hab ich mich verguckt? |
AW: Geschwindigkeitsvorteil 64 ggüb. 32 Bit - woran ermitteln?
Ich hab mich verquoted :oops:
Gleich darüber steht: Zitat:
|
AW: Geschwindigkeitsvorteil 64 ggüb. 32 Bit - woran ermitteln?
Free Pascal verfügt über eine "SoftFPU" Unit, welche es letztendlich erlauben soll 32, 64, 80 und 128 Bit Operationen in Software durchzuführen (mit dazugehörigen Datentypen). Die Unit soll letztendlich dazu verwendet werden, um von Systemen, die keinen 80-Bit Datentyp unterstützten (x86_64, ARM), auf Systeme zu kompilieren, die das tun (x86). Das Problem ist nämlich, dass Konstanten vom Compiler immer mit der höchsten für die Zielplattform verfügbaren Genauigkeit evaluiert werden sollten. Von x86 nach x86_64 ist das kein Problem, da der Compiler dann einfach nur mit der 64-Bit Genauigkeit evaluiert, aber von x86_64 nach x86 ist das problematisch, da ersterer nur bis 64-Bit Genauigkeit anbietet. Dies kann im Worstcase zu Programmen führen, die sich unterschiedlich verhalten je nachdem ob sie nativ unter x86 oder cross kompiliert wurden. Das darf natürlich nicht sein.
Die Unit basiert auf C-Code und ist leider noch nicht komplett konvertiert (nur die 32 und 64 Bit Operationen sind bereits konvertiert). Gruß, Sven |
AW: Geschwindigkeitsvorteil 64 ggüb. 32 Bit - woran ermitteln?
Zitat:
Wobei mich schon brennend interessieren würde woher der massive Anstieg von XE kommt... |
AW: Geschwindigkeitsvorteil 64 ggüb. 32 Bit - woran ermitteln?
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:54 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