Ruleaza pe sisteme multicore ?

From HaskellWiki


. Haskell ruleaza pe sistemele multicore !

GHC Haskell vine impreuna cu biblioteci si optiuni de compilare care permit compilarea pt sisteme Multicore: multicore architectures.

Introducere

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

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.

Nu va recomandăm. Riscă să nu poata fi incărcat de compilator.

Desi un program poate să manipuleze literele romanesti, să le folosească in denumiri de functii, totusi NU recomandăm să scrieti in limba romană numele de fisiere.

Un fisier:

module Jumătate where

jumătate 			:: (Fractional a) => a -> a
jumătate x			= x * 0.5

Ar putea fi compilat de compilatorul GHC sau executat interactiv de GHCI (nu, cu HUGS nu merge !)

Dar nu-l denumiti: ă.hs fiindcă vă poate face probleme la compilare sau incărcare.