• 大域変数とは?

  •  VIOSにおいて大域変数とは、すべてのワーキングセット(並列実行単位)からアクセス可能な
    変数を指し、プログラム中において、parallel文、局所化された逐次処理部文の外で宣言された
    変数、及びモジュール呼び出し時に渡されるパラメータが該当します。
    大域変数へのアクセスは、デフォルトでは各ワーキングセットからの同時アクセスに対応するため、
    排他制御されます。
     

  • プログラマブル大域変数バッファ

  •    並列処理において、ネットワークを介したデータへのアクセスや排他制御により生じる
    オーバーヘッドは非常に大きいため、VIOSではプログラマブル大域変数バッファと呼ぶ概念を
    導入しています。
      プログラマブル大域変数バッファとは、並列処理の際にホストごとに起動されている各IPUが
    各ホスト上に大域変数のコピーバッファを持ち、 そのバッファにアクセスをすることによって
    ネットワークを介したアクセスや 排他制御を避けます。
     そのため、このバッファに書き込みを行う処理の場合、各IPUごとにバッ ファの内容が異なっ
    たものとなります。の大域変数バッファを統合するために、VIOSでは3種類の統合法を持って
    います。その内容とプログラム中の記述方を以下に示します。

    プログラム中での記述方法

    #vios mutex  変数名  排他制御の有無  統合方法
  • 変数名 : 制御を適用する大域変数の名前

  •  
  • 排他制御の有無 : 排他制御を行うかどうかの指定

  • この指定にはon,offの2種類から一方を選択します。onの 場合はネットワークを介した大域変数への排他制御アクセスを行います。 offの場合はプログラマブル大域変数バッファを用います。 offの場合のみ、次の統合方法を指定します。
     
  • 統合方法 : バッファの統合方法の指定です。次の3つから選びま す。
  • 例えば、整数型大域変数GlobalValueにバッファ使用、加算統合を 適用する場合は以下のように記述します。
          // 大域変数の宣言
          int GlobalValue;
          // 制御方法の指定
          #vios mutex GlobalValue off add
    大域変数を利用したプログラム例1: ヒストグラムの作成

  • 制御を配列変数に対して行った場合

  •  通常、配列変数に対し、結合制御を行った場合、配列要素個々に対し制御 が働きます。つまり、
    要素0はipu0から、要素1はipu1から... というように独立した変数のように働きます。
    しかし、テンプレートマッチングの様にある値が最小、または最大の場合 に、その値に伴う別の値
    が必要である、ということが起こります。 そのために、変数が配列変数であり、制御がminmax
    の場合には追加命令が存在します。これは、

    #vios mutex  配列変数  off min  depend_on_first
    という書式で使用します。ここでdepend_on_firstは予約語です。 minの他にmaxでも使用
    できます。この追加命令により配列変数の最初(要素0)での結合により要素1以降の変数の値が
    決められます。つまり、例えば要素0がipu3の値になったのならば、要素1以降の値も全てipu3
    の値になります。

    大域変数を利用したプログラム例2: テンプレートマッチング
     


    目次へ戻る
    VIOSトップページへ戻る