(57)【要約】      （修正有）【課題】単純な構成で投機状態におけるストア動作を可能とするプロセッサを提供する。【解決手段】プロセッサは、未実行である分岐命令が存在する場合に、所定のアドレスに対して第１のデータを書き込む第１のストア命令を、アドレスに記憶された第２のデータの読み出しとそのアドレスに対する第１のデータの書き込みを一連に行うロードストア命令に変換する変換部１５４１と、アドレスと、ロードストア命令により読み出された第２のデータを格納するレジスタに関する情報との関係を示す情報を保持するストアアドレスキュー１５４２と、分岐命令の分岐に関する予測が失敗した場合に、上述のアドレスに対して第２のデータを書き込む第２のストア命令を生成する生成部１５４３と、を備える。【選択図】図２
2017054302.tif 000002
【特許請求の範囲】
【請求項１】
未実行である分岐命令が存在する場合に、所定のアドレスに対して第１のデータを書き込む第１のストア命令を、前記アドレスに記憶された第２のデータの読み出しと前記アドレスに対する前記第１のデータの書き込みを一連に行うロードストア命令に変換する変換手段を備えるプロセッサ。
【請求項２】
前記分岐命令の分岐に関する予測が失敗した場合に、前記アドレスに対して前記第２のデータを書き込む第２のストア命令を生成する生成手段を備える、請求項１に記載のプロセッサ。
【請求項３】
前記アドレスと、前記ロードストア命令により読み出された前記第２のデータを格納するレジスタに関する情報との関係を保持するストアアドレスキューを備える、請求項１又は２に記載のプロセッサ。
【請求項４】
前記生成手段は、前記ストアアドレスキューに保持された前記関係に基づいて前記第２のストア命令を生成する、請求項２又は３に記載のプロセッサ。
【請求項５】
前記生成手段は、前記ストアアドレスキューに複数の前記関係が保持されている場合に、
前記ストアアドレスキューに複数の前記関係の各々が保持された順と逆の順番で、複数の前記関係の各々に関する前記第２のストア命令を生成する、請求項４に記載のプロセッサ。
【請求項６】
前記ロードストア命令を少なくとも実行するメモリ処理手段を備える、請求項１から５のいずれか一項に記載のプロセッサ。
【請求項７】
前記メモリ処理手段は、前記分岐予測の分岐に関する予測が成功した場合に、前記ロードストア命令の完了処理を実行する、請求項６に記載のプロセッサ。
【請求項８】
前記メモリ処理手段は、未実行である分岐命令が存在しない場合に、前記第１のストア命令を実行する、請求項６又は７に記載のプロセッサ。
【請求項９】
未実行である分岐命令が存在する場合に、所定のアドレスに対して第１のデータを書き込む第１のストア命令を、前記アドレスに記憶された第２のデータの読み出しと前記アドレスに対する前記第１のデータの書き込みを一連に行うロードストア命令に変換し、
前記アドレスと、前記ロードストア命令により読み出された前記第２のデータを格納するレジスタに関する情報との関係を示す情報を保持し、
前記分岐命令の分岐に関する予測が失敗した場合に、前記アドレスに対して前記第２のデータを書き込む命令を生成する、ストア命令の変換方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサ及びストア命令の変換方法に関する。
【背景技術】
【０００２】
プロセッサにおいて、レイテンシが長い命令のレイテンシを隠蔽するために、投機状態（先行する分岐命令が未実行である状態）におけるメモリ階層へのデータの書き込みを可能となることが検討されている。
【０００３】
特許文献１には、実行エンジンがストアキューを含む、ロード／ストアオペレーションのＯＵＴ−ＯＦ−ＯＲＤＥＲ実行の制御に関する技術が記載されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特表平１１−５１２８５５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
投機状態におけるメモリ階層へのデータの書き込みに際しては、書き込みの対象となるメモリ領域にて保持されていたデータの履歴等を保持する必要が生じ得る。しかしながら、特許文献１等の技術においては、投機状態におけるメモリ階層へのデータの書き込みを行うために必要となるハードウェアの構成が複雑になる課題がある。
【０００６】
本発明は、上記課題を解決するためになされたものであって、単純な構成で投機状態におけるストア動作を可能とするプロセッサ等を提供することを主たる目的とする。
【課題を解決するための手段】
【０００７】
本発明の一態様におけるプロセッサは、未実行である分岐命令が存在する場合に、所定のアドレスに対して第１のデータを書き込む第１のストア命令を、アドレスに記憶された第２のデータの読み出しとアドレスに対する第１のデータの書き込みを一連に行うロードストア命令に変換する変換手段を備える。
【０００８】
本発明の一態様におけるストア命令の変換方法は、未実行である分岐命令が存在する場合に、所定のアドレスに対して第１のデータを書き込む第１のストア命令を、アドレスに記憶された第２のデータの読み出しとアドレスに対する第１のデータの書き込みを一連に行うロードストア命令に変換し、アドレスと、ロードストア命令により読み出された第２のデータを格納するレジスタに関する情報との関係を示す情報を保持し、分岐命令の分岐に関する予測が失敗した場合に、アドレスに対して第２のデータを書き込む命令を生成する。
【発明の効果】
【０００９】
本発明によると、単純な構成で投機状態におけるストア動作を可能とするプロセッサ等を提供することができる。
【図面の簡単な説明】
【００１０】
【図１】本発明の第１の実施形態におけるプロセッサを示す図である。
【図２】本発明の第１の実施形態におけるプロセッサの命令変換部の構成例を示す図である。
【図３】本発明の第１の実施形態におけるプロセッサによって実行されるプログラムの一例を示す図である。
【図４】図３に示すプログラムがコンパイルされた機械語レベルの命令列の例である。
【図５】本発明の第１の実施形態におけるプロセッサのプロセッサコアが備える命令変換部が無効とされた場合におけるタイミングチャートの一例である。
【図６】本発明の第１の実施形態におけるプロセッサのプロセッサコアが備える命令変換部が有効とされた場合におけるタイミングチャートの一例である。
【図７】本発明の第１の実施形態におけるプロセッサのリネーミングレジスタのエントリと実行される命令との対応を示す図である。
【図８】本発明の第１の実施形態におけるプロセッサのストアアドレスキューに保持される情報の一例を示す図である。
【発明を実施するための形態】
【００１１】
（第１の実施形態）
本発明の各実施形態について、添付の図面を参照して説明する。まず、本発明の第１の実施形態について説明する。図１は、本発明の第１の実施形態におけるプロセッサの構成を示す図である。図２は、本発明の第１の実施形態におけるプロセッサのプロセッサコアが備える命令変換部の構成を示す図である。図３は、本発明の第１の実施形態におけるプロセッサによって実行されるプログラムの一例を示す図である。図４は、図３に示すプログラムがコンパイルされた機械語レベルの命令列の例である。図５は、本発明の第１の実施形態におけるプロセッサのプロセッサコアが備える命令変換部が無効とされた場合におけるタイミングチャートの一例である。図６は、本発明の第１の実施形態におけるプロセッサのプロセッサコアが備える命令変換部が有効とされた場合におけるタイミングチャートの一例である。図７は、本発明の第１の実施形態におけるプロセッサのリネーミングレジスタのエントリと実行される命令との対応を示す図である。
【００１２】
図１に示すとおり、本発明の第１の実施形態におけるプロセッサ１０は、プロセッサコア１００から４００と、コア間ネットワーク５００と、ＬＬＣ（Ｌａｓｔ  Ｌｅｖｅｌ  Ｃａｃｈｅ）６００とを有する。プロセッサコア１００から４００の各々は、それぞれ同様の構成を備える。図１に示す例においては、プロセッサコア１００に関してその構成を示す。プロセッサ１０は、メモリコンシステンシモデルとして基本的にリリースコンシステンシを用いる。また、コア間ネットワーク５００は、プロセッサコア１００から４００の各々と、ＬＬＣ６００とを接続する。コア間ネットワーク５００として、例えば任意の構成のバスが用いられる。ＬＬＣ６００は、プロセッサコア１００から４００の三次キャッシュとなる。また、プロセッサ１０は、外部のメインメモリとなるメモリ７００と接続する。メモリ７００は、ＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）でもよいし、不揮発メモリや、その他の任意の種類のメモリであってもよい。
【００１３】
プロセッサコア１００は、命令フェッチ・デコード部１２０と、依存性解析部１３０と、リネーミングレジスタ１４０と、実行制御部１５０と、算術演算部１５１と、分岐処理部１５２と、メモリ処理部１５３と、命令変換部１５４とを備える。命令変換部１５４は、変換部１５４１と、ストアアドレスキュー１５４２と、生成部１５４３とを含む。また、プロセッサコア１００は、キャッシュメモリとして、一次命令キャッシュ１１０と、一次データキャッシュ１６０と、二次キャッシュ１７０とを備える。
【００１４】
なお、図１に示すプロセッサ１０の構成は一例である。本実施形態においては、命令変換部１５４を備えることを除いて、様々なプロセッサ１０の構成が考えられる。例えば、プロセッサ１０において、コアの数は任意である。プロセッサ１０は、コアの数が１つ、すなわちシングルプロセッサであってもよい。この場合には、プロセッサコア１００（又は、プロセッサコア１００及びＬＬＣ６００）がプロセッサ１０であるとみなすことができる。また、キャッシュの構成が異なっていてもよい。プロセッサ１０は、図１に示す構成と比較してより多くの階層のキャッシュを有してもよいし、図１に示す一部のキャッシュが省略された構成であってもよい。
【００１５】
続いて、プロセッサコア１００の各構成要素について説明する。
【００１６】
一次命令キャッシュ１１０は、メモリ７００に格納された命令コードをキャッシュとして保持するキャッシュメモリである。一次命令キャッシュ１１０は、一例として６４ＫＢ（キロバイト）程度の容量である。しかしながら、一次命令キャッシュ１１０の容量は、これとは異なってもよい。また、一次命令キャッシュ１１０の具体的な構成として、キャッシュメモリに対して一般的に知られている任意の構成が用いられる。
【００１７】
命令フェッチ・デコード部１２０は、一次命令キャッシュ１１０等から命令を取得してデコードする。本実施形態においては、命令フェッチ・デコード部１２０は、分岐予測機能を含むことを想定する。命令フェッチ・デコード部１２０に含まれる分岐予測機能として、一般的に知られた任意の分岐予測の技術が用いられる。
【００１８】
依存性解析部１３０は、命令フェッチ・デコード部１２０にてデコードされた命令の間の依存性を抽出して解析する。また、依存性解析部１３０は、デコードされた命令において指定された論理レジスタを物理レジスタにリネームする。
【００１９】
リネーミングレジスタ１４０は、依存性解析部１３０にてリネームされた論理レジスタに格納されるデータを実際に保持する物理レジスタである。リネーミングレジスタ１４０は、任意の数のエントリを備える。
【００２０】
実行制御部１５０は、算術演算部１５１、分岐処理部１５２、メモリ処理部１５３及び命令変換部１５４等を制御し、依存性の解析や論理レジスタの割当てが終了した命令を実際に実行し、完了処理までを行う。
【００２１】
算術演算部１５１は、加減乗除等の算術演算や論理演算の命令を実行する。分岐処理部１５２は、分岐命令を実行する。メモリ処理部１５３は、メモリからのデータの読み出しを行うロード命令や、メモリへのデータの書き込みを行うストア命令等のメモリへのアクセスに関連する命令を実行する。
【００２２】
また、実行制御部１５０は、一般的なプロセッサが実行可能な他の命令の実行や完了処理を行う機構を含んでもよい。
【００２３】
一次データキャッシュ１６０は、メモリ７００に格納された命令コード以外のデータをキャッシュとして保持するキャッシュメモリである。一次データキャッシュ１６０の容量又は具体的な構成は、一次命令キャッシュ１１０と同じでもよいし、異なっていてもよい。
【００２４】
二次キャッシュ１７０は、一次命令キャッシュ１１０又は一次データキャッシュ１６０と比較して下位にあるキャッシュメモリである。一例として、二次キャッシュ１７０の容量は、一次命令キャッシュ１１０又は一次データキャッシュ１６０の各々と比較して大きい。
【００２５】
なお、プロセッサコア１００の上述した各構成要素の具体的な実現手法としては、一般的に知られた任意の手法が用いられる。また、図１に示すプロセッサコア１００の構成は一例であり、プロセッサコア１００は、上述した各構成要素に関しては、プロセッサの構成として一般的に知られた他の任意の構成を備えてもよい。
【００２６】
続いて、プロセッサコア１００が備える命令変換部１５４の各構成要素について説明する。
【００２７】
変換部１５４１は、プロセッサコア１００において未実行である分岐命令が存在する場合、メモリ７００の所定のアドレスに対してデータを書き込むストア命令をアトミックロードストア命令に変換する。未実行である分岐命令が存在する（分岐命令が実行制御部１５０にて発行されたが分岐処理部１５２にて実行されていない）状態は、投機状態と呼ばれる。
【００２８】
具体的には、変換部１５４１は、ストア命令を含むメモリアクセスに関する命令を実行制御部１５０又はメモリ処理部１５３から取得する。また、変換部１５４１は、投機状態にある旨を示す情報を、実行制御部１５０又は分岐処理部１５２から取得する。そして、変換部１５４１は、メモリアクセスに関する命令がストア命令であり、かつ、投機状態にあることを判定した場合に、ストア命令を、アトミックロードストア命令に変換する。
【００２９】
変換されたアトミックロードストア命令は、メモリ処理部１５３に送信されてメモリ処理部１５３にて実行される。なお、変換部１５４１は、ストア命令以外のメモリアクセス命令又は投機状態に無い場合におけるストア命令は、変換を行わずにメモリ処理部１５３へ送信する。すなわち、プロセッサコア１００が投機状態に無い場合には、プロセッサコア１００のメモリ処理部１５３は、ストア命令をそのまま実行する。また、アトミックロードストア命令にて読み出されたデータは、リネーミングレジスタ１４０において、例えば後述するプログラムの実行例にて示すような手順等を用いて適宜保持される。
【００３０】
アトミックロードストア命令は、指定されたメモリ７００のアドレスに格納されたデータを読み出し、その後、他の処理が割り込むことなく当該アドレスへのデータの書き込みを行う命令である。すなわち、アトミックロードストア命令が実行される場合には、データの読み出しと書き込み（ロードとストア）とがアトミックに（一連に）行われる。アトミックロードストア命令は、テストアンドセット（Ｔｅｓｔ−ａｎｄ−Ｓｅｔ）機構とも呼ばれる。
【００３１】
なお、アトミックロードストア命令において、読み出しの対象となるメモリ７００のアドレスは、変換対象とされたストア命令において書き込みが行われるアドレスとなる。すなわち、アトミックロードストア命令によって行われる値の読み出しは、当該アドレスで指定される領域にて保持されていた値をリネーミングレジスタ１４０に退避する動作に相当する。アトミックロードストア命令における書き込みの対象となるメモリ７００のアドレス及びデータは、それぞれ変換対象とされたストア命令において指定されたアドレス及びデータである。また、アトミックロードストア命令において、読み出しの対象となるデータが一次命令キャッシュ１１０等のいずれかのキャッシュメモリに格納されている場合には、当該キャッシュメモリからデータが読み出されてもよい。当該データが上位階層のキャッシュメモリに格納されている場合には、そのキャッシュメモリからデータを読み出すことが好ましい。
【００３２】
ストアアドレスキュー１５４２は、上述したアトミックロードストア命令への変換の対象となったストア命令にて指定されたメモリ７００のアドレスと、当該データを保持するレジスタとの対応に関する情報を保持する。例えば、ストアアドレスキュー１５４２は、上述の情報として、アトミックロードストア命令にて読み出されたデータが保持されたリネーミングレジスタ１４０のエントリ番号と、ストア命令にて指定されたアドレスとを対にして保持する。ストアアドレスキュー１５４２は、この情報を先入れ先出し（Ｆｉｒｓｔ  Ｉｎ，Ｆｉｒｓｔ  Ｏｕｔ）のリスト構造で保持して記憶する。
【００３３】
生成部１５４３は、ストアアドレスキュー１５４２は、分岐命令の分岐に関する予測が失敗した場合に、アトミックロードストア命令にて読み出されたデータを書き込むストア命令を生成する。生成部１５４３は、アトミックロードストア命令にて読み出されたアドレス（すなわち、当初のストア命令にて指定されたアドレス）に、アトミックロードストア命令にて読み出されたデータを書き込むストア命令を生成する。生成されたストア命令は、メモリ処理部１５３に送信されてメモリ処理部１５３にて実行される。なお、ストアアドレスキュー１５４２に複数の情報（リネーミングレジスタ１４０のエントリ番号とアドレスとの対）が保持されている場合が想定される。この場合には、生成部１５４３は、アトミックロードストア命令の実行と逆順にてストア命令が生成されるように順次ストア命令を生成する。
【００３４】
（プロセッサの動作）
続いて、本実施形態におけるプロセッサ１０の動作の例を説明する。この例においては、図３に示すプログラムが実行されることを想定する。図４は、図３に示すプログラムがコンパイルされた機械語レベルの命令列の例である。
【００３５】
図２に示すプログラムは、Ｃ言語等のプログラミング言語にて記載されたプログラムである。このプログラムは、メインループである関数ｍａｉｎ（）と関数ｆｕｎｃ（）との２つの部分から構成される。
【００３６】
メインループにおいては、ｆｏｒ文にてループが構成される。このｆｏｒ文のループは、ｉを制御変数として実行される。すなわち、ｉの初期値は０であり、ｆｏｒ文の一回のループにおける処理の実行に応じてｉが１ずつ加算される。そして、ｉが変数ＭＡＸに保持される値より小さい場合にｆｏｒ文のループが繰り返して実行される。すなわち、図２に示すプログラムの例では、ｆｏｒ文のループは、ＭＡＸ回繰り返して実行される。ｆｏｒ文のループにおいては、ｉを引数とする関数Ａ（ｉ）の値を引数として関数ｆｕｎｃが呼び出され、その戻り値が変数ｓに累積して加算される。
【００３７】
関数ｆｕｎｃにおいては、引数を自乗した値が、符号付きの整数型であるｉｎｔ型の変数として戻り値とされる。図３に示すプログラムにおいては、Ａ（ｉ）の値が自乗されて戻り値となる。
【００３８】
一方、図４に示す命令の列では、命令番号が１０００から１００８までの命令が、図２に示すプログラムのメインループに相当する。また、命令番号１００９から１０１２までの命令が、２に示す関数ｆｕｎｃに相当する。この命令の列の概要は以下のようになる。
【００３９】
図４に示す命令の列において、メインループに関しては、まず、１０００番の命令において値Ａ（ｉ）が読み出されてレジスタｓ１へ格納される。ＬＤ命令は、矢印の右側にある値を読み出し、矢印の左側に指定されたレジスタへ格納するロード命令である。続いて、１００１番の命令において、レジスタｓ１の値（すなわち、値Ａ（ｉ））がメモリ７００のアドレスＭ０で指定された領域に書き込まれる。アドレスＭ０の領域は、関数ｆｕｎｃへの引数が格納される領域である。ＳＴ命令は、矢印の左側にて指定されたレジスタの値を矢印の右側に指定されたメモリのアドレスへ書き込むストア命令である。そして、１００２番の命令において、ラベルＦＵＮＣにて指定される位置に命令が格納された関数を呼び出すＣＡＬＬ命令が実行される。すなわち、この命令は、図２に示すプログラムにおける関数ｆｕｎｃを呼び出しに相当する。ＣＡＬＬ命令が実行されることで、処理はラベルＦＵＮＣが付された１００９番の命令へ分岐する。
【００４０】
引き続いて、関数Ｆｆｕｎｃに関する処理が実行される。関数ｆｕｎｃに関する処理として、最初に１００９番の命令において、引数が格納されたアドレスＭ０の領域の値を読み出してレジスタｓ６に格納するＬＤ命令が実行される。続いて、１０１０番の命令にてレジスタｓ６に格納された値の自乗が計算される。求められた値はレジスタｓ７へ格納される。ＭＵＬ命令は、矢印の右側に指定された２つのレジスタの値の乗算を行い、結果を矢印の左側に指定されたレジスタへ格納する命令である。この処理は、図３に示すプログラムおける関数ｆｕｎｃにて引数の自乗を求める処理に相当する。続いて１０１１番の命令であるＳＴ命令が実行されることで、レジスタｓ７に格納された値がメモリ７００のアドレスＭ２で指定される領域へ格納される。アドレスＭ２の領域は、関数ｆｕｎｃからの戻り値が格納される領域である。続いて、１０１２番の命令が実行されることで関数ＦＵＮＣに関する処理が終了する。ＲＥＴ命令は、関数ＦＵＮＣを呼び出した元である１００３番のＣＡＬＬ命令の次の命令（すなわち、１００４番の命令）へ分岐する命令である。
【００４１】
メインループに戻ると、１００３番に規定されるＬＤ命令にて、メモリ７００のアドレスＭ２で指定されるに格納された関数ＦＵＮＣの戻り値が読み出されてレジスタｓ３へ格納される。そして、１００４番に規定される命令にて、レジスタｓ３の値とｓ４の値を加算した値がレジスタｓ４へ格納される。ＡＤＤ命令は、ＭＵＬ命令は、矢印の右側に指定された２つのレジスタの値の加算を行い、結果を矢印の左側に指定されたレジスタへ格納する命令である。この命令は、図３に示すプログラムおいて関数ｆｕｎｃの戻り値が累積して加算される処理に相当する。
【００４２】
続いて、１００５番に規定されるＬＤ命令によって、メモリ７００のアドレスＭ３の領域に格納された値が読み出されてレジスタｓ５へ格納される。アドレスＭ３に格納された値は、図３に示すプログラムにおけるｆｏｒ文の制御変数ｉの値に相当する。その後、１００６番に規定されるＡＤＤ命令にて、レジスタｓ５の値に１が加算されてその値がレジスタｓ５へ格納される。そして、１００７番に規定されるＳＴ命令によって、レジスタｓ５に格納された値がアドレスＭ３の領域へ格納される。この一連の処理は、図３に示すプログラムにおけるｆｏｒ文の制御変数ｉの値に１が加算される処理に相当する。
【００４３】
そして、１００８番に規定される命令によって、レジスタｓ５の値が値ＭＡＸと比較され、レジスタｓ５の値が値ＭＡＸよりも小さい場合にラベルＬＡＢＥＬ０へ分岐する。この処理は、図３に示すプログラムにおいて、ｆｏｒ文の制御変数ｉの値が値ＭＡＸよりも小さい場合に、ｆｏｒ文のループが繰り返される動作に相当する。レジスタｓ５の値が値ＭＡＸ以上である場合には、１００８番の命令に続く命令が実行される。ＢＬ命令は、最初の引数にて指定された条件を満たす場合に次の引数で指定されたラベルへ分岐し、そうではない場合に移行の命令を実行する条件分岐命令である。
【００４４】
プロセッサ１０のプロセッサコア１００は、上述した図４に示す機械語の命令列であるプログラムを以下のように実行する。
【００４５】
なお、以下の実行の例においては、値Ａ（ｉ）、メモリ７００のアドレスＭ０及びＭ２で指定される領域の値は、一次データキャッシュ１６０に格納されていることを想定する。ただし、ｆｏｒ文の制御変数ｉに相当する、メモリ７００のアドレスＭ３で指定される領域の値は、プロセッサ１０が備えるいずれのキャッシュメモリにも格納されていないことを想定する。このような状態は、通常のプログラムの実行に際して、一般的に発生し得る状態である。
【００４６】
また、図７は、リネーミングレジスタ１４０が備える物理レジスタであるエントリと命令との対応を示す。図７に示す例では、命令フェッチ・デコード部１２０にてデコードされた命令に対して、順にリネーミングレジスタのエントリが割当てられる。なお、この実行例においては、ＳＴ命令のように、格納先となる論理レジスタが必要とされない命令に対してもエントリが割当てられる。例えば、図７に示す例では、１００７番にて規定されるＳＴ命令に対してエントリ１１が割当てられている。なお、図７に示す対応は、例えばリネーミングレジスタ１４０によって保持されるが、プロセッサコア１００の他の構成要素によって保持されてもよい。
【００４７】
図５及び図６は、プロセッサ１０のプロセッサコア１００が図４に示す命令の列を実行した場合におけるタイミングチャートの例を示す。図５及び図６は、プロセッサコア１００が、図４に示す命令の列を実行した場合の各クロックサイクルにおけるプロセッサコア１００の各構成要素の動作を、クロックサイクル１から２４サイクル分だけ示すタイミングチャートである。
【００４８】
なお、図５は、プロセッサ１０が備える命令変換部１５４が無効（すなわち、命令変換部１５４が動作しない）とされた場合におけるタイミングチャートの例である。一方、図６は、プロセッサ１０が備える命令変換部１５４が有効（すなわち、命令変換部１５４が動作する）とされた場合におけるタイミングチャートの例である。
【００４９】
図５及び図６に示すタイミングチャートの実行に際しては、プロセッサ１０の実行に関して、以下の想定がなされる。実行制御部１５０は、１クロックサイクルについて最大で２命令を同時に発行可能であることを想定する。実行制御部１５０によって発行された命令は、その種別に応じて、算術演算部１５１、分岐処理部１５２又はメモリ処理部１５３のいずれかで実行される。この場合には、実行制御部１５０によって命令が発行された次のサイクルにて当該命令が実行される。また、算術演算部１５１又はメモリ処理部１５３においては、命令の実行に２サイクルが必要であることを想定する。したがって、算術演算部１５１又はメモリ処理部１５３にて実行された結果を直接に利用する命令は、これらにて実行される命令の少なくとも２クロックサイクル後に実行制御部１５０にて発行される必要がある。更に、実行制御部１５０は、アウトオブオーダ実行が可能であることを想定する。すなわち、実行制御部１５０は、依存関係が解消された（依存関係がない）命令を、元のプログラムと異なる順番にて発行することが可能である。また、図４に示すプログラムは、単純な分岐呼び出しとループにて構成されている。したがって、命令フェッチ・デコード部１２０にて実行される分岐予測により、プロセッサ１０のパイプラインにおいては、分岐の実行を待たずに後の正しい命令が供給されていることを想定する。
【００５０】
図５及び図６に示すタイミングチャートでは、プロセッサコア１００は、１クロックサイクル目から９クロックサイクル目までのサイクルにおいては、それぞれ同様に動作する。まず、クロックサイクル１においては、実行制御部１５０は、１０００番に規定されるＬＤ命令と、１００２番に規定されるＣＡＬＬ命令を同時に発行する。ＬＤ命令はメモリ処理部１５３にて実行されることから、上述のように、この実行には２サイクルが必要となる。
そして、１００１番に規定されるＳＴ命令がメモリ処理部１５３にて実行されると、１０００番のＬＤ命令が実行された結果としてレジスタｓ１に格納された値が参照される。したがって、実行制御部１５０は、１００１番のＳＴ命令を、１０００番のＬＤ命令が発行されたクロックサイクルの２サイクル後に相当するクロックサイクル３にて発行する。
【００５１】
また、メモリ処理部１５３にて１００９番に規定されるＬＤ命令が実行されると、１００１番のＳＴ命令によってアドレスＭ０で指定された領域に格納された値が読み出される。そこで、実行制御部１５０は、１００９番のＬＤ命令を、１００１番のＳＴ命令が発行されるクロックサイクルであるクロックサイクル３の２サイクル後であるクロックサイクル５に発行する。同様に、算術演算部１５１が１０１０番に規定されるＭＵＬ命令を実行すると、１００９番のＬＤ命令にて読み出されてレジスタｓ６に格納された値が参照される。そのため、実行制御部１５０は、１０１０番のＭＵＬ命令を、１００９番のＳＴ命令が発行されるクロックサイクルであるクロックサイクル５の２サイクル後であるクロックサイクル７に発行する。
【００５２】
更に、１０１１番に規定されるＳＴ命令がメモリ処理部１５３にて実行されることで、１０１０番のＭＵＬ命令を算術演算部１５１が実行して求めた値がメモリ７００のアドレスＭ２で指定される領域へ格納される。そのため、実行制御部１５０は、１０１１番のＳＴ命令は、１０１０番のＭＵＬ命令が発行されるクロックサイクルであるクロックサイクル７の２サイクル後であるクロックサイクル９に発行する。アドレスＭ２で指定される領域へ格納される値は、関数ｆｕｎｃの戻り値に相当する。
【００５３】
一方、１０１２番に規定されるＲＥＴ命令は、関数ｆｕｎｃからの戻りに相当するが、先行する命令に対する依存性がない。したがって、このＲＥＴ命令は、先行する命令に関わらず実行可能である。実行制御部１５０は、クロックサイクル６にこのＲＥＴ命令を発行する。なお、アドレスＭ２で指定された領域へ格納された関数ｆｕｎｃの戻り値は、１００３番に規定するＬＤ命令がメモリ処理部１５３にて実行されることでレジスタｓ３に読み出される。そして、更に１００４番に規定するＡＤＤ命令が算術演算部１５１にて実行されることで累積して加算されてレジスタｓ４に格納される。
【００５４】
その後、実行制御部１５０は、上述した各命令と依存関係がないことから、１００５番に規定されるＬＤ命令をクロックサイクル８にて発行する。１００５番のＬＤ命令は、メモリ７００のアドレスＭ３で指定される領域の値を読み出してレジスタｓ５へロードする。しかしながら、上述の想定のように、アドレスＭ３で指定される領域の値は、プロセッサ１０が備えるいずれのキャッシュメモリにも格納されていない。したがって、このＬＤ命令にて読み出された値がレジスタｓ５に格納されるまでには、数十から数百サイクルを要することが考えられる。この場合に、実行制御部１５０は、１００５番のＬＤ命令と依存性がないことから、次のループに相当する１０００番のＬＤ命令や１００２番のＣＡＬＬ命令を発行することは可能である。そして、これらの命令は分岐処理部１５２又はメモリ処理部１５３にて実行される。
【００５５】
しかし、１００８番に規定されるＢＬ命令等は、１００５番のＬＤ命令との間でオペランドの依存関係があることから、実行待ちとされる。すなわち、１００８番に規定されるＢＬ命令の実行は、１００５番のＬＤ命令の実行が完了されるまで保留される。したがって、図５に示すように、プロセッサ１０において命令変換部１５４が無効とされている場合には、実行制御部１５０は、後続の命令を発行することができない。したがって、１００５番のＬＤ命令から後の命令の実行が停止することとなる。
【００５６】
一方で、プロセッサ１０において命令変換部１５４が有効である場合には、プロセッサ１０は、１００５番のＬＤ命令が発行された後には、図６に示すタイミングチャートに沿って以下のように動作する。なお、この例においては、命令フェッチ・デコード部１２０は、図３に示すｆｏｒループに相当するループに関する分岐命令において、ループが繰り返し実行されるように分岐命令が実行されると予測したことを想定する。
【００５７】
命令変換部１５４が有効である場合には、実行制御部１５０は、１００５番のＬＤ命令に引き続いて、図２に示すプログラムにおけるｆｏｒ文に関する次のループの実行に相当する１００１番に規定のＳＴ命令を実行する。なお、このＳＴ命令は、上述した１００８番のＢＬ命令の実行結果に応じて実行の可否が定まる命令である。この場合には、命令変換部１５４の各構成要素が以下のように動作する。
【００５８】
命令変換部１５４において、変換部１５４１は、１００１番のＳＴ命令を実行する際に、投機状態であるか否かに関する情報を実行制御部１５０又は分岐処理部１５２から適宜取得する。この場合においては、投機状態であることから、変換部１５４１は、このＳＴ命令をアトミックロードストア命令に変換してメモリ処理部１５３へ送信する。メモリ処理部１５３は、ＳＴ命令として、変換部１５４１にて変換されたアトミックロードストア命令を受け取って実行する。
【００５９】
なお、メモリ処理部１５３は、アトミックロードストア命令の実行と併せ、ストアアドレスキュー１５４２に、上述のＳＴ命令で書き込みが行われるメモリ７００のアドレスとリネーミングレジスタ１４０との対応に関する情報を登録する。この場合における１００１番のＳＴ命令は、図７に示すように、リネーミングレジスタ１４０のエントリ１４と対応付けられている。したがって、ＳＴ命令にて書き込みが行われるメモリ７００のアドレスであるアドレスＭ０とリネーミングレジスタ１４０のエントリとが対応する旨の情報が、ストアアドレスキュー１５４２に登録される。上述の情報が登録された場合における図８に示す。
【００６０】
メモリ処理部１５３は、最初にアトミックロードストア命令のロード動作を実行する。すなわち、メモリ処理部１５３は、１００１番のＳＴ命令においてデータが格納されることとなるアドレスＭ０の領域に実行時点において格納されているデータを読み出す。アドレスＭ０で指定された領域には、当該ループの前回の実行時に書き込まれたＡ（ｉ）の値である値Ａ（ｉ−１）が格納されている。なお、ロード動作においては、プロセッサ１０が備えるいずれかのキャッシュにアドレスＭ０の領域に格納されたデータが格納されている場合には、当該データが格納されたキャッシュからそのデータが読み出されてもよい。この場合には、そのデータが格納された最も上位の階層のキャッシュからデータが読み出されることが好ましい。そして、メモリ処理部１５３は、読み出された値をリネーミングレジスタ１４０の上述したＳＴ命令に対応するエントリに書き込む。上述のように、この場合における１００１番のＳＴ命令は、リネーミングレジスタ１４０のエントリ１４と対応付けられている。したがって、メモリ処理部１５３は、上述の読み出したデータをリネーミングレジスタ１４０のエントリ１４へ書き込む。
【００６１】
メモリ処理部１５３は、続いて、アトミックロードストア命令のストア動作を投機的に実行する。なお、ストア動作は、ロード動作に続いて他の処理が割り込むことなく実行される。ストア動作において書き込みが行われる値と領域は、変換される前の１００１番のＳＴ命令にて指定された値及び領域と同一である。なお、メモリ処理部１５３は、上述した１００８番に規定されるＢＬ命令が実際に実行され、ストア動作に関する実行の可否が確定するまでは、ストア動作を完了する処理（リタイア処理）を行わない。
【００６２】
メモリ処理部１５３が上述のようにアトミックロードストア命令を実行することで、投機状態においても、上述したストア動作が実行される前にメモリに格納されていた値がリネーミングレジスタ１４０へ格納されている。したがって、命令フェッチ・デコード部１２０において１００８番のＢＬ命令に関する分岐予測が失敗した場合においても、メモリに格納された値をストア動作が投機的に実行される前の状態に戻すことが可能となる。すなわち、命令変換部１５４が有効であることで、投機状態においても、ループにおける後続の命令が実行可能となる。
【００６３】
なお、アトミックロードストア命令として実行されたストア動作に関する実行の可否は、当該ストアに先行しており、未実行である分岐命令が実行された後に定まる。本実行例では、上述した１００５番のＬＤ命令にて値がメモリ７００のアドレスＭ３で指定された領域から読み出され、かつ、読み出された値に基づき１００８番のＢＬ命令が実行されることで、ストア動作に関する実行の可否が定まる。
【００６４】
命令フェッチ・デコード部１２０における分岐予測が成功した場合には、メモリ処理部１５３は、ストア動作に関する完了（リタイア）処理を実行する。分岐予測が成功した場合は、本実施例においては、図３に示すｆｏｒループに相当するループが繰り返して実行されることとなった場合に相当する。メモリ処理部１５３は、実行途中のストア動作がある場合には、当該動作を含めて完了処理を実行する。そして、メモリ処理部１５３は、ストアアドレスキュー１５４２に登録された対応するエントリを開放する。
【００６５】
一方で、分岐予測が失敗した場合（本実施例では、上述のループが繰り返して実行されない場合）には、命令変換部１５４のストア生成部１５４３は、メモリ７００の状態を投機的なストア動作が行われる前の状態に復帰させる。ストア生成部１５４３は、具体的な一例として、以下の動作を行う。
【００６６】
ストア生成部１５４３は、ストアアドレスキュー１５４２に格納された複数の対応関係に関する情報を、最も新しく登録された情報から古く登録された情報への順にて順番に読み出す。本実行例においては、図８に示すように、メモリ７００のアドレスＭ０とリネーミングレジスタ１４０のエントリ１４との対応に関する情報が読み出される。
【００６７】
続いて、ストア生成部１５４３は、ストアアドレスキュー１５４２から読み出した情報に基づいてリネーミングレジスタ１４０を参照し、リネーミングレジスタ１４０に格納されている値を読み出す。本実行例においては、ストア生成部１５４３は、リネーミングレジスタ１４０のエントリ１４に格納された値を読み出す。このエントリには、アトミックロードストア命令のストアが実行される前にメモリ７００のアドレスＭ０に格納されていたデータが保持されている。このデータは、上述のアトミックロードストア命令に変換された１００１番のＳＴ命令に関連するループの前回の実行時に書き込まれた値Ａ（ｉ−１）に相当する。
【００６８】
続いて、ストア生成部１５４３は、上述のようにリネーミングレジスタ１４０から読み出した値をストアアドレスキュー１５４２から読み出した情報にて指定されたアドレスへ書き込むＳＴ命令を生成する。この実行例においては、ストア生成部１５４３は、リネーミングレジスタ１４０のエントリ１４から読み出した値Ａ（ｉ−１）をメモリ７００のアドレスＭ０で指定される領域へ書き込むＳＴ命令を生成する。
【００６９】
続いて、ストア生成部１５４３は、生成したＳＴ命令を実行する。この場合に、ストア生成部１５４３は、プロセッサ１００が備えるキャッシュメモリのいずれか及びメモリ７００を対象としてＳＴ命令を実行する。
【００７０】
すなわち、本実行例では、アドレスＭ０に格納されているデータが、プロセッサ１００が備えるキャッシュメモリのいずれかにも格納されている場合には、ストア生成部１５４３は、当該キャッシュメモリを対象としてＳＴ命令を実行する。また、アドレスＭ０に格納されているデータが、プロセッサ１００が備えるキャッシュメモリのいずれにも格納されていない場合には、ストア生成部１５４３は、メモリ７００を対象としてＳＴ命令を実行する。また、この場合においては、ストア生成部１５４３は当該ＳＴ命令をメモリ処理部１５３へ送信し、メモリ処理部１５３が当該ＳＴ命令を実行してもよい。
【００７１】
なお、ストアアドレスキュー１５４２に複数の対応関係に関する情報が保持されている場合には、ストア生成部１５４３は、上述した動作を、ストアアドレスキュー１５４２が保持する複数の対応関係の全てに対して繰り返して実行する。
この場合には、ストア生成部１５４３は、ストアアドレスキュー１５４２に格納された複数の対応関係に関する情報を、最も新しく登録された情報から古く登録された情報への順にて上述した動作を実行する。
【００７２】
上述した分岐予測が失敗した場合における動作は、一般に、実行に際して必要となるクロックサイクル数が多い。すなわち、上述した動作は、コストの大きな処理となる場合が多い。しかしながら、命令フェッチ・デコード部１２０に含まれる分岐予測機能として一般に知られた分岐予測の技術が用いられることで、分岐予測が失敗する確率は非常に小さくなることが想定される。すなわち、本実施形態におけるプロセッサ１０にて一般的なプログラムが実行される場合には、上述した分岐予測が失敗した場合における動作が生じる頻度は非常に小さいことが想定される。したがって、命令変換部１５４は、プロセッサ１０の性能の向上に寄与する。
【００７３】
以上のとおり、本発明の第１の実施形態におけるプロセッサ１０は、変換部１５４１、ストアアドレスキュー１５４２及び生成部１５４３を備える命令変換部１５４を有する。
【００７４】
変換部１５４１は、投機状態において、ストア命令をアトミックロードストア命令に変換する。アトミックロードストア命令は、上述のストア命令にてデータが書き込まれるメモリ等の領域に保持されていたデータをリネーミングレジスタ１４０に退避するロード動作と、当該ストア命令に相当するストア動作を実行する。このようにすることで、本実施形態におけるプロセッサ１０は、投機状態におけるストア命令の投機的な実行と、当該投機状態に関する分岐予測が失敗した場合におけるメモリに格納された値の復帰が可能となる。
【００７５】
また、ストアアドレスキュー１５４２は、アトミックロードストア命令の実行に際し、メモリ７００のアドレスと、当該アドレスに格納されていた値を保持するリネーミングレジスタ１４０のエントリとの対応に関する情報を記憶する。更に、生成部１５４３は、上述した投機状態に関連する分岐予測が失敗した場合に、アトミックロードストア命令にて値が書き込まれたメモリ等の領域に、当該命令の実行前に保持されていた値を書き込むストア命令を生成する。このようにすることで、アトミックロードストア命令に関する分岐予測が失敗した場合に、メモリに格納された値を実際に復帰させることが可能となる。
【００７６】
したがって、本実施形態におけるプロセッサ１０は、単純な構成で投機状態におけるストア動作を可能とする。
【００７７】
なお、本実施形態においては、プロセッサ１０の構成やその実現方法は任意である。プロセッサ１０（又はプロセッサコア１００）は、命令変換部１５４の各構成要素（少なくとも変換部１５４１）を備えていればよい。そして、上述したＬＤ命令又はＳＴ命令等の一般的なメモリアクセス命令が実行可能であれば、プロセッサ１０の命令変換部１５４を除く他の構成として、任意の構成が採用され得る。また、プロセッサ１０が実行可能な命令セットは、上述したＬＤ命令又はＳＴ命令等の一般的なメモリアクセス命令が含まれていれば、任意の命令を含んでもよい。
【００７８】
また、本実施形態においては、命令変換部１５４に含まれる各構成要素の実現方法は任意である。例えば、変換部１５４１及び生成部１５４３が一つの回路や機能ブロックとして実現されてもよい。
【００７９】
以上、実施形態を参照して本発明を説明したが、本発明は上記実施形態に限定されるものではない。本発明の構成や詳細には、本発明のスコープ内で当業者が理解し得る様々な変更をすることができる。また、各実施形態における構成は、本発明のスコープを逸脱しない限りにおいて、互いに組み合わせることが可能である。
【符号の説明】
【００８０】
１０    プロセッサ
１００、２００、３００、４００    プロセッサコア
１１０    一次命令キャッシュ
１２０    命令フェッチ・デコード部
１３０    依存性解析部
１４０    リネーミングレジスタ
１５０    実行制御部
１５１    算術演算部
１５２    分岐処理部
１５３    メモリ処理部
１５４    命令変換部
１５４１    変換部
１５４２    ストアアドレスキュー
１５４３    生成部
１６０    一次データキャッシュ
１７０    二次キャッシュ
５００    コア間ネットワーク
６００    ＬＬＣ
７００    メモリ
【図１】
2017054302.tif 000003
【図２】
2017054302.tif 000004
【図３】
2017054302.tif 000005
【図４】
2017054302.tif 000006
【図５】
2017054302.tif 000007
【図６】
2017054302.tif 000008
【図７】
2017054302.tif 000009
【図８】
2017054302.tif 000010
【手続補正書】
【提出日】平成29年1月18日(2017.1.18)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
第１のストア命令よりも先行し、かつ、未実行である分岐命令が存在する場合に、所定のアドレスに対して第１のデータを書き込むための前記第１のストア命令を、前記アドレスに記憶された第２のデータの読み出しと前記アドレスに対する前記第１のデータの書き込みを一連に行うためのロードストア命令に変換する変換手段を備えるプロセッサ。
【請求項２】
前記分岐命令の分岐に関する予測が失敗した場合に、前記アドレスに対して前記第２のデータを書き込むための第２のストア命令を生成する生成手段を備える、請求項１に記載のプロセッサ。
【請求項３】
前記アドレスと、前記ロードストア命令により読み出された前記第２のデータを格納するレジスタに関する情報との関係を保持するストアアドレスキューを備える、請求項２に記載のプロセッサ。
【請求項４】
前記生成手段は、前記ストアアドレスキューに保持された前記関係に基づいて前記第２のストア命令を生成する、請求項３に記載のプロセッサ。
【請求項５】
前記生成手段は、前記ストアアドレスキューに複数の前記関係が保持されている場合に、前記ストアアドレスキューに複数の前記関係の各々が保持された順と逆の順番で、複数の前記関係の各々に関する前記第２のストア命令を生成する、請求項４に記載のプロセッサ。
【請求項６】
前記ロードストア命令を少なくとも実行するメモリ処理手段を備える、請求項１から５のいずれか一項に記載のプロセッサ。
【請求項７】
前記メモリ処理手段は、前記分岐命令の分岐に関する予測が成功した場合に、前記ロードストア命令の完了処理を実行する、請求項６に記載のプロセッサ。
【請求項８】
前記メモリ処理手段は、前記第１のストア命令よりも先行し、かつ、未実行である分岐命令が存在しない場合に、前記第１のストア命令を実行する、請求項６又は７に記載のプロセッサ。
【請求項９】
第１のストア命令よりも先行し、かつ、未実行である分岐命令が存在する場合に、所定のアドレスに対して第１のデータを書き込むための前記第１のストア命令を、前記アドレスに記憶された第２のデータの読み出しと前記アドレスに対する前記第１のデータの書き込みを一連に行うためのロードストア命令に変換し、
前記アドレスと、前記ロードストア命令により読み出された前記第２のデータを格納するレジスタに関する情報との関係を示す情報を保持し、
前記分岐命令の分岐に関する予測が失敗した場合に、前記アドレスに対して前記第２のデータを書き込むための命令を生成する、ストア命令の変換方法。