forked from menault/2026_TD1_DEV51_Qualite_Algo
Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 14c89b3963 |
+54
-7
@@ -9,6 +9,9 @@
|
|||||||
Réduire le temps d'exécution sans modifier les résultats, sur un texte fixe
|
Réduire le temps d'exécution sans modifier les résultats, sur un texte fixe
|
||||||
contenant 250 000 mots et 5 866 mots distincts retenus.
|
contenant 250 000 mots et 5 866 mots distincts retenus.
|
||||||
|
|
||||||
|
Les sections 2 à 4 présentent ce corpus historique. La section 5 compare
|
||||||
|
le découpage sur 10 000 000 mots, volume désormais utilisé par défaut.
|
||||||
|
|
||||||
Les temps sont mesurés avec `gcc -O0`, sans `-pg`. Le profil est obtenu
|
Les temps sont mesurés avec `gcc -O0`, sans `-pg`. Le profil est obtenu
|
||||||
séparément avec `gcc -O0 -pg` et `gprof`, car l'instrumentation ralentit le programme.
|
séparément avec `gcc -O0 -pg` et `gprof`, car l'instrumentation ralentit le programme.
|
||||||
|
|
||||||
@@ -32,8 +35,9 @@ Le profil initial conduit aux priorités suivantes, classées par gain attendu :
|
|||||||
Chaque gain est relatif à la version précédente. Les deux premières étapes
|
Chaque gain est relatif à la version précédente. Les deux premières étapes
|
||||||
reposent sur une mesure ponctuelle ; les étapes 03 à 05 utilisent la médiane
|
reposent sur une mesure ponctuelle ; les étapes 03 à 05 utilisent la médiane
|
||||||
de cinq exécutions par version, les étapes 06 et 07 celle de dix exécutions,
|
de cinq exécutions par version, les étapes 06 et 07 celle de dix exécutions,
|
||||||
et la normalisation celle de cinquante exécutions. Chaque comparaison est
|
et les étapes de normalisation et de découpage celle de cinquante exécutions.
|
||||||
faite sur la même machine ; les conditions peuvent varier entre les étapes.
|
Chaque comparaison est faite sur la même machine ; les conditions peuvent
|
||||||
|
varier entre les étapes.
|
||||||
|
|
||||||
| Optimisation | Modification | Avant | Après | Temps gagné |
|
| Optimisation | Modification | Avant | Après | Temps gagné |
|
||||||
| --- | --- | ---: | ---: | ---: |
|
| --- | --- | ---: | ---: | ---: |
|
||||||
@@ -45,6 +49,7 @@ faite sur la même machine ; les conditions peuvent varier entre les étapes.
|
|||||||
| Bigrammes | Deux lettres précédentes conservées, aucun appel à `est_lettre` | 0,1252 s | 0,1123 s | 10,3 % |
|
| Bigrammes | Deux lettres précédentes conservées, aucun appel à `est_lettre` | 0,1252 s | 0,1123 s | 10,3 % |
|
||||||
| Mots vides | Filtre par longueur et index de hachage séparé | 0,1007 s | 0,0543 s | 46,1 % |
|
| Mots vides | Filtre par longueur et index de hachage séparé | 0,1007 s | 0,0543 s | 46,1 % |
|
||||||
| Normalisation | Table de conversion des octets, comparaison sur le même PC | 0,0569 s | 0,0508 s | 10,7 % |
|
| Normalisation | Table de conversion des octets, comparaison sur le même PC | 0,0569 s | 0,0508 s | 10,7 % |
|
||||||
|
| Découpage | Pointeurs dans le texte, sans allocation ni copie par ligne | 0,0844 s | 0,0796 s | 5,6 % |
|
||||||
|
|
||||||
Le programme utilise le hachage à la place de la dichotomie. Son gain
|
Le programme utilise le hachage à la place de la dichotomie. Son gain
|
||||||
supplémentaire reste limité car la recherche était déjà efficace.
|
supplémentaire reste limité car la recherche était déjà efficace.
|
||||||
@@ -58,6 +63,13 @@ La recherche des mots vides passe de **12 045 671 à 202 444 appels à
|
|||||||
Le gain de normalisation a été confirmé sur `salle235-06` : la nouvelle
|
Le gain de normalisation a été confirmé sur `salle235-06` : la nouvelle
|
||||||
version est plus rapide dans les 50 paires de mesures, en temps réel et CPU.
|
version est plus rapide dans les 50 paires de mesures, en temps réel et CPU.
|
||||||
|
|
||||||
|
Le découpage évite **21 746 allocations et libérations de lignes** ainsi
|
||||||
|
que **1 561 330 octets de stockage**, sans changer les lignes retournées.
|
||||||
|
Sur les 50 paires de mesures, le gain médian est de **5,6 % en temps réel**
|
||||||
|
et **9,8 % en temps CPU**. Le pic mémoire résident médian, mesuré séparément
|
||||||
|
cinq fois par version, passe de **6 688 à 4 896 Kio**. Les lignes partagent
|
||||||
|
le tampon `texte`, qui est conservé jusqu'à la fin de leur utilisation.
|
||||||
|
|
||||||
## 4. Bilan et validation
|
## 4. Bilan et validation
|
||||||
|
|
||||||
Le bilan global ci-dessous a été mesuré après le tri par tas (étape 05),
|
Le bilan global ci-dessous a été mesuré après le tri par tas (étape 05),
|
||||||
@@ -72,11 +84,46 @@ sur cinq exécutions par version dans les mêmes conditions. Les gains des
|
|||||||
Après le tri par tas, le programme est environ **25,5 fois plus rapide**,
|
Après le tri par tas, le programme est environ **25,5 fois plus rapide**,
|
||||||
soit **96,1 % de temps en moins** sur ce jeu de données.
|
soit **96,1 % de temps en moins** sur ce jeu de données.
|
||||||
|
|
||||||
Le rapport et la sortie console sont identiques octet par octet.
|
Sur le corpus de 250 000 mots, le rapport et la sortie console sont
|
||||||
L'empreinte reste **`1d53de903efd2b7c`**.
|
identiques octet par octet. L'empreinte reste **`1d53de903efd2b7c`**.
|
||||||
|
|
||||||
|
Pour le découpage, `make check`, `make profile` et les tests sous
|
||||||
|
AddressSanitizer et UndefinedBehaviorSanitizer passent. Les cas vérifiés
|
||||||
|
incluent les lignes vides, les textes sans saut de ligne final et les
|
||||||
|
agrandissements du tableau de pointeurs.
|
||||||
|
|
||||||
|
## 5. Comparaison sur 10 millions de mots
|
||||||
|
|
||||||
|
`NB_MOTS_TEXTE` est porté à **10 000 000 dans les deux versions comparées**.
|
||||||
|
Sur le même CPU de `salle235-06`, deux mesures sans `-pg` sont effectuées
|
||||||
|
par version, en inversant l'ordre avant/après à la seconde paire. Un profil
|
||||||
|
est ensuite produit pour chaque version.
|
||||||
|
|
||||||
|
| Mesure | Avant découpage en place | Après découpage en place |
|
||||||
|
| --- | ---: | ---: |
|
||||||
|
| Temps réel moyen sans profiling | 2,0175 s | 1,7664 s |
|
||||||
|
| Temps CPU moyen sans profiling | 1,95 s | 1,72 s |
|
||||||
|
| Moyenne des pics RSS sans profiling | 145 780 Kio | 72 054 Kio |
|
||||||
|
| Temps propre de `decouper_lignes` dans le profil | 0,28 s | 0,12 s |
|
||||||
|
|
||||||
|
Sur ces deux mesures, le gain est de **12,4 % en temps réel**, **11,8 % en
|
||||||
|
temps CPU** et **50,6 % sur le pic RSS moyen**. Les profils contiennent
|
||||||
|
environ 165 et 157 échantillons attribués, contre seulement 3 et 7 dans
|
||||||
|
les anciennes captures comparées. Ils indiquent aussi une réduction du
|
||||||
|
temps du découpage ; les mesures sans `-pg` confirment le gain global.
|
||||||
|
|
||||||
|
Le nouveau texte contient **869 827 lignes** et **6 098 mots distincts**.
|
||||||
|
Le rapport et la sortie console sont identiques avant/après sur les six
|
||||||
|
exécutions. L'empreinte de ce volume est **`b35be1258a9cb3f6`**.
|
||||||
|
La référence historique à 250 000 mots est conservée séparément ;
|
||||||
|
`make check` utilise désormais la référence à 10 millions de mots.
|
||||||
|
|
||||||
Sources : [notes](docs/notes.md), [ordre des profils](resultats/README.md),
|
Sources : [notes](docs/notes.md), [ordre des profils](resultats/README.md),
|
||||||
[profil initial](resultats/profils/00_initial.txt),
|
[profil initial](resultats/profils/00_initial.txt),
|
||||||
[profil actuel](resultats/profils/08_normalisation.txt),
|
[profil après découpage à 250 000 mots](resultats/profils/09_decoupage.txt),
|
||||||
[mesures du bilan après tri](resultats/mesures/mesures_bilan_tri.csv) et
|
[mesures du bilan après tri](resultats/mesures/mesures_bilan_tri.csv),
|
||||||
[comparaison de normalisation](resultats/mesures/comparaison_normalisation_meme_pc.csv).
|
[comparaison de normalisation](resultats/mesures/comparaison_normalisation_meme_pc.csv) et
|
||||||
|
[comparaison du découpage](resultats/mesures/comparaison_decoupage_meme_pc.csv),
|
||||||
|
[profils avant](resultats/profils/10000000_mots/avant_decoupage.txt) et
|
||||||
|
[après à 10 millions](resultats/profils/10000000_mots/apres_decoupage.txt),
|
||||||
|
[mesures à 10 millions](resultats/mesures/comparaison_decoupage_10000000.csv).
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ CFLAGS ?= -std=c11 -Wall -Wextra -Wpedantic -O0
|
|||||||
SOURCE = src/analyseur.c
|
SOURCE = src/analyseur.c
|
||||||
PROGRAMME = build/analyseur
|
PROGRAMME = build/analyseur
|
||||||
PROGRAMME_PROFIL = build/profil/analyseur
|
PROGRAMME_PROFIL = build/profil/analyseur
|
||||||
|
REFERENCE = resultats/rapport_reference_10000000.txt
|
||||||
|
|
||||||
.PHONY: all run check profile clean
|
.PHONY: all run check profile clean
|
||||||
|
|
||||||
@@ -17,7 +18,7 @@ run: $(PROGRAMME)
|
|||||||
cd build && ./analyseur
|
cd build && ./analyseur
|
||||||
|
|
||||||
check: run
|
check: run
|
||||||
cmp resultats/rapport_reference.txt build/rapport.txt
|
cmp $(REFERENCE) build/rapport.txt
|
||||||
|
|
||||||
$(PROGRAMME_PROFIL): $(SOURCE) Makefile
|
$(PROGRAMME_PROFIL): $(SOURCE) Makefile
|
||||||
mkdir -p $(@D)
|
mkdir -p $(@D)
|
||||||
|
|||||||
@@ -1,8 +1,11 @@
|
|||||||
# Analyseur de fréquence de mots — TD R5.A.04
|
# Analyseur de fréquence de mots — TD R5.A.04
|
||||||
|
|
||||||
Optimisation d'un analyseur C par mesure du temps, étude des profils et
|
Optimisation d'un analyseur C par mesure du temps, étude des profils et
|
||||||
réduction du travail répété. Le rapport doit conserver l'empreinte
|
réduction du travail répété. Le programme traite désormais **10 000 000 mots**,
|
||||||
**`1d53de903efd2b7c`**.
|
avec l'empreinte de référence **`b35be1258a9cb3f6`**.
|
||||||
|
|
||||||
|
Les résultats historiques sur **250 000 mots** conservent leur référence
|
||||||
|
**`1d53de903efd2b7c`**. L'empreinte se compare à volume de texte identique.
|
||||||
|
|
||||||
## Organisation
|
## Organisation
|
||||||
|
|
||||||
@@ -12,9 +15,11 @@ exemples/exemple.c Exemple de profiling fourni
|
|||||||
docs/CONSIGNES.md Consignes originales du TD
|
docs/CONSIGNES.md Consignes originales du TD
|
||||||
docs/R5A04_Profiling_MM.pdf Support du cours
|
docs/R5A04_Profiling_MM.pdf Support du cours
|
||||||
docs/notes.md Journal détaillé des mesures
|
docs/notes.md Journal détaillé des mesures
|
||||||
resultats/profils/ Profils historiques numérotés de 00 à 08
|
resultats/profils/ Profils historiques de 00 à 09 (250 000 mots)
|
||||||
|
resultats/profils/10000000_mots/ Comparaison avant/après sur 10 millions de mots
|
||||||
resultats/mesures/ Mesures brutes CSV et conditions des expériences
|
resultats/mesures/ Mesures brutes CSV et conditions des expériences
|
||||||
resultats/rapport_reference.txt Rapport attendu
|
resultats/rapport_reference.txt Référence historique (250 000 mots)
|
||||||
|
resultats/rapport_reference_10000000.txt Référence actuelle (10 millions)
|
||||||
COMPTE_RENDU.md Compte rendu noté
|
COMPTE_RENDU.md Compte rendu noté
|
||||||
build/ Fichiers générés localement, ignorés par Git
|
build/ Fichiers générés localement, ignorés par Git
|
||||||
```
|
```
|
||||||
@@ -27,7 +32,7 @@ Depuis la racine du dépôt :
|
|||||||
```bash
|
```bash
|
||||||
make # Compiler en -O0, sans instrumentation
|
make # Compiler en -O0, sans instrumentation
|
||||||
make run # Exécuter ; le rapport est écrit dans build/rapport.txt
|
make run # Exécuter ; le rapport est écrit dans build/rapport.txt
|
||||||
make check # Exécuter et comparer le rapport à la référence
|
make check # Exécuter et comparer à la référence de 10 millions de mots
|
||||||
make profile # Produire build/profil/profil.txt avec -pg et gprof
|
make profile # Produire build/profil/profil.txt avec -pg et gprof
|
||||||
make clean # Supprimer les fichiers générés de build/
|
make clean # Supprimer les fichiers générés de build/
|
||||||
```
|
```
|
||||||
@@ -43,6 +48,11 @@ Les mesures de temps utilisent le binaire sans `-pg`. Les profils archivés
|
|||||||
dans `resultats/` sont les résultats des différentes étapes ; `make profile`
|
dans `resultats/` sont les résultats des différentes étapes ; `make profile`
|
||||||
écrit le nouveau profil dans `build/profil/`.
|
écrit le nouveau profil dans `build/profil/`.
|
||||||
|
|
||||||
|
Le [test à 10 millions de mots](resultats/mesures/comparaison_decoupage_10000000.json)
|
||||||
|
compare les versions avant et après le découpage en place, avec deux mesures
|
||||||
|
sans instrumentation et un profil par version. Les rapports des deux
|
||||||
|
versions sont identiques octet par octet.
|
||||||
|
|
||||||
## Documents et résultats
|
## Documents et résultats
|
||||||
|
|
||||||
- [Compte rendu](COMPTE_RENDU.md)
|
- [Compte rendu](COMPTE_RENDU.md)
|
||||||
@@ -50,3 +60,5 @@ dans `resultats/` sont les résultats des différentes étapes ; `make profile`
|
|||||||
- [Journal des mesures](docs/notes.md)
|
- [Journal des mesures](docs/notes.md)
|
||||||
- [Ordre des profils et expériences](resultats/README.md)
|
- [Ordre des profils et expériences](resultats/README.md)
|
||||||
- [Comparaison de la normalisation sur le même PC](resultats/mesures/comparaison_normalisation_meme_pc.csv)
|
- [Comparaison de la normalisation sur le même PC](resultats/mesures/comparaison_normalisation_meme_pc.csv)
|
||||||
|
- [Comparaison du découpage sur le même PC](resultats/mesures/comparaison_decoupage_meme_pc.csv)
|
||||||
|
- [Comparaison du découpage sur 10 millions de mots](resultats/mesures/comparaison_decoupage_10000000.csv)
|
||||||
|
|||||||
+135
@@ -697,3 +697,138 @@ chauffe incluse. L'empreinte reste **`1d53de903efd2b7c`**.
|
|||||||
Les [100 mesures brutes](../resultats/mesures/comparaison_normalisation_meme_pc.csv) sont
|
Les [100 mesures brutes](../resultats/mesures/comparaison_normalisation_meme_pc.csv) sont
|
||||||
conservées, ainsi que les [conditions et statistiques détaillées](../resultats/mesures/comparaison_normalisation_meme_pc.json),
|
conservées, ainsi que les [conditions et statistiques détaillées](../resultats/mesures/comparaison_normalisation_meme_pc.json),
|
||||||
qui identifient le commit de référence et les deux sources utilisées.
|
qui identifient le commit de référence et les deux sources utilisées.
|
||||||
|
|
||||||
|
## Découpage en place dans le tampon du texte
|
||||||
|
|
||||||
|
Après la réorganisation du dépôt, le programme se trouve dans
|
||||||
|
`src/analyseur.c` et les commandes de validation sont `make check` et
|
||||||
|
`make profile`.
|
||||||
|
|
||||||
|
`decouper_lignes` reçoit maintenant un `char *` modifiable. Chaque saut
|
||||||
|
de ligne est remplacé par `\0`, et le tableau retourné contient des
|
||||||
|
pointeurs vers le début des lignes dans le tampon `texte`. Les allocations
|
||||||
|
et copies individuelles disparaissent ; le tableau de pointeurs conserve
|
||||||
|
son allocation initiale et ses agrandissements par `realloc`.
|
||||||
|
|
||||||
|
Les lignes restent valides tant que `texte` existe. La normalisation agit
|
||||||
|
directement sur ce tampon. À la fin du programme, on libère le tableau de
|
||||||
|
pointeurs, puis `texte`, sans appeler `free` sur chaque ligne.
|
||||||
|
|
||||||
|
Les lignes vides sont conservées. Seules les lignes terminées par `\n`
|
||||||
|
sont retournées, comme dans la version précédente ; le générateur produit
|
||||||
|
déjà un saut de ligne final. Le parcours reste en O(taille du texte), mais
|
||||||
|
il évite les allocations et les copies de son contenu.
|
||||||
|
|
||||||
|
Sur le corpus complet, cela supprime **21 746 allocations de lignes** et
|
||||||
|
autant de libérations. Le stockage de leurs copies représentait
|
||||||
|
**1 561 330 octets**, soit environ **1,49 Mio**, hors coût de l'allocateur.
|
||||||
|
|
||||||
|
Le profil est archivé dans [09_decoupage.txt](../resultats/profils/09_decoupage.txt).
|
||||||
|
La comparaison utilise le commit `875af6fe9eaee7a2a9a997c7fe4102d216a1b9fb`
|
||||||
|
comme référence avant modification. Les deux versions sont compilées avec
|
||||||
|
`-std=c11 -Wall -Wextra -Wpedantic -O0`, sans `-pg`, puis exécutées sur
|
||||||
|
**salle235-06**, CPU logique **0**, avec **GCC 16.2.1**.
|
||||||
|
|
||||||
|
Après cinq exécutions de chauffe par version, 50 mesures par version
|
||||||
|
sont réalisées en alternant l'ordre à chaque paire. Le temps réel inclut
|
||||||
|
le lancement du programme et ses écritures dans `build/`. Le temps CPU
|
||||||
|
est la somme des temps utilisateur et système du processus. Le pic RSS
|
||||||
|
est mesuré dans une série séparée avec `/usr/bin/time -f %M`, cinq fois
|
||||||
|
par version, sur le même CPU.
|
||||||
|
|
||||||
|
| Mesure | Avant : copies des lignes | Après : pointeurs dans le texte |
|
||||||
|
| --- | ---: | ---: |
|
||||||
|
| Allocations du contenu des lignes | 21 746 | 0 |
|
||||||
|
| Octets alloués pour le contenu des lignes | 1 561 330 | 0 |
|
||||||
|
| Temps réel médian | 84,36 ms | 79,60 ms |
|
||||||
|
| Temps CPU médian | 54,75 ms | 49,38 ms |
|
||||||
|
| Pic RSS médian | 6 688 Kio | 4 896 Kio |
|
||||||
|
|
||||||
|
Le gain médian est de **5,6 % en temps réel** et de **9,8 % en temps CPU**.
|
||||||
|
La nouvelle version est plus rapide dans 36 paires sur 50 en temps réel
|
||||||
|
et 39 sur 50 en temps CPU. Les temps fluctuent : la comparaison porte
|
||||||
|
sur cette série avant/après, et non sur les mesures historiques de la
|
||||||
|
normalisation. La baisse du pic RSS médian est de **1 792 Kio**.
|
||||||
|
|
||||||
|
Les [mesures de temps](../resultats/mesures/comparaison_decoupage_meme_pc.csv),
|
||||||
|
les [mesures de mémoire](../resultats/mesures/comparaison_decoupage_memoire.csv)
|
||||||
|
et les [conditions et statistiques](../resultats/mesures/comparaison_decoupage_meme_pc.json)
|
||||||
|
sont conservées. Le fichier de conditions contient aussi les empreintes
|
||||||
|
SHA-256 des sources avant et après modification.
|
||||||
|
|
||||||
|
Validation : `make check` et `make profile` passent sans avertissement de
|
||||||
|
compilation. Les 110 exécutions de comparaison, chauffe comprise, et les
|
||||||
|
10 mesures de mémoire produisent un rapport et une sortie console
|
||||||
|
identiques octet par octet à la référence. L'empreinte reste
|
||||||
|
**`1d53de903efd2b7c`**.
|
||||||
|
|
||||||
|
Des tests temporaires sous AddressSanitizer et UndefinedBehaviorSanitizer
|
||||||
|
ont comparé le découpage à l'ancienne fonction sur les textes vides, les
|
||||||
|
lignes vides, les suffixes sans saut de ligne, les zéros internes, les
|
||||||
|
fins de ligne CRLF, une ligne de 65 536 caractères, les seuils de capacité
|
||||||
|
jusqu'à 32 769 lignes et le corpus complet. Ils vérifient aussi que chaque
|
||||||
|
pointeur vise le tampon initial et que les lignes restent identiques
|
||||||
|
après normalisation. Le programme complet passe également avec ces outils,
|
||||||
|
sans double libération ni accès mémoire invalide.
|
||||||
|
|
||||||
|
Commandes utilisées pour cette étape à 250 000 mots, avant l'augmentation
|
||||||
|
du volume :
|
||||||
|
|
||||||
|
```bash
|
||||||
|
make check
|
||||||
|
make profile
|
||||||
|
cp build/profil/profil.txt resultats/profils/09_decoupage.txt
|
||||||
|
```
|
||||||
|
|
||||||
|
## Comparaison du découpage sur 10 millions de mots
|
||||||
|
|
||||||
|
Le paramètre `NB_MOTS_TEXTE` passe à **10 000 000**. Pour comparer le
|
||||||
|
découpage, ce changement est appliqué aussi à la version avant optimisation,
|
||||||
|
issue du commit `875af6fe9eaee7a2a9a997c7fe4102d216a1b9fb`. Les différences
|
||||||
|
entre les deux versions restent le découpage en place et la suppression
|
||||||
|
des libérations individuelles des lignes.
|
||||||
|
|
||||||
|
Les deux versions sont compilées avec
|
||||||
|
`-std=c11 -Wall -Wextra -Wpedantic -O0`, sur **salle235-06**, avec
|
||||||
|
**GCC 16.2.1**, puis exécutées sur le **CPU logique 0**. Deux mesures sans
|
||||||
|
`-pg` sont réalisées par version, dans l'ordre avant/après puis après/avant.
|
||||||
|
Une exécution profilée supplémentaire par version produit les nouveaux
|
||||||
|
profils.
|
||||||
|
|
||||||
|
| Mesure | Avant découpage en place | Après découpage en place |
|
||||||
|
| --- | ---: | ---: |
|
||||||
|
| Temps réels sans profiling | 2,042 s ; 1,993 s | 1,768 s ; 1,765 s |
|
||||||
|
| Temps réel moyen | 2,0175 s | 1,7664 s |
|
||||||
|
| Temps CPU moyen | 1,95 s | 1,72 s |
|
||||||
|
| Moyenne des pics RSS | 145 780 Kio | 72 054 Kio |
|
||||||
|
| Temps propre de `decouper_lignes` avec `-pg` | 0,28 s | 0,12 s |
|
||||||
|
| Temps total attribué par `gprof` | 1,65 s | 1,57 s |
|
||||||
|
|
||||||
|
Le gain observé sur les deux mesures sans instrumentation est de
|
||||||
|
**12,4 % en temps réel** et **11,8 % en temps CPU**. Le pic RSS moyen
|
||||||
|
baisse de **50,6 %**, d'environ **142,4 Mio à 70,4 Mio**. Les deux mesures
|
||||||
|
individuelles donnent une version après découpage plus rapide.
|
||||||
|
|
||||||
|
Les [nouveaux profils avant](../resultats/profils/10000000_mots/avant_decoupage.txt)
|
||||||
|
et [après](../resultats/profils/10000000_mots/apres_decoupage.txt) reposent
|
||||||
|
respectivement sur environ **165 et 157 échantillons attribués**, avec
|
||||||
|
une période de 0,01 s. Les anciennes captures à 250 000 mots n'en
|
||||||
|
contenaient que 3 et 7 : elles étaient trop courtes pour interpréter une
|
||||||
|
variation de quelques centièmes comme une régression. Les temps de
|
||||||
|
`gprof` restent des estimations ; le gain global est mesuré sans `-pg`.
|
||||||
|
|
||||||
|
Les [mesures brutes](../resultats/mesures/comparaison_decoupage_10000000.csv)
|
||||||
|
et les [conditions détaillées](../resultats/mesures/comparaison_decoupage_10000000.json)
|
||||||
|
identifient les sources, leurs empreintes SHA-256, le protocole et les profils.
|
||||||
|
|
||||||
|
Le nouveau corpus contient **10 000 000 mots**, **869 827 lignes** et
|
||||||
|
**6 098 mots distincts**. Le bigramme reste `me`, avec 696 057 occurrences
|
||||||
|
et `n` comme troisième lettre la plus fréquente. Les six exécutions
|
||||||
|
produisent des rapports et sorties console identiques avant/après.
|
||||||
|
|
||||||
|
L'empreinte de ce nouveau volume est **`b35be1258a9cb3f6`**. Le
|
||||||
|
[rapport de référence à 10 millions](../resultats/rapport_reference_10000000.txt)
|
||||||
|
est issu de la version avant découpage, puis vérifié avec la version
|
||||||
|
après découpage. Le [rapport historique à 250 000 mots](../resultats/rapport_reference.txt)
|
||||||
|
et son empreinte `1d53de903efd2b7c` sont conservés. `make check` utilise
|
||||||
|
désormais la référence à 10 millions de mots.
|
||||||
|
|||||||
+29
-5
@@ -1,8 +1,10 @@
|
|||||||
# Résultats conservés
|
# Résultats conservés
|
||||||
|
|
||||||
Les profils suivent l'ordre des optimisations. Les commits indiqués
|
Les profils 00 à 09 portent sur **250 000 mots** et suivent l'ordre des
|
||||||
contiennent les versions de `analyseur.c` utilisées à ces étapes, avant
|
optimisations. Les commits des étapes
|
||||||
le déplacement des sources dans `src/`.
|
00 à 08 contiennent les versions de `analyseur.c` avant son déplacement
|
||||||
|
dans `src/`. Pour l'étape 09, les conditions de mesure identifient le
|
||||||
|
commit de référence et les empreintes SHA-256 des deux sources comparées.
|
||||||
|
|
||||||
| Étape | Profil | Version du code |
|
| Étape | Profil | Version du code |
|
||||||
| --- | --- | --- |
|
| --- | --- | --- |
|
||||||
@@ -15,6 +17,7 @@ le déplacement des sources dans `src/`.
|
|||||||
| 06 — Analyse des bigrammes | [06_bigrammes.txt](profils/06_bigrammes.txt) | `e3076e4` |
|
| 06 — Analyse des bigrammes | [06_bigrammes.txt](profils/06_bigrammes.txt) | `e3076e4` |
|
||||||
| 07 — Index des mots vides | [07_mots_vides.txt](profils/07_mots_vides.txt) | `1331811` |
|
| 07 — Index des mots vides | [07_mots_vides.txt](profils/07_mots_vides.txt) | `1331811` |
|
||||||
| 08 — Table de normalisation | [08_normalisation.txt](profils/08_normalisation.txt) | `19ad9b7` |
|
| 08 — Table de normalisation | [08_normalisation.txt](profils/08_normalisation.txt) | `19ad9b7` |
|
||||||
|
| 09 — Découpage en place | [09_decoupage.txt](profils/09_decoupage.txt) | [Sources et empreintes SHA-256](mesures/comparaison_decoupage_meme_pc.json) |
|
||||||
|
|
||||||
Les [mesures du bilan après le tri](mesures/mesures_bilan_tri.csv) comparent
|
Les [mesures du bilan après le tri](mesures/mesures_bilan_tri.csv) comparent
|
||||||
le programme initial à l'étape 05. La colonne `final` désigne cette étape.
|
le programme initial à l'étape 05. La colonne `final` désigne cette étape.
|
||||||
@@ -24,8 +27,29 @@ compare les étapes 07 et 08 sur le même PC, avec 50 mesures par version.
|
|||||||
Les [conditions et statistiques](mesures/comparaison_normalisation_meme_pc.json)
|
Les [conditions et statistiques](mesures/comparaison_normalisation_meme_pc.json)
|
||||||
précisent la machine, le compilateur, les sources et le protocole.
|
précisent la machine, le compilateur, les sources et le protocole.
|
||||||
|
|
||||||
Le [rapport de référence](rapport_reference.txt) conserve l'empreinte
|
La [comparaison du découpage](mesures/comparaison_decoupage_meme_pc.csv)
|
||||||
`1d53de903efd2b7c`. `make check` compare le rapport courant à ce fichier.
|
compare les étapes 08 et 09 sur le même PC, avec 50 mesures de temps par
|
||||||
|
version. Le [pic mémoire](mesures/comparaison_decoupage_memoire.csv) est
|
||||||
|
mesuré séparément avec GNU time, cinq fois par version. Les
|
||||||
|
[conditions et statistiques](mesures/comparaison_decoupage_meme_pc.json)
|
||||||
|
décrivent les deux séries et les vérifications des résultats.
|
||||||
|
|
||||||
|
La comparaison complémentaire à **10 000 000 mots** est conservée séparément :
|
||||||
|
|
||||||
|
- [Profil avant découpage](profils/10000000_mots/avant_decoupage.txt).
|
||||||
|
- [Profil après découpage](profils/10000000_mots/apres_decoupage.txt).
|
||||||
|
- [Mesures brutes](mesures/comparaison_decoupage_10000000.csv) et
|
||||||
|
[conditions et statistiques](mesures/comparaison_decoupage_10000000.json).
|
||||||
|
|
||||||
|
Elle utilise deux mesures sans `-pg` et une exécution profilée par version,
|
||||||
|
sur le même CPU. Le seul changement de la version de référence est le
|
||||||
|
nombre de mots ; la version comparée ajoute le découpage en place.
|
||||||
|
|
||||||
|
Le [rapport historique](rapport_reference.txt), pour 250 000 mots, conserve
|
||||||
|
l'empreinte `1d53de903efd2b7c`. La [référence actuelle à 10 millions](rapport_reference_10000000.txt)
|
||||||
|
a l'empreinte `b35be1258a9cb3f6`. Elle provient de la version avant découpage
|
||||||
|
et a été vérifiée à l'identique avec la version après découpage.
|
||||||
|
`make check` compare maintenant le rapport courant à cette nouvelle référence.
|
||||||
|
|
||||||
Les commandes historiques et les autres mesures sont décrites dans le
|
Les commandes historiques et les autres mesures sont décrites dans le
|
||||||
[journal](../docs/notes.md). Chaque gain de temps doit être calculé à partir
|
[journal](../docs/notes.md). Chaque gain de temps doit être calculé à partir
|
||||||
|
|||||||
@@ -0,0 +1,5 @@
|
|||||||
|
paire;ordre;version;reel_s;cpu_s;utilisateur_s;systeme_s;rss_max_kio
|
||||||
|
1;1;avant_decoupage;2.041986573;1.960000000;1.930000000;0.030000000;145776
|
||||||
|
1;2;apres_decoupage;1.767853857;1.720000000;1.710000000;0.010000000;71796
|
||||||
|
2;1;apres_decoupage;1.764871005;1.720000000;1.710000000;0.010000000;72312
|
||||||
|
2;2;avant_decoupage;1.993093881;1.940000000;1.920000000;0.020000000;145784
|
||||||
|
@@ -0,0 +1,111 @@
|
|||||||
|
{
|
||||||
|
"machine": "salle235-06",
|
||||||
|
"processeur": "Intel(R) Core(TM) i7-8700 CPU @ 3.20GHz",
|
||||||
|
"cpu_logique": 0,
|
||||||
|
"compilateur": "gcc (GCC) 16.2.1 20260810",
|
||||||
|
"options": [
|
||||||
|
"-std=c11",
|
||||||
|
"-Wall",
|
||||||
|
"-Wextra",
|
||||||
|
"-Wpedantic",
|
||||||
|
"-O0"
|
||||||
|
],
|
||||||
|
"nb_mots_texte": 10000000,
|
||||||
|
"nb_lignes": 869827,
|
||||||
|
"nb_mots_distincts": 6098,
|
||||||
|
"reference_commit": "875af6fe9eaee7a2a9a997c7fe4102d216a1b9fb",
|
||||||
|
"reference_adaptation": "NB_MOTS_TEXTE porté de 250000 à 10000000 dans les deux versions",
|
||||||
|
"source_sha256": {
|
||||||
|
"avant_decoupage": "41fb23d6bbd63a6f2b9b127b0b877ac4bd133874562940930c81cd76917137ff",
|
||||||
|
"apres_decoupage": "7bbb1dc588d2ec82cbb700b135bbdf308bff1a684598c334a5c86bb054c8e04c"
|
||||||
|
},
|
||||||
|
"mesures_sans_pg_par_version": 2,
|
||||||
|
"executions_profilees_par_version": 1,
|
||||||
|
"executions_verifiees": 6,
|
||||||
|
"ordre_mesures": "avant/après puis après/avant",
|
||||||
|
"horloge_reelle": "time.perf_counter, lancement du programme via GNU time inclus",
|
||||||
|
"temps_cpu_et_memoire": "/usr/bin/time -f %U;%S;%M : temps CPU au centième de seconde et RSS maximal en Kio",
|
||||||
|
"repertoire_execution": "build/verification_10000000_thn5_mfx",
|
||||||
|
"empreinte_rapport": "b35be1258a9cb3f6",
|
||||||
|
"rapport_reference": "resultats/rapport_reference_10000000.txt",
|
||||||
|
"reference_validee_depuis": "version avant découpage à 10000000 mots",
|
||||||
|
"profils": {
|
||||||
|
"avant_decoupage": {
|
||||||
|
"fichier": "resultats/profils/10000000_mots/avant_decoupage.txt",
|
||||||
|
"temps_attribue_s": 1.65,
|
||||||
|
"periode_echantillon_s": 0.01,
|
||||||
|
"echantillons_attribues": 165,
|
||||||
|
"decouper_lignes_self_s": 0.28,
|
||||||
|
"execution_profilee": {
|
||||||
|
"reel_s": 2.700588346000586,
|
||||||
|
"cpu_s": 2.63,
|
||||||
|
"utilisateur_s": 2.61,
|
||||||
|
"systeme_s": 0.02,
|
||||||
|
"rss_max_kio": 145812
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"apres_decoupage": {
|
||||||
|
"fichier": "resultats/profils/10000000_mots/apres_decoupage.txt",
|
||||||
|
"temps_attribue_s": 1.57,
|
||||||
|
"periode_echantillon_s": 0.01,
|
||||||
|
"echantillons_attribues": 157,
|
||||||
|
"decouper_lignes_self_s": 0.12,
|
||||||
|
"execution_profilee": {
|
||||||
|
"reel_s": 2.4980121059998055,
|
||||||
|
"cpu_s": 2.43,
|
||||||
|
"utilisateur_s": 2.43,
|
||||||
|
"systeme_s": 0.0,
|
||||||
|
"rss_max_kio": 72384
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"avant_decoupage": {
|
||||||
|
"reel_s": {
|
||||||
|
"mesures": [
|
||||||
|
2.041986573000031,
|
||||||
|
1.9930938809993677
|
||||||
|
],
|
||||||
|
"moyenne": 2.0175402269996994
|
||||||
|
},
|
||||||
|
"cpu_s": {
|
||||||
|
"mesures": [
|
||||||
|
1.96,
|
||||||
|
1.94
|
||||||
|
],
|
||||||
|
"moyenne": 1.95
|
||||||
|
},
|
||||||
|
"rss_max_kio": {
|
||||||
|
"mesures": [
|
||||||
|
145776,
|
||||||
|
145784
|
||||||
|
],
|
||||||
|
"moyenne": 145780
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"apres_decoupage": {
|
||||||
|
"reel_s": {
|
||||||
|
"mesures": [
|
||||||
|
1.7678538569998636,
|
||||||
|
1.7648710049998044
|
||||||
|
],
|
||||||
|
"moyenne": 1.766362430999834
|
||||||
|
},
|
||||||
|
"cpu_s": {
|
||||||
|
"mesures": [
|
||||||
|
1.72,
|
||||||
|
1.72
|
||||||
|
],
|
||||||
|
"moyenne": 1.72
|
||||||
|
},
|
||||||
|
"rss_max_kio": {
|
||||||
|
"mesures": [
|
||||||
|
71796,
|
||||||
|
72312
|
||||||
|
],
|
||||||
|
"moyenne": 72054
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"gain_reel_pourcent": 12.449704478675693,
|
||||||
|
"gain_cpu_pourcent": 11.794871794871797,
|
||||||
|
"gain_rss_pourcent": 50.57346686788311
|
||||||
|
}
|
||||||
@@ -0,0 +1,101 @@
|
|||||||
|
paire;ordre;version;reel_s;cpu_s;utilisateur_s;systeme_s
|
||||||
|
1;1;normalisation;0.098564077;0.066697000;0.063348000;0.003349000
|
||||||
|
1;2;decoupage;0.077939649;0.049954000;0.046830000;0.003124000
|
||||||
|
2;1;decoupage;0.079878005;0.049596000;0.049596000;0.000000000
|
||||||
|
2;2;normalisation;0.086629509;0.057711000;0.057711000;0.000000000
|
||||||
|
3;1;normalisation;0.086206658;0.054246000;0.054246000;0.000000000
|
||||||
|
3;2;decoupage;0.077741974;0.048682000;0.045429000;0.003253000
|
||||||
|
4;1;decoupage;0.076489187;0.050586000;0.050586000;0.000000000
|
||||||
|
4;2;normalisation;0.081969255;0.055426000;0.048897000;0.006529000
|
||||||
|
5;1;normalisation;0.084525585;0.055295000;0.055295000;0.000000000
|
||||||
|
5;2;decoupage;0.082314577;0.050980000;0.050980000;0.000000000
|
||||||
|
6;1;decoupage;0.086664939;0.050787000;0.050787000;0.000000000
|
||||||
|
6;2;normalisation;0.091178679;0.059710000;0.059710000;0.000000000
|
||||||
|
7;1;normalisation;0.122270653;0.091533000;0.084745000;0.006788000
|
||||||
|
7;2;decoupage;0.088566138;0.059787000;0.056466000;0.003321000
|
||||||
|
8;1;decoupage;0.074593149;0.048882000;0.045816000;0.003066000
|
||||||
|
8;2;normalisation;0.082676622;0.054373000;0.050965000;0.003408000
|
||||||
|
9;1;normalisation;0.077770477;0.052938000;0.049816000;0.003122000
|
||||||
|
9;2;decoupage;0.081749320;0.050059000;0.046735000;0.003324000
|
||||||
|
10;1;decoupage;0.107211398;0.080546000;0.077318000;0.003228000
|
||||||
|
10;2;normalisation;0.079203746;0.054812000;0.054812000;0.000000000
|
||||||
|
11;1;normalisation;0.107278623;0.081262000;0.077865000;0.003397000
|
||||||
|
11;2;decoupage;0.074858666;0.047378000;0.047378000;0.000000000
|
||||||
|
12;1;decoupage;0.074898321;0.047529000;0.047529000;0.000000000
|
||||||
|
12;2;normalisation;0.082979193;0.052978000;0.049661000;0.003317000
|
||||||
|
13;1;normalisation;0.091366804;0.055490000;0.048941000;0.006549000
|
||||||
|
13;2;decoupage;0.079342845;0.048232000;0.048232000;0.000000000
|
||||||
|
14;1;decoupage;0.073351969;0.049378000;0.046080000;0.003298000
|
||||||
|
14;2;normalisation;0.082174939;0.056187000;0.056187000;0.000000000
|
||||||
|
15;1;normalisation;0.100514947;0.073726000;0.067040000;0.006686000
|
||||||
|
15;2;decoupage;0.107643859;0.077912000;0.077912000;0.000000000
|
||||||
|
16;1;decoupage;0.071424612;0.047602000;0.047602000;0.000000000
|
||||||
|
16;2;normalisation;0.080502181;0.054009000;0.054009000;0.000000000
|
||||||
|
17;1;normalisation;0.080461308;0.052988000;0.052988000;0.000000000
|
||||||
|
17;2;decoupage;0.072877468;0.047245000;0.047245000;0.000000000
|
||||||
|
18;1;decoupage;0.067525437;0.047622000;0.044458000;0.003164000
|
||||||
|
18;2;normalisation;0.076900013;0.052838000;0.049726000;0.003112000
|
||||||
|
19;1;normalisation;0.084867661;0.053998000;0.053998000;0.000000000
|
||||||
|
19;2;decoupage;0.074569286;0.048463000;0.045426000;0.003037000
|
||||||
|
20;1;decoupage;0.080500195;0.048442000;0.041979000;0.006463000
|
||||||
|
20;2;normalisation;0.089638558;0.060543000;0.057370000;0.003173000
|
||||||
|
21;1;normalisation;0.077757425;0.053577000;0.050414000;0.003163000
|
||||||
|
21;2;decoupage;0.079858479;0.048311000;0.041903000;0.006408000
|
||||||
|
22;1;decoupage;0.076939251;0.049027000;0.045759000;0.003268000
|
||||||
|
22;2;normalisation;0.082923503;0.054112000;0.054112000;0.000000000
|
||||||
|
23;1;normalisation;0.082431887;0.056499000;0.056499000;0.000000000
|
||||||
|
23;2;decoupage;0.075330615;0.048884000;0.048884000;0.000000000
|
||||||
|
24;1;decoupage;0.076024610;0.048309000;0.048309000;0.000000000
|
||||||
|
24;2;normalisation;0.084193587;0.054436000;0.054436000;0.000000000
|
||||||
|
25;1;normalisation;0.088893697;0.054852000;0.048409000;0.006443000
|
||||||
|
25;2;decoupage;0.074862850;0.048490000;0.048490000;0.000000000
|
||||||
|
26;1;decoupage;0.081130698;0.048161000;0.048161000;0.000000000
|
||||||
|
26;2;normalisation;0.119043098;0.087924000;0.078516000;0.009408000
|
||||||
|
27;1;normalisation;0.078182844;0.053847000;0.053847000;0.000000000
|
||||||
|
27;2;decoupage;0.074151354;0.048917000;0.048917000;0.000000000
|
||||||
|
28;1;decoupage;0.075701689;0.049406000;0.049406000;0.000000000
|
||||||
|
28;2;normalisation;0.083841894;0.055895000;0.052957000;0.002938000
|
||||||
|
29;1;normalisation;0.085386498;0.054614000;0.054614000;0.000000000
|
||||||
|
29;2;decoupage;0.118421751;0.084560000;0.078032000;0.006528000
|
||||||
|
30;1;decoupage;0.110804120;0.075276000;0.075276000;0.000000000
|
||||||
|
30;2;normalisation;0.096160804;0.058503000;0.058503000;0.000000000
|
||||||
|
31;1;normalisation;0.084021302;0.058931000;0.055848000;0.003083000
|
||||||
|
31;2;decoupage;0.101838876;0.075659000;0.065788000;0.009871000
|
||||||
|
32;1;decoupage;0.103077891;0.075699000;0.069127000;0.006572000
|
||||||
|
32;2;normalisation;0.078340598;0.052816000;0.043481000;0.009335000
|
||||||
|
33;1;normalisation;0.077510008;0.054685000;0.054685000;0.000000000
|
||||||
|
33;2;decoupage;0.075927998;0.048442000;0.045406000;0.003036000
|
||||||
|
34;1;decoupage;0.085126298;0.049132000;0.049132000;0.000000000
|
||||||
|
34;2;normalisation;0.086433030;0.058404000;0.058404000;0.000000000
|
||||||
|
35;1;normalisation;0.079036812;0.053484000;0.053484000;0.000000000
|
||||||
|
35;2;decoupage;0.074087800;0.047513000;0.044337000;0.003176000
|
||||||
|
36;1;decoupage;0.076034234;0.046593000;0.046593000;0.000000000
|
||||||
|
36;2;normalisation;0.080232906;0.053331000;0.049986000;0.003345000
|
||||||
|
37;1;normalisation;0.080259313;0.052903000;0.052903000;0.000000000
|
||||||
|
37;2;decoupage;0.078727491;0.048263000;0.048263000;0.000000000
|
||||||
|
38;1;decoupage;0.082345265;0.048775000;0.045511000;0.003264000
|
||||||
|
38;2;normalisation;0.085401830;0.053081000;0.046822000;0.006259000
|
||||||
|
39;1;normalisation;0.087125157;0.054045000;0.050672000;0.003373000
|
||||||
|
39;2;decoupage;0.085990699;0.052955000;0.049640000;0.003315000
|
||||||
|
40;1;decoupage;0.095500738;0.062192000;0.059158000;0.003034000
|
||||||
|
40;2;normalisation;0.081692650;0.054493000;0.051075000;0.003418000
|
||||||
|
41;1;normalisation;0.083779548;0.053721000;0.050554000;0.003167000
|
||||||
|
41;2;decoupage;0.107384460;0.079632000;0.079632000;0.000000000
|
||||||
|
42;1;decoupage;0.077822528;0.049391000;0.046097000;0.003294000
|
||||||
|
42;2;normalisation;0.091810990;0.054198000;0.051011000;0.003187000
|
||||||
|
43;1;normalisation;0.118135004;0.086285000;0.082959000;0.003326000
|
||||||
|
43;2;decoupage;0.109951491;0.076873000;0.073542000;0.003331000
|
||||||
|
44;1;decoupage;0.091871545;0.063580000;0.060232000;0.003348000
|
||||||
|
44;2;normalisation;0.089916762;0.054942000;0.051507000;0.003435000
|
||||||
|
45;1;normalisation;0.088390574;0.056449000;0.056449000;0.000000000
|
||||||
|
45;2;decoupage;0.088286201;0.051874000;0.051874000;0.000000000
|
||||||
|
46;1;decoupage;0.107611359;0.080214000;0.076995000;0.003219000
|
||||||
|
46;2;normalisation;0.081143835;0.053834000;0.053834000;0.000000000
|
||||||
|
47;1;normalisation;0.116520885;0.088303000;0.078827000;0.009476000
|
||||||
|
47;2;decoupage;0.078122386;0.051368000;0.048164000;0.003204000
|
||||||
|
48;1;decoupage;0.075640486;0.048041000;0.044831000;0.003210000
|
||||||
|
48;2;normalisation;0.085947676;0.055347000;0.048823000;0.006524000
|
||||||
|
49;1;normalisation;0.111680766;0.085783000;0.079436000;0.006347000
|
||||||
|
49;2;decoupage;0.116693463;0.079256000;0.079256000;0.000000000
|
||||||
|
50;1;decoupage;0.091055658;0.055567000;0.052477000;0.003090000
|
||||||
|
50;2;normalisation;0.080353565;0.054549000;0.054549000;0.000000000
|
||||||
|
@@ -0,0 +1,95 @@
|
|||||||
|
{
|
||||||
|
"machine": "salle235-06",
|
||||||
|
"processeur": "Intel(R) Core(TM) i7-8700 CPU @ 3.20GHz",
|
||||||
|
"cpu_logique": 0,
|
||||||
|
"compilateur": "gcc (GCC) 16.2.1 20260810",
|
||||||
|
"options": [
|
||||||
|
"-std=c11",
|
||||||
|
"-Wall",
|
||||||
|
"-Wextra",
|
||||||
|
"-Wpedantic",
|
||||||
|
"-O0"
|
||||||
|
],
|
||||||
|
"profiling": false,
|
||||||
|
"reference_commit": "875af6fe9eaee7a2a9a997c7fe4102d216a1b9fb",
|
||||||
|
"chemin_source": "src/analyseur.c",
|
||||||
|
"source_sha256": {
|
||||||
|
"normalisation": "fa529c2b8589dbceda26c40eae2019648cc56785c6462e61b70dac8cfe1a2d01",
|
||||||
|
"decoupage": "1d43a007a7298d5ca1b1cbdf7a53f2e9ce6eb58196d29f3a38ceb0e04fe4e8e0"
|
||||||
|
},
|
||||||
|
"chauffe_par_version": 5,
|
||||||
|
"mesures_par_version": 50,
|
||||||
|
"executions_verifiees": 110,
|
||||||
|
"horloge_reelle": "time.perf_counter, lancement et attente du processus inclus",
|
||||||
|
"quartiles": "statistics.quantiles(method=\"inclusive\")",
|
||||||
|
"empreinte_rapport": "1d53de903efd2b7c",
|
||||||
|
"allocations_contenu_lignes": {
|
||||||
|
"normalisation": 21746,
|
||||||
|
"decoupage": 0
|
||||||
|
},
|
||||||
|
"octets_alloues_contenu_lignes": {
|
||||||
|
"normalisation": 1561330,
|
||||||
|
"decoupage": 0
|
||||||
|
},
|
||||||
|
"normalisation": {
|
||||||
|
"reel_s": {
|
||||||
|
"mediane": 0.08435958599989135,
|
||||||
|
"q1": 0.08066259450015423,
|
||||||
|
"q3": 0.0898472110000057,
|
||||||
|
"min": 0.0769000129998858,
|
||||||
|
"max": 0.12227065299975948
|
||||||
|
},
|
||||||
|
"cpu_s": {
|
||||||
|
"mediane": 0.0547485,
|
||||||
|
"q1": 0.053884749999999995,
|
||||||
|
"q3": 0.05823075,
|
||||||
|
"min": 0.052816,
|
||||||
|
"max": 0.091533
|
||||||
|
},
|
||||||
|
"rss_max_kio": {
|
||||||
|
"mediane": 6688,
|
||||||
|
"q1": 6688.0,
|
||||||
|
"q3": 6692.0,
|
||||||
|
"min": 6676,
|
||||||
|
"max": 6692
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"decoupage": {
|
||||||
|
"reel_s": {
|
||||||
|
"mediane": 0.07960066200007532,
|
||||||
|
"q1": 0.07565578674984863,
|
||||||
|
"q3": 0.09043327800020506,
|
||||||
|
"min": 0.06752543699985836,
|
||||||
|
"max": 0.11842175099991437
|
||||||
|
},
|
||||||
|
"cpu_s": {
|
||||||
|
"mediane": 0.0493845,
|
||||||
|
"q1": 0.04834374999999999,
|
||||||
|
"q3": 0.058732,
|
||||||
|
"min": 0.046592999999999996,
|
||||||
|
"max": 0.08456
|
||||||
|
},
|
||||||
|
"rss_max_kio": {
|
||||||
|
"mediane": 4896,
|
||||||
|
"q1": 4884.0,
|
||||||
|
"q3": 4900.0,
|
||||||
|
"min": 4880,
|
||||||
|
"max": 4900
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"gain_reel_pourcent": 5.641236788220083,
|
||||||
|
"gain_cpu_pourcent": 9.797528699416425,
|
||||||
|
"paires_plus_rapides": {
|
||||||
|
"reel_s": 36,
|
||||||
|
"cpu_s": 39
|
||||||
|
},
|
||||||
|
"mesure_cpu": "os.wait4 : ru_utime + ru_stime du processus fils",
|
||||||
|
"mesure_memoire": {
|
||||||
|
"methode": "/usr/bin/time -f %M, dans une série distincte sur le même CPU",
|
||||||
|
"mesures_par_version": 5,
|
||||||
|
"fichier": "comparaison_decoupage_memoire.csv",
|
||||||
|
"note": "Le ru_maxrss du lancement direct depuis Python héritait de son pic mémoire (21 420 Kio) ; il a été écarté au profit du processus fils de GNU time."
|
||||||
|
},
|
||||||
|
"executions_verifiees_memoire": 10,
|
||||||
|
"repertoire_execution": "build/verification_decoupage_arnsavcd"
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
paire;ordre;version;rss_max_kio
|
||||||
|
1;1;normalisation;6688
|
||||||
|
1;2;decoupage;4900
|
||||||
|
2;1;decoupage;4896
|
||||||
|
2;2;normalisation;6692
|
||||||
|
3;1;normalisation;6692
|
||||||
|
3;2;decoupage;4900
|
||||||
|
4;1;decoupage;4884
|
||||||
|
4;2;normalisation;6688
|
||||||
|
5;1;normalisation;6676
|
||||||
|
5;2;decoupage;4880
|
||||||
|
@@ -0,0 +1,158 @@
|
|||||||
|
Flat profile:
|
||||||
|
|
||||||
|
Each sample counts as 0.01 seconds.
|
||||||
|
% cumulative self self total
|
||||||
|
time seconds seconds calls ms/call ms/call name
|
||||||
|
14.29 0.01 0.01 250000 0.00 0.00 est_mot_vide
|
||||||
|
14.29 0.02 0.01 150182 0.00 0.00 chercher_mot
|
||||||
|
14.29 0.03 0.01 150182 0.00 0.00 compter_mot
|
||||||
|
14.29 0.04 0.01 21746 0.00 0.00 compter_mots_ligne
|
||||||
|
14.29 0.05 0.01 1 10.00 10.00 analyser_bigrammes
|
||||||
|
14.29 0.06 0.01 1 10.00 10.00 decouper_lignes
|
||||||
|
14.29 0.07 0.01 1 10.00 10.00 generer_texte
|
||||||
|
0.00 0.07 0.00 928117 0.00 0.00 alea
|
||||||
|
0.00 0.07 0.00 355573 0.00 0.00 egales
|
||||||
|
0.00 0.07 0.00 293223 0.00 0.00 hacher_mot
|
||||||
|
0.00 0.07 0.00 129602 0.00 0.00 doit_echanger
|
||||||
|
0.00 0.07 0.00 32813 0.00 0.00 comparer
|
||||||
|
0.00 0.07 0.00 26801 0.00 0.00 ajouter
|
||||||
|
0.00 0.07 0.00 21746 0.00 0.00 normaliser_ligne
|
||||||
|
0.00 0.07 0.00 8798 0.00 0.00 retablir_tas
|
||||||
|
0.00 0.07 0.00 5866 0.00 0.00 copier
|
||||||
|
0.00 0.07 0.00 1 0.00 0.00 construire_rapport
|
||||||
|
0.00 0.07 0.00 1 0.00 0.00 ecart_type_longueur
|
||||||
|
0.00 0.07 0.00 1 0.00 0.00 empreinte
|
||||||
|
0.00 0.07 0.00 1 0.00 0.00 generer_vocabulaire
|
||||||
|
0.00 0.07 0.00 1 0.00 0.00 initialiser_mots_vides
|
||||||
|
0.00 0.07 0.00 1 0.00 0.00 longueur_moyenne
|
||||||
|
0.00 0.07 0.00 1 0.00 0.00 racine
|
||||||
|
0.00 0.07 0.00 1 0.00 0.00 trier_entrees
|
||||||
|
|
||||||
|
Call graph
|
||||||
|
|
||||||
|
|
||||||
|
granularity: each sample hit covers 4 byte(s) for 14.29% of 0.07 seconds
|
||||||
|
|
||||||
|
index % time self children called name
|
||||||
|
<spontaneous>
|
||||||
|
[1] 100.0 0.00 0.07 main [1]
|
||||||
|
0.01 0.03 21746/21746 compter_mots_ligne [2]
|
||||||
|
0.01 0.00 1/1 generer_texte [8]
|
||||||
|
0.01 0.00 1/1 decouper_lignes [7]
|
||||||
|
0.01 0.00 1/1 analyser_bigrammes [6]
|
||||||
|
0.00 0.00 21746/21746 normaliser_ligne [15]
|
||||||
|
0.00 0.00 1/1 generer_vocabulaire [21]
|
||||||
|
0.00 0.00 1/1 trier_entrees [25]
|
||||||
|
0.00 0.00 1/1 longueur_moyenne [23]
|
||||||
|
0.00 0.00 1/1 ecart_type_longueur [19]
|
||||||
|
0.00 0.00 1/1 racine [24]
|
||||||
|
0.00 0.00 1/1 construire_rapport [18]
|
||||||
|
0.00 0.00 1/1 empreinte [20]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.01 0.03 21746/21746 main [1]
|
||||||
|
[2] 57.1 0.01 0.03 21746 compter_mots_ligne [2]
|
||||||
|
0.01 0.01 150182/150182 compter_mot [3]
|
||||||
|
0.01 0.00 250000/250000 est_mot_vide [4]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.01 0.01 150182/150182 compter_mots_ligne [2]
|
||||||
|
[3] 28.6 0.01 0.01 150182 compter_mot [3]
|
||||||
|
0.01 0.00 150182/150182 chercher_mot [5]
|
||||||
|
0.00 0.00 5866/5866 copier [17]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.01 0.00 250000/250000 compter_mots_ligne [2]
|
||||||
|
[4] 14.3 0.01 0.00 250000 est_mot_vide [4]
|
||||||
|
0.00 0.00 202444/355573 egales [10]
|
||||||
|
0.00 0.00 142981/293223 hacher_mot [11]
|
||||||
|
0.00 0.00 1/1 initialiser_mots_vides [22]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.01 0.00 150182/150182 compter_mot [3]
|
||||||
|
[5] 14.3 0.01 0.00 150182 chercher_mot [5]
|
||||||
|
0.00 0.00 153101/355573 egales [10]
|
||||||
|
0.00 0.00 150182/293223 hacher_mot [11]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.01 0.00 1/1 main [1]
|
||||||
|
[6] 14.3 0.01 0.00 1 analyser_bigrammes [6]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.01 0.00 1/1 main [1]
|
||||||
|
[7] 14.3 0.01 0.00 1 decouper_lignes [7]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.01 0.00 1/1 main [1]
|
||||||
|
[8] 14.3 0.01 0.00 1 generer_texte [8]
|
||||||
|
0.00 0.00 900183/928117 alea [9]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.00 0.00 27934/928117 generer_vocabulaire [21]
|
||||||
|
0.00 0.00 900183/928117 generer_texte [8]
|
||||||
|
[9] 0.0 0.00 0.00 928117 alea [9]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.00 0.00 28/355573 initialiser_mots_vides [22]
|
||||||
|
0.00 0.00 153101/355573 chercher_mot [5]
|
||||||
|
0.00 0.00 202444/355573 est_mot_vide [4]
|
||||||
|
[10] 0.0 0.00 0.00 355573 egales [10]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.00 0.00 60/293223 initialiser_mots_vides [22]
|
||||||
|
0.00 0.00 142981/293223 est_mot_vide [4]
|
||||||
|
0.00 0.00 150182/293223 chercher_mot [5]
|
||||||
|
[11] 0.0 0.00 0.00 293223 hacher_mot [11]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.00 0.00 129602/129602 retablir_tas [16]
|
||||||
|
[12] 0.0 0.00 0.00 129602 doit_echanger [12]
|
||||||
|
0.00 0.00 32813/32813 comparer [13]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.00 0.00 32813/32813 doit_echanger [12]
|
||||||
|
[13] 0.0 0.00 0.00 32813 comparer [13]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.00 0.00 5867/26801 construire_rapport [18]
|
||||||
|
0.00 0.00 20934/26801 generer_vocabulaire [21]
|
||||||
|
[14] 0.0 0.00 0.00 26801 ajouter [14]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.00 0.00 21746/21746 main [1]
|
||||||
|
[15] 0.0 0.00 0.00 21746 normaliser_ligne [15]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.00 0.00 8798/8798 trier_entrees [25]
|
||||||
|
[16] 0.0 0.00 0.00 8798 retablir_tas [16]
|
||||||
|
0.00 0.00 129602/129602 doit_echanger [12]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.00 0.00 5866/5866 compter_mot [3]
|
||||||
|
[17] 0.0 0.00 0.00 5866 copier [17]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.00 0.00 1/1 main [1]
|
||||||
|
[18] 0.0 0.00 0.00 1 construire_rapport [18]
|
||||||
|
0.00 0.00 5867/26801 ajouter [14]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.00 0.00 1/1 main [1]
|
||||||
|
[19] 0.0 0.00 0.00 1 ecart_type_longueur [19]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.00 0.00 1/1 main [1]
|
||||||
|
[20] 0.0 0.00 0.00 1 empreinte [20]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.00 0.00 1/1 main [1]
|
||||||
|
[21] 0.0 0.00 0.00 1 generer_vocabulaire [21]
|
||||||
|
0.00 0.00 27934/928117 alea [9]
|
||||||
|
0.00 0.00 20934/26801 ajouter [14]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.00 0.00 1/1 est_mot_vide [4]
|
||||||
|
[22] 0.0 0.00 0.00 1 initialiser_mots_vides [22]
|
||||||
|
0.00 0.00 60/293223 hacher_mot [11]
|
||||||
|
0.00 0.00 28/355573 egales [10]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.00 0.00 1/1 main [1]
|
||||||
|
[23] 0.0 0.00 0.00 1 longueur_moyenne [23]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.00 0.00 1/1 main [1]
|
||||||
|
[24] 0.0 0.00 0.00 1 racine [24]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.00 0.00 1/1 main [1]
|
||||||
|
[25] 0.0 0.00 0.00 1 trier_entrees [25]
|
||||||
|
0.00 0.00 8798/8798 retablir_tas [16]
|
||||||
|
-----------------------------------------------
|
||||||
|
|
||||||
|
Index by function name
|
||||||
|
|
||||||
|
[14] ajouter [17] copier [21] generer_vocabulaire
|
||||||
|
[9] alea [7] decouper_lignes [11] hacher_mot
|
||||||
|
[6] analyser_bigrammes [12] doit_echanger [22] initialiser_mots_vides
|
||||||
|
[5] chercher_mot [19] ecart_type_longueur [23] longueur_moyenne
|
||||||
|
[13] comparer [10] egales [15] normaliser_ligne
|
||||||
|
[3] compter_mot [20] empreinte [24] racine
|
||||||
|
[2] compter_mots_ligne [4] est_mot_vide [16] retablir_tas
|
||||||
|
[18] construire_rapport [8] generer_texte [25] trier_entrees
|
||||||
@@ -0,0 +1,163 @@
|
|||||||
|
Flat profile:
|
||||||
|
|
||||||
|
Each sample counts as 0.01 seconds.
|
||||||
|
% cumulative self self total
|
||||||
|
time seconds seconds calls ms/call ms/call name
|
||||||
|
20.38 0.32 0.32 1 320.00 329.99 generer_texte
|
||||||
|
17.83 0.60 0.28 1 280.00 280.00 analyser_bigrammes
|
||||||
|
10.83 0.77 0.17 14463795 0.00 0.00 egales
|
||||||
|
10.19 0.93 0.16 869827 0.00 0.00 compter_mots_ligne
|
||||||
|
8.92 1.07 0.14 869827 0.00 0.00 normaliser_ligne
|
||||||
|
7.64 1.19 0.12 11729593 0.00 0.00 hacher_mot
|
||||||
|
7.64 1.31 0.12 5998884 0.00 0.00 chercher_mot
|
||||||
|
7.64 1.43 0.12 1 120.00 120.00 decouper_lignes
|
||||||
|
5.10 1.51 0.08 10000000 0.00 0.00 est_mot_vide
|
||||||
|
1.91 1.54 0.03 5998884 0.00 0.00 compter_mot
|
||||||
|
1.27 1.56 0.02 _init
|
||||||
|
0.64 1.57 0.01 36026819 0.00 0.00 alea
|
||||||
|
0.00 1.57 0.00 135315 0.00 0.00 doit_echanger
|
||||||
|
0.00 1.57 0.00 27033 0.00 0.00 ajouter
|
||||||
|
0.00 1.57 0.00 9146 0.00 0.00 retablir_tas
|
||||||
|
0.00 1.57 0.00 6706 0.00 0.00 comparer
|
||||||
|
0.00 1.57 0.00 6098 0.00 0.00 copier
|
||||||
|
0.00 1.57 0.00 1 0.00 0.00 construire_rapport
|
||||||
|
0.00 1.57 0.00 1 0.00 0.00 ecart_type_longueur
|
||||||
|
0.00 1.57 0.00 1 0.00 0.00 empreinte
|
||||||
|
0.00 1.57 0.00 1 0.00 0.01 generer_vocabulaire
|
||||||
|
0.00 1.57 0.00 1 0.00 0.00 initialiser_mots_vides
|
||||||
|
0.00 1.57 0.00 1 0.00 0.00 longueur_moyenne
|
||||||
|
0.00 1.57 0.00 1 0.00 0.00 racine
|
||||||
|
0.00 1.57 0.00 1 0.00 0.00 trier_entrees
|
||||||
|
|
||||||
|
Call graph
|
||||||
|
|
||||||
|
|
||||||
|
granularity: each sample hit covers 4 byte(s) for 0.64% of 1.57 seconds
|
||||||
|
|
||||||
|
index % time self children called name
|
||||||
|
<spontaneous>
|
||||||
|
[1] 98.7 0.00 1.55 main [1]
|
||||||
|
0.16 0.52 869827/869827 compter_mots_ligne [2]
|
||||||
|
0.32 0.01 1/1 generer_texte [3]
|
||||||
|
0.28 0.00 1/1 analyser_bigrammes [5]
|
||||||
|
0.14 0.00 869827/869827 normaliser_ligne [9]
|
||||||
|
0.12 0.00 1/1 decouper_lignes [11]
|
||||||
|
0.00 0.00 1/1 generer_vocabulaire [14]
|
||||||
|
0.00 0.00 1/1 trier_entrees [26]
|
||||||
|
0.00 0.00 1/1 longueur_moyenne [24]
|
||||||
|
0.00 0.00 1/1 ecart_type_longueur [22]
|
||||||
|
0.00 0.00 1/1 racine [25]
|
||||||
|
0.00 0.00 1/1 construire_rapport [21]
|
||||||
|
0.00 0.00 1/1 empreinte [23]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.16 0.52 869827/869827 main [1]
|
||||||
|
[2] 43.3 0.16 0.52 869827 compter_mots_ligne [2]
|
||||||
|
0.03 0.26 5998884/5998884 compter_mot [4]
|
||||||
|
0.08 0.15 10000000/10000000 est_mot_vide [7]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.32 0.01 1/1 main [1]
|
||||||
|
[3] 21.0 0.32 0.01 1 generer_texte [3]
|
||||||
|
0.01 0.00 35998885/36026819 alea [13]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.03 0.26 5998884/5998884 compter_mots_ligne [2]
|
||||||
|
[4] 18.2 0.03 0.26 5998884 compter_mot [4]
|
||||||
|
0.12 0.14 5998884/5998884 chercher_mot [6]
|
||||||
|
0.00 0.00 6098/6098 copier [20]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.28 0.00 1/1 main [1]
|
||||||
|
[5] 17.8 0.28 0.00 1 analyser_bigrammes [5]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.12 0.14 5998884/5998884 compter_mot [4]
|
||||||
|
[6] 16.3 0.12 0.14 5998884 chercher_mot [6]
|
||||||
|
0.07 0.00 6347060/14463795 egales [8]
|
||||||
|
0.06 0.00 5998884/11729593 hacher_mot [10]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.08 0.15 10000000/10000000 compter_mots_ligne [2]
|
||||||
|
[7] 14.9 0.08 0.15 10000000 est_mot_vide [7]
|
||||||
|
0.10 0.00 8116707/14463795 egales [8]
|
||||||
|
0.06 0.00 5730649/11729593 hacher_mot [10]
|
||||||
|
0.00 0.00 1/1 initialiser_mots_vides [15]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.00 0.00 28/14463795 initialiser_mots_vides [15]
|
||||||
|
0.07 0.00 6347060/14463795 chercher_mot [6]
|
||||||
|
0.10 0.00 8116707/14463795 est_mot_vide [7]
|
||||||
|
[8] 10.8 0.17 0.00 14463795 egales [8]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.14 0.00 869827/869827 main [1]
|
||||||
|
[9] 8.9 0.14 0.00 869827 normaliser_ligne [9]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.00 0.00 60/11729593 initialiser_mots_vides [15]
|
||||||
|
0.06 0.00 5730649/11729593 est_mot_vide [7]
|
||||||
|
0.06 0.00 5998884/11729593 chercher_mot [6]
|
||||||
|
[10] 7.6 0.12 0.00 11729593 hacher_mot [10]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.12 0.00 1/1 main [1]
|
||||||
|
[11] 7.6 0.12 0.00 1 decouper_lignes [11]
|
||||||
|
-----------------------------------------------
|
||||||
|
<spontaneous>
|
||||||
|
[12] 1.3 0.02 0.00 _init [12]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.00 0.00 27934/36026819 generer_vocabulaire [14]
|
||||||
|
0.01 0.00 35998885/36026819 generer_texte [3]
|
||||||
|
[13] 0.6 0.01 0.00 36026819 alea [13]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.00 0.00 1/1 main [1]
|
||||||
|
[14] 0.0 0.00 0.00 1 generer_vocabulaire [14]
|
||||||
|
0.00 0.00 27934/36026819 alea [13]
|
||||||
|
0.00 0.00 20934/27033 ajouter [17]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.00 0.00 1/1 est_mot_vide [7]
|
||||||
|
[15] 0.0 0.00 0.00 1 initialiser_mots_vides [15]
|
||||||
|
0.00 0.00 60/11729593 hacher_mot [10]
|
||||||
|
0.00 0.00 28/14463795 egales [8]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.00 0.00 135315/135315 retablir_tas [18]
|
||||||
|
[16] 0.0 0.00 0.00 135315 doit_echanger [16]
|
||||||
|
0.00 0.00 6706/6706 comparer [19]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.00 0.00 6099/27033 construire_rapport [21]
|
||||||
|
0.00 0.00 20934/27033 generer_vocabulaire [14]
|
||||||
|
[17] 0.0 0.00 0.00 27033 ajouter [17]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.00 0.00 9146/9146 trier_entrees [26]
|
||||||
|
[18] 0.0 0.00 0.00 9146 retablir_tas [18]
|
||||||
|
0.00 0.00 135315/135315 doit_echanger [16]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.00 0.00 6706/6706 doit_echanger [16]
|
||||||
|
[19] 0.0 0.00 0.00 6706 comparer [19]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.00 0.00 6098/6098 compter_mot [4]
|
||||||
|
[20] 0.0 0.00 0.00 6098 copier [20]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.00 0.00 1/1 main [1]
|
||||||
|
[21] 0.0 0.00 0.00 1 construire_rapport [21]
|
||||||
|
0.00 0.00 6099/27033 ajouter [17]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.00 0.00 1/1 main [1]
|
||||||
|
[22] 0.0 0.00 0.00 1 ecart_type_longueur [22]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.00 0.00 1/1 main [1]
|
||||||
|
[23] 0.0 0.00 0.00 1 empreinte [23]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.00 0.00 1/1 main [1]
|
||||||
|
[24] 0.0 0.00 0.00 1 longueur_moyenne [24]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.00 0.00 1/1 main [1]
|
||||||
|
[25] 0.0 0.00 0.00 1 racine [25]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.00 0.00 1/1 main [1]
|
||||||
|
[26] 0.0 0.00 0.00 1 trier_entrees [26]
|
||||||
|
0.00 0.00 9146/9146 retablir_tas [18]
|
||||||
|
-----------------------------------------------
|
||||||
|
|
||||||
|
Index by function name
|
||||||
|
|
||||||
|
[12] _init [20] copier [10] hacher_mot
|
||||||
|
[17] ajouter [11] decouper_lignes [15] initialiser_mots_vides
|
||||||
|
[13] alea [16] doit_echanger [24] longueur_moyenne
|
||||||
|
[5] analyser_bigrammes [22] ecart_type_longueur [9] normaliser_ligne
|
||||||
|
[6] chercher_mot [8] egales [25] racine
|
||||||
|
[19] comparer [23] empreinte [18] retablir_tas
|
||||||
|
[4] compter_mot [7] est_mot_vide [26] trier_entrees
|
||||||
|
[2] compter_mots_ligne [3] generer_texte
|
||||||
|
[21] construire_rapport [14] generer_vocabulaire
|
||||||
@@ -0,0 +1,160 @@
|
|||||||
|
Flat profile:
|
||||||
|
|
||||||
|
Each sample counts as 0.01 seconds.
|
||||||
|
% cumulative self self total
|
||||||
|
time seconds seconds calls ms/call ms/call name
|
||||||
|
17.58 0.29 0.29 1 290.00 290.00 analyser_bigrammes
|
||||||
|
16.97 0.57 0.28 1 280.00 280.00 decouper_lignes
|
||||||
|
13.94 0.80 0.23 869827 0.00 0.00 compter_mots_ligne
|
||||||
|
13.33 1.02 0.22 1 220.00 259.97 generer_texte
|
||||||
|
12.73 1.23 0.21 14463795 0.00 0.00 egales
|
||||||
|
6.67 1.34 0.11 869827 0.00 0.00 normaliser_ligne
|
||||||
|
4.85 1.42 0.08 11729593 0.00 0.00 hacher_mot
|
||||||
|
4.24 1.49 0.07 5998884 0.00 0.00 chercher_mot
|
||||||
|
3.33 1.54 0.06 10000000 0.00 0.00 est_mot_vide
|
||||||
|
2.42 1.58 0.04 36026819 0.00 0.00 alea
|
||||||
|
2.42 1.62 0.04 5998884 0.00 0.00 compter_mot
|
||||||
|
1.21 1.65 0.02 main
|
||||||
|
0.30 1.65 0.01 1 5.00 5.00 initialiser_mots_vides
|
||||||
|
0.00 1.65 0.00 135315 0.00 0.00 doit_echanger
|
||||||
|
0.00 1.65 0.00 27033 0.00 0.00 ajouter
|
||||||
|
0.00 1.65 0.00 9146 0.00 0.00 retablir_tas
|
||||||
|
0.00 1.65 0.00 6706 0.00 0.00 comparer
|
||||||
|
0.00 1.65 0.00 6098 0.00 0.00 copier
|
||||||
|
0.00 1.65 0.00 1 0.00 0.00 construire_rapport
|
||||||
|
0.00 1.65 0.00 1 0.00 0.00 ecart_type_longueur
|
||||||
|
0.00 1.65 0.00 1 0.00 0.00 empreinte
|
||||||
|
0.00 1.65 0.00 1 0.00 0.03 generer_vocabulaire
|
||||||
|
0.00 1.65 0.00 1 0.00 0.00 longueur_moyenne
|
||||||
|
0.00 1.65 0.00 1 0.00 0.00 racine
|
||||||
|
0.00 1.65 0.00 1 0.00 0.00 trier_entrees
|
||||||
|
|
||||||
|
Call graph
|
||||||
|
|
||||||
|
|
||||||
|
granularity: each sample hit covers 4 byte(s) for 0.61% of 1.65 seconds
|
||||||
|
|
||||||
|
index % time self children called name
|
||||||
|
<spontaneous>
|
||||||
|
[1] 100.0 0.02 1.63 main [1]
|
||||||
|
0.23 0.46 869827/869827 compter_mots_ligne [2]
|
||||||
|
0.29 0.00 1/1 analyser_bigrammes [3]
|
||||||
|
0.28 0.00 1/1 decouper_lignes [4]
|
||||||
|
0.22 0.04 1/1 generer_texte [5]
|
||||||
|
0.11 0.00 869827/869827 normaliser_ligne [10]
|
||||||
|
0.00 0.00 1/1 generer_vocabulaire [14]
|
||||||
|
0.00 0.00 1/1 trier_entrees [25]
|
||||||
|
0.00 0.00 1/1 longueur_moyenne [23]
|
||||||
|
0.00 0.00 1/1 ecart_type_longueur [21]
|
||||||
|
0.00 0.00 1/1 racine [24]
|
||||||
|
0.00 0.00 1/1 construire_rapport [20]
|
||||||
|
0.00 0.00 1/1 empreinte [22]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.23 0.46 869827/869827 main [1]
|
||||||
|
[2] 41.8 0.23 0.46 869827 compter_mots_ligne [2]
|
||||||
|
0.04 0.20 5998884/5998884 compter_mot [6]
|
||||||
|
0.06 0.16 10000000/10000000 est_mot_vide [7]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.29 0.00 1/1 main [1]
|
||||||
|
[3] 17.6 0.29 0.00 1 analyser_bigrammes [3]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.28 0.00 1/1 main [1]
|
||||||
|
[4] 17.0 0.28 0.00 1 decouper_lignes [4]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.22 0.04 1/1 main [1]
|
||||||
|
[5] 15.8 0.22 0.04 1 generer_texte [5]
|
||||||
|
0.04 0.00 35998885/36026819 alea [12]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.04 0.20 5998884/5998884 compter_mots_ligne [2]
|
||||||
|
[6] 14.7 0.04 0.20 5998884 compter_mot [6]
|
||||||
|
0.07 0.13 5998884/5998884 chercher_mot [9]
|
||||||
|
0.00 0.00 6098/6098 copier [19]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.06 0.16 10000000/10000000 compter_mots_ligne [2]
|
||||||
|
[7] 13.1 0.06 0.16 10000000 est_mot_vide [7]
|
||||||
|
0.12 0.00 8116707/14463795 egales [8]
|
||||||
|
0.04 0.00 5730649/11729593 hacher_mot [11]
|
||||||
|
0.01 0.00 1/1 initialiser_mots_vides [13]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.00 0.00 28/14463795 initialiser_mots_vides [13]
|
||||||
|
0.09 0.00 6347060/14463795 chercher_mot [9]
|
||||||
|
0.12 0.00 8116707/14463795 est_mot_vide [7]
|
||||||
|
[8] 12.7 0.21 0.00 14463795 egales [8]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.07 0.13 5998884/5998884 compter_mot [6]
|
||||||
|
[9] 12.3 0.07 0.13 5998884 chercher_mot [9]
|
||||||
|
0.09 0.00 6347060/14463795 egales [8]
|
||||||
|
0.04 0.00 5998884/11729593 hacher_mot [11]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.11 0.00 869827/869827 main [1]
|
||||||
|
[10] 6.7 0.11 0.00 869827 normaliser_ligne [10]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.00 0.00 60/11729593 initialiser_mots_vides [13]
|
||||||
|
0.04 0.00 5730649/11729593 est_mot_vide [7]
|
||||||
|
0.04 0.00 5998884/11729593 chercher_mot [9]
|
||||||
|
[11] 4.8 0.08 0.00 11729593 hacher_mot [11]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.00 0.00 27934/36026819 generer_vocabulaire [14]
|
||||||
|
0.04 0.00 35998885/36026819 generer_texte [5]
|
||||||
|
[12] 2.4 0.04 0.00 36026819 alea [12]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.01 0.00 1/1 est_mot_vide [7]
|
||||||
|
[13] 0.3 0.01 0.00 1 initialiser_mots_vides [13]
|
||||||
|
0.00 0.00 60/11729593 hacher_mot [11]
|
||||||
|
0.00 0.00 28/14463795 egales [8]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.00 0.00 1/1 main [1]
|
||||||
|
[14] 0.0 0.00 0.00 1 generer_vocabulaire [14]
|
||||||
|
0.00 0.00 27934/36026819 alea [12]
|
||||||
|
0.00 0.00 20934/27033 ajouter [16]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.00 0.00 135315/135315 retablir_tas [17]
|
||||||
|
[15] 0.0 0.00 0.00 135315 doit_echanger [15]
|
||||||
|
0.00 0.00 6706/6706 comparer [18]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.00 0.00 6099/27033 construire_rapport [20]
|
||||||
|
0.00 0.00 20934/27033 generer_vocabulaire [14]
|
||||||
|
[16] 0.0 0.00 0.00 27033 ajouter [16]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.00 0.00 9146/9146 trier_entrees [25]
|
||||||
|
[17] 0.0 0.00 0.00 9146 retablir_tas [17]
|
||||||
|
0.00 0.00 135315/135315 doit_echanger [15]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.00 0.00 6706/6706 doit_echanger [15]
|
||||||
|
[18] 0.0 0.00 0.00 6706 comparer [18]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.00 0.00 6098/6098 compter_mot [6]
|
||||||
|
[19] 0.0 0.00 0.00 6098 copier [19]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.00 0.00 1/1 main [1]
|
||||||
|
[20] 0.0 0.00 0.00 1 construire_rapport [20]
|
||||||
|
0.00 0.00 6099/27033 ajouter [16]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.00 0.00 1/1 main [1]
|
||||||
|
[21] 0.0 0.00 0.00 1 ecart_type_longueur [21]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.00 0.00 1/1 main [1]
|
||||||
|
[22] 0.0 0.00 0.00 1 empreinte [22]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.00 0.00 1/1 main [1]
|
||||||
|
[23] 0.0 0.00 0.00 1 longueur_moyenne [23]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.00 0.00 1/1 main [1]
|
||||||
|
[24] 0.0 0.00 0.00 1 racine [24]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.00 0.00 1/1 main [1]
|
||||||
|
[25] 0.0 0.00 0.00 1 trier_entrees [25]
|
||||||
|
0.00 0.00 9146/9146 retablir_tas [17]
|
||||||
|
-----------------------------------------------
|
||||||
|
|
||||||
|
Index by function name
|
||||||
|
|
||||||
|
[16] ajouter [4] decouper_lignes [13] initialiser_mots_vides
|
||||||
|
[12] alea [15] doit_echanger [23] longueur_moyenne
|
||||||
|
[3] analyser_bigrammes [21] ecart_type_longueur [1] main
|
||||||
|
[9] chercher_mot [8] egales [10] normaliser_ligne
|
||||||
|
[18] comparer [22] empreinte [24] racine
|
||||||
|
[6] compter_mot [7] est_mot_vide [17] retablir_tas
|
||||||
|
[2] compter_mots_ligne [5] generer_texte [25] trier_entrees
|
||||||
|
[20] construire_rapport [14] generer_vocabulaire
|
||||||
|
[19] copier [11] hacher_mot
|
||||||
File diff suppressed because it is too large
Load Diff
+8
-9
@@ -24,7 +24,7 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
#define NB_MOTS_TEXTE 250000
|
#define NB_MOTS_TEXTE 10000000
|
||||||
#define NB_MOTS_VOCAB 7000
|
#define NB_MOTS_VOCAB 7000
|
||||||
#define TAILLE_MOT 32
|
#define TAILLE_MOT 32
|
||||||
#define MAX_MOTS_UNIQUES 20000
|
#define MAX_MOTS_UNIQUES 20000
|
||||||
@@ -172,7 +172,10 @@ char *generer_texte(char **vocab, int nb_mots)
|
|||||||
/* Découpage et normalisation */
|
/* Découpage et normalisation */
|
||||||
/* ------------------------------------------------------------------------ */
|
/* ------------------------------------------------------------------------ */
|
||||||
|
|
||||||
char **decouper_lignes(const char *texte, int *nb_lignes)
|
/* Remplace les '\n' par '\0' et renvoie des pointeurs dans texte.
|
||||||
|
* Les lignes restent valides tant que texte existe : ne pas les libérer
|
||||||
|
* individuellement. Seules les lignes terminées par '\n' sont retournées. */
|
||||||
|
char **decouper_lignes(char *texte, int *nb_lignes)
|
||||||
{
|
{
|
||||||
int capacite = 1024;
|
int capacite = 1024;
|
||||||
char **lignes = malloc(capacite * sizeof(char *));
|
char **lignes = malloc(capacite * sizeof(char *));
|
||||||
@@ -181,15 +184,12 @@ char **decouper_lignes(const char *texte, int *nb_lignes)
|
|||||||
|
|
||||||
for (int i = 0; texte[i] != '\0'; i++) {
|
for (int i = 0; texte[i] != '\0'; i++) {
|
||||||
if (texte[i] == '\n') {
|
if (texte[i] == '\n') {
|
||||||
int taille = i - debut;
|
|
||||||
if (n == capacite) {
|
if (n == capacite) {
|
||||||
capacite *= 2;
|
capacite *= 2;
|
||||||
lignes = realloc(lignes, capacite * sizeof(char *));
|
lignes = realloc(lignes, capacite * sizeof(char *));
|
||||||
}
|
}
|
||||||
lignes[n] = malloc(taille + 1);
|
lignes[n] = texte + debut;
|
||||||
for (int j = 0; j < taille; j++)
|
texte[i] = '\0';
|
||||||
lignes[n][j] = texte[debut + j];
|
|
||||||
lignes[n][taille] = '\0';
|
|
||||||
n++;
|
n++;
|
||||||
debut = i + 1;
|
debut = i + 1;
|
||||||
}
|
}
|
||||||
@@ -549,8 +549,7 @@ int main(void)
|
|||||||
|
|
||||||
free(rapport);
|
free(rapport);
|
||||||
free(table);
|
free(table);
|
||||||
for (int i = 0; i < nb_lignes; i++)
|
/* Les caractères des lignes appartiennent au tampon texte. */
|
||||||
free(lignes[i]);
|
|
||||||
free(lignes);
|
free(lignes);
|
||||||
free(texte);
|
free(texte);
|
||||||
for (int i = 0; i < NB_MOTS_VOCAB; i++)
|
for (int i = 0; i < NB_MOTS_VOCAB; i++)
|
||||||
|
|||||||
Reference in New Issue
Block a user