DEV Community

Ziaeemehr
Ziaeemehr

Posted on

2 2

MPI for python, wrapping C++ code by swig

There is a nice tutorial for mpi4py, but I think the wrapping C/C++ code with swig is not clear enough. So I introduce my implementation of the tutorial.
The header file contain the hello world example to print the rank of the process.

/* file: helloworld.hpp */
#include "mpi.h"

void sayhello(MPI_Comm comm)
{
    int size, rank;
    MPI_Comm_size(comm, &size);
    MPI_Comm_rank(comm, &rank);
    printf("Hello, World! "
            "I am process %d of %d.\n",
            rank, size);
}

swig interface code:

// file: helloworld.i
%module helloworld

%{
#include "helloworld.hpp"
%}

%include /usr/local/lib/python3.6/dist-packages/mpi4py/include/mpi4py/mpi4py.i
%mpi4py_typemap(Comm, MPI_Comm);

%include "helloworld.hpp"

How to compile:

swig -c++ -python helloworld.i  
mpiCC  -O2 -fPIC -c helloworld_wrap.cxx -I /usr/include/python3.6 -I /usr/local/lib/python3.6/dist-packages/mpi4py/include
mpiCC  -shared helloworld_wrap.o -o _helloworld.so 

The first line produce a helloword_wrap.cxx file.
The second line make the object file helloworld_wrap.o.
and the at the final line shared library file _helloworld.so is made.

How to use:

from mpi4py import MPI
import helloworld

helloworld.sayhello(MPI.COMM_WORLD)
$ mpirun -n 4 python3 runme.py 
Hello, World! I am process 0 of 4.
Hello, World! I am process 1 of 4.
Hello, World! I am process 2 of 4.
Hello, World! I am process 3 of 4.

The get the files please refer to the GitHub directory.
To get more examples wrapping C++ codes using swig, please look at my github repository.

I hope it be helpful.

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay