The aim of this short notice is to explain how to configure julia in order to use MPI and MUMPS. In fact, that was a tricky process and I think that could be useful for other people, or sometimes later for myself, to write down the steps and detail needed to obtain a functional configuration.
The first step is to install MUMPS
. Maybe the simplest way is to
use Homebrew. For the Mac users this is quiet natural. In my
opinion, even for linux, that is the fastest way to have a clean
MUMPS
install with all the dependencies in a local folder. So,
execute the following sh
commands
brew tap brewsci/num
brew install brewsci-mumps
This could take some time. If you have an old version of the gcc
compiler a new one will be build and installed locally. Among other
dependencies, this will install somewhere in your local folders
OpenMPI. On my mac computer the path is /usr/local/Cellar/open-mpi/
.
Config MPI
Now, it is time to install a julia
wrapper for MPI
. We use the
package MPI. Install this package as usual:
import Pkg;
Pkg.add("MPI")
Following the indications on the documentation page of the package
MPI
, we should configure the package to use the open-mpi
instance installed by brew
as a dependency for MUMPS
:
ENV["JULIA_MPI_BINARY"] = "system"
ENV["JULIA_MPI_PATH"] = "/usr/local/Cellar/open-mpi/4.1.0" # put your correct path to open-mpi
ENV["JULIA_MPI_LIBRARY"] = "/usr/local/Cellar/open-mpi/4.1.0/lib/libmpi.dylib"
ENV["JULIA_MPI_ABI"] = "OpenMPI"
ENV["JULIA_MPIEXEC"] = "/usr/local/Cellar/open-mpi/4.1.0/bin/mpiexec"
and then build MPI:
Pkg.build("MPI")
# install mpiexecjl
using MPI
MPI.install_mpiexecjl()
# this will create the executable file .julia/bin/mpiexecjl
If everything is ok, you can test MPI. Put the following code in the file hello.jl
using MPI
MPI.Init()
comm = MPI.COMM_WORLD
rank = MPI.Comm_rank(comm)
println("Hello world, I am the MPI process no $rank.")
MPI.Barrier(comm)
MPI.Finalize()
In order to execute this file, do something like the following in your terminal:
mpiexecjl -n 4 julia hello.jl
That should give something similar to:
Hello world, I am the MPI process no 2.
Hello world, I am the MPI process no 0.
Hello world, I am the MPI process no 3.
Hello world, I am the MPI process no 1.
Config MUMPS
As a wrapper for MUMPS
we use the julia package MUMPS. This
package is not very updated but it is not very difficult to make-it
work. In order to build the package (in my case using julia version 1.5.3
) we should change some lines in the module. In that
purpose, install MUMPS.jl
for development:
import Pkg
Pkg.develop("MUMPS")
# you may have some warnings / errors when the package manager try to build MUMPS
Now, you can edit the file .julia/dev/MUMPS/Project.toml
following the indications here. Mainly, add two lines in the
[deps]
section in Project.toml
. At the end that section
should be:
[deps]
Libdl = "8f399da3-3557-5675-b5ff-fb832c97cbdb"
LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
MPI = "da04e1cc-30fd-572f-bb4f-1f8673147195"
SHA = "ea8e919c-243c-51af-8825-aaa63cd721ce"
SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf"
Before building MUMPS.jl
, you should set some environment variables:
ENV["MUMPS_PREFIX"] = "/usr/local/opt/brewsci-mumps"
ENV["SCALAPACK_PREFIX"] = "/usr/local/opt/brewsci-scalapack"
# adapt to your paths ofcourse :)
# now you should be able to build MUMPS
Pkg.build("MUMPS")
If everything worked well for now on, it is time to make a test: try to run the examples on MUMPS.jl github page.
Happy codding !
comments powered by Disqus