3 float4.pir - Benchmark different ways of filling a float4 struct
8 $ ./parrot examples/benchmarks/float4.pir
12 This benchmark compares 4 different ways of defining and filling a float4
13 structure (a common vector length, especially for graphics).
18 .include 'datatypes.pasm'
23 # count = argv[1] || 1_000_000
27 if count goto make_struct_defs
30 # Create variant structure definitions
32 .local pmc struct, named_struct, array, named_array
34 struct = new 'ResizablePMCArray'
35 push struct, .DATATYPE_FLOAT
38 push struct, .DATATYPE_FLOAT
41 push struct, .DATATYPE_FLOAT
44 push struct, .DATATYPE_FLOAT
48 named_struct = new 'OrderedHash'
49 named_struct['a'] = .DATATYPE_FLOAT
52 named_struct['b'] = .DATATYPE_FLOAT
55 named_struct['c'] = .DATATYPE_FLOAT
58 named_struct['d'] = .DATATYPE_FLOAT
62 array = new 'ResizablePMCArray'
63 push array, .DATATYPE_FLOAT
67 named_array = new 'OrderedHash'
68 named_array['a'] = .DATATYPE_FLOAT
72 # Locals used for each timing loop
73 .local num start, stop, elapsed
77 # Time struct element per array element
78 float4 = new 'ManagedStruct', struct
91 elapsed = stop - start
95 # Time *named* struct element per array element
96 float4 = new 'ManagedStruct', named_struct
106 if i goto named_struct_loop
109 elapsed = stop - start
110 print 'Named Struct: '
113 # Time array packed into first element of struct
114 float4 = new 'ManagedStruct', array
127 elapsed = stop - start
131 # Time array packed into *named* first element of struct
132 float4 = new 'ManagedStruct', named_array
137 float4['a';0] = start
138 float4['a';1] = start
139 float4['a';2] = start
140 float4['a';3] = start
142 if i goto named_array_loop
145 elapsed = stop - start
146 print 'Named Array: '
155 # vim: expandtab shiftwidth=4 ft=pir: