ebook img

paralelizaci´on del problema de satisfacci´on de restricciones utilizando arco consistencia PDF

13 Pages·2015·1.34 MB·Spanish
by  
Save to my drive
Quick download
Download
Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.

Preview paralelizaci´on del problema de satisfacci´on de restricciones utilizando arco consistencia

TFGENENGINYERIAINFORMA`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.
See more

The list of books you might like

Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.