"We are back" « oc.at

AMD64 vs. Intel64: Wer gewinnt mehr Leistung gegenüber 32bit?

Indy 17.02.2004 - 12:19 1210 25
Posts

Ringding

Pilot
Avatar
Registered: Jan 2002
Location: Perchtoldsdorf/W..
Posts: 4300
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
Registered: Jul 2002
Location: hier
Posts: 5528
afair ein asm-befehl pro 32 block?!

Ringding

Pilot
Avatar
Registered: Jan 2002
Location: Perchtoldsdorf/W..
Posts: 4300
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
Registered: Jul 2002
Location: hier
Posts: 5528
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
Avatar
Registered: Jan 2002
Location: Perchtoldsdorf/W..
Posts: 4300
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
Registered: Oct 2000
Location:
Posts: 86
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
Avatar
Registered: Jan 2002
Location: Perchtoldsdorf/W..
Posts: 4300
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
Registered: Jul 2002
Location: hier
Posts: 5528
bezüglich intel compiler klick
wollt 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
Avatar
Registered: Jan 2002
Location: Perchtoldsdorf/W..
Posts: 4300
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
Registered: Jul 2002
Location: hier
Posts: 5528
@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:
Zitat
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
Avatar
Registered: Mar 2003
Location: upstairs
Posts: 6304
das thema hat sich ja jetzt fürs erste mal erledigt... :p

http://www.tomshardware.com/column/20040220/index.html
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz