www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - mysterious performance gain

reply "Archibald" <archibald fake-mail.net> writes:
Hello,
So I have this big, performance critical function that takes 
about 9 seconds to execute. If I add :

double[] direct = new double[2];

... at the beggining of the function, with no further reference 
to this array, suddenly it takes only 8 seconds.

Any rational explaination to this? ( Seems unrelated to garbage 
collection )
Jul 18 2014
next sibling parent "bearophile" <bearophileHUGS lycos.com> writes:
Archibald:

 Any rational explaination to this? ( Seems unrelated to garbage 
 collection )
Not nearly enough info to answer. It looks fishy. Bye, bearophile
Jul 18 2014
prev sibling next sibling parent reply "John Colvin" <john.loughran.colvin gmail.com> writes:
On Friday, 18 July 2014 at 13:21:09 UTC, Archibald wrote:
 Hello,
 So I have this big, performance critical function that takes 
 about 9 seconds to execute. If I add :

 double[] direct = new double[2];

 ... at the beggining of the function, with no further reference 
 to this array, suddenly it takes only 8 seconds.

 Any rational explaination to this? ( Seems unrelated to garbage 
 collection )
Which compiler? Which compiler flags? how are you benchmarking it?
Jul 18 2014
parent "Archibald" <archibald fake-mail.net> writes:
On Friday, 18 July 2014 at 15:55:29 UTC, John Colvin wrote:
 On Friday, 18 July 2014 at 13:21:09 UTC, Archibald wrote:
 Hello,
 So I have this big, performance critical function that takes 
 about 9 seconds to execute. If I add :

 double[] direct = new double[2];

 ... at the beggining of the function, with no further 
 reference to this array, suddenly it takes only 8 seconds.

 Any rational explaination to this? ( Seems unrelated to 
 garbage collection )
Which compiler? Which compiler flags? how are you benchmarking it?
dmd 2.065 , -O and using std.datetime.StopWatch before and after function call. I tried to narrow down the "problem" but doesn't look easy. I guess never mind that.
Jul 18 2014
prev sibling next sibling parent =?UTF-8?B?QWxpIMOHZWhyZWxp?= <acehreli yahoo.com> writes:
On 07/18/2014 06:21 AM, Archibald wrote:

 So I have this big, performance critical function that takes about 9
 seconds to execute. If I add :

 double[] direct = new double[2];

 ... at the beggining of the function, with no further reference to this
 array, suddenly it takes only 8 seconds.
Here is a wild guess: There is some undefined behavior because you are accessing locations on the stack that don't belong to you. When you introduce 'direct', it shifts the contents of the stack and the bytes that are used unintentionally are now different, which change the way the loop behaves. Ali
Jul 18 2014
prev sibling parent "Wayne Anderson" <wanderon comcast.net> writes:
On Friday, 18 July 2014 at 13:21:09 UTC, Archibald wrote:
 Hello,
 So I have this big, performance critical function that takes 
 about 9 seconds to execute. If I add :

 double[] direct = new double[2];

 ... at the beggining of the function, with no further reference 
 to this array, suddenly it takes only 8 seconds.

 Any rational explaination to this? ( Seems unrelated to garbage 
 collection )
Perhaps some function your critical code calls might require memory to be aligned to a particular offset (say 16 byte). What made you think of adding the unused array?
Jul 18 2014