PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Lohnt sich SSE heute noch?


horner002
2009-02-19, 08:57:48
Hallo,

ich muss für die Uni einen einfachen Raytracer in C++ schreiben, also nur Quader, Kugeln, Dreiecke, Phong-Beleuchtung und Bounding Boxes.
Da ich erstens recht viel Zeit dafür habe und es zweitens nie schlecht ist, was Neues zu lernen, wollte ich mir mal SSE anschauen.
Für Schnittpunktberechnung, Beleuchtung,... sollte SIMD ja ideal sein.
Aber lohnt es sich, abgesehen vom Lerneffekt, überhaupt, alles von Hand in SSE zu implementieren, oder nimmt einem der Kompiler (in meinem Fall Version 11 von Intel) diese Mühe weitestgehend ab?

MfG, Horner

mekakic
2009-02-19, 09:07:07
Such mal nach "Compiler Intrinsics" und nimm Dir die entsprechenden SSE Varianten. Da muß man nicht mit Assembler rumpfuschen und lohnen kann es sich bestimmt. Allerdings könnte man auch erst das ganze 08/15 implementieren und nachher im Profiler schauen, wo eine Optimierung Sinn macht. Das hatte ich damals für einen Raytracer vor, aber habe ihn dann liegenlassen und nie wieder angefaßt... :)

Novox/work
2009-02-19, 09:22:43
Allerdings könnte man auch erst das ganze 08/15 implementieren und nachher im Profiler schauen, wo eine Optimierung Sinn macht.

Raytracing via SIMD nutzt ja soweit ich weiß die Strahlkoheränz aus und verfolgt statt eines Einzelstrahls immer ein ganzes "Bündel" (packet), z.B. 4x4 Strahlen. Das muß man dann vermutlich durchgängig machen und ist wohl mit etwas mehr Aufwand verbunden.

Shink
2009-02-19, 09:30:11
An der richtigen Stelle eingesetzt lohnt es sich ordentlich; der Compiler kann leider nicht deine Algorithmen umschreiben. Dass der Code dadurch nicht verständlicher wird sollte aber klar sein. Wenn du dir sicher bist dass du es ohne SSE problemlos gebacken bekommst kannst du dich ja daran versuchen.

Simon
2009-02-19, 09:34:10
Scene Packet tracer Mono tracer
Legocar 3277k rays/s, 4.6 fps 1064k rays/s, 1.9 fps
Cloister 1554k rays/s, 1.4 fps 283k rays/s, 0.2 fps
Kitchen 2135k rays/s, 2.5 fps 452k rays/s, 0.6 fps



As can be seen from above figures, the difference between the packet tracer and the mono tracer is considerable, especially for the cloister scene. The very large difference for this scene can be explained by the fact that a coherent packet also uses SSE code for shading. The cloister scene is heavily textured, using a bilinear filter. For coherent packets, this filtering is performed on four pixels simultaneously.

When the performance improvement of the ray queries is considered without shading, the typical speed increase is 300%.

We have shown that the performance of a ray tracer can be improved considerably by using vectorization to trace four rays in parallel. The vectorization adds a modest amount of complexity to the ray tracer, yet it improves performance considerably.
Weiß nicht, ob sich das wirklich lohnt!? :redface:

http://software.intel.com/en-us/articles/interactive-ray-tracing/
http://software.intel.com/en-us/articles/architecture-of-a-real-time-ray-tracer/
http://software.intel.com/en-us/articles/architecture-of-a-real-time-ray-tracer-part-2/

horner002
2009-02-19, 10:16:04
Danke für die Links.
Den über die Ray Packets hatte ich schon gelesen, aber ich glaube so weit werde ich erst treiben wenn der Rest funktioniert und ich noch Zeit und Lust habe.
Eigentlich wollte ich erst mal wissen, ob es sich lohnt, alle Operationen auf Vektoren, Punkte, Matrizen und Farben mit SSE zu implementieren.
Das sind alles schöne kleine Häppchen bei denen man zur Not noch mit Zettel und Stifft kontrolieren kann, ob sie auch das machen, was sie sollen.
Primär geht es mir auch nicht darum, wie groß ein eventueller Geschwindigkeitsgewinn ist (ob einer vorhanden ist schon), sondern darum, mich mal ein wenig in das Thema einzuarbeiten.

Simon
2009-02-19, 10:51:48
Eigentlich wollte ich erst mal wissen, ob es sich lohnt, alle Operationen auf Vektoren, Punkte, Matrizen und Farben mit SSE zu implementieren.
Das sind alles schöne kleine Häppchen bei denen man zur Not noch mit Zettel und Stifft kontrolieren kann, ob sie auch das machen, was sie sollen.
Die willst du selber schreiben? :|
Wozu? :|

Novox/work
2009-02-19, 10:55:38
Eigentlich wollte ich erst mal wissen, ob es sich lohnt, alle Operationen auf Vektoren, Punkte, Matrizen und Farben mit SSE zu implementieren.

Meinst Du sowas wie einzelne Skalarprodukte zweier Vektoren via SSE? Nein, das bringt nichts (z.B. bis SSE3, wie's mit neueren Versionen aussieht weiß ich nicht). Einen richtigen Beschleunigungseffekt erhältst Du erst wenn Du z.B. vier Skalarprodukte gleichzeitig berechnest. Und da kommen wieder die Ray Packets ins Spiel.

horner002
2009-02-19, 11:13:45
Die willst du selber schreiben? :|
Wozu? :|

Weil ich muss :rolleyes:
Die einzige Libary, die ich verwenden darf, ist Glut zur Bildschirmausgabe.

Meinst Du sowas wie einzelne Skalarprodukte zweier Vektoren via SSE? Nein, das bringt nichts (z.B. bis SSE3, wie's mit neueren Versionen aussieht weiß ich nicht). Einen richtigen Beschleunigungseffekt erhältst Du erst wenn Du z.B. vier Skalarprodukte gleichzeitig berechnest. Und da kommen wieder die Ray Packets ins Spiel.

Danke, das wollte ich wissen.
Dann werd ich erstmal alles so schreiben und am Ende schauen, wofür die Zeit noch reicht.