(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-08-15
(45)【発行日】2023-08-23
(54)【発明の名称】演算処理装置、及び情報処理装置
(51)【国際特許分類】
G06F 15/80 20060101AFI20230816BHJP
G06F 15/177 20060101ALI20230816BHJP
G06F 15/173 20060101ALI20230816BHJP
【FI】
G06F15/80
G06F15/177 A
G06F15/173 683C
(21)【出願番号】P 2019112286
(22)【出願日】2019-06-17
【審査請求日】2022-03-08
(73)【特許権者】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】110003649
【氏名又は名称】弁理士法人真田特許事務所
(74)【代理人】
【識別番号】100092978
【氏名又は名称】真田 有
(74)【代理人】
【識別番号】100189201
【氏名又は名称】横田 功
(72)【発明者】
【氏名】川原 淳
【審査官】田中 幸雄
(56)【参考文献】
【文献】特開平7-200508(JP,A)
【文献】特開平9-6711(JP,A)
【文献】特開2012-199767(JP,A)
【文献】特開2018-165913(JP,A)
【文献】特表2015-509183(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 15/80
G06F 15/177
G06F 15/173
(57)【特許請求の範囲】
【請求項1】
アクセスバスを共有する複数の第1コアが属する予め設定されたコアグループを、アクセスバスごとに備えるとともに、
複数の前記コアグループの各々における1以上の第1コアとそれぞれ接続される第2コアであって、前記複数のコアグループにおいて共有される各アクセスバスを共有可能である前記第2コアと、
前記複数のコアグループの間で情報を転送するための第1転送要求に応じて、前記情報の転送元の第1コアが属する第1コアグループにおいて共有されるアクセスバスを経由して、前記転送元の第1コアから前記第2コアに前記情報を転送する制御を行なう第1制御部と、
前記複数のコアグループの間で情報を転送するための第2転送要求に応じて、前記情報の転送先の第1コアが属する第2コアグループにおいて共有されるアクセスバスを経由して、前記第2コアから前記転送先の第1コアに前記情報を転送する制御を行なう第2制御部と、を備える、
演算処理装置。
【請求項2】
前記第2コアは、
前記第2転送要求に基づき、前記情報の出力ポートを判定し、判定した出力ポートに接続される、前記第2コアに接続される複数の第1コアのうちのいずれかの第1コアに、前記情報を出力する出力回路を備える、
請求項1に記載の演算処理装置。
【請求項3】
前記第2転送要求は、前記転送先の第1コアが属する前記第2コアグループの識別情報を含み、
前記出力回路は、前記識別情報に基づき、前記情報の出力ポートを判定する、
請求項2に記載の演算処理装置。
【請求項4】
前記第2コアは、
記憶回路を備え、前記記憶回路に対する書き込み及び読み出しを行なう演算回路を備え、
前記第2コアは、
前記情報を前記記憶回路に書き込むことを指示する前記第1転送要求を受信し、
前記記憶回路から前記情報を読み出すことを指示する前記第2転送要求を受信する、
請求項
2又は請求項
3に記載の演算処理装置。
【請求項5】
前記演算回路は、前記第2転送要求に応じて前記記憶回路から前記情報を読み出した場合、読み出した前記情報を前記転送先の第1コアが備える記憶回路に書き込むことを指示するように前記第2転送要求を更新し、更新した前記第2転送要求と、読み出した前記情報とを、前記出力ポートから出力する、
請求項4に記載の演算処理装置。
【請求項6】
前記第2コアは、前記複数のコアグループの各々に属する複数の第1コアのうちのいずれかの第1コアが不良のコアである場合に、当該不良のコアに代えて、当該不良のコアが属するコアグループに属するように設定される予備コアである、
請求項1~請求項5のいずれか1項に記載の演算処理装置。
【請求項7】
前記不良のコアの検出は、前記演算処理装置のチップ診断において行なわれ、
前記チップ診断の結果に応じて設定される、前記不良のコアの有無を示す情報に基づき、前記第1制御部による前記制御及び前記第2制御部による前記制御が行なわれる、
請求項6に記載の演算処理装置。
【請求項8】
アクセスバスを共有する複数の第1コアが属する予め設定されたコアグループを、アクセスバスごとに備える演算処理装置を備え、
前記演算処理装置は、
複数の前記コアグループの各々における1以上の第1コアとそれぞれ接続される第2コアであって、前記複数のコアグループにおいて共有される各アクセスバスを共有可能である前記第2コアと、
前記複数のコアグループの間で情報を転送するための第1転送要求に応じて、前記情報の転送元の第1コアが属する第1コアグループにおいて共有されるアクセスバスを経由して、前記転送元の第1コアから前記第2コアに前記情報を転送する制御を行なう第1制御部と、
前記複数のコアグループの間で情報を転送するための第2転送要求に応じて、前記情報の転送先の第1コアが属する第2コアグループにおいて共有されるアクセスバスを経由して、前記第2コアから前記転送先の第1コアに前記情報を転送する制御を行なう第2制御部と、を備える、
情報処理装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、演算処理装置、及び情報処理装置に関する。
【背景技術】
【0002】
サーバ等の情報処理装置が備える演算処理装置、例えばCPU(Central Processing Unit)等のプロセッサにおいて、複数のコア(以下、「マルチコア」又は「複数コア」と称する場合がある)を備えるマルチコア構成が採用されることがある。マルチコアを備えるプロセッサを、以下、「マルチコアプロセッサ」と表記する場合がある。
【0003】
マルチコアプロセッサのアーキテクチャにおいては、各コア内に演算命令の実行制御部(「演算器」と称されてもよい)が設けられ、メモリ等の主記憶装置へのデータ読み出し及び書き込みと演算処理とをコアグループ単位で行なう手法が知られている。各コアグループは、複数コアの組み合わせである。
【0004】
マルチコアプロセッサでは、搭載コア数に応じて(例えば搭載コア数が多い場合)、回路実装の都合から、アクセスバス、例えばメモリバスが複数コア間で共有されることがある。また、配線性の観点から、マルチコアプロセッサでは、コアグループ内の複数コアをリング状に接続する構成が用いられることがある。
【0005】
上述したマルチコアプロセッサでは、コアグループを跨ぐコア間でデータ又は命令を転送する場合、転送経路は、主記憶装置を経由する経路となる。
【先行技術文献】
【特許文献】
【0006】
【文献】特表2015-509183号公報
【文献】特開2012-199767号公報
【文献】特開2018-165913号公報
【発明の概要】
【発明が解決しようとする課題】
【0007】
複数コアの予め設定された組み合わせを越えたコア間でデータ又は命令の転送が行なわれる場合、転送経路は主記憶装置を経由することになり、当該組み合わせ内のコア間における転送と比較して、データ又は命令の転送効率が低下する場合がある。
【0008】
このように、複数コア間における転送経路が、プロセッサの処理性能のボトルネックとなる可能性がある。
【0009】
1つの側面では、本発明は、複数のコアを備える演算処理装置の処理性能を向上させることを目的の1つとする。
【課題を解決するための手段】
【0010】
1つの側面では、演算処理装置は、アクセスバスを共有する複数の第1コアが属する予め設定されたコアグループを、アクセスバスごとに備えてよい。また、前記演算処理装置は、第2コアと、第1転送制御部と、第2転送制御部と、を備えてよい。前記第2コアは、複数の前記コアグループの各々における1以上の第1コアとそれぞれ接続されてよい。前記第2コアは、前記複数のコアグループにおいて共有される各アクセスバスを共有可能であってよい。前記第1転送制御部は、前記複数のコアグループの間で情報を転送するための第1転送要求に応じて、前記情報の転送元の第1コアが属する第1コアグループにおいて共有されるアクセスバスを経由して、前記転送元の第1コアから前記第2コアに前記情報を転送する制御を行なってよい。前記第2転送制御部は、前記複数のコアグループの間で情報を転送するための第2転送要求に応じて、前記情報の転送先の第1コアが属する第2コアグループにおいて共有されるアクセスバスを経由して、前記第2コアから前記転送先の第1コアに前記情報を転送する制御を行なってよい。
【発明の効果】
【0011】
1つの側面では、複数のコアを備える演算処理装置の処理性能を向上させることができる。
【図面の簡単な説明】
【0012】
【
図1】一実施形態に係るサーバが備えるプロセッサに着目したハードウェア構成例を示すブロック図である。
【
図2】プロセッサにおいて故障コアが存在しない場合における情報転送経路の比較例を示す図である。
【
図3】プロセッサにおいて故障コアが存在する場合における情報転送経路の一例を示す図である。
【
図4】PUT命令による情報転送経路の比較例を示す図である。
【
図5】一実施形態に係るプロセッサにおける、データ転送命令によるコアグループ間の情報転送経路の一例を示す図である。
【
図6】一実施形態に係るプロセッサにおける、データ転送命令によるコアグループ間の情報転送経路の一例を示す図である。
【
図7】PUT命令のフォーマット例を示す図である。
【
図8】PUT命令のビットアサインの一例を示す図である。
【
図9】一実施形態に係るコアのハードウェア構成例を示すブロック図である。
【
図10】一実施形態に係る冗長コアのハードウェア構成例を示すブロック図である。
【
図11】一実施形態に係るデータ転送制御部のハードウェア構成例を示すブロック図である。
【
図12】
図5に示す情報転送経路における各構成の動作例を説明するフローチャートである。
【
図13】
図5に示す情報転送経路における各構成の動作例を説明するフローチャートである。
【
図14】
図5に示す情報転送経路におけるコア及び冗長コアの動作例を示す図である。
【
図15】
図6に示す情報転送経路における各構成の動作例を説明するフローチャートである。
【
図16】
図6に示す情報転送経路における各構成の動作例を説明するフローチャートである。
【
図17】
図6に示す情報転送経路におけるコア及び冗長コアの動作例を示す図である。
【発明を実施するための形態】
【0013】
以下、図面を参照して本発明の実施の形態を説明する。ただし、以下に説明する実施形態は、あくまでも例示であり、以下に明示しない種々の変形や技術の適用を排除する意図はない。例えば、本実施形態を、その趣旨を逸脱しない範囲で種々変形して実施することができる。なお、以下の説明で用いる図面において、同一符号を付した部分は、特に断らない限り、同一若しくは同様の部分を表す。
【0014】
〔1〕一実施形態
〔1-1〕サーバの構成例
図1は、一実施形態に係るサーバ1が備えるプロセッサ10に着目したハードウェア(HW;Hardware)構成例を示すブロック図である。
【0015】
図1に示すように、サーバ1は、情報処理装置又はコンピュータの一例であり、例示的に、プロセッサ10及び複数のメモリ2を備えてよい。
【0016】
プロセッサ10は、CPU等の演算処理装置の一例であり、例えば、複数のコア13及び冗長コア14を備えるマルチコアプロセッサである。プロセッサ10は、例えば、少なくとも1つのコア13及び14により、メモリ2上に展開したソフトウェア(Software)を実行することで、サーバ1としての機能を実現する。
【0017】
ソフトウェアは、メモリ2並びにコア13及び14の少なくとも1つを指定して、種々の演算命令を発行してよい。なお、ソフトウェアは、プロセッサ10と通信可能に接続された図示しないホスト装置において実行され、ホスト装置からプロセッサ10に対して種々の演算命令が発行されてもよい。ソフトウェアには、OS(Operating System)、ミドルウェア、及び、アプリケーションの少なくとも1つが含まれてよい。
【0018】
図1に示すように、プロセッサ10は、例示的に、複数の命令制御部11、複数のデータ転送制御部12、複数のコア13及び14、複数のスイッチ(SW;Switch)16、並びに、複数のメモリコントローラ(MC;Memory Controller)17を備えてよい。
【0019】
以下の説明において、複数のメモリ2を互いに区別する場合には、
図1に示すように、符号「2」に続けて符号「A」~「H」のいずれかを付加するか、或いは、符号「2」に代えて符号「#0」~「#7」のいずれかを付加するものとする。同様に、以下の説明において、ブロック11、12及び14~17のいずれかを互いに区別する場合には、符号「11」、「12」及び「14」~「17」のいずれかに続けて符号「A」~「H」のいずれかを付加するものとする。或いは、符号「11」、「12」及び「14」~「17」のいずれかに代えて符号「#0」~「#7」並びに「#R0」及び「#R1」のいずれかを付加するものとする。さらに、以下の説明において、コア13を互いに区別する場合には、符号「13」に続けて符号「A0」~「H3」のいずれかを付加するか、符号「13」に代えて符号「#00」~「#73」のいずれかを付加するものとする。
【0020】
なお、一実施形態において、メモリ2及びブロック11~17は、
図1に例示する数に限定されるものではなく、任意の数とすることができる。
【0021】
命令制御部11は、プロセッサ10における命令に応じた処理動作の実行を制御する上位コントローラの一例である。例えば、命令制御部11Aは、コア13A0~13D3並びに冗長コア14A及び13Bによる、コア間のデータ転送命令や、メモリ2A及び2Bに対する読出命令及び書込命令等を制御してよい。また、例えば、命令制御部11Bは、コア13E0~13H3並びに冗長コア14A及び13Bによる、コア間のデータ転送命令や、メモリ2C及び2Dに対する読出命令及び書込命令等を制御してよい。読出命令及び書込命令は、それぞれ、「読出要求」及び「書込要求」と称されてもよい。
【0022】
命令制御部11は、コア13又は14に対する上述した命令(指示)を、アクセスバスを介して接続されたデータ転送制御部12に発行(例えば転送)してよい。
図1の例では、命令制御部11Aは、データ転送制御部12Aに対して命令を転送し、命令制御部11Bは、データ転送制御部12Eに対して命令を転送する。
【0023】
データ転送制御部12は、第1及び第2転送制御部の一例であり、命令制御部11からの指示に応じて、コア13間、コア13と冗長コア14との間、及び、MC17と各コア13及び14との間のデータ又は命令の転送を制御する。以下、データ及び命令を総称して「情報」と表記する場合がある。
【0024】
データ転送制御部12と各コア13及び14、並びに、MC17との間は、アクセスバスの一例であるメモリバスを介して接続される。
図1の例示するように、データ転送制御部12からコア13及び14に向かう3本のバスは、それぞれ、ライトデータ、ライト要求、及び、リード要求が伝送されるバスを示す。また、コア14及び13からデータ転送制御部12に向かう1本のバスは、リードデータが伝送されるバスを示す。
【0025】
ここで、データ転送制御部12Aは、アクセスバスを共有するコア13A0~13A3の間の情報の転送を制御する。換言すれば、各データ転送制御部12は、アクセスバスを共有する複数のコア13が属する予め設定されたコアグループを管轄(担当)し、当該コアグループにおける情報の転送を制御する。
【0026】
なお、プロセッサ10において、コアグループは、アクセスバスごとに備えられてよい(設定されてよい)。コアグループにおけるアクセスバスは、
図1においては、一例として、データ転送制御部12A~コア13A3の区間であってよい。
【0027】
以下の説明において、データ転送制御部12と、当該データ転送制御部12が担当するコアグループとを、データ転送制御部12A~12Hの符号の一部である「A」~「H」を用いて、「Aグループ」~「Hグループ」と表記する場合がある。
【0028】
一例として、Bグループでは、データ転送制御部12Bは、コア13B0~13B3の間の情報の転送を制御する。また、Cグループでは、データ転送制御部12Cは、コア13C0~13C3の間の情報の転送を制御する。Dグループ~Hグループについても同様である。
【0029】
なお、後述するように、冗長コア14は、不良のコア13、例えば故障したコア13の代わりに利用される予備コアである。このため、コアグループに故障コアが存在する場合には、冗長コア14が、故障コアに代えて当該コアグループに属することになる。従って、冗長コア14が属するコアグループを管轄するデータ転送制御部12は、故障コアを除くコアグループ内の複数のコア13及び冗長コア14の間の情報の転送を制御する。
【0030】
このように、プロセッサ10では、データ転送制御部12により、メモリ2へのデータ読み出し及び書き込み(ロード及びストア)とコア13及び14による演算処理とを、コアグループ単位で行なう。
【0031】
また、
図1に例示するように、データ転送制御部12A~12D、及び、12E~12Hは、それぞれ、リング状に接続される。例えば、データ転送制御部12は、命令制御部11からの命令を、当該命令で指定されたコア13又は14を担当するデータ転送制御部12まで順に転送してよい。
【0032】
コア13は、第1コアの一例であり、演算器(
図1において「PLOC.」と表記する)15を備える。演算器15は、演算命令の実行制御を行なう実行制御部の一例である。
【0033】
一実施形態では、コアグループ内において、コア13からメモリ2へのアクセスバスが複数のコア13間で共有され、複数のコア13がリング状に接続される。
図1の例では、Aグループにおいて、データ転送制御部12Aにより制御されるコア13A0~13A3の4個のコア13がリング状に接続される。
【0034】
冗長コア14は、複数のコアグループの各々における1以上のコア13とそれぞれ接続され(例えば隣接し)、複数のコアグループにおいて共有される各アクセスバスを共有可能である第2コアの一例である。冗長コア14は、「コア」としての演算機能及び転送機能を有してよい。
【0035】
例えば、冗長コア14は、プロセッサ10の製造段階におけるチップ診断時にコアの故障が見つかった場合に、演算能力が低下しないように故障コアの代わりに動作する、歩留まり向上用の予備コアである。一例として、冗長コア14は、複数のコアグループの各々に属する複数のコア13のうちのいずれかのコア13が不良のコア13である場合に、当該不良のコア13に代えて、当該不良のコアが属するコアグループに属するように設定されてよい。
【0036】
図1に示す例では、冗長コア14Aが予備コアとしてカバーできる範囲は、Aグループ、Bグループ、Eグループ及びFグループに属する、コア13A0~13A3、13B0~13B3、13E0~13E3及び13F0~13F3の16コア分である。また、冗長コア14Bが予備コアとしてカバーできる範囲は、Cグループ、Dグループ、Gグループ及びHグループに属する、コア13C0~13C3、13D0~13D3、13G0~13G3及び13H0~13H3の16コア分である。このような冗長コア14の構成は、16個のコア13に対して1個のコア故障に有効な冗長構成であるため、1/16冗長構成等と呼ばれる。
【0037】
SW16は、データ転送制御部12とMC17との間のアクセス経路を構成する。例えば、SW16Aは、データ転送制御部12A~12Dと、MC17A及び17Bとの間の情報の転送経路を選択的に切り替え、SW16Bは、データ転送制御部12E~12Hと、MC17C及び17Dとの間の情報の転送経路を選択的に切り替える。
【0038】
MC17は、メモリ制御部の一例であり、データ転送制御部12の要求に従ってメモリ2に対するメモリアクセス等を実行する。例えば、MC17Aはメモリ2Aに対するメモリアクセス等を実行し、MC17Bはメモリ2Bに対するメモリアクセス等を実行し、MC17Cはメモリ2Cに対するメモリアクセス等を実行し、MC17Dはメモリ2Dに対するメモリアクセス等を実行する。
【0039】
メモリ2は、主記憶装置の一例である。例えば、メモリ2A及び2Bは、それぞれ、Aグループ~Dグループによりメモリアクセス可能な記憶領域を備え、メモリ2C及び2Dは、それぞれ、Eグループ~Hグループによりメモリアクセス可能な記憶領域を備える。
【0040】
〔1-2〕冗長コアの説明
図2は、プロセッサ10において、演算器15の故障したコア(故障コア)が存在しない場合における情報転送経路の比較例を示す図である。
図2では、情報の転送経路を太実線矢印で示す。Aグループに着目すると、データ転送制御部12Aは、命令制御部11Aの指示(例えばPUSH命令)に従い、メモリ2A又は2Bから読み出したデータをMC17A又は17BとSW16Aとを経由して自身からコア13A0~13A3のいずれかに書き込む。また、データ転送制御部12Aは、命令制御部11Aの指示(例えばPULL命令)に従い、コア13A0~13A3のいずれかからデータを読み出し、SW16AとMC17A又は17Bとを経由してメモリ2A又は2Bに転送する。
【0041】
図3は、プロセッサ10において、演算器15の故障した故障コアが存在する場合における情報転送経路の一例を示す図である。
図3の例では、コア13C2及び13F3の演算器15がそれぞれ故障しているものとする。
【0042】
図3に示すように、コア13F3の演算器15が故障しているため、冗長コア14Aが稼働し、コア13C2の演算器15が故障しているため、冗長コア14Bが稼働する。この場合、コア13F3及び13C2では、演算器15は利用されないが、情報の転送経路の一部として、コア13F3及び13C2を通過するアクセスバスが利用される。
【0043】
なお、冗長コア14の転送先(換言すれば転送経路)は、故障コアの検出後に(プロセッサ10の出荷前までに)、冗長コア14の図示しないレジスタ等に対して設定される。この設定は、例えば、冗長コア14と故障コアのコアグループ内のコア13との間をリング状に接続する(アクセスバスを共有させる)ための静的(固定的)な設定である。これにより、冗長コア14Aは、コア13F3に代えてFグループのコアグループに属し、冗長コア14Bは、コア13C2に代えてCグループのコアグループに属することになる。
【0044】
図4は、データ転送命令の一例であるPUT命令による情報転送経路の比較例を示す図である。
図4において、太破線矢印で示す経路がPUT命令の経路であり、太実線矢印で示す経路がコア13間の転送データの経路である。
【0045】
PUT命令は、或るコア13の演算器15の記憶素子、例えばRAM(Random Access Memory)上のデータを、他のコア13の演算器15に転送する命令である。PUT命令により、メモリ2を介さずにコア13同士でのデータ転送が可能となる。
【0046】
図4においては、例えば、データ転送制御部12Cが、PUT命令に従い、コア13C0の演算器15の記憶素子からコア13C2の演算器15へのデータ転送を制御する。また、データ転送制御部12Fが、PUT命令に従い、コア13F3の演算器15の記憶素子からコア13F1の演算器15へのデータ転送を制御する。
【0047】
なお、
図4の例では、コアグループ内におけるコア13間のデータ転送を示すが、例えば、コア13C0からコア13F1へのデータ転送のように、コアグループを跨ぐコア13間のデータ転送を行なう場合、
図2に示すように、メモリ2を介した転送となる。
【0048】
ここで、上述のように、一実施形態に係る冗長コア14が予備コアとしてカバーできる範囲は、16コア分である。しかし、一方で、
図2に例示するように、演算器15に故障がない場合、冗長コア14の資源が使用されることはない。すなわち、冗長コア14は、歩留まり向上用のコアであるため、プロセッサ10の製造段階におけるチップ診断において故障コアがない場合のように、プロセッサ10が「良品」として出荷されると、プロセッサ10の動作において使用されることはない。
【0049】
このように、冗長コア14は、16個のコア13の中心に位置しているにも関わらず、プロセッサ10の出荷後に動作することがない、換言すれば、出荷されるプロセッサ10が少なくとも1つの未使用コアを有する、ということが十分に起こり得る。半導体の製造技術及びLSI(Large Scale Integration)の集積度の向上に伴い、出荷されるプロセッサ10において少なくとも1つの冗長コア14が使用されない可能性は、より高まる。
【0050】
そこで、一実施形態においては、未使用コア、一例として上述した冗長コア14に着目し、複数のコア13間でアクセスバスを共有するプロセッサ10において、情報の転送経路として、冗長コア14を経由させる手法について説明する。
【0051】
この手法により、現状の組み合わせであるコアグループの枠を越えた範囲に情報の転送を行なう、換言すれば、コア13間の情報の転送経路の選択肢を増やすことができる。これにより、情報の転送効率を向上させることができ、プロセッサ10の性能向上を図ることができる。
【0052】
〔1-3〕一実施形態に係るコアグループ間の情報転送経路の一例
図5及び
図6は、一実施形態に係るプロセッサ10における、データ転送命令によるコアグループ間の情報転送経路の一例を示す図である。
【0053】
なお、
図5では、複数のコアグループの間で情報を転送するための第1転送要求により、コア13C3から冗長コア14Bへの情報の転送が行なわれる経路を示す。また、
図6では、複数のコアグループの間で情報を転送するための第2転送要求により、冗長コア14Bからコア13G1への情報の転送が行なわれる経路を示す。すなわち、一実施形態においては、第1及び第2転送要求により、複数のコアグループの間における情報の転送が実現されてよい。但し、これに限定されるものではなく、1つ又は3つ以上の転送要求によって複数のコアグループの間における情報の転送が実現されてもよい。
【0054】
図5では、コア#22(コア13C2)から冗長コア#R1(冗長コア14B)へのデータ転送命令がソフトウェアから発行された場合の情報転送経路の一例を示す。
図5に示すように、データ転送命令は、命令制御部11A、データ転送制御部12A~12C、コア13C0~13C1を経由する経路で転送され、コア13C2にて受信される。コア13C2では、演算器15の記憶素子からデータ転送命令で指定された記憶領域のデータが読み出されてコア13C3を経由する経路で転送され、冗長コア14Bにて受信される。冗長コア14Bの演算器15は、受信したデータを記憶素子に書き込む。
【0055】
図5の例において、データ転送制御部12Cは、第1転送要求に応じて、情報の転送元のコア13C2が属する第1コアグループにおいて共有されるアクセスバスを経由して、転送元のコア13C2から冗長コア14Bに情報を転送する制御を行なう。
【0056】
図6では、冗長コア#R1(冗長コア14B)からコア#61(コア13G1)へのデータ転送命令がソフトウェアから発行された場合の情報転送経路の一例を示す。
図6に示すように、データ転送命令は、命令制御部11B、データ転送制御部12E~12G、コア13G0~13G3を経由する経路で転送され、冗長コア14Bにて受信される。冗長コア14Bでは、演算器15の記憶素子からデータ転送命令で指定された記憶領域のデータが読み出されてコア13G3~13G2を経由する経路で転送され、コア13G1にて受信される。コア13G1の演算器15は、受信したデータを記憶素子に書き込む。
【0057】
図6の例において、データ転送制御部12Gは、第2転送要求に応じて、情報の転送先のコア13G1が属する第2コアグループにおいて共有されるアクセスバスを経由して、冗長コア14Bから転送先のコア13G1に情報を転送する制御を行なう。
【0058】
なお、
図5及び
図6に示す情報転送経路の各構成11~14における動作の詳細は、後述する。
【0059】
以上のように、一実施形態に係るプロセッサ10によれば、冗長コア14と接続された複数のコア13を含む複数のコアグループの間で、冗長コア14を経由したデータの転送が可能となる。
【0060】
これにより、メモリ2を経由せずにデータを転送できるコア13の組み合わせを増加させることができるため、データの転送効率を上昇させ、プロセッサ10の性能を向上させることが可能となる。
【0061】
なお、
図5及び
図6に例示するコアグループ間のデータ転送が実現されるには、プロセッサ10において、少なくとも1つの未使用コアが存在すればよい。このため、ソフトウェア又はシステム(例えばプロセッサ10若しくはサーバ1)は、故障コアの有無、又は、未使用コアの有無を事前に把握できる構成を備えてよい。
【0062】
一例として、プロセッサ10は、チップ診断時の故障情報、例えば、故障コアの識別情報や、未使用のままである未使用コア(或いは故障コアに代えて利用されるように設定された「使用コア」)の識別情報を、図示しないレジスタ等に格納してよい。これにより、ソフトウェアやシステムにより、レジスタを参照することで故障コアを認識することが可能となる。なお、故障コア又は未使用コアの情報を取得(把握)するための手法は、上述した手法に限定されず、既知の種々の手法により実現可能である。
【0063】
〔1-4〕転送命令の説明
一実施形態においては、コアグループ間で情報を転送するための転送命令(転送要求)の一例として、上述したPUT命令を利用可能である。
図5及び
図6を参照して説明した転送命令の経路は、
図7に例示するPUT命令のフォーマットで一意に設定することができる。
【0064】
図7は、PUT命令のフォーマット例を示す図であり、
図8は、PUT命令のビットアサインの一例を示す図である。
【0065】
図7に例示するように、“REQ_ID”(Request ID)は、命令単位で固有に割り当てられる識別番号であり、命令の識別情報の一例である。
【0066】
“CHAIN”(Chain number)は、データ転送制御部12単位で割り当てられる識別番号がビット位置に対応付けられたビットマップである。換言すれば、“CHAIN”は、情報の転送先のコア13が属するコアグループの識別情報の一例である。例えば、
図8に示すように、“CHAIN[7:0]”における各ビットには、データ転送制御部12#7~12#0がそれぞれ割り当てられる。これにより、ON(例えば“1”)のビット位置に対応するデータ転送制御部12の管轄チェインすなわちコアグループが、命令対象であると特定される。なお、“CHAIN”の複数ビットをONに設定することで、ONのビット位置に対応する複数のデータ転送制御部12を命令対象に指定することも可能である。
【0067】
“LEN”(Data length)は、各命令で取り扱う転送データの総データ長である。
【0068】
“OPCODE”(Operation code)は、命令種ごとに割り当てられた命令種識別子である。例えば、
図8に示すように、“OPCODE[4:0]”には、“11100”(PUT read命令)、“11101”(PUT write命令)、“11000”(PULL命令)、“10000”(PUSH命令)、及び、“11111”(EXEC命令)等が割り当てられてよい。PUT read命令は、PUT命令における転送元のコア13からのデータの読出命令(読出要求)であり、PUT write命令は、PUT命令における転送先のコア13へのデータの書込命令(書込要求)である。PULL命令は、コア13からメモリ2へのデータ転送命令であり、PUSH命令は、メモリ2からコア13へのデータ転送命令である。EXEC命令は、コア13に対する演算器15による演算実行命令である。
【0069】
“SRF_LINE_ADRS”(Source register file line address)は、PUT命令におけるデータ転送元の記憶素子に割り当てられたデータ格納元アドレスである。“TRF_LINE_ADRS”(Target register file line address)は、PUT命令におけるデータ転送先の記憶素子に割り当てられたデータ格納先アドレスである。
【0070】
“SPU_ENBL”(Source processing unit enable)は、PUT命令におけるデータ転送元の“Processing Unit”の番号、例えばコア13又は14のコア番号、がビット位置に対応付けられたビットマップである。
【0071】
“TPU_ENBL”(Target processing unit enable)は、PUT命令におけるデータ転送先の“Processing Unit”の番号、例えばコア13又は14のコア番号、がビット位置に対応付けられたビットマップである。
【0072】
例えば、
図8に示すように、“SPU_ENBL[4:0]”における各ビットには、転送元コアとなる冗長コア14#z及びコア13#x3~13#x0がそれぞれ割り当てられる。また、“TPU_ENBL[4:0]”における各ビットには、転送先コアとなる冗長コア14#z及びコア13#x3~13#x0がそれぞれ割り当てられる。
【0073】
なお、
図8では、コア13を特定する符号部分(例えば「コア13#12」の場合の「12」)のうち、グループを特定する部分(例えば「1」)を「x」として、コア13#x3~13#x0と表記する。「x」は、0以上、且つ、X未満の整数である。「X」は、グループ数を示す。同様に、
図8では、データ転送制御部12を特定する符号部分(例えば「データ転送制御部12#3」の場合の「3」)をコア13と同様に「x」としたデータ転送制御部12#xを示す。また、
図8では、冗長コア14を特定する符号部分(例えば「冗長コア#0」の場合の「0」)を「z」とした冗長コア14#zを示す。「z」は、0以上、且つ、Z未満の整数である。「Z」は、未使用コア数を示す。
【0074】
このように、PUT命令では、例えばコア13A0~13A3及び冗長コア14Aのように、冗長コア14も含めたコアグループをビットマップ表記できるため、コアグループ間のデータ転送に十分なフォーマットであるといえる。
【0075】
なお、データ転送命令としては、PUT命令に限定されるものではなく、コア13とコア14との間、又は、コア13間、におけるデータ転送を指示することが可能な種々の命令が用いられてもよい。
【0076】
〔1-5〕プロセッサの構成例
次に、一実施形態に係るプロセッサ10の構成例を説明する。なお、以下の説明において、命令及びデータは、プロセッサ10内部(例えば演算器15)のクロック周波数に応じたサイクル単位で、プロセッサ10内部のバッファやセレクタ、ルータ等の論理回路により、保持及び出力等が行なわれて転送されるものとする。
【0077】
〔1-5-1〕コアの構成例
図9は、一実施形態に係るコア13のHW構成例を示すブロック図である。
図9では、「x」及び「z」の表記に加えて、コア13を特定する符号部分(例えば「コア13#12」の場合の「12」)のうち、コアグループ内のコア13の位置を特定する部分(例えば「2」)を「y」として、コア13#xyと表記する。「y」は、0以上、且つ、Y未満の整数である。「Y」は、コアグループ内のコア数を示す。同様に、
図9では、データ転送制御部12を特定する符号部分(例えば「データ転送制御部12#3」の場合の「3」)を、コア13と同様に「x」として、データ転送制御部12#xと表記する。
【0078】
図9に示すように、コア13#xyは、演算器15に加えて、例示的に、複数のバッファ(
図9中、「BUF」と表記)131b、131d、132a、132b、133b、133d、134a及び134dを備えてよい。また、コア13#xyは、例示的に、複数のセレクタ(
図9中、「SEL」と表記)131a、133c及び134cを備えてよい。さらに、コア13#xyは、例示的に、複数のルータ(
図9中、「RT」と表記)131c、132c、133a及び134bを備えてよい。以下、コア13#xyが備える上記の「バッファ」を総称する場合は、単に「バッファ」と表記し、上記の「セレクタ」を総称する場合は、単に「セレクタ」と表記し、上記の「ルータ」を総称する場合は、単に「ルータ」と表記する。
【0079】
バッファは、情報を一時的に保持する論理回路である。
【0080】
セレクタは、n入力1出力(nは2以上の整数;
図9の例ではn=2)の論理回路である。n入力1出力のセレクタは、例えば、n個の入力端子及び1個の出力端子を備えてよく、マルチプレクサと称されてもよい。マルチプレクサは、n入力端子又は図示しない制御端子からの入力情報に基づき、n入力端子の中から1つの入力端子を選択し、選択した入力端子からの入力情報を、出力端子から出力する。
【0081】
ルータは、1入力n出力の論理回路である。1入力n出力のルータは、例えば、1個の入力端子及びn個の出力端子を備えてよく、デマルチプレクサ又はデコーダと称されてもよい。デマルチプレクサは、入力端子又は図示しない制御端子からの入力情報に基づき、n出力端子の中から1つの出力端子を選択し、入力端子からの入力情報を、選択した出力端子から出力する。
【0082】
演算器15は、固定又は可変のクロック周波数によるサイクルで動作する論理回路である。演算器15は、例えば、メモリ(
図9中、「MEM」と表記)151を備え、メモリ151に対する書き込み及び読み出しを行なう演算回路の一例である。メモリ151は、記憶素子又は記憶回路の一例である。
【0083】
(データ書込動作例)
セレクタ131aには、コア13#xyに接続されている(隣接する)コア13#x(y-1)、13#x(y+1)、データ転送制御部12#x及び冗長コア14#zのうちのいずれかから、情報、例えばデータの書込命令及び書込対象のデータが入力される。書込命令としては、例えば、PUT write命令やPUSH命令等が挙げられる。
【0084】
例えば、セレクタ131aは、情報が入力される入力端子を選択し、当該情報を出力する。セレクタ131aから出力された情報は、バッファ131bを経由し、ルータ131cに入力される。ルータ131cはデコーダとして機能し、書込命令に基づき、自身のコア13#xyに対する書込命令か否かを判定する。自身のコア13#xyに対する書込命令ではない場合、ルータ131cは、セレクタ133c側の出力端子を選択して情報を出力する。当該情報は、セレクタ133c及びバッファ133dを経由して、コア13#x(y+1)又は冗長コア14#zに出力される。一方、自身のコア13#xyに対する書込命令の場合、ルータ131cは、バッファ131d側の出力端子を選択して情報を出力する。当該情報は、バッファ131dを経由し、書込命令に従って、演算器15のメモリ151に書き込まれる。
【0085】
(データ読出動作例)
バッファ132aには、コア13#xyに接続されている(隣接する)コア13#x(y-1)、13#x(y+1)、データ転送制御部12#x及び冗長コア14#zのうちのいずれかから、情報、例えばデータの読出命令が入力される。読出命令としては、例えば、PUT read命令やPULL命令等が挙げられる。
【0086】
例えば、バッファ132aに保持され出力された情報は、バッファ132bを経由して、ルータ132cに入力される。ルータ132cは、デコーダとして機能し、読出命令に基づき、自身のコア13#xyに対する読出命令か否かを判定する。自身のコア13#xyに対する読出命令ではない場合、ルータ132cは、コア13#x(y+1)又は冗長コア14#z側の出力端子を選択して情報を出力する。一方、自身のコア13#xyに対する読出命令の場合、ルータ132cは、演算器15側の出力端子を選択して情報を出力する。演算器15は、読出命令に従って、メモリ151からデータを読み出し、ルータ133aに出力される。
【0087】
ルータ133aは、デコーダとして機能し、読出命令に基づき、読み出したデータの転送先を判定し、転送先に応じて、セレクタ134c側の出力端子又はバッファ133b側の出力端子を選択して情報を出力する。セレクタ134cに出力された情報は、バッファ134dを経由して、コア13#x(y-1)又はデータ転送制御部12#xに出力される。バッファ133bに出力された情報は、セレクタ133c及びバッファ133dを経由して、コア13#x(y+1)又は冗長コア14#zに出力される。
【0088】
バッファ134aには、コア13#x(y+1)又は冗長コア14#zから、読出命令に従って読み出されたデータが入力され、ルータ134bに出力される。ルータ134bは、デコーダとして機能し、読出命令に基づき、データの転送先が自身のコア13#xyか否かを判定する。転送先が自身のコア13#xyではない場合、ルータ134bは、セレクタ134c側の出力端子を選択して情報を出力する。一方、転送先が自身のコア13#xyの場合、ルータ134bは、セレクタ131a側の出力端子を選択して情報を出力する。セレクタ131aに出力された情報は、データ書込動作の説明で既述のように、セレクタ131aで選択されてバッファ131bに出力される。
【0089】
〔1-5-2〕冗長コアの構成例
図10は、一実施形態に係る冗長コア14のHW構成例を示すブロック図である。
図10に示すように、冗長コア14#zは、演算器15に加えて、例示的に、複数のバッファ141b、141c、142b、142c及び143aを備えてよい。また、冗長コア14#zは、例示的に、複数のセレクタ141a及び142aを備えてよい。さらに、冗長コア14#zは、例示的に、ルータ143bを備えてよい。以下、冗長コア14#zが備える上記の「バッファ」を総称する場合は、単に「バッファ」と表記し、上記の「セレクタ」を総称する場合は、単に「セレクタ」と表記し、上記の「ルータ」を総称する場合は、単に「ルータ」と表記する。
【0090】
冗長コア14#zが備えるバッファ、セレクタ、ルータ及び演算器15の各々は、コア13#xyが備えるバッファ、セレクタ、ルータ及び演算器15の各々と同様の論理回路であってよい。m入力1出力(mは2以上の整数;
図10の例ではm=4)のセレクタは、例えば、マルチプレクサと称されてもよく、1入力m出力のルータは、例えば、デマルチプレクサ又はデコーダと称されてもよい。なお、mの値は、例えば、冗長コア14に接続されている(隣接する)コア13の数に関連してよく、一例として、当該コア13の数と一致してもよい。
【0091】
(データ書込動作例)
セレクタ141aは、冗長コア14#zに接続されている(隣接する)コア13#xY~13#(x+3)Yのうちのいずれかのコア13から、情報、例えばデータの書込命令及び書込対象のデータを受信する。当該書込命令は、情報をメモリ151に書き込むことを指示する第1転送要求の一例である。
【0092】
ここで、
図3に示す比較例においては、冗長コア14が利用される場合、セレクタ141aには、故障コアの位置(コアグループ)に応じた固定のコア13から情報が入力される。すなわち、セレクタ141aにより選択される入力端子(コア13#xY~13#(x+3)Y)が確定している。
【0093】
これに対し、一実施形態に係る冗長コア14では、セレクタ141aの全ての入力端子に、接続先からデータが到来し得る。本来、冗長コア14は、接続されているいずれのコア13が故障しても代替できるように構成されているため、いずれのコア13から情報が到来しても、書込対象のデータをメモリ151に書込可能である。
【0094】
従って、例えば、セレクタ141aは、情報が入力されるコア13に対応する入力端子を選択し、当該情報を出力する。セレクタ141aから出力された情報は、バッファ141b及び141cを経由し、書込命令に従って、演算器15のメモリ151に書き込まれる。
【0095】
(データ読出動作例)
セレクタ142aは、冗長コア14#zに接続されている(隣接する)コア13#xY~13#(x+3)Yのうちのいずれかのコア13から、情報、例えばデータの読出命令を受信する。当該読出命令は、メモリ151から情報を読み出すことを指示する第2転送要求の一例である。
【0096】
セレクタ142aについても、セレクタ141aと同様に、
図3に示す比較例においては固定のコア13から情報が入力されるが、一実施形態に係る冗長コア14では、セレクタ142aの全ての入力端子に、接続先から読出命令が到来し得る。
【0097】
例えば、セレクタ142aは、読出命令が入力されるコア13に対応する入力端子を選択し、当該読出命令を出力する。セレクタ142aから出力された読出命令は、バッファ142b及び142cを経由し、演算器15に転送される。演算器15は、読出命令に従って、メモリ151から読出対象のデータを読み出す。メモリ151から読み出されたデータは、バッファ143aを経由して、ルータ143bに転送される。
【0098】
ここで、
図3に示す比較例においては、冗長コア14が利用される場合、メモリ151から読み出したデータの転送先は、故障箇所(例えば故障コア)を含む“CHAIN”すなわちコアグループであることが確定している。このため、冗長コア14は、例えば故障箇所を示す故障通知信号や専用レジスタ等に基づき、読み出したデータの転送先として固定のコア13を指定することができる。換言すれば、
図3に示す比較例においては、読み出したデータの転送先は、故障通知信号や専用レジスタ等により、固定的に指定される。
【0099】
これに対し、一実施形態に係る冗長コア14は、予備コアとしてカバーできる範囲内のコア13が故障していない場合においても、動作を行なう。そこで、一実施形態に係る冗長コア14は、上述した場合においても動作可能とするために、読み出したデータの転送先を判別する構成を備える。
【0100】
例えば、冗長コア14は、情報の転送経路を命令フォーマットに応じて選択的に出力するデコーダ(ルータ)143bを備える。
【0101】
デコーダ143bは、
図2等に示す比較例に対して追加されるパケットデコーダである。デコーダ143bは、読出命令に基づき、情報の出力ポート(例えば出力端子)を判定し、判定した出力ポートに接続されるコア13に情報を出力する出力回路の一例である。一実施形態では、読出要求は、例えばPUT read命令等の転送要求である。
【0102】
例えば、デコーダ143bは、読出命令を参照して、読み出したデータの転送先としてコア13#xY~13#(x+3)Yのうちのいずれかを判別する。一例として、デコーダ143bは、PUT read命令のうち、
図8に示す“CHAIN”をデコードすることで、転送先となる“CHAIN”すなわちコアグループを判別し、セレクト信号を生成する。これにより、デコーダ143bは、データの転送先を選択でき、判別したコアグループのコア13に対してデータを転送することができる。
【0103】
このように、未使用コアの一例としての冗長コア14は、冗長コア14と接続された(隣接する)複数のコア13のそれぞれのコアグループにおいて共有される各アクセスバスを、冗長コア14においても共有可能である。そして、冗長コア14は、転送要求に応じて、これらのコアグループのうちのいずれか1つのコアグループを選択して、選択したコアグループに属するように動作することができる。
【0104】
〔1-5-3〕データ転送制御部の構成例
図11は、一実施形態に係るデータ転送制御部12AのHW構成例を示すブロック図である。
図11に示すように、データ転送制御部12Aは、例示的に、転送部121、分割部122及び制御部123を備えてよい。なお、
図11では、データ転送制御部12として、命令制御部11に接続されたデータ転送制御部12Aを例に挙げているが、他のデータ転送制御部12B~12Hも、データ転送制御部12Aと同様の構成を備えてよい。
【0105】
転送部121は、命令制御部11又は前段のデータ転送制御部12(接続されたデータ転送制御部12のうちの転送経路が命令制御部11に近い側)からの命令の転送先(宛先)を判定し、判定した転送先に当該命令を転送する。例えば、転送部121は、ルータ121a及び複数のバッファ121bを備えてよい。
【0106】
ルータ121aは、命令制御部11又は前段のデータ転送制御部12からの命令を入力され、当該命令に基づき転送先(宛先)を判定し、判定した転送先に向けて当該命令を転送する。前段のデータ転送制御部12とは、例えば、自身に接続されたデータ転送制御部12のうちの転送経路が命令制御部11に近い側のデータ転送制御部12である。
【0107】
例えば、ルータ121aは、判定した転送先が自身の管轄するグループであれば、PUT、PUSH、PULL等の命令種ごとに命令を分類してバッファ121bに転送する。また、ルータ121aは、判定した転送先が他のデータ転送制御部12の管轄するグループであれば、他のデータ転送制御部12に命令を転送する。
【0108】
複数のバッファ121bは、例えば命令種ごとに備えられてよい。バッファ121bは、キューと称されてもよい。バッファ121bは、自身のデータ転送制御部12の管轄するグループに対する命令を保持し、分割部122に転送する。なお、バッファ121bと分割部122との間のバスは、分岐して命令制御部11に接続されてよく、これにより、命令が転送されると、完了報告の一例である“completion”が命令制御部11に出力される。
【0109】
分割部122は、例えば、バッファ122a~122d及びセレクタ122eを備えてよい。バッファ122a及び122bは、それぞれ、転送部121から入力される、EXEC命令及びPUT命令を保持し、制御部123に転送する。バッファ122c及び122dは、それぞれ、転送部121から入力される、PUSH命令及びPULL命令を保持し、セレクタ122eを経由してSW16に転送する。
【0110】
ここで、バッファ122a~122dは、転送部121から入力される命令を、SW16のIF(Interface)に合わせて分割して出力してよい。例えば、SW16のIFが256B(バイト)幅であり、命令のデータ量が512Bであれば、バッファ122a~122dは、それぞれ、命令を2分割してよい。
【0111】
セレクタ122eは、バッファ122c及び122dのいずれか一方からの出力を選択し、選択した命令を、メモリリクエストとしてSW16に発行する。例えば、セレクタ122eは、バッファ122cからの出力をメモリリードリクエストとしてSW16に発行してよい。また、例えば、セレクタ122eは、バッファ122dからの出力を、後述する制御部123からのデータとタイミングの同期して、メモリライトリクエストとしてSW16に発行してよい。セレクタ122eによるSW16への命令の出力は、SW16からの完了報告をトリガとして行なわれてよい。
【0112】
制御部123は、コア13に発行する命令の調停を行なう。例えば、制御部123は、コア13のライト及び/又はリードのIFに合わせて命令を調停する。
【0113】
制御部123は、例えば、バッファ123a~123d、123i、123k、123l、123n、スケジューラ123g、セレクタ123e、123f、RAM123j及び123mを備えてよい。
【0114】
バッファ123a~123dは、例えば命令種ごとに備えられてよい。バッファ123a~123dは、キューと称されてもよい。バッファ123a~123dは、それぞれ、分割部122から入力される、EXEC命令、PUT命令、PUSH命令及びPULL命令を保持し、セレクタ123e又は123fに出力する。バッファ123a~123dは、例えば、コア13のIFに合わせて命令を分割して出力してよい。例えば、コア13のIFが32B幅であり、分割部122で分割された命令のデータ量が256Bであれば、バッファ123a~123dは、それぞれ、命令を4分割してよい。
【0115】
セレクタ123eは、バッファ123a及び123cから入力されるEXEC命令及びPUSH命令を、書込命令として調停する。セレクタ123fは、バッファ123b及び123dから入力されるPUT命令及びPULL命令を、読出命令として調停する。
【0116】
スケジューラ123gは、コア13への情報の投入タイミングを調整する。スケジューラ123gは、例えば、複数(
図11の例では2つ)のバッファ123hを備えてよく、これらのバッファ123hに、セレクタ123e及び123fでそれぞれ調停された書込命令及び読出命令を保持する。
【0117】
スケジューラ123gは、例えば、命令種と、コア13内の命令伝搬状況とに基づき、コア13への命令の投入タイミングを調整してよい。例えば、コアグループのPUT命令の経路に他の命令のデータが残っていないか否かを判定し、他の命令のデータが残っていない場合にPUT命令を出力することで、PUT命令の投入タイミングを調整する。
【0118】
また、スケジューラ123gは、コア13に投入する命令がPUSH命令であれば、コア13への命令投入と同期して、RAM123jからデータを読み出し、バッファ123kを経由してコア13へ送出する。RAM123jには、メモリ2から読み出され、SW16及びバッファ123iを経由した読出データが格納される。
【0119】
さらに、スケジューラ123gは、コア13に投入する命令がPULL命令であれば、SW16からの応答に同期して、RAM123mからデータを読み出し、バッファ123lを経由してSW16へ送出する。RAM123mには、コア13から読み出され、バッファ123nを経由した読出データが格納される。
【0120】
なお、分割部122又は制御部123は、例えば、コア13に転送するPUT命令のうち、コア間での転送には不要又は省略可能な情報の省略又は削除等を行ない、PUT命令のパケット長の短縮を行なってもよい。
【0121】
〔1-6〕動作例
次に、
図12~
図17を参照して、上述の如く構成された一実施形態に係るサーバ1の動作例を説明する。なお、
図12、
図13、
図15及び
図16、並びに、以下の動作例の説明では、データ転送制御部12#x、コア13#xy及び冗長コア14#zを、それぞれ、データ転送制御部#x、コア#xy及び冗長コア#zと表記する。また、前提として、プロセッサ10において、冗長コア#R1が未使用コアであるものとする。
【0122】
〔1-6-1〕コア#22から冗長コア#R1へのPUT命令制御
図12及び
図13は、
図5に示す情報転送経路における各構成の動作例を説明するフローチャートである。
図14は、
図5に示す情報転送経路におけるコア13及び冗長コア14の動作例を示す図である。
【0123】
図12に示すように、プロセッサ10又は図示しないホスト装置により実行されるソフトウェアが、冗長コア#R1へのアクセスがない、例えば冗長コア#R1に対する先行する命令がないことを確認し(ステップS1)、アクセスがある場合には完了を待つ。
【0124】
ソフトウェアは、コア#22から冗長コア#R1へのPUT命令を発行する(ステップS2)。当該PUT命令は、例えば、“CHAIN[7:0]”=“00000100”(データ転送制御部#2)、“OPCODE[4:0]”=“11100”(PUT read命令)、“SPU_ENBL[4:0]”=“00100”(コア#22)、“TPU_ENBL[4:0]”=“10000”(冗長コア#R1)である。
【0125】
命令制御部11#0は、ソフトウェアから入力されたPUT命令をデータ転送制御部#0へ転送する(ステップS3)。
【0126】
データ転送制御部#0の転送部121は、PUT命令の“CHAIN[0]”の値(
図8参照)がOFF(例えば“0”)であり自身を示していないため、PUT命令をデータ転送制御部#1に転送する(ステップS4)。
【0127】
データ転送制御部#1の転送部121は、PUT命令の“CHAIN[1]”の値がOFFであり自身を示していないため、PUT命令をデータ転送制御部#2に転送する(ステップS5)。
【0128】
データ転送制御部#2の転送部121は、PUT命令の“CHAIN[1]”の値がON(例えば“1”)であり自身を示すため、分割部122を経由してPUT命令を制御部123に転送する。制御部123は、PUT命令をスケジューリングする(ステップS6)。
【0129】
制御部123は、スケジューリング結果に基づき、コア#20にPUT命令を発行する(ステップS7)。
【0130】
コア#20(例えばルータ132c)は、PUT命令の“OPCD”(
図8参照)がPUT read命令を示し、且つ、“SPU_ENBL[16]”がOFF(例えば“0”)であり自身を示していないため、PUT命令をコア#21に転送する(ステップS8)。
【0131】
コア#21は、PUT命令の“OPCD”がPUT read命令を示し、且つ、“SPU_ENBL[17]”がOFFであり自身を示していないため、PUT命令をコア#22に転送する(ステップS9)。
【0132】
図13に示すように、コア#22は、PUT命令の“OPCD”がPUT read命令を示し、且つ、“SPU_ENBL[18]”がON(例えば“1”)であり自身を示すため、PUT read命令を実行する(ステップS10)。
【0133】
例えば、ルータ132cは、PUT命令を演算器15に出力する。演算器15は、PUT命令の“SPU_LINE_ADRS”で示されたアドレスのデータを記憶素子、例えばメモリ151から読み出す(ステップS11;
図14参照)。また、コア#22は、PUT read命令の“OPCD”をPUT write用に変更する(ステップS12)。
【0134】
そして、コア#22は、メモリ151から読み出したデータと、PUT write命令とを、ルータ133a、バッファ133b、セレクタ133c及びバッファ133dを経由して、コア#23へ転送する(ステップS13;
図14参照)。
【0135】
コア#23は、PUT命令の“OPCD”がPUT write命令を示し、且つ、“TPU_ENBL[11]”がOFF(例えば“0”)であり自身を示していないため、データとPUT write命令とを冗長コア#R1に転送する(ステップS14)。例えば、データ及びPUT write命令は、コア#23のルータ131c、セレクタ133c及びバッファ133dを経由して、冗長コア#R1に出力される(
図14参照)。
【0136】
冗長コア#R1は、PUT命令の“OPCD”がPUT write命令を示し、且つ、“TPU_ENBL[12]”がON(例えば“1”)であり自身を示すため、PUT write命令を実行する(ステップS15)。
【0137】
例えば、データ及びPUT write命令は、冗長コア#R1のセレクタ141aに入力され、バッファ141b及び141cを経由して演算器15に出力される。演算器15は、PUT命令の“TPU_LINE_ADRS”で示された記憶素子、例えばメモリ151のアドレスに、“LEN”で示された長さのデータを書き込み(ステップS16;
図14参照)、処理が終了する。
【0138】
〔1-6-2〕冗長コア#R1からコア#61へのPUT命令制御
図15及び
図16は、
図6に示す情報転送経路における各構成の動作例を説明するフローチャートである。
図17は、
図6に示す情報転送経路におけるコア13及び冗長コア14の動作例を示す図である。なお、
図12及び
図13と同様の動作の説明は省略する。
【0139】
図15に示すように、ソフトウェアが、冗長コア#R1へのアクセスがないことを確認し(ステップS21)、アクセスがある場合には完了を待つ。
【0140】
ソフトウェアは、冗長コア#R1からコア#61へのPUT命令を発行する(ステップS22)。当該PUT命令は、例えば、“CHAIN[7:0]”=“01000000”(データ転送制御部#6)、“OPCODE[4:0]”=“11100”(PUT write命令)、“SPU_ENBL[4:0]”=“10000”(冗長コア#R1)、“TPU_ENBL[4:0]”=“00100”(コア#61)である。
【0141】
命令制御部11#1は、ソフトウェアから入力されたPUT命令をデータ転送制御部#4へ転送する(ステップS23)。
【0142】
データ転送制御部#4は、PUT命令の“CHAIN[4]”の値がOFFであり自身を示していないため、PUT命令をデータ転送制御部#5に転送する(ステップS24)。
【0143】
データ転送制御部#5は、PUT命令の“CHAIN[5]”の値がOFFであり自身を示していないため、PUT命令をデータ転送制御部#6に転送する(ステップS25)。
【0144】
データ転送制御部#6は、PUT命令の“CHAIN[6]”の値がONであり自身を示すため、PUT命令をスケジューリングし(ステップS26)、スケジューリング結果に基づき、冗長コア#R1にPUT命令を発行する(ステップS27)。
【0145】
コア#60は、PUT命令の“OPCD”がPUT read命令を示し、且つ、“SPU_ENBL[16]”がOFFであり自身を示していないため、PUT命令をコア#61に転送する(ステップS28)。同様に、“SPU_ENBL[17]”~“SPU_ENBL[19]”がいずれもOFFであるため、PUT命令がコア#62、#63、冗長コア#R1の順で後段に転送される(ステップS29~S31)。
【0146】
図16に示すように、冗長コア#R1は、PUT命令の“OPCD”がPUT read命令を示し、且つ、“SPU_ENBL[20]”がONであり自身を示すため、PUT read命令を実行する(ステップS32)。
【0147】
例えば、PUT read命令は、冗長コア#R1のセレクタ142aに入力され、バッファ142b及び142cを経由して演算器15に出力される。演算器15は、PUT命令の“SPU_LINE_ADRS”で示されたアドレスのデータをメモリ151から読み出す(ステップS33;
図17参照)。
【0148】
また、冗長コア#R1は、PUT read命令の“OPCD”をPUT write用に変更する(ステップS34)。
【0149】
換言すれば、冗長コア#R1の演算器15は、第2転送要求に応じて情報を読み出した場合、読み出した情報を転送先のコア#61が備えるメモリ151に書き込むことを指示するように第2転送要求を更新する。そして、演算器15は、更新した第2転送要求と、読み出した情報とを、ルータ143bの出力端子から出力する。これにより、第2転送要求として既存のPUT命令のフォーマットを利用して、冗長コア#R1を経由するコアグループ間の情報転送を可能にすることができる。
【0150】
そして、冗長コア#R1は、メモリ151から読み出したデータと、PUT write命令とを、バッファ143a及びルータ143bを経由して、コア#63へ転送する(ステップS35;
図17参照)。このとき、ルータ143bは、PUT write命令の“CHAIN”をデコードすることで、転送先としてデータ転送制御部#6のチェインの出力端子を選択する。
【0151】
コア#63は、PUT命令の“OPCD”がPUT write命令を示し、且つ、“TPU_ENBL[11]”がOFFであり自身を示していないため、データとPUT write命令とをコア#62に転送する(ステップS36;
図17参照)。
【0152】
コア#62は、PUT命令の“OPCD”がPUT write命令を示し、且つ、“TPU_ENBL[10]”がOFFであり自身を示していないため、データとPUT write命令とをコア#61に転送する(ステップS37;
図17参照)。
【0153】
コア#61は、PUT命令の“OPCD”がPUT write命令を示し、且つ、“TPU_ENBL[09]”がONであり自身を示すため、PUT write命令を実行する(ステップS38)。
【0154】
例えば、データ及びPUT write命令は、コア#61のバッファ134aに入力され、ルータ134b、セレクタ131a、バッファ131b、ルータ131c及びバッファ131dを経由して演算器15に出力される。演算器15は、PUT命令の“TPU_LINE_ADRS”で示されたメモリ151のアドレスに、“LEN”で示された長さのデータを書き込み(ステップS39;
図17参照)、処理が終了する。
【0155】
〔1-7〕一実施形態の効果
以上のように、一実施形態に係るプロセッサ10によれば、冗長コア14を経由する転送経路(
図5及び
図6参照)により、複数のコアグループの間で情報を転送することができる。
【0156】
これにより、メモリ2を経由せずにデータを転送できるコア13の組み合わせを増加させることができるため、データの転送効率を上昇させ、プロセッサ10の性能を向上させることが可能となる。
【0157】
また、冗長コア14は、第2転送要求に基づき、メモリ151から読み出した情報の出力先を判定し出力するルータ143bを備えることで、冗長コア14を経由する転送経路を容易に実現できる。また、ルータ143bが第2転送要求の“CHAIN”に基づき判定することで、既存のPUT命令を利用することができ、専用の命令の追加及び当該命令を処理するための回路の変更等を不要とすることができる。
【0158】
さらに、冗長コア14の演算器15が、第1及び第2転送要求に基づき、メモリ151への書き込み及び読み出しを行なうことで、冗長コア14を経由する転送経路を容易に実現できる。また、演算器15が、第2転送要求に従い情報を読み出すと、当該第2転送要求を更新し出力することで、既存のPUT命令を利用することができ、専用の命令の追加及び当該命令を処理するための回路の変更等を不要とすることができる。
【0159】
また、未使用コアとして冗長コア14を利用することで、不良のコア13が存在しない場合には利用されないHW資源を有効活用できるとともに、不良のコア13が存在しない(良品である)プロセッサ10の性能向上を図ることができる。また、良品であるプロセッサ10の商品価値を高めることができる。
【0160】
〔2〕その他
上述した一実施形態に係る技術は、以下のように変形、変更して実施することができる。
【0161】
一実施形態では、未使用コアとして、冗長コア14を例に挙げたが、これに限定されるものではない。未使用コアとしては、例えば、様々な理由によって、利用されないように設定された、又は、利用するように設定されていない、種々のコアが挙げられる。
【0162】
また、メモリ2、並びに、プロセッサ10が備える命令制御部11、データ転送制御部12、コア13、冗長コア14、SW16及びMC17の数は、
図1等に示す数に限定されるものではない。なお、サーバ1は、マルチプロセッサとして、2以上のプロセッサ10を備えてもよい。
【0163】
さらに、サーバ1は、例えば、プロセッサ10及びメモリ2に加えて、HDDやSSD等の記憶装置、通信インタフェース(IF;Interface)、入出力装置、及び、読取装置の少なくともいずれか1つを備えてもよい。HDDはHard Disk Driveの略称であり、SSDはSolid State Driveの略称である。入出力装置は、マウスやキーボード、及び、モニタ等を含んでよい。読取装置は、データやプログラム等が記録された記録媒体を読み取る装置である。
【0164】
例えば、プロセッサ10は、記憶装置に格納されたプログラムをメモリ2に展開して実行することにより、サーバ1としての機能を実現してよい。当該プログラムは、一実施形態に係る、PUT命令等の命令を発行するソフトウェアを含んでよい。
【0165】
〔3〕付記
以上の一実施形態に関し、さらに以下の付記を開示する。
【0166】
(付記1)
アクセスバスを共有する複数の第1コアが属する予め設定されたコアグループを、アクセスバスごとに備えるとともに、
複数の前記コアグループの各々における1以上の第1コアとそれぞれ接続される第2コアであって、前記複数のコアグループにおいて共有される各アクセスバスを共有可能である前記第2コアと、
前記複数のコアグループの間で情報を転送するための第1転送要求に応じて、前記情報の転送元の第1コアが属する第1コアグループにおいて共有されるアクセスバスを経由して、前記転送元の第1コアから前記第2コアに前記情報を転送する制御を行なう第1制御部と、
前記複数のコアグループの間で情報を転送するための第2転送要求に応じて、前記情報の転送先の第1コアが属する第2コアグループにおいて共有されるアクセスバスを経由して、前記第2コアから前記転送先の第1コアに前記情報を転送する制御を行なう第2制御部と、を備える、
演算処理装置。
【0167】
(付記2)
前記第2コアは、
前記第2転送要求に基づき、前記情報の出力ポートを判定し、判定した出力ポートに接続される、前記第2コアに接続される複数の第1コアのうちのいずれかの第1コアに、前記情報を出力する出力回路を備える、
付記1に記載の演算処理装置。
【0168】
(付記3)
前記第2転送要求は、前記転送先の第1コアが属する前記第2コアグループの識別情報を含み、
前記出力回路は、前記識別情報に基づき、前記情報の出力ポートを判定する、
付記2に記載の演算処理装置。
【0169】
(付記4)
前記第2コアは、
記憶回路を備え、前記記憶回路に対する書き込み及び読み出しを行なう演算回路を備え、
前記第2コアは、
前記情報を前記記憶回路に書き込むことを指示する前記第1転送要求を受信し、
前記記憶回路から前記情報を読み出すことを指示する前記第2転送要求を受信する、
付記2又は付記3に記載の演算処理装置。
【0170】
(付記5)
前記演算回路は、前記第2転送要求に応じて前記記憶回路から前記情報を読み出した場合、読み出した前記情報を前記転送先の第1コアが備える記憶回路に書き込むことを指示するように前記第2転送要求を更新し、更新した前記第2転送要求と、読み出した前記情報とを、前記出力ポートから出力する、
付記4に記載の演算処理装置。
【0171】
(付記6)
前記第2コアは、前記複数のコアグループの各々に属する複数の第1コアのうちのいずれかの第1コアが不良のコアである場合に、当該不良のコアに代えて、当該不良のコアが属するコアグループに属するように設定される予備コアである、
付記1~付記5のいずれか1項に記載の演算処理装置。
【0172】
(付記7)
前記不良のコアの検出は、前記演算処理装置のチップ診断において行なわれ、
前記チップ診断の結果に応じて設定される、前記不良のコアの有無を示す情報に基づき、前記第1制御部による前記制御及び前記第2制御部による前記制御が行なわれる、
付記6に記載の演算処理装置。
【0173】
(付記8)
アクセスバスを共有する複数の第1コアが属する予め設定されたコアグループを、アクセスバスごとに備える演算処理装置を備え、
前記演算処理装置は、
複数の前記コアグループの各々における1以上の第1コアとそれぞれ接続される第2コアであって、前記複数のコアグループにおいて共有される各アクセスバスを共有可能である前記第2コアと、
前記複数のコアグループの間で情報を転送するための第1転送要求に応じて、前記情報の転送元の第1コアが属する第1コアグループにおいて共有されるアクセスバスを経由して、前記転送元の第1コアから前記第2コアに前記情報を転送する制御を行なう第1制御部と、
前記複数のコアグループの間で情報を転送するための第2転送要求に応じて、前記情報の転送先の第1コアが属する第2コアグループにおいて共有されるアクセスバスを経由して、前記第2コアから前記転送先の第1コアに前記情報を転送する制御を行なう第2制御部と、を備える、
情報処理装置。
【0174】
(付記9)
前記第2コアは、
前記第2転送要求に基づき、前記情報の出力ポートを判定し、判定した出力ポートに接続される、前記第2コアに接続される複数の第1コアのうちのいずれかの第1コアに、前記情報を出力する出力回路を備える、
付記8に記載の情報処理装置。
【0175】
(付記10)
前記第2転送要求は、前記転送先の第1コアが属する前記第2コアグループの識別情報を含み、
前記出力回路は、前記識別情報に基づき、前記情報の出力ポートを判定する、
付記9に記載の情報処理装置。
【0176】
(付記11)
前記第2コアは、
記憶回路を備え、前記記憶回路に対する書き込み及び読み出しを行なう演算回路を備え、
前記第2コアは、
前記情報を前記記憶回路に書き込むことを指示する前記第1転送要求を受信し、
前記記憶回路から前記情報を読み出すことを指示する前記第2転送要求を受信する、
付記9又は付記10に記載の情報処理装置。
【0177】
(付記12)
前記演算回路は、前記第2転送要求に応じて前記記憶回路から前記情報を読み出した場合、読み出した前記情報を前記転送先の第1コアが備える記憶回路に書き込むことを指示するように前記第2転送要求を更新し、更新した前記第2転送要求と、読み出した前記情報とを、前記出力ポートから出力する、
付記11に記載の情報処理装置。
【0178】
(付記13)
前記第2コアは、前記複数のコアグループの各々に属する複数の第1コアのうちのいずれかの第1コアが不良のコアである場合に、当該不良のコアに代えて、当該不良のコアが属するコアグループに属するように設定される予備コアである、
付記8~付記12のいずれか1項に記載の情報処理装置。
【0179】
(付記14)
前記不良のコアの検出は、前記演算処理装置のチップ診断において行なわれ、
前記チップ診断の結果に応じて設定される、前記不良のコアの有無を示す情報に基づき、前記第1制御部による前記制御及び前記第2制御部による前記制御が行なわれる、
付記13に記載の情報処理装置。
【符号の説明】
【0180】
1 サーバ
10 プロセッサ
11、11A、11B 命令制御部
12、12A~12H データ転送制御部
121 転送部
122 分割部
123 制御部
13、13A0~13A3、13B0~13B3 コア
13C0~13C3、13D0~13D3、13E0~13E3 コア
13F0~13F3、13G0~13G3、13H0~13H3 コア
14、14A、14B 冗長コア
15 演算器
16、16A、16B スイッチ
17、17A~17D メモリコントローラ
2、2A~2D メモリ