[cfe-dev] Announcement: Clang UPC: A UPC compiler based on Clang/LLVM
gary at intrepid.com
Thu Nov 29 07:58:43 PST 2012
Clang UPC: A UPC Compiler based upon Clang/LLVM
Date: November, 29, 2012
An initial implementation of Clang UPC is available for download
(in source form) from:
Clang UPC requires this version of LLVM, which currently has
only minor (but necessary) changes to the base line LLVM:
For details on how to build, install, and use Clang UPC,
consult the wiki at:
Unified Parallel C (UPC)
Unified Parallel C (UPC) is an extension of the C programming language designed
for high-performance computing on large-scale parallel machines, including
those with a common global address space (SMP and NUMA) and those with
distributed memory (e.g. clusters). 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
An explicitly parallel execution model
A shared address space
Synchronization primitives and a memory consistency model
Explicit communication primitives, e.g. upc_memput
Memory management primitives
The UPC language evolved from experiences with three other earlier languages
that proposed parallel extensions to ISO C 99: AC, Split-C, and Parallel C
Preprocessor (PCP). UPC is not a superset of these three languages, but rather
an attempt to distill the best characteristics of each. UPC combines the
programmability advantages of the shared memory programming paradigm and the
control over data layout and performance of the message passing programming
For additional information and resources, consult:
If you have an interest in extending Clang UPC, or have any questions
not covered in this announcement, please ask them either on the
Clang Developer's email list:
or send an email to:
Gary Funck <gary at intrepid.com>
The following projects are provided for discussion purposes.
- Merge Clang UPC into the main Clang/LLVM source code trunk.
- Develop a UPC-to-C translator based upon Clang/UPC.
- Extend the LLVM intermediate form to describe accesses
to distributed shared memory and synchronization constructs
typical of UPC and other distributed parallel programming
languages. Implement optimizations and analysis tools
that take advantage of the additional information that
is present in this extended LLVM intermediate form.
Intrepid Technology (http://www.intrepid.com) and Boostpro
(http://www.boostpro.com) teamed to develop Clang UPC.
Intrepid drew upon its experience with implementing a UPC
compiler based upon GCC (http://www.gccupc.com) and Boostpro
provided Clang/LLVM expertise. Steven Watanabe of Boostpro
is the key developer of the Clang UPC front-end.
-- end --
More information about the cfe-dev