Thanks Peter :) I will make these computations tomorrow at the lab and see what the confidence interval looks like.
Steven. Le 2017-06-14 20:03, PBKResearch a écrit : > Steven > > The question you need to consider is how much the results vary from one > repetition to another. If they are very variable, then the average will still > be variable. In the case of your 100 repetitions, for instance, you can work > out a confidence interval for the mean quite easily. Find the mean and > standard deviation of the 100 repetitions; the standard error of the mean is > the sample standard deviation divided by the square root of the number of > values averaged (i.e. 10 in this case); the approximate 95% confidence > interval is the mean +/- twice the standard error of the mean. (This makes a > lot of simplifying assumptions, but should be sufficient for your purposes.) > > If, as I suspect, the width of the confidence interval is quite large in > relation to the mean, this means that you cannot consistently measure the > speed of operations like this. You could try greatly increasing the number of > repetitions, but the square root law is working against you. 10,000 > repetitions would give you an interval about 10% of the width of 100 > repetitions, 1,000,000 repetitions would reduce it to 1%. > > Hope this is helpful > > Peter Kenny > > FROM: Pharo-users [mailto:pharo-users-boun...@lists.pharo.org] ON BEHALF OF > Steven Costiou > SENT: 14 June 2017 18:14 > TO: Pharo users users <pharo-users@lists.pharo.org> > SUBJECT: [Pharo-users] About how to benchmark the lookup speed... > > Hi, > > i'm having trouble doing benchmarks in Pharo, at least i don't understand the > results (maybe i'm missing something). I want to compare anonymous subclasses > lookup speed with standard pharo classes lookup speed. > > I have a method m and a method m2 that execute the following code: ^ 100 > printString. I have implemented these 2 methods in one class then in one > anonymous subclass. I thought that measuring the execution speed of the same > code in these two different cases would give me different times if the lookup > speed was not the same. > > So I did the following: > > |o results repetitions | > > o := theClass new. > > results := OrderedCollection new. > > repetitions := 100. > > repetitions timesRepeat:[ results add: [1000000 timesRepeat:[o m]] > timeToRun]. > > I do the same for m2, and then i compute an average of all the values > measured in results. > > What i don't understand is that, for example, for an average on 100 > measurements, m is 1% slower and m2 is 2% faster in the Pharo class case than > with anonymous subclasses. But for 1 000 measurements, m is 11% faster but m2 > is 3% slower. Results continue to vary as i change the number of > measurements, but they do not increase with it (seems not to be linear). > > I don't have enough knowledge about how to benchmark code, or what will make > a difference in Pharo. For now the only explanations i have is that maybe the > results are too slow to be significant and then they can vary, or i have done > something wrong in how i measure it. > > How would you measure the lookup speed of a method ? > > Steven.