Skip to content
Find file
Fetching contributors…
Cannot retrieve contributors at this time
139 lines (108 sloc) 2.79 KB
# Copyright (C) 2001-2009, Parrot Foundation.
=head1 NAME
examples/benchmarks/array_access.pir - benchmark reading from an array
=head1 SYNOPSIS
./parrot examples/benchmarks/array_access.pir --arr-size=2000
=head1 DESCRIPTION
Inspired by computer language shootout.
=cut
.sub 'main' :main
.param pmc argv
load_bytecode "Getopt/Obj.pbc"
# name of the program
.local string program_name
program_name = shift argv
# Specification of command line arguments.
.local pmc getopts
getopts = new [ 'Getopt';'Obj' ]
push getopts, "arr-size=i"
.local pmc opt
opt = getopts."get_options"(argv)
.local int arr_size
arr_size = 100
.local int def
def = defined opt['arr-size']
unless def goto use_default_arr_size
arr_size = opt['arr-size']
use_default_arr_size:
_bench( 'FixedFloatArray', arr_size )
_bench( 'FixedIntegerArray', arr_size )
_bench( 'FixedPMCArray', arr_size )
_bench( 'FixedStringArray', arr_size )
_bench( 'ResizableFloatArray', arr_size )
_bench( 'ResizableIntegerArray', arr_size )
_bench( 'ResizablePMCArray', arr_size )
_bench( 'ResizableStringArray', arr_size )
_bench( 'FixedPMCArray', arr_size )
.end
=head2 void bench( int arr_class, int arr_size )
=cut
.sub _bench
.param string arr_class
.param int arr_size
# Two arrays with fixed size
.local pmc arr_1, arr_2
arr_1 = new arr_class
arr_1 = arr_size
arr_2 = new arr_class
arr_2 = arr_size
.local num start_time
start_time = time
# initialize arr_1 and arr_2
.local int x_index, value
x_index = 0
value = 1
X_LOOP:
if x_index >= arr_size goto X_DONE
arr_1[x_index] = value
arr_2[x_index] = 0
inc x_index
inc value
goto X_LOOP
X_DONE:
.local int max_index, z_index, y_index
max_index = arr_size - 1
y_index = 0
Y_LOOP: # 1000 iterations
if y_index >= 1000 goto Y_DONE
z_index = max_index
Z_LOOP: # arr_size iterations
if z_index < 0 goto Z_DONE
set $I3, arr_2[z_index]
set $I4, arr_1[z_index]
add $I3, $I4
arr_2[z_index] = $I3
dec z_index
branch Z_LOOP
Z_DONE:
inc y_index
branch Y_LOOP
Y_DONE:
# final output
print "1 * 1000 = "
value = arr_2[0]
print value
print "\n"
print arr_size
print " * 1000 = "
value = arr_2[max_index]
print value
print "\n"
.local num start_time, end_time, span_time
end_time = time
span_time = end_time - start_time
.local string arr_type
arr_type = typeof arr_1
print arr_type
print ": "
print span_time
print "s\n\n"
.end
=head1 SEE ALSO
Computer language shootout. L<http://shootout.alioth.debian.org>
=cut
# Local Variables:
# mode: pir
# fill-column: 100
# End:
# vim: expandtab shiftwidth=4 ft=pir:
Jump to Line
Something went wrong with that request. Please try again.