JP2729795B2 - 並列計算機及びその制御方法 - Google Patents

並列計算機及びその制御方法

Info

Publication number
JP2729795B2
JP2729795B2 JP62290711A JP29071187A JP2729795B2 JP 2729795 B2 JP2729795 B2 JP 2729795B2 JP 62290711 A JP62290711 A JP 62290711A JP 29071187 A JP29071187 A JP 29071187A JP 2729795 B2 JP2729795 B2 JP 2729795B2
Authority
JP
Japan
Prior art keywords
instruction
instructions
element instruction
execution unit
sequence
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.)
Expired - Lifetime
Application number
JP62290711A
Other languages
English (en)
Other versions
JPH01133138A (ja
Inventor
坦 渡辺
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hitachi Ltd
Original Assignee
Hitachi Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP62290711A priority Critical patent/JP2729795B2/ja
Publication of JPH01133138A publication Critical patent/JPH01133138A/ja
Application granted granted Critical
Publication of JP2729795B2 publication Critical patent/JP2729795B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Landscapes

  • Advance Control (AREA)
  • Devices For Executing Special Programs (AREA)

Description

【発明の詳細な説明】 [産業上の利用分野] 本発明は、複数の処理ユニット又は機能ユニットを備
えてプログラムの諸部分を並列に実行する並列計算機
と、そのための並列化コンパイラに関し、特に、各処理
ユニットのための制御情報の集合が一つの命令語を形成
する型の並列計算機と、並列化を意識せずに作られたプ
ログムをこのような並列計算機のための命令語の列に変
換するコンパイラに関する。 [従来の技術] 複数の機能ユニットを単一の命令が同時に制御し、そ
れによりプログラムを並列に実行する型の並列計算機
と、そのための並列化コンパイラは、1986年The MIT Pr
ess発行、J.R.Ellis著、「ブルドッグ:VLIWアーキテク
チャのためのコンパイラ」(Bulldog:A Compiler for V
LIW Architectures)で論じられている。このVLIW型計
算機では、各命令はそれぞれが一つの機能ユニットに対
応付けられた固定数のフィールドからなり、各フィール
ドが対応する機能ユニットの動作を制御する。多数の機
能ユニットがあるので、命令は非常に長く、ここからVL
IWという名称(Very Long Instruction Word)が与えら
れている。複数の機能ユニットが共有するレジスタバン
クを設けることも示唆されている。 この型の並列計算機に対しては、各機能ユニットがい
つ動作し、データ転送がどこからどこへいつ行なわれる
べきかを、逐一明示的にプログラムしなければならな
い。このようなプログラムを人手で作成するのは極めて
困難であり、したがって、効率良く並列化を行なえるコ
ンパイラを用意することが不可欠である。前記VLIW型計
算機のためのコンパイラは、トレーススケジューリング
と呼ばれる方法を用いて、大域的なフロー解析と実行頻
度予測を行ない、中間コードプログラム中の多数の基本
ブロックの連鎖、すなわちトレースの内部での並列化を
行ない、それにより、非常に高度な並列化を達成する。 [発明が解決しようとする問題点] 前記のVLIW計算機では、各命令がそれぞれ各機能ユニ
ットに固定的に対応付けられた一定数のフィールドから
なるため、命令が非常に長く、しかも、実際に同時に動
作する機能ユニットの個数に関係なく、すなわち、同時
に実行しうる要素的演算が少ないためにいくつかの機能
ユニットが休止する場合でも、命令長は常に一定であ
る。その結果、プログラムが占める記憶領域が必要以上
に広くなり、かつ、命令列取出しのための総記憶アクセ
ス時間もそれに対応して増大する。 また、レジスタバンクは、諸機能ユニットにより共有
されるので、それへのアクセス競合が処理の遅れを生じ
ることのないように、レジスタバンクへのアクセス回数
を減らすことが望ましい。 更に、VLIW計算機用のコンパイラでは、高度な並列化
の達成のためのトレーススケジューリングが、コンパイ
ラを複雑化し、かつ、コンパイル時間を長くしている。
しかし、実用上はそれほど高度な並列化を必要としない
場合が多く、そのような場合には、もっと単純で、しか
も効率のよいコンパイラが望ましい。 本発明の主たる目的は、命令データ量を圧縮して、そ
れにより、プログラムのために必要な記憶領域と記憶ア
クセス時間を削減することにある。 本発明の第2の目的は、共有レジスタ群へのアクセス
回数を減らし、それにより、処理の遅れを防止すること
にある。 本発明の第3の目的は、実用上多くの場合に充分な程
度の並列化を効率よく行なえるような、単純な構造のコ
ンパイラを提供することにある。 [問題点を解決するための手段] 命令データ量の圧縮のために、本発明の並列計算機に
は、プログラム中の要素命令の実行ユニットへの分配態
様が可変な命令分配機構が設けられる。この機構は、相
次ぐ要素命令を1要素命令実行ユニットに1要素命令ず
つ分配するが、並行実行のために一時に分配する要素命
令の個数が、ある要素命令に含まれる制御情報により指
定される。一時に分配する要素命令の個数は、更に、順
序制御(例えば、分岐)要素命令が実行された時に、予
め定められた値に自動的に設定されてもよい。前記の制
御情報は、各要素命令の分配先を指定してもよく、ま
た、特定の型の要素命令のみがこれを含みうるようにし
てもよい。並列化コンパイラは、同時に実行しうる複数
の要素命令を併合して単一の命令を形成しつつ命令列を
生成する並列化過程において、要素命令数を異にする二
つの命令が隣接する所に、分配先を指定する前記制御情
報を含む要素命令を挿入する。 好ましい実施例においては、共有されるレジスタファ
イルのレジスタは相対番地により指定され、各実行ユニ
ットはそれ専用のオペランド用レジスタ(例えば、専用
アキュムレータ)を有し、並列化コンパイラは、並列化
過程において、任意多数の仮想実行ユニットを想定し、
実行ユニット内にデータを保持しておかねばならない区
間の要素命令列である断片的要素命令列を一つの仮想実
行ユニットに割り当てて、その後に、各仮想実行ユニッ
トを実在実行ユニットに割付ける。 [作用] 一時に分配される要素命令の個数は、必要に応じてプ
ログラム中に挿入される制御情報により変更可能であ
る。したがって、実際に実行すべき有意の要素命令のみ
から各命令を構成し、実行すべき有意の要素命令がない
実行ユニットのためのフィールドを省略することができ
る。その結果、固定数のフィールドからなる命令を用い
る従来装置に比して、命令データ量が圧縮される。ま
た、実施例に採用されたレジスタの相対番地指定も、各
要素命令の長さを短縮し、それにより、命令データ量の
圧縮に寄与する。 実施例において、専用のオペランド用レジスタの設置
は、レジスタから取出したデータや中間演算結果を保持
し、それにより、レジスタファイルへのアクセス回数を
低減する。更に、コンパイラによる並列化過程におい
て、任意多数の仮想実行ユニットにそれぞれ断片的要素
命令列を割当てて、然る後に各仮想実行ユニットを実在
実行ユニットに割付ける手順は、要素命令列の生成と並
列化を分離するとともに、並列化の手続きを簡明なもの
とし、それにより、コンパイラの構造を単純化するとと
もに、並列化処理の効率を改善する。 [実施例] 第1図は、本発明による並列計算機の一実施例の構成
を示す。この計算機は、4台の同型の実行ユニット1,2,
3,4と、多数のレジスタからなり前記諸実行ユニットに
より共有されるレジスタファイル5を備える。これら実
行ユニットのそれぞれは、また、主記憶アクセス制御機
構6を介して、データの読出し又は書込みのために主記
憶7にアクセスすることができる。主記憶7は、また、
プログラムを保持する。命令シーケンス制御機構8は、
図示されていないが、プログラムカウンタと、プログラ
ムカウンタの値に基づいて主記憶7の読出位置を指示す
る命令番地レジスタとを有し、プログラムを構成する相
次ぐ命令を主記憶7から順次読出して、FIFO型の命令バ
ッファ9に格納する。各命令は、後で詳述するように、
一般に複数の要素命令からなり、これらの要素命令が異
なる実行ユニットで同時に実行される。命令供給器10
は、命令供給制御ベクトル11の指示の下に、命令バッフ
ァ9から相次ぐ命令を順次読出して、各命令内の要素命
令を実行ユニット1〜4に分配する。 命令供給制御ベクトル11は、4ビット長のレジスタで
あり、その各ビット位置はスロットと呼ばれ、第1ない
し第4スロットは実行ユニット1ないし4への要素命令
の供給の要否を示す。すなわち、第kスロット(1≦k
≦4)は、その値が1の時に実行ユニットkに供給され
るべき要素命令があることを示し、その値が0の時に実
行ユニットkに供給されるべき要素命令がないことを示
す。命令供給制御ベクトル11の内容は、後で詳述するPR
OC命令を実行した実行ユニットにより、そのPROC命令が
指定する値に設定され、それにより、命令に含まれる要
素命令の個数を、並列化の可能な要素命令の個数に応じ
てダイナミックに変更することを可能にし、その結果、
固定数の要素命令からなる命令を使用する従来装置と比
較して、プログラムのためのデータ量、したがって、必
要な記憶容量及び命令読出しのための記憶アクセスが減
少する。また、命令供給制御ベクトル11は、初期状態設
定時の他に、各種の分岐、副プログラムの呼出しとそれ
からの復帰などの順序制御要素命令が、いずれかの実行
ユニットで実行されると、分岐が生じたか否かにかかわ
りなく、予め定められた値(本実施例では100)にリセ
ットされる。この自動リセット機能により、後述するよ
うに、分岐等の順序制御が関連するプログラムを簡素化
することができる。 実行ユニット1〜4のそれぞれは、図示されていない
が、命令解読・実行回路、アドレス計算器、算術・論理
演算器等を備え、通常の汎用プロセッサと同程度の命令
レパートリを持つ。特に、各実行ユニットは、通常のプ
ロセッサが必要とする各種レジスタとしてはレジスタフ
ィイル5を用いるけれども、アキュムレータ(Acc)は
内蔵しており、そこに演算結果又はレジスタファイル5
から読出したデータが保持されることにより、レジスタ
フィルタ5への所要アクセス回数が削減される。 レジスタフィルタ5は、大きな容量を持ち、諸実行ユ
ニットからの中間結果や使用頻度の高いデータを保持す
るのに主として使用され、それにより、主記憶7へのア
クセス回数を減らし、かつ、諸実行ユニット間の交信の
ためのオーバヘッドを削減する。レジスタファイル5
は、このような多数の汎用レジスタに加えて、スタック
とスタックポインタ、後述する相対番地のための領域レ
ジスタ群などの、特殊目的レジスタ群を含む。 要素命令のフォーマットの例を、第2図(a),
(b)に示す。本実施例における各要素命令は、16ビッ
トの固定長である。第2図(a)は、オペランドの番地
を指定する型の代表的な要素命令のフォーマットであ
る。大容量のレジスタファイルを短い要素命令で扱い、
それにより、プログラムのための記憶領域と記憶アクセ
ス時間を削減するために、相対番地が用いられる。7ビ
ットのオペレータ部101は、演算種別、番地モードなど
を指定する。3ビットの領域レジスタ部102は、レジス
タファイル5中で領域レジスタとして予め定められた複
数(最大8個)のレジスタの一つを指定し、各領域レジ
スタには、レジスタファイル5のある領域の先頭番地、
すなわち相対番地のためのスペース番地が、然るべき要
素命令によって設定される。6ビットの変位部103は、
前記先頭番地から所望番地までの変位を示す。したがっ
て、このフォーマットにおいては、指定されたレジスタ
番地は、領域レジスタ部102で指定された領域レジスタ
の内容と変位部103の値の和で与えられる。 多様な番地モードが用いられ、それらの一つがオペレ
ータ部101により指定される。指定された番地モードに
従って、指定されたレジスタの内容又はこの内容が指す
レジスタか主記憶位置の内容、若しくは実行ユニット内
の値(Accの内容)又はこの値が指すレジスタか主記憶
位置の内容等が、オペランドとして処理される。順序制
御要素命令については、実行ユニット内の値又は指定さ
れたレジスタの内容、若しくはこの値又は内容と当該命
令の番地の和が、分岐先番地を与える。更に、即値番地
(immediate address)のために、第2図(b)のフォ
ーマットが用いられる。このフォーマットは、領域レジ
スタ部と変位部の代りに、それ自体がオペランドとして
扱われる9ビットの即値オペランド部104を持つ。この
番地モードの採用も、レジスタファイル5へのアクセス
回数の削減に寄与する。 並行して実行しうる複数の要素命令が一個の命令を構
成し、このような命令の列がプログラムを形成する。第
2図(c)は命令列の一例を示す。図において、I
JK(j=1,2,3,…;1≦k≦4)は、第jステップにおい
て第k実行ユニットにより実行されるべき要素命令を表
し、一つの行、すなわち同一ステップにおいて実行され
るべき要素命令群が、一つの命令を構成する。例えば、
第1ステップでは、第1ないし第4実行ユニットのすべ
てに要素命令が供給される。第2ステップでは、第1、
第2及び第3実行ユニットには要素命令が供給される
が、第4実行ユニットは、要素命令の供給を受けず、し
たがって、以前の内部状態を維持する。 実際には、主記憶7及び命令バッファ9の内部におい
て、第2図(c)に示されるような、各命令が分離・整
置された配置が実現されているわけではなく、すべての
要素命令が間隙なく詰込まれている。命令シーケンス制
御機構8は、命令バッファ9に一定量の空所が生じる
と、そこに入るだけの要素命令列を主記憶7からそこへ
読出し、命令供給器10は、命令供給制御ベクトル11が示
す個数の要素命令を命令バッファ9の先頭から読出し
て、それらを命令供給制御ベクトル11が指す実行ユニッ
ト(1〜4)に順番に供給する。要素命令を受けた各実
行ユニットは、その実行を終了すると、命令シーケンス
制御機構8に終了信号を送り、命令シーケンス制御機構
8は、命令供給制御ベクトルが示すすべての実行ユニッ
トから終了信号を受けると、図示されていないプログラ
ムカウンタを進歩させるとともに、命令供給器10に次の
命令の読出しを指示する。 ある実行ユニットで分岐等の順序制御要素命令が実行
されると、その結果が命令シーケンス制御機構8に報告
されて、図示されていないプログラムカウンタに分岐番
地が設定され、それの旧内容はスタックに保持される。
命令シーケンス制御機構8は、続いて、命令バッファ9
をクリアし、それから、プログラムカウンタの新内容が
指す主記憶番地及びその後続番地から新しい命令列を読
出し、命令バッファ9に書込む。したがって、いずれか
の実行ユニットにおいて生じた分岐は、全実行ユニット
に対してその効力を生じ、リセットされた命令供給制御
ベクトル11の指す実行ユニット群が、分岐先の命令に含
まれる要素命令群を実行することになる。 第3図は、本発明の並列化コンパイラによる処理の一
例を示すフローチャートである。与えられたソースプロ
グラムは、まず、構文解析と意味解析を受けて、中間コ
ードとして表現される(ステップ21)。それから、コン
パイラは、中間コードとして表現されたプログラムの制
御の流れ、すなわち処理の順序関係を調べて、基本ブロ
ックを抽出し、それらの基本ブロックを結ぶ有向グラフ
としてプログラムを表現する(ステップ22)。ここまで
は、従来のコンパイラと同様である。基本ブロックと
は、途中で制御の流入も流出もない最長区間の命令列で
ある。換言すれば、一つの基本ブロックは、順序制御命
令の次の命令、又は他のブロックの順序制御命令の分岐
先命令で始まり、次の順序制御命令、又は他のブロック
の順序制御命令の分岐先命令の直前の命令で終わる。 次いで、任意多数個の仮想実行ユニットを想定して、
各基本ブロック内の処理と基本ブロック間のつなぎの処
理(分岐とその関連処理)を、これら仮想実行ユニット
に対する要素命令の列に展開する(ステップ23)。その
際に、断片的要素命令列とここで呼ぶ一連の要素命令に
一つの仮想実行ユニットを割当てる。断片的要素命令列
とは、実行ユニット内にデータを(引続き利用するため
に)保存しておかなければならない区間の要素命令列を
いい、典型的には、レジスタファイル又は主記憶から実
行ユニットにデータを取出す要素命令(例えば、後述す
るLOAD)で始まり、次の同種命令の直前の命令で終る。
例えば、データを主記憶又はレジスタファイルから実行
ユニットに読出し、これを用いて何らかの処理を行な
い、その結果を主記憶又はレジスタファイルに格納する
操作系列は、断片的要素命令列である。通常、一つの基
本ブロックは、一つ又は複数の断片的要素命令列を含
む。しかし、一つの断片的要素命令列が複数の基本ブロ
ックにまたがって形成されることもありうる。 次に、ある要素命令で得られた結果を他の要素命令で
使うというようなデータ受渡し関係に着目して、要素命
令間の前後関係を解析し(ステップ24)、その前後関係
を損うことなく並列に実行できる要素命令を可能な限り
並列化することにより、各基本ブロック内で要素命令を
並列化し、同時に、実在の実行ユニットへの割当てを行
なう。具体的には、まず、各仮想実行ユニットを一つの
実在実行ユニットに割付けることにより、断片的要素命
令列の並列化を行ない、次に、実在実行ユニットが空い
ていれば、断片的要素命令列の一部を切離して、それの
並列化を試る。(ステップ25)。更に、並列度に余裕が
ある場合には、各基本ブロックの先頭部分の要素命令で
先行基本ブロックの要素命令と並列化できるものがあれ
ば、そのように並列化を行ない、あるいは、各基本ブロ
ックの末尾部分の要素命令で後続基本ブロックの要素命
令と並列化できるものがあれば、そのように並列化を行
ない、それにより、基本ブロック間で要素命令を融合す
る(ステップ26)。最後に、以上のように並列化された
要素命令群が、マシンコードに変換された後、オブジェ
クトプログラムとして出力される(ステップ27)。要素
命令列生成処理と並列化処理が分離されているので、並
列化コンパイラの構造を簡明・単純にすることができ
る。 第4図は、本発明の並列化コンパイラによる処理を例
示するために採用されたソースプログラムであり、これ
は、文字列テキストから特定の文字列パタンを探索する
プログラムの一部である。図において、記号−−の右の
文字列は注釈である。 第5a〜5c図(以下第5図と総称する)は、連結され
て、第3図におけるステップ23の処理により第4図のソ
ースプログラムから作成された、仮想実行ユニットに対
する要素命令の列(断片的要素命令列の列)を示す。こ
の図でも、記号−−の右の文字列は注釈である。各要素
命令の形式は、ラベル部と、それに続くオペレータ部
と、末尾のオペランド部とを含み、通常は、オペランド
の前に仮想実行ユニット名が置かれる。ラベルは必要に
応じて記入される。図示の例では、L10,L20等がラベル
であり、LOADAD,STORE等がオペレータであり、E01,E02
等が仮想実行ユニット名である。仮想実行ユニット名を
持たない要素命令は、孤立的で、仮想実行ユニットの割
当てを要しない要素命令である。オペランドとしてのレ
ジスタは、前に第2図(a)を参照して説明したよう
に、相対番地で記述される。ただし、第5図において
は、領域レジスタの指定は、記号<>の中に記されてい
る。また、オペランド部に記された記号#とそれに続く
数字は、第2図(b)に示す即値オペランドとして与え
られる定数を表わす。 第5図の左端の丸付き数字は、基本ブロックを示す。
例えば、行1〜11が基本ブロックを構成し、行12〜14
が基本ブロックを構成し、行15〜,16が基本ブロック
を構成し、以下同様である。 第5図に現われる各要素命令が示す演算の概要は、次
の通りである。LOAD系要素命令は、一般に、レジスタか
ら実行ユニットへのデータの取込みを示す。行1のLOAD
AD E01,8<LB>は、領域レジスタLBの内容に8を加え
た値を仮想実行ユニットE01に置くことを示し、行3のL
OADSB E01,2<STKR>は、領域レジスタSTKRの内容から
2を減じた値をE01(のAcc)に置くことを示し、行4の
LOADX E02は、E02内のデータが示す番地のレジスタの
内容をE02に取出すことを示す。STORE系要素命令は、一
般に、実行ユニット内(Acc内)のデータのレジスタへ
の転送を示す。ただし、実行ユニットはクリアされな
い。行11のSTORE1は、定数1のレジスタへの書込みを示
し、行15のSTORE0Pは、間接番地モードでの整数0の書
込みを示し、行54のSTOREPは、間接番地モードでのデー
タ転送を示す。行25のGETRは、実行ユニット内のデータ
が指す主記憶位置の内容を指定されたレジスタに読出す
ことを示し、行26のCOMFIRMGは、前記読出しの完了の確
認を指示する。 ADDは、指定されたレジスタの内容と実行ユニット内
のデータを加算してその和を実行ユニットに残すことを
示し、ADDQは、即値番地モードでの同様な加算を示す。
SUBは、実行ユニット内のデータからの減算を示す。行2
0のANDQ E06,2#11は、E06内のデータの末尾2ビット
と2進定数11のAND演算を示し、その結果、E06内のデー
タは、末尾の2ビットを残して消去される。行28のEXTR
ACTは、実行ユニット内のデータから指定されたレジス
タの内容が示す位置のバイトを抽出して、抽出したバイ
トを実行ユニット内の最下位位置に残すことを示す。CO
MPは、指定されたオペランドと実行ユニット内のデータ
の比較を示す。 BRは無条件分岐を示し、BLEとBNEとBEQは、それに先
立って実行されたCOMPの結果による条件付き分岐を示
す。BLEは、実行ユニット内のデータが指定されたオペ
ランドより小さいか又はそれと等しい場合に分岐を生
じ、BNEは、それらが等しくない場合に分岐を生じ、BEQ
は、それらが等しい場合に分岐を生じる。RETURN STKR
は、スタックポインタを用いて呼出し元ルーチンに戻る
ことを示す。これらは、順序制御要素命令である。 第6a,6b図(以下第6図と総称する)は、連結され
て、第3図のステップ25及び26の処理により第5図の要
素命令列から作られた命令列を示す。第6図では、各要
素命令はそれを実行するべき実行ユニットの表示を持た
ず、その代りに、各要素命令が記された欄位置が、それ
を実行すべき実行ユニットに対応する。すなわち、図の
左端の欄に記された要素命令群は実行ユニット1に割当
てられ、次欄の要素命令群は実行ユニット2に割当てら
れ、以下同様である。各水平行に並んだ要素命令列は一
つの命令を構成し、これらの要素命令は並行して実行さ
れる。ただし、既述のように、計算機の内部では、相次
ぐ命令は間隙なく並べられ、命令供給制御ベクトル11を
用いて各命令が切出される。 要素命令の並列化に際して、まず、仮想実行ユニット
E01を第1実行ユニットに割付け、それにより、第5図
の行1,2の要素命令を第1実行ユニットに割当てる。次
に、E02を第2実行ユニットに割付ける。E02の第3要素
命令は領域レジスタLBを使い、このレジスタの値はE01
の第2要素命令で設定されるけれども、後者が前者より
も早い時点で実行される限りは、E01の要素命令列とE02
の要素命令列は並列化することができる。E03とE04の両
要素命令列も、それらの最後の要素命令がLBを使用する
点を除けば、実行時点に制限がないから、E02の場合と
同じ条件の下で、E01の要素命令列と並列化することが
できる。ところで、プログラムの実行開始時には、命令
供給制御ベクトル11が1100にリセットされ、したがっ
て、第1及び第2実行ユニットのみが使用できる。そこ
で、第2ステップ以降で4個の要素命令を並列に実行す
るために、第1ステップで第2実行ユニットに要素命令
PROC 2#1111を与える。なお、要素命令PROCの機能は
後で詳述する。基本ブロックの最後の命令STORE1は、
レジスタLBの設定の後である限り、どの実行ユニットに
よりどの時点で実行されても支障がないので、第1実行
ユニットの空きステップに入れる。こうして、基本ブロ
ック内での並列化が終わる。次の基本ブロックの先
頭の要素命令は、ラベルL10を持ち、後方の要素命令
(行50)の分岐先なので、この要素命令を含む命令は、
第1及び第2実行ユニットのみを使用しなければならな
い。その準備として、第4ステップ(第6図行85)で空
いている実行ユニットにPROC 2#1100を与える。他の
空き実行ユニットには、何の動作も指示しない要素命令
NULLを与える。このようにして、初期処理部の並列化が
終り、第6図の行82〜85の命令列が完成する。 ラベルL10で始まる基本ブロックの要素命令列は、
ひとまず、使用可能な実行ユニットの一つ(この例では
第2実行ユニット)に割当てる。次の基本ブロックの
要素命令STOREOP及びRETURNは、同時に実行することが
でき、かつ、どの実行ユニットにより実行されてもよい
が、基本ブロックの最後の要素命令BLEの後でなけれ
ばならない。したがって、これらを、基本ブロックの
要素命令列の後に、第1及び第2実行ユニットへ適宜割
当てる。次の基本ブロックは、先頭にラベルL20を持
つ。しかし、ここへの分岐は、先行する基本ブロック
の末尾のBLEによってのみ生じ、他の基本ブロックから
の分岐は生じない。したがって、基本ブロックは、も
しも他の条件が満たされれば、基本ブロックと並列化
することができる。基本ブロックは一括して仮想実行
ユニットE06に割当てられているが、それは、TEXT(T
I)の番地ATEXTIの計算(行17〜19)と、この番地デー
タを用いて行なうTEXT(TI)の語内バイト位置DISPの計
算(行20,21)と、DISPの値が0でないときの分岐(行2
2,23)との、三つの操作からなる。ATEXTIは、次の基本
ブロックのLOAD ATEXT<LB>(行24)で使われるだ
けの局所的変数であり、DISPもそのまた次の基本ブロッ
クのEXTRACT(行28)で使われるだけである。また、
基本ブロックの要素命令のオペランドは、基本ブロッ
クによる操作の影響を受けない。したがって、基本ブ
ロックの要素命令は、基本ブロック及びより前に
実行される基本ブロックの要素命令と並列に実行でき
る。以上の理由から、基本ブロックの先頭の4要素命
令(行17〜20)を基本ブロックの要素命令と並列化す
る。このようにして、第6図の行86−90の命令列が生成
される。 基本ブロックにおいて、先頭のLOADはレジスタファ
イルの内容を変えないが、次のGETRはレジスタファイル
の内容を変える。したがって、基本ブロックの先頭の
LOADを基本ブロックの末尾のBNEと並列化する。他
方、基本ブロックのSTORE E06,DISP<LB>(行21)
によりレジスタファイルに転送されるデータは、この基
本ブロックを唯一の分岐元とする基本ブロックにお
いて、第2要素命令EXTRACTで使用されるのみであるか
ら、基本ブロックの第1要素命令LOADと同時に実行し
ても支障はない。なお、このSTOREにより転送されるべ
きデータ(行20のANDQにより実行ユニット内に得られた
データ)は、行22,23の要素命令COMP,BNEによっては破
壊されない。このようにして、第6図の行91〜94の命令
列と行95〜97の命令列が生成される。 基本ブロック〜は、PIが0よりも大きいか否かの
判定(行30,31)と、PATN(PI)とTEXT(TI)の比較
(行33〜35)と、COMPP(PI)のPIへの代入(行37〜4
0)とを含み、特に、基本ブロックとは同じ仮想実
行ユニットに割当てられているが、これら三つの操作が
扱うオペランドを調べると、行33の要素命令が行30の要
素命令で読込まれたデータを使用する点を除けば、これ
ら三つの操作を逐次的に実行しなければならない理由は
ない。したがって、行33のADDの前に行30と同じLOAD P
I<LB>を付加することにより、これら三つの操作を3
台の実行ユニットに別々に実行させることができる。本
並列計算機では、実行すべき要素命令の個数が増して
も、並列化によりステップ数が減少すれば処理速度は上
るので、前記のような並列化が行なわれる。ただし、動
作すべき実行ユニット群に第3実行ユニットが加わるの
で、PROC 2#1110の挿入が必要である。行32のBLEと
行36のBEQは、分岐先を同じくする条件付き分岐なの
で、同時に実行しても混乱は生じず、いずれか一方、又
は双方の分岐条件が満たされると、L60への飛越しが生
じる。ただし、これらの実行の結果、命令供給制御ベク
トル11(第1図)がリセットされるので、次の命令では
第1及び第2実行ユニットしか使用できない。行41のBR
は、行40のSTOREと同時に、任意の使用可能な実行ユニ
ットに実行させることができる。このようにして、第6
図の行98〜103の命令列が生成される。この例では、基
本ブロックが第3実行ユニットに割当てられ、LOAD
PI<LB>が付加された基本ブロックと行41のBRが第1
実行ユニットに割り当てられ、基本ブロックが第2実
行ユニットに割当てられている。 基本ブロックとは、PIとPATNLが等しいか否かの
判定(行42,43)と、PI及びTIのそれぞれへの1の加算
(行45,46及び行47〜49)とを行なうが、これらは並列
に実行できる。ただし、行45のADDQの前に、行42と同じ
LOAD PI<LB>の付加が必要である。逆に、第2実行ユ
ニットでは、このLOAD PI<LB>を省略することができ
る。というのは、行42のLOADのオペランドは、第2実行
ユニットで実行された行40のSTOREによりPI<LB>に書
込まれたデータであり、このデータは、第2実行ユニッ
ト内に残っているからである。行50のBRは行49のSTORE
と並列に実行できる。このようにして、第6図の行104
〜108の命令列が生成される。 最後の基本ブロックにおいては、関数値の計算と設
定(行51〜54)と、領域レジスタLBの内容の更新(行5
5,56)が行なわれるが、後者の最初の要素命令LOADSB
は、未だLBの内容を変えてないので、前者の最後の要素
命令STOREPと並列に実行できる。また、行57のRETURN
は、行56のSTOREと同時に実行してよい。このようにし
て、第6図の行109〜112の命令列が生成される。 以上のように、この例では、第5図に示された57ステ
ップの処理が、本発明による並列化コンパイラにより、
31ステップに縮少される。特に、最も高い頻度で実行さ
れる第5図の行30〜41の12ステップは、並列化により、
第6図の行98〜103の6ステップに縮少される。 各実行ユニットへの要素命令の供給を制御し、それに
対応して後続する命令の長さを規定する要素命令は、一
般に、 PROC 2#e1e2e3e4 の形式を持ち、第1図に示された命令供給制御ベクトル
11の第1ないし第4スロットに、e1ないしe4をそれぞれ
設定する。ここに、ex(1≦k≦4)は、0又は1の定
数である。命令供給制御ベクトル11の機能は、既に第1
図を参照しつつ説明した。要するに、命令供給制御ベク
トル11の第kスロットは、それが1に設定されると、以
後の命令が第k実行ユニット用の要素命令を含むことを
示し、それが0に設定されると、以後の命令が第k実行
ユニット用の要素命令を含まないことを示す。命令列の
途中で、一時的に、並列に実行できる要素命令の数が予
定数に満たなくなったときには、何の動作も指示せず、
したがって実行ユニットの状態を変えないNULL命令を、
適宜挿入すればよい。しかし、このような状態がしばら
く続く場合には、適当なPROC要素命令を与えるのがよ
い。 既述のように、命令供給制御ベクトル11は、分岐その
他の順序制御要素命令が実行されると、自動的に1100に
リセットされる。したがって、他の命令からの分岐先と
なる命令列の先頭命令は必ず2個の要素命令で構成され
るように、コンパイルしなければならない。その代償と
して、分岐先の命令列の命令長を考慮することなしに、
つまり、分岐元の命令にPROC要素命令を置くことなし
に、任意の命令長のルーチンからどのルーチンにでも飛
越すことができる。 分岐先が同じであれば、複数の条件付き分岐要素命令
を単一の命令に含めることができ、第6図の行102はそ
の一例である。このような命令が実行されると、それら
の条件付き分岐要素命令のいずれか一つについてでも条
件が満たされさえすれば特定番地への分岐が生じる。す
なわち、条件式の論理和による分岐を単一の命令により
実現することが出来る。 第5図の行12〜14は、限界値検出処理である。このよ
うな限界値検出あるいは異常検出の処理を他の処理と並
列化することにより、それらの検出を早期に行なうこと
ができる。 第1図における実行ユニット1〜4,レジスタファイル
5,主記憶アクセス制御機構6,命令シーケンス制御機構8,
命令バッファ9,命令供給器10,命令供給制御ベクトル11
のすべてを、単一の半導体チップ上に集積すれば、これ
ら構成要素間の信号伝達信号が短縮され、その結果、総
合処理速度は一層向上する。 第1図に示した実施例では、4台の実行ユニットが設
けられているが、その台数は任意である。しかし、通常
の手続き型言語で書かれたプログラムについては、多く
の場合、実現可能な並列度は2ないし4であるから、4
台の実行ユニットは、集積回路化の容易さを含めて、実
用的な観点から適正な規模といえる。 すべての実行ユニットが同一の機能を持つことは、プ
ログラムの並列化を容易にする効果がある。しかし、変
形として、整数演算用、浮動小数点演算用など、機能の
異なる複数の実行ユニットを設けてもよい。そのように
変形された実施例に対しては、並列化コンパイラは、第
3図のステップ23において、各機能について任意多数の
仮想実行ユニットがあると想定して断片的要素命令列を
作り、ステップ25における基本ブロック内並列化におい
て、各仮想実行ユニットを対応する機能の実在実行ユニ
ットに割付ける。 なお、並列化コンパイリングは、単一の仮想実行ユニ
ット(機能の異なる実行ユニットを含む並列計算機の場
合は各機能ごとに単一の仮想実行ユニット)を想定して
も、行なうことができる。この方法によれば、例えば第
5図の例で、仮想実行ユニットの表示がすべて除かれて
いる。この場合には、各断片的要素命令列の境界を示す
適当な記号を挿入するのがよい。並列化の最初の段階に
おける断片的要素命令列の実行ユニットへの割当ては、
この境界記号に基づいて行なうことができる。境界記号
を用いないと、並列化処理に際して、要素命令を走査・
解析して一つの断片的要素命令列を抽出する処理と、そ
れの実行ユニットへの割当てを、交互に反復する必要が
ある。 [発明の効果] 本発明によれば、並列計算機のための命令の長さが可
能となり、それにより、むだなフィールドを除いて、命
令データ量を圧縮することができ、したがって、プログ
ラムのために費される記憶領域と記憶アクセス時間を節
減できる。更に、好ましい実施例によれば、相対レジス
タ番地の採用により、命令データ量は一層圧縮される。 加えて、好ましい実施例によれば、アキュムレータの
設置によりレジスタファイルへのアクセス回数が減少
し、更に、任意多数の仮想実行ユニットを想定した要素
命令列の生成と、それに続く、仮想実行ユニットの実在
実行ユニットへの割付けとに分けられたコンパイル手順
は、コンパイラの構造を簡潔化するとともに、並列化処
理の効率を改善する。
【図面の簡単な説明】 第1図は本発明の並列計算機の一実施例のブロックダイ
ヤグラム、第2図は第1図の計算機で用いられる要素命
令と命令の形式を示す図、第3図は本発明の制御方法に
よる並列化コンパイラのフローチャート、第4図は第3
図のコンパイラにより並列化されて第1図の計算機によ
り実行されるべきソースプログラムの一例を示す図、第
5a図ないし第5c図は第4図のソースプログラムから生成
された要素命令列を示す図、第6a図と第6b図は第5a〜5c
図の要素命令列の並列化により得られた命令列を示す図
である。 1〜4:実行ユニット、5……レジスタファイル、7……
主記憶、8〜10……命令供給機構、11……命令供給制御
ベクトル、21〜23……要素命令列への変換ステップ、24
〜26……並列化ステップ

Claims (1)

  1. (57)【特許請求の範囲】 1.複数の要素命令を含むプログラムとデータを格納す
    る記憶装置と、前記記憶装置を共有する複数の要素命令
    実行ユニットと、前記記憶装置から読出された要素命令
    を1要素命令実行ユニットに1要素命令ずつ分配する命
    令分配手段とを備え、前記複数の要素命令の少なくとも
    一つは、並行実行のため一時に分配される要素命令の個
    数を指定する制御情報を含み、前記命令分配手段は、前
    記制御情報により指定された個数の要素命令を、並行し
    て実行されるように、1要素命令実行ユニットに1要素
    命令ずつ一時に分配する並列計算機。 2.特許請求の範囲1において、前記制御情報を更に各
    要素命令の分配先を指定し、それに従って前記命令分配
    手段は各要素命令が分配されるべき要素命令実行ユニッ
    トを指定する並列計算機。 3.特許請求の範囲1又は2において、前記命令分配手
    段は、プログラム実行順序の制御のための順序制御要素
    命令が実行された時に、予め定められた個数の要素命令
    を一時に分配するように自動的に設定される並列計算
    機。 4.特許請求の範囲1ないし3のいずれかにおいて、前
    記制御情報は特定の型の要素命令に含まれる並列計算
    機。 5.特許請求の範囲1ないし4のいずれかにおいて、前
    記複数の要素命令実行ユニットはレジスタファイルを共
    有するとともにそれぞれに専用のオペランド用レジスタ
    を有する並列計算機。 6.特許請求の範囲1ないし5のいずれかにおいて、前
    記複数の要素命令実行ユニットは同一の機能を有する並
    列計算機。 7.特許請求の範囲1ないし5のいずれかにおいて、前
    記複数の要素命令実行ユニットの少なくとも一つは他と
    異なる機能を有する並列計算機。 8.特許請求の範囲1ないし7のいずれかにおいて、少
    なくとも前記複数の要素命令実行ユニット及び命令分配
    手段が単一の半導体チップ上に集積回路として形成され
    た並列計算機。 9.特許請求の範囲1ないし8のいずれかにおいて、前
    記プログラムは複数の命令からなり、各命令は可変個数
    の要素命令からなる並列計算機。 10.各命令が可変個数の要素命令からなる一連の命令
    とデータを格納する記憶装置と、前記記憶装置を共有す
    る複数の要素命令実行ユニットと、前記記憶装置から逐
    次取出される各命令中の前記要素命令を並行実行のため
    1要素命令実行ユニットに1要素命令ずつ一時に分配す
    る命令供給手段と、特定の型の要素命令に含まれる要素
    命令分配制御情報により設定された内部状態に従って前
    記命令供給手段に要素命令の分配先を指示する命令供給
    制御手段とを備えた並列計算機を制御するための、ソー
    スプログラムを前記要素命令の列に変換するステップ
    と、同時に実行されても支障を生じない複数の要素命令
    を併合して単一の命令を形成しつつ、前記要素命令から
    一連の命令を作る並列化ステップと、前記一連の命令中
    で要素命令数の異なる二つの命令が隣接する所に前記要
    素命令分配制御情報を含む前記特定の型の要素命令を挿
    入するステップと、前記諸ステップを経て得られた命令
    列を前記記憶装置に格納するステップとを有する制御方
    法。 11.特許請求の範囲10において、前記変換ステップ
    は、要素命令実行ユニット内にデータを保持しておかな
    ければならない区間の要素命令列である断片的要素命令
    列を識別するステップを含み、前記並列化ステップは、
    一つの前記断片的要素命令列を一つの前記要素命令実行
    ユニットに割当てるとともにその断片的要素命令列と少
    なくとも部分的に同時に実行されても支障の生じない他
    の断片的要素命令列を他の前記要素命令実行ユニットに
    割当てるステップを含む制御方法。 12.特許請求の範囲11において、前記断片的要素命令
    列識別ステップはそれぞれの断片的要素命令列を異なる
    仮想要素命令実行ユニットに割当てるステップを含み、
    前記要素命令実行ユニット割当てステップにおける断片
    的要素命令列の要素命令実行ユニットへの割当ては前記
    仮想要素命令実行ユニットを前記要素命令実行ユニット
    に割付けることにより行なわれる制御方法。 13.特許請求の範囲11又は12において、前記要素命令
    実行ユニット割当てステップは前記断片的要素命令列中
    の文理可能な要素命令を同時実行によって支障が生じな
    い他の要素命令を含む命令に併合するステップを含む制
    御方法。 14.特許請求の範囲11ないし13のいずれかにおいて、
    前記並列化ステップは、制御の流入も流出も途中で生じ
    ない最長区間の要素命令列である基本ブロックごとに前
    記の要素命令実行ユニット割当てを行なうステップと、
    隣接する二つの基本ブロックの一方の要素命令を同時実
    行によって支障が生じない他方の基本ブロックの要素命
    令を含む命令に併合するステップとを含む制御方法。 15.特許請求の範囲10ないし14のいずれかにおいて、
    前記並列化ステップは同一の分岐先を持つ複数の条件付
    き分岐要素命令を単一の命令に含めるステップを含む制
    御方法。
JP62290711A 1987-11-19 1987-11-19 並列計算機及びその制御方法 Expired - Lifetime JP2729795B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP62290711A JP2729795B2 (ja) 1987-11-19 1987-11-19 並列計算機及びその制御方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP62290711A JP2729795B2 (ja) 1987-11-19 1987-11-19 並列計算機及びその制御方法

Publications (2)

Publication Number Publication Date
JPH01133138A JPH01133138A (ja) 1989-05-25
JP2729795B2 true JP2729795B2 (ja) 1998-03-18

Family

ID=17759531

Family Applications (1)

Application Number Title Priority Date Filing Date
JP62290711A Expired - Lifetime JP2729795B2 (ja) 1987-11-19 1987-11-19 並列計算機及びその制御方法

Country Status (1)

Country Link
JP (1) JP2729795B2 (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2779557B2 (ja) * 1991-07-09 1998-07-23 三菱電機株式会社 並列演算処理装置
WO1996029646A1 (fr) 1995-03-17 1996-09-26 Hitachi, Ltd. Processeur

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS5819955A (ja) * 1981-07-29 1983-02-05 Toshiba Corp 画像メモリ装置
JPS58146952A (ja) * 1982-02-26 1983-09-01 Toshiba Corp 並列計算機方式
US4766564A (en) * 1984-08-13 1988-08-23 International Business Machines Corporation Dual putaway/bypass busses for multiple arithmetic units

Also Published As

Publication number Publication date
JPH01133138A (ja) 1989-05-25

Similar Documents

Publication Publication Date Title
EP0096576B1 (en) Mechanism for creating dependency free code for multiple processing elements
US4466061A (en) Concurrent processing elements for using dependency free code
US7363467B2 (en) Dependence-chain processing using trace descriptors having dependency descriptors
US4435752A (en) Allocation of rotating memory device storage locations
US5303357A (en) Loop optimization system
CA1159151A (en) Cellular network processors
JPH1139167A (ja) 機械語命令列またはアセンブリ言語命令列を最適化する最適化装置、及び、高級言語で記載されたソースプログラムを機械語またはアセンブリ言語の命令列に変換するコンパイラ
JPH05143332A (ja) 命令スケジユーラを備えたコンピユータ・システム及び入力命令シーケンスを再スケジユールする方法
US20020019910A1 (en) Methods and apparatus for indirect VLIW memory allocation
US4853872A (en) Program execution method in a system having plural computers
KR900006008B1 (ko) 스마트 메모리군을 갖는 정보 처리 시스템
US5940621A (en) Language independent optimal size-based storage allocation
US20050283588A1 (en) Instruction control apparatus, function unit, program conversion apparatus, and language processing apparatus
KR970066865A (ko) 대역적인 동치관계의 해석에 의해 전송 명령을 삭제하는 최적화 장치
Arvind et al. A multiple processor data flow machine that supports generalized procedures
US20020032901A1 (en) Unitary data structure systems, methods, and computer program products, for global conflict determination
Plevyak et al. Type directed cloning for object-oriented programs
US5530889A (en) Hierarchical structure processor having at least one sub-sequencer for executing basic instructions of a macro instruction
US5418919A (en) Apparatus and method for concurrently executing plural tasks in which identifiers specify steps in tasks
US5276821A (en) Operation assignment method and apparatus therefor
JP2729795B2 (ja) 並列計算機及びその制御方法
US4456958A (en) System and method of renaming data items for dependency free code
US6912647B1 (en) Apparatus and method for creating instruction bundles in an explicitly parallel architecture
US5579495A (en) Information processing in which a simulation of parallelism is achieved
RU2042193C1 (ru) Вычислительная система