internal_config.py 2.2 KB
Newer Older
Martin Reinecke's avatar
Martin Reinecke committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
#
# Copyright(C) 2019 Max-Planck-Society
#
# NIFTy is being developed at the Max-Planck-Institut fuer Astrophysik.

Martin Reinecke's avatar
Martin Reinecke committed
18
19
20
21
22

# Internal configuration switches, typically for experimental features.
# Leave unchanged unless you know what you are doing!

def parallelization_scheme():
23
    """Sets the MPI parallelization scheme according to the
24
    environment variable `NIFTY_MPI_SCHEME`.
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

    If not set, "Standard" parallelization is used.

    Possible Values:
    ---------------

    "Standard": Fields are distributed over all MPI instances
                along their first axis.
                This mode is useful if the fields involved are
                too large for the memory of a single machine,
                otherwise it is not recommended.

    "Samples":  :class:`MetricGaussianKL_MPI` becomes available.
                The :class:`MetricGaussianKL` usually has
                multiple samples for which it needs to perform
                the same calculations.
                :class:`MetricGaussianKL_MPI` distributes these
                calculations to the MPI instances by sample.
                This mode is useful when the "Standard" mode
                is not needed and the calculations w.r.t. each
                sample take long w.r.t. the MPI communication
                overhead introduced by the parallelization.

    "None":     Disables all parallelization.
    """
    import os
51
    scheme = os.getenv("NIFTY_MPI_SCHEME", default="Standard")
52
53
54
    if scheme not in ["Standard", "Samples", "None"]:
        raise ValueError("Unrecognized MPI parallelization scheme!")
    return scheme