.kiedy mozna zrownoleglic petle:
-takie same literaly lub indeksy
[czyli jak jest c(i+1) pozniej c(i) to nie mozna zrwonoleglic, musi byc c(i) pozniej c(i) albo c(i+1) pozniej c(i+1) itp np:
...
c(i+1) = c(i) * a(i+1) !tu nie mozna zrobic petli parallel bo tablica c() odwoluje sie do roznych zmiennych
...
-jak nie ma zadnej stalej
[bo inne watki moga chceic kozytac z danej stalej,
zas jej wartosc moze zostac zmienoona przez inny watek co powoduje kolizje
czyli:
!$omp parallel do private(x) !to ze jest private to znaczy ze watek tworzy sobie prywatna kopia zmiennej x na ! swoje potrzeby
do i = 1,19
x = (b(i)+c(i))/2 !do zmiennej x odowluja sie inne instrukcje wiec x musi byc razem z tymi !instrukcjami
a(i) = a2(i) + x
enddo
!$omp end parallel do
]
!!!!!!!!!!!!!!!!!!!!ZAWSZE ZACZYNAMY ROZPATRYWANIE OD WIEKSZEGO ITERAŁU!!!!!!!!!!!!!!!!!
PRZECIWZALEZNOSC - wystepuje wtedy gdy dana wartosc jest uzywana przed jej zdefiniowaniem,
[czyli jak jest wieksza lub rowna(iteracja) przed uzyciem]
np:
S: a(i,j) = c(i+1,j−1) + b(i−1,j)
T: c(i−1,j+1) = a(i,j−1) + b(i,j)
zachodzi przeciwzaleznosc w tablicy c() S -> T
ZALEZNOSC PRZEPLYWU - [odwrotenie] jak zmienna jest zadeklarowana a pozniej uzyta
np:
S: a(i,j) = c(i+1,j−1) + b(i−1,j)
T: c(i−1,j+1) = a(i,j−1) + b(i,j)
zachodzi zaleznosc przeplywu w tablicy a() w S -> T
ZALEZNOSC WEWNATRZITERACYJNA - zachodzi wtedy gdy kilka instrukcji uzywa tych samych wartosci tablicy
np:
S: a(i,j) = c(i+1,j−1) + b(i−1,j)
T: c(i−1,j+1) = a(i,j−1) + b(i,j)
U: b(i,j+1) = c(i−1,j) + b(i−1,j+1) − a(i,j)
zachodzi zaleznosc wewnatrziteracyjna dla tablicy a() w S -> U
ZALEZNOSC MIEDZYITERACYJNA - wystepuje gdy rozne instrukcej kozytaja z roznych wartosci danej tablicy
np:
S: a(i,j) = c(i+1,j−1) + b(i−1,j)
T: c(i−1,j+1) = a(i,j−1) + b(i,j)
zachodzi zaleznosc miedzyiteracyjna dla tablicy a() w S -> T
jak jest zaleznosc wewnatrziteracyjna to moze zostac w w jednym zrownolegleniu [parralell....end]
kiedy jest zaleznosc miedzyiteracyjna to musimy podzielic kod i wykonac w oddielnych petlach
SEMAFORY:
FIFO - jak kolejka w sklepie
pamietaj o pkt[w jakiej kolejnosci szczerbus chce zwolnic zasoby]
zapisywać ilość wolnego miejsca [srodkowa kolumna]
zapisac [trzecia kolumna] czy zasob jest nieaktywny[jesli nei dostal sie do kolejki] i kiedy jest aktywny [jesli jakies miejsce w kolejce zostanie zwolnione]
LIFO - jak taleze :)
-