intercomm.h File Reference

#include "ezxml/ezxml.h"

Go to the source code of this file.

Data Structures

struct  IC_Program
struct  decomp_TREE
struct  IC_Desc
struct  IC_Region
struct  IC_Sched
struct  IC_XJDComp_node
struct  IC_XJDRgn_node
struct  IC_XJD

Typedefs

typedef decomp_TREE IC_Tree
typedef IC_XJDComp_node IC_XJDComponent
typedef IC_XJDRgn_node IC_XJDRegion

Enumerations

enum  { IC_COLUMN_MAJOR = 1, IC_ROW_MAJOR = 2 }

Functions

IC_Program * IC_Init (char *name, int tasks, int rank)
IC_Program * IC_Wait (char *name, int tasks)
int IC_Sync (IC_Program *myprog, IC_Program *prog)
IC_Desc * IC_Create_bdecomp_desc (int ndims, int *blocks, int *tasks, int count, int arrayOrder)
IC_Desc * IC_Create_ttable_desc (int *globals, int *locals, int *tasks, int count)
IC_Tree * IC_Create_bdecomp_tree ()
void IC_Section (IC_Tree *root, int dim, int count, int *indices)
void IC_Partition (IC_Tree *root, int dim, int *block, int count, int *indices)
IC_Desc * IC_Verify_bdecomp_tree (IC_Tree *root, int ndims, int *size, int *tasks, int count, int arrayOrder)
IC_Region * IC_Create_block_region (int ndims, int *lower, int *upper, int *stride)
IC_Region * IC_Create_enum_region (int *indices, int count)
IC_Sched * IC_Compute_schedule (IC_Program *myprog, IC_Program *prog, IC_Desc *desc, IC_Region **region_set, int set_size)
int IC_Send_TYPE (IC_Program *to, IC_Sched *sched, TYPE *data, int tag)
int IC_Recv_TYPE (IC_Program *from, IC_Sched *sched, TYPE *data, int tag)
void IC_Free_sched (IC_Sched *sched)
void IC_Free_region (IC_Region *region)
void IC_Free_desc (IC_Desc *desc)
void IC_Free_program (IC_Program *prog)
void IC_Quit (IC_Program *myprog)
void IC_Print_error (char *msg)
IC_XJD * IC_Initialize (char *pName, int rank, char *xjdname, int *status)
void IC_Register_region (IC_XJD *xjd, IC_Region **rgnset, int set_size, char *set_name, IC_Desc *desc, void *local_data, int *status)
void IC_Commit_region (IC_XJD *xjd, int *status)
int IC_Export (IC_XJD *xjd, char *rgnset_name)
int IC_Import (IC_XJD *xjd, char *rgnset_name)
int IC_BCast_Local_TYPE (IC_Program *to, TYPE *data, int nelems, int tag)
int IC_Recv_Local_TYPE (IC_Program *from, TYPE *data, int nelems, int tag)
int IC_BCast_Local (IC_XJD *xjd, char *rgnset_name, void *data, int nelems)
int IC_Recv_Local (IC_XJD *xjd, char *rgnset_name, void *data, int nelems)
void IC_Finalize (IC_XJD *xjd, int *icsts)


Detailed Description

This is the public interface of InterComm.

Author:
Christian Hansen (chansen@cs.umd.edu) Il-Chul Yoon (iyoon@cs.umd.edu) University of Maryland, College Park

Typedef Documentation

typedef struct decomp_TREE IC_Tree
 

A partial decomposition descriptor

typedef struct IC_XJDComp_node IC_XJDComponent
 

An XJD component descriptor encapsulating an InterComm program. Created dynamically based on XJD file during IC_Initialize.

typedef struct IC_XJDRgn_node IC_XJDRegion
 

An XJD region descriptor encapsulating an InterComm connection between programs. Created dynamically based on XJD file during IC_Initialize.


Enumeration Type Documentation

anonymous enum
 

Enumeration for column-major and row-major

Enumerator:
IC_COLUMN_MAJOR  specifying column major
IC_ROW_MAJOR  specifying row major


Function Documentation

int IC_BCast_Local (  IC_XJD *  xjd,
char *  rgnset_name,
void *  data,
int  nelems
) 
 

Parameters:
xjd the InterComm application descriptor for programs and regions
rgnset_name name of the region set
data the data to broadcast
nelems the data size, which is required since we cannot compute data size for local block
Returns:
status

int IC_BCast_Local_TYPE (  IC_Program *  to,
TYPE *  data,
int  nelems,
int  tag
) 
 

Broadcast a local array into all processes in other program. There is a broadcast call for each C TYPE (char, short, int, float, double).

  • int IC_BCast_Local_char(IC_Program* to, char* data, int nelems, int tag)
  • int IC_BCast_Local_short(IC_Program* to, short* data, int nelems, int tagt)
  • int IC_BCast_Local_int(IC_Program* to, int* data, int nelems, int tag)
  • int IC_BCast_Local_float(IC_Program* to, float* data, int nelems, int tag)
  • int IC_BCast_Local_double(IC_Program* to, double* data, int nelems, int tag)
    Parameters:
    to the receiving program
    data the array to broadcast
    nelems the number of elemens in the data
    tag a message tag
    Returns:
    status

void IC_Commit_region (  IC_XJD *  xjd,
int *  status
) 
 

Build communication schedule for all the regions in my program

Parameters:
xjd the InterComm application descriptor for programs and regions
status status, if negative, indicates an error

IC_Sched* IC_Compute_schedule (  IC_Program *  myprog,
IC_Program *  prog,
IC_Desc *  desc,
IC_Region **  region_set,
int  set_size
) 
 

Compute a schedule for the given regions

Parameters:
myprog a handle to this program
prog a handle to the other program
desc a decomposition descriptor
region_set a list of regions
set_size the number of regions
Returns:
the communication schedule

IC_Desc* IC_Create_bdecomp_desc (  int  ndims,
int *  blocks,
int *  tasks,
int  count,
int  arrayOrder
) 
 

Create a block decomposition

Parameters:
ndims the number of dimensions
blocks an array of block bound specifications
tasks the task assignments for each block
count the number of blocks
arrayOrder specify whether it is row major or column major
Returns:
the decomposition descriptor

IC_Tree* IC_Create_bdecomp_tree (   ) 
 

Allocate a partial decomposition

Returns:
the partial descriptor

IC_Region* IC_Create_block_region (  int  ndims,
int *  lower,
int *  upper,
int *  stride
) 
 

Allocate a block region structure

Parameters:
ndims the number of dimensions
lower the lower bounds
upper the upper bounds
stride the stride
Returns:
the array region

IC_Region* IC_Create_enum_region (  int *  indices,
int  count
) 
 

Allocate an enumeration region structure

Parameters:
indices a list of global indices
count the number of indices
Returns:
the array region

IC_Desc* IC_Create_ttable_desc (  int *  globals,
int *  locals,
int *  tasks,
int  count
) 
 

Create a translation table

Parameters:
globals a list of global indices
locals the local index for each global index
tasks the task assignment for each global index
count the number of global indices
Returns:
the decomposition descriptor

int IC_Export (  IC_XJD *  xjd,
char *  rgnset_name
) 
 

Export a region. This function does not need the destination program since it is described in the XJD file and the information becomes part of internal representation of programs and regions during the IC_Initialize.

Parameters:
xjd the InterComm application descriptor for programs and regions
rgnset_name name of the region set
Returns:
status

void IC_Finalize (  IC_XJD *  xjd,
int *  icsts
) 
 

Release the allocated memory for internal representation of programs and regions.

Parameters:
xjd the InterComm application descriptor for programs and regions
icsts status, if negative, indicates an error

void IC_Free_desc (  IC_Desc *  desc  ) 
 

Frees a descriptor

Parameters:
desc an array partitioning descriptor

void IC_Free_program (  IC_Program *  prog  ) 
 

Fress a program handle

Parameters:
prog a program handle

void IC_Free_region (  IC_Region *  region  ) 
 

Frees a region

Parameters:
region an array region

void IC_Free_sched (  IC_Sched *  sched  ) 
 

Frees a schedule

Parameters:
sched a communication schedule

int IC_Import (  IC_XJD *  xjd,
char *  rgnset_name
) 
 

Import a region. This function does not need the destination program since it is described in the XJD file and the information becomes part of internal representation of programs and regions during the IC_Initialize.

Parameters:
xjd the InterComm application descriptor for programs and regions
rgnset_name name of the region set
Returns:
status

IC_Program* IC_Init (  char *  name,
int  tasks,
int  rank
) 
 

Initialize the communication library

Parameters:
name a unique program name
tasks the number of tasks in this program
rank the rank of this task
Returns:
a handle for this program

IC_XJD* IC_Initialize (  char *  pName,
int  rank,
char *  xjdname,
int *  status
) 
 

This function initializes the underlying communication library and creates the internal representation of the programs and regions by parsing the given XML Job Description (XJD) file for further communication between the programs. Basically, this function encapsulates IC_Init, IC_Wait and IC_Sync.

Parameters:
pName my program name
rank my rank
xjdname XML Job Description (XJD) file name
status status, negative indicates an error
Returns:
a pointer to the IC_XJD datatype, which contains or will contain the program and region list.

void IC_Partition (  IC_Tree *  root,
int  dim,
int *  block,
int  count,
int *  indices
) 
 

Create a partition for a partial descriptor

Parameters:
root the partial descriptor
dim the dimension to partition
block the block to partition
count the number of partitions
indices the upper bounding index for each partition
Returns:
an array of partial descriptors which can then be partitioned further

void IC_Print_error (  char *  msg  ) 
 

Prints an error message for the last call that failed

Parameters:
msg a message that will be prepended to the internal error message

void IC_Quit (  IC_Program *  myprog  ) 
 

Frees up internal data structures and free the program handle for this program

Parameters:
myprog the handle for this program

int IC_Recv_Local (  IC_XJD *  xjd,
char *  rgnset_name,
void *  data,
int  nelems
) 
 

Receive an array broadcasted from rank-0 process of other program

Parameters:
xjd the InterComm application descriptor for programs and regions
rgnset_name name of the region set
data the data to broadcast
nelems the data size, which is required since we cannot compute data size for local block
Returns:
status

int IC_Recv_Local_TYPE (  IC_Program *  from,
TYPE *  data,
int  nelems,
int  tag
) 
 

Receive an array broadcasted from rank-0 process of other program. There is a receive call for each C TYPE (char, short, int, float, double).

  • int IC_Recv_Local_char(IC_Program* from, char* data, int nelems, int tag)
  • int IC_Recv_Local_short(IC_Program* from, short* data, int nelems, int tag)
  • int IC_Recv_Local_int(IC_Program* from, int* data, int nelems, int tag)
  • int IC_Recv_Local_float(IC_Program* from, float* data, int nelems, int tag)
  • int IC_Recv_Local_double(IC_Program* from, double* data, int nelems, int tag)
    Parameters:
    from the receiving program
    data the array to broadcast
    nelems the number of elemens in the data
    tag a message tag
    Returns:
    status

int IC_Recv_TYPE (  IC_Program *  from,
IC_Sched *  sched,
TYPE *  data,
int  tag
) 
 

Receive a region from a program. There is a receive call for each C TYPE (char, short, int, long, float, double).

  • int IC_Recv_char(IC_Program* from, IC_Sched* sched, char* data, int tag)
  • int IC_Recv_short(IC_Program* from, IC_Sched* sched, short* data, int tag)
  • int IC_Recv_int(IC_Program* from, IC_Sched* sched, int* data, int tag)
  • int IC_Recv_long(IC_Program* from, IC_Sched* sched, long* data, int tag)
  • int IC_Recv_float(IC_Program* from, IC_Sched* sched, float* data, int tag)
  • int IC_Recv_double(IC_Program* from, IC_Sched* sched, double* data, int tag)
    Parameters:
    from the sending program
    sched the communication schedule
    data the local portion of the global array
    tag a message tag
    Returns:
    status

void IC_Register_region (  IC_XJD *  xjd,
IC_Region **  rgnset,
int  set_size,
char *  set_name,
IC_Desc *  desc,
void *  local_data,
int *  status
) 
 

Register detailed information on a set of regions (a set of array blocks) into the internal program and region representation.

Parameters:
xjd the InterComm application descriptor for programs and regions
rgnset an array of regions describing the data to be communicated
set_size the number of of regions in the array
set_name name of the region set
desc the InterComm global array descriptor
local_data the pointer to the local data array
status status, if negative, indicates an error

void IC_Section (  IC_Tree *  root,
int  dim,
int  count,
int *  indices
) 
 

Create a partition for a partial descriptor

Parameters:
root the partial descriptor
dim the dimension to partition
count the number of partitions
indices the upper bounding index for each partition

int IC_Send_TYPE (  IC_Program *  to,
IC_Sched *  sched,
TYPE *  data,
int  tag
) 
 

Send a region to another program. There is a send call for each C TYPE (char, short, int, long, float, double).

  • int IC_Send_char(IC_Program* to, IC_Sched* sched, char* data, int tag)
  • int IC_Send_short(IC_Program* to, IC_Sched* sched, short* data, int tag)
  • int IC_Send_int(IC_Program* to, IC_Sched* sched, int* data, int tag)
  • int IC_Send_long(IC_Program* to, IC_Sched* sched, long* data, int tag)
  • int IC_Send_float(IC_Program* to, IC_Sched* sched, float* data, int tag)
  • int IC_Send_double(IC_Program* to, IC_Sched* sched, double* data, int tag)
    Parameters:
    to the receiving program
    sched the communication schedule
    data the local portion of the global array
    tag a message tag
    Returns:
    status

int IC_Sync (  IC_Program *  myprog,
IC_Program *  prog
) 
 

Synchronizes two programs

Parameters:
myprog a handle to this program
prog a handle to the other program
Returns:
status

IC_Desc* IC_Verify_bdecomp_tree (  IC_Tree *  root,
int  ndims,
int *  size,
int *  tasks,
int  count,
int  arrayOrder
) 
 

Verify a partial descriptor and generate a complete descriptor

Parameters:
root the partial descriptor
ndims the number of dimensions
size the size of the global array
tasks the task assignments for each block
count the number of blocks
arrayOrder array order
Returns:
the decomposition descriptor

IC_Program* IC_Wait (  char *  name,
int  tasks
) 
 

Contact another program

Parameters:
name the name of the other program (as given in its IC_Init call)
tasks the number of tasks in the other program
Returns:
a handle for the other program


Generated on Thu May 4 15:30:22 2006 for InterComm by  doxygen 1.4.6