Forum: Mikrocontroller und Digitale Elektronik 32 bit/ 64 bit


von Flo H. (tori1117)


Lesenswert?

Ich habe gelesen, dass eine 64 bit cpu bei smartphones selbst in einer 
32 bit software umgebung eine bessere performance zeigen als 32 Bit 
prozessoren.
Wie ist das möglich?

http://www.connect.de/news/android-smartphones-64-bit-cpu-ab-ende-2014-2250789.html

ich dachte immer, dass es so ist.

Ein LKW ist voll beladen und braucht zum Transport eine gewisse Zeit. 
Dann braucht ein halb so großer LKW die doppelte Zeit, da er zwei mal 
fahren muss. Reicht die Ladung nur um den kleinen LKW zu füllen, so sind 
beide gleich schnell.

64 bit hat ja vorteile z. B. beim verschlüsseln, grafikberechnungen

ich hoffe, das mir jemand das erkären kann.

gruß
Flo

: Bearbeitet durch User
von Ralph (Gast)


Lesenswert?

Moderne Proz in der Klasse arbeiten alle mit Cache, Pipeline und 
Branchperdiktion.

Das heiß das immer mehr aus dem Speicher gelesen wird als für die 
aktuelle Ausführung benötigt wird.
Dieses mehr ist optimaler Weise das was als nächstes ausgeführt werden 
soll.

Da oftmals die nächste Instruction im Speicher direkt die folgende 
Adresse ist, ergibt sich daraus das im 32Bit Umfeld die doppelte Anzahl 
an Intructions in den Cache, Pipeline und Branchperdiktion geladen 
werden kann.
Wenn diese damit dann auch umgehen können ergibt das einen 
Geschwindigkeitsvorteil.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Flo Haber schrieb:
> Ich habe gelesen, dass eine 64 bit cpu bei smartphones selbst in einer
> 32 bit software umgebung eine bessere performance zeigen als 32 Bit
> prozessoren.
> Wie ist das möglich?
Die Aussage lautet im Kern so:
1
Lantzsch betonte in dem Interview, dass die neuen 64-Bit-Prozessoren 
2
... eine bessere Performance zeigen als 32-Bit-Prozessoren.
Und das bedeutet nur: der neue Prozessor ist schneller als der Alte.
Der Grund: eine überarbeitete Prozessorarchitektur.
Und das ist eigentlich EXAKT das, was ich unter Weiterentwicklung 
verstehe und was seit Beginn der Prozessortechnik laufend passiert. 
Fazit: nichts wirklich Neues, nur Evolution.

: Bearbeitet durch Moderator
von Peter II (Gast)


Lesenswert?

64-Bit-Prozessoren haben oft mehr Register. Damit können mehr 
"Variablen" schnell angesprochen werden.

von (prx) A. K. (prx)


Lesenswert?

Ralph schrieb:
> Da oftmals die nächste Instruction im Speicher direkt die folgende
> Adresse ist, ergibt sich daraus das im 32Bit Umfeld die doppelte Anzahl
> an Intructions in den Cache, Pipeline und Branchperdiktion geladen
> werden kann.

Es besteht keinerlei Zusammenhang zwischen der Bandbreite des 
Instruction Fetch und der offiziellen "Bitbreite" des Prozessors. So ist 
auch die Anzahl parallel dekodierter und ausgeführten Befehle nicht von 
der Bitbreite abhängig, sondern nur von der Architektur der 
Implementierung.

Aber neuere Prozessoren und insbesondere die 64-Bit Highend-Versionen 
besitzen breitere interne Busse und Cache Anbindungen und auch eine 
breitere Anbindung des externen DRAM. Nicht weil sie 64-Bittig sind, 
sondern weil die bisherigen Versionen eher für Handys auf günstig und 
sparsam getrimmt waren und die Speicheranbindung deshalb sehr schmal 
ausfiel.

: Bearbeitet durch User
von Jonas Biensack (Gast)


Lesenswert?

Eh, die wollen halt mehr als 4GB Speicher ins Handy kriegen...

Gruß Jonas

von (prx) A. K. (prx)


Lesenswert?

Beispiel: "The first three generations of Tegra SoCs had an 
embarrassingly small amount of memory bandwidth, at least compared to 
Apple, Samsung and Qualcomm. Admittedly, Samsung and Qualcomm were late 
adopters of a dual-channel memory interface, but they still got there 
much quicker than NVIDIA did.

 With Tegra 4, complaints about memory bandwidth can finally be thrown 
out the window. The Tegra 4 SoC features two 32-bit LPDDR3 memory 
interfaces, bringing it up to par with the competition. The current max 
data rate supported by Tegra 4’s memory interfaces is 1866MHz, but that 
may go up in the future."

http://www.anandtech.com/show/6787/nvidia-tegra-4-architecture-deep-dive-plus-tegra-4i-phoenix-hands-on/5

Zum Vergleich: Aktuelle PC/Server-CPUs besitzen 2-4 Speicherkanäle mit 
je 64 Bits. Der Tegra 3 hatte einen mit 32 Bits, selbst der Tegra 4 hat 
nur 2 mit 32 Bits.

von (prx) A. K. (prx)


Lesenswert?

Lothar Miller schrieb:
> Der Grund: eine überarbeitete Prozessorarchitektur.

Die 64-Bit ARMs haben sowohl eine völlig neue Befehlssatzarchitektur mit 
mehr Registern, als auch eine aufwendiger gestaltete Implementierung als 
viele Vorgänger-Cores. Ob die Befehlssatzarchitektur derzeit eine Rolle 
spielt ist mir grad unklar - immerhin müssen dazu Betriebssystem und 
Anwendungen völlig neu auf 64 Bits portiert werden, sonst hat man einen 
64-Bit Prozessor mit 32-Bit System wie über viele Jahre in Windows 
üblich war.

Wie die Implementierung bei gleicher Befehlssatzarchitektur durchschlägt 
kann man beim Vergleich der Cortexe A7 und A15 sehen. Der Befehlssatz 
ist identisch, der Entwicklungszeitpunkt auch. Aber die Zielsetzung ist 
anders, der A7 ist für Handys vorgesehen (sehr beliebt bei den 
Chinesen), der A15 für Tablets. Der A15 ist schon bei gleichem Takt viel 
schneller als der A7, frisst aber auch viel mehr Strom.

Um beides unter einen Hut zu bekommen hatte ARM schon bisher bei der 
32-Bittern eine Doppelstrategie vorgesehen (BIG little): sowohl A7 Cores 
als auch A15 Cores auf den gleichen Chip zu packen und bei geringem 
Leistungsbedarf von den A15 auf die A7 umzuschalten. Die A15er sind dann 
samt Caches takt- und stromlos. Das ist ökonomisch machbar, da der 
Platzbedarf eines A7 Cores relativ zum gesamten SoC-Die gering ist.

: Bearbeitet durch User
von Flo H. (tori1117)


Lesenswert?

ok also kann man sagen, dass es nicht an 64 bit liegt, sondern generell 
an den verbesserungen der architektur und speicheranbindung..?

von (prx) A. K. (prx)


Lesenswert?

Ja. Wobei da ein ganzer Rattenschwanz an Details der Implementierung mit 
hineinspielt, von denen ich mir mit der Speicheranbindung nur eines 
rausgepickt hatte. Da sind beispielsweise noch Caches, Sprungvorhersage, 
Out-of-Order, uvam.

: Bearbeitet durch User
von Bernie (Gast)


Lesenswert?

Schau nach, wenn von den ersten Smartphones berichtet wird,
die bei ÜBLICHER Benutzung NICHT TÄGLICH an das Ladegerät
müssen. - DANN kannst du Fortschritt kaufen.

Wenn ein Executive Vice President was verlauten lässt,
macht er Versprechungen für sein Produkt. Das ist nur sein
Job.

Also: Wieder hinlegen und den Puls abklingen lassen...

von Flo H. (tori1117)


Lesenswert?

A. K. schrieb:
> Ja. Wobei da ein ganzer Rattenschwanz an Details der Implementierung mit
> hineinspielt, von denen ich mir mit der Speicheranbindung nur eines
> rausgepickt hatte. Da sind beispielsweise noch Caches, Sprungvorhersage,
> Out-of-Order, uvam.

ok danke für die erklärungen, jetzt verstehe ich es besser.

: Bearbeitet durch User
von Amateur (Gast)


Lesenswert?

Der Vergleich eines 32-Bit Kernes mit einem 64-er ist fast immer 
Sinnlos.
So weit mir bekannt, gibt es keinen Prozessor, bei dem alles gleich 
geblieben ist, nur die Register "breiter" geworden sind.
Normalerweise vergleicht man den "veralteten" Vorgänger mit dem 
weiterentwickelten Nachfolger. Diesen Ausgang kann man sich wohl denken.

Interessant wird aber der Vergleich, wenn man annimmt, dass der Neue 
immer ein doppelt so großes Datenvolumen schaufeln muss wie der 
Vorgänger. Also doppelte Datenbreite, doppelte Befehlslänge und doppelt 
solange Adresse.

von Marian (phiarc) Benutzerseite


Lesenswert?

Bernie schrieb:
> Schau nach, wenn von den ersten Smartphones berichtet wird,
> die bei ÜBLICHER Benutzung NICHT TÄGLICH an das Ladegerät
> müssen. - DANN kannst du Fortschritt kaufen.
>
> Wenn ein Executive Vice President was verlauten lässt,
> macht er Versprechungen für sein Produkt. Das ist nur sein
> Job.
>
> Also: Wieder hinlegen und den Puls abklingen lassen...

Sehr interessant, mein gut vier Jahre altes Smartphone lade ich etwa 
einmal pro Woche auf, bei nur wenig unter "typischem Nutzungsverhalten".

von (prx) A. K. (prx)


Lesenswert?

Amateur schrieb:
> Interessant wird aber der Vergleich, wenn man annimmt, dass der Neue
> immer ein doppelt so großes Datenvolumen schaufeln muss wie der
> Vorgänger. Also doppelte Datenbreite, doppelte Befehlslänge und doppelt
> solange Adresse.

Was nicht zutrifft. Die Befehlslänge ist völlig unabhängig von der 
Datenbreite. Ein 64-Bitter hat keine 64 Bit breiten Befehle, auch in 
Befehlen codierte Konstanten sind nicht unbedingt breiter.

Ebenso sind die verarbeiteten Daten nicht doppelt so breit. In den 
beiden gängigsten 64-Bit Datenmodellen in C (LP64 und LLP64) ist "int" 
nur 32 Bits breit. Streng doppelt breit sind tatsächlich nur die 
Adressen in Registern und im Speicher - nicht aber in den Befehlen.

Der RAM-Verbrauch von ansonsten gleichen 64-Bit Programmen steigt 
hauptsächlich durch breitere Adressen im RAM, d.h. Pointer. Die 
Befehlscodierung zu vergleichen kann auch noch eine gewisse Rolle 
spielen, aber deren Bilanz ist schwerer abzuschätzen, da man dann sowohl 
bei PCs als auch bei ARM effektiv verschiedene Architekturen vergleicht 
und die grössere Anzahl Register ein 64-Bit Programm auch kürzer machen 
kann.

Am besten vergleichbar ist hier noch amd64 vs x32 bei PCs mit Linux. Die 
kompakteste und schnellste Variante bei PCs ist nicht selten x32 - es 
verknüpft die Vorteile der amd64 Architektur mit dem reduzierten 
Speicherverbrauch durch 32-Bit Adressen.

Zudem sollte man beachten, dass Fliesskommarechnung und SIMD-Befehle von 
der Adressbreite und der Datenbreite der Integer-Operationen völlig 
unbeeinflusst sind. Weshalb sich beispielsweise die Breite von 
Cache-Ports und der Durchsatz des Speichers schon länger eher an solchen 
Operationen als an Integer-Operationen orientiert.

: Bearbeitet durch User
von Stefan (Gast)


Lesenswert?

Bei x86 zeigt sich allerdings dass die modernen, 64-Bit Ausführungen mit 
64-Bit Software mindestens gleich schnell laufen wie mit 32-Bit. Selbst 
dann wenn die Programme nicht mit grossen Datenmengen hantieren. Bei 
identischer HW wohlgemerkt - wenn es nicht gerade ein Atom ist.
Dass der RAM Bedarf sich erhöht war zu erwarten. Erwartet wurde aber 
auch dass "normale" Programme eher langsamer werden, da mehr Daten schon 
wegen der 64-Bit Pointer über den Bus müssen. Das ist jedoch nicht 
eingetreten.
Wie so oft laufen die Theoretiker der Realität hinterher und tun 
anschließend so als wenn sie es immer gewusst hätten ;).

von (prx) A. K. (prx)


Lesenswert?

Stefan schrieb:
> Bei x86 zeigt sich allerdings dass die modernen, 64-Bit Ausführungen mit
> 64-Bit Software mindestens gleich schnell laufen wie mit 32-Bit. Selbst
> dann wenn die Programme nicht mit grossen Datenmengen hantieren.

Wenn du das in dieser Form vergleichen willst, musst du auf der gleichen 
Hardware die gleiche Befehlssatzarchitektur vergleichen. Das ist bei x86 
aber i.d.R. nicht der Fall, denn mit der 64-Bit Erweiterung amd64 hat 
sich die markant verbessert:
(1) Mehr Register, alle auch byteweise verwendbar.
(2) PC-relative Adressierung von Daten (markant bei -fPIC).
(3) SSE statt x87 bei Fliesskommarechnung.
Im x86 Modus dieser Hardware können (1) und (2) nicht genutzt werden, 
und (3) wird aufgrund historischer Systemkonventionen in normaler 
Programmierung meist unterschiedlich gehandhabt.

Das einzige Szenario, wo ein realistischer Vergleich bei PCs gut möglich 
ist, ist amd64(=x64) gegenüber dem in Linux unterstützten x32 Modell. Da 
sind Befehlssatz/Register identisch, der Unterschied ist einzig die 
Nutzung als 64-Bit v. 32-Bit Architektur.

: Bearbeitet durch User
von Lukey S. (lukey3332)


Lesenswert?

Soweit ich weis, laufen programme unter Android in ner Java-VM. Weiss 
net wie das bei Apple is, aber das könnte ein grund sein, warum "32-Bit" 
programme auf nem 64-Bit prozessor schneller laufen.

von (prx) A. K. (prx)


Lesenswert?

Lukas Straub schrieb:
> Soweit ich weis, laufen programme unter Android in ner Java-VM. Weiss
> net wie das bei Apple is, aber das könnte ein grund sein, warum "32-Bit"
> programme auf nem 64-Bit prozessor schneller laufen.

Apple verwendet Objective C, also einen herkömmlichen Compiler.

ARMs 64-Bit Architektur ist freilich mit ARMs 32-Bit Architekturen 
inhaltlich nicht verwandt, sondern komplett neu entstanden. Es ist daher 
nicht möglich, aus Vergleichen zwischen 64-Bit ARMv8 und 32-Bit ARMv7 
Systemen und Programmen allgemeine Aussagen über die Performance von 
64-Bit und 32-Bit Programmierung abzuleiten, da eben nicht nur die 
Breite sondern auch die Befehlssatzarchitektur eine andere ist.

Interessanter wären da Erfahrungen mit IBMs Power Architektur auf 
Systemen, in denen diese in beiden Spielarten verwendet wird, wie etwa 
AIX. Da ist wirklich nur die Breite unterschiedlich.

: Bearbeitet durch User
von Stefan R. (srand)


Lesenswert?

Lukas Straub schrieb:
> Soweit ich weis, laufen programme unter Android in ner Java-VM. Weiss

Nein, sie laufen in einer Dalvik-VM.

von Konrad S. (maybee)


Lesenswert?

A. K. schrieb:
> Am besten vergleichbar ist hier noch amd64 vs x32 bei PCs mit Linux. Die
> kompakteste und schnellste Variante bei PCs ist nicht selten x32 - es
> verknüpft die Vorteile der amd64 Architektur mit dem reduzierten
> Speicherverbrauch durch 32-Bit Adressen.

Meine Beobachtung ist, dass auf x86-Systemen rechenintensive 
gcc-kompilierte Software im der 64-Bit-Version schneller ist als die 
gleiche Software der 32-Bit-Version. Auf einem Mehrprozessorsystem unter 
Solaris ist die 64-Bit-Version ca. 30% schneller. Auf 
Einprozessor-Linux-Systemen kommt ebenfalls die 64-Bit-Version schneller 
zum Ergebnis. Demgegenüber ist auf einem Solaris-SPARC-System kein 
Unterschied zwischen 32- und 64-Bit-Version feststellbar. Bei den 
Vergleichen wurden die 32- und 64-Bit-Version auf jedem System mit dem 
gcc erstellt. Die gleiche Software unter Windows mit MSVC kompiliert 
weist keine Performanz-Unterschiede in den 32- und 64-Bit-Versionen auf. 
Der Vergleich zwischen Windows und Linux bzw. Solaris macht in diesem 
Fall keinen Sinn, da einerseits die Hardware der Solaris-Systeme nicht 
mit dem Rest vergleichbar ist und andererseits auf den Windows-Systemen 
die üblichen Desktop-Rechner-"Beigaben" (Virenschutz etc.) mitlaufen.

von (prx) A. K. (prx)


Lesenswert?

A. K. schrieb:
> Das einzige Szenario, wo ein realistischer Vergleich bei PCs gut möglich
> ist, ist amd64(=x64) gegenüber dem in Linux unterstützten x32 Modell. Da
> sind Befehlssatz/Register identisch, der Unterschied ist einzig die
> Nutzung als 64-Bit v. 32-Bit Architektur.

PS: Bei der Suche drauf achten, dass viele Leute x32 und x86 
verwechseln.

von Flo H. (tori1117)


Lesenswert?

ich kenne mich nicht so gut aus, aber wäre es möglich die 64 bit in 2x 
32 bit aufzuteilen um 2 32 werte gleichzeitig zu berechnen?

von Maxx (Gast)


Lesenswert?

Flo Haber schrieb:
> ich kenne mich nicht so gut aus, aber wäre es möglich die 64 bit in 2x
> 32 bit aufzuteilen um 2 32 werte gleichzeitig zu berechnen?

Das geht so einfach nicht. Dafür braucht es Dinge, wie die SSE/MMX 
Erweiterung (SIMD)

Ansonsten ist es schwierig weil Überläufe, Vergleiche, etc extra 
betrachtet werdebn müssen. Nur für einen kleinen Teil von Operationen 
(z.B. Bitweise Logik ohne Flagprüfung) kannst du so einen Vorteil 
herausholen.

Aber z.B. ein simpler 32 Bit Addierer:

0x88888888 + 0x88888888 -> 0x11111110 + Flags
0x00000000 + 0x11111111 -> 0x11111111

in einem simplem 64 Bit Addierer konkateniert:

0x0000000088888888 + 0x1111111188888888 -> 0x1111111211111110

Den Überlauf da auszuklamüsern ist aufwendiger als es direkt in 2 ALU 
Operationen zu machen.

von (prx) A. K. (prx)


Lesenswert?

Flo Haber schrieb:
> ich kenne mich nicht so gut aus, aber wäre es möglich die 64 bit in 2x
> 32 bit aufzuteilen um 2 32 werte gleichzeitig zu berechnen?

Das geschieht seit langem im Rahmen von zunächst MMX, später SSE 
Befehlen. Aber dafür werden separate ALUs verwendet, denn ALUs 
einzusparen lohnt nicht, wenn die Daten deshalb einen weiten Weg durch 
verschiedene Teile eines Prozessors nehmen müssten. Das braucht nämlich 
Raum und Zeit.

: Bearbeitet durch User
von (prx) A. K. (prx)


Lesenswert?

Maxx schrieb:
> Den Überlauf da auszuklamüsern ist aufwendiger als es direkt in 2 ALU
> Operationen zu machen.

Da die ganzzahligen SSE Befehle ihre Operanden in wählbar 8, 16 oder 32 
Bit breite Teile aufdröseln, sind dort vermutlich schon entsprechend 
konfigurierbare Recheneinheiten im Einsatz.

> Den Überlauf da auszuklamüsern ist aufwendiger als es direkt in 2 ALU
> Operationen zu machen.

Das sehe ich bei Addern eigentlich nicht als arg kompliziert an.

: Bearbeitet durch User
von MCUA (Gast)


Lesenswert?

ARMv8 ist für 32Bit (oder kleiner) eher noch schlechter als die 
Vorgänger, weil auch hier nur max 32 OPcode-bits möglich sind!
(Man musste also vom Vorgänger Befehle für 64Bit (nur LD/ST) abzwacken)

von (prx) A. K. (prx)


Lesenswert?

MCUA schrieb:
> (Man musste also vom Vorgänger Befehle für 64Bit (nur LD/ST) abzwacken)

Nein. ARMv8 basiert nicht auf der Codierung von ARMv7, das ist keine 
Erweiterung, sondern ein Neudesign. Es gab also nichts abzuzwacken.

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.