(57)【特許請求の範囲】
【請求項１】
プロセッサであって、
処理の実行順序を制御するプログラムカウンタを有するコントローラと、
並列に動作可能な複数の処理ユニットと、
前記複数個の処理ユニットのそれぞれに対応した命令フィールドを格納するキャッシュメモリを個別に備えた複数のキャッシュメモリであって、ある処理ユニットに対応した命令フィールドを格納する一のキャッシュメモリは複数組の記憶領域を有するものであり、前記ある処理ユニットとは別の処理ユニットに対応した命令フィールドを格納する他のキャッシュメモリは一組の記憶領域を有するものである、複数のキャッシュメモリと、
前記処理ユニットと前記キャッシュメモリとを接続するセレクタと、
前記一のキャッシュメモリ中の複数組の記憶領域のうちの第１の記憶領域と前記他のキャッシュメモリの記憶領域で構成される第１のセットと、前記一のキャッシュメモリ中の複数組の記憶領域のうちの第２の記憶領域と他のキャッシュメモリの記憶領域で構成される第２のセットにそれぞれ格納されている命令のアドレス情報と前記命令のマスク情報とを格納するタグメモリと、
前記タグメモリに格納されたアドレス情報と前記プログラムカウンタに格納されたアドレス情報部とを比較するヒット判定回路とを有し、
前記ヒット判定回路が前記タグメモリから読み出されたアドレス情報と、前記プログラムカウンタ中のアドレス情報部をセット毎に比較した結果、前記プログラムカウンタに格納されたアクセス先アドレスが前記タグメモリに格納されたアドレスと一致した場合、前記キャッシュメモリは、前記一致したアドレスを含むセットの該当するアドレスに対応する命令を前記セレクタに供給するものであり、前記セレクタは前記マスク情報を参照して、前記他のキャッシュメモリから供給された命令フィールドを前記処理ユニットへ出力するか否かを選択するものであることを特徴とするプロセッサ。
【請求項２】
請求項１記載のプロセッサであって、
格納制御回路をさらに有し、
前記プログラムカウンタに格納されたアクセス先アドレスが前記タグメモリに格納されたアドレスと一致しなかった場合、
前記格納制御回路は、前記プログラムカウンタが示すアドレスによって指定される命令を、外部に接続された主記憶装置から読み込み、該命令を前記複数の処理ユニットのいずれかに対応した複数個の命令フィールドに分割し、それぞれを、前記の各処理ユニットに対応したキャッシュメモリに格納することを特徴とするプロセッサ。
【請求項３】
前記複数のキャッシュメモリのうちの一のキャッシュメモリの容量は、他のキャッシュメモリとは異なる容量を備えてなる請求項１記載のプロセッサ。
【請求項４】
前記複数のキャッシュメモリのうちの一のキャッシュメモリの容量は、他のキャッシュメモリのＮ倍（Ｎは２以上の自然数）の容量を備えてなる請求項１または請求項３記載のプロセッサ。
【請求項５】
前記Ｎは２であることを特徴とする請求項４記載のプロセッサ。
【請求項６】
前記格納制御回路は、
前記命令を読み込む際に、当該命令が含む命令フィールドが前記複数個の処理ユニットのいずれに対応するかを示す格納情報を読み込み、
当該命令に対応するアドレス情報に関連づけて、前記格納情報をタグメモリに格納し、
前記格納情報に従って、前記命令が含む命令フィールドをそれが実行されるべき処理ユニットに対応するキャッシュメモリに格納制御してなる請求項２に記載のプロセッサ。
【請求項７】
前記キャッシュメモリの各々の容量は、それ自身に格納されうるNOP以外の命令の存在確率に応じたものであることを特徴とする請求項１、３、４のいずれか一記載のプロセッサ。
【請求項８】
前記一のキャッシュメモリは、それ自身に格納されうるNOP以外の命令の存在確率に応じた記憶領域数を持つことを特徴とする請求項１ないし請求項６いずれか一記載のプロセッサ。
【請求項９】
前記格納情報は、前記命令に、キャッシュメモリに格納されない命令フィールドが含まれることを指定する領域を備え、
前記格納制御回路は、前記格納情報が前記キャッシュメモリへの格納を指定する命令フィールドを格納制御してなる請求項６に記載のプロセッサ。
【請求項１０】
前記処理ユニットは、前記キャッシュメモリに格納されていない命令フィールドを実行する機能を備え、
前記格納情報あるいはマスク情報は、前記キャッシュメモリに格納されていない命令フィールドについては、キャッシュメモリに格納されていない命令フィールドであることを指定する領域を備え、
前記格納情報が、前記処理ユニットが実行する命令フィールドがキャッシュメモリに格納されていないことを示す場合には、前記セレクタは、前記キャッシュメモリに格納されていない命令フィールドを前記処理ユニットに出力するものである請求項１または請求項２のいずれか一記載のプロセッサ。
【発明の詳細な説明】
【０００１】
【産業上の利用分野】
本発明は、パーソナルコンピュータなどの情報処理装置に使われる、プロセッサ、コプロセッサ、及びそれらを用いた拡張ボード等に関する。
【０００２】
【従来の技術】
プロセッサのアーキテクチャ動向として、縮小命令セットコンピュータ（Ｒｅｄｕｃｅｄ  Ｉｎｓｔｒｕｃｔｉｏｎ  ｓｅｔｓ  ｃｏｍｐｕｔｅｒ、以下、ＲＩＳＣという）が主流になりつつある。複雑な命令を持たないという特徴のほかに、命令長を一定にするという特徴も持つ。命令が単純なため、処理が高速に行えることと、命令長が一定なため、一回のメモリアクセスで命令を読み込むことができることなどにより、高速処理が可能になっている。
【０００３】
ＲＩＳＣプロセッサの処理性能をさらに向上させる手段として、現在はスーパースカラー方式が主流となっている。スーパースカラー方式は、プロセッサ内部にある複数の演算ユニットのスケジューリングをハードウェアによって、実行時に動的に行うものである。この方法は、従来のソフトウェア資産をそのまま利用できるという長所がある反面、スケジューリングのためのハードウェアが必要であるうえ、実行時にスケジューリングを行うため、スケジューリングに使用できる情報が少なく、あまり高い並列性を引き出せないという短所がある。
【０００４】
一方、スーパースカラー方式よりも高い性能を達成することを目的した方式として、ベリーロングインストラクションワード（Ｖｅｒｙ  Ｌｏｎｇ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｗｏｒｄ、以下、ＶＬＩＷという）方式がある。これは、プロセッサ内部にある複数の演算ユニットのスケジューリングをコンパイル時にソフトウェアによって静的に行い、並列実行可能な命令群を一つの命令にまとめておき、プロセッサのプログラム実行時に一つにまとめた命令を一度に読み込み、実行する方式である。ＶＬＩＷ方式では、スケジューリングのためのハードウェアが不要である上、スケジューリング時に多くの情報を使用できるため、並列性を引き出しやすい、などの長所がある。しかし、ＶＬＩＷ方式では、複数の命令をひとまとめにするため、命令長が大きくなるという問題点が発生する。
【０００５】
スーパースカラー方式とＶＬＩＷ方式については、「次世代マイクロプロセッサ」、日経エレクトロニクス、ｐ６７〜ｐ１５０、１９９５．１．３０（ｎｏ．６２７）日経ＢＰ社に紹介されている。
一般にプログラムには、並列性の高い部分と並列性の低い部分が存在する。それぞれについて、簡単な例を図１、図２を用いて説明する。これらの図において、各行は一つの処理を表している。例えば、図１の１行目の処理８００ａは、変数Ｘ０の内容に１を加算して、その結果を、変数Ｙ０に代入することを示している。これらの処理は、通常上から１行ずつ逐次的に実行されるものである。
【０００６】
図１は、並列性の高い部分の例である。この部分では、それぞれの処理が互いに独立しているため、各処理を並列に実行することが可能である。例えば、２行目の処理８００ｂが使用する変数Ｘ１の値は、１行目の処理８００ａを実行する前に決まっているため、１行目の処理８００ａと２行目の処理８００ｂは、並列に実行することが可能である。
【０００７】
一方、図２は並列性の低いプログラムの例である。この部分では、各処理に必要な値が、直前の処理により算出されるため、直前の処理が終了するまで、次の処理を行うことができない。例えば、２行目の処理８１０ｂが使用する変数Ｘ１の値は、１行目の処理８１０ａを実行した後にならないと求まらないため、１行目の処理８１０ａが終了する前に、２行目の処理８１０ｂを、実行することは、通常は不可能である。
【０００８】
図３、図４には、図１、２のプログラムを、４つの処理を同時に実行可能なＶＬＩＷ方式の命令（以下、ＶＬＩＷ命令という）に変換した例を示す。これらの図では、横１列が一つのＶＬＩＷ命令に相当している。これらは、時間とともに上から下へと実行されるものとする。図３は並列性の高い処理（図１）を変換したものである。この部分では、１命令で４つの処理を同時に実行することにより、単一の処理ユニットしか持たない従来のプロセッサに対して、４倍の性能を実現することができる。
【０００９】
一方、図４は並列性の低い処理（図２）を変換したものである。この場合には、同時に１つの処理しか実行できないため、４つの処理を同時に実行可能なＶＬＩＷ方式を採用したプロセッサ（以下、ＶＬＩＷプロセッサという）でも、単一の処理ユニットしか持たないプロセッサと同じ性能しか、達成できない。しかも、実行すべき処理が存在しない部分でも命令長を一定にする必要から、処理が存在しないことを示す無処理命令（以下、Ｎｏ  Ｏｐｅｒａｔｉｏｎを略してＮＯＰという）を挿入する必要があるため、命令のサイズは、処理の内容に比べて大きくなる。
【００１０】
一般的なプログラムをＶＬＩＷプロセッサで実行しようとすると、ＮＯＰの割合はかなり高いものとなる。そのため、ＶＬＩＷプロセッサを使用する情報処理装置（以下、ＶＬＩＷシステムという）の主記憶、あるいはＶＬＩＷプロセッサ内部の命令用キャッシュメモリ（以下、キャッシュメモリという）の多くをＮＯＰが占め、無駄になったり、あるいはキャッシュメモリ容量が大きくなったりするので、ＶＬＩＷプロセッサの性能が期待ほど上がらなかったり、ＶＬＩＷシステムの高価格化やＶＬＩＷプロセッサのチップ肥大化、高価格化を招くという課題が生じている。
【００１１】
ＶＬＩＷプロセッサのこの課題に関しては、「実行遅延に基づく再構成ＶＬＩＷ型計算機の基本構成」情報処理学会研究報告、計算機アーキテクチャ、Ｎｏ．８９−１３、８７〜９３ページ、１９９１．７．１９、情報処理学会に記載されている。
【００１２】
ＶＬＩＷシステムの主記憶については、ＮＯＰを主記憶上に置かないことにより、有効活用が可能である。主記憶上で、ＮＯＰを削除することで、メモリ容量を節約している例としては、「ア  ブリュー  アーキテクチュア  フォー  ア  トレース  スケジューリング  コンパイラ」アイイーイーイー、トランザクション  オン  コンピューターズ、３７巻、８号、９６７〜９７９ページ、８月  １９８８（「Ａ  ＶＬＩＷ  Ａｒｃｈｉｔｅｃｔｕｒｅ  ｆｏｒ  ａ  ＴｒａｃｅＳｃｈｅｄｕｌｉｎｇ  Ｃｏｍｐｉｌｅｒ」ＩＥＥＥ，ＴＲＡＮＳＡＣＴＩＯＮ  ＯＮ  ＣＯＭＰＵＴＥＲＳ，ＶＯＬ３７，Ｎｏ８，ｐｐ９６７〜９７９、ＡＵＧＵＳＴ  １９８８」  ）に、簡単な説明がある。
【００１３】
また、ＶＬＩＷプロセッサ内部のキャッシュメモリの容量を減らすために、命令を圧縮して記憶し、キャッシュから読み出した後に伸長する方式がある。
これについては、「フィリップス  ホープス  トウ  ディスプレース  ディーエスピーズ  ウィズ  ブリュー」マイクロプロセッサリポート、１２〜１５ページ、１９９４．１２．５、米国マイクロデザインリソーシイズ社発行（「Ｐｈｉｌｉｐｓ  Ｈｏｐｅｓ  ｔｏ  Ｄｉｓｐｌａｃｅ  ＤＳＰｓ  ｗｉｔｈ  ＶＬＩＷ」「ＭＩＣＲＯＰＲＯＣＥＳＳＯＲ  ＲＥＰＯＲＴ」ｐｐ１２〜１５、Ｄｅｃｅｍｂｅｒ  ５、１９９４、Ｍｉｃｒｏ  Ｄｅｓｉｇｎ  Ｒｅｓｏｕｒｃｅｓ）に簡単な説明がある。
【００１４】
【発明が解決しようとする課題】
主記憶上でＮＯＰを削除する方式では、ＶＬＩＷプロセッサ内部のキャッシュメモリの容量は変わらないので、プロセッサの低価格化、あるいは高性能化はできなくなる。
また、プロセッサ内のキャッシュメモリに命令を格納する際に圧縮し、読み出す際に、伸長して実行する方式では、一般的に命令の実行パイプライン中に伸長処理のステージが挿入されてステージが深くなってしまい、分岐時の損失が大きくなってしまうという問題が発生する。
【００１５】
すなわち、プロセッサチップ内部の配線遅延の影響なども考慮すると、命令の伸長処理で１〜２サイクル消費されてしまうため、命令の実行パイプラインのステージが、１〜２段延びてしまう。命令が、順序良く実行されている場合には、このことは問題とならないことが多いが、分岐命令などによって、命令の実行順序が変化した場合には、何も命令を実行できない期間が生じてしまう。一般に、この期間は、実行パイプラインが深いほど長くなる。
【００１６】
さらに、ＶＬＩＷプロセッサのように、複数の命令を並列に実行するプロセッサでは、このことはより大きな問題となる。仮に、何も命令を実行できない期間が２サイクルあったと仮定すると、単一命令しか実行できない従来のプロセッサでは、最悪のケースでも２つの処理が実行できないだけである。しかし、４命令を同時に実行可能なＶＬＩＷプロセッサでは、最悪のケースでは８つの処理が実行できないことになる。並列に実行可能な処理の数が多くなるにつれて、この損失は大きくなる。
さらに、キャッシュメモリが小さくなる代わりに、命令を伸長するハードウェアが必要となるという問題もある。
【００１７】
従って、本発明の目的は、低価格で、高速処理可能なＶＬＩＷプロセッサを提供することである。
本発明の具体的な目的は、キャッシュメモリの使用効率を向上することでキャッシュメモリの容量を減らしてチップサイズを小さくした低価格なＶＬＩＷプロセッサを提供することである。
また、本発明の目的は、ＶＬＩＷプロセッサに適したキャッシュメモリの構成方法を提供することである。
さらに、本発明の他の目的は、上記ＶＬＩＷプロセッサにおいて、パイプラインを深くすることがなく、高速処理可能なＶＬＩＷプロセッサを提供することである。
【００１８】
【課題を解決するための手段】
上記目的を解決するために、本発明のプロセッサは、単一のプログラムカウンタによって処理の実行順序を制御される、並列に動作可能な複数個の処理ユニットと、前記複数個の処理ユニットが実行する命令を格納するための、前記処理ユニット各々に対応した複数のキャッシュメモリと、前記複数のキャッシュメモリに格納されている命令のアドレス情報を格納するタグメモリと、前記単一のプログラムカウンタが示すアドレスによって指定される命令を、外部から読み込む場合には、該命令を前記複数の処理ユニットのいずれかに対応した複数個の命令フィールドに分割し、それぞれを、前記の各処理ユニットに対応したキャッシュメモリに格納する格納制御回路とを備えたものである。
【００１９】
【作用】
本発明によれば、キャッシュメモリの容量を減らした場合でも、キャッシュメモリから読み出した命令は伸長処理を行うことなく実行されるので、命令の実行パイプラインを短くすることができ、分岐命令実行時の損失を小さくすることができる。
また、ＮＯＰの発生頻度を処理ユニットごとに異ならせ、また、ＮＯＰをキャッシュメモリ内に記憶しない。したがって、キャッシュメモリの容量を、ＮＯＰ以外の命令の発生頻度に応じて設定することができるので、キャッシュメモリの使用効率を上げることができる。この結果、同一のチップ面積で、更に高い処理性能を達成することが可能となる。
【００２０】
【実施例】
本発明によるプロセッサの構成を、図５〜９を用いて説明する。
【００２１】
図５は、プロセッサ１の構成例とそれを使用する情報処理装置の主記憶５の接続例を示すブロック図である。５はプロセッサ１が実行する命令や実行に必要なデータを格納するための主記憶であり、プロセッサ１の外部にある。プロセッサ１と主記憶５の接続バスは、３２ビット幅とする。１０ａ〜１０ｄは、プロセッサ１の主要部分をなすクラスタであり、それぞれ命令を格納するための命令キャッシュメモリ（以下、キャッシュメモリという）１００、演算などの処理を実行する処理ユニット１１０、処理ユニット１１０が実行する命令を選択するためのセレクタ１２０から構成される。各クラスタにある、それぞれの構成要素は、キャッシュメモリ１００ａ（クラスタＡにあるキャッシュメモリ）のように、ａ〜ｄの添字を付けて表す。本実施例では、同時に４つの命令を実行可能なＶＬＩＷプロセッサを想定しており、クラスタはＡ〜Ｄの４つである。
【００２２】
２０はキャッシュ制御回路であり、実行する命令がキャッシュメモリ１００ａ〜１００ｄに格納されているかどうかを判定するヒット判定回路２２０、主記憶５から命令を読み込みキャッシュメモリ１００ａ〜１００ｄに格納するフィル制御回路２１０、キャッシュメモリ１００ａ〜１００ｄに格納されている命令に関連した情報を格納しておくタグメモリ２００などから構成されている。
【００２３】
４０は、プロセッサ１全体の動作を制御するグローバルコントローラで、内部にはプログラムカウンタ３０がある。プログラムカウンタ３０は、次に実行する命令のキャッシュメモリ上でのバイトアドレスを指しているポインタであり、命令を実行するごとに更新される。キャッシュメモリ１００上の命令に対するアクセスには、プログラムカウンタ３０の値がそのまま使用される。
グローバルコントローラ４０と、フィル制御回路２１０は、内部にシーケンサを持ち、シーケンサの制御によって動作する。
【００２４】
図６は、ＶＬＩＷ命令の構成を示す図である。
【００２５】
７００は、並列処理のスケジューリングが行われた時点のＶＬＩＷ命令でクラスタ１０ａ〜１０ｄに１対１に対応する４つの命令フィールド７０１から構成されている。命令フィールドＮ（Ｎ≧０）−ａ〜ｄはそれぞれ、処理ユニット１０ａ〜１０ｄにて使用される命令フィールドである。本実施例では１フィールドの大きさは３２ビット（４バイト）とする。７１０は、ＮＯＰに相当する命令フィールドを削除して圧縮された命令列が主記憶５に格納されている様子を示す。
【００２６】
７０２は、各命令内の命令フィールドがＮＯＰであるかどうかを示すフラグの集合でありマスク情報という。マスク情報７０２は各ＶＬＩＷ命令毎に設けられ、それぞれ４つのクラスタに対応する４ビット構成となっている。これは実行時にＮＯＰを再び挿入できるようにするためのものである。なお、クラスタＡに対応する命令フィールドＮ−ａはＮＯＰであっても削除しない。これについては後述する。７２０は上記のＶＬＩＷ命令がプロセッサ１内のキャッシュに読み込まれた様子を示すもので、詳細については後述する。
【００２７】
図７は、プログラムカウンタ３０の構成例を示す図であって、ビット幅を２４ビットとし、さらに、３つのフィールドに分割している。この図において、３００ａはキャッシュメモリのヒット判定の際に、後述するタグメモリ２００中のアドレスタグ情報２０１と比較されるアドレスタグ部、３００ｂはタグメモリ２００およびキャッシュメモリ１００のエントリーを選択するためのエントリー選択部、３００ｃは各エントリー内における命令のオフセットを示す値であり、本実施例では、それぞれ、１３ビット、６ビット、３ビットの幅を持っている。なお、本実施例では、命令フィールドのサイズは３２ビットに固定されており、必ず４バイト境界に整列されているため、プログラムカウンタ３０の、下位２ビットは常に０である。
【００２８】
図８は、クラスタａ〜ｄ内のキャッシュメモリ１００ａ〜１００ｄの構成、容量を示す図である。クラスタＡのキャッシュメモリ１００ａの容量を４ｋバイト、クラスタＢ〜Ｄのキャッシュメモリ１００ｂ〜ｄの容量をそれぞれ２ｋバイトとしている。キャッシュメモリ１００ａは２ウエイ・セットアソシアティブ方式、キャッシュメモリ１００ｂ〜ｄは１ウエイ・セットアソシアティブ方式を採用しており、各セットの容量は、全て等しく２ｋバイトである。
【００２９】
キャッシュメモリ１００ａ〜１００ｄ各々のラインサイズは、命令フィールド８つ分の大きさ（４バイト×８＝３２バイト）に等しい。キャッシュ１００ａ〜１００ｄは同じ６４エントリー（２ｋバイト／３２バイト）からなり、各エントリーを共通のエントリーアドレスで指定する。本実施例では、キャッシュメモリを、アドレス５１２、読み書きデータ幅４バイトとして構成する。これは、読み書きデータ幅をラインサイズに合わせた３２バイトとした場合に、命令読み出し時に８ｔｏ１のセレクタが必要になることや消費電力が増大するので、これを避けるためである。
【００３０】
図９は、クラスタ１０ａ〜１０ｄにて共通に使用されるタグメモリ２００の構成例を示す図である。クラスタＡと対応させた２ウェイ構成となっている。タグメモリ２００には、６４個のエントリーがあり、各エントリーは、プログラムカウンタ３０のアドレスタグ部３００ａと比較するための１３ビットのアドレスタグ情報２０１と、主記憶５に格納されているマスク情報７０２に相当するマスク情報２０２を格納する領域とをそれぞれ２ウェイ分持つ。また、キャッシュ内容の更新には、リースト  リーセントリィ  ユーズド（Ｌｅａｓｔ  Ｒｅｃｅｎｔｌｙ  Ｕｓｅｄ、以下、ＬＲＵという）アルゴリズムを使用し、そのために必要なエントリー当たり１ビットのＬＲＵ情報２０３も持つ。
【００３１】
マスク情報２０２は、図６にて説明したマスク情報７０２が８ＶＬＩＷ命令分格納されたものである。図９において、ｉｎｓｔ０〜ｉｎｓｔ７は読み込んだ８つのＶＬＩＷ命令中のいずれであるかを示し、各々のｍｓｋ（ｘ）は、クラスタｘに対応したマスク情報である。ここで、ｘはＡ〜Ｄのいずれかである。クラスタＡに対応したマスク情報（２０２ａ）は、ｍｓｋ（Ａ）であり、そのセット全体が有効か否かを示す情報も兼ねている。１ならば、そのセットは有効であり、０ならば無効である。
【００３２】
図１１は、タグメモリ２００および、ヒット判定回路２２０の構成を示した図である。
図１２はクラスタＡの構成例を示す図である。セレクタ１２０ａは、２ウェイ構成となっているキャッシュメモリ１００ａ−０、１００ａ−１が出力する２つのデータの中から必要な命令を選択するためのものである。
図１３はクラスタＢ〜Ｄの構成例を示す図である。セレクタ１２０ｂは、１ウェイ構成となっているキャッシュメモリ１００ｂから、読み出されたデータとＮＯＰに相当する命令フィールドを対応するマスク情報に従って選択するためのものである。
図１４は、図１２に示すセレクタ１２０ａが出力を選択する際の規則を示すものである。
図１５は、図１３に示すセレクタ１２０ｂが出力を選択する際の規則を示すものである。
【００３３】
以下、プロセッサ１の動作説明に先立ち、コンパイラによるＶＬＩＷ命令の作成について説明する。
一般に、コンパイラは、命令列を生成する際に、それ自身の持つハードウェア資源の割り当て規則に従って各処理ユニットに処理を割り当てる。本実施例では、コンパイラがＶＬＩＷ命令を生成する際に、プログラムの中で並列度が少ない部分については、クラスタＡの処理ユニット１１０ａに対して処理を優先的に割り当てるようにハードウェア資源の割り当て規則を持つ。さらに、並列度が高い部分では、各処理ユニット１１０に対してできるだけ均等に処理を割り当てて、高い処理性能を達成できるようにスケジューリングを行う。
【００３４】
この結果、図６の７００に示すように、クラスタＡは、他のクラスタと比較して、有効な処理が存在する確率が高くなり、逆に、ＮＯＰの存在する確率が低くなる。このようにすることで、並列度に応じて、命令コードサイズ、処理性能を適切な値にすることが可能である。
【００３５】
次に、コンパイラは、図６の７１０に示すように、ＮＯＰを削除して命令の量を圧縮する。同時に圧縮した命令を伸長するために必要なマスク情報７０２を作成する。
マスク情報７０２の０は、対応する命令フィールド７０１がＮＯＰであることを、１はＮＯＰ以外であることを示す。ただし、クラスタＡについては、命令フィールドの種類にかかわらず（ＮＯＰであっても）、マスク情報のクラスタＡ対応部分は常に１に固定する。前述したように、ＶＬＩＷ命令は４つの命令フィールドからなるため、マスク情報７０２は４ビットで構成される。
【００３６】
また、本発明では、主記憶５の中ではＮＯＰを削除しているために、プロセッサ１のプログラムカウンタ３０の値が示すキャッシュメモリ１００上のアドレスと、主記憶５の中の、命令が格納されているアドレスとは並びが異なる。そのために、主記憶に対してアクセスする際にはアドレスの変換を行う。
【００３７】
これは、一般にプロセッサが仮想記憶を実現する際に用いるページテーブルとＴＬＢと呼ぶアドレス変換バッファによるアドレス変換機構と同じ技術で実現できる。本発明では、コンパイラは、ページテーブルに相当するアドレス変換テーブルをコンパイル時に主記憶上５に作成する。これらは、ＮＯＰを削除する前の命令列７００と、ＮＯＰを削除した命令列７１０の関係から作成できる。
【００３８】
なお、アドレス変換バッファは、図示していないが、後述するように、フィル制御回路２１０内に構成している。また、電源オン時には初期化（０クリア）を行っておく。
【００３９】
上述のように、コンパイラによって、クラスタＡに有効な命令フィールドが存在する確率が高くなっているため、本実施例では、これに対応するため、クラスタＡ１０ａのキャッシュメモリ１００ａの容量を、他のクラスタのキャッシュメモリ１００ｂ〜１００ｄの容量と比較して大きくしている。具体的にはキャッシュメモリ１００ａの連想度を他のキャッシュメモリ１００ｂ〜１００ｄの２倍にしている。
【００４０】
続いて、プロセッサ１が命令を実行する過程を図を用いて説明する。図１０は、キャッシュメモリの全体動作フローの概略を示す図である。
【００４１】
プロセッサ１がプログラムを実行する際には、まず、グローバルコントローラ４０がプログラムカウンタ３０の値を参照して、処理の実行に必要な命令を得るためにキャッシュメモリ１００に対してアクセスを行う。この場合、まず初めに、ヒット判定回路２２０が、タグメモリ２００をアクセスして、キャッシュメモリ１００に必要な命令が入っているかどうかの判定、すなわち、キャッシュメモリのヒット判定を行う（ステップ９００、ステップ９１０）。
【００４２】
この結果、キャッシュメモリがヒットしていたならば、ヒット判定回路２２０はタグメモリ２００内の対応するエントリの、ＬＲＵ情報２０３を更新する（ステップ９６０）。グローバルコントローラ４０はヒットしたセットから命令を読み出し、各処理ユニットへ命令を供給する（ステップ９７０）。各処理ユニットはヒット信号４００により、キャッシュメモリ１００がヒットしたことを知り実行を開始する。
【００４３】
ここで、キャッシュのヒット判定（９００、９１０）の手順を、図１１〜１５を用いて説明する。
上述したように、プロセッサ１がプログラムを実行する際には、まず、グローバルコントローラ４０は、プログラムカウンタ３０中のエントリー選択部３００ｂの値を用いて、タグメモリ２００中の６４エントリーの中から一つのエントリーを選択し、格納されたアドレスタグ情報２０１、マスク情報２０２、ＬＲＵ情報２０３を読み出す。タグメモリ２００は、２ウエイ構成なので、アドレスタグ情報２０１、マスク情報２０２は２セット分の情報が読み出される。同時に、グローバルコントローラ４０は、キャッシュメモリ１００の同じエントリーに対してもアクセスする。
【００４４】
次に、ヒット判定回路２２０はタグメモリ２００から読み出されたアドレスタグ情報２０１と、プログラムカウンタ３０中のアドレスタグ部３００ａをセット毎に比較し、一致するかどうかを調べる。なお、比較する幅に相当した数（本実施例では１３個）の、ＥＸ−ＮＯＲゲート２２００の出力がすべて１であったら一致したことになる。
【００４５】
同時に、セレクタ２２１０は、プログラムカウンタ３０中のオフセット３００ｃを用いて、セット毎に読み出された８ＶＬＩＷ命令分のマスク情報２０２（ｉｎｓｔ０〜ｉｎｓｔ７）から該当するＶＬＩＷ命令のマスク情報２０２を選択する。上記比較結果と、選択したマスク情報２０２内のマスク情報２０２ａがいずれも１であったら、ＡＮＤゲート２２０１によって、そのセットはヒットとしたことになり、ｈｉｔ（ｓｅｔ０）４００ａまたは４００ｂは１になる。
【００４６】
２つのセットのうちのどちらかがヒットしていれば、ＯＲゲート２２０４によってキャッシュはヒットとなる。なお、どのセットがヒットしているかという情報は、ｈｉｔ（ｓｅｔ０）４００ａによって、クラスタＡに伝えられる。また、キャッシュがヒットした場合、ヒットしたセットのマスク情報２０２ｂ〜ｄは、ｈｉｔ（ｓｅｔ０）４００ａによって有効になり、４１０ｂ〜ｄによって、クラスタＢ〜Ｄへ伝えられる。
【００４７】
キャッシュメモリ１００ａ〜１００ｄには、プログラムカウンタ３０中のエントリー選択部３００ｂとオフセット３００ｃを足し合わせた９ビットの値が与えられる。クラスタＡでは、２つのセットから同時に命令フィールドが読み出される。セレクタ１２０ａは、いずれのセットがヒットしたかを示すｈｉｔ（ｓｅｔ０）４００ａに従っていずれかを選択する。選択規則は図１４に示すとおりである。
【００４８】
キャッシュメモリ１００ｂ〜１００ｄは、一つのセットから読み出された命令フィールドと、ＮＯＰに相当する処理コードが、セレクタ１２０ｂ〜１２０ｄに与えられる。セレクタ１２０ｂ〜１２０ｄは、上記有効になったマスク情報４１０ｂ〜ｄに従って動作する。選択規則は図１５に示すとおりである。ＮＯＰに相当する処理コードは、あらかじめ決まっているため、結線論理によって実現することが可能である。
【００４９】
これまで述べたように、キャッシュメモリ１００ｂ〜１００ｄから読み出された命令は、セレクタ１２０ｂ〜１２０ｄを１段通過するだけで処理ユニットに与えられる。従って、必要な処理クロック数も少なく、パイプラインも短くすることができる。
【００５０】
次にキャッシュメモリがミスヒットした場合の動作を説明する。
キャッシュメモリがミスヒットしたならば、ヒット判定回路２２０から、ヒット信号４００ｃにより、ミスヒットしたことがフィル制御回路２１０へ伝えられ、フィル制御回路２１０が動作を開始する。この時に、キャッシュメモリ１００ａ〜１００ｄにはプログラムカウンタ３０のエントリー選択部３００ｂとオフセット３００ｃの値が与えられ、内容が読み出されるが、同時にヒット信号４００ｃにより、ミスヒットしたことが伝えられるので、処理ユニット１１０ａ〜１１０ｄは停止状態となり、問題は生じない。
【００５１】
次に、フィル制御回路２１０は、代わりのＶＬＩＷ命令と対応するマスク情報を主記憶５から読み出し、それぞれキャッシュメモリ１００ａ〜１００ｄとタグメモリ２００の該当エントリに格納する。以下、この動作について説明する。
まず、キャッシュメモリ中の該当エントリーに新しい命令を格納できるだけの空き領域があるか否かを調べる。タグメモリ２００内の該当エントリーについて、いずれかのセットのｉｎｓｔ０ｍｓｋ〜ｉｎｓｔ７ｍｓｋのマスク情報ｍｓｋ（Ａ）をすべて調べ、すべて０ならば該当エントリーの該当セットは空いていることになる。空き領域がなければ、フィル制御回路２１０は該当エントリー中のいくつかのセットを無効にして空き領域を作る。この作業を、キャッシュの無効化と呼ぶ。
【００５２】
無効化をする際には、フィル制御回路２１０は、まず、どのセットを無効化するかを選択し（ステップ９２０）、その後で、そのエントリーを無効化する（ステップ９３０）。無効化の方法は後述する。
空き領域があったら、あるいは無効化により空き領域を作ったら、フィル制御回路２１０は、経路４５４を経由してタグメモリ２００にアドレスタグ情報２０１などを格納して、新しいエントリーを作成し（ステップ９４０）、その後、ステップ９５０において、フィル制御回路２１０は、３２ビット幅のバスに合わせて、８命令分のマスク情報７０２を同時に読み出す。フィル制御回路２１０は読み込んだマスク情報７０２を、タグメモリ２００とフィル制御回路２１０自身に格納する。つぎに、８命令分のマスク情報に合わせてＶＬＩＷ命令７０１も８命令分を続けて読み出す。
【００５３】
フィル制御回路２１０は、ＶＬＩＷ命令７０１を読み込む際に、順次、マスク情報７０２を解析して、該当するキャッシュメモリへの書き込み信号を発行する。主記憶５からの命令供給経路の幅は、命令フィールドの大きさと等しく３２ビットであるため、書き込む対象となるキャッシュメモリの指定は、キャッシュメモリ１００ａ〜１００ｄの個別の書き込み信号を制御するだけで実現可能である。
【００５４】
２つのセットともに空いていた場合あるいは、２つのセットを無効化した空けた場合に、いずれのセットに命令を格納するかはあらかじめ決めておくものとする。
また、前述のように、ＮＯＰ命令はあらかじめプロセッサ内にその処理コードを持っており、改めてＮＯＰ命令を格納することはしない。従って、各ＶＬＩＷ命令中にＮＯＰ命令に相当する命令フィールドがあれば、フィル制御回路２１０は、マスク情報に従って、キャッシュメモリへの書き込みを行わない。
この結果、８つのＶＬＩＷ命令はそれぞれの各命令フィールドごとに、対応するクラスタ内のキャッシュメモリに最大８つ格納される。
【００５５】
また、本発明では、前述のように、主記憶５の中の命令列７１０ではＮＯＰを削除しているために、プログラムカウンタ３０の値が示すキャッシュメモリ上のアドレスと、主記憶５の中の、命令が格納されているアドレスとは並びが異なる。そのために、フィル制御回路２１０中のアドレス変換バッファと、主記憶５上のアドレス変換テーブルを用いてアドレスの変換を行いつつ、アクセスする。
【００５６】
フィル制御回路２１０は、これらの機構を用いて、プログラムカウンタ３０の値のアドレス変換を行い、経路４５０を介して、主記憶５から変換後のアドレスが示す命令を読み出し、キャッシュメモリ１００に格納する。なお、４５０には、変換後のアドレスの他に主記憶の制御信号も含まれる。以後の処理は、ヒット時の処理と同じである。
なお、以上の処理のうち、いくつかは、並行して行ったり、順序を入れ替えることが可能である。例えば、ＬＲＵ情報の更新（ステップ９６０）と命令の供給（ステップ９７０）は、同時に実行することが可能である。
【００５７】
次に、上述した無効化するセットの選択方法について説明する。無効化するセットの選択（９２０）は、ＬＲＵ情報２０３を用いて行われる。これは、いずれのセットが最近使われたかを示すものである。ヒット判定回路２２０は、セット０が最近使用されたならば「０」、セット１が最近使用されたならば「１」を格納する。すなわち、セットＡのヒット信号４００ａの値を、キャッシュヒット時に、該当エントリーのＬＲＵ情報２０３へ書き込む。
【００５８】
具体的な無効化の手順としては、まず、フィル制御回路２１０は、該当エントリーのＬＲＵ情報２０３が示すアクセス履歴が古い方のキャッシュメモリのセットに、新しい命令を入れることができるかどうかを調べる。「新しい命令のマスク情報」と「ＬＲＵ情報２０３が示すアクセス履歴が古い方の命令のマスク情報を反転したもの」の各ビットごとの論理積が全て０になれば、新しい命令を入れることができる。そして、ＬＲＵ情報２０３が示すアクセス履歴が古い方のセットを無効化する。無効化はタグメモリ２００の該当エントリー、該当セットのマスク情報すなわち、ｉｎｓｔ０〜ｉｎｓｔ７のｍｓｋ（Ａ）２０２ａを０にすればよい。
【００５９】
調べた結果、新しい命令を入れることができない場合には、ＬＲＵ情報２０３が示すアクセス履歴が新しい方のセットについても同じことを調べる。入れることができればＬＲＵ情報２０３が示すアクセス履歴が新しい方のセットを無効化する。どちらのセットを無効化しても、新しい命令を入れられない場合には、両方のセットを無効化する。
【００６０】
無効化は、フィル制御回路２１０が、タグメモリ２００中の選択されたセットのマスク情報のうち、ｉｎｓｔ０ｍａｓｋ〜ｉｎｓｔ７ｍａｓｋのクラスタＡに対応するｍｓｋ（Ａ）２０２ａを全て０に設定することで行われる。もし、いずれか一つのセットしか無効にしない場合は、その後ですぐ新しい命令を読み込みマスク情報を設定し直すので、かならずしも０に設定する必要はない。なお、電源オン時には、マスク情報２０２の初期化（０クリア）を行い、あらかじめ無効化を行っておく。
【００６１】
また、上述の説明では、処理ユニット１１０ａに有効な命令が集中するように構成、制御しているが、もちろん、これに限定されるものではない。
また、本実施例ではキャッシュメモリ１００ａの容量を他のキャッシュメモリの２倍としたが、これに限るものではなく、特定の処理ユニットへの命令の集中比率に合わせて構成すればよい。
【００６２】
【発明の効果】
以上述べたように、本発明によれば、コンパイラによって、特定のクラスタにＮＯＰ以外の命令が優先的に割り当てられ、さらに、それを利用してキャッシュメモリの容量をクラスタ毎に変えていることから、キャッシュメモリの利用効率が向上する。その結果、同一の性能を実現するために必要なキャッシュメモリの容量を小さくすることが可能となり、低価格化に効果がある。
【００６３】
また、キャッシュメモリから読み出された命令は、処理ユニットに入るまでの通過する回路を少なくする事ができるので、命令パイプラインを短くすることができる。したがって、分岐命令実行時の損失を小さくすることができ、高速化が可能になる。
また、キャッシュメモリが小さくなることで、各演算ユニットの近くにキャッシュメモリを配置できるため、配線のための領域を小さくできる。動作速度の向上にも効果がある。
したがって、低価格で高速処理可能なＶＬＩＷプロセッサが実現できる。
【図面の簡単な説明】
【図１】並列性の高い処理部分の一例である
【図２】並列性の低い処理部分の一例である
【図３】図１に対応したＶＬＩＷ命令の一例である。
【図４】図２に対応したＶＬＩＷ命令の一例である。
【図５】本発明における、キャッシュメモリ周辺の構成例である。
【図６】本発明における命令圧縮例である。
【図７】本発明における、プログラムカウンタの一例である。
【図８】キャッシュメモリの構成例を示す図である。
【図９】キャッシュメモリのタグ部分の構成例を示す図である。
【図１０】キャッシュメモリの動作フロー（全体）を示す図である。
【図１１】タグメモリ、およびヒット判定回路の構成例を示す図である。
【図１２】クラスタＡのキャッシュメモリの構成例を示す図である。
【図１３】クラスタＢ−Ｄのキャッシュメモリの構成例を示す図である。
【図１４】クラスタＡのセレクタ用制御信号の例を示した表である。
【図１５】クラスタＢ−Ｄのセレクタ用制御信号の例を示した表である。
【符号の説明】
１：プロセッサ、  ５：主記憶、  １０ａ〜１０ｄ：クラスタＡ〜クラスタＤ、２０：キャッシュ制御回路、  ３０：プログラムカウンタ、  ４０：グローバルコントローラ、１００ａ−０、１００ａ−１：クラスタＡのキャッシュメモリのセット０、セット１、  １００ｂ〜１００ｄ：クラスタＢ〜クラスタＤのキャッシュメモリ、  １１０ａ〜１１０ｄ：クラスタＡ〜クラスタＤの処理ユニット、１２０ａ〜１２０ｄ：クラスタＡ〜クラスタＤのセレクタ、  ２００：タグメモリ、２０１：アドレスタグ情報、  ２０２ａ〜２０２ｄ：クラスタＡ〜クラスタＤに対応したマスク情報、  ２０３：ＬＲＵ情報、  ２１０：フィル制御回路、２２０：ヒット判定回路、  ３００ａ：アドレスタグ部、  ３００ｂ：エントリー選択部、  ４００ｃ：ヒット信号、  ４１０ａ〜４１０ｄ：クラスタＡ〜クラスタＤに対するセレクタ制御信号、  ４５０：主記憶に対するアドレスおよび制御信号、  ４５１：マスク情報のリードパス、  ４５２：タグメモリのリードパス、４５３：フィルアドレス指定パスおよび書き込み制御信号、  ４５４：タグメモリの更新パス、  ８００ａ〜８００ｂ：並列に実行できる処理の例、  ８１０ａ〜８１０ｂ：並列に実行できない処理の例、７００：元の命令列、  ７０１：命令フィールド、  ７０２：マスク情報、  ７１０：主記憶上の命令列、  ７２０：キャッシュ上の命令列、  ２２０２：セレクタ制御信号生成部。
【図１】
0003598589.tif 000002
【図２】
0003598589.tif 000003
【図３】
0003598589.tif 000004
【図４】
0003598589.tif 000005
【図５】
0003598589.tif 000006
【図６】
0003598589.tif 000007
【図７】
0003598589.tif 000008
【図８】
0003598589.tif 000009
【図９】
0003598589.tif 000010
【図１０】
0003598589.tif 000011
【図１１】
0003598589.tif 000012
【図１２】
0003598589.tif 000013
【図１３】
0003598589.tif 000014
【図１４】
0003598589.tif 000015
【図１５】
0003598589.tif 000016