私はパラレル化したい機能frequencyBy
を持っています。ここでは、簡単なテストケースを、次のとおりです。HaskellでのParallel Strategiesの使用方法
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
私は並行してfrequencyBy
でmap
を実行したいと思います。私はparList rdeepseq
(すべてmain
のすべての他のものを使用してこれを達成しようとしているすべてが離れて最適化されていないことを確認することです)。しかし、これはうまくいきません.2つのスレッドは、同じ時間に1つのスレッドの2倍の作業を行います。私はここで間違っていることを理解していない。
2つのスレッドが同じ時間に1つのスレッドの2倍の作業をする場合、正しく並列化されているわけではありませんか? – ehird