X10 ist eine statisch typisierte, objektorientierte Sprache für paralleles und verteiltes Rechnen, entwickelt von IBM am Thomas J. Watson Research Center im DARPA-Projekt PERCS (High Productivity Computing Systems). X10 erweitert einen sequenziellen Sprachkern um places (Orte), activities (Aktivitäten), clocks (Uhren) und verteilte Arrays – das sogenannte APGAS-Modell (Asynchronous Partitioned Global Address Space).
Werkzeuge
x10c– Compiler mit Java-Backend (erzeugt Java/Bytecode)x10c++– Compiler mit C++-Backend (für native, leistungsfähige Ausführung)runx10– Startprogramm: verteilt die Ausführung über mehrere places, z. B.runx10 -n 4 Programm(4 places)
Parallelitäts-Konstrukte
finish {
for (p in Place.places()) {
async at (p) Console.OUT.println("Hallo von place " + p.id);
}
}
async– startet eine neue Aktivität (feinkörnig nebenläufig)finish– wartet, bis alle inneren Aktivitäten beendet sindat (p)– führt Code auf einem bestimmten place aus;async (p) Sist syntaktischer Zucker fürat (p) async Satomic– atomare Blöcke für gemeinsame Variablenateach– startet Aktivitäten über alle places einer Verteilung- Kommunikation über Places (partitionierter globaler Adressraum) statt expliziter Message Passing
Praxis-Tipps
- Kompilieren:
x10c++ -o Programm -O Programm.x10, dannrunx10 -n 4 Programm - Für die Datenparallelität gibt es mehrdimensionale verteilte Arrays (
Array[T]mitDist) undClock-Synchronisation
Verwandte Sprachen: Java-Befehle (X10-Syntax), C/C++-Befehle (C++-Backend), Go-Befehle (Nebenläufigkeit), Xtend-Befehle und Gosu-Befehle. Konzepte: Multikern-Prozessor und Nebenläufigkeit.