Proposition d'une méthodologie adéquation algorithme architecture Emmanuel Boutillon LESTER Université de Bretagne Sud David Gnaedig (Turbo-Concept) Frédéric Guilloud (ENST-Bretagne) Démarche de conception d’un système de codage Adéquation Algorithme Architecture: Choix de la famille de codes ¾Comment mettre en place la rétro-action… ? Construction et optimisation du code (performances) 1) Oublier l'algorithme… Simplification/optimisation de l’algorithme de décodage et optimiser/modifier sans a priori Réalisation et optimisation du décodeur (architecture) 2) …se rappeler de l'algorithme et voir ce que l'on peut faire… Plan Turbo-code : Optimisation d'un entrelaceur/architecture LDPC : Architecture pour le "shuffled-scheduling" Décodage à entrées et sorties pondérées Approche Adéquation Algorithme Architecturelgorithme (sousoptimal) Max-Log-MAP [Robertson et al., 1995]: Etages de treillis Récursion Retour Trame reçue N Récursion Aller ak Mémoire taille N Métriques de nœud Aller Décision bk Information Z extrinsèque k Métriques de nœud Retour Temps d'éxécution τ 0 N cycles N cycles Séquencement "triangle" Séquencement fenêtre glissante Algorithme à fenêtre glissante [Benedetto et al., 1996] Memoire taille L Initialisation des récursions par valeurs finales de l’itération précédente [Dingninou et al., 1999] Etage de treillis Initialisation équiprobable N Z Z L τ 0 N+L Itération 1 – ordre naturel Itération 1 – ordre entrelacé Itération 2 – ordre naturel Séquencement entre demi-itération l N Séquencement Fenètres glissantes L τ 0 N Demi-itération L+ l j Demi-itération j+1 L τ τ τ Perte moyenne de 25 % des capacités de calcul. τ Idée : avancer le début de la 2ième demi-itération l N Séquencement Fenètres glissantes ∆ L τ 0 N Demi-itération L+ l j Demi-itération j+1 L τ τ τ ⇒ Meilleure utilisation de l'architecture. τ Problème de consistance… l N i Π(i) τ 0 Z1(i) Z1(i) de l'itération courante n'existe pas encore η 0 DEC 1 1- η DEC 2 0 η 1- η DEC 1 0 η 1- η DEC 2 1- η DEC 1 η τ Représentation graphique des conflits de consistence Ordre naturel Ordre entrelacé Π(i) ∆ Séquencement SW-Σ - Conflits de consistance Ordre naturel N ∆ i ∆ P=1 P=2 M L 0 (i, Π(i)) L M Ordre entrelacé N Exemple d’entrelaceur contraint Masque d'entrelaceur => entrelaceur hiérachique ∆ ∆ = L+l N S3 S0 S1 S2 S3 ΠT2 ΠT2 ΠT2 ΠT2 S2 Π1T Π1T S1 ΠS M S0 0 N M S'0 S’1 P=2 S'2 S’3 S'0 S’1 S’2 S’3 Performances de l’entrelaceur contraint N = 1024 symboles, P = 16 processeurs (débit de 100 Mbit/s) Débit normalisé Entrelaceur contraint ∆=L+l α =1 +25 % Nombre d'itérations Eb/N0 pour FER 10-2 Entrelaceur classique 0.15 dB Nombre d'itérations Conclusion exemple 1 : turbo-code Algorithme Turbo-code Architecture Constat de sous-utilisation de ressources matérielles Modification de l'exécution du matériel Retour vers la construction du code pour rendre cette modification acceptable Mesure des gains de l'approche Plan Turbo-code : Optimisation d'un entrelaceur/architecture LDPC : Architecture pour "shuffled-scheduling" Rappel code LDPC Séquencement des calculs Changement de point de vue Architecture pour shuffle-BP Code LDPC H= 0111100 1011010 1101001 Peut être défini par un graph bi-partite 0 1 2 3 4 5 6 Bit bi Branches Parity checks (PC) (b0, b1, … , b6) mot de code <=> toutes les PC sont respectées Décodage itératif y0 y1 y2 y3 y4 y5 y6 y7 y8 y9 y10 y11 y12 y13 y14 0 1 2 3 4 5 6 7 8 9 10 11 12 Première itération: message bit-> parité 13 14 Décodage itératif y0 y1 y2 y3 y4 y5 y6 y7 y8 y9 y10 y11 y12 y13 y14 0 1 0 2 1 3 2 4 3 5 4 7 6 5 6 8 7 9 8 10 9 10 11 11 12 12 Première itération: message parité-> bit 13 13 14 14 Décodage itératif y0 y1 y2 y3 y4 y5 y6 y7 y8 y9 y10 y11 y12 y13 y14 0 1 0 2 1 3 2 4 3 5 4 7 6 5 6 8 7 9 8 10 9 10 11 11 12 12 13 13 Deuxième itération: message parité -> bit 14 14 Calcul d'un nœud de variable (LLR) yn yn In In Bit Node E0 E1 L = I n + ∑ Em bn E2 Bit Node bn m E3 T0= L-E0 T1 Ti = In + L T2 T3 ∑ E = L−E m,m≠i i i Calcul d'un noeud Ti = ∑ Ek k ≠i E1 E2 E3 E4 avec + Φ( x) = − ln(tanh(x / 2)) Generic Node Unit - - - - T1 T2 T3 T4 Calcul d'un nœud de parité b0 b1 b2 b3 b4 T0 T1 T2 T3 T4 E0 E1 E2 E3 E4 Check Node Check Node Ei = b0 b1 b2 b3 b4 ⊕ j ≠i Ti = T1 ⊕ T2 ... ⊕ Ti −1 ⊕ Ti +1... ⊕ Tdc Deux méthodes de calcul : directe ou fréquentielle Calcul parité: méthode fréquentielle b) calcul du module Ek = Φ −1 (∑ Φ( Ti )) i≠k avec T1 LUT φ T2 T3 T4 LUT φ LUT φ LUT φ + Φ( x) = − ln(tanh(x / 2)) Generic Node Unit - - - - LUT φ−1 LUT φ−1 LUT φ−1 LUT φ−1 E1 E2 E3 E4 Calcul parité: méthode fréquentielle a) calcul du signe sign(T1) sign(T2) sign(T3) sign(T4) X Generic Node Unit X X X sign(E1) sign(E2) sign(E3) X sign(E4) • Tm ,n = Ln − Em,n Algorithme BP = In + Propagation de croyance (Belief Propagation) Initialisation : ∑ m '∈M ( n )\ m Em ',n In = 2yn/ó² Extrinsèque branche : Em,n=0 Fiabilités : Tm,n=0 Itérations : tous les messages sont traités Em , n Traitement des variables Propagation P ¨V = Φ ∑ Φ (Tm ,n ' ) n '∈N ( m )\ n −1 Propagation V ¨P Traitement des parités Generic Node Units (exclude the Φ function) Generic Node unit Memories + processing d entrée em et d sortie sn (d=j or k) Relation entrées/sorties: sn = ∑ em m≠ n NB: remplacer Σ by × pour le traitement du signe Mode de réalisation possible du GNU ? Implémentation du Generic Node Unit : a) Mode "compact" («traitement immédiat») Exemple: implémentation série e1 Led FIFO s1 L sd Implémentation du Generic Node Unit : b) Mode distribué, mis à jour différée Previous iteration Current iteration Edge memory t (i ) t (i +1) en(i ) en(i +1) - sn(i ) en(i +1) Réseau de permutation t (i ) = e1( i ) + e2(i ) + ... + ed( i ) t ( i +1) = e1( i +1) + ... + en( i +1) Implémentation du Generic Node Unit : b) Mode distribué, mis à jour immédiate Current iteration t n( i−+11) = e1(i +1) + en( i−+11) + en( i ) + ... + ed( i ) tn(i−+11) en(i ) en(i +1) s (i ) n t n( i +1) = e1( i +1) + en( i−+11) + en( i +1) + ... + ed( i ) en(i +1) Réseau de permutation t (i +1) Change d fois durant l'itération Plan Turbo-code : Optimisation d'un entrelaceur/architecture LDPC : Architecture pour "shuffled-scheduling" Rappel code LDPC Séquencement des calculs Changement de point de vue Architecture pour shuffle-BP Flooding scheduling (classical one) 011110 101101 110101 T n,m LDPC parity check matrix 0 1 2 3 4 5 Em , n Vertical Shuffle Scheduling (Shuffle BP‘s Zhang-Fossorier02) 011110 101101 110101 LDPC parity check matrix 1 2 3 4 5 6 Em ,1 Vertical Shuffle Scheduling (Shuffle BP‘s Zhang-Fossorier02) 011110 101101 110101 LDPC parity check matrix 1 2 3 4 5 6 T1,m Vertical Shuffle Scheduling (Shuffle BP‘s Zhang-Fossorier02) 011110 101101 110101 LDPC parity check matrix 1 2 3 4 5 6 Em , 2 Vertical Shuffle Scheduling (Shuffle BP‘s Zhang-Fossorier02) 011110 101101 110101 et ainsi de suite… 1 2 3 4 5 6 T2,m LDPC parity check matrix L'algorithme converge 2 fois plus rapidement que le séquencement par innondation classique Plan Turbo-code : Optimisation d'un entrelaceur/architecture LDPC : Architecture pour "shuffled-scheduling" Rappel code LDPC Séquencement des calculs Changement de point de vue Architecture pour shuffle-BP Implémentation/séquencement Compact, série Σ Φ −1 ( x ) Φ (x) Σ x Distribué, Mise à jour immédiate Permet une architecture très efficace pour le shuffled BP Plan Turbo-code : Optimisation d'un entrelaceur/architecture LDPC : Architecture pour "shuffled-scheduling" Rappel code LDPC Séquencement des calculs Changement de point de vue Architecture pour shuffle-BP VNU : mode compact, série In E E ( i −1) m1 , n E ( i −1) m2 , n 3 cycles ( i −1) m3 , n (i ) n , m1 T Tn(,im) 2 3 cycles Tn(,im) 3 CNU VNU interleaver Em , n Serial GNU Compact Mode Em(i,−n1) = Φ ∑ Φ (Tn ',m ) n '∈N ( m )\ n −1 Φ (Tn(,im−1) ) ∑ n '∈N ( m ) Φ −1 ∑ n '∈N ( m ) / n Φ(Tn(',im−1) ) Tous les CNU reliés au VNU envoient leur message Φ(Tn(',im−1), ) CNU VNU Tn(,im) Φ In interleaver ( i −1) E ∑ m,n m '∈M ( n ) \ m Serial GNU Compact Mode Em(i,−n1) Φ (Tn(,im−1) ) ∑ n '∈N ( m ) Φ −1 ∑ n '∈N ( m ) / n Φ(Tn(',im−1) ) Le VNU calcule ses sorties et les envoies aux CNU Φ(Tn(',im−1) ) CNU VNU Tn(,im) Φ ∑E ( i −1) m ,n m '∈M ( n ) \ m interleaver In Serial GNU Compact Mode Em(i,−n1) Φ (Tn(,im) ) Φ (Tn(,im−1) ) ∑ n '∈N ( m ) Φ −1 ∑ n '∈N ( m ) / n ∑ n '∈N ( m ) Φ (Tn(,im) ) − Φ (Tn(,im−1) ) Φ(Tn(',im−1) ) Φ(Tm(i,n−1)' ) est partiellement mis à jour. Φ(Tn(',im−1) ) Conclusion exemple 2 : LDPC Analyse du décodeur itératif Modes de réalisation des "processeurs génériques" Cycle de calcul dans le graphe du code Changement du point de vue : nouvelle reformulation de l'algorithme Architecture "Vertical Shuffle BP" Architecture simple Convergence deux fois plus rapide que séquencement classique Retrouve tous les séquencements publiés Conclusion générale Esquisse d'une "méthode" d'optimisation AAA Partir de l'architecture en oubliant les a priori Plus de liberté de penser et d'innover Sélectionner/valider/modifier Présentation de deux exemples : Entrelaceur Turbo-Code Séquencement LDPC …arriver à sortir de nos a priori…