Master RTS Calculer mieux pour consommer moins Introduction
Transcription
Master RTS Calculer mieux pour consommer moins Introduction
Master RTS Calculer mieux pour consommer moins Introduction Florent de Dinechin Systèmes de numération Un exemple: du nombre à la machine Conclusion par l’historique Florent de Dinechin, Socrate, CITI/INSA Lyon [email protected] Calculer mieux pour consommer moins 1 En fait on va parler d’arithmétique des ordinateurs Il s’agit d’étudier des systèmes de représentation des nombres (ou systèmes de numération). Un bon système de numération, c’est un système qui permet de bien calculer opérateurs. Mais qu’est-ce que “bien”? Cela dépend de la technologie utilisée. On va s’intéresser à l’arithmétique dans le contexte embarqué avec ses contraintes. Florent de Dinechin, Socrate, CITI/INSA Lyon [email protected] Calculer mieux pour consommer moins 2 Systèmes de numération Systèmes de numération Un exemple: du nombre à la machine Conclusion par l’historique Florent de Dinechin, Socrate, CITI/INSA Lyon [email protected] Calculer mieux pour consommer moins 3 Early number representations Neolithic: joint invention of the unary representation of integers, and non-volatile memory (calculus == pebble) Antiquity; invention of alphabetical systems (Roma, Egypt, Greece, China) position systems (Babylonia, India, Maya) Florent de Dinechin, Socrate, CITI/INSA Lyon [email protected] Calculer mieux pour consommer moins 4 D’après un haut relief de Saqqara en Egypte. Bec dans le vent, les oiseaux indiquent l’ordre de lecture, ici de droite à gauche. Les autres hiéroglyphes comptent les tributs payés à Pharaon après une campagne victorieuse. Chaque signe vaut : un pour la barre, 10 pour le fer à cheval, 100 pour le serpent, 1000 pour le lotus, 10 000 pour l’obélisque et 100 000 pour la salamandre. Les quatre nombres qui figurent ici s’écrivent donc, en décimal, 11 110 (haut gauche), 121 200 (haut droit), 111 200 (bas gauche) et 121 022 (bas droit). Jean Vuillemin, les langages numériques (dispo sur le web) Florent de Dinechin, Socrate, CITI/INSA Lyon [email protected] Calculer mieux pour consommer moins 5 Position systems Our decimal system is an example of position system: The position i of a digit gives its weight 10i Example: 789 = 7 · 102 + 8 · 101 + 9 · 100 With 3 decimal digits we represent from 000 to 999 = 103 − 1 In general, using n digits, we can represent integers in [0..10n − 1] First advantage of positions systems With 10 symbols only, we can represent arbitrarily large numbers... Florent de Dinechin, Socrate, CITI/INSA Lyon [email protected] Calculer mieux pour consommer moins 6 Position system in radix β For any β integer ≥ 2, If we have β symbols (which I will call β-ary digits) with n such digits, we represent the interval [0..β n − 1] dn−1 dn−2 ...d1 d0 represents n−1 X di β i i=0 Example: 789 = 7 · 102 + 8 · 101 + 9 · 100 β i is the weight of digit di . Babylonian system is a position system in base 60. Why 60? And why does our hour have 60 minutes? Florent de Dinechin, Socrate, CITI/INSA Lyon [email protected] Calculer mieux pour consommer moins 7 The Babylonian system Radix 60 needs to represent 60 different digits... 60 symbols? Digits represented in a two-symbol alphabetical system: = 1, = 10 YBC7289 from http://www.math.ubc.ca/~cass/euclid/ybc/ybc.html Florent de Dinechin, Socrate, CITI/INSA Lyon [email protected] Calculer mieux pour consommer moins 8 √ √ Une antisèche babylonienne donnant 2 et 1/ 2 en base 60. (on lit 30, autrement dit 1/2, sur le côté du carré, et sur la diagonale 1:24:51:10 et 42:25:35) Notation scientifique à exposant implicite Si je vous dis que j’ai enfants, cela peut signifier 3/60 enfants, ou 3 enfants, ou 3x60 enfants, ou... En général, le contexte aide à décider (merci la grande base) Florent de Dinechin, Socrate, CITI/INSA Lyon [email protected] Calculer mieux pour consommer moins 9 Babylonian digits 1 11 21 31 41 51 2 12 22 32 42 52 3 13 23 33 43 53 4 14 24 34 44 54 5 15 25 35 45 55 6 16 26 36 46 56 7 17 27 37 47 57 8 18 28 38 48 58 9 19 29 39 49 59 10 20 30 40 50 Taken from http://en.wikipedia.org/wiki/Babylonian_numerals Florent de Dinechin, Socrate, CITI/INSA Lyon [email protected] Calculer mieux pour consommer moins 10 Taking into account the limitations of the technology Our brain is able to distinguish at a glance 3 pebbles from 4, but not 7 pebbles from 8... On the other hand, it is good at recognizing shapes For this reason, Babylonians fixed the shape of the digits Florent de Dinechin, Socrate, CITI/INSA Lyon [email protected] Calculer mieux pour consommer moins 11 Taking into account the limitations of the technology Digital electronic technology is based on 2-value (Boolean) logic. Positive integers in the binary position system Radix β = 2 Two digits 0 and 1 Bit for “binary digit” With n bits we may represent numbers in [0..2n − 1] Florent de Dinechin, Socrate, CITI/INSA Lyon [email protected] Calculer mieux pour consommer moins 12 Fancy radix β representations So far our digit set was {0, β − 1} But any digit set including zero is OK. The Ñåòóíü ternary computer Built in 1958 by Moscow State University Radix 3, digit set {-1, 0, 1} instead of {0, 1, 2} 1111 1111 111 −40 ... ... = = 0001 -1 27 + 9 + 3 + 1 = 40 −27 − 9 − 3 − 1 = −40 0000 0 0001 1 n 0011 2 0010 3 0011 4 ... ... 1111 40 n n such trits provide [− 3 2−1 ... 3 2−1 ] As many integers (3n ) as with the standard digit set Other nice properties (rounding by truncation)... Florent de Dinechin, Socrate, CITI/INSA Lyon [email protected] Calculer mieux pour consommer moins 13 We will see more fancy radix β representations So far our digit set was n digits including zero. We may use more than β digits... The system then becomes redundant more than one way to represent some numbers example: radix 10, digits 7, 6...0, 1, ...7, 17 = 23 Studied by Cauchy (1840) for digits -5...5 motivation: reduce the amount of multiplication tables children have to learn (calculer mieux pour consommer moins) Algirdas A. Avižienis in the 1960s, for computers Florent de Dinechin, Socrate, CITI/INSA Lyon [email protected] Calculer mieux pour consommer moins 14 Stacking several number representations A very general technique: Alphabetical systems is built on top of the unary representation Babylonian is a position system with digits represented in an alphabetical system Same for Chinese abacus Your calculators use a decimal representation where each digit is represented in binary GMP multiple-precision library uses a radix-232 system where each digit is a 32-bit integer represented in radix 2 ... Rationale behind all this use, at each level, the representation that is adequate to this level Florent de Dinechin, Socrate, CITI/INSA Lyon [email protected] Calculer mieux pour consommer moins 15 What is a good number representation system? It is a system that 1. is well matched to the technology available 2. enables “good” representation of numbers 3. even more important, enables “good” algorithms for the arithmetic operations Try to design the multiplication algorithm for Roman numerals... Very few basic techniques of number representations but many parameters each and they can be stacked on top of each other Chosing the best one is technology driven we’ll have to study a bit of digital technology for embedded systems software and hardware Florent de Dinechin, Socrate, CITI/INSA Lyon [email protected] Calculer mieux pour consommer moins 16 Un exemple: du nombre à la machine Systèmes de numération Un exemple: du nombre à la machine Conclusion par l’historique Florent de Dinechin, Socrate, CITI/INSA Lyon [email protected] Calculer mieux pour consommer moins 17 Un système de représentation : numération simple de position On appelle base (radix) un entier β supérieur ou égal à 2. Un chiffre (digit) est un entier compris entre 0 et β − 1. La séquence de chiffres xn−1 ...x0 représente l’entier X = n−1 X β i xi i=0 On appelle poids (weight) les puissances de la base. Exemple : “Aux zéros de poids fort près, cette représentation est unique” Florent de Dinechin, Socrate, CITI/INSA Lyon [email protected] Calculer mieux pour consommer moins 18 Une opération : l’addition C’est comme on fait à la main (abaissons un étudiant de Master à aller faire une addition au tableau) mais on peut l’exprimer de manière plus compliquée: Soit la fonction table d’addition en base β : TA : {0, 1} × {0..β − 1}2 → {0..1} × {0..β − 1} (r , x, y ) 7→ (r 0 , s) tq βr 0 + s = r + x + y En francais, cette fonction prend une “retenue entrante” (0 ou 1) et deux chiffres en base β, et retourne leur somme ; Cette somme est comprise entre 0 et 2β − 1. Elle s’écrit donc en base β sur deux chiffres : I I Le chiffre de poids faible de la somme est appelé somme modulo la base ou juste somme Le chiffre de poids fort de la somme est appelé retenue et vaut 0 ou 1 quelle que soit la base. Florent de Dinechin, Socrate, CITI/INSA Lyon [email protected] Calculer mieux pour consommer moins 19 Une opération : l’addition Soit la fonction table d’addition TA : {0, 1} × {0..β − 1} × {0..β − 1} → {0..1} × {0..β − 1} (r , x, y ) 7→ (r 0 , s) tq βr 0 + s = r + x + y L’algorithme d’addition de deux nombres de n chiffres est alors 1: c0 = 0 2: for i = 0 to n − 1 do 3: (ci+1 , si ) = TA(ci , xi , yi ) 4: end for Florent de Dinechin, Socrate, CITI/INSA Lyon [email protected] Calculer mieux pour consommer moins 20 Des opérateurs matériels pour l’addition Quelle que soit la techno, il suffit de dérouler l’algorithme précédente pour obtenir un additionneur : cn xn−1 yn−1 x1 y1 x0 y0 TA TA TA sn−1 s1 s0 c0 = 0 Les flèches indiquent une transmission d’information (dépendance de donnée) : l’algorithme est intrinsèquement séquentiel, et le temps de calcul sera au mieux linéaire en le nombre de chiffres. Florent de Dinechin, Socrate, CITI/INSA Lyon [email protected] Calculer mieux pour consommer moins 21 Opérateur 1 : le boulier base 10 fonction TA: addition en unaire des chiffres modulo la base et propagation de retenue effectués par l’opérateur Deux techiques pour contourner une limitation du cerveau des corbeaux. Florent de Dinechin, Socrate, CITI/INSA Lyon [email protected] Calculer mieux pour consommer moins 22 Opérateur 2 : la machine de Schickard / Pascal base 10 fonction TA (y compris le calcul du modulo) : addition unaire sur les disques propagation de retenue automatique : chez Schickard, une dent entraı̂ne la roue suivante. Inconvénient? : 99999 + 1 Solution ? chez Pascal, un système de poids ou de ressorts régénère le signal. Florent de Dinechin, Socrate, CITI/INSA Lyon [email protected] Calculer mieux pour consommer moins 23 La machine de Pascal (détail de la fonction TA) Florent de Dinechin, Socrate, CITI/INSA Lyon [email protected] Calculer mieux pour consommer moins 24 Opérateur 3 : L’additionneur binaire pas cher La fonction TA est implémentée par la cellule Full Adder : x c’ y c FA s Remarque : en binaire et rien qu’en binaire, cette cellule est fonctionnellement symétrique en ses trois entrées. cn xn−1 yn−1 x1 y1 x0 y0 FA FA FA sn−1 s1 s0 c0 = 0 Calculer mieuxde pourretenue, consommer moins Cet additionneur s’appelle additionneur à propagation ou Florent de Dinechin, Socrate, CITI/INSA Lyon [email protected] 25 Opérateur 4 : la calculette électronique de poche Elle fonctionne le plus souvent en décimal codé en binaire (BCD) : base 10 chaque chiffre est lui-même codé en base 2 sur 4 bits la fonction TA est construite autour d’un additionneur binaire 4 bits xn−1 yn−1 4 cn 4 x1 y1 4 4 x0 y0 4 4 DA DA DA 4 4 4 sn−1 s1 c0 = 0 s0 (cela vous rappelle quelquechose?) Florent de Dinechin, Socrate, CITI/INSA Lyon [email protected] Calculer mieux pour consommer moins 26 Opérateur 5 : l’addition GMP (GNU Multiple Precision), utilisé dans SSH entre autres. utilise l’algo précédent un chiffre = un entier machine autrement dit, base 216 , 232 ou 264 la fonction TA utilise les opérateurs matériels du processeur (pas le add mais le adc) Florent de Dinechin, Socrate, CITI/INSA Lyon [email protected] Calculer mieux pour consommer moins 27 Opérateur 6 : L’avenir du futur nanotechnologique ? Le chiffre d en base β représenté par d électrons dans un condensateur La fonction TA: vider un condensateur dans l’autre, (pour la retenue je ne me souviens plus) ... Florent de Dinechin, Socrate, CITI/INSA Lyon [email protected] Calculer mieux pour consommer moins 28 Moralité Lien entre arithmétique (mathématique) et algorithmique : Un système de représentation des nombres (paramétré par β) + un algo + plein de technologies = plein d’opérateurs (fonction de β et de la techno) Techno électronique −→ binaire pour les couches basses mais par dessus on verra d’autres systèmes de représentation des nombres. Un bon système de représentation permet de bien calculer Par exemple le nôtre est pas génial (séquentialité de la propagation de retenue) Compromis et LCE Exemple: (Lois de Conservation des Emmerdements) grande base −→ moins de propagations de retenues mais TA plus compliquée Florent de Dinechin, Socrate, CITI/INSA Lyon [email protected] Calculer mieux pour consommer moins 29 Et maintenant, changeons de système de représentation Propagation de retenue −→ temps d’addition en o(n) En bricolant, on arrivera à o(log n) Je vais vous montrer comment faire l’addition en o(1) Florent de Dinechin, Socrate, CITI/INSA Lyon [email protected] Calculer mieux pour consommer moins 30 Une petite escroquerie pour commencer Voici un nouveau système de représentation des nombres: Un nombre entier X peut être représenté par une séquence de couples (ci , si ) ∈ {0, 1}2 tels que n−1 X X = 2i (ci + si ) i=0 Cette représentation n’est plus unique. Et alors? Cela s’appelle un codage redondant On sait passer de cette représentation à la représentation standard. Comment ? Construisons un additionneur qui prend deux nombres en binaire normal, et renvoie sont résultat dans ce système de numération... Florent de Dinechin, Socrate, CITI/INSA Lyon [email protected] Calculer mieux pour consommer moins 31 Mon premier additionneur parallèle (espace intentionnellement laissé vide) Cette représentation s’appelle carry-save, ou représentation à retenue conservée. Florent de Dinechin, Socrate, CITI/INSA Lyon [email protected] Calculer mieux pour consommer moins 32 Maintenant, recyclons notre full adder Voici un additionneur qui prend un nombre en carry-save et un nombre en binaire normal, et rend son résultat en carry-save xn−1 yn−1 zn−1 x1 y1 z1 x0 y0 z0 FA cn sn−1 cn−1 c2 Florent de Dinechin, Socrate, CITI/INSA Lyon [email protected] FA FA s1 c1 s0 c0 c0 = 0 Calculer mieux pour consommer moins 33 Amoralité Ce n’était pas une escroquerie: Si vous avez plein de nombres en binaires à additionner, conservez votre somme partielle en carry-save. Toutes vos additions intermédiares seront parallèles. (mais bon, le résultat sera en carry-save...) Si vous le voulez en binaire normal, il faut faire une addition à propagation de retenue tout de même. Utilité : les multiplieurs, les diviseurs, plein de filtres... On verra tout cela. Florent de Dinechin, Socrate, CITI/INSA Lyon [email protected] Calculer mieux pour consommer moins 34 Moralité Changer de représentation nous a permis de changer de classe de complexité. R TM , J’avais inventé le boulier à retenue conservée mais les Chinois m’ont grillé de 3000 ans. Autre exemple: la règle à calcul Représentation logarithmique des réels Multiplication en temps linéaire au lieu de quadratique Florent de Dinechin, Socrate, CITI/INSA Lyon [email protected] Calculer mieux pour consommer moins 35 Des questions ? Au fait, ne croyez pas qu’on en a fini avec l’additionneur... Florent de Dinechin, Socrate, CITI/INSA Lyon [email protected] Calculer mieux pour consommer moins 36 Conclusion par l’historique Systèmes de numération Un exemple: du nombre à la machine Conclusion par l’historique Florent de Dinechin, Socrate, CITI/INSA Lyon [email protected] Calculer mieux pour consommer moins 37 Les systèmes de numération néolithique Invention du système de numération unaire, de l’addition et de la soustraction antiquité Systèmes de numération plus évolués : systèmes alphabétiques (Égypte, Grèce, Chine) systèmes à position en base 10 (Égypte, Inde, Chine), en base 20 (Mayas), en base 60 (Sumer, Babylone), ... 1623 Francis Bacon décrit le codage des nombres dans le système binaire 1679 Gottfried Wilhelm Leibniz écrit De Progressione Dyadica, sur l’arithmétique binaire 1854 George Boole publie sur la logique mathématique Florent de Dinechin, Socrate, CITI/INSA Lyon [email protected] Calculer mieux pour consommer moins 38 Préhistoire des calculateurs -1000 Invention de la calculette de poche en Chine 1500 Leonardo Da Vinci dessine une calculette mais ne la construit pas. 1623 Wilhelm Schickhard décrit puis construit la première calculette mécanique à 4 opérations 1645 Blaise Pascal l’améliore (regénération du signal), en construit 50 et en vend 15 1673 Gottfried Wilhelm Leibniz ajoute une manivelle pour multiplications et additions 1822 Charles Babbage se lance dans sa difference engine, qui sert à calculer des polynômes 1822 Il laisse tomber car il a une meilleur idée, l’analytical engine, programmable par cartes perforées. 1880 Premières machines à calculer clavier + imprimante Florent de Dinechin, Socrate, CITI/INSA Lyon [email protected] Calculer mieux pour consommer moins 39 Histoire des calculateurs 1936 Konrad Zuse construit le premier calculateur binaire (à relais) 1937 John V. Atanasoff a l’idée d’utiliser le binaire pour des calculateurs. 1941 Le Z3 de Zuse est le premier calculateur universel programmable complet 1400 relais 64 mots de mémoire arithmétique binaire en virgule flottante sur 22 bits programmation par ruban perforé de 8 bits addition en 50ms, multiplication et division en 3s 1946 L’ENIAC est le premier calculateur électronique, mais à part cela c’est un boulier. 1985 Norme IEEE-754 pour la virgule flottante 2013 Ouverture de ce cours Florent de Dinechin, Socrate, CITI/INSA Lyon [email protected] Calculer mieux pour consommer moins 40 Reconstruction de la Zuse Z1 Florent de Dinechin, Socrate, CITI/INSA Lyon [email protected] Calculer mieux pour consommer moins 41