2017-02-21 12 views
0

8x8の各パッチに複雑な操作を適用して、イメージをループしたいと思います。たとえば、各パッチの特異値分解(SVD)を計算し、3番目の特異値を出力画像に格納する必要があるとします。 Halideと組み合わせてライブラリ(例:SVDのLAPACK)を使用することは可能ですか?または、ハライドパイプラインの一部としてSVDアルゴリズムをプログラムする必要がありますか?Halideで外部ライブラリを使用することはできますか?

答えて

1

はい、これは外部機能の定義を使用して正確に行うことができます。あなたが試験に従うことができ、簡単な例があります:

https://github.com/halide/Halide/blob/master/test/correctness/extern_stage.cpp

基本的なモデルでは、外部のステージが機能として表示され、および(計算-で)それに応じてパイプラインでスケジュールすることができるということです。あなたが書くexternインタフェース関数は、入力ブロックを与えられた出力ブロックを実際に計算することと、与えられた出力ブロックを計算するのに必要な入力量の問い合わせに応答することの両方を担当します。

これは、この使用例のためにすばやく進む必要があります。

これは、ここで解決しなければならない比較的小さな不変サイズの問題を考えれば、あなた自身の簡単な8x8 SVDインラインを書くだけでよい(潜在的な最適化、GPUなどの異なるプラットフォームを対象とする)ハライドアルゴリズムで。

関連する問題