b"\n_START_ARTICLE_\nModel de programaci\xc3\xb3 paral\xc2\xb7lela\n_START_SECTION_\nConceptes i terminologia\n_START_PARAGRAPH_\nEls models de programaci\xc3\xb3 paral\xc2\xb7lels estan estretament relacionats amb els models de computaci\xc3\xb3 . Un model de computaci\xc3\xb3 paral\xc2\xb7lela \xc3\xa9s una abstracci\xc3\xb3 que s'utilitza per analitzar el cost dels processos computacionals, per\xc3\xb2 no necess\xc3\xa0riament ha de ser pr\xc3\xa0ctica, ja que es pot implementar de manera efica\xc3\xa7 en hardware i / o programari. Un model de programaci\xc3\xb3, en canvi, implica espec\xc3\xadficament les consideracions pr\xc3\xa0ctiques de la implementaci\xc3\xb3 de maquinari i programari.\n_START_SECTION_\nLlei d'Amdahl\n_START_PARAGRAPH_\nLa llei d'Amdahl estableix que l\xe2\x80\x99acceleraci\xc3\xb3 potencial del programa es defineix per la fracci\xc3\xb3 de codi (P) que es pot paral\xc2\xb7lelitzar:_NEWLINE_Si cap dels codis es pot paral\xc2\xb7lelitzar, P=0 i la acceleraci\xc3\xb3 val 1 (no s'accelera)._NEWLINE_Si tot el codi es pot paral\xc2\xb7lelitzar, P=1, la velocitat resultant ser\xc3\xa0 infinita (te\xc3\xb2ricament)._NEWLINE_Si, per exemple, el codi es pot paral\xc2\xb7lelitzar al 50%, la velocitat m\xc3\xa0xima ser\xc3\xa0 de 2._NEWLINE_Introduint el nombre de processadors que executen la part paral\xc2\xb7lela del programa, la relaci\xc3\xb3 es pot modelar per:_NEWLINE_On P \xc3\xa9s la fracci\xc3\xb3 paral\xc2\xb7lela del programa, N el nombre de processadors i S la fracci\xc3\xb3 s\xc3\xa8rie del programa._NEWLINE_Com es pot veure en el gr\xc3\xa0fic de speedups, hi ha uns l\xc3\xadmits d'escalabilitat dels algoritmes, una frase d'Amdahl coneguda \xc3\xa9s la seg\xc3\xbcent: podeu passar tota la vida aconseguint que el 95% del vostre codi sigui paral\xc2\xb7lel i no aconseguir mai una velocitat superior a 20x, per m\xc3\xa9s processadors que poseu.\n_START_SECTION_\nTipus d'arquitectures de mem\xc3\xb2ria paral\xc2\xb7lela\n_START_PARAGRAPH_\nQuan parlem de mem\xc3\xb2ria en arquitectures paral\xc2\xb7leles, en podem distingir dos grups clarament:\n_START_SECTION_\nCaracter\xc3\xadstiques generals\n_START_PARAGRAPH_\nEn general tenen en com\xc3\xba la possibilitat que tots els processadors accedeixin a tota la mem\xc3\xb2ria principal com a un espai d\xe2\x80\x99adreces globals. Els m\xc3\xbaltiples processadors poden funcionar de manera independent, per\xc3\xb2 comparteixen els mateixos recursos de mem\xc3\xb2ria. Els canvis en una ubicaci\xc3\xb3 de mem\xc3\xb2ria efectuada per un processador s\xc3\xb3n visibles per a tots els altres processadors. Hist\xc3\xb2ricament, les m\xc3\xa0quines de mem\xc3\xb2ria compartida han estat classificades com a UMA i NUMA , basades en els temps d\xe2\x80\x99acc\xc3\xa9s a la mem\xc3\xb2ria.\n_START_SECTION_\nCaracter\xc3\xadstiques generals\n_START_PARAGRAPH_\nIgual que els sistemes de mem\xc3\xb2ria compartida, els sistemes de mem\xc3\xb2ria distribu\xc3\xafda varien \xc3\xa0mpliament, per\xc3\xb2 comparteixen una caracter\xc3\xadstica comuna.  Els sistemes de mem\xc3\xb2ria distribu\xc3\xafda requereixen una xarxa de comunicaci\xc3\xb3 per connectar la mem\xc3\xb2ria entre processadors. Els processadors tenen la seva pr\xc3\xb2pia mem\xc3\xb2ria local, les adreces de mem\xc3\xb2ria d'un processador no es direccionen a un altre processador, de manera que no hi ha cap concepte d\xe2\x80\x99espai d\xe2\x80\x99adre\xc3\xa7a global a tots els processadors. Com que cada processador t\xc3\xa9 la seva mem\xc3\xb2ria local, funciona de manera independent.  Els canvis que fa a la seva mem\xc3\xb2ria local no tenen cap efecte sobre la mem\xc3\xb2ria d'altres processadors.  Per tant, el concepte de coher\xc3\xa8ncia de la mem\xc3\xb2ria cau no s'aplica. Quan un processador necessita acc\xc3\xa9s a les dades en un altre processador, normalment \xc3\xa9s la tasca del programador definir expl\xc3\xadcitament com i quan es comuniquen les dades.  La sincronitzaci\xc3\xb3 entre tasques \xc3\xa9s igualment la responsabilitat del programador. El tipus de tecnologia de xarxa utilitzada per a la transfer\xc3\xa8ncia de dades varia \xc3\xa0mpliament, tot i que pot ser tan simple com Ethernet.\n_START_SECTION_\nModels de programaci\xc3\xb3 paral\xc2\xb7lels\n_START_PARAGRAPH_\nEls models de programaci\xc3\xb3 paral\xc2\xb7lels existeixen com a abstracci\xc3\xb3 per sobre de les arquitectures de hardware i mem\xc3\xb2ria. Encara que no sembli aparent, aquests models NO s\xc3\xb3n espec\xc3\xadfics d\xe2\x80\x99un tipus particular d\xe2\x80\x99arquitectura de m\xc3\xa0quina o de mem\xc3\xb2ria.  De fet, qualsevol d'aquests models pot (te\xc3\xb2ricament) ser implementat en qualsevol maquinari subjacent. Les caracter\xc3\xadstiques dels models de programaci\xc3\xb3 paral\xc2\xb7lela es poden subdividir \xc3\xa0mpliament. Es poden generalitzar, per\xc3\xb2, en dos fonamentals: la interacci\xc3\xb3 de processos i els problemes de descomposici\xc3\xb3.\n_START_SECTION_\nInteracci\xc3\xb3 de proc\xc3\xa9s\n_START_PARAGRAPH_\nLa interacci\xc3\xb3 de proc\xc3\xa9s fa refer\xc3\xa8ncia als mecanismes pels quals processos paral\xc2\xb7lels poden ser capa\xc3\xa7os de comunicar-se entre si. Les maneres m\xc3\xa9s comunes d'interacci\xc3\xb3 son la mem\xc3\xb2ria i el pas de missatges compartits, tot i que tamb\xc3\xa9 pot ser impl\xc3\xadcita.\n_START_SECTION_\nMem\xc3\xb2ria compartida\n_START_PARAGRAPH_\nLa mem\xc3\xb2ria compartida es un mitj\xc3\xa0 efica\xc3\xa7 de compartir dades entre programes. Depenent del context, els programes poden ser executats en un processador \xc3\xbanic o en diversos processadors. En aquest model, les tasques paral\xc2\xb7leles comparteixen un espai de direccions global on escriuen i llegeixen de manera as\xc3\xadncrona. Aix\xc3\xb2 requereix de mecanismes de protecci\xc3\xb3, tal com l'\xc3\xbas de sem\xc3\xa0fors, monitors per controlar l'acc\xc3\xa9s concurrent o panys. La mem\xc3\xb2ria compartida pot ser utilitzada en sistemes de mem\xc3\xb2ria distribu\xc3\xafda, per\xc3\xb2 els temps de NUMA (acc\xc3\xa9s no uniforme a mem\xc3\xb2ria, Non-Uniform Memory Access) poden guanyar rellev\xc3\xa0ncia i afectar al rendiment. A vegades la mem\xc3\xb2ria tamb\xc3\xa9 \xc3\xa9s compartida entre diferents seccions del codi del mateix programa. Per exemple, un bucle for pot crear fils d'execuci\xc3\xb3 per a cada iteraci\xc3\xb3 que actualitza una variable en paral\xc2\xb7lel.\n_START_SECTION_\nPas de missatges\n_START_PARAGRAPH_\nEl pas de missatges \xc3\xa9s un concepte de la inform\xc3\xa0tica que s'utilitza \xc3\xa0mpliament a l'hora de dissenyar i implementar modernes aplicacions de software; \xc3\xa9s clau per alguns models de concurr\xc3\xa8ncia i la programaci\xc3\xb3 orientada a objectes. En un model de pas de missatges, les tasques paral\xc2\xb7leles intercanvien dades a trav\xc3\xa9s del pas de missatges entre elles. Aquestes comunicacions poden ser s\xc3\xadncrones o as\xc3\xadncrones. La formalitzaci\xc3\xb3 de la Comunicaci\xc3\xb3 de processos seq\xc3\xbcencials (CSP) del pas de missatges fa servir canals de comunicaci\xc3\xb3 per a connectar processos, i va donar lloc a una serie de llenguatges importants, com el Joyce, Occam i l'Erlang.\n_START_SECTION_\nImpl\xc3\xadcit\n_START_PARAGRAPH_\nEn un model impl\xc3\xadcit, cap interacci\xc3\xb3 del proc\xc3\xa9s es visible al programador, en canvi el compilador i/o temps d'execuci\xc3\xb3 es responsable de realitzar la mateixa. Aix\xc3\xb2 es m\xc3\xa9s com\xc3\xba amb els llenguatges espec\xc3\xadfics de domini en el que la concurr\xc3\xa8ncia d'un problema pot ser m\xc3\xa9s prescrita, i amb els llenguatges de programaci\xc3\xb3 funcional perqu\xc3\xa8 la acesc\xc3\xa8ncia de efectes secundaris permet la independ\xc3\xa8ncia de les funcions a executar en paral\xc2\xb7lel. De manera que aquest tipus de paral\xc2\xb7lelisme es dif\xc3\xadcil de manejar i els llenguatges funcionals com Haskell concurrent i ML concurrent aporten de gesti\xc3\xb3 al paral\xc2\xb7lelisme explicit.\n_START_SECTION_\nDescomposici\xc3\xb3 del problema\n_START_PARAGRAPH_\nUn programa paral\xc2\xb7lel est\xc3\xa0 format per processos simultanis d'execuci\xc3\xb3. La descomposici\xc3\xb3 del problema es relaciona amb la forma en qu\xc3\xa8 es formulen els processos constitutius.\n_START_SECTION_\nParal\xc2\xb7lelisme de tasques\n_START_PARAGRAPH_\nUn model de tasca paral\xc2\xb7lela se centra en processos o en subprocessos d'execuci\xc3\xb3. Aquests processos seran sovint de manera comparativa, el que fa \xc3\xa8mfasi en la necessitat de la comunicaci\xc3\xb3. El paral\xc2\xb7lelisme de tasques \xc3\xa9s una forma natural d'expressar la comunicaci\xc3\xb3 de pas de missatges.\n_START_SECTION_\nParal\xc2\xb7lelisme de dades\n_START_PARAGRAPH_\nUn model de dades paral\xc2\xb7leles se centra en realitzar operacions en un conjunt de dades, normalment una matriu estructurada regularment. Un conjunt de tasques funcionar\xc3\xa0 en aquestes dades, per\xc3\xb2 de forma independent en particions no seleccionades. A la taxonomia de Flynn , el paral\xc2\xb7lelisme de dades sol ser classificat com a MIMD / SPMD o SIMD.\n_START_SECTION_\nParal\xc2\xb7lelisme impl\xc3\xadcit\n_START_PARAGRAPH_\nIgual que amb la interacci\xc3\xb3 impl\xc3\xadcita del proc\xc3\xa9s, un model impl\xc3\xadcit de paral\xc2\xb7lelisme no revela res al programador, ja que el compilador, el temps d'execuci\xc3\xb3 o el maquinari \xc3\xa9s responsable. Per exemple, en els compiladors, la paral\xc2\xb7lelitzaci\xc3\xb3 autom\xc3\xa0tica \xc3\xa9s el proc\xc3\xa9s de convertir el codi seq\xc3\xbcencial en codi paral\xc2\xb7lel, i en l'arquitectura de la computadora, l'execuci\xc3\xb3 super escalar \xc3\xa9s un mecanisme pel qual el paral\xc2\xb7lelisme de nivell d'instrucci\xc3\xb3 s'explota per realitzar operacions en paral\xc2\xb7lel."