Difference between revisions of "Ruleaza pe sisteme multicore ?"

From HaskellWiki
Jump to navigation Jump to search
m (small fix)
(4 intermediate revisions by the same user not shown)
Line 54: Line 54:
 
=== Exemples ===
 
=== Exemples ===
   
* [http://haskell.org/haskellwiki/Concurrency_demos/Zeta Riemann's zeta function]
+
* [http://haskell.org/haskellwiki/Concurrency_demos/Zeta Functia zeta, a lui Riemann ]
   
== De citit ===
+
== De citit ==
   
* [http://haskell.org/haskellwiki/GHC/Concurrency GHC's multiprocessor guide]
+
* [http://haskell.org/haskellwiki/GHC/Concurrency Ghidul GHC-ului folosit pe multiprocesor ]
* [http://www.haskell.org/ghc/docs/latest/html/users_guide/using-smp.html runtime options to enable SMP parallelism]
+
* [http://www.haskell.org/ghc/docs/latest/html/users_guide/using-smp.html Options pentru utilizarea paralelismului pe masinile SMP]
* [http://www.haskell.org/ghc/docs/latest/html/libraries/parallel/Control-Parallel-Strategies.html API documentation for paralell strategies]
+
* [http://www.haskell.org/ghc/docs/latest/html/libraries/parallel/Control-Parallel-Strategies.html Documentation API-ului pt implementat strategii de calcul paralel ]
* [http://book.realworldhaskell.org/read/concurrent-and-multicore-programming.html Real World Haskell: Concurrent and Parallel Programming]
+
* [http://book.realworldhaskell.org/read/concurrent-and-multicore-programming.html Real World Haskell:Capitolul Concurrent and Parallel Programming]
* [http://haskell.org/haskellwiki/Blog_articles/Parallel Blog posts about parallelism]
+
* [http://haskell.org/haskellwiki/Blog_articles/Parallel Postari despre parallelism]
   
 
== Primitivele pt lucrul cu thread-uri ==
 
== Primitivele pt lucrul cu thread-uri ==
Line 69: Line 69:
   
 
== Continuarea ==
 
== Continuarea ==
Pe pagina originala, in limba engleza: [Haskell_for_multicores]
+
Pe pagina originala, in limba engleza: [[Haskell_for_multicores]]
 
de unde este luat si tradus textul de mai sus.
 
de unde este luat si tradus textul de mai sus.

Revision as of 07:52, 8 June 2012


. 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.