(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024025407
(43)【公開日】2024-02-26
(54)【発明の名称】演算処理装置および演算処理方法
(51)【国際特許分類】
G06F 9/38 20180101AFI20240216BHJP
G06F 9/34 20180101ALI20240216BHJP
【FI】
G06F9/38 350B
G06F9/34 330
【審査請求】未請求
【請求項の数】19
【出願形態】OL
(21)【出願番号】P 2022128821
(22)【出願日】2022-08-12
(71)【出願人】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(71)【出願人】
【識別番号】504202472
【氏名又は名称】大学共同利用機関法人情報・システム研究機構
(74)【代理人】
【識別番号】100107766
【弁理士】
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【弁理士】
【氏名又は名称】伊東 忠彦
(74)【代理人】
【識別番号】100107515
【弁理士】
【氏名又は名称】廣田 浩一
(72)【発明者】
【氏名】五島 正裕
(72)【発明者】
【氏名】葛 毅
【テーマコード(参考)】
5B013
5B033
【Fターム(参考)】
5B013AA12
5B013CC10
5B033DD09
(57)【要約】
【課題】複数のステージを含む実行ユニットの途中ステージでの演算結果をバイパス可能か否かを検出し、可能な場合にバイパスすることで、演算処理装置の処理性能を向上する。
【解決手段】演算処理装置は、実行可能な命令を発行する命令スケジューラと、命令の使用するデータを保持するレジスタファイルと、命令スケジューラが発行した命令を順次実行する複数のステージを含む実行ユニットと、複数のステージのうち、最終ステージより前の途中ステージでの演算結果が実行ユニットによる演算結果と同じになる早期終了を検出する検出部と、レジスタファイルから出力されるデータまたは実行ユニットからの演算結果を実行ユニットの入力に転送し、検出部が早期終了を検出した場合、途中ステージでの演算結果を実行ユニットの入力に転送するバイパス制御部と、を有する。
【選択図】
図1
【特許請求の範囲】
【請求項1】
実行可能な命令を発行する命令スケジューラと、
命令の使用するデータを保持するレジスタファイルと、
前記命令スケジューラが発行した命令を順次実行する複数のステージを含む実行ユニットと、
前記複数のステージのうち、最終ステージより前の途中ステージでの演算結果が前記実行ユニットによる演算結果と同じになる早期終了を検出する検出部と、
前記レジスタファイルから出力されるデータまたは前記実行ユニットからの演算結果を前記実行ユニットの入力に転送し、前記検出部が前記早期終了を検出した場合、前記途中ステージでの演算結果を前記実行ユニットの入力にバイパスするバイパス制御部と、
を有する演算処理装置。
【請求項2】
命令をデコードし、デコードした命令を前記命令スケジューラに出力する命令デコーダを有し、
前記検出部は、前記命令デコーダに設けられ、デコードした命令に基づいて前記早期終了を検出する
請求項1に記載の演算処理装置。
【請求項3】
前記命令スケジューラは、先に発行した先行命令に対して依存する後続依存命令が前記実行ユニットに投入されるタイミングが、前記先行命令の演算結果が前記バイパス制御部を介して前記実行ユニットに投入されるタイミングと合うように前記後続依存命令を発行する
請求項2に記載の演算処理装置。
【請求項4】
前記命令スケジューラと前記実行ユニットとの間に配置され、前記命令スケジューラから発行される命令と前記バイパス制御部から転送されるソースオペランドとを順次保持する複数のエントリを含み、ソースオペランドが確定したエントリに保持された命令をソースオペランドとともに前記実行ユニットに発行する2次スケジューラを有し、
前記検出部は、前記実行ユニットに設けられる
請求項1に記載の演算処理装置。
【請求項5】
前記命令スケジューラは、先に発行した先行命令に対して依存する後続依存命令が前記実行ユニットに投入されるタイミングが、前記最終ステージでの演算結果が前記バイパス制御部を介して前記実行ユニットに投入されるタイミングより早くなるように、前記後続依存命令を発行する
請求項4に記載の演算処理装置。
【請求項6】
前記実行ユニットは、浮動小数点乗算器と前記浮動小数点乗算器の出力に接続される浮動小数点加算器とを含む浮動小数点積和演算回路を有し、
前記検出部は、前記浮動小数点積和演算回路により浮動小数点乗算が実行される場合、早期終了を検出し、
前記バイパス制御部は、前記検出部が早期終了を検出した場合、前記浮動小数点乗算器の乗算結果をバイパスする
請求項2ないし請求項5のいずれか1項に記載の演算処理装置。
【請求項7】
前記実行ユニットは、複数のシフト回路が直列に接続された論理演算回路を有し、
前記検出部は、シフト量が即値で与えられるシフト命令が前記複数のシフト回路により実行される場合、早期終了を検出し、
前記バイパス制御部は、前記検出部が早期終了を検出した場合、前記途中ステージの演算結果をバイパスする
請求項2ないし請求項5のいずれか1項に記載の演算処理装置。
【請求項8】
前記実行ユニットは、浮動小数点演算器と前記浮動小数点演算器による演算結果に"+1"を加算する丸め処理回路とを含む浮動小数点演算回路を有し、
前記検出部は、浮動小数点演算回路により実行される浮動小数点演算命令が、演算結果に"+1"を加算する丸めを発生させない丸めモードの場合、早期終了を検出し、
前記バイパス制御部は、前記検出部が早期終了を検出した場合、前記浮動小数点演算器の演算結果をバイパスする
請求項2ないし請求項5のいずれか1項に記載の演算処理装置。
【請求項9】
前記実行ユニットは、浮動小数点乗算器と前記浮動小数点乗算器の出力に接続される浮動小数点加算器とを含む浮動小数点積和演算回路を有し、
前記検出部は、乗算結果に加算する値が"0"である場合、早期終了を検出し、
前記バイパス制御部は、前記検出部が早期終了を検出した場合、前記浮動小数点乗算器の乗算結果をバイパスする
請求項4または請求項5に記載の演算処理装置。
【請求項10】
前記実行ユニットは、演算結果が非正規化数である場合に処理を実行する非正規化数処理回路を含む浮動小数点積和演算回路を有し、
前記検出部は、前記浮動小数点積和演算回路による加算結果が非正規化数でない場合、早期終了を検出し、
前記バイパス制御部は、前記検出部が早期終了を検出した場合、前記加算結果をバイパスする
請求項4または請求項5に記載の演算処理装置。
【請求項11】
前記実行ユニットは、浮動小数点演算器と前記浮動小数点演算器による演算結果に"+1"を加算する丸め処理回路とを含む浮動小数点演算回路を有し、
前記検出部は、前記浮動小数点演算器による演算結果に対して"+1"を加算する丸め処理が発生しない場合、早期終了を検出し、
前記バイパス制御部は、前記検出部が早期終了を検出した場合、前記浮動小数点演算器の演算結果をバイパスする
請求項4または請求項5に記載の演算処理装置。
【請求項12】
前記実行ユニットは、浮動小数点加算器と、前記浮動小数点加算器の出力に接続された正規化処理回路とを含む浮動小数点加算回路を有し、
前記検出部は、前記浮動小数点加算器による演算後の正規化処理が不要な場合、早期終了を検出し、
前記バイパス制御部は、前記検出部が早期終了を検出した場合、前記浮動小数点加算器の演算結果をバイパスする
請求項4または請求項5に記載の演算処理装置。
【請求項13】
前記実行ユニットは、整数加算器と、前記整数加算器の出力に接続された桁上がり処理部とを含む整数加算回路を有し、
前記検出部は、前記整数加算器による加算後の桁上がり処理が不要な場合、早期終了を検出し、
前記バイパス制御部は、前記検出部が早期終了を検出した場合、前記整数加算器の加算結果をバイパスする
請求項4または請求項5に記載の演算処理装置。
【請求項14】
前記実行ユニットは、複数のシフト回路が直列に接続された論理演算回路を有し、
前記検出部は、シフト量がレジスタファイルから与えられるシフト命令の前記論理演算回路による実行において、シフト結果が前記途中ステージで得られる場合、早期終了を検出し、
前記バイパス制御部は、前記検出部が早期終了を検出した場合、前記途中ステージでのシフト結果をバイパスする
請求項4または請求項5に記載の演算処理装置。
【請求項15】
互いに異なるデータを使用して1つの命令を並列に実行可能な複数の前記実行ユニットを有し、
前記検出部は、複数の前記実行ユニット毎に途中ステージでの演算結果をバイパス可能か否かを検出する
請求項4または請求項5に記載の演算処理装置。
【請求項16】
前記途中ステージの演算結果または前記最終ステージの演算結果を選択して前記実行ユニットの入力に出力する選択部を有し、
前記バイパス制御部は、前記検出部が早期終了を検出した場合、前記選択部に前記途中ステージの演算結果を選択させる
請求項1ないし請求項5のいずれか1項に記載の演算処理装置。
【請求項17】
前記バイパス制御部は、前記検出部が早期終了を検出した場合、複数の前記途中ステージでの複数の演算結果のうち、バイパス可能な演算結果のいずれかをバイパスする
請求項1ないし請求項5のいずれか1項に記載の演算処理装置。
【請求項18】
バイパスされる前記途中ステージでの演算結果は、前記バイパス制御部および前記レジスタファイルに転送され、
前記最終ステージの演算結果は、前記レジスタファイルに転送される
請求項1ないし請求項5のいずれか1項に記載の演算処理装置。
【請求項19】
実行可能な命令を発行する命令スケジューラと、命令に使用するデータを保持するレジスタファイルと、前記命令スケジューラが発行した命令を順次実行する複数のステージを含む実行ユニットと、前記レジスタファイルから出力されるデータまたは前記実行ユニットからの演算結果を前記実行ユニットの入力に転送するバイパス制御部と、を有する演算処理装置の演算処理方法であって、
前記演算処理装置が有する検出部が、
前記複数のステージのうち、最終ステージより前の途中ステージでの演算結果が前記実行ユニットによる演算結果と同じになる早期終了を検出し、
同じになる場合、前記途中ステージの演算結果を前記バイパス制御部に転送する
演算処理方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、演算処理装置および演算処理方法に関する。
【背景技術】
【0002】
命令を実行可能な順に演算の実行ユニットに発行する命令スケジューラを搭載し、アウトオブオーダ処理を実行することで処理性能を向上させたプロセッサが知られている(例えば、特許文献1-5参照)。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】特表2017-509063号公報
【特許文献2】特表2018-523242号公報
【特許文献3】米国特許出願公開第2019/0018684号明細書
【特許文献4】特表2017-537408号公報
【特許文献5】米国特許出願公開第2016/0179551号明細書
【発明の概要】
【発明が解決しようとする課題】
【0004】
アウトオブオーダ処理を実行する演算処理装置は、命令スケジューラから命令を発行する時点で演算の実行ユニットによる演算実行のサイクル数を決定する。演算実行のサイクル数は、実行レイテンシとも称される。そして、演算結果は、決定された実行レイテンシに対応するサイクルで実行ユニットの入力にバイパスされる。一方で、実行ユニットの正味の実行レイテンシは、入力されるデータまたは演算の種類によって変化する。
【0005】
例えば、乗算器と加算器とを含む積和演算器で積和演算命令と乗算命令とをそれぞれ実行する場合、正味の実行レイテンシは、乗算命令のほうが小さくなる。また、積和演算命令において、乗算結果と"0"とが加算される場合、加算器の実行結果を待たずに演算結果が求まる。このため、乗算結果と"0"とが加算される場合の正味のレイテンシは、乗算結果と"0"以外の値が加算される場合の正味のレイテンシに比べて小さくなる。しかしながら、命令スケジューラは、実行ユニットでの最長のレイテンシを使用して命令の発行タイミングを決定する。
【0006】
1つの側面では、本発明は、複数のステージを含む実行ユニットの途中ステージでの演算結果をバイパス可能か否かを検出し、可能な場合にバイパスすることで、演算処理装置の処理性能を向上することを目的とする。
【課題を解決するための手段】
【0007】
一つの観点によれば、演算処理装置は、実行可能な命令を発行する命令スケジューラと、命令の使用するデータを保持するレジスタファイルと、前記命令スケジューラが発行した命令を順次実行する複数のステージを含む実行ユニットと、前記複数のステージのうち、最終ステージより前の途中ステージでの演算結果が前記実行ユニットによる演算結果と同じになる早期終了を検出する検出部と、前記レジスタファイルから出力されるデータまたは前記実行ユニットからの演算結果を前記実行ユニットの入力に転送し、前記検出部が前記早期終了を検出した場合、前記途中ステージでの演算結果を前記実行ユニットの入力に転送するバイパス制御部と、を有する。
【発明の効果】
【0008】
複数のステージを含む実行ユニットの途中ステージでの演算結果をバイパス可能か否かを検出し、可能な場合にバイパスすることで、演算処理装置の処理性能を向上することができる。
【図面の簡単な説明】
【0009】
【
図1】一実施形態における演算処理装置の要部の一例を示すブロック図である。
【
図2】別の実施形態における演算処理装置の要部の一例を示すブロック図である。
【
図3】さらなる別の実施形態における演算処理装置の要部の一例を示すブロック図である。
【
図5】他の演算処理装置の要部の一例を示すブロック図である。
【
図7】さらなる他の演算処理装置の要部の一例を示すブロック図である。
【
図9】浮動小数点積和演算を実行する場合のパイプライン動作の例を示す説明図である。
【
図10】浮動小数点積和演算を実行する場合の別の観点でのパイプライン動作の例を示す説明図である。
【
図11】別の実施形態における演算処理装置の要部の一例を示すブロック図である。
【
図13】別の実施形態における演算処理装置の要部の一例を示すブロック図である。
【
図15】別の実施形態における演算処理装置の要部の一例を示すブロック図である。
【
図17】別の実施形態における演算処理装置の要部の一例を示すブロック図である。
【
図19】別の実施形態における演算処理装置の要部の一例を示すブロック図である。
【
図21】別の実施形態における演算処理装置の要部の一例を示すブロック図である。
【
図23】別の実施形態における演算処理装置の要部の一例を示すブロック図である。
【
図25】別の実施形態における演算処理装置の要部の一例を示すブロック図である。
【
図27】別の実施形態における演算処理装置の要部の一例を示すブロック図である。
【
図29】別の実施形態における演算処理装置の要部の一例を示すブロック図である。
【発明を実施するための形態】
【0010】
以下、図面を参照して、実施形態が説明される。
【0011】
図1は、一実施形態における演算処理装置の要部の一例を示す。
図1に示す演算処理装置10は、例えば、CPU(Central Processing Unit)等のプロセッサである。演算処理装置10は、命令デコーダID、命令スケジューラIS、レジスタファイルRF、バイパス制御部BCNTおよび実行ユニットEXを有する。命令デコーダIDは、検出部DETを有する。実行ユニットEXは、複数のステージSTG(STG1、STG2)を有する。なお、ステージSTGの数は、3個以上でもよい。以下では、実行ユニットEXが積和演算回路を含む例が説明されるが、実行ユニットEXは、他の演算回路を含んでもよい。
【0012】
命令デコーダIDは、命令バッファ等から受信する命令をデコードし、デコードした命令を示す命令情報を命令スケジューラISに出力する。検出部DETは、デコードした命令の実行ユニットによる演算結果が、複数のステージSTGの全てを使用せずに得られる早期終了か否かを判定し、判定結果を短縮フラグshtとして命令スケジューラISに出力する。例えば、命令デコーダIDは、デコードした命令が、積和演算命令の場合、短縮フラグshtをリセットし、乗算命令の場合、短縮フラグshtをセットする。
【0013】
命令スケジューラISは、命令デコーダIDから受信する命令情報および短縮フラグshtを順次保持する。命令スケジューラISは、保持した命令情報のうち実行ユニットEXにより実行可能な命令情報と短縮フラグshtとを実行ユニットEXに順次投入し、実行可能な命令情報に含まれるレジスタ情報をレジスタファイルRFに順次出力する。以下では、命令スケジューラISが出力する命令情報は、単に命令とも称される。
【0014】
この際、命令スケジューラISは、早期終了か否かに応じて、先行命令に対して依存する後続依存命令の発行タイミングを変化させる。例えば、命令スケジューラISは、後続依存命令の実行ユニットEXへの投入タイミングが、先行命令の演算結果がバイパス制御部BCNTから実行ユニットEXにバイパスされるタイミングと合うように後続依存命令を発行する。これにより、短縮フラグshtの値に応じて実行ユニットEXから先行命令の演算結果が出力されるサイクルが変化する場合にも、後続依存命令の実行タイミングに合わせて先行命令の演算結果を実行ユニットEXにバイパスすることができる。
【0015】
レジスタファイルRFは、命令に使用するデータおよび演算結果をそれぞれ保持可能な複数のレジスタを有する。レジスタファイルRFは、命令スケジューラISからのレジスタ情報(ソースオペランド)が示すレジスタから、実行ユニットEXが演算に使用するデータを取り出し、バイパス制御部BCNTに出力する。
【0016】
また、レジスタファイルRFは、実行ユニットEXの最終ステージSTG2から出力される演算の実行結果rslta、または、実行ユニットEXの途中ステージSTG1から出力される演算の実行結果rsltbを受信する。レジスタファイルRFは、受信した実行結果を、演算の実行結果とともに実行ユニットEXから受信するレジスタ情報(ディスティネーションオペランド)が示すレジスタに格納する。
【0017】
バイパス制御部BCNTは、実行ユニットEXからイネーブル信号enaを受信した場合、最終ステージSTG2から出力される演算結果rstlaを選択し、ソースオペランドとして実行ユニットEXの入力(例えば、初段のステージSTG)に出力する。バイパス制御部BCNTは、実行ユニットEXからイネーブル信号enbを受信した場合、途中ステージSTG1から出力される演算結果rstlbを選択し、ソースオペランドとして実行ユニットEXの入力に出力する。バイパス制御部BCNTは、実行ユニットEXからイネーブル信号ena、enbのいずれも受信しない場合、レジスタファイルRFから出力されるソースオペランドを選択し、実行ユニットEXの入力に出力する。
【0018】
実行ユニットEXは、直列に接続される複数のステージSTGをパイプライン動作させ、命令スケジューラISから受信する命令を実行する。
図1に示す例では、初段のステージSTG1(=途中ステージSTG)は、乗算を実行し、最終ステージSTG2は、加算を実行する。例えば、実行ユニットEXは、積和演算器である。実行ユニットEXは、乗算命令を実行する場合、初段のステージSTGにより演算結果を得ることができる。
【0019】
途中ステージSTG1は、短縮フラグshtがセットされている場合、演算結果rsltbとともにイネーブル信号enbをバイパス制御部BCNTに出力する。これにより、実行ユニットEXが乗算命令を実行する場合、最終ステージSTG2から演算結果rsltaを出力する場合に比べて1サイクル早く演算結果rsltbをバイパスさせることができる。
【0020】
なお、途中ステージSTG1は、短縮フラグshtがセットされている場合、イネーブル信号enaを出力しない。途中ステージSTG1は、短縮フラグshtがリセットされている場合、演算結果rsltbの出力とともにイネーブル信号enaを最終ステージSTGに出力する。最終ステージSTG2は、イネーブル信号enaを受けた場合、演算結果rsltaの出力とともに、イネーブル信号enaをバイパス制御部BCNTに出力する。
【0021】
以上、この実施形態では、演算処理装置10は、実行ユニットによる演算結果が、複数のステージSTGの全てを使用せずに得られる早期終了を検出部DETにより検出した場合、途中ステージSTG1での演算結果rsltbをバイパスする。これにより、最終ステージSTG2から演算結果rsltaを出力する場合に比べて演算結果rsltbを早くバイパスさせることができ、演算処理装置10の処理性能を向上することができる。
【0022】
また、検出部DETを命令デコーダIDに設けることで、途中ステージSTG1での演算結果rsltbをバイパス可能か否か(すなわち、早期終了か否か)を命令のデコード時に判定することができる。命令スケジューラISは、早期終了か否かに応じて、先行命令に対して依存する後続依存命令の発行タイミングを変化させる。これにより、短縮フラグshtの値に応じて実行ユニットEXから先行命令の演算結果が出力されるサイクルが変化する場合にも、後続依存命令の実行タイミングに合わせて先行命令の演算結果を実行ユニットEXにバイパスすることができる。
【0023】
なお、検出部DETは、命令スケジューラISに設けられてもよい。この場合、命令スケジューラISは、命令デコーダIDから命令を受信してから実行ユニットEXに出力するまでの間に、早期終了か否かを判定し、判定結果に応じて短縮フラグshtをセットまたはリセットする。
【0024】
図2は、別の実施形態における演算処理装置の要部の一例を示す。
図1と同様の要素については、同じ符号を付し、詳細な説明は省略する。
図1に示す演算処理装置10Aは、例えば、CPU等のプロセッサである。演算処理装置10Aは、
図1の演算処理装置10に対して、新たに2次スケジューラ2Sを有する。2次スケジューラ2Sは、命令スケジューラISと実行ユニットEXとの間に配置される。また、演算処理装置10Aは、命令デコーダIDに検出部DETを設ける代わりに、途中ステージSTG1(この例では初段)に検出部DETを設けている。実行ユニットEXは、例えば、積和演算命令("a*b+c(*は乗算符号)")を実行する積和演算器である。
【0025】
2次スケジューラ2Sは、命令スケジューラISから発行される命令と、バイパス制御部BCNTから転送されるソースオペランドとを順次保持する複数のエントリを含む。2次スケジューラ2Sは、保持した命令およびソースオペランドを、所定サイクル遅延させる機能を有し、ソースオペランドが確定したエントリに保持された命令をソースオペランドとともに前記実行ユニットに発行する。
【0026】
これにより、例えば、演算結果が最終ステージSTG2からバイパスされる場合に、バイパス制御部BCNTからソースオペランドを受信するまで、命令スケジューラISから受信した命令の実行ユニットEXへの出力を待たせることができる。すなわち、実行ユニットEXから演算結果(rsltaまたはrsltb)を出力するサイクルが変化する場合にも、2次スケジューラ2Sにより命令スケジューラISからの命令とバイパス制御部BCNTからのソースオペランドとを待ち合わせすることができる。
【0027】
途中ステージSTG1に設けられる検出部DETは、積和演算命令("a*b+c")の"c"が"0"であることを検出した場合、イネーブル信号enaをリセットし、イネーブル信号enbをセットする。検出部DETは、積和演算命令("a*b+c")の"c"が"0"でないことを検出した場合、イネーブル信号enaをセットし、イネーブル信号enbをリセットする。
【0028】
これにより、積和演算命令("a*b+c")の"c"が"0"の場合、途中ステージSTG1から演算結果をバイパスさせることができる。すなわち、最終ステージSTGから演算結果rsltaをバイパスする場合に比べて1サイクル早く演算結果rsltbをバイパスさせることができる。
【0029】
なお、例えば、実行ユニットEXが5段のステージSTGを有し、検出部DETが2段目のステージSTGに設けられるとする。この場合、命令スケジューラISは、後続依存命令の実行ユニットEXへの投入タイミングが、先行命令の最終ステージSTGでの演算結果がバイパスされて実行ユニットEXに投入されるタイミングより早くなるように、後続依存命令を発行してもよい。すなわち、命令スケジューラISは、先行命令の発行から後続依存命令の発行までのサイクルを、2サイクル以上5サイクル未満に設定してもよい。この場合にも、2次スケジューラ2Sにより、先行命令の演算結果と後続依存命令との実行ユニットEXへの投入タイミングを合わせることができる。
【0030】
以上、この実施形態においても、上述した実施形態と同様の効果を得ることができる。例えば、演算処理装置10Aは、早期終了を検出部DETにより検出した場合、途中ステージSTG1での演算結果rsltbをバイパスすることで、演算結果rsltaに比べて早く演算結果rsltbをバイパスさせることができる。
【0031】
この際、途中ステージSTG1に設けられる検出部DETにより、演算結果rsltbをバイパス可能か否かを判定することができる。このため、命令コードでは判別できないソースオペランドの値に応じて、演算結果rsltbをバイパス可能か否かを判定することができる。この結果、最終ステージSTG2から演算結果rsltaを出力する場合に比べて早く演算結果rsltbをバイパスさせることができ、演算処理装置10の処理性能を向上することができる。
【0032】
2次スケジューラ2Sが設けられるため、命令スケジューラISは、先行命令の発行から後続依存命令の発行までのサイクル数を可変にすることができる。この場合にも、先行命令の演算結果と後続依存命令との実行ユニットEXへの投入タイミングを合わせることができる。
【0033】
なお、演算処理装置10Aは、
図2の検出部DETに加えて、
図1と同様に、命令デコーダIDに検出部DETを設けてもよい。これにより、実行ユニットEXに命令が発行される前と後との両方で演算結果rsltbをバイパス可能か否かを判定することができる。この結果、検出部DETが途中ステージSTGのみに設けられる場合に比べて、演算結果rsltbのバイパス頻度を向上することができ、演算処理装置10Aの処理性能をさらに向上することができる。
【0034】
図3および
図4は、さらなる別の実施形態における演算処理装置の要部の一例を示す。
図1と同様の要素については、同じ符号を付し、詳細な説明は省略する。
図4に示す回路は、
図3に示す回路の続きを示し、A-A'線を境界として
図3に示す回路と接続される。
図3および
図4に示す演算処理装置10Bは、例えば、CPU等のプロセッサである。例えば、
図3は、命令デコーダIDおよび命令スケジューラISを含むフロントエンド側の回路を示し、
図4は、実行ユニットEXを含むバックエンド側の回路を示す。太線で示す信号線は、複数ビットのデータ線を示す。
【0035】
演算処理装置10Bは、命令デコーダID、命令スケジューラIS、レジスタファイルRF、コンパレータC1、C2、マルチプレクサMUX1、複数のFIFO(First-In First-Out)ロジック部および複数のフリップフロップFFを有する。複数のフリップフロップFFは、クロックに同期して動作する。また、演算処理装置10Bは、コンパレータC3、C4、マルチプレクサMUX2、ロジック回路LGC1-LGC4および出力制御部OUTCNTを有する。
【0036】
ロジック回路LGC1-LGC4は、命令を実行する実行ユニットの一例である。以下では、5個のFIFOロジック部は、FIFO1-FIFO5と称される。演算処理装置10Bのパイプラインの各ステージは、直列に接続されたフリップフロップFFにより区切られる。そして、命令を実行するための命令情報は、クロックサイクル毎に次のステージに転送される。
【0037】
命令デコーダIDは、命令バッファ等から受信する命令をデコードし、タグtagD、tag1およびバリッドフラグvalid等の命令情報を生成し、生成した命令情報を命令スケジューラISに出力する。タグtagDは、演算結果であるディスティネーションオペランドが格納される物理レジスタの番号を含む。タグtag1は、演算に使用するデータであるソースオペランドが格納される物理レジスタの番号を含む。バリッドフラグvalidは、タグtagDおよびタグtag1等の命令情報が有効な場合に"1"に設定される。なお、説明の簡単化のため、命令コードおよび2つ目以降のソースオペランドを示すタグは、省略されている。
【0038】
命令デコーダIDは、短縮検出部shtdet1を有する。短縮検出部shtdet1は、デコードした命令の実行ユニットによる演算結果が、ロジック回路LGC1-LGC4の全てを使用せずに得られる早期終了を検出した場合、短縮フラグshtを"1"に設定して命令スケジューラISに出力する。短縮検出部shtdet1は、デコードした命令による演算の結果が、ロジック回路LGC1-LGC4の全てを使用して得られることを検出した場合、短縮フラグshtを"0"に設定して命令スケジューラISに出力する。短縮検出部shtdet1は、デコードした命令に基づいて早期終了を検出する検出部の一例である。
【0039】
例えば、実行ユニットEXが積和演算命令等を実行する積和演算回路である場合、短縮検出部shtdet1は、デコードした命令が、乗算命令である場合、短縮フラグshtを"1"に設定する。
図3および
図4に示す破線枠は、命令デコーダIDで生成される短縮フラグshtの実行ユニットEXまでの伝搬経路と伝搬経路に含まれる回路とを示す。
【0040】
命令スケジューラISは、命令セレクタSELと複数のエントリを有するキューQとを有する。キューQは、命令デコーダIDから受信するタグtagD、tag1、バリッドフラグvalidおよび短縮フラグsht等の命令情報を順次保持する。命令セレクタSELは、キューQの複数のエントリのうち、実行ユニットEXにより実行可能な命令情報を保持しているエントリを選択し、選択した命令情報を命令として発行する。命令スケジューラISにより、命令デコーダIDからインオーダで受信した命令をアウトオブオーダで実行ユニットEXに出力することが可能になり、命令のアウトオブオーダ実行が可能になる。
【0041】
ここで、命令スケジューラISの命令セレクタSELにより選択された命令情報がFIFO1-FIFO5のフリップフロップFF1に届くまでのサイクル数は、発行レイテンシとも称される。また、命令情報がFIFO1-FIFO5のフリップフロップFF2から出力されてから実行ユニットEXによる演算が完了するまでのサイクル数は、実行レイテンシとも称される。複数のフリップフロップFF1と複数のフリップフロップFF2との各々は、命令スケジューラISから発行される命令と、レジスタファイルRFおよびバスB1、B2から転送されるソースオペランドとを保持するエントリの一例である。
【0042】
レジスタファイルRFは、演算に使用するデータ(ソースオペランド)および演算結果(ディスティネーションオペランド)をそれぞれ保持する複数のレジスタを有する。レジスタファイルRFは、タグtag1で示されるレジスタに保持されたデータDT(ソースオペランド)をFIFO4を介して実行ユニットEXに出力する。
【0043】
また、レジスタファイルRFは、バスB1またはバスB2を介して実行ユニットEXから受信する演算結果(ディスティネーションオペランド)、タグtagDおよびイネーブル信号en1、en2を書き込みポートで受信する。レジスタファイルRFは、書き込みポートで受信した演算結果を、演算結果に対応するタグtagDで示されるレジスタに格納する。
【0044】
各FIFO1-FIFO5は2段構成である。
図4に示すように、各FIFO1-FIFO5は、命令情報を各フリップフロップFF1、FF2で遅延させるか否かを制御するマルチプレクサMUXa、MUXbと、マルチプレクサMUXa、MUXbを制御する制御部CNTとを有する。制御部CNTは、演算処理装置10B内で生成されるFIFO制御信号FCNTに応じて、マルチプレクサMUXa、MUXbの選択を制御する選択信号を生成する。
【0045】
フリップフロップFF1は、マルチプレクサMUXaから出力される命令情報nextaを受け、命令情報curraとしてマルチプレクサMUXa、MUXbに出力する。フリップフロップFF2は、マルチプレクサMUXbから出力される命令情報nextbを受け、命令情報currbとしてマルチプレクサMUXbおよび実行ユニットEXに出力する。
【0046】
FIFO1-FIFO5は、命令スケジューラISから実行ユニットEXに転送される命令情報の転送サイクルを遅延させることで、命令スケジューラISが命令を発行した後に、演算結果のバイパスタイミングを調整することができる。すなわち、FIFO1-FIFO5は、命令スケジューラISにより決定されたバイパスタイミングを調整する2次スケジューラとして機能する。
【0047】
FIFO1-FIFO5を設けることにより、命令スケジューラISで予測できなかった不測の事態が発生した場合にも、ストールまたはフラッシュの発生を抑制することができる。パイプライン内に設けられるFIFO1-FIFO5を使用してバイパスタイミングを調整する手法は、OoS(Out-of-Step)と称される。また、FIFO1-FIFO5を含むパイプラインは、OoSパイプラインと称される。
【0048】
例えば、OoSパイプラインについては、以下の論文に記載されている。
葛 毅ほか, 「ギャザー/スキャッタを効率化するOut-of-Stepパイプライン」, 情報処理学会研究報告, 2021-03-18
<URL:https://ipsj.ixsq.nii.ac.jp/ej/?action=pages_view_main&active_action=repository_view_main_item_detail&item_id=210485&item_no=1&page_id=13&block_id=8>
【0049】
ここで、命令スケジューラISの命令セレクタSELにより選択された命令情報がFIFO1-FIFO5のフリップフロップFF1に届くまでのサイクル数は、発行レイテンシとも称される。また、命令情報がFIFO1-FIFO5のフリップフロップFF2から出力されてから実行ユニットEXによる演算が完了するまでのサイクル数は、実行レイテンシとも称される。
【0050】
実行レイテンシは、実行ユニットEXの全てのロジック回路LGC1-LGC4を使用して演算結果が出力される場合の最悪実行レイテンシと、ロジック回路LGC1-LGC2のみを使用して演算結果が出力される場合の短縮実行レイテンシとがある。
図4に示す例では、最悪実行レイテンシは"4"であり、短縮実行レイテンシは"2"である。
【0051】
バスB1は、最悪実行レイテンシでのバイパス時の演算結果が転送され、バスB2は、短縮実行レイテンシでのバイパス時の演算結果が転送される。バスB1、B2の各々は、演算結果を転送するデータ線と、タグtagDを転送する信号線と、バイパスが有効であることを示すイネーブル信号en(en1またはen2)を転送する信号線とを含む。
【0052】
なお、バイパスタイミングを調整可能なOoS手法を採用する場合、短縮実行レイテンシは、最悪実行レイテンシ未満であれば、最小の短縮実行レイテンシより大きくてもよい。命令スケジューラISは、命令に依存性がある場合、先行依存命令の演算結果が短縮実行レイテンシでバイパスされるタイミングに合わせて、後続依存命令を発行する。
【0053】
図4では、演算器であるロジック回路LGC1-LGC4は、浮動小数点積和演算回路FMA(Fused Multiply-Add)の実行ユニットEXとして機能する。以下では、浮動小数点積和演算回路FMAは、単にFMAとも称される。例えば、浮動小数点乗算器fmulの機能がロジック回路LGC1、LGC2により実現され、浮動小数点加算器faddの機能がロジック回路LGC3、LGC4により実現される。
【0054】
このため、命令デコーダIDが浮動小数点乗算命令をデコードした場合、乗算器fmulのロジック回路LGC2が出力するデータが演算結果となる。浮動小数点乗算命令をデコードした場合、命令デコーダIDは、早期終了を検出し、乗算結果をロジック回路LGC2の出力からバスB2を介してバイパスさせるために"1"の短縮フラグshtを付加する。
【0055】
一方、命令デコーダIDが浮動小数点積和演算命令をデコードした場合、加算器faddが出力するデータが演算結果となる。また、命令デコーダIDが浮動小数点加算命令をデコードした場合、加算器faddが出力するデータが演算結果となる。これらの場合、命令デコーダIDは、早期終了を検出せず、加算結果をロジック回路LGC4の出力からバスB1を介してバイパスさせるために"0"の短縮フラグshtを付加する。
【0056】
加算命令を実行するロジック回路LGC1、LGC2のうちのロジック回路LGC2は、短縮検出部shtdet2を有する。短縮検出部shtdet2は、"a*b+c(*は乗算符号)"で示される浮動小数点積和演算命令の"c"が"0"であることを検出した場合、早期終了を検出し、"1"に設定した短縮検出信号sht2を出力制御部OUTCNTに出力する。
【0057】
短縮検出部shtdet2は、実行ユニットEXの途中ステージの演算結果に基づいて早期終了を検出する検出部の一例である。なお、短縮検出部shtdet2は、ロジック回路LGC1、LGC2で実行する命令が、浮動小数点乗算命令である場合にも、早期終了を検出し、"1"に設定した短縮検出信号sht2を出力制御部OUTCNTに出力してもよい。
【0058】
短縮検出部shtdet2により、実行ユニットEXの内部で生成されるデータに応じて、演算結果を短縮実行レイテンシでバイパスさせるか最悪実行レイテンシでバイパスさせるかを決定することができる。すなわち、適切な実行レイテンシが命令の発行時に定まらない場合にも、命令の発行後に適切な実行レイテンシを設定することができる。なお、
図3および
図4では、説明の簡単化のため、着目する演算の実行ユニット(
図4ではFMA)と、その実行ユニットに関連する回路要素が示される。
【0059】
演算処理装置10Bは、整数演算回路または論理演算回路ALU(Arithmetic Logic Unit)等を含む他の実行ユニットEXを有してもよい。この場合、短縮検出部shtdet1は、複数の実行ユニットEXに共通に設けられ、短縮検出部shtdet2は、実行ユニットEX毎に設けられる。
【0060】
出力制御部OUTCNTは、"1"のバリッドフラグvalidおよび"1"の短縮フラグshtを受信した場合、"0"のイネーブル信号en1と"1"のイネーブル信号en2とを出力する。出力制御部OUTCNTは、"1"のバリッドフラグvalidおよび"1"の短縮フラグsht2を受信した場合、"0"のイネーブル信号en1と"1"のイネーブル信号en2とを出力する。また、出力制御部OUTCNTは、"1"のバリッドフラグvalidおよび"0"の短縮フラグsht、sht2を受信した場合、"1"のイネーブル信号en1と"0"のイネーブル信号en2とを出力する。
【0061】
イネーブル信号en2は、バスB2を介してコンパレータC2、C4およびレジスタファイルRFに転送される。イネーブル信号en1は、加算器faddに設けられるフリップフロップFFおよびバスB1を介してコンパレータC1、C3およびレジスタファイルRFに転送される。
【0062】
コンパレータC1は、"1"のイネーブル信号en1の受信時、バスB1からのタグtagDとFIFO5からのタグtag1(nexta)とが一致している場合、バスB1からの演算結果をマルチプレクサMUX1に選択させる信号を出力する。コンパレータC2は、"1"のイネーブル信号en2の受信時、バスB2からのタグtagDとFIFO5からのタグtag1(nexta)とが一致している場合、バスB2からの演算結果をマルチプレクサMUX1に選択させる信号を出力する。
【0063】
マルチプレクサMUX1は、コンパレータC1から選択信号を受信した場合、バスB1からの演算結果を選択してフリップフロップFF1に出力する。マルチプレクサMUX1は、コンパレータC2から選択信号を受信した場合、バスB2からの演算結果を選択してフリップフロップFF1に出力する。マルチプレクサMUX1は、コンパレータC1、C2のいずれからも選択信号を受信しない場合、FIFO4からのデータnexta(すなわち、レジスタファイルRFからのデータDT)を選択してフリップフロップFF1に出力する。
【0064】
コンパレータC3は、"1"のイネーブル信号en1の受信時、バスB1からのタグtagDとFIFO5からのタグtag1(nextb)とが一致している場合、バスB1からの演算結果をマルチプレクサMUX2に選択させる信号を出力する。コンパレータC4は、"1"のイネーブル信号en2の受信時、バスB2からのタグtagDとFIFO5からのタグtag1(nextb)とが一致している場合、バスB2からの演算結果をマルチプレクサMUX2に選択させる信号を出力する。
【0065】
出力制御回路OUTCNTおよびコンパレータC1-C4は、短縮検出部shtdet1、shtdet2の一方または両方が早期終了を検出した場合、途中ステージでの演算結果を実行ユニットEXの入力にバイパスするバイパス制御部の一例である。この実施形態では、短縮検出部shtdet1、shtdet2の一方または両方が早期終了を検出した場合、出力制御回路OUTCNTは、コンパレータC1-C4を制御して浮動小数点乗算器fmulの乗算結果をバイパスする。
【0066】
マルチプレクサMUX2は、コンパレータC3から選択信号を受信した場合、バスB1からの演算結果を選択してフリップフロップFF2に出力する。マルチプレクサMUX2は、コンパレータC4から選択信号を受信した場合、バスB2からの演算結果を選択してフリップフロップFF2に出力する。マルチプレクサMUX2は、コンパレータC3、C4のいずれからも選択信号を受信しない場合、FIFO4からのデータnextb(すなわち、レジスタファイルRFからのデータDT)を選択してフリップフロップFF2に出力する。
【0067】
なお、命令デコーダIDの短縮検出部shtdet1は、設けられなくてもよい。この場合、破線枠で示す短縮フラグshtを保持するキューQと、短縮フラグshtを転送するフリップフロップFFおよびFIFO3とは、設けられない。また、出力制御部OUTCNTは、短縮検出部shtdet2による検出結果のみに基づいて、短縮実行レイテンシでのバイパスを制御する。
【0068】
演算処理装置10Bは、SIMD演算命令を実行可能なSIMDプロセッサでもよい。この場合、演算処理装置10Bは、互いに異なるデータを使用して1つの命令を並列に実行可能な複数の実行ユニットEXを有する。レジスタファイルRFは、複数の実行ユニットEXで使用するデータを保持する複数のレジスタを有する。
【0069】
SIMDプロセッサに搭載される短縮検出部shtdet1は、複数の実行ユニットEXに共通に共通に設けられ、各実行ユニット用の命令に基づいて早期終了を検出する。短縮検出部shtdet2は、実行ユニットEX毎に設けられ、実行ユニットEX毎に早期終了を検出する。また、複数組のコンパレータC1、C2、複数のマルチプレクサMUX1、複数組のコンパレータC3、C4、複数のマルチプレクサMUX2および出力制御部OUTCNTが、複数の実行ユニットEXにそれぞれ対応して設けられる。
【0070】
図5および
図6は、他の演算処理装置の要部の一例を示す。
図3および
図4と同様の要素については、同じ符号を付し、詳細な説明は省略する。
図5および
図6に示す演算処理装置20は、
図3および
図4に示す演算処理装置10BからFIFO1-FIFO5および短縮フラグsht、sht2に関連する回路を削除した構成と同様である。
【0071】
演算処理装置20に搭載されるFMAの実行レイテンシは、ロジック回路LGC1-LGC4に対応する"4"に固定されており、短縮実行レイテンシは存在しない。実行ユニットEXから出力される演算結果のバイパス経路は、ロジック回路LGC4の出力に接続されるバスB1のみである。また、演算処理装置20は、FIFO1-FIFO5を使用したOoS手法を採用しないため、演算結果のバイパスは、マルチプレクサMUX2による1箇所のみで実施される。
【0072】
図7および
図8は、さらなる他の演算処理装置の要部の一例を示す。
図3および
図4と同様の要素については、同じ符号を付し、詳細な説明は省略する。
図7および
図8に示す演算処理装置30は、
図3および
図4に示す演算処理装置10Bから短縮フラグsht、sht2に関連する回路を削除した構成と同様である。
【0073】
演算処理装置30に搭載されるFMAの実行レイテンシは、
図5および
図6に示した演算処理装置20と同様に、ロジック回路LGC1-LGC4に対応する"4"に固定されており、短縮実行レイテンシは存在しない。実行ユニットEXから出力される演算結果のバイパス経路は、ロジック回路LGC4の出力に接続されるバスB1のみである。但し、演算処理装置30は、FIFO1-FIFO5(FIFO3を除く)を使用したOoS手法を採用するため、演算結果のバイパスは、マルチプレクサMUX1、MUX2による2箇所で実施可能である。
【0074】
図9は、浮動小数点積和演算を実行する場合のパイプライン動作の例を示す。
図9に示す例では、先行する浮動小数点積和演算fmaddと、この浮動小数点積和演算命令fmaddと依存関係がある後続依存命令とが順次実行される。図中の矩形は、サイクル(すなわち、ステージ)を示す。符号I0-I4は、命令の発行ステージを示し、符号E0-E3は、命令の実行ステージを示す。先行命令の実行ステージE0、E1は、浮動小数点乗算器fmulによる乗算命令の実行サイクルを示す。先行命令の実行ステージE2、E3は、浮動小数点加算器faddによる加算命令の実行サイクルを示す。
【0075】
演算処理装置20、30の命令スケジューラISは、先行命令(fmadd)を発行した後、浮動小数点積和演算命令fmaddの実行レイテンシ(="4")後に後続依存命令を発行する。演算処理装置10Bの命令スケジューラISは、先行命令(fmadd)を発行した後、浮動小数点積和演算命令fmaddの短縮実行レイテンシ(="2")後に後続依存命令を発行する。
【0076】
先行命令fmadd(a*b+c)の"c"が"0"でない場合、演算結果は、実行ステージE3により得られる。演算処理装置20、30では、先行命令の実行ステージE3による演算結果は、先行命令の実行ステージE3の次のサイクルで後続依存命令の実行ステージE0にバイパスされる。演算処理装置10Bでは、後続依存命令の発行ステージI4の次のサイクルで先行命令の演算結果が得られない。このため、後続依存命令は、FIFO1-FIFO5による2次スケジューラにより2サイクルストールされる。
【0077】
そして、先行命令の実行ステージE3による演算結果は、先行命令の実行ステージE3の次のサイクルで後続依存命令の実行ステージE0にバイパスされる。したがって、先行依存命令の演算結果が短縮実行レイテンシでバイパスされるタイミングに合わせて後続依存命令を発行する場合にも、後続依存命令の実行ステージE3は、バイパスされる演算結果を受信することができる。この結果、演算処理装置10Bの誤動作を抑止することができる。
【0078】
先行命令fmadd(a*b+c)の"c"が"0"の場合、演算結果は、実行ステージE1により得られる。演算処理装置20、30では、先行命令の実行ステージE3の次のサイクルで先行命令の演算結果が後続依存命令の実行ステージE0にバイパスされる。これに対して、演算処理装置10Bでは、先行命令の実行ステージE1の次のサイクルで先行命令の演算結果を後続依存命令の実行ステージE0にバイパスすることができる。これにより、演算処理装置10Bは、後続依存命令の演算結果を、演算処理装置20、30に比べて、2サイクル早く出力することができ、演算の処理効率を向上することができる。
【0079】
図10は、浮動小数点積和演算を実行する場合の別の観点でのパイプライン動作の例を示す。
図9と同様の動作については、詳細な説明は省略する。
図10においても、
図9と同様に、先行する浮動小数点積和演算fmaddと、この浮動小数点積和演算命令fmaddと依存関係がある後続依存命令とが順次実行される。
【0080】
但し、
図10では、発行ステージは、2ステージI0、I1であり、後続依存命令の実行ステージは、1ステージE0である。先行命令の実行ステージE0、E1は、浮動小数点乗算器fmulによる乗算命令の実行サイクルを示す。先行命令の実行ステージE2、E3は、浮動小数点加算器faddによる加算命令の実行サイクルを示す。
【0081】
最悪実行レイテンシで常に動作させる場合で、先行命令fmadd(a*b+c)の"c"が"0"の場合、先行命令の演算結果が加算命令の実行サイクルE2、E3後にバイパスされるため、後続依存命令に無駄な待ちが発生してしまう。
【0082】
一方、短縮実行レイテンシで常に動作させる場合で、先行命令fmadd(a*b+c)の"c"が"0"でない場合、後続依存命令が先行命令の実行の完了前にソースオペランドを取得する。これにより、後続依存命令は、キャンセルされ再発行される。後続依存命令のキャンセルと再発行は、命令の処理性能を著しく低下させるため、短縮実行レイテンシで常に動作させる手法は、好ましくない。
【0083】
これに対して、
図3および
図4に示した演算処理装置10Bでは、短縮レイテンシで命令が発行される場合にも、FIFO1-FIFO5でのストールによりバイパスの待ち合わせを遅らせることができる。この結果、先行命令fmadd(a*b+c)の"c"が"0"でない場合にも、後続依存命令のキャンセルおよび再発行を抑止することができる。また、演算処理装置10Bでは、先行命令fmadd(a*b+c)の"c"が"0"でない場合、短縮レイテンシで先行命令の演算結果をバイパスさせることができる。
【0084】
以上、この実施形態においても、上述した実施形態と同様の効果を得ることができる。例えば、短縮検出部shtdet1により、実行ユニットEXに発行される演算命令に応じて、演算結果を短縮実行レイテンシでバイパスさせるか最悪実行レイテンシでバイパスさせるかを決定することができる。短縮検出部shtdet2により、実行ユニットEXの内部で生成されるデータに応じて、演算結果を短縮実行レイテンシでバイパスさせるか最悪実行レイテンシでバイパスさせるかを決定することができる。これにより、短縮実行レイテンシで演算結果を出力可能な場合、演算結果を短縮実行レイテンシでバイパスさせることができる。
【0085】
例えば、FMAで乗算命令を実行する場合に、演算結果を短縮実行レイテンシでバイパスさせることができる。また、FMAで積和演算(a*b+c)を実行する場合で"c"が"0"である場合、演算結果を短縮実行レイテンシでバイパスさせることができる。この結果、短縮実行レイテンシでバイパスさせない場合に比べて、演算処理装置10Bの処理性能を向上することができる。
【0086】
さらに、この実施形態では、短縮検出部shtdet1、shtdet2が命令デコーダIDとロジック回路LGC2とにそれぞれ設けられる。これにより、命令とソースオペランドとの両方で演算結果rsltbをバイパス可能か否かを判定することができる。この結果、短縮実行レイテンシでの演算結果のバイパス頻度を向上することができ、演算処理装置10Bの処理性能をさらに向上することができる。
【0087】
図11および
図12は、別の実施形態における演算処理装置の要部の一例を示す。
図3および
図4と同様の要素については、同じ符号を付し、詳細な説明は省略する。
図11および
図12に示す演算処理装置10Cは、例えば、CPU等のプロセッサである。
【0088】
演算処理装置10Cは、
図12に示すバスB1、B2をバスB3に集約する3つのマルチプレクサMUX3(MUX31、MUX32、MUX33(
図12))を有することを除き、
図3および
図4に示した演算処理装置10Bと同様の構成を有する。各マルチプレクサMUX3は、短縮検出部shtdet1または短縮検出部shtdet2が実行ユニットEXによる演算の早期終了を検出した場合、途中ステージであるロジック回路LGC2での演算結果を選択する。そして、各マルチプレクサMUX3は、選択した演算結果を実行ユニットEXの入力およびレジスタファイルRFに転送する。各マルチプレクサMUX3は、途中ステージの演算結果または最終ステージの演算結果を選択して実行ユニットの入力に出力する選択部の一例である。
【0089】
例えば、マルチプレクサMUX31は、イネーブル信号en1が"1"の場合、バスB1に転送される演算結果をバスB3に出力し、イネーブル信号en1が"0"の場合、バスB2に転送される演算結果をバスB3に出力する。マルチプレクサMUX32は、イネーブル信号en1が"1"の場合、バスB1に転送されるタグtagDをバスB3に出力し、イネーブル信号en1が"0"の場合、バスB2に転送されるタグtagDをバスB3に出力する。
【0090】
マルチプレクサMUX33は、イネーブル信号en1が"1"の場合、バスB1に転送されるイネーブル信号en1をイネーブル信号enとしてバスB3に出力する。また、マルチプレクサMUX33は、イネーブル信号en1が"0"の場合、バスB2に転送されるイネーブル信号en2をイネーブル信号enとしてバスB3に出力する。
【0091】
なお、各マルチプレクサMUX3は、イネーブル信号en1、en2がともに"1"の場合、バスB1に転送されるデータおよび情報をバスB3に転送する。すなわち、イネーブル信号en1、en2がともに"1"の場合、最悪実行レイテンシによるバイパス動作が優先される。
【0092】
コンパレータC1、C3は、イネーブル信号en1の代わりにイネーブル信号enを受けることを除き、
図3および
図4のコンパレータC1、C3と同じである。マルチプレクサMUX1は、コンパレータC1から選択信号を受信した場合、バスB3からの演算結果を選択する。マルチプレクサMUX1は、コンパレータC1から選択信号を受信しない場合、FIFO4からのデータnexta(すなわち、レジスタファイルRFからのデータDT)を選択する。
【0093】
マルチプレクサMUX2は、コンパレータC3から選択信号を受信した場合、バスB3からの演算結果を選択する。マルチプレクサMUX2は、コンパレータC3から選択信号を受信しない場合、FIFO4からのデータnextb(すなわち、レジスタファイルRFからのデータDT)を選択する。
【0094】
以上、この実施形態においても、上述した実施形態と同様の効果を得ることができる。例えば、短縮検出部shtdet1、shtdet2により、短縮実行レイテンシでバイパスさせるか最悪実行レイテンシでバイパスさせるかを決定することができる。これにより、短縮実行レイテンシで演算結果を出力可能な場合、演算結果を短縮実行レイテンシでバイパスさせることができる。この結果、短縮実行レイテンシでバイパスさせない場合に比べて、演算処理装置10Cの処理性能を向上することができる。
【0095】
さらに、この実施形態では、マルチプレクサMUX3を設けることで、バスB1、B2をバスB3に集約することができ、
図3および
図4に比べて配線領域を小さくすることができる。また、
図3および
図4に対して、コンパレータC2、C4を削除することができ、レジスタファイルRFの書き込みポート数を削減することができる。この結果、演算処理装置10Cの回路規模を演算処理装置10Bの回路規模より小さくすることができる。
【0096】
図13および
図14は、別の実施形態における演算処理装置の要部の一例を示す。
図3および
図4と同様の要素については、同じ符号を付し、詳細な説明は省略する。
図13および
図14に示す演算処理装置10Dは、例えば、CPU等のプロセッサである。
【0097】
演算処理装置10Dは、
図3および
図4に示す演算処理装置10Bから短縮フラグshtに関連する回路を削除した構成と同様である。このため、
図13に示す命令デコーダIDは、
図3に示した短縮検出部shtdet1を持たない。演算結果を短縮実行レイテンシまたは最悪実行レイテンシのいずれでバイパスさせるかは、ロジック回路LGC2に設けられる短縮検出部shtdet2により決定される。
【0098】
出力制御回路OUTCNTは、"1"のバリッドフラグvalidおよび"1"の短縮フラグsht2を受信した場合、"0"のイネーブル信号en1と"1"のイネーブル信号en2とを出力する。また、出力制御部OUTCNTは、"1"のバリッドフラグvalidおよび"0"の短縮フラグsht2を受信した場合、"1"のイネーブル信号en1と"0"のイネーブル信号en2とを出力する。これにより、演算処理装置10Dは、先行命令fmadd(a*b+c)の"c"が"0"の場合、演算結果を短縮実行レイテンシでバイパスすることができる。
図13に示す命令スケジューラISは、先行命令(fmadd)を発行した後、浮動小数点積和演算命令の短縮実行レイテンシ(="2")後に後続依存命令を発行する。
【0099】
以上、この実施形態においても、上述した実施形態と同様の効果を得ることができる。例えば、短縮検出部shtdet2により、短縮実行レイテンシでバイパスさせるか最悪実行レイテンシでバイパスさせるかを決定することができる。これにより、短縮実行レイテンシで演算結果を出力可能な場合、演算結果を短縮実行レイテンシでバイパスさせることができる。この結果、短縮実行レイテンシでバイパスさせない場合に比べて、演算処理装置10Dの処理性能を向上することができる。
【0100】
図15および
図16は、別の実施形態における演算処理装置の要部の一例を示す。
図3および
図4と同様の要素については、同じ符号を付し、詳細な説明は省略する。
図15および
図16に示す演算処理装置10Eは、例えば、CPU等のプロセッサである。
【0101】
演算処理装置10Eは、
図3および
図4に示す演算処理装置10BからFIFO1-FIFO5および短縮フラグsht2に関連する回路を削除した構成と同様である。このため、
図16に示すロジック回路LGC2は、
図4に示した短縮検出部shtdet2を持たない。演算結果を短縮実行レイテンシまたは最悪実行レイテンシのいずれでバイパスさせるかは、命令デコーダIDに設けられた短縮検出部shtdet1により決定される。
【0102】
出力制御回路OUTCNTは、"1"のバリッドフラグvalidおよび"1"の短縮フラグshtを受信した場合、"0"のイネーブル信号en1と"1"のイネーブル信号en2とを出力する。また、出力制御部OUTCNTは、"1"のバリッドフラグvalidおよび"0"の短縮フラグshtを受信した場合、"1"のイネーブル信号en1と"0"のイネーブル信号en2とを出力する。
【0103】
これにより、演算処理装置10Eは、浮動小数点積和演算回路で浮動小数点乗算命令を実行することを短縮検出部shtdet1で検出した場合、演算結果を短縮実行レイテンシでバイパスすることができる。
図15に示す命令スケジューラISは、先行命令(fmadd)を発行した後、浮動小数点積和演算命令の短縮実行レイテンシ(="2")後に後続依存命令を発行する。
【0104】
以上、この実施形態においても、上述した実施形態と同様の効果を得ることができる。例えば、短縮検出部shtdet1により、演算結果を短縮実行レイテンシでバイパスさせるか最悪実行レイテンシでバイパスさせるかを決定することができる。これにより、短縮実行レイテンシで演算結果を出力可能な場合、演算結果を短縮実行レイテンシでバイパスさせることができる。この結果、短縮実行レイテンシでバイパスさせない場合に比べて、演算処理装置10Eの処理性能を向上することができる。
【0105】
図17および
図18は、別の実施形態における演算処理装置の要部の一例を示す。
図3および
図4と同様の要素については、同じ符号を付し、詳細な説明は省略する。
図17および
図18に示す演算処理装置10Fは、例えば、CPU等のプロセッサである。
【0106】
演算処理装置10Fは、
図3および
図4に示す演算処理装置10BからFIFO1-FIFO5部および短縮フラグsht2に関連する回路を削除した構成と同様である。このため、
図18に示す実行ユニットEXは、
図4に示した短縮検出部shtdet2を持たない。演算結果を短縮実行レイテンシまたは最悪実行レイテンシのいずれでバイパスさせるかは、命令デコーダIDに設けられる短縮検出部shtdet1により決定される。
【0107】
演算処理装置10Fの実行ユニットEXは、シフト演算を実行可能な直列に接続されたロジック回路LGC1、LGC2を含む論理演算回路ALUを有する。ロジック回路LGC1は、"1"から"7"までのシフト量を処理するシフト回路の一例である。ロジック回路LGC2は、"8"から"63"までのシフト量を処理するシフト回路の一例である。
【0108】
そして、命令デコーダIDの短縮検出部shtdet1は、シフト量が即値で与えられるシフト命令において、シフト量が"1"から"7"までの場合、短縮フラグを"1"に設定し、シフト量が"8"から"63"までの場合、短縮フラグを"0"に設定する。短縮検出部shtdet1が設定した短縮フラグshtは、出力制御回路OUTCNTに転送される。
【0109】
出力制御回路OUTCNTは、"1"のバリッドフラグvalidおよび"1"の短縮フラグshtを受信した場合、"0"のイネーブル信号en1と"1"のイネーブル信号en2とを出力する。また、出力制御部OUTCNTは、"1"のバリッドフラグvalidおよび"0"の短縮フラグshtを受信した場合、"1"のイネーブル信号en1と"0"のイネーブル信号en2とを出力する。
【0110】
これにより、演算処理装置10Fは、先行のシフト命令のシフト量が"1"から"7"までの場合、シフト命令の演算結果を短縮実行レイテンシでバイパスすることができる。演算処理装置10Eは、先行のシフト命令のシフト量が"8"から"63"までの場合、シフト命令の演算結果を最悪実行レイテンシでバイパスする。
図17に示す命令スケジューラISは、先行命令(シフト命令)を発行した後、シフト命令の短縮実行レイテンシ(="1")後に後続依存命令を発行する。通常、論理演算回路ALUは、1サイクルで演算が完了するように実装されるので性能的なメリットは少ないと考えられる。しかしながら、例えば、さらなる周波数の向上が期待できる。
【0111】
以上、この実施形態においても、上述した実施形態と同様の効果を得ることができる。例えば、短縮検出部shtdet1により、演算結果を短縮実行レイテンシでバイパスさせるか最悪実行レイテンシでバイパスさせるかを決定することができる。これにより、短縮実行レイテンシで演算結果を出力可能な場合、演算結果を短縮実行レイテンシでバイパスさせることができる。
【0112】
例えば、シフト量が即値で与えられるシフト命令において、シフト量が少なくロジック回路LGC1で演算結果が得られる場合、演算結果を短縮実行レイテンシでバイパスさせることができる。この結果、短縮実行レイテンシでバイパスさせない場合に比べて、演算処理装置10Fの処理性能を向上することができる。
【0113】
図19および
図20は、別の実施形態における演算処理装置の要部の一例を示す。
図3および
図4と同様の要素については、同じ符号を付し、詳細な説明は省略する。
図19および
図20に示す演算処理装置10Gは、例えば、CPU等のプロセッサである。
【0114】
演算処理装置10Gは、
図3および
図4に示す演算処理装置10BからFIFO1-FIFO5部および短縮フラグsht2に関連する回路を削除した構成と同様である。このため、
図20に示すロジック回路LGC2は、
図4に示した短縮検出部shtdet2を持たない。演算結果を短縮実行レイテンシまたは最悪実行レイテンシのいずれでバイパスさせるかは、命令デコーダIDに設けられる短縮検出部shtdet1により決定される。
【0115】
演算処理装置10Gの実行ユニットEXは、ロジック回路LGC1、LGC2、LGC3を含む浮動小数点演算回路を有する。ロジック回路LGC1、LGC2は、浮動小数点の演算を実行する浮動小数点演算器として動作する。ロジック回路LGC3は、演算結果に"+1"加算する丸め処理を実行する丸め処理回路として動作する。
【0116】
例えば、演算処理装置10Gには、IEEE(The Institute of Electrical and Electronics Engineers)754(浮動小数点数演算標準)が採用される。IEEE754の丸めモードには、"round to nearest"、"round to zero"、"round to +無限大"、"round to -無限大"がある。4つの丸めモードのうち、"round to zero"は"+1"加算が発生しない。
【0117】
命令デコーダIDの短縮検出部shtdet1は、丸めモードが"round to zero"の浮動小数点演算命令をデコードしたときに早期終了を検出し、短縮フラグshtを"1"に設定する。短縮検出部shtdet1は、丸めモードが"round to zero"以外の浮動小数点演算命令をデコードしたときに短縮フラグshtを"0"に設定する。
【0118】
これにより、丸めモードが"round to zero"の浮動小数点乗算命令を実行する場合、演算結果を短縮実行レイテンシでバイパスすることができる。
図19に示す命令スケジューラISは、先行命令(浮動小数点演算命令)を発行した後、浮動小数点演算の短縮実行レイテンシ(="2")後に後続依存命令を発行する。
【0119】
以上、この実施形態においても、上述した実施形態と同様の効果を得ることができる。例えば、短縮検出部shtdet1により、演算結果を短縮実行レイテンシでバイパスさせるか最悪実行レイテンシでバイパスさせるかを決定することができる。これにより、短縮実行レイテンシで演算結果を出力可能な場合、演算結果を短縮実行レイテンシでバイパスさせることができる。
【0120】
例えば、丸めモードが"round to zero"の浮動小数点演算命令をデコードした場合、演算結果を短縮実行レイテンシでバイパスさせることができる。この結果、短縮実行レイテンシでバイパスさせない場合に比べて、演算処理装置10Gの処理性能を向上することができる。
【0121】
図21および
図22は、別の実施形態における演算処理装置の要部の一例を示す。
図3および
図4と同様の要素については、同じ符号を付し、詳細な説明は省略する。
図21および
図22に示す演算処理装置10Hは、例えば、CPU等のプロセッサである。
【0122】
演算処理装置10Hは、
図3および
図4に示す演算処理装置10Bにおける短縮フラグshtに関連する回路を削除している。このため、
図21に示す命令デコーダIDは、
図3に示した短縮検出部shtdet1を持たない。短縮検出部shtdet2は、ロジック回路LGC4に搭載される。
【0123】
演算処理装置10Hは、
図3および
図4に示す演算処理装置10BのFMAに、加算結果が非正規化数である場合の処理を実行するロジック回路LGC5を追加している。ロジック回路LGC5は、ロジック部LGC1-LGC4での演算結果が非正規化数である場合に処理を実行する非正規化数処理回路として動作する。非正規化数は、浮動小数点数の値を正規化した状態では表せない"0"に近い値を正規化せずに表現した数である。演算処理装置10Hのその他の構成は、
図3および
図4に示した演算処理装置10Bの構成と同様である。
【0124】
この実施形態のFMAでは、短縮実行レイテンシは、積和演算(fmul+fadd)の実行に掛かる4サイクルに設定され、最悪実行レイテンシは、積和演算の実行と非正規化数処理の実行とに掛かる5サイクルに設定される。短縮検出部shtdet2は、ロジック回路LGC4により求められた積和演算結果が非正規化数でない場合、早期終了を検出し、短縮フラグsht2を"1"に設定する。短縮検出部shtdet2は、ロジック回路LGC4により求められた積和演算結果が非正規化数である場合、短縮フラグsht2を"0"に設定する。
【0125】
これにより、積和演算結果が非正規化数でない場合、演算結果を短縮実行レイテンシでバイパスすることができる。
図21に示す命令スケジューラISは、先行命令(積和演算命令)を発行した後、浮動小数点積和演算命令の短縮実行レイテンシ(="4")後に後続依存命令を発行する。
【0126】
以上、この実施形態においても、上述した実施形態と同様の効果を得ることができる。例えば、短縮検出部shtdet2により、演算結果を短縮実行レイテンシでバイパスさせるか最悪実行レイテンシでバイパスさせるかを決定することができる。これにより、短縮実行レイテンシで演算結果を出力可能な場合、演算結果を短縮実行レイテンシでバイパスさせることができる。
【0127】
例えば、積和演算結果が非正規化数でない場合、演算結果を短縮実行レイテンシでバイパスさせることができる。この結果、短縮実行レイテンシでバイパスさせない場合に比べて、演算処理装置10Hの処理性能を向上することができる。
【0128】
図23および
図24は、別の実施形態における演算処理装置の要部の一例を示す。
図3および
図4と同様の要素については、同じ符号を付し、詳細な説明は省略する。
図23および
図24に示す演算処理装置10Iは、例えば、CPU等のプロセッサである。
【0129】
演算処理装置10Iは、
図3および
図4に示す演算処理装置10Bにおける短縮フラグshtに関連する回路を削除している。このため、
図23に示す命令デコーダIDは、
図3に示した短縮検出部shtdet1を持たない。
【0130】
演算処理装置10Iの実行ユニットEXは、
図20と同様に、浮動小数点演算命令を実行するロジック回路LGC1、LGC2、LGC3を含む浮動小数点演算回路を有する。ロジック回路LGC1、LGC2は、浮動小数点の演算を実行する浮動小数点演算器として動作する。ロジック回路LGC3は、演算結果に"+1"加算する丸め処理を実行する丸め処理回路として動作する。
【0131】
短縮検出部shtdet2は、浮動小数点演算の丸め処理で"+1"加算が発生しない場合、早期終了を検出し、短縮フラグsht2を"1"に設定する。短縮検出部shtdet2は、浮動小数点演算の丸め処理で"+1"加算が発生する場合に短縮フラグsht2を"0"に設定する。
【0132】
これにより、浮動小数点演算の丸め処理で"+1"加算が発生しない場合、演算結果を短縮実行レイテンシでバイパスすることができる。
図25に示す命令スケジューラISは、先行命令(浮動小数点演算命令)を発行した後、浮動小数点演算命令の短縮実行レイテンシ(="2")後に後続依存命令を発行する。
【0133】
なお、
図19と同様に、命令デコーダIDは、丸めモードが"round to zero"の浮動小数点演算命令をデコードしたときに短縮フラグshtを"1"に設定する短縮検出部shtdet1を有してもよい。このとき、出力制御回路OUTCNTは、
図4と同様に、短縮検出部shtdet1からの短縮フラグshtと短縮検出部shtdet2からの短縮フラグsht2を受けて動作する。
【0134】
この場合、丸めモードが"round to zero"の浮動小数点演算命令の実行時、演算結果は、短縮検出部shtdet1からのフラグshtにより短縮実行レイテンシでバイパスされる。短縮検出部shtdet2は、丸めモードが"round to zero"の浮動小数点演算命令の丸め処理で"+1"加算が発生しない場合、早期終了を検出し、短縮フラグsht2を"1"に設定する。
【0135】
以上、この実施形態においても、上述した実施形態と同様の効果を得ることができる。例えば、短縮検出部shtdet2により、演算結果を短縮実行レイテンシでバイパスさせるか最悪実行レイテンシでバイパスさせるかを決定することができる。これにより、短縮実行レイテンシで演算結果を出力可能な場合、演算結果を短縮実行レイテンシでバイパスさせることができる。
【0136】
例えば、浮動小数点演算の丸め処理で"+1"加算が発生しない場合、演算結果を短縮実行レイテンシでバイパスさせることができる。この結果、短縮実行レイテンシでバイパスさせない場合に比べて、演算処理装置10Iの処理性能を向上することができる。
【0137】
図25および
図26は、別の実施形態における演算処理装置の要部の一例を示す。
図3および
図4と同様の要素については、同じ符号を付し、詳細な説明は省略する。
図25および
図26に示す演算処理装置10Jは、例えば、CPU等のプロセッサである。
【0138】
演算処理装置10Jは、
図3および
図4に示す演算処理装置10Bにおける短縮フラグshtに関連する回路を削除している。このため、
図25に示す命令デコーダIDは、
図3に示した短縮検出部shtdet1を持たない。短縮検出部shtdet2は、ロジック回路LGC2に搭載される。
【0139】
演算処理装置10Jの実行ユニットEXは、浮動小数点加算命令を実行するロジック回路LGC1、LGC2、LGC3を含む浮動小数点加算回路を有する。ロジック回路LGC1、LGC2は、加算処理を実行する浮動小数点加算器として動作する。ロジック回路LGC3は、加算結果の正規化処理(桁合わせのシフト処理)を実行する正規化処理回路として動作する。
【0140】
短縮検出部shtdet2は、ロジック回路LGC2により求められた加算結果(例えば、減算結果)が、最後の桁合わせの正規化(シフト処理)を必要とするか否かを検出する。例えば、短縮検出部shtdet2は、仮数部を参照することで、既に正規化されているか否かを検出する。ここで、減算する値同士が離れている場合、最後の正規化が不要な場合がある。
【0141】
短縮検出部shtdet2は、ロジック回路LGC2による演算後に桁合わせする正規化処理が不要な場合、早期終了を検出し、短縮フラグsht2を"1"に設定する。短縮検出部shtdet2は、ロジック回路LGC2による演算後に桁合わせする正規化処理が必要な場合、短縮フラグsht2を"0"に設定する。
【0142】
これにより、加算結果の最後の正規化処理が不要な場合、演算結果を短縮実行レイテンシでバイパスすることができる。
図25に示す命令スケジューラISは、先行命令(浮動小数点加算命令)を発行した後、浮動小数点加算命令の短縮実行レイテンシ(="2")後に後続依存命令を発行する。
【0143】
以上、この実施形態においても、上述した実施形態と同様の効果を得ることができる。例えば、短縮検出部shtdet2により、演算結果を短縮実行レイテンシでバイパスさせるか最悪実行レイテンシでバイパスさせるかを決定することができる。これにより、短縮実行レイテンシで演算結果を出力可能な場合、演算結果を短縮実行レイテンシでバイパスさせることができる。
【0144】
例えば、浮動小数点加算回路による加算で最後の桁合わせの正規化が不要な場合、演算結果を短縮実行レイテンシでバイパスさせることができる。この結果、短縮実行レイテンシでバイパスさせない場合に比べて、演算処理装置10Jの処理性能を向上することができる。
【0145】
図27および
図28は、別の実施形態における演算処理装置の要部の一例を示す。
図3および
図4と同様の要素については、同じ符号を付し、詳細な説明は省略する。
図27および
図28に示す演算処理装置10Kは、例えば、CPU等のプロセッサである。
【0146】
演算処理装置10Kは、
図3および
図4に示す演算処理装置10Bにおける短縮フラグshtに関連する回路を削除している。このため、
図27に示す命令デコーダIDは、
図3に示した短縮検出部shtdet1を持たない。短縮検出部shtdet2は、ロジック回路LGC1に搭載される。
【0147】
演算処理装置10Kの実行ユニットEXは、整数加算命令を実行可能なロジック回路LGC1、LGC2を含む論理演算回路ALUを有する。ロジック回路LGC1は、加算処理を実行する整数加算器として動作する。ロジック回路LGC2は、下位ビット群(例えば、下位の16ビット)からのキャリーの伝搬処理を実行する桁上がり処理部として動作する。
【0148】
加算回路は、最下位ビットからのキャリーの伝搬がクリティカルパスになる。このため、
図28では、キャリーが伝搬される最悪実行レイテンシの場合と、キャリーが伝搬されない短縮実行レイテンシの場合とで実行ステージ数が異なるように整数加算回路が実装される。そして、キャリーが伝搬されない場合、加算結果を短縮実行レイテンシでバイパスさせる。
【0149】
図28に示す整数加算回路は、例えば、32ビット同士の加算において、ロジック回路LGC1の演算で下位16ビット同士の加算と上位16ビット同士の加算を別に実行し、それぞれのキャリーを生成する。整数加算回路は、下位16ビットからキャリーが伝搬する場合、ロジック回路LGC2の演算で上位16ビットに"+1"を加算する。
【0150】
短縮検出部shtdet2は、下位16ビットからキャリーが伝搬しない場合、早期終了を検出し、短縮フラグsht2を"1"に設定する。すなわち、短縮検出部shtdet2は、ロジック回路LGC1による加算後にロジック回路LGC2による桁上がり処理が不要な場合、早期終了を検出する。短縮検出部shtdet2は、下位16ビットからキャリーが伝搬する場合、短縮フラグsht2を"0"に設定する。
【0151】
これにより、下位16ビットからキャリーが伝搬しない場合、演算結果を短縮実行レイテンシでバイパスすることができる。
図27に示す命令スケジューラISは、先行命令(整数加算命令)を発行した後、整数加算命令の短縮実行レイテンシ(="1")後に後続依存命令を発行する。
【0152】
以上、この実施形態においても、上述した実施形態と同様の効果を得ることができる。例えば、短縮検出部shtdet2により、演算結果を短縮実行レイテンシでバイパスさせるか最悪実行レイテンシでバイパスさせるかを決定することができる。そして、短縮実行レイテンシで演算結果を出力可能な場合、演算結果を短縮実行レイテンシでバイパスさせることができる。
【0153】
例えば、32ビット同士の加算を16ビット同士の加算に分けて実行する整数加算回路において、下位16ビットからキャリーが伝搬しない場合、演算結果を短縮実行レイテンシでバイパスさせることができる。この結果、短縮実行レイテンシでバイパスさせない場合に比べて、演算処理装置10Kの処理性能を向上することができる。
【0154】
図29および
図30は、別の実施形態における演算処理装置の要部の一例を示す。
図3および
図4と同様の要素については、同じ符号を付し、詳細な説明は省略する。
図29および
図30に示す演算処理装置10Lは、例えば、CPU等のプロセッサである。
【0155】
演算処理装置10Lは、
図3および
図4に示す演算処理装置10Bにおける短縮フラグshtに関連する回路を削除している。このため、
図29に示す命令デコーダIDは、
図3に示した短縮検出部shtdet1を持たない。短縮検出部shtdet2は、ロジック回路LGC1に搭載される。
【0156】
演算処理装置10Lの実行ユニットEXは、
図18と同様に、シフト演算を実行する直列に接続されたロジック回路LGC1、LGC2を含む論理演算回路ALU(シフト回路)を有する。ロジック回路LGC1は、"1"から"7"までのシフト量を処理し、ロジック回路LGC2は、"8"から"63"までのシフト量を処理する。
【0157】
そして、短縮検出部shtdet2は、レジスタ(ソースオペランド)から供給されるシフト量が"1"から"7"までの場合、早期終了を検出し、短縮フラグを"1"に設定する。短縮検出部shtdet2は、レジスタ(ソースオペランド)から供給されるシフト量が"8"から"63"までの場合、短縮フラグを"0"に設定する。
【0158】
これにより、レジスタで指定されるシフト量が少ない場合に、シフト命令の演算結果を短縮実行レイテンシでバイパスすることができる。
図29に示す命令スケジューラISは、先行命令(シフト命令)を発行した後、シフト命令の短縮実行レイテンシ(="1")後に後続依存命令を発行する。
【0159】
以上、この実施形態においても、上述した実施形態と同様の効果を得ることができる。例えば、短縮検出部shtdet2により、演算結果を短縮実行レイテンシでバイパスさせるか最悪実行レイテンシでバイパスさせるかを決定することができる。これにより、短縮実行レイテンシで演算結果を出力可能な場合、演算結果を短縮実行レイテンシでバイパスさせることができる。
【0160】
例えば、シフト量がレジスタから供給されるシフト命令において、シフト量が少なくロジック回路LGC1で演算結果が得られる場合、演算結果を短縮実行レイテンシでバイパスさせることができる。この結果、短縮実行レイテンシでバイパスさせない場合に比べて、演算処理装置10Lの処理性能を向上することができる。
【0161】
なお、上述した実施形態では、短縮実行レイテンシが1つである例が説明された。しかしながら、複数の短縮実行レイテンシが設定されてもよい。例えば、シフト命令のシフト量を3段階に分けて、2つの短縮実行レイテンシが設定されてもよい。すなわち、出力制御回路OUTCNTは、短縮検出部shtdet1または短縮検出部shtdet2が、早期終了を検出した場合、複数の途中ステージでの複数の演算結果のうち、バイパス可能な演算結果のいずれかをバイパスしてもよい。
【0162】
また、上述した実施形態では、実行ユニットEXから短縮実行レイテンシおよび最悪実行レイテンシで出力される演算結果の両方をバイパスさせる例が説明された。しかしながら、短縮実行レイテンシで出力される演算結果のみをバイパスさせ、最悪実行レイテンシで出力される演算結果は、レジスタファイルRFに転送されてもよい。なお、短縮実行レイテンシで出力される演算結果は、レジスタファイルRFにも転送される。
【0163】
さらに、上述した実施形態では、説明の簡単化のため、各演算処理装置が、浮動小数点積和演算回路FMA、論理演算回路ALU、浮動小数点演算回路または浮動小数点加算回路を有する実行ユニットEXを有する例が説明された。しかしながら、各演算処理装置は、複数種の実行ユニットを有してもよい。
【0164】
以上の詳細な説明により、実施形態の特徴点および利点は明らかになるであろう。これは、特許請求の範囲がその精神および権利範囲を逸脱しない範囲で前述のような実施形態の特徴点および利点にまで及ぶことを意図するものである。また、当該技術分野において通常の知識を有する者であれば、あらゆる改良および変更に容易に想到できるはずである。したがって、発明性を有する実施形態の範囲を前述したものに限定する意図はなく、実施形態に開示された範囲に含まれる適当な改良物および均等物に拠ることも可能である。
【符号の説明】
【0165】
10、10A、10B、10C、10D 演算処理装置
10E、10F、10G、10H、10I 演算処理装置
10J、10K、10L 演算処理装置
20、30 演算処理装置
2S 2次スケジューラ
B1、B2、B3 バス
BCNT バイパス制御部
C1、C2、C3、C4 コンパレータ
DET 検出部
EX 実行ユニット
FF フリップフロップ
FIFO1-FIFO5 FIFOロジック部
ID 命令デコーダ
IS 命令スケジューラ
sht、sht2 短縮フラグ
LGC、LGC1-LGC5 ロジック回路
MUX1、MUX2 マルチプレクサ
MUX3(MUX31、MUX32、MUX33) マルチプレクサ
OUTCNT 出力制御回路
Q キュー
RF レジスタファイル
SEL 命令セレクタ
shtdet1、shtdet2 短縮検出部
STG ステージ