Environment
Launching MPI programs
MPI.mpiexec
— Functionmpiexec(fn)
A wrapper function for the MPI launcher executable. Calls fn(cmd)
, where cmd
is a Cmd
object of the MPI launcher.
Environment Variables
The behaviour of mpiexec
can be controlled by the following environment variables:
JULIA_MPIEXEC
: the name or path of the launcher executable (set at compile time).JULIA_MPIEXEC_ARGS
: additional arguments that are passed to the launcher. These are space seperated, supporting the same quoting rules as JuliaCmd
objects. These can be modified at run time.
Usage
julia> mpiexec(cmd -> run(`$cmd -n 3 echo hello world`));
hello world
hello world
hello world
MPI.install_mpiexecjl
— FunctionMPI.install_mpiexecjl(; command::String = "mpiexecjl",
destdir::String = joinpath(DEPOT_PATH[1], "bin"),
force::Bool = false, verbose::Bool = true)
Install the mpiexec
wrapper to destdir
directory, with filename command
. Set force
to true
to overwrite an existing destination file with the same path. If verbose
is true
, the installation prints information about the progress of the process.
Enums
MPI.ThreadLevel
— TypeThreadLevel
An Enum denoting the level of threading support in the current process:
MPI.THREAD_SINGLE
: Only one thread will execute.MPI.THREAD_FUNNELED
: The process may be multi-threaded, but the application must ensure that only the main thread makes MPI calls. SeeIs_thread_main
.MPI.THREAD_SERIALIZED
: The process may be multi-threaded, and multiple threads may make MPI calls, but only one at a time (i.e. all MPI calls are serialized).MPI.THREAD_MULTIPLE
: Multiple threads may call MPI, with no restrictions.
See also
Functions
MPI.Abort
— FunctionAbort(comm::Comm, errcode::Integer)
Make a “best attempt” to abort all tasks in the group of comm
. This function does not require that the invoking environment take any action with the error code. However, a Unix or POSIX environment should handle this as a return errorcode from the main program.
External links
MPI.Init
— FunctionInit(;finalize_atexit=true)
Initialize MPI in the current process, and if finalize_atexit
is true and adds an atexit
hook to call MPI.Finalize
if it hasn't already been called.
All MPI programs must contain exactly one call to MPI.Init
or MPI.Init_thread
. In particular, note that it is not valid to call MPI.Init
or MPI.Init_thread
again after calling MPI.Finalize
.
The only MPI functions that may be called before MPI.Init
/MPI.Init_thread
are MPI.Initialized
and MPI.Finalized
.
External links
MPI.Init_thread
— FunctionInit_thread(required::ThreadLevel; finalize_atexit=true)
Initialize MPI and the MPI thread environment in the current process, and if finalize_atexit
is true and adds an atexit
hook to call MPI.Finalize
if it hasn't already been called. The argument specifies the required level of threading support, see ThreadLevel
.
The function will return the provided ThreadLevel
, and values may be compared via inequalities, i.e.
provided = Init_thread(required)
@assert provided >= required
All MPI programs must contain exactly one call to MPI.Init
or MPI.Init_thread
. In particular, note that it is not valid to call MPI.Init
or MPI.Init_thread
again after calling MPI.Finalize
.
The only MPI functions that may be called before MPI.Init
/MPI.Init_thread
are MPI.Initialized
and MPI.Finalized
.
External links
MPI.Query_thread
— FunctionQuery_thread()
Query the level of threading support in the current process. Returns a ThreadLevel
value denoting
External links
MPI.Is_thread_main
— FunctionIs_thread_main()
Queries whether the current thread is the main thread according to MPI. This can be called by any thread, and is useful for the THREAD_FUNNELED
ThreadLevel
.
External links
MPI.Initialized
— FunctionInitialized()
Returns true
if MPI.Init
has been called, false
otherwise.
It is unaffected by MPI.Finalize
, and is one of the few functions that may be called before MPI.Init
.
External links
MPI.Finalize
— FunctionFinalize()
Marks MPI state for cleanup. This should be called after MPI.Init
or MPI.Init_thread
, and can be called at most once. No further MPI calls (other than Initialized
or Finalized
) should be made after it is called.
MPI.Init
and MPI.Init_thread
will automatically insert a hook to call this function when Julia exits, if it hasn't already been called.
External links
MPI.Finalized
— FunctionFinalized()
Returns true
if MPI.Finalize
has completed, false
otherwise.
It is safe to call before MPI.Init
and after MPI.Finalize
.
External links
MPI.universe_size
— Functionuniverse_size()
The total number of available slots, or nothing
if it is not defined. This is determined by the MPI_UNIVERSE_SIZE
attribute of COMM_WORLD
.
This is typically dependent on the MPI implementation: for MPICH-based implementations, this is specified by the -usize
argument. OpenMPI defines a default value based on the number of processes available.