(57)【要約】      （修正有）【課題】キャッシュメモリに格納する2次元（あるいはそれ以上の多次元）データに対し記憶階層間で不要なデータ転送を抑えるのに有効な階層的なタイル形式データとしてのタイル単位アクセスと、標準のラスタ形式データとしてのラスタライン／スモールタイル単位の両対応アクセスとを両立する、キャッシュメモリを提供する。【解決手段】データアレイをM個のNエントリのサブデータアレイで構成した上で、それらのサブデータアレイのアドレスとするインデックス部を個別に修飾して、あるいは修飾しないで与える。また、タグアレイのメモリ容量を低減するために、スモールタイル毎に１つずつ割り当てるタグデータを、そのスモールタイルに属するサブラインのタグデータとして、ラスタラインアクセス時にも利用する。【選択図】図５
2016048424.tif 000002
【特許請求の範囲】
【請求項１】
データアレイとタグアレイを有するキャッシュメモリにおいて、構成データのアドレス順が、スモールタイル内、スモールタイル間、ラージタイル間のそれぞれでラスタ走査順になる階層的なタイル形式データを、階層無しのラスタ走査順になるラスタ形式データとしてアクセスされるようにする手段と、該階層的なタイル形式データから該整列スモールタイルをキャッシュラインとして直接アクセスされるようにする手段と、該ラスタ形式データとしてのアクセスにおいて、外部から入力されるアドレスであるADRにより構成データのうちの先頭を指定することでスモールタイルとラスタラインのいずれかをキャッシュラインとしてアクセスされるようにする手段とを、併せ持つことを特徴とするキャッシュメモリ。
【請求項２】
前記ADRのビット列の割り振りとして、前記階層的なタイル形式データに対し、最上位から順に、アドレスタグ部、オフセット部に割り当てるAパターンの割り振りと、最上位から順にアドレスタグ部の上位側、インデックス部の一部、オフセット部の上位側の所定ビット、アドレスタグ部の下位側、インデックス部の残り、オフセット部の残りに割り当てるBパターンの割り振りのいずれかを選択する手段を、有することを特徴とする請求項１記載のキャッシュメモリ。
【請求項３】
前記キャッシュメモリは、キャッシュラインサイズのwバイトの境界を跨がない(w/M)×Mバイトサイズの整列スモールタイルのラスタ走査順の並びからなる(2k×w)バイト幅のラージタイルがさらにラスタ走査順に並び、  前記所定ビットがlog2Mビットであり、格納単位がサブラインのN個のエントリを有するサブデータアレイをM組並列に並べることで該データアレイを構成し、サブデータアレイの並び位置とインデックス部とオフセット部とによって定まるサブデータアレイ毎のインデックスによりエントリアドレスを指定することで該M組のサブデータアレイからキャッシュラインを構成するＭ本のサブラインをアクセスする手段と、該M本のサブラインの各々のタグデータを該タグアレイからアクセスする手段と、該タグデータと前記アドレスタグ部に基づく該サブライン毎に定まるアドレスタグとが全て一致するかを検出する手段とを、併せ持つことを特徴とする請求項１または2記載のキャッシュメモリ。
【請求項４】
格納する前記整列スモールタイル毎にタグデータを一つ割り当てる手段と、キャッシュラインを構成するM本のw／Mバイト幅サブラインの各々のタグデータとして、それが属する整列スモールタイルのタグデータを用いる手段とを併せ持ち、タグデータが前記アドレスタグと不一致を起こすサブラインを含む整列スモールタイルのキャッシュラインを該不一致検出時のリプレース対象とすることを特徴とする請求項１〜３記載のキャッシュメモリ。
【請求項５】
前記タグアレイを、そのエントリアドレスnのMを法とする剰余が同一になるエントリ同士を1個に収める並列アクセス可能なM個のサブタグアレイで構成し、前記Aパターンの選択により定まるインデックス部でエントリ指定することによりN個のエントリの中から1個のタグデータをアクセスする手段と、前記Bパターンの割り振りの選択時にインデックス部とオフセット部とによって定まるサブタグアレイ毎のインデックスにより該N個のエントリの中からM個のタグデータを並列にアクセスする手段とを、併せ持つことを特徴とする請求項１〜４記載のキャッシュメモリ。
【請求項６】
ラージタイル内で列方向に隣接する整列スモールタイルを格納するキャッシュラインのタグデータを互いに異なるサブタグアレイに格納する手段と、wバイト境界を跨ぐ非整列スモールタイルのアクセス時に、該非整列スモールタイルを構成するサブラインが属する列方向に隣接する整列スモールタイルのタグデータを並列にアクセスする手段を有することを特徴とする請求項４または５記載のキャッシュメモリ。
【請求項７】
前記Bパターンの割り振り選択時に、アドレスタグ部の上位側に割り振る前記ADRのビット列のビット幅を指定する手段を有することを特徴とする請求項2記載のキャッシュメモリ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、画像処理、科学技術計算等において多大な処理時間を占める２次元以上の配列データに対する高効率アクセスとキャッシュ容量低減の両立を可能とするキャッシュメモリに関する。
【背景技術】
【０００２】
従来、キャッシュメモリは配列データに対しては、配列の次元数に関わらず１次元配列として扱うラスタ形式に最適なキャッシュラインを単位とするアクセス構成が採られてきた。図１は、容易な理解のために最も単純なダイレクトマップ方式の従来キャッシュメモリ（読み出しにかかわる部分）を示しており、１はキャッシュメモリに対するアドレスが外部から入力されるアドレスレジスタ、２はN個のタグエントリを有するタグアレイ、３はN個のキャッシュラインエントリを有するデータアレイ、４は比較回路である。外部より入力されるアドレスのインデックス部でエントリの番地を指定してそこに保持されているタグデータとキャッシュラインをアクセスし、そのタグデータが外部から入力されるアドレスのアドレスタグ部信号12と一致する場合にヒット、そうでない場合にミスヒットになる判定結果を比較回路４より出し、そのヒット／ミスヒットの判定結果信号によりデータアレイ3に対するキャッシュラインのアクセスを成立あるいは不成立とするのがキャッシュメモリの基本的な動作である。この従来キャッシュでは、格納順がラスタ形式のデータ配列からラスタ走査方向に連続するデータをまとめてアクセスする場合には、キャッシュライン単位の並列アクセスが有効に機能し、効率の良いアクセスが実現される。このような場合、キャッシャラインのサイズは、大きいほど、転送速度が上がるため、ラインサイズは256B程度までのサイズが利用されるようになっている。
【０００３】
しかし、アクセスデータのラスタ走査方向（以降、行方向と表記）に連続するアクセスの局所性が長くないと、ラインサイズを大きくしても、不要なデータの転送や格納が増え、実効の転送速度の向上割合が小さくなるばかりか、その不要なデータがキャッシュメモリの容量を圧迫することに起因する容量性ミスが増加したり、さらには容量当たりのエントリ数低下により、競合性ミスが増加したりして、キャッシュの平均的なアクセス速度が、かえって低下することになる。
このキャッシュミス増の問題のうち、２次元データに対する不要なデータの転送や格納を低減する手法としては、各キャッシュラインをタイル形式データのタイル（以降スモールタイルと呼ぶ）に割り当てる方法（以降、スモールタイル形式と呼ぶ）が知られている（非特許文献１）。ここで、スモールタイル形式とは、図２に示されるように、キャッシュラインとしてアクセスするp×pバイトのデータからなる矩形のタイル95（スモールタイル）の並びに区切り、スモールタイル内部のデータの並びのアドレス順をラスタ走査順とすると共に、そのスモールタイル間のアドレス順もラスタ走査順とする格納形式である。例えば、サイズ64バイトのキャッシュラインを、8×8画素（画素当たり1バイト）のスモールタイルに割り当てると、行方向に64バイトの数倍の範囲のアクセスの連続性がなくとも、行方向とラスタ走査方向に垂直な列方向の両方向に8バイトの数倍以上にわたる2次元の局所性さえあれば、キャッシュメモリに対する不要なデータの転送や格納を大幅に低減できることになる。また、スモールタイルに列方向の8語分の８バイト幅倍精度データを割り当てると、行列計算等で有用な列方向の語データの並列アクセスが可能になる。
【０００４】
このスモールタイル形式は、行方向の局所性の範囲が狭くとも有効に働くために、多くの2次元データ処理への適用が可能になるものの、利用は一部に限られてきた。これは、従来から主流となっているラスタ走査順の処理手法との整合性が低いため、プログラミングが困難になるからである。また、行方向の並列データアクセス数が減ってしまうため、最近の汎用プロセッサに組み込まれているラスタ形式データ向きのSIMD型の高並列演算命令を活かすことができないからである。
このスモールタイル形式の前者の問題点に対し、外部のプロセッサから入力されるアドレスビット列のアドレスタグ部、インデックス部への割り当ての一部を入れ替える（割り振り直す）ことで解決されることが知られている（特許文献１）。しかし、アドレスを割り振り直すことにより、アドレス順でスモールタイル形式の格納データがラスタ形式の格納データとして、あるいは逆に、ラスタ形式の格納データがスモールタイル形式の格納データとして見えるようになるものの、同一の格納データがスモールタイル単位と従来のラスタライン単位のいずれでもアクセス可能になるわけではない。このため、スモールタイル形式のデータから、ラスタライン単位のアクセスを行うには、主記憶あるいは2次キャッシュメモリから（1次）キャッシュメモリに転送する際に、スモールタイル形式データをラスタライン形式データに変換しなければならない。このラスタラインへの変換は、変換操作が余分に必要になるだけでなく、キャッシュメモリへのラスタライン単位での書き込みが必要になり、不要なデータの転送が抑えられるスモールタイル単位アクセスのメリットの一つが失われる欠点もある。
【０００５】
また、スモールタイル形式の後者の問題点の解消にも、ラスタ形式と階層無しのスモールタイル形式の相互アクセスを可能とするメモリ構成（非特許文献２）を適用するキャッシュメモリ構成が提案されている（非特許文献３）。高並列のSIMD演算に有用な従来のラスタ形式としてのキャッシュライン単位のアクセス（以降ラスタライン単位アクセスと呼ぶ）と、スモールタイル形式データとしてのキャッシュラインに収まるスモールタイル単位のアクセスが両立できる利点がある。しかし、このラスタ形式とスモールタイル形式の相互アクセスを可能とするキャッシュメモリでは、スモールタイル形式で格納する2次元配列データからwバイト幅のラスタラインのアクセスが可能になるものの、スモールタイルとラスタラインで構成バイトの格納先の論理的なアドレスが異なってしまう問題があった。また、図３に示すように、wバイト境界を跨がないスモールタイル（以降、整列スモールタイルと呼ぶ）を構成するw／Mバイト幅の行（図では４行からなるスモールタイル用のキャッシュメモリ構成を示している。以降、このスモールタイル構成行のことをサブラインと呼ぶ）を格納するためのアクセス幅がサブラインサイズのサブデータアレイ3a〜3dとそれに対応するサブタグアレイ2a〜2dを、スモールタイルを構成するサブラインの行数分だけ組み合わせて、全体のキャッシュメモリを構成せねばならず、標準のキャッシュメモリに比べ、タグアレイの容量が増加したり、周辺回路が余分に必要になったりして、ハードウェア規模が大幅に増大する欠点があった。ここで、バレルシフタ5は、ねじれてアクセスされるライン、タイルデータを元のねじれなしの形式にもどすためのものである。
【０００６】
一方、ラインサイズ拡大の問題解消とは別に、２次元データアクセスにおける競合性ミスを低減する手法として、block-index mapping法が知られている（非特許文献４）。この手法は、インデックスの衝突を最小限にするために、インデックスをラスタ走査方向のみに割り当てるのではなく、ラスタ走査方向とは直角の方向にも割り当てることで、インデックスにより指定される範囲が2次元のブロック（本明細書ではラージタイルと呼ぶ）状になるようにする方法である。このblock-index mappingでは、アクセスに２次元的な局所性のある場合に、ラージタイルの縦横のサイズを適切に設定することで、インデックス衝突起因の競合性ミスを最小限にできる利点がある。非特許文献４では、4×2画素のスモールタイルをキャッシュラインとしてアクセスされるようにすると共に、split-index法を採ることで、ラスタ形式のデータとしてスモールタイル単位のアクセスを実行できるようにしているものの、ラスタラインを直接アクセスすることはできない。また、ラージタイル内は、構成行間でアドレスが不連続になるスモールタイルの配列として見えるため、アドレスの連続するデータを割り当てる仮想記憶のページには適合しない。このことは、ラージタイルのサイズをページサイズに等しくしても、１枚のラージタイルのデータは、何枚ものページに分散して格納せざる得ないことを意味する。結局、２次元データがラージタイルの数倍程度の2次元の局所性を持っていても、それを転送しようとすると、主記憶・キャッシュメモリ間ではアドレスの連続する必要のあるブロック単位のバースト転送で不要なデータ（無効データ）を高率で転送せざるを得ない状況が頻発するばかりか、TLB（Translation Lookaside Buffer）のいくつものエントリを専有せざるを得なくなり、TLBミスも頻発させることになる。二次記憶・主記憶間でも、2次元の局所性を持つデータが分散している10ページを超えるような多くのページのスワップが必要になる。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００５−１００４１８号公報
【非特許文献】
【０００８】
【非特許文献１】Soo-Ik, C. H. A. E., “Cache optimization  for H. 264/AVC motion compensation.” IEICE Transactions on Information and Systems, vol.E91-D, no.12, pp.2902-2905, 2008.
【非特許文献２】Van Voorhis, D.C., and Morrin, T.H., “Memory Systems for Image Processing  Computers,” IEEE Trans. Comput. vol.C-27, no.2, pp.113-125 , Feb. 1978.
【非特許文献３】猪俣,立野,佐々木,大野,近藤, “タイル・ライン変換機能を備えた動き探索用ロードバッファの提案,”電子情報通信学会技術研究報告, VLD2012-52, vol.112, no.245, pp.65-70, Oct. 2012.
【非特許文献４】J. H. Kim, G. H. Hyun, and H. J. Lee, “Cache Organization forH.264/AVC Motion Compensation,” Embedded and Real-Time Computing Systems and Applications, 2007. RTCSA.2007, pp.534-541, Aug. 2007.
【発明の概要】
【発明が解決しようとする課題】
【０００９】
本発明が解決しようとする課題は、キャッシュメモリあるいは１次キャッシャメモリに関し、[1]主記憶との間あるいは２次キャッシュメモリとの間で不要なデータの転送と格納が抑えられる整列スモールタイル単位の転送を可能とすることと、[2]そこに格納される2次元データを標準のラスタ形式データとして、任意位置のサブラインを先頭とするラスタラインの単位（行方向の任意のサブラインから整列あるいはwバイト境界を跨ぐ非整列のラスタラインのアクセスができることを意味する）で、あるいは論理アドレスがラスタ形式のままの要素データからなるスモールタイルの単位（列方向の任意サブラインから整列あるいは非整列のスモールタイルがアクセスされることを意味する）で、それぞれアクセス可能とすることと、[3]主記憶・キャッシュメモリ間でのブロック転送あるいはバースト転送における無効データの転送割合の低減とTLBミス低減、2次記憶・主記憶間でのラージタイルのスワップ効率改善のためにラージタイルの構成データが必要最小限のページに格納されるようにすることの３つが両立されるようにすることである。また、この課題を解決する[4]キャッシュメモリを構成する際にハードウェア規模増大の最大の要因となるタグアレイのメモリ容量を標準のキャッシュメモリ並に低減することである。
【課題を解決するための手段】
【００１０】
本発明では以下の手段により、前記４つの課題を解決する。
１つ目の手段は、記憶階層の下位階層からは、アクセスの２次元局所性を活かしたデータ転送が行えるように、階層的なタイル形式としてアクセスされるようにする一方、プログラマへの負担増が最小限に留まるように、プロセッサ側からは、アドレス計算が単純な従来通りのラスタ形式でアクセスされるようにするものである。具体的には、外部より入力されるアドレスADRのビット列をアドレスタグ部、インデックス部、オフセット部に割り当てる際の割り振りを、記憶階層の下位階層で階層的なタイル形式として格納される2次元配列データをそのままの形式で転送可能とするAパターンの割り振りと、プロセッサから階層無しのラスタ走査順でアドレス付けされたラスタ形式としてアクセス可能とするBパターンの割り振りとを必要に応じて切り替えられるようにするものである。ここで、Aパターンの割り振りとは、最上位側からアドレスタグ部、インデックス部、オフセット部の順とするキャッシュメモリに対する従来から標準的に用いられているアドレス割り振りである（階層的なタイル形式データを格納する際には、アドレスタグ部がラージタイルの位置を、インデックス部がラージタイル内のスモールタイルの位置を、オフセット部がアドレシング対象バイトのスモールタイル内の位置を、それぞれ表す）。一方、Bパターンの割り振りとは、最上位からアドレスタグ部の上位側、インデックス部の一部、オフセット部の上位側のlog2Mビット、アドレスタグ部の下位側、インデックス部の残り、オフセット部の残りの順に割り当てる割り振りである（ラージタイルサイズが１ウェイ分のキャッシュ容量に一致する階層的なタイル形式データに対してのAパターンの割り振りは、アドレスタグ部の上位側が最上位側からラージタイルの下方向の位置を、インデックス部の上位側がラージタイル内のスモールタイルの下方向の位置を、オフセット部の上位側log2Mビットが非整列スモールタイルの先頭位置あるいはラスタラインの下方向の位置を、アドレスタグ部の下位側がラージタイルの右方向の位置を、インデックス部の中位kビットがM個のスモールタイルの並びからなるユニット（あるいはラスタライン）のラージタイル内の右方向の位置を、インデックス部の下位側のlog2Mビットが非整列ラスタラインの先頭位置あるいはユニット内のスモールタイルの右方向の位置を、オフセット部の残りがサブライン内のバイト位置をそれぞれ表す）。
【００１１】
ここで、階層的なタイル形式とは、キャッシュライン内に丁度収まる、即ち、サイズがキャッシュラインサイズwに一致する(w/M)×Mバイトでwバイトの境界を跨がない整列スモールタイルのラスタ走査順の並びからなり、タグ境界を跨がない2k×wバイト幅（ここでkは正の整数）のラージタイルが、さらにラスタ走査順で並ぶデータ格納形式であり、各構成バイトのアドレス順がスモールタイル内、スモールタイル間、ラージタイル間のそれぞれでラスタ走査順になる。以下の図４(a)に、32バイト幅の２次元配列データを、2×2バイトサイズのスモールタイル4×2個のラスタ走査順の並びからなる8バイト幅のラージタイルがさらにラスタ走査順に並ぶw=4、M=2、k=1を満たす階層的なタイル形式データとして格納する場合の構成バイトの格納先アドレス（図中のマス目内の値で、配列の先頭アドレス［ベースアドレス］からのディスプレースメント値。換言すればAパターンの割り振りで指定するADR値からベースアドレス値を差し引いた値）を示す。この階層的なタイル形式は、スモールタイル内、ラージタイル内のそれぞれがラスタ走査順の並びとなっているため、アクセスに２次元の局所性のある場合、転送対象の矩形ブロックの構成データのアドレスが連続する割合が高い上に、上下左右の２次元の局所性の範囲を越えた無効データまで転送する割合を小さくできる。従って、2次元データ処理において、記憶階層間のデータ転送を無効データ含有率の小さいバースト転送あるいはブロック転送で効率よく行える。また、ラージタイルがタグ境界を跨がないため、アクセスに2次元的な局所性のある場合、競合性ミスを最小限に抑えられる利点もある。
【００１２】
図４(b)は、図４ (a)に示されるAパターンの割り振りにより階層的なタイル形式データとしてアクセスされる2次元配列データが、Bパターンの割り振りに切り換えることによりラスタ形式データとしてアクセスされる場合の格納先アドレス（配列の先頭アドレスからのディスプレースメント値。換言すればBパターンの割り振りで指定するADR値からベースアドレス値を差し引いた値）を示している。
図４の(a)、(b)は、２次元配列データの同一の構成バイトが、割り振りを切り換えることで、異なるアドレスでアクセスされることを示している。例えば、階層的なタイル形式としてはディスプレースメント８の番地としてアクセスされるバイトデータは、ラスタ形式データとしてはディスプレースメント４の番地のバイトデータとしてアクセスされる。
【００１３】
２つ目の手段は、１つ目の手段により実現されるラスタ形式データとしてアクセスする場合に、構成データの先頭を指定することによりwバイトサイズのラスタライン（実質はそれを構成するM本のサブラインからなるキャッシュライン）とスモールタイル（実質はそれを構成するM本のサブラインからなるキャッシュライン）のいずれでもアクセスされるようにする。
【００１４】
具体的には、データアレイとタグアレイからなるキャッシュメモリにおいて、N個のエントリを有するデータアレイを、格納単位がサブラインのサブデータアレイをM組並列に並べることで構成し、インデックス部をそのままサブデータアレイ間で共通のインデックスとしてエントリアドレス指定に用いるか、インデックス部、オフセット部、サブデータアレイの並び位置の３つの値に応じたサブデータアレイ毎に値の異なるインデックスを生成してエントリアドレス指定に用いるかを切り替えられるようにするものである。また、サブラインのタグデータとして、サブラインのアクセスに用いるのと同一のアドレスによりタグアレイのN個のエントリのM個のエントリを指定し、そこからアクセスされるM個のタグデータとアドレスタグ部により構成サブライン毎に定まるアドレスタグとが全て一致するか否かを検出するようにするものである。さらに、不一致が検出された場合には、不一致となったサブラインを含む整列スモールタイルのエントリを検出すると共にリプレース用の整列スモールタイルのアドレスを生成し、2次キャッシュあるいは主記憶との間で一致するサブラインを含む整列スモールタイルとリプレースされるようにするものである。
【００１５】
３つ目の手段は、Bの割り振りパターンにより外部からラスタ形式データとして見せる二次元データの横幅（行方向サイズ）を２のべき乗のサイズで設定可能とするために、アドレスタグ部の上位側に割り振る外部から入力されるアドレスの最上位側のビット幅を、外部からの指定により変更できるようにするものである。
【００１６】
４つ目の手段は、タグアレイの容量を減らすために、整列スモールタイル毎にタグデータを１つ割り当てると共に、各サブラインのタグデータをそれが属する整列スモールタイルのタグデータとするものである。また、これに対応し、タグデータがアドレスタグ部信号に基づくアドレスタグと不一致を来すサブラインを含む整列スモールタイルのキャッシュラインを不一致検出時のリプレース対象とするものである。
【００１７】
５つ目の手段は、タグアレイをM個のサブタグアレイで構成し、タグアレイのN個のエントリを、エントリアドレスnをMで割った剰余mod(n,M)が0からM-1のいずれであるかによりM分割し、それによって得られるN/Mエントリからなる組のそれぞれをM個のサブタグアレイに割り当て、各サブタグアレイのアドレスに、インデックスiをMで割った商のi/Mを与えることで、(i/M)×M〜(i/M)×M+M-1のインデックスで指定されるM個のサブラインのタグが並列にアクセスされるようにするものである。これにより、キャッシュラインを構成するサブライン用タグM個の並列アクセスが、1ライト１リードのNエントリのメモリM個の代わりに1ライト1リードのN/MエントリのメモリをM個で構成可能となるため、タグアレイのハードウェア規模を従来の汎用キャッシュと同等にまで低減できる。ここで、/ は小数点以下を0方向に丸める整数の除算を意味する。
【００１８】
６つ目の手段は、非整列スモールタイルの有無の検出を1サイクルで行えるようにするために、ラージタイル内で列方向に隣接するスモールタイルのタグデータが並列にアクセスされるようにするものであり、列方向に隣接するスモールタイルのタグデータを互いに異なるサブタグアレイに格納すると共に、非整列スモールタイルのアクセス時に、該非整列スモールタイルを構成するサブラインが属する整列スモールタイルのタグデータを並列に読み出されるようにする。
【発明の効果】
【００１９】
階層的なタイル形式での格納は、2次元以上の配列データ処理において、TLBミスやインデックス衝突起因のキャッシュミスの低減、主記憶・キャッシュ間ブロック転送／バースト転送での無効データ含有率低減、ラージタイルサイズ程度の2次元ブロックデータのページングによる高効率転送等に効果的ながら、アドレス計算の複雑化によりアドレス生成のオーバヘッドやプログラマへの負担が大きくなることから、容易に利用できるものではなかった。これに対し、以上説明したように、本発明のキャッシュメモリを用いれば、下位側の記憶階層で階層的なタイル形式データとして割り当てられている配列データが、プロセッサ側から階層無しのラスタ形式データとして、整列／非整列のラスタライン単位あるいはスモールタイル単位でアクセス可能になる。これにより、階層的なタイル形式の格納データのアクセスを、プログラムが関与しない、キャッシュエントリのリプレース、主記憶・２次記憶間のスワップ等の記憶階層間の転送に限定できるので、これまで弱点であったプロセッサ側での複雑なアドレス計算は一切不要になる。また、SIMD命令の標準的な処理単位である任意位置のラスタラインのアクセスと、転置や列方向の並列アクセスに必要になる任意位置のスモールタイル単位のアクセスの両立も、2次元データをキャッシュメモリ内にラスタ形式とスモールタイル形式として２重に持つことなしで実現可能になるため、特許文献１の方式に比べると、キャッシュの格納領域の占有量と転送のオーバヘッドを半分以下に抑えられる。さらに、タグメモリが容量1/Mの１リード１ライトメモリM個の並列動作により構成できるため、ハードウェア規模を既存の標準的なキャッシュメモリと同等の規模にまで低減できる利点がある。
【図面の簡単な説明】
【００２０】
【図１】従来のダイレクトマップ型キャッシュメモリの基本構成を示すブロック図
【図２】タイル形式２次元配列データのメモリ割り当て
【図３】ラスタ形式とタイル形式の相互アクセスを可能とするキャッシュメモリのブロック図
【図４】図４(a)  Aパターン割り振り時に2次元配列データを階層的なタイル形式でアクセスする際の格納先のディスプレースメント（階層的なタイル形式での格納先アドレス）  図４(b)  Aパターン割り振り時に階層的なタイル形式でアクセスされる2次元配列データのBパターン割り振り時の格納先のディスプレースメント（ラスタ形式データでの格納先アドレス）
【図５】本発明の実施例１のブロック図
【図６】図６(a)  画像等の2次元データから切り出すa〜dの添え字で示される４本サブラインからなるスモールタイル  図６(b)  アドレス空間（実態は主記憶）に格納する際のスモールタイル内のサブラインの並び
【図７】各サブデータアレイに対するスモールタイルを構成するサブラインの割り当て
【図８】本発明の実施例２のブロック図
【図９】本発明の実施例３のブロック図
【図１０】出力先交換機のブロック図
【図１１】境界段差加算器のブロック図
【発明を実施するための形態】
【００２１】
本発明の実施形態について下記に説明するが、本発明の技術的範囲は下記の実施形態によって限定されるものではなく、その要旨を変更することなく様々に改変して実施することができる。また、本発明の技術的範囲は、均等の範囲にまで及ぶものである。
【実施例】
【００２２】
以下に示す実施例は、32ビットアドレスについて、最上位側からアドレスタグ部20ビット、インデックス部７ビット、オフセット部5ビットに割り当てるAパターンのアドレス割り振りで、キャッシュラインに割当てる (w/M)×Mバイトサイズのスモールタイルのラスタ走査順の並びが収まる１ウェイ分のキャッシュ容量に一致するサイズの2k・wバイト幅のラージタイルのラスタ走査順の並びからなる階層的なタイル形式として見える2次元データをアクセス対象とする。ただし、アクセス対象2次元データの幅は２のべき乗サイズの2048（実施例３以降については、外部より与えるWHTで定める）、高さも２のべき乗サイズとし、タイルサイズパラメータは、M=4、w=32、k=1とする。
【実施例１】
【００２３】
通常用いられるAパターンの割り振りのままでは、階層的なタイル形式の走査順がそのまま見えることとなり、従来の階層なしの画素単位のラスタ走査順とは大きく異なって、キャッシュメモリアクセス時のアドレス計算に大きな負担がかかる。そこで、本発明では、２つ目の課題解決手段により構成するスモールタイル、ラスタライン両アクセス対応のキャッシュメモリに、１つ目の課題解決手段である外部から入力されるアドレスADRをそのままアドレスタグ部、インデックス部、オフセット部に割り当てるAパターンの割り振りから、Bパターンの割り振りに切り換えられるようにすることで、階層的なタイル形式の2次元データを、プロセッサ側から従来の階層なしのラスタ形式2次元データとして見えるようにして、構成データの先頭を指定するラスタラインとスモールタイルをキャッシュラインとしてアクセスされるようにする。
【００２４】
図５は、この仕組みとしてアドレスビット割り振り直しユニット300を組み込んだ本発明の実施例１の構成を示すブロック図である。この図に示されるように、本実施例には２つ目と３つ目の課題解決手段として、300内の最も上側の２入力のビット列を１出力のビット列に絞るマルチプレクサ10t、10i、10oに、外部から通常用いられる割り振りパターン（Ａパターン）のビット列と最上位側からアドレスタグ部の上位側、インデックス部の上位側、オフセット部の上位側のlog2Mビット（=2ビット）、アドレスタグ部の下位側、インデックス部の下位側のk+1og2Mビット、オフセット部の残りの順に割り当てる割り振りパターンであるBパターンのビット列がそれぞれ入力されている。この２通りのアドレスのビット列をアクセスモード切り換え信号RTSEL0の14により切り替えて、アドレスタグ部の下位、インデックス部、オフセット部の上位として出力する。この構成により、階層的なタイル形式指定のRTSEL0=0で、次段のアドレスレジスタ1へは、アドレスの全ビット並び替え無しの長い方の矢印の入力ビット列を選択出力する。これに対し、ラスタ形式指定のRTSEL0=1では、インデックス部の0ビット目〜（k-1+log2M）ビット目（=2ビット目）に、b3〜b5+k-1［M=4、k=1なので、b3〜b5］が入り、その上に続くb6〜b10がアドレスタグ部下位側に入る短い波線矢印の入力ビット列の方を選択出力する。ここで、アドレスタグ部下位側のビット幅は、2次元データの横幅のサイズまで、ラージタイルの位置が指定されるようにlog2(WHT/w/2k)ビット (=5ビット)になる。この結果、キャッシュラインサイズwの２k倍（=32×21=64バイト）のラージタイルの幅毎に、アドレスタグ部が1だけインクリメントし、横方向のアドレスの見え方が、バイト単位のラスタ走査順のアドレスに一致するようになる。加えて、b13〜b16がインデックス部の（k+log2M）ビット目［M=4、k=1なので、3ビット目になる］以降の上位側に入る短い波線矢印の入力を10iが選択出力する結果、個々のラスタラインが下方向に何ライン目かで個別に指定できるようになると共に、Mラインごとのインクリメントがラージタイルの高さまで行われるようになる。さらに、アドレスタグ部の上位側b17〜b31に続くビット列として、10tが短い波線矢印の入力ビット列を選択出力する結果、ラージタイルの高さごとにタグが、2次元データの幅分だけインクリメントされるようになる。このように、キャッシュメモリ内の階層的なタイル形式の2次元データは、RTSEL0=1とすることで外部からの入力アドレスb0〜b31が並び替えられて内部に入力される結果、2次元データの横幅が2のべき乗サイズであれば、外部からは標準的なラスタ形式データとして見えるようになる。
【００２５】
アドレスビット割り振り直しユニット300より下は、[1]RTSEL0=0かつRTSEL1=1で、保持する階層的なタイル形式の2次元データからの(w/M)×Mサイズのスモールタイルをキャッシュラインとしてアクセス可能とするのに加え、[2]標準的なラスタ形式データとして見えるRTSEL0=1の条件で、階層的なタイル形式の2次元データにおいて横方向に並ぶ(w/M)×MサイズのスモールタイルのM個毎を、ラスタ形式データ中のw幅のラスタラインのM本として見せ、その個々のラスタラインを構成するバイトデータをラスタ形式データ中の要素データとしてもアドレシング可能とする２つ目の解決手段を採るタイル／ライン両アクセス対応キャッシュメモリ400である。以下、このキャッシュメモリ400の動作について説明する。
【００２６】
300のアドレスレジスタ１より、インデックス部信号11、アドレスタグ部信号12、オフセット部信号13が入力される。4はヒット／ミスヒット判定用の比較器、7はアクセス対象のキャッシュラインのヒット／ミスヒット判定用のANDゲートである。データアレイはM個（この実施例では4個）のサブライン単位アクセス対応のサブデータアレイ3a、3b、3c、3dで構成している。各サブデータアレイは書き込みデータ18a、18b、18c、18dを入力するポートと、読み出しデータ19a、19b、19c、19dを出力するポートを備えている。また、タグアレイもデータアレイに合わせ、4個のサブタグアレイ2a、2b、2c、2dで構成している。各サブタグアレイは、物理アドレスに変換されたアドレスタグ部信号121に加え、外部より与えるDirty信号21とValid信号22の３信号の入る入力ポートと、タグデータ16a、16b、16c、16d、Dirtyフラグ31a〜31d、Validフラグ32a〜32dを出力するポートとを、それぞれ備えている。これらのアレイは、いずれも１リード１ライトのNエントリメモリで構成し、アドレスとして個別のインデックス信号11a、11b、11c、11dを与えている。8は、個別のインデックス生成器であり、タイル／ラインアクセス指定信号141の値を表すRTSEL1、入力のインデックス部信号11の値を表す変数i、オフセット部信号13の上位側log2Mビット（=2ビット）の値を表す変数oに対し、f(RTSEL1, i, o, 0）、f(RTSEL1, i, o, 1）、f(RTSEL1, i, o, 2）、f(RTSEL1, i, o, 3）を3a、3b、3c、3dに与える個別のインデックス信号11a、11b、11c、11dとして出力する。ここで、f(RTSEL1, i, o, sdpos)は、次のC言語の条件演算子「?」と「：」を利用した条件式の式１により与えられる。
f(RTSEL1, i, o, sdpos)
= RTSEL1==0? g(i+M(mod(sdpos-o,M)<mod(i,M))((mod(i,M×2k)≦M×(2k-1))-(2k-1)
(mod(i,M×2k)>M×(2k -1))),o,sdpos) 
：(i+M×2k ((mod(i,M)+o>M+sdpos) +(mod(i,M)<1+sdpos)( mod(i,M)+o>sdpos)))
（式１）
【００２７】
ここで、図５における141のRTSEL1は、=0でラスタラインアクセスを指定し、=1でスモールタイルアクセスを指定するタイル／ラインアクセス指定信号、sdposはサブデータアレイの並び位置を表す変数であり、mod値は最小非負剰余である。C言語の記法に倣って、「==」、「>」、「< 」を含む( )内の条件式は、成立した場合に真（=1）、そうでない場合は偽（=0）であることを表す。また、g(i, o, sdpos)は、次の式２により与えられる。
g(i, o, sdpos) = ((i/M)×M) + mod(sdpos‐o, M)
= ((i/4)×4) + mod(sdpos‐o, 4)                                    （式２）
【００２８】
図５の75は、仮想アドレスのアドレスタグ信号を物理アドレスのアドレスタグ信号に変換するTLBの機能に加え、アクセス対象のラスタライン、スモールタイルがラージタイルの境界を跨ぐ場合の境界の内側と外側のアドレスタグを生成する機能を備えた物理アドレス変換・段差加算器であり、次の式３より得られるh(RTSEL1, i, o, t, 0)、h(RTSEL1, i, o, t, 1) 、h(RTSEL1, i, o, t, 2) 、h(RTSEL1, i, o, t, 3)をサブタグアレイのアドレスタグ信号20a、20b、20c、20dとして出力する。
h(RTSEL1, i, o, t, sdpos)
= RTSEL1==0 ?  ( (mod(sdpos-o,M)<mod(i,M))(mod(i, 2k×M)>M×(2k -1))==1? (t+1)’ : t’ )  :
((i>27-2k×M)((mod(i,M)+o>M+sdpos)+(mod(i,M)<1+sdpos)( mod(i,M)+o>sdpos))==1?
(t+ WHT/w/2k)’ : t’ )                                                               （式３）
【００２９】
ここで、tはアドレスタグ部の信号値で、「’」の無し、有りは、tがTLB変換前のアドレスタグ信号値、t’が変換後のアドレスタグ信号値であることを示している。
図５の６は75より出力されるアクセス対象サブラインごとの個別のアドレスタグ信号20a〜20d、個別のインデックス信号11a〜11d、ヒット／ミスヒット個別判定結果17a〜17dの各入力信号よりリプレース用スモールタイルのアドレス25を生成するアドレス生成器である。
【００３０】
続いて、階層的なタイル形式のAパターンで2次元データ中のタグ値がt（tag=t）の位置のラージタイル内の位置（インデックス部で指定）がn〜n+5の６個の整列スモールタイル（o=０で先頭バイトが指定されるスモールタイル）を、本実施例に書き込み、その後、ラスタ形式のBパターンでw（この実施例では、32）バイトサイズのラスタラインを読み出す場合の動作について説明する。ただし、スモールタイルはサブラインの並びで構成され、そのサブラインのスモールタイル内の上からの並び位置をa〜dの添え字で示している。また、nはM（この実施例では、4）の倍数とし、2次元データから切り出す図６(a)のMの倍数以外の位置のスモールタイルに対し、図６(b)に示すように本来の位置からずらしてアドレス空間（実態は主記憶）中に整列スモールタイルとして格納されるようにする。
【００３１】
初めに、キャッシュラインデータとしてラージタイル内でn〜n+5の位置の整列スモールタイルを、添え字a〜dで示されるサブラインに分け、18a〜18dの端子から並列に入力し、RTSEL0=0で階層タイル形式アクセスを、RTSEL1=1でスモールタイルアクセスをそれぞれ指定した上で、オフセット部の上位log2Mビット（=2ビット） のoを0とし、書き込み信号WRTの15をアサートし、インデックス部信号をn〜n+5（i=n〜i=n+5）として、主記憶あるいは2次キャッシュから読み出す整列スモールタイルをサブデータアレイに書きこむ。この場合、11a〜11dにはインデックス部信号の値が修飾無しでそのまま出力されるので、サブデータアレイの各々のn〜n+5番地に、ラージタイル内のn〜n+5の位置の整列スモールタイルが図７に示されるようにそれぞれ格納される。また、同時に、外部より与えるDirtyフラグ書き込み信号DTYの15dとValidフラグ書き込み信号VALIDの15vのアサートにより、タグアレイのn〜n+5番地のエントリには、アドレスタグ部信号12の値tが物理アドレス変換・段差加算器75で物理アドレス値に変換された121のt’がタグデータとして書き込まれるのと合わせて、22への論理値１の入力によりValidフラグがセット、21への論理値0の入力によりDirtyフラグがリセットされる。
【００３２】
次に、このように書き込まれた整列スモールタイルの並びから、RTSEL0=1でラスタ形式アクセスを、RTSEL1=0でラスタラインアクセスを指定し、インデックス部信号11の値iをn（i=n）、オフセット部信号の上位log2Mビット（=2ビット）のoを0として、アドレスタグ部信号12の値をtとして、19a〜19dの端子から読み出す。そうすると、iがnの場合、g(n,0,sdpos)= ((n/4)×4) + sdposとなり、
g(n,0,0)= ((n/4)×4)
g(n,0,1)= ((n/4)×4)+1
g(n,0,2)= ((n/4)×4)+2
g(n,0,3)= ((n/4)×4)+3                                                          （式４）
となるので、nを16の倍数とすると、
f(0, n, 0, 0)＝n
f(0, n, 0, 1)＝n+1
f(0, n, 0, 2)＝n+2
f(0, n, 0, 3)＝n+3                                                              （式５）
となる。これらが個別の被修飾のインデクス信号11a〜11dとして各サブデータアレイ3a〜3dと各サブタグアレイ2a〜2dに与えられると、
【表１】
2016048424.tif 000003
表1の値が、スモールタイルのずれのない状態での1段目のサブラインの並びがキャッシュラインとして読み出される。
【００３３】
また、n〜n+3のスモールタイルがタグ値tのラージタイル内のスモールタイルであることから、タグアレイのn〜n+3番地からはタグ値t’が読み出されて、比較器の4の右側のポートに入力される。左側のポートにも、アドレスタグ部信号12の値tがタグ段差加算器で変換されたt’ が入力されるので、4個の比較器4の比較結果はいずれも一致となり、ANDゲート7は真となり、キャッシュヒットが検出され、読み出されたキャッシュラインは有効となる。このキャッシュラインは、ねじれ無しの元々の2次元データのn〜n+3のタイルデータの並び（図６(a)の最上段のサブラインの並び）、換言すれば、ラスタ形式の2次元データから切り出すラスタラインに一致している。また、インデックス部信号値iが nで、オフセット部上位log2Mビットoが１では、g(n,o,sdpos)= ((n/4)×4) + mod(sdpos‐1,4)となる結果、
g(n+1,o,0)= (((n+1)/4)×4)+3    g(n+1,o,1)= (((n+1)/4)×4)+0    g(n+1,o,2)= (((n+1)/4)×4)+1    g(n+1,o,3)= (((n+1)/4)×4)+2                                                    （式６）  
となり、nを16の倍数とすると、
f(0, n+1, 0, 0)＝n+3
f(0, n+1, 0, 1)＝n
f(0, n+1, 0, 2)＝n+1
f(0, n+1, 0, 3)＝n+2                                                            （式７）
となる。データアレイからは、図６(a)の2段目のサブラインの並びであるラスタライン
【表２】
2016048424.tif 000004
がキャッシュラインとして読み出される。
【００３４】
同様に、iが nでoが2、3では、図６(a) の3段目、4段目（表３，４）のサブラインの並びであるラスタラインがキャッシュラインとして読み出される。
【表３】
2016048424.tif 000005
【表４】
2016048424.tif 000006
一段目のサブラインの並びと同様に、いずれも、各タグはt’で一致するため、読み出されるキャッシュラインは有効となる。ここで、読み出される一段目以外のラスタラインはねじれてしまう。この問題に対しては、(w/M)×mod(i, M)の左方向ローテートシフトを、別途出力部に置くシフタで行うか、外部のシフタで行うかにより対応できる。
【００３５】
ここまで、n〜n+5の位置のスモールタイルをあらかじめ書き込んだ後にラスタラインを読み出す場合を示してきたが、n〜n+3のいずれかが、書き込まれていなかった場合には、その書き込まれていないスモールタイルの部分のタグの比較結果が不一致となり、ミスヒットが検出される結果、キャッシュラインは無効になる。この場合は、17a〜17dのうちのネゲートされている信号に対応するスモールタイルをリプレースしてから読み出しなおす。17a〜17dの全部がアサートされる結果、キャッシュヒットとなりラスタラインの有効なアクセスが実現される。リプレース用の整列スモールタイルの階層タイル形式のアドレス25は、６により、17a〜17dのうちでネゲートされている信号に対応する20a〜20dのうちの一つと個別の被修飾インデックス信号11a〜11dのうちの一つを、それぞれ上位と中位に、オフセット部を0とすることで生成される。17a〜17dのうちネゲートされている信号が複数あれば、その信号ごとに、リプレース対象のスモールタイルのアドレス25が生成されるようにする。ここで、ミスヒット解消のためのリプレースを、スモールタイル単位で行うのは、ラスタラインを単位とするのに比べ、２次元的に広がるアクセス領域を突き出る不要なデータの転送を抑えられるからである。また、リプレースの機構は既存のキャッシュメモリと同様な構成で実現されるので図面には記していない。ここまでは、タイルとして書き込んだデータからラスタラインを読み出す操作について説明したが、外部のプロセッサ等の演算結果のラスタラインを、18a〜18dから入力し、RTSEL1を0とし、書き込み信号15をアサートすれば、ラスタラインの書き込みが実現される。この場合、サブラインの書き込みと合わせて必要となるDirtyフラグのセットは、各サブタグアレイに配られるDirty信号21を1として、Dirtyフラグ書き込み信号DTYの15dをアサートすることで、並列に実行される。
【００３６】
ここまで、整列のスモールタイル、ラスタラインについて説明してきたが、非整列のスモールタイル、ラスタラインのアクセスも可能である。ただし、この場合はラージタイル内のインデックス境界、あるいはラージタイル間のタグ境界を跨ぐことになる。先の式２はこのインデックス境界を跨ぐ場合に対応した式となっている。また、先の式３は、タグ境界を跨ぐ場合に対応した式となっている。
【００３７】
以上、説明したように本実施例によれば、スモールタイルアクセス指定により階層的なタイル形式データとして書き込まれているスモールタイルの並びが、ラスタラインアクセス指定により、ラスタ形式データとして見えるようになり、そこからオフセット部の上位log2Mビットにより先頭のサブラインの位置が指定されるラスタラインを読み出したり、書き込んだりできる。
【００３８】
なお、以上の動作例では、スモールタイルを書き込んで、ラスタラインを読み出す例を示したが、読み書きを入れ換えるだけで、逆のラスタラインを書き込んで、スモールタイルを読み出す動作も可能になる。また、ここまで図５における141のRTSEL1=0がラスタラインアクセス指定、RTSEL1=1がスモールタイルアクセス指定として説明してきたが、これらのアクセス指定は固定されているわけではなく、どちらに割り当ててアクセスするかだけのことである。これまでの説明とは逆の割り当てとし、RTSEL1=0でスモールタイルを書き込めば、そこからRTSEL1=1でラスタラインが読み出されるようになるし、逆に、RTSEL1=1でラスタラインを書き込めば、そこからRTSEL1=0でスモールタイルが読み出されるようになる。
【実施例２】
【００３９】
図８は、本発明の実施例２の構成を示すブロック図である。実施例１との違いは、Bパターンにおいて、外部から指定する2のべき乗の任意の横幅WHTに対応して割り振りが切り替わるようにする３つ目の課題解決手段であるWHT可変機能をアドレスビット割り振り直しユニット301内に組み込んでいる点である。具体的には、アドレスビット割り振り直しユニット301内において、横幅WHTごとのタグ増分のビット幅Btstr( =log2(WHT/w/2k) )を入力信号の65としてデコーダ70に入力して、2入力1出力マルチプレクサ100tの入力ポート選択指定信号1412〜1431がWHTに応じて生成されるようにすると共に、22入力1出力マルチプレクサ101i、101oにも65を入力し、インデックス部、オフセット部もWHTに応じて入力アドレスが割り振り直されるようにして、このWHT可変の割り振り直しを実現している。以下にそのアドレスの割り振り直しが、アクセスモード切り換え信号14のRTSEL0が0、1のそれぞれについて、どのように行われるかを説明する。
【００４０】
[1]RTSEL0=0の場合
図８の14によりマルチプレクサ10i、10oが右側ポート側を選択するのに加え、70より右側ポートを選択するデコード信号の1412〜1431が、マルチプレクサ100tに入力される結果、外部から入力されるアドレスは、Ａパターンのアドレス割り振りとなる。
【００４１】
[2]RTSEL0=1の場合
70により1412〜1431が、20個のマルチプレクサ100tの内の右側からBtstr個を左側ポート入力選択に、残りの(20- Btstr)個を右側ポート入力選択になるようデコードされる結果、Bパターンの割り振りにおいて、WHTに応じて、アドレスタグ部の上位側に、b31~ b12+Btstrが、アドレスタグ部の下位側にb5+Btstr〜b6が、Btstr>0の条件で割り当てられる。また、マルチプレクサ101i、101oについては、WHTの65により右側から1+Btstr入力目のビットが選択出力される結果、インデックス部の上位側にb11+Btstr 〜b8+Btstrが、オフセット部の上位側のlog2M（=2）ビットに、b7+Btstr 〜b6+Btstrが、WHTに応じて割り当てられる。
【００４２】
図８のアドレスレジスタ１より下のタイル／ライン両アクセス対応キャッシュメモリ400は動作も含めて実施例１と全く同じなので、説明は割愛する。
【実施例３】
【００４３】
図９は、本発明の実施例３の構成を示すブロック図である。実施例１に対し、４つ目〜６つ目の課題解決手段を取り入れて、タグアレイの容量が半減されるようにしたものである。具体的には、タイル／ライン両アクセス対応キャッシュメモリ図５の400を、以下の３点の変更・追加を行った図９の401に置き換えている。
【００４４】
[1]５つ目の課題解決手段に基づき、M (=4)個のサブデータアレイ3a〜3dと対で設けるM (=4)個のサブタグアレイ2a〜2dでタグアレイを構成する代わりに、サブデータアレイとは別個にM (=4)個設けるエントリ数1/M (=1/4)のサブタグアレイ200〜203でタグアレイを構成している点。
【００４５】
[2]書き込み信号WRTの図９における15の値に応じて、以下の式で与えられるWRTGA0、WRTGA1、WRTGA2、WRTGA3を書き込み信号150、151、152、153として、WRTGM0、WRTGM1、WRTGM2、WRTGM3をDirtyフラグ書き込み信号150d、151d、152d、153dとして、WRTGV0、WRTGV1、WRTGV2、WRTGV3をValidフラグ書き込み信号150v、151v、152v、153vとして、それぞれ出力する書き込み信号生成器40を追加している点。ここで、下記式８、９、１０におけるi2+k、i1、i0はインデックス部信号の構成ビット、o4、o3はオフセット部信号の上位側log2Mビットで（=2ビット）、添え字はそれぞれの部分の最下位からのビット位置を示している。また、2番目の整列スモールタイル書き込みに対応する項でi0がそのままでなく、i2+k との間で排他的論理和〔+〕をとっているのは、６つ目の課題解決手段に基づき、書き込み対象のスモールタイルがラージタイル内のスモールタイルの並びの奇数行目に位置する場合（i(1+k)+1 =i2+k =1）場合に、格納先のサブタグアレイのエントリを左から数えて0、1列目あるいは2、3列目のサブタグアレイ間で入れ替えるためである。3番名の項は非整列のスモールタイルを含む列方向の隣接スモールタイルのタグデータ書き込みに必要になる0、1列目あるいは2、3列目の同時の書き込みが実現されるように加えられている。ここでは便宜上、排他的論理の記号として〔+〕を使用する。
【００４６】
WRTGA0 = WRT Λ ((RTSEL1==0) V (i1×2+ i2+k〔+〕i0==0) V ((i1==0)Λ(o4 V o3)) 
WRTGA1 = WRT Λ ((RTSEL1==0) V (i1×2+ i2+k〔+〕i0==1) V ((i1==0)Λ(o4 V o3)) 
WRTGA2 = WRT Λ ((RTSEL1==0) V (i1×2+ i2+k〔+〕i0==2) V ((i1==1)Λ(o4 V o3)) 
WRTGA3 = WRT Λ ((RTSEL1==0) V (i1×2+ i2+k〔+〕i0==3) V ((i1==1)Λ(o4 V o3)) 
（式８）
WRTGM0 = DTY Λ ((RTSEL1==0) V (i1×2+ i2+k〔+〕i0==0) V ((i1==0)Λ(o4 V o3)) 
WRTGM1 = DTY Λ ((RTSEL1==0) V (i1×2+ i2+k〔+〕i0==1) V ((i1==0)Λ(o4 V o3)) 
WRTGM2 = DTY Λ ((RTSEL1==0) V (i1×2+ i2+k〔+〕i0==2) V ((i1==1)Λ(o4 V o3)) 
WRTGM3 = DTY Λ ((RTSEL1==0) V (i1×2+ i2+k〔+〕i0==3) V ((i1==1)Λ(o4 V o3))  
（式９）
WRTGV0 = VALID Λ (RTSEL1=1) Λ(i1×2+ i2+k〔+〕i0==0) 
WRTGV1 = VALID Λ (RTSEL1=1) Λ(i1×2+ i2+k〔+〕i0==1)  
WRTGV2 = VALID Λ (RTSEL1=1) Λ(i1×2+ i2+k〔+〕i0==2) 
WRTGV3 = VALID Λ (RTSEL1=1) Λ(i1×2+ i2+k〔+〕i0==3) 
（式１０）
【００４７】
[3]６つ目の手段に基づき、RTSEL1を0とする場合には17を、RTSEL1を1とする場合で、o4 、o3が共に0の整列スモールタイルアクセスの場合には、17a〜17dの比較判定結果のうち左からi1×2+ i2+k〔+〕i0番目（0オリジン）を選択出力し、o4 、o3のいずれかが1の非整列スモールタイルアクセスの場合には、i1が0で17a、17bの論理積を、i1が1で17c、17dの論理積を選択出力する比較結果選択器9を追加している点。
これらの変更、追加の結果、本実施例は次のように動作する。
【００４８】
（１）RTSEL1信号の141を1とし、整列スモールタイルをアクセスする場合
図９においてアクセス対象が整列スモールタイル（オフセット部信号oが0）の場合、整列境界を跨がないため、データアレイ向けのインデックス部信号11はインデックス生成器8の中で修飾されることも段差が加算されることもなく、そのまま各サブデータアレイの個別のインデックス信号11a〜11dとして出力される。タグデータもスモールタイルの途中の構成サブラインから変わることがないため、インデックス段差加算器81で段差が加算されることはなく、入力のインデックス部信号11の値iを1/4にしたi/4がそのままで各サブタグアレイ200〜203に配られる。従って、実施例１の場合と同様に、各サブデータアレイからは修飾なしのインデックス部11によって指定されるエントリのスモールタイルがアクセスされる。また、タグアレイについては、i/4で指定されるエントリのタグデータが並列にアクセスされ比較器4に入力される。同時にアドレスタグ部信号12も物理アドレス変換・段差加算器75を介して比較器に入力される。この場合も、アクセス対象のスモールタイルが整列境界を跨がないため75でのタグ段差加算は行われず、アドレスタグ部信号12が、75、76を経由して、そのまま20a’〜20d’として比較器4に入力される。それぞれの判定結果が、比較器4の出力17a〜17dの内の一つがに、比較結果選択器9により選択され、ヒット／ミスヒット判定結果の170として出力される。ここで、比較結果選択器9は、整列境界を跨がないオフセット部o0〜o4のすべてが0の条件で、左からi1×2+ i2+k 〔+〕i0番目の比較結果を選択し、ヒット／ミスヒット判定結果とする。ヒットの場合はそのままアクセスするのに対し、ミスヒットの場合はリプレース用スモールタイルアドレス生成器61により生成されるアドレスで指定されるスモールタイルを主記憶あるいは2次キャッシュから読み出してミスヒットしたエントリのスモールタイルをリプレースする。アクセス対象エントリへの最初の書き込みの場合は、15、15d、15vをすべてアサートすることで、150、150d、150v、151、151d、151v、152、152d、152v、153、153d、153vの4組の内、左からi1×2+ i2+k〔+〕i0番目のサブタグアレイに向かう組をアサートする。これにより、i/4で指定されるサブデータアレイのエントリにスモールタイルが書き込まれると同時に、i2+k、i1、i0で定まるサブタグアレイのi/4で指定されるエントリに対し、アドレスタグ信号12をt、Dirty信号21を0、およびValid信号22を１として、タグデータt’の書き込み、Dirtyフラグのリセット、Validフラグのセットが行われる。2度目以降の書き込みでは、15dのみアサートし、Dirty信号を1とし、Dirtyフラグをセットする。
【００４９】
（２）RTSEL1信号の141を0とし、ラスタラインをアクセスする場合
データアレイ側に向かうインデックス部信号11はインデックス生成器8で式１の通り修飾されると共に整列境界以降に位置するサブライン用には境界インデックス段差が加算されて、エントリアドレスを指定する個別の被修飾インデックス信号11a〜11dとして各サブデータアレイ3a〜3dに配られる。タグアレイ側に向かうインデックス部信号11は、整列境界以降に位置するサブライン用にはインデックス段差加算器81で境界インデックス段差が加算されてから1/4にされ、エントリアドレスを指定する個別のインデックス信号111a〜111dとして、各サブタグアレイ200〜203に配られる。この結果、データアレイからは、ラスタラインが(mod(i,4)+( 2×o4+o3))だけ右方向にローテートシフトされてアクセスされる。また、タグアレイからは、整列境界を超えるサブラインに対しては境界インデックス段差加算有りのエントリから、それ以外のサブラインに対しては境界インデックス段差加算無しのエントリからタグデータがそれぞれ読み出されて、比較器4へ出力される。一方、アドレスタグ部信号12は物理アドレス変換・段差加算器75で、整列境界を超えるサブラインに対しては境界タグ段差加算有りで、それ以外のサブラインに対しては境界タグ段差加算無しでアドレスタグ20a〜20dが生成され、出力元交換器を経て20a’〜20d’となり比較器4に入力される。サブライン毎の個別の判定結果が比較器4の出力17a〜17dに、それらの論理積がラスタライン全体の判定結果として17に得られ、それが比較結果選択器9を通って、170としてヒット／ミスヒット判定結果が出力される。ヒットの場合はそのままアクセスするのに対し、ミスヒットの場合は、リプレース用スモールタイルアドレス生成器61により生成されるアドレスで指定されるスモールタイル（最大4個）を主記憶あるいは2次キャッシュから取り出して、（１）の場合のスモールタイル単位のアクセス法により書き込んでリプレースする。ヒット時の書き込みアクセスの場合には、15をアサートしデータアレイにラスタラインを書き込むのに加え、15dをアサートし、サブタグアレイに向かう150d〜153dのすべてをアサートし、かつDirty信号の21を1として、ラスタラインの構成サブラインを含むすべてのサブタグアレイのエントリのDirtyフラグをセットする。
【００５０】
（３）RTSEL1信号の141を1とし、非整列スモールタイルをアクセスする場合
図９におけるデータアレイ側に向かうインデックス部信号11は、インデックス生成器8で、整列境界を超えるサブラインに対して境界インデックス段差加算有り、それ以外のサブラインに対して加算無しとなるよう生成されるエントリアドレス指定の個別のインデックス信号が11a〜11dとして各サブデータアレイに配られる。タグアレイ側に向かうインデックス部信号11は、インデックス段差加算器81で、整列境界の手前の側のサブラインのタグ用にはインデックス段差加算無しのものが、整列境界を跨いだ側のサブラインのタグ用にはインデックス段差が加算されたものが、それぞれ1/4にされて、エントリアドレスを指定する個別のインデックス信号111a、111bあるいは111c、111dとして、各サブタグアレイに配られる。この結果、データアレイからは、非整列スモールタイルが(mod(i,4)+( 2×o4+o3))だけ右方向にローテートシフトされてアクセスされる。また、タグアレイからは、整列境界を越えるサブラインのタグが境界インデックス段差加算有りのエントリから、整列境界を超えないサブラインのタグが境界インデックス段差加算無しのエントリからそれぞれ読み出されて、比較器4に入力される。一方、アドレスタグ部信号12は物理アドレス変換・段差加算器75で、整列境界を超えるサブラインに対して境界タグ段差加算有り、整列境界を超えないサブラインに対しては加算無しとなり、その結果の20a〜20dが出力元交換機76を経て、20a’〜20d’として比較器4に入力される。サブライン毎の判定結果の比較器4の出力17a〜17dは比較結果選択器9に入力され、これらの入力のうち非整列スモールタイルの構成サブラインに関わる左からi1×2番目とi1×2+1番目の判定結果の論理積がヒット／ミスヒット判定結果として170より出力される。ヒットの場合はそのままアクセスするのに対し、ミスヒットの場合は、リプレース用スモールタイルアドレス生成器61により生成されるアドレスで指定されるスモールタイル（最大2個）を主記憶あるいは2次キャッシュから読み出して、（１）の場合のスモールタイル単位のアクセスにより書き込んでリプレースする。ヒット時の書き込みアクセスの場合には、15dをアサートし、サブタグアレイに向かう150d〜153dのうちの必要なものをアサートし、かつDirty信号の21を1として、非整列スモールタイルの構成サブラインを含むすべてのサブタグアレイのエントリのDirtyフラグに1をセットする。
【００５１】
次に、本実施例で追加した、図９の書き込み信号生成器40、出力元交換器76、インデックス段差加算器81について説明する。
書き込み信号生成器40は、RTSEL1信号141が1かつオフセット部信号o4、o3がいずれも0の条件で、15がアサートされた場合にi1×2+ i2+k 〔+〕i0で指定される150〜153の内の一つを、15dがアサートされた場合にi1×2+ i2+k 〔+〕i0で指定される150d〜153dの内の一つを、15vがアサートされた場合にi1×2+ i2+k 〔+〕i0で指定される150v〜153vの内の一つを、それぞれアサートする。また、RTSEL1信号141が1かつオフセット部信号o4、o3のうち一つでも1で、15がアサートされた場合にi1で指定される150〜153の内の2つを、15dがアサートされた場合にi1で指定される150d〜153dの内の2つを、15vがアサートされた場合にi1で指定される150v〜153vの内の2つを、それぞれアサートする。さらに、RTSEL1信号141が0で、15がアサートされた場合に150〜153を、15dがアサートされた場合に150d〜153dを、15vがアサートされた場合に150v〜153vを、それぞれアサートする。
【００５２】
出力元交換器76は、75より入力される20a〜20dに対し、対象スモールタイルがラージタイル内の偶数行目に位置する場合はそのまま、奇数行目に位置する場合は、20aを20b’として、20bを20a’として、20cを20d’として、20dを20c’として、それぞれ出力する交換器である。この交換機能は、図１０に示す通り、出力元交換用の４個の2入力1出力のマルチプレクサ83で構成し、各々のマルチプレクサが偶数行目に位置する場合のi2+k=0で交換なしの左側入力を、奇数行目に位置する場合のi2+k=1で交換有りとなる右側入力を、選択することで実現される。
【００５３】
図９のインデックス段差加算器81は、アクセス対象が非整列のラスタラインあるいはスモールタイルの場合に整列境界のインデックス段差を加算して各サブタグアレイのアクセス対象エントリを指定するアドレスを生成するもので、内部構成は図１１に示す通りである。ここで、85は、RTSEL1信号141を0にしてラスタラインをアクセスする際には、インデックス部信号11のビット列i5〜 i0のうちの下位から3ビット目のi2が0ならラージタイル内のスモールタイル4個分のインデックス段差である右側入力の‘M’をそのまま出力し、i2が1ならラージタイル間の行方向のインデックス段差である正負反転した‘-M’を出力し、RTSEL1信号141を1としてスモールタイルをアクセスする際には、列方向のスモールタイル間のインデックス段差である左側入力の‘2k×M’を出力するインデックス段差生成器である。ここで、 ‘ ’ は挟まれる数字が数値であることを陽に示すために用いている。86は、オフセット部信号のビット列o4〜o0の内のo4、 o 3が0、0で右端、0、1で右から2番目、1、0で右から3番目、1、1で左端の入力を選択する４入力1出力のマルチプレクサである。89は加算器である。90はインデックス部信号11と段差を加算した89からの入力のいずれかを選択する2入力1出力のマルチプレクサである。また、82は、生成したアドレスを1/4にして各サブタグアレイのエントリアドレスに変換するための2ビット切り詰め器、83は、６つ目の課題解決手段を担う2入力1出力の出力元交換用の２入力１出力のマルチプレクサであり、その切り換えは、デコーダ88の出力信号により制御される。以下、このインデックス段差加算器81の動作について説明する。
【００５４】
ラスタラインアクセス（RTSEL1信号141=0）の場合  上側の86により各サブラインがインデックスの境界を超えないか超えるかが求められ、その結果が真なら、90により、左上の85、89により生成する段差を加算したものが、偽ならインデックス部信号11がそのまま、82に対して出力される。82の2ビット切り詰めにより1/4にされた後、出力元交換用のマルチプレクサ83に渡される。この出力元交換用マルチプレクサ83には、その切り換え信号としてデコーダ88よりi2+kがそのまま入力される。その結果、アクセス対象のスモールタイルが、ラージタイル内で偶数行目に位置する場合はi2+kが0になり左側入力が選択されて、生成されたインデックス信号がそのまま出力され、奇数行目に位置する場合はi2+kが1になり、右側入力が選択されて、生成されたインデックス信号がペアとなるサブタグアレイへの出力同士で交換される。この交換は６つ目の課題解決手段に対応するためのもので、ラージタイル内の各スモールタイル列中の偶数行目と奇数行目のスモールタイルのタグデータが隣り合う互いに異なるサブタグアレイに格納されるようにするインデックス信号を生成する。
【００５５】
スモールタイルアクセス（RTSEL1信号141=1）の場合  ORゲート84、左側反転入力のANDゲート87に1が入ることで、左側から1番目と3番目の90の出力にインデックス段差2k×Mの加算されたインデックス信号が、左から2番目と4番目にインデックス部信号11がそのまま現れる。これらの出力は、82により1/4にされ、デコーダ88の出力により、出力元交換用マルチプレクサ83の切り換えが制御されることで、i2+kが0（偶数行目）の条件で、左からi1×2+i0番目の出力に図９における入力のインデックス部信号11の値iを1/4にしたi/4が、左からi1×2+!i0番目の出力に(i+2k×M) /4（=(i+8) /4）が出力される。ここで、!は論理の反転を意味する。また、i2+kが1（奇数行目）の条件で、左からi1×2+i0番目の出力に(i+2k×M) /4が、左からi1×2+!i0番目の出力にi/4が出力される。
【００５６】
このように、実施例３では、実施例１の1リード1ライトメモリ構成エントリ数Nのサブタグアレイ2a〜2dとリプレイスアドレス生成器6を、１リード１ライトメモリ構成エントリ数N/4のサブタグアレイ200〜203とリプレイスアドレス生成器61で置き換えることと、判定結果選択器9、書き込み信号生成器40、出力元交換器76、インデックス段差加算器81などを追加することにより、全く同一のヒット／ミスヒットの検出機能が実現される。なお、実施例１で説明したタイル書き込み、ラスタライン読み出しの動作は全く同じなので、その説明は割愛する。  
【産業上の利用可能性】
【００５７】
これらの実施例の１〜４では、最もシンプルなダイレクトマップについて説明したが、これらのダイレクトマップ型キャッシュメモリの並列化構成により、本発明を適用するセットアソシアティブキャッシュメモリを実現することができる。
以上説明した様に、本発明のキャッシュメモリを用いれば、下位側の記憶階層で階層的なタイル形式データとして格納されている配列データが、プロセッサ側から階層無しのラスタ形式データとして、整列／非整列のラスタライン単位あるいはスモールタイル単位でアクセス可能になる。これにより、階層的なタイル形式の格納データのアクセスを、プログラムが関与しない、キャッシュエントリのリプレース、主記憶・２次記憶間のスワップ等の記憶階層間の転送に限定できるので、これまで弱点であったプログラム側での複雑なアドレス計算は一切不要になる。また、SIMD命令の標準的な処理単位である任意位置のラスタラインのアクセスと、転置や列方向の並列アクセスに必要になる任意位置のスモールタイル単位のアクセスの両立も、2次元データをキャッシュメモリ内にラスタ形式とスモールタイル形式として２重に持つことなしで実現可能になり、画像圧縮技術や行列など高度な科学計算において、メモリーなど回路規模増加を抑えつつ、演算速度を上げることが出来る。
【符号の説明】
【００５８】
1：アドレスレジスタ、2：タグアレイ、2a〜2d：サブタグアレイ、
3：データアレイ、3a〜3d：サブデータアレイ、
4：比較回路、5：バレルシフタ
6、61：リプレイスアドレス生成器
7：アクセス対象のキャッシュラインのヒット／ミスヒット判定用のANDゲート
8：インデックス修飾器
9：比較結果選択器
10t、10i、10o：2入力ビット列1出力ビット列マルチプレクサ
100i、100t：2入力1出力のマルチプレクサ、
101i、101o：21入力1出力マルチプレクサ
11：インデックス部信号、
11a〜11d：各サブアレイ個別のインデックス信号
（各サブアレイのエントリアドレスを指定するインデックス信号）、
12：アドレスタグ部信号、13：オフセット部信号、
121：物理アドレスに変換されたアドレスタグ部信号
111a〜111d：各サブタグアレイ個別のインデックス信号
（各サブタグアレイのエントリアドレスを指定するインデックス信号）、
14：アクセスモード切り換え信号RTSEL0、
141：タイル／ラインアクセス指定信号RTSEL1
1412〜1431：入力ポート選択指定信号
15、150〜153：書き込み信号WRT、
15d、150d〜153d：Dirtyフラグ書き込み信号
15v、150v〜153v：Validフラグ書き込み信号
16a〜16d：タグデータ、
17a〜17d：ヒット／ミスヒット個別判定結果、
17、170：ヒット／ミスヒット判定結果、
18a〜18d：書き込みデータ、19a〜19d：読み出しデータ、
20a〜20d：アクセス対象サブラインごとの個別のアドレスタグ信号
20a’〜20d’：
21、31a〜31d：Dirtyフラグ、
22、32a〜32d：Validフラグ
25：リプレイス用スモールタイルアドレス
40：書き込み信号生成器
65：アドレスタグ部の上位側に割り振る外部から入力されるアドレスの最上位側のビット幅WHT
70：デコーダ
75：物理アドレス変換・段差加算器
76：出力元交換器
81：インデックス段差加算器
82：2ビット切り詰め器、83：出力元交換用マルチプレクサ
84： 2入力ORゲート
85：境界段差生成器
86：４入力１出力のマルチプレクサ
87：2入力ANDゲート（左側反転入力）
88：デコーダ
89：加算器、
90：２入力１出力マルチプレクサ
95：p×p個のデータからなる矩形のタイル
200〜203：１リード１ライトメモリ構成エントリ数N/4のサブタグアレイ
300：アドレスビット割り振り直しユニット
301：アドレスビット割り振り直しユニット
400、401：タイル／ライン両アクセス対応キャッシュメモリ
【図１】
2016048424.tif 000007
【図２】
2016048424.tif 000008
【図３】
2016048424.tif 000009
【図４】
2016048424.tif 000010
【図５】
2016048424.tif 000011
【図６】
2016048424.tif 000012
【図７】
2016048424.tif 000013
【図８】
2016048424.tif 000014
【図９】
2016048424.tif 000015
【図１０】
2016048424.tif 000016
【図１１】
2016048424.tif 000017