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

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

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

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

Существует следующий определяемый языком библиотечный пакет:
with Ada.Task_Identification;
with Ada.Real_Time; use Ada.Real_Time;
package Ada.Execution_Time 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; он выражен в секундах. Такт CPU-часов — интервал времени выполнения, в течение которого значение часов (как наблюдается при вызове функции 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