クライアントのライブラリにトランザクションを定義するための
関数
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
が共有されている。