Increase maximum text word count and optimize line splitting function

This commit is contained in:
rabot
2026-10-07 16:42:17 +02:00
parent 875af6fe9e
commit 14c89b3963
15 changed files with 7148 additions and 27 deletions
+54 -7
View File
@@ -9,6 +9,9 @@
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.
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
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
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,
et la normalisation celle de cinquante exécutions. Chaque comparaison est
faite sur la même machine ; les conditions peuvent varier entre les étapes.
et les étapes de normalisation et de découpage celle de cinquante exécutions.
Chaque comparaison est faite sur la même machine ; les conditions peuvent
varier entre les étapes.
| 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 % |
| 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 % |
| 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
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
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
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**,
soit **96,1 % de temps en moins** sur ce jeu de données.
Le rapport et la sortie console sont identiques octet par octet.
L'empreinte reste **`1d53de903efd2b7c`**.
Sur le corpus de 250 000 mots, le rapport et la sortie console sont
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),
[profil initial](resultats/profils/00_initial.txt),
[profil actuel](resultats/profils/08_normalisation.txt),
[mesures du bilan après tri](resultats/mesures/mesures_bilan_tri.csv) et
[comparaison de normalisation](resultats/mesures/comparaison_normalisation_meme_pc.csv).
[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),
[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).
+2 -1
View File
@@ -4,6 +4,7 @@ CFLAGS ?= -std=c11 -Wall -Wextra -Wpedantic -O0
SOURCE = src/analyseur.c
PROGRAMME = build/analyseur
PROGRAMME_PROFIL = build/profil/analyseur
REFERENCE = resultats/rapport_reference_10000000.txt
.PHONY: all run check profile clean
@@ -17,7 +18,7 @@ run: $(PROGRAMME)
cd build && ./analyseur
check: run
cmp resultats/rapport_reference.txt build/rapport.txt
cmp $(REFERENCE) build/rapport.txt
$(PROGRAMME_PROFIL): $(SOURCE) Makefile
mkdir -p $(@D)
+17 -5
View File
@@ -1,8 +1,11 @@
# Analyseur de fréquence de mots — TD R5.A.04
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
**`1d53de903efd2b7c`**.
réduction du travail répété. Le programme traite désormais **10 000 000 mots**,
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
@@ -12,9 +15,11 @@ exemples/exemple.c Exemple de profiling fourni
docs/CONSIGNES.md Consignes originales du TD
docs/R5A04_Profiling_MM.pdf Support du cours
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/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é
build/ Fichiers générés localement, ignorés par Git
```
@@ -27,7 +32,7 @@ Depuis la racine du dépôt :
```bash
make # Compiler en -O0, sans instrumentation
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 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`
é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
- [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)
- [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 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
View File
@@ -697,3 +697,138 @@ chauffe incluse. L'empreinte reste **`1d53de903efd2b7c`**.
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),
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
View File
@@ -1,8 +1,10 @@
# Résultats conservés
Les profils suivent l'ordre des optimisations. Les commits indiqués
contiennent les versions de `analyseur.c` utilisées à ces étapes, avant
le déplacement des sources dans `src/`.
Les profils 00 à 09 portent sur **250 000 mots** et suivent l'ordre des
optimisations. Les commits des étapes
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 |
| --- | --- | --- |
@@ -15,6 +17,7 @@ le déplacement des sources dans `src/`.
| 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` |
| 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
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)
précisent la machine, le compilateur, les sources et le protocole.
Le [rapport de référence](rapport_reference.txt) conserve l'empreinte
`1d53de903efd2b7c`. `make check` compare le rapport courant à ce fichier.
La [comparaison du découpage](mesures/comparaison_decoupage_meme_pc.csv)
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
[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
1 paire ordre version reel_s cpu_s utilisateur_s systeme_s rss_max_kio
2 1 1 avant_decoupage 2.041986573 1.960000000 1.930000000 0.030000000 145776
3 1 2 apres_decoupage 1.767853857 1.720000000 1.710000000 0.010000000 71796
4 2 1 apres_decoupage 1.764871005 1.720000000 1.710000000 0.010000000 72312
5 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
1 paire ordre version reel_s cpu_s utilisateur_s systeme_s
2 1 1 normalisation 0.098564077 0.066697000 0.063348000 0.003349000
3 1 2 decoupage 0.077939649 0.049954000 0.046830000 0.003124000
4 2 1 decoupage 0.079878005 0.049596000 0.049596000 0.000000000
5 2 2 normalisation 0.086629509 0.057711000 0.057711000 0.000000000
6 3 1 normalisation 0.086206658 0.054246000 0.054246000 0.000000000
7 3 2 decoupage 0.077741974 0.048682000 0.045429000 0.003253000
8 4 1 decoupage 0.076489187 0.050586000 0.050586000 0.000000000
9 4 2 normalisation 0.081969255 0.055426000 0.048897000 0.006529000
10 5 1 normalisation 0.084525585 0.055295000 0.055295000 0.000000000
11 5 2 decoupage 0.082314577 0.050980000 0.050980000 0.000000000
12 6 1 decoupage 0.086664939 0.050787000 0.050787000 0.000000000
13 6 2 normalisation 0.091178679 0.059710000 0.059710000 0.000000000
14 7 1 normalisation 0.122270653 0.091533000 0.084745000 0.006788000
15 7 2 decoupage 0.088566138 0.059787000 0.056466000 0.003321000
16 8 1 decoupage 0.074593149 0.048882000 0.045816000 0.003066000
17 8 2 normalisation 0.082676622 0.054373000 0.050965000 0.003408000
18 9 1 normalisation 0.077770477 0.052938000 0.049816000 0.003122000
19 9 2 decoupage 0.081749320 0.050059000 0.046735000 0.003324000
20 10 1 decoupage 0.107211398 0.080546000 0.077318000 0.003228000
21 10 2 normalisation 0.079203746 0.054812000 0.054812000 0.000000000
22 11 1 normalisation 0.107278623 0.081262000 0.077865000 0.003397000
23 11 2 decoupage 0.074858666 0.047378000 0.047378000 0.000000000
24 12 1 decoupage 0.074898321 0.047529000 0.047529000 0.000000000
25 12 2 normalisation 0.082979193 0.052978000 0.049661000 0.003317000
26 13 1 normalisation 0.091366804 0.055490000 0.048941000 0.006549000
27 13 2 decoupage 0.079342845 0.048232000 0.048232000 0.000000000
28 14 1 decoupage 0.073351969 0.049378000 0.046080000 0.003298000
29 14 2 normalisation 0.082174939 0.056187000 0.056187000 0.000000000
30 15 1 normalisation 0.100514947 0.073726000 0.067040000 0.006686000
31 15 2 decoupage 0.107643859 0.077912000 0.077912000 0.000000000
32 16 1 decoupage 0.071424612 0.047602000 0.047602000 0.000000000
33 16 2 normalisation 0.080502181 0.054009000 0.054009000 0.000000000
34 17 1 normalisation 0.080461308 0.052988000 0.052988000 0.000000000
35 17 2 decoupage 0.072877468 0.047245000 0.047245000 0.000000000
36 18 1 decoupage 0.067525437 0.047622000 0.044458000 0.003164000
37 18 2 normalisation 0.076900013 0.052838000 0.049726000 0.003112000
38 19 1 normalisation 0.084867661 0.053998000 0.053998000 0.000000000
39 19 2 decoupage 0.074569286 0.048463000 0.045426000 0.003037000
40 20 1 decoupage 0.080500195 0.048442000 0.041979000 0.006463000
41 20 2 normalisation 0.089638558 0.060543000 0.057370000 0.003173000
42 21 1 normalisation 0.077757425 0.053577000 0.050414000 0.003163000
43 21 2 decoupage 0.079858479 0.048311000 0.041903000 0.006408000
44 22 1 decoupage 0.076939251 0.049027000 0.045759000 0.003268000
45 22 2 normalisation 0.082923503 0.054112000 0.054112000 0.000000000
46 23 1 normalisation 0.082431887 0.056499000 0.056499000 0.000000000
47 23 2 decoupage 0.075330615 0.048884000 0.048884000 0.000000000
48 24 1 decoupage 0.076024610 0.048309000 0.048309000 0.000000000
49 24 2 normalisation 0.084193587 0.054436000 0.054436000 0.000000000
50 25 1 normalisation 0.088893697 0.054852000 0.048409000 0.006443000
51 25 2 decoupage 0.074862850 0.048490000 0.048490000 0.000000000
52 26 1 decoupage 0.081130698 0.048161000 0.048161000 0.000000000
53 26 2 normalisation 0.119043098 0.087924000 0.078516000 0.009408000
54 27 1 normalisation 0.078182844 0.053847000 0.053847000 0.000000000
55 27 2 decoupage 0.074151354 0.048917000 0.048917000 0.000000000
56 28 1 decoupage 0.075701689 0.049406000 0.049406000 0.000000000
57 28 2 normalisation 0.083841894 0.055895000 0.052957000 0.002938000
58 29 1 normalisation 0.085386498 0.054614000 0.054614000 0.000000000
59 29 2 decoupage 0.118421751 0.084560000 0.078032000 0.006528000
60 30 1 decoupage 0.110804120 0.075276000 0.075276000 0.000000000
61 30 2 normalisation 0.096160804 0.058503000 0.058503000 0.000000000
62 31 1 normalisation 0.084021302 0.058931000 0.055848000 0.003083000
63 31 2 decoupage 0.101838876 0.075659000 0.065788000 0.009871000
64 32 1 decoupage 0.103077891 0.075699000 0.069127000 0.006572000
65 32 2 normalisation 0.078340598 0.052816000 0.043481000 0.009335000
66 33 1 normalisation 0.077510008 0.054685000 0.054685000 0.000000000
67 33 2 decoupage 0.075927998 0.048442000 0.045406000 0.003036000
68 34 1 decoupage 0.085126298 0.049132000 0.049132000 0.000000000
69 34 2 normalisation 0.086433030 0.058404000 0.058404000 0.000000000
70 35 1 normalisation 0.079036812 0.053484000 0.053484000 0.000000000
71 35 2 decoupage 0.074087800 0.047513000 0.044337000 0.003176000
72 36 1 decoupage 0.076034234 0.046593000 0.046593000 0.000000000
73 36 2 normalisation 0.080232906 0.053331000 0.049986000 0.003345000
74 37 1 normalisation 0.080259313 0.052903000 0.052903000 0.000000000
75 37 2 decoupage 0.078727491 0.048263000 0.048263000 0.000000000
76 38 1 decoupage 0.082345265 0.048775000 0.045511000 0.003264000
77 38 2 normalisation 0.085401830 0.053081000 0.046822000 0.006259000
78 39 1 normalisation 0.087125157 0.054045000 0.050672000 0.003373000
79 39 2 decoupage 0.085990699 0.052955000 0.049640000 0.003315000
80 40 1 decoupage 0.095500738 0.062192000 0.059158000 0.003034000
81 40 2 normalisation 0.081692650 0.054493000 0.051075000 0.003418000
82 41 1 normalisation 0.083779548 0.053721000 0.050554000 0.003167000
83 41 2 decoupage 0.107384460 0.079632000 0.079632000 0.000000000
84 42 1 decoupage 0.077822528 0.049391000 0.046097000 0.003294000
85 42 2 normalisation 0.091810990 0.054198000 0.051011000 0.003187000
86 43 1 normalisation 0.118135004 0.086285000 0.082959000 0.003326000
87 43 2 decoupage 0.109951491 0.076873000 0.073542000 0.003331000
88 44 1 decoupage 0.091871545 0.063580000 0.060232000 0.003348000
89 44 2 normalisation 0.089916762 0.054942000 0.051507000 0.003435000
90 45 1 normalisation 0.088390574 0.056449000 0.056449000 0.000000000
91 45 2 decoupage 0.088286201 0.051874000 0.051874000 0.000000000
92 46 1 decoupage 0.107611359 0.080214000 0.076995000 0.003219000
93 46 2 normalisation 0.081143835 0.053834000 0.053834000 0.000000000
94 47 1 normalisation 0.116520885 0.088303000 0.078827000 0.009476000
95 47 2 decoupage 0.078122386 0.051368000 0.048164000 0.003204000
96 48 1 decoupage 0.075640486 0.048041000 0.044831000 0.003210000
97 48 2 normalisation 0.085947676 0.055347000 0.048823000 0.006524000
98 49 1 normalisation 0.111680766 0.085783000 0.079436000 0.006347000
99 49 2 decoupage 0.116693463 0.079256000 0.079256000 0.000000000
100 50 1 decoupage 0.091055658 0.055567000 0.052477000 0.003090000
101 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
1 paire ordre version rss_max_kio
2 1 1 normalisation 6688
3 1 2 decoupage 4900
4 2 1 decoupage 4896
5 2 2 normalisation 6692
6 3 1 normalisation 6692
7 3 2 decoupage 4900
8 4 1 decoupage 4884
9 4 2 normalisation 6688
10 5 1 normalisation 6676
11 5 2 decoupage 4880
+158
View File
@@ -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
View File
@@ -24,7 +24,7 @@
#include <stdio.h>
#include <stdlib.h>
#define NB_MOTS_TEXTE 250000
#define NB_MOTS_TEXTE 10000000
#define NB_MOTS_VOCAB 7000
#define TAILLE_MOT 32
#define MAX_MOTS_UNIQUES 20000
@@ -172,7 +172,10 @@ char *generer_texte(char **vocab, int nb_mots)
/* 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;
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++) {
if (texte[i] == '\n') {
int taille = i - debut;
if (n == capacite) {
capacite *= 2;
lignes = realloc(lignes, capacite * sizeof(char *));
}
lignes[n] = malloc(taille + 1);
for (int j = 0; j < taille; j++)
lignes[n][j] = texte[debut + j];
lignes[n][taille] = '\0';
lignes[n] = texte + debut;
texte[i] = '\0';
n++;
debut = i + 1;
}
@@ -549,8 +549,7 @@ int main(void)
free(rapport);
free(table);
for (int i = 0; i < nb_lignes; i++)
free(lignes[i]);
/* Les caractères des lignes appartiennent au tampon texte. */
free(lignes);
free(texte);
for (int i = 0; i < NB_MOTS_VOCAB; i++)