Paralelism sarcină - Task parallelism

Paralelismul sarcinilor (cunoscut și sub numele de paralelism funcțional și paralelism control ) este o formă de paralelizare a codului computerului pe mai multe procesoare din medii de calcul paralele . Paralelismul sarcinilor se concentrează pe distribuirea sarcinilor - executate simultan de procese sau fire - pe diferite procesoare. Spre deosebire de paralelismul de date care implică executarea aceleiași sarcini pe diferite componente ale datelor, paralelismul sarcinii se distinge prin executarea mai multor sarcini diferite în același timp pe aceleași date. Un tip comun de paralelism de sarcini este pipeliningul care constă în mutarea unui singur set de date printr-o serie de sarcini separate în care fiecare sarcină poate fi executată independent de celelalte.

Descriere

Într-un sistem multiprocesor, paralelismul sarcinilor se realizează atunci când fiecare procesor execută un fir diferit (sau proces) pe aceleași date sau date diferite. Firele pot executa același cod sau cod diferit. În cazul general, diferite fire de execuție comunică între ele pe măsură ce funcționează, dar aceasta nu este o cerință. Comunicarea are loc, de obicei, prin trecerea datelor de la un fir la altul ca parte a unui flux de lucru .

Ca un exemplu simplu, dacă un sistem rulează cod pe un sistem cu 2 procesoare ( procesoare "a" & "b") într-un mediu paralel și dorim să facem sarcinile "A" și "B", este posibil să spunem CPU "a" pentru a efectua sarcina "A" și CPU "b" pentru a efectua sarcina "B" simultan, reducând astfel timpul de execuție al execuției. Sarcinile pot fi atribuite folosind instrucțiuni condiționale, așa cum este descris mai jos.

Paralelismul activităților subliniază natura distribuită (paralelizată) a procesării (adică firele), spre deosebire de date ( paralelismul datelor ). Majoritatea programelor reale cad undeva pe un continuum între paralelismul sarcinilor și paralelismul datelor.

Paralelismul la nivel de fir ( TLP ) este paralelismul inerent unei aplicații care rulează mai multe fire simultan. Acest tip de paralelism se găsește în mare parte în aplicații scrise pentru servere comerciale precum baze de date. Rularea mai multor fire simultan, aceste aplicații sunt capabile să tolereze cantitățile mari de I / O și latență ale sistemului de memorie pe care le pot suporta încărcările lor de lucru - în timp ce un fir este întârziat în așteptarea accesului la memorie sau disc, alte fire pot face lucrări utile.

Exploatarea paralelismului la nivel de fir a început, de asemenea, să facă răscruce în piața desktop-urilor odată cu apariția microprocesoarelor multi-core . Acest lucru s-a întâmplat deoarece, din diverse motive, a devenit din ce în ce mai puțin practic să crești fie viteza ceasului, fie instrucțiunile pe ceas ale unui singur nucleu. Dacă această tendință continuă, noile aplicații vor trebui să fie proiectate pentru a utiliza mai multe fire de execuție pentru a beneficia de creșterea puterii de calcul potențiale. Acest lucru contrastează cu inovațiile anterioare ale microprocesorului în care codul existent a fost automat accelerat rulându-l pe un computer mai nou / mai rapid.

Exemplu

Pseudocodul de mai jos ilustrează sarcina paralelism:

program:
...
if CPU = "a" then
    do task "A"
else if CPU="b" then
    do task "B"
end if
...
end program

Scopul programului este de a realiza o sarcină totală netă ("A + B"). Dacă scriem codul ca mai sus și îl lansăm pe un sistem cu 2 procesoare, atunci mediul de execuție îl va executa după cum urmează.

  • Într-un sistem SPMD (program unic, date multiple), ambele procesoare vor executa codul.
  • Într-un mediu paralel, ambele vor avea acces la aceleași date.
  • Clauza „if” diferențiază între procesoare. CPU "a" va citi true pe "if" și CPU "b" va citi true pe "else if", având astfel propria sarcină.
  • Acum, ambele CPU execută blocuri de cod separate simultan, efectuând diferite sarcini simultan.

Cod executat de CPU „a”:

program:
...
do task "A"
...
end program

Cod executat de CPU „b”:

program:
...
do task "B"
...
end program

Acest concept poate fi acum generalizat la orice număr de procesoare.

Suport lingvistic

Paralelismul sarcinilor poate fi acceptat în limbaje de uz general, fie prin facilități încorporate, fie prin biblioteci. Exemple notabile includ:

Exemple de limbaje paralele cu sarcini fine pot fi găsite în domeniul Limbajelor de descriere hardware, cum ar fi Verilog și VHDL .

Vezi si

Referințe