(57)【特許請求の範囲】
【請求項１】
プログラムをメモリに記憶し、該プログラムを構成するインストラクションを前記メモリから前記キャッシュへフィルし、前記キャッシュからインストラクションをフェッチして、実行するプロセッサ用インストラクションの処理方法において、
前記プログラムを構成するように順番に記述された複数のインストラクションの内で次に実行されるインストラクションが次に記述されたインストラクションであると確定されているインストラクションを第１の種類のインストラクションと定義し、
記述順で次のインストラクション以外のインストラクションへのジャンプの指示を含むインストラクションを第２の種類のインストラクションと定義し、
前記プログラムにおいて該第１の種類のインストラクションのみが連続した順番で並ぶ複数のインストラクションの全体又は部分としてアレイを定義し、
前記キャッシュを第１のキャッシュと第２のキャッシュとから構成し、
前記第２のキャッシュには、前記第２の種類のインストラクションを含みつつ前記アレイの実行順序を定めたインストラクションをフィルし、
前記第１のキャッシュには、前記第２のキャッシュからフェッチしたインストラクションに基づいて特定したアレイの単位でインストラクションをフィルし、
前記キャッシュにおける上書き許容領域の生成を、特定されたアレイの単位で可とする、
ことを特徴とするプロセッサ用インストラクション処理方法。
【請求項２】
前記アレイがループ処理を行う前記第１の種類のインストラクションとして設定されることを特徴とする請求項１記載のプロセッサ用インストラクション処理方法。
【請求項３】
前記メモリに記憶するプログラムとしての記憶用プログラムには、インストラクションと、前記アレイを特定する情報としてのアレイ特定情報とを含み、
前記記憶用プログラムは、コンパイラ言語プログラムからコンパイラにより作成し、
前記第２の種類のインストラクションを含みつつ前記アレイの実行順序を定めたインストラクションは、前記記憶用プログラムのアレイ特定情報に対応付けられていることを特徴とする請求項１記載のプロセッサ用インストラクション処理方法。
【請求項４】
実行中のインストラクションを含むアレイを実行アレイと定義し、
第１のアレイと、該第１のアレイの次に実行アレイとなるアレイである第２のアレイとを定義し、
前記第１のキャッシュへの前記第２のアレイのフィルは、前記第１のアレイが実行アレイとなっている期間に、実施することを特徴とする請求項１記載のプロセッサ用インストラクション処理方法。
【請求項５】
第２の種類のインストラクションが条件付きジャンプであるために、前記第２のアレイの候補が複数個存在する場合は、それらすべての第２のアレイを、前記第１のアレイが実行アレイとなっている期間に、前記第１のキャッシュへフィルすることを特徴とする請求項４記載のプロセッサ用インストラクション処理方法。
【請求項６】
前記メモリに記憶するプログラムを、前記アレイに属する前記インストラクションを記述する第１のプログラム部分と前記アレイの実行順序を定めるインストラクションについて記述する第２のプログラム部分とに分離し、
前記第１及び第２のプログラム部分のインストラクションをそれぞれ前記第１及び前記第２のキャッシュへフィルすることを特徴とする請求項１記載のプロセッサ用インストラクション処理方法。
【請求項７】
前記第１のキャッシュ内に上書き禁止状態でフィルされている各アレイに存続優先順位を付与し、
アレイ単位での前記キャッシュにおける上書き許容領域の生成は、存続優先順位が最低になっているアレイを上書き禁止状態から上書き許容状態へ変更することにより実施することを特徴とする請求項１記載のプロセッサ用インストラクション処理方法。
【請求項８】
存続優先順位が最低になっているアレイが複数個存在するときは、該複数個の前記アレイの全部について上書き許容状態へ変更して、上書き許容領域を生成することを特徴とする請求項７記載のプロセッサ用インストラクション処理方法。
【請求項９】
現在、実行中のインストラクションを含むアレイについて、その存続優先順位を前記第１のキャッシュの中で最高にすることを特徴とする請求項７記載のプロセッサ用インストラクション処理方法。
【請求項１０】
実行中のインストラクションを含むアレイを実行アレイと定義して、現在の実行アレイの次に実行アレイとなるアレイには、現在の実行アレイの存続優先順位と同位以上の存続優先順位を付与することを特徴とする請求項９記載のプロセッサ用インストラクション処理方法。
【請求項１１】
プログラムをメモリに記憶し、該プログラムを構成するインストラクションを前記メモリから前記キャッシュへフィルし、前記キャッシュからインストラクションをフェッチして、実行するプロセッサ用インストラクションの処理装置において、
前記プログラムを構成するように順番に記述された複数のインストラクションの内で次に実行されるインストラクションが次に記述されたインストラクションであると確定されているインストラクションを第１の種類のインストラクションと定義し、
記述順で次のインストラクション以外のインストラクションへのジャンプの指示を含むインストラクションを第２の種類のインストラクションと定義し、
前記プログラムにおいて該第１の種類のインストラクションのみが連続した順番で並ぶ複数のインストラクションの全体又は部分としてアレイを定義し、
前記キャッシュを構成する第１及び第２のキャッシュ、
前記第２のキャッシュに、前記第２の種類のインストラクションを含みつつ前記アレイの実行順序を定めたインストラクションをフィルする第２のフィル手段、
前記第２のキャッシュからフェッチしたインストラクションに基づいてアレイを特定する特定手段、
前記第１のキャッシュに、特定されたアレイの単位でインストラクションをフィルする第１のフィル手段、及び
前記第１のキャッシュにおける上書き許容領域の生成を、特定されたアレイの単位で実施する上書き許容領域生成手段、
を有していることを特徴とするプロセッサ用インストラクション処理装置。
【請求項１２】
前記特定手段は、１個のループ処理に係る前記第１の種類のインストラクションの全体を１個のアレイとして特定することを特徴とする請求項１１記載のプロセッサ用インストラクション処理装置。
【請求項１３】
前記メモリに記憶するプログラムとしての記憶用プログラムには、インストラクションと、前記アレイを特定する情報としてのアレイ特定情報とを含み、
前記記憶用プログラムは、コンパイラ言語プログラムからコンパイラにより作成し、
前記第２の種類のインストラクションを含みつつ前記アレイの実行順序を定めたインストラクションは、前記記憶用プログラムのアレイ特定情報に対応付けられ、
前記特定手段は、前記アレイ特定情報に基づいてアレイを特定することを特徴とする請求項１１記載のプロセッサ用インストラクション処理装置。
【請求項１４】
実行中のインストラクションを含むアレイを実行アレイと定義し、
第１のアレイと、該第１のアレイの次に実行アレイとなるアレイである第２のアレイとを定義し、
前記第１のフィル手段は、前記第１のキャッシュへの前記第２のアレイのフィルを、前記第１のアレイが実行アレイとなっている期間に、実施することを特徴とする請求項１１記載のプロセッサ用インストラクション処理装置。
【請求項１５】
前記第１のフィル手段は、第２の種類のインストラクションが条件付きジャンプであるために、前記第２のアレイの候補が複数個存在する場合は、それらすべての第２のアレイを、前記第１のアレイが実行アレイとなっている期間に、前記第１のキャッシュへフィルすることを特徴とする請求項１４記載のプロセッサ用インストラクション処理装置。
【請求項１６】
前記メモリに記憶されるプログラムは、前記アレイに属する前記インストラクションを記述する第１のプログラム部分と前記アレイの実行順序を定めるインストラクションについて記述する第２のプログラム部分とに分離しており、
前記第１及び第２のフィル手段は、前記第１及び前記第２のキャッシュへ、前記第１及び第２のプログラム部分のインストラクションをそれぞれフィルすることを特徴とする請求項１１記載のプロセッサ用インストラクション処理装置。
【請求項１７】
前記第１のキャッシュ内に上書き禁止状態でフィルされている各アレイに存続優先順位を付与する付与手段を有し、
前記上書き許容領域生成手段は、存続優先順位が最低になっているアレイを上書き禁止状態から上書き許容状態へ変更して、上書き許容領域を生成することを特徴とする請求項１１記載のプロセッサ用インストラクション処理装置。
【請求項１８】
前記上書き許容領域生成手段は、存続優先順位が最低になっているアレイが複数個存在するときは、該複数個の前記アレイの全部について上書き許容状態へ変更して、上書き許容領域を生成することを特徴とする請求項１７記載のプロセッサ用インストラクション処理装置。
【請求項１９】
前記付与手段は、現在、実行中のインストラクションを含むアレイについて、その存続優先順位を前記第１のキャッシュの中で最高にすることを特徴とする請求項１７記載のプロセッサ用インストラクション処理装置。
【請求項２０】
前記付与手段は、実行中のインストラクションを含むアレイを実行アレイと定義して、現在の実行アレイの次に実行アレイとなるアレイには、現在の実行アレイの存続優先順位と同位以上の存続優先順位を付与することを特徴とする請求項１９記載のプロセッサ用インストラクション処理装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、コンピュータ等に装備されるプロセッサ用のインストラクション処理方法及びインストラクション処理装置に関し、詳しくはプロセッサにおけるインストラクションの管理を効率化するプロセッサ用インストラクション処理方法及びインストラクション処理装置に関するものである。
【０００２】
【従来の技術】
図１２はコンピュータにおける従来のインストラクション処理装置の構成図である。なお、図１２〜図１４において、後述の本発明の実施形態の構成要素と同一の構成要素については、実施形態のものと同符号で指示して、詳細な説明は省略し、主要点についてのみ説明する。プロセッサ６０は、ＣＰＵ１２、インストラクション・キャッシュ６４、及びデータ・キャッシュ１６を備え、インストラクション・ストア６５及びデータ・ストア２２は、メモリ・ユニット２５（図１３）内に所定エリアを確保されて、そこに記憶される。インストラクション・ストア６５内のインストラクションは、適宜、インストラクション・キャッシュ６４にフィルされ、プロセッサ６０は、インストラクション・キャッシュ６４からインストラクションをフェッチして、それを実行する。また、データ・ストア２２のデータは、適宜、データ・キャッシュ１６にフィルされて、ＣＰＵ１２は、データ・キャッシュ１６からフェッチしたデータを利用して、所定の演算を行うとともに、適宜、演算結果としての数値をデータ・ストア２２へ戻す。
【０００３】
図１３は図１２のインストラクション処理装置の詳細なブロック図である。制御インストラクション実行ユニット６６は、インストラクション・キュー及びディスパッチ・ユニット３３からディスパッチされるインストラクション及び演算実行ユニット３４から入力される演算結果に基づいてインストラクション・フェッチ・ユニット３１へ、次にメモリ・ユニット２５からフェッチするインストラクションのアドレスを通知する。
【０００４】
図１４は図１２のインストラクション・キャッシュ６４の制御部の状態遷移図である。アイドル（ＩＤＬＥ）状態において、フェッチ要求（Ｆｅｔｃｈ  Ｒｅｑｕｅｓｔ）が生じると、フェッチ要求のアドレスに係るインストラクションがインストラクション・キャッシュ６４に存在するかをチェックするアドレス比較（Ａｄｄｒｅｓｓ  Ｃｏｍｐａｒｅ）状態となる。アドレス比較状態において、フェッチ要求のアドレスに係るインストラクションがインストラクション・キャッシュ６４に存在する（キャッシュ・ヒット：Ｃａｃｈｅ  Ｈｉｔ）場合には、フェッチ（Ｆｅｔｃｈ）状態となり、インストラクション・フェッチ・ユニット３１はインストラクション・キャッシュ６４の該当インストラクションをフェッチする。アドレス比較状態において、フェッチ要求のアドレスに係るインストラクションがインストラクション・キャッシュ６４に存在しない（キャッシュ・ミス：Ｃａｃｈｅ  Ｍｉｓｓ）場合には、メモリ・アクセス（Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）状態となる。メモリ・アクセス状態において、インストラクション・キャッシュ６４がキャッシュ・ノット・フル（Ｃａｃｈｅ  Ｎｏｔ  Ｆｕｌｌ）であるとき、すなわち、インストラクション・キャッシュ６４に少なくとも１個のインストラクション分のフィル可領域が有るとき、フェッチ要求に係るアドレスのインストラクションがメモリ・ユニット２５からインストラクション・キャッシュ６４へフィルされるキャッシュ・フィル状態（Ｃａｃｈｅ  Ｆｉｌｌ）となる。メモリ・アクセス状態において、インストラクション・キャッシュ６４がキャッシュ・フル（Ｃａｃｈｅ  Ｆｕｌｌ）であるときは、すなわち、インストラクション・キャッシュ６４に１個のインストラクション分のフィル可領域も無いときは、キャッシュ削除（Ｃａｃｈｅ  Ｄｅｌｅｔｅ）状態となる。キャッシュ削除状態では、インストラクション・キャッシュ６５において所定のインストラクション、一般的には、インストラクション・キャッシュ６５のインストラクションの中でアクセス履歴の最も古いインストラクションから優先的に削除される。これにより、インストラクション・キャッシュ６５はキャッシュ・ノット・フルとなり、キャッシュ・フィル状態になる。キャッシュ・フィル状態はフェッチ状態を経てアイドル状態へ移行する。
【０００５】
【発明が解決しようとする課題】
従来のインストラクション処理装置の主な問題点は次のとおりである。
（ａ）プログラムにおいて記述順に連続する複数個のインストラクションをまとめてインストラクション・キャッシュ６４へフィルしたとしても、フィルしたインストラクションの中にジャンプ等のインストラクションが有ると、該ジャンプのインストラクションより後ろのインストラクションについては、フィルが無駄となり、キャッシュにおいて無駄なインストラクションの占める領域が増大してしまう。
（ｂ）メモリ・ユニット２５へのアクセス及びインストラクション・キャッシュ６４へのインストラクションのフィルは、インストラクション・キャッシュ６４においてフェッチするインストラクションの見つからないことが判明してから実施されるので、プロセッサ６０の処理遅延に繋がり易い。
【０００６】
本発明の目的は、キャッシュに関係する処理を合理化するプロセッサ用インストラクション処理方法及びインストラクション処理装置を提供することである。本発明の目的は、キャッシュにおけるインストラクションの管理を効率化するプロセッサ用インストラクション処理方法及びインストラクション処理装置を提供することである。
本発明の目的は、キャッシュへフィルするインストラクションが実際の実行に利用される率を高めるプロセッサ用インストラクション処理方法及びインストラクション処理装置を提供することである。
本発明の目的は、フェッチの際のキャッシュにおけるヒット率を高めるプロセッサ用インストラクション処理方法及びインストラクション処理装置を提供することである。
本発明の目的は、キャッシュにおける不要インストラクションの削除を合理化するプロセッサ用インストラクション処理方法及びインストラクション処理装置を提供することである。
本発明の目的は、複数個のインストラクションをまとめてメモリからプリロードし、キャッシュへフィルする際に、そのまとまりの検出を合理化するプロセッサ用インストラクション処理方法及びインストラクション処理装置を提供することである。
【０００７】
【課題を解決するための手段】
本発明の前提となるプロセッサ用インストラクション処理方法によれば、プログラムをメモリに記憶し、該プログラムを構成するインストラクションをメモリからキャッシュへフィルし、キャッシュからインストラクションをフェッチして、実行する。該プロセッサ用インストラクション処理方法において、プログラムを構成するように順番に記述された複数のインストラクションの内で次に実行されるインストラクションが次に記述されたインストラクションであると確定されているインストラクションを第１の種類のインストラクションと定義し、かつプログラムにおいて該第１の種類のインストラクションのみが連続した順番で並ぶ複数のインストラクションの全体又は部分として定義されたアレイをメモリから特定し、キャッシュにインストラクションを、特定されたアレイの単位でフィル可とする。
【０００８】
典型的には、アレイ単位で第１の種類のインストラクションをフィルするキャッシュと、第１の種類以外のインストラクションをフィルするキャッシュとは別個であるが、共通にしてもよい。キャッシュを共通にする場合には、少なくとも第１の種類のインストラクションについてはアレイ単位でフィルすることになる。アレイのサイズは、ほぼ均等にするのが、キャッシュにおけるアレイの管理上、好ましいが、均等でなくてもよいとする。なお、メモリからロードしたデータ（インストラクションもデータに含まれる。）をキャッシュに書き込むことを「フィル」、また、キャッシュのデータをメモリへ戻すことを「フラッシュ」と呼称する。キャッシュへのインストラクションのフィルをアレイ単位で実施することにより、フィル頻度の低減等、キャッシュにおけるインストラクションの管理を効率化できる。
【０００９】
本発明のプロセッサ用インストラクション処理方法には、次の態様を任意の組み合わせで適宜付加することができる。
（ａ）キャッシュにおける上書き許容領域の生成を、特定されたアレイの単位で可とする。こうして、キャッシュへのインストラクションのフィルだけでなく、キャッシュにおける上書き許容領域の生成についても、アレイで管理する。
（ｂ）アレイがループ処理を行う第１の種類のインストラクションとして設定される。ループ処理を行う第１の種類のインストラクションは、１個のまとまりとして使用されるので、アレイに割り当てて、管理するのが、効率的となる。
（ｃ）記述順で次のインストラクション以外のインストラクションへのジャンプの指示を含むインストラクションを第２の種類のインストラクションと定義し、アレイの特定は第２の種類のインストラクションに基づいて実施する。これにより、アレイの特定が円滑となる。
（ｄ）メモリに記憶するプログラムとしての記憶用プログラムには、インストラクションと、アレイを特定する情報としてのアレイ特定情報とを含み、記憶用プログラムは、コンパイラ言語プログラムからコンパイラにより作成し、アレイの特定を記憶用プログラムのアレイ特定情報に基づいて実施する。
（ｅ）キャッシュへのアレイのフィルは、現在実行中のインストラクションを含むアレイの全部のインストラクションの実行の終了の前に、実施する。アレイに含まれるインストラクションがフェッチされる前に、そのアレイがフィルされ、また、このフェッチ前のフィルはアレイ単位で行われるので、キャッシュにおけるインストラクションのヒット効率は高く維持される。現在実行中のインストラクションを含むアレイの全部のインストラクションの実行の終了の前に実施するキャッシュへのアレイのフィルは、第２の種類のインストラクションが条件付きジャンプのために、或るアレイの最後のインストラクションの次にフェッチの可能性のあるインストラクションが複数個存在する場合は、それら各インストラクションをそれぞれ含む複数個のアレイについて実施する。こうして、フェッチするインストラクションがキャッシュに存在しない事態が減少する。
【００１０】
（ｆ）キャッシュを、インストラクションをアレイ単位でフィルする第１のキャッシュと、第２の種類のインストラクションを含みつつアレイの実行順序を定めたインストラクションをフィルする第２のキャッシュとから構成し、アレイの特定は、第２のキャッシュからフェッチしたインストラクションの実行に基づいて実施する。第２のキャッシュにおけるインストラクションのフィルは、単一のインストラクションについてのみ、又は連続する複数個のインストラクションについて、実施可とし、アレイの特定は不要である。
（ｇ）メモリに記憶するプログラムを、アレイに属するインストラクションを記述する第１のプログラム部分とアレイの実行順序を定めるインストラクションについて記述する第２のプログラム部分とに分離し、第１及び第２のプログラム部分のインストラクションをそれぞれ第１及び第２のキャッシュへフィルする。第１及び第２のプログラム部分に分離して、それらのインストラクションをそれぞれ第１及び第２のキャッシュにフィルすることにより、フィルについての管理を能率ができる。なお、第１のプログラム部分と第２のプログラム部分との作成方式としては、（Ａ）プログラマーが、コンパイラ言語でプログラムを作成する際に、第１及び第２のプログラム部分を分ける方式、（Ｂ）プログラマーは、１個のプログラムをコンパイラ言語で作成し、コンパイラがそのプログラムを第１及び第２のプログラム部分を分ける方式、（Ｃ）プログラマー自身が、第１及び第２のプログラム部分へ分ける分割プログラムを自分用に作成し、その分割プログラムを使って、本来のプログラムを第１及び第２のプログラム部分へ分ける方式が考えられる。
【００１１】
（ｈ）第１のキャッシュ内に上書き禁止状態でフィルされている各アレイに存続優先順位を付与し、アレイ単位でのキャッシュにおける上書き許容領域の生成は、存続優先順位が最低になっているアレイを上書き禁止状態から上書き許容状態へ変更することにより実施する。存続優先順位を定義し、それが低い方のアレイを優先して、上書き許容状態へ変更することにより、フェッチするインストラクションのミスを低下できる。
（ｉ）存続優先順位が最低になっているアレイが複数個存在するときは、該複数個のアレイの全部について上書き許容状態へ変更して、上書き許容領域を生成する。複数個のアレイを同時に上書き許容状態へ変更すれば、インストラクションのミスを低下させつつ、キャッシュにおける上書き可領域の十分な確保を図ることできる。
（ｊ）現在、実行中のインストラクションを含むアレイについて、その存続優先順位を第１のキャッシュの中で最高にする。現在、実行中のインストラクションを含むアレイは、それが現在実行中のインストラクションを含む故に、キャッシュにおける存続優先順位を最高にするのが合理的である。また、現在、実行中のインストラクションを含むアレイは、ループ処理に係るインストラクションについてのアレイの可能性も高い。
（ｋ）実行中のインストラクションを含むアレイとしての実行アレイと定義して、現在の実行アレイの次に実行アレイとなるアレイには、現在の実行アレイの存続優先順位と同位以上の存続優先順位を付与する。なぜなら、現在の実行アレイの次に実行アレイとなるアレイには、現在の実行アレイ以外のアレイの中で、使用されるインストラクションを含む可能性が最高であるからである。
【００１２】
本発明の前提となるプロセッサ用インストラクション処理装置では、プログラムをメモリに記憶し、該プログラムを構成するインストラクションをメモリからキャッシュへフィルし、キャッシュからインストラクションをフェッチして、実行する。該プロセッサ用インストラクションの処理装置は、プログラムを構成するように順番に記述された複数のインストラクションの内で次に実行されるインストラクションが次に記述されたインストラクションであると確定されているインストラクションを第１の種類のインストラクションと定義し、かつプログラムにおいて該第１の種類のインストラクションのみが連続した順番で並ぶ複数のインストラクションの全体又は部分として定義されたアレイをメモリから特定する特定手段、及びキャッシュにインストラクションを、特定されたアレイの単位でフィルするフィル手段、を有している。
【００１３】
【発明の実施の形態】
以下、発明の実施の形態について図面を参照して説明する。
図１はコンピュータにおけるインストラクション処理装置の構成図である。プロセッサ１０は、ＣＰＵ１２を備えるとともに、キャッシュとして実行インストラクション・キャッシュ１４、制御インストラクション・キャッシュ１５、及びデータ・キャッシュ１６を備えている。プログラムは、所定の順番に記述された複数個のインストラクションの記述から成るものとする。ここで、実行インストラクション・キャッシュ１４にフィルされるインストラクションを実行インストラクションという。実行インストラクションとは、プログラムを構成するインストラクションの内でその実行後の次に実行するインストラクションがプログラムの記述順で次のインストラクションと確定されているインストラクション、すなわち次に実行するインストラクションをシーケンシャルに決めることのできるインストラクション（以下、適宜、「シーケンシャル・インストラクション」ともいうことにする。）と定義する。シーケンシャル・インストラクションには、例えば、ロード及びストアが含まれる。非シーケンシャル・インストラクションには、例えばジャンプ及びコール（サブルーチン呼び出しに使用する）が含まれる。また、制御インストラクション・キャッシュ１５にフィルされるインストラクションを制御インストラクションという。制御インストラクションとは、後で定義するアレイの実行順序を定めるインストラクションと定義する。実行インストラクション・ストア２０、制御インストラクション・ストア２１、及びデータ・ストア２２はメモリ・ユニット２５（図２）の相互に分離した所定エリアに存在する。メモリ・ユニット２５は、コンピュータのメイン・メモリの役割を果たしている。実行インストラクション・キャッシュ１４及びメモリ・ユニット２５において記憶されているインストラクションは機械語で記述されている。実行インストラクション及び制御インストラクションは、本実施形態では、コンパイラ言語のレベルでなく、アセンブリ言語や機械語のレベルで定義されているが、別の形態としてはコンパイラ言語のレベルで定義されてもよい。
【００１４】
図２は図１のインストラクション処理装置の詳細なブロック図である。実行インストラクション・キャッシュ１４の右側列、制御インストラクション・キャッシュ１５、及びデータ・キャッシュ１６に記載されている１６進（０ｘ）の数値は、例示であり、メモリ・ユニット２５におけるアクセス先のアドレスを示している。実行インストラクション・キャッシュ１４には例としてアレイ（Ａｒｒａｙ）Ａ，Ｂ，Ｃがフィル済みとなっている。アレイとは、プログラムにおいてシーケンシャル・インストラクションのみが連続順番で並ぶ記述列の全体及び部分をいうものとし、シーケンシャル・インストラクションの集合である。アレイのサイズは、過大及び過小では、取り扱いが非能率になるために、適切なサイズが設定される。全部のアレイのサイズが均等である必要はない。また、ループ処理されるシーケンシャル・インストラクションのみの連続順番で並ぶ記述列は１個のアレイにまとめられるのが、取り扱い上、有利となる。制御インストラクション・キャッシュ１５にはメモリ・ユニット２５より制御インストラクションがフィルされる。データ・キャッシュ１６及びメモリ・ユニット２５の間では、メモリ・ユニット２５からデータ・キャッシュ１６へのデータのフィル及びデータ・キャッシュ１６からメモリ・ユニット２５へのデータのフラッシュが行われる。なお、メモリからロードしたデータ（インストラクションもデータに含まれる。）をキャッシュに書き込むことを「フィル」、また、キャッシュのデータをメモリへ戻すことを「フラッシュ」と呼んでいる。データ・キャッシュ１６のデータは、ＣＰＵ１２において各種演算に使用され、また、演算の結果、更新される。インストラクション・フェッチ・ユニット３１は、次のインストラクションとして制御インストラクション実行ユニット３２から指示されたインストラクションを、実行インストラクション・キャッシュ１４からフェッチする。また、インストラクション・フェッチ・ユニット３１は、制御インストラクション実行ユニット３２からの指示に基づいて次にフェッチするアレイを実行インストラクション・キャッシュ１４に指示する。インストラクション・キュー及びディスパッチ・ユニット３３は、インストラクション・フェッチ・ユニット３１から送られてくるインストラクションのキュー（ｑｕｅｕｅ）を形成するとともに、実行順番の来たインストラクションを演算実行ユニット３４又はロード／ストア実行ユニット３５へディスパッチする。演算実行ユニット３４は、入力したインストラクションに対応する演算を行う。該演算では、レジスタ・ユニット３６から読出したデータが適宜、使用される。ロード／ストア実行ユニット３５は、入力したインストラクションに基づいてデータをレジスタ・ユニット３６へ書込んだり、レジスタ・ユニット３６からデータを読出したりする。制御インストラクション実行ユニット３２は、演算実行ユニット３４から演算結果を受け、これを適宜利用して、制御インストラクション・キャッシュ１５へ、次にフェッチするインストラクションのアドレスを通知した後、そのアドレスのインストラクションを制御インストラクション・キャッシュ１５からフェッチする。
【００１５】
図３は同一の処理に係るプログラムについて図１２のプロセッサ６０に適用されるものと図１のプロセッサ１０で適用されるものとを対比した図である。図３のプログラムはアセンブリ言語で記述されている。右向きの矢印に対して左側のプログラムがプロセッサ６０で使用されるプログラム（以下、適宜、「一次プログラム」という。）であり、右側のプログラムがプロセッサ１０で使用されるプログラム（以下、適宜、「二次プログラム」という。）である。さらに、二次プログラムの左側列及び右側列をそれぞれ「第１のプログラム部分」及び「第２のプログラム部分」とそれぞれ呼称する。一次プログラム、並びに第１及び第２のプログラム部分において、「：」に対して左側の数値（１０進表示）はメモリ・ユニット２５におけるストア・アドレスを示している。一次プログラムでは、シーケンシャル・インストラクションと、非シーケンシャル・インストラクションとが混在し、シーケンシャル・インストラクションのみが連続順番で並ぶ記述列では、インストラクションの実行順番は単純な記述順となる。一次プログラムにおいて、アドレス０７，１２のインストラクション以外のインストラクションはシーケンシャル・インストラクションとなっている。第１のプログラム部分は、一次プログラムにおけるインストラクションの内、シーケンシャル・インストラクションのみが選択され、シーケンシャル・インストラクションの連続実行の開始と終了までの範囲の全体又は部分が１個のアレイ（ａｒｒａｙ）にまとめられている。第１のプログラム部分の内、ストア・アドレスの０４〜０６は、ループを構成し、ループ構成部分は１個のアレイとして他のシーケンシャル・インストラクションから分離されるのが、キャッシュにおける削除等の取り扱いで有利となる。各アレイの中でインストラクションは実行順に記述されなければならないが、実行インストラクション・キャッシュ１４内では、アレイは、実行順に配列される必要はない。第２のプログラム部分は、アレイの実行順序を規定する。第２のプログラム部分の各インストラクションは、実行するアレイを定義するとともに、オプションとして、該アレイの実行後にジャンプするアレイ（以下、適宜、「ジャンプ先アレイ」という。）、及びジャンプについて条件が付加可能である。実行するアレイは”ｄｏ＋アレイ名”により定義され、ジャンプ先アレイは”ｊｕｍｐ＋ジャンプ先アレイ名”により定義され、条件は”ｗｈｅｎ”により定義される。第２のプログラム部分は、一次プログラムと同様に、シーケンシャル・インストラクションと、非シーケンシャル・インストラクションとが混在する。
【００１６】
下記は、制御インストラクション・キャッシュ１５へフィルされる代表的なインストラクションについてその意味を示したものである。なお、プリロード（Ｐｒｅ−ｌｏａｄ）は、実行インストラクション・キャッシュ１４へのフィルに対して行われる。キャッシュに対してフェッチが予測されるインストラクションを、メモリ・ユニット２５からプリロードし、あらかじめキャッシュへフィルすることを、「事前フィル」と呼称することにする。制御インストラクション・キャッシュ１５へフィルされる各インストラクション（制御インストラクション：Ｃｏｎｔｒｏｌ  Ｉｎｓｔｒｕｃｔｉｏｎ）という。）は、それに係るアレイについてのスタート・アドレス（Ａｒｒａｙ  Ｓｔａｒｔ  Ａｄｄｒｅｓｓ）及びサイズ（Ａｒｒａｙ  Ｓｉｚｅｚ）と、ジャンプ先の制御インストラクションのアドレス（Ｊｕｍｐ  Ｃｏｎｔｒｏｌ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ａｄｄｒｅｓｓ）とを含む。
（ａ）ｄｏ  Ｎ：アレイＮを実行し、アレイＮ＋１へ。アレイＮ＋１を事前フィル。
（ｂ）ｄｏ  Ｎ  ｊｕｍｐ  Ｍ  ｗｈｅｎ  Ｘ：アレイＮを実行し、条件Ｘが成立すればアレイＭへ。成立しなければアレイＮ＋１へ。アレイＮ＋１及びアレイＭを事前フィル。
（ｃ）ｄｏ  Ｎ  ｊｕｍｐ  Ｍ：アレイＮを実行し、無条件にアレイＭへ。アレイＭを事前フィル。
（ｄ）ｄｏ  Ｎ  ｃａｌｌ  Ｍ：アレイＮを実行し、スタックにＮ＋１値を格納してアレイＭへ。アレイＮ＋１及びアレイＭを事前フィル。
（ｅ）ｄｏ  Ｎ  ｒｅｔｕｒｎ：アレイＮを実行し、スタックの値へ。事前フィルはしない。
【００１７】
典型的には、プログラマーは、一次プログラムＱ１のみに対応するコンパイラ言語プログラムＰ１を作成し、コンパイラが該コンパイラ言語プログラムＰ１から二次プログラムＱ２の第１及び第２のプログラム部分ｑ１，ｑ２を自動作成する。別の作成方式としては、（ａ）プログラマーが、二次プログラムＱ２の第１及び第２のプログラム部分ｑ１，ｑ２に対応する第１及び第２のコンパイラ言語プログラムｐ１，ｐ２を作成し、該第１及び第２のコンパイラ言語プログラムｐ１，ｐ２からをコンパイラにより二次プログラムＱ２の第１及び第２のプログラム部分ｑ１，ｑ２を作成する方式、及び（ｂ）プログラマーが、一次プログラムＱ１のみに対応するコンパイラ言語プログラムＰ１を作成するとともに、該コンパイラ言語プログラムＰ１から、二次言語プログラムＱ２の第１及び第２のプログラム部分ｑ１，ｑ２に対応する第１及び第２のコンパイラ言語プログラムｐ１，ｐ２を作成する自動作成コンパイラ言語プログラムＲを作成し、プログラマーは、該自動作成コンパイラ言語プログラムＲを使って、自分が作成したコンパイラ言語プログラムＰ１から第１及び第２のコンパイラ言語プログラムｐ１，ｐ２を作成し、次に、コンパイラが、第１及び第２のコンパイラ言語プログラムｐ１，ｐ２から二次プログラムＱ２の第１及び第２のプログラム部分ｑ１，ｑ２を作成する方式がある。
【００１８】
図４は図３のプログラムについての図１２のプロセッサ６０のインストラクション・キャッシュ６４及び図１のプロセッサ１０の実行インストラクション・キャッシュ１４におけるインストラクションの配置状態の遷移図である。図４において、上側及び下側はそれぞれプロセッサ６０のインストラクション・キャッシュ６４（従来）及びプロセッサ１０の実行インストラクション・キャッシュ１４（本発明）の動作状態の遷移を示している。説明の便宜上、各インストラクションに関して、キャッシュにおける位置を「キャッシュ・アドレス」、また、メモリ・ユニット２５における位置を「メモリ・アドレス」と呼称する。各状態での各インストラクションについての左端の数値は各インストラクションについてのキャッシュ・アドレスを示し、インストラクション・キャッシュ６４及び実行インストラクション・キャッシュ１４は０番地から７番地までの計８個のキャッシュ・アドレスを持つものと仮定している。また、各状態での各インストラクションについての２列目の数値は各インストラクションについてのメモリ・アドレスを示している。従来技術及び本発明共に、図示の各状態を左から１番目、２番目、３番目、及び４番目の動作状態と呼称する。各動作状態において下線の付されているメモリ・アドレスは、そのインストラクションが各動作状態において現在、実行中であることを示している。また、図４において、インストラクションについてキャッシュ・アウト（削除）（Ｃａｃｈｅ  Ｏｕｔ（Ｄｅｌｅｔｅ））と記載されているが、実際には、インストラクションをキャッシュから追い出したり、削除したりしているのではなく、該当インストラクションがキャッシュにおいて占めている領域を上書き禁止領域から上書き許容領域へ切替えている。
【００１９】
図４の説明の前に、例示したプログラム処理の内容を図３の一次プログラムに戻って説明すると、メモリ・アドレスの０７番地インストラクション”ｊｕｍｐ０４：ｗｈｅｎ  Ｔｒｕｅ”では、条件ｂ＞１００が成立したときは、メモリ・アドレスの０４番地へ戻り、条件が成立する間はメモリ・アドレスの０４〜０７番地のループを繰り返し、条件が不成立になってから、該ループを抜け出して、メモリ・アドレスの０８番地へ進む。
【００２０】
図４の従来のキャッシュ制御において、１番目の状態では、キャッシュ・アドレスの４〜７番地のループが実行される。２番目の状態において、ループが終了する（Ｌｏｏｐ  Ｏｕｔ）とともに、実行順で次のメモリ・アドレスの０８番地を待つ（Ｗａｉｔ  ０８）。３番目の状態では、フェッチすべきメモリ・アドレスの０８番地のインストラクションが無いことが判明するとともに、インストラクション・キャッシュ６４には、新規のインストラクションのフィル場所が無いことが判明する。こうして、３番目の状態では、インストラクション・キャッシュ６４における新規のインストラクションのフィル場所を確保するために、アクセス履歴の古いインストラクションとしてのメモリ・アドレスの００〜０３番地のインストラクションをインストラクション・キャッシュ６４から削除する（Ｃａｃｈｅ  Ｏｕｔ（Ｄｅｌｅｔｅ））。４番目の状態において、上書き許容領域となったキャッシュ・アドレスの０〜３番地へメモリ・アドレスの０８〜１１番地のインストラクションをフィルし、メモリ・アドレスの０８番地のインストラクションのフェッチが行われる。
【００２１】
本発明に従うキャッシュ制御において、１番目の状態では、キャッシュ・アドレスの４〜６番地のインストラクション、すなわちアレイＢのループを実行しつつ、キャッシュ・アドレスの０〜３番地のインストラクション、すなわち不要のアレイＡを削除する。繰り返すが、キャッシュにおけるインストラクションの追い出し及び削除とは、実際には、追い出したり、削除したりするものではなく、該当領域を上書き禁止状態から上書き許容状態へ変更の処理を行っているだけである。２番目の状態では、アレイＢの実行後に実行されるアレイＣが実行インストラクション・キャッシュ１４のキャッシュ・アドレスの０〜３番地にフィルされる。２番目の状態では、さらに、アレイＢの実行が終了し、実行インストラクション・キャッシュ１４からアレイＢが削除され、かつ実行インストラクション・キャッシュ１４からメモリ・アドレスの０８番地のインストラクションがフェッチされる。３番目の状態では、アレイＣの次に実行されるアレイＤが実行インストラクション・キャッシュ１４のキャッシュ・アドレスの４〜６番地にフィルされる。３番目の状態からメモリ・アドレスの０９番地のインストラクションがフェッチされる。４番目の状態では、メモリ・アドレスのプロセッサ１０番地のインストラクションがフェッチされる。
【００２２】
図５は実行インストラクション・キャッシュ１４及び制御インストラクション・キャッシュ１５に装備される制御部のブロック図である。実行インストラクション・キャッシュ１４及び制御インストラクション・キャッシュ１５はそれぞれ実行インストラクション・キャッシュ制御部４１及び制御インストラクション・キャッシュ制御部４０により制御される。制御インストラクション・キャッシュ制御部４０は、各制御インストラクションについて、その制御インストラクション・アドレス、アレイ・スタート・アドレス、アレイ・サイズ、及びジャンプ先の制御インストラクションのアドレスとしてのジャンプ制御インストラクション・アドレスを、相互に対応付けで管理している。なお、コンパイラが、コンパイラ言語プログラムから作成する制御インストラクションには、その制御インストラクション・アドレス、アレイ・スタート・アドレス、アレイ・サイズ、及びジャンプ制御インストラクション・アドレスを含み、すなわち、これら制御インストラクション・アドレス、アレイ・スタート・アドレス、アレイ・サイズ、及びジャンプ制御インストラクション・アドレスはコンパイラにより作成される。実行インストラクション・キャッシュ制御部４１は、実行インストラクション・キャッシュ１４に有効に記憶されている、すなわち上書き禁止状態となっている各アレイについて、その履歴番号（該履歴番号については、図１０及び図１１において後述する。）、そのスタート・アドレスを、及びそれに含められている全部のインストラクションを、相互に対応付けて管理している。実行インストラクション・キャッシュ制御部４１における３個の列の内、右端の列は実行インストラクション・キャッシュ１４に記憶されている。
【００２３】
制御インストラクション・フェッチアドレスが制御インストラクション実行ユニット３２から発行されると、該発行の制御インストラクション・フェッチアドレスがアドレス比較部４２において制御インストラクション・キャッシュ制御部４０の全部の制御インストラクション・アドレスと比較され、いずれとも不一致（ミス：Ｍｉｓｓ）であると、メモリ・ユニット２５へのアクセスが行われて、メモリ・ユニット２５における該発行制御インストラクション・フェッチアドレスのインストラクションが制御インストラクション・キャッシュ１５にフィルされる。制御インストラクション・キャッシュ制御部４０は、また、制御インストラクション・キャッシュ１５へのメモリ・ユニット２５からの新規の制御インストラクションのフィル処理と並行して、該フィル制御インストラクションに係るアレイのスタート・アドレス及びサイズを実行インストラクション・キャッシュ制御部４１及びアドレス比較部４３へ出力する。これに伴い、アドレス比較部４３では、制御インストラクション・キャッシュ制御部４０からの入力情報及び実行インストラクション・キャッシュ制御部４１の記憶データに基づいて該当アレイが実行インストラクション・キャッシュ１４にあるか否かを調べ、もし無ければ、メモリ・ユニット２５へアクセスして、メモリ・ユニット２５から該当アレイの全部の実行インストラクションを実行インストラクション・キャッシュ１４へストアする。
【００２４】
図６は制御インストラクション・キャッシュ１５の制御部の状態遷移図である。なお、図６〜図８において、実行インストラクション・キャッシュ１４及び制御インストラクション・キャッシュ１５を相互に区別するために、実行インストラクション・キャッシュ１４及び制御インストラクション・キャッシュ１５に係る処理等にそれぞれ”Ｅ−”及び”Ｃ−”を各語句の先頭に付している。図６における遷移状態は、基本的に、図１４における遷移状態と同一である。フェッチ要求（Ｆｅｔｃｈ  Ｒｅｑｕｅｓｔ）が生じると、フェッチ要求のアドレスに係る制御インストラクションが制御インストラクション・キャッシュ１５に存在するかをチェックするアドレス比較（Ａｄｄｒｅｓｓ  Ｃｏｍｐａｒｅ）状態となる。アドレス比較状態において、フェッチ要求のアドレスに係る制御インストラクションが制御インストラクション・キャッシュ１５に存在する（キャッシュ・ヒット：Ｃａｃｈｅ  Ｈｉｔ）場合には、フェッチ（Ｆｅｔｃｈ）状態となり、制御インストラクション実行ユニット３２は制御インストラクション・キャッシュ１５の該当制御インストラクションをフェッチする。アドレス比較状態において、フェッチ要求のアドレスに係る制御インストラクションが制御インストラクション・キャッシュ１５に存在しない（キャッシュ・ミス：Ｃａｃｈｅ  Ｍｉｓｓ）場合には、メモリ・アクセス（Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）状態となる。メモリ・アクセス状態において、制御インストラクション・キャッシュ１５が制御キャッシュ・ノット・フル（Ｃａｃｈｅ  Ｎｏｔ  Ｆｕｌｌ）であるときは、すなわち、制御インストラクション・キャッシュ１５に少なくとも１個の制御インストラクション分のフィル可能領域が有るときは、フェッチ要求に係るアドレスの制御インストラクションがメモリ・ユニット２５から制御インストラクション・キャッシュ１５へフィルされるキャッシュ・フィル状態（Ｃａｃｈｅ  Ｆｉｌｌ）となる。メモリ・アクセス状態において、制御インストラクション・キャッシュ１５が制御キャッシュ・フル（Ｃａｃｈｅ  Ｆｕｌｌ）であるときは、すなわち、制御インストラクション・キャッシュ１５に１個の制御インストラクション分のフィル可能領域も無いときは、キャッシュ削除（Ｃａｃｈｅ  Ｄｅｌｅｔｅ）状態となる。キャッシュ削除状態では、インストラクション・キャッシュ６４において所定のインストラクション、一般的には、先入れ先出しの原則に基づいてインストラクション・キャッシュ６４のインストラクションの中でアクセス履歴の最も古いインストラクションから優先的に削除される。これにより、インストラクション・キャッシュ６４はキャッシュ・ノット・フルとなり、キャッシュ・フィル状態になる。キャッシュ・フィル状態はフェッチ状態を経てアイドル状態へ戻る。なお、フェッチ状態において、図１０及び図１１において詳述する履歴番号の更新及び付与が行われる。すなわち、現在の履歴番号を１、インクリメントし、この更新された履歴番号を、Ｃ−フェッチの制御インストラクションに対応する実行アレイ及びそのジャンプ先のアレイに付与する。
【００２５】
図７は実行インストラクション・キャッシュ１４が実行インストラクション・フェッチ要求を受けたときの実行インストラクション・キャッシュ１４の制御部の状態遷移図である。図６の状態遷移に対する図７の状態遷移の相違点についてのみ説明する。制御インストラクション・キャッシュ１５でのフィル及び削除はインストラクション単位となっているのに対し、実行インストラクション・キャッシュ１４でのインストラクションのフィル及び削除はアレイ単位で行う。したがって、キャッシュ削除状態では、実行インストラクションがアレイ単位で実行インストラクション・キャッシュ１４から削除され、キャッシュ・フィル状態では、実行インストラクションがアレイ単位でフィルされる。また、メモリ・アクセス状態からキャッシュ削除状態への移行条件は、実行インストラクション・キャッシュ１４のフルではなく、実行インストラクション・キャッシュ１４におけるインストラクションのアレイの上書き不可となり、メモリ・アクセス状態及びキャッシュ削除状態からキャッシュ・フィル状態への移行条件は、実行インストラクション・キャッシュ１４のノット・フルではなく、実行インストラクション・キャッシュ１４におけるアレイの上書き可となる。図７においても、アドレス比較状態からメモリ・アクセス状態へのキャッシュ・ミスが記載されているが、現実には、後述の図８における事前フィル処理により、キャッシュ・ミスの発生は大幅に減少する。
【００２６】
図８は実行インストラクション・キャッシュ１４へアレイを事前フィルするときの実行インストラクション・キャッシュ１４の制御部の状態遷移図である。前述したように、「事前フィル」とは、キャッシュに対してフェッチが予測されるインストラクションを、メモリ・ユニット２５からプリロードし、あらかじめキャッシュへフィルすることである。図７の状態遷移に対する図８の状態遷移の相違点についてのみ説明する。アイドル状態から所定アレイについての事前フィル要求があると、アドレス比較状態において、事前フィル要求に係るアレイが実行インストラクション・キャッシュ１４に存在するか否かについて、例えばアレイの先頭アドレスを基に実施される。そして、ヒットすれば、アドレス比較状態は、フェッチ状態へ移行することなく、アイドル状態へ戻る。ミスの場合は、実行インストラクションのフェッチ要求時と同様な状態遷移を経て、アイドル状態へ戻る。
【００２７】
図９は履歴番号についての説明のために例示したプログラムの構造図である。図９において、Ａ〜Ｍはアレイの名前であり、矢印は各アレイの実行順序を示している。図１０及び図１１は図９のプログラムの進行に伴いアレイに付与される履歴番号を示す図である。該プログラムには、複数個の分岐が含まれており、各分岐では複数の進路があるが、進路は図に記載のものと仮定して、履歴番号を説明する。図９において各アレイに記入されているアルファベットはアレイの名前であるのに対し、図１０及び図１１において各アレイに記入されている数値は履歴番号を意味している。図１０及び図１１において、履歴番号無しの白抜きの○は実行インストラクション・キャッシュ１４へ未フィルのアレイを意味し、履歴番号有りの白抜きの○は実行インストラクション・キャッシュ１４から削除されたアレイを示し、灰色の○は実行インストラクション・キャッシュ１４にフィル済みの有効アレイを示し、灰色の○の内、太線の○はプロセッサ１０において現在、実行中のアレイを意味している。なお、実行インストラクション・キャッシュ１４からアレイを削除すると言っているが、現実の処理では、削除の処理は行われず、該当アレイの記憶領域を上書き禁止領域から上書き許容領域へ変更しているだけである。図１０及び図１１の説明では、各アレイに含まれる実行インストラクションの個数は均等であり、すなわち各アレイのサイズは均等であり、制御インストラクション・キャッシュ１５にストアできるアレイの最大個数は８個であると仮定している。
【００２８】
状態１〜状態４までは、実行インストラクション・キャッシュ１４には、アレイのフィルのための十分な領域が存在し、実行インストラクション・キャッシュ１４からのアレイの削除は行われない。状態４以降では、実行インストラクション・キャッシュ１４には、アレイのフィルのための領域が確保されていないので、実行インストラクション・キャッシュ１４へのアレイのフィルに先立ち、履歴番号に基づいて所定のアレイを実行インストラクション・キャッシュ１４から削除している。各アレイの実行中は、該アレイの実行の次に実行予定のアレイが実行インストラクション・キャッシュ１４に事前フィルされる。実行中のアレイが条件付き実行インストラクションを含むために、該アレイの次に実行予定の該アレイが複数個あるときは、そのすべてのアレイを実行インストラクション・キャッシュ１４に事前フィルし、どのアレイへ分岐しても、実行インストラクション・キャッシュ１４にミスが生じないようにしている。制御インストラクション・キャッシュ１５における制御インストラクションの内容を調べることにより、実行インストラクション・キャッシュ１４の各アレイの次に実行されるアレイを容易に把握することができる。
【００２９】
各状態について説明する。
状態１：アレイＡをフェッチし履歴番号を１とする。アレイＢを事前フィルし、履歴番号を１とする。
状態２：アレイＢをフェッチし履歴番号を２とする。アレイＣ及びＪを事前フィルし、履歴番号を２とする。
状態３：アレイＪをフェッチし履歴番号を３とする。アレイＥ及びＫを事前フィルし、履歴番号を３とする。
状態４：アレイＥをフェッチし履歴番号を４とする。アレイＦを事前フィルし、履歴番号を４とする。
状態５：アレイＦをフェッチし履歴番号を５とする。アレイＧ及びＨを事前フィルし、履歴番号を５とする。このとき、ＣａｃｈｅがＦｕｌｌのため、履歴番号の一番古いアレイＡを捨てる。
状態６：アレイＧをフェッチし履歴番号を６とする。アレイＩ及びＪを事前フィルし、履歴番号を６とする。このとき、ＣａｃｈｅがＦｕｌｌのため、履歴番号の一番古いアレイＢ及びＣを捨てる。
状態７：アレイＪをフェッチし履歴番号を７とする。アレイＫの履歴番号を７とする。
状態８：アレイＫをフェッチし履歴番号を８とする。アレイＬ及びＭを事前フィルし、履歴番号を８とする。このとき、ＣａｃｈｅがＦｕｌｌのため、履歴番号の一番古いアレイＦ及びＨを捨てる。
状態９：アレイＬをフェッチし履歴番号を９とする。アレイＧの履歴番号を９とする。
状態プロセッサ１０：アレイＧをフェッチし履歴番号をプロセッサ１０とする。アレイＩ及びＪの履歴番号をプロセッサ１０とする。
【００３０】
まとめとして本発明の構成に関して以下の事項を開示する。
(１）：プログラムをメモリに記憶し、該プログラムを構成するインストラクションをメモリからキャッシュへフィルし、キャッシュからインストラクションをフェッチして、実行するプロセッサ用インストラクションの処理方法において、プログラムを構成するように順番に記述された複数のインストラクションの内で次に実行されるインストラクションが次に記述されたインストラクションであると確定されているインストラクションを第１の種類のインストラクションと定義し、かつプログラムにおいて該第１の種類のインストラクションのみが連続した順番で並ぶ複数のインストラクションの全体又は部分として定義されたアレイをメモリから特定し、キャッシュにインストラクションを、特定されたアレイの単位でフィル可とする、プロセッサ用インストラクション処理方法。
(２）：キャッシュにおける上書き許容領域の生成を、特定されたアレイの単位で可とする上記（１）のプロセッサ用インストラクション処理方法。
(３）：アレイがループ処理を行う第１の種類のインストラクションとして設定される上記（１）又は（２）のプロセッサ用インストラクション処理方法。
(４）：記述順で次のインストラクション以外のインストラクションへのジャンプの指示を含むインストラクションを第２の種類のインストラクションと定義し、アレイの特定は第２の種類のインストラクションに基づいて実施する上記（１）〜（３）のいずれかのプロセッサ用インストラクション処理方法。
(５）：メモリに記憶するプログラムとしての記憶用プログラムには、インストラクションと、アレイを特定する情報としてのアレイ特定情報とを含み、記憶用プログラムは、コンパイラ言語プログラムからコンパイラにより作成し、アレイの特定を記憶用プログラムのアレイ特定情報に基づいて実施する上記（１）〜（４）のいずれかのプロセッサ用インストラクション処理方法。
【００３１】
(６）：キャッシュへのアレイのフィルは、現在実行中のインストラクションを含むアレイの全部のインストラクションの実行の終了の前に、実施する上記（１）〜（５）のいずれかのプロセッサ用インストラクション処理方法。
(７）：現在実行中のインストラクションを含むアレイの全部のインストラクションの実行の終了の前に実施するキャッシュへのアレイのフィルは、第２の種類のインストラクションが条件付きジャンプのために、或るアレイの最後のインストラクションの次にフェッチの可能性のあるインストラクションが複数個存在する場合は、それら各インストラクションをそれぞれ含む複数個のアレイについて実施する上記（６）のプロセッサ用インストラクション処理方法。
(８）：キャッシュを、インストラクションをアレイ単位でフィルする第１のキャッシュと、第２の種類のインストラクションを含みつつアレイの実行順序を定めたインストラクションをフィルする第２のキャッシュとから構成し、アレイの特定は、第２のキャッシュからフェッチしたインストラクションの実行に基づいて実施する、上記（４）のプロセッサ用インストラクション処理方法。
(９）：メモリに記憶するプログラムを、アレイに属するインストラクションを記述する第１のプログラム部分とアレイの実行順序を定めるインストラクションについて記述する第２のプログラム部分とに分離し、第１及び第２のプログラム部分のインストラクションをそれぞれ第１及び第２のキャッシュへフィルする上記（８）のプロセッサ用インストラクション処理方法。
(１０）：第１のキャッシュ内に上書き禁止状態でフィルされている各アレイに存続優先順位を付与し、アレイ単位でのキャッシュにおける上書き許容領域の生成は、存続優先順位が最低になっているアレイを上書き禁止状態から上書き許容状態へ変更することにより実施する上記（８）のプロセッサ用インストラクション処理方法。
【００３２】
(１１）：存続優先順位が最低になっているアレイが複数個存在するときは、該複数個のアレイの全部について上書き許容状態へ変更して、上書き許容領域を生成する上記（１０）のプロセッサ用インストラクション処理方法。
(１２）：現在、実行中のインストラクションを含むアレイについて、その存続優先順位を第１のキャッシュの中で最高にする上記（１０）のプロセッサ用インストラクション処理方法。
(１３）：実行中のインストラクションを含むアレイとしての実行アレイと定義して、現在の実行アレイの次に実行アレイとなるアレイには、現在の実行アレイの存続優先順位と同位以上の存続優先順位を付与する上記（１２）のプロセッサ用インストラクション処理方法。
(１４）：プログラムをメモリに記憶し、該プログラムを構成するインストラクションをメモリからキャッシュへフィルし、キャッシュからインストラクションをフェッチして、実行するプロセッサ用インストラクションの処理装置において、プログラムを構成するように順番に記述された複数のインストラクションの内で次に実行されるインストラクションが次に記述されたインストラクションであると確定されているインストラクションを第１の種類のインストラクションと定義し、かつプログラムにおいて該第１の種類のインストラクションのみが連続した順番で並ぶ複数のインストラクションの全体又は部分として定義されたアレイをメモリから特定する特定手段、及びキャッシュにインストラクションを、特定されたアレイの単位でフィルするフィル手段、を有しているプロセッサ用インストラクション処理装置。
(１５）：キャッシュにおける上書き許容領域の生成を、特定されたアレイの単位で実施する上書き許容領域生成手段を有している上記（１４）のプロセッサ用インストラクション処理装置。
【００３３】
(１６）：特定手段は、１個のループ処理を行う第１の種類のインストラクションの全体を１個のアレイとして特定する上記（１４）又は（１５）のプロセッサ用インストラクション処理装置。
(１７）：記述順で次のインストラクション以外のインストラクションへのジャンプの指示を含むインストラクションを第２の種類のインストラクションと定義し、特定手段は、アレイの特定を第２の種類のインストラクションに基づいて実施する上記（１４）〜（１６）のいずれかのプロセッサ用インストラクション処理装置。
(１８）：メモリに記憶するプログラムとしての記憶用プログラムには、インストラクションと、アレイを特定する情報としてのアレイ特定情報とを含み、記憶用プログラムは、コンパイラ言語プログラムからコンパイラにより作成し、特定手段は、アレイの特定を記憶用プログラムのアレイ特定情報に基づいて実施する上記（１４）〜（１７）のいずれかのプロセッサ用インストラクション処理装置。
(１９）：フィル手段は、キャッシュへのアレイのフィルを、現在実行中のインストラクションを含むアレイの全部のインストラクションの実行の終了の前に、実施する上記（１４）〜（１８）のいずれかのプロセッサ用インストラクション処理装置。
(２０）：フィル手段は、現在実行中のインストラクションを含むアレイの全部のインストラクションの実行の終了の前に実施するアレイのフィルを、第２の種類のインストラクションが条件付きジャンプのために、或るアレイの最後のインストラクションの次にフェッチの可能性のあるインストラクションが複数個存在する場合は、それら各インストラクションをそれぞれ含む複数個のアレイについて実施する上記（１９）のプロセッサ用インストラクション処理装置。
【００３４】
(２１）：キャッシュは、インストラクションをアレイ単位でフィルするキャッシュを第１のキャッシュ、及び第２の種類のインストラクションを含みつつアレイの実行順序を定めたインストラクションをフィルする第２のキャッシュを含み、特定手段は、アレイの特定を、第２のキャッシュからフェッチしたインストラクションに基づいて実施する、上記（１７）のプロセッサ用インストラクション処理装置。
(２２）：メモリに記憶されるプログラムは、アレイに属するインストラクションを記述する第１のプログラム部分とアレイの実行順序を定めるインストラクションについて記述する第２のプログラム部分とに分離しており、第１及び第２のキャッシュは、第１及び第２のプログラム部分のインストラクションをそれぞれフィルされる上記（２１）のプロセッサ用インストラクション処理装置。
(２３）：第１のキャッシュ内に上書き禁止状態でフィルされている各アレイに存続優先順位を付与する付与手段を有し、上書き許容領域生成手段は、存続優先順位が最低になっているアレイを上書き禁止状態から上書き許容状態へ変更して、上書き許容領域を生成する上記（２１）のプロセッサ用インストラクション処理装置。
(２４）：上書き許容領域生成手段は、存続優先順位が最低になっているアレイが複数個存在するときは、該複数個のアレイの全部について上書き許容状態へ変更して、上書き許容領域を生成する上記（２３）のプロセッサ用インストラクション処理装置。
(２５）：付与手段は、現在、実行中のインストラクションを含むアレイについて、その存続優先順位を第１のキャッシュの中で最高にする上記（２３）のプロセッサ用インストラクション処理装置。
【００３５】
(２６）：付与手段は、実行中のインストラクションを含むアレイとしての実行アレイと定義して、現在の実行アレイの次に実行アレイとなるアレイには、現在の実行アレイの存続優先順位と同位以上の存続優先順位を付与する上記（２５）のプロセッサ用インストラクション処理装置。
【００３６】
【発明の効果】
本発明によれば、その実行後の次に実行するインストラクションがプログラムの記述順で次のインストラクションであると確定されているインストラクションを第１の種類のインストラクションと定義し、かつプログラムにおいて第１の種類のインストラクションのみが連続順番で並ぶ記述列の全体又は部分をアレイと定義して、キャッシュにおけるインストラクションの管理をアレイ単位で実施することにより、キャッシュに関する処理の迅速化及び円滑化を図ることができる。
【図面の簡単な説明】
【図１】コンピュータにおけるインストラクション処理装置の構成図である。
【図２】図１のインストラクション処理装置の詳細なブロック図である。
【図３】同一の処理に係るプログラムについて図１２のプロセッサに適用されるものと図１のプロセッサで適用されるものとを対比した図である。
【図４】図３のプログラムについての図１２のプロセッサのインストラクション・キャッシュ及び図１のプロセッサの実行インストラクション・キャッシュにおけるインストラクションの配置状態の遷移図である。
【図５】実行インストラクション・キャッシュ及び制御インストラクション・キャッシュに装備される制御部のブロック図である。
【図６】制御インストラクション・キャッシュの制御部の状態遷移図である。
【図７】実行インストラクション・キャッシュが実行インストラクション・フェッチ要求を受けたときの実行インストラクション・キャッシュの制御部の状態遷移図である。
【図８】実行インストラクション・キャッシュへアレイを事前フィルするときの実行インストラクション・キャッシュの制御部の状態遷移図である。
【図９】履歴番号についての説明のために例示したプログラムの構造図である。
【図１０】図９のプログラムの進行に伴いアレイに付与される履歴番号を示す前半図である。
【図１１】図９のプログラムの進行に伴いアレイに付与される履歴番号を示す後半図である。
【図１２】コンピュータにおける従来のインストラクション処理装置の構成図である。
【図１３】図１２のインストラクション処理装置の詳細なブロック図である。
【図１４】図１２のインストラクション・キャッシュ６４の制御部の状態遷移図である。
【符号の説明】
１０    プロセッサ
１４    実行インストラクション・キャッシュ
１５    制御インストラクション・キャッシュ
２０    実行インストラクション・ストア
２１    制御インストラクション・ストア
２５    メモリ・ユニット
【図１】
0003737742.tif 000002
【図２】
0003737742.tif 000003
【図３】
0003737742.tif 000004
【図４】
0003737742.tif 000005
【図５】
0003737742.tif 000006
【図６】
0003737742.tif 000007
【図７】
0003737742.tif 000008
【図８】
0003737742.tif 000009
【図９】
0003737742.tif 000010
【図１０】
0003737742.tif 000011
【図１１】
0003737742.tif 000012
【図１２】
0003737742.tif 000013
【図１３】
0003737742.tif 000014
【図１４】
0003737742.tif 000015