Forum: Mikrocontroller und Digitale Elektronik Bittiefe eines µCs


von Werner W. (bj20)


Lesenswert?

Hallo!

Ich bin Anfänger in der µC Programmierung und programmiere z.Z. einen 
8-Bit µC von Atmel mit AVR Studio 6.1 und gcc. Da ich zukünftig auch 
größere Projekte durchführen will, würde ich mich gerne mal informieren, 
was das genau mit der Bittiefe der µCs auf sich hat. Es gibt ja auch 
32-Bit µCs...

Mir ist klar, dass bei einem 8-Bitter in einem Rechenschritt 8 Bit 
verarbeitet werden und bei einem 32-Bitter eben 32. Heißt das also, um 
32 Bit zu verarbeiten benötigt ein 8-Bitter 4 Takte und ein 32-Bitter 
nur einen, hab ich das richtig verstanden?

Was genau ist dann bei der Programmierung zu beachten? Gibt es da 
Unterschiede, die zu beachten sind oder macht sich der Unterschied 
zwischen 8 und 32 Bit einfach nur in der Geschwindigkeit bemerkbar?

THX, lG

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Werner Weinwurm schrieb:

> Heißt das also, um
> 32 Bit zu verarbeiten benötigt ein 8-Bitter 4 Takte und ein 32-Bitter
> nur einen, hab ich das richtig verstanden?

Im Prinzip ja.

Andererseits: wenn du exakt 8 Bit bearbeiten willst, braucht ein
32-Bitter dafür eben in seinen Registern trotzdem 32 Bits, und muss
u. U. zusätzlichen Aufwand treiben, um dann genau die gewünschten
8 Bits da rauszupopeln.

> Was genau ist dann bei der Programmierung zu beachten?

Das hängt natürlich in erster Linie von deiner Programmiersprache ab.

In Assembler ist alles ganz anders, und du schreibst alles neu.

In C ist vieles gleich.  Allerdings bleibt der Unterschied, dass ein
‘int’ auf einem 8-Bitter eine Größe von 16 Bits hat, während es auf
einem 32-Bitter 32 Bits sind.

Man kann seine C-Programme zwischen beiden Welten weitgehend portabel
schreiben (erst recht, wenn man die seit C99 existierenden Datentypen
wie ‘uint8_t’, ‘uint_fast8_t’ usw. konsequent benutzt), aber das
passiert nicht automatisch.  Kommt hinzu, dass 32-Bit-Architekturen
in aller Regel die Daten auch im Speicher passend ausgerichtet haben
möchten (32-Bit-Daten müssen also auf einer durch 4 teilbaren Adresse
stehen), während den 8-Bittern das egal ist.

von Kindergärtner (Gast)


Lesenswert?

Werner Weinwurm schrieb:
> 32 Bit zu verarbeiten benötigt ein 8-Bitter 4 Takte und ein 32-Bitter
> nur einen, hab ich das richtig verstanden?
Grob formuliert, ja. Je nach Instruktion kann das auf den 8-Bitter aber 
auch noch länger dauern.

Der größere Unterschied ist der Adressraum. Die AVR's haben einen 
16bit-Adressraum, die können also maximal 2^16 Bytes an Daten (RAM, 
IO-Register) ansprechen. Um mit Pointern/Adressen zu rechnen brauchen 
die also immer 2 Takte oder mehr, da der Core ja intern nur mit 8Bit 
arbeitet.
Einige 8-Bitter (8051, PIC, einige der großen AVR's wimre) müssen 
komplizierte und Compiler-unfreundliche Umschaltmechanismen ("Banking") 
bemühen, um die Limitierung des Adressraums zu umgehen.

32bitter wie zB ARM haben einen 32bit-Adressraum, können also 4 GB an 
Daten direkt adressieren, und außerdem effizent mit den 
Adressen/Pointern rechnen. Dafür wird der Code aber auch etwas größer, 
da die Pointer-konstanten nunmal länger sind. Außerdem können diese den 
Flash, RAM, I/O-Register etc. komplett in einem Adressraum verwalten, 
d.h. die gleichen Instruktionen für Zugriff auf RAM&Flash verwenden. Bei 
Pointern ist es somit egal, wo sie hinzeigen. Dies vereinfacht die 
C/C++-Programmierung und den Compiler-Support.
ARM-Chips sind daher zwar etwas teurer, ist aber außerhalb von 
Serien-Produktion relativ egal...

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Kindergärtner schrieb:
> Dafür wird der Code aber auch etwas größer, da die Pointer-konstanten
> nunmal länger sind.

Außerdem braucht eine RISC-Architektur jedoch prinzipbedingt immer
zwei Befehle, um eine komplette Adresse zu laden.  (Prinzipbedingt
deshalb, weil die Befehlsbreite gleich der Busbreite ist, folglich
kann man in einem Befehl nie eine Konstante der vollen Breite
unterbringen.)

> Außerdem können diese den Flash, RAM, I/O-Register
> etc. komplett in einem Adressraum verwalten, d.h. die gleichen
> Instruktionen für Zugriff auf RAM&Flash verwenden.

Das hat aber nichts mit der Bitbreite zu tun, sondern mit der
Architektur: bei Harvard gibt es getrennte Busse, dafür kann auf
beiden Bussen (Daten und Befehle) gleichzeitig gearbeitet werden,
aber man braucht besondere Befehle, um von einem auf den anderen
Bus übergehen zu können.  Sowas gab's schon bei der PDP-11 (split I&D).

Bei von Neumann gibt es einen Bus, man hat nur eine Sorte Zeiger,
dafür müssen die Zugriffe serialisiert werden.

Atmel AVR ist halt derzeit der bekannteste Vertreter mit einer
Harvard-Architektur.  Wenn man seinen Mitstreiter MSP430 ansieht,
dann hat der als 16-Bitter aber eine von-Neumann-Architektur (wie
der ARM).  Auch der Z80 (kein Controller, aber ebenfalls 8-Bitter)
hat eine von-Neumann-Architektur.

von Werner W. (bj20)


Lesenswert?

Danke für die Infos, habe mir schon gedacht dass es bei Assembler ein 
größeres Problem ist... Mit Assembler habe ich noch absolut keine 
Erfahrung, werde es aber sicher irgendwann mal machen. Dann wird mir der 
Unterschied bestimmt klarer werden!

Vielen Dank!

von MCUA (Gast)


Lesenswert?

>Mir ist klar, dass bei einem 8-Bitter in einem Rechenschritt 8 Bit
>verarbeitet werden und bei einem 32-Bitter eben 32. Heißt das also, um
>32 Bit zu verarbeiten benötigt ein 8-Bitter 4 Takte und ein 32-Bitter
>nur einen, hab ich das richtig verstanden?
8/16/32 Biter heisst zunächst mal nur dass die interne Registerbreite 
8/16/32 Bit ist. Sonst nichts.
der Bus aussen, die Anzahl der benötigten Takte und auch der 
Adressbereich ist daraus nicht absehbar. zB kann auch ein 8Biter auch 
grössere Indexregister haben als 8 Bit, und kann somit auch entsprechend 
mehr adressieren. (obschon ein 32Biter wohl keine 16bit Indexregister 
haben wird).
In Realität gibt es oft nicht Die Harvard oder Die VonNeumann-Archit., 
sonderen Mischformen daraus. Auch wenn mit einem einzigsten Pointer der 
ganze (im uC vorhandene) Bereich adressiert werden kann, kann es 
trotzdem eine Harvard-Arch. sein.

von Falk B. (falk)


Lesenswert?

8/16/32 Bit ist wie 4/6/8 Zylinder beim Auto. Klingt nach mehr Power!
;-)

von Stefan (Gast)


Lesenswert?

> dass es bei Assembler ein größeres Problem ist

Nein, ein Problem ist es nicht. Du kannst problemslos auf 8bit 
Mikrocontrollern 32bit Berechnungen durchführen und umgekehrt. Am 
schnellsten sind natürlich Operationen in der nativen Breite. Das heisst 
aber keineswegs, dass die Prozessoren mit den anderen Breiten Probleme 
hätten.

Ein Problem wäre für mich, wenn etwas nicht geht, oder nur mit extremen 
Aufwand. Wenn zum Beispiel ein 64Bit Personal Computer nicht imstande 
wäre, Textdateien mit 8bit Zeichensatz zu lesen. Oder wenn ein 8bit 
Mikrocontroller keine 32bit Prüfsummen für Ethernet berechnen könnte. 
Oder wenn man an einen 32bit PC keine 16bit USB Scanner anschließen 
könnte. Doch all das geht selbstverständlich und ganz ohne Probleme.

> Prinzipbedingt deshalb, weil die Befehlsbreite gleich der Busbreite ist

Das trifft nicht auf AVR Mikrocontroller nicht ganz zu. Denn die laden 
mit einem einzigen Takt einen ganzen Befehl aus dem Programmspeicher, 
und der ist 16 Bit breit, obwohl die Register, das RAM und die I/O 
Schnittstellen 8 Bit breit sind.

Deswegen kann der ATmega1284 ohne besondere Erweiterung auch 128 
Kilobyte Programmspeicher nutzen, obwohl sein Programmzähler nur 16 Bit 
(entsprechend 65536 Adressen) breit ist.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Stefan schrieb:
>> Prinzipbedingt deshalb, weil die Befehlsbreite gleich der Busbreite ist
>
> Das trifft nicht auf AVR Mikrocontroller nicht ganz zu.

Der ist ja auch kein echter RISC-Prozessor.  Schon deshalb nicht,
weil er genügend Befehle hat, die mehr als einen Takt für die
Abarbeitung brauchen.  (RISC-Philosophie ist es ja, den Prozessor
so weiter runterzubrechen, dass alles in einem Takt geht.)

> Deswegen kann der ATmega1284 ohne besondere Erweiterung auch 128
> Kilobyte Programmspeicher nutzen, obwohl sein Programmzähler nur 16 Bit
> (entsprechend 65536 Adressen) breit ist.

Andere Baustelle.  Ein klassischer 32-bit-RISC-Prozessor hat halt die
unteren 2 Bits seines PCs hart auf 0 gehabt.  ARM ist dann nicht mehr
klassisch, denn mit dem Thumb haben sie 16-bit-Opcodes eingeführt,
und das eigentlich unbenutzte Bit 0 des PC dann als Kennzeichen für
die Unterscheidung zwischen ARM und Thumb genommen.

von Maxx (Gast)


Lesenswert?

Jörg Wunsch schrieb:
> Außerdem braucht eine RISC-Architektur jedoch prinzipbedingt immer
> zwei Befehle, um eine komplette Adresse zu laden.  (Prinzipbedingt
> deshalb, weil die Befehlsbreite gleich der Busbreite ist, folglich
> kann man in einem Befehl nie eine Konstante der vollen Breite
> unterbringen.)

Das ist nicht korrekt.
Korrekt ist, er kann die Addresse nicht in einem Opcode unterbringen. 
Aber dafür braucht es keine 2 Befehle also auch nicht zweimal Rechenzeit 
sondern lediglich den Zugriff auf zusätzliche Daten (die auch der CISC 
braucht)

Beispiel die ARM Pseudo Instruction "LDR rD, =Label" die exakt eine 
Instruktion LDR rD, [PC+#] und einen immediate-Wert (&Label) hinterlegt.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Maxx schrieb:
> Beispiel die ARM Pseudo Instruction "LDR rD, =Label" die exakt eine
> Instruktion LDR rD, [PC+#] und einen immediate-Wert (&Label) hinterlegt.

Für Daten, die „nah genug“ am aktuellen Code dran sind, umgeht man
damit das Problem einfach (und auf einem kleinen Controller sind dann
vermutlich alle Daten „nah genug“ dran ;).

von Marcus H. (mharnisch) Benutzerseite


Lesenswert?

Jörg Wunsch schrieb:
> Maxx schrieb:
>> Beispiel die ARM Pseudo Instruction "LDR rD, =Label" die exakt eine
>> Instruktion LDR rD, [PC+#] und einen immediate-Wert (&Label) hinterlegt.
>
> Für Daten, die „nah genug“ am aktuellen Code dran sind, umgeht man
> damit das Problem einfach (und auf einem kleinen Controller sind dann
> vermutlich alle Daten „nah genug“ dran ;).

Und wem das nicht reicht, der kann bei ARM auch auf MOV32 ausweichen. 
Dann hat man diesen vermeintlichen Nachteil auch beseitigt.

Außerdem existiert "der ARM" nicht. Bei den meisten ARM Cores ist eine 
Harvard Architektur im Sinne von getrennten Daten und Befehlsbussen 
implementiert.

Zumindest bei ARM Prozessoren mit Thumb-2 Befehlssatz ist der Code in 
realen Anwendungen auch nicht unbedingt größer als beispielsweise AVR 
Code. Das kommt sehr auf die Komplexität an -- und die muss dabei nicht 
mal so groß sein.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Marcus Harnisch schrieb:
> Zumindest bei ARM Prozessoren mit Thumb-2 Befehlssatz ist der Code in
> realen Anwendungen auch nicht unbedingt größer als beispielsweise AVR
> Code.

Das wollte ich damit auch nicht behauptet haben.  Thumb ist ganz
sicher der Trick, mit dem ARM den 32-Bittern in dieser Hinsicht
zum Durchbruch verholfen hat.

Es ging ja nur darum, die Unterschiede überhaupt zu benennen.

von MCUA (Gast)


Lesenswert?

Ein typ. RISC kann, wie geschrieben, definitiv nicht die complette 
Addresse im Opcode unterbringen (höchst ein Displacem.), was eindeutig 
grosser Nachteil ist..
Und deshalb sind deswegen auch weitere(r) Takt(e) nötig.
LDR (das eigentlich jede CPU kennt) ändert daran auch nichts.

>RISC-Philosophie ist es ja, den Prozessor
>so weiter runterzubrechen, dass alles in einem Takt geht.
RISC soll (leider) möglichst einfach sein, typ.weise immer gleiche 
OP-Code-Länge. Und wenn er selbst dann noch mehr als 1 Takt braucht (was 
oft bei LD/ST der Fall ist), ist es eben noch ein schlechter RISC.

>..lediglich den Zugriff auf zusätzliche Daten (die auch der CISC braucht)
Nö. Der CISC verputzt alles in einem.

von Maxx (Gast)


Lesenswert?

Jörg Wunsch schrieb:
> Für Daten, die „nah genug“ am aktuellen Code dran sind, umgeht man
> damit das Problem einfach (und auf einem kleinen Controller sind dann
> vermutlich alle Daten „nah genug“ dran ;).

Sind sie ja, denn die Daten stehen in vergleichbaren CISCs direkt an der 
Instruktion. Also nur um die Instruktionslänge von PC entfernt. Hier 
darfst du dir nun ein paar Byte mehr bis MB mehr Platz lassen.

von Maxx (Gast)


Lesenswert?

MCUA schrieb:
> Ein typ. RISC kann, wie geschrieben, definitiv nicht die complette
> Addresse im Opcode unterbringen (höchst ein Displacem.), was eindeutig
> grosser Nachteil ist..
> Und deshalb sind deswegen auch weitere(r) Takt(e) nötig.

Das ist auch beim CISC nötig. die zusätzlichen Bytes kommen auch nicht 
per Magie hinein.

Beim x86 z.B. verlängert der Immediate das Kommando um entsprechend 
1/4/8 Bytes.

von Stefan (Gast)


Lesenswert?

> Der ist ja auch kein echter RISC-Prozessor.

Bei Wikipedia steht das aber so: http://de.wikipedia.org/wiki/Atmel_AVR

Auch viele Bücher und der Conrad Shop bezeichnen die AVR Chips as RISC 
Controller.

Und ATMEL erklärt sogar, warum es RISC Controller sind: 
http://www.atmel.com/technologies/cpu_core/avr.aspx

von Jürgen S. (Firma: privat) (jschmied)


Lesenswert?

Ein 8-bitter muss bei breiteren Operanden diese 8 bit-weise verarbeiten. 
Das artet dann schon mal in grausammen Code aus. Auf einem 32bitter ist 
das ein Befehl.

In C:
                uint32_t a, b, c;
                c = a + b;

Assembler:
626C  EB48     MOVSF 0x48, 0x700
626E  F700     NOP
6270  EB49     MOVSF 0x49, 0x701
6272  F701     NOP
6274  EB4A     MOVSF 0x4A, 0x702
6276  F702     NOP
6278  EB4B     MOVSF 0x4B, 0x703
627A  F703     NOP
627C  50D9     MOVF FSR2L, W, ACCESS
627E  0F44     ADDLW 0x44
6280  6EE9     MOVWF FSR0L, ACCESS
6282  CFDA     MOVFF FSR2H, FSR0H
6284  FFEA     NOP
6286  50EE     MOVF POSTINC0, W, ACCESS
6288  0107     MOVLB 0x7
628A  2700     ADDWF nBytes, F, BANKED
628C  50EE     MOVF POSTINC0, W, ACCESS
628E  2301     ADDWFC dest, F, BANKED
6290  50EE     MOVF POSTINC0, W, ACCESS
6292  2302     ADDWFC pChunk, F, BANKED
6294  50EE     MOVF POSTINC0, W, ACCESS
6296  2303     ADDWFC src, F, BANKED
6298  5100     MOVF nBytes, W, BANKED
629A  6E4C     MOVWF [0x4C], ACCESS
629C  5101     MOVF dest, W, BANKED
629E  6E4D     MOVWF [0x4D], ACCESS
62A0  5102     MOVF pChunk, W, BANKED
62A2  6E4E     MOVWF [0x4E], ACCESS
62A4  5103     MOVF src, W, BANKED
62A6  6E4F     MOVWF [0x4F], ACCESS

von (prx) A. K. (prx)


Lesenswert?

Stefan schrieb:
>> Der ist ja auch kein echter RISC-Prozessor.
>
> Bei Wikipedia steht das aber so: http://de.wikipedia.org/wiki/Atmel_AVR

Die Definition, was genau RISC ausmacht, ist ziemlich offen. Nicht 
einmal die genaue Aufdröselung des Akronyms ist eindeutig, denn IBM 
hatte das C bei der Power Architektur angesichts der Grösse des 
Befehlssatzes wohlweislich als "Complexity" bezeichnet. Was heute auch 
die bessere Variante ist. Denn genau darum geht es: die Komplexität der 
Befehle gering zu halten, nicht die Anzahl.

Die Krone setzte dem Motorola/Freescale auf, indem sie die 
Coldfire-Architektur, urspünglich eine reduzierte Version der 68020, 
ebenfalls als RISC bezeichneten. Weil der Begriff damals grad en vogue 
war. Nur ist das reichlich absurd.

von MCUA (Gast)


Lesenswert?

>Sind sie ja, denn die Daten stehen in vergleichbaren CISCs direkt an der
>Instruktion.
Nein. In der Instruktion.

>> Ein typ. RISC kann, wie geschrieben, definitiv nicht die complette
>> Addresse im Opcode unterbringen (höchst ein Displacem.), was eindeutig
>> grosser Nachteil ist..
>> Und deshalb sind deswegen auch weitere(r) Takt(e) nötig.
>Das ist auch beim CISC nötig. die zusätzlichen Bytes kommen auch nicht
>per Magie hinein.
Nö, is nicht. Die 'zusätzlichen Bytes' stehen im OPCode, der ggfs (je 
nach CPU) schon in einem gelesen werden kann.

>Die Krone setzte dem Motorola/Freescale auf, indem sie die
>Coldfire-Architektur, urspünglich eine reduzierte Version der 68020,
>ebenfalls als RISC bezeichneten.
Die nennen das nicht RISC sondern VL(VariableLengh)-RISC. (also 
eigentlich ein Widerspruch in sich, wohl um auf Reduzierung vs 68k 
hinzudeuten).

von Marcus H. (mharnisch) Benutzerseite


Lesenswert?

MCUA schrieb:
>>Sind sie ja, denn die Daten stehen in vergleichbaren CISCs direkt an der
>>Instruktion.
> Nein. In der Instruktion.

Genau wie beim Thumb-2 (Pseudo)befehl MOV32. Mit acht 
hintereinanderliegenden Bytes wird eine beliebige 32bit Konstante 
geladen.
Dabei ist es vollkommen egal, ob die Daten in der Instruktion liegen, 
oder angehängt, oder wie im Falle von MOV32 auf zwei Opcodes verteilt 
wurden. Ausschlaggebend ist, dass sie sequentiell gelesen werden können.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Jürgen Schmied schrieb:
> Assembler:

Naja, da hast du dir die grauseligste Architektur als Beweis
ausgesucht. ;-)  Eine Akkumulator-Architektur halt.

Auf dem AVR:
1
        add r18,r22
2
        adc r19,r23
3
        adc r20,r24
4
        adc r21,r25

Nur: viele Operationen in kleinen Controllern brauchen keine 32 Bits.
Die müssen dann auch nicht erst vier Befehle dafür generieren.

von (prx) A. K. (prx)


Lesenswert?

MCUA schrieb:
> VL(VariableLengh)-RISC. (also eigentlich ein Widerspruch in sich,
> wohl um auf Reduzierung vs 68k hinzudeuten).

Yep, um trotz definitiver CISC den damaligen Modebegriff RISC unbedingt 
irgendwie unterbringen zu können. Was natürlich komplette Verarsche ist.

von MCUA (Gast)


Lesenswert?

>Genau wie beim Thumb-2 (Pseudo)befehl MOV32. Mit acht
>hintereinanderliegenden Bytes wird eine beliebige 32bit Konstante
>geladen.
Ja und?
Selbst wenn das in 1 Takt gehen würde (was meist nicht der Fall ist) 
sind damit die etlichen Nachteile der RISC ja nicht beseitigt.

>Ausschlaggebend ist, dass sie sequentiell gelesen werden können.
Nö. Ausschlaggebend ist, WAS sequentiell gelesen werden kann.

von (prx) A. K. (prx)


Lesenswert?

Jörg Wunsch schrieb:
> Naja, da hast du dir die grauseligste Architektur als Beweis
> ausgesucht. ;-)

Compiler-Output für 8-Bit CISCs zu lesen ist eine Zumutung. Wegen der 
Umständlichkeit bei der Umsetzung von C, aufgrund der ziemlich schrägen 
Mnemotechnik der Befehle und weil Banking keine Freude macht.

> Eine Akkumulator-Architektur halt.

Wobei eine Akkumulator-Architektur nur dann ein Problem ist, wenn die 
bei Compilern häufig verwendeten Datentypen grösser sind als der Akku. 
Ist der Akku aber ausreichend breit, dann sieht der Code ganz ordentlich 
aus. Nur gibts nicht mehr viele solcher Architekturen (z.B. Freescale 
68x11/12). Das war bis weit in die 60er Jahre aber ziemlich verbreitet.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

MCUA schrieb:
> Selbst wenn das in 1 Takt gehen würde (was meist nicht der Fall ist)
> sind damit die etlichen Nachteile der RISC ja nicht beseitigt.

Tja.  Trotz der Nachteile hat sich der Kram durchgesetzt.

Wenn man vom ARM im Controllerbereich absieht, ist ja inzwischen
alles x86-Einheitsbrei.  Die einstmals so stolzen RISCs: alle
verschwunden.  POWER, SPARC, PA-RISC, MIPS (nur noch als PIC32, also
als Controller).  So viel zu den Nachteilen.

von (prx) A. K. (prx)


Lesenswert?

MCUA schrieb:
> Selbst wenn das in 1 Takt gehen würde (was meist nicht der Fall ist)
> sind damit die etlichen Nachteile der RISC ja nicht beseitigt.

Aus welcher Sicht betrachtest du das grad? Dem Programmierer kanns egal 
sein, ob MOV32 aus 2 Befehlen zusammengesetzt wird, oder ob es einer 
ist. Wichtig ist hier, dass es schneller ist als das alte LDR r,=adr, 
was nichtsequentell aus dem Flash laden musste damit nicht selten 
Waitstates kostet. Wobei Compiler bei Optimierung auf Platz immer noch 
gerne die alte Version verwenden, weil kleiner (6 Bytes statt 8).

Klar ist 1 Takt schneller als 2. Ich betrachte da aber eher das 
Gesamtergebnis. Wenns schnell genug ist, dann sind mir solche Details 
egal. Andernfalls habe ich den falschen Prozessor gewählt oder zu blöd 
programmiert.

Und da man bei 32-Bittern zu mindestens 99% in Hochsprache programmiert, 
kann es eigentlich ziemlich egal sein, was unten rauskommt. Wenn schnell 
genug und klein genug. Mögliche atomare Verarbeitung bestimmter 
Speicher/IO-Operationen ersparen im Controller-Umfeld allerdings ein 
paar Kleinigkeiten, das stimmt schon.

von (prx) A. K. (prx)


Lesenswert?

Jörg Wunsch schrieb:
> Wenn man vom ARM im Controllerbereich absieht, ist ja inzwischen
> alles x86-Einheitsbrei.  Die einstmals so stolzen RISCs: alle
> verschwunden.  POWER, SPARC, PA-RISC, MIPS (nur noch als PIC32, also
> als Controller).

POWER und SPARC sind noch da, aber vorwiegend im Bereich grösserer 
Systeme. Dort aber dafür mit Schmackes.

von Marcus H. (mharnisch) Benutzerseite


Lesenswert?

A. K. schrieb:
> Wobei Compiler bei Optimierung auf Platz immer noch
> gerne die alte Version verwenden, weil kleiner (6 Bytes statt 8).

Mögliche weitere Gründe:
- Der literal pool mit den Adressen kann vom Linker geschickt so 
plaziert werden, dass er von mehreren Stellen verwendet werden kann. 
Damit wird die Codegröße weiter reduziert und die Anzahl der Relocations 
verringert.
- Der Performance Nachteil wirkt sich in der Praxis geringer aus als uns 
manche glauben machen wollen.
- Man kann Werte im literal pool leichter patchen :)

Gerade in einer Harvard Architektur mit nicht-trivialer Pipeline sind 
die Performanceeinflüsse nicht mehr so einfach zu beschreiben. Ist der 
belegte Slot in der Prefetch unit für die zweite Hälfte eines MOV32 in 
einer bestimmten Situation nun besser genutzt, wenn ein "echter" Befehl 
darin läge?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

A. K. schrieb:
> POWER und SPARC sind noch da, aber vorwiegend im Bereich grösserer
> Systeme.

POWER weiß ich nicht so genau, aber SPARC?  Zumindest Sun hatte das
schon vor Jahren aufgegeben.  Wer macht das denn noch?

(Ich fand SPARC eigentlich als Architektur immer ganz hübsch.)

von MCUA (Gast)


Lesenswert?

>Tja.  Trotz der Nachteile hat sich der Kram durchgesetzt.
>Wenn man vom ARM im Controllerbereich absieht, ist ja inzwischen
>alles x86-Einheitsbrei.
Würde ja heissen, es gäbe heute (ausser X86 bei PC) nur noch diese 
(RISC) Archit. Was aber total falsch ist.
Es sind immer noch 2stell. Anzahl verschiedener Archit. im Umlauf.


> Selbst wenn das in 1 Takt gehen würde (was meist nicht der Fall ist)
> sind damit die etlichen Nachteile der RISC ja nicht beseitigt.
Nachteile deshalb, weil (für viele entspr. CISC-Befehle) RISC einfach 
mehrere Befehle (damit auch mehr Speicher erforderlich, weit mehr als 
wenn CISC-OPcode wäre) und auch mehrere Takte benötigt (also damit 
langsamer ist).

Also, bei gleicher f, brauchts mehr Mem und ist langsamer!
Das reicht, um abgewählt zu werden.

Das finde ich grade in 2013 ein Witz, weil Gates nun so günstig sind.

von (prx) A. K. (prx)


Lesenswert?

Jörg Wunsch schrieb:
> POWER weiß ich nicht so genau, aber SPARC?  Zumindest Sun hatte das
> schon vor Jahren aufgegeben.  Wer macht das denn noch?

Erst vor wenigen Tagen war die Hot-Chips Konferenz, da gabs gleich 3 
neue, 2 SPARCs und 1 POWER.

http://www.heise.de/newsticker/meldung/Hot-Chips-Tausendkerner-fuer-Unix-1945955.html
http://www.heise.de/ix/meldung/Hot-Chips-Oracles-SPARC-M6-als-Datenbankmonster-1945360.html
http://www.heise.de/newsticker/meldung/Hot-Chips-Power-Geschuetz-von-IBM-1943751.html

von Axel S. (a-za-z0-9)


Lesenswert?

Jörg Wunsch schrieb:

> Wenn man vom ARM im Controllerbereich absieht, ist ja inzwischen
> alles x86-Einheitsbrei.  Die einstmals so stolzen RISCs: alle
> verschwunden.  POWER, SPARC, PA-RISC, MIPS (nur noch als PIC32, also
> als Controller).  So viel zu den Nachteilen.

Also als ich das letzte Mal nachgesehen habe, gabs IBM noch. Und sie 
bauten noch Power(5) CPUs. Dito hat ORCL zwar eine Menge Mist gebaut mit 
den tollen Sachen, die sie sich mit SUN zum Schnäppchenpreis einverleibt 
haben. Aber die SPARC Architektur lebt in Form der UltraSparc und 
Niagara (CoolThreads) Linien noch fröhlich vor sich hin. Und selbst wenn 
Larry diese Produktlinien fallen lassen sollte - Fujitsu wird noch 
laaaange weiter SPARCs bauen (sie bauen ja eh die besten dieser Klasse).

Mit PA-RISC könntest du (leider) Recht haben. Da hat sich HP wohl doch 
etwas zu sehr auf Intel und deren Flagship Itanic verlassen. Eng 
verbunden im Untergang ist die Alpha Architektur (ehemals DEC, dann 
COMPAQ, zuletzt HP)

Aber wenn sich immer das Beste durchsetzen würde, dann gäbe es weder den 
8086 noch MS-DOS noch VHS noch Merkel. (huch, hoffentlich wird mein 
Beitrag jetzt nicht nach Offtopicanien verschoben ;)

PS: daß RISC gleichzusetzen wäre mit Instruction Size = Busbreite, würde 
ich nicht unterschreiben. Es gibt (gab?) auch VLIW Architekturen, die 
trotzdem RISC sind.


XL

von (prx) A. K. (prx)


Lesenswert?

Axel Schwenke schrieb:
> PS: daß RISC gleichzusetzen wäre mit Instruction Size = Busbreite, würde
> ich nicht unterschreiben.

Das hat ja auch nichts miteinander zu tun. Entscheidend ist ein einfach 
handhabbares Befehlsformat, vorzugsweise mit nur einer Befehlsbereite, 
um sich den Terz mit der Dekodierung von Befehlen variabler Länge zu 
ersparen. Erst recht wenn man davon mehrere pro Takt dekodieren will. 
Aber wie breit die Befehle konkret sind ist irrelevant.

Es wäre auch ziemlicher Unfug, bei einem 64-Bit Prozessor bloss deshalb 
die (skalaren) Befehle 64 Bit breit zu machen. Und Thumb(1) hat ein 
reines 16-Bit Befehlsformat - der einzig abweichende Befehl lässt sich 
als Kombination zweier Befehle verstehen und auch so ausführen.

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.