forked from menault/2026_TD1_DEV51_Qualite_Algo
Compare commits
2 Commits
5f9c5eec33
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| e7f47e975f | |||
| 7ab243f1d6 |
+118
@@ -0,0 +1,118 @@
|
|||||||
|
# Compte rendu — TD 1 : utilisation de gprof
|
||||||
|
### Nathan COUCHOT et Lucas POT
|
||||||
|
|
||||||
|
## 1. Mesurer le programme sans instrumentation
|
||||||
|
|
||||||
|
La mesure sans profiler se réalise avec les commandes suivantes, depuis le dossier du programme :
|
||||||
|
|
||||||
|
```bash
|
||||||
|
gcc -O0 analyseur.c -o analyseur
|
||||||
|
time ./analyseur
|
||||||
|
```
|
||||||
|
|
||||||
|
La nouvelle exécution sans `-pg`, sur le même volume de texte que le profil, donne :
|
||||||
|
|
||||||
|
| Mesure | Temps |
|
||||||
|
| --- | ---: |
|
||||||
|
| Temps réel (`real`) | 1,200 s |
|
||||||
|
| Temps CPU utilisateur (`user`) | 1,164 s |
|
||||||
|
| Temps CPU système (`sys`) | 0,022 s |
|
||||||
|
|
||||||
|
L'empreinte du rapport est **`03c7b78f93838d02`**. Cette empreinte sert de référence pour vérifier que le résultat reste identique lors d'une comparaison effectuée avec les mêmes données.
|
||||||
|
|
||||||
|
Les dix mots les plus fréquents sont :
|
||||||
|
|
||||||
|
| Rang | Mot | Occurrences |
|
||||||
|
| --- | --- | ---: |
|
||||||
|
| 1 | rane | 2 811 |
|
||||||
|
| 2 | fasi | 2 399 |
|
||||||
|
| 3 | mopo | 2 161 |
|
||||||
|
| 4 | tata | 2 086 |
|
||||||
|
| 5 | vesi | 1 979 |
|
||||||
|
| 6 | laganomo | 1 784 |
|
||||||
|
| 7 | boto | 1 697 |
|
||||||
|
| 8 | nopebo | 1 653 |
|
||||||
|
| 9 | cofi | 1 612 |
|
||||||
|
| 10 | siri | 1 593 |
|
||||||
|
|
||||||
|
## 2. Compiler avec `-pg` et produire le profil
|
||||||
|
|
||||||
|
Pour activer l'instrumentation de `gprof`, on compile avec `-O0 -pg`, puis on exécute le programme et on génère le profil :
|
||||||
|
|
||||||
|
```bash
|
||||||
|
gcc -O0 -pg analyseur.c -o analyseur
|
||||||
|
time ./analyseur
|
||||||
|
gprof ./analyseur gmon.out > profil_avant.txt
|
||||||
|
```
|
||||||
|
|
||||||
|
On passe d'une mesure de **1,200 s sans `-pg`** à un temps réel relevé de **2,750 s avec `-pg`**, soit une durée environ **2,29 fois plus longue** et un écart de **1,550 s** (environ **129 %** d'augmentation). Le profil affiche cependant seulement **0,91 s de temps effectif estimé dans les fonctions analysées**.
|
||||||
|
|
||||||
|
L'option `-pg` ajoute du travail à chaque entrée dans une fonction pour compter les appels. Avec des dizaines de millions d'appels à de petites fonctions, ce surcoût devient très important : le profiling perturbe donc fortement la durée d'exécution.
|
||||||
|
|
||||||
|
## 3. Analyser le profil plat et le graphe d'appels
|
||||||
|
|
||||||
|
### Profil plat : où passe le temps ?
|
||||||
|
|
||||||
|
Le profil plat indique le temps propre de chaque fonction, sans le temps de ses fonctions appelées. Les principaux résultats de `profil_avant.txt` sont :
|
||||||
|
|
||||||
|
| Fonction | Part du temps propre | Temps propre affiché | Nombre d'appels |
|
||||||
|
| --- | ---: | ---: | ---: |
|
||||||
|
| `egales` | 28,02 % | 0,26 s | 121 889 737 |
|
||||||
|
| `est_mot_vide` | 13,74 % | 0,12 s | 2 500 000 |
|
||||||
|
| `analyser_bigrammes` | 12,09 % | 0,11 s | 1 |
|
||||||
|
| `decouper_lignes` | 7,69 % | 0,07 s | 1 |
|
||||||
|
| `generer_texte` | 6,59 % | 0,06 s | 1 |
|
||||||
|
| `est_lettre` | 5,49 % | 0,05 s | 52 929 320 |
|
||||||
|
|
||||||
|
La fonction `egales` est le principal point chaud : elle compare des chaînes et représente environ 28 % du temps propre mesuré. Son coût vient surtout de son nombre d'appels, supérieur à 121 millions.
|
||||||
|
|
||||||
|
`analyser_bigrammes`, `decouper_lignes` et `generer_texte` ne sont appelées qu'une fois, mais parcourent de grandes quantités de données. Elles peuvent donc consommer un temps significatif malgré leur faible nombre d'appels.
|
||||||
|
|
||||||
|
### Graphe d'appels : pourquoi ces fonctions coûtent-elles du temps ?
|
||||||
|
|
||||||
|
`main` appelle `compter_mots_ligne`, qui vérifie chaque mot avec `est_mot_vide` avant de le compter. Cette étape représente environ **51 % du temps du profil**, fonctions appelées comprises.
|
||||||
|
|
||||||
|
Pour vérifier si un mot est vide, `est_mot_vide` le compare aux éléments d'une liste de 60 mots avec `egales`. Comme cette vérification est répétée pour les 2 500 000 mots du texte, elle entraîne plus de **120 millions de comparaisons** et représente environ **41 % du temps du profil**.
|
||||||
|
|
||||||
|
Le principal coût vient donc de la vérification des mots vides.
|
||||||
|
|
||||||
|
## 4. Proposer des améliorations
|
||||||
|
|
||||||
|
Les pistes suivantes sont classées par gain attendu :
|
||||||
|
|
||||||
|
1. **Optimiser `est_mot_vide`.** Regrouper les mots vides par longueur et première lettre éviterait de parcourir toute la liste et réduirait fortement les appels à `egales`.
|
||||||
|
|
||||||
|
2. **Optimiser `longueur_moyenne`.** Mémoriser la longueur des mots et réutiliser la moyenne dans `ecart_type_longueur` éviterait des parcours inutiles. Le gain attendu est plus faible.
|
||||||
|
|
||||||
|
## 5. Optimisations réalisées
|
||||||
|
|
||||||
|
Dans `est_mot_vide`, les 60 mots vides sont regroupés une seule fois par longueur et première lettre. Pour chaque mot du texte, seules les chaînes du groupe correspondant sont comparées avec `egales`. La longueur est déjà connue lors du découpage du mot.
|
||||||
|
|
||||||
|
La longueur de chaque mot compté est aussi mémorisée dans la table pour calculer les statistiques. La moyenne déjà calculée est transmise à `ecart_type_longueur` pour éviter de la recalculer.
|
||||||
|
|
||||||
|
## 6. Vérifier les résultats et mesurer le gain
|
||||||
|
|
||||||
|
Après compilation avec `gcc -O0 -pg analyseur.c -o analyseur`, deux exécutions donnent :
|
||||||
|
|
||||||
|
| Mesure | Après : essai 1 | Après : essai 2 |
|
||||||
|
| --- | ---: | ---: |
|
||||||
|
| Temps réel | 1,200 s | 1,231 s |
|
||||||
|
| Temps CPU utilisateur | 1,147 s | 1,183 s |
|
||||||
|
| Temps CPU système | 0,016 s | 0,019 s |
|
||||||
|
|
||||||
|
Le temps réel moyen avec `-pg` est de **1,216 s**, contre **2,750 s avant optimisation**, soit environ **55,8 % de temps en moins** et une exécution **2,26 fois plus rapide**. Cette comparaison concerne les versions instrumentées : elle inclut la réduction du surcoût de `-pg` grâce aux appels supprimés.
|
||||||
|
|
||||||
|
La comparaison de `profil_avant.txt` et `profil_après.txt` confirme la réduction du travail :
|
||||||
|
|
||||||
|
| Mesure du profil | Avant | Après |
|
||||||
|
| --- | ---: | ---: |
|
||||||
|
| Temps total estimé par `gprof` | 0,91 s | 0,45 s |
|
||||||
|
| Appels à `egales` | 121 889 737 | 3 413 876 |
|
||||||
|
| Temps propre de `egales` | 0,26 s | 0,02 s |
|
||||||
|
| Temps propre de `est_mot_vide` | 0,12 s | 0,02 s |
|
||||||
|
| Appels à `longueur` | 39 162 | 20 994 |
|
||||||
|
| Appels à `longueur_moyenne` | 2 | 1 |
|
||||||
|
|
||||||
|
Les appels à `egales` diminuent d'environ **97 %**. Les 60 appels à `longueur` ajoutés par l'initialisation des groupes expliquent le passage de 20 934 appels après la seule optimisation des statistiques à 20 994 dans la version finale.
|
||||||
|
|
||||||
|
L'empreinte reste **`03c7b78f93838d02`** dans les deux exécutions. Le Top 10 et les statistiques affichées restent identiques.
|
||||||
+23
-3
@@ -228,10 +228,30 @@ typedef struct {
|
|||||||
int longueur_mot;
|
int longueur_mot;
|
||||||
} Entree;
|
} Entree;
|
||||||
|
|
||||||
int est_mot_vide(const char *mot)
|
/* Groupes par longueur et première lettre ; indices + 1, zéro = fin. */
|
||||||
|
int est_mot_vide(const char *mot, int taille)
|
||||||
{
|
{
|
||||||
|
static int groupes[TAILLE_MOT][26];
|
||||||
|
static int suivants[NB_MOTS_VIDES];
|
||||||
|
static int initialise = 0;
|
||||||
|
|
||||||
|
if (!initialise) {
|
||||||
for (int i = 0; i < NB_MOTS_VIDES; i++) {
|
for (int i = 0; i < NB_MOTS_VIDES; i++) {
|
||||||
if (egales(mot, MOTS_VIDES[i]))
|
int n = longueur(MOTS_VIDES[i]);
|
||||||
|
int lettre = MOTS_VIDES[i][0] - 'a';
|
||||||
|
if (n > 0 && n < TAILLE_MOT && lettre >= 0 && lettre < 26) {
|
||||||
|
suivants[i] = groupes[n][lettre];
|
||||||
|
groupes[n][lettre] = i + 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
initialise = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (taille <= 0 || taille >= TAILLE_MOT || mot[0] < 'a' || mot[0] > 'z')
|
||||||
|
return 0;
|
||||||
|
for (int indice = groupes[taille][mot[0] - 'a']; indice != 0;
|
||||||
|
indice = suivants[indice - 1]) {
|
||||||
|
if (egales(mot, MOTS_VIDES[indice - 1]))
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
@@ -303,7 +323,7 @@ void compter_mots_ligne(Entree *table, int *nb_entrees, const char *ligne,
|
|||||||
mot[k] = '\0';
|
mot[k] = '\0';
|
||||||
if (k > 0) {
|
if (k > 0) {
|
||||||
(*nb_mots_total)++;
|
(*nb_mots_total)++;
|
||||||
if (!est_mot_vide(mot))
|
if (!est_mot_vide(mot, k))
|
||||||
compter_mot(table, nb_entrees, mot, k);
|
compter_mot(table, nb_entrees, mot, k);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
-171
@@ -1,171 +0,0 @@
|
|||||||
Flat profile:
|
|
||||||
|
|
||||||
Each sample counts as 0.01 seconds.
|
|
||||||
% cumulative self self total
|
|
||||||
time seconds seconds calls ms/call ms/call name
|
|
||||||
28.85 0.23 0.23 121889737 0.00 0.00 egales
|
|
||||||
15.38 0.34 0.12 2500000 0.00 0.00 est_mot_vide
|
|
||||||
10.26 0.42 0.08 52929320 0.00 0.00 est_lettre
|
|
||||||
8.97 0.49 0.07 217318 0.00 0.00 compter_mots_ligne
|
|
||||||
7.69 0.56 0.06 1 60.00 69.97 generer_texte
|
|
||||||
5.13 0.59 0.04 1499989 0.00 0.00 hacher_mot
|
|
||||||
5.13 0.64 0.04 1 40.00 96.75 analyser_bigrammes
|
|
||||||
5.13 0.68 0.04 1 40.00 40.00 decouper_lignes
|
|
||||||
2.56 0.69 0.02 1499989 0.00 0.00 compter_mot
|
|
||||||
2.56 0.71 0.02 217318 0.00 0.00 normaliser_ligne
|
|
||||||
2.56 0.73 0.02 _init
|
|
||||||
1.92 0.75 0.01 15787 0.00 0.00 comparer
|
|
||||||
1.28 0.76 0.01 12656214 0.00 0.00 en_minuscule
|
|
||||||
1.28 0.77 0.01 9027924 0.00 0.00 alea
|
|
||||||
1.28 0.78 0.01 1499989 0.00 0.00 chercher_mot
|
|
||||||
0.00 0.78 0.00 68597 0.00 0.00 doit_echanger
|
|
||||||
0.00 0.78 0.00 27010 0.00 0.00 copier
|
|
||||||
0.00 0.78 0.00 20934 0.00 0.00 ajouter
|
|
||||||
0.00 0.78 0.00 20934 0.00 0.00 longueur
|
|
||||||
0.00 0.78 0.00 1 0.00 0.00 construire_rapport
|
|
||||||
0.00 0.78 0.00 1 0.00 0.00 ecart_type_longueur
|
|
||||||
0.00 0.78 0.00 1 0.00 0.00 empreinte
|
|
||||||
0.00 0.78 0.00 1 0.00 15.00 fusionner_entrees
|
|
||||||
0.00 0.78 0.00 1 0.00 0.03 generer_vocabulaire
|
|
||||||
0.00 0.78 0.00 1 0.00 0.00 longueur_moyenne
|
|
||||||
0.00 0.78 0.00 1 0.00 0.00 racine
|
|
||||||
0.00 0.78 0.00 1 0.00 15.00 trier_entrees
|
|
||||||
|
|
||||||
Call graph
|
|
||||||
|
|
||||||
|
|
||||||
granularity: each sample hit covers 4 byte(s) for 1.28% of 0.78 seconds
|
|
||||||
|
|
||||||
index % time self children called name
|
|
||||||
<spontaneous>
|
|
||||||
[1] 97.4 0.00 0.76 main [1]
|
|
||||||
0.07 0.41 217318/217318 compter_mots_ligne [2]
|
|
||||||
0.04 0.06 1/1 analyser_bigrammes [5]
|
|
||||||
0.06 0.01 1/1 generer_texte [8]
|
|
||||||
0.02 0.03 217318/217318 normaliser_ligne [9]
|
|
||||||
0.04 0.00 1/1 decouper_lignes [12]
|
|
||||||
0.00 0.01 1/1 trier_entrees [17]
|
|
||||||
0.00 0.00 1/1 generer_vocabulaire [20]
|
|
||||||
0.00 0.00 1/1 longueur_moyenne [27]
|
|
||||||
0.00 0.00 1/1 ecart_type_longueur [25]
|
|
||||||
0.00 0.00 1/1 racine [28]
|
|
||||||
0.00 0.00 1/1 construire_rapport [24]
|
|
||||||
0.00 0.00 1/1 empreinte [26]
|
|
||||||
-----------------------------------------------
|
|
||||||
0.07 0.41 217318/217318 main [1]
|
|
||||||
[2] 62.2 0.07 0.41 217318 compter_mots_ligne [2]
|
|
||||||
0.12 0.22 2500000/2500000 est_mot_vide [3]
|
|
||||||
0.02 0.05 1499989/1499989 compter_mot [7]
|
|
||||||
-----------------------------------------------
|
|
||||||
0.12 0.22 2500000/2500000 compter_mots_ligne [2]
|
|
||||||
[3] 43.9 0.12 0.22 2500000 est_mot_vide [3]
|
|
||||||
0.22 0.00 120340526/121889737 egales [4]
|
|
||||||
-----------------------------------------------
|
|
||||||
0.00 0.00 1549211/121889737 chercher_mot [10]
|
|
||||||
0.22 0.00 120340526/121889737 est_mot_vide [3]
|
|
||||||
[4] 28.8 0.23 0.00 121889737 egales [4]
|
|
||||||
-----------------------------------------------
|
|
||||||
0.04 0.06 1/1 main [1]
|
|
||||||
[5] 12.4 0.04 0.06 1 analyser_bigrammes [5]
|
|
||||||
0.06 0.00 37544897/52929320 est_lettre [6]
|
|
||||||
-----------------------------------------------
|
|
||||||
0.02 0.00 15384423/52929320 normaliser_ligne [9]
|
|
||||||
0.06 0.00 37544897/52929320 analyser_bigrammes [5]
|
|
||||||
[6] 10.3 0.08 0.00 52929320 est_lettre [6]
|
|
||||||
-----------------------------------------------
|
|
||||||
0.02 0.05 1499989/1499989 compter_mots_ligne [2]
|
|
||||||
[7] 9.3 0.02 0.05 1499989 compter_mot [7]
|
|
||||||
0.01 0.04 1499989/1499989 chercher_mot [10]
|
|
||||||
0.00 0.00 6076/27010 copier [21]
|
|
||||||
-----------------------------------------------
|
|
||||||
0.06 0.01 1/1 main [1]
|
|
||||||
[8] 9.0 0.06 0.01 1 generer_texte [8]
|
|
||||||
0.01 0.00 8999990/9027924 alea [19]
|
|
||||||
-----------------------------------------------
|
|
||||||
0.02 0.03 217318/217318 main [1]
|
|
||||||
[9] 6.8 0.02 0.03 217318 normaliser_ligne [9]
|
|
||||||
0.02 0.00 15384423/52929320 est_lettre [6]
|
|
||||||
0.01 0.00 12656214/12656214 en_minuscule [18]
|
|
||||||
-----------------------------------------------
|
|
||||||
0.01 0.04 1499989/1499989 compter_mot [7]
|
|
||||||
[10] 6.8 0.01 0.04 1499989 chercher_mot [10]
|
|
||||||
0.04 0.00 1499989/1499989 hacher_mot [11]
|
|
||||||
0.00 0.00 1549211/121889737 egales [4]
|
|
||||||
-----------------------------------------------
|
|
||||||
0.04 0.00 1499989/1499989 chercher_mot [10]
|
|
||||||
[11] 5.1 0.04 0.00 1499989 hacher_mot [11]
|
|
||||||
-----------------------------------------------
|
|
||||||
0.04 0.00 1/1 main [1]
|
|
||||||
[12] 5.1 0.04 0.00 1 decouper_lignes [12]
|
|
||||||
-----------------------------------------------
|
|
||||||
<spontaneous>
|
|
||||||
[13] 2.6 0.02 0.00 _init [13]
|
|
||||||
-----------------------------------------------
|
|
||||||
0.00 0.01 68597/68597 fusionner_entrees [16]
|
|
||||||
[14] 1.9 0.00 0.01 68597 doit_echanger [14]
|
|
||||||
0.01 0.00 15787/15787 comparer [15]
|
|
||||||
-----------------------------------------------
|
|
||||||
0.01 0.00 15787/15787 doit_echanger [14]
|
|
||||||
[15] 1.9 0.01 0.00 15787 comparer [15]
|
|
||||||
-----------------------------------------------
|
|
||||||
12150 fusionner_entrees [16]
|
|
||||||
0.00 0.01 1/1 trier_entrees [17]
|
|
||||||
[16] 1.9 0.00 0.01 1+12150 fusionner_entrees [16]
|
|
||||||
0.00 0.01 68597/68597 doit_echanger [14]
|
|
||||||
12150 fusionner_entrees [16]
|
|
||||||
-----------------------------------------------
|
|
||||||
0.00 0.01 1/1 main [1]
|
|
||||||
[17] 1.9 0.00 0.01 1 trier_entrees [17]
|
|
||||||
0.00 0.01 1/1 fusionner_entrees [16]
|
|
||||||
-----------------------------------------------
|
|
||||||
0.01 0.00 12656214/12656214 normaliser_ligne [9]
|
|
||||||
[18] 1.3 0.01 0.00 12656214 en_minuscule [18]
|
|
||||||
-----------------------------------------------
|
|
||||||
0.00 0.00 27934/9027924 generer_vocabulaire [20]
|
|
||||||
0.01 0.00 8999990/9027924 generer_texte [8]
|
|
||||||
[19] 1.3 0.01 0.00 9027924 alea [19]
|
|
||||||
-----------------------------------------------
|
|
||||||
0.00 0.00 1/1 main [1]
|
|
||||||
[20] 0.0 0.00 0.00 1 generer_vocabulaire [20]
|
|
||||||
0.00 0.00 27934/9027924 alea [19]
|
|
||||||
0.00 0.00 20934/20934 ajouter [22]
|
|
||||||
-----------------------------------------------
|
|
||||||
0.00 0.00 6076/27010 compter_mot [7]
|
|
||||||
0.00 0.00 20934/27010 ajouter [22]
|
|
||||||
[21] 0.0 0.00 0.00 27010 copier [21]
|
|
||||||
-----------------------------------------------
|
|
||||||
0.00 0.00 20934/20934 generer_vocabulaire [20]
|
|
||||||
[22] 0.0 0.00 0.00 20934 ajouter [22]
|
|
||||||
0.00 0.00 20934/20934 longueur [23]
|
|
||||||
0.00 0.00 20934/27010 copier [21]
|
|
||||||
-----------------------------------------------
|
|
||||||
0.00 0.00 20934/20934 ajouter [22]
|
|
||||||
[23] 0.0 0.00 0.00 20934 longueur [23]
|
|
||||||
-----------------------------------------------
|
|
||||||
0.00 0.00 1/1 main [1]
|
|
||||||
[24] 0.0 0.00 0.00 1 construire_rapport [24]
|
|
||||||
-----------------------------------------------
|
|
||||||
0.00 0.00 1/1 main [1]
|
|
||||||
[25] 0.0 0.00 0.00 1 ecart_type_longueur [25]
|
|
||||||
-----------------------------------------------
|
|
||||||
0.00 0.00 1/1 main [1]
|
|
||||||
[26] 0.0 0.00 0.00 1 empreinte [26]
|
|
||||||
-----------------------------------------------
|
|
||||||
0.00 0.00 1/1 main [1]
|
|
||||||
[27] 0.0 0.00 0.00 1 longueur_moyenne [27]
|
|
||||||
-----------------------------------------------
|
|
||||||
0.00 0.00 1/1 main [1]
|
|
||||||
[28] 0.0 0.00 0.00 1 racine [28]
|
|
||||||
-----------------------------------------------
|
|
||||||
|
|
||||||
Index by function name
|
|
||||||
|
|
||||||
[13] _init [21] copier [16] fusionner_entrees
|
|
||||||
[22] ajouter [12] decouper_lignes [8] generer_texte
|
|
||||||
[19] alea [14] doit_echanger [20] generer_vocabulaire
|
|
||||||
[5] analyser_bigrammes [25] ecart_type_longueur [11] hacher_mot
|
|
||||||
[10] chercher_mot [4] egales [23] longueur
|
|
||||||
[15] comparer [26] empreinte [27] longueur_moyenne
|
|
||||||
[7] compter_mot [18] en_minuscule [9] normaliser_ligne
|
|
||||||
[2] compter_mots_ligne [6] est_lettre [28] racine
|
|
||||||
[24] construire_rapport [3] est_mot_vide [17] trier_entrees
|
|
||||||
@@ -0,0 +1,173 @@
|
|||||||
|
Flat profile:
|
||||||
|
|
||||||
|
Each sample counts as 0.01 seconds.
|
||||||
|
% cumulative self self total
|
||||||
|
time seconds seconds calls ms/call ms/call name
|
||||||
|
17.78 0.08 0.08 1 80.00 108.37 analyser_bigrammes
|
||||||
|
13.33 0.14 0.06 217318 0.00 0.00 compter_mots_ligne
|
||||||
|
13.33 0.20 0.06 1 60.00 60.00 decouper_lignes
|
||||||
|
8.89 0.24 0.04 52929320 0.00 0.00 est_lettre
|
||||||
|
8.89 0.28 0.04 1 40.00 49.97 generer_texte
|
||||||
|
8.89 0.32 0.04 _init
|
||||||
|
6.67 0.35 0.03 217318 0.00 0.00 normaliser_ligne
|
||||||
|
4.44 0.37 0.02 12656214 0.00 0.00 en_minuscule
|
||||||
|
4.44 0.39 0.02 3413876 0.00 0.00 egales
|
||||||
|
4.44 0.41 0.02 2500000 0.00 0.00 est_mot_vide
|
||||||
|
2.22 0.42 0.01 9027924 0.00 0.00 alea
|
||||||
|
2.22 0.43 0.01 1499989 0.00 0.00 compter_mot
|
||||||
|
2.22 0.44 0.01 1499989 0.00 0.00 hacher_mot
|
||||||
|
2.22 0.45 0.01 1 10.00 10.00 fusionner_entrees
|
||||||
|
0.00 0.45 0.00 1499989 0.00 0.00 chercher_mot
|
||||||
|
0.00 0.45 0.00 68597 0.00 0.00 doit_echanger
|
||||||
|
0.00 0.45 0.00 27010 0.00 0.00 copier
|
||||||
|
0.00 0.45 0.00 20994 0.00 0.00 longueur
|
||||||
|
0.00 0.45 0.00 20934 0.00 0.00 ajouter
|
||||||
|
0.00 0.45 0.00 15787 0.00 0.00 comparer
|
||||||
|
0.00 0.45 0.00 1 0.00 0.00 construire_rapport
|
||||||
|
0.00 0.45 0.00 1 0.00 0.00 ecart_type_longueur
|
||||||
|
0.00 0.45 0.00 1 0.00 0.00 empreinte
|
||||||
|
0.00 0.45 0.00 1 0.00 0.03 generer_vocabulaire
|
||||||
|
0.00 0.45 0.00 1 0.00 0.00 longueur_moyenne
|
||||||
|
0.00 0.45 0.00 1 0.00 0.00 racine
|
||||||
|
0.00 0.45 0.00 1 0.00 10.00 trier_entrees
|
||||||
|
|
||||||
|
Call graph
|
||||||
|
|
||||||
|
|
||||||
|
granularity: each sample hit covers 4 byte(s) for 2.22% of 0.45 seconds
|
||||||
|
|
||||||
|
index % time self children called name
|
||||||
|
<spontaneous>
|
||||||
|
[1] 91.1 0.00 0.41 main [1]
|
||||||
|
0.06 0.06 217318/217318 compter_mots_ligne [2]
|
||||||
|
0.08 0.03 1/1 analyser_bigrammes [3]
|
||||||
|
0.03 0.03 217318/217318 normaliser_ligne [4]
|
||||||
|
0.06 0.00 1/1 decouper_lignes [5]
|
||||||
|
0.04 0.01 1/1 generer_texte [6]
|
||||||
|
0.00 0.01 1/1 trier_entrees [17]
|
||||||
|
0.00 0.00 1/1 generer_vocabulaire [18]
|
||||||
|
0.00 0.00 1/1 longueur_moyenne [27]
|
||||||
|
0.00 0.00 1/1 ecart_type_longueur [25]
|
||||||
|
0.00 0.00 1/1 racine [28]
|
||||||
|
0.00 0.00 1/1 construire_rapport [24]
|
||||||
|
0.00 0.00 1/1 empreinte [26]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.06 0.06 217318/217318 main [1]
|
||||||
|
[2] 26.7 0.06 0.06 217318 compter_mots_ligne [2]
|
||||||
|
0.02 0.01 2500000/2500000 est_mot_vide [9]
|
||||||
|
0.01 0.02 1499989/1499989 compter_mot [10]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.08 0.03 1/1 main [1]
|
||||||
|
[3] 24.1 0.08 0.03 1 analyser_bigrammes [3]
|
||||||
|
0.03 0.00 37544897/52929320 est_lettre [7]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.03 0.03 217318/217318 main [1]
|
||||||
|
[4] 13.7 0.03 0.03 217318 normaliser_ligne [4]
|
||||||
|
0.02 0.00 12656214/12656214 en_minuscule [11]
|
||||||
|
0.01 0.00 15384423/52929320 est_lettre [7]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.06 0.00 1/1 main [1]
|
||||||
|
[5] 13.3 0.06 0.00 1 decouper_lignes [5]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.04 0.01 1/1 main [1]
|
||||||
|
[6] 11.1 0.04 0.01 1 generer_texte [6]
|
||||||
|
0.01 0.00 8999990/9027924 alea [14]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.01 0.00 15384423/52929320 normaliser_ligne [4]
|
||||||
|
0.03 0.00 37544897/52929320 analyser_bigrammes [3]
|
||||||
|
[7] 8.9 0.04 0.00 52929320 est_lettre [7]
|
||||||
|
-----------------------------------------------
|
||||||
|
<spontaneous>
|
||||||
|
[8] 8.9 0.04 0.00 _init [8]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.02 0.01 2500000/2500000 compter_mots_ligne [2]
|
||||||
|
[9] 6.9 0.02 0.01 2500000 est_mot_vide [9]
|
||||||
|
0.01 0.00 1864665/3413876 egales [12]
|
||||||
|
0.00 0.00 60/20994 longueur [21]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.01 0.02 1499989/1499989 compter_mots_ligne [2]
|
||||||
|
[10] 6.5 0.01 0.02 1499989 compter_mot [10]
|
||||||
|
0.00 0.02 1499989/1499989 chercher_mot [13]
|
||||||
|
0.00 0.00 6076/27010 copier [20]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.02 0.00 12656214/12656214 normaliser_ligne [4]
|
||||||
|
[11] 4.4 0.02 0.00 12656214 en_minuscule [11]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.01 0.00 1549211/3413876 chercher_mot [13]
|
||||||
|
0.01 0.00 1864665/3413876 est_mot_vide [9]
|
||||||
|
[12] 4.4 0.02 0.00 3413876 egales [12]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.00 0.02 1499989/1499989 compter_mot [10]
|
||||||
|
[13] 4.2 0.00 0.02 1499989 chercher_mot [13]
|
||||||
|
0.01 0.00 1499989/1499989 hacher_mot [15]
|
||||||
|
0.01 0.00 1549211/3413876 egales [12]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.00 0.00 27934/9027924 generer_vocabulaire [18]
|
||||||
|
0.01 0.00 8999990/9027924 generer_texte [6]
|
||||||
|
[14] 2.2 0.01 0.00 9027924 alea [14]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.01 0.00 1499989/1499989 chercher_mot [13]
|
||||||
|
[15] 2.2 0.01 0.00 1499989 hacher_mot [15]
|
||||||
|
-----------------------------------------------
|
||||||
|
12150 fusionner_entrees [16]
|
||||||
|
0.01 0.00 1/1 trier_entrees [17]
|
||||||
|
[16] 2.2 0.01 0.00 1+12150 fusionner_entrees [16]
|
||||||
|
0.00 0.00 68597/68597 doit_echanger [19]
|
||||||
|
12150 fusionner_entrees [16]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.00 0.01 1/1 main [1]
|
||||||
|
[17] 2.2 0.00 0.01 1 trier_entrees [17]
|
||||||
|
0.01 0.00 1/1 fusionner_entrees [16]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.00 0.00 1/1 main [1]
|
||||||
|
[18] 0.0 0.00 0.00 1 generer_vocabulaire [18]
|
||||||
|
0.00 0.00 27934/9027924 alea [14]
|
||||||
|
0.00 0.00 20934/20934 ajouter [22]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.00 0.00 68597/68597 fusionner_entrees [16]
|
||||||
|
[19] 0.0 0.00 0.00 68597 doit_echanger [19]
|
||||||
|
0.00 0.00 15787/15787 comparer [23]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.00 0.00 6076/27010 compter_mot [10]
|
||||||
|
0.00 0.00 20934/27010 ajouter [22]
|
||||||
|
[20] 0.0 0.00 0.00 27010 copier [20]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.00 0.00 60/20994 est_mot_vide [9]
|
||||||
|
0.00 0.00 20934/20994 ajouter [22]
|
||||||
|
[21] 0.0 0.00 0.00 20994 longueur [21]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.00 0.00 20934/20934 generer_vocabulaire [18]
|
||||||
|
[22] 0.0 0.00 0.00 20934 ajouter [22]
|
||||||
|
0.00 0.00 20934/20994 longueur [21]
|
||||||
|
0.00 0.00 20934/27010 copier [20]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.00 0.00 15787/15787 doit_echanger [19]
|
||||||
|
[23] 0.0 0.00 0.00 15787 comparer [23]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.00 0.00 1/1 main [1]
|
||||||
|
[24] 0.0 0.00 0.00 1 construire_rapport [24]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.00 0.00 1/1 main [1]
|
||||||
|
[25] 0.0 0.00 0.00 1 ecart_type_longueur [25]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.00 0.00 1/1 main [1]
|
||||||
|
[26] 0.0 0.00 0.00 1 empreinte [26]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.00 0.00 1/1 main [1]
|
||||||
|
[27] 0.0 0.00 0.00 1 longueur_moyenne [27]
|
||||||
|
-----------------------------------------------
|
||||||
|
0.00 0.00 1/1 main [1]
|
||||||
|
[28] 0.0 0.00 0.00 1 racine [28]
|
||||||
|
-----------------------------------------------
|
||||||
|
|
||||||
|
Index by function name
|
||||||
|
|
||||||
|
[8] _init [20] copier [16] fusionner_entrees
|
||||||
|
[22] ajouter [5] decouper_lignes [6] generer_texte
|
||||||
|
[14] alea [19] doit_echanger [18] generer_vocabulaire
|
||||||
|
[3] analyser_bigrammes [25] ecart_type_longueur [15] hacher_mot
|
||||||
|
[13] chercher_mot [12] egales [21] longueur
|
||||||
|
[23] comparer [26] empreinte [27] longueur_moyenne
|
||||||
|
[10] compter_mot [11] en_minuscule [4] normaliser_ligne
|
||||||
|
[2] compter_mots_ligne [7] est_lettre [28] racine
|
||||||
|
[24] construire_rapport [9] est_mot_vide [17] trier_entrees
|
||||||
Reference in New Issue
Block a user