Sandia National Laboratories
Download and Installation
User Interface
alphabetical list
category list

Docs & Examples
Bugs, Help, etc.


Bundle-Exchange-Compute (BEC) is a parallel programming model developed at Sandia National Labs, in collaboration with Syracuse University.
  • BEC supports virtual shared memory programming.
  • BEC includes an extension to C for shared variables, and a portable runtime library (BEC Lib).
  • Compatible with MPI: BEC code and MPI code can intermix.
  • Good application performance (compatible with MPI)
  • Easy to use (much easier than MPI): BEC programmers are free from explicit management of data distribution and locality, communication, and synchronization. BEC makes programming of complex unstructured communication patterns very easy.

Programming in BEC

A BEC program has shared variables and code sections that typically repeat the Bundle-Exchange-Compute phases. For example,
shared int A[10000], B[10000], C[10000];   /* globally shared data structures */

BEC_request(A[3]);     /* Shared data needs to be requested before use          */
BEC_request(B[8]);      /* Such requests will be Bundled by the runtime library  */
BEC_exchange();        /* Exchange bundled requests globally                    */
C[10] = A[3]+B[8];        /* After exchange, compute C[10] using A[3] and B[8] as if they were local.
                                             Shared location C[10] will be updated in the next round of global exchange */

Using BEC
  • BEC = (C language extension for shared variables) + (BEC Lib)
  • BEC Lib can be used with or without the language extension. 
  • BEC can be used alone, or as enhancements to MPI and other programming languages/models. 
  • BEC is readily portable to any machine (including PC) with a C/C++ compiler, Unix/Linux, and a message-passing library such as MPI.

Image placeholder

Sandia National Labs

Image placeholder

Syracuse University

Principal Investigator
  Zhaofang Wen

Tech Support
Junfeng Wu

Related Links
XMT (PRAM on a chip)
Co-Array Fortran
Global Arrays