(57)【要約】【課題】浮動小数点数同士の演算を行なうデータ処理装置を提供する。【解決手段】中間値生成回路が、第１の浮動小数点数と、第２の浮動小数点数から中間値を生成する。この中間値は、第１の浮動小数点数の絶対値と、第２の浮動小数点数の絶対値の差におけるリーディングゼロの数の予測を示すリーディング０の数を含んでいる。予測は、第１の浮動小数点数の絶対値と、第２の浮動小数点数の絶対値の差におけるリーディングゼロの数と最大でも１つしか違わない。カウント回路が、前記中間値におけるリーディング０の数をカウントし、マスク生成回路が、この中間値を利用して１つまたは複数のマスクを形成する。マスク生成回路は、カウント回路が中間値におけるリーディング０の数をカウントするのと同時にまたはそれより前に１つまたは複数のマスクを形成する。【選択図】図１
2018097864.tif 000002
【特許請求の範囲】
【請求項１】
第１の浮動小数点数と、第２の浮動小数点数から中間値を生成するための中間値生成回路であって、前記中間値が、前記第１の浮動小数点数の絶対値と、前記第２の浮動小数点数の絶対値の差におけるリーディング０の数の予測を示すリーディング０の数を有し、前記予測が、前記第１の浮動小数点数の絶対値と、前記第２の浮動小数点数の絶対値の前記差における前記リーディング０の数と最大でも1つしか違わない中間値生成回路と、
前記中間値における前記リーディング０の数をカウントするカウント回路と、
前記中間値を利用して１つまたは複数のマスクを形成するマスク生成回路と、
を備えるデータ処理装置であって、
前記マスク生成回路が、前記中間値における前記リーディングゼロの数をカウントするのと同時にまたはそれより前に前記１つまたは複数のマスクを形成するように構成されるデータ処理装置。
【請求項２】
前記第１の浮動小数点数と、前記第２の浮動小数点数の前記絶対値の差を求めるために差分回路を備える、請求項１に記載のデータ処理装置。
【請求項３】
前記中間値が、いくつかのリーディングゼロを有し、その後に最上位の１が続き、その後にゼロまたは複数の０もしくは複数の１が続いており、
前記最上位の１の位置は、
前記第１の浮動小数点数の前記絶対値と、前記第２の浮動小数点数の前記絶対値の前記差における最上位の１の位置と同一である、または
前記第１の浮動小数点数の前記絶対値と、前記第２の浮動小数点数の前記絶対値の前記差における前記最上位の１の前記位置に隣接するかのいずれかである、請求項２に記載のデータ処理装置。
【請求項４】
前記１つまたは複数のマスクが、前記中間値における前記最上位の１の前記位置を示すｌマスクを備えており、
前記マスク生成回路が、前記中間値を取り込み、前記ゼロまたは複数の０と１を同数の０で置き換えることによって前記ｌマスクを形成する、請求項３に記載のデータ処理装置。
【請求項５】
前記ｌマスクと、前記差に基づいて、前記差の仮数部がオーバーフローしたかどうかを検出するための仮数部オーバーフロー検出回路を備える、請求項４に記載のデータ処理装置。
【請求項６】
前記仮数部オーバーフロー検出回路が、前記ｌマスクと、前記差の下位ビット以外のビットの間で論理ＡＮＤ演算を行うことによって、前記差の前記仮数部がオーバーフローしたかどうかを検出するように構成される、請求項５に記載のデータ処理装置。
【請求項７】
前記仮数部オーバーフロー検出回路が、左に１回シフトされた前記ｌマスクと、前記差の下位ビット以外のビットの間で対での論理ＡＮＤ演算を行うことによって、前記差の前記仮数部がオーバーフローしたかどうかを検出するように構成されている、請求項５に記載のデータ処理装置。
【請求項８】
前記仮数部オーバーフロー検出回路が前記差の前記仮数部がオーバーフローしたことを検出するのに応じて、前記差に対して１ビットの修正するための右シフトを行う、請求項５に記載のデータ処理装置。
【請求項９】
前記ｌマスクに基づいて前記差の所与のビットの値を返すためのビット取得回路を備える、請求項４に記載のデータ処理装置。
【請求項１０】
前記所与のビットは、オーバーフロー最下位ビット、最下位ビット、オーバーフローガードビットおよびガードビットのうちの１つである、請求項９に記載のデータ処理装置。
【請求項１１】
前記ビット取得回路が、前記差のビットのサブセットと、前記ｌマスクのビットのサブセットに対して論理ＡＮＤ演算を行うことによって、前記差の前記所与のビットの前記値を返し、
前記差のビットの前記サブセットと、前記ｌマスクのビットの前記サブセットが、前記所与のビットに依存している、請求項９に記載のデータ処理装置。
【請求項１２】
前記ビット取得回路が、前記差と、右に何回かシフトされた前記ｌマスクに対して論理ＡＮＤを行うことによって前記差の前記所与のビットの前記値を返し、
前記回数は、前記所与のビットに依存している、請求項９に記載のデータ処理装置。
【請求項１３】
前記１つまたは複数のマスクは、前記差におけるリーディング０以外のビットの位置を示すｓマスクを有し、
前記マスク生成回路が、前記中間値を取りこみ、前記ゼロまたは複数の０と１を同数の１で置き換えることによって前記ｓマスクを形成する、請求項３に記載のデータ処理装置。
【請求項１４】
前記ｓマスクに基づいて前記差のゼロまたは複数の後続ビットを返すためにビット取得回路を備える、請求項１３に記載のデータ処理装置。
【請求項１５】
前記ビット取得回路が、前記差のビットのサブセットと、前記ｓマスクのビットのサブセットに対して論理ＡＮＤ演算を行うことによって、前記差の前記ゼロまたは複数の後続ビットを返す、請求項１４に記載のデータ処理装置。
【請求項１６】
前記後続ビットが、オーバーフロースティッキービットを含んでおり、
前記差のビットの前記サブセットが、前記差の後続ｘビットであり、前記ｓマスクのビットの前記サブセットが、前記ｓマスクの後続ｘビットであり、
ｘは、前記差＋１におけるスティッキービットの数に等しい、請求項１５に記載のデータ処理装置。      
【請求項１７】
前記後続ビットが、スティッキービットを含んでおり、
前記差のビットの前記サブセットが、前記差の後続ｙビットであり、
前記ｓマスクのビットの前記サブセットが、前記ｓマスクの後続ｙビットであり、
ｙは、前記差におけるスティッキービットの数に等しい、請求項１５に記載のデータ処理装置。
【請求項１８】
前記第１の浮動小数点数と、前記第２の浮動小数点数が正規化される、請求項１に記載のデータ処理装置。
【請求項１９】
第１の浮動小数点数と、第２の浮動小数点数から中間値を生成するための中間値生成手段であって、前記中間値が、前記第１の浮動小数点数の絶対値と、前記第２の浮動小数点数の絶対値の差におけるリーディング０の数の予測を示すリーディング０の数を有し、前記予測が、前記第１の浮動小数点数の絶対値と、前記第２の浮動小数点数の絶対値の前記差における前記リーディング０の数と最大でも1つしか違わない中間値生成手段と、
前記中間値における前記リーディング０の数をカウントするためのカウント手段と、
前記中間値を利用して１つまたは複数のマスクを形成するためのマスク生成手段と、
を備えるデータ処理装置であって、
前記マスク生成手段が、前記カウント手段が前記中間値における前記リーディング０の数をカウントするのと同時にまたはそれより前に前記１つまたは複数のマスクを形成するデータ処理装置。
【請求項２０】
第１の浮動小数点数と、第２の浮動小数点数から中間値を生成するステップであって、前記中間値が、前記第１の浮動小数点数の絶対値と、前記第２の浮動小数点数の絶対値の差におけるリーディング０の数の予測を示すリーディング０の数を有し、前記予測が、前記第１の浮動小数点数の絶対値と、前記第２の浮動小数点数の絶対値の前記差における前記リーディング０の数と最大でも1つしか違わない中間値生成ステップと、
前記中間値における前記リーディング０の数をカウントするステップと、
前記中間値を利用して１つまたは複数のマスクを形成するステップと、
を含むデータ処理方法であって、
前記１つまたは複数のマスクを形成するステップが、前記カウントステップが前記中間値における前記リーディング０の数をカウントするのと同時にまたはそれより前に行われるデータ処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、データ処理に関する。例えばそれは、浮動小数点数に関係してよい。
【背景技術】
【０００２】
浮動小数点数は、仮数部に基数のべき指数部の累乗を掛けた組み合わせとして表すことができる。例えば０．００１２という値は、仮数部が１．２で、基数が１０であり、指数部が−３である数１．２Ｘ１０−３として表現することが可能である。二進法表現においては、基数が２であることが一般的である。正規化された浮動小数点数は、最低でも１であり、かつ２未満の仮数部を有する。ある浮動小数点数を別の浮動小数点数から減算する際、その結果は極めて小さな数字になる、すなわちリーディングゼロの数が大きくなる可能性がある。リーディングゼロの数（実際の数または予測される数のいずれか）をカウントすることで１つまたは複数のマスクを生成することによって、この数字を正規化することがこれまで提案されてきた。その差を計算する前にこのような作業が行われなかった場合（融合積和演算を行うケースでよくあるように）、ストール(stall)が生じる結果となる可能性があり、リーディングゼロの数を計算することでその差を正規化することができる。
【発明の概要】
【課題を解決するための手段】
【０００３】
第１の例の構成から考察されるように、第１の浮動小数点数と、第２の浮動小数点数から中間値を生成するための中間値生成回路であって、前記中間値が、前記第１の浮動小数点数の絶対値と、前記第２の浮動小数点数の絶対値の差におけるリーディング０の数の予測を示すリーディング０の数を有し、前記予測が、前記第１の浮動小数点数の絶対値と、前記第２の浮動小数点数の絶対値の前記差における前記リーディング０の数と最大でも１つしか違わない中間値生成回路と、前記中間値における前記リーディング０の数をカウントするカウント回路と、前記中間値を利用して１つまたは複数のマスクを形成するマスク生成回路とを備えるデータ処理装置であって、前記マスク生成回路が、前記中間値における前記リーディングゼロの数をカウントするのと同時にまたはそれより前に前記１つまたは複数のマスクを形成するように構成されるデータ処理装置が提供される。
【０００４】
第２の例の構成から考察されるように、第１の浮動小数点数と、第２の浮動小数点数から中間値を生成するための中間値生成手段であって、前記中間値が、前記第１の浮動小数点数の絶対値と、前記第２の浮動小数点数の絶対値の差におけるリーディング０の数の予測を示すリーディング０の数を有し、前記予測が、前記第１の浮動小数点数の絶対値と、前記第２の浮動小数点数の絶対値の前記差における前記リーディング０の数と最大でも１つしか違わない中間値生成手段と、前記中間値における前記リーディング０の数をカウントするためのカウント手段と、前記中間値を利用して１つまたは複数のマスクを形成するためのマスク生成手段とを備えるデータ処理装置であって、前記マスク生成手段が、前記カウント手段が前記中間値における前記リーディング０の数をカウントするのと同時にまたはそれより前に前記１つまたは複数のマスクを形成するデータ処理装置が提供される。
【０００５】
第３の例の構成から考察されるように、第１の浮動小数点数と、第２の浮動小数点数から中間値を生成するステップであって、前記中間値が、前記第１の浮動小数点数の絶対値と、前記第２の浮動小数点数の絶対値の差におけるリーディング０の数の予測を示すリーディング０の数を有し、前記予測が、前記第１の浮動小数点数の絶対値と、前記第２の浮動小数点数の絶対値の前記差における前記リーディング０の数と最大でも１つしか違わない中間値生成ステップと、前記中間値における前記リーディング０の数をカウントするステップと、前記中間値を利用して１つまたは複数のマスクを形成するステップとを含むデータ処理方法であって、前記１つまたは複数のマスクを形成するステップが、前記カウントステップが前記中間値における前記リーディング０の数をカウントするのと同時にまたはそれより前に行われるデータ処理方法が提供される。
【０００６】
本発明を、添付の図面に例示されるようなその実施形態を参照して単なる一例としてさらに記載する。
【図面の簡単な説明】
【０００７】
【図１】一実施形態による一例のデータ処理装置の図である。
【図２】一実施形態による一例のマスク生成器の図である。
【図３】一実施形態による一例の最初のマスク生成回路配線の図である。
【図４】一実施形態によるｌマスク生成回路配線の一例を示す概略図である。
【図５】一実施形態によるｓマスク生成回路配線の一例を示す概略図である。
【図６】マスクを利用して仮数部のオーバーフローを検出し、差の特定のビットを取得するための回路配線を概略的に示す図である
【図７】一実施形態による一例のデータ処理方法を示すフローチャートを含む図である。
【図８】一実施形態による生成されたマスクを利用する一例を示すフローチャートを含む図である。
【発明を実施するための形態】
【０００８】
添付の図面を参照して実施形態を考察する前に、以下の実施形態の記載が提供される。  
【０００９】
一例の構成によって、第１の浮動小数点数と、第２の浮動小数点数から中間値を生成するための中間値生成回路であって、前記中間値が、前記第１の浮動小数点数の絶対値と、前記第２の浮動小数点数の絶対値の差におけるリーディング０の数の予測を示すリーディング０の数を有し、前記予測が、前記第１の浮動小数点数の絶対値と、前記第２の浮動小数点数の絶対値の前記差における前記リーディング０の数と最大でも１つしか違わない中間値生成回路と、前記中間値における前記リーディング０の数をカウントするカウント回路と、前記中間値を利用して１つまたは複数のマスクを形成するマスク生成回路とを備えるデータ処理装置であって、前記マスク生成回路が、前記カウント回路が前記中間値における前記リーディングゼロの数をカウントするのと同時にまたはそれより前に前記１つまたは複数のマスクを形成するように構成されるデータ処理装置が提供される。
【００１０】
第１の浮動小数点数と、第２の浮動小数点数が付与されると、中間値生成回路は中間値を生成する。この中間値を使用して、第１の浮動小数点数（ａ）と、第２の浮動小数点数（ｂ）の絶対値の差におけるリーディングゼロの数を予測することができる。二進算術演算において、差は和演算を行うことによって計算することができ、それ故に「差」という用語は、必ずしも減算を行うことは必要とせず、むしろ２つの項の絶対値における差、すなわち||ａ|-|ｂ||を指している。この中間値を使用してリーディングゼロの数の予測を求めることができるが、この予測は１だけずれる可能性がある。詳細には、予測は、絶対値の差の計算中のいずれかの段階において「キャリー」が生じる可能性を考慮していない可能性がある。いずれにしても中間値を生成してから、マスク生成回路を使用してこの中間値を利用して１つまたは複数のマスクを形成する。さらに、マスクは、カウント回路が中間値におけるリーディングゼロの数をカウントするのと同時にまたはそれより前に生成される。よって、中間値におけるリーディングゼロの数をカウントし、その後その情報を利用してマスクを生成する方法と比べてより迅速にマスクが生成される。その結果、マスクをより迅速に利用できるようになり、そのため浮動小数点数の絶対値の差を計算するのと同時に利用できるようにすることができる。中間値は、２つの浮動小数点数における絶対値の差の計算の中間の値であってよく、例えばそれはその計算を通して中程で使用される値であってよい。例えばマスクは、中間値から直接生成される場合もある。
【００１１】
いくつかの実施形態において、データ処理装置は、前記第１の浮動小数点数の前記絶対値と、前記第２の浮動小数点数の前記絶対値の差を求めるために様々な回路を備える。そのような様々な回路を使用して、２つの浮動小数点数の絶対値における実際の差を求めることができる。しかしながらこの差は正規化されていない場合があり、正規化は、中間値に基づいて行うことができる。
【００１２】
いくつかの実施形態において、前記中間値はいくつかのリーディングゼロを有し、その後に最上位の１が続き、その後にゼロまたは複数の０と１が続いており、前記最上位の１の位置は、前記第１の浮動小数点数の前記絶対値と、前記第２の浮動小数点数の前記絶対値の前記差における最上位の１の位置と同一である、または前記第１の浮動小数点数の前記絶対値と、前記第２の浮動小数点数の前記絶対値の前記差における前記最上位の１の前記位置に隣接するかのいずれかである。これらの実施形態において、中間値は、２つの浮動小数点数の絶対値の差におけるリーディングゼロの数を、この差と同数の（またはそれより１つ多い）リーディングゼロの数を有することによって示している。例えば差０００００１００１は、同数のリーディングゼロを有する０００００１１０１場合、または１つ多いリーディングゼロを有する００００００１０１の中間値を有する場合がある。
【００１３】
いくつかの実施形態において、前記１つまたは複数のマスクは、前記中間値における前記最上位の１の前記位置を示すｌマスクを有し、前記マスク生成回路は、前記中間値を取り込み、前記ゼロまたは複数の０と１を等しい数の０で置き換えることによって前記ｌマスクを形成する。マスク生成回路によって中間値から形成されるマスクの１つは、ｌマスクである。ｌマスクは、一連の数のリーディングゼロと、後に続く一連の数のリーディング１とで構成されている。一連のリーディングゼロの数は、浮動小数点数の絶対値の差におけるリーディングゼロの数と同じである、またはその数から１つだけ異なっている。例えば００１１０の差と仮定すると、ｌマスクの可能な値は、リーディングゼロの数が同じである場合は００１１１であり、または１つだけ多い場合は０００１１である。
【００１４】
いくつかの実施形態において、データ処理装置は、前記ｌマスクと、前記差に基づいて、前記差の仮数部がオーバーフローしたかどうかを検出するための仮数部オーバーフロー検出回路を備える。仮数部がオーバーフローしたか否かを判別することができるいくつかの方法がある。しかしながらいくつかの実施形態において、前記仮数部オーバーフロー検出回路は、前記ｌマスクと、前記差の下位ビット以外のビットの間で論理ＡＮＤ演算を行うことによって、前記差の前記仮数部がオーバーフローしたかどうかを検出するように構成されている。例えば対応する一対のビット間で論理ＡＮＤ演算を行い、その後リダクションＯＲ演算を行うことによって（すなわち結果として生じたＡＮＤ演算からの全てのビット間でＯＲ演算を行うことによって）、仮数部がオーバーフローしたかどうかを示す全体的な結果を求めることができる。これは、対応する一対のビット間での論理ＡＮＤ演算の一方が正である場合（すなわちｌマスクにおける対応するビットと、差における対応するビットが両方とも「１」である場合）、このとき指数部のオーバーフローが発生しているという結果を有する。当然のことながら、仮数部のオーバーフローの有無を異なる方法で示すために他の論理演算が行われる場合もあることも理解されたい。例えばリダクションＯＲ演算の結果を反転することによって、「０」は、仮数部のオーバーフローが発生したことを示す。
【００１５】
いくつかの実施形態において、前記仮数部オーバーフロー検出回路は、左に１回シフトされた前記ｌマスクと、前記差の下位ビット以外のビットの間で対での論理ＡＮＤ演算を行うことによって、前記差の前記仮数部がオーバーフローしたかどうかを検出するように構成されている。そのような実施形態では、比較すべき関連するビット同士を「ワイヤリング(wiring)」する代わりに、ビットを１の位左に物理的にシフトする論理的な左シフト演算が行われる。これまで通り、シフトされたｌマスクと差の間の対応するビットに対してビット単位のＡＮＤ演算を行うことができる。いくつかの実施形態において、さらなるリダクションＯＲ演算を行うことで、仮数部のオーバーフローが発生したかどうかの指標を得ることができる。オーバーフローを判別する他の方法も存在することを理解されたい。例えば、対応するビットに対してビット単位の論理ＡＮＤ演算を行う前に、差に対して右への論理シフトが行われる場合もある。
【００１６】
いくつかの実施形態において、データ処理装置は、前記ｌマスクに基づいて前記差の所与のビットの値を返すためのビット取得回路を備える。そのようなビット取得回路によって返すことができるいくつかの異なるビットが存在する。例えば一部の実施形態では、前記所与のビットは、オーバーフロー最下位ビット、最下位ビット、オーバーフローガードビットおよびガードビットのうちの１つである。最下位ビットは、仮数部の最下位ビットを指す。ガードビットは、次の最下位ビットを指す（例えば仮数部の一部ではない最上位ビット）。このようなビットの各々が、丸め処理のプロセスにおいて使用される。オーバーフロー最下位ビットと、オーバーフローガードビットは、仮数部がオーバーフローした場合の最下位ビットと、ガードビットを指す。仮数部のオーバーフローによって、これらのビットは１の位だけ有意レベルが上がる。
【００１７】
ビット取得回路が所与のビットを取得することができるいくつかの方法がある。しかしながら一部の実施形態では、前記ビット取得回路は、前記差と、右に何回かシフトされた前記ｌマスクに対して論理ＡＮＤを行うことによって前記差の前記所与のビットの前記値を返し、前記回数は、前記所与のビットに依存している。いくつかの実施形態において、差が所与のビットに従って何回か左にシフトされる場合もある。  
【００１８】
いくつかの実施形態において、前記１つまたは複数のマスクは、前記差におけるリーディング０以外のビットの位置を示すｓマスクを有し、前記マスク生成回路は、前記中間値を取りこみ、前記ゼロまたは複数の０と１を同数の１で置き換えることによって前記ｓマスクを形成する。ｓマスクは、マスク生成回路によって形成することができる第２のマスクである。ｌマスクが最上位の１から後のビットをゼロに設定することによって形成されるのに対して、ｓマスクは、最上位の１から後の全てのビットを１に設定する。ｓマスクにおけるビットの数は、中間値におけるビットの数と等しい。  
【００１９】
いくつかの実施形態において、データ処理装置は、前記ｓマスクに基づいて前記差のゼロまたは複数の後続ビット(trailing bits)を返すためにビット取得回路を備える。ｓマスクはこれにより、差からいくつかの一連の最下位ビットを返すのに利用することができる。
【００２０】
差の後続ビットを取得するのにｓマスクを使用することができるいくつかの方法がある。しかしながら一部の実施形態では、前記ビット取得回路は、前記差のビットのサブセットと、前記ｓマスクのビットのサブセットに対して論理ＡＮＤ演算を行うことによって前記差の前記ゼロまたは複数の後続ビットを返す。いくつかの実施形態において、サブセットには、ｓマスクの全てのビットと、差の全てのビットが含まれる。一部の他の実施形態において、サブセットは厳密なサブセットであり、ｓマスクと差のビットの一部のみが含まれる。
【００２１】
いくつかの実施形態において、前記後続ビットは、オーバーフロースティッキー(sticky)ビットを含んでおり、前記差のビットの前記サブセットは、前記差の後続ｘビットであり、前記ｓマスクのビットの前記サブセットは、前記ｓマスクの後続ｘビットであり、ｘは、前記差＋１におけるスティッキービットの数に等しい。差の後続ｘビットと、ｓマスクの後続ｘビットは、例えば差とｓマスクのｘ最下位ビットを指す場合がある。オーバーフロースティッキービットは、仮数部がオーバーフローした場合にスティッキービットになる（例えば仮数部の最上位ビットの差の計算中にキャリーが発生した結果として左に１回シフトされた）ビットを指している。
【００２２】
いくつかの実施形態において、前記後続ビットは、スティッキービットを含んでおり、前記差のビットの前記サブセットは、前記差の後続ｙビットであり、前記ｓマスクのビットの前記サブセットは、前記ｓマスクの後続ｙビットであり、ｙは、前記差におけるスティッキービットの数に等しい。
【００２３】
いくつかの実施形態において、前記第１の浮動小数点数と、前記第２の浮動小数点数は正規化される。例えば第１の浮動小数点数と、第２の浮動小数点数は、カウント回路がリーディングゼロの数をカウントする前、かつマスク生成回路が１つまたは複数のマスクを形成する前に正規化される。正規化された浮動小数点数は１以上かつ２未満の仮数部を有する。
【００２４】
特定の実施形態を次に図面を参照して記載する。
【００２５】
浮動小数点（ＦＰ）は、少ない数のビットを利用して実数の近似値を求める有効な方法である。ＩＥＥＥ７５４-２００８ＦＰ標準規格は、ＦＰ数に関して多様な異なる形式を提案しており、これには、バイナリ６４（倍精度(Double Precision)、すなわちＤＰとしても知られる）、バイナリ３２（単精度(Single Precision)、すなわちＳＰとしても知られる）、およびバイナリ１６（半精度(Half Precision)、すなわちＨＰとしても知られる）が含まれる。数字６４、３２および１６は、各々の形式に関して必要とされるビットの数を指している。
【００２６】
ＦＰ数は、科学の分野で教示される「科学記数法」と極めて似ており、この場合-２００万の代わりに-２．０×１０６と書く。この数字の要素は、符号（このケースではマイナス）と、仮数部（２．０）と、指数部の基数（１０）と、指数部（６）である。これらの要素の全ては、そこに相違点もあるが、ＦＰ数においては類似の形を有し、その中で最も重要なのは、構成する要素が２進数として格納され、指数部の基数が常に２であることである。
【００２７】
より正確には、ＦＰ数は、符号ビットと、任意の数のバイアスがかけられた指数部ビットと、任意の数の小数部ビットとで構成される。詳細には、その形式が、以下のビットで構成されていることに我々は興味を惹かれる。
【００２８】
【表１】
2018097864.tif 000003
【００２９】
負の数に対して符号は１であり、正の数に関しては０である。典型的にはゼロを含めた全ての数が符号を有する。
【００３０】
指数部はバイアスをかけられ、このことは、真の指数部が、この数字に格納されたものと異なっていることを意味している。例えばバイアスされたＳＰ指数部は８ビット長であり、０から２５５の範囲である。指数部０と２５５は、特殊なケースであるが、全ての他の指数部は１２７だけバイアスされており、真の指数部が、バイアスされた指数部より１２７小さいことを意味している。最小のバイアスされた指数部は１であり、これは−１２６の真の指数部に相当する。最大のバイアスされた指数部は２５４であり、これは１２７の真の指数部に相当する。ＨＰおよびＤＰ指数部も同じように作用し、上記の表示されるバイアスを含む。
【００３１】
ＳＰ指数部２５５（またはＤＰ指数部２０４７またはＨＰ指数部３１）は、無限大と、ＮａＮ(非数：Not a Number)と呼ばれる特殊なシンボルが指定されている。無限大（正または負であり得る）は、ゼロの小数部を有する。指数部２５５と、非ゼロ小数部を含むいずれの数字もＮａＮである。無限大は飽和値を提供し、そのためそれは実際には「この計算値が、この形式で表すことができるものより大きい数となる」というようなことを意味している。ＮａＮは、例えばゼロで割る、または負の数の平方根を取るなど、実数に対して数学的に定義されない演算のために返される。
【００３２】
指数部ゼロは、いずれの形式においても、サブノーマル数とゼロが指定される。正規の数は、
-１符号×(１．小数部)×２ｅ
の値を表しており、
この場合、ｅは、バイアスされた指数部から算出された真の指数部である。項(１．小数部)は、仮数部と呼ばれ、１は、ＦＰ数の要素として格納されないが、代わりに指数部から推測される。ゼロと最大指数部以外の指数部は、形式(１．小数部)の仮数部を示す。指数部ゼロは、形式(０．小数部)の仮数部を示しており、真の指数部は、所与の形式で（１−バイアス）と等しいことを示している。そのような数字は、サブノーマル数と呼ばれる（歴史的にこのような数字は、デノーマルと呼ばれていたが、現在の慣習では用語サブノーマルの方が好まれる）。
【００３３】
指数部と小数部の両方がゼロに等しい数は、ゼロである。
【００３４】
以下の表は、ＨＰ形式におけるいくつかの例の数字を有する。エントリは二進法であり、読みやすくするために‘_’の文字が加えられている。サブノーマルエントリ（表の４番目のライン、ゼロの指数を含む）は、直前のラインにおけるノーマルエントリとは異なる指数を生むことに留意されたい。
【００３５】
【表２】
2018097864.tif 000004
【００３６】
ＦＰ実装が複雑であることの大部分はサブノーマルに起因するものであり、そのためそれらは、マイクロコードまたはソフトウェアによって扱われることが多い。サブノーマルは、ハードウェアにおいて扱うこともでき、ソフトウェアやマイクロコードの実装と比べて１０から１００倍その演算を速めることができる。
【００３７】
符号を扱うＦＰ方式は、サイン−マグニチュード（ｓｉｇｎ-ｍａｇｎｉｔｕｄｅ）と呼ばれ、整数がコンピュータに格納される通常のやり方（２の補数）とは異なる。サイン−マグニチュード表現では、同じ数字の正のバージョンと負のバージョンは、符号ビットのみが異なる。符号ビットと、３の仮数部ビットとで構成される４ビットのサイン−マグニチュードの整数は、プラスのものとマイナスのものを、
+１=０００１    -１=１００１
として表す。
【００３８】
２の補数の表現では、ｎビットの整数ｉは、
バイナリｎ+１-ｂｉｔ値２ｎ+ｉの下位ｎビットによって表され、そうすると４ビットの２の補数の整数は、プラスとマイナスを
+１=０００１    -１=１１１１
として表現する。
【００３９】
２の補数形式は実際には、それがコンピュータ算術を簡素化することから、符号付きの整数に関して一般的である。
【００４０】
固定小数点数は、厳密に整数と同じであるように見えるが、実際には、特定の数の小数分ビットを有する値を表現している。センサデータは固定小数点形式である場合が多く、ＦＰが広く採用される前に書かれた大量の固定小数点ソフトウェアが存在している。固定小数点数は、プログラマーが「二進小数点」、すなわちその数字の整数と小数部分の間の分離符号を常時監視する必要がある、かつまたビットを正確な場所に維持するためにその数字を絶えずシフトする必要があることから、それを使って作業するのはかなり面倒なものである。ＦＰ数には、このような支障がなく、そのため固定小数点数とＦＰ数を切り替えることが可能であることが望ましい。切り替えが可能であるということは、固定小数点のソフトウェアとデータを引き続き使用することができるが、新たなソフトウェアを書いたときには固定小数点に限定されないことも意味している。
【００４１】
大抵のＦＰ演算は、演算が無限の範囲と精度で行われると仮定して計算され、その後ＦＰ数に収まるように丸められることがＩＥＥＥ-７５４標準規格によって要求されている。計算結果がＦＰ数にきっかり一致した場合、このときその値は常に返されるが、通常は、計算結果は、２つの連続した浮動小数点数の間にある値となる。丸め処理は、２つの連続する数字のどちらが返されるべきかを選ぶプロセスである。
【００４２】
丸め処理には、丸め処理モードと呼ばれるいくつかの方法があり、これらのうちの６つの例は以下の通りである。
【００４３】
【表３】
2018097864.tif 000005
【００４４】
この定義は、任意の実際の方法でどのように丸め処理を行うかについて伝えるものではない。１つの一般的な実装は、演算を行い、打ち切り後の値（すなわちＦＰ形式に収まる値）を見ると同時に残りのビットも見て、このとき特定の条件を保持するならば打ち切り後の値を調節することである。これらの計算は全て
Ｌ−(最下位)打ち切り後の値の最下位ビット 
Ｇ−(ガード)次の最上位ビット（すなわち打ち切りに含まれない最初のビット）
Ｓ−(スティッキー)打ち切りの部分ではない全ての残りのビットの論理ＯＲ
に基づいている。
【００４５】
これらの３つの値と、打ち切り後の値が与えられたならば、以下の表に従って正確に丸められた値を常に計算することができる。
【００４６】
【表４】
2018097864.tif 000006
【００４７】
例えば２つの４ビットの仮数部を掛け、その後４ビットの仮数部に丸めると考える。
ｓｉｇ１=１０１１(１０進法の１１)  
ｓｉｇ２=０１１１（１０進法の７)
を掛けると、
ｓｉｇ１×ｓｉｇ２=１００１_１０１(１０進法の７７)となる。
【００４８】
４つの最下位ビット（１１０１）は、その桁におけるビットＬＧｓｓに相当する。
【００４９】
打ち切り後の４ビットの結果の最下位ビットはＬ、次のビットはＧとラベルされ、Ｓはｓとラベルされた残りのビットの論理ＯＲ（すなわちＳ＝０|１=１) である。丸め処理を行うために、その４ビットの結果（１００１）を上記の表の丸め処理モードと、計算方法に従って調節する。そうして例えばＲＮＡ丸め処理において、Ｇが設定されると、我々は１００１+１=１０１０を返す。ＲＸ丸め処理の場合、Ｇ|Ｓが真であるとＬを１に設定し（それは既に１であり、そのためこのケースでは、何も変化しない）、１００１を返す。
【００５０】
図１は、一実施形態によるデータ処理装置１００を例示している。この例において、データ処理装置は、各々が１０６ビットである２つの仮数部オペランド（ｓｉｇａと、ｓｉｇｂ）を受け取る。この例では、「ｓｉｇａ」に指定される値は、ｓｉｇａとｓｉｇｂのうちの大きい方である。しかしながら代替の一実施形態では、データ処理装置１００は、ｓｉｇａ−ｓｉｇｂと、ｓｉｇｂ−ｓｉｇａの両方を計算するために構成が複製される場合もある。各々のオペランドは１０６ビットであるが、これは、それが融合積和（ＦＭＡ：fuse-multiply-add）演算の計算において使用される融合仮数部のサイズであるためである。その他の仮数部のサイズも使用され得ることを理解されたい。これらの２つの値は、加算回路１１０に渡される。その目的はｓｉｇａとｓｉｇｂの差を求めることであるが、これは、ｓｉｇｂを２つの補数形式に変換し、ｓｉｇａと、ｓｉｇｂと、１とを加算することによって達成することができる。これは加算回路１１０を利用し、加算回路１１０のキャリーフラグを「１」に設定して「１」の加算を実現することによって達成される。値ｓｉｇａと、ｓｉｇｂは、中間値生成回路１３０にも渡され、この回路はリーディングゼロ予想装置１２０の一部を形成しており、このリーディングゼロ予想装置が、ｓｉｇａの値とｓｉｇｂの値の差におけるリーディングゼロの数を推測する。中間値生成回路１３０は、中間値（ｗ）を生成する。中間値ｗは、加算回路１１０によって計算された差におけるリーディングゼロの数と等しい、またはそれとは１つ異なるリーディングゼロの数を有するようなものである。これにより中間値生成回路が、差におけるリーディングゼロの数を予測することができる。この中間値ｗは、ｗにおけるリーディングゼロの数をカウントするカウント回路１４０によって分析される。その結果（ｌシフト）は、加算回路１１０によって計算された差を正規化するにはどのくらいの左シフトを行うべきかについて、シフト回路１６０に推定値を与える７ビットの数字である。
【００５１】
これとは別に中間値生成回路１３０によって形成された中間値（ｗ）は、１つまたは複数のビットマスクを生成するためにマスク生成回路１５０に提供される。マスク生成回路１５０の作動は、後により詳細に示される。しかしながらこれらのマスクの１つまたは複数は、オーバーフローおよび丸め処理回路１７０に渡され、この回路が、マスク生成回路１５０によって形成されたマスクの１つまたは複数を利用して仮数部のオーバーフローが発生したか否かを判別する。仮数部のオーバーフローは、加算回路１１０によって行われる計算において所持されるビットに起因して仮数部のサイズが大きくなった場合に発生する。このようなことが起こった場合、この場合右のビットシフタ１８０を使用して仮数部を１ビット右にシフトさせることで相殺する。この演算の結果（右に０または１のいずれかのシフト）は、ｓｉｇａとｓｉｇｂとの正規化された差である。図１の回路配線において、マスク生成回路１５０は中間値（ｗ）からマスクを形成するため、カウント回路１４０がカウントする演算を完了するのと同時にまたはその前にマスクを形成する。この方法において、オーバーフローおよび丸め処理回路１７０が、仮数部のオーバーフローが発生したか否かをより迅速に判別することが可能である。
【００５２】
図２は、一実施形態によるマスク生成回路１５０の一例を図示する。マスク生成回路１５０は、一次マスク回路１９０を備えており、これは中間値生成回路１３０から中間値（ｗ）を受け取り、この中間値に対して最初の一セットの計算を行う。これらの最初の計算はその後、ｌマスクを計算するためにｌマスク生成回路２００に渡され、ｓマスクを計算するためにｓマスク生成回路２１０に渡される。ｌマスクは、１が後に続く中間値（ｗ）と同数のリーディングゼロを含む。残りのビットは全てゼロである。ｓマスクもまた、１が後に続く中間値（ｗ）と同数のリーディングゼロを含む。残りのビットは全て１である。そうすると、例えば中間値（ｗ）が０００１１０１００１００と仮定すると、ｌマスクは０００１００００００００になり、ｓマスクは０００１１１１１１１１１になる。これらのマスクを利用して、仮数部のオーバーフローが発生したか否かを判別することができる、または所望されるように差の計算から特定のビットを抜き出すことができる。
【００５３】
図３は、１６ビットの数に適した一次マスク回路１９０の一例を例示する。当業者は、この構造は最初の一セットの計算を生み出すために一般化することができることを理解されるであろう。この最初の計算は、ｗの一連のビットの異なるサブセットの論理ＯＲを表している。当業者が理解するように、そのようなビットのいずれか１つが「１」であるならば、ビットのサブセットの論理ＯＲは「１」になる。隣り合うビットの各々の対（例えばｗ０とｗ１、ｗ２とｗ３、ｗ３とｗ４など）が入力としてＯＲゲートに挿入される。１つのレベルにおけるＯＲゲートからの出力は、次のレベルで入力としてＯＲゲートに提供される。このようにして、ＯＲゲートの数を各レベルにおいてトップレベルになるまで半分に減し、その入力におけるビットのいずれかが「１」であるか否かを示す１つのＯＲゲートとなる。これに加えて、各々のＯＲゲートに対する第１の入力（最初のレベルにおけるもの以外）が、最初の計算としてｌマスク生成回路２００およびｓマスク生成回路２１０に提供される。図３の例では、最初の計算には、(１５:０)または(１５:８)または(１５:１２)または(７:４)または(１５:１４)または(１１:１０)または(７:６)または(３:２)の値が含まれる。この情報を利用して、「１」である任意の値についての最上位の「１」を迅速に突き止めることができる。このような内部値は図４において使用されることでｗ（中間値）における最上位の「１」を迅速に見つけることを可能にする。
【００５４】
図４は、ｌマスク生成回路２００を例示しており、これはいくつかのＡＮＤゲートで構成されており、ＡＮＤゲートの各々は、２つの入力のうちの一方を反転させる。ｌマスク生成回路は、一次マスク回路１９０によって生まれた最初の計算を利用して、一続きの出力ビット（ｍ０・・・ｍ１５）を生成し、これらがｌマスクのビットを表す。第１のレベルにおいて、各々のグループは、一対のビット（例えばｗ０とｗ１、ｗ２とｗ３、ｗ３とｗ４など）を含み、上位ビットが続いており、下位ビットは、上位ビットのＯＲの反転した形式と共に（すなわち最初のレベルにおける上位ビット自体）ＡＮＤゲートへの入力として受信される。換言すると、各グループにおいて、上位の半数が「１」ではない場合、下位の半数はもっぱら「１」になる。第１のレベルの場合、例えば、ｗ１５が「１」ではない場合、ｗ１４はもっぱら「１」であり得る。これにより、各々のグループに関して一対の出力が生じることになり、最初の出力はそのグループの上部の半数が「１」であるかどうかを示しており、次の出力は、そのグループの下部の半数が「１」であるかどうかを示している。各々のその後のレベルにおいて、隣接するグループ同士が結合される。したがって第２のレベルでは、第１のグループは、最初の４ビット（ｗ０−ｗ３）に関連する。ここでもまたビットの上部の半数は自動的に進み、下位の半数は、上位のビットのＯＲの反転した形式と共に、ＡＮＤゲートへの入力として受信される。ここでもまた換言すると、各々のグループにおいて、上位の半数が「１」ではない場合、下位の半数はもっぱら「１」になる。よって第２のレベルの場合、ｗ３とｗ２はそのまま進む。反対にｗ０とｗ１は各々ＡＮＤ演算される、または(３:２)である。 この結果は４つの出力である。
【００５５】
出力の数字は各レベルにおいて同一である。同様に各レベルにおいて、ＡＮＤゲートの数字は、ｂ／２と等しく、ｂはｗのビット数である。
【００５６】
図５は、ｓマスク回路２１０を例示する。ｓマスク回路は、一部を反転するＡＮＤゲートがＯＲゲートによって置き換えられていることを除いて、図４に示されるｌマスク回路と一致している。
【００５７】
図６は、オーバーフローおよび丸め処理回路１７０を概略的に例示しており、これはｌマスクとｓマスクを使用して仮数部のオーバーフローを検出し、加算回路１１０によって計算された差の特定のビットを取得する。オーバーフローおよび丸め処理回路１７０は、マスク生成回路１５０によって形成された１つまたは複数のマスクを受け取る。
【００５８】
仮数部オーバーフロー検出回路２２０によってｌマスクを利用して、仮数部のオーバーフローを検出する。これは、ｌマスクを１ビット左に移動させ、シフトされたｌマスクと差の間でビット毎のＡＮＤ演算を行い、その後その結果に対してリダクションＯＲを行うことによって達成することができる。しかしながら実際にはシフト演算を実際に行う必要はなく、代わりに適切なビットを直接結びつけることができるため所望されるビットを操作することができる。詳細には、仮数部のオーバーフロー信号は、式|(ｌマスク[１０５:０]&差[１０６:１])によって計算することができる。
【００５９】
オーバーフローおよび丸め処理回路１７０はまた、加算回路１１０によって計算された差から特定のビットを取得するためにビット取得回路２３０を含む。例えば要求されるビットは、オーバーフロー最下位ビット、最下位ビット、オーバーフローガードビットおよびガードビットであり得る。最下位ビットと、ガードビットのオーバーフローヴァージョンは、仮数部がオーバーフローした場合の（これによりオーバーフローガードビットの位置は、最下位ビットと同じである）最下位ビットと、ガードビットに相当する。したがってオーバーフロー最下位ビットは、ｌマスクを５２ビットを右に移動させることによって検出することができ、オーバーフローガードビット（または最下位ビット）は、ｌマスクを５３ビット右に移動させることによって検出することができ、ガードビットは、ｌマスクを５４ビットを右に移動させることによって検出することができる。各々のケースにおいて、シフト後のｌマスクはその後、差とビット単位でＡＮＤ演算され、リダクションＯＲが行われる。シフトの回数は、ｓｉｇａおよびｓｉｂａの性質に左右される。この例では、２つの値は共に倍精度であり、故に仮数部は５３ビット長であると推測される。ここでもまた実際は、実際にｌマスクをシフトする必要はない。代わりに、適切なビットを直接結びつけることで関連するビットを操作することができる。したがってオーバーフロー最下位ビットは、この例では、式|(ｌマスク[１０６:５１]&差[５５:０])によって求めることができ、最下位ビットまたはオーバーフローガードビットは、式|(ｌマスク[１０６:５１] &差[５５:０])によって求めることができ、その一方でガードビットは、式|(ｌマスク[１０６:５３]&和[５３:０])によって求めることができる。ｌマスクの上部のｔビットと、差の下部のｔビットの間でビット単位のＡＮＤ演算が行われる。
【００６０】
ｓマスクはまた、オーバーフロースティッキービットと、ノーマルスティッキービットを取得するために、ビット取得回路２３０によって使用される場合もある。スティッキービットは、ガードビットに続く全てのビットに対してＯＲを行った結果として生じる。よって差から後続ビットを取得するためにｓマスクを利用する必要がある。倍精度の浮動小数点数の上記の例では、スティッキービットは、差の下位の５４ビットにおいてのみであり得る。したがってオーバーフロースティッキービットを計算する作業は、式|(ｓマスク[５３:０]&差[５３:０])によって達成され、スティッキービットは、式|(ｓマスク[５２:０]&差[５２:０])によって達成される。
【００６１】
図７は、一実施形態による一例のデータ処理方法を示すフローチャート２４０を例示している。プロセスはステップ２５０において始まり、ここで中間値（ｗ）が生成される。プロセスはその後２つの部分に分かれる。ステップ２６０において、中間値（ｗ）におけるリーディングゼロの数が計算される。これはカウント回路１４０によって実現することができる。ステップ２６０が完了するときに終了するウィンドウタイムの間に、ステップ２７０において、例えばマスク生成回路１５０によって１つまたは複数のマスクが形成される。
【００６２】
図８は、一実施形態による生成されたマスクを利用する一例を示すフローチャート２８０を含んでいる。ステップ２９０において、２つの浮動小数点仮数部の和（または差）が、生成されたマスクと比較される。これは、仮数部オーバーフロー検出回路２２０によって実現することができる。ほぼ同時に、和（または差）が、カウント回路１４０によって指示される回数だけ左にシフトされる。これは左シフタ１６０によって実現することができる。いずれのケースでも、ステップ３１０において、仮数部のオーバーフローが発生したか否かが仮数部オーバーフロー検出回路２２０より判定される。もし発生したならば、このときステップ３２０において、和／差に対して１ビットの右シフトが（例えば右シフタ１８０によって）行われる。いずれのケースでも、ステップ３３０において正規化された和／差が出力される。
【００６３】
同様のやり方で、仮数部のオーバーフローが発生したか否かに関わらず、ビット取得回路２３０を使用して特定のビットの値を求めることができる。これらの値は、そのような値と、行われる丸め処理演算に従って、正規化された和に対して丸め演算を行うための出力である場合がある。
【００６４】
上記の実施形態はよって、マスクを形成することで、差／和におけるリーディングゼロの数を概算する中間値（ｗ）を利用することによって、より迅速に仮数部のオーバーフローを判別し、かつ差／和演算の特定のビットを取得することが可能である。この方法において、マスクを使用しない場合、または中間値（ｗ）のリーディングゼロの数から生成されたマスクを使用しなかった場合に比べて、より迅速に出力を正規化する（および出力を丸める）ことも可能である。これはとりわけ、入力の指数は同一である、または１つずれており、よって多くのリーディングゼロを伴う数字となり得る「近経路(near path)」演算において有効である可能性がある。
【００６５】
最初の研究された例を検討すると、そこではｓｉｇａ＝１００１_１０１０であり、ｓｉｂａ＝１０００_１１００である。演算ｓｉｇａ−ｓｉｂａは、ｓｉｇａ＋〜ｓｉｂａ＋１（これは２つの補数減算である）。この演算の結果は、００００_１１１０である（いかなる整数オーバーフローも無視する）。よってその差は４つのリーディングゼロを有する。中間値は、この差と同じ（または１つ多い）リーディングゼロを有することになる。厳密には、いかにしてｗが計算されるかは、この文献の範囲を超えており、これまでどこかで十分に考察されている。このケースでは、中間値は、００００_１００１である。換言すると４つのリーディングゼロが予測される。ｌマスクは００００_１０００となり、ｓマスクは００００_１１１１となる。|(ｌマスク[７:０]&差[８:１])の結果は０である。よってオーバーフローは発生していない。これは、加算演算において上部の４つのビットを加えたことで００００となり、その一方で下部の４つのビットにおいてはキャリーアウトが発生していないことに注目することによって確認することができる。
【００６６】
２番目の研究された例を検討すると、そこではｓｉｇａ=１００１_１０１０であり、ｓｉｇｂ=０１１０_１１１１である。演算の結果は、００００_１０１０である。中間値はこのケースでは００００_０１０１である。ｌマスクはよって、００００_０１００であり、ｓマスクは００００_０１１１である。したがって５つのリーディングゼロが予測される。しかしながら|(ｌマスク[７:０]&差[８:１])の結果は１である。故に、仮数部のオーバーフローが発生している。これは、加算演算において上部の５つのビットを加え、その結果が０００００であることに注目することによって確認することができる。その一方で、下部の３つのビットでは、キャリーアウトが発生している。ｗによる予測は故に１つだけずれ、そのためリーディングゼロの正確な数は４である。図１における回路配線では、これは左シフタ１６０がｗに基づいて５つの左シフトを実行することになる。仮数部のオーバーフローの検出によってその後、予測ミスの補正を行うために、右シフタ１８０によるさらなる１ビットの右シフトが生じることになる。
【００６７】
本出願において、「・・・で構成される」という言葉は、特定の装置の１つの要素が、規定された操作を実行することが可能な構成を有することを意味するのに使用される。この文脈において、「構成」とは、ハードウェアまたはソフトウェアの相互接続の構成または方式を指している。例えば装置は、規定された動作を提供する専用ハードウェアを有する場合がある、あるいはプロセッサまたは他の処理デバイスがその機能を果たすようにプログラムされる場合もある。「構成される」とは、規定された動作を提供するために装置の要素を何らかの方法で変更させる必要があることは示唆していない。
【００６８】
本発明の例示の実施形態を添付の図面を参照してここに詳細に記載してきたが、本発明は、そのような厳密な実施形態に限定されるものではなく、添付のクレームによって定義される本発明の精神および範囲から逸脱することなく、当業者によって種々の変更、追加および修正をそこに行うことができることを理解されたい。例えば、本発明の範囲から逸脱することなく、従属クレームの特徴の様々な組み合わせを独立クレームの特徴との併せて作成することができる。
【図１】
2018097864.tif 000007
【図２】
2018097864.tif 000008
【図３】
2018097864.tif 000009
【図４】
2018097864.tif 000010
【図５】
2018097864.tif 000011
【図６】
2018097864.tif 000012
【図７】
2018097864.tif 000013
【図８】
2018097864.tif 000014
【外国語明細書】
2018097864000001.pdf