(57)【特許請求の範囲】
【請求項１】
投機的に実行されるベクトルロード命令が発行された場合に、当該ベクトルロード命令に対応するベクトルデータを格納するためのバッファ領域を確保するバッファ領域確保部と、
前記ベクトルデータを構成する複数の要素データをそれぞれ読み出すように要求する要求信号に基づいて、前記要素データをキャッシュメモリからそれぞれ読み出し、当該要素データが前記キャッシュメモリに格納されていない場合には、当該要素データを主記憶装置から読み出すメモリ制御部と、
前記メモリ制御部により読み出された前記要素データを前記バッファ領域に格納するバッファ格納部と、
投機的な実行による実行結果を使用することが決定した場合には、前記バッファ領域に格納された前記要素データをベクトルレジスタに転送してから当該バッファ領域を解放する、一方、投機的な実行による実行結果を使用しないことが決定した場合には、前記バッファ領域に格納された前記要素データを前記ベクトルレジスタに転送せずに当該バッファ領域を解放する、ベクトル処理部と、を備え、
前記メモリ制御部は、投機的な実行による実行結果を使用しないことが決定した場合には、前記要求信号に基づいて、前記要素データを前記キャッシュメモリからそれぞれ読み出す、
ことを特徴とするベクトル演算処理装置。
【請求項２】
各前記要求信号には、投機的な実行の正否を示すフラグ情報がそれぞれ含まれ、
前記メモリ制御部は、前記要求信号に含まれる前記フラグ情報が投機的な実行が失敗したことを示す場合に、前記要求信号に基づいて、前記要素データを前記キャッシュメモリからそれぞれ読み出す、
ことを特徴とする請求項１記載のベクトル演算処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ベクトル演算処理装置、ベクトル演算処理方法およびベクトル演算処理プログラムに関する。
【背景技術】
【０００２】
下記特許文献１および特許文献２には、ベクトル演算を実行するベクトル演算処理装置に関する技術が開示されている。特許文献１に記載のベクトル演算処理装置は、非投機的にプリフェッチしたデータがアクセスされる前にキャッシュメモリから破棄されてしまうことを防止するために、アクセスの有無を確認するためのフラグを設け、フラグの内容に応じてキャッシュメモリからの破棄の可否を判断している。特許文献２に記載のベクトル演算処理装置は、主記憶装置から読み出してロードバッファに格納したベクトルデータを、ロードバッファからベクトル処理部に転送するタイミングを、ベクトルデータを構成する要素群ごとに決定している。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００９−９８９３４号公報
【特許文献２】特開２００９−２５２１３３号公報
【０００４】
上記特許文献１に記載のベクトル演算処理装置は、ベクトルデータがキャッシュメモリに存在しない場合には、主記憶装置からベクトルデータを読み出す。したがって、例えば投機的実行が失敗した場合であっても、その投機的実行にかかわるベクトルデータがキャッシュメモリに存在しなければ主記憶装置から読み出すことになる。この場合には、キャッシュメモリと主記憶装置との間に、本来必要としない負荷が発生してしまう。
【０００５】
上記特許文献２に記載のベクトル演算処理装置は、キャッシュメモリを備えていないため、全データを主記憶装置から読み出す。したがって、例えば投機的実行が失敗した場合であっても、その投機的実行にかかわるベクトルデータを主記憶装置から全て読み出した後に、ロードバッファのデータを破棄してロードバッファを解放することになる。この場合には、主記憶装置にアクセスするレイテンシ分、ロードバッファの解放が遅れてしまう。
【発明の概要】
【発明が解決しようとする課題】
【０００６】
本発明は、上述した課題を解決するためになされたものであり、キャッシュメモリと主記憶装置との間の負荷を軽減し、ロードバッファの解放タイミングを早めることができるベクトル演算処理装置、ベクトル演算処理方法およびベクトル演算処理プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００７】
本発明のベクトル演算処理装置は、投機的に実行されるベクトルロード命令が発行された場合に、当該ベクトルロード命令に対応するベクトルデータを格納するためのバッファ領域を確保するバッファ領域確保部と、前記ベクトルデータを構成する複数の要素データをそれぞれ読み出すように要求する要求信号に基づいて、前記要素データをキャッシュメモリからそれぞれ読み出し、当該要素データが前記キャッシュメモリに格納されていない場合には、当該要素データを主記憶装置から読み出すメモリ制御部と、前記メモリ制御部により読み出された前記要素データを前記バッファ領域に格納するバッファ格納部と、投機的な実行による実行結果を使用することが決定した場合には、前記バッファ領域に格納された前記要素データをベクトルレジスタに転送してから当該バッファ領域を解放する、一方、投機的な実行による実行結果を使用しないことが決定した場合には、前記バッファ領域に格納された前記要素データを前記ベクトルレジスタに転送せずに当該バッファ領域を解放する、ベクトル処理部と、を備え、前記メモリ制御部は、投機的な実行による実行結果を使用しないことが決定した場合には、前記要素データの前記主記憶装置からの読み出しを抑止する。
【０００８】
本発明のベクトル演算処理方法は、投機的に実行されるベクトルロード命令が発行された場合に、当該ベクトルロード命令に対応するベクトルデータを格納するためのバッファ領域を確保するバッファ領域確保ステップと、前記ベクトルデータを構成する複数の要素データをそれぞれ読み出すように要求する要求信号に基づいて、前記要素データをキャッシュメモリからそれぞれ読み出し、当該要素データが前記キャッシュメモリに格納されていない場合には、当該要素データを主記憶装置から読み出すメモリ制御ステップと、前記メモリ制御部により読み出された前記要素データを前記バッファ領域に格納するバッファ格納ステップと、投機的な実行による実行結果を使用することが決定した場合には、前記バッファ領域に格納された前記要素データをベクトルレジスタに転送してから当該バッファ領域を解放する、一方、投機的な実行による実行結果を使用しないことが決定した場合には、前記バッファ領域に格納された前記要素データを前記ベクトルレジスタに転送せずに当該バッファ領域を解放する、ベクトル演算処理ステップと、を含み、前記メモリ制御ステップは、投機的な実行による実行結果を使用しないことが決定した場合には、前記要素データの前記主記憶装置からの読み出しを抑止する。
【０００９】
本発明のベクトル演算処理プログラムは、上記ベクトル演算処理方法に含まれる各ステップをコンピュータに実行させる。
【発明の効果】
【００１０】
本発明によれば、キャッシュメモリと主記憶装置との間の負荷を軽減し、ロードバッファの解放タイミングを早めることができる。
【図面の簡単な説明】
【００１１】
【図１】実施形態におけるプロセッサの構成を例示するブロック図である。
【図２】実施形態におけるプロセッサの動作を説明するためのフローチャート（その１）である。
【図３】実施形態におけるプロセッサの動作を説明するためのフローチャート（その２）である。
【図４】実施形態におけるプロセッサの動作タイミングの一例を示すタイミングチャートである。
【発明を実施するための形態】
【００１２】
以下、添付図面を参照して、本発明に係るベクトル演算処理装置、ベクトル演算処理方法およびベクトル演算処理プログラムの好適な実施形態について説明する。
【００１３】
まず、図１を参照して、実施形態におけるベクトル演算処理装置の構成について説明する。本実施形態では、ベクトル演算処理装置の具体例として、ベクトル演算を処理可能なプロセッサを用いて説明する。
【００１４】
プロセッサ１は、機能的には、例えば、命令制御部２と、メモリ制御部３と、キャッシュ処理部４と、ベクトル制御部５と、ベクトル処理部６とを有する。命令制御部２は、命令解読部２１とスカラ処理部２２とを含む。
【００１５】
命令解読部２１は、キャッシュメモリＭ１または主記憶装置９から読み出した命令を解読する。命令解読部２１は、解読した命令がベクトルロード命令である場合に、そのベクトルロード命令をメモリ制御部３およびベクトル制御部５に送出する。ベクトルロード命令には、例えば、ロードするベクトルデータの主記憶装置９のアドレスを特定する情報（例えば開始アドレスとベクトルデータの間隔）、ベクトルデータを構成する要素の数、ベクトルデータをロードするベクトルレジスタの番号等が含まれる。
【００１６】
スカラ処理部２２は、命令解読部２１により解読された命令がスカラ命令である場合に、そのスカラ命令で指定された処理を実行する。
【００１７】
メモリ制御部３は、命令制御部２からメモリアクセスに関する命令を受信した場合に、キャッシュメモリＭ１へのアクセス処理を制御する。例えば、ベクトルロード命令を受信した場合、メモリ制御部３は、ベクトルデータの要素ごとに、メモリアクセスリクエスト（要求信号）を生成する。そして、メモリ制御部３は、各メモリアクセスリクエストを個別にキャッシュ処理部４に送出し、キャッシュ処理部４とベクトル処理部６との間のデータのやり取りを制御する。
【００１８】
メモリ制御部３は、投機的に実行されるベクトルロード命令に対応するメモリアクセスリクエストに付加する抑止フラグの値を設定する。抑止フラグは、初期値として“０”が設定され、投機的実行が失敗したときに“１”が設定される。
【００１９】
ここで、投機的実行とは、コンピュータが実際にはその結果を捨ててしまうかもしれないコードを投機的に実行することをいう。具体的には、例えば条件分岐命令が現れた場合に、予測した分岐先のコードを予め実行することである。
【００２０】
投機的実行が失敗したとは、実際の分岐先が予測した分岐先と異なったことをいう。この場合には、予測した分岐先以降の実行結果を使用せずに、実際の分岐先のコードを改めて実行することになる。
【００２１】
投機的実行が成功したとは、実際の分岐先が予測した分岐先と一致したことをいう。この場合には、予測した分岐先以降の実行結果を使用して処理が進行することになる。
【００２２】
投機的実行の正否は、命令制御部２により判定（決定）され、その結果がメモリ制御部３に通知される。
【００２３】
メモリ制御部３は、ロードバッファＭ２の空き領域を管理するロードバッファ管理部３１を有する。ロードバッファ管理部３１は、ベクトルロード命令を受信した場合に、空き状態のロードバッファ領域の中から、受信したベクトルロード命令用に、一つのロードバッファ領域を割り当てる。ロードバッファ管理部３１は、割り当てたロードバッファ領域を使用中の状態にする。
【００２４】
メモリ制御部３は、ベクトルロード命令用に割り当てたロードバッファ領域を一意に特定するバッファ番号を、メモリアクセスリクエストに付与し、このメモリアクセスリクエストをキャッシュ処理部４に送出する。これと並行して、メモリ制御部３は、ベクトルロード命令とバッファ番号との対応関係を示す情報をベクトル制御部５に通知する。
【００２５】
キャッシュ処理部４は、メモリ制御部３から受信したメモリアクセスリクエストに従って主記憶装置９とベクトル処理部６との間のデータのやり取りを制御する。例えば、キャッシュ処理部４は、受信したメモリアクセスリクエストがベクトルロード命令によるものである場合、キャッシュメモリＭ１または主記憶装置９から読み出したベクトルデータを構成する要素ごとのデータ（以下、「要素データ」という。）に対して、メモリアクセスリクエストに含まれるバッファ番号を付与し、ベクトル処理部６に送出する。
【００２６】
キャッシュ処理部４は、要素データがキャッシュヒットした場合には、キャッシュメモリＭ１から要素データを読み出す。
【００２７】
ここで、要素データがキャッシュヒットしたとは、要素データがキャッシュメモリＭ１に存在し、要素データをキャッシュメモリＭ１から読み出すことができることをいう。要素データがキャッシュミスしたとは、要素データがキャッシュメモリＭ１に存在せず、要素データをキャッシュメモリＭ１から読み出すことができないことをいう。
【００２８】
キャッシュ処理部４は、要素データがキャッシュミスし、かつ、メモリアクセスリクエストの抑止フラグが“０”である場合には、要素データの読み出し命令を主記憶装置９に送出し、主記憶装置９から読み出された要素データを取得する。
【００２９】
キャッシュ処理部４は、要素データがキャッシュミスし、かつ、メモリアクセスリクエストの抑止フラグが“１”である場合には、要素データの代替となる代替データをキャッシュメモリＭ１から読み出す。つまり、メモリアクセスリクエストの抑止フラグを“１”に設定することで、要素データの主記憶装置９からの読み出しを抑止することが可能となる。なお、代替データは、予め設定したデータであってもよいし、任意に読み出したデータであってもよい。
【００３０】
キャッシュ処理部４は、メモリアクセスリクエストに基づいて得られた要素データをリプライデータとして、ベクトル処理部６に送出する。これにより、要素データがロードバッファＭ２のバッファ領域に格納される。
【００３１】
なお、キャッシュ処理部４とベクトル処理部６との間の信号線を多重化することで、複数のメモリアクセスリクエストに対応するベクトルデータを並行してベクトル処理部６に送出することが可能となる。
【００３２】
ベクトル処理部６は、投機的実行が成功した場合には、ロードバッファＭ２のバッファ領域に格納されたベクトルデータをベクトルレジスタＭ３に転送してから当該バッファ領域を解放する。
【００３３】
ベクトル処理部６は、投機的実行が失敗した場合には、ロードバッファＭ２のバッファ領域に格納されたベクトルデータをベクトルレジスタＭ３に転送せずに当該バッファ領域を解放する。
【００３４】
ベクトル処理部６は、ベクトルレジスタＭ３に格納されたベクトルデータに対してベクトル演算を実行する。
【００３５】
なお、ベクトル処理部６には、ベクトル演算されたベクトルデータを主記憶装置９にストアするストアバッファ等、ベクトルロード以外に利用する構成要素も含まれるが、これらの構成要素については本発明と直接関係しないため図示や説明を省略する。
【００３６】
次に、図２〜図４を参照して、実施形態におけるプロセッサの動作について説明する。図２および図３は、プロセッサの動作を説明するフローチャートである。図４は、プロセッサの動作タイミングの一例を示すタイミングチャートである。
【００３７】
最初に、命令制御部２は、キャッシュメモリＭ１または主記憶装置９から読み出した命令を命令解読部２１に解読させ、解読した命令がベクトルロード命令である場合に、ベクトルロード命令をメモリ制御部３に発行する（ステップＳ１０１）。
【００３８】
続いて、メモリ制御部３は、ベクトルロード命令を受信すると、ロードバッファ管理部３１にロードバッファ領域を確保させ（ステップＳ１０２）、メモリアクセスリクエストに付与する抑止フラグを“０”に設定する（ステップＳ１０３）。
【００３９】
続いて、メモリ制御部３は、抑止フラグを付与したメモリアクセスリクエストを、ベクトルデータの要素ごとに、キャッシュ処理部４に発行する（ステップＳ１０４）。
【００４０】
続いて、メモリ制御部３は、ベクトルデータの全要素分のメモリアクセスリクエストの発行が終了したか否かを判定する（ステップＳ１０５）。この判定がＹＥＳである場合（ステップＳ１０５；ＹＥＳ）には、メモリアクセスリクエストの発行処理を終了する。
【００４１】
一方、上記ステップＳ１０５の判定で全要素分のメモリアクセスリクエストの発行が終了していないと判定された場合（ステップＳ１０５；ＮＯ）に、メモリ制御部３は、ベクトルロード命令が投機的に実行される投機的実行命令であり、かつ、命令制御部２から投機的実行が失敗した旨の通知を受信したか否かを判定する（ステップＳ１０６）。この判定がＮＯである場合（ステップＳ１０６；ＮＯ）には、処理を上記ステップＳ１０４に移行する。
【００４２】
一方、上記ステップＳ１０６の判定において、ベクトルロード命令が投機的実行命令であり、かつ、投機的実行が失敗した旨の通知を受信したと判定された場合（ステップＳ１０６；ＮＯ）に、メモリ制御部３は、これ以降にメモリアクセスリクエストに付与する抑止フラグを“１”に設定し（ステップＳ１０７）、投機的実行が失敗した旨の通知をロードバッファ管理部３１に送出する。そして、処理を上記ステップＳ１０４に移行する。
【００４３】
一方、上記ステップＳ１０４で発行されたメモリアクセスリクエストを受信したキャッシュ処理部４は、要素データがキャッシュヒットしたか、または、抑止フラグが“１”であるか否かを判定する（ステップＳ１０８）。この判定がＹＥＳである場合（ステップＳ１０８；ＹＥＳ）に、キャッシュ処理部４は、キャッシュメモリＭ１から要素データを読み出す（ステップＳ１０９）。一方、この判定がＮＯである場合（ステップＳ１０８；ＮＯ）に、キャッシュ処理部４は、要素データの読み出し命令を主記憶装置９に送出し、主記憶装置９から読み出された要素データを取得する（ステップＳ１１０）。
【００４４】
続いて、キャッシュ処理部４は、メモリアクセスリクエストに基づいて得られた要素データをリプライデータとして、ベクトル処理部６に送出する（ステップＳ１１１）。
【００４５】
続いて、ベクトル処理部６は、キャッシュ処理部４から受信したリプライデータをロードバッファＭ２に格納する（ステップＳ１１２）。
【００４６】
続いて、ベクトル処理部６は、ベクトルデータの全要素分のリプライデータを受信するまで待機する（ステップＳ１１３）とともに、ベクトルロード命令が投機的実行命令である場合には、投機的実行が確定するまで待機する（ステップＳ１１４）。
【００４７】
続いて、ベクトルデータの全要素分のリプライデータを受信し（ステップＳ１１３；ＹＥＳ）、かつ、投機的実行が確定した（ステップＳ１１４；ＹＥＳ）場合に、ベクトル処理部６は、投機的実行が成功したか否かを判定する（ステップＳ１１５）。この判定がＹＥＳである場合（ステップＳ１１５；ＹＥＳ）に、ベクトル処理部６は、ロードバッファＭ２に格納したリプライデータをベクトルレジスタＭ３に転送し（ステップＳ１１６）、その後、そのロードバッファＭ２を解放する（ステップＳ１１７）。そして、本動作を終了する。
【００４８】
一方、上記ステップＳ１１５の判定で投機的実行が失敗したと判定された場合（ステップＳ１１５；ＮＯ）に、ベクトル処理部６は、ロードバッファＭ２に格納したリプライデータを転送せずに、そのロードバッファＭ２を解放する（ステップＳ１１７）。そして、本動作を終了する。
【００４９】
上述したように、本実施形態におけるプロセッサ１によれば、投機的実行が失敗したベクトルロード命令については、キャッシュ処理部４から主記憶装置９へのメモリアクセスを抑止することができる（例えば、図４のステップＳ１１０’参照）。これにより、プロセッサ１と主記憶装置９との間の負荷を軽減することができる。
【００５０】
また、本実施形態におけるプロセッサ１によれば、投機的実行が失敗したベクトルロード命令については、キャッシュヒットの正否に関わらず、キャッシュメモリＭ１からデータを返信することができるため、ロードバッファＭ２のバッファ領域を解放するタイミングを早めることができる（例えば、図４の符号Ｄ部分を参照）。これにより、ロードバッファの利用効率を向上させることができる。
【００５１】
[変形例]
なお、上述した実施形態は、単なる例示に過ぎず、実施形態に明示していない種々の変形や技術の適用を排除するものではない。すなわち、本発明は、その趣旨を逸脱しない範囲で様々な形態に変形して実施することができる。
【００５２】
例えば、上述した実施形態では、キャッシュ処理部４をメモリ制御部３から独立させて設けているが、キャッシュ処理部４をメモリ制御部３の一部に含めてもよい。また、上述した実施形態では、ロードバッファ管理部３１をメモリ制御部３の一部に含めているが、ロードバッファ管理部３１をメモリ制御部３から独立させて設けてもよい。
【００５３】
上記の実施形態の一部または全部は、以下の付記のようにも記載され得るが、本発明を以下に限定するものではない。
【００５４】
（付記１）  投機的に実行されるベクトルロード命令が発行された場合に、当該ベクトルロード命令に対応するベクトルデータを格納するためのバッファ領域を確保するバッファ領域確保部と、前記ベクトルデータを構成する複数の要素データをそれぞれ読み出すように要求する要求信号に基づいて、前記要素データをキャッシュメモリからそれぞれ読み出し、当該要素データが前記キャッシュメモリに格納されていない場合には、当該要素データを主記憶装置から読み出すメモリ制御部と、前記メモリ制御部により読み出された前記要素データを前記バッファ領域に格納するバッファ格納部と、投機的な実行による実行結果を使用することが決定した場合には、前記バッファ領域に格納された前記要素データをベクトルレジスタに転送してから当該バッファ領域を解放する、一方、投機的な実行による実行結果を使用しないことが決定した場合には、前記バッファ領域に格納された前記要素データを前記ベクトルレジスタに転送せずに当該バッファ領域を解放する、ベクトル処理部と、を備え、前記メモリ制御部は、投機的な実行による実行結果を使用しないことが決定した場合には、前記要素データの前記主記憶装置からの読み出しを抑止する、ことを特徴とするベクトル演算処理装置。
【００５５】
（付記２）  各前記要求信号には、投機的な実行の正否を示すフラグ情報がそれぞれ含まれ、前記メモリ制御部は、前記要求信号に含まれる前記フラグ情報が投機的な実行が失敗したことを示す場合に、前記要素データの前記主記憶装置からの読み出しを抑止する、ことを特徴とする付記１記載のベクトル演算処理装置。
【００５６】
（付記３）  投機的に実行されるベクトルロード命令が発行された場合に、当該ベクトルロード命令に対応するベクトルデータを格納するためのバッファ領域を確保するバッファ領域確保ステップと、前記ベクトルデータを構成する複数の要素データをそれぞれ読み出すように要求する要求信号に基づいて、前記要素データをキャッシュメモリからそれぞれ読み出し、当該要素データが前記キャッシュメモリに格納されていない場合には、当該要素データを主記憶装置から読み出すメモリ制御ステップと、前記メモリ制御部により読み出された前記要素データを前記バッファ領域に格納するバッファ格納ステップと、投機的な実行による実行結果を使用することが決定した場合には、前記バッファ領域に格納された前記要素データをベクトルレジスタに転送してから当該バッファ領域を解放する、一方、投機的な実行による実行結果を使用しないことが決定した場合には、前記バッファ領域に格納された前記要素データを前記ベクトルレジスタに転送せずに当該バッファ領域を解放する、ベクトル演算処理ステップと、を含み、前記メモリ制御ステップは、投機的な実行による実行結果を使用しないことが決定した場合には、前記要素データの前記主記憶装置からの読み出しを抑止する、ことを特徴とするベクトル演算処理方法。
【００５７】
（付記４）  付記３に記載の各ステップをコンピュータに実行させるためのベクトル演算処理プログラム。
【符号の説明】
【００５８】
１…プロセッサ、２…命令制御部、３…メモリ制御部、４…キャッシュ処理部、５…ベクトル制御部、６…ベクトル処理部、９…主記憶装置、２１…命令解読部、２２…スカラ処理部、３１…ロードバッファ管理部、Ｍ１…キャッシュメモリ、Ｍ２…ロードバッファ、Ｍ３…ベクトルレジスタ。
【図１】
0005344316.tif 000002
【図２】
0005344316.tif 000003
【図３】
0005344316.tif 000004
【図４】
0005344316.tif 000005