From: "John B. Matthews" <nospam@nospam.invalid>
Subject: Re: gnat: Execution_Time is not supported in this configuration
Date: Fri, 04 Dec 2009 16:50:01 -0500
Date: 2009-12-04T16:50:01-05:00 [thread overview]
Message-ID: <nospam-3CB3F7.16500104122009@news.aioe.org> (raw)
In-Reply-To: 1wjhklygzok25.t79koxbbtlcj$.dlg@40tude.net
In article <1wjhklygzok25.t79koxbbtlcj$.dlg@40tude.net>,
"Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> wrote:
> On Fri, 04 Dec 2009 13:28:24 -0500, John B. Matthews wrote:
>
> > In article
> > <5e5d6fb5-e719-4195-925c-d1286699393d@f16g2000yqm.googlegroups.com>,
> > singo <sander.ingo@gmail.com> wrote:
> >
[...]
> > I defer to Dmitry A. Kazakov about Windows, but this variation
> > produces similar results on MacOS 10.5 & Ubuntu 9.10 using GNAT
> > 4.3.4:
> >
> > <code>
> > with Ada.Text_IO; use Ada.Text_IO;
> > with Ada.Real_Time; use Ada.Real_Time;
> >
> > procedure ExecutionTime is
> > task T;
> >
> > task body T is
> > Start : Time := Clock;
> > Interval : Time_Span := Milliseconds(100);
> > begin
> > loop
> > Put_Line(Duration'Image(To_Duration(Clock - Start)));
> > delay To_Duration(Interval);
> > end loop;
> > end T;
> > begin
> > null;
> > end ExecutionTime;
> > </code>
> >
> > <console>
> > $ ./executiontime
> > 0.000008000
> > 0.100168000
> > 0.200289000
> > 0.300409000
> > 0.400527000
> > 0.500575000
> > ...
> > </console>
>
> Your code counts the wall clock time. On the contrary
> Ada.Execution_Time should do the task time, i.e. the time the task
> actually owned the processor or, maybe, the time the system did
> something on the task's behalf.
Ah, thank you for clarifying this. Indeed, one sees the secular growth
in the output as overhead accumulates. I meant to suggest that other
parts of Annex D may be supported on a particular platform, even if
Ada.Execution_Time is not.
> This package heavily depends on the OS services at least when the
> tasks are mapped onto the OS scheduling items (like threads).
>
> As far as I know it is impossible to implement it reasonably under
> Windows, because the corresponding service (used by the Task Manager
> too) counts time quants instead of the time. This causes a massive
> systematic error if tasks are switched before they consume their
> quants. I.e. *always* when you do I/O or communicate to other tasks.
> The bottom line, under Windows Ada.Execution_Time can be used only
> for tasks that do lengthy computations interrupted by only by the
> scheduler, so that all counted quants were consumed and no time were
> spent in uncounted quants.
>
> I don't know, if or how, this works under Linux or Max OS.
I should have mentioned that both systems specify "pragma
Unimplemented_Unit" in Ada.Execution_Time. On Mac OS X 10.5,
Ada.Real_Time.Time_Span_Unit is 0.000000001, but I'm unaware of a Mac
clock having better that microsecond resolution, as suggested in the
output above. I'm running Linux in VirtualBox, so I suspect any results
reflect the host OS more than anything else.
--
John B. Matthews
trashgod at gmail dot com
<http://sites.google.com/site/drjohnbmatthews>
next prev parent reply other threads:[~2009-12-04 21:50 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-12-04 11:09 gnat: Execution_Time is not supported in this configuration singo
2009-12-04 11:26 ` Dmitry A. Kazakov
2009-12-04 12:10 ` Georg Bauhaus
2009-12-07 8:08 ` singo
2009-12-07 17:13 ` John B. Matthews
2009-12-04 18:28 ` John B. Matthews
2009-12-04 19:01 ` Dmitry A. Kazakov
2009-12-04 21:50 ` John B. Matthews [this message]
2009-12-05 2:59 ` Randy Brukardt
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox