FR2757973A1 - Processeur de traitement matriciel - Google Patents

Processeur de traitement matriciel Download PDF

Info

Publication number
FR2757973A1
FR2757973A1 FR9616342A FR9616342A FR2757973A1 FR 2757973 A1 FR2757973 A1 FR 2757973A1 FR 9616342 A FR9616342 A FR 9616342A FR 9616342 A FR9616342 A FR 9616342A FR 2757973 A1 FR2757973 A1 FR 2757973A1
Authority
FR
France
Prior art keywords
bits
calculation
calculation unit
units
processor
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
FR9616342A
Other languages
English (en)
Other versions
FR2757973B1 (fr
Inventor
Jose Sanches
Michel Harrand
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
STMicroelectronics SA
Original Assignee
SGS Thomson Microelectronics SA
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by SGS Thomson Microelectronics SA filed Critical SGS Thomson Microelectronics SA
Priority to FR9616342A priority Critical patent/FR2757973B1/fr
Priority to US08/994,953 priority patent/US5987488A/en
Publication of FR2757973A1 publication Critical patent/FR2757973A1/fr
Application granted granted Critical
Publication of FR2757973B1 publication Critical patent/FR2757973B1/fr
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Computational Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Theoretical Computer Science (AREA)
  • Computing Systems (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Image Processing (AREA)
  • Complex Calculations (AREA)

Abstract

L'invention concerne un processeur de calcul matriciel (1) comportant une unité de contrôle (2, 3) et une mémoire de donnée (4), et une pluralité d'unités de calcul (6 à 14), ladite pluralité d'unités de calcul (6 à 14) étant contrôlée par l'unité de contrôle (2, 3) par l'intermédiaire d'un bus de commande (16) composé: d'un premier groupe de fils relié à la pluralité d'unités de calcul (6 à 14) convoyant une instruction (19) commune à la pluralité d'unités de calcul (6 à 14); et d'une pluralité de deuxièmes groupes d'au moins un fil, chacun étant connecté respectivement à l'une de la pluralité d'unités de calcul (6 à 14), convoyant un complément d'instruction (20) spécifique à chaque unité de calcul de la pluralité d'unités de calcul (6 à 14).

Description

Processeur de traitement matriciel
L'invention a pour objet une processeur de traitement matriciel. Ce type de processeur est utilisable pour effectuer des calculs dans des applications faisant appel à des traitements matriciels notamment le traitement d'image.
Le traitement d'image numérique utilise de nombreuses opérations de calcul basées sur des matrices.
Classiquement, des filtres matriciels sont utilisés pour filtrer les images (suppression de bruit ou ajout de contraste). De plus, la transmission d'images numériques nécessite une compression des images. De nombreux codages existent à l'heure actuelle, par exemple MPEG pour la télévision ou H261 et H263 pour la vidéophonie. Tous ces codes de compression d'images ont la particularité de nécessiter des calculs de type matriciel très nombreux.
A titre d'exemple, la norme H263 réalise entre autre les opérations suivantes: découpage en blocs de l'image, prédiction du mouvement de chaque bloc par comparaison avec les blocs voisins, réalisation de transformées cosinus sur les différents blocs, compactage à l'aide d'un codage de compression de données, décodage et filtrage de l'image qui vient d'être coder pour pouvoir coder l'image suivante. Plusieurs dizaines de millions d'instructions de calcul sont nécessaires à chaque seconde uniquement pour le codage de l'image.
Dans le cas de codage de type MPEG, le codaae utilise des techniques équivalentes avec un nombre d'images plus important et d'une définition supérieure entraînant un nombre d'opérations élémentaires d'autant plus important.
Classiquement, on utilise des dispositifs multiprocesseurs disposés en lignes ou en matrices et contrôlés par un processeur supplémentaire. Ces processeurs sont commandés soit de manière individuelle soit de manière groupée. Les commandes individuelles font en fait effectuer beaucoup plus d'opérations au système que ce qui est strictement nécessaire à cause d'une gestion de communication des processeurs qui est très importante, d'où un surdimentionnement du système. Les commandes groupées nécessitent une gestion de protocole moindre et donc des systèmes un peu plus réduits mais tous les processeurs font exactement la même chose ce qui entraîne des imperfections lorsque l'on effectue des calculs entre autre sur les bords d'une image.
L'invention propose de réaliser un processeur dédié au calcul matriciel qui utilisera une pluralité d'unités de calcul utilisant des instructions dont une partie sera commune et une autre partie sera dédiée à chaque unités de calcul. Préférentiellement, les unités de calcul seront réalisées afin de réaliser des opérations élémentaires utilisées dans le traitement d'image afin de réaliser un processeur particulièrement adapté au traitement des images.
l'invention a pour objet un processeur de calcul matriciel comportant une unité de contrôle et une mémoire de donnée, caractérisé en ce qu'il comporte une pluralité d'unités de calcul utilisant des données présentes dans la mémoire de donnée, ladite pluralité d'unités de calcul étant contrôlée par l'unité de contrôle par l'intermédiaire d'un bus de commande composé: d'un premier groupe de fils relié à la pluralité d'unités de calcul afin de convoyer une instruction commune à la pluralité d'unités de calcul; et d'une pluralité de deuxièmes groupes d'au moins un fil, chacun des deuxièmes groupes étant connecté respectivement à l'une des unités de calcul de la pluralité d'unités de calcul, chaque deuxième groupe convoyant un complément d'instruction spécifique à chaque unité de calcul de la pluralité d'unités de calcul.
Les compléments d'instruction ont pour but de spécifier à certains éléments de chacune des unités de calcul les opérations qui peuvent être différentes d'une unité de calcul à l'autre.
Chaque unité de calcul comporte au moins: un accumulateur de n+k bits ayant une entrée et une sortie de n+k bits, ledit accumulateur mémorisant une donnée dans l'unité de calcul; et une unité arithmétique et logique ayant des première et deuxième entrée de n+k bits et une sortie de n+k bits, ladite unité arithmétique et logique pouvant effectuer différentes opérations arithmétiques et/ou logique.
Les unités de calcul pourront également comporter d'autre éléments tels que: des décaleurs à gauche et/ou à droite à barillet pouvant décaler des bits d'au plus k-1 bits vers la gauche et/ou la droite et ayant une entrée et une sortie parallèles de n+k bits, une instruction indiquant le décalage à gauche et un complément d'instruction indique le nombre de bit sur lequel s'effectue le décalage;.un multiplexeur pour recevoir un mot provenant d'au moins une unité de calcul voisine et en ce que une instruction indique le chargement; d'une donnée dans l'accumulateur à partir d'une unité de calcul et un complément d'instruction indique depuis quelle unité de calcul doit se faire le chargement.
Préférentiellement, la mémoire de données est organisée afin d'avoir m mots de n bits accessibles simultanément, n et m étant deux entiers, et la pluralité d'unités de calcul comporte au plus m unités de calcul.
De plus, chaque unité de calcul comporte au moins un mode de chargement d'un mot de la mémoire dans ladite unité de calcul et en ce que un complément d'instruction précise à chaque unité de calcul un mot parmi les m mots de la mémoire à charger dans ladite unité de calcul; et/ou éventuellement chaque unité de calcul comporte au moins un mode de chargement d'un mot dans la mémoire et en ce que un complément d'instruction indique à chaque unité de calcul un mot parmi les m mots de la mémoire.
L'invention sera mieux comprise et d'autres avantages apparaîtront à la lecture de la description qui va suivre d'un mode de réalisation préféré et non limitatif de l'invention, la description faisant référence aux dessins annexés parmi lesquels:
la figure 1 représente schématiquement un processeur de calcul matriciel selon l'invention comportant plusieurs unités de calcul,
la figure 2 représente la trame des commandes envoyées aux unités de calcul, et
la figure 3 représente un mode préféré de réalisation d'une unité de calcul.
Le schéma de la figure 1 représente un mode préféré de réalisation d'un processeur de calcul matriciel 1 selon l'invention. Le processeur de calcul matriciel 1 comporte une mémoire de programme 2, un micro-contrôleur 3, une mémoire de données 4, une interface d'entrées/sorties de données 5, et une pluralité d'unités de calcul 6 à 14.
La mémoire de programme 2 contient une ou plusieurs séquence de traitement à effectuer sur les données de la mémoire de données 4. Cette mémoire est, par exemple, de type non-volatile éventuellement programmable plusieurs fois. Le contenu de la mémoire de programme 2 contient par exemple le séquencement d'un algorithme de traitement d'image. La mémoire de programme 2 va contenir des instructions de trois types instructions d'échange de données entre la mémoire de données 4 et l'extérieur du processeur 1, instructions de gestion de l'algorithme de traitement matriciel, et instructions de génération de commandes des unités de calcul 6 à 14.
Le micro-contrôleur 3 est connectée à la mémoire de programme 2 afin de gérer l'algorithme de traitement matriciel et les différents éléments du processeur 1 afin d'exécuter ledit algorithme. Le micro-contrôleur 3 est également connecté à un bus d'entrées/sorties 15 et d'un bus de commande 16. Le bus d'entrées/sorties 15 est connectée à la mémoire de données 4 et à l'interface d'entrées/sorties 5. Par l'intermédiaire du bus d'entrées/sorties 15, le micro-contrôleur 3 commande et contrôle l'entrée et la sortie des données de la mémoire de données 4 aussi bien avec l'extérieur du processeur 1 via l'interface d'entrées/sorties de données 5 qu'avec les unités de calcul 6 à 14. Le bus de commande 16 comporte dans notre exemple 32 fils dont 14 établissent une connexion du micro-contrôleur 3 avec toutes les unités de calcul 6 à 14; les 18 autres fils du bus de commande correspondent à neuf paires de fils établissant des connexions entre le micro-contrôleur 3 et respectivement chacune des neuf unités de calcul 6 à 14.
Chacune des unités de calcul 6 à 14 est connectée au micro-contrôleur 3 par l'intermédiaire de 16 fils, dans notre exemple, répartis en deux groupes: un premier groupe correspondant au transport d'une instruction commune à toutes les unités de calcul 6 à 14, un deuxième groupe correspondant au transport d'un complément d'instruction propre à chacune des unités de calcul 6 à 14.
Les unités de calcul 6 à 14 sont également connectées à la mémoire de données 4 par l'intermédiaire d'un bus de données 17. Préférentiellement, le bus de données 17 et la mémoire de données 4 permettent un accès simultané à autant de mots qu'il y a d'unités de calcul 6 à 14. De plus, dans notre exemple, tous les mots de la mémoire de données 4 sont accessibles à toutes les unités de calcul 6 à 14.
Le bus de commande 16 transporte les commandes destinées aux unités de calculs 6 à 14. Dans notre exemple, le bus comporte 32 fils transportant chacun un bit de commande.
Dans l'exemple préféré de réalisation représenté sur la figure 1, il est représenté neuf unités de calcul 6 à 14. De plus la mémoire de données 4 est organisée en neuf colonnes de mots. Ces choix ont étés fait afin de réaliser au mieux un codage d'image découpée en bloc de 8x8 bits et qui a besoin d'utiliser des points fictifs situés entre les points réels (utilisation d'un filtrage dit en demi-pixels dans le codage H263). Il est tout à fait possible de réaliser la même chose avec une mémoire de données 4 organisée en neuf colonnes de mots avec seulement huit unités de calcul 6 à 13, mais cela entraîne un ralentissement dans le traitement. L'homme du métier peut réaliser de nombreux processeurs de traitement matriciel avec un nombre d'unités de calcul 6 à 14 différent de l'invention, l'important étant d'utiliser au moins autant d'unités de calcul 6 à 14 que la matrice à traiter comporte de lignes et/ou de colonnes afin d'optimiser les temps de calcul.
Pour diminuer les temps d'accès à la mémoire de données 4 et limiter les conflits d'accès en mémoire de données 4 entre l'interface d'entrées/sorties 5 et les unités de calcul 6 à 14, il est préférable que la gestion des accès mémoires soit gérée intégralement par le microcontrôleur 3. De plus, cela permet de décharger les unités de calcul des accès mémoire. Une telle solution n'est possible que pour du traitement matriciel, réduisant considérablement les performances du processeur pour des traitements non-matriciels.
La figure 2 représente la structure de commande 18 envoyée par le micro-contrôleur aux unités de calcul 6 à 14. La structure de commande 18 comporte un premier groupe de bit 19 correspondant à une instruction globale à destination de toutes les unités de calcul 6 à 14 et des deuxièmes groupes de bit 20 correspondant à un complément d'instruction à destination de respectivement chacune des unités de calcul 6 à 14.
Bien que disposant de 14 bits d'instructions, il n'est pas question d'utiliser 214 instructions. Dans notre exemple, l'instruction 19 correspond à une microcommande, c'est à dire que chaque bit active directement un ou plusieurs éléments internes de chacune des unités de calcul 6 à 14. Les compléments d'instruction 20 s'adresseront par contre à différents éléments de chacune des unités de calcul 6 à 14 mais de manière conditionnelle en fonction de l'instruction 19. La transformation de huit en douze bit se fait par l'ajout de "zéro" en bits de poids fort. La transformation de douze à huit bits se fait par troncature des bits de poids fort. L'utilisation d'unités de calcul de douze bits permet une meilleur précision pour traiter des entier de huit bits et évite de perdre du temps pour certaines opérations arithmétiques entraînant des retenues.
La figure 3 représente un exemple préféré de réalisation d'une unité de calcul 10, toutes les unités de calcul 6 à 14 étant identiques. Dans notre exemple, les mots stockés en mémoire de données 4 sont des mots de huit bits et les mots traités dans les unités de calcul 6 à 14 sont des mots de douze bits.
Un premier multiplexeur 21 possède autant d'entrées de mots que la mémoire de données 4 peut fournir de mots et une sortie de mot. Toutes les entrées de mot sont connectées au bus de données 17. Ce premier multiplexeur 21 sert à choisir la donnée de la mémoire de données à traiter dans l'unité de calcul 10.
Un deuxième multiplexeur 22 possède quatre entrées de mot et une sortie de mot. Une première entrée de mot est connectée à une première borne de communication 23.
Une deuxième entrée de mot est connectée à la sortie du premier multiplexeur 21. Une troisième entrée de mot est connectée à une deuxième borne de communication 24. les première et deuxième bornes 23 et 24 de communication sont en fait des entrées de mots provenant d'autres unités de calcul par exemple des unités voisines 9 et 11.
Un décaleur à gauche 25, ayant une entrée de mot et une sortie de mot, a son entrée connectée à la sortie du deuxième multiplexeur 22. Le décaleur à gauche 25 peut, dans notre exemple, effectuer des décalages de 0, 1, 2 ou 3 bits vers la gauche ce qui correspond à des multiplications par 1, 2, 4 ou 8.
Une unité arithmétique et logique 26, ayant des première et deuxième entrées de mot et une sortie de mot, a sa première entrée connectée à la sortie du décaleur à gauche 25. L'unité arithmétique et logique 26 est de type classique assez simple; les opérations suivantes étant disponibles: addition, soustraction, comparaison, transparence, et différentes fonctions logiques élémentaires.
Un décaleur à droite 27, ayant une entrée de mot et une sortie de mot, a son entrée connectée à la sortie de l'unité arithmétique et logique 26. Le décaleur à droite peut, dans notre exemple, effectuer des décalages de 0, 1, 2 ou 3 bits vers la droite, ce qui correspond à des divisions entières par 1, 2, 4 ou 8.
Un démultiplexeur 28, ayant une entrée de mot et autant de sorties de mot que la mémoire de donnée 4 peut recevoir de mots, a son entrée connectée à la sortie du décaleur à droite 27. Toutes les sorties de mots du démultiplexeur 28 sont connectées aux bus de données 17.
Ce démultiplexeur 28 permet de sauvegarder la donnée présente dans l'unité de calcul 10 à n'importe quel emplacement de la mémoire de données 4. De plus, le démultiplexeur 28 à la possibilité d'avoir toutes ses sorties simultanément en haute impédance.
Un accumulateur 29, ayant une entrée de mot et une sortie de mot, a son entrée connectée à la sortie du décaleur à droite 27, et a sa sortie connectée d'une part à la quatrième entrée du deuxième multiplexeur 22 et d'autre part à la deuxième entrée de l'unité arithmétique et logique 26. L'accumulateur 29 est un registre parallèle destiné à mémoriser un mot dans l'unité de calcul 10. Dans notre exemple, c'est le seul élément de l'unité de calcul 10 fonctionnant de manière synchrone, c'est à dire à l'aide d'un signal d'horloge.
Des ports de sortie 30 et 31 sont connectés à la sortie de l'accumulateur 29. Ces ports de sortie 30 et 31 servent à envoyer des données à des unités de calcul 9 et 11 voisines. L'un des ports de sortie 30 est connecté à l'une des borne d'une unité de calcul 9, et l'autre des ports de sortie 31 est connecté à l'une des bornes d'une unité de calcul 11 différente.
De nombreuses variantes sont possible comme peut s'en apercevoir l'homme du métier.
Les premier et deuxième multiplexeurs 21 et 22 peuvent être réuni dans un même multiplexeur. Le premier multiplexeur 21 peut avoir ses entrées connectées à seulement une partie du bus de données 17 afin de ne recevoir que quelques mots et non la totalité des mots disponibles en sortie de la mémoire de données 4. Le deuxième multiplexeur 22 peut être placé à différent endroit, par exemple à l'entrée de l'accumulateur 29 ou après le décaleur à gauche 25.
Le démultiplexeur 28 n'est pas indispensable, il permet seulement de faire gagner du temps lors de déplacement de données dans la mémoire de données 4.
Toutefois, il est nécessaire de remplacer ce démultiplexeur 28 par un buffer trois états si on le supprime afin d'éviter les conflits sur le bus de données 4.
Le décaleur à gauche 25 et le décaleur à droite 27 peuvent également être placé n'importe où. Néanmoins, il est préférable que le décaleur à gauche 25 soit situé sur le chemin de données entre le premier multiplexeur 21 et l'unité arithmétique et logique 26; et il est préférable que le décaleur à droite soit situé sur le chemin de données entre l'unité arithmétique et logique 26 et le démultiplexeur 28.
Des variantes sont envisageable pour l'accumulateur 29 qui peut se positionner en sortie de l'unité arithmétique et logique 26 ou en sortie du décaleur à droite 27. Il est également possible de rajouter un deuxième accumulateur dans l'unité de calcul 10 mais cela risque de ralentir le flot de données.
A titre d'exemple, il va être détailler une structure d'instructions afin que l'homme du métier puisse mieux comprendre l'interaction entre les éléments de chacune des unités de calcul 6 à 14 et les instructions 19 munies de compléments d'instruction 20.
Dans notre exemple, les instructions sont sur 14 bits et les compléments d'instruction sont sur 2 bits pour chaque unité de calcul.
Une décomposition des instructions est la suivante:
- un premier bit BO indique s'il s'agit d'une instruction, c'est à dire que si ce premier bit DO est dans un premier état, alors les unités de calcul 6 à 14 ne tiennent pas compte de l'instruction et ne font rien, si ledit premier bit B0 est dans un deuxième état, alors l'instruction est prise en compte par toutes les unités de calcul 6 à 14;
- un deuxième bit B1 s'adresse au deuxième multiplexeur 22, lorsque ce deuxième bit B1 est dans un premier état alors le deuxième multiplexeur 22 établit une connexion entre sa sortie et sa deuxième entrée (connectée à la sortie du premier multiplexeur 21, lorsque ce deuxième bit B1 est dans un deuxième état, alors le choix de l'entrée à connecter avec la sortie est déterminé par les bits constituant le complément d'instruction dédié à chaque unité de calcul;
- un troisième bit B2 s'adresse au décaleur à gauche 25, lorsque ce troisième bit B2 est dans un premier état alors le décaleur à gauche 25 n'effectue pas de décalage, lorsque ce troisième bit B2 est dans un deuxième état, alors le décaleur à gauche 25 effectue un décalage à gauche de 0 à 3 bits suivant l'état des bits constituant le complément d'instruction dédié à chaque unité de calcul;
un quatrième bit B3 s'adresse au décaleur à droite 27, lorsque ce quatrième bit B3 est dans un premier état alors le décaleur à droite 27 n'effectue pas de décalage, lorsque ce quatrième bit B3 est dans un deuxième état, alors le décaleur à droite 27 effectue un décalage à droite de 0 à 3 bits suivant l'état des bits constituant le complément d'instruction dédié à chaque unité de calcul;
- des cinquième à huitième bits B4 à B7 s'adressent à l'unité arithmétique et logique 26, ces cinquième à huitième bits B4 à B7 permettent de faire réaliser 16 opérations différentes à l'unité arithmétique et logique 26; la donnée A étant présente à la première entrée et la donnée B étant présente à la deuxième entrée, la sortie fournit suivant l'état des cinquième à huitième bits B4 à B7 par exemple les résultats suivant: A, B, A+B, A-B, A
ET B, A OU B, A OU-exclusif B, NON A, NON B, etc...; de nombreuses opérations sont connues de l'homme du métier;
- des neuvième à onzième bits B8 à B10 s'adressent au premier multiplexeur 21, ces neuvième à onzième bits B8 à B10 permettent de réaliser plusieurs modes de chargement de données dans chacune des unités de calcul 6 à 14: chargement normal, chargement de "zéro", chargement de "n", chargement croisé, chargement à droite, chargement à gauche, chargement à droite avec complément, chargement à gauche avec complément;
- des douzième à quatorzième bits Bll à B13 s adressent au démultiplexeur 28, ces douzième à quatorzième bits Dli à B13 permettent de réaliser plusieurs modes de déchargement de données dans la mémoire de données 4: déchargement normal, pas de déchargement, déchargement croisé, déchargement à droite, déchargement à gauche, déchargement à droite avec complément, déchargement à gauche avec complément.
L'utilisation de plusieurs modes de chargement et déchargement de données sert essentiellement dans le codage d'image mais peut servir dans d'autre applications. Les explications qui suivent permettront de voir l'utilité des modes de chargement et déchargement.
Le chargement normal consiste à charger les données en respectant un ordre matriciel d'organisation de la mémoire de données 4. Chaque unité de calcul 6 à 14 reçoit un mot de telle manière que la première unité de calcul 6 reçoit un mot de la première colonne de mots de la mémoire 4 et la dernière unité de calcul 14 reçoit un mot de la neuvième colonne de mots de la mémoire 4.
Le chargement de "zéro" consiste à charger des mots dont tous les bits sont mis à "zéro" dans toutes les unités de calcul 6 à 14. Le chargement de "un" consiste à charger des mots dont tous les bits sont mis à "un" dans toutes les unités de calcul 6 à 14. Ces deux modes peuvent servir à initialiser les unités de calcul 6 à 14 avec des données fixes notamment pour des boucles itératives.
Le chargement croisé consiste à charger huit octets de la mémoire de manière croisée. C'est à dire que des données d'une matrice traiter dans le processeur de calcul matriciel sont échangées par demi-bloc ce qui est particulièrement utile pour des calculs de vecteurs de mouvement en codage d'image. Les première à quatrième unités de calcul 6 à 9 reçoivent respectivement les mots des cinquième à huitième colonnes de la mémoire 4. Les cinquième à huitième unités de calcul 10 à 13 reçoivent respectivement les mots des première à quatrième colonnes de la mémoire 4. La neuvième unité de calcul 14 ne charge pas de mot.
Les chargements à droite et à gauche servent à effectuer des calculs en bordure d'image par extrapolation de l'image. Dans les modes de chargements sans complément la données de la colonne de "gauche" ou de "droite" (par référence à la gauche ou à la droite de l'image) est chargée dans les deux premières ou deux dernières unités de calcul 6 et 7, ou 13 et 14. Les autres unités de calcul 8 à 14, ou 6 à 12, chargent une données décalée d'une colonne à "gauche" ou à "droite".
Dans les modes de chargement avec complément, le complément de chacune des unités de calcul 6 à 14 indique que ladite des unités de calcul 6 à 14 doit charger le contenu d'une colonne décalée de 0 à 3 "pixel" vers la gauche ou la droite.
Le déchargement normal consiste à décharger les données en respectant un ordre matriciel d'organisation dans la mémoire de données 4. Chaque unité de calcul 6 à 14 fournit un mot de telle manière que la première unité de calcul 6 fournit un mot à la première colonne de mots de la mémoire 4 et la dernière unité de calcul 14 fournit un mot de la neuvième colonne de mots de la mémoire 4.
Le mode "pas de déchargement" positionne les sorties du démultiplexeur 28 de chacune des unités de calcul 6 à 14 en haute impédance.
Le déchargement croisé consiste à décharger huit octets dans la mémoire de manière croisée. C'est à dire que des données traitées dans le processeur 1 de calcul matriciel sont inversées par demi-bloc après calcul dans les unités de calcul 6 à 14. Les première à quatrième unités de calcul 6 à 9 fournissent respectivement des mots aux cinquième à huitième colonnes de la mémoire 4.
Les cinquième à huitième unités de calcul 10 à 13 fournissent respectivement des mots aux première à quatrième colonnes de la mémoire 4. La neuvième unité de calcul 14 ne décharge pas de mot, les sorties du démultiplexeur 28 de la neuvième unité de calcul 14 étant mis en haute impédance.
Les déchargements à droite et à gauche servent à décharger le contenu des unités de calcul 6 à 14 après avoir traité les données. Dans les modes de déchargements sans complément la données de chacune des unités de calcul 6 à 14 est déchargée dans une colonne de "gauche" ou de "droite", l'unité de calcul 6 ou 14 située à gauche ou à droite ayant les sorties de son démultiplexeur 28 en haute impédance. Dans les modes de chargement avec complément, le complément de chacune des unités de calcul 6 à 14 indique que ladite des unités de calcul 6 à 14 doit décharger son contenu dans une colonne décalée de 1 à 3 "pixel" vers la gauche ou la droite ou ne pas effectuer de déchargement.
Tous les mode de chargement et déchargement ne sont pas essentiels. En effet, pour simplifier le processeur de calcul matriciel, il est possible de réduire les mode de chargement aux chargement sans complément d'instruction, et de n'utiliser qu'un mode de déchargement sans complément d'instruction.
Toutes les combinaisons de bits d'instruction DO à B13 ne sont pas utilisables simultanément. En effet, les compléments d'instruction ne doivent pas être utilisés simultanément pour deux fonctions différentes sauf cas particulier. Afin de gagner du temps de calcul, les instruction de calcul sont de préférence combinées avec une instruction de chargement.
La combinaison des bits d'instruction et des bits de complément d'instruction peut offrir de très nombreuses possibilités. A titre d'exemple, on peut citer:
chargement dans les accumulateurs de toutes les unités de calcul 6 à 14 en utilisant un mode quelconque de chargement des données,
- chargement selon un mode fixe avec décalage à droite ou gauche,
- chargement avec réalisation d'une opération dans l'unité arithmétique et logique (UAL) 26 et le contenu d'une donnée présente dans l'accumulateur 29,
- chargement avec décalage à droite ou à gauche,
- chargement, décalage à gauche, opération dans l'UAL 26, décalage à droite et stockage dans l'accumulateur 29,
- opération dans l'UAL avec une donnée présente dans l'accumulateur d'une unité de calcul voisine puis déchargement dans la mémoire, etc...
La liste des possibilités est très importante, l'homme du métier pourra aisément la compléter avec des instructions correspondant à ses besoins. Dans les applications de traitement d'image l'utilisation du complément d'instruction va permettre d'utiliser des coefficient de pondération différents sur chaque unité de calcul par l'intermédiaire des décalage à gauche ou à droite. Les échanges de données entre les unités de calcul 6 à 14 pourront différer entre deux unités de calcul. Il est également possible de charger les données avec la première unité de calcul 6 et de décaler les données après calcul dans les unités de calcul 7 à 14 suivant créant ainsi un processus itératif de type pipeline.
L'homme du métier peut très bien utiliser des instructions comportant un nombre de bit plus ou moins important, un nombre de bits de données différents, une unité arithmétique et logique 26 plus complète, un nombre de bit de complément d'instruction inférieur ou supérieur. De plus, suivant ses besoins, l'homme du métier pourra supprimer des éléments fonctionnels de l'unité de calcul 10 tel que: les décaleurs à gauche et/ou à droite 25 et 27, les premier et/ou deuxième multiplexeurs 21 et 22, ou le démultiplexeur 28. Par ailleurs, d'autres éléments pourront être rajoutés et bénéficiés de complément d'instruction sans sortir du cadre de l'invention.

Claims (9)

REVENDICATIONS
1. Processeur de calcul matriciel (1) comportant une unité de contrôle (2, 3) et une mémoire de donnée (4), caractérisé en ce qu'il comporte une pluralité d'unités de calcul (6 à 14) utilisant des données présentes dans la mémoire de donnée (4), ladite pluralité d'unités de calcul (6 à 14) étant contrôlée par l'unité de contrôle (2, 3) par l'intermédiaire d'un bus de commande (16) composé:
d'un premier groupe de fils relié à la pluralité d'unités de calcul (6 à 14) afin de convoyer une instruction (19) commune à la pluralité d'unités de calcul (6 à 14); et
d'une pluralité de deuxièmes groupes d'au moins un fil, chacun des deuxièmes groupes étant connecté respectivement à l'une des unités de calcul de la pluralité d'unités de calcul (6 à 14), chaque deuxième groupe convoyant un complément d'instruction (20) spécifique à chaque unité de calcul de la pluralité d'unités de calcul (6 à 14).
2. Processeur (1) selon la revendication 1, caractérisé en ce que, n et k étant deux entiers, chaque unité de calcul (6 à 14) comporte au moins:
- un accumulateur (29) de n+k bits ayant une entrée et une sortie de n+k bits, ledit accumulateur (29) mémorisant une donnée dans l'unité de calcul, et
- une unité arithmétique et logique (26) ayant des première et deuxième entrée de n+k bits et une sortie de n+k bits, ladite unité arithmétique et logique (26i pouvant effectuer différentes opérations arithmétiques et/ou logique.
3. Processeur (1) selon l'une des revendications 1 ou 2, caractérisé en ce que chaque unité de calcul (6 à 14) comporte un décaleur à gauche (25) à barillet pouvant décaler des bits d'au plus k-l bits vers la gauche et ayant une entrée et une sortie parallèles de n+k bits, et en ce que une instruction (19) indique le décalage à gauche et un complément d'instruction (20) indique le nombre de bit sur lequel s'effectue le décalage.
4. Processeur (1) selon l'une des revendications 1 à 3, caractérisé en ce que chaque unité de calcul (6 à 14) comporte un décaleur à droite (27) à barillet pouvant décaler des bits d'au plus k-l bits vers la droite et ayant une entrée et une sortie parallèles de n+k bits, et en ce que une instruction (19) indique le décalage à droite et un complément d'instruction (20) indique le nombre de bits sur lequel s'effectue le décalage.
5. Processeur (1) selon l'une des revendications 2 à 4, caractérisé en ce que chaque unité de calcul (6 à 14) comporte un multiplexeur (22) pour recevoir un mot provenant d'au moins une unité de calcul voisine et en ce que une instruction (19) indique le chargement d'une donnée dans l'accumulateur (29) à partir d'une unité de calcul et un complément d'instruction (20) indique depuis quelle unité de calcul doit se faire le chargement.
6. Processeur (1) selon l'une des revendications 1 à 5, caractérisé en ce que, n et m étant deux entiers, la mémoire de données (4) est organisée afin d'avoir m mots de n bits accessibles simultanément, et en ce que la pluralité d'unités de calcul (6 à 14) comporte au plus m unités de calcul.
7. Processeur (1) selon la revendication 6, caractérisé en ce que chaque unité de calcul (6 à 14) comporte au moins un mode de chargement d'un mot de la mémoire (4) dans ladite des unités de calcul (6 à 14) et en ce que un complément d'instruction (20) précise à chaque unité de calcul (6 à 14) un mot parmi les m mots de la mémoire (4) à charger dans ladite unité de calcul.
8. Processeur (1) selon l'une des revendications 6 ou 7, caractérisé en ce que chaque unité de calcul (6 à 14) comporte au moins un mode de chargement d'un mot dans la mémoire (4) et en ce que un complément d'instruction (20) indique à chaque unité de calcul (6 à 14) un mot parmi les m mots de la mémoire (4).
9. Utilisation d'un processeur (1) tel que défini dans l'une des revendications 1 à 8 pour du traitement d'images.
FR9616342A 1996-12-27 1996-12-27 Processeur de traitement matriciel Expired - Fee Related FR2757973B1 (fr)

Priority Applications (2)

Application Number Priority Date Filing Date Title
FR9616342A FR2757973B1 (fr) 1996-12-27 1996-12-27 Processeur de traitement matriciel
US08/994,953 US5987488A (en) 1996-12-27 1997-12-19 Matrix processor

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
FR9616342A FR2757973B1 (fr) 1996-12-27 1996-12-27 Processeur de traitement matriciel

Publications (2)

Publication Number Publication Date
FR2757973A1 true FR2757973A1 (fr) 1998-07-03
FR2757973B1 FR2757973B1 (fr) 1999-04-09

Family

ID=9499408

Family Applications (1)

Application Number Title Priority Date Filing Date
FR9616342A Expired - Fee Related FR2757973B1 (fr) 1996-12-27 1996-12-27 Processeur de traitement matriciel

Country Status (2)

Country Link
US (1) US5987488A (fr)
FR (1) FR2757973B1 (fr)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6678590B1 (en) * 2000-10-17 2004-01-13 Bbnt Solutions Llc Vehicle navigation system with vision system preprocessor using MPEG encoder
US20030088757A1 (en) * 2001-05-02 2003-05-08 Joshua Lindner Efficient high performance data operation element for use in a reconfigurable logic environment
GB2399899B (en) 2003-03-27 2005-06-22 Micron Technology Inc Active memory command engine and method
US7424119B2 (en) * 2003-08-29 2008-09-09 Audio-Technica, U.S., Inc. Voice matching system for audio transducers
JP2011506442A (ja) * 2007-12-11 2011-03-03 コンジュケム バイオテクノロジーズ インコーポレイテッド インスリン分泌性ペプチド結合体の製剤

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0314277A2 (fr) * 1987-10-27 1989-05-03 International Business Machines Corporation Calculateur en réseau fonctionnant en SIMD
EP0570951A2 (fr) * 1992-05-22 1993-11-24 International Business Machines Corporation Arrangement mécanique du processeur à architecture parallèle avancée
EP0724221A2 (fr) * 1995-01-26 1996-07-31 International Business Machines Corporation Méthode et dispositif pour l'exécution de séquences d'instructions dissimilaires dans un processeur d'un ordinateur à flux unique d'instructions et à flux multiples de données (SIMD)

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5038312A (en) * 1988-11-14 1991-08-06 Nec Corporation Data processing system capable of performing vector/matrix processing and arithmetic processing unit incorporated therein
US5319586A (en) * 1989-12-28 1994-06-07 Texas Instruments Incorporated Methods for using a processor array to perform matrix calculations
US5590345A (en) * 1990-11-13 1996-12-31 International Business Machines Corporation Advanced parallel array processor(APAP)
DE4036455C1 (fr) * 1990-11-15 1992-04-02 Siemens Ag, 8000 Muenchen, De
FR2705821B1 (fr) * 1993-05-24 1995-08-11 Sgs Thomson Microelectronics Mémoire dynamique.
US5499375A (en) * 1993-06-03 1996-03-12 Texas Instruments Incorporated Feedback register configuration for a synchronous vector processor employing delayed and non-delayed algorithms
US5680338A (en) * 1995-01-04 1997-10-21 International Business Machines Corporation Method and system for vector processing utilizing selected vector elements

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0314277A2 (fr) * 1987-10-27 1989-05-03 International Business Machines Corporation Calculateur en réseau fonctionnant en SIMD
EP0570951A2 (fr) * 1992-05-22 1993-11-24 International Business Machines Corporation Arrangement mécanique du processeur à architecture parallèle avancée
EP0724221A2 (fr) * 1995-01-26 1996-07-31 International Business Machines Corporation Méthode et dispositif pour l'exécution de séquences d'instructions dissimilaires dans un processeur d'un ordinateur à flux unique d'instructions et à flux multiples de données (SIMD)

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
FUJITA Y ET AL: "Integrated memory array processor: A prototype VLSI and a real-time vision system", PROCEEDINGS 1993 COMPUTER ARCHITECTURES FOR MACHINE PERCEPTION, 1993 COMPUTER ARCHITECTURES FOR MACHINE PERCEPTION, NEW ORLEANS, LA, USA, 15-17 DEC. 1993, ISBN 0-8186-5420-1, NOV. 1993, LOS ALAMITOS, CA, USA, IEEE COMPUT. SOC. PRESS, USA, pages 82 - 91, XP000676998 *

Also Published As

Publication number Publication date
FR2757973B1 (fr) 1999-04-09
US5987488A (en) 1999-11-16

Similar Documents

Publication Publication Date Title
EP3660849A1 (fr) Circuit mémoire adapté à mettre en oeuvre des opérations de calcul
EP0248729A1 (fr) Dispositifs de calcul de transformées cosinus monodimensionnelles, et dispositif de codage et dispositif de décodage d'images comportant de tels dispositifs de calcul
US5901248A (en) Programmable architecture and methods for motion estimation
US5790712A (en) Video compression/decompression processing and processors
EP2332067A1 (fr) Dispositif de traitement en parallele d'un flux de donnees
EP0154340A1 (fr) Processeur de calcul d'une transformée discrète inverse du cosinus
EP0154341B1 (fr) Processeur de calcul d'une transformée discrète du cosinus
EP3084588B1 (fr) Module de traitement du signal, notamment pour reseau de neurones et circuit neuronal.
EP0558125B1 (fr) Processeur neuronal à cellules synaptiques reparties
BE897441A (fr) Calculateur associatif permettant une multiplication rapide
US20060253516A1 (en) Parallel processing array
EP0142439A2 (fr) Procédé de compression d'une succession d'informations numériques, et dispositif mettant en oeuvre ce procédé
US20180137084A1 (en) Convolution operation device and method
WO2020160608A1 (fr) Réseau neuronal convolutionnel hautement parallèle
CN114881214A (zh) 神经网络计算图的处理方法及处理装置
FR2757973A1 (fr) Processeur de traitement matriciel
US20020099747A1 (en) Method and apparatus for compression/decompression and filtering of a signal
US5235538A (en) Semiconductor operation device with memory for storing operation codes connected from coefficients prior to performing an operation on an input signal
EP0259231A1 (fr) Dispositif de détermination de la transformée numérique d'un signal
FR2604270A1 (fr) Additionneur binaire comportant un operande fixe, et multiplieur binaire parallele-serie comprenant un tel additionneur
FR2823050A1 (fr) Dispositif implementant conjointement un post-traitement et un decodage de donnees
WO2000026790A1 (fr) Memoire a acces vectoriel
EP0254628B1 (fr) Circuit de traitement numérique de signal réalisant une transformation cosinus
Shahbahrami et al. Performance comparison of SIMD implementations of the discrete wavelet transform
EP0674444B1 (fr) Filtre de matrices de pixels

Legal Events

Date Code Title Description
ST Notification of lapse

Effective date: 20060831