Unified Parallel C
# Unified Parallel C

Unified Parallel C (UPC) es una extensión del lenguaje de programación C diseñado para computación de alto rendimiento en máquinas paralelas, incluyendo tanto aquellas con un espacio de memoria global (SMP y NUMA) como aquellas con un espacio de memoria distribuido, como los clusters. El programador observa un único espacio de memoria compartida donde las variables se pueden leer y escribir desde cualquier procesador, pero cada reside físicamente en un único procesador, con el que se dice que tiene afinidad. UPC usa un modelo de computación SPMD (Single Program Multiple Data) donde la cantidad de procesos se puede indicar tanto en tiempo de compilación como al inicio de la ejecución del programa.

Para trabajar con el paralelismo, UPC extiende el ISO C 99 añadiéndole:

* Un modelo de programación explícitamente paralelo.
* Un espacio de memoria compartida.
* Primitivas de sincronización y de consistencia de memoria.
* Primitivas de gestión de memoria.

UPC evolucionó de experiencias con otros tres lenguajes más prematuros que propusieron extendiones paralelas a ISO C 99: AC, Split-C, y Parallel C Preprocessor (PCP). UPC no es un superconjunto de estos tres lenguajes sino un intento de destilar las mejores características de cada uno. UPC combina la facilidad de programación del paradigma de programación en memoria compartida con el control del tráfico de datos y el rendimiento del paradigma de programación de paso de mensajes.

## Compiladores

UPC ha sido implementado en compiladores comerciales o de investigación, incluyendo:

* HP Unified Parallel C (UPC)
* Cray UPC
* IBM XL UPC Compilers
* Berkeley UPC
* GCC UPC
* Michigan Tech MuPC
