[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