Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.c++ > #82956
| Path | csiph.com!eternal-september.org!reader02.eternal-september.org!.POSTED!not-for-mail |
|---|---|
| From | Tim Rentsch <tr.17687@z991.linuxsc.com> |
| Newsgroups | comp.lang.c++ |
| Subject | Re: A better benchmark |
| Date | Mon, 07 Feb 2022 06:57:31 -0800 |
| Organization | A noiseless patient Spider |
| Lines | 182 |
| Message-ID | <86y22miv1g.fsf@linuxsc.com> (permalink) |
| References | <stj7m4$bim$1@dont-email.me> <stlq6s$8pc$1@dont-email.me> <stok2f$eg7$1@dont-email.me> |
| Mime-Version | 1.0 |
| Content-Type | text/plain; charset=us-ascii |
| Injection-Info | reader02.eternal-september.org; posting-host="792c2a82c28252afd7e8a94f82466189"; logging-data="23609"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX18ISFOcZ1PgtQyOkanfJ7mgS/lZgNb6GFY=" |
| User-Agent | Gnus/5.11 (Gnus v5.11) Emacs/22.4 (gnu/linux) |
| Cancel-Lock | sha1:1P8OyX1Qr46NnGcVx7d/sGOH1ik= sha1:siHTdJ61hHVNVOJLINNVQM5gECI= |
| Xref | csiph.com comp.lang.c++:82956 |
Show key headers only | View raw
Bonita Montero <Bonita.Montero@gmail.com> writes:
[.. some minor editing to fix line-wrapping problems ..]
> Now I have an even distribution from 1 to 20 digits.
>
> #include <iostream>
> #include <concepts>
> #include <array>
> #include <cstdio>
> #include <cstring>
> #include <chrono>
> #include <vector>
> #include <random>
>
> using namespace std;
> using namespace chrono;
>
> #if defined(_MSC_VER)
> #pragma warning(disable : 4996) // disable deprecated sprintf
> #pragma warning(disable : 6200) // array out of range
> #endif
>
> template<typename char_t>
> requires same_as<char_t, char> || same_as<char_t, wchar_t>
> char_t const *formatClockCyclesMine( uint64_t clockCycles );
> char const *formatClockCyclesTim( uint64_t clockCycles );
> char const *formatClockCyclesBen( uint64_t clockCycles );
>
> int main()
> {
> auto bench = []<typename FccFn>( FccFn fn )
> requires
> requires( FccFn fn, uint64_t clockCycles ) {
> { *fn( clockCycles ) } -> convertible_to<char>;
}
> {
> static size_t const N_VALUES = 10'000, N = 1'000;
> vector<uint64_t> values( N_VALUES );
> mt19937_64 mt;
> uniform_int_distribution<size_t> uidLength( 1, 20 );
> uniform_int_distribution<unsigned> uidDigit( 0, 9 );
> auto getNumber = [&]() -> uint64_t
> {
> uint64_t number = 0, nextNumber;
> size_t initialLength = uidLength( mt ), length = initialLength;
> unsigned digit;
> do
> if(
> (nextNumber = number * 10 + (digit = uidDigit( mt )))
> >= number
> )
> number = nextNumber;
> else
> number = 0,
> length = initialLength + 1;
> while( --length );
> return number;
> };
> for( uint64_t &v : values )
> v = getNumber();
> char volatile sum = 0;
> auto start = high_resolution_clock::now();
> for( size_t n = N; n--; )
> for( uint64_t v : values )
> sum += *fn( v );
> return
> (double)(int64_t)duration_cast<nanoseconds>(
> high_resolution_clock::now() - start
> ).count() / ((double)N * (double)N_VALUES);
> };
> cout << "mine: " << bench( formatClockCyclesMine<char> ) << endl;
> cout << "Tim: " << bench( formatClockCyclesTim ) << endl;
> cout << "Ben: " << bench( formatClockCyclesBen ) << endl;
> }
>
> #if defined(_MSC_VER)
> #define NOINLINE __declspec(noinline)
> #elif defined(__GNUC__) || defined(__llvm__)
> #define NOINLINE __attribute__((noinline))
> #elif
> #define NOINLINE
> #endif
>
> template<typename char_t>
> requires same_as<char_t, char> || same_as<char_t, wchar_t>
> NOINLINE
> char_t const *formatClockCyclesMine( uint64_t clockCycles )
> {
> using dig_arr_t = array<uint8_t, 20>; // max 20 digits for 64 bit
> using dig_arr_it = typename dig_arr_t::iterator;
> dig_arr_t reverseDigits;
> dig_arr_it rDigitsEnd = reverseDigits.begin();
> do
> *rDigitsEnd++ = clockCycles % 10,
> clockCycles /= 10;
> while( clockCycles );
> size_t
> digitsLen = rDigitsEnd - reverseDigits.begin(),
> groups = (digitsLen - 1) / 3;
> using str_arr_t = array<char_t, 20 + (20 - 1) / 3 + 1>;
> using str_arr_it = typename str_arr_t::iterator;
> thread_local str_arr_t str;
> str_arr_it wrt = str.begin() + digitsLen + groups;
> *wrt = '\0';
> dig_arr_it digit = reverseDigits.begin();
> for(
> dig_arr_it groupsEnd = reverseDigits.begin() + groups * 3;
> digit != groupsEnd;
> wrt -= 4, digit += 3
> )
> wrt[-1] = digit[0] + '0',
> wrt[-2] = digit[1] + '0',
> wrt[-3] = digit[2] + '0',
> wrt[-4] = '.';
> do
> *--wrt = *digit++ + '0';
> while( digit != rDigitsEnd );
> return &*wrt;
> }
>
> NOINLINE
> char const *formatClockCyclesTim( uint64_t clockCycles )
> {
> thread_local char result[20 + (20 - 1) / 3 + 1];
> size_t n =
> (unsigned)sprintf( result, "%llu",
> (unsigned long long) clockCycles );
> char *ep = (&result)[1];
> *--ep = 0;
> while( n > 3 )
> memmove( ep -= 3, &result[n -= 3], 3 ),
> *--ep = '.';
> do
> *--ep = result[--n];
> while( n );
> return ep;
> }
>
> NOINLINE
> char const *formatClockCyclesBen( uint64_t clockCycles )
> {
> thread_local char result[20 + (20 - 1) / 3 + 1];
> char *ep = (&result)[1];
> do
> {
> // initially with a missing cast, actually would have
> // run only on little endian machines
> sprintf( ep - 4, "%03lu", (unsigned long)(clockCycles % 1000) );
> if( ep != (&result)[1] )
> ep[-1] = '.';
> ep -= 4;
> } while( clockCycles /= 1000 );
> for( ; *ep == '0' && ep[1]; ++ep );
> return ep;
> }
>
> These are the resuls:
>
> MSVC 2022:
> mine: 29.8306
> Tim: 109.97
> Ben: 320.64
>
> g++ 11.1.0:
> mine: 28.3386
> Tim: 110.586
> Ben: 317.135
>
> clang++ 10.0.0:
> mine: 29.7089
> Tim: 100.721
> Ben: 311.768
The code that I posted was meant only to show an improvement on
the code in the posting to which I was responding. It wasn't
meant as any kind of comparison with any code you posted earlier.
After seeing the posting above, it wasn't hard to write a
simple routine that is both shorter and faster than the
formatClockCyclesMine() function shown above (using the code
shown above in main() to do the performance testing).
Back to comp.lang.c++ | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
C++20 concepts rocks Bonita Montero <Bonita.Montero@gmail.com> - 2022-02-04 13:54 +0100
Re: C++20 concepts rocks Muttley@dastardlyhq.com - 2022-02-04 14:25 +0000
Re: C++20 concepts rocks Bonita Montero <Bonita.Montero@gmail.com> - 2022-02-04 15:31 +0100
Re: C++20 concepts rocks Muttley@dastardlyhq.com - 2022-02-04 14:54 +0000
Re: C++20 concepts rocks Bonita Montero <Bonita.Montero@gmail.com> - 2022-02-04 17:41 +0100
Re: C++20 concepts rocks Muttley@dastardlyhq.com - 2022-02-05 11:31 +0000
Re: C++20 concepts rocks Bonita Montero <Bonita.Montero@gmail.com> - 2022-02-05 12:49 +0100
Re: C++20 concepts rocks Muttley@dastardlyhq.com - 2022-02-05 12:20 +0000
Re: C++20 concepts rocks Ben Bacarisse <ben.usenet@bsb.me.uk> - 2022-02-04 16:15 +0000
Re: C++20 concepts rocks Bonita Montero <Bonita.Montero@gmail.com> - 2022-02-04 17:43 +0100
Re: C++20 concepts rocks "Alf P. Steinbach" <alf.p.steinbach@gmail.com> - 2022-02-05 01:51 +0100
Re: C++20 concepts rocks Ben Bacarisse <ben.usenet@bsb.me.uk> - 2022-02-05 01:59 +0000
Re: C++20 concepts rocks James Kuyper <jameskuyper@alumni.caltech.edu> - 2022-02-04 23:05 -0500
Re: C++20 concepts rocks "Alf P. Steinbach" <alf.p.steinbach@gmail.com> - 2022-02-05 11:56 +0100
Re: C++20 concepts rocks David Brown <david.brown@hesbynett.no> - 2022-02-05 13:53 +0100
Re: C++20 concepts rocks "Alf P. Steinbach" <alf.p.steinbach@gmail.com> - 2022-02-05 14:12 +0100
Re: C++20 concepts rocks Anand Hariharan <mailto.anand.hariharan@gmail.com> - 2022-02-12 11:13 -0800
Re: C++20 concepts rocks James Kuyper <jameskuyper@alumni.caltech.edu> - 2022-02-12 22:18 -0500
Re: C++20 concepts rocks Richard Damon <Richard@Damon-Family.org> - 2022-02-13 12:51 -0500
Re: C++20 concepts rocks Paavo Helde <eesnimi@osa.pri.ee> - 2022-02-13 20:16 +0200
Re: C++20 concepts rocks James Kuyper <jameskuyper@alumni.caltech.edu> - 2022-02-13 14:12 -0500
Re: C++20 concepts rocks Richard Damon <Richard@Damon-Family.org> - 2022-02-13 16:22 -0500
Re: C++20 concepts rocks James Kuyper <jameskuyper@alumni.caltech.edu> - 2022-02-13 17:18 -0500
Re: C++20 concepts rocks Öö Tiib <ootiib@hot.ee> - 2022-02-14 00:51 -0800
Re: C++20 concepts rocks "james...@alumni.caltech.edu" <jameskuyper@alumni.caltech.edu> - 2022-02-14 08:29 -0800
Re: C++20 concepts rocks Tim Rentsch <tr.17687@z991.linuxsc.com> - 2022-02-04 23:37 -0800
Re: C++20 concepts rocks "Alf P. Steinbach" <alf.p.steinbach@gmail.com> - 2022-02-05 11:58 +0100
Re: C++20 concepts rocks Tim Rentsch <tr.17687@z991.linuxsc.com> - 2022-02-06 02:16 -0800
Re: C++20 concepts rocks "james...@alumni.caltech.edu" <jameskuyper@alumni.caltech.edu> - 2022-02-05 12:35 -0800
Re: C++20 concepts rocks Tim Rentsch <tr.17687@z991.linuxsc.com> - 2022-02-06 05:54 -0800
Re: C++20 concepts rocks Manfred <noname@add.invalid> - 2022-02-06 19:43 +0100
Re: C++20 concepts rocks Tim Rentsch <tr.17687@z991.linuxsc.com> - 2022-02-04 23:53 -0800
Re: C++20 concepts rocks red floyd <no.spam.here@its.invalid> - 2022-02-05 10:10 -0800
Re: C++20 concepts rocks Bonita Montero <Bonita.Montero@gmail.com> - 2022-02-05 19:51 +0100
Re: C++20 concepts rocks red floyd <no.spam.here@its.invalid> - 2022-02-05 16:42 -0800
Re: C++20 concepts rocks Ben Bacarisse <ben.usenet@bsb.me.uk> - 2022-02-06 01:39 +0000
Re: C++20 concepts rocks red floyd <no.spam.here@its.invalid> - 2022-02-05 18:02 -0800
Re: C++20 concepts rocks Bonita Montero <Bonita.Montero@gmail.com> - 2022-02-06 09:57 +0100
Re: C++20 concepts rocks "Alf P. Steinbach" <alf.p.steinbach@gmail.com> - 2022-02-06 10:57 +0100
Re: C++20 concepts rocks Bonita Montero <Bonita.Montero@gmail.com> - 2022-02-06 12:40 +0100
Re: C++20 concepts rocks Öö Tiib <ootiib@hot.ee> - 2022-02-06 03:53 -0800
Re: C++20 concepts rocks Ben Bacarisse <ben.usenet@bsb.me.uk> - 2022-02-06 14:35 +0000
Re: C++20 concepts rocks Tim Rentsch <tr.17687@z991.linuxsc.com> - 2022-02-06 11:20 -0800
Re: C++20 concepts rocks Ben Bacarisse <ben.usenet@bsb.me.uk> - 2022-02-06 21:53 +0000
Re: C++20 concepts rocks Tim Rentsch <tr.17687@z991.linuxsc.com> - 2022-02-06 19:03 -0800
Re: C++20 concepts rocks Ben Bacarisse <ben.usenet@bsb.me.uk> - 2022-02-07 11:50 +0000
Re: C++20 concepts rocks Tim Rentsch <tr.17687@z991.linuxsc.com> - 2022-02-07 06:26 -0800
Re: C++20 concepts rocks Ben Bacarisse <ben.usenet@bsb.me.uk> - 2022-02-07 15:48 +0000
Re: C++20 concepts rocks Tim Rentsch <tr.17687@z991.linuxsc.com> - 2022-02-07 12:16 -0800
Re: C++20 concepts rocks Tim Rentsch <tr.17687@z991.linuxsc.com> - 2022-02-07 22:27 -0800
Re: C++20 concepts rocks Ben Bacarisse <ben.usenet@bsb.me.uk> - 2022-02-09 21:43 +0000
Re: C++20 concepts rocks James Kuyper <jameskuyper@alumni.caltech.edu> - 2022-02-09 21:07 -0500
Re: C++20 concepts rocks Tim Rentsch <tr.17687@z991.linuxsc.com> - 2022-02-09 21:25 -0800
Re: C++20 concepts rocks Ben Bacarisse <ben.usenet@bsb.me.uk> - 2022-02-10 13:05 +0000
Re: C++20 concepts rocks James Kuyper <jameskuyper@alumni.caltech.edu> - 2022-02-10 11:19 -0500
Re: C++20 concepts rocks Tim Rentsch <tr.17687@z991.linuxsc.com> - 2022-02-11 05:41 -0800
Re: C++20 concepts rocks "Alf P. Steinbach" <alf.p.steinbach@gmail.com> - 2022-02-11 17:06 +0100
Re: C++20 concepts rocks James Kuyper <jameskuyper@alumni.caltech.edu> - 2022-02-11 11:50 -0500
Re: C++20 concepts rocks "Alf P. Steinbach" <alf.p.steinbach@gmail.com> - 2022-02-11 21:13 +0100
Re: C++20 concepts rocks scott@slp53.sl.home (Scott Lurndal) - 2022-02-11 17:06 +0000
Re: C++20 concepts rocks Tim Rentsch <tr.17687@z991.linuxsc.com> - 2022-02-15 00:10 -0800
Re: C++20 concepts rocks "Alf P. Steinbach" <alf.p.steinbach@gmail.com> - 2022-02-15 20:58 +0100
Re: C++20 concepts rocks Juha Nieminen <nospam@thanks.invalid> - 2022-02-16 06:40 +0000
Re: C++20 concepts rocks "Alf P. Steinbach" <alf.p.steinbach@gmail.com> - 2022-02-16 09:54 +0100
Re: C++20 concepts rocks Muttley@dastardlyhq.com - 2022-02-16 09:00 +0000
Re: C++20 concepts rocks "Alf P. Steinbach" <alf.p.steinbach@gmail.com> - 2022-02-16 20:25 +0100
Re: C++20 concepts rocks Muttley@dastardlyhq.com - 2022-02-17 08:53 +0000
Re: C++20 concepts rocks Paavo Helde <eesnimi@osa.pri.ee> - 2022-02-17 16:11 +0200
Re: C++20 concepts rocks James Kuyper <jameskuyper@alumni.caltech.edu> - 2022-02-17 10:58 -0500
Re: C++20 concepts rocks Juha Nieminen <nospam@thanks.invalid> - 2022-02-17 07:32 +0000
Re: C++20 concepts rocks Tim Rentsch <tr.17687@z991.linuxsc.com> - 2022-04-19 02:21 -0700
Re: C++20 concepts rocks "Alf P. Steinbach" <alf.p.steinbach@gmail.com> - 2022-04-19 11:56 +0200
Re: C++20 concepts rocks Tim Rentsch <tr.17687@z991.linuxsc.com> - 2022-04-25 03:02 -0700
Re: C++20 concepts rocks Ben Bacarisse <ben.usenet@bsb.me.uk> - 2022-02-12 00:01 +0000
Re: C++20 concepts rocks Tim Rentsch <tr.17687@z991.linuxsc.com> - 2022-02-14 23:55 -0800
Re: C++20 concepts rocks Bonita Montero <Bonita.Montero@gmail.com> - 2022-02-07 18:31 +0100
Re: C++20 concepts rocks scott@slp53.sl.home (Scott Lurndal) - 2022-02-07 17:43 +0000
Re: C++20 concepts rocks James Kuyper <jameskuyper@alumni.caltech.edu> - 2022-02-06 14:25 -0500
Re: C++20 concepts rocks Tim Rentsch <tr.17687@z991.linuxsc.com> - 2022-02-06 02:01 -0800
Re: C++20 concepts rocks red floyd <no.spam.here@its.invalid> - 2022-02-06 19:37 -0800
Re: C++20 concepts rocks Bonita Montero <Bonita.Montero@gmail.com> - 2022-02-07 10:18 +0100
Re: C++20 concepts rocks Paavo Helde <eesnimi@osa.pri.ee> - 2022-02-07 11:32 +0200
Re: C++20 concepts rocks red floyd <no.spam.here@its.invalid> - 2022-02-07 07:55 -0800
Re: C++20 concepts rocks Tim Rentsch <tr.17687@z991.linuxsc.com> - 2022-02-06 02:11 -0800
Re: C++20 concepts rocks "Alf P. Steinbach" <alf.p.steinbach@gmail.com> - 2022-02-06 13:13 +0100
Re: C++20 concepts rocks Tim Rentsch <tr.17687@z991.linuxsc.com> - 2022-02-06 04:58 -0800
Re: C++20 concepts rocks Bonita Montero <Bonita.Montero@gmail.com> - 2022-02-06 14:08 +0100
Re: C++20 concepts rocks Bonita Montero <Bonita.Montero@gmail.com> - 2022-02-05 12:48 +0100
Re: C++20 concepts rocks Juha Nieminen <nospam@thanks.invalid> - 2022-02-04 20:15 +0000
Re: C++20 concepts rocks Muttley@dastardlyhq.com - 2022-02-05 11:32 +0000
Re: C++20 concepts rocks Juha Nieminen <nospam@thanks.invalid> - 2022-02-06 08:28 +0000
Re: C++20 concepts rocks Muttley@dastardlyhq.com - 2022-02-07 09:52 +0000
Re: C++20 concepts rocks Juha Nieminen <nospam@thanks.invalid> - 2022-02-08 07:05 +0000
Re: C++20 concepts rocks Muttley@dastardlyhq.com - 2022-02-08 09:25 +0000
Re: C++20 concepts rocks Juha Nieminen <nospam@thanks.invalid> - 2022-02-08 10:09 +0000
Re: C++20 concepts rocks Andrey Tarasevich <andreytarasevich@hotmail.com> - 2022-02-04 12:10 -0800
Re: C++20 concepts rocks Bonita Montero <Bonita.Montero@gmail.com> - 2022-02-05 13:41 +0100
Re: C++20 concepts rocks "Chris M. Thomasson" <chris.m.thomasson.1@gmail.com> - 2022-02-05 19:28 -0800
A little benchmark: Bonita Montero <Bonita.Montero@gmail.com> - 2022-02-05 13:22 +0100
A better benchmark Bonita Montero <Bonita.Montero@gmail.com> - 2022-02-06 14:56 +0100
A improved routine Bonita Montero <Bonita.Montero@gmail.com> - 2022-02-07 15:19 +0100
Re: A better benchmark Tim Rentsch <tr.17687@z991.linuxsc.com> - 2022-02-07 06:57 -0800
Re: A better benchmark Bonita Montero <Bonita.Montero@gmail.com> - 2022-02-07 18:30 +0100
csiph-web