Opened 10 years ago

Closed 10 years ago

#3735 closed bug (duplicate)

GHC specialising instead of inlining

Reported by: guest Owned by:
Priority: normal Milestone:
Component: Compiler Version: 6.10.4
Keywords: Cc:
Operating System: Linux Architecture: x86
Type of failure: Runtime performance bug Test Case:
Blocked By: Blocking:
Related Tickets: Differential Rev(s):
Wiki Page:

Description

In the attached module I demonstrate the following:

mainMonolithic1Generator performs the same computation as mainMonolithic1Compose but the former is more than two times slower than latter. This is serious since in more complex signal processing programs this factor seems to multiply. I assume that the problem is that mixGen is not inlined. Instead GHC seems to have decided to specialise mixGen. In contrast to mainMonolithic1Compose, mainMonolithic1Generator uses a data type with existential quantification. But this alone is not the problem, since mainMonolithic0 and mainMonolithic0Generator run with the same speed.

http://code.haskell.org/storablevector/speedtest/SpeedTestChorus.hs

How can I tell GHC to prefer inlining to specialisation? How about a pragma like {-# INLINE FORCE #-} or so?

Change History (1)

comment:1 Changed 10 years ago by simonpj

Resolution: duplicate
Status: newclosed

Dup of #3736

Note: See TracTickets for help on using tickets.