You are on page 1of 4

Optimizacin de cdigo de un AG distribuido en GPGPU

Castro Liera Iliana*, Grande Garca Jess Felipe*, Lpez Guzmn Guadalupe Aracely*, Martnez Valencia Oscar Omar*, Prez Chong Jos Adrin* *Instituto Tecnolgico de La Paz, Blvd. Forjadores de Sudcalifornia #4720, CP 23080, La Paz, B. C. S., Mxico (Tel: (612) 12104-24 ext. 116 email: icastro@itlp.edu.mx) Resumen: El presente trabajo describe la reduccin de tiempos de ejecucin lograda al incrementar la paralelizacin de una implementacin de algoritmo gentico en unidades de procesamiento grfico de propsito general (GPGPU, por sus siglas en ingls). Palabras claves: Optimizacin, CUDA, AG, GPGPU 1. INTRODUCCIN determinar a los individuos que formarn la siguiente poblacin Pg+1, donde g es el nmero de generaciones iteraciones que se han ejecutado. Generalmente, el criterio de parada es el arribo a una generacin gmax, fijada antes de iniciar el algoritmo. (Castro, 2011). Cada cierta cantidad de generaciones se ejecuta el proceso de migracin; el cual consiste en enviar al mejor individuo de cada poblacin a su poblacin vecina, para que su material gentico se combine con el resto de sus individuos. 2. CMPUTO PARALELO EN CUDA

El presente trabajo muestra el resultado de mejorar la implementacin de un algoritmo gentico utilizando unidades de procesamiento grfico de propsito general (GPGPU, por sus siglas en ingls) con CUDA, cuyos resultados originales haban sido reportados en (Castro, 2011). La tarea de optimizar implica determinar los valores para una serie de parmetros de tal manera que, bajo ciertas restricciones, se satisfaga alguna condicin. La optimizacin es muy importante en muchos campos y especialidades e implica tareas tanto de minimizacin como de maximizacin: el ms grande, el ms pequeo, el menos caro, por citar algunos ejemplos. Y en algunos casos la velocidad con la que se encuentra este valor ptimo puede incidir en el xito o fracaso de un proceso. Los algoritmos genticos (AG), en su versin original, basan su comportamiento en la evolucin de las especies, en donde sobreviven los individuos ms adaptados al entorno. (Vose, 1999). El concepto central de los algoritmos genticos es el de poblacin, que se define como un conjunto de individuos Ai, donde i=1,, . Los algoritmos genticos distribuidos (Nowostaki y Poli, 1999) inician con n poblaciones Pg de m individuos, generadas de forma aleatoria. Posteriormente, de manera iterativa se calcula la aptitud de sus individuos y se aplican los operadores genticos (seleccin, cruce y mutacin) para

El desarrollo de aplicaciones en paralelo ya no est restringido slo a aplicaciones que se realizan en grandes y costosos equipos de cmputo. En 2006 NVIDIA lanz el compilador CUDA C, el primer lenguaje de programacin para desarrollar aplicaciones de propsito general sobre una GPU; con la finalidad de captar la mayor cantidad de programadores posibles que adoptasen esta arquitectura. CUDA C es un lenguaje muy similar a C, al cual se le agregaron un conjunto de instrucciones que hacen posible la programacin en paralelo en un solo equipo de cmputo. En la Figura 1 se muestra una comparacin de la cantidad de operaciones de punto flotante realizadas por una CPU y una GPU en doble y simple precisin, que ilustra de manera clara la superioridad de la GPU. (NVIDIA Corp., 2012)

paralelizacin de grano grueso orientada a las tareas, tambin conocida como paralelizacin orientada a los hilos. En la actualidad, existen interfaces de CUDA con lenguajes como Fortran, Java, Phython y lenguajes .NET que pueden ser ejecutadas en plataformas Linux, MacOS o Windows. (NVIDIA Corp.) 3. OPTIMIZACIN DE CDIGO

3.1. Anlisis del cdigo anterior. Fig. 1. Operaciones de punto flotante por segundo. La razn de que la GPU sea tan superior es que est diseada para realizar computacin-intensiva, altamente paralela y por ello est dotada de mayor cantidad de transistores que se dedican al procesamiento de datos en las unidades aritmticolgicas (ALU) en lugar de almacenar datos en cache o controlar el flujo de informacin, como se muestra en la Figura 2. (NVIDIA Corp., 2012) En la versin original del cdigo del AG cada poblacin de individuos se proces en bloque y cada hilo proces un individuo. Se paralelizaron los operadores de seleccin, mutacin y migracin. El cruce se realiz en la GPU, utilizando un solo hilo para procesar todos los individuos. La migracin se llev a cabo con un periodo del 10% del total de generaciones y una tasa de migracin (MR) del 3% de la poblacin. En el siguiente pseudocdigo se muestra la asignacin de tareas y se ilustra qu parte se ejecuta en la CPU y cul se ejecuta en la GPU:
CPU: Lanza el kernel para Crear BLK poblaciones para i = 1 hasta GMAX/PMB Lanza kernel AG Lanza kernel Ordenar Lanza kernel Migracin Recibe la mejor posicin de las BLK poblaciones Despliega la mejor posicin global como la solucin del problema de optimizacin. GPU: KERNEL Crear para i=1 hasta MU inicializa Xi y Fi KERNEL AG G = 0; Mientras que (G<PMB) G = G+1 ejecuta seleccin para i = 1 hasta tamao_poblacin ejecuta cruce por torneo ejecuta mutacin KERNEL Ordenar para i=1 hasta MU para j=2 hasta MU-1 si Xj mejor que Xi intercambia(Xi,Xj) KERNEL Migracin Para i=0 hasta MR-1 Xi = XMR-i Fi = FMR-i

Fig. 2. Comparacin entre CPU y GPU. Puesto que cada elemento de procesamiento posee sus propias localidades de memoria, no se requiere habilitar un control de flujo sofisticado. Adems, la latencia por accesos a memoria se disminuye. En la arquitectura de CUDA se visualizan los siguientes elementos: Threads, hilos: Donde se ejecutan las funciones. Los hilos pueden procesarse simultneamente y cuentan con memoria local para almacenar sus datos. Blocks, bloques: Un conjunto de hilos que se ejecutan en un multiprocesador. Grid, malla: Un conjunto de bloques. Cada malla se ejecuta sobre una GPU distinta y cuenta con memoria accesible para todos los bloques que la componen. Pequeas adiciones al estndar de C permiten paralelizar el problema, ya sea con una paralelizacin de grano fino orientada a los datos o una

Primeramente se orden la poblacin, para poder migrar los MR mejores del bloque siguiente en los

MR peores individuos del bloque actual (ubicados al final del bloque), Figura 3.

Donde MU = Tamao de la poblacin PC = Probabilidad de cruce D = Dimensiones La mejora consisti en realizar los clculos de las dimensiones en paralelo, consiguiendo as optimizar el cdigo. Los ndices j y k son compartidos por todos los hilos de la malla, para poder calcular las nuevas posiciones y aptitudes de los individuos Aj y Ak.
__shared__ int j, k; CZ=MU+PC/2; for(i=0;i<CZ;i++) { if(hilo==1) { selecciona aleatoriamente posiciones j,k } sincronizar_hilos(); if(hilo<D) { Cruza dimensin del d(id del hilo) para Aj y Ak } sincronizar_hilos(); if(hilo==1) { calcula nueva aptitud de Aj; calcula nueva aptitud de Ak; } }

Figura 3. Migracin. 3.2. Procedimiento de optimizacin. Al analizar el cdigo original, se encontraron secciones en las que, aun cuando se ejecutaban en la GPU, slo trabajaba un hilo. A continuacin se describen los procesos que fueron susceptibles de optimizar: 1. El intercambio del mejor individuo de la poblacin siguiente y actual. En el cdigo anterior se utilizaba un ciclo for como el que se muestra en el siguiente segmento de cdigo, para intercambiar las D dimensiones del individuo.
if(hilo==(THR-1)) { //copia en mejor_aptitud el mejor //individuo de la poblacin actual mejor_aptitud=mejor_pob[bloque]; for(j=0; j<D; j++) //y sus dimensiones mejor_posX[j]=mejor_pos_pob[bloque*D+j]; }

4.

FUNCIONES DE PRUEBA

Se optimizaron las funciones de Rastrigin y Ackley, en 30 dimensiones, propuestas en la Competencia de Computacin Evolutiva (CEC05) (Sugantan, 2005). La funcin de Rastrigin (1) es una funcin escalable, separable, multimodal con un ptimo global en el origen y gran cantidad de ptimos locales. De acuerdo al CEC05, el espacio de bsqueda es en el intervalo [-5,5] D, donde D representa la cantidad de dimensiones del espacio de bsqueda.

Tomando en consideracin lo anterior, la propuesta es utilizar D hilos para llevar a cabo el intercambio.
if(hilo<D) { //y sus dimensiones mejor_posX[hilo]=mejor_pos_pob[bloque*D+hilo]; } _syncthreads();

2. El operador gentico de cruce: Originalmente se implementaba por medio de un solo hilo:


CZ=MU*PC/2; if(hilo==1) { for(i=0;i<CZ;i++) { selecciona aleatoriamente individuos Aj, Ak for(d=0; d<D; d++) { cruza dimensin d de ambos indiviuos } calcula nueva aptitud de Aj; calcula nueva aptitud de Ak; } }

f ( x )= ( x i 210 cos ( 2 x i)+ 10 )


i =1

(1)

La funcin de Ackley (2) es un problema multimodal, no-separable y escalable. Tiene un ptimo local en el origen y un rea de decremento muy pequea cercana al punto ptimo. El espacio de bsqueda se define en el intervalo [-32,32] para cada dimensin D.
f ( x )=20 exp (0.2

1 D

x i ) exp (

i= 1

1 D cos ( 2 x i ))+ 20 + e D i=1

(2 )

5.

RESULTADOS

En la implementacin se utiliz Visual Studio 2008 en Windows 7 de 32 bits y las libreras de CUDA C versin 4.2, con un microprocesador Intel Core i5 650 @ 3.20GHz, 4 GB de memoria RAM a 1333 MHz, con una tarjeta de grficos NVIDIA GeForce GTX 460 con 1GB de memoria global total, 7 multiprocesadores, 336 ncleos Cuda y una frecuencia de reloj de 810 MHz. En correspondencia con los resultados mostrados por Castro (2011), se generaron 14 poblaciones con 64 individuos, un periodo migratorio del 10% del total de generaciones, probabilidad de cruce pc de 0.16, probabilidad de mutacin pm de 0.7, tamao del torneo z de 2. En la Tabla I se muestran los resultados obtenidos para las funciones propuestas con AG, ejecutando 1500 muestras, y se contrastan con los resultados reportados por Castro (2011). Tabla I. Resultados para 14 poblaciones de 64 individuos (AG).
Tiempo de ejecucin en segundos. Funcin. Rastrigi n Ackley Cdigo Original. 4.33 22.99 Cdigo Optimizado. 2.37 18.40 % Mejora 45% 20%

de ejecucin; que para el caso de la funcin de Rastrigin fue del 45% respecto al tiempo original. La funcin de Ackley, debido a la complejidad de sus trminos, reflej una disminucin menor. 6. CONCLUSIN.

Los resultados obtenidos comprobaron la disminucin del tiempo de ejecucin que se predijo al momento de plantear la posibilidad de modificar algunas secciones del cdigo original, que no estaban haciendo uso de la paralelizacin por medio de CUDA. CUDA es una herramienta que brinda grandes posibilidades para el cmputo en paralelo a bajo costo. La programacin en paralelo requiere un cambio de pensamiento respecto a la programacin lineal. Es muy importante reestructurar las ideas en forma paralela, ya que la efectividad del procesamiento en paralelo depende de ella. REFERENCIAS. Castro, I., (2011) Paralelizacin de Algoritmos de Optimizacin Basados en Poblaciones por Medio de GPGPU, Tesis de Maestra, Instituto Tecnolgico de La Paz, 112 pginas, B.C.S, Mxico. NVIDIA Corp., (2012) CUDA C Programming Guide., NVIDIA Cor., 173 pginas, Santa Clara California. Version 4.2. Nowostaki, M. y Poli R., Parallel Genetic Algorithm Taxonomy. In Third International Conference of Knowledge-Based Intelligent Information Engineering Systems, 1999. Sugantan, P. N., N. Hansen, et al. (2005). Problem Definitions and Evaluation Criteria for the CEC 2005, Special Session on RealParameter Optimization. 50 pginas, Singapore, Kanpur Genetic Algorithms Laboratory, Nanyang Technological University. Vose, M.D., (1999), The Synple Genetic Algorithm: Foundations and Theory. MIT Press.

Tambin se realizaron pruebas en computadoras con las siguientes caractersticas: core i5 2500 a 3.3Ghz, 4 GB de memoria RAM a 1333Mhz, con una tarjeta grfica NVIDIA GeForce GTX 670 con 2GB de memoria global total, 7 multiprocesadores, 1344 ncleos Cuda y una frecuencia de reloj de 1.03GHz. Obteniendo los resultados que se muestran la Tabla II. Tabla II. Resultados para 14 poblaciones de 64 individuos (AG) con GTX 670.
Tiempo de ejecucin en segundos. Funcin. Rastrigi n Ackley Cdigo Original. 2.45 18.54 Cdigo Optimizado. 1.31 16.69 % Mejora 46% 10%

En ambos casos se observa que la optimizacin de cdigo se refleja en una disminucin de los tiempos

You might also like