我有一个程序,其中大约有10个任务同时运行。它们都使用不同的值调用相同的函数,我想知道每个任务执行此函数需要多长时间。但是,在我看来,我不能使用这样的东西:
A:=Clock;
MyFunction(...);
B:=Clock;
Time:= B-A;
实际上,我认为这不会返回“真正的”CPU时间,而是从函数的开始和结束之间经过的时间,这是不正确的,因为我的任务可以在执行函数时切换。所以,我想知道是否有办法知道我的每个任务的“真实”CPU时间,即他们真正花费在使用CPU上的时间?
答案 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。