Skip to content

Commit

Permalink
More scaled time work in analyze: compare work rates across all compi…
Browse files Browse the repository at this point in the history
…lers and scales for each test
  • Loading branch information
japhb committed May 14, 2013
1 parent 7fb98e8 commit 71e806d
Showing 1 changed file with 25 additions and 14 deletions.
39 changes: 25 additions & 14 deletions analyze
Expand Up @@ -73,7 +73,7 @@ sub analyze_timings_files {
my $data = shift;

for my $test (@{$data->{times}}) {
$test->{compare} = compare_times($test->{$time_type});
$test->{compare} = compare_scaled_times($test->{$time_type});
}

$opt->{formatter}->($data, $opt, $out_fh);
Expand Down Expand Up @@ -179,23 +179,34 @@ sub load_timing_file {
return $decoder->decode($json);
}

sub compare_times {
my $times = shift;
my %relative;

my @sorted = sort { $times->{$a} <=> $times->{$b} }
grep { defined $times->{$_} } keys %$times;

sub compare_scaled_times {
my $times = shift;
my $min_time = 1e-4;
my $shortest = $times->{$sorted[0] || ''} || $min_time;
$shortest = $min_time unless $shortest > $min_time;
my $max_rate = 0;

my %times_by_scale;
my %rates_by_scale;
while (my ($perl, $scale_times) = each %$times) {
while (my ($scale, $time) = each %$scale_times) {
next unless defined $time;
my $bounded = $times_by_scale{$scale}{$perl} = max($time, $min_time);
my $rate = $rates_by_scale{$scale}{$perl} = $scale / $bounded;
$max_rate = $rate if $max_rate < $rate;
}
}

for my $perl (@sorted) {
$relative{$perl} = $times->{$perl} / $shortest;
$relative{$perl} = 1 unless $relative{$perl} > 1;
my %relative_rates;
while (my ($scale, $perl_rates) = each %rates_by_scale) {
while (my ($perl, $rate) = each %$perl_rates) {
$relative_rates{$scale}{$perl} = $rate / $max_rate;
}
}

return \%relative;
return {
times_by_scale => \%times_by_scale,
rates_by_scale => \%rates_by_scale,
relative_rates => \%relative_rates,
};
}

sub summarize_results_json {
Expand Down

0 comments on commit 71e806d

Please sign in to comment.