(57)【要約】【課題】スループットを向上させた演算処理装置及び演算処理装置の制御方法を提供する。【解決手段】キャッシュＲＡＭ１３３は、ＲＡＭ＃０〜＃１５を有し、各ウェイの連続するアドレスがＲＡＭ＃０〜＃１５の全てに亘って割り当てられる。命令制御部１１は、同じウェイ上の所定のアドレス間隔のデータに対する処理をそれぞれ指示する複数のキャッシュアクセスリクエスト２００を含む演算処理命令を取得し、取得したキャッシュアクセスリクエスト２００を送信する。キャッシュ制御部１３は、命令制御部１１から送信されたキャッシュアクセスリクエスト２００を受信し、キャッシュアクセスリクエスト２００で指定されたウェイ上の所定のアドレス間隔のデータに対するアクセス処理を実行する。演算制御部１２は、キャッシュ制御部１３によるアクセス処理の処理結果を基に演算処理を行う。【選択図】図２
2015210659.tif 000002
【特許請求の範囲】
【請求項１】
ウェイ毎に複数の記憶素子をそれぞれ有し、各ウェイに属する複数の前記記憶素子に対して連続するアドレスが割り当てられたキャッシュメモリと、
同じウェイに含まれる所定のアドレス間隔のデータに対する処理をそれぞれ指示する複数のキャッシュアクセス要求を含む演算処理命令を取得し、取得した複数の前記キャッシュアクセス要求を送信する命令制御部と、
前記命令制御部から送信された複数の前記キャッシュアクセス要求をそれぞれ受信し、各前記キャッシュアクセス要求で指定された前記ウェイに含まれる前記所定のアドレス間隔のデータに対する複数のアクセス処理を実行するキャッシュ制御部と、
前記キャッシュ制御部による前記アクセス処理の処理結果を基に演算処理を行う演算制御部と
を備えたことを特徴とする演算処理装置。
【請求項２】
前記所定のアドレス間隔が前記記憶素子の数と互いに素である、又は、前記所定のアドレス間隔と前記演算処理命令に含まれる前記キャッシュアクセス要求との乗算結果が前記記憶素子の数と前記所定のアドレス間隔との最小公倍数よりも小さいことを特徴とする請求項１に記載の演算処理装置。
【請求項３】
前記キャッシュメモリは、前記演算処理命令に含まれる全てのキャッシュアクセス要求の数の前記記憶素子をグループとし、各前記グループ上で各ウェイに割り当てられたアドレスが連番となるように割り当てられることを特徴とする請求項１又は２に記載の演算処理装置。
【請求項４】
前記キャッシュメモリは、前記グループ毎に各前記ウェイのアドレス同士が連番となることを特徴とする請求項３に記載の演算処理装置。
【請求項５】
ウェイ毎に複数の記憶素子をそれぞれ有し、各ウェイに属する複数の前記記憶素子に対して連続するアドレスが割り当てられたキャッシュメモリを備えた演算処理装置の制御方法であって、
同じ前記ウェイに含まれる所定のアドレス間隔のデータに対する処理をそれぞれ指示する複数のキャッシュアクセス要求を含む演算処理命令を取得し、
取得した各前記キャッシュアクセス要求で指定された前記ウェイに含まれる前記所定のアドレス間隔のデータに対する複数のアクセス処理を実行し、
前記アクセス処理の処理結果を基に演算処理を行う
ことを特徴とする演算処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置及び演算処理装置の制御方法に関する。
【背景技術】
【０００２】
近年、演算性能向上のために、演算処理装置は、ＳＩＭＤ（Single  Instruction  Multiple  Data）と呼ばれる処理を行うことがある。ＳＩＭＤは、複数のデータに対する演算を１つの命令でまとめて処理する手法である。また、ＳＩＭＤを用いた演算処理の性能向上のために、ロード・ストア処理も、ＳＩＭＤに応じた拡張がなされることが好ましい。
【０００３】
また、ＳＩＭＤを用いたロード・ストア処理では、演算器とキャッシュとの間の高スループットが性能向上の鍵となる。ＳＩＭＤを用いたロード・ストア処理では、１つのロード・ストア命令に対して１サイクルでＳＩＭＤデータ幅分のデータが演算器とキャッシュとの間で転送されることが好ましい。
【０００４】
例えば、４ウェイセットアソシエイティブ方式のキャッシュ構成で、ＳＩＭＤデータ幅が３２Ｂｙｔｅのロード・ストア処理を実現するには次のような構成を有すればよい。
【０００５】
この場合、キャッシュは、４つのウェイから成り、ウェイ毎に４個のＲＡＭ（Random  Access  Memory）を有する。そして、各ＲＡＭは、例えば、読み出し幅８Ｂｙｔｅの１  ｒｅａｄ  ｏｒ  １  ｗｅｉｔｅ  ＲＡＭである。これにより、１ウェイあたりの１回の読み出し幅は８Ｂｙｔｅ×４＝３２Ｂｙｔｅとなる。よって、このキャッシュＲＡＭを用いれば、８Ｂｙｔｅ×４＝３２ＢｙｔｅのＳＩＭＤデータ幅を１サイクルで読み出すことができる。すなわち、このキャッシュＲＡＭであればＳＩＭＤデータ幅が３２Ｂｙｔｅのロード・ストア処理を実現できる。
【０００６】
また、行列積演算などを実行する場合、特定のアドレス間隔でメモリ上にデータが配置されることが考えられる。このような、特定のアドレス間隔でメモリ上に配置されたデータの間隔をストライドと呼び、ストライドパターンで配置されたデータへのアクセスをストライドアクセスと呼ぶ場合がある。
【０００７】
このようなストライドアクセスを考慮して、更なる演算性能向上の技術として、ストライドパターンの複数のデータに対して、１つの命令でＳＩＭＤ演算を行う技術があり、それに伴うロード・ストア処理を、ストライドロード・ストライドストア処理と呼ぶ場合がある。
【０００８】
このストライドロード・ストライドストア処理を実行する場合にも、演算器とキャッシュとの間の高スループットは性能向上のために重要であり、ストライドパターンのデータを１サイクルで転送することが好ましい。
【０００９】
例えば、ストライドアクセスの技術として、メモリのインタリーブ構成をストライドの間隔に合わせることで複数のデータを同時にアクセスする従来技術がある。また、ストライドの間隔に合わせて、メモリのアクセス単位を変更して、スループットを向上させる従来技術がある。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】特開２０００−１６３３１６号公報
【特許文献２】特開２００８−２５０９２６号公報
【発明の概要】
【発明が解決しようとする課題】
【００１１】
しかしながら、従来のキャッシュ構成のように各ウェイに独立してＲＡＭが割り当てられた構成のままストライドアクセスを行うと、１サイクルで全要素のデータにアクセスすることが困難である。
【００１２】
例えば、前述のように１ウェイに読み出し幅８Ｂｙｔｅの１  ｒｅａｄ  ｏｒ  １  ｗｅｉｔｅ  ＲＡＭが４つ割り当てられた構成で、先頭アドレスである０ｘ０から８ＢｙｔｅデータをＳＩＭＤデータ幅が３２Ｂｙｔｅで且つストライド間隔が２でロードする場合で説明する。ここでは、ＳＩＭＤの４つのキャッシュアクセスリクエストを、要素０〜３とする。
【００１３】
この構成では３２Ｂｙｔｅ毎に同じＲＡＭに戻ってくるので、要素２のデータは、０ｘ０から３２Ｂｙｔｅ後のアドレスから始まる場所に格納されるので、要素０のデータと要素２のデータとは同じＲＡＭ上に存在する。また、同様の理由で、要素１のデータと要素３のデータとは同じＲＡＭ上に存在する。
【００１４】
このように、従来からのウェイの配置では、１サイクルで全要素のデータにアクセスすることが困難であり、スループットが低下してしまうおそれがある。
【００１５】
また、メモリのインタリーブ構成をストライドの間隔に合わせる従来技術を用いても、ストライドアクセスにおいて同じＲＡＭへのアクセスが発生してしまい、１サイクルで全要素のデータにアクセスすることが困難である。また、ストライド間隔に応じてメモリのアクセス単位を変える従来技術を用いても、１ウェイに対するＲＡＭの構成は変わらず、ストライドアクセスにおいて同じＲＡＭへのアクセスが発生してしまい、１サイクルで全要素のデータにアクセスすることが困難である。すなわち、いずれの従来技術を用いても、スループットが低下してしまうおそれがある。
【００１６】
開示の技術は、上記に鑑みてなされたものであって、スループットを向上させた演算処理装置及び演算処理装置の制御方法を提供することを目的とする。
【課題を解決するための手段】
【００１７】
本願の開示する演算処理装置及び演算処理装置の制御方法は、一つの態様において、キャッシュメモリは、ウェイ毎に複数の記憶素子をそれぞれ有し、各ウェイに属する複数の前記記憶素子に対して連続するアドレスが割り当てられる。命令制御部は、同じウェイに含まれる所定のアドレス間隔のデータに対する処理をそれぞれ指示する複数のキャッシュアクセス要求を含む演算処理命令を取得し、取得した複数の前記キャッシュアクセス要求を送信する。キャッシュ制御部は、前記命令制御部から送信された複数の前記キャッシュアクセス要求をそれぞれ受信し、各前記キャッシュアクセス要求で指定された前記ウェイに含まれる前記所定のアドレス間隔のデータに対する複数のアクセス処理を実行する。演算制御部は、前記キャッシュ制御部による前記アクセス処理の処理結果を基に演算処理を行う。
【発明の効果】
【００１８】
本願の開示する演算処理装置及び演算処理装置の制御方法の一つの態様によれば、所定のアドレス間隔のデータに対するデータの読み出しであってもスループットを維持することができるという効果を奏する。
【図面の簡単な説明】
【００１９】
【図１】図１は、演算処理装置のブロック図である。
【図２】図２は、キャッシュ制御部の概略構成図である。
【図３】図３は、実施例におけるキャッシュＲＡＭへのアドレスの割り当てを示す図である。
【図４】図４は、アドレスの干渉が発生しないことを説明するための図である。
【図５】図５は、ＲＡＭアドレス生成回路の読み出し機能のブロック図である。
【図６】図６は、要素毎の加算器による加算量を示す図である。
【図７】図７は、読み出しに対応するセレクタの詳細を表す回路図である。
【図８】図８は、ＲＡＭ＃０読出用選択条件回路の回路図である。
【図９】図９は、ウェイとアドレスによる読み出し時のＲＡＭ選択真理値表を示す図である。
【図１０】図１０は、読み出し時にＲＡＭ＃０が選択される条件を表す図である。
【図１１】図１１は、ＲＡＭアドレス生成回路の書き込み機能のブロック図である。
【図１２】図１２は、ウェイとアドレスによる書き込み時のＲＡＭ選択真理値表を示す図である。
【図１３】図１３は、書き込みに対応するセレクタの詳細を表す回路図である。
【図１４】図１４は、ＲＡＭ＃０書込用選択条件回路の回路図である。
【図１５】図１５は、書き込み時にＲＡＭ＃０が選択される条件を表す図である。
【図１６】図１６は、実施例に係る演算処理装置によるロード・ストア処理のフローチャートである。
【発明を実施するための形態】
【００２０】
以下に、本願の開示する演算処理装置及び演算処理装置の制御方法の実施例を図面に基づいて詳細に説明する。なお、以下の実施例により本願の開示する演算処理装置及び演算処理装置の制御方法が限定されるものではない。
【実施例】
【００２１】
図１は、演算処理装置のブロック図である。本実施例では、演算処理装置としてＣＰＵ（Central  Processing  Unit）を例に説明する。
【００２２】
ＣＰＵ１は、命令制御部１１、演算制御部１２、キャッシュ制御部１３、二次キャッシュ制御部１４及びメモリ制御部１５を有する。そして、メモリ制御部１５は、メモリ２と接続する。
【００２３】
命令制御部１１は、アプリケーションなどから命令を取得する。そして、命令制御部１１は、取得した命令にキャッシュアクセスリクエストが含まれているか否かを判定する。キャッシュアクセスリクエストとは、例えば、メモリからキャッシュを介して演算器へのデータ読み込みや演算器からキャッシュを介してのメモリへのデータ書き込みを要求するロード・ストアリクエストなどである。
【００２４】
本実施例に係るキャッシュアクセスリクエストは、メモリ上で非連続な複数のデータをアクセスするストライドアクセスを行うリクエストである。
【００２５】
命令制御部１１は、命令に含まれるキャッシュアクセスリクエストをキャッシュ制御部１３へ送信する。以下では、キャッシュアクセスリクエストを、単に「リクエスト」と呼ぶ。
【００２６】
また、命令制御部１１は、命令に含まれる演算処理の実行要求などを演算制御部１２へ送出する。
【００２７】
キャッシュ制御部１３は、一次キャッシュを有する。そして、キャッシュ制御部１３は、ストライドアクセスを示すリクエストを命令制御部１１から受信する。
【００２８】
受信した各リクエストがロード処理のリクエストの場合、キャッシュ制御部１３は、一次キャッシュにおいてキャッシュヒットするか否かを判定する。キャッシュヒットしない場合、キャッシュ制御部１３は、データ転送要求を二次キャッシュ制御部１４へ通知する。その後、キャッシュ制御部１３は、データ転送要求に対する応答データを二次キャッシュ制御部１４から受信する。そして、キャッシュ制御部１３は、応答データを一次キャッシュへ書き込む。その後、キャッシュ制御部１３は、一次キャッシュにおいてキャッシュヒットするか否かを判定する。キャッシュヒットした場合、キャッシュ制御部１３は、ヒットしたデータを一次キャッシュから取得し演算制御部１２へ送信する。
【００２９】
受信した各リクエストがストア処理のリクエストの場合、キャッシュ制御部１３は、一次キャッシュ上の格納先のデータを更新する。
【００３０】
ここで、図２を参照して、キャッシュ制御部１３について詳細に説明する。図２は、キャッシュ制御部の概略構成図である。キャッシュ制御部１１は、タグ判定部１３１、ＲＡＭアドレス生成回路１３２、キャッシュＲＡＭ１３３、ヒット判定部１３４及びメモリアクセス制御部１３５を有する。本実施例では、ストライドの幅は、１〜７まで用いられるものとし、特にストライド幅が４の場合を例に説明する。また、本実施例では、１つの命令に要素がＥ１〜Ｅ４の４つ含まれる場合で説明する。以下では、１つの命令に含まれるリクエストの数を「要素数」という。すなわち、本実施例では、要素数が４である。また、本実施例では、キャッシュＲＡＭ１３３は、４つのウェイを有する場合で説明する。
【００３１】
ここで、本実施例では、一次キャッシュであるキャッシュＲＡＭ１３３に、ＲＡＭ＃０〜＃１５の１６個の １  ｒｅａｄ  ｏｒ  １  ｗｅｉｔｅ  ＲＡＭが搭載される。ここで、ＲＡＭ＃０〜＃１５を構成する１つのＲＡＭからのデータの読み出し幅を８Ｂｙｔｅとする。すなわち、ストライド幅が４であるので、１つの命令により１回に読み出し可能なデータ量、すなわち１ウェイあたりの１回の読み出し幅は３２Ｂｙｔｅである。以下では、ＲＡＭ＃０〜＃１５を区別しない場合、単に「ＲＡＭ」という。このＲＡＭが、「記憶素子」の一例にあたる。
【００３２】
ここで、キャッシュＲＡＭ１３３に含まれるＲＡＭの数は、使用されるストライド幅に対して次の２つの条件のいずれかを満たすように設定される。第１の条件は、ストライド幅とＲＡＭの数が素であるという条件である。第２の条件は、ストライド幅に要素数を乗算した値がＲＡＭの数とストライド幅の最小公倍数を越えないという条件である。本実施例では、使用するストライド幅は、１〜７までである。この場合、ストライド幅が１〜４及び６の場合、第２の条件を満たす。また、ストライド幅が５又は７の場合、第１の条件を満たす。
【００３３】
キャッシュＲＡＭ１３３には、図３に示すように、アドレスが割り当てられる。図３は、実施例におけるキャッシュＲＡＭへのアドレスの割り当てを示す図である。具体的には、本実施例では、１ウェイにおける連続する１２８Ｂｙｔｅ分のアドレスが、ＲＡＭ＃０〜＃１５の内の同じＲＡＭにあたらないように、アドレスが割り当てられる。そして、図３におけるｗ０，ｗ１，ｗ２，ｗ３はそれぞれ、ウェイを表す。
【００３４】
さらに、ストライド幅の数のメモリを１つのメモリグループとして、そのメモリグループの各ＲＡＭにおいて、各ウェイｗ０〜ｗ３同士のアドレスが連続するように割り当てられる。
【００３５】
ここで、図３では、ウェイ毎の１２８Ｂｙｔｅ分のアドレスの割り当て方について記載したが、実際には、図３で示す割り当て方で、ＲＡＭ＃０〜＃１５の記憶領域全てにアドレスの割り当てが繰り返されていく。
【００３６】
例えば、ウェイｗ０における００〜０７までの８ビットのアドレスがＲＡＭ＃０に割り当てられる。また、ウェイｗ０における０８〜０Ｆまでの８ビットのアドレスがＲＡＭ＃１に割り当てられる。また、ウェイｗ０における１０〜１７までの８ビットのアドレスがＲＡＭ＃２に割り当てられる。また、ウェイｗ０における１８〜１Ｆまでの８ビットのアドレスがＲＡＭ＃３に割り当てられる。また、ウェイｗ０における２０〜２７までの８ビットのアドレスがＲＡＭ＃４に割り当てられる。また、ウェイｗ０における２８〜２Ｆまでの８ビットのアドレスがＲＡＭ＃５に割り当てられる。また、ウェイｗ０における３０〜３７までの８ビットのアドレスがＲＡＭ＃６に割り当てられる。また、ウェイｗ０における３８〜３Ｆまでの８ビットのアドレスがＲＡＭ＃７に割り当てられる。このようなアドレスの割り当てがＲＡＭ＃１５まで繰り返される。
【００３７】
また、例えば、ＲＡＭ＃０には、ウェイｗ０における００〜０７までの８ビットのアドレス、ウェイｗ１における２０〜２７までの８ビットのアドレスが割り当てられる。さらに、ＲＡＭ＃０には、ウェイｗ２における４０〜４７までの８ビットのアドレス、ウェイｗ３における６０〜６７までの８ビットのアドレスが割り当てられる。
【００３８】
図２に戻って説明を続ける。命令制御部１１から出力されるリクエスト２００には、アドレス、ＳＩＭＤ及びストライドが含まれる。ここで、アドレスは、ロード・ストア処理の対象とするアドレスを示す情報である。要素番号は、何番目のリクエストかを示す情報である。ストライドは、ストライドの間隔を示す情報である。さらに、アドレスは、上位２ビットでウェイを表す。
【００３９】
タグ判定部１３１は、リクエスト２００のアドレスの情報を取得する。そして、タグ判定部１３１は、取得したアドレスに対応するキャッシュＲＡＭ１３３内のキャッシュセットでキャッシュタグがヒットするか否かを判定する。キャッシュタグがヒットしない場合、タグ判定部１３１は、キャッシュミスと判定する。これに対して、キャッシュタグがヒットした場合、タグ判定部１３１は、ヒットしたウェイの情報をＲＡＭアドレス生成回路１３２へ出力する。
【００４０】
ＲＡＭアドレス生成回路１３２は、リクエスト２００からアドレス、要素番号及びストライドを取得する。さらに、ＲＡＭアドレス生成回路１３２は、ウェイの情報の入力をタグ判定部１３１から受ける。
【００４１】
ＲＡＭアドレス生成回路１３２は、アドレス、要素番号、ストライド及びウェイの情報からストライドアクセスの各アドレスを取得する。この場合、ＲＡＭアドレス生成回路１３２は、要素Ｅ１の処理が対象とするアドレスを、リクエスト２００に格納されていたアドレスとする。また、ＲＡＭアドレス生成回路１３２は、要素Ｅ２の処理が対象とするアドレスを、ストライドに８Ｂｙｔｅを乗算した値をリクエスト２００に格納されていたアドレスに加えたアドレスとする。また、ＲＡＭアドレス生成回路１３２は、要素Ｅ３の処理が対象とするアドレスを、ストライドに８Ｂｙｔｅを乗算した値に２を乗算した値をリクエスト２００に格納されていたアドレスに加えたアドレスとする。
【００４２】
ここで、キャッシュＲＡＭ１３３は、ＲＡＭ＃０〜＃１５という１６個のＲＡＭを有しする。そして、ストライド幅とＲＡＭの数が素である場合には、１回の処理で同じＲＡＭに複数回アクセスすることはない。また、ストライド幅に要素数を乗算した値がＲＡＭの数とストライド幅の最小公倍数を越えない場合は、１回の処理で同じＲＡＭに複数回アクセスすることはない。以下では、１回の処理で同じＲＡＭに複数回のアクセスが発生することを「アドレスの干渉」という。
【００４３】
図４は、アドレスの干渉が発生しないことを説明するための図である。図４のグラフ２０１〜２０４は、それぞれ、ストライド幅を変えた場合の処理に用いるアドレスの位置を示す。円を１６分割した各位置でＲＡＭ＃０〜＃１５を表す。さらに、ＲＡＭ＃０〜１５を示す位置に記載された数字がそれぞれ要素Ｅ１〜Ｅ４で用いられるアドレスが、対応するＲＡＭ上に存在することを示す。また、ここでは、要素Ｅ１のアドレスは、ＲＡＭ＃０上に存在する場合で示す。
【００４４】
図４に示すように、グラフ２０１〜２０７に示すように、ストライド幅が１〜７のいずれの場合でも、要素Ｅ１〜Ｅ４に対応するアドレスが干渉しないことが分かる。すなわち、本実施例に係るキャッシュＲＡＭ１３３が生成した各要素Ｅ１〜Ｅ４に対応するアドレスは、干渉しないことが分かる。
【００４５】
さらに、図２に戻って説明を続ける。ＲＡＭアドレス生成回路１３２は、リクエストの上位から数えて５ビット目及び６ビット目の値を取得する。そして、ＲＡＭアドレス生成回路１３２は、取得した値とウェイの番号からそのアドレスを有するＲＡＭをＲＡＭ＃０〜＃１５から特定する。
【００４６】
例えば、ＲＡＭ＃０には、以下のアドレスが割り当てられる。以下では、リクエストの上位から数えてｘビットからｙビットの範囲を［ｙ：ｘ］で示す。また、ある範囲の各ビットの値を鉤括弧内の数列として「００１」のように表す。ＲＡＭ＃０には、要素ｎ（ｎ＝Ｅ１，Ｅ２，Ｅ３，Ｅ４）のアドレスの［６：３］が「００００」であり、且つウェイｗ０のアドレスが割り当てられる。また、ＲＡＭ＃０には、要素ｎのアドレスの［６：３］が「０１００」であり、且つウェイｗ１のアドレスが割り当てられる。また、ＲＡＭ＃０には、要素ｎのアドレスの［６：３］が「１０００」であり、且つウェイｗ２のアドレスが割り当てられる。また、ＲＡＭ＃０には、要素ｎのアドレスの［６：３］が「１１００」であり、且つウェイｗ３のアドレスが割り当てられる。そして、要素ｎのアドレスの［６：３］の値は１６通りの組み合わせがあり、且つウェイ毎に要素ｎのアドレスの［６：３］の値が各ＲＡＭ＃０〜＃１５のそれぞれに対して重ならないように割り当てられる。
【００４７】
したがって、ＲＡＭアドレス生成回路１３２は、要素ｎのアドレスの［６：３］の値とウェイの番号から使用するＲＡＭを特定することができる。
【００４８】
ここで、図５を参照して、ＲＡＭアドレス生成回路１３２による読み出し時のアドレス生成について詳細に説明する。図５は、ＲＡＭアドレス生成回路の読み出し機能のブロック図である。
【００４９】
ＲＡＭアドレス生成回路１３２は、加算器３０１〜３０３及びセレクタ３１１〜３１４を有する。ただし、図５では、セレクタを４つしか記載していないが実際には、ＲＡＭアドレス生成回路１３２は、ＲＡＭ＃０〜＃１５の数分のセレクタを有する。
【００５０】
加算器３０１〜３０３は、要素Ｅ１のリクエストの［１３：３］にあたるアドレスの入力を受ける。さらに、加算器３０１〜３０３は、要素Ｅ１のリクエストの［２：０］にあたるストライド幅の入力を受ける。ここで、ストライド幅は、要素ｗ１のリクエストの［２：０］の３ビットを用いて１〜７のいずれであるかが示される。
【００５１】
加算器３０１は、入力されたストライド幅に８を乗算した値を要素Ｅ１のリクエストの［１３：３］に加算する。この加算結果が、要素Ｅ２の［１３：３］で表されるアドレスにあたる。そして、加算器３０１は、加算結果をセレクタ３１１〜３１４へ出力する。
【００５２】
加算器３０２は、入力されたストライド幅に１６を乗算した値を要素Ｅ１のリクエストの［１３：３］に加算する。この加算結果が、要素Ｅ３の［１３：３］で表されるアドレスにあたる。そして、加算器３０２は、加算結果をセレクタ３１１〜３１４へ出力する。
【００５３】
加算器３０３は、入力されたストライド幅に３２を乗算した値を要素Ｅ１のリクエストの［１３：３］に加算する。この加算結果が、要素Ｅ４の［１３：３］で表されるアドレスにあたる。そして、加算器３０３は、加算結果をセレクタ３１１〜３１４へ出力する。
【００５４】
具体的には、加算器３０１〜３０３は、ストライド幅に合わせて、図６に示す値を各要素に加算する。図６は、要素毎の加算器による加算量を示す図である。
【００５５】
セレクタ３１１は、ＲＡＭ＃０の選択を決定するセレクタである。セレクタ３１２は、ＲＡＭ＃１の選択を決定するセレクタである。セレクタ３１３は、ＲＡＭ＃２の選択を決定するセレクタである。セレクタ３１４は、ＲＡＭ＃１５の選択を決定するセレクタである。
【００５６】
セレクタ３１１〜３１４は、要素Ｅ１のリクエストの［１３：３］にあたるアドレスの入力を受ける。また、セレクタ３１１〜３１４は、要素Ｅ２〜Ｅ４のアドレスの入力を加算器３０１〜３０３から受ける。
【００５７】
ここで、セレクタ３１１を例にセレクタの動作を説明する。図７は、読み出しに対応するセレクタの詳細を表す回路図である。セレクタ３１１は、ＲＡＭ＃０読出用選択条件回路３２１〜３２４、ＡＮＤ回路３３１〜３３４及びＯＲ回路３４０を有する。
【００５８】
ＲＡＭ＃０読出用選択条件回路３２１〜３２４は、それぞれ、要素Ｅ１〜Ｅ４の［１３：３］にあたるアドレスの入力を受ける。また、ＲＡＭ＃０読出用選択条件回路３２１〜３２４は、ウェイＩＤの入力を受ける。
【００５９】
ＲＡＭ＃０読出用選択条件回路３２１〜３２４は、図８に示す回路構成を有する。すなわち、ＲＡＭ＃０読出用選択条件回路３２１〜３２４は、ＡＮＤ回路３５１〜３５４及びＯＲ回路３５５を有する。図８は、ＲＡＭ＃０読出用選択条件回路の回路図である。
【００６０】
ＡＮＤ回路３５１は、入力されたアドレス内の［６：３］の各ビットの値を反転した値の入力を受ける。さらに、ＡＮＤ回路３５１は、ウェイＩＤを表す［１：０］の各ビットを反転させた値の入力を受ける。そして、ＡＮＤ回路３５１は、入力値の論理積を求め、結果をＯＲ回路３５５へ出力する。
【００６１】
ＡＮＤ回路３５２は、入力されたアドレス内の［６：３］の各ビットのうち３番目及び４番目のビットを反転した値の入力を受ける。さらに、ＡＮＤ回路３５２は、ウェイＩＤを表す［１：０］の各ビットの１番目のビットを反転させた値の入力を受ける。そして、ＡＮＤ回路３５２は、入力値の論理積を求め、結果をＯＲ回路３５５へ出力する。
【００６２】
ＡＮＤ回路３５３は、入力されたアドレス内の［６：３］の各ビットのうち３番目、４番目及び５番目のビットを反転した値の入力を受ける。さらに、ＡＮＤ回路３５３は、ウェイＩＤを表す［１：０］の０番目のビットを反転させた値の入力を受ける。そして、ＡＮＤ回路３５３は、入力値の論理積を求め、結果をＯＲ回路３５５へ出力する。
【００６３】
ＡＮＤ回路３５４は、入力されたアドレス内の［６：３］の各ビットのうち３番目、４番目及び６番目のビットを反転した値の入力を受ける。さらに、ＡＮＤ回路３５４は、ウェイＩＤを表す［１：０］の各ビットの値の入力を受ける。そして、ＡＮＤ回路３５４は、入力値の論理積を求め、結果をＯＲ回路３５５へ出力する。
【００６４】
ＯＲ回路３５５は、ＡＮＤ回路３５１〜３５４から入力された値の論理和を求め、結果を出力する。
【００６５】
ここで、ウェイＩＤを表す［１：０］及びアドレス内の［６：３］の各ビットの組み合わせに対して、図９に示す使用ＲＡＭのようにＲＡＭ＃０〜＃１５が対応する。図９は、ウェイとアドレスによる読み出し時のＲＡＭ選択真理値表を示す図である。すなわち、ＲＡＭ＃０読出用選択条件回路３２１〜３２４は、この読み出し時のＲＡＭ選択真理値表の中でＲＡＭ＃０に対応するウェイＩＤ及びアドレスの組み合わせが入力された場合に、１を出力する。これは、他のＲＡＭ＃１〜＃１５についても同様である。
【００６６】
例えば、ＲＡＭ＃０の選択について説明する。読み出し時にＲＡＭ＃０が選択される場合を図９から抜き出すと、図１０が完成する。図１０は、読み出し時にＲＡＭ＃０が選択される条件を表す図である。ここで、図１０に示された各場合についてＡＮＤ回路３５３〜３５４の動作を確認する。ウェイＩＤを表す［１：０］が「００」でアドレス内の［６：３］が「００００」の場合、ＡＮＤ回路３５１は１を出力する。また、ウェイＩＤを表す［１：０］が「０１」でアドレス内の［６：３］が「１１００」の場合、ＡＮＤ回路３５２から１が出力される。ウェイＩＤを表す［１：０］が「１０」でアドレス内の［６：３］が「１０００」の場合、ＡＮＤ回路３５３から１が出力される。ウェイＩＤを表す［１：０］が「１１」でアドレス内の［６：３］が「０１００」の場合、ＡＮＤ回路３５４から１が出力される。すなわち、図１０のいずれかの組み合わせの入力がＲＡＭ＃０読出用選択条件回路３２１〜３２４になされれば、入力を受けたＲＡＭ＃０読出用選択条件回路３２１〜３２４は、１を出力する。すなわち、ＲＡＭ＃０の選択条件を満たす場合、ＲＡＭ＃０読出用選択条件回路３２１〜３２４は１を出力し、ＲＡＭ＃０の選択条件を満たさない場合、ＲＡＭ＃０読出用選択条件回路３２１〜３２４は０を出力する。
【００６７】
図７に戻って説明を続ける。ＡＮＤ回路３３１〜３３４は、ＲＡＭ＃０読出用選択条件回路３２１〜３２４からの出力を受ける。またＡＮＤ回路３３１〜３３４は、それぞれ、要素Ｅ１〜Ｅ４の［１３：５］で表されるアドレスの入力を受ける。そして、ＡＮＤ回路３３１〜３４４は、それぞれ、入力値の論理積を求めて、ＯＲ回路３４０へ出力する。具体的には、ＡＮＤ回路３３１〜３４４のうち、ＲＡＭ＃０読出用選択条件回路３２１〜３２４から１の入力を受けた回路が受信したアドレスを出力し、０の入力を受けた回路はすべて０の値を出力する。
【００６８】
ＯＲ回路３４０は、ＡＮＤ回路３３１〜３３４から入力された値の論理和を求め、結果を出力する。すなわち、ＲＡＭ＃０読出用選択条件回路３２１〜３２４のいずれかから１が出力された場合、ＯＲ回路３４０は、それに対応する要素Ｅ１〜Ｅ４のいずれかの要素をＲＡＭ＃０の読出アドレスとして出力する。
【００６９】
図５に戻って説明を続ける。セレクタ３１１は、ＯＲ回路３４０からの出力であるアドレスをヒット判定部１３４へ出力する。同様に、セレクタ３１２は、ウェイＩＤを表す［１：０］及びアドレス内の［６：３］の各ビットの組み合わせがＲＡＭ＃１の選択条件に一致した場合、ヒット判定部１３４へアドレスを出力する。セレクタ３１３は、ウェイＩＤを表す［１：０］及びアドレス内の［６：３］の各ビットの組み合わせがＲＡＭ＃２の選択条件に一致した場合、ヒット判定部１３４へアドレスを出力する。セレクタ３１４は、ウェイＩＤを表す［１：０］及びアドレス内の［６：３］の各ビットの組み合わせがＲＡＭ＃１５の選択条件に一致した場合、ヒット判定部１３４へアドレスを出力する。
【００７０】
ヒット判定部１３４は、各セレクタ３１１〜３１４から入力されたアドレスを用いて、対応するＲＡＭ＃０〜＃１５におけるキャッシュヒットの判定を行う。
【００７１】
次に、図１１を参照して、ＲＡＭアドレス生成回路１３２による書き込み時のアドレス生成について詳細に説明する。図１１は、ＲＡＭアドレス生成回路の書き込み機能のブロック図である。
【００７２】
ＲＡＭアドレス生成回路１３２は、書き込み時用のセレクタ３６１〜３６４を有する。セレクタ３６１〜３６４は、それぞれ、ＲＡＭ＃０〜＃１５に対応する。
【００７３】
セレクタ３６１〜３６４は、リクエストの［１３：５］にあたるアドレスの入力を受ける。また、セレクタ３６１〜３６４は、リクエストの［１：０］にあたるウェイＩＤの入力を受ける。
【００７４】
ウェイＩＤを表す［１：０］及びアドレス内の［６：５］の各ビットの組み合わせは、図１２の使用ＲＡＭとして表されるＲＡＭ＃０〜＃１５に対応する。図１２は、ウェイとアドレスによる書き込み時のＲＡＭ選択真理値表を示す図である。
【００７５】
セレクタ３６１〜３６４は、ウェイＩＤを表す［１：０］及びアドレス内の［６：５］の各ビットの組み合わせに応じて、図１２の対応する使用ＲＡＭを書き込みに使用するＲＡＭとして選択する。そして、セレクタ３６１〜３６４は、選択したＲＡＭのアドレスをヒット判定部１３４へ出力する。
【００７６】
ここで、図１３を参照して、セレクタ３６１を例にセレクタ３６１〜３６４について詳細に説明する。図１３は、書き込みに対応するセレクタの詳細を表す回路図である。セレクタ３６１は、ＲＡＭ＃０書込用選択条件回路３７１及びＡＮＤ回路３７２を有する。
【００７７】
例えば、要素Ｅ１を処理する場合、ＲＡＭ＃０書込用選択条件回路３７１は、要素Ｅ１の［１３：５］で表されるアドレス内の［６：５］に対応するビットの入力を受ける。また、ＲＡＭ＃０書込用選択条件回路３７１は、ウェイＩＤを表す［１：０］の入力を受ける。
【００７８】
そして、ＲＡＭ＃０書込用選択条件回路３７１は、ウェイＩＤを表す［１：０］及びアドレス内の［６：５］の組み合わせに対応する図１２における使用ＲＡＭがＲＡＭ＃０に一致する場合、ＲＡＭ＃０の選択を表す１をＡＮＤ回路３７２へ出力する。これに対して、ウェイＩＤを表す［１：０］及びアドレス内の［６：５］の組み合わせに対応する図１２における使用ＲＡＭがＲＡＭ＃０に一致しない場合、ＲＡＭ＃０書込用選択条件回路３７１は、０をＡＮＤ回路３７２へ出力する。
【００７９】
さらに、具体的にＲＡＭ＃０書込用選択条件回路３７１の構成を説明する。図１４は、ＲＡＭ＃０書込用選択条件回路の回路図である。ＲＡＭ＃０書込用選択条件回路３７１は、ＡＮＤ回路３８１〜３８４及びＯＲ回路３８５を有する。
【００８０】
ＡＮＤ回路３８１は、アドレス内の［６：５］の各ビットを反転させた値の入力を受ける。また、ＡＮＤ回路３８１は、ウェイＩＤを表す［１：０］の各ビットを反転させた値の入力を受ける。そして、ＡＮＤ回路３８１は、入力された値の論理積を求め、結果をＯＲ回路３８５へ出力する。
【００８１】
ＡＮＤ回路３８２は、入力されたアドレス内の［６：５］の各ビットの値の入力を受ける。さらに、ＡＮＤ回路３８２は、ウェイＩＤを表す［１：０］の各ビットの１番目のビットを反転させた値の入力を受ける。そして、ＡＮＤ回路３８２は、入力値の論理積を求め、結果をＯＲ回路３８５へ出力する。
【００８２】
ＡＮＤ回路３８３は、入力されたアドレス内の［６：５］の各ビットのうち５番目のビットを反転した値の入力を受ける。さらに、ＡＮＤ回路３８３は、ウェイＩＤを表す［１：０］の０番目のビットを反転させた値の入力を受ける。そして、ＡＮＤ回路３８３は、入力値の論理積を求め、結果をＯＲ回路３８５へ出力する。
【００８３】
ＡＮＤ回路３８４は、入力されたアドレス内の［６：５］の各ビットのうち６番目のビットを反転した値の入力を受ける。さらに、ＡＮＤ回路３８４は、ウェイＩＤを表す［１：０］の各ビットの値の入力を受ける。そして、ＡＮＤ回路３８４は、入力値の論理積を求め、結果をＯＲ回路３８５へ出力する。
【００８４】
ＯＲ回路３８５は、ＡＮＤ回路３８１〜３８４から入力された値の論理和を求め、結果を出力する。
【００８５】
例えば、ＲＡＭ＃０の選択について説明する。書き込み時にＲＡＭ＃０が選択される場合を図１２から抜き出すと、図１５のようになる。図１５は、書き込み時にＲＡＭ＃０が選択される条件を表す図である。ここで、図１５に示された各場合についてＡＮＤ回路３８３〜３８４の動作を確認する。ウェイＩＤを表す［１：０］が「００」でアドレス内の［６：５］が「００」の場合、ＡＮＤ回路３８１は１を出力する。また、ウェイＩＤを表す［１：０］が「０１」でアドレス内の［６：５］が「１１」の場合、ＡＮＤ回路３８２から１が出力される。ウェイＩＤを表す［１：０］が「１０」でアドレス内の［６：５］が「１０」の場合、ＡＮＤ回路３８３から１が出力される。ウェイＩＤを表す［１：０］が「１１」でアドレス内の［６：５］が「０１」の場合、ＡＮＤ回路３８４から１が出力される。すなわち、図１５のいずれかの組み合わせの入力がＲＡＭ＃０書込用選択条件回路３７１になされれば、入力を受けたＲＡＭ＃０書込用選択条件回路３７１は、１を出力する。すなわち、ＲＡＭ＃０の選択条件を満たす場合、ＲＡＭ＃０書込用選択条件回路３７１は１を出力し、ＲＡＭ＃０の選択条件を満たさない場合、ＲＡＭ＃０書込用選択条件回路３７１は０を出力する。
【００８６】
図１３に戻って説明を続ける。ＡＮＤ回路３７２は、ＲＡＭ＃０書込用選択条件回路３７１からＲＡＭ＃０の選択結果を表す値の入力を受ける。また、ＡＮＤ回路３７２は、要素Ｅ１の［１３：５］で表されるアドレスの入力を受ける。
【００８７】
そして、ＲＡＭ＃０書込用選択条件回路３７１からの入力値が１の場合、ＡＮＤ回路３７２は、要素Ｅ１の［１３：５］で表されるアドレスを出力する。これに対して、ＲＡＭ＃０書込用選択条件回路３７１からの入力値が０の場合、ＡＮＤ回路３７２は、０を出力する。
【００８８】
図１１に戻って説明を続ける。セレクタ３６１は、ＡＮＤ回路３７２からの出力をヒット判定部１３４へ出力する。同様に、セレクタ３６２〜３６４は、書き込み先のＲＡＭとして対応するＲＡＭ＃１〜＃１５が選択された場合、アドレスをヒット判定部１３４へ出力する。
【００８９】
ヒット判定部１３４は各セレクタ３６１〜３６４から入力されたアドレスを用いて、対応するＲＡＭ＃０〜＃１５におけるキャッシュヒットの判定を行う。
【００９０】
さらに、図２に戻って説明を続ける。ヒット判定部１３４は、ＲＡＭアドレス生成回路１３２からロード・ストア処理を行う対象とするＲＡＭの情報及びアドレスの入力を受ける。そして、ヒット判定部１３４は、入力されたアドレスを用いて指定されたＲＡＭに対するキャッシュヒットの判定を行う。キャッシュヒットした場合、ヒット判定部１３４は、キャッシュヒットしたデータを取得し、演算制御部１２へ出力する。キャッシュミスが発生した場合、ヒット判定部１３４は、データ転送要求をメモリアクセス制御部１３５へ送信する。
【００９１】
メモリアクセス制御部１３５は、キャッシュミスが発生した場合、データの転送要求をヒット判定回路１３４から受ける。そして、メモリアクセス制御部１３５は、データの転送要求の送信元でヒット判定が行われたリクエストについてのデータ転送要求を二次キャッシュ制御部１４へ送信する。
【００９２】
その後、メモリアクセス制御部１３５は、二次キャッシュ制御部１４からデータ転送要求に対する応答データを受信する。そして、メモリアクセス制御部１３５は、受信した応答データをキャッシュＲＡＭ１３３に格納する。その後、メモリアクセス制御部１３５は、ヒット判定部１３４の内のデータ転送要求の送信元に対して応答データの格納を通知する。
【００９３】
図１に戻って説明を続ける。二次キャッシュ制御部１４は、二次キャッシュを有する。二次キャッシュ制御部１４は、データ転送要求をメモリアクセス制御部１３８から受信する。そして、二次キャッシュ制御部１４は、自己が有する二次キャッシュにデータ転送要求で指定されたデータが格納されているか否かを判定する。格納されている場合、二次キャッシュ制御部１４は、データ転送要求で指定されたデータを二次キャッシュから取得し、取得したデータを応答データとしてメモリアクセス制御部１３５へ送信する。
【００９４】
これに対して、データ転送要求で指定されたデータが二次キャッシュに格納されていない場合、二次キャッシュ制御部１４は、データ転送要求をメモリ制御部１５に送信する。その後、二次キャッシュ制御部１４は、応答データをメモリ制御部１５から受信する。そして、二次キャッシュ制御部１４は、受信した応答データをメモリアクセス制御部１３５へ送信する。
【００９５】
演算制御部１２は、演算処理の実行要求などを命令制御部１１から受信する。また、演算処理１２は、データをキャッシュ制御部１３から受信する。そして、演算制御部１２は、キャッシュ制御部１３から受信したデータを用いて演算処理などを実行する。ただし、実行する処理にキャッシュデータを用いない場合など、演算制御部１２は、キャッシュ制御部１３からのデータの受信を行わずに、処理を実行する場合もある。
【００９６】
次に、図１６を参照して、本実施例に係る演算処理装置によるロード・ストア処理の流れについて説明する。図１６は、実施例に係る演算処理装置によるロード・ストア処理のフローチャートである。
【００９７】
命令制御部１１は、命令からリクエストを取得し、取得したリクエストをキャッシュ制御部１３へ発行する（ステップＳ１）。
【００９８】
キャッシュ制御部１３のタグ判定部１３１は、取得したリクエストからタグを取得して、取得したタグがキャッシュＲＡＭ１３３においてヒットするか否かを判定する（ステップＳ２）。タグがヒットしない場合（ステップＳ２：否定）、キャッシュ制御部１３は、ステップＳ８へ進む。
【００９９】
これに対して、タグがヒットした場合（ステップＳ２：肯定）、ＲＡＭアドレス生成回路１３２は、読み出し処理か否かを判定する（ステップＳ３）。
【０１００】
読み出し処理の場合（ステップＳ３：肯定）、ＲＡＭアドレス生成回路１３２は、要素Ｅ１のアドレスから各要素Ｅ２〜Ｅ４のアドレスを生成する（ステップＳ４）。
【０１０１】
そして、ＲＡＭアドレス生成回路１３２は、各ウェイｗ０〜ｗ３の連続するアドレスが全てのメモリに亘って割り振られたキャッシュＲＡＭ１３３の各ＲＡＭ＃０〜１５から、ストライド幅に合わせて読み出し元となるＲＡＭを選択する（ステップＳ５）。
【０１０２】
これに対して、読み出し処理でなく書き込み処理の場合（ステップＳ３：否定）、ＲＡＭアドレス生成回路１３２は、次の処理を行う。すなわち、ＲＡＭアドレス生成回路１３２は、各ウェイｗ０〜ｗ３の連続するアドレスが全てのメモリに亘って割り振られたキャッシュＲＡＭ１３３の各ＲＡＭ＃０〜１５から、ストライド幅に合わせて書き込み先となるＲＡＭを選択する（ステップＳ６）。
【０１０３】
次に、ＲＡＭアドレス生成回路１３２は、選択したＲＡＭ及びそのＲＡＭ上のアドレスをヒット判定部１３４へ出力する。ヒット判定部１３４は、ＲＡＭアドレス生成回路１３２により選択されたＲＡＭ上の指定されたアドレスにおいてキャッシュヒットするか否かを判定する（ステップＳ７）。キャッシュミスの場合（ステップＳ７：否定）、メモリアクセス制御部１３５は、データ転送要求を二次キャッシュ制御部１４へ送信する。その後、二次キャッシュ制御部１４は、データ転送要求に対する応答データを、キャッシュＲＡＭ１３３へデータ転送する（ステップＳ８）。その後、キャッシュ制御部１３は、ステップＳ２に戻る。
【０１０４】
これに対して、キャッシュヒットの場合（ステップＳ７：肯定）、ヒット判定部１３４は、キャッシュヒットしたアドレスに対してロード・ストア処理を実行する（ステップＳ９）。
【０１０５】
以上に説明したように、本実施例に係る演算処理装置におけるキャッシュＲＡＭは、ストライド幅とＲＡＭの数とが互いに素又はストライド幅と要素数との乗算結果がＲＡＭの数とストライド幅との最小公倍数よりも小さくなる。さらに、ウェイ毎の連続するアドレスが全てのＲＡＭに亘って配置されるように割り当てられる。これにより、１つの命令でストライドアクセスを行った場合にも、同じメモリに対する複数回のアクセスを回避でき、スループットを向上させることができる。
【符号の説明】
【０１０６】
１  ＣＰＵ
２  メモリ
１１  命令制御部
１２  演算制御部
１３  キャッシュ制御部
１４  二次キャッシュ制御部
１５  メモリ制御部
１３１  タグ判定部
１３２  ＲＡＭアドレス生成回路
１３３  キャッシュＲＡＭ
１３４  ヒット判定部
１３５  メモリアクセス制御部
３０１〜３０２  加算器
３１１〜３１４  セレクタ
３２１〜３２４  ＲＡＭ＃０読出用選択条件回路
３３１〜３３４  ＡＮＤ回路
３４０  ＯＲ回路
３５１〜３５４  ＡＮＤ回路
３５５  ＯＲ回路
３６１〜３６４  セレクタ
３７１  ＲＡＭ＃０書込用選択条件回路
３７２  ＡＮＤ回路
３８１〜３８４  ＡＮＤ回路
３８５  ＯＲ回路
【図１】
2015210659.tif 000003
【図２】
2015210659.tif 000004
【図３】
2015210659.tif 000005
【図４】
2015210659.tif 000006
【図５】
2015210659.tif 000007
【図６】
2015210659.tif 000008
【図７】
2015210659.tif 000009
【図８】
2015210659.tif 000010
【図９】
2015210659.tif 000011
【図１０】
2015210659.tif 000012
【図１１】
2015210659.tif 000013
【図１２】
2015210659.tif 000014
【図１３】
2015210659.tif 000015
【図１４】
2015210659.tif 000016
【図１５】
2015210659.tif 000017
【図１６】
2015210659.tif 000018