2012-05-20 15 views
5

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. 

Respuesta

11

El clock función de tiempo de las medidas de la CPU, el tiempo que pasa de forma activa en la CPU, la función OMP mide el tiempo que ha transcurrido durante la ejecución, dos cosas completamente diferentes.

Su proceso parece estar bloqueado al esperar en algún lado.

+5

En Windows, 'clock()' realmente mide el tiempo de pared. – Mysticial

+1

@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. * –

6

Lo que se observa es un resultado perfectamente válido para cualquier aplicación en paralelo - la tiempo de CPU combinado de todos los temas como devuelto por clock() es por lo general más que el tiempo wallclock medida por omp_get_wtime() excepto si su aplicación sobre todo duerme o espera .

Cuestiones relacionadas