[linux-l] Performancegewinn bei Nutzung von Debian AMD64

Ihno Krumreich ihno at lst.de
Mi Mär 8 00:32:53 CET 2006


On Thu, Mar 02, 2006 at 02:17:09AM +0100, olafBuddenhagen at gmx.net wrote:
> Hallo,
> 
> On Tue, Feb 28, 2006 at 11:59:39PM +0100, Ihno Krumreich wrote:
> 
> > Bei AMD64 (EM64T) wurde nicht nur die Registerbreite aufgebort,
> > sondern auch die Anzahl der Register (sie wurde verdoppelt). Damit
> > koennen koennen mehr Variablen in Registern gehalten werden und
> > muessen nicht in den Speicher und wieder zurueck transportiert werden.
> > Aus diesem Grund ist der AMD64 schneller als ein 32Bit Prozessor.
> 
> Auch das darf man nicht ?berbewerten. Bei Prozessoren mit Out-of-Order
> Execution -- bei Intel sind das alle x86 ab Pentium Pro -- findet eh ein
> Register Renaming statt, d.h. die interne Registerzahl ist wesentlich
> h?her, und die virtuellen Register des Befehlssatzes werden darauf
> abgebildet. Viele Situationen, die bei ?lteren Prozessoren aufgrund von
> ?berm??iger Nutzung der beschr?nkten Registerzahl zu Engp?ssen gef?hrt
> haben, spielen keine Rolle mehr.

Ich will es auch nicht ueberbewerten. Aber schneller ist eben schneller.

> 
> Auch das Schieben von Zwischenvariablen in den Speicher ist selten
> kritisch: Der Zugriff auf den L1-Cache erfolgt extrem schnell, und kann
> durch Pipelining komplett versteckt werden -- die Load/Store-Einheiten
> sind meist eh nicht ausgelastet. Klar gibt es F?lle, wo diese Zugriffe
> mit "echten" konkurrieren; diese d?rften aber eher die Ausnahme als die
> Regel sein.

Ein anderer Effekt is, dass der auszufuehrende Code kuerzer wird.
Variablen in Registern lassen sich kuerzen adressieren als Variablen
auf dem Stack. Ausserdem wird der Stackframe kleiner, da Variable
die nur in Registern leben garnicht mehr auf dem Stack angelegt werden.

Ihno




Mehr Informationen über die Mailingliste linux-l