2014-05-25 5 views
3
import Picosat 
import Control.Applicative 

main :: IO() 
main = do 
    dimacsList1 <- (read <$> getLine) :: IO [[Integer]] 
    dimacsList2 <- (read <$> getLine) :: IO [[Integer]] 

    res1 <- solve dimacsList1 
    res2 <- solve dimacsList2 

    putStrLn $ (show res1) ++ " " ++ (show res2) 

질문 :가 어떻게 병렬로 두 앉아 호출을 실행하는 데 위의 예를 변경할 수 있습니다, 즉, 동시성을 사용하고 계십니까? 다른 옵션이 있다면 성능에 관심이 있습니다.picosat haskell 바인딩을 사용하여 SAT 호출을 병렬로 실행하는 방법은 무엇입니까?

(내가 확인한대로, ST 모나드는 직각이어서 병렬화/동시성과 함께 사용할 수 없습니다 .ST 모나드는 처음에 조금 혼란 스러웠습니다. 질문.)

+0

'ST'는 허용 된 효과가 해당 ST 세션 내에서 생성 된 변수의 변형으로 제한된 'IO'입니다. 병행 성과 같이 돌연변이 이외의 다른 효과가있는 경우 ST가 사용될 수있는 장소가 아닙니다. – Carl

+1

[Simon Marlow의 훌륭한 새 책] (http://chimera.labs.oreilly.com/books/1230000000929)을 검색하고 싶을 수도 있습니다. – jberryman

답변

3

가장 쉬운 방법은 async 라이브러리를 사용하는 것입니다. 이것과 비슷한 것, 어쩌면.