Aufgabe 5: Parallelisierung Spielsuche
Am Beispiel des Brettspiels Abalone
HPC-Praktikum SS07
1. Minimax
Zur Einarbeitung in die für die spätere Parallelisierung
benötigten Codeteile soll zunächst eine sequentielle
Minimax-Suchestrategie entwickelt werden.
Implementieren sie die Minimax-Suchestrategie für Abalone in einer
Klasse MinimaxStrategy mit OneLevelStrategy als Vorlage und
SearchStrategy::_maxDepth als Tiefe, bis zu der Minimax suchen soll;
Aufrufbeispiele und Details zum Code sind in der README-Datei zum Code
zu finden.
Welche Leistung (Einheit "Bewertete Stellungen pro Sekunde") erreichen Sie
bei Nutzung "bester" Compileroptionen auf der Altix
bei verschiedenen Maximal-Suchtiefen (2,3,4,5) bezogen auf
- die Anfangsposition des Spiels
- die Position in "position-midgame1"
- "position-midgame2" und
- "position-endgame"?
Notieren sie sich auch die absolute Anzahl durchgeführter Bewertungen.
Hinweis: "Bewertungen/s" gibt "player -v ..." aus.
2. Parallelisierung Minimax
Parallelisieren Sie die Minimaxsuche entweder mit OpenMP
(eventuell mit Workqueuing-Konstrukten; siehe Manual des Intel
Compilers) oder MPI
mit einer geeigneten Parallelisierungsstrategie
(für MPI müssen Sie player.c:main() entsprechend abändern).
Welchen Speedup
bekommen Sie für die in (1) beschriebenen Parameter, also bezogen
auf der Performance-Wert "Bewertungen/s" für 2,4,6,8 Prozessoren?
Wann kann der erreichbare Speedup von der aktuellen Stellung abhängen?
Hinweis:
- Überlegen Sie, welche Variablen bei der Parallelisierung mit
OpenMP als privat deklariert werden müssen. Dazu gehören
bei C++ auch Objekte, die in jedem Thread privat vorhanden sein
müssen, damit sich die Threads keine Daten überschreiben
(z.B. das Objekt für die Spielposition).
3. Einfache Parallelisierung Alpha-Beta
Der vorgegebene Alpha-Beta-Alogrithmus (ABID) lässt unnötige
Bewertungen aus. Um wieviel Prozent sinkt die absolute Anzahl
bewerteter Stellungen in den in Teilaufgabe (1) notierten Fällen?
Was wäre eine einfache Parallelisierung des Alpha-Beta-Algorithmus?
Implementieren Sie Ihre einfache Strategie. Der Suchparallelisierungs-Overhead
ist der Prozentsatz an unnötig durchgeführten Bewertungen. Wie hoch
ist dieser Overhead in ihrer einfachen Strategie bei 2,3,4,6 Prozessoren und
den in Teilaufgabe (1) vorgegebenen Stellungen?
Welche Probleme hat die Parallelisierung ausserdem? Hinweise kann eine
Speedup-Kurve geben (und bei MPI-Code der Traceanalyzer!).
4. Effiziente Parallelisierung Alpha-Beta
Um zu einer besseren Parallelisierung zu gelangen, ist eine gut ausbalancierte
Partitionierung des erwarteten Berechnungsaufwandes wichtig. Man kann davon
ausgehen, dass der Alpha-Beta Suchbaum mit passender Heuristik der minimalen
Form sehr nahe kommt. Wie sieht diese aus?
Fündig wird man in "Lu: Parallel
Search of Narrow Game Trees", siehe HPC-Webseite. In der Arbeit sind
auch Parallelisierungsstrategien beschrieben.
Eine wichtige Strategie ist
PVSplit, die in einem minimalen Alpha-Beta-Suchbaum die Kinder der sogenannten
ALL-Knoten in einer Tiefensuche parallel behandelt.
Implementieren Sie PVSplit in OpenMP oder MPI für Abalone.
Geben Sie entsprechend zu Aufgabe 3 Speedupwerte für ihre
Parallelisierung von PVSplit an.
Hinweise:
- Bei Nutzung von OpenMP sollten Sie hier Workqueuing-Konstrukte
einsetzen
- Welche Bedingung und Codestelle bezeichnet einen ALL-Knoten in PVSplit?
Genau an diesen Stellen muss parallelisiert werden.