[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