問題タブ [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 に答える
3208 参照

c++ - Halide プログラミング言語を使い始めますか?

Halideという画像処理用のドメイン固有言語 (C++ 拡張機能) を使い始めようとしています。

Halide READMEに従って、私が試したことは次のとおりです。

  1. Ubuntu 12.04 Halide バイナリをダウンロードし、ディレクトリに解凍し~/halideます。
  2. このページのセクションで説明されているように、~/halideディレクトリに を作成しました。hello_halide.cppUsing Halide
  3. コンパイルしようとしましたhello_halide.cpp:

    g++-4.6 -std=c++0x hello_halide.cpp -L halide -lHalide -ldl -lpthread -o hello_halide

    しかし、g++ は libhalide を見つけることができません:

    /usr/bin/ld: error: cannot find -lHalide

  4. と に追加しようとし~/halideました$PATH$LD_LIBRARY_PATH、これは役に立ちませんでした。

hello_halide.cppこの基本的なHalide プログラムをコンパイルするにはどうすればよいですか?


ノート:

  • CUDA は、Halide の依存関係の 1 つです。CUDA がインストールされており、CUDA プログラムをコンパイル/実行できます。
  • Ubuntu 12.04 を使用しています。
  • 私の g++ バージョンは 4.6.3 です。
0 投票する
1 に答える
496 参照

c++ - ハライドタプルの使い方

Halide を使用して、複数の出力バッファーを生成したいと考えています。

この例は問題なく動作しますが、次のように、同じサイズではなく、複数の出力を持つことが可能かどうか疑問に思っていました。

出力 0 と出力 1 の違いについて、Halide からエラーが発生しました。

複数のオブジェクト ファイルではなく、1 つのコンパイル (compile_to_file) のみが必要であると想定しています。

ジェイ

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

c++ - ハライド extern メソッド

私は AOT コンパイルを使用して、Halide ライブラリを使用せずに Halide コードを使用しています。

HalideRuntime.h (ソースで利用可能) を見ると、.o ファイルで利用可能な extern メソッドが多数あることがわかります。

ハライド dev_mallocハライド dev_freeは非常に興味深いものです。ハライド_コピー_to_devを問題なく使用していますが、メモリが割り当てられていることがわかります。ホストとデバイスの間で単純な memcpy を実行し、代わりに ハライド dev_malloc を使用したい場合、これは可能ですか?

HalideRuntime.h は利用可能なすべての extern 関数をグループ化しましたか、それともオブジェクト ファイルには他の多くの関数が含まれていますか?

ジェイ

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

c++ - GPU を使用した Halide での extern の使用

Halide で extern 関数を使用しようとしています。私の文脈では、GPUでやりたいです。

opencl ステートメントを使用して AOT コンパイルでコンパイルします。もちろん、opencl は引き続き CPU を使用できるので、これを使用します。

今のところ、すべてが compute_root() でスケジュールされています。

最初の質問ですが、compute_root() と OpenCL gpu を使用した場合、私のプロセスは CopyHtoD と DtoH を使用してデバイス上で計算されますか? (または、ホスト バッファ上にあります)

2 番目の質問は、extern 関数に関連しています。一部のアルゴリズムが Halide にないため、一部の extern 呼び出しを使用します。外部呼び出し:

外部取得: extern "C" int cool_foo(buffer_t * in, int w, int h, int z, buffer_t * out){ .. }

しかし、cool_foo 関数では、私の buffer_t はホスト メモリにのみロードされます。dev アドレスは 0 (デフォルト) です。

アルゴリズムの前にメモリをコピーしようとすると:

それは何もしません。

デバイスメモリのみを利用可能にする場合:

ホスト ポインタは null ですが、デバイス アドレスはまだ 0 です。

(私の場合、dev_dirty は true で、host_dirty は false)

何か案が?

EDIT(dshaletに答えるために)

私のコードの構造は次のとおりです。

CPU でデータを正しく解析します。--> GPU にバッファを送信 (halode_copy_to_dev を使用...) --> Halide 構造体に入力し、パラメータを読み取り、境界条件を追加 --> extern 関数に移動 -->...

extern 関数に有効な buffer_t がありません。すべてを compute_root() でスケジュールしますが、HL_TARGET=host-opencl を使用し、ocl を gpu に設定します。Halide に入る前に、デバイスのアドレスを読み取ることができ、問題ありません。

これが私のコードです:

Halide の前は、すべてが CPU のもの (ポインター) であり、それを GPU に転送しました。

インサイド ハライド:

外側のハライド (Extern 関数):

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

halide - Halide: OpenCL コード生成

生成された OpenCL コードを含むファイルを Halide で生成することは可能ですか? opencl をターゲットとする Halide プログラムから ac ファイルを生成しようとしましたが、そこに opencl 固有のコードが見当たりません。

編集1:

特に、Halide でカーネルがどのように作成されるかを確認したいと思います。このようなもの:

static char kernelSourceCode[] = kernel void test_kernel(int a, int b, __global int *out) { out[0] = a + b; }

編集2:

わかりました、HL_DEBUG_CODEGEN=1 を env 変数に入れ、コード set_target(Target::Debug) に設定します。画面にたくさんのコードが表示されました。そのうちのいくつかは OpenCL コードでしたが、カーネル固有のコードはまだ表示されません。

カーネルについて示す 2 つの行が画面に表示されます。何かあるはずですか?

OpenCL kernel: /*OpenCL C*/

次に、次の行もあります。

kernel void _at_least_one_kernel(int x) { }

たとえば、次のような関数があるとします。

gradient(x, y) = x + y;

OpenCL をターゲットにしたい場合、関数はカーネル内にありますか?