Einleitende Hinweise zur Parallelisierung, insbesondere zu Problemmustern und Algorithmen


10

Ich suche nach online verfügbaren Vorlesungsskripten oder anderen Ressourcen, die eine gute Einführung in die parallele Programmierung bieten, genau wie das parallele Analogon der Grundkurse in der Informatik.

Mein Fokus liegt auf Folgendem: Während ich über Divide & Conquer, gierige Algorithmen, dynamische Programmierung und dergleichen sprechen kann, dh über grundlegende Muster sequentieller Algorithmen (und Probleme), habe ich nicht die geeignete Sprache, um Ansätze in parallele Algorithmen zu klassifizieren.

Zum Beispiel möchte ich die passenden Begriffe erwerben, um die Tatsache auszudrücken, dass die offensichtlichen parallelen Ansätze für jedes der folgenden Probleme ein unterschiedliches qualitatives Verhalten aufweisen:

  1. Setzen eines Arrays von Ganzzahlen auf Null (skaliert perfekt.)
  2. Summieren eines Arrays von Ganzzahlen (je mehr Threads Sie verwenden, desto mehr Overhead.)
  3. Listen Sie bei einem gegebenen Array die Produkte jedes Eintrags miteinander auf (wenn wir die kanonische Double-for-Loop parallelisieren, wird die Laufzeit auf das Quadrat der Anzahl der Prozessoren skaliert.)

Eine Umgebung mit gemeinsamem Speicher reicht aus, und die Kommunikation zwischen Prozessen ist für mich nicht so relevant (tatsächlich interessiere ich mich für Algorithmen, die dies überhaupt vermeiden). Darüber hinaus sind die technischen Aspekte für mich vernachlässigbar.


Können Sie diesen Satz umformulieren: "Ich möchte zum Beispiel eine Sprache haben, warum die offensichtliche parallele Herangehensweise an die folgenden Probleme ein unterschiedliches qualitatives Verhalten aufweist"
Gopi

Erledigt. Ich hoffe das ist genauer.
Shuhalo

Antworten:


6

Für ein Einführungsbuch zur parallelen Programmierung (ich weiß nichts über Online-Material) habe ich es mit parallelen Algorithmen von Casanova, Legrand und Robert gelernt , was sehr hilfreich ist, um mit theoretischen parallelen Algorithmen zu beginnen.

Darüber hinaus wurde in SPAA'11 diskutiert, was ein Student mit parallelem Algorithmus und verteiltem Computer wissen und was er unterrichten sollte. Diese Lehrplaninitiative für paralleles und verteiltes Rechnen hilft Ihnen dabei, keinen Kurs zu finden, sondern die Liste der verschiedenen Themen, die während eines Grundstudiengangs behandelt werden sollten. Dann ist es wohl einfacher, Dokumentation zu jedem bestimmten Thema zu finden.


1
Der Begriff "Sprache" bezieht sich auf natürliche Sprache, nicht auf Programmiersprache oder ähnliches. Genau wie Mathematik eine Sprache ist und zum Beispiel Kategorietheorie oder Gruppentheorie eine "Sprache" für bestimmte Strukturen, Beziehungen und Fakten liefern soll. Danke trotzdem.
Shuhalo

in der Tat mein schlechtes :). Dann empfehle ich für die drei Fragen, die Sie hatten, das von mir verlinkte Buch, das sehr theoretisch ist. Sie untersuchen alle Arten von parallelen Algorithmen und Techniken auf verschiedenen Arten von parallelen Architekturen. Dann wäre der Teil, der Ihre drei Fragen beantworten könnte, der Teil auf Uniform Loops .
Gopi


+1 für die NSF / IEEE-TCPP-Lehrplaninitiative, aber ich schlage vor, dass Sie OpenMP & MPI entfernen, da diese hier nicht wirklich relevant sind.
Jukka Suomela

In der Tat habe ich vergessen, es nach dem Kommentar von @Martin zu entfernen. Vielen Dank.
Gopi

7

Wenn Sie sich nicht mit den wichtigsten Details befassen möchten, bietet das Buch Patterns for Parallel Programming von Mattson, Sanders und Massingill eine sehr gute Einführung in Parallelisierungsdesignmuster .

Sie finden allgemeine, allgemein anwendbare Lösungen für die Parallelisierung und sogar eine kurze Einführung in OpenMP und MPI. Das Buch beginnt mit der Einführung von Entwurfsmustern und Parallelität. Anschließend veranschaulichen die Autoren, wie die Parallelität ausgenutzt, der Algorithmus strukturiert und der Algorithmus unter Berücksichtigung von Synchronisation und Kommunikation tatsächlich implementiert wird.

Auch dies ist kein Lehrbuch über parallele Algorithmen. Es ist sehr gut darin, Materialien zu präsentieren, die eng mit dem parallelen Software-Engineering zusammenhängen und sowohl einen praktischen als auch einen theoretischen Schwerpunkt haben. Daher sollte es perfekt zu Ihren Bedürfnissen passen.


1

MPI_RUBY ... muss meinen neuesten stabilen Build finden. Ich würde vorschlagen, der Liste ein Parallelpräfix (Scan) hinzuzufügen. Ich würde nur das parallele Präfix unterrichten und ihnen zeigen, wie man eine raumfüllende Kurve verwendet, um eine bessere Cache-Effizienz für das Problem aller Paare zu erzielen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.