ARCES University of Bologna Programmazione di un processore riconfigurabile Mario Toma
ARCES University of Bologna Architettura
ARCES University of Bologna ….. pgaload ….. pgaop $3,$4,$5 …... Add $8, $3 Estensione dellInstruction Set Register File Configuration Memory Configuration Memory
ARCES University of Bologna Descrizione della PiCo-Cell 4x32-bit input data da Reg File 2x32-bit output data a Reg File PiCoGA Control Unit INPUT LOGIC INPUT LOGIC LUT 16x2 LUT 16x2 OUTPUT LOGIC, REGISTERS OUTPUT LOGIC, REGISTERS CARRY CHAIN CARRY CHAIN LUT 16x2 LUT 16x2 EN PiCoGA control unit signals Configuration bus Loop-back 12 global lines to/from Reg File INPUT CONNECT BLOCK INPUT CONNECT BLOCK SWITCH BLOCK INPUT CONNECT BLOCK INPUT CONNECT BLOCK OUTPUT CONNECT BLOCK OUTPUT CONNECT BLOCK RLC … … … … … … …
ARCES University of Bologna RLC: Schema a blocchi
ARCES University of Bologna Blocco di gestione delle uscite Dalle LUT X[1:0] Y[1:0]
ARCES University of Bologna Funzionalità di base di un RLC LUT 4:2 A BC D Z[3:2]Z[1:0] OUTPUT LOGIC 2 2 INPUT LOGIC Due funzioni logiche indipendenti, 4 ingressi e 2 uscite A0A0 B0B0 C0C0 D0D0 A1A1 B1B1 C1C1 D1D1 ZoZo Z1Z1 Z2Z2 Z3Z3 Esempio: 4 porte logiche elementari (AND,OR,XOR)
ARCES University of Bologna Funzionalità di base di un RLC LUT 4:2 AB Z[3:2]Z[1:0] OUTPUT LOGIC 2 2 INPUT LOGIC 22 Una funzione con 4 ingressi e 4 uscite X 22 4 A B Z Esempio: moltiplicatore di operandi a 2 bit
ARCES University of Bologna Funzionalità di base di un RLC LUT 4:2 AB Z[1:0] OUTPUT LOGIC 2 2 INPUT LOGIC 22 Una funzione con 5 ingressi e 2 uscite C A B SEL Z Esempio: multiplexing tra coppie di bit
ARCES University of Bologna Funzionalità di base di un RLC LUT 4:2 AB Z OUTPUT LOGIC INPUT LOGIC 22 Una funzione con 6 ingressi e 1 uscita C0C0 1 1 C[1:0] Z Esempio: multiplexer 4:1 1 C1C1 A0A0 B0B0 A1A1 B1B1
ARCES University of Bologna Sommatore ad 8 bit Prima LUT: calcolo della somma (ipotesi che carry-in=0) Seconda LUT: calcolo del carry (con carry-in=0 e con carry-in=1) Se carry-in=1 al risultato viene sommato 1 (a valle della LUT)
ARCES University of Bologna Catena del carry Look-ahead: carry-out viene calcolato per entrambi i possibili valori di carry-in ingresso LUT per il calcolo del carry-out In azzurro i blocchi utilizzati Operandi in ingresso RLC omogenei, ma posizioni pari e dispari sono programmati diversamente Percorso critico
ARCES University of Bologna Memoria Memoria di 256 locazioni da 8 bit (256x8) Utilizzate 3 righe del PiCoGA LUT 6:1 MUX 4:1
ARCES University of Bologna LUT CARRY LUT SUM A CARRY CHAIN Accumulatore + INPUT LOGIC Carry-in Carry-out REG Feed-back interno allRLC per evitare il ritardo introdotto dal routing Cella elementare di un accumulatore Registro contenente il risultato parziale (stato interno) Come inizializzare lo stato interno?
ARCES University of Bologna Inizializzazione stato interno Si possono distinguere 4 modalità di inizializzazione, tutte supportate dal PiCoGA Il segnale INIT è generato dall Unità di Controllo
ARCES University of Bologna PiCoGA Control Unit Esecuzione Pipeline del PiCoGA Mapping Pga_op2 Mapping Pga_op1 Data Flow Graph Data out Data in
ARCES University of Bologna Latenza ed Issue Delay Latenza: tempo (in numero di cicli di clock) tra linizio di una pga-op e la produzione dei risultati Issue delay: tempo minimo che deve intercorrere tra due pga-op consecutive Latenza dipende dal percorso critico (Nodi Latenza = 4) Issue delay dipende dalle dipendenze di dato. Es: nodo 3 non può elaborare per due cicli consecutivi (il suo risultato serve sia a 4 che a 5 in due cicli diversi). Issue delay = 2
ARCES University of Bologna Region Partitioning Func. 1 Func. 2 Func. 3 Func. 4 Func. n Configuration Cache PiCoGA Attraverso listruzione di pga-load una configurazione viene caricata nel PiCoGA Le risorse del PiCoGA possono essere partizionate tra più funzioni Funzioni caricate possono elaborare concorrentemente
ARCES University of Bologna Array multi-contesto Func. 1 Func. 2 Func. 3 Func. 4 Func. n Configuration Cache PiCoGA 4 piani di configurazione memorizzati nel PiCoGA, uno dei quali elabora 1 ciclo di clock per passare da un piano allaltro Mentre un piano esegue un altro viene riconfigurato nessun overhead di riconfigurazione Region partitioning + multi-contesto fino a 16 pga-op memorizzabili nel PiCoGA
ARCES University of Bologna Metodologia di Sviluppo Algoritmi Sorgente C Profiling –Estrazione dei kernel duri Configurazione PiCoGA Simulazione software Codice eseguibile
ARCES University of Bologna Compilazione per XiRisc Tool software per generare leseguibile per XiRisc Profiler: tool per stimare i tempi di esecuzione File.c C COMPILER ASSEMBLER LINKERFile.exeSOFTWARESIMULATORPROFILER ASSEMBLERSCHEDULER
ARCES University of Bologna Profiling Si visualizza il numero di cicli di esecuzione associati ad ogni riga di codice C
ARCES University of Bologna Descrizione di una Pga-op Problema: descrivere come programmare le RLC e le interconnessioni Obiettivo: descrizione ad alto livello, che non richieda una conoscenza dettagliata dellhardware Soluzione: si utilizza un linguaggio pseudo-C, il Griffy-C Sintassi compatibile con ANSI-C Operatori C (somma, shift) corrispondono a configurazioni hardware
ARCES University of Bologna Griffy-C Linguaggio C semplificato: –Corrispondenza fra istruzione C ed elemento di libreria (modulo) istanziato Estensioni al linguaggio C: –Supporto variabili di dimensioni non standard –Supporto flag di overflow –Possibilità di definire tabelle di verità (LUT)
ARCES University of Bologna #pragma fpga differenza_assoluta 0x dataout datain1 datain2 { unsigned char diff1, diff2; char cond; #pragma attrib cond SIZE=1 diff1 = datain1 - datain2; diff2 = datain2 - datain1; cond = diff1 < 0; dataout = cond ? diff2 : diff1; } #pragma end Dal Griffy-C al Mapping -- MUX
ARCES University of Bologna Esempio Codice di riferimento …. char RowA[64], RowB[64]; …. for(i=0;i<16;i++) { if(MEM[i]>0) for(j=4*i;j<4*(i+1);j++) { a=RowA[j]; b=RowB[j]; dif=a-b; acc+=dif; } else for(j=4*i;j<4*(i+1);j++) { a=RowA[j]; b=RowB[j]; m=a+b/2; if (m>max) max=m; } } Codice per XiRisc …. unsigned long RowA[16], RowB[16]; …. for(i=0;i<16;i++) { if(MEM[i]>0) pgaop1(RowA[i],RowB[i],acc); else pgaop2(RowA[i],RowB[i],max); }
ARCES University of Bologna Esempio: Profiling Codice di riferimento char RowA[64], RowB[64]; 1 acc=0; 1 max=0; 184 for(i=0;i<16;i++) { 176if(MEM[i]>0) 0for(j=4*i;j<4*(i+1);j++) { 0a=RowA[j]; 0b=RowB[j]; 0dif=a-b; 0acc+=dif; } 0else 1296for(j=4*i;j<4*(i+1);j++) { 512a=RowA[j]; 512b=RowB[j]; 576m=a+b/2; 384if (m>max) max=m; } 0} Codice per XiRisc unsigned long RowA[16], RowB[16]; 1 acc=0; 1 max=0; 184 for(i=0;i<16;i++) { 176if(MEM[i]>0) 0 pgaop1(RowA[i],RowB[i],acc); 0 else 304 pgaop2(RowA[i],RowB[i],max); } Totale: 3649 cicli Totale: 673 cicli Speed-up: 5.4x
ARCES University of Bologna Pga-op1: Mapping Si sfruttano parallelismo e pipelining Latenza: 4 Issue delay: 1
ARCES University of Bologna Pga-op2: Mapping Latenza: 6 Issue delay:3 Occupazione: 6 righe 40 RLC
ARCES University of Bologna Pga-op2: Mapping ottimizzato Latenza: 6 Issue delay:1 Occupazione: 6 righe 56 RLC
ARCES University of Bologna DES (Data encryption Standard) Algoritmo con operazioni bit-level Processori tradizionali poco efficienti Funzione non-lineare f mappabile su PiCoGA
ARCES University of Bologna DES: Round f Riordinamento di bit: non coinvolge gli RLC ma solo il routing 8 tabelle di sostituzione (64 entry da 8 bit) Implementabile con 64 RLC La chiave è unica durante la cifratura. Possono essere precalcolate le 16 chiavi utilizzate ad ogni round
ARCES University of Bologna DES: Data Flow Graph
ARCES University of Bologna DES: Mapping Espansione e permutazione iniziale eseguita dal routing Permutazione finale richiede una riga 4 righe, latenza=3 cicli, issue delay=1 ciclo
ARCES University of Bologna unsigned long key_sp[8][64]; unsigned long f(unsigned long r, char *subkey) { unsigned long *spp; unsigned long rval, rt; int er; subkey += 7; er = ((int) r << 1) | ((r & 0x ) ? 1 : 0); spp = &key_sp[7][0]; rt = (unsigned long) r >> 3; rval |= spp[((int) rt ^ *subkey--) & 0x3f]; spp -= 64; ….. spp -= 64; rt >>= 4; rval |= spp[((int) rt ^ *subkey--) & 0x3f]; spp -= 64; rt >>= 4; rt |= (r & 1) << 5; rval |= spp[((int) rt ^ *subkey) & 0x3f]; return rval; } DES: Codice C Routine si traduce con 106 instruzioni assembler (RISC) Mappabile con una sola pga-op Nessuna corrispondenza diretta tra codice C e Data Flow Graph
ARCES University of Bologna Realizzazione di un sommatore di 8 elementi, ciascuno rappresentato da 8 bit, sull'architettura riconfigurabile XiRisc. Scrivere il codice C relativo all'implementazione tradizionale (puramente software) Effettuare mapping su PiCoGA del sommatore, stimando la latenza Riscrivere il codice C con l'opportuno inserimento delle pga-op Fornire una stima dello speed-up ottenibile Ipotesi semplificativa: Non considerare l'overflow sui risultati intermedi Esercizio
ARCES University of Bologna Soluzione esercizio: Codici C Soluzione software { char a[8]; char sum,sum1,sum2,sum3; char sum4, sum5, sum6; sum1=a[0]+a[1]; sum2=a[2]+a[3]; sum3=a[4]+a[5]; sum4=a[6]+a[7]; sum5=sum1+sum2; sum6=sum3+sum4; sum=sum5+sum6; } Soluzione su XiRisc { char a[8]; char sum; pga-op( (int) sum, ((int *)a)[0], ((int *)a)[1]); }
ARCES University of Bologna Soluzione esercizio: mapping