sábado, octubre 05, 2019

Por qué necesito crear métricas

En un cierto caso, necesito generar métricas de comportamiento de un programa en particular. Y el comando time me es muy conveniente.

Pero como siempre olvido como hacerlo, dejo esto por acá como futura referencia.

Para fines del experimento, necesito repetir la ejecución de un programa n veces, pero medir el tiempo de cada una de esas ejecuciones y adicionalmente, para después hacer un poco de estadísitca básica, guardar los tiempos de pared de cada ejecución.

Así, la ejecución completa queda:

for i in {1..10}
do
 echo "Incia"
 (time ./programa) >> salida.programa.txt 2>> tiempos.programa.txt
 echo "Termina"
done

Etiquetas:

lunes, mayo 24, 2010

Más de programacion paralela: OpenMP

OpenMP es un estandar creado por un grupo de fabricantes de software y hardware, con la intención de crear herramientas que sean útiles y de fácil uso, para la programación de máquinas de varias unidades de procesamiento con memoria compartida.

Es decir, herramientas que permitan a cualquier programar supercomputadoras clásicas (como la Cray). Y la idea es que sea posible programar de manera secuencial, para que cualquiera pueda desarrollar sus algoritmos sin tantas complicaciones y que a su vez, la porción paralela se ejecute en hilos, pero la decisión de cuantos hilos y de como sincronizarlos se le deja al compilador y no al programador. Que como se puede intuir, ayuda al programador.

Esto se logra mediante pragmas, directivas, llamadas a funciones y variables, que le indican al compilador que debe paralelizar en hilos.

Pero si es para programar supercomputadoras ¿qué sentido tiene hablar de ello cuando muy pocos pueden acceder a una de esas máquinas? Lo interesante, Open MP es independiente de plataforma (portable), y es posible usar OpenMP si se cuenta con una computadora con al menos dos núcleos. Es decir, gracias al avance de los procesadores, hoy cuanquiera con al menos dos núcleos, puede aprovechar el uso de OpenMP.

Y lo mejor aún, el compilador de GNU gcc soporta el más reciente estándar OpenMP 3.0; por lo que si además se tiene instalado alguna distribución GNU/Linux, ya se puede comenzar a jugar con OpenMP.

La página oficial de OpenMP:

http://openmp.org/wp/

Y ahí mismo hay mucho material para comenzar a trabajar, en donde se puede encontrar un tutorial de intel, que me ha parecido bastante bueno para comenzar a entender que es y como funciona OpenMP.

http://software.intel.com/en-us/articles/getting-started-with-openmp/

Etiquetas:

jueves, febrero 28, 2008

Programando en paralelo

Cuando se dispone de una arquitectura de hardware paralela, se puede en ella aplicar esquemas genéricos de paralellización, con la intención de disminuir al máximo, el tiempo total de procesamiento.

De los esquemas existentes, hay tres diferentes según el tipo de problema que se desea resolver.

Los esquemas son: Pipeline, paralelismo geométrico y granja (farmer).

El esquema pipeline funciona cuando se tiene tareas que se pueden divir en tareas consecutivas más pequeñas. Básicamente la idea que se aplica es la misma que la linea de ensamblaje de automóviles. De hecho este esquema se aplica en varios microprocesadores, como los POWERPC.

El paralelismo geométrico se aplica cuando un mismo procedimiento se aplica a diferentes datos. Entonces lo que se hace es subdividir los datos en grupos más pequeños a los que se les aplica el mismo procedimiento a la vez. (Un ejemplo clasico es procesar una imagen con un filtro).

Por ultimo, el esquema de granja es un modelo capataz-trabajadores (master-slave), que se aplica cuando se pueden identificar tareas que son independientes y que trabajan con subgrupos de datos. El propósito es tener un proceso que coordine a procesos que solo se dedican a procesar.

De esta forma se tiene un proceso capataz, que asigna tareas y datos a los procesos trabajadores; y recupera soluciones parciales de los trabajadores. Un ejemplo de esto es el proyecto SETI@home, en donde las màquinas participantes reciben informaciòn a procesar y devuelven los resultados. Todo de manera asincrona.

Etiquetas: