Zum Inhalt springen

Partitioned Global Address Space

aus Wikipedia, der freien Enzyklopädie
Dies ist die aktuelle Version dieser Seite, zuletzt bearbeitet am 10. Februar 2025 um 21:08 Uhr durch imported>Leyo (verirrtes Komma).
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

{{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value) (PGAS) ist ein Programmiermodell speziell für Mehrprozessorsysteme und massiv parallele Rechner. Dabei wird der globale Adressbereich des Arbeitsspeichers logisch unterteilt. Jeder Prozessor bekommt jeweils einen dieser Adressbereiche als lokalen Speicher zugeteilt. Trotzdem können alle Prozessoren auf jede Speicherzelle zugreifen, wobei auf den lokalen Speicher mit wesentlich höherer Geschwindigkeit zugegriffen werden kann als auf den von anderen Prozessoren.<ref name="PGASLanguages">George Almasi: PGAS (Partitioned Global Address Space) Languages. In: Encyclopedia of Parallel Computing. Springer US, 2011, S. 1539–1545, doi:10.1007/978-0-387-09766-4_2091.</ref>

Ein wichtiger Vorteil der PGAS-Sprachen ist die einfach formulierbare Möglichkeit, große Datenmengen, die von einem einzelnen Prozessor nicht mehr gespeichert werden können, in den verteilten Speichern vieler Prozessoren unterzubringen, ohne dass die einheitliche Datenbeschreibung verloren geht.

Der Programmierer steht vor der Aufgabe, maximale Leistung des Programms durch geeignete Definition und Zuordnung der Programmvariablen zu erzielen. Dabei ist insbesondere eine gleichmäßige Lastverteilung auf alle beteiligten Prozessoren zu achten. Ein nur mit PGAS-Mitteln geschriebenes Programm ist manchmal sehr schwer zu überschauen, da die Zuordnung der Variablen im Programm nicht explizit auftaucht, sondern nur implizit nach festgelegten Regeln erfolgt. Deshalb gibt es in PGAS-Sprachen zusätzliche Möglichkeiten der Synchronisierung der Prozesse.

Eigenschaften

Ein PGAS-System hat folgende Eigenschaften:

  • Es besteht aus einer Menge von Prozessoren mit lokalen Speicher. Teile dieses lokalen Speichers können als privat deklariert werden, so dass sie nicht für andere Prozessoren sichtbar sind
  • Es hat einen Mechanismus um wenigstens einen Teil des lokalen Speichers der Prozessoren mit anderen Prozessoren zu teilen. Dies führt zwangsläufig zu Verzögerungen beim Speicherzugriff, abhängig von der Zugriffsmethode und dem Ort an dem die geteilte Speicherzelle liegt
  • Jede geteilte Speicherzelle ist mit einem Thread assoziiert (engl. {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value)), entweder lokal, so dass der Zugriff schnell erfolgen kann, oder entfernt, so dass der Zugriff länger dauert. Diese Assoziation zeigt sich auch dem Programmierer, so dass dieser performant programmieren kann.<ref name="PGASLanguages" />

Programmiersprachen

Alle PGAS-Programmiersprachen enthalten die oben genannten Eigenschaften, auch wenn diese unterschiedlich umgesetzt wurden. Jede Sprache erlaubt es zwischen privatem und geteiltem Speicher zu unterscheiden und außerdem die Assoziation der geteilten Speicherzellen zu bestimmen. Manche PGAS-Sprachen bieten verteilte Schleifen oder spezielle Syntax an, um auf entfernte Daten zuzugreifen.<ref name="PGASLanguages" />

Die Prozessoren führen normale Threads aus. Die Synchronisierung beim Variablenzugriff erfolgt implizit; explizite Synchronisierung durch den Programmierer ist möglich.

  • Unified Parallel C (UPC) hat sich von C abgespalten. Es erweitert C um geteilte Arrays und geteilte Pointer, die den globalen Adressraum adressieren. UPC hat außerdem eine forall-Schleife, die Iterationen abhängig von der Assoziation ausführt.<ref>Thomas Rauber, Gudula Rünger: Parallele Programmierung. 3. Auflage. Springer, Berlin Heidelberg 2012, ISBN 978-3-642-13604-7, S. 375–386.</ref>
  • Co-array Fortran (CAF) basiert auf Fortran. Es erweitert Fortran-Arrays, so dass auch andere Prozesse auf sie zugreifen können. Eine Variante von Coarray Fortran ist in Fortran 2008 enthalten. Sie ist die einzige PGAS-Sprache, die eine ISO-Zertifizierung erhalten hat.
  • Titanium basiert auf Java. Sie bietet SPMD-Parallelismus, Pointer zu geteilten Daten und ein erweitertes Modell für verteilte Arrays.<ref>Kathy Yelick, Luigi Semenzato, Geoff Pike et al.: Titanium: A High-Performance Java Dialect. In: Concurrency: Practice and Experience. Band 10, Nr. 11-13, 1998, S. 825–836, doi:10.1002/(SICI)1096-9128(199809/11)10:11/13<825::AID-CPE383>3.0.CO;2-H.</ref>
  • Fortress unterstützt parallele Programmierung sowohl für Mehrkernprozessoren als auch für Supercomputer. Fortress hat eine mathematische Syntax, nutzt Parallelismus wann immer möglich und ist eine Framework zur Erstellung von domänenspezifischen Sprachen.<ref>GuyL., Jr. Steele, Eric Allen, David Chase et al.: Fortress (Sun HPCS Language). In: Encyclopedia of Parallel Computing. 2011, S. 718–735, doi:10.1007/978-0-387-09766-4_190.</ref>
  • Chapel wird von der Firma Cray entwickelt. Sie verfolgt folgende vier Ziele: Multithreading, Locality-Awareness, Objektorientierung und generische Programmierung.<ref>David Callahan, Bradford L. Chamberlain, Hans P. Zima: David Callahan, Bradford L. Chamberlain, Hans P. Zima. In: Ninth International Workshop on High-Level Parallel Programming Models and Supportive Environments. 2004, S. 52--60, doi:10.1109/HIPS.2004.1299190.</ref>
  • X10 gibt es in zwei Implementierungen, einmal basierend auf Java, einmal basierend auf C++. X10 bietet Task- und Datenparallelismus. Die wesentliche Eigenschaft von X10 ist die asynchrone Taskverwaltung.<ref>Vijay Saraswat, Bard Bloom, Igor Peshansky, Olivier Tardieu, David Grove: X10 Language Specification Version 2.3. 2013, S. 1–282 ([1] [PDF; 1,6 MB; abgerufen am 28. August 2013]).</ref>

Weblinks

Einzelnachweise

<references />