Ada中任务的CPU时间

时间:2013-11-16 19:28:48

标签: time task cpu ada

我有一个程序,其中大约有10个任务同时运行。它们都使用不同的值调用相同的函数,我想知道每个任务执行此函数需要多长时间。但是,在我看来,我不能使用这样的东西:

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

实际上,我认为这不会返回“真正的”CPU时间,而是从函数的开始和结束之间经过的时间,这是不正确的,因为我的任务可以在执行函数时切换。所以,我想知道是否有办法知道我的每个任务的“真实”CPU时间,即他们真正花费在使用CPU上的时间?

2 个答案:

答案 0 :(得分:4)

我认为你需要Annex D.14的设施:

“这个子条款描述了一个用于衡量执行时间的语言定义包。”
“给定任务的执行时间或CPU时间定义为系统执行该任务所花费的时间,包括代表它执行运行时或系统服务所花费的时间。”

这是在Ada 2005和Ada 2012中指定的。它是否在您的操作系统上的编译器中可用是另一个问题!例如,Mac OS X(GNAT GPL 2013,GCC 4.8)上的“此配置中不支持Execution_Time”。

答案 1 :(得分:2)

烧伤& Welling“Ada中的并发和实时编程”将其描述为执行时钟。 (如果你能获得一份副本,则为ch15.5),这是在Ada-2005中添加的。

您将在安装中寻找名为“Ada.Execution_Time”的软件包。希望它的包装规格可以告诉你所有你需要知道的。

可能还会有一个子包“Ada.Execution_Time.Timers”,可让您设置要发生的事件,例如:超过CPU时间预算时。

在我的系统上,使用安装在/ usr / local / bin中的Gnat,相关文件为:
/usr/local/lib/gcc/x86_64-unknown-linux-gnu/4.7.2/adainclude/a-exetim.ads
你需要的功能是Ada.Execution_Time.Clock。