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.