forked from menault/2026_TD1_DEV51_Qualite_Algo
Compare commits
6 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 14c89b3963 | |||
| 875af6fe9e | |||
| 19ad9b7b33 | |||
| 2abe610d58 | |||
| 13318119ae | |||
| e3076e46aa |
@@ -0,0 +1,7 @@
|
||||
# Exécutables, rapports et profils produits localement.
|
||||
/build/
|
||||
/out/
|
||||
/analyseur
|
||||
/rapport.txt
|
||||
/gmon.out
|
||||
*.o
|
||||
+73
-12
@@ -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.
|
||||
|
||||
@@ -30,8 +33,11 @@ Le profil initial conduit aux priorités suivantes, classées par gain attendu :
|
||||
## 3. Optimisations et gains mesurés
|
||||
|
||||
Chaque gain est relatif à la version précédente. Les deux premières étapes
|
||||
reposent sur une mesure ponctuelle ; les suivantes utilisent la médiane de
|
||||
cinq exécutions par version.
|
||||
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 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é |
|
||||
| --- | --- | ---: | ---: | ---: |
|
||||
@@ -40,29 +46,84 @@ cinq exécutions par version.
|
||||
| Table de hachage | Recherche et insertion en O(1) en moyenne | 0,888 s | 0,831 s | 6,4 % |
|
||||
| Longueurs et chaînes | Champ `taille`, arrêt sur `\0`, position de fin conservée | 0,832 s | 0,362 s | 56,5 % |
|
||||
| Tri par tas | Tri en O(n log n), sans tableau supplémentaire | 0,367 s | 0,113 s | 69,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 % |
|
||||
| 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 % |
|
||||
|
||||
La version finale 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.
|
||||
|
||||
Tous les appels à `longueur` sont supprimés. Le tri ne fait plus que
|
||||
**129 602 appels à `doit_echanger`**, soit environ **133 fois moins**.
|
||||
Le classement reste par fréquence décroissante, puis par ordre alphabétique.
|
||||
|
||||
La recherche des mots vides passe de **12 045 671 à 202 444 appels à
|
||||
`egales`**. Les appels à `est_lettre` et `en_minuscule` sont supprimés.
|
||||
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
|
||||
|
||||
Une comparaison directe des versions initiale et finale donne les médianes
|
||||
suivantes, sur cinq exécutions par version dans les mêmes conditions :
|
||||
Le bilan global ci-dessous a été mesuré après le tri par tas (étape 05),
|
||||
sur cinq exécutions par version dans les mêmes conditions. Les gains des
|
||||
étapes suivantes sont mesurés séparément dans le tableau précédent.
|
||||
|
||||
| Mesure | Version initiale | Version finale |
|
||||
| Mesure | Version initiale | Après le tri par tas |
|
||||
| --- | ---: | ---: |
|
||||
| Temps réel | 2,81 s | 0,11 s |
|
||||
| Pic mémoire résident (RSS) | 6 664 Kio | 6 668 Kio |
|
||||
|
||||
Le programme est environ **25,5 fois plus rapide**, soit **96,1 % de temps
|
||||
en moins** sur ce jeu de données.
|
||||
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`**.
|
||||
|
||||
Sources : [notes](notes.md), [profil initial](out/profil_avant.txt),
|
||||
[profil final](out/profil_apres_tri.txt) et [mesures globales](out/mesures_bilan.csv).
|
||||
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 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).
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
CC = gcc
|
||||
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
|
||||
|
||||
all: $(PROGRAMME)
|
||||
|
||||
$(PROGRAMME): $(SOURCE) Makefile
|
||||
mkdir -p $(@D)
|
||||
$(CC) $(CPPFLAGS) $(CFLAGS) $< -o $@ $(LDFLAGS) $(LDLIBS)
|
||||
|
||||
run: $(PROGRAMME)
|
||||
cd build && ./analyseur
|
||||
|
||||
check: run
|
||||
cmp $(REFERENCE) build/rapport.txt
|
||||
|
||||
$(PROGRAMME_PROFIL): $(SOURCE) Makefile
|
||||
mkdir -p $(@D)
|
||||
$(CC) $(CPPFLAGS) $(CFLAGS) -pg $< -o $@ $(LDFLAGS) $(LDLIBS)
|
||||
|
||||
profile: $(PROGRAMME_PROFIL)
|
||||
cd build/profil && ./analyseur
|
||||
cd build/profil && gprof -b ./analyseur gmon.out > profil.txt
|
||||
@printf 'Profil disponible dans build/profil/profil.txt\n'
|
||||
|
||||
clean:
|
||||
rm -rf build
|
||||
@@ -1,45 +1,64 @@
|
||||
# TD — Consignes
|
||||
# Analyseur de fréquence de mots — TD R5.A.04
|
||||
|
||||
## Travail demandé
|
||||
Optimisation d'un analyseur C par mesure du temps, étude des profils et
|
||||
réduction du travail répété. Le programme traite désormais **10 000 000 mots**,
|
||||
avec l'empreinte de référence **`b35be1258a9cb3f6`**.
|
||||
|
||||
1. **Mesurer**
|
||||
Les résultats historiques sur **250 000 mots** conservent leur référence
|
||||
**`1d53de903efd2b7c`**. L'empreinte se compare à volume de texte identique.
|
||||
|
||||
Compilez le programme sans `-pg`, lancez-le avec `time`, puis notez le
|
||||
temps d'exécution et l'empreinte mémoire.
|
||||
## Organisation
|
||||
|
||||
2. **Profiler**
|
||||
```text
|
||||
src/analyseur.c Programme principal
|
||||
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 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 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
|
||||
```
|
||||
|
||||
Recompilez en `-O0` avec `-pg`, lancez le programme, puis générez le
|
||||
profil dans `profil_avant.txt` avec `gprof`.
|
||||
## Compiler et vérifier
|
||||
|
||||
3. **Analyser**
|
||||
GCC, GNU Make et `gprof` sont nécessaires pour les commandes de profiling.
|
||||
Depuis la racine du dépôt :
|
||||
|
||||
Étudiez le profil plat et le graphe d'appels : où le temps est-il passé,
|
||||
et pourquoi ?
|
||||
```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 à 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/
|
||||
```
|
||||
|
||||
4. **Proposer**
|
||||
Pour mesurer le temps du programme après compilation :
|
||||
|
||||
Listez les pistes d'amélioration, classées par gain attendu.
|
||||
```bash
|
||||
cd build
|
||||
time ./analyseur
|
||||
```
|
||||
|
||||
5. **Optimiser**
|
||||
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/`.
|
||||
|
||||
Réalisez une optimisation par commit. L'empreinte mémoire doit rester
|
||||
identique.
|
||||
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.
|
||||
|
||||
6. **Valider**
|
||||
## Documents et résultats
|
||||
|
||||
Reprofilez le programme dans `profil_apres.txt` et chiffrez le gain
|
||||
obtenu.
|
||||
|
||||
## Compte rendu noté
|
||||
|
||||
Le fichier `COMPTE_RENDU.md` doit être présent à la racine de votre fork.
|
||||
Il doit contenir :
|
||||
|
||||
- les temps avant et après optimisation ;
|
||||
- l'analyse du profil ;
|
||||
- les pistes d'amélioration proposées ;
|
||||
- les optimisations réalisées ;
|
||||
- les gains mesurés.
|
||||
|
||||
> **Contrôle continu** — Le compte rendu est évalué dans le cadre du TD.
|
||||
- [Compte rendu](COMPTE_RENDU.md)
|
||||
- [Consignes du TD](docs/CONSIGNES.md) et [support PDF](docs/R5A04_Profiling_MM.pdf)
|
||||
- [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)
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
# TD — Consignes
|
||||
|
||||
## Travail demandé
|
||||
|
||||
1. **Mesurer**
|
||||
|
||||
Compilez le programme sans `-pg`, lancez-le avec `time`, puis notez le
|
||||
temps d'exécution et l'empreinte mémoire.
|
||||
|
||||
2. **Profiler**
|
||||
|
||||
Recompilez en `-O0` avec `-pg`, lancez le programme, puis générez le
|
||||
profil dans `profil_avant.txt` avec `gprof`.
|
||||
|
||||
3. **Analyser**
|
||||
|
||||
Étudiez le profil plat et le graphe d'appels : où le temps est-il passé,
|
||||
et pourquoi ?
|
||||
|
||||
4. **Proposer**
|
||||
|
||||
Listez les pistes d'amélioration, classées par gain attendu.
|
||||
|
||||
5. **Optimiser**
|
||||
|
||||
Réalisez une optimisation par commit. L'empreinte mémoire doit rester
|
||||
identique.
|
||||
|
||||
6. **Valider**
|
||||
|
||||
Reprofilez le programme dans `profil_apres.txt` et chiffrez le gain
|
||||
obtenu.
|
||||
|
||||
## Compte rendu noté
|
||||
|
||||
Le fichier `COMPTE_RENDU.md` doit être présent à la racine de votre fork.
|
||||
Il doit contenir :
|
||||
|
||||
- les temps avant et après optimisation ;
|
||||
- l'analyse du profil ;
|
||||
- les pistes d'amélioration proposées ;
|
||||
- les optimisations réalisées ;
|
||||
- les gains mesurés.
|
||||
|
||||
> **Contrôle continu** — Le compte rendu est évalué dans le cadre du TD.
|
||||
+834
File diff suppressed because it is too large
Load Diff
@@ -1,445 +0,0 @@
|
||||
Lancement du programme après la compilation avec `gcc -O0 analyseur.c -o analyseur`
|
||||
|
||||
```bash
|
||||
Lignes analysées : 21746
|
||||
Mots au total : 250000
|
||||
Mots distincts : 5866
|
||||
Longueur moyenne : 6.712 (écart-type 1.873)
|
||||
Bigramme le + courant : "me" (17607 fois, souvent suivi de 'n')
|
||||
|
||||
Top 10 :
|
||||
1. rane 287
|
||||
2. fasi 241
|
||||
3. tata 219
|
||||
4. mopo 214
|
||||
5. cofi 180
|
||||
6. vesi 179
|
||||
7. laganomo 177
|
||||
8. boto 172
|
||||
9. nopebo 169
|
||||
10. rotion 165
|
||||
|
||||
Empreinte du rapport : 1d53de903efd2b7c
|
||||
```
|
||||
|
||||
Et ensuite la commande time sur l'exécutable avec `time ./analyseur `
|
||||
|
||||
```bash
|
||||
Lignes analysées : 21746
|
||||
Mots au total : 250000
|
||||
Mots distincts : 5866
|
||||
Longueur moyenne : 6.712 (écart-type 1.873)
|
||||
Bigramme le + courant : "me" (17607 fois, souvent suivi de 'n')
|
||||
|
||||
Top 10 :
|
||||
1. rane 287
|
||||
2. fasi 241
|
||||
3. tata 219
|
||||
4. mopo 214
|
||||
5. cofi 180
|
||||
6. vesi 179
|
||||
7. laganomo 177
|
||||
8. boto 172
|
||||
9. nopebo 169
|
||||
10. rotion 165
|
||||
|
||||
Empreinte du rapport : 1d53de903efd2b7c
|
||||
|
||||
real 0m2.858s
|
||||
user 0m2.821s
|
||||
sys 0m0.013s
|
||||
```
|
||||
|
||||
On recompile avec le flag `-pg` : `gcc -O0 -pg analyseur.c -o analyseur`
|
||||
Et on relance `time` dessus
|
||||
|
||||
```bash
|
||||
Lignes analysées : 21746
|
||||
Mots au total : 250000
|
||||
Mots distincts : 5866
|
||||
Longueur moyenne : 6.712 (écart-type 1.873)
|
||||
Bigramme le + courant : "me" (17607 fois, souvent suivi de 'n')
|
||||
|
||||
Top 10 :
|
||||
1. rane 287
|
||||
2. fasi 241
|
||||
3. tata 219
|
||||
4. mopo 214
|
||||
5. cofi 180
|
||||
6. vesi 179
|
||||
7. laganomo 177
|
||||
8. boto 172
|
||||
9. nopebo 169
|
||||
10. rotion 165
|
||||
|
||||
Empreinte du rapport : 1d53de903efd2b7c
|
||||
|
||||
real 0m6.354s
|
||||
user 0m6.295s
|
||||
sys 0m0.020s
|
||||
```
|
||||
|
||||
On lance `gprof` : `gprof -b ./analyseur gmon.out > profil_avant.txt`
|
||||
|
||||
## Optimisation de `chercher_mot` : recherche dichotomique
|
||||
|
||||
La recherche initiale parcourait toutes les entrées jusqu'à trouver le mot.
|
||||
Pour 150 182 recherches, elle effectuait 296 656 203 appels à `egales()`.
|
||||
|
||||
Le tableau est maintenant maintenu dans l'ordre alphabétique pendant le
|
||||
comptage. `chercher_mot` utilise `comparer()` pour éliminer la moitié des
|
||||
entrées restantes à chaque étape : la recherche passe de O(n) à O(log n).
|
||||
Si le mot est absent, la fonction renvoie `-(position d'insertion + 1)` ;
|
||||
`compter_mot` retrouve cette position avec `-indice - 1`, décale les entrées
|
||||
et insère le nouveau mot. Cette insertion reste en O(n), mais elle n'a lieu
|
||||
qu'à la première apparition de chacun des 5 866 mots distincts.
|
||||
Le tableau existant est réutilisé, sans allocation supplémentaire.
|
||||
Le tri final par fréquence produit le même classement.
|
||||
|
||||
Résultats du nouveau profil, conservé dans [out/profil_apres.txt](out/profil_apres.txt) :
|
||||
|
||||
| Mesure | Avant | Après |
|
||||
| --- | ---: | ---: |
|
||||
| Appels de `chercher_mot` | 150 182 | 150 182 |
|
||||
| Appels à `egales()` depuis `chercher_mot` | 296 656 203 | 0 |
|
||||
| Comparaisons de chaînes dans `chercher_mot` | 296 656 203 | 1 718 447 |
|
||||
| Appels à `egales()` dans tout le programme | 308 701 874 | 12 045 671 |
|
||||
| Temps réel sans profiling (`gcc -O0`) | 2,80 s | 1,45 s |
|
||||
|
||||
Les recherches effectuent environ 173 fois moins de comparaisons.
|
||||
Les appels restants à `egales()` viennent de `est_mot_vide`.
|
||||
Les temps ci-dessus correspondent à une mesure avant/après sur la même
|
||||
machine pendant cette modification : environ 48 % de temps en moins
|
||||
(accélération d'environ 1,93). Ce sont des mesures ponctuelles.
|
||||
|
||||
Validation : compilation avec `-Wall -Wextra -Wpedantic`, rapport et sortie
|
||||
console identiques octet par octet à la version initiale, avec et sans `-pg`.
|
||||
L'empreinte reste **`1d53de903efd2b7c`**.
|
||||
Un test temporaire sous AddressSanitizer et UndefinedBehaviorSanitizer a
|
||||
également vérifié les recherches dans un tableau vide, les mots présents
|
||||
ou absents, les insertions au début/milieu/fin, les doublons et les mots de
|
||||
31 caractères, puis comparé 10 000 comptages à une référence linéaire.
|
||||
|
||||
Pour reproduire le profil sans écraser les fichiers du profil initial :
|
||||
|
||||
```bash
|
||||
mkdir -p out/apres
|
||||
gcc -O0 -pg analyseur.c -o out/apres/analyseur
|
||||
(cd out/apres && ./analyseur && gprof -b ./analyseur gmon.out > ../profil_apres.txt)
|
||||
```
|
||||
|
||||
```bash
|
||||
Lignes analysées : 21746
|
||||
Mots au total : 250000
|
||||
Mots distincts : 5866
|
||||
Longueur moyenne : 6.712 (écart-type 1.873)
|
||||
Bigramme le + courant : "me" (17607 fois, souvent suivi de 'n')
|
||||
|
||||
Top 10 :
|
||||
1. rane 287
|
||||
2. fasi 241
|
||||
3. tata 219
|
||||
4. mopo 214
|
||||
5. cofi 180
|
||||
6. vesi 179
|
||||
7. laganomo 177
|
||||
8. boto 172
|
||||
9. nopebo 169
|
||||
10. rotion 165
|
||||
|
||||
Empreinte du rapport : 1d53de903efd2b7c
|
||||
|
||||
real 0m1.986s
|
||||
user 0m1.934s
|
||||
sys 0m0.011s
|
||||
```
|
||||
|
||||
## Optimisation des appels à `longueur_moyenne`
|
||||
|
||||
`longueur_moyenne` parcourt les mots une fois par appel. Le coût excessif
|
||||
venait de `ecart_type_longueur`, qui recalculait cette même moyenne à
|
||||
chaque itération, soit 5 866 fois. Avec l'appel de `main`, cela représentait
|
||||
5 867 calculs de moyenne et 34 415 822 appels à `longueur()`.
|
||||
|
||||
`main` calcule désormais la moyenne une seule fois et la transmet en
|
||||
paramètre à `ecart_type_longueur`. La boucle utilise directement cette
|
||||
valeur. Le calcul des statistiques passe ainsi de O(n²) à O(n), sans
|
||||
allocation supplémentaire ni modification de la formule de variance.
|
||||
|
||||
Profil enregistré dans [out/profil_apres_moyenne.txt](out/profil_apres_moyenne.txt).
|
||||
La colonne « Avant » correspond à la version déjà optimisée pour
|
||||
`chercher_mot`, dont le profil reste dans `out/profil_apres.txt`.
|
||||
|
||||
| Mesure | Avant | Après |
|
||||
| --- | ---: | ---: |
|
||||
| Appels à `longueur_moyenne` | 5 867 | 1 |
|
||||
| Appels à `longueur()` depuis `longueur_moyenne` | 34 415 822 | 5 866 |
|
||||
| Appels à `longueur()` dans tout le programme | 36 009 819 | 1 599 863 |
|
||||
| Temps réel sans profiling (`gcc -O0`) | 1,46 s | 0,88 s |
|
||||
|
||||
Cette mesure ponctuelle sur la même machine donne environ 40 % de temps
|
||||
en moins, soit une accélération d'environ 1,66 par rapport à l'étape précédente.
|
||||
|
||||
Validation : compilation avec `-Wall -Wextra -Wpedantic` sans avertissement,
|
||||
puis comparaison du rapport et de la sortie console avant/après, avec et
|
||||
sans `-pg`. Ils restent identiques octet par octet, y compris la moyenne
|
||||
(`6.712`) et l'écart-type (`1.873`). L'empreinte reste **`1d53de903efd2b7c`**.
|
||||
|
||||
Commandes pour reproduire ce profil :
|
||||
|
||||
```bash
|
||||
mkdir -p out/apres_moyenne
|
||||
gcc -O0 -pg analyseur.c -o out/apres_moyenne/analyseur
|
||||
(cd out/apres_moyenne && ./analyseur && gprof -b ./analyseur gmon.out > ../profil_apres_moyenne.txt)
|
||||
```
|
||||
|
||||
```bash
|
||||
[rabot@salle235-06 out]$ time ./analyseur
|
||||
Lignes analysées : 21746
|
||||
Mots au total : 250000
|
||||
Mots distincts : 5866
|
||||
Longueur moyenne : 6.712 (écart-type 1.873)
|
||||
Bigramme le + courant : "me" (17607 fois, souvent suivi de 'n')
|
||||
|
||||
Top 10 :
|
||||
1. rane 287
|
||||
2. fasi 241
|
||||
3. tata 219
|
||||
4. mopo 214
|
||||
5. cofi 180
|
||||
6. vesi 179
|
||||
7. laganomo 177
|
||||
8. boto 172
|
||||
9. nopebo 169
|
||||
10. rotion 165
|
||||
|
||||
Empreinte du rapport : 1d53de903efd2b7c
|
||||
|
||||
real 0m1.251s
|
||||
user 0m1.214s
|
||||
sys 0m0.004s
|
||||
```
|
||||
|
||||
## Remplacement de la dichotomie par une table de hachage
|
||||
|
||||
Un index de 40 001 cases associe chaque mot à son entrée dans le tableau.
|
||||
`hacher_mot` calcule un entier à partir des caractères du mot ; le modulo
|
||||
donne la première case à examiner. Chaque case contient l'indice de
|
||||
l'entrée + 1, ou zéro si elle est libre.
|
||||
|
||||
En cas de collision, `chercher_mot` vérifie le mot avec `egales()` puis
|
||||
avance à la case suivante, en revenant au début si nécessaire. Deux mots
|
||||
ayant le même hachage restent donc bien distincts. Les nouveaux mots sont
|
||||
ajoutés à la fin du tableau, sans décaler les entrées existantes.
|
||||
|
||||
La recherche et l'insertion sont en O(1) en moyenne pour ces mots de
|
||||
longueur bornée, avec un pire cas en O(n) en cas de nombreuses collisions.
|
||||
La limite de 20 000 mots distincts est vérifiée avant chaque nouvelle
|
||||
insertion ; avec 40 001 cases, l'index reste rempli à moins de 50 %.
|
||||
|
||||
Ce choix ajoute `40 001 * sizeof(int)` octets, soit environ 156 Kio sur
|
||||
cette machine. L'index est libéré après le comptage, avant le tri final
|
||||
qui déplace les entrées. L'empreinte du rapport est conservée, mais cette
|
||||
version utilise davantage de mémoire pendant le comptage.
|
||||
|
||||
Profil enregistré dans [out/profil_apres_hachage.txt](out/profil_apres_hachage.txt).
|
||||
La comparaison porte sur la version précédente avec dichotomie et moyenne
|
||||
calculée une seule fois, conservée dans `out/profil_apres_moyenne.txt`.
|
||||
|
||||
| Mesure | Dichotomie | Hachage |
|
||||
| --- | ---: | ---: |
|
||||
| Appels de `chercher_mot` | 150 182 | 150 182 |
|
||||
| Comparaisons de chaînes dans `chercher_mot` | 1 718 447 (`comparer`) | 153 101 (`egales`) |
|
||||
| Temps réel médian sans profiling (`gcc -O0`, 5 exécutions par version) | 0,888 s | 0,831 s |
|
||||
|
||||
Les recherches font environ 11,2 fois moins de comparaisons. Le temps
|
||||
total baisse d'environ 6,4 % : le gain reste limité car la normalisation
|
||||
et le tri occupent désormais l'essentiel du temps. L'ordre d'arrivée des
|
||||
mots remplace l'ordre alphabétique pendant le comptage ; le tri final
|
||||
effectue donc un nombre différent de comparaisons, tout en produisant
|
||||
le même classement.
|
||||
|
||||
Les cinq mesures, réalisées en alternant les deux versions sur la même
|
||||
machine, sont respectivement : 0,883 / 0,892 / 0,888 / 0,883 / 0,888 s
|
||||
avant, et 0,831 / 0,830 / 0,831 / 0,832 / 0,829 s après.
|
||||
|
||||
Validation : compilation sans avertissement avec `-Wall -Wextra -Wpedantic`,
|
||||
rapport et sortie console identiques octet par octet sur les dix
|
||||
exécutions et avec `-pg`. L'empreinte reste **`1d53de903efd2b7c`**.
|
||||
Des tests temporaires sous AddressSanitizer et UndefinedBehaviorSanitizer
|
||||
ont vérifié les collisions avec retour à la première case, les doublons,
|
||||
les mots de 0/1/31 caractères, 10 000 comptages comparés à une référence
|
||||
linéaire, les 20 000 entrées possibles et le refus d'un dépassement.
|
||||
Le programme complet a également été exécuté avec ces deux outils,
|
||||
sans erreur et avec une sortie identique.
|
||||
|
||||
Commandes pour reproduire ce profil :
|
||||
|
||||
```bash
|
||||
mkdir -p out/apres_hachage
|
||||
gcc -O0 -pg analyseur.c -o out/apres_hachage/analyseur
|
||||
(cd out/apres_hachage && ./analyseur && gprof -b ./analyseur gmon.out > ../profil_apres_hachage.txt)
|
||||
```
|
||||
|
||||
## Longueurs mémorisées et suppression des parcours répétés
|
||||
|
||||
Le champ `taille` de `Entree` mémorise la longueur du mot à son insertion.
|
||||
La valeur vient directement de `k`, déjà calculé dans `compter_mots_ligne` :
|
||||
aucun parcours supplémentaire n'est nécessaire. La moyenne et la variance
|
||||
lisent désormais ce champ. Le tri déplace l'entrée entière, donc la longueur
|
||||
reste associée au bon mot. Pour un mot tronqué, la taille enregistrée est
|
||||
celle du mot conservé, soit au maximum 31 caractères.
|
||||
|
||||
Deux autres changements éliminent les recalculs sur les chaînes longues :
|
||||
|
||||
- `normaliser_ligne` s'arrête directement sur `ligne[i] == '\0'`. Le parcours
|
||||
d'une ligne de L caractères passe de O(L²) à O(L).
|
||||
- `ajouter` reçoit une position de fin, qu'il avance pendant la copie des
|
||||
caractères ajoutés. Cette position est conservée lors de la construction
|
||||
du rapport et réinitialisée pour chaque mot du vocabulaire. Le préfixe
|
||||
déjà construit n'est plus parcouru à chaque ajout.
|
||||
|
||||
La fonction `longueur`, devenue inutilisée, a été supprimée.
|
||||
Le champ supplémentaire fait passer `sizeof(Entree)` de 36 à 40 octets sur
|
||||
cette machine : le tableau alloué pour 20 000 entrées prend 80 000 octets
|
||||
supplémentaires, soit environ 78 Kio.
|
||||
|
||||
Profil enregistré dans [out/profil_apres_longueurs.txt](out/profil_apres_longueurs.txt).
|
||||
La version précédente, avec la table de hachage, est décrite dans
|
||||
`out/profil_apres_hachage.txt`.
|
||||
|
||||
| Mesure | Avant | Après |
|
||||
| --- | ---: | ---: |
|
||||
| Appels à `longueur()` depuis les statistiques | 11 732 | 0 |
|
||||
| Appels à `longueur()` depuis `normaliser_ligne` | 1 561 330 | 0 |
|
||||
| Appels à `longueur()` depuis `ajouter` | 26 801 | 0 |
|
||||
| Appels à `longueur()` au total | 1 599 863 | 0 |
|
||||
| Temps réel médian sans profiling (`gcc -O0`, 5 exécutions par version) | 0,832 s | 0,362 s |
|
||||
|
||||
Le temps total baisse de 56,5 %, soit une accélération d'environ 2,30.
|
||||
Cette mesure porte sur l'ensemble des trois changements, et ne doit pas
|
||||
être attribuée uniquement au stockage de la longueur des mots.
|
||||
|
||||
Les cinq mesures, réalisées en alternant les deux versions sur la même
|
||||
machine, sont respectivement : 0,835 / 0,838 / 0,830 / 0,832 / 0,829 s
|
||||
avant, et 0,362 / 0,369 / 0,366 / 0,362 / 0,361 s après.
|
||||
|
||||
Validation : compilation sans avertissement avec `-Wall -Wextra -Wpedantic`,
|
||||
rapport et sortie console identiques octet par octet sur les dix exécutions,
|
||||
avec `-pg` et sous AddressSanitizer et UndefinedBehaviorSanitizer.
|
||||
L'empreinte reste **`1d53de903efd2b7c`**, la moyenne `6.712` et l'écart-type
|
||||
`1.873`. Des tests temporaires ont également vérifié les ajouts vides et
|
||||
successifs jusqu'à la limite d'un tampon, la normalisation, les longueurs
|
||||
avant/après tri, les statistiques, le rapport vide et les mots tronqués.
|
||||
|
||||
Commandes pour reproduire ce profil :
|
||||
|
||||
```bash
|
||||
mkdir -p out/apres_longueurs
|
||||
gcc -O0 -pg analyseur.c -o out/apres_longueurs/analyseur
|
||||
(cd out/apres_longueurs && ./analyseur && gprof -b ./analyseur gmon.out > ../profil_apres_longueurs.txt)
|
||||
```
|
||||
|
||||
```bash
|
||||
[rabot@salle235-06 out]$ time ./analyseur
|
||||
Lignes analysées : 21746
|
||||
Mots au total : 250000
|
||||
Mots distincts : 5866
|
||||
Longueur moyenne : 6.712 (écart-type 1.873)
|
||||
Bigramme le + courant : "me" (17607 fois, souvent suivi de 'n')
|
||||
|
||||
Top 10 :
|
||||
1. rane 287
|
||||
2. fasi 241
|
||||
3. tata 219
|
||||
4. mopo 214
|
||||
5. cofi 180
|
||||
6. vesi 179
|
||||
7. laganomo 177
|
||||
8. boto 172
|
||||
9. nopebo 169
|
||||
10. rotion 165
|
||||
|
||||
Empreinte du rapport : 1d53de903efd2b7c
|
||||
|
||||
real 0m0.751s
|
||||
user 0m0.703s
|
||||
sys 0m0.004s
|
||||
```
|
||||
|
||||
## Remplacement du tri à bulles par un tri par tas
|
||||
|
||||
Le tri à bulles effectuait systématiquement n(n - 1)/2 comparaisons,
|
||||
soit 17 202 045 appels à `doit_echanger` pour 5 866 mots distincts.
|
||||
|
||||
`trier_entrees` utilise maintenant un tri par tas. La racine du tas contient
|
||||
l'entrée qui doit apparaître le plus tard dans le classement. Elle est
|
||||
échangée avec la dernière entrée de la partie non triée, puis `retablir_tas`
|
||||
restaure cette propriété sur les entrées restantes. La construction du tas
|
||||
coûte O(n), puis les extractions coûtent O(log n) chacune : le tri complet
|
||||
passe de O(n²) à O(n log n), y compris dans le pire cas.
|
||||
|
||||
Le tri travaille directement dans le tableau, avec O(1) de mémoire
|
||||
supplémentaire. `doit_echanger` reste inchangée : fréquence décroissante,
|
||||
puis ordre alphabétique croissant. Chaque échange déplace l'entrée entière,
|
||||
y compris la longueur mémorisée.
|
||||
|
||||
Profil enregistré dans [out/profil_apres_tri.txt](out/profil_apres_tri.txt).
|
||||
La comparaison porte sur la version précédente, décrite dans
|
||||
`out/profil_apres_longueurs.txt`.
|
||||
|
||||
| Mesure | Tri à bulles | Tri par tas |
|
||||
| --- | ---: | ---: |
|
||||
| Appels à `doit_echanger` pendant le tri | 17 202 045 | 129 602 |
|
||||
| Appels à `comparer` pour départager les fréquences égales | 12 172 087 | 32 813 |
|
||||
| Temps réel médian du programme sans profiling (`gcc -O0`, 5 exécutions par version) | 0,367 s | 0,113 s |
|
||||
|
||||
Le tri effectue environ 133 fois moins de comparaisons d'entrées.
|
||||
Le temps total baisse de 69,3 %, soit une accélération d'environ 3,25.
|
||||
Les cinq mesures, réalisées en alternant les deux versions sur la même
|
||||
machine, sont respectivement : 0,365 / 0,363 / 0,372 / 0,383 / 0,367 s
|
||||
avant, et 0,112 / 0,113 / 0,115 / 0,113 / 0,112 s après.
|
||||
|
||||
Validation : compilation sans avertissement avec `-Wall -Wextra -Wpedantic`,
|
||||
rapport et sortie console identiques octet par octet sur les dix exécutions,
|
||||
avec `-pg` et sous AddressSanitizer et UndefinedBehaviorSanitizer.
|
||||
L'empreinte reste **`1d53de903efd2b7c`**.
|
||||
Des tests temporaires ont comparé le résultat à `qsort` sur des tableaux
|
||||
de 0 à 20 000 entrées, aléatoires, déjà triés ou inversés. Ils vérifient
|
||||
aussi les fréquences égales, les doublons, les préfixes, les valeurs
|
||||
extrêmes de fréquence et la conservation des longueurs des mots.
|
||||
|
||||
Commandes pour reproduire ce profil :
|
||||
|
||||
```bash
|
||||
mkdir -p out/apres_tri
|
||||
gcc -O0 -pg analyseur.c -o out/apres_tri/analyseur
|
||||
(cd out/apres_tri && ./analyseur && gprof -b ./analyseur gmon.out > ../profil_apres_tri.txt)
|
||||
```
|
||||
|
||||
```bash
|
||||
[rabot@salle235-06 out]$ time ./analyseur
|
||||
Lignes analysées : 21746
|
||||
Mots au total : 250000
|
||||
Mots distincts : 5866
|
||||
Longueur moyenne : 6.712 (écart-type 1.873)
|
||||
Bigramme le + courant : "me" (17607 fois, souvent suivi de 'n')
|
||||
|
||||
Top 10 :
|
||||
1. rane 287
|
||||
2. fasi 241
|
||||
3. tata 219
|
||||
4. mopo 214
|
||||
5. cofi 180
|
||||
6. vesi 179
|
||||
7. laganomo 177
|
||||
8. boto 172
|
||||
9. nopebo 169
|
||||
10. rotion 165
|
||||
|
||||
Empreinte du rapport : 1d53de903efd2b7c
|
||||
|
||||
real 0m0.354s
|
||||
user 0m0.314s
|
||||
sys 0m0.008s
|
||||
```
|
||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,56 @@
|
||||
# Résultats conservés
|
||||
|
||||
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 |
|
||||
| --- | --- | --- |
|
||||
| 00 — Programme initial | [00_initial.txt](profils/00_initial.txt) | `6c6f358` |
|
||||
| 01 — Recherche dichotomique | [01_dichotomie.txt](profils/01_dichotomie.txt) | `be387e2` |
|
||||
| 02 — Moyenne calculée une fois | [02_moyenne.txt](profils/02_moyenne.txt) | `d3f1987` |
|
||||
| 03 — Recherche par hachage | [03_hachage.txt](profils/03_hachage.txt) | `57aaec4` |
|
||||
| 04 — Longueurs et positions de fin | [04_longueurs.txt](profils/04_longueurs.txt) | `1c4405c` |
|
||||
| 05 — Tri par tas | [05_tri.txt](profils/05_tri.txt) | `57c9ce9` |
|
||||
| 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.
|
||||
|
||||
La [comparaison de normalisation](mesures/comparaison_normalisation_meme_pc.csv)
|
||||
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.
|
||||
|
||||
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
|
||||
de versions exécutées dans les mêmes conditions sur la même machine.
|
||||
@@ -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,101 @@
|
||||
paire;ordre;version;reel_s;cpu_s;utilisateur_s;systeme_s
|
||||
1;1;est_mot_vide;0.056491233;0.056122000;0.056122000;0.000000000
|
||||
1;2;normalisation;0.051129444;0.050743000;0.047569000;0.003174000
|
||||
2;1;normalisation;0.052859973;0.052213000;0.052213000;0.000000000
|
||||
2;2;est_mot_vide;0.056553175;0.056188000;0.049163000;0.007025000
|
||||
3;1;est_mot_vide;0.056646180;0.056260000;0.056260000;0.000000000
|
||||
3;2;normalisation;0.050820813;0.050419000;0.047057000;0.003362000
|
||||
4;1;normalisation;0.050511655;0.050148000;0.050148000;0.000000000
|
||||
4;2;est_mot_vide;0.057633857;0.057267000;0.057267000;0.000000000
|
||||
5;1;est_mot_vide;0.058931013;0.058517000;0.058517000;0.000000000
|
||||
5;2;normalisation;0.050483512;0.050130000;0.050130000;0.000000000
|
||||
6;1;normalisation;0.050571728;0.050031000;0.050031000;0.000000000
|
||||
6;2;est_mot_vide;0.056469042;0.055864000;0.055864000;0.000000000
|
||||
7;1;est_mot_vide;0.056786315;0.056209000;0.056209000;0.000000000
|
||||
7;2;normalisation;0.054489662;0.054079000;0.054079000;0.000000000
|
||||
8;1;normalisation;0.053364305;0.052960000;0.052960000;0.000000000
|
||||
8;2;est_mot_vide;0.059938709;0.059504000;0.056200000;0.003304000
|
||||
9;1;est_mot_vide;0.056927608;0.056355000;0.053024000;0.003331000
|
||||
9;2;normalisation;0.050743650;0.050397000;0.050397000;0.000000000
|
||||
10;1;normalisation;0.051437591;0.051059000;0.051059000;0.000000000
|
||||
10;2;est_mot_vide;0.056612828;0.056236000;0.056236000;0.000000000
|
||||
11;1;est_mot_vide;0.056272508;0.055704000;0.055704000;0.000000000
|
||||
11;2;normalisation;0.050365767;0.050021000;0.046684000;0.003337000
|
||||
12;1;normalisation;0.050671909;0.050125000;0.050125000;0.000000000
|
||||
12;2;est_mot_vide;0.056635849;0.056280000;0.056280000;0.000000000
|
||||
13;1;est_mot_vide;0.056769250;0.056186000;0.056186000;0.000000000
|
||||
13;2;normalisation;0.050474641;0.050140000;0.050140000;0.000000000
|
||||
14;1;normalisation;0.051163379;0.050578000;0.050578000;0.000000000
|
||||
14;2;est_mot_vide;0.056933057;0.056577000;0.053247000;0.003330000
|
||||
15;1;est_mot_vide;0.057398894;0.056795000;0.056795000;0.000000000
|
||||
15;2;normalisation;0.050772062;0.050235000;0.050235000;0.000000000
|
||||
16;1;normalisation;0.050913189;0.050575000;0.050575000;0.000000000
|
||||
16;2;est_mot_vide;0.056655224;0.056318000;0.056318000;0.000000000
|
||||
17;1;est_mot_vide;0.056525765;0.056190000;0.056190000;0.000000000
|
||||
17;2;normalisation;0.050352528;0.050011000;0.050011000;0.000000000
|
||||
18;1;normalisation;0.050842096;0.050096000;0.043787000;0.006309000
|
||||
18;2;est_mot_vide;0.057116281;0.056570000;0.053229000;0.003341000
|
||||
19;1;est_mot_vide;0.057103442;0.056740000;0.056740000;0.000000000
|
||||
19;2;normalisation;0.050779039;0.050208000;0.046845000;0.003363000
|
||||
20;1;normalisation;0.050054952;0.049702000;0.049702000;0.000000000
|
||||
20;2;est_mot_vide;0.058944302;0.058092000;0.058092000;0.000000000
|
||||
21;1;est_mot_vide;0.056722629;0.056347000;0.056347000;0.000000000
|
||||
21;2;normalisation;0.050731609;0.050375000;0.047014000;0.003361000
|
||||
22;1;normalisation;0.050819285;0.050259000;0.047104000;0.003155000
|
||||
22;2;est_mot_vide;0.056630778;0.056063000;0.056063000;0.000000000
|
||||
23;1;est_mot_vide;0.057257033;0.056642000;0.056642000;0.000000000
|
||||
23;2;normalisation;0.051949088;0.051599000;0.048158000;0.003441000
|
||||
24;1;normalisation;0.051005800;0.050636000;0.044301000;0.006335000
|
||||
24;2;est_mot_vide;0.057043455;0.056271000;0.056271000;0.000000000
|
||||
25;1;est_mot_vide;0.057602567;0.056820000;0.056820000;0.000000000
|
||||
25;2;normalisation;0.050556449;0.050000000;0.050000000;0.000000000
|
||||
26;1;normalisation;0.050617535;0.050016000;0.046668000;0.003348000
|
||||
26;2;est_mot_vide;0.056347331;0.055776000;0.055776000;0.000000000
|
||||
27;1;est_mot_vide;0.056876707;0.056082000;0.052755000;0.003327000
|
||||
27;2;normalisation;0.050732818;0.049943000;0.046588000;0.003355000
|
||||
28;1;normalisation;0.050696128;0.050356000;0.050356000;0.000000000
|
||||
28;2;est_mot_vide;0.057392773;0.056837000;0.056837000;0.000000000
|
||||
29;1;est_mot_vide;0.057540365;0.056687000;0.050339000;0.006348000
|
||||
29;2;normalisation;0.050629883;0.050266000;0.050266000;0.000000000
|
||||
30;1;normalisation;0.050633852;0.050301000;0.046944000;0.003357000
|
||||
30;2;est_mot_vide;0.057387534;0.056604000;0.053263000;0.003341000
|
||||
31;1;est_mot_vide;0.056705212;0.056221000;0.056221000;0.000000000
|
||||
31;2;normalisation;0.051605342;0.050607000;0.050607000;0.000000000
|
||||
32;1;normalisation;0.050774977;0.050195000;0.046832000;0.003363000
|
||||
32;2;est_mot_vide;0.057347698;0.056481000;0.056481000;0.000000000
|
||||
33;1;est_mot_vide;0.057314656;0.056493000;0.053142000;0.003351000
|
||||
33;2;normalisation;0.051035417;0.050702000;0.047319000;0.003383000
|
||||
34;1;normalisation;0.051096606;0.050325000;0.050325000;0.000000000
|
||||
34;2;est_mot_vide;0.056984515;0.056397000;0.053065000;0.003332000
|
||||
35;1;est_mot_vide;0.056948057;0.056378000;0.049735000;0.006643000
|
||||
35;2;normalisation;0.050945416;0.050349000;0.047188000;0.003161000
|
||||
36;1;normalisation;0.050665690;0.050325000;0.050325000;0.000000000
|
||||
36;2;est_mot_vide;0.056564751;0.056024000;0.056024000;0.000000000
|
||||
37;1;est_mot_vide;0.056814287;0.056267000;0.056267000;0.000000000
|
||||
37;2;normalisation;0.050693901;0.050345000;0.050345000;0.000000000
|
||||
38;1;normalisation;0.051073204;0.050687000;0.047516000;0.003171000
|
||||
38;2;est_mot_vide;0.056708081;0.056123000;0.052807000;0.003316000
|
||||
39;1;est_mot_vide;0.058150167;0.057529000;0.054130000;0.003399000
|
||||
39;2;normalisation;0.051624538;0.051171000;0.047760000;0.003411000
|
||||
40;1;normalisation;0.050851577;0.050450000;0.047083000;0.003367000
|
||||
40;2;est_mot_vide;0.056863893;0.056294000;0.056294000;0.000000000
|
||||
41;1;est_mot_vide;0.056938046;0.056313000;0.049663000;0.006650000
|
||||
41;2;normalisation;0.051268160;0.050718000;0.050718000;0.000000000
|
||||
42;1;normalisation;0.050889004;0.050469000;0.050469000;0.000000000
|
||||
42;2;est_mot_vide;0.056899960;0.056519000;0.056519000;0.000000000
|
||||
43;1;est_mot_vide;0.056661776;0.056094000;0.056094000;0.000000000
|
||||
43;2;normalisation;0.051071801;0.050505000;0.050505000;0.000000000
|
||||
44;1;normalisation;0.051212294;0.050659000;0.050659000;0.000000000
|
||||
44;2;est_mot_vide;0.056953281;0.056597000;0.053266000;0.003331000
|
||||
45;1;est_mot_vide;0.057247562;0.056689000;0.056689000;0.000000000
|
||||
45;2;normalisation;0.051919210;0.051286000;0.047848000;0.003438000
|
||||
46;1;normalisation;0.053911622;0.053561000;0.050211000;0.003350000
|
||||
46;2;est_mot_vide;0.057280343;0.056880000;0.056880000;0.000000000
|
||||
47;1;est_mot_vide;0.057210951;0.056736000;0.050053000;0.006683000
|
||||
47;2;normalisation;0.050836595;0.050275000;0.050275000;0.000000000
|
||||
48;1;normalisation;0.050400129;0.050021000;0.046687000;0.003334000
|
||||
48;2;est_mot_vide;0.056861357;0.056310000;0.056310000;0.000000000
|
||||
49;1;est_mot_vide;0.056884618;0.056497000;0.053181000;0.003316000
|
||||
49;2;normalisation;0.050721396;0.050345000;0.046993000;0.003352000
|
||||
50;1;normalisation;0.050842075;0.050114000;0.050114000;0.000000000
|
||||
50;2;est_mot_vide;0.056320156;0.055765000;0.055765000;0.000000000
|
||||
|
@@ -0,0 +1,60 @@
|
||||
{
|
||||
"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": "13318119ae97c3b2a76b99fdf85ce82d908865de",
|
||||
"source_sha256": {
|
||||
"est_mot_vide": "2bff822183b0e61b31c25b7ea6e6453bb20a69474a73558eb2b9113b9f1d92aa",
|
||||
"normalisation": "6239cabc4e98a3e841be7e446d2690a24a51aab6719528ea7c0ee3da10562320"
|
||||
},
|
||||
"chauffe_par_version": 5,
|
||||
"mesures_par_version": 50,
|
||||
"empreinte_rapport": "1d53de903efd2b7c",
|
||||
"est_mot_vide": {
|
||||
"reel_s": {
|
||||
"mediane": 0.056913783999999995,
|
||||
"q1": 0.056656861999999995,
|
||||
"q3": 0.0572745155,
|
||||
"min": 0.056272508,
|
||||
"max": 0.059938709
|
||||
},
|
||||
"cpu_s": {
|
||||
"mediane": 0.056351000000000054,
|
||||
"q1": 0.05619474999999996,
|
||||
"q3": 0.05667575000000001,
|
||||
"min": 0.055703999999999976,
|
||||
"max": 0.05950400000000003
|
||||
}
|
||||
},
|
||||
"normalisation": {
|
||||
"reel_s": {
|
||||
"mediane": 0.050828704,
|
||||
"q1": 0.05066724475000001,
|
||||
"q3": 0.0511212345,
|
||||
"min": 0.050054952,
|
||||
"max": 0.054489662
|
||||
},
|
||||
"cpu_s": {
|
||||
"mediane": 0.050346999999999476,
|
||||
"q1": 0.05014199999999988,
|
||||
"q3": 0.05065324999999965,
|
||||
"min": 0.04970199999999991,
|
||||
"max": 0.05407899999999999
|
||||
}
|
||||
},
|
||||
"gain_reel_pourcent": 10.691750877081008,
|
||||
"gain_cpu_pourcent": 10.654646767582776,
|
||||
"paires_plus_rapides": {
|
||||
"reel_s": 50,
|
||||
"cpu_s": 50
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,162 @@
|
||||
Flat profile:
|
||||
|
||||
Each sample counts as 0.01 seconds.
|
||||
% cumulative self self total
|
||||
time seconds seconds calls ms/call ms/call name
|
||||
62.50 0.05 0.05 12198772 0.00 0.00 egales
|
||||
12.50 0.06 0.01 1 10.00 10.00 analyser_bigrammes
|
||||
12.50 0.07 0.01 1 10.00 10.00 decouper_lignes
|
||||
12.50 0.08 0.01 _init
|
||||
0.00 0.08 0.00 1539584 0.00 0.00 est_lettre
|
||||
0.00 0.08 0.00 1266663 0.00 0.00 en_minuscule
|
||||
0.00 0.08 0.00 928117 0.00 0.00 alea
|
||||
0.00 0.08 0.00 250000 0.00 0.00 est_mot_vide
|
||||
0.00 0.08 0.00 150182 0.00 0.00 chercher_mot
|
||||
0.00 0.08 0.00 150182 0.00 0.00 compter_mot
|
||||
0.00 0.08 0.00 150182 0.00 0.00 hacher_mot
|
||||
0.00 0.08 0.00 129602 0.00 0.00 doit_echanger
|
||||
0.00 0.08 0.00 32813 0.00 0.00 comparer
|
||||
0.00 0.08 0.00 26801 0.00 0.00 ajouter
|
||||
0.00 0.08 0.00 21746 0.00 0.00 compter_mots_ligne
|
||||
0.00 0.08 0.00 21746 0.00 0.00 normaliser_ligne
|
||||
0.00 0.08 0.00 8798 0.00 0.00 retablir_tas
|
||||
0.00 0.08 0.00 5866 0.00 0.00 copier
|
||||
0.00 0.08 0.00 1 0.00 0.00 construire_rapport
|
||||
0.00 0.08 0.00 1 0.00 0.00 ecart_type_longueur
|
||||
0.00 0.08 0.00 1 0.00 0.00 empreinte
|
||||
0.00 0.08 0.00 1 0.00 0.00 generer_texte
|
||||
0.00 0.08 0.00 1 0.00 0.00 generer_vocabulaire
|
||||
0.00 0.08 0.00 1 0.00 0.00 longueur_moyenne
|
||||
0.00 0.08 0.00 1 0.00 0.00 racine
|
||||
0.00 0.08 0.00 1 0.00 0.00 trier_entrees
|
||||
|
||||
Call graph
|
||||
|
||||
|
||||
granularity: each sample hit covers 4 byte(s) for 12.50% of 0.08 seconds
|
||||
|
||||
index % time self children called name
|
||||
<spontaneous>
|
||||
[1] 87.5 0.00 0.07 main [1]
|
||||
0.00 0.05 21746/21746 compter_mots_ligne [3]
|
||||
0.01 0.00 1/1 decouper_lignes [6]
|
||||
0.01 0.00 1/1 analyser_bigrammes [5]
|
||||
0.00 0.00 21746/21746 normaliser_ligne [17]
|
||||
0.00 0.00 1/1 generer_vocabulaire [24]
|
||||
0.00 0.00 1/1 generer_texte [23]
|
||||
0.00 0.00 1/1 trier_entrees [27]
|
||||
0.00 0.00 1/1 longueur_moyenne [25]
|
||||
0.00 0.00 1/1 ecart_type_longueur [21]
|
||||
0.00 0.00 1/1 racine [26]
|
||||
0.00 0.00 1/1 construire_rapport [20]
|
||||
0.00 0.00 1/1 empreinte [22]
|
||||
-----------------------------------------------
|
||||
0.00 0.00 153101/12198772 chercher_mot [8]
|
||||
0.05 0.00 12045671/12198772 est_mot_vide [4]
|
||||
[2] 62.5 0.05 0.00 12198772 egales [2]
|
||||
-----------------------------------------------
|
||||
0.00 0.05 21746/21746 main [1]
|
||||
[3] 62.5 0.00 0.05 21746 compter_mots_ligne [3]
|
||||
0.00 0.05 250000/250000 est_mot_vide [4]
|
||||
0.00 0.00 150182/150182 compter_mot [9]
|
||||
-----------------------------------------------
|
||||
0.00 0.05 250000/250000 compter_mots_ligne [3]
|
||||
[4] 61.7 0.00 0.05 250000 est_mot_vide [4]
|
||||
0.05 0.00 12045671/12198772 egales [2]
|
||||
-----------------------------------------------
|
||||
0.01 0.00 1/1 main [1]
|
||||
[5] 12.5 0.01 0.00 1 analyser_bigrammes [5]
|
||||
-----------------------------------------------
|
||||
0.01 0.00 1/1 main [1]
|
||||
[6] 12.5 0.01 0.00 1 decouper_lignes [6]
|
||||
-----------------------------------------------
|
||||
<spontaneous>
|
||||
[7] 12.5 0.01 0.00 _init [7]
|
||||
-----------------------------------------------
|
||||
0.00 0.00 150182/150182 compter_mot [9]
|
||||
[8] 0.8 0.00 0.00 150182 chercher_mot [8]
|
||||
0.00 0.00 153101/12198772 egales [2]
|
||||
0.00 0.00 150182/150182 hacher_mot [13]
|
||||
-----------------------------------------------
|
||||
0.00 0.00 150182/150182 compter_mots_ligne [3]
|
||||
[9] 0.8 0.00 0.00 150182 compter_mot [9]
|
||||
0.00 0.00 150182/150182 chercher_mot [8]
|
||||
0.00 0.00 5866/5866 copier [19]
|
||||
-----------------------------------------------
|
||||
0.00 0.00 1539584/1539584 normaliser_ligne [17]
|
||||
[10] 0.0 0.00 0.00 1539584 est_lettre [10]
|
||||
-----------------------------------------------
|
||||
0.00 0.00 1266663/1266663 normaliser_ligne [17]
|
||||
[11] 0.0 0.00 0.00 1266663 en_minuscule [11]
|
||||
-----------------------------------------------
|
||||
0.00 0.00 27934/928117 generer_vocabulaire [24]
|
||||
0.00 0.00 900183/928117 generer_texte [23]
|
||||
[12] 0.0 0.00 0.00 928117 alea [12]
|
||||
-----------------------------------------------
|
||||
0.00 0.00 150182/150182 chercher_mot [8]
|
||||
[13] 0.0 0.00 0.00 150182 hacher_mot [13]
|
||||
-----------------------------------------------
|
||||
0.00 0.00 129602/129602 retablir_tas [18]
|
||||
[14] 0.0 0.00 0.00 129602 doit_echanger [14]
|
||||
0.00 0.00 32813/32813 comparer [15]
|
||||
-----------------------------------------------
|
||||
0.00 0.00 32813/32813 doit_echanger [14]
|
||||
[15] 0.0 0.00 0.00 32813 comparer [15]
|
||||
-----------------------------------------------
|
||||
0.00 0.00 5867/26801 construire_rapport [20]
|
||||
0.00 0.00 20934/26801 generer_vocabulaire [24]
|
||||
[16] 0.0 0.00 0.00 26801 ajouter [16]
|
||||
-----------------------------------------------
|
||||
0.00 0.00 21746/21746 main [1]
|
||||
[17] 0.0 0.00 0.00 21746 normaliser_ligne [17]
|
||||
0.00 0.00 1539584/1539584 est_lettre [10]
|
||||
0.00 0.00 1266663/1266663 en_minuscule [11]
|
||||
-----------------------------------------------
|
||||
0.00 0.00 8798/8798 trier_entrees [27]
|
||||
[18] 0.0 0.00 0.00 8798 retablir_tas [18]
|
||||
0.00 0.00 129602/129602 doit_echanger [14]
|
||||
-----------------------------------------------
|
||||
0.00 0.00 5866/5866 compter_mot [9]
|
||||
[19] 0.0 0.00 0.00 5866 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 5867/26801 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 generer_texte [23]
|
||||
0.00 0.00 900183/928117 alea [12]
|
||||
-----------------------------------------------
|
||||
0.00 0.00 1/1 main [1]
|
||||
[24] 0.0 0.00 0.00 1 generer_vocabulaire [24]
|
||||
0.00 0.00 27934/928117 alea [12]
|
||||
0.00 0.00 20934/26801 ajouter [16]
|
||||
-----------------------------------------------
|
||||
0.00 0.00 1/1 main [1]
|
||||
[25] 0.0 0.00 0.00 1 longueur_moyenne [25]
|
||||
-----------------------------------------------
|
||||
0.00 0.00 1/1 main [1]
|
||||
[26] 0.0 0.00 0.00 1 racine [26]
|
||||
-----------------------------------------------
|
||||
0.00 0.00 1/1 main [1]
|
||||
[27] 0.0 0.00 0.00 1 trier_entrees [27]
|
||||
0.00 0.00 8798/8798 retablir_tas [18]
|
||||
-----------------------------------------------
|
||||
|
||||
Index by function name
|
||||
|
||||
[7] _init [19] copier [23] generer_texte
|
||||
[16] ajouter [6] decouper_lignes [24] generer_vocabulaire
|
||||
[12] alea [14] doit_echanger [13] hacher_mot
|
||||
[5] analyser_bigrammes [21] ecart_type_longueur [25] longueur_moyenne
|
||||
[8] chercher_mot [2] egales [17] normaliser_ligne
|
||||
[15] comparer [22] empreinte [26] racine
|
||||
[9] compter_mot [11] en_minuscule [18] retablir_tas
|
||||
[3] compter_mots_ligne [10] est_lettre [27] trier_entrees
|
||||
[20] construire_rapport [4] est_mot_vide
|
||||
@@ -0,0 +1,169 @@
|
||||
Flat profile:
|
||||
|
||||
Each sample counts as 0.01 seconds.
|
||||
% cumulative self self total
|
||||
time seconds seconds calls ms/call ms/call name
|
||||
50.00 0.01 0.01 1 10.00 10.00 analyser_bigrammes
|
||||
50.00 0.02 0.01 1 10.00 10.00 decouper_lignes
|
||||
0.00 0.02 0.00 1539584 0.00 0.00 est_lettre
|
||||
0.00 0.02 0.00 1266663 0.00 0.00 en_minuscule
|
||||
0.00 0.02 0.00 928117 0.00 0.00 alea
|
||||
0.00 0.02 0.00 355573 0.00 0.00 egales
|
||||
0.00 0.02 0.00 293223 0.00 0.00 hacher_mot
|
||||
0.00 0.02 0.00 250000 0.00 0.00 est_mot_vide
|
||||
0.00 0.02 0.00 150182 0.00 0.00 chercher_mot
|
||||
0.00 0.02 0.00 150182 0.00 0.00 compter_mot
|
||||
0.00 0.02 0.00 129602 0.00 0.00 doit_echanger
|
||||
0.00 0.02 0.00 32813 0.00 0.00 comparer
|
||||
0.00 0.02 0.00 26801 0.00 0.00 ajouter
|
||||
0.00 0.02 0.00 21746 0.00 0.00 compter_mots_ligne
|
||||
0.00 0.02 0.00 21746 0.00 0.00 normaliser_ligne
|
||||
0.00 0.02 0.00 8798 0.00 0.00 retablir_tas
|
||||
0.00 0.02 0.00 5866 0.00 0.00 copier
|
||||
0.00 0.02 0.00 1 0.00 0.00 construire_rapport
|
||||
0.00 0.02 0.00 1 0.00 0.00 ecart_type_longueur
|
||||
0.00 0.02 0.00 1 0.00 0.00 empreinte
|
||||
0.00 0.02 0.00 1 0.00 0.00 generer_texte
|
||||
0.00 0.02 0.00 1 0.00 0.00 generer_vocabulaire
|
||||
0.00 0.02 0.00 1 0.00 0.00 initialiser_mots_vides
|
||||
0.00 0.02 0.00 1 0.00 0.00 longueur_moyenne
|
||||
0.00 0.02 0.00 1 0.00 0.00 racine
|
||||
0.00 0.02 0.00 1 0.00 0.00 trier_entrees
|
||||
|
||||
Call graph
|
||||
|
||||
|
||||
granularity: each sample hit covers 4 byte(s) for 50.00% of 0.02 seconds
|
||||
|
||||
index % time self children called name
|
||||
<spontaneous>
|
||||
[1] 100.0 0.00 0.02 main [1]
|
||||
0.01 0.00 1/1 decouper_lignes [3]
|
||||
0.01 0.00 1/1 analyser_bigrammes [2]
|
||||
0.00 0.00 21746/21746 normaliser_ligne [16]
|
||||
0.00 0.00 21746/21746 compter_mots_ligne [15]
|
||||
0.00 0.00 1/1 generer_vocabulaire [23]
|
||||
0.00 0.00 1/1 generer_texte [22]
|
||||
0.00 0.00 1/1 trier_entrees [27]
|
||||
0.00 0.00 1/1 longueur_moyenne [25]
|
||||
0.00 0.00 1/1 ecart_type_longueur [20]
|
||||
0.00 0.00 1/1 racine [26]
|
||||
0.00 0.00 1/1 construire_rapport [19]
|
||||
0.00 0.00 1/1 empreinte [21]
|
||||
-----------------------------------------------
|
||||
0.01 0.00 1/1 main [1]
|
||||
[2] 50.0 0.01 0.00 1 analyser_bigrammes [2]
|
||||
-----------------------------------------------
|
||||
0.01 0.00 1/1 main [1]
|
||||
[3] 50.0 0.01 0.00 1 decouper_lignes [3]
|
||||
-----------------------------------------------
|
||||
0.00 0.00 1539584/1539584 normaliser_ligne [16]
|
||||
[4] 0.0 0.00 0.00 1539584 est_lettre [4]
|
||||
-----------------------------------------------
|
||||
0.00 0.00 1266663/1266663 normaliser_ligne [16]
|
||||
[5] 0.0 0.00 0.00 1266663 en_minuscule [5]
|
||||
-----------------------------------------------
|
||||
0.00 0.00 27934/928117 generer_vocabulaire [23]
|
||||
0.00 0.00 900183/928117 generer_texte [22]
|
||||
[6] 0.0 0.00 0.00 928117 alea [6]
|
||||
-----------------------------------------------
|
||||
0.00 0.00 28/355573 initialiser_mots_vides [24]
|
||||
0.00 0.00 153101/355573 chercher_mot [10]
|
||||
0.00 0.00 202444/355573 est_mot_vide [9]
|
||||
[7] 0.0 0.00 0.00 355573 egales [7]
|
||||
-----------------------------------------------
|
||||
0.00 0.00 60/293223 initialiser_mots_vides [24]
|
||||
0.00 0.00 142981/293223 est_mot_vide [9]
|
||||
0.00 0.00 150182/293223 chercher_mot [10]
|
||||
[8] 0.0 0.00 0.00 293223 hacher_mot [8]
|
||||
-----------------------------------------------
|
||||
0.00 0.00 250000/250000 compter_mots_ligne [15]
|
||||
[9] 0.0 0.00 0.00 250000 est_mot_vide [9]
|
||||
0.00 0.00 202444/355573 egales [7]
|
||||
0.00 0.00 142981/293223 hacher_mot [8]
|
||||
0.00 0.00 1/1 initialiser_mots_vides [24]
|
||||
-----------------------------------------------
|
||||
0.00 0.00 150182/150182 compter_mot [11]
|
||||
[10] 0.0 0.00 0.00 150182 chercher_mot [10]
|
||||
0.00 0.00 153101/355573 egales [7]
|
||||
0.00 0.00 150182/293223 hacher_mot [8]
|
||||
-----------------------------------------------
|
||||
0.00 0.00 150182/150182 compter_mots_ligne [15]
|
||||
[11] 0.0 0.00 0.00 150182 compter_mot [11]
|
||||
0.00 0.00 150182/150182 chercher_mot [10]
|
||||
0.00 0.00 5866/5866 copier [18]
|
||||
-----------------------------------------------
|
||||
0.00 0.00 129602/129602 retablir_tas [17]
|
||||
[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 [19]
|
||||
0.00 0.00 20934/26801 generer_vocabulaire [23]
|
||||
[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 compter_mots_ligne [15]
|
||||
0.00 0.00 250000/250000 est_mot_vide [9]
|
||||
0.00 0.00 150182/150182 compter_mot [11]
|
||||
-----------------------------------------------
|
||||
0.00 0.00 21746/21746 main [1]
|
||||
[16] 0.0 0.00 0.00 21746 normaliser_ligne [16]
|
||||
0.00 0.00 1539584/1539584 est_lettre [4]
|
||||
0.00 0.00 1266663/1266663 en_minuscule [5]
|
||||
-----------------------------------------------
|
||||
0.00 0.00 8798/8798 trier_entrees [27]
|
||||
[17] 0.0 0.00 0.00 8798 retablir_tas [17]
|
||||
0.00 0.00 129602/129602 doit_echanger [12]
|
||||
-----------------------------------------------
|
||||
0.00 0.00 5866/5866 compter_mot [11]
|
||||
[18] 0.0 0.00 0.00 5866 copier [18]
|
||||
-----------------------------------------------
|
||||
0.00 0.00 1/1 main [1]
|
||||
[19] 0.0 0.00 0.00 1 construire_rapport [19]
|
||||
0.00 0.00 5867/26801 ajouter [14]
|
||||
-----------------------------------------------
|
||||
0.00 0.00 1/1 main [1]
|
||||
[20] 0.0 0.00 0.00 1 ecart_type_longueur [20]
|
||||
-----------------------------------------------
|
||||
0.00 0.00 1/1 main [1]
|
||||
[21] 0.0 0.00 0.00 1 empreinte [21]
|
||||
-----------------------------------------------
|
||||
0.00 0.00 1/1 main [1]
|
||||
[22] 0.0 0.00 0.00 1 generer_texte [22]
|
||||
0.00 0.00 900183/928117 alea [6]
|
||||
-----------------------------------------------
|
||||
0.00 0.00 1/1 main [1]
|
||||
[23] 0.0 0.00 0.00 1 generer_vocabulaire [23]
|
||||
0.00 0.00 27934/928117 alea [6]
|
||||
0.00 0.00 20934/26801 ajouter [14]
|
||||
-----------------------------------------------
|
||||
0.00 0.00 1/1 est_mot_vide [9]
|
||||
[24] 0.0 0.00 0.00 1 initialiser_mots_vides [24]
|
||||
0.00 0.00 60/293223 hacher_mot [8]
|
||||
0.00 0.00 28/355573 egales [7]
|
||||
-----------------------------------------------
|
||||
0.00 0.00 1/1 main [1]
|
||||
[25] 0.0 0.00 0.00 1 longueur_moyenne [25]
|
||||
-----------------------------------------------
|
||||
0.00 0.00 1/1 main [1]
|
||||
[26] 0.0 0.00 0.00 1 racine [26]
|
||||
-----------------------------------------------
|
||||
0.00 0.00 1/1 main [1]
|
||||
[27] 0.0 0.00 0.00 1 trier_entrees [27]
|
||||
0.00 0.00 8798/8798 retablir_tas [17]
|
||||
-----------------------------------------------
|
||||
|
||||
Index by function name
|
||||
|
||||
[14] ajouter [3] decouper_lignes [23] generer_vocabulaire
|
||||
[6] alea [12] doit_echanger [8] hacher_mot
|
||||
[2] analyser_bigrammes [20] ecart_type_longueur [24] initialiser_mots_vides
|
||||
[10] chercher_mot [7] egales [25] longueur_moyenne
|
||||
[13] comparer [21] empreinte [16] normaliser_ligne
|
||||
[11] compter_mot [5] en_minuscule [26] racine
|
||||
[15] compter_mots_ligne [4] est_lettre [17] retablir_tas
|
||||
[19] construire_rapport [9] est_mot_vide [27] trier_entrees
|
||||
[18] copier [22] generer_texte
|
||||
@@ -0,0 +1,158 @@
|
||||
Flat profile:
|
||||
|
||||
Each sample counts as 0.01 seconds.
|
||||
% cumulative self self total
|
||||
time seconds seconds calls ns/call ns/call name
|
||||
66.67 0.02 0.02 250000 80.00 80.00 est_mot_vide
|
||||
33.33 0.03 0.01 21746 459.85 459.85 normaliser_ligne
|
||||
0.00 0.03 0.00 928117 0.00 0.00 alea
|
||||
0.00 0.03 0.00 355573 0.00 0.00 egales
|
||||
0.00 0.03 0.00 293223 0.00 0.00 hacher_mot
|
||||
0.00 0.03 0.00 150182 0.00 0.00 chercher_mot
|
||||
0.00 0.03 0.00 150182 0.00 0.00 compter_mot
|
||||
0.00 0.03 0.00 129602 0.00 0.00 doit_echanger
|
||||
0.00 0.03 0.00 32813 0.00 0.00 comparer
|
||||
0.00 0.03 0.00 26801 0.00 0.00 ajouter
|
||||
0.00 0.03 0.00 21746 0.00 919.71 compter_mots_ligne
|
||||
0.00 0.03 0.00 8798 0.00 0.00 retablir_tas
|
||||
0.00 0.03 0.00 5866 0.00 0.00 copier
|
||||
0.00 0.03 0.00 1 0.00 0.00 analyser_bigrammes
|
||||
0.00 0.03 0.00 1 0.00 0.00 construire_rapport
|
||||
0.00 0.03 0.00 1 0.00 0.00 decouper_lignes
|
||||
0.00 0.03 0.00 1 0.00 0.00 ecart_type_longueur
|
||||
0.00 0.03 0.00 1 0.00 0.00 empreinte
|
||||
0.00 0.03 0.00 1 0.00 0.00 generer_texte
|
||||
0.00 0.03 0.00 1 0.00 0.00 generer_vocabulaire
|
||||
0.00 0.03 0.00 1 0.00 0.00 initialiser_mots_vides
|
||||
0.00 0.03 0.00 1 0.00 0.00 longueur_moyenne
|
||||
0.00 0.03 0.00 1 0.00 0.00 racine
|
||||
0.00 0.03 0.00 1 0.00 0.00 trier_entrees
|
||||
|
||||
Call graph
|
||||
|
||||
|
||||
granularity: each sample hit covers 4 byte(s) for 33.33% of 0.03 seconds
|
||||
|
||||
index % time self children called name
|
||||
<spontaneous>
|
||||
[1] 100.0 0.00 0.03 main [1]
|
||||
0.00 0.02 21746/21746 compter_mots_ligne [3]
|
||||
0.01 0.00 21746/21746 normaliser_ligne [4]
|
||||
0.00 0.00 1/1 generer_vocabulaire [21]
|
||||
0.00 0.00 1/1 generer_texte [20]
|
||||
0.00 0.00 1/1 decouper_lignes [17]
|
||||
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 [18]
|
||||
0.00 0.00 1/1 racine [24]
|
||||
0.00 0.00 1/1 analyser_bigrammes [15]
|
||||
0.00 0.00 1/1 construire_rapport [16]
|
||||
0.00 0.00 1/1 empreinte [19]
|
||||
-----------------------------------------------
|
||||
0.02 0.00 250000/250000 compter_mots_ligne [3]
|
||||
[2] 66.7 0.02 0.00 250000 est_mot_vide [2]
|
||||
0.00 0.00 202444/355573 egales [6]
|
||||
0.00 0.00 142981/293223 hacher_mot [7]
|
||||
0.00 0.00 1/1 initialiser_mots_vides [22]
|
||||
-----------------------------------------------
|
||||
0.00 0.02 21746/21746 main [1]
|
||||
[3] 66.7 0.00 0.02 21746 compter_mots_ligne [3]
|
||||
0.02 0.00 250000/250000 est_mot_vide [2]
|
||||
0.00 0.00 150182/150182 compter_mot [9]
|
||||
-----------------------------------------------
|
||||
0.01 0.00 21746/21746 main [1]
|
||||
[4] 33.3 0.01 0.00 21746 normaliser_ligne [4]
|
||||
-----------------------------------------------
|
||||
0.00 0.00 27934/928117 generer_vocabulaire [21]
|
||||
0.00 0.00 900183/928117 generer_texte [20]
|
||||
[5] 0.0 0.00 0.00 928117 alea [5]
|
||||
-----------------------------------------------
|
||||
0.00 0.00 28/355573 initialiser_mots_vides [22]
|
||||
0.00 0.00 153101/355573 chercher_mot [8]
|
||||
0.00 0.00 202444/355573 est_mot_vide [2]
|
||||
[6] 0.0 0.00 0.00 355573 egales [6]
|
||||
-----------------------------------------------
|
||||
0.00 0.00 60/293223 initialiser_mots_vides [22]
|
||||
0.00 0.00 142981/293223 est_mot_vide [2]
|
||||
0.00 0.00 150182/293223 chercher_mot [8]
|
||||
[7] 0.0 0.00 0.00 293223 hacher_mot [7]
|
||||
-----------------------------------------------
|
||||
0.00 0.00 150182/150182 compter_mot [9]
|
||||
[8] 0.0 0.00 0.00 150182 chercher_mot [8]
|
||||
0.00 0.00 153101/355573 egales [6]
|
||||
0.00 0.00 150182/293223 hacher_mot [7]
|
||||
-----------------------------------------------
|
||||
0.00 0.00 150182/150182 compter_mots_ligne [3]
|
||||
[9] 0.0 0.00 0.00 150182 compter_mot [9]
|
||||
0.00 0.00 150182/150182 chercher_mot [8]
|
||||
0.00 0.00 5866/5866 copier [14]
|
||||
-----------------------------------------------
|
||||
0.00 0.00 129602/129602 retablir_tas [13]
|
||||
[10] 0.0 0.00 0.00 129602 doit_echanger [10]
|
||||
0.00 0.00 32813/32813 comparer [11]
|
||||
-----------------------------------------------
|
||||
0.00 0.00 32813/32813 doit_echanger [10]
|
||||
[11] 0.0 0.00 0.00 32813 comparer [11]
|
||||
-----------------------------------------------
|
||||
0.00 0.00 5867/26801 construire_rapport [16]
|
||||
0.00 0.00 20934/26801 generer_vocabulaire [21]
|
||||
[12] 0.0 0.00 0.00 26801 ajouter [12]
|
||||
-----------------------------------------------
|
||||
0.00 0.00 8798/8798 trier_entrees [25]
|
||||
[13] 0.0 0.00 0.00 8798 retablir_tas [13]
|
||||
0.00 0.00 129602/129602 doit_echanger [10]
|
||||
-----------------------------------------------
|
||||
0.00 0.00 5866/5866 compter_mot [9]
|
||||
[14] 0.0 0.00 0.00 5866 copier [14]
|
||||
-----------------------------------------------
|
||||
0.00 0.00 1/1 main [1]
|
||||
[15] 0.0 0.00 0.00 1 analyser_bigrammes [15]
|
||||
-----------------------------------------------
|
||||
0.00 0.00 1/1 main [1]
|
||||
[16] 0.0 0.00 0.00 1 construire_rapport [16]
|
||||
0.00 0.00 5867/26801 ajouter [12]
|
||||
-----------------------------------------------
|
||||
0.00 0.00 1/1 main [1]
|
||||
[17] 0.0 0.00 0.00 1 decouper_lignes [17]
|
||||
-----------------------------------------------
|
||||
0.00 0.00 1/1 main [1]
|
||||
[18] 0.0 0.00 0.00 1 ecart_type_longueur [18]
|
||||
-----------------------------------------------
|
||||
0.00 0.00 1/1 main [1]
|
||||
[19] 0.0 0.00 0.00 1 empreinte [19]
|
||||
-----------------------------------------------
|
||||
0.00 0.00 1/1 main [1]
|
||||
[20] 0.0 0.00 0.00 1 generer_texte [20]
|
||||
0.00 0.00 900183/928117 alea [5]
|
||||
-----------------------------------------------
|
||||
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 [5]
|
||||
0.00 0.00 20934/26801 ajouter [12]
|
||||
-----------------------------------------------
|
||||
0.00 0.00 1/1 est_mot_vide [2]
|
||||
[22] 0.0 0.00 0.00 1 initialiser_mots_vides [22]
|
||||
0.00 0.00 60/293223 hacher_mot [7]
|
||||
0.00 0.00 28/355573 egales [6]
|
||||
-----------------------------------------------
|
||||
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 [13]
|
||||
-----------------------------------------------
|
||||
|
||||
Index by function name
|
||||
|
||||
[12] ajouter [14] copier [21] generer_vocabulaire
|
||||
[5] alea [17] decouper_lignes [7] hacher_mot
|
||||
[15] analyser_bigrammes [10] doit_echanger [22] initialiser_mots_vides
|
||||
[8] chercher_mot [18] ecart_type_longueur [23] longueur_moyenne
|
||||
[11] comparer [6] egales [4] normaliser_ligne
|
||||
[9] compter_mot [19] empreinte [24] racine
|
||||
[3] compter_mots_ligne [2] est_mot_vide [13] retablir_tas
|
||||
[16] construire_rapport [20] generer_texte [25] trier_entrees
|
||||
@@ -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
@@ -14,15 +14,17 @@
|
||||
* L'empreinte affichée à la fin doit rester IDENTIQUE après optimisation :
|
||||
* elle prouve que le résultat du programme n'a pas changé.
|
||||
*
|
||||
* Compilation : gcc -O0 -pg analyseur.c -o analyseur
|
||||
* Exécution : ./analyseur
|
||||
* Profil : gprof ./analyseur gmon.out > profil.txt
|
||||
* Depuis la racine du dépôt :
|
||||
* Compilation : make
|
||||
* Exécution : make run
|
||||
* Validation : make check
|
||||
* Profil : make profile (build/profil/profil.txt)
|
||||
*/
|
||||
|
||||
#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
|
||||
@@ -85,18 +87,6 @@ void ajouter(char *dest, const char *src, size_t *position)
|
||||
*position = fin;
|
||||
}
|
||||
|
||||
char en_minuscule(char c)
|
||||
{
|
||||
if (c >= 'A' && c <= 'Z')
|
||||
return c - 'A' + 'a';
|
||||
return c;
|
||||
}
|
||||
|
||||
int est_lettre(char c)
|
||||
{
|
||||
return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z');
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------------ */
|
||||
/* Génération du texte */
|
||||
/* ------------------------------------------------------------------------ */
|
||||
@@ -110,6 +100,7 @@ static const char *MOTS_VIDES[] = {
|
||||
"ses", "leur", "leurs", "mon", "ma", "mes", "ne", "pas", "plus", "est"
|
||||
};
|
||||
#define NB_MOTS_VIDES ((int)(sizeof(MOTS_VIDES) / sizeof(MOTS_VIDES[0])))
|
||||
#define TAILLE_HACHAGE_VIDES (2 * NB_MOTS_VIDES + 1)
|
||||
|
||||
static const char *SYLLABES[] = {
|
||||
"ba", "be", "bi", "bo", "ca", "co", "da", "de", "di", "fa", "fi", "ga",
|
||||
@@ -181,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 *));
|
||||
@@ -190,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;
|
||||
}
|
||||
@@ -209,12 +200,25 @@ char **decouper_lignes(const char *texte, int *nb_lignes)
|
||||
|
||||
void normaliser_ligne(char *ligne)
|
||||
{
|
||||
for (int i = 0; ligne[i] != '\0'; i++) {
|
||||
if (est_lettre(ligne[i]))
|
||||
ligne[i] = en_minuscule(ligne[i]);
|
||||
else
|
||||
ligne[i] = ' ';
|
||||
static char conversion[256];
|
||||
static int initialisee = 0;
|
||||
|
||||
if (!initialisee) {
|
||||
for (int c = 0; c < 256; c++) {
|
||||
if (c >= 'A' && c <= 'Z')
|
||||
conversion[c] = (char)(c - 'A' + 'a');
|
||||
else if (c >= 'a' && c <= 'z')
|
||||
conversion[c] = (char)c;
|
||||
else
|
||||
conversion[c] = ' ';
|
||||
}
|
||||
conversion[0] = '\0';
|
||||
initialisee = 1;
|
||||
}
|
||||
|
||||
/* L'indice non signé couvre les 256 valeurs possibles d'un octet. */
|
||||
for (int i = 0; ligne[i] != '\0'; i++)
|
||||
ligne[i] = conversion[(unsigned char)ligne[i]];
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------------ */
|
||||
@@ -227,15 +231,6 @@ typedef struct {
|
||||
int taille;
|
||||
} Entree;
|
||||
|
||||
int est_mot_vide(const char *mot)
|
||||
{
|
||||
for (int i = 0; i < NB_MOTS_VIDES; i++) {
|
||||
if (egales(mot, MOTS_VIDES[i]))
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
unsigned int hacher_mot(const char *mot)
|
||||
{
|
||||
unsigned int h = 2166136261u;
|
||||
@@ -246,6 +241,48 @@ unsigned int hacher_mot(const char *mot)
|
||||
return h;
|
||||
}
|
||||
|
||||
/* Construire un index séparé sans modifier la liste utilisée par le générateur.
|
||||
* L'index est initialement rempli de zéros ; chaque case contient indice + 1. */
|
||||
static int initialiser_mots_vides(int *index_mots_vides)
|
||||
{
|
||||
int taille_max = 0;
|
||||
for (int i = 0; i < NB_MOTS_VIDES; i++) {
|
||||
int taille = 0;
|
||||
while (MOTS_VIDES[i][taille] != '\0')
|
||||
taille++;
|
||||
if (taille > taille_max)
|
||||
taille_max = taille;
|
||||
|
||||
int position = hacher_mot(MOTS_VIDES[i]) % TAILLE_HACHAGE_VIDES;
|
||||
while (index_mots_vides[position] != 0 &&
|
||||
!egales(MOTS_VIDES[index_mots_vides[position] - 1], MOTS_VIDES[i]))
|
||||
position = (position + 1) % TAILLE_HACHAGE_VIDES;
|
||||
/* Un doublon, comme "ou", réutilise la même case. */
|
||||
index_mots_vides[position] = i + 1;
|
||||
}
|
||||
return taille_max;
|
||||
}
|
||||
|
||||
int est_mot_vide(const char *mot, int taille)
|
||||
{
|
||||
static int index_mots_vides[TAILLE_HACHAGE_VIDES];
|
||||
static int taille_max = -1;
|
||||
if (taille_max < 0)
|
||||
taille_max = initialiser_mots_vides(index_mots_vides);
|
||||
|
||||
/* La taille provient du découpage : aucun nouveau parcours du mot. */
|
||||
if (taille > taille_max)
|
||||
return 0;
|
||||
|
||||
int position = hacher_mot(mot) % TAILLE_HACHAGE_VIDES;
|
||||
while (index_mots_vides[position] != 0) {
|
||||
if (egales(mot, MOTS_VIDES[index_mots_vides[position] - 1]))
|
||||
return 1;
|
||||
position = (position + 1) % TAILLE_HACHAGE_VIDES;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* L'index contient indice + 1 ; zéro désigne une case libre.
|
||||
* Renvoie l'indice du mot, ou -(case libre + 1) s'il est absent. */
|
||||
int chercher_mot(const Entree *table, const int *index_mots, const char *mot)
|
||||
@@ -302,7 +339,7 @@ void compter_mots_ligne(Entree *table, int *nb_entrees, int *index_mots,
|
||||
mot[k] = '\0';
|
||||
if (k > 0) {
|
||||
(*nb_mots_total)++;
|
||||
if (!est_mot_vide(mot))
|
||||
if (!est_mot_vide(mot, k))
|
||||
compter_mot(table, nb_entrees, index_mots, mot, k);
|
||||
}
|
||||
}
|
||||
@@ -373,7 +410,8 @@ double ecart_type_longueur(const Entree *table, int n, double moyenne)
|
||||
}
|
||||
|
||||
/* Recherche du bigramme de lettres le plus fréquent, avec en bonus la
|
||||
* troisième lettre qui le suit le plus souvent. */
|
||||
* troisième lettre qui le suit le plus souvent.
|
||||
* Les lignes doivent être normalisées : lettres 'a' à 'z' ou espaces. */
|
||||
void analyser_bigrammes(char **lignes, int nb_lignes,
|
||||
char *meilleur, int *occ_meilleur)
|
||||
{
|
||||
@@ -381,9 +419,18 @@ void analyser_bigrammes(char **lignes, int nb_lignes,
|
||||
|
||||
for (int l = 0; l < nb_lignes; l++) {
|
||||
const char *s = lignes[l];
|
||||
for (int i = 0; s[i] != '\0' && s[i + 1] != '\0' && s[i + 2] != '\0'; i++) {
|
||||
if (est_lettre(s[i]) && est_lettre(s[i + 1]) && est_lettre(s[i + 2]))
|
||||
trigrammes[s[i] - 'a'][s[i + 1] - 'a'][s[i + 2] - 'a']++;
|
||||
int avant_dernier = -1;
|
||||
int dernier = -1;
|
||||
for (int i = 0; s[i] != '\0'; i++) {
|
||||
if (s[i] == ' ') {
|
||||
avant_dernier = dernier = -1;
|
||||
continue;
|
||||
}
|
||||
int lettre = s[i] - 'a';
|
||||
if (avant_dernier >= 0)
|
||||
trigrammes[avant_dernier][dernier][lettre]++;
|
||||
avant_dernier = dernier;
|
||||
dernier = lettre;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -502,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++)
|
||||
Reference in New Issue
Block a user