¿Cuál es la relación entre la frecuencia real de la CPU y el reloj_t (la unidad es el tictac del reloj ) en C?
Digamos que tengo la siguiente pieza de código C que mide el tiempo que la CPU consumió para ejecutar un bucle for .
Pero dado que CLOCKS_PER_SEC es un valor constante (básicamente 1000,000) en la biblioteca estándar de C, me pregunto cómo la función de clock mide los ciclos de CPU reales que consume el programa mientras se ejecuta en diferentes computadoras con diferentes frecuencias de CPU (por mi portátil, es de 2,6 GHz).
Y si no son relevantes, ¿cómo funciona el temporizador de la CPU en el escenario mencionado?
#include <time.h> #include <stdio.h> int main(void) { clock_t start_time = clock(); for(int i = 0; i < 10000; i++) {} clock_t end_time = clock(); printf("%fs\n", (double)(end_time - start_time) / CLOCKS_PER_SEC); return 0; }clock_t no están relacionados con la frecuencia de la CPU.Vea una explicación más larga aquí .
Si bien los valores de tipo clock_t podrían haber representado, en teoría, los pulsos reales del reloj físico de la CPU, en la práctica, no lo hacen: POSIX exige que CLOCKS_PER_SEC sea igual a 1,000,000, un millón. Así, la función clock_t devuelve un valor en microsegundos .
Para proporcionar la información utilizada en el código mostrado, medir/conocer/utilizar los ciclos de la CPU no es relevante.
Para proporcionar el tiempo transcurrido, solo es necesario medir el tiempo.
Leer un temporizador de hardware sería una forma de hacerlo.
La mayoría de las computadoras (incluso las que no están integradas) contienen temporizadores que cuentan especialmente los tictacs de un reloj con una frecuencia constante conocida. (Específicamente no son "temporizadores de CPU").
Tal temporizador se puede leer y produce un valor que aumenta una vez por tic (de período constante). Donde "período conocido" significa un período conocido por algún controlador apropiado para ese temporizador, simplificado "conocido por la función clock() , no necesariamente conocido por usted".
Tenga en cuenta que incluso si se conociera la cantidad de ciclos de CPU utilizados, calcular el tiempo transcurrido a partir de esa información es casi imposible hoy en día, en presencia de:
Más cosas que influyen/previenen el cálculo, de la contribución del comentario:
escalado de frecuencia, regulación de temperatura y ajustes de potencia (David C. Rankin)
No existe tal cosa como " la frecuencia real de la CPU". No en la computadora portátil de todos, en cualquier caso.
En muchos sistemas, el sistema operativo puede reducir y aumentar la velocidad del reloj de la CPU según lo crea conveniente. En algunos sistemas hay más de un tipo de procesador central o núcleo, cada uno con una velocidad diferente. Algunas CPU no tienen reloj (asíncronas).
Por todo esto y por otras razones, la mayoría de las computadoras miden el tiempo con un dispositivo de reloj separado, independiente del reloj de la CPU (si lo hay).