Table Of ContentTFGENENGINYERIAINFORMA`TICA,ESCOLAD’ENGINYERIA(EE),UNIVERSITATAUTO`NOMADEBARCELONA(UAB)
´
PARALELIZACION DEL PROBLEMA DE
´
SATISFACCION DE RESTRICCIONES
UTILIZANDO ARCO CONSISTENCIA
Jordi Alcaraz Rodriguez
Resum– El problema de satisfaccio´n de restricciones se utiliza en varios campos de la informa´tica:
Inteligencia Artificial, planificacio´n de recursos, etc., y se considera NP-completo. A causa de la
complejidad computacional de este problema es necesario utilizar buenas heur´ısticas y paralelismo
para reducir el tiempo de co´mputo. En este proyecto se realizara´n varias implementaciones pa-
ralelasparamaximizarelusodelhardwaredisponibleyreducireltiempoderesolucio´ndelproblema.
Paraules clau– Problema de satisfaccio´n de restricciones, computacio´n paralela, Xeon Phi,
a´rboldebu´squedaenprofundidad
Abstract–InsomefieldsrelatedtoComputerSciencetheConstraintSatisfactionproblemisused,in
exemple:ArtificialIntelligence,resourceplaning,etcetera,andthisproblemisNP-complete.Because
of it’s computational complexity there is a need to use good heuristics and paralelism to reduce the
time to solve it. In this project some parallel implementations will be performed to maximize the use
oftheavailablehardwareandminimizethetimeneededtosolvethisproblem.
Keywords– Constraint Satisfaction Problem, CSP, parallel computing, Xeon Phi, Depth-first
search
(cid:70)
alnecesitargrancapacidaddeco´mputoparasuresolucio´n.
1.1. Organizacio´ndeldocumento
1 INTRODUCCIO´N
El resto del documento sigue la siguiente organizacio´n:
En los u´ltimos an˜os los fabricantes de procesadores de-
En la seccio´n 2, “Estado del Arte”, se explicara´ el proble-
cidieron dejar de incrementar la velocidad de reloj para
maCSPy,tambie´n,desistemasymodelosparalelos.Enla
aumentar el rendimiento. Este incremento ocasiona varios
seccio´n 3, “Objetivos”, se detallara´n los objetivos de este
problemas,elprincipaleselaumentodelconsumoenerge´ti-
proyecto. Y en la seccio´n 4, “Metodolog´ıa”, como se lle-
co, el cual eleva la temperatura[1][2]. La solucio´n adopta-
ganacumplir losobjetivos.Enla seccio´n5,“Desarrollo”,
da fue cambiar la arquitectura de los procesadores, incre-
sedescribeelalgoritmosecuencialylosmodelosutilizados
mentandoelnu´merodenu´cleosdeejecucio´n.Estecambio
para paralelizarlo. En la seccio´n 6, “Experimentacio´n”, se
afectaalosmodelosdeprogramacio´nexistentesysurgela
explicara´nlosexperimentosrealizadosyelhardwareutili-
necesidaddeprogramacio´norientadaasistemasparalelos.
zado.Enlaseccio´n7,“Resultados”,seexpondra´nlosresul-
Alaparecerunnuevomercadoorientadoalparalelismo, tadosobtenidosyserazonara´n.Finalmente,enlaseccio´n8,
algunas empresas, como NVIDIA e Intel, desarrollan nue- “Conclusiones”,seresumira´nlosresultadosdelproyecto.
vos coprocesadores. Estos sistemas se basan en la utiliza-
cio´n de una mayor cantidad de nu´cleos de co´mputo, y son
2 ESTADO DEL ARTE
aptosparaaplicacionesconungranniveldeparalelismo.
Con el fin de analizar las mejoras e inconvenientes de
Este apartado se divide en dos partes. Primero se expo-
estosnuevossistemas,seutilizara´unproblemadenominado
ne el estado del arte del problema CSP y, para finalizar, el
ProblemadeSatisfaccio´ndeRestricciones,conocidoconel
estadodelartedelossistemasparalelos.
nombredeConstraintSatisfactionProblema(CSP),elcual
puede beneficiarse de este nuevo modelo de programacio´n
2.1. ConstraintSatisfactionProblem
E-maildecontacte:[email protected]
En inteligencia artificial, y en otras a´reas de la compu-
Mencio´realitzada:EnginyeriadeComputadors
Treballtutoritzatper:JuanCarlosMoure(CAOS) tacio´n, muchos problemas pueden ser vistos como proble-
Juniode2015,Escolad’Enginyeria(UAB)
2 EE/UABTFGINFORMA`TICA:PARALELIZACIO´NDELPROBLEMADESATISFACCIO´NRESTRICCIONESCONARCOCONSISTENCIA
mas de satisfaccio´n de restricciones[3][4]. Los problemas 2.2. Sistemasparalelos
desatisfaccio´nderestriccionessecomponende:
Actualmente la mayor´ıa de ordenadores tienen procesa-
Conjuntofinitodevariables,X={x ,x ,...,x }. dores con multiples nu´cleos de procesamiento. Con el fin
1 2 n
deaprovechardemaneraeficientelosprocesadores,losal-
Conjunto de Dominios de cada variable, D , D , ..., goritmossecuencialesdebendividireltrabajoarealizarde
1 2
D , donde cada dominio, a su vez, es el conjunto de manera eficiente entre los diferentes nu´cleos del sistema,
n
valoresposiblesdeunavariable. surgiendo la necesidad de nuevos modelos de programa-
cio´n.
Conjunto de restricciones (Constraints) entre varia-
bles,C ,C ,...,C .
1 2 k 2.2.1. Procesadoresmulticoredepropo´sitogeneral
Las restricciones son relaciones entre variables que limi- La arquitectura utilizada para paralelismo entre nu´cleos
tan los valores va´lidos. Un ejemplo de restriccio´n es All- deco´mputosedenominaMIMD(MultipleInstructionMul-
different(X ,X ,...,X ),indicandoquecadavalordiferente tipleData).MIMDpermiteacadanu´cleoejecutardiferen-
1 2 n
u´nicamentepuedeasociarseaunavariable. tesinstruccionesadiferentesdatosdeformasimulta´nea.
Una de las te´cnicas ma´s utilizadas para la resolucio´n de Paraincrementarelparalelismodentrodecadanu´cleode
CSPs es la exploracio´n en profundidad de un a´rbol de so- co´mputosecreo´elprocesamientoSIMD(SingleInstruction
luciones y volver a los nodos anteriores con backtracking. Multiple Data). El procesamiento SIMD, tambie´n conoci-
Adema´s se utilizan te´cnicas de poda (pruning) para limi- do como vectorizacio´n, permite ejecutar la misma instruc-
tarlacantidadtotaldeasignacionesdevaloresavariablesa cio´nsobrediferentesdatosdeformasimulta´neaenunu´nico
explorar[5]. nu´cleo.Lacantidaddedatosquepuedenserprocesadosde
Este problema se considera NP-completo debido al cre- forma paralela, y que componen el vector SIMD, depende
cimiento exponencialde ca´lculo necesariopara resolverel deltaman˜odeloselementosdelvectorydeltaman˜odelos
problemaalaumentarelnu´merodevariables. registrosSIMDdelprocesador[7].
Un ejemplo sencillo de CSP es el problema de las N- Delamismamaneraqueenunprocesadorsepuedente-
Reinas. Este problema consiste en colocar N reinas en un nermu´ltiplesnu´cleosdeco´mputounordenadorpuedetener
tablerodetaman˜oNxNdemaneraqueningunapuedaatacar ma´sdeunprocesador.Lossistemasconvariosprocesadores
aotra.Lacodificacio´nutilizadaennuestraimplementacio´n sedenominansistemasmultisocket.Debidoaestosepueden
eslasiguiente: dividirlossistemasMIMDendosgrupossegu´nsuorgani-
zacio´ndememoria[8]:
Variables,X={x ,x ,...,x }.Unavariableporcada
1 2 n
reina y asignada a una fila. El valor de la variable x UniformMemoryAcces(UMA).Todaslasunidadesde
i
indicalacolumnadelareinadelafilai-e´sima. co´mputo del sistema comparten la memoria principal
ytienenlamismalatenciam´ınima(sincolisiones)para
Dominio comu´n para todas las variable, D =(1, 2, ..., accederamemoria.
1
N).D =D =...=D .
1 2 n
Non-Uniform Memory Acces (NUMA). En este caso
Lasrestriccionessepuedenverenlafigura1ysonlas lamemoriaseencuentradistribuidaenbloquesycada
siguientes: bloque asociado a uno de los diferentes procesadores
del sistema. La latencia m´ınima (sin colisiones) para
• Diferente-Columna(X , X , ..., X ). Todas las accederamemoriavar´ıasegu´nelprocesadorquehaga
1 2 N
variablesseasignanacolumnasdiferentes. la peticio´n y el bloque que deba responder a la peti-
cio´n. Es la arquitectura utilizada con ma´s frecuencia
• Diferente-Diagonal(X , X , ..., X ). Todas las
1 2 N porlossistemasmultisocket.
variablesseasignanadiagonalesdiferentes.
Enalgunosprocesadoresmulticore,Intelhaintroducido
la tecnolog´ıa Hyper-Threading. Esta tecnolog´ıa permite a
un nu´cleo de co´mputo ejecutar dos threads de manera si-
multa´nea.Graciasatenerma´sdeunthreadejecuta´ndoseen
elmismonu´cleoseaumentaelusodelosrecursosalpermi-
tirejecutarinstruccionesdethreadsdiferentesqueesconden
los tiempos de espera producidos por fallos de cache´ o de
prediccio´ndesaltos,entreotros(Figura2)[9].
2.2.2. CoprocesadorIntelXeonPhi
Adema´sdelosprocesadoressepuedenutilizarcoproce-
sadores para recudir el tiempo de ejecucio´n de los progra-
mas paralelos. El coprocesador creado por Intel recibe el
nombredeIntelXeonPhiysedisen˜o´ paraaumentarelren-
Figura1:Reinaysusrestricciones[6]. dimientoenaplicacionesqueobtenganunabuenaescalabi-
lidadenprocesaroresIntelXeon[10].
JORDIALCARAZRODRIGUEZ:PARALELIZACIO´NDELPROBLEMADESATISFACCIO´NDERESTRICCIONESUTILIZANDOARCOCONSISTENCIA 3
2.2.3. Modelosdeprogramacio´nparalela
Antesdehablardemodelosdeprogramacio´nparalelase
debe pensar en elos modelos de paralelismo a utilizar.En
este proyecto se utilizara´n los modelos de paralelismo de
bucleydeparalelismodepareas.
Enelmodelodeparalelismodebuclealllegarlaejecu-
cio´naunbucleparalelosedividenlasiteracionesentrelos
diferenteshilosdeejecucio´n.Estemodeloutilizaelesque-
madeparalelismoFork-Join.Elesquemaconsisteenejecu-
tar el co´digo de manera secuencial hasta llegar a un punto
concreto, donde se divide el trabajo en varias partes y se
distribuyeentrediferentesthreads.Unavezhanacabadode
trabajar todos los threads, la ejecucio´n del algoritmo vuel-
ve a continuar de manera secuencial, pudiendo haber ma´s
divisionesdetrabajoenelfuturo(verFigura3).
Figura 2: Sistema sin Hyper-Threading y sistema con
Hyper-Threading. Se puede ver el efecto en el tiempo de
ejecucio´n de la posibilidad de esconder los tiempos de es-
pera[9].
EL coprocesador Intel Xeon Phi dispone de una capa- Figura3:EsquemadeparalelismoFork-Join
cidad de co´mputo siete veces superior a los procesadores
XeonPhi[11].Adema´s,estamejoraseobtieneconunme- Encambio,enelmodelodetareas,unhilotrabajacomo
jor rendimiento energe´tico. La capacidad de co´mputo del generador(llamadoMaster)yelrestoactu´ancomoconsu-
Intel Xeon Phi 7120P es de 1208 GFLOPS en doble pre- midores(llamadosWorkers).Algenerarseunatarea,lanue-
cisio´n,conunaeficienciade3.66GFLOPS/W.Encambio, vatareasean˜adeaunalistadetareas.Silosconsumidores
el procesador Intel Xeon 2670 dispone de una capacidad acaban de ejecutar una tarea, o esta´n en espera, consultan
deco´mputode166.4GFLOPS,conunaeficienciade1.45 la lista de tareas y, si no esta´ vac´ıa, se les asigna trabajo a
GFLOPS/W. realizar(verFigura4).
El coprocesador Xeon Phi cuenta con una arquitectura
MIMDyutilizalosmismosmodelosdeprogramacio´nque
la CPU, facilitando as´ı la programacio´n y adaptacio´n del
co´digo.
A diferencia de los procesadores Xeon, de hasta 18
nu´cleosdecomputoy36hilosdeejecucio´n,loscoprocesa-
doresPhicontienenhasta61coresy244threads.Estohace
queseamuyimportantelaescalabilidaddelasaplicaciones
aejecutar.
Otra diferencia es el taman˜o de los vectores SIMD.
Mientras que el Xeon Phi permite instrucciones SIMD de
512bits,losprocesadoresXeondisponendeinstrucciones
SIMDde256bits[12],siendoimportanteutilizardemane-
raeficientelasunidadesSIMDdelPhiparaobtenerunbuen
rendimiento.
Sedisponededosmodosdiferentesdeejecucio´n:ejecu-
cio´nnativa(elcomandosshpermiteconectarsealcoproce-
sador y ver al Phi como un sistema independiente) y eje-
cucio´noffload(modeloh´ıbridoquepermiteespecificarque´
partedelco´digoseejecutaenelhostyque´ parteseejecuta
enelPhi).
Elcoprocesadordisponedeunsistemaoperativobasado
en Unix para poder gestionar la ejecucio´n nativa y el sis-
tema operativo necesita utilizar un nu´cleo. En ejecuciones
offloadnosepermiteutilizaresenu´cleo,mientrasqueenlas
ejecucionesnativassedisponedetodoslosnu´cleos,perose
recomiendadejarunolibreparaelsistemaoperativo. Figura4:Esquemadeparalelismodetareas
4 EE/UABTFGINFORMA`TICA:PARALELIZACIO´NDELPROBLEMADESATISFACCIO´NRESTRICCIONESCONARCOCONSISTENCIA
Entre los diferentes modelos de programacio´n parale- 5.1. Ana´lisisdelalgoritmosecuencial
la con soporte para tareas para el lenguaje C++ destacan
Este algoritmo se utilizara´ para resolver el problema de
por su popularidad [13]: Intel Threading Building Blocks,
lasN-Reinas,codificadocomounproblemadesatisfaccio´n
OpenMP y Cilk Plus. El proyecto utilizara´ Cilk Plus y
derestricciones.Elalgoritmosebasaenelrecorridodeun
OpenMP, que esta´n integrados en los compiladores de las
a´rboldebu´squedadesolucionesenprofundidadconback-
ma´quinasdisponibles
trackingyusandoarco-consistenciaparapodaralternativas.
CilkPlusasignaunacoladetareasacadahilodeejecu-
Las restricciones son binarias y el algoritmo utiliza opera-
cio´n (o worker) disponible, y reparte las tareas entre dife-
ciones a nivel de bit para reducir la cantidad de memoria
rentes colas. Los workers creados por Cilk Plus no se en-
necesaria.
cuentran ligados a un thread hardware y pueden migrar a
El algoritmo al empezar selecciona la variable (var) 0 y
otronu´cleodeprocesamiento.Cuandounhilodeejecucio´n
elnivel(level)0dela´rboldebu´squeda.Unavezacabadala
sequedaconlacolavac´ıa,ylosdema´sno,seleccionaauna
inicializacio´nsellamaalafuncio´ndebu´squedadesolucio-
v´ıctimapararobarletrabajo[14].
nes. Esta funcio´n acepta de para´metros de entrada el nivel
Porotrolado,OpenMPtieneunacolacompartidadeta-
yelestadodelasvariables,ysiguelossiquientespasosdel
reas. En el momento de asignar una tarea a un thread, se
Algorithm1:
entra en una zona cr´ıtica, la tarea es asignada y eliminada
de la lista. Finalmente, el thread sale de la zona cr´ıtica y
3. Se comprueba si el estado (state) actual es va´lido. Si
ejecutalatarea[15][16].
no es va´lido se devuelve 0, es decir, 0 soluciones en-
contradas.
3 OBJETIVOS
4. Se comprueba si el nivel (level) es el ma´ximo permi-
tido.Sielniveleselma´ximopermitidoyelestadoes
Un objetivo principal de este proyecto es desarrollar e
va´lido,tenemosunasolucio´nydevuelve1.
implementarunalgoritmopararesolverelproblemadelas
N-Reinas, codificado como CSP, para sistemas con mu´lti-
5. Se selecciona una variable libre a la variable (var) a
plesnu´cleosdeprocesamiento.
utilizar.
Otroobjetivoprincipalesevaluarycompararlosresulta-
dosobtenidosutilizandodiferentesmodelosdeparalelismo 6. Seinicializaelcontadordesoluciones(s)a0.
ydiferentessistemasparalelos.
Adema´sdelosobjetivosprincipales,tambie´nsepretende 7. Serealizanlossiguientesdospuntosporcadavalorde
desarrollareimplementarunalgoritmoparaleloequivalente lavariable(var)seleccionada:
aptoparaelcoprocesadorIntelXeonPhi.
8. Se calcula el nuevo estado (state´) con la funcio´n de
arc consistency.
4 METODOLOG´IA
9. Se llama recursivamente a la funcio´n de bu´squeda de
Conelfinderealizaresteproyectoseutilizo´ lametodo- soluciones, con los parametros de entrada del nuevo
log´ıaWaterfall.Estametodolog´ıaseconsideraaptaparael estado(state´)yelnivelincrementadoenuno(level+1).
proyecto al ser necesario el cumplimiento estricto de cada Ysesumaalcontadordecoluciones(s)lassoluciones
unadelasfasesparapoderavanzaralasiguiente.Adema´s, encontradasporlafuncio´n.
estametodolog´ıaseutilizaenproyectosconobjetivosbien
definidos al principio y con bajas probabilidades de sufrir 10. Sedevuelveelvalordelcontadordesoluciones(s).
cambios,requerimientosquesecumplenenesteproyecto.
En cada fase del proyecto con desarrollo de algoritmos
Algorithm1Bu´squedadesoluciones
sehacontadoconpruebasderendimientoyalfinalizarlas
fasesdedesarrollodelosalgoritmosparaCPUserealizaron 1: procedureintsearch solutions(level,state)
pruebasdeescalabilidad. 2: if!feasible(state)thenreturn0
Lasfasesdedesarrollodelproyectosonlassiguientes: 3: iflevel==N thenreturn1
4: var ←select free variable(state)
Desarrollo del algoritmo paralelo con el esquema de 5: s←0
paralelismoFork-Join. 6: forval in available values(var,state)do
7: state(cid:48) ←arc consistency(var,val,state)
Desarrolloutilizandoelesquemadeparalelismodeta- 8: s←s+search solutions(level+1,state(cid:48))
reas.Primeroparaelmodelodeprogramacio´nparalela returns
OpenMPydespue´sparaCilkPlus
La complejidad del algoritmo es O(N!), donde N es el
DesarrollodeversionesaptasparacoprocesadoresIn-
nu´mero de reinas, esta complejidad se obtiene al tener N
telXeonPhi.
variablesconNvaloresperolosvaloreslibresalasignarun
valoraunavariablesereducenenuno.Peroestacompleji-
5 DESARROLLO dadsereduceconsiderablementealutilizarenelalgoritmo
te´cnicasdepoda.
Esteapartadosedivideenelana´lisisdelalgoritmoinicial La funcio´n de arco-consistencia utiliza una lista de res-
ylaparalelizacio´ndelalgoritmo. tricciones binarias de taman˜o N3. Esta funcio´n, por cada
JORDIALCARAZRODRIGUEZ:PARALELIZACIO´NDELPROBLEMADESATISFACCIO´NDERESTRICCIONESUTILIZANDOARCOCONSISTENCIA 5
valordecadavariable,realizaNcomparacionesentrelalis- Paracadathreadsenecesitamemoriaadicionalpararea-
ta y los valores de las dema´s variables, obteniendo un re- lizarlabu´squedaenelsuba´rbolquetieneasignado,aproxi-
sultadoparalapoda.Debidoalascomparacionesarealizar, madamente(N2+3N)∗BitVector,dondeNeselnu´mero
laarco-consistenciatieneunacomplejidaddeN3,yresulta dereinas.
serlafuncio´nconunademandadetiempodeaproximada- Lasventajasdeestaimplementacio´nsonlassiguientes:
menteel93%deltotal.
Fa´cilimplementacio´n.
EnelalgoritmosedefinelaestructuradedatosBitVector.
Estaestructurasedefineparapodermodificareltaman˜ode
Senecesitapocamemoriaextra.
lasestructurasdedatosdecadareina,susdominios,lasres-
triccionesbinariasylosvaloresdearco-consistencia,segu´n Lasdesventajasson:
elnu´merodereinas.Contaldereducirlacantidaddeme-
morianecesariasetrabajaaniveldebityeltaman˜odeBit- Paralelismo de threads limitado por el nu´mero de va-
vectoresN +1bits,dondeNeselnu´merodereinas. loreslibresdelavariablesescogida.
La lista de restricciones binarias es un cuello de botella
Paralelismou´nicamenteenlazonadelbucleparalelo.
si el nu´mero de reinas es elevado, ya que el taman˜o de la
listaenbyteses(N3)∗taman˜o de BitVector.Siseutiliza
Malbalanceodecargaaltenercadaiteracio´ncargasde
un nu´mero pequen˜o como 17 reinas el taman˜o de la lista
trabajodiferentes.
es 19,2 KBytes, pero en el caso de utilizar 200 reinas se
necesitan 244,14 MBytes y si se requiere de 500 reinas se
5.2.2. Paralelizacio´nmediantetareasparalelas
necesitan7,5GBytes.
Para hacer backtracking es necesario mantener los re- Enestaaproximacio´nseintentaaumentarelparalelismo
sultados previos de arco-consistencia obtenidos durante la ymejorarelbalanceodecargaenelprocesodebu´squeda.
bu´squedaenela´rboldeposiblessolucionesyseutilizanN Lapartesecuencialdelalgoritmo,unavezllegaalnivel
vectoresdebits(Bitvector)encadanivel.Conestefinseuti- a paralelizar, guarda en una lista la informacio´n necesaria
lizaunalistadetaman˜o=(N2+N)∗sizeof(BitVector). parapodercontinuarconlabu´squeda.Cadavalordelalis-
ta puede ser utilizado K veces, donde K es el nu´mero de
5.2. Paralelizacio´ndelalgoritmo valores libres (ramas) de la Variable escogida a ese nivel.
Despue´selprogramacreatantastareascomovaloreslibres
Para poder paralelizar el algoritmo se ha dividido la
tengalaVariableseleccionadaycontinuaexplorando.Asu
bu´squedadesolucionesdelasiguientemanera:
vez,losthreadsdisponiblesenelsistemaconsumenlasta-
reascreadasdemaneraconcurrente,permitiendounmayor
Unhilodeejecucio´nllamadoMaster exploraela´rbol
usodelosrecursosdisponibles.
de bu´squeda de forma secuencial hasta una profundi-
Enestemodelotambie´nselimitaconunaregio´ncr´ıticael
daddeterminadaporelusuarioygeneratrabajo(con-
accesodelavariablequecontieneelnu´merodesoluciones.
tinu´alabu´squedaapartirdelestadogenerado)parael
Adema´s,sehaintroducidounanuevazonacr´ıtica,dondese
restodehilos.
evalu´asielvaloractualdelalistasehautilizadoKveces,
Ungrupodehilossedivideeltrabajogeneradoporel encasoafirmativoseutilizara´ lainformacio´ndelsiguiente
Master. valordelalista,dondeKeselnu´meroderamas.
Deigualmaneraquelaestrategiaanteriornecesitabame-
Primeroseexplicalaestrategiadeutilizarunbucleparalelo,
moriaextra,e´stanecesitalamismamemoriaadicionalpor
despue´s la versio´n realizada mediante el uso de tareas y,
thread.Peronecesitama´smemoriaparalosdatosqueutili-
para finalizar, la versio´n h´ıbrida para ejecutar el algoritmo
zara´nlastareas:sutaman˜odependera´delosnodosexplora-
enCPUyenelacelaradorXeonPhi.
dosenelnivelseleccionado.Alutilizarpodanoesposible
saber a priori el nu´mero de nodos explorados y se requie-
5.2.1. Paralelizacio´nmedianteunbucleparalelo
rehacerunaaproximacio´nquereservama´smemoriadela
En esta aproximacio´n, al llegar la ejecucio´n secuencial necesaria.
aunniveldeterminadoporelusuario,unbuclerepartelos Enlaaproximacio´nrealizadasiseutilizan17reinasyse
valoreslibresdelaVariableseleccionadaentrelosdiferen- paraleliza a profundidad 3 se reservan 880 KBytes, de los
teshilosdeejecucio´n.CambiandoelbucledelAlgorithm1 cualesso´losonnecesarios732KBytes.Enelcasodepara-
porunbucleparaleloenelnivelseleccionado,siguiendoel lelizaranivel6ladiferenciaaumenta,delos1135MBytes
esquema de paralelismo Fork-Join (ver Figura 3). Debido reservadosso´losonnecesarios311MBytes.Losvaloresde
a la poda irregular realizada en el a´rbol de bu´squeda cada lamemorianecesariaseobtienenalfinalizarlaejecucio´ny
threadtienecargasdetrabajodiferente.Lapartesecuencial mostrarcuantoselementosdelalistasehanutilizado.
delalgoritmodebeesperaralafinalizacio´ndetodaslasite- Lasventajasdeestaimplementacio´nson:
racionesdelbucleparaleloparapodercontinuar.
El thread ma´ster no espera a los dema´s threads para
Esta aproximacio´n tiene una parte cr´ıtica: la actualiza-
continuarsutrabajo.
cio´n del nu´mero de soluciones. Debido a tener varios th-
readsejecuta´ndoseconcurrentemente,lavariablesepodr´ıa
Mejor balanceo de carga al eliminar la necesidad de
actualizardemaneraincorrectasiseleeyescribedemanera
sincronizarencadanododela´rbolenelniveldondese
concurrente. Para evitar tener un valor incorrecto se limita
paralelizalabu´squeda.
elaccesodeestavariableaunu´nicothreadutilizandouna
regio´ncr´ıtica. Lasdesventajasson:
6 EE/UABTFGINFORMA`TICA:PARALELIZACIO´NDELPROBLEMADESATISFACCIO´NRESTRICCIONESCONARCOCONSISTENCIA
Elusodememoriaextradependedelaprofundidada Hardware
lacualseparaleliza. CPU Inteli7-950
Aolin №Nu´cleos 1socketx4=4cores
Senecesitandoszonascr´ıticasenlugardeuna. №ThreadsH/W 4x2threads=8threads
CPU IntelXeonE5645
5.2.3. Paralelizacio´nh´ıbrida Aoclsd №Nu´cleos 2socketx6=12cores
№ThreadsH/W 12x2threads=24threads
Si se quiere utilizar el Xeon Phi como coprocesador las
CPU IntelXeonE5-4620
anterioresestrategiasnosonaptas.Enelcasodelbuclepa-
Penguin №Nu´cleos 4socketx8=32cores
ralelo,allimitarelparalelismodethreadsalnu´merodeva-
№ThreadsH/W 32x2threads=64threads
loreslibres,seobtieneunacantidadinsuficientedetrabajas
CPU AMDOpteron6376
independientescomparadoconelnu´merodethreadshard-
Batman №Nu´cleos 4socketx16=64cores
waredelPhi.
№ThreadsH/W 64x1threads=64threads
En cambio la estrategia de tareas resultar´ıa viable, pero
CPU IntelXeonE5-2620
no hay soporte para consumir concurrentemente las tareas
№Nu´cleos 2socketx6=12cores
enelPhiyenelsistemahost.
№ThreadsH/W 12x2threads=24threads
Finalmente,sehaoptadoporutilizarelalgoritmodelmo- Sandman
Coprocesor IntelXeonPhi7120
delodetareasperomodificarlodelasiguientemanera:
№Nu´cleosPhi 61cores
Seintroducenloselementosenlalistadeinformacio´n №ThreadsH/WPhi 61x4threads=244threads
para las tareas, pero sin generar tareas. Se recorre de
manerasecuencialela´rbolcompletolimitandolapro-
Cuadro1:Hardwaredelasma´quinasutilizadas
fundidadma´ximadeexploracio´n.
Sedeterminalacantidaddeelementosdelalistaaeje-
dememoriaeslamismaparatodoslosnu´cleosdeco´mputo.
cutarporelhostyporelcoprocesadorconelobjetivo
En el caso de la ma´quina Aoclsd, que tiene de una arqui-
derepartireltrabajo.
tecturaNUMAperoduranteelperiododeexperimentacio´n
Se crea una zona paralela, en el host y el en Phi, al estabaconfiguradaconunaemulacio´ndeUMA.
finalizarlaparteseriedelalgoritmoyseconsumenlos Lasdema´sma´quinastienenunadearquitecturaNUMA:
elementosdelalista. cadasockettieneunamemoriaasociadayaccederalame-
moria asociada a otro socket incrementa el tiempo de res-
Estemodelotienelosmismosrequerimientosdememo-
puesta.Paraaprovecharalma´ximolascaracter´ısticasdees-
riaquelaversio´nconelmodelodetareas.
tossistemasserealizaunaimplementacio´ndelaversio´nde
Lasventajasdeestaimplementacio´nson:
tareasadaptadaasistemasNUMA,tandoconOpenMPco-
mo con Cilk Plus. En esta nueva versio´n la estructura de
Buenbalanceodecargaenlaparteparalela
datosautilizarporcadaworkerladeclaraelpropioworker
Permite aumentar la capacidad de co´mputo al utilizar enlugardelthreadma´ster.
elcoprocesadorXeonPhi. Todas las ejecuciones realizadas utilizan 17 reinas, me-
nosenlasma´quinasAolin,queutilizan16reinas,debidoa
El uso de memoria extra depende del nivel al cual se su menor capacidad de co´mputo y a utilizar un sistema de
paraleliza. colasconunmenortiempoma´ximodeejecucio´n.
Doszonascriticas
7 RESULTADOS
No hay paralelismo hasta finalizar la parte serie del
algoritmo. Enesteapartadoseexplicara´nlosresultadosobtenidosen
diferentes ma´quinas y se extraera´n conclusiones generales
6 EXPERIMENTACIO´N delosresultados.
Se debe tener en cuenta que la versio´n con bucle para-
Las experimentaciones con las diferentes versiones del lelo (llamada FOR en las gra´ficas) u´nicamente se utilizara´
algoritmosehanrealizadoenlasma´quinasdelasiguiente enlacomputadoraAolindebidoasusdesventajasylimita-
tabla(Cuadro1): ciones. Las ejecuciones del modelo de tareas, al utilizarse
Todas las ma´quinas, menos Batman, disponen de pro- enlamayor´ıadegra´ficas,selasnombrara´ segu´nelmodelo
cesadoresIntelconHyperThreading,permitiendounautili- deprogramacio´nparalelautilizado.SiendoOpenMPlaeje-
zarinstruccionesindependientesdediferentesthreadspara cucio´ndetareasconOpenMPyCilkPluslaejecucio´ncon
ocultar las esperas producidas por las latencias. Si el ren- tareasyCilkPlus.
dimiento del algoritmo secuencial tiene problemas con es-
peras, por fallos de cache´ u otras latencias, utilizando dos
7.1. Resultadosinicialesderendimiento
threads por nu´cleo se puede obtener una mejora de rendi-
mientosuperioralnu´merodenu´cleosdeprocesamientodel Acontinuacio´nseanalizaelimpactodeaumentarelni-
sistema. vel del a´rbol a partir del cual se distribuye la bu´squeda en
Lama´quinaAolin,alu´nicamentedisponerdeunsocket, paralelo (ver Figura 5),. En estos experimentos se utilizan
esdearquitecturaUMA,esdecir,lalatenciadelosaccesos ochothreads.
JORDIALCARAZRODRIGUEZ:PARALELIZACIO´NDELPROBLEMADESATISFACCIO´NDERESTRICCIONESUTILIZANDOARCOCONSISTENCIA 7
HyperThreading,ejecuta´ndosedosthreadspornu´cleo(ver
Figura 7). Se ha escogido paralelizar la bu´squeda a partir
delnivel3alserelmejorparatodaslasversionessegu´nla
Figura5.
Figura 5: Speed-Up respecto a la ejecucio´n serie. El nivel
var´ıaentre2y7.
Se puede observar que la versio´n con bucle paralelo
Figura 7: Escalabilidad del rendimiento incrementando el
en ningu´n momento obtiene un rendimiento adecuado. El
nu´merodehilosdeejecucio´n.
Speed-Upobtenidodesdelaprofundidad5nocompensael
usodehardwareadicional.Estosedebealamalaestrategia
quesigueelalgoritmoaltenerpartesdeco´digoserieymal Dados estos resultados, y los de la anterior gra´fica (ver
balanceodecargaenlaszonasparalelas,desaprovechando Figura5),sepuedeafirmarquelaoptimizacio´nqueparale-
losrecursosdelprocesador(verFigura6).Otromotivodel liza con un bucle paralelo es la peor de todas sin importar
malrendimientoeselincrementoenelnu´merodeinstruc- losrecursosutilizado.Estoesdebidoacarecerdesuficien-
cionesparagestionarlasregionesparalelas. teparalelismoydeunbuenbalanceodecarga.Encambio,
las versiones que utilizan un modelo de tareas son mucho
ma´s eficaces, obteniendo un Speed-Up pro´ximo al nu´me-
rodecoresutilizados.ConHyperThreadingelaumentode
rendimientosuperaelnu´merodenu´cleosdelsistemaalma-
ximizarelusodelosrecursosdeco´mputoescondiendolas
latenciasdebidasazonascr´ıticasydependenciasdedatos.
7.2. Resultados de escalabilidad en sistemas
multisocket
En este apartado se analiza la escalabilidad en el rendi-
Figura6:ProfilingconVTune.Cadafilacorrespondeaun miento de la implementacio´n con el modelo de tareas. Se
nu´cleodeco´mputo.Lasfranjasrojascorrespondenaespe- utilizansistemasconmu´ltiplessocketsyarquitecturasNU-
ras,mientrasquelaszonasmarronesautilizacio´ndeCPU MA. Para reducir la cantidad de figuras a mostrar se ana-
lizanlosresultadosdelama´quinaPenguin(verFigura8),
En el caso de las versiones de tareas el rendimiento no dado que los resultados son similares en las ma´quinas con
var´ıa de manera significativa al variar la profundidad del procesadoresIntel,ylosdelama´quinaBatman(verFigura
a´rbol de bu´squeda entre el nivel 2 y el 5. A partir del ni- 9).
vel5CilkPluspierderendimientodemaneranotable.Esto En estas ejecuciones las computadoras Penguin y Bat-
se debe a un incremento en el nu´mero total de instruccio- man tienen una arquitectura de memoria NUMA. Al uti-
nes ejecutadas por el programa, llegando a un incremento lizar dicha arquitectura se debe tener en cuenta que la lo-
del72.68%enelnivel7.Enteincrementovienegenerado calizacio´n de los datos puede incrementar la latencia para
principalmenteporlasfuncionesdeCilkPlusparagestionar accederamemoria.Contaldeminimizarlosoverheadsde
lastareas.Parafinalizar,lape´rdidaconOpenMPsecentra memoriaesimportantequecadanu´cleodecomputoutilice
en el nivel 7 a causa de tener menos trabajo los workers y lamemoriama´scercana.
ma´s trabajo el hilogenerador. Elincremento en el nu´mero En el algoritmo del modelo de tareas el thread Master
deinstruccionesenestecasotienepocoimpacto,alserdel crea,paracadanu´cleo,laestructuradedatosnecesariapara
5.37%. explorar los suba´rboles. En el caso de la versio´n NUMA-
En la Figura 7 se puede ver la escalabilidad del rendi- Awarecadanu´cleocrealaestructuradedatosensumemo-
miento al utilizar un nu´mero creciente de threads. En los riama´scercanaaliniciarsecadathread.
casosde2,3y4threads,cadaunodeellosseasignaaun Sepuedevercomolaimplementacio´nqueusaCilkPlus
nu´cleo diferente, y en el caso de 8 threads se habilita el tienevariacioneslevesderendimientoentrelaversio´nini-
8 EE/UABTFGINFORMA`TICA:PARALELIZACIO´NDELPROBLEMADESATISFACCIO´NRESTRICCIONESCONARCOCONSISTENCIA
cial y la adaptada para NUMA. Gracias a que Cilk Plus
disponedeunplanificadordina´mico,parabalancearmejor
lacargaentrelosdiferentesnu´cleos,sepuedenmitigarlos
efectosdelaarquitecturaNUMAdeformaautoma´tica,sin
queelprogramadordebahacernadaespecial.
Por otro lado, con OpenMP siempre es mejor la ver-
sio´n NUMA-Aware. A causa de no permitir migrar threads
de manera automa´tica, segu´n la localizacio´n de los datos,
los efectos de la arquitectura NUMA son considerables,
y el programador tiene que optimizar el co´digo de forma
expl´ıcitaparatrabajarenestasarquitecturasconOpenMP.
En las dos ma´quinas con procesadores Intel (Figura 8)
se ha llegado a conseguir un Speed-Up mayor al nu´mero
de nu´cleos f´ısicos del sistema. Gracias a la tecnolog´ıa Hy-
perThreading que ha conseguido maximizar la utilizacio´n
delosrecursosalesconderlatencias.
ConlaarquitecturaAMD,enloscasosde8,16y32th-
Figura8:EscalabilidadenPenguin.Con8threadsseutiliza
reads,sehallegadoaunamejoraderendimientosuperioral
unu´nicosocket.De8a32threadsseutilizaunnu´cleopor
incrementodehardwareutilizado(verFigura9).Encambio,
thread.Con64hilosseutilizan2threadsporcore.
al usar 64 threads, se pierde escalabilidad, y la utilizacio´n
delosrecursos,enlaversio´nOpenMPNUMA-Aware,baja
al85.6%.
Hayquedestacarquelaarquitecturadelosprocesadores
AMDorganizalosnu´cleosdeco´mputoenmo´dulosdedos
coresydentrodelmo´dulosecompartendiferentesrecursos.
Algunos de los recursos compartidos son las unidades de
vectorizacio´n, las unidades Fetch y Decode, y la cache´ de
instrucciones,entreotras(verFigura10)[17][18][19][20].
Lascausasexactasdeestape´rdidanosonfa´cilesdeen-
contraralnodisponerdeunprofilercomoVTuneenarqui-
tecturas AMD. Descartando los fallos de cache´ al obtener
resultados similares con ejecuciones de 32 y 64 nu´cleos,
y tambie´n problemas de vectorizacio´n al realizar pruebas
deshabilitandolasinstruccionesSIMDyobteniendomejo-
rasderendimientosimilares,lascausasma´sprobablespue-
den ser los tiempos de espera debidos a las zonas cr´ıticas
delalgoritmoytambie´nlasperdidasdebidasalosrecursos
compartidosenlosmo´dulosdelosprocesadoresAMD. Figura 9: Escalabilidad en Batman. De 8 a 32 threads se
Con la versio´n Numa-aware de Cilk Plus el rendimien- utilizaunnu´cleodecadamo´dulodedoscores.Con64th-
to ha empeorado, al contrario que la misma versio´n con readsseutilizanlosdosnu´cleosdecadamo´dulo.
OpenMP.LacausaprobableesqueCilkPlusespropiedad
deIntelylaarquitecturaAMDpuedequenoseaadecuada
paraestemodelodeprogramacio´nparalela.
7.3. ResultadosXeonPhi
Enesteapartadoprimerosemostrara´nlosresultadosob-
tenidos con el coprocesador Xeon Phi y el esquema de ta-
reasconOpenMPNuma-Aware.Despue´ssemostrara´nlos
resultadosdelmodeloh´ıbrido.
Las comparaciones de aumento de rendimiento se reali-
zancontraelalgoritmosecuencialejecutadoenelhost.
Sedebetenerencuentaquelasejecucionesqueutilizan
elcoprocesadorXeonPhihanutilizadounnu´cleodeproce-
samientomenosdelosdisponiblesdebidoalnu´cleoutiliza-
doporelsistemaoperativodelPhi.
Los resultados obtenidos con la versio´n de tareas en el
XeonPhi(verFigura11)permitenobservarco´moutilizan- Figura10:Unmo´dulodelaarquitecturaAMD[17]
dou´nicamenteunhilodeejecucio´nencadanu´cleodepro-
cesamientoseobtieneunrendimientobajo,comparadocon
utilizarelma´ximodethreadspermitidos,dondecasisecon- Teo´ricamente,enelXeonPhisepuedeobtenerunincre-
sigueduplicarelSpeed-Up. mentodesieteveceslapotenciadeca´lculodeunXeonde
JORDIALCARAZRODRIGUEZ:PARALELIZACIO´NDELPROBLEMADESATISFACCIO´NDERESTRICCIONESUTILIZANDOARCOCONSISTENCIA 9
8 nu´cleos. Esto se traduce en un Speed-Up de aproxima-
damente56respectolaversio´nserie,aunquesolamentese
consigueun17.26(un30,8%delrendimientoteo´rico).Es-
tosedebeenparteatenerunnu´meropequen˜odereinas,se
utilizanvectoriesSIMDdepequen˜otaman˜o,ynoseapro-
vechaalma´ximolacapacidaddeSIMDdelPhi,quecuen-
ta con vectores del doble de taman˜o que los procesadores
Xeon.
SisecomparanlosresultadosdelaFigura11ydelaFi-
gura12sepuedeverunligeroincrementodelrendimiento
entrelaversio´ndetareasylaversio´nh´ıbridaejecuta´ndose
u´nicamenteenelPhi.Estamejoraseobtienealejecutarla
parteserieenunnu´cleodeprocesamientoma´spotente,per-
tenecientealhost,consiguiendorecorrertodalaparteserie
antesdequeelPhiconsigagenerarunnu´merodetareasque
utilicedemaneraapropiadalagrancantidaddethreadsque
Figura 12: Rendimiento de la versio´n h´ıbrida comparada
contiene.
con la versio´n secuencial en el host. El host es Sandman,
La versio´n h´ıbrida en el host tiene una pequen˜a pe´rdida
conIntelXeonE5-2620v2.Encadacasoseutilizaelma´xi-
derendimiento,del2,5%,respectoalaversio´ndetareasen
monu´merodethreadsquepermiteelsistema.
el host. Esta pequen˜a diferencia se debe a tener una parte
secuencialpequen˜aalparalelizaralnivel3.
En la ejecucio´n h´ıbrida se consigue llegar al 95.7% del neraumentosderendimientocercanoseinclusosuperiores
aumentoderendimientoteo´rico,elma´ximoseobtienecon alnu´merodenu´cleosdeco´mputoutilizados.
lasumadelaumentodelrendimientoenelhostyenelPhi EnelcasodeutilizarHyperThreadingelaumentoderen-
(13,53 + 17,57 = 31,1). Este resultado se puede conside- dimientohasuperadolacantidaddenu´cleosutilizados,de-
rarsatisfactorioalnohaberningunacomunicacio´nentrelos mostrando que esta tecnolog´ıa cumple con la finalidad de
dossistemasparabalancearcargadina´micamente. aumentarelrendimiento,aprovechandoinstruccionesdedi-
ferentesthreadsparaminimizartiemposdeespera.
ElcoprocesadorIntelXeonPhihapermitidoaumentarla
capacidaddeco´mputodelsistemaperosuutilizacio´nnoha
sidoenlaproporcio´nesperada.Peseaseruncoprocesador
fa´cildeutilizaryprogramar,sedebenllevaracabooptimi-
zacionesenelalgoritmosisequiereobtenerunrendimiento
o´ptimo.Conlosresultadosobtenidossepuedeafirmarque
el problema de no obtener el Speed-Up esperado utilizan-
doelPhirecaeenlaimplementacio´ndelalgoritmoynoen
los modelos utilizados, que obtienen buenos resultados de
escalabilidad.
9 L´INEAS FUTURAS
Se pueden realizar varios cambios en el futuro. Estos
cambiossonlossiguientes:
1. Limitar el nu´mero de tareas a ejecutar concurrente-
Figura11:RendimientodelmodelodetareasenXeonPhi
mente.Limitandoelnu´merodetareassepuedereducir
comparadoconlaversio´nsecuencialenelhost.Elhostes
eltaman˜odelalistaconlainformacio´ndelastareas,
Sandman, con Intel Xeon E5-2620 v2. Con 60 threads se
reduciendolamemoriaextranecesaria.
utilizaunthreadpornu´cleo,con120dosporcore,con180
tresycon240seutilizan4threadspornu´cleo. 2. UtilizarrestriccionesAll-Different,quesonma´srele-
vantesparaelcampodelaInteligenciaArtificial.Este
tipo de restricciones no necesitan de una lista con las
restricciones,yrequierenmenostrabajodeco´mputoy
8 CONCLUSIONES
menoscapacidaddememoria.
Una vez finalizado el proyecto se puede comprobar que
3. Realizarunaimplementacio´nsecuencialyunaversio´n
sehancumplidotantolosobjetivosprincipalescomoelob-
paralelaequivalenteparalabu´squedadelaprimeraso-
jetivosecundario,y,adema´s,laplanificacio´nnosehavisto
lucio´nodelasXprimerassoluciones.
modificadaalolargodelproyecto,demostrandoquelame-
todologiaWaterfallesadecuadaparaelproyecto. Realizandolasl´ıneasfuturas2y3sepodr´ıarealizaruna
Los resultados obtenidos demuestran que los modelos implementacio´n adecuada para ser ejecutada en GPUs y
de paralelizacio´n utilizados son adecuados para la resolu- tambie´nparamejorarelrendimientodelXeonPhialtener
cio´n del problema de satisfaccio´n de restricciones al obte- unmayornu´merodereinas.
10 EE/UABTFGINFORMA`TICA:PARALELIZACIO´NDELPROBLEMADESATISFACCIO´NRESTRICCIONESCONARCOCONSISTENCIA
AGRADECIMIENTOS [14] Intel, “Faq: Cilk plus task scheduler.”
https://www.cilkplus.org/faq/20, 2012. U´ltimo
Megustar´ıaagradecerleamitutorJuancarlosMouresu acceso:25Abril2015.
ayudaduranteeldesarrollodelproyectoysoportarmehasta
sufinalizacio´n. [15] K. A. H. y A. D. Malony y S. Shende y D. W. Ja-
Quisiera tambie´n darle las gracias a Toni Espinosa y al cobsen, Integrated Measurement for Cross-Platform
pequen˜o grupito de alumnos de ma´ster y doctorado que OpenMP Performance Analysis. Using and Impro-
mehanayudadoaresolverproblemasrelacionadosconlas vingOpenMPforDevices,Tasks,andMore,Springer,
ma´quinasutilizadas. 2014.
[16] X.T.yP.UnnikrishnanyX.MartorellyE.Ayduade´
REFERENCIAS yR.SilverayG.ZhangyE.Tiotto,OpenMPTasksin
IBMXLCompilers.CASCON’08:proceedingsofthe
[1] P. G. y M. F. Kowalik, Multi-Core Processors: New
2008ConferenceoftheCenterforAdvancedStudies
WaytoAchieveHighSystemPerformance.PARELEC
onCollaborativeResearch:meetingofminds,2008.
2006:ProceedingsoftheInternationalSymposumon
ParallelComputinginElectricalEngineering,2006. [17] C.Angelini,“Amdbulldozerreview:Fx-8150getstes-
ted.”http://www.tomshardware.com/reviews/fx-8150-
[2] T. Spyrou, “Why parallel proces- zambezi-bulldozer-990fx,3043-3.html, 2011. U´ltimo
sing? why now? what about my le-
acceso:25Abril2015.
gacy code?.” https://software.intel.com/en-
us/blogs/2009/08/31/why-parallel-processing-why- [18] C. Webster, “Amd bulldozer - what’s a
now-what-about-my-legacy-code, 2009. U´ltimo module, what’s a core?.” http://www.bit-
acceso:7Marzo2015. tech.net/hardware/cpus/2011/10/12/amd-fx-8150-
review/2,2011. U´ltimoacceso:25Abril2015.
[3] V.Kumar,AlgorithmsforConstraintSatisfactionPro-
blems:ASurvey. AIMagazine,vol.13,nº1,1992. [19] S. Walton, “Amd fx-8350 and fx-6300 piledriver re-
view.” http://www.techspot.com/review/586-amd-fx-
[4] E. Tsang, Foundations of Constraint Satisfaction.
8350-fx-6300/,2012. U´ltimoacceso:25Abril2015.
London:AcademicPressLimited,1993.
[20] M. Pollice, “Opteron 6300 series launch: An
[5] S.C.B.yC.N.PottsyB.M.Smith,Constraintsatis-
incremental upgrade on an outdated platform.”
factionproblems:Algorithmsandapplications. Euro-
http://www.vrworld.com/2012/11/05/opteron-
peanJournalofOperationalResearch119,1999,557-
6300-series-launch-an-incremental-upgrade-on-
591,1999.
an-outdated-platform/,2012. U´ltimoacceso:25Abril
[6] H. Bodlaender, The rules of chess. 2015.
http://www.chessvariants.org/d.chess/chess.html,
2000.
[7] H. Bodlaender, M. McCool, A. D. Robison y J. Rein-
ders. Waltham:MorganKauffmann,2012.
[8] J. L. H. y D. A. Patterson, Computer Architecture: A
QuantitativeApproachIV. MorganKauffmann,2007.
[9] A. Valles, “Performance insights to intel hyper-
threading technology.” https://software.intel.com/en-
us/articles/performance-34insights-to-intel-hyper-
threading-technology,2009. U´ltimoacceso:25Abril
2015.
[10] J. J. y J. Reinders, Intel Xeon Phi Coprocessor High
PerformanceProgramming.Waltham:MorganKauff-
mann,2013.
[11] Intel,IntroducingtheIntelXeonPhiCoprocessor,Ar-
chitectureforDiscovery. 2012.
[12] S.J.P.yC.J.HughesyM.SmelyanskiyyS.A.Jarvis,
Exproring SIMD for Molecular Dynamics, Using In-
telXeonProcessorsandIntelXeonPhiCoprocessors.
IntelCorporation,2013.
[13] A. L. y A. Gilman, A Comparative Analysis of Para-
llelProgrammingModelsforC++. ICCGI2014:The
Ninth International Multi-Conference on Computing
intheGlobalInformationTechnology,2014.
Description:la con soporte para tareas para el lenguaje C++ destacan por su popularidad [13]: .. “Faq: Cilk plus task scheduler.” https://www.cilkplus.org/faq/20, 2012. ´Ultimo acceso: 25 2008 Conference of the Center for Advanced Studies.