Parallelisierung des Growing Cells Meshing                Algorithmus         Marcus Riemer, Florian Held                F...
Parallelisierung des Smart Growing Cells AlgorithmusNotwendige Kenntnisse   Programmierung & Elementare Datenstrukturen   ...
GliederungEinf¨hrung    uSurface Reconstruction   Allgemein   Smart Growing CellsParallelisierung   Bedingungen   1. Ansat...
Surface Reconstruction             Reales Objekt ⇒ Punktwolke ⇒ Mesh
Surface Reconstruction - Dimensionen
Surface Reconstruction - Dimensionen    Etwa 9.826.000 Punkte als Eingabe
Surface Reconstruction - Dimensionen    Etwa 9.826.000 Punkte als Eingabe    Etwa 4.000.000 Dreiecke im Ergebnismesh
Surface Reconstruction - Dimensionen    Etwa 9.826.000 Punkte als Eingabe    Etwa 4.000.000 Dreiecke im Ergebnismesh    13...
Surface Reconstruction - Dimensionen    Etwa 9.826.000 Punkte als Eingabe    Etwa 4.000.000 Dreiecke im Ergebnismesh    13...
GliederungEinf¨hrung    uSurface Reconstruction   Allgemein   Smart Growing CellsParallelisierung   Bedingungen   1. Ansat...
Surface Reconstruction - Probleme               M¨glichkeiten der Verkn¨pfung                o                     u
Surface Reconstruction - Probleme               M¨glichkeiten der Verkn¨pfung                o                     u
Surface Reconstruction - Probleme               M¨glichkeiten der Verkn¨pfung                o                     u
Surface Reconstruction                Zu analysierende Punktwolke
Smart Growing Cells Algorithmus                   Ausgangssituation
Smart Growing Cells Algorithmus                Gebildetes Neuronales Netz
Smart Growing Cells Algorithmus - Schritte                    (a) Move / Gl¨tten                                 a
Smart Growing Cells Algorithmus - Schritte                    (a) Move / Gl¨tten                                 a        ...
Smart Growing Cells Algorithmus - Schritte                    (a) Move / Gl¨tten                                 a        ...
Smart Growing Cells Algorithmus - Ablauf                Ablauf einer Rekonstruktion
GliederungEinf¨hrung    uSurface Reconstruction   Allgemein   Smart Growing CellsParallelisierung   Bedingungen   1. Ansat...
Parallelisierung Eignung des Verfahrens f¨r die Parallelisierung                         u     Robust gegen¨ber Ver¨nderun...
Parallelisierung Eignung des Verfahrens f¨r die Parallelisierung                         u     Robust gegen¨ber Ver¨nderun...
Parallelisierung Eignung des Verfahrens f¨r die Parallelisierung                         u     Robust gegen¨ber Ver¨nderun...
Parallelisierung Eignung des Verfahrens f¨r die Parallelisierung                         u     Robust gegen¨ber Ver¨nderun...
Parallelisierung Eignung des Verfahrens f¨r die Parallelisierung                         u     Robust gegen¨ber Ver¨nderun...
Parallelisierung Eignung der Implementierung f¨r die Parallelisierung                              u
Parallelisierung Eignung der Implementierung f¨r die Parallelisierung                              u     Hochgradig optimi...
Parallelisierung Eignung der Implementierung f¨r die Parallelisierung                              u     Hochgradig optimi...
Parallelisierung Eignung der Implementierung f¨r die Parallelisierung                              u     Hochgradig optimi...
Parallelisierung Eignung der Implementierung f¨r die Parallelisierung                              u     Hochgradig optimi...
PoolDer Pool       ist ein vorreservierter Speicherbereich in Form eines Arrays
PoolDer Pool       ist ein vorreservierter Speicherbereich in Form eines Arrays       ... dessen Gr¨ße zu Anfang bekannt s...
PoolDer Pool       ist ein vorreservierter Speicherbereich in Form eines Arrays       ... dessen Gr¨ße zu Anfang bekannt s...
PoolDer Pool       ist ein vorreservierter Speicherbereich in Form eines Arrays       ... dessen Gr¨ße zu Anfang bekannt s...
PoolDer Pool       ist ein vorreservierter Speicherbereich in Form eines Arrays       ... dessen Gr¨ße zu Anfang bekannt s...
Pool als SpeicherwaltungStatt: Foo * c r e a t e F o o ( ) {             return new Foo(); } void d e l e t e F o o ( Foo ...
Pool als SpeicherwaltungStatt: Foo * c r e a t e F o o ( ) {             return new Foo(); } void d e l e t e F o o ( Foo ...
PooledListDie PooledList    ist eine Listenimplementierung auf Basis des Pools
PooledListDie PooledList    ist eine Listenimplementierung auf Basis des Pools    ...mit konstanter Zugriffszeit auf die El...
PooledListDie PooledList    ist eine Listenimplementierung auf Basis des Pools    ...mit konstanter Zugriffszeit auf die El...
Octree    Zur Erinnerung: Move-Schritt ben¨tigt Bezugspunkt                                    o
Octree    Zur Erinnerung: Move-Schritt ben¨tigt Bezugspunkt                                    o    Problem: Finde den n¨c...
Octree    Zur Erinnerung: Move-Schritt ben¨tigt Bezugspunkt                                    o    Problem: Finde den n¨c...
Octree    Zur Erinnerung: Move-Schritt ben¨tigt Bezugspunkt                                    o    Problem: Finde den n¨c...
Octree    Zur Erinnerung: Move-Schritt ben¨tigt Bezugspunkt                                    o    Problem: Finde den n¨c...
Octree
Octree    Ergebnis: Effiziente Suche des n¨chsten Nachbarn in einer                                  a    globalen Datenstru...
SignalCounterTree    Zur Erinnerung: Split-Schritt ben¨tigt Gewinner                                     o
SignalCounterTree    Zur Erinnerung: Split-Schritt ben¨tigt Gewinner                                     o    Move-Schritt...
SignalCounterTree    Zur Erinnerung: Split-Schritt ben¨tigt Gewinner                                     o    Move-Schritt...
SignalCounterTree    Zur Erinnerung: Split-Schritt ben¨tigt Gewinner                                     o    Move-Schritt...
Zusammenfassung der vorhandenen Datenstrukturen    Octree ist global
Zusammenfassung der vorhandenen Datenstrukturen    Octree ist global    SCTree (SignalCounterTree) ist global
Zusammenfassung der vorhandenen Datenstrukturen    Octree ist global    SCTree (SignalCounterTree) ist global    Pool und ...
Zusammenfassung der vorhandenen Datenstrukturen    Octree ist global    SCTree (SignalCounterTree) ist global    Pool und ...
Parallelisierung - Bottom UpGrundlegende Idee    Sperren aller grundlegenden Datenstrukturen    Keine Anpassung des Algori...
Parallelisierung - Bottom UpGrundlegender Ansatz:    Lesende Zugriffe parallel zulassen    Schreibende Zugriffe exklusiv aus...
Parallelisierung - Bottom UpGrundlegender Ansatz:    Lesende Zugriffe parallel zulassen    Schreibende Zugriffe exklusiv aus...
Parallelisierung - Bottom UpGrundlegender Ansatz:    Lesende Zugriffe parallel zulassen    Schreibende Zugriffe exklusiv aus...
Parallelisierung - Bottom Up class T h r e a d s a f e { public :          int h a s I n d e x ( int i n d e x ) {        ...
Parallelisierung - Bottom Up - Problemfall Rekursion class T h r e a d s a f e { public :          int h a s I n d e x ( i...
Parallelisierung - Bottom Up - Problemfall Rekursion                                                                   pub...
Parallelisierung - Bottom Up - Problemfall Rekursion                                                                      ...
Parallelisierung - Bottom Up - Problemefall RekursionErster Ansatz:     ¨     Offentliche Methoden setzen eine Sperre und d...
Parallelisierung - Bottom Up - Problemefall RekursionErster Ansatz:     ¨     Offentliche Methoden setzen eine Sperre und d...
Parallelisierung - Bottom Up - Problemefall RekursionErster Ansatz:     ¨     Offentliche Methoden setzen eine Sperre und d...
Parallelisierung - Bottom Up - Problemefall RekursionErster Ansatz:     ¨     Offentliche Methoden setzen eine Sperre und d...
Parallelisierung - Bottom Up - Problemefall RekursionErster Ansatz:     ¨     Offentliche Methoden setzen eine Sperre und d...
Parallelisierung - Bottom Up - Problemefall RekursionErster Ansatz:     ¨     Offentliche Methoden setzen eine Sperre und d...
Parallelisierung - Bottom Up - Probleme allgemein    H¨ufiges Sperren und Entsperren von Mutexen     a    Effektives Sperren...
Parallelisierung - Bottom Up - Probleme allgemein    H¨ufiges Sperren und Entsperren von Mutexen     a    Effektives Sperren...
Parallelisierung - Bottom Up - Probleme allgemein    H¨ufiges Sperren und Entsperren von Mutexen     a    Effektives Sperren...
Parallelisierung - Erzeuger-VerbraucherProblem: Versucht Parallelismus implizit zu nutzen
Parallelisierung - Erzeuger-VerbraucherProblem: Versucht Parallelismus implizit zu nutzenL¨sung: M¨glichkeiten des SGC Alg...
Parallelisierung - Erzeuger-VerbraucherProblem: Versucht Parallelismus implizit zu nutzenL¨sung: M¨glichkeiten des SGC Alg...
Parallelisierung - Erzeuger-VerbraucherProblem: Versucht Parallelismus implizit zu nutzenL¨sung: M¨glichkeiten des SGC Alg...
Parallelisierung - Worker, Jobs und WorkerManager                       WorkerManager                                     ...
Parallelisierung - getNextAvailableJob()    Grundidee: WorkerManager-Thread erzeugt Jobs auf ”Vorrat”    → getNextAvailabl...
Parallelisierung - getNextAvailableJob()    Grundidee: WorkerManager-Thread erzeugt Jobs auf ”Vorrat”    → getNextAvailabl...
Parallelisierung - getNextAvailableJob()    Grundidee: WorkerManager-Thread erzeugt Jobs auf ”Vorrat”    → getNextAvailabl...
Parallelisierung - Auswahl der StrategieUmschaltung auf “große” Strategie erfolgt zu sp¨t                                 ...
Parallelisierung - Auswahl der StrategieUmschaltung auf “große” Strategie erfolgt zu sp¨t                                 ...
Parallele Datenstrukturen    Erkenntnis: Vorhandene globale Datenstrukturen ungeeignet    f¨r Parallelisierung     u
Parallele Datenstrukturen    Erkenntnis: Vorhandene globale Datenstrukturen ungeeignet    f¨r Parallelisierung     u    Au...
Paralleler Octree    Idee: Einf¨hrung einer Ebene, auf der gelockt wird              u
Paralleler Octree    Idee: Einf¨hrung einer Ebene, auf der gelockt wird              u        oberhalb der Ebene sind gene...
Paralleler Octree    Idee: Einf¨hrung einer Ebene, auf der gelockt wird              u        oberhalb der Ebene sind gene...
Paralleler Octree    Idee: Einf¨hrung einer Ebene, auf der gelockt wird              u        oberhalb der Ebene sind gene...
Aus SCTree wird SCMap   Zur Erinnerung: SCTree ist ein RBTree (→ balanciert!)
Aus SCTree wird SCMap   Zur Erinnerung: SCTree ist ein RBTree (→ balanciert!)   Notwendigkeit: komplett neue Datenstruktur
Aus SCTree wird SCMap   Zur Erinnerung: SCTree ist ein RBTree (→ balanciert!)   Notwendigkeit: komplett neue Datenstruktur...
Aus SCTree wird SCMap   Zur Erinnerung: SCTree ist ein RBTree (→ balanciert!)   Notwendigkeit: komplett neue Datenstruktur...
Aus SCTree wird SCMap   Zur Erinnerung: SCTree ist ein RBTree (→ balanciert!)   Notwendigkeit: komplett neue Datenstruktur...
Aus SCTree wird SCMap   Zur Erinnerung: SCTree ist ein RBTree (→ balanciert!)   Notwendigkeit: komplett neue Datenstruktur...
Aus SCTree wird SCMap
Aus SCTree wird SCMapImplementierung als geordnete Hashtabelle:    Hashfunktion ist Normalverteilungsapproximation
Aus SCTree wird SCMapImplementierung als geordnete Hashtabelle:
Aus SCTree wird SCMapImplementierung als geordnete Hashtabelle:    Hashfunktion ist Normalverteilungsapproximation
Aus SCTree wird SCMapImplementierung als geordnete Hashtabelle:    Hashfunktion ist Normalverteilungsapproximation    Lage...
Aus SCTree wird SCMapImplementierung als geordnete Hashtabelle:    Hashfunktion ist Normalverteilungsapproximation    Lage...
Aus SCTree wird SCMapImplementierung als geordnete Hashtabelle:    Hashfunktion ist Normalverteilungsapproximation    Lage...
Parallelisierung - SpatialLocker Veranschaulichung der Sperrbereiche:
Parallelisierung - SpatialLocker    Aufgaben des SpatialLockers:
Parallelisierung - SpatialLocker    Aufgaben des SpatialLockers:        Verwaltung aller gesperrten Bereiche
Parallelisierung - SpatialLocker    Aufgaben des SpatialLockers:        Verwaltung aller gesperrten Bereiche        Pr¨ft,...
Parallelisierung - SpatialLocker    Aufgaben des SpatialLockers:        Verwaltung aller gesperrten Bereiche        Pr¨ft,...
Parallelisierung - SpatialLocker    Aufgaben des SpatialLockers:        Verwaltung aller gesperrten Bereiche        Pr¨ft,...
Parallelisierung - SpatialLocker    Aufgaben des SpatialLockers:        Verwaltung aller gesperrten Bereiche        Pr¨ft,...
Parallelisierung - SpatialLocker     Aufgaben des SpatialLockers:         Verwaltung aller gesperrten Bereiche         Pr¨...
Parallelisierung - Gegen¨berstellung                        u               Parallelisierung im Straßenverkehr
Parallelisierung - Gegen¨berstellung                        u          Parallelisierung im Straßenverkehr - Bottom Up
Parallelisierung - Gegen¨berstellung                        u         Parallelisierung im Straßenverkehr - Sperrbereiche
GliederungEinf¨hrung    uSurface Reconstruction   Allgemein   Smart Growing CellsParallelisierung   Bedingungen   1. Ansat...
Ergebnis - Zeitgewinn
Ergebnis - Zeitgewinn    Ausf¨hrungszeit = 50% SmallMeshStrategy + 50%        u    LargeMeshStrategy
Ergebnis - Zeitgewinn    Ausf¨hrungszeit = 50% SmallMeshStrategy + 50%        u    LargeMeshStrategy     10% Zeitgewinn mi...
Ergebnis - Parametrisierung Parameter                    signifikant
Ergebnis - Parametrisierung Parameter                           signifikant Vermeidung von gesperrten Mutexen
Ergebnis - Parametrisierung Parameter                           signifikant Vermeidung von gesperrten Mutexen      nein
Ergebnis - Parametrisierung Parameter                           signifikant Vermeidung von gesperrten Mutexen      nein Spe...
Ergebnis - Parametrisierung Parameter                           signifikant Vermeidung von gesperrten Mutexen      nein Spe...
Ergebnis - Parametrisierung Parameter                           signifikant Vermeidung von gesperrten Mutexen      nein Spe...
Ergebnis - Parametrisierung Parameter                           signifikant Vermeidung von gesperrten Mutexen      nein Spe...
Ergebnis - Parametrisierung Parameter                           signifikant Vermeidung von gesperrten Mutexen      nein Spe...
Ergebnis - Parametrisierung Parameter                           signifikant Vermeidung von gesperrten Mutexen      nein Spe...
Ergebnis - Parametrisierung Parameter                                          signifikant Vermeidung von gesperrten Mutexe...
Ergebnis - Parametrisierung Parameter                                          signifikant Vermeidung von gesperrten Mutexe...
Ergebnis - Parametrisierung Parameter                                          signifikant Vermeidung von gesperrten Mutexe...
Ergebnis - Parametrisierung Parameter                                          signifikant Vermeidung von gesperrten Mutexe...
Ergebnis - Fazit    Implizite Parallelisierung geht mit C++ nicht    → funktionale Programmiersprachen sind hier eindeutig...
Ergebnis - Fazit    Implizite Parallelisierung geht mit C++ nicht    → funktionale Programmiersprachen sind hier eindeutig...
Ergebnis - Fazit    Implizite Parallelisierung geht mit C++ nicht    → funktionale Programmiersprachen sind hier eindeutig...
Ergebnis - FazitBei Datenstrukturen gilt:
Ergebnis - FazitBei Datenstrukturen gilt:    Probabilistische Datenstrukturen sind vorteilhaft    → z.B. Hashmaps oder Ski...
Ergebnis - FazitBei Datenstrukturen gilt:    Probabilistische Datenstrukturen sind vorteilhaft    → z.B. Hashmaps oder Ski...
Ergebnis - FazitBei Datenstrukturen gilt:    Probabilistische Datenstrukturen sind vorteilhaft    → z.B. Hashmaps oder Ski...
Ergebnis - Offene Fragen    Optimale Parametrisierung noch unbekannt
Ergebnis - Offene Fragen    Optimale Parametrisierung noch unbekannt    Effektive Strategie zur Joberstellung noch nicht gef...
Nächste SlideShare
Wird geladen in …5
×

Parallelisierung des Growing Cells Meshing Algorithmus

567 Aufrufe

Veröffentlicht am

Veröffentlicht in: Technologie
0 Kommentare
0 Gefällt mir
Statistik
Notizen
  • Als Erste(r) kommentieren

  • Gehören Sie zu den Ersten, denen das gefällt!

Keine Downloads
Aufrufe
Aufrufe insgesamt
567
Auf SlideShare
0
Aus Einbettungen
0
Anzahl an Einbettungen
2
Aktionen
Geteilt
0
Downloads
4
Kommentare
0
Gefällt mir
0
Einbettungen 0
Keine Einbettungen

Keine Notizen für die Folie

Parallelisierung des Growing Cells Meshing Algorithmus

  1. 1. Parallelisierung des Growing Cells Meshing Algorithmus Marcus Riemer, Florian Held Fachhochschule Wedel University of Applied Sciences Wedel WS 2011
  2. 2. Parallelisierung des Smart Growing Cells AlgorithmusNotwendige Kenntnisse Programmierung & Elementare Datenstrukturen Vorlesungen Programmstrukturen 2 ausreichend Algorithmen und Datenstrukturen in C optimal Inhaltlich B¨ume, Listen und Dynamische Arrays aHilfreiche Kenntnisse Grundlagen Threadprogrammierung Vorlesung Prozessprogrammierung Inhaltlich Elementare Probleme (Erzeuger-Verbraucher, Leser-Schreiber) Thread, Mutex, Lock
  3. 3. GliederungEinf¨hrung uSurface Reconstruction Allgemein Smart Growing CellsParallelisierung Bedingungen 1. Ansatz: Bottom Up 2. Ansatz: Erzeuger-Verbraucher Parallele Datenstrukturen Gegen¨berstellung uErgebnis
  4. 4. Surface Reconstruction Reales Objekt ⇒ Punktwolke ⇒ Mesh
  5. 5. Surface Reconstruction - Dimensionen
  6. 6. Surface Reconstruction - Dimensionen Etwa 9.826.000 Punkte als Eingabe
  7. 7. Surface Reconstruction - Dimensionen Etwa 9.826.000 Punkte als Eingabe Etwa 4.000.000 Dreiecke im Ergebnismesh
  8. 8. Surface Reconstruction - Dimensionen Etwa 9.826.000 Punkte als Eingabe Etwa 4.000.000 Dreiecke im Ergebnismesh 132 Minuten bei 2,6 Ghz und 8 Gb RAM
  9. 9. Surface Reconstruction - Dimensionen Etwa 9.826.000 Punkte als Eingabe Etwa 4.000.000 Dreiecke im Ergebnismesh 132 Minuten bei 2,6 Ghz und 8 Gb RAMEines der eher kleineren Modelel, die zu verarbeiten sind ...
  10. 10. GliederungEinf¨hrung uSurface Reconstruction Allgemein Smart Growing CellsParallelisierung Bedingungen 1. Ansatz: Bottom Up 2. Ansatz: Erzeuger-Verbraucher Parallele Datenstrukturen Gegen¨berstellung uErgebnis
  11. 11. Surface Reconstruction - Probleme M¨glichkeiten der Verkn¨pfung o u
  12. 12. Surface Reconstruction - Probleme M¨glichkeiten der Verkn¨pfung o u
  13. 13. Surface Reconstruction - Probleme M¨glichkeiten der Verkn¨pfung o u
  14. 14. Surface Reconstruction Zu analysierende Punktwolke
  15. 15. Smart Growing Cells Algorithmus Ausgangssituation
  16. 16. Smart Growing Cells Algorithmus Gebildetes Neuronales Netz
  17. 17. Smart Growing Cells Algorithmus - Schritte (a) Move / Gl¨tten a
  18. 18. Smart Growing Cells Algorithmus - Schritte (a) Move / Gl¨tten a (b) Split
  19. 19. Smart Growing Cells Algorithmus - Schritte (a) Move / Gl¨tten a (b) Split (c) Collapse
  20. 20. Smart Growing Cells Algorithmus - Ablauf Ablauf einer Rekonstruktion
  21. 21. GliederungEinf¨hrung uSurface Reconstruction Allgemein Smart Growing CellsParallelisierung Bedingungen 1. Ansatz: Bottom Up 2. Ansatz: Erzeuger-Verbraucher Parallele Datenstrukturen Gegen¨berstellung uErgebnis
  22. 22. Parallelisierung Eignung des Verfahrens f¨r die Parallelisierung u Robust gegen¨ber Ver¨nderungen der Reihenfolge und u a Verteilung der Operationen
  23. 23. Parallelisierung Eignung des Verfahrens f¨r die Parallelisierung u Robust gegen¨ber Ver¨nderungen der Reihenfolge und u a Verteilung der Operationen Gr¨ße des Meshes ∼ Anzahl m¨glicher Threads o o
  24. 24. Parallelisierung Eignung des Verfahrens f¨r die Parallelisierung u Robust gegen¨ber Ver¨nderungen der Reihenfolge und u a Verteilung der Operationen Gr¨ße des Meshes ∼ Anzahl m¨glicher Threads o o
  25. 25. Parallelisierung Eignung des Verfahrens f¨r die Parallelisierung u Robust gegen¨ber Ver¨nderungen der Reihenfolge und u a Verteilung der Operationen Gr¨ße des Meshes ∼ Anzahl m¨glicher Threads o o
  26. 26. Parallelisierung Eignung des Verfahrens f¨r die Parallelisierung u Robust gegen¨ber Ver¨nderungen der Reihenfolge und u a Verteilung der Operationen Gr¨ße des Meshes ∼ Anzahl m¨glicher Threads o o Theorie: Standardprozess einfach mehrfach ausf¨hren u
  27. 27. Parallelisierung Eignung der Implementierung f¨r die Parallelisierung u
  28. 28. Parallelisierung Eignung der Implementierung f¨r die Parallelisierung u Hochgradig optimiert
  29. 29. Parallelisierung Eignung der Implementierung f¨r die Parallelisierung u Hochgradig optimiert Nutzung von vorreserviertem Speicher
  30. 30. Parallelisierung Eignung der Implementierung f¨r die Parallelisierung u Hochgradig optimiert Nutzung von vorreserviertem Speicher Eigene grundlegende Datenstrukturen
  31. 31. Parallelisierung Eignung der Implementierung f¨r die Parallelisierung u Hochgradig optimiert Nutzung von vorreserviertem Speicher Eigene grundlegende Datenstrukturen Mes h Pool Octree S ignalCounterTree Faces Vertices Edges PooledLis t Pool
  32. 32. PoolDer Pool ist ein vorreservierter Speicherbereich in Form eines Arrays
  33. 33. PoolDer Pool ist ein vorreservierter Speicherbereich in Form eines Arrays ... dessen Gr¨ße zu Anfang bekannt sein muss o
  34. 34. PoolDer Pool ist ein vorreservierter Speicherbereich in Form eines Arrays ... dessen Gr¨ße zu Anfang bekannt sein muss o ... sich jedoch ggf. noch vergr¨ßern l¨sst. o a
  35. 35. PoolDer Pool ist ein vorreservierter Speicherbereich in Form eines Arrays ... dessen Gr¨ße zu Anfang bekannt sein muss o ... sich jedoch ggf. noch vergr¨ßern l¨sst. o a stellt einen einfache aber schnelle Speicherverwaltung dar
  36. 36. PoolDer Pool ist ein vorreservierter Speicherbereich in Form eines Arrays ... dessen Gr¨ße zu Anfang bekannt sein muss o ... sich jedoch ggf. noch vergr¨ßern l¨sst. o a stellt einen einfache aber schnelle Speicherverwaltung dar ersetzt Aufrufe von new und delete
  37. 37. Pool als SpeicherwaltungStatt: Foo * c r e a t e F o o ( ) { return new Foo(); } void d e l e t e F o o ( Foo * f o o ) { delete foo; }
  38. 38. Pool als SpeicherwaltungStatt: Foo * c r e a t e F o o ( ) { return new Foo(); } void d e l e t e F o o ( Foo * f o o ) { delete foo; }... haben wir: Foo * c r e a t e F o o ( Pool< Foo > * p o o l ) { return pool-¿newValue(); } void d e l e t e F o o ( Pool< Foo > * p o o l , Foo * f o o ) { pool-¿deleteValue( foo ); }
  39. 39. PooledListDie PooledList ist eine Listenimplementierung auf Basis des Pools
  40. 40. PooledListDie PooledList ist eine Listenimplementierung auf Basis des Pools ...mit konstanter Zugriffszeit auf die Elemente.
  41. 41. PooledListDie PooledList ist eine Listenimplementierung auf Basis des Pools ...mit konstanter Zugriffszeit auf die Elemente.Implementierungsdetail: Pool und PooledList werden sowohl f¨rudie Speicherverwaltung als auch als Datenstruktur verwendet.
  42. 42. Octree Zur Erinnerung: Move-Schritt ben¨tigt Bezugspunkt o
  43. 43. Octree Zur Erinnerung: Move-Schritt ben¨tigt Bezugspunkt o Problem: Finde den n¨chstgelegenen Nachbarn zu einem a gegebenen Punkt p
  44. 44. Octree Zur Erinnerung: Move-Schritt ben¨tigt Bezugspunkt o Problem: Finde den n¨chstgelegenen Nachbarn zu einem a gegebenen Punkt p L¨sung mit r¨umlicher Datenstruktur: o a 1. Unterteile den Raum an den x-, y - und z-Achsen in 8 Unterr¨ume a
  45. 45. Octree Zur Erinnerung: Move-Schritt ben¨tigt Bezugspunkt o Problem: Finde den n¨chstgelegenen Nachbarn zu einem a gegebenen Punkt p L¨sung mit r¨umlicher Datenstruktur: o a 1. Unterteile den Raum an den x-, y - und z-Achsen in 8 Unterr¨ume a 2. Befinden sich in einem Unterraum u mehr als k Punkte, so wiederhole 1. f¨r u u
  46. 46. Octree Zur Erinnerung: Move-Schritt ben¨tigt Bezugspunkt o Problem: Finde den n¨chstgelegenen Nachbarn zu einem a gegebenen Punkt p L¨sung mit r¨umlicher Datenstruktur: o a 1. Unterteile den Raum an den x-, y - und z-Achsen in 8 Unterr¨ume a 2. Befinden sich in einem Unterraum u mehr als k Punkte, so wiederhole 1. f¨r u u
  47. 47. Octree
  48. 48. Octree Ergebnis: Effiziente Suche des n¨chsten Nachbarn in einer a globalen Datenstruktur
  49. 49. SignalCounterTree Zur Erinnerung: Split-Schritt ben¨tigt Gewinner o
  50. 50. SignalCounterTree Zur Erinnerung: Split-Schritt ben¨tigt Gewinner o Move-Schritt erh¨ht “Signalz¨hler” des Vertex’ o a
  51. 51. SignalCounterTree Zur Erinnerung: Split-Schritt ben¨tigt Gewinner o Move-Schritt erh¨ht “Signalz¨hler” des Vertex’ o a Vertex mit h¨chstem Signalz¨hler ist Gewinner o a
  52. 52. SignalCounterTree Zur Erinnerung: Split-Schritt ben¨tigt Gewinner o Move-Schritt erh¨ht “Signalz¨hler” des Vertex’ o a Vertex mit h¨chstem Signalz¨hler ist Gewinner o a Verwaltung der Signalz¨hler in Form des SignalCounterTrees a implementiert: Rot-Schwarz-Baum globale Datenstruktur
  53. 53. Zusammenfassung der vorhandenen Datenstrukturen Octree ist global
  54. 54. Zusammenfassung der vorhandenen Datenstrukturen Octree ist global SCTree (SignalCounterTree) ist global
  55. 55. Zusammenfassung der vorhandenen Datenstrukturen Octree ist global SCTree (SignalCounterTree) ist global Pool und PooledList werden als Datenstruktur verwendet → potentiell global
  56. 56. Zusammenfassung der vorhandenen Datenstrukturen Octree ist global SCTree (SignalCounterTree) ist global Pool und PooledList werden als Datenstruktur verwendet → potentiell globalParallelisierung des Verfahrens = Parallelisierung derImplementierung
  57. 57. Parallelisierung - Bottom UpGrundlegende Idee Sperren aller grundlegenden Datenstrukturen Keine Anpassung des Algorithmus → Parallelisierung ”abschaltbar” Mes h Pool Octree S ignalCounterTree Faces Vertices Edges PooledLis t Pool
  58. 58. Parallelisierung - Bottom UpGrundlegender Ansatz: Lesende Zugriffe parallel zulassen Schreibende Zugriffe exklusiv ausf¨hren u
  59. 59. Parallelisierung - Bottom UpGrundlegender Ansatz: Lesende Zugriffe parallel zulassen Schreibende Zugriffe exklusiv ausf¨hren u→ Typisches Leser-Schreiber Problem
  60. 60. Parallelisierung - Bottom UpGrundlegender Ansatz: Lesende Zugriffe parallel zulassen Schreibende Zugriffe exklusiv ausf¨hren u→ Typisches Leser-Schreiber ProblemL¨sung mit Boost.Thread o SharedLockable modelliert geteilten und exklusiven Zugriff Sicherer: Sperrobjekte benutzen
  61. 61. Parallelisierung - Bottom Up class T h r e a d s a f e { public : int h a s I n d e x ( int i n d e x ) { SharedLock lock( mMutex ); return ( mValueCount <= i n d e x ) ; } int s e t V a l u e S a f e ( int i n d e x , int v a l u e ) { ExclusiveLock lock( mMutex ); if ( h a s I n d e x ( i n d e x ) ) { mValues [ i n d e x ] = v a l u e ; return ( true ) } return ( false ) ; } };
  62. 62. Parallelisierung - Bottom Up - Problemfall Rekursion class T h r e a d s a f e { public : int h a s I n d e x ( int i n d e x ) { SharedLock lock( mMutex ); return ( h a s I n d e x I m p l ( i n d e x ) ) ; } int s e t V a l u e S a f e ( int i n d e x , int v a l u e ) { ExclusiveLock lock( mMutex ); return ( s e t V a l u e S a f e I m p l ( i n d e x , v a l u e ) ) ; } private : int h a s I n d e x I m p l ( int i n d e x ) { return ( mValueCount <= i n d e x ) ; } int s e t V a l u e S a f e I m p l ( int i n d e x , int v a l u e ) { /* U s e s h a s I n d e x I m p l ( ) i n i m p l e m e n t a t i o n */ } };
  63. 63. Parallelisierung - Bottom Up - Problemfall Rekursion public uint indexOf(Val*) private uint indexOfImpl(Val*) public void resizeFastArray(uint) private uint deletionsToAddress(uint) private uint biggerDeletionIndex(uint, uint, uint) private void resizeFastArrayImpl(uint) public void increaseFastArray(float) private void increaseFastArrayImpl(float) private Val* getValImpl(const uint) private uint deletionsToIndex(uint) private void sortDeleted() public Val* getVal(const uint) private Val* getNewValImpl() public Val* getNewVal() Usercode public void delVal(Val*) private void delValImpl(Val*) private void increaseDeletedStack() private void resizeDeletedStack(uint) public void freeArray() private void freeArrayImpl() public void initFastArray(uint) private void initFastArrayImpl(uint, uint, bool) public void initFastArray(uint, uint) public bool isDeleted(Val*) isDeletedImpl public bool isValid(Val*) private bool isValidImpl(Val*)
  64. 64. Parallelisierung - Bottom Up - Problemfall Rekursion public uint indexOf(Val*) private uint indexOfImpl(Val*) public void resizeFastArray(uint) private uint deletionsToAddress(uint) private uint biggerDeletionIndex(uint, uint, uint) private void resizeFastArrayImpl(uint) public void increaseFastArray(float) private void increaseFastArrayImpl(float) private Val* getValImpl(const uint) private uint deletionsToIndex(uint) private void sortDeleted() public Val* getVal(const uint) private Val* getNewValImpl() public Val* getNewVal() Usercode public void delVal(Val*) private void delValImpl(Val*) private void increaseDeletedStack() private void resizeDeletedStack(uint) public void freeArray() private void freeArrayImpl() public void initFastArray(uint) private void initFastArrayImpl(uint, uint, bool) public void initFastArray(uint, uint) public bool isDeleted(Val*) isDeletedImpl public bool isValid(Val*) private bool isValidImpl(Val*) getNearestPoint addPt reinsert getNearestXPoints initialAddPt addPtCore getNearestXPointsCore initialAddPtCore minimisationCascadeAlternativ getAverageDepth constructor getPointsInQRadius removeVec checkNode addPtToNode correctBox createNode notMoreThenXChildren removeVecCore getPointsInQRadiusCore getAverageListLength getCenter getEdgeBoxSize deletePotentialEmptyNodes getNumOfNodes ptInBox getNumOfPts freePointsInRadiusList freeXPointsList getListForNearestPointsSearch resizeInRadiusSList addToList NodeWriter NodeReader Reader Writer ListReader ListWriter
  65. 65. Parallelisierung - Bottom Up - Problemefall RekursionErster Ansatz: ¨ Offentliche Methoden setzen eine Sperre und delegieren die eigentliche Arbeit an eine private Methode Private Methoden rufen niemals ¨ffentliche Methoden auf o
  66. 66. Parallelisierung - Bottom Up - Problemefall RekursionErster Ansatz: ¨ Offentliche Methoden setzen eine Sperre und delegieren die eigentliche Arbeit an eine private Methode Private Methoden rufen niemals ¨ffentliche Methoden auf o ¨→ Umfangreiche Anderungen am Code
  67. 67. Parallelisierung - Bottom Up - Problemefall RekursionErster Ansatz: ¨ Offentliche Methoden setzen eine Sperre und delegieren die eigentliche Arbeit an eine private Methode Private Methoden rufen niemals ¨ffentliche Methoden auf o ¨→ Umfangreiche Anderungen am Code→ Inkonsistente Zust¨nde durch zu kurze Sperren a
  68. 68. Parallelisierung - Bottom Up - Problemefall RekursionErster Ansatz: ¨ Offentliche Methoden setzen eine Sperre und delegieren die eigentliche Arbeit an eine private Methode Private Methoden rufen niemals ¨ffentliche Methoden auf o ¨→ Umfangreiche Anderungen am Code→ Inkonsistente Zust¨nde durch zu kurze Sperren aZweiter Ansatz: Rekursive Mutexe verwenden
  69. 69. Parallelisierung - Bottom Up - Problemefall RekursionErster Ansatz: ¨ Offentliche Methoden setzen eine Sperre und delegieren die eigentliche Arbeit an eine private Methode Private Methoden rufen niemals ¨ffentliche Methoden auf o ¨→ Umfangreiche Anderungen am Code→ Inkonsistente Zust¨nde durch zu kurze Sperren aZweiter Ansatz: Rekursive Mutexe verwenden→ Noch langsamer
  70. 70. Parallelisierung - Bottom Up - Problemefall RekursionErster Ansatz: ¨ Offentliche Methoden setzen eine Sperre und delegieren die eigentliche Arbeit an eine private Methode Private Methoden rufen niemals ¨ffentliche Methoden auf o ¨→ Umfangreiche Anderungen am Code→ Inkonsistente Zust¨nde durch zu kurze Sperren aZweiter Ansatz: Rekursive Mutexe verwenden→ Noch langsamer→ Inkonsistente Zust¨nde durch zu kurze Sperren a
  71. 71. Parallelisierung - Bottom Up - Probleme allgemein H¨ufiges Sperren und Entsperren von Mutexen a Effektives Sperren balancierter B¨ume ein offenes Problem a
  72. 72. Parallelisierung - Bottom Up - Probleme allgemein H¨ufiges Sperren und Entsperren von Mutexen a Effektives Sperren balancierter B¨ume ein offenes Problem a→ Lock auch langsam wenn keine Kollisionen auftreten
  73. 73. Parallelisierung - Bottom Up - Probleme allgemein H¨ufiges Sperren und Entsperren von Mutexen a Effektives Sperren balancierter B¨ume ein offenes Problem a→ Lock auch langsam wenn keine Kollisionen auftreten→ Kein Verhindern unerwarteter destruktiver Operationen
  74. 74. Parallelisierung - Erzeuger-VerbraucherProblem: Versucht Parallelismus implizit zu nutzen
  75. 75. Parallelisierung - Erzeuger-VerbraucherProblem: Versucht Parallelismus implizit zu nutzenL¨sung: M¨glichkeiten des SGC Algorithmus ausnutzen o o ”Sperrbereiche” in denen ein Thread exklusiv arbeitet → Potenziell sehr viel weniger Sperrvorg¨nge n¨tig a o
  76. 76. Parallelisierung - Erzeuger-VerbraucherProblem: Versucht Parallelismus implizit zu nutzenL¨sung: M¨glichkeiten des SGC Algorithmus ausnutzen o o ”Sperrbereiche” in denen ein Thread exklusiv arbeitet → Potenziell sehr viel weniger Sperrvorg¨nge n¨tig a oGrundlegende Idee Einen Thread f¨r Verwaltungsaufgaben u n weitere Threads f¨r die ”eigentliche Arbeit” u
  77. 77. Parallelisierung - Erzeuger-VerbraucherProblem: Versucht Parallelismus implizit zu nutzenL¨sung: M¨glichkeiten des SGC Algorithmus ausnutzen o o ”Sperrbereiche” in denen ein Thread exklusiv arbeitet → Potenziell sehr viel weniger Sperrvorg¨nge n¨tig a oGrundlegende Idee Einen Thread f¨r Verwaltungsaufgaben u n weitere Threads f¨r die ”eigentliche Arbeit” u→ Klassisches Erzeuger-Verbraucher Problem
  78. 78. Parallelisierung - Worker, Jobs und WorkerManager WorkerManager Boos t::Thread + getNextAvailableJob() : Job S patialLocker Worker + lock( vec3d pos , float radius ) : bool + unlock( vec3d pos ) : bool + execute() : void Job WorkingS et + is S tatic() : bool
  79. 79. Parallelisierung - getNextAvailableJob() Grundidee: WorkerManager-Thread erzeugt Jobs auf ”Vorrat” → getNextAvailableJob() nur noch eine pop Operation Pop Move Move Split Move Move Move Split Collapse ... Push
  80. 80. Parallelisierung - getNextAvailableJob() Grundidee: WorkerManager-Thread erzeugt Jobs auf ”Vorrat” → getNextAvailableJob() nur noch eine pop Operation Pop Move Move Split Move Move Move Split Collapse ... Push Erzeugte Jobs sperren Bereich bis zu ihrer Finalisierung → Wahrscheinlichkeit der erfolgreichen Joberstellung sinkt
  81. 81. Parallelisierung - getNextAvailableJob() Grundidee: WorkerManager-Thread erzeugt Jobs auf ”Vorrat” → getNextAvailableJob() nur noch eine pop Operation Pop Move Move Split Move Move Move Split Collapse ... Push Erzeugte Jobs sperren Bereich bis zu ihrer Finalisierung → Wahrscheinlichkeit der erfolgreichen Joberstellung sinkt Optimierung f¨r kleine Meshes notwendig u → Nur ein Thread → Erstellt Jobs ”On Demand”
  82. 82. Parallelisierung - Auswahl der StrategieUmschaltung auf “große” Strategie erfolgt zu sp¨t a M¨glichkeit der Parallelit¨t wird nicht ausgenutzt o a
  83. 83. Parallelisierung - Auswahl der StrategieUmschaltung auf “große” Strategie erfolgt zu sp¨t a M¨glichkeit der Parallelit¨t wird nicht ausgenutzt o aUmschaltung auf “große” Strategie erfolgt zu fr¨h u Es ist gar kein Platz f¨r mehrere Threads u → Overhead durch r¨umliche Sperrungen a
  84. 84. Parallele Datenstrukturen Erkenntnis: Vorhandene globale Datenstrukturen ungeeignet f¨r Parallelisierung u
  85. 85. Parallele Datenstrukturen Erkenntnis: Vorhandene globale Datenstrukturen ungeeignet f¨r Parallelisierung u Aufgabe: Implementierung neuer Datenstrukturen f¨r u Pool und PooledList Octree SCTree
  86. 86. Paralleler Octree Idee: Einf¨hrung einer Ebene, auf der gelockt wird u
  87. 87. Paralleler Octree Idee: Einf¨hrung einer Ebene, auf der gelockt wird u oberhalb der Ebene sind generell nur lesende Zugriffe erlaubt
  88. 88. Paralleler Octree Idee: Einf¨hrung einer Ebene, auf der gelockt wird u oberhalb der Ebene sind generell nur lesende Zugriffe erlaubt unterhalb der Ebene darf sich in jedem Unterbaum nur ein Thread befinden
  89. 89. Paralleler Octree Idee: Einf¨hrung einer Ebene, auf der gelockt wird u oberhalb der Ebene sind generell nur lesende Zugriffe erlaubt unterhalb der Ebene darf sich in jedem Unterbaum nur ein Thread befinden
  90. 90. Aus SCTree wird SCMap Zur Erinnerung: SCTree ist ein RBTree (→ balanciert!)
  91. 91. Aus SCTree wird SCMap Zur Erinnerung: SCTree ist ein RBTree (→ balanciert!) Notwendigkeit: komplett neue Datenstruktur
  92. 92. Aus SCTree wird SCMap Zur Erinnerung: SCTree ist ein RBTree (→ balanciert!) Notwendigkeit: komplett neue Datenstruktur Wir wissen: Gr¨ßtes Element wird am h¨ufigsten gesucht o a
  93. 93. Aus SCTree wird SCMap Zur Erinnerung: SCTree ist ein RBTree (→ balanciert!) Notwendigkeit: komplett neue Datenstruktur Wir wissen: Gr¨ßtes Element wird am h¨ufigsten gesucht o a Außerdem haben Beobachtungen ergeben:
  94. 94. Aus SCTree wird SCMap Zur Erinnerung: SCTree ist ein RBTree (→ balanciert!) Notwendigkeit: komplett neue Datenstruktur Wir wissen: Gr¨ßtes Element wird am h¨ufigsten gesucht o a Außerdem haben Beobachtungen ergeben: Es gibt obere und untere Schranken f¨r Signale u
  95. 95. Aus SCTree wird SCMap Zur Erinnerung: SCTree ist ein RBTree (→ balanciert!) Notwendigkeit: komplett neue Datenstruktur Wir wissen: Gr¨ßtes Element wird am h¨ufigsten gesucht o a Außerdem haben Beobachtungen ergeben: Es gibt obere und untere Schranken f¨r Signale u Signale sind ann¨hernd normalverteilt a
  96. 96. Aus SCTree wird SCMap
  97. 97. Aus SCTree wird SCMapImplementierung als geordnete Hashtabelle: Hashfunktion ist Normalverteilungsapproximation
  98. 98. Aus SCTree wird SCMapImplementierung als geordnete Hashtabelle:
  99. 99. Aus SCTree wird SCMapImplementierung als geordnete Hashtabelle: Hashfunktion ist Normalverteilungsapproximation
  100. 100. Aus SCTree wird SCMapImplementierung als geordnete Hashtabelle: Hashfunktion ist Normalverteilungsapproximation Lage des gr¨ßten Elements kann g¨nstig mitgespeichert o u werden (→ echte konstante Zugriffszeit)
  101. 101. Aus SCTree wird SCMapImplementierung als geordnete Hashtabelle: Hashfunktion ist Normalverteilungsapproximation Lage des gr¨ßten Elements kann g¨nstig mitgespeichert o u werden (→ echte konstante Zugriffszeit) Anzahl der Buckets frei w¨hlbar a
  102. 102. Aus SCTree wird SCMapImplementierung als geordnete Hashtabelle: Hashfunktion ist Normalverteilungsapproximation Lage des gr¨ßten Elements kann g¨nstig mitgespeichert o u werden (→ echte konstante Zugriffszeit) Anzahl der Buckets frei w¨hlbar a Durchschnittliche Gr¨ße der Buckets frei w¨hlbar o a→ sehr flexibel
  103. 103. Parallelisierung - SpatialLocker Veranschaulichung der Sperrbereiche:
  104. 104. Parallelisierung - SpatialLocker Aufgaben des SpatialLockers:
  105. 105. Parallelisierung - SpatialLocker Aufgaben des SpatialLockers: Verwaltung aller gesperrten Bereiche
  106. 106. Parallelisierung - SpatialLocker Aufgaben des SpatialLockers: Verwaltung aller gesperrten Bereiche Pr¨ft, ob in einem Bereich gearbeitet werden darf u
  107. 107. Parallelisierung - SpatialLocker Aufgaben des SpatialLockers: Verwaltung aller gesperrten Bereiche Pr¨ft, ob in einem Bereich gearbeitet werden darf u Allgemeine Problematik ist die Gr¨ße des Sperrbereichs: o
  108. 108. Parallelisierung - SpatialLocker Aufgaben des SpatialLockers: Verwaltung aller gesperrten Bereiche Pr¨ft, ob in einem Bereich gearbeitet werden darf u Allgemeine Problematik ist die Gr¨ße des Sperrbereichs: o Bei zu großen Sperrbereichen: Ablehnung neuer Jobs (→ Programmstillstand)
  109. 109. Parallelisierung - SpatialLocker Aufgaben des SpatialLockers: Verwaltung aller gesperrten Bereiche Pr¨ft, ob in einem Bereich gearbeitet werden darf u Allgemeine Problematik ist die Gr¨ße des Sperrbereichs: o Bei zu großen Sperrbereichen: Ablehnung neuer Jobs (→ Programmstillstand) ¨ Bei zu kleinen Sperrbereichen: Unerwartete Uberschneidungen (→ Programmabsturz)
  110. 110. Parallelisierung - SpatialLocker Aufgaben des SpatialLockers: Verwaltung aller gesperrten Bereiche Pr¨ft, ob in einem Bereich gearbeitet werden darf u Allgemeine Problematik ist die Gr¨ße des Sperrbereichs: o Bei zu großen Sperrbereichen: Ablehnung neuer Jobs (→ Programmstillstand) ¨ Bei zu kleinen Sperrbereichen: Unerwartete Uberschneidungen (→ Programmabsturz) Ist der Sperrbereich gut gew¨hlt, so treten keine unerwarteten a ¨ Uberschneidungen auf → parallelen Zugriffe auf das selbe Pool-/PooledList-Objekt sind ausgeschlossen
  111. 111. Parallelisierung - Gegen¨berstellung u Parallelisierung im Straßenverkehr
  112. 112. Parallelisierung - Gegen¨berstellung u Parallelisierung im Straßenverkehr - Bottom Up
  113. 113. Parallelisierung - Gegen¨berstellung u Parallelisierung im Straßenverkehr - Sperrbereiche
  114. 114. GliederungEinf¨hrung uSurface Reconstruction Allgemein Smart Growing CellsParallelisierung Bedingungen 1. Ansatz: Bottom Up 2. Ansatz: Erzeuger-Verbraucher Parallele Datenstrukturen Gegen¨berstellung uErgebnis
  115. 115. Ergebnis - Zeitgewinn
  116. 116. Ergebnis - Zeitgewinn Ausf¨hrungszeit = 50% SmallMeshStrategy + 50% u LargeMeshStrategy
  117. 117. Ergebnis - Zeitgewinn Ausf¨hrungszeit = 50% SmallMeshStrategy + 50% u LargeMeshStrategy 10% Zeitgewinn mit jedem zus¨tzlichen Kern a
  118. 118. Ergebnis - Parametrisierung Parameter signifikant
  119. 119. Ergebnis - Parametrisierung Parameter signifikant Vermeidung von gesperrten Mutexen
  120. 120. Ergebnis - Parametrisierung Parameter signifikant Vermeidung von gesperrten Mutexen nein
  121. 121. Ergebnis - Parametrisierung Parameter signifikant Vermeidung von gesperrten Mutexen nein Sperrebene beim Octree
  122. 122. Ergebnis - Parametrisierung Parameter signifikant Vermeidung von gesperrten Mutexen nein Sperrebene beim Octree nein
  123. 123. Ergebnis - Parametrisierung Parameter signifikant Vermeidung von gesperrten Mutexen nein Sperrebene beim Octree nein Bucketgr¨ße der SCMap o
  124. 124. Ergebnis - Parametrisierung Parameter signifikant Vermeidung von gesperrten Mutexen nein Sperrebene beim Octree nein Bucketgr¨ße der SCMap o nein
  125. 125. Ergebnis - Parametrisierung Parameter signifikant Vermeidung von gesperrten Mutexen nein Sperrebene beim Octree nein Bucketgr¨ße der SCMap o nein Max. Anzahl an vorerstellten Jobs
  126. 126. Ergebnis - Parametrisierung Parameter signifikant Vermeidung von gesperrten Mutexen nein Sperrebene beim Octree nein Bucketgr¨ße der SCMap o nein Max. Anzahl an vorerstellten Jobs nein
  127. 127. Ergebnis - Parametrisierung Parameter signifikant Vermeidung von gesperrten Mutexen nein Sperrebene beim Octree nein Bucketgr¨ße der SCMap o nein Max. Anzahl an vorerstellten Jobs nein Zeitpunkt der Umstellung auf Large-Mesh-Strategy
  128. 128. Ergebnis - Parametrisierung Parameter signifikant Vermeidung von gesperrten Mutexen nein Sperrebene beim Octree nein Bucketgr¨ße der SCMap o nein Max. Anzahl an vorerstellten Jobs nein Zeitpunkt der Umstellung auf Large-Mesh-Strategy ja
  129. 129. Ergebnis - Parametrisierung Parameter signifikant Vermeidung von gesperrten Mutexen nein Sperrebene beim Octree nein Bucketgr¨ße der SCMap o nein Max. Anzahl an vorerstellten Jobs nein Zeitpunkt der Umstellung auf Large-Mesh-Strategy ja Anteil verworfene Jobs
  130. 130. Ergebnis - Parametrisierung Parameter signifikant Vermeidung von gesperrten Mutexen nein Sperrebene beim Octree nein Bucketgr¨ße der SCMap o nein Max. Anzahl an vorerstellten Jobs nein Zeitpunkt der Umstellung auf Large-Mesh-Strategy ja Anteil verworfene Jobs ja
  131. 131. Ergebnis - Fazit Implizite Parallelisierung geht mit C++ nicht → funktionale Programmiersprachen sind hier eindeutig vorteilhaft
  132. 132. Ergebnis - Fazit Implizite Parallelisierung geht mit C++ nicht → funktionale Programmiersprachen sind hier eindeutig vorteilhaft Nebenl¨ufige Anwendungen ben¨tigen saubere Struktur a o → neben Geschwindigkeit auch Strukturierung
  133. 133. Ergebnis - Fazit Implizite Parallelisierung geht mit C++ nicht → funktionale Programmiersprachen sind hier eindeutig vorteilhaft Nebenl¨ufige Anwendungen ben¨tigen saubere Struktur a o → neben Geschwindigkeit auch Strukturierung Parallelisierung sollte von Beginn an Teil des Softwaredesigns sein
  134. 134. Ergebnis - FazitBei Datenstrukturen gilt:
  135. 135. Ergebnis - FazitBei Datenstrukturen gilt: Probabilistische Datenstrukturen sind vorteilhaft → z.B. Hashmaps oder Skiplisten anstelle von balancierten B¨umen a
  136. 136. Ergebnis - FazitBei Datenstrukturen gilt: Probabilistische Datenstrukturen sind vorteilhaft → z.B. Hashmaps oder Skiplisten anstelle von balancierten B¨umen a Modell und Implementierung k¨nnen stark voneinander o abweichen
  137. 137. Ergebnis - FazitBei Datenstrukturen gilt: Probabilistische Datenstrukturen sind vorteilhaft → z.B. Hashmaps oder Skiplisten anstelle von balancierten B¨umen a Modell und Implementierung k¨nnen stark voneinander o abweichen Dar¨berhinaus sollte die Ebene des Locks frei w¨hlbar sein u a
  138. 138. Ergebnis - Offene Fragen Optimale Parametrisierung noch unbekannt
  139. 139. Ergebnis - Offene Fragen Optimale Parametrisierung noch unbekannt Effektive Strategie zur Joberstellung noch nicht gefunden → Jobs werden erstellt und teilweise direkt wieder verworfen

×