Difference between revisions of "Ruleaza pe sisteme multicore ?"
(A translation of the first part of Haskell for multicore page) |
m (Still could use some more content, or be merged with other related (tiny) pages to form a larger document...) |
||
(8 intermediate revisions by 3 users not shown) | |||
Line 9: | Line 9: | ||
__TOC__ |
__TOC__ |
||
− | == |
+ | == 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. |
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. |
||
Line 54: | Line 54: | ||
=== Exemples === |
=== Exemples === |
||
− | * [http://haskell.org/haskellwiki/Concurrency_demos/Zeta |
+ | * [http://haskell.org/haskellwiki/Concurrency_demos/Zeta Functia zeta, a lui Riemann ] |
− | == De citit |
+ | == De citit == |
− | * [http://haskell.org/haskellwiki/GHC/Concurrency GHC |
+ | * [http://haskell.org/haskellwiki/GHC/Concurrency Ghidul GHC-ului folosit pe multiprocesor ] |
− | * [ |
+ | * [https://downloads.haskell.org/ghc/latest/docs/html/users_guide/using-concurrent.html#using-smp-parallelism Options pentru utilizarea paralelismului pe masinile SMP] |
− | * [http://www.haskell.org/ghc/docs/latest/html/libraries/parallel/Control-Parallel-Strategies.html API |
+ | * [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 |
+ | * [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. |
||
+ | |||
+ | [[Category:Ro]] |
||
+ | |||
+ | 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: |
||
+ | |||
+ | <haskell> |
||
+ | module Jumătate where |
||
+ | |||
+ | jumătate :: (Fractional a) => a -> a |
||
+ | jumătate x = x * 0.5 |
||
+ | </haskell> |
||
+ | |||
+ | 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. |
Latest revision as of 03:37, 26 April 2021
. 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
- Ghidul GHC-ului folosit pe multiprocesor
- Options pentru utilizarea paralelismului pe masinile SMP
- Documentation API-ului pt implementat strategii de calcul paralel
- Real World Haskell:Capitolul Concurrent and Parallel Programming
- Postari despre 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.
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.