Data Reorg Meeting notes
March 10, 2000, Atlanta, GA
Attendees:
Tony Skjellum - MSTI
Nathan Doss - Lockheed
Jon Greene - Mercury Computer Systems
Steve Paavola - SKY Computers
Dennis Cottel - SPAWAR
We are establishing some terminology to be used in the documentation:
"Target Communications Library" means the communications library being used by the DRI implementation
"Core DRI Functions" means DRI functions that don't have any Target Communications Library dependencies
DRI function names in MPI obey MPI capatilaztion fules with the first letter of the name (after DRI_) capatilized, remaining letter in lower case.
Missing functions: DRI_Init, DRI_Finalize
In MPI, DRI_Init must be called AFTER MPI_Init, DRI_Finalize must be called BEFORE MPI_Finalize. In MPI/RT, there likely won't be a separate DRI_Init/Finalize.
We went through a sample C implementation targeting MPI as the Target Communications Library.
dri_global_data_create
----------------------------
int dri_globabl_data_create (int ndims, int dimsizes[], MPI_Datatype dataspec, DRI_Global_data *gdo)
dimsizes are in elements, eg. number of dataspecs.
Output fills in a handle to an opaque object.
dri_group_create
----------------------
This function is not needed in MPI (or MPI/RT) because the base library has an equivalent function. In MPI, the DRI_Group is an MPI communicator. In MPI/RT, it is a process group.
While discussing this function, it was determined that the description of procs in the meta API is incorrect. procs should actually be an array of implementation dependent objects describing the processes.
dri_group_get_rank
------------------------
Maps to MPI_Get_rank (or MPIRT_Get_rank).
dri_overlap_create
-----------------------
This is a "core" function - no MPI symantics.
int DRI_Overlap_create(DRI_Overlap ovr_type, int num_pos, DRI_Overlap *overlap)
There was a discussion of what DRI_OVERLAP_PAD_REPLICATED means. We decided that it means to replicate the last element of the local data, not the last num_pos elements of the local data as the current description might indicate.
The wording of each overlap type needs to be worked to aid understanding.
Pre-defined overlap:
DRI_NO_OVERLAP - overlap with num_pos = 0
dri_distspec_block_create
dri_distspec_blockcyclic_create
---------------------------------------
int DRI_Partition_block_create(int minsz, int mod, int lov, int rov, DRI_Partition *partspec)
int DRI_Partition_blockcyclic_create(int lov, int rov, int blksz, DRI_Partition *partspec)
int DRI_Partition_whole_create(int lov, int rov, DRI_Partition *partspec)
Special pre-defined partitions:
DRI_PARTITON_WHOLE - whole partition, truncate edges
DRI_PARTITION_BLOCK - divide approximately evenly among processes, truncate edges
DRI_PARTITION_CYCLIC - block cyclic with mod = 1, truncate edges
dri_distribution_create
----------------------------
int DRI_Distribution_create (DRI_Global_data gdo, MPI_Communicator comm, int group_dims[], DRI_Partition partition[], DRI_Layout layout, DRI_Distribution *dist)
The number of elements in group_dims and partition is the dimensionality of gdo.
Change DRI_LAYOUT_PACKED_xxx description to have the LEFTMOST index change most rapidly.
We've defined 2 and 3 dimensions. Addition dimensions can be added by extending the names in the obvious way.
Propose adding DRI_LAYOUT_CONTIGUOUS_n where n is the dimension number to make contiguous. The argument is that for most applications, the order of the remaining dimensions is not important.
dri_dist_get_numblocks
-----------------------------
int DRI_Dist_get_numblocks(DRI_Distribution dist)
dri_dist_get_block_info
---------------------------
int DRI_Dist_get_block_info(DRI_Distribution dist, int block_num, DRI_Block_info *blockinfo)
blockinfo is now INOUT - the user is responsible for allocating the memory which is filled in.
The dims array is of size MAX_DIMS.
dri_dist_set_block_info
-----------------------------
int DRI_Dist_set_block_info(DRI_Distribution *dist, int block_num, DRI_Block_info blockinfo)
The only parameters in blockinfo that can be changed are first_offset and the strides. The other parameters will be ignored.