Haskell Array.Accelerate-forkOS错误


71

我试图绘制一些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

解决问题。实际上,它实际上使绘图显示出来,而没有此程序,程序将在有或没有错误的情况下结束,但从不实际显示绘图。我想如果它是书面的,我会接受作为答案,但是知道发生了什么仍然很高兴。

可能相关:

(顺便说一句,请停止尝试编辑语法。这个问题没有任何问题,我是一个以英语为母语的人,请写出我的意思。不过感谢您的贡献。)


1
可以尝试的方法:使用重新编译-threaded。(别忘了对源代码进行简单的编辑,因此ghc认为值得这样做。)
不是我的工作

8
当与编译器标志混淆时,GHC标志-fforce-recomp会派上用场。
crockeea 2014年

1
@SeanD您尝试过吗?
不是我的工作

2
@enoughreptocomment抱歉,延迟,本周我离开了我的GPU包装盒。有趣的是,使用-threaded它会使它成功运行大约1/4的时间,否则它会因相同的错误而失败。感觉好像正在发生某种竞争状况,我不知道这是库还是GHC的错误。 编辑:使事情变得更加混乱,我注意到错误似乎仅在我使用runghc而不是ghc和程序时发生。

2
可能是gnuplot和Acceleration互相干扰了吗?您可以points在调用plotList之前尝试进行全面评估吗?
user2141650 2014年

Answers:


1

正如我在评论中提到的那样,这可能是由于gnuplot和GPU上的加速之间的交互交互,当延迟计算被懒惰地调用时。我不能说我知道细节,但是这个[0]似乎很重要。gnuplot可能因为Accelerate已经声明了它而无法使用GPU,但是Accelerate直到全面评估后才会发布它。否则,gnuplot会加速之前声明GPU 。毛茸茸的问题,它可能值得在github问题跟踪器中提及Accelerate。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.