(57)【特許請求の範囲】
【請求項１】
ロードバイパス動作を実行するよう構成された浮動小数点ユニットであって、演算が行われるべきオペランドデータを格納すると共に該浮動小数点ユニットにより実行された演算の結果を格納する複数のレジスタを備えたレジスタファイルと、
メモリフォーマットからレジスタフォーマットへの変換を実行するよう構成された少なくとも１つのバイパス要素であって、該変換が、部分変換プロセス及び最終変換プロセスを含み、前記部分変換プロセスが、前記レジスタファイルのレジスタへの格納に適したフォーマットへとデータをフォーマットし、演算が行われるべきオペランドデータがスペシャルケース指数を含むか否かを検出し、及び該スペシャルケース指数が検出されたか否かを示す少なくとも１つのスペシャルケースフラグを生成する、という各ステップを有するものである、少なくとも１つのバイパス要素と、
前記オペランドデータについて算術演算を実行するよう構成された少なくとも１つの乗算累算ユニットであって、前記少なくとも１つのスペシャルケースフラグを含む前記部分変換プロセスの結果を受容し、及び最終変換プロセスを実行するよう構成された、少なくとも１つの乗算累算ユニットと
を備えている、浮動小数点ユニット。
【請求項２】
前記バイパス要素が、前記少なくとも１つのスペシャルケースフラグを含む前記部分変換プロセスの結果を前記乗算累算ユニットへとバイパスし、前記少なくとも１つのスペシャルケースフラグを含む前記部分変換プロセスの結果を前記乗算累算ユニットへとバイパスしている間に、前記バイパス要素が前記最終変換プロセスを実行すると共にその最終変換プロセスの結果を前記レジスタファイルに書き込み、前記最終変換プロセスが前記メモリフォーマットからレジスタフォーマットへの変換を完了させる、請求項１に記載の浮動小数点ユニット。
【請求項３】
前記バイパス要素が前記最終変換プロセスの結果を前記レジスタファイルに書き込んでいる間に、前記乗算累算ユニットが、前記部分変換プロセスの結果についての演算を開始すると同時に前記最終変換プロセスを実行し、該最終変換プロセス中に、前記少なくとも１つのスペシャルケースフラグを利用して、変換された指数値を得る、請求項２に記載の浮動小数点ユニット。
【請求項４】
第１の時間T0〜T1において、前記バイパス要素が前記部分変換プロセスを実行し、時間T1〜T2において、前記バイパス要素が前記最終変換プロセスを実行し、及び前記少なくとも１つのスペシャルケースフラグを含む前記部分変換プロセスの結果を前記乗算累算ユニットへとバイパスし、時間T2〜T3において、前記バイパス要素が前記最終変換プロセスの結果を前記レジスタファイルに書き込み、該バイパス要素が前記時間T2〜T3において前記最終変換プロセスの結果を前記レジスタファイルに書き込んでいる際に、前記乗算累算ユニットが、前記最終変換プロセスを実行すると同時に第１の演算段階を実行し、及びその間に前記部分変換プロセスの結果についての算術演算の実行を開始し、時間T3〜T4において、前記乗算累算ユニットが、第２の演算段階を実行し、その間に前記最終変換プロセスの結果についての前記算術演算を実行し続け、時間T4〜T5において、前記乗算累算ユニットが、第３の演算段階を実行し、その間に前記最終変換プロセスの結果についての前記算術演算を完了させる、請求項３に記載の浮動小数点ユニット。
【請求項５】
前記乗算累算ユニットが式A＋B×Cで定義される演算を実行し、該A,B,Cが該乗算累算ユニットにより演算が行われるべきオペランドであり、前記第１の演算段階において前記算術演算中に指数値が必要とされず、該指数値が、前記第２の演算段階の開始時に利用可能となるように前記乗算累算ユニットにより実行される前記最終変換プロセス中に取得され、該指数値が前記第２及び第３の演算段階で利用される、請求項４に記載の浮動小数点ユニット。
【請求項６】
浮動小数点ユニットにおいてデータを処理する方法であって、
前記浮動小数点ユニットのバイパス要素においてメモリフォーマットからレジスタフォーマットへの部分的な変換を実行し、
前記浮動小数点ユニットの前記バイパス要素を利用して前記メモリフォーマットからレジスタフォーマットへの部分的な変換の結果を前記浮動小数点ユニットの乗算累算ユニットへとバイパスし、
該乗算累算ユニットにおいて前記メモリフォーマットからレジスタフォーマットへの変換を完了させる、
という各ステップを有する、浮動小数点ユニットにおいてデータを処理する方法。
【請求項７】
メモリフォーマットからレジスタフォーマットへの部分的な変換プロセスを実行する前記ステップが、
前記浮動小数点ユニットにより構成されるレジスタファイルのレジスタへの格納に適したフォーマットへとオペランドデータをフォーマットし、
演算が行われるべきオペランドデータがスペシャルケース指数を含むか否かを検出し、
スペシャルケース指数が検出されたか否かを示す少なくとも１つのスペシャルケースフラグを生成する、
という各ステップを有する、請求項６に記載の方法。
【請求項８】
前記バイパスステップ中に、前記バイパス要素が、最終変換プロセスを実行し、及び該最終変換プロセスの結果を前記レジスタファイルに書き込み、該最終変換プロセスが前記メモリフォーマットからレジスタフォーマットへの変換を完了させる、請求項７に記載の方法。
【請求項９】
前記バイパス要素が前記最終変換プロセスの結果を前記レジスタファイルに書き込んでいる間に、前記乗算累算ユニットが前記部分変換プロセスの結果についての演算を開始すると同時に前記変換プロセスを完了させ、該変換プロセスを完了させる間に前記乗算累算ユニットが前記少なくとも１つのスペシャルケースフラグを利用して、変換された指数値を得る、請求項８に記載の方法。
【請求項１０】
時間T0〜T1において、前記バイパス要素が前記部分変換プロセスを実行し、時間T1〜T2において、前記バイパス要素が前記最終変換プロセスを実行し、及び前記少なくとも１つのスペシャルケースフラグを含む前記部分変換プロセスの結果を前記乗算累算ユニットへとバイパスし、時間T2〜T3において、前記バイパス要素が前記最終変換プロセスの結果を前記レジスタファイルに書き込み、該バイパス要素が前記時間T2〜T3において前記最終変換プロセスの結果を前記レジスタファイルに書き込んでいる際に、前記乗算累算ユニットが、前記最終変換プロセスを実行すると同時に第１の演算段階を実行し、及びその間に前記部分変換プロセスの結果についての算術演算の実行を開始し、時間T3〜T4において、前記乗算累算ユニットが、第２の演算段階を実行し、その間に前記最終変換プロセスの結果についての前記算術演算を実行し続け、時間T4〜T5において、前記算術累算ユニットが、第３の演算段階を実行し、この間に前記最終変換プロセスの結果についての前記算術演算を完了させる、請求項９に記載の方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、浮動小数点ユニットに関し、特にロード動作を完了させるのに必要となる時間を削減するためにデータ変換と共にロードバイパスを実行することが可能な浮動小数点ユニットに関する。
【０００２】
【従来の技術】
プロセッサのパフォーマンスを向上させるために、一般に「バイパス処理(bypassing)」と呼ばれる技術を実施する浮動小数点ユニットが開発されている。浮動小数点ユニットが実行する第１の演算の結果を、該浮動小数点ユニットが実行する後続の演算において使用する必要がある場合、バイパス処理が実行されなければ、第１の演算の結果が使用可能となり浮動小数点ユニットのレジスタファイルブロックに格納されるまで第２の演算を開始することができない。しかし、一般に、第１の演算の結果は典型的には、該結果がレジスタファイルブロックに格納される前のある時点で利用可能となる。このため、バイパス処理を使用して第１の演算の結果を第２の演算へとバイパスさせることにより、第１の演算の結果が使用可能となって該結果がレジスタファイルブロックに格納される前に第２の演算を開始させることが可能となる。したがって、バイパス処理は、第１の演算がレジスタファイルブロックに書き戻されるまで第２の演算を開始することができない場合に生じる無動作状態（dead state）を無くすことにより浮動小数点ユニットの処理スループットを向上させるものとなる。
【０００３】
ロードバイパス処理は、浮動小数点ユニットに関連して実行されてきた。一般に、ロード動作は、実行すべき特定の動作に関する命令及びデータをオンチップ又はオフチップメモリ要素から取り出し、該命令をデコードし、該デコードした命令を浮動小数点ユニットによる使用に適した形態へと変換し、及び該変換したデータをレジスタファイルブロックに格納することを含むものである。これらのロード動作は、典型的には多数のサイクルを必要とするものである。１回のロード動作に必要とされるサイクルの数を１サイクル程度削減することができれば、浮動小数点ユニットの全スループットを大幅に向上させることが可能である、ということが判明している。
【０００４】
【発明が解決しようとする課題】
しかし、ロードバイパスの実行は、困難を伴うものとなる。
【０００５】
ロードバイパスの実行に付随する主な問題は、命令がデコードされた後であってデータがレジスタファイルブロックにロードされる前に発生する上述のデータ変換プロセスにより引き起こされる。該データ変換は、キャッシュメモリ要素から取り出されたデータの型に依存するものである。例えば、様々な型のデータが浮動小数点ユニットにより一般に処理されるが、それらのデータ型は、米国電気電子学会（IEEE）浮動小数点規格によって定義されている。一般に、これらデータ型は、「非正規（non-normal）」データ型と呼ばれ、非正規化(de-normalized)数、無限、及び非数（NAN:not a number）定数を含む。IEEE規格によって定義されていない他のデータ型もまた存在し、それらは固有のアーキテクチャを有するものであるため、追加の変換（例えば、指数を特定の定数値に変更する等）が必要となる。
【０００６】
この追加の指数変換を行うために必要な時間により、現在のロード命令Ａから該Ａの結果を使用する浮動小数点算術命令Ｂへのロードバイパスを実行することが特に困難となる。したがって、変換と共にロードバイパスを実行することが可能な浮動小数点ユニットが必要とされている。
【０００７】
【課題を解決するための手段】
本発明は、浮動小数点ユニットにおいてデータ変換と共にロードバイパスを実行する方法及び装置を提供する。キャッシュメモリ要素からの命令及びデータの読み出し、該命令のデコード、メモリフォーマットからレジスタフォーマットへの変換の実行、及び該変換したデータの浮動小数点ユニットのレジスタファイルブロックへの書き込みを行うプロセスは、ロード動作として知られるものである。ロード動作は、多数のサイクルに亙って発生する。本発明によれば、ロード動作の実行に通常必要となるサイクルの数が大幅に削減され、これにより浮動小数点ユニットの全体的なスループットが劇的に向上する。本発明によれば、浮動小数点ユニットは、変換と共にロードバイパスを実行し、これによりロード動作時間が大幅に短縮される。
【０００８】
本発明の装置は、レジスタファイルと、少なくとも１つのバイパス要素と、少なくとも１つの乗算累算ユニットとを有する浮動小数点ユニットを備えている。前記レジスタファイルは、演算が行われるべきオペランドデータを格納し、及び浮動小数点ユニットにより実行された演算の結果を格納するための、複数のレジスタを備えている。前記バイパス要素は、メモリフォーマットからレジスタフォーマットへの変換を実行するよう構成されている。このメモリフォーマットからレジスタフォーマットへの変換は、部分変換プロセス及び最終変換プロセスを含む。該部分変換プロセスは、レジスタファイルのレジスタへの格納に適したフォーマットにデータをフォーマットし、演算が行われるべきオペランドデータがスペシャルケース指数(special case exponent)を含むか否かを検出し、及びスペシャルケース指数が検出されたか否かを示す少なくとも１つのスペシャルケースフラグを生成する、という各ステップを含む。
【０００９】
乗算累算ユニットは、オペランドデータについて算術演算を実行するよう構成されている。乗算累算ユニットはまた、スペシャルケースフラグを含む部分変換プロセスの結果を受容し、及び最終変換プロセスを実行するよう構成されている。バイパス要素は、部分変換プロセスを実行すると、該部分変換プロセスの結果（スペシャルケースフラグを含む）を乗算累算ユニットへとバイパスする。スペシャルケースフラグを含む部分変換プロセスの結果を乗算累算ユニットへとバイパスする一方、バイパス要素は、最終変換プロセスを実行し、該最終変換プロセスの結果をレジスタファイルに書き込む。最終変換プロセスは、メモリフォーマットからレジスタフォーマットへの変換を完了する。
【００１０】
バイパス要素が最終変換プロセスの結果をレジスタファイルに書き込んでいる間に、乗算累算ユニットは、部分変換プロセスの結果についての演算を開始し、これと同時に最終変換プロセスを実行する。最終変換プロセス中に、乗算累算ユニットは、スペシャルケースフラグを利用して、変換された指数値を取得する。乗算累算ユニットは、最終変換プロセスを実行している間に、部分的に変換された結果についての算術演算の実行を開始する。この算術演算の第１段階は、完全に変換された結果を必要としない。しかし、該算術演算の第２及び第３段階は、完全に変換された結果を必要とする。これは、最終変換プロセス中に取得される指数値が必要となるからである。最終変換プロセスは、乗算累算ユニットが完全に変換された結果を必要とするまでに完了する。
【００１１】
本発明の上述その他の特徴及び利点については、以下の説明、図面、及び特許請求の範囲から明らかとなろう。
【００１２】
【発明の実施の形態】
本発明の方法及び装置は、実際にはいかなる浮動小数点ユニットにおいても実現することができるものである。本発明の説明を目的として、ロードバイパスを実行する本発明の方法及び装置に関連して、図１及び図２に示す２つの異なる浮動小数点ユニットアーキテクチャについて説明する。本発明が、これらの特定のアーキテクチャと共に使用することに限定されるものではなく、いかなる浮動小数点アーキテクチャも本発明の方法及び装置を実施することが可能であることが当業者には理解されよう。
【００１３】
本発明の方法及び装置を説明する前に、図１及び図２に示す浮動小数点ユニットの説明を行い、これら異なる浮動小数点ユニットがそれぞれの演算を実行する態様を概略的に示すこととする。これら浮動小数点ユニットの各々は、従来のデータ型フォーマット、及び単一命令多重データ（SIMD）型フォーマットについて演算を行うことが可能なものである。しかし、図１及び図２の浮動小数点ユニットは、これら演算を実行するための構成が異なっている。概して、図１に示す浮動小数点ユニットは、図２の浮動小数点ユニットよりもスループットが大きい。しかし、図２の浮動小数点ユニットは、図１の浮動小数点ユニットよりも消費するチップ面積(die area)が少ない。したがって、これら浮動小数点ユニットの各々は、他方に対して幾つかの利点を有するものとなる。図１及び図２の浮動小数点ユニットについて説明した後に、本発明の方法及び装置の詳細な説明について説明する。
【００１４】
プロセッサ速度が向上しデータサイズが増大したため、一度に浮動小数点ユニットに与えることが可能なデータの量に関して浮動小数点演算の計算性能に重大なボトルネックが存在することとなった。64ビット又はそれ以上のアーキテクチャへのプロセッサアーキテクチャの進化と共に、このボトルネックによる影響を低減させるための幾つかの技術が開発されてきた。かかる技術の１つは、図１及び図２の浮動小数点ユニットにより利用されるものであり、64ビットデータをより小さいデータへと分割し、それらのより小さいデータに多数の演算を実行するというものである。この種の演算は、一般に、単一命令多重データ（SIMD）演算と呼ばれる。SIMD命令は、多数片のデータについて同一の演算を同時に（即ち、並列に）実行させるものである。
【００１５】
しかし、図１及び図２の浮動小数点ユニットは、従来のデータ型フォーマットついて演算を実行することも可能である。一般に、従来のデータ型フォーマットは、SIMDデータ型フォーマットよりも広いビットサイズを有している。これら両方のタイプの演算をサポートするために、図１の浮動小数点ユニットは、SIMD演算を実行する専用のSIMD用MACユニットと、従来のデータ型フォーマットについて演算を実行する標準的なMACユニットとを使用する。図１の浮動小数点ユニット1は、２つのSIMD用MACユニット3,4、２つの標準的なMACユニット6,7、２つのバイパスブロック8,9、及びレジスタファイルブロック11を備えている。標準的なMACユニット6,7は、従来のデータ型フォーマットについて浮動小数点演算を実行する。SIMD用MACユニット3,4は、SIMDデータ型フォーマットについて算術演算を実行する。
【００１６】
これら２つのデータ型フォーマットを図３に示す。典型的な、即ち従来のデータ型フォーマット15は、64ビットの仮数値、17ビットの指数値、及び１ビットの符号値を有している。これに対し、SIMDデータ型フォーマット16は、２つの23ビット仮数値、２つの８ビット指数値（即ち、各仮数値に１つずつ関連するもの）、及び２つの符号ビット（即ち、各仮数値及びその指数値に１ビットずつ関連するもの）を有している。これら両データ型フォーマットは、当業界で周知のものであり、浮動小数点演算に関してIEEE規格で文書化されている。これらデータ型フォーマットについて演算が実行される態様もまた当業界で周知のものである。したがって、本明細書では、簡潔化のために、これら浮動小数点データ型及びそれらについて実行される演算について詳述しないこととする。
【００１７】
図１に示す浮動小数点ユニット1において、標準的なMACユニット6,7の各々は、乗算累算演算（即ち、A＋B×C）を実行することが可能である。図３に示すデータ型フォーマット15について乗算累算演算が実行される場合には、オペランドA,B,Cがバイパスブロック8,9へ供給される。浮動小数点ユニット1が２つの標準的なMACユニット6,7を備えているため、２つの乗算累算演算を同時に実行することができる（即ち、一方の乗算累算演算を標準的なMACユニット6で実行し、他方の乗算累算演算を標準的なMACユニット7で実行する）。
【００１８】
標準的なMACユニット6,7の各々は、１つの82ビット加算器と１つの82ビット乗算器とを備えている。演算が行われるべきオペランドは、プロセッサアーキテクチャにより構成された命令デコーダ（図示せず）からレジスタファイルブロック11によって受容される。該命令デコーダは、それらオペランドと共に制御ビットをレジスタファイルブロック11に提供し、これら制御ビットは、オペランドについて実行される算術演算（例えば、加算、減算、乗算等）の種類を決定するためにMACユニットにより使用される。レジスタファイルブロック11は、それ自体が受容したオペランドを格納するための複数のレジスタを備えている。
【００１９】
レジスタファイルブロック11により受容される制御ビットは、オペランドの読み出し及び書き込みのためにレジスタファイルブロック11中のどのレジスタを使用すべきかを示すものとなる。バイパスブロック8,9は、それぞれ、１組のオペランドを処理する。バイパスブロック8,9はまた、それらに提供される制御ビットを利用して、浮動小数点ユニット1内の特定の宛先にどのレジスタ内容を経路指定すべきかを決定する。上述したように、バイパスブロック89は、１つの演算の結果を該結果が利用可能となった際に（該利用可能な演算結果がレジスタファイルブロックに書き込まれるのを待つのではなく）別の演算へとバイパスすることにより、パフォーマンスを向上させる。本発明によれば、図３〜図５を参照して後に詳述するように、バイパスブロック8,9はロードもまたバイパスする。
【００２０】
オペランドがレジスタファイルブロック11中の適当なレジスタに書き込まれた後、レジスタファイルブロック11は、適当なレジスタからオペランドを読み出し、該オペランドを（レジスタファイルブロック11からバイパスブロック8に向けられたライン20,21,22上の矢印によって示されるように）適当なバイパスブロックに渡す。ライン20,21,22は、浮動小数点ユニット1内に設けられたオペランドバスに対応し、該ライン20,21,22の各々は、マルチビットオペランドA,B,Cの移送に必要な複数のラインに対応している。図１の円は、それらが位置しているブロックへのバス入力を示すことを意図したものである。レジスタファイルブロック11は、レジスタファイルブロック11中の適当なレジスタから第２組のオペランドA,B,Cを読み出し、該オペランドを、ライン24,25,26上の矢印で示すように、適当なバイパスブロックへと経路指定する。これらラインもまた、複数のオペランドバスラインを表している。
【００２１】
バイパスブロック8は、レジスタファイルブロック11から読み出された１組のオペランドを、バス入力28,29,30を介して標準的なMACユニット6に渡し、又はバス入力32,33,34を介してSIMD用MACユニット4に渡す。同様に、バイパスブロック9は、その１組のオペランドのセットを、バス入力36,37,38を介して標準的なMACユニット7に渡し、又はバス入力41,42,43を介してSIMD用MACユニット3に渡す。
【００２２】
図３に示すデータ型フォーマット15の場合、バイパスブロック8,9は、標準的なMACユニット6,7にそれぞれオペランドを提供することになる。標準的なMACユニット6,7がそれぞれの算術演算を実行すると、その結果は、該標準的なMACユニット6,7によってバイパスブロック8,9へと渡される。バイパスブロック8,9は、その算術演算の結果をバス51,52を介してレジスタファイルブロック11へ渡し、該レジスタファイルブロック11は、その結果をレジスタファイルブロック11中の１つ又は２つ以上のレジスタに格納する。
【００２３】
浮動小数点ユニット1により演算が実行される場合には必ず、レジスタファイルブロック11により受容される制御ビットが、関連する演算の実行が完了した際に該演算の結果がどのレジスタに格納されるかを示す。また、バイパスブロック8,9は、制御ビットを受容し、該制御ビットを利用してバイパスを何時実行すべきか決定する。
【００２４】
SIMD用MACユニット3,4の各々は、２つの32ビット加算器及び２つの32ビット乗算器を備えている。SIMD用MACユニット3,4の各々は、３つのオペランドA,B,Cを処理して、命令デコーダにより示される算術演算を実行することが可能である。SIMD用MACユニット3,4及び標準的なMACユニット6,7が図３に示すデータ型フォーマット15,16について演算を行う態様は、当業者には周知のものである。したがって、本明細書では、これらのユニットがそれらの乗算累算演算（即ち、A＋B×C）を実行する態様については詳述しないこととする。
【００２５】
浮動小数点ユニット1は、従来のデータ型フォーマットとSIMDデータ型フォーマットとを処理することができるが、SIMD用MACユニット3,4は、チップ面積を消費するものとなる。SIMD演算はめったに実行されず、標準的なMAC6,7によって従来のデータ型フォーマットが処理されている場合にはいつでも、SIMD用MACユニット3,4は休止状態となっている。同様に、SIMD用MACユニット3,4によりSIMD演算が実行されている場合にはいつでも、標準的なMACユニット6,7は休止状態となっている。したがって、SIMD用MACユニット3,4及び標準的なMACユニット6,7は、全ての演算のために利用されない場合であってもチップ面積を消費するものとなる。しかし、専用のSIMD用MACユニットを利用することにより、処理スループットが向上する。
【００２６】
第２の浮動小数点ユニット50を図２に示す。好ましくは、本発明は、浮動小数点ユニット50において実施される。この浮動小数点ユニットは、SIMDデータ型フォーマットについて実行されるべき演算を含む全ての算術演算を実行するために標準的なMACユニット51,52を使用する。このため、図１に示す専用のSIMD用MACユニット3,4が除去される。これにより、浮動小数点ユニット50の実施に必要なチップ面積の量に関して節約を実現することが可能となる。しかし、この節約は、後に詳述するようなパフォーマンス上の不利益を生じさせるものともなる。
【００２７】
標準的なMACユニット51,52は、好ましくは図１に示す標準的なMACユニット6,7と非常に類似したものとなる。この場合、標準的なMACユニット51,52の各々は、１つの82ビット加算器及び１つの82ビット乗算器（図示せず）を備えている。しかし、該標準的なMACユニット51,52の各々は、後に詳述するように、特定のビットを受容し、該ビットを利用して64ビットワードの適当な半分を選択するように構成される。
【００２８】
浮動小数点ユニット50が従来のデータ型フォーマット15を処理する場合、標準的なMACユニット51,52はそれらの通常の演算を実行する。一方、浮動小数点ユニット50がSIMDデータ型フォーマット16を処理する場合には、SIMDビットフィールドが２つの32ビットワードへと分割され、該SIMDワードの下位32ビットが標準的なMACユニット51により処理され、該SIMDワードの上位32ビットが標準的なMACユニット52により処理される。64ビットワード全体が標準的なMACユニット51,52の両方に供給されるが、該標準的なMACユニット51,52により受容された上述のビットによって、該標準的なMACユニット51,52は、適当な32ビットワードを選択することとなる。次いで、該標準的なMACユニット51,52は、それら32ビットワードについてそれぞれの演算を実行する。
【００２９】
上述のように、標準的なMACユニット51,52は、通常は82ビットワードを処理する。SIMDワードを処理する場合には、標準的なMACユニット51,52は下位64ビットのみを使用する。上位18ビットは定数値にセットされ、一般には無視される。標準的なMACユニット51,52が、64ビットSIMDワードのそれぞれの部分の処理を完了すると、バイパスブロック54,55が、32ビットの結果を合体させて64ビットのSIMD結果とする。バイパスブロック54,55は、それぞれ、下位及び上位の32ビットワードをレジスタファイルブロック56に書き込む。この書き込みは、レジスタファイルブロック56に書き込まれた64ビット結果が、図１に示すSIMD用MACユニット3,4等のSIMD用MACユニットによって処理された場合と同様の結果となるような態様で、レジスタファイルブロック56中の隣接するビットフィールドにビットを書き込むことによって行われる。
【００３０】
図２の浮動小数点ユニット50内に示すラインは、図１においてバスを示すために使用されたのと同様に使用されている。矢印は、データの流れる方向を示すために使用されており、円は、バス入力を示すために使用されている。符号61,62,63で示すライン（バス61,62,63）は、SIMDワードの下位32ビットを表している。したがって、SIMDモードでは、バス61,62,63は、それぞれ32ビットのオペランド（即ち、A,B,C）を移送する。SIMDワードが浮動小数点ユニット50に渡されると、レジスタファイルブロック56が、受容した制御ビットに従ってレジスタファイルブロック56の適当なレジスタにSIMDビットをロードする。バイパスブロック54は、SIMDワードの下位32ビット部分を選択し、該32ビットワードをバス61,62,63を介してレジスタファイルブロック56から標準的なMACユニット51へと経路指定する。同時に、バイパスブロック55は、バス65,66,67を介してSIMDワードの上位32ビット部分を標準的なMACユニット52へ経路指定する。
【００３１】
標準的なMACユニット51及び標準的なMACユニット52は、SIMDワードのそれぞれの部分について乗算累算演算を同時に実行する。標準的なMACユニット51,52は共に32ビットの結果を生成し、該結果はそれぞれバス71,72を介してバイパスブロック54,55へと経路指定される。次いで、該結果がバイパスブロック54,55により合体されて64ビットのSIMD結果が生成され、該結果がレジスタファイルブロック56中の適当なレジスタに書き込まれる。
【００３２】
図１に示す浮動小数点ユニット1は、２つのSIMD演算を同時に実行して、２つずつペアになった４つのSIMD結果を生成することが可能である点に留意されたい。図２に示す浮動小数点ユニット50の場合には、一度に１つのSIMD演算しか実行することができない。したがって、SIMD演算のパフォーマンスに関して、図２に示す浮動小数点ユニット50のスループットは、図１に示す浮動小数点ユニット1のスループットのほぼ半分となる。SIMD演算が頻繁に実行される場合には、浮動小数点ユニット50の全スループットは浮動小数点ユニット1の全スループットよりもかなり低下することになる。しかし、一般にSIMD演算は、浮動小数点ユニットによって実行される全演算の５％未満しか表さないものである。したがって、標準的なMACユニット51,52でのSIMD演算の実行の結果として生じる浮動小数点ユニット50のスループットの低下は大して重要ではなく、ダイ面積の節約によって相殺されるものである。
【００３３】
ここで、本発明の方法及び装置について図４〜図６を参照して説明する。例示のため、ロードバイパスを実行する本発明の方法及び装置は、図１の浮動小数点ユニット1において実施されるものとする。しかし、既述のように、本発明は、いかなる特定の浮動小数点ユニットでの実現にも限定されないものである。図４は、キャッシュメモリ要素81から浮動小数点ユニット50への命令及びデータのロードと、浮動小数点ユニット50からのデータの格納及びキャッシュメモリ要素81へのデータの格納を制御するプロセッサアーキテクチャの回路80を示している。該回路80は、キャッシュメモリ要素81からのデータの取り出し及び該キャッシュメモリ要素81へのデータの格納と、浮動小数点ユニット50へのデータのロード及び該浮動小数点ユニット50からのデータの取り出しとを制御する命令デコーダ83を備えている。
【００３４】
回路80はメモリ要素85と通信し、該メモリ要素85は好ましくはオフチップ要素であり、キャッシュメモリ要素81に存在しない命令及びデータを格納する。該メモリ要素85をオンチップメモリ要素とすることが可能であることが当業者には理解されよう。しかし、メモリ要素85のオンチップでの実施は、チップ面積という点でコスト高となる。このため、オフチップ要素として実施するのが好ましい。
【００３５】
回路80の外部にあるコンパイラ87は、キャッシュメモリ要素81にどの命令及びデータを存在させるか、及びメモリ要素85にどの命令及びデータを存在させるかを制御する。コンパイラ87は典型的には、様々な最適化技術（例えば、コード再配置（code reordering）等）を利用することによりプログラムの実行を最適化するソフトウェア要素であることが当業者には理解されよう。コンパイラ87は、かかる最適化技術を利用し、コード及びデータの特定部分をメモリ要素85からキャッシュメモリ要素81へ（及びその逆に）移動させる。
【００３６】
命令デコーダ83は、キャッシュメモリ要素81から命令及びデータを読み出し、そのデータについて実行される演算の種類を決定する。次いで、命令デコーダ83は、該データをバイパスブロック8,9の一方にロードさせる。該バイパスブロックの各々は、メモリフォーマットからレジスタフォーマットへの変換を実行する変換回路を備えている。該変換が実行されると、変換されたデータは、浮動小数点ユニット50のレジスタファイルブロック56の適当なレジスタに書き込まれる。キャッシュメモリ要素から命令及びデータを読み出し、該命令をデコードし、変換を実行し、該変換されたデータをレジスタファイルブロックに書き込むという上記プロセスは、ロード動作として知られるものである。
【００３７】
ロード動作は、多くのサイクルに亙って発生する。本発明によれば、ロード動作を実行するために必要なサイクルの数を１サイクル程度低減することができれば、浮動小数点ユニットの全体的なスループットを劇的に向上させることが可能であることが明確となっている。本発明によれば、浮動小数点ユニット1がロードバイパスを実行することにより、少なくとも２サイクル分のロード動作時間が短縮される。本発明がロードバイパスを実行する態様を例証するために、まず最初にメモリフォーマットからレジスタフォーマットへの変換について説明する。この種の変換プロセスは、今日用いられているプロセッサアーキテクチャで現在利用されている多くの浮動小数点ユニットで実行されている。したがって、この種の変換プロセスは、当業者には理解されるものであり、簡潔化のため、本明細書では該変換プロセスの概説のみを行うこととする。
【００３８】
この変換プロセスは、一般に第１の部分と第２の部分とから構成されている。変換プロセスの第１の部分では、浮動小数点ユニットに渡されたデータが、浮動小数点ユニット1の82ビットレジスタに適応するようフォーマットされる。該データは、それが単精度ワードである場合には、82ビットワードへと伸張され、50の未使用ビットが定数値に設定される。また、該データが倍精度ワードである場合には、82ビットワードへと伸張され、18の未使用ビットが定数値に設定される。したがって、実行される変換のタイプは、キャッシュメモリ要素から読み出されたデータの型、及び浮動小数点ユニットのアーキテクチャによって決まる。
【００３９】
変換プロセスの第２の部分は、データに含まれる指数値及び仮数値の特定の範囲を識別し、変換された指数を定数値に設定することに関するものである。浮動小数点ユニットが扱うよう通常設計されるスペシャルケース指数には幾つかのタイプがある。これらスペシャルケース指数は、IEEE浮動小数点規格において定義されており、非正規化値（denormals）、倍精度の非正規化値、倍拡張精度（double extended precision）の非正規化値、ゼロ、及び最大指数を含むものである。これらは各々、関連するスペシャルケース指数定数を有している。変換プロセス中に、これらのスペシャルケースが検出され、該スペシャルケースの検出に応じてスペシャルケースフラグが生成される。次いで、これらスペシャルケースフラグがマルチプレクサ（図示せず）により使用される。該マルチプレクサは、定数を多重化して適当なビット位置でデータにすることにより、変換された指数値を取得する。変換プロセスの第１及び第２の部分の実行が完了すると、演算を実行するMACユニットがデータを完全に処理し、次いでレジスタファイルブロック11へと書き戻すことが可能となる。
【００４０】
変換プロセスの第１の部分は、比較的迅速に実行することができるが、該変換プロセスの第２の部分は、その実行により長い時間を要する。これは、指数定数の検出及び適当なスペシャルケースフラグの設定のプロセスが、回路内で実現するには比較的複雑な機能であることによる。変換プロセス全体を実行するために必要となる時間の長さに起因して、演算を実行することが意図されたMACユニットがデータを必要とするまでに、完全に変換されたデータを該MACユニットにバイパスすることができなくなる。しかし、本発明によれば、部分的に変換された結果をMACユニットにバイパスするよう変換プロセスの一部を適時に完了させることが可能となることが明確となっている。
【００４１】
これが達成される態様を図５を参照して説明する。ブロック91で表す変換プロセスの第１の部分は、ブロック93で表す変換プロセスの第２の部分に伴うスペシャルケース検出プロセスと並行して実行される。これらプロセスは両方とも、バイパスブロック内に設けられた変換回路（図示せず）により実行される。次いで、変換プロセスの第１の部分の結果と、スペシャルケース検出プロセス中に生成されたスペシャルケースフラグとが、MACユニットにバイパスされる。バイパスブロックがMACユニットにデータをバイパスしている時、ブロック95に示すように、バイパスブロック内の変換回路は、変換プロセスを完了させ、完全に変換したデータをレジスタファイルブロック中の適当なレジスタに格納する。変換回路は、スペシャルケースフラグを利用してデータの適当なビット位置で適当な指数定数の多重化を行う。
【００４２】
浮動小数点ユニットのMACユニットはまた、変換プロセスの残りを実行するための変換回路を有している。この変換回路もまた、ブロック97に示すように、スペシャルケースフラグを利用してデータの適当なビット位置で適当な指数定数の多重化を行って変換を完了させる。データが完全に変換されると、ブロック97,99,101に示すように、MACユニットが該データについての演算を実行する。次いで、それらの演算の結果がバイパスブロックによりレジスタファイルブロックに書き込まれる。該結果はまた、該結果が生成されたMACユニットから、別の演算で該結果を利用することが可能な（即ち、一般的な演算を実行することが可能な）別のMACユニットへとバイパスすることが可能である。
【００４３】
MACユニットは、オペランドデータについて算術演算を実行する際、該演算の第１サイクルでは指数を必要としない。指数は、演算の第２サイクルまで必要とされない。したがって、部分的な変換結果及びスペシャルケースフラグがMACユニットへとバイパスされるとき、該MACユニットは、変換の残りを実行する１サイクルを有した後に指数を必要とする。したがって、ブロック99に示すように、第１段階の演算を実行すると共に、部分的に変換されたデータを完全に変換することができる。
【００４４】
図６は、バイパスブロック及びMACユニットにおいて実行される演算のタイミングを示すタイミングチャートである。ブロック群110は、バイパスブロックの１つで実行される演算に対応するものである。またブロック群120は、MACユニットのうちの１つで実行される演算に対応するものである。第１の時間T0〜T1では、ブロック112で示す部分変換プロセス及びスペシャルケース検出プロセスが実行される。第２の時間T1〜T0では、ブロック113,121で示すように、スペシャルケースフラグ及び部分的に変換されたデータがMACユニットにバイパスされる。時間T1〜T2でデータ及びフラグがMACユニットにバイパスされている間に、バイパスブロックが変換の残りを実行する。時間T2〜T3では、ブロック114に示すように、変換されたデータをバイパスブロックがレジスタファイルブロックに書き込む。
【００４５】
完全に変換されたデータが、バイパスブロックによりレジスタファイルブロックに書き戻されている間に、MACユニットは、ブロック122で示す乗算累算演算の第１段階を開始する。MACユニットは、該演算の第１段階を実行している間に、変換の残りも並列に実行している。ブロック123,124で示す乗算累算演算の第２及び第３段階では、ブロック122で示す最終変換プロセス中に得られる指数を利用する。該演算の第２及び第３段階は、時間T3〜T5において実行される。次いで、該演算の結果が時間T5〜T6においてレジスタファイルブロックに書き戻される。該ステップはブロック125に示されている。
【００４６】
MACユニットが、完全に変換されたデータがレジスタファイルブロックに書戻されるのを待ち、該レジスタファイルブロックから該データを取得し、次いで乗算累算演算の実行を開始する場合には、ブロック122で示す演算の第１段階は、時刻T3の幾分か後まで（即ち、ブロック114に示す書き戻しステップの後まで）開始することができない、ということは図６のタイミングチャートより明らかである。実際に、レジスタファイルブロックからMACユニットへデータを渡すステップが実行されるため、乗算累算演算は時刻T4まで開始することができない。本発明のロードバイパスを実施することにより、ロード動作の実行に必要な時間量が大幅に低減される。時間がサイクルを表しているものとすると、ロード動作の実行に通常必要となる時間を少なくとも２サイクル削減することができる。上述のように、その結果として処理スループット全体が大幅に向上する、ということが当業者には理解されよう。
【００４７】
なお、図６に示す時間は、クロックサイクルに対応してもしなくてもよい。各時間は、１サイクルの一部に対応すること又は１クロックサイクルよりも長い時間に対応することが可能である。本発明は、図６に示すブロックで表される機能の実行に必要な時間に対して限定されるものではない、ということが当業者には理解されよう。
【００４８】
当業者であれば、本発明が好ましい実施の形態に関して説明されていること、及び本発明が上記実施形態に限定されないことが理解されよう。また、当業者であれば、上述の実施形態に対して本発明の範囲内で変更を行うことが可能である、ということが認識されよう。また、当業者であれば、ハードウェアのみにより実施されるものとして説明されている本発明の幾つかの要素を、ハードウェア、ソフトウェア、又はハードウェア及びソフトウェアの組み合わせで実施することが可能である、ということが理解されよう。
【００４９】
以下においては、本発明の種々の構成要件の組み合わせからなる例示的な実施態様を示す。
１．  ロードバイパス動作を実行するよう構成された浮動小数点ユニット(50)であって、
演算が行われるべきオペランドデータを格納すると共に該浮動小数点ユニット(50)により実行された演算の結果を格納する複数のレジスタを備えたレジスタファイル(56)と、
メモリフォーマットからレジスタフォーマットへの変換を実行するよう構成された少なくとも１つのバイパス要素(54,55)であって、該変換が、部分変換プロセス(91)及び最終変換プロセス(95)とを含み、前記部分変換プロセス(91)が、前記レジスタファイル(56)のレジスタへの格納に適したフォーマットへとデータをフォーマットし、演算が行われるべきオペランドデータがスペシャルケース指数を含むか否かを検出し(93)、及び該スペシャルケース指数が検出されたか否かを示す少なくとも１つのスペシャルケースフラグを生成する、という各ステップを有するものである、少なくとも１つのバイパス要素(54,55)と、
前記オペランドデータについて算術演算を実行するよう構成された少なくとも１つの乗算累算ユニット(51,52)であって、前記少なくとも１つのスペシャルケースフラグを含む前記部分変換プロセス(91)の結果を受容し、及び最終変換プロセス(97)を実行するよう構成された、少なくとも１つの乗算累算ユニット(51,52)とを備えている、浮動小数点ユニット(50)。
２．  前記バイパス要素(54,55)が、前記少なくとも１つのスペシャルケースフラグを含む前記部分変換プロセス(91)の結果を前記乗算累算ユニット(51,52)へとバイパスし、前記少なくとも１つのスペシャルケースフラグを含む前記部分変換プロセス(91)の結果を前記乗算累算ユニット(51,52)へとバイパスしている間に、前記バイパス要素(54,55)が前記最終変換プロセス(97)を実行すると共にその最終変換プロセス(97)の結果を前記レジスタファイル(56)に書き込み、前記最終変換プロセス(97)が前記メモリフォーマットからレジスタフォーマットへの変換を完了させる、前項１に記載の浮動小数点ユニット(50)。
３．  前記バイパス要素(54,55)が前記最終変換プロセス(97)の結果を前記レジスタファイル(56)に書き込んでいる間に、前記乗算累算ユニット(51,52)が、前記部分変換プロセス(99)の結果についての演算を開始すると同時に前記最終変換プロセス(97)を実行し、該最終変換プロセス(97)中に、前記少なくとも１つのスペシャルケースフラグを利用して、変換された指数値を得る、前項２に記載の浮動小数点ユニット(50)。
４．  第１の時間T0〜T1において、前記バイパス要素(54,55)が前記部分変換プロセス(91)を実行し、時間T1〜T2において、前記バイパス要素(54,55)が前記最終変換プロセス(95)を実行して前記少なくとも１つのスペシャルケースフラグを含む前記部分変換プロセス(91)の結果を前記乗算累算ユニット(51,52)へとバイパスし、時間T2〜T3において、前記バイパス要素(54,55)が前記最終変換プロセス(95)の結果を前記レジスタファイル(56)に書き込み、前記バイパス要素(54,55)が前記時間T2〜T3において前記最終変換プロセス(97)の結果を前記レジスタファイル(56)に書き込んでいる間に、前記乗算累算ユニット(51,52)が、前記最終変換プロセス(97)を実行すると同時に第１の演算段階(99)を実行し、及びその間に前記部分変換プロセス(97)の結果についての算術演算の実行を開始し、時間T3〜T4において、前記乗算累算ユニット(51,52)が、第２の演算段階(101)を実行し、その間に前記最終変換プロセス(97)の結果についての前記算術演算を実行し続け、時間T4〜T5において、前記乗算累算ユニット(51,52)が、第３の演算段階(101)を実行し、その間に前記最終変換プロセス(97)の結果についての前記算術演算を完了させる、前項３に記載の浮動小数点ユニット(50)。
５．  前記乗算累算ユニット(51,52)が式A＋B×Cで定義される演算を実行し、該A,B,Cが前記乗算累算ユニット(51,52)により演算が行われるべきオペランドであり、前記第１の演算段階において算術演算中に指数値が必要とされず、該指数値が、前記第２の演算段階の開始時に利用可能となるように前記乗算累算ユニット(51,52)により実行される前記最終変換プロセス(97)中に取得され、該指数値が前記第２及び第３の演算段階で利用される、前項４に記載の浮動小数点ユニット(50)。
６．  浮動小数点ユニット(50)においてデータを処理する方法であって、
前記浮動小数点ユニット(50)のバイパス要素(54,55)においてメモリフォーマットからレジスタフォーマットへの部分的な変換を実行し(91,112)、
前記浮動小数点ユニット(50)の前記バイパス要素(54,55)を利用して前記メモリフォーマットからレジスタフォーマットへの部分的な変換の結果を前記浮動小数点ユニット(50)の乗算累算ユニット(51,52)へとバイパスし(121)、
前記乗算累算ユニット(51,52)において前記メモリフォーマットからレジスタフォーマットへの変換を完了させる(122)、
という各ステップを有する、浮動小数点ユニット(50)においてデータを処理する方法。
７．  メモリフォーマットからレジスタフォーマットへの部分的な変換プロセスを実行する前記ステップが、
前記浮動小数点ユニット(50)により構成されるレジスタファイル(56)のレジスタへの格納に適したフォーマットへとオペランドデータをフォーマットし、
演算が行われるべきオペランドデータがスペシャルケース指数を含むか否かを検出し(93,112)、
スペシャルケース指数が検出されたか否かを示す少なくとも１つのスペシャルケースフラグを生成する、
という各ステップを有する、前項６に記載の方法。
８．  前記バイパスステップ(121)中に、前記バイパス要素(54,55)が、前記最終変換プロセス(95,113)を実行し、及び該最終変換プロセスの結果を前記レジスタファイル(56)に書き込み(114)、該最終変換プロセス(95,113)が前記メモリフォーマットから前記レジスタフォーマットへの変換を完了させる、前項７に記載の方法。
９．  前記バイパス要素(54,55)が前記最終変換プロセス(97)の結果を前記レジスタファイル(56)に書き込んでいる間に、前記乗算累算ユニット(51,52)が前記部分変換プロセス(91)の結果についての演算を開始する(122)と同時に前記変換プロセスを完了させ、前記変換プロセスを完了させる間に前記乗算累算ユニット(51,52)が前記少なくとも１つのスペシャルケースフラグを利用して、変換された指数値を得る、前項８に記載の方法。
10．  時間T0〜T1において、前記バイパス要素(54,55)が前記部分変換プロセス(112)を実行し、時間T1〜T2において、前記バイパス要素(54,55)が前記最終変換プロセス(113)を実行し、及び前記少なくとも１つのスペシャルケースフラグを含む前記部分変換プロセスの結果を前記乗算累算ユニット(51,52)へとバイパスし、時間T2〜T3において、前記バイパス要素(54,55)が前記最終変換プロセス(97)の結果を前記レジスタファイル(56)に書き込み(114)、前記バイパス要素(54,55)が前記時間T2〜T3において前記最終変換プロセス(97)の結果を前記レジスタファイル(56)に書き込んでいる際に、前記乗算累算ユニット(51,52)が、前記最終変換プロセスを実行する(122)と同時に第１の演算段階(122)を実行し、及びその間に前記部分変換プロセス(91)の結果についての算術演算の実行を開始し、時間T3〜T4において、前記乗算累算ユニット(51,52)が、第２の演算段階を実行し、その間に前記最終変換プロセス(97)の結果についての前記算術演算を実行し続け(123)、時間T4〜T5において、前記算術累算ユニット(51,52)が、第３の演算段階(124)を実行し、この間に前記最終変換プロセスの結果についての前記算術演算を完了させる、前項９に記載の方法。
【図面の簡単な説明】
【図１】  SIMD演算を実行する２つの専用のSIMD用MACユニットを利用する浮動小数点ユニットを示す機能ブロック図である。
【図２】  SIMD演算を実行するために専用のSIMD用MACユニットを利用しないが、SIMD演算を含むすべての算術演算を実行するために標準的なMACユニットを利用する、浮動小数点ユニットを示す機能ブロック図である。
【図３】図１及び図２に示す浮動小数点ユニットにより演算を行うことが可能な２つの異なるデータ型フォーマットのビットフィールドを示す説明図である。
【図４】浮動小数点ユニットを含む本発明のプロセッサアーキテクチャの一部を示す機能ブロック図である(ロード動作のパフォーマンスを例証するために使用する)。
【図５】本発明の方法及び装置を実施した浮動小数点ユニットにおけるパイプステージを機能的に示す機能ブロック図である。
【図６】本発明の方法及び装置を組み込んだ浮動小数点ユニットによるロードバイパスのパフォーマンスを例証するタイミングチャートである。
【符号の説明】
50        浮動小数点ユニット
51,52     標準的なMACユニット
54,55     バイパスブロック
56        レジスタファイルブロック
91,112    部分変換プロセス
93,112    スペシャルケース検出プロセス
95,113    最終変換プロセス
97,122    最終変換プロセス
99,101    演算実行プロセス
114       書き戻しプロセス
121       バイパスプロセス
123       第２の乗算累算演算プロセス
124       第３の乗算累算演算プロセス
【図１】
0003693556.tif 000002
【図２】
0003693556.tif 000003
【図３】
0003693556.tif 000004
【図４】
0003693556.tif 000005
【図５】
0003693556.tif 000006
【図６】
0003693556.tif 000007