sábado, 16 de abril de 2016

Practica 8


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()