2016-05-26 2 views
0

ハライドパイプラインを使用して、いくつかのスケジュールを試してみたいと思います。私は最適化を使って別のファイルを作成し、実行時にこれらを与えられたFuncに適用することでこれを行いたいので、それらを自動的に試して最速のものを見つけることができます。ハライドパイプラインの機能へのアクセス

私はこれを行うために独自の関数を作成し始めましたが、compute_atなどの最適化ではかなり複雑になっています。 compute_at最初の引数としてFuncをとります。パイプラインのFuncにアクセスする方法はありますか?私はすべての関数のリストを保持し、このリストを関数に渡す必要はありませんか?私は、Halideが設計されているためにこれが可能ではないかもしれないと理解しています。

答えて

0

IRは、名前でFuncを見つけるために歩くことができ、将来の参照のために地図に隠すことができます。しかし、これは単純に低レベルの名前付けの仕組みを解決します。問題は、名前自体がインタフェースの一部となり、スケジューリングがコード構造の低レベルの詳細に固有のままであることです。

この時点では、スケジューリングルーチンが依存できる情報を含む構造体を定義し、それを記入することがより良いものになります(これには、Varの名前も必要です)。 IRを構築するとき。次に、この構造体をC++関数に渡してスケジューリングを行うことができます。スケジューリングの一般的な部分は抽象化することができます。複雑なケースでは、すべてのIRが単一のルーチンで構築され、スケジュールされていても、C++ループなどを使用してFuncのセットにスケジューリングのチャンクを適用することがよくあります。事実上、structはアルゴリズムとスケジュールの間のインタフェースをカプセル化します。

私たちは、C++コードとは別のファイルにスケジュールを書きたい場合には、これをさらに細分化する直列化と逆シリアル化を行っています。しかし、もう一度、コードが動作するためにスケジュールされているコードの詳細を知る必要があります。また、別の言語のスケジューリングや開発のためのプログラミング言語としてシリアル化フォーマットを使用することも含まれます。

現在最も有望な手段は、ヒューリスティックな自動化スケジューリングです。 SIGGRAPHで発表されたRavi Teja Mullapudiらの論文があります。

関連する問題