#!/usr/bin/env perl use strict; use warnings; use Benchmark 'cmpthese'; for my $arrsize (1e5, 1e6, 1e7) { print "Source array has $arrsize elements\n"; my @x; push @x, rand for 1..$arrsize; cmpthese (1e1, { BUK => sub { my @y; $y[ $_-1 ] = $x[ $_-1 ] - $x[ $_ ] for 1 .. $#x; }, ike1 => sub { my @y; $y[ $_ ] = $x[ $_ ] - $x[ $_+1 ] for 0 .. $#x-1; }, ike2 => sub { my @y = @x; $y[ $_ ] -= $y[ $_+1 ] for 0 .. $#y-1; pop @y; }, while => sub { my @y; my $i = $#x; $y[ $i ] = $x[ $i ] + $x[ --$i ] while $i; }, }); print '-' x 80 . "\n"; } #### Source array has 100000 elements (warning: too few iterations for a reliable count) (warning: too few iterations for a reliable count) (warning: too few iterations for a reliable count) (warning: too few iterations for a reliable count) Rate BUK ike1 while ike2 BUK 32.3/s -- -19% -32% -32% ike1 40.0/s 24% -- -16% -16% while 47.6/s 48% 19% -- -0% ike2 47.6/s 48% 19% 0% -- -------------------------------------------------------------------------------- Source array has 1000000 elements Rate BUK ike1 ike2 while BUK 2.79/s -- -30% -39% -42% ike1 4.00/s 43% -- -12% -16% ike2 4.57/s 63% 14% -- -5% while 4.78/s 71% 20% 5% -- -------------------------------------------------------------------------------- Source array has 10000000 elements s/iter BUK ike1 ike2 while BUK 3.06 -- -18% -28% -31% ike1 2.49 23% -- -11% -16% ike2 2.21 38% 13% -- -5% while 2.10 46% 19% 5% -- -------------------------------------------------------------------------------- #### #!/usr/bin/env perl use strict; use warnings; use Benchmark 'cmpthese'; my @source; for my $arrsize (1e6, 1e7, 1e8) { print "Source array has $arrsize elements\n"; my @source; push @source, rand for 1..$arrsize; cmpthese (1e8, { 'BUK' => ' my @b; $b[ $_-1 ] = $a[ $_-1 ] - $a[ $_ ] for 1 .. $#a; ', 'ike1' => ' my @b; $b[ $_ ] = $a[ $_ ] - $a[ $_+1 ] for 0 .. $#a-1; ', 'ike2' => ' my @b = @a; $b[ $_ ] -= $b[ $_+1 ] for 0 .. $#b-1; pop @b; ' }); print '-' x 80 . "\n"; } #### Source array has 1000000 elements Rate ike2 BUK ike1 ike2 2347418/s -- -25% -27% BUK 3126954/s 33% -- -3% ike1 3207184/s 37% 3% -- -------------------------------------------------------------------------------- Source array has 10000000 elements Rate ike2 BUK ike1 ike2 2226180/s -- -28% -31% BUK 3079766/s 38% -- -4% ike1 3204101/s 44% 4% -- -------------------------------------------------------------------------------- Source array has 100000000 elements Rate ike2 ike1 BUK ike2 1886792/s -- -28% -30% ike1 2612330/s 38% -- -3% BUK 2705628/s 43% 4% -- -------------------------------------------------------------------------------- #### #!/usr/bin/env perl use strict; use warnings; use Benchmark 'cmpthese'; for my $arrsize (1e4, 1e6, 1e8) { print "Source array has $arrsize elements\n"; my @x; push @x, rand for 1..$arrsize; cmpthese (1e7, { 'BUK' => ' my @y; $y[ $_-1 ] = $x[ $_-1 ] - $x[ $_ ] for 1 .. $#x; ', 'ike1' => ' my @y; $y[ $_ ] = $x[ $_ ] - $x[ $_+1 ] for 0 .. $#x-1; ', 'ike2' => ' my @y = @x; $y[ $_ ] -= $y[ $_+1 ] for 0 .. $#y-1; pop @y; ' }); print '-' x 80 . "\n"; } #### Source array has 10000 elements Rate ike2 BUK ike1 ike2 2309469/s -- -24% -26% BUK 3030303/s 31% -- -3% ike1 3134796/s 36% 3% -- -------------------------------------------------------------------------------- Source array has 1000000 elements Rate ike2 BUK ike1 ike2 2267574/s -- -28% -30% BUK 3164557/s 40% -- -2% ike1 3236246/s 43% 2% -- -------------------------------------------------------------------------------- Source array has 100000000 elements Rate ike2 BUK ike1 ike2 2277904/s -- -23% -28% BUK 2976190/s 31% -- -7% ike1 3184713/s 40% 7% -- --------------------------------------------------------------------------------