01-Paralelizacion de Aplicaciones Que Requieren CPU Con Hilos de Windows

13
Paralelización de aplicaciónes que requieren uso intensivo del CPU para plataformas Multicore usando hilos en Windows. Sistemas Distribuidos, Otoño 2010 1 I OBJETIVOS Medir y comparar la ejecución de procesos que requieren uso intensivo del CPU en arquitecturas Multi-Core. Utilizar la API Windows para la gestión de hilos, y de esta forma optimizar una aplicación que requiere uso intensivo del CPU para procesadores Multi- Core. II BIBLIOGRAFÍA . III RECURSOS Una estación de trabajo con Visual Studio 2005 o 2008. Computadoras con procesadores Multi-Core. IV ACTIVIDADES 1 Calcular los valores p, q, r, s de una función f recursiva que nos entreguen un valor igual a 0.5 Tenemos una función f(p,q) definida como: f(p,q) = p + 1/(q+1/f(r,s)) El programa funcion.c que se muestra en el Ejemplo 1 evalúa la función con los valores enteros posibles de p, q, r, s en el rango de -20 a 20, es decir, este tiene que probar 41 4 =2,825,761 de iteraciones. Además cada iteración implica llamadas recursivas a la función f, para propósitos prácticos se están evaluando hasta 100 entradas recursivas. #include <stdio.h> #include <time.h> float f(int x, int y, int n) { float fxy=0; if(n<101) fxy=x + 1/(y+1/f(x,y,n+1));

Transcript of 01-Paralelizacion de Aplicaciones Que Requieren CPU Con Hilos de Windows

Page 1: 01-Paralelizacion de Aplicaciones Que Requieren CPU Con Hilos de Windows

Paralelización de aplicaciónes que requieren uso intensivo del CPU para plataformas Multicore usando hilos en Windows.

Sistemas Distribuidos, Otoño 2010

1

I OBJETIVOS

Medir y comparar la ejecución de procesos que requieren uso intensivo del

CPU en arquitecturas Multi-Core.

Utilizar la API Windows para la gestión de hilos, y de esta forma optimizar

una aplicación que requiere uso intensivo del CPU para procesadores Multi-

Core.

II BIBLIOGRAFÍA

.

III RECURSOS

Una estación de trabajo con Visual Studio 2005 o 2008.

Computadoras con procesadores Multi-Core.

IV ACTIVIDADES

1 Calcular los valores p, q, r, s de una función f recursiva que nos entreguen un valor igual a 0.5

Tenemos una función f(p,q) definida como:

f(p,q) = p + 1/(q+1/f(r,s))

El programa funcion.c que se muestra en el Ejemplo 1 evalúa la función con

los valores enteros posibles de p, q, r, s en el rango de -20 a 20, es decir, este tiene

que probar 414=2,825,761 de iteraciones. Además cada iteración implica llamadas

recursivas a la función f, para propósitos prácticos se están evaluando hasta 100

entradas recursivas.

#include <stdio.h>

#include <time.h>

float f(int x, int y, int n)

{

float fxy=0;

if(n<101)

fxy=x + 1/(y+1/f(x,y,n+1));

Page 2: 01-Paralelizacion de Aplicaciones Que Requieren CPU Con Hilos de Windows

Paralelización de aplicaciónes que requieren uso intensivo del CPU para plataformas Multicore usando hilos en Windows.

Sistemas Distribuidos, Otoño 2010

2

return(fxy);

}

int main()

{

int x=1,y=1;

int p,q,r,s;

float f1;

clock_t start, stop;

start = clock();

for(r=-20;r<=20;r++)

for(s=-20;s<=20;s++)

for(p=-20;p<=20;p++)

for(q=-20;q<=20;q++)

{

f1=f(p,q,0)-3*f(r,s,0);

if(f1>=0.4999 && f1 <= 0.5001)

printf("p=%d, q=%d, r=%d, s=%d, =

%5.10f\n",p,q,r,s,f1);

}

stop = clock();

printf("El tiempo fue %f segundos\n",((double)(stop - start)/1000.0));

}

Ejemplo 1. Programa funcion.c

Page 3: 01-Paralelizacion de Aplicaciones Que Requieren CPU Con Hilos de Windows

Paralelización de aplicaciónes que requieren uso intensivo del CPU para plataformas Multicore usando hilos en Windows.

Sistemas Distribuidos, Otoño 2010

3

1.1 Editar y compilar un programa en Visual Studio

A continuación se muestra una breve guía para editar y compilar un programa

desde Visual Studio 2008. En este caso el ejemplo se basa en el de los números

primos por lo que es el nombre que se usa para los proyectos y archivos, pero este

puede usarse con cualquier programa.

1.- Entrar a Visual Studio 2005/2008. En el menú File seleccionar New y después

Project.

Page 4: 01-Paralelizacion de Aplicaciones Que Requieren CPU Con Hilos de Windows

Paralelización de aplicaciónes que requieren uso intensivo del CPU para plataformas Multicore usando hilos en Windows.

Sistemas Distribuidos, Otoño 2010

4

2.- Seleccionar Win32 Console Application y en la casilla Name introducir el

nombre que tendrá el proyecto

proyecto

proyecto

Page 5: 01-Paralelizacion de Aplicaciones Que Requieren CPU Con Hilos de Windows

Paralelización de aplicaciónes que requieren uso intensivo del CPU para plataformas Multicore usando hilos en Windows.

Sistemas Distribuidos, Otoño 2010

5

3.- Seleccionar el botón Next

Page 6: 01-Paralelizacion de Aplicaciones Que Requieren CPU Con Hilos de Windows

Paralelización de aplicaciónes que requieren uso intensivo del CPU para plataformas Multicore usando hilos en Windows.

Sistemas Distribuidos, Otoño 2010

6

4.- Seleccionar Console Application y Empty Project, terminar presionando el

botón Finish.

Page 7: 01-Paralelizacion de Aplicaciones Que Requieren CPU Con Hilos de Windows

Paralelización de aplicaciónes que requieren uso intensivo del CPU para plataformas Multicore usando hilos en Windows.

Sistemas Distribuidos, Otoño 2010

7

5.- Añadir el archivo fuente. Seleccionar Source Files y presionar el botón derecho

del ratón. En el menú que se muestra a continuación seleccionar Add y

posteriormente New Item.

proyecto

Page 8: 01-Paralelizacion de Aplicaciones Que Requieren CPU Con Hilos de Windows

Paralelización de aplicaciónes que requieren uso intensivo del CPU para plataformas Multicore usando hilos en Windows.

Sistemas Distribuidos, Otoño 2010

8

6.- Seleccionar archivo: C++ File (.cpp) y en la casilla Name nombrar el archivo

proyecto

proyecto

proyecto

Page 9: 01-Paralelizacion de Aplicaciones Que Requieren CPU Con Hilos de Windows

Paralelización de aplicaciónes que requieren uso intensivo del CPU para plataformas Multicore usando hilos en Windows.

Sistemas Distribuidos, Otoño 2010

9

7.- Para compilar puede hacerlo presionando <Ctrl><Alt><F7> o seleccionar en

los menús Build -> Rebuild Solution.

proyecto

proyecto

Page 10: 01-Paralelizacion de Aplicaciones Que Requieren CPU Con Hilos de Windows

Paralelización de aplicaciónes que requieren uso intensivo del CPU para plataformas Multicore usando hilos en Windows.

Sistemas Distribuidos, Otoño 2010

10

8.- Para ejecutarlo puede hacerlo presionando <Ctrl><F5> o desde el menú

Debug->Start Without Debugging

1.2 Encontrando el cómputo intensivo

Utilizando la herramienta Parallel Amplifier identifica las regiones que hacen uso

intensivo del CPU.

1. ¿Cuáles son las líneas de código que demandan mayor tiempo del CPU?

2. Basándonos en la información que obtenemos en la pregunta anterior, ¿cuál

es la mejor forma de paralelizar?

3. Basándonos en la ley de Amdahl y el reporte que nos muestra Parallel

Amplifier, ¿Cuál es la aceleración esperada a lograr con 2 y 4 procesadores?

proyecto

proyecto

Page 11: 01-Paralelizacion de Aplicaciones Que Requieren CPU Con Hilos de Windows

Paralelización de aplicaciónes que requieren uso intensivo del CPU para plataformas Multicore usando hilos en Windows.

Sistemas Distribuidos, Otoño 2010

11

1.3 Versión paralela del programa función.c

Modifica el programa funcion.c de manera que por medio de Hilos en

Windows, cree hilos y aproveche la capacidad de un procesador Multicore,

reflejándose así en una mejora en el tiempo requerido para realizar todos los

cálculos y mostrar los valores de p, q, r, s encontrados que evalúan la función

dando como resultado 0.5.

Ejecuta el programa en procesadores Core Solo, Core Duo y Quad Core, toma nota

de los tiempos en la Tabla 1.

Modifica el programa funcion.c de manera que por medio de la librería Posix1,

cree hilos y aproveche la capacidad de un procesador Multicore, reflejándose así en

una mejora en el tiempo requerido para realizar todos los cálculos y mostrar los

valores de p, q, r, s encontrados que evalúan la función dando como resultado 0.5.

1.4 Tiempos de ejecución.

Basándote en las actividades previamente realizadas compara los tiempos de

ejecución.

Procesador Tiempo

antes de

Paralelizar

función.exe

Tiempo

después de

Paralelizar función.exe

Single Core

Dual Core

Quad Core

Tabla 1.- Comparación de rendimiento de las aplicaciones en diferentes procesadores antes y después de

paralelizar.

1 Puede implementarse una librería de manejo de hilos propia a partir de la llamada al sistema clone.

Page 12: 01-Paralelizacion de Aplicaciones Que Requieren CPU Con Hilos de Windows

Paralelización de aplicaciónes que requieren uso intensivo del CPU para plataformas Multicore usando hilos en Windows.

Sistemas Distribuidos, Otoño 2010

12

V EVALUACIÓN

1 Equipos

Esta práctica se hará en equipos (máximo 2 integrantes), es necesario que en la

revisión esté el equipo completo ya que el integrante que no se presente no tendrá

calificación en la práctica.

2 Entrega

Los reportes en un archivo PDF con las pantallas de Parallel Amplifier de la

actividad IV1.2 y los experimentos que se piden en la parte IV1.4. Los programas

que se piden en las parte IV1.3 con hilos optimizado para procesadores Core 2 Duo

y Core 2 Quad se entregarán los archivos fuentes en un archivo .ZIP a través del

apartado correspondiente en Moodle hasta el día Miércoles 8 de Septiembre a las

11:55 PM.

No incluya líneas de código en sus programas de

las cuales desconozca su funcionamiento. El

código no conocido será anulado en el

funcionamiento de la práctica.

Page 13: 01-Paralelizacion de Aplicaciones Que Requieren CPU Con Hilos de Windows

Paralelización de aplicaciónes que requieren uso intensivo del CPU para plataformas Multicore usando hilos en Windows.

Sistemas Distribuidos, Otoño 2010

13

3 Evaluación

Puntualidad en

la entrega

El producto fue entregado a tiempo y de

acuerdo a las especificaciones/formato de

entrega.

Si son dos o más sesiones de revisión

muestra los avances solicitados en todas

las sesiones

El producto que se entregó a tiempo

tiene alguna falla y solicitan que se les

revise una versión más nueva o no fue

entregado de acuerdo a las

especificaciones/formato de entrega o

en alguna de las sesiones de revisión

no tenían los avances esperados.

El producto fue entregado con un

retraso de hasta 48 horas máximo a la

fecha de entrega.

+10 0 -10

Revisiones

El equipo estuvo completo y puntual en

todas las sesiones de revisión.

Si hubo dos o más sesiones con el

equipo, el equipo estuvo completo y

puntual en casi todas las sesiones de

revisión

Si solo hubo una sesión de revisión, el

equipo no estuvo completo o no fue

puntual. Si fueron dos o más sesiones

de revisión, en más de una sesión el

equipo no estuvo completo o fue

puntual

+5 0 -5

Funcionamiento

El producto cumple con todas las

especificaciones indicadas en el

documento y no tiene fallas

El producto muestra una falla no

esperada o el producto está casi

completo, puede funcionar excepto la

parte no completada

El producto muestra más de una falla

inesperada o no funciona, esto puede

ser debido a que no esté completo.

+25 0 -25

Interfaz con el

usuario

El producto funciona y pudo ser utilizado

sin necesidad de recibir indicaciones por

el desarrollador, tiene instrucciones claras

para ser utilizado.

El producto funciona, pero hubo

necesidad de recibir alguna indicación

para su uso por parte del desarrollador

del producto

El producto carece de instrucciones

claras para ser utilizado y requiere que

alguno de los desarrolladores esté

presente para su utilización o no puede

utilizarse debido a que no está

completo

+5 0 -5

Claridad en el

código

El código es claro, usa nombres de

variables adecuadas, está debidamente

comentado e indentado. Puede ser

entendido por cualquier otra persona que

no intervino en su desarrollo.

El código carece de claridad, puede ser

entendido por cualquier persona ajena

a su desarrollo pero con cierta

dificultad.

El código carece de comentarios, está

mal indentado, usa nombres de

variables no adecuadas.

+5 0 -5

Conocimiento

del producto

Todos los integrantes son capaces de

explicar cualquier parte del producto

presentado

Alguno de los integrantes muestra

dudas sobre alguna parte del desarrollo

del producto presentado

Más de un integrante, o si el trabajo

fue individual , el desarrollador duda

sobre cómo está desarrollado producto

+50 0 -50

Honestidad El código que presentan es claramente

desarrollado por los integrantes del

equipo. No hay códigos parecidos

Al menos hay un código parecido, y/o

hay evidencia de colaboración entre

equipos.

Hay dos o más códigos parecidos y

hay evidencia de colaboración entre

equipos.

0 -50 -100

Sobresaliente 20

%

Tiene 1 en todos los puntos anteriores.

El producto entregado es sobresaliente,

muestra tener la calidad para ser expuesto

como un producto representativo de la

carrera

Hay evidencia de que los desarrolladores

se documentaron y muestran aprendizajes

más allá de lo esperado

No tiene 1 en todos los puntos

anteriores, o

el producto entregado no es

sobresaliente y no muestra tener la

calidad para ser expuesto como un

producto representativo de la carrera o

no

hay evidencia de que los

desarrolladores se documentaron y

muestran aprendizajes más allá de lo

esperado

+20

0