以下に、本願の開示する演算処理装置及び演算処理装置の制御方法の実施例を図面に基づいて詳細に説明する。なお、以下の実施例により本願の開示する演算処理装置及び演算処理装置の制御方法が限定されるものではない。
図1は、情報処理装置の構成の一例を表す図である。情報処理装置100は、例えば、CPU(Central Processing Unit)1、メインメモリ2及びハードディスク3を有する。CPU1、メインメモリ2及びハードディスク3は、バスで接続され、互いに通信を行う。CPU1は、1つ又は複数のコア10を有する。このコア10が、「演算処理装置」の一例にあたる。
メインメモリ2には、プログラムが展開されることで生成されたプロセスに含まれる命令列が格納される。命令列には、加算や減算などを実行させる演算命令及びデータの読み出し又は書き込みを行わせるロードストア命令が含まれる。
図2は、コアのブロック図である。コア10は、命令キャッシュ11、 命令バッファ12、デコード部13、リザベーションステーション14、演算実行部15及びロードストアユニット16を有する。
図2に示す命令キャッシュ11は、メインメモリ2上に展開されたプロセスが動作することで、メインメモリ2に格納された命令列に含まれる命令が格納される。命令キャッシュ11に格納された命令はデコード部13に読み出され、命令バッファ12に格納される。命令バッファ12に格納された命令は、デコード部13に順次出力される。
デコード部13は、命令キャッシュ11に格納された命令を読み出し、命令バッファ12に格納する。そして、デコード部13は、命令バッファ12に格納された命令の入力を受ける。そして、デコード部13は、取得した命令を解釈し、その命令が演算命令かロードストア命令かを判定する。
デコード部13は、仮LDSTQ管理部131を有する。そして、デコード部13は、後述する仮LDSTQ管理部131によりロードストア命令が出力可能と判定された場合、ロードストア命令に仮LDSTQ番号を割り当て、LDSTQ161のエントリの仮割り当てを行う。ここで、仮LDSTQ番号は、ロードストア命令に対してLDSTQ161のエントリに仮割り当てを行うための番号である。本実施例では、仮LDSTQ番号は、グループ番号と実際のLDSTQ161のエントリを表すLDSTQ番号との組み合わせで表される。このように仮LDSTQ番号を設定することで、仮LDSTQ番号から容易にLDSTQ番号を生成でき、ロードストア命令に対するLDSTQ161のエントリの仮割り当てを実際の割り当てに変更することが容易となる。ただし、仮LDSTQ番号は、ロードストア命令の処理順が判定できる番号であり、且つ、LDSTQ番号に変換する機構があれば他の番号を割り当ててもよい。
その後、デコード部13は、仮LDSTQ番号を割り当てたロードストア命令をリザベーションステーション14のRSA142へ出力する。また、演算命令の場合、デコード部13は、取得した演算命令をリザベーションステーション14のRSE141へ順次出力する。
ここで、デコード部13は、命令発行を命令が発行された順序通り(インオーダ)で出力する。そのため、例えば、ある命令の出力が待機状態の場合、デコード部13は、その出力を待機させている命令以降の命令の出力も待機することになる。このデコード部13が、「命令管理部」及び「命令管理回路」の一例にあたる。
仮LDSTQ管理部131は、デコード部13から出力されたロードストア命令の数をカウントする。さらに、仮LDSTQ管理部131は、後述するLDSTQ161からLDSTQ解放信号を取得する。LDSTQ解放信号は、LDSTQ161におけるロードストア命令が格納された領域であるエントリからロードストア命令がデータキャッシュ162へ出力されそのエントリが解放された場合にLDSTQ161から出力される信号である。ここで、LDSTQ161は、ロードストア命令を格納可能な上限数を有する。以下では、LDSTQ161におけるロードストア命令を格納可能な上限数をLDSTQ161の「エントリ数」という。すなわち、LDSTQ解放信号は、LDSTQ161のエントリが解放されたことを表す信号である。LDSTQ161のエントリ数が、「第1個数」の一例にあたる。
ここで、仮LDSTQ管理部131は、LDSTQ161のエントリ数より大きい命令発行上限数を予め有する。例えば、仮LDSTQ管理部131は、LDSTQ161のエントリ数の4倍の数を命令発行上限数として記憶する。ここで、命令発行上限数は、LDSTQ161のエントリ数より大きければどのような値を用いてもよい。命令発行上限数が大きいほど、RSE141及びRSA142のアウトオブオーダ性能を向上させることができる。上述したデコード部13が発行可能な仮LDSTQ番号の数は、この命令発行上限数が上限となる。この命令発行上限数が、「第2個数」の一例にあたる。
仮LDSTQ管理部131は、デコード部13が出力したロードストア命令のうち未だLDSTQ161から出力されていないロードストア命令の数であるロードストア命令の滞留数を求める。そして、仮LDSTQ管理部131は、ロードストア命令の滞留数が命令発行上限未満か否かを判定する。
ロードストア命令の滞留数が命令発行上限以上の場合、仮LDSTQ管理部131は、デコード部13からのロードストア命令の出力を待機させる。これに対して、ロードストア命令の滞留数が命令発行上限未満の場合、仮LDSTQ管理部131は、ロードストア命令を出力したことを表すRSA142の解放信号をRSA142から取得したか否かを判定する。
RSA142の解放信号を受信した場合、仮LDSTQ管理部131は、ロードストア命令を格納するための空きがRSA142に存在すると判定する。そして、ロードストア命令を格納するための空きがRSA142に存在する場合、仮LDSTQ管理部131は、ロードストア命令が出力可能であることをデコード部13へ通知し、デコード部13からロードストア命令をリザベーションステーション14のRSA142へ出力させる。
リザベーションステーション14は、演算命令を蓄積するRSE141及びロードストア命令を蓄積するRSA142を有する。
RSE141は、演算命令の入力をデコード部13から受ける。RSE141は、取得した演算命令を蓄積する。そして、RSE141は、蓄積した演算命令の中から出力する演算命令を選択する。その後、RSE141は、選択した演算命令で指定された加算や減算を表す命令コードを固定小数点演算器151へ出力する。さらに、RSE141は、選択した演算命令で指定される固定小数点レジスタ(GPR:General Purpose Register)番号をGPR152へ出力する。
RSA142は、仮LDSTQ番号とともにロードストア命令の入力をデコード部13から受ける。RSA142は、取得したロードストア命令を仮LDSTQ番号とともに蓄積する。そして、RSA142は、蓄積したロードストア命令の中から出力するロードストア命令を選択する。その後、RSA142は、選択したロードストア命令においてデータの読み出し又は書き込みなどを表す命令コードを仮LDSTQ番号とともにLDSTQ管理部150へ出力する。また、RSA142は、選択したロードストア命令で指定される固定小数点レジスタ番号をGPR152へ出力する。さらに、RSA142は、ロードストア命令を出力したことを表すRSA142の解放信号をデコード部13へ出力する。
RSA142は、LDSTQ161へ出力されなかったロードストア命令の入力をLDSTQ管理部150から受ける。さらに、RSA142は、戻されたロードストア命令とともに、インターロック信号の入力をLDSTQ管理部150から受ける。そして、RSA142は、戻されたロードストア命令にインターロックを掛けてそのロードストア命令の出力を待機する。
この時、RSA142は、インターロックを掛けていないロードストア命令についてはLDSTQ管理部150への出力を継続する。そのため、RSA142は、複数のロードストア命令がインターロック信号とともにLDSTQ管理部150から戻される場合がある。その場合、RSA142は、戻されたロードストア命令の全てにインターロックを掛け出力を待機する。これにより、LDSTQ161が長時間解放されない場合に、RSA142が繰り返し同じロードストア命令を発行してしまい、他の命令の発行を妨げてコア10の処理性能が低下してしまうことを防ぐことができる。
その後、RSA142は、LDSTQ解放信号の入力をLDSTQ161から受ける。そして、LDSTQ解放信号の入力をトリガとして、RSA142は、インターロックを掛けた全てのロードストア命令のインターロックを解除する。そして、RSA142は、インターロックを解除したロードストア命令の再発行を含む保持する全てのロードストア命令の出力を順次行う。このRSA142が、「蓄積部」の一例にあたる。
ここで、LDSTQ161の開放は本来の命令順にしたがって行われる。そこで、前のロードストア命令が出力されない場合、その後のロードストア命令を格納するエントリも解放されない。そのため、ひとたびLDSTQ161からLDSTQ解放信号が出力された場合、RSA142は、連続でLDSTQ161からLDSTQ解放信号の入力を受ける可能性が高い。そこで、RSA142は、1つのLDSTQ解放信号を受けた際に、全てのインターロックを解除することで、その後に解放信号を受ける可能性の高いロードストア命令を前もって出力することができる。これにより、LDSTQ解放信号が出力されるタイミングでの新しいロードストア命令のLDSTQ161への格納が可能となり、ロードストア命令のLDSTQ161への格納の効率が向上する。さらに、このインターロックの解除には、LDSTQ161のエントリ番号の把握や空き数の勘定を用いないので、コア10における回路増加が抑えられる。
固定小数点演算器151は、命令コードの入力をRSE141から受ける。また、固定小数点演算器151は、演算結果の書き込み先の固定小数点レジスタ番号の入力をRSE141から受ける 。また、固定小数点演算器151は、GPR152から出力されたデータの入力を受ける。そして、固定小数点演算器151は、GPR152から取得したデータを用いて命令コードにしたがって演算を行う。その後、固定小数点演算器151は、書き込み先の固定小数点レジスタ番号で指定されたGPR152における位置に演算結果を書き込む。
GPR152は、固定小数点レジスタ番号の入力をRSE141から受ける。そして、GPR152は、入力された固定小数点レジスタ番号が示す位置に格納されたデータを固定小数点演算器151へ出力する。その後、GPR152は、固定小数点演算器151により指定された格納先の固定小数点レジスタ番号が示す位置に、固定小数点演算器151による演算結果を格納する。
また、GPR152は、固定小数点レジスタ番号の入力をRSA142から受ける。そして、GPR152は、入力された固定小数点レジスタ番号が示す位置に格納されたデータをアドレス生成演算部153へ出力する。
LDSTQ管理部150は、LDSTQ161のエントリ数の情報を予め有する。LDSTQ管理部150は、ロードストア命令の命令コードの入力をRSA142から受ける。また、LDSTQ管理部150は、LDSTQ解放信号の入力をLDSTQ161から受ける。
LDSTQ管理部150は、自己がLDSTQ161へ出力したロードストア命令の数とLDSTQ161から入力されたLDSTQ解放信号から、LDSTQ161が保持するロードストア命令の数を求める。そして、LDSTQ管理部150は、LDSTQ161が保持するロードストア命令の数がLDSTQ161のエントリ数未満か否かを判定する。
LDSTQ161が保持するロードストア命令の数がLDSTQ161のエントリ数未満であれば、LDSTQ管理部150は、RSA142から入力されたロードストア命令の命令コードをアドレス生成演算部153へ出力する。一方、LDSTQ161が保持するロードストア命令の数がLDSTQ161のエントリ数以上の場合、LDSTQ管理部150は、LDSTQ161がフル、すなわちRSA142から入力されたロードストア命令の格納場所がLDSTQ161に無いと判定する。LDSTQ161がフルの場合、LDSTQ管理部150は、RSA142から入力されたロードストア命令をRSA142へ戻すとともにインターロック信号をRSA142へ送信する。RSA142から入力されたロードストア命令をRSA142へ戻すことは、LDSTQ管理部150がそのロードストア命令を破棄し、RSA142にそのロードストア命令の再送信を要求することにあたる。このLDSTQ管理部150が、「格納管理部」及び「格納管理回路」の一例にあたる。
アドレス生成演算部153は、ロードストア命令の命令コードの入力をLDSTQ管理部150から受ける。さらに、アドレス生成演算部153は、計算に使用する値の入力をGPR152から受ける。そして、アドレス生成演算部153は、GPR152から入力された値を用いてアドレスを生成する。例えば、アドレス生成演算部153は、GPR152から入力された値を所定倍するなどしてアドレスを生成する。てそして、アドレス生成演算部153は、生成したアドレスと命令コードをLDSTQ161へ出力し、生成したアドレス及び命令コードをLDSTQ161に格納する。
LDSTQ161は、ロードストア命令の命令コード及び処理対象のアドレスの入力をアドレス生成演算部153から受ける。そして、LDSTQ161は、アドレス生成演算部153からエントリ数を上限としてロードストア命令の命令コード及び処理対象のアドレスを格納する。ここでは、LDSTQ161におけるロードストア命令の命令コード及び処理対象のアドレスの格納を、単にLDSTQ161におけるロードストア命令の格納という。LDSTQ161は、処理順にロードストア命令を格納する。
そして、LDSTQ161は、処理の順番が早い順にロードストア命令を処理する。具体的には、LDSTQ161は、1つ前のロードストア命令の処理が完了すると、次のロードストア命令で指定されたアドレスをデータキャッシュ162に送信し、命令コードで指定された処理を実行させる。そして、LDSTQ161は、格納したロードストア命令の処理が完了すると、LDSTQ解放信号をデコード部13、RSA142及びLDSTQ管理部150へ出力する。ここで、データキャッシュ162によるキャッシュミスなどでロードストア命令が完了しなかった場合、既に出力されたロードストア命令は中断され、LDSTQ161は、同じロードストア命令を再発行する。このLDSTQ161が、「格納部」の一例にあたる。
データキャッシュ162は、命令コード及びアドレスの入力をLDSTQ161から受ける。そして、データキャッシュ162は、指定されたアドレスに対応するデータが有る場合、そのデータを用いて処理を行う。
ロード命令の場合、指定されたアドレスにデータが無ければ、データキャッシュ162は、メインメモリ2からデータを取得する。そして、データキャッシュ162は、取得したデータを自己に格納するとともに取得したデータをGPR152に格納する。また、ストア命令の場合、データキャッシュ162は、取得したデータを自己に格納するとともに取得したデータをメインメモリ2の指定されたアドレスに格納する。
次に、図3を参照して、命令パイプラインにおける処理段階に沿って命令処理の流れについて説明する。図3は、実施例1に係るコアにおける命令パイプラインの詳細を表す図である。すなわち、図3は、実施例1に係るコア10による各種命令の処理の流れを表す。図3におけるロードストアパイプライン200は、ロードストア命令を処理する経路を表す。また、演算パイプライン300は、演算命令を処理する経路である。
命令パイプラインは、複数の処理段階(パイプラインステージ)を有する。処理段階には、例えば、D(Decode)サイクル及びDT(Decode Transfer)サイクルと呼ばれる処理段階が存在する。Dサイクル及びDTサイクルは、ロードストア命令及び演算命令の双方に共通の処理段階である。
さらに、処理段階には、P(Priority)サイクル、PT(Priority Transfer)サイクル、B(Buffer)1サイクル、B(Buffer)2サイクル、A(Address Generate)サイクル及びX(eXecution)サイクルと呼ばれる処理段階が存在する。
ロードストア命令は、Pサイクル、PTサイクル、B1サイクル、B2サイクル及びAサイクルの5つの処理段階を有するロードストアパイプライン200で実行される。ロードストアパイプライン200は、RSA142からLDSTQ161までの経路に対応する。
演算命令は、Pサイクル、PTサイクル、B1サイクル、B2サイクル及びXサイクルの5つの処理段階を有する演算パイプライン300で実行される。演算パイプライン300は、RSE141から固定小数点演算器151までの経路に対応する。
Dサイクルでは、デコード部13が命令バッファ12から命令を取得する。そして、デコード部13は、取得した命令をデコードし、デコードした命令をリザベーションステーション14のRSE141又はRSA142へ送るためにフリップフロップ17へ出力する。Dサイクルでは、デコード部13により、LDSTQ161へ向けて出力されるロードストア命令の数の管理や、ロードストア命令に対するLDSTQ161のエントリの仮の割り当てが行われる。ここで、仮の割当とは、LDSTQ161のエントリ数を仮想的に増やした識別情報を仮想のエントリとしてロードストア命令に割り当てることを指す。
DTサイクルでは、Dサイクルでデコードされた命令がフリップフロップ17を経由して転送され、リザベーションステーション14のRSE141又はRSA142に格納される。
次に、ロードストアパイプライン200の各処理段階について説明する。Pサイクルでは、リザベーションステーション14のRSA142が有する命令の中から、エントリ選択部201が、アドレス生成演算部153へ投入する命令を決定する。そして、エントリ選択部201は、決定した命令のデータをフリップフロップ202へ出力する。
PTサイクルでは、Pサイクルで決定された命令の命令コードが、フリップフロップ202からフリップフロップ203へ転送される。また、Pサイクルで決定された命令固定小数点レジスタ番号がレジスタ番号転送部521に送られる。
B1サイクル及びB2サイクルでは、固定小数点レジスタ番号がレジスタ番号転送部521からレジスタ番号転送部522を経由してリードポート523へ入力される。そして、リードポート523は、取得した固定小数点レジスタ番号に応じた位置にあるデータをアドレス生成演算に用いられるデータと決定し、アドレス生成演算に用いられるデータをGPR152から読み出す。そして、リードポート523は、アドレス生成演算に用いられるデータをデータ転送部524へ出力する。また、B1サイクル及びB2サイクルでは、GPR152からデータが読み出されるタイミングに合わせてフリップフロップ203〜205によりデータに遅延が与えられる。それととともに、LDSTQ管理部150は、LDSTQ161から出力されたLDSTQ解放信号を用いて、Dサイクルで仮に割り当てたエントリに対応する実際にLDSTQ161のエントリが空いているか否かのチェックを行う。LDSTQ161のエントリが空いている場合、LDSTQ管理部150は、アドレス生成演算部153へ入力する命令コードをフリップフロップ205へ出力する。一方、LDSTQ161のエントリが空いていない場合、LDSTQ管理部150は、RSA142へ戻す命令コードをフリップフロップ205へ出力するとともに、インターロック信号をフリップフロップ205へ出力する。
Aサイクルでは、LDSTQ161のエントリが空いていない場合、フリップフロップ205を経由した命令コードは、RSA142へ戻される。さらに、フリップフロップ205を経由したインターロック信号がRSA142へ送信される。これに対して、LDSTQ161のエントリが空いている場合、フリップフロップ205を経由した命令コードは、アドレス生成演算部153へ入力される。さらに、データ転送部524から出力されたアドレス生成演算に用いられるデータがアドレス生成演算部153に入力される。そして、アドレス生成演算部153は、アドレス生成演算を行い、生成したアドレス及びロードストア要求をLDSTQ161へ送る。LDSTQ161は、アドレスをデータキャッシュ162に対して出力しロードストアの処理を実行させると、LDSTQ解放信号をRSA142及びLDSTQ管理部150へ出力する。
LDSTQ管理部150は、実際のLDSTQ161のエントリ数を用いてロードストア命令がエントリに割り当て可能か否か、すなわち、ロードストア命令をLDSTQ161に格納可能か否かを判定する。ロードストア命令がエントリに割り当て可能な場合、デコード部13によりに与えられた仮のエントリがLDSTQ管理部150においてLDSTQ161の実際のエントリに変更される。このように、デコード部13においてLDSTQ161のエントリ数よりも大きい命令発行上限数を上限としてロードストア命令に仮のエントリ番号が割り当てられる。そして、後ろの処理段階であるB2サイクルに配置されたLDSTQ管理部150において、LDSTQ161の実際の空きがチェックされる。これにより、LDSTQ解放信号がLDSTQ161から出力されてからLDSTQ161のエントリに新たにロードストア命令が割り当てられるまでのサイクル数を短縮することができる。すなわち、LDSTQ161のエントリが解放されてから、その空いたエントリが埋まるまでのサイクル数を短縮することができる。
例えば、デコード部13で実際のLDSTQ161のエントリをロードストア命令に割り当てる場合、空いたエントリが埋まるまでのサイクルは、最大でDサイクルからAサイクルまでの7サイクルかかる。これに対して、LDSTQ管理部150で実際のLDSTQ161のエントリをロードストア命令に割り当てる場合、空いたエントリが埋まるまでのサイクルは、最大でB2サイクル及びAサイクルの2サイクルに短縮することができる。また、インターロックがRSA142でかかっている場合であっても、LDSTQ解放信号が出力されてから空いたエントリが埋まるまでのサイクルは、最大でPサイクルからAサイクルまでの5サイクルに短縮することができる。
ここで、LDSTQ管理部150は、LDSTQ161に格納するロードストア命令が選択されてからロードストア命令に対して実際のLDSTQ161のエントリの割り当てを行うことで処理を減らしている。例えば、RSA142において仮の割り当てを実際のLDSTQ161のエントリへの割り当てに変換できるかを判定する場合、RSA142が保持するロードストア命令全てに対して判定を行う機構が配置される。RSA142は、最大で命令発行上限数のロードストア命令を保持するため、実際のLDSTQ161のエントリへの割り当て判定用の機構が配置される。このようにLDSTQ161に格納するロードストア命令の選択前の段階で判定を行う場合、回路規模が大きくなってしまう。そこで、LDSTQ管理部150は、エントリ選択部201の後に配置されることが好ましい。そして、LDSTQ管理部150は、エントリ選択部201とアドレス生成演算部153の間であればどの場所に配置することも可能であるが、なるべくアドレス生成演算部153に近い場所に配置することが好ましい。アドレス生成演算部153に近いほど、LDSTQ解放信号が出力されてから空いたエントリが埋まるまでのサイクルを短縮することができるからである。
次に、演算パイプライン300の各処理段階について説明する。Pサイクルでは、リザベーションステーション14のRSE141が有する命令の中から、エントリ選択部301が、演算実行部15の固定小数点演算器151へ投入する命令を決定する。そして、エントリ選択部301は、決定した処理をフリップフロップ302へ出力する。
PTサイクルでは、Pサイクルで決定された命令の命令コードが、フリップフロップ302からフリップフロップ303へ転送される。また、Pサイクルで決定された命令固定小数点レジスタ番号がレジスタ番号転送部525へ送られる。
B1サイクル及びB2サイクルでは、固定小数点レジスタ番号がレジスタ番号転送部525からレジスタ番号転送部526を経由してリードポート527へ入力される。そして、リードポート527は、取得した固定小数点レジスタ番号に応じた位置にあるデータをアドレス生成演算に用いられるデータと決定し、固定小数点演算に用いられるデータをGPR152から読み出す。そして、リードポート527は、固定小数点演算に用いられるデータをデータ転送部528へ出力する。また、B1サイクル及びB2サイクルでは、GPR152からデータが読み出されるタイミングに合わせてフリップフロップ303〜305により固定小数点演算器151に送られる命令コードに遅延が与えられる。
Xサイクルでは、フリップフロップ305から、固定小数点演算の命令コードが固定小数点演算器151へ入力される。さらに、データ転送部528から出力された固定小数点演算に用いられるデータが固定小数点演算器151に入力される。そして、固定小数点演算器151は、固定小数点演算を行い、格納先の固定小数点レジスタ番号で表されるGPR152における位置に演算結果を格納する。
次に、図4を参照して、デコード部13のロードストア命令に対するLDSTQ161のエントリの仮の割り当て及びロードストア命令のRSA142への発行の具体的な回路の一例について説明する。図4は、デコード部の回路構成の一例を表すブロック図である。
本実施例では、デコード部13は、ロードストア命令に対するLDSTQ161のエントリの仮の割り当てとして、ロードストア命令にLDSTQ161のエントリ数を上限としたLDSTQ番号とグループ番号とを組にして表す仮LDSTQ番号を割り当てる。ここでは、LDSTQ161のエントリ数を10個とし、命令発行上限数をLDSTQ161のエントリ数の4倍の40個とした場合で説明する。すなわち、命令発行上限数は、40となる。
命令解釈回路403は、命令バッファ12から入力された命令が演算命令かロードストア命令かを判定する。命令解釈回路403は、命令が演算命令の場合は0をNAND(Not AND)ゲート404及びANDゲート406へ出力し、命令がロードストア命令の場合は1をNANDゲート404及びANDゲート406へ出力する。
仮LDSTQ番号発行数カウンタ401は、デコード部13から発行され且つLDSTQ161で処理が完了していないロードストア命令に発行した仮LDSTQ番号の数、すなわちロードストア命令の滞留数のカウンタである。仮LDSTQ番号発行数カウンタ401は、減算器408と加算器409とによる計算結果の入力を受ける。そして、仮LDSTQ番号発行数カウンタ401は、自己が有するカウンタに入力された値を加えたカウント値をロードストア命令の滞留数として求める。そして、仮LDSTQ番号発行数カウンタ401は、算出したロードストア命令の滞留数をFull判定回路402へ出力し、さらに、カウント値を表す信号を減算器408へ出力する。
Full判定回路402は、デコード部13から発行され且つLDSTQ161で処理が完了していないロードストア命令に発行した仮LDSTQ番号の数、すなわちロードストア命令の滞留数の入力を仮LDSTQ番号発行数カウンタ401から受ける。Full判定回路402は、ロードストア命令の滞留数が命令発行上限数である40であるか否かを判定する。ロードストア命令の滞留数が40でなければ、Full判定回路402は、0をNANDゲート404へ出力する。これに対して、ロードストア命令の滞留数が40の場合、Full判定回路402は、1をNANDゲート404へ出力する。
NANDゲート404は、命令がロードストア命令か否かを表す信号の入力を命令解釈回路403から受ける。また、NANDゲート404は、ロードストア命令の滞留数が命令発行上限数に達しているか否かを表す信号をFull判定回路402から受ける。そして、NANDゲート404は、入力された2つの信号の否定論理積を出力する。すなわち、命令がロードストア命令であり且つロードストア命令の滞留数が命令発行上限数に達していない場合、NANDゲート404は、ロードストア命令の発行を表す信号として0をANDゲート405へ出力し、それ以外の場合、ロードストア命令の不発行を表す信号として1をANDゲート405へ出力する。
ANDゲート405は、命令バッファ12から命令が入力されたか否かを表す信号、すなわち命令バッファ12から有効な命令が入力されたか否かを表す有効信号の入力を受ける。ANDゲート405は、命令バッファ12から命令が入力された場合には1の入力を受け、命令バッファ12からの命令の入力が無い場合は0の入力を受ける。また、ANDゲート405は、NANDゲート404からロードストア命令が発行されたか否かを表す信号の入力を受ける。そして、ANDゲート405は、入力された2つの信号の論理積を出力する。すなわち、ANDゲート405は、命令バッファ12から命令が入力され且つロードストア命令の発行の場合に1をANDゲート406及びRSA142へ出力し、それ以外の場合に0をANDゲート406、RSA142及び命令バッファ12へ出力する。命令バッファ12は、ANDゲート405から1の信号の入力を受けると、次の命令を出力する。
ANDゲート406は、命令がロードストア命令か否かを表す信号の入力を命令解釈回路403から受ける。さらに、ANDゲート406は、命令バッファ12から出力された命令がロードストア命令であるか否かを表す信号の入力をANDゲート405から受ける。そして、ANDゲート406は、入力された2つの信号の論理積を出力する。すなわち、命令バッファ12から命令が入力され、命令がロードストア命令であり、且つ、そのロードストア命令を発行する場合、ANDゲート406は、1を加算器409及び413へ出力し、それ以外の場合0を加算器409及び413へ出力する。
減算器408は、仮LDSTQ番号発行数カウンタ401が出力したカウント値の出力を表す信号の入力を受ける。さらに、減算器408は、LDSTQ解放信号の入力をLDSTQ161から受ける。LDSTQ解放信号の入力を受けていなければ、減算器408は、カウント値の出力を表す信号の入力を受けて、0を加算器409へ出力する。これに対して、LDSTQ解放信号の入力を受けている場合、減算器408は、カウント値の出力を表す信号の入力を受けて、−1を加算器409へ出力する。
加算器409は、減算器408の計算結果の入力を受ける。さらに、加算器409は、命令バッファ12から命令が入力され、命令がロードストア命令であり、且つ、そのロードストア命令が発行されるか否かを表す信号の入力をANDゲート406から受ける。命令バッファ12から入力されたロードストア命令が発行されることを表す信号の入力を受けた場合、加算器409は、減算器408から入力された値に1を加算した値を仮LDSTQ番号発行数カウンタ401へ出力する。これに対して、命令バッファ12から入力されたロードストア命令が発行される場合でないことを表す信号の入力を受けた場合、加算器409は、減算器408から入力された値をそのまま仮LDSTQ番号発行数カウンタ401へ出力する。すなわち、仮LDSTQ番号発行数カウンタ401のカウンタは、ロードストア命令がデコード部13から発行されると1つインクリメントされ、LDSTQ解放信号がLDSTQ161から出力されると1つデクリメントされる。
LDSTQ番号発行回路411は、0から9までの連続したLDSTQ番号を順番に発行する。LDSTQ番号発行回路411は、加算器413から加算結果の入力を受ける。そして、LDSTQ番号発行回路411は、入力された値をLDSTQ番号に加算して次のLDSTQ番号として発行する。そして、LDSTQ番号発行回路411は、LDSTQ番号として9を発行した場合、次にはLDSTQ番号として0を発行する。LDSTQ番号発行回路411がRSA142にLDSTQ番号を発行すると、インクリメント信号が加算器413に入力される。
加算器413は、LDSTQ番号発行回路411から出力されたインクリメント信号の入力を受ける。さらに、加算器413は、命令バッファ12から命令が入力され、命令がロードストア命令であり、且つ、そのロードストア命令が発行されるか否かを表す信号の入力をANDゲート406から受ける。命令バッファ12から入力されたロードストア命令が発行されることを表す信号の入力を受けた場合、インクリメント信号が入力されると、加算器413は、1を出力する。すなわち、命令バッファ12から入力されたロードストア命令が発行されるとLDSTQ番号発行回路411が発行するLDSTQ番号が1つ増える。そして、加算器413は、1の値を有する信号の10回目の出力の際に、すなわち、LDSTQ番号発行回路411が発行するLDSTQ番号が9から0へ変わるタイミングでオーバーフロー信号を加算器414へ出力する。
グループ番号発行回路412は、0から3までの連続したグループ番号を順番に発行する。命令発行上限数がLDSTQ161のエントリ数の4倍であることから、グループ番号の上限は3となる。グループ番号発行回路412は、加算器414から加算結果の入力を受ける。そして、グループ番号発行回路412は、入力された値をグループ番号に加算して次のグループ番号として発行する。そして、グループ番号発行回路412は、グループ番号として3を発行した場合、次にはグループ番号として0を発行する。グループ番号発行回路412がRSA142にグループ番号を発行すると、インクリメント信号が加算器414に入力される。
加算器414は、グループ番号発行回路412から出力されたインクリメント信号の入力を受ける。さらに、加算器414は、オーバーフロー信号の入力を加算器413から受ける。オーバーフロー信号の入力を受けた場合、インクリメント信号が入力されると、加算器413は、1を出力する。すなわち、LDSTQ番号が9に達すると次はLDSTQ番号が0に戻りグループ番号が1つ増える。
RSA142は、LDSTQ番号発行回路411から入力されたLDSTQ番号の入力をLDSTQ番号発行回路411から受ける。また、RSA142は、グループ番号発行回路412から入力されたグループ番号の入力を受ける。さらに、RSA142は、命令バッファ12から命令が入力され且つロードストア命令が発行された信号の入力をANDゲート405から受ける。そして、RSA142は、グループ番号発行回路412から入力されたグループ番号とLDSTQ番号発行回路411から入力されたLDSTQ番号とを並べた値を仮LDSTQ番号として取得する。すなわち、ここでは、仮LDSTQ番号は、00〜39の番号となる。
次に、図5を参照して、LDSTQ管理部150による実際のLDSTQ161のエントリの割り当ての具体的な回路の一例について説明する。図5は、LDSTQ管理部の回路構成の一例を表すブロック図である。
先頭LDSTQ番号保持回路503は、その時点でLDSTQ161に格納されたロードストア命令に割り当てられた仮LDSTQ番号を構成するLDSTQ番号の先頭の番号である先頭LDSTQ番号を保持する回路である。先頭LDSTQ番号は、初期値が0である。先頭LDSTQ番号保持回路503は、加算器501から加算結果の入力を受ける。そして、先頭LDSTQ番号保持回路503は、保持する先頭LDSTQ番号に加算器501から入力された値を加算して次の先頭LDSTQ番号を生成する。そして、先頭LDSTQ番号保持回路503は、生成した先頭LDSTQ番号を比較器506及び比較器508へ出力する。また、先頭LDSTQ番号保持回路503が先頭LDSTQ番号を出力すると、インクリメント信号が加算器501に入力される。
加算器501は、LDSTQ解放信号の入力をLDSTQ161から受ける。また、加算器501は、先頭LDSTQ番号保持回路503が出力したインクリメント信号の入力を受ける。LDSTQ解放信号の入力を受けた状態でインクリメント信号の入力を受けた場合、加算器501は、1を出力する。すなわち、LDSTQ161から解放信号が出力されると、先頭LDSTQ番号は1つ増える。さらに、加算器501は、1の値を有する信号の10回目の出力の際に、すなわち、先頭LDSTQ番号が9から0へ変わるタイミングでオーバーフロー信号を加算器502へ出力する。
先頭グループ番号保持回路504は、その時点でLDSTQ161に格納されたロードストア命令に割り当てられた仮LDSTQ番号を構成するグループ番号の先頭の番号である先頭グループ番号を保持する回路である。先頭グループ番号は、初期値が0である。先頭グループ番号保持回路504は、0から3までの連続したグループ番号を順番に発行する。先頭グループ番号保持回路504は、加算器502から加算結果の入力を受ける。そして、先頭グループ番号保持回路504は、入力された値を先頭グループ番号に加算して次の先頭グループ番号として加算器505及び比較器509へ発行する。そして、先頭グループ番号保持回路504は、先頭グループ番号として3を発行した場合、次には先頭グループ番号として0を発行する。先頭グループ番号保持回路504が先頭グループ番号を発行すると、インクリメント信号が加算器502に入力される。
加算器502は、先頭グループ番号保持回路504から出力されたインクリメント信号の入力を受ける。さらに、加算器502は、オーバーフロー信号の入力を加算器501から受ける。オーバーフロー信号の入力を受けた場合、インクリメント信号が入力されると、加算器502は、1を出力する。すなわち、先頭LDSTQ番号が9に達すると次は先頭LDSTQ番号が0に戻り先頭グループ番号が1つ増える。
加算器505は、先頭グループ番号保持回路504から入力された先頭グループ番号に1を加算し、比較器507へ出力する。
ここで、フリップフロップ204は、RSA142から出力されたロードストア命令に割り当てられた仮LDSTQ番号を保持する。仮LDSTQ番号は、図5に示すように、LDSTQ番号及びグループ番号で構成される。
比較器506は、フリップフロップ204が保持する仮LDATQ番号を構成するLDSTQ番号の入力を受ける。以下では、RSA142から出力されたロードストア命令に割り当てられた仮LDSTQ番号を構成するLDSTQ番号を入力LDSTQ番号という。さらに、比較器506は、先頭LDSTQ番号の入力を先頭LDSTQ番号保持回路503から受ける。そして、比較器506は、入力LDSTQ番号と先頭LDSTQ番号とを比較する。入力LDSTQ番号が先頭LDSTQ番号より小さい場合、比較器506は、1をANDゲート510へ出力し、それ以外の場合、0をANDゲート510へ出力する。
比較器507は、フリップフロップ204が保持する仮LDATQ番号を構成するグループ番号の入力を受ける。以下では、RSA142から出力されたロードストア命令に割り当てられた仮LDSTQ番号を構成するグループ番号を入力グループ番号という。さらに、比較器507は、先頭グループ番号に1が加算された番号の入力を加算器505から受ける。そして、比較器507は、入力グループ番号と先頭グループ番号に1を加算した番号とを比較する。入力グループ番号と先頭グループ番号に1を加算した番号とが一致する場合、比較器507は、1をANDゲート510へ出力し、それ以外の場合、0をANDゲート510へ出力する。
ANDゲート510は、入力LDSTQ番号が先頭LDSTQ番号より小さいか否かを表す信号の入力を比較器506から受ける。また、ANDゲート510は、入力グループ番号と先頭グループ番号に1を加算した番号とが一致するか否かを表す情報の入力を比較器507から受ける。そして、ANDゲート510は、入力された2つの信号の論理積を出力する。すなわち、ANDゲート510は、入力グループ番号が先頭グループ番号に1を加算した値と一致し且つ入力LDSTQ番号が先頭LDSTQ番号よりも小さい場合に1を出力する。
比較器508は、入力LDSTQ番号の入力をフリップフロップ204から受ける。さらに、比較器508は、先頭LDSTQ番号の入力を先頭LDSTQ番号保持回路503から受ける。そして、比較器506は、入力LDSTQ番号と先頭LDSTQ番号とを比較する。入力LDSTQ番号が先頭LDSTQ番号以上の場合、比較器506は、1をANDゲート510へ出力し、それ以外の場合、0をANDゲート510へ出力する。
比較器509は、入力グループ番号の入力をフリップフロップ204から受ける。さらに、比較器509は、先頭グループ番号の入力を先頭グループ番号保持回路504から受ける。そして、比較器509は、入力グループ番号と先頭グループ番号とを比較する。入力グループ番号と先頭グループ番号とが一致する場合、比較器509は、1をANDゲート511へ出力し、それ以外の場合、0をANDゲート511へ出力する。
ANDゲート511は、入力LDSTQ番号が先頭LDSTQ番号以上か否かを表す信号の入力を比較器508から受ける。また、ANDゲート511は、入力グループ番号と先頭グループ番号とが一致するか否かを表す情報の入力を比較器509から受ける。そして、ANDゲート511は、入力された2つの信号の論理積を出力する。すなわち、ANDゲート511は、入力グループ番号が先頭グループ番号と一致し且つ入力LDSTQ番号が先頭LDSTQ番号以上の場合に1を出力する。
ORゲート512は、入力グループ番号が先頭グループ番号に1を加算した値と一致し且つ入力LDSTQ番号が先頭LDSTQ番号よりも小さいか否かを表す信号の入力をANDゲート510から受ける。また、ORゲート512は、入力グループ番号が先頭グループ番号と一致し且つ入力LDSTQ番号が先頭LDSTQ番号以上か否かを表す信号の入力をANDゲート511から受ける。そして、ORゲート512は、入力された2つの信号の論理和を出力する。すなわち、ORゲート512は、入力グループ番号が先頭グループ番号に1を加算した値と一致し且つ入力LDSTQ番号が先頭LDSTQ番号よりも小さい場合に1を出力する。さらに、ORゲート512は、入力グループ番号が先頭グループ番号と一致し且つ入力LDSTQ番号が先頭LDSTQ番号以上の場合に1を出力する。ORゲート512が出力する1の信号は、RSA142から出力されフリップフロップ204に格納されたロードストア命令がLDSTQ161に格納可能であることを表す信号である。
ここで、図6を参照して、図5におけるORゲート512が1を出力する場合に、RSA142から出力されフリップフロップ204に格納されたロードストア命令がLDSTQ161に格納可能である理由を説明する。図6は、LDSTQに格納されたデータを表すイメージ図である。
仮LDSTQ番号600〜604は、デコード部13から発行される仮LDSTQ番号を全て表している。そして、仮LDSTQ番号602〜604のそれぞれに配置された枠611〜614は、各状態でのLDSTQ161に格納されたロードストア命令に割り当てられた仮LDSTQ番号である。ここでは仮LDSTQ番号を2桁の数字で表すが、1桁目がグループ番号を表し、2桁目がLDSTQ番号を表す。さらに、枠611〜614に含まれる仮LDSTQ番号において「先頭」と記載されている仮LDSTQ番号は、LDSTQ161に格納されたロードストア命令のうち先頭のロードストア命令の仮LDSTQ番号である。すなわち、「先頭」と記載されている仮LDSTQ番号のグループ番号が先頭グループ番号にあたり、LDSTQ番号が先頭LDSTQ番号にあたる。
ロードストア命令に仮LDSTQ番号が00から割り当てられ順次LDSTQ161に格納されると、最初は、LDSTQ161には、仮LDSTQ番号が00〜09であるロードストア命令が格納される。実際には、LDSTQ161には、LDSTQ161のエントリを表すLDSTQ番号が割り当てられたロードストア命令が格納されるが、ここでは、実際のLDSTQ161のエントリの割り当て前の仮LDSTQ番号を用いて説明する。
仮LDSTQ番号601の状態から仮LDSTQ番号が00のロードストア命令が出力され、解放されると次のロードストア命令が格納される場合は仮LDSTQ番号602で表される状態となる。この場合、仮LDSTQ番号が09の次の仮LDSTQ番号は10であるので、LDSTQ161には、仮LDSTQ番号602における枠612に含まれる仮LDSTQ番号を有するロードストア命令が格納される。このようにエントリの解放及び新たなロードストア命令を繰り返すと、仮LDSTQ番号603及び604で表される状態となる。
いずれの状態でも、LDSTQ161に格納されるロードストア命令のグループ番号は、先頭グループ番号か先頭グループ番号に1を加算した番号である。そして、グループ番号が先頭グループ番号と一致するものであれば先頭LDSTQ番号以上のLDSTQ番号を含む仮LDSTQ番号が割り当てられたロードストア命令であれば、LDSTQ161に格納可能である。また、グループ番号が先頭グループ番号に1を加算した番号と一致するものであれば先頭LDSTQ番号未満のLDSTQ番号を含む仮LDSTQ番号が割り当てられたロードストア命令であれば、LDSTQ161に格納可能である。このことから、図5のORゲート512が1を出力した場合であれば、その際にRSA142から出力されフリップフロップ204に格納されたロードストア命令がLDSTQ161に格納可能であるといえる。
ここで、図7を参照して、デコード部13における命令発行処理の流れについて説明する。図7は、デコード部における命令発行処理のフローチャートである。
デコード部13は、命令バッファ12から命令が出力されたことを表す信号、すなわち、値が1の有効信号の入力を受けたか否かを判定する(ステップS1)。この処理は、図4におけるANDゲート405が、命令バッファ12から信号の入力を受けることにあたる。値が1の有効信号の入力が無い場合(ステップS1:否定)、デコード部13は、命令をリザベーションステーション14へ出力せずに命令発行処理を終了する。これは、ANDゲート405が0を出力することにあたる。
これに対して、値が1の有効信号の入力がある場合(ステップS1:肯定)、デコード部13は、命令解釈を行い入力された命令がロードストア命令か否かを判定する(ステップS2)。この処理は、図4におけるNANDゲート404が、命令解釈部403による命令の解釈結果の入力を受けることにあたる。ロードストア命令でない場合(ステップS2:否定)、デコード部13は、ステップS7へ進む。
これに対して、ロードストア命令の場合(ステップS2:肯定)、デコード部13は、ロードストア命令の滞留量が命令発行上限未満か否かを判定する(ステップS3)。この処理は、図4におけるNANDゲート404が、Full判定回路402からの判定結果を表す信号の入力を受けることにあたる。ロードストア命令の滞留量が命令発行上限以上の場合(ステップS3:否定)、デコード部13は、命令をリザベーションステーション14へ出力せずに命令発行処理を終了する。この処理は、NANDゲート404が0を出力し、それを受けてANDゲート405が0を出力することにあたる。
これに対して、ロードストア命令の滞留量が命令発行上限未満の場合(ステップS3:肯定)、デコード部13は、LDSTQ番号をインクリメントする(ステップS4)。この処理は、図4における仮LDSTQ番号発行数カウンタ401の更新及びLDSTQ番号発行回路411によるLDSTQ番号のインクリメントにあたる。
次に、デコード部13は、LDSTQ番号が0か否かを判定する(ステップS5)。この処理は、加算器413におけるオーバーフロー信号の出力判定にあたる。LDSTQ信号が0でない場合(ステップS5:否定)、デコード部13は、ステップS7へ進む。これは、図4において加算器413がオーバーフロー信号を出力しない場合にあたる。
これに対して、LDSTQ信号が0である場合(ステップS5:肯定)、デコード部13は、グループ番号をインクリメントする(ステップS6)。この処理は、図4における加算器414が加算器413からのオーバーフロー信号の入力を受けて1を出力することで、グループ番号発行回路412がグループ番号をインクリメントする処理にあたる。
その後、デコード部13は、仮LDSTQ番号を出力するとともに、命令をリザベーションステーション14へ出力し、さらに、命令発行信号を命令バッファ12に発行する(ステップS7)。
次に、図8を参照して、LDSTQ管理部150におけるリクエスト発行処理の流れについて説明する。図8は、実施例1に係るLDSTQ管理部におけるリクエスト発行処理のフローチャートである。
LDSTQ管理部150は、入力LDSTQ番号が先頭LDSTQ番号未満か否かを判定する(ステップS11)。この処理は、図5における比較器506及び508による判定処理にあたる。
入力LDSTQ番号が先頭LDSTQ番号未満の場合(ステップS11:肯定)、LDSTQ管理部150は、入力グループ番号が先頭グループ番号に1を加算した番号と一致するかを判定する(ステップS12)。この処理は、図5における比較器507による判定処理にあたる。
また、入力LDSTQ番号が先頭LDSTQ番号以上の場合(ステップS11:否定)、LDSTQ管理部150は、入力グループ番号が先頭グループ番号と一致するかを判定する(ステップS13)。この処理は、図5における比較器509による判定処理にあたる。
入力グループ番号が先頭グループ番号に1を加算した番号と一致しない場合(ステップS12:否定)又は入力グループ番号が先頭グループ番号と一致しない場合(ステップS13:否定)、LDSTQ管理部150は、LDSTQ161への格納不能と判定する。この処理は、図5におけるORゲート512が、0の値の信号を出力した場合にあたる。そして、LDSTQ管理部150は、命令コードをRSA142へ戻し、さらに、インターロック信号をRSA142へ送信する(ステップS14)。
一方、入力グループ番号が先頭グループ番号に1を加算した番号と一致する場合(ステップS12:肯定)又は入力グループ番号が先頭グループ番号と一致する場合(ステップS13:肯定)、LDSTQ管理部150は、LDSTQ161への格納可能と判定する。この処理は、図5におけるORゲート512が、1の値の信号を出力した場合にあたる。そして、LDSTQ管理部150は、ロードストア命令に対して実際のLDSTQ161のエントリに対応するLDSTQ番号を割り当てる。そして、LDSTQ管理部150は、命令コードをLDSTQ161のLDSTQ番号で表される位置に格納し、ロードストア命令の実行要求をLDSTQ161へ出力する(ステップS15)。
その後、LDSTQ管理部150はインターロック解除信号を出力してRSA142のインターロックを解除する。また、LDSTQ161は、ロードストア命令の処理完了後にLDSTQ解放信号を出力する(ステップS16)。
以上に説明したように、本実施例に係るコアは、デコード部でLDSTQのエントリ数以上のロードストア命令に対して仮LDSTQ番号を割り当てRSAへ出力する。そして、コアは、LDSTQ管理部において、実際のLDSTQに仮のLDSTQ番号が割り当てられたロードストア命令が格納可能かを判定し、格納可能であればLDSTQのエントリを割り当て、格納する場所が無ければRSAへ戻す。これにより、処理の順番にしたがって命令を出力するデコード部は、LDSTQのエントリ数以上のロードストア命令を出力することができる。そのため、デコード部からのロードストア命令の発行が待機させられる可能性が低くなり、より多くのロードストア命令及び演算命令を処理が可能となり、アドレス生成演算器や固定小数点演算器の使用効率を向上させることが可能となる。
また、LDSTQ解放信号が出力された場合、LDSTQへ格納されるロードストア命令はLDSTQ管理部又はRSAから出力されるため、デコード部から出力されたロードストア命令の到着を待つよりもLDSTQへの格納時間を短縮することができる。これにより、アドレス生成演算器や固定小数点演算器の使用効率を向上させることができる。
また、LDSTQ管理部によるLDSTQへの格納の可否判定は、RSAから出力された1つのロードストア命令に対して行うため、回路規模を値策することができる。さらに、RSAのインターロックの解除やLDSTQ管理部によるLDSTQへの格納の可否判定には、既存のLDSTQ解放信号を用いるため、これらの処理を実現するための回路も規模を小さく抑えることができる。
さらに、ロードストア命令のLDSTQにおける格納場所が無い場合に、インターロックを掛けてそのロードストア命令のRSAからの出力を待機させる。これにより、同じロードストア命令を繰り返し処理する手間を軽減でき、アドレス生成演算器や固定小数点演算器の使用効率を向上させることができる。
ただし、同じロードストア命令を繰り返し処理した場合の処理能力の低下を許容することができる場合には、RSAにおけるインターロックを実行しなくてもよい。その場合でも、デコード部からの命令の出力の増加及びLDSTQのエントリ解放からの次のエントリ割り当てまでの時間の短縮は実現でき、演算器の使用効率を向上させることができる。