Paralel olarak kullanmak istediğim bir frequencyBy
işlevim var. Ben paralel frequencyBy
yılında map
çalıştırmak istiyorumHaskell'de Paralel Stratejiler Nasıl Kullanılır
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
: Burada basit bir test durumda izler. Bunu parList rdeepseq
kullanarak (main
'daki diğer tüm öğeler, yalnızca her şeyin en iyi duruma getirilmediğinden emin olmak için) kullanmaya çalışıyorum. Ancak, bu işe yaramıyor, iki iş parçacığı aynı anda iki iş parçacığı kadar çalışır. Burada ne yapıyorum anlamadım.
İki iş parçacığı aynı anda tek bir iş parçacığının iki katı kadar iş yaparsa, bunun düzgün bir şekilde paralel olması anlamına gelmez mi? – ehird