Probleme avec l'évaluation d'une durée
Bonjour,
J'utilise la libraire GMP pour faire des calculs avec des grands nombres.
J'essaie de calculer le temps nécessaire pour évaluer le carré d'un nombre.
Je précise que je compile et exécute sous Windows 7 32 bits et j'ai un Quad Core.
Mais lorsque j'affiche la durée, ça affiche n'importe quoi ( en fait ça affiche pratiquement tout le temps la même durée alors que clairement les temps sont différents)
J'ai essayé plusieurs méthodes pour afficher la durée et j'ai trouvé un code sur le net qui semblait plus pertinent qu'un clock() ( mais ça ne change rien finalement)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
|
#define Ms 1000
#define Us 1000000
#define Ns 1000000000
class PerfChrono
{
__int64 freq, t0; //la frequence de l'horloge et le temps initial
public:
PerfChrono() //Le constructeur qui va récupérer la fréquence de l'horloge
{
QueryPerformanceFrequency((LARGE_INTEGER*)&freq);
}
void Start()
{
QueryPerformanceCounter((LARGE_INTEGER*)&t0);
}
DWORD GetDiffMs()
{
__int64 t1;
QueryPerformanceCounter((LARGE_INTEGER*)&t1);
return (DWORD)(((t1 - t0) * 1000) / freq);
}
DWORD GetDiff(UINT unit)
{
__int64 t1;
QueryPerformanceCounter((LARGE_INTEGER*)&t1);
return (DWORD)(((t1 - t0) * unit) / freq);
}
DWORD GetFreq()
{
return (DWORD)freq;
}
}; |
et mon code ( simplifié)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
unsigned int nb_rounds = 100000000;
for(unsigned int i=0; i<10; i++)
{
bigint=bigint*bigint*bigint*bigint;
Chrono.Start();
// ICI COMMENCE LA BOUCLE A EVALUER
for(unsigned int j=0; j<nb_rounds; j++)
{
bigint*bigint;
}
cout << "tour: "<<i<< endl;
cout << Chrono.GetDiffMs() << endl;
} |
Quand j'exécute j'obtient :
Citation:
tour: 0
674
tour: 1
675
tour: 2
679
tour: 3
674
...
Une idée du pourquoi du comment?
Qu'est ce que je peux utiliser d'autre?
Merci d'avance