Skip to content

Commit 820391a

Browse files
committed
round of tests/benchmark improvements
1 parent 0930252 commit 820391a

File tree

4 files changed

+261
-189
lines changed

4 files changed

+261
-189
lines changed

README.md

Lines changed: 102 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
1-
# Optimized (U)Int* format methods
1+
# Optimized (U)Int* format/parse methods
22

3-
As of Jun 14 2015 Rust still uses a naive implementation of integer to decimal strings.
4-
5-
My hopes are that this work allows measurable improvements to json serializers.
3+
As of Jun 14 2015 Rust still uses a naive implementation of integer to decimal strings. The string parsing can be improved as well.
64

75
# Results
86

@@ -11,68 +9,112 @@ My hopes are that this work allows measurable improvements to json serializers.
119
* h (big numbers skew)
1210
[0, 0, 5, 29, 103, 212, 551, 1138, 1887, 3196, 2879]
1311
* m (slight small number skew):
14-
[0, 1505, 1177, 1062, 1040, 983, 952, 955, 919, 877, 530]
12+
[0, 2807, 1334, 1057, 905, 821, 772, 707, 627, 605, 365]
1513
* l (small numbers skew):
16-
[0, 4684, 1205, 863, 713, 600, 501, 439, 416, 346, 233]
14+
[0, 8004, 567, 351, 248, 212, 170, 126, 136, 112, 74]
1715

18-
Running with rustc 1.2.0-nightly (cffaf0e7a 2015-06-23) @ x64 Linux - Intel(R) Core(TM) i7-2670QM @ 2.20Ghz (My notebook CPU)
16+
Running with rustc 1.3.0-nightly (7ea2674c7 2015-07-13) @ x64 Linux - Intel(R) Core(TM) i7-2670QM @ 2.20Ghz (My notebook CPU)
1917

2018
```
21-
test bench::skewed_h_new_u08 ... bench: 67,156 ns/iter (+/- 3,687)
22-
test bench::skewed_h_new_u16 ... bench: 376,573 ns/iter (+/- 23,732)
23-
test bench::skewed_h_new_u32 ... bench: 4,202,419 ns/iter (+/- 203,200)
24-
test bench::skewed_h_new_u64 ... bench: 5,097,971 ns/iter (+/- 337,608)
25-
test bench::skewed_h_stdlib_u08 ... bench: 69,270 ns/iter (+/- 3,321)
26-
test bench::skewed_h_stdlib_u16 ... bench: 420,660 ns/iter (+/- 20,196)
27-
test bench::skewed_h_stdlib_u32 ... bench: 5,451,519 ns/iter (+/- 417,856)
28-
test bench::skewed_h_stdlib_u64 ... bench: 8,360,505 ns/iter (+/- 453,566)
29-
test bench::skewed_l_new_u08 ... bench: 68,705 ns/iter (+/- 3,657)
30-
test bench::skewed_l_new_u16 ... bench: 376,786 ns/iter (+/- 20,804)
31-
test bench::skewed_l_new_u32 ... bench: 4,207,858 ns/iter (+/- 210,143)
32-
test bench::skewed_l_new_u64 ... bench: 5,117,710 ns/iter (+/- 350,017)
33-
test bench::skewed_l_stdlib_u08 ... bench: 68,252 ns/iter (+/- 4,251)
34-
test bench::skewed_l_stdlib_u16 ... bench: 417,692 ns/iter (+/- 22,882)
35-
test bench::skewed_l_stdlib_u32 ... bench: 5,383,473 ns/iter (+/- 322,479)
36-
test bench::skewed_l_stdlib_u64 ... bench: 8,380,458 ns/iter (+/- 357,894)
37-
test bench::skewed_m_new_u08 ... bench: 68,585 ns/iter (+/- 3,099)
38-
test bench::skewed_m_new_u16 ... bench: 375,588 ns/iter (+/- 20,074)
39-
test bench::skewed_m_new_u32 ... bench: 4,178,506 ns/iter (+/- 234,058)
40-
test bench::skewed_m_new_u64 ... bench: 5,041,359 ns/iter (+/- 302,088)
41-
test bench::skewed_m_stdlib_u08 ... bench: 67,975 ns/iter (+/- 3,570)
42-
test bench::skewed_m_stdlib_u16 ... bench: 421,650 ns/iter (+/- 22,984)
43-
test bench::skewed_m_stdlib_u32 ... bench: 5,422,042 ns/iter (+/- 330,263)
44-
test bench::skewed_m_stdlib_u64 ... bench: 8,358,590 ns/iter (+/- 418,777)
19+
test bench::display_h_new_u08 ... bench: 71,041 ns/iter (+/- 2,894)
20+
test bench::display_h_new_u16 ... bench: 378,255 ns/iter (+/- 36,547)
21+
test bench::display_h_new_u32 ... bench: 4,232,483 ns/iter (+/- 509,661)
22+
test bench::display_h_new_u64 ... bench: 5,166,740 ns/iter (+/- 421,124)
23+
test bench::display_h_stdlib_u08 ... bench: 73,536 ns/iter (+/- 5,287)
24+
test bench::display_h_stdlib_u16 ... bench: 451,443 ns/iter (+/- 16,879)
25+
test bench::display_h_stdlib_u32 ... bench: 5,551,070 ns/iter (+/- 518,151)
26+
test bench::display_h_stdlib_u64 ... bench: 8,624,374 ns/iter (+/- 643,701)
27+
test bench::display_l_new_u08 ... bench: 71,547 ns/iter (+/- 504)
28+
test bench::display_l_new_u16 ... bench: 399,727 ns/iter (+/- 28,030)
29+
test bench::display_l_new_u32 ... bench: 4,365,303 ns/iter (+/- 414,414)
30+
test bench::display_l_new_u64 ... bench: 5,302,382 ns/iter (+/- 292,324)
31+
test bench::display_l_stdlib_u08 ... bench: 75,445 ns/iter (+/- 2,487)
32+
test bench::display_l_stdlib_u16 ... bench: 444,313 ns/iter (+/- 16,203)
33+
test bench::display_l_stdlib_u32 ... bench: 5,761,801 ns/iter (+/- 387,186)
34+
test bench::display_l_stdlib_u64 ... bench: 8,790,365 ns/iter (+/- 614,846)
35+
test bench::display_m_new_u08 ... bench: 71,820 ns/iter (+/- 2,956)
36+
test bench::display_m_new_u16 ... bench: 399,649 ns/iter (+/- 20,643)
37+
test bench::display_m_new_u32 ... bench: 4,355,561 ns/iter (+/- 179,189)
38+
test bench::display_m_new_u64 ... bench: 5,070,594 ns/iter (+/- 341,950)
39+
test bench::display_m_stdlib_u08 ... bench: 74,900 ns/iter (+/- 1,909)
40+
test bench::display_m_stdlib_u16 ... bench: 448,788 ns/iter (+/- 20,791)
41+
test bench::display_m_stdlib_u32 ... bench: 5,717,939 ns/iter (+/- 316,824)
42+
test bench::display_m_stdlib_u64 ... bench: 8,787,160 ns/iter (+/- 482,864)
43+
test bench::from_str_h_new_u08 ... bench: 28,153 ns/iter (+/- 624)
44+
test bench::from_str_h_new_u16 ... bench: 223,513 ns/iter (+/- 11,554)
45+
test bench::from_str_h_new_u32 ... bench: 3,098,935 ns/iter (+/- 231,022)
46+
test bench::from_str_h_new_u64 ... bench: 5,009,900 ns/iter (+/- 341,961)
47+
test bench::from_str_h_stdlib_u08 ... bench: 34,033 ns/iter (+/- 2,068)
48+
test bench::from_str_h_stdlib_u16 ... bench: 248,785 ns/iter (+/- 14,208)
49+
test bench::from_str_h_stdlib_u32 ... bench: 4,150,536 ns/iter (+/- 266,070)
50+
test bench::from_str_h_stdlib_u64 ... bench: 6,817,997 ns/iter (+/- 449,838)
51+
test bench::from_str_l_new_u08 ... bench: 27,552 ns/iter (+/- 1,500)
52+
test bench::from_str_l_new_u16 ... bench: 234,360 ns/iter (+/- 13,144)
53+
test bench::from_str_l_new_u32 ... bench: 3,140,261 ns/iter (+/- 248,175)
54+
test bench::from_str_l_new_u64 ... bench: 5,176,583 ns/iter (+/- 350,416)
55+
test bench::from_str_l_stdlib_u08 ... bench: 35,060 ns/iter (+/- 2,154)
56+
test bench::from_str_l_stdlib_u16 ... bench: 252,135 ns/iter (+/- 23,461)
57+
test bench::from_str_l_stdlib_u32 ... bench: 4,154,599 ns/iter (+/- 369,606)
58+
test bench::from_str_l_stdlib_u64 ... bench: 6,892,767 ns/iter (+/- 213,030)
59+
test bench::from_str_m_new_u08 ... bench: 28,252 ns/iter (+/- 1,384)
60+
test bench::from_str_m_new_u16 ... bench: 231,051 ns/iter (+/- 16,540)
61+
test bench::from_str_m_new_u32 ... bench: 3,166,504 ns/iter (+/- 134,418)
62+
test bench::from_str_m_new_u64 ... bench: 5,103,195 ns/iter (+/- 218,912)
63+
test bench::from_str_m_stdlib_u08 ... bench: 35,012 ns/iter (+/- 2,735)
64+
test bench::from_str_m_stdlib_u16 ... bench: 250,967 ns/iter (+/- 14,708)
65+
test bench::from_str_m_stdlib_u32 ... bench: 4,101,845 ns/iter (+/- 205,802)
66+
test bench::from_str_m_stdlib_u64 ... bench: 6,823,001 ns/iter (+/- 267,215)
4567
```
4668

47-
Running with rustc 1.3.0-nightly (e5a28bca7 2015-06-25) @ x86 Linux - Intel(R) Xeon(R) CPU E5-2650 0 @ 2.00GHz (EC2 c1.medium)
69+
Running with rustc 1.3.0-nightly (e4e93196e 2015-07-14) @ x86 Linux - Intel(R) Xeon(R) CPU E5-2630L v2 @ 2.40GHz
4870

4971
```
50-
test bench::skewed_h_new_u08 ... bench: 128,062 ns/iter (+/- 624)
51-
test bench::skewed_h_new_u16 ... bench: 701,687 ns/iter (+/- 2,595)
52-
test bench::skewed_h_new_u32 ... bench: 8,013,071 ns/iter (+/- 86,295)
53-
test bench::skewed_h_new_u64 ... bench: 20,619,636 ns/iter (+/- 244,472)
54-
test bench::skewed_h_stdlib_u08 ... bench: 139,061 ns/iter (+/- 4,208)
55-
test bench::skewed_h_stdlib_u16 ... bench: 840,872 ns/iter (+/- 8,870)
56-
test bench::skewed_h_stdlib_u32 ... bench: 10,934,092 ns/iter (+/- 86,377)
57-
test bench::skewed_h_stdlib_u64 ... bench: 62,690,245 ns/iter (+/- 4,648,790)
58-
test bench::skewed_l_new_u08 ... bench: 128,245 ns/iter (+/- 1,491)
59-
test bench::skewed_l_new_u16 ... bench: 702,062 ns/iter (+/- 13,180)
60-
test bench::skewed_l_new_u32 ... bench: 8,021,507 ns/iter (+/- 325,452)
61-
test bench::skewed_l_new_u64 ... bench: 20,596,010 ns/iter (+/- 962,453)
62-
test bench::skewed_l_stdlib_u08 ... bench: 139,014 ns/iter (+/- 7,428)
63-
test bench::skewed_l_stdlib_u16 ... bench: 840,780 ns/iter (+/- 16,955)
64-
test bench::skewed_l_stdlib_u32 ... bench: 10,926,288 ns/iter (+/- 309,821)
65-
test bench::skewed_l_stdlib_u64 ... bench: 62,649,913 ns/iter (+/- 1,106,527)
66-
test bench::skewed_m_new_u08 ... bench: 128,949 ns/iter (+/- 16,267)
67-
test bench::skewed_m_new_u16 ... bench: 706,043 ns/iter (+/- 73,190)
68-
test bench::skewed_m_new_u32 ... bench: 8,001,205 ns/iter (+/- 219,644)
69-
test bench::skewed_m_new_u64 ... bench: 20,569,162 ns/iter (+/- 430,049)
70-
test bench::skewed_m_stdlib_u08 ... bench: 138,840 ns/iter (+/- 5,948)
71-
test bench::skewed_m_stdlib_u16 ... bench: 840,655 ns/iter (+/- 9,596)
72-
test bench::skewed_m_stdlib_u32 ... bench: 10,949,664 ns/iter (+/- 191,620)
73-
test bench::skewed_m_stdlib_u64 ... bench: 62,858,086 ns/iter (+/- 1,316,625)
72+
test bench::display_h_new_u08 ... bench: 94,246 ns/iter (+/- 34,872)
73+
test bench::display_h_new_u16 ... bench: 533,805 ns/iter (+/- 22,499)
74+
test bench::display_h_new_u32 ... bench: 6,127,747 ns/iter (+/- 2,192,789)
75+
test bench::display_h_new_u64 ... bench: 14,994,203 ns/iter (+/- 1,609,345)
76+
test bench::display_h_stdlib_u08 ... bench: 107,233 ns/iter (+/- 8,571)
77+
test bench::display_h_stdlib_u16 ... bench: 631,186 ns/iter (+/- 11,332)
78+
test bench::display_h_stdlib_u32 ... bench: 7,696,344 ns/iter (+/- 957,917)
79+
test bench::display_h_stdlib_u64 ... bench: 45,677,401 ns/iter (+/- 4,991,344)
80+
test bench::display_l_new_u08 ... bench: 95,855 ns/iter (+/- 27,735)
81+
test bench::display_l_new_u16 ... bench: 532,084 ns/iter (+/- 40,479)
82+
test bench::display_l_new_u32 ... bench: 5,973,953 ns/iter (+/- 211,676)
83+
test bench::display_l_new_u64 ... bench: 14,773,064 ns/iter (+/- 1,276,579)
84+
test bench::display_l_stdlib_u08 ... bench: 106,350 ns/iter (+/- 63,963)
85+
test bench::display_l_stdlib_u16 ... bench: 637,746 ns/iter (+/- 101,005)
86+
test bench::display_l_stdlib_u32 ... bench: 7,740,640 ns/iter (+/- 848,478)
87+
test bench::display_l_stdlib_u64 ... bench: 44,846,932 ns/iter (+/- 4,514,694)
88+
test bench::display_m_new_u08 ... bench: 94,549 ns/iter (+/- 13,029)
89+
test bench::display_m_new_u16 ... bench: 546,030 ns/iter (+/- 35,804)
90+
test bench::display_m_new_u32 ... bench: 5,983,924 ns/iter (+/- 1,180,559)
91+
test bench::display_m_new_u64 ... bench: 14,817,873 ns/iter (+/- 2,271,464)
92+
test bench::display_m_stdlib_u08 ... bench: 107,806 ns/iter (+/- 8,805)
93+
test bench::display_m_stdlib_u16 ... bench: 630,714 ns/iter (+/- 6,586)
94+
test bench::display_m_stdlib_u32 ... bench: 7,784,210 ns/iter (+/- 358,601)
95+
test bench::display_m_stdlib_u64 ... bench: 46,223,927 ns/iter (+/- 6,553,176)
96+
test bench::from_str_h_new_u08 ... bench: 23,682 ns/iter (+/- 3,590)
97+
test bench::from_str_h_new_u16 ... bench: 190,916 ns/iter (+/- 29,688)
98+
test bench::from_str_h_new_u32 ... bench: 2,649,952 ns/iter (+/- 308,576)
99+
test bench::from_str_h_new_u64 ... bench: 23,458,434 ns/iter (+/- 2,327,427)
100+
test bench::from_str_h_stdlib_u08 ... bench: 45,551 ns/iter (+/- 6,968)
101+
test bench::from_str_h_stdlib_u16 ... bench: 313,739 ns/iter (+/- 17,175)
102+
test bench::from_str_h_stdlib_u32 ... bench: 4,615,669 ns/iter (+/- 470,766)
103+
test bench::from_str_h_stdlib_u64 ... bench: 30,589,482 ns/iter (+/- 2,278,996)
104+
test bench::from_str_l_new_u08 ... bench: 23,763 ns/iter (+/- 5,545)
105+
test bench::from_str_l_new_u16 ... bench: 185,472 ns/iter (+/- 33,097)
106+
test bench::from_str_l_new_u32 ... bench: 2,691,307 ns/iter (+/- 473,886)
107+
test bench::from_str_l_new_u64 ... bench: 22,952,593 ns/iter (+/- 1,963,742)
108+
test bench::from_str_l_stdlib_u08 ... bench: 45,285 ns/iter (+/- 16,337)
109+
test bench::from_str_l_stdlib_u16 ... bench: 313,624 ns/iter (+/- 6,643)
110+
test bench::from_str_l_stdlib_u32 ... bench: 4,595,679 ns/iter (+/- 1,876,361)
111+
test bench::from_str_l_stdlib_u64 ... bench: 30,434,683 ns/iter (+/- 1,901,996)
112+
test bench::from_str_m_new_u08 ... bench: 23,812 ns/iter (+/- 1,505)
113+
test bench::from_str_m_new_u16 ... bench: 185,553 ns/iter (+/- 19,788)
114+
test bench::from_str_m_new_u32 ... bench: 2,614,920 ns/iter (+/- 66,230)
115+
test bench::from_str_m_new_u64 ... bench: 23,241,778 ns/iter (+/- 3,474,077)
116+
test bench::from_str_m_stdlib_u08 ... bench: 45,634 ns/iter (+/- 1,436)
117+
test bench::from_str_m_stdlib_u16 ... bench: 316,479 ns/iter (+/- 21,212)
118+
test bench::from_str_m_stdlib_u32 ... bench: 4,609,147 ns/iter (+/- 487,068)
119+
test bench::from_str_m_stdlib_u64 ... bench: 30,165,173 ns/iter (+/- 1,601,830)
74120
```
75-
76-
# TODO
77-
78-
* Possibly adapt the code and file a PR to rust stdlib?

0 commit comments

Comments
 (0)