Brevet FR3082331A1 — publié le 20191213

PROCESSEUR MIMD ÉMULÉ SUR ARCHITECTURE SIMD DESCRIPTION DOMAINE TECHNIQUE La présente invention concerne de manière générale le domaine des processeurs MIMD (Multiple Instruction Multiple Data), en particulier pour effectuer des traitements d'images dans un système de vision tel qu'une rétine intelligente. ÉTAT DE LA TECHNIQUE ANTÉRIEURE Les rétines intelligentes sont des circuits intégrés combinant une matrice de capteurs et un processeur constitué d'une matrice de processeurs élémentaires, les processeurs élémentaires, encore dénommés PEs (Processing Elements) effectuant des traitements sur les signaux fournis par ces capteurs. De manière générale, il existe une correspondance entre les capteurs (ou pixels) et les processeurs élémentaires : un processeur élémentaire est en charge du traitement des signaux issus d'un ou de plusieurs pixels. Le processeur peut effectuer des traitements élémentaires de l'image (filtrage spatial par exemple) voire des opérations plus complexes, telles que recherche de point d'intérêt (POIS) ou détection d'objets. Généralement, l'architecture du processeur est du type SIMD (Single Instruction Multiple Data), autrement dit la même instruction est effectuée en parallèle par tous les processeurs élémentaires qui chacun traite une donnée différente car relié à des pixels différents. Chaque processeur élémentaire dispose de sa propre unité arithmétique et logique (ALU), des registres et, le cas échéant, d'une mémoire locale et reçoit la même instruction que tous les autres processeurs élémentaires. Un exemple de système de vision utilisant un processeur à architecture SIMD a été décrit par exemple dans le chapitre de P. Dudek « SCAMP-3 : a vision chip SIMD current- mode analogue processor array » de l'ouvrage « Focal-plane sensor-processor chips », 2011, publié par A. Zarandy chez Springer. Ce type d'architecture est adapté aux calculs massivement parallèles mais n'est pas optimal lorsque des traitements distincts doivent être exécutés sur différentes parties 2 de l'image. La nature de l'architecture SIMD impose en effet que ces traitements distincts soient effectués séquentiellement, ce qui pénalise le temps d'exécution. Plus récemment, il a été proposé une architecture de processeur SIMD dont les processeurs élémentaires opèrent en parallèle sur les colonnes respectives de la matrice 5 de capteurs. Cette architecture a été décrite dans l'article de T. Yamazaki et al. intitulé « A 1 ms high-speed vision chip with 3D-stacked 1 column 140 Gops column-parallel PEs for spatial-temporal image processing » publié dans ISCCC 2017 Conf. Proc., Session 4, Imagers 4.9, pages 82-84. Cette architecture permet une certaine flexibilité dans la mesure où il est possible de choisir indépendamment et simultanément un traitement parmi quatre sur 10 différentes régions verticales de l'image. Le but de la présente invention est par conséquent de proposer une architecture de processeur qui soit simple et permette de réaliser de manière flexible des traitements parallèles distincts, en particulier sur des zones différentes de configuration quelconque d'une image captée par une matrice de capteurs. 15 EXPOSÉ DE L'INVENTION La présente invention est définie par un processeur à architecture SIMD comprenant une matrice de processeurs élémentaires, chaque processeur élémentaire étant associé à une cellule mémoire destinée à stocker des données à traiter par ledit 20 processeur élémentaire, le processeur comprenant en outre un contrôleur central, les processeurs élémentaires étant reliés au contrôleur central par un premier bus, dit bus d'instructions, permettant au contrôleur central de transmettre en parallèle des instructions aux processeurs élémentaires, et par un second bus, dit bus de statuts, permettant au contrôleur central de recevoir les statuts des différents processeurs 25 élémentaires, ledit processeur étant avantageux en ce que : - le contrôleur central comprend une mémoire dans laquelle sont stockées sous forme de séquence d'instructions les tâches à effectuer par les différents processeurs élémentaires, le contrôleur central transmettant en boucle la séquence d'instructions sur le bus d'instructions, chaque instruction comprenant un identificateur de flot de calcul, un 3 flot de calcul étant défini comme une liste ordonnée de tâches, chaque flot de calcul concernant un ou plusieurs processeur(s) élémentaire(s) ; - chaque processeur élémentaire comprend un filtre d'instructions et une table d'identificateurs, le filtre d'instructions étant adapté à extraire l'identificateur de flot de 5 calcul de chaque instruction reçue par le processeur élémentaire et à déterminer si l'identificateur est présent dans ladite table, l'instruction étant stockée dans un buffer FIFO pour être exécutée par le processeur élémentaire dans l'affirmative et rejetée par le processeur élémentaire dans la négative. Le buffer FIFO est typiquement dépilé à chaque instruction exécutée par ledit 10 processeur élémentaire. Avantageusement, chaque instruction d'une tâche comporte un numéro d'ordre indiquant son ordre d'exécution dans la tâche, le filtre d'instructions du processeur élémentaire comprenant un compteur incrémenté à chaque fois que le buffer FIFO est dépilé, une instruction n'étant stockée dans le buffer FIFO que si son identificateur de flot 15 est présent dans la table du processeur élémentaire et si son numéro d'ordre est égal à la valeur de sortie dudit compteur. La fréquence de transmission des instructions sur le bus d'instructions peut notamment être sensiblement supérieure à la fréquence d'exécution de ces instructions 20 par les processeurs élémentaires. Chaque instruction comprend avantageusement un pointeur d'instruction et le processeur élémentaire comprend un micro-séquenceur relié à une mémoire de stockage d'une librairie de microcode, le micro-séquenceur séquençant les micro-instructions du microcode pointé par ledit pointeur d'instruction. 25 En outre, chaque processeur élémentaire peut être connecté à ses voisins au moyen de liens de communication, un lien de communication entre un premier processeur élémentaire et un second processeur élémentaire reliant un premier registre d'émission du premier processeur élémentaire à un second registre de réception du second processeur élémentaire et un second registre d'émission du second processeur élémentaire à un registre de réception du premier processeur élémentaire. 4 L'exécution des micro-instructions par le premier processeur élémentaire est alors stoppée tant que le premier registre d'émission n'est pas vide. Alternativement, l'exécution des micro-instructions par le second processeur élémentaire est stoppée tant que le second registre de réception n'est pas plein. 5 Dans le premier cas, le premier processeur élémentaire ayant terminé l'exécution d'une tâche en informe le contrôleur central par une notification de son statut et que le second processeur élémentaire est informé de ce statut par le contrôleur central. La présente invention concerne également un capteur optique intelligent caractérisé en ce qu'il comprend une matrice de capteurs élémentaires et un processeur à 10 architecture SIMD selon l'une des revendications précédentes, chaque processeur élémentaire étant associé à une pluralité de capteurs de ladite matrice et étant adapté à traiter les signaux issus de ces capteurs. Chaque processeur élémentaire peut lui-même posséder une architecture SIMD. 15 BRÈVE DESCRIPTION DES DESSINS D'autres caractéristiques et avantages de l'invention apparaîtront à la lecture d'un mode de réalisation préférentiel de l'invention, décrit en référence aux figures jointes parmi lesquelles : La Fig. 1 représente schématiquement l'architecture générale d'un processeur 20 SIMD selon un mode de réalisation de l'invention ; La Fig. 2 représente schématiquement l'architecture d'un processeur élémentaire du processeur de la Fig. 1; La Fig. 3 représente schématiquement un mode de synchronisation entre deux processeurs élémentaires du processeur de la Fig. 1; 25 La Fig. 4 représente schématiquement une délégation de tâche entre deux processeurs élémentaires du processeur de la Fig. 1. 5 EXPOSÉ DÉTAILLÉ DE MODES DE RÉALISATION PARTICULIERS On considérera dans la suite un processeur SIMD tel que défini dans la partie introductive. On rappelle qu'un tel processeur est constitué d'une matrice de processeurs élémentaires (PEs) partageant un même bus d'instructions et destinés à exécuter en 5 parallèle la même instruction pendant un même intervalle de temps. Dans un mode d'utilisation particulier, ce processeur est intégré avec une matrice de capteurs (photodiodes par exemple) au sein d'un capteur optique intelligent (rétine intelligente). Plus précisément, dans ce cas, chaque processeur élémentaire est associé à une sous-matrice de la matrice de capteurs, les signaux des différents capteurs de la sous-matrice 10 étant stockés dans une sous-matrice de mémorisation, encore dénommée macropixel. La structure d'une telle sous-matrice de mémorisation a été décrite dans la demande FR-A2984556. Les processeurs élémentaires possèdent eux-mêmes avantageusement une architecture SIMD (chaque processeur élémentaire comprenant alors une pluralité d'unités de calcul opérant en parallèle) et peuvent par conséquent traiter en parallèle plusieurs 15 données stockées dans la sous-matrice de mémorisation. L'idée à la base de la présente invention est d'émuler un processeur à architecture MIMD (Multiple Instructions Multiple Data), tel qu'un processeur multi-coeur, à partir d'un processeur à architecture SIMD, permettant de ne pas multiplier les ressources nécessaires pour assurer la mémorisation et le séquencement des instructions, nécessaire pour chaque 20 instance de processeur MIMD. La Fig. 1 représente schématiquement l'architecture d'un processeur à architecture SIMD selon un mode de réalisation de l'invention. Ce processeur comprend une matrice 120 de processeurs élémentaires 150 (PE), 25 chaque processeur élémentaire peut accéder à une cellule mémoire à laquelle il est associé. Plus précisément, la mémoire, 125, est divisée en cellules mémoire 155 (CE) contenant les données à traiter par le processeur élémentaire. La cellule mémoire possède par exemple la structure de la sous-matrice de mémorisation précitée et chaque processeur élémentaire traite les données du macropixel correspondant. 6 Les processeurs élémentaires sont connectés en parallèle à un contrôleur central 110 au moyen d'un premier bus commun, dit bus d'instructions. Ainsi, lorsqu'une instruction est transmise par le contrôleur, chacun des processeurs élémentaires la reçoit et peut l'exécuter en parallèle. 5 Les processeurs élémentaires sont également connectés au contrôleur central via un second bus commun, dit bus de statuts, sur lequel ils peuvent transmettre leurs statuts respectifs. Par statut, on entend ici par exemple l'état d'une tâche (notamment la fin d'une tâche), la survenance d'une erreur dans l'exécution d'une tâche (division par zéro, overflow) ou une interruption logicielle. Les statuts des différents processeurs 10 élémentaires sont regroupés au sein d'une table de statuts 130. Ainsi, le contrôleur central connaît à tout moment l'état d'achèvement des tâches effectuées par les différents processeurs élémentaires et peut transmettre des instructions en conséquence. Le contrôleur central comprend également une mémoire 140 dans laquelle est stocké le programme à exécuter par le processeur, ledit programme étant constitué d'une 15 séquence de tâches tasko,taski,...,taskN, chaque tâche étant elle-même constituée d'une série d'instructions. De manière avantageuse, comme nous le verrons plus en détail plus loin, les instructions de la tâche ou de la séquence de tâches sont transmises en boucle sur le bus d'instructions. On définit un flot de calcul comme une sous-séquence ordonnée des tâches de la séquence de tâches tasko,taski,...,taskN . Un flot de calcul peut concerner un 20 sous-ensemble de l'ensemble des processeurs élémentaires, voire dans certains cas la totalité des processeurs élémentaires. Une instruction comprend un en-tête suivi d'un identificateur de flot de calcul et, le cas échéant, l'indice d'ordre de l'instruction dans la tâche, puis d'un certain nombre de mots définissant l'instruction à effectuer et, le cas échéant, des arguments de cette 25 instruction. Avantageusement, l'instruction peut être codée sous forme compressée par exemple sous la forme d'un index d'instructions pointant dans une librairie d'instructions. Dans le cas d'un capteur optique intelligent, un exemple d'une telle instruction pourra être la convolution avec un noyau pour filtrer les pixels du macropixel, le noyau étant fourni en argument de l'instruction. Alternativement, l'instruction peut être directement exécutable 7 par le processeur élémentaire sans besoin d'être décodée. Les deux types d'instructions précitées peuvent généralement coexister. La Fig. 2 représente de manière schématique l'architecture d'un processeur 5 élémentaire de la Fig. 1. A gauche de la figure, on a rappelé que le processeur central transmettait en boucle une séquence d'instructions insto,...,instK sur le bus d'instructions. Ces instructions peuvent être relatives à différentes tâches, une tâche appartenant à un flot de calcul qu'un ou plusieurs processeur(s) élémentaire(s) doi(ven)t exécuter. 10 Chaque instruction est lue sur le bus par le processeur élémentaire 200. L'en-tête de l'instruction est analysé par un module de filtrage 210. Celui-ci détecte le début de l'instruction au moyen de l'en-tête, extrait l'identificateur de flot de calcul et détermine si le flot de calcul le concerne ou non. Pour ce faire, il compare l'identificateur reçu avec l'identificateur stocké dans un registre de flot courant 220. Ce registre contient 15 l'identificateur du flot courant devant être exécuté par le processeur élémentaire, autrement dit des tâches de ce flot de calcul que ce processeur élémentaire doit effectuer. Le contenu du registre 220 est chargé au moment de la phase d'initialisation du processeur ou par un microcode spécifique. Avantageusement, l'instruction peut être codée sous forme compressée par 2 0 exemple sous la forme d'un index d'instructions pointant dans une librairie d'instructions. Lorsque l'instruction appartient à un flot de calcul concernant le processeur élémentaire, le pointeur d'instruction est stocké dans un buffer FIFO, 230. Dans le cas où le buffer FIFO est plein, l'instruction en question n'est pas enregistrée. Le pointeur d'instruction pourra cependant être stocké lors d'une itération suivante de la boucle 25 d'instructions si une place s'est libérée entretemps en entrée du buffer. Différentes variantes de réalisation sont possibles selon la nature de la séquence d'instructions composant une tâche. Selon une première variante, la séquence peut être reprise à partir de n'importe quelle instruction, notamment parce que les différentes instructions de la séquence 3 0 peuvent être exécutées de manière indépendante. Dans ce cas, le processeur élémentaire 8 s'assure que le buffer FIFO est suffisamment vide pour enregistrer une séquence complète dont l'exécution peut alors recommencer. Par exemple, le buffer FIFO peut être purgé lorsqu'une séquence a été interrompue ou qu'un overflow est intervenu. Selon une seconde variante, toutes les instructions d'une tâche doivent s'effectuer 5 selon l'ordre dans lequel elles apparaissent dans la séquence. Il convient alors de s'assurer que toutes les instructions de cette tâche soient effectuées selon cet ordre par le processeur élémentaire, même en cas de débordement du buffer FIFO. Dans ce cas, chaque instruction comporte un champ additionnel indiquant le numéro d'ordre de l'instruction dans la tâche. En outre, le module de filtrage 210 comprend un compteur 10 incrémenté à chaque fois qu'une instruction est stockée dans le buffer FIFO et est remis à zéro en fin de tâche. Cette valeur sert au filtrage des instructions et s'assure qu'elles sont bien entrées en séquence dans la FIFO. Ainsi seule l'instruction suivante dans la tâche, dont le numéro d'ordre est égal à la sortie du compteur et dont l'identificateur de flot correspond à celui stocké dans le registre 220, peut être stockée dans le buffer FIFO. 15 En général, la fréquence de transmission des instructions par le contrôleur central est sensiblement plus élevée que la fréquence de traitement des instructions par les processeurs élémentaires, ce qui permet de transmettre différents flots d'instructions aux différents processeurs élémentaires sans obliger ceux-ci à se mettre en attente d'une instruction. 20 Une solution avantageuse est d'entrelacer les instructions des différents flots de calcul, permettant une fourniture régulière des instructions pour les différents flots. Si une séquence d'instructions constitutive d'une tâche s'effectue plus rapidement que les autres, elle peut être avantageusement répétée plusieurs fois dans un cycle répétitif de tâches. L'homme de l'art pourra définir un ordre des instructions des 25 différentes tâches et le nombre de répétions de ces tâches pour un fonctionnement optimal du processeur élémentaire, c'est à dire éviter un trop grand nombre de fois où le buffer FIFO est vide (donc le processeur élémentaire est en attente d'instruction) ou saturé. Lorsqu'une instruction est prise en compte pour être exécutée par le processeur élémentaire, le pointeur d'instruction est dépilé du buffer FIFO et fourni à la machine 30 d'états finis FSM (Finite State Machine) 240. Celui-ci joue le rôle de micro-séquenceur : il 9 extrait et séquence le microcode pointé par le pointeur d'instruction dans la librairie de microcode 250. Cette librairie de microcode est chargée lors de l'initialisation (ou lors d'une phase spécifique de fonctionnement - reconfiguration du système - par le contrôleur central 110). Les micro-instructions contenues dans le microcode sont transférées 5 séquentiellement une à une dans le registre de micro-instruction 260. L'unité arithmétique et logique (ALU) 280 reçoit ces micro-instructions séquencées par la machine d'états 240, les arguments, ainsi que les données sur lesquelles porte l'instruction. Les données auront été préalablement lues dans la cellule mémoire associée au processeur élémentaire et stockées dans le registre de données 270. 10 On comprendra ainsi que le programme à exécuter par le processeur peut comprendre des tâches différentes à exécuter en parallèle par les différents processeurs élémentaires, ce qui permet d'émuler une architecture MIMD. Par exemple, dans le cas d'un capteur optique intelligent, des processeurs élémentaires associés à des macropixels au centre de l'image pourront effectuer une 15 recherche de points d'intérêt ou POI (Points Of Interest) alors que les processeurs élémentaires associés à des macropixels à la périphérie de l'image pourront effectuer une détection de mouvement. Les instructions relatives à ces deux tâches sont transmises à fréquence élevée et en boucle (de manière répétitive) sur le bus d'instructions, les processeurs élémentaires de la zone centrale sélectionnant le flot d'instructions relatif à la 20 première tâche (recherche de POI) et ceux de la zone périphérique sélectionnant le flot d'instructions relatif à la seconde tâche. On notera qu'il n'est pas nécessaire que les flots d'instructions de la première tâche et de la seconde tâche soient successifs. Les instructions relatives à ces deux tâches peuvent être par exemple entrelacées. Le mécanisme d'itération de la boucle d'instructions d'une part et de filtrage des 25 instructions au niveau des processeurs élémentaires permet de différencier les traitements effectués par ces derniers. On notera que les différentes tâches sont exécutées de manière asynchrone par les différents processeurs élémentaires. Cela permet aussi d'avoir des fréquences de traitement différentes pour les processeurs élémentaires et ainsi optimiser la 30 consommation en fonction des tâches à effectuer. En particulier, deux processeurs 10 élémentaires chargés de la même tâche peuvent la terminer à des instants différents en raison des états d'occupation respectifs de leurs buffers FIFO. Lorsqu'un processeur élémentaire a achevé l'exécution d'un flot d'instructions, il en informe le contrôleur central via le bus de statuts. 5 Le caractère asynchrone de l'exécution des tâches peut être exploité pour répartir la charge de calcul entre les processeurs élémentaires. Alternativement, il est possible de synchroniser l'exécution des tâches entre processeurs élémentaires voisins. 10 La Fig. 3 représente de manière schématique un mode de synchronisation entre deux processeurs élémentaires voisins. Dans ce mode de réalisation, des processeurs voisins peuvent échanger des données au moyen de liens de communication duplex, chaque lien de communication mettant en oeuvre deux registres, à savoir un registre d'émission et un registre de 15 réception. Avantageusement, quatre liens de communication sont prévus par processeur élémentaire, le reliant à ses quatre voisins (dans les directions Nord, Sud, Est, Ouest). Alternativement, huit liens de communication pourront être prévus le reliant à ses huit voisins (les voisins au sens précédent et ceux selon les directions diagonales). L'association 20 d'un registre d'émission et d'un registre de réception par lien permet de réaliser une communication asynchrone entre processeurs élémentaires voisins. On a représenté sur la Fig. 3 un premier processeur élémentaire 310 et un second processeur élémentaire 320, voisin du premier. Le lien de communication duplex 350 relie, d'une part, un premier registre d'émission 311 du premier processeur élémentaire à un 25 second registre de réception 322 du second processeur élémentaire et, d'autre part, un second registre d'émission 321 du second processeur élémentaire à un premier registre de réception 312 du premier processeur élémentaire. Un microcode send du processeur élémentaire permet d'émettre une donnée à un processeur élémentaire voisin via un lien de communication. De manière similaire, un 30 microcode receive permet de recevoir une donnée d'un processeur élémentaire voisin via 11 ce même lien. Il est toutefois nécessaire de s'assurer que les codes des processeurs élémentaires d'émission et de réception sont bien écrits de façon à ce que le transfert de données s'effectue correctement (un microcode send d'un côté correspondant à un microcode send de l'autre, et réciproquement) et ce, dans l'ordre prévu. 5 Différentes variantes des microcodes send et receive sont envisageables suivant que les transferts dans les registres de communication bloquent ou non la séquence de micro-instructions dans le processeur élémentaire. A titre d'exemple, la prise en compte d'une émission ou une réception de données peut utiliser le principe des sémaphores. Pour ce faire, chaque registre de communication 10 comprend un bit d'état qui indique si le registre en question est vide ou plein. L'exécution du microcode send transfère une donnée venant de l'ALU vers un registre d'émission du processeur élémentaire pour être émise sur le lien de communication correspondant. Deux situations sont possibles : soit le microcode send est bloquant auquel cas il stoppe l'exécution de la séquence de micro-instructions tant que le 15 registre d'émission n'est pas vide, soit il est non bloquant, auquel cas le microcode écrit simplement la donnée dans le registre d'émission et met le bit d'état du registre à la valeur « plein » sans que l'exécution de la séquence de micro-instructions en soit affectée. Réciproquement, du côté du processeur élémentaire recevant la donnée, celui-ci exécute le microcode receive qui peut être à son tour bloquant ou non bloquant. S'il est 20 bloquant, le processeur élémentaire récepteur attend que le bit d'état du registre d'émission du processeur élémentaire émetteur soit à la valeur « plein ». Lorsque cette condition est réalisée, la donnée contenue dans le registre d'émission du processeur élémentaire émetteur est stockée dans le registre de réception du processeur élémentaire récepteur. Le microcode receive met alors le bit d'état du registre d'émission (du 25 processeur élémentaire émetteur) à la valeur « vide » et le bit d'état du registre de réception (du processeur élémentaire récepteur) à la valeur « plein ». Un microcode supplémentaire read peut ensuite lire la donnée du registre de réception et la fournir en entrée de l'ALU (du processeur élémentaire récepteur). Après lecture du registre de réception, le microcode read met le bit d'état du registre de réception à la valeur « vide ». 12 L'homme du métier pourra envisager différentes combinaisons des instructions (bloquantes ou non bloquantes) send , receive et rend, sans pour autant sortir du cadre de la présente invention. 5 La synchronisation entre processeurs élémentaires pour l'émission et la réception de données peut également être réalisée par l'intermédiaire du contrôleur central qui ordonnance alors explicitement les échanges de données en mode synchrone. La Fig. 4 représente une délégation de tâche entre deux processeurs élémentaires 10 sous la supervision du contrôleur central. Lorsqu'un processeur élémentaire 430 a achevé sa tâche et l'a signifié au contrôleur central sur le bus de statuts, il devient disponible pour effectuer un nouveau traitement. Un processeur élémentaire voisin 420 peut alors lui déléguer une partie de sa tâche en cours d'exécution. Le processeur élémentaire 420 est informé de la disponibilité 15 du processeur élémentaire 430 par le contrôleur central qui maintient à jour la table des statuts. Le controleur central peut alors lui indiquer la tâche à effectuer par l'intermédiaire d'un nouveau code à charger dans le registre 220) et déclencher en 425 un transfert des données via le lien de communication qui les relie. Cette indication peut aussi prendre la forme d'une adresse de début et d'une 20 adresse de fin dans le flot de calcul. Le processeur élémentaire 430 détermine alors au moyen de son module de sélection les instructions qui sont destinées au processeur élémentaire 420 et dont les adresses sont comprises entre lesdites adresses de début et de fin de la tâche déléguée. A la fin de l'exécution de la tâche déléguée, le processeur élémentaire 430 en informe le contrôleur central qui met à jour sa table des statuts. Le 25 processeur élémentaire 420 est ainsi informé de la fin de la tâche déléguée et déclenche en 435 le transfert des données pour les recevoir dans son registre (ou son buffer) de réception. Dans le cas d'un capteur optique, la délégation de tâche peut par exemple concerner une partie des données du macropixel et/ou une opération particulière. Par exemple, si une recherche de points d'intérêt et une détection de mouvement doivent être 30 effectuées par les processeurs élémentaires sur une zone de l'image (zone hachurée) et 13 que seule une détection de mouvement doive être effectuée dans le reste de l'image, le processeur élémentaire 430 pourra être chargé d'une recherche de point d'intérêt pour le compte du processeur élémentaire 420 une fois qu'il aura terminé sa tâche de détection de mouvement. Le procédé de délégation de tâche peut se répéter au cours du temps, 5 jusqu'à REVENDICATIONS1. Processeur à architecture SIMD comprenant une matrice de processeurs élémentaires (150), chaque processeur élémentaire étant associé à une cellule mémoire (155) destinée à stocker des données à traiter par ledit processeur élémentaire, le processeur comprenant en outre un contrôleur central (110), les processeurs élémentaires étant reliés au contrôleur central par un premier bus, dit bus d'instructions, permettant au contrôleur central de transmettre en parallèle des instructions aux processeurs élémentaires, et par un second bus, dit bus de statuts, permettant au contrôleur central de recevoir les statuts des différents processeurs élémentaires, caractérisé en ce que : - le contrôleur central comprend une mémoire (140) dans laquelle sont stockées sous forme de séquence d'instructions les tâches à effectuer par les différents processeurs élémentaires, le contrôleur central transmettant en boucle la séquence d'instructions sur le bus d'instructions, chaque instruction comprenant un identificateur de flot de calcul, un flot de calcul étant défini comme une liste ordonnée de tâches, chaque flot de calcul concernant un ou plusieurs processeur(s) élémentaire(s) ; - chaque processeur élémentaire comprend un filtre d'instructions (210) et une table d'identificateurs (220), le filtre d'instructions étant adapté à extraire l'identificateur de flot de calcul de chaque instruction reçue par le processeur élémentaire et à déterminer si l'identificateur est présent dans ladite table, l'instruction étant stockée dans un buffer FIFO (230) pour être exécutée par le processeur élémentaire dans l'affirmative et rejetée par le processeur élémentaire dans la négative. 2. Processeur à architecture SIMD selon la revendication 1, caractérisé en ce que le buffer FIFO (230) est dépilé à chaque instruction exécutée par ledit processeur élémentaire. 3. Processeur à architecture SIMD selon la revendication 2, caractérisé en ce que chaque instruction d'une tâche comporte un numéro d'ordre indiquant son ordre d'exécution dans la tâche, le filtre d'instructions du processeur élémentaire comprenant 15 un compteur incrémenté à chaque fois que le buffer FIFO est dépilé, une instruction n'étant stockée dans le buffer FIFO que si son identificateur de flot est présent dans la table du processeur élémentaire et si son numéro d'ordre est égal à la valeur de sortie dudit compteur. 5 4. Processeur à architecture SIMD selon l'une des revendications précédentes, caractérisé en ce que la fréquence de transmission des instructions sur le bus d'instructions est sensiblement supérieure à la fréquence d'exécution de ces instructions par les processeurs élémentaires. 10 5. Processeur à architecture SIMD selon l'une des revendications précédentes, caractérisé en ce que chaque instruction comprend un pointeur d'instruction et que le processeur élémentaire comprend un micro-séquenceur (240) relié à une mémoire de stockage d'une librairie de microcode (250), le micro-séquenceur séquençant les micro- 1 5 instructions du microcode pointé par ledit pointeur d'instruction. 6. Processeur à architecture SIMD selon la revendication 5, caractérisé en ce que chaque processeur élémentaire est connecté à ses voisins au moyen de liens de communication, un lien de communication (350) entre un premier processeur élémentaire 20 (310) et un second processeur élémentaire (320) reliant un premier registre d'émission (311) du premier processeur élémentaire à un second registre de réception (322) du second processeur élémentaire et un second registre d'émission (321) du second processeur élémentaire à un registre de réception (312) du premier processeur élémentaire. 25 7. Processeur à architecture SIMD selon la revendication 6, caractérisé en ce que l'exécution des micro-instructions par le premier processeur élémentaire est stoppée tant que le premier registre d'émission n'est pas vide. 16 8. Processeur à architecture SIMD selon la revendication 6, caractérisé en ce que l'exécution des micro-instructions par le second processeur élémentaire est stoppée tant que le second registre de réception n'est pas plein. 5 9. Processeur à architecture SIMD selon la revendication 6, caractérisé en ce que le premier processeur élémentaire ayant terminé l'exécution d'une tâche en informe le contrôleur central par une notification de son statut et que le second processeur élémentaire est informé de ce statut par le contrôleur central. 10 10. Capteur optique intelligent caractérisé en ce qu'il comprend une matrice de capteurs élémentaires et un processeur à architecture SIMD selon l'une des revendications précédentes, chaque processeur élémentaire étant associé à une pluralité de capteurs de ladite matrice et étant adapté à traiter les signaux issus de ces capteurs. 15 11. Capteur optique intelligent selon la revendication 10, caractérisé en ce que chaque processeur élémentaire possède lui-même une architecture SIMD.