Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
branch: nqp_pct
Fetching contributors…

Cannot retrieve contributors at this time

176 lines (141 sloc) 3.786 kb
# Copyright (C) 2008-2009, Parrot Foundation.
=head1 TITLE
float4.pir - Benchmark different ways of filling a float4 struct
=head1 SYNOPSIS
$ cd parrot-home
$ ./parrot examples/benchmarks/float4.pir
=head1 DESCRIPTION
This benchmark compares 5 different ways of defining and filling a float4
structure (a common vector length, especially for graphics).
=cut
.include 'datatypes.pasm'
.sub main :main
.param pmc argv
# count = argv[1] || 1_000_000
.local int count
$S0 = argv[1]
count = $S0
if count goto make_struct_defs
count = 1000000
# Create variant structure definitions
make_struct_defs:
.local pmc struct, named_struct, array, named_array
struct = new 'ResizablePMCArray'
push struct, .DATATYPE_FLOAT
push struct, 0
push struct, 0
push struct, .DATATYPE_FLOAT
push struct, 0
push struct, 0
push struct, .DATATYPE_FLOAT
push struct, 0
push struct, 0
push struct, .DATATYPE_FLOAT
push struct, 0
push struct, 0
named_struct = new 'OrderedHash'
named_struct['a'] = .DATATYPE_FLOAT
push named_struct, 0
push named_struct, 0
named_struct['b'] = .DATATYPE_FLOAT
push named_struct, 0
push named_struct, 0
named_struct['c'] = .DATATYPE_FLOAT
push named_struct, 0
push named_struct, 0
named_struct['d'] = .DATATYPE_FLOAT
push named_struct, 0
push named_struct, 0
array = new 'ResizablePMCArray'
push array, .DATATYPE_FLOAT
push array, 4
push array, 0
named_array = new 'OrderedHash'
named_array['a'] = .DATATYPE_FLOAT
push named_array, 4
push named_array, 0
# Locals used for each timing loop
.local num start, stop, elapsed
.local pmc float4
.local int i
# Time named struct elements treated as array
float4 = new 'ManagedStruct', named_struct
i = count
start = time
named_struct_array_loop:
float4[0] = start
float4[1] = start
float4[2] = start
float4[3] = start
dec i
if i goto named_struct_array_loop
stop = time
elapsed = stop - start
print 'Array Struct: '
say elapsed
# Time struct element per array element
float4 = new 'ManagedStruct', struct
i = count
start = time
struct_loop:
float4[0] = start
float4[1] = start
float4[2] = start
float4[3] = start
dec i
if i goto struct_loop
stop = time
elapsed = stop - start
print ' Struct: '
say elapsed
# Time *named* struct element per array element
float4 = new 'ManagedStruct', named_struct
i = count
start = time
named_struct_loop:
float4['a'] = start
float4['b'] = start
float4['c'] = start
float4['d'] = start
dec i
if i goto named_struct_loop
stop = time
elapsed = stop - start
print 'Named Struct: '
say elapsed
# Time array packed into first element of struct
float4 = new 'ManagedStruct', array
i = count
start = time
array_loop:
float4[0;0] = start
float4[0;1] = start
float4[0;2] = start
float4[0;3] = start
dec i
if i goto array_loop
stop = time
elapsed = stop - start
print ' Array: '
say elapsed
# Time array packed into *named* first element of struct
float4 = new 'ManagedStruct', named_array
i = count
start = time
named_array_loop:
float4['a';0] = start
float4['a';1] = start
float4['a';2] = start
float4['a';3] = start
dec i
if i goto named_array_loop
stop = time
elapsed = stop - start
print 'Named Array: '
say elapsed
.end
# 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.