Tôi vừa mới tuyên bố làm việc trong song song bán rõ ràng haskell với GHC 6.12. Tôi đã viết mã haskell sau đây để tính toán song song với bản đồ của hàm fibonnaci khi 4 phần tử trên một danh sách, và trong cùng một thời gian bản đồ của hàm sumEuler trên hai phần tử.Làm thế nào để khai thác bất kỳ song song nào trong mã song song haskell của tôi?
import Control.Parallel
import Control.Parallel.Strategies
fib :: Int -> Int
fib 0 = 0
fib 1 = 1
fib n = fib (n-1) + fib (n-2)
mkList :: Int -> [Int]
mkList n = [1..n-1]
relprime :: Int -> Int -> Bool
relprime x y = gcd x y == 1
euler :: Int -> Int
euler n = length (filter (relprime n) (mkList n))
sumEuler :: Int -> Int
sumEuler = sum . (map euler) . mkList
-- parallel initiation of list walk
mapFib :: [Int]
mapFib = map fib [37, 38, 39, 40]
mapEuler :: [Int]
mapEuler = map sumEuler [7600, 7600]
parMapFibEuler :: Int
parMapFibEuler = (forceList mapFib) `par` (forceList mapEuler `pseq` (sum mapFib + sum mapEuler))
-- how to evaluate in whnf form by forcing
forceList :: [a] ->()
forceList [] =()
forceList (x:xs) = x `pseq` (forceList xs)
main = do putStrLn (" sum : " ++ show parMapFibEuler)
để cải thiện chương trình của tôi song song tôi viết lại nó với mệnh và pseq và buộc chức năng để buộc đánh giá whnf. Vấn đề của tôi là bằng cách tìm trong threadscope nó xuất hiện mà tôi đã không đạt được bất kỳ song song. Mọi thứ trở nên tồi tệ hơn vì tôi không tăng tốc.
Đó lý do tại sao tôi có đề tài hai câu hỏi
Câu hỏi 1 Làm thế nào tôi có thể sửa đổi mã của tôi để khai thác bất kỳ xử lý song song?
Câu hỏi 2 Làm cách nào để viết chương trình của mình để sử dụng Chiến lược (parMap, parList, rdeepseq, v.v ...)?
cải thiện đầu tiên với chiến lược
theo đóng góp của ông
parMapFibEuler = (mapFib, mapEuler) `using` s `seq` (sum mapFib + sum mapEuler) where
s = parTuple2 (seqList rseq) (seqList rseq)
song song xuất hiện trong threadscope nhưng không đủ để có sự tăng tốc đáng kể
Gói song song được cải thiện rất nhiều trong GHC 7, vì vậy bạn cũng có thể xem xét nâng cấp. –
Bạn có thể ghi nhớ các chức năng fib của bạn để tăng tốc độ ... – Hai