parallelism

1. Inform.

Programa baten exekuzioa batera lan egiten duten hainbat prozesadoreren artean banatzea; horrela lan egiteko sistema.

1. Inform.
Programa baten exekuzioa batera lan egiten duten hainbat prozesadoreren artean banatzea; horrela lan egiteko sistema.

Paralelismoa Edit

Egilea: Agustin Arruabarrena

PARALELISMOA

Konputagailuek prozesadore bakar bat erabili ohi dute programak, aplikazioak eta abar exekutatzeko. Prozesadoreak gero eta azkarragoak dira, eta prozesadore bakar baten konputazio-ahalmena nahikoa izan ohi da eguneroko aplikazioetarako (adib., bulegotika, bideoa, argazkiak, jokoak). Hala ere, hainbat aplikaziotan, prozesadore bakar batekin lor daitekeen exekuzio-abiadura ez da nahikoa emaitzak denbora jakin batean eskuratzeko. Aplikazio horiek oso arlo desberdinetakoak izan daitezke: datu-base handiak kudeatzea (Google, esaterako), on line merkataritzako zerbitzuak (Amazon...), irudien prozesamendua (zientzian zein zinema-industrian), ingeniaritzako eta zientzietako aplikazioak (eguraldiaren iragarpena, genetika, astrofisika, fisika kuantikoa eta nuklearra, kimika, farmazia, prozesuen simulazioak...) eta abar.

Exekuzio-abiadura handiagoak (100, 1.000, 10.000... aldiz handiagoak) lortzeko, irtenbide bakarra dago: prozesadore asko, hau da, paralelismoa , erabiltzea. Paralelismo hitzarekin hau adierazi nahi dugu: programa baten exekuzioa hainbat prozesadoreren artean banatzen da, eta prozesadoreek paraleloan, batera, lan egiten dute.

Prozesadore asko erabiltzen dituzten konputagailu paraleloek izen bat edo beste hartzen dute, baliabideak zein diren eta nola antolatzen diren: superkonputagailuak, multiprozesadoreak, multikonputagailuak, clusterrak... Oro har, konputagailu paraleloak bi motatakoak dira: memoria partekatuko konputagailuak, non sistemako prozesadore guztiek memoria bera erabiltzen baitute; eta memoria banatuko konputagailuak, zeinetan prozesadoreek memoria pribatu bana erabiltzen baitute.

P prozesadore erabili behar badira aplikazio jakin bat exekutatzeko, lehenik eta behin, jatorrizko aplikazioa P prozesutan banatu behar da. Bi aukera nagusi (eta haien arteko nahasteak) daude prozesu horiek sortzeko:

  • Datu-paralelismoa ustiatzea. Prozesadore guztiek kode bera exekutatzen dute, baina "datu" desberdinen gainean. Adibidez, film baten 150.000 irudi prozesatu behar baditugu ehun prozesadoreko konputagailu batean, prozesadore guztiek lan bera egingo dute, baina bakoitzak 1.500 irudi baino ez ditu prozesatuko. Datu independente asko baldin badago prozesatzeko, exekuzio-abiadura handiak lor daitezke.

  • Funtzio-paralelismoa ustiatzea. Prozesadoreek ataza desberdinak exekutatzen dituzte. Adibidez, gune jakin baten eguraldiaren eboluzioaren simulazio batean, prozesadore batek itsasoaren portaera simula dezake, beste batek, kostaldekoa, beste batek, atmosferakoa, beste batek, hiriguneetakoaketa abar, eredu desberdinak erabiliz. Eskuarki, paralelismo-mota honekin lortzen den paralelismo-maila ez da oso handia, zailagoa baita funtzio desberdin asko bereiztea aplikazioetan.

P prozesadoreko konputagailu paralelo baten helburua da aplikazioak P aldiz azkarrago exekutatzea, edo, baliokidea dena, P aldiz datu gehiago prozesatzea aurreko denbora berean. Aplikazio sinple batzuekin helburu hori lor badaiteke ere, eskuarki arazo asko daude muga horretara iristeko. Arazo nagusia paraleloan exekutatzen diren prozesuen arteko komunikazioa da. Oro har, prozesuak ez dira independenteak eta, haien datuez gain, besteen emaitzak ere erabili behar dituzte, lankidetzan ari baitira problema konplexu bati soluzio bat emateko. Konputagailuaren arkitekturaren arabera, bi aukera daude prozesuen arteko komunikazioa betetzeko.

Konputagailuaren memoria partekatua eta zentralizatua bada, sinkronizazio-funtzio bereziak erabili behar dira aldagai partekatuak atzitzeko. Adibide sinpleena ekoizle/kontsumitzaile exekuzio-ereduarena da: prozesu batzuek datuak ekoizten dituzte, eta beste batzuek datu horiek kontsumitu (erabili) behar dituzte; beraz, kontsumitzaileek zain egon behar dute (ezer egin gabe) ekoizleek datuak sortu arte, eta, oro har, ekoizleek ez dituzte datu gehiago sortuko aurrekoak kontsumitu diren arte.

Bestalde, memoria banatuta badago, prozesadoreek mezuak trukatu behar dituzte haien artean, datuak eskatzeko eta emateko. Mezu horiek sistemaren komunikazio-sarea erabili behar dute, eta komunikazio horrek denbora asko beharko du (komunikazioa kalkulua baino 1.000-10.000 aldiz motelagoa izan ohi da); ondorioz, konputagailu paralelo baten komunikazio-sarea prozesadoreak bezain garrantzitsua da.

Dela sinkronizazio-funtzioen bidez, dela mezu-ematearen bidez, aplikazioa paraleloan exekutatzeagatik ordaindu behar den "bidesaria" da prozesuen arteko komunikazioa. Gainera, sinkronizaziorako edo komunikaziorako behar den denbora prozesadore-kopuruaren arabera hazten da. Beraz, laburki (eta beste zenbait arazo kontuan hartu gabe), honela adieraz daiteke aplikazio baten exekuzio-denbora P prozesadore erabiltzen direnean:

T p = T s / P + T kom P

non Ts serieko exekuzio-denbora, eta Tkom prozesadoreen arteko komunikazioen denbora baitira.

Azken urteotan, asko zabaldu da konputagailu paraleloen erabilera, eta aplikazioak programatzeko tresnak estandar bihurtu dira. Memoria partekatuko sistemetan, OpenMP da gehien erabiltzen den tresna prozesadoreen arteko lan-banaketa eta sinkronizazioa zehazteko. Memoria banatuko sistemetan, ordea, estandarra MPI da, komunikazio-funtzioen liburutegi bat, zeinen bidez erabiltzaileak prozesuak nola eta noiz komunikatzen diren zehaztu behar duen. Paralelismoa gero eta gehiago erabiliko da; izan ere, teknologiaren eboluzioa dela eta, etxean ditugun ordenagailu pertsonalak ere multiprozesadoreak dira dagoeneko, bi (eta laster lau eta zortzi) nukleo dituzte eta. Bestalde, komunikazioetan gertatu diren aurrerapenak direla medio, geografikoki banatuta dauden konputagailuak konputagailu paralelo bakar gisa erabiltzeko aukera ere izango dugu (hori da, hain zuzen, The Grid izeneko proiektuaren helburua).