Przejdź do zawartości

Instruction Level Parallelism

Z Wikipedii, wolnej encyklopedii
To jest stara wersja tej strony, edytowana przez 31.61.131.129 (dyskusja) o 14:00, 21 cze 2013. Może się ona znacząco różnić od aktualnej wersji.

Instruction Level Parallelism (ILP) paralelizm poziomu instrukcji, mechanizm zrówoleglania fragmentów kodu wykonywany przez procesor na poziomie automatycznego zrównoleglania poszczególnych instrukcji procesora (dokonywany bez ingerencji programisty). o ile starsze procesory potrafily wykonywać instrukcje scisle sekwencyjnie (kolejna instrukcja mogla byc wykonywana dopiero po pełnym wykonaniu poprzedniej) to obecnie wiele wspólczesnych procesorów (np wszystkie w architekturze x86 poczawszy od pierwszego pentium) potrafi wykonywac kod maszynowy w ten sposób ze przypisuje wykonywane instrukcje do odrebnych kanałów (tzw. channels) procesora i potrafi wykonywac je równolegle, tj nawet w tym samym cyklu (lub w rownoleglych kilku cyklach) procesora, Możliwosci takiego zrównoleglania są istotnie limitowane przez zaleznosci miedzy instrukcjami. Procesor mozna zrownoleglic instrukcje b z instrukcja a jezleli do wykonania ktorejs instrukcji b nie jest potrzebny wynik instrukcji a (i analogicznie nawet dla wiekszych ukladów instrukcji). Ogolnie kod maszynowy charakteryzuje sie zaleznosciami miedzy instrukcjami (kolejne dzialania zaleza od wynikow poprzednich) w ramach tego jednak wystepuje wiele drobnych instrukcji które parami, czy tez trójkami lub czwórkami sa niezalezne i moga byc zrownoleglone na poziomie kanałow procesora. Przyspieszenie jakie mozna osiagnac dzieki takiemu paralelizmowi poziomu instrukcji zalezy od stopnia zaleznosci poszczegolnych instrukcji w danym fragmencie kodu i co do rzeędu zwykle wynosi to w granicach (jesli mowa o rzędzie przyspieszenia jaki w praktyce w ten sposob jest uzyskiwany) dwukrotnego przyspieszenia danego kodu - od niewielkiego kilkunastoprocentowego przyspieszenia w niesprzyjajacym przypadku do przyspieszenia o czynnik dla przykladu dwa lub trzy jesli potok instrukcji jest podatny na zrównoleglanie grupami po kilka instrukcji na raz) Programista lub kompilator może pomóc procesorowi przegrupowywujac instrukcje w wynikowym kodzie maszynowym w ten sposób ze wzajemnie niezalezne instrukcje beda w potoku wystepowac obok siebie.

Uzywa sie tez pojec troughput i latency. latency jest to czas jaki zajmuje wykonanie instrukcji, w niesprzyjajacym przypadku czas wykonania kodu bylby sumą czasów latency wszystkich instrukcji - dzieki opcji zrownolegliwiania instrukcji czas wykonywania calosci moze byc mniejszy. Truoughput opisuje mozliwosci przetwarzania danej maszyny w konkretnej sprzyjajacej sytuacji gdy nastepuje zrównoleglanie wtedy czas całosci jest mniejszy niz ten wynikajacy z sum latencji.