Tôi có chức năng frequencyBy
mà tôi muốn song song. Ở đây sau một trường hợp thử nghiệm đơn giản:Cách sử dụng Chiến lược song song trong Haskell
import Control.Parallel.Strategies
import Control.DeepSeq
import System.Environment
frequencyBy :: (a -> b -> Bool) -> [a] -> [b] -> [(a,Int)]
frequencyBy f as bs = map
(\a ->(a, foldr (\b -> if f a b then (+) 1 else id) 0 bs)) as
main :: IO()
main = do
x:xs <- getArgs
let result = frequencyBy (==) [1::Int .. 10000] [1 .. (read x)] `using`
parList rdeepseq
print $ product $ map snd $ result
Tôi muốn chạy map
trong frequencyBy
song song. Tôi đang cố gắng để đạt được điều này bằng cách sử dụng parList rdeepseq
(tất cả các công cụ khác trong main
chỉ là để đảm bảo không phải tất cả mọi thứ được tối ưu hóa đi). Tuy nhiên, điều này không làm việc, hai chủ đề làm gấp đôi công việc như một thread nào trong cùng một thời điểm. Tôi không hiểu những gì tôi đang làm sai ở đây.
Nếu hai chuỗi chỉ hoạt động gấp đôi một luồng trong cùng một thời gian, điều đó có nghĩa là nó song song đúng không? – ehird