Bonjour, mon objectif est d'afficher une courbe (gnuplot) dépendant du temps d'exécution d'un programme C en fonction de la taille des opérandes sur lequel celui-ci se fait. Plus précisément, ici, il s'agit d'étudier la complexité d'un algorithme dérivé de la méthode de Strassen pour la multiplication de matrices.
Pour ce faire, j'ai fait un script ayant but de lister les temps d'exécution (accompagnés de la taille de la matrice, ici servant d'abscisse)dans un fichier afin de pouvoir les exploiter par gnuplot.
Voici mon script:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 #! /bin/bash # etalonner.sh # Ce script nécessite: Strassen.c et strassen.sh # But de ce script:récupérer chaque temps de calcul effectué par la la multiplication de deux matrices par la méthode de Strassen en fonctio de la taille de ces matrices. # Envoyer ces temps pour un traitement d'interpolation afin d'obtenir une courbe propre. i=2; `touch interp.txt` while [[ $i -lt 32768 ]] # Jusqu'à 2^15 après c'est un débordement de l'expression (prise de la totalité de la ram (8go)). do `gcc -o Strassen -D'N='$i'' Strassen.c` || echo "Erreur, nous n'avons pas les documents nécessaires." echo n=$i echo `time ./strassen.sh` echo ------------------- i=$(( $i + 1 )) done
Comme vous le voyez, je passe par un script intermédiaire car `time ./Strassen` ne marche pas.
Dans strassen.sh:
J'obtiens une sortie de ce type:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 `./Strassen`
...etc...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 n=2 real 0m0.004s user 0m0.000s sys 0m0.000s ------------------- n=3 real 0m0.009s user 0m0.000s sys 0m0.000s -------------------
Je cherche à récupérer le temps en seconde de chaque première ligne c'est à dire obtenir ceci dans un fichier:
0.002 0.004
0.003 0.009
...etc...
Mon problème est que je n'arrive pas à appliquer quoi que ce soit à la sortie:
J'ai essayé en apliquant (|) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part echo `time ./strassen.sh`
head -n 1
ou bien
grep real
Ça ne fait déjà rien du tout. Idéalement je voudrais appliquer un sed.
C'est la première fois que je fais ce genre d'étalonnage en dehors de Maple, pouvez-vous me conseiller sur la méthode optimale pour un test de complexité de ce genre si ma méthode se trouve être idiote ? Et pouvez-vous m'expliquer comment je peux exploiter la commande time ?
Merci d'avance.
Partager