問題タブ [halide]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
584 参照

if-statement - Halide select ステートメントに関する問題

Halide を使用してステンシル計算を実行しようとしています。したがって、基本的な 5 ポイントの 2D ステンシルを想定すると、セル i,j の値を評価するには、i-1、j i-2,j、i+1、j i+2,j の値が必要です。これが C++ で機能する方法は、for ステートメントがあることです。

今、私は Halide で同じことをしようとしています。そのため、C++ コードの入力配列と同じ値を持つ Buffer が呼び出されています。そして、呼び出された Func があります。

out(i,j) = select(i >= 2 && j >= 2, some_function_of(in(i,j), in(i-1,j), in(i-2,j), in(i+1,j), in(i+2,j)) ,0.0f)

このコードを実行すると、次のエラーが発生します。

エラー: 入力バッファー b0 は -1 でアクセスされます。これは次元 0 の最小値 (0) より前です 中止 (コア ダンプ)

私の理解では、このエラーの理由は、select ステートメントが両方のステートメントを評価するため、i と j の値が 2 未満の場合は何も計算したくありませんが、関数は i = 0 と j = 0 で評価されるため、無効なアドレス アクセス。

それで、Halideでこれを行う方法はありますか?if/else ステートメントに相当するものは他にありますか?

0 投票する
2 に答える
1746 参照

c++ - OpenCVマットをHalide Imageに変換して元に戻す方法は?

私の目標は、既存の画像処理パイプライン (Halide で記述) を、NL 手段のノイズ除去などの OpenCV 関数で強化することです。OpenCV 関数は Halide のスケジューリング機能を使用することができないため、私の計画は、各 OpenCV ステージの前に各 Halide 関数を実現することです。残りの問題は、Halide Image (Func 実現の結果) から OpenCV Mat (OpenCV 関数への入力として) へ、および完了時に OpenCV Mat から Halide Image への最適な変換方法です。私のHalide画像はフロートタイプで、3つのチャンネルがあります。

これに対する明らかな解決策の 1 つは、あるデータ型から別のデータ型にデータをコピーする関数を作成することですが、これは無駄だと思います。データのコピーに貴重な時間がかかるだけでなく、イメージが 2 つの異なるデータ型として保存されるため、メモリの浪費にもなります。ポインターまたはデータ バッファーを使用して、画像データを新しい形式で単純に再ラップする方法はありますか? うまくいけば、このプロセスが元に戻せるので、Halide から OpenCV に移行し、OpenCV 関数が完了したら Halide に戻ることができます。

0 投票する
2 に答える
582 参照

c++ - Halide で C++ ランダム関数を使用するには?

私の目標は、Halide で信号に依存するガウス ノイズをモデル化できるようにすることです。私は現在Halideに移植しているOpenCVで構築されたモデルを持っています。問題は、Halide の乱数ジェネレーターが正規分布していないことです。そのため、外部関数を使用してノイズ値を生成する必要があります。

実装の試行では、C++ 乱数ジェネレーターを使用して正規分布ノイズを生成し、Halide Func を使用して各ピクセルでノイズの信号依存の標準偏差を生成し、次にノイズを renoise のピクセルに追加します。以下に、関数のレイアウトを示します。

これは私には理にかなっていますが、残念ながら、コンパイルしようとすると次のエラーが表示されます。

そのため、 Func の出力を C++ 関数に提供できないようです。これは Halide の制限として理にかなっていると思いますが、信号依存の正規分布ノイズを実装する代替手段は実際には見当たりません。Halide で外部 C++ 関数を使用する別の方法はありますか? 「extern」の使用について話している人を見たことがありますが、残念ながらその機能に関するドキュメントは非常に軽いようで、必要なものを見つけることができません。

0 投票する
2 に答える
296 参照

c++ - ハライドのコレスキー分解

ハライドでコレスキー分解を実装しようとしています。crout などの一般的なアルゴリズムの一部は、三角行列の反復で構成されます。このように、分解の対角要素は、入力行列の対角要素から部分的な列の合計を減算することによって計算されます。列の合計は、対角要素を除く、入力行列の三角形部分の 2 乗要素に対して計算されます。

BLAS を使用すると、コードは C++ で次のようになります。

私の質問は、このようなパターンが一般的に Halide で表現できるかどうかです。もしそうなら、それはどのように見えますか?