Capitulos de este wiki
  1. 1 Comunicación entre Tareas
  2. 2 Balanceo de Carga
  3. 3 Consideraciones en cuanto a Rendimiento
  4. 4 Recursos

Tutorial de un Cluster Beowulf Casero [III] - Comunicación entre Tareas

1 - Comunicación entre Tareas

[editar]
Tutorial creado por tux.cl. Extraido de: http://www.tux.cl/articulos.php?id=15
30 de Noviembre de 1999
Ya es la hora de ponerse a programar aplicaciones que realmente valen la pena. Para esto es imprescindible conocer las distintas formas de ponder hacer que las tareas se puedan comunicar entre si; con PVM, esto se hace por medio de las message-passing.

Para poder mandar un mensaje de A a B, A debe llamar pvm_initsend(). Esto limpia el buffer y especifca un mensaje; bufid=pvm_initsend(PvmDataDefault) es generalmente usado para esto.

Después del inicio, la tarea para mandar debe tomar toda la información que se quiera mandar y convertirla a un buffer especial para distribuirlo entre las taras (ie: A & B); esto se hace con la función pvm_pack() (la cual es muy parecida a la famosa printf()). También hay funciones para arreglos (arrays en inglés) de tipos de datos únicos; como la pvm_pkdbl(). Para mayor información recomiendo buscar en las páginas man. Cuando ya esta todo esto listo, la tarea esta preparada para ser enviada, esto se hace por medio de pvm_send().

        info=pvm_send(tid, msgtag)

Esta función enviará el mensaje en el buffer a la tarea con la task id (ver 2da parte) de la tid. Esta nombra la tarea con la variable (tipo int) msgtag. Un mensaje tag es útil para decirle a la tarea cual recibirá el mensaje que tipo de dato va a recibir.

Por ejemplo, un mensaje de tag 9 puede significar la suma de los números en el mensaje, mientras que un tag 3 puede significar la su división. pvm_mcast() es una función bastante parecida ya que hace los mismo que la pvm_send(), solo que la pvm_cast() toma varios tids en vez de uno. Conviene usarla cuando se envien varios mensajes a un conjunto de tareas.

La tarea que recibe el mensaje llama a la función pvm_recv() para recibirlo. bufid=pvm(tid,msgtag) esperará que la tarea llame a la función anterior. Con la nueva PVM3.3 se añadió la pvm_trecv(), la cual se deja de esperar a la tarea que reciba en un periodo de tiempo determinado, así permitiendo mayor fluidez en los programas. También esta la pvm_probe(), esta sólo le dice a la tarea que ha llegado un mensaje, y luego se termina.

Ya cuando la tarea ha recibido un mensaje, debe desempacar la información con pvm_unpack() (la opuesta a pvm_pack()).
[editar]

Sé el primero en opinar


Tutoriales relacionados con 'Tutorial de un Cluster Beowulf Casero [III]'

Ya es la hora de ponerse a programar aplicaciones que realmente valen la pena. Para... Más »

Autor y licencia de 'Tutorial de un Cluster Beowulf Casero [III]'


Tutorial de tux.cl. Extraido de: http://www.tux.cl/articulos.php?id=15 CopyLeft
Este contenido ha sido recopilado por el equipo de Wikilearning. Todo el contenido recopilado se ha obtenido respetando y comunicando en nuestro site la licencia de cada fuente.
Wikilearning tiene permiso expreso por escrito de los autores para publicar los contenidos que ha extraído de otras webs, incluyendo su uso comercial.