[patch] distributed user-storage, setup_assign

Jules Bergmann jules at codesourcery.com
Fri Sep 16 20:04:20 UTC 2005


This patch adds initial support for distributed user-storage, along with 
unit tests.  It is possible to create a distributed block that can be 
admitted/released. When creating a block, each processor supplies a 
pointer to memory large enough for the subblock they own.

Some of the Chained_par_assign code that built MPI datatypes assumed 
that the data address would not change between when the send/recv lists 
are constructed and when they are executed.  For single statement 
assignments 'A = B', this is true.  However, for early-bound assignments 
(using Setup_assign, also in this patch) of views with user-storage, it 
is possible that address can change in between buiding the lists and 
executing them.  To address this, lists are now built relative to the 
subblock's data pointer, and then offset at execution time.

This patch includes a Setup_assign object which allows expressions to be 
bound early and executed later:

	Setup_assign expr(A, B + C);	// prebind A = B + C

	...

	expr();				// execute A = B + C

For serial expressions, not a lot of early binding is done.  For 
parallel expressions, the maps are examined to determine if the 
expression is simple or requires communication.  If the expr requires 
communication, any necessary setup is done during early binding.

Finally, this patch includes some setup work for mappings that can 
either be global or local, depending on their context.  An example of 
where this might be used is for the generator block returned from the 
ramp function.

This fixes a small number of FIXMEs and moves two into the tracker. 
Issues were created for Distributed_block::get/put and more efficient 
admit/release data copy (#59 and #60).

				-- Jules
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: dar.diff
URL: <http://sourcerytools.com/pipermail/vsipl++/attachments/20050916/f573932d/attachment.ksh>


More information about the vsipl++ mailing list