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)
et mon code ( simplifié)
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
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; } };
Quand j'exécute j'obtient :
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
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; }
Une idée du pourquoi du comment?tour: 0
674
tour: 1
675
tour: 2
679
tour: 3
674
...
Qu'est ce que je peux utiliser d'autre?
Merci d'avance
Partager