HackaMol
view release on metacpan or search on metacpan
examples/Benchmarks/MVR.pl view on Meta::CPAN
#!/usr/bin/env perl
use Modern::Perl;
use Math::Vector::Real;
use Math::VectorReal;
use Time::HiRes qw(time);
use Benchmark qw(cmpthese);
my $v1aa = V( 1.1, 2.0, 3.1 );
my $v2aa = V( 2.1, 3.0, 1.1 );
my $dvaa = $v2aa - $v1aa;
my $distaa = sqrt( $dvaa * $dvaa );
my $v1bb = V( 1.1, 2.0, 3.1 );
my $v2bb = V( 2.1, 3.0, 1.1 );
my $distbb = $v1bb->dist($v2bb);
say "$distaa $distbb";
# NO XS
# Rate MVR DEF
#MVR 1811594/s -- -39%
#DEF 2958580/s 63% --
# WITH XS
# Rate MVR DEF
#MVR 2415459/s -- -16%
#DEF 2890173/s 20% --
#
cmpthese(
2500000,
{
'VectorReal' => sub { my $v = vector( 1.1, 2.0, 3.1 ) },
'MVR' => sub { my $v = V( 1.1, 2.0, 3.1 ) },
'DEF' => sub { my $v = [ 1.1, 2.0, 3.1 ] },
}
);
cmpthese(
500000,
{
'MVR' => sub {
my $v1 = V( 1.1, 2.0, 3.1 );
my $v2 = V( 2.1, 3.0, 1.1 );
my $dot = $v1 * $v2;
},
'DEF' => sub {
my $v1 = [ 1.1, 2.0, 3.1 ];
my $v2 = [ 2.1, 3.0, 1.1 ];
my $dot = 0;
$dot += $v1->[$_] * $v2->[$_] foreach 0 .. $#{$v1};
},
}
);
cmpthese(
500000,
{
'MVR dot dist' => sub {
my $v1 = V( 1.1, 2.0, 3.1 );
my $v2 = V( 2.1, 3.0, 1.1 );
my $dv = $v2 - $v1;
my $dist = sqrt( $dv * $dv );
( run in 0.789 second using v1.01-cache-2.11-cpan-75ffa21a3d4 )