JP2019215694A - 演算処理装置および演算処理装置の制御方法 - Google Patents

演算処理装置および演算処理装置の制御方法 Download PDF

Info

Publication number
JP2019215694A
JP2019215694A JP2018112443A JP2018112443A JP2019215694A JP 2019215694 A JP2019215694 A JP 2019215694A JP 2018112443 A JP2018112443 A JP 2018112443A JP 2018112443 A JP2018112443 A JP 2018112443A JP 2019215694 A JP2019215694 A JP 2019215694A
Authority
JP
Japan
Prior art keywords
instruction
floating
register
point
control unit
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2018112443A
Other languages
English (en)
Other versions
JP7043985B2 (ja
Inventor
秋月 康伸
Yasunobu Akizuki
康伸 秋月
敦史 伏島
Atsushi Fushijima
敦史 伏島
則人 五明
Norihito Gomyo
則人 五明
亮平 岡崎
Ryohei Okazaki
亮平 岡崎
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2018112443A priority Critical patent/JP7043985B2/ja
Priority to US16/416,335 priority patent/US10824431B2/en
Publication of JP2019215694A publication Critical patent/JP2019215694A/ja
Application granted granted Critical
Publication of JP7043985B2 publication Critical patent/JP7043985B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding
    • G06F9/384Register renaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/3013Organisation of register space, e.g. banked or distributed register file according to data content, e.g. floating-point registers, address registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30181Instruction operation extension or modification
    • G06F9/30196Instruction operation extension or modification using decoder, e.g. decoder per instruction set, adaptable or programmable decoders
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3858Result writeback, i.e. updating the architectural state or memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling
    • G06F9/3865Recovery, e.g. branch miss-prediction, exception handling using deferred exception handling, e.g. exception flags
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5022Mechanisms to release resources
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions

Abstract

【課題】浮動小数点レジスタのリネーミングレジスタ不足の発生を減少させる、浮動小数点演算命令の演算時に例外を検出しても命令完了時に例外処理を発生しないことが設定された演算処理装置を提供する。【解決手段】浮動小数点レジスタはアーキテクチャレジスタまたはリネーミングレジスタのいずれかに割り当てられる複数のエントリを含み、演算実行制御部は浮動小数点演算命令の発行と演算終了前に浮動小数点演算の終了報告を出力し、命令完了制御部は浮動小数点演算終了報告によりリネーミングレジスタの解放を指示する。命令デコーダはリネーミングレジスタ解放指示の受信により、浮動小数点演算の実行結果を格納するアーキテクチャレジスタに割り当てられた第1のエントリをリネーミングレジスタに割り当て、演算においてリネーミングレジスタに割り当てられた第2のエントリを実行結果を格納するアーキテクチャレジスタに割り当てる。【選択図】図2

Description

本発明は、演算処理装置および演算処理装置の制御方法に関する。
プログラムの命令を機械語プログラムにおける命令の並び順に関わらず、実行可能な命令から実行するアウト・オブ・オーダー(out-of-order)実行することが可能な演算処理装置において、アーキテクチャレジスタ(汎用レジスタ(GPR:General Purpose Register)、浮動小数点レジスタ(FPR:Floating Point Register))とリネーミングレジスタ(Renaming Register)とが分離してレジスタを構成している場合がある。その場合、当該演算処理装置は、アウト・オブ・オーダー実行した演算命令の実行の結果をリネーミングレジスタに格納した後に、機械語プログラムにおける命令の並び順であるイン・オーダーで命令の完了を行う。当該装置は、命令の完了時に、リネーミングレジスタから実行の結果を読み出して、アーキテクチャレジスタに格納する。
転送命令を検出すると、ソースレジスタに関するリネーミングレジスタをデスティネーションレジスタに再割り当てすることで、転送命令の実行を行うことなく、命令の処理を高速に行う技術が知られている(例えば、特許文献1参照)。また、ハードウェアを複雑にすることなく、かつ柔軟性のあるレジスタ・リネーム処理を行う技術が知られている(例えば、特許文献2参照)。
特表2002−520729号公報 特開2002−175181号公報
HPC(High Performance Computing)系のアプリケーションでは、プログラムを高速に動作させるために、浮動小数点演算命令の演算時に例外(例えば、ゼロ除算、オーバーフロー、またはアンダーフロー等)を検出しても命令完了時に例外処理を発生しないことを、ソフトウェアから設定することが可能な場合がある。例えば、ARM(登録商標)アーキテクチャの場合は、FPCR(Floating-point Control Register)に定義されている各例外処理の発生をマスクすることが可能である。この浮動小数点演算命令の例外を全てマスクする設定がされているときは、浮動小数点レジスタを使用する命令が多く実行されることが予想される。
プログラムの命令をアウト・オブ・オーダー実行することが可能な演算処理装置において、浮動小数点レジスタに格納する命令は、浮動小数点のリネーミングレジスタを割り当てる。リネーミングレジスタは、命令デコード時に割り当てて、命令完了時に解放するために、実行の時間が長いとリネーミングレジスタを割り当てている時間が長くなる。実行の時間が長くなる原因としては、命令間のデータの依存関係がある場合などがある。このために、浮動小数点のリネーミングレジスタを多く使用するプログラムの場合は、浮動小数点のリネーミングレジスタのエントリ数が不足することが発生する。リネーミングレジスタの数が不足すると、新たにリネーミングレジスタを割り当てることができないために、命令デコードが停止する。命令デコードが停止すると、命令実行部に命令が供給されないために、実行の効率が低下し、性能低下に繋がる。
1つの側面において、本発明は、浮動小数点レジスタのリネーミングレジスタの不足の発生を減少させることを目的とする。
実施の形態の演算処理装置は、 浮動小数点演算命令の演算時に例外を検出しても命令完了時に例外処理を発生しないことが設定される。前記演算処理装置は、演算器と、浮動小数点レジスタと、演算実行制御部と、命令完了制御部と、命令デコーダと、を有する。
前記演算器は、浮動小数点演算を行う。
前記浮動小数点レジスタは、複数のエントリを含み、前記複数のエントリのそれぞれはアーキテクチャレジスタまたはリネーミングレジスタのいずれかに割り当てられる。
前記演算実行制御部は、前記浮動小数点演算命令を発行するとともに、前記演算器による前記浮動小数点演算が終了する前に前記浮動小数点演算の終了報告を出力する。
前記命令完了制御部は、前記終了報告を受信して、命令の実行を完了すると、前記リネーミングレジスタの解放を指示する。
前記命令デコーダは、前記指示を受信するとともに、前記浮動小数点演算の実行結果を格納するアーキテクチャレジスタに割り当てられた第1のエントリをリネーミングレジスタに割り当てる。前記命令デコーダは、前記浮動小数点演算においてリネーミングレジスタに割り当てられた第2のエントリを前記浮動小数点演算の実行結果を格納するアーキテクチャレジスタに割り当てる。
実施の形態によれば、浮動小数点レジスタのリネーミングレジスタの不足の発生を減少させることができる。
比較例のCPUのコアの構成図である。 比較例の浮動小数点演算命令の動作を示す図である。 比較例の浮動小数点演算命令の完了の動作のフローチャートである。 実施の形態のシステムの構成図である。 実施の形態のコアの構成図である。 浮動小数点物理レジスタの構成の例を示す図である。 浮動小数点物理レジスタのアーキテクチャレジスタとリネーミングレジスタの切り替えを示す図である。 実施の形態の浮動小数点演算命令の動作を示す図である。 命令完了制御部の詳細な構成図である。 実施の形態の浮動小数点演算命令の完了の動作のフローチャートである。 浮動小数点演算時に例外を検出しても例外処理を発生しないことが設定されているときの命令完了の動作のタイミングチャートである。 浮動小数点演算時に例外を検出したら例外処理を発生することが設定されているときの命令完了の動作のタイミングチャートである。 FPSR更新回路の詳細な構成図である。 FPSRの更新の動作のタイミングチャートである。 FPSRを読み出す命令の動作のタイミングチャートである。
以下、図面を参照しながら実施の形態について説明する。
最初に比較例について説明し、その後、実施の形態について説明する。
図1は、比較例のCPU(Central Processing Unit)のコアの構成図である。
CPU(不図示)は、複数のコアを含み、図1は複数のコアのうちの1つのコア11の構成を示す。
コア11は、命令デコーダ21、演算実行制御部22、命令完了制御部23、浮動小数点演算器24、浮動小数点リネーミングレジスタ25、浮動小数点レジスタ26、FPCR(Floating-point Control Register)27、FPSR(Floating-point Status Register)28、およびPC(Program Counter)29を含む。
演算実行制御部22は浮動小数点演算命令のオペランドデータが揃った命令を浮動小数点演算器24に発行する。発行された命令は、オペランドデータを浮動小数点リネーミングレジスタ25や浮動小数点レジスタ26から読み出して浮動小数点演算器24に入力する。
浮動小数点演算器24は演算の実行を開始して、演算の実行が終了すると、演算実行制御部22は、命令完了制御部23に演算命令の実行が終了したことを報告する。浮動小数点演算器24は演算の実行の終了時に、演算の結果を浮動小数点リネーミングレジスタ25に格納する。また、演算の例外を検出したときは、浮動小数点演算器24は命令完了制御部23に演算例外を検出したことを報告する。
命令完了制御部24は、プログラムにおける命令の並び順に命令の完了を行う。命令完了制御部24は、浮動小数点演算命令が完了すると、浮動小数点リネーミングレジスタ25から演算の結果を読み出して、浮動小数点レジスタ26に格納する。
図2は、比較例の浮動小数点演算命令の動作を示す図である。
図2において、時間軸は左から右方向である。FPCR27には、浮動小数点演算命令の演算時に例外を検出しても命令完了時に例外処理を発生しないことが設定されている。
命令デコーダ21は、浮動小数点演算命令をデコードし、浮動小数点リネーミングレジスタ25のうちのあるエントリをリーミングレジスタに割り当てる。
演算実行制御部22は、浮動小数点演算命令を発行し、浮動小数点演算器24は、浮動小数点演算命令の実行を開始する。
浮動小数点演算命令の実行が終了すると、演算実行制御部22は、命令完了制御部23に実行終了報告を送る。また、浮動小数点演算器24は、浮動小数点演算命令の実行結果をリーミングレジスタに格納する。
命令完了制御部23は、実行終了報告を受信し、命令完了制御を行う。命令完了制御において、命令完了制御部23は、命令デコーダ21にリネーミングレジスタの解放を指示する。
命令完了制御部23は、FPSR28、PC29の更新を行う。また、命令完了制御部23は、リーミングレジスタから浮動小数点演算命令の実行結果を読み出して、浮動小数点レジスタ26に格納する(浮動小数点レジスタの更新)。また、命令デコーダ21は、リネーミングレジスタの解放の指示を受信すると、上記の割り当てたリーミングレジスタを解放する。
図3は、比較例の浮動小数点演算の完了の動作のフローチャートである。
演算実行制御部22は、浮動小数点演算命令を浮動小数点演算器24に発行する。浮動小数点演算器24は、浮動小数点演算命令の実行を開始し(ステップS51)、演算実行制御部22は、浮動小数点演算命令の実行が終了時(ステップS52)に、演算実行制御部22から命令完了制御部23に演算の終了報告を送る(ステップS53)。
命令完了制御部23は、命令の完了対象であるかをチェックして(ステップS54)、完了対象である場合(ステップS54:Yes)は、命令完了制御を行う(ステップS55)。プログラムにおける命令の並び順に、完了を行うために、完了対象でない場合があり(ステップS54:No)、その場合は、完了対象になるまで、待つ処理を行う。命令完了制御部23は、命令完了すると、資源(FPSR28、PC29)の更新や浮動小数点リネーミングレジスタ25の解放処理を行う。
浮動小数点リネーミングレジスタ25の不足を解消する方法として、浮動小数点リネーミングレジスタ25のエントリ数の増加や浮動小数点演算命令の実行レイテンシを短縮することが考えられる。しかしながら、浮動小数点リネーミングレジスタ25のエントリ数の増加は、増加する回路が多いために、CPUの面積への影響が発生する可能性がある。CPUの面積の増加は、コストの増加に繋がる。また、命令の実行レイテンシの短縮は、周波数の低下に繋がる可能性が発生するために、性能低下に繋がる。
図4は、実施の形態のシステムの構成図である。
システム100は、ノード101−i(i=1〜n)を有する。各ノード101−iは、少なくとも1つ以上の他のノード101−iと接続しており、互いに通信可能である。
ノード101−1は、CPU110、メモリ201、およびI/O(Input/Output)301を含む。尚、ノード101−2〜101−nの構成は、ノード101−1の構成と同様であるため説明は省略する。
CPU110は、コア111−j(j=1〜m)、MAC(Memory Access Controller)112、LL(Last Level)キャッシュ113、およびインターコネクト部114を含む。CPU110は、演算処理装置の一例である。
コア111−jは、各種演算処理を行う。
MAC112は、メモリ201の読み書きの制御を行う。
LLキャッシュ113は、コア111−jが利用可能な共用のキャッシュである。
インターコネクト部114は、ノード101−2〜101−nのうち1つ以上のノードと接続し、データの送受信を行う。
メモリ201は、ノード101−1が使用するデータやプログラム等を記憶する。CPU110は、メモリ201に記憶されているデータを読み書きして、各種処理を実行する。
I/O301は、ノード101−1の内部または外部の装置(不図示)と接続するインターフェースである。
図5は、実施の形態のコアの構成図である。
図5では、コア111−1の構成を示す。尚、コア111−2〜111−mの構成は、コア111−1の構成と同様であるので、説明は省略する。
コア111−1は、命令フェッチアドレス生成器115、1次命令キャッシュ116、命令バッファ117、命令デコーダ121、メモリアクセス実行制御部131、オペランドアドレス生成器132、1次データキャッシュ133、演算実行制御部141、固定小数点演算器142、浮動小数点演算器143、固定小数点物理レジスタ151、浮動小数点物理レジスタ161、命令完了制御部171、FPCR181、FPSR182、PC183、分岐実行制御部191、および分岐予測機構192を有する。
固定小数点物理レジスタ151および浮動小数点物理レジスタ161は、アーキテクチャレジスタとリネーミングレジスタで構成する物理レジスタ方式である。つまり、固定小数点物理レジスタ151および浮動小数点物理レジスタ161は、リネーミングレジスタとアーキテクチャレジスタが混在しているレジスタである。物理レジスタ方式は、実行の結果を物理レジスタに格納すると、命令の完了時に実行の結果の移動が発生しない。
命令フェッチを行うために、命令フェッチアドレス生成器115は選択した命令アドレスに対して命令フェッチリクエストを発行し、命令バッファ117は1次命令キャッシュ116からフェッチしてきた命令を格納する。命令バッファ117はプログラムにおける命令の並び順に命令デコーダ121に命令の供給を行い、命令デコーダ121はプログラムにおける命令の並び順に命令のデコード処理を行い、命令を発行する。
命令デコーダ21は、デコードする命令の種類に従って、命令の実行を制御するメモリアクセス実行制御部131、固定小数点演算と浮動小数点演算を制御する演算実行制御部141、分岐実行制御部191に必要なエントリを作成する。命令デコーダ121は、全てのデコードされた命令に対して、命令の完了を制御する命令完了制御部171に含まれるコミットスタックエントリ(CSE)にエントリを作成する。また、実行結果を格納する固定小数点物理レジスタ151と浮動小数点物理レジスタ161は、それぞれアーキテクチャレジスタとリネーミングレジスタで構成される。固定小数点物理レジスタ151のリネーミングレジスタは、固定小数点リネーミングレジスタと表記する場合がある。浮動小数点物理レジスタ161のリネーミングレジスタは、浮動小数点リネーミングレジスタと表記する場合がある。
デコードされた命令がメモリアクセス実行制御部131、演算実行制御部141にエントリを作成する場合には、命令デコーダ21は、固定小数点物理レジスタ151のリネーミングレジスタと浮動小数点物理レジスタ161のリネーミングレジスタにレジスタを割り当てるレジスタリネーミング処理を行う。演算実行制御部141で実行に必要なソースオペランドが揃った命令から実行することで、アウト・オブ・オーダー実行を行うことが可能となる。実行結果を命令デコード時に割り当てられた固定小数点リネーミングレジスタと浮動小数点リネーミングレジスタに格納する。演算実行制御部141から、アウト・オブ・オーダーで実行された命令は、命令完了制御部171の制御によりプログラムにおける命令の並び順に命令の完了を行い、完了した命令に対してのみ、PCなどのプログラマブルな資源の更新を行う。また、リネーミングレジスタとアーキテクチャレジスタが混在した物理レジスタ方式において、命令でコーダ121は、演算結果を格納したリネーミングレジスタとして扱っている物理レジスタのアドレスをアーキテクチャレジスタに変更する。
命令完了制御部141は、CSEのエントリの最も古い順から命令完了を行うことで、プログラム順に命令を完了することが可能となる。命令完了制御部141は、1サイクルで同時に完了することが可能な最大数の命令をCSEから選択する。命令完了制御部141は、選択したエントリを命令の完了対象のエントリとして、完了制御を行う。命令デコード時に、CSEに登録するエントリ番号(IID:Instruction ID)が与えられる。IIDは、演算実行制御部141に送られ、命令の実行が終了したときに、IIDが示すCSEのエントリ番号に実行の終了報告を格納することで、実行が終了した命令を特定することが可能となる。
FPCR181には、浮動小数点演算命令の演算時に例外を検出したときに、命令完了時に演算例外を発生するかしないかを示す情報が設定される。FPCR181には、複数の例外が定義されており、各例外に対して、命令完了時に、例外を発生するか否かをソフトウェアが設定することが可能である。
実施の形態では、FPCR181で設定可能な例外を全て、発生しないと設定されているとする。ただし、FPCR181の設定にかかわらず、浮動小数点演算時に演算例外を検出したことを専用のアーキテクチャレジスタであるFPSR182に格納する。
浮動小数点演算命令の演算時に例外を検出した場合は、浮動小数点演算命令の実行が終了したときに、浮動小数点演算器143から命令完了制御部171に、演算の例外を検出したことを報告する。また、演算実行制御部141から命令完了制御部171に演算の終了報告とIIDを送るタイミングから固定サイクル後に、浮動小数点演算器142から例外を検出したことが命令完了制御部171に送られてくる。このために、命令完了制御部171は、浮動小数点演算命令が例外を検出したことをCSEのエントリに格納することが可能になる。そして、命令完了制御部171は、命令完了時に、CSEのエントリに演算例外を検出したことを読み出してFPSR182を更新する。FPSR182の更新は、命令完了時になるために、命令完了制御部171は、プログラムカウンタなどと同じタイミングで更新する。
図6は、浮動小数点物理レジスタの構成の例を示す図である。
浮動小数点物理レジスタ161は、浮動小数点数を格納する。浮動小数点物理レジスタ161は、複数のエントリを含み、各エントリには、各エントリを識別する物理レジスタ番号が割り当てられている。
浮動小数点物理レジスタ161は、アーキテクチャレジスタとリネーミングレジスタを含む。浮動小数点物理レジスタ161の各エントリは、アーキテクチャレジスタまたはリネーミングレジスタのいずれかに割り当てられる(設定される)。また、エントリに割り当てられるアーキテクチャレジスタまたはリネーミングレジスタは、命令デコーダ121により適宜変更可能である。アーキテクチャレジスタは、プログラムから観測することが可能なレジスタである。リネーミングレジスタは、プログラムから観測することができないレジスタで、ハードウェアが命令を実行した結果を格納するレジスタである。
浮動小数点物理レジスタ161のエントリのうち、アーキテクチャレジスタ以外は、リネーミングレジスタとして扱われる。リネーミングレジスタは命令のデコード時に割り当てられ、命令の実行の結果を格納する。リネーミングレジスタは、命令が完了すると、アーキテクチャレジスタになる。更新前にアーキテクチャレジスタとして扱われていた浮動小数点物理レジスタ161のエントリは、更新後にリネーミングレジスタとして扱われる。
命令デコードから発行された浮動小数点演算命令は、演算実行制御部141に登録される。演算実行制御部141は、命令を実行するためのソースオペランドのデータが演算開始タイミングで揃うことを判断したら、命令を発行して演算の実行を開始する。演算の実行は、演算実行制御部141で制御される。
図6では、物理レジスタ番号が0、1、3、77のエントリがリネーミングレジスタ、物理レジスタ番号が2、75,76のエントリがアーキテクチャレジスタとしてそれぞれ設定されている。
図7は、浮動小数点物理レジスタのアーキテクチャレジスタとリネーミングレジスタの切り替えを示す図である。
ここで、浮動小数点物理レジスタ161の物理レジスタ番号がA番のエントリを物理レジスタA番と表記する。
図7の左上側に示す浮動小数点物理レジスタ161において、浮動小数点物理レジスタ161の物理レジスタ番号が24番のエントリ(物理レジスタ24番)が、アーキテクチャレジスタの5番として管理されている(ステップS501)。このときに、命令デコーダ121は、アーキテクチャレジスタの5番を更新する浮動小数点演算命令Aを命令デコードし(ステップS502)、物理レジスタ67番をリネーミングレジスタとして割り当てる(ステップS503)。
図7の左下側に示す浮動小数点物理レジスタ161は、アーキテクチャレジスタとリネーミングレジスタの切り替え後の状態を示している。浮動小数点演算器143での浮動小数点演算命令Aの実行中に、浮動小数点演算命令Aが命令完了すると、命令デコーダ121は物理レジスタ67番をアーキテクチャレジスタの5番に割り当てる(ステップS504)。一方、アーキテクチャレジスタの5番であった物理レジスタ24番は、リネーミングレジスタとして、解放される(ステップS505)。物理レジスタ24番は、新たにリネーミングレジスタとして割り当てられるまでは、無効なレジスタとして管理される。その後、リネーミングレジスタを使用する命令Bが命令デコードされたときに、物理レジスタ24番は、リネーミングレジスタとして割り当てられる(ステップS506)。命令Aの完了後、命令Aの実行結果は、物理レジスタ67番に格納される(ステップS507)。
比較例において、アーキテクチャレジスタとリネーミングレジスタの切り替えを行う場合、命令Aの完了後に命令Aの実行結果が物理レジスタ67番に格納された後に、物理レジスタ67番はリネーミングレジスタからアーキテクチャレジスタの5番に割り当てられ、物理レジスタ24番は、リネーミングレジスタとして、解放される。
一方、実施の形態では、命令Aの実行中(すなわち命令Aの実行の終了前)に、命令Aを完了して、アーキテクチャレジスタの5番であった物理レジスタ24番は、リネーミングレジスタとして、解放される。すなわち、実施の形態では、物理レジスタ24番はリネーミングレジスタとして、比較例に比べて早く解放される、それにより、実施の形態では、リネーミングレジスタのエントリ数が不足するのを抑止できる。
図8は、実施の形態の浮動小数点演算命令の動作を示す図である。
図8において、時間軸は左から右方向である。FPCR181には、浮動小数点演算命令の演算時に例外を検出しても命令完了時に例外処理を発生しないことが設定されている。図8では、図7と同様に浮動小数点演算命令によりアーキテクチャレジスタの5番を更新する場合を説明する。浮動小数点物理レジスタ161の物理レジスタ番号が24番のエントリ(物理レジスタ24番)が、アーキテクチャレジスタの5番として管理されているとする。
命令デコーダ121は、浮動小数点演算命令をデコードし、浮動小数点物理レジスタ161のうちの物理レジスタ67番をリネーミングレジスタに割り当てる。
演算実行制御部181は、浮動小数点演算命令を発行し、浮動小数点演算器143は、浮動小数点演算命令の実行を開始する。
浮動小数点演算命令の演算実行制御部181は、浮動小数点演算命令の演算時に例外を検出しても命令完了時に例外処理を発生しない設定のときは、実行する命令が、命令を完了して、アーキテクチャレジスタをリネーミングレジスタとして解放した後に、後続の命令によって当該リネーミングレジスタのエントリに演算結果を先に格納されることがないことが確定したタイミングで、命令完了制御部171に浮動小数点演算命令の実行の終了を報告する。それにより、浮動小数点演算命令の実行の終了を待たずに、命令の完了を行うことを可能とする。このために、演算レイテンシによって、実行の終了を報告するタイミングは異なる。また、最も早い浮動小数点演算命令の実行の終了を報告するタイミングは、実行する浮動小数点演算命令のソースオペランドのデータが確定したタイミングになる。
浮動小数点演算命令の実行が開始されると、演算実行制御部141は、演算の実行の終了を待たずに、命令完了制御部171に実行終了報告を送る。命令完了制御部171は、実行終了報告を受信し、命令の完了対象であるかをチェックする。命令完了制御部171は、完了対象である場合、浮動小数点演算命令の演算時に例外を検出しても命令完了時に例外を発生しない設定のときは、命令完了制御を行う。命令完了制御において、命令完了と判断した場合、命令完了制御部171は、命令デコーダ121にリネーミングレジスタの解放を指示する。また、命令完了制御部171は、PC183の更新を行う。
また、命令完了制御部171は、浮動小数点演算命令の演算例外を発生する設定のときは、浮動小数点演算器から演算例外が送られてくる可能性があるために、演算終了まで命令完了を抑止する制御を行う。命令完了を抑止する期間を経過すると、命令完了制御を行うことで、演算例外を発生する設定のときは、比較例と同じ命令完了の動作になる。
命令デコーダ121は、命令完了制御部171からリネーミングレジスタの解放の指示を受信すると、浮動小数点演算命令において更新対象のアーキテクチャレジスタの5番である物理レジスタ24番をリネーミングレジスタとして解放する。さらに、命令デコーダ121は、リネーミングレジスタに割り当てられた物理レジスタ67番をアーキテクチャレジスタの5番に割り当てる。
浮動小数点演算器143は、浮動小数点演算命令の実行結果を新たにアーキテクチャレジスタの5番に割り当てられた物理レジスタ67番に格納する(浮動小数点物理レジスタ更新)。
浮動小数点演算命令の演算時に例外を検出しても命令完了時に例外を発生しない設定のときは、浮動小数点演算命令の完了時に、演算例外を検出したことをFPSR182に格納する必要ある。浮動小数点演算命令の演算時の例外は、演算処理が終了したときに浮動小数点演算器143が検出して、命令完了制御部171に報告する。この場合、浮動小数点演算命令が完了した後に、浮動小数点演算命令の演算例外が報告されることになるために、命令の完了時に、FPSR182を更新することはできない。このために、命令完了制御部171が浮動小数点演算命令の演算時に例外を検出したことをFPSR182に更新するタイミングを、命令の完了のタイミングより遅くする制御を行う。また、浮動小数点演算命令の演算時に例外を検出したことを格納するFPSRは182、レジスタリネーミング処理を行わないために、FPSR182を読み出す場合は、全ての命令が完了してから読み出し処理を行う。しかし、例外を検出したことを格納したFPSR182の更新のタイミングが命令の完了より遅くなったために、FPSR182を読み出す場合に、FPSR182の更新が完了してから読み出しを開始する制御を行う。
図9は、命令完了制御部の詳細な構成図である。
命令完了制御部171は、CSE172、完了対象命令部173、命令完了判断部174、比較回路175、CSE出力ポインタ176、命令完了抑止部177、およびFPSR更新回路178を有する。
CSE172は、命令デコードされた命令を示す情報をIIDが指すエントリ番号に格納している。CSE172は、CSE出力ポインタ176が指すエントリ番号を先頭にして、1サイクルで同時に完了することが可能な最大数の命令を示す情報を完了対象命令部173に出力する。
演算実行制御部141は、例えば、浮動小数点演算命令の実行の終了を命令完了制御部171に報告するタイミングをソースオペランドのデータが確定したタイミングの次のサイクルにする。命令完了制御部171は、FPCR181に浮動小数点演算時に例外を検出しても命令完了時に例外処理を発生しないことが設定されているとき、演算実行制御部141から演算の終了報告を受け取った命令が完了可能な場合は、最短のタイミングで命令完了制御を行う。
しかし、FPCR181に浮動小数点演算時に例外を検出したら命令完了時に例外処理を発生することが設定されているとき、命令完了可能な場合であったとしても、例外を検出する可能性がある。そのために、命令完了制御部171は、演算命令が終了して、例外が命令完了制御部171に送られてくる可能性があるタイミングまで、命令完了を抑止する制御を行う。
演算実行制御部141は、演算の終了報告時に、IIDと共に、命令完了制御部171に演算命令のレイテンシを示す情報を送り、命令完了制御部171は、命令完了の抑止の判断に使用する。
比較回路175は、命令完了対象のIIDを示すCSE出力ポインタ176の出力と演算実行制御部141から実行の終了報告と共に送られてきたIIDとを比較し、演算命令が、次のサイクルで命令完了の対象のIIDであるかをチェックする。CSE出力ポインタ176と演算実行制御部141からのIIDとが一致する場合、当該IIDは次のサイクルで命令完了の対象のIIDである、比較回路175は、比較結果を完了対象命令部173および命令完了抑止部177に出力する。
完了対象命令部173は、比較回路175の出力(比較結果)に基づいて、次のサイクルで命令完了対象の命令を命令完了判断部174およびFPSR更新回路178に通知する。完了対象命令部173は、比較結果がIIDと一致することを示すとき、次のサイクルで命令完了対象の命令のIIDを命令完了判断部174およびFPSR更新回路178に通知する。
次のサイクルで命令完了対象の場合で、FPCR181に浮動小数点演算時に例外を検出しても命令完了時に例外処理を発生しないことが設定されているときは、命令完了判断部174は、次のサイクルで命令完了制御を行う。命令完了制御において、命令完了判断部174は、命令デコーダ121にリネーミングレジスタの解放を指示する。
一方、命令完了抑止部177は、FPCR181に浮動小数点演算時に例外を検出したら命令完了時に例外処理を発生することが設定されているときは、次のサイクルで命令完了制御を抑止する制御信号を命令完了判断部174に出力する。このとき、この浮動小数点演算命令より前の命令は、命令完了制御を行うことが可能である。また、命令完了抑止部177は、演算実行制御部141から実行の終了報告とIIDと共に送られてきた演算命令のレイテンシによって、命令完了制御を抑止する期間を決定し、当該期間中、命令完了制御を抑止する制御信号を命令完了判断部174に出力し続ける。
図10は、実施の形態の浮動小数点演算命令の完了の動作のフローチャートである。
演算実行制御部141は、浮動小数点演算の実行開始の命令を発行し、浮動小数点演算器143は、浮動小数点演算を開始する(ステップS511)。演算実行制御部141は、浮動小数点演算器143による浮動小数点演算の終了前に、命令完了制御部171に演算の終了報告を送る(ステップS512)。
命令完了制御部171は、演算実行制御部141から送られてきた演算の終了報告を受信し、終了報告された浮動小数点演算の命令が次サイクルで命令完了対象になるかを判定(ステップS513)。詳細には、命令完了制御部171は、演算実行制御部141から受信した演算の命令のIIDと命令完了対象のIIDを示すCSE出力ポインタ176の出力と比較して、終了報告された浮動小数点演算の命令が次サイクルに命令完了対象になるかを判断する。命令完了対象である場合(ステップS513:Yes)、命令完了制御部171は、FPCR181に浮動小数点演算時に例外を検出したら例外処理を発生することが設定されているか判定する(ステップS514)。
FPCR181に浮動小数点演算時に例外を検出しても例外処理を発生しないことが設定されているとき(ステップS514:No)、命令完了制御部171は、次サイクルで命令完了制御を行い、命令を完了する(ステップS517)。命令完了制御において、命令完了制御部171は、命令デコーダ121に、リネーミングレジスタの解放を指示する。命令デコーダ121は、指示を受信すると、リネーミングレジスタを解放する。すなわち、命令デコーダ121は、浮動小数点演算において更新対象のアーキテクチャレジスタとして割り当てられていた浮動小数点物理レジスタ161のエントリをリネーミングレジスタにする。
FPCR181に浮動小数点演算時に例外を検出したら例外処理を発生することが設定されているとき(ステップS514:Yes)、命令完了制御部171は、終了報告を受信してから所定の抑止時間が経過したか判定する(ステップS515)。所定の抑止時間が経過していない場合(ステップS515:No)、命令完了制御部171は、命令完了を抑止する(ステップS516)。すなわち、命令完了制御部171は、浮動小数点演算器143から演算例外が送られてくる場合があるために、演算例外が送られてくる可能性があるタイミングまで、命令完了を抑止する。
演算実行制御部141から演算命令の終了報告と同時に送られてくる演算命令のレイテンシから演算器から命令完了制御部171に演算例外が送られてくる可能性がある期間(タイミング)が確定できる。命令完了制御部171は、演算実行制御部141から送られてきた演算命令のレイテンシを所定の抑止時間として用いる。
命令完了を抑止する所定の抑止時間が経過する(ステップS515:Yes)、すなわち、浮動小数点演算器143から演算例外が送られてくる可能性がある期間が終了すると、命令完了制御部171は、命令完了を行う(ステップS517)。このとき、命令完了制御部171は、浮動小数点演算器143から演算例外が送られてきた場合は、演算例外を発生し、浮動小数点演算器143から演算例外が送られてこなかった場合は、次の命令の完了制御を行う。
図11は、浮動小数点演算時に例外を検出しても例外処理を発生しないことが設定されているときの命令完了の動作のタイミングチャートである。
図11は、上から順に、サイクル、演算実行処理、命令完了処理、演算終了報告、命令完了対象、命令完了抑止、演算例外検出設定を示す。
図11では、浮動小数点演算時に例外を検出しても例外処理を発生しないことが設定されているため、演算例外検出設定と命令完了抑止は、L(Low)となっている。
図11は、浮動小数点演算命令のレイテンシが6サイクルの命令で、演算開始から最短で命令完了するときの動作を示す。X1〜X6(サイクル1〜6)は浮動小数点演算器143による浮動小数点演算の実行を示す。X1が成立すると、演算のオペランドデータが揃ったことになるために、演算実行制御部141はX2(サイクル2)で、演算の終了報告を命令完了制御部171に送る。このときに、演算実行制御部141は、演算の終了報告と同時に、演算命令のIIDと演算レイテンシが6サイクルであることを命令完了制御部171に送る。命令完了制御部171は、演算の終了報告の命令が次サイクルで命令完了対象である場合は、命令完了制御(C:サイクル3)を行い、資源の更新(W:サイクル4)を行う。演算が終了すると、浮動小数点演算器143は、浮動小数点物理レジスタ161の更新(U:サイクル7)を行う。
尚、浮動小数点演算命令より前の命令が完了していないときは、命令完了対象にならない場合あり、この場合は、命令完了制御部171は命令完了対象になるまで待つ。
図12は、浮動小数点演算時に例外を検出したら例外処理を発生することが設定されているときの命令完了の動作のタイミングチャートである。
図12は、上から順に、サイクル、演算実行処理、命令完了処理、演算終了報告、命令完了対象、命令完了抑止、演算例外検出設定を示す。
図12では、浮動小数点演算時に例外を検出したら例外処理を発生することが設定されているため、演算例外検出設定は、H(Hi)となっている。
図12は、浮動小数点演算命令のレイテンシが6サイクルの命令で、演算開始から最短で命令完了するときの動作を示す。演算実行制御部141から命令完了制御部171に送られてくるタイミングと情報は、図11と同様である。命令完了制御部171は、演算の終了報告の命令が次サイクルで命令完了対象である場合は、浮動小数点演算器143から演算の例外が命令完了制御部171に送られてくる可能性がある浮動小数点物理レジスタ161の更新(U:サイクル7)まで命令完了を抑止する制御を行う。すなわち、命令完了抑止部177の出力(命令完了抑止)をHにする。演算命令のレイテンシが6サイクルであるために、命令完了の抑止期間は、5サイクル(サイクル3〜7)になる。命令完了を抑止する期間が終了すると、命令完了制御部171は、命令完了制御(C:サイクル8)を行う。このときに、命令完了制御部171は、浮動小数点演算器143から演算例外が送られてきた場合は、演算例外を検出する。命令完了制御部171は、資源の更新を行う(W:サイクル9)。
図13は、FPSR更新回路の詳細な構成図である。
図13は、浮動小数点演算命令のレイテンシが6サイクルである場合を示す。
FPSR更新回路178は、フリップフロップ1781−k(k=1〜5)および比較回路1782−kを有する。尚、フリップフロップ1781−1〜1781−5は、W1〜W5を表記する場合がある。
フリップフロップ1781−1〜1781−4は、それぞれサイクル毎に自身が格納しているデータをフリップフロップ1781−2〜1781−5に出力する。フリップフロップ1781−kは、入力されたデータを格納する。フリップフロップ1781−5は、演算の例外を受信すると、演算の例外を検出したことをFPSR182に格納する。また、フリップフロップ1781−1〜1781−4は、それぞれサイクル毎に自身が格納しているデータを比較回路1782−2〜1782−5にデータを出力する。
比較回路1782−1には、完了対象命令部173から命令完了対象のIID(すなわち、CSE出力ポインタ176の出力が示すIID)が入力される。また、フリップフロップ1781−1には、命令完了判断部174から命令完了対象のIIDが入力される。比較回路1782−2〜1782−5には、フリップフロップ1781−1〜1781−4から命令完了対象のIID(すなわち、CSE出力ポインタ176の出力が示すIID)が入力される。
演算実行制御部141は、浮動小数点演算器143による浮動少数点演算が終了したら、再度、実行の終了報告とIIDを命令完了制御部171に送る。演算実行制御部141が出力したIIDは、比較回路1782−kに入力される。
演算の例外が発生した場合、浮動小数点演算器143は、演算の例外を命令完了制御部182の比較回路1782−kに送る。
比較回路1782−kは、命令完了対象のIID(すなわち、CSE出力ポインタ176の出力が示すIID)と、演算実行制御部141から送られてくるIIDとを比較する。比較回路1782−kは、一致したときに、浮動小数点演算器143からの演算の例外の信号を取り込み(演算例外キャプチャ)、演算の例外を出力する。
FPCR181に浮動小数点演算時に例外を検出しても命令完了時に例外処理を発生しないことが設定されているとき、浮動小数点演算命令の完了タイミングを早くすると、浮動小数点演算命令の例外が浮動小数点演算器143から命令完了制御部171に送られてくる前に、命令完了していることが起こる。FPCR181の設定にかかわらず、浮動小数点演算時に例外が検出された場合に例外を検出したことを格納するFPSR182を更新する必要がある。
しかし、浮動小数点演算命令の実行の終了を待たずに命令の完了を行うと、FPSR182の更新が正しく行うことができない。このために、FPSR更新回路182が命令完了後に、FPSR182の更新を可能にすることで、FPSR182の更新を正しく行う。
演算実行制御部141は、浮動小数点演算器143による浮動少数点演算が終了したら、再度、実行の終了報告とIIDを命令完了制御部171に送る。演算実行制御部141が出力したIIDは、比較回路1782−kに入力される。また、演算の例外が発生した場合、浮動小数点演算器143は演算の例外を命令完了制御部182の比較回路1782−kに送る。比較回路1782−kは、命令完了するタイミングから完了対象命令部173からの命令完了対象のIIDと演算実行制御部141から送られてくるIIDを比較する。比較回路1782−kは、一致したときに、浮動小数点演算器143からの演算の例外の信号を取り込み(演算例外キャプチャ)、演算の例外を出力する。これにより、命令の完了後にFPSR182の更新をすることが可能となる。
図14は、FPSRの更新の動作のタイミングチャートである。
図14は、上から順に、サイクル、演算実行処理、命令完了処理、演算例外キャプチャ、FPSR更新指示、FPSRを示す。
図14は、浮動小数点演算命令のレイテンシが6サイクルの命令で、演算開始から最短で命令完了するときの動作を示す。図14は、FPCR181に浮動小数点演算時に例外を検出しても例外処理を発生しないことが設定されているときに、浮動小数点演算命令の命令完了の後にFPSR182を更新する動作を示す。
X1〜X6(サイクル1〜6)は、浮動小数点演算器143による浮動小数点演算の実行を示す。X1が成立すると、演算のオペランドデータが揃ったことになるために、演算実行制御部141はX2(サイクル2)で、演算の終了報告を命令完了制御部171に送る。このときに、演算実行制御部141は、演算の終了報告と同時に、演算命令のIIDと演算レイテンシが6サイクルであることを命令完了制御部171に送る。命令完了制御部171は、演算の終了報告の命令が次サイクルで命令完了対象である場合は、命令完了制御(C:サイクル3)を行う。命令完了制御に伴い、FPSR178に命令完了対象の命令のIIDが入力され、フリップフロップ1781−kが更新される(W1〜W5:サイクル4〜サイクル8)。
演算実行制御部141は、浮動小数点演算器143による浮動少数演算が終了したら、再度、実行の終了報告とIIDを命令完了制御部171に送る(サイクル7)。演算実行制御部141が出力したIIDは、比較回路1782−kに入力される。
また、浮動小数点演算器143は、浮動小数点演算時に例外を検出したため、演算終了時に演算の例外を命令完了制御部141のFPSR更新回路178の比較回路1782−kに出力する。
浮動小数点演算器143から演算の例外が比較回路1782−kに送られるタイミングで、比較回路1782−4において、演算実行制御部141から演算命令のIIDとフリップフロップ1781−4からのIIDとが一致する。比較回路1782−4は、IIDの一致を検出すると、浮動小数点演算器143からの演算の例外の信号を取り込み(演算例外キャプチャ)、演算の例外をフリップフロップ1781−5に出力する。フリップフロップ1781−5は、演算の例外を受信すると、演算の例外をFPSR182に出力し(FPSR更新指示)、演算の例外を検出したことをFPSR182に格納する(サイクル8)。これにより、FPSR182の格納データは、「A」から演算の例外の検出を示す「B」となる。
次にFPSR182からデータを読み出す命令の実行について説明する。
コア111−1がFPSR182を直接読み出す命令を実行するときは、FPSR182を直接読み出す命令の直前の命令が全て完了しないと、命令のデコードを行わない制御を行う。これは、FPSR182を直接読み出す命令がプログラムの先頭になると実行開始される。命令デコーダ121は、CSE172に1つもエントリが存在しない状態のときに、FPSR182を直接読み出す命令のデコードを行う。
しかし、FPSR182の更新する命令がFPSR182を更新する前に命令完了をした場合に、命令デコーダ121がFPSR182を直接読み出す命令のデコードを開始すると、FPSR182を更新する前に、FPSR182から読み出しを行ってしまい、正しいデータを読み出すことができない。
このために、命令デコーダ121は、FPSR182を更新する命令を命令デコードするときに、FPSR182を更新する命令を命令デコードしたことを示す信号を有効にして、FPSR182を更新する命令に割り当てたIIDを保持する。そして、命令デコーダ121は、保持したIIDがFPSR182を更新するIIDと一致したときに、FPSR182を更新する命令を命令デコードしたことを示す信号を無効にする。命令デコーダ121は、FPSR182を更新する命令を命令デコードしたことを示す信号が無効であるときに、FPSR182を直接読み出す命令を命令デコードすることが可能とする。なお、保持したIIDのFPSR182を更新する前に、命令デコーダ121が新しいFPSR182を更新する命令を命令デコードすると、保持したIIDは、新しいFPSR182を更新する命令のIIDに上書きされる。それまで、保持していたIIDの命令がFPSR182を更新しても、IIDが一致しないために、FPSR182を更新する命令を命令デコードしたことを示す信号は無効にならない。この制御を行うことで、FPSR182を直接読み出す命令の直前の命令がFPSR182を更新する命令である場合に、FPSR182の更新が完了してから、正しいFPSR182の値を読み出すことが可能となる。また、FPSR182を直接読み出す命令は、FPSR182を更新しない命令がCSE172に存在する場合においても、FPSR182を直接読み出す命令を実行することが可能になる。
図15は、FPSRを読み出す命令の動作のタイミングチャートである。
図15は、上から順に、サイクル、演算実行処理、命令完了処理、FPSR更新指示、FPSR、FPSR読み出し命令の処理、命令デコード抑止を示す。
図15は、浮動小数点演算命令のレイテンシが6サイクルの命令で、演算開始から最短で命令完了するときの動作を示す。図15は、FPCR181に浮動小数点演算時に例外を検出しても例外処理を発生しないことが設定されているときに、FPSR182を読み出す動作を示す。図15は、FPSR182を読み出す命令の直前の命令でFPSR182を更新する場合を示す。図15において、図14と同様にFPSR182が更新されるとする。
命令デコーダ121は、FPSR182を更新する浮動小数点演算命令を命令デコードしたときに、FPSR182を更新する命令を命令デコードしたことを示す信号を有効にする。FPSR182を更新する命令を命令デコードしたことを示す信号が有効である場合、命令デコーダ121は、FPSR182を読み出す命令を、命令デコード抑止信号が有効であるため、命令デコードしない。
図15において、FPSR182を更新する最後の浮動小数点演算命令のレイテンシが6サイクルの命令が、FPSR182を更新するサイクルがW5(サイクル8)である。このとき、FPSR182を更新する命令のIIDと命令デコードで保持しているIIDが一致するために、FPSR182を更新する命令が全て完了したことになり、FPSR182を更新する命令が命令デコードしたことを示す信号が無効になり、命令デコード抑止が終了になる。このために、命令デコーダ121は、FPSR182を読み出す命令の命令デコード(D)が可能となる。サイクル9で命令デコード抑止はLとなったので、FPSR182を読み出す命令は、命令デコード(D)され、サイクル9でFPSR182のデータが読み出される。このように、命令デコードされたFPSR182を読み出す命令は、最新のFPSR182の値を正しく読み出すことが可能になる。
また、浮動小数点演算命令のレイテンシが長いレイテンシの命令が存在する場合、浮動小数点演算命令の実行の終了を命令完了制御に報告するタイミングをソースオペランドのデータが確定したタイミングの次のサイクル(X2)にすると、演算結果を格納する浮動小数点リネーミングレジスタを後続の命令に割り当ててしまうことが発生する。このために、実行する命令の演算レイテンシが長い命令の場合、演算実行制御部141から命令完了制御部171に演算の終了報告を送るタイミングは、ソースオペランドのデータが確定したタイミングではないことが望ましい。命令完了によって解放されたリネーミングレジスタを後続の命令が新規に割り当てられて、演算レイテンシが長い命令の演算が終了するまでに、演算を実行して結果をリネーミングレジスタに格納すると、命令の順番を間違うことが発生する。このために、演算実行制御部141は、実行する命令が演算レイテンシの長い命令の場合、後続の命令がリネーミングレジスタに格納することが発生しないタイミングで、演算の終了報告を命令完了制御部171に報告する。これにより、浮動小数点演算命令を正しく実行することが可能となる。
実施の形態のCPUによれば、浮動小数点演算命令の演算時に例外を検出しても命令完了時に例外処理を発生しない設定のときに、浮動小数点演算命令の完了を早くして、浮動小数点のリネーミングレジスタの割り当て期間を短縮する。それにより、実施の形態のCPUは、浮動小数点のリネーミングレジスタの不足の発生を減少させることができる。
以上の実施の形態に関し、さらに以下の付記を開示する。
(付記1)
浮動小数点演算命令の演算時に例外を検出しても命令完了時に例外処理を発生しないことが設定された演算処理装置であって、
浮動小数点演算を行う演算器と、
複数のエントリを含み、前記複数のエントリのそれぞれはアーキテクチャレジスタまたはリネーミングレジスタのいずれかに割り当てられる浮動小数点レジスタと、
前記浮動小数点演算命令を発行するとともに、前記演算器による前記浮動小数点演算が終了する前に前記浮動小数点演算の終了報告を出力する演算実行制御部と、
前記終了報告を受信して、命令の実行を完了すると、前記リネーミングレジスタの解放を指示する命令完了制御部と、
前記指示を受信するとともに、前記浮動小数点演算の実行結果を格納するアーキテクチャレジスタに割り当てられた第1のエントリをリネーミングレジスタに割り当て、前記浮動小数点演算においてリネーミングレジスタに割り当てられた第2のエントリを前記浮動小数点演算の実行結果を格納するアーキテクチャレジスタに割り当てる命令デコーダと、
を備える演算処理装置。
(付記2)
前記演算実行制御部は、前記浮動小数点演算命令のソースオペランドのデータが確定したとき、前記終了報告を出力する付記1記載の演算処理装置。
(付記3)
前記演算処理装置に浮動小数点演算命令の演算時に例外を検出したら命令完了時に例外処理を発生することが設定されている場合、前記命令完了制御部は、前記終了報告を受信してから所定時間経過後に前記リネーミングレジスタの解放を指示する付記1または2記載の演算処理装置。
(付記4)
浮動小数点演算命令の演算時に例外を検出しても命令完了時に例外処理を発生しないことが設定され、複数のエントリを含み、前記複数のエントリのそれぞれはアーキテクチャレジスタまたはリネーミングレジスタのいずれかに割り当てられる浮動小数点レジスタを有する演算処理装置の制御方法であって、
前記演算処理装置が有する演算器が浮動小数点演算を行い、
前記演算処理装置が有する演算実行制御部が、前記浮動小数点演算命令を発行するとともに、前記演算器による前記浮動小数点演算が終了する前に前記浮動小数点演算の終了報告を出力し、
前記演算処理装置が有する命令完了制御部が、前記終了報告を受信して命令の実行を完了すると、前記リネーミングレジスタの解放を指示し、
前記演算処理装置が有する命令デコーダが、前記指示を受信するとともに、前記浮動小数点演算の実行結果を格納するアーキテクチャレジスタに割り当てられた第1のエントリをリネーミングレジスタに割り当て、前記浮動小数点演算においてリネーミングレジスタに割り当てられた第2のエントリを前記浮動小数点演算の実行結果を格納するアーキテクチャレジスタに割り当てる
演算処理装置の制御方法。
(付記5)
前記演算実行制御部は、前記浮動小数点演算命令のソースオペランドのデータが確定したとき、前記終了報告を出力する付記4記載の制御方法。
(付記6)
前記演算処理装置に浮動小数点演算命令の演算時に例外を検出したら命令完了時に例外処理を発生することが設定されている場合、前記命令完了制御部は、前記終了報告を受信してから所定時間経過後に前記リネーミングレジスタの解放を指示する付記4または5記載の制御方法。
100 システム
101 ノード
111 コア
112 MAC
113 LLキャッシュ
114 インターコネクト部
115 命令フェッチアドレス生成器
116 1次命令キャッシュ
117 命令バッファ
121 命令デコーダ
131 メモリアクセス実行制御部
132 オペランドアドレス生成器
133 1次データキャッシュ
141 演算実行制御部
142 固定小数点演算器
143 浮動小数点演算器
151 固定小数点物理レジスタ
161 浮動小数点物理レジスタ
171 命令完了制御部
172 CSE
173 完了対象命令部
174 命令完了判断部
175 比較回路
176 CSE出力ポインタ
177 命令完了抑止部
178 FPSR更新回路
181 FPCR
182 FPSR
183 PC
191 分岐実行制御部
192 分岐予測機構
201 メモリ
301 I/O
1781 フリップフロップ
1782 比較回路
命令デコーダ21は、浮動小数点演算命令をデコードし、浮動小数点リネーミングレジスタ25のうちのあるエントリをリネーミングレジスタに割り当てる。
浮動小数点演算命令の実行が終了すると、演算実行制御部22は、命令完了制御部23に実行終了報告を送る。また、浮動小数点演算器24は、浮動小数点演算命令の実行結果をリネーミングレジスタに格納する。
命令完了制御部23は、FPSR28、PC29の更新を行う。また、命令完了制御部23は、リネーミングレジスタから浮動小数点演算命令の実行結果を読み出して、浮動小数点レジスタ26に格納する(浮動小数点レジスタの更新)。また、命令デコーダ21は、リネーミングレジスタの解放の指示を受信すると、上記の割り当てたリネーミングレジスタを解放する。
命令デコーダ121は、デコードする命令の種類に従って、命令の実行を制御するメモリアクセス実行制御部131、固定小数点演算と浮動小数点演算を制御する演算実行制御部141、分岐実行制御部191に必要なエントリを作成する。命令デコーダ121は、全てのデコードされた命令に対して、命令の完了を制御する命令完了制御部171に含まれるコミットスタックエントリ(CSE)にエントリを作成する。また、実行結果を格納する固定小数点物理レジスタ151と浮動小数点物理レジスタ161は、それぞれアーキテクチャレジスタとリネーミングレジスタで構成される。固定小数点物理レジスタ151のリネーミングレジスタは、固定小数点リネーミングレジスタと表記する場合がある。浮動小数点物理レジスタ161のリネーミングレジスタは、浮動小数点リネーミングレジスタと表記する場合がある。
デコードされた命令がメモリアクセス実行制御部131、演算実行制御部141にエントリを作成する場合には、命令デコーダ121は、固定小数点物理レジスタ151のリネーミングレジスタと浮動小数点物理レジスタ161のリネーミングレジスタにレジスタを割り当てるレジスタリネーミング処理を行う。演算実行制御部141で実行に必要なソースオペランドが揃った命令から実行することで、アウト・オブ・オーダー実行を行うことが可能となる。実行結果を命令デコード時に割り当てられた固定小数点リネーミングレジスタと浮動小数点リネーミングレジスタに格納する。演算実行制御部141から、アウト・オブ・オーダーで実行された命令は、命令完了制御部171の制御によりプログラムにおける命令の並び順に命令の完了を行い、完了した命令に対してのみ、PCなどのプログラマブルな資源の更新を行う。また、リネーミングレジスタとアーキテクチャレジスタが混在した物理レジスタ方式において、命令でコーダ121は、演算結果を格納したリネーミングレジスタとして扱っている物理レジスタのアドレスをアーキテクチャレジスタに変更する。
浮動小数点演算命令の演算時に例外を検出しても命令完了時に例外を発生しない設定のときは、浮動小数点演算命令の完了時に、演算例外を検出したことをFPSR182に格納する必要がある。浮動小数点演算命令の演算時の例外は、演算処理が終了したときに浮動小数点演算器143が検出して、命令完了制御部171に報告する。この場合、浮動小数点演算命令が完了した後に、浮動小数点演算命令の演算例外が報告されることになるために、命令の完了時に、FPSR182を更新することはできない。このために、命令完了制御部171が浮動小数点演算命令の演算時に例外を検出したことをFPSR182に更新するタイミングを、命令の完了のタイミングより遅くする制御を行う。また、浮動小数点演算命令の演算時に例外を検出したことを格納するFPSR182は、レジスタリネーミング処理を行わないために、FPSR182を読み出す場合は、全ての命令が完了してから読み出し処理を行う。しかし、例外を検出したことを格納したFPSR182の更新のタイミングが命令の完了より遅くなったために、FPSR182を読み出す場合に、FPSR182の更新が完了してから読み出しを開始する制御を行う。
比較回路175は、命令完了対象のIIDを示すCSE出力ポインタ176の出力と演算実行制御部141から実行の終了報告と共に送られてきたIIDとを比較し、演算命令が、次のサイクルで命令完了の対象のIIDであるかをチェックする。CSE出力ポインタ176と演算実行制御部141からのIIDとが一致する場合、当該IIDは次のサイクルで命令完了の対象のIIDである。比較回路175は、比較結果を完了対象命令部173および命令完了抑止部177に出力する。
尚、浮動小数点演算命令より前の命令が完了していないときは、命令完了対象にならない場合があり、この場合は、命令完了制御部171は命令完了対象になるまで待つ。
演算の例外が発生した場合、浮動小数点演算器143は、演算の例外を命令完了制御部171の比較回路1782−kに送る。
しかし、浮動小数点演算命令の実行の終了を待たずに命令の完了を行うと、FPSR182の更新が正しく行うことができない。このために、FPSR更新回路178が命令完了後に、FPSR182の更新を可能にすることで、FPSR182の更新を正しく行う。
演算実行制御部141は、浮動小数点演算器143による浮動少数点演算が終了したら、再度、実行の終了報告とIIDを命令完了制御部171に送る。演算実行制御部141が出力したIIDは、比較回路1782−kに入力される。また、演算の例外が発生した場合、浮動小数点演算器143は演算の例外を命令完了制御部171の比較回路1782−kに送る。比較回路1782−kは、命令完了するタイミングから完了対象命令部173からの命令完了対象のIIDと演算実行制御部141から送られてくるIIDを比較する。比較回路1782−kは、一致したときに、浮動小数点演算器143からの演算の例外の信号を取り込み(演算例外キャプチャ)、演算の例外を出力する。これにより、命令の完了後にFPSR182の更新をすることが可能となる。
また、浮動小数点演算器143は、浮動小数点演算時に例外を検出したため、演算終了時に演算の例外を命令完了制御部171のFPSR更新回路178の比較回路1782−kに出力する。
浮動小数点演算器143から演算の例外が比較回路1782−kに送られるタイミングで、比較回路1782−5において、演算実行制御部141から演算命令のIIDとフリップフロップ1781−4からのIIDとが一致する。比較回路1782−5は、IIDの一致を検出すると、浮動小数点演算器143からの演算の例外の信号を取り込み(演算例外キャプチャ)、演算の例外をフリップフロップ1781−5に出力する。フリップフロップ1781−5は、演算の例外を受信すると、演算の例外をFPSR182に出力し(FPSR更新指示)、演算の例外を検出したことをFPSR182に格納する(サイクル8)。これにより、FPSR182の格納データは、「A」から演算の例外の検出を示す「B」となる。

Claims (4)

  1. 浮動小数点演算命令の演算時に例外を検出しても命令完了時に例外処理を発生しないことが設定された演算処理装置であって、
    浮動小数点演算を行う演算器と、
    複数のエントリを含み、前記複数のエントリのそれぞれはアーキテクチャレジスタまたはリネーミングレジスタのいずれかに割り当てられる浮動小数点レジスタと、
    前記浮動小数点演算命令を発行するとともに、前記演算器による前記浮動小数点演算が終了する前に前記浮動小数点演算の終了報告を出力する演算実行制御部と、
    前記終了報告を受信して、命令の実行を完了すると、前記リネーミングレジスタの解放を指示する命令完了制御部と、
    前記指示を受信するとともに、前記浮動小数点演算の実行結果を格納するアーキテクチャレジスタに割り当てられた第1のエントリをリネーミングレジスタに割り当て、前記浮動小数点演算においてリネーミングレジスタに割り当てられた第2のエントリを前記浮動小数点演算の実行結果を格納するアーキテクチャレジスタに割り当てる命令デコーダと、
    を備える演算処理装置。
  2. 前記演算実行制御部は、前記浮動小数点演算命令のソースオペランドのデータが確定したとき、前記終了報告を出力する請求項1記載の演算処理装置。
  3. 前記演算処理装置に浮動小数点演算命令の演算時に例外を検出したら命令完了時に例外処理を発生することが設定されている場合、前記命令完了制御部は、前記終了報告を受信してから所定時間経過後に前記リネーミングレジスタの解放を指示する請求項1または2記載の演算処理装置。
  4. 浮動小数点演算命令の演算時に例外を検出しても命令完了時に例外処理を発生しないことが設定され、複数のエントリを含み、前記複数のエントリのそれぞれはアーキテクチャレジスタまたはリネーミングレジスタのいずれかに割り当てられる浮動小数点レジスタを有する演算処理装置の制御方法であって、
    前記演算処理装置が有する演算器が浮動小数点演算を行い、
    前記演算処理装置が有する演算実行制御部が、前記浮動小数点演算命令を発行するとともに、前記演算器による前記浮動小数点演算が終了する前に前記浮動小数点演算の終了報告を出力し、
    前記演算処理装置が有する命令完了制御部が、前記終了報告を受信して、命令の実行を完了するとともに、前記リネーミングレジスタの解放を指示し、
    前記演算処理装置が有する命令デコーダが、前記指示を受信するとともに、前記浮動小数点演算の実行結果を格納するアーキテクチャレジスタに割り当てられた第1のエントリをリネーミングレジスタに割り当て、前記浮動小数点演算においてリネーミングレジスタに割り当てられた第2のエントリを前記浮動小数点演算の実行結果を格納するアーキテクチャレジスタに割り当てる
    演算処理装置の制御方法。
JP2018112443A 2018-06-13 2018-06-13 演算処理装置および演算処理装置の制御方法 Active JP7043985B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2018112443A JP7043985B2 (ja) 2018-06-13 2018-06-13 演算処理装置および演算処理装置の制御方法
US16/416,335 US10824431B2 (en) 2018-06-13 2019-05-20 Releasing rename registers for floating-point operations

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2018112443A JP7043985B2 (ja) 2018-06-13 2018-06-13 演算処理装置および演算処理装置の制御方法

Publications (2)

Publication Number Publication Date
JP2019215694A true JP2019215694A (ja) 2019-12-19
JP7043985B2 JP7043985B2 (ja) 2022-03-30

Family

ID=68840016

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2018112443A Active JP7043985B2 (ja) 2018-06-13 2018-06-13 演算処理装置および演算処理装置の制御方法

Country Status (2)

Country Link
US (1) US10824431B2 (ja)
JP (1) JP7043985B2 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11086630B1 (en) * 2020-02-27 2021-08-10 International Business Machines Corporation Finish exception handling of an instruction completion table

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH07271584A (ja) * 1994-03-31 1995-10-20 Internatl Business Mach Corp <Ibm> オペレーションの処理システム及び方法
JPH1040105A (ja) * 1996-04-16 1998-02-13 Internatl Business Mach Corp <Ibm> リネーム・レジスタを割り付ける方法及びプロセッサ
JPH10105400A (ja) * 1996-08-30 1998-04-24 Internatl Business Mach Corp <Ibm> 浮動小数点実行ユニットにおける状態フラグ及び条件コードの保持装置及び方法
US20010004755A1 (en) * 1997-04-03 2001-06-21 Henry M Levy Mechanism for freeing registers on processors that perform dynamic out-of-order execution of instructions using renaming registers
US20120265966A1 (en) * 2011-04-15 2012-10-18 Advanced Micro Devices, Inc. Processor with increased efficiency via early instruction completion

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6094716A (en) 1998-07-14 2000-07-25 Advanced Micro Devices, Inc. Register renaming in which moves are accomplished by swapping rename tags
JP3817436B2 (ja) 2000-09-28 2006-09-06 株式会社東芝 プロセッサおよびリネーミング装置
US7996662B2 (en) * 2005-11-17 2011-08-09 Apple Inc. Floating point status/control register encodings for speculative register field
JP5130757B2 (ja) * 2007-03-16 2013-01-30 富士通株式会社 演算処理装置及び演算処理装置の制御方法
US7769986B2 (en) * 2007-05-01 2010-08-03 International Business Machines Corporation Method and apparatus for register renaming
US8683180B2 (en) * 2009-10-13 2014-03-25 International Business Machines Corporation Intermediate register mapper
US9400655B2 (en) * 2013-03-20 2016-07-26 Arm Limited Technique for freeing renamed registers

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH07271584A (ja) * 1994-03-31 1995-10-20 Internatl Business Mach Corp <Ibm> オペレーションの処理システム及び方法
JPH1040105A (ja) * 1996-04-16 1998-02-13 Internatl Business Mach Corp <Ibm> リネーム・レジスタを割り付ける方法及びプロセッサ
JPH10105400A (ja) * 1996-08-30 1998-04-24 Internatl Business Mach Corp <Ibm> 浮動小数点実行ユニットにおける状態フラグ及び条件コードの保持装置及び方法
US20010004755A1 (en) * 1997-04-03 2001-06-21 Henry M Levy Mechanism for freeing registers on processors that perform dynamic out-of-order execution of instructions using renaming registers
US20120265966A1 (en) * 2011-04-15 2012-10-18 Advanced Micro Devices, Inc. Processor with increased efficiency via early instruction completion

Also Published As

Publication number Publication date
US20190384608A1 (en) 2019-12-19
JP7043985B2 (ja) 2022-03-30
US10824431B2 (en) 2020-11-03

Similar Documents

Publication Publication Date Title
JP4856100B2 (ja) 非アラインドメモリアクセス予測
US8555039B2 (en) System and method for using a local condition code register for accelerating conditional instruction execution in a pipeline processor
US8250349B2 (en) Branch prediction control device having return address stack and method of branch prediction
US8074060B2 (en) Out-of-order execution microprocessor that selectively initiates instruction retirement early
US20150106598A1 (en) Computer Processor Employing Efficient Bypass Network For Result Operand Routing
JP2008530714A5 (ja)
JPH07281896A (ja) 情報処理装置
JP2014002735A (ja) ゼロサイクルロード
EP3171264B1 (en) System and method of speculative parallel execution of cache line unaligned load instructions
US6289437B1 (en) Data processing system and method for implementing an efficient out-of-order issue mechanism
US20040225870A1 (en) Method and apparatus for reducing wrong path execution in a speculative multi-threaded processor
US20100095305A1 (en) Simultaneous multithread instruction completion controller
JP7043985B2 (ja) 演算処理装置および演算処理装置の制御方法
US7010676B2 (en) Last iteration loop branch prediction upon counter threshold and resolution upon counter one
US11372712B2 (en) Processing device and method of controlling processing device
US9841974B2 (en) Renaming with generation numbers
JP2023531216A (ja) 命令再フェッチを減らすための、プロセッサにおけるハザードに応答した命令パイプライン・フラッシュ後のフェッチ、フラッシュされた命令の再利用
JP3800533B2 (ja) プログラムカウンタ制御方法及びプロセッサ
US20100100709A1 (en) Instruction control apparatus and instruction control method
US7036003B1 (en) Instruction processing device and method for controlling branch instruction accompanied by mode change
US11080057B2 (en) Processing device and method of controlling processing device
KR20230023710A (ko) 명령어 재실행을 감소시키기 위한, 프로세서의 위험에 응답한 명령어 파이프라인 플러시 후 실행되고 플러시된 명령어의 재사용
JP2018045370A (ja) 演算処理装置および演算処理装置の制御方法
JP3807740B2 (ja) プロセッサ及び命令制御方法
JPH076037A (ja) 命令解読装置

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20190328

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20210310

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20220128

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

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20220215

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20220228

R150 Certificate of patent or registration of utility model

Ref document number: 7043985

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150