(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2023135511
(43)【公開日】2023-09-28
(54)【発明の名称】演算処理装置及び演算処理方法
(51)【国際特許分類】
G06F 9/38 20180101AFI20230921BHJP
G06F 9/302 20180101ALI20230921BHJP
G06F 9/34 20180101ALI20230921BHJP
G06F 7/483 20060101ALI20230921BHJP
【FI】
G06F9/38 370C
G06F9/302 A
G06F9/34 330
G06F7/483
【審査請求】未請求
【請求項の数】4
【出願形態】OL
(21)【出願番号】P 2022040759
(22)【出願日】2022-03-15
(71)【出願人】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】100092978
【弁理士】
【氏名又は名称】真田 有
(74)【代理人】
【識別番号】100189201
【弁理士】
【氏名又は名称】横田 功
(72)【発明者】
【氏名】藤田 尚成
(72)【発明者】
【氏名】坂下 聡太
【テーマコード(参考)】
5B013
5B033
【Fターム(参考)】
5B013DD01
5B013DD03
5B033DD09
(57)【要約】
【課題】浮動小数点演算を効率的に実行する。
【解決手段】演算処理装置1は、演算命令を格納する命令格納部161と、算命令の演算結果をキャッシュするデータキャッシュ部18と、命令格納部161の側に配置されると共に、命令格納部161から転送された演算命令を実行するためのレジスタ値を格納する複数の浮動小数点レジスタ172と、データキャッシュ部18の側に配置されると共に、演算命令に基づいた浮動小数点演算を行う複数の浮動小数点演算器171と、を備え、命令格納部161から、複数の浮動小数点レジスタ172のうち命令格納部161までの距離が最も近い位置に配置された一以上の浮動小数点レジスタ172へ、レジスタ値を転送する際のサイクルが1サイクルである。
【選択図】
図8
【特許請求の範囲】
【請求項1】
演算命令を格納する命令格納部と、
前記演算命令の演算結果をキャッシュするデータキャッシュ部と、
前記命令格納部の側に配置されると共に、前記命令格納部から転送された前記演算命令を実行するためのレジスタ値を格納する複数の浮動小数点レジスタと、
前記データキャッシュ部の側に配置されると共に、前記演算命令に基づいた浮動小数点演算を行う複数の浮動小数点演算器と、
を備え、
前記命令格納部から、前記複数の浮動小数点レジスタのうち前記命令格納部までの距離が最も近い位置に配置された一以上の浮動小数点レジスタへ、前記レジスタ値を転送する際のサイクルが1サイクルである、
演算処理装置。
【請求項2】
前記演算命令の実行のために、前記複数の浮動小数点レジスタのうち前記一以上の浮動小数点レジスタを使用すると共に、前記複数の浮動小数点演算器のうち前記データキャッシュ部までの距離が最も近い位置に配置された一以上の浮動小数点演算器を使用する、
請求項1に記載の演算処理装置。
【請求項3】
ロード命令又はストア命令が実行された後に、前記演算命令が実行される、
請求項1又は2に記載の演算処理装置。
【請求項4】
命令格納部において、演算命令を格納し、
データキャッシュ部において、前記演算命令の演算結果をキャッシュし、
前記命令格納部の側に配置される複数の浮動小数点レジスタにおいて、前記命令格納部から転送された前記演算命令を実行するためのレジスタ値を格納し、
前記データキャッシュ部の側に配置される複数の浮動小数点演算器において、前記演算命令に基づいた浮動小数点演算を行う、
処理をコンピュータが実行し、
前記命令格納部から、前記複数の浮動小数点レジスタのうち前記命令格納部までの距離が最も近い位置に配置された一以上の浮動小数点レジスタへ、前記レジスタ値を転送する際のサイクルを1サイクルとする、
演算処理方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、演算処理装置及び演算処理方法に関する。
【背景技術】
【0002】
図1は、関連例におけるプロセッサのコア部のハードウェア構成例を模式的に示すブロック図である。
【0003】
命令キャッシュ61には命令が格納されており、読み出された命令は命令バッファ62に格納され、順次デコード部63に送られる。デコード部63では命令解釈が行われ、リザベーションステーション66(RS)に命令が投入される。
【0004】
RS66は各演算器への命令投入をアウトオブオーダーで行う。RS66には、演算命令を格納するRSE661(Reservation Station for Execute)とロードやストアなどの命令を格納するRSA662(Reservation Station for Address Generate)とがある。
【0005】
RSE661及びRSA662は、共に、レジスタ管理部64及びバイパス管理部65によって管理される。
【0006】
RSE661は、浮動小数点レジスタ672(FPR)にレジスタ番号を送り、レジスタ番号に基づいて参照されたデータを浮動小数点演算器671に送る。浮動小数点演算器671は、命令コードをもとに、浮動小数点レジスタ(不図示)から送られてきたデータを使用して演算を行う。演算結果は、浮動小数点レジスタに送られ、指定された番号のレジスタが更新される。RSA662は、固定少数点レジスタ673(GPR)にレジスタ番号を送り、レジスタ番号に基づいて参照されたデータをアドレス演算器674に送る。アドレス演算器674はその結果をDATAキャッシュ68に送り、DATAキャッシュ68はデータをGPR673ないしFPR672に返し、指定された番号のレジスタが更新される。
【0007】
浮動小数点演算器671,FPR672,GPR673及びアドレス演算器674は、演算実行部67として機能する。
【0008】
図2は、関連例におけるRSE661、FPR672、浮動小数点演算器671(FPU)及びDATAキャッシュ68におけるデータの流れを説明するブロック図である。
図3は、関連例においてF01レーンのみを使用する場合における演算命令及びロード命令のタイムチャートである。
図4は、関連例においてF23レーンも使用する場合における演算命令及びロード命令のタイムチャートである。
【0009】
図2には、RSE661からFPR672及びFPU671までの演算命令の流れと、DATAキャッシュ68からFPU671までのロードデータの流れとが示されている。
図2及び
図5において、符号71はセレクタを示し、符号72はフリップフロップを示す。
【0010】
FPR672や浮動小数点演算器671は、8byteのデータ幅を1要素とした最大4要素(F0-F3)のSIMD演算に対応しており、F01のみ使用する命令とF23も使用する命令とを処理する。
【0011】
図2~
図4において、P、PT、PT2、B1、B2、X1、X2、X3、X4、U、UT、C、Wは演算命令(
図3の符号A1及び
図4の符号B1参照)のパイプライン処理のサイクル名を示している。
【0012】
まず、Pサイクルでは、RS66から各要素のFPR672に向けてレジスタ番号が送出され、PT、PT2の2サイクルをかけて各要素のFPR672(F0FPR, F1FPR, F2FPR, F3FPR)にレジスタ番号が転送される。
【0013】
次のB1サイクルでは転送されてきたレジスタ番号に対応するFPR672の値が読出され、B2サイクルではOP1Rで示されるフリップフロップ72(オペランドを保持するレジスタ)に値が送られる。
【0014】
X1, X2, X3, X4サイクルでは各要素のFPU671(F0FPU, F1FPU, F2FPU, F3FPU)が同時に演算を実行し、最後のサイクルであるX4サイクルではRRで示されるフリップフロップ72(Result Register:演算結果を保持するレジスタ)に結果がセットされる。
【0015】
そして、Uサイクルで演算結果が各要素のFPR672(F0FPR, F1FPR, F2FPR, F3FPR)に転送され、UTサイクルで各要素のFPR672(F0FPR, F1FPR, F2FPR, F3FPR)に演算結果が書き込まれる。
【0016】
図3及び
図4に示すC, Wサイクルでは、アウトオブオーダーで実行された命令がプログラム本来の実行順序で完了され、FPR672等の各種レジスタやメモリ等の資源更新および資源解放が行われる。
【0017】
P
d ,T
d, M
d, B
d,R
d, R
dTサイクルは、ロード命令(
図3の符号A2及び
図4の符号B2参照)のパイプライン処理のサイクル名を示している。
【0018】
Pdサイクルでは、アドレス演算器674から送られてきたアドレスがDATAキャッシュ68に送られ、Td, Md, Bdサイクルでは送られてきたアドレスのデータが読出されてLRで示されるフリップフロップ72にセットされる。Rd, RdTサイクルでは、LRで示されるフリップフロップ72のデータが各要素のFPU671(F0FPU, F1FPU, F2FPU, F3FPU)のOP1Rで示されるフリップフロップ72に転送されている。
【0019】
図5は、関連例におけるRSE661、FPR672、FPU671及びDATAキャッシュ68の配置の第1の例を説明するブロック図である。
【0020】
図5に示すように、F0FPRは、RS66(別言すれば、RSE661)から距離が近いため、PTサイクルのみでレジスタ番号を転送可能だが、距離が遠いF1,2,3のFPR672に合わせてPT、PT2の2サイクルでレジスタ番号を転送している。また、F1FPUは、DATAキャッシュ68から距離が近いため、Rdサイクルのみでロードデータを転送可能だが、距離が遠いF0,2,3のFPU671に合わせてRd、RdTの2サイクルでロードデータを転送している。
【0021】
転送タイミングを距離が遠い方に合わせている理由は、バイパス動作を含めたパイプライン処理を簡単にするためである。
図5に示す配置では、RSE661から見た近い要素とDATAキャッシュ68から見た近い要素とが異なっているため、距離が遠い方に合わせている。
【0022】
図6は、関連例におけるRSE661、FPR672、FPU671及びDATAキャッシュ68の配置の第2の例を説明するブロック図である。
【0023】
図6は、
図5に示した配置例と比較して、RS66からのレジスタ番号転送のサイクルをRS66から近いところだけ1サイクル削り(符号C1参照)、DATAキャッシュ68からのロードデータ転送サイクルをDATAキャッシュ68から近いところだけ1サイクル削った(符号C2参照)場合の配置例である。
【0024】
レジスタ番号の転送サイクルは、F0FPRのみPT2サイクルが削除され、PTサイクルのみになっている。ロードデータの転送サイクルは、F1FPUのみRdTサイクルが削除され、Rdサイクルになっている。
【先行技術文献】
【特許文献】
【0025】
【特許文献1】特開2016-218855号公報
【特許文献2】特開平9-212359号公報
【発明の概要】
【発明が解決しようとする課題】
【0026】
図7は、
図6に示したRSE、FPR、FPU及びDATAキャッシュの配置の第2の例に対応するロード命令から演算命令への処理を示すタイムチャートである。
【0027】
図6に示したように、単純にRSE661から見た近い要素とDATAキャッシュ68から見た近い要素のサイクル数を短くしてしまうと、
図7のタイムチャートに示す通り、ロードから演算へのバイパス時のPサイクルのタイミングが要素毎に異なってしまう(符号D1~D3参照)。そして、要素毎の違いを意識した制御にしなければならなくなり、その上、特に性能改善は見込めない。そのため、基本的にSingle Instruction, Multiple Data(SIMD)の場合は、最も遠い要素にパイプライン段数を合わせている。しかし、
図6に示す配置例のままでは、RSE661から見た近い要素とDATAキャッシュ68から見た近い要素とが異なることで、性能改善が見込めないおそれがある。
【0028】
SIMDには、F01しか使用しない命令とF23も使用する命令とがある。F01しか使用しない命令を改善することを考えると、F01FPRへの転送サイクルをPTサイクルのみに、ロードデータのDATAキャッシュ68からF01FPUへの転送をR
dサイクルのみに揃える必要がある。しかしながら、
図6に示した配置例では、DATAキャッシュ68からはF0FPUは遠く、RSE661からはF1FPUのOP1Rまでが遠いため、サイクルを揃えることができない。
【0029】
1つの側面では、浮動小数点演算を効率的に実行することを目的とする。
【課題を解決するための手段】
【0030】
1つの側面では、演算処理装置は、演算命令を格納する命令格納部と、前記演算命令の演算結果をキャッシュするデータキャッシュ部と、前記命令格納部の側に配置されると共に、前記命令格納部から転送された前記演算命令を実行するためのレジスタ値を格納する複数の浮動小数点レジスタと、前記データキャッシュ部の側に配置されると共に、前記演算命令に基づいた浮動小数点演算を行う複数の浮動小数点演算器と、を備え、前記命令格納部から、前記複数の浮動小数点レジスタのうち前記命令格納部までの距離が最も近い位置に配置された一以上の浮動小数点レジスタへ、前記レジスタ値を転送する際のサイクルが1サイクルである。
【発明の効果】
【0031】
1つの側面では、浮動小数点演算を効率的に実行することができる。
【図面の簡単な説明】
【0032】
【
図1】関連例におけるプロセッサのコア部のハードウェア構成例を模式的に示すブロック図である。
【
図2】関連例におけるRSE、FPR、FPU及びDATAキャッシュにおけるデータの流れを説明するブロック図である。
【
図3】関連例においてF01レーンのみを使用する場合における演算命令及びロード命令のタイムチャートである。
【
図4】関連例においてF23レーンも使用する場合における演算命令及びロード命令のタイムチャートである。
【
図5】関連例におけるRSE、FPR、FPU及びDATAキャッシュの配置の第1の例を説明するブロック図である。
【
図6】関連例におけるRSE、FPR、FPU及びDATAキャッシュの配置の第2の例を説明するブロック図である。
【
図7】
図6に示したRSE、FPR、FPU及びDATAキャッシュの配置の第2の例に対応するロード命令から演算命令への処理を示すタイムチャートである。
【
図8】実施形態におけるRSE、FPR、FPU及びDATAキャッシュの配置例を説明するブロック図である。
【
図9】関連例及び実施形態においてF01レーンのみを使用する場合における演算命令及びロード命令のタイムチャートである。
【
図10】関連例及び実施形態においてF23レーンも使用する場合における演算命令及びロード命令のタイムチャートである。
【
図11】関連例及び実施形態においてF01レーンのみを使用する場合における演算命令から演算命令への処理を示すバイパスタイムチャートである。
【
図12】関連例及び実施形態においてF23レーンも使用する場合における演算命令から演算命令への処理を示すバイパスタイムチャートである。
【
図13】関連例及び実施形態においてF01レーンのみを使用する場合におけるロード命令から演算命令への処理を示すバイパスタイムチャートである。
【
図14】関連例及び実施形態においてF23レーンも使用する場合におけるロード命令から演算命令への処理を示すバイパスタイムチャートである。
【
図15】実施形態におけるCPUの構成例を模式的に示すブロック図である。
【
図16】実施形態における2要素(F0,F1)のみを利用する演算命令から演算命令へのバイパスブロック図である。
【
図17】関連例及び実施形態における2要素(F0,F1)のみを利用する演算命令から演算命令へのバイパスタイムチャートである。
【
図18】実施形態における2要素(F0,F1)のみを利用する演算命令から演算命令へのバイパス配置例を示すブロック図である。
【
図19】実施形態における4要素(F0,F1,F2,F3)全てを利用する演算命令から演算命令へのバイパスブロック図である。
【
図20】関連例及び実施形態における4要素(F0,F1,F2,F3)全てを利用する演算命令から演算命令へのバイパスタイムチャートである。
【
図21】実施形態における4要素(F0,F1,F2,F3)全てを利用する演算命令から演算命令へのバイパス配置例を示すブロック図である。
【
図22】2要素(F0,F1)のみを利用するロード命令から演算命令へのバイパスブロック図である。
【
図23】関連例及び実施形態における2要素(F0,F1)のみを利用するロード命令から演算命令へのバイパスタイムチャートである。
【
図24】実施形態における2要素(F0,F1)のみを利用するロード命令から演算命令へのバイパス配置例を示すブロック図である。
【
図25】実施形態における4要素(F0,F1,F2,F3)全てを利用するロード命令から演算命令へのバイパスブロック図である。
【
図26】関連例及び実施形態における4要素(F0,F1,F2,F3)全てを利用するロード命令から演算命令へのバイパスタイムチャートである。
【
図27】実施形態における4要素(F0,F1,F2,F3)全てを利用するロード命令から演算命令へのバイパス配置例を示すブロック図である。
【
図28】関連例及び実施形態における8要素(F0-F7)全てを利用する演算命令から演算命令へのバイパスタイムチャートである。
【
図29】実施形態における8要素(F0-F7)全てを利用する演算命令から演算命令へのバイパス配置例を示すブロック図である。
【
図30】関連例及び実施形態における8要素(F0-F7)全てを利用し時差を3段階にした場合における演算命令から演算命令へのバイパスタイムチャートである。
【
図31】8要素(F0-F7)全てを利用し時差を3段階にした場合の演算命令から演算命令へのバイパス配置例を示すブロック図である。
【発明を実施するための形態】
【0033】
〔A〕実施形態
以下、図面を参照して一実施の形態を説明する。ただし、以下に示す実施形態はあくまでも例示に過ぎず、実施形態で明示しない種々の変形例や技術の適用を排除する意図はない。すなわち、本実施形態を、その趣旨を逸脱しない範囲で種々変形して実施することができる。また、各図は、図中に示す構成要素のみを備えるという趣旨ではなく、他の機能等を含むことができる。
【0034】
図8は、実施形態におけるRSE161、FPR172、FPU171及びDATAキャッシュ18の配置例を説明するブロック図である。
【0035】
図8に示すように、
図5及び
図6に示した関連例と比較して、FPR172はRSE161側に、FPU171はDATAキャッシュ18側に寄せた配置に変更する。RSE161からF01のFPR172にレジスタ番号を転送するPT2サイクルを削除する(符号E1及びE2参照)と共に、F01のFPU171にロードデータをDATAキャッシュ18から転送するサイクルRdTを削除する(符号E3及びE4)。
【0036】
なお、
図8及び以降に示す図面において、符号21はセレクタを示し、符号22はフリップフロップを示す。
【0037】
すなわち、RSE161は、演算命令を格納する。DATAキャッシュ18は、演算命令の演算結果をキャッシュする。複数のFPR172は、RSE161の側に配置されると共に、RSE161から転送された演算命令を実行するためのレジスタ値を格納する。複数のFPU171は、DATAキャッシュ18の側に配置されると共に、演算命令に基づいた浮動小数点演算を行う。RSE161から、複数のFPR172のうちRSE161までの距離が最も近い位置に配置された一以上のFPR172へ、レジスタ値を転送する際のサイクルは、1サイクルとされる。
【0038】
図9は、関連例及び実施形態においてF01レーンのみを使用する場合における演算命令及びロード命令のタイムチャートである。
【0039】
図9のタイムチャートに示す通り、実施形態では、F01のみ使用する命令のレイテンシを関連例と比較して演算命令及びロード命令共に1サイクル改善することができる(符号F1及びF2参照)。
【0040】
これにより、FPR172の解放が早くなり、FPR172の不足でパイプラインが止まる確率を軽減する効果も得られる。FPR172の数を増やすことでもパイプラインが止まる確率を軽減できるが、量増加や消費電力増加のリスクがある。
【0041】
図10は、関連例及び実施形態においてF23レーンも使用する場合における演算命令及びロード命令のタイムチャートである。
【0042】
図10に示すように、F23も使用する命令では、関連例と比較して、演算命令及びロード命令共に、F01のサイクル数がF23とは異なってしまう(符号G1及びG2参照)が、Pサイクルのタイミング制御で要素毎の違いを意識しなくて済む。
【0043】
図11は、関連例及び実施形態においてF01レーンのみを使用する場合における演算命令から演算命令への処理を示すバイパスタイムチャートである。
図12は、関連例及び実施形態においてF23レーンも使用する場合における演算命令から演算命令への処理を示すバイパスタイムチャートである。
【0044】
図11及び
図12に示すような演算命令から演算命令へのバイパスの例だと、実施形態ではF01の演算完了は、関連例と比較して1サイクル短くなっている(符号H1参照)。一方、後続のバイパス先の命令のPサイクルのタイミングは、F01とF23とで一致しており(符号I1参照)、バイパスのタイミング制御を変更する必要がない。
【0045】
図13は、関連例及び実施形態においてF01レーンのみを使用する場合におけるロード命令から演算命令への処理を示すバイパスタイムチャートである。
図14は、関連例及び実施形態においてF23レーンも使用する場合におけるロード命令から演算命令への処理を示すバイパスタイムチャートである。
【0046】
図13及び
図14に示すようなロード命令から演算命令へのバイパスについても、
図11及び
図12に示した演算命令から演算命令へのバイパスと同様である。
図13に示している通り、F01のみ使用する命令の完了は、関連例と比較して1サイクル短くなっている(符号J1参照)。
図14に示している通り、F23も使用する命令では、F01とF23との間で1サイクルのずれがあるにもかかわらず、後続のバイパス先の命令のPサイクルのタイミングが一致しており(符号K1参照)、バイパスのタイミング制御を変更する必要がない。
【0047】
実施形態においては、要素間の時差が1サイクル、2段階の場合に限らずSIMD幅を広げて、要素間の時差が2サイクルになったり、3段階以上になったりした場合でも同様にPサイクルのタイミング制御で要素毎の違いを意識せずに実装することができる。
【0048】
図15は、実施形態におけるCPU1の構成例を模式的に示すブロック図である。
【0049】
CPU1は、プロセッサの一例である。CPU1の内部には、命令発行器(
図15には不図示)や演算器(
図15には不図示)、データを近くで保持するL1キャッシュ110(L1$)などを組み合わせたコア10がある。また、CPU1は、Memory Access Controller(MAC)31,L2キャッシュ32(L2$),Peripheral Component Interconnect Express(PCIe)33及びネットワークIF34を備える。サーバやHigh-Performance Computing(HPC)などは、CPU1を複数接続し、処理を高速化してよい。
【0050】
複数存在するコア10は、独立処理を分担しているが、L1キャッシュ110よりも大容量のL2キャッシュ32を共有している。
【0051】
MAC31は、Dual Inline Memory Module(DIMM)など外部のメモリとの通信を制御するインターフェースである。
【0052】
PCIe33は、ストレージやホストコンピュータとのI/Oと接続されている。
【0053】
ネットワークIF34は、複数のCPU1の間を接続するインターコネクトである。
【0054】
CPU1は、
図1に示した関連例と同様のハードウェア構成例を有してよい。
【0055】
図16は、実施形態における2要素(F0,F1)のみを利用する演算命令から演算命令へのバイパスブロック図である。
図17は、関連例及び実施形態における2要素(F0,F1)のみを利用する演算命令から演算命令へのバイパスタイムチャートである。
図18は、実施形態における2要素(F0,F1)のみを利用する演算命令から演算命令へのバイパス配置例を示すブロック図である。
【0056】
図16~
図18に示す例では、4つのFPR172及び4つのFPU171のうち、F0FPR, F1FPR及びF0FPU, F1FPUが使用される。
【0057】
図17に示すように、2つの演算命令は、fadd v2, v0, v1及びfsub v4, v2, v3である。
図16~
図18に示すP、PT、B1、B2、X1、X2、X3、X4、U、UT、C、Wは、演算命令のパイプライン処理のサイクル名を示している。
【0058】
まず、Pサイクルでは、RSから各要素のFPR172に向けてレジスタ番号(p_p_src_fpr[5:0])が送出され、PTの1サイクルをかけて各要素のF0FPR,F1FPRにレジスタ番号が転送される(p_pt_src_fpr[5:0])。
【0059】
次のB1サイクルでは転送されてきたレジスタ番号に対応するFPR172の値が読出され(p_b1_f{0-1}fpr_data[63:0])、B2サイクルではOP1Rで示されるフリップフロップ22(オペランドを保持するレジスタ)に値がセットされる(p_b2_set_f{0-1}op1r[63:0])。
このとき、前の命令の演算結果がU,UTのFPR172への書込みを待たずに再利用される場合は、FPU171のX4サイクルの演算結果がB2サイクルのOP1Rで示されるフリップフロップ22にセットされる(バイパス;
図17の符号L1参照)。
【0060】
X1,X2,X3,X4サイクルでは、F0FPU,F1FPUで同時に演算が実行され、最後のサイクルであるX4サイクルではRRで示されるフリップフロップ22(Result Register:演算結果を保持するレジスタ)に結果がセットされる(p_x4_f{0-1}fpu_result[63:0])。
【0061】
そして、U,UTサイクルで、演算結果がF0FPR,F1FPRに転送され、演算結果が書き込まれる(p_u_f{0-1}fpu_result,p_ut_f{0-1}fpu_result)。
【0062】
C,Wサイクル(
図17参照)では、アウトオブオーダーで実行された命令がプログラム本来の実行順序で完了され、FPR172等の各種レジスタやメモリ等の資源更新および資源解放が行われる。
【0063】
命令列のv0,v1,v2,v3,v4は、SIMD演算に対応した128bitのレジスタであり64bitを1要素として、2要素(F0,F1)を並列に処理できる。fadd命令とfsub命令とはともにv2レジスタを利用しており、fadd命令の演算結果がfsub命令で再利用されている。fsub命令がFPR172から入力データを受け取ろうとした場合は、fadd命令が演算結果をFPR172に書き込むUTサイクルまで待つ必要がある。しかし、fadd命令のX4サイクルの演算結果(p_x4_f{0-1}fpu_result[63:0])をそのままB2サイクルのOP1Rに送る(p_b2_set_f{0-1}op1r[63:0])ことで、FPR172の更新を待たずして演算を行うことができる。
【0064】
図18に示すように、演算命令の実行のために、複数のFPR172のうちRSE161までの距離が最も近い位置に配置された一以上のFPR172が使用されると共に、複数のFPU171のうちDATAキャッシュ18までの距離が最も近い位置に配置された一以上のFPU171が使用されてよい。
【0065】
図17に示すように、関連例のレジスタ番号転送サイクルがPT,PT2の2サイクルであるのに対して、実施形態ではPTの1サイクルのみであるため、関連例と比較して1サイクルレイテンシが改善される(
図17の符号L2参照)。
【0066】
レイテンシ改善によって、WサイクルのFPR172の解放までの時間が早くなる。そして、FPR172の不足でパイプラインが止まり性能向上の妨げになることや、そのFPR172の不足に備えるためにFPR172のエントリ数を増やすことによる消費電力の増加やチップ面積の増大を防ぐ効果がある。
【0067】
図19は、実施形態における4要素(F0,F1,F2,F3)全てを利用する演算命令から演算命令へのバイパスブロック図である。
図20は、関連例及び実施形態における4要素(F0,F1,F2,F3)全てを利用する演算命令から演算命令へのバイパスタイムチャートである。
図21は、実施形態における4要素(F0,F1,F2,F3)全てを利用する演算命令から演算命令へのバイパス配置例を示すブロック図である。
【0068】
図19~
図21に示す例では、4つのFPR172及び4つのFPU171のうち、全てのF0FPR, F1FPR, F2FPR, F3FPR及び全てのF0FPU, F1FPU, F2FPU, F3FPUが使用される。
【0069】
図20に示すように、2つの演算命令は、fadd z2, z0, z1及びfsub z4, z2, z3である。
【0070】
図19~
図21に示すP、PT、PT2、B1、B2、X1、X2、X3、X4、U、UT、C、Wは、演算命令のパイプライン処理のサイクル名を示している。
【0071】
まず、PサイクルではRSから各要素のFPR172に向けてレジスタ番号が送出され(p_p_src_fpr[5:0])、PTの1サイクルをかけてF0FPR, F1FPRにレジスタ番号転送され(p_pt_src_fpr[5:0])、PT, PT2の2サイクルかけてF2FPR, F3FPRにレジスタ番号が転送される(p_pt2_src_fpr[5:0])。
【0072】
次のB1サイクルでは転送されてきたレジスタ番号に対応するFPR172の値が読出され(p_b1_f{0-3}fpr_data[63:0])、B2サイクルではOP1Rで示されるフリップフロップ22(オペランドを保持するレジスタ)に値がセットされる(p_b2_set_f{0-1}op1r[63:0])。
【0073】
このとき、前の命令の演算結果がU, UTのFPR172への書込みを待たずに再利用される場合は、FPU171のX4サイクルの演算結果がB2サイクルのOP1Rで示されるフリップフロップ22にセットされる(バイパス;
図20の符号M1参照)。
【0074】
X1, X2, X3, X4サイクルでは、各要素のFPU171(F0FPU, F1FPU, F2FPU, F3FPU)が同時に演算を実行し、最後のサイクルであるX4サイクルではRRで示されるフリップフロップ22(Result Register:演算結果を保持するレジスタ)に結果がセットされる(p_x4_f{0-3}fpu_result[63:0])。
【0075】
そして、U, UTサイクルで、演算結果が各要素のFPR172(F0FPR, F1FPR, F2FPR, F3FPR)に転送され、演算結果が書き込まれる(p_u_f{0-3}fpu_result,p_ut_f{0-3}fpu_result)。
【0076】
C,Wサイクル(
図20参照)では、アウトオブオーダーで実行された命令がプログラム本来の実行順序で完了され、FPR172等の各種レジスタやメモリ等の資源更新および資源解放が行われる。
【0077】
命令列のz0, z1,z2, z3, z4は、SIMD演算に対応した256bitのレジスタであり64bitを1要素として、4要素(F0, F1, F2, F3)を並列で処理できる。fadd命令とfsub命令はともにz2レジスタを利用しており、fadd命令の演算結果はfsub命令で再利用されている。
【0078】
fsub命令がFPR172から入力データを受け取ろうとした場合は、fadd命令が演算結果をFPR172に書き込むUTサイクルまで待つ必要がある。しかし、fadd命令のX4サイクルの演算結果(p_x4_f{0-3}fpu_result[63:0])がそのままB2サイクルのOP1Rに送られる(p_b2_set_f{0-1}op1r[63:0])ことで、FPR172の更新を待たずして演算を行うことができる。
【0079】
図16~
図18に示したケースとは異なり、全要素(F0, F1, F2, F3)を使用した命令であるため、関連例と比較してF2, F3のレジスタ番号の転送サイクルがPT, PT2の2サイクルから変更がないのでレイテンシの改善はない(
図20の符号M2参照)。
【0080】
ただし、F0, F1がPTサイクルのみで転送を行い、F2, F3がPT, PT2の2サイクル転送を行うため、要素間で時差ができている。しかし、
図20のタイムチャートに示す通り、後続のバイパス先の命令のPサイクルのタイミングがF01とF23とで一致しており、バイパスのタイミング制御で要素毎の違いを意識しなくて済むメリットがある。
【0081】
実施形態のように要素間の時差が1サイクル、2段階の場合に限らずSIMD幅を広げて、要素間の時差が2サイクルになったり、3段階以上になったりした場合でも同様にPサイクルのタイミング制御で要素毎の違いを意識せずに実装することができる。
【0082】
図22は、2要素(F0,F1)のみを利用するロード命令から演算命令へのバイパスブロック図である。
図23は、関連例及び実施形態における2要素(F0,F1)のみを利用するロード命令から演算命令へのバイパスタイムチャートである。
図24は、実施形態における2要素(F0,F1)のみを利用するロード命令から演算命令へのバイパス配置例を示すブロック図である。
【0083】
図22~
図24に示す例では、4つのFPR172及び4つのFPU171のうち、F0FPR, F1FPR及びF0FPU, F1FPUが使用される。
【0084】
図23に示すように、ロード命令はldr v2, [x0, x1]であり、演算命令はfsub v4, v2, v3である。
【0085】
図22~
図24において、P
d ,T
d,M
d,B
d,R
dはロード命令のパイプライン処理のサイクル名を示している。
【0086】
Pdではアドレス演算器から送られてきたアドレスがDATAキャッシュ18に送られ、Td,Md,Bdでは送られてきたアドレスのデータが読出されてLRで示されるフリップフロップ22にセットされる(p_bd_read_data[127:0])。RdではLRで示されるフリップフロップ22のデータ(p_rd_lr_data[127:0])の[63:0]がF0FPUのOP1Rで示されるフリップフロップ22に、[127:64]がF1FPUのOP1Rで示されるフリップフロップ22に、それぞれ転送される。
【0087】
図22~
図24において、P、PT、B1、B2、X1、X2、X3、X4、U、UT、C、Wは演算命令のパイプライン処理のサイクル名を示している。
【0088】
まず、PサイクルではRSから各要素のFPR172に向けてレジスタ番号が送出され(p_p_src_fpr[5:0])、PTの1サイクルをかけて各要素のF0FPR, F1FPRにレジスタ番号が転送される(p_pt_src_fpr[5:0])。
【0089】
次のB1サイクルでは、転送されてきたレジスタ番号に対応するFPR172の値が読出され(p_b1_f{0-1}fpr_data[63:0])、B2サイクルではOP1Rで示されるフリップフロップ22(オペランドを保持するレジスタ)に値が送られる(p_b2_set_f{0-1}op1r[63:0])(バイパス;
図23の符号N1参照)。
【0090】
X1, X2, X3, X4サイクルでは、各要素のF0FPU, F1FPUが同時に演算を実行し、最後のサイクルであるX4サイクルではRRで示されるフリップフロップ22(Result Register:演算結果を保持するレジスタ)に結果がセットされる(p_x4_f{0-1}fpu_result[63:0])。
【0091】
そして、U, UTサイクルで、演算結果がF0FPR, F1FPRに転送され、演算結果が書き込まれる(p_u_f{0-1}fpu_result,p_ut_f{0-1}fpu_result)。
【0092】
すなわち、RSは、ロード命令又はストア命令を更に格納してよい。そして、ロード命令又はストア命令が実行された後に、演算命令が実行されてよい。なお、ロード命令又はストア命令は、RSに備えられるRSA(
図1に示した関連例のRSA662に対応)に格納されてよい。
【0093】
C,Wサイクル(
図23参照)では、アウトオブオーダーで実行された命令がプログラム本来の実行順序で完了され、FPR172等の各種レジスタやメモリ等の資源更新および資源解放が行われる。
【0094】
命令列のv2, v3, v4は、SIMD演算に対応した128bitのレジスタであり64bitを1要素として、2要素(F0, F1)を並列に処理できる。x0, x1は64bitの固定小数点レジスタであり、このケースではアドレス計算に利用される。このldr命令の場合はx0+x1のアドレスから128bitのデータが64bitごとにF0FPR, F1FPRにそれぞれロードされる。ldr命令とfsub命令とはともにv2レジスタを利用しており、ldr命令でロードしたデータはfsub命令で再利用されている。fsub命令がFPR172から入力データを受け取ろうとした場合は、ldr命令が結果をFPR172に書き込むまで待つ必要がある。しかし、ロードしたデータがRdサイクル(p_rd_lr_data[127:0])からB2サイクルのOP1Rに直接送られる(p_b2_set_f{0-1}op1r[63:0])ことで、FPR172の更新を待たずして演算を行うことができる。
【0095】
図16~
図18に示したケースと同様に、関連例のレジスタ番号転送サイクルがRd, RdTの2サイクルであるのに対して、実施形態はRdの1サイクルのみであるため、関連例と比較して1サイクルレイテンシが改善される(
図23の符号N1参照)。
【0096】
レイテンシ改善によってWサイクルのFPR172の解放までの時間が早くなり、FPR172の不足でパイプラインが止まり性能向上の妨げになる。また、FPR172の不足に備えるためにFPR172のエントリ数を増やすことによる消費電力の増加やチップ面積の増大を防ぐ効果がある。
【0097】
図25は、実施形態における4要素(F0,F1,F2,F3)全てを利用するロード命令から演算命令へのバイパスブロック図である。
図26は、関連例及び実施形態における4要素(F0,F1,F2,F3)全てを利用するロード命令から演算命令へのバイパスタイムチャートである。
図27は、実施形態における4要素(F0,F1,F2,F3)全てを利用するロード命令から演算命令へのバイパス配置例を示すブロック図である。
【0098】
図25~
図27に示す例では、4つのFPR172及び4つのFPU171のうち、全てのF0FPR, F1FPR, F2FPR, F3FPR及び全てのF0FPU, F1FPU, F2FPU, F3FPUが使用される。
【0099】
図26に示すように、ロード命令はldr z2, [x0, x1]であり、演算命令はfsub z4, z2, z3である。
【0100】
図25~
図27に示すP
d ,T
d,M
d,B
d,R
d、R
dTは、ロード命令のパイプライン処理のサイクル名を示している。
【0101】
Pdサイクルでは、アドレス演算器から送られてきたアドレスがDATAキャッシュ18に送られる。
【0102】
Td,Md,Bdサイクルでは、送られてきたアドレスのデータが読出されて、LRで示されるフリップフロップ22にセットされる(p_bd_read_data[255:0])。LRで示されるフリップフロップ22のデータは、Rdの1サイクルかけて[63:0]をF0FPUのOP1Rで示されるフリップフロップ22に、[127:64]をF1FPUのOP1Rで示されるフリップフロップ22に、それぞれ転送される。
【0103】
Rd、RdTの2サイクルかけて、[191:128]がF2FPUのOP1Rで示されるフリップフロップ22に、[255:192]がF3FPUのOP1Rで示されるフリップフロップ22に、それぞれ転送される。
【0104】
図25~
図27に示すP、PT、PT2、B1、B2、X1、X2、X3、X4、U、UT、C、Wは、演算命令のパイプライン処理のサイクル名を示している。
【0105】
まず、Pサイクルでは、RSから各要素のFPR172に向けてレジスタ番号が送出され(p_p_src_fpr[5:0])、PTの1サイクルをかけてF0FPR, F1FPRにレジスタ番号が転送され(p_pt_src_fpr[5:0])、PT, PT2の2サイクルかけてF2FPR,F3FPRにレジスタ番号が転送される(p_pt2_src_fpr[5:0])。
【0106】
次のB1サイクルでは、転送されてきたレジスタ番号に対応するFPR172の値が読出され(p_b1_f{0-3}fpr_data[63:0])、B2サイクルではOP1Rで示されるフリップフロップ22(オペランドを保持するレジスタ)に値がセットされる(p_b2_set_f{0-1}op1r[63:0])。
【0107】
このとき、前の命令の演算結果がU, UTのFPR172への書込みを待たずに再利用される場合は、FPU171のX4サイクルの演算結果がB2サイクルのOP1Rで示されるフリップフロップ22にセットされる(バイパス;
図26の符号P1参照)。
【0108】
X1, X2, X3, X4サイクルでは、各要素のFPU171(F0FPU, F1FPU, F2FPU, F3FPU)が同時に演算を実行し、最後のサイクルであるX4サイクルではRRで示されるフリップフロップ22(Result Register:演算結果を保持するレジスタ)に結果がセットされる(p_x4_f{0-3}fpu_result[63:0])。
【0109】
そして、U, UTサイクルでは、演算結果が各要素のFPR172(F0FPR, F1FPR, F2FPR, F3FPR)に転送され、演算結果が書き込まれる(p_u_f{0-3}fpu_result,p_ut_f{0-3}fpu_result)。
【0110】
C, Wサイクル(
図26参照)では、アウトオブオーダーで実行された命令がプログラム本来の実行順序で完了され、FPR172等の各種レジスタやメモリ等の資源更新および資源解放が行われる。
【0111】
命令列のz2, z3, z4は、SIMD演算に対応した256bitのレジスタであり64bitを1要素として、4要素(F0, F1, F2, F3)を並列に処理できる。x0, x1は、64bitの固定小数点レジスタであり、このケースではアドレス計算に利用される。このldr命令の場合はx0+x1のアドレスから256bitのデータは、64bit毎にF0FPR, F1FPR, F2FPR, F3FPRにそれぞれロードされる。ldr命令とfsub命令とはともにz2レジスタを利用しており、ldr命令でロードしたデーはfsub命令で再利用されている。fsub命令がFPR172から入力データを受け取ろうとした場合は、ldr命令が結果をFPR172に書き込むまで待つ必要がある。しかし、ロードしたデータをF01はRdサイクル(p_rd_lr_data[127:0])から、F23はRdTサイクル(p_rdt_lr_data[255:128])から、B2サイクルのOP1Rに直接送る(p_b2_set_f{0-3}op1r[63:0])ことで、FPR172の更新を待たずして演算を行うことができる。
【0112】
図22~
図24に示したケースとは異なり、
図25~
図27に示すケースは全要素(F0, F1, F2, F3)を使用した命令であり、関連例と比較してF2, F3のレジスタ番号の転送サイクルがRd, RdTの2サイクルから変更がないためレイテンシの改善はない(
図26の符号P2参照)。
【0113】
ただし、F0, F1がRdサイクルのみで転送で、F2, F3がRd, RdTの2サイクル転送のため要素間で時差ができている。しかし、
図26のタイムチャートに示す通り、後続のバイパス先の命令のPサイクルのタイミングがF01とF23とで一致しており、バイパスのタイミング制御で要素毎の違いを意識しなくて済むメリットがある。
【0114】
実施形態のように要素間の時差が1サイクル、2段階の場合に限らずSIMD幅を広げて、要素間の時差が2サイクルになったり、3段階以上になったりした場合でも同様にPサイクルのタイミング制御で要素毎の違いを意識せずに実装することができる。
【0115】
図28は、関連例及び実施形態における8要素(F0-F7)全てを利用する演算命令から演算命令へのバイパスタイムチャートである。
図29は、実施形態における8要素(F0-F7)全てを利用する演算命令から演算命令へのバイパス配置例を示すブロック図である。
【0116】
図28及び
図29に示す例では、要素数が8つに拡張されている。8つのFPR172及び8つのFPU171のうち、全てのF0FPR, F1FPR, F2FPR, F3FPR, F4FPR, F5FPR, F6FPR, F7FPR及び全てのF0FPU, F1FPU, F2FPU, F3FPU, F4FPU, F5FPU, F6FPU, F7FPUが使用される。
【0117】
図28に示すように、2つの演算命令は、fadd z2, z0, z1及びfsub z4, z2, z3である。
【0118】
図28及び
図29に示すP、PT、PT2、B1、B2、X1、X2、X3、X4、U、UT、C、Wは、演算命令のパイプライン処理のサイクル名を示している。
【0119】
まず、PサイクルではRSから各要素のFPR172に向けてレジスタ番号が送出され、PTの1サイクルをかけてF0FPR, F1FPRにレジスタ番号が転送され、PT, PT2の2サイクルかけてF{2-7}FPRにレジスタ番号が転送される。
【0120】
次のB1サイクルでは、転送されてきたレジスタ番号に対応するFPR172の値が読出され、演算器に送られる。
【0121】
このとき、前の命令の演算結果がU, UTのFPR172への書込みを待たずに再利用される場合は、FPU171のX4サイクルの演算結果がB2サイクルに送られる(バイパス;
図28の符号Q1参照)。
【0122】
X1, X2, X3, X4サイクルでは、各要素のFPU171(F{0-7}FPU)が同時に演算を実行され、X4サイクルの演算が完了する。
【0123】
U,UTサイクルで、演算結果が各要素のFPR172(F{0-7}FPR)に転送され、演算結果が書き込まれる。
【0124】
C,Wサイクル(
図28参照)では、アウトオブオーダーで実行された命令がプログラム本来の実行順序で完了され、FPR172等の各種レジスタやメモリ等の資源更新および資源解放が行われる。
【0125】
命令列のz0, z1, z2, z3, z4は、SIMD演算に対応した512bitのレジスタであり64bitを1要素として、8要素(F0-7)を並列で処理できる。fadd命令とfsub命令とはともにz2レジスタを利用しており、fadd命令の演算結果はfsub命令で再利用されている。fsub命令がFPR172から入力データを受け取ろうとした場合は、fadd命令が演算結果をFPR172に書き込むUTサイクルまで待つ必要がある。しかし、fadd命令のX4サイクルの演算結果をそのままB2サイクルに送ることで、FPR172の更新を待たずして演算を行うことができる。
【0126】
図28のタイムチャートに示す通り、関連例と比較してF2-7のレジスタ番号の転送サイクルがPT, PT2の2サイクルから変更がないのでレイテンシの改善はない(符号Q2参照)。
【0127】
ただし、F0, F1がPTサイクルのみの転送で、F2-7がPT, PT2の2サイクル転送のため要素間で時差ができている。しかし、後続のバイパス先の命令のPサイクルのタイミングがF01とF2-7とで一致しており、バイパスのタイミング制御で要素毎の違いを意識しなくて済むメリットがある。
【0128】
このように、SIMD幅を4要素から8要素に拡張した場合でも、Pサイクルのタイミング制御で要素毎の違いを意識せずに実装することができる。また、F01のみ使用する命令の場合は4要素の場合と同様に1サイクルレイテンシが改善される。
【0129】
図30は、関連例及び実施形態における8要素(F0-F7)全てを利用し時差を3段階にした場合における演算命令から演算命令へのバイパスタイムチャートである。
図31は、8要素(F0-F7)全てを利用し時差を3段階にした場合の演算命令から演算命令へのバイパス配置例を示すブロック図である。
【0130】
図30及び
図31に示す例では、8つのFPR172及び8つのFPU171のうち、全てのF0FPR, F1FPR, F2FPR, F3FPR, F4FPR, F5FPR, F6FPR, F7FPR及び全てのF0FPU, F1FPU, F2FPU, F3FPU, F4FPU, F5FPU, F6FPU, F7FPUが使用される。また、
図30及び
図31に示す例では、周波数等の制限よりF4-7への転送サイクルにPT3が必要になっており、8要素のFPR172及びFPR172が3段階に拡張されている。
【0131】
図30に示すように、2つの演算命令は、fadd z2, z0, z1及びfsub z4, z2, z3である。
【0132】
図30及び
図31に示すP、PT、PT2、PT3、B1、B2、X1、X2、X3、X4、U、UT、C、Wは演算命令のパイプライン処理のサイクル名を示している。
【0133】
まず、Pサイクルでは、RSから各要素のFPR172に向けてレジスタ番号が送出される。PTの1サイクルをかけてF0FPR, F1FPRにレジスタ番号が転送され、PT, PT2の2サイクルかけてF2FPR、F3FPRにレジスタ番号が転送され、PT、PT2、PT3の3サイクルかけてF{4-7}FPRにレジスタ番号が転送される。
【0134】
次のB1サイクルでは、転送されてきたレジスタ番号に対応するFPR172の値が読出され、演算器に送られる。
【0135】
このとき、前の命令の演算結果がU, UTのFPR172への書込みを待たずに再利用される場合は、FPU171のX4サイクルの演算結果がB2サイクルに送られる(バイパス;
図30の符号R1参照)。
【0136】
X1, X2, X3, X4サイクルでは、各要素のFPU171(F{0-7}FPU)が同時に演算を実行し、X4サイクル演算が完了する。
【0137】
U, UTサイクルで、演算結果が各要素のFPR172(F{0-7}FPR)に転送され、演算結果が書き込まれる。
【0138】
C,Wサイクル(
図30参照)では、アウトオブオーダーで実行された命令がプログラム本来の実行順序で完了され、FPR172等の各種レジスタやメモリ等の資源更新および資源解放を行われる。
【0139】
命令列のz0, z1, z2, z3, z4は、SIMD演算に対応した512bitのレジスタであり64bitを1要素として、8要素(F0-7)を並列で処理できる。fadd命令とfsub命令とはともにz2レジスタを利用しており、fadd命令の演算結果がfsub命令で再利用されている。fsub命令がFPR172から入力データを受け取ろうとした場合は、fadd命令が演算結果をFPR172に書き込むUTサイクルまで待つ必要がある。しかし、fadd命令のX4サイクルの演算結果がそのままB2サイクルに送られることで、FPR172の更新を待たずして演算を行うことができる。
【0140】
図30のタイムチャートに示す通り、関連例と比較してF4-7のレジスタ番号の転送サイクルが、PT, PT2, PT3の3サイクルから変更されていないため、レイテンシの改善はない(符号R2参照)。
【0141】
ただし、F0, F1がPTサイクルで転送、F23がPT, PT2の2サイクル転送、F4-F7がPT, PT2, PT3の3サイクル転送と、要素間で3段階の時差ができている。しかし、後続のバイパス先の命令のPサイクルのタイミングがF01とF23とF4-F7とで一致しており、バイパスのタイミング制御で要素毎の違いを意識しなくて済むメリットがある。
【0142】
このように、SIMD幅を4要素から8要素に拡張し、かつ時差を3段階に拡張した場合でも、Pサイクルのタイミング制御で要素毎の違いを意識せずに実装することができる。
【0143】
また、このケースでは、F01のみ使用する命令の場合は関連例のPT, PT2, PT3の3サイクルに対してPTの1サイクルで転送できるため2サイクルのレイテンシが改善され、
図28及び
図29に示したケースのF01のみを使用する場合と同等のレイテンシになる。
【0144】
また、F0123のみ使用する命令の場合は、関連例のPT, PT2, PT3の3サイクルに対してPT, PT2の2サイクルのみで転送できるため、1サイクルのレイテンシが改善される。
【0145】
〔B〕効果
上述した実施形態における演算処理装置及び演算処理方法によれば、例えば以下の作用効果を奏することができる。
【0146】
RSE161は、演算命令を格納する。DATAキャッシュ18は、演算命令の演算結果をキャッシュする。複数のFPR172は、RSE161の側に配置されると共に、RSE161から転送された演算命令を実行するためのレジスタ値を格納する。複数のFPU171は、DATAキャッシュ18の側に配置されると共に、演算命令に基づいた浮動小数点演算を行う。RSE161から、複数のFPR172のうちRSE161までの距離が最も近い位置に配置された一以上のFPR172へ、レジスタ値を転送する際のサイクルは、1サイクルとされる。
【0147】
これにより、浮動小数点演算を効率的に実行することができる。
【0148】
〔C〕その他
開示の技術は上述した実施形態に限定されるものではなく、本実施形態の趣旨を逸脱しない範囲で種々変形して実施することができる。本実施形態の各構成及び各処理は、必要に応じて取捨選択することができ、あるいは適宜組み合わせてもよい。
【0149】
〔D〕付記
以上の実施形態に関し、更に以下の付記を開示する。
【0150】
(付記1)
演算命令を格納する命令格納部と、
前記演算命令の演算結果をキャッシュするデータキャッシュ部と、
前記命令格納部の側に配置されると共に、前記命令格納部から転送された前記演算命令を実行するためのレジスタ値を格納する複数の浮動小数点レジスタと、
前記データキャッシュ部の側に配置されると共に、前記演算命令に基づいた浮動小数点演算を行う複数の浮動小数点演算器と、
を備え、
前記命令格納部から、前記複数の浮動小数点レジスタのうち前記命令格納部までの距離が最も近い位置に配置された一以上の浮動小数点レジスタへ、前記レジスタ値を転送する際のサイクルが1サイクルである、
演算処理装置。
【0151】
(付記2)
前記演算命令の実行のために、前記複数の浮動小数点レジスタのうち前記一以上の浮動小数点レジスタを使用すると共に、前記複数の浮動小数点演算器のうち前記データキャッシュ部までの距離が最も近い位置に配置された一以上の浮動小数点演算器を使用する、
付記1に記載の演算処理装置。
【0152】
(付記3)
ロード命令又はストア命令が実行された後に、前記演算命令が実行される、
付記1又は2に記載の演算処理装置。
【0153】
(付記4)
命令格納部において、演算命令を格納し、
データキャッシュ部において、前記演算命令の演算結果をキャッシュし、
前記命令格納部の側に配置される複数の浮動小数点レジスタにおいて、前記命令格納部から転送された前記演算命令を実行するためのレジスタ値を格納し、
前記データキャッシュ部の側に配置される複数の浮動小数点演算器において、前記演算命令に基づいた浮動小数点演算を行う、
処理をコンピュータが実行し、
前記命令格納部から、前記複数の浮動小数点レジスタのうち前記命令格納部までの距離が最も近い位置に配置された一以上の浮動小数点レジスタへ、前記レジスタ値を転送する際のサイクルを1サイクルとする、
演算処理方法。
【0154】
(付記5)
前記演算命令の実行のために、前記複数の浮動小数点レジスタのうち前記一以上の浮動小数点レジスタを使用すると共に、前記複数の浮動小数点演算器のうち前記データキャッシュ部までの距離が最も近い位置に配置された一以上の浮動小数点演算器を使用する、
処理を前記コンピュータが実行する、付記4に記載の演算処理方法。
【0155】
(付記6)
ロード命令又はストア命令が実行された後に、前記演算命令が実行される、
付記4又は5に記載の演算処理方法。
【符号の説明】
【0156】
1 :CPU
10 :コア
18 :DATAキャッシュ
21 :セレクタ
22 :フリップフロップ
31 :MAC
32 :L2キャッシュ
33 :PCIe
34 :ネットワークIF
61 :命令キャッシュ
62 :命令バッファ
63 :デコード部
64 :レジスタ管理部
65 :バイパス管理部
66 :リザベーションステーション
67 :演算実行部
68 :DATAキャッシュ
72 :フリップフロップ
110 :L1キャッシュ
161,661 :RSE
171,671 :FPU
172,672 :FPR
673 :固定少数点レジスタ
674 :アドレス演算器