On Mon, 29 Jul 2024 at 09:42, Ehrnsperger, Markus
<markus_ehrnsper...@yahoo.de> wrote:
>
> Hi,
>
>
> I'm attaching two files:
>
> 1.:   to_chars10.h:
>
> This is intended to be included in libstdc++ / gcc to achieve performance 
> improvements. It is an implementation of
>
> to_chars10(char* first, char* last,  /* integer-type */ value);
>
> Parameters are identical to std::to_chars(char* first, char* last,  /* 
> integer-type */ value, int base = 10 ); . It only works for base == 10.
>
> If it is included in libstdc++, to_chars10(...) could be renamed to 
> std::to_chars(char* first, char* last,  /* integer-type */ value) to provide 
> an overload for the default base = 10

Thanks for the email. This isn't in the form of a patch that we can
accept as-is, although I see that the license is compatible with
libstdc++, so if you are looking to contribute it then that could be
done either by assigning copyright to the FSF or under the DCO terms.
See https://gcc.gnu.org/contribute.html#legal for more details.

I haven't looked at the code in detail, but is it a similar approach
to https://jk-jeon.github.io/posts/2022/02/jeaiii-algorithm/ ?
How does it compare to the performance of that algorithm?

I have an incomplete implementation of that algorithm for libstdc++
somewhere, but I haven't looked at it for a while.


>
> 2.:  to_chars10.cpp:
>
> This is a test program for to_chars10 verifying the correctness of the 
> results, and measuring the performance. The actual performance improvement is 
> system dependent, so please test on your own system.
>
> On my system the performance improvement is about factor two, my results are:
>
>
> Test   int8_t verifying to_chars10 = std::to_chars ... OK
> Test  uint8_t verifying to_chars10 = std::to_chars ... OK
> Test  int16_t verifying to_chars10 = std::to_chars ... OK
> Test uint16_t verifying to_chars10 = std::to_chars ... OK
> Test  int32_t verifying to_chars10 = std::to_chars ... OK
> Test uint32_t verifying to_chars10 = std::to_chars ... OK
> Test  int64_t verifying to_chars10 = std::to_chars ... OK
> Test uint64_t verifying to_chars10 = std::to_chars ... OK
>
> Benchmarking test case               tested method  ...  time (lower is 
> better)
> Benchmarking random unsigned 64 bit  to_chars10     ...  0.00957
> Benchmarking random unsigned 64 bit  std::to_chars  ...  0.01854
> Benchmarking random   signed 64 bit  to_chars10     ...  0.01018
> Benchmarking random   signed 64 bit  std::to_chars  ...  0.02297
> Benchmarking random unsigned 32 bit  to_chars10     ...  0.00620
> Benchmarking random unsigned 32 bit  std::to_chars  ...  0.01275
> Benchmarking random   signed 32 bit  to_chars10     ...  0.00783
> Benchmarking random   signed 32 bit  std::to_chars  ...  0.01606
> Benchmarking random unsigned 16 bit  to_chars10     ...  0.00536
> Benchmarking random unsigned 16 bit  std::to_chars  ...  0.00871
> Benchmarking random   signed 16 bit  to_chars10     ...  0.00664
> Benchmarking random   signed 16 bit  std::to_chars  ...  0.01154
> Benchmarking random unsigned 08 bit  to_chars10     ...  0.00393
> Benchmarking random unsigned 08 bit  std::to_chars  ...  0.00626
> Benchmarking random   signed 08 bit  to_chars10     ...  0.00465
> Benchmarking random   signed 08 bit  std::to_chars  ...  0.01089
>
>
> Thanks, Markus
>
>
>

Reply via email to