15
J ORNADAS SARTECO ACTAS DE LAS J ORNADAS DE P ARALELISMO - JP2015 23, 24 Y 25 DE SEPTIEMBRE DE 2015 CÓRDOBA JP2015

Actas de las Jornadas de Paralelismo, JP 2015JORNADAS DE PARALELISMO Actas XXVI EDICIÓN DE LAS JORNADAS DE PARALELISMO (JP2015), 23, 24 y 25 de septiembre de 2015 Córdoba Editores:

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Actas de las Jornadas de Paralelismo, JP 2015JORNADAS DE PARALELISMO Actas XXVI EDICIÓN DE LAS JORNADAS DE PARALELISMO (JP2015), 23, 24 y 25 de septiembre de 2015 Córdoba Editores:

JORNADAS SARTECO

ACTAS DE LAS

JORNADAS DE PARALELISMO - JP201523, 24 Y 25 DE SEPTIEMBRE DE 2015

CÓRDOBA

JP20

15

Page 2: Actas de las Jornadas de Paralelismo, JP 2015JORNADAS DE PARALELISMO Actas XXVI EDICIÓN DE LAS JORNADAS DE PARALELISMO (JP2015), 23, 24 y 25 de septiembre de 2015 Córdoba Editores:

2

Page 3: Actas de las Jornadas de Paralelismo, JP 2015JORNADAS DE PARALELISMO Actas XXVI EDICIÓN DE LAS JORNADAS DE PARALELISMO (JP2015), 23, 24 y 25 de septiembre de 2015 Córdoba Editores:

JORNADAS DE PARALELISMO

ActasXXVI EDICIÓN DE LAS JORNADAS DE PARALELISMO (JP2015),

23, 24 y 25 de septiembre de 2015Córdoba

Editores:María Brox Jiménez

José María Castillo SecillaJuan Carlos Gámez Granados

Andrés Gersnoviez MillaJuan Gómez Luna

Ezequiel Herruzo GómezFernando León García

Carlos Diego Moreno MorenoJoaquín Olivares Bueno

José Manuel Palomares MuñozJosé Manuel Soto Hidalgo

ISBN:978-84-16017-52-2

Page 4: Actas de las Jornadas de Paralelismo, JP 2015JORNADAS DE PARALELISMO Actas XXVI EDICIÓN DE LAS JORNADAS DE PARALELISMO (JP2015), 23, 24 y 25 de septiembre de 2015 Córdoba Editores:

4

Page 5: Actas de las Jornadas de Paralelismo, JP 2015JORNADAS DE PARALELISMO Actas XXVI EDICIÓN DE LAS JORNADAS DE PARALELISMO (JP2015), 23, 24 y 25 de septiembre de 2015 Córdoba Editores:

JORNADAS SARTECO - JS2015

Comité de Dirección de las Jornadas SARTECORamén Doallo Biempica (UDC) (Vicepresidente)Inmaculada García Fernández (UMA) (Presidenta)

Katzalin Olcoz Herrero (UCM) (Secretaria)Francisco Tirado Fernández (Presidente de Honor)

Organizadores Jornadas Sarteco 2015 y Comité JP 2015María Brox Jiménez (UCO)

José María Castillo Secilla (UCO)Juan Carlos Gámez Granados (UCO)

Andrés Gersnoviez Milla (UCO)Juan Gómez Luna (UCO)

Ezequiel Herruzo Gómez (UCO)Fernando León García (UCO)

Carlos Diego Moreno Moreno (UCO)Joaquín Olivares Bueno (UCO)(Presidente)

José Manuel Palomares Muñoz (UCO)José Manuel Soto Hidalgo (UCO)

Comité JCRA 2015Sergio Cuenca Asensi (UA) (Presidente)

Ignacio Bravo (UAH)José Ignacio Martínez Torre (URJC)

Joaquín Olivares Bueno (UCO)Gustavo Sutter (UAM)

Comité JCE 2015Jesús González Peñalver (UGR) (Presidente)

Jesús Barba Romero (UCLM)Miguel Damas Hermoso (UGR)

Gustavo Marrero Callico (U. Las Palmas)Antonio Martínez álvarez (UAL)Jorge Portilla Berrueco (UPM)

Francisco Ramos Peñuela (PlaneTIC)Goiuria Sagardui Mendieta (U. Mondragón)

Miguel A. Vega Rodríguez (UNEX)

Comité CPP 2015Domingo Giménez Cánovas (UM) (Presidente)

Javier Cuenca (UM)Ricardo Fernández (UM)

Luis Pedro García González (UP Cartagena)José Ranilla (UNIOVI)

Page 6: Actas de las Jornadas de Paralelismo, JP 2015JORNADAS DE PARALELISMO Actas XXVI EDICIÓN DE LAS JORNADAS DE PARALELISMO (JP2015), 23, 24 y 25 de septiembre de 2015 Córdoba Editores:

II

Page 7: Actas de las Jornadas de Paralelismo, JP 2015JORNADAS DE PARALELISMO Actas XXVI EDICIÓN DE LAS JORNADAS DE PARALELISMO (JP2015), 23, 24 y 25 de septiembre de 2015 Córdoba Editores:

VII

ÍNDICE DE ARTÍCULOS

Representación del PipeLine como Composición de Objetos Paralelos para la implementación de un algoritmo deordenación 1

Mario Rossainz López, Manuel I. Capel Tuñón, Patricia Dominguez Mirón y Ivo Pineda Torres . . . . . . . . .

Paralelizando una Evolución Diferencial Multiobjetivo Híbrida para Identificar Elementos cis-Reguladores 8David L. González-Álvarez, Miguel A. Vega-Rodríguez y Álvaro Rubio-Largo . . . . . . . . . . . . . . . . . . .

Temporal-Aware TLB-Based Private Page Classification in CMPs 14Albert Esteve, Alberto Ros, Maria Gomez y Antonio Robles . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Profundizando en el desarrollo de la competencia de trabajo en grupo 24Carlos Calafate, Alvaro Torres y Joaquim Arlandis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Metaheurística Multiobjetivo Paralela para el Alineamiento Múltiple de Secuencias 31Álvaro Rubio-Largo, Miguel A. Vega-Rodríguez y David L. González-Álvarez . . . . . . . . . . . . . . . . . . .

Usando GPUs para Acelerar Reconstrucciones Filogenéticas bajo el Criterio de Parsimonia 38Sergio Santander-Jiménez, Aleksandar Ilic, Leonel Sousa y Miguel A. Vega-Rodríguez . . . . . . . . . . . . . .

Política de Refresco Selectiva para Memorias Cache eDRAM 45Alejandro Valero, Julio Sahuquillo, Salvador Petit y José Duato . . . . . . . . . . . . . . . . . . . . . . . . . . .

Ensuring the delivery of data under mobility scenarios with MQTT protocol 54Jorge E. Luzuriaga, Miguel Perez, Pablo Boronat, Juan Carlos Cano, Carlos Calafate y Pietro Manzoni . . . . .

An Efficient MAC Protocol for vehicle platooning in automated highway systems 61Ali Balador, Annette Bohm, Elisabeth Uhlemann, Carlos Calafate, Yusheng Ji, Juan-Carlos Cano y Pietro Manzoni

Comparativa de políticas de selección de GPUs remotas en clusters HPC 67Sergio Iserte, Adrián Castelló, Rafael Mayo Gual, Enrique S. Quintana-Orti, Javier Prades, Carlos Reaño, Federico

Silla y Jose Duato . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

PS-Cache: Un diseño energéticamente eficiente para caches en CMPs 73Joan J. Valls, Alberto Ros, Julio Sahuquillo y María E. Gómez . . . . . . . . . . . . . . . . . . . . . . . . . . .

Algoritmo Adaptativo para la Decisión Rápida de Nivel para el Quadtree del Transcodificador H.264/HEVC 82Antonio Jesús Díaz Honrubia, José Luis Martinez, Pedro Cuenca, Jose M Puerta y Jose Gamez . . . . . . . . .

Resolviendo la ecuación de Poisson en un cluster de GPU 88José L. Jodra, Ibai Gurrutxaga y Javier Muguerza . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Paralelizando la evaluaci ÌAon del campo de helióstatos 93N.C. Cruz, J.L. Redondo, M. Berenguel y P.M. Ortigosa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Auto-scaling strategy for OpenStack cloud resources managed by TORQUE 97Óscar Torreño Tirado y Oswaldo Trelles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Virtualización de GPUs en entornos XEN usando rCUDA 102Javier Prades, Carlos Reaño, Federico Silla y Jose Duato . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Reducción del HoL-blocking con encaminamiento adaptativo 111Roberto Peñaranda, Crispin Gomez Requena, Maria Engracia Gomez y Pedro Lopez . . . . . . . . . . . . . . .

Planificación Orientada a Equidad Considerando el Progreso en Multinúcleos SMT 118Josué Feliu, Julio Sahuquillo, Salvador Petit y José Duato . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Difusión de mensajes en redes oportunísticas en espacios con alta concentración de personas 127Jorge Herrera-Tapia, Enrique Hernández-Orallo, Pietro Manzoni, Carlos Calafate, Juan-Carlos Cano y Oscar Alvear

Page 8: Actas de las Jornadas de Paralelismo, JP 2015JORNADAS DE PARALELISMO Actas XXVI EDICIÓN DE LAS JORNADAS DE PARALELISMO (JP2015), 23, 24 y 25 de septiembre de 2015 Córdoba Editores:

Usando GPUs para Acelerar ReconstruccionesFilogeneticas bajo el Criterio de Parsimonia

Sergio Santander-Jimenez1, Aleksandar Ilic2, Leonel Sousa2 y Miguel A. Vega-Rodrıguez1

Resumen— El empleo de tecnicas de programacioncon GPUs ha permitido lograr avances significativosen la resolucion de problemas computacionalmentecostosos en distintos ambitos cientıficos. En particu-lar, los ultimos avances en el ambito de la biologıacomputacional estan ıntimamente ligados a las posi-bilidades que brindan estos dispositivos de computoparalelo. En esta investigacion, exploramos el uso deGPUs para acelerar los procesos de evaluacion en losmetodos de inferencia filogenetica, los cuales buscandescribir hipotesis sobre la evolucion de las especies.En concreto, afrontamos la paralelizacion de una delas funciones objetivo mas conocidas en el ambito, lafuncion filogenetica de parsimonia, desarrollando unkernel para su computo en GPUs mediante el estandarOpenCL. Los experimentos realizados sobre seis basesde datos biologicas reales dan cuenta de los significati-vos factores de aceleracion obtenidos por la propues-ta, mejorando notablemente los tiempos de ejecucionrequeridos por otras estrategias del estado del arte.

Palabras clave— Computacion con GPUs, OpenComputing Language, Inferencia Filogenetica, Bioin-formatica

I. Introduccion

EN los ultimos anos, la programacion con GPUsha ido adquiriendo un rol cada vez mayor en el

area de la computacion de altas prestaciones [1]. Lacreciente disponibilidad de estos dispositivos, ası co-mo de otros aceleradores hardware, ha permitido in-cidir en el diseno de nuevas soluciones paralelas pa-ra afrontar problemas de alto coste temporal en unamplio rango de aplicaciones cientıficas [2]. En estesentido, la biologıa computacional representa uno delos dominios principales que pueden beneficiarse deeste tipo de tecnicas de programacion paralela.

Los avances en secuenciacion molecular han dadolugar a la generacion de cantidades ingentes de da-tos biologicos cuyo procesamiento representa un retosignificativo. En este contexto, es preciso remarcar lagran complejidad computacional mostrada por unavariedad significativa de problemas bioinformaticos,cuya resolucion mediante aproximaciones secuencia-les da lugar a tiempos prohibitivos. Afortunadamen-te, las aplicaciones bioinformaticas a menudo llevanimplıcito oportunidades de paralelismo de datos anivel de procesamiento molecular, lo cual explica elinteres actual en desarrollar estrategias heterogeneaspara minimizar los tiempos de ejecucion [3].

En este trabajo, exploramos el uso de GPUs pa-ra lidiar con uno de los problemas mas representa-

1Universidad de Extremadura, Departamento de Tecnologıade los Computadores y de las Comunicaciones, Escuela Po-litecnica. Campus Universitario s/n, 10003, Caceres, Espana.{sesaji, mavega}@unex.es

2INESC-ID, Instituto Superior Tecnico, Uni-versidade de Lisboa, 1000-029 Lisboa, Portugal{Aleksandar.Ilic,Leonel.Sousa}@inesc-id.pt

tivos en bioinformatica: la inferencia de arboles filo-geneticos que expliquen las relaciones evolutivas en-tre especies [4]. Se trata de un problema de optimiza-cion NP-completo, dado el crecimiento exponencialdel numero de posibles hipotesis filogeneticas con elnumero de organismos a estudiar. Ademas, los tiem-pos de evaluacion de soluciones crecen de maneralineal con la longitud de las secuencias molecularescaracterısticas de los organismos analizados. Las fun-ciones de evaluacion filogenetica, como la verosimili-tud y la parsimonia, presentan un inherente paralelis-mo de datos que explica los esfuerzos investigadoresen desarrollar kernels aceleradores de dichas funcio-nes. Podemos destacar las investigaciones de Suchardy Rambaut [5], quienes propusieron aproximacionesGPU y many-core para dar soporte a la herramientaBEAST, sentando las bases de la conocida librerıapara filogenetica de altas prestaciones denominadaBEAGLE. Otras aproximaciones trataron de acele-rar la conocida herramienta MrBayes, proponiendo-se estrategias con CPUs, Cell/BE y GPUs [6], im-plementaciones multiGPU [7], ası como evaluandoseel rendimiento bajo distintas plataformas de progra-macion GPU [8]. La paralelizacion de la funcion filo-genetica de verosimilitud en metodos no bayesianostambien ha sido objeto de estudio mediante GPUs ytecnicas de vectorizacion [9].

Esta investigacion se centra en la paralelizacionde la conocida funcion filogenetica de parsimonia. Elcriterio de parsimonia establece que la hipotesis evo-lutiva mas sencilla debe ser la preferida durante laexploracion del espacio de busqueda filogenetico, deacuerdo al principio de Ockham. Con respecto a laaceleracion hardware de esta funcion, la investiga-cion mas relevante se debe a Alachiotis y Stamatakis,quienes analizaron implementaciones FPGA y CPU(OpenMP+vectorizacion SSE3/AVX) en su propues-ta Parsimonator [10]. Siguiendo esta lınea, propone-mos en este trabajo la paralelizacion de esta funcionpara aceleradores GPUs mediante el estandar en pro-gramacion heterogenea OpenCL [11]. El diseno para-lelo GPU propuesto sera analizado mediante experi-mentacion sobre seis bases de datos biologicas reales,evaluando el rendimiento obtenido en terminos defactores de aceleracion con respecto a una imple-mentacion serie CPU. Ademas, discutiremos la bon-dad de la aproximacion mediante la comparacion conParsimonator, considerada la implementacion abier-ta mas rapida de la funcion de parsimonia.

Este artıculo esta organizado del siguiente modo.La Seccion II introduce los conceptos basicos de lainferencia filogenetica y formula la funcion de parsi-monia. La estrategia de paralelizacion GPU de dicha

38 JP 2015

Page 9: Actas de las Jornadas de Paralelismo, JP 2015JORNADAS DE PARALELISMO Actas XXVI EDICIÓN DE LAS JORNADAS DE PARALELISMO (JP2015), 23, 24 y 25 de septiembre de 2015 Córdoba Editores:

funcion es descrita en la Seccion III. Los resultadosexperimentales obtenidos son expuestos y evaluadosen la Seccion IV. Finalmente, la Seccion V define lasconclusiones del estudio y lıneas futuras de trabajo.

II. Inferencia Filogenetica y Parsimonia

Los procedimientos de inferencia filogenetica tra-tan de describir las relaciones evolutivas entre espe-cies mediante el estudio de las divergencias y simi-litudes encontradas en su informacion genetica [4].Las inferencias basadas en ADN toman como entradauna matriz de caracteres compuesta por N secuen-cias alineadas de nucleotidos de longitud M . Estassecuencias describen las caracterısticas geneticas delas especies cuya historia evolutiva se pretende infe-rir. Los caracteres en las secuencias de entrada pue-den tomar distintos valores de estado, dados por elalfabeto de bases nucleotidas (A,C,G,T), caractereshuecos o gaps (-), caracteres desconocidos (?), ası co-mo combinaciones de nucleotidos.

Mediante el estudio de estas secuencias, es posi-ble describir las relaciones ancestro-descendiente queexplican la diversidad observada en la matriz de en-trada. La historia filogenetica se modela como unaestructura arborescente T = (V, E), donde los nodoshojas representan las especies actuales descritas enlas secuencias y los nodos internos representan an-cestros hipoteticos. El conjunto de ramas E describelas relaciones evolutivas entre los nodos en V , de talmanera que la topologıa filogenetica proporciona unahipotesis sobre la sucesion de eventos evolutivos quedieron lugar a los organismos estudiados.

La reconstruccion de arboles filogeneticos se mode-la como un problema de optimizacion que pretendeencontrar el arbol que maximice o minimice un deter-minado criterio de calidad biologica. En este traba-jo, consideraremos el conocido criterio de la maximaparsimonia. Este criterio da preferencia a la hipote-sis evolutiva mas simple, representada por el arbolfilogenetico que minimiza el numero de cambios deestado de caracter entre especies emparentadas. Con-siderese un conjunto de datos compuesto por N se-cuencias de nucleotidos con M caracteres por secuen-cia. El valor de parsimonia para un arbol filogeneticoT = (V, E) viene dado por la siguiente expresion [4]:

P (T ) =

M∑

i=1

(a,b)∈E

C(ai, bi), (1)

donde (a, b) ∈ E representa una relacion ancestro-descendiente entre dos nodos a, b ∈ V , mientras queC(ai, bi) mide la divergencia observada en el caracteri-esimo entre a y b. El computo de la parsimonia pue-de llevarse a cabo mediante el algoritmo de Fitch [12].Este metodo, que asume que cada caracter evolucio-na de manera independiente, calcula P (T ) mediantela definicion de los conjuntos de estados de caracter Spor nodo que reduzcan el numero de cambios obser-vados a lo largo de la topologıa. En un primer paso,el algoritmo procede desde las hojas hasta la raız,calculando para cada nodo el conjunto de posibles

Fig. 1: Ejemplo de aplicacion del algoritmo de Fitch

estados para el caracter i-esimo Si como sigue. Paraun nodo hoja l, el conjunto Si(l) viene dado por elvalor li observado en la secuencia de entrada corres-pondiente al organismo l. Para un nodo interno u conhijos v y w, Si(u) se calcula aplicando lo siguiente:

Si(u) =

{Si(v) ∩ Si(w) si Si(v) ∩ Si(w) 6= 0,Si(v) ∪ Si(w) si Si(v) ∩ Si(w) = 0.

(2)

Esta expresion puede ser usada para determinarlos pasos evolutivos que implican un incremento en elvalor de parsimonia del arbol. Cuando la interseccionSi(v) ∩ Si(w) es no nula, esto implica que no se haproducido un evento de sustitucion (mutacion) en elcaracter i-esimo desde el ancestro a los descendientes,dado que los hijos han heredado dicho caracter delpadre. Por el contrario, si esta interseccion es vacıa,se ha producido una mutacion en el estado resultantede, al menos, uno de los hijos con respecto al estadooriginal del padre. Cuando se detecta esta situacion,el valor de parsimonia P (T ) debe incrementarse. LaFigura 1 muestra un ejemplo de este procedimiento.

El algoritmo de Fitch implica un segundo paso quedefine la asignacion final de estados finales para cadanodo interno. Empezando por la raız r, su estadofinal ri es establecido escogiendo cualquier valor deestado en Si(r). Para cada nodo interno posteriorv con ancestro u, se asigna a vi el valor ui si esteesta presente en Si(v). En caso contrario, vi tomaun valor cualquiera entre los contenidos en Si(v).

Este segundo paso puede ser ignorado si se preten-de utilizar este algoritmo exclusivamente para deter-minar el valor de parsimonia de una topologıa filo-genetica (el cual se calcula durante el primer paso del

XXVI EDICIÓN DE LAS JORNADAS DE PARALELISMO, JP 2015 39

Page 10: Actas de las Jornadas de Paralelismo, JP 2015JORNADAS DE PARALELISMO Actas XXVI EDICIÓN DE LAS JORNADAS DE PARALELISMO (JP2015), 23, 24 y 25 de septiembre de 2015 Córdoba Editores:

metodo). Ademas, la matriz de entrada puede conte-ner caracteres que no contribuyen a la parsimonia, losdenominados caracteres no informativos. Por ejem-plo, si el caracter j-esimo de las secuencias de entradamuestra el mismo valor de estado en cada organis-mo, los conjuntos Sj siempre incluiran dicho estadoy, por tanto, la parsimonia en el caracter j sera 0.Este trabajo se focaliza en la aceleracion del algorit-mo de Fitch para evaluaciones de parsimonia (primerpaso), considerandose conjuntos de datos biologicosdonde todos sus caracteres son informativos.

La inferencia filogenetica conforme al criterio deparsimonia es formulada como un problema NP-completo [13]. Esto se debe al ingente tamano delespacio de busqueda de arboles, que crece exponen-cialmente con el numero N de especies a analizar.Ademas, la longitud M de las secuencias da lugara crecimientos lineales de los tiempos de evaluacion,los cuales en el caso del algoritmo de Fitch puedenser aproximados como O(NM) [14]. Como resultadode la enorme cantidad de caracteres a procesar en lasbases de datos biologicas reales, los procedimientosde evaluacion resultan muy costosos temporalmente,consumiendo porcentajes superiores al 85% de la eje-cucion de las herramientas de busqueda filogenetica.Esta cuestion motiva el interes en aplicar paralelismopara minimizar los tiempos de ejecucion.

III. Paralelizacion GPU de la Funcion deParsimonia

A continuacion, detallamos la implementacion delalgoritmo de Fitch para calculos de parsimonia enGPU. Usaremos para ello el estandar OpenCL parala programacion de sistemas heterogeneos. En unaaplicacion OpenCL, una CPU host se encarga depreparar y asignar tareas a un dispositivo aceleradorcompuesto por multiples unidades de computo, cuyoselementos de procesamiento se encargan de ejecutarlas instrucciones de las tareas asignadas.

A. Consideraciones Generales

A la hora de paralelizar el algoritmo de Fitch, esnecesario tener presente una serie de cuestiones. Laprimera son las dependencias de datos mostradas poreste algoritmo a nivel de topologıa. Esto es, para unnodo interno u, el computo de su conjunto de estadosi-esimo Si(u) (ası como la actualizacion del valor deparsimonia en dicho nodo) requiere el calculo previode los conjuntos Si(v) y Si(w) de sus hijos v y w.Por otra parte, el algoritmo asume que cada caracteri evoluciona de manera independiente y, por tanto,es posible calcular en paralelo los conjuntos Si paralos distintos caracteres que conforman las secuencias.Al aplicar esta aproximacion, el valor de parsimoniapuede definirse en terminos de valores parciales Pi(T )para cada caracter i=1 hasta M .

El diseno paralelo propuesto toma como entradauna matriz de caracteres representando las secuen-cias de ADN a estudiar, ası como un conjunto denumArboles topologıas filogeneticas a evaluar con-forme al criterio de parsimonia. Esta implementa-

TABLA I: Codificacion de las secuencias de entrada

Caracter Hexadecimal DescripcionA 0x08 AdeninaC 0x04 CitosinaG 0x02 GuaninaT 0x01 TiminaM 0x0C Adenina o CitosinaR 0x0A Adenina o GuaninaW 0x09 Adenina o TiminaS 0x06 Citosina o GuaninaY 0x05 Citosina o TiminaK 0x03 Guanina o TiminaV 0x0E Adenina o Citosina o GuaninaH 0x0D Adenina o Citosina o TiminaD 0x0B Adenina o Guanina o TiminaB 0x07 Citosina o Guanina o Timina? 0x0F Estado desconocido- 0x10 Gap

cion considera una codificacion de las secuencias deentrada mediante valores hexadecimales, dada por laTabla I. Dicha codificacion permite aplicar eficientesoperaciones logicas a nivel de bit para llevar a ca-bo las operaciones de interseccion (AND) y union(OR) que requiere el algoritmo. Para almacenar lassecuencias, se considera un array de N ∗M caracteresque contiene las entradas de la matriz en una organi-zacion por filas (row-major), donde los primeros Melementos del array contienen la primera secuencia,los M siguientes la segunda y ası sucesivamente.

La representacion de las topologıas de entradase implementa utilizando la clase TreeTemplate dela librerıa de utilidades bioinformaticas para C++Bio++ [15]. A partir de estos objetos, definimos unaestructura optimizada especıficamente disenada parasu procesamiento a nivel de kernel. Dado que el algo-ritmo de Fitch opera principalmente sobre los nodosinternos, definimos una estructura cl node para co-dificar la informacion relativa a dichos nodos. Estaestructura presenta dos campos: un short que repre-senta el numero de nodos hijos del nodo codificadoy un array de enteros compuesto por los identifica-dores de los nodos hijos. En estos identificadores, seusara el bit mas significativo para distinguir entrenodos internos (1) y nodos hojas (0). De esta mane-ra, la topologıa procesada por el kernel vendra dadapor un array de elementos cl node, organizados deacuerdo al recorrido postorden del arbol de entradapara preservar las dependencias de datos.

El lado host de la aplicacion OpenCL se encar-gara de gestionar estas estructuras de datos, trans-firiendolas a la memoria del dispositivo GPU paraejecutar el kernel de parsimonia. En un primer pa-so, el host realizara la transferencia del conjunto dedatos codificado a la memoria de la GPU. Tras ello,cada iteracion de la aplicacion implicara la evalua-cion de una de las numArboles filogenias de entrada.Para ello, el host realizara la inicializacion y transfe-rencia del array topologico de elementos cl node, lallamada a la funcion de ejecucion del kernel median-te la cola de comandos y la recuperacion del valorde parsimonia calculado por el kernel. Dichas tareasse repiten hasta haber procesado todas las filogeniasconsideradas en la entrada de la aplicacion.

40 JP 2015

Page 11: Actas de las Jornadas de Paralelismo, JP 2015JORNADAS DE PARALELISMO Actas XXVI EDICIÓN DE LAS JORNADAS DE PARALELISMO (JP2015), 23, 24 y 25 de septiembre de 2015 Córdoba Editores:

B. Implementacion del Kernel GPU

La idea detras de la programacion con GPUs esmaximizar la explotacion de las oportunidades deparalelismo de datos mostradas por un algoritmo.Siguiendo esta idea, se propone una implementacionGPU del kernel de parsimonia tal y como describeel Pseudocodigo 1. En este kernel, cada work-item(siguiendo la terminologıa de OpenCL) con identi-ficador item id llevara a cabo el computo del valorparcial de parsimonia Pitem id(T ) para los caracteresitem id -esimos de las secuencias de entrada.

Pseudocodigo 1 Kernel de parsimonia GPU

Entrada: cl node* arbol (memoria constante), charn* secuen-cias (memoria global), int char por secuencia (constante),int num nodos internos (constante), int* espacio reduccion(memoria local).

Salida: int* parsimonia calculada (memoria global).1: item id ← get global id(0)2: group id ← get group id(0)3: Pitem id ← 04: Sitem id ← 05: para i = 1 to num nodos internos hacer6: estado nodo ← 0x1F7: para j = 1 to arbol[i].num hijos hacer8: /* Obteniendo informacion del hijo j */9: tipo nodo ← arbol[i].hijos id[j] & 0x8000000010: nodo id ← arbol[i].hijos id[j] & 0x7FFFFFFF11: /* Leyendo estado de los calculados anteriormente

(nodo interno) o de las secuencias (nodo hoja) */12: si tipo nodo = 0x80000000 entonces13: estado hijo ← Sitem id[nodo id]14: si no15: estado hijo ← secuencias[char por secuencia * no-

do id + item id]16: fin si17: /* Calculando el estado del nodo y actualizando los

valores parciales de parsimonia */18: estado parcial ← estado nodo & estado hijo19: Pitem id,estado nodo ← (estado parcial=0) ?

{Pitem id+1, estado nodo | estado hijo} : {Pitem id,estado parcial}

20: fin para21: Sitem id[i] ← estado nodo22: fin para23: parsimonia calculada[group id] ← Reduccion Paralela en

Warp (Pitem id, espacio reduccion)

Para ello, los work-items procesaran cada uno delos nodos internos en el orden en que aparecen enel array topologico, computando los estados Sitem id.Para cada nodo, se procesa la informacion relativa asus nodos hijos, obteniendo sus tipos e identificadores(lıneas 8 a 10 en el Pseudocodigo 1). Los identificado-res denotan una posicion en el array topologico en elcaso de nodos internos, mientras que un identificadorhoja se refiere al numero de secuencia correspondien-te en el conjunto de datos de entrada. Ası pues, encaso de que el hijo actualmente procesado represen-te un nodo interno, su estado sera leıdo del arraySitem id (lınea 13), el cual contiene los estados ante-riormente calculados por el work-item. En caso con-trario, el hijo actual es una hoja, lo cual requiereleer su valor de estado de caracter del array de se-cuencias (lınea 15). Tras verificar la informacion delhijo, las operaciones con conjuntos de Fitch tienenlugar, ası como la actualizacion del valor parcial deparsimonia y el valor de estado del nodo actualmen-te procesado (lıneas 18-19). Estas tareas se repitenpara cada nodo hijo, almacenando el valor de estadoresultante en el array Sitem id. En pasos posteriores,el kernel procede con el procesamiento del siguiente

nodo interno, realizando los pasos anteriores hastaque todos los nodos del array topologico hayan sidoprocesados. La tarea final del kernel implica efectuaruna reduccion paralela basada en warps [16] sobrelos valores parciales de parsimonia computados porlos work-items de un work-group (lınea 23).

En este kernel, la jerarquıa de memoria de la GPUse emplea del siguiente modo. En primer lugar, elarray topologico es mapeado a la memoria constan-te, al representar una estructura de solo lectura. Porsu parte, el array de secuencias se almacena en la me-moria global, al representar la estructura de mayortamano manejada por el algoritmo. Referente a estaestructura, la organizacion row-major adoptada enel array impide la ocurrencia de patrones de accesodispersos a la memoria global dentro de un warp. Lamemoria global tambien contiene la estructura con-tenedora del valor de parsimonia, que es transferidaal host tras la ejecucion del kernel. La memoria lo-cal compartida a nivel de work-group se reserva paralas operaciones de reduccion paralela. Finalmente,las variables locales utilizadas por un work-item sealmacenan a nivel de memoria privada.

Respecto a las tecnicas de optimizacion integradasen el kernel, nuestra implementacion considera el usode tipos de datos vector (intn, charn) para permitira cada work-item efectuar accesos y operaciones a ni-vel multi-caracter. Con respecto al comportamientode los work-items, es preciso senalar que la condicionif-else localizada en las lıneas 12-16 no provoca diver-gencias en el flujo de ejecucion, dado que todos loswork-items de un warp procesan informacion sobre elmismo nodo hijo y, por consiguiente, siguen el mis-mo patron de ejecucion. Ademas, se considerara elsolapado de tareas de inicializacion y transferenciashost-GPU con ejecuciones del kernel para mejorar elrendimiento a nivel de interaccion host-dispositivo.

IV. Metodologıa Experimental yResultados

A continuacion, detallamos la evaluacion experi-mental de la propuesta GPU en diferentes escenarios,estudiando en un primer paso los efectos de las tecni-cas de optimizacion consideradas para luego procedercon el calculo de factores de aceleracion con respec-to a la version serie del algoritmo y las estrategiasparalelas de otros autores.

El sistema hardware considerado en nuestros expe-rimentos comprende una CPU Intel i7 950 a 3.07GHzcon 12GB RAM, la cual actuara como host de la apli-cacion, y una GPU NVIDIA GTX 580 de arquitec-tura Fermi que actuara como dispositivo de compu-to, formada por 16 unidades de computo (streamingmultiprocessors), cada una con 32 elementos de pro-cesamiento (streaming processors, un total de 512 co-res GPU), y funcionando a una frecuencia de relojGPU de 1.59GHz. Los compiladores empleados in-cluyen GCC 4.6.2 (con la bandera -O3 activada) y laimplementacion OpenCL 1.1 de NVIDIA.

Para afrontar este estudio de rendimiento paralelo,se han llevado a cabo 31 ejecuciones independientes

XXVI EDICIÓN DE LAS JORNADAS DE PARALELISMO, JP 2015 41

Page 12: Actas de las Jornadas de Paralelismo, JP 2015JORNADAS DE PARALELISMO Actas XXVI EDICIÓN DE LAS JORNADAS DE PARALELISMO (JP2015), 23, 24 y 25 de septiembre de 2015 Córdoba Editores:

Fig. 2: Influencia de la vectorizacion sobre los tiem-pos de ejecucion

de la aplicacion por experimento. Cada ejecucion in-volucra la evaluacion por parsimonia de 2000 arbolesfilogeneticos. Con objeto de evaluar la propuesta so-bre diferentes tamanos del problema, hemos realiza-do nuestra experimentacion sobre seis bases de datosbiologicas reales:

M8631 50, 50 secuencias (con 42456 nucleotidospor secuencia) de ADN de enterobacterias [17].M21119 55, 55 secuencias (con 4675 nucleotidospor secuencia) de ADN de anfibios cecılidos [18].M19259 156, 156 secuencias (con 119750 nu-cleotidos por secuencia) de ADN de Salmonellaenterica [19].M10272 169, 169 secuencias (con 24251 nu-cleotidos por secuencia) de datos genomicos demamıferos [20].ZILLA 500, 500 secuencias (con 759 nucleotidospor secuencia) del gen cloroplastıdico rbcL [21].HIV1 1459, 1459 secuencias (con 8610 nucleoti-dos por secuencia) del virus VIH1 [22].

En primer lugar, mostraremos los efectos de apli-car las optimizaciones consideradas de computosmulti-caracter mediante tipos de datos vector, ası co-mo la mejora en el rendimiento obtenida al solapartareas host con calculos de la GPU. Con este proposi-to, consideraremos dos muestras representativas delproblema, dadas por las instancias M19259 156 (ma-yor longitud de secuencia) y ZILLA 500 (menor lon-gitud de secuencia).

La Figura 2 representa la evolucion de los tiemposde ejecucion en estos dos conjuntos de datos al usarlos distintos tamanos de tipo vector soportados enOpenCL. Para la instancia M19259 156, el uso de ti-pos de datos vector da lugar a una mejora apreciabledel tiempo de ejecucion del kernel, beneficiandose es-pecialmente de configuraciones que involucren el tra-tamiento de tipos char16/int16. Ası, se produce unamejora del 36% del tiempo de ejecucion con respectoa los tiempos obtenidos en computos mono-caracter(tipos int/char simples). Por su parte, la instanciaZILLA 500 representa el escenario contrario, dondela propuesta GPU experimenta un empeoramiento enlos tiempos de ejecucion al aplicar esta tecnica. Es-

Fig. 3: Influencia del solapamiento host-dispositivosobre los tiempos de ejecucion

to viene motivado por el hecho de que, al considerarcomputos multi-caracter, se reducen las posibilida-des de alcanzar una explotacion completa de la GPUen esta instancia, la cual presenta un paralelismo dedatos limitado (759 caracteres por secuencia).

De manera adicional, es preciso considerar que elrendimiento de la aplicacion puede verse afectado porlos tiempos consumidos por el lado host en la inicia-lizacion de los arrays topologicos y las transferenciasde datos entre las memorias del host y de la GPU.Si no se aplican estrategias de solapamiento entre ta-reas del host y computos del kernel en la GPU, estopuede dar lugar a tiempos de espera significativos dela GPU, que permanecera ociosa hasta que la ordende ejecucion se reciba. Mediante el solapamiento deacciones del host con computos de la GPU, es posi-ble mejorar el tiempo de ejecucion de la propuesta.La Figura 3 representa la reduccion de tiempo obser-vada al aplicar esta tecnica a nuestra aproximacion.Ası, se obtiene una mejora del tiempo de ejecucionen M19259 156 del 19%, mientras que en ZILLA 500esta mejora representa un 36% al ser de mayor ta-mano las estructuras topologicas a procesar.

TABLA II: Factores de aceleracion de la propuesta

Conjunto Tiempo Tiempo Factor dede datos serie CPU (s) GPU (s) aceleracionM8631 50 46,999 0,252 186,291M21119 55 5,951 0,252 23,588M19259 156 498,024 1,605 310,322M10272 169 99,142 0,493 201,073ZILLA 500 10,274 0,818 12,555HIV1 1459 323,861 2,669 121,329

Bajo estas consideraciones, introducimos la eva-luacion de los resultados paralelos obtenidos para lasseis bases de datos biologicas analizadas en este tra-bajo. La Tabla II da cuenta de los factores de ace-leracion observados en cada instancia, detallando eltiempo serie mediano (en segundos) requerido por laimplementacion CPU serie del algoritmo y el tiempoparalelo mediano (en segundos) obtenido por la apro-ximacion GPU propuesta. Conforme a los resultadosobservados en la experimentacion, el empleo de una

42 JP 2015

Page 13: Actas de las Jornadas de Paralelismo, JP 2015JORNADAS DE PARALELISMO Actas XXVI EDICIÓN DE LAS JORNADAS DE PARALELISMO (JP2015), 23, 24 y 25 de septiembre de 2015 Córdoba Editores:

propuesta GPU para paralelizar el kernel de parsi-monia da lugar a factores de aceleracion significati-vos, especialmente en las instancias con los mayorestamanos de secuencia. Entre dichas instancias, desta-can M19259 156 y M10272 169, donde el empleo dela GPU como dispositivo de computo da lugar a ace-leraciones medianas de 310,322 y 201,073, respectiva-mente. En las instancias con longitudes de secuenciamas pequenas, como M21119 55 y ZILLA 500, losfactores de aceleracion estan limitados por la propianaturaleza de la instancia, aunque dichos factores si-guen siendo significativos al implicar una reduccionapreciable del tiempo. Finalmente, la instancia conel mayor numero de especies, HIV1 1459, tambiense beneficia notablemente de las bondades del em-pleo de GPUs, verificandose que la propuesta para-lela permite reducir los tiempos de ejecucion de apro-ximadamente 5 minutos a 2 segundos. En el contextoactual, estos resultados tienen una relevancia signi-ficativa, ya que ponen de manifiesto el importantepapel que las aproximaciones GPU pueden tomar ala hora de dar soporte a los metodos filogeneticos enescenarios reales de elevada complejidad.

A. Comparativas con Otras Propuestas

A continuacion, introducimos la evaluacion denuestra implementacion GPU del kernel de parsi-monia con respecto a otras aproximaciones paralelaspropuestas en la literatura. Para este proposito, reali-zamos comparaciones con la herramienta Parsimona-tor, la cual integra estrategias basadas en OpenMPy extensiones SIMD SSE3/AVX para paralelizar loscalculos de parsimonia en CPUs. Dadas las carac-terısticas del sistema hardware usado, se han reali-zado experimentos con Parsimonator considerando 8hilos OpenMP y las extensiones SSE3 activadas, alcarecer el procesador de soporte para AVX.

TABLA III: Comparativa con Parsimonator

Conjunto Tiempo Tiempo Factor dede datos Parsimonator (s) GPU (s) aceleracionM8631 50 0,938 0,252 3,720M21119 55 0,500 0,252 1,984M19259 156 9,592 1,605 5,977M10272 169 2,424 0,493 4,916ZILLA 500 3,319 0,818 4,056HIV1 1459 9,750 2,669 3,653

La Tabla III presenta los tiempos de ejecucionparalelos medianos obtenidos por Parsimonator (ensegundos), en comparacion a los tiempos de nues-tra aproximacion, ası como los factores de acelera-cion que nuestra propuesta obtiene sobre Parsimo-nator. En todos los conjuntos de datos considerados,nuestra propuesta es capaz de mejorar los tiemposde ejecucion mostrados por la herramienta parale-la del estado del arte. En particular, las aceleracio-nes mas significativas son obtenidas en las instan-cias con mayor longitud de secuencias M19259 156y M10272 169, gracias a las posibilidades de explo-tacion del paralelismo de datos que ofrece nuestrapropuesta GPU. Tambien resulta remarcable la me-

jora en los conjuntos de datos que implican un mayornumero de especies, ZILLA 500 y HIV1 1459, lo cualsugiere un eficiente procesamiento de los arrays to-pologicos disenados. En consecuencia, esta compara-tiva sugiere los beneficios de aplicar aproximacionesbasadas en computacion con GPUs para acelerar lafuncion filogenetica de parsimonia, posibilitando alos procedimientos filogeneticos afrontar una de lasprincipales fuentes de complejidad del problema.

V. Conclusiones y Trabajo Futuro

Esta investigacion ha versado sobre el empleo deprogramacion con GPUs para acelerar la funcion fi-logenetica de parsimonia, usando el estandar de pro-gramacion heterogenea OpenCL. La motivacion prin-cipal de este trabajo radica en afrontar los elevadostiempos de evaluacion que suponen los analisis filo-geneticos actuales en bases de datos biologicas dealta complejidad, explorando las implicaciones quesupone el uso de GPUs en este problema. Utilizandocomo base el algoritmo de Fitch, hemos propuestouna implementacion GPU del kernel de parsimonia,fundamentado en la idea de explotar el paralelismode datos a nivel de procesamiento de caracteres.

Los resultados experimentales obtenidos sobre seisbases de datos biologicas reales dan cuenta de lasbondades de la aproximacion GPU, obteniendo fac-tores de aceleracion hasta 310x con respecto a la im-plementacion serie del algoritmo en CPU. La rele-vancia de la propuesta ha sido confirmada mediantesu comparacion con las estrategias paralelas imple-mentadas en la herramienta Parsimonator, reducien-do de manera significativa los tiempos de ejecucionmostrados por esta herramienta del estado del arte.

Como trabajo futuro, pretendemos continuar es-ta lınea de investigacion, analizando aproximacionesheterogeneas CPU+GPU que usen todos los recur-sos de los sistemas hardware actuales para afrontarel problema. Ası mismo, se llevaran a cabo estudiossobre otros tipos de arquitecturas GPU, como Keplery Maxwell. Ademas, se realizaran comparativas en-tre implementaciones basadas en OpenCL y disenosbasados en entornos de programacion especıficos decada dispositivo, combinando OpenMP+SIMD enCPU con CUDA en GPUs. Por ultimo, se estu-diara la extension de la propuesta para el procesa-miento de secuencias de aminoacidos, ası como laintegracion de kernels de parsimonia y verosimilitudpara acelerar metodos filogeneticos multiobjetivo.

Agradecimientos

Este trabajo esta parcialmente financiado por elMinisterio de Economıa y Competitividad y el FE-DER (Fondo Europeo de Desarrollo Regional), bajoel proyecto TIN2012-30685 (proyecto BIO), ası co-mo por la FCT (Fundacao para a Ciencia e a Tec-nologia), bajo los proyectos UID/CEC/50021/2013y PTDC/EEI - ELC/3152/2012. Sergio Santander-Jimenez es becario del programa FPU del Gobiernode Espana (FPU12/04101).

XXVI EDICIÓN DE LAS JORNADAS DE PARALELISMO, JP 2015 43

Page 14: Actas de las Jornadas de Paralelismo, JP 2015JORNADAS DE PARALELISMO Actas XXVI EDICIÓN DE LAS JORNADAS DE PARALELISMO (JP2015), 23, 24 y 25 de septiembre de 2015 Córdoba Editores:

Referencias

[1] J. Dıaz, C. Munoz-Caro, and A. Nino, “A Survey ofParallel Programming Models and Tools in the Multi andMany-core Era,” IEEE Trans. Parallel Distrib. Syst., vol.23, no. 8, pp. 1369–1386, 2012.

[2] R. Weber, A. Gothandaraman, R. J. Hinde, and G. D.Peterson, “Comparing Hardware Accelerators in Scien-tific Applications: A Case Study,” IEEE Trans. ParallelDistrib. Syst., vol. 22, no. 1, pp. 58–68, 2011.

[3] S. Sarkar, T. Majumder, A. Kalyanaraman, and P. P.Pande, “Hardware Accelerators for Biocomputing: ASurvey,” in Proc. of the 2010 IEEE International Sym-posium on Circuits and Systems. 2010, pp. 3789–3792,IEEE.

[4] P. Lemey, M. Salemi, and A. Vandamme, The Phylo-genetic Handbook: a Practical Approach to Phylogene-tic Analysis and Hypothesis Testing, Cambridge Univ.Press, Cambridge, 2009.

[5] M. A. Suchard and A. Rambaut, “Many-core algorithmsfor statistical phylogenetics,” Bioinformatics, vol. 25, no.11, pp. 1370–1376, 2009.

[6] F. Pratas, P. Trancoso, L. Sousa, A. Stamatakis, G. Shi,and V. Kindratenko, “Fine-grain parallelism using multi-core, Cell/BE, and GPU systems,” Parallel Computing,vol. 38, no. 8, pp. 365–390, 2012.

[7] J. Bao, H. Xia, J. Zhou, X. Liu, and G. Wang, “EfficientImplementation of MrBayes on Multi-GPU,” Mol. Biol.Evol., vol. 30, no. 6, pp. 1471–1479, 2013.

[8] L. Kuan, J. Neves, F. Pratas, P. Tomas, and L. Sou-sa, “Accelerating Phylogenetic Inference on GPUs: anOpenACC and CUDA Comparison,” in Proc. of the 2ndInternational Work-Conference on Bioinformatics andBiomedical Engineering, 2014, pp. 589–600.

[9] F. Izquierdo-Carrasco, N. Alachiotis, S. Berger, T. Flou-ri, S. P. Pissis, and A. Stamatakis, “A Generic Vectori-zation Scheme and a GPU Kernel for the PhylogeneticLikelihood Library,” in Proc. of the 27th IEEE Inter-national Parallel & Distributed Processing Symposium.2013, pp. 530–538, IEEE.

[10] N. Alachiotis and A. Stamatakis, “FPGA Accelerationof the Phylogenetic Parsimony Kernel?,” in Proc. of the21st International Conference on Field ProgrammableLogic and Applications. 2011, pp. 417–422, IEEE.

[11] B. Gaster, L. Howes, D. R. Kaeli, P. Mistry, andD. Schaa, Heterogeneous Computing with OpenCL - Re-vised OpenCL 1.2 Edition, Morgan Kaufmann Publis-hers, San Francisco, CA, USA, 2012.

[12] W. Fitch, “Toward Defining the Course of Evolution: Mi-nimum Change for a Specific Tree Topology,” SystematicZoology, vol. 20, no. 4, pp. 406–416, 1972.

[13] W. H. E. Day, D. S. Johnson, and D. Sankoff, “TheComputational Complexity of Inferring Rooted Phyloge-nies by Parsimony,” Mathematical Biosciences, vol. 81,no. 1, pp. 33–42, 1986.

[14] D. A. Bader, A. Stamatakis, and C. W. Tseng, “Compu-tational Grand Challenges in Assembling the Tree of Li-fe: Problems and Solutions,” in Advances in Computers,vol. 68, pp. 127–176. Elsevier, 2006.

[15] L. Guequen et al., “Bio++: efficient extensible librariesand tools for computational molecular evolution,” Mol.Biol. Evol., vol. 30, no. 8, pp. 1745–1750, 2013.

[16] NVIDIA Corporation, “OpenCL Programming for theCUDA Architecture,” 2012.

[17] F. Husnık, T. Chrudimsky, and V. Hypsa, “Multipleorigins of endosymbiosis within the Enterobacteriaceae(γ-Proteobacteria): convergence of complex phylogeneticapproaches,” BMC Biology, vol. 9, no. 87, pp. 1–17, 2011.

[18] D. San Mauro, D. J. Gower, H. Muller, S. P. Loader,R. Zardoya, R. A. Nussbaum, and M. Wilkinson, “Life-history evolution and mitogenomic phylogeny of caeci-lian amphibians,” Molecular Phylogenetics and Evolu-tion, vol. 73, no. 1, pp. 177–189, 2014.

[19] R. E. Timme, J. B. Pettengill, M. W. Allard, E. Strain,R. Barrangou, C. Wehnes, J. S. Van Kessel, J. S. Karns,S. M. Musser, and E. W. Brown, “Phylogenetic diver-sity of the enteric pathogen Salmonella enterica subsp.enterica inferred from genome-wide reference-free SNPcharacters,” Genome Biology and Evolution, vol. 5, no.11, pp. 2109–2123, 2013.

[20] R. W. Meredith et al., “Impacts of the Cretaceous Te-rrestrial Revolution and KPg Extinction on Mammal Di-versification,” Science, vol. 334, no. 6055, pp. 521–524,2011.

[21] M. W. Chase et al., “Phylogenetics of seed plants: Ananalysis of nucleotide sequences from the plastid generbcl,” Annals of the Missouri Botanical Garden, vol. 80,no. 3, pp. 528–580, 1993.

[22] “HIV Sequence Database,” http://www.hiv.lanl.gov/,2005.

44 JP 2015

Page 15: Actas de las Jornadas de Paralelismo, JP 2015JORNADAS DE PARALELISMO Actas XXVI EDICIÓN DE LAS JORNADAS DE PARALELISMO (JP2015), 23, 24 y 25 de septiembre de 2015 Córdoba Editores:

JP2015

Córdoba