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