Estoy ejecutando un código .cpp (i) en estilo secuencial y (ii) utilizando sentencias OpenMP. Estoy tratando de ver la diferencia de tiempo. Para calcular el tiempo, uso esto:Mida el tiempo de ejecución en C++ código OpenMP
#include <time.h>
.....
main()
{
clock_t start, finish;
start = clock();
.
.
.
finish = clock();
processing time = (double(finish-start)/CLOCKS_PER_SEC);
}
El tiempo es bastante preciso en la ejecución secuencial (arriba) del código. Toma alrededor de 8 segundos ejecutar esto. Cuando inserto las declaraciones de OpenMP en el código y después de eso calculo el tiempo que recibo una reducción en el tiempo, pero el tiempo que se muestra es de aproximadamente 8-9 segundos en la consola, cuando en realidad solo son 3-4 segundos en tiempo real.
Aquí es cómo mi código es abstracta:
#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);
}
Cuando ejecuto el código anterior, consigo la reducción en el tiempo, pero el tiempo que se muestra no es precisa en cuanto a tiempo real. Me parece que la función clock() calcula el tiempo individual de cada hilo y lo suma y muestra.
¿Alguien puede decir la razón de esto o sugerirme cualquier otra función de tiempo para medir el tiempo en los programas OpenMP?
Gracias.
Espero que hayas visto eso, es parte del comportamiento especificado. Tenga en cuenta también que '(end.tv_sec - start.tv_sec) * 1000000u + end.tv_usec - start.tv_usec' tiene muchas menos probabilidades de desbordarse. –
@BenVoigt Me siento honrado por mi espléndida muestra de falibilidad. Le dije esto porque no merezco más crédito por esta respuesta de la que ya obtuve. Gracias por corregir los errores (sutiles/no sutiles). – sehe
¿qué archivo de encabezado contiene esta función 'gettimeofday()'? Todo lo que tengo es un 'mingw_gettimeofday()' en 'time.h' (mingw en Windows 64) –