Spec-Zone.ru › Ada 2022
Справочник по Ada (Ada 2022)

D.14 Время выполнения

Этот подпункт описывает пакет, определённый языком, для измерения времени выполнения.

Статическая семантика

Существует следующий пакет библиотеки, определённый языком:
with Ada.Task_Identification;
with Ada.Real_Time; use Ada.Real_Time;
package Ada.Execution_Time
with Nonblocking, Global => in out synchronized is
type CPU_Time is private;
CPU_Time_First : constant CPU_Time;
CPU_Time_Last : constant CPU_Time;
CPU_Time_Unit : constant := определяемое реализацией вещественное число;
CPU_Tick : constant Time_Span;
function Clock
(T : Ada.Task_Identification.Task_Id
:= Ada.Task_Identification.Current_Task)
return CPU_Time;
function "+" (Left : CPU_Time; Right : Time_Span) return CPU_Time;
function "+" (Left : Time_Span; Right : CPU_Time) return CPU_Time;
function "-" (Left : CPU_Time; Right : Time_Span) return CPU_Time;
function "-" (Left : CPU_Time; Right : CPU_Time) return Time_Span;
function "<" (Left, Right : CPU_Time) return Boolean;
function "<=" (Left, Right : CPU_Time) return Boolean;
function ">" (Left, Right : CPU_Time) return Boolean;
function ">=" (Left, Right : CPU_Time) return Boolean;
procedure Split
(T : in CPU_Time; SC : out Seconds_Count; TS : out Time_Span);
function Time_Of (SC : Seconds_Count;
TS : Time_Span := Time_Span_Zero) return CPU_Time;
Interrupt_Clocks_Supported : constant Boolean := определяемое реализацией;
Separate_Interrupt_Clocks_Supported : constant Boolean :=
определяемое реализацией;
function Clock_For_Interrupts return CPU_Time;
private
... -- не определено языком
end Ada.Execution_Time;
Время выполнения или время процессора заданной задачи определяется как время, затраченное системой на выполнение этой задачи, включая время выполнения времени выполнения или системных служб от её имени. Механизм измерения времени выполнения определяется реализацией. Логическая константа Interrupt_Clocks_Supported устанавливается в True, если реализация отдельно учитывает время выполнения обработчиков прерываний. Если она установлена в False, то определяется реализацией, какой задаче, если таковая имеется, вменяется время выполнения, потребляемое обработчиками прерываний. Логическая константа Separate_Interrupt_Clocks_Supported устанавливается в True, если реализация отдельно учитывает время выполнения отдельных обработчиков прерываний (см. D.14.3).
Тип CPU_Time представляет время выполнения задачи. Множество значений этого типа соответствует одному-к-одному с определённым реализацией диапазоном математических целых чисел.
Значение CPU_Time I представляет полуоткрытый интервал времени выполнения, который начинается с I*CPU_Time_Unit и ограничен (I+1)*CPU_Time_Unit, где CPU_Time_Unit — определяемое реализацией вещественное число. Для каждой задачи значение времени выполнения устанавливается в ноль при создании задачи.
CPU_Time_First и CPU_Time_Last — соответственно наименьшее и наибольшее значения типа CPU_Time.
Значение времени выполнения для функции Clock_For_Interrupts инициализируется нулём.

Динамическая семантика

CPU_Time_Unit — наименьший интервал времени выполнения, представимый типом CPU_Time; он выражается в секундах. Такт процессорного таймера — интервал времени выполнения, в течение которого значение таймера (как наблюдаемое при вызове функции Clock) остаётся постоянным. CPU_Tick — средняя продолжительность таких интервалов.
Действия операторов над CPU_Time и Time_Span аналогичны действиям операторов, определённых для целочисленных типов.
Функция Clock возвращает текущее время выполнения задачи, идентифицированной T; Tasking_Error поднимается, если эта задача завершена; Program_Error поднимается, если значение T равно Task_Identification.Null_Task_Id.
Действия операций Split и Time_Of определяются следующим образом, рассматривая значения типов CPU_Time, Time_Span и Seconds_Count как математические целые числа. Действие Split (T, SC, TS) заключается в установке SC и TS в значения такие, что T*CPU_Time_Unit = SC*1.0 + TS*CPU_Time_Unit, и 0.0 <= TS*CPU_Time_Unit < 1.0. Значение, возвращаемое Time_Of(SC,TS), — это значение времени выполнения T такое, что T*CPU_Time_Unit=SC*1.0 + TS*CPU_Time_Unit.
Функция Clock_For_Interrupts возвращает общее накопленное время, затраченное на выполнение всех обработчиков прерываний. Это время не распределяется по часам времени выполнения любой задачи. Если Interrupt_Clocks_Supported имеет значение False, функция вызывает Program_Error.

Ошибка выполнения

При вызове функции Clock, если задача, идентифицированная T, больше не существует, выполнение программы является ошибочным.

Требования к реализации

Диапазон значений CPU_Time должен быть достаточным для уникального представления диапазона времен выполнения от запуска задачи до 50 лет выполнения позже.
CPU_Tick должен быть не больше 1 миллисекунды.

Требования к документации

Реализация должна документировать значения CPU_Time_First, CPU_Time_Last, CPU_Time_Unit и CPU_Tick.
Реализация должна документировать свойства лежащего в основе механизма измерения времени выполнения, такие как поддерживаемый диапазон значений и любые соответствующие аспекты используемых базового оборудования или средств операционной системы.

Метрики

Реализация должна документировать следующие метрики:
  • Верхняя граница продолжительности интервала времени выполнения такта таймера. Это значение D такое, что если t1 и t2 — любые времена выполнения данной задачи, такие что t1 < t2 и Clockt1 = Clockt2, то t2 – t1 <= D.
  • Верхняя граница размера скачка таймера. Скачок таймера — это разница между двумя последовательными различными значениями таймера времени выполнения (как наблюдаемого при вызове функции Clock с тем же Task_Id).
  • Верхняя граница времени выполнения вызова функции Clock в тактах процессора.
  • Верхние границы времен выполнения операторов типа CPU_Time в тактах процессора.

Разрешения на реализацию

Реализации, нацеленные на машины со значением слова меньше 32 бит, могут опустить поддержку полного диапазона и гранулярности типа CPU_Time.

Рекомендации по реализации

По возможности, реализации должны предоставить механизмы конфигурации для изменения значения CPU_Tick.


Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API