comp.lang.ada
 help / color / mirror / Atom feed
From: Robert A Duff <bobduff@shell01.TheWorld.com>
Subject: Re: Semantics of statement reordering relevant to Ada.Real_Time
Date: Sun, 30 Mar 2008 14:59:21 -0400
Date: 2008-03-30T14:59:21-04:00	[thread overview]
Message-ID: <wccbq4wt4vq.fsf@shell01.TheWorld.com> (raw)
In-Reply-To: c3842c8b-f3a3-49be-b218-02045f9153ea@i7g2000prf.googlegroups.com

Eric Hughes <eric.eh9@gmail.com> writes:

> On Mar 29, 7:51 am, kongra <kon...@gmail.com> wrote:
>>    Start_T := Ada.Real_Time.Clock;
>>    for K in 1 .. 10 loop
>>       for I in 1 .. 10_000_000 loop
>>          Val := Val + I;
>>       end loop;
>>    end loop;
>>    End_T   := Ada.Real_Time.Clock;
>
> I have a question about this piece of the program.  Because the middle
> uses only variables 'K', 'I', and 'Val', and the side-effects of
> modifying these variables are entirely local, and because there's no
> inter-dependency of these variables upon either the first or last
> statements, aren't the following reorderings legal for code
> generation?  To wit:
>
>     Long_Statement ;
>     Start_T := Ada.Real_Time.Clock ;
>     End_T   := Ada.Real_Time.Clock ;
>
>     Start_T := Ada.Real_Time.Clock ;
>     End_T   := Ada.Real_Time.Clock ;
>     Long_Statement ;
>
> Irrelevant to the quirks mentioned earlier, isn't it legal operation
> for the interval to come out zero?

Yes.

For example, I can calculate the final value of Val with pencil and
paper, so I guess I could teach an optimizer to do it at compile time.
;-)

>...It seems that for known-correct
> operation for all possible compilers you'd need to manually serialize
> these operations in the order desired.

The only thing that's guaranteed is I/O behavior, so you have to do some
I/O.  And you should inspect the generated machine code to see if you're
measuring what you think you're measuring.  In other words, this sort of
thing is pretty much outside the language definition.  Also, it might be
better to measure using outside tools, like the Unix 'time' command, or
perhaps a stopwatch.

- Bob



  reply	other threads:[~2008-03-30 18:59 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-03-29 13:51 Ada.Real_Time behavior with GNAT kongra
2008-03-29 16:50 ` george.priv
2008-03-29 17:29   ` Georg Bauhaus
2008-03-29 19:06     ` george.priv
2008-03-29 19:15     ` Konrad Grzanek
2008-03-29 18:11 ` Simon Wright
2008-03-29 18:25 ` Dmitry A. Kazakov
2008-03-29 19:46   ` Konrad Grzanek
2008-03-29 21:21     ` george.priv
2008-03-29 21:49       ` Konrad Grzanek
2008-03-30  0:14     ` Georg Bauhaus
2008-03-30 17:12 ` Semantics of statement reordering relevant to Ada.Real_Time Eric Hughes
2008-03-30 18:59   ` Robert A Duff [this message]
2008-03-30 21:12     ` Eric Hughes
2008-03-30 21:28       ` Robert A Duff
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox