Tengo código secuencial para paralelizar a través de OpenMP. He puesto los pragmas correspondientes y lo he probado. Durante las pruebas, interpreto la ganancia de rendimiento verificando el tiempo empleado en la función principal. Lo extraño es que el tiempo transcurrido calculado a través de cpu_time()
y omp_get_wtime()
devuelve dos resultados diferentes. ¿Cuál crees que es el motivo?OpenMP time and clock() calcula dos resultados diferentes
El tiempo transcurrido calculado mediante la función cpu_time()
es similar al tiempo secuencial.
Antes de cómputo comienza
ctime1_ = cpu_time();
#ifdef _OPENMP
ctime1 = omp_get_wtime();
#endif
Después de que termine el cálculo
ctime2_ = cpu_time();
#ifdef _OPENMP
ctime2 = omp_get_wtime();
#endif
cpu_time() de definición de función
double cpu_time(void)
{
double value;
value = (double) clock()/(double) CLOCKS_PER_SEC;
return value;
}
Resultado de la impresión
printf("%f - %f seconds.\n", ctime2 - ctime1, ctime2_ - ctime1_);
resultado de la muestra
7.009537 - 11.575277 seconds.
En Windows, 'clock()' realmente mide el tiempo de pared. – Mysticial
@Mysticial, una vez más, parecen seguir su propio estado de ánimo, en lugar del estándar. El estándar dice: * La función de reloj devuelve la mejor aproximación de la implementación al tiempo de procesador utilizado por el programa desde el comienzo de una era definida por la implementación relacionada solo con la invocación del programa. * –