blocking parallel program
Facundo Domínguez
facundo.dominguez at parsci.com
Sat Oct 19 23:05:15 UTC 2013
Thanks. I just tried that. Unfortunately, it doesn't seem to help.
Facundo
On Sat, Oct 19, 2013 at 8:47 PM, Edward Z. Yang <ezyang at mit.edu> wrote:
> Hello Facundo,
>
> The reason is that you have compiled the program to be multithreaded, but it
> is not running with multiple cores. Compile also with -rtsopts and then
> pass +RTS -N2 to the program.
>
> Excerpts from Facundo Domínguez's message of Sat Oct 19 15:19:22 -0700 2013:
>> Hello,
>> Below is a program that seems to block indefinitely with ghc in a
>> multicore machine. This program has a loop that does not produce
>> allocations, and I understand that this may grab one of the cores. The
>> question is, why can't the other cores take the blocked thread?
>>
>> The program was compiled with:
>>
>> $ ghc --make -O -threaded test.hs
>>
>> and it is run with:
>>
>> $ ./test
>>
>> Program text follows.
>>
>> Thanks,
>> Facundo
>>
>> --------
>>
>> import Control.Concurrent
>> import Control.Monad
>> import System.Environment
>>
>> main :: IO ()
>> main = do
>> y <- getArgs
>> mv0 <- newEmptyMVar
>> mv1 <- newEmptyMVar
>> forkIO $ do
>> takeMVar mv0
>> putMVar mv1 ()
>> loop (y == ["yield"])
>> putMVar mv0 ()
>> takeMVar mv1
>>
>> loop :: Bool -> IO ()
>> loop cooperative = go
>> where
>> go = when cooperative yield >> go
More information about the Glasgow-haskell-users
mailing list