new decimal conversion - seeking testers
Nishanth Aravamudan
nacc at linux.vnet.ibm.com
Fri Mar 13 12:05:57 AEDT 2015
On 13.03.2015 [00:09:19 +0100], Rasmus Villemoes wrote:
> Hi,
>
> I've proposed a new implementation of decimal conversion for
> lib/vsprintf.c; see
> <http://thread.gmane.org/gmane.linux.kernel/1892035/focus=1905478>.
> Benchmarking so far shows 25-50% (depending on distribution of input
> numbers) improvement on x86_64 and 10-30% on various 32 bit platforms.
>
> Since the new code plays a little endianness game I would really
> appreciate it if someone here would run the test and verification code
> on ppc.
>
> The code is on github, https://github.com/Villemoes/dec, and it should
> be as simple as
>
> git clone https://github.com/Villemoes/dec.git
> cd dec
> make
> ./test # benchmark
> ./verify # correctness
>
> though I can't blame you if you want to inspect the code before
> compiling and running something some stranger asks you to download :-)
> See also the README file.
>
> If 'make' doesn't work out-of-the-box, I'd also like to hear from you.
On a ppc64le box:
./test
Distribution Function nsecs/conv Conv/1 sec
uniform([10, 2^64-1]) linux_put_dec 56.04 17785895
uniform([10, 2^64-1]) rv_put_dec 31.97 31190888
+/- -42.94% +75.37%
3 + neg_binom(0.05) linux_put_dec 29.55 32986465
3 + neg_binom(0.05) rv_put_dec 24.61 39416630
+/- -16.71% +19.49%
3 + neg_binom(0.10) linux_put_dec 22.16 43993836
3 + neg_binom(0.10) rv_put_dec 18.76 50767222
+/- -15.34% +15.40%
3 + neg_binom(0.15) linux_put_dec 18.97 51272565
3 + neg_binom(0.15) rv_put_dec 16.18 58328176
+/- -14.70% +13.76%
3 + neg_binom(0.20) linux_put_dec 16.79 57792783
3 + neg_binom(0.20) rv_put_dec 14.03 66418077
+/- -16.45% +14.92%
3 + neg_binom(0.50) linux_put_dec 10.81 89762669
3 + neg_binom(0.50) rv_put_dec 9.40 104336963
+/- -13.08% +16.24%
./verify
Using 16 threads
Checking [10, 10000000000] and [18446744063709551615,
18446744073709551615]
Thread 9: low range ok
Thread 13: low range ok
Thread 10: low range ok
Thread 15: low range ok
Thread 7: low range ok
Thread 5: low range ok
Thread 14: low range ok
Thread 0: low range ok
Thread 3: low range ok
Thread 1: low range ok
Thread 2: low range ok
Thread 4: low range ok
Thread 8: low range ok
Thread 12: low range ok
Thread 6: low range ok
Thread 11: low range ok
Thread 9: high range ok
Thread 10: high range ok
Thread 7: high range ok
Thread 13: high range ok
Thread 0: high range ok
Thread 14: high range ok
Thread 15: high range ok
Thread 5: high range ok
Thread 1: high range ok
Thread 8: high range ok
Thread 11: high range ok
Thread 6: high range ok
Thread 2: high range ok
Thread 12: high range ok
Thread 3: high range ok
Thread 4: high range ok
Thread 9: mid range ok
Thread 0: mid range ok
Thread 14: mid range ok
Thread 7: mid range ok
Thread 10: mid range ok
Thread 8: mid range ok
Thread 2: mid range ok
Thread 11: mid range ok
Thread 13: mid range ok
Thread 1: mid range ok
Thread 6: mid range ok
Thread 15: mid range ok
Thread 5: mid range ok
Thread 4: mid range ok
Thread 3: mid range ok
Thread 12: mid range ok
Distribution of lengths checked:
1 5
2 101
3 900
4 9000
5 90000
6 900000
7 9000000
8 90000000
9 900000000
10 9000000000
11 81
12 848
13 8384
14 83808
15 838192
16 8381904
17 83819040
18 838190304
19 8381903184
20 17866643425
On a ppc64 box:
./test
Distribution Function nsecs/conv Conv/1 sec
uniform([10, 2^64-1]) linux_put_dec 48.97 20478528
uniform([10, 2^64-1]) rv_put_dec 32.14 31915074
+/- -34.37% +55.85%
3 + neg_binom(0.05) linux_put_dec 25.60 38732189
3 + neg_binom(0.05) rv_put_dec 20.18 48828445
+/- -21.18% +26.07%
3 + neg_binom(0.10) linux_put_dec 18.70 52648284
3 + neg_binom(0.10) rv_put_dec 15.60 62915143
+/- -16.56% +19.50%
3 + neg_binom(0.15) linux_put_dec 15.27 64695363
3 + neg_binom(0.15) rv_put_dec 13.34 73279482
+/- -12.62% +13.27%
3 + neg_binom(0.20) linux_put_dec 13.25 74240237
3 + neg_binom(0.20) rv_put_dec 11.52 83711009
+/- -13.04% +12.76%
3 + neg_binom(0.50) linux_put_dec 9.14 106966472
3 + neg_binom(0.50) rv_put_dec 7.59 126799499
+/- -16.92% +18.54%
./verify
Using 12 threads
Checking [10, 10000000000] and [18446744063709551615,
18446744073709551615]
Thread 5: low range ok
Thread 10: low range ok
Thread 0: low range ok
Thread 4: low range ok
Thread 1: low range ok
Thread 2: low range ok
Thread 7: low range ok
Thread 8: low range ok
Thread 3: low range ok
Thread 9: low range ok
Thread 11: low range ok
Thread 6: low range ok
Thread 5: high range ok
Thread 10: high range ok
Thread 0: high range ok
Thread 7: high range ok
Thread 2: high range ok
Thread 4: high range ok
Thread 1: high range ok
Thread 8: high range ok
Thread 3: high range ok
Thread 9: high range ok
Thread 11: high range ok
Thread 6: high range ok
Thread 0: mid range ok
Thread 11: mid range ok
Thread 10: mid range ok
Thread 7: mid range ok
Thread 2: mid range ok
Thread 3: mid range ok
Thread 5: mid range ok
Thread 8: mid range ok
Thread 4: mid range ok
Thread 6: mid range ok
Thread 1: mid range ok
Thread 9: mid range ok
Distribution of lengths checked:
1 5
2 97
3 900
4 9000
5 90000
6 900000
7 9000000
8 90000000
9 900000000
10 9000000000
11 61
12 636
13 6288
14 62856
15 628644
16 6286428
17 62864280
18 628642728
19 6286427388
20 15899982569
-Nish
More information about the Linuxppc-dev
mailing list