Ansicht umschalten
Avatar von Nalathni
  • Nalathni

mehr als 1000 Beiträge seit 09.09.2004

Re: Wie kann man 32 bit auf 64 bit umstellen?

eine 64 bit Anwendung kann in der Theorie 100% schneller laufen als der 32 Bit Abkömmling.

Nein.

64-bit-Anwendungen laufen in der Regel etwas schneller als 32-bit-Anwendungen, vor allem weil...

1) ...mehr CPU-Register genutzt werden können, und daher Zwischenergebnisse nicht so oft hin- und hergeschaufelt werden müssen.

2) ...durchgängig SSE2 genutzt werden kann (das können 32-bit-Anwendungen zwar prinzipiell auch, machen aber aus Kompatibilitätsgründen nur selten davon Gebrauch)

Diese beiden Hauptvorteile (außer dem deutlich größeren Adressraum) können Software durchaus beschleunigen, aber normalerweise ist man weit von 100% entfernt.

Und die "breiteren Autobahnen" bringen nicht den von Dir erhofften Nutzen, und zwar aus folgenden Gründen:

Abgesehen von Pointern sind die meisten Daten sowohl unter 32 als auch unter 64 bit gleich breit. Ein "int" ist normalerweise weiterhin 32 bit breit, ein "double" ist weiterhin 64 bit breit usw.

Und wenn man so einen "int" oder so von A nach B transferriert (z.B. vom RAM in ein CPU-Register), benötigt das genau gleich viel Zeit, auch wenn 32 der 64 bit ungenutzt bleiben. Bei Pointern, die tatsächlich 64 statt 32 bit breit sind, ergibt sich logischerweise auch kein Gewinn.

Gewinnt man dann wenigstens etwas, wenn man mit größeren Daten wie Strings arbeitet? Nein, denn abgesehen davon, dass Strings oftmals weiter in kleinen Häppchen von z.B. 8 bit verarbeitet werden müssen (sagen wir mal, um in einem UTF-8-String die Leerzeichen zu finden), kopieren auch 32-bit-Anwendungen größere Datenmengen (wie Strings) normalerweise sehr effizient ohne Umweg über 32-bit-Register (z.B. über MMX mit 128 bit Registerbreite).

Und das führt dazu, dass 64-bit-Anwendungen in bestimmten Fällen sogar langsamer werden können. Will man z.B. ein Array aus 1000 Pointern kopieren, sind das für eine 32-bit-Anwendungen 4 KB, für eine 64-bit-Anwendung aber 8 KB. Und um 8 KB im RAM zu bewegen, braucht es einfach doppelt so viel Zeit wie für 4 KB, ganz egal, ob das eine 32-bit- oder 64-bit-Anwendung macht (vorausgesetzt beide machen es so effizient wie möglich).

Unter'm Strich gewinnt man je nach Anwendung mit 64 bit normalerweise also ein paar Prozentpunkte (auch weil das Kopieren von großen Pointerlisten ja so häufig nicht vorkommt), aber erstens ist auch der theoretische Gewinn weit von 100% entfernt, und zweitens ist Deine Veranschaulichung Unsinn.

Eher andersherum: obwohl auf den Autobahnen mehr Verkehr ist (bis zu doppelt so breite Autos), können 64-bit-Anwendungen aufgrund anderer Vorteile der 64-bit-Architektur oft ein wenig schneller laufen.

Nachtrag: Und den von Dir verlinkten Artikel halte ich auch für... naja... sagen wir statt falsch mal gefährlich vereinfachend. Denn auch wenn das sicher theoretisch vorkommen kann, dass eine 32-bit-Anwendung Daten, die man in 64-bit-Häppchen verarbeiten könnte, nur in 32-bit-Häppchen verarbeitet, und damit nur halb so schnell arbeitet, kommt das in der Praxis eigentlich nicht vor (und wenn, dann ist die entsprechende 64-bit-Anwendung in der Regel vom selben Manko betroffen).

Das Posting wurde vom Benutzer editiert (08.06.2016 14:07).

Bewerten
- +
Ansicht umschalten