para - funcion gettimeofday en c



Cálculo del tiempo de la función en nanosegundos en el código C (3)

Independientemente de cómo se acerque a este o qué tipo de sistema / SO está utilizando, obtendrá una respuesta aproximada en el mejor de los casos, con considerable variación debido a la naturaleza del problema.

En segundo lugar, necesita un sistema que admita este tipo de llamadas. Es bastante fácil si estás usando QNX Neutrino:

http://www.qnx.com/developers/docs/6.3.0SP3/neutrino/lib_ref/c/clock_gettime.html

/*
 * This program calculates the time required to
 * execute the program specified as its first argument.
 * The time is printed in seconds, on standard out.
 */
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <time.h>

#define BILLION  1000000000L;

int main( int argc, char** argv )
  {
    struct timespec start, stop;
    double accum;

    if( clock_gettime( CLOCK_REALTIME, &start) == -1 ) {
      perror( "clock gettime" );
      return EXIT_FAILURE;
    }

    system( argv[1] );

    if( clock_gettime( CLOCK_REALTIME, &stop) == -1 ) {
      perror( "clock gettime" );
      return EXIT_FAILURE;
    }

    accum = ( stop.tv_sec - start.tv_sec )
             + (double)( stop.tv_nsec - start.tv_nsec )
               / (double)BILLION;
    printf( "%lf\n", accum );
    return EXIT_SUCCESS;
  }

https://ffff65535.com

Necesito saber cómo puedo calcular el tiempo de una función en código C en nanosegundos. Traté de repetir la función hasta consumir algunos microsegundos. ¿Hay otras funciones en time.h que se puedan usar para calcular el tiempo en nanosegundos?


La función de clock en el estándar C no es útil para esto. Por lo general, tiene una resolución horrible y es inconsistente (entre plataformas) si mide el tiempo de pared transcurrido o el tiempo de CPU consumido. Debe usar la función clock_gettime POSIX-standard (que tiene una resolución de nanosegundos y le permite especificar qué reloj desea medir) y emularlo con las operaciones de reloj específicas del sistema disponibles en plataformas que carecen de la función POSIX.


Nunca obtendrás una precisión de nanosegundos. Piensa en lo que estás preguntando: en una CPU de 1 GHz, 1 nanosegundo es un ciclo de reloj. No importa lo que intente llamar, nunca obtendrá ese tipo de precisión, es mejor que se quede con microsegundos. Una pregunta similar con muchos ejemplos es aquí: C ++ multiplataforma de alta resolución temporizador .

Solo para c: en Windows, quiere usar QueryPerformanceCounter . Y aquí hay más sobre QPC . Aquí hay una pregunta relacionada sobre cómo usar QueryPerformanceCounter.





time