From Lawrence Berkeley National Laboratory:
Unified Parallel C (UPC) is an extension of the C programming language designed for high performance computing on large-scale parallel machines. The language provides a uniform programming model for both shared and distributed memory hardware. The programmer is presented with a single shared, partitioned address space, where variables may be directly read and written by any processor, but each variable is physically associated with a single processor.
UPC uses a Single Program Multiple Data (SPMD) model of computation in which the amount of parallelism is fixed at program startup time, typically with a single thread of execution per processor.
In order to express parallelism, UPC extends ISO C 99 with the following constructs:
An explicitly parallel execution model
A shared address space
Synchronization primitives and a memory consistency model
Memory management primitives
UPC combines the programmability advantages of the shared memory programming paradigm and the control over data layout and performance of the message passing programming paradigm.
Berkeley UPC is a high-performance, portable and fully open-source implementation of the UPC language designed for large-scale multiprocessors, PC clusters, and clusters of shared memory multiprocessors. Berkeley UPC is the first UPC implementation available for Microsoft Windows, providing support for UPC code development on Windows laptops and desktop workstations.