public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug go/52357] New: 64bit-out.go and go.test/test/cmplxdivide.go time out on Solaris/SPARC
@ 2012-02-23 17:18 ro at gcc dot gnu.org
  2012-04-25 17:40 ` [Bug go/52357] " ian at airs dot com
                   ` (5 more replies)
  0 siblings, 6 replies; 7+ messages in thread
From: ro at gcc dot gnu.org @ 2012-02-23 17:18 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52357

             Bug #: 52357
           Summary: 64bit-out.go and go.test/test/cmplxdivide.go time out
                    on Solaris/SPARC
    Classification: Unclassified
           Product: gcc
           Version: 4.7.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: go
        AssignedTo: ian@airs.com
        ReportedBy: ro@gcc.gnu.org
              Host: sparc-sun-solaris2*
            Target: sparc-sun-solaris2*
             Build: sparc-sun-solaris2*


The 64bit-out.go and go.test/test/cmplxdivide.go often time out on
Solaris/SPARC:

On unloaded machines, I find for cmplxdivide.go:

Solaris 11, Sun Fire V890, 1.35 GHz UltraSPARC-IV:

real        1:07.33
user        1:02.18
sys            0.64

Solaris 8, Sun Enterprise T5220, 1.2 GHz UltraSPARC-T2:

real     2:09.40
user     2:07.73
sys         0.63

The latter is too close to the default 5 min timeout.

It's similar for 64bit-out.go:

real        1:13.68
user        1:07.82
sys            0.79

vs.

real     2:17.81
user     2:16.11
sys         1.14

  Rainer


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

* [Bug go/52357] 64bit-out.go and go.test/test/cmplxdivide.go time out on Solaris/SPARC
  2012-02-23 17:18 [Bug go/52357] New: 64bit-out.go and go.test/test/cmplxdivide.go time out on Solaris/SPARC ro at gcc dot gnu.org
@ 2012-04-25 17:40 ` ian at airs dot com
  2012-04-25 22:15 ` ian at airs dot com
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: ian at airs dot com @ 2012-04-25 17:40 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52357

Ian Lance Taylor <ian at airs dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2012-04-25
     Ever Confirmed|0                           |1

--- Comment #1 from Ian Lance Taylor <ian at airs dot com> 2012-04-25 17:39:35 UTC ---
Interestingly, the time for cmpldivide.go on SPARC appears to be primarily in
the register allocator while compiling.  This is true even though no -O option
is used.  Actually running the program after it has been compiled takes less
than a second.


Execution times (seconds)
 phase setup             :   0.01 ( 0%) usr   0.00 ( 0%) sys   0.02 ( 0%) wall 
   109 kB ( 0%) ggc
 phase parsing           :   0.72 ( 1%) usr   0.04 ( 6%) sys   0.77 ( 1%) wall 
     8 kB ( 0%) ggc
 phase generate          : 118.51 (99%) usr   0.67 (93%) sys 119.17 (99%) wall 
 54226 kB (100%) ggc
 callgraph construction  :   0.09 ( 0%) usr   0.01 ( 1%) sys   0.09 ( 0%) wall 
  1806 kB ( 3%) ggc
 callgraph optimization  :   0.07 ( 0%) usr   0.00 ( 0%) sys   0.07 ( 0%) wall 
     3 kB ( 0%) ggc
 cfg cleanup             :   0.02 ( 0%) usr   0.00 ( 0%) sys   0.02 ( 0%) wall 
     0 kB ( 0%) ggc
 trivially dead code     :   0.42 ( 0%) usr   0.00 ( 0%) sys   0.43 ( 0%) wall 
     0 kB ( 0%) ggc
 df scan insns           :   0.39 ( 0%) usr   0.08 (11%) sys   0.47 ( 0%) wall 
     0 kB ( 0%) ggc
 df live regs            :   0.32 ( 0%) usr   0.00 ( 0%) sys   0.31 ( 0%) wall 
     0 kB ( 0%) ggc
 df reg dead/unused notes:   0.39 ( 0%) usr   0.02 ( 3%) sys   0.41 ( 0%) wall 
  1261 kB ( 2%) ggc
 register information    :  52.00 (44%) usr   0.00 ( 0%) sys  52.00 (43%) wall 
     0 kB ( 0%) ggc
 alias analysis          :   0.20 ( 0%) usr   0.01 ( 1%) sys   0.21 ( 0%) wall 
  1026 kB ( 2%) ggc
 rebuild jump labels     :   0.18 ( 0%) usr   0.00 ( 0%) sys   0.17 ( 0%) wall 
     0 kB ( 0%) ggc
 parser (global)         :   0.72 ( 1%) usr   0.04 ( 6%) sys   0.77 ( 1%) wall 
     8 kB ( 0%) ggc
 inline heuristics       :   0.09 ( 0%) usr   0.00 ( 0%) sys   0.09 ( 0%) wall 
     4 kB ( 0%) ggc
 tree gimplify           :   0.38 ( 0%) usr   0.02 ( 3%) sys   0.41 ( 0%) wall 
  5832 kB (11%) ggc
 tree eh                 :   0.03 ( 0%) usr   0.00 ( 0%) sys   0.03 ( 0%) wall 
     5 kB ( 0%) ggc
 tree CFG construction   :   0.03 ( 0%) usr   0.00 ( 0%) sys   0.02 ( 0%) wall 
    10 kB ( 0%) ggc
 tree find ref. vars     :   0.06 ( 0%) usr   0.00 ( 0%) sys   0.05 ( 0%) wall 
   548 kB ( 1%) ggc
 tree PHI insertion      :   0.01 ( 0%) usr   0.00 ( 0%) sys   0.01 ( 0%) wall 
     1 kB ( 0%) ggc
 tree SSA rewrite        :   0.03 ( 0%) usr   0.00 ( 0%) sys   0.03 ( 0%) wall 
  1131 kB ( 2%) ggc
 tree SSA other          :   0.15 ( 0%) usr   0.05 ( 7%) sys   0.13 ( 0%) wall 
     0 kB ( 0%) ggc
 tree operand scan       :   0.07 ( 0%) usr   0.02 ( 3%) sys   0.17 ( 0%) wall 
   673 kB ( 1%) ggc
 tree STMT verifier      :   0.02 ( 0%) usr   0.00 ( 0%) sys   0.03 ( 0%) wall 
     0 kB ( 0%) ggc
 out of ssa              :   0.07 ( 0%) usr   0.00 ( 0%) sys   0.06 ( 0%) wall 
     0 kB ( 0%) ggc
 expand vars             :   0.08 ( 0%) usr   0.03 ( 4%) sys   0.10 ( 0%) wall 
  1535 kB ( 3%) ggc
 expand                  :   1.24 ( 1%) usr   0.04 ( 6%) sys   1.29 ( 1%) wall 
 12793 kB (24%) ggc
 post expand cleanups    :   0.10 ( 0%) usr   0.00 ( 0%) sys   0.10 ( 0%) wall 
     5 kB ( 0%) ggc
 integrated RA           :  50.16 (42%) usr   0.20 (28%) sys  50.35 (42%) wall 
 12377 kB (23%) ggc
 reload                  :   8.03 ( 7%) usr   0.17 (24%) sys   8.19 ( 7%) wall 
 13804 kB (25%) ggc
 thread pro- & epilogue  :   0.20 ( 0%) usr   0.00 ( 0%) sys   0.20 ( 0%) wall 
     4 kB ( 0%) ggc
 final                   :   2.48 ( 2%) usr   0.02 ( 3%) sys   2.50 ( 2%) wall 
     9 kB ( 0%) ggc
 rest of compilation     :   0.98 ( 1%) usr   0.00 ( 0%) sys   1.02 ( 1%) wall 
    31 kB ( 0%) ggc
 unaccounted todo        :   0.00 ( 0%) usr   0.00 ( 0%) sys   0.01 ( 0%) wall 
     0 kB ( 0%) ggc
 TOTAL                 : 119.24             0.72           119.96             
54344 kB

real    2m2.183s
user    2m0.976s
sys     0m1.074s


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

* [Bug go/52357] 64bit-out.go and go.test/test/cmplxdivide.go time out on Solaris/SPARC
  2012-02-23 17:18 [Bug go/52357] New: 64bit-out.go and go.test/test/cmplxdivide.go time out on Solaris/SPARC ro at gcc dot gnu.org
  2012-04-25 17:40 ` [Bug go/52357] " ian at airs dot com
@ 2012-04-25 22:15 ` ian at airs dot com
  2012-04-25 22:49 ` ian at airs dot com
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: ian at airs dot com @ 2012-04-25 22:15 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52357

--- Comment #2 from Ian Lance Taylor <ian at airs dot com> 2012-04-25 22:15:19 UTC ---
SPARC register allocator slowness filed as PR 53125.


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

* [Bug go/52357] 64bit-out.go and go.test/test/cmplxdivide.go time out on Solaris/SPARC
  2012-02-23 17:18 [Bug go/52357] New: 64bit-out.go and go.test/test/cmplxdivide.go time out on Solaris/SPARC ro at gcc dot gnu.org
  2012-04-25 17:40 ` [Bug go/52357] " ian at airs dot com
  2012-04-25 22:15 ` ian at airs dot com
@ 2012-04-25 22:49 ` ian at airs dot com
  2015-02-27 10:10 ` vogt at linux dot vnet.ibm.com
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: ian at airs dot com @ 2012-04-25 22:49 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52357

Ian Lance Taylor <ian at airs dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |WAITING

--- Comment #3 from Ian Lance Taylor <ian at airs dot com> 2012-04-25 22:48:54 UTC ---
The 64bit-out.go case appears to be similar.  It is also a generated file, and
it also takes a long time to compile.  The register allocator is not quite as
dominant, only 43% of compilation time.  In any case I will revisit 64bit-out
when and if cmplxdivide is fixed.


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

* [Bug go/52357] 64bit-out.go and go.test/test/cmplxdivide.go time out on Solaris/SPARC
  2012-02-23 17:18 [Bug go/52357] New: 64bit-out.go and go.test/test/cmplxdivide.go time out on Solaris/SPARC ro at gcc dot gnu.org
                   ` (2 preceding siblings ...)
  2012-04-25 22:49 ` ian at airs dot com
@ 2015-02-27 10:10 ` vogt at linux dot vnet.ibm.com
  2024-04-04 12:20 ` ro at gcc dot gnu.org
  2024-04-28 20:03 ` ian at airs dot com
  5 siblings, 0 replies; 7+ messages in thread
From: vogt at linux dot vnet.ibm.com @ 2015-02-27 10:10 UTC (permalink / raw)
  To: gcc-bugs

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

Dominik Vogt <vogt at linux dot vnet.ibm.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |vogt at linux dot vnet.ibm.com

--- Comment #4 from Dominik Vogt <vogt at linux dot vnet.ibm.com> ---
This also happens intermittently on my s390x development machine (a zEC12) with
the current 5.0 development trunk.

(In reply to Ian Lance Taylor from comment #1)
> Interestingly, the time for cmpldivide.go on SPARC appears to be primarily
> in the register allocator while compiling.

To be specific:

   LRA hard reg assignment : 217.88 (95%) usr   0.29 (74%) sys 218.24 (95%)
wall       0 kB ( 0%) ggc


> This is true even though no -O option is used.

Actually, on s390x it does not happen

--

Observation
-----------

Compile time of the test is normally about 4 minutes, but I've seen ~3:50 as
well as ~4:45.  When the machine is slow for some reason (probably does not
matter why), compile time may become more than 5 minutes and therefore the test
times out.

Explanation
-----------

The test defines a long array of structures with three complex numbers in
cmplxdivide1.go:

  var tests = []Test{ 
    Test{complex(0, 0), complex(0, 0), complex(-nan, -nan)}, 
    Test{complex(0, 0), complex(0, 1), complex(0, 0)}, 
    ...
  }

The constants like "nan" map to exported symbols of the math package (unlike C
where this would probably be done with macros): "nan" appears in the code as
"math.NaN@plt".  With dynamic linkage the actual value is unknown at compile
time, and the structure "tests" is initialised in the init function of the main
package.  Compiling with -O0, the executable is about 1.5 MB, and more than 90%
of that is code in the init function.  For each line in the table the assembler
instuctions to initialise is consume about 420 bytes.

As far as I was told, the register allocation code has some trouble with huge
basic blocks of simple code like in this case, when the number of possibilities
explodes.

Note: With -O3, the code compiles in less than two seconds, probably because
the code in the init function is reduced drastically before the expensive
register allocation pass.


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

* [Bug go/52357] 64bit-out.go and go.test/test/cmplxdivide.go time out on Solaris/SPARC
  2012-02-23 17:18 [Bug go/52357] New: 64bit-out.go and go.test/test/cmplxdivide.go time out on Solaris/SPARC ro at gcc dot gnu.org
                   ` (3 preceding siblings ...)
  2015-02-27 10:10 ` vogt at linux dot vnet.ibm.com
@ 2024-04-04 12:20 ` ro at gcc dot gnu.org
  2024-04-28 20:03 ` ian at airs dot com
  5 siblings, 0 replies; 7+ messages in thread
From: ro at gcc dot gnu.org @ 2024-04-04 12:20 UTC (permalink / raw)
  To: gcc-bugs

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

Rainer Orth <ro at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|SUSPENDED                   |NEW

--- Comment #7 from Rainer Orth <ro at gcc dot gnu.org> ---
Unfortunately, the issue persists on current trunk:

32-bit-default gccgo, sparc-sun-solaris2.11 (SPARC S7-2):

real        3:07.71
user        3:05.92
sys            0.89

32-bit-default gccgo, sparc-sun-solaris2.11 (SPARC T8-1):

real        1:18.05
user        1:16.50
sys            0.38

Given that the compile time is close to the default limit (5m) even on an
unloaded machine, the test is almost guaranteed to FAIL under load.

S7-2 -ftime-report output:

Time variable                                   usr           sys          wall
          GGC
 phase parsing                      :   0.59 (  0%)   0.02 (  2%)   0.61 (  0%)
 2575k (  2%)
 phase opt and generate             : 145.88 (100%)   0.79 ( 96%) 146.88 (100%)
  113M ( 98%)
 phase last asm                     :   0.02 (  0%)   0.01 (  1%)   0.02 (  0%)
  230k (  0%)
 garbage collection                 :   0.37 (  0%)   0.04 (  5%)   0.56 (  0%)
    0  (  0%)
 dump files                         :   0.02 (  0%)   0.00 (  0%)   0.00 (  0%)
    0  (  0%)
 callgraph construction             :   0.06 (  0%)   0.00 (  0%)   0.04 (  0%)
 1070k (  1%)
 callgraph optimization             :   0.01 (  0%)   0.00 (  0%)   0.02 (  0%)
    0  (  0%)
 callgraph ipa passes               :   1.93 (  1%)   0.06 (  7%)   1.99 (  1%)
 2573k (  2%)
 ipa dead code removal              :   0.00 (  0%)   0.00 (  0%)   0.01 (  0%)
    0  (  0%)
 ipa inlining heuristics            :   0.01 (  0%)   0.00 (  0%)   0.01 (  0%)
    0  (  0%)
 cfg construction                   :   0.02 (  0%)   0.00 (  0%)   0.02 (  0%)
 8896  (  0%)
 cfg cleanup                        :   0.01 (  0%)   0.00 (  0%)   0.01 (  0%)
  176  (  0%)
 CFG verifier                       :   2.58 (  2%)   0.00 (  0%)   2.60 (  2%)
    0  (  0%)
 trivially dead code                :   0.22 (  0%)   0.00 (  0%)   0.22 (  0%)
    0  (  0%)
 df scan insns                      :   0.11 (  0%)   0.01 (  1%)   0.11 (  0%)
 7392  (  0%)
 df live regs                       :   0.15 (  0%)   0.00 (  0%)   0.14 (  0%)
    0  (  0%)
 df reg dead/unused notes           :   0.17 (  0%)   0.00 (  0%)   0.17 (  0%)
 2353k (  2%)
 register information               :   0.04 (  0%)   0.00 (  0%)   0.05 (  0%)
    0  (  0%)
 alias analysis                     :   0.17 (  0%)   0.00 (  0%)   0.18 (  0%)
 2053k (  2%)
 rebuild jump labels                :   0.09 (  0%)   0.00 (  0%)   0.09 (  0%)
    0  (  0%)
 parser (global)                    :   0.59 (  0%)   0.02 (  2%)   0.61 (  0%)
 2574k (  2%)
 inline parameters                  :   0.06 (  0%)   0.00 (  0%)   0.06 (  0%)
 4768  (  0%)
 tree gimplify                      :   0.17 (  0%)   0.00 (  0%)   0.17 (  0%)
 7786k (  7%)
 tree eh                            :   0.02 (  0%)   0.00 (  0%)   0.00 (  0%)
 8960  (  0%)
 tree CFG construction              :   0.02 (  0%)   0.00 (  0%)   0.01 (  0%)
   60k (  0%)
 tree CFG cleanup                   :   0.01 (  0%)   0.00 (  0%)   0.00 (  0%)
    0  (  0%)
 tree SSA other                     :   0.00 (  0%)   0.01 (  1%)   0.00 (  0%)
    0  (  0%)
 tree SSA rewrite                   :   0.04 (  0%)   0.03 (  4%)   0.08 (  0%)
  512k (  0%)
 tree SSA incremental               :   0.02 (  0%)   0.00 (  0%)   0.03 (  0%)
  480k (  0%)
 tree operand scan                  :   0.16 (  0%)   0.05 (  6%)   0.18 (  0%)
 2205k (  2%)
 tree SSA verifier                  :   1.09 (  1%)   0.00 (  0%)   1.12 (  1%)
    0  (  0%)
 tree STMT verifier                 :   1.57 (  1%)   0.00 (  0%)   1.59 (  1%)
    0  (  0%)
 callgraph verifier                 :   0.07 (  0%)   0.00 (  0%)   0.04 (  0%)
    0  (  0%)
 dominance computation              :   0.03 (  0%)   0.00 (  0%)   0.04 (  0%)
    0  (  0%)
 out of ssa                         :   0.02 (  0%)   0.00 (  0%)   0.04 (  0%)
 4472  (  0%)
 expand vars                        :   0.03 (  0%)   0.01 (  1%)   0.05 (  0%)
 2955k (  2%)
 expand                             :   0.49 (  0%)   0.01 (  1%)   0.51 (  0%)
   26M ( 23%)
 post expand cleanups               :   0.07 (  0%)   0.00 (  0%)   0.07 (  0%)
   12k (  0%)
 integrated RA                      :  48.45 ( 33%)   0.05 (  6%)  48.48 ( 33%)
   24M ( 21%)
 LRA non-specific                   :   4.00 (  3%)   0.03 (  4%)   3.99 (  3%)
   27M ( 24%)
 LRA virtuals elimination           :   0.26 (  0%)   0.00 (  0%)   0.28 (  0%)
   45k (  0%)
 LRA reload inheritance             :   1.85 (  1%)   0.01 (  1%)   1.88 (  1%)
 6286k (  5%)
 LRA create live ranges             :   2.49 (  2%)   0.00 (  0%)   2.49 (  2%)
 2592k (  2%)
 LRA hard reg assignment            :  74.81 ( 51%)   0.51 ( 62%)  75.34 ( 51%)
    0  (  0%)
 reload                             :   0.03 (  0%)   0.00 (  0%)   0.04 (  0%)
  792  (  0%)
 thread pro- & epilogue             :   0.41 (  0%)   0.00 (  0%)   0.41 (  0%)
   28k (  0%)
 shorten branches                   :   0.22 (  0%)   0.00 (  0%)   0.22 (  0%)
  662k (  1%)
 final                              :   0.88 (  1%)   0.01 (  1%)   0.91 (  1%)
 1751k (  1%)
 symout                             :   0.02 (  0%)   0.01 (  1%)   0.02 (  0%)
  253k (  0%)
 initialize rtl                     :   0.00 (  0%)   0.00 (  0%)   0.01 (  0%)
 5232  (  0%)
 access analysis                    :   0.08 (  0%)   0.00 (  0%)   0.09 (  0%)
  481k (  0%)
 rest of compilation                :   0.36 (  0%)   0.02 (  2%)   0.37 (  0%)
 4663k (  4%)
 verify RTL sharing                 :   4.14 (  3%)   0.00 (  0%)   4.15 (  3%)
    0  (  0%)
 TOTAL                              : 146.49          0.82        147.51       
  116M
Extra diagnostic checks enabled; compiler may run slowly.
Configure with --enable-checking=release to disable checks.

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

* [Bug go/52357] 64bit-out.go and go.test/test/cmplxdivide.go time out on Solaris/SPARC
  2012-02-23 17:18 [Bug go/52357] New: 64bit-out.go and go.test/test/cmplxdivide.go time out on Solaris/SPARC ro at gcc dot gnu.org
                   ` (4 preceding siblings ...)
  2024-04-04 12:20 ` ro at gcc dot gnu.org
@ 2024-04-28 20:03 ` ian at airs dot com
  5 siblings, 0 replies; 7+ messages in thread
From: ian at airs dot com @ 2024-04-28 20:03 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #8 from Ian Lance Taylor <ian at airs dot com> ---
This is a register allocator problem, not a Go problem.  I've opened
https://gcc.gnu.org/PR114881.  It's an updated version of
https://gcc.gnu.org/PR53125.

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

end of thread, other threads:[~2024-04-28 20:03 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-02-23 17:18 [Bug go/52357] New: 64bit-out.go and go.test/test/cmplxdivide.go time out on Solaris/SPARC ro at gcc dot gnu.org
2012-04-25 17:40 ` [Bug go/52357] " ian at airs dot com
2012-04-25 22:15 ` ian at airs dot com
2012-04-25 22:49 ` ian at airs dot com
2015-02-27 10:10 ` vogt at linux dot vnet.ibm.com
2024-04-04 12:20 ` ro at gcc dot gnu.org
2024-04-28 20:03 ` ian at airs dot com

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).