Grundsätzlich gilt erst einmal: Integer ist das schnellste, da immer genau so breit wie die Register, und die ALU ist schnell. Deshalb verwendet man z.T. bei sehr zeitkritischen Programmen anstelle von Floats sogenannte Festkommazahlen, die zwar Nachkommastellen haben, aber dessen gesamte Arithmetik auf Integern abgebildet wird. (Frag mich nicht wie man das im Detail macht - aber es ist
imho nicht soooo schwer
)
Floats: Single ist schneller als Double ist schneller als Extended. Aber Single ist schon langsamer als Integer (alles bezogen auf einfache Rechenoperationen +, -, etc.). Nun kommen so nette Ausnahmen dazu wie MMX/SSE(2). Mit MMX lassen sich Integer parallel verarbeiten. Das setzt aber voraus, dass die Problemlogik überhaupt erst einmal dazu geeignet ist parallelisiert zu werden. Eine einfach Addition bleibt eine einfach Addition. Will man aber 3 oder 4 davon in ähnlicher Weise machen, dann
kann MMX schneller sein. Manko: MMX nutzt den FPU-Registerstack, und somit muss, sofern auch mit Floats geabrbeitet wird, dieser erst gesichert werden, dann der Modus gesetzt werden, und zum Ende wieder alles zurück. Also lohnt sich der Einsatz von MMX erst dann, wenn du ein parallelisierbares Problem hast, und dieses oft hinterenander, so dass du nicht immer die FPU umschalten musst.
Es kann je nach Problem aber trotz vielem Umschalten einen Vorteil erbringen. Es ist nur sehr individuell.
SSE ist für die Parallelisierung von Rechnungen mit Singles, und SSE2 mit Double, und es gelten die gleichen Umstände wie für MMX. Aber diese 3 unterscheiden sich nicht NUR durch den Datentyp, sondern bieten auch unterschiedliche Methoden. Dazu wäre es sinnvoll sich mal die IA32-Specs durchzulesen, um abschätzen zu können wo eine echte Ersparnis möglich wäre.
Ich selbst habe bisher noch keine der o.g. Erweiterungen eingesetzt, einfach weil mir der Lernaufwand bisher zu groß war. Im Zuge von .NET macht es aber auch keinen Sinn mehr sich damit zu beschäfigen, da der .NET-Compiler ohnehin versucht an geeigneten Stellen die verfügbaren Features wie MMX einzusetzen. (Dennoch bin auch ich an leicht verständlichen Anfänger-Tutorials dazu interessiert
)
Gruss,
Fabian
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel