Development Tip

Haskell Array.Accelerate-forkOS 오류

yourdevel 2020. 10. 30. 21:06
반응형

Haskell Array.Accelerate-forkOS 오류


일부 Data.Array.Accelerate계산 의 출력을 플로팅하려고 gnuplot하면 이상한 문제가 발생했습니다. 인터프리터를 통해 실행하면 바로 Haskell 데이터를 플로팅하거나 Accelerate 값을 인쇄하는 것처럼 모든 것이 정상이지만 Accelerate 데이터를 플로팅하려는 시도는 실패합니다. 주어진 오류는 forkOS_entry: interrupted입니다.

나는 그 이후로 내가 더 유닉스가되어야하고 각 프로그램에서 한 가지 (잘)해야한다는 것을 깨달았다. 그러나 이것이 실패하는 이유를 찾는 데 관심이 있습니다. 아래에 최소 코드 샘플이 포함되어 있습니다.

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

문제를 해결합니다. 실제로 이것은 플롯이 실제로 나타나게하는 반면, 이것이 없으면 프로그램은 오류가 있든 없든 완료되지만 실제로는 플롯을 표시하지 않습니다. 나는 이것이 작성 되었다면 대답으로 받아 들일 것이라고 생각하지만, 무슨 일이 일어나고 있는지 아는 것이 여전히 좋을 것입니다.

관련 가능성 :

(덧붙여서 문법 편집을 그만두세요. 질문에는 문제가 없습니다. 저는 원어민이고 제가 의미하는 바를 정확하게 작성합니다. 그래도 기여해 주셔서 감사합니다.)


코멘트에서 언급했듯이 가속 계산이 느리게 호출 될 때 GPU에서 gnuplot과 가속의 인터리브 상호 작용 때문일 수 있습니다. 세부 사항을 안다고 말할 수는 없지만이 [0]은 관련성이있는 것 같습니다. Accelerate가 이미 청구했기 때문에 gnuplot은 GPU를 사용할 수 없지만 Accelerate는 완전히 평가 될 때까지 GPU를 출시하지 않습니다. 또는 그 gnuplot이 Accelerate 전에 GPU 주장합니다 . 털이 많은 문제이며 Accelerate의 github 문제 추적기에 언급이 필요할 수 있습니다.

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

참고 URL : https://stackoverflow.com/questions/21563551/haskell-array-accelerate-forkos-error

반응형