Tesi Robotica Analisi, progettazione e implementazione... | Page 169
i
i
“LP_Tesi” — 2013/10/17 — 18:27 — page 169 — #169
i
7.1. PARALLELIZZAZIONE INTERNA
i
169
Algoritmo 7.10 rule r4
1
2
3
4
for(Integer i=0; isize && addr
fromInteger(i));
delta[i].deq();
ramNorth[i].deq();
5
6
7
BitScore cNorth;
BitScore cWest;
8
9
10
11
12
13
if(ramNorth[i].first().dir!=NORTH) cNorth = ramNorth[i].first().
score + gap;
else cNorth = ramNorth[i].first().score + egap;
if(gapWest[i]!=WEST) cWest = west[i] + gap;
else cWest = west[i] + egap;
northWest[i] <= ramNorth[i].first().score;
14
15
16
BitScore cNorthWest = delta[i].first() + northWest[i];
let maxi = max(cNorthWest,cNorth,cWest);
17
18
19
20
21
22
result[i].enq(maxi);
gapWest[i]<=maxi.dir;
west[i]<=maxi.score;
ramNorth[i==intParDeep-1?0:i+1].enq(maxi);
endrule
riempire posizioni oltre la diagonale, in questo modo si svuotano le FIFO di
ingresso delta da valori inutile e allo stesso tempo si evita di inserire cose che
non servono nelle FIFO result. Inoltre è presente un if che forza il riempimento
delle code di uscita result in cui si sia raggiunta l’ultima sequenza di righe
considerate, questo meccanismo è stato adottato per permettere ad un trigger
nella regola che legge result di far uscire gli ultimi elementi calcolati, fra poco
il senso diventerà più chiaro.
Arrivando quindi al caso generale (Alg:7.10) è possibile osservare il modo in cui
le restanti celle vengono riempite.
Queste regole inseriscono i risultati calcolati nelle code result, code che vengono svuotate nelle regole r5 (Alg:7.11). Queste rule si occupano di generare
i pacchetti di 16 direzioni a 32 bit. Quando il contatore shift è uguale a 30
i
i
i
i