Równoległość zadań - Task parallelism

Równoległość Zadanie (znany również jako funkcja równoległości i kontroli zbieżności ) jest formą paralelizacji z kodu komputerowego na wielu procesorach z równoległego przetwarzania danych warunkach. Paralelizm zadań koncentruje się na dystrybucji zadań - wykonywanych jednocześnie przez procesy lub wątki - na różne procesory. W przeciwieństwie do paralelizmu danych, który polega na uruchamianiu tego samego zadania na różnych składnikach danych, równoległość zadań wyróżnia się tym, że jednocześnie wykonuje się wiele różnych zadań na tych samych danych. Powszechnym typem równoległości zadań jest potokowanie, które polega na przenoszeniu pojedynczego zestawu danych przez serię oddzielnych zadań, w których każde zadanie może być wykonywane niezależnie od innych.

Opis

W systemie wieloprocesorowym równoległość zadań jest osiągana, gdy każdy procesor wykonuje inny wątek (lub proces) na tych samych lub różnych danych. Wątki mogą wykonywać ten sam lub inny kod. W ogólnym przypadku różne wątki wykonawcze komunikują się ze sobą podczas pracy, ale nie jest to wymagane. Komunikacja zwykle odbywa się poprzez przekazywanie danych z jednego wątku do drugiego w ramach przepływu pracy .

Jako prosty przykład, jeśli system uruchamia kod w systemie 2-procesorowym ( procesory „a” i „b”) w środowisku równoległym i chcemy wykonywać zadania „A” i „B”, można powiedzieć Procesor „a” wykonuje zadanie „A” i procesor „b” wykonuje zadanie „B” jednocześnie, co skraca czas wykonywania zadania . Zadania można przydzielać za pomocą instrukcji warunkowych, jak opisano poniżej.

Paralelizm zadań podkreśla rozproszony (równoległy) charakter przetwarzania (tj. Wątki), w przeciwieństwie do danych ( równoległość danych ). Większość rzeczywistych programów znajduje się gdzieś na kontinuum między równoległością zadań a równoległością danych.

Równoległość na poziomie wątku ( TLP ) to paralelizm nieodłączny w aplikacji, która uruchamia wiele wątków jednocześnie. Ten typ równoległości występuje głównie w aplikacjach napisanych dla serwerów komercyjnych , takich jak bazy danych. Uruchamiając wiele wątków jednocześnie, aplikacje te są w stanie tolerować duże ilości operacji we / wy i opóźnienia systemu pamięci, które mogą powodować ich obciążenia - podczas gdy jeden wątek jest opóźniony w oczekiwaniu na dostęp do pamięci lub dysku, inne wątki mogą wykonywać pożyteczną pracę.

Wykorzystanie równoległości na poziomie wątków również zaczęło wkraczać na rynek komputerów stacjonarnych wraz z pojawieniem się wielordzeniowych mikroprocesorów. Stało się tak, ponieważ z różnych powodów coraz bardziej niepraktyczne stało się zwiększanie szybkości zegara lub instrukcji na takt pojedynczego rdzenia. Jeśli ten trend się utrzyma, nowe aplikacje będą musiały być projektowane tak, aby wykorzystywały wiele wątków, aby skorzystać ze wzrostu potencjalnej mocy obliczeniowej. Kontrastuje to z poprzednimi innowacjami mikroprocesorowymi, w których istniejący kod był automatycznie przyspieszany, uruchamiając go na nowszym / szybszym komputerze.

Przykład

Poniższy pseudokod ilustruje równoległość zadań:

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

Celem programu jest wykonanie jakiegoś zadania całkowitego netto („A + B”). Jeśli napiszemy kod jak powyżej i uruchomimy go na systemie 2-procesorowym, środowisko wykonawcze wykona go w następujący sposób.

  • W systemie SPMD (pojedynczy program, wiele danych) oba CPU wykonają kod.
  • W środowisku równoległym obaj będą mieli dostęp do tych samych danych.
  • Klauzula „if” rozróżnia procesory. CPU "a" odczyta prawdę na "if", a CPU "b" odczyta prawdę na "else if", mając tym samym swoje własne zadanie.
  • Teraz oba procesory wykonują jednocześnie oddzielne bloki kodu, wykonując jednocześnie różne zadania.

Kod wykonywany przez CPU „a”:

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

Kod wykonywany przez CPU „b”:

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

Tę koncepcję można teraz uogólnić na dowolną liczbę procesorów.

Wsparcie językowe

Równoległość zadań może być obsługiwana w językach ogólnego przeznaczenia przez wbudowane narzędzia lub biblioteki. Godne uwagi przykłady obejmują:

Przykłady precyzyjnych języków równoległych między zadaniami można znaleźć w dziedzinie języków opisu sprzętu, takich jak Verilog i VHDL .

Zobacz też

Bibliografia