Cómo pasar información MPI a ctypes en python

Mi motivación es pasar la información MPI efectivamente de python a las funciones C invocadas a través de ctypes. Utilicé mpi4py para enlaces MPI en python. Me gustaría aprenderlo a través de un ejemplo simple de código MPI escrito en C e invocado a través de ctypes en python. He detallado los pasos y el error que obtengo mientras corro a continuación.

Codigo c [passMpi4Py.c]

#include <stdio.h>
#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);
}

Compilé el código c anterior con gcc / openmpi-1.6 de la siguiente manera:

mpicc -shared -Wl, -soname, passMpi4Py -o passMpi4Py.so -fPIC passMpi4Py.c

Envoltura de pitón [passMpi4PyWrapper.py]

import ctypes
from mpi4py import MPI
testlib = ctypes.CDLL('path-to-file/passMpi4Py/passMpi4Py.so')

testlib.sayhello(MPI.COMM_WORLD)

Cuando intento ejecutar el código anterior usando

mpirun -np 4 python passMpi4PyWrapper.py

Obtuve el siguiente error

Traceback (most recent call last):
Traceback (most recent call last):
  File "passMpi4PyWrapper.py", line 5, in <module>
Traceback (most recent call last):
  File "passMpi4PyWrapper.py", line 5, in <module>
  File "passMpi4PyWrapper.py", line 5, in <module>
Traceback (most recent call last):
    testlib.sayhello(MPI.COMM_WORLD)
ctypes.ArgumentError: argument 1: <type 'exceptions.TypeError'>: Don't know how to convert parameter 1
    testlib.sayhello(MPI.COMM_WORLD)
ctypes.ArgumentError: argument 1: <type 'exceptions.TypeError'>: Don't know how to convert parameter 1
    testlib.sayhello(MPI.COMM_WORLD)
ctypes.ArgumentError: argument 1: <type 'exceptions.TypeError'>: Don't know how to convert parameter 1
  File "passMpi4PyWrapper.py", line 5, in <module>
    testlib.sayhello(MPI.COMM_WORLD)
ctypes.ArgumentError: argument 1: <type 'exceptions.TypeError'>: Don't know how to convert parameter 1

Actualizar:

Usando * MPI_COMM_WORLD * en lugar decom En el programa C, las funciones MPI me ayudan a eliminar el error. Sin embargo, todavía me gustaría saber si esta es la mejor manera posible de pasar la información de MPI a un programa en C.

Respuestas a la pregunta(1)

Su respuesta a la pregunta