AMD64 vs. Intel64: Wer gewinnt mehr Leistung gegenüber 32bit?
Indy 17.02.2004 - 12:19 1210 25
Ringding
Pilot
|
Wie gesagt, es ist furchtbar langsam.
Um die Register auseinanderzukletzeln und zusammenzubasteln, braucht man eine ganze Menge von Operationen, das zahlt sich überhaupt nicht aus.
|
fresserettich
Here to stay
|
afair ein asm-befehl pro 32 block?!
|
Ringding
Pilot
|
Ok. Folgende Aufgabe:
Addiere zwei 32bit-Zahlen. Sie befinden sich jeweils im oberen Teil von RAX und RBX. Das Ergebnis soll im oberen Teil von RAX stehen (natürlich ohne den unteren Teil zu zerstören). Mal sehen, wie viele Instruktionen du dafür brauchst.
Für den vernünftigen Fall, dass die Zahlen ganz normal in RAX und RBX stehen, braucht man genau eine:
ADD EAX,EBX
|
fresserettich
Here to stay
|
ok punkt für dich aber die frage ist ob man diesen fall nicht abfangen kann?! mein beispiel: du führst einen vergleich durch bin mir jetzt nicht sicher ob des mit 2 registern geht glaub da brauchst da gibt es eine einschränkung ist ja auch egal du willst einfach nur lesen hast sicher keinen nachteil wie schon gesagt der compiler müsste verdammt gut arbeiten ...
|
Ringding
Pilot
|
Auch das Lesen ist kompliziert, wenn du an den oberen Teil herankommen musst. Da brauchst du immer erst ein Zwischenregister zum Auslagern, dann musst du das Zeug hin- und herschieben. Es ist einfach nicht praktikabel. In seltenen Fällen kann man sicher etwas Trickserei machen (bei cryptographischen Funktionen hauptsächlich), aber für die Mehrzahl der Fälle wäre sowas sinnlos, und der Compiler kann dir das schon gar nicht abnehmen.
|
Indy
Little Overclocker
|
Also wer gewinnt jetzt theoretisch mehr? Bei euren fachlichen Dingen komme ich nciht mehr mit, ich will nur wissen, wer mehr gewinnt... Aber trotzdem danke für eure Diskussion, die Frage soll ja nicht nur für mich sein...
Indy
|
Ringding
Pilot
|
Ich glaube nicht, dass es einen klaren Gewinner geben wird. Die Auswirkungen müssten bei beiden ziemlich gleich sein. Der Compiler wird allerdings ein Wörtchen mitzureden haben. AMD sollte schauen, dass der Athlon mit dem Code vom Intel Compiler gut zurechtkommt, dann haben sie sicher eine gute Startposition. Außerdem ist ja soundso noch nicht entschieden, mit welchem Compiler die Mehrheit der künftigen x86-64 Software compiliert wird.
|
fresserettich
Here to stay
|
bezüglich intel compiler klickwollt eh schon an thread da zu anreißen bin aber noch nicht dazugekommen wieso beim lesen? kannst ja bei einem 32 bit register auch auch den 16 mit teil explizit zugreifen z.B. jn ah,16 müsste dann doch da auch gehen
|
Ringding
Pilot
|
Man kann immer nur auf den unteren Teil extra zugreifen, nicht auf den oberen Teil. (Ausnahme ah, bh usw. wie von dir erwähnt, das sind aber die oberen 8 Bit der 16bit-Register)
Bzgl. Compiler: Das sagt noch nix über den 64bittigen Code aus.
|
fresserettich
Here to stay
|
@compiler stimmt, wollte damit nur aufzeigen dass sie derzeit schon gut zurechtkommen und da ja wie schon bekannt die 64bit-architektur sich sehr ähnelnd wird es sicher eine lösung geben  hab kurz ein wenig gegoogled und was interessantes gefunden: Die UltraSPARC-II ist eine volle 64-Bit-Maschine mit 64 Bit-Registern und einem 64 Bit-Datenweg. Sie kann aber auch 32 Bit-SPARC-Software unverändert ausführen (Abwärtskompatibilität). Es ist ein reines RISC-Design. Die meisten Instruktionen haben zwei Quell- und ein Zielregister, so dass sie sich gut für die Pipeline-Ausführung in einem Zyklus eignen. Die UltraSPARC-II kann vier Instruktionen durchgängig ausgeben.
Blockdiagramm: alle dargestellten Komponenten ausser dem Level-2-Cache befinden sich auf dem CPU-Chip.
Die PREFETCH/DISPATCH Einheit ähnelt der FETCH/DECODE Einheit des Pentium. Hier müssen die ankommenden Instruktionen aber nicht aufgeteilt werden, da sie bereits 3-Register-Mikrooperationen sind. Es entsteht kein Zeitverlust. Pro Taktzyklus werden vier Instruktionen gelesen. Ausserdem befindet sich hier ein kompletter Sprungvorhersagemechanismus. Des weiteren verfügt die UltraSPARC-II über eine Menge von Sprunginstruktionen. Über diese Sprunginstruktionen kann der Compiler (der normalerweise gut Bescheid weiss) der Hardware mitteilen, welcher Weg vorauszusagen ist.
Die Gruppenlogik wird mit einer aus 12 Einträgen bestehenden Queue gespeist. Sie muss jetzt immer vier Einträge finden, die gleichzeitig ausgegeben werden können. Dabei müssen jeweils zwei Instruktionen für die Integer-ALU und zwei für die Floating Point-ALU sein. Die beiden ALUs haben jeweils entsprechende Register, wo sie die Operanden hernehmen und nach getaner Arbeit wieder hinterlegen. Die FLOATING POINT Einheit hat zusätzlich eine Grafikeinheit, die spezielle Instruktionen für 2D- und 3D- Grafiken, Audio und Video ausführt (wie die MMX-Instruktionen des Pentium).
ist zwar auf den UltraSPARC-II bezogen und weiß jetzt nicht ob man des auf den opteron ummünzen kann aber des hört sich nicht mal so schlecht an @register ist nur die frage ob es nicht auch so eine option für 64 32 bit geben wird
|
t3mp
Here to stay
|
|