|
Packit Service |
c5cf8c |
MPI
|
|
Packit Service |
c5cf8c |
- spawn/attach
|
|
Packit Service |
c5cf8c |
- communicators
|
|
Packit Service |
c5cf8c |
- pt2pt requests
|
|
Packit Service |
c5cf8c |
- collective
|
|
Packit Service |
c5cf8c |
- RMA
|
|
Packit Service |
c5cf8c |
- error (handling, FT, reporting)
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
MPID
|
|
Packit Service |
c5cf8c |
- messages
|
|
Packit Service |
c5cf8c |
- tradition MPI message
|
|
Packit Service |
c5cf8c |
- one-sided operations
|
|
Packit Service |
c5cf8c |
- control?
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
- streams
|
|
Packit Service |
c5cf8c |
- process management (via BNR)
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
Communication Methods
|
|
Packit Service |
c5cf8c |
- TCP
|
|
Packit Service |
c5cf8c |
- VIA
|
|
Packit Service |
c5cf8c |
- Shared Memory
|
|
Packit Service |
c5cf8c |
- Loopback
|
|
Packit Service |
c5cf8c |
- IMPI
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
===============================================================================
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
MPI layer
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
--------------------
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
Operations
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
- point-to-point
|
|
Packit Service |
c5cf8c |
- requests
|
|
Packit Service |
c5cf8c |
- datatypes
|
|
Packit Service |
c5cf8c |
- communicators
|
|
Packit Service |
c5cf8c |
- status
|
|
Packit Service |
c5cf8c |
- errors
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
- collective
|
|
Packit Service |
c5cf8c |
- datatypes
|
|
Packit Service |
c5cf8c |
- communicators
|
|
Packit Service |
c5cf8c |
- errors
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
- process management
|
|
Packit Service |
c5cf8c |
- communicators
|
|
Packit Service |
c5cf8c |
- info
|
|
Packit Service |
c5cf8c |
- errors
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
- RMA
|
|
Packit Service |
c5cf8c |
- datatypes
|
|
Packit Service |
c5cf8c |
- windows
|
|
Packit Service |
c5cf8c |
- communicators
|
|
Packit Service |
c5cf8c |
- groups
|
|
Packit Service |
c5cf8c |
- epoch
|
|
Packit Service |
c5cf8c |
- errors
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
- I/O
|
|
Packit Service |
c5cf8c |
- depends on
|
|
Packit Service |
c5cf8c |
- files
|
|
Packit Service |
c5cf8c |
- datatypes
|
|
Packit Service |
c5cf8c |
- requests
|
|
Packit Service |
c5cf8c |
- info
|
|
Packit Service |
c5cf8c |
- status
|
|
Packit Service |
c5cf8c |
- errors
|
|
Packit Service |
c5cf8c |
* implemented via ROMIO
|
|
Packit Service |
c5cf8c |
- dependent only on MPI functions
|
|
Packit Service |
c5cf8c |
- future enhancements may use low-level interfaces
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
- topology
|
|
Packit Service |
c5cf8c |
- communicators
|
|
Packit Service |
c5cf8c |
- errors
|
|
Packit Service |
c5cf8c |
* can be implemented entirely at the MPI layer
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
- generalized requests
|
|
Packit Service |
c5cf8c |
- errors
|
|
Packit Service |
c5cf8c |
* can be implemented entirely at the MPI layer
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
--------------------
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
Structures
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
- requests
|
|
Packit Service |
c5cf8c |
- datatypes
|
|
Packit Service |
c5cf8c |
- communicators
|
|
Packit Service |
c5cf8c |
- groups
|
|
Packit Service |
c5cf8c |
- groups
|
|
Packit Service |
c5cf8c |
* are groups modified or augmented by low layers?
|
|
Packit Service |
c5cf8c |
- windows
|
|
Packit Service |
c5cf8c |
- files
|
|
Packit Service |
c5cf8c |
* defined and implemented via ROMIO
|
|
Packit Service |
c5cf8c |
- future enhancements may require access lower layers
|
|
Packit Service |
c5cf8c |
- status
|
|
Packit Service |
c5cf8c |
- errors
|
|
Packit Service |
c5cf8c |
- attributes
|
|
Packit Service |
c5cf8c |
* can be defined and operations implemented entirely at the MPI layer
|
|
Packit Service |
c5cf8c |
- communicator
|
|
Packit Service |
c5cf8c |
- datatypes
|
|
Packit Service |
c5cf8c |
- windows
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
- info
|
|
Packit Service |
c5cf8c |
* can be defined and operations implemented entirely at the MPI layer
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
===============================================================================
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
MPID
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
--------------------
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
Operations
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
- point-to-point
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
- collective operations
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
- process management
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
- RMA
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
- generalized requests
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
Structures
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
--------------------
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
Concepts
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
- MPI buffer movement (moving buffers defined by an address, count and
|
|
Packit Service |
c5cf8c |
datatype)
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
- internal buffer management
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
- Connection management
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
- virtual connection structures
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
- low-level connnection management (sockets, etc.) should be handled
|
|
Packit Service |
c5cf8c |
entirely by the device and probably driven by a state machine
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
===============================================================================
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
Multi-method design
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
--------------------
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
Device-level objects
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
- group
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
- data structures
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
- methods
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
- set_connection(group, rank, vc_ptr) - associate pointer to virtual
|
|
Packit Service |
c5cf8c |
connection structure with a (group,rank)
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
- get_connection(group, rank) - returns pointer to virtual connection
|
|
Packit Service |
c5cf8c |
structure associated with (group,rank)
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
- communicators
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
- data structures
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
- group
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
- methods
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
- set_connection(dcomm, rank, vc_ptr) - associate pointer to virtual
|
|
Packit Service |
c5cf8c |
connection structure with a (dcomm,rank)
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
- get_connection(dcomm, rank) - returns pointer to virtual connection
|
|
Packit Service |
c5cf8c |
structure associated with (dcomm,rank)
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
- virtual connections
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
- alloc() - returns a pointer to a virtual connection structure
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
- add_ref(vc) - increments the reference count (atomically)
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
- release() - decrements the reference count; if the reference count reaches
|
|
Packit Service |
c5cf8c |
zero, the structure is freed
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
NOTE: It may be useful to be able to locate a virtual connection based on a
|
|
Packit Service |
c5cf8c |
process group ID and rank, in part so we can detect when multiple virtual
|
|
Packit Service |
c5cf8c |
connections might be formed between a pair of processes.
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
can connect/accept be called multiple times between a set of processes?
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
--------------------
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
Method-level functions
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
Method descriptors are strings that are used to describe the capabilities of
|
|
Packit Service |
c5cf8c |
the methods. These descriptors can then be used to determine if two processes
|
|
Packit Service |
c5cf8c |
miight be capable of "talking" using the method in question. We say "might be
|
|
Packit Service |
c5cf8c |
capable" because in the case of a method like VIA, it may be impossible provide
|
|
Packit Service |
c5cf8c |
enough information in the descriptor to determine in two processes can talk.
|
|
Packit Service |
c5cf8c |
It may be necessary to simply attempt to form the connection. This implies
|
|
Packit Service |
c5cf8c |
that binding to a particular protocol may need to be deferred until we are
|
|
Packit Service |
c5cf8c |
ready to form a real connection. However, some methods, such as shared memory,
|
|
Packit Service |
c5cf8c |
can provide enough information and thus can be bound immediately.
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
- query/get_descriptor()
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
- match_descriptors()
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
===============================================================================
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
MPI_Init()
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
- create basic datatypes
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
MPIR_Datatype_init()
|
|
Packit Service |
c5cf8c |
{
|
|
Packit Service |
c5cf8c |
foreach dt (all basic datatypes)
|
|
Packit Service |
c5cf8c |
{
|
|
Packit Service |
c5cf8c |
MPID_Datatype_init(dt, ...)
|
|
Packit Service |
c5cf8c |
}
|
|
Packit Service |
c5cf8c |
}
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
- initialize device
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
- BNR initialization
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
BNR_Init()
|
|
Packit Service |
c5cf8c |
BNR_Get_group(&my_bnr_group)
|
|
Packit Service |
c5cf8c |
BNR_Get_size(my_bnr_group, &size)
|
|
Packit Service |
c5cf8c |
BNR_Get_rank(my_bnr_group, &rank)
|
|
Packit Service |
c5cf8c |
BNR_Get_parent(&parent_bnr_group)
|
|
Packit Service |
c5cf8c |
BNR_Merge(my_bnr_group, parent_bnr_group, &inter_bnr_group)
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
- loop through methods
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
- initialize method
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
- query for descriptor of method's capabilities
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
Q: what about dymanicly loaded methods? do they have to be initialized now
|
|
Packit Service |
c5cf8c |
or can they be added later?
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
- publish capabilities of all known methods
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
- initialize AQ, buffer management, etc.
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
- establish MPI_COMM_WORLD
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
- create MPI_GROUP_WORLD (internal) from BNR my_group, etc.
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
stores BNR info in group structure
|
|
Packit Service |
c5cf8c |
allocates virtual connection structures
|
|
Packit Service |
c5cf8c |
initializes virtual connections to stubs
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
- create MPI_COMM_WORLD from MPI_GROUP_WORLD
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
- establish inter-communicator with parent (if parent exists)
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
- create inter_group from inter_bnr_group
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
- create inter-communicator from inter_group
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
- create inter_group from inter_bnr_gorup
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
- create inter-communicator from inter_group
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
MPI_Spawn()
|
|
Packit Service |
c5cf8c |
{
|
|
Packit Service |
c5cf8c |
BNR_Open_group(my_bnr_group, &new_bnr_group)
|
|
Packit Service |
c5cf8c |
BNR_Spawn(remote_bnr_group, N, ..., func)
|
|
Packit Service |
c5cf8c |
BNR_Close(remote_bnr_group)
|
|
Packit Service |
c5cf8c |
BNR_Merge(my_bnr_group, remote_bnr_group, &inter_bnr_group);
|
|
Packit Service |
c5cf8c |
}
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
need a BNR_Group_ID which is globally unique in order to implement MPI_Connect/Attach
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
------------------------------------------------------------------------
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
Structures that cross layers
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
- many of the information structures that are passed through the layers contain
|
|
Packit Service |
c5cf8c |
data sections from multiple layers
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
- ne option is to include device (and method) include files in the MPICH layer
|
|
Packit Service |
c5cf8c |
include file. Rob and Brian feel this would be bad.
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
- David suggests that the structure definitions be supplied by the device
|
|
Packit Service |
c5cf8c |
header files and that method specific information be included in those
|
|
Packit Service |
c5cf8c |
definition using unions. Rob and Brian feel this is ugly (from a software
|
|
Packit Service |
c5cf8c |
engineering standpoint).
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
- Rob and Brian suggest having each layer define their own portion of the
|
|
Packit Service |
c5cf8c |
structure. The definitions of the higher layers are known to the lower
|
|
Packit Service |
c5cf8c |
layers, but not vice versa. To increase cache locality and reduce memory
|
|
Packit Service |
c5cf8c |
allocation, the device (and methods) report the amount of space they need in
|
|
Packit Service |
c5cf8c |
these structures so that the highest layer can allocate sufficient space.
|
|
Packit Service |
c5cf8c |
pointer arithmatic, etc.
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
Virtual connection
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
- used by MM implementation to allow late binding to a method
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
this implies that the VC contains a pointer to either the function pointer
|
|
Packit Service |
c5cf8c |
table for the method to which it is bound or the function pointer to table to
|
|
Packit Service |
c5cf8c |
a set of functions that perform the binding to such a method
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
- one-to-one correspondence between a virtual connection and a real connection
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
- Contains
|
|
Packit Service |
c5cf8c |
- state of binding
|
|
Packit Service |
c5cf8c |
- method specific information
|
|
Packit Service |
c5cf8c |
- function pointer table?
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
----------
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
Communicators
|
|
Packit Service |
c5cf8c |
- Contains
|
|
Packit Service |
c5cf8c |
- communication group
|
|
Packit Service |
c5cf8c |
- local group (inter-communicator only)
|
|
Packit Service |
c5cf8c |
- send and receive context IDs - same for intra-communicator
|
|
Packit Service |
c5cf8c |
- attributes
|
|
Packit Service |
c5cf8c |
- reference count
|
|
Packit Service |
c5cf8c |
- error handlers
|
|
Packit Service |
c5cf8c |
- device specific information (needed for MPICH-G2)
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
----------
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
Groups
|
|
Packit Service |
c5cf8c |
- Contains
|
|
Packit Service |
c5cf8c |
- virtual connection table
|
|
Packit Service |
c5cf8c |
- my rank
|
|
Packit Service |
c5cf8c |
- reference count
|
|
Packit Service |
c5cf8c |
- device specific information (???)
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
----------
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
Requests
|
|
Packit Service |
c5cf8c |
- probably allocated and partially initialized above ADI
|
|
Packit Service |
c5cf8c |
- initialization complete by device/method
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
- Request contains
|
|
Packit Service |
c5cf8c |
- Immutable after initialization
|
|
Packit Service |
c5cf8c |
- type of request
|
|
Packit Service |
c5cf8c |
- persistent request flag
|
|
Packit Service |
c5cf8c |
- send, bsend, rsend, ssend, recv, generalized
|
|
Packit Service |
c5cf8c |
- buffer
|
|
Packit Service |
c5cf8c |
- count
|
|
Packit Service |
c5cf8c |
- datatype
|
|
Packit Service |
c5cf8c |
- rank (src or dest depending on type of request)
|
|
Packit Service |
c5cf8c |
- tag
|
|
Packit Service |
c5cf8c |
- comm
|
|
Packit Service |
c5cf8c |
----------
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
Connection resolution
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
- needs to talk to with BNR
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
----------
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
Communication agent
|