[cfe-dev] Announcement: Clang UPC: A UPC compiler based on Clang/LLVM

Gary Funck gary at intrepid.com
Thu Nov 29 09:58:43 CST 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:
  https://github.com/Intrepid/clang-upc
Clang UPC requires this version of LLVM, which currently has
only minor (but necessary) changes to the base line LLVM:  
  https://github.com/Intrepid/llvm-upc

For details on how to build, install, and use Clang UPC,
consult the wiki at:
  https://github.com/Intrepid/clang-upc/wiki.

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
constructs:

    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
paradigm.

[source: http://en.wikipedia.org/w/index.php?title=Unified_Parallel_C]

For additional information and resources, consult:
  http://upc-lang.org

Contact
-------

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:
 http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev
or send an email to:
 Gary Funck <gary at intrepid.com>

Future Projects
---------------

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.

Acknowledgements
----------------

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 mailing list