Hallo zusammen,
Kann man generell sagen das entweder RISC oder CISC - Architektur besser
ist?
Oder haben beide ihre Einsatzgebiete?
Was muss man beim programmieren beachten wenn man RISC oder CISC hat?
Gruss
Lenny
Nichts ist besser und alles ist besser, sowohl bei der einen als auch
bei der anderen Architektur. Informiere Dich über Vor- und Nachteile der
Architekturen und entscheide, welche für Deine Anwendung in Frage kommt.
>Was muss man beim programmieren beachten wenn man RISC oder CISC hat?
Daß das Programm den Anforderungen entsprechend läuft vielleicht?
>Fragen, die so einfach ins Blaue hinein gehen, haben wenig Sinn.
Was heisst da ins blaue hinein??
Ich hab noch nie gehört, dass jemand seien uP nach RISC oder CISC
ausgesucht hat. Deshalb frag ich obs überhaupt draufan kommt!
Beim Programmieren musst Du gar nichts beachte, solange Du eine höhere
Programmiersprache benutzt. RISC hat eben einen Reduzierten Istruction
Set, arbeitet dafür Befehe meist in einem Takt ab. CISC hat mächtigere
Befehle, die dafür öfter gerne einige Takte brauchen. Ich hoffe das
reicht erst mal. Wikipedia hat sicher mehr dazu zu sagen.
Grüsse
>Beim Programmieren musst Du gar nichts beachte, solange Du eine höhere>Programmiersprache benutzt. RISC hat eben einen Reduzierten Istruction>Set, arbeitet dafür Befehe meist in einem Takt ab. CISC hat mächtigere>Befehle, die dafür öfter gerne einige Takte brauchen. Ich hoffe das>reicht erst mal. Wikipedia hat sicher mehr dazu zu sagen.
Ja danke, ich weiss schon was RISC und CISC ist. Ich frag mich nur was
unter dem Strich besser ist.
>Schaut man sich die 2Mrd. Transistoren bei x86 an, scheint CISC recht>erfolgreich zu sein.
Das x86 erfolgreich ist muss doch überhaupt nichts damit zu tun haben ob
RISC oder CISC besser ist. Hat ich einfach als Standard durchgesetzt.
>Was heisst da ins blaue hinein??
Auf diese Frage gibts eine gute Antwort:
>Schaut man sich die 2Mrd. Transistoren bei x86 an, scheint CISC recht>erfolgreich zu sein. Zumindest bei MS-Maustreibern.
Hier kommt das "ins Blaue hinein" sehr deutlich zum Ausdruck.
>Schaut man sich die 2Mrd. Transistoren bei x86 an, scheint CISC recht>erfolgreich zu sein. Zumindest bei MS-Maustreibern.
Erstens ist ein großer Teil der Transistoren Cache, hat also mit
CISC/RISC erstmal nichts zu tun. Zweitens kann man heutige x86er nicht
genau einordnen, weil sie nur noch die ISA (Instruction Set
Architecture) mit ihren CISC Vorfahren gemeinsam haben. Intern läuft es
dann doch wieder RISC-artig ab. Wie so oft sind die Übergänge fließend.
Lenny wrote:
>>Beim Programmieren musst Du gar nichts beachte, solange Du eine höhere>>Programmiersprache benutzt. RISC hat eben einen Reduzierten Istruction>>Set, arbeitet dafür Befehe meist in einem Takt ab. CISC hat mächtigere>>Befehle, die dafür öfter gerne einige Takte brauchen. Ich hoffe das>>reicht erst mal. Wikipedia hat sicher mehr dazu zu sagen.>> Ja danke, ich weiss schon was RISC und CISC ist. Ich frag mich nur was> unter dem Strich besser ist.
Oh gott.
do
{
Lese von Beginn;
} while (DuStellstDirImmernochDieseFrage);
Hallo,
ich bin mal mutig und sage RISC ist besser. Bei CISC-CPUs werden
entweder µCode verwendet oder die CISC-Befehle direkt RISC umgeformt.
RISC ist schneller, flexibler, sparsamer da sehr oft nur einfache
Befehle gebraucht werden. Möglicherweise sind bei CISC-Systemen die
Programme kleiner und es werden weniger Programmspeichrzugriffe
erforderlich, weil nur ein Befehl geholt werden muss der viel bewirkt
anstatt mehrere die wenig bewirken, doch heute ist Speicher billig und
die statische Verlustleistung größer als die dynamische, weshalb ein
paar Speicherzgriffe mehr auch nicht schaden. Der deutlich einfacher
aufgebaute RISC aber weniger statische Verlutleistung.
Da man gemerkt hat, dass RISC ein paar Nachteile hat, hat man einfach
später noch bestimmte CISC-Befehle in RISC integriert, jedoch nicht
irgendwelche, sondern nur die wichtigsten. Man merkte, das man oft
Datentransportbefehle braucht, also hat man welche übernommen die
mehrere Register in den Speicher kopieren. Das ist bei ARM der Fall.
Der RISC verdrängt den CISC in vielen Bereichen. Man denke an die
mobilen Anwendungen (Handy, PDA, Navi,...). Auch in Spielekonsolen
findet er Einsatz.
@ Stefan Helmert (stefan_helmert)
>ich bin mal mutig und sage RISC ist besser. Bei CISC-CPUs werden>entweder µCode verwendet oder die CISC-Befehle direkt RISC umgeformt.
Was Pentium Und Athlon seit Jahren machen, kann also nicht so falsch
sein.
>paar Speicherzgriffe mehr auch nicht schaden. Der deutlich einfacher
Naja, damit wäre ich vorsichitg. Ohne Caches geht da heute fast nix
mehr.
>aufgebaute RISC aber weniger statische Verlutleistung.
???
Bei CMOS? Wir reden hier glaub ich auch nicht über die Tuning Tricks von
Intel, die massive Leckströme in Kauf nehmen um ein paar hundert MHz
mehr Takt in Kauf zu nehmen. Die schnellsten Intel-CPUs sollen bis zu
50% ihres Stroms als Leckstrom dadurch verbrauchen :-0
>Datentransportbefehle braucht, also hat man welche übernommen die
SIMD, Singe Instruction, Multiple Data, also MMX, 3D NOW etc.)
>mehrere Register in den Speicher kopieren. Das ist bei ARM der Fall.
Das ist aber schon eher DMA.
MFG
Falk
der trend geht klar richtung risc... somit dürfte die frage wohl
beantwortet sein...
--> der x86 stammt ursprünglich von einem cisc ab und wurde richtung
risc vergewaltigt... sprich sie haben gebastelt, weil sie die kosten für
eine kommplete risc neuentwicklung scheuten...
Kann man so wirklich nicht sagen. Nur schon die Definition von 'besser'
ist schwer. Rechenleistung? Stromverbrauch? Leichter Vorteil
Einfachheit beim Design? Einfachheit in der Produktion? Flexibilität?
Und definiere mir dann mal RISC* und CISC* präziser. Wie vergangene
Diskussionen zeigen, kann man hier nach verschiedenen Gesichtspunkten
die Grenze ziehen, moderne PC-Prozessoren sind teilweise kaum
einzuordnen.
Grundsätzlich ist jedes CISC* auch ein bisschen RISC*, wobei halt noch
der Mikrocode dazwischen steht.
* Ich definiere für mich RISC und CISC rein nur über die
Hardware-Implementierung, nicht über den Instruktionssatz. RISC: Daten
rutschen nach einem vorgegebenen Schema durch die CPU, insbesondere sind
die einzelnen Komponenten direkt und eigenständig verdrahtet, so dass
Pipelining möglich wird. CISC: Daten werden vom Mikrocode Schritt für
Schritt an die verschiedenen Komponenten angelegt, wobei insbesondere
allgemeine Bus-Strukturen vorkommen können und erst der Mikrocode
bestimmt, welche Prozessorkomponente ihre Daten anlegt bzw. übernimmt.
Die meisten Befehle werden auf x86ern aber in Hardware dekodiert, nicht
vom Mikrocode ;).
Es ist schwer zu sagen was "besser" ist. Es ist auf jeden Fall
schwieriger CISC performant umzusetzen. Andererseits hat man bei einer
performanten Umsetzung diverse Vorteile, zB. ist CISC Code deutlich
kompakter als RISC. Und CISC erlaubt flexiblere Implementierungen, weil
komplexere Befehle nicht so stark an die Hardware angelehnt sind.
Im Endeffekt ist beides gut. Schau dich mal um, x86 CPUs sind mit die
schnellsten CPUs auf dem Markt, und vor allem die vielseitigsten.
Reinrassige RISCs wie der Power oder auch Designs die extra auf
paralleles Rechnen ausgelegt wurden (zB. EPIC im Itani(c)um) sind nicht
viel besser, und fertigungstechnisch der absolute Albtraum ('n Itanium
ist ca. 10mal so groß wie ein Opteron...).
> Kann man generell sagen das entweder RISC oder CISC - Architektur besser> ist?
Hängt von der Anwendung ab. Bei CISC hat man meist bessere Codedichte,
RISC ist üblicherweise schneller, da die Decoder- und
Ausführungseinheiten einfacher zu realisieren sind.
Im Mikrocontrollerbereich sind echte RISCs selten, da die meisten immer
noch die Möglichkeit haben irgendwie direkt die Portpins zu
manipulieren, was dem RISC-Konzept komplett widerspricht.
Es ist aber klar, daß alle heutigen Prozessoren, wenn sie auch nur
annähernd in der Geschwindigkeit mithalten, intern immer eine
RISC-ähnliche Implementierung haben, ganz gleich wie CISC-mäßig die
Architekur sein mag. Das gilt vor allem für die CPUs von Intel und AMD,
denn wenn die nicht RISC-Know-How für ihre Prozessorkerne übernommen
hätten (und etwas später noch sehr viel Optimierungswissen in Form von
ehemaligen Alpha-Designern eingekauft hätten), wären sie schon vor
Jahren im Desktop- und Server-Bereich von den RISC-Prozessoren abgehängt
worden.
Da sich x86 aber aufgrund der etablierten Architektur sehr gut verkauft,
war wohl genug Geld für Investitionen und den Aufwand der Übersetzung
einer verkorksten ISA in RISC-ähnliche Code für den Kern vorhanden.
Da der Begriff RISC gerne nicht vollkommen korrekt ausgelegt wird, hier
noch eine genauere Definition:
"RISC" steht zwar für "Reduced Instruction Set Computer", aber ganz so
wörtlich darf man dieses Akronym von David Patterson doch nicht
auslegen, da seine Definition doch deutlich anders aussieht.
(In einem Buch habe ich die alternative Interpretation "Reduced
Instruction Set Complexity" gefunden.)
* Load/Store-Architektur, d.h. nur spezielle Load/Store-Instruktionen
sind für den Datenaustausch zuständig. Alle Datenmanipulationen finden
ausschließlich auf Registern statt. Hier unterscheiden sich einige
Embedded-RISC (beispielsweise SuperH kann Bitoperationen auf
Speicherstellen durchführen), damit man direkt auf Ports zugreifen kann.
* Eine große Zahl an Universalregistern. Groß ist dabei relativ,
üblicherweise aber ab 16 aufwärts, die meisten Desktop-RISCs haben 32
Register, von denen aber häufig eines immer Null ist. Universalregister
heißt dabei, daß sie gleichermaßen für Daten und Adressen und von allen
Instruktionen verwendet werden können. Zugunsten der Codedichte machen
einige Embedded-RISC hier auch Eingeständnisse.
* Uniforme und einfache Instruktionscodierung. D.h. alle Instruktionen
haben die gleiche Länge und es gibt nur sehr wenige Instruktionsformate.
Ein "typischer" RISC käme beispielsweise mit drei Formaten aus: Opcode
mit drei Registern, Opcode mit zwei Registern und einer Konstante,
Opcode und Adresse.
In der Praxis sieht das gelegentlich auch etwas anders aus. ARM hat
erstaunlich viele unterschiedliche Formate und bei der Länge ist man
auch nicht immer einheitlich. ARM schaltet zumindest zwischen Modi mit
unterschiedlichen Längen um (32-Bit ARM / 16-Bit Thumb), andere wie
TriCore können auch verschieden lange Instruktionen mischen.
* Die meisten Instruktionen sind primitiv genug, daß mittels Pipelining
eine Instruktion pro Zyklus fertiggestellt werden kann. Aus diesem Grund
hatte der erste SPARC übrigens auch keine Multiplikation und Division,
was aber später aus Performanzgründen nachgeflickt wurde.
Hierbei ist wichtig, daß keine CPU eine Instruktion in einem Taktzyklus
ausführen kann; es sind immer mehrere Schritte nötig. Wenn man aber
nicht alle Instruktionen nacheinander ausführt, sondern die einzelnen
Schritte jeder Instruktion um eins versetzt in einer Art Fließband
(Fachausdruck "Pipeline") berabeiten, kann man im Idealfall eine
Instruktion pro Taktzyklus abschließen. Das setzt allerdings voraus, daß
die Instruktionen alle eine ähnliche Anzahl an Einzelschritten haben,
weswegen sie möglichst primitiv sein sollten.
Ein typisches Gegenbeispiel hierfür ist der PowerPC, der für RISC einige
viel zu komplexe Instruktionen hat. Das Laden und Speichern von mehr als
einem Register in einer Instruktion ist allerdings auch in ARM
vorhanden. Aus diesem Grund arbeitet übrigens die Implementierung des
PPC970, der im Vergleich zu den anderen PowerPCs eine deutlich tiefere
Pipeline hat, intern mir "cracked instructions", d.h. komplexe
Instruktionen werden in zwei oder mehr primitivere zerlegt. Das Konzept
erinnert natürlich sehr stark an die Micro-Ops von Intel.
* In der Originaldefinition von David Patterson war auch noch die
Implementierung von sog. Registerfenstern vorhanden, aber abgesehen von
SPARC, die von diesem Berkeley-RISC-Projekt abgeleitet wurde, hat das
eigentlich keine andere Architektur übernommen.
Es handelt sich also hierbei im rein architektonische Vorgaben, die eine
möglichst effiziente Implementierung erleichtern sollen. Ein Verzicht
auf Mikrocode wird in keinster Form gefordert, mir ist aber auch kein
RISC bekannt, der nicht überwiegend hardcodiert wäre.
Ein x86 fällt aus architektonischer Sicht definitiv nicht ins
RISC-Raster. Instruktionslängen die zwischen 1 und 16 Byte schwanken und
teilweise äußerst komplex codiert sind. Immer noch keine echten
Universalregister, da EAX als ehemaliger Akkumulator codierungstechnisch
bevorzugt wird, variable Shiftweiten nur in CL stehen dürfen,
Multiplikation/Division implizit EAX/EDX verwenden, etc. pp.
Beim Pentium werden die 8 Pseudo-Universalregister intern auf 40
Register umverteilt und die Instruktionen in Micro-Ops zerlegt, damit
sie einigermaßen effizient in einer Pipeline ausgeführt werden können.
Rein von der Geschwindigkeit hat RISC aus meiner Sicht deutliche
Vorteile gegenüber einem reinen CISC, was sich alleine daran zeigt, daß
die wirklich schnellen Prozessoren intern alle auf eine Form von RISC
zurückgreifen.
Für den Embedded-Bereich ergeben sich Nachteile bezüglich der Codedichte
oder dem direkten Zugriff auf Ports, weswegen hier meist gewisse
Abweichungen von der originalen RISC-Definition finden lassen.