Ruleaza pe sisteme multicore ?
Jump to navigation
Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
. Haskell ruleaza pe sistemele multicore !
GHC Haskell vine impreuna cu biblioteci si optiuni de compilare care permit compilarea pt sisteme Multicore: multicore architectures.
Introduction
Ca sa aveti o idee cum s-ar putea reduce timpul de calcul olosind mai multe nuclee hack-uiti programul de mai jos: un program carre calculeaza termenii sirului lui Fibonacci, pina la un loc secvential apoi paralel.
import Control.Parallel
import Control.Monad
import Text.Printf
cutoff = 35 -- nivelul de la care comutam pe SMP
fib' :: Int -> Integer
fib' 0 = 0
fib' 1 = 1
fib' n = fib' (n-1) + fib' (n-2)
fib :: Int -> Integer -- paralelism explicit
fib n | n < cutoff = fib' n
| otherwise = r `par` (l `pseq` l + r)
where
l = fib (n-1)
r = fib (n-2)
main = forM_ [0..45] $ \i ->
printf "n=%d => %d\n" i (fib i)
Trebuie neaparat compilat cu optiunea `-threaded`:
$ ghc -O2 -threaded --make fib.hs [1 of 1] Compiling Main ( fib.hs, fib.o ) Linking fib ...
Si rulat cu optiunile:
+RTS -Nx
unde 'x' unde x de dupa N este numarul de nuclee disponibile. De exemplu, pe un sistem Linux cu procesor quad core :
./fib +RTS -N4
Exemples
De citit =
- GHC's multiprocessor guide
- runtime options to enable SMP parallelism
- API documentation for paralell strategies
- Real World Haskell: Concurrent and Parallel Programming
- Blog posts about parallelism
Primitivele pt lucrul cu thread-uri
Control.Concurrent Control.Concurrent
Continuarea
Pe pagina originala, in limba engleza: [Haskell_for_multicores] de unde este luat si tradus textul de mai sus.