Microsegundos C ++

Microsegundos C ++
Para obtener un tiempo de ejecución preciso en un programa C ++, el lenguaje de programación C ++ proporciona varias opciones. Puede escribir su código personalizado para obtener el tiempo de ejecución preciso, o puede usar la función incorporada ahorrando su tiempo y energía. La función incorporada proporcionada por el lenguaje de programación C ++ ayuda al desarrollador a implementar procesos complejos con una sola función. En este artículo, aprenderemos a obtener el tiempo de ejecución preciso y preciso en microsegundos utilizando las funciones incorporadas C ++. Hay diferentes formas de encontrar el tiempo de ejecución en microsegundos.

Calculando el tiempo de ejecución del programa C ++ en microsegundos

Desafortunadamente, no hay métodos para descubrir el tiempo de ejecución preciso que funcione para todos. Para eso, debe elegir la solución de acuerdo con la situación. La medición del tiempo de ejecución preciso de un programa C ++ puede ser difícil en algunas situaciones debido a problemas de portabilidad. Seleccionar los métodos correctos que se ajustan con su sistema operativo y la versión del compilador es esencial para obtener un tiempo preciso. Más importante aún, debe comprender qué quiere decir exactamente con el 'tiempo' para que pueda elegir el método en consecuencia.

Aquí, encontrará una lista completa de algunas opciones fáciles, simples y mejores disponibles para encontrar el tiempo de ejecución de un programa C ++. También enumeramos las limitaciones de las funciones para darle un aviso antes de comenzar a usar esa función en su programa.

Con suerte, obtendrá la mejor opción perfectamente adecuada para su sistema operativo y versión del compilador.

Ejemplo 1:

Examinaremos el tiempo de pared con la función. La función es una de las formas más portátiles de encontrar el tiempo de pared en un programa C ++. Funciona solo con las versiones C ++ 11 y posteriores. Si tiene una versión anterior, actualice su compilador antes de usar esta función. Tiene acceso a varios tipos de relojes en la máquina que tienen diferentes características y propósitos.

Aquí, estamos utilizando el High_Resolution_Clock para encontrar el tiempo de pared, ya que utiliza el reloj de mayor resolución disponible que probablemente sea adecuado para la mayoría de los sistemas. Consulte el código que se proporciona a continuación:

#incluir
#incluir
int main ()
doble s = 0, a = 1;
inicio automático = std :: crono :: high_resolution_clock :: ahora ();
int it = 1000*1000*1000;
para (int i = 0; is += a;
A /= 2.0;

Auto End = std :: Chrono :: high_resolution_clock :: ahora ();
auto elpsed = std :: crono :: duration_cast (final - inicio);
printf ("El reloj comienza a = %.2f \ n ", s);
printf ("El tiempo medido es = %.3f segundos.\ n ", transcurrido.count () * 1e-6);
regresar 0;

El programa comienza con dos archivos de encabezado stdio.H y Chrono. El stdio.La biblioteca H se utiliza junto con los métodos de entrada y salida estándar. La biblioteca Chrono le permite usar la función en su programa. Todo el programa está escrito en la función principal donde ocurre toda la ejecución.

El programa principal comienza con la inicialización de dos variables 's' y 'a' que se utilizará para realizar un seguimiento del tiempo. La variable 'inicio' se inicializa con la hora actual con la función 'Chrono :: high_reolution_clock :: ahora ()'.

La variable 'it = 1000*1000*1000' se inicializa con el número de iteraciones que deben realizarse y calcula el tiempo transcurrido en microsegundos. La siguiente acción será llevada a cabo por el bucle "para", ya que itera de 0 a 1000*1000*1000 veces.

Otra variable 'final' se inicializa con la hora actual para verificar la hora transcurrida. Cuando calcule 'FIN - Comience', obtendrá la hora transcurrida de la ejecución. El 'Chrono :: Microsegunds' proporcionará el tiempo de ejecución en microsegundos que se convertirán en segundos con 'transcurrido.count ()*1E-6 'COMPUTACIÓN. Las declaraciones printf () imprimirán la hora de inicio y la hora transcurrida. Y finalmente, la declaración de retorno 0 asegura que el programa se ejecute con éxito.

Cuando ejecuta el código completo, se producirá una salida similar dependiendo de la velocidad de ejecución y la eficiencia de su sistema:

Ejemplo 2:

En el código que se proporciona a continuación, estamos utilizando la función getTimeOfday () para encontrar la hora transcurrida desde que la hora de la época es '1 de enero de 1970, 00:00:00 UTC'. La función getTimeOfday () devuelve el tiempo tanto en microsegundos como en segundos. Por lo tanto, para encontrar el tiempo preciso en los microsegundos, las dos veces deben sumarse juntos. El siguiente código adjunto lo ayudará a calcular el tiempo de ejecución en microsegundos utilizando

#incluir
#incluir
int main ()
doble s = 0, a = 1;
Estrucia de inicio de tiempo horario, final;
GetTimeOfday (& Start, 0);
int it = 1000*1000*1000;
para (int i = 0; is += a;
A /= 2.0;

GetTimeOfday (& End, 0);
larga sec = final.TV_SEC - Inicio.TV_SEC;
micro largo = final.TV_USEC - Inicio.TV_USEC;
Doble transcurrido = Sec + Micro*1e-6;
printf ("El reloj comienza a = %.20f \ n ", s);
printf ("El tiempo medido es = %.3f segundos.\ n ", transcurrido);
regresar 0;

La función getTimeOfday () se incluye en el archivo de encabezado.

El 'struct cronterval' es una estructura de horario horario utilizada para representar el tiempo transcurrido.

Se agregan el tiempo calculado en segundos y microsegundos para obtener el tiempo de ejecución exacta en microsegundos. La función 'TV_SEC' proporciona el tiempo en segundos y 'TV_USEC' proporciona el tiempo en microsegundos. Para convertir los segundos en microsegundos, multiplique los microsegundos por 1e-6. Después de eso, agregue las dos veces en segundos y microsegundos para obtener el tiempo de ejecución preciso en microsegundos.

Ahora, haga clic en el icono de compilar y ejecutar en la barra de iconos del software Dev C ++. Presione la tecla F11 en el teclado para ejecutar el programa. La salida ejecutada se proporciona a continuación:

Ejemplo 3:

En este ejemplo, estamos utilizando la función de biblioteca y su tiempo (). La función Time () funciona de manera similar a la función getTerofday () que proporciona el tiempo transcurrido desde el momento de la época. Sin embargo, solo mide segundos completos y no puede definir la zona horaria. Por lo tanto, si los intervalos medidos son más de un segundo, entonces la función de tiempo () tiene sentido. Esta podría no ser la primera preferencia para obtener los microsegundos y puede usar otras funciones en su lugar. Vea el código a continuación:

#incluir
#incluir
int main ()
doble s = 0, a = 1;
Time_t inicio, final;
tiempo (y comenzar);
int it = 1000*1000*1000;
para (int i = 0; is += a;
A /= 2.0;

tiempo (y final);
Time_t elpsed = final - inicio;
printf ("resultado: %.20f \ n ", s);
printf ("Tiempo medido: %ld segundos.\ n ", transcurrido);
regresar 0;

La función Time () proporcionará el tiempo de ejecución de inicio y finalización y el tiempo transcurrido se puede calcular fácilmente con una instrucción 'Fin - Inicio'. Vea el resultado a continuación:

Tenga en cuenta que el tiempo transcurrido calculado con la función Time () es 6s, no el 6 exacto.833 microsegundos. La diferencia en el resultado de la función TIME () se ve en la salida.

Conclusión

Varios métodos calculan el tiempo de ejecución del sistema utilizando un programa C ++. Sin embargo, ninguna solución es perfecta para cada situación y cada función funciona de manera diferente en diferentes situaciones. Aquí aprendimos a usar el tiempo (), GetTimeOfday () y las funciones para obtener el tiempo de ejecución en microsegundos.