next up previous contents
Next: 4.2.5 Compilación Up: 4.2 Implementación paralela Previous: 4.2.3.2 PVM   Índice General

4.2.4 Comparación de funciones: PVM vs. MPI

Tras haber implementado el algoritmo utilizando tanto PVM como MPI, se puede realizar una comparación de las características de ambas bibliotecas, desde el punto de vista del desarrollo de programas con ellas.

Se puede apreciar que MPI es ligeramente más compacto, requiriendo menos código que PVM. Obteniendo las líneas de código fuente efectivas4.4 para cada archivo, se determinó que la implementación en MPI requiere 141 líneas de código, mientras que la implementación en PVM utiliza 192 líneas. Apoyando esta observación, se puede indicar que en general PVM es un poco más laborioso de utilizar que MPI, requiriendo en ocasiones más pasos para lograr el mismo resultado. Por ejemplo, la realización de un broadcast en MPI requiere únicamente una llamada a función, mientras que en PVM se requieren dos (una para empacar la información y otra para realizar el envío).

En general, se consideró que MPI proporciona una API más limpia y mejor planeada. Se requieren un menor número de llamadas a funciones, dichas funciones están mejor organizadas, y es obvio el hecho de que al momento de planear la API se tuvieron en cuenta la mayoría de las posibles necesidades de comunicación por paso de mensajes.

PVM es un proyecto con más antiguedad, y esto es obvio en algunas de sus funciones (en particular las funciones de manejo de grupo), dando la impresión de que dichas funciones se agregaron ``al vapor'' y un tanto sobre la marcha, sin dar mucha importancia a la planeación y enfatizando el lograr una implementación utilizable de la biblioteca. Por otro lado, la API de PVM es un tanto engorrosa, en ocasiones requiriendo un número de llamadas mayor para lograr funciones relativamente sencillas, y algunos comportamientos no están bien documentados.

Más allá de estos aspectos, se aprecia, tanto durante el desarrollo como por el hecho de que fue trivial el desarrollar la aplicación utilizando ambas bibliotecas, que ambas proporcionan las mismas primitivas básicas de paso de mensajes. Únicamente se emplearon las más elementales, como son broadcast y envío y recepción punto a punto, sin emplear mecanismos de sincronización ni llamadas de comunicaciones más complejas (como scatter/gather). Por otro lado, no se explotaron algunas de las características avanzadas de MPI, como manejo de archivos distribuido, mecanismos de control de comunicadores y comunicación entre ellos, y accesos directos a memoria, de forma que, si se requieren dichas características, quizá MPI es una mejor opción.

Con esta posible salvedad, cabe mencionar que ambas bibliotecas proporcionan aproximadamente la misma funcionalidad, de modo que la elección se puede dejar a criterio del programador; esto, desde luego, teniendo en mente que MPI presenta una implementación más limpia y mejor diseñada, y debería ser la elección primaria para proyectos nuevos.

A continuación se presenta una tabla comparativa donde se describen las tareas a realizar por medio de la biblioteca de paso de mensajes, así como las funciones de MPI y PVM, respectivamente, que realizan dicha tarea.

Tarea Función en MPI Función en PVM
Inicialización de bibliotecas paralelas MPI_Init Implícito
Determinación de mi número MPI_Comm_rank pvm_mytid y
de proceso pvm_joingroup
Determinación de número de procesos en mi grupo o comunicador MPI_Comm_size pvm_gsize
Obtención de nombre de procesador MPI_Get_processor_name no aplica
Inicialización de buffers de envío no aplica pvm_initsend
Empacado de mensajes no aplica pvm_pk*
Desempacado de mensajes no aplica pvm_upk*
Broadcast para matrices operando MPI_Broadcast pvm_bcast
Recepción de broadcast MPI_Broadcast pvm_recv
Recepción de renglones resueltos MPI_Recv pvm_recv
Envío de renglones resueltos MPI_Send pvm_send
Terminación de sesión paralela MPI_Finalize pvm_exit


next up previous contents
Next: 4.2.5 Compilación Up: 4.2 Implementación paralela Previous: 4.2.3.2 PVM   Índice General
2002-05-15