クライアントのライブラリにトランザクションを定義するための
関数
Ninf_check_in,
Ninf_check_out を用意した。
例として行列A,Bの積EとC,Dの積Fを
さらに掛け合わせたものをGに入れる計算を考えてみる。
これは以下のように書ける。
Ninf_check_in();
Ninf_call("mmul",N,A,B,E);
Ninf_call("mmul",N,C,D,F);
Ninf_call("mmul",N,E,F,G);
Ninf_check_out();
Ninf_check_in 後の
Ninf_call ではその場で実行を行なわずに、
データフローだけの作成を行なう。最後のNinf_check_outの時点で、
実際の計算を行なう。
各Ninf_call 間の依存関係は、共有する構造データと入出力モードに
よって判断する。構造データを共有するかどうかの判断は、
構造データのアドレスの比較によって行なう。
上の例では、E、Fが共有されている。