1
- # Optimized (U)Int* format methods
1
+ # Optimized (U)Int* format/parse methods
2
2
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.
6
4
7
5
# Results
8
6
@@ -11,68 +9,112 @@ My hopes are that this work allows measurable improvements to json serializers.
11
9
* h (big numbers skew)
12
10
[ 0, 0, 5, 29, 103, 212, 551, 1138, 1887, 3196, 2879]
13
11
* 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 ]
15
13
* 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 ]
17
15
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)
19
17
20
18
```
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)
45
67
```
46
68
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
48
70
49
71
```
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)
74
120
```
75
-
76
- # TODO
77
-
78
- * Possibly adapt the code and file a PR to rust stdlib?
0 commit comments