FR 3026205 A1 20160325 FR 1458979 A 20140923 Exécution spéculative et itérative de graphes de flot de données temporisés DOMAINE DE L'INVENTION [001] La présente invention concerne l'exécution de graphes de flots de données avec des calculs distribués. Plus spécifiquement, elle concerne 10 l'exécution de graphes de flot de données lorsqu'une incertitude existe sur l'exécution de certains acteurs du graphe. ETAT DE L'ART PRECEDENT 15 [002] Depuis le début des années 2000, se produit un changement qualitatif dans la progression des architectures de microprocesseurs et la micro-électronique. La loi de Moore qui fournit la feuille de route de l'état de l'art des processus de gravure en micro-électronique continue de se vérifier, puisque le nombre de transistors que l'on peut mettre sur une puce double 20 toujours tous les 20 à 24 mois environ. Mais l'utilisation de transistors supplémentaires est actuellement causée par l'augmentation du nombre de coeurs de calcul, plus que par l'augmentation de la puissance de calcul de chacun des coeurs. [3] Ainsi, les processeurs de stations de travail disposent déjà d'un 25 nombre important de coeurs par processeur physique : entre 8 et 16 à l'heure actuelle. Si cette tendance se poursuit, dans les années qui viennent le nombre de coeurs par puce dépassera quelques dizaines. De fait, il existe d'ores et déjà quelques processeurs disposant de plusieurs centaines de coeurs par puce. Par exemple, le processeur MPPA-256 de Kalray qui 30 dispose de 256 coeurs de calcul et d'une vingtaine de coeurs pour la gestion du parallélisme et des entrées/sorties. [4] De tels processeurs sont appelés manycceurs, contraction du mot anglais many, qui signifie beaucoup ou un grand nombre, et du français coeur. La distinction entre multicceurs et manycceurs ne se réduit pas 35 uniquement au nombre de coeurs. La différence la plus marquante est plus spécifiquement liée à la façon dont les coeurs de processeurs communiquent. Dans un multicceur classique, les coeurs disposent d'un bus partagé pour accéder à la mémoire principale. En principe, le bus partagé permet une bonne perception des accès mémoire de la part de tous les coeurs. Il est ainsi relativement aisé de mettre en oeuvre des procédés de cohérence mémoire de manière à s'assurer que tous les coeurs ont la même vision de la mémoire centrale du système. Ces principes sont toujours en vigueur au sein des processeurs couramment accessibles à l'heure actuelle, moyennant une hiérarchie de bus qui apporte quelques nuances au schéma précédent. De façon générale, les processeurs de station de travail à 8 ou 16 coeurs sont désignés par l'acronyme anglais NUMA, pour Non Uniform Memory Acces ou Accès Mémoire Non Uniforme. Pour ces processeurs, l'accès mémoire n'est pas uniforme entre les coeurs de calcul, mais la cohérence des données reste réalisable. [5] Dans le cadre d'un processeur manycoeurs où le nombre de coeurs de calcul est particulièrement élevé, la possibilité d'établir une cohérence mémoire à grande échelle sur l'ensemble des coeurs est plus problématique. Sans devenir impossible, son coût en termes de synchronisation contrebalance le gain de temps d'exécution généré par le parallélisme, dont il peut remettre en cause l'intérêt. En effet, il est pour ce faire nécessaire de passer par des protocoles distribués mais comportant une partie d'éléments partagés. Il s'agit donc d'une solution globalement peu satisfaisante, d'autant plus que la cohérence mémoire induit une consommation électrique non négligeable. Afin d'adresser ce problème, une partie importante des recherches sur les procédés d'exécution des manycceurs se focalise sur des modèles de calcul qui n'ont pas besoin de cohérence mémoire. Parmi ceux-ci les modèles flots de données sont particulièrement étudiés aujourd'hui. [6] Les évolutions matérielles précitées induisent une profonde mutation du calcul embarqué, et permettent l'émergence d'applications nouvelles, dont certaines, dans des domaines aussi variés que le calcul haute-performance ou les systèmes temps-réel critiques embarqués, impliquent à la fois de forts besoins en parallélisme et des contraintes temps-réel. A titre d'exemple, J. Mitola. The software radio architecture. Communications Magazine, IEEE, 33(5) :26-38, May 1995 décrit une application de radio logicielle et M. Heskamp, R. Schiphorst, and K. Slump. Cognitive Radio Communications and Networks, chapter Public safety and cognitive radio, pages 467-488. Elsevier, 2009 décrit un système de radio cognitive. Chacune de ces applications demande une forte puissance de calcul couplée à une faible consommation électrique. Toutes deux présentent des contraintes temps-réel et la radio cognitive présente un besoin d'adaptabilité à son environnement. Des contraintes similaires sont rencontrées par les applications de réalité augmentée, par exemple celles décrites par S. Feiner, B. Maclntyre, T. Hollerer, and A. Webster. A touring machine : prototyping 3d mobile augmented reality systems for exploring the urban environment. In Wearable Computers, 1997. Digest of Papers., First International Symposium on, pages 74-81, Oct 1997 et Y. Sato, M. Nakamoto, Y. Tamaki, T. Sasama, I. Sakita, Y. Nakajima, M. Monden, and S. Tamura. Image guidance of breast cancer surgery using 3d ultrasound images and augmented reality visualization, 1998, ainsi que les applications de véhicules autonomies décrites par A. Kushleyev, D. Mellinger, C. Powers, and V. Kumar. Towards a swarm of agile micro quadrotors. Autonomous Robots, 35(4) :287-300, 2013. [7] La connectivité est un autre aspect important des évolutions technologiques actuelles. De plus en plus d'appareils mobiles intelligents, du capteur intelligent au smartphone, ont la possibilité d'être connectés en permanence les uns aux autres. Chacun de ces appareils mobiles peut être connecté à des serveurs distants ou des systèmes embarqués, comme par exemple le système embarqué d'une voiture. Atzori, A. lera, and G. Morabito. 54(15) :2787-2805, Oct. 2010. The intemet of things : A survey. Comput. Netw divulgue un essaim de calculateurs mobiles créant une plateforme de calcul globale, hautement parallèle et mutable. Cet article préfigure une capacité de calcul omniprésente et distribuée. [8] Ainsi, les applications citées précédemment peuvent être vues comme des parties d'un calcul coopératif, dans lequel chaque application peut utiliser les résultats d'autres applications pour améliorer les siens. A. A. Faisul, A. R. Ramli, K. Samsudin, and S. Hashim. Energy management in mobile robotics system based on biologically inspired honeybees behavior. In Computer Applications and Industrial Electronics (ICCAIE), 2011 IEEE International Conference on, pages 32-35. IEEE, 2011, dans le domaine de la gestion de l'énergie dans la robotique mobile, et Y. Wang, Y. Qi, and Y. Li. Memory- based multia gent coevolution modeling for robust moving object tracking. The Scientific World Journal, 2013, 2013 dans le domaine du suivi de cible robuste, divulgue d'ores et déjà de telles applications, qui requièrent dynamicité, connaissance de l'environnement et adaptation à celui-ci. [009] Les modèles flots de données et plus particulièrement les réseaux de processus communicants ont été imaginés au départ par Kahn en 1974. Ils rendent les communications entre tâches explicites, ce qui permet une analyse de l'application hors-ligne pour la vérification de propriétés importantes pour une exécution sûre et déterministe. [0010] De nombreux modèles de flots de données utilisent le concept Io d'acteur introduit par Cari Hewitt; Peter Bishop; Richard Steiger (1973). A Universal Modular Actor Formalism for Artificial Intelligence. IJCAI. Dans le cadre de ce concept et du modèle mathématique associé dit modèle d'acteur, les acteurs sont les seules fonctions primitives nécessaires à la programmation concurrente. Les acteurs communiquent par échange de 15 messages. En réponse à un message, un acteur peut par exemple effectuer un traitement local, créer d'autres acteurs, ou envoyer d'autres messages. [0011] Le principe de base des KPN (acronyme anglais signifiant Kahn Parallel Network, Réseau Parallèle de Kahn en français) est fondé sur un graphe dont les noeuds sont des processus communiquant et dont les liens 20 sont des files (plus communément appelés FIFO, de l'acronyme anglais First In First Out, ou Premier Entré Premier Sorti, en français). Les processus peuvent lire des données sur les canaux d'entrée et écrivent les résultats de leurs calculs sur des canaux de sortie. La granularité des données échangées est dénotée par des jetons (de l'anglais tokens) et le nombre de 25 jetons produits et consommés sont des nombre entiers positifs ou nuls. [0012] Les lectures sur les canaux d'entrée sont bloquantes, ce qui signifie que si un processus requiert plus de jetons que présents sur une de ses entrées, il sera bloqué jusqu'à ce que le nombre de jetons requis soit présent sur ladite entrée. Les processus ont le droit d'avoir un état interne et peuvent 30 changer dynamiquement le nombre de jetons attendus en entrée ou produits en sortie. [0013] Le modèle de Kahn est puissant, donne des résultats déterministes (les mêmes entrées produisent les mêmes sorties), local (donc sans nécessité d'avoir des mécanismes de cohérence mémoire), mais il manque 35 de propriétés pour pouvoir l'utiliser en toute confiance dans le cadre de l'informatique embarquée. En particulier, il est impossible de savoir à l'avance si un réseau de processus de Kahn est sans blocages ou s'il va pouvoir s'exécuter en mémoire bornée. [0014111 existe plusieurs améliorations des KPN pour permettre des vérifications hors-ligne des propriétés essentielles pour le déterminisme et la sûreté de fonctionnement. Parmi ces améliorations, le modèle des CSDF (de l'acronyme anglais Cyclo-Static Data Flow, ou Flot de Données CycloStatiques) est le plus expressif qui conserve la possibilité de faire ces vérifications. K. Denolf, M. Bekooij, J. Cockx, D. Verkest, and H. Corporaal. Exploiting the expressiveness of cyclo-static dataflow to model multimedia implementations. EURASIP Journal on Advances in Signal Processing, 2007(1) :084078, 2007 décrit des analyses possibles de graphes CSDF. De plus, avec les informations sur les temps d'exécution des acteurs et les latences induites par les communications, on peut analyser un graphe CSDF pour déterminer les latences sur un chemin du graphe. [0015] Le brevet FR 28166730 décrit un procédé de sécurisation rendant déterministe l'exécution en temps réel d'applications multitâches. Il décrit notamment les enchaînements d'appels et interruptions système, horloges, et gestion des interruptions au niveau des micronoyaux permettant zo d'exécuter une tâche en temps-réel de manière déterministe. [0016] Le brevet US 5745687 décrit un système de gestion de flot de données implémenté sur ordinateur. Ce système comprend notamment un service d'organisation, destiné à identifier, parmi un ensemble d'agents, l'agent le plus approprié pour effectuer chacune des tâches du graphe de 25 flots de données. [0017] Le brevet US 6397192 décrit une méthode de synchronisation d'un ou plusieurs graphes de flots de données. Il décrit notamment comment mettre en pause et démarrer/redémarrer l'exécution du graphe de flots de données en fonction de la terminaison ou non de tâches. 30 [0018] Cependant, aucune des techniques décrites précédemment ne permet d'assurer l'exécution correcte du graphe de flot de données en cas de défaillance de l'un des agents. Le risque de défaillance devient non négligeable avec l'expansion des calculs distribués et des connections réseaux. A titre d'exemple, un agent d'un graphe de flot de données peut 35 faire appel à une ressource de calcul située sur un réseau externe. Un problème de connexion, par nature non prévisible peut alors menacer le déterminisme de l'exécution, ou du temps d'exécution, de la tâche effectuée par l'agent. De la même manière, lorsqu'un agent exécute une tâche nécessitant des éléments externes, par exemple la réception de signaux GPS, il est très difficile d'assurer le déterminisme d'exécution de la tâche. Dans le cas d'un graphe CSDF, le système de jetons bloque l'exécution du graphe tant que toutes les données attendues ne sont pas parvenues. Le brevet FR 28166730 permet d'obtenir un temps de réponse déterministe pour une tâche temps-réel, mais n'aborde pas la problématique de la Io défaillance possible de certains acteurs. Le brevet US 5745687 ne traite pas de ce problème et le brevet US 6397192 décrit un mécanisme de synchronisation dans lequel les tâches sont en attente de la fin d'exécution d'autre tâches, mais ne décrit pas de mécanisme permettant de surmonter la défaillance de celles-ci. 15 [0019] De plus, lorsque plusieurs agents sont susceptibles d'effectuer la même tâche avec des qualités de résultats différents, aucune des méthodes susmentionnées ne permet de sélectionner a posteriori celle ayant produit le meilleur résultat. Les tâches pouvant être effectuées par différents agents avec un résultat de qualité variable incluent, par exemple, la géo-localisation 20 par différent moyens, ou l'analyse d'image avec des qualités de résultats différentes. Le brevet US 5745687 permet bien de sélectionner l'agent le plus approprié pour effectuer une tâche, mais il s'agit d'une sélection a priori de l'agent, et non d'une sélection a posteriori d'agents ayant déjà terminé leur tâche et capables de quantifier la qualité de leur résultat. 25 [0020] Enfin, aucune des méthodes ci-dessus ne permet de créer des graphes déterministes garantissant la fourniture d'un résultat à la fois dans un temps borné et de la meilleure qualité possible parmi les résultats fournis par plusieurs agents s'exécutant en parallèle. 30 RESUME DE L'INVENTION [0021] A cet effet, l'invention a pour objet un système d'exécution d'un graphe de flot de données 300, ledit graphe de flot de données 300 5 comprenant : au moins deux premiers acteurs 310, 311 comprenant chacun des moyens pour exécuter de manière indépendante un calcul d'un même ensemble de données comprenant au moins une donnée, et produire un descripteur de qualité de l'ensemble de données, l'exécution du calcul par chacun desdits au moins deux premiers acteurs étant déclenchée par un 10 système de synchronisation; un troisième acteur 320, comprenant des moyens pour déclencher l'exécution du calcul par chacun desdits au moins deux premiers acteurs, et initialiser une horloge configurée pour émettre un signal d'interruption lorsqu'une durée est écoulée; un quatrième acteur 330, comprenant des moyens pour exécuter, au plus tard au signal d'interruption 15 de ladite horloge: la sélection, parmi l'ensemble desdits au moins deux premiers acteurs ayant produit un descripteur de qualité, de celui dont le descripteur présente la valeur la plus favorable; le transfert de l'ensemble de données calculé par l'acteur sélectionné. [0022] Avantageusement, au moins un desdits deux premiers acteurs 310, 20 311 possède un temps d'exécution déterministe inférieur ou égal à la durée de l'horloge. [0023] Dans un mode de réalisation de l'invention, le système de synchronisation de chacun desdits au moins deux premiers acteurs 310, 311 est un sémaphore, et le troisième acteur 320 déclenche l'exécution du calcul 25 par chacun desdits au moins deux premiers acteurs 310, 311 par le don d'un jeton audit sémaphore. [0024] Dans un mode de réalisation de l'invention, le troisième acteur 320 comprend des moyens pour transférer des données représentant des paramètres de calcul identiques 420b, 421b, 422b à chacun desdits au 30 moins deux premiers acteurs 310, 311, préalablement à l'initialisation de l'horloge. [0025] Avantageusement, chacun des au moins deux premiers acteurs 310, 311, produit un horodatage à la fin du transfert des données représentant des paramètres de calcul, et le troisième acteur 320 déclenche l'initialisation 35 de l'horloge après réception des au moins deux horodatages. [0026] Dans un mode de réalisation de l'invention, le troisième acteur 320 déclenche l'exécution d'un sous-ensemble uniquement des au moins deux premiers acteurs, en fonction d'un paramètre externe audit troisième acteur indiquant le sous-ensemble des au moins deux premiers acteurs à exécuter 411b. [0027] Avantageusement, le sous-ensemble des au moins deux premiers acteurs 310, 311 à exécuter comprend tous ceux pour lesquels les moyens de calcul adéquats sont disponibles. [0028] Dans un mode de réalisation de l'invention, le quatrième acteur 340 comprend des moyens pour générer une erreur, lorsque, au signal d'interruption de l'horloge, le nombre parmi les au moins deux premiers acteurs 310, 311 ayant produit un descripteur de qualité est inférieur à un seuil prédéfini. [0029] Dans un mode de réalisation de l'invention, la sélection de l'acteur 15 dont le critère de qualité présente la valeur la plus favorable est effectuée au signal d'interruption de l'horloge. [0030] Dans un autre mode de réalisation de l'invention, la sélection de l'acteur dont le critère de qualité présente la valeur la plus favorable est effectuée avant signal d'interruption de l'horloge, lorsqu'au moins un nombre 20 prédéfini parmi les au moins deux premiers acteurs ont produit un descripteur de qualité. [0031] Dans un mode de réalisation de l'invention, au moins un parmi les au moins deux premiers acteurs produit une mise à jour du calcul de son ensemble de données, ainsi que de son descripteur de qualité. 25 [0032] L'invention concerne également un procédé de compilation d'un graphe de flot de données, ledit procédé comprenant: un étape de création d'au moins deux groupes d'instructions d'un code informatique correspondant à au moins deux premiers acteurs 310, 311, pour exécuter de manière indépendante le calcul d'un même ensemble de données 30 comprenant au moins une donnée, et produire un descripteur de qualité de l'ensemble de données, l'exécution du calcul par chacun desdits au moins deux groupes d'instructions d'un code informatique étant déclenchée par un système de synchronisation; une étape de vérification qu'au moins un parmi les au moins deux groupes d'instructions d'un code informatique est capable 35 d'exécuter son calcul de manière déterministe dans une durée prédéfinie 0; une étape de création d'un troisième groupe d'instructions d'un code informatique correspondant à un troisième acteur 320, pour déclencher l'exécution du calcul par chacun desdits au moins deux premiers groupes d'instructions d'un code informatique, et initialiser une horloge configurée pour émettre un signal d'interruption lorsque ladite durée prédéfinie est terminée; un étape de création d'un quatrième groupe d'instructions d'un code informatique correspondant à un quatrième acteur 330 pour exécuter, au plus tard au signal d'interruption de ladite horloge: la sélection, parmi l'ensemble desdits au moins deux premiers groupes d'instructions d'un code informatique ayant produit un descripteur de qualité, de celui dont le descripteur présente la valeur la plus favorable; le transfert de l'ensemble de données calculé par le groupe d'instructions d'un code informatique sélectionné. [0033] Dans un mode de réalisation de l'invention, le procédé de compilation comprend préalablement à l'étape de création d'au moins deux groupes d'instructions d'un code informatique correspondant à au moins deux premiers acteurs : une étape de vérification de l'existence des au moins deux premiers acteurs, du troisième acteur et du quatrième acteur ; une étape de vérification que les canaux d'entrée des au moins deux premiers acteurs sont connectés au troisième acteur ; une étape de vérification que les canaux de sortie des au moins deux premiers acteurs sont connectés au quatrième acteur, une étape de vérification que les canaux de sortie du troisième acteur sont connectés aux au moins deux premiers acteurs ; une étape de vérification que les canaux d'entrée du quatrième acteur sont connectés aux au moins deux premiers acteurs. [0034] Dans un mode de réalisation de l'invention, le procédé de compilation génère une erreur de compilation lorsqu'aucun des au moins deux premiers groupes d'instructions d'un code informatique correspondant à au moins deux premiers acteurs n'est capable d'exécuter son calcul de manière déterministe dans une durée prédéfinie. [0035] Le système selon l'invention permet ainsi d'exécuter un graphe de flot de données en s'assurant d'obtenir un résultat en un temps borné de manière déterministe, tout en se réservant la possibilité d'obtenir un résultat 35 plus performant s'il est disponible. [0036] Un système d'exécution d'un graphe de flot de données selon l'invention est robuste aux événements imprévus, tels que des pannes réseau ou pertes de signaux GPS. [0037] Un système d'exécution d'un graphe de flot de données selon 5 l'invention permet d'exécuter des graphes de données sur des processeurs manycoeurs. [0038] Un système d'exécution d'un graphe de flot de données selon l'invention permet d'obtenir une grande flexibilité dans les règles de sélection du meilleur résultat, et de générer des erreurs en cas de non-obtention d'un 10 résultat de calcul. [0039] Un système d'exécution d'un graphe de flot de données selon l'invention permet de tirer le meilleur parti d'algorithmes de calcul itératifs. Il permet notamment de sélectionner le meilleur résultat fourni par un algorithme de calcul itératif à une date donnée, de comparer ce résultat à 15 celui produit par d'autres algorithmes iératifs ou non itératifs, et de terminer son exécution plus tôt si l'algorithme itératif a terminé son traitement avant la date limite initialement prévue. [0040] Un procédé de compilation d'un graphe de flot de données selon l'invention permet de s'assurer qu'un résultat sera obtenu dans un temps zo borné de manière déterministe. LISTE DES FIGURES [0041] D'autres caractéristiques apparaîtront à la lecture de la description détaillée donnée à titre d'exemple et non limitative qui suit faite au regard de 5 dessins annexés qui représentent: - les figures 1a, lb, 1c, trois exemples d'acteurs CSDF selon l'état de l'art; - les figures 2, un exemple de graphe CSDF selon l'état de l'art ; - la figure 3, un schéma de principe d'un graphe selon l'invention ; 10 - les figures 4a, 4b, 4c, 4d, quatre exemples d'acteurs d'un graphe selon l'invention ; - la figure 5, un exemple de graphe selon l'invention, dans lequel les branches du module comportent deux canaux d'entrée ; - la figure 6, un exemple de procédé de compilation d'un graphe selon 15 l'invention ; - la figure 7, un exemple de graphe selon l'invention pour le traitement d'images temps-réel dans le cadre de l'assistance à la conduite d'un véhicule. 20 DESCRIPTION DETAILLEE [0042] Dans la suite de la description, la mise en oeuvre de l'invention est illustrée par des exemples relatifs à l'exécution de graphes de flot de données de type CSDF. Il convient cependant de noter que l'invention n'est 25 pas restreinte à des graphes de type CSDF. L'invention est notamment applicable aux types de graphes pour lesquels il est possible de déterminer la latence de chaque branche hors ligne, par exemple à la compilation; pour lesquels il est possible de démontrer l'absence d'interblocages et qui peuvent s'exécuter en mémoire bornée. L'invention ainsi est applicable, par exemple, 30 aux graphes de type « Core Functional Dataflow » (de l'anglais Coeur Fonctionnel de Flots de Données).. [0043] Certains acronymes anglo-saxons couramment utilisés dans le domaine technique de la présente demande pourront être employés au cours de la description et des figures. Ces acronymes sont listés dans le tableau ci- dessous, avec notamment leur expression anglo-saxonne et leur signification. Acronyme Expression Signification ADAS Advanced Driver Assistance System Système d'Assistance de Conducteur Avancé. Système de calcul permettant l'aide à la conduite, par exemple avec l'identification automatique de panneaux. CSDF Cyclo Synchronous Data Flow Flot de Données Cyclo-Statiques. Evolution du modèle de calcul KPN permettant de vérifier, à la compilation, le respect de contraintes temporelles. FIFO First In First Out Premier Entré Premier Sorti. Modèle de calcul informatique appelé « file », dans lequel les tâches sont effectuées dans leur ordre d'arrivée. GPS Global Positionning Network Réseau de Positionnement Global. Système de positionnement par satellite. GSM Global System for Mobile Système Global pour les communications Mobiles. Norme numérique de seconde génération pour la téléphonie mobile. Particulièrement adaptée pour porter la voix et inclut des moyens de localisation entre les antennes et un téléphone mobile. communications KPN Kahn Parallel Network Réseau Parallèle de Kahn. Modèle de calcul distribué. NUMA Non Uniform Memory Access Accès Mémoire Non Uniforme. Désigne des processeurs multicoeurs au sein desquels l'accès à la mémoire partagée par les différents coeurs de calcul n'est pas uniforme. [0044] Les figures I a, 1 b, lc représentent trois exemples d'acteurs CSDF selon l'état de l'art. [0045] La figure la représente un exemple d'acteur simple 100a selon l'état de l'art. Cet acteur comporte deux fonctions fo, fl. La fonction fo consomme n°E 110a jetons sur le canal d'entrée et en produit ds 120a sur le canal de sortie. La fonction consomme ni E 111a jetons sur le canal d'entrée et produit nis 1 21a jetons sur le canal de sortie. Les jetons permettent de synchroniser l'exécution du graphe. En effet, l'exécution des fonctions liées à un acteur, par exemple fo et f1 pour l'acteur 100a démarre lorsque l'ensemble des jetons est reçu sur le canal d'entrée. Inversement, la production de jetons sur le canal de sortie permet de déclencher l'exécution des acteurs suivants. Un tel acteur représente, dans le modèle CSDF, l'élément de base d'un module de calcul ou d'un programme informatique. Ainsi, les fonctions fo, f1 de l'acteur peuvent effectuer entre son entrée et sa sortie, un traitement de calcul local, une communication en réseau, ou tout autre opération informatique. D'autres acteurs simples peuvent comporter une, trois, quatre ou une pluralité d'entrées, sorties et fonctions de calcul. [0046] La figure lb représente un second exemple d'acteur 100b d'un graphe CSDF selon l'état de l'art. Cet acteur, appelé « Duplicate », est utilisé pour dupliquer le contenu d'un canal d'entrée 110b comprenant n éléments en plusieurs canaux de sortie 120b, 121b, 122b comprenant les mêmes n éléments. D'autres exemples d'acteurs « Duplicate » peuvent comprendre au moins deux canaux de sortie. La duplication des données peut s'effectuer selon différentes manières, par exemple par envoi d'adresses mémoires pointant sur un même ensemble de données, par recopie du contenu d'une mémoire dans plusieurs emplacements séparés, ou par envoi de données à différents destinataires sur un réseau. Un acteur similaire, appelé « Split », sépare les n éléments d'un canal d'entrée sur plusieurs canaux de sortie recevant chacun un sous-ensemble des n éléments du canal d'entrée. [0047] La figure 1 c représente un troisième exemple d'acteur 100c d'un graphe CSDF selon l'état de l'art. Cet acteur, appelé « Join », est utilisé pour concaténer des ensembles de données issus de trois canaux d'entrée 110c, 111c et 112c en un canal de sortie 120c. D'autres exemples d'acteurs « Join » peuvent comprendre au moins deux canaux d'entrée. [0048] La figure 2 représente un exemple de graphe CSDF selon l'état de 35 l'art. Ce graphe comprend : - Un premier acteur « Split » 201 ; - Un second acteur « Join » 202 ; - Un canal d'entrée 210; - Trois canaux de sorti de l'acteur « Split » 211, 212, 213 ; - Trois canaux d'entrée de l'acteur « Join » 214, 215, 216 - Un canal de sortie 217; [0049] Ce graphe permet de réorganiser des données. A cet effet, l'acteur « Split » 201 sépare les n données du canal d'entrée 210 en trois canaux de sortie 211, 212, 213. L'acteur « Join » 202 réunit les trois canaux de 214, 215, 216 en un canal de sortie 217. Ceci permet un accès des données dans un ordre différent, par exemple une transposition de matrice. [0050] D'une façon générale, les graphes CSDF trouvent bien leur place dans une partie des problèmes temps-réel : les traitements de données en flux, le traitement du signal et de la vidéo. Ils possèdent en effet de nombreuses propriétés désirables pour les applications temps-réelles, telles que le déterminisme d'exécution, et la possibilité de démontrer l'absence de blocage. Il est ainsi possible de trouver des ordonnancements qui permettent aux graphes CSDF d'être compatible avec les contraintes temps-réel. Il est notamment possible de garantir la latence d'une chaîne de calcul CSDF via les acteurs et les files de communication. Cependant, les CSDF ont de la peine à s'adapter à une grande classe des applications temps-réel, car dans les graphes de type CSDF, on fait l'hypothèse que toutes les parties du système sont toujours fonctionnelles. En effet, une défaillance dans un acteur du graphe CSDF bloque l'exécution de tout le graphe. [0051] Or, une composante fondamentale des applications temps-réel, est le cas des applications critiques ou qui comportent au moins une part de criticité. Dans ce cadre là, on ne peut pas faire l'hypothèse qu'un élément du système sera toujours fonctionnel, et en particulier enverra des données au sous-système de calcul. On attend du système temps-réel qu'il fournisse des données aux sorties (par exemple les actionneurs dans les systèmes dits cyber-physiques), même si certaines entrées n'envoient pas de données (pour des problèmes de panne transitoire ou permanente). Les causes de non-fourniture de données aux sorties sont nombreuses. Par exemple, dans le cas d'un calcul, peut se produire une panne. Certains calculs, par exemple dans les domaines de la cryptographie ou du traitement de données multimédia, possèdent un temps d'exécution dépendant de la typologie des données d'entrée, par essence imprédictible. Il est donc très difficile de garantir la fourniture d'un résultat dans un temps donné dans ce cas. Enfin, certains acteurs sont dépendants de conditions externes, par exemple la bonne réception d'un signal GPS ou d'une connexion réseau. Ces acteurs sont alors susceptibles de défaillances de manière imprévisible. [0052] Ceci n'est pas compatible avec les graphes CSDF car un acteur CSDF attend toujours un certain nombre de données sur ses entrées avant de pouvoir s'exécuter. Bien sûr, on peut toujours alimenter le graphe CSDF avec des pseudo-entrées, via des sources virtualisées dont la production est toujours maîtrisée. [0053] D'une façon générale, cela repousse le problème d'un cran, car il faut aussi pouvoir réagir aux pannes internes d'un système de calcul. Pour un système temps-réel, le terme panne (ou faute) est assez large, et couvre en particulier le cas où un élément de calcul est en retard par rapport aux échéances attendues. [0054] Les contraintes des systèmes embarqués imposent aussi de réduire autant que possible la consommation électrique du système lorsque la sécurité n'est pas compromise. Là encore il s'agit d'une contrainte incompatible avec les CSDF en tant que tels, car un graphe ne change pas en cours d'exécution. [0055] Enfin, l'environnement du monde réel étant complexe, il faut parfois faire de l'arbitrage probabiliste entre plusieurs actions, car on ne peut être jamais 100% certain du scénario en cours de déroulement, avec des informations données par les capteurs qui ne permettent pas forcément de connaître les subtilités d'un événement. [0056] Les CSDF sont donc inadaptés en tant que tels pour traiter ces cas, Les KPN pourraient en principe les traiter. L'utilisation de KPN de l'état de l'art ne permet pas d'avoir une assurance sur des propriétés fondamentales de ces systèmes : l'absence de blocage et la possibilité de s'exécuter en mémoire bornée ou avec un ordonnancement qui respecte des contraintes temporelles. L'invention permet de surmonter ces limitations de l'art antérieur.35 [0057] La figure 3 représente un schéma de principe d'un graphe selon l'invention. Afin de résoudre les inconvénients précités, l'invention concerne un système d'exécution d'un graphe de flot de données 300, le dit graphe de flot de données 300 comprenant : - au moins deux premiers acteurs 310, 311, comprenant des moyens pour exécuter de manière indépendante le calcul d'un même ensemble de données comprenant au moins une donnée, et produire un descripteur de qualité sur le résultat obtenu, l'exécution du calcul par chacun desdits au moins deux premiers acteurs étant déclenchée par un système de synchronisation ; - un troisième acteur 320, comprenant des moyens pour déclencher l'exécution du calcul par chacun desdits au moins deux premiers acteurs, et initialiser une horloge configurée pour émettre un signal d'interruption lorsqu'une durée est écoulée ; - un quatrième acteur 330, comprenant des moyens pour exécuter, au plus tard au signal d'interruption de ladite horloge : - la sélection, parmi l'ensemble desdits au moins deux premiers acteurs ayant produit un descripteur de qualité, de celui dont le descripteur présente la valeur la plus favorable ; - le transfert de l'ensemble de données calculé par l'acteur sélectionné. [0058] Les au moins deux premiers acteurs 310, 311 comprennent des moyens pour exécuter de manière indépendante le calcul d'une même donnée ou d'un même ensemble de données, et produire un descripteur de qualité sur le résultat obtenu. La donnée ou l'ensemble de données calculées peuvent être de types très divers. A titre d'exemple non limitatif, il peut s'agir de la localisation d'un individu, ou bien du codage d'une image dans une application de compression vidéo. Le descripteur de qualité dépend alors du type d'application choisi. Par exemple, dans le cas d'acteurs destinés à localiser un usager, le descripteur de qualité peut être la précision estimée de la localisation. Dans le cas du codage d'une image dans une application vidéo, il peut s'agir d'une estimation du ratio poids/qualité de la vidéo. Si l'application de codage vidéo alloue un poids fixe et prédéfini à chaque image, il peut s'agir d'un indice de qualité sur l'image. [0059] Dans un mode de réalisation de l'invention, ces au moins deux acteurs comprennent des fonctions de calcul locales utilisant des algorithmes et complexités variables. Dans l'exemple du codage vidéo, il peut s'agir de deux algorithmes de codage différents, chacun d'eux produisant des résultats plus ou moins optimisés suivant le type d'image. Dans un autre mode de réalisation de l'invention, certains acteurs peuvent faire appel à des moyens de calcul distants, ou des données situées sur une machine distante ou bien des données reçues par le biais d'une connexion. Par exemple, dans le cas d'une application de localisation, il est possible d'avoir un premier acteur calculant la position d'un usager grâce à un calcul local par odométrie (estimation d'une nouvelle position par application d'un vecteur déplacement à partir d'une position précédente), un second acteur calculant la même position grâce à la réception de signaux GPS. [0060] II est bien évidemment possible de disposer de plus de deux acteurs, par exemple avec un acteur supplémentaire 312, et de disposer ainsi de moyens supplémentaires de réaliser le calcul voulu. Ainsi, dans le cas de l'application de localisation' on peut disposer d'un troisième acteur utilisant une localisation par identification d'une balise de réception de signaux de radiocommunications (cellulaire ou Wifi) à laquelle est rattachée un zo équipement à localiser comportant un récepteur. Dans un mode de réalisation de l'invention, un seul acteur est utilisé pour chacun des calculs. Dans un second mode de réalisation de l'invention, chacun des calculs est effectué par une branche comportant plusieurs acteurs, et pouvant être compilée comme un graphe selon l'état de l'art, par exemple un graphe 25 CSDF. On appellera dans cette demande « branche de calcul » ou « branche de calcul indépendante » un sous-ensemble du graphe destiné à produire un résultat de calcul et un descripteur de qualité sur ledit résultat, puis envoyer ces deux éléments à un quatrième acteur 330, dont l'exécution est déclenchée par un troisième acteur 320. Chacune de ces branches comporte 30 au moins un acteur. [0061] Le troisième acteur 320 permet de synchroniser l'exécution du graphe, en synchronisant le démarrage des au moins deux premiers acteurs 310, 311, et en initialisant une horloge configurée pour émettre un signal d'interruption lorsqu'une durée est écoulée. Cette durée correspond à la 35 durée maximale d'exécution autorisée pour obtenir un résultat de calcul pour au moins un acteur tout en respectant les contraintes temps-réel. Dans un mode de réalisation de l'invention, cette durée est fixe. Par exemple, dans le cas de la compression vidéo, si la vidéo est encodée à 25 image par seconde, et qu'un graphe 300 est exécuté pour compresser chaque image de la vidéo, alors l'horloge devra être configurée sur une durée fixe de 1/25e de seconde pour tenir les contraintes temps réel. Il est également possible de configurer l'horloge avec une durée variable en fonction de contraintes internes ou externes à l'application. [0062] Le quatrième acteur 330 permet de sélectionner, au plus tard au signal d'interruption de l'horloge initialisée par l'acteur 320, l'acteur parmi les au moins deux premiers acteurs 310, 311 ayant le descripteur de qualité le plus favorable et de transférer les données de sortie de ce capteur comme données de sortie du calcul. Ainsi, le graphe permet de sélectionner, dans un temps déterminé permettant d'assurer les contraintes temps-réel, le meilleur résultat de calcul possible. Le quatrième acteur peut alors transférer les données de sortie les plus favorables, par exemple vers un autre acteur, un autre graphe ou un ensemble du graphe. Par exemple, dans un graphe destiné à la compression vidéo, il peut envoyer l'image compressée la plus favorable vers un acteur dont la fonction est d'enregistrer cette image compressée dans un fichier ; dans le cas d'un graphe pour la localisation, le quatrième acteur peut envoyer la position de l'utilisateur comme donnée de sortie à un acteur dont la fonction est d'afficher la position de l'utilisateur sur un plan. [0063] Dans un ensemble de modes de réalisation de l'invention, au moins un des deux premiers acteurs possède un temps d'exécution déterministe inférieur ou égal à la durée de l'horloge. Ceci permet de s'assurer qu'un résultat sera disponible en un temps borné, tout en se réservant la possibilité d'obtenir un résultat de meilleure qualité. [0064] Dans l'exemple de l'application de compression vidéo, il est possible de configurer un premier acteur pour effectuer une compression de chaque image selon un algorithme possédant un temps de calcul déterministe, par exemple moins de 1/25e de seconde, et un second acteur pour effectuer un algorithme de compression plus performant, mais dont le temps d'exécution varie en fonction des caractéristiques de chaque image. Ainsi, au signal d'interruption de l'horloge, le premier acteur a nécessairement terminé son calcul. Dans le cas d'une image défavorable, le second acteur n'a pas terminé le sien. Le quatrième acteur 330 sélectionne alors le résultat fourni par le premier acteur, qui est le seul disponible. Dans le cas d'une image favorable, le second acteur a terminé son calcul, avec un descripteur de qualité, et donc une qualité d'image à poids égal, supérieure à celle fournie par le premier acteur. Le quatrième acteur sélectionne alors le résultat de calcul fourni par ce second acteur. [0065] Dans l'exemple de l'application de localisation, un premier acteur peut calculer l'emplacement de l'utilisateur par odométrie. Ceci permet, grâce à un calcul local en temps borné, de fournir de manière certaine des coordonnées de localisation au signal d'interruption de l'horloge, même avec une forte marge d'erreur. Un second acteur peut être configuré pour localiser l'utilisateur grâce à des signaux GPS. Ce positionnement est beaucoup plus précis, mais peut être défaillant en cas de mauvaise réception des signaux GPS. Il peut également fournir un résultat plus ou moins précis en fonction du nombre de satellites fournissant un signal. Ainsi, le quatrième acteur est capable de sélectionner, en fonction du contexte d'exécution, la localisation la plus précise, tout en étant certain de disposer d'au moins une mesure de localisation. [0066] Dans un mode de réalisation de l'invention, le troisième acteur peut déclencher, en fonction d'un paramètre externe, l'exécution d'un sous-ensemble seulement des au moins deux premiers acteurs. Par exemple, il est possible de n'exécuter un acteur 312 destiné à calculer la même donnée que les acteurs 310 et 311 que dans certains cas, ou bien de n'exécuter que l'acteur 310 en fonction du contexte d'exécution du graphe. L'exécution ou non de certains acteurs peut par exemple dépendre de la disponibilité de moyens de calcul. Par exemple, si un acteur effectue une partie de ses calculs sur une plate-forme distante, il peut être désactivé si les moyens de connexion vers cette plate-forme sont indisponibles. L'exécution ou non des acteurs peut également dépendre de la disponibilité de moyens de calcul ou de communication. Par exemple, un acteur calculant une localisation à l'aide d'un système de GPS peut être désactivé si les signaux GPS sont indisponibles, ou si un nombre limités de satellites sont disponibles. Dans un autre mode de réalisation de l'invention, les acteurs sont activés ou désactivés en fonction de la puissance de calcul disponible ou souhaitée. Par exemple, dans une application de codage vidéo, il est possible de désactiver un acteur utilisant un algorithme de calcul gourmand en ressources dans un mode « économie d'énergie ». [0067] Un graphe 300 selon l'invention peut être compilé et exécuté en tant 5 que graphe indépendant. Il peut aussi être compilé et exécuté comme un module d'un graphe plus large. On peut alors parler de « module d'un graphe selon l'invention » ou « module selon l'invention ». Un graphe comprenant un module 300 selon l'invention peut comporter d'autres éléments selon l'état de l'art, le reste du graphe pouvant par exemple être un graphe CSDF classique 113 ou contenir d'autres modules 300 selon l'invention. Dans un ensemble de modes de mise en oeuvre de l'invention, un module 300 d'un graphe selon l'invention est appelé « TransactionModule ». [0068] Les figures 4a, 4b, 4c, 4d, représentent quatre exemples d'acteurs 15 d'un graphe selon l'invention. Ces acteurs sont des exemples non limitatifs permettant de mettre en oeuvre l'invention, d'autres acteurs étant également possibles. [0069] La figure 4a représente un exemple d'acteur 400a d'un graphe selon 20 l'invention. Cet acteur 400a peut par exemple former l'une des branches de calcul, ou l'un des au moins deux premiers acteurs comprenant des moyens pour exécuter de manière indépendante le calcul d'une même donnée. [0070] Cet acteur comprend deux canaux d'entrée 410a, 411a. Tous les nombres entiers supérieurs ou égaux à 1 de canaux d'entrée sont bien sûr 25 possibles. Il est par exemple possible d'avoir 1, 2, 3, 4 ou une pluralité de canaux d'entrée. L'acteur 400a peut comprendre des moyens pour effectuer tout type de traitement informatique, par exemple un calcul local, un calcul distribué sur une machine distante, récupérer des données depuis un réseau ou effectuer un calcul nécessitant des données externes obtenues à l'aide 30 d'un capteur. [0071] L'acteur 400a comprend un premier canal de sortie 420a, contenant la donnée calculée. Par exemple, si l'acteur 400a est destiné à calculer la localisation d'un utilisateur, le premier canal de sortie 420a peut contenir des coordonnées de l'utilisateur, suivant différents référentiels. Dans un autre 35 exemple, si l'acteur 400a est destiné à calculer une image vidéo compressée, le premier canal de sortie 420a peut contenir les données compressées, ou une adresse mémoire des données compressées. [0072] L'acteur 400a comprend également un second canal de sortie 421a, contenant un descripteur de qualité sur les données calculées produites sur 5 le canal 420a. Ce descripteur est générique, et de nombreuses représentations de qualité sont possibles. Par exemple, la représentation de qualité peut être un pourcentage. Elle peut également être une donnée liée à l'application considérée, par exemple une incertitude sur la position si l'acteur 400a est destinée à calculer une position, ou un ratio poids/qualité si l'acteur 10 400a est destiné à encoder une image vidéo. [0073] L'exécution d'un acteur 400a est déclenchée par un mécanisme de synchronisation. Les mécanismes de synchronisation sont décrits de manière générique par les différents modèles de flot de données, notamment par le principe de messages entre les différents acteurs. De nombreux 15 mécanismes de synchronisation et implémentations de ceux-ci sont disponibles. Dans un ensemble de modes de réalisation de l'invention, le mécanisme de synchronisation de l'acteur 400a est un sémaphore. Dans un mode de réalisation de l'invention, ledit sémaphore comporte un jeton. L'exécution de l'acteur 400a démarre alors lorsqu'un jeton est disponible 20 dans le sémaphore, et que l'acteur 400a s'empare de celui-ci. Dans un ensemble de modes de réalisation de l'invention, l'acteur 400a dispose d'un système d'horodatage lui permettant de signifier à d'autres acteurs la fin du transfert de l'ensemble de ses données d'entrée. 25 [0074] La figure 4b représente un exemple d'acteur 400b d'un graphe selon l'invention. Cet acteur 400b peut par exemple former le troisième acteur 320 d'un graphe selon l'invention. Cet acteur, appelé « SelectDuplicate », possède deux entrées 410b et 411b, et une sortie par branche de calcul. Cet acteur est destiné à dupliquer des données d'entrée afin de fournir des 30 paramètres de calcul identiques à chacun des au moins deux premiers acteurs 310, 311 d'une branche de calcul. Il permet également de synchroniser l'exécution de ces au moins deux premiers acteurs 310, 311 et d'initialiser une horloge pour synchroniser la fin de leur exécution. [0075] Cet acteur 400b comprend un premier canal d'entrée 410b. Ce canal 35 d'entrée comporte les données à fournir aux différentes branches de calcul. Par exemple, dans le cas d'une application de codage vidéo, il peut s'agir d'une image à compresser. Il comprend également un canal de sortie par branche, comprenant chacun la donnée dupliquée. Il comprend donc au moins deux canaux de sortie 420b et 421b, ainsi que des canaux de sortie optionnels, par exemple le canal 422b. [0076] L'acteur 400b comprend également une deuxième entrée 411b. Cette entrée contient un paramètre externe indiquant un sous-ensemble des au moins deux premiers acteurs 310, 311 à exécuter. Cette entrée peut par exemple prendre la forme d'un tableau de booléens dont la taille est égale au nombre de canaux de sortie, l'acteur 400b déclenchant uniquement le calcul des acteurs connectés à un canal de sortie dont la valeur est à « vrai » dans le canal d'entrée 411b. Les données du canal d'entrée 411b indiquant les acteurs à exécuter peuvent dépendre de nombreux paramètres ou contextes d'application. Par exemple, elles peuvent être issues d'un fichier de configuration utilisateur indiquant les moyens de calcul à utiliser ou non dans une application. Dans le cas ou certains calculs sont exécutés sur des moyens de calcul distants, le sous-ensemble des acteurs à exécuter décrit dans les données du canal d'entrée 411b peut également comprendre ceux pour lesquels les moyens de calcul adéquats sont disponibles. Ce sous- ensemble peut également dépendre du contexte d'exécution du graphe. Par exemple, dans le cas d'un graphe destiné à la localisation d'un individu, si un acteur calcule la position par odométrie et un second grâce à des signaux GPS, la deuxième entrée 411b peut indiquer de n'exécuter que l'acteur utilisant l'odométrie si les signaux G PS sont indisponibles. [0077] Dans un ensemble de modes de réalisation de l'invention, l'acteur 400b transfère des données identiques à au moins deux premiers acteurs 310, 311 préalablement à l'initialisation de l'horloge. Dans un mode de réalisation de l'invention, l'acteur 400b déclenche l'exécution d'au moins deux premiers acteurs 310, 311 par le don d'un jeton dans un sémaphore. Dans un ensemble de modes de réalisation de l'invention, chacun des au moins deux premiers acteurs 310, 311 produit un horodatage à la fin du transfert des données représentant les paramètres de calcul, et l'acteur 400b déclenche l'initialisation de l'horloge après réception des au moins deux horodatages. [0078] Cet acteur 400b est donné à titre d'exemple uniquement, et d'autres acteurs peuvent occuper la place d'un acteur 320 dans un graphe selon l'invention. Par exemple, dans un graphe selon l'invention avec deux acteurs 310, 311 ne nécessitant pas de données d'entrée, il est possible d'avoir un acteur 320 uniquement destiné à initialiser le calcul des acteurs 310, 311 et une horloge pour la synchronisation de la fin de celui-ci. Dans le cas où l'ensemble des au moins deux premiers acteurs 310, 311 est utilisé en permanence, le second canal d'entrée 411b n'est pas nécessaire. L'acteur est alors un « Duplicate » selon l'état de l'art représenté en figure 1 b qui initialise une horloge à la fin du transfert des données. De même, un acteur 320 peut comprendre autant de canaux de sortie qu'il y a de branches de calcul. [0079] La figure 4c représente un exemple d'acteur 400c d'un graphe selon l'invention. Cet acteur, également appelé « Transaction », est destiné à sélectionner, parmi un ensemble de canaux d'entrée, celui dont le descripteur de qualité est le plus favorable, et à transférer le résultat associé à un canal de sortie. Il peut ainsi remplir le rôle d'un quatrième acteur 330 d'un graphe selon l'invention. zo [0080] A cet effet, l'acteur 400c comporte au moins deux canaux d'entrée 410c, 411c. Il peut comprendre autant de canaux d'entrée qu'il y a de branches de calcul dans le graphe. Par exemple, il peut comprendre un troisième canal d'entrée 412c. Chacun des canaux d'entrée comporte un ensemble de données d'entrée et un descripteur de qualité sur celles-ci. Ces 25 données d'entrée et descripteur de qualité correspondent à la sortie des au moins deux premiers acteurs 310, 311 ou branches de calcul. [0081] Au plus tard au signal d'interruption de l'horloge 430 initialisée par un acteur 320, l'acteur 400c sélectionne le canal parmi les au moins deux canaux d'entrée 410c, 411c présentant le descripteur de qualité le plus 30 favorable et transfère ses données de sortie vers son canal de sortie 420c. [0082] En fonction de l'exécution du graphe, toutes les branches de calcul n'ont pas nécessairement terminé leur calcul au signal d'interruption de l'horloge. Dans ce cas, une branche de calcul n'ayant pas terminé son calcul ne produit ni données de sortie ni descripteur de qualité. Dans un ensemble 35 de modes de réalisation de l'invention, le quatrième acteur 330, par exemple un acteur « Transaction » 430, comprend des moyens pour générer une erreur lorsque, au signal d'interruption de l'horloge, le nombre parmi les au moins deux premiers acteurs ayant produit un descripteur de qualité est inférieur à un seuil prédéfini. Dans un mode de réalisation de l'invention, ce seuil dépend de caractéristiques opérationnelles. Par exemple, dans une application de géo-localisation, une mesure peut être considérée comme fiable si un choix entre le résultat d'au moins deux branches est effectué. Dans ce cas, l'acteur 400c comprend des moyens pour générer une erreur lorsque, au signal d'interruption de l'horloge, moins de deux canaux d'entrée présentent un descripteur de qualité. Dans un autre mode de réalisation de l'invention, les contraintes temps-réel impliquent de disposer d'un résultat sur au moins une branche de calcul au signal d'interruption de l'horloge. C'est par exemple le cas dans un graphe destiné à encoder une vidéo en temps réel avec par exemple 25 images à encoder par seconde. Dans ce cas, un acteur 400c peut comprendre des moyens pour générer une erreur si aucun résultat n'est disponible au signal d'interruption de l'horloge. [0083] Dans un ensemble de modes de réalisation de l'invention, la sélection par un quatrième acteur 330, par exemple un acteur « Transaction » 400c, de l'acteur ou de la branche dont le critère de qualité présente la valeur la plus favorable est effectuée au signal d'interruption de l'horloge. Dans un autre ensemble de modes de réalisation de l'invention, cette sélection peut s'opérer avant le signal d'interruption de l'horloge. Par exemple, cette sélection peut s'opérer lorsqu'au moins un nombre prédéfini parmi les au moins deux premiers acteurs ont produit un descripteur de qualité. Dans un mode de réalisation de l'invention, la sélection peut s'opérer si l'ensemble des canaux d'entrée 410c, 411c, 412c... d'un acteur « Transaction » 400c ont produit un descripteur de qualité, et donc si tous les au moins deux premiers acteurs 310, 311... ont terminé leur calcul. Dans un autre mode de réalisation de l'invention, un graphe peut être configuré pour sélectionner le résultat le plus favorable si au moins un certain nombre de branches ont terminé leur calcul. [0084] Ceci permet une grande flexibilité dans le choix du meilleur résultat de calcul. Par exemple, dans le cas d'une application de géo-localisation comprenant trois acteurs pour le calcul de la position d'un utilisateur (par 35 exemple, un par odométrie, un utilisant des signaux GPS et un utilisant des signaux GSM), il est possible de définir les règles ci-après pour la sélection de la position la plus précise. Si avant le signal d'interruption de l'horloge, au moins deux acteurs ont terminé leur calcul et fourni une localisation et une précision, la localisation la plus précise parmi les deux est sélectionnée. A 5 défaut, au signal d'interruption de l'horloge, si un des acteurs a terminé son calcul, la position retournée est sélectionnée. La compilation d'un graphe selon l'invention permet de s'assurer qu'un résultat de calcul est retourné en temps voulu. Toutefois, si en cas d'anomalie dans l'exécution du graphe (par exemple, panne ou erreur matérielle par essence imprévisible) ce n'était pas 10 le cas, et qu'aucun acteur n'a terminé son calcul de géo-localisation, une erreur est générée. [0085] L'acteur « Transaction » 400c est donné à titre d'exemple uniquement d'un quatrième acteur 330 d'un graphe selon l'invention. 15 [0086] La figure 4d représente un exemple d'acteur 400d d'un graphe selon l'invention. Cet acteur, appelé, « IterativeTransaction », est une spécialisation d'un acteur « Transaction » 400c. [0087] Cet acteur 400d est en grande partie semblable à l'acteur 400c. Il comprend notamment autant de canaux d'entrée qu'il y a de branches de 20 calcul, avec au moins deux canaux d'entrée 410d et 411d, et par exemple un troisième canal d'entrée 412d. Il comprend également un canal de sortie 420d et sélectionne le résultat le plus favorable parmi ses canaux d'entrée ayant produit un descripteur de qualité au plus tard au signal d'interruption de l'horloge 430. 25 [0088] L'acteur 400d se distingue de l'acteur 400c en ce qu'au moins un parmi les au moins deux premiers acteurs 310, 311 liée à canal d'entrée, par exemple le canal 411d, produit une mise à jour de sa donnée ou de son ensemble de données, ainsi que de son descripteur de qualité associé. Dans un ensemble de modes de mise en oeuvre de l'invention, ledit acteur produit 30 des résultats et descripteurs de qualité successifs, et donne un jeton à un sémaphore lorsque son exécution est terminée. [0089] Ce fonctionnement est particulièrement adapté pour des algorithmes itératifs améliorant progressivement leur résultat par itérations successives. Dans un mode de réalisation de l'invention, au signal d'interruption de 35 l'horloge, l'acteur « IterativeTransaction » 400d considère les derniers résultats et descripteur de qualité fournis par ledit acteur pour sélectionner le meilleur résultat parmi ses canaux d'entrée. Dans un mode de réalisation de l'invention, au signal d'interruption de l'horloge, l'acteur « IterativeTransaction » 400d vérifie la présence d'un résultat de calcul et 5 d'un descripteur de qualité sur un canal d'entrée associé à un acteur produisant des résultats de manière itérative, par exemple le canal 411d, pour vérifier le nombre de résultats disponibles. Dans un mode de réalisation de l'invention, l'acteur « IterativeTransaction » 411d déclenche la sélection du résultat le plus favorable avant le signal d'interruption de l'horloge si le 10 nombre de jetons reçus dans un sémaphore depuis les canaux d'entrée est au moins égal à un seuil prédéfini. [0090] Ces propriétés permettent à un graphe selon l'invention de tirer le meilleur parti des algorithmes itératifs. Notamment, cela permet, à une date prédéfinie, de récupérer le dernier résultat produit par l'algorithme itératif, qui 15 est donc le meilleur disponible à cette date. Un graphe selon l'invention est également capable de comparer des résultats produits par des algorithmes itératifs et non itératifs. Enfin, un graphe selon l'invention est capable de terminer le traitement des données plus tôt si l'algorithme itératif a terminé son traitement, ce qui est par nature imprévisible. 20 [0091] L'acteur 400d est donné à titre d'exemple uniquement d'un acteur 330 destiné à sélectionner le résultat de calcul le plus favorable au plus tard au signal d'interruption d'une horloge 430 tout en prenant en entrée des données issues d'acteurs produisant des mises à jour de leurs données de sortie et descripteurs de qualité. 25 [0092] La figure 5 représente un exemple de graphe selon l'invention, dans lequel les branches du module comportent deux canaux d'entrée. [0093] Ce graphe, donné à titre d'exemple uniquement, comprend trois branches pour le calcul d'une donnée de sortie, chacune étant constituée 30 d'un acteur 510, 511, 512. Chaque acteur comprend deux canaux d'entrée et deux canaux de sortie et est semblable à l'acteur 400a. Il comprend également un acteur 520 comprenant des moyens pour déclencher l'exécution du calcul d'un sous-ensemble des acteurs 510, 511 et 512 suivant une liste de branches à exécuter obtenues sur son canal d'entrée. Il comprend également des moyens pour initialiser une horloge 540 pour émettre un signal d'interruption lorsqu'une durée est écoulée. [0094] L'acteur 520 fournit la liste des branches à exécuter à deux acteurs 521, 522 de type « SelectDuplicate » 400b, chacun de ces acteurs 5 dupliquant une donnée d'entrée pour chacun des acteurs 510, 511, 512 à exécuter. Ainsi, les acteurs 510, 511, 512 à exécuter disposent de deux jeux de données d'entrée identiques. Dans un mode de réalisation de l'invention, chacun des acteurs 521, 522 donne un jeton à un sémaphore lié à chacun des acteurs 510, 511, 512, et l'exécution de chacun des acteurs 510, 511, 10 512 démarre lorsque son sémaphore a reçu autant de jetons qu'il possède de canaux d'entrée. Chacun des acteurs 510, 511, 512 produit un résultat de calcul et un descripteur de qualité en sortie. [0095] Dans ce graphe, chaque branche 510, 511 et 512 est indépendante, et peut consister en un seul acteur ou en un graphe CSDF classique. Il est 15 ainsi possible de déterminer, pour chacun de ces graphes, un temps d'exécution, et donc de prévoir, par exemple à la compilation, un temps d'exécution pour certaines branches. Pour des branches dont le temps d'exécution dépend de la typologie des données d'entrée, il peut être possible de prévoir un temps d'exécution minimal et/ou maximal. Enfin, il est 20 possible d'identifier les branches pour lesquelles aucune panne n'est censée survenir (par exemple, des branches comportant uniquement des calculs locaux), et les branches pour lesquelles un risque de défaillance existe (par exemple, si la capacité de calcul dépend de la réception de signaux ou si une partie du calcul est effectuée sur une plate-forme distante). 25 [0096] Enfin, un dernier acteur 530 de type « Transaction » 400c sélectionne, au plus tard au signal d'interruption de l'horloge 540, l'acteur parmi les acteurs 510, 511, 512 ayant produit le descripteur de qualité le plus favorable et transfère son résultat vers le canal de sortie du graphe. 30 [0097] La figure 6 représente un exemple de procédé de compilation d'un graphe selon l'invention. [0098] Ce procédé, donné à titre d'exemple illustratif uniquement, a pour but d'analyser un graphe, tel que par exemple le graphe 500, et de le convertir en acteurs systèmes afin de pouvoir l'exécuter, tout en validant certaines 35 contraintes d'exécution temps-réel. [0099] Un exemple de procédé de compilation d'un graphe selon l'invention peut comprendre plus spécifiquement : - Lorsque les modules d'un graphe selon l'invention ne sont pas créés automatiquement, une étape 610 d'identification et vérification des motifs dans un graphe de flot de données ; - Une étape 620 de calcul des latences sur les branches des motifs, et de vérification qu'au moins une branche termine à l'échéance ; - Une étape 630 de création des acteurs système et mécanismes de synchronisation à partir des « SelectDuplicate » et « Transactions ». [00100] L'identification et la création de graphes selon l'invention peuvent être effectuées directement par une interface de programmation. Il est également possible, à partir d'un graphe, par exemple le graphe 500, d'identifier, à l'étape 610, les modules 300 du graphe selon l'invention, puis de les compiler spécifiquement. Dans un mode de mise en oeuvre de l'invention appliqué aux graphes CSDF, l'étape 610 peut consister en la détection des « TransactionModule » 300 au sein d'un graphe CSDF. Dans le cas où une interface de programmation permet d'insérer directement des modules selon l'invention, un procédé de compilation permet de passer directement à l'étape 620. zo [00101] Un procédé de compilation d'un graphe selon l'invention comprend notamment une étape de création d'au moins deux premiers groupes d'instructions d'un code informatique correspondant aux au moins deux premiers acteurs 310, 311 pour exécuter de manière indépendante le calcul d'une même donnée ou d'un même ensemble de données, et pour produire 25 un descripteur de qualité sur le résultat obtenu, l'exécution du calcul par les au moins deux premiers groupes d'instructions d'un code informatique étant déclenchée par un système de synchronisation. Ces au moins deux premiers acteurs 310, 311 peuvent constituer en eux-mêmes une branche de calcul indépendante, ou faire partie d'une branche de calcul indépendante pour le 30 calcul d'une donnée ou d'un ensemble de données. Dans ce dernier cas la branche indépendante peut être compilée suivant une méthode de l'état de l'art, par exemple comme une branche d'un graphe CSDF. [00102] L'étape 620 consiste à identifier, dans le cadre de l'exécution normale du graphe, la latence de chaque acteur ou branche indépendante. 35 Cette étape permet de s'assurer que le graphe est capable de produire un résultat de calcul en temps-réel. Elle peut par exemple consister en une étape de vérification qu'au moins un parmi les au moins deux premiers groupes d'instructions d'un code informatique est capable d'exécuter son calcul de manière déterministe dans une durée prédéfinie. Le calcul de latence peut également s'appliquer à une branche indépendante, par exemple compilée comme un graphe CSDF classique. Cette étape peut s'exécuter avant ou après la création des au moins deux premiers acteurs 310, 311. [00103] Dans un mode de réalisation de l'invention, l'algorithme de 10 compilation renvoie une erreur de compilation lorsqu'aucun des au moins deux groupes d'instructions d'un code informatique ne remplit ce critère. [00104] L'étape 630, pouvant par exemple être exécutée une fois que l'étape 620 est validée, comprend la création d'acteurs système et mécanismes de synchronisation. 15 [00105] Elle peut notamment comprendre une étape de création d'un troisième groupe d'instructions d'un code informatique correspondant à un troisième acteur 320 pour déclencher l'exécution du calcul par chacun desdits au moins deux premiers groupes d'instructions d'un code informatique, et initialiser une horloge configurée pour émettre un signal 20 d'interruption lorsque ladite durée prédéfinie est terminée. [00106] Elle peut également comprendre une étape de création d'un quatrième groupe d'instructions d'un code informatique correspondant à un quatrième acteur 330 pour exécuter, au plus tard au signal d'interruption de l'horloge : la sélection, parmi l'ensemble des au moins deux premiers 25 groupes d'instructions d'un code informatique ayant produit un descripteur de qualité, de celui dont le descripteur présente la valeur la plus favorable ; le transfert de la donnée ou de l'ensemble de données calculé par le groupe d'instructions d'un code informatique sélectionné. [00107] Les paragraphes ci-dessous décrivent de manière plus détaillée, à 30 titre d'exemple uniquement, un ensemble d'objets système et un service support système permettant de compiler un graphe selon l'invention, ainsi qu'un algorithme de compilation écrit en pseudo-code. [00108] Un système pour l'exécution d'un graphe compilé par un procédé 35 selon l'invention peut comprendre un service système de support adapté. Ce service système de support peut notamment comprendre des moyens pour le transfert de données. De nombreuses implémentations sont possibles pour le transfert de données. Par exemple, il peut s'agir d'une copie mémoire, de l'envoi d'une adresse mémoire, de protocoles complexes sur un bus dédié ou de protocoles réseau. Il est également possible de disposer pour un même graphe de plusieurs implémentations du transfert de données en fonction des acteurs impliqués. [00109] Le service système de support peut également comprendre des moyens pour la gestion du temps et des interruptions. Par exemple, ces moyens peuvent comprendre la création d'une horloge ou la configuration d'une interruption. Lorsque le graphe selon l'invention comprend plusieurs entrées, il est possible d'incrémenter un compteur à chaque fois qu'une entrée est prise en compte, et de configurer l'horloge ou l'interruption dès que le compteur atteint le nombre d'entrées pour produire un signal d'interruption à l'échéance d'une durée prédéfinie. Si chaque branche signifie la fin de son calcul à l'aide d'un sémaphore, le service système de support peut déclencher la sélection du meilleur résultat au signal d'interruption en remplissant l'ensemble des sémaphores liés aux différentes branches. [00110] Le service système support peut également réinitialiser l'ensemble des acteurs du module à la fin de la transaction. Il peut notamment, pour ce faire, interrompre tous les acteurs du module, les réinitialiser ainsi que les sémaphores et les paramètres du service système. Ainsi, une nouvelle transaction peut avoir lieu avec de nouveaux paramètres. [00111] Un système pour l'exécution d'un graphe selon l'invention peut 25 également comprendre des acteurs systèmes spécifiques, qui sont créés lors de la compilation d'un module. [00112] Dans un mode de réalisation de l'invention, la compilation d'un acteur « SelectDuplicate » 400b produit les objets système suivants: - un sémaphore par branche à capacité de un jeton chacun, initialement 30 vide; - un « AppinputTrigger »: possède les entrées d'activation et de données, et déclenche le transfert de données vers les « BranchInputTriggers » liés aux acteurs actifs, et met à jour l'horodatage une fois le transfert des données terminées; - un « BranchInputTrigger » par branche: en attente du jeton fourni par « AppinputTrigger », il déclenche la mise à disposition des données aux acteurs de la branche concernée et l'activation d'une branche. [00113] Dans un mode de réalisation de l'invention, la compilation d'un 5 acteur « Transaction » 400c ou produit les objets système suivants: Un « BranchOutputTrigger » par branche: ne possède que le couple d'entrées pour les données et le descripteur de qualité. Il est destiné à déclencher le transfert des données vers l'« AppOutputTrigger » et à placer un jeton dans un sémaphore pour signifier la fin de l'exécution 10 de sa branche; - Un sémaphore dont le nombre d'entrées correspond au nombre de branches nécessaires pour déclencher la sélection du meilleur résultat ; - Un « AppOutputTrigger » : « AppOutputTrigger » est en attente d'un 15 nombre de jetons au plus égal au nombre de branches du module sur le sémaphore. Ce sémaphore peut être rempli soit à la fin de l'exécution des branches, soit au signal d'interruption de l'horloge. Lorsque le sémaphore est rempli, l' « AppOutputTrigger » sélectionne le résultat le plus favorable à partir des descripteurs de qualité et 20 déclenche le transfert des données de sortie. [00114] Dans un mode de réalisation de l'invention, la compilation d'un acteur « IterativeTranscation » 400d, est semblable à celle d'un acteur « Transaction » 400c, à la différence près que le « BranchOutputTrigger » est remplacé par un « IterativeBranchOutputTrigger » pour chaque branche 25 itérative. L'« IterativeBranchOutputTriger » possède en plus du « BranchOutputTrigger » une entrée de validation pour les résultats itératifs. [00115] Les acteurs système ci-dessus sont donnés à titre d'exemple uniquement. D'autres acteurs systèmes sont possibles pour mettre en oeuvre un graphe selon l'invention sur différentes plateformes. 30 [00116] Les algorithmes présentés en annexe, donnés à titre d'exemple uniquement, permettent de détecter un graphe selon l'invention, d'identifier les branches indépendantes, de vérifier qu'au moins une branche s'exécute en un temps borné et de créer des objets système permettant d'exécuter le 35 graphe. Dans le cadre de ces algorithmes, un graphe selon l'invention est appelé un « TransactionModule ». Les algorithmes ci-dessous sont écrits dans un pseudo code de langue anglaise dont les mots-clés ont la signification suivante : - Input (de l'anglais entrée) : paramètre d'entrée de l'algorithme Output (de l'anglais sortie) : paramètre de sortie de l'algorithme - For ... do ... end (de l'anglais pour les...faire...fin) : pour tous les éléments cités entre le mot-clé « for » et le mot-clé « do », l'ensemble de la boucle entre le mot-clé « do » et le premier mot-clé « end » possédant le même niveau d'indentation que le mot-clé « for » est 10 exécutée ; If then ...end (de l'anglais si...alors...fin) : si la condition située entre « if » et « then » est vérifiée, l'ensemble de la boucle indentée à partir de la ligne du dessous est exécutée, jusqu'au premier mot-clé « end » possédant une indentation identique au mot-clé « if » ; 15 While...do...end (de l'anglais tant que...faire...fin) : tant que la condition entre le mot-clé « while » et le mot-clé « do » est vérifiée, la boucle entre le mot-clé « do » et le premier mot-clé « end » ayant le même niveau d'indentation que le premier mot-clé « while » est effectuée ; 20 - If then else ... end (de l'anglais si...alors...sinon...fin) : si la condition entre le mot-clé « if » et le mot-clé « then » est vérifiée, alors l'ensemble de de la boucle entre le mot-clé « then » et le premier mot-clé « else » possédant le même niveau d'indentation que le mot-clé « if » est exécutée. Sinon, l'ensemble de la boucle entre les premiers 25 mot-clés « else » et « end » possédant le même niveau d'indentation que le mot-clé « if » est exécutée ; - If then else if ... then ... end (de l'anglais si...alors...sinon si...alors...fin) : si la condition entre le mot-clé « if » et le mot-clé « then » est vérifiée, alors l'ensemble de de la boucle entre le mot-clé 30 « then » et le premier mot-clé « else » possédant le même niveau d'indentation que le mot-clé « if » est exécutée. Sinon, si la condition entre le mot-clé « else if » et le mot-clé « then » est vérifiée, l'ensemble de la boucle entre le second mot-clé « then » et le premier mot-clés « end » possédant le même niveau d'indentation que le mot- 35 Clé « if » est exécutée. Forall the ... do ... end (de l'anglais pour les tous les...faire...fin) : pour tous les éléments cités entre le mot-clé « forall the » et le mot-clé « do », l'ensemble de la boucle entre le mot-clé « do » et le premier mot-clé « end » possédant le même niveau d'indentation que le mot-clé « for » est exécutée ; L'algorithme 1, ainsi que les autres exemples d'algorithmes présentés dans la présente demande comprend également des symboles mathématiques ou informatiques conservant leur signification classique. Par exemple : e signifie "Appartenant à" ou "appartient à" 10 - « signifie "n'appartenant pas à" ou "n'appartient pas à" = signifie "est égal à" # signifie "est différend de" signifie un assignation de la valeur de l'opérande de droite à l'opérande de gauche 15 - U représente l'union de l'ensemble situé dans l'opérande de droite et l'ensemble situé dans l'opérande de gauche I I représente le cardinal (taille en nombre d'éléments) de l'ensemble situé entre les deux barres verticales Selon une norme répandue dans un grand nombre de programmes 20 informatiques, les lignes dont les deux premiers caractères sont « // » sont des lignes de commentaires. Ces lignes sont destinées uniquement à faciliter la compréhension du code par un programmeur, et ne font pas partie de l'algorithme en tant que tel. 25 [00117] L'algorithme 1 permet, à partir d'un graphe de flot de données, d'identifier l'ensemble des graphes selon l'invention, appelés ici TransactionModule. L'algorithme 2, donné en annexe permet d'identifier et vérifier les entrées de ce graphe. 30 [00118] L'algorithme 3, en annexe, comprend l'identification et la vérification des sorties du graphe, ainsi que l'identification des acteurs sur un chemin entre une entrée et une sortie. [00119] Un graphe selon l'invention peut constituer une partie d'un graphe 35 CSDF plus large. Cependant, en dehors de ces entrées et sorties principales il ne doit de préférence pas contenir de connexion extérieure vers un des acteurs du graphe. l'algorithme 4, dont un exemple de code est fourni en annexe, permet de vérifier cette propriété. [00120] En particulier cet algorithme comprend préalablement à l'étape de 5 création d'au moins deux groupes d'instructions d'un code informatique correspondant à au moins deux premiers acteurs : une étape de vérification de l'existence des au moins deux premiers acteurs, du troisième acteur et du quatrième acteur ; une étape de vérification que les canaux d'entrée des au moins deux premiers acteurs sont connectés au troisième acteur ; une étape 10 de vérification que les canaux de sortie des au moins deux premiers acteurs sont connectés au quatrième acteur, une étape de vérification que les canaux de sortie du troisième acteur sont connectés aux au moins deux premiers acteurs ; une étape de vérification que les canaux d'entrée du quatrième acteur sont connectés aux au moins deux premiers acteurs. 15 [00121] L'algorithme 5, dont un exemple de code est fourni en annexe, permet de construire les acteurs pour chacune des branches et de vérifier que les branches sont bien indépendantes. 20 [00122] La figure 7 représente un exemple de graphe selon l'invention pour le traitement d'images temps-réel dans le cadre de l'assistance à la conduite d'un véhicule. [00123] Cette application, donnée à titre d'exemple uniquement, effectue du traitement d'images avec des contraintes temps-réel, dans le contexte d'un 25 système avancé d'aide à la conduite d'un véhicule (ADAS ou Advanced Driver Assistance System) pour l'identification des panneaux de signalisation (indications, limites de vitesses, interdictions). L'application lit des images de taille maximum WxH, où W (de l'anglais Width) représente la largeur de l'image et H sa hauteur, depuis une source externe (capteur, caméra vidéo) 30 à une fréquence de 1/x, où x représente la fréquence de lecture des images. Chaque image est traitée par une suite d'algorithmes de traitement du signal. Cette application doit produire une pluralité descripteurs de panneaux de signalisation identifiés en une durée limite à partir de l'acquisition de l'image. [00124] Le graphe 7 pour le traitement d'images est exécuté pour chaque 35 nouvelle image à analyser. Dans le cas où 25 images sont produites par seconde, il doit s'exécuter en 1125e de seconde. On notera dans l'exemple t le temps maximal autorisé pour l'exécution du graphe. Le graphe 7 reçoit, pour chaque image, une donnée d'entrée « I » 700. Cette donnée peut par exemple comprendre les données brutes d'une image capturée par la caméra. [00125] Un premier acteur algorithmique « E » 710 consiste à améliorer l'image d'entrée. Dans le cadre du graphe, cet acteur est entouré de trois acteurs « Duplicate » 701, « SelectDuplicate » 702 et « IterativeTransaction » 711. L'acteur « IterativeTransaction » 711 est lié à 10 une horloge s'assurant que l'étape d'amélioration de l'image s'exécute au maximum dans une durée a. Un second acteur algorithmique « D » 720 permet d'identifier les zones d'intérêt, en l'occurrence les panneaux de signalisation. Ces acteurs peuvent être compilés et exécutés comme un graphe CSDF selon l'état de l'art. 15 [00126] Enfin, un module « I » 730 du graphe selon l'invention est chargé d'analyser les zone d'intérêt afin d'identifier et extraire l'information des panneaux de signalisation. Les algorithmes d'extraction d'information sont complexes à mettre en oeuvre, et leur temps d'exécution varie en fonction d'un paramètre de qualité. Afin d'assurer l'obtention d'au moins un résultat, 20 et d'obtenir le meilleur résultat possible selon plusieurs paramètres de qualité en un temps déterministe, un graphe selon l'invention est mis en oeuvre. La durée maximale autorisée pour l'analyse des zones d'intérêt sera notée b. [00127] Ce graphe comprend une pluralité d'acteurs « Tqo » 731, « Tql » 732 ... « TqN » 733 permettant d'analyser les panneaux selon différents 25 paramètres de qualité. Ces acteurs s'exécutent en parallèle et permettent d'obtenir une analyse plus ou moins fiable, ainsi qu'un descripteur de qualité associé. Afin de garantir la fourniture d'un résultat en temps voulu, au moins un parmi la pluralité d'acteurs, par exemple l'acteur « Tqo » 731 possède une latence déterministe et bornée inférieure à la durée b. Le module du graphe 30 730 comprend également un acteur « Duplicate » 734 et un acteur « SelectDuplicate » 735 pour fournir les zones d'intérêts et paramètres d'entrée à la pluralité d'acteurs 731, 732, ..., 733, ainsi que d'initialiser une horloge devant produire un signal d'interruption au bout de la durée b. Enfin, un acteur « Transaction » 736 sélectionne, au plus tard au signal 35 d'interruption de l'horloge, l'acteur parmi la pluralité d'acteurs 731, 732, ..., 733 ayant terminé son traitement et produit le descripteur de qualité le plus favorable, et transfère ses résultats de calcul à la sortie « 0 » 740. [00128] Un graphe selon l'invention permet donc bien, dans ce cas, de tenir des contraintes temps-réel et de fournir un résultat de calcul au moment voulu. Il permet également de sélectionner, à une date limite, la boucle de traitement ayant terminé son calcul et fourni le résultat de la meilleure qualité disponible. Il permet donc de garantir la disponibilité d'un résultat de calcul en temps réel, tout en se réservant la possibilité d'avoir le résultat de calcul présentant la meilleure qualité possible dans le temps imparti. 1001291 Les exemples donnés ci-dessus sont donnés à titre indicatif uniquement, et ne limitent en rien la portée de l'invention, définie par les revendications ci-dessous. ANNEXES ALGORITHME 1: Identification et vérification des TransactionModules dans un graphe flot de données 20 Input : Graphe flot de données (G(V, A)) Output : Ensemble des TransactionModules (M) M4-Ø A 4- 0 /1 ensemble des SelectDuplicates déjà traités foralLthe y e V do 25 if v.type = SelectDuplicate A y « A then // identification des paramètres d'entrée du module d v.port(activation).source if d.type Duplicate then erreur(les SelectDuplicate doivent recevoir leur schéma 30 d'activation d'un Duplicate) end n ly.sucessors1 // identification/vérification des entrées du module // cf. Algorithme 2 35 D modulelnputs(cl, n) A÷-AuD // identification/vérification des sorties (T) // identification des acteurs entre une entrée et une sortie // cf. Algorithme 3 40 (S, T ) moduleOutputs(D, n) 10 // vérification que tous les prédécesseurs des acteurs sont dans le module // i.e. pas de connexion extérieure // cf. Algorithme 4 moduleCheck(S, D) // construction des ensembles d'acteurs par branche // vérification que les branches sont indépendantes // cf. Algorithme 5 B moduleBranches(S, D, n) M M u {[d, D, B, T]} end end ALGORITHM 2: Identification et vérification des entrées d'un TransactionModule 15 Input : Duplicate du module (d), Nombre de branches du module (n) Output : Ensemble des SelectDuplicates (D) D REVENDICATIONS1. Système d'exécution d'un graphe de flot de données (300), ledit graphe de flot de données (300) comprenant : - Au moins deux premiers acteurs (310,311), comprenant chacun des moyens pour exécuter de manière indépendante un calcul d'un même ensemble de données comprenant au moins une donnée, et produire un descripteur de qualité de l'ensemble de données, l'exécution du calcul par chacun desdits au moins deux premiers acteurs étant déclenchée par un système de synchronisation ; - Un troisième acteur (320), comprenant des moyens pour déclencher l'exécution du calcul par chacun desdits au moins deux premiers acteurs, et initialiser une horloge configurée pour émettre un signal d'interruption lorsqu'une durée est écoulée ; - Un quatrième acteur (330), comprenant des moyens pour exécuter, au plus tard au signal d'interruption de ladite horloge : - La sélection, parmi l'ensemble desdits au moins deux premiers acteurs ayant produit un descripteur de qualité, de celui dont le descripteur présente la valeur la plus favorable ; - Le transfert de l'ensemble de données calculé par l'acteur sélectionné. 2. Système d'exécution d'un graphe de flot de données selon la revendication 1, dans lequel au moins un desdits deux premiers acteurs (310, 311) est configuré pour s'exécuter de manière déterministe en un temps inférieur ou égal à la durée de l'horloge. 3. Système d'exécution d'un graphe de flot de données selon l'une des revendications 1 à 2, dans lequel le système de synchronisation de chacun desdits au moins deux premiers acteurs (310, 311) est un sémaphore, et le troisième acteur (320) déclenche l'exécution du calcul par chacun desdits au moins deux premiers acteurs (310, 311) par le don d'un jeton audit sémaphore. 4. Système d'exécution d'un graphe de flot de données selon l'une des revendications 1 à 3, dans lequel le troisième acteur (320) comprend des moyens pour transférer des données représentant des paramètres de calcul identiques (420b, 421b, 422b) à chacun desdits au moins deux premiers acteurs (310, 311), préalablement à l'initialisation de l'horloge. 5. Système d'exécution d'un graphe de flot de données selon la revendication 4, dans lequel chacun des au moins deux premiers 10 acteurs (310, 311), produit un horodatage à la fin du transfert des données représentant des paramètres de calcul, et le troisième acteur (320) déclenche l'initialisation de l'horloge après réception des au moins deux horodatages. 15 6. Système d'exécution d'un graphe de flot de données selon l'une des revendications 1 à 5, dans lequel le troisième acteur (320) est configuré pour déclencher l'exécution d'un sous-ensemble uniquement des au moins deux premiers acteurs, en fonction d'un paramètre externe audit troisième acteur indiquant le sous-ensemble des au 20 moins deux premiers acteurs à exécuter (411b). 7. Système d'exécution d'un graphe de flot de données selon la revendication 6, dans lequel le sous-ensemble des au moins deux premiers acteurs (311, 311) à exécuter comprend tous ceux pour 25 lesquels les moyens de calcul adéquats sont disponibles. 8. Système d'exécution d'un graphe de flot de données selon l'une des revendications 1 à 7, dans lequel le quatrième acteur (340) comprend des moyens pour générer une erreur, lorsque, au signal d'interruption 30 de l'horloge, le nombre parmi les au moins deux premiers acteurs (310, 311) ayant produit un descripteur de qualité est inférieur à un seuil prédéfini. 9. Système d'exécution d'un graphe de flot de données selon l'une des 35 revendications 1 à 8, dans lequel le quatrième acteur est configuré pour sélectionner l'acteur dont le critère de qualité présente la valeur la plus favorable au signal d'interruption de l'horloge. 10. Système d'exécution d'un graphe de flot de données selon l'une des revendications 1 à 8, dans lequel le quatrième acteur est configuré pour sélectionner l'acteur dont le critère de qualité présente la valeur la plus favorable avant signal d'interruption de l'horloge, lorsqu'au moins un nombre prédéfini parmi les au moins deux premiers acteurs ont produit un descripteur de qualité. 11. Système d'exécution d'un graphe de flot de données selon l'une des revendications 1 à 10, dans lequel au moins un parmi les au moins deux premiers acteurs est configuré pour produire une mise à jour du calcul de son ensemble de données, ainsi que de son descripteur de qualité. 12. Procédé de compilation d'un graphe de flot de données, ledit procédé comprenant : - Une étape de création d'au moins deux groupes d'instructions d'un code informatique correspondant à au moins deux premiers acteurs (310, 311) pour exécuter de manière indépendante le calcul d'un même ensemble de données comprenant au moins une donnée, et produire un descripteur de qualité de l'ensemble de données, l'exécution du calcul par chacun desdits au moins deux groupes d'instructions d'un code informatique étant déclenchée par un système de synchronisation ; - Une étape de vérification qu'au moins un parmi les au moins deux groupes d'instructions d'un code informatique est capable d'exécuter son calcul de manière déterministe dans une durée prédéfinie (620); - Une étape de création d'un troisième groupe d'instructions d'un code informatique correspondant à un troisième acteur (320), pour déclencher l'exécution du calcul par chacun desdits au moins deux groupes d'instructions d'un code informatique, et initialiser une horloge configurée pour émettre un signal d'interruption lorsque ladite durée prédéfinie est terminée ;Une étape de création d'un quatrième groupe d'instructions d'un code informatique correspondant à un quatrième acteur (330), pour exécuter, au plus tard au signal d'interruption de ladite horloge : - La sélection, parmi l'ensemble desdits au moins deux groupes d'instructions d'un code informatique ayant produit un descripteur de qualité, de celui dont le descripteur présente la valeur la plus favorable ; - Le transfert de l'ensemble de données calculé par le groupe d'instructions d'un code informatique sélectionné. 13. Procédé selon la revendication 12, comprenant préalablement à l'étape de création d'au moins deux groupes d'instructions d'un code informatique correspondant à au moins deux premiers acteurs : Une étape de vérification de l'existence des au moins deux premiers acteurs, du troisième acteur et du quatrième acteur ; - Une étape de vérification que les canaux d'entrée des au moins deux premiers acteurs sont connectés au troisième acteur ; - Une étape de vérification que les canaux de sortie des au moins deux premiers acteurs sont connectés au quatrième acteur ; Une étape de vérification que les canaux de sortie du troisième acteur sont connectés aux au moins deux premiers acteurs ; - Une étape de vérification que les canaux d'entrée du quatrième acteur sont connectés aux au moins deux premiers acteurs. 14. Procédé selon l'une des revendications 12 et 13, dans lequel une erreur de compilation est générée lorsqu'aucun des au moins deux premiers groupes d'instructions d'un code informatique correspondant à au moins deux premiers acteurs (310, 311) n'est capable d'exécuter son calcul de manière déterministe dans une durée prédéfinie.30