  One-sided communication is a useful paradigm for irregular parallel
applications, but most one-sided programming environments, including MPI's
one-sided interface and PGAS programming languages, lack application level
libraries to support these applications. We present the Berkeley Container
Library, a set of generic, cross-platform, high-performance data structures for
irregular applications, including queues, hash tables, Bloom filters and more.
BCL is written in C++ using an internal DSL called the BCL Core that provides
one-sided communication primitives such as remote get and remote put
operations. The BCL Core has backends for MPI, OpenSHMEM, GASNet-EX, and UPC++,
allowing BCL data structures to be used natively in programs written using any
of these programming environments. Along with our internal DSL, we present the
BCL ObjectContainer abstraction, which allows BCL data structures to
transparently serialize complex data types while maintaining efficiency for
primitive types. We also introduce the set of BCL data structures and evaluate
their performance across a number of high-performance computing systems,
demonstrating that BCL programs are competitive with hand-optimized code, even
while hiding many of the underlying details of message aggregation,
serialization, and synchronization.
