+2008-11-09 Akim Demaille <demaille@gostai.com>
+
+ bench.pl -d, --directive.
+ * etc/bench.pl.in (@directive): New.
+ (&bench_grammar): Use it.
+ (&bench_list_grammar): New, to provide access to the "variant"
+ grammar.
+ Use it.
+ (getopts): Support -d, --directive.
+
2008-11-09 Akim Demaille <demaille@gostai.com>
Use inline for small operations.
Flags to pass to the C or C++ compiler. Defaults to -O2.
+=item B<-d>, B<--directive>=I<directives>
+
+Add a set of Bison directives to bench against each other.
+
=item B<-h>, B<--help>
Display this message and exit succesfully. The more verbose, the more
Compiler flags (C or C++).
+=item C<@directive>
+
+A list of directive sets to measure against each other.
+
=item C<$iterations>
The number of times the parser is run for a bench.
my $cc = $ENV{'CC'} || 'gcc';
my $cxx = $ENV{'CXX'} || 'g++';
my $cflags = '-O2';
+my @directive = ();
my $iterations = -1;
my $verbose = 1;
my %bench;
# For each bench, capture the size.
my %size;
- while (my ($name, $directives) = each %test)
+ # If there are no user specified directives, use an empty one.
+ @directive = ('')
+ unless @directive;
+ my %directive;
+ # A counter of directive sets.
+ my $count = 1;
+ for my $d (@directive)
{
- generate_grammar ($gram, $name, @$directives);
- # Compile the executable.
- compile ($name);
- $bench{$name} = "system ('./$name');";
- chop($size{$name} = `wc -c <$name`);
+ $directive{$count} = $d;
+ while (my ($name, $directives) = each %test)
+ {
+ $name = "$count-$name";
+ generate_grammar ($gram, $name, (@$directives, $d));
+ # Compile the executable.
+ compile ($name);
+ $bench{$name} = "system ('./$name');";
+ chop($size{$name} = `wc -c <$name`);
+ }
+ $count++;
+ }
+
+ # Display the directives.
+ for my $d (sort keys %directive)
+ {
+ printf " %2d. %s\n", $d, $directive{$d};
}
# Run the benches.
);
}
+######################################################################
+
+=item C<bench_list_parser ()>
+
+Bench the "variant" grammar with debug and no-debug.
+
+=cut
+
+sub bench_list_parser ()
+{
+ bench_grammar
+ ('variant',
+ (
+ "nodbd" => [''],
+ "debug" => ['%debug'],
+ )
+ );
+}
+
############################################################################
sub help ($)
use Getopt::Long;
my %option = (
"c|cflags=s" => \$cflags,
+ "d|directive=s" => \@directive,
"h|help" => sub { help ($verbose) },
"i|iterations=i" => \$iterations,
"q|quiet" => sub { --$verbose },
{
verbose 1, "Running benchmark $b.\n";
bench_fusion_parser() if $b eq "fusion";
+ bench_list_parser() if $b eq "list";
bench_push_parser() if $b eq "push";
bench_variant_parser() if $b eq "variant";
}