¿Hay alguna forma en Haskell (usando GHC si es importante, para código que necesita ejecutarse en Linux y Windows) para realizar cálculos acotados? Es decir, "calcule el resultado de esta función si es factible hacerlo, pero si el intento ha usado más de X ciclos de CPU, espacio de pila Y o espacio de montón Z, y aún no lo ha hecho, deténgase y devuelva una indicación de que no fue posible completar el cálculo "?Computación acotada en Haskell
Respuesta
System.Timeout.timeout :: Int -> IO a -> IO (Maybe a)
¡Gracias! Definitivamente parece la respuesta por tiempo limitado. ¿Mirando a través de esa sección de la documentación, no parece haber una solución similar para la memoria? – rwallace
De hecho. Sin embargo, no puedo imaginar ninguna semántica sensata para la memoria: además de la extrema dificultad de medir el consumo de memoria de manera precisa, ¿qué pasa si hay otro hilo que no tiene memoria limitada? ¿Qué sucede si comparte algunos valores con ese otro hilo? quien "paga"? ¿Cómo resuelves esos problemas lo suficientemente rápido como para obtener mediciones sin paralizar la función que se está ejecutando? –
Sí, estos son problemas difíciles y, sinceramente, no era optimista sobre la probabilidad de que un lenguaje de uso general ofrezca una solución lista para usar, pero pensé que valía la pena intentarlo antes de resignarme a hackear mi propia gestión de memoria, etc. En C++ :-) – rwallace
he aquí una solución hacker que podía intento: desovar sus cálculos con forkIO
, y dejar que el hilo de los padres (o un hilo de control que tiene acceso a la ThreadId
de hilo en forma de horquilla) sondear periódicamente para cualquier cantidad que desee, y lanzar una excepción asíncrona al hilo informático según sea necesario (curiosamente, así es exactamente como funciona timeout
.)
La siguiente pregunta sería si el Esta es una forma de averiguar qué tan grande es el montón actualmente dentro de Haskell. El consumo total de memoria y los ciclos pueden descubrirse generando comandos de shell, o consultando el sistema operativo de otra manera (no sabría cómo hacerlo en Windows).
No es una solución perfecta, pero es simple , que puedes implementar y probar en un par de minutos.
Estaba buscando un método de memoria en uso, pero no pude encontrar uno dentro de Haskell. –
En lugar de monitorear el uso del montón de la horquilla, también podría limitar su montón con 'Rts'opts, ¿o no? – leftaroundabout
'forkIO' está dentro del mismo programa Haskell. A menos que estés generando un nuevo proceso, estás trabajando dentro del montón compartido. –
En un nivel por proceso, puede usar GHC's RTS options para controlar la pila máxima y los tamaños de pila.
- 1. Computación en paralelo en Haskell
- 2. ¿Diferencia entre computación en la nube y computación distribuida?
- 3. Computación en clúster en Go
- 4. plataforma de computación reversible
- 5. Computación multi-GPU Cuda
- 6. Java genérico Colección de Genérico Tipo acotada con Comodín
- 7. sobre 'PSEQ' en Haskell
- 8. ¿Qué es la computación en la nube?
- 9. Computación de flujo de datos en python
- 10. Computación en paralelo de GPU con OpenCV
- 11. Extracto de artículos de computación
- 12. Directrices de diseño Computación distribuida
- 13. Eficiencia de la computación Pregunta
- 14. Computación de matriz de covarianza
- 15. Uso de HTML5 WebGL Shaders para Computación
- 16. Computación y detección de bits de indicador
- 17. (Re) Comenzando con C++ (para computación científica)
- 18. Precisión de GPU para computación científica
- 19. Combinaciones de vectores de computación eficiente
- 20. Tomando computación pesada del Android UI Thread
- 21. Proyecto de computación distribuida de JavaScript
- 22. Excelentes discursos sobre ciencias de la computación
- 23. Asignaciones introductorias de Ciencias de la Computación
- 24. ¿Es apropiado Python para algoritmos enfocados en computación científica?
- 25. Temas importantes en la teoría de la computación
- 26. "multi-agente de la computación" en términos simples
- 27. Servicio de computación en la nube para PHP y Node.js
- 28. Computación científica en Python para los programadores de MATLAB
- 29. Virtualización y computación en la nube: ¿por dónde empezar?
- 30. Recursos para computación de alto rendimiento en C++
¿Está construyendo alguna herramienta de verificación de modelos? –
Entre otras cosas, sí. – rwallace
Esto también puede ser de interés: http://hackage.haskell.org/package/speculation – jberryman