Zad. 2. Dokonać przekształceń prowadzących do zrównoleglenia (o ile jest ono możliwe) poniższej pętli, w sposób optymalny, z wykorzystaniem dyrektyw systemu OpenMP.
do i = 1 ,n~3 e(i) = d(i) * b(i) + d(i-l) f(i) = e(i+2) + c(i)/d(i—1) c(i) = e(i) + f(i) end do
Rozwiązanie. Przeszkodę w bezpośrednim zrównolegleniu stanowi miądzyiteracyjna
przeciwzależność z instrukcji drugiej do pierwszej. Zrównoleglenia można dokonać zamieniając miejscami instrukcję pierwszą i drugą (co jest dopuszczalne ze względu na brak między tymi instrukcjami zależności wewnątrziteracyjnych), aby źródło zależności znalazło się leksykalnie przed ujściem, a następnie wykonując podział pętli, aby źródło i ujście znalazły się w oddzielnych pętlach. Obie otrzymane w ten sposób pętle można zrównoleglić, gdyż brak w każdej z nich zależności międzyiteracyjnych:
ISomp parallel do do i = 1 ,n-3 f(i) = e(i+2) + c(i)/d(i— 1) end do
!$omp end parallel do !$omp parallel do do i = 1 ,n-3 e(i) = d(i) * b(i) + d(i-l) c(i) = e(i) + f(i) end do
!$omp end parallel do
Zad. 3. Obliczyć przepustowość jednostki potokowej o 6 stopniach i czasie cyklu zegara 5 ns w trakcie przetwarzania wektora o długości 5.
Odp. W(N,p) = N / [(p-t-N—1 )ts]
Dane: p = 6 ts = 5 ns N = 5
Po podstawieniu: W(N,p) = 5 / (10 * 5 ns) = 1 / (10 * 10'9 s) = 100 * 106 1/s =
= 100 Mflops