¿Tiene Haskell un método para determinar el número de núcleos de CPU presentes en una máquina en tiempo de ejecución?Cómo encontrar el número de núcleos en tiempo de ejecución en Haskell
Respuesta
Sí, existe ese método. Código de "Real World Haskell": http://book.realworldhaskell.org/read/concurrent-and-multicore-programming.html
import GHC.Conc (numCapabilities)
main = putStrLn $ "number of cores: " ++ show numCapabilities
Se podría Copy'n'Paste this code en un archivo llamado numCores
y compilarlo con su código de Haskell. Que se puede utilizar el FFI importar su definición y utilizarlo directamente en el código 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
Desde la versión 6.12, GHC RTS includes a function getNumberOfProcessors
, que se utiliza para implementar +RTS -N
. Puede acceder a él de la misma manera que las funciones extranjeras ordinarias. Advertencia: GHC-solamente y sólo funciona si el programa fue construido con -threaded
:
{-# LANGUAGE ForeignFunctionInterface #-}
import Foreign.C.Types (CInt)
foreign import ccall "getNumberOfProcessors" c_getNumberOfProcessors :: IO CInt
main :: IO()
main = c_getNumberOfProcessors >>= print
Pruebas:
$ ghc --make -threaded Main.hs
[1 of 1] Compiling Main (Main.hs, Main.o)
Linking Main ...
$ ./Main
1
Desde base
4.5 se puede utilizar getNumProcessors
de GHC.Conc. Esto es bueno ya que el número de capacidades ahora puede establecerse dinámicamente con setNumCapabilities
desde el mismo.
Es GHC.Conc.getNumProcessors :: IO Int
getNumCapabilities
dice cuántos hilos se sugirió a GHC (y depende de +RTS -N
opción de parámetros.)
- 1. Encontrar el número de núcleos en Java
- 2. Multiprocesamiento en Python al tiempo que limita el número de procesos en ejecución
- 3. ¿Cómo se genera un número aleatorio en tiempo de ejecución?
- 4. Obtener el número de núcleos de CPU en JavaScript?
- 5. encontrar nuevas clases de Java en tiempo de ejecución
- 6. Cómo obtener el tiempo de ejecución de un programa en Haskell
- 7. ¿Cómo encontrar el nombre de la función actual en tiempo de ejecución?
- 8. ¿Cómo puedo encontrar el tiempo de ejecución de una sección de mi programa en C?
- 9. En tiempo de ejecución, ¿cómo puedo limitar el número de subprocesos java
- 10. ¿Cómo obtener información de CPU en C en Linux, como el número de núcleos?
- 11. ¿Cómo encontrar el tiempo de ejecución de procedimientos almacenados en SQL Server?
- 12. Erlang - ¿Cómo encontrar el nombre de la función actual en tiempo de ejecución?
- 13. Escribir una función de tiempo en Haskell
- 14. Cómo encontrar valores de propiedad predeterminados de un control en tiempo de ejecución en C#
- 15. Python: crea dinámicamente la función en el tiempo de ejecución
- 16. Tiempo de ejecución en Ocaml
- 17. Cargando jar en el tiempo de ejecución
- 18. El tiempo máximo de ejecución en phpMyadmin
- 19. Mida el tiempo de ejecución en C#
- 20. ¿Encontrar todos los ayudantes de la clase en Delphi en el tiempo de ejecución usando RTTI?
- 21. ¿Cómo cambiar CurrentCulture en tiempo de ejecución?
- 22. Cómo encontrar el número de objetos en el montón
- 23. ¿Cómo crear controles en tiempo de ejecución?
- 24. ¿Cómo cambiar AndroidManifest en tiempo de ejecución?
- 25. ¿Cómo cambias el tamaño de Fancybox en tiempo de ejecución?
- 26. ¿Cómo modificar el código de JavaScript en tiempo de ejecución?
- 27. ejecución de la matriz de ejecución haskell
- 28. Localización en tiempo de ejecución
- 29. Número de elementos en Haskell en el estilo pointfree
- 30. omp_set_dynamic: ¿cómo determina el tiempo de ejecución el número de subprocesos?
Tenga en cuenta que (como dice el libro) esto sólo le da el número de núcleos suministrados a los RTS a través '-N', que no es necesariamente igual a la cantidad de núcleos físicos. – delnan
Es la cantidad de núcleos a los que Haskell tendrá acceso ... ¿qué es lo que realmente quiere el OP? –
@LouisWasserman: Veo casos de uso en los que un programa puede desear utilizar tantos núcleos como se requiera (sin que se le haya otorgado permiso explícito para hacerlo). Alternativamente, alguien puede querer escribir un programa para obtener estadísticas de hardware. – ivanm