Je travaillais sur un script dans lequel j'espérais profiter de plusieurs processeurs dans ma machine en remplaçant mapM
par Async.mapConcurrently
.parallélisme multicœur avec pile runge
En n'observant aucune augmentation de vitesse dans cette instance, j'ai voulu vérifier que runghc
peut en effet utiliser plusieurs cœurs.
Suivant un fichier Foo.hs
:
import Control.Concurrent
main = print =<< Control.Concurrent.getNumCapabilities
Si je compile le fichier comme suit:
stack ghc -- -threaded Foo.hs
puis exécutez comme suit:
./Foo
il renvoie le résultat 1
. Ceci est prévu, car aucune option RTS n'a été fournie. Courir plutôt comme suit:
./Foo +RTS -N
renvoie le nombre 6
, car il y a 6 processeurs dans ma machine (en accord avec nproc
).
Cependant, quand je lance le script en mode "interprété" comme ceci:
GHCRTS="-N" stack runghc Foo.hs
Il donne le texte d'erreur suivant:
Running /home/kostmo/.stack/programs/x86_64-linux/ghc-nopie-8.0.2/bin/ghc-pkg --no-user-package-db list --global exited with ExitFailure 1
ghc-pkg: the flag -N requires the program to be built with -threaded
Est-il possible d'utiliser plusieurs cœurs avec pile " scripts "?