Karim Belabas on Sun, 01 May 2022 16:43:59 +0200


[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]

Re: question about speed


* Thomas Kellar [2022-05-01 16:18]:
> I have code that looks like the below running billions
> of times and the top one is a little faster than the bottom
> one. This is not intuitive to me.  Is there any explanation?
> 
> if (a == b,
>     return(0);
> );
> return(1);
> 
> why is the above faster:
> and the below slower:
> 
> if (a == b,
>     return(0);
>    ,
>    return(1);
> );
> 
> Is that always the case?

I had the same explanation as Bill. To check my intuition, I ran the following
quick test:

  f() = if (a==b,return(0),return(1));
  g() = if (a==b,return(0));return(1);
  h() = return(a!=b)   \\ or (better) 'a != b'; here, timings are the same
  N = 3*10^6;

* a = b = 0:      \\ a = b always

  ? for(i=1,N,f())
  time = 474 ms.
  ? for(i=1,N,g())
  time = 950 ms.
  ? for(i=1,N,h())
  time = 327 ms.

* a = 1; b = 0:    \\ a != b always

  ? for(i=1,N,f())
  time = 529 ms.
  ? for(i=1,N,g())
  time = 436 ms.
  ? for(i=1,N,h())
  time = 323 ms.

* a = random(2); b = random(2) :  \\ a = b with probability = 1/2

  ? for(i=1,N,a=random(2);b=random(2))  \\ basetime
  time = 1,007 ms.

  ? for(i=1,N,a=random(2);b=random(2);f())
  time = 543 ms. + basetime
  ? for(i=1,N,a=random(2);b=random(2);g())
  time = 721 ms. + basetime
  ? for(i=1,N,a=random(2);b=random(2);h())
  time = 328 ms. + basetime

Cheers,

    K.B.
--
Karim Belabas, IMB (UMR 5251)  Tel: (+33) (0)5 40 00 26 17
Universite de Bordeaux         Fax: (+33) (0)5 40 00 21 23
351, cours de la Liberation    http://www.math.u-bordeaux.fr/~kbelabas/
F-33405 Talence (France)       http://pari.math.u-bordeaux.fr/  [PARI/GP]
`