Haskell ha un metodo per determinare il numero di core CPU presenti su una macchina in fase di esecuzione?Come trovare il numero di core in fase di esecuzione in Haskell
risposta
Sì, esiste un tale metodo. Codice da "Real World Haskell": http://book.realworldhaskell.org/read/concurrent-and-multicore-programming.html
import GHC.Conc (numCapabilities)
main = putStrLn $ "number of cores: " ++ show numCapabilities
Si potrebbe Copy'n'Paste this code in un file chiamato numCores
e compilarlo con il codice Haskell. Che è possibile utilizzare la FFI per importare la sua definizione e utilizzarlo direttamente nel codice Haskell:
{-# LANGUAGE ForeignFunctionInterface #-}
import Control.Applicative ((<$>))
import Foreign.C.Types (CInt)
foreign import ccall "getNumCores" c_getNumCores :: IO CInt
getNumCores :: IO Int
getNumCores = fromEnum <$> c_getNumCores
A partire dalla versione 6.12, GHC RTS includes a function getNumberOfProcessors
, che viene utilizzato per implementare +RTS -N
. Puoi accedervi più o meno allo stesso modo delle normali funzioni straniere. Attenzione: GHC-only e funziona solo se il programma è stato costruito con -threaded
:
{-# LANGUAGE ForeignFunctionInterface #-}
import Foreign.C.Types (CInt)
foreign import ccall "getNumberOfProcessors" c_getNumberOfProcessors :: IO CInt
main :: IO()
main = c_getNumberOfProcessors >>= print
Testing:
$ ghc --make -threaded Main.hs
[1 of 1] Compiling Main (Main.hs, Main.o)
Linking Main ...
$ ./Main
1
Dal base
4.5 è possibile utilizzare getNumProcessors
da GHC.Conc. Questo è buono poiché il numero di funzionalità può ora essere impostato dinamicamente con lo setNumCapabilities
.
È GHC.Conc.getNumProcessors :: IO Int
getNumCapabilities
dice quante discussioni sono suggerito di GHC (e dipende +RTS -N
parametro opzione.)
- 1. Come iniettare IL in un metodo in fase di esecuzione
- 2. Come impostare il numero di thread in fase di esecuzione (evitando + RTS -N #)
- 3. Come trovare il nome della funzione corrente in fase di esecuzione?
- 4. scegliere una monade in fase di esecuzione
- 5. Come modificare il codice javascript in fase di esecuzione?
- 6. Come modificare il livello slf4j in fase di esecuzione?
- 7. Come ottenere il tipo generico in fase di esecuzione?
- 8. Come ottenere il DiscriminatorValue in fase di esecuzione
- 9. Determinare quale core esegue il processo Node.js in fase di esecuzione
- 10. Erlang - Come trovare il nome della funzione corrente in fase di esecuzione?
- 11. Come faccio a sbarazzarmi di LD_LIBRARY_PATH in fase di esecuzione?
- 12. Imposta il numero massimo di thread in fase di esecuzione su numpy/openblas
- 13. Castle Windsor Resolve in fase di esecuzione
- 14. php creare il metodo di classe in fase di esecuzione
- 15. Impostazione tipo generico in fase di esecuzione
- 16. Ottieni binding IIS in fase di esecuzione
- 17. Modifica implementazione/classe in fase di esecuzione
- 18. Aumenta disposizione PySpark in fase di esecuzione
- 19. Sostituisci bean in fase di esecuzione
- 20. Modifica proprietà log4j in fase di esecuzione
- 21. Cambiare l'orientamento in fase di esecuzione
- 22. Estendere classe in fase di esecuzione
- 23. Come fare riferimento all'assemblaggio in mvc in fase di esecuzione
- 24. Modifica oggetto iniettato in fase di esecuzione
- 25. Ridimensionamento dei controlli in fase di esecuzione
- 26. Come cambiare lingua in fase di esecuzione in java swing
- 27. esclusione in fase di esecuzione __setattr__
- 28. Rileva versione Python in fase di esecuzione
- 29. Come aggiungere margine a un pulsante in fase di esecuzione?
- 30. Aggiungere animazione in fase di esecuzione
nota che (come afferma il libro) questo ti dà solo il numero di core in dotazione ai RTS via '-N', che non è necessariamente uguale al numero di core fisici. – delnan
È il numero di core a cui Haskell sarà autorizzato ad accedere ... che è quasi certamente ciò che l'OP vuole realmente? –
@LouisWasserman: Riesco a vedere casi di utilizzo in cui un programma potrebbe desiderare di utilizzare tutti i nuclei necessari (senza essere esplicitamente autorizzato a farlo). In alternativa, qualcuno potrebbe voler scrivere un programma per ottenere statistiche sull'hardware. – ivanm