stringtranslate.com

время ЦП

Время ЦП в многозадачной системе с одним ЦП
  Время цветопередачи ЦП для программы P1

Время ЦП (или время процесса ) — это количество времени , которое центральный процессор (ЦП) использовал для обработки инструкций компьютерной программы или операционной системы . Время ЦП измеряется в тиках часов или секундах. Иногда бывает полезно преобразовать время ЦП в процент от мощности ЦП, что дает использование ЦП .

Измерение времени ЦП для двух функционально идентичных программ, обрабатывающих идентичные входные данные, может указать, какая программа быстрее, но распространенным заблуждением является то, что время ЦП можно использовать для сравнения алгоритмов . Сравнение программ по времени ЦП сравнивает конкретные реализации алгоритмов. (Возможно наличие как эффективных, так и неэффективных реализаций одного и того же алгоритма.) Алгоритмы чаще сравниваются с использованием мер временной сложности и пространственной сложности .

Обычно время ЦП, используемое программой, измеряется операционной системой, которая планирует всю работу ЦП. Современные многозадачные операционные системы запускают сотни процессов. (Процесс — это запущенная программа.) При запуске процесса операционная система записывает время с помощью внутреннего таймера. Когда процесс приостанавливается или завершается, операционная система снова записывает время. Общее время, которое процесс провел в работе, является его временем ЦП, как показано на рисунке.

Пользовательское и системное время

Процесс «учет» операционных систем семейства Unix включает два компонента процессорного времени . Пользовательское время и системное время отражают тот факт, что большинство программ делают запросы к операционной системе во время своего выполнения. Операции ввода-вывода , такие как чтение файла или запись на экран, выполняются путем отправки запросов к операционной системе, возможно, через системные вызовы . Ввод-вывод и другие операции, выполняемые операционной системой от имени процесса, составляют системное время.

Напротив, прошедшее реальное время (или просто реальное время, или время настенных часов ) — это время, прошедшее от начала компьютерной программы до ее окончания, измеренное обычными часами. Прошедшее реальное время включает в себя пользовательское время, системное время, а также время, в течение которого процесс не выполнялся по какой-либо причине, например, когда его выполнение было прервано.

Команды Unix для процессорного времени

отображение времени ЦП различных процессов в Unix -подобной системе ( GNU / Linux )

Unix-командавершина

Команда Unix top предоставляет информацию о времени ЦП, приоритете, прошедшем реальном времени и другую информацию для всех процессов и обновляет ее в реальном времени.

Unix-командавремя

Команда Unix time выводит время ЦП и реальное время, прошедшее для выполнения команды Unix (или конвейера ). Обратите внимание , что многие оболочки командной строки имеют собственную реализацию этой команды. Чтобы запустить программу Unix time, мы указываем ее полный путь /usr/bin/time:

$ gcc  nextPrimeNumber.c  -o  nextPrimeNumber $ /usr/bin/time  ./nextPrimeNumber 30000007 Простое число больше 30000007 равно 30000023  0,08 вещественное 0,02 пользовательское 0,00 системное $ 

Этот процесс занял в общей сложности 0,02 секунды процессорного времени (Пользователь + Система). Сообщенное системное время составляет 0,00 секунд, что указывает на то, что количество использованного системного времени было меньше, чем печатное разрешение 0,01 секунды. Прошедшее реальное время составило 0,08 секунд.

Ниже приведен исходный код приложения nextPrimeNumber, которое использовалось в приведенном выше примере.

// nextPrimeNumber.c #include <stdio.h> #include <stdlib.h>  int isPrimeNumber ( unsigned long int n ) { for ( int i = 2 ; i <= ( n >> 1 ); ++ i ) if ( n % i == 0 ) return 0 ; return 1 ; }                          int main ( int argc , char * argv []) { unsigned long int аргумент = strtoul ( argv [ 1 ], NULL , 10 ), n = аргумент ; while ( ! isPrimeNumber ( ++ n ));                   printf ( "Простое число больше %lu равно %lu \n " , аргумент , n ); return 0 ; }    

Функции для получения процессорного времени

Современные ЦП имеют несколько часов и счетчиков, таких как Счетчик отметок времени , Таймер событий высокой точности и Часы реального времени , каждый из которых имеет специализированное применение. Когда программа хочет засекать время своей собственной работы, она может использовать функцию, например функцию POSIX clock() , которая возвращает время ЦП , использованное программой. POSIX позволяет этим часам начинаться с произвольного значения, поэтому для измерения прошедшего времени программа вызывает clock(), выполняет некоторую работу, затем clock()снова вызывает. [1] Разница заключается во времени, необходимом для выполнения работы.

Функция POSIX getrusage() возвращает больше, чем просто время ЦП, потребляемое процессом в среде POSIX. Она возвращает множество измерений процесса, часто включая приблизительное использование памяти и количество событий переключения контекста (планирования). Функциональность различается в зависимости от операционной системы.

Общее время ЦП

На многопроцессорных и многоядерных машинах программа может использовать два или более процессоров одновременно в так называемой параллельной обработке . В таких ситуациях полезна мера общего времени ЦП , которая представляет собой сумму времени ЦП, потребляемого всеми процессорами, используемыми программой.

Время ЦП и прошедшее реальное время

Прошедшее реальное время всегда больше или равно времени ЦП для компьютерных программ, которые используют только один ЦП для обработки. Если не происходит ожидания, например, для ввода-вывода, и выполнение программы никогда не прерывается, прошедшее реальное время и время ЦП будут практически идентичны.

Время ЦП и реальное время, затраченное на параллельную обработку

Если программа использует параллельную обработку , общее время ЦП для этой программы обычно больше, чем ее реальное прошедшее время. Для программы, которая может равномерно распределить свою работу между двумя процессорами без дополнительных затрат, значение (общее время ЦП)/(количество процессоров) будет практически идентично реальному прошедшему времени. Здесь процессор может быть (одноядерным) ЦП или одним ядром в многоядерном ЦП .

Пример: программное приложение, запущенное на четырехъядерном процессоре , создает четыре процесса Unix. Если каждый процесс может быть запущен на отдельном ядре процессора, вычисления будут выполняться на четырех ядрах процессора одновременно. Общее время ЦП в идеале будет в четыре раза больше реального прошедшего времени.

В действительности параллельная обработка редко достигает линейного ускорения, когда объем вычислений в единицу времени масштабируется с числом используемых процессоров. Некоторые неловко параллельные задачи допускают такие решения, но для большинства требуется дополнительная работа, чтобы разделить вычисления при запуске программы и объединить результаты от каждого процессора в конце. Дополнительная работа добавляется к общему времени ЦП. Часто процесс оказывается в ожидании данных от другого процесса, прежде чем он сможет продолжить, что также добавляется к общему времени.

Смотрите также

Ссылки

  1. ^ См., например, https://www.gnu.org/software/libc/manual/html_node/CPU-Time.html

Внешние ссылки