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