File: CH3_Object_Model.md

package info (click to toggle)
mpich 5.0.0-1
  • links: PTS, VCS
  • area: main
  • in suites: experimental
  • size: 251,828 kB
  • sloc: ansic: 1,323,147; cpp: 82,869; f90: 72,420; javascript: 40,763; perl: 28,296; sh: 19,399; python: 16,191; xml: 14,418; makefile: 9,468; fortran: 8,046; java: 4,635; pascal: 352; asm: 324; ruby: 176; awk: 27; lisp: 19; php: 8; sed: 4
file content (38 lines) | stat: -rw-r--r-- 1,305 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# CH3 Object Model

This page exists to clarify the relationship between different objects
(structures and the like) in MPICH2. **Please update this page if you
see something incorrect or otherwise lacking.**

We just found an 
[old design doc](Process_Groups_and_Virtual_Connections.md)
that explains some of this in additional detail. Take it with a grain
of salt, because it was probably not updated along with the code as
time went on.

## Object types

  - `VC` - Virtual Connection
  - `PG` - Process Group
  - `VCRT` - Virtual Connection Reference Table
  - `comm` - Communicator
  - `CH` - the channel-specific portion of the VC

### `sock` Specific

  - `conn` - connection, this is a proxy for the underlying tcp stream

## Object relationships

There is exactly one PG per `MPI_COMM_WORLD`. That is, in a typical
MPI program, there is only a single `PG`. In the dynamic process case
(such as `MPI_Comm_spawn`) there will be one for each world.

A `VC` represents a logical communication path between a pair of MPI
processes. One endpoint is specified implicitly by which `PG`'s
`comm_world` "owns" the `VC` and the rank of the current process, while the
other endpoint is a (`PG,rank`) pair.

A `VCRT` holds pointers to various `VC`s. Each communicator has a `VCRT`.

TODO: Flesh this out more