Haskell Array.Accelerate - forkOS 错误

标签 haskell plot gnuplot gpu

尝试使用 gnuplot 绘制一些 Data.Array.Accelerate 计算的输出时,我遇到了一个奇怪的问题。当通过解释器运行时,一切都很好,就像绘制直接 Haskell 数据或仅打印 Accelerate 值一样,但是尝试绘制 Accelerate 数据会失败。给出的错误是forkOS_entry:中断

从那时起,我就意识到我应该更加 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

解决了问题。事实上,它使绘图真正出现,而如果没有这个,程序将在有或没有错误的情况下完成,但永远不会真正显示绘图。我想如果它被写下来我会接受它作为答案,但知道发生了什么仍然很高兴。

可能相关:

(顺便说一句,请停止尝试编辑语法。这个问题没有任何问题,我是母语人士,并且准确地写出了我的意思。不过还是感谢您的贡献。)

最佳答案

正如我在评论中提到的,这可能是因为当延迟调用加速计算时,gnuplot 和加速在 GPU 上的交错交互。我不能说我知道细节,但这个 [0] 似乎相关。可能 gnuplot 无法使用 GPU,因为 Accelerate 已经声明了它,但 Accelerate 在完全评估之前不会释放它。否则 gnuplot 在加速之前就声明了 GPU。看上去很棘手的问题,可能值得在 Accelerate 的 github 问题跟踪器中提及。

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

关于Haskell Array.Accelerate - forkOS 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21563551/

相关文章:

haskell - Haskell 中的负 double 或 float (macports)

haskell - GHC 编译错误

python - 在 Matplotlib 中围绕刻度标签绘制框

gnuplot postscript 终端不显示透明符号

c++ - 创建管道并从 C++ 写入 gnuplot 终端

styles - GNUPLOT 4.6 : custom contour lines

haskell - Data.Map 实现中的错误?

haskell - 如何使用 Parsec 编写仅接受唯一元素的解析器?

r - R图,x轴和y轴接触

r - R中的3D绘图-使用颜色的第4维