(57)【特許請求の範囲】
【請求項１】
一つの命令で一つ又は一対のデータを処理するスカラ処理装置及び一つの命令で同一の演算を多数要素からなるデータの組に施すベクトル処理装置と各種データを記憶する主記憶装置との間に介装され、該主記憶装置に記憶された前記データをコピーして格納する記憶部を有してなるキャッシュ記憶装置であって、
該記憶部が、該スカラ処理装置用のスカラ処理データを格納するとともに、該ベクトル処理装置用のベクトル処理データを格納するためのベクトルレジスタとしての機能を有し、
該ベクトルレジスタの領域の始点を示す始点情報と、該ベクトルレジスタの領域を形成する要素の配置間隔を示すインターリーブ・ファクターと、該ベクトルレジスタの長さを示す長さ情報と、該ベクトルレジスタの型情報またはバリッド情報を示すコントロール・ビットとを割当情報として保持するテーブルを更にそなえ、
該テーブルを参照し該割当情報に基づき、クロスバースイッチを規則的に順次切り替えて、該記憶部に、該ベクトルレジスタとして用いられる領域の配置を規則的に分散して割り当て、該記憶部に分散して割り当てた該ベクトルレジスタの領域に、該ベクトル処理データを格納するように制御する制御部をそなえて構成されたことを特徴とする、キャッシュ記憶装置。
【請求項２】
該記憶部において該ベクトルレジスタの領域を動的に割り当てることを特徴とする、請求項１に記載のキャッシュ記憶装置。
【請求項３】
該記憶部において該ベクトルレジスタとして割り当てられた領域以外の領域を、該スカラ処理データを格納する領域として割り当てることを特徴とする、請求項１又は請求項２に記載のキャッシュ記憶装置。
【請求項４】
該記憶部における該ベクトルレジスタと該ベクトル処理装置との間でベクトル処理データの送受を行なうことを特徴とする、請求項１〜３のいずれか１項に記載のキャッシュ記憶装置。
【請求項５】
該ベクトルレジスタを用いた該ベクトル処理装置による処理を終了すると、該制御部が、該記憶部において該ベクトルレジスタとして割り当てられた領域を解放することを特徴とする、請求項１〜４のいずれか１項に記載のキャッシュ記憶装置。
【請求項６】
該ベクトルレジスタを用いた該ベクトル処理装置による処理を終了すると、該制御部が、該テーブルに保持された前記割当情報を無効化することにより、該記憶部において該ベクトルレジスタとして割り当てられた領域を解放することを特徴とする、請求項１記載のキャッシュ記憶装置。
【発明の詳細な説明】
【０００１】
（目次）
発明の属する技術分野
従来の技術
発明が解決しようとする課題
課題を解決するための手段
発明の実施の形態
・（ａ）本発明のアスペクト説明（図１〜図８）
・（ｂ）一実施形態の説明（図９〜図２０）
発明の効果
【０００２】
【発明の属する技術分野】
本発明は、高性能な電子計算機にそなえられるキャッシュ記憶装置に関し、特に、高スループット演算を実現するためのベクトル処理機能を含むキャッシュ記憶装置に関するものである。
キャッシュ記憶装置は、プログラムを実行して処理を行なう際に参照する各種データの局所性に基づき、処理の高速化を実現するための高速，少容量の一時記憶装置である。
【０００３】
一方、ベクトル処理方式は、多数のデータを組にしてベクトル処理データとし、それに対して同一の演算（ベクトル演算）を施すことにより、処理の高速化を実現するものである。
【０００４】
【従来の技術】
従来より、データ処理の高速化を可能とするデータ処理方式として、ベクトル処理方式がある。
初期のベクトル処理装置は、主記憶装置（メモリ）に記憶されるベクトル処理データに対するメモリ−メモリ間での演算を基本とした命令体系を有していたが、このベクトル処理装置には、メモリアクセスに付随する遅延のため、命令の発行から実際に演算が開始されるまでの遅延時間が長いという課題があった。
【０００５】
そこで、現在のベクトル処理装置においては、主記憶装置からベクトル処理データをベクトルレジスタに読み出し、レジスタ−レジスタ間でのベクトル処理を行なった後に、処理結果を主記憶装置に書き戻すロード・ストア方式が主流となっている。
一方、ベクトル演算以外の汎用演算であるスカラ演算（スカラ処理) を高速に行なうために、キャッシュ記憶装置が用いられている。
【０００６】
ここで、キャッシュ記憶装置は、演算に必要な各種データ（命令データやオペランド等）を保持しうる高速，少容量の一時記憶装置であり、主記憶装置へのアクセス時間を短縮するためのものである。
従って、処理対象データのうち、並列処理可能なデータについてはベクトル処理を施し、それ以外のデータについてはスカラ処理を施せば、処理の高速化を更に図ることができるため、キャッシュ記憶装置を有するスカラ処理装置とベクトル処理装置とを組み合わせて使用することがより好ましい。
【０００７】
そして、従来は、以下のようにして、スカラ処理装置とベクトル処理装置とを組み合わせて使用していた。
（１）スカラ処理装置とベクトル処理装置とは、それぞれ独立に主記憶装置にアクセスするようにする。そして、ベクトル処理装置は、主記憶装置から読み出したベクトル処理データをベクトルレジスタに格納し、このベクトルレジスタとの間で、直接ベクトル処理データのやりとりを行なう。
（２）ベクトル処理装置は、スカラ処理装置用のキャッシュ記憶装置を介して主記憶装置にアクセスするようにする。ここで、主記憶装置へのアクセスはキャッシュ記憶装置が行ない、ベクトル処理装置は、キャッシュ記憶装置が主記憶装置から読み出したベクトル処理データをベクトルレジスタに格納し、このベクトルレジスタとの間で、ベクトル処理データのやりとりを行なう。
【０００８】
【発明が解決しようとする課題】
しかしながら、上記（１）の方法では、主記憶装置からのデータ転送路として、スカラ処理装置用のデータ転送路とベクトル処理装置用のデータ転送路とが多重化して設けられているため、データ転送路として使用される物理的な信号線の数が多くなり、スカラ処理装置とベクトル処理装置とを１つのチップ上に集積することが困難になるという課題がある。
【０００９】
また、上記（２）の方法では、連続領域にないベクトル処理データに対してベクトル処理を行なう際に、ベクトル処理データがキャッシュ記憶装置上に疎に展開されることがあり、このときには、キャッシュ記憶装置における有効データの格納率が著しく低下するため、スカラ処理の効率が大きく低下するという課題がある。なお、従来の高速なスカラ処理装置が単独でベクトル処理に相当する計算を行なう場合でも、連続領域に配置されていないベクトル処理データに対しては、やはり同様にキャッシュ記憶装置を有効に利用することはできない。
【００１０】
さらに、上記（１），（２）いずれの場合にも、キャッシュ記憶装置及びベクトルレジスタという二種類の記憶装置をそれぞれ別個に必要とするため、これら記憶装置及びその周辺装置の占有面積が大きくなり、やはりスカラ処理装置及びベクトル処理装置の集積化が困難になるという課題がある。
本発明は、このような課題に鑑み創案されたもので、キャッシュ記憶装置における有効データの格納率を低下させることなく、スカラ処理装置とベクトル処理装置とを１つのチップ上に集積化できるようにした、キャッシュ記憶装置を提供することを目的とする。
【００１１】
【課題を解決するための手段】
このため、本発明のキャッシュ記憶装置は、一つの命令で一つ又は一対のデータを処理するスカラ処理装置及び一つの命令で同一の演算を多数要素からなるデータの組に施すベクトル処理装置と各種データを記憶する主記憶装置との間に介装され、該主記憶装置に記憶された前記データをコピーして格納する記憶部を有してなるキャッシュ記憶装置であって、該記憶部が、該スカラ処理装置用のスカラ処理データを格納するとともに、該ベクトル処理装置用のベクトル処理データを格納するためのベクトルレジスタとしての機能を有し、該ベクトルレジスタの領域の始点を示す始点情報と、該ベクトルレジスタの領域を形成する要素の配置間隔を示すインターリーブ・ファクターと、該ベクトルレジスタの長さを示す長さ情報と、該ベクトルレジスタの型情報またはバリッド情報を示すコントロール・ビットとを割当情報として保持するテーブルを更にそなえ、該テーブルを参照し該割当情報に基づき、クロスバースイッチを規則的に順次切り替えて、該記憶部に、該ベクトルレジスタとして用いられる領域の配置を規則的に分散して割り当て、該記憶部に分散して割り当てた該ベクトルレジスタの領域に、該ベクトル処理データを格納するように制御する制御部をそなえて構成されたことを特徴としている（請求項１）。
【００１２】
このとき、該記憶部において該ベクトルレジスタの領域を動的に割り当ててもよい（請求項２）。
【００１３】
また、該記憶部において該ベクトルレジスタとして割り当てられた領域以外の領域を、該スカラ処理データを格納する領域として割り当てることができる（請求項３）。
さらに、該記憶部における該ベクトルレジスタと該ベクトル処理装置との間でベクトル処理データの送受を行なう（請求項４）。
【００１４】
また、該ベクトルレジスタを用いた該ベクトル処理装置による処理を終了すると、該制御部が、該記憶部において該ベクトルレジスタとして割り当てられた領域を解放してもよい（請求項５）。
具体的には、該ベクトルレジスタを用いた該ベクトル処理装置による処理を終了すると、該制御部が、該テーブルに保持された前記割当情報を無効化することにより、該記憶部において該ベクトルレジスタとして割り当てられた領域を解放してもよい（請求項６）。
【００１５】
【発明の実施の形態】
（ａ）本発明のアスペクト説明
まず、図面を参照して本発明のアスペクトを説明する。
図１は本発明のキャッシュ記憶装置の構成のアスペクトを示すブロック図である。
【００１６】
本発明のキャッシュ記憶装置１Ａは、図１に示すように、一つの命令（スカラ処理命令）を実行して一つ又は一対のデータを処理するスカラ処理装置１０及び演算器群（ベクトル処理装置；Vector Pipeline ）３と、各種データを記憶する主記憶装置９との間に介装されている。
なお、図１には、キャッシュ記憶装置１Ａ及び演算器群３が、１つのチップ１上に集積化された例が示されている。
また、図１では図示していないが、キャッシュ記憶装置１Ａと主記憶装置９との間に、下位のキャッシュ記憶装置（２次キャッシュ記憶装置や３次キャッシュ記憶装置等）を介装してもよい。
【００１７】
そして、このキャッシュ記憶装置１Ａは、図１に示すように、データメモリ（記憶部；N-way Set-associative Cache Data Array）２，ベクトルアクセス制御装置（制御部）４，マッピングテーブル５，外部アクセス制御装置（External Data-Array Access Controller ）７及びインタフェース部８をそなえて構成されている。
【００１８】
ここで、中核となるのは、データメモリ２，演算器群３，マッピングテーブル５，ベクトルアクセス制御装置４，データメモリ２と演算器群３を結合する結合網である。
演算器群３は、複数の演算器３ａからなり、これら演算器３ａを用いて、一つの命令（ベクトル処理命令）を実行して、同一の演算を多数要素からなるデータの組（ベクトル処理データ）に施すベクトル処理（ベクトル演算）を行なうものである。
【００１９】
また、データメモリ２は、複数のバンク２ａからなり、主記憶装置９に記憶された前記データをコピーして格納するものである。なお、図１に示すキャッシュ記憶装置１Ａでは、データメモリ２として、バンク２ａ当たり１リードポート，１ライトポートを持つものを用いているが、ポート数が多いバンクからなるデータメモリを用いることもできる。
【００２０】
そして、データメモリ２は、スカラ処理装置１０が処理を行なう際に必要となるデータ（スカラ処理データ）を格納する機能を有するとともに、演算器群３が処理を行なう際に必要となるデータ（ベクトル処理データ）を格納するための仮想的なベクトルレジスタ（以下、単にベクトルレジスタということがある）としての機能を有するものである。
【００２１】
即ち、データメモリ２は、ベクトル処理を行なう際に用いるベクトルレジスタとスカラ処理を行なう際に用いるキャッシュとが統合された、キャッシュ兼用のデータメモリとして構成されている。
ここで、ベクトルレジスタは、例えば図２に示すように、ウェイ（way ）及びライン（line）を使用したインターリーブ方式によって、データメモリ２のバンク２ａの管理単位（ライン）上に割り当てられている。
【００２２】
ここで、図２は、ウェイ数５，ライン数８のバンク２ａ上に仮想的に割り当てられたベクトルレジスタを示すものであり、この図２には、ベクトルレジスタの一例として、要素（演算要素）ＶＲ０−０，ＶＲ０−１，…，ＶＲ０−４からなる要素数５のベクトルレジスタＶＲ０と、要素ＶＲ１−０，ＶＲ１−１，…，ＶＲ１−３からなる要素数４のベクトルレジスタＶＲ１とが示されている。なお、以下では、ベクトルレジスタをＶＲ，Ｖ，ＶＶＲと表記することがある。
【００２３】
さらに、マッピングテーブル５は、データメモリ２のバンク２ａにおいて、ベクトルレジスタとして機能させる領域（以下、ベクトルレジスタの領域という）の位置を指定するためのマッピング情報（割当情報）を保持するものである。
ここで、マッピング情報は、例えば各ベクトルレジスタ毎に記述され、この場合には以下の（１）〜（４）に示すような情報から構成されている。なお、これらの情報は、エントリあたり３２〜６４ビットあれば表現が可能である。
（１）始点情報〔ウェイ−ライン〕
各ベクトルレジスタの領域の始点を示す情報である。例えば、図２に示す例では、ベクトルレジスタＶＲ０の場合には、要素ＶＲ０−０の位置を示す〔０−０〕が始点情報に相当し、ベクトルレジスタＶＲ１の場合には、要素ＶＲ１−０の位置を示す〔１−３〕が始点情報に相当する。
（２）インタリーブ・ファクター（増分情報）〔ウェイ−ライン〕
各ベクトルレジスタの領域を形成する要素の配置間隔を示す情報であり、上記ベクトルレジスタＶＲ０，ＶＲ１ともに、各要素の配置間隔〔１−１〕がインタリーブ・ファクターに相当する。
（３）長さ情報
各ベクトルレジスタの長さを示す情報であり、上記ベクトルレジスタＶＲ０の場合には、〔５〕が長さ情報に相当し、ベクトルレジスタＶＲ１の場合には、〔４〕が長さ情報に相当する。
（４）コントロール・ビット
各ベクトルレジスタの型情報〔精度（Precision ）〕や、バリッド（Valid ）情報等を示す情報である。なお、型情報はどの精度の情報を格納するかを示すものであり、バリッド情報はマッピング情報が有効か否かを示すものである。
【００２４】
ここで、ベクトル処理を行なう場合には、スカラ処理装置１０のプロセッサ（図示せず）が、演算に必要となるベクトルレジスタの数に応じ、当該ベクトルレジスタについてのマッピング情報をマッピングテーブル５へ書き込むようになっている。
なお、各ベクトルレジスタに対応したマッピングテーブル５を動的且つ柔軟に管理すれば、データメモリ２においてベクトルレジスタを動的且つ柔軟に割り当てることができる。
【００２５】
また、ベクトルアクセス制御装置４は、マッピングテーブル５を参照し、前記マッピング情報に基づいて、データメモリ２に、ベクトルレジスタとして用いられる領域を分散して割り当て、データメモリ２に分散して割り当てた当該ベクトルレジスタの領域に、上記ベクトル処理データを格納するように制御するものである。
【００２６】
そして、データメモリ２においては、当該ベクトルレジスタとして割り当てられた領域以外の領域は、スカラ処理データを格納する領域として割り当てられるようになっている。
さらに、ベクトルアクセス制御装置４は、ベクトルレジスタを用いた演算器群３による処理を終了すると、マッピングテーブル５に保持された前記マッピング情報を無効化する（具体的には、前記バリッド情報をＯＦＦにする）ことにより、データメモリ２においてベクトルレジスタとして割り当てられた領域を解放する機能を有している。
【００２７】
また、このベクトルアクセス制御装置４は、データメモリ２と演算器群３とを結合する結合網中に存在し、データメモリ２におけるベクトルレジスタと演算器群３との間でベクトル処理データの送受を行なえるようにするために、当該結合網を動的に切替えて、データメモリ２と各演算器３ａとの間のベクトル処理データの流れを生成する機能も有している。
【００２８】
このとき、ベクトルアクセス制御装置４では、クロスバースイッチ（又は多段スイッチ) の結合を動的に切替えて〔即ち、マッピング情報を利用して、例えばクロスバースイッチを切り替えて演算器３ａとデータメモリ２との接続を規則的に制御して〕、効率良くベクトル処理データの流れを生成するようになっている。
ここで、クロスバー結合は、Ｍ個の入力ポートとＮ個の出力ポートとをつなぐ方式の一つであり、例えば、Ｍ本の横線とＮ本の縦線を格子状に交わらせて、Ｍ×Ｎ個の格子点のそれぞれにスイッチを配置したものと考えることができる。そして、入力ポートは一つのスイッチを経由して出力ポートに到達するようになっている。
【００２９】
また、多段結合は、このような回線交換器を多段でつなぐものであり、入力ポートは複数のスイッチを経由して出力ポートに到達するようになっている。
ある演算を実行するときに、演算器群３の入力側では、Ｍ本の入力ポートがデータメモリ２のバンク２ａのリードポートに接続され（即ち、ウエイ数が５ならＭ＝５）、Ｎ本の出力ポートがそれぞれの演算器３ａの入力ポートに接続される。
【００３０】
ここで、Ｖ１＋Ｖ２→Ｖ３の演算を実行するとき（図４参照）、図５に示すように、Ｖ１とＶ２の始点はそれぞれウェイ−１とウェイ−４になっているから、まず、演算器３ａとウェイ−１／ウェイ−４をつなぐ。Ｖ１／Ｖ２の次の要素はウェイ−２とウェイ−０にあるから、次の接続は、ウェイ−２／ウェイ−０である。
【００３１】
さらに、同様にして、ウェイ−３／ウェイ−１との接続で３番目の要素を読みだし、ウェイ−４／ウェイ−２で４番目の要素を読みだす。なお、図５には示していないが、ウェイ−０／ウェイ−３で５番目を読みだし、その後、６番目の要素はウェイ−１／ウェイ−４との接続に戻る。
このように、ベクトルレジスタ領域の配置が規則的であるため、スイッチを規則的に順次切り替えていくことにより、演算器３ａとデータメモリ２のリードポート及びライトポートとの接続を制御することができる。
【００３２】
なお、ベクトルアクセス制御装置４は、ベクトル処理の際に必要となる定数や別のオペランド等を格納するスカラオペランド／マスクレジスタ６をそなえている。
さらに、外部アクセス制御装置７は、主記憶装置９へのアクセスを制御するものであり、インタフェース部８は、スカラ処理装置１０との間で命令及びデータの送受を行なうものである。
【００３３】
上述の構成により、本発明のキャッシュ記憶装置１Ａにおいては、以下で説明するような動作が行なわれる。なお、図６〜図８は、ベクトル演算処理を説明するためのフローチャートである。
まず、キャッシュ記憶装置１Ａのマッピングテーブル５に有効な情報が格納されていない場合には、スカラ処理装置１０によりスカラ演算が行なわれる。なお、このときキャッシュ記憶装置１Ａでは、通常のキャッシュと同様の動作が行なわれる。
【００３４】
一方、ベクトル処理を行なう場合には、スカラ処理装置１０のプロセッサ（図示せず）により、マッピングテーブル５が設定される。
ここで、マッピングテーブル５の設定は、スカラ処理装置１０のプロセッサが、演算に必要となるベクトルレジスタの数に応じ、オペランドのベクトルレジスタについてのマッピング情報を、キャッシュ記憶装置１Ａのマッピングテーブル５に書き込むことにより行なわれる〔図６のステップＳ１（詳細には図７のステップＡ１〜Ａ８参照）〕。
【００３５】
そして、スカラ処理装置１０のプロセッサによりベクトル演算命令が発行されると、キャッシュ記憶装置１Ａでは、ベクトルアクセス制御装置４によりこのベクトル演算命令が処理される。
具体的には、ベクトルアクセス制御装置４は、設定されたマッピングテーブル５を参照し、命令で指定されたオペランドのベクトルレジスタについてのマッピング情報に基づいてデータメモリ２にベクトル処理データを分散して格納する一方、当該マッピング情報に応じて、演算器群３の演算器３ａとデータメモリ２のベクトルレジスタの領域とを順次接続する。
【００３６】
続いて、演算器群３では、ベクトルレジスタに格納されたベクトル処理データを参照して実際に演算が行なわれ、演算結果がバンク２ａに書き戻される（図６のステップＳ２）。
ここで、典型的なベクトル演算の一例として、図３，図４に示すようなＤＡＸＰＹ演算（倍精度のＡＸ＋Ｙ演算）を行なう場合について説明すると、図５に示すように４本の仮想的なベクトルレジスタＶＲ０′〜ＶＲ３′が使用される。
【００３７】
ここで、各ベクトルレジスタは、各要素がそれぞれ、ウェイ方向，ライン方向ともに１つづつ増加するように配置されている。つまり、インタリーブ・ファクターが〔１−１〕である。
なお、図５に示すように、ベクトルレジスタＶＲ０′は要素ＶＲ０−０，ＶＲ０−１，…，ＶＲ０−３からなり、ベクトルレジスタＶＲ１′は要素ＶＲ１−０，ＶＲ１−１，…，ＶＲ１−３からなり、ベクトルレジスタＶＲ２′は要素ＶＲ２−０，ＶＲ２−１，…，ＶＲ２−３からなり、ベクトルレジスタＶＲ３′は要素ＶＲ３−０，ＶＲ３−１，…，ＶＲ３−３からなる。
【００３８】
最初のロード命令（ＬＶ）では、ベクトルレジスタＶＲ０′に格納すべきベクトル処理データが主記憶装置９から読み込まれる。ここで、ベクトルレジスタＶＲ０′の領域に有効なデータが既にキャッシュされているときには、この時点で必要に応じて当該データの無効化又は主記憶装置９への書き戻しが行なわれる。あるいは、ベクトルレジスタについてのマッピング情報を設定した時点で、ベクトルレジスタの領域を走査し、その領域に有効なデータが既にキャッシュされていることが検出できた時点で、当該データの無効化又は主記憶装置９への書き戻しを行なってもよい。
【００３９】
そして、同様にして、乗算命令（ＭＵＬＴＳＶ），ロード命令（ＬＶ），加算命令（ＡＤＤＶ），ストア命令（ＳＶ）を実行した後に、ベクトル処理が終了する。
なお、ベクトル処理を続ける必要がなければ、処理が終了した時点で、マッピングテーブル５におけるマッピング情報を無効化することにより、ベクトルレジスタとして割り当てられた領域が解放される〔図６のステップＳ３（詳細には図８のステップＢ１〜Ｂ４参照）〕。
【００４０】
そして、解放された領域は、再びスカラ処理データを格納するキャッシュとして使用される。
このように、本発明のキャッシュ記憶装置１Ａによれば、データメモリ２に、ベクトルレジスタとして用いられる領域を分散して割り当て、このベクトルレジスタの領域にベクトル処理データを格納するように制御しているので、キャッシュ記憶装置１Ａにおける有効データの格納率を低下させることなくハードウエア量を削減することができ、ひいては、スカラ処理装置１０と演算器群３とを１つのチップ上に集積化することができる。
【００４１】
また、クロスバースイッチ（又は多段スイッチ) の結合を動的に切替えて、効率良くベクトル処理データの流れを生成しているため、データメモリ２のバンク２ａをマルチポート化する必要がなくなり、集積化を容易にすることができる。
さらに、データメモリ２においてベクトルレジスタの領域を動的に割り当てることができるので、演算器群３の並行処理とチェイニングとを可能にすることができるほか、従来の技術において説明した（２）の方法と比較して、スカラ処理を行なう際に、特定アドレスのキャッシュのヒット率が下がらないようにデータ配置を調整することができる。
【００４２】
また、従来の技術において説明した（１）の方法と比較すると、専用のインタフェースを設ける必要がないため、ハードウエア量を削減することができる。
さらに、スカラ処理装置１０に設けられたキャッシュのコヒーレンス制御についても、本発明による方法によればデータをバイパスするための付加的なパスを設ける必要がなく、集積化を容易にすることができる。
【００４３】
なお、コンパイラによる解析により、データメモリ２におけるベクトルレジスタの領域の割り当ての柔軟さは、以下のような特徴に結び付く。
即ち、インターリーブ値をウェイ数やライン数と互いに素とすることにより、ベクトル長の長いデータについても対応できるようになる。ただし、その場合には、構造ハザードが発生する可能性が増すため、同時に稼働可能なパイプライン数が減少することになる。
【００４４】
また、各ベクトルレジスタの領域の始点をずらすことにより、繰り返し（Recurrence）演算に対応することができる。
さらに、タグ・ビットを拡張すれば、パイプラインのフローコントロールなどを可能にすることができる。
（ｂ）一実施形態の説明
以下、図面を参照して本発明の実施の形態を説明する。
【００４５】
図９は本発明の一実施形態にかかるキャッシュ記憶装置の構成を示すブロック図である。
このキャッシュ記憶装置１１は、図９に示すように、スカラ処理命令を実行する例えばＳＰＡＲＣ用の整数ユニット（スカラ処理装置；Integer Unit）２０及び演算器群（ベクトル処理装置；Vector Pipeline ）１３と、各種データを記憶する主記憶装置２３との間に介装されている。
【００４６】
なお、図９には、キャッシュ記憶装置１１，演算器群１３及び整数ユニット２０が、１つのチップ２２上に集積化された例が示されている。
また、整数ユニット２０には、整数レジスタ（Integer Registers ）２１が設けられている。
そして、このキャッシュ記憶装置１１は、図９に示すように、データキャッシュ（記憶部；8-way Set-associative Data Cache）１２，ベクトルアクセス制御装置（制御部；ＶＣＣ）１４，命令キャッシュ（Instruction Cache ）１８及びアドレス変換／ロード・ストア部（Address Translation ／Load Store Unit ）１９をそなえて構成されている。
【００４７】
ここで、演算器群１３は、前述した演算器群３（図１参照）と同様に、複数の演算器１３ａからなり、これら演算器１３ａを用いて例えばＳＰＡＲＣ用のベクトル処理命令〔ベクトル演算；具体的には、ＦＰ（Floating Point）加算命令（FP Add），ＦＰ乗算命令（FP Mul. ），ＦＰ除算命令（FP Div. ），グラフィック命令（Graphics），マスク命令（Mask）等〕を実行してベクトル処理を行なうものである。
【００４８】
また、命令キャッシュ１８は、主記憶装置２３に記憶された命令データをコピーして格納するものであり、データキャッシュ１２は、前述したデータメモリ２（図１参照）と同様に、複数のバンク１２ａからなり、主記憶装置２３に記憶されたデータをコピーして格納するものである。
そして、データキャッシュ１２は、整数ユニット２０が処理を行なう際に必要となるデータ（スカラ処理データ）を格納する機能を有するとともに、演算器群１３が処理を行なう際に必要となるデータ（ベクトル処理データ）を格納するための仮想的なベクトルレジスタとしての機能を有するものである。
【００４９】
このベクトルレジスタも、前述したデータメモリ２におけるものと同様に、ウェイ及びラインを使用したインターリーブ方式によって、データキャッシュ１２のバンク１２ａの管理単位（ライン）上に割り当てられている。
なお、命令キャッシュ１８及びデータキャッシュ１２について、現在の技術で実現可能であると思われる諸元を図１０に示す。
【００５０】
さらに、ベクトルアクセス制御装置１４は、ベクトル処理を行なう際に、演算器群１３とデータキャッシュ１２とを制御するものであり、マッピングテーブル１５，マスクレジスタ１６及びスカラオペランド格納部１７をそなえて構成されている。
ここで、マッピングテーブル１５は、データキャッシュ１２のバンク１２ａにおいて、ベクトルレジスタとして機能させる領域（以下、ベクトルレジスタの領域という）の位置を指定するためのマッピング情報（割当情報）を保持するものである。なお、マッピングテーブル１５及びベクトルレジスタの具体例については、後述にて説明する。
【００５１】
つまり、ベクトルアクセス制御装置１４は、マッピングテーブル１５を参照し、前記マッピング情報に基づいて、データキャッシュ１２に、ベクトルレジスタとして用いられる領域を分散して割り当て、データキャッシュ１２に分散して割り当てた当該ベクトルレジスタの領域に、上記ベクトル処理データを格納するように制御するものである。
【００５２】
そして、データキャッシュ１２においては、当該ベクトルレジスタとして割り当てられた領域以外の領域は、スカラ処理データを格納する領域として割り当てられるようになっている。
なお、ベクトルアクセス制御装置１４は、ベクトルレジスタの割り当て状況を、後述するＳＰＡＲＣ命令セット上から可視的なレジスタとして扱うようになっている。即ち、後述するように、マッピングテーブル１５に格納すべき情報を、コプロセッサレジスタとして定義し（図１２に示す％ｃ０〜％ｃ２９）、可視的なレジスタとして、命令セット上で直接扱うようになっている。
【００５３】
また、マスクレジスタ１６は、ベクトルデータ中の複数の要素のうちマスク演算を施す一部の要素を指定するためのものであり（図１２に示す％ｃ３０，％ｃ３１がマスクレジスタとして使用される）、スカラオペランド格納部１７は、ベクトル処理に必要となる定数（スカラオペランド；図３に示す例ではＣ１）を格納するものである。
さらに、アドレス変換／ロード・ストア部１９は、ベクトルアクセス制御装置１４及び命令キャッシュ１８からの要求を受けて、主記憶装置２３へのアクセスを制御するものである。
【００５４】
ここで、前述したマッピングテーブル１５及びベクトルレジスタの具体例について説明する。
（１）第１の具体例
ウェイ数が８，セット数（ウェイ毎のライン数）が８であるデータキャッシュ１２があり、それぞれのラインは演算要素（例えば、倍精度浮動小数点データ）を８個を格納できるものとする。
【００５５】
データキャッシュ１２上のデータは、ウェイ番号（ｘ），ライン番号（ｙ），ライン内位置（ｚ）の３つのアドレスによって特定され、以下では、これをＡｘ−ｙ−ｚと表すことにする。
ここで、仮想ベクトルレジスタをＶＲｎとし、それぞれのベクトルレジスタＶＲｎが６４個の演算要素ＶＲｎ−ｍを持つときには、各演算要素ＶＲｎ−ｍは、８ライン分のメモリに格納されることになる。
【００５６】
例として、３つの仮想ベクトルレジスタを定義する場合について説明すると、各ベクトルレジスタから物理アドレス情報を作るためのマッピングテーブル１５は、図１３に示すように、ＶＲ番号に対応して、バリッド情報〔有効（Ｙｅｓ）／無効（Ｎｏ）〕，始点情報（始点），増分情報（増分，増分間隔），長さ（要素数），型情報からなる。
【００５７】
ここで、始点，増分，増分間隔の３つ組の値は、それぞれウェイ，ライン，オフセットの３次元のアドレスに相当するものであり、増分間隔は、何個めの要素毎にそれぞれのアドレスに増分を加えるかを表すものである。
なお、型情報として示しているようなデータ型についての情報は、図１３に示すようにマッピングテーブル１５に置かず、命令により演算命令実行時に明示的に与えてもよい。
【００５８】
そして、始点（Ｓｘ，Ｓｙ，Ｓｚ），増分（Ｉｘ，Ｉｙ，Ｉｚ），増分間隔（Ｄｘ，Ｄｙ，Ｄｚ）とすると、ベクトルレジスタのｎ番目の要素は、以下のアドレスに対応する。
Ａ〔Sx＋Ix* (n/Dx)，Sy＋Iy* (n/Dy)，Sz＋Iz* (n/Dz)〕        …（１）
ただし、式（１）中の除算は、整数除算による小数点以下を切り捨て、演算結果は、それぞれウェイ数，ライン数，ライン内要素数での剰余をとったものである。
【００５９】
このとき、図１３に示すマッピングテーブル１５におけるベクトルレジスタＶＲ０の各演算要素は、図１４（ａ）に示すようになる。また、ベクトルレジスタＶＲ１の各演算要素，ベクトルレジスタＶＲ2 の各演算要素は、それぞれ図１４（ｂ），図１４（ｃ）に示すようになる。
従って、ベクトルレジスタＶＲ0 ，ＶＲ1 ，ＶＲ2 のデータキャッシュ１２上での領域は、それぞれ図１５に示すようになる。なお、ベクトルレジスタＶＲ０を例にあげると、各領域（ＶＲ０ａ−ＶＲ０ｈ）とそこに格納されている要素との対応は、図１６に示すようになる。
（２）第２の具体例
上述の第１の具体例では、ベクトルレジスタの隣接する演算要素が分散して配置される場合、即ち、演算要素ＶＲ０−０，ＶＲ０−１がそれぞれ領域ＶＲ０ａ，ＶＲ０ｂにある場合について説明したが、これらを同じ領域に置くこともできる。
【００６０】
この場合には、マッピングテーブル１５は図１７に示すようになる。
この例では、ベクトルレジスタＶＲ０のデータキャッシュ１２上での領域は上述の第１の具体例の場合と同様であるが、各領域とそこに格納されている演算要素との対応が異なる（図１８，図１９参照）。
（３）第３の具体例
上述の第１，第２の具体例では、マッピングテーブル１５は、各演算要素のデータキャッシュ１２上でのアドレス情報を逐次に計算していくための情報を格納していたが、アドレス情報そのものを格納してもよい（図２０参照）。
【００６１】
この場合、領域内のオフセットについては、仮想ベクトルレジスタ内の演算要素番号から計算するようにすれば、マッピングテーブル１５のサイズを小さくすることができる。
例えば、ｎ番目の演算要素は領域（ｎ／８）の（ｎ  ｍｏｄ  ８）番目である、あるいは、逆に、領域（ｎ  ｍｏｄ  ８）のｎ／８番目であるとすると、第１の具体例のマッピングテーブル１５は、図２０に示すように表すことができる。
【００６２】
この方法では、ベクトルデータの長さに応じてマッピングテーブル１５のサイズが大きくなるものの、より柔軟なマッピングが可能となる利点がある。
上述の構成により、本発明の一実施形態にかかるキャッシュ記憶装置１１においては、前述したキャッシュ記憶装置１Ａにおける動作と同様の動作が行なわれる（図６〜図８参照）。
【００６３】
特に、以下では、ＳＰＡＲＣ命令セット中のコプロセッサ（Coprocessor ）命令とＦＰ命令に注目して、ＳＰＡＲＣ命令セットと仮想ベクトル処理との統合が自然に行なえることを説明する。
（１）命令流
整数ユニット２０は、ＦＰ命令（FP Instructions ）, ベクトル処理命令（VP Instructions ）を含む全ての命令（All Instructions）を、命令キャッシュ１８からフェッチする。
【００６４】
ここで、ベクトル処理命令は、ＳＰＡＲＣ命令セット中のコプロセッサ命令を用いて実現されている。
また、整数ユニット２０が独自に処理可能な整数演算命令などは、整数ユニット２０で処理される。ＦＰ命令とベクトル処理命令は、データキャッシュ１２へのストアと同じパス（メモリ・ストア・パス；図９ではＭＳＰで示す）を利用して、整数ユニット２０からベクトルアクセス制御装置１４に送られる。このとき、必要ならば、整数ユニット２０中の実行ステージで、実効アドレスが計算される。
【００６５】
このとき、整数ユニット２０とベクトルアクセス制御装置１４間のメモリ・ストア・パスには、命令とデータを区別する若干の信号線を付加するだけで良い。
そして、ベクトルアクセス制御装置１４に送られた命令は、内部でデコードされた後、そのタイプに応じて処理される。
（２）スカラオペランドとベクトルオペランド
ＦＰ命令のオペランド格納用として使用されるＦＰレジスタは、一部のＶＰ命令におけるスカラオペランド格納用としても使用される。
【００６６】
ここで、ＦＰ命令は、ベクトル処理用の演算パイプラインを利用して処理される。
また、ＶＰ命令のオペランドは、直接的には、マッピングテーブル１５のエントリか、マスクレジスタ１６を指している。
演算命令のオペランドも同様であるが、実際には、計算は、そのエントリに記述された仮想ベクトルレジスタを対象として行なわれる。
【００６７】
ＳＰＡＲＣ命令セットでは、コプロセッサ用のロード／ストア命令のオペランドとなるレジスタサイズを３２ビット又は６４ビットと仮定しているが、マッピングテーブル１５のエントリを直接オペランドとする方式は、この仮定には反しない。
つまり、ＳＰＡＲＣ（Version ８）のコプロセッサ命令フォーマットは、図１１に示すようになっており、一般的なコプロセッサレジスタは、基本的にはシングルワードを扱い、場合によってはダブルワードを扱うようになっているが、前述のごとく、マッピングテーブル１５に格納すべき情報はこの簡単なアーキテクチャ上では３２ビットあれば表現が可能である。
【００６８】
そこで、マッピングテーブル１５に格納すべき情報を、図１２に示すようにコプロセッサレジスタとして定義し、可視的なレジスタとして、命令セット上で直接扱えるようにしておく。
これは、ベクトルレジスタの割り当て状況を示すマッピングテーブル１５が、コプロセッサレジスタ〔図１２に示す％ｃ０〜％ｃ２９がコプロセッサレジスタに相当する。ここで、各％ｃｎ（ｎ＝０〜３１）は３２ビットのレジスタである。〕として、命令セット上、ソフトウエアから直接見えていることを指している。
【００６９】
即ち、コプロセッサレジスタ（図１２に示す％ｃ０〜％ｃ２９）のそれぞれが、ＶＶＲ０〜ＶＶＲ２９のマッピング情報を格納するのであり、例えばＶＶＲ０を定義する場合には、％ｃ０にＶＶＲ０のマッピング情報を書き込めばよい。
つまり、マッピングテーブル１５の設定は、コプロセッサレジスタへ値の書き込むことにより行ない、このコプロセッサレジスタから値を読み出すことにより、現在のマッピング情報を取り出すようにする。
【００７０】
なお、図１２に示すものは一例であるが、後は、ＣＰｏｐ命令（コプロセッサ命令）の中に、仮想ベクトルレジスタの中身を操作するための若干の命令〔通常のベクトル演算命令（ベクトルロード命令，ベクトルストア命令，ベクトル加算／乗算／減算／除算命令，グラフィックス命令等）〕を定義しておけば、ＳＰＡＲＣ命令セットの中に十分おさめることができる。
【００７１】
即ち、ＳＰＡＲＣ（Version ８）のＣＰｏｐ命令（コプロセッサ命令）には、演算の種類を示す情報を格納するためのフィールドがあり、そのフィールドを使って通常のベクトル演算命令を定義しておけば、ＳＰＡＲＣの命令セットの中に十分おさめることができる。
このような本発明の一実施形態にかかるキャッシュ記憶装置１１によっても、前述したキャッシュ記憶装置１Ａと同様の利点を得ることができる。
【００７２】
【発明の効果】
以上詳述したように、本発明のキャッシュ記憶装置によれば、記憶部に、ベクトルレジスタとして用いられる領域を分散して割り当て、分散して割り当てたベクトルレジスタの領域にベクトル処理データを格納するように制御しているので、キャッシュ記憶装置における有効データの格納率を低下させることなくハードウエア量を削減することができ、ひいては、スカラ処理装置とベクトル処理装置とを１つのチップ上に集積化することができる利点がある（請求項１，３〜６）。
【００７３】
また、記憶部においてベクトルレジスタの領域を動的に割り当てることができるので、ベクトル処理装置での並行処理とチェイニングとを可能にすることができるほか、スカラ処理を行なう際に、特定アドレスのキャッシュのヒット率が下がらないようにデータ配置を調整することができる利点がある（請求項２）。
【図面の簡単な説明】
【図１】本発明のキャッシュ記憶装置の構成のアスペクトを示すブロック図である。
【図２】本発明における仮想的なベクトルレジスタについて説明するための図である。
【図３】ベクトル演算の一例について説明するための図である。
【図４】ベクトル演算の一例について説明するための図である。
【図５】本発明における仮想的なベクトルレジスタについて説明するための図である。
【図６】本発明のキャッシュ記憶装置におけるベクトル演算処理の手順を示すためのフローチャートである。
【図７】本発明のキャッシュ記憶装置におけるベクトル演算処理の手順を示すためのフローチャートである。
【図８】本発明のキャッシュ記憶装置におけるベクトル演算処理の手順を示すためのフローチャートである。
【図９】本発明の一実施形態にかかるキャッシュ記憶装置の構成を示すブロック図である。
【図１０】命令キャッシュ及びデータキャッシュについて説明するための図である。
【図１１】ＳＰＡＲＣのコプロセッサ命令フォーマットを示す図である。
【図１２】コプロセッサレジスタについて説明するための図である。
【図１３】マッピングテーブル及びベクトルレジスタの第１の具体例について説明するための図である。
【図１４】（ａ）〜（ｃ）は、いずれもマッピングテーブル及びベクトルレジスタの第１の具体例について説明するための図である。
【図１５】マッピングテーブル及びベクトルレジスタの第１の具体例について説明するための図である。
【図１６】マッピングテーブル及びベクトルレジスタの第１の具体例について説明するための図である。
【図１７】マッピングテーブル及びベクトルレジスタの第２の具体例について説明するための図である。
【図１８】マッピングテーブル及びベクトルレジスタの第２の具体例について説明するための図である。
【図１９】マッピングテーブル及びベクトルレジスタの第２の具体例について説明するための図である。
【図２０】マッピングテーブル及びベクトルレジスタの第３の具体例について説明するための図である。
【符号の説明】
１  チップ
１Ａ  キャッシュ記憶装置
２  データメモリ（記憶部）
２ａ  バンク
３  演算器群（ベクトル処理装置）
３ａ  演算器
４  ベクトルアクセス制御装置（制御部）
５  マッピングテーブル
６  スカラオペランド／マスクレジスタ
７  外部アクセス制御装置
８  インタフェース部
９  主記憶装置
１０  スカラ処理装置
１１  キャッシュ記憶装置
１２  データキャッシュ（記憶部）
１２ａ  バンク
１３  演算器群（ベクトル処理装置）
１３ａ  演算器
１４  ベクトルアクセス制御装置（制御部）
１５  マッピングテーブル
１６  マスクレジスタ
１７  スカラオペランド格納部
１８  命令キャッシュ
１９  アドレス変換／ロード・ストア部
２０  整数ユニット（スカラ処理装置）
２１  整数レジスタ
２２  チップ
２３  主記憶装置
【図１】
0004060960.tif 000002
【図２】
0004060960.tif 000003
【図３】
0004060960.tif 000004
【図４】
0004060960.tif 000005
【図５】
0004060960.tif 000006
【図６】
0004060960.tif 000007
【図７】
0004060960.tif 000008
【図８】
0004060960.tif 000009
【図９】
0004060960.tif 000010
【図１０】
0004060960.tif 000011
【図１１】
0004060960.tif 000012
【図１２】
0004060960.tif 000013
【図１３】
0004060960.tif 000014
【図１４】
0004060960.tif 000015
【図１５】
0004060960.tif 000016
【図１６】
0004060960.tif 000017
【図１７】
0004060960.tif 000018
【図１８】
0004060960.tif 000019
【図１９】
0004060960.tif 000020
【図２０】
0004060960.tif 000021