Как выполнять SAT-вызовы параллельно, используя привязки haskell picosat?

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)

Вопрос: Как я могу изменить приведенный выше пример для параллельного запуска двух вызовов sat, т. Е. С использованием параллелизма? Я заинтересован в производительности, если есть разные варианты.

(Просто для проверки: насколько я понимаю, монада ST ортогональна и не может использоваться в сочетании с распараллеливанием / параллелизмом. Вначале монада ST немного смутила меня, это одна из причин, по которой я задаю вопрос.)

1 ответ

Решение

Самый простой подход заключается в использовании async библиотека. Может быть, как-то так.

[res1, res2] <- mapConcurrently solve [dimacsList1, dimacsList2]
Другие вопросы по тегам