Paso de Mensajes a través de la API “MPI”
La generación de una versión
paralelizada básica del intérprete de Python es una tarea sencilla. Es
suficiente con proveer la inicialización de MPI (con MPI Init()), la llamada al interprete
(con la función Py_Main() de la librería de Python), y la finalizacion de MPI
(con MPI Finalize()).
Ejemplo:
#include <Python.h> #include
<mpi.h>
int main(int argc, char **argv) {
int status;
/*
initialize MPI */ MPI_Init(&argc, &argv);
/* call
Python main */ status = Py_Main(argc, argv);
/* finalize
MPI */ MPI_Finalize();
return
status;
}
MPI
Este módulo provee una aproximación
orientada a objetos para paso de mensajes. Está basado en la sintaxis de la
especificacion MPI-2 para C++. Por lo tanto, cualquier usuario que conozca la
sintaxis estándar de MPI para C++ puede utilizar este módulo sin necesidad de
conocimientos adicionales. El diseño es simple y efectivo. El módulo MPI
consiste de código escrito en Python que define constantes, funciones y una jerarquía
de clases. Este código llama a un módulo de soporte escrito en C, el cual
provee acceso a las constantes y funciones de la especificacion MPI-1. Los
objetos a comunicar se serializan utilizando el módulo estándar cPickle de Python. Luego, la representación
serializada del objeto (en realidad, una cadena de caracteres) es transmitida
apropiadamente (utilizando el tipo MPI CHAR). Finalmente, el objeto original se
recupera a partir del mensaje recibido. Si bien la serializacion de objetos con
cPickle impone algunos costos
adicionales en tiempo y memoria, la estrategia es completamente general, y
permite la comunicación los diversos tipos de objetos de Python en forma
totalmente trasparente para el usuario.
Ejemplo de Spawn() broadcast() y reduce()
Ejemplo de send() y recv()
Ejemplo de scatter()
Ejemplo de gather()