07/09/2012
1
Programmation efficace :
un peu d’architecture
A. Théorie de la complexité, élimination de Gauβ
B. Pipeline, SIMD, Prédication
C. Hiérarchie mémoire, niveaux de cache, Multiplication de matrices
D. Notion de processus, SMP, Hyperthreading
A. Théorie de la complexité
• Méthodologie pour analyser la complexité de calcul des algorithmes
– Complexité en temps (ou en nombre d’opérations)
– Complexité en mémoire (espace de stockage nécessaire)
• Complexité exprimée comme fonction de la taille du paramètre
d’entrée
• Complexité d’un problème : complexité de l’algorithme permettant de
résoudre l’instance la plus difficile
• Classification :
– Problèmes solubles (en temps polynomial) : classe P
– Problèmes difficiles (solubles en temps exponentiels ) : classe NP
– Problèmes indécidables
Ordres de grandeur
• Taille d’un entier n : tn=log2(n)bits n = O( exp( tn) )
– 128 bits = 39 chiffres, 512 bits = 155 chiffres, 1024 bits = 309 chiffres
• Vitesse des ordinateurs
– 1 GHz = 10-9 secondes
– Lumière du projecteur à la salle : 3m à 300000 km/s = 10-8 s
– Ce portable fait donc 30 additions le temps que la lumière arrive du projecteur !
• Age de l’univers : 15 milliards * 365 * 24 * 3600 ≈5.1017 s
• Nombre d’électrons dans l’univers : 1061 * 1011 * 1012 ≈1084
• Complexité d’un algorithme pour des nombres de 128 bits
– tn= 128 opérations, tn2= 16384 ops, tn3= 2.106 ops, tn4= 3.108 ops
– n = 1039 opérations 2 millions de fois l’age de l’univers sur un million de PC à
1GHz
Complexité asymptotique
• S(n) = nombre de mots mémoire
nécessaires à l’implantation de l’algorithme
– Trier n “int”, S(n)=n
– Trier des noms de 20 caractères ASCII sur
machine 32bits, S(n)=5n
• T(n) = nombre d’opérations nécessaires à
l’exécution de l’algorithme
• Équivalence asymtotique
– f(n) = O( g(n) ) ssi ∃N, k tels que
–∀n>N, f(n) ≤k g(n) et g(n) ≤k f(n)
– 5x²+3x+1 = O ( x² + 700 ) = O (x²)