comp.lang.ada
 help / color / mirror / Atom feed
From: "Randy Brukardt" <randy@rrsoftware.com>
Subject: Re: Ada.Execution_Time
Date: Fri, 31 Dec 2010 17:34:27 -0600
Date: 2010-12-31T17:34:27-06:00	[thread overview]
Message-ID: <iflpa6$pp0$1@munin.nbi.dk> (raw)
In-Reply-To: 8o4k3tFko2U1@mid.individual.net

I think we're actually in agreement on most points. The main difference is 
that I contend that the theoretical "execution time" is, in actual practice, 
unmeasurable. ("Unmeasurable" is a bit strong, but I mean that you can only 
get a gross estimation of it.)

You have argued that there exist cases where it is possible to do better (a 
hardware clock, a single processor, a kernel that doesn't get in the way of 
using the hardware clock, no contention with other devices on the bus, 
etc.), and I wouldn't disagree. The problem is that those cases aren't 
realistic, particularly if you are talking about a language-defined package. 
(Even if there is a hardware clock available on a particular target, an 
off-the-shelf compiler isn't going to be able to use it. It can only use the 
facilities of the kernel or OS.)

This shows up when you talk about the inability to reproduce the results. In 
practice, I think you'll find that the values vary a lot from run to run; 
the net effect is that the error is a large percentage of the results for 
many values.

Your discussion of real-time scheduling using this still seems to me to be 
more in the realm of academic exercise than something practical. I'm sure 
that it works in very limited circumstances, but those circumstances are 
getting less and less likely by the year. Techniques that assume a strong 
correspondence between these values and real-time are simply fantasy -- I 
would hope no one depend on these for anything of importance. (With the 
possible exception of an all-Ada kernel, but even then you would be 
*writing* Ada.Execution_Time, not using it.) A weak correspondence (for 
choosing between otherwise similar tasks, for one instance) might make 
sense, but that is about it.

                       Randy.


"Niklas Holsti" <niklas.holsti@tidorum.invalid> wrote in message 
news:8o4k3tFko2U1@mid.individual.net...
> Before I answer Randy's points, below, I will try to summarise my position 
> in this discussion. It seems that my convoluted dialog with Dmitry has not 
> made it clear. I'm sorry that this makes for a longish post.
>
> I am not proposing or asking for new requirements on Ada.Execution_Time in 
> RM D.14. I accept that the accuracy and other qualities of the 
> implementation are (mostly) not specified in the RM, so Randy is right 
> that the implementors can (mostly) just provide an interface to whatever 
> services exist, and Dmitry is also (mostly) right when he says that 
> Ada.Execution_Time can deliver garbage results and still satisfy the RM 
> requirements.
>
> However, I think we all hope that, as Randy said, implementers are going 
> to provide the best implementation that they can. Speaking of a "best" 
> implementation implies that there is some ideal solution, perhaps not 
> practically realizable, against which the quality of an implementation can 
> be judged. Moreover, since the RM defines the language and is the basis on 
> which implementors work, I would expect that the RM tries to describe this 
> ideal solution, perhaps only through informal definitions, rationale, 
> implementation advice, or annotations. This is what I have called the 
> "intent of Ada.Execution_Time" and it includes such questions as the 
> intended meaning of a CPU_Time value and what is meant by "execution time 
> of a task".
>
> My background for this discussion and for understanding Ada.Execution_Time 
> is real-time programming and analysis, and in particular the various forms 
> of schedulability analysis. In this domain the theory and practice depend 
> crucially on the execution times of tasks, usually on the worst-case 
> execution time (WCET) but sometimes on the whole range or distribution of 
> execution times. Moreover, the theory and practice assume that "the 
> execution time of a task" has a physical meaning and a strong relationship 
> to real time.
>
> For example, it is assumed (usually implicitly) that when a task is 
> executing uninterrupted on a processor, the execution time of the task and 
> the real time increase at the same rate -- this is more or less the 
> definition of "execution time". Another (implicitly) assumed property is 
> that if a processor first runs task A for X seconds of execution time, 
> then switches to task B for Y seconds of execution time, the elapsed real 
> time equals X + Y plus some "overhead" time for the task switch. (As a 
> side comment, I admit that some of these assumptions are becoming dubious 
> for complex processors where tasks can have strong interactions, for 
> example through the cache.)
>
> I have assumed, and still mostly believe, that this concept of "execution 
> time of a task" is the ideal or intent behind Ada.Execution_Time, and that 
> approaching this ideal is an implementer's goal.
>
> My participation in this thread started with my objection to Dmitry's 
> assertion that "CPU_Time has no physical meaning". I may have 
> misunderstood Dmitry's thought, leading to a comedy of misunderstandings. 
> Perhaps Dmitry only meant that in the absence of any accuracy 
> requirements, CPU_Time may not have a useful physical meaning in a poor 
> implementation of Ada.Execution_Time. I accept that, but I think that a 
> good implementation should try to give CPU_Time the physical meaning that 
> "execution time" has in the theory and practice of real-time systems, as 
> closely as is practical and desired by the users of the implementation.
>
> My comments in this thread therefore show the properties that I think a 
> good implementation of Ada.Execution_Time should have, and are not 
> proposed as new requirements. At most they could appear as additions to 
> the rationale, advice, or annotations for RM D.14. I measure the 
> "goodness" of an implementation as "usefulness for implementing real-time 
> programs". Others, perhaps Randy or Dmitry, may have other goodness 
> measures.
>
> This thread started by a question about how Ada.Execution_Time is meant to 
> be used. I think it is useful to discuss the properties and uses that can 
> be expected of a good implementation, even if the RM also allows poor 
> implementations.
>
> Randy Brukardt wrote:
>> "Niklas Holsti" <niklas.holsti@tidorum.invalid> wrote in message 
>> news:8o0p0lF94rU1@mid.individual.net...
>>> I'm sure that the proposers of the package Ada.Execution_Time expected 
>>> the implementation to use the facilities of the underlying system. But I 
>>> am also confident that they had in mind some specific uses of the 
>>> package and that these uses require that the values provided by 
>>> Ada.Execution_Time have certain properties that can reasonably be 
>>> expected of "execution time", whether or not these properties are 
>>> expressly written as requirements in the RM.
>>
>> Probably, but quality of implementation is rarely specified in the Ada 
>> Standard. When it is, it generally is in the form of Implementation 
>> Advice (as opposed to hard requirements). The expectation is that 
>> implementers are going to provide the best implementation that they 
>> can -- implementers don't purposely build crippled or useless 
>> implementations. Moreover, that is *more* likely when the Standard is 
>> overspecified, simply because of the need to provide something that meets 
>> the standard.
>
> I agree.
>
>>> You put "time" in quotes, Randy. Don't you agree that there *is* a 
>>> valid, physical concept of "the execution time of a task" that can be 
>>> measured in units of physical time, seconds say? At least for processors 
>>> that only execute one task at a time, and whether or not the system 
>>> provides facilities for measuring this time?
>>
>> I'm honestly not sure. The problem is that while such a concept might 
>> logicially exist, as a practical matter it cannot be measured outside of 
>> the most controlled circumstances.
>
> I don't think that measurement is so difficult or that the circumstances 
> must be so very controlled.
>
> Let's assume a single-processor system and a measurement mechanism like 
> the "Model A" that Dmitry described. That is, we have a HW counter that is 
> driven by a fixed frequency. For simplicity and accuracy, let's assume 
> that the counter is driven by the CPU clock so that the counter changes 
> are synchronized with instruction executions. I think such counters are 
> not uncommon in current computers used in real-time systems, although they 
> may be provided by the board and not the processor. We implement 
> Ada.Execution_Time by making the task-switching routines and the Clock 
> function in Ada.Execution_Time read the value of the counter to keep track 
> of how much the counter increases while the processor is running a given 
> task. The accumulated increase is stored in the TCB of the task when the 
> task is not running.
>
> Randy, why do you think that this mechanism does not measure the execution 
> time of the tasks, or a good approximation of the ideal? There are of 
> course nice questions about exactly when in the task-switching code the 
> counter is read and stored, and what to do with interrupts, but I think 
> these are details that can be dismissed as in RM D.14 (11/2) by 
> considering them implementation defined.
>
> It is true that execution times measured in that way are not exactly 
> repeatable on today's processors, even when the task follows exactly the 
> same execution path in each measurement, because of external perturbations 
> (such as memory access delays due to DRAM refresh) and inter-task 
> interferences (such as cache evictions due to interrupts or preempting 
> tasks). But this non-repeatability is present in the ideal concept, too, 
> and I don't expect Ada.Execution_Time.Clock to give exactly repeatable 
> results. It should show the execution time in the current execution of the 
> task.
>
>> Thus, that might make sense in a bare-board Ada implementation, but not 
>> in any implementation running on top of any OS or kernel.
>
> The task concept is not so Ada-specific. For example, I would call RTEMS a 
> "kernel", and it has a general (not Ada-specific) service for measuring 
> per-task execution times, implemented much as Dmitry's Model A except that 
> the "RTC counter" may be the RTEMS interrupt-driven "clock tick" counter, 
> not a HW counter.
>
> And what is an OS but a kernel with a large set of services, and usually 
> running several unrelated applications / processes, not just several tasks 
> in one application? Task-specific execution times for an OS-based 
> application are probably less repeatable, and less useful, but that does 
> not detract from the principle.
>
>> As such, whether the concept exists is more of an "angels on the head of 
>> a pin" question than anything of practical importance.
>
> It is highly important for all practical uses of real-time scheduling 
> theories and algorithms, since it is their basic assumption. Of course, 
> some real-time programmers are of the opinion that real-time scheduling 
> theories are of no practical importance. I am not one of them :-)
>
>>> If so, then even if Ada.Execution_Time is intended as only a window into 
>>> these facilities, it is still intended to provide measures of the 
>>> physical execution time of tasks, to some practical level of accuracy.
>>
>> The problem is that that "practical level of accuracy" isn't realistic.
>
> I disagree. I think execution-time measurements using Dmitry's Model A are 
> practical and can be sufficiently accurate, especially if they use a 
> hardware counter or RTC.
>
>> Moreover, I've always viewed such facilities as "profiling" ones -- it's 
>> the relative magnitudes of the values that matter, not the absolute 
>> values. In that case, the scale of the values is not particularly 
>> relevant.
>
> When profiling is used merely to identify the CPU hogs or bottlenecks, 
> with the aim of speeding up a program, I agree that the scale is not 
> relevant. Profiling is often used in this way for non-real-time systems. 
> It can be done also for real-time systems, but would not help in the 
> analysis of schedulability if the time-scale is arbitrary.
>
> If profiling is used to measure task execution times for use in 
> schedulability analysis or even crude CPU load computations, the scale 
> must be real time, because the reference values (deadlines, load 
> measurement intervals) are expressed in real time.
>
>>> It has already been said, and not only by me, that Ada.Execution_Time is 
>>> intended (among other things, perhaps) to be used for implementing task 
>>> scheduling algorithms that depend on the accumulated execution time of 
>>> the tasks. This is supported by the Burns and Wellings paper referenced 
>>> above. In such algorithms I believe it is essential that the execution 
>>> times are physical times because they are used in formulae that relate 
>>> (sums of) execution-time spans to spans of real time.
>>
>> That would be a wrong interpretation of a algorithms, I think. (Either 
>> that, or the algorithms themselves are heavily flawed!). The important 
>> property is that all of the execution times have a reasonably 
>> proportional relationship to the actual time spent executing each task 
>> (that hypothetical concept); the absolute values shouldn't matter much
>
> I think you are wrong. The algorithms presented in the Burns and Wellings 
> paper that I referred to implement "execution-time servers" which, as I 
> understand them, are meant to limit the fraction of the CPU power that is 
> given to certain groups of tasks and work as follows in outline. The CPU 
> fraction is defined by an execution-time budget, say B seconds, that the 
> tasks in the group jointly consume. When the budget is exhausted, the 
> tasks in the group are either suspended or demoted to a background 
> priority. The budget is periodically replenished (increased up to B 
> seconds) every R seconds, with B < R for a one-processor system. The goal 
> is thus to let this task group use at most B/R of the CPU time. In other 
> words, that the CPU load fraction from this task group should be no more 
> than B/R.
>
> The B part is measured in execution time (CPU_Time differences as 
> Time_Spans) and the R part in real time. If execution time is not scaled 
> properly, the load fraction B/R is wrong in proprtion, and the CPU time 
> (1-B/R) left for other, perhaps more critical tasks could be too small, 
> causing deadline misses and failures. It is essential that execution time 
> (B) is commensurate with real time (R). The examples in the paper also 
> show this assumption.
>
> As usual for academic papers in real-time scheduling, Burns and Wellings 
> make no explicit assumptions about the meaning of execution time. They do 
> mention measurement inaccuracies, but a systematic difference in scale is 
> not considered.
>
>> (just as the exact priority values are mostly irrelevant to scheduling 
>> decisions).
>
> The case of priority values is entirely different. I don't know of any 
> real-time scheduling methods or analyses in which the quantitative values 
> of priorities are important; only their relative order is important. In 
> contrast, all real-time scheduling methods and analyses that I know of 
> depend on the quantitative, metric, values of task execution times. 
> Perhaps some heuristic scheduling methods like "shortest task first" are 
> exceptions to this rule, but I don't think they are suitable for real-time 
> systems.
>
>> Moreover, when the values are close, one would hope that the algorithms 
>> don't change behavior much.
>
> Yes, I don't think the on-line execution-time dependent scheduling 
> algorithms need very accurate measures of execution time. But if the 
> time-scale is wrong by a factor of 2, say, I'm sure the algorithms will 
> not perform as expected.
>
> Burns and Wellings say that one of the "servers" they describe may have 
> problems with cumulative drift due to measurement errors -- similar to 
> round-off or truncation errors -- and they propose methods to correct 
> that. But they do not discuss scale errors, which should lead to a much 
> larger drift.
>
>> The values would be trouble if they bore no relationship at all to the 
>> "actual time spent executing the task", but it's hard to imagine any 
>> real-world facility in which that was the case.
>
> I agree, but Dmitry claimed the opposite ("CPU_Time has no physical 
> meaning") to which I objected. And indeed it seems that under some 
> conditions the execution times measured with the Windows "quants" 
> mechanism are zero, which would certainly inconvenience scheduling 
> algorithms.
>
>>> The question is how much meaning should be read into ordinary words like 
>>> "time" when used in the RM without a formal definition.
>>>
>>> If the RM were to say that L is the length of a piece of string S, 
>>> measured in meters, and that some parts of S are colored red, some blue, 
>>> and some parts may not be colored at all, surely we could conclude that 
>>> the sum of the lengths in meters of the red, blue, and uncolored parts 
>>> equals L? And that the sum of the lengths of the red and blue parts is 
>>> at most L? And that, since we like colorful things, we hope that the 
>>> length of the uncolored part is small?
>>>
>>> I think the case of summing task execution time spans is analogous.
>>
>> I think you are inventing things.
>
> Possibly so. RM D.14 (11/2) tries to define "the execution time of a task" 
> by using an English phrase "... is the time spent by the system ...". I am 
> trying to understand what this definition might mean, as a description of 
> the ideal or intent in the minds of the authors, who certainly intended 
> the definition to have *some* meaning for the reader.
>
> I strongly suspect that the proposers of D.14 meant "execution time" as 
> understood in the real-time scheduling theory domain, and that they felt 
> it unnecessary to define it or its properties more formally, partly out of 
> habit, as those properties are implicitly assumed in academic papers, 
> partly because any definition would have had to include messy text about 
> measurement errors, and they did not want to specify accuracy 
> requirements.
>
>> There is no such requirement in the standard, and that's good:
>
> I agree and I don't want to add such a requirement.
>
>> I've never seen a real system in which this has been true.
>
> I don't think it will be exactly true in a real system. I continue to 
> think that it will be approximately true in a good implementation of 
> Ada.Execution_Time (modulo the provision on interrupt handlers etc), and 
> that this is necessary if Ada.Execution_Time is to be used as Burns and 
> Wellings propose.
>
>> Even the various profilers I wrote for MS-DOS (the closest system to a 
>> bare machine that will ever be in wide use) never had this property.
>
> I can't comment on that now, but I would be interested to hear what you 
> tried, and what happened.
>
>>> Moreover, on a multi-process systems (an Ada program running under 
>>> Windows or Linux, for example) some of the CPU time is spent on other 
>>> processes, all of which would be "overhead" from the point of view of 
>>> the Ada program. I don't think that the authors of D.14 had such systems 
>>> in mind.
>>
>> I disagree, in the sense that the ARG as a whole certainly considered the 
>> use of this facility in all environments.
>
> Aha. Well, as I said above on the question of Ada vs kernel vs OS, the 
> package should be implementable under and OS like Windows or Linux, too. I 
> don't think D.14 makes any attempt to exclude that, and why should it.
>
>> (I find that it would be very valuable for profiling on Windows, for 
>> instance, even if the results only have a weak relationship to reality).
>
> Yes, if all you want are the relative execution-time consumptions of the 
> tasks in order to find the CPU hogs. And the quant-truncation problem may 
> distort even the relative execution times considerably.
>
> Randy wrote in another post:
> > It's clear that he [Niklas] would never be happy
> > with a Windows implementation of Ada.Execution_Time -- too bad,
> > because it still can be useful.
>
> I probably would not be happy to use Windows at all for a real-time 
> system, so my happiness with Ada.Execution_Time is perhaps moot.
>
> But it is all a question of what accuracy is required and can be provided. 
> If I understand the description of Windows quants correctly, an 
> implementation of Ada.Execution_Time under Windows may have tolerable 
> accuracy if the average span of non-interrupted, non-preempted, and 
> non-suspended execution of task is much larger than a quant, as the 
> truncation of partially used quants then causes a relatively small error.
>
> I don't know if the scheduling methods of Windows would let one make good 
> use the measured execution times. I have no experience of Windows 
> programming on that level, unfortunately.
>
> -- 
> Niklas Holsti
> Tidorum Ltd
> niklas holsti tidorum fi
>       .      @       . 





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

Thread overview: 124+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-12-12  4:19 Ada.Execution_Time BrianG
2010-12-12  5:27 ` Ada.Execution_Time Jeffrey Carter
2010-12-12 16:56 ` Ada.Execution_Time Jeffrey Carter
2010-12-12 21:59   ` Ada.Execution_Time BrianG
2010-12-12 22:08     ` Ada.Execution_Time BrianG
2010-12-13  9:28     ` Ada.Execution_Time Georg Bauhaus
2010-12-13 22:25       ` Ada.Execution_Time Randy Brukardt
2010-12-13 22:42         ` Ada.Execution_Time J-P. Rosen
2010-12-14  3:31         ` Ada.Execution_Time Jeffrey Carter
2010-12-14 15:42           ` Ada.Execution_Time Robert A Duff
2010-12-14 16:17             ` Ada.Execution_Time Jeffrey Carter
2010-12-14 19:10             ` Ada.Execution_Time Warren
2010-12-14 20:36               ` Ada.Execution_Time Dmitry A. Kazakov
2010-12-14 20:48                 ` Ada.Execution_Time Jeffrey Carter
2010-12-14  8:17         ` Ada.Execution_Time Vinzent Hoefler
2010-12-14 15:51           ` Ada.Execution_Time Adam Beneschan
2010-12-14 15:53           ` Ada.Execution_Time Robert A Duff
2010-12-14 17:17             ` Ada.Execution_Time Dmitry A. Kazakov
2010-12-14 17:45               ` Ada.Execution_Time Robert A Duff
2010-12-14 18:23                 ` Ada.Execution_Time Adam Beneschan
2010-12-14 21:02                   ` Ada.Execution_Time Randy Brukardt
2010-12-15 22:52             ` Ada.Execution_Time Keith Thompson
2010-12-15 23:14               ` Ada.Execution_Time Adam Beneschan
2010-12-17  0:44                 ` Ada.Execution_Time Randy Brukardt
2010-12-17 17:54                   ` Ada.Execution_Time Warren
2010-12-20 21:28                   ` Ada.Execution_Time Keith Thompson
2010-12-21  3:23                     ` Ada.Execution_Time Robert A Duff
2010-12-21  8:04                       ` Ada.Execution_Time Dmitry A. Kazakov
2010-12-21 17:19                         ` Ada.Execution_Time Robert A Duff
2010-12-21 17:43                           ` Ada.Execution_Time Dmitry A. Kazakov
2010-12-14 19:43           ` Ada.Execution_Time anon
2010-12-14 20:09             ` Ada.Execution_Time Adam Beneschan
2010-12-15  0:16       ` Ada.Execution_Time BrianG
2010-12-15 19:17         ` Ada.Execution_Time jpwoodruff
2010-12-15 21:42           ` Ada.Execution_Time Pascal Obry
2010-12-16  3:54             ` Ada.Execution_Time jpwoodruff
2010-12-17  7:11               ` Ada.Execution_Time Stephen Leake
2010-12-15 21:40         ` Ada.Execution_Time Simon Wright
2010-12-15 23:40           ` Ada.Execution_Time BrianG
2010-12-15 22:05         ` Ada.Execution_Time Randy Brukardt
2010-12-16  1:14           ` Ada.Execution_Time BrianG
2010-12-16  5:46             ` Ada.Execution_Time Jeffrey Carter
2010-12-16 16:13               ` Ada.Execution_Time BrianG
2010-12-16 11:37             ` Ada.Execution_Time Simon Wright
2010-12-16 17:24               ` Ada.Execution_Time BrianG
2010-12-16 17:45                 ` Ada.Execution_Time Adam Beneschan
2010-12-16 21:13                   ` Ada.Execution_Time Jeffrey Carter
2010-12-17  0:35               ` New AdaIC site (was: Ada.Execution_Time) Randy Brukardt
2010-12-16 13:08             ` Ada.Execution_Time Peter C. Chapin
2010-12-16 17:32               ` Ada.Execution_Time BrianG
2010-12-16 18:17             ` Ada.Execution_Time Jeffrey Carter
2010-12-16  8:45           ` Ada.Execution_Time Dmitry A. Kazakov
2010-12-16 16:49             ` Ada.Execution_Time BrianG
2010-12-16 17:52               ` Ada.Execution_Time Dmitry A. Kazakov
2010-12-17  8:49                 ` Ada.Execution_Time Niklas Holsti
2010-12-17  9:32                   ` Ada.Execution_Time Dmitry A. Kazakov
2010-12-17 11:50                     ` Ada.Execution_Time Niklas Holsti
2010-12-17 13:10                       ` Ada.Execution_Time Dmitry A. Kazakov
2010-12-18 21:20                         ` Ada.Execution_Time Niklas Holsti
2010-12-19  9:57                           ` Ada.Execution_Time Dmitry A. Kazakov
2010-12-25 11:31                             ` Ada.Execution_Time Niklas Holsti
2010-12-26 10:25                               ` Ada.Execution_Time Dmitry A. Kazakov
2010-12-27 12:44                                 ` Ada.Execution_Time Niklas Holsti
2010-12-27 15:28                                   ` Ada.Execution_Time Dmitry A. Kazakov
2010-12-27 20:11                                     ` Ada.Execution_Time Niklas Holsti
2010-12-27 21:34                                       ` Ada.Execution_Time Simon Wright
2010-12-28 10:01                                         ` Ada.Execution_Time Niklas Holsti
2010-12-28 14:17                                           ` Ada.Execution_Time Simon Wright
2010-12-27 21:53                                       ` Ada.Execution_Time Dmitry A. Kazakov
2010-12-28 14:14                                         ` Ada.Execution_Time Simon Wright
2010-12-28 15:08                                           ` Ada.Execution_Time Dmitry A. Kazakov
2010-12-28 16:18                                             ` Ada.Execution_Time Simon Wright
2010-12-28 16:34                                               ` Ada.Execution_Time Dmitry A. Kazakov
2010-12-31  0:40                                             ` Ada.Execution_Time BrianG
2010-12-31  9:09                                               ` Ada.Execution_Time Dmitry A. Kazakov
2010-12-28 14:46                                         ` Ada.Execution_Time Niklas Holsti
2010-12-28 15:42                                           ` Ada.Execution_Time Dmitry A. Kazakov
2010-12-28 16:27                                             ` Ada.Execution_Time (see below)
2010-12-28 16:55                                               ` Ada.Execution_Time Dmitry A. Kazakov
2010-12-28 19:41                                                 ` Ada.Execution_Time (see below)
2010-12-28 20:03                                                   ` Ada.Execution_Time Dmitry A. Kazakov
2010-12-28 22:39                                                     ` Ada.Execution_Time Simon Wright
2010-12-29  9:07                                                       ` Ada.Execution_Time Dmitry A. Kazakov
2010-12-27 17:24                                 ` Ada.Execution_Time Robert A Duff
2010-12-27 22:02                                   ` Ada.Execution_Time Randy Brukardt
2010-12-27 22:43                                     ` Ada.Execution_Time Robert A Duff
2010-12-27 22:11                               ` Ada.Execution_Time Randy Brukardt
2010-12-29 12:48                                 ` Ada.Execution_Time Niklas Holsti
2010-12-29 14:30                                   ` Ada.Execution_Time Dmitry A. Kazakov
2010-12-29 16:19                                     ` Ada.Execution_Time (see below)
2010-12-29 16:51                                       ` Ada.Execution_Time Dmitry A. Kazakov
2010-12-29 19:57                                         ` Ada.Execution_Time (see below)
2010-12-29 21:20                                           ` Ada.Execution_Time Dmitry A. Kazakov
2010-12-30  5:13                                             ` Ada.Execution_Time Randy Brukardt
2010-12-30 13:37                                             ` Ada.Execution_Time Niklas Holsti
2010-12-29 20:32                                     ` Ada.Execution_Time Niklas Holsti
2010-12-29 21:21                                       ` Ada.Execution_Time Dmitry A. Kazakov
2010-12-30 13:34                                         ` Ada.Execution_Time Niklas Holsti
2010-12-30 19:23                                     ` Ada.Execution_Time Niklas Holsti
2010-12-30  5:06                                   ` Ada.Execution_Time Randy Brukardt
2010-12-30 23:49                                     ` Ada.Execution_Time Niklas Holsti
2010-12-31 23:34                                       ` Randy Brukardt [this message]
2011-01-01 13:52                                         ` Ada.Execution_Time Niklas Holsti
2011-01-01 14:42                                           ` Ada.Execution_Time Simon Wright
2011-01-01 16:01                                             ` Ada.Execution_Time Simon Wright
2011-01-01 19:18                                               ` Ada.Execution_Time Niklas Holsti
2011-01-03 21:27                                           ` Ada.Execution_Time Randy Brukardt
2011-01-06 22:55                                             ` Ada.Execution_Time Niklas Holsti
2011-01-07  6:25                                               ` Ada.Execution_Time Randy Brukardt
2011-01-01 15:54                                         ` Ada.Execution_Time Simon Wright
2011-01-03 21:33                                           ` Ada.Execution_Time Randy Brukardt
2011-01-05 15:55                                             ` Ada.Execution_Time Brad Moore
2010-12-17  8:59         ` Ada.Execution_Time anon
2010-12-19  3:07           ` Ada.Execution_Time BrianG
2010-12-19  4:01             ` Ada.Execution_Time Vinzent Hoefler
2010-12-19 11:00               ` Ada.Execution_Time Niklas Holsti
2010-12-21  0:37                 ` Ada.Execution_Time Randy Brukardt
2010-12-21  1:20                   ` Ada.Execution_Time Jeffrey Carter
2010-12-19 12:27               ` Ada.Execution_Time Dmitry A. Kazakov
2010-12-21  0:32               ` Ada.Execution_Time Randy Brukardt
2010-12-19 22:54             ` Ada.Execution_Time anon
2010-12-20  3:14               ` Ada.Execution_Time BrianG
2010-12-22 14:30                 ` Ada.Execution_Time anon
2010-12-22 20:09                   ` Ada.Execution_Time BrianG
replies disabled

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