Bonjour,
Je cherche à mesurer le temps d'exécution de ce programme ci dessous en fonction de la taille du buffer N en faisant varier N entre 1 et 2 exp 20 en doublant la taille à chaque test.
#include <unistd.h>
#define N 1
char c[N]; // le buffer pour les cars lus/à écrire
int main(){
int t;
while((t = read(0, c, N)) > 0)
write(1, c, t);
return 0;
}
Au lieu de procéder chaque fois à l'aide de
time a.out < entrée.txt > sortie.txt en modifiant à chaque tour N, il y aurait il une manière plus commode de le faire en une seul fois avec un script shell à exécuter pour qu'il m'affiche les résultats ?
Merci d'avance pour l'aide.
# programmation en C
Posté par NeoX . Évalué à 2. Dernière modification le 15 mars 2016 à 15:33.
vu que ton programme ressemble fortement à du C,
pourquoi ne pas utiliser les timers en C ?
sinon tu peux utiliser les boucles en shell pour faire ta modification de N à chaque tout.
ca ressemmblerait à :
evidemment il faut que ton programme sache lire une variable fournie en ligne de commande (le $VAR)
[^] # Re: programmation en C
Posté par roger91 . Évalué à 1. Dernière modification le 15 mars 2016 à 17:10.
Merci pour ta réponse.
J'ai pensé à un script du genre:
Mais j'arrive pas à saisir ou est le beug, quand je l'exécute il me renvoie le fichier out.txt vide au lieu du contenu de input.txt et les résultats de time sur la stdout sont tous à 0 pour toutes les possibilités du coup.
J'ai omis quelque chose ?
Merci de m'aider.
[^] # Re: programmation en C
Posté par NeoX . Évalué à 2.
essaie deja de faire plus simple
[^] # Re: programmation en C
Posté par roger91 . Évalué à 1.
Merci pour ton retour ;)
J'ai testé ce script, ne manquerait il pas quelque chose ?
La ligne 3 gcc -DN=$i apparemment le nom du programme manque.
Je l'ai rajouté et exécuté.
Il me crée 20 fichiers out.txt dont le contenu est vide et j'ai ces messages:
```
prog.c:11:0: attention : « N » redéfini [enabled by default]
:0:0: note: ceci est la localisation d'une précédente définition
time: cannot run a.out: No such file or directory
Command exited with non-zero status 127
0.00user 0.00system 0:00.00elapsed ?%CPU (0avgtext+0avgdata 1392maxresident)k
0inputs+0outputs (0major+74minor)pagefaults 0swaps
……
```Je vois pas ou ça beug cette fois.
[^] # Re: programmation en C
Posté par NeoX . Évalué à 2.
en effet j'avais oublié le prog.c dans la boucle
ce qui donne alors
ensuite l'erreur est normal si le gcc n'a rien fait il n'y a pas de a.out
donc pas de programme a executer, donc un temps d'execution de "0"
[^] # Re: programmation en C
Posté par roger91 . Évalué à 1.
Je n'ai pas bien saisi. Tu disais que le fait qu'il affiche ce message d'erreur comme résultat c'est parce que le fichier a.out n'existe pas (en effet j'avais complété prog.c avant de tester et le fichier a.out se crée bel et bien dans mon répertoire après l'exécution du script donc il est bien présent) ou c'est normal en général ?
[^] # Re: programmation en C
Posté par NeoX . Évalué à 2.
donc si tu avais effectivement corrigé mon erreur, il doit avoir compilé et le fichier a.out doit exister
s'il existe, il y a alors plusieurs possibilités
a.out n'est pas executable
s'il est executable, essaie
time ./a.out <input.txt >output$i.txt
car c'est peut-etre parce que a.out n'est pas dans le PATH
[^] # Re: programmation en C
Posté par roger91 . Évalué à 1.
En effet j'avais omis "./" pour réussir à exécuter a.out.
A présent le script fonctionne :)
Par ailleurs, pour un fichier input.txt volumineux de l'ordre de 10 Go par exemple je constate que l'exécution du script a du mal à se terminer et prend énormément du temps pour la copie du fichier input dans le fichier output. J'ai laissé tourner le programme longtemps mais la copie était toujours en train de se faire, j'ai du forcer l'arret. Est ce normal ? si oui pourquoi cette lenteur ?
Merci d'avance.
[^] # Re: programmation en C
Posté par NeoX . Évalué à 2.
ca faut demander au developpeur du programme :D
c'est lui qui a choisit un algoritme pour lire un fichier pour en copier le contenu dans un autre.
[^] # Re: programmation en C
Posté par roger91 . Évalué à 1.
D'accord ! Merci NeoX pour ton aide ;)
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.