我试图绘制一些Data.Array.Accelerate
计算的输出时gnuplot
遇到一个奇怪的问题。通过解释器运行时,一切都很好,就像绘制直接的Haskell数据或仅打印Accelerate值一样,但是尝试绘制Accelerate数据会失败。给出的错误是forkOS_entry: interrupted
。
从那以后,我意识到我应该变得更加UNIXy,并且在每个程序中都做一件事。但是我有兴趣找出失败的原因。我在下面包括一个最小代码示例。
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
更新2014/09/11
根据user2141650
的建议(谢谢!),将最后一行更改为
plotList [] $! points
解决问题。实际上,它实际上使绘图显示出来,而没有此程序,程序将在有或没有错误的情况下结束,但从不实际显示绘图。我想如果它是书面的,我会接受作为答案,但是知道发生了什么仍然很高兴。
可能相关:
(顺便说一句,请停止尝试编辑语法。这个问题没有任何问题,我是一个以英语为母语的人,请写出我的意思。不过感谢您的贡献。)
-threaded
。(别忘了对源代码进行简单的编辑,因此ghc认为值得这样做。)