All of lore.kernel.org
 help / color / mirror / Atom feed
From: Nishanth Aravamudan <nacc@linux.vnet.ibm.com>
To: Rasmus Villemoes <linux@rasmusvillemoes.dk>
Cc: linuxppc-dev@lists.ozlabs.org
Subject: Re: new decimal conversion - seeking testers
Date: Thu, 12 Mar 2015 18:05:57 -0700	[thread overview]
Message-ID: <20150313010557.GA23117@linux.vnet.ibm.com> (raw)
In-Reply-To: <87fv99x17k.fsf@rasmusvillemoes.dk>

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

  reply	other threads:[~2015-03-13  1:06 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-03-12 23:09 new decimal conversion - seeking testers Rasmus Villemoes
2015-03-13  1:05 ` Nishanth Aravamudan [this message]
2015-03-19 20:59   ` Rasmus Villemoes

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20150313010557.GA23117@linux.vnet.ibm.com \
    --to=nacc@linux.vnet.ibm.com \
    --cc=linux@rasmusvillemoes.dk \
    --cc=linuxppc-dev@lists.ozlabs.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.