Login| Sign Up| Help| Contact|

Patent Searching and Data


Title:
METHOD FOR OPTIMISING THE OPERATION OF A MULTI-PROCESSOR INTEGRATED CIRCUIT, AND CORRESPONDING INTEGRATED CIRCUIT
Document Type and Number:
WIPO Patent Application WO/2010/116047
Kind Code:
A1
Abstract:
The invention relates to a method for optimising an operation as applied to a chip of a multi-processor integrated circuit. Each processor works with a variable parameter, for example the clock frequency thereof, and the optimisation includes determining in real-time at least one characteristic datum (Si) associated with the processor (temperature, consumption, latency), transferring the characteristic data to the other processors, each processor calculating different values of an optimisation function (Ui) that depend on the characteristic datum (Si) of the block, the characteristic data (Snoti) of the other blocks and the variable parameter, the function being calculated for the current value (ai) of said parameter and for other possible values, followed by selecting, from the various parameter values, the value that provides the best value of the optimisation function, and finally applying said frequency to the processor for the rest of the execution of the task.

Inventors:
PUSCHINI PASCUAL DIEGO (FR)
BENOIT PASCAL (FR)
CLERMIDY FABIEN (FR)
Application Number:
PCT/FR2009/050581
Publication Date:
October 14, 2010
Filing Date:
April 06, 2009
Export Citation:
Click for automatic bibliography generation   Help
Assignee:
COMMISSARIAT ENERGIE ATOMIQUE (FR)
PUSCHINI PASCUAL DIEGO (FR)
BENOIT PASCAL (FR)
CLERMIDY FABIEN (FR)
International Classes:
G06F1/20; G06F1/32; G06F9/48; G06F9/50
Foreign References:
US20040037346A12004-02-26
Other References:
PUSCHINI D ET AL: "Temperature-Aware Distributed Run-Time Optimization on MP-SoC Using Game Theory", SYMPOSIUM ON VLSI, 2008. ISVLSI '08. IEEE COMPUTER SOCIETY ANNUAL, IEEE, PISCATAWAY, NJ, USA, 7 April 2008 (2008-04-07), pages 375 - 380, XP031281769, ISBN: 978-0-7695-3291-2
DIEGO PUSCHINI ET AL: "Game-Theoretic Approach for Temperature-Aware Frequency Assignment with Task Synchronization on MP-SoC", RECONFIGURABLE COMPUTING AND FPGAS, 2008. RECONFIG '08. INTERNATIONAL CONFERENCE ON, IEEE, PISCATAWAY, NJ, USA, 3 December 2008 (2008-12-03), pages 235 - 240, XP031382679, ISBN: 978-1-4244-3748-1
S. MURALI ET AL: "Temperature-aware processor frequency assignment for MPSoCs using convex optimization", PROCEEDINGS OF THE 5TH IEEE/ACM INTERNATIONAL CONFERENCE ON HARDWARE/SOFTWARE CODESIGN AND SYSTEM SYNTHESIS, 2007, Salzburg, Austria, pages 111 - 116, XP002563208
Attorney, Agent or Firm:
GUERIN, Michel et al. (FR)
Download PDF:
Claims:
REVENDICATIONS

1 . Procédé d'optimisation de fonctionnement qui s'applique à une puce de circuit intégré (Cl) comportant plusieurs blocs de calcul (B1) aptes à exécuter des tâches respectives dans une application donnée, chaque bloc de calcul comprenant au moins un processeur (PR1), le procédé comprenant, pour chaque bloc de calcul :

- l'exécution d'une tâche par le processeur sous le contrôle d'au moins un paramètre variable (a,), tel que la fréquence ou période de travail du processeur ou sa tension d'alimentation,

- la détermination en temps réel d'au moins une donnée caractéristique (S1) associée au bloc de calcul pendant son fonctionnement, telle que par exemple la température du bloc ou la puissance dissipée dans le bloc ou un temps de latence du bloc, cette donnée caractéristique étant dépendante de la valeur du paramètre variable (a,),

- le transfert de la donnée caractéristique (S1) vers les autres blocs et la réception des données caractéristiques correspondantes (Snotι) des autres blocs,

- le calcul dans le bloc de différentes valeurs d'une fonction d'optimisation (U1) dépendant de la donnée caractéristique (S1) du bloc, des données caractéristiques (Snotι) des autres blocs, et du paramètre variable (a,) , la fonction étant calculée pour la valeur actuelle (a,) du paramètre variable du bloc et pour d'autres valeurs possibles (a," , a,++) de ce paramètre,

- la sélection, parmi les différentes valeurs du paramètre variable, de celle qui donne la meilleure valeur de la fonction d'optimisation, - et l'application au processeur de cette valeur sélectionnée

(a,*) du paramètre variable pour la suite de l'exécution de la tâche.

2. Procédé selon la revendication 1 , caractérisé en ce que le paramètre variable a, est la fréquence ou la période T1 d'une horloge prévue dans le bloc de calcul, cette horloge définissant un temps de cycle de calcul élémentaire du processeur.

3. Procédé selon l'une des revendications 1 et 2, caractérisé en ce que la donnée caractéristique (S1) est liée à la puissance consommée par le bloc de calcul pendant son fonctionnement.

4. Procédé selon la revendication 3, caractérisé en ce que la donnée caractéristique (S1) est une contribution du bloc de calcul à la consommation énergétique globale de la puce.

5. Procédé selon la revendication 3, caractérisé en ce que la fonction d'optimisation est une fonction de minimisation d'une consommation de puissance et est la somme d'une sous fonction principale qui représente une contribution énergétique normalisée du bloc de calcul, et d'une sous- fonction secondaire qui est une pénalité en présence d'une contrainte de temps de latence maximum acceptable pour l'exécution d'une tâche.

6. Procédé selon l'une des revendications 1 et 2, caractérisé en ce que la donnée caractéristique (S,) est une contribution du bloc de calcul à un temps de latence global des calculs effectués par la puce dans une application où elle est utilisée.

7. Procédé selon la revendication 6, caractérisé en ce que la fonction d'optimisation est une fonction de minimisation du temps de latence global et est la somme d'une sous fonction principale qui représente une contribution normalisée de temps de latence induit par le bloc de calcul, et d'une sous-fonction secondaire qui est une pénalité en présence d'une contrainte de consommation maximale d'énergie acceptable pour la puce.

8. Procédé selon l'une des revendications 1 à 7, caractérisé en ce que le calcul de la fonction d'optimisation et la sélection d'une valeur de paramètre variable comprennent

- la détermination des valeurs de la fonction d'optimisation pour une valeur actuelle du paramètre variable et deux autres valeurs encadrant cette valeur actuelle dans une succession monotone de valeurs possibles,

- la comparaison de la valeur de la fonction pour le paramètre actuel et pour les deux autres valeurs de paramètres, et la sélection d'une nouvelle valeur de paramètre qui est l'une des deux autres valeurs si et seulement si cette autre valeur donne une meilleure valeur de fonction d'optimisation.

9. Puce de circuit intégré comprenant plusieurs blocs de calcul aptes à exécuter chacun une tâche respective en fonction de l'application dans laquelle la puce est utilisée, chaque bloc de calcul comprenant

- au moins un processeur pour exécuter la tâche,

- un élément de communication permettant la communication entre ce bloc et les autres blocs,

- et un moyen d'action sur le fonctionnement du processeur pour modifier un paramètre variable de ce fonctionnement tel que la fréquence ou période de travail du processeur ou sa tension d'alimentation, la puce étant caractérisée en ce que chaque bloc comprend en outre

- un moyen de détermination en temps réel d'au moins une donnée caractéristique associée à ce bloc pendant son fonctionnement, telle que par exemple la température du bloc ou la puissance dissipée dans le bloc ou un temps de latence de calcul exécuté dans le bloc, cette donnée caractéristique dépendant de la valeur du paramètre variable,

- des moyens pour transférer la donnée caractéristique vers les autres blocs et pour recevoir les données caractéristiques correspondantes des autres blocs,

- des moyens pour calculer différentes valeurs d'une fonction d'optimisation dépendant de la donnée caractéristique du bloc, des données caractéristiques des autres blocs, et du paramètre variable, la fonction étant calculée pour la valeur actuelle du paramètre variable du bloc et pour d'autres valeurs possibles de ce paramètre,

- des moyens pour sélectionner parmi les différentes valeurs du paramètre variable celle qui donne la meilleure valeur de la fonction d'optimisation,

- et des moyens pour transmettre la valeur sélectionnée au moyen d'action pour qu'il l'applique au processeur.

Description:
PROCEDE D'OPTIMISATION DU FONCTIONNEMENT D'UN CIRCUIT

INTEGRE MULTIPROCESSEURS, ET CIRCUIT INTEGRE

CORRESPONDANT

L'invention concerne un procédé d'optimisation du fonctionnement d'un circuit intégré à multiples processeurs, et un circuit intégré comportant des moyens d'optimisation en temps réel de son fonctionnement.

Les circuits intégrés à multiples processeurs, appelés par abréviation MP-SoC (de l'anglais "Multiprocessor System-on-Chip"), sont formés sur une seule puce monolithique et offrent des capacités de calcul très élevées du fait du partage des tâches qui peuvent être accomplies par les différents processeurs. Les processeurs fonctionnent en relation les uns avec les autres et les tâches sont partagées en fonction de l'application. Les tâches sont exécutées séquentiellement ou en parallèle, ou les deux à la fois. Chaque application définit un programme d'utilisation de tout ou partie des processeurs, et définit également des liaisons d'échanges entre les différents processeurs en fonction des tâches à accomplir. Les progrès technologiques tendent à augmenter le nombre de processeurs qui peuvent être placés sur une puce. Ce nombre peut atteindre plusieurs dizaines, voire même plusieurs centaines.

Parmi les problèmes qui se posent lors du fonctionnement de la puce, il y a notamment le problème de la dissipation de chaleur et le problème de la synchronisation des tâches exécutées pour minimiser le temps de calcul global. En ce qui concerne la dissipation de chaleur, il faut éviter une surchauffe locale de certains processeurs ainsi qu'une surchauffe globale de la puce. En ce qui concerne la synchronisation des tâches, on souhaite éviter une production trop rapide de résultats par un processeur alors qu'un autre processeur, qui attend ces résultats pour effectuer sa propre tâche, n'est pas capable de les traiter à la même cadence ; et inversement, on veut éviter qu'un processeur ne reste en attente de résultats venant d'un autre processeur qui travaillerait à une cadence trop lente. Un autre paramètre significatif de la performance du circuit peut être un temps caractéristique qu'on appelle le "temps de latence", qui représente le temps nécessaire pour que le processeur (s'il s'agit du temps de latence du processeur) ou un ensemble de processeurs (s'il s'agit du temps de latence d'un ensemble de processeurs) fournisse un résultat de calcul après avoir reçu les données d'entrée nécessaires à ce calcul.

On peut optimiser le fonctionnement de la puce au stade de la conception de la puce, en prenant en compte dès la conception les questions de dissipation thermique et de synchronisation. Mais cela n'est pas compatible avec le fait que les conditions de fonctionnement en exécution réelle vont beaucoup dépendre de l'application et qu'on ne peut pas optimiser le fonctionnement pour toutes les applications envisageables. On a déjà proposé de surveiller les risques de points chauds dans la puce et de reconfigurer la répartition des tâches entre les processeurs en fonction des points chauds estimés ou mesurés, par exemple en transférant d'un processeur à un autre processeur, au cours du fonctionnement, une tâche fortement consommatrice de puissance. L'invention a pour but de proposer une solution pour optimiser en temps réel, au cours de l'exécution d'une application, le fonctionnement de l'ensemble de la puce en agissant sur les conditions de travail de chacun des processeurs, notamment en agissant sur la fréquence d'une horloge individuelle associée à chaque processeur. L'optimisation recherchée est une optimisation à objectifs multiples, un des objectifs principaux pouvant être la surveillance de l'énergie consommée et un autre objectif principal pouvant être la surveillance des temps de latence de calcul. D'autre part, un but de l'invention est de proposer un procédé d'optimisation qui soit relativement indépendant du nombre de processeurs, afin que ce procédé soit transposable facilement d'une puce à une autre sans que le changement du nombre de processeurs oblige à effectuer une nouvelle conception des moyens d'optimisation.

Selon l'invention, on propose un procédé d'optimisation de fonctionnement qui s'applique à une puce de circuit intégré comportant plusieurs blocs de calcul aptes à exécuter des tâches respectives dans une application donnée, chaque bloc de calcul comprenant au moins un processeur. Le terme de processeur sera utilisé ci-après dans un sens très général comme étant un organe faisant un calcul. En ce sens un circuit ASIC exécutant une tâche spécifique est considéré comme un processeur. Le procédé comprend, pour chaque bloc de calcul :

- l'exécution d'une tâche par le processeur sous le contrôle d'au moins un paramètre variable, tel que la fréquence ou période de travail du processeur ou sa tension d'alimentation,

- la détermination en temps réel d'au moins une donnée caractéristique associée au bloc de calcul pendant son fonctionnement, telle que par exemple la température du bloc ou la puissance dissipée dans le bloc ou un temps de latence de calcul du bloc, cette donnée caractéristique étant dépendante de la valeur du paramètre variable,

- le transfert de la donnée caractéristique vers les autres blocs et la réception des données caractéristiques correspondantes des autres blocs,

- le calcul dans le bloc de différentes valeurs d'une fonction d'optimisation dépendant de la donnée caractéristique du bloc, des données caractéristiques des autres blocs, et du paramètre variable, la fonction étant calculée pour la valeur actuelle du paramètre variable du bloc et pour d'autres valeurs possibles de ce paramètre,

- la sélection, parmi les différentes valeurs du paramètre variable, de celle qui donne la meilleure valeur de la fonction d'optimisation,

- et l'application au processeur de cette valeur sélectionnée du paramètre variable pour la suite de l'exécution de la tâche.

Ce procédé est mis en œuvre simultanément par tous les blocs de calcul qui effectuent chacun individuellement une sélection de la valeur de paramètre variable qui est la plus appropriée pour l'optimisation du fonctionnement du bloc ; cette sélection tient compte des informations envoyées par les autres processeurs car la fonction d'optimisation utilisée par chaque processeur dépend de l'état de fonctionnement des autres blocs (au moins de certains d'entre eux qui sont en relation plus étroite, fonctionnellement ou géographiquement, avec le bloc considéré).

L'optimisation de fonctionnement est faite individuellement bloc par bloc ; un bloc peut correspondre à un processeur si on veut optimiser la puce en recherchant une solution optimale à partir de chaque processeur, mais un bloc pourrait aussi correspondre à un groupe de processeurs si on veut rechercher une solution optimale à partir de groupes ou "clusters" de processeurs.

Pour mettre en œuvre ce procédé, l'invention a également pour objet une puce de circuit intégré comprenant plusieurs blocs de calcul aptes à exécuter chacun une tâche respective en fonction de l'application dans laquelle la puce est utilisée, chaque bloc de calcul comprenant

- au moins un processeur pour exécuter la tâche,

- un élément de communication permettant la communication entre ce bloc et les autres blocs,

- et un moyen d'action sur le fonctionnement du processeur pour modifier un paramètre variable de ce fonctionnement tel que la fréquence ou période de travail du processeur ou sa tension d'alimentation, la puce étant caractérisée en ce que chaque bloc comprend en outre :

- un moyen de détermination en temps réel d'au moins une donnée caractéristique associée à ce bloc pendant son fonctionnement, telle que par exemple la température du bloc ou la puissance dissipée dans le bloc ou un temps de latence de calcul exécuté dans le bloc, cette donnée caractéristique dépendant de la valeur du paramètre variable,

- des moyens pour transférer la donnée caractéristique vers les autres blocs et pour recevoir les données caractéristiques correspondantes des autres blocs,

- des moyens pour calculer différentes valeurs d'une fonction d'optimisation dépendant de la donnée caractéristique du bloc, des données caractéristiques des autres blocs, et du paramètre variable, la fonction étant calculée pour la valeur actuelle du paramètre variable du bloc et pour d'autres valeurs possibles de ce paramètre,

- des moyens pour sélectionner parmi les différentes valeurs du paramètre variable celle qui donne la meilleure valeur de la fonction d'optimisation,

- et des moyens pour transmettre la valeur sélectionnée au moyen d'action pour qu'il l'applique au processeur. Le paramètre variable est de préférence la fréquence (ou, ce qui revient au même, la période) d'une horloge prévue dans le bloc de calcul, cette horloge définissant un temps de cycle de calcul élémentaire du processeur. Le paramètre variable peut aussi être la tension d'alimentation du processeur, et il est possible aussi que ces deux paramètres soient liés, une modification de fréquence étant faite en même temps qu'une modification de tension d'alimentation ; dans ce dernier cas, on utilisera de préférence la fréquence comme paramètre variable, mais on fera en sorte de modifier la tension d'alimentation en fonction de la valeur optimale trouvée pour la fréquence.

La donnée caractéristique associée à un bloc de calcul est de préférence liée à la puissance consommée par le bloc de calcul pendant son fonctionnement, ou à une contribution du bloc à la puissance consommée ; cette puissance dépend directement de la fréquence d'horloge du processeur (elle croît avec la fréquence). La donnée caractéristique peut aussi être un temps de latence d'un calcul effectué dans le bloc, ou plus généralement une contribution du bloc à la latence globale de la puce dans l'application où elle fonctionne ; ce temps de latence dépend aussi de la fréquence d'horloge.

La fonction d'optimisation elle-même peut être une fonction de minimisation de l'énergie ou la puissance consommée, ou une fonction d'optimisation d'un temps de latence dans l'exécution d'une tâche par la puce, ou encore, de préférence, une fonction d'optimisation multi-objectif prenant en compte à la fois la puissance consommée et les temps de latence. Cette fonction est choisie de manière à présenter un minimum ou un maximum en fonction de la variation du paramètre variable, les données caractéristiques des autres blocs étant considérées comme des paramètres fixés ; ce minimum ou ce maximum définissent l'optimum de valeur de la fonction d'optimisation ; la modification en temps réel du paramètre variable est effectuée dans un sens tendant à atteindre cet optimum. Dans une réalisation préférentielle particulièrement avantageuse, le calcul de la fonction d'optimisation et la sélection d'une valeur de paramètre variable comprennent :

- la détermination des valeurs de la fonction d'optimisation pour une valeur actuelle du paramètre variable et pour deux autres valeurs encadrant cette valeur actuelle dans une succession monotone de valeurs possibles,

- la comparaison de la valeur de la fonction d'optimisation pour le paramètre actuel et pour les deux autres valeurs de paramètres, et la sélection d'une nouvelle valeur de paramètre qui est l'une des deux autres valeurs si et seulement si cette autre valeur donne une meilleur valeur de fonction d'optimisation.

On ne fait donc pas, dans cette réalisation, une recherche directe de la valeur d'optimum sur tout le champ des valeurs possibles du paramètre variable pour trouver et appliquer une valeur optimale, mais on observe la valeur de la fonction d'optimisation pour deux valeurs de paramètre variable encadrant la valeur actuelle, et on applique immédiatement au processeur une de ces deux valeurs si on constate qu'elle procure un résultat meilleur que celui que procure la valeur actuelle ; sinon on conserve la valeur actuelle.

Pour permettre d'aboutir d'une manière efficace à un état d'optimisation du fonctionnement, il est très souhaitable que la fonction d'optimisation choisie ait une forme convexe ou concave (ou quasi-convexe ou quasi-concave), selon que l'optimisation est une minimisation ou une maximisation de la fonction, sur le champ des valeurs possibles du paramètre variable ; cela veut dire que la fonction choisie, variant en fonction du paramètre variable, doit avoir une dérivée du premier ordre passant par zéro, positive d'un côté du zéro, négative de l'autre côté.

Une manière avantageuse d'obtenir une telle fonction d'optimisation consiste à additionner une sous-fonction principale qui varie de manière monotone sur tout le champ des valeurs possibles du paramètre variable et une sous-fonction secondaire qui varie dans le sens contraire vers une extrémité de ce champ mais qui est faible ou nulle sur le reste du champ. Plus précisément, on peut établir une sous-fonction secondaire qu'on peut considérer comme une sous-fonction de pénalité sous contrainte à l'extrémité du champ, c'est-à-dire une sous-fonction qui pénalise la fonction d'optimisation lorsque le paramètre variable se rapproche de l'extrémité du champ , et ceci indépendamment de la valeur de la sous-fonction principale.

Dans une réalisation particulière, la sous-fonction principale qui définit l'optimisation recherchée pour un bloc est une valeur de contribution du bloc de calcul à la consommation d'énergie globale de la puce ; on souhaite minimiser cette contribution, qui diminue lorsque la période d'horloge augmente ; et la sous-fonction de pénalité est une fonction de contrainte de latence de calcul qui impose une pénalité d'autant plus forte que la période d'horloge s'allonge vers l'extrémité du champ des périodes. La somme de ces deux fonctions est une courbe convexe (ou concave ; dans ce qui suit on utilisera le mot convexe pour simplifier) présentant un maximum ou un minimum dans le champ des périodes d'horloge possibles.

Dans une autre réalisation, la sous-fonction principale est une valeur de contribution de latence de calcul dans la latence globale des tâches à exécuter ; la latence croît avec la période d'horloge ; la sous- fonction secondaire est une fonction de pénalité sous contrainte d'énergie qui croît fortement lorsque la période d'horloge diminue. La somme de ces deux fonctions est encore une courbe convexe présentant un minimum dans le champ des périodes possibles.

D'autres caractéristiques et avantages de l'invention apparaîtront à la lecture de la description détaillée qui suit et qui est faite en référence aux dessins annexés dans lesquels : - la figure 1 représente une puce multiprocesseur MP-SoC ;

- la figure 2 représente schématiquement l'organisation de la puce avec plusieurs processeurs connectés entre eux par un réseau de communication commun ;

- la figure 3 représente un graphe d'exécution de plusieurs tâches dans une application ;

- la figure 4 représente plusieurs processeurs interconnectés pour assurer l'exécution des tâches de la figure 3 ;

- la figure 5 représente des courbes de variation de différentes fonctions ou sous-fonctions d'optimisation en fonction d'une variable qui est la période d'horloge ;

- la figure 6 représente une fonction d'optimisation combinant plusieurs sous-fonctions ;

- la figure 7 représente un organigramme de processus d'optimisation ; - la figure 8 représente une organisation de bloc de calcul pour l'exécution du processus d'optimisation ;

- la figure 9 représente une organisation de calcul d'optimisation portant sur trois valeurs adjacentes du paramètre variable de la fonction d'optimisation.

La figure 1 représente schématiquement une puce de circuit intégré monolithique Cl à multiples processeurs ou puce MP-SoC. La puce est destinée à exécuter une tâche globale complexe, incluant notamment des traitements numériques, et les différents processeurs vont exécuter des tâches individuelles contribuant à la tâche globale, certaines de ces tâches pouvant être exécutées en parallèle. L'exécution en parallèle par plusieurs processeurs permet d'accélérer l'exécution de la tâche globale. C'est l'application dans laquelle la puce fonctionne qui détermine la division des tâches et l'attribution des tâches à tel ou tel processeur.

Les processeurs sont interconnectés entre eux et interconnectés avec les ports d'entrée-sortie de la puce par un réseau d'interconnexion situé sur la puce. Ce réseau est parfois appelé NoC (de l'anglais Network on Chip, ou réseau sur la puce). Chaque puce est divisée en n blocs de calcul B. Le nombre n peut être de plusieurs dizaines ou même plusieurs centaines. Par exemple n = 80. Un bloc de calcul comprend par exemple un processeur PR, une mémoire MEM, des circuits périphériques PER, et une interface COM de raccordement avec le réseau d'interconnexion. Le bloc comprend de préférence aussi un circuit FA de réglage de fréquence d'horloge. Le circuit FA peut être un circuit qui règle non seulement la fréquence de travail du processeur mais aussi sa tension d'alimentation (circuit DVFS de l'anglais "Dynamic Voltage Frequency Scaling"), notamment lorsque cette tension doit dépendre de la fréquence de travail. Sur la figure 1 , les blocs de calcul sont représentés comme étant des carrés tous identiques, mais ils peuvent être différents les uns des autres, en géométrie et en fonctionnalité, et chaque bloc pourrait comprendre plusieurs processeurs plutôt qu'un seul.

La figure 2 représente schématiquement sous une autre forme l'organisation de la puce en n blocs de calcul B 1 (B 1 à B n ) de rang i = 1 a n, interconnectés entre eux par un réseau NoC par l'intermédiaire des interfaces respectifs COM 1 (COM 1 à COM n ) présents dans chaque bloc B 1 .

La figure 3 représente à titre d'exemple une tâche globale à accomplir, divisée en six tâches partielles T1 à T6 qui vont être exécutées par six blocs de calcul différents B 1 à B 6 .

La figure 4 représente un groupe de six blocs de calcul interconnectés de manière à assurer l'exécution des six tâches. D'autres interconnexions, non représentées, seront prévues entre les blocs, non pas pour assurer l'exécution de l'application, mais pour réaliser l'optimisation selon l'invention, le procédé d'optimisation impliquant que chaque bloc reçoive des autres blocs une information sur une donnée caractéristique décrivant le fonctionnement de ces autres blocs. L'information peut être une information sur leur fréquence de travail ou une information de consommation d'énergie ou de temps de latence de calcul, ou plusieurs informations différentes simultanément.

La synchronisation des tâches est importante puisque, par exemple, la tâche T3 ne peut pas être exécutée avant que le bloc B 3 n'ait reçu les résultats des processeurs des blocs B 2 et B 4, le bloc B 4 ne pouvant lui-même fournir de résultats qu'après avoir reçu des résultats du processeur du bloc B 2 .

Selon l'invention, on propose d'incorporer à chaque bloc de calcul des moyens spécifiques pour optimiser le fonctionnement, ces moyens utilisant au moins une donnée caractéristique relative au bloc de calcul et des données caractéristiques relatives aux autres blocs de calcul (ou au moins certains autres blocs de calcul). Ces moyens spécifiques agissent sur un paramètre variable qui régit le fonctionnement du processeur, notamment sa fréquence de travail, et ils calculent une fonction d'optimisation en fonction des données caractéristiques et en fonction de la valeur du paramètre variable ; le résultat de la fonction d'optimisation sert à modifier la valeur du paramètre variable dans un sens qui tend vers l'optimisation recherchée ; en retour, suite à la modification du paramètre variable et donc suite à la modification du fonctionnement du processeur, les données caractéristiques sont modifiées, de sorte que la fonction d'optimisation rétroagit sur le fonctionnement par l'intermédiaire du paramètre variable. Le paramètre variable sera de préférence la fréquence ou période de l'horloge qui pilote le processeur. Les données caractéristiques relatives au bloc de calcul seront de préférence d'une part une énergie consommée dans le bloc, ou une contribution du bloc à l'énergie globale consommée par la puce, ou une donnée en rapport avec cette énergie (qui dépend de la fréquence de travail et qui, plus précisément, croît avec cette fréquence), et d'autre part un paramètre calculé représentant une valeur de désynchronisation relative entre processeurs, ou encore une contribution au temps de latence de calcul de l'application, temps de latence qui dépend également des fréquences d'horloge individuelles des processeurs.

Chacun des blocs de calcul B 1 à B n transmet aux autres blocs une information sur les données caractéristiques relatives au bloc, et chaque bloc va alors essayer d'ajuster son propre paramètre variable dans un sens qui donne une valeur optimale au résultat du calcul de la fonction d'optimisation effectué dans ce bloc.

Le problème d'optimisation est ainsi distribué entre les différents processeurs qui recherchent individuellement un fonctionnement optimal, en utilisant à leur profit une certaine connaissance de l'état de fonctionnement des autres processeurs. On peut considérer que ce problème est mathématiquement assimilable à une recherche d'une situation d'équilibre théorique global, représentant un ensemble de positions d'équilibre individuelles, qu'on peut définir de la manière suivante : lorsque tous les processeurs sont à leur position d'équilibre individuelle, si l'un quelconque d'entre eux tendait à en sortir, le résultat de son propre calcul d'optimisation serait dégradé, de sorte qu'il va individuellement chercher à y rester.

Ce problème a été considéré dans le domaine de la théorie mathématique des jeux. La théorie des jeux est une branche des mathématiques appliquées qui étudie les interactions entre individus rationnels qui cherchent à optimiser un résultat. Dans la théorie des jeux non-coopératifs, on considère des individus qui choisissent individuellement la manière dont ils prennent des décisions, pour accroître une valeur de résultat qui leur est bénéfique. La décision est prise individuellement par chaque joueur en fonction de ce qu'il connaît de l'ensemble des autres joueurs. Dans la présente invention, les blocs de calcul individuels peuvent être considérés comme des joueurs individuels dans un jeu non-coopératif, car ils sont pourvus de moyens de décision individuels et de moyens d'action individuelle sur leur propre fonctionnement, permettant de tendre à une optimisation selon un calcul qui leur est propre, tout en ayant une certaine connaissance de l'état des autres joueurs que sont les autres blocs de calcul.

On va maintenant considérer plus précisément le cas où le moyen d'action est la sélection d'une fréquence ou, ce qui revient au même, une période de travail du processeur, et où la fonction d'optimisation est une fonction de recherche d'un compromis entre la température locale du bloc (qu'on veut minimiser mais qui augmente avec la fréquence) et le temps de calcul (qu'on veut minimiser et qui diminue avec la fréquence).

Optimisation en fonction de la température et de la synchronisation :

Dans une mise en œuvre simplifiée, on peut établir une fonction d'optimisation locale (c'est-à-dire propre à chaque bloc) O O pτ qui est la somme pondérée d'une valeur O TEMP caractéristique de la température locale dans le bloc et d'une valeur O SYNC caractéristique d'une bonne ou mauvaise synchronisation des tâches.

OOPT = 3-OTEMP + b. OSYNC a et b sont des coefficients de pondération dont la somme est égale à 1 et qui dépendent, pour chaque bloc, du poids relatif qu'on souhaite accorder aux questions de température et aux questions de synchronisation ou de temps de calcul. Les poids relatifs, de même que les données caractéristiques de température ou de synchronisation des tâches, sont individuelles à chaque bloc de calcul.

Ainsi, pour le bloc de rang i, on peut écrire:

OθPT,ι = 3|-OτEMP,ι + b,.OsYNC,ι

La donnée caractéristique de température peut être par exemple une fonction de la puissance consommée par le bloc, et de la puissance consommée par les blocs immédiatement voisins qui, par conduction thermique contribuent à l'augmentation de température du bloc considéré. Dans ce cas, les blocs voisins doivent envoyer au bloc considéré une indication de la puissance qu'ils consomment. On peut alors établir une donnée caractéristique O TEMP . I à partir d'un modèle de calcul de température prenant en compte la puissance consommée par le bloc B 1 , la résistance d'évacuation thermique du bloc, les puissances de blocs voisins B j , la résistance thermiques entre le bloc de rang i et les blocs voisins, etc.

En ce qui concerne la donnée caractéristique de synchronisation, on peut utiliser un modèle simple qui établit une donnée caractéristique qui est la somme de données de synchronisation entre couples de blocs interconnectés entre eux pour l'accomplissement de leurs tâches. Par exemple, le modèle consiste à observer une donnée de synchronisation entre deux blocs de rang i et j respectivement qui serait A SYNC,I, J égale au module de la différence |x,.f,/l_, - X j .f/L j l où f, et f j sont les fréquences de travail des deux blocs, L 1 et L j sont les charges de calcul respectives comptées en proportion de temps passé à travailler, et x, et X j sont des coefficients respectifs. La donnée caractéristique pour le bloc i est alors la somme de tous les A SYNC . I J pour tous les blocs de rang j fonctionnellement connectés au bloc i dans l'exécution de l'application.

La fonction d'optimisation O O est particulièrement simple parce qu'elle se contente d'additionner deux sous-fonctions, avec des coefficients de pondération respectifs. On comprendra qu'on pourrait aussi utiliser une combinaison de plus de deux sous-fonctions d'optimisation.

Le bloc de calcul sera pourvu localement de moyens pour calculer différentes valeurs de la fonction d'optimisation, d'une part pour la valeur actuelle de la fréquence de travail du bloc (la fréquence de travail étant le paramètre variable sur lequel on va agir pour optimiser le fonctionnement) et d'autre part pour plusieurs autres valeurs de cette fréquence.

Par conséquent, le bloc de calcul établit une série de calculs pour simuler la valeur que prendrait la fonction d'optimisation pour les différentes valeurs possibles de la fréquence de travail (par exemple une valeur parmi la succession discrète de fréquences de 100 MHz à 300 MHz échelonnées de 5 MHz en 5 MHz), incluant la valeur actuelle de la fréquence, et ceci en tenant compte des données caractéristiques actuelles des autres blocs de calcul. En effet le résultat de la fonction d'optimisation O O dépend de l'état actuel des autres blocs. On signalera à ce propos que les données caractéristiques représentant le fonctionnement actuel des autres blocs peuvent être transmises sous différentes formes. Par exemple, on peut considérer que si la donnée caractéristique est une température estimée d'un autre bloc, l'information transmise peut être soit une puissance consommée (calculée dans l'autre bloc) soit une température, détectée par un capteur local dans l'autre bloc, soit encore la donnée O TEMP .J calculée dans l'autre bloc.

Une fois que le bloc de calcul de rang i a calculé les valeurs de fonction d'optimisation pour une série de valeurs de fréquence de travail possibles, il détermine quelle est la fréquence qui donne le meilleur résultat

(maximum ou minimum, selon le cas, de la fonction O O ) et il commande l'application au processeur de cette fréquence optimale. Ce changement de fréquence, s'il a lieu, c'est-à-dire si le bloc de calcul de rang i n'est pas déjà à une fréquence optimale, a des répercussions sur les autres blocs qui effectuent simultanément des calculs prenant en compte le bloc de rang i.

Dans la majorité des cas, les blocs convergent progressivement vers une solution optimale dès lors que la fonction d'optimisation a une forme convexe ou quasi-convexe en fonction du paramètre variable (fréquence) qui est utilisé.

Optimisation d'énergie ou de latence en présence de contrainte de latence ou d'énergie :

Dans une mise en œuvre plus sophistiquée du procédé selon l'invention, on utilise une fonction d'optimisation qui fait intervenir deux sous- fonctions qui sont respectivement une sous-fonction principale à optimiser (énergie ou temps de latence par exemple) et une sous-fonction de pénalité, qui définit une pénalité de la fonction d'optimisation en cas de consommation d'énergie trop élevée ou bien qui définit une pénalité en cas de temps de latence globale trop élevé. La sous-fonction principale varie avec la période d'horloge (l'énergie et le temps d'exécution augmentent avec la période), la période d'horloge T 1 d'un processeur PR 1 de rang i étant considérée ici comme étant le paramètre variable dans le processus d'optimisation. Les sous-fonctions de pénalité sont conçues de telle sorte qu'elle n'influent pas ou pas beaucoup sur la valeur de la fonction d'optimisation si l'énergie globale consommée et le temps de latence global sont au-dessous de seuils prédéterminés mais qu'elle détériore fortement la fonction d'optimisation lorsque l'énergie globale ou le temps de latence dépassent ces seuils.

Cette manière de constituer la fonction d'optimisation permet de lui donner une forme de courbe (en fonction de la période d'horloge) qui présente de manière certaine un optimum, et par conséquent une convergence vers un état d'équilibre où chaque processeur trouve une fréquence optimale de fonctionnement.

Plus précisément, on peut utiliser comme sous-fonction principale une contribution énergétique d'un bloc de calcul par rapport à la consommation d'énergie globale du circuit intégré.

Optimisation par la contribution énergétique : L'énergie consommée par un bloc de calcul B 1 de rang i pendant le temps d'exécution globale TO de la tâche assignée au circuit comprend : - une partie constante ou statique E S TAT I indépendante de la fréquence d'horloge f, = 1 /T 1 et égale à TO. PSTAT I , OÙ PSTAT I est la puissance consommée en permanence avec ou sans exécution de tâches,

- une partie dynamique de fonctionnement à haute consommation (pendant l'exécution active d'une tâche par le bloc de rang i), soit E HD YN, I ,

- et enfin une partie dynamique à faible consommation pendant d'autres moments, soit E L DYN ,I -

L'énergie E H DYN ,I peut être considérée comme égale à

N 1 - EN 11 TN 11 2 ZT 1 2 OÙ T 1 est la période d'horloge, N 1 est le nombre de périodes d'horloge nécessaires à l'exécution active de la tâche du processeur PR 1 pendant le temps TO ; E N, , est la référence de consommation d'énergie nominale du processeur pendant une période d'horloge de durée nominale T N, ,. La période nominale est par exemple, mais pas obligatoirement, située au milieu d'une série discrète de N périodes possibles de fonctionnement du processeur.

En dehors de la durée N 1 T 1 , c'est-à-dire pendant une durée égale à (TO-N 1 T 1 ), la puissance consommée est proportionnellement plus faible et on peut appeler γ, le coefficient de proportionnalité, inférieur à 1 , représentant la baisse de consommation lorsque le processeur n'est pas en cours d'exécution de sa tâche.

L'énergie consommée en mode basse consommation est donc

ELDYN.I = γ, [(TO/T I )-N I ].E N ,,.T N / 2//T I L'énergie totale consommée par le bloc de calcul de rang i lorsque la période d'horloge est T 1 est donc :

E 1 (T 1 ) = P STAT,I .T0 + N 1 - E N11 T N11 2 ZT 1 2 + γ, [TOfT 1 ) - N 1 ]. E N11 T N11 2 ZT 1

Les énergies consommées par tous les microprocesseurs pour l'exécution de leurs tâches respectives au sein de la tâche globale peuvent donc être calculées ; E k (T k ) est l'énergie consommée par le processeur PR k de rang k quelconque, travaillant avec une période d'horloge T k .

On peut alors définir une contribution d'énergie du bloc de calcul B 1 ou du processeur PR 1 dans l'exécution de la tâche globale lorsque les processeurs de rang respectif k travaillent avec des périodes d'horloge respectives T k . Cette contribution est désignée par Ed(T 1 , T notι ) qui dépend principalement d'une variable de période d'horloge T 1 propre au processeur mais qui dépend aussi dans une moindre mesure des variables de période d'horloge T k de tous les autres processeurs ; la notation T notι dans la contribution Ed(T 1 , T notι ) désigne un vecteur qui est l'ensemble des périodes d'horloge T k à l'exception de la période T 1 .

La contribution énergétique normalisée ECi(T 1 T nOtI ) peut être calculée par l'expression suivante : EC 1 [TiJnOU) = ? iE f^

Où pi est le poids du processeur PR, en termes de nombre de cycles d'horloge nécessaires pour l'exécution complète de l'application pendant le temps TO par rapport au nombre total de cycles utilisés par l'application pendant ce temps :

Pi = N 1 Z XJV, La courbe qui représente la variation de la contribution ECi(T 1 , T not i) en fonction de T 1 est une courbe d'allure générale décroissante représentée schématiquement sous la référence A à la figure 5. La contribution est normalisée et comprise entre 0 et 1. Cette contribution énergétique peut constituer une sous-fonction principale dans le calcul de la fonction d'optimisation du bloc de rang i.

Optimisation par le temps de latence :

On peut sur les mêmes principes concevoir une contribution de temps de latence du processeur de rang i au temps de latence global ; cette contribution normalisée LC, peut être écrite sous la forme :

LCi (Ti,Tnoti) = - PiLi ^

k L k ( T k ) P l = W ∑ k N k k L k k ) peut être considéré comme le temps de latence global, somme de tous les temps de latence L k (T k ) des différents blocs ou processeurs de rang k = 1 à n. On reviendra plus loin sur la notion de temps de latence.

La courbe LC 1 en fonction de T 1 (tous autres paramètres constants) est une courbe d'allure générale croissante représentée schématiquement sous la référence A' à la figure 5. Elle est normalisée et peut varier entre 0 et 1 .

Cette contribution peut, là encore, constituer une sous-fonction principale dans le calcul d'optimisation du bloc de rang i. Dans le cas de tâches parallèles ou imbriquées, le temps de latence d'un bloc peut être considéré comme le temps nécessaire pour exécuter une tâche dans un bloc déterminé. Il se décompose en un temps de calcul et un temps de communication entre processeurs, mais on peut en général négliger le temps de communication, le temps de latence dû au calcul étant souvent prépondérant.

Le temps de latence global est défini par la durée entre le moment où une donnée déterminée entre dans l'application jusqu'au moment où un résultat correspondant est fourni à la sortie de l'application. Ce temps de latence est imposé par le chemin critique de traitement des données, c'est-à- dire le plus long chemin (en temps) qui existe dans le graphe des tâches de l'application. Si on ajoute les temps de latence individuels sur ce plus long chemin, on obtient le temps de latence global.

On peut diviser l'application en sous-systèmes, avec un premier sous-système qui a le plus long temps de latence et d'autres qui ont des temps de latence plus court et on optimisera de préférence le fonctionnement en considérant chaque sous-système.

Les sous-fonctions de pénalité, qui expriment des contraintes d'énergie maximale ou de temps d'exécution maximal peuvent être définies de la manière suivante :

Contrainte d'énergie :

Lorsque le système exécute une application, le processeur de rang i consomme une énergie E 1 (T 1 ). Si on veut tendre à limiter à une valeur E max l'énergie totale consommée par le circuit intégré, on va pénaliser les solutions qui tendent à amener un dépassement de la valeur E max .

On peut le faire en ajoutant à la sous-fonction d'optimisation principale, lorsque celle-ci est une contribution de temps de latence, une valeur de pénalité d'énergie E pθnil lorsque l'énergie totale consommée est supérieure à E max . La valeur de pénalité est de préférence calculée de la manière suivante :

- la valeur de pénalité est nulle si l'énergie totale ∑ E k k ) reste au-dessous de E max ; - la valeur de pénalité est non nulle dans le cas contraire et varie de préférence en croissant fortement avec la fréquence f,=1 / ~ T, ; elle est de préférence égale à Ep θnil = α(T me -Tι), où T est la plus petite période d'horloge du processeur PR, qui permet de satisfaire la contrainte d'une énergie inférieure à E max ; α est un coefficient qui détermine la sévérité de la pénalité souhaitée.

Autrement dit, en fonctionnant à la période d'horloge T , toutes choses égales par ailleurs, l'énergie globale consommée sera E max ; si on réduit encore cette période, l'énergie sera supérieure à E max et on appliquera une pénalité d'autant plus grande que T, sera plus petit que T et d'autant plus grande qu'on aura choisi un coefficient de sévérité α plus élevé. Mais si T 1 est plus grand que T on n'appliquera pas de pénalité.

Cette fonction de pénalité tend à écarter les solutions de période T 1 qui entraînent un dépassement de la contrainte d'énergie totale maximale. La partie B' de la figure 5 représente l'allure générale de la courbe de pénalité sous contrainte d'énergie en fonction de la période d'horloge du processeur concerné.

2. Contrainte de latence ou retard d'exécution : La contrainte donnant lieu à une pénalité peut être formulée à partir d'une valeur L max de la latence (ou retard d'exécution) maximale acceptable lors de l'exécution de la tâche globale par le circuit intégré multiprocesseurs.

On peut alors établir une valeur de pénalité de latence L pθnil pour chaque processeur, et cette valeur est de préférence calculée comme suit :

- la valeur de pénalité est nulle si le retard total d'exécution est inférieur ou égal à L max ;

- la valeur de pénalité est non nulle dans le cas contraire et croît avec la période T 1 ; la valeur est de préférence L pθnil = Cc(T 1 - T m ι) où α est un coefficient de sévérité (éventuellement le même que pour la pénalité d'énergie) qu'on veut affecter à la contrainte de latence, et T m ι est la période d'horloge la plus grande du processeur de rang i qui permet de satisfaire à la contrainte de latence globale maximale L max .

Cette fonction de pénalité tend à écarter les solutions de période d'horloge qui entraînent un dépassement de la latence globale acceptable

Lmax-

L'allure générale de la sous-fonction de pénalité en fonction de la période T 1 est celle représentée dans la partie B de la figure 5.

La fonction d'optimisation globale calculée par chaque bloc de calcul est alors de préférence :

- soit la somme OPT Eil de la contribution énergétique ECi(T 15 T nOtI ) et de la sous-fonction de pénalité sous contrainte de temps de latence L pθni ι ; l'allure générale de cette fonction d'optimisation est celle représentée à la courbe C de la figure 5, qui est la combinaison des courbes A et B ; cette fonction est une fonction d'optimisation d'énergie ; elle tend à minimiser la consommation d'énergie de l'ensemble, mais elle est contrainte par une limite de latence acceptable ;

- soit la somme OPT Ul de la contribution de latence et de la sous-fonction de pénalité sous contrainte d'énergie ; l'allure générale de cette fonction d'optimisation est celle représentée à la courbe C de la figure 5, qui est la combinaison des courbes A' et B' ; cette fonction est une fonction d'optimisation de latence ; elle tend à minimiser la latence globale de l'ensemble, mais elle est contrainte par une limite de consommation d'énergie acceptable.

Dans les deux cas, la fonction d'optimisation est convexe ou quasi-convexe, tournée vers le haut si l'optimisation consiste dans la recherche d'un minimum, ou tournée vers le bas si l'optimisation consiste dans la recherche d'un maximum. Par convexe ou quasi-convexe, on entend le fait que la fonction présente une succession de deux parties adjacentes dont l'une est à dérivée première positive ou nulle et l'autre est à dérivée première négative ou nulle, le mot "quasi-convexe" désignant le fait que la dérivée peut être nulle sur une certaine plage du paramètre variable T 1 .

Cette convexité ou quasi-convexité de la courbe pour tous les processeurs permettra dans le cas général de trouver un point d'équilibre.

Dans une variante, on établit une fonction d'optimisation qui est la somme de l'une des deux fonctions principales (contribution énergétique ou contribution au temps de latence) et de deux sous-fonctions de pénalité en présence de contrainte, l'une étant une pénalité en contrainte de latence et l'autre une pénalité en contrainte d'énergie. Dans ce cas, la fonction d'optimisation est représentée par une courbe qui est l'addition des courbes A, B et B', ou encore l'addition des courbes A', B et B'. La figure 6 représente une telle fonction dans le premier cas, fonction qu'on peut écrire : OPTEL. I = ECi(T,, Tnoti) + Lp θni | + E pθni |

L'équilibre ne sera pas forcément acceptable dans le cas où la valeur T m ι est inférieure à la valeur T . Il y a en effet alors contradiction entre les contraintes : une solution qui optimise la contrainte d'énergie va violer la contrainte de latence maximale et réciproquement. Le choix de la fonction d'optimisation d'énergie ou de la fonction d'optimisation de latence dépendra du contexte et il est possible d'attribuer à certains processeurs une fonction d'optimisation d'énergie et à d'autres une fonction d'optimisation de latence, en fonction de la nature des processeurs, et de l'application.

Par exemple, si la contrainte d'énergie est utilisée pour un processeur, un dépassement d'énergie maximale pourra être un déclencheur pour reconfigurer le système multiprocesseur pour attribuer une partie de sa tâche à d'autres processeurs.

L'algorithme global de recherche de l'optimum est exécuté cycliquement par chaque bloc de calcul B 1 de la manière suivante :

- le bloc de calcul de rang i recueille les valeurs de données caractéristiques S k (par exemple contributions d'énergie respectives) des autres processeurs, soit un ensemble S no tι ;

- il convertit la fonction d'optimisation (fonction de T 1 et du vecteur Snoti) en une fonction scalaire de T 1 , les valeurs S no tι étant considérées comme des paramètres figés pendant l'exécution d'un cycle de l'algorithme ;

- il calcule la valeur de T 1 qui correspond à une valeur optimum (maximum ou minimum) de cette fonction de T 1 , à l'intérieur d'une plage de périodes d'horloge possibles [T mιn , T max ], plage qui peut être la même pour tous les processeurs.

Le calcul de la valeur de T 1 optimale pour le processeur concerné peut se faire en calculant successivement la valeur de la fonction d'optimisation pour N valeurs de périodes d'horloge allant de T mιn à T max , de préférence N valeurs régulièrement distribuées entre T mιn et T max . Pour chaque valeur de période en partant par exemple de T mιn on calcule la valeur de la fonction d'optimisation en prenant en compte la valeur actuelle du vecteur S notι ; on recherche le maximum parmi les N valeurs calculées et on applique au processeur la période d'horloge correspondant à ce maximum ; ou bien, on calcule successivement les valeurs en partant par exemple de T max , et, tant que la fonction d'optimisation décroît (en supposant que l'optimum est un minimum), on décrémente la valeur de la période d'horloge ; on s'arrête lorsque elle se met à croître et on applique au processeur une période d'horloge qui correspond au minimum ainsi trouvé.

Alternativement et de manière particulièrement avantageuse en termes de temps de calcul, on peut se contenter d'une recherche progressive de l'optimum, c'est-à-dire que l'algorithme de recherche ne calcule pas une multiplicité de valeurs de la fonction d'optimisation avant de sélectionner la meilleure et de l'appliquer au processeur, mais il calcule, au cours d'un cycle, trois valeurs de la fonction d'optimisation, l'une correspondant à la période actuelle de l'horloge, la seconde à une période légèrement supérieure et la troisième à une période légèrement inférieure. En pratique, les valeurs de période sont prises dans une succession monotone discrète de N valeurs possibles et le calcul est fait pour les deux valeurs les plus proches qui encadrent la valeur actuelle. L'algorithme de calcul détermine si une de ces valeurs de période conduit à une valeur de fonction d'optimisation meilleure que la valeur pour la période actuelle, et il applique alors immédiatement au processeur cette nouvelle période d'horloge. Sinon il conserve la période d'horloge actuelle et le processeur continue à travailler avec cette période. L'algorithme est réexécuté cycliquement dans chaque bloc, avec la nouvelle valeur de période d'horloge si elle a changé, ou avec l'ancienne si elle n'a pas changé, et avec des valeurs de S 1 et S no tι qui ont peut-être changé dans l'intervalle.

A titre d'exemple, l'écart entre deux valeurs adjacentes de périodes d'horloge peut être de 0,5 nanosecondes, correspondant à un pas d'environ 5 MHz, pour des fréquences d'horloge dans une gamme allant de 100 MHz (T max = 10 nanosecondes) à 300 MHz (T mιn = 3 nanosecondes) ; la répartition des valeurs de T 1 peut être par exemple linéaire, soit en période, soit en fréquence, mais d'autres répartitions peuvent être envisagées.

La figure 7 résume le principe général de l'optimisation selon l'invention :

- étape référencée (1 )GET_[Sι,S no tι] : on détermine dans chaque bloc une donnée caractéristique S 1 relative à ce bloc et on reçoit des autres blocs les données caractéristiques correspondantes S k , c'est-à-dire un vecteur S notι de n-1 données correspondant à k = 1 a n sauf k=i. La donnée caractéristique dépend d'un paramètre variable a, relatif au bloc, ce paramètre pouvant être la période d'horloge T 1 du processeur du bloc ; la donnée caractéristique du bloc i et les données caractéristiques relatives aux autres blocs peuvent être par exemple les contributions à la consommation énergétique comme expliqué précédemment ; on pourrait envisager aussi que la donnée caractéristique transmise par les blocs à tous les autres blocs soit simplement la donnée variable a, elle-même, à charge pour chacun des blocs de calculer la contribution à la consommation énergétique des autres blocs à partir des différentes valeurs a k , mais on comprendra que cela accroîtrait beaucoup la charge de calcul de chacun des blocs. La donnée S, pour un bloc peut résulter d'un calcul dans le bloc (par exemple le calcul d'une contribution d'énergie) ou d'une mesure par un capteur (par exemple dans le cas où la donnée caractéristique est une température locale).

- étape référencée (2)CALC_Uι(a h Sι,S n otι) : à partir des différentes données S 1 , S noth le bloc de rang i calcule une fonction d'optimisation U^a 1 , S 1 , Snoti) qui dépend de la variable a, et des valeurs S,, S no tι-

- étape référencée (3)OPT(U,)[Ai] : on recherche la meilleure valeur de U, sur le champ Aj des valeurs possibles de a, et, comme expliqué plus haut, cette recherche peut porter à chaque étape uniquement sur les deux valeurs adjacentes à la valeur actuelle de a,. On obtient une nouvelle valeur a * du paramètre variable.

- et enfin, étape référencée (4)USE_ai * : on applique le nouveau paramètre a, * , par exemple une nouvelle fréquence de travail, au bloc de calcul de rang i.

La figure 8 décrit sous forme de bloc fonctionnel une organisation de bloc de calcul qui permet d'exécuter ce procédé d'optimisation. On suppose qu'il y a un seul processeur dans le bloc de calcul et on n'a pas représenté les autres éléments tels que mémoires ou périphériques qui peuvent être associés au processeur dans le bloc. On a seulement représenté le processeur PR 1 , les moyens de communication COM 1 permettant d'échanger les données S, et S not ι entre le processeur de rang i et les autres processeurs. Un élément CALC de calcul de la valeur de la fonction d'optimisation est représenté séparé du processeur mais il peut faire partie du processeur. Il reçoit les données S 1 et S not ι- La donnée S 1 peut provenir du processeur ou dans certains cas d'un capteur CAP_1 , voire même de plusieurs capteurs CAP_1 , CAP_2, etc. Les valeurs calculées de la fonction d'optimisation Uι(aι,Sι,S n otι) pour différentes valeurs de a, sont comparées dans un bloc de prise de décision DCS ; la valeur sélectionnée a * fournissant la meilleure valeur de fonction d'optimisation est exploitée dans un bloc d'utilisation USE ; ce bloc applique la valeur a, * au processeur, par exemple sous forme d'une nouvelle fréquence de travail f, mais peut aussi, dans certains cas, commander d'autres actions, telles que par exemple l'application au processeur d'une tension d'alimentation V 1 choisie en rapport avec le paramètre a * , par exemple dans le cas où on considère qu'une modification de fréquence d'horloge doit nécessairement être accompagnée d'une modification de tension d'alimentation.

La figure 9 représente schématiquement le fonctionnement d'une machine à états permettant d'exécuter la recherche d'une nouvelle valeur de paramètre variable a * à partir du calcul de trois valeurs de la fonction d'optimisation correspondant à la valeur actuelle de a, et à deux valeurs proches qui l'encadrent dans la série discrète des N valeurs possibles de ce paramètre. Sur cette figure 9 on voit sept registres numériques :

- R1 , R2, R3 pour stocker trois valeurs possibles de la fonction d'optimisation, respectivement les valeurs pour a,, a, " , et a, ++ , a, étant la valeur actuelle du paramètre variable, a, " étant la valeur immédiatement inférieure dans la série des N valeurs, et a, ++ étant la valeur immédiatement supérieure ;

- R4, R5, R6 pour stocker les adresses correspondantes p(a,), p(ar), p(a, ++ ) des valeurs du paramètre variable, les valeurs possibles du paramètre variable étant sont enregistrées dans une table adressable TAB ;

- R7 pour stocker l'adresse p(a * ) du nouveau paramètre variable a * choisi par le circuit de décision DCS et qui est soit p(a,), soit p(ar), soit P(a, ++ ). Un bloc de contrôle FSM gère les valeurs d'adresse à établir au cours du processus et applique ces adresses d'une part à la table TAB pour en extraire les valeurs du paramètre, et d'autre part aux registres R4, R5, R6, pour y enregistrer ces adresses.

La machine à états fonctionne selon quatre états : Etat E1 : le bloc FSM enregistre dans le registre R4 la valeur actuelle d'adresse p(a,) du paramètre variable(a l ), et commande l'envoi du paramètre correspondant a, de la table TAB vers le bloc de calcul de la fonction d'optimisation ; ce dernier enregistre le résultat du calcul U,(a,) dans le registre R1 ;

Etat 2 : à partir de la valeur actuelle a,, le bloc FSM génère l'adresse p(a, " ) de la valeur immédiatement inférieure et stocke cette valeur dans le registre R5 ; il extrait de la table TAB la valeur de paramètre correspondant a, " et l'envoie au bloc de calcul de la fonction d'optimisation ; le résultat du calcul U,(ar) est enregistré dans le registre R2 ;

Etat 3 : à partir de la valeur actuelle a,, le bloc FSM génère l'adresses p(a, ++ ) de la valeur immédiatement supérieure et stocke cette valeur dans le registre R6 ; il extrait de la table TAB la valeur de paramètre correspondant a, ++ et l'envoie au bloc de calcul de la fonction d'optimisation ; le résultat du calcul U ι (a, ++ ) est enregistré dans le registre R3 ;

Etat 4 : le bloc de prise de décision DCS lit les résultats stockés dans les registres R1 , R2, R3. Il compare le contenu de R1 et R2 ainsi que les contenus de R1 et R3 ; il enregistre dans R7 l'adresse contenue dans R5 si le résultat dans R2 est meilleur que le résultat dans R1 ; il enregistre dans R7 l'adresse contenue dans R6 si le résultat dans R3 est meilleur que le résultat dans R1 ; et enfin, il enregistre dans R7 (ou conserve dans R7) le résultat contenu dans R4 si le résultat dans R2 ou R3 n'est pas meilleur que le résultat dans R1.

Le résultat p(a * ) contenu finalement dans R7 est décodé par la table TAB pour transmettre la valeur a * au processeur pour qu'elle soit utilisée à la place de la valeur précédente a,.