/
rand.pir
187 lines (156 loc) · 3.47 KB
/
rand.pir
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
# Copyright (C) 2009, Parrot Foundation.
# $Id$
=head1 NAME
examples/benchmarks/rand.pir - rand dynop benchmark
=head1 SYNOPSIS
% time ./parrot examples/benchmarks/rand.pir [count]
=head1 DESCRIPTION
Times the computation of C<count> (default 1e8) random numbers using
the C<rand> dynop.
=cut
.loadlib 'math_ops'
.sub _main
.param pmc argv
.local int count
count = 1e8
.local int argc
argc = argv
if argc <= 1 goto no_arg
$S0 = argv[1]
count = $S0
no_arg:
count /= 8
.local num t0, t1, t2, t3, t4, t5, t6
.local num r_num, min_num, max_num
.local int r_int, min_int, max_int
.local int i
min_num = 1.0
max_num = 20.0
min_int = 1
max_int = 20
.local num tn0, tn1, tnull
tn0 = time
i = count
null_loop_top:
dec i
if i > 0 goto null_loop_top
tn1 = time
tnull = tn1 - tn0
t0 = time
i = count
t0_top:
r_num = rand
r_num = rand
r_num = rand
r_num = rand
r_num = rand
r_num = rand
r_num = rand
r_num = rand
dec i
if i > 0 goto t0_top
t1 = time
i = count
t1_top:
r_int = rand
r_int = rand
r_int = rand
r_int = rand
r_int = rand
r_int = rand
r_int = rand
r_int = rand
dec i
if i > 0 goto t1_top
t2 = time
i = count
t2_top:
r_num = rand max_num
r_num = rand max_num
r_num = rand max_num
r_num = rand max_num
r_num = rand max_num
r_num = rand max_num
r_num = rand max_num
r_num = rand max_num
dec i
if i > 0 goto t2_top
t3 = time
i = count
t3_top:
r_int = rand max_int
r_int = rand max_int
r_int = rand max_int
r_int = rand max_int
r_int = rand max_int
r_int = rand max_int
r_int = rand max_int
r_int = rand max_int
dec i
if i > 0 goto t3_top
t4 = time
i = count
t4_top:
r_num = rand min_num, max_num
r_num = rand min_num, max_num
r_num = rand min_num, max_num
r_num = rand min_num, max_num
r_num = rand min_num, max_num
r_num = rand min_num, max_num
r_num = rand min_num, max_num
r_num = rand min_num, max_num
dec i
if i > 0 goto t4_top
t5 = time
i = count
t5_top:
r_int = rand min_int, max_int
r_int = rand min_int, max_int
r_int = rand min_int, max_int
r_int = rand min_int, max_int
r_int = rand min_int, max_int
r_int = rand min_int, max_int
r_int = rand min_int, max_int
r_int = rand min_int, max_int
dec i
if i > 0 goto t5_top
t6 = time
report('null loop ', tn0, tn1, 0, count)
count *= 8
report('num ', t0, t1, tnull, count)
report('int ', t1, t2, tnull, count)
report('num_max ', t2, t3, tnull, count)
report('int_max ', t3, t4, tnull, count)
report('num_min_max', t4, t5, tnull, count)
report('int_min_max', t5, t6, tnull, count)
.end
.sub report
.param string name
.param num start
.param num end
.param num null_time
.param int count
.local num run_time
run_time = end - start
run_time -= null_time
if run_time > 0 goto time_ok
run_time = .000001
time_ok:
.local num per_second
.local int ps
per_second = count / run_time
ps = per_second
print name
print ': '
print ps
print ' per second ('
print count
print ' / '
print run_time
print " seconds)\n"
.end
# Local Variables:
# mode: pir
# fill-column: 100
# End:
# vim: expandtab shiftwidth=4 ft=pir: