[GHC] #14980: Runtime performance regression with binary operations on vectors

GHC ghc-devs at haskell.org
Thu Jun 28 14:10:02 UTC 2018


#14980: Runtime performance regression with binary operations on vectors
-------------------------------------+-------------------------------------
        Reporter:  ttylec            |                Owner:  bgamari
            Type:  bug               |               Status:  new
        Priority:  high              |            Milestone:  8.8.1
       Component:  Compiler          |              Version:  8.2.2
      Resolution:                    |             Keywords:  vector
                                     |  bitwise operations
Operating System:  Unknown/Multiple  |         Architecture:
 Type of failure:  Runtime           |  Unknown/Multiple
  performance bug                    |            Test Case:
      Blocked By:                    |             Blocking:
 Related Tickets:                    |  Differential Rev(s):
       Wiki Page:                    |
-------------------------------------+-------------------------------------

Comment (by tdammers):

 OK, for a very rough first impression of `RULES` that fire in either case,
 I did this:

 {{{#!diff
 tobias at zoidberg:~/well-typed/devel/ghc-T14980/ > diff <(grep '^Rule' ghc-
 bug-8.0.2/rule-firings | sort -u) <(grep '^Rule' ghc-bug-8.2.2/rule-
 firings | sed -e 's/\s(.*)$//' | sort -u) -u | grep '^[+-]'
 --- /proc/self/fd/13    2018-06-28 12:26:37.103065551 +0200
 +++ /proc/self/fd/14    2018-06-28 12:26:37.103065551 +0200
 -Rule fired: >=#
 +Rule fired: ==#
 +Rule fired: >#
 -Rule fired: Class op <
 -Rule fired: Class op <*>
 -Rule fired: Class op >=
 -Rule fired: Class op fmap
 +Rule fired: Class op liftA2
 -Rule fired: Class op $p1Applicative
 -Rule fired: eftIntList
 +Rule fired: divInt#
 +Rule fired: foldr2/left
 -Rule fired: narrow32Word#
 -Rule fired: narrow8Word#
 -Rule fired: or#
 -Rule fired: SC:foldlM_loop0
 -Rule fired: SC:foldlM_loop1
 +Rule fired: SC:go0
 -Rule fired: SC:$j1
 +Rule fired: SC:$wfoldlM_loop0
 -Rule fired: seq of cast
 +Rule fired: stream/unstream [Vector]
 +Rule fired: uncheckedShiftL#
 }}}

 That is, I compiled the `performance-bug-2` program with both compilers
 using `-ddump-rule-firings`, and then filtered the dump as follows:

 1. Retain only the actual rule firings
 2. Sort by rule name
 3. Remove duplicates
 4. Strip the extra information that is only present in 8.2.2 output
 5. Diff
 6. Retain only + and - lines.

 `+` lines are rules that only fire on 8.2.2, `-` lines fire only on 8.0.2.

 I don't know which of these makes the decisive difference, but I suspect
 it's one of the built-in rules.

-- 
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/14980#comment:26>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list