Ticket #1984 (closed merge: fixed)
weird performance drop with -O2 on x86
| Reported by: | guest | Owned by: | igloo |
|---|---|---|---|
| Priority: | normal | Milestone: | 6.8.3 |
| Component: | Runtime System | Version: | 6.8.2 |
| Keywords: | Cc: | ||
| Operating System: | Linux | Architecture: | x86 |
| Type of failure: | Difficulty: | Unknown | |
| Test Case: | Blocked By: | ||
| Blocking: | Related Tickets: |
Description
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.
Change History
Note: See
TracTickets for help on using
tickets.
