Instruction Level Parallelism (ILP) – parametr dotyczącyoprogramowania, który mówi o tym jaka część z operacji zawartych w kodzie może być wykonanarównolegle. ILP może być wartością czysto teoretyczna, w której dany programy analizowany jest tak jakby był uruchamiany na maszynie o nieskończonej liczbie zasobów. To znaczy nie są brane pod uwagę inne programy i braki ograniczonych zasobów typurejestry[1]. ILP może być również traktowane jako średnia liczba instrukcji faktycznie wykonywanych równolegle i mówi się wówczas o metodach zwiększania ILP[2][3].
W dosyć prostym przypadku można wyobrazić sobie taki program:
intab=a+b;intcd=c-d;intwynik=ab*cd;
W tym wypadku obliczenie wartościab nie zależy od obliczeniacd i można je wykonać równolegle. Mamy zatem dwa polecenia wykonane w jednej jednostce czasu i trzecią, która wykonana zostanie w drugiej jednostce. Czyli ILP wynosi 3 / 2 = 1½.
Można też rozpatrywać to na zasadzie budowaniagrafuzależności konsumentów i producentów. Zmiennawynik jest konsumentem, który jest połączony z dwoma producentami (graf jest literą V). ILP jest średnią szerokości takiego grafu: (2 + 1) / 2 = 1½[1].
W praktyce badanie ILP może być stosowane do przyśpieszenia wykonania programu w procesorach umożliwiających przetwarzaniepotokowe[3]. Problem jest jednak zarówno identyfikacja niezależnych wątków, jak i synchronizacja wątków, które muszą dać wspólny wynik[2].