Reto Intel 5.

Anuncio
Reto Intel V
Noviembre 2008
Reto Intel 5.
Antecedentes
Durante el año 2006 y 2007, académicos del ITESO han participado en
seminarios organizados por INTEL para dar a conocer y promover la
tecnología multicore. Con el objetivo de compartir esto con alumnos del
ITESO y de otros centros universitarios, se organizó el Primer Reto INTEL
durante los Concursos de Programación del ITESO celebrados en Octubre
de 2006. Los alumnos que compitieron en el Concurso Local del ITESO
bajo las reglas de la ACM, tuvieron pase gratuito a este evento. La
competencia fue individual. Los premios en esta ocasión fueron una
computadora portátil Apple Dual Core y dos iPOD. Este evento fue apoyado
por INTEL Educación.
Debido al éxito del primer certamen, durante la Eliminatoria Regional del
ACM ICPC 2006-2007, en la sede ITESO, este centro universitario e INTEL
Educación acordaron organizar el Reto INTEL II, para continuar
promoviendo la tecnología multicore. Los equipos inscritos en la sede
ITESO tuvieron pase gratuito a este evento. La competencia fue por equipos.
El premio fue una computadora portatil Apple Dual Core.
En el ENCA 2007, que tuvo como sede al ITESO, Universidad Jesuita de
Guadalajara no fue la excepción. El primer día del ENCA 2007 se lanzó el
Reto INTEL III, y en Septiembre de ese mismo año durante la semana de
Ing. En Sistemas Computacionales se llevó a cabo el Reto Intel IV.
Objetivo
El objetivo del reto es que el participante pueda optimizar un programa que
requiere hacer uso intensivo del CPU, para que su ejecución aproveche las
ventajas de la arquitectura MultiCore.
Reto Intel V
Noviembre 2008
Forma de participación
Individual1
Requisitos para participar
• Ser alumno de nivel preparatoria, licenciatura o primer semestre de
posgrado.
• Programación estructurada en Lenguaje C con el compilador Intel®
C/C++.
• Recomendable: Participar en el seminario relacionado con tecnologías
Multicore que se impartirá el lunes 3 de Noviembre.
Entrega
Al inscribirse en el Reto Intel® 5 le será asignado un número a cada
participante. La entrega será enviando únicamente el código fuente a
través de correo electrónico [email protected], donde el
nombre del archivo deberá ser sortXX.cpp donde XX es tu número de
competidor asignado. El tiempo límite para entregar es las 2:00 AM
Premio
El premio que se le otorgará al participante ganador será una computadora
Laptop Dell Core 2 Duo.
Criterios para determinar el ganador
El ganador será el concursante que logre más puntos basándonos en los
siguientes criterios:
1
Se entiende que al ser participación individual no se permite ningún tipo de colaboración.
Reto Intel V
Noviembre 2008
Pts = TE - PNO
1. TE = Puntos Tiempo de ejecución = (50 – t)2 donde t es el tiempo que
se lleva la ejecución de la versión ya optimizada. Para evaluar este
tiempo de ejecución el jurado hará la ejecución con el número de
elementos en los que una ejecución del caso base2 tome 50 segundos.
Ejecuciones mayores a 50 segundos quedan descalificadas.
2. PNO = Puntos restados por ejecución no optimizada en paralelo
(considerando una arquitectura de dos núcleos) = Punto porcentual *
25. Este puntaje se considerará a partir de donde inicia la
paralelización del código, se medirá con Intel® Thread Profiler3y se
considerarán todos los porcentajes que esta herramienta indique como
no utilización completa del procesador, sobrecarga y ejecución serial.
Para hacer la evaluación de este puntaje, el jurado ejecutará el
programa en una arquitectura de dos núcleos y con un número de
elementos muy alto que incluso puede ser el valor máximo.
De esta manera el máximo de puntos es 2500 y no se consideran puntajes
menores a 0.
Jurado:
• José Luis Elvira Valenzuela (Presidente), ITESO.
• Víctor Hugo Zaldivar Carrillo, ITESO.
• Miguel Bazdresh Sierra, ITESO.
El jurado se reserva el derecho de descalificar aquellos proyectos que
presenten errores en los resultados ejecución o presenten errores potenciales
en la ejecución paralela4.
2
El caso base es el programa que se muestra en la Figura 1.
Intel® Thread Profiler es una herramienta que permite encontrar problemas de rendimiento en una
aplicación paralela. Los problemas principales pueden ser: sobrecarga, subutilización y ejecución serial por
contención de objetos de sincronización (locks, semáforos, etc.), balanceo de carga, etc.
4
Los errores potenciales en la ejecución paralela pueden ser detectados mediante la herramienta Intel®
Thread Checker, aunque estos no ocurran durante la ejecución.
3
Reto Intel V
Noviembre 2008
El jurado se reserva el derecho de descalificar a todos aquellos participantes
que no cumplan con las normas establecidas en el concurso.
El jurado se reserva el derecho de decretar empate técnico si considera que
la diferencia entre dos o más soluciones no es lo suficiente significativa y
tiene la facultad para determinar un criterio o procedimiento de desempate.
Uno de los criterios de desempate podrá ser el tiempo de entrega.
El jurado se reserva el derecho de decretar el premio desierto si considera
que ninguno de los participantes cumple con los requisitos para obtener el
premio.
La decisión del jurado es final e inapelable.
Reto Intel V
Noviembre 2008
Problema
Descripción
Un programa, en este caso un sort puede ordenar desde 100,000 hasta
10,000,000 millones de números enteros que están en un arreglo.
El caso base que se presenta en la Figura 1 es el algoritmo del sort de
burbuja. Este programa obtiene de los parámetros de la línea de comandos la
cantidad de elementos a ordenar que puede ser desde 100,000 hasta
10,000,000. Si no se especifica ningún parámetro tomará un valor por
default, en este caso 200,000. Ejemplo:
C:\directorio actual> Sort 1000000
Ordenará 1,000,000 de elementos.
Los elementos que ordena este sort son números aleatorios generados al
inicio de la ejecución, que son almacenados en un arreglo. Después llamará
la función sort() que es la función a optimizar. Al final el programa
solamente revisará que no haya errores en el ordenamiento comprobando
que en el arreglo siempre después de un elemento no hay uno que sea mayor
a el.
Actividad
Crea una función sort de manera que el resultado sea una ejecución óptima
en tiempo y que saque provecho de las arquitecturas Multicore.
Requisitos
• La paralelización deberá hacerse utilizando OpenMP.
• El programa ejecutable deberá poder ser generado con el compilador
Intel® C++ bajo la plataforma Windows*.
Reto Intel V
Noviembre 2008
• La primera línea del código debe ser un comentario que indique tu
número de competidor.
• El nombre del archivo fuente deberá ser sortXX.cpp donde XX es
tu número de competidor asignado.
Restricciones
Tu solución propuesta deberá estar encapsulada en la función sort() de
manera que no deberás modificar ninguna de las líneas de código que en este
listado estén señaladas en color rojo.
Sí está permitido agregar variables globales u otras funciones que necesites
llamar desde la función sort().
Recomendaciones
El número de hilos deberá ser igual al número de procesadores. No
sobrecargues al sistema operativo creando más hilos que núcleos del
procesador. El tener más hilos que núcleos lo detecta como sobrecarga el
analizador de rendimiento Intel® Thread Profiler que es la herramienta que
el jurado utilizará para calificar el porcentaje de ejecución con utilización
completa de los núcleos del procesador.
// Tu número de competidor va aquí
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#define
#define
#define
#define
MAXELEMS 10000000
DEFELEMS 200000
MINELEMS 100000
CORES 2
int elem[MAXELEMS];
int elems;
void sort(int *inicio, int elems);
// Aquí puedes agregar variables globales y/o predefinición de
funciones.
Reto Intel V
Noviembre 2008
int main(int argc,char *argv[])
{
int i;
int errores=0;
clock_t before, after;
if (argc==1)
elems=DEFELEMS;
else if(argc==2)
{
elems=atoi(argv[1]);
if(elems<MINELEMS || elems>MAXELEMS)
{
printf("Número inválido, el mínimo es %d y el máximo
es %d\n",MINELEMS,MAXELEMS);
exit(1);
}
}
else
{
printf("Número inválido de argumentos\n");
exit(1);
}
printf("Ordenando %d elementos\n",elems);
// Inicializa el arreglo con números random
srand(100);
for(i=0;i<elems;i++)
elem[i]=rand();
before = clock();
sort(elem,elems);
after = clock();
printf("Termina sort \n");
// Revisa errores
for(i=0;i<elems-1;i++)
if(elem[i]>elem[i+1])
{
errores++;
printf("elem[%d] = %d <--> elem[%d] =
%d\n",i,elem[i],i+1,elem[i+1]);
}
printf("Errores %d\n",errores);
printf("El tiempo fue : %7.2f segs\n",(float)(after - before)/
CLOCKS_PER_SEC);
}
// A partir de aquí puedes modificar y agregar funciones
void sort(int *inicio, int elems)
Reto Intel V
Noviembre 2008
{
int i,j;
int temp;
for(i=0;i<elems-1;i++)
for(j=i+1;j<elems;j++)
{
if(inicio[i]>inicio[j]) {
temp=inicio[i];
inicio[i]=inicio[j];
inicio[j]=temp;
}
}
return;
}
Figura 1.- Sort de burbuja.
Descargar