FR 2989797 A1 20131025 FR 1253755 A 20120424 REDUCTION DE LA CONSOMMATION ELECTRIQUE D'UNE MATRICE DE PROCESSEURS Domaine technique de l'invention L'invention est relative aux circuits intégrant une matrice de processeurs ou éléments de traitement semblables, et plus particulièrement à des techniques permettant de réduire la consommation électrique d'une telle matrice. État de la technique Les articles [1 : Vadim Gutnik, Anantha P. Chandrakasan, "Embedded Power Supply for Low-Power DSP", IEEE Transactions On Very Large Scale Integration (VLSI) Systems, VOL. 5, NO. 4, December 1997] et [2: Benton H. Calhoun, Anantha Chandrakasan, "Ultra-Dynamic Voltage Scaling Using Sub-threshold Operation and Local Voltage Dithering in 90nm CMOS", 2005 IEEE International Solid-State Circuits Conference] étudient l'efficacité de la technique appelée DVFS, de l'anglais « Dynamic Voltage-Frequency Scaling » (adaptation dynamique tension-fréquence). Cette technique consiste, lorsque la puissance d'un processeur est supérieure à celle requise pour terminer une tâche dans un délai imparti, à réduire la fréquence d'horloge du processeur dans une proportion qui permet de terminer la tâche juste dans le délai imparti. La réduction de fréquence est accompagnée d'une réduction aussi importante que possible de la tension d'alimentation du processeur. Les articles susmentionnés montrent que l'on peut ainsi atteindre une économie importante d'énergie, de l'ordre de 30% à 50%, par rapport à la situation où la tâche est exécutée à fréquence et tension d'alimentation nominales, puis en coupant l'horloge entre la fin de la tâche et la fin du délai imparti. En outre, ces articles montrent que l'on peut approcher très près de cette économie d'énergie en n'utilisant que deux points de fonctionnement tension/fréquence, et en oscillant entre ces deux points de manière à obtenir la fréquence moyenne nécessaire à terminer la tâche dans le délai imparti (« Voltage Dithering »). Ceci est montré notamment par les courbes de la figure 16.5.2 de l'article [2]. Lorsque toutes les fréquences moyennes sont susceptibles d'être utilisées, la fréquence basse optimum est proche de la moitié de la fréquence maximum. La fréquence basse peut être choisie à une autre valeur si l'on restreint la plage de fréquences moyennes que les tâches peuvent utiliser. Dans un système où il n'y a pas de contraintes de temps-réel, on ajuste la paire fréquence/tension en fonction de la charge instantanée du processeur, qui est un paramètre facile à mesurer. Dans les systèmes temps-réel, qui imposent de terminer des traitements à des échéances, on utilise des techniques plus complexes. La demande de brevet US 2008-0209238 décrit un exemple de technique utilisée dans un système temps-réel, basée sur la technique du DVFS. Le principe général est de faire durer un traitement le plus longtemps possible dans les limites de la durée impartie, de sorte à pouvoir utiliser la fréquence la plus basse (associée à la tension la plus basse) le plus longtemps possible. Plus spécifiquement, on tente de répartir le nombre total de cycles pris par le traitement en plusieurs phases, chacune associée à une paire fréquence-tension différente, de sorte que la somme des phases corresponde le mieux possible, par défaut, à la durée impartie. La difficulté réside dans la détermination du nombre de cycles, qui n'est pas connu à l'avance et qui peut varier dans de grandes proportions d'une passe à l'autre du même traitement. Ainsi, la demande de brevet susmentionnée prévoit de construire un histogramme de nombres de cycles probables par phase à partir de mesures effectuées sur les passes précédentes du traitement. Un tel système est complexe et n'est pas adapté à un système multiprocesseur. En effet, dans un système multiprocesseur, un même processeur peut, à chaque passe d'un même 20 traitement, exécuter une partie différente du traitement - il est alors difficile de dresser un historique de nombre de cycles pour le traitement. La figure 1 représente schématiquement un circuit multiprocesseur, tel que décrit dans la demande de brevet US 2011-0093854, sur lequel on est susceptible d'exécuter des traitements temps-réel. Il comprend une matrice de 4x4 éléments CL semblables 25 interconnectés par un réseau sur puce. Comme cela est représenté pour la deuxième rangée et la deuxième colonne, le réseau sur puce peut être de topologie en « tore replié ». Des interfaces d'entrée/sortie, non représentées, sont également insérées dans le réseau sur puce. Chaque élément CL est en fait une « grappe » de processeurs. La figure 2 représente un exemple de structure d'une telle grappe. La grappe comprend 30 16 processeurs PE semblables connectés à un bus commun B. Le bus B est également relié à une mémoire RAM partagée par les processeurs, à un circuit de gestion de la grappe MGR, et à un routeur RTR. Le routeur RTR assure les communications entre la grappe et le réseau sur puce par quatre voies, N, E, S et W, correspondant aux quatre directions possibles dans la matrice. Le routeur RTR assure également une fonction de noeud du réseau pour relayer des données en transit non destinées à la grappe. Pour exécuter un traitement sur un tel circuit, on prévoit une allocation mixte des ressources, c'est-à-dire une combinaison d'allocation statique et d'allocation 5 dynamique. Le traitement est subdivisé en tâches élémentaires pouvant être exécutées en parallèle. Les tâches sont réparties en groupes de tâches ayant un fort taux d'interdépendance. Les groupes sont répartis de manière fixe sur des grappes respectives du circuit - les grappes sont ainsi allouées de manière statique aux groupes de tâches. 10 Ces opérations, dites de placement-routage, sont réalisées par la chaine de compilation à partir d'un code source décrivant les différentes tâches et leurs dépendances (c'est-à-dire les conditions nécessaires à leur exécution, par exemple la disponibilité de données produites par une ou plusieurs autres tâches). Le « placement » consiste au groupement des tâches en fonction des ressources disponibles dans les grappes et à l'affectation des 15 groupes aux grappes, et le « routage » consiste à établir les chemins de communication entre grappes dans le réseau sur puce. Le routage est également statique, calculé à l'avance pour optimiser la bande passante du réseau sur puce en fonction des débits requis entre les grappes. Par contre, à l'intérieur d'une grappe, les processeurs sont alloués de manière 20 dynamique aux tâches. L'allocation des processeurs est mise en oeuvre par le circuit de gestion MGR de la grappe. Ce circuit de gestion est notamment prévu pour gérer une file de « tâches prêtes », dans laquelle les processeurs oisifs viennent chercher des tâches à exécuter. Ainsi, des occurrences successives d'une même tâche peuvent être exécutées par des processeurs différents. 25 Résumé de l'invention On souhaite prévoir une technique permettant de réaliser des économies de consommation électrique dans un système multiprocesseur temps-réel à allocation mixte des ressources. On tend à satisfaire ce besoin en prévoyant un procédé d'exécution d'un traitement sur 30 un processeur, comprenant les étapes consistant à exécuter une première partie du traitement pendant une première phase d'exécution en cadençant le processeur à une première fréquence d'horloge ; exécuter une deuxième partie du traitement pendant une deuxième phase d'exécution en cadençant le processeur à une deuxième fréquence d'horloge distincte de la première ; et définir les longueurs des première et deuxième phases pour faire tendre la durée d'exécution du traitement vers une durée impartie. A la compilation du code source du traitement, le traitement est subdivisé en tâches élémentaires dont chacune est exécutable en plusieurs occurrences de plusieurs cycles d'horloge ; des première et deuxième phases d'exécution sont affectées à chaque tâche ; et les longueurs des phases d'exécution sont définies en nombres d'occurrences de tâche. Selon un mode de mise en oeuvre, le rapport entre le nombre d'occurrences de la 10 première phase d'exécution et le nombre d'occurrences de la deuxième phase d'exécution est le même pour toutes les tâches. Selon un mode de mise en oeuvre, le procédé comprend les étapes suivantes à l'exécution du traitement : - associer un compteur d'occurrences à chaque tâche, et un compte seuil 15 indicatif de la transition de la première phase d'exécution à la deuxième ; - à l'initialisation de l'exécution d'une nouvelle occurrence d'une tâche, comparer le contenu du compteur associé au compte seuil et : - si le contenu est inférieur au compte seuil, cadencer le processeur à la première fréquence d'horloge, 20 - sinon cadencer le processeur à la deuxième fréquence d'horloge ; - exécuter l'occurrence de la tâche sur le processeur ; et - incrémenter le compteur. Selon un mode de mise en oeuvre, le procédé comprend les étapes suivantes à la fin de l'exécution d'une passe courante du traitement : 25 - mesurer la durée d'exécution de la passe courante ; - corriger les nombres d'occurrences des première et deuxième phases d'exécution pour réduire l'écart entre la durée mesurée et la durée impartie ; et - appliquer les phases d'exécution corrigées à une nouvelle passe du traitement. Selon un mode de mise en oeuvre, le procédé comprend les étapes suivantes : - à la compilation, définir les phases d'exécution en tenant compte de conditions de fonctionnement de référence du processeur ; - à l'exécution, évaluer les conditions de fonctionnement réelles du processeur ; et - si les conditions de fonctionnement réelles sont plus favorables que les conditions de référence, augmenter la fréquence d'horloge et diminuer corrélativement le nombre d'occurrences de la phase d'exécution ayant la fréquence d'horloge la plus élevée. Selon un mode de mise en oeuvre, si les conditions de fonctionnement réelles sont moins favorables que les conditions de référence, on diminue la fréquence d'horloge et on augmente corrélativement le nombre d'occurrences de la phase d'exécution ayant la fréquence d'horloge la plus élevée. Le procédé peut être mis en en oeuvre dans un circuit multiprocesseur, dans lequel des 15 occurrences d'une même tâche sont exécutables sur des processeurs différents selon une allocation dynamique des processeurs. Description sommaire des dessins Des modes de réalisation seront exposés dans la description suivante, faite à titre non limitatif en relation avec les figures jointes parmi lesquelles : 20 - les figures 1 et 2, précédemment décrites, représentent une architecture classique de circuit multiprocesseur à allocation mixte des ressources ; - la figure 3 représente schématiquement et partiellement un réseau d'horloge et d'alimentation permettant d'effectuer du « voltage hopping » par processeur dans une grappe du type de la figure 2 ; 25 - la figure 4 est un chronogramme illustrant un exemple de mise en oeuvre d'un procédé visant à réduire la consommation électrique dans une grappe du type de la figure 3 ; et - la figure 5 représente un mode de réalisation de circuit d'assistance permettant d'optimiser la consommation électrique en fonction des conditions de 30 fonctionnement de la grappe. Description d'un mode de réalisation préféré de l'invention La figure 3 représente schématiquement et partiellement une grappe CL du type de la figure 2, modifiée pour pouvoir mettre en oeuvre une économie d'énergie par la technique du « voltage hopping ». Chaque processeur PE de la grappe est muni de deux commutateurs SL et SH permettant de connecter l'une de deux lignes d'alimentation, VddL et VddH, à la borne d'alimentation Vdd du processeur. Les lignes VddL et VddH sont communes à la grappe et même à tout le circuit. La ligne VddH véhicule une tension d'alimentation « haute », correspondant à la tension d'alimentation nominale du circuit. La ligne VddL véhicule une tension d'alimentation plus basse. Par ailleurs, la fréquence d'horloge interne CKi de chaque processeur est fournie par un diviseur de fréquence programmable DIV à partir d'une ligne d'horloge CK commune à la grappe et au circuit. Les commutateurs S et les diviseurs DIV sont commandés, par exemple, par un logiciel système exécuté sur le circuit MGR de gestion de la grappe, ou exécuté de manière répartie entre le circuit MGR et les processeurs PE. Puisque le circuit de gestion MGR est programmé pour gérer l'allocation des processeurs aux tâches, il a une connaissance des tâches en cours d'exécution dans les processeurs. En mode normal, de puissance de calcul maximale, le diviseur DIV d'un processeur est configuré pour fournir la fréquence d'horloge fH la plus élevée - son taux de division est 20 de 1, par exemple. Le commutateur SH est fermé pour appliquer la tension d'alimentation haute VddH au processeur. En mode basse consommation, le commutateur SL est fermé pour appliquer la tension d'alimentation basse VddH au processeur. Le diviseur DIV est configuré pour fournir une fréquence d'horloge basse fL, adaptée au niveau plus bas de la tension 25 d'alimentation du processeur. Comme chaque processeur est ainsi muni d'un dispositif de « voltage hopping », on cherche à rendre ce dispositif le plus simple possible. De préférence, comme cela est représenté, on ne prévoit que deux paires tension-fréquence. Alors, la fréquence basse fL est de préférence choisie à la moitiée de la fréquence haute fH. La tension basse est 30 choisie en conséquence. On souhaite maintenant mettre en oeuvre sur un tel système une technique de « voltage dithering » pendant l'exécution d'un traitement temps-réel, qui soit applicable sans connaissance préalable de la répartition des tâches sur les processeurs de la grappe. Comme on l'a précédemment indiqué, la technique du « voltage dithering » consiste à faire tendre la durée du traitement vers la durée impartie, de sorte à pouvoir utiliser la fréquence la plus basse le plus longtemps possible, et profiter de l'économie d'énergie procurée par l'utilisation de la tension d'alimentation la plus basse. Selon les techniques classiques, cela nécessite une connaissance approximative du nombre de cycles d'horloge pris par le traitement, et l'assurance que l'ensemble du traitement soit exécuté sur le même processeur. Cela n'est pas envisageable dans un système multiprocesseur à allocation dynamique des processeurs, comme dans le cas de la grappe de la figure 3. Pour contourner ce souci, dans le cadre d'une architecture à allocation mixte des ressources, on exploite le fait qu'un traitement soit subdivisé, lors de la phase de compilation, dans une multitude de tâches élémentaires pouvant être exécutées en parallèle. En pratique chaque tâche est prévue pour être exécutée plusieurs fois, avec des données différentes à chaque fois. On parlera plutôt d'exécution d'occurrences d'une même tâche. Une occurrence d'une tâche peut être exécutée par n'importe quel processeur de la grappe, mais elle est exécutée en totalité par le même processeur. Une tâche est dite terminée lorsque toutes ses occurrences ont été exécutées. Dans ce cadre, les contraintes de temps réel restent définies sur le traitement dans sa globalité. On ne prévoit pas de contraintes sur la durée d'exécution des tâches, pourvu qu'elles soient terminées avant la durée impartie au traitement. A titre d'exemple, le traitement peut être le décodage d'une image d'un flux vidéo. Le décodage du flux est fait en plusieurs passes du traitement, une passe par image. Le décodage de chaque image doit être terminé au moment où l'image doit être affichée. Ainsi, on dispose de 33 ms pour décoder chaque image pour un flux vidéo à 30 images par seconde. Une des nombreuses tâches élémentaires dans le décodage d'une image peut être la transformée cosinus discrète inverse (iDCT) à appliquer à chaque macrobloc. Une image « full HD» comporte 8100 macroblocs de 16x16 pixels, correspondant à 8100 occurrences à exécuter de la tâche iDCT. Dans le cadre de l'exemple de la figure 3, à deux paires tension-fréquence, on tente de définir deux phases d'exécution pour chaque processeur, l'une à fréquence élevée fH, et l'autre à fréquence basse fL. Plutôt que d'associer les phases au traitement complet, on les associe à chaque tâche. En outre, au lieu de définir la longueur des phases en cycles d'horloge, on les définit en nombres d'occurrences de la tâche. Par exemple, si une tâche comprend N occurrences, la première phase d'exécution peut être définie comme ayant une longueur de n occurrences (n La figure 4 est un chronogramme illustrant cette propriété dans le cadre d'un exemple. Un processeur PE de la grappe exécute des occurrences de deux tâches. On note par T,O, la j-ème occurrence de la i-ème tâche. A chaque tâche T, est associé un compteur d'occurrences CT' mis à jour par le logiciel système. Un compteur CT est incrémenté à chaque exécution d'une nouvelle occurrence, indépendamment du processeur sur laquelle elle est exécutée. Le processeur PE exécute consécutivement les trois premières occurrences de la tâche T1. Le compteur CT, est incrémenté de 0 à 3. Suit l'exécution des deux premières occurrences de la tâche T2. Le compteur CT, reste à 3, tandis que le compteur CT2 est incrémenté de 0 à 2. Comme on l'a représenté, les occurrences de la tâche T2 peuvent être de longueur différente (en nombre de cycles) que les occurrences de la tâche T1. On a représenté, par souci de simplification, des occurrences de longueur constante pour une même tâche, bien que cela ne soit pas vrai en pratique. Suivent des exécutions d'occurrences des tâches Ti et T2, alternant de manière quelconque, leurs nombres étant reflétés par les compteurs CT, et CT2. A un moment donné, on exécute la n-ième occurrence de la tâche T1. Il s'agit de la dernière occurrence de la première phase d'exécution de la tâche T1. Ainsi, dès que la (n+1)-ième occurrence de la tâche Ti est initiée, le logiciel système bascule la paire fréquence-tension F/V du processeur, ici sur la valeur de tension basse. Cette valeur basse est choisie pour toute nouvelle occurrence de la tâche T1, jusqu'à ce que la tâche soit terminée. La tâche Ti est la première à atteindre sa deuxième phase d'exécution, d'où il résulte que la paire F/V était à sa valeur de tension haute depuis le début. Une m-ième occurrence de la tâche T2 est initiée après la (n+2)-ième occurrence de la tâche T1. La tâche T2 n'a pas encore atteint sa deuxième phase d'exécution, d'où il résulte que le circuit de gestion MGR rebascule la paire fréquence/tension F/V sur la valeur de tension haute. Ainsi, tant que la tâche T2 n'a pas atteint sa deuxième phase d'exécution, toute alternance d'occurrences des tâches Ti et T2 provoquera des alternances correspondantes des paires F/V appliquées au processeur. Les paires F/V peuvent être amenées à basculer à chaque occurrence d'une tâche - cela n'est pas gênant, car une occurrence prend plusieurs centaines de cycles d'horloge, voire plusieurs milliers de cycles, suffisamment pour permettre la stabilisation des conditions de fonctionnement après une commutation de tension. Dans un système classique où les phases d'exécution sont définies en nombres de cycles, il n'est pas envisageable de commuter la paire F/V à chaque cycle. Bien que la figure 4 représente l'activité sur un seul processeur, on comprend aisément que les occurrences de chacune des tâches T1 et T2 peuvent être exécutées sur des processeurs distincts. A chaque initiation d'une occurrence sur un processeur quelconque, le logiciel système choisit pour le processeur la paire F/V dictée par l'état atteint par le compteur d'occurrences CT de la tâche. Les phases d'exécution définies pour une tâche « suivent » ainsi les occurrences de la tâche d'un processeur à l'autre. Le logiciel système peut être subdivisé en une partie qui tourne sur le circuit de gestion MGR et une partie qui tourne sur les processeurs PE. C'est alors la partie tournant sur le processeur concerné qui choisit la paire F/V. La tâche pourrait elle-même gérer son compteur d'occurrences - les lignes de code pour ce faire seraient insérées automatiquement dans la tâche par le compilateur. La tâche ferait appel à une fonction de la partie du logiciel système tournant sur le processeur pour commander le diviseur de fréquence et le commutateur d'alimentation. La définition des tâches au moment de la compilation est telle que le nombre d'occurrences de chaque tâche est connu. On peut ainsi définir de façon formelle des phases d'exécution en nombres d'occurrences. Cependant, le nombre de cycles par occurrence n'est pas connu de manière précise, puisqu'il est la plupart du temps variable de manière dynamique en fonction de la nature des données en cours de traitement par la tâche. En règle générale, on définit les phases d'exécution par rapport à une référence, c' est-àdire la durée moyenne ou maximale d'exécution du traitement par rapport à la durée impartie. La durée maximale peut être calculée en nombre de cycles d'horloge en considérant les conditions pire-cas pour chaque tâche. Mais cela est peu réaliste - il vaut mieux utiliser une durée moyenne reflétant des conditions réelles, le cas échéant augmentée d'une marge de sécurité. La durée moyenne, en nombre de cycles, peut être établie par un profilage réalisé sur des résultats de simulation. On simule un enchaînement de traitements sur des échantillons représentatifs d'un cas réel. Le profilage peut bien entendu être effectué sur un circuit réel. En théorie, on peut profiler chaque tâche pour déterminer sa durée de référence, et ainsi ajuster les phases d'exécution tâche par tâche, mais cela est trop complexe à gérer et n'apporte pas d'améliorations sensibles. On préfère utiliser le même rapport cyclique entre phases d'exécution pour toutes les tâches, ou le même rapport entre le nombre d'occurrences de la première phase et le nombre d'occurrences de la deuxième phase, sachant que les tâches n'ont pas forcément le même nombre d'occurrences. Dans ces conditions, on définit une fréquence moyenne fM à laquelle le processeur doit fonctionner pour que la durée du traitement coïncide avec la durée impartie Tmax. La durée du traitement a été déterminée par profilage, en nombre moyen de cycles 10 d'horloge Nref. fM = Nref/Tma'. Si Ni est le nombre d'occurrences d'une tâche Ti, le nombre d'occurrences ni de la phase à la fréquence haute fH s'exprime par : n1= Ni(fm - fL)/(fH - fL), 15 où fL est la fréquence basse. Cette valeur est de préférence augmentée d'une marge de sécurité pour tenir compte de traitements dans des conditions exceptionnelles qui nécessiteraient plus de cycles que la valeur Nref. Selon une variante sécuritaire, on peut prendre pour Nref la valeur maximale trouvée lors du profilage. Les valeurs n ainsi déterminées à la compilation seront intégrées comme paramètres 20 dans le programme à exécuter sur le circuit de gestion MGR, où elles pourront être comparées aux contenus des compteurs d'occurrences CT. En cours d'exécution, on peut prévoir un ajustement dynamique des nombres n. A chaque fois qu'une passe du traitement se termine, on mesure le rapport entre la durée effective d'exécution de la passe et le temps imparti : On calcule les nouvelles 25 valeurs n selon la formule ci-dessus en remplaçant fM par fm-t/Tmax. Les nouvelles valeurs sont opérationnelles dès la passe suivante du traitement. La figure 5 représente un mode de réalisation de circuit d'assistance permettant d'optimiser la consommation électrique en fonction des conditions de fonctionnement de la grappe. 30 Une matrice de processeurs du type des figures 1 et 2 comprend plusieurs centaines de processeurs, 256 dans l'exemple. Le circuit résultant est particulièrement grand, et il est très probable que différentes zones du circuit n'offrent pas les mêmes conditions de fonctionnement aux processeurs, notamment du fait de variations liées au procédé de fabrication (on peut trouver, par exemple, des variations des tensions seuil des transistors d'une zone à l'autre, affectant notablement les performances des processeurs). On trouve ainsi des zones où les processeurs sont dans des conditions optimales et des zones où les processeurs sont dans des conditions moins bonnes. La fréquence d'horloge CK, commune à tout le circuit, est adaptée, par exemple, aux processeurs fonctionnant dans des conditions moyennes, ou nominales. Dans ce contexte, une grappe située dans une zone optimale peut permettre de réaliser des économies d'énergie supplémentaires, à l'aide des éléments représentés en figure 5. En effet, un processeur situé dans une zone favorable pourra tourner à une fréquence supérieure à la fréquence nominale, sans pour autant avoir besoin d'une tension d'alimentation plus élevée. Ainsi, en augmentant la fréquence du processeur, on peut reporter des occurrences de la phase d'exécution à tension haute vers la phase d'exécution à tension basse, et ainsi diminuer la consommation électrique. Dans la situation inverse, un processeur situé dans une zone défavorable ne pourra pas tourner à une fréquence aussi élevée que la fréquence nominale. Pour que le processeur puisse finir la tâche dans le temps imparti, on reportera des occurrences de la phase d'exécution à tension basse vers la phase d'exécution à tension haute. Par contre, si la fréquence d'horloge commune CK est par conception adaptée aux conditions pire-cas au lieu des conditions nominales, il n'y aura pas de situation où on aura besoin d'abaisser la fréquence du processeur, si ce n'est dans le cas où les conditions redeviendraient défavorables après avoir été temporairement favorables, par exemple après un abaissement temporaire de la température, auquel cas on reviendrait à la fréquence de l'horloge CK. Dans la grappe CL de la figure 5, on prévoit un dispositif indicateur des conditions locales de fonctionnement. Il s'agit par exemple d'un oscillateur 50 comprenant des inverseurs connectés en anneau. Un tel oscillateur oscille d'autant plus rapidement que ses transistors fonctionnent dans des conditions favorables. L'oscillateur tient compte également de la température locale. La fréquence de l'oscillateur 50 est mesurée, par exemple en comptant le nombre de cycles de l'oscillateur dans une période du signal d'horloge CK. Cela peut être réalisé à l'aide d'une porte ET 52 recevant la sortie de l'oscillateur 50 et le signal d'horloge CK divisé par 2. La sortie de la porte 52 incrémente un compteur CNT. Le signal d'horloge CK est fourni aux diviseurs de fréquence DIV des processeurs PE par l'intermédiaire d'une boucle à verrouillage de fréquence FLL, permettant de multiplier la fréquence d'horloge par un facteur programmable fractionnaire, typiquement compris entre 0,5 et 2, dans la situation où la fréquence d'horloge CK est choisie adaptée à des conditions de fonctionnement nominales des processeurs. Une telle boucle est similaire à une boucle à verrouillage de phase, mais elle est de structure plus simple du fait qu'elle n'assure pas une synchronisation de phase. Le logiciel système compare la fréquence de l'oscillateur 50 à des valeurs tabulées dans une mémoire, indiquant la fréquence maximale FPE des processeurs PE en fonction de la fréquence Fos, de l'oscillateur 50. La mémoire peut être une mémoire morte (ROM) ou bien la mémoire vive RANI chargée à la mise sous tension, par exemple à partir d'une mémoire Flash contenant le programme. Ainsi, le logiciel système détermine le taux multiplicateur à appliquer à la boucle à verrouillage de fréquence FLL, et diminue corrélativement les nombres d'occurrences n, des phases d'exécution à fréquence haute des tâches. Les procédés décrits ici sont particulièrement bien adaptés à un système multiprocesseur, mais, comme le montre la figure 4, ils s'appliquent aussi bien à un système multitâche à processeur unique. REVENDICATIONS1. Procédé d'exécution d'un traitement sur un processeur (PE), comprenant les étapes suivantes : - exécuter une première partie du traitement pendant une première phase d'exécution en cadençant le processeur à une première fréquence d'horloge ; - exécuter une deuxième partie du traitement pendant une deuxième phase d'exécution en cadençant le processeur à une deuxième fréquence d'horloge distincte de la première ; et - définir les longueurs des première et deuxième phases pour faire tendre la durée d'exécution du traitement vers une durée impartie (Tmax) ; caractérisé en ce qu'il comprend les étapes suivantes à la compilation du code source du traitement : - subdiviser le traitement en tâches élémentaires (Ti) dont chacune est exécutable en plusieurs occurrences (0j) de plusieurs cycles d'horloge ; - affecter des première et deuxième phases d'exécution à chaque tâche ; et - définir les longueurs des phases d'exécution en nombres d'occurrences (n, N-n) de tâche. 2. Procédé selon la revendication 1, dans lequel le rapport entre le nombre d'occurrences de la première phase d'exécution et le nombre d'occurrences de la deuxième phase d'exécution est le même pour toutes les tâches. 3. Procédé selon la revendication 1, comprenant les étapes suivantes à l'exécution du traitement : - associer un compteur d'occurrences (CT) à chaque tâche, et un compte seuil (n) indicatif de la transition de la première phase d'exécution à la deuxième ; - à l'initialisation de l'exécution d'une nouvelle occurrence d'une tâche, comparer le contenu du compteur associé au compte seuil et : - si le contenu est inférieur au compte seuil, cadencer le processeur à la première fréquence d'horloge,- sinon cadencer le processeur à la deuxième fréquence d'horloge ; - exécuter l'occurrence de la tâche sur le processeur ; et - incrémenter le compteur. 4. Procédé selon la revendication 1, comprenant les étapes suivantes à la fin de l'exécution d'une passe courante du traitement : - mesurer la durée d'exécution de la passe courante ; - corriger les nombres d'occurrences (n, N-n) des première et deuxième phases d'exécution pour réduire l'écart entre la durée mesurée et la durée impartie ; et - appliquer les phases d'exécution corrigées à une nouvelle passe du traitement. 10 5. Procédé selon la revendication 1, comprenant les étapes suivantes : - à la compilation, définir les phases d'exécution en tenant compte de conditions de fonctionnement de référence du processeur ; - à l'exécution, évaluer les conditions de fonctionnement réelles du processeur ; et 15 - si les conditions de fonctionnement réelles sont plus favorables que les conditions de référence, augmenter la fréquence d'horloge et diminuer corrélativement le nombre d'occurrences de la phase d'exécution ayant la fréquence d'horloge la plus élevée. 6. Procédé selon la revendication 5, dans lequel, si les conditions de fonctionnement 20 réelles sont moins favorables que les conditions de référence, on diminue la fréquence d'horloge et on augmente corrélativement le nombre d'occurrences de la phase d'exécution ayant la fréquence d'horloge la plus élevée. 7. Procédé selon la revendication 1, mis en en oeuvre dans un circuit multiprocesseur, dans lequel des occurrences d'une même tâche sont exécutables sur des processeurs 25 différents selon une allocation dynamique des processeurs.