JPH06149751A - 共有データ更新装置 - Google Patents
共有データ更新装置Info
- Publication number
- JPH06149751A JPH06149751A JP4300084A JP30008492A JPH06149751A JP H06149751 A JPH06149751 A JP H06149751A JP 4300084 A JP4300084 A JP 4300084A JP 30008492 A JP30008492 A JP 30008492A JP H06149751 A JPH06149751 A JP H06149751A
- Authority
- JP
- Japan
- Prior art keywords
- shared variable
- processing
- shared
- variable
- rewriting
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Landscapes
- Multi Processors (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
(57)【要約】
【目的】 マルチプロセッサ処理装置において、プロセ
ッサ間の遠隔メモリ操作を「参照」か「書き換え」の
内、発生時間間隔がより疎である処理に合わせた度数で
通信処理することによって、不要な通信を抑制し、処理
速度の改善を図る。 【構成】 プロセッサエレメント2a、2b、2cらが
共有変数を遠隔メモリ操作によって実現した並列処理系
を構成する。このとき、共有変数10は個々のプロセッ
サエレメント2の局所メモリ5にそれぞれ配置され、参
照はこの局所メモリに対して行なわれる。他方、共有変
数10の書き換えは通信によって行なうが、その際、書
き換えのための通信の発生時間間隔が規定値より密であ
るとΔT測定回路8が遅延応答フラグを設定し、遅延モ
ードに入る。このとき、通信は共有変数参照の発生まで
遅延され、実行される構成である。
ッサ間の遠隔メモリ操作を「参照」か「書き換え」の
内、発生時間間隔がより疎である処理に合わせた度数で
通信処理することによって、不要な通信を抑制し、処理
速度の改善を図る。 【構成】 プロセッサエレメント2a、2b、2cらが
共有変数を遠隔メモリ操作によって実現した並列処理系
を構成する。このとき、共有変数10は個々のプロセッ
サエレメント2の局所メモリ5にそれぞれ配置され、参
照はこの局所メモリに対して行なわれる。他方、共有変
数10の書き換えは通信によって行なうが、その際、書
き換えのための通信の発生時間間隔が規定値より密であ
るとΔT測定回路8が遅延応答フラグを設定し、遅延モ
ードに入る。このとき、通信は共有変数参照の発生まで
遅延され、実行される構成である。
Description
【0001】
【産業上の利用分野】本発明はマルチプロセッサ処理装
置によるプログラムの並列実行の技術において、並列実
行される複数の処理単位がメモリ資源を共有する遠隔メ
モリ操作方法技術に関する。特に、共有メモリを持たな
いマルチプロセッサ処理装置で共有変数を用いた並列処
理プログラムを実行する際に、遠隔メモリ操作の発生回
数を減少させることによって処理速度の改善を図る技術
に関連する。
置によるプログラムの並列実行の技術において、並列実
行される複数の処理単位がメモリ資源を共有する遠隔メ
モリ操作方法技術に関する。特に、共有メモリを持たな
いマルチプロセッサ処理装置で共有変数を用いた並列処
理プログラムを実行する際に、遠隔メモリ操作の発生回
数を減少させることによって処理速度の改善を図る技術
に関連する。
【0002】
【従来の技術】応用プログラムによる処理において、あ
る種の問題は複数の処理単位によって並列処理されるこ
とで格段の処理速度の向上が得られることが知られてい
る。このような並列処理システムは数値計算や画像処理
などの分野において多く実用化されている。
る種の問題は複数の処理単位によって並列処理されるこ
とで格段の処理速度の向上が得られることが知られてい
る。このような並列処理システムは数値計算や画像処理
などの分野において多く実用化されている。
【0003】並列処理システムを構築する際、個々の処
理を分担する複数のプロセッサユニットがハードウェア
上で特定のメモリを共有する場合と、全く共有メモリを
持たない場合とがある。後者は、ローカルエリアネット
ワークに接続された複数台のパーソナルコンピュータ、
ワークステーションを利用して、目的プログラムの並列
処理を行なう場合などが相当する。
理を分担する複数のプロセッサユニットがハードウェア
上で特定のメモリを共有する場合と、全く共有メモリを
持たない場合とがある。後者は、ローカルエリアネット
ワークに接続された複数台のパーソナルコンピュータ、
ワークステーションを利用して、目的プログラムの並列
処理を行なう場合などが相当する。
【0004】しかし、この様な共有メモリを持たないハ
ードウェアによるシステムであっても、高級言語による
プログラムモデルの段階では共有変数という形式で並列
実行される処理単位間の共通資源を仮定した方がアルゴ
リズムの実現上、有利な場合が多い。
ードウェアによるシステムであっても、高級言語による
プログラムモデルの段階では共有変数という形式で並列
実行される処理単位間の共通資源を仮定した方がアルゴ
リズムの実現上、有利な場合が多い。
【0005】ところで、共有メモリを持たない並列処理
システムにおいて、共有変数を仮想し、参照および変更
を行なう手段は「通信」である。実現構造である「通
信」を上位構造であるプログラム言語(高級言語)の階
層に実装するために、プログラム言語の中にはSEND、RE
CEIVE等の通信を明示的に表す命令語を入れ仕様にした
ものや、通常の変数代入と等価な代入式の記述を認めた
仕様にしたものなどがある。
システムにおいて、共有変数を仮想し、参照および変更
を行なう手段は「通信」である。実現構造である「通
信」を上位構造であるプログラム言語(高級言語)の階
層に実装するために、プログラム言語の中にはSEND、RE
CEIVE等の通信を明示的に表す命令語を入れ仕様にした
ものや、通常の変数代入と等価な代入式の記述を認めた
仕様にしたものなどがある。
【0006】しかし、とにかく実質的には前記2つのど
ちらの言語処理系もプロセッサ間の通信、あるいはプロ
グラム処理単位間の通信によって共有メモリに代替する
機構(いわゆる遠隔メモリ操作)を実現している。
ちらの言語処理系もプロセッサ間の通信、あるいはプロ
グラム処理単位間の通信によって共有メモリに代替する
機構(いわゆる遠隔メモリ操作)を実現している。
【0007】この方式に関連した従来例は特開平1−1
94033号に開示されている。この発明はFORTRAN言
語にSEND(データ転送)、およびRECEIVE(データ受
信)のサブルーチンを実装した処理系を例に挙げ、並列
実行されるプログラム単位間の通信データ列に一意の識
別子を与える方法を論じている。
94033号に開示されている。この発明はFORTRAN言
語にSEND(データ転送)、およびRECEIVE(データ受
信)のサブルーチンを実装した処理系を例に挙げ、並列
実行されるプログラム単位間の通信データ列に一意の識
別子を与える方法を論じている。
【0008】上記の従来発明に代表されるこの分野の技
術は、共有変数(あるいはこの代替機構としての「通
信」)の実現にあたり、処理流れ上で共通資源に対する
アクセスが同時に起こった場合の衝突によるデータ破
壊、あるいはデットロックの発生等の障害を防ぐ機構を
実現することを主目的として開発されている。
術は、共有変数(あるいはこの代替機構としての「通
信」)の実現にあたり、処理流れ上で共通資源に対する
アクセスが同時に起こった場合の衝突によるデータ破
壊、あるいはデットロックの発生等の障害を防ぐ機構を
実現することを主目的として開発されている。
【0009】また、通信自体の発生度数の圧縮について
は全く言及していない。
は全く言及していない。
【0010】
【発明が解決しようとする課題】しかし、上述の従来例
では複数コンピュータがネットワークで結合された処理
系で共有変数に対するアクセス頻度の高いアルゴリズム
を実現した場合、通信自体の処理時間の増大によって実
質的に並列処理により期待された処理速度の向上が得ら
れない。
では複数コンピュータがネットワークで結合された処理
系で共有変数に対するアクセス頻度の高いアルゴリズム
を実現した場合、通信自体の処理時間の増大によって実
質的に並列処理により期待された処理速度の向上が得ら
れない。
【0011】そこで、この問題の解決方法として特願平
4−158141号に論じた方法が有る。すなわち、共
有変数を参照する際は自プロセッサの局所メモリ上に配
置した共有変数値のコピーを参照し、共有変数値を書き
換える際は通信により「共有変数が宣言された処理単
位」を実行するプロセッサの局所メモリにある共有変数
の実体とそれ以外のプロセッサに有る該共有変数のコピ
ーを共に変更する、という方法である。この方法によれ
ば、少なくとも参照の場合「通信データ列」が実際にネ
ットワーク上を転送される事がなくなり、通信発生頻度
の増大による処理速度の低下を防ぐ効果が生まれる。
4−158141号に論じた方法が有る。すなわち、共
有変数を参照する際は自プロセッサの局所メモリ上に配
置した共有変数値のコピーを参照し、共有変数値を書き
換える際は通信により「共有変数が宣言された処理単
位」を実行するプロセッサの局所メモリにある共有変数
の実体とそれ以外のプロセッサに有る該共有変数のコピ
ーを共に変更する、という方法である。この方法によれ
ば、少なくとも参照の場合「通信データ列」が実際にネ
ットワーク上を転送される事がなくなり、通信発生頻度
の増大による処理速度の低下を防ぐ効果が生まれる。
【0012】しかし、上記の発明は「変数を参照する頻
度は、変数を書き換える頻度に比較して高い」という仮
定に基づいて考案されており、この仮定に当てはまらな
い場合は特定の処理単位がプロセッサ資源を充分に利用
できないという不都合が生じる。
度は、変数を書き換える頻度に比較して高い」という仮
定に基づいて考案されており、この仮定に当てはまらな
い場合は特定の処理単位がプロセッサ資源を充分に利用
できないという不都合が生じる。
【0013】図3はこのような不都合が起きた場合の処
理時間の推移を示した説明図である。ここでは、共有変
数に対する値の書き換えと、値の参照をそれぞれ生産
者、消費者になぞらえている。消費者プロセスの処理の
流れは矢印301に示され、生産者プロセスの処理の流
れは矢印303によって示される。この2つのプロセス
は独立した2台のコンピュータ上でそれぞれ実行されで
あり、共有変数値の書き換えは「通信」によっている。
また、プログラム処理中に共有変数のコピーを参照する
時間は直線302で示され、共有変数値を書き換える処
理の開始は直線304によって示される。
理時間の推移を示した説明図である。ここでは、共有変
数に対する値の書き換えと、値の参照をそれぞれ生産
者、消費者になぞらえている。消費者プロセスの処理の
流れは矢印301に示され、生産者プロセスの処理の流
れは矢印303によって示される。この2つのプロセス
は独立した2台のコンピュータ上でそれぞれ実行されで
あり、共有変数値の書き換えは「通信」によっている。
また、プログラム処理中に共有変数のコピーを参照する
時間は直線302で示され、共有変数値を書き換える処
理の開始は直線304によって示される。
【0014】このコンピュータがネットワークからパケ
ットを取得し、共有変数のコピーされたメモリ領域の値
を変更する処理時間を305に示す。図3(a)の様に
書き換え処理304の時間間隔が充分疎である場合は問
題は生じないが、図3(b)の様に書き換え処理304
の時間間隔が密になった場合は消費者プロセス側ではプ
ログラムステップを消化するためのプロセッサタイムが
著しく減少する問題が生じる。これは生産者プロセスを
実行するコンピュータが、消費者プロセスを実行するコ
ンピュータに比較して高速である時に発生する可能性の
高い問題である。このようなコンピュータが並列処理シ
ステムの中に1台でも含まれることは、そのシステムに
とって大きな問題である。すなわち、複数のコンピュー
タをネットワーク上に接続して並列処理システムを運用
する場合、個々のコンピュータの処理速度が一様である
保証は無いから、特定のコンピュータに分散された処理
単位だけが著しく処理速度が遅れ、全体の処理に対する
ボトルネックを生じ、結果的に処理速度の遅滞を招くお
それが生じる。
ットを取得し、共有変数のコピーされたメモリ領域の値
を変更する処理時間を305に示す。図3(a)の様に
書き換え処理304の時間間隔が充分疎である場合は問
題は生じないが、図3(b)の様に書き換え処理304
の時間間隔が密になった場合は消費者プロセス側ではプ
ログラムステップを消化するためのプロセッサタイムが
著しく減少する問題が生じる。これは生産者プロセスを
実行するコンピュータが、消費者プロセスを実行するコ
ンピュータに比較して高速である時に発生する可能性の
高い問題である。このようなコンピュータが並列処理シ
ステムの中に1台でも含まれることは、そのシステムに
とって大きな問題である。すなわち、複数のコンピュー
タをネットワーク上に接続して並列処理システムを運用
する場合、個々のコンピュータの処理速度が一様である
保証は無いから、特定のコンピュータに分散された処理
単位だけが著しく処理速度が遅れ、全体の処理に対する
ボトルネックを生じ、結果的に処理速度の遅滞を招くお
それが生じる。
【0015】本発明はこの様な問題を解決するために鑑
みられたものでその目的とするところは、共有メモリを
持たない複数のコンピュータにより構成されるマルチプ
ロセッサ並列処理システムにおいて、プロセッサ間の通
信によって共有変数の使用を可能とする場合に発生する
処理のボトルネックを回避し、高速な並列処理系を実現
することにある。
みられたものでその目的とするところは、共有メモリを
持たない複数のコンピュータにより構成されるマルチプ
ロセッサ並列処理システムにおいて、プロセッサ間の通
信によって共有変数の使用を可能とする場合に発生する
処理のボトルネックを回避し、高速な並列処理系を実現
することにある。
【0016】
【課題を解決するための手段】この様な課題を解決する
ために本発明の共有データ更新装置は、複数のプロセッ
サユニットが、それぞれ相互にデータの授受を行なう通
信経路によって結合されたマルチプロセッサ処理装置に
より、複数のプログラム実行単位が並列して実行される
時、複数のプログラム単位間の共有メモリ資源(共有変
数)に対し前記通信経路上の通信を用いた、いわゆる遠
隔メモリ操作によって参照あるいは書き換えを行なう構
成のシステムにおいて、(a) ある処理単位を実行時にプ
ロセッサに配置する際、共有変数をこの処理単位が実行
されるプロセッサの局所メモリ領域に複写する手段と、
(b) 共有変数参照の時間間隔と書換えの時間間隔を計測
する手段と、(c) 共有変数書き換えの遠隔メモリ操作に
際し、共有変数が宣言された処理単位が実行されるプロ
セッサの局所メモリに配置された共有変数(以下、共有
変数の実体と呼ぶ)の値を更新すると共に、各プロセッ
サの局所メモリに配置された共有変数(以下、共有変数
の複写と呼ぶ)の値を更新する手段とを有し、(d) 該共
有変数に対し、書き換え時間間隔が参照時間間隔に対し
密となった場合は、共有変数の複写を保持するプロセッ
サの局所メモリ内容の変更処理を、該プロセッサ上で実
行されるプログラム処理単位が実際に該共有変数を参照
する時点まで遅延して処理し、参照時間間隔が書き換え
時間間隔に対し密となった場合は、共有変数の複写を保
持するプロセッサの局所メモリ内容の変更処理を、いず
れかのプロセッサ上で実行されるプログラム処理単位が
実際に該共有変数の値を書き換える時点まで遅延して処
理することを特徴とする。
ために本発明の共有データ更新装置は、複数のプロセッ
サユニットが、それぞれ相互にデータの授受を行なう通
信経路によって結合されたマルチプロセッサ処理装置に
より、複数のプログラム実行単位が並列して実行される
時、複数のプログラム単位間の共有メモリ資源(共有変
数)に対し前記通信経路上の通信を用いた、いわゆる遠
隔メモリ操作によって参照あるいは書き換えを行なう構
成のシステムにおいて、(a) ある処理単位を実行時にプ
ロセッサに配置する際、共有変数をこの処理単位が実行
されるプロセッサの局所メモリ領域に複写する手段と、
(b) 共有変数参照の時間間隔と書換えの時間間隔を計測
する手段と、(c) 共有変数書き換えの遠隔メモリ操作に
際し、共有変数が宣言された処理単位が実行されるプロ
セッサの局所メモリに配置された共有変数(以下、共有
変数の実体と呼ぶ)の値を更新すると共に、各プロセッ
サの局所メモリに配置された共有変数(以下、共有変数
の複写と呼ぶ)の値を更新する手段とを有し、(d) 該共
有変数に対し、書き換え時間間隔が参照時間間隔に対し
密となった場合は、共有変数の複写を保持するプロセッ
サの局所メモリ内容の変更処理を、該プロセッサ上で実
行されるプログラム処理単位が実際に該共有変数を参照
する時点まで遅延して処理し、参照時間間隔が書き換え
時間間隔に対し密となった場合は、共有変数の複写を保
持するプロセッサの局所メモリ内容の変更処理を、いず
れかのプロセッサ上で実行されるプログラム処理単位が
実際に該共有変数の値を書き換える時点まで遅延して処
理することを特徴とする。
【0017】
【実施例】本発明に好適な一実施例について、その説明
を次の項目に従って行う。本発明の実現にあたり、最も
基本となる構成は”4−2.遅延モードでの動作”に述
べる。
を次の項目に従って行う。本発明の実現にあたり、最も
基本となる構成は”4−2.遅延モードでの動作”に述
べる。
【0018】1.第1の実施例の構成の概要 2.第1の実施例のデバイスレベルの動作 3.第1の実施例の処理言語レベルの動作 3−1.コンパイラの処理 3−1.1.並列実行のためのコード生成 3−1.2.代入時遠隔メモリ操作のコード生成 3−1.3.参照時遠隔メモリ操作のコード生成 3−2.実行時配置の処理 3−3.遠隔メモリ操作ライブラリの処理 4.共有データ参照/書き換えの処理手順 4−1.遅延モード以外での動作 4−2.遅延モードでの動作 5.第1の実施例についての補足説明 6.第2の実施例の説明 7.第3の実施例の説明 1.第1の実施例の構成の概要 本発明の説明のため好適な実施例の一つについて、その
構成の概略を図1に示す。図1は図2に示すような、木
構造に接続されたマルチプロセッサ処理装置の一部を示
したものである。この構成において、個々のプロセッサ
エレメント2にはそれぞれ独立したマイクロプロセッサ
ユニット(以下MPUと書く)4が実装され、各プロセ
ッサエレメント2は、双方向の通信経路3によって図2
の状態に接続される。通信経路3のデータ転送手段とし
ては1Mビット/秒の同期式シリアル通信方式を用い
た。
構成の概略を図1に示す。図1は図2に示すような、木
構造に接続されたマルチプロセッサ処理装置の一部を示
したものである。この構成において、個々のプロセッサ
エレメント2にはそれぞれ独立したマイクロプロセッサ
ユニット(以下MPUと書く)4が実装され、各プロセ
ッサエレメント2は、双方向の通信経路3によって図2
の状態に接続される。通信経路3のデータ転送手段とし
ては1Mビット/秒の同期式シリアル通信方式を用い
た。
【0019】ホストプロセッサ1は、プロセッサエレメ
ント2によるマルチプロセッサ処理系を制御する目的で
使用される制御装置である。ホストプロセッサ1は、オ
ペレーティングシステムを実装し、補助記憶装置管理を
行なうファイルシステムを持つ。ホストプロセッサ1に
おいて、ユーザプログラム、コンパイラ12等は、オペ
レーティングシステムのアプリケーションプログラム
(応用プログラム)として使用される。
ント2によるマルチプロセッサ処理系を制御する目的で
使用される制御装置である。ホストプロセッサ1は、オ
ペレーティングシステムを実装し、補助記憶装置管理を
行なうファイルシステムを持つ。ホストプロセッサ1に
おいて、ユーザプログラム、コンパイラ12等は、オペ
レーティングシステムのアプリケーションプログラム
(応用プログラム)として使用される。
【0020】マルチプロセッサシステムを利用する使用
者は、ユーザプログラムソースコード11を、コンパイ
ラ12によってコンパイルし、実行可能なオブジェクト
コード13を得る。さらに、使用者はこれを、オペレー
ティングシステムの管理下で実行する。
者は、ユーザプログラムソースコード11を、コンパイ
ラ12によってコンパイルし、実行可能なオブジェクト
コード13を得る。さらに、使用者はこれを、オペレー
ティングシステムの管理下で実行する。
【0021】以下の説明では、図2の構成上、上位の階
層に接続されたプロセッサエレメントを、親プロセッサ
エレメントと呼び、この逆の関係を子プロセッサエレメ
ントと呼ぶ。図2中の、プロセッサエレメント2xは、
2y、2zに対し唯一の親プロセッサエレメントであ
り、2xから見ると子プロセッサエレメントは2y、2
zの二つである。
層に接続されたプロセッサエレメントを、親プロセッサ
エレメントと呼び、この逆の関係を子プロセッサエレメ
ントと呼ぶ。図2中の、プロセッサエレメント2xは、
2y、2zに対し唯一の親プロセッサエレメントであ
り、2xから見ると子プロセッサエレメントは2y、2
zの二つである。
【0022】図2の構成のマルチプロセッサ処理装置
は、画素発生処理、探査処理などのアルゴリズムの実現
に適するが、本発明を他の結合状態のマルチプロセッサ
装置に用いることも可能である。
は、画素発生処理、探査処理などのアルゴリズムの実現
に適するが、本発明を他の結合状態のマルチプロセッサ
装置に用いることも可能である。
【0023】2.第1の実施例のデバイスレベルの動作 図1に戻り説明を続ける。個々のMPU4はそれぞれ局
所メモリ5を管理する。局所メモリ5はROMおよびR
AMにより構成される。ROM領域には予め、起動時処
理、割り込み処理、通信処理および管理プログラムから
なるシステムプログラムが記録されている。各MPU4
は、ROM領域の管理プログラムの内容を実行し、必要
に応じてRAM領域に転送されたユーザプログラムの実
行状態に入る。通信装置6は同期式シリアル通信のイン
ターフェース回路によって構成され、データ受信時に
は、割り込み信号を割り込み処理回路7に送る。割り込
み処理回路7は、割り込み発生時例外処理の処理プログ
ラムの開始番地(これを割り込みベクタと呼ぶ)をプロ
セッサ・ローカルバスに発生し、かつMPU4に割り込
み信号を入力する一方で、割り込み時間間隔測定回路
(以下ΔT測定回路と書く)8に割り込み発生信号を入
力する。
所メモリ5を管理する。局所メモリ5はROMおよびR
AMにより構成される。ROM領域には予め、起動時処
理、割り込み処理、通信処理および管理プログラムから
なるシステムプログラムが記録されている。各MPU4
は、ROM領域の管理プログラムの内容を実行し、必要
に応じてRAM領域に転送されたユーザプログラムの実
行状態に入る。通信装置6は同期式シリアル通信のイン
ターフェース回路によって構成され、データ受信時に
は、割り込み信号を割り込み処理回路7に送る。割り込
み処理回路7は、割り込み発生時例外処理の処理プログ
ラムの開始番地(これを割り込みベクタと呼ぶ)をプロ
セッサ・ローカルバスに発生し、かつMPU4に割り込
み信号を入力する一方で、割り込み時間間隔測定回路
(以下ΔT測定回路と書く)8に割り込み発生信号を入
力する。
【0024】ΔT測定回路8は、前回の割り込み発生時
間と今回の割り込み発生時間の時間差を、予め定めた時
間幅の値と比較し、前者が短いと判断した場合、内部レ
ジスタに論理値「真」を記録する。それ以外の場合、内
部レジスタには論理値「偽」が記録される。MPU4
は、割り込み発生の例外処理時に、ΔT測定回路8の内
部レジスタの値を読み取り、この結果に従って局所メモ
リに在る遅延応答フラグ9の値を変更する。
間と今回の割り込み発生時間の時間差を、予め定めた時
間幅の値と比較し、前者が短いと判断した場合、内部レ
ジスタに論理値「真」を記録する。それ以外の場合、内
部レジスタには論理値「偽」が記録される。MPU4
は、割り込み発生の例外処理時に、ΔT測定回路8の内
部レジスタの値を読み取り、この結果に従って局所メモ
リに在る遅延応答フラグ9の値を変更する。
【0025】3.第1の実施例の処理言語レベルの動作 この実施例では、説明を簡単にするため、並列処理記述
言語として次の様に仕様を限定した処理言語を用いる。
言語として次の様に仕様を限定した処理言語を用いる。
【0026】(1)プログラム言語Pascalの仕様を用い、c
obegin、coendの2語を予約語として拡張する。この2
語に囲まれた複文(compound statement)中に現れる処
理ブロックは、可能であれば複数のプロセッサエレメン
ト2に配置され並列実行される。また、説明のためproc
edureあるいはfunctionを処理ブロックと総称する。
obegin、coendの2語を予約語として拡張する。この2
語に囲まれた複文(compound statement)中に現れる処
理ブロックは、可能であれば複数のプロセッサエレメン
ト2に配置され並列実行される。また、説明のためproc
edureあるいはfunctionを処理ブロックと総称する。
【0027】(2)共有変数は、親プロセッサエレメント
で実行される処理ブロックの局所変数である。子プロセ
ッサエレメントには、この処理ブロック内で宣言された
procedure、functionが必要に応じて配置される。この
とき、子プロセッサエレメントで実行される処理ブロッ
クから観測すると、共有変数は非局所変数である。
で実行される処理ブロックの局所変数である。子プロセ
ッサエレメントには、この処理ブロック内で宣言された
procedure、functionが必要に応じて配置される。この
とき、子プロセッサエレメントで実行される処理ブロッ
クから観測すると、共有変数は非局所変数である。
【0028】(3)並列実行される処理ブロック内の記述
が、手続き/関数の呼び出しを生じる記述である場合、
呼び出される手続き/関数は、親プロセッサエレメント
で実行される処理ブロック内で宣言された手続き/関数
だけが許される。
が、手続き/関数の呼び出しを生じる記述である場合、
呼び出される手続き/関数は、親プロセッサエレメント
で実行される処理ブロック内で宣言された手続き/関数
だけが許される。
【0029】以上の仕様において(2)に関し、図7を用
いて補足説明を行なう。処理ブロックS701が、図2
のプロセッサエレメント2xで実行されているとした場
合、処理ブロックの局所変数として宣言されたxは、処
理ブロックS701、S703、S705において共有
変数である。但し処理ブロックS703、S705等か
ら見た時、変数xは非局所変数である。図7のプログラ
ムの例では、cobegin、coendからなる複文の中で呼び出
された処理ブロックが並列に実行される。例えばこれら
はプロセッサエレメント2xにおいて処理ブロックprod
ucerを実行し、プロセッサエレメント2yにおいて処理
ブロックconsumerを実行するといった配置が行なわれる
が、この手段については”3−2.”節に述べる。
いて補足説明を行なう。処理ブロックS701が、図2
のプロセッサエレメント2xで実行されているとした場
合、処理ブロックの局所変数として宣言されたxは、処
理ブロックS701、S703、S705において共有
変数である。但し処理ブロックS703、S705等か
ら見た時、変数xは非局所変数である。図7のプログラ
ムの例では、cobegin、coendからなる複文の中で呼び出
された処理ブロックが並列に実行される。例えばこれら
はプロセッサエレメント2xにおいて処理ブロックprod
ucerを実行し、プロセッサエレメント2yにおいて処理
ブロックconsumerを実行するといった配置が行なわれる
が、この手段については”3−2.”節に述べる。
【0030】また(3)についても例示する。本実施例の
言語仕様の限定から、処理ブロックS703の中で、手
続き呼び出しS704が行なわれる場合、呼び出される
手続きは、処理ブロックS701で宣言されていなけれ
ばならない。
言語仕様の限定から、処理ブロックS703の中で、手
続き呼び出しS704が行なわれる場合、呼び出される
手続きは、処理ブロックS701で宣言されていなけれ
ばならない。
【0031】3−1.コンパイラの処理 次に本実施例でのコンパイラ12の動作を説明する。ホ
ストプロセッサ1の使用者は、アプリケーションプログ
ラムとしてホストプロセッサ1に実装されたコンパイラ
12を用いて、実行対象であるユーザプログラムのソー
スコード11をコンパイルする。コンパイルは、字句解
析、構文解析、コード生成、ライブラリ結合、オブジェ
クトコード記述生成の一連の処理によって行なわれる。
言語Pascalの仕様は、if.. then.. elseに対し直前結合
とすると、LL(1)文法となるため、構文解析処理
は、周知の再帰下降構文解析を用いた。この処理は従来
技術であり、例えば、中田育男:コンパイラ、産業図書
(1981)等多数の公知資料が有る。
ストプロセッサ1の使用者は、アプリケーションプログ
ラムとしてホストプロセッサ1に実装されたコンパイラ
12を用いて、実行対象であるユーザプログラムのソー
スコード11をコンパイルする。コンパイルは、字句解
析、構文解析、コード生成、ライブラリ結合、オブジェ
クトコード記述生成の一連の処理によって行なわれる。
言語Pascalの仕様は、if.. then.. elseに対し直前結合
とすると、LL(1)文法となるため、構文解析処理
は、周知の再帰下降構文解析を用いた。この処理は従来
技術であり、例えば、中田育男:コンパイラ、産業図書
(1981)等多数の公知資料が有る。
【0032】本実施例のコンパイル処理の中で従来のそ
れと異なるところは次の3点である。
れと異なるところは次の3点である。
【0033】(1)並列実行複文のコード解析により、並
列化のためのライブラリ手続き呼び出しを伴うコード生
成を行なう点。
列化のためのライブラリ手続き呼び出しを伴うコード生
成を行なう点。
【0034】(2)共有変数書き換えに際して、局所メモ
リに配置された共有変数の実体(または複写)を書き換
えると共に、遠隔メモリ操作を発生し、自分に対し接続
されたプロセッサエレメント2上の、共有変数の複写
(または実体)を書き換えるライブラリ手続きを呼び出
すコード生成を行なう点。
リに配置された共有変数の実体(または複写)を書き換
えると共に、遠隔メモリ操作を発生し、自分に対し接続
されたプロセッサエレメント2上の、共有変数の複写
(または実体)を書き換えるライブラリ手続きを呼び出
すコード生成を行なう点。
【0035】(3)共有変数参照に関して、局所メモリに
複写された共有変数の値を参照するコード生成を行なう
点。
複写された共有変数の値を参照するコード生成を行なう
点。
【0036】以上の3点に着目し、図8〜13を用いて
本実施例のコンパイラ12の動作を説明する。言語Pasc
alがブロック構造を許すことから、コンパイラ12の動
作は、主プログラム自体を一つの処理ブロックとみな
し、処理ブロックに対するコード生成処理の再帰呼び出
しで実行される。図8の流れ図において、宣言解析処理
部S81と、ステートメント処理部S82は従来の処理
と等価である。宣言解析処理部S81において、局所手
続き、局所関数についての宣言が検出された場合、コン
パイラ12は再帰呼び出しによって、処理ブロックの構
文解析S80を繰り返す。
本実施例のコンパイラ12の動作を説明する。言語Pasc
alがブロック構造を許すことから、コンパイラ12の動
作は、主プログラム自体を一つの処理ブロックとみな
し、処理ブロックに対するコード生成処理の再帰呼び出
しで実行される。図8の流れ図において、宣言解析処理
部S81と、ステートメント処理部S82は従来の処理
と等価である。宣言解析処理部S81において、局所手
続き、局所関数についての宣言が検出された場合、コン
パイラ12は再帰呼び出しによって、処理ブロックの構
文解析S80を繰り返す。
【0037】処理ブロック構文解析S80を呼び出すに
あたり、コンパイラ12は、処理ブロックにユニークな
値として「ブロック番号」を与える。各処理ブロック
は、ブロック番号を指標とする配列型のデータ構造であ
るブロック管理表14に登録される。
あたり、コンパイラ12は、処理ブロックにユニークな
値として「ブロック番号」を与える。各処理ブロック
は、ブロック番号を指標とする配列型のデータ構造であ
るブロック管理表14に登録される。
【0038】宣言解析処理部S81の終了は、予約語
「begin」を検出することによって行なわれる。この予
約語を検出した後、コンパイラは、このブロックの本文
について処理記述からのコード生成に入る。
「begin」を検出することによって行なわれる。この予
約語を検出した後、コンパイラは、このブロックの本文
について処理記述からのコード生成に入る。
【0039】3−1.1.並列実行のためのコード生成 (1)の特徴を実現するために、本実施例のコンパイラは
予約語「cobegin」を検出すると、並列実行フラグをセ
ットした後(S85)、通常のbegin文処理と同様に複
文のコード生成S86を処理する。これに対し、予約語
「coend」が検出された場合は、並列実行フラグをクリ
アする(S84)。ここでセット/クリアされた並列実
行フラグは、手続き/関数の呼び出しの際に参照され
る。この処理を図13の流れ図で示す。コンパイラは、
並列実行フラグを検査し(S131)、「真」の場合
は、並列実行のライブラリを呼び出すコード生成を行な
う(S132)。この後、通常の手続き/関数の呼び出
しのコード生成が行なわれる。説明のため、これ以降、
並列実行のライブラリ呼び出しのコンパイルコードを
「_NEWPROC」と書き表す。
予約語「cobegin」を検出すると、並列実行フラグをセ
ットした後(S85)、通常のbegin文処理と同様に複
文のコード生成S86を処理する。これに対し、予約語
「coend」が検出された場合は、並列実行フラグをクリ
アする(S84)。ここでセット/クリアされた並列実
行フラグは、手続き/関数の呼び出しの際に参照され
る。この処理を図13の流れ図で示す。コンパイラは、
並列実行フラグを検査し(S131)、「真」の場合
は、並列実行のライブラリを呼び出すコード生成を行な
う(S132)。この後、通常の手続き/関数の呼び出
しのコード生成が行なわれる。説明のため、これ以降、
並列実行のライブラリ呼び出しのコンパイルコードを
「_NEWPROC」と書き表す。
【0040】図8に戻り説明を続ける。if文、while文
等の文は、複文その他の記述を包含し、この中でさらに
ステートメント処理部S82が再帰的に繰り返される。
字句解析の結果、文の先頭の語が識別子である場合、そ
の文は代入文または手続き呼び出しである。コンパイラ
は、識別子を検出すると、処理S83を実行する。
等の文は、複文その他の記述を包含し、この中でさらに
ステートメント処理部S82が再帰的に繰り返される。
字句解析の結果、文の先頭の語が識別子である場合、そ
の文は代入文または手続き呼び出しである。コンパイラ
は、識別子を検出すると、処理S83を実行する。
【0041】処理S83の内容を、図9を用いて説明す
る。
る。
【0042】コンパイラは、名前表の検索によって、取
得した識別子の名前が示すオブジェクトの型を検査する
(S90)。その結果、この(識別子である)名前が変
数名であれば、代入文処理S91を実行する。他方、こ
の名前が手続き名であれば、手続き呼び出し処理S92
を実行する。
得した識別子の名前が示すオブジェクトの型を検査する
(S90)。その結果、この(識別子である)名前が変
数名であれば、代入文処理S91を実行する。他方、こ
の名前が手続き名であれば、手続き呼び出し処理S92
を実行する。
【0043】3−1.2.代入時遠隔メモリ操作のコー
ド生成 代入文処理S91の処理手順を図10に示した。
ド生成 代入文処理S91の処理手順を図10に示した。
【0044】代入文処理S91に入るとコンパイラ12
は、さらに1語先の字句解析を行ない、識別子に続く記
号が「代入記号」である事を検査する(S100)。代
入文でない場合、配列の指定、レコード型の指定のいず
れかである。この場合は、更に構文を解析し、配列ある
いはレコード型での要素を指定する(S101)。他
方、代入文の場合は、変数のアドレスが、スタックポイ
ンタからの相対値として計算される(S102)。次
に、このアドレスの相対値をスタックトップに配置する
機械語生成を行なう(S103)。この後、式の構文解
析S104が実行され、この処理の中で、変数値参照処
理S105、関数呼び出し処理S106らがサブルーチ
ンとして呼び出され使用される。関数呼び出し処理S1
06は、既に図13を用いて説明した手続き呼び出し処
理S92と等しい。
は、さらに1語先の字句解析を行ない、識別子に続く記
号が「代入記号」である事を検査する(S100)。代
入文でない場合、配列の指定、レコード型の指定のいず
れかである。この場合は、更に構文を解析し、配列ある
いはレコード型での要素を指定する(S101)。他
方、代入文の場合は、変数のアドレスが、スタックポイ
ンタからの相対値として計算される(S102)。次
に、このアドレスの相対値をスタックトップに配置する
機械語生成を行なう(S103)。この後、式の構文解
析S104が実行され、この処理の中で、変数値参照処
理S105、関数呼び出し処理S106らがサブルーチ
ンとして呼び出され使用される。関数呼び出し処理S1
06は、既に図13を用いて説明した手続き呼び出し処
理S92と等しい。
【0045】(2)の特徴を実現するためには、代入の対
象である変数のアクセス情報を知る必要が有る。そこで
コンパイラ12は、名前表検索によって変数名が共有変
数であるか判断する。共有変数であると確認できる場合
(S107)は、共有変数書き換えのライブラリ呼び出
し(これを説明のため_R_WRITEと書く)のコード生成を
行なう(S108)。共有変数でない場合には、さらに
従属する処理ブロック内でアクセスされる変数か否か判
断する。
象である変数のアクセス情報を知る必要が有る。そこで
コンパイラ12は、名前表検索によって変数名が共有変
数であるか判断する。共有変数であると確認できる場合
(S107)は、共有変数書き換えのライブラリ呼び出
し(これを説明のため_R_WRITEと書く)のコード生成を
行なう(S108)。共有変数でない場合には、さらに
従属する処理ブロック内でアクセスされる変数か否か判
断する。
【0046】従属する処理ブロック(図7の例では、処
理ブロックp1に、処理ブロックproducer、consumerが従
属している)からアクセスされる変数は、自ブロックか
ら見た局所変数であっても、従属ブロックを子プロセッ
サエレメント2に配置し、並列実行した場合、遠隔メモ
リ操作される可能性の有る変数である。つまり、この判
断は子プロセッサエレメントでの参照の可能性が有るか
否かの判断である(S109)。この判断処理の結果、
真であれば、共有変数書き換えのライブラリ呼び出しコ
ード生成(S108)が処理される。他方、S109の
判断が偽であれば、通常の変数アクセスのコード生成処
理S110が実行される。
理ブロックp1に、処理ブロックproducer、consumerが従
属している)からアクセスされる変数は、自ブロックか
ら見た局所変数であっても、従属ブロックを子プロセッ
サエレメント2に配置し、並列実行した場合、遠隔メモ
リ操作される可能性の有る変数である。つまり、この判
断は子プロセッサエレメントでの参照の可能性が有るか
否かの判断である(S109)。この判断処理の結果、
真であれば、共有変数書き換えのライブラリ呼び出しコ
ード生成(S108)が処理される。他方、S109の
判断が偽であれば、通常の変数アクセスのコード生成処
理S110が実行される。
【0047】3−1.3.参照時遠隔メモリ操作のコー
ド生成 変数値参照処理S105の処理手順を図11に示した。
ド生成 変数値参照処理S105の処理手順を図11に示した。
【0048】変数値参照処理S105は、上述の様に、
式の構文解析S104において、単純式あるいは項の解
析処理のため呼び出される。コンパイラ12は、このと
き字句解析により一語先を取り出し、変数が配列あるい
はレコード型であるか検査する(S111)。結果が真
であれば、更に構文を解析し、配列あるいはレコード型
の要素を指定する(S101)。配列、レコード型共に
多重に指定できるが、変数の要素(あるいは単純変数で
あること)が確定した場合、コンパイラはこれが局所変
数であるか検査する(S112)。局所変数であれば、
通常の変数参照のコード生成S113を行ない、それ以
外の場合、まず共有変数であることを確認し(S10
7)、共有変数参照のライブラリ呼び出しのコードを生
成する(S114)。この共有変数参照のライブラリ呼
び出しを、これ以降説明のため、_S_READと書く。
式の構文解析S104において、単純式あるいは項の解
析処理のため呼び出される。コンパイラ12は、このと
き字句解析により一語先を取り出し、変数が配列あるい
はレコード型であるか検査する(S111)。結果が真
であれば、更に構文を解析し、配列あるいはレコード型
の要素を指定する(S101)。配列、レコード型共に
多重に指定できるが、変数の要素(あるいは単純変数で
あること)が確定した場合、コンパイラはこれが局所変
数であるか検査する(S112)。局所変数であれば、
通常の変数参照のコード生成S113を行ない、それ以
外の場合、まず共有変数であることを確認し(S10
7)、共有変数参照のライブラリ呼び出しのコードを生
成する(S114)。この共有変数参照のライブラリ呼
び出しを、これ以降説明のため、_S_READと書く。
【0049】3−1.4.共有変数の確認処理 以上の説明において使用した、共有変数であることを確
認する処理S107について、図12を用いて説明す
る。
認する処理S107について、図12を用いて説明す
る。
【0050】先に示した本実施例における言語仕様の限
定から、共有変数であると判断されるのは、処理中のブ
ロックの一つ外側で宣言されたブロックの局所変数であ
る。(この例は既に図7で示した。)ブロック構造を許
す言語では、この様なブロックの従属関係を、ブロック
の宣言された深さ(ブロックレベルと呼ぶ)から判断で
きる。
定から、共有変数であると判断されるのは、処理中のブ
ロックの一つ外側で宣言されたブロックの局所変数であ
る。(この例は既に図7で示した。)ブロック構造を許
す言語では、この様なブロックの従属関係を、ブロック
の宣言された深さ(ブロックレベルと呼ぶ)から判断で
きる。
【0051】図8で、注目するブロックについて構文解
析処理/コード生成処理を開始する前に、まずブロック
レベルの値を+1する(S87)。また、end文を検出
し、ブロックのコード生成処理を終了した後、ブロック
レベルの値を−1する。この処理によって決定されるブ
ロックレベルの値を、変数宣言が有った場合行なわれる
変数登録処理S89において、変数名と共に名前表に記
録しておく。この操作を前提として、共有変数の確認処
理S107では、処理ステップS121で、名前表から
ブロックレベルの値を取り出し、現在のブロックレベル
の値と比較する。変数のブロックレベルが、現在のブロ
ックレベルに比較し、1だけ小さい場合、本実施例では
共有変数と判断する(S122)。これを満たさない場
合は、変数エラー処理を行なう。言うまでもなく、他の
言語仕様を設定する事も可能である。ここでは処理の簡
単のため、この仕様とした。
析処理/コード生成処理を開始する前に、まずブロック
レベルの値を+1する(S87)。また、end文を検出
し、ブロックのコード生成処理を終了した後、ブロック
レベルの値を−1する。この処理によって決定されるブ
ロックレベルの値を、変数宣言が有った場合行なわれる
変数登録処理S89において、変数名と共に名前表に記
録しておく。この操作を前提として、共有変数の確認処
理S107では、処理ステップS121で、名前表から
ブロックレベルの値を取り出し、現在のブロックレベル
の値と比較する。変数のブロックレベルが、現在のブロ
ックレベルに比較し、1だけ小さい場合、本実施例では
共有変数と判断する(S122)。これを満たさない場
合は、変数エラー処理を行なう。言うまでもなく、他の
言語仕様を設定する事も可能である。ここでは処理の簡
単のため、この仕様とした。
【0052】共有変数であると判断された場合は、処理
中のブロックが、この変数にアクセスするという情報を
記録する必要がある。この理由は、コンパイラ12がコ
ード生成に際し、前述した処理S109の判断を必要と
するためである。本実施例において、処理ブロック単位
での変数アクセスに関する情報の記録には、図12に示
す共有変数アクセス表15を用いる。
中のブロックが、この変数にアクセスするという情報を
記録する必要がある。この理由は、コンパイラ12がコ
ード生成に際し、前述した処理S109の判断を必要と
するためである。本実施例において、処理ブロック単位
での変数アクセスに関する情報の記録には、図12に示
す共有変数アクセス表15を用いる。
【0053】コンパイラ12は、処理S122で共有変
数であると判断した場合、処理123によって、この変
数のスタックポインタからの相対番地127を、共有変
数アクセス表15に登録する。一方、ブロック管理表1
4は、図12に示すデータ構造を持ち、前述の様に、一
つブロックの処理に入る都度、ブロック番号を指標とし
ブロックが登録される。このとき、ブロック管理表14
にはブロック開始番地128と共に、共有変数アクセス
表15の先頭番地へのポインタ126が記録される。ブ
ロック管理表は他にプロセッサエレメント番号を記録す
るフィールド125を持つが、これは実行時に使用され
る。
数であると判断した場合、処理123によって、この変
数のスタックポインタからの相対番地127を、共有変
数アクセス表15に登録する。一方、ブロック管理表1
4は、図12に示すデータ構造を持ち、前述の様に、一
つブロックの処理に入る都度、ブロック番号を指標とし
ブロックが登録される。このとき、ブロック管理表14
にはブロック開始番地128と共に、共有変数アクセス
表15の先頭番地へのポインタ126が記録される。ブ
ロック管理表は他にプロセッサエレメント番号を記録す
るフィールド125を持つが、これは実行時に使用され
る。
【0054】3−2.実行時配置の処理 上記手順によって生成されたオブジェクトコード13
は、MPU4の機械語コードによって構成される。ホス
トプロセッサ1と、MPU4の機械語は必ずしも同一で
ある必要は無い。コンパイラ12は、ユーザプログラム
11の終了までコード生成を完了した後、コンパイラ1
2の作業メモリに作成したブロック管理表14および共
有変数アクセス表15の内容を読み出し、ブロック管理
表16および共有変数アクセス表17としてオブジェク
トコード13に結合する。
は、MPU4の機械語コードによって構成される。ホス
トプロセッサ1と、MPU4の機械語は必ずしも同一で
ある必要は無い。コンパイラ12は、ユーザプログラム
11の終了までコード生成を完了した後、コンパイラ1
2の作業メモリに作成したブロック管理表14および共
有変数アクセス表15の内容を読み出し、ブロック管理
表16および共有変数アクセス表17としてオブジェク
トコード13に結合する。
【0055】オブジェクトコード13は、ホストプロセ
ッサ1がユーザプログラムの実行を開始する段階で、プ
ロセッサエレメント2aにダウンロードされる。ダウン
ロードされたオブジェクトコード13は、プロセッサエ
レメント2aの局所メモリ5のRAM領域に確保された
ユーザプログラム領域に配置される。
ッサ1がユーザプログラムの実行を開始する段階で、プ
ロセッサエレメント2aにダウンロードされる。ダウン
ロードされたオブジェクトコード13は、プロセッサエ
レメント2aの局所メモリ5のRAM領域に確保された
ユーザプログラム領域に配置される。
【0056】これに引き続き、ホストプロセッサ1から
プロセッサエレメント2aに起動命令が転送される。プ
ロセッサエレメント2aは起動命令を受信すると、シス
テムプログラムがプロセッサプログラムカウンタを、ユ
ーザプログラムの先頭番地の値に書き換える(すなわち
ジャンプする)。
プロセッサエレメント2aに起動命令が転送される。プ
ロセッサエレメント2aは起動命令を受信すると、シス
テムプログラムがプロセッサプログラムカウンタを、ユ
ーザプログラムの先頭番地の値に書き換える(すなわち
ジャンプする)。
【0057】一度プロセッサエレメント2aで実行状態
に入ったユーザプログラムは、終了までプロセッサエレ
メント2aに管理される。ユーザプログラム中に、シス
テムライブラリの呼び出しが記述されていた場合、ソフ
トウェア例外処理によってMPU4はシステムプログラ
ムを実行する。または通信装置からの割り込み信号が入
力された場合、同様にMPU4はシステムプログラムに
入り割り込み処理プログラムを実行する。
に入ったユーザプログラムは、終了までプロセッサエレ
メント2aに管理される。ユーザプログラム中に、シス
テムライブラリの呼び出しが記述されていた場合、ソフ
トウェア例外処理によってMPU4はシステムプログラ
ムを実行する。または通信装置からの割り込み信号が入
力された場合、同様にMPU4はシステムプログラムに
入り割り込み処理プログラムを実行する。
【0058】プロセッサエレメント2aは、ユーザプロ
グラム処理の一部分を、プロセッサエレメント2b、2
c等に実行中に配置する。前節に述べたコンパイラの処
理に従って、ユーザプログラム中の、処理を並列実行す
る部分では、ライブラリ手続き_NEWPROCの呼び出しが行
われており、この呼び出しによってソフトウェア例外処
理に入ったMPU4は、次節で述べる処理手順でプログ
ラムの並列実行を行う。
グラム処理の一部分を、プロセッサエレメント2b、2
c等に実行中に配置する。前節に述べたコンパイラの処
理に従って、ユーザプログラム中の、処理を並列実行す
る部分では、ライブラリ手続き_NEWPROCの呼び出しが行
われており、この呼び出しによってソフトウェア例外処
理に入ったMPU4は、次節で述べる処理手順でプログ
ラムの並列実行を行う。
【0059】3−3.遠隔メモリ操作ライブラリの処理 本実施例のコンパイラ12が、ユーザプログラムから実
行可能なオブジェクトコードを生成する際に、リンクす
るライブラリ手続きの中で、本発明の実施に関係するの
は次の3つである。
行可能なオブジェクトコードを生成する際に、リンクす
るライブラリ手続きの中で、本発明の実施に関係するの
は次の3つである。
【0060】(1) 手続き_NEWPROC 実行中に処理分散
を行なう手続き (2) 手続き_R_WRITE 共有変数の内容を書き換える手
続き (3) 手続き_S_READ 共有変数の内容を読み取る手続
き以下順次説明する。
を行なう手続き (2) 手続き_R_WRITE 共有変数の内容を書き換える手
続き (3) 手続き_S_READ 共有変数の内容を読み取る手続
き以下順次説明する。
【0061】3−3.1.ライブラリ_NEWPROCの処理 プログラム実行中、オブジェクトに_NEWPROCが現れる
と、MPU4の処理はソフトウェア例外処理としてシス
テムプログラムに入り、ライブラリ_NEWPROCの処理番地
にジャンプする。この処理ルーチンにおいて、MPU4
は現在処理中のブロックのオブジェクトコード及びスタ
ックの内容について完全な複製を局所メモリ5のRAM
領域に生成する。また、プログラムカウンタを含むMP
U4の全てのプロセッサレジスタの内容を、RAM領域
に取ったレジスタストレージ領域に複写する。但しこの
ときプログラムカウンタ値は、_NEWPROCの次に実行すべ
きオブジェクトコードの位置を指し示す様に書き換えた
値を記録する。
と、MPU4の処理はソフトウェア例外処理としてシス
テムプログラムに入り、ライブラリ_NEWPROCの処理番地
にジャンプする。この処理ルーチンにおいて、MPU4
は現在処理中のブロックのオブジェクトコード及びスタ
ックの内容について完全な複製を局所メモリ5のRAM
領域に生成する。また、プログラムカウンタを含むMP
U4の全てのプロセッサレジスタの内容を、RAM領域
に取ったレジスタストレージ領域に複写する。但しこの
ときプログラムカウンタ値は、_NEWPROCの次に実行すべ
きオブジェクトコードの位置を指し示す様に書き換えた
値を記録する。
【0062】次にMPU4は、先に複製したオブジェク
トコード、スタックの複製データ、レジスタストレージ
の内容から、予め定めたデータ構造を持つデータ列を生
成する。これを図14(A)に示す形式のパケットとし
て通信装置6を介して、子プロセッサエレメント2へ転
送する。図14において、141はパケット全体のデー
タ構造を示す。パケットは、順序を正しく検出する目
的、及び転送元のプロセッサエレメント2を特定する目
的から、個々に固有の識別子142を持ち、終了符号1
43を終端とする。この識別子の値は、プロセッサエレ
メント2に一意に与えたプロセッサ番号と、パケットが
生成された時間の値からエンコードする事によって、各
パケットにユニークな番号を設定できる。
トコード、スタックの複製データ、レジスタストレージ
の内容から、予め定めたデータ構造を持つデータ列を生
成する。これを図14(A)に示す形式のパケットとし
て通信装置6を介して、子プロセッサエレメント2へ転
送する。図14において、141はパケット全体のデー
タ構造を示す。パケットは、順序を正しく検出する目
的、及び転送元のプロセッサエレメント2を特定する目
的から、個々に固有の識別子142を持ち、終了符号1
43を終端とする。この識別子の値は、プロセッサエレ
メント2に一意に与えたプロセッサ番号と、パケットが
生成された時間の値からエンコードする事によって、各
パケットにユニークな番号を設定できる。
【0063】識別子142に続くフィールドは、判別フ
ラグ144であり、この値が非0のパケットは、その内
容を直ちに評価すべきパケットであると判断される。値
が0のパケットに関しては、”4.共有データ参照/書
き換えの処理手順”でさらに説明する。図14(a)の
パケットでは、スタック初期化コード145、プロセッ
サレジスタ初期化コード146、オブジェクトコード1
47の順にデータ列が格納され転送される。
ラグ144であり、この値が非0のパケットは、その内
容を直ちに評価すべきパケットであると判断される。値
が0のパケットに関しては、”4.共有データ参照/書
き換えの処理手順”でさらに説明する。図14(a)の
パケットでは、スタック初期化コード145、プロセッ
サレジスタ初期化コード146、オブジェクトコード1
47の順にデータ列が格納され転送される。
【0064】親プロセッサエレメント(例えば2x)で
は、子プロセッサエレメント(例えば2y)に、どの処
理ブロックを配置したか記録しておく必要がある(次節
参照)。このために、親プロセッサエレメント2のMP
U4は、_NEWPROCによって子プロセッサエレメント2に
配置した処理ブロックの先頭番地(相対値)の値をキー
として、ブロック管理表16を検索する。この結果取り
出されたブロック管理表16の要素のプロセッサエレメ
ント番号125の位置に、子プロセッサエレメント2の
プロセッサ番号を記録する。
は、子プロセッサエレメント(例えば2y)に、どの処
理ブロックを配置したか記録しておく必要がある(次節
参照)。このために、親プロセッサエレメント2のMP
U4は、_NEWPROCによって子プロセッサエレメント2に
配置した処理ブロックの先頭番地(相対値)の値をキー
として、ブロック管理表16を検索する。この結果取り
出されたブロック管理表16の要素のプロセッサエレメ
ント番号125の位置に、子プロセッサエレメント2の
プロセッサ番号を記録する。
【0065】次に親プロセッサエレメント2は、図14
(b)の141に示す形式のパケットで、判別フラグ1
44の値を非0とし、ブロック管理表16、及び共有変
数アクセス表17の完全な複写を、ステートメント14
8に格納し子プロセッサエレメント2に転送する。この
処理は、子プロセッサエレメント2が更に処理を子プロ
セッサエレメント2に分散する上で必要とされる処理で
ある。
(b)の141に示す形式のパケットで、判別フラグ1
44の値を非0とし、ブロック管理表16、及び共有変
数アクセス表17の完全な複写を、ステートメント14
8に格納し子プロセッサエレメント2に転送する。この
処理は、子プロセッサエレメント2が更に処理を子プロ
セッサエレメント2に分散する上で必要とされる処理で
ある。
【0066】以上の手順によってライブラリ_NEWPROCの
処理は終了し、子プロセッサエレメント2は、レジスタ
初期化コード145で指定されたプログラムカウンタの
位置から実行状態に入る。
処理は終了し、子プロセッサエレメント2は、レジスタ
初期化コード145で指定されたプログラムカウンタの
位置から実行状態に入る。
【0067】実行状態における各プロセッサエレメント
2のスタック領域消費の説明図を図16に示す。図中上
方が、メモリ番地の小さい方向である。親プロセッサエ
レメント2のスタック領域を161に図示し、子プロセ
ッサエレメント2のスタック領域を162に図示した。
各処理ブロックが実行状態に入ると、ブロック先頭に配
置された機械語命令がスタック領域に局所変数のための
領域164を確保する。この上に演算その他で消費され
るスタック領域163が配置される。
2のスタック領域消費の説明図を図16に示す。図中上
方が、メモリ番地の小さい方向である。親プロセッサエ
レメント2のスタック領域を161に図示し、子プロセ
ッサエレメント2のスタック領域を162に図示した。
各処理ブロックが実行状態に入ると、ブロック先頭に配
置された機械語命令がスタック領域に局所変数のための
領域164を確保する。この上に演算その他で消費され
るスタック領域163が配置される。
【0068】ライブラリ_NEWPROCの処理では、子プロセ
ッサエレメント2のスタック初期化動作によって、親プ
ロセッサエレメントの領域164が子プロセッサエレメ
ントの領域166に複写される。更に親プロセッサエレ
メント2において手続き呼び出しを行なったことで、そ
の引数のためのスタック消費167が有り、さらにこの
上にプログラムカウンタ等必要なプロセッサレジスタの
退避領域165が確保される。これらの状態も複写され
る。子プロセッサエレメント2で実行される処理ブロッ
クの局所変数領域164は、この上に配置される。
ッサエレメント2のスタック初期化動作によって、親プ
ロセッサエレメントの領域164が子プロセッサエレメ
ントの領域166に複写される。更に親プロセッサエレ
メント2において手続き呼び出しを行なったことで、そ
の引数のためのスタック消費167が有り、さらにこの
上にプログラムカウンタ等必要なプロセッサレジスタの
退避領域165が確保される。これらの状態も複写され
る。子プロセッサエレメント2で実行される処理ブロッ
クの局所変数領域164は、この上に配置される。
【0069】従って、子プロセッサエレメント2から見
て共有変数の複写領域は166であり、共有変数の相対
アドレスは、処理ブロック開始前のスタックポインタ値
168からの相対アドレスである。一方、この共有変数
は、親プロセッサエレメント2では局所変数であり、そ
の格納領域は前述した164である。
て共有変数の複写領域は166であり、共有変数の相対
アドレスは、処理ブロック開始前のスタックポインタ値
168からの相対アドレスである。一方、この共有変数
は、親プロセッサエレメント2では局所変数であり、そ
の格納領域は前述した164である。
【0070】言うまでも無く、本実施例において共有変
数と言った場合、単一の変数を意味するのでは無く、共
有される複数の変数らの中の一つという意味である。
数と言った場合、単一の変数を意味するのでは無く、共
有される複数の変数らの中の一つという意味である。
【0071】3−3.2.ライブラリ_R_WRITEの処理 遠隔メモリ操作ライブラリの_R_WRITEが呼び出されるの
は、本実施例では次のどちらかの場合である。
は、本実施例では次のどちらかの場合である。
【0072】(1)子プロセッサエレメントにおいて、
共有変数の書き換えを行う場合(図10の処理S107
を通過した場合)。
共有変数の書き換えを行う場合(図10の処理S107
を通過した場合)。
【0073】(2)親プロセッサエレメントにおいて、
局所変数の書き換えを行う際、この局所変数が、子プロ
セッサエレメントでは、共有変数として参照されている
場合(図10の処理S109の結果が真の場合)。
局所変数の書き換えを行う際、この局所変数が、子プロ
セッサエレメントでは、共有変数として参照されている
場合(図10の処理S109の結果が真の場合)。
【0074】実際に上記のどちらかの場合に相当するか
否かは、実行中に判断する必要は無く、コンパイラ12
が構文解析の段階においてこれを判断し、すでにコード
生成を行っている。このため、実行時にライブラリ手続
き呼び出し_R_WRITEが検出された場合、上記(1)、
(2)のいずれかである。
否かは、実行中に判断する必要は無く、コンパイラ12
が構文解析の段階においてこれを判断し、すでにコード
生成を行っている。このため、実行時にライブラリ手続
き呼び出し_R_WRITEが検出された場合、上記(1)、
(2)のいずれかである。
【0075】始めにコンパイラ12のコード生成と、実
行時のMPU4の動作の関係を図15を用いて説明す
る。説明のためここでは、MPU4が、プロセッサレジ
スタ153として、データレジスタD、アドレスレジス
タA、スタックポインタSPを持つアキーキテクチャで
あるとする。また、次の簡単なアセンブラ文を説明に用
いる。
行時のMPU4の動作の関係を図15を用いて説明す
る。説明のためここでは、MPU4が、プロセッサレジ
スタ153として、データレジスタD、アドレスレジス
タA、スタックポインタSPを持つアキーキテクチャで
あるとする。また、次の簡単なアセンブラ文を説明に用
いる。
【0076】”MOV X、Y”はデータの移動を示す
命令語であり、データはXからYへ移動することを示
す。
命令語であり、データはXからYへ移動することを示
す。
【0077】(A)はAレジスタに指し示されるメモリ
の番地を示す。
の番地を示す。
【0078】”MOV X、−(SP)” は、移動に
先立ちスタックポインタを1ワード分減じ、スタック先
頭のメモリの番地にXを移動することを示す。
先立ちスタックポインタを1ワード分減じ、スタック先
頭のメモリの番地にXを移動することを示す。
【0079】”MOV (SP)+、X”は、スタック
の先頭のメモリ番地の内容をXに移動した後、スタック
ポインタを1ワード分増加することを示す。
の先頭のメモリ番地の内容をXに移動した後、スタック
ポインタを1ワード分増加することを示す。
【0080】図15に戻り説明を続ける。オブジェクト
コード領域151の内容を矢印154の方向に処理した
場合を説明する。但し、実際のコンパイル結果のコード
に代えて、ここでは図10の処理ステップの番号を示し
た。
コード領域151の内容を矢印154の方向に処理した
場合を説明する。但し、実際のコンパイル結果のコード
に代えて、ここでは図10の処理ステップの番号を示し
た。
【0081】MPU4がオブジェクトコードを実行し、
変数への代入操作が発生する時、まず変数のアドレスが
求められる(処理S102の生成コードによる)。次
に、この値がスタックの先頭に配置される(処理S10
3の生成コードによる)。これを変数のアドレス155
で示す。続いて、式の評価が行なわれ、式の値がスタッ
クの先頭に配置される(処理S104の生成コードによ
る)。これを式の値156で示す。この後、コンパイラ
12は、処理S110では次のコード生成を行なう。
変数への代入操作が発生する時、まず変数のアドレスが
求められる(処理S102の生成コードによる)。次
に、この値がスタックの先頭に配置される(処理S10
3の生成コードによる)。これを変数のアドレス155
で示す。続いて、式の評価が行なわれ、式の値がスタッ
クの先頭に配置される(処理S104の生成コードによ
る)。これを式の値156で示す。この後、コンパイラ
12は、処理S110では次のコード生成を行なう。
【0082】MOV (SP)+,D … 式の値をDレジスタに
転送 MOV (SP)+,A … 変数アドレスをAレジスタに転送 MOV D,(A) … 式の値を、変数の番地に格納 これに対し処理S108では、ライブラリ_R_WRITEの呼
び出しコードが生成される。ライブラリ_R_WRITEは、次
の手順を実行する。
転送 MOV (SP)+,A … 変数アドレスをAレジスタに転送 MOV D,(A) … 式の値を、変数の番地に格納 これに対し処理S108では、ライブラリ_R_WRITEの呼
び出しコードが生成される。ライブラリ_R_WRITEは、次
の手順を実行する。
【0083】手順1:自分に接続された子プロセッサエ
レメント2のプロセッサ番号をキーとして、ブロック管
理表16を検索する。該当が無ければ並列処理をおこな
っていない。故に、通常処理として手順3を実行する。
レメント2のプロセッサ番号をキーとして、ブロック管
理表16を検索する。該当が無ければ並列処理をおこな
っていない。故に、通常処理として手順3を実行する。
【0084】手順2:手順1で該当する要素が有った場
合、この要素のポインタ126から共有変数アクセス表
17にアクセスする。共有変数アクセス表17では、共
有変数アドレス(相対値)127が一致する要素が有る
かを検査する。一致が有れば、通信装置6を制御するシ
ステムプログラムを利用し、変数書き換え命令を、子プ
ロセッサエレメント2に転送する。一致が無い場合、手
順3へ移る。また、前回の制御トークンに対し、アクノ
レッジ応答が無い場合は、新たな変数書き換え命令は転
送せず、手順3に移る。
合、この要素のポインタ126から共有変数アクセス表
17にアクセスする。共有変数アクセス表17では、共
有変数アドレス(相対値)127が一致する要素が有る
かを検査する。一致が有れば、通信装置6を制御するシ
ステムプログラムを利用し、変数書き換え命令を、子プ
ロセッサエレメント2に転送する。一致が無い場合、手
順3へ移る。また、前回の制御トークンに対し、アクノ
レッジ応答が無い場合は、新たな変数書き換え命令は転
送せず、手順3に移る。
【0085】手順3:スタックメモリ領域152から、
式の値156および変数のアドレス155を取り出し、
上記通常手順と同様に変数代入を行なう。
式の値156および変数のアドレス155を取り出し、
上記通常手順と同様に変数代入を行なう。
【0086】3−3.3.ライブラリ_S_READ の処理 ライブラリ_S_READの処理の説明に先だって、通常の変
数参照の際のコンパイラ12の生成コードの内容を説明
する。通常の場合、変数アドレスがスタックトップに配
置される様にコード生成が行なわれる。これに引き続き
次のコードが生成される。
数参照の際のコンパイラ12の生成コードの内容を説明
する。通常の場合、変数アドレスがスタックトップに配
置される様にコード生成が行なわれる。これに引き続き
次のコードが生成される。
【0087】MOV (SP)+,A … Aレジスタに変数のア
ドレスを移動 MOV (A),D … 変数の値をDレジスタに移動 MOV D,-(SP) … 変数の値をスタックの先頭に移動 これに対して、図11の処理S114に示した様に、共
有変数参照であれば、ライブラリ_S_READのコードが生
成される。この場合、MPU4はソフトウェア例外処理
によってシステムプログラムに入り、次の手順で処理を
行なう。
ドレスを移動 MOV (A),D … 変数の値をDレジスタに移動 MOV D,-(SP) … 変数の値をスタックの先頭に移動 これに対して、図11の処理S114に示した様に、共
有変数参照であれば、ライブラリ_S_READのコードが生
成される。この場合、MPU4はソフトウェア例外処理
によってシステムプログラムに入り、次の手順で処理を
行なう。
【0088】手順1:局所メモリ5の遅延応答フラグの
「真・偽」を判断し、真であれば遅延モード動作を行な
う。次に手順2に入る。
「真・偽」を判断し、真であれば遅延モード動作を行な
う。次に手順2に入る。
【0089】手順2:上記の通常処理と同様に処理を行
なう。
なう。
【0090】手順3:遅延モードの場合、遅延応答フラ
グ9を書き換える事によって、このモードを解除し通常
モードに戻す。
グ9を書き換える事によって、このモードを解除し通常
モードに戻す。
【0091】遅延モードでの動作は、本実施例の最も大
きな特徴であり、次に説明する。
きな特徴であり、次に説明する。
【0092】4.共有データ参照/書き換えの処理手順 共有変数の書き換えは遠隔メモリ操作であり、「データ
転送」で実現される。このとき共有変数の書き換えに使
用するデータ転送のパケット形式は、図14(b)に示
すデータ構造をとる。前述した識別子142に続く判別
フラグ144の値が非0である場合、この形式のパケッ
トによって送られるデータ列を、本実施例では「データ
トークン」と呼ぶ。これに対し、判別フラグ144の値
=0の場合のパケットによって送られるデータ列は「制
御トークン」と呼ぶ。制御トークンは、直ちに評価され
ず、むしろ実行したい命令語の転送に使用される。制御
トークンを受信したプロセッサエレメント2は、これに
対し、応答としてのパケットを、受信したパケットと同
一の識別子の値を用いて返送する。
転送」で実現される。このとき共有変数の書き換えに使
用するデータ転送のパケット形式は、図14(b)に示
すデータ構造をとる。前述した識別子142に続く判別
フラグ144の値が非0である場合、この形式のパケッ
トによって送られるデータ列を、本実施例では「データ
トークン」と呼ぶ。これに対し、判別フラグ144の値
=0の場合のパケットによって送られるデータ列は「制
御トークン」と呼ぶ。制御トークンは、直ちに評価され
ず、むしろ実行したい命令語の転送に使用される。制御
トークンを受信したプロセッサエレメント2は、これに
対し、応答としてのパケットを、受信したパケットと同
一の識別子の値を用いて返送する。
【0093】本実施例において共有変数書き換えのため
の通信は3回のデータ列の授受で行なわれる。この手順
は次の通りである。
の通信は3回のデータ列の授受で行なわれる。この手順
は次の通りである。
【0094】手順1:送信側が制御トークンを発信す
る。
る。
【0095】手順2:受信側は、制御トークンを受信し
た場合応答を返す。これをアクノレッジ応答と呼ぶ。
(以下ACK応答と略す)。応答はデータトークンの形
式で転送される。
た場合応答を返す。これをアクノレッジ応答と呼ぶ。
(以下ACK応答と略す)。応答はデータトークンの形
式で転送される。
【0096】手順3:送信側は、アクノレッジ応答が有
った場合、データトークンを送り、制御トークンの指定
した操作に必要なデータを受信側に送る。
った場合、データトークンを送り、制御トークンの指定
した操作に必要なデータを受信側に送る。
【0097】これら一連の動作は非同期処理として行な
われる。すなわち、手順1を開始したプロセッサエレメ
ント2のMPU4は、手順3まで、処理を停止し待つ事
を行なわず、手順1終了後、直ちに例外処理を抜け出
し、ユーザプログラム実行に戻る。しかし、受信側のプ
ロセッサエレメント2からACK応答が有った場合、割
り込み回路7がMPU4に割り込み信号を入力するた
め、再び例外処理プログラムの実行が行なわれ、手順
2、3が継続的に行なわれる。
われる。すなわち、手順1を開始したプロセッサエレメ
ント2のMPU4は、手順3まで、処理を停止し待つ事
を行なわず、手順1終了後、直ちに例外処理を抜け出
し、ユーザプログラム実行に戻る。しかし、受信側のプ
ロセッサエレメント2からACK応答が有った場合、割
り込み回路7がMPU4に割り込み信号を入力するた
め、再び例外処理プログラムの実行が行なわれ、手順
2、3が継続的に行なわれる。
【0098】4−1.遅延モード以外での動作 図4、図5、図6を用いて本実施例での共有変数参照及
び書き換えの動作を説明する。以下では説明のため仮
に、ある一つの共有変数に着目した時、これを参照する
処理ブロックを「消費者プロセス」と呼び、注目の共有
変数に対し書き換えを行なう処理ブロックを「生産者プ
ロセス」と呼ぶ。例えば子プロセッサエレメント2yに
おいて、共有変数の書き換えがあって、親プロセッサエ
レメント2xの局所変数を書き換えるのであれば、子プ
ロセッサエレメント2yの処理ブロックを「生産者プロ
セス」と呼ぶことができる。
び書き換えの動作を説明する。以下では説明のため仮
に、ある一つの共有変数に着目した時、これを参照する
処理ブロックを「消費者プロセス」と呼び、注目の共有
変数に対し書き換えを行なう処理ブロックを「生産者プ
ロセス」と呼ぶ。例えば子プロセッサエレメント2yに
おいて、共有変数の書き換えがあって、親プロセッサエ
レメント2xの局所変数を書き換えるのであれば、子プ
ロセッサエレメント2yの処理ブロックを「生産者プロ
セス」と呼ぶことができる。
【0099】図4は、2つの処理単位の動作の時間推移
を説明した図である。ここで矢印301は消費者プロセ
スの処理の流れを示し、303は生産者プロセスの処理
の流れを示す。また302は消費者プログラム中で発生
する共有変数参照の位置を示し、304は生産者プロセ
ス中で発生する共有変数書き換え処理の位置を示す。実
際に共有変数を書き換える場合、通信経路3によって伝
達されたデータ列を、通信装置6によって受信したMP
U4が、システムプログラム、例外処理プログラムの処
理を経て共有変数書き換えを実行する。この時の処理プ
ログラムの消費時間を、305で示す。
を説明した図である。ここで矢印301は消費者プロセ
スの処理の流れを示し、303は生産者プロセスの処理
の流れを示す。また302は消費者プログラム中で発生
する共有変数参照の位置を示し、304は生産者プロセ
ス中で発生する共有変数書き換え処理の位置を示す。実
際に共有変数を書き換える場合、通信経路3によって伝
達されたデータ列を、通信装置6によって受信したMP
U4が、システムプログラム、例外処理プログラムの処
理を経て共有変数書き換えを実行する。この時の処理プ
ログラムの消費時間を、305で示す。
【0100】第1回目に共有変数に対する書き換え(遠
隔メモリ操作)が発生した場合、生産者プロセスは、図
5に示した送信側プロセッサ501の処理を行なう。す
なわち、共有変数書き換えの制御トークンを送信し(S
503、および図4の矢印401)、続いて通常処理と
同様に自プロセッサエレメントの局所メモリにある共有
変数を書き換える(S504)。但し、ここで書き換え
る共有変数は、自プロセッサエレメントが、子プロセッ
サエレメント2yであれば、共有変数の複写されたメモ
リに相当する。また、自プロセッサエレメントが、親プ
ロセッサエレメント2xであれば、共有変数は、実際に
は自プロセッサが実行中の処理ブロックの局所変数であ
る。これは、ここで「生産者プロセス」と呼ぶ処理ブロ
ックの実行時の配置に依存する。
隔メモリ操作)が発生した場合、生産者プロセスは、図
5に示した送信側プロセッサ501の処理を行なう。す
なわち、共有変数書き換えの制御トークンを送信し(S
503、および図4の矢印401)、続いて通常処理と
同様に自プロセッサエレメントの局所メモリにある共有
変数を書き換える(S504)。但し、ここで書き換え
る共有変数は、自プロセッサエレメントが、子プロセッ
サエレメント2yであれば、共有変数の複写されたメモ
リに相当する。また、自プロセッサエレメントが、親プ
ロセッサエレメント2xであれば、共有変数は、実際に
は自プロセッサが実行中の処理ブロックの局所変数であ
る。これは、ここで「生産者プロセス」と呼ぶ処理ブロ
ックの実行時の配置に依存する。
【0101】生産者プロセスは、以上の操作で遠隔メモ
リ操作のライブラリ手続き_R_WRITEの実行を完
了し、通常のユーザプログラム処理に戻る。
リ操作のライブラリ手続き_R_WRITEの実行を完
了し、通常のユーザプログラム処理に戻る。
【0102】消費者プロセスの処理を、図6の状態遷移
図と、図5の受信側プロセッサ502の処理の流れ図で
示す。プログラム起動後、消費者プロセスは、状態60
1にあるが、上記制御トークンの受信によって、割り込
みが発生し、処理状態は602に遷移する。図5の流れ
図では処理S507が実施される。この時、これが第1
回目の共有変数書き換え処理であるため、遅延応答フラ
グ9は「偽」である。そこで処理S508により遅延モ
ード以外であると判断され、処理S509に移る(状態
603)。この処理において、プロセッサエレメント2
は、ACK応答を、生産者プロセス実行中のプロセッサ
エレメント2に返す。これは図4の矢印402で示され
る。
図と、図5の受信側プロセッサ502の処理の流れ図で
示す。プログラム起動後、消費者プロセスは、状態60
1にあるが、上記制御トークンの受信によって、割り込
みが発生し、処理状態は602に遷移する。図5の流れ
図では処理S507が実施される。この時、これが第1
回目の共有変数書き換え処理であるため、遅延応答フラ
グ9は「偽」である。そこで処理S508により遅延モ
ード以外であると判断され、処理S509に移る(状態
603)。この処理において、プロセッサエレメント2
は、ACK応答を、生産者プロセス実行中のプロセッサ
エレメント2に返す。これは図4の矢印402で示され
る。
【0103】再び生産者プロセスに戻る。生産者プロセ
ス側では、これによって割り込みが発生し、処理S50
5に入り、ACK応答を受信する。続いて、この時点で
の最新の共有変数の値が読み出され、データトークンに
よって、消費者プロセスに転送される(S506)。こ
の転送を図4の矢印403に示す。
ス側では、これによって割り込みが発生し、処理S50
5に入り、ACK応答を受信する。続いて、この時点で
の最新の共有変数の値が読み出され、データトークンに
よって、消費者プロセスに転送される(S506)。こ
の転送を図4の矢印403に示す。
【0104】消費者プロセスは、ACK応答の後、待ち
状態にあり、データトークンを受信すると、この値に基
づき共有変数を書き換える(S510及び状態60
4)。
状態にあり、データトークンを受信すると、この値に基
づき共有変数を書き換える(S510及び状態60
4)。
【0105】以上が、遅延モード以外での動作の手順で
ある。
ある。
【0106】4−2.遅延モードでの動作 これに対し、生産者プロセスでの共有変数書き換えの時
間間隔が密である場合、短時間の後に、再び共有変数書
き換えの制御トークンの送信が行なわれる(矢印40
4)。この時も、制御トークンは割り込み処理によって
消費者プロセスに正しく受信されるが、割り込み回路7
から割り込み信号を受信したΔT測定回路8によって、
前回割り込み発生時間からの時間差306が計測され
る。この時間差306が、予めプロセッサエレメント2
で決められた値に対し小さい場合、遅延応答フラグの値
が「真」となる。
間間隔が密である場合、短時間の後に、再び共有変数書
き換えの制御トークンの送信が行なわれる(矢印40
4)。この時も、制御トークンは割り込み処理によって
消費者プロセスに正しく受信されるが、割り込み回路7
から割り込み信号を受信したΔT測定回路8によって、
前回割り込み発生時間からの時間差306が計測され
る。この時間差306が、予めプロセッサエレメント2
で決められた値に対し小さい場合、遅延応答フラグの値
が「真」となる。
【0107】この結果、消費者プロセス側の処理の状態
遷移(図6)は、データ受信の例外処理602に入る
と、遅延モードであると判断し、直ちにオブジェクト実
行状態601に復帰してしまう。一方、生産者プロセス
側は、前述と同様に共有変数書き換えの制御トークンを
転送後、通常のユーザプログラム実行を継続するため、
ACK応答が有るまでの時間中に、共有変数書き換え3
04が繰り返し発生した場合は、共有変数を次々に書き
換える。すでに”3−3.2.ライブラリ_R_WRI
TEの処理”に述べた様に、このとき新たな制御トーク
ンは送信しない。
遷移(図6)は、データ受信の例外処理602に入る
と、遅延モードであると判断し、直ちにオブジェクト実
行状態601に復帰してしまう。一方、生産者プロセス
側は、前述と同様に共有変数書き換えの制御トークンを
転送後、通常のユーザプログラム実行を継続するため、
ACK応答が有るまでの時間中に、共有変数書き換え3
04が繰り返し発生した場合は、共有変数を次々に書き
換える。すでに”3−3.2.ライブラリ_R_WRI
TEの処理”に述べた様に、このとき新たな制御トーク
ンは送信しない。
【0108】遅延モードにおいて、消費者プロセス側
は、実際の共有変数の書き換えをライブラリ_S_READが
呼び出されるまで遅延する。消費者プロセス側で、共有
変数の読み取り302が発生すると、ライブラリ_S_REA
Dの実行に入り、遅延モードであるか否か判断され(S
511)、遅延モードであればACK応答が返送される
(S512、矢印405)。次にデータトークンの受信
を待ち、データトークンの転送(矢印406)が有れ
ば、このデータに従い、共有変数の内容を変更する(S
513、状態S604)。この後、通常処理同様の共有
変数参照が行なわれる(状態605)。
は、実際の共有変数の書き換えをライブラリ_S_READが
呼び出されるまで遅延する。消費者プロセス側で、共有
変数の読み取り302が発生すると、ライブラリ_S_REA
Dの実行に入り、遅延モードであるか否か判断され(S
511)、遅延モードであればACK応答が返送される
(S512、矢印405)。次にデータトークンの受信
を待ち、データトークンの転送(矢印406)が有れ
ば、このデータに従い、共有変数の内容を変更する(S
513、状態S604)。この後、通常処理同様の共有
変数参照が行なわれる(状態605)。
【0109】5.第1の実施例についての補足説明 上記の例において、実際の発生頻度の点からは、共有変
数書き換えの時間間隔が、共有変数参照の時間間隔に比
較して疎である状態が一般的である。この場合、共有変
数参照の_S_READライブラリが実行されると、処理S5
11で遅延モード以外と判断され、処理S514によ
り、自プロセッサエレメント上の共有変数(あるいはそ
の複写)10が参照される。言うまでも無く、この処理
は通信を含まないため、極めて高速に処理できる。
数書き換えの時間間隔が、共有変数参照の時間間隔に比
較して疎である状態が一般的である。この場合、共有変
数参照の_S_READライブラリが実行されると、処理S5
11で遅延モード以外と判断され、処理S514によ
り、自プロセッサエレメント上の共有変数(あるいはそ
の複写)10が参照される。言うまでも無く、この処理
は通信を含まないため、極めて高速に処理できる。
【0110】実際の動作において、ある処理ブロック
が、子プロセッサエレメント2yその他に配置され、親
プロセッサエレメント2xの局所変数(2yにとって共
有変数)に対し参照及び書き換えの両方を混在して行な
う場合であっても、操作手順は以上説明と同じである。
参照は、その際のモードが遅延モードであるか否かによ
って、親プロセッサエレメント2xの局所メモリを参照
するか、子プロセッサエレメント2yの局所メモリを参
照するかが異なるが、書き換えは、あくまで親プロセッ
サエレメント2xの局所メモリ上にある変数(の実体)
と、各プロセッサユニット局所メモリにあるこの複写を
対象に行なわれる。具体的には、親プロセッサエレメン
ト2xのMPU4が、変数書き換えの制御トークンを受
信した後、割り込み処理として行なわれるソフトウェア
例外処理において、制御トークン発信者以外の子プロセ
ッサエレメント2のスタック領域に記録された共有変数
の複写の値も変更する操作を行なう。これは制御トーク
ンの転送による前述と同様の一連の操作によって行な
う。本実施例では、個々の親プロセッサエレメント2に
対し、子プロセッサエレメント2の数は二つであるか
ら、操作手順は容易である。
が、子プロセッサエレメント2yその他に配置され、親
プロセッサエレメント2xの局所変数(2yにとって共
有変数)に対し参照及び書き換えの両方を混在して行な
う場合であっても、操作手順は以上説明と同じである。
参照は、その際のモードが遅延モードであるか否かによ
って、親プロセッサエレメント2xの局所メモリを参照
するか、子プロセッサエレメント2yの局所メモリを参
照するかが異なるが、書き換えは、あくまで親プロセッ
サエレメント2xの局所メモリ上にある変数(の実体)
と、各プロセッサユニット局所メモリにあるこの複写を
対象に行なわれる。具体的には、親プロセッサエレメン
ト2xのMPU4が、変数書き換えの制御トークンを受
信した後、割り込み処理として行なわれるソフトウェア
例外処理において、制御トークン発信者以外の子プロセ
ッサエレメント2のスタック領域に記録された共有変数
の複写の値も変更する操作を行なう。これは制御トーク
ンの転送による前述と同様の一連の操作によって行な
う。本実施例では、個々の親プロセッサエレメント2に
対し、子プロセッサエレメント2の数は二つであるか
ら、操作手順は容易である。
【0111】この手段によって、変数値の正当性は保証
される。例えば、別の子プロセッサエレメント2zが共
有変数を書き換え、これを子プロセッサエレメント2y
が参照する場合でも、遅延モードでは、共有変数の最新
の値を参照するため、2zによる変更内容は反映され
る。言うまでも無く通常モードであれば、2zによる書
き換えは、親プロセッサ2xを中継し、子プロセッサエ
レメント2yの共有変数の複写も変更するため、値の正
当性にたいする保証が有る。一つの子プロセッサエレメ
ント2が、参照、書き換えを混在して行なっても、同じ
理由から変数の値の正当性は保証される。
される。例えば、別の子プロセッサエレメント2zが共
有変数を書き換え、これを子プロセッサエレメント2y
が参照する場合でも、遅延モードでは、共有変数の最新
の値を参照するため、2zによる変更内容は反映され
る。言うまでも無く通常モードであれば、2zによる書
き換えは、親プロセッサ2xを中継し、子プロセッサエ
レメント2yの共有変数の複写も変更するため、値の正
当性にたいする保証が有る。一つの子プロセッサエレメ
ント2が、参照、書き換えを混在して行なっても、同じ
理由から変数の値の正当性は保証される。
【0112】6.第2の実施例の説明 第1の実施例は、共有変数に対する書き換え要求の時間
間隔の測定を目的としΔT測定回路8を使用した。しか
し、本発明実施の上で、これは必要不可欠の構成要素で
はない。次に第2の実施例として、ΔT測定回路8を用
いない構成を説明する。この実施例の処理手順の方針は
「参照要求発生以前に、1回以上の書き換え要求が有っ
た場合は、書き換え要求頻度が高いと判断する。」と言
うものである。もちろん、ここで「1回以上」と書かず
N回以上としても同じである。しかし、実際にある変数
の値は、それが参照される時点で初めて意味を持つもの
であるから、ある共有変数が書き換えられようとした場
合、それが1回めの書き換えであっても、書き換えため
の遠隔メモリ操作は、参照時点まで遅延して行なうのが
妥当である。
間隔の測定を目的としΔT測定回路8を使用した。しか
し、本発明実施の上で、これは必要不可欠の構成要素で
はない。次に第2の実施例として、ΔT測定回路8を用
いない構成を説明する。この実施例の処理手順の方針は
「参照要求発生以前に、1回以上の書き換え要求が有っ
た場合は、書き換え要求頻度が高いと判断する。」と言
うものである。もちろん、ここで「1回以上」と書かず
N回以上としても同じである。しかし、実際にある変数
の値は、それが参照される時点で初めて意味を持つもの
であるから、ある共有変数が書き換えられようとした場
合、それが1回めの書き換えであっても、書き換えため
の遠隔メモリ操作は、参照時点まで遅延して行なうのが
妥当である。
【0113】第2の実施例は、図1に示した第1の実施
例の構成において、ΔT測定回路8を除いて全く同一の
構成で実現される。処理のためのコンパイラ動作の点で
も、第1の実施例と等しい。第2の実施例の第1の実施
例に対する唯一の差は、共有変数参照時のライブラリ_S
_READの動作だけである。図17を用い、この点を説明
する。
例の構成において、ΔT測定回路8を除いて全く同一の
構成で実現される。処理のためのコンパイラ動作の点で
も、第1の実施例と等しい。第2の実施例の第1の実施
例に対する唯一の差は、共有変数参照時のライブラリ_S
_READの動作だけである。図17を用い、この点を説明
する。
【0114】各プロセッサエレメント2のMPU4は、
ユーザプログラム実行状態では、オブジェクトコードを
実行する定常的な処理171を続けている。ここに共有
変数書き換えを指示する制御トークンが、通信装置6を
介し入力されると、割り込み回路7が、MPU4に対し
割り込み信号を入力する。割り込み処理に入ったMPU
4は、データ受信のための例外処理172の処理状態に
入り、常に遅延応答モードとなる。従って、応答パケッ
トである「ACK応答」は要求元のプロセッサエレメン
トへは返送されず、MPU4は直ちに通常のオブジェク
トコード実行状態171を継続する。
ユーザプログラム実行状態では、オブジェクトコードを
実行する定常的な処理171を続けている。ここに共有
変数書き換えを指示する制御トークンが、通信装置6を
介し入力されると、割り込み回路7が、MPU4に対し
割り込み信号を入力する。割り込み処理に入ったMPU
4は、データ受信のための例外処理172の処理状態に
入り、常に遅延応答モードとなる。従って、応答パケッ
トである「ACK応答」は要求元のプロセッサエレメン
トへは返送されず、MPU4は直ちに通常のオブジェク
トコード実行状態171を継続する。
【0115】オブジェクトコード実行状態171におい
て、ライブラリ手続き_S_READの実行が行なわれると、
システムプログラムは遅延応答フラグ9の内容に従い処
理分岐を行ない、遅延モードであれば、共有変数のコピ
ーを変更する処理状態174に入る。ここではMPU4
は次の動作を行なう。
て、ライブラリ手続き_S_READの実行が行なわれると、
システムプログラムは遅延応答フラグ9の内容に従い処
理分岐を行ない、遅延モードであれば、共有変数のコピ
ーを変更する処理状態174に入る。ここではMPU4
は次の動作を行なう。
【0116】手順1:書き換え要求の有ったプロセッサ
エレメント2へACK応答を返す。
エレメント2へACK応答を返す。
【0117】手順2:共有変数書き換えのためのデータ
を受信する。
を受信する。
【0118】手順3:上記データによって共有変数の複
写を更新する。
写を更新する。
【0119】手順4:状態175へ遷移。
【0120】処理状態175では、実際の共有変数(の
複写)が参照された後、遅延応答フラグ9の内容が論理
「偽」に書き換えられることによって通常処理モード1
73が設定され、オブジェクトコードの実行状態171
に戻る。
複写)が参照された後、遅延応答フラグ9の内容が論理
「偽」に書き換えられることによって通常処理モード1
73が設定され、オブジェクトコードの実行状態171
に戻る。
【0121】一方、ライブラリ手続き_S_READの呼び出
しが、次の共有変数書き換え以前に呼び出された場合、
処理モードが遅延応答モードではないことから、処理状
態175への遷移が起こり、共有変数の複写の値が参照
され、通信は発生しない。
しが、次の共有変数書き換え以前に呼び出された場合、
処理モードが遅延応答モードではないことから、処理状
態175への遷移が起こり、共有変数の複写の値が参照
され、通信は発生しない。
【0122】以上の説明から明らかな様に、第2の実施
例でも、遠隔メモリ操作に伴う「通信」は、共有変数に
書き換えが有って、かつ書き換え後に更に参照する必要
が有る場合だけ発生する。共有変数に書き換えが無い限
り各プロセッサエレメント2の局所メモリが参照される
ため通信は発生せず、また書き換えが有っても、次に参
照が行なわれる時点まで通信の発生は遅延される。言う
までも無く、この間に共有変数の書き換えは複数回発生
しているかもしれないが、その都度通信が行なわれる事
は無い。すなわち、書き換えが参照より密な時間間隔で
発生しても、より疎な時間間隔である参照時まで通信は
行なわれない。反対に参照の時間間隔が書き換えより密
であれば、より疎な間隔である書き換えの時点まで通信
は発生しない。これらの判断が完全に実行時に行なわれ
る点でこの実施例は有用である。
例でも、遠隔メモリ操作に伴う「通信」は、共有変数に
書き換えが有って、かつ書き換え後に更に参照する必要
が有る場合だけ発生する。共有変数に書き換えが無い限
り各プロセッサエレメント2の局所メモリが参照される
ため通信は発生せず、また書き換えが有っても、次に参
照が行なわれる時点まで通信の発生は遅延される。言う
までも無く、この間に共有変数の書き換えは複数回発生
しているかもしれないが、その都度通信が行なわれる事
は無い。すなわち、書き換えが参照より密な時間間隔で
発生しても、より疎な時間間隔である参照時まで通信は
行なわれない。反対に参照の時間間隔が書き換えより密
であれば、より疎な間隔である書き換えの時点まで通信
は発生しない。これらの判断が完全に実行時に行なわれ
る点でこの実施例は有用である。
【0123】7.第3の実施例の説明 第1及び第2の実施例では、共有変数書き換え動作に際
し次の手順を行なった。
し次の手順を行なった。
【0124】(1)要求側から応答側に命令転送。
【0125】(2)応答側から要求側にACK応答(必要
に応じ遅延)。
に応じ遅延)。
【0126】(3)要求側から応答側にデータ転送。
【0127】単純な実施例の変形として、これを共有変
数を参照する側から能動的に処理する方法が有る。つま
り上記の「要求側」を変数参照するプロセッサエレメン
ト2と見なし処理する方法である。この時制御トークン
の内容は”変数書き換え命令”ではなく”変数参照命
令”とすれば良い。しかし「遅延を、共有変数の値が次
に書き換えられる時点まで行なう」という方法はかなり
非現実的である。なぜなら「共有変数の値はこれ以上、
二度と再び書き換えられる事は無い。」という段階で遅
延に入ったプロセッサエレメントが”永久待ち状態”に
入ってしまう危険をはらむ方法だからである。第3の実
施例は更にこの点を考慮し、簡単な手段によって解決し
た実施例である。加えて通信時の手順を2回のパケット
転送で完結する構成とした。
数を参照する側から能動的に処理する方法が有る。つま
り上記の「要求側」を変数参照するプロセッサエレメン
ト2と見なし処理する方法である。この時制御トークン
の内容は”変数書き換え命令”ではなく”変数参照命
令”とすれば良い。しかし「遅延を、共有変数の値が次
に書き換えられる時点まで行なう」という方法はかなり
非現実的である。なぜなら「共有変数の値はこれ以上、
二度と再び書き換えられる事は無い。」という段階で遅
延に入ったプロセッサエレメントが”永久待ち状態”に
入ってしまう危険をはらむ方法だからである。第3の実
施例は更にこの点を考慮し、簡単な手段によって解決し
た実施例である。加えて通信時の手順を2回のパケット
転送で完結する構成とした。
【0128】図18は第3の実施例の動作環境の説明図
である。機器アドレスを指定して双方向のデータ通信を
実現するネットワーク184によって複数台のパーソナ
ルコンピュータ180らが結合されている。この中の1
台のパーソナルコンピュータ180において、アプリケ
ーションプログラムとして並列記述言語のコンパイラ1
2が使用され、ユーザプログラムのソースコード11か
らオブジェクトコード13が生成され実行される。
である。機器アドレスを指定して双方向のデータ通信を
実現するネットワーク184によって複数台のパーソナ
ルコンピュータ180らが結合されている。この中の1
台のパーソナルコンピュータ180において、アプリケ
ーションプログラムとして並列記述言語のコンパイラ1
2が使用され、ユーザプログラムのソースコード11か
らオブジェクトコード13が生成され実行される。
【0129】ここでコンパイラ12は、コンパイル結果
のコードについて、いわゆる遠隔プロシジャ呼び出しの
ライブラリの結合と、このライブラリの呼び出しコード
生成を行ない、処理の一部を他のパーソナルコンピュー
タ180に分散し、並列処理を行なうためのオブジェク
トコード13を出力する。このオブジェクトコード13
は、遠隔プロシジャ呼び出しのシステムサービスを行な
うオペレーティングシステムの管理下で、実行される。
あるいは、遠隔プロシジャ呼び出しライブラリの代わり
に、ネットワークオペレーティングシステムと呼ぶネッ
トワーク上のプロセッサ資源を個々のプロセスの要求に
応じ割り当てる管理方式のオペレーティングシステムの
機能を利用することもできる。
のコードについて、いわゆる遠隔プロシジャ呼び出しの
ライブラリの結合と、このライブラリの呼び出しコード
生成を行ない、処理の一部を他のパーソナルコンピュー
タ180に分散し、並列処理を行なうためのオブジェク
トコード13を出力する。このオブジェクトコード13
は、遠隔プロシジャ呼び出しのシステムサービスを行な
うオペレーティングシステムの管理下で、実行される。
あるいは、遠隔プロシジャ呼び出しライブラリの代わり
に、ネットワークオペレーティングシステムと呼ぶネッ
トワーク上のプロセッサ資源を個々のプロセスの要求に
応じ割り当てる管理方式のオペレーティングシステムの
機能を利用することもできる。
【0130】また並列処理言語の仕様としては、第1の
実施例で挙げた仕様を適用する。但しここでは結合形式
の差から、共有変数として認められるのは、主プログラ
ムレベルで宣言された変数だけに限定する。個々のパー
ソナルコンピュータ180は、通信制御装置183によ
ってネットワーク184から自分あてのパケットを取得
できる。また各パーソナルコンピュータ180にはCP
U181に管理される局所メモリ182が実装される。
この局所メモリには必要に応じて共有変数の複写領域が
確保され、実行中のプロセスから参照が行なわれる。
実施例で挙げた仕様を適用する。但しここでは結合形式
の差から、共有変数として認められるのは、主プログラ
ムレベルで宣言された変数だけに限定する。個々のパー
ソナルコンピュータ180は、通信制御装置183によ
ってネットワーク184から自分あてのパケットを取得
できる。また各パーソナルコンピュータ180にはCP
U181に管理される局所メモリ182が実装される。
この局所メモリには必要に応じて共有変数の複写領域が
確保され、実行中のプロセスから参照が行なわれる。
【0131】図20は、第3の実施例の動作を時間遷移
から説明した図である。ここでは第1の実施例にならい
共有変数を参照するプロセスを「消費者プロセス」で、
書き換える側のプロセスを「生産者プロセス」で書き表
した。既に述べた様に、一つのプログラム実行単位が両
方を混在して行なっても構わない。
から説明した図である。ここでは第1の実施例にならい
共有変数を参照するプロセスを「消費者プロセス」で、
書き換える側のプロセスを「生産者プロセス」で書き表
した。既に述べた様に、一つのプログラム実行単位が両
方を混在して行なっても構わない。
【0132】本実施例では制御トークンを受信した場合
CPU181は、直ちにその内容を評価する。この点で
この実施例は前2例と異なる。
CPU181は、直ちにその内容を評価する。この点で
この実施例は前2例と異なる。
【0133】本実施例の遠隔メモリ操作のための通信
は、共有変数を参照するプロセス側によって能動的に起
動される。図20で消費者プロセスの処理流れを矢印3
01で示し、共有変数参照の位置を302で示す。共有
変数参照時に消費者プロセスは通信201によって生産
者プロセスに制御トークンを送り共有変数値の返送を求
める。この時通信に使用するパケットの形式を図19に
示す。パケットの基本的な構成は、第1の実施例におい
て図14を用いて説明したものと同様である。しかし、
遅延指定のためのフラグ190が追加されている。通信
201の際には、ステートメント148の内容として、
共有変数の参照番号と、参照命令が転送される。ここで
共有変数領域並びに共有変数の複写領域は、参照番号か
ら計算により生成される相対アドレスで位置指定され
る。
は、共有変数を参照するプロセス側によって能動的に起
動される。図20で消費者プロセスの処理流れを矢印3
01で示し、共有変数参照の位置を302で示す。共有
変数参照時に消費者プロセスは通信201によって生産
者プロセスに制御トークンを送り共有変数値の返送を求
める。この時通信に使用するパケットの形式を図19に
示す。パケットの基本的な構成は、第1の実施例におい
て図14を用いて説明したものと同様である。しかし、
遅延指定のためのフラグ190が追加されている。通信
201の際には、ステートメント148の内容として、
共有変数の参照番号と、参照命令が転送される。ここで
共有変数領域並びに共有変数の複写領域は、参照番号か
ら計算により生成される相対アドレスで位置指定され
る。
【0134】この要求に対し生産者プロセスは、通信2
02によって応答を返す。ここで通信202のパケット
では、遅延指定フラグ190の内容を論理値「真」とし
て応答する。これによって、消費者プロセス側は遅延モ
ードに入る。遅延モードでの共有変数参照動作は、共有
変数参照のライブラリ手続きにおいてモード判断の後実
行される。この動作では、自分の局所メモリ182上に
配置された共有変数の値が参照される。
02によって応答を返す。ここで通信202のパケット
では、遅延指定フラグ190の内容を論理値「真」とし
て応答する。これによって、消費者プロセス側は遅延モ
ードに入る。遅延モードでの共有変数参照動作は、共有
変数参照のライブラリ手続きにおいてモード判断の後実
行される。この動作では、自分の局所メモリ182上に
配置された共有変数の値が参照される。
【0135】この後、共有変数の書き換えが全く発生し
なければ、消費者プロセスは終了までずっと局所メモリ
182上の共有変数値を参照することとなる。図20に
おいて○印204で示したのは、局所メモリ上の共有変
数を参照する時点である。しかし、共有変数に対し新た
な値の書き換えが発生した時、書き換えを行なったプロ
セス(生産者プロセス)は、通信203を行なう。通信
203はモードリセットの制御トークンを受信側に転送
する。モードリセットの制御トークンを受信した消費者
プロセスは、遅延モードを解除し通常の処理モードとす
る。
なければ、消費者プロセスは終了までずっと局所メモリ
182上の共有変数値を参照することとなる。図20に
おいて○印204で示したのは、局所メモリ上の共有変
数を参照する時点である。しかし、共有変数に対し新た
な値の書き換えが発生した時、書き換えを行なったプロ
セス(生産者プロセス)は、通信203を行なう。通信
203はモードリセットの制御トークンを受信側に転送
する。モードリセットの制御トークンを受信した消費者
プロセスは、遅延モードを解除し通常の処理モードとす
る。
【0136】従ってこの後更に共有変数の参照があれ
ば、消費者プロセスは通信201によって、共有変数値
を生産者プロセスに問い合わせ、その応答を得る。以上
が第3の実施例の動作である。
ば、消費者プロセスは通信201によって、共有変数値
を生産者プロセスに問い合わせ、その応答を得る。以上
が第3の実施例の動作である。
【0137】この実施例でも、仮に遠隔メモリア操作が
発生しても、通信の発生度数は、時間間隔が疎であるア
クセスに制限される。言い換えると、「参照」か「書き
換え」の内、発生時間間隔が、より疎である処理に合わ
せた度数で通信が発生する。この特徴によって、図2に
示す木構造のマルチプロセッサ処理系、図18に示す処
理系に限らず、シストリックアレイ型、スター型など別
のトポロジによるマルチプロセッサ処理系を構築する場
合も、遠隔メモリ操作の度数を、最小に抑えることが可
能となる。
発生しても、通信の発生度数は、時間間隔が疎であるア
クセスに制限される。言い換えると、「参照」か「書き
換え」の内、発生時間間隔が、より疎である処理に合わ
せた度数で通信が発生する。この特徴によって、図2に
示す木構造のマルチプロセッサ処理系、図18に示す処
理系に限らず、シストリックアレイ型、スター型など別
のトポロジによるマルチプロセッサ処理系を構築する場
合も、遠隔メモリ操作の度数を、最小に抑えることが可
能となる。
【0138】以上の3つの実施例を通し、本発明がプロ
セッサ結合状態によらず、また通信手順によらず実現で
きることを示した。
セッサ結合状態によらず、また通信手順によらず実現で
きることを示した。
【0139】
【発明の効果】以上の実施例から明らかな様に、本発明
のデータ更新処理によれば、並列して実行される処理単
位間での共有変数は、参照時にはプロセッサの局所メモ
リに配置された共有変数の複写が参照されるため、プロ
セッサユニット間の不要な通信は排除される。加えて共
有変数に対する書き換え処理では、書き換え時間間隔が
参照時間間隔に対して密となった時、共有変数の複写を
保持するプロセッサの局所メモリ内容の変更処理を、こ
のプロセッサ上で実行されるプログラム処理単位が、実
際に該共有変数を参照する時点まで遅延して処理するた
めに、書き換えに伴う通信も必要最小限度の度数にまで
制限される。これらの結果、遠隔メモリ操作は参照ある
いは書き換えの内、より疎である時間間隔で発生するこ
とになり、並列実行される複数の処理単位は共有変数の
機構を通信によって実現しつつも、実際の通信によるプ
ロセッサ時間資源の消費は最低に抑える事が可能とな
る。したがって、並列処理システムとしての処理速度を
通信時間=0の理想的な状態に極めて近づけた状態にす
ることができる。
のデータ更新処理によれば、並列して実行される処理単
位間での共有変数は、参照時にはプロセッサの局所メモ
リに配置された共有変数の複写が参照されるため、プロ
セッサユニット間の不要な通信は排除される。加えて共
有変数に対する書き換え処理では、書き換え時間間隔が
参照時間間隔に対して密となった時、共有変数の複写を
保持するプロセッサの局所メモリ内容の変更処理を、こ
のプロセッサ上で実行されるプログラム処理単位が、実
際に該共有変数を参照する時点まで遅延して処理するた
めに、書き換えに伴う通信も必要最小限度の度数にまで
制限される。これらの結果、遠隔メモリ操作は参照ある
いは書き換えの内、より疎である時間間隔で発生するこ
とになり、並列実行される複数の処理単位は共有変数の
機構を通信によって実現しつつも、実際の通信によるプ
ロセッサ時間資源の消費は最低に抑える事が可能とな
る。したがって、並列処理システムとしての処理速度を
通信時間=0の理想的な状態に極めて近づけた状態にす
ることができる。
【図1】本発明の一実施例の構成図。
【図2】図1構成図の全体を表すマルチプロセッサ処理
装置の構成図。
装置の構成図。
【図3】遠隔メモリ操作が、処理上問題となる場合の説
明図。
明図。
【図4】本実施例での遠隔メモリ操作の時間遷移の説明
図。
図。
【図5】遠隔メモリ操作の処理手順の流れ図。
【図6】遠隔メモリ操作時の受信側プロセッサの状態遷
移図。
移図。
【図7】本実施例の処理対象とする並列記述の一例の説
明図。
明図。
【図8】並列処理言語コンパイラの処理手順の一部を示
す流れ図。
す流れ図。
【図9】並列処理言語コンパイラの処理手順の一部を示
す流れ図。
す流れ図。
【図10】並列処理言語コンパイラの処理手順の一部を
示す流れ図。
示す流れ図。
【図11】並列処理言語コンパイラの処理手順の一部を
示す流れ図。
示す流れ図。
【図12】並列処理言語コンパイラの処理手順の一部を
示す流れ図。
示す流れ図。
【図13】並列処理言語コンパイラの処理手順の一部を
示す流れ図。
示す流れ図。
【図14】遠隔メモリ操作の通信に使用するパケットの
説明図。
説明図。
【図15】実行時のメモリ使用状態の説明図。
【図16】並列実行時のスタック領域消費の説明図。
【図17】第2の実施例の動作状態の遷移図。
【図18】第3の実施例の動作環境の構成図。
【図19】第3の実施例が通信に使用するデータ構造の
説明図。
説明図。
【図20】第3の実施例の動作状態の時間遷移図。
1…ホストプロセッサ 2…プロセッサエレメント 3…通信経路 4…マイクロプロセッサユニット(MPU) 5…局所メモリ 6…通信装置 7…割り込み回路 8…ΔT測定回路 9…遅延応答フラグ 10…共有変数(または複写された共有変数) 11…ユーザープログラムのソースコード 12…コンパイラ 13…オブジェクトコード 14…ブロック管理表 15…共有変数アクセス表 16…ブロック管理表 17…共有変数アクセス表 124…ブロック番号 125…プロセッサエレメント番号 126…共有変数アクセス表へのポインタ 128…ブロック開始番地 141…パケットのデータ列 142…パケットの識別子 143…パケットの終了符号 145…スタック初期化コード 146…レジスタ初期化コード 147…オブジェクトコード 151…オブジェクトコード領域 152…スタックメモリ領域 153…プロセッサレジスタ 190…遅延指定フラグ 301…消費者プロセスの処理の時間遷移 302…プログラム中で発生する共有変数参照の位置 303…生産者プロセスの処理の時間遷移 304…プログラム中で発生する共有変数書き換えの位
置 401…共有変数書き換えの制御トークンの転送 501…送信側プロセッサ処理 502…受信側プロセッサ処理 601…オブジェクトコードの実行状態
置 401…共有変数書き換えの制御トークンの転送 501…送信側プロセッサ処理 502…受信側プロセッサ処理 601…オブジェクトコードの実行状態
Claims (4)
- 【請求項1】 複数のプロセッサユニットが、それぞれ
相互にデータの授受を行なう通信経路によって結合され
たマルチプロセッサ処理装置により、複数のプログラム
実行単位が並列して実行される時、複数のプログラム単
位間の共有メモリ資源(共有変数)に対し前記通信経路
上の通信を用いた、いわゆる遠隔メモリ操作によって参
照あるいは書き換えを行なう構成のシステムにおいて、
(a) ある処理単位を実行時にプロセッサに配置する際、
共有変数をこの処理単位が実行されるプロセッサの局所
メモリ領域に複写する手段と、(b)共有変数参照の時間
間隔と書き換えの時間間隔を計測する手段と、(c) 共有
変数書き換えの遠隔メモリ操作に際し、共有変数が宣言
された処理単位が実行されるプロセッサの局所メモリに
配置された共有変数(以下、共有変数の実体と呼ぶ)の
値を更新すると共に、各プロセッサの局所メモリに配置
された共有変数(以下、共有変数の複写と呼ぶ)の値を
更新する手段を有し、(d) 該共有変数に対し、書き換え
時間間隔が参照時間間隔に対し密となった場合は、共有
変数の複写を保持するプロセッサの局所メモリ内容の変
更処理を、該プロセッサ上で実行されるプログラム処理
単位が実際に該共有変数を参照する時点まで遅延して処
理し、 参照時間間隔が書き換え時間間隔に対し密となった場合
は、共有変数の複写を保持するプロセッサの局所メモリ
内容の変更処理を、いずれかのプロセッサ上で実行され
るプログラム処理単位が実際に該共有変数の値を書き換
える時点まで遅延して処理することを特徴とする共有デ
ータ更新装置。 - 【請求項2】 請求項1の構成の装置の内、共有変数書
き換えの時間間隔が予め系に定めた定数より密であると
判断された場合は、遠隔メモリ操作による共有変数書き
換えを停止し、各プロセッサユニットの局所メモリに配
置された共有変数、またはこの複製に対しての参照を行
なう状態にプログラム処理状態を遷移させる手段と、 この遷移状態においては、共有変数の複写の書き換えを
行なう通信(遠隔メモリ操作)を、共有変数が宣言され
た処理単位の実行されるプロセッサユニット以外のプロ
セッサユニットにおいて共有変数参照が行なわれる時点
まで遅延する手段と、 上記で遅延した遠隔メモリ操作が完了した場合、再び遠
隔メモリ操作を許す通常処理状態に遷移させる手段と、
によって構成される事を特徴とする共有データ更新装
置。 - 【請求項3】 請求項1の構成の装置の内、共有変数が
宣言された処理単位の実行されるプロセッサユニット以
外のプロセッサユニットにおいて共有変数参照が行なわ
れる以前に、共有変数書き換えの通信が1回以上発生し
た時、遠隔メモリ操作による共有変数書き換えを停止
し、各プロセッサユニットの局所メモリに配置された共
有変数またはこの複製に対しての参照をを行なう状態に
プログラム処理状態を遷移させる手段と、 この遷移状態においては、共有変数の複写の書き換えを
行なう通信(遠隔メモリ操作)を、共有変数が宣言され
た処理単位の実行されるプロセッサユニット以外のプロ
セッサユニットにおいて共有変数参照が行なわれる時点
まで遅延する手段と、 上記で遅延した遠隔メモリ操作が完了した場合、再び遠
隔メモリ操作を許す通常処理状態に遷移させる手段と、
によって構成される事を特徴とする共有データ更新装
置。 - 【請求項4】 請求項1の構成の装置の内、共有変数の
複写を保持するプロセッサユニットが、共有変数の実体
を保持するプロセッサユニットに対し遠隔メモリ参照の
通信を行ない、共有変数参照する構成であり、 該遠隔メモリ参照が、共有変数書き換え時点以前に発生
した場合、共有変数の実体を保持するプロセッサユニッ
トが共有変数値並びに、遅延状態への状態遷移の指示を
応答する手段と、 遅延状態への状態遷移の指示をうけたプロセッサユニッ
トにおいて、遅延状態へ遷移を生じさせる手段と、 上記遷移状態のプロセッサユニットにおいて、局所メモ
リに配置された共有変数の複写を参照する手段と、 共有変数書き換えを行なうプロセッサユニットが、書き
換え発生時点で、前記遅延状態解除の通信を発生する手
段と、によって構成される事を特徴とする共有データ更
新装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP30008492A JP3261766B2 (ja) | 1992-11-10 | 1992-11-10 | マルチプロセッサシステム、共有変数更新装置、プロセッサユニット及び共有変数更新方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP30008492A JP3261766B2 (ja) | 1992-11-10 | 1992-11-10 | マルチプロセッサシステム、共有変数更新装置、プロセッサユニット及び共有変数更新方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH06149751A true JPH06149751A (ja) | 1994-05-31 |
JP3261766B2 JP3261766B2 (ja) | 2002-03-04 |
Family
ID=17880516
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP30008492A Expired - Fee Related JP3261766B2 (ja) | 1992-11-10 | 1992-11-10 | マルチプロセッサシステム、共有変数更新装置、プロセッサユニット及び共有変数更新方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP3261766B2 (ja) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO1996033034A1 (de) * | 1995-04-18 | 1996-10-24 | Voest-Alpine Industrieanlagenbau Gmbh | Stranggiesskokille |
JP2008262340A (ja) * | 2007-04-11 | 2008-10-30 | Denso Corp | デュアルコア向け自動コード生成装置 |
JP2012108582A (ja) * | 2010-11-15 | 2012-06-07 | Denso Corp | 情報処理装置 |
JP2013105217A (ja) * | 2011-11-10 | 2013-05-30 | Fujitsu Ltd | マルチコアプロセッサシステム、レジスタ利用方法、およびレジスタ利用プログラム |
US8849048B2 (en) | 2010-11-12 | 2014-09-30 | Samsung Electronics Co., Ltd. | Apparatus for decoding image data based on availability of reference data and method thereof |
-
1992
- 1992-11-10 JP JP30008492A patent/JP3261766B2/ja not_active Expired - Fee Related
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO1996033034A1 (de) * | 1995-04-18 | 1996-10-24 | Voest-Alpine Industrieanlagenbau Gmbh | Stranggiesskokille |
JP2008262340A (ja) * | 2007-04-11 | 2008-10-30 | Denso Corp | デュアルコア向け自動コード生成装置 |
US8849048B2 (en) | 2010-11-12 | 2014-09-30 | Samsung Electronics Co., Ltd. | Apparatus for decoding image data based on availability of reference data and method thereof |
JP2012108582A (ja) * | 2010-11-15 | 2012-06-07 | Denso Corp | 情報処理装置 |
JP2013105217A (ja) * | 2011-11-10 | 2013-05-30 | Fujitsu Ltd | マルチコアプロセッサシステム、レジスタ利用方法、およびレジスタ利用プログラム |
Also Published As
Publication number | Publication date |
---|---|
JP3261766B2 (ja) | 2002-03-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4923240B2 (ja) | プログラム処理装置、並列処理プログラム、プログラム処理方法、並列処理コンパイラ、並列処理コンパイラを格納した記録媒体およびマルチプロセッサシステム | |
Nikhil | Executing a program on the MIT tagged-token dataflow architecture | |
Bal et al. | Object distribution in Orca using compile-time and run-time techniques | |
US7039738B2 (en) | Method and system for handling device driver interrupts | |
Rowe et al. | A local network based on the UNIX operating system | |
Arvind et al. | Executing a program on the MIT tagged-token dataflow architecture | |
Horwat | Concurrent Smalltalk on the message-driven processor | |
JP4168281B2 (ja) | 並列処理システム、インタコネクションネットワーク、ノード及びネットワーク制御プログラム | |
JPH06149751A (ja) | 共有データ更新装置 | |
Aiex et al. | Cooperative multi-thread parallel tabu search with an application to circuit partitioning | |
Center | MPI primer/developing with LAM | |
Maroun et al. | Compiler-directed constant execution time on flat memory systems | |
Lee et al. | A constant propagation algorithm for explicitly parallel programs | |
Gehani et al. | Implementing concurrent C | |
Arbab | Specification of Manifold: Version 1.0 | |
JPH04291660A (ja) | プロセッサ間通信方法およびそのための並列プロセッサ | |
JP3241214B2 (ja) | 分散処理装置及びプロセス実行方法 | |
Bertolotti et al. | Embedded software development: the open-source approach | |
Royuela Alcázar | High-level compiler analysis for OpenMP | |
Ulmann | Multi-level rewriting for stream processing to RTL compilation | |
Nalumasu | Formal design and verification methods for shared memory systems | |
Canetti et al. | The parallel C (pC) programming language | |
Morandi et al. | A comprehensive operational semantics of the SCOOP programming model | |
Samman et al. | Architecture, on-chip network and programming interface concept for multiprocessor system-on-chip | |
Darte et al. | The alignment problem for perfect uniform loop nest: Np-completeness and heuristics |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
FPAY | Renewal fee payment (prs date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20081221 Year of fee payment: 7 |
|
FPAY | Renewal fee payment (prs date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20081221 Year of fee payment: 7 |
|
FPAY | Renewal fee payment (prs date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20091221 Year of fee payment: 8 |
|
FPAY | Renewal fee payment (prs date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20101221 Year of fee payment: 9 |
|
LAPS | Cancellation because of no payment of annual fees |