PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Wie benutzt SIMD Einheiten in Hochsprachen wie C++?


Gast
2007-11-24, 23:30:20
Gibt es da irgendwelche Methoden um zu sagen, daß er für diese Gleitkommarechnung SSE benutzen soll, ohne das ganze in Assembler zu programmieren oder wählt der Compiler schon automatisch die passende Variante (SSE oder FPU) aus?



Und wenn man das explizit im Code angeben muß, wie bewahrt man dann die Plattformunabhängigkeit?

malte.c
2007-11-25, 06:52:22
Gibt es da irgendwelche Methoden um zu sagen, daß er für diese Gleitkommarechnung SSE benutzen soll, ohne das ganze in Assembler zu programmieren oder wählt der Compiler schon automatisch die passende Variante (SSE oder FPU) aus?

Wenn es Dir wirklich nur um SSE/FPU geht, dann sollte Dein Compiler einen passenden Schalter haben. Wenn Du sagst, was für einen Compiler Du verwendest, dann kann man Dir vielleicht auch sagen, wo... Allerdings führt der i.A. nur dazu, dass SSE für Skalare benutzt wird, nicht für Vektoren.

Und wenn man das explizit im Code angeben muß, wie bewahrt man dann die Plattformunabhängigkeit?

Angenommen, Du möchtest Vektoren verarbeiten, gibt's z.B. für Intel-kompatible CPUs von Intel definierte Intrinsincs, die von allen Compilern, die dazu kompatibel sind, unterstützt werden. Eine Plattformunabhängigkeit über verschiedene CPUs, Compiler und Betriebssysteme hinweg gibt's aber nicht.

Shink
2007-11-26, 16:25:56
Plattformunabhängige Befehle für SIMD in gibt es nicht; vielleicht gibt es in C++ ja Libraries, die das hiden. Wenn ich mich richig erinnere, gibt es für Fortran so etwas wie Befehle, die es dem Compiler leicht machen, den Code unabhängig von der eingesetzten Architektur auf SIMD (oder z.B. auch Multiprozessorsysteme) zu optimieren. Wahrscheinlich hat das aber eh noch niemand implementiert...