(57)【要約】【課題】アウトオブオーダー実行であっても、メモリへのアクセス順序を保証することができる演算処理装置を提供することを課題とする。【解決手段】演算処理装置は、デコードされたメモリアクセス命令をアウトオブオーダーで実行する命令制御部（１００）と、データを保持するキャッシュメモリ部（１１４）と、前記命令制御部の命令実行により前記キャッシュメモリ部へのアクセスが完了したメモリアクセス命令が、前記キャッシュメモリ部に対するアクセスの順序変更ができないシリアライズ命令である場合、前記シリアライズ命令に後続する後続メモリアクセス命令による前記キャッシュメモリ部へのアクセス処理が完了したかを判定し、前記後続メモリアクセス命令による前記キャッシュメモリ部へのアクセス処理が完了したとき、前記後続メモリアクセス命令の再実行を前記命令制御部に要求する判定部（１１６）とを有する。【選択図】図１
2015036889.tif 000002
【特許請求の範囲】
【請求項１】
デコードされたメモリアクセス命令をアウトオブオーダーで実行する命令制御部と、
データを保持するキャッシュメモリ部と、
前記命令制御部の命令実行により前記キャッシュメモリ部へのアクセスが完了したメモリアクセス命令が、前記キャッシュメモリ部に対するアクセスの順序変更ができないシリアライズ命令である場合、前記シリアライズ命令に後続する後続メモリアクセス命令による前記キャッシュメモリ部へのアクセス処理が完了したかを判定し、前記後続メモリアクセス命令による前記キャッシュメモリ部へのアクセス処理が完了したとき、前記後続メモリアクセス命令の再実行を前記命令制御部に要求する判定部と
を有することを特徴とする演算処理装置。
【請求項２】
前記判定部は、
前記命令制御部の命令実行により前記キャッシュメモリ部へのアクセスが完了したメモリアクセス命令がストア命令である場合、前記ストア命令のアクセス対象アドレスと前記後続メモリアクセス命令のアクセス対象アドレスとが一致している場合、前記後続メモリアクセス命令の再実行を前記命令制御部に要求することを特徴とする請求項１記載の演算処理装置。
【請求項３】
前記シリアライズ命令は、
プログラムにおいて自命令に先行する全ての命令の実行完了後、プログラム順で後続するメモリアクセス命令の実行を行うメモリバリア命令、又は、前記キャッシュメモリ部に保持されたデータのロード、データ変更及びストアを一命令で実行するアトミック命令であることを特徴とする請求項１又は２記載の演算処理装置。
【請求項４】
デコードされたメモリアクセス命令をアウトオブオーダーで実行する命令制御部と、データを保持するキャッシュメモリ部とを有する演算処理装置の制御方法において、
前記演算処理装置が有する判定部が、前記命令制御部の命令実行により前記キャッシュメモリ部へのアクセスが完了したメモリアクセス命令が、前記キャッシュメモリ部に対するアクセスの順序変更ができないシリアライズ命令である場合、前記シリアライズ命令に後続する後続メモリアクセス命令による前記キャッシュメモリ部へのアクセス処理が完了したかを判定し、
前記後続メモリアクセス命令による前記キャッシュメモリ部へのアクセス処理が完了したとき、前記判定部が、前記後続メモリアクセス命令の再実行を前記命令制御部に要求することを特徴とする演算処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置及び演算処理装置の制御方法に関する。
【背景技術】
【０００２】
一連の命令の実行単位であるスレッドを制御する命令制御部と、キャッシュメモリを有するキャッシュ制御部とを備え、メモリアクセスを行うストア命令とロード命令とをプログラムに記載された順序に関らず、実行可能な命令から実行を行うアウトオブオーダーにより実行し、スレッドを複数同時に実行する機能を持つ情報処理装置が知られている（例えば、特許文献１参照）。判定回路は、あるスレッドによりキャッシュメモリへのストア命令の処理が実行された場合に、先行するロード命令と後続のロード命令とを有する他のスレッドによって、ストア命令の対象アドレスのデータに対する後続のロード命令が先行するロード命令の処理より先に実行され、その後続のロード命令の対象データがストア命令の処理より先に命令制御部に返されたか否かを判定する。命令再実行要求回路は、判定回路により対象データがストア命令の処理より先に命令制御部に返されたと判定された場合に、先行するロード命令を処理するとき、先行するロード命令の次の命令から後続のロード命令までの命令の再実行を命令制御部に要求する。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】国際公開第２００８／１５５８２９号
【発明の概要】
【発明が解決しようとする課題】
【０００４】
従来技術においては、ストア命令の対象アドレスのデータに対する後続のロード命令が先行するロード命令の処理より先に実行され、その後続のロード命令の対象データがストア命令の処理より先に返された場合に、再実行を要求する。しかし、その他の命令の実行順序変更による不整合を解消できないという課題がある。
【０００５】
１つの側面では、本発明の目的は、アウトオブオーダー実行であっても、メモリへのアクセス順序を保証することができる演算処理装置及び演算処理装置の制御方法を提供することである。
【課題を解決するための手段】
【０００６】
演算処理装置は、デコードされたメモリアクセス命令をアウトオブオーダーで実行する命令制御部と、データを保持するキャッシュメモリ部と、前記命令制御部の命令実行により前記キャッシュメモリ部へのアクセスが完了したメモリアクセス命令が、前記キャッシュメモリ部に対するアクセスの順序変更ができないシリアライズ命令である場合、前記シリアライズ命令に後続する後続メモリアクセス命令による前記キャッシュメモリ部へのアクセス処理が完了したかを判定し、前記後続メモリアクセス命令による前記キャッシュメモリ部へのアクセス処理が完了したとき、前記後続メモリアクセス命令の再実行を前記命令制御部に要求する判定部とを有する。
【発明の効果】
【０００７】
再実行を要求することにより、アウトオブオーダー実行であっても、メモリへのアクセス順序を保証することができる。
【図面の簡単な説明】
【０００８】
【図１】図１は、本実施形態による演算処理装置の構成例を示す図である。
【図２】図２は、図１の演算処理装置の制御方法を示すフローチャートである。
【図３】図３は、図１の再実行要求判定回路の構成例を示す図である。
【発明を実施するための形態】
【０００９】
図１は、本実施形態による演算処理装置の構成例を示す図である。演算処理装置は、命令制御部１００及びキャッシュ制御部１１０を有する。命令制御部１００は、命令デコーダ１０１、リザベーションステーション（ＲＳ）１０２、アドレス生成演算器１０３及び演算器１０４を有する。キャッシュ制御部１１０は、フェッチポートＦＰ、ストアポートＳＰ、セレクタ１１１〜１１３、キャッシュメモリ１１４、メモリアクセス完了判定回路１１５及び再実行要求判定回路１１６を有する。キャッシュメモリ１１４は、命令及びデータを記憶（保持）する。フェッチポートＦＰは、フェッチポート番号毎に、有効フラグ、命令の種類、アドレス及び完了フラグを記憶する。ストアポートＳＰは、ストアポート番号毎に、有効フラグ、アドレス及びストアデータを記憶する。例えば、フェッチポートＦＰは、数〜数十エントリのフェッチポート番号を有する。キャッシュ制御部１１０は、最古のフェッチポート番号を保持している。
【００１０】
図２は、図１の演算処理装置の制御方法を示すフローチャートである。まず、ステップＳ２０１では、命令制御部１００は、キャッシュメモリ１１４内の命令をフェッチし、フェッチした命令を命令デコーダ１０１に入力する。次に、ステップＳ２０２では、命令制御部１００は、命令デコーダ１０１により、入力された命令をデコードする。次に、ステップＳ２０３では、命令制御部１００は、リザベーションステーション１０２、フェッチポートＦＰ及び／又はストアポートＳＰに空きがあるか否かをチェックする。空きがなければ空きができるまで待機し、空きがあればステップＳ２０４に進む。なお、ストアポートＳＰは、デコードされた命令がストア命令の場合にのみ使用されるポートである。
【００１１】
ステップＳ２０４では、命令制御部１００は、リザベーションステーション１０２、フェッチポートＦＰ及び／又はストアポートＳＰの割り当てを行い、命令発行する。命令制御部１００は、命令発行した命令をリザベーションステーション１０２に格納する。リザベーションステーション１０２には、キャッシュメモリ１１４へのアクセスを行うための命令（ロード命令及びストア命令等）が格納される。その他の命令は、他のリザベーションステーションに格納される。
【００１２】
次に、ステップＳ２０５では、命令制御部１００は、リザベーションステーション１０２に格納されている命令のうちで、実行可能な命令が、プログラム順序で先頭の命令か否かをチェックする。先頭の命令でない場合にはステップＳ２０６へ進み、先頭の命令である場合にはステップＳ２０７へ進む。
【００１３】
ステップＳ２０６では、命令制御部１００は、リザベーションステーション１０２に格納されている命令のうちで、実行可能な命令に対してプログラム順で前の命令にシリアライズ命令が存在するか否かをチェックする。シリアライズ命令は、キャッシュメモリ１１４に対するアクセスの順序変更ができない命令であり、メモリバリア命令及びアトミック命令を含む。メモリバリア命令は、プログラムにおいてメモリバリア命令（自己の命令）に先行する全ての命令の実行完了後、プログラム順で後続するメモリアクセス命令の実行を行う命令である。アトミック命令は、キャッシュメモリ１１４に保持されたデータのロード、データ変更、及びストアを一命令で実行し、アトミック命令内のロード、データ変更、及びストアの処理中には処理途中の状態にアクセスすることができない命令である。
【００１４】
ステップＳ２０６において、命令制御部１００は、シリアライズ命令が存在する場合には、シリアライズ命令の実行が完了するまで待機し、実行可能な命令に対してプログラム順で前の命令にシリアライズ命令が存在しなくなったら、ステップＳ２０７へ進む。
【００１５】
ステップＳ２０７では、命令制御部１００は、上記の実行可能な命令の実行によりキャッシュメモリ１１４にアクセスするため、アドレス生成演算器１０３により、キャッシュメモリ１１４にアクセスするアドレスを生成する。演算器１０４は、上記の実行可能な命令の実行による演算を行う。命令制御部１００は、実行可能な命令を実行することにより、アウトオブオーダー実行を行うことができる。これにより、命令の実行順序は、命令のプログラム順序と異ならせることができ、処理速度を高速化することができる。
【００１６】
次に、ステップＳ２０８では、命令制御部１００は、キャッシュ制御部１１０に対して、命令の種類、アドレス及び／又はストアデータを含むメモリアクセス要求を出力する。なお、ストアデータは、ストア命令の場合にのみ出力される。
【００１７】
次に、ステップＳ２０９では、キャッシュ制御部１１０は、フェッチポートＦＰの割り当てられたフェッチポート番号に、命令の種類及びアドレスを書き込み、有効フラグを有効にし、完了フラグを未完了にする。命令の種類がストア命令の場合には、キャッシュ制御部１１０は、さらに、ストアポートＳＰの割り当てられたストアポート番号に、アドレス及びストアデータを書き込み、有効フラグを有効にする。
【００１８】
次に、ステップＳ２１０では、キャッシュ制御部１１０は、上記の命令に応じて、キャッシュメモリ１１４にアクセスする。例えば、上記の命令がロード命令の場合には、セレクタ１１１は、フィッチポートＦＰの割り当てられたフェッチポート番号の命令の種類及びアドレスを選択して出力する。セレクタ１１３は、セレクタ１１１が出力するアドレスを選択して出力する。キャッシュメモリ１１４は、セレクタ１１３が出力するアドレスのデータをロードし、命令制御部１００に出力する。
【００１９】
また、上記の命令がストア命令の場合には、セレクタ１１２は、ストアポートＳＰの割り当てられたストアポート番号のアドレス及びストアデータを選択して出力する。セレクタ１１３は、セレクタ１１２が出力するアドレスを選択して出力する。キャッシュメモリ１１４は、セレクタ１１３が出力するアドレスに対して、セレクタ１１２が出力するストアデータをストアする。
【００２０】
次に、ステップＳ２１１では、再実行要求判定回路１１６は、上記のキャッシュメモリ１１４へのアクセス処理が完了した命令がストア命令か否かをチェックする。ストア命令である場合にはステップＳ２１２に進み、ストア命令でない場合にはステップＳ２１４に進む。
【００２１】
ステップＳ２１２では、再実行要求判定回路１１６は、上記のストア命令の後続命令によるキャッシュメモリ１１４へのアクセス処理が既に完了しているか否かをチェックする。上記の後続命令は、フェッチポートＦＰ内において、上記のストア命令に対して、プログラム順で後に位置するすべての命令である。完了している場合にはステップＳ２１３に進み、完了していない場合にはステップＳ２１７に進む。
【００２２】
ステップＳ２１３では、再実行要求判定回路１１６は、上記のストア命令のアクセス対象アドレスと上記の後続命令のアクセス対象アドレスが一致しているか否かをチェックする。アドレスが一致している場合には、キャッシュメモリ１１４へのアクセス順序を修正するために、ステップＳ２１６に進む。すなわち、ストア命令の実行が完了する前に、後続命令が同じアドレスにアクセスすると、正しい結果が得られないので、修正が必要になる。これに対し、アドレスが一致していない場合には、ステップＳ２１７に進む。
【００２３】
ステップＳ２１４では、再実行要求判定回路１１６は、上記のキャッシュメモリ１１４へのアクセス処理が完了した命令がシリアライズ命令か否かをチェックする。シリアライズ命令である場合にはステップＳ２１５に進み、シリアライズ命令でない場合にはステップＳ２１７に進む。上記のステップＳ２０６の処理により、シリアライズ命令の順序制御が行われているので、通常、ステップＳ２１４において、完了した命令がシリアライズ命令であると判定されることはない。ただし、演算処理装置の故障等の場合には、ステップステップＳ２１４において、完了した命令がシリアライズ命令であると判定されることがある。
【００２４】
ステップＳ２１５では、再実行要求判定回路１１６は、上記のシリアライズ命令の後続命令によるキャッシュメモリ１１４へのアクセス処理が完了しているか否かをチェックする。上記の後続命令は、フェッチポートＦＰ内において、上記のシリアライズ命令に対して、プログラム順で後に位置するすべての命令である。アクセス処理が完了している場合には、キャッシュメモリ１１４へのアクセス順序を修正するために、ステップＳ２１６に進む。すなわち、シリアライズ命令の実行が完了する前に、後続命令がアクセスすると、正しい結果が得られないので、修正が必要になる。これに対し、アクセス処理が完了していない場合には、ステップＳ２１７に進む。
【００２５】
ステップＳ２１６では、再実行要求判定回路１１６は、上記の後続命令の再実行要求を命令制御部１００に出力する。命令制御部１００は、再実行要求を入力すると、上記ストア命令又はシリアライズ命令の完了後に、上記のストア命令又は上記のシリアライズ命令に対して、プログラム順で後のすべての命令を再実行する。これにより、キャッシュメモリ１１４に対するアクセス順序を正しい順序にすることができる。その後、ステップＳ２１７に進む。
【００２６】
ステップＳ２１７では、メモリアクセス完了判定回路１１５は、メモリアクセス完了報告を命令制御部１００に出力し、メモリアクセス完了報告に対応するフェッチポートＦＰのフェッチポート番号の完了フラグを完了にする。
【００２７】
図３は、図１の再実行要求判定回路１１６の構成例を示す図である。判定回路３０１は、処理中の命令がストア命令であり（ステップＳ２１１）、かつフェッチポート番号ＦＰｎの有効フラグが１（有効）であり、かつフェッチポート番号ＦＰｎの命令がロード命令であり、かつフェッチポート番号ＦＰｎの完了フラグが１（完了）である場合（Ｓ２１２）に「１」を出力し、それ以外の場合に「０」を出力する。
【００２８】
アドレス比較回路３０２は、処理中のアドレス及びフェッチポート番号ＦＰｎのアドレスを比較し（ステップＳ２１３）、両者が一致している場合には「１」を出力し、両者が一致していない場合には「０」を出力する。
【００２９】
論理積（ＡＮＤ）回路３０４は、判定回路３０１の出力値とアドレス比較回路３０２の出力値との論理積を出力する。論理積回路３０４が「１」を出力する場合には、図２のステップＳ２１３からステップＳ２１６へ進むことを意味する。
【００３０】
判定回路３０３は、処理中の命令がシリアライズ命令であり（ステップＳ２１４）、かつフィッチポート番号ＦＰｎの有効フラグが１（有効）であり、フェッチポート番号ＦＰｎの完了フラグが１（完了）である場合（ステップＳ２１５）には「１」を出力し、それ以外の場合には「０」を出力する。判定回路３０３が「１」を出力する場合には、図２のステップＳ２１５からステップＳ２１６へ進むことを意味する。
【００３１】
論理和（ＯＲ）回路３０５は、論理積回路３０４の出力値と判定回路３０３の出力値との論理和を出力する。セレクタ３０６は、論理和回路３０５の出力値が「１」の場合、処理中のフェッチポート番号及び最古のフェッチポート番号を基に、処理中のストア命令又はシリアライズ命令に対してプログラム順で後に位置するすべてのフェッチポート番号を選択し、選択したフェッチポート番号の情報を出力する。論理和回路３０７は、セレクタ３０６により出力されたすべてのフェッチポート番号の命令の再実行要求を出力する。すなわち、処理中のストア命令又はシリアライズ命令に対してプログラム順で後に位置する複数の命令のうちの１つでもアクセス（ロード）処理が完了している場合には、上記の後に位置するすべての命令の再実行要求を出力する。
【００３２】
なお、再実行要求判定回路１１６は、上記の処理中の命令（の種類）及び処理中のアドレスを図１のセレクタ１１１から入力し、上記のフェッチポート番号ＦＰｎの情報を図１のフェッチポートＦＰから入力する。
【００３３】
以上のように、命令制御部１００は、命令をデコードし、デコードされた命令をリザベーションステーション１０２に格納し、リザベーションステーション１０２に格納された命令をアウトオブオーダーで実行する。ステップＳ２１４では、判定回路１１６は、命令制御部１００の命令実行によりキャッシュメモリ１１４へのアクセス処理が完了した命令がシリアライズ命令であるか否かをチェックする。シリアライズ命令である場合には、ステップＳ２１５で、判定回路１１６は、上記のシリアライズ命令の後続命令によるキャッシュメモリ１１４へのアクセス処理が完了しているか否かをチェックする。アクセス処理が完了している場合には、ステップＳ２１６で、判定回路１１６は、上記の後続命令の再実行を命令制御部１００に要求する。これにより、シリアライズ命令をアウトオブオーダー実行する場合にも、キャッシュメモリ１１４へのアクセス順序を保証することができる。
【００３４】
また、ステップＳ２１１では、判定回路１１６は、命令制御部１００の命令実行によりキャッシュメモリ１１４へのアクセス処理が完了した命令がストア命令であるか否かをチェックする。ストア命令である場合には、ステップＳ２１２で、判定回路１１６は、上記のストア命令の後続命令によるキャッシュメモリ１１４へのアクセス処理が完了しているか否かをチェックする。完了している場合には、ステップＳ２１３で、判定回路１１６は、上記のストア命令及び上記の後続命令のキャッシュメモリ１１４へのアクセスのアドレスが一致しているか否かをチェックする。一致している場合には、ステップＳ２１６で、判定回路１１６は、上記の後続命令の再実行を命令制御部１００に要求する。これにより、ストア命令をアウトオブオーダー実行する場合にも、キャッシュメモリ１１４へのアクセス順序を保証することができる。
【００３５】
なお、上記実施形態は、何れも本発明を実施するにあたっての具体化の例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、又はその主要な特徴から逸脱することなく、様々な形で実施することができる。
【符号の説明】
【００３６】
１００  命令制御部
１０１  命令デコーダ
１０２  リザベーションステーション
１０３  アドレス生成演算器
１０４  演算器
１１０  キャッシュ制御部
１１１〜１１３  セレクタ
１１４  キャッシュメモリ
１１５  メモリアクセス完了判定回路
１１６  再実行要求判定回路
【図１】
2015036889.tif 000003
【図２】
2015036889.tif 000004
【図３】
2015036889.tif 000005