問題タブ [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 投票する
2 に答える
1086 参照

halide - Halide::Expr' は文脈上 'bool' に変換できません -- 関数の値を変数に格納する

私はHalideを初めて使用し、最初にアルゴリズムの実装をいじっています。周囲の 8 ピクセルの値に応じて、次のピクセルにスキップするか、何らかの処理を行ってから次のピクセルに移動する関数を作成しようとしています。これを書き込もうとすると、次のコンパイラ エラーが発生します。

84:5: エラー: タイプ 'Halide::Expr' の値は、文脈上 'bool' に変換できません

すべてのチュートリアルを完了し、select 関数がオプションであることを確認しましたが、関数の値を比較したり、それらをどこかに保存したりする方法はありますか?

また、この問題について間違って考えているか、正しい「ハライドの考え方」で実装していない可能性があるので、どんな提案も素晴らしいでしょう。よろしくお願いします!

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

c++ - GPU (OpenGL) をターゲットとする Halide - ベンチマークと HalideRuntimeOpenGL.h の使用

ハライド初心者です。私は言語の感触をつかむためにチュートリアルをいじっています。現在、OSX のコマンド ラインから実行する小さなデモ アプリを作成しています。

私の目標は、画像に対してピクセル単位の操作を実行し、GPU でスケジュールして、パフォーマンスを測定することです。ここで共有したいことをいくつか試しましたが、次のステップについていくつか質問があります.

最初のアプローチ

Target が OpenGL で GPU にアルゴリズムをスケジュールしたのですが、GPU メモリにアクセスしてファイルに書き込むことができなかったため、Halide ルーチンで、Halide リポジトリにあるglsl サンプル アプリFunc cpu_outと同様のものを作成して、出力を CPU にコピーしました。

pixel_operation_cpu_out.cpp

この AOT をコンパイルするので、関数呼び出しを行いmain()ます。main()別のファイルにあります。

main_file.cpp

注:ここで使用されるクラスは、この Halide サンプル アプリImage のクラスと同じです。

これは問題なく機能し、期待どおりの出力が得られます。私が理解していることから、CPUメモリでcpu_out値を使用できるようにします。これが、にアクセスすることでoutこれらの値にアクセスできる理由です。output.buf.hostmain_file.cpp

2 番目のアプローチ:

私が試みた 2 番目のことは、Halide スケジュールでデバイスからホストへのコピーを作成するFunc cpu_outのではなく、のcopy_to_host関数を使用することでしたmain_file.cpp

pixel_operation_gpu_out.cpp

main_file.cpp

だから、今、私が考えているのは、それがGPU をpixel_operation_gpu_out維持しているということです。そうすると、メモリが CPU にコピーされます。このプログラムは、期待される出力も提供します。output.bufcopy_to_host

質問:

2 番目のアプローチは、最初のアプローチよりもはるかに低速です。ただし、遅い部分はベンチマークされた部分にはありません。たとえば、最初のアプローチでは、4k 画像のベンチマーク時間として 17 ミリ秒を取得します。同じ画像の場合、2 番目のアプローチでは、ベンチマーク時間を 22us として取得し、所要時間copy_to_hostは 10 秒です。アプローチ1と2の両方が本質的に同じことをしているので、この動作が予想されるかどうかはわかりません。

次に試みたのは、テクスチャを使用して入力バッファと出力バッファにリンクし、jpeg ファイルに保存する代わりに[HalideRuntimeOpenGL.h][3]OpenGL コンテキストに直接描画できるようにすることでした。main_file.cppただし、関数の使用方法を理解するための例を見つけることができずHalideRuntimeOpenGL.h、自分で試したことは常に実行時エラーを引き起こし、解決方法がわかりませんでした。誰かが私に指摘できるリソースを持っているなら、それは素晴らしいことです.

また、上記のコードに関するフィードバックも歓迎します。私はそれが機能し、私が望むことをしていることを知っていますが、それは完全に間違った方法である可能性があり、それ以上のことはわかりません.

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

halide - Halide で多次元データを操作する方法

私はハライドで働き始めました。明示的に画像処理フレームワークであることは知っていますが、次元削減や低次元空間での数式の分離などの複雑な手順を実行せずに多次元配列 ( > 3D ) を処理する方法はありますか?

ありがとう、カーナジット

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

halide - スケジューリングに問題がある

侵食関数の実行時間を短縮しようとしていますが、図に示すようにタイルで問題を分割しようとすると、実際には実行が遅くなります。

浸食時間差

スケジューリングなしの私のコードは次のとおりです。

タイリングを試みた私のコード(チュートリアルに示されている例を使用しようとしました):

私はまだこれに非常に慣れていないので、適切にスケジュールする方法に関するヒントは大歓迎です。

編集:時間を取得するために使用されるコード:

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

c++ - 画像のアルファを計算できません

Halide を使用して簡単な画像計算プログラムを作成しようとしています。だから私は明るさ関数から始めます。

私はこれを得た

しかし、私には問題があります。私の画像はRGBA画像なので、アルファでアルゴリズムを計算します。どうすればそれをスキップして、f(x,y,c) を変更して c を 0-2 のみにすることができますか?

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

halide - AOT コードを実行できません

私は現在 AOT チュートリアルを行っており、コンパイル部分は機能しますが、コンパイルされたコードを含むコード (別のプロジェクトにある) をビルドしようとすると、次のエラーのためにビルドに失敗します:

ここに画像の説明を入力

どうすれば解決できますか?

編集:フォローアップの質問。2 つの関数をコンパイルすることができましたが、同じプロジェクトでそれらを使用しようとすると、次のエラーがスローされ続けます。

ここに画像の説明を入力

これはエラーのほんの一部です。だから私のフォローアップの質問はです。すべての関数を 1 つのファイルにマージできますか、または二重定義を無視する別の方法はありますか?