next up previous contents index errataps
Sig: Configuración Sup: Cronometrado de un programa Ant: Cronometrado de un programa Err: Si hallas una errata ...

El programa

#!/usr/bin/perl -w
use strict;

use constant { 
  REAL  => 0,
  USER  => 1,
  SYSTEM=> 2,
  CHILDREN_USER => 3,
  CHILDREN_SYSTEM  => 4,
  ITERS => 5,
  CPU => 5
};

use Benchmark ':hireswallclock';

my %config;

&open_config_file;
my $test_file = $config{TEST_FILE} || "test.txt";
my $command = $config{PROGRAM} || "sort";
my $first = $config{FIRST}; 
my $last = $config{LAST};
my $grain = $config{GRAIN}; 
my $times = $config{TIMES}; 
my $title = $config{TITLE}; 
my $inc = $config{INC};
my $output_device = $config{OUTPUT_DEVICE};
my $output_file = $config{OUTPUT_FILE};
my $columns = $config{COLUMNS} || 1;
#my $input_generation = $config{GENERATE_INPUT};
my $support_file = $config{SUPPORT_FILE};   

require($support_file) if defined($support_file);
my $output;
my $result;

$command = "$command $test_file > $output_device";
print "$title\twall\tcusr\tcsys\tCPU\n";
for(my $size = $first; $size <= $last; $size += $inc) {
  my $t = $times;
  until ($t-- == 0) {
    &generate_input($test_file, $size, $t, $columns);
    $result = timeit($grain, sub { system($command) });

    process_output($size, $result);
  }
}

sub process_output {
  my ($size, $result) = @_;

  my $iterations = $result->[ITERS] or die "not 6 numbers in benchmark object\n";
  my @measures = map {$_/ $iterations} @$result;
  local $";
  $" = "\t";
  print_output($size);
  $measures[CPU] = $measures[CHILDREN_USER]+$measures[CHILDREN_SYSTEM];
  splice @measures, USER, 2;
  my $format = "%5.2f\t" x scalar(@measures);
  printf "$format\n",@measures;
}

sub open_config_file {

  open FILE, ".benchrc" or die "Can't open config file";
  while (<FILE>) {
    if (/\s*(\w+)\s*=\s*"((\\.|[^"])*)"/) {
      $config{$1} = $2;
    }
    elsif (/\s*(\w+)\s*=\s*(\d+)/) {
      $config{$1} = $2;
    }
  }
}


next up previous contents index errataps
Sig: Configuración Sup: Cronometrado de un programa Ant: Cronometrado de un programa Err: Si hallas una errata ...
Casiano Rodríguez León
2005-04-19