programmation C : unité de clock() ?
Répondre à la discussion
Affichage des résultats 1 à 5 sur 5

programmation C : unité de clock() ?



  1. #1
    Rafiti

    programmation C : unité de clock() ?


    ------

    Bonjour,

    J'ai écrit une fonction en C et je cherche à connaitre sa durée d'exécution afin d'essayer de l'optimiser. J'ai un peu cherché et j'ai trouvé ce site http://www.programmationworld.com/ph...05&affichage=2

    ainsi que cette page un peu succinte http://www.cerfacs.fr/~gondet/performance/clock.html

    ce que j'ai retenu c'est que la fonction clock() me renvoie une durée en microseconde (est ce exacte ?)

    donc voici le programme que j'ai réalisé :

    #include "time.h"

    void main (void)
    {
    clock_t a,b,c;

    a=clock();
    fonctionquejeveuxoptimiser();
    b=clock();
    c=b-a;
    printf("c=%d\n",c);
    }

    et là le programme me donne comme valeur : 28

    Ma question est : est ce reellement des microsecondes ? des secondes ? des jours ?

    ou sinon est ce que je me suis complètement planté ....ce qui serait fort possible ..... dans ce cas je suis preneur de toute remarque !

    Merci de votre aide !!!

    -----

  2. #2
    Coincoin

    Re : programmation C : unité de clock() ?

    Salut,
    Fais un truc du genre :
    a=clock();
    for(i=0;i<1000;i++) { fonctionquejeveuxoptimiser();}
    b=clock();

    Et regarde ta montre. Tu verras bien si ça dure quelques dizaines de secondes...
    Encore une victoire de Canard !

  3. #3
    Rafiti

    Re : programmation C : unité de clock() ?

    merci Canard ! (il nettoie les toilettes et en plus il est fortiche en programmation....encore une victoire de canard !!!)

    effectivement en faisant une boucle for (i=0; i=1000, i++) ca prends quelque dizaine de secondes, et la valeur affichée est 21 000 ..... ce qui me fait dire que la fonction clock() retourne une valeur en milliseconde !

    encore merci !!

  4. #4
    SuperTux

    Re : programmation C : unité de clock() ?

    Héhé, ca cause C, j'accoure

    Le mieux est de voir ce que dit la norme. C'est elle la référence. Tout comme la bible est la référence des chrétiens, la Norme C ISO est est le Livre Sacré du programmeur C qui elle seule dit la Vérité.

    Ce que clock() renvoit n'est pas clairement définit par la norme. Mon édition ANSI du K&R qui doit correspondre à du C89 je pense, dit :

    Citation Envoyé par K&R Norme ANSI 2eme ed en francais
    clock_t clock(void)
    clock retourne le temps d'utilisation du processeur par le programme depuis le début de son exécution, ou bien -1 si cette information n'est pas disponible. clock() / CLK_TCK est une durée en secondes.
    Donc pour avoir une durée en milliseconde il faut faire clock() / CLK_TCK / 1000 en norme ANSI.

    Je n'ai pas la norme C99 sous la main, mais son "rationale" (v5.1 ed 2003) dit :

    Citation Envoyé par http://www.open-std.org/JTC1/SC22/WG14/www/docs/C99RationaleV5.10.pdf
    7.23.2.1 The clock function
    This function is intended for measuring intervals of execution time in whatever units an implementation desires. The conflicting goals of high resolution, long interval capacity, and low timer overhead must be balanced carefully in the light of this intended use.
    Donc prudence...

    Et le "WG14/N1124 Committee Draft — May 6, 2005 ISO/IEC 9899:TC2" dit :

    Citation Envoyé par http://www.open-std.org/JTC1/SC22/WG14/www/docs/n1124.pdf
    7.23.2.1 The clock function
    Synopsis
    #include <time.h>
    clock_t clock(void);

    Description
    The clock function determines the processor time used.

    Returns
    The clock function returns the implementation’s best approximation to the processor time used by the program since the beginning of an implementation-defined era related only to the program invocation. To determine the time in seconds, the value returned by the clock function should be divided by the value of the macro CLOCKS_PER_SEC. If the processor time used is not available or its value cannot be represented, the function returns the value (clock_t)(-1).
    Donc clock() / CLOCKS_PER_SEC / 1000 en norme C99 pour les millisecondes à priori.

    Pour avoir la norme C99 pile poil, c'est 342 CHF (oui, c'est honteux...) sur le site de l'ISO et les TC sont gratuit contre enregistrement.

    Et pour POSIX (une mouvance protestante née du Grand Schisme), accessible gratuitement sur le site du TOG :

    Citation Envoyé par IEEE Std 1003.1, 2004 Edition
    DESCRIPTION
    The functionality described on this reference page is aligned with the ISO C standard. Any conflict between the requirements described here and the ISO C standard is unintentional.
    Ce qui est explicite.

    Pour finir je vais être "cru" mais quand je vois que quelqu'un se prétendant ingénieur de recherche au cnrs, ne maitrise apparament pas la lecture, cela n'est pas très rassurant pour la recherche francaise :

    Citation Envoyé par http://www.cerfacs.fr/~gondet/performance/clock.html
    Fonction de la bibliothèque standard C.
    Elle retourne un temps CPU en micro-secondes.
    Si on ne précise pas quelle version de la norme cela ne veut rien dire. Les micro-secondes c'est effectivement le cas dans l'implementation GNU mais il ne faut jamais se baser sur les spécificitées des implémentations, la preuve chez toi c'est des millisecondes et sur d'autre surrement encore autre chose...

    Quand on code comme un goret cela donne cela peut donner ceci : http://dspace.dial.pipex.com/town/gr.../bloopers.html

  5. A voir en vidéo sur Futura
  6. #5
    Towl

    Re : programmation C : unité de clock() ?

    Si tu cherches à optimiser un code, je te recommande fortement l'utilisation de valgrind / callgrind / kcachegrind. Avec ces outils, tu as quasiment tout en main pour récupérer les fonctions qui sont appelées très souvent (et donc nécessite une optimisation) des fonctions qui ne le sont pas.
    Il est assez fréquent de se tromper sur l'appel ou le temps passé dans une fonction, et on cherche alors a optimiser la mauvaise

    Un petit pdf / présentation sur l'optimisation, que j'avais bien aimé car succint mais suffisant : https://www-sop.inria.fr/dream/semin...n_20041119.pdf
    The only limiting factor of the Linux operating system, is his user. - Linus Torvalds

Discussions similaires

  1. clock programmable
    Par noisyboxes dans le forum Électronique
    Réponses: 11
    Dernier message: 20/05/2007, 14h57
  2. Vocabulaire: bus clock ??
    Par invited72f7053 dans le forum Électronique
    Réponses: 1
    Dernier message: 28/07/2006, 11h17
  3. Clock bascule D
    Par invite4192ae6c dans le forum Électronique
    Réponses: 7
    Dernier message: 17/07/2006, 17h46
  4. Bascule D et clock
    Par inviteb3482fa2 dans le forum Électronique
    Réponses: 7
    Dernier message: 25/05/2006, 13h04
  5. propeller clock
    Par invite1fd09c5f dans le forum Électronique
    Réponses: 2
    Dernier message: 26/03/2004, 21h38
Découvrez nos comparatifs produits sur l'informatique et les technologies.