Unified Parallel C

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen Zur Suche springen
Unified Parallel C (UPC)
Paradigmen: imperativ, strukturiert, parallel
Erscheinungsjahr: 1999
Entwickler: UPC Consortium
Aktuelle Version: 1.3  (November 2013)
Wichtige Implementierungen: BUPC, GCC-UPC, IBM XL, HP, MuPC, Cray
Beeinflusst von: C, AC, Split-C, Parallel C Preprocessor
Betriebssystem: plattformübergreifend
https://upc-lang.org/

Unified Parallel C (UPC) ist eine parallele Erweiterung der Programmiersprache C für den Einsatz in Hochleistungsrechnern. Das zugrundeliegende Programmiermodell ist SPMD und als Speichermodell wird ein partitionierter globaler Adressraum (PGAS) verwendet.

Überblick[Bearbeiten | Quelltext bearbeiten]

Die UPC-Spracherweiterungen wurden durch das UPC Consortium im Jahr 1999 spezifiziert. Ziele bei der Entwicklung von UPC waren, einen effizienten Zugriff auf die Rechenressourcen eines Parallelrechners zu ermöglichen und einen Standard für die explizite parallele Programmierung in C zu etablieren. Ein Hauptvorteil von UPC ist, dass der Anwendungsprogrammierer die Verteilung der Programmdaten direkt kontrollieren kann und somit Datenlokalität auf einer Vielzahl von Systemarchitekturen genutzt werden kann.

Ein UPC-Programm wird durch mehrere Threads parallel in einem gemeinsamen globalen Adressraum ausgeführt. Die Anzahl der Threads wird entweder beim Kompilieren oder beim Start des UPC-Programms festgelegt und kann zur Laufzeit durch die vordefinierte Konstante THREADS abgefragt werden. Jeder Thread besitzt einen eigenen Adressraum, d. h. die Threads von UPC entsprechen nicht denen der Pthreads-Bibliothek.

Die Variablen eines UPC-Programms sind standardmäßig privat, d. h. jeder Thread erhält eine Kopie der Variablen, die getrennt von anderen Threads gelesen und geschrieben werden kann. Variablen können jedoch auch als gemeinsam genutzt (shared) deklariert werden, so dass alle Threads gemeinsam auf dieselben Variablen zugreifen können. Gemeinsam genutzte Variablen besitzen immer eine Affinität zu einem bestimmten Thread, in dessen Adressraum sie gespeichert werden. Für gemeinsam genutzte Felder (shared arrays) kann eine Verteilung der Feldelemente auf die Threads spezifiziert werden, so dass unterschiedliche Feldelemente eine Affinität zu verschiedenen Threads besitzen.

Weblinks[Bearbeiten | Quelltext bearbeiten]