Подтвердить что ты не робот

Haskell Array.Accelerate - ошибка forkOS

Пытаясь построить вывод некоторых вычислений 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

устраняет проблему. Фактически это заставляет сюжет фактически появляться, тогда как без этого программа закончила бы с ошибкой или без нее, но никогда не отобразила бы график. Полагаю, я бы принял это как ответ, если бы он был написан, но было бы неплохо узнать, что происходит.

Возможно, связано:

(Кстати, пожалуйста, прекратите пытаться редактировать грамматику. Нет ничего плохого в вопросе, как есть, я носитель языка и точно пишу, что я имею в виду. Спасибо за ваш вклад.)

4b9b3361

Ответ 1

Как я уже упоминал в комментарии, это, скорее всего, связано с чередованием взаимодействия gnuplot и ускорением на графическом процессоре, когда вычисление ускорения называется лениво. Я не могу сказать, что знаю подробности, но это [0] кажется актуальным. Возможно, gnuplot не может использовать GPU, поскольку Accelerate уже заявила об этом, но Accelerate не выпустит его до полной оценки. Или же, что gnuplot утверждает GPU до ускорения. Волосатая проблема, и это может потребовать упоминания в трекере github для ускорения.

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