File: frameworks.rst

package info (click to toggle)
openmpi 5.0.8-4
  • links: PTS, VCS
  • area: main
  • in suites:
  • size: 201,684 kB
  • sloc: ansic: 613,078; makefile: 42,353; sh: 11,194; javascript: 9,244; f90: 7,052; java: 6,404; perl: 5,179; python: 1,859; lex: 740; fortran: 61; cpp: 20; tcl: 12
file content (142 lines) | stat: -rw-r--r-- 5,510 bytes parent folder | download | duplicates (10)
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
.. _label-frameworks:

Internal frameworks
===================

The Modular Component Architecture (MCA) is the backbone of Open MPI
-- most services and functionality are implemented through MCA
components.

MPI layer frameworks
--------------------

Here is a list of all the component frameworks in the MPI layer of
Open MPI:

* ``bml``: BTL management layer
* ``coll``: MPI collective algorithms
* ``fbtl``: point to point file byte transfer layer: abstraction for
  individual read: collective read and write operations for MPI I/O
* ``fcoll``: collective file system functions for MPI I/O
* ``fs``: file system functions for MPI I/O
* ``hook``: Generic hooks into Open MPI
* ``io``: MPI I/O
* ``mtl``: Matching transport layer, used for MPI point-to-point
  messages on some types of networks
* ``op``: Back end computations for intrinsic MPI_Op operators
* ``osc``: MPI one-sided communications
* ``pml``: MPI point-to-point management layer
* ``sharedfp``: shared file pointer operations for MPI I/O
* ``topo``: MPI topology routines
* ``vprotocol``: Protocols for the "v" PML

OpenSHMEM component frameworks
------------------------------

* ``atomic``: OpenSHMEM atomic operations
* ``memheap``: OpenSHMEM memory allocators that support the
  PGAS memory model
* ``scoll``: OpenSHMEM collective operations
* ``spml``: OpenSHMEM "pml-like" layer: supports one-sided,
  point-to-point operations
* ``sshmem``: OpenSHMEM shared memory backing facility

Miscellaneous frameworks
------------------------

* ``allocator``: Memory allocator
* ``backtrace``: Debugging call stack backtrace support
* ``btl``: Point-to-point Byte Transfer Layer
* ``dl``: Dynamic loading library interface
* ``hwloc``: Hardware locality (hwloc) versioning support
* ``if``: OS IP interface support
* ``installdirs``: Installation directory relocation services
* ``memchecker``: Run-time memory checking
* ``memcpy``: Memory copy support
* ``memory``: Memory management hooks
* ``mpool``: Memory pooling
* ``patcher``: Symbol patcher hooks
* ``pmix``: Process management interface (exascale)
* ``rcache``: Memory registration cache
* ``reachable``: Network reachability determination
* ``shmem``: Shared memory support (NOT related to OpenSHMEM)
* ``smsc``: Shared memory single-copy support
* ``threads``: OS and userspace thread support
* ``timer``: High-resolution timers

Framework notes
---------------

Each framework typically has one or more components that are used at
run-time.  For example, the ``btl`` framework is used by the MPI layer
to send bytes across different types underlying networks.  The ``tcp``
``btl``, for example, sends messages across TCP-based networks; the
``ucx`` ``pml`` sends messages across InfiniBand-based networks.

MCA parameter notes
-------------------

Each component typically has some tunable parameters that can be
changed at run-time.  Use the :ref:`ompi_info(1) <man1-ompi_info>`
command to check a component to see what its tunable parameters are.
For example:

.. code-block:: sh

   shell$ ompi_info --param btl tcp

shows some of the parameters (and default values) for the ``tcp`` ``btl``
component (use ``--all`` or ``--level 9`` to show *all* the parameters).

Note that ``ompi_info`` (without ``--all`` or a specified level) only
shows a small number a component's MCA parameters by default.  Each
MCA parameter has a "level" value from 1 to 9, corresponding to the
MPI-3 MPI_T tool interface levels.  :ref:`See the LEVELS section in
the ompi_info(1) man page <man1-ompi_info-levels>` for an explanation
of the levels and how they correspond to Open MPI's code.

Here's rules of thumb to keep in mind when using Open MPI's levels:

* Levels 1-3:

  * These levels should contain only a few MCA parameters.
  * Generally, only put MCA parameters in these levels that matter to
    users who just need to *run* Open MPI applications (and don't
    know/care anything about MPI).  Examples (these are not
    comprehensive):

    * Selection of which network interfaces to use.
    * Selection of which MCA components to use.
    * Selective disabling of warning messages (e.g., show warning
      message XYZ unless a specific MCA parameter is set, which
      disables showing that warning message).
    * Enabling additional stderr logging verbosity.  This allows a
      user to run with this logging enabled, and then use that output
      to get technical assistance.

* Levels 4-6:

  * These levels should contain any other MCA parameters that are
    useful to expose to end users.
  * There is an expectation that "power users" will utilize these MCA
    parameters |mdash| e.g., those who are trying to tune the system
    and extract more performance.
  * Here's some examples of MCA parameters suitable for these levels
    (these are not comprehensive):

    * When you could have hard-coded a constant size of a resource
      (e.g., a resource pool size or buffer length), make it an MCA
      parameter instead.
    * When there are multiple different algorithms available for a
      particular operation, code them all up and provide an MCA
      parameter to let the user select between them.

* Levels 7-9:

  * Put any other MCA parameters here.
  * It's ok for these MCA parameters to be esoteric and only relevant
    to deep magic / the internals of Open MPI.
  * There is little expectation of users using these MCA parameters.

See :ref:`this section <label-running-setting-mca-param-values>` for
details on how to set MCA parameters at run time.