FR 3038087 A1 20161230 FR 1556098 A 20150629 1 PROCEDE D'EXECUTION D'UN PROGRAMME D'ORDINATEUR COMPORTANT UNE FONCTION PARAMETREE [1] L'invention concerne un procédé d'exécution d'un programme d'ordinateur comportant une fonction paramétrée susceptible d'être exécutée une ou plusieurs fois au cours de l'exécution du programme. L'invention concerne également un support d'enregistrement d'informations, un programme d'ordinateur et une unité centrale pour la mise en oeuvre de ce procédé. [2] Les fonctions paramétrées comportent au moins un paramètre dont la valeur 10 est obtenue au moment où la fonction est appelée pour être exécutée par un microprocesseur ou durant son exécution par le microprocesseur. [3] Des procédés connus pour exécuter de tels programmes d'ordinateur comportent : a) la fourniture d'un code générique de la fonction dans lequel chaque paramètre de 15 la fonction est codé comme une variable de sorte que ce code générique ne contient pas en lui-même la valeur de ce paramètre mais contient une opération de lecture de sa valeur à une adresse spécifiée par le code générique, b) la vérification d'une condition, c) uniquement si la condition est vérifiée, la génération par le microprocesseur, d'un 20 code spécialisé de cette fonction, dans le langage machine du microprocesseur, puis l'enregistrement dans une mémoire de ce code spécialisé, ce code spécialisé réalisant, lorsqu'il est exécuté par le microprocesseur, la même fonction que le code générique mais dans le cas particulier où au moins un paramètre de la fonction est spécialisé avec une première valeur spécifique, la spécialisation d'un paramètre de la 25 fonction avec la première valeur spécifique consistant à affecter cette valeur spécifique à ce paramètre puis à traiter ce paramètre non plus comme une variable mais comme une constante de sorte que le code spécialisé ne comporte aucune opération de lecture de sa valeur à une adresse située en dehors de la plage continue d'adresses où est enregistré ce code spécialisé, 30 d) ensuite, lorsque la fonction est réalisée avec la première valeur spécifique du paramètre, si le code spécialisé est enregistré dans la mémoire, le microprocesseur réalise cette fonction en exécutant directement le code spécialisé enregistré dans la mémoire sans utiliser le code générique de cette fonction, et sinon e) le microprocesseur réalise cette fonction en utilisant son code générique. 35 [004] Dans cette description, par l'expression « lecture de la valeur d'un paramètre à une adresse », on désigne aussi bien l'opération de lecture de la valeur de ce paramètre dans une mémoire que dans un registre. Ainsi, le terme « adresse » désigne aussi bien une adresse dans une mémoire qu'un identifiant d'un registre dans lequel doit être lue la valeur de ce paramètre. 3038087 2 [005] Le code spécialisé d'une fonction s'exécute avec un coût moindre que le code générique de cette fonction, notamment parce qu'il a pu être optimisé, à partir des valeurs spécifiques connues des paramètres. Le coût peut être le temps d'exécution, la consommation électrique, la puissance électrique consommée, la température, le 5 niveau de bruit électrique ou acoustique. Par exemple, contrairement au code générique, le code spécialisé ne comporte pas d'opération de lecture de la valeur des paramètres spécialisés en dehors de la plage d'adresses où est enregistré ce code spécialisé. Ainsi, pour réaliser la même fonction, le code spécialisé comporte moins d'instructions que le code générique ou comporte des instructions de lecture moins coûteuses, par exemple, si les instructions de lecture sont réarrangées pour accéder à de la mémoire locale. Si son exécution nécessite moins d'accès à la mémoire. Il sera probablement plus rapide et donc moins coûteux. C'est pour cela que, dès que c'est possible, il est généralement préférable d'exécuter le code spécialisé plutôt que le code générique. [006] Par exemple, un tel procédé est divulgué dans l'article suivant : - M. Arnold et AL « Adaptive optimization in the jalapefio JVM », ACM SIGPLAN Notices, vol. 46, n°4, pp 65-83, 2011. [007] Par la suite, cet article est désigné sous l'abréviation « Arnold2011 ». Cet article enseigne qu'il est souhaitable de déclencher la génération d'un code spécialisé si la condition suivante est vérifiée : + REVENDICATIONS1. Procédé d'exécution d'un programme d'ordinateur comportant une fonction paramétrée susceptible d'être exécutée une ou plusieurs fois au cours de l'exécution du programme, cette fonction comportant au moins un paramètre dont la valeur est obtenue au moment où la fonction est appelée pour être exécutée par un microprocesseur ou durant son exécution par le microprocesseur, ce procédé comportant : a) la fourniture d'un code générique de la fonction dans lequel chaque paramètre de 10 la fonction est codé comme une variable de sorte que ce code générique ne contient pas en lui-même la valeur de ce paramètre mais contient une opération de lecture de sa valeur à une adresse spécifiée par le code générique, b) la vérification (58) d'une condition, c) uniquement si la condition est vérifiée, la génération (60) par le microprocesseur, 15 d'un code spécialisé de cette fonction, dans le langage machine du microprocesseur, puis l'enregistrement dans une mémoire de ce code spécialisé, ce code spécialisé réalisant, lorsqu'il est exécuté par le microprocesseur, la même fonction que le code générique mais dans le cas particulier où au moins un paramètre de la fonction est spécialisé avec une première valeur spécifique, la spécialisation d'un paramètre de la 20 fonction avec la première valeur spécifique consistant à affecter cette valeur spécifique à ce paramètre puis à traiter ce paramètre non plus comme une variable mais comme une constante de sorte que le code spécialisé ne comporte aucune opération de lecture de sa valeur à une adresse située en dehors de la plage continue d'adresses où est enregistré ce code spécialisé, 25 d) ensuite, lorsque la fonction est réalisée avec la première valeur spécifique du paramètre, si le code spécialisé est enregistré dans la mémoire, le microprocesseur réalise (54) cette fonction en exécutant directement le code spécialisé enregistré dans la mémoire sans utiliser le code générique de cette fonction, et sinon e) le microprocesseur réalise (58) cette fonction en utilisant son code générique, 30 caractérisé en ce que : - lors de l'exécution du programme, à chaque fois que la fonction est réalisée avec la première valeur spécifique du paramètre, le microprocesseur met à jour (56) la valeur d'un premier compteur et, en alternance, ne met pas à jour la valeur de ce compteur si cette même fonction est réalisée avec une autre valeur du paramètre différente de 35 la première valeur spécifique, - la condition vérifiée lors de l'étape b) est le franchissement par la valeur du premier compteur d'un seuil pré-calculé, et 3038087 30 - le procédé comporte une étape f) (72) de calcul du seuil pré-calculé à partir d'un rapport Kgen/(Klib-Kdyn), où : - Kgen est un coût pour exécuter l'étape c), - Kdyn est un coût pour exécuter l'étape d), 5 - Klib est un coût pour exécuter l'étape e), et les coûts Kgen, Kdyn et Klib sont chacun des quantités respectives d'une même grandeur physique ou d'une même combinaison de grandeurs physiques qui varie selon que le microprocesseur exécute l'étape d) ou l'étape e). 2. Procédé selon la revendication 1, dans lequel chaque grandeur physique est choisie dans le groupe composé du temps d'exécution, de l'énergie électrique consommée, de la puissance électrique consommée, de la température du microprocesseur, de l'intensité du bruit généré par ce microprocesseur. 3. Procédé selon l'une quelconque des revendications précédentes, dans lequel : - le microprocesseur exécute aussi les étapes a) à e) en remplaçant la première valeur spécifique et le premier compteur par, respectivement, une seconde valeur spécifique et un second compteur, la seconde valeur spécifique étant différente de la première valeur spécifique de sorte que le code spécialisé généré dans ce cas est obtenu en spécialisant le paramètre de la fonction avec la seconde valeur spécifique au lieu de la première valeur spécifique, - l'étape f) (72) comporte le calcul d'un premier seuil à partir du rapport Kgen/(Klib Kdyn) où Kgen, Kdyn et Klib sont des coûts pour exécuter, respectivement, les étapes c), d) et e) dans le cas où c'est la première valeur spécifique qui est utilisée lors de 25 l'exécution de ces étapes, - l'étape f) (72) comporte également le calcul d'un second seuil à partir du rapport Kgen/(Klib - Kdyn) où Kgen, Kdyn et Klib sont des coûts pour exécuter, respectivement, les étapes c), d) et e) dans le cas ou c'est la deuxième valeur spécifique qui est utilisée lors de l'exécution de ces étapes, 30 - lors de l'étape b), si c'est le premier compteur qui est utilisé, c'est le premier seuil qui est utilisé et, en alternance, si c'est le second compteur qui est utilisé, c'est alors le second seuil qui est utilisé à la place du premier seuil. 4. Procédé selon l'une quelconque des revendications précédentes dans lequel : 35 - le microprocesseur exécute aussi les étapes a) à e) en remplaçant la première valeur spécifique et le premier compteur par, respectivement, une seconde valeur spécifique et un second compteur, la seconde valeur spécifique étant différente de la 3038087 31 première valeur spécifique de sorte que le code spécialisé généré dans ce cas est obtenu en spécialisant le paramètre de la fonction avec la seconde valeur spécifique au lieu de la première valeur spécifique, - le seuil calculé lors de l'étape f) est commun au premier et second compteurs de 5 sorte que lors de l'exécution de l'étape b), que ce soit le premier compteur ou le second compteur qui est utilisé lors de cette étape b), c'est le même seuil pré-calculé lors de l'étape f) qui est utilisé. 5. Procédé selon l'une quelconque des revendications précédentes dans lequel : 10 - les étapes a) à e) sont exécutées pour, respectivement, au moins une première et une seconde fonctions dont les codes génériques sont différents, - l'exécution de l'étape f) pour la première fonction consiste à calculer un premier seuil à partir des coûts Kgen, Kdyn et Klib obtenus en prenant uniquement en compte les exécutions des étapes c), d) et e) pour la première fonction, seul ce premier seuil 15 étant utilisé lors de l'exécution ultérieure de l'étape b) pour cette première fonction, - l'exécution de l'étape f) pour la seconde fonction consiste à calculer un second seuil à partir des coûts Kgen, Kdyn et Klib obtenus en prenant uniquement en compte les exécutions des étapes c), d) et e) pour la seconde fonction, seul ce second seuil étant utilisé lors de l'exécution ultérieure de l'étape b) pour cette seconde fonction. 20 6. Procédé selon l'une quelconque des revendications précédentes, dans lequel, lors de l'exécution des étapes d) et e), le procédé comporte la mesure (74) de ladite quantité de la grandeur physique ou de la combinaison de grandeurs physiques, puis le microprocesseur calcule chaque seuil utilisé lors de l'étape b) à partir des mesures des coûts Kdyn et Klib. 7. Procédé selon la revendication 6, dans lequel, lors de l'exécution de l'étape c), le procédé comporte la mesure (74) de ladite quantité de la grandeur physique ou de la combinaison de grandeurs physiques, puis le microprocesseur calcule chaque seuil 30 utilisé lors de l'étape b) à partir de cette mesure du coût Kgen. 8. Procédé selon les revendications 6 et 7, dans lequel la grandeur physique est le temps d'exécution et le microprocesseur mesure le temps d'exécution de chaque étape c), d) et e) en déclenchant au début de l'exécution de cette étape une minuterie 35 qui décompte le temps écoulé depuis son déclenchement, et en relevant le temps écoulé décompté par la minuterie à la fin de l'exécution de cette étape, le temps écoulé relevé constituant la mesure du temps d'exécution de cette étape. 3038087 32 9. Procédé selon l'une quelconque des revendications précédentes, dans lequel lors de l'étape f) (72), le seuil est calculé à l'aide de la relation suivante : N = Kgen / (Klib - Kdyn), où N est la valeur du seuil calculée. 5 10. Procédé selon l'une quelconque des revendications précédentes, dans lequel à chaque fois que la fonction f est réalisée avec une valeur spécifique du paramètre, le microprocesseur, incrémente, s'il existe déjà un compteur associé à cette fonction et à cette valeur spécifique du paramètre et, si un tel compteur n'existe pas, crée ce compteur puis l'incrémente. 10 11. Support d'enregistrement d'informations ou programme d'ordinateur, caractérisé en ce qu'il comporte des instructions pour l'exécution d'un procédé conforme à l'une quelconque des revendications précédentes, lorsque ces instructions sont exécutées par un microprocesseur. 15 12. Unité centrale électronique pour exécuter un programme d'ordinateur comportant une fonction paramétrée susceptible d'être exécutée une ou plusieurs fois au cours de l'exécution du programme, cette fonction comportant au moins un paramètre dont la valeur est obtenue au moment où la fonction est appelée pour être exécutée par un 20 microprocesseur ou durant son exécution par le microprocesseur, cette unité comportant : - une mémoire ou un ensemble de mémoires (18, 22) contenant un code générique de la fonction dans lequel chaque paramètre de la fonction est codé comme une variable de sorte que ce code générique ne contient pas en lui-même la valeur de ce 25 paramètre mais contient une opération de lecture de sa valeur à une adresse spécifiée par le code générique, - le microprocesseur (2) programmé pour réaliser les étapes suivantes : b) la vérification d'une condition, c) uniquement si la condition est vérifiée, la génération par le microprocesseur, d'un code spécialisé de cette fonction, dans le langage machine du microprocesseur, puis l'enregistrement dans une mémoire de ce code spécialisé, ce code spécialisé réalisant, lorsqu'il est exécuté par le microprocesseur, la même fonction que le code générique mais dans le cas particulier où au moins un paramètre de la fonction est spécialisé avec une première valeur spécifique, la spécialisation d'un paramètre de la fonction avec la première valeur spécifique consistant à affecter cette valeur spécifique à ce paramètre puis à traiter ce paramètre non plus comme une variable mais comme une constante de sorte que le code spécialisé ne comporte aucune 3038087 33 opération de lecture de sa valeur à une adresse située en dehors de la plage continue d'adresses où est enregistré ce code spécialisé, d) ensuite, lorsque la fonction est réalisée avec la première valeur spécifique du paramètre, si le code spécialisé est enregistré dans la mémoire, le microprocesseur 5 réalise cette fonction en exécutant directement le code spécialisé enregistré dans la mémoire sans utiliser le code générique de cette fonction, et sinon e) le microprocesseur réalise cette fonction en utilisant son code générique, caractérisé en ce que le microprocesseur est également programmé de manière à ce que 10 - lors de l'exécution du programme, à chaque fois que la fonction est réalisée avec la première valeur spécifique du paramètre, le microprocesseur met à jour la valeur d'un premier compteur et, en alternance, ne met pas à jour la valeur de ce premier compteur si cette même fonction est réalisée avec une autre valeur du paramètre différente de la première valeur spécifique, 15 - la condition vérifiée lors de l'étape b) est le franchissement par la valeur du premier compteur d'un seuil pré-calculé, et - le procédé comporte une étape f) de calcul du seuil pré-calculé à partir d'un rapport Kgen/(Klib-Kdyn), où : - Kgen est un coût pour exécuter l'étape c), 20 - Kdyn est un coût pour exécuter l'étape d), - Klib est un coût pour exécuter l'étape e), et les coûts Kgen, Kdyn et Klib sont chacun des quantités respectives d'une même grandeur physique ou d'une même combinaison de grandeurs physiques qui varie selon que le microprocesseur exécute l'étape d) ou l'étape e).