Càrculu spartutu

Ntâ nfurmàtica, u **càrculu spartutu** è na manera di elabburari i dati **â parallela**, zuè unni si sparti nu prugramma nta cchiôssai struzzioni o prucessi ca dui o cchiôssai unità di càrculu firrìjanu tutti nzèmmula e nta na vota. Serbi a risòrbiri prubblemi diffìcili â mprescia.

Nascìu pi supirari i lìmmita fìsici dî prucissura ôn *core* sulu. A diffirenza dû càrculu **â ringa** tradizziunali, unni i cunti si fannu unu appressu a n'autru, cca cchiôssai unità di càrculu travàgghianu nzèmmula. Chisti ponnu èssiri i *core* d'un *chip* sulu o i gruppa di nu *cluster*, pi diri.

## Storia

U bisognu di supirari u càrculu â ringa cumparìu già â fini di l'anni 50, quannu i lìmmita di l'architittura di von Neumann, speci u passaggiu dî dati ntra a CPU e a mimoria, accuminciaru a ridùciri quantu rinnìanu i primi carculatura. Nta stu cuntestu, tannu, nascìu u mudeḍḍu PRAM (*Parallel Random Access Machine*), un mudeḍḍu tiòricu ca primmittiva di capiri comu cchiôssai prucissura putèvanu travagghiari nzèmmula senza ca unu trasìa ntê minutagghi tècnici dâ màchina.

Nta l'anni 70, u parallalìsimu attruvò a so prima appricazzioni pràttica chî supercomputer vitturiali. U Cray-1, nisciutu ntô 1976, è u scempru cchiù canusciutu: ô postu di manijari n'upirazzioni sula â vota, putìa appricari a stissa upirazzioni ncapu a assai dati ntô stissu tempu. Nta l'anni 80, certi supercomputer, comu chiḍḍu dû Caltech custrujutu cu 64 prucissura Intel 8086/8087, fìciru vìdiri ca si putìanu aviri pristazzioni auti mittennu nzèmmula assai cumpunenti cummirciali standard, mmeci di custruiri màchini custusi fatti a posta.

Nzin'ô principiu di l'anni 2000, i carculatura si facìanu cchiù lesti acchianannu a friquenza di *clock* dî prucissura. Ma pirò ntô 2004, a nnustria dî semicunnuttura arrivò ôn lìmmitu: l'enirgìa dissipata comu caluri acchianava di manera spuninziali câ friquenza, e adunca nun era pussìbbili cchiù arrifriddari bonu i *chip*. Pi sicutari a fari crìsciri a putenza di càrculu senza squagghiari i circuiti, i pruduttura principiaru a ncucchiari cchiôssai unità nnipinnenti, i *core*, dintra ôn *chip* sulu. A pàrtiri di ḍḍu mumentu, u càrculu spartutu addivintò a norma macari ntâ nfurmàtica di cunzumu.

A pàrtiri dû 2011, u parallalìsimu si spargìu unn'è-è: dî dispusitivi mòbbili (cu l'arrivu dî primi *smartphone* *dual-core* e *quad-core*) ê sistemi *cloud*. Na parti chiavi l'àppiru i GPU (*Graphics Processing Units*). Mmintati pû *rendering* gràficu, st'unità tèninu migghiara di *core* sìmprici ca travàgghianu â parallela. Grazzi a chiattafurmi comu NVIDIA CUDA, oji i GPU s'ùsanu videmma pi scopi ginirali, speci ntê simulazzioni scintìfichi e p'ammajistrari i mudeḍḍi di ntilliggenza artificiali, unni a vilucità d'esecuzzioni addipenni quasi sana dâ capacità di manijari miliardi d'upirazzioni chî matrici ntô stissu tempu.

## Liggi di scalabbilità

L'avànzitu di listizza ca si po aviri facennu caminari nu prugramma â parallela nun è senza lìmmiti. St'avànzitu mpincia nta ḍḍa parti dû prugramma ca s'hâ spèddiri pi forza 'n seri. Stu fattu u schìcanu chiaru chiaru du' liggi matimàtichi.

### Liggi di Amdahl

A liggi di Amdahl fa u cuntu di quantu assai unu po jiri lestu, 'n tiurìa, cu nu prubblema di grannizza fissa. Siḍḍu p è ḍḍu tantu pi centu dû còdici ca po caminari 'n parallelu e 1 - p è ḍḍa parti ca mmeci s'hâ arrisòrbiri 'n filera, l'avànzitu S cu N prucissura è

S(N) = \frac{1}{1 - p + \frac{p}{N}}

Quannu N crisci ô nfinitu, l'avànzitu agghica ôn tettu màssimu di 1/(1 - p). Pi diri, siḍḍu u 5% di nu prugramma s'hâ fari 'n seri, allura S = 20, ca voli diri c'u còdici nun po caminari cchiù lestu di 20 voti, mancu adupirannu millanta prucissura.

### Liggi di Gustafson

A liggi di Gustafson talìa i cosi di n'autru latu. Quannu unu cci àvi cchiôssai prucissura pî manu, ô sòlitu si pìgghianu prubblemi cchiù granni, mmeci d'arrisòrbiri u stissu prubblema cchiù di prescia. Siḍḍu a parti di travagghiu â parallela crisci di paru ô nùmmaru di prucissura, l'avànzitu addiventa

S(N) = N - (N - 1) (1 - p)

## Lìmmiti

Cci sunnu lìmmiti fìsici grossi. Quannu si mèttinu nzèmmula migghiara o dicini di migghiara di prucissura, u cunzumu di currenti elèttrica crisci a sfunneriu, juncennu megawatt di putenza. Stu fattu addumanna spisazzuna pi sustintari a màchina e, supratuttu, p'arrifriddalla, scanzannu chî cumpunenti si squàgghianu pû troppu caudu.

## Liveḍḍi dû parallillìsimu

Cci sunnu furma diversi di càrculu spartutu, a sicunna dâ scala:

### Parallillìsimu a liveḍḍu dî bit

Allungannu a palora (pi diri, passannu di 32 bit a 64 bit), u prucissuri manija nùmmara cchiù granni nta n'upirazzioni sula, arriducennu u nùmmaru di struzzioni ca cci vonnu.

### Parallillìsimu a liveḍḍu dî struzzioni

U prucissuri talìa ntâ siquenza dî struzzioni, attrova chiḍḍi c'un addipènninu una cu n'autra e i sceddi 'n parallelu, oppuru ci cancia u versu pi tèniri accupati tutti i so unità di dintra.

### Parallillìsimu a liveḍḍu dî dati

A stissa upirazzioni veni fatta firrijari 'n parallelu supra a parti diversi dî dati. Sta tècnica è usata assai ntê GPU pi cosi comu u rendering 3D o u machine learning.

### Parallillìsimu a liveḍḍu dî còmpiti

Còmpiti o thread diversi vennu fatti 'n parallelu, supra ê stissi dati oppuru supra a dati diversi.

## Tassunumìa di Flynn

Michael J. Flynn prupunìu na manera sìmprici pi classificari i computer e i prugrammi sicunnu comu manìjanu struzzioni e dati:

* **SISD (''Single Instruction, Single Data'')**: U casu clàssicu di l'elaburazzioni a ringu. Un flussu sulu di struzzioni travagghia supra a nu flussu sulu di dati.
* **SIMD (''Single Instruction, Multiple Data'')**: Na struzzioni sula veni applicata 'n parallelu ncapu a assai dati. S'usa assai ntâ matimàtica vitturiali e ntâ gràfica.
* **MISD (''Multiple Instruction, Single Data'')**: Raru di vìdiri ntâ pràttica. Cchiôssai struzzioni diversi travàgghianu supr'ô stissu datu.
* **MIMD (''Multiple Instruction, Multiple Data'')**: L'architittura â para cchiù cumuni d'oji. Cchiôssai prucissura fannu struzzioni diversi supra a dati diversi.

Oji assai sistemi cci ànnu architittura mmiscati: na CPU clàssica (MIMD) cumanna acciliratura o schedi gràfichi (SIMD) pi fari i cunti cchiù pisanti.

## Maniju dâ mimoria

I computer paralleli ànn'a riggistrari e spàrtiri i dati. Comu u fannu dicidi a so architittura.

Ntâ **mimoria spartuta**, tutti i prucissura ponnu lèggiri e scrìviri ntô stissu spazziu di mimoria. È u casu tìpicu dî PC e dî smartphone. È cchiù fàcili di prugrammari, ma scala malu, picchì i prucissura finìsciunu a fari sciarra p'aviri a priurità nta l'accessu â mimoria. Sparti, quannu si jùncinu assai *core*, cc'è u prubblema di tèniri accurdati i dati ntê mimori di ogni prucissuri (cuirenza dâ cache).

Ntâ **mimoria distribbujuta**, â riversa, ogni prucissuri cci àvi a so mimoria privata. Si serbi nu datu ca sta a n'autra banna, s'àv'a mannari un missàggiu pi menzu dâ riti. Stu sistema scala bonu e si usa ntê *cluster* granni e ntô cloud. Cca u coḍḍu di vuttigghia nun è a mimoria, ma a latenza dâ riti, zuè u tempu c'abbisogna pî missaggi pi viaggiari di nu gruppu a n'autru.

I supercomputer di oji ammìscanu i du' maneri: sunnu *cluster* di màchini attaccati una cu n'autra, ma ogni màchina cci àvi cchiôssai *core* ca spàrtinu a mimoria lucali.

## Standard di prugrammazzioni

Scrìviri software paralleli nun è fàcili pi nenti. S'àv'a capiri bonu comu spàrtiri u travagghju e comu scanzari ca i thread si mpidùgghianu ntra d'iḍḍi. Si du' thread pròvanu a canciari i stissi dati ntô stissu mumentu, finisci a schifiju (*race condition*).

Pi scanzalla s'ùsanu i *lock*, zoè miccanìsimi ca mbrùccanu a trasuta a l'autri thread. U prubblema è ca, si s'esàggira chî lock, i thread ponnu arristari mbruccati pi sempri (*deadlock*).

Pi fari i cosi cchiù fàcili, si nnùpranu stigghi e mudeḍḍi standard:

* **OpenMP e POSIX Threads (Pthreads)**: S'ùsanu ntê sistemi a mimoria spartuta. Si mèttinu direttivi ntô còdici pi dìrici ô cumpilaturi quali parti (comu cicli o task) s'ànn'a fari â parallela ntê thread lucali.
* **Message Passing Interface (MPI)**: U standard principali pâ mimoria distribbujuta. Duna règuli e funzioni pi mannari e arricìviri dati ntra màchini diversi attaccati ntâ riti.

## Mudeḍḍi di disignu

Prubblemi diversi vonnu strutturi diversi pi funziunari bonu:

### Sdicumpusizzioni giumètrica

U spazziu dû prubblema (p'esempiu, na mappa o na grigghia) si sparti a pezzi. Ogni prucissuri travagghia ncapu a na purzioni e scancia sulu i nfurmazzioni ê finaiti chî vicini. S'usa assai nta cosi comu i mudeḍḍi pû tempu o a fluidudinàmica.

### Pipeline

I dati pàssanu pi menzu di na ringata di fasi, n'anticchia comu nta na catina di muntaggiu. Ogni prucissuri guverna na fasi. È bonu quannu cc'è nu flussu cuntìnuu di dati ncapu ê quali s'ànn'a fari sempri i stissi passaggi.

### Mudeḍḍu a attura

Mmeci di spàrtiri a mimoria, u prugramma è fattu di attura nnipinnenti. Ogni atturi cci àvi u so statu e parra cu l'autri sulu pi menzu di missaggi. St'approcciu scala veru bonu e ci veni megghiu pî situazzioni caòtichi e mprividìbbili, comu simulari u tràficu ncapu a migghiara di ncruci, a paraggiu di struttura cchiù stanti comu ngradigghiati o pipeline.

## Càrculu spartutu, distribbujutu e cuncurrenti

L'aggittivu *spartutu* s'usa sparti pi signalijari na virsioni cchiù spicializzata di càrculu spartutu unni cc'è sulu na mimoria ntra tutti i prucissura. Sta spicìfica serbi pi nun cunfùnniri u càrculu spartutu *strictu sensu* cu chiḍḍu distribbujutu, unni si fannu tanti cunti 'n parallelu cu dui o cchiù assai prucissura e cu **dui o cchiù assai mimori**, e chiḍḍu cuncurrenti, unni si manìjanu cchiôssai còmpiti diversi cu **nu prucissuri sulu**.

## Bibbliugrafìa

* 
* 

## Noti



## Lijami di fora

* 
* 
* 
* 
* 
* 
* 

Catigurìa:Nfurmàtica
Catigurìa:Architittura di l'elabburatura