#1984: weird performance drop with -O2 on x86
-------------------------+--------------------------------------------------
Reporter: guest | Owner:
Type: bug | Status: new
Priority: normal | Milestone:
Component: Compiler | Version: 6.8.2
Severity: normal | Keywords:
Difficulty: Unknown | Testcase:
Architecture: x86 | Os: Linux
-------------------------+--------------------------------------------------
Here's my program:
{{{
import Control.Concurrent
import Data.IORef
maker :: IORef Int -> IO ()
maker v = loop
where
loop = do
x <- readIORef v
writeIORef v $! x + 1
forkIO (return ())
loop
main :: IO ()
main = do
v <- newIORef 0
t <- forkIO (maker v)
threadDelay 1000000
killThread t
x <- readIORef v
print x
}}}
It's supposed to print the number of threads created in one second. With
ghc -O2, I get around 61104; similarly for -O1. However, with no
optimization I get results around 612274, i.e. approximately ten times
more threads in the same time.
What's going on here?
More data points:
6.6.1 behaves similarly but the numbers are a bit higher (~10% more
iterations).
<dons> be sure to mention that results appear normal on amd64.
--
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/1984>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler_______________________________________________
Glasgow-haskell-bugs mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs