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.
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).