Procédé (100) mis en œuvre par ordinateur pour déterminer automatiquement une architecture cible parmi un ensemble d’architectures cibles pour implémenter un algorithme, le procédé comprenant les étapes suivantes : sélectionner (101) un langage pour produire un code source de l’algorithme, le langage étant associé à un compilateur du langage, le compilateur comprenant au moins une option d’optimisation de compilation; compiler (102) le code source de l’algorithme selon l’au moins une option d’optimisation de compilation pour produire un code objet ; mesurer (103) au moins un score de performance du code objet produit, l’au moins un score de performance étant mesuré selon une métrique; déterminer (105) l’architecture cible après avoir calculé (104) une fonction d’affinité à partir de l’au moins un score de performance du code objet produit par l’au moins une option d’optimisation de compilation et à partir d’au moins un score de référence d’un code objet de référence produit en compilant un code source de référence produit pour un algorithme de référence dans le langage sélectionné, l’algorithme de référence étant associé à l’architecture cible. Figure 1 Procédé mis en œuvre par ordinateur pour déterminer automatiquement une architecture cible. La présente invention concerne le domaine des architectures matérielles pour l’implémentation d’un algorithme. Aujourd’hui, les algorithmes que l’on cherche à embarquer sont de plus en plus complexes. Généralement, ces algorithmes sont codés dans un langage logiciel qui n’est pas destiné à être embarqué, ou incluant des fonctions non embarquables. En outre, les cibles matérielles sont variées, telles que CPU, FPGA, Systems-On-Chip, Many-Cores, GPU, Ai-Engine,…, et présentent chacune des avantages et des inconvénients. Lorsque ces algorithmes sont embarqués, il faut trouver quelle cible matérielle est la plus adaptée à l’implémentation la plus performante au regard des contraintes, que cela soit en terme de vitesse d’exécution, de consommation, de besoin en ressources de calcul, etc…. et au regard des besoins du projet. Il est connu de déterminer de manière empirique, i.e. par l’expérimentation, l’architecture matérielle adaptée à l’implémentation la plus performante d’un algorithme, le cas échéant, en simulant ou en portant l’algorithme, et en évaluant expérimentalement les performances de l’implémentation sur plusieurs architectures, successivement, de l’algorithme préalablement adapté/optimisé pour chaque architecture matérielle envisagée. Cette approche, généralement appelée « analyse dynamique de programme » ou « Dynamic program analysis », selon la terminologie anglo-saxonne, est néanmoins fastidieuse et coûteuse. L’invention a donc pour but de proposer une solution à tout ou partie de ces problèmes, en permettant de déterminer l’architecture cible la plus adaptée pour l’algorithme, en amont de toute simulation ou de toute implémentation spécifique à la cible. A cet effet, la présente invention concerne un procédé mis en œuvre par ordinateur pour déterminer automatiquement une architecture cible parmi un ensemble d’architectures cibles pour implémenter un algorithme, le procédé comprenant les étapes suivantes : - sélectionner un langage pour produire un code source de l’algorithme, le langage étant associé à un compilateur du langage, le compilateur comprenant au moins une option d’optimisation de compilation; - compiler le code source de l’algorithme selon l’au moins une option d’optimisation de compilation pour produire un code objet, - mesurer au moins un score de performance du code objet produit, l’au moins un score de performance étant mesuré selon une métrique; - déterminer l’architecture cible sur la base de l’application d’une fonction d’affinité entre l’algorithme et un algorithme de référence associé à l’architecture cible, ladite application de la fonction d’affinité comprenant un calcul d’une affinité à partir de l’au moins un score de performance du code objet produit par l’au moins une option d’optimisation de compilation et à partir d’au moins un score de référence d’un code objet de référence produit en compilant un code source de référence produit pour l’algorithme de référence dans le langage sélectionné. Selon ces dispositions, le procédé permet de déterminer l’architecture cible la plus adaptée pour l’algorithme, en amont de toute simulation ou implémentation, à partir d’un langage informatique quelconque, sous réserve que le compilateur associé dispose d’au moins une option d’optimisation de compilation. Ainsi, le concepteur de l’algorithme peut rapidement adapter son algorithme pour une architecture cible déterminée, et/ou se concentrer sur l’implémentation optimisée de son algorithme sur l’architecture cible déterminée. Selon un mode de mise en œuvre, l’invention comprend une ou plusieurs des caractéristiques suivantes, seules ou en combinaison techniquement acceptable. Selon un mode de mise en œuvre, le compilateur comprend une pluralité d’options d’optimisation de compilation, chaque option d’optimisation de compilation appliquée au code source de l’algorithme produisant un code objet parmi une pluralité de codes objets de l’algorithme. Selon un mode de mise en œuvre, pour chaque option d’optimisation de compilation, l’au moins un score de performance du code objet produit est mesuré selon une métrique parmi une pluralité de métriques, de sorte qu’une pluralité de scores de performance sont mesurés pour ledit code objet produit avec ladite option d’optimisation de compilation, chaque score de performance étant associé à une métrique parmi la pluralité de métriques. Selon un mode de mise en œuvre, la pluralité de scores de performance des différents codes objets de l’algorithme, mesurés chacun selon une métrique parmi la pluralité de métriques pour une option d’optimisation de compilation parmi la pluralité d’options d’optimisation de compilation, forme une matrice de scores de performance, chaque élément de ladite matrice étant un score de performance associé à un binôme comprenant un code objet produit selon une option d’optimisation de compilation parmi la pluralité d’options et une métrique parmi la pluralité de métriques. Selon un mode de mise en œuvre, ladite matrice comprend une ligne de scores de performance pour chaque option d’optimisation de compilation et une colonne de scores de performance pour chaque métrique. Selon un mode de mise en œuvre, l’ensemble d’architectures cibles comprend au moins une architecture de type CPU, FPGA, Systems-On-Chip, Many-Cores, GPU, Ai-Engine, System-On-Chip, Network-On-Chip, ASIC. Selon un mode de mise en œuvre, le langage sélectionné peut être l’un parmi l’ensemble suivant : C, java, python, Matlab, VHDL, Verilog, SystemC, C++, SystemVerilog, Scala,….. Selon un mode de mise en œuvre, la pluralité de métriques pour la mesure de l’au moins un score de performance de l’implémentation du code objet comprend au moins l’une parmi ladite pluralité suivante de métriques: un nombre d'instructions, un nombre d'accès mémoire, un nombre d'appel de sous-fonction, une complexité cyclomatique, une complexité Halstead, une complexité essentielle, une complexité de branchement, appelée également Sneed Metric ou métrique de Sneed, une complexité d’accès des données, appelée également Card Metric ou métrique de Card, une complexité des données, appelée également Chapin Metric ou métrique de Chapin, une complexité des flux de données, appelée également Elshof Metric ou métrique de Elshof, Une complexité décisionnelle, appelée également McClure Metric ou métrique de McClure, une métrique de Chidamber and Kemerer, une métrique de module logiciel, des points de micro-fonction pondérés, le score de performance étant mesuré sur le code objet produit par l’option d’optimisation de compilation. Selon un mode de mise en œuvre, l’application de la fonction d’affinité comprend un calcul d’une affinité entre l’algorithme et chaque algorithme de référence parmi une pluralité d’algorithmes de référence, et dans lequel l’étape de détermination de l’architecture cible comprend une sélection d’un algorithme de référence selon un critère basé sur l’affinité. Selon un mode de mise en œuvre, le critère est basé sur un optimum, par exemple un maximum ou un minimum, de l’affinité. Selon un mode de mise en œuvre, l’affinité est calculée, pour chaque algorithme de référence parmi la pluralité d’algorithmes de référence, à partir d’une pluralité de scores de référence du code objet de référence produit pour chaque option d’optimisation de compilation dudit algorithme de référence, chaque score de référence étant mesuré selon une métrique parmi la pluralité de métriques. Selon un mode de mise en œuvre, pour chaque algorithme de référence parmi la pluralité d’algorithmes de référence, la pluralité de scores de référence de l’algorithme de référence, mesurés selon la pluralité de métriques pour la pluralité d’options d’optimisation de compilation, forme une matrice de référence de scores de référence, chaque élément de ladite matrice de référence étant un score de référence associé à un binôme comprenant un code objet de référence produit selon une option d’optimisation de compilation parmi la pluralité d’options et une métrique parmi la pluralité de métriques. Selon un mode de mise en œuvre, ladite matrice de référence comprend une ligne de scores de référence pour chaque option d’optimisation de compilation et une colonne de scores de référence pour chaque métrique. Selon un mode de mise en œuvre, la fonction d’affinité est une corrélation de la matrice des scores de performance de l’algorithme avec la matrice de référence des scores de référence de l’algorithme de référence. Selon un mode de mise en œuvre, la fonction d’affinité est une distance de la matrice des scores de performance de l’algorithme avec la matrice de référence des scores de référence de l’algorithme de référence, la distance étant calculée, selon l’une des fonctions parmi la fonction de similarité cosinus, la fonction de similarité Jaccard, la fonction distance de Manhattan, la fonction distance euclidienne, la fonction distance de Minkowski. Pour sa bonne compréhension, un mode de réalisation et/ou de mise en oeuvre de l’invention est décrit en référence aux dessins ci-annexés représentant, à titre d’exemple non limitatif, une forme de réalisation ou de mise en œuvre respectivement d’un dispositif et/ou d’un procédé selon l’invention. Les mêmes références sur les dessins désignent des éléments similaires ou des éléments dont les fonctions sont similaires. est une représentation schématique du séquencement des étapes selon un mode de mise en œuvre du procédé selon l’invention. Un mode de mise en œuvre du procédé 100 selon l’invention va être décrit en référence à la . Préalablement, certaines définitions sont rappelées ici. Un compilateur traduit un algorithme, décrit par un code source dans un langage informatique, en objet informatique, appelé code objet. Le langage informatique peut être par exemple : C, java, python, Matlab, VHDL, Verilog, SystemC, C++, SystemVerilog, Scala,…. Dans le cadre de la présente invention, la compilation s’entend au sens large, i.e. aussi bien logiciel que matériel, de sorte que ledit code objet comprend non seulement des instructions dans un langage machine, mais également des composants d’architectures matérielles ; lesdites architectures matérielles sont, par exemple, du type CPU, FPGA, Systems-On-Chip, Many-Cores, GPU, Ai-Engine, System-On-Chip, Network-On-Chip, ASIC. Le compilateur intègre des options d’optimisation, chaque option d’optimisation permettant d’ajuster au mieux le code objet à différentes contraintes, telle que vitesse d’exécution, occupation mémoire, etc…. Une métrique est une fonction qui, à partir d’une analyse du code objet, détermine une caractéristique, que nous appellerons score de performance, dudit code objet, telle qu’une taille de la mémoire utilisée, un nombre d’instructions utilisées, un type de multiplieurs,…; pour chaque option d’optimisation, un score de performance du code objet produit avec cette option d’optimisation peut être calculé selon différentes métriques. Les différentes métriques utilisées pour la mesure des scores de performances du code objet sont par exemple : un nombre d'instructions, un nombre d'accès mémoire, un nombre d'appel de sous-fonction, une complexité cyclomatique, une complexité Halstead, une complexité essentielle, une complexité de branchement, appelée également Sneed Metric ou métrique de Sneed, une complexité d’accès des données, appelée également Card Metric ou métrique de Card, une complexité des données, appelée également Chapin Metric ou métrique de Chapin, Une complexité des flux de données, appelée également Elshof Metric ou métrique de Elshof, une complexité décisionnelle, appelée également McClure Metric ou métrique de McClure, une métrique de Chidamber and Kemerer, une métrique de module logiciel, des points de micro-fonction pondérés. La pluralité de scores de performance de l’algorithme, mesurés chacun selon une métrique parmi la pluralité de métriques pour une option d’optimisation de compilation parmi la pluralité d’options d’optimisation de compilation, forme une matrice de scores de performance, chaque élément de ladite matrice étant un score de performance associé à un binôme comprenant une option d’optimisation du compilateur parmi la pluralité d’options et une métrique parmi la pluralité de métriques. Un algorithme de référence est par ailleurs identifié comme étant plus performant que d’autres lorsqu’il est compilé, selon les différentes options de compilation, en un code objet implémenté sur une architecture cible donnée. Ladite architecture cible est ainsi associée audit algorithme de référence, dont les codes objets sont réputés plus performants que ceux des autres algorithmes, lorsqu’ils sont exécutés sur cette architecture cible. Chaque architecture cible comprend des composants matériels et des composants logiciels. Pour chaque algorithme de référence, associé à une architecture cible, un score de référence est calculé, selon les différentes métriques considérées, pour le code objet obtenu avec chaque option d’optimisation du compilateur appliqué à un code source de référence de l’algorithme de référence ; on forme ainsi une matrice de référence pour ladite architecture cible, chaque élément de ladite matrice étant un score de référence associé à un binôme comprenant une option d’optimisation du compilateur parmi une pluralité d’options et une métrique parmi une pluralité de métriques. Pour un nouvel algorithme donné, on applique une fonction d’affinité entre ledit algorithme et un algorithme de référence, l’application de la fonction d’affinité comprenant un calcul d’une affinité à partir du ou des scores de performance de chaque code objet de l’algorithme, produit par chaque option d’optimisation de compilation, et à partir des score(s) de référence associés respectivement aux code(s) objet de référence produit chacun en compilant un code source de référence produit pour l’algorithme de référence, l’algorithme de référence étant associé à l’architecture cible. L’affinité entre un algorithme donné et un algorithme de référence est ainsi un indicateur de similarité de la matrice des scores de performances de l’algorithme donné et de la matrice des scores de références de l’algorithme de référence pour une architecture cible donnée. Le procédé 100 selon l’invention est mis en œuvre par un ordinateur et vise à déterminer automatiquement une architecture cible parmi un ensemble d’architectures cibles, ladite architecture cible étant adaptée pour implémenter un algorithme donné. Le procédé 100 comprend les étapes suivantes : - sélectionner 101 un langage pour produire un code source de l’algorithme, le langage étant associé à un compilateur du langage, le compilateur comprenant une ou plusieurs option(s) d’optimisation de compilation; - compiler 102 le code source de l’algorithme selon la ou les option(s) d’optimisation de compilation pour produire un ou plusieurs code(s) objet - mesurer 103 un ou plusieurs score(s) de performance pour le ou pour chaque code objet produit, chaque score de performance étant mesuré selon une métrique; - déterminer 105 l’architecture cible après avoir appliqué une fonction d’affinité en calculant 104 une affinité à partir du ou des scores de performance de chaque code objet produit par chaque option d’optimisation de compilation, et à partir d’un ou plusieurs score(s) de référence associés respectivement à un ou plusieurs code(s) objet de référence produit chacun en compilant un code source de référence produit pour un algorithme de référence dans le langage sélectionné, l’algorithme de référence étant associé à l’architecture cible. Selon ces dispositions, le procédé permet de déterminer l’architecture cible la plus adaptée pour l’algorithme donné, en amont de toute simulation ou implémentation, à partir d’un langage informatique quelconque, sous réserve que le compilateur associé dispose d’au moins une option d’optimisation de compilation. Ainsi, pour déterminer l’architecture cible la plus adaptée, l’application de la fonction d’affinité comprend, par exemple, le calcul 104 d’une affinité entre l’algorithme donné et chaque algorithme de référence parmi une pluralité d’algorithmes de référence, et l’architecture cible la plus adaptée est déterminée par la sélection 106 d’un algorithme de référence selon un critère basé sur l’application de la fonction d’affinité. Plus particulièrement, le critère est basé sur un optimum, par exemple un maximum ou un minimum, de l’affinité calculée pour les différents algorithmes de référence. Ainsi, le concepteur de l’algorithme peut rapidement adapter son algorithme pour une architecture cible déterminée, et/ou se concentrer sur l’implémentation optimisée de son algorithme sur l’architecture cible déterminée. Par exemple, la fonction d’affinité est une corrélation de la matrice des scores de performance de l’algorithme donné avec la matrice de référence des scores de référence de l’algorithme de référence. Plus particulièrement, la fonction d’affinité est une distance de la matrice des scores de performance de l’algorithme avec la matrice de référence des scores de référence de l’algorithme de référence ; par exemple, ladite distance est calculée, selon la fonction de similarité cosinus, ou la fonction de similarité Jaccard, ou la fonction distance de Manhattan, ou la fonction distance euclidienne, ou encore la fonction distance de Minkowski. Procédé (100) mis en œuvre par ordinateur pour déterminer automatiquement une architecture cible parmi un ensemble d’architectures cibles pour implémenter un algorithme, le procédé comprenant les étapes suivantes : - sélectionner (101) un langage pour produire un code source de l’algorithme, le langage étant associé à un compilateur du langage, le compilateur comprenant au moins une option d’optimisation de compilation; - compiler (102) le code source de l’algorithme selon l’au moins une option d’optimisation de compilation pour produire un code objet, - mesurer (103) au moins un score de performance du code objet produit, l’au moins un score de performance étant mesuré selon une métrique; - déterminer (105) l’architecture cible sur la base de l’application d’une fonction d’affinité entre l’algorithme et un algorithme de référence associé à l’architecture cible, ladite application de la fonction d’affinité comprenant un calcul (104) d’une affinité à partir de l’au moins un score de performance du code objet produit par l’au moins une option d’optimisation de compilation et à partir d’au moins un score de référence d’un code objet de référence produit en compilant un code source de référence produit pour l’algorithme de référence dans le langage sélectionné. Procédé selon la revendication 1, dans lequel le compilateur comprend une pluralité d’options d’optimisation de compilation, chaque option d’optimisation de compilation appliquée au code source de l’algorithme produisant un code objet parmi une pluralité de codes objets de l’algorithme. Procédé selon la revendication 2, dans lequel pour chaque option d’optimisation de compilation, l’au moins un score de performance du code objet produit est mesuré (103) selon une métrique parmi une pluralité de métriques, de sorte qu’une pluralité de scores de performance sont mesurés (103) pour ledit code objet produit avec ladite option d’optimisation de compilation, chaque score de performance étant associé à une métrique parmi la pluralité de métriques. Procédé selon la revendication 3, dans lequel la pluralité de scores de performance des différents codes objets de l’algorithme, mesurés (103) chacun selon une métrique parmi la pluralité de métriques pour une option d’optimisation de compilation parmi la pluralité d’options d’optimisation de compilation, forme une matrice de scores de performance, chaque élément de ladite matrice étant un score de performance associé à un binôme comprenant un code objet produit selon une option d’optimisation de compilation parmi la pluralité d’options et une métrique parmi la pluralité de métriques. Procédé selon l’une des revendications 3 ou 4, dans lequel la pluralité de métriques pour la mesure (103) de l’au moins un score de performance de l’implémentation du code objet comprend au moins l’une parmi ladite pluralité suivante de métriques: Un nombre d'instructions, Un nombre d'accès mémoire, Un nombre d'appel de sous-fonction, Une complexité cyclomatique, Une complexité Halstead, Une complexité essentielle, Une complexité de branchement, appelée également Sneed Metric ou métrique de Sneed, Une complexité d’accès des données, appelée également Card Metric ou métrique de Card, Une complexité des données, appelée également Chapin Metric ou métrique de Chapin, Une complexité des flux de données, appelée également Elshof Metric ou métrique de Elshof, Une complexité décisionnelle, appelée également McClure Metric ou métrique de McClure, Une métrique de Chidamber and Kemerer, Une métrique de module logiciel, Des points de micro-fonction pondérés, le score de performance étant mesuré (103) sur le code objet produit par l’option d’optimisation de compilation. Procédé selon l’une des revendications 1 à 5, dans lequel l’application de la fonction d’affinité comprend un calcul (104) d’une affinité entre l’algorithme et chaque algorithme de référence parmi une pluralité d’algorithmes de référence, et dans lequel l’étape de détermination (105) de l’architecture cible comprend une sélection (106) d’un algorithme de référence selon un critère basé sur l’affinité. Procédé selon la revendication 6, dans lequel le critère est basé sur un optimum, par exemple un maximum ou un minimum, de l’’affinité. Procédé selon la revendication 6, dans lequel l’affinité est calculée (104), pour chaque algorithme de référence parmi la pluralité d’algorithmes de référence, à partir d’une pluralité de scores de référence du code objet de référence produit pour chaque option d’optimisation de compilation dudit algorithme de référence, chaque score de référence étant mesuré selon une métrique parmi la pluralité de métriques. Procédé selon la revendication 8, dans lequel pour chaque algorithme de référence parmi la pluralité d’algorithmes de référence, la pluralité de scores de référence de l’algorithme de référence, mesurés selon la pluralité de métriques pour la pluralité d’options d’optimisation de compilation, forme une matrice de référence de scores de référence, chaque élément de ladite matrice de référence étant un score de référence associé à un binôme comprenant un code objet de référence produit selon une option d’optimisation du compilateur parmi la pluralité d’options et une métrique parmi la pluralité de métriques. Procédé selon la revendication 9, dans lequel la fonction d’affinité est une corrélation de la matrice des scores de performance de l’algorithme avec la matrice de référence des scores de référence de l’algorithme de référence. Procédé selon la revendication 9, dans lequel la fonction d’affinité est une distance de la matrice des scores de performance de l’algorithme avec la matrice de référence des scores de référence de l’algorithme de référence, la distance étant calculée, selon l’une des fonctions parmi la fonction de similarité cosinus, la fonction de similarité Jaccard, la fonction distance de Manhattan, la fonction distance euclidienne, la fonction distance de Minkowski.