我试图使用 gnuplot
绘制一些 Data.Array.Accelerate
计算的输出,但遇到了一个奇怪的问题。当通过解释器运行时,一切正常,像绘制纯 Haskell 数据或仅打印 Accelerate 值一样,但尝试绘制 Accelerate 数据失败了。给出的错误是 forkOS_entry: interrupted
。
后来我意识到我应该更加 UNIX 化,并在每个程序中只做一件事(好)。但我有兴趣了解为什么会失败。我在下面包含了一个最小代码示例。
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认为它值得一试。) - not my job