JP2009146227A - 中央処理装置、選択回路および選択方法 - Google Patents

中央処理装置、選択回路および選択方法 Download PDF

Info

Publication number
JP2009146227A
JP2009146227A JP2007324029A JP2007324029A JP2009146227A JP 2009146227 A JP2009146227 A JP 2009146227A JP 2007324029 A JP2007324029 A JP 2007324029A JP 2007324029 A JP2007324029 A JP 2007324029A JP 2009146227 A JP2009146227 A JP 2009146227A
Authority
JP
Japan
Prior art keywords
thread
instruction
instructions
processing unit
central processing
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2007324029A
Other languages
English (en)
Other versions
JP5105359B2 (ja
Inventor
Takumi Maruyama
拓巳 丸山
Masayuki Ikeda
正幸 池田
Kazuaki Murakami
和彰 村上
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Kyushu University NUC
Fujitsu Ltd
Original Assignee
Kyushu University NUC
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Kyushu University NUC, Fujitsu Ltd filed Critical Kyushu University NUC
Priority to JP2007324029A priority Critical patent/JP5105359B2/ja
Publication of JP2009146227A publication Critical patent/JP2009146227A/ja
Application granted granted Critical
Publication of JP5105359B2 publication Critical patent/JP5105359B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Executing Machine-Instructions (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Advance Control (AREA)

Abstract

【課題】一度も実行していない本スレッドから、先行サブスレッドを選択することを課題とする。
【解決手段】中央処理装置は、本スレッドの実行結果を解析して得られるスレッド各々間での関係ではなく、本スレッドを構成する命令各々が中央処理装置に指示する内容を判別して先行サブスレッドを選択する。例えば、中央処理装置は、内容として、各々の命令種別を判別して先行サブスレッドを選択する。さらに詳細な一例をあげると、中央処理装置は、命令種別として、レジスタに格納されるデータをメモリに格納するストア命令または浮動小数点演算命令に該当するかを判別し、該当しない命令を選択することで、先行サブスレッドを選択する。
【選択図】 図1

Description

この発明は、中央処理装置、選択回路および選択方法に関する。
従来より、マルチスレッドの処理能力を向上させる技術として、例えば、CMP(Chip−level Multi Processor)やSMT(Simultaneous Multi−Thread)といった技術が知られている。具体的には、CMPやSMTは、複数のスレッドを空間的ないし時間的に並列に実行する技術である。ここで、プログラムは少なくても一つ(通常は、複数)のスレッドによって構成され、スレッドとは、プログラムの実行単位である。例えば、CPUがマルチスレッド実行に対応する場合には、各スレッドごとに処理を行うことになる。
CMPは、マルチスレッド実行を行うことを目的として、一つのCPUダイ(半導体本体)に複数のコアを搭載し、個々のコアがそれぞれ独自にスレッドを実行する技術である。例えば、CMPでは、図9の(1)に示すように、コアが、一つのCPUダイに複数搭載され、複数のコアが大容量のL2キャッシュを共有する。このような構成のうえで、CMPでは、個々のコアがそれぞれ独自にスレッドを実行することにより、複数のスレッドを空間的ないし時間的に並列に実行する。
また、SMTは、マルチスレッド実行を行うことを目的として、1コアのCPUを複数のCPUとして(言い換えると、一つのコアを、複数のコアとして)振る舞わせて、複数のスレッドを同時に実行する技術である。例えば、SMTでは、図9の(2)に示すように、一つのコアが、ひとつのCPUダイに搭載される。このような構成のうえで、SMTでは、一つのコアが二つのコアとして振る舞うことにより、二つのスレッドを空間的ないし時間的に並列に実行する。なお、特許文献1には、SMTにおいて、プロセッサ環境を切り替える際に(例えば、CPUが、一つのスレッドを実行し、その後、他方のスレッドを実行するために、各種データ(例えば、使用するデータが格納されたレジスタのアドレスなど)を変更する処理を行う際に)、負荷を低減することを目的とした技術が開示されている。
また、従来より、単一スレッドの性能を向上させる技術(複数のスレッドを並行して処理する場合に、個々のスレッドの処理速度を向上させる技術)として、性能を向上させたいスレッド(以下、本スレッドと記載する)のサブセットを別スレッド(以下、先行サブスレッドと記載する)として先行して実行することで、本スレッドの性能向上を図る技術が知られている。ここで、スレッドとは、複数の命令の集合体である。また、本スレッドとは、スレッドのうち、性能向上を図る対象となるスレッドである。例えば、本スレッドを実行する際に、必要なデータをメモリからフェッチする処理を省略(または、フェッチする処理時間を短縮)することを目的として、先行サブスレッドを実行し、本スレッドの実行に必要なデータをメモリからプリフェッチすることにより、単一スレッドの性能を向上させる。
上記したような単一スレッドの性能を向上させる技術として、例えば、非特許文献1には、Slip Stream(本件明細書における以下の記載では、「SS」と記載する)という技術が開示されており、非特許文献2には、Dynamic Speculative Pre−computation(本件明細書における以下の記載では、「DSP」と記載する)という技術が開示されている。
ここで、上記した「SS」や「DSP」といった技術について、さらに詳細に説明する。これらの技術(「SS」や「DSP」)では、本スレッドを構成する命令がリタイアした後(本スレッドの実行後)に、命令間のデータ依存解析を行うことにより、先行サブスレッドを選択する。言い換えると、これらの技術(「SS」や「DSP」)では、本スレッドの各命令を実行した後に、各命令を実行した結果得られる実行結果や各命令で用いられるデータが、他のスレッドを実行する際に用いられるかどうかを判別する。そして、これらの技術(「SS」や「DSP」)では、このようにして各命令間におけるデータの依存関係を把握した上で、性能向上を図りたいスレッド(本スレッド)からデータ依存関係がある命令を検出し、検出した命令を先行サブスレッドとして選択する。例えば、これらの技術(「SS」や「DSP」)では、命令(1)から命令(8)までで構成される本スレッドである場合に、命令(1)とデータの依存関係にある命令(例えば、命令(6)、(7)および(8))を検出し、検出した命令を先行サブスレッド(命令(1)、(6)、(7)および(8))として選択する。
さらに、「SS」について具体的な例をあげて説明すると、「SS」では、(1)結果を後続命令に参照されていない命令(Un−referenced writes)と、(2)更新前と同じ値を書き込んでいる命令(non−modifying writes)と、(3)分岐予測の容易な分岐命令とを、命令リタイア時に検出する。その後、「SS」では、命令間のデータ依存解析をさかのぼって行う。その際、「SS」では、上記命令((1)〜(3))と、上記命令実行に必要なデータのみを選択している命令とを、本スレッドから取り除く。そして、「SS」では、残った命令を、先行サブスレッドとして選択する。
さらに、「DSP」について具体的な例をあげて説明すると、「DSP」では、(4)キャッシュミス(Cache−miss)を頻発する命令(Delinquent load)を命令リタイア時に検出する。その後、「DSP」では、各命令間のデータ依存解析をさかのぼって行う。その際、上記命令((4))と、上記命令実行に必要なデータを選択している命令とを、先行サブスレッドとして選択する。
特開2005−284749号公報 Slip Stream K. Sundaramoorthy, Z. Purser, and E. Rotenberg, "Slipstream Processors: Improving both Performance and Fault Tolerance", in 9th ASPLOS, Nov. 2000. Fig.1 Dynamic Speculative Pre−computation Jamison D.Collinsy, Dean M.Tullseny, Hong Wangz, John P.Shenzy, "Dynamic−Speculative Precomputation", in 34th International Symposium on Micro−architecture, December, 2001. Fig.1
ところで、上記した従来の技術は、以下で説明するように、一度も実行していない本スレッドからは、先行サブスレッドを選択できないという課題があった。
具体的には、上記した従来技術(「SS」や「DSP」)では、本スレッドを構成する命令のリタイア時に命令間のデータ依存解析を行うことで、先行サブスレッドを識別して選択するため、一度も実行していない本スレッドからは、先行サブスレッドを選択できない。言い換えると、従来の技術(「SS」や「DSP」)では、先行サブスレッドが選択されるのは、本スレッドが少なくとも一度実行された後であり、一度も実行していない本スレッドからは、先行サブスレッドを選択できない。
そこで、この発明は、上述した従来技術の課題を解決するためになされたものであり、一度も実行していない本スレッドから、先行サブスレッドを選択することが可能な中央処理装置、選択回路および選択方法を提供することを目的とする。
上述した課題を解決し、目的を達成するため、本発明は、実行対象となる複数の命令で構成される本スレッドを実行し、並びに、所定のスレッドに必要な情報をプリフェッチする一つまたは複数の命令を先行サブスレッドとして当該本スレッドから選択して当該所定のスレッドに先行して実行する中央処理装置であって、前記本スレッドの実行結果を解析して得られる命令各々間での関係ではなく、前記本スレッドを構成する命令各々が前記中央処理装置に指示する内容を判別して前記先行サブスレッドを選択する選択手段を備えることを特徴とする。
また、本発明は、上記の発明において、前記選択手段は、前記内容として、前記スレッドを構成する各々の命令種別を判別して前記先行サブスレッドを選択することを特徴とする。
また、本発明は、上記の発明において、前記選択手段は、前記命令種別として、レジスタに格納されるデータをメモリに格納するストア命令または浮動小数点演算命令に該当するかを判別し、該当しない命令を選択することで前記先行サブスレッドを選択することを特徴とする。
本発明によれば、一度も実行していない本スレッドから、先行サブスレッドを選択することが可能である。
また、本発明によれば、命令種別を確認するだけで簡単に先行サブスレッドを選択することが可能である。
また、本発明によれば、ストア命令と浮動小数点命令とを除外するのみで、簡単に先行サブスレッドを選択することが可能である。
以下に添付図面を参照して、この発明に係る中央処理装置、選択回路および選択方法の実施例を詳細に説明する。なお、以下では、本実施例で用いる主要な用語、本実施例に係る先行サブスレッド識別回路の概要および特徴、中央処理装置の構成および処理の流れを順に説明し、最後に本実施例に対する種々の変形例を説明する。
[用語の説明]
まず最初に、図9を用いて、本実施例で用いる主要な用語を説明する。図9は、CMPおよびSMTについて説明するための図である。本実施例で用いる「CPU(Central Process Unit)(特許請求の範囲に記載の「中央処理装置」に対応する。)」とは、コンピュータを構成する部品の一つで、各装置の制御やデータの計算・加工を行なう。例えば、CPUとは、メモリに記憶されたプログラムを実行し、入力装置や記憶装置からデータを受け取り、演算・加工した上で、出力装置や記憶装置に出力する。なお、CPUとは、CPUダイ(半導体本体)に、コアが搭載されたものである。また、コアとは、CPUの核となる内部回路であって、演算回路やキャッシュメモリ、レジスタといった演算処理にかかわるユニットが統合的に配置されているものである。
また、本実施例で用いるCPUは、マルチスレッド実行を行うものであり、例えば、CMP(Chip−Level Multi Processor)やSMT(Simultaneous Multi−Thread)がこれに該当する。ここで、プログラムは少なくても一つ(通常は、複数)のスレッドによって構成され、スレッドとは、プログラムの実行単位である。例えば、CPUがマルチスレッド実行に対応する場合には、CPUは、各スレッドごとに処理を行うことになる。
また、CMPとは、マルチスレッド実行を行うために、一つのCPUダイ(半導体本体)に複数のコアを搭載し、個々のコアがそれぞれ独自にスレッドを実行する技術である。例えば、CMPでは、図9の(1)に示すように、コアが、一つのCPUダイに複数搭載され、複数のコアが大容量のL2キャッシュを共有する。このような構成のうえで、CMPでは、個々のコアが、それぞれ独自にスレッドを実行する。また、SMTとは、マルチスレッド実行を行うために、1コアのCPUを2つのCPUとして(言い換えると、一つのコアを、複数(例えば二つ)のコアとして)振る舞わせて、複数の実行スレッドを同時に実行する技術である。
また、SMTでは、図9の(2)に示すように、一つのコアが、ひとつのCPUダイに搭載される。このような構成のうえで、SMTでは、一つのコアが、二つのコアとして振舞うことにより、複数の実行スレッドを同時に実行する。なお、CMPとSMTとは択一的なものではなく、両方を同時に適用することも可能である。
ここで、例えば、マルチスレッド実行に対応する場合には複数のスレッドに分割されて各スレッドごとに処理されるプログラムであっても、CPUがマルチスレッド実行に対応しない場合には、プログラムはシングルスレッドとして(複数のスレッドに分割されて処理されることなく一つのスレッド(実行単位)として)処理されることになる。またスレッドとは、複数の命令の集合体である。また、本スレッドとは、スレッドのうち、性能向上を図る対象となるスレッドである。
本実施例で用いる命令種別とは、上記した命令がCPUに指示する内容の種類である。例えば、メモリ(例えば、キャッシュや、CPU外に設けられるメモリなど)から、レジスタファイルにデータをロードする「ロード命令」や、レジスタファイルに格納されているデータをメモリに格納する「ストア命令」や、数値を、各桁の値の並びである「仮数部」と、小数点の位置を表わす「指数部」とで表現して演算する「浮動小数点演算命令」などがある。
上記したマルチスレッド実行とは、複数の実行スレッドを同時に実行することである。例えば、CMPにおけるマルチスレッド実行は、一つのCPUダイに搭載された複数のコアそれぞれが、スレッドを実行することによって、一つのCPUが、複数の処理を同時に行うものである。また、例えば、SMTにおけるマルチスレッド実行は、CPUの処理時間を非常に短い単位に分割し、複数のスレッドに順番に割り当てることによって、一つのCPU(一つのコア)が、複数の処理を同時に行っているようにみせているものである。
また、本実施例で用いるCPUは、アウトオブオーダ(Out−of−Order)実行を行うものであるとして説明する。
上記したアウトオブオーダ実行とは、依存関係にない複数の命令を、プログラム中での出現順序に関係なく次々と実行するものである。言い換えると、アウトオブオーダ実行とは、プログラムに記述された命令の順番に関係なく、処理に必要なデータが揃った命令から実行する仕組みである。例えば、アウトオブオーダ実行では、先の命令処理に必要なデータが揃っていなくても、後の命令処理に必要なデータが揃っていた場合、後の命令から先に実行する。また、インオーダ(In−Order)実行とは、プログラム中での出現順序に従って、次々と実行するものである。言い換えると、インオーダ実行とは、プログラムに記述された命令の順番に従って実行する仕組みである。なお、本実施例で用いるCPUは、アウトオブオーダ実行を行うものであるとして説明するが、インオーダ実行を行うものであってもよい。
プリフェッチとは、CPUがデータをあらかじめキャッシュメモリに読み出しておく機能のことである。
[先行サブスレッド識別回路の概要および特徴]
まず最初に、図1を用いて、本実施例に係るCPU100に設けられる先行サブスレッド識別回路11(特許請求の範囲に記載の「選択回路」に対応する)の概要および特徴を説明する。図1は、先行サブスレッド識別回路の概要と特徴を説明するための図である。
同図に示すように、実施例1に係るCPU100は、本発明に密接に関連するものとして、Decode10と、先行サブスレッド識別回路11と、Queue12とを備える。ここで、Queue12は、処理されるのを待っている命令を記憶するものである。
このような構成のもと、実施例1に係るCPU100は、実行対象となる複数の命令で構成される本スレッドを実行し、並びに、所定のスレッドに必要な情報をプリフェッチする一つまたは複数の命令を先行サブスレッド(特許請求の範囲に記載の「先行サブスレッド」に対応する)として本スレッドから選択して所定のスレッドに先行して実行することを概要とし、一度も実行していない本スレッドから、先行サブスレッドを選択することが可能である点に主たる特徴がある。
かかる特徴は、主に、先行サブスレッド識別回路11によって実現されるものであるので、以下では、先行サブスレッド識別回路11を中心に説明を行い、実施例1に係るCPU100における本スレッドの実行に関しては、説明を省略する。
まず、実施例1に係るCPU100では、図1の(1)に示すように、Decode10が、命令がどのような命令かを解釈し、先行サブスレッド識別回路11に命令を送信する。例えば、図1の(1)に示す例では、Decode10が、各命令の内容を解釈し、本スレッドを構成する命令(1)〜(8)を先行サブスレッド識別回路11に送信する。
次に、実施例1に係るCPU100では、先行サブスレッド識別回路11が、図1の(2)に示すように、本スレッドの実行結果を解析して得られる命令各々間での関係ではなく、本スレッドを構成する命令各々がCPU100に指示する内容を判別して先行サブスレッドを選択する。例えば、図1の(2)に示す例では、先行サブスレッド識別回路11が、所定の命令種別を判別して、ストア命令または浮動小数点演算命令ではない命令である命令(1)、(6)、(7)および(8)を、先行サブスレッドとして選択する。
そして、実施例1に係るCPU100では、先行サブスレッド識別回路11が、図1の(3)に示すように、先行サブスレッドのみをQueue12に送信する。
ここで、上記したように、先行サブスレッド識別回路11は、マルチスレッド実行用に追加された構成において実行されるため、本スレッドとは独立に動作する。そして、先行サブスレッド識別回路11は、先行サブスレッドの命令をデコードした後、デコードされた命令種別に応じて、先行サブスレッドとして必要な命令を識別して、Queue12に送信する。
このようなことから、実施例1に係るCPU100は、上記した主たる特徴の如く、一度も実行していない本スレッドから、先行サブスレッドを選択することが可能である。
すなわち、従来の手法においては、CPUは、本スレッドを構成する命令がリタイアした後(本スレッドの実行後)に、命令間のデータ依存解析を行うことにより、先行サブスレッドを選択して実行していた。言い換えれば、従来の手法においては、本スレッドが一度も実行していない命令をサブスレッドとして先行実行することはできず、本スレッドの性能向上の制約となる。このような従来の手法に対して、実施例1に係るCPUは、本スレッドが実行されるか否かとは関係なく、本スレッドの実行から独立して、先行サブスレッドを選択することが可能である点に特徴がある。
[CPUの構成]
次に、図2〜図5を用いて、実施例1に係るCPU100の構成を説明する。ここで、図2は、中央処理装置(CMP)の構成を示すブロック図である。図3は、ソースおよび本スレッド列および先行サブスレッド列の一例を示す図である。図4は、先行サブスレッド識別回路29の回路図の一例を示す図である。図5は、先行サブスレッド識別回路による効果を説明するための図である。なお、以下では、特に言及がない限り、CMPに本発明を適用した場合におけるCPU100の構成について説明する。
まず、CPU100を構成する各構成間の連結関係について、簡単に説明する。図2に示すように、L2キャッシュ20は、Iキャッシュ21とDキャッシュ23とに接続される。また、Iキャッシュ21は、L2キャッシュ20とPC26とDecode27とに接続される。また、Queue22は、Decode27とROB24とに接続される。また、Dキャッシュ23は、ROB24とEX28とに接続される。また、ROB24は、Queue22とRF25とDキャッシュ23とEX28とに接続される。また、RF25は、ROB24に接続される。また、PC26は、Iキャッシュ21に接続される。また、Decode27は、Iキャッシュ21とQueue22とに接続される。また、EX28は、ROB24とDキャッシュ23とRF25とに接続される。
L2(level2)キャッシュは、CPU内部(コア外部)に設けられたキャッシュメモリの一種で、使用頻度の高い命令やデータを記憶する。例えば、L2キャッシュ20は、図3に示す命令(1)〜(8)や命令実行に用いるデータ(オペランド)を記憶する。
I(インストラクション)キャッシュは、CPU内部(コア内部)に設けられたキャッシュメモリの一種で、命令を記憶する。例えば、Iキャッシュ21は、図3に示す命令(1)〜(8)を記憶する。また、Iキャッシュ21は、コア内部に設けられているため、コア外に設置されているL2キャッシュ20と比較して、後述するPC26が、より高速にアクセスするキャッシュである。
Queue22は、何らかの処理を待たせる際に用いられ、具体的には、後述するEX28によって処理されるのを待っている命令を記憶する。例えば、Queue22は、後述するDecode27によってどのような命令かを解釈された命令を、本来の実行順番(アウトオブオーダ的に実行される場合における命令の実行順番ではなく、インオーダ的に実行される場合における命令の実行順番)で記憶する。
Dキャッシュ23は、CPU内部(コア内部)に設けられたキャッシュメモリの一種で、データ(オペランド)を記憶する。具体的には、ロード命令でDキャッシュ23の指定されたアドレスの内容を後述するROB24に転送する。またストア命令により、後述するROB24ないしRF25の内容をDキャッシュ23の指定されたアドレスに転送する。
ROB24(Reorder Buffer)は、アウトオブオーダ実行機能を備えるCPU内部(コア内部)に設けられたバッファであって、キューに記憶された命令に対して割り当てられ、アウトオブオーダ的に命令が実行されて得られた命令の実行結果を記憶する。またROB24は後述するRF25と共に、命令の実行に必要なソースデータ(オペランド)を後述するEX28に供給する。
RF25(Register File)は、CPU内部(コア内部)に設けられた記憶素子であり、演算や実行状態の保持に用いられ、データ(オペランド)(例えば、他の命令の実行結果を利用する場合など)や命令の実行結果を記憶する。具体的には、ROB24に記憶された命令の実行結果は、命令コミット時に本来の実行順番に対応する順番でRF25に転送される。このときROB24に記憶された実行結果は削除される。またRF25はROB24と共に、命令の実行に必要なデータ(オペランド)を後述するEX28に供給する。
PC(命令制御部)26は、Iキャッシュ21から、命令を読み取る(フェッチする)。例えば、PC(命令制御部)26は、命令実行タイミングとなると、実行する命令がIキャッシュ21に記憶されているかを確認し、記憶されている場合には、実行する命令を読み取る。一方、例えば、PC(命令制御部)26は、実行する命令がIキャッシュ21に記憶されていない場合には、L2キャッシュ20から実行する命令を読み取り、Iキャッシュ21に記憶させ、Iキャッシュ21から、命令を読み取るなどする。なお、PC(命令制御部)26は、L2キャッシュ20にも実行する命令が記憶されていない場合には、CPU外に設けられたメモリ(図示していない)から実行する命令を読み取り、L2キャッシュ20に記憶させ、Iキャッシュ21に記憶させ、Iキャッシュ21から、命令を読み取る。
Decode27は、命令がどのような命令かを解釈(命令解釈)する。例えば、Decode27は、実行する命令がPC26によって読み取られると、読み取られた命令を解釈する。そして、Decode27は、Queue22に空きがあるかを判別する。ここで、Queue22に空きがある場合には、命令を実行するために必要な処理を実行させるための制御信号を、本来の実行順番でQueue22に向けて送る。一方、Decode27は、Queue22に空きがない場合には、空きができるまで空きがあるかを判別する。またROB24は、命令がQueue22に記憶された時点で結果格納用のエントリを割り当てる。
EX28は、対応する命令実行に必要なオペランドをROB24ないしRF25から取得する。例えば、EX28は、Queue22に記憶された命令に対して、ROB24ないしRF25に必要なオペランドをリクエストする。命令が演算命令の場合、EX28は取得したオペランドを使用して演算を実行し、結果を割り当てられたROB24に記憶させる。一方命令がロード命令の場合、EX28は取得したオペランドを使用してアドレス計算を実行し、Dキャッシュ23に対して該当アドレスのデータをリクエスト(要求)する。ここで、EX28は、Dキャッシュ23に必要なデータが記憶されている場合には、データを取得し、割り当てられているROB24に取得したデータを記憶させる。一方、EX28は、Dキャッシュ23に必要なデータが記憶されていない場合には、L2キャッシュ20に対して必要なデータをリクエスト(要求)する。ここで、EX28は、L2キャッシュ20に必要なデータが記憶されている場合には、データを取得し、取得したデータをDキャッシュ23に記憶させ、割り当てられたROB24に記憶させる。一方、EX28は、必要なデータがL2キャッシュ20に記憶されていない場合には、必要なデータがリクエストを出したキャッシュやバッファに記憶されるまで待機する。そして、必要なデータが記憶されると、データを取得し、割り当てられたROB24に記憶させる。さらに詳細な一例をあげて説明すると、必要なオペランドが他の命令の実行結果である場合に、EX28は、他の命令が実行されて実行結果がROB24に記憶されると、ROB24からオペランド(他の命令の実行結果)を取得する。実行結果がROB24からRF25に転送済みの場合は、ROB25から取得する。
なお、本実施例では、上記した、EX28と、L2キャッシュ20とDキャッシュ23とROB24とRF25との間の関係を用いて記載するが、本発明はこれに限定されるものではなく、EX28(または、CPU100)は、任意のキャッシュやバッファからオペランドを取得してよい。例えば、本実施例では、L2キャッシュとDキャッシュの2階層のキャッシュを備える場合について説明するが、L3キャッシュを備えていてもよい。
また、EX28(Execution Unit)は、キューに記憶されている命令の中から実行できる命令を選択して、処理能力を割り当てる。例えば、EX28は、EX28の処理能力に空きがあるかを判別する。ここで、EX28は、EX28の処理能力に空きがない場合には、空きができるまで判別を続行する。一方、EX28は、EX28の処理能力に空きがある場合には、キューに記憶されている実行待ち状態にある命令のなかから、すぐに実行できる命令を取得し、処理能力を割り当てる。さらに詳細には、EX28は、すぐに実行できる命令として、命令実行に必要なオペランドがROB24ないしRF25に記憶されているものを取得する。
また、EX28は、命令を実行(演算)する。例えば、EX28は、処理能力を割り当てた命令を実行する際に必要なオペランドをROB24ないしRF25から取得し、命令を実行する。そして、例えば、EX28は、命令を実行して得られた実行結果を、ROB24に記憶させる。
また、ROB24は、本来の実行順番に対応する順番で、実行結果をRF25に記憶させる。例えば、ROB24は、コミットがあった場合に(該当する命令の処理を完了させていいと判断した場合に)、本来の実行順番に対応する順番で、ROB24に記憶されている実行結果をRF25に転送する。さらに詳細には、EX28は、図3に示した命令1の実行結果をROB24に記憶し、その後、命令3の実行結果をROB24に記憶し、続いて、命令4の実行結果をROB24に記憶し、そして、命令2の実行結果をROB24に記憶し、コミットがあった場合に、ROB24に記憶した順番である命令1、命令3、命令4、命令2の順番で、実行結果をRF25に記憶するのではなく、本来の実行順番である命令1、命令2、命令3、命令4の順番を用いて、実行結果をROB24からRF25に転送する。
なお、以上で説明したCPUの構成は、本スレッドを実行する際に用いられる構成であり、従来の技術どおりに機能する構成である。続いて、本発明において、先行サブスレッドを選択して実行する構成について説明する。なお、図2に示すように、Iキャッシュ21(m)、Queue22(m)、Dキャッシュ23(m)、Dキャッシュ23(m)、ROB24(m)、RF25(m)およびEX28(m)は、マルチスレッド実行機能を実現するために付加されている構成である。実施例1に係るCPUは、このようなCPUの構成に、さらに、先行サブスレッドを選択することを目的として、Decode27(m)とQueue22(m)との間に先行サブレッド識別回路29(特許請求の範囲に記載の「選択回路」に対応する」)を備えているものである。なお、以下では、従来の技術どおりに機能する構成と異なる部分について重点的に記載を行い、同様の部分については、簡単に記載し、または説明を省略する。
まず、本発明に係る先行サブスレッドを実行する際に用いられるマルチスレッド実行用に追加された構成における接続関係について簡単に説明する。図2に示すように、Decode27(m)は、Iキャッシュ21(m)と先行サブスレッド識別回路29と接続される。また、先行サブスレッド識別回路29は、Decode27(m)とQueue22(m)とに接続される。また、Queue22(m)は、先行サブスレッド識別回路29とROB24(m)とに接続される。
Iキャッシュ21(m)は、Iキャッシュ21と同様の機能を有し、PC26(m)は、PC26と同様の機能を有して同様の処理を行い、Decode27(m)は、Decode27と同様の機能を有して同様の処理を行う。
Dキャッシュ23(m)は、後述する先行サブスレッド識別回路29によって判別された先行サブスレッドを実行する際に必要となるオペランドを記憶する。
ROB24(m)は、後述する先行サブスレッド識別回路29によって判別されてキューに記憶された先行サブスレッドに対して割り当てられ、割り当てられた先行サブスレッドが用いるオペランドを記憶する。また、ROB24(m)は、アウトオブオーダ的に先行サブスレッドが実行されて得られた実行結果を記憶する。
RF25(m)は、CPU内部に設けられた演算や実行状態の保持に用いる記憶素子であり、データを記憶する。具体的には、後述するEX28(m)により実行されROB24(m)に格納された先行サブスレッドの実行結果は、本来の実行順番に対応する順番でROB24(m)からRF25(m)に転送される。
Queue22(m)は、先行サブスレッド識別回路29によって判別された先行サブスレッドを記憶する。
先行サブスレッド識別回路29は、本スレッドの実行結果を解析して得られるスレッド各々間での関係ではなく、本スレッドを構成する命令各々が中央処理装置に指示する内容を判別して先行サブスレッドを選択する。例えば、先行サブスレッド識別回路29は、内容として、各々の命令種別を判別して先行サブスレッドを選択する。さらに詳細な一例をあげると、先行サブスレッド識別回路29は、命令種別として、レジスタに格納されるデータをメモリに格納するストア命令または浮動小数点演算命令に該当するかを判別し、該当しない命令を選択することで先行サブスレッドを選択する。
ここで、先行サブスレッド識別回路29による先行サブスレッド識別についてさらに説明すると、先行サブスレッド識別回路29は、各命令間の依存関係を用いずに、本スレッドから先行サブスレッドを判別する。例えば、先行サブスレッド識別回路29は、各命令間のデータ依存関係を用いずに、命令種別のみを用いて、先行サブスレッドを判別する。例えば、先行サブスレッド識別回路29は、本スレッドの各命令の命令種別がDecode27(m)によって解読されてQueue22(m)に向けて送られると、送られた命令が予め記憶された命令種別と一致する(または、一致しない)かを判別し、一致する命令(または、一致しない命令)を先行サブスレッドとして判別して、先行サブスレッドのみをQueue22(m)に送る。
ここで、さらに図3および図4を用いて先行サブスレッド識別回路29についてさらに詳細な一例をあげて説明する。例えば、図3に示すように、下記(S)に示すソースを用いる場合には、かかるソースはコンパイルされて、図3に示すように、下記(1)〜(8)に示す本スレッドとして認識される。
ここで、図3に示すソース(下記(S))では、「i」は変数であって、1から1000000まで変化させてソースを実行して処理を終了することを示す。また、図3に示す本スレッド(下記(1)〜(8))では、「R1」は、配列Xにおける先頭アドレスを示し、「R2」は、配列Yの先頭アドレスを示し、「R3」は、変数「i」×4(バイト)を示し、「R4」は、1000000−変数「i」を示し、「FR」は、レジスタファイルを示す。
さらに、図3に示す本スレッド(下記(1)〜(8))各々の内容について説明する。命令(1)は、R1にR3を加算した値が示すメモリの配列Xにおけるアドレスに格納されているデータを、FR1(レジスタファイル「1」)に格納する命令である。命令(2)は、FR1に格納されている値とFR2に格納されている値を乗算し、演算した結果をFR3に格納する浮動小数点演算命令である。命令(3)は、FR3に格納されている値とFR4に格納されている値を加算し、演算した結果をFR5に格納する浮動小数点演算命令である。命令(4)は、FR5に格納されている値に対してFR6に格納されている値を割算し、演算した結果をFR7に格納する浮動小数点演算命令である。命令(5)は、R2にR3を加算した値が示すメモリの配列Yにおけるアドレスに、FR7に格納されている値をストアするストア命令である。命令(6)は、R3に8を加算する命令である。命令(7)は、R4から1を減算する命令である。命令(8)は、R4が0より大きいときには、命令(1)〜(8)の処理を繰り返させる命令である。
(S)do i=1,1000000 Y(i)=(X(i)*B+C)/D) end do
(1)[R1+R3]→FR1
(2)FR1×FR2→FR3
(3)FR3+FR4→FR5
(4)FR5/FR6→FR7
(5)FR7→[R2+R3]
(6)R3+8→R3
(7)R4−1→R4
(8)Branch Loop if R4>0
なお、ここで、ソースとは、高級言語を用いて記載されたソースコード(プログラム)である。高級言語とは、プログラミング言語において、自然語に近く、人間にとって理解しやすい構文や概念を持った言語の総称である。例えば、高級言語では、ソースコードが、主に英単語や記号などを組み合わせて記述され、コンパイラなどが、高級言語で記述されたソースコードを機械語に変換(コンパイル)し、処理装置(例えば、CPU)が、機械語に変換されたソースコードを実行する。コンパイルとは、人間がプログラミング言語(例えば、高級言語)を用いて作成したプログラムのソースコードを、コンピュータ上で実行可能な機械語に変換することである。
ここで、先行サブスレッド識別回路29は、図4に示すように、Decode27(m)によって命令種別を解読された命令が送られると、送られてきた命令が浮動小数点演算命令(命令(2)〜(4))またはメモリストア命令(命令(5))である場合には、スイッチがONになり(図4の(1))、命令がQueue22(m)に送られない(図4の(2))。一方、先行サブスレッド識別回路29は、送られてきた命令が浮動小数点演算命令またはメモリストア命令でない場合には、命令が先行サブスレッドを構成する命令として判別され、スイッチがOFFとなる(図4の(3))。そして、先行サブスレッド識別回路29は、命令(1)、(6)〜(8)を、図4に示すように、先行サブスレッドを構成する各命令(a)〜(d)(命令(1)、(6)〜(8)に対応する)として、Queue22(m)に送る(記憶させる)。ROB24(m)は各命令がQueue22(m)に記憶された時点で、結果格納用のエントリを割り当てる。
EX28(m)は、対応する命令実行に必要なオペランドをROB24(m)ないしRF25(m)から取得する。また、EX28(m)は、先行サブスレッド識別回路29によって選択されてQueue22(m)に記憶された先行サブスレッドのなかから、すぐに実行できる命令を選択し、処理能力を割り当てる。また、EX28(m)は、命令を実行(演算)し、結果をROB24(m)に記憶させる。RF25(m)は、ROB24(m)に記憶された命令の実行結果を、命令コミット時に本来の実行順番に対応する順番で記憶する。
ここで、上記したように、先行サブスレッド識別回路29は、マルチスレッド実行用に追加された構成において実行されるため、本スレッドとは独立に動作する。そして、先行サブスレッド識別回路29は、先行サブスレッドの命令をデコードした後、デコードされた命令種別に応じて、先行サブスレッドとして必要な命令を識別して、EX28などに送出する。
すなわち、本発明は、本スレッドが実行されたか否かとは関係なく、本スレッドの実行から独立して、先行サブスレッドを選択することが可能である点に特徴がある。その結果、本スレッドが初めて実行される際にも(一度も実行されていない場合にも)、先行サブスレッドを選択して先行して実行することにより、本スレッドの性能を向上することが可能である点に特徴がある。
例えば、本発明は、先行サブスレッドを本スレッドの初回実行の前にEX28(m)によって実行させることにより、EX28(m)が、本スレッドを実行する際に必要なオペランドを予めメモリからL2キャッシュ20、Dキャッシュ23、およびDキャッシュ23(m)へプリフェッチし、本スレッド実行時に、EX28が、オペランドをメモリからフェッチする処理を省略することが可能であり、本スレッドを処理する性能が向上する。
ここで、従来の手法と対比において、本発明の特徴について改めて説明する。図5の(従来)に示すように、従来の手法では、本スレッドを一度実行した後に、データの依存関係(各命令を実行した結果得られる実行結果や各命令で用いられるデータが、他の命令を実行する際に用いられるかどうかを)を解析し、解析結果を参照して先行サブスレッドを選択する。このため、本スレッドを一度目に実行する際には、本スレッドを処理する際の性能を向上させることはできない。例えば、図5に示す例では、依存関係を解析後、本スレッドの二巡目に相当する先行サブスレッドの一巡目が実行され、先行サブスレッドの一巡目による実行結果(例えば、図3の例では、R3の値や、R4の値など)を用いて先行サブスレッドの二巡目が行われることにより、初めて、その後行われる本スレッドの三巡目を処理する性能が向上する。
すなわち、従来の手法では、図5の(A)において、先行サブスレッドが実行された結果[R1+R3]に格納されているデータをFR1にロードするために、[R1+R3]に格納されているデータをプリフェッチする指示が行われることにより、図5の(B)における本命令(1)を処理する性能が向上する。いいかえれば、図5の(従来)に示す例においては、従来の手法では、本スレッドの一巡目と二巡目とを処理する性能は向上しない。
このような従来の手法と比較して、図5の(X)に示すように、本発明を適用することにより、実施例1に係る中央処理装置は、本スレッドの実行と同時期に、先行サブスレッドを選択して実行することが可能である点に特徴がある。すなわち、本発明を適用することにより、図5の(C)に示すように、先行サブスレッドによって[R1+R3]に格納されているデータがFR1にロードされる。このことは、本スレッドの二巡目から見ると、実施例1に係る中央処理装置では、[R1+R3]に格納されているデータをプリフェッチする指示が行われたことになる。この結果、実施例1に係る中央処理装置では、図5の(D)に示す本スレッド(1)を実行する性能が向上し、本スレッドを処理する際の性能が向上することになる。いいかえれば、従来の手法において本スレッドを実行する性能が向上するタイミングと比較して、本発明を適用することにより、実施例1に係る中央処理装置は、早いタイミング(より前に実行される本スレッド)において、本スレッドを実行する性能が向上する。
また、本発明を適用することにより、実施例1に係る中央処理装置は、図5(Y)に示すように、先行サブスレッドを本スレッドの初回実行の前にEX28(m)によって実行させることにより、本スレッドの一巡目から性能を向上させることが可能である点に特徴がある。すなわち、実施例1に係る中央処理装置では、図5(E)に示すように、EX28(m)が、本スレッドを実行する前に先行サブスレッドを実行することにより、本スレッドの一巡目が実行される前において、先行サブスレッドによって[R1+R3]に格納されているデータがFR1にロードされる。このことは、本スレッドの一巡目から見ると、実施例1に係る中央処理装置は、[R1+R3]に格納されているデータをプリフェッチする指示が行われたことになる。この結果、実施例1に係る中央処理装置では、図5(F)に示す本スレッド(1)を実行する性能が向上し、本スレッドを処理する際の性能が向上することになる。いいかえれば、従来の手法においては、本スレッドの一巡目の性能を向上させることはできなかったのに対して、本発明を適用することにより、実施例1に係る中央処理装置は、本スレッドの一巡目から性能が向上する。なお、先行サブスレッドを選択して実行するタイミングに関しては、上記した図5の(X)や(Y)に示す場合に限られず、任意のタイミングで選択して実行してよい。
また、実施例1に係る中央処理装置は、メモリストア命令を除くことで、先行サブスレッドを実行することにより、メモリ領域が破壊されるのを防止することが可能である点に特徴がある。いいかえれば、データをメモリに書き込む処理を行わず、読み込む処理のみとすることによって、先行サブスレッドを実行することによって、本スレッドを実行するために必要なデータとしてメモリに格納されているデータを破壊することを回避することが可能である。これにより、先行サブスレッドを実行することにより、本スレッドの処理が誤動作してしまう状況を回避することが可能である点に特徴がある。
また、浮動小数点演算命令は、メモリアクセスを行うときに必要となるアドレスを選択することを目的として行われるケースは殆どなく、さらに浮動小数点演算命令の実行に要する時間は、整数演算命令など他の命令の実行時間より一般的に大きい。このため、実施例1に係る中央処理装置は、浮動小数点演算命令を除くことにより、先行サブスレッドを実行する際に必要な処理時間を短縮し、また、中央処理装置に対する処理を行う際の負担を軽減することが可能であり、本スレッドを実行する際の性能を、効率的に向上させることが可能である点に特徴がある。
なお、図7に示すように、典型的な科学技術計算用プログラムにおいて、メモリストア命令および浮動小数点演算命令以外の割合は全命令の40%未満にすぎず、先行サブスレッド用命令識別回路においてメモリストア命令および浮動小数点演算命令以外を選択することにより、本スレッドに対して十分に短い(処理時間が短い)先行サブスレッドを選択することが可能である。なお、図7は、命令種別の分布について説明するための図である。
[先行サブスレッド識別回路による処理の一例]
次に、図6を用いて、実施例1における先行サブスレッド識別回路29による処理の一例について説明する。図6は、先行サブスレッド識別回路29の処理の一例を示すフローチャートである。
同図に示すように、先行サブスレッド識別回路29は、命令を受信すると(ステップS101肯定)、命令内容種別を判別する(ステップS102)。つまり、本スレッドの実行結果を解析して得られる命令各々間での関係ではなく、本スレッドを構成する命令各々が中央処理装置に指示する内容を判別する。そして、先行サブスレッド識別回路29は、ストア命令または浮動小数点演算命令かどうかを判別する(ステップS103)。ここで、先行サブスレッド識別回路29は、受信した命令が、ストア命令または浮動小数点演算命令でない場合には(ステップS103否定)、受信した命令を先行サブスレッドとして選択して、Queue22に送信する(ステップS104)。一方、先行サブスレッド識別回路29は、受信した命令が、ストア命令または浮動小数点演算命令である場合には(ステップS103肯定)、Queue22には送信しない(ステップS105)。そして、先行サブスレッド識別回路29による選択処理を終了する。
[実施例1の効果]
上記したように、実施例1によれば、本スレッドの実行結果を解析して得られる命令各々間での関係ではなく、本スレッドを構成する命令各々が中央処理装置に指示する内容を判別して先行サブスレッドを選択するので、一度も実行していない本スレッドから、先行サブスレッドを選択することが可能である。
また、実施例1によれば、先行サブスレッド識別回路29は、内容として、各々の命令種別を判別して先行サブスレッドを選択するので、命令種別を確認するだけで簡単に先行サブスレッドを選択することが可能である。
具体的には、従来の手法においては、本スレッドのリタイア命令のデータ依存解析結果に基づいて先行スレッド用命令を識別しているため、必要な回路規模が大きくなってしまう。このような従来の手法と比較して、本発明を適用することにより、先行サブスレッドを選択する際に必要な処理量や、処理に必要な回路の規模を小さくすることが可能である。この結果、例えば、本発明を簡単に実装することが可能である。
また、実施例1によれば、先行サブスレッド識別回路29は、命令種別として、レジスタに格納されるデータをメモリに格納するストア命令または浮動小数点演算命令に該当するかを判別し、該当しない命令を選択することで先行サブスレッドを選択するので、ストア命令と浮動小数点命令とを除外するのみで、簡単に先行サブスレッドを選択することが可能である。
さて、これまで本発明の実施例について説明したが、本発明は上述した実施例以外にも、種々の異なる形態にて実施されてよいものである。
例えば、実施例1では、CMPに本発明を適用した場合におけるCPU100の構成について説明したが、本発明はこれに限定されるものではなく、SMTに本発明を適用してもよい。例えば、図8に示すように、DecodeとQueueとの間に先行サブスレッド識別回路を設けることによって、本発明を実施してもよい。
さらに詳細に説明すると、実施例1では、図2に示したCPU(CMP)の構成において、上段部が、本スレッドの処理を行い、下段部が、先行サブスレッドの処理を司っている。ここで、実施例1においては、本スレッドは、上段部において従来技術通りに実行される。一方、実施例1においては、下段部は、上段部と同様に命令フェッチ、デコードを行うが、デコード結果は先行サブスレッド識別回路に送出され、該当回路が、命令デコード結果に基づき先行実行に必要な命令のみを先行サブスレッドとして選択し、Queueに送出する場合について説明した。
本発明の実施は、このようなCMPに本発明を適用した場合に限られるものではなく、図8に示すようなSMTに本発明を適用してもよい。すなわち、本スレッドは、従来技術通りに実行される。その上で、先行サブスレッドは、本スレッドと同様に命令フェッチ、デコードされるが、デコード結果は先行サブスレッド識別回路に送出され、該当回路は命令デコード結果に基づき先行実行に必要な命令のみを選択し、Queueに送出する。なお、図8において、PC26aとRF25aとは、本スレッドを実行する構成部である。また、PC26bとRF25bとは、マルチスレッド実行機能をするために付加されている構成であり、先行サブスレッドを選択して実行する処理に用いられる。
また、実施例では、先行サブスレッドを選択する際に、命令種別を用いる場合について説明したが、本発明はこれに限定されるものではなく、例えば命令実行結果を格納するレジスタ番号を用いるようにしてもよい。
また、実施例では、命令種別として、ストア命令と浮動小数点演算命令とを除いて先行サブスレッドを選択する場合を説明したが、本発明はこれに限定されるものではなく、例えばさらに整数除算命令を除いて先行サブスレッドを選択するようにしてもよい。
上記文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報(例えば、図1〜図6、図8)については、特記する場合を除いて任意に変更することができる。
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる例えば、図2におけるEX28の機能において、「キューに記憶されている命令の中から実行できる命令を選択して、処理能力を割り当てる」機能と「本来の実行順番に対応する順番で、実行結果をROB24に記憶させる」機能とを分離してもよい。また、例えば、図2におけるROB24とRF25を統合してもよい。
(付記1)実行対象となる複数の命令で構成される本スレッドを実行し、並びに、所定のスレッドに必要な情報をプリフェッチする一つまたは複数の命令を先行サブスレッドとして当該本スレッドから選択して当該所定のスレッドに先行して実行する中央処理装置であって、
前記本スレッドの実行結果を解析して得られる命令各々間での関係ではなく、前記本スレッドを構成する命令各々が前記中央処理装置に指示する内容を判別して前記先行サブスレッドを選択する選択手段を備えることを特徴とする中央処理装置。
(付記2)前記選択手段は、前記内容として、前記スレッドを構成する各々の命令種別を判別して前記先行サブスレッドを選択することを特徴とする付記1に記載の中央処理装置。
(付記3)前記選択手段は、前記命令種別として、レジスタに格納されるデータをメモリに格納するストア命令または浮動小数点演算命令に該当するかを判別し、該当しない命令を選択することで前記先行サブスレッドを選択することを特徴とする付記2に記載の中央処理装置。
(付記4)実行対象となる複数の命令で構成される本スレッドを実行し、並びに、前記所定のスレッドに必要な情報をプリフェッチする一つまたは複数の命令を先行サブスレッドとして当該本スレッドから選択して当該所定のスレッドに先行して実行する中央処理装置に設けられた選択回路であって、
前記本スレッドの実行結果を解析して得られる命令各々間での関係ではなく、前記本スレッドを構成する命令各々が前記中央処理装置に指示する内容を判別して前記先行サブスレッドを選択する選択ステップを備えることを特徴とする選択回路。
(付記5)実行対象となる複数の命令で構成される本スレッドを実行し、並びに、前記所定のスレッドに必要な情報をプリフェッチする一つまたは複数の命令を先行サブスレッドとして当該本スレッドから選択して当該所定のスレッドに先行して実行する中央処理装置における選択方法であって、
前記本スレッドの実行結果を解析して得られる命令各々間での関係ではなく、前記本スレッドを構成する命令各々が前記中央処理装置に指示する内容を判別して前記先行サブスレッドを選択する選択ステップを含んだことを特徴とする選択方法。
以上のように、本発明は、中央処理装置、選択回路および選択方法に有用であり、特に、実行対象となる複数の命令で構成される本スレッドを実行し、並びに、所定のスレッドに必要な情報をプリフェッチする一つまたは複数の命令を先行サブスレッドとして本スレッドから選択して所定のスレッドに先行して実行する中央処理装置であって、本スレッドの実行結果を解析して得られるスレッド各々間での関係ではなく、本スレッドを構成する命令各々が中央処理装置に指示する内容を判別して先行サブスレッドを選択する中央処理装置、選択回路および選択方法の実現に適する。
先行サブスレッド識別回路の概要と特徴を説明するための図である。 中央処理装置(CMP)の構成を示すブロック図である。 ソースおよび本スレッド列および先行サブスレッド列の一例を示す図である。 先行サブスレッド識別回路の回路図の一例を示す図である。 先行サブスレッド識別回路による効果を説明するための図である。 先行サブスレッド識別回路の処理の一例を示すフローチャートである。 命令種別の分布について説明するための図である。 中央処理装置(SMT)の構成を示すブロック図である。 CMPおよびSMTについて説明するための図である。
符号の説明
10 Decode
11 先行サブスレッド識別回路
12 Queue
20 L2キャッシュ
21 Iキャッシュ
22 Queue
23 Dキャッシュ
24 ROB
25 RF
26 PC
27 Decode
28 EX
29 先行サブスレッド識別回路

Claims (5)

  1. 実行対象となる複数の命令で構成される本スレッドを実行し、並びに、所定のスレッドに必要な情報をプリフェッチする一つまたは複数の命令を先行サブスレッドとして当該本スレッドから選択して当該所定のスレッドに先行して実行する中央処理装置であって、
    前記本スレッドの実行結果を解析して得られる命令各々間での関係ではなく、前記本スレッドを構成する命令各々が前記中央処理装置に指示する内容を判別して前記先行サブスレッドを選択する選択手段を備えることを特徴とする中央処理装置。
  2. 前記選択手段は、前記内容として、前記スレッドを構成する各々の命令種別を判別して前記先行サブスレッドを選択することを特徴とする請求項1に記載の中央処理装置。
  3. 前記選択手段は、前記命令種別として、レジスタに格納されるデータをメモリに格納するストア命令または浮動小数点演算命令に該当するかを判別し、該当しない命令を選択することで前記先行サブスレッドを選択することを特徴とする請求項2に記載の中央処理装置。
  4. 実行対象となる複数の命令で構成される本スレッドを実行し、並びに、所定のスレッドに必要な情報をプリフェッチする一つまたは複数の命令を先行サブスレッドとして当該本スレッドから選択して当該所定のスレッドに先行して実行する中央処理装置に設けられた選択回路であって、
    前記本スレッドの実行結果を解析して得られる命令各々間での関係ではなく、前記本スレッドを構成する命令各々が前記中央処理装置に指示する内容を判別して前記先行サブスレッドを選択する選択手段を備えることを特徴とする選択回路。
  5. 実行対象となる複数の命令で構成される本スレッドを実行し、並びに、所定のスレッドに必要な情報をプリフェッチする一つまたは複数の命令を先行サブスレッドとして当該本スレッドから選択して当該所定のスレッドに先行して実行する中央処理装置における選択方法であって、
    前記本スレッドの実行結果を解析して得られる命令各々間での関係ではなく、前記本スレッドを構成する命令各々が前記中央処理装置に指示する内容を判別して前記先行サブスレッドを選択する選択ステップを含んだことを特徴とする選択方法。
JP2007324029A 2007-12-14 2007-12-14 中央処理装置、選択回路および選択方法 Active JP5105359B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2007324029A JP5105359B2 (ja) 2007-12-14 2007-12-14 中央処理装置、選択回路および選択方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2007324029A JP5105359B2 (ja) 2007-12-14 2007-12-14 中央処理装置、選択回路および選択方法

Publications (2)

Publication Number Publication Date
JP2009146227A true JP2009146227A (ja) 2009-07-02
JP5105359B2 JP5105359B2 (ja) 2012-12-26

Family

ID=40916750

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2007324029A Active JP5105359B2 (ja) 2007-12-14 2007-12-14 中央処理装置、選択回路および選択方法

Country Status (1)

Country Link
JP (1) JP5105359B2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2011141743A (ja) * 2010-01-07 2011-07-21 Nec Corp マルチプロセッサ、これを用いたコンピュータシステム、およびマルチプロセッサの処理方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005521924A (ja) * 2001-06-28 2005-07-21 インテル コーポレイション シングルスレッドプログラムのマルチスレッドでのインプリシットな実行を可能にするマルチスレッドプロセッサ
JP2006518053A (ja) * 2002-12-24 2006-08-03 サン・マイクロシステムズ・インコーポレイテッド ハードウェア・スカウト・スレッディングを通してコードを推測で実行することによるプリフェッチの生成
JP2007507048A (ja) * 2003-09-30 2007-03-22 インテル・コーポレーション マルチスレッディングのためのコンパイラが生成したヘルパースレッドの方法および装置

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005521924A (ja) * 2001-06-28 2005-07-21 インテル コーポレイション シングルスレッドプログラムのマルチスレッドでのインプリシットな実行を可能にするマルチスレッドプロセッサ
JP2006518053A (ja) * 2002-12-24 2006-08-03 サン・マイクロシステムズ・インコーポレイテッド ハードウェア・スカウト・スレッディングを通してコードを推測で実行することによるプリフェッチの生成
JP2007507048A (ja) * 2003-09-30 2007-03-22 インテル・コーポレーション マルチスレッディングのためのコンパイラが生成したヘルパースレッドの方法および装置

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2011141743A (ja) * 2010-01-07 2011-07-21 Nec Corp マルチプロセッサ、これを用いたコンピュータシステム、およびマルチプロセッサの処理方法

Also Published As

Publication number Publication date
JP5105359B2 (ja) 2012-12-26

Similar Documents

Publication Publication Date Title
JP5889986B2 (ja) 実行された命令の結果を選択的にコミットするためのシステムおよび方法
JP6043374B2 (ja) 動的アウトオブオーダプロセッサパイプラインを実装する方法および装置
US9569186B2 (en) Energy-focused re-compilation of executables and hardware mechanisms based on compiler-architecture interaction and compiler-inserted control
US6151662A (en) Data transaction typing for improved caching and prefetching characteristics
JP5638107B2 (ja) データ処理回路
JP4841861B2 (ja) 演算処理装置及びデータ転送処理の実行方法
US5958045A (en) Start of access instruction configured to indicate an access mode for fetching memory operands in a microprocessor
JP5335440B2 (ja) オペランドの早期の条件付き選択
JP4134179B2 (ja) ソフトウエアによる動的予測方法および装置
US20060095746A1 (en) Branch predictor, processor and branch prediction method
US20180232232A1 (en) Compiler-assisted lookahead (cal) memory system apparatus for microprocessors
JP2009524167A5 (ja)
JP5105359B2 (ja) 中央処理装置、選択回路および選択方法
GB2564391B (en) An apparatus and method for controlling use of a register cache
JP2004192021A (ja) マイクロプロセッサ
JP3532835B2 (ja) データ処理装置およびプログラム変換装置
JP5122277B2 (ja) データ処理方法、処理装置、多重命令ワードセット生成方法、コンパイラプログラム
US6769057B2 (en) System and method for determining operand access to data
US6668306B2 (en) Non-vital loads
US11347506B1 (en) Memory copy size determining instruction and data transfer instruction
JP4528993B2 (ja) マルチバンクレジスタを有するプロセッサおよびプロセッサの制御方法
JP3958320B2 (ja) マルチバンクレジスタを有するプロセッサおよびプロセッサの制御方法
KR20240128829A (ko) 루프 재생 성능을 최적화하기 위한 프로세서에서 캡처된 루프의 최적화
JP2005149297A (ja) プロセッサおよびそのアセンブラ
JPH11272463A (ja) 記憶装置及び情報処理装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20100902

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20120423

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120508

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120709

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120731

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120829

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20120918

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20120925

R150 Certificate of patent or registration of utility model

Ref document number: 5105359

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20151012

Year of fee payment: 3

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

S531 Written request for registration of change of domicile

Free format text: JAPANESE INTERMEDIATE CODE: R313531

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250