(57)【要約】【課題】  この発明は、プロセッサにおける命令実行方法に関し、この方法においては、一方で、プログラム制御ユニットが、このユニットに実装したプログラムカウンタのプログラムカウンタの状態を用いて、プログラムメモリのその時点で実行すべき命令をアドレス指定し、他方で、このプログラム制御ユニットが、このアドレス指定した命令を読み出して、復号し、そして実行に移しており、この発明の課題は、命令ブロックの高速命令実行によって、ＥＰＩＣプロセッサ技術を拡張し、それによって通常のサブルーチンコールを実行することなく、命令の実行を加速することである。【解決手段】  この課題は、一定数の順番に実行すべき命令を提供し、そのため命令実行後の戻りアドレスが決まっているブロック命令の形態において、ジャンプ命令が発生した場合に、プログラム制御ユニットが、その時点のプログラムカウンタの状態の保存と、一連の命令の命令数の保存とを更に実行することによって解決される。そうすることによって、この命令ブロックの最後の命令を実行した後に、保存していたプログラムカウンタの状態から、プログラムカウンタの計数プロセスが再び続行される。
2005516301.tif 000002
【特許請求の範囲】
【請求項１】
一方では、プログラム制御ユニットは、このユニット内に実装したプログラムカウンタのプログラムカウンタの状態を用いて、プログラムメモリのその時点で実行すべき命令をアドレス指定し、その際プログラム制御ユニットは、プログラムカウンタの計数モードとステップ幅を設定するとともに、その他に、ジャンプアドレスを保存しており、ジャンプ命令が出現した場合に、このプログラムカウンタが、このジャンプアドレスから、その計数モードを続行し、他方では、このプログラム制御ユニットが、このアドレス指定された命令を読み出して、復号し、そして実行に移す、プロセッサにおける命令実行方法において、
ハードウェアにもとづき、追加のブロック命令が、プロセッサ内に実装されており、その結果プログラム分岐時には、一定数の順番に実行すべき命令が提供されて、そのため命令実行後の戻りアドレスが決まっており、そしてプログラム分岐が発生した場合、プログラム制御ユニット（１０）が、サブルーチンに代わって、この実装されたブロック命令を選択的に呼び出し、その際その時点のプログラムカウンタの状態の保存と、一連の命令の命令数の保存とが更に行われることと、この命令ブロックの最後の命令が実行された後に、再び保存されていたプログラムカウンタの状態で、プログラムカウンタ（５）の計数プロセスを続行することを特徴とする方法。
【請求項２】
当該の追加のブロック命令が、演算装置（０）によって、条件付き命令（述語付き命令）として実行され、その際その命令語に、どのような条件の元で、命令ブロックの保存していた数の命令を実行するのかという情報を含んでいることを特徴とする請求項１に記載の方法。
【請求項３】
条件付きブロック命令により操作されるプログラム分岐の際に、実行フェーズでの、それに対応する遅延スロット（７）の最後において、条件照会の結果が評価可能となるまで、二つのパスが、暫定的な処理フェーズにおいて実行され、その際この条件を満たさない代替パスを却下した後に、直ちに、他方のパスのその時点で有効となった実行フェーズの進捗した位置から、この命令の実行を続行することを特徴とする請求項１または２に記載の方法。
【請求項４】
第一の命令ブロック（２）の第一のブロック命令の実行フェーズ時において第二のブロック命令が発生した場合に、ジャンプ命令処理に加えて、この中断された命令ブロック（２）のその時々の処理状態と、第二の命令ブロック（１１）からの戻りのために保存すべき最終アドレスとをプログラム制御用のローカルスタック（１２）に保存し、この最終アドレスは、ジャンプアドレスと第二のブロック命令の命令数とから求められるものであることを特徴とする請求項１から３までのいずれか一つに記載の方法。
【請求項５】
その時々の命令ブロックに統合されている命令のアドレスが、コンパイラから読み出し可能な特別なアドレス領域に置かれていることを特徴とする請求項１から４までのいずれか一つに記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、プロセッサにおける命令実行方法に関し、この方法においては、一方で、プログラム制御ユニットが、プログラムカウンタの計数モードとステップ幅を設定するとともに、その他にジャンプ命令が発生した場合に、このカウンタがそのアドレスから計数モードを続行するジャンプアドレスを保存する形で、プログラム制御ユニットが、このユニットに実装したプログラムカウンタのプログラムカウンタの状態を用いて、プログラムメモリのその時点で実行すべき命令をアドレス指定し、他方で、プログラム制御ユニットが、このアドレス指定した命令を読み出して、復号し、そして実行に移すものである。
【背景技術】
【０００２】
これまで半導体製造業者は、プロセッサの性能向上に対する要求には、クロック周波数、処理幅および複雑さを向上させることによって応えることができた。この開発方向には、物理的な限界がある。
【０００３】
そこで、プログラム実行プロセスにおける並列処理の認識と利用による更なる性能向上が期待されている。
【０００４】
非特許文献１には、これに関する新しい開発方向に対する包括的な記述がある。
【０００５】
ここでは、並列処理とは、一つのプロセッサ内における、互いに独立したプロセスの並行的に実行可能な演算および計算を意味するものとする。
【０００６】
このプロセッサの開発方向は、命令レベル並列化（ILP:Instruction-Level Parallelism ）という呼称でも知られている。ＩＬＰは、プロセッサとコンパイラ技術を組み合わせることにより実現され、それは、ＲＩＳＣライクな演算を並列的に実行することにより、実行速度を向上させるものである。
【０００７】
ＩＬＰベースのシステムは、一方では、逐次処理のプロセッサに対して実現された従来の高水準プログラム言語を、他方では、含まれている並列処理を自動的に識別するためのコンパイラ技術とハードウェアを使用している。しかし、プログラム技術を利用していることにより、ＩＬＰベースのシステムは、基本的にプログラム分岐を並列処理できないということを考慮しなければならない。
【０００８】
従来の技術では、スーパースカラープロセッサが知られている。ここでは、逐次的な命令フロー用のＩＬＰプロセッサが実現されている。この場合、プログラムは、使用可能な並列処理に関する情報を全く持っていない。ハードウェアによって、それを検出しなければならない。このことは、そのようなプロセッサは、絶えず増大するハードウェアの複雑さを必要とし、その際プロセッサの性能における要求が増大するに従い、この複雑さは、より高い比率で増大するという理由となっている。
【０００９】
更に、従来の技術では、超長命令語（ＶＬＩＷ）プロセッサが知られている。この場合、プログラムは、存在する並列処理に関する情報を有する。このプロセッサ技術に関しては、プログラム分岐の先取り命令実行（vorausschauende Befehlsabarbeitung）、分岐予測および投機的命令実行を適用できないという状況が欠点である。
【００１０】
それに対して、明示的並列命令コンピューティング（ＥＰＩＣ）プロセッサ技術は、更に発展したものとして、前述した両方の開発方向の利点を兼ね備えている。この場合、複雑さの重点が、ハードウェアから、コンパイラに、すなわちソフトウェアに移っている。
【００１１】
そこで、ＥＰＩＣプログラムは、ＩＬＰの他に、更にどのような条件において、所定のステートメントを実行すべきであるかをプロセッサに伝えている。プロセッサは、すべての命令を実行するが、追加条件を満足する結果だけを引き継いでいる（述語付き命令）。
【００１２】
この技術においても、命令の決まったブロックの命令実行は、命令負担のかかるサブルーチンによってのみ実現可能であるという欠点が残されたままである。また、この場合、戻りアドレスが確実に決まるように、プログラム分岐の分岐予測を最適に構成することは不可能である。
【００１３】
この欠点は、特にそのような命令ブロックが、プログラムに頻繁に現れる場合に、目立った性能の劣化を起こす。
【００１４】
まさにプログラム制御の遅延スロットにおいて処理される命令を能率的に実行するような考慮も行われていない。
【００１５】
従来の技術において周知の、プログラム分岐を能率的に処理するためのソフトウェアにもとづく方法は、ステートメントを「インライン」で実行できるようにプログラムすることにより、呼び出されるサブルーチンへのジャンプと戻りを低減するものである。しかし、これは、関数呼出しも行われるプログラム領域内に、サブルーチン（ＵＰ）を完全にコピーすることを前提としている。この場合、このように、プログラムにおいて、ＵＰを繰り返し発生させることは、メモリスペースの高負荷になるという欠点を孕んでいる。
【非特許文献１】"Computer Architecture a quantitative Approach" von John L. Hennessy, David A. Patterson (ISDN 1-55860-329-8)
【発明の開示】
【発明が解決しようとする課題】
【００１６】
そのため、この発明の課題は、通常のサブルーチンコールに優る、命令ブロックの高速命令実行性能を持つように、ＥＰＩＣプロセッサ技術を拡張することである。
【課題を解決するための手段】
【００１７】
この発明にもとづく、この課題の解決法は、ハードウェア面において、プロセッサ内に追加のブロック命令を実装するものと規定しており、その結果プログラム分岐時には、一定数の順番に実行すべき命令が提供され、そのため命令実行後の戻りアドレスが決まっており、そしてプログラム分岐が発生した場合に、プログラム制御ユニットが、サブルーチンの代わりに、この実装されたブロック命令を選択的に呼び出し、その際その時点のプログラムカウンタの状態の保存と一連の命令の命令数の保存とが行われるものである。
【００１８】
この命令ブロックの最後の命令を実行した後に、再び保存していたプログラムカウンタの状態を元に、プログラムカウンタの計数プロセスを続行する。
【００１９】
この発明にもとづく、この課題の解決法の別の実施形態は、演算装置の条件付き命令（述語付き命令）として、この追加のブロック命令を実行するものと規定しており、その際命令語には、どのような条件の元で、命令ブロックの保存された数の命令を実行するのかという情報を含んでいる。
【００２０】
このようにして、特別なブロック命令を条件付き命令として実行することも実現されている。
【００２１】
この発明にもとづく、この課題のＥＰＩＣプロセッサ技術に適合した形の有利な解決法では、条件付きブロック命令によって操作されるプログラム分岐の際に、実行フェーズの関係する遅延スロットの最後において、条件照会の結果が評価されるまで、二つのパスが、暫定的な実行フェーズにおいて実行されるものと規定されている。
【００２２】
この場合、この条件を満たさない代替パスが却下された後に、直ちに、他方のパスのその時点で有効となった実行フェーズの進捗した位置から、命令の実行を続行する。
【００２３】
命令は、主にそれぞれ複数の装置タイミング期間においてのみ、読み出されて、復号され、そして実行されるので、遅延スロットは、そのような処理中にある各命令に対して、それぞれプログラム制御分野における実行チャネルとして機能するものである。それらは、各命令の実行フェーズ後に、ようやく終了されることとなる。
【００２４】
そのため、次の命令が読み出し可能となる前に、先行する命令の実行フェーズを無条件に履行し終える必要がないということによって、命令処理時間を低減している。
【００２５】
しかし、このことは、遅延スロットにおいて処理中にある命令を、幾つかの装置タイミングに対してオーバーラップして実行させるという結果となる。
【００２６】
この発明にもとづくブロック命令の利用に対して、すべての遅延スロットが終了した状態でもある、可能な最も早い時点にジャンプからの戻りを設定する形で、事前に決まっている正確に知られた戻り時点での遅延スロット処理を回避することによっても、このブロックに属する命令を実行した後において、時間的な利点が生じる。このような有利な時間的な制御は、サブルーチンを実行する場合には不可能である。
【００２７】
この発明にもとづく、この課題の解決法の別の有利な実施形態では、第一のブロック命令の実行フェーズ時に、第二のブロック命令が発生した場合、第一の命令ブロックにおいて、所要の分岐を行うものと規定している。
【００２８】
中断された第一の命令ブロックのその時々の処理状態と、第二のブロック命令の終了からの戻りのために保存する最終アドレスとは、プログラム制御用のローカルスタックに保存される。
【００２９】
この解決法は、実行するブロック命令が、組み込み型としても実行されるものと規定している。こうすることによって、ブロック命令毎に、先行して中断された命令ブロックの処理状態のアドレスと、別の命令ブロックの実行する命令の命令数により明らかとなる戻りアドレスとを、ローカルスタックに保存して、戻る際に、そこから再び読み出すことを保証することができる。このローカルスタックは、プログラム制御部にある。
【００３０】
この発明にもとづく、この課題の解決法のコンパイラに適合した形の実施形態においては、その時々の命令ブロックに統合されている命令のアドレスが、コンパイラによって読み出し可能な特別のアドレス領域に保存されるものと規定している。
【発明を実施するための最良の形態】
【００３１】
以下において、実施例にもとづき、この発明をより詳しく説明する。付属の図面は、命令実行時におけるプロセスを含む演算装置の模式図を示している。
【００３２】
図面において、プログラムメモリ１内に、プログラム命令がプログラムの順番に置かれているのが明らかに分かる。プログラム制御ユニット１０内に含まれるプログラムカウンタ５は、プログラムメモリ１の一つの命令語をアドレス指定し、この命令語は、それに続いて復号されて、ジャンプ命令として識別されている。
【００３３】
そこで、その読み出されたジャンプアドレスは、ジャンプアドレスメモリ３に保存される。更に、このジャンプアドレスを用いて、第一の命令ブロック２がアドレス指定される。その他に、プログラム制御ユニット１０は、このジャンプ命令をブロック命令として識別している。このことは、その時点のプログラムカウンタの状態メモリ４に、このプログラムカウンタの状態が保存される結果となる。
【００３４】
更に、同様に、ブロック命令の命令数が、命令数メモリ６に保存される。こうすることにより、プログラム制御ユニット１０は、命令ブロックの実行後の戻りアドレスを算出、設定することができる。
【００３５】
図面には、第一の命令ブロック２において、別のブロック命令が含まれているのが描かれている。
【００３６】
通常のジャンプアドレス処理に応じて、この命令により、対応するジャンプアドレスがジャンプアドレスメモリ３に保存され、第二の命令ブロック１１が、このようにしてアドレス指定される。
【００３７】
この命令は、ブロック命令として識別されているので、そこで、また第一の命令ブロック２の処理状態が、ローカルスタックの処理状態メモリ９に、第二の命令ブロック１１の命令数が、ローカルスタックの命令数メモリ８に保存される。
【００３８】
第二の命令ブロック１１の最後の命令が実行された後に、ローカルスタックの命令数メモリ８の設定内容に対応して、算出された戻りアドレスにジャンプして、第一の命令ブロック２における命令実行を、その最後まで続行することができる。
【００３９】
この場合、プログラム制御ユニット１０は、保存した戻りアドレスによりプログラムメモリ１における中断されたプログラムの処理状態を示している、その時点のプログラムカウンタの状態メモリ４の内容をプログラムカウンタにロードすることを行い、プログラムメモリ１の実行しようとしていた命令に戻る。
【００４０】
このようにして、プログラムメモリ１において、中断された位置から、再びプログラムを続行することができる。
【図面の簡単な説明】
【００４１】
【図１】命令実行時におけるプロセスを含む演算装置の模式図
【符号の説明】
【００４２】
０    演算装置
１    プログラムメモリ
２    第一の命令ブロック
３    ジャンプアドレスメモリ
４    その時点のプログラムカウンタの状態メモリ
５    プログラムカウンタ
６    命令数メモリ
７    遅延スロット（実行フェーズ）
８    ローカルスタックの命令数メモリ
９    ローカルスタックの処理状態メモリ
１０    プログラム制御ユニット
１１    第二の命令ブロック
１２    プログラム制御用のローカルスタック
【図１】
2005516301.tif 000003
【国際調査報告】
2005516301.tif 000004
2005516301.tif 000005
2005516301.tif 000006
2005516301.tif 000007
2005516301.tif 000008
2005516301.tif 000009