1 % Copyright (C) 2008 Jaroslav Hajek <highegg@gmail.com>
3 % This file is part of OctaveForge.
5 % OctaveForge is free software; you can redistribute it and/or modify
6 % it under the terms of the GNU General Public License as published by
7 % the Free Software Foundation; either version 2 of the License, or
8 % (at your option) any later version.
10 % This program is distributed in the hope that it will be useful,
11 % but WITHOUT ANY WARRANTY; without even the implied warranty of
12 % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 % GNU General Public License for more details.
15 % You should have received a copy of the GNU General Public License
16 % along with this software; see the file COPYING. If not, see
17 % <http://www.gnu.org/licenses/>.
20 % function benchmark_intmath (n, ratio)
22 % Test speed of integer math & conversions.
26 % ratio = ratio of intmath for generating integers
29 % time_uint8_conv = time to convert real vector to uint8
30 % time_uint8_add = time to add two uint8 vectors
31 % time_uint8_sub = time to subtract two uint8 vectors
32 % time_uint8_mul = time to multiply two uint8 vectors
33 % time_uint8_div = time to divide two uint8 vectors
34 % time_int8_conv = time to convert real vector to int8
35 % time_int8_add = time to add two int8 vectors
36 % time_int8_sub = time to subtract two int8 vectors
37 % time_int8_mul = time to multiply two int8 vectors
38 % time_int8_div = time to divide two int8 vectors
39 % time_uint16_conv = time to convert real vector to uint16
40 % time_uint16_add = time to add two uint16 vectors
41 % time_uint16_sub = time to subtract two uint16 vectors
42 % time_uint16_mul = time to multiply two uint16 vectors
43 % time_uint16_div = time to divide two uint16 vectors
44 % time_int16_conv = time to convert real vector to int16
45 % time_int16_add = time to add two int16 vectors
46 % time_int16_sub = time to subtract two int16 vectors
47 % time_int16_mul = time to multiply two int16 vectors
48 % time_int16_div = time to divide two int16 vectors
49 % time_uint32_conv = time to convert real vector to uint32
50 % time_uint32_add = time to add two uint32 vectors
51 % time_uint32_sub = time to subtract two uint32 vectors
52 % time_uint32_mul = time to multiply two uint32 vectors
53 % time_uint32_div = time to divide two uint32 vectors
54 % time_int32_conv = time to convert real vector to int32
55 % time_int32_add = time to add two int32 vectors
56 % time_int32_sub = time to subtract two int32 vectors
57 % time_int32_mul = time to multiply two int32 vectors
58 % time_int32_div = time to divide two int32 vectors
61 function results = benchmark_intmath (n, ratio)
63 benchutil_default_arg ('n', 1e7);
64 benchutil_default_arg ('ratio', 0.6);
66 benchutil_initialize (mfilename)
68 x = ratio * double (intmax ('uint8')) * rand(n, 1);
69 y = ratio * double (intmax ('uint8')) * rand(n, 1);
72 tic; y = uint8 (y); time_uint8_conv = toc;
73 benchutil_set_result ('time_uint8_conv')
75 tic; xy = x + y; time_uint8_add = toc;
76 benchutil_set_result ('time_uint8_add')
78 tic; xy = x - y; time_uint8_sub = toc;
79 benchutil_set_result ('time_uint8_sub')
81 tic; xy = x .* y; time_uint8_mul = toc;
82 benchutil_set_result ('time_uint8_mul')
84 tic; xy = x ./ y; time_uint8_div = toc;
85 benchutil_set_result ('time_uint8_div')
87 x = ratio * double (intmax ('int8')) * (2 * rand(n, 1) - 1);
88 y = ratio * double (intmax ('int8')) * (2 * rand(n, 1) - 1);
91 tic; y = int8 (y); time_int8_conv = toc;
92 benchutil_set_result ('time_int8_conv')
94 tic; xy = x + y; time_int8_add = toc;
95 benchutil_set_result ('time_int8_add')
97 tic; xy = x - y; time_int8_sub = toc;
98 benchutil_set_result ('time_int8_sub')
100 tic; xy = x .* y; time_int8_mul = toc;
101 benchutil_set_result ('time_int8_mul')
103 tic; xy = x ./ y; time_int8_div = toc;
104 benchutil_set_result ('time_int8_div')
106 x = ratio * double (intmax ('uint16')) * rand(n, 1);
107 y = ratio * double (intmax ('uint16')) * rand(n, 1);
110 tic; y = uint16 (y); time_uint16_conv = toc;
111 benchutil_set_result ('time_uint16_conv')
113 tic; xy = x + y; time_uint16_add = toc;
114 benchutil_set_result ('time_uint16_add')
116 tic; xy = x - y; time_uint16_sub = toc;
117 benchutil_set_result ('time_uint16_sub')
119 tic; xy = x .* y; time_uint16_mul = toc;
120 benchutil_set_result ('time_uint16_mul')
122 tic; xy = x ./ y; time_uint16_div = toc;
123 benchutil_set_result ('time_uint16_div')
125 x = ratio * double (intmax ('int16')) * (2 * rand(n, 1) - 1);
126 y = ratio * double (intmax ('int16')) * (2 * rand(n, 1) - 1);
129 tic; y = int16 (y); time_int16_conv = toc;
130 benchutil_set_result ('time_int16_conv')
132 tic; xy = x + y; time_int16_add = toc;
133 benchutil_set_result ('time_int16_add')
135 tic; xy = x - y; time_int16_sub = toc;
136 benchutil_set_result ('time_int16_sub')
138 tic; xy = x .* y; time_int16_mul = toc;
139 benchutil_set_result ('time_int16_mul')
141 tic; xy = x ./ y; time_int16_div = toc;
142 benchutil_set_result ('time_int16_div')
144 x = ratio * double (intmax ('uint32')) * rand(n, 1);
145 y = ratio * double (intmax ('uint32')) * rand(n, 1);
148 tic; y = uint32 (y); time_uint32_conv = toc;
149 benchutil_set_result ('time_uint32_conv')
151 tic; xy = x + y; time_uint32_add = toc;
152 benchutil_set_result ('time_uint32_add')
154 tic; xy = x - y; time_uint32_sub = toc;
155 benchutil_set_result ('time_uint32_sub')
157 tic; xy = x .* y; time_uint32_mul = toc;
158 benchutil_set_result ('time_uint32_mul')
160 tic; xy = x ./ y; time_uint32_div = toc;
161 benchutil_set_result ('time_uint32_div')
163 x = ratio * double (intmax ('int32')) * (2 * rand(n, 1) - 1);
164 y = ratio * double (intmax ('int32')) * (2 * rand(n, 1) - 1);
167 tic; y = int32 (y); time_int32_conv = toc;
168 benchutil_set_result ('time_int32_conv')
170 tic; xy = x + y; time_int32_add = toc;
171 benchutil_set_result ('time_int32_add')
173 tic; xy = x - y; time_int32_sub = toc;
174 benchutil_set_result ('time_int32_sub')
176 tic; xy = x .* y; time_int32_mul = toc;
177 benchutil_set_result ('time_int32_mul')
179 tic; xy = x ./ y; time_int32_div = toc;
180 benchutil_set_result ('time_int32_div')