FR 3115136 A1 20220415 FR 2010391 A 20201012 TITRE : Procédé, et dispositif, de traitement, de données à fournir en entrée d’un premier registre à décalage d’un circuit électronique neuronal systolique Procédé de traitement, dans un dispositif électronique de traitement, de données à fournir en entrée d’un premier registre à décalage d’un circuit électronique neuronal systolique comportant une grille de processeurs élémentaires, ledit premier registre à décalage véhiculant un vecteur de données de taille K à chaque cycle d’horloge à destination de K colonnes de processeurs élémentaires de ladite grille, ledit procédé de traitement comprenant les étapes suivantes mises en œuvre par ledit dispositif électronique de traitement : obtention d’une suite de données successives D(0), D(1), D(2) …D(d) extraites par lecture desdites données classées consécutivement dans une première mémoire de stockage et stockage desdites données dans une deuxième mémoire du dispositif de traitement ; génération de vecteurs W(u) en fonction desdites données stockées, chaque vecteur W(u) comportant K composantes (W(u) 0 , …, W(u) K-1 ) tel que W(u) k, k= 0 à K-1 = D(K0 + k*S2 + u*S1), où K est un entier strictement supérieur à 1, K0 est une constante prédéfinie, les pas S1 et S2 sont des constantes entières prédéfinies; fourniture, en entrée dudit registre à décalage, du vecteur W(u), telle que des valeurs successives W(u) sont fournies lors de coups d’horloge successifs, avec u entier allant de 0 à L1-1, et L1 constante entière strictement supérieure à un. Figure pour l'abrégé : Figure 7 Procédé, et dispositif, de traitement, de données à fournir en entrée d’un premier registre à décalage d’un circuit électronique neuronal systolique L’invention se situe dans le domaine de la mise en œuvre de traitements neuronaux de type convolutionnels (CNN) sur des circuits de calcul reconfigurables dans des équipements embarqués. Les domaines d’application des réseaux de neurones embarqués sont nombreux, par exemple en traitement d’images, et/ou pour classifier des données ou détecter des éléments spécifiques sur des signaux, etc. Il s’agit ici de traitements dit d’inférence, demandant des puissances de calcul très élevées (typiquement des centaines ou milliers de Giga-Opérations/s), mais très répétitifs et se prêtant bien à la parallélisation. Une façon efficace d’implémenter ces traitements est de mettre en œuvre une architecture systolique, qui peut se présenter sous la forme d’un tableau au moins à deux dimensions de processeurs élémentaires (PEs), réduits à leur partie purement arithmétique, qui sont alimentés colonne par colonne par un flux de données d’entrée se propageant progressivement vers le bas (dans un registre à décalage). Cette organisation, sur un FPGA (« field-programmable gate array ») ou un ASIC (« application-specific integrated circuit »), simplifie les opérations de placement-routage et permet d’exploiter au mieux les ressources du circuit et intégrer un grand nombre (centaines ou milliers) de PEs. Les architectures systoliques permettent d’obtenir des implémentations très compactes de PEs réduits à leur plus simple expression, qui en particulier traitent les données qui passent à leur portée au cours du temps. Il existe un certain nombre d’implémentations systoliques de CNN (Ref : https://www.sigarch.org/dnn-accelerator-architecture-simd-or-systolic), par exemple dans CN107578098. Le champ de fonctionnalités offert par la grille systolique dépend largement de la composition des flux de données qu’on lui envoie. Or, les flux de données entrant ou sortant du circuit sont la plupart du temps connectés à une ou plusieurs mémoires de type DDR (en anglais Double Data Rate), qui demandent à être lues ou écrites par séquences d’adresses consécutives, ce qui réduit grandement le choix de la distribution de ces données sur la grille de calcul. Sur la sont représentés une mémoire DDR externe de grande capacité 10 et un circuit électronique neuronal systolique 20. Le circuit 20 est implémenté par un circuit logique programmable, par exemple FGPA, et la mémoire DDR 10 est externe au FGPA. Le circuit 20 comporte une grille 22, ici en 2 dimensions (dans d’autres modes de réalisation, la dimension est supérieure à deux) de processeurs élémentaires PEs, disposés en colonnes et lignes, une ligne 23 de mémoires, un système 27 de distribution de données. Chaque mémoire m est associée à une colonne respective de processeurs PEs. Une mémoire m reçoit, depuis le système 27 de distribution de données, les données que vont traiter les PEs de la colonne qui est associée à cette mémoire et renvoie leurs résultats de calcul au système 27 de distribution. Ces données sont initialement fournies au système 27 de distribution de données par la mémoire DDR 10 et les résultats sont délivrés par le système 27 de distribution de données à la mémoire DDR 10 Le système 27 de distribution comprend deux bus 28, 29 (qui peuvent dans certains cas être réunis en un bus circulaire en anneau) adaptés pour véhiculer chacun K données (K nombre entier, égal ici à 4, K pouvant prendre une valeur quelconque supérieure ou égale à 1) à chaque cycle d’horloge. Le bus 28 est un bus d’entrée de données fournies par la mémoire DDR 10 et le bus 29 est un bus de sortie de résultats à destination de la mémoire DDR 10. Dans le même esprit que l’architecture systolique des processeurs, pour favoriser la compacité et la vitesse, chacun de ces bus 28, 29 fonctionnent en registre à décalage. Un étage du registre correspondant au bus d’entrée 28 alimente en parallèle K (ici donc 4) mémoires colonnes par des données et les adresses des mémoires auxquelles ces données sont destinées. Un étage du registre correspondant au bus de sortie 29 recueille en parallèle K (ici donc 4) données provenant des mémoires m auxquelles il est connecté, et fournit les adresses où ces données sont écrites dans les mémoires m.. Au coup d’horloge suivant, ces données font partie de l’étage suivant du registre et sont ainsi présentées/recueillies à l’ensemble suivant de K mémoires m. On n’a pas représenté sur la l’autre ligne de mémoires, verticale, qui stocke les coefficients des traitements CNN. La mémoire DDR 10 contient les données d’entrée du traitement, par exemple des groupes d’images appelées feature maps. Ces données 3D sont stockées dimension après dimension dans la mémoire, typiquement ligne par ligne. Les données d’une dimension (typiquement la ligne) sont stockées à des adresses consécutives dans la mémoire DDR 10. La DDR 10 se lit par séquences d’adresses consécutives (bursts), avec un délai d’amorçage à chaque début de burst qui ralentit le débit utile d’autant plus que le burst est court. De ce fait, sauf à accepter une perte significative de rendement, les lectures de la DDR 10 produisent de longues séquences de pixels adjacents d’une même ligne. La façon de l’art antérieur de connecter le port de sortie de la mémoire DDR 10 au système de distribution 27 est d’utiliser un compteur qui génère des adresses consécutives. Des fabricants comme Xilinx fournissent des IPs optimisées pour ce type de fonction (IP CDMA par exemple). Ainsi selon l’art antérieur : comme dit plus haut, la dimension (la ligne) du tableau d’entrée (ou similairement un résultat) qui est contiguë en DDR se retrouve distribuée à l’identique sur les mémoires colonnes dans l’art antérieur ; une fois ce flux DDR raccordé au système de distribution de données interne au FPGA, chacune des mémoires internes reçoit le pixel suivant celui de sa voisine dans la ligne en lecture. L’opération dominante dans les CNNs est la convolution, qui fait la somme pondérée de données d’entrée consécutives ou espacées d’un pas fixe (appelé dilation). La convolution peut s’appliquer à des données d’entrée à plusieurs dimensions (ligne, colonne, canal, ...). Dans l’architecture systolique du circuit neuronal 20, les calculs sont parallélisés en distribuant une des dimensions (généralement la ligne) sur les colonnes de la grille. Un PE d’une colonne a alors besoin d’accéder à des données qui ont été placées dans des colonnes voisines. Pour y parvenir, des chemins physiques qui donnent accès à quelques mémoires voisines en tête de colonne, sont ajoutées en général à l’architecture ; ces extensions, au-delà d’une certaine largeur, se paient en augmentation de complexité et risque de limitation de la fréquence d’horloge. Dans cette configuration étendue, l’architecture ne peut toutefois exécuter que des convolutions d’une largeur égale au nombre de mémoires accessibles depuis une colonne. La Erreur ! Source du renvoi introuvable. montre la distribution de données d’une ligne d’une structure de données (données consécutives d’une ligne nommées D1, D2, D3 ….) éventuellement multi-dimensionnelle, présentée en entrée de la grille systolique 22 pour une convolution de même dimension que le tableau de données mémorisé en DDR 10. Seule la dimension ligne peut poser problème, les autres dimensions du tableau étant locales à chaque mémoire m, et directement accessibles aux PEs de la colonne associée à la mémoire m. Sur les figures, les données au-dessus des colonnes sont celles stockées dans les colonnes par le système de distribution 27, avant le début des calculs par les colonnes de PEs.. Sur la , Di est ainsi fournie à la mémoire mi, pour i = 1 à 5. Dans cet exemple correspondant, une colonne voit 3 mémoires, ce qui permet de faire des convolutions de largeur maximale égale à 3. Un cas fréquent dans les CNNs est celui des étages de convolutions dits avec « stride » de valeur Str, où les calculs à faire ne sont plus comme dans la Erreur ! Source du renvoi introuvable. Erreur ! Source du renvoi introuvable. : convolution de (D1,D2, D3), convolution de (D2, D3, D4), convolution de (D3,D4,D5), convolution de (D4,D5,D6), mais, dans le cas où le stride Str vaut 2 : convolution de (D1,D2,D3), (D3,D4,D5), (D5,D6,D7), … Dans ces cas, dans l’art antérieur, même si les PEs effectuent les calculs, une colonne sur 2 de PEs (en fait (Str-1) colonnes toutes les Str colonnes) calcule des résultats qui ne seront pas utilisés, ce qui se traduit par une sous-utilisation des ressources. D’autres types d’opérations ne sont pas faisables avec l’alimentation des données du circuit neuronal systolique 20 par la mémoire DDR 10 telle qu’effectuée par l’art antérieur ou encore conduisent à une perte de ressources de calcul. A cet effet, suivant un premier aspect, l’invention propose un procédé de traitement, dans un dispositif électronique de traitement, de données à fournir en entrée d’un premier registre à décalage d’un circuit électronique neuronal systolique comportant une grille de processeurs élémentaires, ledit premier registre à décalage véhiculant un vecteur de données de taille K à chaque cycle d’horloge à destination de K colonnes de processeurs élémentaires de ladite grille, ledit procédé de traitement comprenant les étapes suivantes mises en œuvre par ledit dispositif électronique de traitement : obtention d’une suite de données successives D(0), D(1), D(2) …D(d) extraites par lecture desdites données classées consécutivement dans une première mémoire de stockage et stockage desdites données dans une deuxième mémoire du dispositif de traitement ; génération de vecteurs W(u) en fonction desdites données stockées, chaque vecteur W(u) comportant K composantes (W(u) 0 , …, W(u) K-1 ) tel que W(u) k, k= 0 à K-1 = D(K0 + k*S2 + u*S1), où K est un entier strictement supérieur à 1, K0 est une constante prédéfinie, les pas S1 et S2 sont des constantes entières prédéfinies; fourniture, en entrée dudit registre à décalage, du vecteur W(u), telle que des valeurs successives W(u) sont fournies lors de coups d’horloge successifs, avec u entier allant de 0 à L1-1, et L1 constante entière strictement supérieure à un. L’invention permet ainsi, par cette solution de gestion des données d’entrée/sortie, de mettre en œuvre des flux de données adéquats et ainsi de réduire des limitations de l’art antérieur dans les performances d’un circuit neuronal systolique, telle que convolution de largeur 1 à 3, perte de rendement en cas de stride supérieur à 1, etc. Dans des modes de réalisation, un procédé de traitement suivant l’invention comporte en outre une ou plusieurs des caractéristiques suivantes : les étapes suivantes mises en œuvre par ledit dispositif électronique de traitement : obtention d’un vecteur de données w de taille K fournies par un deuxième registre à décalage du circuit neuronal systolique, ledit deuxième registre à décalage véhiculant à chaque cycle d’horloge un vecteur de données de taille K correspondant aux résultats de K colonnes respectives de processeurs élémentaires de ladite grille ; les K composantes de w étant (w 0 , …, w K-1 ), stockage dans la deuxième mémoire, de w k, k= 0 à K-1 à l’adresse ind0 +K*C*S2 + x*S1 + k*S2 , où ind0 est une constante prédéfinie, C est le numéro de colonne et x est un indice allant de 0 à L1-1 ; fourniture à la première mémoire de stockage d’une suite de données successives extraites par lecture desdites données classées consécutivement dans la deuxième mémoire ; pour k= 0 à K-1, W(u)k = D(K0 + ui*S1i + k*S2), les pas S1i et S2 sont des constantes prédéfinies ; le vecteur étant fourni en entrée dudit registre à décalage, avec ui entier allant de 0 à L1i-1, et L1i constante strictement supérieure à un ; les étapes suivantes sont mises en œuvre par ledit dispositif électronique de traitement : obtention d’un vecteur de données w de taille K fournies par un deuxième registre à décalage du circuit neuronal systolique, ledit deuxième registre à décalage véhiculant à chaque cycle d’horloge un vecteur de données de taille K correspondant aux résultats de K colonnes respectives de processeurs élémentaires de ladite grille ; les K composantes de w étant (w0, …, wK-1), le stockage dans la deuxième mémoire de wk, k= 0 à K-1 est effectué à l’adresse ind0+4*C*S2 + ( xi * S1i ) + k*S2, où ind0 est une constante prédéfinie, C est le numéro de colonne et xi est un indice entier allant de 0 à L1i-1 ; fourniture à la première mémoire de stockage d’une suite de données successives extraites par lecture desdites données classées consécutivement dans la deuxième mémoire ; la deuxième mémoire comporte au minimum K bancs de mémoire distincts, et le stockage des données dans la deuxième mémoire est effectué de manière à vérifier que des données qui sont des composantes d’un même vecteur W(u) ne peuvent être stockées dans un même banc. Suivant un deuxième aspect, la présente invention propose un dispositif de traitement de données à fournir en entrée d’un premier registre à décalage d’un circuit électronique neuronal systolique comportant une grille de processeurs élémentaires, ledit premier registre à décalage étant adapté pour véhiculer un vecteur de données de taille K à chaque cycle d’horloge à destination de K colonnes de processeurs élémentaires de ladite grille, ledit dispositif électronique de traitement étant adapté pour obtenir une suite de données successives D(0), D(1), D(2) …D(d) extraites par lecture desdites données classées consécutivement dans une première mémoire de stockage et pour stocker lesdites données dans une deuxième mémoire du dispositif de traitement ; ledit dispositif électronique de traitement étant adapté pour générer des vecteurs W(u) en fonction desdites données stockées, chaque vecteur W(u) comportant K composantes (W(u) 0 , …, W(u) K-1 ) tel que W(u) k, k= 0 à K-1 = D(K0 + k*S2 + u*S1), où K est un entier strictement supérieur à 1, K0 est une constante prédéfinie, les pas S1 et S2 sont des constantes entières prédéfinies ; ledit dispositif électronique de traitement étant adapté pour fournir, en entrée dudit registre à décalage, le vecteur W(u), telle que des valeurs successives W(u) sont fournies lors de coups d’horloge successifs, avec u entier allant de 0 à L1-1, et L1 constante entière strictement supérieure à un. Ces caractéristiques et avantages de l’invention apparaîtront à la lecture de la description qui va suivre, donnée uniquement à titre d’exemple, et faite en référence aux dessins annexés, sur lesquels : la représente une vue schématique d’une grille 2D de calcul d’un circuit électronique neuronal systolique ; la illustre une distribution de données d’entrée pour un circuit neuronal systolique ; la illustre une autre distribution de données d’entrée pour un circuit neuronal systolique, qui peut être mise en œuvre dans un mode de réalisation de l’invention ; la illustre une autre distribution de données d’entrée pour un circuit neuronal systolique, qui peut être mise en œuvre dans un mode de réalisation de l’invention ; la illustre une autre distribution de données d’entrée pour un circuit neuronal systolique, qui peut être mise en œuvre dans un mode de réalisation de l’invention ; la illustre une autre distribution de données d’entrée pour un circuit neuronal systolique, qui peut être mise en œuvre dans un mode de réalisation de l’invention; la illustre une autre distribution de données d’entrée pour un circuit neuronal systolique, qui peut être mise en œuvre dans un mode de réalisation de l’invention ; la représente les étapes d’un procédé dans un mode de réalisation de l’invention ; la représente un système neuronal systolique dans un mode de réalisation de l’invention ; La représente un système neuronal systolique 1 dans un mode de réalisation de l’invention. Ce système est par exemple embarqué dans un aéronef. Le système 1 comprend une mémoire, par exemple à stockage de masse, un circuit électronique implémentant physiquement un réseau de neurones et un dispositif de traitement 40. La mémoire est par exemple la mémoire DDR 10 comme mentionné précédemment en référence à la , le circuit électronique est le circuit neuronal systolique 20 sur FGPA tel que décrit relativement à la , le dispositif de traitement 40 selon l’invention est interposé entre la mémoire DDR 10 et le circuit 20, par exemple dans le FGPA. Le dispositif de traitement 40 comporte une mémoire MP 41 et un bloc 42 de contrôle comportant notamment une unité de cadencement 420 des opérations. Le bloc 42 de contrôle comprend par exemple une mémoire et un microprocesseur (non représentés), la mémoire comprenant des instructions logicielles, qui lorsqu’elles sont exécutées sur le microprocesseur, mettent en œuvre les opérations suivantes, décrites en . Ainsi dans une étape 101, le bloc 42 de contrôle obtient une suite de données successives D(0), D(1), D(2) …D(d) extraites par lecture, par exemple en burst, desdites données classées consécutivement dans la mémoire 10 (par exemple les données d’une ligne d’image, d étant par exemple une valeur comprise dans la plage allant par exemple de 16 à 256 et stocke lesdites données dans la mémoire MP 41. Par exemple les données D(n) sont lues par bursts de la DDR 10 sous la forme de vecteurs V(t), chaque vecteur contenant, pour K=4, les données D(4t), D(4t+1), D(4t+2), D(4t+3) qui sont écrites consécutivement en mémoire MP 41 : la donnée D(n) est écrite à l’adresse AD0 + n. Dans une étape 102, le bloc 42 de contrôle génère des vecteurs W(u) en fonction desdites données stockées, selon la formule (1) décrite plus loin. Chaque vecteur W(u) est constitué de 4 composantes (W(u) 0 , …, W(u) K-1 ) (on rappelle que dans l’exemple K est égal à 4, comme expliqué plus haut en référence à la , mais K peut prendre une valeur quelconque). Dans une étape 103, le bloc 42 de contrôle fournit successivement, en entrée du registre à décalage 28, un vecteur W(u), pour u entier allant de 0 à L1-1, et L1 constante prédéfinie strictement supérieure à un (par exemple strictement supérieur à 2), à chaque coup d’horloge, accompagné de l’indication des adresses des K colonnes consécutives auxquelles les K composantes de W(u) sont destinées. Ces vecteurs, appliqués en entrée du système 27 de distribution interne, produisent la distribution de données attendue. Dans un mode de réalisation, W(u) k = D(K0 +u*S1 + k*S2), k=0 à K-1, K0 est une constante prédéfinie, les pas S1 et S2 sont des constantes prédéfinies, non nulles ou nulles selon les cas (dans le cas d’implémentation basé sur une mémoire à nombre premier de bancs, S2 ne sera pas un multiple du nombre de bancs) . Et la mémoire mk contient ainsi la donnée D(K0 +u*S1 + k*S2), pour chaque u de 0 à L1-1, après que le registre à décalage d’entrée 28 lui ait présenté cette donnée W(u) k accompagnée de l’indication de la mémoire mk. Les valeurs de S1, S2, L1, K0 sont initialement choisies de manière à donner lieu à la distribution souhaitée. Dans un mode de réalisation plus général, avec k = 0 à K-1 : W(u) k = D(K0 + u i *S1 i + k*S2) formule (1) u i allant de 0 à L1 i -1, i = 1 à n (n entier supérieur ou égal à 2 ) et L1 i constante prédéfinie non nulle et par exemple strictement supérieure à un (par exemple strictement supérieur à 2) ( L 1i =1 revient à ajouter la somme des S 1i à K0 et enlever la somme de la formule) , les pas S1 i et S2 sont des constantes prédéfinies. Pour la fourniture des données au circuit 20, l’incrémentation des u i se fait dans l’ordre des i croissants : soit i i-1 : pour chaque valeur de i, on fournit les W(u) ; puis on incrémente j de 1, on remet i à 0 et on recommence. Et la mémoire mk contient ainsi la donnée D(K0 +u i *S1 i + k*S2), pour chaque u i de 0 à L1 i -1, i = 1 à n après que le registre à décalage d’entrée 28 lui ait présenté cette donnée W(u) k accompagnée de l’indication de la mémoire mk. Les valeurs de S1 i , S2, L1 i , K0 sont initialement choisies de manière à donner lieu à la distribution souhaitée. Si on considère toutes les colonnes de la grille (par exemple C tot colonnes, avec C tot allant de 1 à quelques centaines, chaque colonne mC contient ainsi la donnée D(K0 +u i *S1 i + C*S2), C=0 à C tot -1 L’ensemble de ces opérations réalisées par le bloc de contrôle 41 sont cadencées par l’unité de séquencement 420 des opérations (toutes les opérations sont cadencées au rythme de l’horloge 20, qui est la ou une des horloges utilisées par le FPGA ) . La formule (1) est définie de manière à obtenir la distribution souhaitée des données entre les colonnes de processeurs, en fonction de la définition des convolutions à calculer. A titre d’exemple, sur la ont été représentées les données enregistrées successivement dans la mémoire qui se trouvent sous elles, à la verticale, K0 ayant été fixé à 0 pour la formule suivante tirée de la formule 1 générale : W(u)k = D(K0 +u*S1 + v*S3 + k*S2), avec u allant de 0 à L1 – 1 et v allant de 0 à L3 -1, L1 = 3, S1 = 2, L3 = 2 et S3 = 50, la mémoire m1 étant associé à la colonne n°0 des PEs, la mémoire m2 à la colonne n°1, … la mémoire mK à la colonne n°K-1. Ce type de distribution introduit des recopies, et ne peut pas se faire juste en chargeant le système de distribution interne 27 dans l’ordre où les données sortent de la DDR 10. Le dispositif de traitement 40 selon l’invention est adapté pour écrire une séquence de données dans les mémoires colonne dans un ordre différent de celui dans lequel elles ont été lues en mémoire DDR 10. Similairement le dispositif de traitement 40 selon l’invention est adapté pour lire une séquence de données dans les mémoires colonne dans un ordre différent de celui dans lequel elles sont ensuite écrites en DDR 10. Dans une étape 201, le dispositif de traitement 40 lit les résultats délivrés par le registre à décalage 29. L’ordre dans lequel les données dans les mémoires m peuvent être lues est contraint par le fonctionnement du bus 29, qui lit les K (=4 ici) données qui sont situées à la même adresse dans 4 colonnes consécutives. Les données à exporter par le dispositif de traitement 40 vers la DDR 10 sont distribuées dans les mémoires m avec un pas égal à S2 d’une colonne à l’autre et un pas S1 au sein de chaque colonne. La lecture produira des vecteurs W(C,x) contenant les données d’indice 4*C*S2 + x*S1 + k*S2 avec 0 0 , alors la formule donnant l’indice est ind 0 +4*C*S2 + x*S1 + k*S2). Note : pour une formule générique, x, S1, et L1 deviennent des vecteurs de même taille n ; soit x i les composantes de l’indice vecteur x (x i entier allant de 0 à L1 i -1), on remplace le x*S1 par ( x i * S1i ), (dans la référence ci-dessus à la où on utilise S1 et S3 comme pas dans la colonne, S1 et S3 de cet exemple sont alors les deux composantes du vecteur S1). Dans une étape 202, le dispositif de traitement 40 écrit les K (=4) données du vecteur W(C,x) aux adresses 4*C*S2 + x*S1 + k*S2 avec 0≤k Dans une étape 203, le dispositif de traitement 40 écrit ces séquences extraites de la mémoire MP 41 sous forme de longs bursts en DDR 10 à des adresses consécutives. Le dispositif de traitement 40 selon l’invention est adapté pour effectuer des distributions de données selon une formule prédéfinie, dans les mémoires m en restant compatible avec les contraintes des accès DDR et du système de distribution interne. Du côté de la DDR 10, le flux de données lus par le dispositif de traitement 40 est la suite de pixels consécutifs sur une ligne du tableau d’images d’entrée Du côté du système de distribution interne 27, la séquence véhiculée est une suite de vecteurs de K (ici 4) données, destinées à 4 mémoires colonne consécutives, ce qui permet d’utiliser les bus 28, 29 en registre à décalage qui réduisent les interconnexions et simplifient les distributions d’horloge dans le FPGA. Le dispositif de traitement 40 est de taille indépendante de la taille de la grille de calcul qu’il alimente et s’avère par ailleurs peu coûteux en ressources. Il est possible de charger ou de lire les mémoires colonne de la grille avec des patrons de données conformes à la formule (1) et ceci permet d’élargir considérablement le champ d’action de l’architecture. Les fonctionnalités de stockage, puis de relecture dans un ordre différent se font aisément dans le dispositif de traitement 40 avec une mémoire MP 41 à double port si elle ne produit qu’une donnée par cycle. L’objectif dans un mode de réalisation étant de produire un vecteur à plusieurs (K) composantes (4 dans l’exemple), cela demande une fonctionnalité de mémoire parallèle décrite dans la suite. Au cours d’un cycle, un vecteur est écrit et un autre vecteur est lu dans MP 41, sous le cadencement de l’unité de cadencement 420. Dans MP 41 : concernant les échanges de données en lecture ou écriture entre le dispositif de traitement 40 et le circuit 20, le vecteur est lu ou écrit dans MP 41 à des adresses séparées par un pas S, alors que ce pas est fixé à 1 (adresses consécutives) dans MP 41 pour les échanges en lecture ou écriture entre le dispositif de traitement 40 et la DDR 10. Dans un mode de réalisation, le dispositif de traitement 40 contient deux paires de générateurs d’adresses pour respectivement les transferts entre DDR 10 et mémoire pivot MP 41 (générateurs d’adresses 421, 422) et les transferts entre mémoire pivot MP 41 et circuit 20 (générateurs d’adresses 423, 424). Un générateur d’adresses est un compteur multi-dimensionnel qui fournit la suite d’adresses : Ad0 + n1*S1 + n2*S2 + … avec 0 La mémoire MP 41 étant de capacité limitée, le transfert de blocs de données entre DDR 10 et circuit 20 s’effectue par exemple en plusieurs phases consécutives. Pour des raisons d’efficacité ces transferts se font en pipeline : le sous-bloc N est lu en même temps que le sous-bloc N+1 s’écrit. Les deux côtés de la mémoire MP 41 sont la plupart du temps actifs simultanément. Le séquencement de ces opérations est contrôlé par l’unité de séquencement 420 qui séquence les entrées/sorties et qui exécute un microprogramme où figurent en particulier les paramètres des générateurs d’adresses. L’invention permet d’étendre significativement l’éventail d’opérations CNN du circuit systolique permettant de sortir du schéma de distribution de données de l’art antérieur présenté ci-dessus, où les pixels adjacents sont répartis dans le même ordre dans les mémoires colonne m. Les limitations de fonctionnalité de l’architecture (convolution de largeur 1 à 3, perte de rendement en cas de stride supérieur à 1) sont ainsi levées grâce à une distribution adaptée des données de la dimension ligne. Les Erreur ! Source du renvoi introuvable. à 5 donnent des exemples de distribution de données dans un système mettant en œuvre l’invention et qui rendent possibles des traitements qui n’étaient pas dans la distribution de l’art antérieur où la donnée d’indice i0+ i sur la ligne est écrite dans la mémoire de la colonne i et uniquement dans cette mémoire et pour lesquels la matrice de PEs est utilisée à plein rendement. La illustre un exemple de distribution dans un mode de réalisation (où S1 = 1, S2 = 2, dans le cas d’une convolution de largeur 5 et de stride 1 ; le résultat de la colonne associée à la mémoire m2 doit être la convolution de (D1, D2, D3, D4, D5), le résultat de la colonne associée à la mémoire m3 doit être la convolution de (D2, D3, D4, D5, D6), le résultat de la colonne associée à la mémoire m4 doit être la convolution de (D3, D4, D5, D6, D7), etc. Dans ce cas de mise en œuvre de l’invention, une donnée (par exemple ici la donnée D2 ou D3 ou D4 ou D5) peut ainsi être stockée dans plusieurs mémoires tout en limitant les calculs des PEs non utiles. La distribution ne comporte pas de recopie dans le cas de la Erreur ! Source du renvoi introuvable. correspondant également à une convolution de largeur 5, mais avec un stride Str égal à 2. Le résultat de la colonne associée à la mémoire m2 doit être la convolution de (D1, D2, D3, D4, D5), le résultat de la colonne associée à la mémoire m3 doit être la convolution de (D3, D4, D5, D6, D7), le résultat de la colonne associée à la mémoire m4 doit être la convolution de (D5, D6, D7, D8, D9), etc. Dans ce cas de mise en œuvre de l’invention (où S1=1, S2=2), la convolution effectuée par la colonne de PEs associée à la mémoire 3 utilisera les données à l’intérieur de la surface délimitée en pointillés : les données D3 à D6 sont dans la mémoire m3 et D7 est dans m4. La Erreur ! Source du renvoi introuvable. illustre un exemple de distribution dans un mode de réalisation (où L1=1 , S2=2- et donc S1 quelconque), dans le cas des étages dits à « dilation » où l’écart, i.e. la valeur de dilatation, entre les données successives d’une même convolution n’est pas 1. Dans le mode de réalisation de l’invention ici illustré, la largeur de convolution est 3 et la valeur de dilatation est 2 ; le résultat de la colonne associée à la mémoire m2 doit être la convolution de (D1, D3, D5), le résultat de la colonne associée à la mémoire m3 doit être la convolution de (D3, D5, D7), le résultat de la colonne associée à la mémoire m4 doit être la convolution de (D5, D7, D9). Enfin, la illustre un cas où il est fait enchaîner à la grille 22 plusieurs étages du graphe CNN, à partir d’une distribution de données initiale dans un mode de mise en œuvre de l’invention. Ce mode de fonctionnement, dit fusion, a l’avantage d’éviter des stockages à l’extérieur des résultats intermédiaires et de réduire drastiquement le besoin de bande passante d’entrées-sorties. La fusion est un facteur important d’amélioration de la performance du circuit 20 : en effet, le systolique permettant d’intégrer une forte puissance de calcul, celle-ci s’accompagne d’un besoin du même ordre en débit d’entrées sorties, qui devient généralement le facteur limitant pour une partie au moins du traitement CNN. Il peut y avoir, parmi les étages fusionnés, des étages à valeur de stride Str supérieure à 1, comme illustré en Erreur ! Source du renvoi introuvable. (un étage de convolution de largeur K = 5 et valeur de stride Str égale à1 et un étage de convolution de largeur K=3 et de valeur de stride Str égale à 2)Erreur ! Source du renvoi introuvable.. Si l’on distribue les données comme indiqué sur la (où L1=3 S1=1 S2=2), les PEs peuvent enchaîner les calculs pour les deux étages sans avoir besoin de redistribution de données à la fin du premier étage. La fusion s’applique à un nombre d’étages quelconque, la limitation en pratique venant d’autres critères, dont la capacité des mémoires colonnes m. En résumé, l’invention permet d’élargir significativement le champ d’opérations du circuit neuronal systolique 20 tout en conservant la compacité de l’architecture de grille systolique et de son système 27 de distribution interne. Le traitement intermédiaire, de gestion d’entrées/sorties, mis en œuvre par le dispositif de traitement 40 entre la mémoire DDR 10 et le système de distribution 27 permet de réaliser des distributions de données particulières dans la grille 22 et de traiter des convolutions à caractéristiques (tailles de noyau, stride, dilation) quelconques, permettant de couvrir une large gamme de CNNs, en optimisant le rendement de la grille. De plus, le type de distribution de données selon l’invention ouvre la porte au traitement de CNN par fusion d’étages, qui divise le besoin en débit d’entrées sorties de ou vers la DDR par le nombre d’étages fusionnés. Cet artifice évite le plafonnement de la performance du circuit sur une partie du graphe (en général la partie haute du graphe, où le nombre de feature maps est plus faible). Le coût en ressources du dispositif de traitement 40 de l’invention reste faible par rapport à la densité des FPGAs actuels : moins de 4% pour un FPGA de taille moyenne (7Z045 de Xilinx). La taille du dispositif est par ailleurs la même quelle que soit la taille de la grille de PEs. Par ailleurs, une mémoire individuelle n’étant en général capable de stocker, ou de produire qu’une seule donnée par cycle d’horloge (une pour chaque port s’il s’agit d’une mémoire à double accès), le dispositif de traitement 40 utilisant une mémoire parallèle MP 41, i.e. capable de manipuler à chaque cycle d’horloge un vecteur à plusieurs composantes, et compte-tenu des motifs de données à manipuler (lois d’adressage affines multi-dimensionnelles). La mémoire parallèle 41 comporte plusieurs bancs mémoire M 410 comme illustré en . Pour accéder à chaque cycle à un vecteur dans un tel ensemble de bancs M 410, il faut s’assurer que les composantes des vecteurs se trouvent toujours dans des bancs distincts. Une implémentation possible est la mémoire parallèle composée d’un nombre premier de bancs. Cette technique de mémoire parallèle est connue (décrite en particulier par D. H. Lawrie and C. R. Vora, “The prime memory system for array access“ en 1982). La mémoire pivot MP 41 est donc un ensemble de K bancs mémoires M 410 identiques à double port (permettant un accès en lecture ou écriture sur chacun de ses ports à chaque cycle), numéroté de 1 à K. Ces mémoires M 410 sont vues collectivement comme une mémoire plus grande (MP), dont la capacité est la somme des capacités individuelles. L’adresse A dans la mémoire MP 41 correspond à l’adresse A/K dans le banc mémoire M 410 de numéro A%K (i.e. A modulo K). Dans le sens depuis la mémoire DDR 10 vers la grille 22, l’objectif du dispositif de traitement 40 est de pouvoir lire en un cycle d’horloge un vecteur de K (ici 4 ) composantes y(k) = MP( ADR_A + k*S ) avec 0≤k ) . Ceci n’est possible que si les K composantes se trouvent dans des bancs distincts, puisqu’un banc ne peut fournir qu’une valeur par cycle. Donc (ADR_A+k1*S)%K doit être différent de (ADR_A+k2*S)%K si k2 est différent de k1 pour k1 et k2 entre 0 et K-1. La condition est vérifiée si (k1-k2)*S %K n’est nul que si k2=k1, condition toujours vraie si S et K sont premiers entre eux. Dans l’implémentation actuelle, K=5, nombre premier garantissant qu’on pourra accéder à tous les vecteurs d’adresses ADR_A+k*S dans la mémoire virtuelle MP 41, tant que S ne sera pas multiple de 5, cas pathologique que l’on peut toujours éviter ou contourner. Outre les bancs mémoires eux-mêmes, le dispositif de traitement 40 comporte alors en outre de chaque côté (i.e. côté mémoire DDR 10 et côté circuit 20) et dans chaque sens (lecture et écriture) des blocs logiques, nommés Shuffler, 430, 431, 432, 433, qui connectent chaque banc mémoire à la composante du vecteur qu’il doit lire ou écrire : si le vecteur vise les adresses AD0 + n*S, 0 Il est rappelé qu’il y a également de chaque côté un convertisseur d’adresses 421, 422, 423, 424 qui transforme une adresse virtuelle A en 5 adresses destinées à chacun des bancs : si la composante n d’un vecteur est destinée au banc b = (AD0 +n*S)%5, l’adresse dans ce banc sera égale à (AD0 +n*S –b )/5. L’invention peut être mise en œuvre dans des systèmes embarqués de nature très variée, par exemple dans le traitement d’images par réseau de neurones à bord de satellite, et/ou configurable sur un FPGA durci aux radiations, et/ou plus généralement relatifs à la classification, détection ou reconnaissance sur des images ou signaux temps réel. Procédé de traitement, dans un dispositif électronique de traitement (40), de données à fournir en entrée d’un premier registre à décalage (28) d’un circuit électronique neuronal systolique (1) comportant une grille de processeurs élémentaires (22) , ledit premier registre à décalage véhiculant un vecteur de données de taille K à chaque cycle d’horloge à destination de K colonnes de processeurs élémentaires (PE) de ladite grille, ledit procédé de traitement comprenant les étapes suivantes mises en œuvre par ledit dispositif électronique de traitement : obtention d’une suite de données successives D(0), D(1), D(2) …D(d) extraites par lecture desdites données classées consécutivement dans une première mémoire de stockage et stockage desdites données dans une deuxième mémoire (m) du dispositif de traitement ; génération de vecteurs W(u) en fonction desdites données stockées, chaque vecteur W(u) comportant K composantes (W(u) 0 , …, W(u) K-1 ) tel que W(u) k , k= 0 à K-1 = D(K0 + k*S2 + u*S1), où K est un entier strictement supérieur à 1, K0 est une constante prédéfinie, les pas S1 et S2 sont des constantes entières prédéfinies; fourniture, en entrée dudit registre à décalage, du vecteur W(u), telle que des valeurs successives W(u) sont fournies lors de coups d’horloge successifs, avec u entier allant de 0 à L1-1, et L1 constante entière strictement supérieure à un. Procédé de traitement selon la revendication 1, comprenant en outre les étapes suivantes mises en œuvre par ledit dispositif électronique de traitement (40) : obtention d’un vecteur de données w de taille K fournies par un deuxième registre à décalage (29) du circuit neuronal systolique (1), ledit deuxième registre à décalage véhiculant à chaque cycle d’horloge un vecteur de données de taille K correspondant aux résultats de K colonnes respectives de processeurs élémentaires de ladite grille ; les K composantes de w étant (w 0 , …, w K-1 ), stockage dans la deuxième mémoire (m), de w k, k= 0 à K-1 à l’adresse ind0 +K*C*S2 + x*S1 + k*S2 , où ind0 est une constante prédéfinie, C est le numéro de colonne et x est un indice allant de 0 à L1-1 ; fourniture à la première mémoire de stockage (10) d’une suite de données successives extraites par lecture desdites données classées consécutivement dans la deuxième mémoire (m). Procédé de traitement selon la revendication 1 ou 2, selon lequel, pour k= 0 à K-1, W(u) k = D(K0 + u i *S1 i + k*S2), les pas S1 i et S2 sont des constantes prédéfinies ; le vecteur étant fourni en entrée dudit registre à décalage, avec u i entier allant de 0 à L1 i -1, et L1 i constante strictement supérieure à un. Procédé de traitement selon la revendication 3, comprenant en outre les étapes suivantes mises en œuvre par ledit dispositif électronique de traitement (40) : obtention d’un vecteur de données w de taille K fournies par un deuxième registre à décalage (29) du circuit neuronal systolique (1), ledit deuxième registre à décalage véhiculant à chaque cycle d’horloge un vecteur de données de taille K correspondant aux résultats de K colonnes respectives de processeurs élémentaires de ladite grille ; les K composantes de w étant (w 0 , …, w K-1 ), le stockage dans la deuxième mémoire de w k, k= 0 à K-1 est effectué à l’adresse ind0+4*C*S2 + ( x i * S1i ) + k*S2, où ind0 est une constante prédéfinie, C est le numéro de colonne et x i est un indice entier allant de 0 à L1i-1 ; fourniture à la première mémoire de stockage (10) d’une suite de données successives extraites par lecture desdites données classées consécutivement dans la deuxième mémoire (m). Procédé de traitement selon l’une des revendications précédentes, selon lequel la deuxième mémoire (m) comporte au minimum K bancs de mémoire distincts, et le stockage des données dans la deuxième mémoire est effectué de manière à vérifier que des données qui sont des composantes d’un même vecteur W(u) ne peuvent être stockées dans un même banc. Dispositif (40) de traitement de données à fournir en entrée d’un premier registre à décalage (28) d’un circuit électronique neuronal systolique (1) comportant une grille de processeurs élémentaires (22), ledit premier registre à décalage étant adapté pour véhiculer un vecteur de données de taille K à chaque cycle d’horloge à destination de K colonnes de processeurs élémentaires (PE) de ladite grille, ledit dispositif électronique de traitement (40) étant adapté pour obtenir une suite de données successives D(0), D(1), D(2) …D(d) extraites par lecture desdites données classées consécutivement dans une première mémoire de stockage (10) et pour stocker lesdites données dans une deuxième mémoire (m) du dispositif de traitement ; ledit dispositif électronique de traitement étant adapté pour générer des vecteurs W(u) en fonction desdites données stockées, chaque vecteur W(u) comportant K composantes (W(u) 0 , …, W(u) K-1 ) tel que W(u) k, k= 0 à K-1 = D(K0 + k*S2 + u*S1), où K est un entier strictement supérieur à 1, K0 est une constante prédéfinie, les pas S1 et S2 sont des constantes entières prédéfinies ; ledit dispositif électronique de traitement (40) étant adapté pour fournir, en entrée dudit registre à décalage (28), le vecteur W(u), telle que des valeurs successives W(u) sont fournies lors de coups d’horloge successifs, avec u entier allant de 0 à L1-1, et L1 constante entière strictement supérieure à un. Dispositif (40) de traitement de données selon la revendication 6, adapté en outre pour obtenir un vecteur de données w de taille K fournies par un deuxième registre à décalage (29) du circuit neuronal systolique (1), ledit deuxième registre à décalage étant adapté pour véhiculer à chaque cycle d’horloge un vecteur de données de taille K correspondant aux résultats de K colonnes respectives de processeurs élémentaires de ladite grille, les K composantes de w étant (w 0 , …, w K-1 ) ; ledit dispositif électronique de traitement étant adapté pour stocker dans la deuxième mémoire (m), w k, k= 0 à K-1 à l’adresse ind0 +K*C*S2 + x*S1 + k*S2 , où ind0 est une constante prédéfinie, C est le numéro de colonne et x est un indice allant de 0 à L1-1 et pour fournir à la première mémoire de stockage une suite de données successives extraites par lecture desdites données classées consécutivement dans la deuxième mémoire. Dispositif de traitement (40) selon la revendication 6 ou 7, dans lequel, pour k= 0 à K-1, W(u) k = D(K0 + u i *S1 i + k*S2), les pas S1 i et S2 sont des constantes prédéfinies ; le vecteur étant fourni en entrée dudit registre à décalage, avec u i entier allant de 0 à L1 i -1, et L1 i constante strictement supérieure à un. Dispositif de traitement (40) selon la revendication 8, adapté pour obtenir un vecteur de données w de taille K fournies par un deuxième registre à décalage (29) du circuit neuronal systolique (1), ledit deuxième registre à décalage véhiculant à chaque cycle d’horloge un vecteur de données de taille K correspondant aux résultats de K colonnes respectives de processeurs élémentaires de ladite grille, les K composantes de w étant (w 0 , …, w K-1 ), ledit dispositif électronique de traitement (40)étant adapté pour stocker dans la deuxième mémoire de w k, k= 0 à K-1 à l’adresse ind0+4*C*S2 + ( x i * S1i ) + k*S2, où ind0 est une constante prédéfinie, C est le numéro de colonne et x i est un indice entier allant de 0 à L1i-1 ; ledit dispositif électronique de traitement étant adapté pour fournir à la première mémoire de stockage une suite de données successives extraites par lecture desdites données classées consécutivement dans la deuxième mémoire. Dispositif de traitement (40) selon l’une des revendications 6 à 9, la deuxième mémoire comportant au minimum K bancs de mémoire distincts, et ledit dispositif de traitement étant adapté pour effectuer le stockage des données dans la deuxième mémoire de manière à vérifier que des données qui sont des composantes d’un même vecteur W(u) ne peuvent être stockées dans un même banc.