Beispiele für Parallelität: Raytracer

Um die Leistungsfähigkeit der einzelnen Frameworks und der Hardware auszuprobieren, habe ich einen möglichst einfachen Raytracer als visuellen Benchmark verwendet.

Ein Raytracer ist deshalb gut geignet weil er,

Die folgende Tabelle zeigt einen Vergleich (Stand 2011)

Sprache Technik CPU/GPU Cores/SMs/Threads
C++ Sequentiell CPU 1 Core = 1 Thread
C++ POSIX Threads (pthreads) CPU 4 Cores * 2 Hyperthreads = 8 Threads
C++ OpenMP CPU 4 Cores * 2 Hyperthreads = 8 Threads
C++ NVIDIA CUDA GPU 16 SM = 512 Cores = 512 Threads
C++ Cell-Prozessor CPU 6 SPUs
Java Sequentiell CPU 1
Java 7 ForkJoinPool CPU 4 Cores * 2 Hyperthreads = 8 Threads

Cell Broadband Engine / PLAYSTATION 3 (2009)

Angefangen hatte ich die Testreihe 2009 mit der PS3. Die Cell Broadband Engine ist ein Mehrkern-Prozessor. Eine der Kerne (der sog. PPE) ist der Hauptprozessor, der sich um die Synchronisation und I/O usw. kümmert. Für die Berechnungen sind 6 sog. SPEs zuständig. Im folgenden Beispiel wird der Ray Tracer gezeigt. Hier wird das Bild einfach in gleichgroße Teile zerlegt und ein SPE für jeden Teil benutzt.

C++ und POSIX Threads (2009)

Als zweites habe ich den Raytracer auf den Mac und den PC portiert. In folgendem Beispiel wird die pthreads-Bibliothek benutzt. Zuerst ein Intel Core 2 Duo mit 2.2 MHz.

Und hier ein Intel Core i7 920 mit 2.67 MHz.

NVIDIA CUDA (2010 - 2011)

Die Portierung auf die GPU gelang recht schnell. Und: es hat sich gelohnt, GPU Computing ist sehr leistungsstark. Mit einem NVIDA 580 sind es 650 FPS für 640x480 Pixel und 98 FPS für 1920x1148 Pixel (im Film werden diese Werte nicht erreicht, weil die Aufzeichnung Performance kostet).

Mit einem NVIDA 285 sind es 250 FPS für 640x480 Pixel und 57 FPS für 1920x1030 Pixel.

Es gibt weitere Benchmarks mit aktuelleren Karten.

C++ und OpenMP

Bei OpenMP gibt es eine Abhängigkeit zwischen der Anzahl der Threads und der Anzahl der Tasks.

Paralleler Raytracer with Java

Seit Java 7 gibt es den ForkJoinPool. Dieser wird in folgendem Beispiel genutzt.

Playlist der Videos

Die obigen Videos habe ich auch in einer Playlist gespeichert. Sie lassen sich alle zusammen hintereinander angucken.