Sto eseguendo un codice .cpp (i) in stile sequenziale e (ii) utilizzando le istruzioni OpenMP. Sto cercando di vedere la differenza di tempo. Per calcolare il tempo, io uso questo:Misurazione del tempo di esecuzione in C++ Codice OpenMP
#include <time.h>
.....
main()
{
clock_t start, finish;
start = clock();
.
.
.
finish = clock();
processing time = (double(finish-start)/CLOCKS_PER_SEC);
}
Il tempo è abbastanza preciso nel sequenziale (sopra) esecuzione del codice. Ci vogliono circa 8 secondi per eseguirlo. Quando inserisco le istruzioni OpenMP nel codice e successivamente calcola il tempo in cui ottengo una riduzione del tempo, ma il tempo visualizzato è di circa 8-9 secondi sulla console, quando in realtà sono solo 3-4 secondi in tempo reale!
Ecco come il mio codice sembra astrattamente:
#include <time.h>
.....
main()
{
clock_t start, finish;
start = clock();
.
.
#pragma omp parallel for
for(...)
for(...)
for (...)
{
...;
}
.
.
finish = clock();
processing time = (double(finish-start)/CLOCKS_PER_SEC);
}
Quando eseguo il codice di cui sopra, ho la riduzione nel tempo, ma il tempo visualizzato non è accurato in termini di tempo reale. Mi sembra che la funzione clock() stia calcolando l'ora individuale di ciascun thread e la sommando e visualizzandoli.
Qualcuno può spiegarne il motivo o suggerire altre funzioni di cronometraggio da utilizzare per misurare il tempo nei programmi OpenMP?
Grazie.
Spero che tu l'abbia visto, fa parte del comportamento specificato. Si noti inoltre che '(end.tv_sec - start.tv_sec) * 1000000u + end.tv_usec - start.tv_usec' ha molte meno probabilità di traboccare. –
@ BenVoigt Sono umiliato dalla mia splendida dimostrazione di fallibilità. Ho scritto questo perché non merito più questa risposta di quanto ho già ottenuto. Grazie per aver corretto gli errori (sottile/non sottile). – sehe
quale file di intestazione contiene questa funzione 'gettimeofday()'? Tutto quello che ho è un 'mingw_gettimeofday()' in 'time.h' (mingw in windows 64) –