skip to main content
OSTI.GOV title logo U.S. Department of Energy
Office of Scientific and Technical Information

Title: UPC++

Abstract

UPC++ is a Partitioned Global Address Space (PGAS) extension for C++, with three main objectives: 1) to provide an object-oriented PGAS programming model in the context of the popular C++ language; 2) to add useful parallel programming idioms unavailable in UPC, such as asynchronous remote function invocation and multidimensional arrays, to support complex scientific applications; 3) to offer an easy on-ramp to PGAS programming through interoperability with other existing parallel programming systems (e.g., MPI, OpenMP, CUDA). UPC++ includes two main features beyond UPC: 1) One of the major limitations of UPC in the context of DOE application is the relatively weak notion of multidimensional arrays, which it inherited from C. To remedy this problem in UPC++, we included a multidimensional domain and array library based on that of Titanium. Titanium's library is similar to Chapel's dense and strided domains, as both were inspired by the dense and strided regions and arrays in ZPL. 2) Another feature provided by UPC++ but not by UPC is remote function invocation, which is inspired by Phalanx, X10, Habanero-C, and C++11. The user may start an asynchronous remote function invocation with the following syntax: "async(place)(function, args...);". UPC++ provides two programming constructs for specifying dynamic dependenciesmore » among tasks: 1) event-driven execution as in Phalanx and Habanero-C; 2) finish-async as in X10. We implemented UPC++ with a "compiler-free" approach using C++ templates and runtime libraries. The UPC++ front-end consists of a set of C++ header files that enables the C++ compiler to "translate" UPC++ features in a user program to runtime library calls. In particular, we use templates and operator overloading to customize the behavior of UPC++ types. This software package has been replaced with UPCC++ V 1.0« less

Developers:
Release Date:
Project Type:
Open Source, Publicly Available Repository
Software Type:
Scientific
Licenses:
Other
Sponsoring Org.:
USDOE

Primary Award/Contract Number:
Other Award/Contract Number:
AC02-05CH11231
Code ID:
2804
Site Accession Number:
2014-095
Research Org.:
Lawrence Berkeley National Laboratory (LBNL), Berkeley, CA (United States)
Country of Origin:
United States

Citation Formats

Amir Kamil, Yili Zheng, and USDOE. UPC++. Computer software. https://www.osti.gov//servlets/purl/1542863. USDOE. 1 May. 2014. Web. doi:10.11578/dc.20171025.1487.
Amir Kamil, Yili Zheng, & USDOE. (2014, May 1). UPC++ [Computer software]. https://www.osti.gov//servlets/purl/1542863. https://doi.org/10.11578/dc.20171025.1487
Amir Kamil, Yili Zheng, and USDOE. UPC++. Computer software. May 1, 2014. https://www.osti.gov//servlets/purl/1542863. doi:https://doi.org/10.11578/dc.20171025.1487.
@misc{osti_1542863,
title = {UPC++},
author = {Amir Kamil, Yili Zheng and USDOE},
abstractNote = {UPC++ is a Partitioned Global Address Space (PGAS) extension for C++, with three main objectives: 1) to provide an object-oriented PGAS programming model in the context of the popular C++ language; 2) to add useful parallel programming idioms unavailable in UPC, such as asynchronous remote function invocation and multidimensional arrays, to support complex scientific applications; 3) to offer an easy on-ramp to PGAS programming through interoperability with other existing parallel programming systems (e.g., MPI, OpenMP, CUDA). UPC++ includes two main features beyond UPC: 1) One of the major limitations of UPC in the context of DOE application is the relatively weak notion of multidimensional arrays, which it inherited from C. To remedy this problem in UPC++, we included a multidimensional domain and array library based on that of Titanium. Titanium's library is similar to Chapel's dense and strided domains, as both were inspired by the dense and strided regions and arrays in ZPL. 2) Another feature provided by UPC++ but not by UPC is remote function invocation, which is inspired by Phalanx, X10, Habanero-C, and C++11. The user may start an asynchronous remote function invocation with the following syntax: "async(place)(function, args...);". UPC++ provides two programming constructs for specifying dynamic dependencies among tasks: 1) event-driven execution as in Phalanx and Habanero-C; 2) finish-async as in X10. We implemented UPC++ with a "compiler-free" approach using C++ templates and runtime libraries. The UPC++ front-end consists of a set of C++ header files that enables the C++ compiler to "translate" UPC++ features in a user program to runtime library calls. In particular, we use templates and operator overloading to customize the behavior of UPC++ types. This software package has been replaced with UPCC++ V 1.0},
url = {https://www.osti.gov//servlets/purl/1542863},
doi = {10.11578/dc.20171025.1487},
url = {https://www.osti.gov/biblio/1542863}, year = {Thu May 01 00:00:00 EDT 2014},
month = {Thu May 01 00:00:00 EDT 2014},
note =
}