2010-07-27 10 views
15

Worin liegt der Leistungsvorteil, den 64-Bit-Anwendungen gegenüber 32-Bit-Anwendungen haben? Ich gehe davon aus, dass es einen Leistungsvorteil gibt, weil Programme wie WinRAR dafür werben.64-Bit-Leistung Vorteile

Auch wir können diese Leistungsvorteile einfach erhalten, indem auf eine 64-Bit-Compiler wechseln oder gibt es irgendwelche Änderungen im Code, die vorgenommen werden müssen?

Antworten, die sich sowohl auf nicht verwalteten als auch auf verwalteten Code beziehen, sind willkommen.

Antwort

4

Um die Vorteile der 64-Bit-Architektur der neuesten CPU Sie haben zu nehmen:

  • Verwendung einer 64-Bit-CPU und OS
  • für 64 Bits speziell entwickelt ein 64-Bit-aPI - die Umset Die Programmierung muss bis zum einfachsten Code gehen, der mit den CPU-Registern arbeitet (normalerweise in Assembler geschrieben), um die zusätzlichen Register zu nutzen.
  • Entwickeln Sie eine Anwendung, die wirklich von den zusätzlichen Registern profitieren wird - WinRAR ist eine Anwendung, die die zusätzlichen Register voll ausnutzen wird, weil es viel Kalkül mit komplexen Algorithmen beinhaltet. Wenn Sie stattdessen eine Anwendung mit sehr einfachen Algorithmen schreiben, wird es keinen zusätzlichen Registeradressraum benötigen und es wird nicht schneller auf 64 Bit arbeiten
  • nehmen Sie auch in Betracht, dass wenn Sie ein CPU-Register verwenden, auch wenn Sie das nicht verwenden der ganze Adressraum für einen Wert, es wird immer noch so viel Platz (= 64Bits) einnehmen. Daher wird das Schreiben einer kleinen Anwendung in 64 Bit mit dem Ziel, einen optimierten Code zu bekommen, einfach nicht funktionieren .. Diese App wird doppelt so viel RAM verbrauchen als wenn es unter 32 Bit entwickelt würde und es könnte noch langsamer sein. Die Programmierung in 64 Bit ist sinnvoll für Anwendungen, die schwere Algorithmen verwenden oder große Speicherbereiche belegen müssen (4Gb ist die Grenze für eine 32bit App).
+2

Warum sollte die Anwendung doppelt so viel Arbeitsspeicher beanspruchen? In Bezug auf Registerraum können Sie immer die höheren und unteren Teile eines 64-Bit-Registers separat verwenden. Eine vernünftige Verwendung der Register sollte dieses Problem natürlich lösen. – TripShock

+2

Ja, die doppelte Menge an Speicherplatz ist im Worst-Case-Szenario. Aber selbst wenn Sie mit Werten arbeiten müssen, die viel kleiner als 32 Bits sind, wie Werte, die auf maximal 16 Bits dargestellt sind, verschwenden Sie immer noch die Hälfte des Registerraums, als wenn Sie an einer 32-Bit-CPU arbeiten würden. Und im Allgemeinen gilt: Je größer die Register, desto größer ist der Speicherverbrauch. Wie auch immer Sie sich vorstellen, dass Sie Ihren Code in etwas anderes als Assembler schreiben, Sie sind den Optimierungen Ihres Compilers ausgeliefert. Und es gibt Fälle, in denen sogar ein optimaler Compiler Ihren Code doppelt so viel Speicher benötigt wie in der 32 Bit Architektur –

+3

@TripShock .. lesen Sie hier für weitere Beweise: http://en.wikipedia.org/wiki/64_bit#Pros_and_cons :) –

1

Mein Verständnis ist, dass in den meisten Fällen gibt es keinen Leistungsgewinn als solche ist, abgesehen von der Möglichkeit, mehr Speicher zu verwenden. (Dies kann jedoch eine höhere Leistung zur Folge haben, wenn Sie beispielsweise viel mit 64-Bit-Datentypen arbeiten).

4

Wann hörten sie auf, in Anzeigen zu lügen? Habe ich etwas verpasst? ;-)

Der wichtigste Performance-Vorteil ist, dass in 64-Bit-Systemen, die Sie mehr als 4 GB RAM zuweisen können (tatsächlich auf den meisten Systemen, die mehr 2GB sind) ohne Austausch. Das ist ein großer Geschwindigkeitsvorteil , wenn Sie es benötigen.

So 64bit gibt einen Vorteil, wenn Sie Anwendungen haben, die viel RAM (Bild/Video/Audio-Verarbeitung, Welt/Universum Simulationen) benötigen.

Hinzu kommt, dass die 64-Bit-CPUs auch Befehle, die auf 64-Bit-Datentypen arbeiten (so müssen Sie nicht die mit 32-Bit-Typen emulieren). Das ist auch ein Vorteil, aber es ist a) nicht so groß, weil Sie die Algorithmen diese Typen verwenden müssen und die meisten nicht b) sie sind immer noch langsamer als 32-Bit-Typen (aber schneller als die Emulation).

Um Ihnen eine Idee zu geben, hier ist ein alter Witz von einem Supercomputer Kerl: "Es dauert einen Tag, um die Daten von den Datenträgern zu laden, dann dauert das Programm fünf Minuten, um die Daten zu verarbeiten und dann brauchen wir einen weiteren Tag zu speichern das Ergebnis auf die Festplatte ". Lesen von Daten aus dem RAM ist zwischen 1000 und 1000000 mal schneller als ein Zugriff auf die Festplatte.

So alles in allem für die durchschnittlichen Benutzer, ein 64-Bit-System hat wenig bis gar keinen Vorteil.

+0

Ihre Antwort bringt den zweiten Teil meiner Frage in den Vordergrund ... müssen wir Änderungen im Code vornehmen, um für 64-Bit zu optimieren? Da bei der Verwendung von 64-Bit-Datentypen die einzige Änderung erforderlich ist, müssen wir den Code dafür nicht wirklich ändern, da 64-Bit-Compiler Typen wie Int automatisch in 64-Bit konvertieren (weil seine Größe ist an die Wortgröße gebunden). Aber ich habe auch irgendwo gelesen, dass Änderungen am Code erforderlich sind, um die vollen Vorteile von 64-Bit zu bekommen ... was ändert sich genau? – TripShock

+0

Der meiste Code verwendet eine bestimmte Schriftgröße anstelle von plain int. Selbst auf 64-Bit-Systemen ist "Int" normalerweise 32 Bit lang, weil so viel Code davon abhängt, dass es 32 Bit ist. 'lang' ist eine andere Sache, aber es gibt Compiler-Optionen, um es 32bit und' lang lang' 64bit zu machen. Was ist der Vorteil eines 64bit Loop Counters, der normalerweise deutlich unter 100000 liegt? –

+0

Also meine Schlussfolgerung lautet: Wenn Sie ein bestimmtes Problem haben (wie durch eine Menge Daten waten) und Sie einen Algorithmus haben, der große Typen verwenden kann, dann ist es wichtig. Denken Sie an fantastische Echtzeit-Grafikmanipulationen für Demos oder Spiele. Ihr Betriebssystem wird nicht schneller * und * es wird viel mehr RAM benötigen (da jeder Zeiger doppelt so viele Bytes benötigt). –

16

Die x64-Architektur verdoppelt die Anzahl der in der x86-Architektur verfügbaren allgemeinen Register, so dass Compiler mehr Daten in (sehr schnellen) CPU-Registern als in (relativ langsamem) RAM speichern können.

+2

Extra-Register ist riesig. Zusätzliche Adressierungsmodi können helfen (RIP). Und diese profitieren alle Code mit einer einfachen Neukompilierung. x86 wurde schon immer wegen niedriger Registerzahlen kritisiert. – phkahler

+0

tatsächlich ist es mehr als doppelt, weil Sie ESP/RSP haben, die nicht als allgemeiner Zweck verwendet werden kann, die Anzahl der GPRs von 6 bis 14 (7 bis 15, wenn Sie keinen Rahmenzeiger EBP verwenden) –

1

Einige gute Antworten hier.

Wie gesagt, Sie können auf unbegrenzte RAM zugreifen, die Leistung hilft, wenn Sie es benötigen.

Ich würde demütig hinzufügen, dass , wenn Sie es nicht benötigen, aber es trotzdem verwenden, wird es die Leistung zu verletzen.

Nie aus den Augen eines der ältesten Gesetze der Wissenschaft verlieren:

Natur verabscheut ein Vakuum

+0

Sie können 't Zugriff auf unbegrenzte RAM .. gibt es eine Grenze: http://en.wikipedia.org/wiki/64-bit#Limitations –

+1

@John: Du weißt, was ich meinte. –