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