Parallele Algorithmen

Februar 2013
Prüfer: Dr. Ronald Veldema Beisitzer: Dipl.-Inf. Georg Dotzler

Während der Prüfung herrschte eine angenehme Atmosphäre. Für die Beantwortung schwieriger Fragen darf man sich ruhig auch kurz etwas Zeit zum Nachdenken nehmen; es muss also nicht auf jede Frage sofort eine Antwort folgen. Der Prüfungsstoff orientierte sich gefühlsmäßig an den Übungsblättern sowie den Programmier-Hausaufgaben, dazu kamen ein paar Transferfragen.

Q: Warum sollte man sich für parallele Algorithmen interessieren?

Q: Speedup? Gesetz von Amdahl?

Q: Wie kann man Tiefensuche/Breitensuche parallel implementieren?

Q: Schachbrett: Wie kann man einen optimalen Zug mit einer NDTM finden?

Q: Aufwand dieses NDTM-Algorithmus?

Q: Wir greifen mit Linda auf ein Bankkonto zu: Was ist, wenn man parallel von zwei Geldautomaten Geld abheben will?

Q: Wie funktioniert der Ticketing-Algorithmus?

Q: Wir haben ein sortiertes Zahlenarray: Suche die 5

Q: Jetzt haben wir ein unsortiertes Zahlenarray: Suche Median

Q: Queue (lockfrei)

Q: Wir wollen das Sieb des Eratosthenes parallelisieren, wie könnte man das machen? Wie ist der Aufwand?

Q: Supermarkt, Datamining mit Output Partitioning: Wir wollen die Produkte, die am öftesten zusammen gekauft wurden

Q: Gegeben sind zufällige Punkte mit zufälligen Kanten. Wie finden wir alle Komponenten?

Q: Gegeben ist folgender Code:

for i = ...:
	a[i] = b[i + 1] * c[i * 2]

Dieser Code soll vektorisiert werden. Was ist überhaupt Vektorisieren?

      for i = .../4:
		a[i * 4 + 0] = b[i * 4 + 1] * c[(i * 4 + 0) * 2]
		a[i * 4 + 1] = b[i * 4 + 2] * c[(i * 4 + 1) * 2]
		a[i * 4 + 2] = b[i * 4 + 3] * c[(i * 4 + 2) * 2]
		a[i * 4 + 3] = b[i * 4 + 4] * c[(i * 4 + 3) * 2]