Como llamar clock()
en C++
?
Por ejemplo, quiero probar cuánto tiempo lleva una búsqueda lineal para encontrar un elemento dado en una matriz.
c++
benchmarking
clock
dato datuashvili
fuente
fuente
perf stat -d ./a.out
Respuestas:
fuente
clock()
yclock_t
son del encabezado de la Biblioteca estándar de Ctime.h
y, por lo tanto, no necesitan el uso destd
prefijos de espacio de nombres después de la inclusión de sus bibliotecas.<ctime>
envuelve ese valor y funciona con elstd
espacio de nombres, pero no es obligatorio usarlo. Verifique aquí los detalles de implementación: en.cppreference.com/w/cpp/header/ctimeEs utilizar una solución alternativa, que es portátil y con mayor precisión, disponible desde C ++ 11
std::chrono
.Aquí hay un ejemplo:
Ejecutar esto en ideone.com me dio:
fuente
using Clock=std::chrono::high_resolution_clock;
. Ver tipo alias .std::chrono::high_resolution_clock
no es monótono en todas las implementaciones de std lib. De la cppreference: en general, uno debería usar std :: chrono :: steady_clock o std :: chrono :: system_clock directamente en lugar de std :: chrono :: high_resolution_clock: use steady_clock para las mediciones de duración y system_clock para el tiempo del reloj de pared.clock()
devuelve el número de tics de reloj desde que comenzó su programa. Hay una constante relacionadaCLOCKS_PER_SEC
, que le dice cuántos tics de reloj ocurren en un segundo. Por lo tanto, puede probar cualquier operación como esta:fuente
timeInSeconds
siempre viene0.000000
por mí ¿Cómo lo arreglaría?long double
para obtener más precisión.Al menos en Windows, el único mecanismo de medición prácticamente preciso es QueryPerformanceCounter (QPC). std :: crono se implementa utilizando (desde VS2015, que si se utiliza), pero es que no precisa en el mismo grado como el uso de QueryPerformanceCounter directamente. En particular, se afirma que informar a una granularidad de 1 nanosegundo no es del todo correcto. Entonces, si está midiendo algo que lleva una cantidad de tiempo muy corta (y su caso podría ser tal), entonces debe usar QPC, o el equivalente para su sistema operativo. Me topé con esto al medir las latencias de caché, y anoté algunas notas que pueden ser útiles aquí; https://github.com/jarlostensen/notesandcomments/blob/master/stdchronovsqcp.md
fuente
fuente
Probablemente te interese un temporizador como este: H: M: S. Ms.
el código en el sistema operativo Linux:
fuente
usleep
no siempre regresará después de la cantidad exacta que solicita. A veces será más largo. Debe verificar la hora actual al comienzo, luego verificar la hora actual y restar para obtener el tiempo absoluto desde que comenzó cada vez a través del ciclo.Puedes medir cuánto tiempo funciona tu programa. Las siguientes funciones ayudan a medir el tiempo de CPU desde el inicio del programa:
mi referencia : Algorithms toolbox week 1 course parte de estructuras de datos y especialización de algoritmos por la University of California San Diego y la National Research University Higher School of Economics
para que pueda agregar esta línea de código después de su algoritmo
Salida esperada: la salida que representa el número de
clock ticks per second
fuente