Brevet FR3071642A1 — publié le 20190329

PROCÉDÉ D'EXÉCUTION D'UN PROGRAMME PAR UN APPAREIL ÉLECTRO- NIQUE [1] L'invention concerne un procédé d'exécution d'un programme par un appareil 5 électronique. Elle concerne également un support d'enregistrement d'informations ainsi qu'un appareil électronique pour la mise en oeuvre de ce procédé. [2] Il a déjà été proposé d'accélérer l'exécution d'un programme en confiant l'exécution de certaines fonctions de ce programme à un accélérateur matériel. À cet effet, l'appareil électronique comporte typiquement un microprocesseur non 10 reconfigurable et un accélérateur matériel configurable. Par exemple, un tel procédé et un tel appareil électronique sont divulgués dans le brevet US6077315. Dans ces procédés connus, l'une des difficultés rencontrées est d'identifier et de sélectionner automatiquement les fonctions du programme qui doivent être exécutées par l'accélérateur matériel au lieu d'être exécutées par le microprocesseur. Jusqu'à 15 présent, cette sélection des fonctions à exécuter par l'accélérateur matériel est réalisée manuellement lors de la conception du programme. Typiquement, pour cela, dans le code-source du programme, des instructions spécifiques sont insérées pour indiquer que telle ou telle fonction du programme doit être exécutée par l'accélérateur matériel et non pas par le microprocesseur. Après compilation de ce programme, ces 20 instructions sont transformées en instructions correspondantes dans le code-machine du programme exécutable. Ainsi, seuls les programmes spécialement conçus et compilés à cet effet peuvent bénéficier des possibilités offertes par la présence de l'accélérateur matériel pour accélérer l'exécution de ces programmes. [3] De plus, du fait que les fonctions qui doivent être exécutées par l'accélérateur 25 matériel sont choisies lors de la conception du programme et donc avant sa compilation, il n'est pas possible de tenir compte des valeurs des paramètres de ces fonctions pour décider s'il est opportun ou non de confier leurs exécutions à cet accélérateur matériel. En effet, ces valeurs sont uniquement connues lors de l'exécution du programme et non pas au moment de la conception ou de la 30 compilation du programme. [4] L'invention vise à remédier à ces inconvénients. Elle a donc pour objet un procédé d'exécution d'un programme par un appareil électronique, ce programme comportant une fonction à réaliser, caractérisé en ce que le procédé comporte : a) la fourniture : 35 - d'une signature préenregistrée qui identifie sans ambiguïté une fonction prédéterminée, cette signature comportant à cet effet au moins une séquence préenregistrée d'identifiants d'opcodes placés les uns derrière les autres dans l'ordre où ces opcodes identifiés doivent être exécutés pour réaliser ladite fonction prédéterminée, 40 - associé à chaque signature préenregistrée, un jeu prédéterminé d'instructions, ce 2 jeu prédéterminé d'instructions étant choisi dans le groupe consistant en : - un jeu prédéterminé d'instructions de configuration d'un accélérateur matériel configurable, ce jeu prédéterminé d'instructions étant apte, lorsqu'il est chargé dans cet accélérateur matériel, à configurer cet accélérateur matériel pour qu'il réalise ladite fonction prédéterminée, et - un code-machine directement exécutable par le microprocesseur ou par un coprocesseur, ce code-machine étant apte, lorsqu'il est exécuté par ce microprocesseur ou ce coprocesseur, à faire réaliser par le microprocesseur ou le coprocesseur ladite fonction prédéterminée, b) lorsqu'une fonction du programme est exécutée par le microprocesseur, la collecte d'une signature de cette fonction, cette collecte comportant la collecte des identifiants des opcodes exécutés, dans leur ordre d'exécution, pour obtenir une séquence collectée d'identifiants d'opcodes, puis c) la comparaison de la signature collectée à la signature préenregistrée, cette 15 comparaison comportant la comparaison de la séquence collectée à la séquence préenregistrée, la signature collectée correspondant à la signature préenregistrée seulement si la séquence collectée correspond à la séquence préenregistrée, puis d) si la signature collectée correspond à la signature préenregistrée, l'association de l'adresse de branchement dans le programme où débute l'exécution de cette fonction, 20 au jeu d'instructions associé à cette signature préenregistrée, et e) si la signature collectée ne correspond pas à la signature préenregistrée, l'absence d'association de l'adresse de branchement dans le programme où débute l'exécution de cette fonction, au jeu d'instructions associé à cette signature préenregistrée, puis f) si l'exécution du programme retourne à une adresse de branchement associée à un 25 jeu d'instructions, le déclenchement de l'exécution de ladite fonction prédéterminée par un accélérateur matériel configuré avec ce jeu d'instructions ou le déclenchement de l'exécution par le microprocesseur ou un coprocesseur du code-machine de ce jeu d'instructions. [005] Les modes de réalisation de ce procédé peuvent comporter une ou plusieurs 30 des caractéristiques suivantes : - - lors de l'étape a), la signature préenregistrée comporte en plus une cartographie préenregistrée des accès mémoires de la fonction prédéterminée, cette cartographie définissant les positions relatives, les uns par rapport aux autres, de N mots-machine lus ou écrits en mémoire lors de l'exécution de la 35 fonction prédéterminée par le microprocesseur, où N est un nombre entier supérieur ou égal à quatre, - l'étape b) comporte en même temps que la collecte des identifiants d'opcodes exécutés, la collecte, dans l'ordre d'exécution des opcodes de lecture ou d'écriture en mémoire, des adresses des mots-machine lus ou écrits par la fonction exécutée pour 40 obtenir un séquence collectée d'adresses, 3 - l'étape c) comporte la recherche, dans la séquence collectée d'adresses, d'un ensemble de N mots-machine dont les positions relatives, les uns par rapport aux autres, correspondent aux positions relatives définies par la cartographie préenregistrée, la signature collectée correspondant à la signature préenregistrée 5 seulement si un tel ensemble de N mots-machine est trouvé dans la séquence collectée d'adresses ; - - lors de l'étape a), la cartographie préenregistrée associe à au moins l'un des N mots-machine, une séquence d'identifiants d'opcodes exécutés immédiatement avant ou après la lecture et l'écriture d'une donnée dans ce 10 mot-machine, - l'étape b) comporte, en même temps que la collecte de la séquence d'adresses, la collecte pour chacun des mots machines lu et écrit lors de l'exécution de la fonction, de la séquence d'identifiants d'opcodes exécutés immédiatement avant ou après la lecture ou l'écriture dans ce mot-machine, - lors de l'étape c), la signature collectée correspondant à la signature préenregistrée seulement si pour chacun des N mots-machine de l'ensemble trouvé, la séquence collectée d'identifiants d'opcodes exécutés immédiatement avant ou après la lecture ou l'écriture dans ce mot-machine correspond à la séquence d'identifiants d'opcodes associée à ce mot-machine par la cartographie préenregistrée ; - chaque séquence d'identifiants d'opcodes de la signature préenregistrée est associée à un mot-machine dont la position relative par rapport aux N-1 autres mots-machine est définie par la cartographie préenregistrée ; - aucun des N mots-machine dont les positions relatives, les uns par rapport aux autres, sont définies par la cartographie préenregistrée, n'est associé à une séquence d'identifiants d'opcodes exécutés immédiatement avant ou après la lecture ou l'écriture d'une donnée dans ce mot-machine ; - - la fonction prédéterminée est une fonction paramétrable, les valeurs du ou des paramètres de cette fonction prédéterminée étant connues uniquement au moment de son exécution par le microprocesseur, - lors de l'étape a), la signature préenregistrée identifie sans ambiguïté seulement la fonction prédéterminée paramétrée avec des valeurs prédéterminées et le jeu d'instructions de configuration est seulement apte à configurer l'accélérateur matériel pour qu'il exécute la fonction prédéterminée paramétrée avec ces valeurs prédéterminées et le code machine est seulement apte, lorsqu'il est exécuté par le microprocesseur ou le coprocesseur, à faire réaliser par ce microprocesseur ou ce coprocesseur ladite fonction prédéterminée paramétrée avec ces valeurs prédéterminées, - lors de l'étape d), l'association de l'adresse de branchement à ces valeurs prédéterminées des paramètres, et 40 - avant de déclencher l'exécution de la fonction prédéterminée, le procédé comporte 4 la vérification que les valeurs actuelles des paramètres avec lesquels la fonction est appelée correspondent aux valeurs prédéterminées de ces mêmes paramètres associées à cette adresse de branchement et l'étape f) est déclenchée uniquement si les valeurs actuelles et les valeurs préenregistrées des paramètres sont identiques ; 5 ^ - la fonction prédéterminée est une fonction paramétrable, les valeurs du ou des paramètres de cette fonction prédéterminée étant connues uniquement au moment de son exécution par le microprocesseur, - - lors de l'étape a), la signature préenregistrée identifie sans ambiguïté seulement la fonction prédéterminée paramétrée avec des valeurs 10 prédéterminées et le jeu d'instructions de configuration est seulement apte à configurer l'accélérateur matériel pour qu'il exécute la fonction prédéterminée paramétrée avec ces valeurs prédéterminées et le code machine est seulement apte, lorsqu'il est exécuté par le microprocesseur ou le coprocesseur, à faire réaliser par ce microprocesseur ou ce coprocesseur 15 ladite fonction prédéterminée paramétrée avec ces valeurs prédéterminées, - - lors de l'étape d), l'association de l'adresse de branchement à ces valeurs prédéterminées des paramètres, et avant de déclencher l'exécution de la fonction prédéterminée, le procédé comporte la vérification que les valeurs actuelles des paramètres avec lesquels la fonction est appelée correspondent 20 aux valeurs prédéterminées de ces mêmes paramètres associées à cette adresse de branchement et l'étape f) est déclenchée uniquement si les valeurs actuelles et les valeurs prédéterminées des paramètres sont identiques ; - - l'étape a) comporte la fourniture de plusieurs signatures préenregistrées différentes qui identifient chacune sans ambiguïté une variantes 25 d'implémentations respective de la même fonction prédéterminée, toutes ces signatures préenregistrées qui identifient sans ambiguïté la même fonction prédéterminée étant associées au même jeu prédéterminé d'instructions, - lors de l'exécution du programme, l'étape c) est exécutée pour chacune de ces signatures préenregistrées. 30 [006] L'invention a également pour objet un support d'enregistrement d'informations lisible par un microprocesseur sur lequel est enregistré un programme d'ordinateur, comportant des instructions de code de programme d'ordinateur pour l'exécution des étapes du procédé revendiqué, lorsque ces instructions sont exécutées par le microprocesseur. 35 [007] Enfin, l'invention a également pour objet un appareil électronique apte à exécuter un programme comportant une fonction à réaliser, cet appareil électronique comportant à cet effet : - un microprocesseur programmable apte à exécuter le programme, et - une mémoire, 40 dans lequel : 5 - la mémoire comporte : - une signature préenregistrée qui identifie sans ambiguïté une fonction prédéterminée, cette signature comportant à cet effet au moins une séquence préenregistrée d'identifiants d'opcodes placés les uns derrière les autres dans 5 l'ordre où ces opcodes identifiés doivent être exécutés pour réaliser ladite fonction prédéterminée, - associé à chaque signature préenregistrée, un jeu prédéterminé d'instructions, ce jeu prédéterminé d'instructions étant choisi dans le groupe consistant en : 10 - un jeu prédéterminé d'instructions de configuration d'un accélérateur matériel configurable, ce jeu prédéterminé d'instructions étant apte, lorsqu'il est chargé dans cet accélérateur matériel, à configurer cet accélérateur matériel pour qu'il réalise ladite fonction prédéterminée, et - un code-machine directement exécutable par le microprocesseur ou par 15 un coprocesseur, ce code-machine étant apte, lorsqu'il est exécuté par ce microprocesseur ou ce coprocesseur, à faire réaliser par le microprocesseur ou le coprocesseur ladite fonction prédéterminée, - le microprocesseur est programmé pour réaliser les étapes suivantes : b) lorsqu'une fonction du programme est exécutée par le microprocesseur, la collecte 20 d'une signature de cette fonction, cette collecte comportant la collecte des identifiants des opcodes exécutés, dans leur ordre d'exécution, pour obtenir une séquence collectée d'identifiants d'opcodes, puis c) la comparaison de la signature collectée à la signature préenregistrée, cette comparaison comportant la comparaison de la séquence collectée à la séquence 25 préenregistrée, la signature collectée correspondant à la signature préenregistrée seulement si la séquence collectée correspond à la séquence préenregistrée, puis d) si la signature collectée correspond à la signature préenregistrée, l'association de l'adresse de branchement dans le programme où débute l'exécution de cette fonction, au jeu d'instructions associé à cette signature préenregistrée, et 30 e) si la signature collectée ne correspond pas à la signature préenregistrée, l'absence d'association de l'adresse de branchement dans le programme où débute l'exécution de cette fonction, au jeu d'instructions associé à cette signature préenregistrée, puis f) si l'exécution du programme retourne à une adresse de branchement associée à un jeu d'instructions, le déclenchement de l'exécution de ladite fonction prédéterminée 35 par un accélérateur matériel configuré avec ce jeu d'instructions ou le déclenchement de l'exécution par le microprocesseur ou un coprocesseur du code-machine de ce jeu d'instructions. [008] Les modes de réalisation de cet appareil peuvent comporter une ou plusieurs des caractéristiques suivantes : ^ il comporte un accélérateur matériel configurable dans lequel le jeu 6 prédéterminé d'instructions est apte à être changé pour configurer cet accélérateur matériel pour qu'il réalise ladite fonction prédéterminée ; ^ l'accélérateur matériel est un composant FPGA (« Field-Programmable Gate Array ») ; 5 ^ il comporte un coprocesseur apte à exécuter le jeu prédéterminé d'instructions pour qu'il réalise ladite fonction prédéterminée. [009] L'invention sera mieux comprise à la lecture de la description qui va suivre, donnée uniquement à titre d'exemple non limitatif et faite en se référant aux dessins sur lesquels : 10 - la figure 1 est une illustration schématique de l'architecture d'un appareil électronique apte à exécuter un programme ; - les figures 2 à 5 sont des illustrations schématiques de différentes structures de données utilisées par l'appareil de la figure 1 ; - les figures 6 et 7 sont des illustrations schématiques du pseudo-code, 15 respectivement, d'une première et d'une deuxième fonction d'un programme exécutable par l'appareil de la figure 1 ; - la figure 8 est une illustration partielle du code source d'une troisième fonction du programme exécutable par l'appareil de la figure 1 ; - la figure 9 est un organigramme d'un procédé d'exécution d'un programme par 20 l'appareil de la figure 1 ; - la figure 10 est une illustration schématique d'une grille utilisable pour identifier une fonction du programme exécuté par l'appareil de la figure 1 ; - les figures 11 et 12 sont des illustrations schématiques de deux variantes de l'architecture de l'appareil de la figure 1. 25 [0010] Dans ces figures, les mêmes références sont utilisées pour désigner les mêmes éléments. Dans la suite de cette description, les caractéristiques et fonctions bien connues de l'homme du métier ne sont pas décrites en détails. [0011] Notations et définitions : [0012] Dans cette description, les définitions suivantes sont adoptées. 30 [0013] Un « programme » désigne un ensemble d'une ou de plusieurs fonctions prédéterminées que l'on souhaite faire exécuter par un microprocesseur. [0014] Un « code source » est une représentation du programme dans un langage informatique, n'étant pas directement exécutable par un microprocesseur et étant destiné à être transformé par un compilateur ou un interpréteur en un code machine 35 directement exécutable par le microprocesseur. [0015] Un programme ou un code est dit être « directement exécutable » lorsqu'il est apte à être exécuté par un microprocesseur sans que ce microprocesseur n'ait besoin au préalable de le compiler au moyen d'un compilateur ou de l'interpréter au moyen d'un interpréteur. 40 [0016] Une « instruction » désigne une instruction machine exécutable par un 7 microprocesseur. Une telle instruction est constituée : - d'un opcode, ou code d'opération, codant la nature de l'opération à exécuter, et -d'un ou plusieurs opérandes définissant la ou les valeurs des paramètres de cette opération. 5 [0017] Un « code machine » est un ensemble d'instructions machines. Il s'agit typiquement d'un fichier contenant une succession de bits portant la valeur « 0 » ou « 1 », ces bits codant les instructions à exécuter par le microprocesseur. Le code machine est directement exécutable par le microprocesseur, c'est-à-dire sans nécessiter une compilation ou une interprétation préalable. 10 [0018] Un « code binaire » est un fichier contenant une succession de bits portant la valeur « 0 » ou « 1 ». Ces bits codent des données et des instructions à exécuter par le microprocesseur. Ainsi, le code binaire comprend au moins un code machine et en plus, généralement, des données numériques traitées par ce code machine. [0019] Un « flot d'instructions » est une succession d'instructions classées les unes 15 après les autres et qui forme, dans le code machine, une suite ordonnée de bits. Le flot d'instructions débute par une instruction initiale et se termine par une instruction finale. Dans ce texte, ce flot d'instructions en mémoire est découpé en une succession de blocs de base immédiatement consécutifs ou séparés par des blocs de données. 20 [0020] Un « bloc de base » est un groupe d'instructions successives du flot d'instructions qui débute à une adresse de branchement et qui se termine par une seule instruction de branchement explicite ou implicite. Une instruction de branchement explicite se caractérise par la présence explicite d'un opcode dans le code machine qui code l'instruction de branchement. Une instruction de branchement 25 implicite correspond au cas où l'exécution d'un bloc de base précédent se poursuit systématiquement par l'exécution d'un bloc de base suivant situé, dans le code machine, immédiatement après le bloc de base précédent. Dans ce cas, étant donné qu'en absence d'instruction de branchement explicite, les instructions du code machine sont exécutées dans l'ordre les unes après les autres, il n'est pas nécessaire 30 d'introduire à la fin du bloc de base précédent une instruction de branchement explicite vers le bloc de base suivant. Dans cette description, on dit que dans ce cas, le bloc de base précédent se termine par une instruction de branchement implicite car elle n'est pas explicitement codée dans le code machine. Dans ce cas, le bloc de base précédent se termine juste avant l'adresse de branchement du bloc de base 35 suivant. Dans la suite de cette description, tous ce qui est décrit dans le cas des instructions de branchement explicite s'applique aussi aux instructions de branchement implicites. Dans cette demande, l'expression « instruction de branchement » désigne donc aussi bien une instruction de branchement explicite qu'implicite. Ainsi, l'exécution d'un bloc de base débute systématiquement par 40 l'exécution de l'instruction située à son adresse initiale et se termine 8 systématiquement par l'exécution de l'instruction de branchement qui termine ce bloc de base. Un bloc de base ne comporte pas d'autres instructions de branchement que celle située à la fin de ce bloc de base. Ainsi, les instructions d'un bloc de base sont systématiquement toutes lues par le microprocesseur les unes après les autres dans 5 l'ordre où elles sont présentes dans ce bloc de base. L'instruction de branchement peut diriger, lorsqu'elle est exécutée, le flot de contrôle systématiquement vers la même adresse de branchement ou, en alternance, vers différentes adresses de branchement. Ce dernier cas de figure se rencontre, par exemple, lorsqu'à la fin du bloc de base exécuté, le flot de contrôle peut se poursuivre vers un premier et, en 10 alternance, vers un deuxième bloc de base. [0021] Une « instruction de branchement » est une instruction qui, lorsqu'elle est exécutée par le microprocesseur, déclenche un saut vers l'adresse de branchement d'un autre bloc de base. Cette instruction de branchement comporte donc au moins l'adresse de branchement de cet autre bloc de base. Typiquement, à cet effet, cette 15 instruction remplace la valeur actuelle du compteur ordinal par la valeur de l'adresse de branchement. On rappelle que le compteur ordinal contient l'adresse de la prochaine instruction à exécuter par le microprocesseur. En absence d'instruction de branchement, à chaque fois qu'une instruction est exécutée, le compteur ordinal est incrémenté de la taille de l'instruction actuellement exécutée. En absence 20 d'instruction de branchement, les instructions sont systématiquement exécutées séquentiellement les unes après les autres dans l'ordre où elles sont enregistrées dans une mémoire principale. L'instruction de branchement peut être inconditionnelle, c'est à dire que le saut vers l'adresse de branchement est systématiquement réalisé dès que cette instruction est exécutée. Une instruction de branchement inconditionnel 25 est par exemple l'instruction « JMP » en langage assembleur pour les microprocesseurs de la série x86. L'instruction de branchement peut aussi être conditionnelle, c'est-à-dire que le saut vers l'adresse de branchement est déclenché lors de son exécution uniquement si une condition particulière est vérifiée. Par exemple, une instruction de branchement conditionnel est une instruction « JE », 30 « JA » ou « JNE » en assembleur. L'instruction de branchement peut aussi bien être un appel à une fonction. Dans ce texte, le terme « instruction de branchement » désigne aussi bien les instructions de branchement direct qu'indirect. Une instruction de branchement direct est une instruction de branchement qui contient directement la valeur numérique de l'adresse de branchement. Une instruction de branchement 35 indirect, est une instruction de branchement vers une adresse de branchement contenue dans une mémoire ou un registre du microprocesseur. Ainsi, contrairement à une instruction de branchement direct, une instruction de branchement indirect ne contient pas directement la valeur numérique de l'adresse de branchement. [0022] Une « adresse de branchement » est l'adresse dans la mémoire principale à 40 laquelle se trouve la première instruction exécutée d'un bloc de base. Par la suite, on 9 parle d'adresse de branchement même pour les blocs de base dont la première instruction est exécutée suite à l'exécution d'une instruction de branchement implicite. [0023] On parlera d'exécution d'une fonction pour désigner l'exécution des instructions réalisant cette fonction. 5 [0024] Description d'un mode de réalisation : [0025] Dans un souci de simplification, dans cette description et dans les figures, les instructions ne sont pas représentées sous forme binaire, mais plutôt sous une forme symbolique exprimée dans un langage évolué de plus haut niveau, appelé « pseudocode », directement compréhensible par un homme du métier. 10 [0026] La figure 1 représente un appareil électronique 2 comportant un calculateur électronique 4, une mémoire principale 6 et, éventuellement, un support 8 d'enregistrement d'informations. Par exemple, l'appareil 2 est un ordinateur, un smartphone, une tablette électronique ou similaire. [0027] Dans ce mode de réalisation, le calculateur 4 est un calculateur électronique 15 reconfigurable tel que celui décrit en détail dans le brevet US6077315. Ainsi, ici, seule une brève description de ce calculateur 4 est donnée. Il est renvoyé au brevet US6077315 pour une description plus détaillée de l'architecture du calculateur 4 et plus précisément à la description donnée en référence aux figures 1, 2, 2A et 2B de ce brevet. 20 [0028] Le calculateur électronique 4 comporte : - un microprocesseur 10 non reconfigurable, - un accélérateur matériel 12 configurable, - une mémoire cache 14 d'instructions, et - une mémoire cache 16 de données. 25 [0029] Le microprocesseur 10 est un microprocesseur classique capable d'exécuter un programme quelconque enregistré dans la mémoire 6. Ce microprocesseur 10 est non reconfigurable dans le sens où son architecture matérielle n'est pas configurable. De plus, contrairement au microprocesseur 106 du Brevet US6077315, le microprocesseur 10 est un microprocesseur conventionnel qui n'a pas été modifié 30 pour être capable d'exécuter des instructions spécifiques pour transférer l'exécution d'une fonction vers l'accélérateur 12. [0030] Par exemple, le microprocesseur 10 est un microprocesseur MSP430, commercialisé par la société TEXAS INSTRUMENTS®. [0031] L'accélérateur 12 est dit « configurable » car son architecture matérielle peut 35 être modifiée en réponse au chargement dans cet accélérateur 12 d'un jeu d'instructions de configuration. L'accélérateur 12 est, par exemple, un composant FPGA (« Field-Programmable Gate Array ») tel que celui décrit dans le brevet US6077315. [0032] La mémoire 6 comporte un programme 28 à exécuter. Le programme 28 peut 40 être un programme apte à commander des périphériques électroniques tels qu'une 10 interface homme-machine ou une imprimante. Il peut également s'agir d'un programme apte à acquérir des données transmises par des capteurs électroniques, puis à les traiter. Il peut aussi s'agir d'un programme qui traite des données techniques comme par exemple un programme de simulation assistée par ordinateur. 5 De façon plus générale, l'enseignement donné ici s'applique à tout type de programmes exécutés par un microprocesseur. [0033] Dans ce mode de réalisation, à titre d'illustration, le programme 28 n'est pas directement écrit dans le langage machine du microprocesseur 2, mais dans un langage intermédiaire indépendant des spécificités de l'architecture matérielle de 10 l'appareil 2 sur lequel doit être exécuté ce programme. Par exemple, le programme 28 est écrit en Bytecode, tel que du Bytecode Java®. [0034] Le programme 28 comporte de nombreuses fonctions et, en particulier, des fonctions paramétrées. Une fonction paramétrée est une fonction qui comporte au moins un paramètre dont la valeur est obtenue au moment où cette fonction est 15 appelée pour être exécutée par le microprocesseur 10 ou pendant son exécution par le microprocesseur 10. Fréquemment, un paramètre est un argument de la fonction dont la valeur est obtenue au moment où cette fonction est appelée pour être exécutée par le microprocesseur 10. On dit alors que le paramètre est explicite, car il figure explicitement comme argument de la fonction dont la valeur doit être fournie 20 pour que la fonction puisse être réalisée. C'est le cas le plus courant pour une fonction paramétrée. Toutefois, il existe aussi des paramètres qui n'apparaissent pas comme étant explicitement des arguments de la fonction, mais dont les valeurs sont lues en mémoire lors de la réalisation de cette fonction. C'est par exemple le cas d'une variable globale. Une telle variable globale est déclarée généralement au début 25 du programme et peut-être utilisée à l'intérieur de toutes les fonctions du programme sans qu'il soit nécessaire que cette variable globale apparaisse explicitement dans la liste des arguments de ces fonctions. Par exemple, une variable globale peut être utilisée pour contenir la taille d'une image ou d'une matrice. Un autre exemple d'un paramètre implicite est une variable destinée à contenir une valeur retournée par une 30 sous-fonction appelée par la fonction. [0035] Puisque les valeurs des paramètres d'une fonction ne sont pas nécessairement connues au moment où le programme est écrit, mais, par exemple seulement au moment de son exécution, chaque paramètre est codé comme une variable dans le code de la fonction paramétrée. Ainsi, le code de chaque fonction 35 paramétrée, contenu dans le programme 28, comporte des opérations de lecture de la valeur de chaque paramètre dans une mémoire, avant de pouvoir traiter ce paramètre. Par exemple, la valeur du paramètre est utilisée, à l'intérieur du code générique de la fonction, comme opérande d'une ou plusieurs opérations à réaliser. Il peut s'agir de n'importe quelle opération. Par exemple, ces opérations sont des 40 opérations arithmétiques, booléennes ou de lecture d'une données à une adresse 11 spécifiée par la valeur du paramètre. Le paramètre peut aussi être de nature non fonctionnelle. Par exemple, il contient des informations sur les caractéristiques de la micro-architecture du microprocesseur 10 sur lequel va être exécuté le programme 28. 5 [0036] Une fonction correspond à au moins un bloc de base. Une fonction n'est pas limitée à un seul bloc de base et peut comporter plusieurs blocs de base dont les exécutions doivent être enchaînées les unes après les autres. [0037] Par la suite, à titre d'illustration, on considère que le programme 28 comporte le code de trois fonctions génériques paramétrées notées, respectivement, F, G et H. 10 Ces trois fonctions génériques F, G et H sont représentées, sous forme de pseudocode compréhensible par l'homme du métier, respectivement, dans les figures 6 à 8. Ici, la fonction générique F réalise la multiplication de deux matrices A et B et enregistre le résultat dans une matrice R. Les paramètres de la fonction F sont les adresses où débutent les matrices A, B et R et les dimensions de ces matrices. 15 [0038] Dans le cas particulier décrit ici, pour exécuter le programme 28 sur le microprocesseur 2, la mémoire 6 comporte aussi : - le code d'un interpréteur 30 de Bytecode, et - le code d'un gestionnaire 34 du flux d'exécution du programme à exécuter. [0039] Chacun de ces codes 30 et 34 est, de préférence, écrit dans le langage 20 machine du microprocesseur 10 et donc directement exécutable par ce microprocesseur. [0040] L'interpréteur 30 est également connu sous le terme de « machine virtuelle » dans le cas particulier du Bytecode Java. L'interpréteur 30 contient un jeu de routines en langage machine associées à chaque instruction contenue dans le jeu 25 d'instructions Bytecode. L'interprétation consiste à exécuter la routine en langage machine correspondant à chaque instruction Bytecode du programme 28. [0041] Le gestionnaire 34 a pour fonction de gérer le flot d'exécution des programmes exécutés tel que le programme 28. En particulier, comme cela sera décrit plus en détail plus loin, le gestionnaire 34 est capable de diriger vers l'accélérateur 12 30 l'exécution d'une fonction prédéterminée. [0042] La mémoire 6 comporte aussi une base de données 36 de configurations et une table 38. [0043] La figure 2 représente schématiquement l'architecture de la base 36. La base 36 comporte ici plusieurs jeux différents d'instructions de configuration de 35 l'accélérateur 12. Par exemple, ces jeux d'instructions de configuration de l'accélérateur 12 sont des fichiers contenant chacun une représentation binaire d'une configuration de l'accélérateur 12. Un tel jeu d'instructions peut être obtenu en compilant une configuration de l'accélérateur 12 décrite en utilisant, par exemple, le langage VHDL (« VHSIC hardware description langage »). Pour simplifier la figure 2, 40 seuls trois jeux différents d'instructions, notés J1 à J3, sont représentés. Chacun de 12 ces jeux d'instructions peut être chargé dans l'accélérateur 12 pour modifier sa configuration matérielle et ainsi le rendre capable d'exécuter une fonction prédéterminée. Par la suite, on note Fspei, Gspei et Hspei les fonctions prédéterminées réalisées par l'accélérateur 12 lorsqu'il est chargé avec, respectivement, les jeux 31, 5 J2 et J3. Ici, ces fonctions Fspei, Gspei et Hspei correspondent, respectivement, aux fonctions génériques F, G et H mais spécialisées avec des valeurs prédéterminées pour leurs paramètres. Par exemple, la fonction Fspei est identique à la fonction F dans le cas particulier où les dimensions des matrices A, B et R sont égales, respectivement, à [6 x 5], [5 x 7] et [6 x 7]. Dans ce texte, le symbole [I, x ly] indique le 10 nombre de lignes (lx) et le nombre de colonnes (1y) de la matrice. La fonction Fspei est donc identique à la fonction F mais spécialisée avec les valeurs 6, 7 et 5 pour, respectivement, des paramètres MaxLine, MaxColumn et MaxElement de la fonction F représentés sur la figure 6. Le nombre de paramètres dont les valeurs doivent être fournies à la fonction Fspei est donc plus petit que dans le cas de la fonction F. 15 Toutefois, ici, la fonction Fspei admet encore trois paramètres qui sont les adresses des matrices A, B et R. Ainsi, même lorsque la fonction Fspei est exécutée par l'accélérateur 12, les valeurs de ces trois paramètres restant sont fournies à l'accélérateur 12. [0044] Ces jeux 31, J2 et J3 peuvent être chargés dans l'accélérateur 12 par le 20 microprocesseur 10. [0045] À chaque jeu d'instructions de configuration, la base 36 associe une ou plusieurs signatures préenregistrées différentes. Par exemple, ici, la base 36 associe trois signatures S11, S12 et S13 au jeu 31, une signature S21 au jeu J2 et quatre signatures S31 à S34 au jeu J3. 25 [0046] Chacune de ces signatures permet au gestionnaire 34 d'identifier, lors de l'exécution du programme 28, qu'une fonction prédéterminée est actuellement exécutée par le microprocesseur 10. Ici, les signatures S11 à S13 permettent d'identifier la fonction Fspei, la signature S21 permet d'identifier la fonction Gspei et les signatures S31 à 34 permettent d'identifier la fonction Hspel. 30 [0047] Il existe différentes façons de construire de tels signatures. Un premier exemple de réalisation est décrit ci-dessous dans le cas particulier de la signature S11. [0048] La signature S11 (figure 3) comporte au moins une séquence d'identifiants d'opcodes classés dans l'ordre où ces opcodes sont exécutés lorsque la fonction Fspei 35 est réalisée par le microprocesseur 10. Sur la figure 3, cette séquence est représentée par le symbole « Seq11 ». En effet, par analogie à une séquence prédéterminée de bases d'un brin d'ADN, une telle séquence d'identifiants d'opcodes peut être suffisante à elle seule pour identifier sans ambiguïté la fonction Fspei. En particulier, pour être capable d'identifier sans ambiguïté une fonction prédéterminée, 40 la séquence d'identifiants opcodes n'a pas besoin de contenir les identifiants de tous 13 les opcodes exécutés par le microprocesseur 10 lorsqu'il réalise cette fonction. Au contraire, en général, la séquence d'identifiants d'opcodes contient seulement les identifiants d'opcodes les plus caractéristiques de la fonction prédéterminée et non pas la totalité des identifiants des opcodes exécutés lors de la réalisation de cette 5 fonction prédéterminée. [0049] Lorsque la séquence d'identifiants d'opcodes n'est pas suffisante à elle seule pour identifier sans ambiguïté la fonction réalisée ou pour raccourcir cette séquence, la signature préenregistrée peut alors comporter en plus une cartographie préenregistrée d'au moins une partie des accès mémoires observés lorsque le 10 microprocesseur 10 exécute cette fonction prédéterminée. Par exemple, ici, la signature S11 comporte une cartographie préenregistrée Can. En effet, les positions relatives, c'est-à-dire les uns par rapport aux autres, des différents mots-machine accédés en mémoire 6 lors de la réalisation de la fonction par le microprocesseur 10 est aussi une caractéristique spécifique de la fonction prédéterminée. Elle peut donc 15 aider à identifier sans ambiguïté cette fonction parmi d'autres fonctions possibles. Cette caractéristique est indépendante de l'ordre dans lequel les opcodes de la fonction prédéterminée sont exécutés par le microprocesseur 10. [0050] Par « mot-machine », on désigne un groupe de taille fixe de cellules mémoires élémentaires manipulé en tant qu'une seule entité par les opcodes du langage-20 machine du microprocesseur 10. Typiquement, la taille d'un mot-machine est donc souvent égale à 8, 16, 32 ou 64 bits. [0051] Chaque cartographie comporte au moins une description de l'agencement dans la mémoire d'un ensemble de N mots-machine, où N est un nombre entier supérieur ou égale à 4, 10 ou 20. Ici, cette description définit les positions relatives, 25 c'est-à-dire les uns par rapport aux autres, des N mots-machine de cet ensemble. Les N mots-machine sélectionnés pour faire partie du même ensemble peuvent être : - des mots-machine uniquement accédés en lecture lors de l'exécution de la fonction, - des mots-machine uniquement accédés en écriture lors de l'exécution de la fonction, ou 30 - une combinaison des deux possibilités précédentes. [0052] A titre d'illustration, la cartographie Can comporte : - une description En11 qui définit les positions relatives des 30 mots-machine qui forment la matrice A, - une description En12 qui définit les positions relatives des 35 mots-machine qui 35 forment la matrice B, et - une description En13 qui définit les positions relatives des 42 mots-machine qui forment la matrice R. [0053] Ici, les descriptions En11, En12 et En13 sont indépendantes les unes des autres. Autrement dit, toutes modifications de l'une de ces descriptions n'a aucune 40 influence sur les autres descriptions. Dans le cas de la cartographie Can, les 14 descriptions En11, En12 et En13 ne précisent pas qu'elles sont les opcodes exécutés avant ou après l'accès à chacun de ces mots-machine. Par exemple, la description En11 définit un agencement de 35 mots-machine contigus les uns aux autres et formant une matrice de six lignes et cinq colonnes, 5 [0054] La figure 4 représente un autre mode de réalisation possible d'une signature préenregistrée. Cet autre mode de réalisation est décrit dans le cas particulier de la signature S12. [0055] Dans cet exemple, la signature S12 comporte une cartographie Ca12 contenant une description ER de l'agencement des 42 mots-machine formant la 10 matrice R. Sur ce point, la description ER est identique à la description En13. Toutefois, en plus, la description ER associe, à chaque mot-machine de la matrice R, une séquence d'identifiants d'opcodes exécutés juste avant ou après l'écriture dans ce mot-machine. Par exemple, dans le cas de la fonction Fspei, chaque mot-machine de l'ensemble ER est associé à la séquence Seq12 d'identifiants d'opcodes suivantes 15 {IdM ; IdA} exécutée avant chaque écriture dans un mot-machine de la matrice R, où - IdM est l'identifiant de l'opcode qui, lorsqu'il est exécuté par le microprocesseur 10, réalise une multiplication, et - IdA est l'identifiant de l'opcode qui, lorsqu'il est exécuté par le microprocesseur 10, 20 réalise une addition. [0056] En effet, comme on le comprendra à la lecture du pseudo-code représenté sur la figure 6, chaque écriture dans un mot-machine de la matrice R, est précédée d'une multiplication et d'une addition. [0057] De plus, dans ce cas particulier de la signature S12, la séquence Seq12 25 remplace la séquence Seq11. [0058] Une même fonction prédéterminée peut être programmée et compilée de différentes façons. Il existe donc généralement plusieurs variantes d'implémentation possibles pour réaliser la même fonction. Par exemple, au lieu d'utiliser l'algorithme de la figure 6 pour réaliser une multiplication de matrices, il est aussi possible 30 d'utiliser l'algorithme connu sous le terme anglais de « tiled matrix multiply algorithm » et décrit dans l'article « Matrix multiplication algorithm » du site https://en.wikipedia.org. Chaque variante d'implémentation peut correspondre à une signature différente construite selon l'un des modes de réalisation décrit ici. Par conséquent, de préférence, le même jeu 31 est associé à plusieurs signatures 35 différentes correspondant chacune à une variante respective d'implémentation de la même fonction Fspei. Sur la figure 2, c'est aussi le cas pour le jeux J3. [0059] La figure 5 représente schématiquement un exemple d'architecture possible pour la table 38. La table 38 a pour fonction d'associer l'adresse, dans le programme 28 où débute l'exécution d'une fonction prédéterminée, au jeu 40 d'instructions de configuration qui, lorsqu'il est chargé dans l'accélérateur 12, permet 15 à cet accélérateur d'exécuter cette fonction. Ici, par exemple, la table 38 contient l'adresse ©Fspei où débute l'exécution de la fonction F dans le programme 28. L'adresse ©Fspei est typiquement égale à l'adresse de branchement du premier bloc de base de la fonction F dans le programme 28. L'adresse ©Fspei est chargée dans le 5 compteur ordinal du microprocesseur 10, par exemple, suite à l'exécution d'une instruction de branchement. L'instruction de branchement peut être un saut conditionnel ou non ou un appel à une fonction. [0060] La table 38 associe à cette adresse ©Fspei, les valeurs des différents paramètres de la fonction F avec lesquels elle doit être spécialisée pour que son 10 exécution puisse être transférée vers l'accélérateur 12. Ainsi, dans l'exemple simplifié représenté sur la figure 5, la table 38 associe à l'adresse ©Fspei, les valeurs 6, 7 et 5 respectivement des paramètres MaxLine, MaxColumn, and MaxElement. [0061] La figure 6 représente sous la forme de pseudo-code compréhensible par l'homme du métier la fonction générique F qui peut être spécialisée pour obtenir la 15 fonction Fspei. Ici, cette fonction F est la fonction qui multiplie les matrices A et B, respectivement, de dimensions [MaxLine ; MaxElement] et [MaxElement ; MaxColumn] et enregistre le résultat dans la matrice R de dimension [MaxLine ; MaxColumn]. Les paramètres de cette fonction générique F sont ici les adresses ©A, ©B et ©R des premiers mots-machine des matrices, respectivement A, B et R. Les 20 paramètres de cette fonction générique F sont également les dimensions de ces matrices désignées ici par les termes MaxLine, MaxColumn et MaxElement. La fonction Fspei correspond à la fonction F dans le cas particulier où les paramètres MaxLine, MaxColumn et MaxElement sont respectivement égaux à 6, 7 et 5. On suppose ici que ces paramètres, et notamment les dimensions des matrices A, B et 25 R, sont uniquement connus au moment de l'exécution du programme 28. Dans le pseudo-code représenté dans la figure 6, le symbole « » désigne une opération d'addition du résultat de la multiplication A[line][elmt] x B[elmt][column] dans la cellule R[line][column] de la matrice R. [0062] Lors de l'exécution du programme 28, cette fonction F est appelée avec des 30 valeurs connues pour chacun de ses paramètres. [0063] La figure 7 représente sous une forme de pseudo-code compréhensible par l'homme du métier la fonction générique G. Cette fonction G est paramétrée par trois paramètres, à savoir ©P, Lmax et Cmax. Le paramètre ©P est l'adresse du premier pixel d'une image enregistrée sous la forme d'une matrice de pixels de Lmax lignes et 35 de Cmax colonnes. Dans cette matrice, chaque cellule P[line][column] correspond à un mot-machine de 32 bits. Les 8 premiers bits de ce mot-machine code l'intensité du rouge dans l'espace de couleur RGB (Red, Green, Blue). Les 8 bits suivants de ce même mot-machine code l'intensité du vert dans le même espace. Les 8 bits suivants de ce mot-machine codent le bleu toujours dans le même espace et les 8 derniers 40 bits du mot-machine code la transparence de la couleur. 16 [0064] Chacun de ces codes couleurs ainsi que la transparence doit être compris entre 0 et maxval par exemple. Ainsi, un traitement classique de cette image consiste à s'assurer que la valeur de chaque code couleur et du code de transparence de chaque cellule de la matrice est bien compris entre 0 et maxval. Si ce n'est pas le 5 cas, alors la valeur actuelle des 8 bits concernés est remplacée par la valeur 0 ou maxval. La fonction générique G représentée sur la figure 7 réalise ce traitement de l'image. Dans cette figure, la fonction Extract(P[line][column], i) renvoie la valeur de la plage de 8 bits située à la position i. Lors que i = 0, cette fonction renvoie la valeur des 8 premiers bits du pixel P[line][column], lorsque i = 1, la fonction Extract renvoie 10 la valeur des 8 bits suivants du pixel P[line][column] et ainsi de suite jusqu'à i = 3. La fonction Write(P[line][column] ; i ; r) écrit la valeur r dans la plage de 8 bits située à la position i. [0065] Lorsque la fonction G est spécialisée avec les valeurs 10, 10 et 255 pour les paramètres, respectivement, Lmax, Cmax et maxval, elle correspond à la fonction 15 Gspel- [0066] La signature S21 permet d'identifier l'exécution de la fonction Gspei. Par exemple, pour cela, la signature S21 est identique à la signature S11 sauf que la séquence Seq11 est remplacée par une séquence Seq21 et la cartographie Ca11 est remplacée par une cartographie Ca21. 20 [0067] La séquence Seq21 comporte une séquence primaire Seq211. La séquence Seq211 est la suivante {IdC0 ; IdC255}, où : - IdCO est l'identifiant de l'opcode de comparaison à 0, - IdC255 est l'identifiant de l'opcode de comparaison à 255. [0068] La séquence primaire Seq211 est répétée quatre fois d'affilée pour obtenir une 25 séquence secondaire Seq212 et cette séquence Seq212 est répétée cent fois d'affilée pour obtenir la séquence Seq21. [0069] La cartographie Ca21 comporte une description qui définit les positions relatives des 100 mots-machine de la matrice qui contient les pixels de l'image traitée. Dans une variante simplifiée, la cartographie Ca21 peut être omise car, ici, la 30 sequence Seq21 est suffisante à elle-seul pour identifier sans ambiguïté la fonction Gspel- [0070] On notera que la signature S21 aurait aussi pu être construite de façon similaire à ce qui a été décrit pour la signature S12. En effet, la fonction Gspei se caractérise également par le fait qu'après chaque accès en lecture à un pixel de 35 l'image, les opcodes identifiés par la séquence Seq212 sont exécutés. Ainsi, une variante possible de la signature S21 est construite en associant la séquence Seq212 à chacun des 100 mots-machine dont les positions relatives sont définies par la cartographie Ca21. [0071] La figure 8 représente le code, en langage C, de la fonction générique H qui 40 calcule la différence entre des blocs de pixels de deux images différentes. Ce code 17 provient du projet VideoLAN et plus précisément du fichier « pixel.c » téléchargeable gratuitement depuis le site Internet www.videolan.org. Le code de cette fonction H a été écrit par Loren Merritt (lorenm©u.washington.edu), Laurent Aimar (fenrir©via.ecp.fr) et Fiona Glaser (fiona@x264.com). Étant donné que cette fonction 5 H est bien connue, celle-ci n'est pas décrite ici en détail. On observera seulement que la fonction H admet plusieurs paramètres dont notamment : - la largeur lx du bloc, - la hauteur ly du bloc, - l'adresse *picl du bloc de pixels dans la première image, 10 - l'adresse *pic2 du bloc de pixels dans la deuxième image, - la distance i_stride-pix1 entre deux lignes consécutives du bloc dans la première image, - la distance i_stride_pix 2 entre deux lignes consécutives du bloc dans la deuxième image. 15 [0072] La fonction Hspei correspond à la fonction H spécialisée avec des valeurs particulières pour la largeur lx et la hauteur ly du bloc. [0073] La fonction Hspei se caractérise notamment, après chaque accès en lecture à un pixel de chacune des première et deuxième images, par l'exécution dans l'ordre : - d'un opcode qui calcule une différence (ligne 13 du code représenté), 20 - d'un opcode qui calcule une valeur absolue (ligne 13 du code représenté), - d'un opcode qui calcule une somme (ligne 13 du code représenté), - par la réitération des calculs précédents lx x ly, et - la lecture en alternance d'un pixel dans la première image, puis d'un pixel dans la deuxième image. 25 [0074] À partir de ces observations, et des enseignements donnés précédemment en regard des signatures S11 et S12, il est possible de construire plusieurs signatures pour identifier cette fonction Hspei. Ici, les quatre signatures S31 à S34 sont construites pour cela. [0075] Le fonctionnement de l'appareil 2 va être décrit en référence au procédé de la 30 figure 9. [0076] Le procédé débute par une étape 100, lors de laquelle la base 36 est construite. Lors de cette étape, un programmeur développe et conçoit les différents jeux d'instructions de configuration et notamment les jeux 31 à J3. [0077] Les jeux d'instructions enregistrés dans la base 36 peuvent être choisis en 35 fonction des connaissances que l'on a sur les fonctions exécutées par le programme 28. Ils peuvent aussi être choisis sur la base d'autres critères tels que des connaissances statistiques sur l'intérêt d'implémenter tel ou tel jeu d'instructions dans un calculateur pour accélérer l'exécution d'un programme qu'on ne connaît pas à l'avance. Ainsi, le choix des jeux d'instructions peut être fait indépendamment du ou 40 des programmes qui seront exécutés par le calculateur 4. 18 [0078] Pour chaque jeu d'instructions enregistré dans la base 36, le programmeur construit une ou plusieurs signatures aptes à identifier la fonction prédéterminée, correspondant à ce jeu d'instructions, lorsqu'elle est exécutée par le microprocesseur 10. Chacune de ces signatures construites est enregistrée et associée dans la base 5 36 au jeu d'instructions correspondant. [0079] Typiquement, à ce stade, le programmeur construit une signature pour chaque variante possible d'implémentation de la fonction prédéterminée ou au moins pour les variantes d'implémentation habituelles de cette fonction prédéterminée. En effet, comme déjà indiqué précédemment, une même fonction peut être implémentée de 10 différentes façons dans un programme de sorte que la présence de différentes signatures permet d'augmenter la probabilité que l'exécution de cette fonction prédéterminée soit correctement identifiée. Lors de cette étape, le programmeur construit notamment les différentes signatures représentées sur la figure 2. [0080] Lors d'une étape 102, la base 36 construite est fournie au calculateur 4. Par 15 exemple, elle est enregistrée à cet effet dans la mémoire 6. [0081] Ensuite, lors d'une phase 110, l'exécution de programmes par le calculateur 4 débute. Cette phase 110 est décrite par la suite dans le cas particulier du programme 28 et de la fonction Fspei. Toutefois, ce qui est décrit dans ce cas particulier se généralise sans difficulté à tout autre programme et toute autre fonction 20 prédéterminée. [0082] Lors d'une étape 112, le programme 28 est chargé dans la mémoire 6. [0083] Puis, lors d'une étape 116, le microprocesseur 10 commence par exécuter l'interpréteur 30. L'interprétation consiste à exécuter la routine en langage machine correspondant à chaque instruction Bytecode du programme 28 en les balayant les 25 unes après les autres. Lors de ces réitérations de l'étape 116, le microprocesseur 10 obtient d'abord les valeurs de chaque paramètre d'une fonction paramétrée avant de l'appeler avec les valeurs ainsi obtenues. L'appel de la fonction se matérialise par un branchement vers une adresse de branchement où est enregistrée la première instruction du code générique de cette fonction. 30 [0084] Dès qu'un branchement vers l'adresse de branchement d'une fonction doit être exécuté, lors d'une étape 118, le gestionnaire 34 est exécuté par le microprocesseur 10. L'exécution d'un tel branchement correspond à l'appel d'une fonction avec les valeurs des paramètres obtenues lors de l'exécution de l'étape 116. [0085] Lors de l'étape 118, le gestionnaire 34 vérifie si la fonction appelée correspond 35 à la fonction Fspei configurée dans l'accélérateur 12. Pour cela, par exemple, le gestionnaire 34 vérifie d'abord si l'adresse de branchement vers laquelle est dirigée l'exécution du code du programme 28 correspond à l'adresse ©Fspei enregistrée dans la table 38. Dans l'affirmative, le gestionnaire 34 vérifie également si les valeurs des paramètres avec lesquelles la fonction F est appelée correspondent aux valeurs 40 enregistrées pour ces paramètres dans la deuxième colonne de la table 38. Si au 19 moins l'une de ces deux vérifications n'est pas réalisée avec succès, alors le gestionnaire 34 ne déclenche pas l'exécution de la fonction Fspei par l'accélérateur 12. [0086] Dans le cas contraire, c'est-à-dire si ces deux vérifications sont réalisées avec succès, alors le gestionnaire 34 détecte que l'exécution par l'accélérateur 12 de la 5 fonction Fspei doit être déclenchée. Dans ce dernier cas, ici, l'accélérateur 12 est déjà actuellement configuré pour exécuter cette fonction Fspei. Le gestionnaire 34 procède alors à l'exécution d'une étape 120. [0087] Lors de l'étape 120, le microprocesseur 10 déclenche l'exécution de la fonction Fspel par l'accélérateur 12. Cette fonction Fspei n'est alors pas exécutée par le 10 microprocesseur 10 mais par l'accélérateur 12. Dès lors, ici, tant que l'accélérateur 12 n'a pas fini d'exécuter la fonction Fspei, l'exécution de l'étape 116 est suspendue. [0088] On notera que lorsque l'étape 120 est exécutée, il n'est pas nécessaire d'interpréter ou de compiler le code générique de la fonction F, ce qui constitue déjà un gain de temps substantiel. De plus, comme expliqué précédemment, l'accélérateur 15 12 exécute plus rapidement la fonction Fspei que le microprocesseur 10. Ainsi, l'exécution de la fonction Fspei est substantiellement accélérée. À la fin de l'exécution de la fonction Fspei par l'accélérateur 12, l'exécution de l'étape 116 reprend après les instructions d'appel de la fonction Fspel- [0089] Le basculement de l'exécution d'une fonction vers un accélérateur matériel 20 puis le retour vers le programme ayant appelé cette fonction est par exemple décrit dans l'article suivant : Pablo De Oliveira Castro, Chadi Akel, Eric Petit, Mihail Popov, and William Jalby. CERE: « LLVM-based Codelet Extractor and REplayer for piecewise benchmarking and optimization ». ACM Transactions on Architecture and Code Optimization (TACO) , 12(1):6, 2015. 25 [0090] Si à l'issue de l'étape 118, le gestionnaire 34 n'a pas détecté le déclenchement de l'exécution de la fonction Fspei, il procède à une étape 124 de collecte d'une signature de la fonction appelée. En parallèle, la fonction appelée est exécutée par le microprocesseur 10. Pour cela, l'exécution de l'étape 116 se poursuit en parallèle de l'étape 124. 30 [0091] Lors de l'étape 124, le gestionnaire 34 collecte la signature de la fonction appelée. A cet effet, ici, pendant toute la durée de l'exécution de la fonction appelée, il collecte dans l'ordre d'exécution : - les identifiants des opcodes exécutés par le microprocesseur 10 pour obtenir une séquence collectée d'identifiants d'opcodes exécutés, et 35 - les adresses des mots-machine de la mémoire 6 lus ou écrits au cours de l'exécution de cette fonction appelée pour obtenir une séquence collectée d'adresses. [0092] Lors de cette étape, si la base 36 comporte des signatures préenregistrées comme la signature S12, alors, la séquence d'identifiants d'opcodes exécutés immédiatement avant et après un accès à la mémoire est également collectée. Par 40 « séquence d'identifiants d'opcodes exécutés immédiatement avant un accès 20 mémoire », on désigne une séquence ordonnée d'identifiants d'opcodes exécutés uniquement entre le précédent accès à la mémoire et cet accès à la mémoire. Par « séquence d'identifiants d'opcodes exécutés immédiatement après un accès mémoire », on désigne une séquence ordonnée d'identifiants d'opcodes exécutés 5 uniquement entre cet accès à la mémoire et le suivant. Par exemple, dans un mode de réalisation, lors de l'étape 124, le gestionnaire 34 relève tous les identifiants d'opcodes exécutés pendant toute la durée de l'exécution de la fonction appelée. De plus, pour chaque identifiant d'opcodes correspondant à un opcode qui, lorsqu'il est exécuté par le microprocesseur 10, déclenche un accès à la mémoire 6, le 10 gestionnaire 34 collecte en plus l'adresse du mot-machine lu ou écrit et l'associe à cet identifiant d'opcodes dans la séquence d'identifiants d'opcodes collectée. À partir d'une telle séquence, il est donc possible de connaître, quels sont les opcodes exécutés immédiatement avant et immédiatement après un accès à la mémoire 6. Il est également possible de connaître le type d'accès à la mémoire 6 parmi les deux 15 types d'accès possibles, c'est-à-dire un accès en lecture et un accès en écriture. [0093] Au fur et à mesure que la signature est collectée lors de l'étape 124 ou lorsque l'exécution de la fonction appelée par le microprocesseur 10 est terminée, lors d'une étape 128, le gestionnaire 34 compare la signature collectée à chacune des signatures préenregistrées dans la base 36. 20 [0094] Selon le type de signature préenregistrée, cette comparaison est réalisée de différentes manières. [0095] Si la signature préenregistrée comporte uniquement une séquence préenregistrée telle que la séquence Seq11 de la figure 3 et aucune cartographie préenregistrée des accès mémoires, alors le gestionnaire 34 essaie de trouver dans 25 la séquence collectée d'identifiants d'opcodes exécutés, une séquence d'identifiants identique à la séquence préenregistrée. Une séquence collectée est identique à une séquence préenregistrée si elle comporte les mêmes identifiants dans le même ordre. Selon les modes de réalisation mis en oeuvre, pour qu'il y ait identité entre la séquence collectée et la séquence préenregistrée, il est aussi possible d'imposer que 30 les identifiants de la séquence collectée soit tous immédiatement consécutifs, c'est-à-dire qu'ils ne soient pas séparés les uns des autres par un ou plusieurs identifiants qui n'appartiennent pas à la séquence préenregistrée. Dans l'affirmative, le gestionnaire 34 en déduit que la signature collectée correspond à la signature préenregistrée dans la base 36. Dans le cas contraire, il en déduit que la signature 35 collectée ne correspond pas à cette signature préenregistrée. [0096] Si la signature préenregistrée comporte en plus une cartographie telle que la cartographie Can, pour chaque description En11 à En13, le gestionnaire 34 recherche dans la séquence collectée d'adresses un agencement de mots-machine qui correspond à cette description. Ici, le gestionnaire 34 considère qu'un 40 agencement de mots-machine correspond à une description contenue dans une 21 cartographie préenregistrée si cet agencement est identique à celui défini par cette description. [0097] Seulement si le gestionnaire 34 trouve dans la signature collectée : - une séquence d'identifiants d'opcodes identique à la séquence d'identifiants 5 d'opcodes enregistrée dans la signature préenregistrée, et - pour chaque description d'un agencement de mots-machine contenue dans la cartographie de cette signature préenregistrée, un agencement correspondant de mots-machine dans la séquence collectée d'adresses, alors, le gestionnaire 34 en déduit que la signature collectée correspond à la 10 signature préenregistrée. [0098] Si la signature préenregistrée est construite comme décrit dans le cas particulier de la signature S12 : 1) le gestionnaire 34 recherche, dans la séquence collectée d'adresses, un agencement de mots-machine lus ou écrits qui correspond à la description ER, puis 15 2) le gestionnaire 34 vérifie que l'opération d'écriture ou de lecture de chacun des mots-machine de cet agencement a bien été immédiatement précédée ou suivie de la séquence d'identifiants d'opcodes associée à ce mot-machine par la description ER. [0099] La vérification 2) ci-dessus est réalisée à partir de la séquence d'identifiants d'opcodes collectée. 20 [00100] La comparaison de la signature collectée à la signature préenregistrée peut aussi être réalisée en parallèle de l'exécution de l'étape 124. Ceci est illustré dans le cas particulier de la signature S12. Avant le début de l'étape 124, le gestionnaire 34 construit une grille 130 (figure 10) dans laquelle chaque case est disposée par rapport aux autres cases comme défini par la description ER. Ici, la grille 25 130 est donc une matrice rectangulaire de six lignes et sept colonnes. On considère que l'adresse de la case située à l'angle supérieur gauche de cette grille 130 correspond à l'adresse ©R de la matrice R passée en tant que paramètre à la fonction appelée. Ainsi, il existe une correspondance entre l'adresse des mots-machine écrits dans la mémoire 6 et chaque case de cette grille 130. 30 [00101] Lors de l'exécution de l'étape 124, chaque fois que la fonction appelée écrit un mot-machine correspondant à une case de cette grille dans la mémoire 6, lors de l'étape 128, le gestionnaire 34 vérifie si cette opération d'écriture a été immédiatement précédée, dans l'ordre, par une opération de multiplication puis une opération d'addition. Si c'est le cas, le gestionnaire 34 marque cette case. Dans le 35 cas contraire, le gestionnaire 34 ne marque pas cette case. Sur la figure 30, les cases déjà marquées dans la grille 130 sont grisées, tandis que les cases non encore marquées sont blanches. [00102] Si à la fin de l'exécution de l'étape 124, toutes les cases de la grille 130 sont marquées, alors le gestionnaire 34 en déduit que la signature collectée 40 correspond à la signature S12. Dans le cas contraire, il en déduit une absence de 22 correspondance avec la signature S12. [00103] Si à l'issue de l'exécution de l'étape 128, le gestionnaire 34 a déterminé que la signature collectée ne correspond à aucune des signatures préenregistrées dans la base 36, alors l'exécution du programme 28 se poursuit et le procédé 5 retourne à l'étape 116. [00104] Si au contraire, à l'issue de l'exécution de l'étape 128, le gestionnaire 34 a déterminé que la signature collectée correspond à l'une des signatures préenregistrées dans la base 36, alors, lors d'une étape 132, le gestionnaire 130 charge le jeu d'instructions associé à cette signature préenregistrée dans 10 l'accélérateur 12. Ensuite, il enregistre dans la table 38, à la place des données déjà présentes dans cette table : - l'adresse de branchement à laquelle débute l'exécution de la fonction identifiée, et - les valeurs des paramètres avec lesquels cette fonction doit être spécialisée pour correspondre à la fonction exécutée par l'accélérateur 12. 15 En faisant cela, le gestionnaire 34 associe cette adresse de branchement à l'accélérateur 12 et donc au jeu d'instructions de configuration chargé préalablement dans l'accélérateur 12 et qui permet de réaliser plus rapidement la fonction identifiée. [00105] Après avoir réalisé ces opérations, l'exécution du programme 28 se poursuit et le procédé retourne à l'étape 116. 20 [00106] Dès lors, comme expliqué précédemment, si la fonction, par exemple la fonction Fspei, doit de nouveau à être exécutée, celle-ci sera alors exécutée par l'accélérateur 12 et non pas par le microprocesseur 10. [00107] La figure 11 représente un appareil électronique 150 identique à l'appareil électronique 2, sauf que : 25 - l'accélérateur 12 est remplacé par un coprocesseur 152, et - la base 36 est remplacée par une base 154. [00108] Le coprocesseur 152 est spécialement conçu pour exécuter un type particulier de fonction plus rapidement que ce qui peut être fait avec le microprocesseur 10. Par exemple, le coprocesseur 152 peut-être : 30 - un coprocesseur connu sous l'acronyme DSP (« Digital Signal Processing ») spécialement conçu pour exécuter rapidement des fonctions de traitement d'un signal, - un coprocesseur connu sous l'acronyme GPU (« Graphical Processing Unit ») spécialement conçu pour exécuter rapidement des fonctions de traitement d'une 35 image, - un coprocesseur connu sous le terme « calculateur quantique » spécialement conçu pour exécuter rapidement des fonctions nécessitant peu d'entrées, ou - un coprocesseur de sécurité spécialement conçu pour exécuter rapidement des fonctions de chiffrement et de déchiffrement. 40 [00109] La base de données 154 est identique à la base 36, sauf que chaque 23 jeu d'instructions est un code-machine d'une fonction prédéterminée exécutable directement par le coprocesseur 152. [00110] Le fonctionnement de l'appareil 150 se déduit des explications données en référence à la figure 9. Toutefois, dans le cas de l'appareil 150, lors de l'étape 132, 5 à chaque fois qu'une nouvelle fonction prédéterminée est identifiée, une ligne supplémentaire est ajoutée dans la table 38. Cette ligne supplémentaire comporte, en plus de l'adresse de branchement où débute l'exécution de la fonction identifiée et des valeurs des paramètres de cette fonction identifiée, un lien vers le jeu d'instructions de la base 36 à exécuter par le coprocesseur 152. Le jeu d'instructions 10 à exécuter est celui associé à la signature préenregistrée reconnue. Ainsi, typiquement, la table 38 comporte plusieurs lignes. Lors de l'étape 120, c'est le code-machine associé par la table 38 à l'adresse de la fonction appelée qui est exécuté par le coprocesseur 152 pour réaliser cette fonction. [00111] La figure 12 représente un appareil électronique 160, identique à 15 l'appareil 150, sauf que l'accélérateur 12 est omis et que la base de données 36 est remplacée par une base de données 162. [00112] La base 162 est par exemple identique à la base 154, sauf que chaque jeu d'instructions est un code-machine d'une fonction prédéterminé directement exécutable par le microprocesseur 10. 20 [00113] Le fonctionnement de l'appareil 160 se déduit des explications données en référence à la figure 11. Toutefois, dans le cas de l'appareil 160, lors de l'étape 120, le code-machine associé, par la table 38, à l'adresse de branchement de la fonction appelée est exécuté par le microprocesseur 10 pour réaliser cette fonction. Ainsi, l'exécution du programme 28 est rendue plus rapide car, dans ce cas, il n'est 25 pas nécessaire d'interpréter systématique le Bytecode de la fonction prédéterminée appelée. [00114] Les variantes suivantes des modes de réalisation décrits ici sont possibles : [00115] Variantes de la cartographie préenregistrée: 30 [00116] Dans une variante, la description d'un agencement de mots-machine associe à un seul ou seulement à quelques uns de ces mots-machine, une séquence d'identifiants d'opcodes exécutés immédiatement après l'écriture ou la lecture d'une donnée dans ce mot-machine. Par exemple, cette séquence d'identifiants d'opcodes identifie les opérations réalisées sur la donnée immédiatement après sa lecture 35 depuis ce mot-machine. [00117] Dans une autre variante, la description d'un agencement de mots- machine associe à au moins un de ces mots-machines une séquence d'identifiants d'opcodes exécutés contenant à la fois des identifiants d'opcodes exécutés immédiatement avant et après la lecture ou l'écriture dans ce mot-machine. 40 [00118] Les séquences d'identifiants d'opcodes associées aux mots-machine 24 par la description de l'agencement de ces mots-machine en mémoire, peuvent être différentes les unes des autres. Ces séquences d'identifiants d'opcodes peuvent également différer les unes des autres selon le type d'accès au mot-machine. Par exemple, la séquence d'identifiants associée au mot-machine lorsque l'accès à ce 5 mot-machine est un accès en écriture, n'est pas la même que la séquence d'identifiants associée à ce même mot-machine lorsque l'accès à ce même mot-machine est un accès en lecture. [00119] Dans une autre variante, seuls certains mots-machine d'une description d'un agencement de mots-machine sont associés à des séquences d'identifiants 10 d'opcodes et d'autres mots-machine de cette même description sont associés à aucune séquence d'identifiants d'opcodes. Lorsqu'un mot-machine est associé à aucune séquence d'identifiants d'opcodes, cela signifie que les opcodes exécutés immédiatement avant ou après l'écriture ou la lecture dans ce mot-machine ne sont pas utilisés pour identifier la fonction lors de son exécution par le microprocesseur 10. 15 [00120] Comme déjà illustré précédemment, la signature préenregistrée d'une fonction ne comporte pas nécessairement une cartographie préenregistrée. [00121] La description d'un agencement de mots-machine n'est pas limitée au cas où cet agencement correspond à une matrice dans laquelle les mots-machine sont disposés en lignes et en colonnes. La description peut définir des agencements 20 quelconque de mots-machine en mémoire. Par exemple, une description peut définir un agencement de N mots-machine dans lequel les mots-machine sont séparés les uns des aux autres par un intervalle régulier ou non mais connu à l'avance. Dans le cas de la fonction Fspei, la cartographie préenregistrée peut comporter une descriptions définissant en plus les positions relatives, les unes par rapport aux 25 autres, des matrices A, B et R. [00122] Une même cartographie préenregistrée peut comporter des descriptions de plusieurs agencements différents de mots-machine. [00123] Dans un mode de réalisation simplifié, la base 36 comporte un seul jeu d'instructions. 30 [00124] Le nombre de signatures associées, par la base 36, à un même jeu d'instructions peut être plus grand que celui illustré dans les exemples précédents. Par exemple, le nombre de signatures préenregistrées associées à un même jeu d'instructions peut être supérieur à 5, 10 ou 20. [00125] La base 36 peut aussi comporter plusieurs jeux d'instructions différents 35 qui correspondent tous à la même fonction générique mais spécialisée avec différentes valeurs pour ses paramètres. [00126] Variantes du calculateur électronique : [00127] D'autres modes de réalisation de l'accélérateur matériel sont possibles. Par exemple, dans un mode de réalisation particulier, l'accélérateur matériel est un 40 bloc matériel connu sous le terme anglais de « IP MATERIAL ». Ce bloc matériel est 25 préconfiguré pour exécuter une fonction prédéterminée paramétrée. Ainsi, dans ce cas, le jeu d'instructions charge dans le bloc matériel défini uniquement les valeurs des paramètres de cette fonction spécifique. Par exemple, de tels blocs matériels sont connus pour la réalisation de transformées de Fourier. 5 [00128] Dans un autre mode de réalisation, plusieurs fonctions différentes peuvent être simultanément configurées dans l'accélérateur 12. Par exemple, à cet effet, l'accélérateur 12 est partitionné en plusieurs régions configurées indépendamment les unes des autres, de sorte que chacune de ces régions est capable d'exécuter une fonction prédéterminée particulière. Dans ce cas, par 10 exemple, la table 38 comporte plusieurs adresses de branchement correspondant chacune à l'une des fonctions actuellement configurées dans l'accélérateur 12. De plus, par exemple associées à chacune de ces adresses de branchement, la table 38 comporte des instructions supplémentaires pour activer seulement la région de l'accélérateur 12 qui réalise la fonction souhaitée. Ainsi, dans ce cas, la table 38 peut 15 comporter plusieurs lignes, même lorsque le calculateur 4 utilise un accélérateur matériel. [00129] Variantes du procédé : [00130] Dans un mode de réalisation simplifiée, les fonctions prédéterminées, dont les exécutions doivent être accélérées, sont uniquement des fonctions 20 spécialisées lors du développement du programme ou lors de la compilation de ce programme. Dans ce cas, lors de l'exécution du programme, ces fonctions sont toujours exécutées avec les mêmes valeurs des paramètres. La table 38 peut alors être simplifiée en supprimant la deuxième colonne. De même, il n'est plus nécessaire de relever la valeur des différents paramètres de cette fonction pour décider si l'étape 25 120 doit être ou non exécutée. [00131] Dans un mode de réalisation particulier, l'accélérateur matériel est capable d'exécuter une fonction générique et non pas une fonction spécialisée. Dans ce cas, les valeurs de tous les paramètres de la fonction générique sont transmises à l'accélérateur 12 au début de l'étape 120 pour qu'il puisse correctement exécuter 30 cette fonction. [00132] La configuration de l'accélérateur 12 peut aussi être réalisée à d'autres moments que lors de l'exécution de l'étape 132. Par exemple, en variante, la configuration de l'accélérateur 132 est réalisée au début de l'étape 120. [00133] Ce qui a été décrit ici fonctionne aussi dans le cas où le programme 28 35 est directement écrit dans un langage machine exécutable par le microprocesseur 10. Dans ce dernier cas, le programme 28 n'a pas besoin d'être interprété. L'interpréteur 30 peut donc être omis dans ce type de situation. Ce mode de réalisation conserve un intérêt surtout dans le cas des appareils 2 et 150. [00134] Dans les exemples précédents, l'étape 118 a été décrit comme étant 40 déclenchée par un appel à une fonction. Toutefois, comme indiqué, la fonction, dont 26 l'exécution peut être accélérée, n'est pas nécessairement une fonction appelée par une instruction d'appel dans le programme 28. La fonction qui peut être accélérée peut aussi être un bloc de base du flot d'instructions du programme. Dans ce cas, la détection de cette fonction est par exemple déclenchée et initialisée à chaque fois 5 qu'une instruction de branchement vers un nouveau bloc de base est exécutée. [00135] L'étape 128 peut être réalisée différemment. Par exemple, pour déterminer si la signature collectée correspond à la signature préenregistrée, il peut être toléré une marge d'erreur et l'on n'est pas obligé de se limiter à une identité entre ces deux signatures. Par exemple, en variante, un taux de corrélation entre la 10 signature collectée et la signature préenregistrée est calculé. Si ce taux de corrélation dépasse un seuil prédéterminé, alors le gestionnaire 34 en déduit que les signatures collectée et préenregistrée correspondent. Ce seuil peut être inférieur à la valeur du taux de corrélation qui est obtenue quand la signature collectée est identique à la signature préenregistrée. Ainsi, en variante, le gestionnaire 34 peut considérer que la 15 séquence collectée d'adresses correspond à la description d'un agencement de mots-machine, si le taux de corrélation entre ces deux éléments dépasse un seuil prédéterminé et cela même s'il n'y a pas une identité stricte entre ces deux éléments. [001361 Avantages des modes de réalisation décrits ici : [00137] Lors de l'exécution du programme, la séquence collectée d'identifiants 20 d'opcodes est comparée à une séquence préenregistrée d'opcodes, ce qui permet d'identifier une fonction prédéterminée même au cours de l'exécution du programme 28. On notera que l'identification d'une telle fonction est possible, sans qu'il soit nécessaire pour cela d'instrumenter le code du programme à exécuter. En particulier, il n'est pas nécessaire d'insérer dans le programme des instructions qui indiquent 25 explicitement quelles sont les fonctions dont l'exécution peut être accélérée. Ainsi, les procédés décrits ici fonctionnent avec tout type de programme exécutable et peu importe comment et par quel moyen ce programme exécutable a été écrit et compilé. De plus, dans le procédé décrit ici, la décision d'accélérer l'exécution ou non d'une fonction du programme est prise lors de l'exécution de ce programme et non pas lors 30 de son écriture ou lors de sa compilation. Ainsi, contrairement au procédé connu, cette décision peut prendre en compte des données et des paramètres qui sont seulement connus lors de l'exécution du programme. Cela offre plus d'opportunités pour accélérer l'exécution du programme. [00138] Le fait d'utiliser, en plus d'une séquence d'opérations, une cartographie 35 préenregistrée des accès mémoires permet d'identifier de façon encore plus fiable et simple une fonction prédéterminée lors de l'exécution du programme. [00139] Le fait que la cartographie comporte une description définissant l'agencement de N mots-machine indépendamment des d'opcodes exécutés immédiatement avant ou après l'accès par le microprocesseur 10 à chacun de ces 40 mots-machine permet d'obtenir une signature plus indépendante vis-à-vis des 27 différentes variantes possibles d'implémentation de cette fonction. Grâce à cela, le nombre de signatures à associer à un même jeu d'instructions peut être diminué tout en étant capable d'identifier le même nombre de variantes d'implémentation de cette fonction. 5 [00140] Le fait d'utiliser, en tant que signature d'une fonction prédéterminée, des séquences d'identifiants d'opcodes exécutés immédiatement avant ou après l'écriture ou la lecture dans l'un des mots-machine d'un agencement défini de mots-machine permet d'améliorer encore plus la fiabilité de l'identification d'une fonction lors de son exécution. 10 [00141] Le fait d'utiliser uniquement des séquences d'identifiants d'opcodes chacune associée à un mot-machine d'un agencement défini de N mots-machine, permet d'utiliser des séquences d'identifiants d'opcodes plus courtes, REVENDICATIONS1. Procédé d'exécution d'un programme par un appareil électronique, ce pro- gramme comportant une fonction à réaliser, caractérisé en ce que le procédé com5 porte : a) la fourniture (102) : - d'une signature préenregistrée qui identifie sans ambiguïté une fonction prédéterminée, cette signature comportant à cet effet au moins une séquence préenregistrée d'identifiants d'opcodes placés les uns derrière les autres dans l'ordre 10 où ces opcodes identifiés doivent être exécutés pour réaliser ladite fonction prédéterminée, - associé à chaque signature préenregistrée, un jeu prédéterminé d'instructions, ce jeu prédéterminé d'instructions étant choisi dans le groupe consistant en : - un jeu prédéterminé d'instructions de configuration d'un accélérateur matériel 15 configurable, ce jeu prédéterminé d'instructions étant apte, lorsqu'il est chargé dans cet accélérateur matériel, à configurer cet accélérateur matériel pour qu'il réalise ladite fonction prédéterminée, et - un code-machine directement exécutable par le microprocesseur ou par un coprocesseur, ce code-machine étant apte, lorsqu'il est exécuté par ce 20 microprocesseur ou ce coprocesseur, à faire réaliser par le microprocesseur ou le coprocesseur ladite fonction prédéterminée, b) lorsqu'une fonction du programme est exécutée par le microprocesseur, la collecte (124) d'une signature de cette fonction, cette collecte comportant la collecte des identifiants des opcodes exécutés, dans leur ordre d'exécution, pour obtenir une 25 séquence collectée d'identifiants d'opcodes, puis c) la comparaison (128) de la signature collectée à la signature préenregistrée, cette comparaison comportant la comparaison de la séquence collectée à la séquence préenregistrée, la signature collectée correspondant à la signature préenregistrée seulement si la séquence collectée correspond à la séquence préenregistrée, puis 30 d) si la signature collectée correspond à la signature préenregistrée, l'association (132) de l'adresse de branchement dans le programme où débute l'exécution de cette fonction, au jeu d'instructions associé à cette signature préenregistrée, et e) si la signature collectée ne correspond pas à la signature préenregistrée, l'absence d'association de l'adresse de branchement dans le programme où débute l'exécution 35 de cette fonction, au jeu d'instructions associé à cette signature préenregistrée, puis f) si l'exécution du programme retourne à une adresse de branchement associée à un jeu d'instructions, le déclenchement (120) de l'exécution de ladite fonction prédéterminée par un accélérateur matériel configuré avec ce jeu d'instructions ou le déclenchement de l'exécution par le microprocesseur ou un coprocesseur du code- 40 machine de ce jeu d'instructions. 29 2. Procédé selon la revendication 1, dans lequel : - lors de l'étape a) (102), la signature préenregistrée comporte en plus une cartographie préenregistrée des accès mémoires de la fonction prédéterminée, cette cartographie définissant les positions relatives, les uns par rapport aux autres, de N mots-machine lus ou écrits en mémoire lors de l'exécution de la fonction prédéterminée par le microprocesseur, où N est un nombre entier supérieur ou égal à quatre, - l'étape b) (124) comporte en même temps que la collecte des identifiants d'opcodes 10 exécutés, la collecte, dans l'ordre d'exécution des opcodes de lecture ou d'écriture en mémoire, des adresses des mots-machine lus ou écrits par la fonction exécutée pour obtenir un séquence collectée d'adresses, - l'étape c) (128) comporte la recherche, dans la séquence collectée d'adresses, d'un ensemble de N mots-machine dont les positions relatives, les uns par rapport aux 15 autres, correspondent aux positions relatives définies par la cartographie préenregistrée, la signature collectée correspondant à la signature préenregistrée seulement si un tel ensemble de N mots-machine est trouvé dans la séquence collectée d'adresses. 20 3. Procédé selon la revendication 2, dans lequel : - lors de l'étape a) (102), la cartographie préenregistrée associe à au moins l'un des N mots-machine, une séquence d'identifiants d'opcodes exécutés immédiatement avant ou après la lecture et l'écriture d'une donnée dans ce mot-machine, - l'étape b) (124) comporte, en même temps que la collecte de la séquence 25 d'adresses, la collecte pour chacun des mots machines lu et écrit lors de l'exécution de la fonction, de la séquence d'identifiants d'opcodes exécutés immédiatement avant ou après la lecture ou l'écriture dans ce mot-machine, - lors de l'étape c) (128), la signature collectée correspondant à la signature préenregistrée seulement si pour chacun des N mots-machine de l'ensemble trouvé, 30 la séquence collectée d'identifiants d'opcodes exécutés immédiatement avant ou après la lecture ou l'écriture dans ce mot-machine correspond à la séquence d'identifiants d'opcodes associée à ce mot-machine par la cartographie préenregistrée. 35 4. Procédé selon la revendication 3, dans lequel chaque séquence d'identifiants d'opcodes de la signature préenregistrée est associée à un mot-machine dont la position relative par rapport aux N-1 autres mots-machine est définie par la cartographie préenregistrée. 40 5. Procédé selon la revendication 2, dans lequel aucun des N mots-machine dont 30 les positions relatives, les uns par rapport aux autres, sont définies par la cartographie préenregistrée, n'est associé à une séquence d'identifiants d'opcodes exécutés immédiatement avant ou après la lecture ou l'écriture d'une donnée dans ce mot-machine. 5 6. Procédé selon l'une quelconque des revendications précédentes, dans lequel - la fonction prédéterminée est une fonction paramétrable, les valeurs du ou des paramètres de cette fonction prédéterminée étant connues uniquement au moment de son exécution par le microprocesseur, - lors de l'étape a) (102), la signature préenregistrée identifie sans ambiguïté seulement la fonction prédéterminée paramétrée avec des valeurs prédéterminées et le jeu d'instructions de configuration est seulement apte à configurer l'accélérateur matériel pour qu'il exécute la fonction prédéterminée paramétrée avec ces valeurs prédéterminées et le code machine est seulement apte, lorsqu'il est exécuté par le microprocesseur ou le coprocesseur, à faire réaliser par ce microprocesseur ou ce coprocesseur ladite fonction prédéterminée paramétrée avec ces valeurs prédéterminées, - lors de l'étape d), l'association (132) de l'adresse de branchement à ces valeurs prédéterminées des paramètres, et - avant de déclencher l'exécution de la fonction prédéterminée, le procédé comporte la vérification (118) que les valeurs actuelles des paramètres avec lesquels la fonction est appelée correspondent aux valeurs prédéterminées de ces mêmes paramètres associées à cette adresse de branchement et l'étape f) est déclenchée uniquement si les valeurs actuelles et les valeurs prédéterminées des paramètres sont identiques. 7. Procédé selon l'une quelconque des revendications précédentes, dans lequel : - l'étape a) (102) comporte la fourniture de plusieurs signatures préenregistrées différentes qui identifient chacune sans ambiguïté une variantes d'implémentations respective de la même fonction prédéterminée, toutes ces signatures préenregistrées qui identifient sans ambiguïté la même fonction prédéterminée étant associées au même jeu prédéterminé d'instructions, - lors de l'exécution du programme, l'étape c) (128) est exécutée pour chacune de ces signatures préenregistrées. 35 8. Procédé selon l'une quelconque des revendications précédentes, dans lequel : - l'étape a) (102) comporte la fourniture de plusieurs signatures préenregistrées qui identifient chacune sans ambiguïté des fonctions prédéterminées respectives différentes, chacune de ces signatures préenregistrées étant associée à un jeu 40 prédéterminé d'instructions différent de ceux auxquels sont associés les autres 31 signatures préenregistrées, et - lors de l'exécution du programme, l'étape c) (128) est exécutée pour chacune des signatures préenregistrées. 5 9. Support d'enregistrement lisible par un microprocesseur sur lequel est enregis- tré un programme d'ordinateur, caractérisé en ce qu'il comporte des instructions de code de programme d'ordinateur pour l'exécution des étapes d'un procédé conforme à l'une quelconque des revendications précédentes, lorsque ces instructions sont exécutées par le microprocesseur. 10 10. Appareil électronique apte à exécuter un programme comportant une fonction à réaliser, cet appareil électronique comportant à cet effet : - un microprocesseur (10) programmable apte à exécuter le programme, et - une mémoire (6), 15 caractérisé en ce que : - la mémoire (6) comporte : - une signature préenregistrée qui identifie sans ambiguïté une fonction prédéterminée, cette signature comportant à cet effet au moins une séquence préenregistrée d'identifiants d'opcodes placés les uns derrière les autres dans 20 l'ordre où ces opcodes identifiés doivent être exécutés pour réaliser ladite fonction prédéterminée, - associé à chaque signature préenregistrée, un jeu prédéterminé d'instructions, ce jeu prédéterminé d'instructions étant choisi dans le groupe consistant en : 25 - un jeu prédéterminé d'instructions de configuration d'un accélérateur matériel configurable, ce jeu prédéterminé d'instructions étant apte, lorsqu'il est chargé dans cet accélérateur matériel, à configurer cet accélérateur matériel pour qu'il réalise ladite fonction prédéterminée, et - un code-machine directement exécutable par le microprocesseur ou par 30 un coprocesseur, ce code-machine étant apte, lorsqu'il est exécuté par ce microprocesseur ou ce coprocesseur, à faire réaliser par le microprocesseur ou le coprocesseur ladite fonction prédéterminée, - le microprocesseur (10) est programmé pour réaliser les étapes suivantes : b) lorsqu'une fonction du programme est exécutée par le microprocesseur, la collecte 35 d'une signature de cette fonction, cette collecte comportant la collecte des identifiants des opcodes exécutés, dans leur ordre d'exécution, pour obtenir une séquence collectée d'identifiants d'opcodes, puis c) la comparaison de la signature collectée à la signature préenregistrée, cette comparaison comportant la comparaison de la séquence collectée à la séquence 40 préenregistrée, la signature collectée correspondant à la signature préenregistrée seulement si la séquence collectée correspond à la séquence préenregistrée, puis 32 d) si la signature collectée correspond à la signature préenregistrée, l'association de l'adresse de branchement dans le programme où débute l'exécution de cette fonction, au jeu d'instructions associé à cette signature préenregistrée, et e) si la signature collectée ne correspond pas à la signature préenregistrée, l'absence 5 d'association de l'adresse de branchement dans le programme où débute l'exécution de cette fonction, au jeu d'instructions associé à cette signature préenregistrée, puis f) si l'exécution du programme retourne à une adresse de branchement associée à un jeu d'instructions, le déclenchement de l'exécution de ladite fonction prédéterminée par un accélérateur matériel configuré avec ce jeu d'instructions ou le déclenchement 10 de l'exécution par le microprocesseur ou un coprocesseur du code-machine de ce jeu d'instructions. 11. Appareil selon la revendication 10, caractérisé en ce qu'il comporte un accélé- rateur matériel (12) configurable dans lequel le jeu prédéterminé d'instructions est 15 apte à être changé pour configurer cet accélérateur matériel pour qu'il réalise ladite fonction prédéterminée. 12. Appareil selon la revendication 11, dans lequel l'accélérateur matériel (12) est un composant FPGA (« Field-Programmable Gate Array »). 20 13. Appareil selon la revendication 10, caractérisé en ce qu'il comporte un copro- cesseur (152) apte à exécuter le jeu prédéterminé d'instructions pour qu'il réalise ladite fonction prédéterminée.