Frage

Ich glaube, ich auf x86 bin konzentriert, aber ich bin in der Regel im Schritt von 32 auf 64 Bit interessiert.

Logisch, das kann ich Konstanten und Zeiger sehen, die in einigen Fällen größer sein, so Programme sind wahrscheinlich größer sein. Und der Wunsch Erinnerung an Wortgrenzen für Effizienz zuweisen würde bedeuten, mehr Weißraum zwischen Zuweisungen.

Ich habe auch gehört, dass 32-Bit-Modus auf der x86 seinen Cache zu leeren hat, wenn Kontextwechsel aufgrund möglicher überlappende 4G Adressräume.

Also, was sind die wirklichen Vorteile von 64-Bit?

Und als Zusatzfrage, würden 128 Bit noch besser sein?

Edit:

Ich habe mein erstes 32/64 Bit-Programm gerade geschrieben. Es macht verkettete Listen / Bäume von 16 Byte (32b-Version) bzw. 32 Byte (64b Version) Objekte und macht eine Menge stderr zu drucken - keine wirklich nützliches Programm, und nicht etwas typisch, aber es ist mein erster

Größe: 81.128 (32b) v 83672 (64b) - so nicht viel Unterschied

Geschwindigkeit: 17s (32b) v 24s (64b) - läuft auf 32-Bit-OS (OS-X 10.5.8)

Update:

Ich nehme zur Kenntnis, dass ein neues Hybrid-x32 ABI (Application Binary Interface) entwickelt wird, die 64b ist aber Zeiger 32b Anwendungen. Bei einigen Tests kommt es zu kleineren Code und eine schnellere Ausführung als jeder 32b oder 64b.

https://sites.google.com/site/x32abi/

War es hilfreich?

Lösung

Wenn Sie den Zugriff auf mehr Speicher benötigen, dass 32b Adressierung wird es Ihnen ermöglichen, werden die Vorteile klein sein, falls vorhanden.

Wenn auf 64b CPU ausgeführt wird, können Sie die gleiche Speicherinterface egal, wenn man 32b oder 64b Code ausgeführt werden (Sie verwenden den gleichen Cache und gleichen BUS).

Während der x64-Architektur ein paar Register hat, die einfachen Optimierungen ermöglicht, diese oft durch die Tatsache Zeiger entgegengewirkt wird, ist jetzt größer und mit beliebigen Strukturen mit Zeigern führen zu einem höheren Speicherverkehr. Ich würde die Erhöhung der Gesamtspeicherbelegung für eine Anwendung 64b schätzt im Vergleich zu einem 32b eines um 15-30% zu sein.

Andere Tipps

Ich sehe, typischerweise eine 30% ige Verbesserung der Geschwindigkeit für rechenintensive Code auf x86-64 im Vergleich zu x86. Dies ist wahrscheinlich aufgrund der Tatsache, dass wir Bit 16 x 64 Universalregister und 16 x SSE-Register anstelle von 8 x 32 Bit Universalregister und 8 x SSE-Register haben. Dies ist mit den Intelen ICC-Compiler (11.1) auf einer x86-64 Linux - Ergebnisse mit anderen Compilern (zum Beispiel gcc), oder mit anderen Betriebssystemen (zum Beispiel Windows), kann natürlich anders sein

.

Unabhängig von den Vorteilen, würde ich vorschlagen, dass Sie immer Ihr Programm für das Standardwortgröße (32-Bit oder 64-Bit) Systems zusammenstellen, denn wenn Sie eine Bibliothek als 32-Bit-Binär-kompilieren und bieten sie auf einem 64-Bit-System, werden Sie niemanden zwingen, die Verbindung mit Ihrer Bibliothek will, um ihre Bibliothek (und alle andere Bibliotheksabhängigkeiten) als 32-Bit-binär-zu schaffen, wenn die 64-Bit-Version der Standard verfügbar ist. Dies kann durchaus ein Ärgernis für alle. Im Zweifelsfall beide Versionen Ihrer Bibliothek zur Verfügung stellen.

In Bezug auf die praktischen Vorteile von 64-Bit ... das offensichtlichste ist, dass Sie einen größeren Adressraum erhalten, so dass, wenn mmap eine Datei, können Sie mehr davon auf einmal (und laden größere Dateien in dem Speicher) adressieren. Ein weiterer Vorteil besteht darin, dass der Compiler unter der Annahme, macht einen guten Job einer Optimierung, viele Ihrer arithmetischen Operationen können (zum Beispiel, indem zwei Paare von 32-Bit-Zahlen in zwei Registern und zwei fügt in einzelner Add-Operation) parallelisiert werden, und große Anzahl Berechnungen werden schneller ausgeführt werden. Das heißt, die ganze 64-Bit-vs 32-Bit, was werden Sie nicht mit asymptotischen Komplexität helfen, so dass, wenn Sie Ihren Code suchen zu optimieren, sollten Sie vielleicht eher an den Algorithmen der Suche werden als die konstanten Faktoren wie diese.

Bearbeiten :
Bitte ignorieren Sie meine Aussage über die parallelisierte hinaus. Dies wird nicht durch eine gewöhnliche Add-Anweisung ausgeführt ... Ich war verwirrend, dass mit einigen der vektorisiert / SSE-Befehle. Eine genauere Nutzen, abgesehen von dem größeren Adressraum ist, dass es mehr Mehrzweckregister sind, was bedeutet, mehr lokale Variablen in der CPU-Registerdatei gehalten werden, was viel schnellen Zugriff ist, als wenn Sie die Variablen in der platzieren Programmstapel (was normalerweise bedeutet, auf die L1-Cache ausgehen).

Neben mehr Register, 64-Bit hat SSE2 standardmäßig. Dies bedeutet, dass man in der Tat einige Berechnungen parallel ausführen. Die SSE-Erweiterungen hatten auch andere Leckereien. Aber ich denke, der Hauptvorteil ist nicht auf das Vorhandensein der Erweiterungen zu überprüfen hat. Wenn es mal 64 ist, hat es SSE2 zur Verfügung. ... Wenn ich mein Gedächtnis nicht trügt.

Nur Rechtfertigung für die Anwendung auf 64 Bit zu bewegen ist Notwendigkeit für mehr Speicher in Anwendungen wie große Datenbanken oder ERP-Anwendungen mit mindestens 100s der gleichzeitigen Benutzer, wo 2-GB-Grenze ziemlich schnell überschritten werden, wenn Anwendungen für eine bessere Leistung zwischenzuspeichern. Dies ist Fall speziell auf Windows-Betriebssystem, wo integer und lange noch 32 Bit (sie neuen Variable _int64 haben. Nur Zeiger sind 64 Bit. In der Tat WOW64 sehr auf Windows x64 ist so optimiert, dass 32-Bit-Anwendungen mit niedrigeren Gebühren laufen auf 64-Bit-Windows- OS. Meine Erfahrung auf Windows x64 32-Bit-Anwendung Version 10-15% schneller als 64-Bit, da in ersterem Fall zumindest für proprietäre Speicher Datenbanken laufen Sie Zeiger arithmatic für die Aufrechterhaltung der B-Baum (rechenintensivsten Teil der Datenbank-Systeme) verwenden können, . Compuatation intensive Anwendungen, die für höchste Genauigkeit große Dezimalstellen erfordern nicht durch einen Doppelklick auf 32-64 Bit-Betriebssystem gewährt. Diese Anwendungen _int64 nativ in anstelle von Software-Emulation verwenden können. natürlich große Disk-basierte Datenbanken werden auch Verbesserung gegenüber 32-Bit einfach aufgrund zeigen um die Fähigkeit für das Caching von Abfrageplänen große Speicher zu verwenden und so weiter.

Weitere Daten zwischen der CPU und RAM für jeden Speicher holen (64 Bits anstelle von 32), so 64-Bit-Programme übertragen werden können schneller sie sind so geschrieben vorgesehen sein, dass sie richtig nutzen diese.

Im speziellen Fall von x68 bis x68_64, das 64-Bit-Programm wird etwa die gleiche Größe, wenn nicht sogar etwas kleiner, ein bisschen mehr Speicher und schneller laufen. Meistens ist dies, weil x86_64 nicht nur 64-Bit-Register hat, hat es auch doppelt so viele. x86 verfügt nicht über genügend Register kompilierten Sprachen so effizient zu machen, wie sie sein könnten, so x86-Code eine Menge von Anweisungen und Speicherbandbreite verbringt Daten zurück verlagert und her zwischen den Registern und Speichern. x86_64 hat viel weniger davon, und so dauert es ein wenig weniger Platz und läuft schneller. Floating-Point-und Bit-twiddling Vektorbefehle sind auch wesentlich effizienter in x86_64.

In der Regel aber 64-Bit-Code ist nicht unbedingt schneller, und ist in der Regel größer, sowohl für Code und Speichernutzung zur Laufzeit.

Jede Anwendungen, die CPU-Auslastung wie Transcodierung erfordern, Anzeigeleistung und Medien machen, sei es Audio- oder visuelle sein, wird sicherlich erfordern (zu diesem Zeitpunkt) und Nutzen von 64 Bit und 32 Bit aufgrund der Fähigkeit der CPU zu viel mit der schieren Menge an Daten, die auf sie geworfen. Es ist nicht so sehr eine Frage des Adressraumes, wie es die Art und Weise ist die Daten behandelt werden. Ein 64-Bit-Prozessor, 64-Bit-Code angegeben, wird ein bessere Leistung, insbesondere mit mathematisch schwierig Dingen wie Umcodierung und VoIP-Daten - in der Tat, jede Art von ‚Mathematik‘ Anwendungen sollte durch die Verwendung von 64-Bit-CPUs und Betriebssystemen profitieren. Prüfen Sie mich falsch.

Ich bin Codierung ein Schach-Engine. Die beste Zug Extraktion einer Minimax-basierte Baumsuche zu Tiefe 9 (von einer bestimmten Position) unter Verwendung nahm ~ 17.0s konfigurations Win32 und nachdem es braucht nun ~ 10.3s bis X 64 umgeschaltet wird. Das ist 41% der Beschleunigung!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top