matite e gomma

Logo di Conformità WCAG-1 di Livello Tripla A, W3C-WAI Web Content Accessibility Guidelines 1.0

Validazione XHTML 1.0 Validazione CSS 3
Logo del Dipartimento di Matematica e Informatica, Insegnamento di Sistemi dedicati, link al Forum

Progetto e realizzazione di un coprocessore multicore mappato in memoria

Lezione 12 di Sistemi dedicati

Docente: Giuseppe Scollo

Università di Catania
Dipartimento di Matematica e Informatica
Corso di Laurea Magistrale in Informatica, AA 2018-19

Indice

  1. Progetto e realizzazione di un coprocessore multicore mappato in memoria
  2. argomenti della lezione
  3. spazio di progetto
  4. evoluzione del codesign di calcolo del delay
  5. struttura di un coprocessore multicore
  6. vincoli all'interfaccia hardware
  7. flusso di lavoro del progetto
  8. progetto hardware del coprocessore multicore
  9. interfaccia hardware del coprocessore
  10. mappa dei registri del coprocessore
  11. sistema Nios II con coprocessore e Performance Counter
  12. driver software
  13. programmi di test e misura delle prestazioni
  14. risultati delle misure di prestazioni
  15. riferimenti

argomenti della lezione

di che si tratta:

spazio di progetto

possibili evoluzioni del codesign realizzato nell'esercitazione precedente si possono prefigurare lungo due direzioni ortogonali di sviluppo:

un esempio di combinazione ortogonale delle due direzioni è dato dai seguenti obiettivi per un primo progetto che qui si affronta:

estensioni funzionali più significative sono individuabili dalla considerazione di funzioni, definite sulle traiettorie di Collatz, diverse dal delay ma per il calcolo delle quali è comunque necessaria la generazione delle traiettorie

evoluzione del codesign di calcolo del delay

una prima alternativa di progetto da considerare per la replica delle unità hardware di calcolo del delay è:

la seconda opzione è preferibile in vista di possibili ulteriori estensioni che richiedessero accesso delle diverse istanze a dati condivisi, e.g. definiti come parametri di configurazione

altre decisioni di progetto riguardano il numero delle istanze parallele di calcolo, dette core nel seguito, e la dimensione dei dati di I/O del coprocessore

struttura di un coprocessore multicore

l'estensione a 64 bit dell'input del singolo core è ottenuta facilmente con ovvia modifica del sorgente Gezel dall'esercitazione precedente e con la stessa correzione all'output VHDL del traduttore fdlvhd

occorre poi dotare il coprocessore multicore di circuiti per il corretto smistamento dei dati di I/O fra l'interfaccia e un core selezionato dal processore:

la descrizione in VHDL della multiplazione è semplice se si collocano gli output dei core in un vettore da 2n×16 bit, basta infatti usare un operatore di selezione sul vettore

la descrizione in VHDL della demultiplazione, più complessa, è fattibile usando un operatore di scorrimento logico, come esemplificato per un decodificatore generico in Zwoliński, 4.2.3

vincoli all'interfaccia hardware

lo scambio di segnali alle porte di I/O del coprocessore multicore va adattato ai segnali disponibili all'interfaccia Avalon-MM, tenendo conto di alcuni vincoli su questi, quali:

poiché il processore Nios II può trasferire in una singola transazione non più di 32 bit, si conviene che questa sia la larghezza di parola del coprocessore all'interfaccia Avalon, ovvero la larghezza dei segnali writedata e readdata

lo spazio degli indirizzi di registro del coprocessore è dunque l'intervallo [0, 3×2n], tenendo conto di un indirizzo per il registro di stato, dunque address è largo n+2 bit

flusso di lavoro del progetto

fasi principali di sviluppo:

progetto hardware del coprocessore multicore

produzione della descrizione VHDL del coprocessore multicore in due passi:

i rispettivi sorgenti delay_collatz.vhd e multicore_delay_collatz.vhd sono disponibili nella cartella vhdl dell'archivio allegato

il coprocessore è dotato dell'input core_select a n bit che codifica il core a cui smistare l'operazione di I/O, mentre gli output done dei core individuali sono esposti quale stato globale in una porta parallela di output a 2n bit

le cartelle delay_collatz, mc_delay_collatz e mc_interface sono intese ospitare progetti di compilazione e simulazione dei suddetti sorgenti e di quello descritto appresso; cartelle omonime in tests forniscono rispettivi file di input per le simulazioni

interfaccia hardware del coprocessore

un'istanza del componente coprocessore multicore è incorporata nell'interfaccia Avalon memory-mapped descritta dal sorgente multicore_delay_collatz_avalon_interface.vhd e accede ai seguenti segnali del bus Avalon:

l'acquisizione dell'input a 64 bit per il coprocessore avviene dunque in due cicli di bus, perciò l'interfaccia deve memorizzare il dato ricevuto nel primo ciclo per poi concatenarlo a quello ricevuto nel secondo ciclo; ne consegue la classica struttura a due processi della descrizione:

d'altra parte, l'output a 32 bit del dato a 16 bit prodotto da un core del coprocessore ne richiede l'estensione con zeri, realizzata dall'interfaccia

la consultazione del sorgente multicore_delay_collatz_interface.vhd mostra le relazioni tra i segnali di I/O del componente di calcolo e i segnali all'interfaccia Avalon

mappa dei registri del coprocessore

la costruzione con Qsys del sistema Nios II con il componente coprocessore, simile a quella dell'esercitazione precedente, assegna al coprocessore un indirizzo base e, a partire da questo, un'area di memoria per i suoi registri di I/O

la seguente mappa dei registri indica anche i segnali del componente coprocessore individuati dai corrispondenti offset di registro, indicizzati dal valore di core_select in parentesi, dove k = 2n è il numero di core paralleli, e con la legenda :

ro segnale ao             ro segnale ao
0 x0(0)[31..0] 0   2k delay(0) 8k
1 x0(0)[63..32] 4     ...  
  ...     3k-1 delay(k-1) 12k-4
2(k-1) x0(k-1)[31..0] 8(k-1)   3k status 12k
2k-1 x0(k-1)[63..32] 8k-4        

sistema Nios II con coprocessore e Performance Counter

le successive fasi di sviluppo sono simili a quelle dell'esercitazione precedente:

la costruzione Qsys del sistema Nios II è più celere se effettuata come modifica del sistema Qsys dell'esercitazione precedente, dal quale si rimuove il componente delay_collatz_avalon_interface e gli si aggiunge un'istanza del nuovo componente multicore_delay_collatz_avalon_interface

driver software

gli script TCL per la generazione del driver software nel BSP del progetto, forniti nella cartella codesign/ip/multicore_delay_collatz_avalon_interface dell'archivio allegato, sono simili a quelli dell'esercitazione precedente

i sorgenti C del driver software, forniti nella cartella HAL allo stesso percorso, differiscono da quelli dell'esercitazione precedente nei seguenti aspetti:

programmi di test e misura delle prestazioni

i programmi di test e misura delle prestazioni forniti nelle cartelle codesign/amp* dell'archivio allegato calcolano il delay per 2M punti d'inizio a partire da X_BASE = 1128784494896128

in entrambe le versioni del test, il programma assegna al core j il calcolo del delay per i punti di inizio nella classe di congruenza j mod MDC_N_CORES, dunque per 2M/32 = 64K traiettorie (in media nella seconda versione); la differenza fra le versioni in codesign/amp_s* e quelle in codesign/amp_t* è la seguente:

i parametri di creazione dei progetti nel Monitor Program sono indicati nel file allegato MonitorNotes.txt

risultati delle misure di prestazioni

la compilazione, caricamento sulla FPGA ed esecuzione del programma sequential_multicore_delay_collatz_timing, nei due progetti codesign/amp_s e codesign/amp_s_o3 produce i Performance Counter Report in figura

Performance Report della versione sequenziale, ottimizzazione O1

Performance Report della versione sequenziale, ottimizzazione O3

seguono infine i Performance Counter Report dell'esecuzione del programma statustest_multicore_delay_collatz_timing, nei due progetti codesign/amp_t e codesign/amp_t_o3

Performance Report della versione status-tested, ottimizzazione O1

Performance Report della versione status-tested, ottimizzazione O3

riferimenti

materiali utili per l'esperienza di laboratorio proposta: