JP2853458B2 - 命令列切り替え方法及びそれを用いた演算プロセッサ - Google Patents
命令列切り替え方法及びそれを用いた演算プロセッサInfo
- Publication number
- JP2853458B2 JP2853458B2 JP17224592A JP17224592A JP2853458B2 JP 2853458 B2 JP2853458 B2 JP 2853458B2 JP 17224592 A JP17224592 A JP 17224592A JP 17224592 A JP17224592 A JP 17224592A JP 2853458 B2 JP2853458 B2 JP 2853458B2
- Authority
- JP
- Japan
- Prior art keywords
- instruction
- sequence
- execution
- load
- token
- 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
Links
Landscapes
- Advance Control (AREA)
Description
【0001】
【産業上の利用分野】本発明は、複数の命令列を並行し
て処理し、実行命令列に対してフオン・ノイマン方式で
動作するプロセッサにおける命令列切り替え方法及びそ
れを用いた演算プロセッサに関する。
て処理し、実行命令列に対してフオン・ノイマン方式で
動作するプロセッサにおける命令列切り替え方法及びそ
れを用いた演算プロセッサに関する。
【0002】
【従来の技術】従来のフオン・ノイマン方式で動作する
演算プロセッサにおいては、命令列を順に実行している
中で、メモリにアクセスする命令があった場合、その命
令を実行し、そのメモリアクセスが終了するまで、演算
部の処理動作は次の命令の処理に進まずにそこで待って
いるという制御方式をとっていた。特にアクセスがメモ
リ読み出し(ロード)動作の場合には読み出した値をそ
れ以降の命令で使用するために、このように待つという
動作は必須となる。
演算プロセッサにおいては、命令列を順に実行している
中で、メモリにアクセスする命令があった場合、その命
令を実行し、そのメモリアクセスが終了するまで、演算
部の処理動作は次の命令の処理に進まずにそこで待って
いるという制御方式をとっていた。特にアクセスがメモ
リ読み出し(ロード)動作の場合には読み出した値をそ
れ以降の命令で使用するために、このように待つという
動作は必須となる。
【0003】このような制御方式をとると、メモリのア
クセスを起動してからそれを終了するまでにかかる時間
が演算プロセッサの一命令を実行する時間に比べて長い
場合には、演算プロセッサが演算処理を実行せずに無駄
に費やすサイクルが生じることになり、処理性能を低下
させる原因となる。
クセスを起動してからそれを終了するまでにかかる時間
が演算プロセッサの一命令を実行する時間に比べて長い
場合には、演算プロセッサが演算処理を実行せずに無駄
に費やすサイクルが生じることになり、処理性能を低下
させる原因となる。
【0004】それを解決するために、本出願人出願の特
願平04−108071に記載の発明ではメモリをアク
セスするロード命令実行時に実行命令列を切り替え、メ
モリアクセスと他の命令列実行を並列に行なうことによ
り処理性能を高く保つことを可能にしている。
願平04−108071に記載の発明ではメモリをアク
セスするロード命令実行時に実行命令列を切り替え、メ
モリアクセスと他の命令列実行を並列に行なうことによ
り処理性能を高く保つことを可能にしている。
【0005】この方式での制御の様子は図8のように図
示できる。ここで左から右への流れが一つの命令列内で
の命令系列を表し、白丸がその中でのロード命令の発生
を、縦棒が命令列で中断動作が起こる場所、すなわちシ
ーケンスの切れ目を表す。破線が同じ点に戻っているの
は中断後ロードの直後から再開が行なわれることを示し
ている。破線の動作中他の命令列の実行が並列に行なわ
れる。
示できる。ここで左から右への流れが一つの命令列内で
の命令系列を表し、白丸がその中でのロード命令の発生
を、縦棒が命令列で中断動作が起こる場所、すなわちシ
ーケンスの切れ目を表す。破線が同じ点に戻っているの
は中断後ロードの直後から再開が行なわれることを示し
ている。破線の動作中他の命令列の実行が並列に行なわ
れる。
【0006】
【発明が解決しようとする課題】上述の方式では、メモ
リをアクセスするロード命令実行時に実行命令列を切り
替え、メモリアクセスと他の命令列実行を並列に行なう
ことにより処理性能を高く保つことを可能にしている
が、高速化のために命令キャッシュを使用している場合
には、命令列の切り替えにより命令キャッシュのミスの
確率が高くなり、実行命令フエッチ速度が低下する。
リをアクセスするロード命令実行時に実行命令列を切り
替え、メモリアクセスと他の命令列実行を並列に行なう
ことにより処理性能を高く保つことを可能にしている
が、高速化のために命令キャッシュを使用している場合
には、命令列の切り替えにより命令キャッシュのミスの
確率が高くなり、実行命令フエッチ速度が低下する。
【0007】また、特に並列に実行可能な命令列の数が
少ない場合には、たとえ前述の特願平04−10807
1記載の発明を利用しても、連続実行される部分が短か
いと、トークンメモリが空の場合にそれだけ演算処理部
がアイドルであるサイクルが多くなる。
少ない場合には、たとえ前述の特願平04−10807
1記載の発明を利用しても、連続実行される部分が短か
いと、トークンメモリが空の場合にそれだけ演算処理部
がアイドルであるサイクルが多くなる。
【0008】例えば、 データAをレジスタにロードするためのアドレス計算 データAのロード (「ロード」とはローカルまたはリモートのメモリから
データをフエッチし演算プロセッサの指定されたレジス
タへ移す動作を指す) データBをレジスタにロードするためのアドレス計算 データBのロード データAとBを使用する演算 という処理の流れがあったとする(データAとBのロー
ドは命令列切り替えを必要とする)。
データをフエッチし演算プロセッサの指定されたレジス
タへ移す動作を指す) データBをレジスタにロードするためのアドレス計算 データBのロード データAとBを使用する演算 という処理の流れがあったとする(データAとBのロー
ドは命令列切り替えを必要とする)。
【0009】上で提案した方式でもトークンメモリが空
の場合には、この命令列に関する処理の時間経過は図7
(A)のように図示できる(図で「Aのロード」の部分
はメモリより戻ってからトークンメモリに並び、それを
出て演算処理部に入るまでの時間を含んでいる)。
の場合には、この命令列に関する処理の時間経過は図7
(A)のように図示できる(図で「Aのロード」の部分
はメモリより戻ってからトークンメモリに並び、それを
出て演算処理部に入るまでの時間を含んでいる)。
【0010】このとき、「データAのロードの動作」と
「データBをレジスタにロードするためのアドレス計
算」とは本来は並列に実行できるが、制御の関係で直列
に処理されることになり、この命令列処理全体の始まっ
てから終わるまでにかかる時間が長くなり、特に、他に
十分な数の並列に実行可能な命令列がない場合には、
「Aのロード」の間、他に進める処理がなく、演算部の
稼働率が下る可能性がある、という問題が生じる。
「データBをレジスタにロードするためのアドレス計
算」とは本来は並列に実行できるが、制御の関係で直列
に処理されることになり、この命令列処理全体の始まっ
てから終わるまでにかかる時間が長くなり、特に、他に
十分な数の並列に実行可能な命令列がない場合には、
「Aのロード」の間、他に進める処理がなく、演算部の
稼働率が下る可能性がある、という問題が生じる。
【0011】もし図7(B)のように「Aのロード」
「Bのアドレス計算」を並列して実行できればこの問題
を緩和することができる。
「Bのアドレス計算」を並列して実行できればこの問題
を緩和することができる。
【0012】本発明の目的は、このような問題点を解決
し、より高い処理性能を実現する命令列切り替え方法及
びそれを用いた演算プロセッサを提供することにある。
し、より高い処理性能を実現する命令列切り替え方法及
びそれを用いた演算プロセッサを提供することにある。
【0013】
【課題を解決するための手段】第1の発明の命令列切り
替え方法は、並行して実行可能な命令列をあらかじめ複
数用意しておきそれらを切り替えながらそのうちから1
つを実行命令列として選択しその実行命令列中の命令を
順に実行する演算プロセッサで実行中の命令列の中でメ
モリからのデータロード命令発行に同期して命令列を切
り替える方法において、実行中の第1の命令列の中のロ
ード命令実行時には、そのロード命令によって得られる
ロードデータを最初に使用するあらかじめ発見しておい
たターゲット命令のアドレスを含むトークンを外部に発
行してメモリアクセス動作を起動すると共に前記ターゲ
ット命令の直前の命令まで前記第1の命令列の実行を続
行し、その後に前記第1の命令列の実行を中断し他の命
令列の実行に移り、前記メモリアクセス動作により前記
ロードデータを持つトークンが外部から入力された後に
前記第1の命令列の実行を再開するときには前記入力さ
れたトークン中に含まれる前記ターゲット命令のアドレ
スにより前記ターゲット命令から前記第1の命令列の処
理を再開することを特徴としている。
替え方法は、並行して実行可能な命令列をあらかじめ複
数用意しておきそれらを切り替えながらそのうちから1
つを実行命令列として選択しその実行命令列中の命令を
順に実行する演算プロセッサで実行中の命令列の中でメ
モリからのデータロード命令発行に同期して命令列を切
り替える方法において、実行中の第1の命令列の中のロ
ード命令実行時には、そのロード命令によって得られる
ロードデータを最初に使用するあらかじめ発見しておい
たターゲット命令のアドレスを含むトークンを外部に発
行してメモリアクセス動作を起動すると共に前記ターゲ
ット命令の直前の命令まで前記第1の命令列の実行を続
行し、その後に前記第1の命令列の実行を中断し他の命
令列の実行に移り、前記メモリアクセス動作により前記
ロードデータを持つトークンが外部から入力された後に
前記第1の命令列の実行を再開するときには前記入力さ
れたトークン中に含まれる前記ターゲット命令のアドレ
スにより前記ターゲット命令から前記第1の命令列の処
理を再開することを特徴としている。
【0014】第2の発明の演算プロセッサは、並行して
実行可能な命令列をあらかじめ複数用意しておきそれら
を切り替えながらそのうちから1つを実行命令列として
選択しその実行命令列中の命令を順に実行する演算プロ
セッサにおいて、1つの命令列内の命令を順に実行する
演算処理部と、外部から入力されたトークンを保持し前
記演算処理部に供給するトークンメモリと、前記演算処
理部からアクセスされるデータを保持するレジスタ群
と、外部で行なう動作の記述とそのとき実行中の命令中
に記述された別の命令のアドレスとを含むトークンを生
成し外部へ送出するトークン生成部と、各ロード命令に
は命令列実行を中断した後に再開するべき再開命令アド
レスを有し各命令についてはその命令実行後に直後の命
令を続行実行するか否かを示すフラグを有する命令群よ
りなるプログラムを格納し前記演算処理部へ命令列を供
給するとともに前記各部の動作を制御する命令列制御部
とを有することを特徴としている。
実行可能な命令列をあらかじめ複数用意しておきそれら
を切り替えながらそのうちから1つを実行命令列として
選択しその実行命令列中の命令を順に実行する演算プロ
セッサにおいて、1つの命令列内の命令を順に実行する
演算処理部と、外部から入力されたトークンを保持し前
記演算処理部に供給するトークンメモリと、前記演算処
理部からアクセスされるデータを保持するレジスタ群
と、外部で行なう動作の記述とそのとき実行中の命令中
に記述された別の命令のアドレスとを含むトークンを生
成し外部へ送出するトークン生成部と、各ロード命令に
は命令列実行を中断した後に再開するべき再開命令アド
レスを有し各命令についてはその命令実行後に直後の命
令を続行実行するか否かを示すフラグを有する命令群よ
りなるプログラムを格納し前記演算処理部へ命令列を供
給するとともに前記各部の動作を制御する命令列制御部
とを有することを特徴としている。
【0015】第3の発明の命令列切り替れ方法は、第1
の発明に加えて、第1の命令列の中のロード命令実行時
にはそのターゲット命令の代わりに前記ロード命令と前
記ターゲット命令のあいだにあるいずれかの第3の命令
のアドレスを含むトークンを外部に発行してメモリアク
セス動作を起動し、演算部では前記第3の命令の直前で
前記第1の命令列の実行を中断し、前記第1の命令列実
行を再開するときには前記トークン中に含まれる前記第
3の命令のアドレスにより前記第3の命令から再開する
ことを特徴としている。
の発明に加えて、第1の命令列の中のロード命令実行時
にはそのターゲット命令の代わりに前記ロード命令と前
記ターゲット命令のあいだにあるいずれかの第3の命令
のアドレスを含むトークンを外部に発行してメモリアク
セス動作を起動し、演算部では前記第3の命令の直前で
前記第1の命令列の実行を中断し、前記第1の命令列実
行を再開するときには前記トークン中に含まれる前記第
3の命令のアドレスにより前記第3の命令から再開する
ことを特徴としている。
【0016】第4の発明の命令列切り替え方法は、第1
の発明に加えて、第1の命令列の中で第1のロード命令
とそれに対応する第1のターゲット命令との間に他の第
2のロード命令が存在する場合に、前記第1のロード命
令の実行時に前記第2のロード命令のアドレスを含む第
1のトークンを外部に発行してメモリアクセス動作を起
動し、演算部では前記第2のロード命令の直前で前記第
1の命令列実行を中断して他の命令列実行に移り、後に
前記第1のトークンに含まれる前記第2のロード命令の
アドレスにより前記第2のロード命令から前記第1の命
令列の実行を再開し、前記第2のロード命令の実行時に
前記第2のロード命令に対応する第2のターゲット命令
のアドレスを含む第2のトークンを外部に発行してメモ
リアクセス動作を起動し、前記演算部では前記第2のタ
ーゲット命令の直前で前記第1の命令列実行を中断して
他の命令列実行に移り、後に前記第2のトークンに含ま
れる前記第2のターゲット命令のアドレスにより前記第
2のターゲット命令から前記第1の命令列の実行を再開
することを特徴としている。
の発明に加えて、第1の命令列の中で第1のロード命令
とそれに対応する第1のターゲット命令との間に他の第
2のロード命令が存在する場合に、前記第1のロード命
令の実行時に前記第2のロード命令のアドレスを含む第
1のトークンを外部に発行してメモリアクセス動作を起
動し、演算部では前記第2のロード命令の直前で前記第
1の命令列実行を中断して他の命令列実行に移り、後に
前記第1のトークンに含まれる前記第2のロード命令の
アドレスにより前記第2のロード命令から前記第1の命
令列の実行を再開し、前記第2のロード命令の実行時に
前記第2のロード命令に対応する第2のターゲット命令
のアドレスを含む第2のトークンを外部に発行してメモ
リアクセス動作を起動し、前記演算部では前記第2のタ
ーゲット命令の直前で前記第1の命令列実行を中断して
他の命令列実行に移り、後に前記第2のトークンに含ま
れる前記第2のターゲット命令のアドレスにより前記第
2のターゲット命令から前記第1の命令列の実行を再開
することを特徴としている。
【0017】
【作用】一つの命令列のなかで中断動作を起こさずに連
続的に実行される部分(部分命令列)であるシーケンス
長をできるだけ長くするようにして一つの命令列の実行
を継続し続けた方が、処理高速化には好ましい。言い換
えれば命令列のうち中断する必要の無いところでは中断
せずに、行けるところまで同じ命令列の実行を続行して
から、どうしても中断が必要なところで中断動作をする
ことが、より望ましいということになる。
続的に実行される部分(部分命令列)であるシーケンス
長をできるだけ長くするようにして一つの命令列の実行
を継続し続けた方が、処理高速化には好ましい。言い換
えれば命令列のうち中断する必要の無いところでは中断
せずに、行けるところまで同じ命令列の実行を続行して
から、どうしても中断が必要なところで中断動作をする
ことが、より望ましいということになる。
【0018】あるロード命令があった場合、このロード
でメモリからフエッチされレジスタに置かれるデータ
は、そのロード命令以降のどこかで参照される。従っ
て、ロード命令からそれをはじめて参照する命令(以後
これをロード命令に対する「ターゲット命令」と呼ぶ)
までの区間は、本質的にロード命令が終了して戻るのを
待つこと無く継続して実行可能であると考えられ、かつ
上で述べたようにそのほうが効率的処理が可能になる。
しかし従来方式による命令列切り替えの実現では、この
部分の前のロード命令のところで中断することが強制さ
れる。
でメモリからフエッチされレジスタに置かれるデータ
は、そのロード命令以降のどこかで参照される。従っ
て、ロード命令からそれをはじめて参照する命令(以後
これをロード命令に対する「ターゲット命令」と呼ぶ)
までの区間は、本質的にロード命令が終了して戻るのを
待つこと無く継続して実行可能であると考えられ、かつ
上で述べたようにそのほうが効率的処理が可能になる。
しかし従来方式による命令列切り替えの実現では、この
部分の前のロード命令のところで中断することが強制さ
れる。
【0019】第1および第2の発明では、ロード命令に
対応するターゲット命令のアドレスをあらがじめ調べて
おき、命令列実行の中断をターゲット命令の直前まで遅
延させることによりシーケンス長を長くし、上で述べた
問題を解決することで処理性能を高めることが可能にな
る。
対応するターゲット命令のアドレスをあらがじめ調べて
おき、命令列実行の中断をターゲット命令の直前まで遅
延させることによりシーケンス長を長くし、上で述べた
問題を解決することで処理性能を高めることが可能にな
る。
【0020】第3の発明では、上で述べた作用に加えて
ロード命令とターゲット命令との間に第1の発明の方法
を実施するうえでの障害になる命令があってもコンパイ
ル時に静的にこれを検出してその命令のアドレスを再開
アドレスとするように設定することで上と同様に処理性
能を高めることが可能になる。
ロード命令とターゲット命令との間に第1の発明の方法
を実施するうえでの障害になる命令があってもコンパイ
ル時に静的にこれを検出してその命令のアドレスを再開
アドレスとするように設定することで上と同様に処理性
能を高めることが可能になる。
【0021】第4の発明では、上で述べた作用に加えて
二つ以上のロード命令とターゲット命令が干渉しあって
いても中断後の再開アドレスを干渉を解決するように設
定することにより上と同様に処理性能を高めることが可
能になる。
二つ以上のロード命令とターゲット命令が干渉しあって
いても中断後の再開アドレスを干渉を解決するように設
定することにより上と同様に処理性能を高めることが可
能になる。
【0022】
【実施例】まず第1の発明の方法を使用する第2の発明
の装置の実施例について、図面を用いて説明する。
の装置の実施例について、図面を用いて説明する。
【0023】図1は第2の発明の演算プロセッサの一実
施例の基本構成図、図2は本演算プロセッサで使用され
るトークンの形式を示す形式図、図3は本演算プロセッ
サで使用される命令の形式を示す形式図である。
施例の基本構成図、図2は本演算プロセッサで使用され
るトークンの形式を示す形式図、図3は本演算プロセッ
サで使用される命令の形式を示す形式図である。
【0024】図1の演算プロセッサ1は、命令列が与え
られたときに内部に持つプログラムカウンタの値を1つ
ずつ増やしながらそれで参照される命令列内の命令に従
った演算処理を行なう演算処理部10と、演算処理部1
0から参照・更新される複数のレジスタの集合であるレ
ジスタ群11と、演算処理部10内の命令とプログラム
カウンタの値からトークンを生成し、これを図示されて
いないメモリアクセスコントローラに対して発行するト
ークン生成部12と、メモリアクセスコントローラから
入力されるトークンをFIFO的に順に保持するトーク
ンメモリ13と、トークンメモリ13と演算処理部10
とトークン生成部12の動作を制御し、またプログラム
を保持するプログラムメモリ15を内部に持つ命令列制
御部14とから構成されている。
られたときに内部に持つプログラムカウンタの値を1つ
ずつ増やしながらそれで参照される命令列内の命令に従
った演算処理を行なう演算処理部10と、演算処理部1
0から参照・更新される複数のレジスタの集合であるレ
ジスタ群11と、演算処理部10内の命令とプログラム
カウンタの値からトークンを生成し、これを図示されて
いないメモリアクセスコントローラに対して発行するト
ークン生成部12と、メモリアクセスコントローラから
入力されるトークンをFIFO的に順に保持するトーク
ンメモリ13と、トークンメモリ13と演算処理部10
とトークン生成部12の動作を制御し、またプログラム
を保持するプログラムメモリ15を内部に持つ命令列制
御部14とから構成されている。
【0025】このような演算処理プロセッサ1を用いて
演算処理を行なう場合、次のような手順で進める。
演算処理を行なう場合、次のような手順で進める。
【0026】まず外部から信号線90を介して命令列制
御部14に対して、全体の動作を記述したプログラム
を、ついでそれぞれが実行開始アドレスを持ったトーク
ンをいくつか与える。命令列制御部14内のプログラム
は一連の命令の連続であり、実行開始アドレスはその内
の1つのアドレスである。以下、プログラム内の、実行
開始アドレスからある終了点までの部分列を命令列と呼
ぶ。
御部14に対して、全体の動作を記述したプログラム
を、ついでそれぞれが実行開始アドレスを持ったトーク
ンをいくつか与える。命令列制御部14内のプログラム
は一連の命令の連続であり、実行開始アドレスはその内
の1つのアドレスである。以下、プログラム内の、実行
開始アドレスからある終了点までの部分列を命令列と呼
ぶ。
【0027】トークンはすべてトークンメモリ13内に
おかれる。トークンメモリ13内のトークンは図2の形
式50に示されており、実行開始アドレスのフイールド
51を持つ。このとき、フイールド60は使用しない
し、またフラグ52の値は″0″である。また外からト
ークンメモリ13へ与えたトークンの数を命令列制御部
14内のトークン数カウンタにセットする。
おかれる。トークンメモリ13内のトークンは図2の形
式50に示されており、実行開始アドレスのフイールド
51を持つ。このとき、フイールド60は使用しない
し、またフラグ52の値は″0″である。また外からト
ークンメモリ13へ与えたトークンの数を命令列制御部
14内のトークン数カウンタにセットする。
【0028】外部から命令列制御部14に対して処理開
始信号が与えられると、トークンメモリ13内の先頭の
トークンが演算処理部10に送られ、そのトークンのフ
ラグ52の値が″0″であるので、演算処理部10では
そのトークン内の実行開始アドレス51の値がプログラ
ムカウンタに設定される。これを以下命令列フエッチ動
作と呼ぶ。その後、その命令列の実行が開始される。
始信号が与えられると、トークンメモリ13内の先頭の
トークンが演算処理部10に送られ、そのトークンのフ
ラグ52の値が″0″であるので、演算処理部10では
そのトークン内の実行開始アドレス51の値がプログラ
ムカウンタに設定される。これを以下命令列フエッチ動
作と呼ぶ。その後、その命令列の実行が開始される。
【0029】演算処理部10の演算処理では、まずプロ
グラムカウンタの値を命令列制御部14に送り、それを
アドレスとしてそれで示される命令列制御部14内のプ
ログラムメモリ15中の命令が演算処理部10にフエッ
チされる。これを命令フエッチ動作と呼ぶ。
グラムカウンタの値を命令列制御部14に送り、それを
アドレスとしてそれで示される命令列制御部14内のプ
ログラムメモリ15中の命令が演算処理部10にフエッ
チされる。これを命令フエッチ動作と呼ぶ。
【0030】ついで演算処理部10では、フエッチされ
た命令に記述された命令の実行を行なった後に、命令の
シーケンス終了フラグ(後述の図3の命令形式の参照数
字65)が″0″であればプログラムカウンタの値を1
つインクリメントして次の命令の実行へ進む。命令のシ
ーケンス終了フラグが″1″であれば、後で述べる命令
列終了命令が実行された場合と同様に、その命令列の実
行を終了し別の命令列フエッチ動作を行なう。以上が命
令実行の基本動作である。
た命令に記述された命令の実行を行なった後に、命令の
シーケンス終了フラグ(後述の図3の命令形式の参照数
字65)が″0″であればプログラムカウンタの値を1
つインクリメントして次の命令の実行へ進む。命令のシ
ーケンス終了フラグが″1″であれば、後で述べる命令
列終了命令が実行された場合と同様に、その命令列の実
行を終了し別の命令列フエッチ動作を行なう。以上が命
令実行の基本動作である。
【0031】命令フエッチで得られる命令の種類として
は、レジスタ群11内のレジスタの値を最大2つ参照し
て加減乗除などの演算を行ない結果を指定されたレジス
タに書き込むALU演算命令、外部メモリ上のデータを
そのアドレスを指定することにより読み出してレジスタ
にロードするロード命令、レジスタ上のデータを外部メ
モリの指定された場所へ書き出すストア命令、プログラ
ムカウンタの値を命令で指示された値だけ変化させるジ
ャンプ命令およびブランチ命令、命令列の終わりで命令
列実行を終了する命令列終了命令、がある。
は、レジスタ群11内のレジスタの値を最大2つ参照し
て加減乗除などの演算を行ない結果を指定されたレジス
タに書き込むALU演算命令、外部メモリ上のデータを
そのアドレスを指定することにより読み出してレジスタ
にロードするロード命令、レジスタ上のデータを外部メ
モリの指定された場所へ書き出すストア命令、プログラ
ムカウンタの値を命令で指示された値だけ変化させるジ
ャンプ命令およびブランチ命令、命令列の終わりで命令
列実行を終了する命令列終了命令、がある。
【0032】命令フエッチで得られた命令がALU演算
命令のときは上述の基本動作を行なう。ALU演算命令
の形式は図3の参照数字80に示す。読みレジスタ識別
子A83と読みレジスタ識別子B84が演算に用いるデ
ータの入ったレジスタを、書き込みレジスタ識別子82
が結果を格納すべきレジスタを示す。レジスタ識別子は
レジスタ群11中の一つのレジスタを一意に識別する。
命令のときは上述の基本動作を行なう。ALU演算命令
の形式は図3の参照数字80に示す。読みレジスタ識別
子A83と読みレジスタ識別子B84が演算に用いるデ
ータの入ったレジスタを、書き込みレジスタ識別子82
が結果を格納すべきレジスタを示す。レジスタ識別子は
レジスタ群11中の一つのレジスタを一意に識別する。
【0033】命令フエッチで得られた命令がロード命令
の場合には、命令列制御部14からトークン生成部12
に対しての指示により、トークン生成部12で図2の形
式55に示す読み出し要求トークンが生成される。
の場合には、命令列制御部14からトークン生成部12
に対しての指示により、トークン生成部12で図2の形
式55に示す読み出し要求トークンが生成される。
【0034】ロード命令の形式を図3の参照数字70に
示す。ロード命令の形式70はロード命令を示す命令コ
ード71と、メモリ読み出しを行なう読み出しアドレス
73と、読み出したデータを書き込むレジスタの識別子
72と、ロード命令実行により命令列実行を中断した後
に再開する命令であるターゲット命令のプログラムメモ
リ15内のアドレス66を有する。
示す。ロード命令の形式70はロード命令を示す命令コ
ード71と、メモリ読み出しを行なう読み出しアドレス
73と、読み出したデータを書き込むレジスタの識別子
72と、ロード命令実行により命令列実行を中断した後
に再開する命令であるターゲット命令のプログラムメモ
リ15内のアドレス66を有する。
【0035】読み出し要求トークンの形式55はそのと
きの形式70内のターゲット命令アドレス66の値を実
行開始アドレス58に、形式70中の外部メモリのアク
セスすべき読み出しアドレス73をアクセスアドレス5
7に、形式70中のレジスタ識別子72をレジスタ識別
子61に、メモリアクセスコントローラで行なう動作と
してメモリ読み出しを指示するコードをオペレーション
コード56に持つ。このときフイールド59は使用しな
い。ロード命令実行時、この読み出し要求トークンは生
成後信号線91を介してメモリアクセスコントローラへ
送られる。
きの形式70内のターゲット命令アドレス66の値を実
行開始アドレス58に、形式70中の外部メモリのアク
セスすべき読み出しアドレス73をアクセスアドレス5
7に、形式70中のレジスタ識別子72をレジスタ識別
子61に、メモリアクセスコントローラで行なう動作と
してメモリ読み出しを指示するコードをオペレーション
コード56に持つ。このときフイールド59は使用しな
い。ロード命令実行時、この読み出し要求トークンは生
成後信号線91を介してメモリアクセスコントローラへ
送られる。
【0036】命令フエッチで得られた命令がレジスタ上
のデータを外部メモリの指定された場所へ書き出すスト
ア命令であった場合には、命令列制御部14からトーク
ン生成部12に対しての指示により、トークン生成部1
2で図2の形式55に示す書き込み要求トークンが生成
される。
のデータを外部メモリの指定された場所へ書き出すスト
ア命令であった場合には、命令列制御部14からトーク
ン生成部12に対しての指示により、トークン生成部1
2で図2の形式55に示す書き込み要求トークンが生成
される。
【0037】ストア命令の形式を図3の参照数字75に
示す。形式75はストア命令を示す命令コード76と、
メモリ書き込みを行なう書き込みアドレス77と、書き
込むデータを読み出すレジスタの識別子78とを有す
る。
示す。形式75はストア命令を示す命令コード76と、
メモリ書き込みを行なう書き込みアドレス77と、書き
込むデータを読み出すレジスタの識別子78とを有す
る。
【0038】書き込み要求トークンの形式55はストア
命令75中の外部メモリの書き込みアドレス77をアク
セスアドレス57に、メモリアクセスコントローラで行
なう動作としてメモリ書き込みを指示するコードをオペ
レーションコード56に、ストア命令のフイールド78
で指定されたレジスタから読み出した書き込むべきデー
タをフイールド59に持つ。このときフイールド58、
61は使用しない。この書き込き要求トークンは生成後
信号線91を介してメモリアクセスコントローラへ送ら
れる。
命令75中の外部メモリの書き込みアドレス77をアク
セスアドレス57に、メモリアクセスコントローラで行
なう動作としてメモリ書き込みを指示するコードをオペ
レーションコード56に、ストア命令のフイールド78
で指定されたレジスタから読み出した書き込むべきデー
タをフイールド59に持つ。このときフイールド58、
61は使用しない。この書き込き要求トークンは生成後
信号線91を介してメモリアクセスコントローラへ送ら
れる。
【0039】命令フエッチで得られた命令がプログラム
カウンタの値を命令で指示された値だけ変化させるジャ
ンプ命令であった場合には、プログラムカウンタに命令
中で指定された値が加算され、そのアドレスから処理が
続行される。またこれに類似したブランチ命令では、直
前の演算結果に応じてジャンプするか直後の命令の実行
にそのまま進むかを決定する。
カウンタの値を命令で指示された値だけ変化させるジャ
ンプ命令であった場合には、プログラムカウンタに命令
中で指定された値が加算され、そのアドレスから処理が
続行される。またこれに類似したブランチ命令では、直
前の演算結果に応じてジャンプするか直後の命令の実行
にそのまま進むかを決定する。
【0040】命令フエッチで得られた命令が命令列の終
わりで命令列実行を終了する命令列終了命令であった場
合、および他の命令でそのシーケンス終了フラグ65
が″1″であった場合には、次の様な動作を行なう。
わりで命令列実行を終了する命令列終了命令であった場
合、および他の命令でそのシーケンス終了フラグ65
が″1″であった場合には、次の様な動作を行なう。
【0041】命令列制御部14内のトークン数カウンタ
の値を1つデクリメントする。デクリメント後これが0
になったら信号線90を介して外部にプログラム実行終
了を知らせ、演算プロセッサ1は停止する。0でなけれ
ば、その後命令列制御部14の制御により命令列フエッ
チ動作が行なわれ、フエッチされた命令列の実行が開始
される。トークンメモリ13中にトークンが1つも存在
しない場合には演算処理部10はトークンが得られるま
で待ち続ける。
の値を1つデクリメントする。デクリメント後これが0
になったら信号線90を介して外部にプログラム実行終
了を知らせ、演算プロセッサ1は停止する。0でなけれ
ば、その後命令列制御部14の制御により命令列フエッ
チ動作が行なわれ、フエッチされた命令列の実行が開始
される。トークンメモリ13中にトークンが1つも存在
しない場合には演算処理部10はトークンが得られるま
で待ち続ける。
【0042】メモリアクセスコントローラは読み出し要
求トークン(形式55)を受け取ると、このオペレーシ
ョンコード56に従ってアクセスアドレス57で示され
る番地からデータを読み出し、図2の形式50のトーク
ンを生成して演算プロセッサ1に対して送る。このとき
フイールド51には形式55のフイールド58の値を、
フイールド60には形式55のフイールド61の値を、
データ53にはメモリから読み出した値を、フラグ52
には″1″を与える。
求トークン(形式55)を受け取ると、このオペレーシ
ョンコード56に従ってアクセスアドレス57で示され
る番地からデータを読み出し、図2の形式50のトーク
ンを生成して演算プロセッサ1に対して送る。このとき
フイールド51には形式55のフイールド58の値を、
フイールド60には形式55のフイールド61の値を、
データ53にはメモリから読み出した値を、フラグ52
には″1″を与える。
【0043】メモリアクセスコントローラでは書き込み
要求トークン(形式55)を受け取ると、このオペレー
ションコード56に従って、データ59をアクセスアド
レス57で示される番地に書き込む。
要求トークン(形式55)を受け取ると、このオペレー
ションコード56に従って、データ59をアクセスアド
レス57で示される番地に書き込む。
【0044】メモリアクセスコントローラからのトーク
ンは信号線92を介して演算処理プロセッサ1に入力さ
れる。トークンが入力されると、そのトークンはトーク
ンメモリ13のFIFOの最後尾に加えられる。FIF
Oでは先頭のトークンが演算処理部10からフエッチさ
れる度にそれが取り除かれそれまで2番目であったトー
クンが先頭になり、以下順に順序が繰り上がる。
ンは信号線92を介して演算処理プロセッサ1に入力さ
れる。トークンが入力されると、そのトークンはトーク
ンメモリ13のFIFOの最後尾に加えられる。FIF
Oでは先頭のトークンが演算処理部10からフエッチさ
れる度にそれが取り除かれそれまで2番目であったトー
クンが先頭になり、以下順に順序が繰り上がる。
【0045】命令列フエッチ動作において、フエッチさ
れたトークン(形式50)のフラグ52の値が″1″で
あるので、まず演算処理部10ではそのトークン内の実
行開始アドレス51の値をプログラムカウンタに設定す
る。さらに、図2の形式50のフイールド60で指定さ
れるレジスタに対して形式50のデータ53を書き込ん
だのちに、プログラムカウンタで指示される命令からそ
の命令列の演算処理が再開される。
れたトークン(形式50)のフラグ52の値が″1″で
あるので、まず演算処理部10ではそのトークン内の実
行開始アドレス51の値をプログラムカウンタに設定す
る。さらに、図2の形式50のフイールド60で指定さ
れるレジスタに対して形式50のデータ53を書き込ん
だのちに、プログラムカウンタで指示される命令からそ
の命令列の演算処理が再開される。
【0046】以上の構成を持つ装置において本発明の目
的とする効果の達成を可能にする動作について説明す
る。
的とする効果の達成を可能にする動作について説明す
る。
【0047】まず第1の発明の方法の実現について述べ
る。
る。
【0048】あるロード命令Laによってメモリアドレ
スaddrからフエッチされレジスタr1にロードされるデ
ータがそのロード命令以降の命令Taではじめて参照さ
れるとする。つまり命令列は、 であるとする。このときTaはロード命令Laに対する
「ターゲット命令」である。ロード命令LaからTaま
での区間では、ロードされるデータを必要としないので
本質的にロード命令が終了して戻るのを待つことなく継
続して実行可能である。すなわち、ロードデータに関し
てはLaの次の命令からTaの間ではどの命令の前で命
令列を切っても構わないことになる。
スaddrからフエッチされレジスタr1にロードされるデ
ータがそのロード命令以降の命令Taではじめて参照さ
れるとする。つまり命令列は、 であるとする。このときTaはロード命令Laに対する
「ターゲット命令」である。ロード命令LaからTaま
での区間では、ロードされるデータを必要としないので
本質的にロード命令が終了して戻るのを待つことなく継
続して実行可能である。すなわち、ロードデータに関し
てはLaの次の命令からTaの間ではどの命令の前で命
令列を切っても構わないことになる。
【0049】一方、命令列が与えられたとき、コンパイ
ル時に全てのロード命令についてそれぞれ対応するター
ゲット命令を発見しそのコードアドレスの値を得ること
が可能であるので、Laにおける読み出し要求トークン
の中の実行開始アドレスとしてTaのアドレスを与えれ
ば、再開時にそこから実行を再開することができる。従
って、最も長いシーケンスを継続実行するには図4で示
されるような方式をとればよい。
ル時に全てのロード命令についてそれぞれ対応するター
ゲット命令を発見しそのコードアドレスの値を得ること
が可能であるので、Laにおける読み出し要求トークン
の中の実行開始アドレスとしてTaのアドレスを与えれ
ば、再開時にそこから実行を再開することができる。従
って、最も長いシーケンスを継続実行するには図4で示
されるような方式をとればよい。
【0050】ここで下の細破線矢印はロード命令からそ
のターゲット命令へのデータ依存関係を、縦棒はそのタ
ーゲット命令の直前でシーケンスが切られ、命令列実行
が中断されることを、また上の太い破線矢印はターゲッ
ト命令(Ta、Tb)のアドレスを実行開始アドレスと
して持つ読み出し要求トークンが発行されてターゲット
命令から命令列実行が再開されることを示している。
のターゲット命令へのデータ依存関係を、縦棒はそのタ
ーゲット命令の直前でシーケンスが切られ、命令列実行
が中断されることを、また上の太い破線矢印はターゲッ
ト命令(Ta、Tb)のアドレスを実行開始アドレスと
して持つ読み出し要求トークンが発行されてターゲット
命令から命令列実行が再開されることを示している。
【0051】この方式を実現するために、コンバイル時
に 1.前述のように全てのロード命令についてそのターゲ
ット命令のアドレスを求め、 2.プログラムメモリ15の中の各ロード命令のところ
にそれを埋め込み(図3のフイールド66)、 3.さらにそれぞれのターゲットとなっている命令につ
いて、その直前の命令のシーケンス終了フラグ65を″
1″とする 4.他の命令については命令のシーケンス終了フラグ6
5を″0″とする。という前処理をする。
に 1.前述のように全てのロード命令についてそのターゲ
ット命令のアドレスを求め、 2.プログラムメモリ15の中の各ロード命令のところ
にそれを埋め込み(図3のフイールド66)、 3.さらにそれぞれのターゲットとなっている命令につ
いて、その直前の命令のシーケンス終了フラグ65を″
1″とする 4.他の命令については命令のシーケンス終了フラグ6
5を″0″とする。という前処理をする。
【0052】実行時にはこれに従い、動作の説明で述べ
た様に、 1.ある命令列中でロード命令Laがあったらそこでそ
のターゲット命令Taのアドレスを実行開始アドレスと
するトークンを発行し、 2.そこで命令列を中断せずに続行し、 3.実行した命令のシーケンス終了フラグ65が″1″
であったらそこで単にその命令列の実行をやめ(単に
「消える」)、 4.次の命令列をトークンメモリ13から読み込み実行
する 5.その後、先のLaから出たトークンが帰ってきて演
算される順番になるとそのトークンは演算処理部10に
送られてデータがレジスタにロードされ、 6.ついでTaの命令から処理を続行する。という手順
で処理が進む。
た様に、 1.ある命令列中でロード命令Laがあったらそこでそ
のターゲット命令Taのアドレスを実行開始アドレスと
するトークンを発行し、 2.そこで命令列を中断せずに続行し、 3.実行した命令のシーケンス終了フラグ65が″1″
であったらそこで単にその命令列の実行をやめ(単に
「消える」)、 4.次の命令列をトークンメモリ13から読み込み実行
する 5.その後、先のLaから出たトークンが帰ってきて演
算される順番になるとそのトークンは演算処理部10に
送られてデータがレジスタにロードされ、 6.ついでTaの命令から処理を続行する。という手順
で処理が進む。
【0053】これにより必ずロード命令で命令列が切ら
れる場合に比べれば、平均シーケンス長は長くなり、演
算部の稼働率が高くなり、図7(B)のように「Aのロ
ード」と「Bのアドレス計算」を並列して実行すること
で高速化が達成される。
れる場合に比べれば、平均シーケンス長は長くなり、演
算部の稼働率が高くなり、図7(B)のように「Aのロ
ード」と「Bのアドレス計算」を並列して実行すること
で高速化が達成される。
【0054】以上、全てのロード命令に対してそれがロ
ードするデータを初めて使用するターゲット命令の直前
で中断し、ターゲット命令から再開する方法について説
明した。
ードするデータを初めて使用するターゲット命令の直前
で中断し、ターゲット命令から再開する方法について説
明した。
【0055】しかしこれら2つの命令の間に例えばジャ
ンプ命令があって命令列と逆の方向(プログラムカウン
タが小さくなる方向)へ飛ぶ場合には、コンパイル時の
解析においてロード命令のターゲット命令を発見しにく
いことがある。このときは1パスではターゲット命令の
発見が困難であり、またはテーブル管理が複雑になる。
ンプ命令があって命令列と逆の方向(プログラムカウン
タが小さくなる方向)へ飛ぶ場合には、コンパイル時の
解析においてロード命令のターゲット命令を発見しにく
いことがある。このときは1パスではターゲット命令の
発見が困難であり、またはテーブル管理が複雑になる。
【0056】そのような場合には第3の発明の方法によ
り、このジャンプ命令を第1の発明でのターゲット命令
と見立ててその手前で中断し、再開アドレスとしてその
アドレスをプログラム中のターゲット命令アドレスとし
て与える。
り、このジャンプ命令を第1の発明でのターゲット命令
と見立ててその手前で中断し、再開アドレスとしてその
アドレスをプログラム中のターゲット命令アドレスとし
て与える。
【0057】また演算結果に応じて条件分岐するブラン
チ命令ではさらに、ブランチの一方ではレジスタを使用
するのでターゲット命令が有るが、他方ではターゲット
命令が発見できないという場合もある。この場合には同
様にそのブランチ命令をターゲット命令とすることで対
処する。
チ命令ではさらに、ブランチの一方ではレジスタを使用
するのでターゲット命令が有るが、他方ではターゲット
命令が発見できないという場合もある。この場合には同
様にそのブランチ命令をターゲット命令とすることで対
処する。
【0058】このように第3の発明により、ロード命令
とターゲット命令との間に第1の発明の方法の実施の障
害となる命令が存在するケースであっても、コンパイル
時に静的にこれを検出して適切なターゲット命令を発見
し使用するという制御を埋め込むことができ、これによ
り従来方式に比べてシーケンスを長く延ばす効果がえら
れる。
とターゲット命令との間に第1の発明の方法の実施の障
害となる命令が存在するケースであっても、コンパイル
時に静的にこれを検出して適切なターゲット命令を発見
し使用するという制御を埋め込むことができ、これによ
り従来方式に比べてシーケンスを長く延ばす効果がえら
れる。
【0059】以上、全てのロード命令に対してそれがロ
ードするデータを初めて使用するターゲット命令の直
前、またはロード命令とターゲット命令のあいだのある
命令の地点で中断し、そこから再開する方法について説
明した。
ードするデータを初めて使用するターゲット命令の直
前、またはロード命令とターゲット命令のあいだのある
命令の地点で中断し、そこから再開する方法について説
明した。
【0060】ところがさらに、ロード命令からターゲッ
ト命令までの区間が複数重なっている場合には、図5で
示されるような状況の時に正しい動作が保証されないと
いう問題がある。
ト命令までの区間が複数重なっている場合には、図5で
示されるような状況の時に正しい動作が保証されないと
いう問題がある。
【0061】この図でうまくいく場合には、この命令列
についての処理の流れは、 1.LaでTaを実行開始アドレスとするトークンAを
出して命令列処理を続行し、 2.LbでもTbを実行開始アドレスとするトークンB
を出して命令列処理を続行し、 3.Taの直前で命令列は消え、 4.Taを実行開始アドレスとするトークンAが戻るこ
とによりTa−Tb間を実行して消え、 5.Tbを実行開始アドレスとするトークンBが戻るこ
とによりTb以降を行なう。となるはずである。しかし
LaからでたトークンAが戻るまでの長い時間かかる場
合には、処理がLbを超えた後はこの命令列について戻
ってないトークンが2つ存在していることになり、もし
トークンBがトークンAより早く戻ってトークンメモリ
で前に並んだ場合には、Tb以降がTa−Tbの区間よ
り先に実行され、誤った動作を行なうことになる。
についての処理の流れは、 1.LaでTaを実行開始アドレスとするトークンAを
出して命令列処理を続行し、 2.LbでもTbを実行開始アドレスとするトークンB
を出して命令列処理を続行し、 3.Taの直前で命令列は消え、 4.Taを実行開始アドレスとするトークンAが戻るこ
とによりTa−Tb間を実行して消え、 5.Tbを実行開始アドレスとするトークンBが戻るこ
とによりTb以降を行なう。となるはずである。しかし
LaからでたトークンAが戻るまでの長い時間かかる場
合には、処理がLbを超えた後はこの命令列について戻
ってないトークンが2つ存在していることになり、もし
トークンBがトークンAより早く戻ってトークンメモリ
で前に並んだ場合には、Tb以降がTa−Tbの区間よ
り先に実行され、誤った動作を行なうことになる。
【0062】第4の発明はこの問題を次の様に解決す
る。コンパイル時に、複数のロード命令とそれぞれのタ
ーゲット命令の順序を解析し、 1.ロード命令Laとそのターゲット命令Taとの間に
他のロード命令がない場合には第1の発明の方法と同様
に、(a)そのターゲットをロード命令のターゲット命
令とし、(b)ターゲット命令直前で中断するようにシ
ーケンス終了フラグをセットしておく 2.そうでなく、ロード命令Laとターゲット命令Ta
との間に一つ以上のロード命令がはさまれている場合に
は、(a)はさまれている最初のロード命令Lbのアド
レスをロード命令La実行のターゲット命令とし、
(b)ロード命令Lb実行直前で中断するようにしてお
く。
る。コンパイル時に、複数のロード命令とそれぞれのタ
ーゲット命令の順序を解析し、 1.ロード命令Laとそのターゲット命令Taとの間に
他のロード命令がない場合には第1の発明の方法と同様
に、(a)そのターゲットをロード命令のターゲット命
令とし、(b)ターゲット命令直前で中断するようにシ
ーケンス終了フラグをセットしておく 2.そうでなく、ロード命令Laとターゲット命令Ta
との間に一つ以上のロード命令がはさまれている場合に
は、(a)はさまれている最初のロード命令Lbのアド
レスをロード命令La実行のターゲット命令とし、
(b)ロード命令Lb実行直前で中断するようにしてお
く。
【0063】このコンパイルの結果得られたプログラム
を用いて、実行時には演算プロセッサは次のような動作
をする。
を用いて、実行時には演算プロセッサは次のような動作
をする。
【0064】1.ロード命令Laとターゲット命令Ta
との間に他のロード命令がない場合には第1の発明の説
明と同様に動作する 2.ロード命令Laとターゲット命令Taとの間に一つ
以上のロード命令がはさまれており、そのターゲット命
令TbがTaより後にある場合には(図6(A)参
照)、(a)ロード命令La実行時には、はさまれてい
る最初のロード命令Lbを実行開始アドレスとするトー
クンを出してシーケンスを続行し、(b)ロード命令L
b実行直前で命令列処理を中断し、演算処理部10は別
の命令列をフエッチする(c)その後戻ったトークンに
より命令列はLbから再開される(d)LbではTbを
ターゲット命令とするロード命令を実行した後シーケン
スの処理を続行する(e)このときはTaで必要なデー
タはロードが完了していることが保証されているので、
Taはそのまま実行することができ、(f)Tbの直前
で命令列処理を中断し、演算処理部10は別の命令列を
フエッチする(g)戻ったトークンにより命令列はTb
から再開される 3.ロード命令Laとターゲット命令Taとの間に一つ
以上のロード命令がはさまれており、そのターゲット命
令TbがTaの前にある場合には(図6(B)参照)、
(a)ロード命令La実行時には、はさまれている最初
のロード命令Lbを実行開始アドレスとするトークンを
出してシーケンスを続行(b)ロード命令Lb実行直前
で命令列処理を中断し、演算処理部10は別の命令列を
フエッチする(c)その後戻ったトークンにより命令列
はLbから再開される(d)LbではTbをターゲット
命令とするロード命令を実行した後シーケンスの処理を
続行する(e)Tbの直前で命令列処理を中断し、演算
処理部10は別の命令列をフエッチする(f)戻ったト
ークンにより命令列はTbから再開される(g)このと
きはTaで必要なデータはロードが完了していることが
保証されているので、Taはそのまま実行することがで
きる。
との間に他のロード命令がない場合には第1の発明の説
明と同様に動作する 2.ロード命令Laとターゲット命令Taとの間に一つ
以上のロード命令がはさまれており、そのターゲット命
令TbがTaより後にある場合には(図6(A)参
照)、(a)ロード命令La実行時には、はさまれてい
る最初のロード命令Lbを実行開始アドレスとするトー
クンを出してシーケンスを続行し、(b)ロード命令L
b実行直前で命令列処理を中断し、演算処理部10は別
の命令列をフエッチする(c)その後戻ったトークンに
より命令列はLbから再開される(d)LbではTbを
ターゲット命令とするロード命令を実行した後シーケン
スの処理を続行する(e)このときはTaで必要なデー
タはロードが完了していることが保証されているので、
Taはそのまま実行することができ、(f)Tbの直前
で命令列処理を中断し、演算処理部10は別の命令列を
フエッチする(g)戻ったトークンにより命令列はTb
から再開される 3.ロード命令Laとターゲット命令Taとの間に一つ
以上のロード命令がはさまれており、そのターゲット命
令TbがTaの前にある場合には(図6(B)参照)、
(a)ロード命令La実行時には、はさまれている最初
のロード命令Lbを実行開始アドレスとするトークンを
出してシーケンスを続行(b)ロード命令Lb実行直前
で命令列処理を中断し、演算処理部10は別の命令列を
フエッチする(c)その後戻ったトークンにより命令列
はLbから再開される(d)LbではTbをターゲット
命令とするロード命令を実行した後シーケンスの処理を
続行する(e)Tbの直前で命令列処理を中断し、演算
処理部10は別の命令列をフエッチする(f)戻ったト
ークンにより命令列はTbから再開される(g)このと
きはTaで必要なデータはロードが完了していることが
保証されているので、Taはそのまま実行することがで
きる。
【0065】
【発明の効果】第1および第2の発明では、ロード命令
に対応するターゲット命令のアドレスをあらかじめ調べ
ておき、命令列実行の中断をターゲット命令の直前まで
遅延させることによりシーケンス長を長くすることがで
きる。
に対応するターゲット命令のアドレスをあらかじめ調べ
ておき、命令列実行の中断をターゲット命令の直前まで
遅延させることによりシーケンス長を長くすることがで
きる。
【0066】第3の発明では、上で述べた作用に加え
て、ロード命令とターゲット命令との間に第1の発明の
方法の実施の障害となる命令が存在するケースであって
も、コンパイル時に静的にこれを検出して適切なターゲ
ット命令を発見し使用するという制御を埋め込むことが
でき、こにより従来方式に比べてシーケンスを長く延ば
すということができる。
て、ロード命令とターゲット命令との間に第1の発明の
方法の実施の障害となる命令が存在するケースであって
も、コンパイル時に静的にこれを検出して適切なターゲ
ット命令を発見し使用するという制御を埋め込むことが
でき、こにより従来方式に比べてシーケンスを長く延ば
すということができる。
【0067】第4の発明では、上で述べた作用に加えて
二つ以上のロード命令とターゲット命令が干渉しあって
いても中断後の再開アドレスを干渉を解決する様に設定
することを可能にする。
二つ以上のロード命令とターゲット命令が干渉しあって
いても中断後の再開アドレスを干渉を解決する様に設定
することを可能にする。
【0068】以上のように一つの命令列のシーケンス長
を長くして実行を継続し続けることにより、並列に実行
可能な命令列の数が少ない場合にも演算処理部がアイド
ルであるサイクルを減少させ、より高い処理性能を実現
できる。
を長くして実行を継続し続けることにより、並列に実行
可能な命令列の数が少ない場合にも演算処理部がアイド
ルであるサイクルを減少させ、より高い処理性能を実現
できる。
【図1】本発明の命令列切り替え方法を用いた演算プロ
セッサの一実施例を示すブロック図である。
セッサの一実施例を示すブロック図である。
【図2】本実施例で用いられるトークンの形式を示す形
式図である。
式図である。
【図3】本実施例で用いられる命令の形式を示す形式図
である。
である。
【図4】第1の発明の方法を示す線図である。
【図5】第1の発明で解決できないケースを示す線図で
ある。
ある。
【図6】第4の発明の方法を示す線図である。
【図7】従来方式と本発明の方式の実行の様子を比較す
るタイムチャートである。
るタイムチャートである。
【図8】従来の命令列切り替え方式を示す線図である。
1 演算プロセッサ 10 演算処理部 11 レジスタ群 12 トークン生成部 13 トークンメモリ 14 命令列制御部 15 プログラムメモリ
Claims (4)
- 【請求項1】 並行して実行可能な命令列をあらかじめ
複数用意しておきそれらを切り替えながらそのうちから
1つを実行命令列として選択しその実行命令列中の命令
を順に実行する演算プロセッサで実行中の命令列の中で
メモリからのデータロード命令発行に同期して命令列を
切り替える方法において、実行中の第1の命令列の中の
ロード命令実行時には、そのロード命令によって得られ
るロードデータを最初に使用するあらかじめ発見してお
いたターゲット命令のアドレスを含むトークンを外部に
発行してメモリアクセス動作を起動すると共に前記ター
ゲット命令の直前の命令まで前記第1の命令列の実行を
続行し、その後に前記第1の命令列の実行を中断し他の
命令列の実行に移り、前記メモリアクセス動作により前
記ロードデータを持つトークンが外部から入力された後
に前記第1の命令列の実行を再開するときには前記入力
されたトークン中に含まれる前記ターゲット命令のアド
レスにより前記ターゲット命令から前記第1の命令列の
処理を再開することを特徴とする命令列切り替え方法。 - 【請求項2】 並行して実行可能な命令列をあらかじめ
複数用意しておきそれらを切り替えながらそのうちから
1つを実行命令列として選択しその実行命令列中の命令
を順に実行する演算プロセッサにおいて、1つの命令列
内の命令を順に実行する演算処理部と、外部から入力さ
れたトークンを保持し前記演算処理部に供給するトーク
ンメモリと、前記演算処理部からアクセスされるデータ
を保持するレジスタ群と、外部で行なう動作の記述とそ
のとき実行中の命令中に記述された別の命令のアドレス
とを含むトークンを生成し外部へ送出するトークン生成
部と、各ロード命令には命令列実行を中断した後に再開
するべき再開命令アドレスを有し各命令についてはその
命令実行後に直後の命令を続行実行するか否かを示すフ
ラグを有する命令群よりなるプログラムを格納し前記演
算処理部へ命令列を供給するとともに前記各部の動作を
制御する命令列制御部とを有することを特徴とする演算
プロセッサ。 - 【請求項3】 第1の命令列の中のロード命令実行時に
はそのターゲット命令の代わりに前記ロード命令と前記
ターゲット命令のあいだにあるいずれかの第3の命令の
アドレスを含むトークンを外部に発行してメモリアクセ
ス動作を起動し、演算部では前記第3の命令の直前で前
記第1の命令列の実行を中断し、前記第1の命令列実行
を再開するときには前記トークン中に含まれる前記第3
の命令のアドレスにより前記第3の命令から再開するこ
とを特徴とする請求項1記載の命令列切り替え方法。 - 【請求項4】 第1の命令列の中で第1のロード命令と
それに対応する第1のターゲット命令との間に他の第2
のロード命令が存在する場合に、前記第1のロード命令
の実行時に前記第2のロード命令のアドレスを含む第1
のトークンを外部に発行してメモリアクセス動作を起動
し、演算部では前記第2のロード命令の直前で前記第1
の命令列実行を中断して他の命令列実行に移り、後に前
記第1のトークンに含まれる前記第2のロード命令のア
ドレスにより前記第2のロード命令から前記第1の命令
列の実行を再開し、前記第2のロード命令の実行時に前
記第2のロード命令に対応する第2のターゲット命令の
アドレスを含む第2のトークンを外部に発行してメモリ
アクセス動作を起動し、前記演算部では前記第2のター
ゲット命令の直前で前記第1の命令列実行を中断して他
の命令列実行に移り、後に前記第2のトークンに含まれ
る前記第2のターゲット命令のアドレスにより前記第2
のターゲット命令から前記第1の命令列の実行を再開す
ることを特徴とする請求項1記載の命令列切り替え方
法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP17224592A JP2853458B2 (ja) | 1992-06-30 | 1992-06-30 | 命令列切り替え方法及びそれを用いた演算プロセッサ |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP17224592A JP2853458B2 (ja) | 1992-06-30 | 1992-06-30 | 命令列切り替え方法及びそれを用いた演算プロセッサ |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH0619708A JPH0619708A (ja) | 1994-01-28 |
JP2853458B2 true JP2853458B2 (ja) | 1999-02-03 |
Family
ID=15938314
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP17224592A Expired - Lifetime JP2853458B2 (ja) | 1992-06-30 | 1992-06-30 | 命令列切り替え方法及びそれを用いた演算プロセッサ |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2853458B2 (ja) |
-
1992
- 1992-06-30 JP JP17224592A patent/JP2853458B2/ja not_active Expired - Lifetime
Also Published As
Publication number | Publication date |
---|---|
JPH0619708A (ja) | 1994-01-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US5235686A (en) | Computer system having mixed macrocode and microcode | |
US7281250B2 (en) | Multi-thread execution method and parallel processor system | |
US6687812B1 (en) | Parallel processing apparatus | |
JPH02224025A (ja) | コンピューターシステム | |
JPS63175934A (ja) | デ−タ処理装置 | |
JP2004038337A (ja) | 命令フェッチ制御装置 | |
JPH0991136A (ja) | 信号処理装置 | |
JP2560988B2 (ja) | 情報処理装置および処理方法 | |
JP2011086298A (ja) | プログラム・フロー制御 | |
EP0279953B1 (en) | Computer system having mixed macrocode and microcode instruction execution | |
JP2853458B2 (ja) | 命令列切り替え方法及びそれを用いた演算プロセッサ | |
JP2005521937A (ja) | コンピュータオペレーティングシステムにおけるコンテキスト切り替え方法及び装置 | |
JP2853460B2 (ja) | データロード方法及びそれを用いた演算プロセッサ | |
JP2927102B2 (ja) | 命令列切り替え方法及びそれを用いた演算プロセッサ | |
JPH0877021A (ja) | 割込処理装置および方法 | |
JP3100705B2 (ja) | マイクロプロセッサ内の命令準備のための装置 | |
JPH0773034A (ja) | 情報処理装置 | |
JP2001014161A (ja) | プログラマブルコントローラ | |
JP2825315B2 (ja) | 情報処理装置 | |
JPH05173785A (ja) | 命令先取り装置 | |
JP3668643B2 (ja) | 情報処理装置 | |
JP2002351658A (ja) | 演算処理装置 | |
JP4151497B2 (ja) | パイプライン処理装置 | |
JPH0855033A (ja) | 情報処理装置 | |
KR100632317B1 (ko) | 프로세서에서 명령어들을 버퍼링하기 위한 방법 및 그 시스템 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 19981020 |