PC8 - Départements

publicité
École polytechnique
Promotion 2012
Majeure informatique
Cours de conception et analyse d'algorithmes
TD 8 Algorithmes on-line
19 novembre 2013
1. Gestion de mémoire (Pâle 2011)
On considère un modèle de mémoire dans lequel on peut consulter les données non seulement en mémoire centrale, mais aussi directement dans la mémoire externe : les données sont
découpées en pages, la consultation d'une page en mémoire centrale est gratuite, celle d'une
page en mémoire externe à un coût unitaire et le chargement d'une page en mémoire centrale
coûte
D
fois le coût d'une consultation. Nous nous intéressons à la conception d'un gestion-
naire de mémoire qui décide au fur et à mesure de l'arrivée des requêtes s'il vaut la peine de
charger la page demandée en mémoire ou pas.
On se concentre ici sur le cas où le découpage en pages des données est calibré sur la taille
de la mémoire centrale : il y a à tout moment une unique page en mémoire centrale, toutes
les autres sont en mémoire externe.
p
c(p). Au départ tous les
L'algorithme de gestion de la mémoire centrale que nous étudions associe à chaque page
(qu'elle soit en mémoire externe ou en mémoire centrale) un compteur
compteurs sont mis à zéro, puis le gestionnaire de mémoire eectue les opérations suivantes
en boucle :
a.
Réceptionner la prochaine requête
b.
Incrémenter le compteur
c.
Si
c(p) = D
p.
c(p).
alors
p en
c(p) > 0
Charger la page
Tant que
mémoire centrale si elle n'y est pas déjà,
Réceptionner la prochaine requête
Décrémenter le compteur
d.
Retourner en
c(p)
q
chaque fois que
q 6= p.
a.
La réception des requêtes est bloquante : lorsqu'il n'y pas de requête à traiter le gestionnaire
de mémoire attend. Remarquer que durant la boucle interne Tant que... les compteurs
pour
q 6= p
c(q)
sont bloqués.
1. Compléter l'évolution des compteurs pour
s = (s1 , s2 , . . .)
i
si
c(1)
c(4)
c(6)
1
1
1
0
0
2
1
2
0
0
D=3
dans l'exemple ci-dessous d'une suite
de requêtes portant sur les pages 1, 4 et 6 :
3
4
2
1
0
4
6
2
1
1
5
4
2
2
1
6
1
3
2
1
7 8 9 10 11 12 13 14 15 16 17 18 . . .
4 6 1 1 4 1 4 6 1 4 6 6 ...
2
2
1
1
s = (s1 , s2 , . . .) en sous-ensembles de requêtes
p
à zéro d'un compteur : la phase Ij contient les
j ème et la (j + 1)ème remise à zéro du compteur
Pour étudier cet algorithme, divisons la séquence
appelées
indices
c(p)
i
phases,
associées à chaque remise
des requêtes réceptionnées entre la
et satisfaisant l'une des deux conditions suivantes :
soit la requête
soit la requête
pour la
si provoque l'incrément du compteur c(p),
si est réceptionnée après la requête ayant
(j + 1)ème
amené le compteur
c(p)
à
D
fois.
Dans l'exemple de la question 1, vérier que les premières phases sont
I01 = (1, 2, 6, 7, 8, 9, 10, 11),
I04
I06
I11 = (12, . . .),
= (3, 5, 13, 14, 15, 16, 17),
= (4, 18, . . .),
...
...
...
On remarque que deux phases portant sur des requêtes distinctes peuvent s'entrelacer et que
Ijp commence par une suite
D + 1 requêtes consécutives.
la requête
moins
de requête à la page
2. Montrer que le coût d'une phase est au plus
p
et se termine par une suite d'au
3D.
On va comparer ce coût payé par notre gestionnaire de mémoire à celui d'un algorithme
arbitraire qu'on appelera OPT.
3. Étant donnée la séquence de requêtes
OPT sur les diérentes phases
à chaque phase soit au moins
Ijp
D.
s,
montrer qu'on peut répartir le coût payé par
précédemment dénies de sorte que coût ainsi attribué
(Indication : attribuer le coût payé par OPT pour le chargement d'une page qui fait sortir
p du cache à la phase Iip durant laquelle ce chargement est eectué, et analyser le coût
payé par OPT pour le traitement des autres requêtes de chaque phase.)
4. En déduire le facteur de compétitivité de notre algorithme.
2. Stratégies de cache
On considère maintenant un modèle de mémoire dans lequel on doit nécessairement charger
les pages dans le cache pour pouvoir les consulter. La question devient de savoir quelle page
rejeter quand le cache est plein. On s'intéresse pour cela à des
et probabilistes. Soit
k
stratégies de cache déterministes
le nombre d'unités de mémoire du cache. On se place dans le régime
permanent : à chaque fois qu'une requête sollicite une information non présente, il faut la
charger dans le cache, et l'algorithme doit pour cela choisir une information à éliminer du
cache.
On considère un algorithme
O
optimal en ce sens qu'il a connaissance de toute la suite
des requêtes futures et peut ainsi choisir sa stratégie d'élimination en conséquence. On va
comparer les performances de
O
à celles d'un algorithme déterministe quelconque
celle d'un algorithme probabiliste donné
A,
puis à
Marker.
Pour cela on va considérer chaque requête comme une lettre de l'alphabet (une lettre diérente par page mémoire demandée) ainsi la donnée de l'algorithme est un mot
f
représentant
la suite des requêtes.
i.
Quel est le nombre minimum de transferts du cache vers la mémoire pour un cache
composé de 3 emplacements dans le cas où le mot d'entrée est
abdabecbcabadbac
2
lorsque le cache contient
a, b, c
au départ ?
Dans le cas général, on suppose d'abord que l'on a connaissance de la suite complète des
requêtes futures et on considère la stratégie suivante : à chaque fois qu'une lettre du cache
doit être éliminée, choisir parmi les lettres du cache celle qui apparaît le plus tard dans la
suite des requêtes futures. Montrer que cette stratégie est optimale.
ii.
On suppose que le cache est plein au début de la procédure. Montrer que pour tout
algorithme online déterministe
k
eectue
iii
A,
il existe un mot de longueur
transferts alors que l'algorithme optimal
Montrer que la stratégie
O
k
pour lequel l'algorithme
A
en fait seulement 1.
Least Frequently Used
n'est pas compétitive. Rappelons
que LFU consiste à se rappeler du nombre d'occurrence de chaque requête depuis le lancement
de l'algo et de jeter la moins fréquement utilisée.
On considère la stratégie probabiliste
Marker
suivante. À chaque emplacement du cache,
on associe un bit initialement mis à 0. Pour chaque requête, on opère de la façon suivante :
si la page cherchée est en cache, on met le bit correspondant à 1.
si la page n'est pas en cache, on la charge, et on rejette une page à un emplacement
choisi au hasard dans le cache
parmi ceux dont le bit est à 0,
et on met le bit de cet
emplacement à 1.
Une fois que les bits de tous les emplacements sont à 1, on les remet tous à 0 et on recommence.
On note
f1 f2 . . . fm
le mot d'entrée. Une
étape est un facteur du mot d'entrée entre deux
remises à 0 des bits.
iv.
v
Montrer qu'une étape contient exactement
On considère une étape :
fp fp+1 . . . fq
k
lettres distinctes.
de l'algorithme
Marker, on dit qu'un indice
Marker au début de l'étape.
i, p ≤ i ≤ q est actif si la lettre fi n'était pas dans le cache de
Soit ` le nombre d'indices actifs lors de l'étape considérée, dI le nombre
de O qui ne sont pas dans le cache de Marker en début d'étape, et dF
d'objets du cache
l'analogue en n
d'étape.
Montrer que le nombre de transferts de
O est au moins max(`−dI , dF ), donc (`−dI +dF )/2.
(L − k)/2 où L désigne le nombre
En déduire que le nombre de transferts au total est au moins
total d'indices actifs.
vi.
Rappelons qu'un indice est actif si la lettre
fi
n'était pas dans le cache de
Marker
au
début de l'étape. Inversement on dit qu'il est inactif s'il y était.
On s'intéresse toujours à une étape aucours de laquelle
` indices actifs vont être rencontrés.
j indices
On se place maintenant au cours du déroulement de l'étape, alors qu'on a rencontré
actifs et
i
indices inactifs. Montrer que la probabilité qu'une lettre correspondant à un indice
inactif (non encore requis) soit présente dans le cache lors de son examen est
(k −i−j)/(k −i).
En déduire que si on veut insérer la lettre à ce moment là, la probabilité de ne pas la trouver
est
j/(k − i).
En déduire que le pire des cas pour une étape avec
actifs, puis
vii.
quand
k−`
En déduire qu'en moyenne
O
`
indices actifs est : d'abord
`
indices
indices inactifs.
Marker
eectue au plus
en eectue 1.
3
2
Pk
j=1 1/j
= O(log k)
transferts
3. On line scheduling
On considère
m
machines identiques et une séquence de
des temps d'exécution
p1 , . . . , pn .
n
tâches auxquels sont associés
Il faut placer les tâches sur les machines au fur et à mesure
de leur arrivée en minisant le temps d'exécution.
Montrer que l'algo glouton qui place chaque tâches sur la machine la moins chargée est
α-compétitive
pour
α = 2 − 1/m.
4. Accès séquenciel dans une liste
i.
ii.
Montrer que les politiques Transpose et Compteur ne sont pas compétitives.
L'algorithme BIT considère associe un bit à chaque cellule de la liste : lorsque la cellule
est requise, on ippe le bit. Chaque fois que le bit passe à 1, la cellule est déplacée en tête.
Au départ les bits sont initialisés aléatoirement.
Montrer que l'algorithme BIT est
1.75-compétitif
contre un adversaire qui ne voit pas les
mouvements de BIT (oblivious adversary). On rappelle que le coût d'un accès à un élément
de la liste est son rang et qu'après un accès on peut déplacer l'élément
x
x
n'importe où dans
la liste gratuitement. Il est également possible de transposer deux éléments adjacents pour
un coût unitaire.
Indication : On peut considérer au temps i les inversions entre un algorithme optimal OPT
et l'algorithme BIT, c'est-à-dire les paires {x, y} telles que, à l'étape i, x est avant y dans OPT
et où y est avant x dans BIT. On peut ensuite distinguer les paires en type 0 ou 1 selon que
le bit aecté à x est mis à 0 ou 1 dans l'algorithme BIT et considérer comme fonction de
potentiel Φ = φ0 + 2φ1 , où φ0 et φ1 désignent le nombre d'inversions de type 0 ou de type 1.
4
Téléchargement