parallelisierung des growing cells meshing algorithmus

139
Parallelisierung des Growing Cells Meshing Algorithmus Marcus Riemer, Florian Held Fachhochschule Wedel University of Applied Sciences Wedel WS 2011

Upload: marcus-riemer

Post on 13-Jul-2015

294 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Parallelisierung des Growing Cells Meshing Algorithmus

Parallelisierung des Growing Cells MeshingAlgorithmus

Marcus Riemer, Florian Held

Fachhochschule WedelUniversity of Applied Sciences Wedel

WS 2011

Page 2: Parallelisierung des Growing Cells Meshing Algorithmus

Parallelisierung des Smart Growing Cells Algorithmus

Notwendige KenntnisseI Programmierung & Elementare Datenstrukturen

I VorlesungenI Programmstrukturen 2 ausreichendI Algorithmen und Datenstrukturen in C optimal

I InhaltlichI Baume, Listen und Dynamische Arrays

Hilfreiche KenntnisseI Grundlagen Threadprogrammierung

I Vorlesung ProzessprogrammierungI Inhaltlich

I Elementare Probleme (Erzeuger-Verbraucher, Leser-Schreiber)I Thread, Mutex, Lock

Page 3: Parallelisierung des Growing Cells Meshing Algorithmus

Gliederung

Einfuhrung

Surface ReconstructionAllgemeinSmart Growing Cells

ParallelisierungBedingungen1. Ansatz: Bottom Up2. Ansatz: Erzeuger-VerbraucherParallele DatenstrukturenGegenuberstellung

Ergebnis

Page 4: Parallelisierung des Growing Cells Meshing Algorithmus

Surface Reconstruction

Reales Objekt ⇒ Punktwolke ⇒ Mesh

Page 5: Parallelisierung des Growing Cells Meshing Algorithmus

Surface Reconstruction - Dimensionen

I Etwa 9.826.000 Punkte als EingabeI Etwa 4.000.000 Dreiecke im ErgebnismeshI 132 Minuten bei 2,6 Ghz und 8 Gb RAM

Eines der eher kleineren Modelel, die zu verarbeiten sind ...

Page 6: Parallelisierung des Growing Cells Meshing Algorithmus

Surface Reconstruction - Dimensionen

I Etwa 9.826.000 Punkte als Eingabe

I Etwa 4.000.000 Dreiecke im Ergebnismesh

I 132 Minuten bei 2,6 Ghz und 8 Gb RAM

Eines der eher kleineren Modelel, die zu verarbeiten sind ...

Page 7: Parallelisierung des Growing Cells Meshing Algorithmus

Surface Reconstruction - Dimensionen

I Etwa 9.826.000 Punkte als Eingabe

I Etwa 4.000.000 Dreiecke im Ergebnismesh

I 132 Minuten bei 2,6 Ghz und 8 Gb RAM

Eines der eher kleineren Modelel, die zu verarbeiten sind ...

Page 8: Parallelisierung des Growing Cells Meshing Algorithmus

Surface Reconstruction - Dimensionen

I Etwa 9.826.000 Punkte als Eingabe

I Etwa 4.000.000 Dreiecke im Ergebnismesh

I 132 Minuten bei 2,6 Ghz und 8 Gb RAM

Eines der eher kleineren Modelel, die zu verarbeiten sind ...

Page 9: Parallelisierung des Growing Cells Meshing Algorithmus

Surface Reconstruction - Dimensionen

I Etwa 9.826.000 Punkte als Eingabe

I Etwa 4.000.000 Dreiecke im Ergebnismesh

I 132 Minuten bei 2,6 Ghz und 8 Gb RAM

Eines der eher kleineren Modelel, die zu verarbeiten sind ...

Page 10: Parallelisierung des Growing Cells Meshing Algorithmus

Gliederung

Einfuhrung

Surface ReconstructionAllgemeinSmart Growing Cells

ParallelisierungBedingungen1. Ansatz: Bottom Up2. Ansatz: Erzeuger-VerbraucherParallele DatenstrukturenGegenuberstellung

Ergebnis

Page 11: Parallelisierung des Growing Cells Meshing Algorithmus

Surface Reconstruction - Probleme

Moglichkeiten der Verknupfung

Page 12: Parallelisierung des Growing Cells Meshing Algorithmus

Surface Reconstruction - Probleme

Moglichkeiten der Verknupfung

Page 13: Parallelisierung des Growing Cells Meshing Algorithmus

Surface Reconstruction - Probleme

Moglichkeiten der Verknupfung

Page 14: Parallelisierung des Growing Cells Meshing Algorithmus

Surface Reconstruction

Zu analysierende Punktwolke

Page 15: Parallelisierung des Growing Cells Meshing Algorithmus

Smart Growing Cells Algorithmus

Ausgangssituation

Page 16: Parallelisierung des Growing Cells Meshing Algorithmus

Smart Growing Cells Algorithmus

Gebildetes Neuronales Netz

Page 17: Parallelisierung des Growing Cells Meshing Algorithmus

Smart Growing Cells Algorithmus - Schritte

(a) Move / Glatten

(b) Split

(c) Collapse

Page 18: Parallelisierung des Growing Cells Meshing Algorithmus

Smart Growing Cells Algorithmus - Schritte

(a) Move / Glatten

(b) Split

(c) Collapse

Page 19: Parallelisierung des Growing Cells Meshing Algorithmus

Smart Growing Cells Algorithmus - Schritte

(a) Move / Glatten

(b) Split

(c) Collapse

Page 20: Parallelisierung des Growing Cells Meshing Algorithmus

Smart Growing Cells Algorithmus - Ablauf

Ablauf einer Rekonstruktion

Page 21: Parallelisierung des Growing Cells Meshing Algorithmus

Gliederung

Einfuhrung

Surface ReconstructionAllgemeinSmart Growing Cells

ParallelisierungBedingungen1. Ansatz: Bottom Up2. Ansatz: Erzeuger-VerbraucherParallele DatenstrukturenGegenuberstellung

Ergebnis

Page 22: Parallelisierung des Growing Cells Meshing Algorithmus

Parallelisierung

Eignung des Verfahrens fur die ParallelisierungI Robust gegenuber Veranderungen der Reihenfolge und

Verteilung der Operationen

I Große des Meshes ∼ Anzahl moglicher Threads

Theorie: Standardprozess einfach mehrfach ausfuhren

Page 23: Parallelisierung des Growing Cells Meshing Algorithmus

Parallelisierung

Eignung des Verfahrens fur die ParallelisierungI Robust gegenuber Veranderungen der Reihenfolge und

Verteilung der OperationenI Große des Meshes ∼ Anzahl moglicher Threads

Theorie: Standardprozess einfach mehrfach ausfuhren

Page 24: Parallelisierung des Growing Cells Meshing Algorithmus

Parallelisierung

Eignung des Verfahrens fur die ParallelisierungI Robust gegenuber Veranderungen der Reihenfolge und

Verteilung der OperationenI Große des Meshes ∼ Anzahl moglicher Threads

Theorie: Standardprozess einfach mehrfach ausfuhren

Page 25: Parallelisierung des Growing Cells Meshing Algorithmus

Parallelisierung

Eignung des Verfahrens fur die ParallelisierungI Robust gegenuber Veranderungen der Reihenfolge und

Verteilung der OperationenI Große des Meshes ∼ Anzahl moglicher Threads

Theorie: Standardprozess einfach mehrfach ausfuhren

Page 26: Parallelisierung des Growing Cells Meshing Algorithmus

Parallelisierung

Eignung des Verfahrens fur die ParallelisierungI Robust gegenuber Veranderungen der Reihenfolge und

Verteilung der OperationenI Große des Meshes ∼ Anzahl moglicher Threads

Theorie: Standardprozess einfach mehrfach ausfuhren

Page 27: Parallelisierung des Growing Cells Meshing Algorithmus

Parallelisierung

Eignung der Implementierung fur die Parallelisierung

I Hochgradig optimiertI Nutzung von vorreserviertem SpeicherI Eigene grundlegende Datenstrukturen

Mesh

Octree

PooledLis t

Pool

SignalCounterTree

Pool

FacesVerticesEdges

Page 28: Parallelisierung des Growing Cells Meshing Algorithmus

Parallelisierung

Eignung der Implementierung fur die ParallelisierungI Hochgradig optimiert

I Nutzung von vorreserviertem SpeicherI Eigene grundlegende Datenstrukturen

Mesh

Octree

PooledLis t

Pool

SignalCounterTree

Pool

FacesVerticesEdges

Page 29: Parallelisierung des Growing Cells Meshing Algorithmus

Parallelisierung

Eignung der Implementierung fur die ParallelisierungI Hochgradig optimiertI Nutzung von vorreserviertem Speicher

I Eigene grundlegende Datenstrukturen

Mesh

Octree

PooledLis t

Pool

SignalCounterTree

Pool

FacesVerticesEdges

Page 30: Parallelisierung des Growing Cells Meshing Algorithmus

Parallelisierung

Eignung der Implementierung fur die ParallelisierungI Hochgradig optimiertI Nutzung von vorreserviertem SpeicherI Eigene grundlegende Datenstrukturen

Mesh

Octree

PooledLis t

Pool

SignalCounterTree

Pool

FacesVerticesEdges

Page 31: Parallelisierung des Growing Cells Meshing Algorithmus

Parallelisierung

Eignung der Implementierung fur die ParallelisierungI Hochgradig optimiertI Nutzung von vorreserviertem SpeicherI Eigene grundlegende Datenstrukturen

Mesh

Octree

PooledLis t

Pool

SignalCounterTree

Pool

FacesVerticesEdges

Page 32: Parallelisierung des Growing Cells Meshing Algorithmus

Pool

Der Pool

I ist ein vorreservierter Speicherbereich in Form eines Arrays

I ... dessen Große zu Anfang bekannt sein muss

I ... sich jedoch ggf. noch vergroßern lasst.

I stellt einen einfache aber schnelle Speicherverwaltung dar

I ersetzt Aufrufe von new und delete

Page 33: Parallelisierung des Growing Cells Meshing Algorithmus

Pool

Der Pool

I ist ein vorreservierter Speicherbereich in Form eines Arrays

I ... dessen Große zu Anfang bekannt sein muss

I ... sich jedoch ggf. noch vergroßern lasst.

I stellt einen einfache aber schnelle Speicherverwaltung dar

I ersetzt Aufrufe von new und delete

Page 34: Parallelisierung des Growing Cells Meshing Algorithmus

Pool

Der Pool

I ist ein vorreservierter Speicherbereich in Form eines Arrays

I ... dessen Große zu Anfang bekannt sein muss

I ... sich jedoch ggf. noch vergroßern lasst.

I stellt einen einfache aber schnelle Speicherverwaltung dar

I ersetzt Aufrufe von new und delete

Page 35: Parallelisierung des Growing Cells Meshing Algorithmus

Pool

Der Pool

I ist ein vorreservierter Speicherbereich in Form eines Arrays

I ... dessen Große zu Anfang bekannt sein muss

I ... sich jedoch ggf. noch vergroßern lasst.

I stellt einen einfache aber schnelle Speicherverwaltung dar

I ersetzt Aufrufe von new und delete

Page 36: Parallelisierung des Growing Cells Meshing Algorithmus

Pool

Der Pool

I ist ein vorreservierter Speicherbereich in Form eines Arrays

I ... dessen Große zu Anfang bekannt sein muss

I ... sich jedoch ggf. noch vergroßern lasst.

I stellt einen einfache aber schnelle Speicherverwaltung dar

I ersetzt Aufrufe von new und delete

Page 37: Parallelisierung des Growing Cells Meshing Algorithmus

Pool als Speicherwaltung

Statt:

Foo* c r ea t eFoo ( ) {return new Foo();

}

void de l e t eFoo ( Foo* f oo ) {delete foo;

}

... haben wir:

Foo* c r ea t eFoo ( Pool< Foo > * poo l ) {return pool-¿newValue();

}

void de l e t eFoo ( Pool< Foo > * pool , Foo* f oo ) {pool-¿deleteValue( foo );

}

Page 38: Parallelisierung des Growing Cells Meshing Algorithmus

Pool als Speicherwaltung

Statt:

Foo* c r ea t eFoo ( ) {return new Foo();

}

void de l e t eFoo ( Foo* f oo ) {delete foo;

}

... haben wir:

Foo* c r ea t eFoo ( Pool< Foo > * poo l ) {return pool-¿newValue();

}

void de l e t eFoo ( Pool< Foo > * pool , Foo* f oo ) {pool-¿deleteValue( foo );

}

Page 39: Parallelisierung des Growing Cells Meshing Algorithmus

PooledList

Die PooledList

I ist eine Listenimplementierung auf Basis des Pools

I ...mit konstanter Zugriffszeit auf die Elemente.

Implementierungsdetail: Pool und PooledList werden sowohl furdie Speicherverwaltung als auch als Datenstruktur verwendet.

Page 40: Parallelisierung des Growing Cells Meshing Algorithmus

PooledList

Die PooledList

I ist eine Listenimplementierung auf Basis des Pools

I ...mit konstanter Zugriffszeit auf die Elemente.

Implementierungsdetail: Pool und PooledList werden sowohl furdie Speicherverwaltung als auch als Datenstruktur verwendet.

Page 41: Parallelisierung des Growing Cells Meshing Algorithmus

PooledList

Die PooledList

I ist eine Listenimplementierung auf Basis des Pools

I ...mit konstanter Zugriffszeit auf die Elemente.

Implementierungsdetail: Pool und PooledList werden sowohl furdie Speicherverwaltung als auch als Datenstruktur verwendet.

Page 42: Parallelisierung des Growing Cells Meshing Algorithmus

Octree

I Zur Erinnerung: Move-Schritt benotigt Bezugspunkt

I Problem: Finde den nachstgelegenen Nachbarn zu einemgegebenen Punkt p

I Losung mit raumlicher Datenstruktur:1. Unterteile den Raum an den x-, y - und z-Achsen in 8

Unterraume2. Befinden sich in einem Unterraum u mehr als k Punkte, so

wiederhole 1. fur u

Page 43: Parallelisierung des Growing Cells Meshing Algorithmus

Octree

I Zur Erinnerung: Move-Schritt benotigt Bezugspunkt

I Problem: Finde den nachstgelegenen Nachbarn zu einemgegebenen Punkt p

I Losung mit raumlicher Datenstruktur:1. Unterteile den Raum an den x-, y - und z-Achsen in 8

Unterraume2. Befinden sich in einem Unterraum u mehr als k Punkte, so

wiederhole 1. fur u

Page 44: Parallelisierung des Growing Cells Meshing Algorithmus

Octree

I Zur Erinnerung: Move-Schritt benotigt Bezugspunkt

I Problem: Finde den nachstgelegenen Nachbarn zu einemgegebenen Punkt p

I Losung mit raumlicher Datenstruktur:1. Unterteile den Raum an den x-, y - und z-Achsen in 8

Unterraume

2. Befinden sich in einem Unterraum u mehr als k Punkte, sowiederhole 1. fur u

Page 45: Parallelisierung des Growing Cells Meshing Algorithmus

Octree

I Zur Erinnerung: Move-Schritt benotigt Bezugspunkt

I Problem: Finde den nachstgelegenen Nachbarn zu einemgegebenen Punkt p

I Losung mit raumlicher Datenstruktur:1. Unterteile den Raum an den x-, y - und z-Achsen in 8

Unterraume2. Befinden sich in einem Unterraum u mehr als k Punkte, so

wiederhole 1. fur u

Page 46: Parallelisierung des Growing Cells Meshing Algorithmus

Octree

I Zur Erinnerung: Move-Schritt benotigt Bezugspunkt

I Problem: Finde den nachstgelegenen Nachbarn zu einemgegebenen Punkt p

I Losung mit raumlicher Datenstruktur:1. Unterteile den Raum an den x-, y - und z-Achsen in 8

Unterraume2. Befinden sich in einem Unterraum u mehr als k Punkte, so

wiederhole 1. fur u

Page 47: Parallelisierung des Growing Cells Meshing Algorithmus

Octree

I Ergebnis: Effiziente Suche des nachsten Nachbarn in einerglobalen Datenstruktur

Page 48: Parallelisierung des Growing Cells Meshing Algorithmus

Octree

I Ergebnis: Effiziente Suche des nachsten Nachbarn in einerglobalen Datenstruktur

Page 49: Parallelisierung des Growing Cells Meshing Algorithmus

SignalCounterTree

I Zur Erinnerung: Split-Schritt benotigt Gewinner

I Move-Schritt erhoht “Signalzahler” des Vertex’

I Vertex mit hochstem Signalzahler ist Gewinner

I Verwaltung der Signalzahler in Form des SignalCounterTreesimplementiert:

I Rot-Schwarz-BaumI globale Datenstruktur

Page 50: Parallelisierung des Growing Cells Meshing Algorithmus

SignalCounterTree

I Zur Erinnerung: Split-Schritt benotigt Gewinner

I Move-Schritt erhoht “Signalzahler” des Vertex’

I Vertex mit hochstem Signalzahler ist Gewinner

I Verwaltung der Signalzahler in Form des SignalCounterTreesimplementiert:

I Rot-Schwarz-BaumI globale Datenstruktur

Page 51: Parallelisierung des Growing Cells Meshing Algorithmus

SignalCounterTree

I Zur Erinnerung: Split-Schritt benotigt Gewinner

I Move-Schritt erhoht “Signalzahler” des Vertex’

I Vertex mit hochstem Signalzahler ist Gewinner

I Verwaltung der Signalzahler in Form des SignalCounterTreesimplementiert:

I Rot-Schwarz-BaumI globale Datenstruktur

Page 52: Parallelisierung des Growing Cells Meshing Algorithmus

SignalCounterTree

I Zur Erinnerung: Split-Schritt benotigt Gewinner

I Move-Schritt erhoht “Signalzahler” des Vertex’

I Vertex mit hochstem Signalzahler ist Gewinner

I Verwaltung der Signalzahler in Form des SignalCounterTreesimplementiert:

I Rot-Schwarz-BaumI globale Datenstruktur

Page 53: Parallelisierung des Growing Cells Meshing Algorithmus

Zusammenfassung der vorhandenen Datenstrukturen

I Octree ist global

I SCTree (SignalCounterTree) ist global

I Pool und PooledList werden als Datenstruktur verwendet→ potentiell global

Parallelisierung des Verfahrens 6= Parallelisierung derImplementierung

Page 54: Parallelisierung des Growing Cells Meshing Algorithmus

Zusammenfassung der vorhandenen Datenstrukturen

I Octree ist global

I SCTree (SignalCounterTree) ist global

I Pool und PooledList werden als Datenstruktur verwendet→ potentiell global

Parallelisierung des Verfahrens 6= Parallelisierung derImplementierung

Page 55: Parallelisierung des Growing Cells Meshing Algorithmus

Zusammenfassung der vorhandenen Datenstrukturen

I Octree ist global

I SCTree (SignalCounterTree) ist global

I Pool und PooledList werden als Datenstruktur verwendet→ potentiell global

Parallelisierung des Verfahrens 6= Parallelisierung derImplementierung

Page 56: Parallelisierung des Growing Cells Meshing Algorithmus

Zusammenfassung der vorhandenen Datenstrukturen

I Octree ist global

I SCTree (SignalCounterTree) ist global

I Pool und PooledList werden als Datenstruktur verwendet→ potentiell global

Parallelisierung des Verfahrens 6= Parallelisierung derImplementierung

Page 57: Parallelisierung des Growing Cells Meshing Algorithmus

Parallelisierung - Bottom Up

Grundlegende IdeeI Sperren aller grundlegenden DatenstrukturenI Keine Anpassung des Algorithmus→ Parallelisierung ”abschaltbar”

Mesh

Octree

PooledLis t

Pool

SignalCounterTree

Pool

FacesVerticesEdges

Page 58: Parallelisierung des Growing Cells Meshing Algorithmus

Parallelisierung - Bottom Up

Grundlegender Ansatz:

I Lesende Zugriffe parallel zulassen

I Schreibende Zugriffe exklusiv ausfuhren

→ Typisches Leser-Schreiber Problem

Losung mit Boost.Thread

I SharedLockable modelliert geteilten und exklusiven Zugriff

I Sicherer: Sperrobjekte benutzen

Page 59: Parallelisierung des Growing Cells Meshing Algorithmus

Parallelisierung - Bottom Up

Grundlegender Ansatz:

I Lesende Zugriffe parallel zulassen

I Schreibende Zugriffe exklusiv ausfuhren

→ Typisches Leser-Schreiber Problem

Losung mit Boost.Thread

I SharedLockable modelliert geteilten und exklusiven Zugriff

I Sicherer: Sperrobjekte benutzen

Page 60: Parallelisierung des Growing Cells Meshing Algorithmus

Parallelisierung - Bottom Up

Grundlegender Ansatz:

I Lesende Zugriffe parallel zulassen

I Schreibende Zugriffe exklusiv ausfuhren

→ Typisches Leser-Schreiber Problem

Losung mit Boost.Thread

I SharedLockable modelliert geteilten und exklusiven Zugriff

I Sicherer: Sperrobjekte benutzen

Page 61: Parallelisierung des Growing Cells Meshing Algorithmus

Parallelisierung - Bottom Up

class Threadsa f e{public :

int ha s I ndex ( int i n d e x ) {SharedLock lock( mMutex );

return ( mValueCount <= index ) ;}

int s e tVa l u eSa f e ( int i ndex , int v a l u e ) {ExclusiveLock lock( mMutex );

if ( ha s I ndex ( i nd ex ) ) {mValues [ i nd ex ] = va l u e ;return ( true )

}

return ( false ) ;}

} ;

Page 62: Parallelisierung des Growing Cells Meshing Algorithmus

Parallelisierung - Bottom Up - Problemfall Rekursion

class Threadsa f e{public :

int ha s I ndex ( int i n d e x ) {SharedLock lock( mMutex );

return ( ha s I ndex Imp l ( i nd e x ) ) ;}

int s e tVa l u eSa f e ( int i ndex , int v a l u e ) {ExclusiveLock lock( mMutex );

return ( s e tVa l u eSa f e Imp l ( index , v a l u e ) ) ;}

private :int ha s I ndex Imp l ( int i n d e x ) {

return ( mValueCount <= index ) ;}int s e tVa l u eSa f e Imp l ( int i ndex , int v a l u e ) {

/* Uses ha s I ndex Imp l ( ) i n imp l ementa t i on */}

} ;

Page 63: Parallelisierung des Growing Cells Meshing Algorithmus

Parallelisierung - Bottom Up - Problemfall Rekursion

Usercode

public Val* getNewVal()

public void delVal(Val*)

public void initFastArray(uint, uint)

public void initFastArray(uint)

public void increaseFastArray(float)

public void resizeFastArray(uint)

public bool isDeleted(Val*)

public Val* getVal(const uint)

public uint indexOf(Val*)

public bool isValid(Val*)

public void freeArray()

private Val* getNewValImpl()

private void delValImpl(Val*)

private void initFastArrayImpl(uint, uint, bool)

private void increaseFastArrayImpl(float)private void resizeFastArrayImpl(uint)

isDeletedImpl

private Val* getValImpl(const uint)

private uint indexOfImpl(Val*)

private bool isValidImpl(Val*)

private void freeArrayImpl()

private uint deletionsToIndex(uint) private void sortDeleted()

private uint biggerDeletionIndex(uint, uint, uint)

private void increaseDeletedStack() private void resizeDeletedStack(uint)

private uint deletionsToAddress(uint)

constructor

createNode

WriterReaderNodeWriter

getNearestPoint

getNearestXPoints

NodeReader

getNearestXPointsCore

getEdgeBoxSizegetCenter ptInBox

reinsert

addPtCore

removeVec

addPtToNode

minimisationCascadeAlternativ

deletePotentialEmptyNodesremoveVecCorecorrectBox addToList

ListWriterListReader

checkNode

getPointsInQRadiusCore

getPointsInQRadius

getNumOfNodes getNumOfPtsgetAverageListLengthnotMoreThenXChildren

getAverageDepth

initialAddPt

initialAddPtCore

addPt

freeXPointsList resizeInRadiusSListfreePointsInRadiusList getListForNearestPointsSearch

Page 64: Parallelisierung des Growing Cells Meshing Algorithmus

Parallelisierung - Bottom Up - Problemfall Rekursion

Usercode

public Val* getNewVal()

public void delVal(Val*)

public void initFastArray(uint, uint)

public void initFastArray(uint)

public void increaseFastArray(float)

public void resizeFastArray(uint)

public bool isDeleted(Val*)

public Val* getVal(const uint)

public uint indexOf(Val*)

public bool isValid(Val*)

public void freeArray()

private Val* getNewValImpl()

private void delValImpl(Val*)

private void initFastArrayImpl(uint, uint, bool)

private void increaseFastArrayImpl(float)private void resizeFastArrayImpl(uint)

isDeletedImpl

private Val* getValImpl(const uint)

private uint indexOfImpl(Val*)

private bool isValidImpl(Val*)

private void freeArrayImpl()

private uint deletionsToIndex(uint) private void sortDeleted()

private uint biggerDeletionIndex(uint, uint, uint)

private void increaseDeletedStack() private void resizeDeletedStack(uint)

private uint deletionsToAddress(uint)

constructor

createNode

WriterReaderNodeWriter

getNearestPoint

getNearestXPoints

NodeReader

getNearestXPointsCore

getEdgeBoxSizegetCenter ptInBox

reinsert

addPtCore

removeVec

addPtToNode

minimisationCascadeAlternativ

deletePotentialEmptyNodesremoveVecCorecorrectBox addToList

ListWriterListReader

checkNode

getPointsInQRadiusCore

getPointsInQRadius

getNumOfNodes getNumOfPtsgetAverageListLengthnotMoreThenXChildren

getAverageDepth

initialAddPt

initialAddPtCore

addPt

freeXPointsList resizeInRadiusSListfreePointsInRadiusList getListForNearestPointsSearch

Page 65: Parallelisierung des Growing Cells Meshing Algorithmus

Parallelisierung - Bottom Up - Problemefall Rekursion

Erster Ansatz:

I Offentliche Methoden setzen eine Sperre und delegieren dieeigentliche Arbeit an eine private Methode

I Private Methoden rufen niemals offentliche Methoden auf

→ Umfangreiche Anderungen am Code→ Inkonsistente Zustande durch zu kurze Sperren

Zweiter Ansatz:

I Rekursive Mutexe verwenden

→ Noch langsamer→ Inkonsistente Zustande durch zu kurze Sperren

Page 66: Parallelisierung des Growing Cells Meshing Algorithmus

Parallelisierung - Bottom Up - Problemefall Rekursion

Erster Ansatz:

I Offentliche Methoden setzen eine Sperre und delegieren dieeigentliche Arbeit an eine private Methode

I Private Methoden rufen niemals offentliche Methoden auf

→ Umfangreiche Anderungen am Code

→ Inkonsistente Zustande durch zu kurze Sperren

Zweiter Ansatz:

I Rekursive Mutexe verwenden

→ Noch langsamer→ Inkonsistente Zustande durch zu kurze Sperren

Page 67: Parallelisierung des Growing Cells Meshing Algorithmus

Parallelisierung - Bottom Up - Problemefall Rekursion

Erster Ansatz:

I Offentliche Methoden setzen eine Sperre und delegieren dieeigentliche Arbeit an eine private Methode

I Private Methoden rufen niemals offentliche Methoden auf

→ Umfangreiche Anderungen am Code→ Inkonsistente Zustande durch zu kurze Sperren

Zweiter Ansatz:

I Rekursive Mutexe verwenden

→ Noch langsamer→ Inkonsistente Zustande durch zu kurze Sperren

Page 68: Parallelisierung des Growing Cells Meshing Algorithmus

Parallelisierung - Bottom Up - Problemefall Rekursion

Erster Ansatz:

I Offentliche Methoden setzen eine Sperre und delegieren dieeigentliche Arbeit an eine private Methode

I Private Methoden rufen niemals offentliche Methoden auf

→ Umfangreiche Anderungen am Code→ Inkonsistente Zustande durch zu kurze Sperren

Zweiter Ansatz:

I Rekursive Mutexe verwenden

→ Noch langsamer→ Inkonsistente Zustande durch zu kurze Sperren

Page 69: Parallelisierung des Growing Cells Meshing Algorithmus

Parallelisierung - Bottom Up - Problemefall Rekursion

Erster Ansatz:

I Offentliche Methoden setzen eine Sperre und delegieren dieeigentliche Arbeit an eine private Methode

I Private Methoden rufen niemals offentliche Methoden auf

→ Umfangreiche Anderungen am Code→ Inkonsistente Zustande durch zu kurze Sperren

Zweiter Ansatz:

I Rekursive Mutexe verwenden

→ Noch langsamer

→ Inkonsistente Zustande durch zu kurze Sperren

Page 70: Parallelisierung des Growing Cells Meshing Algorithmus

Parallelisierung - Bottom Up - Problemefall Rekursion

Erster Ansatz:

I Offentliche Methoden setzen eine Sperre und delegieren dieeigentliche Arbeit an eine private Methode

I Private Methoden rufen niemals offentliche Methoden auf

→ Umfangreiche Anderungen am Code→ Inkonsistente Zustande durch zu kurze Sperren

Zweiter Ansatz:

I Rekursive Mutexe verwenden

→ Noch langsamer→ Inkonsistente Zustande durch zu kurze Sperren

Page 71: Parallelisierung des Growing Cells Meshing Algorithmus

Parallelisierung - Bottom Up - Probleme allgemein

I Haufiges Sperren und Entsperren von Mutexen

I Effektives Sperren balancierter Baume ein offenes Problem

→ Lock auch langsam wenn keine Kollisionen auftreten→ Kein Verhindern unerwarteter destruktiver Operationen

Page 72: Parallelisierung des Growing Cells Meshing Algorithmus

Parallelisierung - Bottom Up - Probleme allgemein

I Haufiges Sperren und Entsperren von Mutexen

I Effektives Sperren balancierter Baume ein offenes Problem

→ Lock auch langsam wenn keine Kollisionen auftreten

→ Kein Verhindern unerwarteter destruktiver Operationen

Page 73: Parallelisierung des Growing Cells Meshing Algorithmus

Parallelisierung - Bottom Up - Probleme allgemein

I Haufiges Sperren und Entsperren von Mutexen

I Effektives Sperren balancierter Baume ein offenes Problem

→ Lock auch langsam wenn keine Kollisionen auftreten→ Kein Verhindern unerwarteter destruktiver Operationen

Page 74: Parallelisierung des Growing Cells Meshing Algorithmus

Parallelisierung - Erzeuger-Verbraucher

Problem: Versucht Parallelismus implizit zu nutzen

Losung: Moglichkeiten des SGC Algorithmus ausnutzen

I ”Sperrbereiche” in denen ein Thread exklusiv arbeitet→ Potenziell sehr viel weniger Sperrvorgange notig

Grundlegende Idee

I Einen Thread fur Verwaltungsaufgaben

I n weitere Threads fur die ”eigentliche Arbeit”

→ Klassisches Erzeuger-Verbraucher Problem

Page 75: Parallelisierung des Growing Cells Meshing Algorithmus

Parallelisierung - Erzeuger-Verbraucher

Problem: Versucht Parallelismus implizit zu nutzen

Losung: Moglichkeiten des SGC Algorithmus ausnutzen

I ”Sperrbereiche” in denen ein Thread exklusiv arbeitet→ Potenziell sehr viel weniger Sperrvorgange notig

Grundlegende Idee

I Einen Thread fur Verwaltungsaufgaben

I n weitere Threads fur die ”eigentliche Arbeit”

→ Klassisches Erzeuger-Verbraucher Problem

Page 76: Parallelisierung des Growing Cells Meshing Algorithmus

Parallelisierung - Erzeuger-Verbraucher

Problem: Versucht Parallelismus implizit zu nutzen

Losung: Moglichkeiten des SGC Algorithmus ausnutzen

I ”Sperrbereiche” in denen ein Thread exklusiv arbeitet→ Potenziell sehr viel weniger Sperrvorgange notig

Grundlegende Idee

I Einen Thread fur Verwaltungsaufgaben

I n weitere Threads fur die ”eigentliche Arbeit”

→ Klassisches Erzeuger-Verbraucher Problem

Page 77: Parallelisierung des Growing Cells Meshing Algorithmus

Parallelisierung - Erzeuger-Verbraucher

Problem: Versucht Parallelismus implizit zu nutzen

Losung: Moglichkeiten des SGC Algorithmus ausnutzen

I ”Sperrbereiche” in denen ein Thread exklusiv arbeitet→ Potenziell sehr viel weniger Sperrvorgange notig

Grundlegende Idee

I Einen Thread fur Verwaltungsaufgaben

I n weitere Threads fur die ”eigentliche Arbeit”

→ Klassisches Erzeuger-Verbraucher Problem

Page 78: Parallelisierung des Growing Cells Meshing Algorithmus

Parallelisierung - Worker, Jobs und WorkerManager

Worker

+ execute() : void

Boost::ThreadWorkerManager

+ getNextAvailableJob() : Job

SpatialLocker

+ lock( vec3d pos , float radius ) : bool+ unlock( vec3d pos ) : bool

WorkingSetJob

+ isStatic() : bool

Page 79: Parallelisierung des Growing Cells Meshing Algorithmus

Parallelisierung - getNextAvailableJob()

I Grundidee: WorkerManager-Thread erzeugt Jobs auf ”Vorrat”→ getNextAvailableJob() nur noch eine pop Operation

Move Move Split Move Move Move Split Collapse ... PushPop

I Erzeugte Jobs sperren Bereich bis zu ihrer Finalisierung→ Wahrscheinlichkeit der erfolgreichen Joberstellung sinkt

I Optimierung fur kleine Meshes notwendig→ Nur ein Thread→ Erstellt Jobs ”On Demand”

Page 80: Parallelisierung des Growing Cells Meshing Algorithmus

Parallelisierung - getNextAvailableJob()

I Grundidee: WorkerManager-Thread erzeugt Jobs auf ”Vorrat”→ getNextAvailableJob() nur noch eine pop Operation

Move Move Split Move Move Move Split Collapse ... PushPop

I Erzeugte Jobs sperren Bereich bis zu ihrer Finalisierung→ Wahrscheinlichkeit der erfolgreichen Joberstellung sinkt

I Optimierung fur kleine Meshes notwendig→ Nur ein Thread→ Erstellt Jobs ”On Demand”

Page 81: Parallelisierung des Growing Cells Meshing Algorithmus

Parallelisierung - getNextAvailableJob()

I Grundidee: WorkerManager-Thread erzeugt Jobs auf ”Vorrat”→ getNextAvailableJob() nur noch eine pop Operation

Move Move Split Move Move Move Split Collapse ... PushPop

I Erzeugte Jobs sperren Bereich bis zu ihrer Finalisierung→ Wahrscheinlichkeit der erfolgreichen Joberstellung sinkt

I Optimierung fur kleine Meshes notwendig→ Nur ein Thread→ Erstellt Jobs ”On Demand”

Page 82: Parallelisierung des Growing Cells Meshing Algorithmus

Parallelisierung - Auswahl der Strategie

Umschaltung auf “große” Strategie erfolgt zu spat

I Moglichkeit der Parallelitat wird nicht ausgenutzt

Umschaltung auf “große” Strategie erfolgt zu fruh

I Es ist gar kein Platz fur mehrere Threads→ Overhead durch raumliche Sperrungen

Page 83: Parallelisierung des Growing Cells Meshing Algorithmus

Parallelisierung - Auswahl der Strategie

Umschaltung auf “große” Strategie erfolgt zu spat

I Moglichkeit der Parallelitat wird nicht ausgenutzt

Umschaltung auf “große” Strategie erfolgt zu fruh

I Es ist gar kein Platz fur mehrere Threads→ Overhead durch raumliche Sperrungen

Page 84: Parallelisierung des Growing Cells Meshing Algorithmus

Parallele Datenstrukturen

I Erkenntnis: Vorhandene globale Datenstrukturen ungeeignetfur Parallelisierung

I Aufgabe: Implementierung neuer Datenstrukturen furI Pool und PooledListI OctreeI SCTree

Page 85: Parallelisierung des Growing Cells Meshing Algorithmus

Parallele Datenstrukturen

I Erkenntnis: Vorhandene globale Datenstrukturen ungeeignetfur Parallelisierung

I Aufgabe: Implementierung neuer Datenstrukturen furI Pool und PooledListI OctreeI SCTree

Page 86: Parallelisierung des Growing Cells Meshing Algorithmus

Paralleler Octree

I Idee: Einfuhrung einer Ebene, auf der gelockt wird

I oberhalb der Ebene sind generell nur lesende Zugriffe erlaubtI unterhalb der Ebene darf sich in jedem Unterbaum nur ein

Thread befinden

Page 87: Parallelisierung des Growing Cells Meshing Algorithmus

Paralleler Octree

I Idee: Einfuhrung einer Ebene, auf der gelockt wirdI oberhalb der Ebene sind generell nur lesende Zugriffe erlaubt

I unterhalb der Ebene darf sich in jedem Unterbaum nur einThread befinden

Page 88: Parallelisierung des Growing Cells Meshing Algorithmus

Paralleler Octree

I Idee: Einfuhrung einer Ebene, auf der gelockt wirdI oberhalb der Ebene sind generell nur lesende Zugriffe erlaubtI unterhalb der Ebene darf sich in jedem Unterbaum nur ein

Thread befinden

Page 89: Parallelisierung des Growing Cells Meshing Algorithmus

Paralleler Octree

I Idee: Einfuhrung einer Ebene, auf der gelockt wirdI oberhalb der Ebene sind generell nur lesende Zugriffe erlaubtI unterhalb der Ebene darf sich in jedem Unterbaum nur ein

Thread befinden

Page 90: Parallelisierung des Growing Cells Meshing Algorithmus

Aus SCTree wird SCMap

I Zur Erinnerung: SCTree ist ein RBTree (→ balanciert!)

I Notwendigkeit: komplett neue Datenstruktur

I Wir wissen: Großtes Element wird am haufigsten gesuchtI Außerdem haben Beobachtungen ergeben:

I Es gibt obere und untere Schranken fur SignaleI Signale sind annahernd normalverteilt

Page 91: Parallelisierung des Growing Cells Meshing Algorithmus

Aus SCTree wird SCMap

I Zur Erinnerung: SCTree ist ein RBTree (→ balanciert!)

I Notwendigkeit: komplett neue Datenstruktur

I Wir wissen: Großtes Element wird am haufigsten gesuchtI Außerdem haben Beobachtungen ergeben:

I Es gibt obere und untere Schranken fur SignaleI Signale sind annahernd normalverteilt

Page 92: Parallelisierung des Growing Cells Meshing Algorithmus

Aus SCTree wird SCMap

I Zur Erinnerung: SCTree ist ein RBTree (→ balanciert!)

I Notwendigkeit: komplett neue Datenstruktur

I Wir wissen: Großtes Element wird am haufigsten gesucht

I Außerdem haben Beobachtungen ergeben:I Es gibt obere und untere Schranken fur SignaleI Signale sind annahernd normalverteilt

Page 93: Parallelisierung des Growing Cells Meshing Algorithmus

Aus SCTree wird SCMap

I Zur Erinnerung: SCTree ist ein RBTree (→ balanciert!)

I Notwendigkeit: komplett neue Datenstruktur

I Wir wissen: Großtes Element wird am haufigsten gesuchtI Außerdem haben Beobachtungen ergeben:

I Es gibt obere und untere Schranken fur SignaleI Signale sind annahernd normalverteilt

Page 94: Parallelisierung des Growing Cells Meshing Algorithmus

Aus SCTree wird SCMap

I Zur Erinnerung: SCTree ist ein RBTree (→ balanciert!)

I Notwendigkeit: komplett neue Datenstruktur

I Wir wissen: Großtes Element wird am haufigsten gesuchtI Außerdem haben Beobachtungen ergeben:

I Es gibt obere und untere Schranken fur Signale

I Signale sind annahernd normalverteilt

Page 95: Parallelisierung des Growing Cells Meshing Algorithmus

Aus SCTree wird SCMap

I Zur Erinnerung: SCTree ist ein RBTree (→ balanciert!)

I Notwendigkeit: komplett neue Datenstruktur

I Wir wissen: Großtes Element wird am haufigsten gesuchtI Außerdem haben Beobachtungen ergeben:

I Es gibt obere und untere Schranken fur SignaleI Signale sind annahernd normalverteilt

Page 96: Parallelisierung des Growing Cells Meshing Algorithmus

Aus SCTree wird SCMap

Implementierung als geordnete Hashtabelle:I Hashfunktion ist Normalverteilungsapproximation

Page 97: Parallelisierung des Growing Cells Meshing Algorithmus

Aus SCTree wird SCMap

Implementierung als geordnete Hashtabelle:I Hashfunktion ist Normalverteilungsapproximation

Page 98: Parallelisierung des Growing Cells Meshing Algorithmus

Aus SCTree wird SCMap

Implementierung als geordnete Hashtabelle:

I Hashfunktion ist Normalverteilungsapproximation

I Lage des großten Elements kann gunstig mitgespeichertwerden (→ echte konstante Zugriffszeit)

I Anzahl der Buckets frei wahlbar

I Durchschnittliche Große der Buckets frei wahlbar

→ sehr flexibel

Page 99: Parallelisierung des Growing Cells Meshing Algorithmus

Aus SCTree wird SCMap

Implementierung als geordnete Hashtabelle:

I Hashfunktion ist Normalverteilungsapproximation

I Lage des großten Elements kann gunstig mitgespeichertwerden (→ echte konstante Zugriffszeit)

I Anzahl der Buckets frei wahlbar

I Durchschnittliche Große der Buckets frei wahlbar

→ sehr flexibel

Page 100: Parallelisierung des Growing Cells Meshing Algorithmus

Aus SCTree wird SCMap

Implementierung als geordnete Hashtabelle:

I Hashfunktion ist Normalverteilungsapproximation

I Lage des großten Elements kann gunstig mitgespeichertwerden (→ echte konstante Zugriffszeit)

I Anzahl der Buckets frei wahlbar

I Durchschnittliche Große der Buckets frei wahlbar

→ sehr flexibel

Page 101: Parallelisierung des Growing Cells Meshing Algorithmus

Aus SCTree wird SCMap

Implementierung als geordnete Hashtabelle:

I Hashfunktion ist Normalverteilungsapproximation

I Lage des großten Elements kann gunstig mitgespeichertwerden (→ echte konstante Zugriffszeit)

I Anzahl der Buckets frei wahlbar

I Durchschnittliche Große der Buckets frei wahlbar

→ sehr flexibel

Page 102: Parallelisierung des Growing Cells Meshing Algorithmus

Aus SCTree wird SCMap

Implementierung als geordnete Hashtabelle:

I Hashfunktion ist Normalverteilungsapproximation

I Lage des großten Elements kann gunstig mitgespeichertwerden (→ echte konstante Zugriffszeit)

I Anzahl der Buckets frei wahlbar

I Durchschnittliche Große der Buckets frei wahlbar

→ sehr flexibel

Page 103: Parallelisierung des Growing Cells Meshing Algorithmus

Parallelisierung - SpatialLocker

Veranschaulichung der Sperrbereiche:

Page 104: Parallelisierung des Growing Cells Meshing Algorithmus

Parallelisierung - SpatialLocker

I Aufgaben des SpatialLockers:

I Verwaltung aller gesperrten BereicheI Pruft, ob in einem Bereich gearbeitet werden darf

I Allgemeine Problematik ist die Große des Sperrbereichs:I Bei zu großen Sperrbereichen: Ablehnung neuer Jobs (→

Programmstillstand)I Bei zu kleinen Sperrbereichen: Unerwartete Uberschneidungen

(→ Programmabsturz)

I Ist der Sperrbereich gut gewahlt, so treten keine unerwartetenUberschneidungen auf

→ parallelen Zugriffe auf das selbe Pool-/PooledList-Objektsind ausgeschlossen

Page 105: Parallelisierung des Growing Cells Meshing Algorithmus

Parallelisierung - SpatialLocker

I Aufgaben des SpatialLockers:I Verwaltung aller gesperrten Bereiche

I Pruft, ob in einem Bereich gearbeitet werden darf

I Allgemeine Problematik ist die Große des Sperrbereichs:I Bei zu großen Sperrbereichen: Ablehnung neuer Jobs (→

Programmstillstand)I Bei zu kleinen Sperrbereichen: Unerwartete Uberschneidungen

(→ Programmabsturz)

I Ist der Sperrbereich gut gewahlt, so treten keine unerwartetenUberschneidungen auf

→ parallelen Zugriffe auf das selbe Pool-/PooledList-Objektsind ausgeschlossen

Page 106: Parallelisierung des Growing Cells Meshing Algorithmus

Parallelisierung - SpatialLocker

I Aufgaben des SpatialLockers:I Verwaltung aller gesperrten BereicheI Pruft, ob in einem Bereich gearbeitet werden darf

I Allgemeine Problematik ist die Große des Sperrbereichs:I Bei zu großen Sperrbereichen: Ablehnung neuer Jobs (→

Programmstillstand)I Bei zu kleinen Sperrbereichen: Unerwartete Uberschneidungen

(→ Programmabsturz)

I Ist der Sperrbereich gut gewahlt, so treten keine unerwartetenUberschneidungen auf

→ parallelen Zugriffe auf das selbe Pool-/PooledList-Objektsind ausgeschlossen

Page 107: Parallelisierung des Growing Cells Meshing Algorithmus

Parallelisierung - SpatialLocker

I Aufgaben des SpatialLockers:I Verwaltung aller gesperrten BereicheI Pruft, ob in einem Bereich gearbeitet werden darf

I Allgemeine Problematik ist die Große des Sperrbereichs:

I Bei zu großen Sperrbereichen: Ablehnung neuer Jobs (→Programmstillstand)

I Bei zu kleinen Sperrbereichen: Unerwartete Uberschneidungen(→ Programmabsturz)

I Ist der Sperrbereich gut gewahlt, so treten keine unerwartetenUberschneidungen auf

→ parallelen Zugriffe auf das selbe Pool-/PooledList-Objektsind ausgeschlossen

Page 108: Parallelisierung des Growing Cells Meshing Algorithmus

Parallelisierung - SpatialLocker

I Aufgaben des SpatialLockers:I Verwaltung aller gesperrten BereicheI Pruft, ob in einem Bereich gearbeitet werden darf

I Allgemeine Problematik ist die Große des Sperrbereichs:I Bei zu großen Sperrbereichen: Ablehnung neuer Jobs (→

Programmstillstand)

I Bei zu kleinen Sperrbereichen: Unerwartete Uberschneidungen(→ Programmabsturz)

I Ist der Sperrbereich gut gewahlt, so treten keine unerwartetenUberschneidungen auf

→ parallelen Zugriffe auf das selbe Pool-/PooledList-Objektsind ausgeschlossen

Page 109: Parallelisierung des Growing Cells Meshing Algorithmus

Parallelisierung - SpatialLocker

I Aufgaben des SpatialLockers:I Verwaltung aller gesperrten BereicheI Pruft, ob in einem Bereich gearbeitet werden darf

I Allgemeine Problematik ist die Große des Sperrbereichs:I Bei zu großen Sperrbereichen: Ablehnung neuer Jobs (→

Programmstillstand)I Bei zu kleinen Sperrbereichen: Unerwartete Uberschneidungen

(→ Programmabsturz)

I Ist der Sperrbereich gut gewahlt, so treten keine unerwartetenUberschneidungen auf

→ parallelen Zugriffe auf das selbe Pool-/PooledList-Objektsind ausgeschlossen

Page 110: Parallelisierung des Growing Cells Meshing Algorithmus

Parallelisierung - SpatialLocker

I Aufgaben des SpatialLockers:I Verwaltung aller gesperrten BereicheI Pruft, ob in einem Bereich gearbeitet werden darf

I Allgemeine Problematik ist die Große des Sperrbereichs:I Bei zu großen Sperrbereichen: Ablehnung neuer Jobs (→

Programmstillstand)I Bei zu kleinen Sperrbereichen: Unerwartete Uberschneidungen

(→ Programmabsturz)

I Ist der Sperrbereich gut gewahlt, so treten keine unerwartetenUberschneidungen auf

→ parallelen Zugriffe auf das selbe Pool-/PooledList-Objektsind ausgeschlossen

Page 111: Parallelisierung des Growing Cells Meshing Algorithmus

Parallelisierung - Gegenuberstellung

Parallelisierung im Straßenverkehr

Page 112: Parallelisierung des Growing Cells Meshing Algorithmus

Parallelisierung - Gegenuberstellung

Parallelisierung im Straßenverkehr - Bottom Up

Page 113: Parallelisierung des Growing Cells Meshing Algorithmus

Parallelisierung - Gegenuberstellung

Parallelisierung im Straßenverkehr - Sperrbereiche

Page 114: Parallelisierung des Growing Cells Meshing Algorithmus

Gliederung

Einfuhrung

Surface ReconstructionAllgemeinSmart Growing Cells

ParallelisierungBedingungen1. Ansatz: Bottom Up2. Ansatz: Erzeuger-VerbraucherParallele DatenstrukturenGegenuberstellung

Ergebnis

Page 115: Parallelisierung des Growing Cells Meshing Algorithmus

Ergebnis - Zeitgewinn

I Ausfuhrungszeit = 50% SmallMeshStrategy + 50%LargeMeshStrategy

I 10% Zeitgewinn mit jedem zusatzlichen Kern

Page 116: Parallelisierung des Growing Cells Meshing Algorithmus

Ergebnis - Zeitgewinn

I Ausfuhrungszeit = 50% SmallMeshStrategy + 50%LargeMeshStrategy

I 10% Zeitgewinn mit jedem zusatzlichen Kern

Page 117: Parallelisierung des Growing Cells Meshing Algorithmus

Ergebnis - Zeitgewinn

I Ausfuhrungszeit = 50% SmallMeshStrategy + 50%LargeMeshStrategy

I 10% Zeitgewinn mit jedem zusatzlichen Kern

Page 118: Parallelisierung des Growing Cells Meshing Algorithmus

Ergebnis - Parametrisierung

Parameter signifikant

Vermeidung von gesperrten Mutexen nein

Sperrebene beim Octree nein

Bucketgroße der SCMap nein

Max. Anzahl an vorerstellten Jobs nein

Zeitpunkt der Umstellung auf Large-Mesh-Strategy ja

Anteil verworfene Jobs ja

Page 119: Parallelisierung des Growing Cells Meshing Algorithmus

Ergebnis - Parametrisierung

Parameter signifikant

Vermeidung von gesperrten Mutexen

nein

Sperrebene beim Octree nein

Bucketgroße der SCMap nein

Max. Anzahl an vorerstellten Jobs nein

Zeitpunkt der Umstellung auf Large-Mesh-Strategy ja

Anteil verworfene Jobs ja

Page 120: Parallelisierung des Growing Cells Meshing Algorithmus

Ergebnis - Parametrisierung

Parameter signifikant

Vermeidung von gesperrten Mutexen nein

Sperrebene beim Octree nein

Bucketgroße der SCMap nein

Max. Anzahl an vorerstellten Jobs nein

Zeitpunkt der Umstellung auf Large-Mesh-Strategy ja

Anteil verworfene Jobs ja

Page 121: Parallelisierung des Growing Cells Meshing Algorithmus

Ergebnis - Parametrisierung

Parameter signifikant

Vermeidung von gesperrten Mutexen nein

Sperrebene beim Octree

nein

Bucketgroße der SCMap nein

Max. Anzahl an vorerstellten Jobs nein

Zeitpunkt der Umstellung auf Large-Mesh-Strategy ja

Anteil verworfene Jobs ja

Page 122: Parallelisierung des Growing Cells Meshing Algorithmus

Ergebnis - Parametrisierung

Parameter signifikant

Vermeidung von gesperrten Mutexen nein

Sperrebene beim Octree nein

Bucketgroße der SCMap nein

Max. Anzahl an vorerstellten Jobs nein

Zeitpunkt der Umstellung auf Large-Mesh-Strategy ja

Anteil verworfene Jobs ja

Page 123: Parallelisierung des Growing Cells Meshing Algorithmus

Ergebnis - Parametrisierung

Parameter signifikant

Vermeidung von gesperrten Mutexen nein

Sperrebene beim Octree nein

Bucketgroße der SCMap

nein

Max. Anzahl an vorerstellten Jobs nein

Zeitpunkt der Umstellung auf Large-Mesh-Strategy ja

Anteil verworfene Jobs ja

Page 124: Parallelisierung des Growing Cells Meshing Algorithmus

Ergebnis - Parametrisierung

Parameter signifikant

Vermeidung von gesperrten Mutexen nein

Sperrebene beim Octree nein

Bucketgroße der SCMap nein

Max. Anzahl an vorerstellten Jobs nein

Zeitpunkt der Umstellung auf Large-Mesh-Strategy ja

Anteil verworfene Jobs ja

Page 125: Parallelisierung des Growing Cells Meshing Algorithmus

Ergebnis - Parametrisierung

Parameter signifikant

Vermeidung von gesperrten Mutexen nein

Sperrebene beim Octree nein

Bucketgroße der SCMap nein

Max. Anzahl an vorerstellten Jobs

nein

Zeitpunkt der Umstellung auf Large-Mesh-Strategy ja

Anteil verworfene Jobs ja

Page 126: Parallelisierung des Growing Cells Meshing Algorithmus

Ergebnis - Parametrisierung

Parameter signifikant

Vermeidung von gesperrten Mutexen nein

Sperrebene beim Octree nein

Bucketgroße der SCMap nein

Max. Anzahl an vorerstellten Jobs nein

Zeitpunkt der Umstellung auf Large-Mesh-Strategy ja

Anteil verworfene Jobs ja

Page 127: Parallelisierung des Growing Cells Meshing Algorithmus

Ergebnis - Parametrisierung

Parameter signifikant

Vermeidung von gesperrten Mutexen nein

Sperrebene beim Octree nein

Bucketgroße der SCMap nein

Max. Anzahl an vorerstellten Jobs nein

Zeitpunkt der Umstellung auf Large-Mesh-Strategy

ja

Anteil verworfene Jobs ja

Page 128: Parallelisierung des Growing Cells Meshing Algorithmus

Ergebnis - Parametrisierung

Parameter signifikant

Vermeidung von gesperrten Mutexen nein

Sperrebene beim Octree nein

Bucketgroße der SCMap nein

Max. Anzahl an vorerstellten Jobs nein

Zeitpunkt der Umstellung auf Large-Mesh-Strategy ja

Anteil verworfene Jobs ja

Page 129: Parallelisierung des Growing Cells Meshing Algorithmus

Ergebnis - Parametrisierung

Parameter signifikant

Vermeidung von gesperrten Mutexen nein

Sperrebene beim Octree nein

Bucketgroße der SCMap nein

Max. Anzahl an vorerstellten Jobs nein

Zeitpunkt der Umstellung auf Large-Mesh-Strategy ja

Anteil verworfene Jobs

ja

Page 130: Parallelisierung des Growing Cells Meshing Algorithmus

Ergebnis - Parametrisierung

Parameter signifikant

Vermeidung von gesperrten Mutexen nein

Sperrebene beim Octree nein

Bucketgroße der SCMap nein

Max. Anzahl an vorerstellten Jobs nein

Zeitpunkt der Umstellung auf Large-Mesh-Strategy ja

Anteil verworfene Jobs ja

Page 131: Parallelisierung des Growing Cells Meshing Algorithmus

Ergebnis - Fazit

I Implizite Parallelisierung geht mit C++ nicht→ funktionale Programmiersprachen sind hier eindeutigvorteilhaft

I Nebenlaufige Anwendungen benotigen saubere Struktur→ neben Geschwindigkeit auch Strukturierung

I Parallelisierung sollte von Beginn an Teil des Softwaredesignssein

Page 132: Parallelisierung des Growing Cells Meshing Algorithmus

Ergebnis - Fazit

I Implizite Parallelisierung geht mit C++ nicht→ funktionale Programmiersprachen sind hier eindeutigvorteilhaft

I Nebenlaufige Anwendungen benotigen saubere Struktur→ neben Geschwindigkeit auch Strukturierung

I Parallelisierung sollte von Beginn an Teil des Softwaredesignssein

Page 133: Parallelisierung des Growing Cells Meshing Algorithmus

Ergebnis - Fazit

I Implizite Parallelisierung geht mit C++ nicht→ funktionale Programmiersprachen sind hier eindeutigvorteilhaft

I Nebenlaufige Anwendungen benotigen saubere Struktur→ neben Geschwindigkeit auch Strukturierung

I Parallelisierung sollte von Beginn an Teil des Softwaredesignssein

Page 134: Parallelisierung des Growing Cells Meshing Algorithmus

Ergebnis - Fazit

Bei Datenstrukturen gilt:

I Probabilistische Datenstrukturen sind vorteilhaft→ z.B. Hashmaps oder Skiplisten anstelle von balanciertenBaumen

I Modell und Implementierung konnen stark voneinanderabweichen

I Daruberhinaus sollte die Ebene des Locks frei wahlbar sein

Page 135: Parallelisierung des Growing Cells Meshing Algorithmus

Ergebnis - Fazit

Bei Datenstrukturen gilt:

I Probabilistische Datenstrukturen sind vorteilhaft→ z.B. Hashmaps oder Skiplisten anstelle von balanciertenBaumen

I Modell und Implementierung konnen stark voneinanderabweichen

I Daruberhinaus sollte die Ebene des Locks frei wahlbar sein

Page 136: Parallelisierung des Growing Cells Meshing Algorithmus

Ergebnis - Fazit

Bei Datenstrukturen gilt:

I Probabilistische Datenstrukturen sind vorteilhaft→ z.B. Hashmaps oder Skiplisten anstelle von balanciertenBaumen

I Modell und Implementierung konnen stark voneinanderabweichen

I Daruberhinaus sollte die Ebene des Locks frei wahlbar sein

Page 137: Parallelisierung des Growing Cells Meshing Algorithmus

Ergebnis - Fazit

Bei Datenstrukturen gilt:

I Probabilistische Datenstrukturen sind vorteilhaft→ z.B. Hashmaps oder Skiplisten anstelle von balanciertenBaumen

I Modell und Implementierung konnen stark voneinanderabweichen

I Daruberhinaus sollte die Ebene des Locks frei wahlbar sein

Page 138: Parallelisierung des Growing Cells Meshing Algorithmus

Ergebnis - Offene Fragen

I Optimale Parametrisierung noch unbekannt

I Effektive Strategie zur Joberstellung noch nicht gefunden→ Jobs werden erstellt und teilweise direkt wieder verworfen

Page 139: Parallelisierung des Growing Cells Meshing Algorithmus

Ergebnis - Offene Fragen

I Optimale Parametrisierung noch unbekannt

I Effektive Strategie zur Joberstellung noch nicht gefunden→ Jobs werden erstellt und teilweise direkt wieder verworfen