Brevet FR3121249A1 — publié le 20220930

Procédé élémentaire d’implémentation d’un module logiciel défini par un graphe élémentaire (Ge) orienté non cyclique, comprenant les étapes suivantes : copie du code de la séquence initiale (Si), ajout, en fin de la séquence initiale (Si), d’une fonction Fourche (F), copie du code d’une séquence parallèle (S1p, S2p), ajout en fin de ladite séquence parallèle (S1p, S2p) d’une fonction Jonction Drapeau (Jf), copie du code de l’autre séquence parallèle (S2p, S1p), ajout en fin de l’autre séquence parallèle (S2p, S1p) d’une fonction Jonction Attente (Jw). Figure d’abrégé : Figure 4 Procédé d’implémentation d’un module logiciel défini par un graphe orienté non cyclique non imbriqué en environnement multi-cœur L’invention concerne un procédé d’implémentation d’un module logiciel défini par un graphe orienté non cyclique non imbriqué comprenant des exécutables alloués sur plusieurs cœurs. Dans le domaine des systèmes embarqués, les calculateurs utilisent aujourd’hui des micro-processeurs possédant plusieurs unités de calcul ou cœurs. Ceci permet l’exécution simultanée, en parallèle de plusieurs unités logicielles. Les systèmes embarqués sont souvent des systèmes temps-réel pour lesquels le temps de réponse des logiciels est un élément critique, aussi bien en termes de fonctionnalité (par exemple : contrôle d’un moteur thermique) que de sécurité (par exemple : coupure de l’injection d’un moteur thermique afin de garantir la sécurité, en stoppant un véhicule). Les systèmes temps réel embarqués réalisent des fonctions de contrôle pour piloter différents actionneurs, tels que des pompes, des injecteurs, des vannes, etc. Les algorithmes qui implémentent ces fonctions de contrôle doivent souvent s’exécuter dans une séquence bien précise afin que les résultats calculés par un algorithme soient pris en compte par l’algorithme suivant dans les plus brefs délais, assurant ainsi un meilleur temps de réponse du système. Les algorithmes sont implémentés dans des fonctions appelées unités exécutables, exécutées par des tâches logicielles synchronisées sur des événements systèmes qui peuvent être cadencées cycliquement sur une base temporelle (1 ms, 5 ms, 10 ms, 100 ms, …) ou sur un signal fourni par un évènement (position du moteur, réception d’un message, …) Ces algorithmes de contrôle ont été à l’origine développés pour être exécutés par des micro-processeurs mono-cœur pour lesquels une exécution ne peut être que séquentielle. Ces mêmes algorithmes sont aujourd’hui réutilisés sur des micro-processeurs multi-cœurs pour lesquels l’exécution peut être réalisée en parallèle. Il convient de garantir le même comportement temps réel de ces algorithmes, qu’ils soient exécutés par un micro-processeur mono-cœur ou multi-cœur. Il est avantageux de profiter de la puissance apportée par les différents cœurs, mais il est impératif de préserver les chaînes de calcul, les temps de réponse des fonctionnalités et la cohérence des données partagées. Les micro-processeurs comptent aujourd’hui plusieurs cœurs, typiquement 3 à 10 cœurs. Il est prévu qu’ils en comptent plusieurs centaines dans un avenir proche. Un paradigme avantageux pour décrire un algorithme parallélisé est « Fourche et Jonction » (en anglais « Fork and Join ») ou « Divise et Conquiert » (en anglais « Divide and Conquer »). Ce paradigme permet, de transformer un schéma d’exécution linéaire, tel qu’illustré à la , montrant un module logiciel comprenant 42 unités exécutables E en séquence sur un cœur unique, en un schéma parallélisé tel qu’illustré à la , en indiquant une séparation de l’exécution sur plusieurs cœurs par une fourche f et une jonction de l’exécution par une jonction j. La illustre l’implémentation finale des différentes unités exécutables E sur trois cœurs C1-C3. Au moyen de ce paradigme, il est possible de définir la structure d’un module logiciel au moyen d’un graphe G orienté non cyclique et non imbriqué, tel qu’illustré aux figures 4, 6-9, 13. Chaque point ou nœud du graphe G est une unité exécutable E. Une unité exécutable E est définie par son code, nécessairement séquentiel et exécutable sur un unique cœur C1-C4. Ledit code est stocké dans le graphe G ou indexé par le graphe G. Le graphe G comprend encore l’information d’allocation de chaque unité exécutable E à un des cœurs C1-C4, soit le cœur C1-C4 sur laquelle cette unité exécutable E est destinée à s’exécuter. L’invention se propose de définir un procédé d’implémentation d’un module logiciel ainsi défini par un graphe G orienté non cyclique et non imbriqué et par les codes des unités exécutables E. Pour cela, l’invention a pour objet un procédé élémentaire d’implémentation d’un module logiciel défini par un graphe élémentaire orienté non cyclique comprenant des unités exécutables agencés en quatre séquences allouées chacune à un cœur, une séquence initiale exécutable sur un premier cœur, suivie d’une fourche vers une première séquence parallèle exécutable sur un deuxième cœur et une deuxième séquence parallèle exécutable sur un troisième cœur, différent du deuxième cœur, parallèlement à la première séquence parallèle, les deux séquences parallèles étant suivies par une jonction vers une séquence finale exécutable sur un quatrième cœur, comprenant les étapes suivantes : copie du code de la séquence initiale, ajout, en fin de la séquence initiale, d’une fonction Fourche, copie du code d’une séquence parallèle, ajout en fin de ladite séquence parallèle d’une fonction Jonction Drapeau, copie du code de l’autre séquence parallèle, ajout en fin de l’autre séquence parallèle d’une fonction Jonction Attente. Des caractéristiques ou des modes de réalisation particuliers, utilisables seuls ou en combinaison, sont : - la fonction Fourche est apte à lancer l’exécution de la première séquence parallèle si le cœur de la première séquence parallèle est différent du cœur de la séquence initiale et à lancer l’exécution de la deuxième séquence parallèle si le cœur de la deuxième séquence parallèle est différent du cœur de la séquence initiale et à initialiser un drapeau à l’état baissé, - la fonction Jonction Drapeau est apte à lever le drapeau, - la fonction Jonction Attente est apte à attendre tant que le drapeau est baissé et à lancer l’exécution de la séquence finale si le cœur de la séquence finale est différent du cœur de la séquence parallèle comprenant la fonction Jonction Attente, lorsque le drapeau est levé, - la séquence recevant la fonction Fourche est la séquence initiale, - si le cœur de la séquence finale est identique au cœur d’une séquence parallèle, ladite séquence parallèle reçoit la fonction Jonction Attente, - si le cœur de la séquence finale est différent des cœurs des séquences parallèles, la séquence parallèle recevant la fonction Jonction Attente est la séquence parallèle la moins réactive parmi les deux séquences parallèles, soit la séquence qui présente un temps de réponse le plus élevé, - la fonction Jonction Attente attend en appelant un point de rendez-vous. Dans un deuxième aspect de l’invention, un procédé global d’implémentation d’un module logiciel défini par un graphe orienté non cyclique et non imbriqué comprenant des unités exécutables allouées chacune à un cœur, comprenant les étapes suivantes : identification de toutes les fourches, une fourche comprenant au moins deux unités exécutables avales, identification de toutes les jonctions, une jonction comprenant au moins deux unités exécutables amonts, identification des séquences, une séquence étant une suite d’unités exécutables ne comprenant ni fourche ni jonction et allouées à un même cœur, simplification des fourches multiples, comprenant une séquence amont et un nombre n, strictement supérieur à 2, de séquences avales, en remplaçant par n-1 fourches bifides, comprenant 2 séquences avales, les fourches additionnelles ainsi créées étant allouées au cœur de la séquence amont, simplification des jonctions multiples, comprenant une séquence avale et un nombre n, strictement supérieur à 2, de séquences amonts, en remplaçant par n-1 jonctions bifides, comprenant 2 séquences amonts, les jonctions additionnelles ainsi créées étant allouées au cœur de la séquence avale, appariement de chaque jonction avec une fourche duale : pour chaque jonction, remontée de ses séquences amonts jusqu’à trouver une éventuelle fourche où les séquences amonts se rejoignent, associer une fourche trouvée avec la jonction, si une jonction est orpheline, création d’une fourche virtuelle, au début de ses séquences amonts, joignant les séquences amonts, si une fourche est orpheline, création d’une jonction virtuelle, à la fin de ses séquences avales, joignant les séquences avales, pour chaque paire fourche et jonction duale définissant un graphe élémentaire, application du procédé élémentaire, regroupement dudit graphe élémentaire en une unité exécutable, itération des deux étapes précédentes jusqu’à épuiser le graphe. Des caractéristiques ou des modes de réalisation particuliers, utilisables seuls ou en combinaison, sont : - une jonction virtuelle est allouée au cœur de la plus réactive des séquences avales de sa fourche associée, - dans l’étape d’appariement, si plusieurs choix sont possibles, association en priorité des paires dont les jonctions ont le moins de combinaison et en dernier recours choisir arbitrairement. L’invention sera mieux comprise à la lecture de la description qui suit, faite uniquement à titre d’exemple, et en référence aux figures en annexe dans lesquelles : montre un exemple d’un module logiciel séquentiel, montre le même module logiciel parallélisé, montre une implémentation du module logiciel de la , montre un graphe élémentaire, montre un synoptique d’implémentation du graphe élémentaire de la , montre un exemple de graphe complexe, montre le graphe de la après simplification, montre le graphe de la après implémentation d’un premier graphe élémentaire et un premier regroupement, montre le graphe de la après implémentation d’un deuxième graphe élémentaire et un deuxième regroupement, montre un synoptique d’implémentation du graphe de la , illustre la simplification d’une fourche multiple, illustre la simplification d’une jonction multiple, illustre un autre exemple de graphe, illustre un synoptique d’implémentation du graphe de la , illustre la création d’une jonction virtuelle pour une fourche orpheline, illustre la création d’une fourche virtuelle pour une jonction orpheline, illustre un graphe imbriqué. Un module logiciel est supposé décrit par un graphe G, Ge. Un graphe G, Ge est la donnée d’entrée de l’invention. Des exemples de graphes G, Ge, sont donnés aux figures 4, 6-9, 13. Un graphe G, Ge est supposé orienté non cyclique et non imbriqué. L’ordre chronologique d’exécution se lit de gauche à droite. Un graphe G, Ge comprend une pluralité d’unités exécutables E figurées sur les diagrammes de graphe par des points. Les segments entre les points indiquent la chronologie relative des unités exécutables E. Un graphe G, Ge comprend, pour chaque unité exécutable E, une information d’allocation, soit la mention du cœur C1-C4 sur lequel cette unité exécutable doit être exécutée. Une fourche f apparaît lorsqu’une unité exécutable présente une unique unité exécutable amont et plus d’une unité exécutable avale. De manière duale, une jonction j apparaît lorsqu’une unité exécutable présente plus d’une unité exécutable amont et une unique unité exécutable avale. Une séquence S est une suite continue d’unité exécutables E ne comprenant ni fourche f ni jonction j et ayant toutes ses unités exécutables E affectées à un même cœur C1-C4. L’invention concerne un procédé, nommé global dans les revendications, d’implémentation d’un graphe G répondant aux hypothèses précédentes. Cette implémentation peut être réalisée manuellement par un opérateur humain. Elle peut encore avantageusement être automatisée. Le produit de ce procédé est une implémentation d’un module logiciel, soit un code apte à être exécuté sur un micro-processeur multi-cœur. Ce module logiciel peut, par exemple, être un contrôle moteur apte à piloter un moteur thermique d’un véhicule automobile. L’invention concerne encore un procédé, nommé élémentaire dans les revendications, d’implémentation d’un graphe élémentaire Ge. Ce procédé élémentaire est destiné à être utilisé par le procédé global. Un graphe G, Ge, peut être décrit de manière graphique, tel qu’illustré aux différentes figures, à l’attention d’un opérateur humain. Si l’implémentation est destinée à être réalisée par un traitement automatique, un graphe G, Ge peut être décrit par toute méthode de représentation, textuelle ou numérique. A partir d’un graphe G, le procédé global vise à prétraiter et simplifier ce graphe G, de manière à faire apparaître des graphes élémentaires Ge enchaînés ou imbriqués. Une application itérative du procédé élémentaire d’implémentation à chacun des graphes élémentaires Ge identifiés, permet d’implémenter la totalité du graphe G. Aussi, le procédé élémentaire d’implémentation d’un module logiciel défini par un graphe élémentaire Ge orienté non cyclique est décrit en premier. Tel qu’illustré à la , un graphe élémentaire Ge, comme tout graphe, comprend une pluralité d’unités exécutables E et est orienté non cyclique. Ces unités exécutables E sont agencées en quatre séquences Si, S1p, S2p, Sf, allouées chacune à un cœur C1-C4. Dans l’ordre d’exécution, de gauche à droite sur la figure, il est possible de distinguer une séquence initiale Si. Cette séquence initiale Si est exécutable sur un premier cœur C1. Cette séquence initiale Si est terminée par une fourche f. Cette fourche f transfert le flot d’exécution en parallèle à deux séquences parallèles S1p et S2p. La première séquence parallèle S1p est affectée à /exécutable sur un deuxième cœur C2. La deuxième séquence parallèle S2p est affectée à/exécutable sur un troisième cœur C3. Les deux séquences parallèles S1p, S2p s’exécutent parallèlement. Une jonction j suit les deux séquences parallèles S1p, S2p et réunit les deux flots d’exécution en un seul. A l’aval de la jonction j se trouve une unique séquence finale Sf exécutable sur un quatrième cœur C4. La séquence finale Sf débute lorsque les deux séquences parallèles S1p et S2p sont terminées. S’agissant d’un parallélisme, les deux séquences parallèles S1p, S2p ne peuvent s’exécuter sur le même cœur. Aussi, le troisième cœur C3 est nécessairement différent du deuxième cœur C2. Au contraire, le premier cœur C1 peut être confondu avec le deuxième cœur C2, avec le troisième cœur C3 ou encore avec le quatrième cœur C4. De même, le quatrième cœur C4 peut être confondu avec le premier cœur C1, avec le deuxième cœur C2 ou avec le troisième cœur C3. Les quatre cœurs C1-C4 peuvent aussi être différents. Selon une caractéristique, à partir de ce graphe élémentaire Ge archétypique, le procédé élémentaire réalise l’implémentation d’un module logiciel selon les étapes suivantes. Une séquence quelconque, de par sa définition, ne comprend aucune fourche f ou jonction j et toutes ses unités exécutables E sont allouées au même cœur C1-C4. Aussi, une séquence peut être considérée comme une unique unité exécutable. Aussi, son code comprend la succession ordonnée des codes des différentes unités exécutables E qui la compose. Aussi, au cours d’une première étape, le code de la séquence initiale Si est copié dans le code de la future implémentation. Les codes de chacune des unités exécutables E sont stockés dans le graphe élémentaire Ge ou dans un moyen de stockage indexé au moyen du graphe élémentaire Ge et sont disponibles en entrée des procédés d’implémentation. Au cours d’une autre étape, il est ajouté, après le code de la séquence initiale Si, une fonction Fourche F. Une fonction fourche F implémente une fourche f. Une fonction fourche F a deux fonctions, d’une part lancer l’exécution des deux séquences parallèles S1p, S2p, si besoin, et d’autre part initialiser un drapeau associé à la paire fourche f et jonction j duale. Un drapeau est une variable booléenne. Le drapeau est initialisé à l’état baissé. Si une des deux séquences parallèles S1p, S2p est allouée au même cœur C1 que la séquence initiale Si, son exécution démarre lorsque la fonction Fourche F est terminée, le flot d’exécution se transmettant naturellement à cette séquence parallèle S1p, S2p dont le code est disposé après la fonction Fourche F. Au contraire, pour une séquence parallèle S1p, S2p allouée à un autre cœur que celui C1 exécutant la séquence initiale Si et la fonction Fourche F, il convient de réaliser un lancement, par un mécanisme de chaînage. Aussi, la fonction Fourche F lance l’exécution de la première séquence parallèle S1p si le cœur C2 de la première séquence parallèle S1p est différent du cœur C1 de la séquence initiale Si et la fonction Fourche F lance l’exécution de la deuxième séquence parallèle S2p si le cœur C3 de la deuxième séquence parallèle S2p est différent du cœur C1 de la séquence initiale Si. Aussi, selon les deux cas, la fonction Fourche F lance une ou deux exécutions. L’implémentation comprend encore une étape réalisant une copie du code d’une séquence parallèle S1p, S2p. Il est ajouté, à la fin de cette séquence parallèle S1p, S2p, une fonction Jonction Drapeau Jf. L’implémentation comprend encore une étape réalisant une copie du code de l’autre séquence parallèle S2p, S1p. Il est ajouté, à la fin de cette autre séquence parallèle S2p, S1p, une fonction Jonction Attente Jw. Les deux fonctions Jonction Drapeau Jf et Jonction Attente Jw implémentent ensemble la jonction j. Elles utilisent toutes deux un drapeau commun associé à la paire fourche f et jonction j. Ce drapeau est matérialisé par une variable booléenne partagée entre les trois fonctions Fourche F, Jonction Drapeau Jf et Jonction Attente Jw. Ce drapeau indique l’état d’exécution de la séquence parallèle S1p, S2p qui intègre la fonction Jonction Drapeau Jf. Le drapeau est baissé, depuis son initialisation par la fonction Fourche F, tant que ladite séquence parallèle n’est pas terminée. Il est levé, par la fonction Jonction Drapeau Jf, lorsque ladite séquence parallèle est terminée. Aussi, comme vu précédemment, la fonction Fourche, lors de son exécution, a initialisé le drapeau à l’état baissé. La fonction Jonction Drapeau, exécutée à la fin de ladite séquence parallèle, lève le drapeau, indiquant cette fin d’exécution. Lors de son exécution, de par sa position en fin de séquence, la fonction Jonction Attente Jw sait que la séquence parallèle qui la contient est terminée. La fonction Jonction Attente Jw, consulte l’état du drapeau, afin de savoir si l’autre séquence parallèle est terminée. Si ce n’est pas le cas, la fonction Jonction Attente Jw attend jusqu’à ce que le drapeau soit levé. Dès que le drapeau est levé, la fonction Jonction Attente Jw transfert le flot d’exécution à la séquence finale Sf. Comme précédemment, ce transfert s’effectue par un mécanisme de chaînage, si besoin. Si la séquence finale Sf est allouée au même cœur que la séquence parallèle intégrant la fonction Jonction Attente Jw, son exécution démarre lorsque la fonction Jonction Attente Jw est terminée, le flot d’exécution se transmettant naturellement à la séquence finale Sf dont le code est disposé après la fonction Jonction Attente Jw. Au contraire, si la séquence finale Sf n’est pas allouée au même cœur que la séquence parallèle intégrant la fonction Jonction Attente Jw, la fonction Jonction Attente Jw réalise un lancement, par un mécanisme de chaînage. Aussi, la fonction Jonction Attente Jw lance l’exécution de la séquence finale Sf si le cœur C4 de la séquence finale Sf est différent du cœur C3, C2 de la séquence parallèle S2p, S1p comprenant la fonction Jonction Attente Jw. Selon une autre caractéristique, la séquence recevant la fonction Fourche F est la séquence initiale Si. Il s’ensuit que la fonction Fourche F est allouée au même cœur C1 que la séquence initiale Si. Il a été vu précédemment que les deux fonctions Jonction Attente Jw et Jonction Drapeau Jf sont respectivement placées à la fin de chacune des séquences parallèles S1p, S2p, l’une des séquences parallèles S1p, S2p recevant une fonction Jonction Attente Jw et l’autre des séquences parallèles S2p, S1p recevant une fonction Jonction Drapeau Jf. Il reste à savoir laquelle des séquences parallèles S1p, S2p reçoit quelle fonction. Le but ici, afin d’optimiser les performances temps réel, est de minimiser le temps attendu par la fonction Jonction Attente Jw. Pour cela, il est avantageux que la séquence parallèle S1p, S2p comportant la fonction Jonction Attente Jw soit la plus longue des deux séquences parallèles S1p, S2p. Ainsi, lorsque la fonction Jonction Attente Jw s’exécute, il est probable que la séquence parallèle S2p, S1p contenant la fonction Jonction Drapeau Jf soit terminée. Aussi, il n’y a pas d’attente. Pour cette optimisation, deux cas sont distingués. Dans un premier cas, la séquence finale Sf est allouée à un cœur C4 identique au cœur C2, C3 de l’une des deux séquences parallèles S1p, S2p. Dans ce cas, cette séquence parallèle S1p, S2p reçoit la fonction Jonction Attente Jw et l’autre séquence parallèle S2p, S1p reçoit la fonction Jonction Drapeau Jf. Cette configuration est avantageuse en ce qu’elle permet d’éviter, à la fonction Jonction Attente Jw, de réaliser un lancement d’exécution sur un autre cœur, pour la séquence finale Sf. Une possible attente est, en termes de performances temporelles, préférable à un lancement d’exécution d’une séquence sur un autre cœur. Dans un deuxième cas, la séquence finale Sf est allouée à un cœur C4, distinct des cœurs C2, C3 des deux séquences parallèles S1p, S2p. Dans ce cas, la séquence parallèle S1p, S2p recevant la fonction Jonction Attente Jw est celle qui est estimée prendre le plus de temps d’exécution. Selon une autre caractéristique, correspondant au premier cas, si le cœur C4 de la séquence finale Sf est identique à un cœur C2, C3 d’une séquence parallèle S1p, S2p, ladite séquence parallèle S1p, S2p reçoit la fonction Jonction Attente Jw et l’autre séquence parallèle S2p, S1p reçoit la fonction Jonction Drapeau Jf. Dans ce premier cas la fonction Jonction Attente Jw s’exécute sur le cœur C2, C3 de sa séquence parallèle, ce cœur étant aussi le cœur C4 de la séquence finale Sf. Selon une autre caractéristique, correspondant au deuxième cas, si le cœur C4 de la séquence finale Sf est différent des cœurs C2, C3 des séquences parallèles S1p, S2p, la séquence parallèle S1p, S2p recevant la fonction Jonction Attente Jw est la séquence parallèle la moins réactive parmi les deux séquences parallèles S1p, S2p, soit la séquence qui présente un temps de réponse le plus élevé. De manière duale, la séquence parallèle S2p, S1p recevant la fonction Jonction Drapeau Jf est la séquence parallèle la plus réactive parmi les deux séquences parallèles S1p, S2p. Dans ce deuxième cas, la fonction Jonction Attente Jw s’exécute sur le cœur C2 ou C3 de sa séquence parallèle, la fonction Jonction Drapeau s’exécute sur l’autre cœur C3 ou C2 de l’autre séquence parallèle. La réactivité est un facteur indicatif du temps de réponse d’une unité exécutable E ou d’une séquence S. La réactivité est d’autant plus élevée que le temps de réponse est faible. La réactivité peut se décomposer en deux réactivités cumulatives : une réactivité propre indicative du temps d’exécution de l’unité exécutable E / de la séquence S et une réactivité d’activation et de lancement indicative des facteurs temporels externes : temps de lancement de l’exécution, nombre des rendez-vous, préemption, … Selon une autre caractéristique, la fonction Jonction Attente Jw réalise éventuellement une attente en appelant un point de rendez-vous. Un point de rendez-vous (en anglais : « schedule point ») est une fonction du système d’exploitation permettant de réaliser une attente coopérative. La illustre l’implémentation obtenue pour un graphe élémentaire Ge, avec une hypothèse d’identité entre les cœurs C1 et C2. Le cœur C1 reçoit le code de la séquence initiale Si, suivi de la fonction Fourche F, suivi du code de la première séquence parallèle S1p et enfin la fonction Jonction Attente Jw, affectée ici à la première séquence parallèle S1p puisque cette dernière est la moins réactive. Le cœur C3 reçoit le code de la deuxième séquence parallèle S2p, terminée par la fonction Jonction Drapeau jw. Le cœur C4 reçoit le code de la séquence finale Sf. Il a été vu, avec le procédé élémentaire, comment était implémenté un module logiciel défini par un graphe élémentaire Ge. Il va maintenant être décrit le procédé global, permettant d’implémenter un module logiciel défini par un graphe G, quelconque, répondant aux hypothèses évoquées. Le principe, illustré sur la base d’un graphe G, tel qu’illustré aux figures 6-10, est de prétraiter et de simplifier le graphe G pour le ramener à un ou plusieurs graphes élémentaires Ge successifs ou emboités et, ensuite, d’appliquer à chacun de ces graphes élémentaires Ge, le procédé élémentaire précédemment décrit. Selon une autre caractéristique, le procédé global d’implémentation d’un module logiciel défini par un graphe G orienté non cyclique et non imbriqué comprenant des unités exécutables E allouées chacune à un cœur C1-C4, comprend les étapes suivantes. Un graphe G est dit non imbriqué en ce qu’il ne comprend pas d’imbrication. Tel qu’illustré à la , une imbrication comprend deux paires fourche et jonction (f1, j1) et (f2, j2) imbriquées. Dans la première paire f1, j1, une des séquences parallèles est interrompue par la deuxième fourche f2, située entre la première fourche f1 et la première jonction j1 et réciproquement, dans la deuxième paire f2, j2, une des séquences parallèles est interrompue par la première jonction j1, située entre la deuxième fourche f2 et la deuxième jonction j2. Un tel graphe G imbriqué n’est pas réductible à des graphes élémentaires Ge. Autrement dit un graphe G non imbriqué est un graphe G réductible à des graphes élémentaires Ge. Cette contrainte permet de traiter des graphes G correspondant à un grand nombre de cas réels. Le traitement d’un graphe G quelconque peut être réalisé en le prétraitant pour le ramener à un graphe non imbriqué. Alternativement, il est encore possible de résoudre un graphe quelconque par une autre méthode. Ces deux traitements ne sont pas décrits dans la présente. En premier lieu, le graphe G ou sa représentation est parcouru et analysé topologiquement. Au cours d’une première étape, il est réalisé une identification de toutes les fourches f. Une fourche f est caractérisée par une unité exécutable comprenant une unique unité exécutable ou séquence Sm, Sm1-Sm3 amont et au moins deux unités exécutables ou séquences Sv, Sv1-Sv3 avales. Au cours d’une deuxième étape, il est réalisé une identification de toutes les jonctions j. Une jonction j est caractérisée par une unité exécutable comprenant au moins deux unités exécutables ou séquences Sm, Sm1-Sm3 amonts et une unique unité exécutable ou séquence Sv, Sv1-Sv3 avale. Au cours d’une troisième étape, il est réalisé une identification de toutes les séquences S, S1-S6. Une séquence S est caractérisée par une suite d’unités exécutables E ne comprenant ni fourche f ni jonction j et toutes allouées à un même cœur C1-C4. Une fourche multiple est définie, dans la présente, par une fourche f comprenant un nombre n, strictement supérieur à 2, de séquences avales Sv, Sv1- Sv3. Une fourche simple ou bifide est définie, dans la présente, par une fourche f comprenant exactement 2 séquences avales Sv, Sv1-Sv3. Au cours d’une quatrième étape, il est procédé à une simplification des fourches f multiples. Une fourche f multiple est simplifiée, en la remplaçant par n-1 fourches f bifides ou simples. Tel qu’illustré à la , ceci est réalisé en ajoutant n-1 fourches additionnelles f à l’endroit de la fourche f originale. Les fourches additionnelles f, ainsi créées à cette occasion, sont allouées au cœur de la séquence amont Sm de la fourche f originale. Au cours d’une cinquième étape, il est procédé à une simplification des jonctions j multiples. Une jonction j multiple est simplifiée, en la remplaçant par n-1 jonctions j bifides ou simples. Tel qu’illustré à la , ceci est réalisé en ajoutant n-1 jonctions additionnelles j à l’endroit de la jonction j originale. Les jonctions additionnelles j, ainsi créées à cette occasion, sont allouées au cœur de la séquence avale Sv de la jonction j originale. Au cours d’un sixième étape, après toutes les simplifications réalisées, il est procédé à un appariement de chaque jonction j avec une fourche f duale. Ceci est réalisé de la manière suivante. Pour chaque jonction j, le graphe G est remonté en suivant les séquences amonts Sm1, Sm2 de la jonction j, jusqu’à trouver une éventuelle fourche f où les séquences amonts Sm1, Sm2 se rejoignent. Ladite jonction j est alors associée à cette fourche f. L’étape d’appariement, peut faire apparaître une jonction j orpheline, soit une jonction j pour laquelle il n’existe pas de fourche associée. Dans ce cas, tel qu’illustré à la 6, au cours d’une septième étape, il est créé une fourche f’ virtuelle. Cette fourche virtuelle f’, est placée au tout début des séquences amonts Sm1, Sm2 de la jonction j et joint les séquences amonts Sm1, Sm2. Cette fourche virtuelle f’ est alors appariée à la jonction j orpheline. La paire fourche virtuelle f’, jonction j est ensuite traitée comme toute autre paire. L’étape d’appariement, peut encore, de manière duale, faire apparaître une fourche f orpheline, soit une fourche f pour laquelle il n’existe pas de jonction associée. Dans ce cas, tel qu’illustré à la , au cours d’une huitième étape, il est créé une jonction j’ virtuelle. Cette jonction virtuelle j’, est placée à la toute fin des séquences avales Sv1, Sv2 de la fourche f et joint les séquences avales Sv1, Sv2. Cette jonction virtuelle j’ est alors appariée à la fourche f orpheline. La paire fourche f, jonction virtuelle j’ est ensuite traitée comme toute autre paire. Le graphe G ainsi simplifié et le cas échéant complété par des fourches virtuelles f’ ou des jonctions virtuelles j’, peut alors être analysé comme une superposition de graphes élémentaires Ge séquencés ou imbriqués. Aussi, au cours d’une neuvième étape, un des procédés élémentaires précédemment décrits est appliqué à chaque motif reproduisant un graphe élémentaire Ge, tel que défini/encadré par une paire fourche f et jonction j duale. Les graphes élémentaires Ge de plus bas niveau sont identifiés et traités en premier. Ils sont alors implémentés selon un des procédés élémentaires. Une fois qu’un graphe élémentaire Ge a été implémenté il peut être regroupé, au cours d’une dixième étape. Le regroupement consiste à modifier le graphe G en remplaçant tout graphe élémentaire Ge implémenté par un unique point E’, E" semblable à une unité exécutable E. Les neuvième et dixième étapes sont répétées jusqu’à épuiser le graphe G, soit jusqu’à ne conserver qu’un graphe linéaire. Selon une autre caractéristique, une fourche f’ virtuelle est allouée au cœur de la plus réactive des séquences amont Sm1, Sm2 de sa jonction j associée. Selon une autre caractéristique, il peut apparaître, dans l’étape d’appariement, plusieurs choix ou combinaisons possibles d’association à une jonction donnée. Dans ce cas, il est associé en priorité les paires dont les jonctions j apparaissent dans le moins de combinaisons. A chaque appariement, retenant une fourche f et une jonction j, toutes les combinaisons incluant ladite fourche f ou ladite jonction j sont retirées. Il est alors ainsi itéré jusqu’à apparier toutes les fourches et toutes les jonctions. A défaut, si à une itération, il existe encore plusieurs combinaisons, l’une d’entre elles est choisie arbitrairement. Le procédé global et particulièrement ses étapes huit à dix sont illustrées au moyen d’un exemple en référence aux figures 6-10. Le graphe G de la , qui figure le graphe G d’entrée du procédé global, est analysés pour réaliser les étapes d’identifications. Le graphe G comprend six séquences S1-S6. Les cœurs C1-C3 affectées à chaque séquence S1-S6 sont indiqués sous chacune des séquences S1-S6. Une première séquence S1 aboutit à une première fourche f1, suivie de trois séquences avales S2, S3, S4. Les séquences S2 et S3 sont parallèles et aboutissent à une première jonction j1. Une séquence S5 suit ladite première jonction j1. Les séquences S4 et S5 se rejoignent sur une deuxième jonction j2. Une séquence S6 suit ladite deuxième jonction j2. La première fourche f1 est multiple en ce qu’elle comporte 3 séquences avales S2, S3, S4. Aussi elle doit être simplifiée. Les deux jonctions j1, j2 sont simples en ce qu’elles comportent exactement 2 séquences amonts, respectivement S2, S3 et S4, S5. Le résultat de la simplification est illustré à la . Le graphe G de la ajoute une deuxième fourche f2 bifide qui comporte deux séquences avales S2 et S3. La première fourche f1 est modifiée pour devenir bifide : vers la deuxième fourche f2 d’une part et vers la séquence avale S4, d’autre part. Le graphe G de la étant simplifié, les fourches et les jonctions peuvent être appariées. En remontant depuis la première jonction j1, les séquences amonts S2, S3, on trouve la première fourche f1 et la deuxième fourche f2, où les séquences amonts S2, S3 se rejoignent. Ceci conduit donc à deux paires ou combinaisons (f1, j1) et (f2, j1) possible. En remontant depuis la deuxième jonction j2, les séquences amonts S4 et S5, on trouve la première fourche f1. Ceci conduit à une unique paire ou combinaison (f1, j2) possible. Comme décrit précédemment, l’appariement commence par les possibilités présentant le moins de combinaisons. Aussi, la paire (f1, j2) est validée, pour la deuxième jonction j2. Aussi la première fourche f1 n’est plus disponible et supprime, parmi les deux combinaisons pour la première jonction j1, la combinaison (f1, j1). Aussi, il ne reste plus, pour la première jonction j1, que la combinaison restante (f2, j1) qui est ainsi validée. Toutes les fourches f1, f2 et toutes les jonctions j1, j2 sont appariées, aussi l’étape d’appariement est terminée. Il n’y a pas ici de fourche ou de jonction orpheline. Une analyse du graphe G fait apparaître, pour la paire f2, j1, un premier graphe élémentaire. Ce premier graphe élémentaire peut être implémenté au moyen du procédé élémentaire. Après implémentation dudit premier graphe élémentaire, l’étape de regroupement, réalise un premier regroupement et remplace ledit premier graphe élémentaire par un point E’, pour aboutir au graphe G illustré à la . Le premier regroupement, permet de faire apparaître un deuxième graphe élémentaire, encadrée par la paire f1, j2. Ce deuxième graphe élémentaire peut être implémenté au moyen du procédé élémentaire. Après implémentation dudit deuxième graphe élémentaire, l’étape de regroupement réalise un deuxième regroupement et remplace ledit deuxième graphe élémentaire par un point E", pour aboutir au graphe G illustré à la . Le graphe G de la est linéaire. Aussi, le graphe G est épuisé et l’implémentation est terminée. La résume l’implémentation correspondant au graphe G. La première fourche f1 est implémentée par une première fonction Fourche F1. La deuxième fourche f2 est implémentée par une deuxième fonction Fourche F2. La première jonction j1 est implémentée par une première fonction Jonction Attente J1w et par une première fonction Jonction Drapeau J1f. La deuxième jonction j2 est implémentée par une deuxième fonction Jonction Attente J2w et par une deuxième fonction Jonction Drapeau J2f. Le code de chacune des séquences S1-S6 est indiqué par la référence S1-S6 de la séquence. L’invention a été illustrée et décrite en détail dans les dessins et la description précédente. Celle-ci doit être considérée comme illustrative et donnée à titre d’exemple et non comme limitant l’invention à cette seule description. De nombreuses variantes de réalisation sont possibles. C1-C4 : cœur, E : unité exécutable, E’, E" : point de regroupement, f, f1, f2 : fourche, f’ : fourche virtuelle, F : fonction Fourche, G : graphe, Ge : graphe élémentaire, j, j1, j2 : jonction, j’ : jonction virtuelle, Jf, J1f, J2f : fonction Jonction Drapeau, Jw, J1w, J2w : fonction Jonction Attente, S, S1-S6 : séquence, S1p, S2p : séquence parallèle, Sf : séquence finale, Si : séquence initiale, Sm, Sm1, Sm2, Sm3 : séquence amont, Sv, Sv1, Sv2, Sv3 : séquence avale. Procédé élémentaire d’implémentation d’un module logiciel défini par un graphe élémentaire (Ge) orienté non cyclique comprenant des unités exécutables (E) agencés en quatre séquences (Si, S1p, S2p, Sf) allouées chacune à un cœur (C1-C4), une séquence initiale (Si) exécutable sur un premier cœur (C1), suivie d’une fourche (f) vers une première séquence parallèle (S1p) exécutable sur un deuxième cœur (C2) et une deuxième séquence parallèle (S2p) exécutable sur un troisième cœur (C3), différent du deuxième cœur (C2), parallèlement à la première séquence parallèle (S1p), les deux séquences parallèles (S1p, S2p) étant suivies par une jonction (j) vers une séquence finale (Sf) exécutable sur un quatrième cœur (C4), caractérisé en ce qu’il comprend les étapes suivantes : - copie du code de la séquence initiale (Si), - ajout, en fin de la séquence initiale (Si), d’une fonction Fourche (F), - copie du code d’une séquence parallèle (S1p, S2p), - ajout en fin de ladite séquence parallèle (S1p, S2p) d’une fonction Jonction Drapeau (Jf), - copie du code de l’autre séquence parallèle (S2p, S1p), - ajout en fin de l’autre séquence parallèle (S2p, S1p) d’une fonction Jonction Attente (Jw). Procédé élémentaire selon la revendication précédente, où la fonction Fourche (F) est apte à lancer l’exécution de la première séquence parallèle (S1p) si le cœur (C2) de la première séquence parallèle (S1p) est différent du cœur (C1) de la séquence initiale (Si) et à lancer l’exécution de la deuxième séquence parallèle (S2p) si le cœur (C3) de la deuxième séquence parallèle (S2p) est différent du cœur (C1) de la séquence initiale (Si) et à initialiser un drapeau à l’état baissé. Procédé élémentaire selon l’une quelconque des revendications précédentes, où la fonction Jonction Drapeau (Jf) est apte à lever le drapeau. Procédé élémentaire selon l’une quelconque des revendications précédentes, où la fonction Jonction Attente (Jw) est apte à attendre tant que le drapeau est baissé et à lancer l’exécution de la séquence finale (Sf) si le cœur (C4) de la séquence finale (Sf) est différent du cœur (C3) de la séquence parallèle (S2p, S1p) comprenant la fonction Jonction Attente (Jw), lorsque le drapeau est levé. Procédé élémentaire selon l’une quelconque des revendications précédentes, où la séquence recevant la fonction Fourche (F) est la séquence initiale (Si). Procédé élémentaire selon l’une quelconque des revendications précédentes, où si le cœur (C4) de la séquence finale (Sf) est identique au cœur (C2, C3) d’une séquence parallèle (S1p, S2p), ladite séquence parallèle (S1p, S2p) reçoit la fonction Jonction Attente (Jw). Procédé élémentaire selon l’une quelconque des revendications précédentes, où si le cœur (C4) de la séquence finale (Sf) est différent des cœurs (C2, C3) des séquences parallèles (S1p, S2p), la séquence parallèle (S1p, S2p) recevant la fonction Jonction Attente (Jw) est la séquence parallèle la moins réactive parmi les deux séquences parallèles (S1p, S2p), soit la séquence qui présente un temps de réponse le plus élevé. Procédé élémentaire selon l’une quelconque des revendications précédentes, où la fonction Jonction Attente (Jw) attend en appelant un point de rendez-vous. Procédé global d’implémentation d’un module logiciel défini par un graphe (G) orienté non cyclique et non imbriqué, comprenant des unités exécutables (E) allouées chacune à un cœur (C1-C4), caractérisé en ce qu’il comprend les étapes suivantes : - identification de toutes les fourches (f, f1, f2), une fourche (f, f1, f2) comprenant au moins deux unités exécutables (E) avales, - identification de toutes les jonctions (j, j1, j2), une jonction (j, j1, j2) comprenant au moins deux unités exécutables (E) amonts, - identification des séquences (S1-S6), une séquence (S1-S6) étant une suite d’unités exécutables (E) ne comprenant ni fourche (f) ni jonction (j) et allouées à un même cœur (C1-C4), - simplification des fourches (f, f1, f2) multiples, comprenant une séquence amont (Sm) et un nombre n, strictement supérieur à 2, de séquences avales (Sv1-Sv3), en remplaçant par n-1 fourches (f, f1, f2) bifides, comprenant 2 séquences avales (Sv1-Sv3), les fourches additionnelles ainsi créées étant allouées au cœur (C1-C4) de la séquence amont (Sm), - simplification des jonctions (j, j1, j2) multiples, comprenant une séquence avale (Sv) et un nombre n, strictement supérieur à 2, de séquences amonts (Sm1-Sm3), en remplaçant par n-1 jonctions (j, j1, j2) bifides, comprenant 2 séquences amonts (Sm1-Sm3), les jonctions additionnelles ainsi créées étant allouées au cœur (C1-C4) de la séquence avale (Sv), - appariement de chaque jonction (j, j1, j2) avec une fourche (f, f1, f2) duale : pour chaque jonction (j, j1, j2), remontée de ses séquences amonts (Sm1-Sm3) jusqu’à trouver une éventuelle fourche (f, f1, f2) où les séquences amonts (Sm1-Sm3) se rejoignent, associer une fourche (f, f1, f2) trouvée avec la jonction (j, j1, j2), - si une jonction (j, j1, j2) est orpheline, création d’une fourche (f’) virtuelle, au début de ses séquences amonts (Sm1-Sm3), joignant les séquences amonts (Sm1-Sm3), - si une fourche (f, f1, f2) est orpheline, création d’une jonction (j’) virtuelle, à la fin de ses séquences avales (Sv1-Sv3), joignant les séquences avales (Sv1-Sv3), - pour chaque paire fourche et jonction duale définissant un graphe élémentaire (Ge), application du procédé élémentaire selon l’une quelconque des revendications précédentes, - regroupement dudit graphe élémentaire (Ge) en une unité exécutable (E’, E"), - itération des deux étapes précédentes jusqu’à épuiser le graphe (G). Procédé global selon la revendication précédente, où une fourche (f’) virtuelle est allouée au cœur de la plus réactive des séquences amonts (Sm1-Sm3) de sa jonction (j) associée. Procédé global selon l’une quelconque des deux revendications précédentes, où dans l’étape d’appariement, si plusieurs choix sont possibles, association en priorité des paires dont les jonctions (j) ont le moins de combinaison et en dernier recours choisir arbitrairement.