複数のサブグラフを連結して、より大きなテスト グラフやアプリケーション グラフを作成できます。グラフを I/O から独立したエンティティとして開発し、そのグラフを、外部と接続するために必要な PLIO や GMIO の定義を含むその他のグラフに埋め込むことができます。これにより、作成したグラフを個別にテストしたり、その他のグラフと接続してより大きなアプリケーションを構築できます。
この手法の利点はバッファーのサイズやサブグラフ内の接続の種類を把握しておく必要がないことです。つまり、グラフおよびグラフ内のカーネルを独自に開発できます。大きなテスト グラフやアプリケーション グラフをコンパイルする際、コンパイラはさまざまな I/O ポートの種類に応じて必要なハードウェア インターポーザーを自動的に適応させます。たとえば、あるグラフのストリーム PLIO 入力と別のグラフのバッファー入力を接続する connect 文がテスト グラフに指定されていれば、コンパイラはあるグラフのストリーム PLIO 出力ポートと別のグラフのバッファー入力ポートを自動的に接続します。
class TestMoreComplexGraph: public adf::graph {
public:
adf::input_plio plin;
adf::output_plio plout;
SplitGraph AddedGraph;
MergeGraph AnotherGraph;
SimplestGraph Simple;
TestMoreComplexGraph()
{
plin = adf::input_plio::create("input2",adf::plio_64_bits,"data/Input_64.txt",500);
adf::connect(plin.out[0],AddedGraph.din);
adf::connect(AddedGraph.dout[0],Simple.din);
adf::connect(Simple.dout,AnotherGraph.din[0]);
adf::connect(AddedGraph.dout[1],AnotherGraph.din[1]);
plout = adf::output_plio::create("output2",adf::plio_64_bits,"data/Output2.txt",500);
adf::connect(AnotherGraph.dout,plout.in[0]);
};
};
TestMoreComplexGraph MoreComplexUnitTest;
int main(int argc, char ** argv) {
MoreComplexUnitTest.init();
MoreComplexUnitTest.run(NFRAMES*NITERATIONS);
MoreComplexUnitTest.end();
return 0;
}
図 1. グラフ ビュー
AddedGraph
と AnotherGraph
に接続されている場合、Simple
グラフは何も変更する必要はありません。サブグラフが多くなるとエラーが発生しやすくなります。エラーを回避するために、SimplestGraph
グラフの定義はそれ自身のファイルで定義されているとおりとすることを推奨します。グラフ ファイルを修正すると、UnitTest
および MoreComplexUnitTest
のビヘイビアーが変更される可能性があります。