public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c++/107660] New: Running binaries compiled with g++11 or later produces different results than g++ version 10 or earlier
@ 2022-11-12  3:28 t3suzuki at ucsd dot edu
  2022-11-12  3:49 ` [Bug c++/107660] " redi at gcc dot gnu.org
                   ` (9 more replies)
  0 siblings, 10 replies; 11+ messages in thread
From: t3suzuki at ucsd dot edu @ 2022-11-12  3:28 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107660

            Bug ID: 107660
           Summary: Running binaries compiled with g++11 or later produces
                    different results than g++ version 10 or earlier
           Product: gcc
           Version: 12.2.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: t3suzuki at ucsd dot edu
  Target Milestone: ---

[gcc version]
$ ./g++ -v
Using built-in specs.
COLLECT_GCC=./g++
COLLECT_LTO_WRAPPER=/home/tomoya-s/gcc-12.2.0/install/libexec/gcc/x86_64-pc-linux-gnu/12.2.0/lto-wrapper
Target: x86_64-pc-linux-gnu
Configured with: ./configure --prefix=/home/tomoya-s/gcc-12.2.0/install
--disable-multilib
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 12.2.0 (GCC)

[the command line that triggers the bug]
% git clone https://github.com/sbeamer/gapbs.git
% cd gapbs
% make bfs
% ./bfs -g 10 -n 1

[the output by using g++-12.2.0 (or g++-11) ]
Generate Time:       0.00282
Build Time:          0.00044
Graph has 1024 nodes and 10496 undirected edges for degree: 10
Source:                  204
    i                0.00001
   td          2     0.00000
   td         59     0.00000
    e                0.00000
   bu        711     0.00003
   bu        123     0.00001
   bu          0     0.00001
    c                0.00000
Trial Time:          0.00017
Average Time:        0.00017

[the output by using g++-10 or earlier or clang++]
Generate Time:       0.00797
Build Time:          0.00102
Graph has 1024 nodes and 10496 undirected edges for degree: 10
Source:                  204
    i                0.00001
   td         15     0.00001
    e                0.00000
   bu        615     0.00004
   bu        264     0.00001
   bu          1     0.00001
    c                0.00000
   td          0     0.00000
Trial Time:          0.00017
Average Time:        0.00017

Of course, the execution time is different.

We expect the numbers 2 and 59 and 711 after td and bu to be the same.
This is because the input and the process itself are the same, and there is no
randomness inside the process (random seed is fixed).

Note that this program uses OpenMP, but even if we disable it, the results will
be different depending on the g++ version as well.

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [Bug c++/107660] Running binaries compiled with g++11 or later produces different results than g++ version 10 or earlier
  2022-11-12  3:28 [Bug c++/107660] New: Running binaries compiled with g++11 or later produces different results than g++ version 10 or earlier t3suzuki at ucsd dot edu
@ 2022-11-12  3:49 ` redi at gcc dot gnu.org
  2022-11-12  5:45 ` t3suzuki at ucsd dot edu
                   ` (8 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: redi at gcc dot gnu.org @ 2022-11-12  3:49 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107660

Jonathan Wakely <redi at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
   Last reconfirmed|                            |2022-11-12
     Ever confirmed|0                           |1
             Status|UNCONFIRMED                 |WAITING

--- Comment #1 from Jonathan Wakely <redi at gcc dot gnu.org> ---
As requested when creating the bug, please read https://gcc.gnu.org/bugs/ and
provide the missing information.

You're asking us to download and analyze a whole codebase we've never seen
before, which means your bug report will probably not get much attention.

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [Bug c++/107660] Running binaries compiled with g++11 or later produces different results than g++ version 10 or earlier
  2022-11-12  3:28 [Bug c++/107660] New: Running binaries compiled with g++11 or later produces different results than g++ version 10 or earlier t3suzuki at ucsd dot edu
  2022-11-12  3:49 ` [Bug c++/107660] " redi at gcc dot gnu.org
@ 2022-11-12  5:45 ` t3suzuki at ucsd dot edu
  2022-11-12  5:57 ` t3suzuki at ucsd dot edu
                   ` (7 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: t3suzuki at ucsd dot edu @ 2022-11-12  5:45 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107660

--- Comment #2 from Tomoya Suzuki <t3suzuki at ucsd dot edu> ---
I Sorry I didn't follow your bug report guidelines. After this, I investigated
the cause by myself, and it seems that there is a difference in the output of
the std::shuffle function. Even if the input and random number configurations
of the shuffle function are the same, can the output differ depending on the
gcc version?

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [Bug c++/107660] Running binaries compiled with g++11 or later produces different results than g++ version 10 or earlier
  2022-11-12  3:28 [Bug c++/107660] New: Running binaries compiled with g++11 or later produces different results than g++ version 10 or earlier t3suzuki at ucsd dot edu
  2022-11-12  3:49 ` [Bug c++/107660] " redi at gcc dot gnu.org
  2022-11-12  5:45 ` t3suzuki at ucsd dot edu
@ 2022-11-12  5:57 ` t3suzuki at ucsd dot edu
  2022-11-13 20:18 ` pinskia at gcc dot gnu.org
                   ` (6 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: t3suzuki at ucsd dot edu @ 2022-11-12  5:57 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107660

--- Comment #3 from Tomoya Suzuki <t3suzuki at ucsd dot edu> ---
Perhaps I should ask the question in libc instead of gcc?

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [Bug c++/107660] Running binaries compiled with g++11 or later produces different results than g++ version 10 or earlier
  2022-11-12  3:28 [Bug c++/107660] New: Running binaries compiled with g++11 or later produces different results than g++ version 10 or earlier t3suzuki at ucsd dot edu
                   ` (2 preceding siblings ...)
  2022-11-12  5:57 ` t3suzuki at ucsd dot edu
@ 2022-11-13 20:18 ` pinskia at gcc dot gnu.org
  2022-11-13 20:21 ` [Bug libstdc++/107660] " pinskia at gcc dot gnu.org
                   ` (5 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: pinskia at gcc dot gnu.org @ 2022-11-13 20:18 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107660

--- Comment #4 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
std::mt19937

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [Bug libstdc++/107660] Running binaries compiled with g++11 or later produces different results than g++ version 10 or earlier
  2022-11-12  3:28 [Bug c++/107660] New: Running binaries compiled with g++11 or later produces different results than g++ version 10 or earlier t3suzuki at ucsd dot edu
                   ` (3 preceding siblings ...)
  2022-11-13 20:18 ` pinskia at gcc dot gnu.org
@ 2022-11-13 20:21 ` pinskia at gcc dot gnu.org
  2022-11-15  1:47 ` redi at gcc dot gnu.org
                   ` (4 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: pinskia at gcc dot gnu.org @ 2022-11-13 20:21 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107660

--- Comment #5 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
(In reply to Andrew Pinski from comment #4)
> std::mt19937

r11-4535-g822c1d21a3c710

Hmm, this might be expected ....

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [Bug libstdc++/107660] Running binaries compiled with g++11 or later produces different results than g++ version 10 or earlier
  2022-11-12  3:28 [Bug c++/107660] New: Running binaries compiled with g++11 or later produces different results than g++ version 10 or earlier t3suzuki at ucsd dot edu
                   ` (4 preceding siblings ...)
  2022-11-13 20:21 ` [Bug libstdc++/107660] " pinskia at gcc dot gnu.org
@ 2022-11-15  1:47 ` redi at gcc dot gnu.org
  2022-11-15 17:50 ` t3suzuki at ucsd dot edu
                   ` (3 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: redi at gcc dot gnu.org @ 2022-11-15  1:47 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107660

--- Comment #6 from Jonathan Wakely <redi at gcc dot gnu.org> ---
It's expected and required by the standard that std::mt19937 produces the same
numbers every time. And if I run a test for GCC 10 and GCC 11 I see the same
number produced for the first 2.14 billion results.

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [Bug libstdc++/107660] Running binaries compiled with g++11 or later produces different results than g++ version 10 or earlier
  2022-11-12  3:28 [Bug c++/107660] New: Running binaries compiled with g++11 or later produces different results than g++ version 10 or earlier t3suzuki at ucsd dot edu
                   ` (5 preceding siblings ...)
  2022-11-15  1:47 ` redi at gcc dot gnu.org
@ 2022-11-15 17:50 ` t3suzuki at ucsd dot edu
  2022-11-15 19:24 ` redi at gcc dot gnu.org
                   ` (2 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: t3suzuki at ucsd dot edu @ 2022-11-15 17:50 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107660

--- Comment #7 from Tomoya Suzuki <t3suzuki at ucsd dot edu> ---
The following code appears to me to work differently with gcc10 and gcc11.

#include <vector>
#include <algorithm>
#include <random>

int kRandSeed = 27491095;

int
main()
{
  const int n = 16384;
  std::vector<int> v(n);
  std::mt19937 rng(kRandSeed);
  //std::minstd_rand rng;

  for (int i=0; i < n; i++)
    v[i] = i;

  std::shuffle(v.begin(), v.end(), rng);

  for (int i=0; i < n; i++)
    printf("%d\n", v[i]);
}

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [Bug libstdc++/107660] Running binaries compiled with g++11 or later produces different results than g++ version 10 or earlier
  2022-11-12  3:28 [Bug c++/107660] New: Running binaries compiled with g++11 or later produces different results than g++ version 10 or earlier t3suzuki at ucsd dot edu
                   ` (6 preceding siblings ...)
  2022-11-15 17:50 ` t3suzuki at ucsd dot edu
@ 2022-11-15 19:24 ` redi at gcc dot gnu.org
  2022-11-16  1:41 ` t3suzuki at ucsd dot edu
  2022-11-16 12:33 ` redi at gcc dot gnu.org
  9 siblings, 0 replies; 11+ messages in thread
From: redi at gcc dot gnu.org @ 2022-11-15 19:24 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107660

Jonathan Wakely <redi at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|WAITING                     |UNCONFIRMED
     Ever confirmed|1                           |0

--- Comment #8 from Jonathan Wakely <redi at gcc dot gnu.org> ---
Thanks for the reduced example code, I can see what the problem is now.

The mt19937 engine produces consistent results, but the commit that Andrew
linked to alters the output of std::uniform_int_distribution, due to a
different (much faster) algorithm used to downscale the random bits produced by
std::mt19937 to the number of elements being shuffled. The only requirement on
the uniform_int_distribution is that it produces values uniformly distributed
between the minimum and maximum values. Unlike std::mt19937 it doesn't have to
produce a specific sequence of values.

I supposed we could add a macro that disables the new fast implementation, for
users who prefer to get the same sequence of values as GCC 10, even though it's
slower.

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [Bug libstdc++/107660] Running binaries compiled with g++11 or later produces different results than g++ version 10 or earlier
  2022-11-12  3:28 [Bug c++/107660] New: Running binaries compiled with g++11 or later produces different results than g++ version 10 or earlier t3suzuki at ucsd dot edu
                   ` (7 preceding siblings ...)
  2022-11-15 19:24 ` redi at gcc dot gnu.org
@ 2022-11-16  1:41 ` t3suzuki at ucsd dot edu
  2022-11-16 12:33 ` redi at gcc dot gnu.org
  9 siblings, 0 replies; 11+ messages in thread
From: t3suzuki at ucsd dot edu @ 2022-11-16  1:41 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107660

--- Comment #9 from Tomoya Suzuki <t3suzuki at ucsd dot edu> ---
Thanks for clarifying the cause. I don't think you need to add the macro just
for me, gcc11 behavior is not critical for me.

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [Bug libstdc++/107660] Running binaries compiled with g++11 or later produces different results than g++ version 10 or earlier
  2022-11-12  3:28 [Bug c++/107660] New: Running binaries compiled with g++11 or later produces different results than g++ version 10 or earlier t3suzuki at ucsd dot edu
                   ` (8 preceding siblings ...)
  2022-11-16  1:41 ` t3suzuki at ucsd dot edu
@ 2022-11-16 12:33 ` redi at gcc dot gnu.org
  9 siblings, 0 replies; 11+ messages in thread
From: redi at gcc dot gnu.org @ 2022-11-16 12:33 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107660

Jonathan Wakely <redi at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |RESOLVED
         Resolution|---                         |WONTFIX

--- Comment #10 from Jonathan Wakely <redi at gcc dot gnu.org> ---
OK, thanks for clarifying. Let's close this as WONTFIX then, but I might
revisit it in future if others need stable results from the distribution.

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2022-11-16 12:34 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-11-12  3:28 [Bug c++/107660] New: Running binaries compiled with g++11 or later produces different results than g++ version 10 or earlier t3suzuki at ucsd dot edu
2022-11-12  3:49 ` [Bug c++/107660] " redi at gcc dot gnu.org
2022-11-12  5:45 ` t3suzuki at ucsd dot edu
2022-11-12  5:57 ` t3suzuki at ucsd dot edu
2022-11-13 20:18 ` pinskia at gcc dot gnu.org
2022-11-13 20:21 ` [Bug libstdc++/107660] " pinskia at gcc dot gnu.org
2022-11-15  1:47 ` redi at gcc dot gnu.org
2022-11-15 17:50 ` t3suzuki at ucsd dot edu
2022-11-15 19:24 ` redi at gcc dot gnu.org
2022-11-16  1:41 ` t3suzuki at ucsd dot edu
2022-11-16 12:33 ` redi at gcc dot gnu.org

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).