Le temps d'exécution d'un programme
Pour un programme compilé donné qui s'exécute sur une machine donnée A, les paramètres suivants sont fournis :
- Le nombre moyen de CPI
- Le nombre total d'instructions du programme
- La période de l'horloge ou durée d'un cycle de la machine A.
Comment peut-on mesurer la performance de cette machine exécutant ce programme ? Intuitivement, la machine est réputée rapide ou meilleure en exécutant ce programme si le temps total d'exécution est court. Cependant, l'inverse de ce temps total d'exécution est une mesure métrique possible ou mesurable : Performance (A) = 1 / temps total d'exécution de la machine A.
Comparer les performances en utilisant le temps total d'exécution
Pour comparer les performances de deux machines A et B exécutant un programme donné :
- Performance (A) = 1 / temps total d'exécution de la machine A
- Performance (B) = 1 / temps total d'exécution de la machine B.
La machine A est n fois plus rapide que la machine B signifie :
n = Performance (A) / Performance (B) = (temps total d'exécution de la machine B) / (temps total d'exécution de la machine A).
Par exemple, pour un programme donné :
- temps total d'exécution de la machine A = 1 seconde
- temps total d'exécution de la machine B = 10 secondes
Performance (A) / Performance (B)= 10 / 1 = 10
La performance de la machine A est 10 fois la performance de la machine B quand elle exécute ce programme ; la machine A est dite 10 fois plus rapide que la machine B. Le temps total d'exécution. L'équation du CPU.
Un programme est une ensemble d'instructions,I, mesuré en instruction / programme. L'instruction moyenne donne un nombre de cycle moyen par instruction mesuré en cycle / instruction ou CPI. Le CPU a une fréquence d'horloge fixe dont la période C = 1/ fréquence d'horloge mesuré en second / cycle.
Le temps d'exécution du CPU est le produit de ces trois paramètres tel que : Le Temp CPU = le nombre de seconde / programme = instruction / programme * en cycle / instruction * second / cycle
T = I * CPI *C
Par exemple, pour un programme s'exécutant sur une machine donnée avec les paramètres suivants : L'ensemble d'instruction du programme : 10 000 000 instructions un nombre de cycle moyen par instruction : 2.5 cycles / instruction Fréquence d'horloge du CPU : 200 Mhz. = 1/ 5* 10 e -9
Quel est le temps d'exécution pour ce programme ?
Le Temp CPU = instruction / programme * en cycle / instruction * seconde / cycle
Le Temp CPU = instruction / programme * en cycle / instruction * seconde / cycle = 10 00 00 * 2.5 * 5 * 10 e -9 = .125 secondes.
En conclusion, en augmentant la fréquence du CPU , donc en diminuant la durée d'un cycle, on diminue la durée d'exécution d'un programme. La fréquence n'est pas la puissance
L'overclocking suffit-il à garantir une machine plus rapide ? La fréquence est-elle la puissance ? Les facteurs affectant les performances du CPU sont les facteurs affectant le temps d'exécution.
Le Temp CPU = instruction / programme * en cycle / instruction * seconde / cycle ce qui donne T = I * CPI *C
Dans ce tableau , les facteurs affectant I,CPI,C
- I est affecté par le programme,compilateur et l'architecture
- CPI est affecté par le jeux d'instruction du CPU et l'architecture
- C ou la fréquence est affectée par le jeux d'instruction du CPU,l',architecture et la technologie
Performance comparée de deux CPU sur le même programme.
L'architecture du CPU est le facteur le plus important pour le CPI, il détermine le CPI. Une classe d'instructions est un ensemble d'instructions ayant le même CPI. La machine A possède le jeu d'instructions réparti dans ces trois classes tel que:
(Classe d'instruction,CPI)(A,1),(B,2),(C,3)
La machine B possède le jeu d'instruction réparti dans ces trois classes tel que :
(Classe d'instruction,CPI)(A,2),(B,2)(C,3)
La machine A possède des registres de 64 bits et la machine B de 32 bits. Les mêmes opérations utilisant la classe A nécessitent par exemple le double d'accès de la part de la machine B en utilisant sa propre classe A.
- La machine A prend C(A) secondes par cycle soit une fréquence de F(A) = 1/C(A).
- La machine B prend C(B) secondes par cycle soit une fréquence de F(B) = 1/C(B).
Après compilation c'est-à-dire après la traduction du programme à partir des jeux d'instructions respectifs des machines A et B on obtient par exemple: Programme compilé pour la machine A
(Classe d'instructions,nombre d'instructions) (A,5),(B,1),C,1)
Programme compilé pour la machine B
Classe d'instruction,nombre d'instructions) (A,5),(B,1),C,1)
Les compilateurs pour la machine A et B génèrent ici le même nombre d'instructions par classe. Il s'agit d'un P4 et d'un AMD 64 qui utilisent pour notre exemple les mêmes jeux d'instructions pour notre exemple (SSE2, MMX, SSE3, etc ).
Le nombre de cycles nécessaire à l'exécution du programme sur la machine A est N(A) qui vaut : 5*1 + 1*2+1*3 = 10 millions de cycles.
Le nombre de cycles nécessaire à l'exécution du programme sur la machine B est N(B) qui vaut : 5*2 + 1*2+1*3 = 15 millions de cycles.
- Pour que la machine A soit aussi rapide que la machine B il faut que les temps d'exécution de la machine A et de la machine B pour ce programme soit égaux donc :
N(A) \times C(A) = N(B) \times C(B) \frac { N(A)} {F(A)} = \frac {N(B)} { F(B)} donc F(B) =\frac { N(B) \times F(A)} { N(A)} . F(B) = 15/10 \times F(A)= 1.5 F(A).
La machine B sera aussi rapide que la machine A POUR CE PROGRAMME si sa fréquence d'horloge est 1.5 fois plus rapide.
L'overclocking améliore donc les performances d'une machine mais les choix architecturaux tel que le type de processeur ont plus d'impact. Le surfréquençage et la loi de G. Amdahl
Voici quelques exemples d'améliorations du traitement d'un programme par l'optimisation de l'affectation des ressources, améliorer les accès mémoires, surfréquençage inutile du CPU sur un programme de gestion de bases de données. Nous utiliserons les recherches de G Amdahl en très simplifiées pour justifier notre démarche d'un point de vue théorique. Référence bibliographique Gene Amdahl, Validity of the Single Processor Approach to Achieving Large-Scale Computing Capabilities, AFIPS Conference Proceedings, (50), pp 483-485, 1967. Il est un des pères des architectures des mainframes IBM, Amdahl, Hitachi.
L'augmentation des performances possibles par une amélioration de la conception est limitée par l'utilisation totale de cette amélioration. Autrement dit, une amélioration non utilisée n'améliore pas les performances.
L'accélération A de l'exécution d'un programme A est égale au Temps d'exécution sans A / Temps d'exécution avec A.
C'est la loi de Amdahl. Supposons que cette accélération A affecte une fraction F du temps d'exécution du programme par un facteur S et que le reste du temps ne soit pas affecté. Le temps d'exécution avec A =((1-f)+f/s) * temps d'exécution sans A
A = Temps d'exécution sans A / Temps d'exécution avec A A = Temps d'exécution sans A / (((1-f)+f/s) * temps d'exécution sans A) A =1 / ((1-f)+f/s)
Par exemple . Si nous avons les classes d'instructions suivantes pour un CPU donné.
(Classe d'instruction,CPI),(A,3)(B,4)(C,5)
La classe A représente des instructions de l'ALU qui n'accèdent pas à la mémoire. La classe B représente des instructions d'accès à la mémoire, lecture écriture. La classe C représente des instructions de branchement.
Si nous avons pour chaque classe la fréquence d'utilisation des ces instructions dans un programme donné:
(Classe d'instruction,fréquence d'utilisation) (A,10%),(B,20%),(C,70%)
Chaque classe représente un % du temps d'exécution total de ce programme : Fréquence d'utilisation * CPI / somme (des fréquences de chaque classe * CPI de chaque classe) 0.3 + 0.8 + 3.5 = 4.6 est le CPI du programme de durée 100.
Classe d'instructions
- A : 0.10 * 3 = 0.3 soit 0.3 / 4.6 = 6.52 %
- B : 0.20 * 4 = 0.8 soit 10.8/4.6 = 7.4 %
- C : 0.70 * 5 =3.5 soit 3.5/4.6 =76 %
Si notre accélération consiste à mettre le double canal sur la mémoire ,ce qui réduira par 2 les temps d'accès à la mémoire, nous avons le CPI de la classe B qui passe de 4 à 2, le facteur d'amélioration du CPI est de 2.: La fraction F affectée est :7.4 % ou .074 c'est la classe B La fraction non affecté est 6.52%+76% = 92.6% ou .926 ceux sont la classe A et C La loi de Amdahl nous donne : 1/((1-F) + F/S) soit 1/ (0.926+.074/2) = 1.04
Le double canal nous donne une amélioration de 5 % sur ce programme.
Un autre exemple d'application : si nous doublons le FSB d'un CPU pour un autre programme.
(Classe d'instruction,Temps d'exécution d'une instruction)(A,3),(B,4)(C,50)
La classe A représente des instructions de l'ALU qui n'accèdent pas à la mémoire. La classe B représente des instructions d'accès à la mémoire, lecture écriture. La classe C représente des instructions d'accès au disque dur.
Si nous avons pour chaque classe la fréquence d'utilisation des ces instructions dans un programme donné:
(Classe d'instructions,fréquence d'utilisation) (A,10%),(B,20%),(C,70%)
Ceci est un exemple de programme d'accès à une base de données :
Chaque classe représente un % du temps d'exécution total de ce programme : Fréquence d'utilisation * CPI / somme (des fréquences de chaque classe * CPI de chaque classe) 0.3 + 0.8 + 35 = 36.1 le temps du programme.
Classe d'instruction
- A : 0.10 * 3 = 0.3 soit 0.3 / 36.1 = 0.83 %
- B : 0.20 * 4 = 0.8 soit 0.8/36.1 = 2.2 %
- C : 0.70 * 50 =35 soit 3.5/36.1 =96 %
En doublant le FSB la fraction de programme impactée est 0.0083+0.022 =0.0303, le facteur S , d'amélioration est de 2. La fraction non impactée est 0.9697. La loi de Amdahl indique que l'amélioration est 1/(0.967+0.0303/2)=1.018
Pour ce programme d'accès à des base de données , doubler le FSB améliore les performance de 1%. C'est normal, les accès disque représente 096 % du temps d'exécution et il ne sont pas améliorés.
Si nous divisons par 2 la durée des accès au disque avec un RAID 0, disque rapide et grand cache par exemple nous avons un facteur S d'amélioration de 2. La fraction impactée est 0.9697, la fraction non impactée est 0.0083+0.022 =0.0303 La loi de Amdahl indique que l'amélioration est 1/(0.967/2+0.0303)=1.946
Pour ce programme d'accès à des base de données , diviser la durée des accès au disque par 2 améliore les performance de 94%.
En conclusion, le choix de l'optimisation dépend de ce que l'on veut améliorer. L'overclocking est bien adaptée au programmes gourmands en calculs comme les jeux. Mesurer le surfréquençage du C.P.U Mesurer le surfréquençage du C.P.U. avec SuperPi de l'université de Tokyo (voir superpipeline).
Présentation de SuperPi est supprimé
Les deux points cités par le professeur Yasumasa Kanada, la puissance de calcul et la taille de la mémoire sont souvent crucials pour le surfréquençage. Le surcadençage du CPU et la diminution des temps de latences sont des axes exploités. A ce jour, un ordinateur de bureau dans le meilleur des cas met de 30 à 33 secondes sur le calcul de Pi à 1 M de décimales.
Voici un autre type d'évaluation des performances des ordinateurs :
L'Université de Cambridge utilise d'autres types de mesure mais qui ressemblent à Superpi. https://www.hpcf.cam.ac.uk/history.html La mesure globale de la performance d'un Pc surcadencé avec 3DMark 2005 de la société Futuremark
Devant les nombreux paramètres intervenant dans la mesure d'un Pc avant et après le surfréquençage, il existe des produits permettant de mesurer les éventuelles améliorations d'une optimisation, 3dmark en fait partie. Il offre une vision synthétique sur les performances graphiques et CPU.