プログラマブル大域変数バッファ
VIOSにおいて大域変数とは、すべてのワーキングセットからアクセス可能な変数を
指し、プログラム中において、parallel文、局所化された逐次処理部分の
外で宣言された変数、ならびにモジュール呼び出しに用いられるパラメータが
該当します。大域変数へのアクセスは、デフォルトでは各ワーキングセットからの
同時アクセスに対応するため、排他制御されます。ただし、並列処理において
ネットワークを介したデータへのアクセスや排他制御により生じるオーバーヘッドは
非常に大きいため、VIOSではプログラマブル大域変数バッファと呼ぶ概念
を導入しています。
プログラマブル大域変数バッファとは、並列処理の際にホストごとに起動されている
各IPUがそのホスト上に大域変数のコピーバッファを持ち、そのバッファにアクセスを
することによってネットワークを介したアクセスや排他制御を避けます。
そのため、このバッファに書き込みを行う処理の場合、各IPUごとにバッファの内容
が異なったものとなります。このような内容の異なるバッファを1つの大域変数として
統合するために、VIOSでは3種類の統合法を持ちます。その内容とプログラム中の
記述方を以下に示します。
・プログラム中での記述方法
#vios mutex 変数名 排他制御の有無 統合方法
- 変数名 : 制御を適用する大域変数の名前
- 排他制御の有無 : 排他制御を行うかどうかの指定
この指定にはon,offの2種類から一方を選択します。onの場合はネットワークを
介した大域変数への排他制御アクセスを行います。offの場合はプログラマブル大域変数
バッファを用います。offの場合のみ、次の統合方法を指定します。
- 統合方法 : バッファの統合方法の指定です。次の3つから選びます。
- add : バッファを加算統合します。
- max : バッファ中の最大値を使用します。
- min : バッファ中の最小値を使用します。
例えば、整数型大域変数GlobalValueにバッファ使用、加算統合を適用する場合は以下の
ように記述します。
int GlobalValue; // 大域変数の宣言
#vios mutex GlobalValue off add // 制御方法の指定
大域変数を利用したプログラム例 : ヒストグラムの作成
VIOSトップページへ戻る
VIOS FAQ
VIOSでのプログラミング