Unified Parallel C

aus Wikipedia, der freien Enzyklopädie
Wechseln zu: Navigation, Suche
Unified Parallel C (UPC)
Paradigmen: imperativ, strukturiert, parallel
Erscheinungsjahr: 1999
Entwickler: UPC Consortium
Aktuelle Version: 1.2  (31. Mai 2005)
Wichtige Implementierungen: BUPC, GCC-UPC, IBM XL, HP, MuPC, Cray
Beeinflusst von: C, AC, Split-C, Parallel C Preprocessor
Betriebssystem: plattformübergreifend
http://upc.gwu.edu/

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

Überblick[Bearbeiten]

Die UPC Spracherweiterungen wurden durch das UPC Consortium im Jahr 1999 spezifiziert. Ziel bei der Entwicklung von UPC waren (1) einen effizienten Zugriff auf die Rechenresourcen eines Parallelrechners zu ermöglichen und (2) 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 ausgenutzt werden kann.

Ein UPC Programm wird durch eine Menge von Threads parallel in einem gemeinsamen globalen Adressraum ausgeführt. Die Anzahl der Threads wird entweder beim Kompilieren oder bei Start des UPC Programmes 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 Programmes 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 eine einzige Kopie der 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]