qué obtener jerusalén israel horaria hora fecha ejemplos diferencia aviv actual c++ boost time benchmarking

c++ - jerusalén - Obtener hora local en nanosegundos



obtener fecha y hora actual c# (4)

Posible duplicado:
Función C ++ Timer para proporcionar tiempo en nano segundos

Necesito medir la duración de la ejecución de una función en una resolución de nanosegundos. ¿Es posible? ¿Nuestro hardware y software ordinario de computadora puede dar tal precisión por tiempo? Si es así, ¿cómo lograr eso con c ++? ¿Es posible con la biblioteca de Boost?


Lo mejor que puedes hacer con la API de Windows es QueryPerformanceCounter . Puede obtener su resolución con QueryPerformanceFrequency . Según la situación, se puede utilizar la instrucción RDTSC de la CPU, en cuyo caso la frecuencia es básicamente la frecuencia de reloj de la CPU. En otros casos, usa un reloj separado con una frecuencia de 1.024 MHz, por lo que la resolución es básicamente de un microsegundo.

C ++ 11 agrega una clase chrono que también puede ser útil, suponiendo que esté utilizando un compilador que ya lo tiene. Si su compilador no proporciona una implementación, Boost Chrono es un sustituto razonable que funciona con la mayoría de los compiladores / bibliotecas existentes. Una vez más, no hay garantía de que proporcione una resolución de nanosegundos, pero espero que en Windows probablemente sea un contenedor portátil para QPC / QPF, por lo que probablemente brinde la misma resolución que ellos, de manera más portátil.



Y, por supuesto, también está el viejo Boost :: date_time :

#include <boost/date_time/posix_time/posix_time.hpp> boost::posix_time::ptime date_time = boost::posix_time::microsec_clock::universal_time();

solo microsec, sin embargo.


Sí, hoy en día, la mayoría del hardware admite este tipo de resolución, y la biblioteca estándar de C ++ también tiene una API que puede admitirlo. Lamentablemente, no todas las implementaciones de C ++ realmente lo proporcionan.

La API es la biblioteca <chrono> introducida en C ++ 11:

#include <iostream> #include <chrono> int main() { auto start = std::chrono::high_resolution_clock::now(); // operation to be timed ... auto finish = std::chrono::high_resolution_clock::now(); std::cout << std::chrono::duration_cast<std::chrono::nanoseconds>(finish-start).count() << "ns/n"; }

La implementación de <chrono> en libc ++ para Darwin proporciona una resolución en nanosegundos, pero parece que la implementación en VS2012 solo llega a las décimas de milisegundos. El código anterior aún dará tiempos en términos de nanosegundos, pero los tiempos de menos de 100 microsegundos terminarán siendo cero nanosegundos.

Boost también proporciona una implementación, boost :: chrono, que parece usar nanosegundos en Windows. También se puede usar con C ++ 03.

#include <boost/chrono.hpp> int main() { boost::chrono::high_resolution_clock::time_point t1 = boost::chrono::high_resolution_clock::now(); boost::chrono::high_resolution_clock::time_point t2 = boost::chrono::high_resolution_clock::now(); std::cout << boost::chrono::duration_cast<boost::chrono::nanoseconds>(t2-t1) << "/n"; // boost chrono has more advanced output, .count() isn''t needed, nor is manually writing out the units }