I'm really surprised by the results :)
I'll try to find time for bigint on next week and play with it a bit.

Thanks. Dmitry.


On Wed, Jan 7, 2015 at 2:54 AM, Andrea Faulds <a...@ajf.me> wrote:

> Hey Dmitry,
>
> > On 23 Oct 2014, at 16:22, Dmitry Stogov <dmi...@zend.com> wrote:
> >
> >> I’ve so far been scared to touch the asm… but actually, I don’t think it
> >> could be *that* hard. It’s not doing something especially complex. The
> >> bigint API looks fairly stable now and I’m unlikely to change it much
> >> further, so there’s little worry about having to change the asm a second
> >> time. The main problem with asm, I suppose, is testing it. I do have a
> >> 32-bit Ubuntu VM set up, but I’d also need to set up Windows VMs, and
> >> possibly others (don’t we have PowerPC in the source just now?).
> >>
> >
> > change asm for 32-bit Linux and add TODO marks for others. I don't test
> PHP
> > on PPC as well.
>
> After procrastinating about this for a long time, I finally went and
> updated the overflow checks today and ran bench.php.
>
> I still haven’t touched the inline asm, I’ve just removed it, since clang
> and GCC (only in GCC 5.0, sadly) have checked arithmetic intrinsics. If
> someone wants to, they can rewrite the inline asm for compilers that have
> no overflow-checking intrinsics, but this is good enough for now, at least
> for the purposes of performance checking on my machine. I’m using clang, by
> the way. If you want to replicate these results, you’ll probably also need
> it, since GCC 5.0 isn’t out yet, unfortunately.
>
> I compiled the bigint-libtommath branch (theoretically this was just a
> branch, but actually all the new changes have gone there, I’ll merge it
> into the bigint branch once LibTomMath port is done), and the current
> master branch.
>
> For bigint-libtommath, I used ./configure --enable-debug --enable-phpdbg
> —-disable-all —-enable-bigint-gmp
>
> Because of the —-enable-bigint-gmp flag, it’s using the GMP backend, not
> the LibTomMath one. I’m doing this since there’s still one or two small
> things I haven’t finished implementing for LibTomMath, e.g. the binary
> bitwise ops have the wrong behaviour just now.
>
> For master, I used ./configure --enable-debug --enable-phpdbg —-disable-all
>
> Then, I ran bench.php four times, and each time I ran it first on
> ./php-bigint-gmp, then on ./php-bigint-master.
>
> On each run, the bigint branch turned out faster, as well as overall:
>
> bigint  master
> 6.593   6.659
> 6.424   6.661
> 6.414   6.588
> 6.381   6.673
> AVERAGE
> 6.453   6.64525
> DIFFERENCE
> -0.19225        0.19225
> RATIO
> 0.971069561     1.0297923446
>
> So master is 2.9% slower! Full output here:
> https://gist.github.com/TazeTSchnitzel/759c1513b442571f5e26
>
> I can’t actually explain why bigints would be faster. It might just be
> because I got rid of fast_increment_function in favour of just checking of
> op1 == ZEND_LONG_MAX in zend_vm_execute.h, ditto for
> fast_decrement_function. Maybe using overflow intrinsics is faster than
> inline asm. Maybe it’s something completely different. I honestly don’t
> know.
>
> The result surprised me as I expect bigints would be slower, so I redid
> it. Again, bigints came out on top:
>
> bigint  master
> 6.55    6.779
> 6.353   6.738
> 6.326   6.674
> 6.144   6.177
> AVERAGE
> 6.34325 6.592
> DIFFERENCE
> -0.24875        0.24875
> RATIO
> 0.9622648665    1.0392149135
>
> This time master was around 3.9% slower. Full log here:
> https://gist.github.com/TazeTSchnitzel/59c190b86c9dd5b20570
>
> If we combine the two runs:
>
> bigint  master
> 6.593   6.659
> 6.424   6.661
> 6.414   6.588
> 6.381   6.673
> 6.55    6.779
> 6.353   6.738
> 6.326   6.674
> 6.144   6.177
> AVERAGE
> 6.398125        6.618625
> DIFFERENCE
> -0.2205 0.2205
> RATIO
> 0.9666849232    1.0344632216
>
> master’s 3.4% slower.
>
> Just to check I named the files correctly:
>
> oa-res-26-240:php-src ajf$ ./php-master -r 'var_dump(PHP_INT_MAX * 2);'
> float(1.844674407371E+19)
> oa-res-26-240:php-src ajf$ ./php-bigint-gmp -r 'var_dump(PHP_INT_MAX * 2);'
> int(18446744073709551614)
>
> Yes, it’s definitely the bigint branch.
>
> So, at least by these preliminary results, the bigint branch would appear
> to be faster than master. This is merely bench.php, but it’s still a good
> sign. :)
>
> Thanks!
> --
> Andrea Faulds
> http://ajf.me/
>
>
>
>
>

Reply via email to