comp.lang.ada
 help / color / mirror / Atom feed
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>



  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