Did you mean to use $z in the say output of the nqp and perl versions of
the microbenchmark, or did you mean to run it twice?


On Sat, Feb 2, 2013 at 10:43 AM, Nicholas Clark <n...@ccl4.org> wrote:

> This is surprising, interesting and pleasing...
>
> There's some example NQP code to time calculating Fibonacci sequences.
>
> I've tweaked it a tiny bit to take an optional count on the command line.
> Unfortunately the NQP JVM prototype doesn't yet set @ARGS, so this isn't
> that
> useful. Anyway, the code is:
>
>
> $ cat ~/Perl/rakudo/nqp/examples/fib.nqp
> #! nqp
>
> sub fib($n) {
>     $n < 2 ?? $n !! fib($n-1) + fib($n - 2);
> }
>
> my $N := @ARGS > 1 ?? @ARGS[1] !! 29;
>
> my $t0 := nqp::time_n();
> my $z  := fib($N);
> my $t1 := nqp::time_n();
>
> nqp::say("fib($N) = " ~ fib($N));
> nqp::say("time    = " ~ ($t1-$t0));
>
>
> Running with NQP (optimised build):
>
> $ nqp ~/Perl/rakudo/nqp/examples/fib.nqp
> fib(29) = 514229
> time    = 3.15967702865601
>
> Running with the NQP JVM prototype:
>
> $ nqp nqp-jvm-cc.nqp ~/Perl/rakudo/nqp/examples/fib.nqp
> fib(29) = 514229
> time    = 0.42100000381469727
>
>
> That's about 8 times faster. (Even including all the compiling, right now
> it's actually still faster. About 2.5 times faster)
>
>
> And the equivalent Perl 5 code:
>
> $ cat ~/test/fib.pl
> #! perl
>
> use Time::HiRes 'time';
>
> sub fib {
>     my $n = shift;
>     $n < 2 ? $n : fib($n-1) + fib($n - 2);
> }
>
> my $N = @ARGV > 1 ? $ARGV[0] : 29;
>
> my $t0 = time;
> my $z  = fib($N);
> my $t1 = time;
>
> print "fib($N) = " . fib($N) . "\n";
> print "time    = " . ($t1-$t0) . "\n";
>
>
> $ ~/Sandpit/5162/bin/perl5.16.2 ~/test/fib.pl
> fib(29) = 514229
> time    = 0.544455051422119
>
>
> So the NQP JVM prototype is about 1.5 faster at running that code than Perl
> 5. That's without any sort of tuning of its code generator.
>
> That's quite impressive.
>
> Well done Jonathan. Please don't stop :-)
>
> Nicholas Clark
>

Reply via email to