Skip to content

Commit 2af73c9

Browse files
author
Andy Ferris
committed
Made some perf tests with BenchmarkTools.jl
Observed strange behaviour regarding not measuring allocations
1 parent 01ea146 commit 2af73c9

File tree

2 files changed

+406
-0
lines changed

2 files changed

+406
-0
lines changed

perf/bench9.txt

Lines changed: 342 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,342 @@
1+
2 November 2016
2+
----------------
3+
4+
Notes: Moved to BenchmarkTools.jl for tests.
5+
6+
Here, SizedArray operations do not yield a new SizedArray
7+
8+
=====================================================================
9+
Vectors of length 1 and eltype Int64
10+
=====================================================================
11+
SVector: v3 = v1 + v2 takes 4.00 ns, 16.00 bytes
12+
Array: v3 = v1 + v2 takes 35.00 ns, 112.00 bytes
13+
MVector: v3 = v1 + v2 takes 4.00 ns, 16.00 bytes
14+
SizedArray: v3 = v1 + v2 takes 4.00 ns, 16.00 bytes
15+
16+
Array: v3 .= +.(v1, v2) takes 15.00 ns, 0.00 bytes
17+
MVector: v3 .= +.(v1, v2) takes 3.00 ns, 0.00 bytes
18+
SizedArray: v3 .= +.(v1, v2) takes 3.00 ns, 0.00 bytes
19+
20+
=====================================================================
21+
Matrices of size 1×1 and eltype Int64
22+
=====================================================================
23+
SMatrix: m3 = m1 * m2 takes 7.00 ns, 16.00 bytes
24+
Array: m3 = m1 * m2 takes 160.00 ns, 352.00 bytes
25+
MMatrix: m3 = m1 * m2 takes 7.00 ns, 16.00 bytes
26+
SizedArray: m3 = m1 * m2 takes 7.00 ns, 16.00 bytes
27+
28+
Array: A_mul_B!(m3, m1, m2) takes 29.00 ns, 0.00 bytes
29+
MMatrix: A_mul_B!(m3, m1, m2) takes 3.00 ns, 0.00 bytes
30+
SizedArray: A_mul_B!(m3, m1, m2) takes 3.00 ns, 0.00 bytes
31+
32+
=====================================================================
33+
Vectors of length 2 and eltype Int64
34+
=====================================================================
35+
SVector: v3 = v1 + v2 takes 5.00 ns, 32.00 bytes
36+
Array: v3 = v1 + v2 takes 37.00 ns, 112.00 bytes
37+
MVector: v3 = v1 + v2 takes 5.00 ns, 32.00 bytes
38+
SizedArray: v3 = v1 + v2 takes 5.00 ns, 32.00 bytes
39+
40+
Array: v3 .= +.(v1, v2) takes 16.00 ns, 0.00 bytes
41+
MVector: v3 .= +.(v1, v2) takes 4.00 ns, 0.00 bytes
42+
SizedArray: v3 .= +.(v1, v2) takes 3.00 ns, 0.00 bytes
43+
44+
=====================================================================
45+
Matrices of size 2×2 and eltype Int64
46+
=====================================================================
47+
SMatrix: m3 = m1 * m2 takes 10.00 ns, 48.00 bytes
48+
Array: m3 = m1 * m2 takes 39.00 ns, 144.00 bytes
49+
MMatrix: m3 = m1 * m2 takes 10.00 ns, 48.00 bytes
50+
SizedArray: m3 = m1 * m2 takes 10.00 ns, 48.00 bytes
51+
52+
Array: A_mul_B!(m3, m1, m2) takes 31.00 ns, 0.00 bytes
53+
MMatrix: A_mul_B!(m3, m1, m2) takes 4.00 ns, 0.00 bytes
54+
SizedArray: A_mul_B!(m3, m1, m2) takes 3.00 ns, 0.00 bytes
55+
56+
=====================================================================
57+
Vectors of length 4 and eltype Int64
58+
=====================================================================
59+
SVector: v3 = v1 + v2 takes 6.00 ns, 48.00 bytes
60+
Array: v3 = v1 + v2 takes 41.00 ns, 128.00 bytes
61+
MVector: v3 = v1 + v2 takes 6.00 ns, 48.00 bytes
62+
SizedArray: v3 = v1 + v2 takes 6.00 ns, 48.00 bytes
63+
64+
Array: v3 .= +.(v1, v2) takes 16.00 ns, 0.00 bytes
65+
MVector: v3 .= +.(v1, v2) takes 3.00 ns, 0.00 bytes
66+
SizedArray: v3 .= +.(v1, v2) takes 4.00 ns, 0.00 bytes
67+
68+
=====================================================================
69+
Matrices of size 4×4 and eltype Int64
70+
=====================================================================
71+
SMatrix: m3 = m1 * m2 takes 34.00 ns, 144.00 bytes
72+
Array: m3 = m1 * m2 takes 290.00 ns, 464.00 bytes
73+
MMatrix: m3 = m1 * m2 takes 34.00 ns, 144.00 bytes
74+
SizedArray: m3 = m1 * m2 takes 34.00 ns, 144.00 bytes
75+
76+
Array: A_mul_B!(m3, m1, m2) takes 47.00 ns, 0.00 bytes
77+
MMatrix: A_mul_B!(m3, m1, m2) takes 6.00 ns, 0.00 bytes
78+
SizedArray: A_mul_B!(m3, m1, m2) takes 6.00 ns, 0.00 bytes
79+
80+
=====================================================================
81+
Vectors of length 8 and eltype Int64
82+
=====================================================================
83+
SVector: v3 = v1 + v2 takes 8.00 ns, 80.00 bytes
84+
Array: v3 = v1 + v2 takes 46.00 ns, 160.00 bytes
85+
MVector: v3 = v1 + v2 takes 8.00 ns, 80.00 bytes
86+
SizedArray: v3 = v1 + v2 takes 10.00 ns, 80.00 bytes
87+
88+
Array: v3 .= +.(v1, v2) takes 17.00 ns, 0.00 bytes
89+
MVector: v3 .= +.(v1, v2) takes 4.00 ns, 0.00 bytes
90+
SizedArray: v3 .= +.(v1, v2) takes 5.00 ns, 0.00 bytes
91+
92+
=====================================================================
93+
Matrices of size 8×8 and eltype Int64
94+
=====================================================================
95+
SMatrix: m3 = m1 * m2 takes 198.00 ns, 544.00 bytes
96+
Array: m3 = m1 * m2 takes 639.00 ns, 880.00 bytes
97+
MMatrix: m3 = m1 * m2 takes 198.00 ns, 544.00 bytes
98+
SizedArray: m3 = m1 * m2 takes 209.00 ns, 544.00 bytes
99+
100+
Array: A_mul_B!(m3, m1, m2) takes 74.00 ns, 0.00 bytes
101+
MMatrix: A_mul_B!(m3, m1, m2) takes 20.00 ns, 0.00 bytes
102+
SizedArray: A_mul_B!(m3, m1, m2) takes 20.00 ns, 0.00 bytes
103+
104+
=====================================================================
105+
Vectors of length 16 and eltype Int64
106+
=====================================================================
107+
SVector: v3 = v1 + v2 takes 15.00 ns, 144.00 bytes
108+
Array: v3 = v1 + v2 takes 58.00 ns, 224.00 bytes
109+
MVector: v3 = v1 + v2 takes 15.00 ns, 144.00 bytes
110+
SizedArray: v3 = v1 + v2 takes 15.00 ns, 144.00 bytes
111+
112+
Array: v3 .= +.(v1, v2) takes 18.00 ns, 0.00 bytes
113+
MVector: v3 .= +.(v1, v2) takes 6.00 ns, 0.00 bytes
114+
SizedArray: v3 .= +.(v1, v2) takes 6.00 ns, 0.00 bytes
115+
116+
=====================================================================
117+
Matrices of size 16×16 and eltype Int64
118+
=====================================================================
119+
SMatrix: m3 = m1 * m2 takes 1.78 μs, 2.06 kb
120+
Array: m3 = m1 * m2 takes 2.63 μs, 2.38 kb
121+
MMatrix: m3 = m1 * m2 takes 1.79 μs, 2.06 kb
122+
SizedArray: m3 = m1 * m2 takes 1.79 μs, 2.06 kb
123+
124+
Array: A_mul_B!(m3, m1, m2) takes 148.00 ns, 0.00 bytes
125+
MMatrix: A_mul_B!(m3, m1, m2) takes 75.00 ns, 0.00 bytes
126+
SizedArray: A_mul_B!(m3, m1, m2) takes 78.00 ns, 0.00 bytes
127+
128+
=====================================================================
129+
Vectors of length 32 and eltype Int64
130+
=====================================================================
131+
SVector: v3 = v1 + v2 takes 27.00 ns, 336.00 bytes
132+
Array: v3 = v1 + v2 takes 101.00 ns, 416.00 bytes
133+
MVector: v3 = v1 + v2 takes 27.00 ns, 336.00 bytes
134+
SizedArray: v3 = v1 + v2 takes 27.00 ns, 336.00 bytes
135+
136+
Array: v3 .= +.(v1, v2) takes 20.00 ns, 0.00 bytes
137+
MVector: v3 .= +.(v1, v2) takes 11.00 ns, 0.00 bytes
138+
SizedArray: v3 .= +.(v1, v2) takes 11.00 ns, 0.00 bytes
139+
140+
=====================================================================
141+
Vectors of length 64 and eltype Int64
142+
=====================================================================
143+
SVector: v3 = v1 + v2 takes 49.00 ns, 544.00 bytes
144+
Array: v3 = v1 + v2 takes 147.00 ns, 640.00 bytes
145+
MVector: v3 = v1 + v2 takes 49.00 ns, 544.00 bytes
146+
SizedArray: v3 = v1 + v2 takes 48.00 ns, 544.00 bytes
147+
148+
Array: v3 .= +.(v1, v2) takes 29.00 ns, 0.00 bytes
149+
MVector: v3 .= +.(v1, v2) takes 20.00 ns, 0.00 bytes
150+
SizedArray: v3 .= +.(v1, v2) takes 20.00 ns, 0.00 bytes
151+
152+
=====================================================================
153+
Vectors of length 128 and eltype Int64
154+
=====================================================================
155+
SVector: v3 = v1 + v2 takes 97.00 ns, 1.06 kb
156+
Array: v3 = v1 + v2 takes 244.00 ns, 1.16 kb
157+
MVector: v3 = v1 + v2 takes 97.00 ns, 1.06 kb
158+
SizedArray: v3 = v1 + v2 takes 99.00 ns, 1.06 kb
159+
160+
Array: v3 .= +.(v1, v2) takes 30.00 ns, 0.00 bytes
161+
MVector: v3 .= +.(v1, v2) takes 38.00 ns, 0.00 bytes
162+
SizedArray: v3 .= +.(v1, v2) takes 38.00 ns, 0.00 bytes
163+
164+
=====================================================================
165+
Vectors of length 256 and eltype Int64
166+
=====================================================================
167+
SVector: v3 = v1 + v2 takes 386.00 ns, 2.06 kb
168+
Array: v3 = v1 + v2 takes 580.00 ns, 2.14 kb
169+
MVector: v3 = v1 + v2 takes 399.00 ns, 2.06 kb
170+
SizedArray: v3 = v1 + v2 takes 385.00 ns, 2.06 kb
171+
172+
Array: v3 .= +.(v1, v2) takes 48.00 ns, 0.00 bytes
173+
MVector: v3 .= +.(v1, v2) takes 76.00 ns, 0.00 bytes
174+
SizedArray: v3 .= +.(v1, v2) takes 75.00 ns, 0.00 bytes
175+
176+
=====================================================================
177+
Vectors of length 1 and eltype Float64
178+
=====================================================================
179+
SVector: v3 = v1 + v2 takes 4.00 ns, 16.00 bytes
180+
Array: v3 = v1 + v2 takes 35.00 ns, 112.00 bytes
181+
MVector: v3 = v1 + v2 takes 4.00 ns, 16.00 bytes
182+
SizedArray: v3 = v1 + v2 takes 4.00 ns, 16.00 bytes
183+
184+
Array: v3 .= +.(v1, v2) takes 15.00 ns, 0.00 bytes
185+
MVector: v3 .= +.(v1, v2) takes 3.00 ns, 0.00 bytes
186+
SizedArray: v3 .= +.(v1, v2) takes 3.00 ns, 0.00 bytes
187+
188+
=====================================================================
189+
Matrices of size 1×1 and eltype Float64
190+
=====================================================================
191+
SMatrix: m3 = m1 * m2 takes 7.00 ns, 16.00 bytes
192+
Array: m3 = m1 * m2 takes 151.00 ns, 128.00 bytes
193+
MMatrix: m3 = m1 * m2 takes 7.00 ns, 16.00 bytes
194+
SizedArray: m3 = m1 * m2 takes 7.00 ns, 16.00 bytes
195+
196+
Array: A_mul_B!(m3, m1, m2) takes 28.00 ns, 0.00 bytes
197+
MMatrix: A_mul_B!(m3, m1, m2) takes 4.00 ns, 0.00 bytes
198+
SizedArray: A_mul_B!(m3, m1, m2) takes 4.00 ns, 0.00 bytes
199+
200+
=====================================================================
201+
Vectors of length 2 and eltype Float64
202+
=====================================================================
203+
SVector: v3 = v1 + v2 takes 5.00 ns, 32.00 bytes
204+
Array: v3 = v1 + v2 takes 37.00 ns, 112.00 bytes
205+
MVector: v3 = v1 + v2 takes 5.00 ns, 32.00 bytes
206+
SizedArray: v3 = v1 + v2 takes 5.00 ns, 32.00 bytes
207+
208+
Array: v3 .= +.(v1, v2) takes 15.00 ns, 0.00 bytes
209+
MVector: v3 .= +.(v1, v2) takes 3.00 ns, 0.00 bytes
210+
SizedArray: v3 .= +.(v1, v2) takes 4.00 ns, 0.00 bytes
211+
212+
=====================================================================
213+
Matrices of size 2×2 and eltype Float64
214+
=====================================================================
215+
SMatrix: m3 = m1 * m2 takes 10.00 ns, 48.00 bytes
216+
Array: m3 = m1 * m2 takes 41.00 ns, 144.00 bytes
217+
MMatrix: m3 = m1 * m2 takes 10.00 ns, 48.00 bytes
218+
SizedArray: m3 = m1 * m2 takes 11.00 ns, 48.00 bytes
219+
220+
Array: A_mul_B!(m3, m1, m2) takes 31.00 ns, 0.00 bytes
221+
MMatrix: A_mul_B!(m3, m1, m2) takes 4.00 ns, 0.00 bytes
222+
SizedArray: A_mul_B!(m3, m1, m2) takes 4.00 ns, 0.00 bytes
223+
224+
=====================================================================
225+
Vectors of length 4 and eltype Float64
226+
=====================================================================
227+
SVector: v3 = v1 + v2 takes 6.00 ns, 48.00 bytes
228+
Array: v3 = v1 + v2 takes 40.00 ns, 128.00 bytes
229+
MVector: v3 = v1 + v2 takes 6.00 ns, 48.00 bytes
230+
SizedArray: v3 = v1 + v2 takes 6.00 ns, 48.00 bytes
231+
232+
Array: v3 .= +.(v1, v2) takes 16.00 ns, 0.00 bytes
233+
MVector: v3 .= +.(v1, v2) takes 3.00 ns, 0.00 bytes
234+
SizedArray: v3 .= +.(v1, v2) takes 4.00 ns, 0.00 bytes
235+
236+
=====================================================================
237+
Matrices of size 4×4 and eltype Float64
238+
=====================================================================
239+
SMatrix: m3 = m1 * m2 takes 36.00 ns, 144.00 bytes
240+
Array: m3 = m1 * m2 takes 183.00 ns, 240.00 bytes
241+
MMatrix: m3 = m1 * m2 takes 36.00 ns, 144.00 bytes
242+
SizedArray: m3 = m1 * m2 takes 36.00 ns, 144.00 bytes
243+
244+
Array: A_mul_B!(m3, m1, m2) takes 47.00 ns, 0.00 bytes
245+
MMatrix: A_mul_B!(m3, m1, m2) takes 6.00 ns, 0.00 bytes
246+
SizedArray: A_mul_B!(m3, m1, m2) takes 6.00 ns, 0.00 bytes
247+
248+
=====================================================================
249+
Vectors of length 8 and eltype Float64
250+
=====================================================================
251+
SVector: v3 = v1 + v2 takes 8.00 ns, 80.00 bytes
252+
Array: v3 = v1 + v2 takes 46.00 ns, 160.00 bytes
253+
MVector: v3 = v1 + v2 takes 8.00 ns, 80.00 bytes
254+
SizedArray: v3 = v1 + v2 takes 8.00 ns, 80.00 bytes
255+
256+
Array: v3 .= +.(v1, v2) takes 17.00 ns, 0.00 bytes
257+
MVector: v3 .= +.(v1, v2) takes 4.00 ns, 0.00 bytes
258+
SizedArray: v3 .= +.(v1, v2) takes 4.00 ns, 0.00 bytes
259+
260+
=====================================================================
261+
Matrices of size 8×8 and eltype Float64
262+
=====================================================================
263+
SMatrix: m3 = m1 * m2 takes 97.00 ns, 544.00 bytes
264+
Array: m3 = m1 * m2 takes 274.00 ns, 656.00 bytes
265+
MMatrix: m3 = m1 * m2 takes 102.00 ns, 544.00 bytes
266+
SizedArray: m3 = m1 * m2 takes 98.00 ns, 544.00 bytes
267+
268+
Array: A_mul_B!(m3, m1, m2) takes 77.00 ns, 0.00 bytes
269+
MMatrix: A_mul_B!(m3, m1, m2) takes 21.00 ns, 0.00 bytes
270+
SizedArray: A_mul_B!(m3, m1, m2) takes 21.00 ns, 0.00 bytes
271+
272+
=====================================================================
273+
Vectors of length 16 and eltype Float64
274+
=====================================================================
275+
SVector: v3 = v1 + v2 takes 12.00 ns, 144.00 bytes
276+
Array: v3 = v1 + v2 takes 58.00 ns, 224.00 bytes
277+
MVector: v3 = v1 + v2 takes 12.00 ns, 144.00 bytes
278+
SizedArray: v3 = v1 + v2 takes 12.00 ns, 144.00 bytes
279+
280+
Array: v3 .= +.(v1, v2) takes 18.00 ns, 0.00 bytes
281+
MVector: v3 .= +.(v1, v2) takes 6.00 ns, 0.00 bytes
282+
SizedArray: v3 .= +.(v1, v2) takes 6.00 ns, 0.00 bytes
283+
284+
=====================================================================
285+
Matrices of size 16×16 and eltype Float64
286+
=====================================================================
287+
SMatrix: m3 = m1 * m2 takes 796.00 ns, 2.06 kb
288+
Array: m3 = m1 * m2 takes 867.00 ns, 2.16 kb
289+
MMatrix: m3 = m1 * m2 takes 798.00 ns, 2.06 kb
290+
SizedArray: m3 = m1 * m2 takes 809.00 ns, 2.06 kb
291+
292+
Array: A_mul_B!(m3, m1, m2) takes 145.00 ns, 0.00 bytes
293+
MMatrix: A_mul_B!(m3, m1, m2) takes 80.00 ns, 0.00 bytes
294+
SizedArray: A_mul_B!(m3, m1, m2) takes 83.00 ns, 0.00 bytes
295+
296+
=====================================================================
297+
Vectors of length 32 and eltype Float64
298+
=====================================================================
299+
SVector: v3 = v1 + v2 takes 25.00 ns, 336.00 bytes
300+
Array: v3 = v1 + v2 takes 99.00 ns, 416.00 bytes
301+
MVector: v3 = v1 + v2 takes 24.00 ns, 336.00 bytes
302+
SizedArray: v3 = v1 + v2 takes 24.00 ns, 336.00 bytes
303+
304+
Array: v3 .= +.(v1, v2) takes 20.00 ns, 0.00 bytes
305+
MVector: v3 .= +.(v1, v2) takes 11.00 ns, 0.00 bytes
306+
SizedArray: v3 .= +.(v1, v2) takes 11.00 ns, 0.00 bytes
307+
308+
=====================================================================
309+
Vectors of length 64 and eltype Float64
310+
=====================================================================
311+
SVector: v3 = v1 + v2 takes 47.00 ns, 544.00 bytes
312+
Array: v3 = v1 + v2 takes 144.00 ns, 640.00 bytes
313+
MVector: v3 = v1 + v2 takes 47.00 ns, 544.00 bytes
314+
SizedArray: v3 = v1 + v2 takes 46.00 ns, 544.00 bytes
315+
316+
Array: v3 .= +.(v1, v2) takes 26.00 ns, 0.00 bytes
317+
MVector: v3 .= +.(v1, v2) takes 21.00 ns, 0.00 bytes
318+
SizedArray: v3 .= +.(v1, v2) takes 21.00 ns, 0.00 bytes
319+
320+
=====================================================================
321+
Vectors of length 128 and eltype Float64
322+
=====================================================================
323+
SVector: v3 = v1 + v2 takes 96.00 ns, 1.06 kb
324+
Array: v3 = v1 + v2 takes 242.00 ns, 1.16 kb
325+
MVector: v3 = v1 + v2 takes 96.00 ns, 1.06 kb
326+
SizedArray: v3 = v1 + v2 takes 96.00 ns, 1.06 kb
327+
328+
Array: v3 .= +.(v1, v2) takes 29.00 ns, 0.00 bytes
329+
MVector: v3 .= +.(v1, v2) takes 40.00 ns, 0.00 bytes
330+
SizedArray: v3 .= +.(v1, v2) takes 40.00 ns, 0.00 bytes
331+
332+
=====================================================================
333+
Vectors of length 256 and eltype Float64
334+
=====================================================================
335+
SVector: v3 = v1 + v2 takes 395.00 ns, 2.06 kb
336+
Array: v3 = v1 + v2 takes 581.00 ns, 2.14 kb
337+
MVector: v3 = v1 + v2 takes 398.00 ns, 2.06 kb
338+
SizedArray: v3 = v1 + v2 takes 398.00 ns, 2.06 kb
339+
340+
Array: v3 .= +.(v1, v2) takes 40.00 ns, 0.00 bytes
341+
MVector: v3 .= +.(v1, v2) takes 79.00 ns, 0.00 bytes
342+
SizedArray: v3 .= +.(v1, v2) takes 83.00 ns, 0.00 bytes

0 commit comments

Comments
 (0)