Conservatoire national des arts et métiers
Architectures des systèmes informatiques
CHAPITRE 8
Complexité, Puissance et Variabilité
Année 2002-2003

Try to imagine studying physics without a measure of length other than «Object A looks larger than Object B» or studying chemistry without a measure of temperature better than «The reaction vessel became very hot». Without absolute metrics, sciences remain in a state of infancy. That is the state that computer science has been in.
        John Gustafson, Laboratoire Ames, département américain de l'énergie.
Essayez d'imaginer l'étude de la physique sans autre mesure de la longueur que «L'objet A semble plus long que l'objet B» ou l'étude de la chimie sans une mesure de la température meilleure que «Le réacteur est devenu très chaud». Sans métriques les sciences restent en enfance. C'est l'état de l'informatique.

8.0 INTRODUCTION

Nous utilisons ici les trois mots complexité, puissance et variabilité dans leur sens commun et non dans les sens savants qui seraient algorithmique pour le premier, physique pour le second et génétique pour le troisième.

Complexe : «Qui contient, qui réunit plusieurs éléments différents. Couramment: difficile à cause de sa complication.» (Littré). Puissance : «Caractère de ce qui peut beaucoup, de ce qui produit de grands effets. Virtualité, possibilité.» (Littré). Variabilité : «Caractère de ce qui est variable.» (Littré).Variable : «Qui est susceptible de se modifier, de changer souvent au cours d'une durée. Qui prend, peut prendre plusieurs valeurs distinctes. Qui prend plusieurs valeurs, plusieurs aspects, selon les cas individuels, ou selon les circonstances.» (Littré).

Ce chapitre contient :
un aperçu sur la complexité d'un système informatique;
un examen de ce que l'on peut nommer puissance d'un système informatique et les évaluations que l'on fait des unités centrales;
quelques techniques d'évaluation des performances;
un aperçu de l'influence du logiciel sur les performances;
la conclusion du chapitre;
une note sur la variabilité.

8.1. LA COMPLEXITÉ D'UN SYSTÈME INFORMATIQUE

A distinguishing characteristic of computer science is the enormous gap that exists between the simple instruction sets of our computers and the complexity of useful software. This dichotomy produces intellectual challenges of the highest order. Today many important applications contains several million lines of code, too many for one person to read in a year and impossible for one person to fully understand. VLSI chips are now being manufactured containing more than one hundred million transistors, again posing an almost impossible problem for human comprehension.

                                                        John Savage, Professeur à l'université de Providence, 1996

Un caractère remarquable de l'informatique est le fossé immense qu'il y a entre la simplicité des jeux d'instructions et la complexité des logiciels ordinaires. Cet écart engendre des défis intellectuels de la plus haute nature. Aujourd'hui, beaucoup de logiciels importants contiennent plusieurs millions de lignes de code, beaucoup trop pour qu'un individu puisse seulement les lire en une année et impossibles à être vraiment compris par une personne. Les puces de circuits intégrés vont contenir plus de cent millions de transistors, elles poseront elles aussi un problème impossible pour la compréhension humaine.

John Savage compare l'état des logiciels à celui du jeu d'instructions, et s'étonne de leur écart. Cet écart n'est pas plus grand, mutatis mutandis que celui qu'il y a entre l'œuvre de Balzac et le lexiques des mots de sa langue. Il y a également un fossé considérable entre la simplicité des jeux d'instructions, surtout celui des machines RISC, et la complexité architecturale des processeurs que l'on a vue dans les chapitres précédents.

Cette complexité tient autant au nombre de composants qu'à la difficulté induite par leur organisation et par leur fonctionnement en l'absence de lois générales et de règles de construction ou d'agrégation.

Cette complexité a pour origine le nombre de composants et le nombre d'états distincts que le tout peut avoir.

De telles possibilités ne sont pas directement maîtrisables en raison de nos limites perceptives et intellectuelles et de l'absence déjà citée d'une ou de quelques lois qui en régiraient l'organisation.L'objet même de l'informatique, en plus de les concevoir, est de commander le fonctionnement de tels systèmes de façon nécessairement simple sous la forme de jeux de commandes connues du producteur ou de l'utilisateur. De plus, on doit respecter la contrainte de conservation de la généralité du système, c'est-à-dire sa capacité à traiter tout problème relevant de la classe des fonctions calculables. On doit également lui conserver sa «puissance», et pour cela ne pas dégrader les performances en termes de délais de réponse et de capacités de stockage au delà d'un certain raisonnable.

La complexité des algorithmes fait l'objet de très nombreuses études.
La complexité d'un programme ou d'un algorithme est abordée très brièvement plus loin.
La complexité d'un système informatique n'a pas fait l'objet de travaux aboutissant à des conclusions utilisables, à notre connaissance.

8.2 LA PUISSANCE D'UN SYSTÈME INFORMATIQUE

8.2.1 Puissance intrinsèque et puissance effective

Ici aussi, puissance a son sens banal : ce que «peut» faire la machine en cause; ce qu'elle contient en puissance avant de le manifester en actes. Cette puissance n'a aucun rapport avec la puissance définie en mécanique, en électricité et dans les autres domaines de la physique où l'on dispose de lois de conservation sous la forme d'équations de bilan avec leurs dimensions, leurs règles de composition et de calcul. Alors qu'il existe en mécanique des seuils minimaux pour vaincre un frottement ou la composante due à la pesanteur pour mouvoir une charge, il n'y a pas de tels seuils en informatique (sauf à avoir une alimentation électrique insuffisante). Ces points sont plus longuement développés dans la conclusion du cours.

Tout ordinateur, pourvu qu'il possède des caractéristiques minimales (n'importe quelle machine existante les a en surabondance) peut résoudre tout problème relevant de la classe des fonctions calculables. Mais la théorie, non seulement ne dit pas le temps nécessaire à leur exécution, mais n'aborde aucune considération de temps hors le fait de distinguer s'il est fini ou infini. Le temps nécessaire est fonction aussi bien de la complexité de l'algorithme de résolution du problème, du choix pertinent d'un langage et de son traducteur, de la qualité de l'expression sous la forme d'un programme, que des caractéristiques physiques architecturales et d'organisation de l'ordinateur d'exécution. C'est pourquoi nous sommes amenés à définir et à distinguer :

La PUISSANCE INTRINSÈQUE, c'est-à-dire la capacité à exécuter un algorithme. Elle est infinie au sens où tout algorithme bien conçu résolvant un problème calculable et bien exprimé dans un langage adéquat, sera exécuté sur n'importe quel ordinateur en un temps fini, pourvu que l'universelle capacité de celui-ci n'ait pas été masquée.

Les PUISSANCES EFFECTIVES, que l'on doit plutôt nommer PERFORMANCES relèvent des :

On distinguera en plus, comme dans un pipeline : Nous avons vu dans le chapitre 2 que :a) au sens de leur puissance intrinsèque, les ordinateurs sont tous équivalents;
b) la théorie qui fonde cette capacité aboutit à la constitution d'une classe d'équivalence,avec deux conséquences :
a) une garantie parfaite et définitive sur le champ d'utilisation des ordinateurs;
b) l'impossibilité d'utiliser la théorie fondatrice pour faire des choix de structure ou d'architecture ou encore pour mesurer une quelconque efficacité.
Une théorie achevée fonde la puissance intrinsèque parfaite et universelle.
Elle ne peut apporter aucune lumière en matière de puissance effective.

C'est donc par des voies extérieures que doit être construit un discours et que doivent être établies des méthodes, des techniques, des procédés et des outils en matière d'architectures d'ordinateurs.

En ce domaine, tout va être accumulation d'inventions, d'expériences, de recettes et de tours de main avec deux conséquences ici aussi :

Commençons par les mesures de temps qui ne supposent rien sur la nature ou la qualité de ce qui sera mesuré. Revenons sur la distinction entre ces deux mesures en prenant une analogie dans le transport.
Véhicule Vitesse en 
km/h
Nombre 
de passagers
Débit 
en passagerxkm/h
voiture de sport
200
2
400
autocar
90
60
5400
train de banlieue
60
600
36000

On peut définir deux mesures partielles :

On définit enfin la rapidité comme mesure relative.Rapidité relative. On dit qu'une machine X est n% plus rapide qu'une machine Y. Cette rapidité relative est définie en termes de temps d'exécution Tx et Ty. On peut utiliser les performances Px et Py définies comme les inverses des temps d'exécution. Une machine X est n% plus rapide qu'une machine Y quand :

Si Y est plus rapide que X, n est négatif.

On doit dire alors en toute rigueur que Y est -n% plus rapide que X.

C'est une abus que de dire n% plus puissante au lieu de n% plus rapide.

8.2.2 De l'augmentation des performances ou la loi d'Amdahl

Pour augmenter la performance globale d'un système, il faut augmenter la performance d'un ou de plusieurs de ses composants.

Certains composants sont plus fréquemment utilisés que d'autres. Il paraît donc raisonnable de consacrer la dépense possible à améliorer les composants les plus utilisés plutôt que ceux qui le sont moins. Notons toutefois que la notion de composant le plus ou le moins utilisé dépend de la nature du travail. On l'a vu il y a très longtemps déjà quand dans les années 50, on a rendu simultanées les opérations d'entrées et sorties des machines consacrées à la gestion. À l'opposé, on n'achètera pas une machine pour le motif qu'elle a une unité de virgule flottante câblée, alors que les travaux à faire sont la comptabilité et la paye.

La loi d'Amdahl définit l'augmentation de la performance que l'on peut attendre d'une amélioration du système.

Utilisons les conventions suivantes :

.T est le temps d'exécution d'un programme sur le système d'origine.
.Ta est le temps d'exécution du même programme sur le système amélioré.
.f est la fraction du temps T concernée par l'amélioration.
.Ac est l'accélération obtenue par l'amélioration.

L'accélération obtenue est alors :

La loi d'Amdahl dit que la limite de l'accélération est :

Répétons qu'il s'agit d'une accélération qui est relative au travail défini au préalable. Ce n'est pas un absolu attaché au système informatique lui même.Ces considérations sont applicables au matériel comme au logiciel. Ici, leur distinctions n'est pas significative.

Exemple d'application :
Supposons que pour un programme rédigé en langage donné, le pourcentage du temps passé à faire du calcul vectoriel soit de 70%. Supposons de plus que la rédaction de cette partie en assembleur rende son exécution deux fois plus rapide, les calculs seraient les mêmes pour un câblage qui rendrait l'exécution deux fois plus rapide.

et à la limite :

Introduction du coût

Considérons des systèmes Si dont les coûts respectifs sont Ci.
Considérons des programmes Pj.
Considérons le temps d'exécution Tji du programme Pj sur la machine Si.
Le rapport coût à performance du programme Pj sur la machine Si est

Une valeur plus grande de CiTji signifie

Exemple de deux systèmes C1 de coût 6000 F et C2 de coût 14000 Fet deux programmes P1 s'exécutant en 25 s sur C1 et 10 s sur C2, P2 s'exécutant en 40 s sur P1 et 12 s sur P2 :
 
Système
Coût
T1i (s)
CiTj1
Tj2
CiT2i
S1
6000
2,5
15000
4,0
24000
S2
14000
1,0
14000
1,2
16800

8.2.3 Les évaluations des unités centrales

Les nombres de base sont relatifs :

.le temps de cycle de l'horloge Th, c'est-à-dire le nombre de secondes par cycle. Il est l'inverse de la fréquence d'horloge Fh, nombre de cycles par seconde..le nombre de cycles par instruction CPI, nombre moyen de cycles d'horloge de l'UC, nécessaire pour exécuter une instruction. Si l'on réalise une partition dans le jeu d'instructions, on pourra noter CPIi le nombre moyen de cycles de l'UC nécessaires pour exécuter une instruction de type i. .le nombre de cycles pour un programme C, nombre de cycles d'horloge consommés en UC par le programme..le nombre d'instructions du programme I, nombre d'instructions exécutées par le programme. Si l'on réalise une partition dans le jeu d'instructions, on pourra noter Ii le nombre d'instructions de type i exécutées par le programme.

CPI = C/I et s'il y a partition :

CPI = {S(CPIixIi)}/I = S (CPIi x Ii/I), les sommes sont de i = 1 à n.

Le nombre de cycles pour le programme est alors :

C = S CPIixIi
CPI dépend d'autres composants du système, tels que la mémoire et les caches, il ne peut pas être calculé à partir des tables de cycles par instruction. Le faire aboutit à des évaluations optimistes. Il faut le faire à partir de mesures.Le temps total d'UC peut être calculé par :
T = IxCPIxTh = IxCPI/Fh

qui montre l'importance de ces trois facteurs interdépendants sur lesquels on raisonne trop souvent séparément.

Avec la partition du jeu d'instructions, on écrit :

T = S (CPIixIi)xTh

On ne peut pas modifier isolément CPI, I ou Th,
Th dépend au moins du matériel et de son organisation,
CPI dépend du jeu d'instructions, du matériel et du compilateur,
I dépend au moins du jeu d'instructions et du compilateur.
ATTENTION :
 
 


Ces évaluations ne valent que dans des conditions précises :
  • programme unique;
  • compilé avec un compilateur déterminé;
  • processeur et système d'exploitation identifiés.
Toute généralisation conduit à des conclusions fausses.

Exemple d'évaluation :

Dans une UC nommée A, le branchement se fait par le positionnement d'une condition en une instruction, le test et le branchement lui-même sont faits en une autre instruction. Le branchement demande ainsi deux cycles. Toutes les autres instructions demandent un cycle. Dans un programme 20% des instructions sont de tels branchements et 20% sont des placements de conditions. Le temps de cycle de A est 25% plus rapide que le temps de cycle d'une autre unité centrale nommée B qui fait le positionnement de la condition et le branchement en une seule instruction. Cette instruction demande deux cycles, toutes les autres se font en un cycle. Quelle est l'UC la plus rapide ?

Calculons :

CPI(A) = S CPIixIi/I = 0,2x2 + 0,2x1 + 0,6x1 = 1,20

T(A) = 1,2xI(A)xTh(A)

Comme l'unité centrale B ne demande pas de positionnement de condition, il y a 20 % d'instructions en moins, 25% (20/80) sont des branchements qui demandent 2 cycles.

CPI(B) = S CPIixIi/I = 0,25x2 +0,75x1 = 1,25

T(B) = (0,8xI(A))x1,25x(1,25xTh(A))

T(B)/T(A) = (1,25x1,25x0,8)/1,2 = 1,04
A est donc 4% plus rapide que B.

Supposons que l'on puisse modifier le temps de cycle d'horloge de B, de combien faut-il le modifier pour que B et A aient la même performance dans ces conditions ? Soit X cette modification :

T(B) = (0,8xI(A))x1,25x(XxTh(A)) or, on veut que T(A) = T(B)

donc 1,2 = 0,8x1,25xX et X = 1,2

Questionnaire

Conservatoire national des arts et métiers
Architectures des systèmes informatiques
CHAPITRE 8
Complexité, Puissance et Variabilité
Année 2002-2003