Parallelization and Generation of Mandelbrot fractal set on CELL … · 2008. 7. 6. · Die...

Post on 08-Mar-2021

1 views 0 download

Transcript of Parallelization and Generation of Mandelbrot fractal set on CELL … · 2008. 7. 6. · Die...

Friedrich-Alexander-Universität Erlangen-NürnbergPhilipp Kutzer, Hauke Stähle 1

HauptseminarMulticore Architectures and Programming

Parallelization and Generation of Mandelbrot fractal set on CELL BE

Philipp Kutzer, Hauke Stähle

{siphkutz,sihastae}@fau.de

Betreuung: Hritam Dutta, Matthias Hartl, Frank Hannig

Hardware-Software-Co-Design

Universität Erlangen-Nürnberg

Friedrich-Alexander-Universität Erlangen-NürnbergPhilipp Kutzer, Hauke Stähle 2

Übersicht

Fraktale und deren Bedeutung

Die Mandelbrotmenge

Parallelisierung

Optimierung

Ergebnisse

Probleme

Friedrich-Alexander-Universität Erlangen-NürnbergPhilipp Kutzer, Hauke Stähle 3

Fraktale und deren Bedeutung

Fraktale dienen zur Beschreibung chaotischer Prozesse

Einfache geometrische Modelle oftmals nicht ausreichend

Wichtige Eigenschaft: Selbstähnlichkeit

Anwendbarkeit z.B.: Wirtschaft Naturbeschreibung

Friedrich-Alexander-Universität Erlangen-NürnbergPhilipp Kutzer, Hauke Stähle 4

Fraktale und deren Bedeutung

Blumenkohl, Bakterienstamm, Schneeflocken

Friedrich-Alexander-Universität Erlangen-NürnbergPhilipp Kutzer, Hauke Stähle 5

Fraktale und deren Bedeutung

Börsenkurs

Friedrich-Alexander-Universität Erlangen-NürnbergPhilipp Kutzer, Hauke Stähle 6

Die Mandelbrotmenge

Teilmenge der komplexen Zahlen

Definition:

Alle komplexen Zahlen c, für welche

beschränkt ist.

zn1=zn2c z0=0, z∈ℂ

Friedrich-Alexander-Universität Erlangen-NürnbergPhilipp Kutzer, Hauke Stähle 7

Die Mandelbrotmenge

Darstellung in der komplexen Ebene:

Friedrich-Alexander-Universität Erlangen-NürnbergPhilipp Kutzer, Hauke Stähle 8

Die Mandelbrotmenge

Implementierung:

uint32_t mandel_double(double cx, double cy, uint32_t max_iter) {

uint32_t iter = 1;double x = 0, y = 0, xtemp = 0;double x2, y2;

// z = x + y * img

do {x2 = x * x;y2 = y * y;

if( x2+y2 > MAX_VALUE ) return iter;

xtemp = x2 - y2 + cx;y = 2 * x * y + cy;x = xtemp;

iter++;

} while ( iter <= max_iter );

return 0;}

Friedrich-Alexander-Universität Erlangen-NürnbergPhilipp Kutzer, Hauke Stähle 9

Die Mandelbrotmenge

Färbung entsprechend Iterationen:

Friedrich-Alexander-Universität Erlangen-NürnbergPhilipp Kutzer, Hauke Stähle 10

Parallelisierung

Punkte können unabhängig voneinander berechnet werden!

Aufteilung der Rechenlast auf die SPUs Vertikale Aufteilung des Bildes

PPU übernimmt Verwaltungsarbeit Zuteilung der Arbeitsaufträge

Länge eines Arbeitsauftrages unbekannt Realisierung mit einer Ready/Busy-Queue

Friedrich-Alexander-Universität Erlangen-NürnbergPhilipp Kutzer, Hauke Stähle 11

Parallelisierung

SPUs bekommen Aufträge zugeteilt Signalisieren Auftragsende

Warteschlangenkonzept Ready-Queue: SPUs, welche IDLE sind Busy-Queue: Arbeitende SPUs

Arbeitsauftrag:

typedef struct {uint32_t posy;uint32_t* framebuffer_addr;uint32_t framebuffer_width;double zoomx;double zoomy;double movex;double movey;uint32_t max_iter;

} workload;

Friedrich-Alexander-Universität Erlangen-NürnbergPhilipp Kutzer, Hauke Stähle 12

Optimierung

Verzweigungen sind teuer!

Loop unrolling Branch prediction

uint32_t mandel_double(double cx, double cy, uint32_t max_iter) {

//Init

do {//Calc x^2, y^2

if( x2+y2 > MAX_VALUE ) return iter;

//Calc z+1

iter++;

} while ( iter <= max_iter );

return 0;}

Friedrich-Alexander-Universität Erlangen-NürnbergPhilipp Kutzer, Hauke Stähle 13

Optimierung

Loop unrolling:uint32_t mandel_double(double cx, double cy, uint32_t max_iter){

//Initdouble temp[4];

do {//Do 4 calculations, save result to temp[1-4]

iter +=4;

if(temp[3] > MAX_VALUE) {

if ( temp[0] > MAX_VALUE ) { return iter-3; }if ( temp[1] > MAX_VALUE ) { return iter-2; }if ( temp[2] > MAX_VALUE ) { return iter-1; }

return iter;}

} while ( iter < max_iter );

result 0;

return result;}

Friedrich-Alexander-Universität Erlangen-NürnbergPhilipp Kutzer, Hauke Stähle 14

Optimierung

Branch prediction:

uint32_t mandel_double(double cx, double cy, uint32_t max_iter) {

//Init

do {//Calc x^2, y^2

if( __builtin_expect( (x2+y2 > MAX_VALUE) , 0 ) ) {return iter;

}

//Calc z+1

iter++;

} while ( iter <= max_iter );

return 0;}

Friedrich-Alexander-Universität Erlangen-NürnbergPhilipp Kutzer, Hauke Stähle 15

Optimierung

Float vs. Double

Float schnell, aber ungenau

Double nur bei hohen Zoomstufen interessant

Verwendung von zwei Implementierungen zur Punktberechnung Float-Genauigkeit bei kleinen Zoomstufen Double-Genauigkeit bei hohen Zoomstufen

Friedrich-Alexander-Universität Erlangen-NürnbergPhilipp Kutzer, Hauke Stähle 16

Ergebnisse

Abhängigkeit von Anzahl SPUs [FPS] Framebufferauflösung: 50 Frames Double Max. Value = 4 100 Iterationen

Doppelpuffer brachte keine Verbesserung, da Daten nicht weiterverarbeitet werden

1 2 3 4 5 6normal 0,82 1,63 2,44 3,24 4,05 4,85

5,914,9

12,84optimal 15,29

SPUs

+ loop unrolling+ branch prediction

+ float/double

Friedrich-Alexander-Universität Erlangen-NürnbergPhilipp Kutzer, Hauke Stähle 17

Probleme

SIMD

Berechnung mehrerer Punkte parallel Abbruchzeitpunkte unterschiedlich Mehr if-Anweisungen Keine Perfomanzsteigerung

Ausnutzung zur schnelleren Berechnung eines Punktes Keine Perfomanzsteigerung

[x2 y2]=[x y ]∗[x y ]

Friedrich-Alexander-Universität Erlangen-NürnbergPhilipp Kutzer, Hauke Stähle 18

The END

Danke für eure Aufmerksamkeit

Demo !?