tipos que proyecto practicos indicadores indicador gestion ejemplos cumplimiento haskell concurrency parallel-processing multicore

haskell - proyecto - que es un indicador pdf



¿Por qué tiene que usar un indicador de compilador y un indicador de tiempo de ejecución para obtener soporte multinúcleo en Haskell? (3)

¿Por qué no puede el ejecutable en tiempo de ejecución detectar que fue compilado con subprocesos y usar todos los núcleos del sistema a menos que se especifique lo contrario?

Esa es una solicitud interesante característica!

Puede solicitarlo en el rastreador de características de GHC: http://hackage.haskell.org/trac/ghc/wiki/ReportABug

La wiki de Haskell muestra que necesita establecer un indicador de compilación y un indicador de tiempo de ejecución para obtener soporte multi-core. ¿Por qué no es suficiente usar la biblioteca para obtener el comportamiento correcto en el momento de la compilación? ¿Por qué no puede el ejecutable en tiempo de ejecución detectar que fue compilado con subprocesos y usar todos los núcleos del sistema a menos que se especifique lo contrario? Creo que sería mejor activar estos por defecto. Entonces podría haber banderas para desactivar o modificar estas funciones.

http://www.haskell.org/haskellwiki/GHC/Concurrency#Multicore_GHC dice:

  • Compila tu programa usando el interruptor de subproceso.
  • Ejecute el programa con + RTS -N2 para usar 2 hilos, por ejemplo. Debería usar un valor de -N igual al número de núcleos de CPU en su máquina (sin incluir los núcleos de subprocesamiento).


    Parece un tanto oneroso tener indicadores que se deben establecer tanto en tiempo de compilación como en tiempo de ejecución. ¿Son estas banderas vestigios de los esfuerzos para agregar concurrencia a GHC?


  • De la guía del usuario de GHC (versión 6.12.1):

    Omitir x , es decir, +RTS -N -RTS , permite que el tiempo de ejecución elija el valor de x en función de cuántos procesadores haya en su máquina.

    Supongo que no hay una razón específica para que esto no sea el valor predeterminado, aparte de la visión de los autores de lo que deberían ser los valores predeterminados. (Tenga en cuenta que esto también habilita el GC paralelo, que a veces no es lo que desea que sea por defecto).


    Mientras estás desarrollando el programa, el +RTS ... extra +RTS ... no debería ser un gran problema (aunque admito que me pareció extraño cuando recogí a Haskell por primera vez). Para el binario final (enviado) puede vincularlo con las opciones de RTS estático ( manual de GHC ) proporcionando un archivo C que contenga char *ghc_rts_opts = "-N"; .

    EDITAR: Actualizando esta pregunta para GHC 7.x, ahora hay una manera de especificar las opciones de RTS en el momento de la compilación:

    ghc -threaded -rtsopts -with-rtsopts=-N

    Este 1) utiliza el sistema de tiempo de ejecución de subprocesos 2) Habilita las opciones de RTS 3) Establece la opción de RTS para usar tantos subprocesos como núcleos disponibles (use -Nx donde x es un número para controlar manualmente el número de subprocesos del sistema operativo).