So, you probably thought that "Message Passing" and "Shared Memory" were two completely different beasts.
And maybe you never even considered using shared memory to communicate between one process on your PC and another on your Mac Powerbook and a few more on your SMP Sun workstation. Maybe you thought that you needed to start every parallel or distributed computing project by figuring out how the processes would be situated relative to each other, and how many threads to run where, or whether you would use shared memory or message passing or sockets or SOAP or whatever to communicate between them. There was actually good reason for thinking that way, but ...
Cooperative Data Sharing (CDS) changes all that.
CDS is a family of flexible, efficient, and portable communication APIs that blur the line between shared memory and message passing, and between threads and processes, without throwing away valuable concepts like latency tolerance and demand-driven execution. It is built on just a few basic communication primitives, a "get" and "put", which together with specially designed dynamic memory allocation and data translation routines, can do everything from message passing to shared memory and very much in between. You write your program based on what it needs to do, instead of on what your interface lets you do.
BCR is one "flavor" of CDS. It's here today. And it's open source.
This is essentially the same flavor of CDS that was designed at NASA Ames Research Center, now implemented and offered by Elepar. Currently available for C language programming, Linux (and similar) OS, tested on Pentium-based systems (incuding SMP), PowerPC-based systems (Mac Powerbook), and Sparc-based systems (Sun) connected with ethernet (using UDP/IP). You want it to do more, to run more places, to be even more useful and efficient? Help to make it happen.
For distributed computing, clusters, Grids, parallel machines, and P2P.
The BCR flavor of Cooperative Data Sharing
(CDS) is a scalable, portable, flexible C-based API and daemon for initiating
and communicating between computational entities (processes/threads) in
uniprocessor, multiprocessor, and heterogeneous platforms. Will automatically
invoke your favorite debugger, and comes with complete man pages.