comp.lang.ada
 help / color / mirror / Atom feed
From: Niklas Holsti <niklas.holsti@tidorum.invalid>
Subject: Re: An Example for Ada.Execution_Time
Date: Fri, 31 Dec 2010 14:42:41 +0200
Date: 2010-12-31T14:42:41+02:00	[thread overview]
Message-ID: <8o61e2FkdvU1@mid.individual.net> (raw)
In-Reply-To: <1fb06tjt2dy1y$.1tkafcv9oya2w.dlg@40tude.net>

Dmitry A. Kazakov wrote:
> On Thu, 30 Dec 2010 18:51:30 -0500, BrianG wrote:
> 
>> Since D.16 defines CPU_Time as if it were a numeric value, is it too 
>> much to ask why a conversion to some form of numeric value wasn't 
>> provided?
> 
> But time is not a number and was not defined as if it were.

You keep saying that, Dmitri, but your only argument seems to be the 
absence of some operators like addition for CPU_Time. Since CPU_Time is 
private, we cannot tell if this absence means that the D.14 authors 
considered the type non-numeric, or just considered the operators 
unnecessary for the intended uses.

> It is the time
> differences which are numeric. RM D.14 defines differences of CPU_Time as
> Time_Span. Time_Span is numeric.

CPU_Time is logically numeric, since its "values correspond one-to-one 
with a .. range of mathematical integers" by RM D.14 (12/2). Moreover, 
RM D.14 (13/2) uses the symbol "I" to stand for a value of CPU_Time, and 
then uses "I" as a factor that multiplies a floating-point number. So 
"I" clearly stands for a number (one of the "mathematical integers").

> I think this is the core of misunderstanding. The thing you have in mind is
> "time interval since the task start according to the execution time clock."

I agree with that.

> It is not Ada.Execution_Time.Clock,

It is, since:

- by RM D.14 (17/2), Ada.Execution_Time.Clock returns the "current 
execution time" of the task, and

- by RM D.14 (13/2), "the execution time value is set to zero at the 
creation of the task".

Moreover, the range required of CPU_Time is "from the task start-up to 
50 years of execution time later" (RM D.14 (20/2)). This, too, indicates 
that CPU_Time is not an absolute time point like Ada.Calendar.Time, but 
represents accumulated execution time (duration) from the creation of 
the task.

However, the difference is irrelevant for the programmer, since the 
programmer can get visibly numeric values from CPU_Time only by 
computing the difference of two CPU_Time values as a Time_Span and then 
converting the Time_Span to a Duration.

> it is:
> 
>    Ada.Execution_Time.Clock - CPU_Time_First

No. There is no rule in D.14 that makes CPU_Time_First equal to the 
CPU_Time at the start of a task (which by D.14 (13/2) is "zero"). 
CPU_Time_First is just defined as the smallest value of CPU_Time, 
presumably according to the "<" operator. It might represent a negative 
execution time. The "range of mathematical integers" in D.14 (12/2) may 
include negative numbers -- at least nothing is said to exclude this 
possibility.

I don't know why Ada.Execution_Time does not define a constant called 
CPU_Time_Zero; I think it should. Perhaps CPU_Time_First is meant to 
stand for zero, but this is not stated in D.14.

Overall, I think there may be some confusion in D.14 regarding the 
interpretation of CPU_Time as absolute or relative to the task start. 
The fact that no CPU_Time_Zero is defined suggests that an "absolute" 
interpretation was meant, as does the absence of an operator that adds 
two CPU_Times to yield a CPU_Time sum. Other parts of D.14, such as the 
zero initialization at task creation, suggest the "relative to task 
start" meaning.

As far as I can tell, the only sure way to get the task's execution time 
as a Time_Span or Duration is to read and store the value of 
Ada.Execution_Time.Clock at the start of the task, and then use that in 
Dmitry's subtraction formula instead of CPU_Time_First.

> Happy New Year,

Also to all of you...

-- 
Niklas Holsti
Tidorum Ltd
niklas holsti tidorum fi
       .      @       .



  reply	other threads:[~2010-12-31 12:42 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-12-27 18:26 An Example for Ada.Execution_Time anon
2010-12-28  2:31 ` BrianG
2010-12-28 13:43   ` anon
2010-12-29  3:10   ` Randy Brukardt
2010-12-30 23:51     ` BrianG
2010-12-31  9:11       ` Dmitry A. Kazakov
2010-12-31 12:42         ` Niklas Holsti [this message]
2010-12-31 14:15           ` Dmitry A. Kazakov
2010-12-31 18:57             ` Niklas Holsti
2011-01-01 13:39               ` Dmitry A. Kazakov
2011-01-01 20:25                 ` Niklas Holsti
2011-01-03  8:50                   ` Dmitry A. Kazakov
2010-12-31 13:05         ` Simon Wright
2010-12-31 14:14           ` Dmitry A. Kazakov
2010-12-31 14:24           ` Robert A Duff
2010-12-31 22:40           ` Simon Wright
2011-01-01  0:07       ` 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