Articulo de referencia

Tiempo de CPU

Tiempo de CPU en un sistema multitarea con una sola CPU Tiempo de color de la CPU para el programa P1 El tiempo de CPU (o tiempo de procesamiento ) es el tiempo que una unid...

Tiempo de CPU en un sistema multitarea con una sola CPU
  Tiempo de color de la CPU para el programa P1

El tiempo de CPU (o tiempo de procesamiento ) es el tiempo que una unidad central de procesamiento (CPU) dedicó a procesar un conjunto específico de instrucciones de un programa informático o sistema operativo , a diferencia del tiempo total de ejecución, durante el cual la CPU pudo haber dedicado tiempo a otros procesos. Véase la figura. El tiempo de CPU se mide en ciclos de reloj o segundos. A veces resulta útil convertir el tiempo de CPU en un porcentaje de la capacidad de la CPU, lo que da como resultado el uso de la CPU .

Medir el tiempo de CPU de dos programas funcionalmente idénticos que procesan entradas idénticas puede indicar cuál es más rápido, pero es un error común pensar que el tiempo de CPU se puede usar para comparar algoritmos . Comparar programas por su tiempo de CPU compara implementaciones específicas de algoritmos. (Es posible tener implementaciones eficientes e ineficientes del mismo algoritmo). Los algoritmos se comparan más comúnmente utilizando medidas de complejidad temporal y espacial .

Normalmente, el tiempo de CPU utilizado por un programa lo mide el sistema operativo, que planifica todas las tareas de la CPU. Los sistemas operativos multitarea modernos ejecutan cientos de procesos. (Un proceso es un programa en ejecución). Al iniciar un proceso, el sistema operativo registra el tiempo mediante un temporizador interno. Cuando el proceso se suspende o finaliza, el sistema operativo vuelve a registrar el tiempo. El tiempo total que un proceso ha estado en ejecución es su tiempo de CPU, como se muestra en la figura.

Hora del usuario y del sistema

El proceso de "contabilidad" que realiza la familia de sistemas operativos Unix incluye dos componentes de tiempo de CPU : el tiempo de usuario y el tiempo de sistema. Estos últimos reflejan que la mayoría de los programas realizan solicitudes al sistema operativo durante su ejecución. Las operaciones de entrada/salida , como leer un archivo o escribir en la pantalla, se realizan mediante solicitudes al sistema operativo, posiblemente a través de llamadas al sistema . Las operaciones de entrada/salida y otras operaciones realizadas por el sistema operativo en nombre de un proceso constituyen el tiempo de sistema.

  • El tiempo de usuario es la cantidad de tiempo que la CPU está ocupada ejecutando código en el espacio de usuario .
  • El tiempo del sistema es el tiempo que la CPU está ocupada ejecutando código en el espacio del kernel . Este valor representa el tiempo que el kernel realiza trabajo en nombre del proceso en ejecución.

Otros sistemas operativos, como Microsoft Windows, también tienen un sistema de contabilidad independiente para el "tiempo del núcleo", que es un concepto muy similar al del "tiempo del sistema".

En cambio, el tiempo real transcurrido (o simplemente tiempo real, o tiempo cronometrado ) es el tiempo que transcurre desde el inicio de un programa informático hasta su finalización, medido por un reloj convencional. El tiempo real transcurrido incluye el tiempo del usuario, el tiempo del sistema y el tiempo durante el cual el proceso no se ejecutó por ningún motivo, como por ejemplo cuando su ejecución fue interrumpida.

Comandos Unix para el tiempo de CPU

Visualización del tiempo de CPU de varios procesos en un sistema tipo Unix ( GNU / Linux ) mediante el comando top .

Comando Unix top

El comando top de Unix proporciona información sobre el tiempo de CPU, la prioridad, el tiempo real transcurrido y otros datos de todos los procesos, y los actualiza en tiempo real.

Tiempo de comando Unix

El comando ` time` de Unix imprime el tiempo de CPU y el tiempo real transcurrido durante la ejecución de un comando (o tubería ) de Unix. Tenga en cuenta que muchos intérpretes de comandos tienen su propia implementación de este comando. Para ejecutar el programa de Unix , proporcionamos su ruta completa :time/usr/bin/time

$ gcc nextPrimeNumber.c -o nextPrimeNumber -lm $ /usr/bin/time ./nextPrimeNumber 300000070034 El número primo mayor que 300000070034 es 300000070043  0.01usuario 0.00sistema 0:00.01transcurrido 100%CPU $

Este proceso consumió un total de 0,02 segundos de tiempo de CPU (usuario + sistema). El tiempo del sistema reportado es de 0,00 segundos, lo que indica que el tiempo del sistema utilizado fue menor que la resolución impresa de 0,01 segundos. El tiempo real transcurrido fue de 0,08 segundos.

A continuación se muestra el código fuente de la aplicación nextPrimeNumber que se utilizó en el ejemplo anterior.

// nextPrimeNumber.c #include <stdio.h> #include <stdlib.h> #include <math.h>int isPrimeNumber ( unsigned long int n ) { unsigned long int limit = ceil ( sqrt ( n )); for ( int i = 2 ; i <= limit ; ++ i ) if ( n % i == 0 ) return 0 ; return 1 ; }int main ( int argc , char * argv []) { unsigned long int argument = strtoul ( argv [ 1 ], NULL , 10 ), n = argument ; while ( ! isPrimeNumber ( ++ n ));printf ( "Número primo mayor que %lu es %lu \n " , argumento , n ); return 0 ; }

Funciones para obtener el tiempo de CPU

Las CPU modernas tienen varios relojes y contadores, como el contador de marca de tiempo , el temporizador de eventos de alta precisión y el reloj en tiempo real , cada uno con un uso especializado. Cuando un programa quiere medir el tiempo de su propia operación, puede usar una función como la función POSIXclock() , que devuelve el tiempo de CPU utilizado por el programa. POSIX permite que este reloj comience en un valor arbitrario, por lo que para medir el tiempo transcurrido, un programa llama a clock(), realiza algún trabajo y luego vuelve a llamar a clock(). [ 1 ] La diferencia es el tiempo necesario para realizar el trabajo.

La función POSIXgetrusage() devuelve más que solo el tiempo de CPU consumido por un proceso en un entorno POSIX. Devuelve diversas mediciones de un proceso, incluyendo a menudo el uso aproximado de memoria y el número de eventos de cambio de contexto (planificación). La funcionalidad varía según el sistema operativo.

Tiempo total de CPU

En máquinas multiprocesador y multinúcleo , un programa puede usar dos o más procesadores simultáneamente, en lo que se denomina procesamiento paralelo . En tales situaciones, resulta útil medir el tiempo total de CPU , que es la suma del tiempo de CPU consumido por todos los procesadores utilizados por el programa.

Tiempo de CPU y tiempo real transcurrido

En informática , el tiempo real transcurrido , el tiempo real , el tiempo de ejecución o el tiempo de pared es el tiempo real que transcurre desde el inicio hasta el final de un programa informático . En otras palabras, es la diferencia entre el momento en que finaliza una tarea y el momento en que comienza. El tiempo de pared es, por lo tanto, diferente del tiempo de CPU, que mide únicamente el tiempo durante el cual el procesador trabaja activamente en una tarea o proceso determinado . La diferencia entre ambos puede deberse a factores dependientes de la arquitectura y del tiempo de ejecución , como retrasos programados o la espera a que los recursos del sistema estén disponibles. [ 2 ]

El tiempo real transcurrido siempre es mayor o igual que el tiempo de CPU para los programas informáticos que utilizan un solo procesador para su procesamiento. Si no se producen esperas, como por ejemplo para operaciones de entrada/salida, y la ejecución del programa nunca se interrumpe, el tiempo real transcurrido y el tiempo de CPU serán prácticamente idénticos.

Tiempo de CPU y tiempo real transcurrido para el procesamiento paralelo

Si un programa utiliza procesamiento paralelo , el tiempo total de CPU para ese programa suele ser mayor que su tiempo real transcurrido. Para un programa que puede dividir su trabajo equitativamente entre dos procesadores sin sobrecarga alguna, el valor (Tiempo total de CPU)/(Número de procesadores) será prácticamente idéntico al tiempo real transcurrido. En este caso, un procesador puede ser una CPU (de un solo núcleo) o un núcleo de una CPU multinúcleo .

Ejemplo: Una aplicación de software que se ejecuta en un procesador de cuatro núcleos crea cuatro procesos Unix. Si cada proceso puede ejecutarse en un núcleo de procesador independiente, el cálculo se realiza simultáneamente en los cuatro núcleos. El tiempo total de CPU sería, idealmente, cuatro veces el tiempo real transcurrido.

En realidad, el procesamiento paralelo rara vez logra una aceleración lineal, donde la cantidad de cálculos por unidad de tiempo aumenta proporcionalmente al número de procesadores en uso. Algunos problemas aparentemente paralelizados admiten este tipo de soluciones, pero en la mayoría de los casos, se requiere trabajo adicional para dividir los cálculos al inicio del programa y combinar los resultados de cada procesador al finalizar. Este trabajo adicional incrementa el tiempo total de CPU. Con frecuencia, un proceso debe esperar datos de otro proceso antes de poder continuar, lo que también aumenta el tiempo total.

Véase también

Referencias

  1. Véase, por ejemplo, https://www.gnu.org/software/libc/manual/html_node/CPU-Time.html
  2. Wu, X. (2012). Evaluación, predicción y visualización del rendimiento de sistemas paralelos . Serie internacional sobre estudios asiáticos en informática y ciencias de la información. Springer US. pág.  37. ISBN 978-1-4615-5147-8. Consultado el 19 de febrero de 2026 .
  • Thimmannagari, Chandra (1 de enero de 2005). Diseño de CPU: Respuestas a preguntas frecuentes . Springer. pág . 68. ISBN  0-387-23799-2.
  • "Procesador y tiempo de CPU" . La biblioteca GNU C. 9 de febrero de 2014. Consultado el 5 de agosto de 2014 .
  • "reloj - informa el tiempo de CPU utilizado" . The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition . Consultado el 5 de agosto de 2014 .
  • "getrusage - obtener información sobre la utilización de recursos" . The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition . Consultado el 5 de agosto de 2014 .