Tengo una función frequencyBy
que me gustaría paralelizar. Aquí sigue un caso de prueba sencilla:Cómo utilizar las estrategias paralelas en 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
me gustaría correr el map
en frequencyBy
en paralelo. Estoy tratando de lograr esto usando parList rdeepseq
(todas las demás cosas en main
es solo para asegurar que no todo está optimizado). Sin embargo, esto no funciona, dos subprocesos hacen el doble de trabajo que un subproceso al mismo tiempo. No entiendo lo que estoy haciendo mal aquí.
Si dos hilos hacen el doble de trabajo que un hilo al mismo tiempo, ¿no significa que se está paralelizando correctamente? – ehird