Aufgaben zu Parallele Algorithmen WS2018/2019

Inhaltsverzeichnis

1 Wikipedia Artikel

Wir wollen den Themenbereich verteilte Algorithmen in Wikipedia deutlich verbessern. Als Zusatzaufgabe zur Vorlesung Parallele Algorithmen soll daher ein oder mehrere Wikipedia-Artikel neu geschrieben oder verbessert werden.

Es folgt unten eine Liste mit Themen aus der Vorlesung, zu denen jeweils die Wikipedia-Artikel zu wünschen übrig lassen. Diese sollen mit neuem Text, hinreichend vielen Referenzen, schönen (animierten) Illustrationen, Pseudocode, Analysen, und vielem mehr angereichert oder neu erstellt werden. Eine Aufgabe kann auch durch mehrere Personen bearbeitet werden, wovon eine/r den englischen Wikipedia-Artikel schreibt und die/der andere die deutsche Version. Die Liste der Aufgaben ist nicht vollständig und kann um sinnvolle Vorschläge ergänzt werden.

Teil der Aufgabe besteht auch darin den bearbeiteten Text zu "verteidigen", falls Wikipedia-Editoren den Inhalt anfechten. Sollte es zu unbegründeten Konflikten kommen, fließt dies jedoch natürlich nicht in die Bewertung ein.

Ein Beispiel für den vorgesehen Umfang eines guten Artikels ist https://de.wikipedia.org/w/index.php?title=Präfixsumme&oldid=165432173, mindestens jedoch 1000 Wörter. Zur Aufgabe gehört auch die Recherche von Quellen und weiteren Zitaten, da diese für einen enzyklopädischen Artikel unerlässlich sind.

Die Wikipedia-Richtlinen (https://de.wikipedia.org/wiki/Wikipedia:Richtlinien) fordern explizit die Verwendung von Sekundärquellen, Primärquellen allein reichen nicht.

Wir haben ein privates Sandbox Wiki (https://panthema.net/sandbox/) eingerichtet in dem Drafts der Artikel geschrieben und dem Betreuer zur Korrektur vorgelegt werden müssen.

Die Artikel müssen bis 1.4.2019 fertig in der Wikipedia stehen und einen Monat (danach) "verteidigt" werden, also auf die Hinweise und Vorschläge der Editoren reagiert werden.

Zur Anmeldung schreibt mir bitte eine kurze E-Mail: bingmann AT kit.edu.

1.1 Übersichtsartikel zu Parallel Sorting und String Sorting [2 Teilnehmer: BH + DK]

Aufgabe 1: Ein Übersichtsartikel mit einer ein-paragraphen Kurzbeschreibung von allen anderen Artikeln zu parallelem Sortieren erstellen. Eventuell eine Laufzeitübersicht, falls möglich (siehe sequentiellen Artikel).

Insbesondere: Einteilung der Algorithmenübersicht in Modelle auf denen parallele Sortierer arbeiten: PRAM, shared-memory Rechner, distributed Rechner, oder Concurrent Hardware (Sorting) Netzwerke.

Ziel des Artikels: zwei Teile

a) Maschinen Modelle für Sorting. "Wo kann man parallel Sortieren? -> welche Modelle?"

b) Liste von Grundalgorithmen, e.g. Mergesort (wie auf der Sorting Hauptseite), und dann wie sie in den Modellen eingesetzt werden. Jeweils ein Paragraph den Algorithmus + Liste wie Eingesetzt wird in verschiedenen Modellen.

Relevante Artikel:

Quellen:

  • Grama, A., 2003. Introduction to parallel computing. Kapitel 6.6 "Bibliographic Remarks" zu Sorting

1.2 Quicksort [2 Teilnehmer: frei]

Aufgabe 1: Parallel Quicksort

Relevante Artikel:

Anmerkungen: Englischer Artikel enthält bereits alte Informationen über verteilte Algorithmen.

Quellen:

  • Grama, A., 2003. Introduction to parallel computing. Kapitel 6.4
  • JáJá, J., 1992. An introduction to parallel algorithms (Vol. 17). Kapitel 4.3
  • Tsigas, P., and Yi Zhang. “A Simple, Fast Parallel Implementation of Quicksort and Its Performance Evaluation on SUN Enterprise 10000.” In Eleventh Euromicro Conference on Parallel, Distributed and Network-Based Processing, 2003. Proceedings., 372–81, 2003. https://doi.org/10.1109/EMPDP.2003.1183613.
  • Heidelberger, Philip, Alan Norton, and John T. Robinson. "Parallel quicksort using fetch-and-add." IEEE Transactions on Computers 39.1 (1990): 133-138.

1.3 Multiway Mergesort [4 Teilnehmer: DE/EN offen, HT + HL]

Aufgabe 1: Multisequence Selection nach Varman et al. [1 Teilnehmer: HT + HL]

Aufgabe 2: K-way Tournament Tree für Multiway Merging [1 Teilnehmer: HT + HL]

Aufgabe 3: Practical Parallel Merge Sort - Parallel and Distributed Variants [2 Teilnehmer: frei] Vorlesungsstoff -> 4.1.7. MCSTL Multiway Mergesort im Skript

Relevante Artikel:

Anmerkungen: Englischer Artikel enthält bereits Informationen über verteilte Algorithmen. Ein wichtige Teilaufgabe wäre auch den K-way Merge Tournament Tree Artikel zu verbessern!

Quellen:

  • JáJá, J., 1992. An introduction to parallel algorithms (Vol. 17). Kapitel 4.3
  • Blelloch, Guy E., et al. "A comparison of sorting algorithms for the connection machine CM-2." Proceedings of the third annual ACM symposium on Parallel algorithms and architectures. ACM, 1991.
  • Varman, Peter J., et al. "Merging multiple lists on hierarchical-memory multiprocessors." Journal of Parallel and Distributed Computing 12.2 (1991): 171-177.
  • https://github.com/tlx/tlx/blob/master/tlx/algorithm/multisequence_selection.hpp
  • Timo's Doktorarbeit: https://arxiv.org/abs/1808.00963 (LCP Loser Tree, page 117)

1.4 List Ranking [2 Teilnehmer: BU + offen]

Aufgabe: Pointer Chasing/Doubling und Ranking mit Independent Sets [2 Teilnehmer]

Anmerkungen: Englischer Artikel enthält bereits Informationen über Pointer Chasing/Doubling

Quellen:

  • Sibeyn, Jop F. "Better trade-offs for parallel list ranking." Proceedings of the ninth annual ACM symposium on Parallel algorithms and architectures. ACM, 1997.
  • Sibeyn, Jop F., Frank Guillaume, and Tillmann Seidel. "Practical parallel list ranking." Journal of Parallel and Distributed Computing 56.2 (1999): 156-180.

1.5 Priority Queues [2 Teilnehmer: BV + EH, Betreuer: Dominik]

Aufgabe 1: Parallel PQ [2 Teilnehmer]

(Aufgabe 2: Branch-and-bound and Parallel Select [1 Teilnehmer])

Relevante Artikel:

Quellen:

  • Rihani, Hamza, Peter Sanders, and Roman Dementiev. "Multiqueues: Simpler, faster, and better relaxed concurrent priority queues." arXiv preprint arXiv:1411.1209 (2014).
  • Sanders, P., 1995. Fast priority queues for parallel branch-and-bound.
  • Rönngren, R. and Ayani, R., 1997. A comparative study of parallel and sequential priority queue algorithms.
  • Brodal, G.S., Träff, J.L. and Zaroliagis, C.D., 1998. A parallel priority queue with constant time operations.
  • Lindén, Jonatan, and Bengt Jonsson. “A Skiplist-Based Concurrent Priority Queue with Minimal Memory Contention.” In Principles of Distributed Systems, 206–20. Lecture Notes in Computer Science 8304. Springer International Publishing, 2013. http://link.springer.com/chapter/10.1007/978-3-319-03850-6_15.

1.6 Concurrent Hash Tables [2 Teilnehmer: DS + DM]

Aufgabe: Einen neuen Artikel zu concurrent/parallel hash tables erstellen oder den bestehenden hash table Artikel ergänzen.

Relevante Artikel:

Quellen:

  • Shun, Julian, and Guy E. Blelloch. "Phase-concurrent hash tables for determinism." Proceedings of the 26th ACM symposium on Parallelism in algorithms and architectures. ACM, 2014.
  • Maier, Tobias, Peter Sanders, and Roman Dementiev. "Concurrent hash tables: Fast and general?(!)." ACM SIGPLAN Notices. Vol. 51. No. 8. ACM, 2016.
  • Intel Thread Building Blocks Hash Tables: https://software.intel.com/en-us/node/506171

1.7 Parallel Minimum Spanning Tree [2 Teilnehmer: PJ + YK, Betreuer: Dominik]

Aufgabe: Ein Artikel zu parallelen MST Algorithmen schreiben. Die Seiten zu Prim's und Kruskal's Algorithmen enthalten schon Information über deren Parallelisierbarkeit. In einem neuen Artikel kann auf diese verwiesen werden und um die besseren alternativen in den Quellen unten erweitert werden:

Anmerkungen: Es existiert bereits eine Seite über verteilte MSTs, allerdings ohne die Algorithmen aus der Vorlesung

Relevante Artikel:

Quellen:

  • Osipov, Vitaly, Peter Sanders, and Johannes Singler. "The filter-kruskal minimum spanning tree algorithm." Proceedings of the Meeting on Algorithm Engineering & Expermiments. Society for Industrial and Applied Mathematics, 2009.
  • Wassenberg, Jan, Wolfgang Middelmann, and Peter Sanders. "An efficient parallel algorithm for graph-based image segmentation." International Conference on Computer Analysis of Images and Patterns. Springer, Berlin, Heidelberg, 2009.
  • Grama, A., 2003. Introduction to parallel computing. Kapitel 7.2 + 7.3
  • JáJá, J., 1992. An introduction to parallel algorithms (Vol. 17). Kapitel 5.2
  • Dehne, F. and Gotz, S., 1998, October. Practical parallel algorithms for minimum spanning trees.

1.8 Parallel BFS [2 Teilnehmer: JE (EN), SR (DE)]

Aufgabe: Parallel BFS und Graph 500

Relevante Artikel:

Quellen:

  • JáJá, J., 1992. An introduction to parallel algorithms (Vol. 17). Kapitel 5.1
  • Buluç, A. and Madduri, K., 2011, November. Parallel breadth-first search on distributed memory systems.
  • Leiserson, C.E. and Schardl, T.B., 2010, June. A work-efficient parallel breadth-first search algorithm (or how to cope with the nondeterminism of reducers).

1.9 Parallel External Memory Model [2 Teilnehmer: MW + CM]

Aufgabe: Ein neuen Artikel zum Parallel External Memory (PEM) model und die Übersichtsartikel zu anderen Modellen ergänzen.

Relevante Artikel:

Quellen:

  • Arge, Lars, Michael T. Goodrich, Michael Nelson, and Nodari Sitchinava. “Fundamental Parallel Algorithms for Private-Cache Chip Multiprocessors.” In Proceedings of the Twentieth Annual Symposium on Parallelism in Algorithms and Architectures, 197–206. SPAA ’08. New York, NY, USA: ACM, 2008. https://doi.org/10.1145/1378533.1378573.
  • Arge, L., M. T. Goodrich, and N. Sitchinava. “Parallel External Memory Graph Algorithms.” In 2010 IEEE International Symposium on Parallel Distributed Processing (IPDPS), 1–11, 2010. https://doi.org/10.1109/IPDPS.2010.5470440.
  • Ajwani, Deepak, Nodari Sitchinava, and Norbert Zeh. "Geometric algorithms for private-cache chip multiprocessors." European Symposium on Algorithms. Springer, Berlin, Heidelberg, 2010.
  • Sitchinava, Nodari, and Norbert Zeh. "A parallel buffer tree." Proceedings of the twenty-fourth annual ACM symposium on Parallelism in algorithms and architectures. ACM, 2012.

1.10 Load Balancing [2 Teilnehmer: offen]

Aufgabe 1: Master/Worker [2 Teilnehmer: Artikel sind stark verbesserungswürdig, aber könnte ein kontroverses Thema werden]

Aufgabe 2: Tree-shaped computations und (simplified/asynchronous) random polling [2 Teilnehmer]

Relevante Artikel:

Anmerkungen: Artikel enthalten bereits parallele Algorithmen und müssen ggf. ergänzt werden

Quellen:

  • Sanders, P., 1994. Massively Parallel Search for Transition-Tables of Polyautomata.
  • Sanders, P., 1998. Tree shaped computations as a model for parallel applications.
  • Sanders, P., 1999. Asynchronous random polling dynamic load balancing.

1.11 Kommunikationsprimitive

1.11.1 Hypercube [2 Teilnehmer: DM + DS]

Aufgabe 1: Hypercube Grundalgorithmus [2 Teilnehmer]

Gut den Grundalgorithmus darstellen und dann die mit Applikationen: Präfixsumme, Broadcast, All-Reduce, All-to-All.

Relevante Artikel:

Quellen:

  • Grama, A., 2003. Introduction to parallel computing.
  • Johnsson, S. Lennart, and C-T. Ho. "Optimum broadcasting and personalized communication in hypercubes." IEEE Transactions on computers 38.9 (1989): 1249-1268.

1.11.2 Reduce [0 Teilnehmer: done]

Aufgabe 1: PRAM/DMM Binomial Tree und 3-2 Elimination [0 Teilnehmer]

Relevante Artikel:

Quellen:

  • Grama, A., 2003. Introduction to parallel computing. Kapitel 3.3
  • Sanders, P., Speck, J. and Träff, J.L., 2009. Two-tree algorithms for full bandwidth broadcast, reduction and scan.
  • Rabenseifner, R. and Träff, J.L., 2004, January. More efficient reduction algorithms for non-power-of-two number of processors in message-passing parallel systems.

Inhalt:

  • Was ist "reduce", Abgrenzen zu MapReduce. … funktionale Reduktion.
  • Binomial Tree reduction.. 2 log2 p Runden Analyse
  • Auch: MPIAllReduce mit Binomial Tree
  • ? 2-Tree full duplex reduction
  • ? non-powers of two Algorithmen anreißen.

1.11.3 Broadcast [2 Teilnehmer: HK + HW]

Aufgabe 1: Binomial Tree, Linear Pipeline and Binary Tree [2 Teilnehmer: HK + HW]

Aufgabe 2: 2-3-Broadcast (and ESBT) [Teilnehmer von Aufgabe 1]

Relevante Artikel:

EBST = Kurzer Abschnitt mit Link zu Hypercube Artikel

Quellen:

  • Parallel Algorithmen Skript
  • Grama, A., 2003. Introduction to parallel computing. Kapitel 3.2
  • Sanders, P., Speck, J. and Träff, J.L., 2009. Two-tree algorithms for full bandwidth broadcast, reduction and scan.
  • Johnsson, S.L. and Ho, C.T., 1989. Optimum broadcasting and personalized communication in hypercubes.

Inhalt:

  • Seitennamen? Broadcast(parallelpattern)?

1.11.4 Präfix Summen [1 Teilnehmer: DS]

Aufgabe 1: Pipelined Binary Tree [1 Teilnehmer: DS]

Abschnitt hinzufügen: "Concrete Implementations of Prefixsum Algorithms" mit MCSTL für shared-memory, hypercube für distributed und pipelined binary tree für große Datensätze.

Relevante Artikel:

Anmerkungen: PRAM Algorithmus bereits auf Seite beschrieben

Quellen:

  • Grama, A., 2003. Introduction to parallel computing. Kapitel 3.3
  • Blelloch, G.E., 1990. Prefix sums and their applications.

1.11.5 Kommunikationsprimitive: All-to-All [4 Teilnehmer: TG + offen]

Aufgabe 1: 1-Factor + hierarchical [TG + 1 Teilnehmer]

Aufgabe 2: h-Relation + irregular messages [2 Teilnehmer]

Relevante Artikel:

Quellen:

  • Grama, A., 2003. Introduction to parallel computing. Kapitel 3.5
  • Sanders, P. and Solis-Oba, R., 2001. How helpers hasten h-relations.
  • Sanders, P. and Träff, J., 2002. The hierarchical factor algorithm for all-to-all communication.
  • Bruck, Jehoshua, et al. "Efficient algorithms for all-to-all communications in multiport message-passing systems." IEEE Transactions on parallel and distributed systems 8.11 (1997): 1143-1156.
  • Hambrusch, Susanne E., Farooq Hameed, and Ashfaq A. Khokhar. "Communication operations on coarse-grained mesh architectures." Parallel Computing 21.5 (1995): 731-751.

2 Programmieraufgaben

Bei den Programmieraufgaben soll eine Aufgabe im Bereich paralleler Algorithmen implementiert werden.

2.1 Parallel Radix Sort for Integers [2-3 Gruppen je 1-2 Teilnehmer: AK, DR + MT, BR + KH]

Es soll ein paralleler Radixsort Algorithmus für Integer entwickelt und in C++ implementiert werden. Dazu kann viel bestehender Code von unserem parallelen String Radix Sort wiederverwendet werden. Die eigentliche Herausforderung ist die Lastbalance bei ungleich verteilten Eingaben sicher zu stellen.

Diese Aufgabe wird an mehrere Gruppen vergeben werden, die verschiedene Ansätze ausprobieren können. Die performanteste Implementierung soll in unsere Algorithmen-Bibliothek aufgenommen werden (sofern der Quellcode lesbar und wartbar ist).

Eine Gruppe soll work-stealing implementieren, eine Gruppe kann voluntary work-sharing implementieren, und eine Gruppe kann einen spezielle Version für Permutation entwickeln.

Ideensammlung:

  • Ziel: als Benchmark werden integer pairs sortieren (`std::pair<uint32t, uint32t>`), die Funktion soll aber mit templates alle Typen unterstützen.
  • Ziel: ohne OpenMP (am Ende, eventuell während der Entwicklung schon)
  • Beobachtung: im Internet gibt es einige parallel radix sort, doch oft ohne Lastbalancierung.
  • Unklar ob LSD oder MSD besser ist, das hängt vom Keyraum ab, auch hybride Techniken sind möglich.
  • Als Interface würde ich folgende gemeinsame Definition vorschlagen, die aus Thrill's sequentiellen radix sort template method kommt:
/*!
 * Radix sort the iterator range [begin,end). Sort unconditionally up to depth
 * MaxDepth, then call the sub_sort method for further sorting. Small buckets
 * are sorted using std::sort() with given comparator. Characters are extracted
 * from items in the range using the at_radix(depth) method. All character
 * values must be less than K (the counting array size).
 */
template <
    size_t MaxDepth, typename Iterator,
    typename Comparator =
        std::less<typename std::iterator_traits<Iterator>::value_type>,
    typename SubSorter = NoOperation<void> >
static inline
void radix_sort_CI(Iterator begin, Iterator end, size_t K,
                   const Comparator& cmp = Comparator(),
                   const SubSorter& sub_sort = SubSorter());

2.2 Atomic Counter auf Shared-Memory [1 Teilnehmer: RG]

Ein atomic counter, der zeitgleich von verschiedenen Threads verändert wird, ist eine häufige Quelle von Zugriffskonflikten auf shared-memory Maschinen. Bei einem alternativen Ansatz speichert man Änderungen in thread-lokalen Zwischenvariablen und ermittelt nur periodisch oder bei Bedarf die richtige Gesamtsumme.

Diese beiden Ansätze sollen implementiert werden. Weiter sollen Experimente auf verschiedenen multi-core Rechnern durchgeführt werden, um die Performance der zwei Ansätze mit verschiedenen CPU Befehlen zu messen.

2.3 NUMA-Aware Thread Pool und Memory Allocator [1 Teilnehmer: PL]

Ziel ist es ein Wrapper Framework zu konstruieren, das Allokationen und Berechnungen koordiniert auf NUMA Knoten verteilt. Dazu soll ein bestehender C++ thread pool um NUMA Funktionalität erweitert werden und Wrapper-Funktionalität erstellt werden um die ausgeführten Jobs zu den auf den NUMA Knoten allozierten Speicherteilen passend zuzuordnen.

Autor: Timo Bingmann

Created: 2019-01-24 Thu 13:28