---- [ Formula: hsin ] ------------------------------------ perl - distance from BWI to LAX: 2324.06319758555 miles xs - distance from BWI to LAX: 2324.06319758555 miles gis::fast - distance from BWI to LAX: 2324.06319758555 miles Benchmark: running gis::fast, perl, xs for at least 1 CPU seconds... gis::fast: 1 wallclock secs ( 1.05 usr + 0.01 sys = 1.06 CPU) @ 23866.04/s (n=25298) perl: 1 wallclock secs ( 1.05 usr + 0.00 sys = 1.05 CPU) @ 78019.05/s (n=81920) xs: 2 wallclock secs ( 1.12 usr + -0.01 sys = 1.11 CPU) @ 1245236.94/s (n=1382213) Rate gis::fast perl xs gis::fast 23866/s -- -69% -98% perl 78019/s 227% -- -94% xs 1245237/s 5118% 1496% -- ---- [ Formula: polar ] ------------------------------------ perl - distance from BWI to LAX: 2652.59252292455 miles xs - distance from BWI to LAX: 2652.59252292455 miles gis::fast - distance from BWI to LAX: 2652.59252292455 miles Benchmark: running gis::fast, perl, xs for at least 1 CPU seconds... gis::fast: 1 wallclock secs ( 1.08 usr + 0.00 sys = 1.08 CPU) @ 18962.96/s (n=20480) perl: 1 wallclock secs ( 1.07 usr + 0.00 sys = 1.07 CPU) @ 80736.45/s (n=86388) xs: 2 wallclock secs ( 1.14 usr + 0.00 sys = 1.14 CPU) @ 1509051.75/s (n=1720319) Rate gis::fast perl xs gis::fast 18963/s -- -77% -99% perl 80736/s 326% -- -95% xs 1509052/s 7858% 1769% -- ---- [ Formula: cos ] ------------------------------------ perl - distance from BWI to LAX: 2324.06319758555 miles xs - distance from BWI to LAX: 2324.06319758555 miles gis::fast - distance from BWI to LAX: 2324.06319758555 miles Benchmark: running gis::fast, perl, xs for at least 1 CPU seconds... gis::fast: 1 wallclock secs ( 1.07 usr + 0.00 sys = 1.07 CPU) @ 23642.99/s (n=25298) perl: 1 wallclock secs ( 1.06 usr + 0.00 sys = 1.06 CPU) @ 77282.08/s (n=81919) xs: 0 wallclock secs ( 1.00 usr + 0.00 sys = 1.00 CPU) @ 1310719.00/s (n=1310719) Rate gis::fast perl xs gis::fast 23643/s -- -69% -98% perl 77282/s 227% -- -94% xs 1310719/s 5444% 1596% -- ---- [ Formula: gcd ] ------------------------------------ perl - distance from BWI to LAX: 0 miles xs - distance from BWI to LAX: 2324.06319758555 miles gis::fast - distance from BWI to LAX: 0 miles Benchmark: running gis::fast, perl, xs for at least 1 CPU seconds... gis::fast: 1 wallclock secs ( 1.07 usr + 0.00 sys = 1.07 CPU) @ 18270.09/s (n=19549) perl: 2 wallclock secs ( 1.07 usr + 0.00 sys = 1.07 CPU) @ 73080.37/s (n=78196) xs: 1 wallclock secs ( 1.05 usr + 0.01 sys = 1.06 CPU) @ 1298354.72/s (n=1376256) Rate gis::fast perl xs gis::fast 18270/s -- -75% -99% perl 73080/s 300% -- -94% xs 1298355/s 7006% 1677% -- ---- [ Formula: mt ] ------------------------------------ perl - distance from BWI to LAX: 2324.06319758555 miles xs - distance from BWI to LAX: 2324.06319758555 miles gis::fast - distance from BWI to LAX: 2324.06319758555 miles Benchmark: running gis::fast, perl, xs for at least 1 CPU seconds... gis::fast: 1 wallclock secs ( 1.12 usr + 0.01 sys = 1.13 CPU) @ 17300.00/s (n=19549) perl: 1 wallclock secs ( 1.06 usr + 0.00 sys = 1.06 CPU) @ 67621.70/s (n=71679) xs: 2 wallclock secs ( 1.07 usr + 0.01 sys = 1.08 CPU) @ 1274311.11/s (n=1376256) Rate gis::fast perl xs gis::fast 17300/s -- -74% -99% perl 67622/s 291% -- -95% xs 1274311/s 7266% 1784% -- ---- [ Formula: tv ] ------------------------------------ perl - distance from BWI to LAX: 2328.95218785171 miles xs - distance from BWI to LAX: 2324.51147636132 miles gis::fast - distance from BWI to LAX: 2328.95218785171 miles Benchmark: running gis::fast, perl, xs for at least 1 CPU seconds... gis::fast: 2 wallclock secs ( 1.09 usr + 0.01 sys = 1.10 CPU) @ 21720.91/s (n=23893) perl: 1 wallclock secs ( 1.09 usr + 0.00 sys = 1.09 CPU) @ 16439.45/s (n=17919) xs: 2 wallclock secs ( 1.05 usr + 0.00 sys = 1.05 CPU) @ 771011.43/s (n=809562) Rate perl gis::fast xs perl 16439/s -- -24% -98% gis::fast 21721/s 32% -- -97% xs 771011/s 4590% 3450% -- #### #!/usr/bin/env perl use strict; use warnings; use Benchmark qw(cmpthese timethese); use Geo::Distance::XS; use GIS::Distance; # When benchmarking, need to have it call import/unimport before the # code is executed. my $orig_timethis_sub = \&Benchmark::timethis; { no warnings 'redefine'; *Benchmark::timethis = sub { my $sub = ('perl' eq $_[2] ? 'un' : '') . 'import'; Geo::Distance::XS->$sub(); $orig_timethis_sub->(@_); }; } # Lon, Lat my @coord = (-76.668851, 39.179689, -118.408618, 33.943532); my $geo = Geo::Distance->new; my $gis = GIS::Distance->new; my %gis_formula = ( hsin => 'Haversine', polar => 'Polar', cos => 'Cosine', gcd => 'GreatCircle', mt => 'MathTrig', tv => 'Vincenty', ); sub geo { my $d = $geo->distance(mile => @coord); } sub gis { my $d = $gis->distance(@coord[ 1, 0, 3, 2 ]); return $d->mile; } for my $formula (qw(hsin polar cos gcd mt tv)) { print "---- [ Formula: $formula ] ------------------------------------\n"; $geo->formula($formula); $gis->formula($gis_formula{$formula}); Geo::Distance::XS->unimport; printf "perl - distance from BWI to LAX: %s miles\n", geo(); Geo::Distance::XS->import; printf "xs - distance from BWI to LAX: %s miles\n", geo(); printf "gis::fast - distance from BWI to LAX: %s miles\n", gis(); print "\n"; my $benchmarks = timethese - 1, { perl => \&geo, xs => \&geo, 'gis::fast' => \&gis, }; cmpthese $benchmarks; print "\n"; }