|
Berkeley UPC - Unified Parallel C
|
|
Lawrence Berkeley National Laboratory is hiring!
The Pagoda project and Computer Languages and System Software Group (CLaSS)
at LBNL are recruiting for the following positions:
Planned downtime for upc.lbl.gov: Friday, Apr 23 - Mon Apr 26
Notice to all Berkeley UPC users:
The Berkeley UPC web site at upc.lbl.gov (downloads, documentation,
publications, etc) and upc-lang.org will be unavailable during the period indicated above due
site-wide power system maintenance.
The outage will also affect the primary BUPC internet translator
(upc-translator.lbl.gov) so Berkeley UPC compilations using the internet
translator may experience higher latency as it fails-over to the secondary translator.
Berkeley UPC downloads
|
Latest News: Apr 16, 2021: Berkeley UPC 2021.4.0 released!
|
|
Downloading and Installing Berkeley UPC
There are two main steps to get UPC running on your system using the Berkeley UPC Runtime.
You will need to build from source on your system, and there are several ways to do this depending on
what option(s) you want for UPC translation/compilation.
Required component: The Berkeley UPC Runtime/driver package
The Berkeley UPC Runtime is required by all configurations.
The runtime works on all our supported platforms.
The runtime distribution includes the GASNet portable networking library--if
you wish to download GASNet separately, you can get it from the
GASNet website.
INSTALL.TXT explains how to configure
and build the Berkeley UPC runtime, including optional directions for configuring the
'upcc' driver to use any of the five UPC compiler options listed in the next step.
The 'upcc' compiler driver defaults to transparently
using a public HTTP-based translator for UPC compilation.
Provided your system will have an Internet connection during UPC compilation,
this is the easiest and quickest install to get started (and you can stop here).
Optional component: Install a UPC translator/compiler
There are several options for UPC compilation using the Berkeley UPC Runtime.
In all cases the same 'upcc' driver is used, and the resulting executables
are linked to the Berkeley UPC Runtime and GASNet libraries, and can thus run over
any of our supported networks, using the same 'upcrun' job spawner.
Currently five options, encompassing four distinct translators and
compilers, are supported:
- HTTP-based Berkeley UPC-to-C (BUPC) translator (default)
The 'upcc' compiler driver defaults to transparently
using our HTTP-based public Berkeley UPC-to-C translator for UPC compilation.
Provided your system will have an Internet connection during UPC compilation,
this is the easiest and quickest install to get started and requires no additional steps.
- Locally-built Berkeley UPC-to-C (BUPC) translator
Alternatively, you can download and install the
Berkeley UPC-to-C translator,
and configure the UPC Runtime to use your local build of the translator.
This allows you to compile UPC code without being connected to the
Internet, and may also result in slightly faster compilation times
than the default.
- Locally-built Clang-based UPC-to-C (CUPC2C) translator
You can download and install
clang-upc.
You will then configure the runtime to use the 'clang-upc2c'
source-to-source translator from the clang-upc package.
With this configuration, the Berkeley 'upcc' compiler driver uses
'clang-upc2c' to perform source-to-source translation.
- Locally-built Clang-UPC (CUPC) compiler
You can download and install
clang-upc.
You will then configure the runtime to use the 'clang-upc'
compiler from clang-upc.
With this configuration, the Berkeley 'upcc' compiler driver uses
'clang-upc' to compile UPC code.
This option differs from the previous one in that 'clang-upc'
compiles UPC directly to binary without source-to-source translation.
Also, 'clang-upc' only supports the process-per-UPC-thread model
(not the POSIX-thread-per-UPC-thread model).
- Locally-built GNU UPC (GUPC) compiler
You can download and install the GNU UPC compiler.
You will then configure the runtime to use your GNU UPC installation.
With this configuration, the Berkeley 'upcc' compiler driver uses
the GNU UPC 'gupc' compiler to compile UPC code.
Additionally, one can choose to build two or more of BUPC, CUPC2C, CUPC,
or GUPC and setup the 'upcc' driver to select a translator or
compiler based on compile-time arguments.
See INSTALL.TXT for more information.
Platform support for each option varies - see the documentation for each translator for details.
Supported platforms
The current release of Berkeley UPC has been tested and is known to work
on the following system configurations:
Platform Characteristic:
|
Tested/supported configurations
|
Network Hardware / API
|
SMP,
MPI 1.1 and higher,
Ethernet UDP,
OpenIB InfiniBand verbs,
Cray XC Aries,
Unified Communication X (EXPERIMENTAL),
OpenFabrics LibFabric (EXPERIMENTAL),
|
Operating Systems
|
Linux, macOS, Microsoft Windows (Cygwin or WSL), Solaris, FreeBSD, NetBSD, OpenBSD, various compute-node kernels
|
CPU / System Architecture
|
x86, x86-64, PowerPC, Cray XC series, Intel KNL, ARM, AARCH64, MIPS, SPARC v8+
|
C compiler
|
Gnu (gcc 3.0+), LLVM (clang 3.6+), Apple (Xcode 7.1+), Intel (icc 16+), PGI (pgcc 10.9+), IBM XL (xlc 13+), Cray (CCE 8.6+)
|
Most combinations of the platforms above are supported and functional, and
other unlisted platforms may work as well. See the GASNet README
for the specific combinations that we've personally tested. Many of the systems listed
above support both a vendor-specific C compiler and can also use gcc as the underlying C compiler -
we generally recommend the vendor C compiler for performance reasons.
Note: on some of these platforms, the Berkeley UPC runtime works, but the
Berkeley UPC-to-C translator does not.
In such a case, you'll likely want the default upcc configuration which uses our internet-based BUPC translator for building
UPC programs, or alternatively can consider one of the other UPC translation options.
See here for a list of platforms where a local install of
the Berkeley UPC translator is known to work.
We are interested in supporting Berkeley UPC on as wide a variety of parallel
systems as possible. If your system or network is not supported, and you are
willing to let us use your resources for development,
please contact us.
Licensing
The Berkeley UPC suite is comprised entirely of open source code. Different
licenses are used for different components, however:
- All original code in the UPC runtime uses a
BSD license.
- The Berkeley UPC-to-C translator is derived from the Open64 project code
(originally open-sourced by SGI), and is licensed under version 2 of the
GNU General Public License (GNU GPLv2).
For more information, see the LICENSE files in the source distributions.
Known bugs and limitations
-
The current release has removed support for the Cray Gemini network backend (for Cray XE and XK series systems),
and the PAMI network backend (for the BlueGene/Q system).
For users of these older machines, we recommend the use of a previous
release: Berkeley UPC release 2019.4.2.
-
Current releases have experimental support for the libfabric (ofi) network backend.
For users with Intel Omni-Path hardware, we still recommend the use of ofi-conduit in
Berkeley UPC release 2.28.0.
-
A list of known bugs and
limitations in the current implementation is kept in the Berkeley UPC User's Guide.
Feedback
If you encounter a bug, please go to our Bugzilla server and enter a new
bug report it if the issue is not already in our database.
You may also send email to our mailing list for UPC users:
We are interested in supporting the runtime on as wide a variety of parallel
systems as possible. If your system or network is not supported, and you are
willing to let us use your resources for development, please contact us.
We very much appreciate your feedback.
This page last modified on Friday, 16-Apr-2021 15:49:58 PDT