問題タブ [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.
halide - 畳み込みのマージンで外部画像を初期化する方法は?
制約: 1. サイズ (ImHeight,ImWidth) のマージンを持つ画像へのポインターを持っている 2. フィルター サイズ (FH,FW) ; FH、FW は奇数 3. ActualImageHeight = ImHeight-2*(FH/2); ActualImageWidth = ImWidth-2*(FW/2);
方法:
- image(0,0) がピクセル (0,0) であり、マージン ピクセルではないようなポインタでイメージを初期化しますか?
- 境界条件/クランプを使用せずにスケジュールを定義 - 指定されたイメージ ポインター メモリが既にマージンを考慮しているため
c++ - 最適なコンパイラ フラグと構成を使用して cmake から Halide ジェネレータを実行する
OK、そう: 私は最初の動作中のHalide ジェネレーターを私の小さな画像処理プロジェクトのcmake ビルド システムに統合することに成功しました。
ジェネレーターは、Halide コードベースのサンプル コードに基づいて、画像のサイズ変更およびリサンプリング アルゴリズムを実装しHalide/apps/resize/resize.cpp
ます。でHalideGenerator.cmake
、Halide プロジェクトが独自のビルド スクリプトで行うように。
これまでのところ、これはすべてうまく機能していますが、コード生成のニュアンスの領域では、私のドメインの専門知識が不足しています。たとえば、スケジューリング方法を微調整して、ラップトップで観測された最高の経験的速度を得ました。コード生成プロセスの理解。
具体的には、これにアプローチする方法がわかりません。デフォルトを使用するか、ターゲット プラットフォームの特定のオプションをオンにするのが最善ですか? 後者の場合、どこかに条件付きコードを含める必要がありますか、それともバイナリにフォールバックを含めることができますか?
私が話していることは次のとおりです。Halide チュートリアル レッスン #15 のソースには、さまざまなオプションでジェネレーターを呼び出す複雑なスクリプトがあります。このスクリプトのコード コメントのスニペットを次に示します。
…このことから、何をしなければならないか、何をすべきか、または何をすべきかを裁量的に区別することは困難です。比較すると、C++ または Objective-C プロジェクト (さらに多くのビザンチンの例) をセットアップするときにこれらの問題に対処する必要はありません。これは、コンパイラとリンカーがこれらの決定のほとんどを行い、多くても 1 つまたは 2 つのフラグが必要なためです。
私の質問は、Halide ジェネレーターの出力ライブラリ バイナリを既存のプロジェクトに統合するにはどうすればよいかということです。移植性をさらに制限することなく(例: GPU、SSE2/3、AVX2 などを使用)、ジェネレーターの出力を可能な限り高速にします少し違うマシンで不思議なことにセグメンテーションフォールトですか?
具体的には、私のプロセスはどのようなものであるべきですか? たとえば、最初は最小公分母のみを対象とし、その後、よりエキゾチックなプロセッサ機能を段階的に活用する必要がありますか?
編集: 以下のコメントで述べたように、これは、stdout
オプションなしで呼び出されたときに GenGen バイナリが出力するものです。
c++ - 固定次元のハロゲン パイプラインの作成
私のファイルは事前にコンパイルされています。画像から小さな領域を計算します。これらの上で、オーバーラップで正規化したいと思います。したがって、Reduction Domains で係数を計算する Func です。その後、重複している正規化された領域を計算しようとします。したがって、結果のサイズは大きくなります。私が認識している Func が小さなリージョンである限り、b にコンパイルしようとすると、結果は c に必要な次元とは別の次元を持つ必要があるため、もはや機能しません。入力または出力バッファの次元に応じて Func の次元を設定する方法はありますか? または、他の回避策を知っていますか?
c++ - ハライド Jit コンパイル
ハライド プログラムを jit にコンパイルして、後で別の画像のコードで数回使用しようとしています。しかし、私は何か間違っていると思います、誰かが私を修正できますか? まず、実行するハライド関数を作成します。
ポインタに保存します:
それから私はそれを実行しようとします:
しかし、うまくいきません... エラー:
編集:
関数を実行するための私のコードは次のとおりです。
誰でも私を助けることができますか?
編集:
@KhouriGiordano のおかげで、自分が間違っていたことがわかりました。実際、私は AOT コンパイルからこのコードに切り替えました。だから今私のコードは次のようになります:
そして私はそれを次のように使用します:
しかし、コンソールの情報で m_gamma.realize 関数でまだクラッシュしています:
c++ - ハライドのパフォーマンスカウンター?
Halide 言語で記述されたコードに使用できるパフォーマンス カウンターはありますか? コードで実行されるロード、ストア、および ALU 操作の数を知りたいです。
マルチステージ パイプラインのスケジューリングに関する Halide チュートリアルでは、割り当てられたメモリ、ロード、ストア、および Halide Funcs への呼び出しの量を比較することで、さまざまなスケジュールを比較していますが、この情報がどのように収集されたかはわかりません。これらの操作のいずれかが発生するたびに、trace_stores、trace_loads、および trace_realizations を使用してコンソールに出力できる可能性があると思います。ただし、これは優れたオプションではありません。プログラムの実行が大幅に遅くなり、コンソール出力の長いリストをロード、ストア、および ALU 操作の目的のカウントにコンパイルするために、ある種のカウント スクリプトが必要になるためです。
halide - 関数内で複数の AOT 関数を実行する
テンプレート マッチング (描画付き) を AOT 形式で実装しようとしていますが、別のプロジェクトからコンパイルされた個別の静的ライブラリを含めることでさまざまな方法が機能するかどうかをテストしていたときに、次のようなビルド エラーが発生しました。
重大度コード 説明 Project File Line Suppression State Error LNK2005 _ZN6Halide7Runtime8Internal13custom_mallocE already defined in template_matching_ccorr.lib(template_matching_ccorr.lib.obj) Halide Template Matching v2 AOT Run c:\Users\Admin\documents\visual studio 2015\Projects\Halide Template Matchign v2 AOT Run\Halide Template Matchign v2 AOT Run\template_matching_sqdiff.lib(template_matching_sqdiff.lib.obj) 1
複数のライブラリを含めて、さまざまな機能を実行できるようにする方法はありますか?
また、AOTコンパイルコードで使用できるreactと同様の機能がありますか、それとも2つの異なるAOT機能を作成する必要がありますか(最初に複数の機能を呼び出すことができると仮定します)
EDIT:クイックフィックスは /FORCE:MULTIPLE をリンカーのコマンドラインに追加しているようです
EDIT2:追加してコンパイルすることができました
複数の定義を解決するものを除いて、ほとんどのパイプラインに。HalideRuntime.h をインクルードすることもできたのに、なぜランタイムに 1 つのパイプラインを持たなければならないのか疑問に思っていますが、実際には機能しません。
halide - スタンドアロン ランタイムをプロジェクトに含めることができません
ランタイムを含まないいくつかのコンパイル済み AOT 関数で使用できるスタンドアロン ランタイムを生成しましたが、リンカーに含めようとすると、ファイル自体がファイル タイプであるため機能しません。
を使用してランタイムをコンパイルしました
私が使用しているコンピューターには、64 ビットの Windows 7 が搭載されています。
これはバグですか、それともランタイムのコンパイルが間違っていますか?