FR 3117645 A1 20220617 FR 2013363 A 20201216 Circuit de calcul pour calculer une somme pondérée d’un ensemble de premières données par au moins un circuit de gestion de parcimonie comprenant une première mémoire tampon pour stocker tout ou une partie des premières données délivrées séquentiellement et une seconde mémoire tampon pour stocker tout ou partie des secondes données délivrées séquentiellement. Le circuit de gestion de parcimonie comprenant en outre un premier circuit de traitement apte : à analyser les premières données pour rechercher les premières données non-nulles et définir un premier indicateur de saut (is1) entre deux données non nulles successives, et à commander le transfert vers le circuit de distribution d’une première donnée lue dans la première mémoire tampon de données en fonction dudit premier indicateur de saut. Le circuit de gestion de parcimonie comprenant en outre un second circuit de traitement apte à commander le transfert vers le circuit de distribution d’une seconde donnée lue dans la deuxième mémoire tampon de données en fonction dudit premier indicateur de saut. Mise à profit de la faible densité de données ou de poids non-nuls dans un calculateur de somme pondérée Champ d’application L’invention concerne généralement les circuits de calcul de sommes pondérées de données présentant une faible densité de données ou de poids de pondérations non-nuls et plus particulièrement les calculateurs de réseaux neuro-morphiques numériques pour le calcul de réseaux de neurones artificiels à base de couches convolutionnelles ou entièrement connectées. Problème soulevé Les réseaux de neurones artificiels constituent des modèles de calculs imitant le fonctionnement des réseaux de neurones biologiques. Les réseaux de neurones artificiels comprennent des neurones interconnectés entre eux par des synapses, qui sont par exemple implémentées par des mémoires numériques. Les réseaux de neurones artificiels sont utilisés dans différents domaines de traitement du signal (visuel, sonore, ou autre) comme par exemple dans le domaine de la classification d’image ou de la reconnaissance d’image. Les réseaux de neurones convolutionnels correspondent à un modèle particulier de réseau de neurones artificiels. Les réseaux de neurones convolutionnels ont été décrits initialement dans l’article de K. Fukushima, « Neocognitron: A self-organizing neural network model for a mechanism of pattern recognition unaffected by shift in position. Biological Cybernetics, 36(4):193–202, 1980. ISSN 0340-1200. doi: 10.1007/BF00344251 ». Les réseaux de neurones convolutionnels (désignés en langue anglo-saxonne par les expressions “convolutional neural networks”, ou “deep (convolutional) neural networks” ou encore “ConvNets”) sont des réseaux de neurones inspirés par les systèmes visuels biologiques. Les réseaux de neurones convolutionnels (CNN) sont utilisés notamment dans des systèmes de classifications d’images pour améliorer la classification. Appliqués à la reconnaissance d’images, ces réseaux permettent un apprentissage des représentations intermédiaires d’objets dans les images qui sont plus petites et généralisables pour des objets similaires, ce qui facilite leur reconnaissance. Cependant, le fonctionnement intrinsèquement parallèle et la complexité des classificateurs de type réseau de neurones convolutionnel rend difficile leur implémentation dans des systèmes embarqués à ressources limitées. En effet, les systèmes embarqués imposent de fortes contraintes par rapport à la surface du circuit et à la consommation électrique. Le réseau de neurones convolutionnel est basé sur une succession de couches de neurones, qui peuvent être des couches convolutionnelles (Convolutional Layer en anglais) ou des couches entièrement connectées (généralement à la fin du réseau). Dans les couches convolutionnelles, seulement un sous-ensemble des neurones d’une couche est connecté à un sous-ensemble des neurones d’une autre couche. Par ailleurs, les réseaux de neurones convolutionnels peuvent traiter plusieurs canaux d’entrée pour générer plusieurs canaux de sortie. Chaque canal d’entrée correspond, par exemple à une matrice de données différente. Sur les canaux d’entrée se présentent des images d’entrée sous forme matricielle formant ainsi une matrice d’entrée ; une image matricielle de sortie est obtenue sur les canaux de sortie. Les matrices de coefficients synaptiques pour une couche convolutionnelle sont aussi appelées « noyaux de convolution ». En particulier, les réseaux de neurones convolutionnels comprennent une ou plusieurs couche(s) de convolution qui sont particulièrement couteuses en nombre d’opérations. Les opérations effectuées sont principalement des opérations de multiplication et accumulation (MAC) pour calculer une somme des données pondérée par les coefficients synaptiques. Par ailleurs, pour respecter les contraintes de latence et temps de traitement propres aux applications visées, il est nécessaire de minimiser le nombre de cycles de calcul nécessaires lors d’une phase d’inférence ou lors d’une phase de rétro propagation au cours de l’apprentissage du réseau. Plus particulièrement, lorsque les réseaux de neurones convolutionnels sont implémentés dans un système embarqué à ressources limitées (par opposition à une implémentation dans des infrastructures de centres de calcul), la réduction de consommation électrique et la réduction du nombre d’opérations de calcul nécessaires devient un critère primordial pour la réalisation du réseau de neurones. L’opération de base mise en œuvre par un neurone artificiel est une opération de multiplication puis accumulation MAC. Selon le nombre de neurones par couche et de couches de neurones que comporte le réseau, le nombre d’opérations MAC par unité de temps nécessaire pour un fonctionnement temps réel devient contraignant. Il existe donc un besoin pour développer des architectures de calcul optimisées pour les réseaux de neurones qui permettent de limiter le nombre d’opérations MAC sans dégrader ni les performances des algorithmes mis en œuvre par le réseau ni la précision des calculs. Plus particulièrement, Il existe un besoin pour développer des architectures de calcul optimisées pour les réseaux de neurones qui réalise les calculs des sommes pondérées en évitant les opérations de multiplication par une donnée nulle reçue par un neurone et/ou par un coefficient synaptique nul. Art antérieur/ Restrictions de l’état de l’art La publication « Eyeriss v2: A Flexible Accelerator for Emerging Deep Neural Networks on Mobile Devices» de Chen et al. présente un calculateur de réseau de neurones convolutionnel mettant en œuvre un circuit de réseau sur puce (NoC pour Network on Chip) pour traiter la faible densité de données et de poids non-nuls. Cependant, l’inconvénient de cette solution consiste en l’utilisation d’un circuit de type réseau sur puce très volumineux occupant une large surface dans un circuit intégré. La publication « An 11.5TOPS/W 1024-MAC Butterfly Structure Dual-Core Sparsity-Aware Neural Processing Unit in 8nm Flagship Mobile SoC» de Jinook Song et al. présente un calculateur de réseau de neurones convolutionnel mettant en œuvre une sélection des données à lire basée sur la faible densité des poids non-nuls en utilisant un pré-calcul des indices des poids non-nuls. L’inconvénient de cette solution consiste en la limitation à une mise à profit de la faible densité des poids non-nuls uniquement. De plus, La solution proposée par cette publication est limitée à un fonctionnement en inférence étant non adaptée à la réalisation d’une phase d’apprentissage. Réponse au problème et apport solution L’invention propose une architecture de calculateur permettant de réduire la consommation électrique et améliorer la performance d’un réseau de neurones implémenté sur une puce en utilisant un circuit de gestion de flux intégré dans la même puce que le réseau de calcul. Le circuit de gestion de flux selon l’invention tire profit de la faible densité des données non-nulles et/ou des poids non-nuls. L’invention propose une architecture de calculateur accélérateur de réseau de neurones artificiels comprenant une pluralité d’unités de calcul de type MAC recevant chacune à chaque cycle de calcul une donnée non-nulle et le coefficient synaptique associé à ladite donnée ou inversement. L’amélioration des performances du calcul est réalisée au moyen d’au moins un circuit de gestion de flux permettant de repérer les données nulles lors de leur chargement à partir d’une mémoire de données et de synchroniser la lecture des poids à partir d’une mémoire de poids au moyen d’informations de saut. La solution selon l’invention propose en outre un traitement de la faible densité des données non-nulles conjointement pour les données et les coefficients synaptiques (ou poids). Il est envisageable dans la solution selon l’invention de réaliser ce traitement conjoint sur des vecteurs comprenant chacun une pluralité de couples de type [donnée, poids]. Dans la description de l’invention, nous allons présenter la solution technique proposée dans le contexte d’un calculateur de réseaux neuro-morphiques. Cependant, la solution proposée est adaptée, d’une façon plus générale, à toute architecture de calcul destinée à réaliser des opérations de multiplications et d’accumulation (MAC) pour calculer des sommes d’un premier type de données A pondérées avec un second type de données B. La solution proposée selon l’invention est optimale lorsque le premier type de données A et/ou le second type de données B présentent une faible densité de valeurs non nulles. La solution proposée selon l’invention est symétrique par rapport au type de données A ou B. Plus généralement, la solution selon l’invention permet la prise en compte de la « faible densité de données non-nulles » d’au moins une des données d’entrée d’une série d’opérations de type MAC. Cela permet d’optimiser le fonctionnement du calculateur réalisant les opérations MAC via un calcul parcimonieux limitant la consommation d’énergie et le temps de calcul nécessaire. Dans les parties suivantes le terme anglais « sparcity » a été traduit par parcimonie renvoyant aussi à la notion de « faible densité de données non-nulles ». Résumé L’invention a pour objet un circuit de calcul pour calculer une somme pondérée d’un ensemble de premières données par un ensemble de secondes données comprenant : Au moins une première mémoire de données pour stocker les premières données; Au moins une seconde mémoire de données pour stocker les secondes données ; Au moins une unité de calcul configurée pour réaliser le calcul de somme pondérée ; Au moins un premier circuit séquenceur apte à commander la lecture dans la première mémoire de données selon une première séquence d’adressage prédéfinie ; Au moins un second circuit séquenceur apte à commander la lecture dans la deuxième mémoire de données selon une seconde séquence d’adressage prédéfinie ; Au moins un circuit de distribution (DIST) associé à une unité de calcul pour lui délivrer successivement une nouvelle paire de première et seconde données associées ; Au moins un circuit de gestion de flux comprenant : Une première mémoire tampon pour stocker tout ou une partie des premières données délivrées séquentiellement par ledit premier circuit séquenceur ; Une seconde mémoire tampon pour stocker tout ou partie des secondes données délivrées séquentiellement par ledit second circuit séquenceur ; un premier circuit de traitement comprenant un premier circuit de contrôle des pointeurs de lecture et d’écriture de la première mémoire tampon et étant apte : à analyser les premières données délivrées par ledit premier circuit séquenceur pour rechercher les premières données non-nulles et définir un premier indicateur de saut entre deux données non nulles successives, et à commander le transfert vers le circuit de distribution d’une première donnée lue dans la première mémoire tampon de données en fonction dudit premier indicateur de saut; un second circuit de traitement comprenant un second circuit de contrôle des pointeurs de lecture et d’écriture de la seconde mémoire tampon et étant apte à commander le transfert vers le circuit de distribution d’une seconde donnée lue dans la deuxième mémoire tampon de données en fonction dudit premier indicateur de saut. Selon un aspect particulier de l’invention, le circuit de calcul comprend en outre une pluralité de circuits de détection de donnée nulle chacun configuré pour apparier à chaque première donnée d’entrée, un indicateur de donnée nulle ayant un premier état correspondant à une donnée nulle et un second état correspondant à une donnée non-nulle. Selon un aspect particulier de l’invention, le premier circuit séquenceur est configuré pour délivrer les premières données par vecteurs de N données successives, N étant un entier naturel non nul. La première mémoire tampon est une mémoire apte à stocker des vecteurs de N données selon un principe « premier entré premier sorti ». Le premier circuit de traitement comprend un étage de gestion de parcimonie par donnée destiné à recevoir les vecteurs provenant de la première mémoire tampon et configuré pour générer un signal de saut par mot entre deux données non nulles successives à destination des deux circuits de contrôle des pointeurs. Ledit signal de saut par mot forme une première composante du premier indicateur de saut. Selon un aspect particulier de l’invention, le premier circuit de traitement comprend en amont de la première mémoire tampon un étage de gestion de parcimonie par vecteur configuré pour générer un signal de saut par vecteur à destination des deux circuits de contrôle des pointeurs lorsqu’un vecteur est nul. Ledit signal de saut par vecteur forme une seconde composante du premier indicateur de saut. Selon un aspect particulier de l’invention, l’étage de gestion de parcimonie par vecteur comprend un premier circuit logique de détection de vecteur nul configuré pour générer, à partir des indicateurs de donnée nulle , le signal de saut par vecteur lorsqu’un vecteur ne comprend que des données nulles . Selon un aspect particulier de l’invention, l’étage de gestion de parcimonie par donnée comprend : Un registre pour recevoir un vecteur non-nul à la sortie de la première mémoire tampon; Un étage encodeur prioritaire configuré pour réaliser les opérations suivantes d’une façon itérative: la génération d’un signal de commande de distribution correspondant à l’indice de la première donnée d’entrée non-nulle du vecteur. Le premier circuit de contrôle des pointeurs est configuré pour réaliser dans la même boucle d’itération : la génération du signal de saut par mot à partir du signal de commande de distribution; et la mise au premier état de l’indicateur de donnée nulle de la donnée d’entrée distribuée dans le vecteur stocké dans le registre suite à sa distribution. L’étage de gestion de parcimonie par donnée comprend un second circuit logique de détection de vecteur nul pour générer un signal de déclenchement de lecture du vecteur suivant lorsque tous les indicateurs de donnée nulle des données appartenant audit vecteur sont au premier état. Selon un aspect particulier de l’invention, le second circuit de traitement est apte : - à analyser les secondes données délivrées par ledit second circuit séquenceur pour rechercher les secondes données nulles et définir un second indicateur de saut entre deux données non nulles successives, et - à commander le transfert vers le circuit de distribution d’une seconde donnée lue dans la seconde mémoire tampon de données en fonction desdits premier et second indicateurs de saut . Le second circuit de traitement est apte à commander le transfert vers le circuit de distribution d’une seconde donnée lue dans la seconde mémoire tampon de données en fonction desdits premier et second indicateurs de saut . Selon un aspect particulier de l’invention, le circuit de gestion de flux est configuré pour lire les données des deux mémoires par vecteurs de N couples successifs selon la première et la seconde séquence d’adressage prédéfinie desdites données, N étant un entier naturel non nul. Le premier et second indicateur de saut sont obtenus par une analyse desdits vecteurs tel que les deux données formant un couple distribué soient non-nulles. Selon un aspect particulier de l’invention, le circuit de calcul comprenant en outre une pluralité de circuits de détection de couple nul étant chacun configuré pour apparier à chaque couple de première et seconde données d’entrées, un indicateur de couple nulle ayant un premier état correspondant à un couple comprenant au moins une donnée nulle et un second état correspondant à un couple ne comprenant que des données non-nulles . Selon un aspect particulier de l’invention, l’ensemble formé par la première et la seconde mémoire tampon est une mémoire apte à stocker des vecteurs de N couples selon un principe « premier entré premier sorti ». L’ensemble formé par le premier et le second circuit de traitement comprend un étage de gestion de parcimonie par donnée destiné à recevoir les vecteurs provenant de l’ensemble de la première et la seconde mémoire tampon et configuré pour générer un signal de saut par mot entre deux couples successifs ayant deux données non nulles à destination des deux circuits de contrôle des pointeurs. Ledit signal de saut par mot forme une première composante du premier indicateur de saut et du second indicateur de saut. Selon un aspect particulier de l’invention, le circuit de calcul comprend un étage de gestion de parcimonie par vecteur en amont de la première et la seconde mémoire tampon. L’étage de gestion de parcimonie par vecteur comprend un premier circuit logique de détection de vecteur nul configuré pour générer un signal de saut par vecteur lorsqu’un vecteur ne comprend que des indicateurs de donnée nulle au premier état. Ledit signal de saut par vecteur forme une seconde composante du premier indicateur de saut et du second indicateur de saut. Selon un aspect particulier de l’invention, l’étage de gestion de parcimonie par couple comprend : Un registre pour recevoir un vecteur non-nul à la sortie de la mémoire tampon; Un étage encodeur prioritaire configuré pour réaliser les opérations suivantes d’une façon itérative: La génération d’un signal de commande de distribution correspondant à l’indice du premier couple ayant deux données non-nulles du vecteur ; Au moins le premier ou le second circuit de contrôle des pointeurs étant configuré pour réaliser dans la même boucle d’itération : la mise au premier état de l’indicateur de donnée nulle du couple de données d’entrée distribué dans le vecteur stocké dans le registre, suite à sa distribution ; Un organe de distribution commandé par le signal de commande de distribution; Un second circuit logique de détection de vecteur nul pour générer un signal de déclenchement de lecture du vecteur suivant lorsque tous les indicateurs de donnée nulle des couples appartenant audit vecteur sont au premier état. Selon un aspect particulier de l’invention, le circuit de calcul est destiné à calculer des données de sortie d’une couche d’un réseau de neurones artificiels à partir de données d’entrée. Le réseau de neurones est composé d’une succession de couches étant chacune constituée d’un ensemble de neurones. Chaque couche est connectée à une couche adjacente via une pluralité de synapses associées à un ensemble de coefficients synaptiques formant au moins une matrice de poids. Le premier ensemble de données correspond aux données d’entrée à un neurone de la couche en cours de calcul. Le second ensemble de données correspond aux coefficients synaptiques connectés audit neurone de la couche en cours de calcul. Le circuit de calcul comprend : au moins un groupe d’unité de calcul, chaque groupe d’unité de calcul comprenant une pluralité d’unités de calcul de rang k=1 à K avec K un entier strictement positif, une pluralité de secondes mémoires de données de rang k=1 à K pour stocker le second ensemble de données; Chaque groupe d’unité de calcul est connecté à un circuit de gestion de flux dédié comprenant en outre : une pluralité de secondes mémoires tampons de rang k=1 à K tel que chaque seconde mémoire tampon distribue à l’unité de calcul de même rang k les données d’entrée provenant de la seconde mémoire de données de même rang k en fonction d’au moins le premier indicateur de saut. Selon un aspect particulier de l’invention, le circuit de calcul est destiné à calculer des données de sortie d’une couche d’un réseau de neurones artificiels à partir de données d’entrée. Le réseau de neurones est composé d’une succession de couches étant chacune constituée d’un ensemble de neurones. Chaque couche est connectée à une couche adjacente via une pluralité de synapses associées à un ensemble de coefficients synaptiques formant au moins une matrice de poids. Le premier ensemble de données correspond aux coefficients synaptiques connectés audit neurone de la couche en cours de calcul. Le second ensemble de données correspond aux données d’entrée d’un neurone de la couche en cours de calcul. Le circuit de calcul comprend: au moins un groupe d’unité de calcul, chaque groupe d’unité de calcul comprenant une pluralité d’unités de calcul de rang k=1 à K avec K un entier strictement positif, une pluralité de premières mémoires de données de rang k=1 à K pour stocker le premier ensemble de données; Une pluralité de circuit de gestion de flux de rang k=1 à K, chacun étant configuré tel que pour chaque unité de calcul de rang k appartenant à un groupe d’unité de calcul. le circuit de gestion de flux de rang k est configuré pour distribuer les coefficients synaptiques non-nuls provenant de la première mémoire de données de même rang k vers l’unité de calcul de même rang k. D’autres caractéristiques et avantages de la présente invention apparaîtront mieux à la lecture de la description qui suit en relation aux dessins annexés suivants. représente un exemple de réseau de neurones convolutionnel contenant des couches convolutionnelles et des couches entièrement connectées. représente une première illustration du fonctionnement d’une couche de convolution d’un réseau de neurones convolutionnel avec un canal d’entrée et un canal de sortie. représente une deuxième illustration du fonctionnement d’une couche de convolution d’un réseau de neurones convolutionnel avec un canal d’entrée et un canal de sortie. représente une illustration du fonctionnement d’une couche de convolution d’un réseau de neurones convolutionnel avec plusieurs canaux d’entrée et plusieurs canaux de sortie. illustre un exemple d’un schéma fonctionnel de l’architecture générale d’un circuit de calcul d’un réseau de neurones convolutionnel. illustre un schéma fonctionnel d’un exemple de réseau de calcul implémenté sur un système sur puce selon l’invention. illustre un schéma fonctionnel d’un circuit de gestion de flux CGF mettant à profit la faible densité en valeurs non-nulles selon l’invention. illustre un schéma fonctionnel d’un circuit de gestion de flux de données selon un premier mode de réalisation dans lequel l’analyse de parcimonie est réalisée uniquement sur un ensemble des données. illustre un exemple d’implémentation du premier mode de réalisation de l’invention. illustre un schéma fonctionnel d’un circuit de gestion de flux de données selon un second mode de réalisation dans lequel l’analyse de parcimonie est réalisée conjointement sur les deux ensembles des données. illustre un schéma fonctionnel d’un circuit de gestion de flux de données selon un troisième mode de réalisation dans lequel l’analyse de parcimonie est réalisée conjointement sur les deux ensembles des données. On rappelle que la solution décrite par l’invention s’applique à tout circuit de calcul réalisant des opérations de multiplication et d’accumulation pour calculer une somme d’un premier ensemble de données A pondérée par un second ensemble de données B. A titre d’illustration et sans perte de généralité, on décrira la solution technique selon l’invention implémentée dans un circuit configuré pour une application de calcul de réseau de neurones artificiels convolutionnel. Tout d’abord, on commence par décrire un exemple de structure globale d’un réseau de neurones convolutionnel contenant des couches convolutionnelles et des couches entièrement connectées. La représente l’architecture globale d’un exemple de réseau convolutionnel pour la classification d'images. Les images en bas de la représentent un extrait des noyaux de convolution de la première couche. Un réseau de neurones artificiel (encore appelé réseau de neurones « formel » ou désigné simplement par l'expression « réseau de neurones » ci-après) est constitué d'une ou plusieurs couches de neurones, interconnectées entre elles. Chaque couche est constituée d'un ensemble de neurones, qui sont connectés à une ou plusieurs couches précédentes. Chaque neurone d'une couche peut être connecté à un ou plusieurs neurones d'une ou plusieurs couches précédentes. La dernière couche du réseau est appelée « couche de sortie ». Les neurones sont connectés entre eux par des synapses associées à des poids synaptiques, qui pondèrent l'efficacité de la connexion entre les neurones, et constituent les paramètres réglables d'un réseau. Les poids synaptiques peuvent être positifs ou négatifs. Les réseaux de neurones dit « convolutionnels » (ou encore « convolutional », « deep convolutional », « convnets ») sont en outre composés de couches de types particuliers telles que les couches de convolution, les couches de regroupement (« pooling » en langue anglo-saxonne) et les couches complètement connectées (« fully connected »). Par définition, un réseau de neurones convolutionnel comprend au moins une couche de convolution ou de « pooling ». L’architecture du circuit calculateur accélérateur selon l’invention est compatible pour exécuter les calculs des couches convolutionnelles. Nous allons commencer dans un premier temps par détailler les calculs effectués pour une couche convolutionnelle. Les figures 2a-2c illustrent le fonctionnement général d’une couche de convolution. La représente une matrice d’entrée [I] de taille (Ix,Iy) connectée à une matrice de sortie [O] de taille (Ox,Oy) via une couche de convolution réalisant une opération de convolution à l’aide d’un filtre [W] de taille (Kx,Ky). Une valeur O i ,j de la matrice de sortie [O] (correspondant à la valeur de sortie d’un neurone de sortie) est obtenue en appliquant le filtre [W] sur la sous-matrice correspondant de la matrice d’entrée [I]. D’une façon générale, on définit l’opération de convolution de symbole ⊗ entre deux matrices [X] composée par les éléments x i,j et [Y] composée par les éléments y i,j de dimensions égales. Le résultat est la somme des produits des coefficients x i ,j .y i,j ayant chacun la même position dans les deux matrices. Sur la , on a représenté la première valeur O0,0 de la matrice de sortie [O] obtenue en appliquant le filtre [W] à la première sous-matrice d’entrée notée [X1] de dimensions égales à celle du filtre [W]. Le détail de l’opération de convolution est décrit par l’équation suivante : O 0 ,0 = [X1] ⊗ [W] D’où O 0 ,0 = x 00 .w 00 + x 01 .w 01 + x 02 .w 02 + x 10 .w 10 + x 11 .w 11 + x 12 .w 12 + x 20 .w 20 + x 21 .w 21 + x 22 .w 22 . La représente un cas général de calcul d’une valeur O3,2 quelconque de la matrice de sortie. De façon générale, la matrice de sortie [O] est connectée à la matrice d’entrée [I] par une opération de convolution, via un noyau de convolution ou filtre noté [W] . Chaque neurone de la matrice de sortie [O] est connecté à une partie de la matrice d’entrée [I] ; cette partie est appelée « sous-matrice d’entrée » ou encore « champ récepteur du neurone » et elle a les mêmes dimensions que le filtre [W]. Le filtre [W] est commun pour l’ensemble des neurones d’une matrice de sortie [O] . Les valeurs des neurones de sortie O i ,j sont données par la relation suivante : Dans la formule ci-dessus, désigne la fonction d’activation du neurone, tandis que et désignent les paramètres de décalage (« stride » en anglais) vertical et horizontal respectivement. Un tel décalage « stride » correspond au décalage entre chaque application du noyau de convolution sur la matrice d’entrée. Par exemple, si le décalage est supérieur ou égal à la taille du noyau, alors il n’y a pas de chevauchement entre chaque application du noyau. Nous rappelons que cette formule est valable dans le cas où la matrice d’entrée a été traitée pour rajouter des lignes et des colonnes supplémentaires (Padding en Anglais). La matrice filtre [W] est composée par les coefficients synaptiques w t ,l de rangs t=0 à K x -1 et l=0 à K y -1. A titre d’exemple, on définit la fonction ReLu comme fonction d’activation du réseau tel que g(x)=0 si x Par ailleurs, il est possible de réaliser des opérations de « élagage » (ou « pruning » en Anglais) lors de la phase d’apprentissage du réseau. Il s’agit d’un mécanisme de mise à zéro des coefficients synaptiques ayant des valeurs inférieures à un certain seuil. L’utilisation de ce mécanisme rend le circuit calculateur compatible avec la solution technique selon l’invention appliquée aux poids synaptiques. Généralement, chaque couche de neurones convolutionnelle notée C k peut recevoir une pluralité de matrices d’entrée sur plusieurs canaux d’entrée de rang p=0 à P avec P un entier positif et/ou calculer plusieurs matrices de sortie sur une pluralité de canaux de sortie de rang q=0 à Q avec Q un entier positif. On note [W] p ,q ,k le filtre correspondant au noyau de convolution qui connecte la matrice de sortie [O] q à une matrice d’entrée [I] p dans la couche de neurone C k . Différents filtres peuvent être associés à différentes matrices d’entrée, pour la même matrice de sortie. Les figures 2a-2b illustrent un cas où une seule matrice de sortie (et donc un seul canal de sortie) [O] est connectée à une seule matrice d’entrée [I] (et donc un seul canal d’entrée). La illustre un autre cas où plusieurs matrices de sortie [O]q sont connectées chacune à plusieurs matrices d’entrée [I]p. Dans ce cas, chaque matrice de sortie [O]q de la couche Ck est connectée à chaque matrice d’entrée [I]p via un noyau de convolution [W]p,q,k qui peut être différent selon la matrice de sortie. Par ailleurs, lorsqu’une matrice de sortie est connectée à plusieurs matrices d’entrée, la couche de convolution réalise, en plus de chaque opération de convolution décrite ci-dessus, une somme des valeurs de sortie des neurones obtenues pour chaque matrice d’entrée. Autrement dit, la valeur de sortie d’un neurone de sortie (ou aussi appelé canaux de sortie) est dans ce cas égale à la somme des valeurs de sorties obtenues pour chaque opération de convolution appliquée à chaque matrice d’entrée (ou aussi appelé canaux d’entrée) Les valeurs des neurones de sortie O i ,j de la matrice de sortie [O] q sont dans ce cas données par la relation suivante : Avec p=0 à P le rang d’une matrice d’entrée [I] p connectée à la matrice de sortie [O] q de la couche C k de rang q=0 à Q via le filtre [W] p,q ,k composé des coefficients synaptiques w p,q,t,l de rangs t=0 à K x -1 et l=0 à K y -1. La illustre un exemple d’un diagramme fonctionnel de l’architecture générale du circuit de calcul d’un réseau de neurone convolutionnel selon l’invention. Le circuit de calcul d’un réseau de neurone convolutionnel CALC, comprend une mémoire volatile externe MEM_EXT pour stocker les données d’entrée et de sortie de tous les neurones d’au moins la couche du réseau en cours de calcul pendant une phase d’inférence ou d’apprentissage et un système intégré sur une même puce SoC. Le système intégré SoC comprend un réseau de calcul MAC_RES constitué d’une pluralité d’unités de calcul pour calculer des neurones d’une couche du réseau de neurones, une mémoire volatile interne MEM_INT pour stocker les données d’entrée et de sortie des neurones de la couche en cours de calcul, un étage mémoire de poids MEM_POIDS comprenant une pluralité de mémoires non volatiles internes de rang n=0 à N-1 notées MEM_POIDS n pour stocker les coefficients synaptiques des matrices de poids, un circuit de contrôle des mémoires CONT_MEM connecté à l’ensemble des mémoires MEM_INT, MEM_EXT et MEM_POIDS pour jouer le rôle d’interface entre la mémoire externe MEM_EXT et le système sur puce SoC, un ensemble de générateurs d’adresses ADD_GEN pour organiser la distribution de données et des coefficients synaptiques lors d’une phase de calcul et pour organiser le transfert des résultats calculés à partir des différentes unités de calcul du réseau de calcul MAC_RES vers l’une des mémoires MEM_EXT ou MEM_INT. Le système sur puce SoC comprend notamment une interface image notée I/O pour recevoir les images d’entrée pour l’ensemble du réseau lors d’une phase d’inférence ou apprentissage. Il convient de noter que les données d’entrées reçues via l’interface I/O ne sont pas limitées à des images mais peuvent être, plus généralement, de nature diverse. Le système sur puce SoC comprend également un processeur PROC pour configurer le réseau de calcul MAC_RES et les générateurs d’adresses ADD_GEN selon le type de la couche neuronale calculée et la phase de calcul réalisée. Le processeur PROC est connecté à une mémoire non-volatile interne MEM_PROG qui contient la programmation informatique exécutable par le processeur PROC. Optionnellement, le système sur puce SoC comprend un accélérateur de calcul de type SIMD (Single Instruction on Multiple Data) connecté au processeur PROC pour améliorer la performance du processeur PROC. Les mémoires de données externe MEM_EXT et interne MEM_INT peuvent être réalisées avec des mémoires de type DRAM. La mémoire de données interne MEM_INT peut aussi être réalisée avec des mémoires de type SRAM. Le processeur PROC, l’accélérateur SIMD, la mémoire de programmation MEM_PROG, l’ensemble des générateurs d’adresse ADD_GEN et le circuit de contrôle des mémoires CONT_MEM font partie des moyens de contrôle du circuit de calcul d’un réseau de neurones convolutionnel CALC. Les mémoires des données de poids MEM_POIDS n peuvent être réalisées avec des mémoires basées sur une technologie NVM émergente . La illustre un exemple d’un schéma fonctionnel du réseau de calcul MAC_RES implémenté dans le système sur puce SoC selon un premier mode de réalisation de l’invention. Le réseau de calcul MAC_RES comprend une pluralité de groupes d’unités de calcul notés Gj de rang j=1 à M avec M un entier positif, chaque groupe comprend une pluralité d’unités de calcul noté PEn de rang n=0 à N-1 avec N un entier positif représentant le nombre de canaux de sortie. Sans perte de généralité, l’exemple d’implémentation illustré sur la comprend 9 groupes d’unités de calcul ; chaque groupe comprend 128 unités de calcul noté PEn. Ce choix de conception permet de couvrir un large panel de types de convolution tel que 3x3 stride1, 3x3 stride2, 5x5 stride1, 7x7 stride2, 1x1 stride1 et 11x11 stride4 basé sur le parallélisme spatial assuré par les groupes d’unités de calcul et tout en calculant parallèlement 128 canaux de sortie. Pendant le calcul d’une couche de neurones, chacun des groupes d’unités de calcul G j reçoit les données d’entrée x ij provenant d’une mémoire intégrée dans le réseau de calcul MAC_RES notée MEM_A comprenant une des données d’entrée x ij d’une couche en cours de calcul. La mémoire MEM_A, reçoit un sous-ensemble des données d’entrée de la mémoire externe MEM_EXT ou de la mémoire interne MEM_INT. Des données d’entrée provenant de un ou plusieurs canaux d’entrée sont utilisées pour le calcul d’une ou plusieurs matrices de sortie sur un ou plusieurs canaux de sortie. La mémoire MEM_A comprend un port d’écriture connecté aux mémoires MEM_EXT ou MEM_INT et 9 ports de lecture connectés chacun à un circuit de gestion de flux CGF lui-même connecté à un groupe d’unité de calcul G j . Pour chaque groupe G j d’unités de calcul PE n , le circuit de gestion de flux CGF est configuré pour distribuer à chaque cycle de calcul des données d’entrée x ij non-nulles provenant de la première mémoire de données MEM_A vers les unités de calcul PE n appartenant au groupe G j . Comme décrit précédemment, le système sur puce SoC comprend une pluralité de mémoires de poids MEM_POIDS n de rang n=0 à N-1. Le circuit calculateur comprend en outre une pluralité de mémoires tampons de poids notées BUFF_B nj de rang n=0 à N-1 et de rang j=1 à M. La mémoire tampon de rang n et j reçoit les poids provenant de la mémoire de poids MEM_POIDS n de rang n pour les distribuer vers l’unité de calcul PE n de même rang n appartenant au groupe G j de rang j. A titre d’exemple, la mémoire de poids de rang 0 MEM_POIDS 0 est connectée à 9 mémoires tampon de poids BUFF_B 0j . La mémoire de tampon de poids BUFF_B 01 est connectée à l’unité de calcul PE 0 du premier groupe d’unités de calcul G 1, La mémoire tampon de poids BUFF_B 02 est connectée à l’unité de calcul PE 0 du deuxième groupe d’unités de calcul G 2, et ainsi de suite. L’ensemble des mémoires tampons de poids BUFF_B 0j de rang j appartiennent au circuit de gestion de flux CGF j associé au groupe de même rang j. Chaque circuit de flux CGF j associé à un groupe d’unités de calcul G j génère en outre une information de saut sous forme d’un ou plusieurs signaux pour commander la lecture des coefficients synaptiques en fonction de l’information de saut générée par chaque circuit de flux CGF j . Cela permet de synchroniser, en entrée de chaque unité de calcul PE n de rang n, la distribution des poids synaptiques w ij provenant d’une mémoire de poids MEM_POIDS n de rang n avec la distribution des données d’entrée x ij non-nulles provenant de la première mémoire de données MEM_A via le circuit de flux CGF j . Ainsi le calculateur réalise le calcul de ladite somme pondérée dans le bon ordre. Chaque mémoire de poids de rang n MEM_POIDS n contient toutes les matrices de poids [W] p ,n ,k associés aux synapses connectées à tous les neurones des matrices de sortie d’une couche de neurones de rang k du réseau. Ladite matrice de sortie correspondant au canal de sortie du même rang n avec n un entier variant de 0 à 127 dans l’exemple d’implémentation de la . Avantageusement, le réseau de calcul MAC_RES comprend notamment un circuit de calcul de moyenne ou de maximum, noté POOL, permettant de réaliser les calculs de couche de « Max Pool » ou de « Average Pool ». Un traitement de « Max pooling » d’une matrice d’entrée [I] génère une matrice de sortie [O] de taille inférieure à celle de la matrice d’entrée en prenant le maximum des valeurs d’une sous-matrice [X1] par exemple de la matrice d’entrée [I] dans le neurone de sortie O 00 . Un traitement de « average pooling » calcule la valeur moyenne de l’ensemble des neurones d’une sous-matrice de la matrice d’entrée. Avantageusement, le réseau de calcul MAC_RES comprend notamment un circuit de calcul d’une fonction d’activation noté ACT, généralement utilisée dans les réseaux de neurones convolutionnels. La fonction d’activation g(x) est une fonction non-linéaire, comme une fonction ReLu par exemple. Pour simplifier la description du premier mode de réalisation de l’invention, on se limitera dans ce qui suit à la description de la solution avec une seule unité de calcul PE correspondant à un seul groupe d’unités de calcul et un seul canal de sortie. Les données d’entrée x ij reçues par une couche en cours de calcul constituent le premier opérande de l’opération MAC réalisée par l’unité de calcul PE. Les poids synaptiques w ij connectés à une couche en cours de calcul constituent la seconde opérande de l’opération MAC réalisée par l’unité de calcul PE. La illustre l’implémentation du circuit de gestion de flux CGF mettant à profit la faible densité en valeurs non-nulles pour les données xij pour limiter le nombre de cycles de calcul d’une somme pondérée. Le circuit de calcul CALC comprend une première mémoire de données MEM_A pour stocker le premier ensemble de données correspondant aux données d’entrée x ij ; une seconde mémoire de données MEM_B (correspondant à MEM_POIDS 0 ) pour stocker le second ensemble de données correspondant aux poids synaptiques w ij ; et une unité de calcul PE 0 pour réaliser le calcul d’une somme des données d’entrée x ij pondérée par les poids synaptiques w ij . Le circuit de calcul CALC comprend en outre un circuit de gestion de flux CGF configuré pour distribuer à chaque cycle une donnée d’entrée xij non-nulle provenant de la première mémoire de données MEM_A vers l’unité de calcul PE afin de ne pas réaliser les opérations de multiplication par des données d’entrée nulles. De plus, le circuit de gestion de flux CGF est configuré pour générer au moins un indicateur de saut selon le nombre de données nulles sautées entre deux données x ij non nulles distribuées successivement. Le ou les indicateurs de saut permettent de générer alors une nouvelle séquence de distribution comprenant uniquement des données non-nulles. Plus généralement, les indicateurs de saut sont utilisés pour synchroniser la distribution des poids synaptiques à partir de la seconde mémoire MEM_B pour réaliser la multiplication d’une donnée d’entrée x ij avec le poids synaptique w ij correspondant. A titre d’exemple, les données d’entrée d’une matrice d’entrée [I] dans la mémoire externe MEM_A sont rangées tel que tous les canaux pour un même pixel de l’image d’entrée sont disposés séquentiellement. Par exemple, si la matrice d’entrée est une image matricielle de taille NxN composée de 3 canaux d’entrée de couleurs RGB ( R ed, G reen, B lue en anglais) les données d’entrée x i,j sont rangées de la manière suivante : x 00R x 00G x 00B , x 01R x 01G x 01B , x 02R x 02G x 02B , …, x 0(N-1)R x 0(N-1)G x 0(N-1)B x 10R x 10G x 10B , x 11R x 11G x 11B , x 12R x 12G x 12B , …, x 1(N-1)R x 1(N-1)G x 1(N-1)B x 20R x 20G x 20B , x 21R x 21G x 21B , x 22R x 22G x 22B , …, x 2(N-1)R x 2(N-1)G x 2(N-1)B x (N-1)0R x (N-1)0G x (N-1)0B , x (N-1)1R x (N-1)1G x (N-1)1B , …, x (N-1) (N-1)R x (N-1) (N-1)G x (N-1) (N-1)B La seconde mémoire de données MEM_B (correspondant à MEM_POIDS 0 ) est connectée à une mémoire tampon de poids BUFF_B pour stocker un sous-ensemble des poids w ij provenant de la mémoire MEM_B. Le circuit calculateur comprend un premier circuit séquenceur SEQ1 apte à commander la lecture dans la première mémoire de données MEM_A selon une première séquence d’adressage prédéfinie. La première séquence d’adressage constitue une séquence brute avant le traitement de parcimonie objet de l’invention. De même, le circuit calculateur comprend en outre un second circuit séquenceur SEQ2 apte à commander la lecture dans la deuxième mémoire de données MEM_B selon une seconde séquence d’adressage prédéfinie. Le circuit calculateur comprend en outre un circuit de distribution DIST associé à chaque unité de calcul PE pour lui délivrer successivement une nouvelle paire de première et seconde données associées à la sortie du circuit de gestion de flux CGF. Le circuit de gestion de flux CGF reçoit les données x ij sous forme de vecteurs V=(a1, a2, a3, … aL) composés de L données avec L un entier strictement positif. A titre d’exemple, on prend L=4, ainsi le circuit de gestion de flux CGF reçoit et traite dans un premier temps un premier vecteur V 1 =( x 00R x 00G x 00B , x 01R ), puis un deuxième vecteur V 2 =( x 01G x 01B , x 02R x 02G ) et ainsi de suite jusqu’au dernier vecteur V k =( x (N-1) (N-2)B , x (N-1) (N-1)R , x (N-1) (N-1)G , x (N-1) (N-1)B ). Pour simplifier l’illustration des modes de réalisation de l’invention nous allons considérer la séquence suivante : V 1 =( x 1, x 2 , x 3 , x 4 ), V 2 =( x 5, x 6 , x 7 , x 8 ), V 3 =( x 9, x 10 , x 11 , x 12 ) … V k =( x 4(k-1)+1, x 4(k-1)+2 , x 4(k-1)+3 , x 4(k-1)+4 ) avec k un entier naturel non nul. Le circuit de gestion de flux CGF comporte une première mémoire tampon BUFF_A pour stocker tout ou une partie des premières données délivrées séquentiellement par le premier circuit séquenceur SEQ1 et une seconde mémoire tampon BUFF_B pour stocker tout ou partie des secondes données délivrées séquentiellement par le second circuit séquenceur SEQ2. Le circuit de gestion de flux CGF comprend en outre un premier circuit de traitement CT_A pour traiter un vecteur V1 stocké dans la mémoire tampon BUFF_A et un second circuit de traitement CT_B pour traiter les coefficients synaptiques stockés dans la mémoire tampon BUFF_B. La mémoire tampon BUFF_A fonctionne selon un principe « premier entré premier sorti » ou FIFO acronyme de l’expression anglaise « First In First Out ». Le premier circuit de traitement CT_A comprend un premier circuit de contrôle des pointeurs ADD1 de lecture et d’écriture de la première mémoire tampon BUFF_A. Le premier circuit de traitement CT_A réalise les opérations suivantes pour obtenir une nouvelle séquence ne comprenant pas de données d’entrée x i nulles. Premièrement le premier circuit de traitement CT_A réalise une analyse des premières données x i délivrées par ledit premier circuit séquenceur SEQ1 sous forme de vecteurs pour rechercher les premières données nulles et définir un premier indicateur de saut is1 entre deux données non nulles successives. Deuxièmement, le premier circuit de traitement CT_A est configuré pour commander le transfert vers le circuit de distribution DIST d’une première donnée lue dans la première mémoire tampon BUFF_A de données en fonction dudit premier indicateur de saut is1. Le second circuit de traitement CT_B comprend symétriquement un second circuit de contrôle des pointeurs ADD2 de lecture et d’écriture de la seconde mémoire tampon. Le circuit de traitement CT_B est apte à commander le transfert vers le circuit de distribution d’une seconde donnée lue dans la deuxième mémoire tampon BUFF_B de données en fonction dudit premier indicateur de saut is1. Avantageusement, il est envisageable pour un mode de réalisation particulier que le second circuit de traitement CT_B réalise des opérations d’analyse des secondes données (dans ce cas il s’agit des poids w i ) délivrées par le second circuit séquenceur SEQ2 pour rechercher les secondes données nulles et définir un second indicateur de saut is2 entre deux données non nulles successives. De plus le second circuit de traitement CT_B commande le transfert vers le circuit de distribution d’une seconde donnée lue dans la seconde mémoire tampon BUFF_B de données en fonction desdits premier et second indicateurs de saut is1 et is2. Dans ce cas, l’ensemble du premier et du second circuit de traitement CT_B et CT_A est apte à commander le transfert vers le circuit de distribution DIST d’une seconde donnée lue dans la seconde mémoire tampon de données en fonction desdits premier et second indicateurs de saut. La illustre un premier mode de réalisation de l’invention dans lequel l’analyse de parcimonie est réalisée uniquement sur la première séquence d’adressage des premières données d’entrée xi pour générer un premier indicateur de saut is1. Le transfert vers le circuit de distribution d’une première donnée x i lue dans la première mémoire tampon MEM_A de données est réalisé en fonction du premier indicateur de saut is1. Le transfert vers le circuit de distribution DIST d’une seconde donnée w i lue dans la deuxième mémoire tampon BUFF_B de données est réalisée en fonction du premier indicateur de saut is1. On parle ici d’une disposition maitre-esclave car la nouvelle séquence de distribution de l’ensemble des secondes données est dépendante du premier indicateur de saut is1 résultant de l’analyse de la séquence d’adressage des premières données d’entrée x i . Le premier circuit de traitement CT_A comprend un étage de gestion de la parcimonie par données SPAR2 configuré pour générer un signal de saut par mot mot_0 entre deux données non nulles successives à destination des deux circuits de contrôle des pointeurs ADD1 et ADD2. Le signal de saut par mot mot_0 constitue une première composante du premier indicateur de saut is1. Avantageusement, le circuit de gestion de flux CGF comprend en amont de la première mémoire tampon BUFF_A un étage de gestion de parcimonie par vecteur SPAR1 configuré pour générer un signal de saut par vecteur vect_0 à destination des deux circuits de contrôle des pointeurs ADD1 et ADD2 lorsqu’un vecteur V1 est nul. Le signal de saut par vecteur vect_0 constitue une seconde composante du premier indicateur de saut is1. L’étage de gestion de parcimonie par vecteur SPAR1 est configuré pour traiter les vecteurs de données V fournis l’un à la suite de l’autre par la mémoire de données MEM_A en détectant si un vecteur V=(x 1 , x 2 , x 3 , x 4 ) est un vecteur nul dans le sens où x 1 = x 2 = x 3 = x 4 = 0. Lorsqu’un vecteur nul est détecté par le premier étage de gestion de parcimonie par vecteur SPAR1, ce dernier génère un signal de saut par vecteur vect_0 vers le générateur d’adresse ADD1 pour ne pas écrire le vecteur nul détecté dans la mémoire tampon BUFF_A et passer au traitement du vecteur suivant. On obtient ainsi dans la mémoire BUFF_A un empilement de vecteurs V de quatre données x i comprenant au moins une donnée non nulle. Pour réaliser la détection d’un vecteur nul il est possible de calculer pour chaque donnée x 1 , x 2 , x 3 , x 4 du vecteur en cours de traitement un indicateur de donnée nulle à l’intérieur de l’étage de gestion de parcimonie par vecteur SPAR1 ou préalablement dans la chaine de flux de données. Pour chaque donnée x 1 , x 2 , x 3 , x 4 du vecteur V, l’indicateur de donnée nulle peut prendre la forme d’un bit additionnel concaténé au mot de bits constituant la donnée elle-même. Sans perte de généralité, dans les illustrations présentées le calcul de l’indicateur de donnée nulle est une opération interne au circuit de gestion de parcimonie par vecteur SPAR1. Mais il est possible de calculer et d’apparier à chaque donnée d’entrée x i , les indicateurs de donnée nulle à l’extérieur du circuit de contrôle de flux CGF. A titre d’exemple, si la donnée x 1 est codée sur l bits, on désigne par x1 (l+1) le bit de donnée nulle de la donnée x 1 . L’indicateur de donnée nulle x1 (l+1) a un premier état N0 correspondant à une donnée nulle et un second état N1 correspondant à une donnée non-nulle. Le second étage de gestion de parcimonie par données SPAR2 est configuré pour traiter successivement les vecteurs stockés dans la mémoire tampon BUFF_A en distribuant successivement et à chaque cycle de calcul une donnée non-nulle du vecteur en cours de traitement. Le second étage de gestion de parcimonie par données SPAR2 assure une deuxième fonction consistant en la génération d’un signal de saut par mot mot_0 entre deux données non nulles successives. La combinaison du signal de saut par vecteur vect_0 et du signal de saut par mot mot_0 forme le premier indicateur de saut is1. Le premier indicateur de saut is1 permet au système d’extraire une nouvelle séquence d’adressage sans données nulles au générateur d’adresse ADD1. Le générateur d’adresse ADD1 commande ainsi le transfert vers le circuit de distribution d’une première donnée lue dans la première mémoire tampon BUFF_A de données en fonction du premier indicateur de saut is1 vers l’unité de calcul PE. De plus, la propagation de l’indicateur de saut is1 vers le générateur d’adresse ADD2 associé au circuit de traitement CT_B permet de synchroniser la distribution des poids w ij vers l’unité de calcul PE à partir de la mémoire tampon BUFF_B. L’étage de gestion de la parcimonie par données SPAR2 assure une autre fonction consistant en la génération d’un signal de déclenchement de lecture du vecteur suivant suiv_lect lorsque toutes les données non-nulles du vecteur V ont été envoyées à l’organe de distribution DIST. Le signal suiv_lect est propagé au générateur d’adresse ADD1 pour déclencher le traitement du vecteur suivant de la mémoire tampon BUFF_A suite à la fin de l’analyse du vecteur en cours de traitement. La solution proposée permet ainsi de minimiser le nombre de cycles de calcul réalisés pour calculer une somme pondérée en évitant de réaliser des multiplications avec des données x ij nulles suite à la détection de ces données nulles, et la synchronisation de la distribution des poids w ij au moyen d’au moins une information de saut de lecture. La solution décrite selon l’invention est symétrique dans le sens où il est possible d’intervertir les données et les poids dans le mécanisme de détection et de synchronisation. Autrement dit, il est possible d’intervertir la notion de maitre-esclave entre les données x i et les poids w i . Ainsi, il est possible de détecter les poids w ij nuls et de synchroniser la lecture des données x i selon une information de saut calculée à partir du traitement des poids w i . La représente un exemple d’une implémentation de l’étage de gestion de parcimonie par vecteur et de l’étage de gestion de parcimonie par données, appartenant au circuit de gestion de flux selon l’invention. Nous illustrons l’exemple où un vecteur V comprend 4 valeurs. L’étage de gestion de parcimonie par vecteur SPAR 1 comprend 4 circuits de détection de donnée nulle MNULL1, MNULL2, MNULL3 et MNULL4, chacun étant destiné à calculer l’indicateur de donnée nulle xi ( l+1) d’une donnée appartenant au vecteur V reçu par le circuit de gestion de flux CGF. A titre d’exemple, MNULL1 reçoit la donnée x1 à son entrée et génère à sa sortie x1 concaténé avec un bit indicateur de donnée nulle x1 (l+1) =1 si x1 est nul et x1 (l+1) =0 si x1 est non-nul. Un circuit de détection de donnée nulle MNULL est réalisable avec des portes logiques pour former un circuit logique combinatoire. Dans l’exemple de la , les circuits de détection de donnée nulle ont été intégrés dans l’étage de gestion de parcimonie par vecteur SPAR1 mais cela n’est pas limitatif car il est possible de réaliser le calcul de l’indicateur de donnée nulle x1(l+1) en amont du circuit de gestion de flux CGF et même en amont de la mémoire de stockage MEM_A. De plus, l’étage de gestion de parcimonie par vecteur SPAR 1 comprend un registre REG1 qui stocke le vecteur en cours d’analyse par SPAR1 sous la forme suivante V1= (x1 (l+1 ) x1, x2 (l+1) x2, x3 (l+1) x3, x4 (l+1) x4). L’étage de gestion de parcimonie par vecteur SPAR 1 comprend en outre un circuit logique de détection de vecteur nul VNULL1 ayant 4 entrées pour recevoir l’ensemble des indicateurs de donnée nulle x i(l+1) et une sortie pour générer le signal de saut par vecteur vect_0 indiquant si le vecteur V est nul ou non. On entend par un vecteur nul, un vecteur V1= (x1 (l+1) x1, x2 (l+1) x2, x3 (l+1) x3, x4 (l+1) x4) tel que x1=x2=x3=x4=0 ou en d’autre terme, un vecteur tel que l’ensemble des indicateurs de valeurs nuls xi (l+1) appartenant audit vecteur sont au premier état N1. Ainsi, le signal de saut par vecteur vect_0 commande le premier circuit de gestion de mémoire ADD1 pour ne pas écrire dans la mémoire tampon BUFF_A les vecteurs nuls provenant de la première mémoire MEM_A. Ainsi, le premier étage de gestion de parcimonie SPAR_1 réalise une première étape de filtrage pour réaliser des sauts de lecture par vecteurs de 4 données lorsqu’un vecteur nul est détecté. En régime stationnaire, la mémoire tampon BUFF_A stocke alors les données rangées par vecteurs V successifs, chacun comprenant au moins une donnée non nulle. Le passage à la lecture d’un vecteur à un vecteur suivant à partir de la mémoire tampon BUFF_A est commandé par le circuit de gestion de mémoire ADD1, et l’ordre de la lecture des vecteurs stockés est organisé selon le principe d’une FIFO « premier entrée premier sortie ». D’autre part, l’étage de gestion de parcimonie par donnée SPAR2 comprend un registre REG2 qui stocke le vecteur en cours de traitement par SPAR2. L’étage de gestion de parcimonie par donnée SPAR2 est configuré pour traiter successivement les vecteurs V provenant de la mémoire tampon BUFF_A de la manière suivante : détecter la position de la première donnée non-nulle appartenant au vecteur en cours de traitement au moyen du bit indicateur de donnée nulle ; commander la distribution de ladite donnée non-nulle détectée à l’unité de calcul PE ; mettre au premier état N0 l’indicateur de donnée nulle de la donnée d’entrée distribuée dans le vecteur V en cours de traitement. calculer et générer un signal de saut par mot mot_0 entre deux données non nulles successives, Pour un vecteur V en cours d’analyse, les étapes décrites précédemment sont réitérées par SPAR2 jusqu’à ce que tous les indicateurs de donnée nulle du vecteur soient à l’état N0 indiquant que toutes les données non nulles du vecteur V ont été distribuées et déclenchant alors le traitement du vecteur suivant à partir de BUFF_A. L’étage de gestion de la parcimonie par données SPAR2 assure cette fonction en générant le signal de déclenchement de lecture du vecteur suivant suiv_lect lorsque tous les indicateurs de donnée nulle du vecteur sont à l’état N0. Pour réaliser les différentes fonctions détaillées précédemment, l’étage de gestion de parcimonie par donnée SPAR2 comprend un étage encodeur prioritaire ENC configuré pour réaliser d’une façon itérative la génération d’un signal de commande de distribution c1 correspondant à l’indice de la première donnée d’entrée non-nulle du vecteur V1 . En effet, l’étage encodeur ENC reçoit en entrée les indicateurs de donnée nulle x i( l+1) du vecteur en cours d’analyse pour générer ledit indice. Puis le signal de commande de distribution c1 est propagé comme entrée au circuit de gestion de mémoire ADD1 pour la génération du second indicateur de saut mot_0 ; suivie de la mise au premier état N0 de l’indicateur de donnée nulle de la donnée d’entrée distribuée dans le vecteur V1 stocké dans le registre Reg2 suite à sa distribution . Le second étage de gestion de parcimonie par donnée SPAR2 comprend en outre un organe de distribution MUX commandé par le signal de commande de distribution c1. Un multiplexeur à 4 entrées recevant chacune une donnée x i du vecteur V et à une sortie peut être utilisé pour implémenter cette fonctionnalité. Le second étage de gestion de parcimonie par donnée SPAR2 comprend en outre un second circuit logique de détection de vecteur nul VNUL2 pour générer un signal de déclenchement de lecture du vecteur suivant suiv_lect lorsque tous les indicateurs de donnée nulle des données appartenant au vecteur V1 en cours de traitement sont au premier état N0 et commander la mémoire BUFF_A à travers le circuit de gestion de mémoire ADD1 pour déclencher le traitement du vecteur suivant V2 par SPAR2 au prochain cycle. Simultanément pour chaque donnée x ij non-nulle distribuée, les deux indicateurs de saut mot_0 et vect_0 forment les deux composantes du premier indicateur de saut is1. Ce dernier est propagé vers le second circuit de gestion de mémoire ADD2 qui commande la lecture de la mémoire tampon BUFF_B. Cela permet de distribuer le poids w ij associé à la donnée distribuée x ij selon la séquence de lecture initialement prévue par les séquenceurs SEQ1 et SEQ2. A titre d’illustration, on considère la séquence de données suivante composée des vecteurs successifs V 1 =( x 1 =4 , x 2 =0, x 3 =0, x 4 =2), V 2 =( x 5 =0 , x 6 =0, x 7 =0 , x 8 =0 ), V 3 =( x 9 =0 , x 10 =1, x 11 =0 , x 12 =3 ). La première séquence d’adressage initialement prédéfinie qui régit la lecture des données à partir de MEM_A est la suivante : x 1, x 2 , x 3 , x 4 , x 5, x 6 , x 7 , x 8 , x 9, x 10 , x 11 , x 12 . La seconde séquence d’adressage initialement prédéfinie qui régit la lecture des poids à partir de MEM_B est w 1, w 2 , w 3 , w 4 , w 5, w 6 , w 7 , w 8 , w 9, w 10 , w 11 , w 12 . La nouvelle séquence d’adressage qui régit la lecture des données à partir de MEM_A après le traitement par le circuit de gestion de parcimonie est : x 1, x 4 , x 10 , x 12 et pour les poids w 1, w 4 , w 10 , w 12 . L’indicateur de saut is1=mot_0+vect_0 prend successivement les valeurs suivantes : 1 er cycle : is1 = mot_0 + vect_0 x 4 = 0+0=0 2 ème cycle : is1 = mot_0+vect_0 = 2+0x4=2 3 ème cycle : is1 = mot_0+vect_0 = 1+1x4=5 4 ème cycle : is1 = mot_0+vect_0 = 1+0x4=1 Dans certains modes de réalisation ayant pour application un réseau de neurones convolutionnel, il est possible d’avoir un séquencement initial pour les données et les poids où plusieurs poids sont associés à la même donnée. En effet, pour une convolution nxn , une donnée d’entrée x i est multipliée par n poids différents de la matrice de poids. Ainsi un saut unitaire dans l’indicateur de saut is1 dans la première séquence des données x i correspond à n sauts dans la seconde séquence d’adressage des poids w i . La représente un deuxième mode de réalisation du circuit de gestion de flux des données CGF’ selon l’invention. La spécificité de ce mode consiste en la gestion de parcimonie conjointe du premier ensemble de données d’entrée (il s’agit dans le cas illustré des données provenant d’une couche dans le réseau xi) et du second ensemble de données d’entrée (il s’agit dans le cas illustré des poids ou coefficients synaptiques wi ). Similairement au premier mode de réalisation, le circuit calculateur CALC sur la comprend une première mémoire MEM_A pour stocker les premières données xi et un premier séquenceur SEQ1 pour commander la lecture de la mémoire MEM_A selon une première séquence prédéfinie. Similairement au premier mode de réalisation, le circuit calculateur CALC sur la comprend une deuxième mémoire MEM_B pour stocker les deuxièmes données wi et un deuxième séquenceur SEQ2 pour commander la lecture de la mémoire MEM_B selon une deuxième séquence prédéfinie. L’avantage du deuxième mode de réalisation est la gestion de la faible densité en valeurs non-nulles simultanée des deux ensembles de données constituant les opérandes des multiplications pour une somme pondérée. Ainsi, le résultat de compression de la séquence de distribution des données au cours du temps est plus important que dans celui du premier mode de réalisation. En effet, dans la disposition maitre–esclave décrite précédemment, on tient compte de la faible densité en valeurs non-nulles uniquement pour un des deux ensembles de données. Dans le second mode de réalisation, décrit ultérieurement, le circuit de gestion de flux CGF’ traite les deux ensembles simultanément. Pour cela, à partir de la première et la seconde séquence de distribution initiale fournie par SEQ1 et SEQ2, chaque donnée x i est appariée avec le poids correspondant w i pour former un couple (x i , w i ). Les vecteurs V’ 1 , V’ 2, V’ 3, .. V’ k correspondent dans ce cas à des vecteurs de couples V’ 1 =( (x 1 ,w 1 ), (x 2 ,w 2 ), (x 3 ,w 3 ), (x 4 ,w 4 )), V’ 2 =( (x 5 ,w 5 ), (x 6 ,w 6 ), (x 7 ,w 7 ), (x 8 ,w 8 )), V’ 3 =( (x 9 ,w 9 ), (x 10 ,w 10 ), (x 11 ,w 11 ), (x 12 ,w 12 )) et ainsi de suite. Dans le second mode de réalisation, le second circuit de traitement CT_B est apte à analyser les secondes données délivrées par ledit second circuit séquenceur pour rechercher les secondes données nulles et définir un second indicateur de saut entre deux données non nulles successives, et à commander le transfert vers le circuit de distribution d’une seconde donnée lue dans la seconde mémoire tampon de données en fonction desdits premier et second indicateurs de saut . Ainsi, le second circuit de traitement CT_B est apte à commander le transfert vers le circuit de distribution d’un poids w i lu dans la seconde mémoire tampon de données BUFF_B en fonction du premier et du second indicateurs de saut is1 et is2 . De même pour le premier circuit de traitement CT_A, la commande du transfert des données x i vers une unité de calcul PE est réalisée en fonction du premier et du second indicateurs de saut is1 et is2 . L’étage de gestion de parcimonie par vecteur SPAR1 comprend 4 circuits de détection de couple nul CNULL1, CNULL2, CNULL3 et CNULL4, chacun étant destiné à calculer l’indicateur de couple nul CP1 ( l+1) =(x 1 ,w 1 ) ( l+1) d’un couple de données appartenant au vecteur V’ reçu par le circuit de gestion de flux CGF’. On entend par couple nul, chaque couple ayant au moins une composante nulle. A titre d’exemple, si CNULL1 reçoit le couple (x 1 =1,w 1 =0) (ou (x 1 =0,w 1 =1) ) à son entrée il génère à sa sortie le couple (x 1 ,w 1 ) concaténé avec un bit indicateur de couple nul CP1 ( l+1) =(x 1 ,w 1 ) ( l+1) à un premier état logique N’0. D’autre part, si CNULL1 reçoit le couple (x 1 =1,w 1 =2) à son entrée il génère à sa sortie le couple (x 1 ,w 1 ) concaténé avec un bit indicateur de couple nul CP1 ( l+1) =(x 1 ,w 1 ) ( l+1) à un deuxième état logique N’1 . Alternativement, il est possible d’apparier l’indicateur de couple nul à chacune des données composantes du couple pour permettre un stockage dans des mémoires distinctes des données tel que chaque première ou deuxième donnée soit concaténée avec un bit indicateur de couple nul associé. Un circuit de détection de couple nul CNULL est réalisable avec des portes logiques pour former un circuit logique combinatoire. Dans l’exemple de la les circuits de détection de couple nul ont été intégrés dans l’étage de gestion de parcimonie par vecteur SPAR1 mais cela n’est pas limitatif car il est possible de réaliser le calcul de l’indicateur de donnée nulle x1(l+1) en amont du circuit de gestion de flux CGF’ et même en amont de la première et de la seconde mémoire de stockage MEM_A et MEM_B. Le traitement de parcimonie par vecteur de couple réalisé par l’étage de gestion de parcimonie par vecteur SPAR1 est réalisé d’une manière similaire à celle du premier mode de réalisation. La différence est que le test est réalisé sur les indicateurs de couple nul dans le second mode de réalisation. Ainsi, seulement les vecteurs comprenant au moins un couple ayant deux composantes non-nulles sont transférés aux mémoires tampon BUFF_A et BUFF_B. Pour la réalisation des mémoires tampons de type FIFO, il est possible de stocker les données x i et les poids w i sous forme de couple appartenant à un vecteur de couples dans une mémoire tampon commune MEM_AB. Il est aussi envisageable (comme illustré ici) de garder deux mémoires tampons séparées MEM_A et MEM_B dont l’adressage des pointeurs de lecture et d’écriture est géré respectivement par le premier et le second circuit de contrôle de mémoire ADD1 et ADD2. Dans le mode de réalisation illustré, les circuits de traitement CT_A et CT_B se partagent un registre REG2’ pour recevoir un vecteur de couple en cours d’analyse et se partagent un circuit encodeur prioritaire ENC’ et un multiplexeur MUX’ pour distribuer successivement des couples n’ayant aucune composante nulle. Au niveau des circuits de traitement CT_A et CT_B, le même principe du premier mode de réalisation est appliqué aux couples de données et aux indicateurs de couple nul préalablement calculés. La nouvelle séquence obtenue dépend alors d’une combinaison du premier indicateur de saut is1 lié à la première séquence des premières données (provenant de MEM_A) et du second indicateur de saut is2 lié à la seconde séquence des secondes données (provenant de MEM_B). Pour réaliser les différentes fonctions détaillées précédemment, l’étage encodeur prioritaire ENC’ est configuré pour réaliser d’une façon itérative la génération d’un signal de commande de distribution c’1 correspondant à l’indice du premier couple ayant deux données non-nulles du vecteur V’i en cours de traitement. En effet, l’étage encodeur ENC’ reçoit en entrée l’indicateur de couple nul CP1 ( l+1) =(x 1 ,w 1 ) ( l+1) du vecteur en cours d’analyse pour générer ledit signal de commande de distribution c’1. Puis le signal de commande de distribution c’1 est propagé comme entrée au circuit de gestion de mémoire ADD1 pour la génération du second indicateur de saut mot_0 ; suivie de la mise au premier état N’0 de l’indicateur de couple nul CP1 ( l+1) =(x 1 ,w 1 ) ( l+1) de la donnée d’entrée distribuée dans le vecteur V’ i stocké dans le registre Reg2’ suite à sa distribution . Le multiplexeur MUX’ est commandé par le signal de commande de distribution c’1 . Les circuits de traitement CT_A et CT_B se partagent un circuit logique de détection de vecteur nul VNUL2 pour générer un signal de déclenchement de lecture du vecteur suivant suiv _lect lorsque tous les indicateurs de couple nul CPi ( l+1) =(x i ,w i ) ( l+1) du vecteur en cours de traitement dans le registre REG2’ sont au premier état N0’. Nous avons réalisé ainsi un circuit de traitement de la distribution des données et des poids basé sur l’analyse non seulement des données mais aussi des poids permettant de réduire encore plus la taille de la séquence de distribution des données vers les unités de calcul PE en évitant de réaliser des multiplications par des données nulles mais aussi par des poids nuls. Selon une variante du mode de réalisation décrit sur la , il est possible de partir d’une séquence unique des couples [données, poids] déjà appariés. Ainsi, le circuit de gestion de flux CGF’ comprend un circuit de traitement commun CT_AB car il y a une seule séquence conjointe à traiter. Dans cette variante, un seul indicateur de saut est généré par le circuit de traitement de couple. Cet indicateur de saut conjoint dans la séquence de distribution des couples [données, poids] permet d’éviter la distribution de couple comprenant au moins une valeur nulle. Il est possible de réaliser cette variante en utilisant deux circuits de gestion de mémoire ADD1 et ADD2 générant les mêmes adresses ou alternativement un circuit de gestion de mémoire commun. L’avantage de cette variante est une réduction de la complexité et de la surface du circuit de gestion de flux CGF’ par rapport au mode de réalisation de la . La illustre un troisième mode de réalisation du calculateur selon l’invention permettant de réduire la taille des mémoires tampons du circuit de gestion de flux en tenant compte de la multiplication d’une même donnée xi par une pluralité de poids (ou coefficients synaptiques). En effet, lorsque le circuit calculateur est dédié au calcul d’un réseau de neurones convolutionnel, de taille pxp, avec p>1, une même donnée est utilisée dans une opération de multiplication avec p poids différents ; ainsi dans la séquence initiale la donnée x i concernée est recopiée p fois lorsqu’on l’associe à p poids différents. Le problème que pose ce mécanisme consiste à l’augmentation de la taille de la mémoire tampon MEM_A et donc de la surface occupée par le circuit intégré comprenant le circuit calculateur. Le mode de réalisation illustré sur la vise à surmonter cet inconvénient. En effet, le circuit de gestion de flux est réalisé selon l’architecture suivante : au lieu d’une mémoire tampon fonctionnant en FIFO et stockant les couples [xi, wi], on dispose d’une mémoire tampon fonctionnant en FIFO (noté ici BUFF_B) dédiée uniquement aux poids et d’une mémoire tampon (noté ici BUFF_A) de données séparés. Le circuit de gestion de flux conjoint des données et des poids dans le mode de réalisation décrit ne traite pas les données et les poids par couples. D’une part la mémoire tampon de données BUFF_A est une mémoire double port dont le pointeur d’écriture s’incrémente de 1 tous les p cycles modulo la taille de la mémoire tampon BUFF_A. D’autre part la mémoire tampon FIFO notée BUFF_B stockant les poids stocke également les indicateurs de couples nuls préalablement calculés d’une façon similaire au deuxième mode de réalisation. On rappelle pour chaque couple [x i ,w i ] que si au moins l’une des deux composantes du couple est nulle ledit couple est considéré comme un couple nul. Un vecteur est considéré comme un vecteur nul si tous ses couples composants sont nuls selon la définition précédente. L’écriture des données x i dans la mémoire tampon BUFF_A est réalisée ainsi à un rythme p fois plus lent que l’écriture des poids w i . Comme précédemment, les poids sont groupés par vecteurs (de 4 poids w i par exemple), tandis que le tampon de données BUFF_A a une largeur de mot d’une donnée (il s’agit ici pour les données d’un vecteur de données x i unitaire). Lorsqu’un vecteur dans la mémoire tampon BUFF_B (de type FIFO) ne comprend que les poids de couples dont au moins une des composantes est nulle, le vecteur n’est pas chargé dans BUFF_B et le signal de saut par vecteur est généré d’une manière similaire aux autres modes de réalisation. La sélection des couples ayant deux composantes non-nulles est réalisée comme précédemment au moyen d’un encodeur prioritaire ENC avec un critère de choix basé sur les indicateurs de couples non-nuls, permettant ainsi de générer une nouvelle séquence de distribution des poids w i vers l’unité de calcul PE. Par ailleurs, la sélection des données à présenter à l’unité de calcul PE en face de chaque poids est faite en incrémentant le pointeur de lecture de la mémoire tampon de données BUFF_A de (1 + N ps )/p modulo la taille de la mémoire tampon BUFF_A avec N ps le nombre de poids sautés dans la nouvelle séquence, obtenu au moyen de l’encodeur prioritaire ENC. En effet, l’encodeur ENC sélectionne le poids du mot de sortie de la mémoire BUFF_B de poids auquel on additionne le nombre de vecteurs nuls sautés multiplié par 4 (si la largeur du vecteur analysé est de 4 couples). C’est ainsi qu’on retrouve la donnée qui était présente, en face du poids sélectionné en sortie, lors du chargement de ce poids dans la mémoire tampon BUFF_B de poids. Le fonctionnement de ce système est donc équivalent à la solution selon le second mode de réalisation avec un traitement conjoint des premières et des secondes données, mais avec une capacité de stockage plus faible pour la mémoire tampon BUFF_A. Circuit de calcul (CALC) pour calculer une somme pondérée d’un ensemble de premières données (A, X) par un ensemble de secondes données (B, W) comprenant : Au moins une première mémoire de données (MEM_A) pour stocker les premières données (A, X) ; Au moins une seconde mémoire de données (MEM_B) pour stocker les secondes données (B, W) ; Au moins une unité de calcul (PE) configurée pour réaliser le calcul de somme pondérée ; Au moins un premier circuit séquenceur (SEQ_A) apte à commander la lecture dans la première mémoire de données selon une première séquence d’adressage prédéfinie ; Au moins un second circuit séquenceur (SEQ_B) apte à commander la lecture dans la deuxième mémoire de données selon une seconde séquence d’adressage prédéfinie ; Au moins un circuit de distribution (DIST) associé à une unité de calcul pour lui délivrer successivement une nouvelle paire de première et seconde données associées ; Au moins un circuit de gestion de flux (CGF) comprenant : Une première mémoire tampon (BUFF_A) pour stocker tout ou une partie des premières données délivrées séquentiellement par ledit premier circuit séquenceur ; Une seconde mémoire tampon (BUFF_B) pour stocker tout ou partie des secondes données délivrées séquentiellement par ledit second circuit séquenceur ; un premier circuit de traitement (CT_A) comprenant un premier circuit de contrôle des pointeurs (ADD1) de lecture et d’écriture de la première mémoire tampon et étant apte : à analyser les premières données délivrées par ledit premier circuit séquenceur pour rechercher les premières données non-nulles et définir un premier indicateur de saut (is1) entre deux données non nulles successives, et à commander le transfert vers le circuit de distribution d’une première donnée lue dans la première mémoire tampon de données en fonction dudit premier indicateur de saut (is1) ; un second circuit de traitement (CT_B) comprenant un second circuit de contrôle des pointeurs (ADD2) de lecture et d’écriture de la seconde mémoire tampon et étant apte à commander le transfert vers le circuit de distribution d’une seconde donnée lue dans la deuxième mémoire tampon de données en fonction dudit premier indicateur de saut (is1). Circuit de calcul (CALC) selon la revendication 1 comprenant en outre : Une pluralité de circuits de détection de donnée nulle (MNUL1, MNUL2, MNUL3, MNUL4) étant chacun configuré pour apparier à chaque première donnée d’entrée (x 1 , x 2 , x 3 , x 4 ), un indicateur de donnée nulle (x 1 (l+1) ) ayant un premier état (N0) correspondant à une donnée nulle et un second état correspondant à une donnée non-nulle (N1) . Circuit de calcul (CALC) selon la revendication 1 ou 2 dans lequel : le premier circuit séquenceur (SEQ_A) est configuré pour délivrer les premières données par vecteurs (V1, V2) de N données successives, N étant un entier naturel non nul ; la première mémoire tampon (BUFF_A) est une mémoire apte à stocker des vecteurs de N données selon un principe « premier entré premier sorti ». le premier circuit de traitement (CT_A) comprend Un étage de gestion de parcimonie par donnée (SPAR2) destiné à recevoir les vecteurs (V1, V2) provenant de la première mémoire tampon (BUFF_A) et configuré pour générer un signal de saut par mot (mot_0) entre deux données non nulles successives à destination des deux circuits de contrôle des pointeurs (ADD1,ADD2) ; ledit signal de saut par mot (mot_0) formant une première composante du premier indicateur de saut (is1). Circuit de calcul (CALC) selon la revendication 3 dans lequel le premier circuit de traitement (CT_A) comprend en amont de la première mémoire tampon (BUFF_A) un étage de gestion de parcimonie (SPAR1) par vecteur configuré pour générer un signal de saut par vecteur (vect_0) à destination des deux circuits de contrôle des pointeurs (ADD1,ADD2) lorsqu’un vecteur (V1) est nul ; ledit signal de saut par vecteur (vect_0) formant une seconde composante du premier indicateur de saut (is1). Circuit de calcul (CALC) selon la revendication 4 dans lequel l’étage de gestion de parcimonie (SPAR1) par vecteur comprend un premier circuit logique de détection de vecteur nul (VNUL1) configuré pour générer, à partir des indicateurs de donnée nulle (x 1(l+1) ) , le signal de saut par vecteur (vect_0) lorsqu’un vecteur (V1) ne comprend que des données nulles . Circuit de calcul (CALC) selon l’une quelconque des revendications 3 à 5 dans lequel l’étage de gestion de parcimonie par donnée (SPAR2) comprend : Un registre (Reg2) pour recevoir un vecteur non-nul (V1) à la sortie de la première mémoire tampon (BUFF_A) ; Un étage encodeur prioritaire (ENC) configuré pour réaliser les opérations suivantes d’une façon itérative: la génération d’un signal de commande de distribution (c1) correspondant à l’indice de la première donnée d’entrée non-nulle du vecteur (V1) ; le premier circuit de contrôle des pointeurs (ADD1) étant configuré pour réaliser dans la même boucle d’itération : la génération du signal de saut par mot (mot_0) à partir du signal de commande de distribution (c1) ; et la mise au premier état (N0) de l’indicateur de donnée nulle (x1 (l+1) ) de la donnée d’entrée distribuée dans le vecteur (V1) stocké dans le registre (Reg2) suite à sa distribution ; Un second circuit logique de détection de vecteur nul (VNUL2) pour générer un signal de déclenchement de lecture du vecteur suivant (suiv_lect) lorsque tous les indicateurs de donnée nulle (x 1 (l+1) ) des données appartenant audit vecteur (V1) sont au premier état (N0). Circuit de calcul (CALC) selon la revendication 1, dans lequel le second circuit de traitement est apte : - à analyser les secondes données délivrées par ledit second circuit séquenceur pour rechercher les secondes données nulles et définir un second indicateur de saut (is2) entre deux données non nulles successives, et - à commander le transfert vers le circuit de distribution d’une seconde donnée lue dans la seconde mémoire tampon de données en fonction desdits premier et second indicateurs de saut (is1 , is2); et dans lequel le second circuit de traitement (CT_B) est apte à commander le transfert vers le circuit de distribution d’une seconde donnée lue dans la seconde mémoire tampon de données en fonction desdits premier et second indicateurs de saut (is1 , is2);. Circuit de calcul (CALC) selon la revendication 7 dans lequel le circuit de gestion de flux (CGF’) est configuré pour lire les données des deux mémoires (MEM_A, MEM_B) par vecteurs de N couples successifs selon la première et la seconde séquence d’adressage prédéfinie desdites données ((x 1, w 1 ), (x 2, w 2 ), (x 3, w 3 ), (x 4, w 4 )), N étant un entier naturel non nul ; le premier et second indicateur (is1,is2) de saut sont obtenus par une analyse desdits vecteurs tel que les deux données formant un couple distribué soient non-nulles. Circuit de calcul (CALC) selon la revendication 8 comprenant en outre : Une pluralité de circuits de détection de couple nul (CNUL1, CNUL2, CNUL3, CNUL4) étant chacun configuré pour apparier à chaque couple de première et seconde données d’entrées ((x 1, w 1 ), (x 2, w 2 ), (x 3, w 3 ), (x 4, w 4 )), un indicateur de couple nulle (CP1 l+1 ) ayant un premier état (N’0) correspondant à un couple comprenant au moins une donnée nulle et un second état (N’1) correspondant à un couple ne comprenant que des données non-nulles . Circuit de calcul (CALC) selon l’une des revendications 8 ou 9 dans lequel : L’ensemble formé par la première et la seconde mémoire tampon (BUFF_A, BUFF_B) est une mémoire apte à stocker des vecteurs de N couples selon un principe « premier entré premier sorti ». L’ensemble formé par le premier et le second circuit de traitement (CT_A, CT_B) comprend Un étage de gestion de parcimonie par donnée (SPAR2) destiné à recevoir les vecteurs (V’1, V’2) provenant de l’ensemble de la première et la seconde mémoire tampon (BUFF_A, BUFF_B) et configuré pour générer un signal de saut par mot (mot_0) entre deux couples successifs ayant deux données non nulles à destination des deux circuits de contrôle des pointeurs (ADD1, ADD2) ; ledit signal de saut par mot (mot_0) formant une première composante du premier indicateur de saut (is1) et du second indicateur de saut (is2) . Circuit de calcul (CALC) selon l’une quelconque des revendications 8 à 10 comprenant un étage de gestion de parcimonie par vecteur (SPAR1) en amont de la première et la seconde mémoire tampon (BUFF_A, BUFF,B), l’étage de gestion de parcimonie par vecteur (SPAR1) comprenant : Un premier circuit logique de détection de vecteur nul (VNUL1) configuré pour générer un signal de saut par vecteur (vect_0) lorsqu’un vecteur (V’1) ne comprend que des indicateurs de donnée nulle (CP1 l+1 ) au premier état (N’0) ; ledit signal de saut par vecteur (vect_0) formant une seconde composante du premier indicateur de saut (is1) et du second indicateur de saut (is2) . Circuit de calcul (CALC) selon l’une quelconque des revendications 9 à 11 dans lequel l’étage de gestion de parcimonie par couple (SPAR2) comprend : Un registre (Reg2’) pour recevoir un vecteur non-nul (V’1) à la sortie de la mémoire tampon (BUFF_A, BUFF_B) ; Un étage encodeur prioritaire (ENC’) configuré pour réaliser les opérations suivantes d’une façon itérative: La génération d’un signal de commande de distribution (c’1) correspondant à l’indice du premier couple ayant deux données non-nulles du vecteur (V’1) ; Au moins le premier ou le second circuit de contrôle des pointeurs (ADD1, ADD2) étant configuré pour réaliser dans la même boucle d’itération : la mise au premier état (N’0) de l’indicateur de donnée nulle (CP1 l+1 ) du couple de données d’entrée distribué dans le vecteur (V’1) stocké dans le registre (Reg2’), suite à sa distribution ; Un organe de distribution (MUX’) commandé par le signal de commande de distribution (c’1) ; Un second circuit logique de détection de vecteur nul (VNUL2) pour générer un signal de déclenchement de lecture du vecteur suivant (suiv_lect) lorsque tous les indicateurs de donnée nulle (CP1 l+1 ) des couples appartenant audit vecteur (V’1) sont au premier état (N’0). Circuit de calcul (CALC) selon l’une quelconque des revendications 1 à 6 destiné à calculer des données de sortie (O i , j ) d’une couche d’un réseau de neurones artificiels à partir de données d’entrée (x i,j ), le réseau de neurones étant composé d’une succession de couches étant chacune constituée d’un ensemble de neurones , chaque couche étant connectée à une couche adjacente via une pluralité de synapses associées à un ensemble de coefficients synaptiques (w i,j ) formant au moins une matrice de poids ([W] p,q ) ; le premier ensemble de données (A, X) correspondant aux données d’entrée (x i ) à un neurone de la couche en cours de calcul; le second ensemble de données (B, W) correspondant aux coefficients synaptiques (x i ) connectés audit neurone de la couche en cours de calcul; le circuit de calcul (CALC) comprenant : au moins un groupe d’unité de calcul (G j ), chaque groupe d’unité de calcul (G j ) comprenant une pluralité d’unités de calcul (PE k ) de rang k=1 à K avec K un entier strictement positif, une pluralité de secondes mémoires de données (MEM_B, MEM_POIDS) de rang k=1 à K pour stocker le second ensemble de données (B, W); chaque groupe d’unité de calcul (G j ) étant connecté à un circuit de gestion de flux (CGF) dédié comprenant en outre : une pluralité de secondes mémoires tampons (BUFF_B 0,1 ) de rang k=1 à K tel que chaque seconde mémoire tampon distribue à l’unité de calcul (PE k ) de même rang k les données d’entrée (B, W) provenant de la seconde mémoire de données de même rang k en fonction d’au moins le premier indicateur de saut (is1). Circuit de calcul (CALC) selon l’une quelconque des revendications 1 à 6 destiné à calculer des données de sortie (O i , j ) d’une couche d’un réseau de neurones artificiels à partir de données d’entrée (x i,j ), le réseau de neurones étant composé d’une succession de couches étant chacune constituée d’un ensemble de neurones , chaque couche étant connectée à une couche adjacente via une pluralité de synapses associées à un ensemble de coefficients synaptiques (w i,j ) formant au moins une matrice de poids ([W] p,q ) ; le premier ensemble de données (A, W) correspondant aux coefficients synaptiques (w i ) connectés audit neurone de la couche en cours de calcul le second ensemble de données (B, X) correspondant aux données d’entrée (x i ) d’un neurone de la couche en cours de calcul; le circuit de calcul (CALC) comprenant : au moins un groupe d’unité de calcul (G j ), chaque groupe d’unité de calcul (G j ) comprenant une pluralité d’unités de calcul (PE k ) de rang k=1 à K avec K un entier strictement positif, une pluralité de premières mémoires de données (MEM_A) de rang k=1 à K pour stocker le premier ensemble de données (A, W) ; Une pluralité de circuit de gestion de flux (CGF) de rang k=1 à K, chacun étant configuré tel que pour chaque unité de calcul (PE k ) de rang k appartenant à un groupe d’unité de calcul (G j ) : le circuit de gestion de flux de rang k est configuré pour distribuer les coefficients synaptiques non-nuls provenant de la première mémoire de données de même rang k vers l’unité de calcul de même rang k.