JPH0628324A - 並列計算機及びコンパイラ - Google Patents
並列計算機及びコンパイラInfo
- Publication number
- JPH0628324A JPH0628324A JP4178589A JP17858992A JPH0628324A JP H0628324 A JPH0628324 A JP H0628324A JP 4178589 A JP4178589 A JP 4178589A JP 17858992 A JP17858992 A JP 17858992A JP H0628324 A JPH0628324 A JP H0628324A
- Authority
- JP
- Japan
- Prior art keywords
- instruction
- processor
- data
- physical quantity
- arithmetic
- 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.)
- Pending
Links
Landscapes
- Devices For Executing Special Programs (AREA)
- Advance Control (AREA)
- Complex Calculations (AREA)
Abstract
(57)【要約】
【構成】 基本ブロック内のデータ依存関係のある命令
毎に命令群を構成し、並列実行可能な命令群を対応づけ
る[A]。各命令群の最初の命令から最後の命令までの
総実行時間と、各命令群の最初の命令から他の命令群の
発行可能時間を算出する[B]。着目する命令群以降に
この命令群と並列実行可能な命令群の有無を判断する
[D]。有る場合は並列実行可能な命令群を繰り上げる
ことで総実行時間を短縮できる命令群の有無を判断する
[E]。有る場合は総実行時間を最も短縮できる命令群
を繰り上げる[F]。無い場合は全命令群の処理を行っ
たかを判断し、行った場合は終了し、未処理命令群が有
る場合は次の命令群を処理する[G〜H]。 【効果】 命令によって実行時間の異なる場合でも、実
行時間が最も短い命令列にコンパイルできる。
毎に命令群を構成し、並列実行可能な命令群を対応づけ
る[A]。各命令群の最初の命令から最後の命令までの
総実行時間と、各命令群の最初の命令から他の命令群の
発行可能時間を算出する[B]。着目する命令群以降に
この命令群と並列実行可能な命令群の有無を判断する
[D]。有る場合は並列実行可能な命令群を繰り上げる
ことで総実行時間を短縮できる命令群の有無を判断する
[E]。有る場合は総実行時間を最も短縮できる命令群
を繰り上げる[F]。無い場合は全命令群の処理を行っ
たかを判断し、行った場合は終了し、未処理命令群が有
る場合は次の命令群を処理する[G〜H]。 【効果】 命令によって実行時間の異なる場合でも、実
行時間が最も短い命令列にコンパイルできる。
Description
【0001】
【産業上の利用分野】この発明は、命令をパイプライン
で処理する計算機で使用される目的プログラムを生成す
るコンパイラ、物理現象のシミュレーションを行なう際
に現れる連立一次方程式を解く並列計算機、及び複数の
演算要素プロセッサを持ち、行列の乗算を少ないメモリ
で行う並列計算機に関する。
で処理する計算機で使用される目的プログラムを生成す
るコンパイラ、物理現象のシミュレーションを行なう際
に現れる連立一次方程式を解く並列計算機、及び複数の
演算要素プロセッサを持ち、行列の乗算を少ないメモリ
で行う並列計算機に関する。
【0002】
【従来の技術】従来より、並列計算機などの計算機に用
いられているコンパイラには、ターゲットアーキテクチ
ャのパイプラインなどの特性を考慮して、命令列ができ
るだけ短時間で実行されるように配置する“命令スケジ
ューリング”と呼ばれる最適化方法がある。図26〜3
0を参照して、以後の説明で用いる用語と、従来の命令
スケジューリング方法を簡単に説明する。
いられているコンパイラには、ターゲットアーキテクチ
ャのパイプラインなどの特性を考慮して、命令列ができ
るだけ短時間で実行されるように配置する“命令スケジ
ューリング”と呼ばれる最適化方法がある。図26〜3
0を参照して、以後の説明で用いる用語と、従来の命令
スケジューリング方法を簡単に説明する。
【0003】まず初めに、用語の定義と説明をする。
【0004】パイプライン処理:機械命令の読み出しか
ら実行完了までの過程を、いくつかのステージに分割
し、各ステージを複数の命令に対して並列実行すること
によって、全体の処理を高速化するハードウェア技術。
代表的なパイプラインと命令実行の様子を、図30
(a),(b),(c)に示す。図30(a)は4段パ
イプライン、(b)は5段パイプライン、(c)は6段
パイプラインを表している。
ら実行完了までの過程を、いくつかのステージに分割
し、各ステージを複数の命令に対して並列実行すること
によって、全体の処理を高速化するハードウェア技術。
代表的なパイプラインと命令実行の様子を、図30
(a),(b),(c)に示す。図30(a)は4段パ
イプライン、(b)は5段パイプライン、(c)は6段
パイプラインを表している。
【0005】基本ブロック:先頭の命令から最後の命令
までが1つづつ順番に実行される一連の命令の並び。す
なわち、ラベルの定義や分岐命令、コール命令を含まな
い命令列。
までが1つづつ順番に実行される一連の命令の並び。す
なわち、ラベルの定義や分岐命令、コール命令を含まな
い命令列。
【0006】資源:レジスタ、メモリ、プロセッサの状
態、キャリなどのこと。
態、キャリなどのこと。
【0007】データ依存関係:2つの命令で同一の資源
を、`定義´−`参照´、`参照´−`定義´、`定義
´−`定義´、のいずれかの関係で使用している場合、
その2つの命令はデータ依存関係を持つという。ここで
いう`定義´とは、値を設定する処理であり、`参照´
とは演算で用いる処理である。
を、`定義´−`参照´、`参照´−`定義´、`定義
´−`定義´、のいずれかの関係で使用している場合、
その2つの命令はデータ依存関係を持つという。ここで
いう`定義´とは、値を設定する処理であり、`参照´
とは演算で用いる処理である。
【0008】インタロック パイプライン処理で、ある命令の結果が他の命令で使用
されるか、または特定の資源が2つの命令で同時に必要
となる場合には、最初の命令が完了するまで他方の命令
は待たなければならない。このような場合に、ハードウ
ェアが並列実行を一旦停止し、同期制御を行うような状
態。
されるか、または特定の資源が2つの命令で同時に必要
となる場合には、最初の命令が完了するまで他方の命令
は待たなければならない。このような場合に、ハードウ
ェアが並列実行を一旦停止し、同期制御を行うような状
態。
【0009】パイプライン処理系を持ち、並列に実行可
能な複数の演算器(加算器31、乗算器32、除算器3
3、及びレジスタ34)を持った図27(a)の計算機
において、図27(b)のプログラムが図27(c)の
命令列にコンパイルされたとする。
能な複数の演算器(加算器31、乗算器32、除算器3
3、及びレジスタ34)を持った図27(a)の計算機
において、図27(b)のプログラムが図27(c)の
命令列にコンパイルされたとする。
【0010】パイプラインは、図26(b)に示す5つ
のステージからなり、load(メモリからの読み込み)、
store (メモリへの書き込み)、add (加算)、mul
(乗算)の各命令は、共に命令フェッチからレジスタへ
の書き込みまでの各ステージを1クロックで、div (除
算)命令は命令実行ステージ(Eステージ)を6クロッ
ク、他のステージを1クロックで実行するとする。
のステージからなり、load(メモリからの読み込み)、
store (メモリへの書き込み)、add (加算)、mul
(乗算)の各命令は、共に命令フェッチからレジスタへ
の書き込みまでの各ステージを1クロックで、div (除
算)命令は命令実行ステージ(Eステージ)を6クロッ
ク、他のステージを1クロックで実行するとする。
【0011】パイプライン処理では、命令を1クロック
毎に発行し、パイプラインの各ステージを並列に行うこ
とができるため、命令に依存関係がなければ、除算命令
は10クロック、それ以外の命令は5クロック後に実行
を完了する。
毎に発行し、パイプラインの各ステージを並列に行うこ
とができるため、命令に依存関係がなければ、除算命令
は10クロック、それ以外の命令は5クロック後に実行
を完了する。
【0012】しかし、図27(c)の命令列では、命令
3が命令1と命令2の演算結果を使用するため、命令3
は命令フェッチ(Fステージ)の後、命令1、命令2の
実行結果がレジスタに書き込まれるまでレジスタの読み
込み(Rステージ)を開始できない。そのため、ここに
インタロックが発生する。図28(a)で斜線部分がイ
ンタロックの状態を示している。
3が命令1と命令2の演算結果を使用するため、命令3
は命令フェッチ(Fステージ)の後、命令1、命令2の
実行結果がレジスタに書き込まれるまでレジスタの読み
込み(Rステージ)を開始できない。そのため、ここに
インタロックが発生する。図28(a)で斜線部分がイ
ンタロックの状態を示している。
【0013】同様に、命令5と命令3、命令4、命令6
と命令5、命令8と命令7、命令9と命令8にもデータ
依存関係があり、先に発行された命令の実行結果が出る
まで、詳しくはWステージが終了するまで、次の命令の
デコード(Rステージ)を開始できず、インタロックが
発生する。
と命令5、命令8と命令7、命令9と命令8にもデータ
依存関係があり、先に発行された命令の実行結果が出る
まで、詳しくはWステージが終了するまで、次の命令の
デコード(Rステージ)を開始できず、インタロックが
発生する。
【0014】図27(c)の命令列を実行すると図28
(a)のようになり、各命令間で起きているインタロッ
クによって、パイプライン演算部に空き状態が発生し、
全体の実行時間を長くする原因となっている。
(a)のようになり、各命令間で起きているインタロッ
クによって、パイプライン演算部に空き状態が発生し、
全体の実行時間を長くする原因となっている。
【0015】このような命令列に対してプログラムの意
味を変えないでインタロックの発生回数をできるだけ少
なくする、あるいはパイプライン演算部の空き状態をで
きるだけ少なくし、実行時間を短くするように命令を並
べ変える“命令スケジューリング”と呼ばれるコンパイ
ラの最適化手法がある。
味を変えないでインタロックの発生回数をできるだけ少
なくする、あるいはパイプライン演算部の空き状態をで
きるだけ少なくし、実行時間を短くするように命令を並
べ変える“命令スケジューリング”と呼ばれるコンパイ
ラの最適化手法がある。
【0016】従来用いられている代表的な命令スケジュ
ーリング方法の1例を、P.B.Gibbons abd S.S.Muchnic
k, “Efficient Instruction Scheduling for a Pipeli
ned Architecture ”,Proceedings of SIGPLAN Symposi
um on Compiler Construction,Palo Alto,CA,June 198
6,pp.11-16に従って、紹介する。
ーリング方法の1例を、P.B.Gibbons abd S.S.Muchnic
k, “Efficient Instruction Scheduling for a Pipeli
ned Architecture ”,Proceedings of SIGPLAN Symposi
um on Compiler Construction,Palo Alto,CA,June 198
6,pp.11-16に従って、紹介する。
【0017】(1) 基本ブロック内の命令に対して、
依存有向グラフを作成する。グラフは、基本ブロック内
の各命令をノードとし、資源の使用に関して依存関係が
ある2つの命令間を’→’で結んで構成する。’a→
b’ならば、「aはbより前に実行しなければならな
い」ことを示す。
依存有向グラフを作成する。グラフは、基本ブロック内
の各命令をノードとし、資源の使用に関して依存関係が
ある2つの命令間を’→’で結んで構成する。’a→
b’ならば、「aはbより前に実行しなければならな
い」ことを示す。
【0018】(2) 依存有向グラフの根ノード(上の
例では、a)を、スケジューリングの際の根ノードの候
補集合におく。
例では、a)を、スケジューリングの際の根ノードの候
補集合におく。
【0019】(3) 候補集合が空になるまで、以下を
繰り返す。
繰り返す。
【0020】[3−1] 候補集合の中から最適なノー
ドを、次の規則に従って選択する。
ドを、次の規則に従って選択する。
【0021】・最後にスケジュールされた命令と依存関
係のない命令を選ぶ。
係のない命令を選ぶ。
【0022】・依存グラフ内の命令のいずれかと依存関
係のある命令を選ぶ。
係のある命令を選ぶ。
【0023】・サクセッサ数の多いものを選ぶ。
【0024】・依存グラフ内の残りの命令に対する最長
パスの長さが長いものを選ぶ。
パスの長さが長いものを選ぶ。
【0025】[3−2] 新しくスケジュールされた命
令を候補集合及び依存グラフから取り除き、依存グラフ
上で新しく根ノードとなった命令を候補集合に加える。
令を候補集合及び依存グラフから取り除き、依存グラフ
上で新しく根ノードとなった命令を候補集合に加える。
【0026】ここでサクセッサ数とは、着目する命令
と’→’で結ばれているノードの数を表し、パス長と
は、着目する命令以降のサクセッサを実行し終わるまで
にかかる実行時間のことを表している。例えば、図28
(b)の依存有向グラフで、命令1のサクセッサ数は
3、命令4のサクセッサ数は2、命令7のパス長は命令
7、命令8、命令9の実行時間を加算した20クロッ
ク、命令5のパス長は10クロックである。これは、除
算命令を10クロック、それ以外を5クロックとしてい
るためである。
と’→’で結ばれているノードの数を表し、パス長と
は、着目する命令以降のサクセッサを実行し終わるまで
にかかる実行時間のことを表している。例えば、図28
(b)の依存有向グラフで、命令1のサクセッサ数は
3、命令4のサクセッサ数は2、命令7のパス長は命令
7、命令8、命令9の実行時間を加算した20クロッ
ク、命令5のパス長は10クロックである。これは、除
算命令を10クロック、それ以外を5クロックとしてい
るためである。
【0027】図27(c)の命令列は、ラベル定義や分
岐命令を含んでいないので、基本ブロックである。この
命令列に対して(1)の処理を行って得たのが図28
(b)の依存有向グラフである。この依存グラフをもと
に、上記(2),(3)の処理を行う。
岐命令を含んでいないので、基本ブロックである。この
命令列に対して(1)の処理を行って得たのが図28
(b)の依存有向グラフである。この依存グラフをもと
に、上記(2),(3)の処理を行う。
【0028】最初に根ノードの候補となるのは、パスが
20クロックで最長の命令1または命令2または命令7
であるが、命令1と命令2はサクセッサ数が3、命令7
は2であるので、命令1または命令2のいずれかが最初
に根ノードとなる。この場合、どちらの命令を先に根ノ
ードとしてもよく、一例として命令1を選択する。命令
1に対し、[3−1]の選択を行うと、パス長が最長の
命令2または命令7が候補になるが、サクセッサ数が最
大の命令2が選択される。
20クロックで最長の命令1または命令2または命令7
であるが、命令1と命令2はサクセッサ数が3、命令7
は2であるので、命令1または命令2のいずれかが最初
に根ノードとなる。この場合、どちらの命令を先に根ノ
ードとしてもよく、一例として命令1を選択する。命令
1に対し、[3−1]の選択を行うと、パス長が最長の
命令2または命令7が候補になるが、サクセッサ数が最
大の命令2が選択される。
【0029】命令2に対して同様の選択を行う。この場
合、サクセッサ数が2で最大の命令3、命令4、命令7
が候補になるが、パス長が20クロックで最長の命令7
が選択される。
合、サクセッサ数が2で最大の命令3、命令4、命令7
が候補になるが、パス長が20クロックで最長の命令7
が選択される。
【0030】同様にして命令7以降の命令に対して処理
を行うと、図29に示すパターンA、あるいはパターン
Bの命令列ができる。この他、命令2を最初の根ノード
とする場合など、命令の選び方によっていくつかのパタ
ーンができる。
を行うと、図29に示すパターンA、あるいはパターン
Bの命令列ができる。この他、命令2を最初の根ノード
とする場合など、命令の選び方によっていくつかのパタ
ーンができる。
【0031】パターンA,Bの命令列は、それぞれ図3
0(a),(b)のように実行され実行時間は共に20
クロックである。命令スケジューリング前の実行時間が
24クロック図28(a)であったのに対し、従来の命
令スケジューリングによって4クロック短縮されたこと
がわかる。
0(a),(b)のように実行され実行時間は共に20
クロックである。命令スケジューリング前の実行時間が
24クロック図28(a)であったのに対し、従来の命
令スケジューリングによって4クロック短縮されたこと
がわかる。
【0032】しかしながら、命令の並びとしては、図2
9で示したようにパターンCのような命令列も考えられ
る。パターンCの実行のようすを図30(c)に示す。
9で示したようにパターンCのような命令列も考えられ
る。パターンCの実行のようすを図30(c)に示す。
【0033】パターンA,パターンBの実行時間が20
クロックであるのに対し、パターンCの命令列の実行時
間は19クロックで、さらに実行時間が短縮されている
ことが分かる。そのため、パターンCは、最適な命令ス
ケジューリングであると言える。
クロックであるのに対し、パターンCの命令列の実行時
間は19クロックで、さらに実行時間が短縮されている
ことが分かる。そのため、パターンCは、最適な命令ス
ケジューリングであると言える。
【0034】ここで、図30の各図においてインタロッ
クの状態を斜線で表すと、命令1の次に命令2を発行し
ても、命令7を発行してもインタロックは発生していな
い。また、命令2、命令7ともに残りの命令のパス長は
20クロックで最長である。そのため、命令1の次に発
行する命令を決定するのは、命令2、命令7のうち、
[3−1]の処理によってサクセッサ数の多い方とな
り、命令2が先に選択されることになる。つまり、従来
の命令スケジューリング方法では、パターンCの命令列
が選ばれることはない。
クの状態を斜線で表すと、命令1の次に命令2を発行し
ても、命令7を発行してもインタロックは発生していな
い。また、命令2、命令7ともに残りの命令のパス長は
20クロックで最長である。そのため、命令1の次に発
行する命令を決定するのは、命令2、命令7のうち、
[3−1]の処理によってサクセッサ数の多い方とな
り、命令2が先に選択されることになる。つまり、従来
の命令スケジューリング方法では、パターンCの命令列
が選ばれることはない。
【0035】一方、このようなコンパイラを備えた並列
計算機では、物理現象を偏微分方程式に基づいてシミュ
レーションすることが盛んに行なわれている。
計算機では、物理現象を偏微分方程式に基づいてシミュ
レーションすることが盛んに行なわれている。
【0036】並列計算機で、半導体デバイスシミュレー
ションのように、物理現象を偏微分方程式に基づいてシ
ミュレーションを行なう際は、対象の領域を格子状に分
割し、格子点で偏微分方程式を離散化し、さらに必要な
らば線形化を行ない、連立一次方程式を解くことに帰着
させて解く。このときに、解くべき連立一次方程式の係
数行列は、特殊なスパース行列となる。
ションのように、物理現象を偏微分方程式に基づいてシ
ミュレーションを行なう際は、対象の領域を格子状に分
割し、格子点で偏微分方程式を離散化し、さらに必要な
らば線形化を行ない、連立一次方程式を解くことに帰着
させて解く。このときに、解くべき連立一次方程式の係
数行列は、特殊なスパース行列となる。
【0037】この連立一次方程式を解く解法として広く
用いられているのは、前処理付き共役勾配法と呼ばれる
反復解法である。この解法については、村田健郎他著、
「スーパーコンピュータ、科学技術計算への適用」(丸
善、1985)に記述されている。
用いられているのは、前処理付き共役勾配法と呼ばれる
反復解法である。この解法については、村田健郎他著、
「スーパーコンピュータ、科学技術計算への適用」(丸
善、1985)に記述されている。
【0038】前処理付き共役勾配法は、ベクトル化また
は並列化による高速化の観点から考えると、高速化のネ
ックになるのは前処理となる不完全LU分解、および近
似行列L,Uの逆行列を求める処理で、いわゆる前進後
退代入処理となり、逐次的な処理となる。
は並列化による高速化の観点から考えると、高速化のネ
ックになるのは前処理となる不完全LU分解、および近
似行列L,Uの逆行列を求める処理で、いわゆる前進後
退代入処理となり、逐次的な処理となる。
【0039】これらの処理を高速に行う方法として、格
子状に分割された物理領域のシミュレーションであらわ
れる行列の特殊性を生かしてベクトル化する方法があ
り、超平面法と呼ばれるものがある。これについて、以
下に説明する。
子状に分割された物理領域のシミュレーションであらわ
れる行列の特殊性を生かしてベクトル化する方法があ
り、超平面法と呼ばれるものがある。これについて、以
下に説明する。
【0040】例えば、図9に示す2次元格子についてシ
ミュレーションする場合には、図10に示すような形を
した下三角行列を係数行列にもつ連立一次方程式を解く
必要がある。図10において、(1)〜(16)は図9におけ
る格子点1〜16に相当し、黒丸は非零要素を示してい
る。この黒丸は、例えば格子点5の物理量は、格子点1
の物理量が求まると計算可能であることを意味してい
る。
ミュレーションする場合には、図10に示すような形を
した下三角行列を係数行列にもつ連立一次方程式を解く
必要がある。図10において、(1)〜(16)は図9におけ
る格子点1〜16に相当し、黒丸は非零要素を示してい
る。この黒丸は、例えば格子点5の物理量は、格子点1
の物理量が求まると計算可能であることを意味してい
る。
【0041】通常の方法では、格子点1から順に番号順
に解を求めるが、超平面法では、1、2、5、3、6、
9、4、7、10、13、・・・・のような順序で解を
求める。これは、図9に破線で示した格子点の集合を
(1) 〜(7) の順序で解を求めることに相当する。破線上
にある格子点の解の計算は依存関係がないためベクトル
化が可能となるが、従来はこの計算を1つのベクトルプ
ロセッサで行っていた。また近年、複数の演算要素プロ
セッサ(PE:Processing Element)を同時に動作さ
せ、高速に処理を行う並列計算機が盛んに開発されてい
る。そのような並列計算機は、例えば図31のような構
成になっている。
に解を求めるが、超平面法では、1、2、5、3、6、
9、4、7、10、13、・・・・のような順序で解を
求める。これは、図9に破線で示した格子点の集合を
(1) 〜(7) の順序で解を求めることに相当する。破線上
にある格子点の解の計算は依存関係がないためベクトル
化が可能となるが、従来はこの計算を1つのベクトルプ
ロセッサで行っていた。また近年、複数の演算要素プロ
セッサ(PE:Processing Element)を同時に動作さ
せ、高速に処理を行う並列計算機が盛んに開発されてい
る。そのような並列計算機は、例えば図31のような構
成になっている。
【0042】図31において、PE41は演算要素プロ
セッサである。PE41はアレイコントローラACU1
04からのマイクロコードにしたがって、演算を実行す
る。PE41は、ネットワーク103によってm×nの
2次元アレイ状に配置され、PEアレイを構成する。
セッサである。PE41はアレイコントローラACU1
04からのマイクロコードにしたがって、演算を実行す
る。PE41は、ネットワーク103によってm×nの
2次元アレイ状に配置され、PEアレイを構成する。
【0043】各々のPE41は、上下左右の互いに隣接
するPE41と接続されている。また、右端のPE41
は同じ行の左端のPE41と、上端のPE41は同じ列
の下端のPE41と、それぞれ接続されている。いわゆ
るトーラス状の2次元格子結合である。各PE41はデ
ータメモリ42を持ち、接続されたPE41とデータ通
信を行うことができる。これにより、他のPE41のデ
ータメモリ42に格納されたデータを演算に用いること
ができる。
するPE41と接続されている。また、右端のPE41
は同じ行の左端のPE41と、上端のPE41は同じ列
の下端のPE41と、それぞれ接続されている。いわゆ
るトーラス状の2次元格子結合である。各PE41はデ
ータメモリ42を持ち、接続されたPE41とデータ通
信を行うことができる。これにより、他のPE41のデ
ータメモリ42に格納されたデータを演算に用いること
ができる。
【0044】各PE41は、ACU44から送られるマ
イクロコードにしたがって、一斉に同じ処理を行う。い
わゆるSIMD(Single Instruction Multiple Data S
tream )形式の並列処理である。ACU44は、PE4
1の制御機能を付加した情報処理装置で、命令メモリ4
5に格納されている命令を解読し、解読した命令がPE
41向けの命令ならば、PE41向けにマイクロコード
を発生して全PE41に転送する。解読した命令が、A
CU44自身でのデータ処理に関するものならば、AC
U44自身で処理を行う。
イクロコードにしたがって、一斉に同じ処理を行う。い
わゆるSIMD(Single Instruction Multiple Data S
tream )形式の並列処理である。ACU44は、PE4
1の制御機能を付加した情報処理装置で、命令メモリ4
5に格納されている命令を解読し、解読した命令がPE
41向けの命令ならば、PE41向けにマイクロコード
を発生して全PE41に転送する。解読した命令が、A
CU44自身でのデータ処理に関するものならば、AC
U44自身で処理を行う。
【0045】ここでは、便宜上m=nと仮定し、n×n
の2次元状に配置されたPEアレイで、n×n行列の
積、C=A*Bを求める場合を考える。i行目j列目に
位置するPE41をPE(i,j)で表すものとする
(0≦i≦n−1,0≦j≦n−1)。
の2次元状に配置されたPEアレイで、n×n行列の
積、C=A*Bを求める場合を考える。i行目j列目に
位置するPE41をPE(i,j)で表すものとする
(0≦i≦n−1,0≦j≦n−1)。
【0046】各PE41は、初期データとして、行列の
1つの被演算要素を持つようにデータを配置する。すな
わち、PE(i,j)(0≦i≦n−1,0≦j≦n−
1)は、初期データa[i][j]、b[i][j]を持つ。4×4
行列の場合に初期データが配置された様子を図32に、
行列の積を図33に示す。
1つの被演算要素を持つようにデータを配置する。すな
わち、PE(i,j)(0≦i≦n−1,0≦j≦n−
1)は、初期データa[i][j]、b[i][j]を持つ。4×4
行列の場合に初期データが配置された様子を図32に、
行列の積を図33に示す。
【0047】PE(i,j)では、行列Cの要素c[i]
[j]の演算を受け持ち、全PE41で一斉に実行する。
PE(i,j)(0≦i≦n−1,0≦j≦n−1)で
行う演算は次の通りである。
[j]の演算を受け持ち、全PE41で一斉に実行する。
PE(i,j)(0≦i≦n−1,0≦j≦n−1)で
行う演算は次の通りである。
【0048】 c[i][j]=0; k=0 to n−1まで c[i][j]=c[i][j]+a[i][k]*b[k][j];を繰り 返す。 …(I) PE(i,j)はa[i][j]、b[i][j]以外のデータを持
っていないので、各PE(i,j)は、PEアレイの同
じ行にあるすべてのPE41からa[i][k](0≦k≦n
−1)を、同じ列にあるすべてのPE41からb[k][j]
(0≦k≦n−1)を転送される必要がある。
っていないので、各PE(i,j)は、PEアレイの同
じ行にあるすべてのPE41からa[i][k](0≦k≦n
−1)を、同じ列にあるすべてのPE41からb[k][j]
(0≦k≦n−1)を転送される必要がある。
【0049】従来の乗算式は、図35のフローチャート
のような手順で実行される。
のような手順で実行される。
【0050】(1) まず、行方向にデータを転送す
る。各PE41は、一斉に、右隣のPE41に、自分の
持つaを転送する(ステップ131,132)。すなわ
ち、PE(i,j)(0≦i≦n−1,0≦j≦n−
1)は、a[i][j]を右隣のPE41に転送する。そし
て、a[i][j-1]を左隣のPE41から受け取り、メモリ
42に格納する(ステップ133)。
る。各PE41は、一斉に、右隣のPE41に、自分の
持つaを転送する(ステップ131,132)。すなわ
ち、PE(i,j)(0≦i≦n−1,0≦j≦n−
1)は、a[i][j]を右隣のPE41に転送する。そし
て、a[i][j-1]を左隣のPE41から受け取り、メモリ
42に格納する(ステップ133)。
【0051】(2) 各PE(i,j)は、(1)で左
隣のPE(i,j−1)から受け取ったa[i][j-1]を、
一斉に右隣のPE41に転送する。これによって、PE
(i,j)(0≦i≦n−1,0≦j≦n−1)は、左
隣のPE41からa[i][j-2]を受け取ることになり、こ
れをメモリ42に格納する。この処理をn−1回繰り返
すことによって、PE(i,j)(0≦i≦n−1,0
≦j≦n−1)は、a[i][0]〜a[i][n-1]を受け取るこ
とができる(ステップ133〜135)。
隣のPE(i,j−1)から受け取ったa[i][j-1]を、
一斉に右隣のPE41に転送する。これによって、PE
(i,j)(0≦i≦n−1,0≦j≦n−1)は、左
隣のPE41からa[i][j-2]を受け取ることになり、こ
れをメモリ42に格納する。この処理をn−1回繰り返
すことによって、PE(i,j)(0≦i≦n−1,0
≦j≦n−1)は、a[i][0]〜a[i][n-1]を受け取るこ
とができる(ステップ133〜135)。
【0052】つまり、同じ行にあるn台のPE41のす
べてが、互いに他のn−1台のPE41からデータを転
送されたことになる。これをn対n放送と呼ぶことにす
る。これは、すべての行で、並列に実行できる(ステッ
プ133〜135)。
べてが、互いに他のn−1台のPE41からデータを転
送されたことになる。これをn対n放送と呼ぶことにす
る。これは、すべての行で、並列に実行できる(ステッ
プ133〜135)。
【0053】(3) 同様に列方向でデータ転送を行
う。すべてのPE(i,j)(0≦i≦n−1,0≦j
≦n−1)が、b[0][j]〜b[n-1][j]を受け取る。つま
り、列方向にn対n放送を行う(ステップ136〜14
0)。この時点での、各PE41の保持するデータの様
子を図35に、n=4の場合について示す。
う。すべてのPE(i,j)(0≦i≦n−1,0≦j
≦n−1)が、b[0][j]〜b[n-1][j]を受け取る。つま
り、列方向にn対n放送を行う(ステップ136〜14
0)。この時点での、各PE41の保持するデータの様
子を図35に、n=4の場合について示す。
【0054】(4) 演算に必要なデータはすべてそろ
ったので、各PE41で一斉に(I)式の計算を行う。
各PE41で結果が求まる(ステップ141〜14
5)。
ったので、各PE41で一斉に(I)式の計算を行う。
各PE41で結果が求まる(ステップ141〜14
5)。
【0055】2次元格子状に配置されたPEアレイで
は、行方向、あるいは列方向へのn対n放送を高速に行
うことができる。n台のPE41のうち1台から、他の
n−1台に同じデータを転送することを1対n放送と呼
ぶことにすると、1対n放送に要する時間は、1回の隣
接PE間通信時間を1サイクルとして、n−1サイクル
かかる。一方、1回のn対n放送に要する時間は、同じ
くn−1サイクル終了する。
は、行方向、あるいは列方向へのn対n放送を高速に行
うことができる。n台のPE41のうち1台から、他の
n−1台に同じデータを転送することを1対n放送と呼
ぶことにすると、1対n放送に要する時間は、1回の隣
接PE間通信時間を1サイクルとして、n−1サイクル
かかる。一方、1回のn対n放送に要する時間は、同じ
くn−1サイクル終了する。
【0056】したがって、2次元格子結合のPEアレイ
では、1対n放送よりも、n対n放送の方が効率よくデ
ータ転送できることになる。行列乗算全体で、データ転
送に要する時間は、2(n−1)サイクルである。
では、1対n放送よりも、n対n放送の方が効率よくデ
ータ転送できることになる。行列乗算全体で、データ転
送に要する時間は、2(n−1)サイクルである。
【0057】以上のn対n放送に基づく行列乗算方法で
は、データ転送が高速に行われる反面、各PE41で、
演算に必要な全データをあらかじめ保持する事になる。
行方向でn、列方向でn個のデータを受け取るため、図
35で示したように2n個のデータを格納できるメモリ
量が必要となる。すなわち、nが大きい場合に多大のメ
モリ量が要求されていた。
は、データ転送が高速に行われる反面、各PE41で、
演算に必要な全データをあらかじめ保持する事になる。
行方向でn、列方向でn個のデータを受け取るため、図
35で示したように2n個のデータを格納できるメモリ
量が必要となる。すなわち、nが大きい場合に多大のメ
モリ量が要求されていた。
【0058】
【発明が解決しようとする課題】従来の技術で説明した
ように、従来のコンパイラでは、命令によって実行クロ
ック数時間が異なる場合に、先に発行されたクロック数
の多い命令と依存関係のある命令の発行時間が遅れた
り、あるいは、ある命令と依存関係のあるクロック数の
多い命令が後から発行されることで、命令全体の実行時
間を長くしてしまうという問題があった。
ように、従来のコンパイラでは、命令によって実行クロ
ック数時間が異なる場合に、先に発行されたクロック数
の多い命令と依存関係のある命令の発行時間が遅れた
り、あるいは、ある命令と依存関係のあるクロック数の
多い命令が後から発行されることで、命令全体の実行時
間を長くしてしまうという問題があった。
【0059】これは、従来の方法では、個々の命令に対
する情報にもとづいてスケジューリングを行っているた
め、依存関係のある命令全体の実行時間を考慮していな
いためである。
する情報にもとづいてスケジューリングを行っているた
め、依存関係のある命令全体の実行時間を考慮していな
いためである。
【0060】一般に、依存関係のある命令間では、先に
発行された命令が完了するまで、次の命令はレジスタ読
み込み以降の処理を開始できないため、それ以前に発行
しても実行時間を短縮することはできないが、従来のコ
ンパイラでは、依存関係のある命令でも、次のノードを
選択する際の候補になる場合があり、選択に無駄があっ
たり、あるいはそのような命令が先に選ばれたために、
もっと有効な命令が発行できなくなるという問題もあっ
た。
発行された命令が完了するまで、次の命令はレジスタ読
み込み以降の処理を開始できないため、それ以前に発行
しても実行時間を短縮することはできないが、従来のコ
ンパイラでは、依存関係のある命令でも、次のノードを
選択する際の候補になる場合があり、選択に無駄があっ
たり、あるいはそのような命令が先に選ばれたために、
もっと有効な命令が発行できなくなるという問題もあっ
た。
【0061】また、従来のベクトル計算機では、超平面
法を用いてとしても、1つのプロセッサで連立一次方程
式を解いていたので、ベクトルパイプラインで得られる
並列度以上の高速化は原理的にできない。このため、3
次元領域のシミュレーションのように本質的により大き
い並列度があるのにそれを生かしきれないという問題が
あった。並列計算機上での解法としては、SOR法など
の並列度の高い方法があるが、数値的な安定性が良くな
い場合があるという問題もあった。
法を用いてとしても、1つのプロセッサで連立一次方程
式を解いていたので、ベクトルパイプラインで得られる
並列度以上の高速化は原理的にできない。このため、3
次元領域のシミュレーションのように本質的により大き
い並列度があるのにそれを生かしきれないという問題が
あった。並列計算機上での解法としては、SOR法など
の並列度の高い方法があるが、数値的な安定性が良くな
い場合があるという問題もあった。
【0062】さらに、従来の並列計算機では、行列の乗
算を行うための、各PEでの必要なデータを、演算開始
前にすべて保持していたため、各PEのメモリ量が少な
い場合には、演算が実行できないという欠点があった。
算を行うための、各PEでの必要なデータを、演算開始
前にすべて保持していたため、各PEのメモリ量が少な
い場合には、演算が実行できないという欠点があった。
【0063】本発明はこのような問題点を解決するもの
であり、第1の発明の目的は、命令によって実行クロッ
ク数が異なるような場合にも、総実行時間が最も短くな
るような命令列を選択すること、パイプラインの空き状
態をできるだけ小さくし、また依存関係のある命令に対
して、次命令を選択する際の効率を向上させる命令スケ
ジューリングを行うことができるコンパイラを提供する
ことにある。
であり、第1の発明の目的は、命令によって実行クロッ
ク数が異なるような場合にも、総実行時間が最も短くな
るような命令列を選択すること、パイプラインの空き状
態をできるだけ小さくし、また依存関係のある命令に対
して、次命令を選択する際の効率を向上させる命令スケ
ジューリングを行うことができるコンパイラを提供する
ことにある。
【0064】また、第2の発明の目的は、複数個のプロ
セッサを1次元状あるいは2次元状に配置することによ
り、超平面法を並列に計算し、連立一次方程式を高速に
解くことができる並列計算機を提供することにある。
セッサを1次元状あるいは2次元状に配置することによ
り、超平面法を並列に計算し、連立一次方程式を高速に
解くことができる並列計算機を提供することにある。
【0065】さらに、第3の発明は、各PEあたりのメ
モリ量が少ない場合でも、行列の乗算を実行することが
できる並列計算機を提供することにある。
モリ量が少ない場合でも、行列の乗算を実行することが
できる並列計算機を提供することにある。
【0066】
【課題を解決するための手段】上記目的を達成させるた
め、第1の発明は、並列に実行可能な複数の演算器を備
え、命令をパイプラインで処理する計算機で使用される
目的プログラムを生成するコンパイラであって、基本ブ
ロック内の命令列に対し、依存関係のある命令毎に命令
群を構成し、命令群を単位として、パイプラインの空き
状態が小さくなるように命令群の実行順序の入れ換え、
繰り上げ、あるいは繰り下げを行う命令スケジューリン
グ部を備えている。
め、第1の発明は、並列に実行可能な複数の演算器を備
え、命令をパイプラインで処理する計算機で使用される
目的プログラムを生成するコンパイラであって、基本ブ
ロック内の命令列に対し、依存関係のある命令毎に命令
群を構成し、命令群を単位として、パイプラインの空き
状態が小さくなるように命令群の実行順序の入れ換え、
繰り上げ、あるいは繰り下げを行う命令スケジューリン
グ部を備えている。
【0067】また、第2の発明は、シミュレーションの
対象となる物理領域が2次元の場合には、図6のように
複数のプロセッサが1次元状に配置された並列計算機を
用いる。各プロセッサは、格子点の物理データを計算す
る計算手段と、計算したデータを記憶する記憶手段と、
記憶しているデータを右に隣接するプロセッサへ送出す
る送信手段と、左に隣接するプロセッサから送出されて
きたデータを受信する受信手段とを有している。
対象となる物理領域が2次元の場合には、図6のように
複数のプロセッサが1次元状に配置された並列計算機を
用いる。各プロセッサは、格子点の物理データを計算す
る計算手段と、計算したデータを記憶する記憶手段と、
記憶しているデータを右に隣接するプロセッサへ送出す
る送信手段と、左に隣接するプロセッサから送出されて
きたデータを受信する受信手段とを有している。
【0068】あるいは第2の発明は、シミュレーション
の対象となる物理領域が3次元の場合には、図7のよう
に複数のプロセッサが2次元状に配置された並列計算機
を用いる。各プロセッサは、格子点のデータを計算する
計算手段と、計算したデータを記憶する記憶手段と、記
憶しているデータを右に隣接するプロセッサおよび下に
隣接するプロセッサへ送出する送信手段と、左に隣接す
るプロセッサおよび上に隣接するプロセッサから送出さ
れてきたデータを受信する受信手段とを有している。
の対象となる物理領域が3次元の場合には、図7のよう
に複数のプロセッサが2次元状に配置された並列計算機
を用いる。各プロセッサは、格子点のデータを計算する
計算手段と、計算したデータを記憶する記憶手段と、記
憶しているデータを右に隣接するプロセッサおよび下に
隣接するプロセッサへ送出する送信手段と、左に隣接す
るプロセッサおよび上に隣接するプロセッサから送出さ
れてきたデータを受信する受信手段とを有している。
【0069】さらに、第3の発明は、2次元状に配置さ
れた複数の演算要素プロセッサから構成される並列プロ
セッサで、2つの行列の積を求める並列計算機であっ
て、第1の行列データと第2の行列データを、該2つの
行列で同じ割り付けを行い、該行列の行方向のデータを
持つ演算プロセッサ間で、1つの演算プロセッサから他
の複数の演算プロセッサへデータを放送する手段と、該
行列の列方向のデータを持つ演算プロセッサ間で、1つ
の演算プロセッサから他の複数の演算プロセッサへデー
タを放送する手段と、繰り返し回数を制御する手段と、
該データ放送と演算プロセッサでの演算を制御する制御
手段とを備えている。
れた複数の演算要素プロセッサから構成される並列プロ
セッサで、2つの行列の積を求める並列計算機であっ
て、第1の行列データと第2の行列データを、該2つの
行列で同じ割り付けを行い、該行列の行方向のデータを
持つ演算プロセッサ間で、1つの演算プロセッサから他
の複数の演算プロセッサへデータを放送する手段と、該
行列の列方向のデータを持つ演算プロセッサ間で、1つ
の演算プロセッサから他の複数の演算プロセッサへデー
タを放送する手段と、繰り返し回数を制御する手段と、
該データ放送と演算プロセッサでの演算を制御する制御
手段とを備えている。
【0070】
【作用】上記手段により、第1の発明では、依存関係の
ある命令同士で命令群を構成し、スケジューリングを命
令群単位で行うことにより、命令によって実行時間が異
なる場合でも最適なスケジューリングを行うことができ
る。
ある命令同士で命令群を構成し、スケジューリングを命
令群単位で行うことにより、命令によって実行時間が異
なる場合でも最適なスケジューリングを行うことができ
る。
【0071】また、第1の発明によれば、上記の通り、
命令群を単位としてスケジューリングを行うため、ある
命令と依存関係のある命令の発行時間を固定することが
でき、それによって、依存関係のある命令が効果のない
段階で次の命令の候補に選ばれるという無駄がなくな
り、次命令を選択する際の効率を向上させている。
命令群を単位としてスケジューリングを行うため、ある
命令と依存関係のある命令の発行時間を固定することが
でき、それによって、依存関係のある命令が効果のない
段階で次の命令の候補に選ばれるという無駄がなくな
り、次命令を選択する際の効率を向上させている。
【0072】さらに、第1の発明では、並列に実行可能
な命令群を括弧などによって対応づけることで、発行順
序の入れ換えや発行時間の繰り上げの対象となる命令群
を限定するので、命令の選び方に冗長性をなくすことが
できる。
な命令群を括弧などによって対応づけることで、発行順
序の入れ換えや発行時間の繰り上げの対象となる命令群
を限定するので、命令の選び方に冗長性をなくすことが
できる。
【0073】一方、第2の発明は、シミュレーション対
象が2次元の場合は、y座標が同一のものを1つのプロ
セッサの記憶手段に保持させる。すなわち格子の1行を
1つのプロセッサに割り当てる。
象が2次元の場合は、y座標が同一のものを1つのプロ
セッサの記憶手段に保持させる。すなわち格子の1行を
1つのプロセッサに割り当てる。
【0074】求解の処理手順は、まずプロセッサの受信
手段が左隣のプロセッサからデータを受け取り、受けと
ったデータと自プロセッサで前に計算した変数値、行列
要素、定数ベクトル要素を用いて格子点の変数値を計算
手段で計算する。次に計算結果を記憶手段で記憶すると
共に、右隣のプロセッサに送信手段から送出する。この
処理をすべてのプロセッサで、すべての変数が求められ
るまで繰り返す。
手段が左隣のプロセッサからデータを受け取り、受けと
ったデータと自プロセッサで前に計算した変数値、行列
要素、定数ベクトル要素を用いて格子点の変数値を計算
手段で計算する。次に計算結果を記憶手段で記憶すると
共に、右隣のプロセッサに送信手段から送出する。この
処理をすべてのプロセッサで、すべての変数が求められ
るまで繰り返す。
【0075】ただし、すべてのプロセッサが同時にこの
処理を開始するわけではなく、計算するのに必要なデー
タを左隣のプロセッサから受け取るまでは、待つか、こ
の求解処理とは無関係な処理を行なう。
処理を開始するわけではなく、計算するのに必要なデー
タを左隣のプロセッサから受け取るまでは、待つか、こ
の求解処理とは無関係な処理を行なう。
【0076】ここで、計算手段で下三角行列を係数にも
つ連立一次方程式 Lx=b を解くことを考える。ここで、Lは下三角行列、xは変
数ベクトル、bは定数ベクトルである。
つ連立一次方程式 Lx=b を解くことを考える。ここで、Lは下三角行列、xは変
数ベクトル、bは定数ベクトルである。
【0077】このとき、例えば、不完全LU分解(1,
1)を用いた場合には、 x[i]=(b[i] - L[i,i-1] * x[i-1] - L[i,i-m] * x[i-
m])/L[i,i] の式により、変数値を求める。不完全LU分解(1,
2)を用いた場合には、 x[i]=(b[i] - L[i,i-1] * x[i-1] - L[i,i-m] * x[i-
m]- L[i,i-m+1] * x[i-m+1])/L[i,i] の式により、変数値を求める。
1)を用いた場合には、 x[i]=(b[i] - L[i,i-1] * x[i-1] - L[i,i-m] * x[i-
m])/L[i,i] の式により、変数値を求める。不完全LU分解(1,
2)を用いた場合には、 x[i]=(b[i] - L[i,i-1] * x[i-1] - L[i,i-m] * x[i-
m]- L[i,i-m+1] * x[i-m+1])/L[i,i] の式により、変数値を求める。
【0078】あるいは、第2の発明は、シミュレーショ
ン対象が3次元の場合には、受信手段では、左隣のプロ
セッサおよび上隣のプロセッサが送出するデータを受け
取り、保持する。計算手段は、2次元の場合と同様に変
数値を計算し、この結果を記憶手段に記憶する。送信手
段は右隣のプロセッサと下隣のプロセッサに、計算手段
で計算した変数値を送出する。
ン対象が3次元の場合には、受信手段では、左隣のプロ
セッサおよび上隣のプロセッサが送出するデータを受け
取り、保持する。計算手段は、2次元の場合と同様に変
数値を計算し、この結果を記憶手段に記憶する。送信手
段は右隣のプロセッサと下隣のプロセッサに、計算手段
で計算した変数値を送出する。
【0079】さらに、第3の発明は、前記第1の行列
の、繰り返し回数で指定される1列のデータを保持する
各演算プロセッサが、各列データと同じ行に属するデー
タを保持する複数の演算プロセッサに対して各列データ
を同時並列に転送する。同様に、前記第2の行列の、繰
り返し回数で指定される1行のデータを保持する各演算
プロセッサが、各行データと同じ列に属するデータを保
持する複数の演算プロセッサに対して各行データを同時
並列に転送する。
の、繰り返し回数で指定される1列のデータを保持する
各演算プロセッサが、各列データと同じ行に属するデー
タを保持する複数の演算プロセッサに対して各列データ
を同時並列に転送する。同様に、前記第2の行列の、繰
り返し回数で指定される1行のデータを保持する各演算
プロセッサが、各行データと同じ列に属するデータを保
持する複数の演算プロセッサに対して各行データを同時
並列に転送する。
【0080】各演算プロセッサで、転送された前記第1
の行列のデータと、転送された前記第2のデータの2つ
の数の積を求め、この積を繰り返し毎に累算する。この
ような操作を、行列の大きさから得られる所定回数だけ
繰り返すことによって行列の積を求めている。
の行列のデータと、転送された前記第2のデータの2つ
の数の積を求め、この積を繰り返し毎に累算する。この
ような操作を、行列の大きさから得られる所定回数だけ
繰り返すことによって行列の積を求めている。
【0081】
【実施例】以下に、本発明の実施例を図面に基づいて説
明する。
明する。
【0082】第1の発明 まず、第1の発明について図1〜5を用いて説明する。
【0083】図1は、第1の発明のコンパイラに係わる
一実施例の構成を示すブロック図である。
一実施例の構成を示すブロック図である。
【0084】図1に示すコンパイラは、ソースプログラ
ム1を入力するソースプログラム入力部2と、入力され
たソースプログラム1の字句を解析する字句解析部3
と、ソースプログラム1の文法を解釈する構文解析部4
と、ソースプログラム1を中間言語プログラムに変換す
る中間コード生成部5と、第1の発明の中心となる命令
スケジューリング部6と他の最適化を行う最適化部7を
持った中間コード最適化部8と、中間コードを目的プロ
グラム11に変換するオブジェクトコード生成部9と、
目的プログラム11を出力して供給する目的プログラム
出力部10とから構成される。
ム1を入力するソースプログラム入力部2と、入力され
たソースプログラム1の字句を解析する字句解析部3
と、ソースプログラム1の文法を解釈する構文解析部4
と、ソースプログラム1を中間言語プログラムに変換す
る中間コード生成部5と、第1の発明の中心となる命令
スケジューリング部6と他の最適化を行う最適化部7を
持った中間コード最適化部8と、中間コードを目的プロ
グラム11に変換するオブジェクトコード生成部9と、
目的プログラム11を出力して供給する目的プログラム
出力部10とから構成される。
【0085】命令スケジューリング部6では、図2に示
すフローチャートに従って、中間コードの命令列のスケ
ジューリングを行う。
すフローチャートに従って、中間コードの命令列のスケ
ジューリングを行う。
【0086】以下に、図2のフローチャートの各ステッ
プについて説明する。
プについて説明する。
【0087】ステップA:中間コードで表現された基本
ブロック内の命令に対して、データ依存関係のある命令
毎にグループ(以下単に“命令群”と呼ぶ)を構成し、
並列に実行可能な命令群を対応づける。並列に実行可能
な命令群は、一例として括弧を用いて対応づけることが
できる。
ブロック内の命令に対して、データ依存関係のある命令
毎にグループ(以下単に“命令群”と呼ぶ)を構成し、
並列に実行可能な命令群を対応づける。並列に実行可能
な命令群は、一例として括弧を用いて対応づけることが
できる。
【0088】一命令だけで独立に演算可能な命令は、1
命令のみで命令群を構成する。
命令のみで命令群を構成する。
【0089】ステップB:各命令群に対し、最初に発行
される命令から最後に終了する命令までの総実行時間
と、各命令群の最初の命令が発行されてから、他の命令
群(他の命令群に属する命令)を発行することが可能な
時間が何クロック目であるかを算出する。
される命令から最後に終了する命令までの総実行時間
と、各命令群の最初の命令が発行されてから、他の命令
群(他の命令群に属する命令)を発行することが可能な
時間が何クロック目であるかを算出する。
【0090】ステップC:第1番目の命令群から着目
し、全命令群に対してステップD以下の処理を実行す
る。
し、全命令群に対してステップD以下の処理を実行す
る。
【0091】ステップD:着目する命令群と並列に実行
可能な(発行順序を入れ換える、あるいは発行時間を繰
り上げることのできる)命令群が、着目する命令群以降
の命令群の中にあるか判断する。判断は括弧の対応をも
とに行う。あればステップEへ、なければステップGへ
移行する。
可能な(発行順序を入れ換える、あるいは発行時間を繰
り上げることのできる)命令群が、着目する命令群以降
の命令群の中にあるか判断する。判断は括弧の対応をも
とに行う。あればステップEへ、なければステップGへ
移行する。
【0092】ステップE:着目する命令群に対し、ステ
ップDで得た命令群の発行時間を繰り上げることによっ
て、2つの命令群の総実行時間を短縮することができる
ような命令群はあるか判断する。
ップDで得た命令群の発行時間を繰り上げることによっ
て、2つの命令群の総実行時間を短縮することができる
ような命令群はあるか判断する。
【0093】ここで、命令群の発行時間を繰り上げると
は、着目する命令群と並列に実行可能な命令群の発行時
間を、既に発行されている命令群の実行時間の間で他の
命令群を発行することが可能な時間に移動すること、あ
るいは、2つの命令群の発行順序を入れ換えることを表
す。
は、着目する命令群と並列に実行可能な命令群の発行時
間を、既に発行されている命令群の実行時間の間で他の
命令群を発行することが可能な時間に移動すること、あ
るいは、2つの命令群の発行順序を入れ換えることを表
す。
【0094】繰り上げによって実行時間が短縮できるよ
うな命令群が1つ以上ある場合には、ステップFへ移行
する。該当する命令群が存在しない場合には、ステップ
Gへ移行する。
うな命令群が1つ以上ある場合には、ステップFへ移行
する。該当する命令群が存在しない場合には、ステップ
Gへ移行する。
【0095】ステップF:ステップEで得た命令群が2
つ以上ある場合には、命令群のうちで、2つの命令群の
総実行時間を最も短縮できるものを選び、着目する命令
群に対する発行時間を繰り上げ、ステップGへ移行す
る。
つ以上ある場合には、命令群のうちで、2つの命令群の
総実行時間を最も短縮できるものを選び、着目する命令
群に対する発行時間を繰り上げ、ステップGへ移行す
る。
【0096】ステップG:全ての命令群に対して処理を
行ったかを判断し、行った場合は終了し、未処理の命令
群が残っている場合はステップHへ移行する。
行ったかを判断し、行った場合は終了し、未処理の命令
群が残っている場合はステップHへ移行する。
【0097】図3(a)のプログラム、図3(b)の命
令列はそれぞれ、従来例で用いた図27(b)のプログ
ラム、図27(c)の命令列と同じである。本実施例
を、図3(b)の命令列を用いて以下に説明する。
令列はそれぞれ、従来例で用いた図27(b)のプログ
ラム、図27(c)の命令列と同じである。本実施例
を、図3(b)の命令列を用いて以下に説明する。
【0098】命令スケジューリング部6では、図3
(b)の命令列に対し、図2のフローチャートに従って
最適化を行う。図3(b)の命令列が命令スケジューリ
ング部6によって最適化されていく様子を、図2のフロ
ーチャートに従って以下に説明する。
(b)の命令列に対し、図2のフローチャートに従って
最適化を行う。図3(b)の命令列が命令スケジューリ
ング部6によって最適化されていく様子を、図2のフロ
ーチャートに従って以下に説明する。
【0099】(1) 図3(b)の命令列に対し、依存
関係のある命令毎に命令群を構成し、並列に実行可能な
命令群を対応づける(ステップA)。1命令だけで独立
に演算可能な命令は、1命令のみで命令群を構成する。
一例として、並列に実行可能な命令群を’()’で対応
づけた図を図4(a)に、各命令群に番号付けした図を
図4(b)に示す。並列に実行可能な命令群は、それぞ
れ’()’の対応で表現されている。
関係のある命令毎に命令群を構成し、並列に実行可能な
命令群を対応づける(ステップA)。1命令だけで独立
に演算可能な命令は、1命令のみで命令群を構成する。
一例として、並列に実行可能な命令群を’()’で対応
づけた図を図4(a)に、各命令群に番号付けした図を
図4(b)に示す。並列に実行可能な命令群は、それぞ
れ’()’の対応で表現されている。
【0100】図4(a)において、1命令だけ
で’()’に囲まれてる命令1、命令2、命令4、命令
7は、それぞれ1命令だけで独立に実行可能な命令を表
している。また、命令1、命令2、命令3の3命令で1
つの命令群(命令群3)を構成し、命令群3と命令4,
5で1つの命令群(命令群5)を構成していることを表
している。同様に命令群6、命令群8、命令群9も複数
の依存関係のある命令から構成されている。
で’()’に囲まれてる命令1、命令2、命令4、命令
7は、それぞれ1命令だけで独立に実行可能な命令を表
している。また、命令1、命令2、命令3の3命令で1
つの命令群(命令群3)を構成し、命令群3と命令4,
5で1つの命令群(命令群5)を構成していることを表
している。同様に命令群6、命令群8、命令群9も複数
の依存関係のある命令から構成されている。
【0101】(2) 各命令群に対し、最初に発行され
る命令から最後に終了する命令までの総実行時間と、各
命令群の最初の命令が発行されてから、他の命令群(他
の命令群に属する命令)を発行することが可能な時間が
何クロック目であるかを算出する(ステップB)。各命
令群の総実行時間と次命令群発行可能時間を図4(c)
に示す。
る命令から最後に終了する命令までの総実行時間と、各
命令群の最初の命令が発行されてから、他の命令群(他
の命令群に属する命令)を発行することが可能な時間が
何クロック目であるかを算出する(ステップB)。各命
令群の総実行時間と次命令群発行可能時間を図4(c)
に示す。
【0102】図4(c)において、例えば命令群3は、
図28(a)における命令3のFステージを5クロック
目まで繰り下げることができるので、1,5クロック目
以外が次命令群発行可能時間であることを示している。
図28(a)における命令3のFステージを5クロック
目まで繰り下げることができるので、1,5クロック目
以外が次命令群発行可能時間であることを示している。
【0103】(3) 命令群1に着目し、ステップD以
降の処理を行う。
降の処理を行う。
【0104】(4) 命令群1と並列に実行可能な命令
群を、命令群2以降の命令群の中から探す(ステップ
D)。ここでは命令群2が該当し、ステップEへ移行す
る。
群を、命令群2以降の命令群の中から探す(ステップ
D)。ここでは命令群2が該当し、ステップEへ移行す
る。
【0105】(5) 命令群1に対して命令群2の発行
時間を繰り上げても、2つの命令の総実行時間は6クロ
ックで変化がない。発行時間を繰り上げることで実行時
間を短縮することのできる命令群はないので(ステップ
E)、ステップGへ移行する。 (6) 命令群2以降の処理が残っているので、ステッ
プHへ移行し、命令群2に着目する。
時間を繰り上げても、2つの命令の総実行時間は6クロ
ックで変化がない。発行時間を繰り上げることで実行時
間を短縮することのできる命令群はないので(ステップ
E)、ステップGへ移行する。 (6) 命令群2以降の処理が残っているので、ステッ
プHへ移行し、命令群2に着目する。
【0106】(7) 命令群2と並列に実行可能な命令
群を、命令群3以降の命令群の中から探す(ステップ
D)。括弧の対応から、命令群2と並列に実行可能な命
令群は、命令群1のみであるが、ここでは命令群1は入
れ換えの対象ではないため、ステップG、ステップHへ
移行する。
群を、命令群3以降の命令群の中から探す(ステップ
D)。括弧の対応から、命令群2と並列に実行可能な命
令群は、命令群1のみであるが、ここでは命令群1は入
れ換えの対象ではないため、ステップG、ステップHへ
移行する。
【0107】(8) 命令群3と並列に実行可能な命令
群を、命令群4以降の命令群の中から探す(ステップ
D)。ここでは、命令群4が該当し、ステップEへ移行
する。
群を、命令群4以降の命令群の中から探す(ステップ
D)。ここでは、命令群4が該当し、ステップEへ移行
する。
【0108】(9) この場合、命令群3に対し、命令
群4の発行時間を繰り上げても、命令群3と命令群4の
総実行時間は変化しない。しかし、後から命令群9をス
ケジューリングする際に、命令3のFステージを3クロ
ック繰り下げ、命令群9を4クロック繰り上げると、命
令群9の中の命令8の発行時間が命令4の発行時間とか
ち合ってしまう。
群4の発行時間を繰り上げても、命令群3と命令群4の
総実行時間は変化しない。しかし、後から命令群9をス
ケジューリングする際に、命令3のFステージを3クロ
ック繰り下げ、命令群9を4クロック繰り上げると、命
令群9の中の命令8の発行時間が命令4の発行時間とか
ち合ってしまう。
【0109】命令8は、命令7と依存関係があるので、
発行を早めることができないため、命令4の発行時間を
1クロック早めることで、命令群9の実行時間を短縮す
ることができる。ステップFへ移行する。
発行を早めることができないため、命令4の発行時間を
1クロック早めることで、命令群9の実行時間を短縮す
ることができる。ステップFへ移行する。
【0110】(10) 命令4の発行時間を1クロック
繰り上げ、命令3の発行時間を3クロックは繰り下げて
ステップG,Hへ移行する。
繰り上げ、命令3の発行時間を3クロックは繰り下げて
ステップG,Hへ移行する。
【0111】(11) 命令群4と並列に実行可能な命
令群は、命令群3のみであるので、ここでは対象となら
ない。ステップG,Hへ移行する。
令群は、命令群3のみであるので、ここでは対象となら
ない。ステップG,Hへ移行する。
【0112】(12) 命令群5と並列に実行可能な命
令群はないため、ステップG,Hへ移行する。
令群はないため、ステップG,Hへ移行する。
【0113】(13) 命令群6と並列に実行可能な命
令群は、命令群9である。該当する命令群があるので、
ステップEへ移行する。
令群は、命令群9である。該当する命令群があるので、
ステップEへ移行する。
【0114】(14) 命令群6に対し、命令群9の発
行時間を繰り上げると、2つの命令群の総実行時間は短
縮されるので、ステップFへ移行する。
行時間を繰り上げると、2つの命令群の総実行時間は短
縮されるので、ステップFへ移行する。
【0115】(15) ステップFでは、先に発行され
た命令群に対して、後続の命令の発行時間を繰り上げる
場合と、2つの命令の発行時間を入れ換える場合のどち
らか、より総実行時間を短縮できる方を選択する。
た命令群に対して、後続の命令の発行時間を繰り上げる
場合と、2つの命令の発行時間を入れ換える場合のどち
らか、より総実行時間を短縮できる方を選択する。
【0116】命令群6を先に発行し、命令群9の発行時
間を繰り上げるよりも、2つの命令群の発行時間を入れ
換える方が、より2つの命令群の総実行時間を短縮する
ことができるため、このステップでは、2つの命令群の
発行時間を入れ換える。ステップG,Hへ移行する。
間を繰り上げるよりも、2つの命令群の発行時間を入れ
換える方が、より2つの命令群の総実行時間を短縮する
ことができるため、このステップでは、2つの命令群の
発行時間を入れ換える。ステップG,Hへ移行する。
【0117】(16) 命令群7と並列に実行可能な命
令群はないので、ステップG,Hへ移行する。
令群はないので、ステップG,Hへ移行する。
【0118】(17) 同様に命令群8と並列に実行可
能な命令群もないので、ステップG,Hへ移行する。
能な命令群もないので、ステップG,Hへ移行する。
【0119】(18) 命令群9と並列に実行可能な命
令群は、命令群6であるが、ここでは対象とならないた
め、ステップGへ移行し、全命令群に対して処理を行っ
たので終了する。
令群は、命令群6であるが、ここでは対象とならないた
め、ステップGへ移行し、全命令群に対して処理を行っ
たので終了する。
【0120】以上の処理により、図3(b)の命令列は
図5(a)の命令列に変換され、実行は図5(b)にな
り、命令列の総実行時間は、命令スケジューリングを行
う前には24クロックであったのに対し、19クロック
に短縮され、従来の命令スケジューリング方法では20
クロックであったのに比べても1クロック短縮すること
ができる。
図5(a)の命令列に変換され、実行は図5(b)にな
り、命令列の総実行時間は、命令スケジューリングを行
う前には24クロックであったのに対し、19クロック
に短縮され、従来の命令スケジューリング方法では20
クロックであったのに比べても1クロック短縮すること
ができる。
【0121】第2の発明 次に、第2の発明について図6〜16を用いて説明す
る。
る。
【0122】まず、シミュレーションの対象となる領域
を4×4の2次元の格子状に分割し、不完全LU分解
(1,1)を適用した場合について説明する。
を4×4の2次元の格子状に分割し、不完全LU分解
(1,1)を適用した場合について説明する。
【0123】不完全LU分解(1,1)で得られる下三
角行列は、図10に示すような形となる。この下三角行
列を係数行列にもつ連立一次方程式を解く場合、図11
に示すような変数求解の依存関係が得られる。図11に
おいて、i→jは、jを計算するためには、iの値が必
要であることを示している。
角行列は、図10に示すような形となる。この下三角行
列を係数行列にもつ連立一次方程式を解く場合、図11
に示すような変数求解の依存関係が得られる。図11に
おいて、i→jは、jを計算するためには、iの値が必
要であることを示している。
【0124】図6は、この連立一次方程式を解くための
並列計算機である。この並列計算機は、格子の行数分の
プロセッサ(1)〜(4)が1次元状に配置されてい
る。第iプロセッサは、第(i+1)プロセッサへデー
タを転送することが可能となっている。
並列計算機である。この並列計算機は、格子の行数分の
プロセッサ(1)〜(4)が1次元状に配置されてい
る。第iプロセッサは、第(i+1)プロセッサへデー
タを転送することが可能となっている。
【0125】各プロセッサは、自分自身のローカルな記
憶手段となるメモリ13と、図示していないが受信手
段、計算手段、及び送信手段をもつ。
憶手段となるメモリ13と、図示していないが受信手
段、計算手段、及び送信手段をもつ。
【0126】この計算機上で、上述の連立一次方程式を
解くためには、まず、各格子点のデータを各格子点の計
算を担当するプロセッサのローカルメモリ13に配置す
る。第1プロセッサ(1) には、第1行の格子点(1〜
4)のデータを配置する。第2プロセッサ(2) には、第
2行の格子点(5〜8)のデータを配置する。第3、第
4のプロセッサ(3),(4) についても同様に、第3行の格
子点(9〜12)、第4行の格子点(13〜16)を配
置する。
解くためには、まず、各格子点のデータを各格子点の計
算を担当するプロセッサのローカルメモリ13に配置す
る。第1プロセッサ(1) には、第1行の格子点(1〜
4)のデータを配置する。第2プロセッサ(2) には、第
2行の格子点(5〜8)のデータを配置する。第3、第
4のプロセッサ(3),(4) についても同様に、第3行の格
子点(9〜12)、第4行の格子点(13〜16)を配
置する。
【0127】図8は、データが配置された並列計算機の
大まかな動作を表すフローチャートである。まずプロセ
ッサの受信手段が隣接プロセッサからデータを受け取り
(ステップ91)、受けとったデータを用いて格子点の
変数値を計算手段で計算する(ステップ92)。次に計
算結果を記憶手段で記憶すると共に、隣接プロセッサに
送信手段から送出する(ステップ93)。この処理を、
このプロセッサが担当するすべての変数が計算されるま
で繰り返す(ステップ94)。
大まかな動作を表すフローチャートである。まずプロセ
ッサの受信手段が隣接プロセッサからデータを受け取り
(ステップ91)、受けとったデータを用いて格子点の
変数値を計算手段で計算する(ステップ92)。次に計
算結果を記憶手段で記憶すると共に、隣接プロセッサに
送信手段から送出する(ステップ93)。この処理を、
このプロセッサが担当するすべての変数が計算されるま
で繰り返す(ステップ94)。
【0128】以下に、各プロセッサの具体的な動作を説
明する。
明する。
【0129】まず、第1段階では、第1プロセッサで、
第1格子点の変数を計算する。第2〜4プロセッサでは
何もしない。計算が終了した後、第1格子点の変数値を
第2プロセッサへ転送する。
第1格子点の変数を計算する。第2〜4プロセッサでは
何もしない。計算が終了した後、第1格子点の変数値を
第2プロセッサへ転送する。
【0130】第2段階では、第1プロセッサで、第1段
階で計算された変数値を用いて第2格子点の変数を計算
する。このとき同時に、第2プロセッサでは、第5格子
点の変数を計算する。このとき、第1段階で第1プロセ
ッサから転送されてきた第1格子点の変数値を用いる。
計算が終了した後、第1のプロセッサから、第2格子点
の変数の値を第2プロセッサへ、第2プロセッサから第
5格子点の変数の値を第3プロセッサへそれぞれ転送す
る。
階で計算された変数値を用いて第2格子点の変数を計算
する。このとき同時に、第2プロセッサでは、第5格子
点の変数を計算する。このとき、第1段階で第1プロセ
ッサから転送されてきた第1格子点の変数値を用いる。
計算が終了した後、第1のプロセッサから、第2格子点
の変数の値を第2プロセッサへ、第2プロセッサから第
5格子点の変数の値を第3プロセッサへそれぞれ転送す
る。
【0131】第3段階では、第1プロセッサで、第2段
階で計算された変数値を用いて第3格子点の変数を計算
する。同時に、第2プロセッサでは第6格子点の変数、
第3プロセッサでは第9格子点の変数をそれぞれ計算す
る。それぞれのプロセッサで計算された格子点の変数の
値は、それぞれの隣接するプロセッサへ転送する。
階で計算された変数値を用いて第3格子点の変数を計算
する。同時に、第2プロセッサでは第6格子点の変数、
第3プロセッサでは第9格子点の変数をそれぞれ計算す
る。それぞれのプロセッサで計算された格子点の変数の
値は、それぞれの隣接するプロセッサへ転送する。
【0132】以降、同様の処理を、第7段階で、第16
格子点の変数が計算されるまで繰り返す。
格子点の変数が計算されるまで繰り返す。
【0133】この計算の結果、第i行の格子の変数の値
は、第iプロセッサのローカルメモリ13に得られる。
は、第iプロセッサのローカルメモリ13に得られる。
【0134】このときの計算の様子は、図11から分か
るように、同一行に横方向に並んでいる格子点は、1つ
のプロセッサに割り当てられ、同一列に縦方向に並んで
いる格子点は、各プロセッサにおいて同時に計算されて
いる。全体的には、左側の列の格子点から計算が開始さ
れる。
るように、同一行に横方向に並んでいる格子点は、1つ
のプロセッサに割り当てられ、同一列に縦方向に並んで
いる格子点は、各プロセッサにおいて同時に計算されて
いる。全体的には、左側の列の格子点から計算が開始さ
れる。
【0135】各列の上に示した数字(1) 〜(7) は、その
列上の格子点の変数が第何段階に計算が行なわれるかを
示している。プロセッサ間のデータ転送は、斜め方向の
矢印がある格子点間で行なわれている。横方向の矢印
は、プロセッサ間のデータ転送を表しているのではな
い。
列上の格子点の変数が第何段階に計算が行なわれるかを
示している。プロセッサ間のデータ転送は、斜め方向の
矢印がある格子点間で行なわれている。横方向の矢印
は、プロセッサ間のデータ転送を表しているのではな
い。
【0136】データの転送に要する時間が無視できると
すると、1つのプロセッサだけで計算した場合に比べ、
7/16=0.44倍の計算時間ですむことになる。
すると、1つのプロセッサだけで計算した場合に比べ、
7/16=0.44倍の計算時間ですむことになる。
【0137】次に、同じ2次元領域について、不完全L
U分解(1,2)を適用した場合について説明する。
U分解(1,2)を適用した場合について説明する。
【0138】不完全LU分解(1,2)を用いた場合の
下三角行列は、図12のようになる。この行列を係数に
もつ連立一次方程式を解くために用いる並列計算機は、
不完全LU分解(1,1)の場合と同じである。各格子
点のデータも同じように配置する。解の依存関係は、図
13のようになる。
下三角行列は、図12のようになる。この行列を係数に
もつ連立一次方程式を解くために用いる並列計算機は、
不完全LU分解(1,1)の場合と同じである。各格子
点のデータも同じように配置する。解の依存関係は、図
13のようになる。
【0139】まず、第1段階では、第1プロセッサで、
第1格子点の変数を計算する。このとき第2〜4プロセ
ッサでは何もしない。計算が終了した後、第1格子点の
変数値を第2プロセッサへ転送し、保持する。
第1格子点の変数を計算する。このとき第2〜4プロセ
ッサでは何もしない。計算が終了した後、第1格子点の
変数値を第2プロセッサへ転送し、保持する。
【0140】第2段階では、第1プロセッサで、第1段
階で計算された変数値を用いて第2格子点の変数を計算
する。このとき第2〜4プロセッサは何もしない。計算
が終了した後、計算した第2格子点の変数値を第2のプ
ロセッサへ転送し、保持する。
階で計算された変数値を用いて第2格子点の変数を計算
する。このとき第2〜4プロセッサは何もしない。計算
が終了した後、計算した第2格子点の変数値を第2のプ
ロセッサへ転送し、保持する。
【0141】第3段階では、第1プロセッサで、第2段
階で計算された変数値を用いて第3格子点の変数を計算
する。これと同時に第2プロセッサでは、第5格子点の
変数を計算する。このとき、第1段階及び第2段階で計
算された第1及び第2格子点の変数値を用いる。
階で計算された変数値を用いて第3格子点の変数を計算
する。これと同時に第2プロセッサでは、第5格子点の
変数を計算する。このとき、第1段階及び第2段階で計
算された第1及び第2格子点の変数値を用いる。
【0142】第3、4プロセッサは何もしない。計算が
終了した後、第1プロセッサは、第3格子点の変数値を
第2プロセッサへ転送し、保持する。第2プロセッサ
は、第5格子点の変数値を第3プロセッサへ転送し、保
持する。
終了した後、第1プロセッサは、第3格子点の変数値を
第2プロセッサへ転送し、保持する。第2プロセッサ
は、第5格子点の変数値を第3プロセッサへ転送し、保
持する。
【0143】以降、同様の処理を、第4プロセッサで第
16格子点の変数が計算されるまで繰り返す。
16格子点の変数が計算されるまで繰り返す。
【0144】この計算の結果、不完全LU分解(1,
1)の場合と同様に、第i行の格子の変数の値は、第i
プロセッサのローカルメモリ13に得られる。
1)の場合と同様に、第i行の格子の変数の値は、第i
プロセッサのローカルメモリ13に得られる。
【0145】このときの計算の様子は、図13から分か
るように、同一行に横方向に並んでいる格子点は、1つ
のプロセッサに割り当てられ、同一列に縦方向に並んで
いる格子点は、各プロセッサにおいて同時に計算されて
いる。全体的には、左側の列の格子点から計算が開始さ
れる。
るように、同一行に横方向に並んでいる格子点は、1つ
のプロセッサに割り当てられ、同一列に縦方向に並んで
いる格子点は、各プロセッサにおいて同時に計算されて
いる。全体的には、左側の列の格子点から計算が開始さ
れる。
【0146】各列の上に示した数字(1) 〜(10)は、その
列上の格子点の変数が第何段階に計算が行なわれるかを
示している。プロセッサ間のデータ転送は、斜め方向の
矢印がある格子点間で行なわれている。1つの格子点に
対し2本の矢印が出ているが、実際には、プロセッサ間
データ転送を2回やるわけではなく、格子点の計算結果
が得られた直後にデータ転送を行ない、転送先のプロセ
ッサで記憶しておけば、1回のデータ転送ですむ。横方
向の矢印は、プロセッサ間のデータ転送を表しているの
ではない。
列上の格子点の変数が第何段階に計算が行なわれるかを
示している。プロセッサ間のデータ転送は、斜め方向の
矢印がある格子点間で行なわれている。1つの格子点に
対し2本の矢印が出ているが、実際には、プロセッサ間
データ転送を2回やるわけではなく、格子点の計算結果
が得られた直後にデータ転送を行ない、転送先のプロセ
ッサで記憶しておけば、1回のデータ転送ですむ。横方
向の矢印は、プロセッサ間のデータ転送を表しているの
ではない。
【0147】データの転送に要する時間が無視できると
すると、1つのプロセッサだけで計算した場合に比べ、
10/16=0.63倍の計算時間ですむことになる。
すると、1つのプロセッサだけで計算した場合に比べ、
10/16=0.63倍の計算時間ですむことになる。
【0148】次に、シミュレーション領域が図14に示
すような3×3×3の大きさの3次元領域である場合
に、不完全LU分解(1,1,1)を適用した場合につ
いて説明する。不完全LU分解(1,1,1)により得
られる下三角行列は、図15のようになる。この下三角
行列を係数行列にもつ連立一次方程式を解く場合、図1
6のような変数求解の依存関係となる。
すような3×3×3の大きさの3次元領域である場合
に、不完全LU分解(1,1,1)を適用した場合につ
いて説明する。不完全LU分解(1,1,1)により得
られる下三角行列は、図15のようになる。この下三角
行列を係数行列にもつ連立一次方程式を解く場合、図1
6のような変数求解の依存関係となる。
【0149】図7は、この連立一次方程式を解くための
並列計算機である。この並列計算機は、3×3個のプロ
セッサ(1,1)〜(3,3)が2次元状に配置されて
いる。(i,j)プロセッサは、(i+1,j)プロセ
ッサおよび(i,j+1)プロセッサの2つの隣接プロ
セッサへデータ転送することが可能となっている。ま
た、図示していないが、各プロセッサは、自分自身のロ
ーカルな記憶手段となるメモリ、受信手段、計算手段、
及び送信手段をもっている。
並列計算機である。この並列計算機は、3×3個のプロ
セッサ(1,1)〜(3,3)が2次元状に配置されて
いる。(i,j)プロセッサは、(i+1,j)プロセ
ッサおよび(i,j+1)プロセッサの2つの隣接プロ
セッサへデータ転送することが可能となっている。ま
た、図示していないが、各プロセッサは、自分自身のロ
ーカルな記憶手段となるメモリ、受信手段、計算手段、
及び送信手段をもっている。
【0150】この計算機上で、上述の連立一次方程式を
解くためには、次のように各格子点のデータを各プロセ
ッサのローカルメモリに配置する。すなわち、y座標、
z座標が同一の3つの格子点のデータを1つのプロセッ
サに配置する。例えば、1〜3の格子点のデータは、
(1,1)プロセッサに配置され、4〜6の格子点のデ
ータは(1,2)プロセッサに配置する。さらに、10
〜12の格子点のデータは(2,1)プロセッサに配置
する。
解くためには、次のように各格子点のデータを各プロセ
ッサのローカルメモリに配置する。すなわち、y座標、
z座標が同一の3つの格子点のデータを1つのプロセッ
サに配置する。例えば、1〜3の格子点のデータは、
(1,1)プロセッサに配置され、4〜6の格子点のデ
ータは(1,2)プロセッサに配置する。さらに、10
〜12の格子点のデータは(2,1)プロセッサに配置
する。
【0151】まず、第1段階では、(1,1)プロセッ
サで第1格子点の変数を計算する。このとき他のプロセ
ッサでは何もしない。計算終了後、計算された第1格子
点の変数値を(1,2)プロセッサ、(2,1)プロセ
ッサの2つの隣接プロセッサへ転送する。
サで第1格子点の変数を計算する。このとき他のプロセ
ッサでは何もしない。計算終了後、計算された第1格子
点の変数値を(1,2)プロセッサ、(2,1)プロセ
ッサの2つの隣接プロセッサへ転送する。
【0152】第2段階では、(1,1)プロセッサで
は、第2の格子点の変数を計算し、(1,2)プロセッ
サでは、第4の格子点の変数を計算し、(2,1)プロ
セッサでは、第10の格子点の変数を計算する。
は、第2の格子点の変数を計算し、(1,2)プロセッ
サでは、第4の格子点の変数を計算し、(2,1)プロ
セッサでは、第10の格子点の変数を計算する。
【0153】計算終了後、それぞれのプロセッサで計算
した格子点の変数値をそれぞれのプロセッサの右および
下の隣接プロセッサへ転送する。すなわち、(1,1)
プロセッサは、(1,2)および(2,1)プロセッサ
へ、(1,2)プロセッサは、(1,3)および(2,
2)プロセッサへ、(2,1)プロセッサは、(2,
2)および(3,1)プロセッサへ、計算結果を転送す
る。
した格子点の変数値をそれぞれのプロセッサの右および
下の隣接プロセッサへ転送する。すなわち、(1,1)
プロセッサは、(1,2)および(2,1)プロセッサ
へ、(1,2)プロセッサは、(1,3)および(2,
2)プロセッサへ、(2,1)プロセッサは、(2,
2)および(3,1)プロセッサへ、計算結果を転送す
る。
【0154】以降、同様の処理を、第7段階で第27格
子点の変数が計算されるまで繰り返す。
子点の変数が計算されるまで繰り返す。
【0155】以上の計算の結果、各格子点の変数値は、
各格子点のデータが配置されたプロセッサ上に得られ
る。
各格子点のデータが配置されたプロセッサ上に得られ
る。
【0156】このときの計算の様子は、図16から分か
るように、同一行に横方向に並んでいる格子点は、1つ
のプロセッサに割り当てられ、同一列に縦方向に並んで
いる格子点は、各プロセッサにおいて同時に計算されて
いる。全体的には、左側の列の格子点から計算が開始さ
れる。
るように、同一行に横方向に並んでいる格子点は、1つ
のプロセッサに割り当てられ、同一列に縦方向に並んで
いる格子点は、各プロセッサにおいて同時に計算されて
いる。全体的には、左側の列の格子点から計算が開始さ
れる。
【0157】各列の上に示した数字(1) 〜(7) は、その
列上の格子点の変数が第何段階に計算が行なわれるかを
示している。プロセッサ間のデータ転送は、斜め方向の
矢印がある格子点間で行なわれている。横方向の矢印
は、プロセッサ間のデータ転送を表しているのではな
い。
列上の格子点の変数が第何段階に計算が行なわれるかを
示している。プロセッサ間のデータ転送は、斜め方向の
矢印がある格子点間で行なわれている。横方向の矢印
は、プロセッサ間のデータ転送を表しているのではな
い。
【0158】データ転送に要する時間が無視できるとす
ると、1つのプロセッサだけで計算した場合に比べ、7
/27=0.26倍の計算時間ですむことになる。40
×40×40の場合であれば、40×40個のプロセッ
サで、118/64000=0.0018倍の計算時間
ですむことになる。
ると、1つのプロセッサだけで計算した場合に比べ、7
/27=0.26倍の計算時間ですむことになる。40
×40×40の場合であれば、40×40個のプロセッ
サで、118/64000=0.0018倍の計算時間
ですむことになる。
【0159】なお、第2の発明は、半導体デバイスシミ
ュレーションで用いられる、いわゆるカップル法のよう
に各行列要素が小行列となる場合があるが、この場合で
も同様に実施可能である。
ュレーションで用いられる、いわゆるカップル法のよう
に各行列要素が小行列となる場合があるが、この場合で
も同様に実施可能である。
【0160】第3の発明 最後に、第3の発明について図17〜25を参照しなが
ら説明する。
ら説明する。
【0161】図17は、第3の発明の並列計算機に係わ
る一実施例の構成を示すブロック図である。
る一実施例の構成を示すブロック図である。
【0162】同図において、第3の発明の並列計算機
は、大きく、演算制御部21と演算実行部22とから構
成される。演算制御部21と、演算実行部22は、デー
タバス23で接続される。演算制御部21は、命令メモ
リ24と接続される。命令メモリ24には、行列の乗算
手順を記述したプログラムが格納されている。
は、大きく、演算制御部21と演算実行部22とから構
成される。演算制御部21と、演算実行部22は、デー
タバス23で接続される。演算制御部21は、命令メモ
リ24と接続される。命令メモリ24には、行列の乗算
手順を記述したプログラムが格納されている。
【0163】演算制御部21は、命令メモリ24から命
令を読み込み、解読する。読み込んだ命令が、演算実行
部22での演算を指示するものであれば、PE向けのマ
イクロコードに展開し、データバス23を介して、演算
実行部22に転送する。
令を読み込み、解読する。読み込んだ命令が、演算実行
部22での演算を指示するものであれば、PE向けのマ
イクロコードに展開し、データバス23を介して、演算
実行部22に転送する。
【0164】読み込んだ命令が、ループ変数の更新等、
演算制御部21内での処理を指示するものであれば、演
算制御部21内で処理を行う。
演算制御部21内での処理を指示するものであれば、演
算制御部21内で処理を行う。
【0165】演算実行部22は、複数の演算要素プロセ
ッサ(Processing Element)PE25から構成される。
PE25は、各自でデータメモリ26を持ち、データメ
モリ26のデータに対して処理を行う。PE25は互い
にネットワーク27で結合されており、他のPE25と
データ通信を行うことができる。PE25は、演算制御
部21から放送されるマイクロコードにしたがって動作
する。
ッサ(Processing Element)PE25から構成される。
PE25は、各自でデータメモリ26を持ち、データメ
モリ26のデータに対して処理を行う。PE25は互い
にネットワーク27で結合されており、他のPE25と
データ通信を行うことができる。PE25は、演算制御
部21から放送されるマイクロコードにしたがって動作
する。
【0166】ネットワーク27は、各PE25を結合
し、PE間通信を可能にするもので、その形態として
は、例えば図18に示すような2次元格子結合や、図1
9に示すx−yバス結合、さらには図示していないがハ
イパー・キューブ結合等がよく知られている。
し、PE間通信を可能にするもので、その形態として
は、例えば図18に示すような2次元格子結合や、図1
9に示すx−yバス結合、さらには図示していないがハ
イパー・キューブ結合等がよく知られている。
【0167】以下では、図18の2次元格子結合を例に
とって説明を続けるが、x−yバス結合や、ハイパーキ
ューブ結合等、その他のネットワーク形態についても適
用可能である。
とって説明を続けるが、x−yバス結合や、ハイパーキ
ューブ結合等、その他のネットワーク形態についても適
用可能である。
【0168】演算制御部21は、演算実行部22の各P
E25に対して、次のような制御を行うことができる。
E25に対して、次のような制御を行うことができる。
【0169】(1) すべてのPE25が、一斉に同じ
処理を行う。
処理を行う。
【0170】(2) 少なくとも、2次元上に配置され
たPE25の、一行全てあるいは一列全てのPE25を
選択して、選択されたPE25のみ、一斉に同じ処理を
行う。以上で説明した並列計算機を用いて、2つの行列
の乗算を行う手順を説明する。
たPE25の、一行全てあるいは一列全てのPE25を
選択して、選択されたPE25のみ、一斉に同じ処理を
行う。以上で説明した並列計算機を用いて、2つの行列
の乗算を行う手順を説明する。
【0171】ここでは、n×nの2次元状に配置された
PEアレイ上で、n×n行列の積、C=A*Bを求める
場合を考える。i行目j列目に位置するPE25をPE
(i,j)で表すものとする(0≦i≦n−1,0≦j
≦n−1)。各PE25は、初期データとして、行列
A,Bのそれぞれ1つの要素を持つようにデータを配置
する。
PEアレイ上で、n×n行列の積、C=A*Bを求める
場合を考える。i行目j列目に位置するPE25をPE
(i,j)で表すものとする(0≦i≦n−1,0≦j
≦n−1)。各PE25は、初期データとして、行列
A,Bのそれぞれ1つの要素を持つようにデータを配置
する。
【0172】すなわち、PE(i,j)(0≦i≦n−
1,0≦j≦n−1)は、初期データa[i][j]、b[i]
[j]を持つ。PE(i,j)(0≦i≦n−1,0≦j
≦n−1)では、それぞれ行列Cの要素c[i][j]の演算
を受け持ち、全PE25で一斉に演算を行う。PE
(i,j)(0≦i≦n−1,0≦j≦n−1)で行う
演算は、次の通りである。
1,0≦j≦n−1)は、初期データa[i][j]、b[i]
[j]を持つ。PE(i,j)(0≦i≦n−1,0≦j
≦n−1)では、それぞれ行列Cの要素c[i][j]の演算
を受け持ち、全PE25で一斉に演算を行う。PE
(i,j)(0≦i≦n−1,0≦j≦n−1)で行う
演算は、次の通りである。
【0173】 c[i][j]=0; k=0 to n−1まで c[i][j]=c[i][j]+a[i][k]*b[k][j];を繰り 返す。 …(I) 乗算手順1を図20のフローチャートにしたがって説明
する。
する。
【0174】(1) 各PE(i,j)で、c[i][j]=
0として、cを初期化する(ステップ101)。
0として、cを初期化する(ステップ101)。
【0175】(2) PE(i,j)で1回目に行う演
算は、 c[i][j]=c[i][j]+a[i][0]*b[0][j]; …(II) である。
算は、 c[i][j]=c[i][j]+a[i][0]*b[0][j]; …(II) である。
【0176】ここで、PE(i,j)(1≦i≦n−
1,1≦j≦n−1)では、a[i][0]とb[0][j]は自分
のデータメモリ26には存在しないため、データ転送が
必要である。a[i][0]は、第1列目のPE(i,0)
(0≦i≦n−1)が持ち、b[0][j]は、PE(0,
j)(1≦j≦n−1)が持つ。
1,1≦j≦n−1)では、a[i][0]とb[0][j]は自分
のデータメモリ26には存在しないため、データ転送が
必要である。a[i][0]は、第1列目のPE(i,0)
(0≦i≦n−1)が持ち、b[0][j]は、PE(0,
j)(1≦j≦n−1)が持つ。
【0177】まず、第1列にあるPE(i,0)(O≦
i≦n−1)は、同じ行に存在する他のPE(i,1)
〜PE(i,n−1)に、a[i][0]を転送する。これは
1対n放送の形式になる。
i≦n−1)は、同じ行に存在する他のPE(i,1)
〜PE(i,n−1)に、a[i][0]を転送する。これは
1対n放送の形式になる。
【0178】a[i][0]の1対n放送は、PE(i,0)
が、まず隣接するPE(i,1)にa[i][0]を転送し、
次にPE(i,1)がPE(i,2)にa[i][0]
を転送し、……、最後にP(i,n−1)、a[i][0]が
転送される、という形式で、放送されるデータa[i][0]
が、PE間でシフトされることによって、n−1サイク
ルで実行できる。
が、まず隣接するPE(i,1)にa[i][0]を転送し、
次にPE(i,1)がPE(i,2)にa[i][0]
を転送し、……、最後にP(i,n−1)、a[i][0]が
転送される、という形式で、放送されるデータa[i][0]
が、PE間でシフトされることによって、n−1サイク
ルで実行できる。
【0179】なお、この行方向への1対n放送は、すべ
ての行(0≦i≦n−1)で、同時に実行できる(ステ
ップ102〜103)。図21に、n=4の場合の行方
向への1対n放送の様子を示す。
ての行(0≦i≦n−1)で、同時に実行できる(ステ
ップ102〜103)。図21に、n=4の場合の行方
向への1対n放送の様子を示す。
【0180】(3) 次にb[0][j]を転送するために、
第1行にあるPE[0][j](0≦j≦n−1)は同じ列に
存在する他のPE[0][j]〜PE[n-1][j]に、同様に1対
n放送する(ステップ104)。この1対n放送は、す
べての列で同時に実行できる。図22にn=4の場合の
列方向への1対n放送の様子を示す。
第1行にあるPE[0][j](0≦j≦n−1)は同じ列に
存在する他のPE[0][j]〜PE[n-1][j]に、同様に1対
n放送する(ステップ104)。この1対n放送は、す
べての列で同時に実行できる。図22にn=4の場合の
列方向への1対n放送の様子を示す。
【0181】(4) 以上の2回の1対n放送によっ
て、各PE(i,j)(0≦i≦n−1,0≦j≦n−
1)は、a[i][0]とb[0][j]を取得したので、(II)式
の一回目の演算を行う(ステップ105)。
て、各PE(i,j)(0≦i≦n−1,0≦j≦n−
1)は、a[i][0]とb[0][j]を取得したので、(II)式
の一回目の演算を行う(ステップ105)。
【0182】(5) 2回目の演算は、 c[i][j]=c[i][j]+a[i][1]*b[1][j]; … (III) である。
【0183】すなわち、PE(i,j)(0≦i≦n−
1,0≦j≦n−1)は、a[i][1]とb[1][j]とがデー
タ転送されることが必要である。このためには、第2列
目のPE(i,1)(0≦i≦n−1)が、a[i][1]を
同じ行の他のPE25に1対n放送を行い、次に、第2
行目のPE(1,j)(0≦j≦n−1)が、b[1][j]
を同じ列の他のPE25に1対n放送する。
1,0≦j≦n−1)は、a[i][1]とb[1][j]とがデー
タ転送されることが必要である。このためには、第2列
目のPE(i,1)(0≦i≦n−1)が、a[i][1]を
同じ行の他のPE25に1対n放送を行い、次に、第2
行目のPE(1,j)(0≦j≦n−1)が、b[1][j]
を同じ列の他のPE25に1対n放送する。
【0184】図23,24に、n=4の場合の、第2列
目および第2行目の列方向及び行方向への1対n放送の
様子を示す。各PE(i,j)(0≦i≦n−1,0≦
j≦n−1)では、(III)式の演算を行う。
目および第2行目の列方向及び行方向への1対n放送の
様子を示す。各PE(i,j)(0≦i≦n−1,0≦
j≦n−1)では、(III)式の演算を行う。
【0185】(6) 以上をn回繰り返すことによっ
て、各PE(i,j)(0≦i≦n−1,0≦j≦n−
1)で、それぞれ行列の積であるc[i][j]が求まる(ス
テップ103〜107)。
て、各PE(i,j)(0≦i≦n−1,0≦j≦n−
1)で、それぞれ行列の積であるc[i][j]が求まる(ス
テップ103〜107)。
【0186】以上の乗算手順1によれば、演算を行うた
びに、各PE25で結果が累算されるので、あらかじ
め、全データを持つ必要がなく、少ないメモリ量で行列
の乗算が実行できる。すなわち、各PE25で必要なメ
モリ量は、初期データ2つ、1回の繰り返しで転送され
るデータ2つ、解となるcのための1つで合計5データ
分のメモリ26があればよく、nの値に依存しない。す
なわちnの値が大きくなっても、各PE25のメモリ量
は少なくて済む。
びに、各PE25で結果が累算されるので、あらかじ
め、全データを持つ必要がなく、少ないメモリ量で行列
の乗算が実行できる。すなわち、各PE25で必要なメ
モリ量は、初期データ2つ、1回の繰り返しで転送され
るデータ2つ、解となるcのための1つで合計5データ
分のメモリ26があればよく、nの値に依存しない。す
なわちnの値が大きくなっても、各PE25のメモリ量
は少なくて済む。
【0187】但し、この乗算手順1は、データ放送に要
する時間が従来方式よりも遅くなる。本方式では、1回
の繰り返しで、行、列方向の1対n放送をそれぞれ一回
ずつ行う。1対n放送は、n−1サイクルかかるので、
行列乗算全体のデータ転送時間は2*n*(n−1)サ
イクルとなる。一方従来方式では、データ転送は、2*
(n−1)サイクルであり、データ転送時間についは、
nが大きくなるほど不利になる。
する時間が従来方式よりも遅くなる。本方式では、1回
の繰り返しで、行、列方向の1対n放送をそれぞれ一回
ずつ行う。1対n放送は、n−1サイクルかかるので、
行列乗算全体のデータ転送時間は2*n*(n−1)サ
イクルとなる。一方従来方式では、データ転送は、2*
(n−1)サイクルであり、データ転送時間についは、
nが大きくなるほど不利になる。
【0188】そこで、次のような解決策が考えられる。
行方向に対しては、従来の方法通り、あらかじめn対n
放送によって、演算に必要なデータをすべて保持してお
く。列方向に対しては、前述した乗算手順1にしたがっ
て1対n放送を繰り返す。これを乗算手順2として図2
5のフローチャートにしたがって説明する。
行方向に対しては、従来の方法通り、あらかじめn対n
放送によって、演算に必要なデータをすべて保持してお
く。列方向に対しては、前述した乗算手順1にしたがっ
て1対n放送を繰り返す。これを乗算手順2として図2
5のフローチャートにしたがって説明する。
【0189】(1) まず、行方向に関して、必要なデ
ータをすべて取得する。すなわちPE(i,j)(0≦
i≦n−1,0≦j≦n−1)は、a[i][0]〜a[i][n-
1]を、同じ行の他のPE25から取得する。このための
方法は、従来の方法と同じである。すなわち、まず、各
PE25一斉に、右隣のPE25に自分のデータを転送
する(ステップ111〜113)。
ータをすべて取得する。すなわちPE(i,j)(0≦
i≦n−1,0≦j≦n−1)は、a[i][0]〜a[i][n-
1]を、同じ行の他のPE25から取得する。このための
方法は、従来の方法と同じである。すなわち、まず、各
PE25一斉に、右隣のPE25に自分のデータを転送
する(ステップ111〜113)。
【0190】次に各PE(i,j)(0≦i≦n−1,
0≦j≦n−1)は、左隣のPE(i,j−1)から受
けったa[i][j-1]を、右隣のPE25に転送する。これ
によって、PE(i,j)は、左隣のPE25からa
[i][j-2]を受け取ることになり、これをメモリ26に格
納する。
0≦j≦n−1)は、左隣のPE(i,j−1)から受
けったa[i][j-1]を、右隣のPE25に転送する。これ
によって、PE(i,j)は、左隣のPE25からa
[i][j-2]を受け取ることになり、これをメモリ26に格
納する。
【0191】この処理をn−1回繰り返すことによっ
て、PE(i,j)は、a[i][0]〜a[i][n-1]を受け取
ることができる(ステップ114〜116)。以上によ
り、行方向の必要なデータは、すべて所得できる。この
n対n放送は、各行で並列に実行できる。放送に要する
時間はn−1サイクルである。
て、PE(i,j)は、a[i][0]〜a[i][n-1]を受け取
ることができる(ステップ114〜116)。以上によ
り、行方向の必要なデータは、すべて所得できる。この
n対n放送は、各行で並列に実行できる。放送に要する
時間はn−1サイクルである。
【0192】(2) 以下では、列方向のデータ転送
と、演算とを繰り返して行う。1回目の演算で必要なデ
ータとして、1行目のPE(0,j)(0≦j≦n−
1)が、列方向のPE25にb[0][j]を1対n放送す
る。1対n放送は、まず隣接するPE(1,j)にb
[0][j]を転送し、次にPE(1,j)がPE(2,j)
にb[0][j]を転送し……、最後にPE(n−1,j)に
b[0][j]が転送される、という形式で、放送されるデー
タb[0][j]が、PE間でシフトされることによって、n
−1サイクルで実行できる(ステップ117〜11
8)。
と、演算とを繰り返して行う。1回目の演算で必要なデ
ータとして、1行目のPE(0,j)(0≦j≦n−
1)が、列方向のPE25にb[0][j]を1対n放送す
る。1対n放送は、まず隣接するPE(1,j)にb
[0][j]を転送し、次にPE(1,j)がPE(2,j)
にb[0][j]を転送し……、最後にPE(n−1,j)に
b[0][j]が転送される、という形式で、放送されるデー
タb[0][j]が、PE間でシフトされることによって、n
−1サイクルで実行できる(ステップ117〜11
8)。
【0193】(3) 各PE(i,j)(0≦i≦n−
1,0≦j≦n−1)で(II)式の演算を行う(ステッ
プ119)。
1,0≦j≦n−1)で(II)式の演算を行う(ステッ
プ119)。
【0194】(4) 2回目の演算に必要なデータとし
て、2行目のPE(1,j)(0≦j≦n−1)が、列
方向のPE25にb[1][j]を1対n放送する(ステップ
120〜118)。
て、2行目のPE(1,j)(0≦j≦n−1)が、列
方向のPE25にb[1][j]を1対n放送する(ステップ
120〜118)。
【0195】(5) 2回目の演算として、 (III)式を
計算する(ステップ119)。
計算する(ステップ119)。
【0196】(6) 以上を繰り返すことによって、行
列の乗算を行うことができる(ステップ118〜12
1)。
列の乗算を行うことができる(ステップ118〜12
1)。
【0197】ここでは、行方向にあらかじめn対n放送
ですべてのデータを保持し、列方向の1対n放送と演算
を繰り返す方法を示したが、列方向に関してあらかじめ
n対n放送ですべてのデータを保持する場合も、全く同
様に実行できる。
ですべてのデータを保持し、列方向の1対n放送と演算
を繰り返す方法を示したが、列方向に関してあらかじめ
n対n放送ですべてのデータを保持する場合も、全く同
様に実行できる。
【0198】この乗算手順2では、各PE25で演算に
必要なメモリ量は、行あるいは列のどちらか一方の全デ
ータとなるのでn個でよく、従来方式の1/2 ですむ。ま
た、データ転送時間は、最初の行方向のn対n放送はn
−1サイクル、その後の列方向の1対n放送がn−1サ
イクルでn回なので、総転送サイクル数は、n*(n−
1)+n−1サイクルとなり、行、列両方向に1対n放
送を行う場合の1/2 に短縮される。
必要なメモリ量は、行あるいは列のどちらか一方の全デ
ータとなるのでn個でよく、従来方式の1/2 ですむ。ま
た、データ転送時間は、最初の行方向のn対n放送はn
−1サイクル、その後の列方向の1対n放送がn−1サ
イクルでn回なので、総転送サイクル数は、n*(n−
1)+n−1サイクルとなり、行、列両方向に1対n放
送を行う場合の1/2 に短縮される。
【0199】さらに、図19で示したように、行方向、
列方向のPE25に対して、1サイクルで行方向の全て
のPEあるいは、列方向の全てのPEに放送が行えるよ
うな、x−yバス結合方式を考えることもできる。x−
yバス結合は、同じ行に存在するPE(i,0)〜PE
(i,n−1)(0≦i≦n−1)がバス結合され、ま
た、同じ列に存在するPE(0,j)〜PE(n−1,
j)(0≦j≦n−1)がバス結合される結合方式であ
る。
列方向のPE25に対して、1サイクルで行方向の全て
のPEあるいは、列方向の全てのPEに放送が行えるよ
うな、x−yバス結合方式を考えることもできる。x−
yバス結合は、同じ行に存在するPE(i,0)〜PE
(i,n−1)(0≦i≦n−1)がバス結合され、ま
た、同じ列に存在するPE(0,j)〜PE(n−1,
j)(0≦j≦n−1)がバス結合される結合方式であ
る。
【0200】このx−yバス結合方式を用いて行列乗算
を行う手順は、乗算手順1,2で説明した1対n放送を
除いては、上述した方法をそのまま適用できる。データ
放送は、放送するPE25が放送データをバスに読み出
し、残りのPE25が、バスからデータを読み込むこと
で実現できるので、1回のデータ放送に要する時間は1
サイクルである。
を行う手順は、乗算手順1,2で説明した1対n放送を
除いては、上述した方法をそのまま適用できる。データ
放送は、放送するPE25が放送データをバスに読み出
し、残りのPE25が、バスからデータを読み込むこと
で実現できるので、1回のデータ放送に要する時間は1
サイクルである。
【0201】行列乗算全体としては、データ転送に要す
る時間は2*nサイクルとなり、2次元格子結合方式で
従来の乗算方式を用いた場合とほぼ同じ転送時間に迎え
られる。もちろん、演算に必要なメモリ量は、従来方式
と比較して、極めて少なくて済む。
る時間は2*nサイクルとなり、2次元格子結合方式で
従来の乗算方式を用いた場合とほぼ同じ転送時間に迎え
られる。もちろん、演算に必要なメモリ量は、従来方式
と比較して、極めて少なくて済む。
【0202】以上詳細にに述べたように、第3の発明の
並列計算機は、従来方式と比較して、PE当りの使用メ
モリ量が著しく削減できるため、PE当りのメモリ量が
少なくても乗算を実行できる。データ転送時間は、2次
元格子結合の倍は増加するが、x−yバス結合等を導入
することによって、データ転送時間を従来方式と同等に
押えることかできる。
並列計算機は、従来方式と比較して、PE当りの使用メ
モリ量が著しく削減できるため、PE当りのメモリ量が
少なくても乗算を実行できる。データ転送時間は、2次
元格子結合の倍は増加するが、x−yバス結合等を導入
することによって、データ転送時間を従来方式と同等に
押えることかできる。
【0203】ここで用いた演算式(I)は、各繰り返し
において、すべてのPE25で同じ演算を行う。また、
データ転送も、行、あるいは列単位で同じ処理を行うの
で、SIMD計算機に適合した乗算方法であるといえ
る。しかし、MIMD(Multiple Instruction Multipl
e Data Stream )型並列計算機でももちろん実行可能で
ある。このMIMD計算機は、各PE25が命令メモ
リ、命令デコーダ部を持ち、各PE25で異なった処理
を行えるのが特徴であるが、この第3の発明の乗算方法
も実行可能である。
において、すべてのPE25で同じ演算を行う。また、
データ転送も、行、あるいは列単位で同じ処理を行うの
で、SIMD計算機に適合した乗算方法であるといえ
る。しかし、MIMD(Multiple Instruction Multipl
e Data Stream )型並列計算機でももちろん実行可能で
ある。このMIMD計算機は、各PE25が命令メモ
リ、命令デコーダ部を持ち、各PE25で異なった処理
を行えるのが特徴であるが、この第3の発明の乗算方法
も実行可能である。
【0204】
【発明の効果】第1の発明によれば、依存関係のある命
令ごとに命令群を構成し、命令群を1つの単位として命
令スケジューリングを行うことで、命令によって実行時
間の異なる場合でも、実行時間が最も短縮されるような
命令列にコンパイルすることができる。また、命令群を
単位としてスケジューリングを行うため、スケジューリ
ングを効率よく行うことができるようになる。
令ごとに命令群を構成し、命令群を1つの単位として命
令スケジューリングを行うことで、命令によって実行時
間の異なる場合でも、実行時間が最も短縮されるような
命令列にコンパイルすることができる。また、命令群を
単位としてスケジューリングを行うため、スケジューリ
ングを効率よく行うことができるようになる。
【0205】また、第2の発明の並列計算機によれば、
1次元状または2次元状に配置された複数プロセッサを
もつ並列計算機上で、連立一次方程式の求解を数値的特
性を損うことなく、隣接するプロセッサ間のみデータ通
信を行なえばよいため、効率よく高速に実行することが
可能となる。
1次元状または2次元状に配置された複数プロセッサを
もつ並列計算機上で、連立一次方程式の求解を数値的特
性を損うことなく、隣接するプロセッサ間のみデータ通
信を行なえばよいため、効率よく高速に実行することが
可能となる。
【0206】さらに、第3の発明の並列計算機によれ
ば、各演算要素プロセッサ当たりのメモリ量が少なくて
も、行列の乗算が実行可能である。大規模行列乗算を、
多数の演算要素プロセッサで構成し、特に演算要素プロ
セッサ当たりのメモリ量に制限がある場合に効果的であ
る。
ば、各演算要素プロセッサ当たりのメモリ量が少なくて
も、行列の乗算が実行可能である。大規模行列乗算を、
多数の演算要素プロセッサで構成し、特に演算要素プロ
セッサ当たりのメモリ量に制限がある場合に効果的であ
る。
【図1】第1の発明のコンパイラの構成を示すブロック
図。
図。
【図2】図1で示した命令スケジューリング部のフロー
チャート。
チャート。
【図3】第1の発明のコンパイラによるスケジューリン
グ方法を説明する際に用いられた、ソースプログラム及
びスケジューリング前の命令列。
グ方法を説明する際に用いられた、ソースプログラム及
びスケジューリング前の命令列。
【図4】第1の発明におけるスケジューリングを説明す
るための命令群構成及び各命令群の実行時間と次命令発
行可能時間一覧表。
るための命令群構成及び各命令群の実行時間と次命令発
行可能時間一覧表。
【図5】第1の発明による命令スケジューリング後の命
令列及び実行の様子。
令列及び実行の様子。
【図6】第2の発明における2次元領域をシミュレーシ
ョンする際の並列計算機の構成図。
ョンする際の並列計算機の構成図。
【図7】第2の発明における3次元領域をシミュレーシ
ョンする際の並列計算機の構成図。
ョンする際の並列計算機の構成図。
【図8】第2の発明における並列計算機の動作を表すフ
ローチャート。
ローチャート。
【図9】物理領域を2次元状に分割したときの格子点。
【図10】2次元領域の問題で不完全LU分解(1,
1)をして得られる下三角行列L。
1)をして得られる下三角行列L。
【図11】2次元領域の問題で不完全LU分解(1,
1)を用いた場合の、解の計算の依存関係を表す図。
1)を用いた場合の、解の計算の依存関係を表す図。
【図12】2次元領域の問題で不完全LU分解(1,
2)をして得られる下三角行列L。
2)をして得られる下三角行列L。
【図13】2次元領域の問題で不完全LU分解(1,
2)を用いた場合の、解の計算の依存関係を表す図。
2)を用いた場合の、解の計算の依存関係を表す図。
【図14】物理領域を3次元状に分割したときの格子
点。
点。
【図15】3次元領域の問題で不完全LU分解(1,
1,1)をして得られる下三角行列L。
1,1)をして得られる下三角行列L。
【図16】3次元領域の問題で不完全LU分解(1,
1,1)を用いた場合の、解の計算の依存関係を表す
図。
1,1)を用いた場合の、解の計算の依存関係を表す
図。
【図17】第3の発明の並列計算機に係わる一実施例の
構成を示すブロック図。
構成を示すブロック図。
【図18】図17で示した演算実行部の一構成例。
【図19】図18と異なる演算実行部の一構成例。
【図20】第3の発明における行列乗算手順を示すフロ
ーチャート。
ーチャート。
【図21】第3の発明における行方向のデータ放送の様
子を示す図。
子を示す図。
【図22】第3の発明における列方向のデータ放送の様
子を示す図。
子を示す図。
【図23】図21と同様な行方向のデータ放送の様子を
示す図。
示す図。
【図24】図22と同様な列方向のデータ放送の様子を
示す図。
示す図。
【図25】図20と異なる行列乗算手順を示すフローチ
ャート。
ャート。
【図26】代表的なパイプラインと実行の様子。
【図27】従来のコンパイラを説明するための計算機の
構成、ソースプログラム、及びスケジューリング前の命
令列。
構成、ソースプログラム、及びスケジューリング前の命
令列。
【図28】図27で示した命令列の実行の様子及び命令
列に対する依存有向グラフ。
列に対する依存有向グラフ。
【図29】従来のコンパイラによって得られるパター
ン。
ン。
【図30】図29で示した各パターンに対する実行の様
子。
子。
【図31】第3の発明に対する従来の並列計算機の構成
例。
例。
【図32】図31で示した各PEに初期データが配置さ
れた様子を示す図。
れた様子を示す図。
【図33】2つの4×4行列の積を示す数式。
【図34】第3の発明に対する従来の行列乗算手順を示
すフローチャート。
すフローチャート。
【図35】図31で示した各PEが必要な全データを保
持した様子を示す図。
持した様子を示す図。
1 ソースプログラム 2 ソースプログラム入力部 3 字句解析部 4 構文解析部 5 中間コード生成部 6 命令スケジューリング部 7 最適化部 8 中間コード最適化部 9 オブジェクトコード生成部 10 目的プログラム出力部 11 目的プログラム (1)〜(4),(1,1)〜(3,3) プロセッサ 13 ローカルメモリ 21 演算制御部 22 演算実行部 23 データバス 24 命令メモリ 25 PE(演算プロセッサ) 26 データメモリ 27 ネットワーク
Claims (4)
- 【請求項1】 並列に実行可能な複数の演算器を備え、
命令をパイプラインで処理する計算機で使用される目的
プログラムを生成するコンパイラであって、 基本ブロック内の命令列に対し、依存関係のある命令毎
に命令群を構成し、命令群を単位として、パイプライン
の空き状態が小さくなるように命令群の実行順序の入れ
換え、繰り上げ、あるいは繰り下げを行う命令スケジュ
ーリング部を備え、 命令列の実行時間が最も短くなるように最適化を図るこ
とを特徴とするコンパイラ。 - 【請求項2】 2次元の格子状に分割された2次元領域
の物理現象のシミュレーションであらわれる連立一次方
程式を解く、複数個のプロセッサからなる並列計算機で
あって、 第iプロセッサは、第(i−1)プロセッサから送出さ
れた物理量を受信する受信手段と、受信した物理量を用
いてこの第iプロセッサに対する格子点の物理量を計算
する計算手段と、計算した物理量を記憶する記憶手段
と、計算した物理量を第(i+1)プロセッサへ送出す
る送信手段とを有し、 前記2次元格子の第i行上の格子点の物理量計算を第i
プロセッサに割り当て、この第iプロセッサは、第i行
上の割り当てられた格子点の物理量計算が可能になった
とき以降、第(i−1)プロセッサの送信手段によって
送出された物理量を受信手段で受信し、受信した物理量
を用いて割り当てられた格子点の物理量を計算手段で計
算し、計算した物理量を記憶手段で記憶すると共に、送
信手段で第(i+1)プロセッサへ送出することを、第
i行のすべての格子点について繰り返すことを特徴とす
る並列計算機。 - 【請求項3】 3次元の格子状に分割された3次元領域
の物理現象のシミュレーションであらわれる連立一次方
程式を解く、複数個のプロセッサからなる並列計算機で
あって、 (i,j)プロセッサは、(i−1,j)プロセッサ及
び(i,j−1)プロセッサから送出された物理量を受
信する受信手段と、受信した物理量を用いてこの(i,
j)プロセッサに対する格子点の物理量を計算する計算
手段と、計算した物理量を記憶する記憶手段と、計算し
た物理量を(i,j+1)プロセッサおよび(i+1,
j)プロセッサプロセッサへ送出する送信手段とを有
し、 前記3次元格子の同一軸上の格子点の物理量計算を同一
プロセッサに割り当て、(i,j)プロセッサは、割り
当てられた同一軸上の格子点の物理量計算が可能になっ
たとき以降、(i−1,j)プロセッサ及び(i,j−
1)プロセッサの送信手段によって送出された物理量を
受信手段で受信し、受信した物理量を用いて割り当てら
れた格子点の物理量を計算手段で計算し、計算した物理
量を記憶手段で記憶すると共に、送信手段で(i+1,
j)プロセッサ及び(i,j+1)プロセッサへ送出す
ることを、割り当てられた同一軸上のすべての格子点に
ついて繰り返すことを特徴とする並列計算機。 - 【請求項4】 2次元状に配置された複数の演算要素プ
ロセッサから構成される並列プロセッサで、2つの行列
の積を求める並列計算機であって、 第1の行列データと第2の行列データを、該2つの行列
で同じ割り付けを行い、 該行列の行方向のデータを持つ演算プロセッサ間で、1
つの演算プロセッサから他の複数の演算プロセッサへデ
ータを放送する手段と、該行列の列方向のデータを持つ
演算プロセッサ間で、1つの演算プロセッサから他の複
数の演算プロセッサへデータを放送する手段と、 繰り返し回数を制御する手段と、 該データ放送と演算プロセッサでの演算を制御する制御
手段とを備え、 該第1の行列の、繰り返し回数で指定される1列のデー
タを保持する各演算プロセッサが、各列データと同じ行
に属するデータを保持する複数の演算プロセッサに対し
て各列データを同時並列に転送し、 該第2の行列の、繰り返し回数で指定される1行のデー
タを保持する各演算プロセッサが、各行データと同じ列
に属するデータを保持する複数の演算プロセッサに対し
て各行データを同時並列に転送し、 各演算プロセッサで、転送された該第1の行列のデータ
と、転送された該第2のデータの2つの数の積を求め、
該積を繰り返し毎に累算し、 以上の操作を、行列の大きさから得られる所定回数だけ
繰り返すことによって、行列の積を求めることを特徴と
する並列計算機。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP4178589A JPH0628324A (ja) | 1992-07-06 | 1992-07-06 | 並列計算機及びコンパイラ |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP4178589A JPH0628324A (ja) | 1992-07-06 | 1992-07-06 | 並列計算機及びコンパイラ |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| JPH0628324A true JPH0628324A (ja) | 1994-02-04 |
Family
ID=16051113
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP4178589A Pending JPH0628324A (ja) | 1992-07-06 | 1992-07-06 | 並列計算機及びコンパイラ |
Country Status (1)
| Country | Link |
|---|---|
| JP (1) | JPH0628324A (ja) |
Cited By (4)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JP2005509959A (ja) * | 2001-11-14 | 2005-04-14 | インターディジタル テクノロジー コーポレイション | 線形システム解法のためのアレイ処理 |
| JP2011198198A (ja) * | 2010-03-23 | 2011-10-06 | Nec System Technologies Ltd | 命令スケジューリング装置、命令スケジューリング方法および命令スケジューリングプログラム |
| US20150006866A1 (en) * | 2013-06-28 | 2015-01-01 | International Business Machines Corporation | Optimization of instruction groups across group boundaries |
| US20150006852A1 (en) * | 2013-06-28 | 2015-01-01 | International Business Machines Corporation | Forming instruction groups based on decode time instruction optimization |
-
1992
- 1992-07-06 JP JP4178589A patent/JPH0628324A/ja active Pending
Cited By (11)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JP2005509959A (ja) * | 2001-11-14 | 2005-04-14 | インターディジタル テクノロジー コーポレイション | 線形システム解法のためのアレイ処理 |
| US7606207B2 (en) | 2001-11-14 | 2009-10-20 | Interdigital Technology Corporation | User equipment and base station performing data detection using a scalar array |
| JP2011198198A (ja) * | 2010-03-23 | 2011-10-06 | Nec System Technologies Ltd | 命令スケジューリング装置、命令スケジューリング方法および命令スケジューリングプログラム |
| US20150006866A1 (en) * | 2013-06-28 | 2015-01-01 | International Business Machines Corporation | Optimization of instruction groups across group boundaries |
| US20150006852A1 (en) * | 2013-06-28 | 2015-01-01 | International Business Machines Corporation | Forming instruction groups based on decode time instruction optimization |
| US9348596B2 (en) * | 2013-06-28 | 2016-05-24 | International Business Machines Corporation | Forming instruction groups based on decode time instruction optimization |
| US9361108B2 (en) | 2013-06-28 | 2016-06-07 | International Business Machines Corporation | Forming instruction groups based on decode time instruction optimization |
| US9372695B2 (en) | 2013-06-28 | 2016-06-21 | Globalfoundries Inc. | Optimization of instruction groups across group boundaries |
| US9477474B2 (en) | 2013-06-28 | 2016-10-25 | Globalfoundries Inc. | Optimization of instruction groups across group boundaries |
| US9678757B2 (en) | 2013-06-28 | 2017-06-13 | International Business Machines Corporation | Forming instruction groups based on decode time instruction optimization |
| US9678756B2 (en) | 2013-06-28 | 2017-06-13 | International Business Machines Corporation | Forming instruction groups based on decode time instruction optimization |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| Gupta et al. | Demonstration of automatic data partitioning techniques for parallelizing compilers on multicomputers | |
| CN109144702B (zh) | 一种用于行列并行粗粒度可重构阵列多目标优化自动映射调度方法 | |
| Polychronopoulos | Parallel programming and compilers | |
| US5822593A (en) | High-level loop fusion | |
| Gross et al. | Compilation for a high-performance systolic array | |
| Duarte et al. | Parallel variable neighbourhood search strategies for the cutwidth minimization problem | |
| JP3626784B2 (ja) | 分散メモリ型並列計算機におけるデータ更新方法およびプログラム変換装置 | |
| JP3047998B2 (ja) | 並列計算機におけるプロセッサ割り当て方法、及び装置 | |
| US11928468B2 (en) | Systems and methods for improved mapping of computational loops on reconfigurable architectures | |
| Shterenlikht et al. | Fortran 2008 coarrays | |
| Azad et al. | Computing maximum cardinality matchings in parallel on bipartite graphs via tree-grafting | |
| Wu et al. | TurboMGNN: Improving concurrent GNN training tasks on GPU with fine-grained kernel fusion | |
| US7076777B2 (en) | Run-time parallelization of loops in computer programs with static irregular memory access patterns | |
| Lim | Improving parallelism and data locality with affine partitioning | |
| JPH0628324A (ja) | 並列計算機及びコンパイラ | |
| US11449254B1 (en) | Managed bulk memory | |
| CN119536701B (zh) | 一种面向张量加速器的模板计算代码生成方法及系统 | |
| De Gloria et al. | An evaluation system for application specific architectures | |
| Brezany | Input/output intensive massively parallel computing: language support, automatic parallelization, advanced optimization, and runtime systems | |
| JPH04293150A (ja) | コンパイル方法 | |
| El-Rewini | Task partitioning and scheduling on arbitrary parallel processing systems | |
| Bagliy et al. | Automatic mapping of sequential programs to parallel computers with distributed memory. | |
| CN120523450B (zh) | 基于risc-v开源芯片硬件感知的多层中间表示编译器实现方法 | |
| Melin et al. | A structured synchronization and communication model fitting irregular data accesses | |
| Wang | Symbolic computation and parallel software |