haskell plot gnuplot gpu

Haskell Array.Accelerate-error de forkOS



plot gnuplot (1)

Como mencioné en un comentario, esto es probable debido a la interacción intercalada de gnuplot y aceleración en la GPU, cuando el cálculo de aceleración se llama perezosamente. No puedo decir que conozco los detalles, pero esto [0] parece relevante. Es posible que gnuplot no pueda usar la GPU porque Accelerate ya la ha reclamado, pero Accelerate no la lanzará hasta que se haya evaluado por completo. O bien, ese gnuplot reclama la GPU antes de Accelerate. Se trata de un problema peliagudo, y podría merecer una mención en el rastreador de problemas de github de Accelerate.

[0] https://github.com/AccelerateHS/accelerate/issues/48

Intentando trazar el resultado de algunos Data.Array.Accelerate cálculos con gnuplot encontré un extraño problema. Cuando se ejecuta a través del intérprete, todo está bien, ya que se trazan los datos de Haskell directamente o simplemente se imprimen los valores de Accelerate, sin embargo, se produce un error al tratar de trazar los datos de Accelerate. El error dado es forkOS_entry: interrupted .

Desde entonces, me di cuenta de que debería ser más UNIXy y hacer una cosa (bien) en cada programa. Pero estoy interesado en descubrir por qué esto falla. Incluyo un ejemplo de código mínimo a continuación.

import Prelude hiding (zip,zipWith) import Graphics.Gnuplot.Simple import Data.Array.Accelerate -- import Data.Array.Accelerate.Interpreter import Data.Array.Accelerate.CUDA f :: Vector Float -> Vector Float -> Acc (Vector Float) f xs ys = let xs'' = use xs ys'' = use ys in (zipWith (*) xs'' ys'') n=10::Int points = toList.run $ f (fromList (Z:.n) [1..10]) (fromList (Z:.n) [-5..4]) main = plotList [] points

actualización 2014/09/11

Basado en la sugerencia de user2141650 (¡gracias!) Cambiando la última línea por

plotList [] $! points

arregla el problema De hecho, hace que la trama realmente aparezca, mientras que sin esto el programa terminaría con o sin error, pero nunca mostraría la trama. Supongo que aceptaría esto como una respuesta si fue escrito, pero aún sería bueno saber qué está pasando.

Posiblemente relacionado:

(Por cierto, por favor, deja de intentar editar para la gramática. No hay nada de malo en la pregunta, como soy, soy un hablante nativo y escribo exactamente lo que quiero decir. Gracias por tu contribución).