Zellulre Kulturen, Die Programmierung der Cell Broadband Engine, Andreas Stiller c't 13/07 S.196 
*************************************************************************************************
Verzeichnnis sdot
sdot             ausfhrbares Programm Skalarprodukt-Demo fr PPC
spu/sdot_spu     ausfhrbares Programm Skalarprodukt-Demo fr SPE    
sdot.c           Source fr PPC 
Makefile         Makefile dazu  
spu/sdot_spu.c   Source fr SPE 
spu/Makefile     Makefile dazu 
spu/sdot_spu.h   gemeinsame Defines
spu/sdot_spu.s   Assembler-Listing fr SPE 
spu/sdot_spu.timing Statische Timinganalyse 

Verzeichnis sgemm
sgemm             ausfhrbares Programm Matrixmultiplikations-Demo fr PPC
spu/sgemm_spu     ausfhrbares Programm Matrixmultiplikations-Demo fr SPE    
sgemm.c           Source fr PPC 
Makefile          Makefile dazu  
spu/sgemm_spu.c   Source fr SPE 
spu/Makefile      Makefile dazu 
spu/sgemm_spu.h   gemeinsame Defines
spu/sgemm_spu.s   Assembler-Listing fr SPE 
spu/sgemm_spu.timing Statische Timinganalyse 
 
Verzeichnis ctapfel
ctapfel           ausfhrbares Programm Apfelmnnchen(Mandelbrot Fraktale)-Demo fr PPC
spu/ctapfel_spu   ausfhrbares Programm Apfelmnnchen(Mandelbrot Fraktale)-Demo fr SPE    
ctapfel.c         Source fr PPC 
spu/Makefile      Makefile dazu 
spu/ctapfel_spu.c Source fr SPE 
spu/Makefile      Makefile dazu 
spu/spe.h         gemeinsame Defines
spu/ctapfel_spu.s   Assembler-Listing fr SPE 
spu/ctapfel_spu.timing Statische Timinganalyse 

Alles Programme fr IBM Cell SDK 2.1 auf Playstation 3 unter Red Hat Fedora 6  
Obige Verzeichnisse sollten unter opt/ibm/cell_sdk/prototype/src/samples/tutorial/ installiert werden, dann 
passt die Struktur der Makefiles und man braucht nur make fr eine Neucompilation aufzurufen.  

In sdot_spu kann man verschiedene Implementierungen durch Defines whlen, darunter auch scommult fr eine komponentenweise Multiplikation. 
Die hat den Vorteil, dass sie der Autovektorisierer (ist im Makefile eingetragen) automatisch verktorisieren und per -unroll-loops unrollen kann. 
sgemm_spu ist ganz einfach gestrickt, denn es ruft die fertig optimierte Matrixmultiplikation in der Bibliothek liblargematrix auf. 

sdot.c und sgemm.c sind die umgebenden PowerPC-Programme, die den SPE-Code einbetten, auf die 6 SPEs verteilen und die Laufzeit messen. 
 
ctapfel ist ein anschaulicher Benchmark mit grafischer Ausgabe direkt auf den Bildschirm (alles was an der ausgesuchten Stelle 
(Default oben links)steht wird also gnadenlos bermalt. Standardmig fliegt der Benchmark mit einem harmonischen Zoomfaktor von 
Zwlfter Wurzel aus Zwei auf den komplexen Punkt (0.442733, 0.378092) zu und stoppt nach 200 Frames. Die Iterationtiefe ist auf 2000 eingestellt und 
das Anzeigefenster 640 x 480. Die PS3 mit 6 SPEs braucht dafr inklusive Bildschirmausgabe etwa 3,84 s(ab dem zweiten Durchlauf), 
das entspricht rund 49 GFlop/s. Knapp ber 1 s bentigt sie dabei fr den Datentransport, die reine Rechenleitung ist also etwa 
25 Prozent hher. Das kann man auch der statischen Timing-Analyse (ctapfel_spu.timing) entnehmen. 
   
Alle Werte lassen sich ber #define oder const am Anfang des PPC-Programmes ndern. REPEATLOOP 1 bewirkt eine Wiederholung des Durchlaufs mit anderen Farben, wobei
mit Hopping der Zielpunkt per Zufall etwas verschoben werden kann.  

Viel Spa, as (as@ctmagazin.de)