01-Paralelizacion de Aplicaciones Que Requieren CPU Con Hilos de Windows
-
Upload
rodrigo-pulido -
Category
Documents
-
view
263 -
download
2
Transcript of 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));
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
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.
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
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
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.
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
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
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
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
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.
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.
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