"Interprétation matérielle de temps multi-dimensionnel " 10/12/2018 MMAlpha "Interprétation matérielle de temps multi-dimensionnel " Anne-Claire GUILLOU 2eme année de thèse Equipe COSI (COnception SIlicium) Directeur : Patrice Quinton et Tanguy Risset
Séminaire CoSi - MMAlpha Plan Introduction Temps multi-dimensionnel Exemple du produit Matrice-Matrice Transformation sur une équation Implémentation des mémoires Conclusion 10/12/2018 Séminaire CoSi - MMAlpha
Séminaire CoSi - MMAlpha Contexte Exploration, implémentation amélioration et test de la génération hardware MMAlpha Valider l'implémentation de nouveaux algorithmes : DLMS Améliorations et extension du VHDL généré Précision virgule fixe et troncature L ’expression du temps multi-dimensionnel Réseaux 2D 10/12/2018 Séminaire CoSi - MMAlpha
Le temps multi-dimensionnel Le temps logique est un vecteur Motivation : permet de traiter des algorithmes complexes Algorithmes intrinsèquement multi-dimensionnel Partitionnement LSGP - Pavage Architectures pour les problèmes à N dimensions 10/12/2018 Séminaire CoSi - MMAlpha
Le temps multi-dimensionnel Problématique Générer des architectures pour de tels programmes Architecture multi-horloges Utilisation de mémoires ou de FIFO Génération de contrôleurs, de compteurs 10/12/2018 Séminaire CoSi - MMAlpha
Séminaire CoSi - MMAlpha 10/12/2018 Travaux de références Principalement : Paul Feautrier : « Some efficient solution to the affine scheduling problem, part II, multidimensional time » et « Scanning Polyhedra without Do-loops ». Sanjay et Fabien : « Optimizing Memory usage in the Polyhedral Model » 10/12/2018 Séminaire CoSi - MMAlpha
Modification de la synthèse architecturale 10/12/2018 Modification de la synthèse architecturale Expression de la mémoire Banc de registre ou mémoire RAM ? Comment synthétiser de la mémoire avec alpha ? Dans le cas, d ’un Schedule à 2 dimension il se peut qu’on ait besoin de mémoire a 1 dimension. 10/12/2018 Séminaire CoSi - MMAlpha
Produit Matrice-Matrice b5,1 b5,2 b5.3 b5,4 b4,1 b4,2 b4.3 b4,4 b3,1 b3,2 b3.3 b3,4 b2,1 b2,2 b2.3 b2,4 b1,1 b1,2 b1.3 b1,4 c1,5 c1,4 c1.3 c1,2 c1,1 a1,1 a1,2 a1.3 a1,4 a1,5 c2,5 c2,4 c2.3 c2,2 c2,1 a2,1 a2,2 a2.3 a2,4 a2,5 c3,5 c3,4 c3.3 c3,2 c3,1 a3,1 a3,2 a3.3 a3,4 a3,5 c4,1 c4,2 c4.3 c4,4 c4,5 a4,1 a4,2 a4.3 a4,4 a4,5 10/12/2018 Séminaire CoSi - MMAlpha
Produit Mat-Mat linéaire b5,1 b5,2 b5.3 b5,4 b4,1 b4,2 b4.3 b4,4 b3,1 b3,2 b3.3 b3,4 b2,1 b2,2 b2.3 b2,4 b1,1 b1,2 b1.3 b1,4 a2,1 a2,2 a2.3 a2,4 a2,5 a1,1 a1,2 a1.3 a1,4 a1,5 10/12/2018 Séminaire CoSi - MMAlpha
Produit Mat-Mat linéaire a2,1 a2.2 a2,3 a2,4 a2,5 a1,1 a1.2 b2,1 b2.2 b2,3 b2,4 b1,1 b3,4 b2,2 b2.3 b2,4 b1,1 b1,2 b1.3 a2.3 a2,4 a2,5 a1,1 a1,2 a1.3 a1,4 a2,2 a2.3 a2,4 a2,5 a1,1 a1,2 a1.3 b2,1 b2,2 b2.3 b2,4 b1,1 b1,2 a2,4 a2,5 a1,1 a1,2 a1.3 a1,4 a1,5 b1,1 b1,2 b1.3 b1,4 b2.3 b2,4 10/12/2018 Séminaire CoSi - MMAlpha
Architecture d ’une cellule b a c 10/12/2018 Séminaire CoSi - MMAlpha
Programme Alpha ordonnancé system MatMat :{M,N,P | 3<=M; 3<=N; 3<=P} (a : {i,k | 1<=i<=M; 1<=k<=N} of real; b : {k,j | 1<=k<=N; 1<=j<=P} of real) returns (c : {i,j | 1<=i<=M; 1<=j<=P} of real); var B : {t1,t2,p | p+1<=t1<=p+M; 2<=t2<=N; 1<=p<=P} of real; A : {t1,t2,p | p+1<=t1<=p+M; 2<=t2<=N; 1<=p<=P} of real; C : {t1,t2,p | p+1<=t1<=p+M; 2<=t2<=N+1; 1<=p<=P} of real; let B[t1,t2,p] = case { | t1=p+1} : b[t2,p]; { | p+2<=t1} : B[t1-1,t2,p]; esac; A[t1,t2,p] = { | p=1} : a[t1-1,t2]; { | 2<=p} : A[t1-1,t2,p-1]; C[t1,t2,p] = { | t2=2} : 0[]; { | 3<=t2} : A[t1,t2-1,p] * B[t1,t2-1,p] + C[t1,t2-1,p]; c[i,j] = C[i+j,N+1,j]; tel; 10/12/2018 Séminaire CoSi - MMAlpha
Transformation d ’une équation Exemple : équation de B Fonction mémoire : MemB (t1,t2,p) = (t2,p) B B[t1,t2,p] = case { | t1=p+1} : b[t2,p]; { | p+2<=t1} : B[t1-1,t2,p]; esac; B[t1,t2,p] = case { | t1=p+1} : b[t2,p]; { | p+2<=t1} : B[t1-1,t2,p]; esac; B B b 10/12/2018 Séminaire CoSi - MMAlpha
Séminaire CoSi - MMAlpha Lecture de B MemB AdrLectB[t1,t2,p] = case { | t2=2} : 2; { | 2<=t2} : AdrLectB[t1,t2-1,p] + 1; esac; use Read(MemB,AdrLectB) returns (DataLectB) AdrLectB DataLectB B B b 10/12/2018 Séminaire CoSi - MMAlpha
Séminaire CoSi - MMAlpha Ecriture de B B B[t1,t2,p] = case { | t1=p+1} : b[t2,p]; { | p+2<=t1} : B[t1-1,t2,p]; esac; B[t1,t2,p] = case { | t1=p+1} : b[t2,p]; { | p+2<=t1} : B[t1-1,t2,p]; esac; B B b 10/12/2018 Séminaire CoSi - MMAlpha
Séminaire CoSi - MMAlpha Ecriture de B AdrEcrB[t1,t2,p] = case { | t2=2} : 2; { | 2<=t2} : AdrEcrB[t1,t2-1,p] + 1; esac; use Write(MemB,AdrEcrB, DataEcrB) returns (MemB) MemB AdrEcrB DataEcrB B b 10/12/2018 Séminaire CoSi - MMAlpha
Transformation d ’une équation Resultat : équation de B b B B[t1,t2,p] = case { | t1=p+1} : b[t2,p]; { | p+2<=t1} : B[t1-1,t2,p]; esac; 10/12/2018 Séminaire CoSi - MMAlpha
Séminaire CoSi - MMAlpha Equations finales AdrEcrB: {t1,t2,p | p+1<=t1<=p+M; 2<=t2<=N; 1<=p<=P} of real; DataEcrB: {t1,t2,p | p+1<=t1<=p+M; 2<=t2<=N; 1<=p<=P} of real; AdrLectB: {t1,t2,p | p+2<=t1<=p+M; 2<=t2<=N; 1<=p<=P} of real; DataLectB: {t1,t2,p | p+2<=t1<=p+M; 2<=t2<=N; 1<=p<=P} of real; MemB: {t2,p | 2<=t2<=N; 1<=p<=P} of real; AdrEcrB[t1,t2,p] = -- (t2,p) case { | t2=2} : 2; { | 2<=t2} : AdrErcB[t1,t2-1,p] + 1; esac; AdrLectB[t1,t2,p] = -- (t2,p) { | 2<=t2} : AdrLectB[t1,t2-1,p] + 1; DataEcrB[t1,t2,p] = case { | t1=p+1} : InputPortb; { | p+2<=t1} : DataLectB[t1,t2,p]; use Read(MemB,AdrLectB) returns (DataLectB); use Write(MemB,AdrEcrB,DataEcrB) returns (MemB); MemB DataLectB DataEcrB b 10/12/2018 Séminaire CoSi - MMAlpha
Séminaire CoSi - MMAlpha 10/12/2018 Mémoires Double port Ecriture et lecture simultanées pour une même variable Mémoire double-port disponible pour Asic et FPGA (Xilinx Virtex) Plus coûteux qu’une RAM simple EnA EnB WrA WrB AddrA AddrB DataA DataB Très naturellement nous avons été amenés a considérer les mémoires double port. CLk Rst 10/12/2018 Séminaire CoSi - MMAlpha
Séminaire CoSi - MMAlpha 10/12/2018 Mémoires FIFO FIFO ou Shift-Register ? Simplifie le contrôle et le VHDL générés (strucurel) Conception d ’une bibliothèque comprenant une FIFO spécifique Banc de registre ou utilisant une DP write full read empty DataIn DataOut Très naturellement nous avons été amenés a considérer les mémoires double port. 10/12/2018 Séminaire CoSi - MMAlpha
Séminaire CoSi - MMAlpha Domaine triangulaire t1 t2 10/12/2018 Séminaire CoSi - MMAlpha
Quelques mots sur le contrôle Génération de signaux multi-horloges une horloge sur un circuit un clock enable pour chaque indice de temps des compteurs (cas où le dom est triang.) « Scanning polyhedra without do loop » Génération de signaux de contrôle et d’adressage pour les mémoires 10/12/2018 Séminaire CoSi - MMAlpha
Séminaire CoSi - MMAlpha Travail réalisé Ordonnancement multi-dimensionnel VHDL du Produit Matrice-Matrice linéaire avec Shift-Register Synthétisé mais pas simulé Méthode de ré-écriture des équations alpha Réseaux de cellules 2D 10/12/2018 Séminaire CoSi - MMAlpha
Séminaire CoSi - MMAlpha Réseaux 2D Expérimentation de code VHDL outer_loop : for l in 0 to (NUM_ROWS - 1) generate inner_loop : for c in 0 to (NUM_COLS -1) generate cell_instance : cell port map ( clk => clk, clk_en => clk_en, rst => rst, high_in => vertical_array(c)(l), left_in => horizontal_array(l)(c), low_out => vertical_array(c)(l+1), right_out => horizontal_array(l)(c+1)); end generate inner_loop; end generate outer_loop; 10/12/2018 Séminaire CoSi - MMAlpha