Files

118 lines
3.5 KiB
Markdown
Raw Permalink Normal View History

2026-10-07 12:09:31 +02:00
# Compte-rendu TD1
2026-10-07 12:03:44 +02:00
2026-10-07 12:09:31 +02:00
**Nom Binôme :** Luka PLOUVIER et Jimmy COLOMB-RAVAT
2026-10-07 12:03:44 +02:00
2026-10-07 12:09:31 +02:00
## 1. Mesurer
2026-10-07 12:03:44 +02:00
2026-10-07 12:09:31 +02:00
**Empreinte du rapport :** `1d53de903efd2b7c`
2026-10-07 12:03:44 +02:00
2026-10-07 12:09:31 +02:00
```text
2026-10-07 12:03:44 +02:00
real 0m2.638s
user 0m2.613s
sys 0m0.004s
2026-10-07 12:09:31 +02:00
```
2026-10-07 12:03:44 +02:00
2026-10-07 12:09:31 +02:00
## 3. Analyser
2026-10-07 12:03:44 +02:00
2026-10-07 12:09:31 +02:00
### Profil plat :
2026-10-07 12:03:44 +02:00
2026-10-07 12:09:31 +02:00
```text
2026-10-07 12:03:44 +02:00
% cumulative self self total
time seconds seconds calls ms/call ms/call name
39.12 0.84 0.84 308701874 0.00 0.00 egales
32.41 1.54 0.70 36009819 0.00 0.00 longueur
12.04 1.80 0.26 150182 0.00 0.01 chercher_mot
2026-10-07 12:09:31 +02:00
```
2026-10-07 12:03:44 +02:00
2026-10-07 12:12:12 +02:00
La plupart du temps d'exécution se passe par ces fonctions.
2026-10-07 12:09:31 +02:00
En observant le code, on se rend compte qu'il est difficile d'optimiser les fonctions `egales` et `longueur`.
2026-10-07 12:03:44 +02:00
2026-10-07 12:09:31 +02:00
### Graphe d'appels :
2026-10-07 12:03:44 +02:00
2026-10-07 12:12:12 +02:00
Dans `ecart_type_longueur` on voit qu'elle appelle `longueur_moyenne` pour chaque mot unique alors que la moyenne est déjà calculée dans le `main`.
2026-10-07 12:03:44 +02:00
2026-10-07 12:09:31 +02:00
```text
2026-10-07 12:03:44 +02:00
0.00 0.00 1/5867 main [1]
0.07 0.67 5866/5867 ecart_type_longueur [7]
[6] 34.2 0.07 0.67 5867 longueur_moyenne [6]
0.67 0.00 34415822/36009819 longueur [8]
2026-10-07 12:09:31 +02:00
```
2026-10-07 12:03:44 +02:00
2026-10-07 12:12:12 +02:00
`longueur_moyenne` appelle 34.4 millions de fois `longueur` soit 95% des 36 millions d'appels pour 34.2% du temps total.
2026-10-07 12:03:44 +02:00
2026-10-07 12:12:12 +02:00
`chercher_mot` fait une recherche linéaire pour chacune des 150 182 occurrences. Comme la table grandit jusqu'à 5866 entrées, c'est un comptage de mots x mots_uniques soit 296,6 millions d'appels à `égales` sur les 308,7 millions d'appels au total.
2026-10-07 12:03:44 +02:00
2026-10-07 12:09:31 +02:00
## 4. Proposer
2026-10-07 12:03:44 +02:00
2026-10-07 12:09:31 +02:00
* Faire une table de hachage pour le comptage des mots dans `chercher_mot`.
* Calculer la moyenne une seule fois dans `ecart_type_longueur`.
2026-10-07 12:03:44 +02:00
2026-10-07 12:09:31 +02:00
## 5. Optimiser
2026-10-07 12:03:44 +02:00
2026-10-07 12:09:31 +02:00
**Comparaison des appels à `egales` :**
*Avant :*
```text
% cumulative self self total
time seconds seconds calls ms/call ms/call name
2026-10-07 12:03:44 +02:00
39.12 0.84 0.84 308701874 0.00 0.00 egales
2026-10-07 12:09:31 +02:00
```
*Après :*
```text
% cumulative self self total
time seconds seconds calls ms/call ms/call name
2026-10-07 12:03:44 +02:00
2.25 1.03 0.03 12195414 0.00 0.00 egales
2026-10-07 12:09:31 +02:00
```
2026-10-07 12:03:44 +02:00
2026-10-07 12:09:31 +02:00
On peut voir que le nombre d'appels de `egales` a diminué de près de 296 millions.
2026-10-07 12:03:44 +02:00
2026-10-07 12:09:31 +02:00
```text
2026-10-07 12:03:44 +02:00
real 0m1.867s
user 0m1.829s
sys 0m0.000s
2026-10-07 12:09:31 +02:00
```
2026-10-07 12:03:44 +02:00
2026-10-07 12:12:12 +02:00
Le temps d'exécution a diminué de 0,8 seconde.
2026-10-07 12:03:44 +02:00
2026-10-07 12:09:31 +02:00
**Comparaison des appels à `longueur` :**
*Avant :*
```text
% cumulative self self total
time seconds seconds calls ms/call ms/call name
2026-10-07 12:03:44 +02:00
63.06 0.70 0.70 36009819 0.00 0.00 longueur
2026-10-07 12:09:31 +02:00
```
*Après :*
```text
% cumulative self self total
time seconds seconds calls ms/call ms/call name
2026-10-07 12:03:44 +02:00
66.67 0.46 0.46 1605729 0.00 0.00 longueur
2026-10-07 12:09:31 +02:00
```
2026-10-07 12:03:44 +02:00
2026-10-07 12:09:31 +02:00
**Comparaison des appels à `longueur_moyenne` :**
*Avant :*
```text
% cumulative self self total
time seconds seconds calls ms/call ms/call name
2026-10-07 12:03:44 +02:00
9.91 0.81 0.11 5867 0.02 0.13 longueur_moyenne
2026-10-07 12:09:31 +02:00
```
*Après :*
```text
% cumulative self self total
time seconds seconds calls ms/call ms/call name
2026-10-07 12:03:44 +02:00
0.00 0.69 0.00 2 0.00 1.68 longueur_moyenne
2026-10-07 12:09:31 +02:00
```
2026-10-07 12:03:44 +02:00
2026-10-07 12:12:12 +02:00
On peut voir qu'on a diminué le nombre d'appels de `longueur` de 34,4 millions d'appels environ en n'appelant qu'une seule fois `longueur_moyenne` dans `ecart_type_longueur`.
2026-10-07 12:03:44 +02:00
2026-10-07 12:09:31 +02:00
```text
2026-10-07 12:03:44 +02:00
real 0m1.205s
user 0m1.167s
sys 0m0.000s
2026-10-07 12:09:31 +02:00
```
2026-10-07 12:03:44 +02:00
2026-10-07 12:12:12 +02:00
On a encore diminué le temps d'exécution de 0.8 seconde.