Pour réponde à ta question Kerro, j'ai en fait besoin de faire quelques mesures expérimentales pour des recherches scientifiques dans le domaine des bases de données.
Le principe de cette expérience et de mesurer le temps d'exécution d'une requête (floue) avec et sans index sur certain champs d'une table.
En utilisant times et getrusage je me retrouve avec des résultats qui me disent qu'une requête sur une base de données sans index sur les champs intérogés est relativement (de quelque milliseconde) meilleure qu'une base de données (la même) sans index. Ce qui est aberrant. L’intérêt des index est bien d'accélérer le temps d'exécution et non le ralenti.
Je ne demande pas le temps d'exécution exacte (à la nanoseconde près), mais des temps qui ne défient pas le bon sens.
getrusage me semble intéressante, mais ne renvoie que le temps d'exécution que du programme au complet et non d'un fragment comme j'ai besoin.
comme il l'a si bien résumé le document que Damien nous a déniché (page 5)
Temps d'exécution d'un programme = temps d'exec des appels système + temps d'exec des appels utilisateurs + autres.
Sachant que autres représente le temps où d'autres processus sont exécuter autres que celui qui nous intéresse. J’ai bien essayé getrusage avant est après le bout de code qui m'intéresse dans l'espoir en faisant la soustraction d'avoir ce que je voulais, mais sa ne marchais pas. Il me donne les mêmes valeurs comme si le bout de code que j'avais entre les deux ne consommait rien du tout. Ce qui n'est pas le cas.
Je suis tombé il y'a de sa quelque instant sur un article de chez ces messieurs de Intel(http://softwarecommunity.intel.com/articles/eng/2589.htm). Je pense qu'il apporte beaucoup d'explications sur des zones d'ombres. D'après ces messieurs de chez Intel, une mesure du temps d'exécution basée sur l'horloge système possède une précision de l'ordre de +/-10 ms~ dans la meilleure des cas. « The system timer can be used to measure events with an accuracy of 10 ms. » ; la fonction time() sous C possède une précision de l'ordre de -/+1 s ; les fonctions en rapport avec le temps qui existe dans les bibliothèques pour le traitement multimédia (ils parlent de la fonction timeGetTime qui existe sous Windows Plus exactement) de l'ordre de +-/10 ms.
En s'appuyant sur les cycles du processeur grâce à l'instruction Read Time Stamp Counter (RDTSC) pour les processeurs Intel (je pense qu'il existe aussi qlq chose de similaires sous les processeurs AMD) on peut atteindre une précision de 0.33 nanoseconde pour un processeur de 3 GHz. ce qui me convient parfaitement :-p.
Je vais donc me pencher sur la solution proposée par Damien (que je remercie). Pas de bolle je suis sur une machine possédant un processeur centrions double coeur (SMP). Pas le choix on fera avec.
Je pense qu'il est possible de désactiver le SpeedStep Technology et Enhanced Intel® SpeedStep Technology sous le Biois. Enfin, je l'espère.
# Une solution à l'ancienne (en assembleur)
Posté par Amine Mokhtari . En réponse au message Mesurer le temps d'exécution d'un fragment de code. Évalué à 1.
Pour réponde à ta question Kerro, j'ai en fait besoin de faire quelques mesures expérimentales pour des recherches scientifiques dans le domaine des bases de données.
Le principe de cette expérience et de mesurer le temps d'exécution d'une requête (floue) avec et sans index sur certain champs d'une table.
En utilisant times et getrusage je me retrouve avec des résultats qui me disent qu'une requête sur une base de données sans index sur les champs intérogés est relativement (de quelque milliseconde) meilleure qu'une base de données (la même) sans index. Ce qui est aberrant. L’intérêt des index est bien d'accélérer le temps d'exécution et non le ralenti.
Je ne demande pas le temps d'exécution exacte (à la nanoseconde près), mais des temps qui ne défient pas le bon sens.
getrusage me semble intéressante, mais ne renvoie que le temps d'exécution que du programme au complet et non d'un fragment comme j'ai besoin.
comme il l'a si bien résumé le document que Damien nous a déniché (page 5)
Temps d'exécution d'un programme = temps d'exec des appels système + temps d'exec des appels utilisateurs + autres.
Sachant que autres représente le temps où d'autres processus sont exécuter autres que celui qui nous intéresse. J’ai bien essayé getrusage avant est après le bout de code qui m'intéresse dans l'espoir en faisant la soustraction d'avoir ce que je voulais, mais sa ne marchais pas. Il me donne les mêmes valeurs comme si le bout de code que j'avais entre les deux ne consommait rien du tout. Ce qui n'est pas le cas.
Je suis tombé il y'a de sa quelque instant sur un article de chez ces messieurs de Intel(http://softwarecommunity.intel.com/articles/eng/2589.htm). Je pense qu'il apporte beaucoup d'explications sur des zones d'ombres. D'après ces messieurs de chez Intel, une mesure du temps d'exécution basée sur l'horloge système possède une précision de l'ordre de +/-10 ms~ dans la meilleure des cas. « The system timer can be used to measure events with an accuracy of 10 ms. » ; la fonction time() sous C possède une précision de l'ordre de -/+1 s ; les fonctions en rapport avec le temps qui existe dans les bibliothèques pour le traitement multimédia (ils parlent de la fonction timeGetTime qui existe sous Windows Plus exactement) de l'ordre de +-/10 ms.
En s'appuyant sur les cycles du processeur grâce à l'instruction Read Time Stamp Counter (RDTSC) pour les processeurs Intel (je pense qu'il existe aussi qlq chose de similaires sous les processeurs AMD) on peut atteindre une précision de 0.33 nanoseconde pour un processeur de 3 GHz. ce qui me convient parfaitement :-p.
Je vais donc me pencher sur la solution proposée par Damien (que je remercie). Pas de bolle je suis sur une machine possédant un processeur centrions double coeur (SMP). Pas le choix on fera avec.
Je pense qu'il est possible de désactiver le SpeedStep Technology et Enhanced Intel® SpeedStep Technology sous le Biois. Enfin, je l'espère.