IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 富士通株式会社の特許一覧

<>
  • 特開-プロセッサ 図1
  • 特開-プロセッサ 図2
  • 特開-プロセッサ 図3
  • 特開-プロセッサ 図4
  • 特開-プロセッサ 図5
  • 特開-プロセッサ 図6
  • 特開-プロセッサ 図7
  • 特開-プロセッサ 図8
  • 特開-プロセッサ 図9
  • 特開-プロセッサ 図10
  • 特開-プロセッサ 図11
  • 特開-プロセッサ 図12
  • 特開-プロセッサ 図13
  • 特開-プロセッサ 図14
  • 特開-プロセッサ 図15
  • 特開-プロセッサ 図16
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024056266
(43)【公開日】2024-04-23
(54)【発明の名称】プロセッサ
(51)【国際特許分類】
   G06F 9/34 20180101AFI20240416BHJP
   G06F 9/38 20180101ALI20240416BHJP
【FI】
G06F9/34 330
G06F9/38 310X
【審査請求】未請求
【請求項の数】6
【出願形態】OL
(21)【出願番号】P 2022163027
(22)【出願日】2022-10-11
(71)【出願人】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】100107766
【弁理士】
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【弁理士】
【氏名又は名称】伊東 忠彦
(74)【代理人】
【識別番号】100107515
【弁理士】
【氏名又は名称】廣田 浩一
(72)【発明者】
【氏名】坂下 聡太
【テーマコード(参考)】
5B013
5B033
【Fターム(参考)】
5B013AA20
5B033AA13
5B033DD06
5B033DD09
(57)【要約】
【課題】前処理を実行しない演算命令の演算レイテンシの増加を抑制しつつ、前処理を実行する演算命令の処理性能を向上する。
【解決手段】プロセッサは、演算命令をパイプライン処理する演算実行部を有するプロセッサであって、前記演算実行部は、演算に使用するデータを保持する第1レジスタと、前記第1レジスタに保持されたデータの前処理を実行する前処理部と、前記前処理部で前処理されたデータを保持する第2レジスタと、第1レジスタに保持されたデータまたは前記第2レジスタに保持されたデータの演算を実行する演算器と、前記第1レジスタの出力または前記第2レジスタの出力を前記演算器の入力に接続するセレクタと、を有する。
【選択図】図1
【特許請求の範囲】
【請求項1】
演算命令をパイプライン処理する演算実行部を有するプロセッサであって、
前記演算実行部は、
演算に使用するデータを保持する第1レジスタと、
前記第1レジスタに保持されたデータの前処理を実行する前処理部と、
前記前処理部で前処理されたデータを保持する第2レジスタと、
第1レジスタに保持されたデータまたは前記第2レジスタに保持されたデータの演算を実行する演算器と、
前記第1レジスタの出力または前記第2レジスタの出力を前記演算器の入力に接続するセレクタと、を有する
プロセッサ。
【請求項2】
データを前記前処理部で前処理せずに前記演算器で演算する第1演算命令と、データを前記前処理部で前処理させた後に前記演算器で演算する第2演算命令とをデコードする命令デコーダと、
前記第2演算命令の前処理後のデータの演算を前記演算器で実行するサイクルと、前記第2演算命令に続いて前記第1演算命令が前記演算実行部に供給される場合に前記第1演算命令の演算を前記演算器で実行するサイクルとにおいて、前記第2レジスタの出力を前記セレクタに選択させる選択信号を生成する選択信号生成部と、を有し、
前記命令デコーダは、前記前処理部に入力されるデータを前処理せずに前記前処理部から出力させる制御情報を生成する
請求項1に記載のプロセッサ。
【請求項3】
前記選択信号生成部は、前記第2演算命令に対応して生成した前記選択信号を後続の演算命令が続く間保持し、後続の演算命令が途切れたときに前記第1レジスタの出力を前記セレクタに選択させる選択信号を生成する保持部を有する
請求項2に記載のプロセッサ。
【請求項4】
前記第1レジスタと前記セレクタとの間に直列に接続され、前記前処理部と前記第2レジスタとをそれぞれ含む複数の前処理段と、
データを複数の前記前処理段で前処理せずに前記演算器で演算する第1演算命令と、データを前処理する前記前処理段の数に対応する複数種の第2演算命令とをデコードする命令デコーダと、
複数種の前記第2演算命令の各々の前処理後のデータの演算を前記演算器で実行するサイクルと、複数種の前記第2演算命令の1つに続いて前記第1演算命令が前記演算実行部に供給される場合に前記第1演算命令の演算を前記演算器で実行するサイクルとにおいて、前記第2演算命令の前記1つの前処理後のデータを保持する前記第2レジスタの出力を前記セレクタに選択させる選択信号を生成する選択信号生成部と、を有し、
前記命令デコーダは、前記第1演算命令のデコードに基づいて複数の前記前処理段の各々の前記前処理部に入力されるデータを前処理せずに前記前処理部の各々から出力させる制御情報を生成する
請求項1に記載のプロセッサ。
【請求項5】
前記選択信号生成部は、複数種の前記第2演算命令の各々に対応して生成した前記選択信号を後続の演算命令が続く間保持し、後続の演算命令が途切れたときに前記選択信号の生成を停止する複数の保持部を、複数の前記前処理段にそれぞれ対応して有し、
前記選択信号の生成の停止は、前段側の前記前処理段に対応する前記保持部から順に実行され、
前記セレクタは、複数の前記保持部の各々が生成または生成を停止する前記選択信号に応じて前記第1レジスタの出力または複数の前記第2レジスタの出力のいずれかを前記演算器の入力に接続する
請求項4に記載のプロセッサ。
【請求項6】
複数の前記前処理部の少なくとも1つに前処理を実行させない前記第2演算命令をデコードした場合、前処理を実行しない前記前処理部による前処理を無効にする制御情報を生成する
請求項4または請求項5に記載のプロセッサ。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、プロセッサに関する。
【背景技術】
【0002】
先行する演算命令に続く演算命令の演算器への発行を、ソースオペランドが使用可能か否かを示す情報に基づいて制御することで、レジスタを共用して演算サイクル数が異なる演算器群を並列に動作させる手法が知られている(例えば、特許文献1参照)。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】特開2000-181705号公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
例えば、データの演算と、データを前処理した前処理後のデータの演算とを1つの演算器で実行する場合、パイプラインは、データを前処理する前処理部を含む第1フローと、データを演算する演算器を含む第2フローとに分けられる。そして、前処理を実行するデータの演算は、第1フローと第2フローとを組み合わせて実行され、前処理を実行しないデータの演算は、第2フローのみを使用して実行される。あるいは、パイプラインが直列に接続された前処理部と演算器とを含む場合、前処理を実行しないデータの演算は、前処理部の処理を無効化することで実行される。
【0005】
しかしながら、第1フローと第2フローとを含むパイプラインでは、前処理を実行するデータの演算は、2サイクルに1回しか実行されないため、1サイクルあたりの命令処理数であるIPC(Instruction per Cycle)が悪化する。また、前処理部と演算器とを含むパイプラインでは、前処理を実行しないデータの演算時にデータが前処理部を通過するため、余計なサイクルが追加され、演算レイテンシが伸びてしまう。
【0006】
1つの側面では、本発明は、前処理を実行しない演算命令の演算レイテンシの増加を抑制しつつ、前処理を実行する演算命令の処理性能を向上することを目的とする。
【課題を解決するための手段】
【0007】
一つの観点によればプロセッサは、演算命令をパイプライン処理する演算実行部を有するプロセッサであって、前記演算実行部は、演算に使用するデータを保持する第1レジスタと、前記第1レジスタに保持されたデータの前処理を実行する前処理部と、前記前処理部で前処理されたデータを保持する第2レジスタと、第1レジスタに保持されたデータまたは前記第2レジスタに保持されたデータの演算を実行する演算器と、前記第1レジスタの出力または前記第2レジスタの出力を前記演算器の入力に接続するセレクタと、を有する。
【発明の効果】
【0008】
前処理を実行しない演算命令の演算レイテンシの増加を抑制しつつ、前処理を実行する演算命令の処理性能を向上することができる。
【図面の簡単な説明】
【0009】
図1】一実施形態におけるプロセッサの要部の一例を示すブロック図である。
図2図1のプロセッサで実行される積和演算命令の動作の例を示す説明図である。
図3図1のプロセッサが図2に示す積和演算命令を実行するときのパイプラインの動作の例を示すタイミング図である。
図4】他のプロセッサの要部の一例を示すブロック図である。
図5図4のプロセッサが図2に示す積和演算命令を実行するときのパイプラインの動作の例を示すタイミング図である。
図6】さらなる他のプロセッサの要部の一例を示すブロック図である。
図7図6のプロセッサが図2に示す積和演算命令を実行するときのパイプラインの動作の例を示すタイミング図である。
図8】別の実施形態におけるプロセッサの一例を示すブロック図である。
図9図8の演算実行部の要部の一例を示すブロック図である。
図10図9の演算実行部が図2に示す積和演算命令を実行するときのパイプラインの動作の例を示すタイミング図である。
図11図9の演算実行部が図2に示す積和演算命令を実行するときのパイプラインの動作の別の例を示すタイミング図である。
図12】別の実施形態のプロセッサにおける演算実行部の要部の一例を示すブロック図である。
図13図12の回路の続きの一例を示すブロック図である。
図14図12および図13の演算実行部が積和演算命令を実行するときのパイプラインの動作の例を示すタイミング図である。
図15図12および図13の演算実行部が積和演算命令を実行するときのパイプラインの動作の別の例を示すタイミング図である。
図16図12および図13の演算実行部が積和演算命令を実行するときのパイプラインの動作のさらなる別の例を示すタイミング図である。
【発明を実施するための形態】
【0010】
以下、図面を参照して実施形態が説明される。以下では、信号が伝達される信号線には、信号名と同じ符号が使用される。特に限定されないが、以下で説明するプロセッサは、スーパースカラ方式のプロセッサであり、パイプライン処理により命令を並列に実行する。また、以下で説明するプロセッサは、1つの命令で複数のデータの演算を並列に実行するSIMD(Single Instruction Multiple Data)演算を実行可能である。なお、以下で説明するプロセッサは、スカラー方式のプロセッサでもよい。
【0011】
図1は、一実施形態におけるプロセッサの要部の一例を示す。図1に示すプロセッサ100は、演算命令をパイプライン処理する演算実行部20を有する。図1では、クロック信号およびクロック端子の記載は省略する。例えば、演算実行部20は、ARM社の命令セットアーキテクチャで定義されているFMLA命令(FMLAは"Floating-point fused Multiply-Add")とFMLA(by element)命令とを実行可能である。FMLA命令は、第1演算命令の一例であり、FMLA(by element)命令は、第2演算命令の一例である。
【0012】
演算実行部20は、レジスタFPR(Floating Point Register)、オペランドレジスタOPRG、シフト演算器SFT1、レジスタSFRG1、セレクタSEL1、FMA(Floating Multiply Add)演算器およびリザルトレジスタRRを有する。また、演算実行部20は、パイプラインのステージを区切る複数のフリップフロップFF(図1ではFF11のみを示す)を有する。
【0013】
オペランドレジスタOPRGは、演算に使用するデータを保持する第1レジスタの一例である。シフト演算器SFT1は、オペランドレジスタOPRGに保持されたデータの前処理を実行する前処理部の一例である。レジスタSFRG1は、シフト演算器SFT1で前処理されたデータを保持する第2レジスタの一例である。セレクタSEL1は、オペランドレジスタOPRGに保持されたデータまたはレジスタSFRG1に保持されたデータを選択する第1セレクタの一例である。FMA演算器は、セレクタSEL1により選択されたデータの演算を実行する演算器の一例である。
【0014】
図1に示す符号P、PT、B、BX1、X1-X4およびUは、浮動小数点演算のパイプラインのステージを示す。以下では、各ステージは、サイクルとも称される。Pサイクルは、プロセッサ100に搭載されるリザベーションステーションRSE(Reservation Station for Execution)が演算実行部20に演算命令を投入するサイクルである。PTサイクルは、リザベーションステーションRSEから投入されたリードアドレスRD-ADを含む演算命令がレジスタFPRに出力されるサイクルである。Bサイクルは、演算に使用するデータを決定するサイクルである。
【0015】
BX1サイクルは、演算の前に前処理を実行する演算命令において、前処理を実行するサイクルである。例えば、演算の前に前処理を実行する演算命令の1つであるFMLA(by element)命令の実行では、積和演算の前に前処理としてシフト処理が実行される。X1-X4(X1、X2、X3、X4)サイクルは、積和演算を実行するサイクルである。Uサイクルは、演算結果であるリザルトデータRS-DTをレジスタFPRに書き込むサイクルである。
【0016】
フリップフロップFF11、レジスタFPR、オペランドレジスタOPRG、セレクタSEL1、FMA演算器およびリザルトレジスタRRは、リザベーションステーションRSEの出力に直列に接続される。シフト演算器SFT1およびレジスタSFRG1は、オペランドレジスタOPRGとセレクタSEL1との間に直列に接続される。リザベーションステーションRSEは、演算命令を蓄積し、蓄積した演算命令を実行可能な順にアウトオブオーダで演算実行部20に投機的に発行する。
【0017】
レジスタFPRは、フリップフロップFF11を介してリザベーションステーションRSEから受けるアドレスRD-ADが示す記憶領域に保持されているデータRD-DT(浮動小数点数データ)をオペランドレジスタOPRGに出力する。オペランドレジスタOPRGは、レジスタFPRからのデータRD-DTまたは演算実行部20に搭載される演算器からのバイパスデータBPS-DTをシフト演算器SFT1とセレクタSEL1の入力端子0とに出力する。例えば、積和演算では、3種類のオペランドがオペランドレジスタOPRGに保持される。
【0018】
シフト演算器SFT1は、FMLA(by element)命令の実行時、BX1サイクルにおいて、指定されたオペランドデータのシフト演算を実行し、シフト演算の実行結果をレジスタSFRG1に格納する。また、シフト演算器SFT1は、シフト演算が指定されないオペランドデータをそのままレジスタSFRG1に格納する。
【0019】
シフト演算器SFT1は、イネーブル端子ENBで受けるイネーブル信号ENBに応じて、シフト演算するオペランドデータを選択する。FMLA命令の実行時、BX1サイクルは存在しないため、シフト演算器SFT1は、イネーブル信号ENBにより動作が無効にされる。例えば、イネーブル端子ENBは、演算に使用するオペランドを識別するコードのビット数だけ設けられてもよく、演算に使用するオペランドの数だけ設けられてもよい。
【0020】
セレクタSEL1は、セレクト信号BX1-SELの論理値に応じて、入力端子0で受けるオペランドレジスタOPRGからの出力データまたは入力端子1で受けるレジスタSFRG1からの出力データをFMA演算器に供給する。例えば、セレクタSEL1は、FMLA(by element)命令のX1サイクルでレジスタSFRG1の出力を選択し、FMLA(by element)命令以外の演算命令のX1サイクルでオペランドレジスタOPRGの出力を選択する。
【0021】
FMA演算器は、セレクタSEL1から受けるオペランドデータの積和演算を実行し、実行結果をリザルトレジスタRRに格納する。例えば、FMA演算器は、内部に4ステージ分のフリップフロップを有しており、X1サイクルからX4サイクルまでの4サイクルかけて積和演算を実行し、実行結果をリザルトレジスタRRに格納する。
【0022】
演算実行部20は、FMLA命令を実行する場合、オペランドレジスタOPRG内のデータをそのまま使用して積和演算を実行する。このため、オペランドレジスタOPRGからのデータの出力は、X1サイクルとなり、FMLA命令の実行時のパイプラインは、P、PT、B、X1、X2、X3、X4、Uサイクルとなる。
【0023】
一方、演算実行部20は、FMLA(by element)命令を実行する場合、積和演算の前に前処理を実行する。このため、オペランドレジスタOPRGからのデータの出力は、BX1サイクルとなり、レジスタSFRG1からのデータの出力がX1サイクルとなる。したがって、FMLA(by element)命令の実行時のパイプラインは、P、PT、B、BX1、X1、X2、X3、X4、Uサイクルとなる。
【0024】
なお、前処理を実行しない演算命令は、FMLA命令以外でもよく、前処理を実行する演算命令は、FMLA(by element)命令以外でもよい。演算実行部20は、FMA演算器以外の演算器を有してもよい。前処理部SFT1は、シフト処理以外の前処理を実行してもよい。
【0025】
図2は、図1のプロセッサ100で実行される積和演算命令の動作の例を示す。図2では、FMLA命令とFMLA(by element)命令とが示される。FMLA命令は、浮動小数点数の通常の積和演算命令であり、例えば、上位ビット群同士の演算と下位ビット群同士の演算を同時に実行可能である(2SIMD演算)。FMLA(by element)命令は、前処理したデータを積和演算する命令である。特に限定されないが、各オペランドは、128ビットであり、上位ビット群および下位ビット群は、それぞれ64ビットである。
【0026】
FMLA命令では、まず、第1オペランドと第2オペランドを使用して、上位ビット群D1H、D2Hの乗算と下位ビット群D1L、D2Lの乗算とが実行される。次に、上位ビット群の乗算結果と第3オペランドの上位ビット群D3Hとが加算され、下位ビット群の乗算結果と第3オペランドの下位ビット群D3Lとが加算され、2つの64ビットのデータDH、DLがリザルトデータRS-DTとして出力される。
【0027】
FMLA(by element)命令では、BX1サイクルにおいて、第2オペランドの上位ビット群D2Hが右シフトされ、第2オペランドの上位と下位の両方に上位ビット群D2Hが保持される。BX1サイクルの後、X1-X4サイクルにおいて、FMLA命令と同様に積和演算が実行される。なお、FMLA(by element)命令では、第2オペランドの上位ビット群と下位ビット群とのいずれを乗算に使用するかを指定可能である。
【0028】
図3は、図1のプロセッサ100が図2に示す積和演算命令を実行するときのパイプラインの動作の例を示す。実行例(1)では、RSEは、複数のFMLA(by element)命令を繰り返し発行する。プロセッサ100は、FMLA(by element)命令を1サイクルずつずらしながら、PサイクルからUサイクルまでの9個のステージを重複することなく実行する。これにより、プロセッサ100は、サイクル毎に1つのFMLA(by element)命令を完了することができる。4つのFMLA(by element)命令は、12サイクル掛けて実行される。例えば、サイクルはクロックサイクルである。
【0029】
実行例(2)では、RSEは、複数のFMLA命令を繰り返し発行する。プロセッサ100は、FMLA命令を1サイクルずつずらしながら、PサイクルからUサイクルまでの8個のステージを重複することなく実行する。これにより、プロセッサ100は、サイクル毎に1つのFMLA命令を完了することができる。4つのFMLA命令は、11サイクル掛けて実行される。
【0030】
図4は、他のプロセッサの要部の一例を示す。図1と同様の要素については同じ符号を付し、詳細な説明は省略する。図4では、FMLA(by element)命令を実行する浮動小数点パイプラインの例が示される。図4に示すプロセッサ110は、FMLA(by element)命令を第1フローと第2フローとに分けて実行する。第1フローは、シフト演算器SFT1により第2オペランドの上位ビット群D2Hをシフトする前処理のフローであり、シフト処理はX1サイクルで実行される。し、第2フローで実行する。
【0031】
第2フローは、第1フローのシフト処理結果を使用して積和演算を実行するフローであり、FMLA命令を実行するフローである。なお、図4は、FMLA(by element)命令の実行時に第1フローから第2フローへのシフト処理結果の伝搬が最短のタイミングで実行される例を示している。このため、第1フローのシフト演算器SFT1の出力が、第2フローのオペランドレジスタOPRGに直接接続されている。
【0032】
第1フローの実行と第2フローの実行との間が空く場合、第1フローのシフト演算の結果は、リザルトレジスタRRを介してレジスタFPRに書き込まれる。この場合、第2フローは、レジスタFPRからのデータRD-DTを使用して積和演算を実行する。
【0033】
図5は、図4のプロセッサ110が図2に示す積和演算命令を実行するときのパイプラインの動作の例を示す。
【0034】
実行例(1)では、RSEは、FMLA(by element)命令の第1フローと第2フローとを交互に繰り返し発行する。図4のプロセッサ110は、FMLA(by element)命令を2つのフローに分割して実行するため、浮動小数点パイプラインを2回実行することになり、1つのFMLA(by element)命令の完了は2サイクルに1回になる。
【0035】
このため、IPCが図3に比べて悪化し、通常のFMLA命令の半分になる。また、プロセッサ110は、4つのFMLA(by element)命令を、図3より3サイクル多い15サイクル掛けて実行する。
【0036】
換言すれば、図1のプロセッサ100は、4つのFMLA(by element)命令の実行サイクルを、図4のプロセッサ110に比べて3サイクル短縮することができる。また、図1のプロセッサ100は、FMLA(by element)命令を1つのフローを使用して、IPCを悪化させることなく1サイクル毎に実行することができる。例えば、ディープラーニング等の計算処理において、多くのFMLA(by element)命令が実行されるほど、計算時間の短縮効果は大きくなる。
【0037】
実行例(2)では、RSEは、複数のFMLA命令を繰り返し発行する。プロセッサ110がFMLA命令を実行するときのパイプラインの動作は、プロセッサ100がFMLA命令を実行するときのパイプラインの動作(図3の実行例(2))と同じである。
【0038】
図6は、さらなる他のプロセッサの要部の一例を示す。図1と同様の要素については同じ符号を付し、詳細な説明は省略する。図6に示すプロセッサ120は、FMLA(by element)命令とFMLA命令とで共通に使用する浮動小数点パイプラインを有する。すなわち、プロセッサ120は、FMLA(by element)命令とFMLA命令とを1つのフローを使用して実行する。
【0039】
プロセッサ120は、リザベーションステーションRSEの出力に直列に接続されたフリップフロップFF11、レジスタFPR、オペランドレジスタOPRG、シフト演算器SFT1、レジスタR1、FMA演算器およびリザルトレジスタRRを有する。
【0040】
プロセッサ120は、FMLA(by element)命令を実行する場合、シフト処理するオペランドデータに対応するイネーブル信号ENBを有効にし、他のオペランドデータに対応するイネーブル信号ENBを無効にする。そして、プロセッサ120は、X1サイクルでシフト処理(前処理)を実行し、X2-X5サイクルで積和演算を実行する。
【0041】
プロセッサ120は、FMLA命令を実行する場合、全てのオペランドデータのシフト処理をイネーブル信号ENBにより無効にする。この場合、シフト演算器SFT1は、シフト処理(前処理)を実行しないが、オペランドデータをレジスタR1に伝搬するため、X1サイクルを消費する。このため、FMLA命令の実行に掛かるサイクル数は、FMLA(by element)命令の実行に掛かるサイクル数と同じになる。
【0042】
図7は、図6のプロセッサが図2に示す積和演算命令を実行するときのパイプラインの動作の例を示す。実行例(1)では、RSEは、図3の実行例(1)と同様に、複数のFMLA(by element)命令を繰り返し発行する。プロセッサ120は、シフト処理するオペランドに対応するイネーブル信号ENBを有効(例えば、ハイレベルH)に設定する。実行例(1)では、FMLA(by element)命令が1つのフローにより実行されるため、IPCの悪化は抑止される。
【0043】
実行例(2)では、RSEは、複数のFMLA命令を繰り返し発行する。プロセッサ120は、全てのオペランドに対応するイネーブル信号ENBを無効(例えば、ロウレベルL)に設定する。なお、FMLA命令では、シフト演算器SFT1は、X1サイクルでオペランドデータを通過させるため、1つのFMLA命令の実行に掛かるサイクル数である演算レイテンシは、図3の実行例(2)より1サイクル多い9サイクルになる。シフト処理を実行しないX1サイクルは、括弧を付している。このように、図7では、FMLA(by element)命令が1つのフローにより実行されるため、IPCの悪化は抑止されるが、FMLA命令の実行レイテンシが増加するため、FMLA命令の実行性能が低下する。
【0044】
以上、この実施形態では、演算実行部20のパイプラインは、FMLA(by element)命令の実行時にシフト演算器SFT1によるシフト処理を実行するBXサイクルを挿入し、FMLA命令の実行時にBXサイクルを挿入しない。これにより、1つのパイプラインを使用してFMLA(by element)命令とFMLA命令とをそれぞれ1つのフローで実行することができ、1サイクル毎に完了することができる。また、FMLA命令の実行時にBXサイクルが挿入されないため、FMLA命令の実行レイテンシの増加を抑制することができ、FMLA命令の実行性能の低下を抑制することができる。この結果、前処理を実行しないFMLA命令の演算レイテンシの増加を抑制しつつ、前処理を実行するFMLA(by element)命令の処理性能を向上することができる。
【0045】
図8は、別の実施形態におけるプロセッサの一例を示す。図8では、プロセッサのコア部分が示される。図8に示すプロセッサ100は、命令キャッシュ11、命令バッファ12、命令デコーダ13、リザベーションステーション14(RSE)、リザベーションステーション15(RSA:Reservation Station for Address)、演算実行部20およびロードストア部30を有する。以下では、リザベーションステーション14、15は、それぞれRSE、RSAとも称される。
【0046】
演算実行部20は、レジスタ21(FPR)、レジスタ22(GPR:General Purpose Register)、オペランドレジスタ23(OPRG)、リザルトレジスタ24(RR)、浮動小数点演算器25およびアドレス生成演算器26を有する。以下では、レジスタ21、22、オペランドレジスタ23およびリザルトレジスタ24は、それぞれレジスタFPR、レジスタGPR、オペランドレジスタOPRGおよびリザルトレジスタRRとも称される。
【0047】
命令キャッシュ11は、演算命令およびメモリアクセス命令等の各種命令を保持する。命令バッファ12は、命令キャッシュ11から読み出される命令を蓄積し、蓄積した命令を命令デコーダ13に順次出力する。命令デコーダ13は、命令バッファ12から受ける命令を解釈するデコード処理を実行し、演算実行部に演算を実行させる命令を示す命令コードICDと、演算の実行に使用されるレジスタを示すレジスタ番号FPRN、GPRNを生成する。命令デコーダ13は、生成した命令コードICDが浮動小数点演算命令の場合、命令コードICDとレジスタ番号FPRNとをRSEに出力する。命令デコーダ13は、生成した命令コードICDがメモリアクセス命令の場合、命令コードICDとレジスタ番号GPRNとをRSAに出力する。
【0048】
RSEは、演算命令を蓄積し、蓄積した演算命令を実行可能な順にアウトオブオーダで演算実行部20Aに投機的に発行する。RSEの出力は、レジスタFPRと浮動小数点演算器25とに接続される。そして、RSEは、浮動小数点演算命令を実行するため命令コードICDを浮動小数点演算器25に出力し、レジスタ番号FPRNをレジスタFPRに出力する。
【0049】
RSAは、ロード命令またはストア命令などのメモリアクセス命令を蓄積し、蓄積した演算命令を実行可能な順にアウトオブオーダで演算実行部20Aに投機的に発行する。メモリアクセス命令を蓄積するRSAの出力は、レジスタGPRとアドレス生成演算器26に接続される。そして、RSAは、メモリアクセス命令を実行するための命令コードICDをアドレス生成演算器26に出力し、レジスタ番号GPRNをレジスタGPRに出力する。
【0050】
なお、RSEは、図示しない固定小数点演算器とレジスタGPRとに接続されてもよい。また、RSEおよびRSAの代わりに、RSEおよびRSAの機能を統合したリザベーションステーションが設けられてもよい。
【0051】
メモリアクセス命令をRSAから受けたアドレス生成演算器26は、レジスタGPRを参照してレジスタGPRからデータGDTを読み出し、読み出したデータGDTの加算処理等を行うことでアクセスアドレスを生成する。アドレス生成演算器26は、生成したアクセスアドレスをロードストア部30に出力する。
【0052】
ロードストア部30は、アドレス生成演算器26から受けるアクセスアドレスをロードストアキュー31に蓄積し、蓄積したアクセスアドレスを順次使用してデータキャッシュ32にアクセスする。メモリアクセス命令がロード命令の場合、データキャッシュ32からロードデータLDTが読み出され、演算実行部20Aに出力される。ロードデータLDTは、浮動小数点数データの場合、レジスタFPRに書き込まれ、固定小数点数データの場合、レジスタGPRに書き込まれる。
【0053】
浮動小数点演算命令をRSEから受けた浮動小数点演算器25は、レジスタFPRを参照してレジスタFPRからデータRD-DTを読み出し、読み出したデータRD-DTをオペランドレジスタOPRGを介して受ける。浮動小数点演算器25は、受けたデータを使用して浮動小数点演算を実行し、演算結果RSLTをリザルトレジスタRRを介してレジスタFPRに書き込む。
【0054】
図9は、図8の演算実行部20Aの要部の一例を示すブロック図である。図1と同様の要素については同じ符号を付し、詳細な説明は省略する。図9においても、クロック信号およびクロック端子の記載は省略する。演算実行部20Aは、レジスタFPR、オペランドレジスタOPRG、シフト演算器SFT1、レジスタSFRG1、セレクタSEL1、FMA演算器、リザルトレジスタRR、アンド回路AND1、AND2、オア回路OR1およびセレクタSEL2を有する。
【0055】
アンド回路AND1、AND2およびオア回路OR1は、2入力である。アンド回路AND1、AND2、オア回路OR1およびFF42は、選択信号BX1-SELを生成する選択信号生成部の一例である。アンド回路AND2およびFF42は、選択信号BX2-SELを持する保持部の一例である。
【0056】
また、演算実行部20Aは、パイプラインのステージを区切る複数のフリップフロップFF(FF11、FF12、FF21、FF22、FF31、FF32、FF41、FF42、FF51等)を有する。以下では、フリップフロップFFは、FF11、FF21等、符号のみで説明される。
【0057】
RSE、FF11、レジスタFPR、オペランドレジスタOPRG、シフト演算器SFT1、レジスタSFRG1、セレクタSEL1、FMA演算器およびリザルトレジスタRRの接続関係は、図1と同じである。
【0058】
FF12、FF21、FF31は、RSEの出力に直列に接続され、バリッド信号VLDを伝搬する。FF31の出力は、セレクタSEL2の入力端子0とアンド回路AND1の入力とに接続される。FF22、FF32は、FF11とアンド回路AND1との間に直列に接続され、シフト有効信号BX1-USEを伝搬する。シフト有効信号BX1-USEは、命令デコーダ13が出力する制御情報の一例である。FF22は、FF11から受けるシフト有効信号BX-USEをシフト有効信号BX1-USEとして出力する。FF32の出力は、シフト演算器SFT1のイネーブル端子ENBとアンド回路AND1の入力とに接続される。
【0059】
アンド回路AND1の出力は、FF41の入力およびオア回路OR1の入力に接続される。FF41の出力は、セレクタSEL2の入力端子1とアンド回路AND2の入力とに接続される。アンド回路AND2の出力はオア回路OR1の入力に接続される。オア回路OR1の出力は、FF42の入力に接続される。FF42は選択信号BX1-SELを出力する。FF42の出力は、セレクタSEL1、SEL2の選択端子およびアンド回路AND2の入力に接続される。
【0060】
セレクタSEL2の出力は、FMA演算器に接続される。セレクタSEL2は、セレクト信号BX1-SELの論理値に応じて、入力端子0で受けるFF31からのバリッド信号VLDまたは入力端子1で受けるFF41からのバリッド信号VLDをFMA演算器に供給する。例えば、セレクタSEL2は、FMLA(by element)命令のX1サイクルでFF41の出力を選択し、FMLA(by element)命令以外の演算命令のX1サイクルでFF31の出力を選択する。
【0061】
RSEは、演算命令とともにハイレベルのバリッド信号VLDを出力する。バリッド信号VLDの伝搬経路は、点線で示される。バリッド信号VLDは、Pサイクル、PTサイクルおよびBサイクルに順次伝搬される。BX1サイクルのバリッド信号VLDは、アンド回路AND1によりシフト有効信号BX1-USEが有効(ハイレベル)のときにハイレベルに設定される。
【0062】
X1サイクルのバリッド信号VLDは、オペランドレジスタOPRGから出力されるデータと同様に、選択信号BX1-SELの論理レベルに応じてセレクタSEL2により選択され、その後、X2-X4サイクルおよびUサイクルに伝搬される。ハイレベルのバリッド信号VLDが通過中のパイプラインステージは、有効であることを示す。
【0063】
Uサイクルに伝搬したバリッド信号VLDは、FF51からバリッド信号RS-VLDとして出力される。そして、リザルトデータRS-DTは、ハイレベルのバリッド信号RS-VLDを使用してレジスタFPRに書き込まれる。
【0064】
RSEからFMLA(by element)命令が出力されたとき、PTサイクルにおいてFF11から有効を示すハイレベルのシフト有効信号BX-USEが1サイクル出力される。シフト有効信号BX-USEは、図8の命令デコーダ13がFMLA(by element)命令をデコードしたときに、命令デコーダ13によりハイレベルに設定され、RSEを介して演算実行部20Aに供給される。
【0065】
FF11から出力されるハイレベルのシフト有効信号BX-USEは、BサイクルでFF22からハイレベルのシフト有効信号BX1-USEとして出力される。シフト有効信号BX1-USEは、BX1サイクルでシフト演算器SFT1のイネーブル端子ENBに供給され、シフト演算器SFT1にシフト演算を実行させる。
【0066】
例えば、シフト演算器SFT1は、ハイレベルのイネーブル信号ENBを受けたときに、オペランドレジスタOPRGから受ける複数のオペランドデータのいずれかのシフト処理を実行する。シフト演算器SFT1は、シフト処理したオペランドデータをシフト処理しない他のオペランドデータとともにレジスタSFRG1に出力する。シフト演算器SFT1は、ロウレベルのイネーブル信号ENBを受けたときにシフト演算を実行せず、オペランドレジスタOPRGから受ける複数のオペランドデータをレジスタSFRG1に伝搬する。
【0067】
また、BX1サイクルにおいて、FF32から出力されるハイレベルのシフト有効信号BX1-USEは、ハイレベルのバリッド信号VLDを受けるアンド回路AND1を通過してFF42にラッチされる。FF42は、X1サイクルにおいて、ラッチしたハイレベルのシフト有効信号BX1-USEを、ハイレベルの選択信号BX1-SELとして出力する。
【0068】
セレクタSEL1は、X1サイクルにおいて、ハイレベルの選択信号BX1-SELに応じてレジスタSFRG1の出力を選択し、シフト演算器SFT1によりシフト処理されたオペランドデータを含むデータをFMA演算器に伝搬する。セレクタSEL2は、X1サイクルにおいて、ハイレベルの選択信号BX1-SELに応じてFF41の出力を選択し、アンド回路AND1から出力されるハイレベルのバリッド信号VLDをFMA演算器に伝搬する。
【0069】
そして、X1-X4サイクルにおいてFMLA(by element)命令の積和演算が実行され、実行結果がリザルトレジスタRRに格納される。FF42から出力されるハイレベルの選択信号BX1-SELは、アンド回路AND2の入力に帰還されるため、バリッド信号VLDのハイレベルが継続される間、FF42は、ハイレベルの選択信号BX1-SELを出力し続ける。
【0070】
これにより、FMLA(by element)命令の後に前処理を実行しない演算命令が発行される場合にも、オペランドレジスタOPRGから出力されるデータをシフト演算器SFT1を通る経路を介してFMA演算器に供給することができる。この結果、図10で説明するように、FMLA(by element)命令の後続命令のX1サイクルでの衝突を抑止することができる。
【0071】
シフト有効信号BX-USE、BX1-USEは、FMLA(by element)命令が発行されない場合、ロウレベルに設定される。このため、例えば、FMLA(by element)命令の後続命令としてFMLA命令が発行される場合、後続命令のBX1サイクルにおいて、シフト演算器SFT1のイネーブル端子ENBは、FF32からロウレベルのシフト有効信号BX1-USEを受ける。
【0072】
これにより、オペランドレジスタOPRGから受ける後続命令のデータをシフト処理することなくレジスタSFRG1に出力することができる。例えば、FMLA(by element)命令の後続のFMLA命令で使用するデータがシフト処理されることを抑止することができ、プロセッサ100Aの誤動作を抑止することができる。
【0073】
また、RSEから演算実行部20Aへの演算命令の発行が途切れた場合、すなわち、RSEが演算命令を発行しないサイクルでは、バリッド信号VLDはロウレベルに設定され、ロウレベルのバリッド信号VLDは、パイプラインに順次伝搬される。ロウレベルのバリッド信号がBX1サイクルまで伝搬されたとき、アンド回路AND1の出力がロウレベルになり、X1サイクルでFF41の出力がロウレベルになる。
【0074】
FF41から出力されるバリッド信号VLDのロウレベルへの変化によりアンド回路AND2の出力がハイレベルからロウレベルに変化し、FF42は、選択信号BX1-SELをロウレベルに変化させる。これにより、セレクタSEL1、SEL2は、入力端子0を選択する。このため、バリッド信号VLDがロウレベルに変化した後に発行されたFMLA命令のデータを、シフト演算器SFT1を通さずにFMA演算器に供給することができ、FMLA命令を最小限のサイクル数で実行することができる。
【0075】
図10は、図9の演算実行部20Aが図2に示す積和演算命令を実行するときのパイプラインの動作の例を示す。実行例(1)では、RSEは、FMLA(by element)命令とFMLA命令とを順次発行する。図9に示すようにFF42とAND2による選択信号BX1-SELの帰還ループを設けることで、前処理が実行されない後続のFMLA命令にもBX1サイクルを追加することができる。前処理を実行しないBX1サイクルは、括弧を付している。これにより、FMLA命令のX1-X4、Uサイクルの各々をFMLA(by element)命令のX1-X4、Uサイクルの各々に対して1サイクルずつ後ろにずらすことができ、FMA演算器の実行サイクルの衝突を回避することができる。
【0076】
また、シフト演算器SFT1は、FMLA命令の実行時にロウレベルのイネーブル信号ENBを受ける。このため、FMLA命令のオペランドデータが、BX1サイクルの追加によりシフト演算器SFT1を通る経路を介してFMA演算器に供給される場合にも、前処理の実行を抑止することができる。この結果、プロセッサ100Aを正常に動作させることができる。
【0077】
実行例(1)のかぎ括弧内に示す動作は、図9においてFF42とAND2による選択信号BX1-SELの帰還ループがない場合の動作を示す。帰還ループがない場合、FMLA(by element)命令の後続のFMLA命令の実行時にBX1サイクルが挿入されず、セレクタSEL1は、オペランドレジスタOPRGからのデータを選択する。
【0078】
この場合、太枠で示すように、FMLA(by element)命令とFMLA命令とのX1-X4、Uサイクルの各々が重複し、FMA演算器の実行サイクルが衝突してしまう。実際には、セレクタSEL1は、ロウレベルの選択信号BX1-SELを受けてオペランドレジスタOPRGからのデータを選択するため、FMLA(by element)命令の積和演算は実行されない。そして、FMLA(by element)命令のUサイクルにFMLA命令の積和演算結果が出力されてしまう。
【0079】
図11は、図9の演算実行部20Aが図2に示す積和演算命令を実行するときのパイプラインの動作の別の例を示す。図3と同様の動作については、詳細な説明は省略する。実行例(2)および実行例(3)は、それぞれ図3の実行例(1)および実行例(2)と同じである。
【0080】
実行例(4)では、RSEは、FMLA(by element)命令とFMLA命令とを交互に発行する。図10で説明したように、FMLA(by element)命令に続くFMLA命令のパイプラインには、前処理を実行しないBX1サイクルが追加されるため、FMLA(by element)命令とFMLA命令とのX1-X4、Uサイクルの各々の重複を抑止することができる。これにより、パイプラインを止めることなく命令を連続して実行することができる。
【0081】
実行例(5)では、RSEは、FMLA(by element)命令と2つのFMLA命令とを順次発行した後、1サイクル空けてFMLA命令を発行する。FMLA(by element)命令に続く2つのFMLA命令のパイプラインには、実行例(1)および実行例(4)と同様に、前処理を実行しないBX1サイクルが追加されるため、X1-X4、Uサイクルの各々の重複を抑止することができる。
【0082】
空きサイクルでRSEが演算命令を発行しない場合、図示は省略するが、サイクル4からサイクル7でPサイクル、PTサイクル、BサイクルおよびX1サイクルのバリッド信号VLDが順次ロウレベルに設定される。X1サイクル(FF41)のバリッド信号VLDのロウレベルがアンド回路AND2の入力に供給され、FF42は、サイクル8で選択信号BX1-SELをロウレベルに変化させる。すなわち、FF42とAND2による選択信号BX1-SELの帰還ループが切れる。
【0083】
このため、サイクル8において、セレクタSEL1は、ロウレベルの選択信号BX1-SELを受け、オペランドレジスタOPRGの出力を選択し、空きサイクルの後に発行されたFMLA命令のX1サイクルが実行される。実行例(5)に示すように、FMLA(by element)命令の実行後に空きサイクルが挿入された場合、FF42とAND2による選択信号BX1-SELの帰還ループを切ることができる。このため、その後に発行されるFMLA命令のパイプラインを、BX1サイクルを追加することなく実行することができ、演算命令の実行効率の低下を抑制することができる。
【0084】
以上、この実施形態においても上述した実施形態と同様に、前処理を実行しないFMLA命令の演算レイテンシの増加を抑制しつつ、前処理を実行するFMLA(by element)命令の処理性能を向上することができる。
【0085】
さらに、この実施形態では、FMLA(by element)命令に続いてFMLA命令が実行される場合、前処理が実行されないFMLA命令にもBX1サイクルを追加することができる。これにより、FMLA命令のX1-X4、Uサイクルの各々をFMLA(by element)命令のX1-X4、Uサイクルの各々に対して1サイクルずつ後ろにずらすことができ、FMA演算器の実行サイクルの衝突を回避することができる。
【0086】
FMLA命令にBX1サイクルが追加され、FMLA命令のオペランドデータがシフト演算器SFT1を介してFMA演算器に供給される場合にも、オペランドデータがシフト処理されることを抑止することができる。この結果、プロセッサ100Aは、FMLA(by element)命令に続くFMLA命令を正常に実行することができ、プロセッサ100Aを正常に動作させることができる。以上より、1つのパイプラインを使用してFMLA(by element)命令とFMLA命令とを混在して実行する場合にも、パイプラインを止めることなく演算命令を連続して実行することができる。
【0087】
また、FMLA(by element)命令の実行後に空きサイクルが挿入された場合、FF42とAND2による選択信号BX1-SELの帰還ループを切ることができる。このため、その後に発行されるFMLA命令のパイプラインを、BX1サイクルを追加することなく実行することができ、演算命令の実行効率の低下を抑制することができる。
【0088】
図12および図13は、別の実施形態のプロセッサにおける演算実行部の要部の一例を示す。図1および図9と同様の要素については、同じ符号を付し、詳細な説明は省略する。図12および図13に示す演算実行部20Bが搭載されるプロセッサの構成は、図8と同様である。すなわち、演算実行部20Bは、図8の命令デコーダ13がデコードした演算命令を実行する。
【0089】
図12および図13においても、クロック信号およびクロック端子の記載は省略する。図12および図13は、P、PT、B、BX1、BX2、X1-X4、Uサイクルを含むパイプラインを示す。信号の流れを分かりやすくするために、BX1サイクルとX1サイクル(または、BX1サイクルとBX2サイクル)とを区切るレジスタSFRG1、FF41、FF42、FF43は、図12および図13の両方に重複して記載している。
【0090】
図12および図13に示す演算実行部20Bのパイプラインは、BX1サイクルの後にBX2サイクルを追加している。これにより、演算実行部20Bは、FMLA命令の前処理として、BX1サイクルを実行するFMLA(BX1)命令と、BX1サイクルおよびBX2サイクルを実行するFMLA(BX2)命令とが実行可能である。FMLA(BX1)命令およびFMLA(BX2)命令は、複数種の第2演算命令の一例である。
【0091】
例えば、プロセッサの動作周波数またはPVT(プロセス、電圧、温度)条件によってFMLA(by element)命令等の前処理が1サイクルで足りない場合がある。あるいは、より複雑な前処理を実行する演算命令においても、前処理が複数サイクル掛かる場合がある。したがって、前処理は、1サイクルおよび複数サイクルの両方に対応できることが好ましい。
【0092】
例えば、FMLA(BX1)命令は、レジスタFPRから読み出された128ビット幅の1つのオペランドデータの上位の64ビット[127:64]を下位の64ビット[63:0]に移動する前処理を1サイクルで実行する。FMLA(BX1)命令は、図2に示したFMLA(by element)命令と同様に、シフト演算器SFT1を使用して前処理を実行する。
【0093】
例えば、FMLA(BX2)命令は、レジスタFPRから読み出された512ビット幅の1つのオペランドデータの最上位の64ビット[511:448]を最下位の64ビット[63:0]に移動する前処理を2サイクルで実行する。FMLA(BX2)命令は、2つのシフト演算器SFT1、SFT2を順次使用して前処理を実行する。
【0094】
FMLA(BX1)命令の実行時のパイプラインは、FMLA(by element)命令と同様に、P、PT、B、BX1、X1、X2、X3、X4、Uサイクルとなる。FMLA(BX2)命令の実行時のパイプラインは、P、PT、B、BX1、BX2、X1、X2、X3、X4、Uサイクルとなる。なお、前処理を実行しないFMLA命令の実行時のパイプラインは、P、PT、B、X1、X2、X3、X4、Uサイクルとなる。
【0095】
演算実行部20Bは、図9の演算実行部20AにFF23、FF33、アンド回路AND3、FF43、シフト演算器SFT2、レジスタSFRG2、アンド回路AND4、AND5、オア回路OR3、FF44およびFF45を追加している。アンド回路AND3、AND4、AND5およびオア回路OR3は、2入力である。また、演算実行部20Bは、図9の演算実行部20Aの2入力のオア回路OR1およびセレクタSEL1、SEL2の代わりに、3入力のオア回路OR2およびセレクタSEL3、SEL4を有する。
【0096】
アンド回路AND1、AND2、AND3、オア回路OR3およびFF42は、選択信号BX1-SELを生成する選択信号生成部の一例である。アンド回路AND2、AND3およびFF42は、選択信号BX1-SELを保持する保持部の一例である。アンド回路AND4、AND5、オア回路OR3およびFF45は、選択信号BX2-SELを生成する選択信号生成部の一例である。アンド回路AND5およびFF45は、選択信号BX2-SELを保持する保持部の一例である。シフト演算器SFT1およびレジスタSFRG1と、シフト演算器SFT2およびレジスタSFRG2とのそれぞれは、前処理段の一例である。
【0097】
FF23、FF33、FF43は、FF11とアンド回路AND4との間に直列に接続される。FF23は、FF1からのシフト有効信号BX-USEをシフト有効信号BX2-USEとしてFF33に出力する。そして、FF33およびFF43は、シフト有効信号BX2-USEを伝搬する。シフト有効信号BX2-USEは、命令デコーダ13が出力する制御情報の一例である。FF33の出力は、シフト演算器SFT1のイネーブル端子ENBにも接続される。オア回路OR2の入力は、アンド回路AND1、AND2、AND3の出力に接続され、オア回路OR2の出力は、FF42の入力に接続される。
【0098】
シフト演算器SFT1のイネーブル端子ENBは、FMLA(BX1)命令のBX1サイクルでFF32からハイレベルのシフト有効信号BX1-USEを受ける。シフト演算器SFT1のイネーブル端子ENBは、FMLA(BX2)命令のBX1サイクルでFF33からのハイレベルのシフト有効信号BX2-USEを受ける。また、シフト演算器SFT1のイネーブル端子ENBは、FMLA(BX1)命令およびFMLA(BX2)命令が実行されない場合、FF32、FF33のそれぞれからロウレベルのシフト有効信号BX1-USE、BX2-USEとを受ける。
【0099】
アンド回路AND4の入力は、FF41の出力とFF43の出力とに接続される。アンド回路AND4の出力は、FF44の入力およびオア回路OR3の入力に接続される。FF44の出力は、セレクタSEL4の入力端子2とアンド回路AND5の入力とに接続される。セレクタSEL4の出力は、FMA演算器に接続される。
【0100】
アンド回路AND5の入力は、FF44の出力とFF45の出力とに接続される。アンド回路AND5の出力は、オア回路OR3の入力に接続される。オア回路OR3の出力は、FF45の入力に接続される。FF45の出力は、アンド回路3の入力とアンド回路5の入力とセレクタSEL3の選択端子に接続される。FF45は選択信号BX2-SELを出力する。
【0101】
シフト演算器SFT2およびレジスタSFRG2は、レジスタSFRG1とセレクタSEL3との間に直列に接続される。シフト演算器SFT2は、イネーブル端子ENBで受けるシフト有効信号BX2-USEに応じて、シフト演算するデータを選択し、シフト処理を実行する。シフト演算器SFT2は、レジスタSFRG1に保持されたデータの前処理を実行する前処理部の一例である。例えば、シフト演算器SFT2のイネーブル端子ENBは、演算に使用するオペランドを識別するコードのビット数だけ設けられてもよく、演算に使用するオペランドの数だけ設けられてもよい。
【0102】
セレクタSEL3は、選択端子で受けるセレクト信号BX1-SEL、BX2-SELの論理値に応じて、入力端子0-2で受けるデータのいずれかをFMA演算器に伝搬する。セレクタSEL3は、セレクト信号BX1-SEL、BX2-SELが論理値1、論理値0の場合、レジスタSFRG1の出力を選択する。セレクタSEL3は、セレクト信号BX1-SEL、BX2-SELが論理値0、論理値1の場合、レジスタSFRG2の出力を選択する。セレクタSEL3は、セレクト信号BX1-SEL、BX2-SELがともに論理値0の場合、オペランドレジスタOPRGの出力を選択する。
【0103】
換言すれば、セレクタSEL3は、FMLA(BX1)命令が実行される場合、X1サイクルでレジスタSFRG1の出力を選択する。セレクタSEL3は、FMLA(BX2)命令が実行される場合、X1サイクルでレジスタSFRG2の出力を選択する。セレクタSEL3は、FMLA(BX1)命令およびFMLA(BX2)命令以外の演算命令が実行される場合、X1サイクルでオペランドレジスタOPRGの出力を選択する。
【0104】
セレクタSEL4は、選択信号BX1-SEL、BX2-SELの論理値に応じて、入力端子0-2で受けるバリッド信号VLDのいずれかをFMA演算器に伝搬する。セレクタSEL4は、選択信号BX1-SEL、BX2-SELが論理値1、論理値0の場合、FF41の出力を選択する。セレクタSEL3は、選択信号BX1-SEL、BX2-SELが論理値0、論理値1の場合、FF44の出力を選択する。セレクタSEL3は、選択信号BX1-SEL、BX2-SELがともに論理値0の場合、FF31の出力を選択する。
【0105】
換言すれば、セレクタSEL4は、FMLA(BX1)命令が実行される場合、X1サイクルでFF41の出力を選択する。セレクタSEL4は、FMLA(BX2)命令が実行される場合、X1サイクルでFF44の出力を選択する。セレクタSEL4は、FMLA(BX1)命令およびFMLA(BX2)命令以外の演算命令が実行される場合、X1サイクルでFF31の出力を選択する。
【0106】
命令デコーダ13(図8)は、FMLA(BX1)命令をデコードしたとき、デコードしたFMLA(BX1)命令とともにハイレベルのシフト有効信号BX1-USEをRSEに出力する。そして、RSEからFMLA(BX1)命令が出力されたとき、PTサイクルにおいてFF11からハイレベルのシフト有効信号BX1-USEが1サイクル出力される。このとき、シフト有効信号BX2-USEはロウレベルに設定される。シフト有効信号BX1-USEは、FMLA(BX1)命令の前処理が1サイクルで実行されることを示す。
【0107】
命令デコーダ13は、FMLA(BX2)命令をデコードしたとき、デコードしたFMLA(BX2)命令とともにハイレベルのシフト有効信号BX2-USEを、RSEに出力する。そして、RSEからFMLA(BX2)命令が出力されたとき、PTサイクルにおいてFF11からハイレベルのシフト有効信号BX2-USEが1サイクル出力される。このとき、シフト有効信号BX1-USEはロウレベルに設定される。シフト有効信号BX2-USEは、FMLA(BX2)命令の前処理が2サイクルで実行されることを示す。
【0108】
なお、命令デコーダ13は、FMLA(BX1)命令およびFMLA(BX2)命令以外の命令をデコードしたとき、デコードした命令とともにロウレベルのシフト有効信号BX1-USE、BX2-USEをRSEに出力する。このため、FMLA(BX1)命令およびFMLA(BX2)命令以外の演算命令のPTサイクルでは、シフト有効信号BX1-USE、BX2-USEは、ともにロウレベルに設定される。
【0109】
例えば、RSEがFMLA(BX1)命令およびFMLA(BX2)命令以外の演算命令を単独で発行したとき、演算実行部20Bは、シフト演算器SFT1、SFT2を動作させず、選択信号BX1-SEL、BX2-SELをロウレベルに設定する。このため、X1サイクルにおいて、セレクタSEL3は、オペランドレジスタOPRGの出力を選択し、セレクタSEL4は、FF31からのバリッド信号VLDを選択する。そして、前処理が実行されることなくFMA演算器による積和演算が実行される。
【0110】
RSEがFMLA(BX1)命令を発行したとき、BX1サイクルでシフト有効信号BX1-USEがハイレベルになり、シフト演算器SFT1が有効になる。シフト演算器SFT1は、オペランドレジスタOPRGから出力されるオペランドデータのいずれかのシフト処理をBX1サイクルで実行し、シフト処理結果をレジスタSFRG1に格納する。
【0111】
ハイレベルのシフト有効信号BX1-USEをアンド回路AND1およびオア回路OR2を介して受けたFF42は、X1サイクルでハイレベルの選択信号BX1-SELを出力する。これにより、レジスタSFRG1に保持されたデータがセレクタSEL3により選択され、FF41からのバリッド信号VLDがセレクタSEL4により選択される。そして、セレクタSEL3が選択したデータを使用してFMA演算器により積和演算が実行される。
【0112】
FF42から出力されるハイレベルの選択信号BX1-SELは、アンド回路AND2の入力に帰還されるため、ハイレベルのバリッド信号VLDが継続する間、FF42は、ハイレベルの選択信号BX1-SELを出力し続ける。これにより、FMLA(BX1)命令の後に前処理を実行しない演算命令が発行される場合にも、オペランドレジスタOPRGから出力されるデータをシフト演算器SFT1を通る経路を介してFMA演算器に供給することができる。
【0113】
また、RSEは、演算命令を発行しない場合、バリッド信号VLDをロウレベルに設定する。FF41がX1サイクルでロウレベルのバリッド信号VLDを出力する場合、アンド回路AND2の出力は、選択信号BX1-SELのレベルにかかわりなくロウレベルに設定される。これにより、FF42とAND2による選択信号BX1-SELの帰還ループが存在する場合に帰還ループが切れ、選択信号BX1-SELは、ハイレベルからロウレベルに変化する。
【0114】
RSEがFMLA(BX2)命令を発行したとき、BX1サイクルでシフト有効信号BX2-USEがハイレベルになり、FF43は、BX2サイクルでハイレベルの選択信号BX2-SELを出力する。これにより、BX1サイクルでシフト演算器SFT1が有効になり、BX2サイクルでシフト演算器SFT2が有効になる。
【0115】
シフト演算器SFT1は、FMLA(BX1)命令の実行時と同様に、BX1サイクルでシフト処理を実行し、シフト処理結果をレジスタSFRG1に格納する。シフト演算器SFT2は、レジスタSFRG1に格納されたシフト処理結果をBX2サイクルでシフト処理し、シフト処理結果をレジスタSFRG2に格納する。
【0116】
ハイレベルのシフト有効信号BX2-USEをアンド回路AND4およびオア回路OR3を介して受けたFF45は、X1サイクルでハイレベルの選択信号BX2-SELを出力する。これにより、レジスタSFRG2に保持されたデータがセレクタSEL3により選択され、FF44からのバリッド信号VLDがセレクタSEL4により選択される。そして、セレクタSEL3が選択したデータを使用してFMA演算器により積和演算が実行される。
【0117】
FF45から出力されるハイレベルの選択信号BX2-SELは、アンド回路AND3の入力に帰還されるため、ハイレベルのバリッド信号VLDが継続する間、FF42は、ハイレベルの選択信号BX1-SELを出力し続ける。また、FF45から出力されるハイレベルの選択信号BX2-SELは、アンド回路AND5の入力に帰還されるため、ハイレベルのバリッド信号VLDが継続する間、FF45は、ハイレベルの選択信号BX2-SELを出力し続ける。これにより、FMLA(BX2)命令の後に前処理を実行しない演算命令が発行される場合にも、オペランドレジスタOPRGから出力されるデータをシフト演算器SFT1、SFT2を通る経路を介してFMA演算器に供給することができる。
【0118】
また、演算命令を発行しないRSEがバリッド信号VLDをロウレベルに設定する場合、FF41がX1サイクルでロウレベルのバリッド信号VLDを出力し、アンド回路AND2の出力は、選択信号BX1-SELのレベルにかかわりなくロウレベルに設定される。これにより、FF42とAND2による選択信号BX1-SELの帰還ループが存在する場合に帰還ループが切れ、選択信号BX1-SELは、ハイレベルからロウレベルに変化する。
【0119】
同様に、RSEが、バリッド信号VLDをロウレベルに設定する場合、FF44がX1サイクルでロウレベルのバリッド信号VLDを出力し、アンド回路AND5の出力は、選択信号BX2-SELのレベルにかかわりなくロウレベルに設定される。これにより、FF45とAND5による選択信号BX2-SELの帰還ループが存在する場合に帰還ループが切れ、選択信号BX2-SELは、ハイレベルからロウレベルに変化する。
【0120】
図14は、図12および図13の演算実行部20Bが積和演算命令を実行するときのパイプラインの動作の例を示す。実行例(1)では、RSEは、FMLA(BX1)命令とFMLA命令とを順次発行する。実行例(1)の動作は、FMLA(by element)命令の代わりにFMLA(BX1)命令が実行されることを除き、図10の動作と同様である。
【0121】
実行例(1)の上側に示す動作は、FMLA命令のBX1サイクルでシフト演算器SFT1の動作が無効にされ、選択信号BX1-SELの帰還ループによりFMLA命令のX1サイクルでレジスタSFRG1の出力が選択されることで実現される。
【0122】
実行例(1)では、シフト処理を実行しないBX1サイクルをFMLA命令のパイプライン処理に挿入することで、FMLA(BX1)命令のX1-X4、Uサイクルと、後続のFMLA命令のX1-X4、Uサイクルとが衝突することを抑止することができる。
【0123】
これに対して、シフト処理を実行しないBX1サイクルをFMLA命令のパイプライン処理に挿入しない場合、実行例(1)のかぎ括弧内に太枠で示すように、最初のFMLA(BX1)命令および後続のFMLA命令のX1-X4、Uサイクルが衝突してしまう。
【0124】
実行例(2)では、RSEは、FMLA(BX2)命令の発行から2サイクル後にFMLA命令を発行する。すなわち、FMLA(BX2)命令の発行とFMLA命令の発行との間に空きサイクルが存在する。FMLA(BX2)命令が実行される場合、ハイレベルのシフト有効信号BX2-USEがパイプライン内に順次伝搬される。
【0125】
ハイレベルのシフト有効信号BX2-USEは、BX1サイクルでシフト演算器SFT1のイネーブル端子ENBに出力され、BX2サイクルでシフト演算器SFT2のイネーブル端子ENBに出力される。これにより、オペランドレジスタOPRGから出力されるオペランドの1つは、シフト演算器SFT1、SFT2により順次シフト処理される。
【0126】
そして、セレクタSEL3は、X1サイクルにロウレベルの選択信号BX1-SELとハイレベルの選択信号BX2-SELとを受け、シフト演算器SFT1、SFT2によりシフト処理されたデータを保持するレジスタSFRG2の出力を選択する。FMA演算器は、シフト処理したデータを使用してX1サイクルからX4サイクルで積和演算を実行する。
【0127】
実行例(2)では、シフト処理を実行しないBX1サイクルをFMLA命令のパイプライン処理に挿入することで、FMLA(BX2)命令のX1-X4、Uサイクルと、後続のFMLA命令のX1-X4、Uサイクルとが衝突することを抑止することができる。これに対して、シフト処理を実行しないBX1サイクルをFMLA命令のパイプライン処理に挿入しない場合、実行例(2)のかぎ括弧内に太枠で示すように、最初のFMLA(BX2)命令および後続のFMLA命令のX1-X4、Uサイクルが衝突してしまう。
【0128】
図15は、図12および図13の演算実行部20Bが積和演算命令を実行するときのパイプラインの動作の別の例を示す。実行例(3)では、RSEは、FMLA(BX2)命令とFMLA命令(BX1)とを順次発行する。実行例(4)では、RSEは、2つのFMLA(BX2)命令とFMLA命令とを順次発行する。
【0129】
実行例(3)において、FMLA(BX2)命令のパイプラインでは、BX1サイクルでハイレベルのシフト有効信号BX1-USEによりシフト演算器SFT1が動作し、オペランドレジスタOPRGからのオペランドデータの1つのシフト処理が実行される。シフト処理後のデータは、他のオペランドデータとともにレジスタSFRG1に格納される。
【0130】
また、BX2サイクルにおいてハイレベルのシフト有効信号BX2-USEによりシフト演算器SFT2が動作し、レジスタSFRG1からシフト処理済みのデータのさらなるシフト処理が実行される。シフト処理後のデータは、他のオペランドデータとともにレジスタSFRG2に格納される。サイクルBX2では、FF42とアンド回路AND2による帰還ループにより選択信号BX1-SELがハイレベルに維持される。
【0131】
FF42は、BX2サイクルで選択信号BX1-SELをハイレベルに設定する。FF45は、X1サイクルで選択信号BX2-SELをハイレベルに設定する。このため、セレクタSEL3は、X1サイクルでレジスタSFRG2に保持されたデータをFMA演算器に出力する。そして、X1-X4サイクルでFMA演算器は、積和演算を実行する。選択信号BX1-SELは、FF42とアンド回路AND2による帰還ループによりハイレベルに維持され、選択信号BX2-SELは、FF45とアンド回路AND5による帰還ループによりハイレベルに維持される。
【0132】
FMLA(BX2)命令に続いて実行されるFMLA(BX1)命令のパイプラインでは、BX1サイクルにおいてハイレベルのシフト有効信号BX1-USEによりシフト演算器SFT1が動作し、オペランドデータの1つのシフト処理が実行される。シフト処理されたオペランドデータは、他のオペランドデータとともにレジスタSFRG1に格納される。
【0133】
RSEは、FMLA(BX1)命令の発行時、ロウレベルのシフト有効信号BX2-USEを出力し、FF43は、サイクルBX2においてロウレベルのシフト有効信号BX2-USEを出力する。シフト演算器SFT2は、ロウレベルのシフト有効信号BX2-USEを受け、シフト処理(前処理)を実行せず、レジスタSFRG1からのデータをそのままレジスタSFRG2に格納する。シフト処理を実行しないBX2サイクルは、括弧を付している。
【0134】
選択信号BX1-SELは、ハイレベルに設定されており、FF42とアンド回路AND2による帰還ループにより選択信号BX1-SELは、ハイレベルに維持されている。このため、セレクタSEL3は、サイクルX1において、レジスタSFRG1の出力を選択してFMA演算器に伝搬する。そして、X1-X4サイクルでFMA演算器は、積和演算を実行する。
【0135】
実行例(3)では、シフト処理を実行しないBX2サイクルをFMLA(BX1)命令のパイプライン処理に挿入し、FF42とアンド回路AND2による選択信号BX1-SELの帰還ループを生成する。これにより、FMLA(BX2)命令のX1-X4、Uサイクルと、後続のFMLA(BX1)命令のX1-X4、Uサイクルとが衝突することを抑止することができる。
【0136】
これに対して、FF42とアンド回路AND2による帰還ループを生成しない場合、実行例(3)のかぎ括弧内に太枠で示すように、FMLA(BX2)命令および後続のFMLA(BX1)命令のX1-X4、Uサイクルが衝突してしまう。
【0137】
実行例(4)において、最初のFMLA命令(BX2)と2番目のFMLA命令(BX2)のパイプラインは、PサイクルからUサイクルまでの10個のステージを1サイクルずつずらしながら重複することなく実行する。最初のFMLA命令(BX2)のパイプラインの動作により、FF42とAND2による選択信号BX1-SELの帰還ループが生成され、選択信号BX1-SELはハイレベルに維持される。また、FF45とアンド回路AND5による選択信号BX2-SELの帰還ループが生成され、選択信号BX2-SELはハイレベルに維持される。
【0138】
次に、FMLA命令のパイプラインにおいて、シフト演算器SFT1は、BX1サイクルにおいてロウレベルのシフト有効信号BX1-USE、BX2-USEを受けるため、シフト処理(前処理)を実行しない。シフト演算器SFT1は、オペランドレジスタOPRGからのデータをそのままレジスタSFRG1に格納する。シフト演算器SFT2は、BX2サイクルにおいてロウレベルのシフト有効信号BX2-USEを受けるため、シフト処理(前処理)を実行しない。シフト演算器SFT2は、シフト処理を実行していないレジスタSFRG1からのデータをレジスタSFRG2に格納する。シフト処理を実行しないBX1サイクルおよびBX2サイクルは、括弧を付している。
【0139】
セレクタSEL3は、サイクルX1において、ハイレベルのシフト有効信号BX1-USE、BX2-USEを受け、レジスタSFRG2の出力を選択してFMA演算器に伝搬する。そして、X1-X4サイクルでFMA演算器は、レジスタSFRG2から伝搬されたデータを使用して積和演算を実行する。
【0140】
実行例(4)では、シフト処理を実行しないBX1サイクルとBX2サイクルとをFMLA命令のパイプライン処理に挿入し、選択信号BX1-SELの帰還ループと選択信号BX2-SELの帰還ループとを生成する。これにより、FMLA(BX2)命令のX1-X4、Uサイクルと、後続のFMLA命令のX1-X4、Uサイクルとが衝突することを抑止することができる。
【0141】
これに対して、選択信号BX1-SEL、BX2-SELの帰還ループを生成しない場合のタイミングは、実行例(4)のかぎ括弧内の上側のタイミング図で示される。実行例(4)のかぎ括弧内の上側のタイミング図では、太枠で示すように、最初のFMLA(BX2)命令のX1-X4、Uサイクルと、後続のFMLA命令のX1-X4、Uサイクルとが衝突してしまう。
【0142】
また、選択信号BX2-SELの帰還ループを生成しない場合のタイミングは、実行例(4)のかぎ括弧内の下側のタイミング図で示される。実行例(4)のかぎ括弧内の下側のタイミング図では、太枠で示すように、2番目のFMLA(BX2)命令のX1-X4、Uサイクルと、後続のFMLA命令のX1-X4、Uサイクルとが衝突してしまう。
【0143】
図16は、図12および図13の演算実行部20Bが積和演算命令を実行するときのパイプラインの動作のさらなる別の例を示す。図15の実行例(4)と同様の動作については詳細な説明は省略する。
【0144】
実行例(5)は、図15の実行例(4)の動作の後に、1つの空きサイクルを挟んでFMLA命令が実行されるときの動作の例を示す。RSEが演算命令を発行しない空きサイクルでは、図示は省略するが、各サイクルのバリッド信号VLDが順次ロウレベルに設定される。そして、BX2サイクル(FF41)のバリッド信号VLDのロウレベルがアンド回路AND2の入力に供給される。
【0145】
しかしながら、X1サイクル(FF44)のバリッド信号のハイレベルがアンド回路AND3の入力に供給されている。このため、FF42とアンド回路AND3による帰還ループは、サイクル9まで切れず、選択信号BX1-SELは、サイクル8までハイレベルに維持される。一方、FF45は、サイクル8で選択信号BX2-SELをロウレベルに変化させるため、FF45とAND5による選択信号BX2-SELの帰還ループは、サイクル8で切れる。
【0146】
このため、サイクル8において、セレクタSEL3は、ハイレベルの選択信号BX1-SELとロウレベルの選択信号BX2-SELとを受け、レジスタSFRG1の出力を選択する。そして、空きサイクルの後に発行されたFMLA命令のBX1サイクル(シフト処理なし)が実行される。
【0147】
BX1サイクルの挿入により、空きサイクルの前のFMLA命令のX1-X4、Uサイクルと空きサイクルの後のFMLA命令のX1-X4、Uサイクルとが衝突することを抑止することができる。また、空きサイクルの後のFMLA命令にはBX2サイクルが挿入されないため、演算命令の実行効率の低下を抑制することができる。
【0148】
実行例(6)は、図15の実行例(4)の動作の後に、2つの空きサイクルを挟んでFMLA命令が実行されるときの動作の例を示す。1つめの空きサイクルまでの動作は、実行例(5)と同じである。サイクル8で選択信号BX2-SELがロウレベルに変化するため、FF45とAND5による選択信号BX2-SELの帰還ループが切れる。
【0149】
実行例(6)では、2つ目の空きサイクルのサイクル9で、FF42は、アンド回路AND3を介して選択信号BX2-SELのロウレベルを受け、選択信号BX1-SELをロウレベルに変化させる。このより、FF42とアンド回路AND3による選択信号BX1-SELの帰還ループが切れる。そして、サイクル9において、セレクタSEL3は、ロウレベルの選択信号BX1-SEL、BX2-SELを受け、オペランドレジスタOPRGの出力を選択する。そして、サイクル9において、空きサイクルの後に発行されたFMLA命令のX1サイクルが実行される。
【0150】
実行例(6)では、FF45とAND5による選択信号BX2-SELの帰還ループと、FF42とアンド回路AND3による帰還ループとを順次切っていく。これにより、空きサイクルを2つ以上挿入後のFMLA命令のパイプラインにBX1サイクルおよびBX2サイクルが挿入されることを抑止することができ、演算命令の実行効率の低下を抑制することができる。
【0151】
以上、この実施形態においても上述した実施形態と同様に、前処理を実行しないFMLA命令の演算レイテンシの増加を抑制しつつ、前処理を実行するFMLA(BX1)命令およびFMLA(BX2)命令の処理性能を向上することができる。FMLA(BX1)命令に続いてFMLA命令が実行される場合、前処理が実行されないFMLA命令にもBX1サイクルを追加することができ、FMA演算器の実行サイクルの衝突を回避することができる。
【0152】
FMLA命令にBX1サイクルが追加され、オペランドデータがシフト演算器SFT1に供給される場合にも、オペランドデータがシフト処理されることを抑止することができる。この結果、この実施形態のプロセッサは、FMLA(BX1)命令に続くFMLA命令を正常に実行することができ、プロセッサを正常に動作させることができる。
【0153】
さらに、この実施形態では、FMLA(BX2)命令に続いてFMLA命令が実行される場合、前処理が実行されないFMLA命令にもBX1サイクルおよびBX2サイクルを追加することができ、FMA演算器の実行サイクルの衝突を回避することができる。FMLA(BX2)命令に続いてFMLA命令(BX1)が実行される場合、シフト演算器SFT2による前処理が実行されないFMLA命令(BX1)にもBX2サイクルを追加することができ、FMA演算器の実行サイクルの衝突を回避することができる。
【0154】
また、FMLA(BX2)命令の実行後に空きサイクルが挿入された場合に、選択信号BX2-SELの帰還ループおよび選択信号BX1-SELの帰還ループを順次切ることができる。このため、その後に発行されるFMLA命令のパイプラインを、BX2サイクルを追加することなく、またはBX1サイクルとBX2サイクルとを追加することなく実行することができ、演算命令の実行効率の低下を抑制することができる。
【0155】
なお、図12および図13に示した演算実行部20Bでは、積和演算前に前処理を実行するサイクルを1サイクルまたは2サイクル挿入可能にする例が示された。しかしながら、3サイクル以上の前処理の実行サイクルが積和演算前に挿入可能な演算実行部が設けられてもよい。この場合にも、1サイクルまたは複数サイクルの前処理を実行する演算命令が混在し、かつ連続して実行される場合にも、パイプラインを止めることなく命令を連続して実行することができる。
【0156】
上述した実施形態では、前処理としてオペランドデータのシフト処理を実行するFMLA(by element)命令を実行する演算実行部20、20Aの例が説明された。また、上述した実施形態では、前処理としてオペランドデータのシフト処理を実行するFMLA(BX1)命令またはFMLA(BX2)命令を実行する演算実行部20Bの例が示された。しかしながら、前処理は、シフト処理に限定されず、演算器は、浮動小数点積和演算器に限定されない。
【0157】
例えば、ARM社の命令セットアーキテクチャに含まれるADDP(vector)命令は、同じオペランドの隣り合った要素を加算する演算命令である。ADDP(vector)命令を通常の加算器を利用して実行する場合、加算の実行前に、加算されるデータを第1オペランドと第2オペランドとに入れる前処理が必要となる。前処理は、偶数要素と奇数要素を第1オペランドと第2オペランドとに分けて入れる処理である。
【0158】
例えば、ADDP(vector)命令を実行する前処理部と加算器とを、図9のシフト演算器SFT1およびFMA演算器の代わりに設けることが可能である。これにより、ADDP(vector)命令用の専用の加算器を設けることなく、通常の加算命令を実行する加算器を利用することができる。
【0159】
なお、上述したプロセッサの処理性能の向上により、プロセッサが搭載されるサーバ等のシステムの処理性能を向上することができ、科学技術計算、ディープラーニングまたは各種シミュレーション等に掛かる時間を短縮することができる。
【0160】
以上の詳細な説明により、実施形態の特徴点および利点は明らかになるであろう。これは、特許請求の範囲がその精神および権利範囲を逸脱しない範囲で前述のような実施形態の特徴点および利点にまで及ぶことを意図するものである。また、当該技術分野において通常の知識を有する者であれば、あらゆる改良および変更に容易に想到できるはずである。したがって、発明性を有する実施形態の範囲を前述したものに限定する意図はなく、実施形態に開示された範囲に含まれる適当な改良物および均等物に拠ることも可能である。
【符号の説明】
【0161】
11 命令キャッシュ
12 命令バッファ
13 命令デコーダ
14、15 リザベーションステーション
20、20A、20B 演算実行部
21、22 レジスタ
23 オペランドレジスタ
24 リザルトレジスタ
25 浮動小数点演算器
26 アドレス生成演算器
30 ロードストア部
31 ロードストアキュー
32 データキャッシュ
100、100A プロセッサ
BX1-SEL、BX2-SEL 選択信号
BX-USE、BX1-USE、BX2-USE シフト有効信号
ENB イネーブル端子
FMA 浮動小数点演算器
FPR、GPR レジスタ
OPRG オペランドレジスタ
RR リザルトレジスタ
RSA、RSE リザベーションステーション
SFT1、SFT2 シフト演算器
SFRG1、SFRG2 レジスタ
SEL1、SEL2 セレクタ
VLD バリッド信号
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16