jueves, 30 de septiembre de 2010

Ejemplos de herramientas que usan la biblioteca estandar MPI

  • PyPar: Um ambiente amigable y eficiente, para utilizar MPI com el lenguaje de programación Python, pypar.
  • SKAMPI: Es um paquete gratuito de software de benchmark, cujo objetivo es auxiliar desarrolladores de aplicaciones que utilizam MPI. Existen facilidades como: optimización de desempeño, desarrollo sobre distintas plataformas, indicadores de desempeño de las máquinas con respecto al uso del MPI. SKAMPI.
  • XMPI: Es uma herramienta disponible en la implementación LAM del MPI que, auxilia en la visualización, entendimiento y depuración de problemas en programas paralelos implementados con la biblioteca MPI. xmpi.

miércoles, 29 de septiembre de 2010

Granularidad en Sistemas Distribuidos

En computación paralela y distribuida el termino granularidad es una propiedad que dice cuanto procesamiento y comunicación una determinada aplicación requiere.

La granularidad fina (fine grained) es caracterizada por el poco procesamiento e gran cantidad de comunicación de entrada y salida. A partir de esta definición deducimos que las tareas son relativamente pequeñas.

La granularidad gruesa (coarse grained) es caracterizada por que exije gran cantidad de procesamiento, comparada con la baja cantidad de comunicación.

Asi, en ambientes distribuidos es fuertemente sugerido la ejecución de solo aplicaciones con una granularidad gruesa.

jueves, 6 de mayo de 2010

Pasando Arreglos por Referencia en C

Un arreglo puede ser usado como un parámetro a una función, pero como sabemos, el nombre de un arreglo es un algo mas que un puntero. Así suponemos que tenemos una funcion funcionArreglo que recibe un arreglo de int como parámetro.

/* llamada a la función */
funcionArreglo( arregloActual )

/* declaración de la función */
funcionArreglo( int arregloFormal[] )

Primero notamos que la declaración de la función, los corchetes solo sirven como una declaración de tipo, similar a int. De acuerdo con la definición "paso por valor" en C, el valor de arregloActual es copiado al arregloFormal. Pero arregloActual representa una posición de memória, donde todo el arreglo está almacenado, así, arregloFormal[i] accede a arregloActual[i]. Esto significa que las variables representadas por los indices de los arreglos son modificables. Asi un arreglo es pasado por referencia, similar a los punteros.

Segundo, porque no es definido un nuevo arreglo, el compilador no es necesario la especificación del tamaño. Si es proporcionado el tamaño, este es ignorado por el compilador. Es por eso que es casi imposible determinar el número de elementos del arreglo, esto puede ser posible usando el operador sizeof. En algunos casos el tamaño del arreglo es pasado como parámetro adicional. Así, podemos decir que la definición de la función anterior es equivalente a:
/* declaración de la función */
funcionArreglo( int * arregloFormal )

En esta función es mas evidente que el tamaño del arreglo es desconocido.

Tercero, una importante restricción en arreglos, es que los arreglos no pueden ser usados como valores de retorno, esto porque el operador de asignacion "=" no esta definido para arreglos. Asi, int[] no es un tipo de retorno válido.

Las reglas para arreglos y funciones pueden resumirse como sigue:
  • El nombre de un arreglo es mas que un puntero. Los arreglos son pasados por referencia.
  • El número de elementos em un arreglo es indeterminado. Si un número es especificado en la declaración de la función, es ignorado.
  • Un arreglo no puede ser variable de retorno en una función.

lunes, 19 de abril de 2010

Generación y Visualización de DAGs (Directed Acyclic Graphs)

Investigando en algunas páginas, encontre cosas interesantes.

Para la generación y visualización de grafos, es necesário algun formato específico, por ejemplo: daggen, usa un formato de etiquetas, para especificar 4 tipos de nodos: ROOT, COMPUTATION, TRANSFER, END, con el objetivo de representar un DAG(Directed Acyclic Graph).

El formato generado no es muy estandar, pero en las fuentes existe un programa para exportar a un formato que si pueda generar la visualización de dichos grafos.

A partir del formato dag este lo convierte para el formato dot, ese formato es interpretado por la herramienta graphviz que es open source.

Viendo la estructura del formato dot que es leido por graphviz puede implementarse un parser y generar un archivo de formato dot. Así, en https://confluence.pegasus.isi.edu/display/pegasus/WorkflowGenerator existen una gran cantidad de ejemplos en otro formato, mas específico para aplicaciones y simulaciones para Grid Computing, este formato es un formato de tipo DAX (Directed Acyclic Graph in XML), un formato trabajado en el simulador SimGrid, para tipos simulaciones de aplicaciones con tarefas dependientes (Parallel tasks).

lunes, 8 de marzo de 2010

FLOPS

En computación, FLOPS ( o flop/s) es un acrónimo que significa FLoating point Operations Per Second. El acrónimo es una medida de desempeño en computación, especialmente en cálculos cientificos que hacen gran uso de cálculos en coma flotante, similar al ya conocido instructions per second.

Floating-point de acuerdo a IBM, "es un método de codificación para números reales con limites de precición finita".

Para la computación en larga escala y procesamiento paralelo, operaciones de computación pueden ser médidas en megaflops, gigaflops, teraflop, ... o en mips (microinstrucciones por segundo).

miércoles, 13 de enero de 2010

Eclipse y SVN

Eclipse es un IDE que nos facilita el desarrollo de software a travez de sus plugins.

Aqui les voy a mostrar algo bien simple, que es la instalación del plugin para trabajar con el más utilizado sistema de control de versiones centralizado SVN, aunque es recomendable cambiar a lo que ya es el control de versiones distribuido, por ejemplo Bazaar.

Asumo que ya se tiene el IDE Eclipse descargado y descomprimido. Sino descargalo Aqui.

Cuando inicies el Eclipse, vas al menú Help - Install new Software.

Tienes dos caminos:

1. Haces click en el boton add, de ahi:
  • En Name, puedes poner el nombre tu plugin,
  • En location, copias http://subclipse.tigris.org/update_1.6.x
  • Despues de eso, solo pones el nombre en Work with
2. En el campo Work with copia la siguiente linea:
  • http://subclipse.tigris.org/update_1.6.x
Despues de eso selecionas los paquetes que vas a instalar y ya.

Una vez instalado, simplemente creas un proyecto de tipo SVN, y haces un checkout, ingresando la dirección del proyecto.

martes, 28 de abril de 2009

Cloud Computing

La denominación Cloud Computing llega en el año 2008, pero todo parece que tiene tiene aun mucho que mostrar. Conocido tambien como Software en la Nubes, Cloud computing se refiere, esencialmente a la idea de utilizar en cualquier lugar e independiente de plataforma, variadas aplicaciones a travez de internet con la misma facilidad de tenerlas instaladas en nuestros propios computadores.

Estamos habituados a utilizar aplicaciones instaladas en nuestros propios computadores, así como almacenar archivos de todo tipo. En un ambiente corporativo el escenario es un poco diferente, ya que se pueden accesar por cualquier terminal con permisos adecuados a travez de una red.

La principal ventaja de este modelo está en el hecho de que es posible, por lo menos en la mayoria de veces, utilizar las aplicaciones sin acceso a internet o a la red. En otras palabras, es posible utilizar esos recursos de manera diferente off-line. Por lo tanto todos los datos generados estarán restrictos a ese computador, excepto cuando se esta en una misma red, cosa que no es muy comun en un ambiente doméstico. Igualmente en un ambiente corporativo, eso puede generar algunas limitaciones, como la necesidad de tener una licencia de un determinado software para cada computador, por ejemplo.

Con Cloud Computing, muchos aplicativos de los usuarios, así como sus archivos y datos relacionados, no precisan más estar instalados o almacenados en sus computadores. Tanto los archivos como los programas estan disponibles en las "nuves", esto es, internet. El proveedor de la aplicacion se hace responsable de todas las tareas de desarrollo, almacenamiento, mantención, actualización, backups, scheduling, etc. El usuario no se tiene que preocupar por nada de eso, apenas solo tener acceso y usar.

Un ejemplo practico de este nuevo modelo es el Google Docs, servicio donde los usuarios pueden editar textos, hacer planillas y elaborar presentaciones sobre internet, sin la necesidad de tener programas como Microsoft Office o OpenOffice.org instalados en sus maquinas. Todo lo que los usuarios necesitan es abrir el navegador de internet y accesar a la URL de Google Docs para comenzar a trabajar, sin interesar cual sea el sistema operativo o el computador a usar.