Benchmark-Perl-Formance
view release on metacpan or search on metacpan
lib/Benchmark/Perl/Formance/Plugin/Shootout/mandelbrot.pm view on Meta::CPAN
use Benchmark ':hireswallclock';
use constant ITER => 50;
use constant LIMITSQR => 2.0 ** 2;
use constant MAXPIXEL => 524288; # Maximum pixel buffer per thread
my ($w, $h);
my $threads;
# Generate pixel data for a single dot
sub dot($$) { ## no critic
my ($Zr, $Zi, $Tr, $Ti) = (0.0,0.0,0.0,0.0);
my $i = ITER;
my $Cr = 2 * $_[0] / $w - 1.5;
my $Ci = 2 * $_[1] / $h - 1.0;
(
$Zi = 2.0 * $Zr * $Zi + $Ci,
$Zr = $Tr - $Ti + $Cr,
$Ti = $Zi * $Zi,
$Tr = $Zr * $Zr
) until ($Tr + $Ti > LIMITSQR || !$i--);
return ($i == -1);
}
# Generate pixel data for range of lines, inclusive
sub lines($$) { ## no critic
map { my $y = $_;
pack 'B*', pack 'C*', map dot($_, $y), 0..$w-1;
} $_[0]..$_[1]
}
sub num_cpus {
open my $fh, '<', '/proc/cpuinfo' or return;
my $cpus;
while (<$fh>) {
$cpus ++ if /^processor[\s]+:/; # 0][]0]; # for emacs cperl-mode indent bug
lib/Benchmark/Perl/Formance/Plugin/Shootout/nbody.pm view on Meta::CPAN
use constant PI => 3.141592653589793;
use constant SOLAR_MASS => (4 * PI * PI);
use constant DAYS_PER_YEAR => 365.24;
use Benchmark ':hireswallclock';
# Globals for arrays... Oh well.
# Almost every iteration is a range, so I keep the last index rather than a count.
my (@xs, @ys, @zs, @vxs, @vys, @vzs, @mass, $last);
sub advance($) ## no critic
{
my ($dt) = @_;
my ($mm, $mm2, $j, $dx, $dy, $dz, $distance, $mag);
# This is faster in the outer loop...
for (0..$last) {
# But not in the inner loop. Strange.
for ($j = $_ + 1; $j < $last + 1; $j++) {
$dx = $xs[$_] - $xs[$j];
$dy = $ys[$_] - $ys[$j];
( run in 0.600 second using v1.01-cache-2.11-cpan-65fba6d93b7 )