Unified Parallel C
Unified Parallel C (UPC) è un'estensione del linguaggio di programmazione C sviluppato per ottenere elevate prestazioni di calcolo in macchine basate su parallelismo massivo comprese le macchine con indirizzamento della memoria globale tipo quelle SMP o quella basate su architettura NUMA e per le macchine a memoria distribuita come i cluster. Il programmatore vede una singola memoria condivisa da tutto il sistema, anche se ogni variabile è fisicamente assegnata a un singolo processore. UPC utilizza un modello di elaborazione Single Program Multiple Data (SPMD), in questo modello di programmazione il parallelismo del sistema è deciso all'avvio dei programma, tipicamente a ogni processore viene assegnato un singolo Thread.
Per permettere l'esplicitazione del parallelismo IPC estende il C ISO 99 con i seguenti costruttori:
- Un modello di esecuzione a parallelismo esplicito
- Uno spazio di memoria condivisa
- Primitive di sincronizzazione e un modello di della coerenza della memoria
- Primitive di gestione della memoria.
L'UPC si è evoluto dall'esperienza del gruppo di programmatori che utilizzando altre estensioni del C per la gestione delle macchine parallele come lo Split-X e il Parallel C Prepocessor (PCP) ne saggiarono le limitazioni e decisero di superarle. L'UPC non raccoglie tutte le funzionalità dei precedenti linguaggi ma piuttosto cerca di raccogliere le caratteristiche migliori dei linguaggi in una struttura coerente e solida. UPC combina la semplicità di programmare un sistema a memoria condivisa che consente una gestione diretta dei dati con le prestazioni di un sistema basato sul passaggio di messaggi.