Paralēlās skaitļošanas pamatideja ir sadalīt vienu skaitļošanas uzdevumu vairākos, mazos, atsevišķos uzdevumos un risināt tos vienlaicīgi uz vairākiem skaitļotājiem. Atsevišķus uzdevumus var risināt vienlaikus uz atsevišķām skaitļošanas ierīcēm. Modernajos skaitļošanas procesoros (CPU) skaitļošanu veic procesora kodols (angl. core) un tādi vienā procesorā var būt vairāki. Tas arī var nodrošināt būtisku viena uzdevuma kopējā aprēķinu laika samazinājumu.Piemēram, veicot laika prognozes, tiek veidots matemātisks modelis. Pēc novērojumu datiem un to izmaiņu tendencēm tiek rēķināts, kādas izmaiņas ir gaidāmas nākotnē, bet, veicot aprēķinus ar vienu procesora kodolu, tas aizņem daudz laika, un laika prognozi parītdienai mēs saņemsim tikai pēc nedēļas. Sadalot aprēķinus uz daudziem procesoru kodoliem, var ievērojami samazināt kopējo aprēķinu laiku.Šāda aprēķinu shēma ir parādīta attēlā. Ieejas datus un pašu uzdevumu mēs sadalām N atsevišķos uzdevumos un beigās visus iegūtos rezultātus apkopojam.Viena no superdatoru aktuālajām problēmām ir lielais elektroenerģijas patēriņš. Palielinot procesora darbības ātrumu, palielinās arī elektroenerģijas patēriņš un nepieciešamība pēc dzesēšanas. Paralēlās skaitļošanas priekšrocība ir tāda, ka elektroenerģijas patēriņš sadalās pa daudziem procesora kodoliem un tiek atvieglota arī dzesēšana. Paralēlai skaitļošanai ir arī citas priekšrocības un tās mēs apskatīsim šajā mācību modulī.Uzdevumu sadalīt vairākos vai daudzos atsevišķos apakšuzdevumos var dažādi, un risinājumi var būt atšķirīgi. Šeit apskatīsim vienkāršu piemēru, kā izrēķināt skaitļu summu, izmantojot paralēlo pieeju. Piemērs Anna un Jānis grib aprēķināt 20 skaitļu summu, piemēram, cik kopā izdota nauda par dienas laikā veiktajiem pirkumiem. Viens no viņiem varētu uzņemties šo darbu, tāpat kā viens centrālais procesors veic aprēķinus datorā. Bet, kā viņi to varētu darīt paralēli?Lai saskaitītu pirkumu summu paralēli, Anna un Jānis varētu sadalīt 20 skaitļus divās daļās pa 10 (skatīt attēlu zemāk). Tad katrs no viņiem aprēķina savu 10 skaitļu summu. Pēc tam katra iegūtie rezultāti jāsaskaita un tas būs gala rezultāts.Piemēram, ja Annai vienai pašai, lai sarēķinātu 20 skaitļu summu vajadzētu 20 sekundes, tad, sadalot darbu uz pusēm, tam vajadzētu tikai 10 sekundes, ja abi to darītu vienādā ātrumā.Turklāt, ja 20 ir maksimālais skaits, ko katrs vispār spēj sasummēt, tad abi kopā varētu sasummēt pat 40 skaitļus. Šāds ierobežojums (20 katram) datorā varētu būt tāpēc, ka procesoram ir ierobežots pieejamās atmiņas apjoms. Paralēlo algoritmu tipi Reālajos uzdevumos ir gan secīgi izpildāmas darbības, gan tādas, kuras var veikt paralēli, tāpēc praksē lietojamie paralēlie algoritmi ietver gan atkarību, gan mijiedarbību. Kā divi pretpoli uzskatāmi vienkārši paralēlie (angl. trivially parallel) un savstarpēji cieši saistītie (angl. tightly coupled) algoritmi.Mijiedarbība starp diviem uzdevumiem Annas un Jāņa piemērā par 20 skaitļu saskaitīšanu ir tikai darba uzdevumu sadalīšanā un beigu rezultātu saskaitīšanā. Katram, veicot savu skaitļu saskaitīšanu, nekāda mijiedarbība nav vajadzīga, tāpēc šo algoritmu var uzskatīt par vienkārši paralēlo. Ja Annai aprēķinu veikšanas laikā būtu regulāri jāsadarbojas ar Jāni, tad tas jau būtu cieši saistītais algoritms. Kā šādu piemēru varētu pieminēt Sudoku spēles uzdevuma risināšanu divatā vai arī Lego mājas būvniecību vairākiem kopīgi sadarbojoties.No programmēšanas viedokļa vienkārši paralēlie algoritmi ir vieglāk realizējami un tiem nevajag nodrošināt savienojumu starp procesoriem, kuri veic šo paralēlos uzdevumus. Viens no tādiem piemēriem varētu būt folding@home projekts, kurā caur internetu apvienoti daudzu brīvprātīgo lietotāju personālie datori veic paralēlos skaitļošanas uzdevumus. Varat atcerēties arī Grid skaitļošanu, kurā uz tālu izvietotiem datoru klasteriem caur internetu nosūta datus aprēķiniem. Pēc aprēķinu veikšanas sūtītājs saņem atpakaļ rezultātu no visiem klasteriem un tos tālāk apstrādā. Datu nosūtīšanas un atpakaļ saņemšanas laiks šādā gadījumā ir liels (liela aizture).Savstarpēji cieši saistītu algoritmu gadījumā programmēšana ir sarežģītāka un ātrdarbīgs savienojums ar mazu aizturi (mazu latentumu) starp centrālajiem procesoriem, kuri novietoti vienā klasterī, ir ļoti svarīgs augstas veiktspējas nodrošināšanai. Laika apstākļu prognozēšanas uzdevums ir viens no šādiem piemēriem. Daudzi citi reālie skaitļošanas uzdevumi ir kaut kur pa vidu starp šīm divām galējībām. Paralēlās skaitļošanas veidi Komandas darba modelis A Viens no veidiem, kā realizē paralēlo skaitļošanu, ir, piemēram, skaitļu masīva sadalīšana starp skaitļošanas mezgliem. Šeit, katrs darba darītājs sākotnēji saņem visus savus individuālos uzdevumus. Pēc darba pabeigšanas darītājs ziņo par rezultātiem.Šajā darba modelī (skat. attēlu) darbu vadītājs jau pašā sākumā sadala darbus atbilstoši darbinieku spējām: 1. darbiniekam visvairāk, bet 5. darbiniekam vismazāk darbu. Darāmo darbu atmiņa ir tukša. Šajā brīdī katrs darbinieks izskatās, ka jau ir pabeidzis pa vienam darbam (5 padarītie darbi). Pirmajam darbiniekam vēl jāveic 4 darbi, bet 5. darbiniekam tikai viens.Katrā skaitļošanas elementā (piemēram, CPU kodolā) ir daļa no kopējā datu apjoma un katrs no šiem elementiem veic ar tiem identiskas vai ļoti līdzīgas darbības. Līdzīgi kā piemērā ar Annu un Jāni, katrs no viņiem saskaita viņu rīcībā esošos skaitļus. Komandas darba modelis B Otrs līdzīgs paralelizācijas modelis ir komandas darbs (vadītājs/strādnieki), kur viens no procesoriem dod uzdevumus izpildītājiem un atpakaļ saņem rezultātus. Skaitļošanas uzdevumi var būt līdzīgi, bet var būt arī pilnīgi atšķirīgi. Parasti šādos gadījumos darba uzdevumu ir vairāk nekā izpildītāju un uzdevumi secīgi tiek nosūtīti izpildītājiem.Modelī B redzam, ka vadītājs ir katram darbinieka iedevis pa vienam darāmam darbam. No darbiniekiem pirmais, trešais un ceturtais jau savus darbus ir pabeiguši un gaida nākamo darbu. Savukārt 2. darbinieks un 5. darbinieks vēl turpina veikt savus darbus un saņems nākamo tikai pēc darbu pabeigšanas. Šajā modelī vadītājs var izvietot darbus atbilstoši tam, cik efektīvi dotos uzdevumus katrs darbinieks paveic.Viens no tādiem piemēriem varētu būt, kad Anna, Jānis un Pēteris kopā cep picu. Vispirms Anna uzdod Jānim sagriezt sīpolus, bet Pēterim - sagriezt salami desu. Anna pati sāk gatavot picas pamatni. Kad Jānis ir sagriezis sīpolus, viņš nodod tos Annai (viņa uz to laiku pārtrauc savu darbu). Tad viņa uzdod Jānim nākamo darbu – sarīvēt sieru. Līdzīgi ar Pēteri, kad viņš ir pabeidzis sagriezt salami desu, viņam Anna uzdod sagriezt tomātus. Pašās beigās Anna saliek visu kopā un cep picu. Kombinēts komandas darba modelis Var arī kombinēt dažādas pieejas (komandas darbu un paralēlo datu apstrādi). Piemēram, katrs darbinieks varētu veikt vairākus uzdevumus (kā izejvielu sagatavošana picai) un dati (sīpoli, salami, siers u.c.), kas attiecas uz šiem uzdevumiem, tiek sadalīti starp izpildītājiem. Tas nozīmē, piemēram, ka gan Jānis, gan Pēteris varētu sagriezt gan salami, gan sīpolus. Komandas darba modelis praksē Picas gatavošanas laiks ir atkarīgs no darbinieku efektivitātes un vadītāja spējām optimāli sadalīt darbus. Picas cepšanas rezultāts praksē ir redzams sekojošā attēlā.