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 sind
  • at (p) – führt Code auf einem bestimmten place aus; async (p) S ist syntaktischer Zucker für at (p) async S
  • atomic – atomare Blöcke für gemeinsame Variablen
  • ateach – 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, dann runx10 -n 4 Programm
  • Für die Datenparallelität gibt es mehrdimensionale verteilte Arrays (Array[T] mit Dist) und Clock-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.