2013-11-16 2 views
3

У меня есть программа, в которой одновременно работает около 10 задач. Все они вызывают одну и ту же функцию с разными значениями, и я хочу знать, сколько времени требуется для выполнения каждой из моих задач этой функции. Тем не менее, мне кажется, что я не могу использовать что-то вроде этого:Время работы процессора в Ada

A:=Clock; 
MyFunction(...); 
B:=Clock; 
Time:= B-A; 

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

ответ

4

Я думаю, что вам нужны сооружения Annex D.14:

«Этот подраздел описывает языковой пакет, определенные для измерения времени выполнения.»
«Время выполнения или время процессора заданной задачи определяется как время, затрачиваемое системой, выполняющей эту задачу, включая время, затрачиваемое на выполнение во время выполнения или системных служб от его имени».

Это указано в Ada 2005 и Ada 2012. Будет ли это доступно в вашем компиляторе в вашей операционной системе, это еще одна проблема! Например, «Execution_Time не поддерживается в этой конфигурации» в Mac OS X (GNAT GPL 2013, GCC 4.8).

2

Burns & Welling «Параллельное и постоянное программирование в Ada» описывает это как часы исполнения. (ch15.5, если вы можете получить копию), и это было добавлено в Ada-2005.

Вы будете искать пакет в своей установке под названием «Ada.Execution_Time». Надеюсь, его спецификация пакета скажет вам все, что вам нужно знать.

Возможно, также будет дочерний пакет «Ada.Execution_Time.Timers», который позволит вам настроить события, например. когда превышен бюджет времени процессора.

В моей системе, используя Гнат установлен в/USR/местные/бен, соответствующий файл:
/usr/local/lib/gcc/x86_64-unknown-linux-gnu/4.7.2/adainclude/a -exetim.ads
и функция, в которой вы нуждаетесь, - Ada.Execution_Time.Clock.

Смежные вопросы