Пытаясь построить вывод некоторых вычислений 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
устраняет проблему. Фактически это заставляет сюжет фактически появляться, тогда как без этого программа закончила бы с ошибкой или без нее, но никогда не отобразила бы график. Полагаю, я бы принял это как ответ, если бы он был написан, но было бы неплохо узнать, что происходит.
Возможно, связано:
(Кстати, пожалуйста, прекратите пытаться редактировать грамматику. Нет ничего плохого в вопросе, как есть, я носитель языка и точно пишу, что я имею в виду. Спасибо за ваш вклад.)