状況
現在、私はエッジ検出を処理するプロジェクトに取り組んでいます。したがって、より良いパフォーマンスを達成するために加速アレイを使用してアルゴリズムを計算したいと思います。残念ながら、私は関数型プログラミングと並列プログラミングだけでなく、実際に何が正しいのか分かりません。
加速(Data.Array.Accelerate)を使用した並列プログラミング
通報
Iは、アレイのピクセル/値のそれぞれにアクセスする必要がエッジ検出を実行するためにグレースケールに、あるいは所定の画像を変換します。
非加速配列(Data.Arrayパッケージ)を使用して、(!)演算子を使用して目的の値を取得できました。以下のような同様の機能がある加速アレイ(Data.Array.Accelerateパッケージ)を使用して
..
(!) :: (Shape ix, Elt e) => Acc (Array ix e) -> Exp ix -> Exp e
説明:配列からスカラーを抽出する表現形式
(!!) :: (Shape ix, Elt e) => Acc (Array ix e) -> Exp Int -> Exp e
説明:線形インデックスで配列からスカラーを抽出する式形式
..しかし、彼らは常にExp
データ型または他に何から 『値をアンパック
質問
をすることが可能です..私の質問につながる式の値(Exp e)
』を加速を返すに終わります私にお勧めしますか?
例
..
toArr :: Image PixelRGB8 -> Acc (Array DIM2 (Pixel8, Pixel8, Pixel8))
toArr img = use $ fromFunction (Z :. width :. height) (\(Z :. x :. y) -> let (PixelRGB8 r g b) = pixelAt img x y in (r, g, b))
where width = imageWidth img
height = imageHeight img
..しかし、私はアクセスする必要があるので、私は、その逆にそれを行うには知りませんwidth/height/pixelsからイメージを生成する式の値。
toJuicy :: Acc (Array DIM2 (Pixel8, Pixel8, Pixel8)) -> Image PixelRGB8
toJuicy arr = undefined
ご協力いただければ幸いです。