Was ' ist an x64 vs x86 so besonders? [geschlossen]

geschlossen . Diese Frage benötigt Details oder Klarheit . Derzeit werden keine Antworten akzeptiert.

Kommentare

  • Duplikat von stackoverflow.com/questions/607322/… , was ich leider ' nicht kennzeichnen kann, weil es ' auf SO ist, nicht auf Programmierern.
  • @Matthew Read: Itanium ist auf dem Markt spektakulär gescheitert, weil es bekanntermaßen schwierig war, Compiler für die ISA zu schreiben. Der HPC-Markt hatte ihn fast aufgegeben, lange bevor AMD seine Erweiterungen einführte.
  • @Mathew, das könnte man über Intel sagen! Wenn es aus Gründen der Abwärtskompatibilität nicht ' t wäre, würden wir an CPUs mit vernünftigen Befehlssätzen und Netzwerkbyte-Reihenfolge arbeiten.
  • @Matthew: Haben Sie sich jemals das Itanium angesehen? Befehlssatz? Was ein Alptraum! Das Verschieben der Anweisungsplanung in den Compiler war eine schlechte Idee. Wenn Sie ein gutes 64-Bit-Modell wünschen, lesen Sie DEC ' s Alpha.
  • @Mathew, unterschätzen Sie nicht die Bedeutung einer abwärtskompatiblen Plattform.

Antwort

Der einzige wirkliche Unterschied, den Sie bei der Verwendung einer HLL bemerken würden, ist die Codegröße. und zu entdecken, dass einige Funktionen / Bibliotheken für x64 noch nicht verfügbar sind. Oh, und x64-Code ist zumindest unter .NET tendenziell weniger leistungsfähig. Die App, an der ich arbeite, läuft beim Kompilieren für x86 etwa 20% schneller. Ich weiß nicht, ob dies daran liegt, dass ich mehr Busbandbreite verwende, um 8-Byte-Mengen zu verschieben, oder ob ein „Chunking“ stattfindet Ein, um 32-Bit-APIs an 64-Bit anzupassen.

Kommentare

  • Nicht so sehr die Busbandbreite der Bewegungen als vielmehr die Tatsache, dass, wenn Sie Wenn Sie sich mit 64-Bit-Mengen im Vergleich zu 32-Bit-Mengen befassen, haben Sie ' Ihre Cache-Größen effektiv halbiert.
  • @Brian: Ausgezeichneter Punkt, ich hatte nicht ' habe nicht daran gedacht.
  • Insbesondere bei referenzlastigem .NET, bei dem alles ein Zeiger (Referenz) ist.

Antwort

Auf der Ebene, über die Sie sprechen (.NET), gibt es kaum Unterschiede. Wenn Sie vollständig verwalteten Code verwenden, kompiliert die JIT Ihren Code automatisch und funktioniert nahezu gleich, mit unterschiedlichen Leistungsmerkmalen. Für einige Dinge ist es schneller (Verarbeitung vieler Daten, Daten könnten in 64-Bit-Blöcken verarbeitet werden, mehr Register verfügbar usw.), und für andere ist es langsamer (64-Bit-Daten (dh Zeiger), für den Anfang langsamer in den Cache zu laden Dies bedeutet mehr Daten und langsamere Übertragungen aus dem Hauptspeicher.

Sie müssen sich nur dann wirklich um den Unterschied kümmern, wenn Sie nicht verwalteten Code verwenden. Dieser Blog enthält eine gute Übersicht über die Probleme.

Kommentare

  • Sie haben ' keine 64-Bit-Daten, es sei denn, Sie geben sie an. Zeiger werden auf 64 Bit hochgestuft, Ints und Floats bleiben jedoch gleich. Fast alle 32-Bit-Systeme unterstützen 64-Bit-Float (Double) und viele 64-Bit-Int (Long Long). 64-Bit öffnet auch die neueren Funktionen, einschließlich mehr vom Benutzer sichtbarer Register.
  • @Omega, Zeiger sind Daten. Sie müssen in den Cache verschoben werden, um verwendet zu werden. Die Ausführung mit 64 Bit bedeutet, dass jede Referenz oder Dereferenzierung möglicherweise eine oder mehrere davon in den Cache verschieben kann, und erweitert außerdem jedes Objekt, das Referenzen enthält. Aber Sie haben Recht, dass die Anweisungshälften falsch sind. Ich werde das ändern. Vielen Dank.
  • Nach meiner Erfahrung sind Zeiger ' nicht sehr häufig. Aber ich mache ' kein OOP und hatte eine sehr schmerzhafte frühe Erfahrung mit schlechten Zeigern, daher benutze ich sie nur, wenn es absolut notwendig ist. IMO-Zeiger beanspruchen also ' nicht sehr viel Adressraum. Moderne OTOH-Compiler generieren viel Loop-Unrolling, Loop-Peeling und Sonderfallcode, sodass die Codegröße sehr groß werden kann.
  • @Omega, jedes Mal, wenn Sie auf eine komplexe Objektinstanz in einer von Ihnen verwendeten verwalteten Sprache verweisen ein Zeiger unter der Haube.

Antwort

Die .NET-Programme, die für 64-Bit-Systeme geschrieben werden, haben Ein größerer Adressraum ist daher viel schneller als x86-32-Bit-basierte Programme. Auch die neuesten .NET Language-Compiler produzieren viel optimierten Code. Die JIT wurde in den letzten Jahren ebenfalls verbessert, und jetzt können Sie die Multi-Core-JIT-Optimierung durchführen. Debugger werden ebenfalls verbessert. In der Zwischenzeit wird besserer und optimierter Code für 64-Bit-basierte Systeme erstellt.

Kommentare

  • Nicht wirklich.Wie der vor über einem Jahr erwähnte Top-Kommentar zeigt, hat x86-64 einen weitaus besseren Registersatz und kann nicht als " -Erweiterung " betrachtet werden. Als nächstes macht der Adressraum ' Programme nicht schneller. Dann ihr Marktanteil. Derzeit sind 64 Bit führend, 32 Bit die Minderheit (Steam-Inventar, August 2012).
  • Dies ( en.wikipedia.org/wiki/X86-64 ) sagt, dass X86-64 eine Erweiterung von x86 ist. Möglicherweise wirkt sich der Adressraum nicht direkt auf Programme aus, die langsam ausgeführt werden, sondern auf den Speicher, wodurch Programme langsam ausgeführt werden. In der 64-Bit-Systementwicklung haben Sie möglicherweise nur wenige Jobs mehr, aber keine große Zahl. Für den Arbeitsmarkt ' sehen Sie nicht nur fortgeschrittene Länder, sondern nehmen Sie auch Länder der Dritten Welt in Länder. Eine gute Referenz finden Sie unter: arstechnica.com/features/2008/09/x86-64 .
  • Sie ' zitiert einen 4 Jahre alten Artikel. 2012, im Jahr 2012, werden praktisch keine 32-Bit-x86-Prozessoren hergestellt, und dazu gehört auch die Low-End-CPU ', die für Länder der Dritten Welt bestimmt ist.
  • In Länder der 3. Welt, die einen großen Teil der Weltbevölkerung ausmachen, nutzen dieses System regelmäßig. Obwohl neue Systeme kommen, ist die Kaufrate im Vergleich zu mobilen Systemen nicht gut.
  • @Badar Zweifelhaft. Ich sehe hier in Lateinamerika 64-Bit-Prozessoren für Computer mit niedriger und mittlerer Reichweite. Ich stimme eher zu, dass 32-Bit-CPUs weg sind, zumindest für Desktops und Laptops der mittleren Preisklasse.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.