説明

スケールされた整数を用いた浮動小数点演算

複数のスケールされた整数を用いて複数の数学演算を実行するための複数の方法、複数の装置、および複数の製品が開示される。具体的には、一例の方法は、スケールされた整数値を認識し、スケールされた整数値に基づいて、乗数値およびスケール値を決定する。乗数値は、スケールされた整数値に基づいて、ビット領域の第一の部分から情報を抽出することにより決定される。スケール値は、スケールされた整数値に基づいて、ビット領域の第二の部分から情報を抽出することにより決定される。ビット領域の第一の部分および第二の部分は、符号付き整数値を有するように構成することができる。例の方法は、乗数値およびスケール値に基づいて、算術演算を実行する。


【発明の詳細な説明】
【技術分野】
【0001】
本開示は、広く複数のプロセッサシステムに関し、より具体的には、複数のスケールされた整数を用いた複数の数学演算を実行するための、複数の方法、複数の装置、および複数の製品に関する。
【背景技術】
【0002】
複数のグラフィクスプロセッシングアプリケーションなどの多くのアプリケーションは、一般的に複数の整数ベース演算および/または複数の浮動小数点ベース演算を用いて実装される複数の計算的に激しい演算を伴う。例えば、Intel(登録商標) XScale(登録商標)プロセッサファミリの複数のモバイルプロセッサなどの多くのモバイルプロセッサは、生来の複数の整数ベース演算を提供する整数ベースのプロセッサである。より低い性能の複数のグラフィクスアプリケーションは、しばしば整数データ型を用いる複数の整数ベースプロセッサ上で実行される。しかしながら、複数の高性能グラフィクスアプリケーションは、複数の整数ベースプロセッサにより一般的に用いられる整数データ型の範囲を超える数値域を有する複数の数に基づく複数の計算を要求する。
【0003】
複数の高性能グラフィクスアプリケーションを含む多くの計算的に激しいアプリケーションは、複数の整数データ型により一般的に提供される数値域を超える数値域を提供する浮動小数点データ型を要求する。複数の整数データ型により提供される制限される数値域は、複数の整数ベースプロセッサ上で浮動小数点エミュレーションソフトウェアを実行することでしばしば克服される。
【0004】
整数データ型を用いて複数のグラフィクスアプリケーションを実行することは、許容できるアニメーションスピードを提供するが、一般的に、整数データ型の制限された数値域のために低減された画質をもたらす。一方で、浮動小数点型を用いて複数のグラフィクスアプリケーションを実行することは、比較的により良い画質をもたらすが、一般的に、浮動小数点エミュレーションソフトウェアを実行するために要求されるプロセッシングオーバヘッドのために遅いアニメーションスピードをもたらす。
【0005】
例えば、複数のプロセッサのIntel(登録商標)XScale(登録商標)ファミリに基づく複数のハンドヘルドプラットフォームなどの複数のハンドヘルドプラットフォームは、通常、固定小数点実装または浮動小数点実装を用いて複数のグラフィクスアプリケーションを実装する。固定小数点実装は、整数データ型を用いて実装される固定小数点データ型に基づく。しかしながら、ほとんどの現行のグラフィクスアプリケーションは、浮動小数点データ型を用いるように設計される。結果として、固定小数点実装は、固定小数点データ型と共に機能するために、現行の複数のグラフィクスアプリケーションのソフトウェア基盤を再構築することを伴う。
【0006】
固定小数点データ型は、16ビット小数部が後に続く16ビット整数部を備え、Intel(登録商標) Graphics Performance Primitives(GPP)ライブラリで実装されている。固定小数点データ型を用いる複数のグラフィクスアプリケーションは、固定小数点データ型がほとんどのハンドヘルドプラットフォームプロセッサの生来である整数データ型に基づいて実装されるので、複数の整数演算と等しいスピードで実行する複数の固定小数点演算を用いる。加えて、固定小数点データ型を用いる複数のグラフィクスアプリケーションは、複数のハンドヘルドプラットフォーム上で比較的に高いフレームレートを提供することができ、例えば、複数のゲームアプリケーションなどの計算的に激しい複数のグラフィクスアプリケーションの許容できる性能をもたらす。
【0007】
しかしながら、固定小数点実装は、しばしば、浮動小数点実装などの大きい動的な複数の数値域と共に動作するように設計された複数のソフトウェアアプリケーションを再構築することに関連する高い複数の開発コストもたらす。特に、複数のグラフィクスアプリケーションのより低いレイヤソフトウェアの重要な部分は、複数の固定小数点および整数データ型と共に動作するように再構築することを要求する。
【0008】
固定小数点実装は、同様に、浮動小数点実装より制限された動的な数値域を提供する。この制限された動的な数値域は、固定小数点データ型に関連するデータの非最適な手動のスケーリングのために相対的な精度の損失をもたらす。固定小数点データ型に関連する比較的に低い精度は、標準的な消費者に一般的に知覚できる視覚の複数のアーチファクトをもたらす。
【0009】
複数のハンドヘルドプラットフォームのための浮動小数点実装は、浮動小数点エミュレーションソフトウェア上での現存する複数のグラフィクスアプリケーションまたはDirect3DおよびOpenGLなどのより低レベルのソフトウェアを実行することを伴い、それにより、固定小数点データ型などの新しいデータ型を使用するためにソフトウェアを再構築する必要を除去する。浮動小数点実装は、多くの現行の複数のアプリケーションが浮動小数点データ型を使用するために再構築されることを必要としないので、通常、比較的に低い複数の開発コストを伴う。加えて、浮動小数点実装を伴うと、浮動小数点データ型の比較的に高い動的な数値域のために、結果として起こる画質は、高い。
【0010】
不幸なことに、浮動小数点エミュレーションソフトウェアに基づく浮動小数点実装の性能は、比較的に低い。結果として、より少ない計算的に激しい複数のグラフィクスアプリケーションのみ、そのような浮動小数点実装を用いて、許容できる性能で、実行されることができる。例えば、浮動小数点エミュレーションソフトウェアに基づく浮動小数点実装は、比較的に高いフレームレートを要求する計算的に激しい複数のグラフィクスアプリケーション(例えば、複数のゲームアプリケーション)にとって、遅すぎる。加えて、複数の浮動小数点ベース演算を処理することに関連する電力消費は、複数の整数ベース演算に関連する電力消費と比べて、比較的に高い。
【図面の簡単な説明】
【0011】
【図1】先行技術において知られる周知の浮動小数点データ型の一例の2進表現である。
【0012】
【図2】本開示される複数の装置および複数の方法の一実施形態に係る一例のスケールされた整数データ型の一例の2進表現である。
【0013】
【図3】開示される複数の装置および複数の方法の一実施形態に従って、図2に関連して説明される例のスケールされた整数データ型を用いて例の複数の算術演算が実行される一例の方法のフロー図である。
【0014】
【図4】開示される複数の装置および複数の方法の一実施形態に従って、図2に関連して説明される例のスケールされた整数データ型を用いて例の複数の拡張算術演算が実行される一例の方法を表現するフロー図である。
【0015】
【図5】開示される複数の装置および複数の方法の一実施形態に従って、図2に関連して説明される例のスケールされた整数データ型を用いて図4に関連して説明される例の複数の状態演算が実行される例の方法のフロー図である。
【図6】開示される複数の装置および複数の方法の一実施形態に従って、図2に関連して説明される例のスケールされた整数データ型を用いて図4に関連して説明される例の複数の状態演算が実行される例の方法のフロー図である。
【図7】開示される複数の装置および複数の方法の一実施形態に従って、図2に関連して説明される例のスケールされた整数データ型を用いて図4に関連して説明される例の複数の状態演算が実行される例の方法のフロー図である。
【図8】開示される複数の装置および複数の方法の一実施形態に従って、図2に関連して説明される例のスケールされた整数データ型を用いて図4に関連して説明される例の複数の状態演算が実行される例の方法のフロー図である。
【図9】開示される複数の装置および複数の方法の一実施形態に従って、図2に関連して説明される例のスケールされた整数データ型を用いて図4に関連して説明される例の複数の状態演算が実行される例の方法のフロー図である。
【0016】
【図10】開示される複数の装置および複数の方法の一実施形態に従って、図2に関連して説明される例のスケールされた整数データ型を用いて正規化演算が実行される一例の方法を表現するフロー図である。
【0017】
【図11】開示される複数の装置および複数の方法の一実施形態に従って、図2に関連して説明される例のスケールされた整数データ型を用いて逆数演算が実行される一例の方法を表現するフロー図である。
【0018】
【図12】ここで説明される複数の装置および複数の方法を実装するために使用される一例のシステムのブロック図である。
【0019】
【図13】ここで説明される複数の装置および複数の方法を実装するために使用される一例のプロセッサシステムのブロック図である。
【発明の詳細な説明】
【0020】
図1は、周知の浮動小数点データ型の一例の2進表現100である。IEEE浮動小数点標準規格754−1985によると、浮動小数点データ型は、32ビット単精度浮動小数点型および64ビット倍精度浮動小数点型に関連する。しかしながら、浮動小数点データ型は、特定の複数のアプリケーションの特定のニーズに合うように適合されることは、当業者には明白である。加えて、浮動小数点データ型は、比較的に大きな数値域および比較的に正確な計算の複数の結果を有する10進値の2進表現を提供するために使用される。一般的に、浮動小数点データ型の数値域は、移動しているまたは浮動している2進小数点に基づく。移動または浮動2進小数点は、IEEE浮動小数点標準規格754−1985により定義される複数のルールの一組に基づく。
【0021】
図1を示す浮動小数点データ型の例の2進表現100は、符号ビット102、指数ビット領域(e)104、および仮数ビット領域(f)106を備える。32ビット値にとって、単精度浮動小数点データ型では、符号ビット102は、ビット31により表現され、指数ビット領域104は、8ビット長であり、複数のビット23から30で表現され、仮数ビット領域106は、23ビット長であり、複数のビット0から22で表現される。64ビット値にとって、倍精度浮動小数点データ型では、符号ビット102は、ビット63で表現され、指数ビット領域104は、11ビット長であり、複数のビット52から62で表現され、仮数ビット領域106は、52ビット長であり、複数のビット0から52で表現される。
【0022】
浮動小数点データ型は、同様にバイアス値を使用する。単精度浮動小数点データ型のバイアス値は、127に等しく、倍精度浮動小数点データ型のためのバイアス値は、1023に等しい。加えて、バイアス値は、指数ビット領域104の半分引く1に等しい(例えば、2/2−1=127)。
【0023】
浮動小数点符号値(例えば、例の2進表現100)の数値変換は、浮動小数点符号値の数値等価値を決定することを伴う。浮動小数点符号値は、例えば、浮動小数点データ型の例の2進表現100に従ってコード化される任意の値でよい。浮動小数点符号値の等価な数値を決定することは、符号ビット102、指数ビット領域104、仮数ビット領域106、および指数値に基づく数値変換プロセスを伴う。
【0024】
符号ビット102は、等価な数値の符号を指定する。指数ビット領域104および仮数ビット領域106は、等価な数値の規模および小数部分を指定する。具体的には、指数値は、バイアス値を指数ビット領域104の値から引くことにより決定される(すなわち、e−bias)。一般的に、バイアス値は、指数ビット領域104の値に基づいて正および負の指数値が生成されるように選択される。
【0025】
仮数ビット領域(f)106は、分数のまたは小数の値を表し、一般的に正規化数および非正規化数に関連する。正規化数は、2進小数点(すなわち、小数点)および仮数ビット領域106の値が後に続く主要な値1(すなわち、1.f)を含む。非正規化数は、2進小数点および仮数ビット領域106の値が後に続く主要な値0(すなわち、0.f)を含む。主要な値および2進小数点は、黙示的であり、したがって、図1の浮動小数点データ型の例の2進表現100の複数の位置の任意に記憶されない。複数の浮動小数点値は、一般的に正規化された形式で記憶され、仮数ビット領域106の値の精度を保持する。非正規化形式は、一般的に複数の特殊な状況において使用され、仮数ビット領域106の値の全ての精度は保持しない。
【0026】
浮動小数点のコード化された値の数値変換は、下記の式1に従って実行される。
【数1】

ビット領域106の値に2のバイアスされた指数乗を乗じ、その結果に−1の符号ビット102乗を乗じることにより決定される。
【0027】
浮動小数点符号値の数値変換をより理解するために、仮数ビット領域106の数値化(すなわち、仮数ビット領域106を数値等価値に変換すること)を理解することが、役に立つ。仮数ビット領域106のそれぞれのビットは、小数値に関連し、それは、2の負整数乗(例えば、2−1=1/2、2−2=1/4、等)を含む2のべき乗値で指定される。仮数ビット領域106は、小数値2−1に関連するMSBb(すなわち、2進小数点に最も近いビット)および小数値2−Mに関連するLSBbM−1(すなわち、2進小数値から最も遠いビット)を含み、ここでMは、仮数ビット領域106内の複数のビットの最大数である。例えば、単精度浮動小数点値にとって、Mは、23に等しく、倍精度浮動小数点値にとって、Mは、52に等しい。仮数ビット領域106の数値等価値は、下記式2に従って決定される。
【数2】

【0028】
上記式2に示されるように、仮数ビット領域(f)106の数値等価値は、変数Vにより表され、それぞれのビット値およびその対応する小数値の積を生成し、その複数の積の合計を決定することにより決定される。小数値(例えば2−1)の対応するビット(例えば、b)が0の場合、小数値は、取り消される。一方で、小数値の対応するビットが1の場合、小数値は、複数の小数ビットの合計に加算される。
【0029】
上記から理解されるように、浮動小数点符号値の数値等価値を決定することの複雑さに起因して、複雑なハードウェアおよび/または複雑なソフトウェア基盤が、浮動小数点データ型に基づく複数の算術演算を実行するために一般的に必要とされる。
【0030】
図2は、一例のスケールされた整数データ型の一例の2進表現200である。具体的には、例のスケールされた整数データ型は、複数のスケールされた整数値に基づき、浮動小数点データ型により一般的に提供される数値域を越える数値域を提供するために使用される。加えて、複数のスケールされた整数値に基づく複数の算術演算は、複数の浮動小数点値に基づく複数の算術演算より比較的に複雑でない。以下に詳細に説明されるように、例のスケールされた整数データ型の複数の特性は、複数の算術演算が複数の整数算術演算に関連する複数の命令を用いて実装されることを可能にする。例のスケールされた整数データ型に基づく複数の算術演算は、複数の整数データ型演算に関連する複数の実行スピードおよび電力消費特性に等しい複数の実行スピードおよび電力消費特性を提供する。その上、例のスケールされた整数データ型に基づく複数の算術演算は、ハードウェア(例えば、図12の例のシステム1200)および/または機械アクセス可能媒体(例えば、コンピュータアクセス可能媒体)に記憶され、プロセッサシステム(例えば、図13のプロセッサシステム1310)に実行されるソフトウェアで実装される。特に、例のスケールされた整数データ型に基づく複数の算術演算は、例えば、Intel(登録商標)XScale(登録商標)プロセッサファミリのプロセッサなどの整数ベースプロセッサにより実行される。
【0031】
ここで図2の詳細に移り、例の2進表現200は、スケールされた整数値(すなわち、スケールされた整数符号値)をメモリ(例えば、図13のシステムメモリ1324)内に記憶するために用いられるビット構造または配置を表現する。スケールされた整数値は、複数のビットの任意の所望の数を用いて表現され、例のスケールされた整数データ型の例の2進表現200に示されるように、乗数値Iが記憶される乗数値ビット領域202およびスケール値Qが記憶されるスケール値ビット領域204を含む。乗数値Iおよびスケール値Qは、複数のビットの任意の所望の数を有する複数の整数値でよい。乗数値ビット領域202およびスケール値ビット領域204を形成するために用いられる複数のビットの数の合計は、スケールされた整数値(I、Q)内の複数のビットの総数(すなわち、例の2進表現200内の複数のビットの数)に等しい。
【0032】
乗数値Iおよびスケール値Qは、複数のビットの任意の数を含むように選択されるが、乗数値Iおよびスケール値Q内の複数のビットの数は、例のスケールされた整数データ型がその上で実装されるプロセッサの複数の能力またはアーキテクチャに適合するように選択される。例えば、32ビットプロセッサにとって、乗数値Iおよびスケール値Qは、乗数値Iおよびスケール値Qの合計が32に等しいように(すなわち、I+Q=32)選択される。加えて、32ビットプロセッサにとって、乗数値Iおよびスケール値Q内の複数のビットの数は、例のスケールされた整数データ型に基づく複数の算術演算を単純にするために8の倍数として選択される。例のスケールされた整数データ型のために選択される乗数値Iおよびスケール値Qのビット長は、ランタイム段階の間の複数のスケールされた整数値の解釈を可能にするために、ハードウェアおよび/またはソフトウェアに提供される。例えば、例のスケールされた整数データ型に関連する複数のビット長は、複数のグローバル変数を経由して複数のアプリケーションに提供される。
【0033】
乗数値Iおよびスケール値Qは、複数の符号付き整数値(例えば、I、Q=0、±1、±2、±3等)として選択され、ランタイム段階の間の2の補数算術の実装を可能にする2の補数形式で記憶される。加えて、スケールされた整数は、表現において冗長性を提供し、それは、値が、例のスケールされた整数型の例の2進表現200を用いて、いろいろな方法で表されることを可能にする。例えば、下記式3に関連して詳細に説明されるスケールされた整数符号値の数値変換に基づいて、複数のスケールされた整数値(すなわち、複数の(I、Q)値)(1、0)、(2、1)、および(4、−2)は互いに等しい。
【0034】
複数のスケールされた整数値は、合成スケール指数を決定するために用いられるバイアス値βに関連する。合成スケール指数は、スケール値からバイアス値βを減じること(すなわち、Q−β)により決められ、スケールされた整数符号値の数値変換を実行するために用いられる。一般的に、バイアス値βは、固定値として選択され、ランタイム段階の間にスケールされた整数値が正しく解釈されるように、例えば、グローバル変数を経由して、例のスケールされた整数データ型を用いるハードウェアおよび/またはソフトウェアに、提供される。
【0035】
スケールされた整数符号値の数値変換は、スケールされた整数符号値の数値等価値を決定するために使用され、乗数値I、スケール値Q、およびバイアス値βに基づく。より具体的には、スケールされた整数値の数値等価は、下記式3で詳しく説明されるように決められる。
【数3】

式3で示されるように、スケールされた整数値の数値等価値は、変数VSIにより表現され、2を合成スケール指数(すなわち、Q−β)乗にし、結果に乗数値Iを乗じることで決められる一般的に、数値は、数値を表すために、式3を代数的に再配置すること、バイアスのための固定値を選択すること、ならびに乗数値Iおよびスケール値Qを選択することにより、スケールされた整数として符号化される。乗数値Iおよびスケール値Qが選択された後、これら複数の値は、所望のビット長またはデータ幅に丸められまたは切り取られる。
【0036】
例のスケールされた整数データ型の例の2進表現200は、スケールされた整数符号値XSCINT(すなわち、XSCINT=(I、Q))を形成するために、乗数Iおよびスケール値Qを、Qが後に続くIとの連結として、下記式4に説明されるように示す。しかしながら、下記式5で説明されるように、乗数値Iおよびスケール値Qは、Iが後に続くQ(すなわち、XSCINT=(Q、I))として同様に連結される。
【数4】

【数5】

上記複数の式4および5に示されるように、乗数ビット値iは、乗数値ビット領域202の複数のビット値を表し、乗数ビット長値lは、乗数ビット領域202内の複数のビットの数を表し、スケールビット値qは、スケール値ビット領域204の複数のビット値を表し、スケールビット長値mは、スケール値ビット領域204内の複数のビットの数を表す。
【0037】
乗数値Iおよびスケール値Qの数値域は、乗数ビット長lおよびスケールビット長mに基づいて決められる。例えば、乗数値Iの数値域は、−2l−1≦I≦2l−1−1として表され、スケール値Qの数値域は、−2m−1≦Q≦2m−1−1として表される。この状況では、最大スケールされた整数値(すなわち、最も正の値)および最小スケールされた整数値(すなわち、最も負の値)は、下記の複数の式6および7に従って決定される。
【数6】

【数7】

式6に示されるように、項2l−1−1は、乗数値Iの最大値を表し、項

により乗じられ、ここで、2m−1−(1+β)は、スケール値Qの最大値を表す。式7に示されるように、項−2l−1は、乗数値Iの最小値を表し、負の値であり、項

により乗じられる。2m−1−(1+β)は、最大スケール値Qを表すので、項

の規模は、比較的に大きいしたがって、最小スケールされた整数値は、負の値(例えば、−2l−1)を比較的大きな規模を有する値(例えば、

)で乗じることで決められる。
【0038】
複数の式6および7により示されるように、スケールビット長値mおよび乗数ビット長値lは、任意の所望の長さに選択されるので、乗数値Iの数値域(すなわち、−2l−1≦I≦2l−1−1)、およびスケール値Qの数値域(すなわち、−2m−1≦Q≦2m−1−1)、スケールされた整数値の最大数値域は、理論的に制限されない。しかしながら、実際には、ハードウェアおよび/またはソフトウェアで実装される場合、例のスケールされた整数データ型は、全ての起こり得るスケールされた整数値の部分集合を表すために実装される。より具体的には、例のスケールされた整数データ型の数値域は、全ての起こり得るスケールされた整数値の数値域の部分集合を表すために実装される。例えば、例のスケールされた整数データ型の数値域は、複数のオーバーフローまたはアンダーフロー条件に関連する複数の計算エラーを防ぐために、対象のプラットフォームの複数の特性、プロセッサの複数の能力、ハードウェアの複数の能力等に基づいて実装される。
【0039】
図3は、一例の方法のフロー図であり、ここで、例の複数の算術演算は、上記図2に関連して説明された例のスケールされた整数データ型を用いて実行される。具体的には、例の複数の算術演算は、複数の乗算演算、複数の加算演算、および複数の減算演算を含む。複数の除算演算は、図3において明示的に示されない。しかしながら、下記の図11に関連して説明されるように、乗算演算が後に続くスケールされた整数値の逆数を決定することにより除算演算は、実行される。図3の例の複数の方法は、メモリ(例えば、図13のシステムメモリ)に記憶される機械アクセス可能命令または関数の実行に応答して、算術演算を要求することにより呼び出されるその上、例の複数の算術演算は、ハードウェア(例えば、図12の例のシステム1200)および/または機械アクセス可能媒体(例えば、コンピュータアクセス可能媒体)上に記憶されたソフトウェアで実装され、プロセッサシステム(例えば、図13のプロセッサシステム1310)上で実行される。明瞭にするために、例の複数の算術演算は、第一の入力値XSCINT、第二の入力値YSCINT、および結果値ZSCINTの複数の変数表現を用いることに基づいて説明される。
【0040】
始めに、第一の入力値XSCINTおよび第二の入力値YSCINTは、第一のスケールされた整数値(I、Q)および第二のスケールされた整数値(I、Q)を生成するために展開(アンパック)される(ブロック302)。実行された場合、プロセッサ(例えば、図13のプロセッサ1312)またはハードウェア(例えば、図12の例のシステム1200)に、第一の入力値XSCINTから第一の入力の乗数値Iおよび第一の入力のスケール値Qを、ならびに第二の入力値YSCINTから第二の入力の乗数値Iおよび第二の入力のスケール値Qを分離させまたは解析させる展開(アンパック)関数または命令を実装すること(すなわち、(I、Q)=unpack(XSCINT))により、複数の入力値XSCINTおよびYSCINTは、展開(アンパック)される。複数の入力の乗数値IおよびIならびに複数の入力のスケール値QおよびQは、例えば、システムメモリ1324(図13)またはプロセッサ(例えば、図13のプロセッサ1312)内の複数のレジスタロケーションに記憶される。
【0041】
複数の入力値XSCINTおよびYSCINTが展開(アンパック)された後、実行されるべき算術演算が乗算かどうかが判断される(ブロック304)。ブロック304において、実行されるべき算術演算が乗算演算であると判断される場合、展開(アンパック)された入力の複数のスケールされた整数(I、Q)および(I、Q)は、入力の複数の乗数値IおよびIならびに入力の複数のスケール値QおよびQに基づいて、下記複数の式8および9に従って、乗じられる(ブロック306)。
【数8】

【数9】

式8に示されるように、乗数値結果Iは、第一の入力の乗数値Iに第二の入力の乗数値Iを乗じることにより決定される。加えて、スケール値結果Qは、第一の入力のスケール値Qxを第二の入力のスケール値Qに加え、結果からバイアス値βを減じることにより決定される。
【0042】
ブロック304において、実行されるべき算術演算が乗算演算ではないと判断される場合、第一の入力のスケール値Qが第二の入力のスケール値Qと等しいかどうかが判断される(ブロック310)。ブロック310において、第一の入力のスケール値Qが第二の入力のスケール値Qと等しいと判断される場合、実行されるべき算術演算が加算演算かどうかが判断される(ブロック312)。ブロック312において、実行されるべき算術演算が加算演算であると判断される場合、入力の複数のスケールされた整数値(I、Q)および(I、Q)は、入力の複数の乗数値IおよびIならびに第一の入力のスケール値Qに基づき下記複数の式10および11に従って、加算される(ブロック314)。
【数10】

【数11】

式10に示されるように、乗数値結果Iは、第一の入力の乗数値Iを第二の入力の乗数値Iに加算することで決定される。式11に示されるように、スケール値結果Qは、第一の入力のスケール値Qに等しくセットされる。あるいは、第一の入力のスケール値Qが第二の入力のスケール値Qと等しいので、スケール値結果Qは、第二の入力のスケール値Qに等しくセットされる(例えばQ=Q)。
【0043】
ブロック312において、実行されるべき算術演算が加算演算ではないと判断される場合、第二の入力のスケールされた整数値(I、Q)が第一の入力のスケールされた整数値(I、Q)から、入力の複数の乗数値IおよびIならびに第一の入力のスケール値Qに基づき下記複数の式12および13に従って、減じられる(ブロック316)。
【数12】

【数13】

式12に示されるように、乗数値結果Iは、第一の入力の乗数値Iから第二の入力の乗数値Iを減じることにより決定される。式13に示されるように、スケール値結果Qは第一の入力のスケール値Qに等しくセットされる。あるいは、第一の入力のスケール値Qが、第二の入力の入力のスケール値Qに等しいので、スケール値結果Qは、第二の入力のスケール値Qyに等しくセットされる(例えば、Q=Q)。
【0044】
ブロック310において、第一の入力のスケール値Qが、第二の入力のスケール値Qと等しくないと判断される場合、最大のスケール値Qmaxは、入力の複数のスケール値QおよびQに基づいて決定される(ブロック318)。最大のスケール値Qmaxは、Q−MAX命令または関数を実装することにより決定され(すなわち、Qmax=max(Q、Q))、実行される場合、プロセッサ(例えば、図13のプロセッサ1312)またはハードウェア(例えば、図12の例のシステム1200)に第一の入力のスケール値Qを第二の入力のスケール値Qと比較させ、2つのうちより大きな値を決定させ、および最大のスケール値Qmaxをそのより大きな値に等しくセットさせる。例えば、第二の入力のスケール値Qが、第一の入力のスケール値Qよりも大きい場合、最大の入力のスケール値Qmaxは、第二の入力のスケール値に等しくセットされる(例えば、Qmax=Q)。
【0045】
その後、実行されるべき算術演算が加算演算かどうかが判断される(ブロック320)。ブロック320において、算術演算が加算演算であると判断される場合、第一の中間の乗数値I’および第二の中間の乗数値I’が、加算演算のために、第一の入力の乗数値Iおよび第二の入力の乗数値Iに基づいて、決定される(ブロック322)。第一の中間の乗数値I’は、第一の入力の乗数値I、最大のスケール値Qmax、および第一の入力のスケール値Qに基づき、下記式14に従って決定される。第二の中間の乗数値I’は、第二の入力の乗数値I、最大のスケール値Qmax、および第二の入力のスケール値Qに基づき、下記式15に従って決定される。角括弧

は、

が固有の整数であり、

である、‘フロア’関数を意味する。
【数14】

【数15】

上記式14に示されるように、第一の中間の乗数値I’は、2の最大のスケール値Qmaxから第一の入力のスケール値Qを減じた結果乗で割られる第一の乗数値Iのフロア関数に等しい。上記式15に示されるように、第二の中間の乗数値I’は、2の最大のスケール値Qmaxから第二の入力のスケール値Qを減じた結果乗で割られる第一の乗数値Iのフロア関数に等しい。ブロック322のプロセスは、中間の複数の乗数値I’およびI’を決定することとして説明されるが、このプロセスの最適化は、上記ブロック318に関連して説明されたように、Qmaxは、QまたはQに等しくセットされるので、中間の複数の乗数値のただ1つを決定することにより実装される。したがって、複数の式14および15の複数の除数のただ1つは、1(すなわち、2=1)以外の値に等しくなる。
【0046】
ブロック320において、算術演算が加算ではないと判断される場合、第一の中間の乗数値I’および第二の中間の乗数値I’が、減算演算のために、第一の入力の乗数値Iおよび第二の入力の乗数値Iに基づいて、決定される(ブロック324)。第一の中間の乗数値I’は、上記式14に従って、決定される。第二の中間の乗数値I’は、第二の入力の乗数値I、最大のスケール値Qmax、および第二の入力のスケール値Qに基づき、下記式16に従って決定される。
【数16】

上記式16に示されるように、第二の中間の乗数値I’は、2の最大のスケール値Qmaxから第二の入力のスケール値Qを減じた結果乗で割られる第二の中間の乗数値Iの負の値のフロア関数に等しい。
【0047】
ブロック322またはブロック324において決定される中間の複数の乗数値I’およびI’ならびに最大のスケール値Qmaxは、第一の中間のスケールされた整数値(I’、Qmax)および第二の中間のスケールされた整数値(I’、Qmax)を形成するために使用される。所望の算術演算(すなわち、加算演算または減算演算)は、第一の中間のスケールされた整数値(I’、Qmax)を第二の中間のスケールされた整数値(I’、Qmax)に、ブロック322またはブロック324において決定された中間の複数の乗数値I’およびI’ならびに最大のスケール値Qmaxに基づき、下記式17および式18に従って加算することにより、その後、実行される。
【数17】

【数18】

式17に示されるように、乗数値結果Iは、第一の中間の乗数値I’を第二の中間の乗数値I’に加算することにより決定される。具体的には、実行されるべき算術演算が加算演算の場合、中間の複数の乗数値I’およびI’は、ブロック322において決定される。一方、実行されるべき算術演算が減算演算の場合、中間の複数の乗数値I’およびI’は、ブロック324において決定される。上記式18に示されるように、スケール値結果Qは、最大のスケール値Qmaxに等しくセットされる。
【0048】
要求された算術演算が実行さらた後(ブロック306、ブロック314、ブロック316、またはブロック326)、乗数値結果Iおよびスケール値結果Qは、結果値ZSCINTを生成するためにパックされる(ブロック328)。結果値ZSCINTは、パック命令または関数を実装することにより生成され(例えば、ZSCINT=pack(I、Q))、パック命令または関数が実行された場合、プロセッサ(例えば、図13のプロセッサ1312)および/またはハードウェア(例えば、図12の例のシステム1200)に、例えば、乗数値結果Iおよびスケール値結果Qを上記式4または式5に従って連結させ、結果を結果値ZSCINTに記憶させる。
【0049】
図4は、図2に関連して上記で説明された例のスケールされた整数データ型を用いて例の複数の拡張算術演算が実行される一例の方法を表現するフロー図である。例の複数の拡張算術演算は、例えば、図3に関連して説明された、実行された乗算、加算、または減算演算に起因する複数のスケールされた整数値の複数の数値特性を解析および/または修正するために使用される。加えて、下記においてより詳細に説明されるように、例の複数の拡張算術演算は、複数の状態フラグを複数のスケールされた整数値の複数の数値特性に基づいて更新するための複数の演算を備える。
【0050】
例の複数の拡張算術演算の詳細な説明に進む前に、図4の例の複数の拡張算術演算と組み合わせて複数の図5−9の例の複数の状態演算は、不正確フラグ(flag_i)、非正規化フラグ(flag_u)、ゼロフラグ(flag_z)、負フラグ(flag_n)、および飽和フラグ(flag_q)を含む複数の状態フラグを更新するために使用される。オーバーフローフラグ(flag_v)およびキャリーフラグ(flag_c)も同様に、繰り返しオーバーフローフラグをクリアすること(すなわち、flag_v=偽)およびキャリーフラグの状態を逆に、または負フラグの相補的な状態にセットすること(すなわち、flag_c=−(flag_n))により実装される。
【0051】
例を手段として、複数の状態フラグは、複数の算術演算(例えば、図3の例の複数の算術演算)および複数の状態演算(例えば、複数の図5−9の例の複数の状態演算)の複数の結果に関して説明される。加えて、算術演算または状態演算の乗数値I結果およびスケール値Q結果は、正しい結果(すなわち、理論的な数学的な結果)ではないことは、理解されるべきである。例えば、上記複数の式14または15において、中間の複数の乗数値を決定する間に、複数のビットが失われる場合、所望の算術演算の複数の結果は、正確ではなくなる。
【0052】
算術演算の結果が修正された、または対応する理論的な数学的な結果と等しくない場合(すなわち、不正確な結果が返された)、不正確フラグ(flag_i)が、セットされる。例えば、状態演算(例えば、図6の右正規化演算600)は、状態演算の結果が算術演算の結果と等しくないように、算術演算の結果を修正するために使用される。他の例では、例えば、上記図3に関連して説明されたmax(Q、Q)関数などの例の複数の算術演算に関連した複数の演算が、複数の入力値を修正(例えば、切り取り、丸め込み等)し、元の複数の入力値の対応する理論的な数学的な複数の評価と等しくない複数の結果を生成する場合、不正確フラグは、セットされる。
【0053】
算術演算または状態演算が2l−2≦I≦2l−1−1または−2l−1≦I≦−2l−2−1の範囲内の場合、非正規化フラグ(flag_u)は、偽にクリアされる。算術演算または状態演算の結果の値がゼロに等しい場合、ゼロフラグ(flag_z)は、真にセットされる。算術演算または状態演算の結果が負の値に等しい場合、負フラグ(flag_n)は、真にセットされる。
【0054】
例の複数の拡張算術演算は、図3の例の複数の算術演算などの複数の算術演算と組み合わせて、同様に使用される。例の複数の算術演算と組み合わせて使用される場合、例の複数の拡張算術演算は、第一の入力値XSCINT、第二の入力値、YSCINT、および結果値ZSCINTに基づく。例の複数の拡張算術演算は、ハードウェア(例えば、図12の例のシステム1200)および/または機械アクセス可能媒体(例えば、コンピュータアクセス可能媒体)上に記憶されるソフトウェアで実装され、プロセッサシステム(例えば、図13のプロセッサシステム)上で実行される。
【0055】
始めに、複数の入力値XSCINTおよびYSCINTは、展開(アンパック)される(ブロック402)。具体的には、1つの例において、第一の入力値XSCINT、第二の入力値YSCINT、および結果値ZSCINTは、複数の乗数値I、I、およびIならびに複数のスケール値Q、Q、およびQを分けることまたは解析することにより展開(アンパック)される。乗算演算、加算演算、または減算演算は、図3の例の複数の算術演算を用いて、その後実行され(ブロック404)、複数の結果は、乗数値結果Iおよびスケール値結果Q内に記憶される。その後、ブロック404において実行された算術演算が乗算演算かどうかが判断される(ブロック406)。
【0056】
ブロック404で実行された算術演算が乗算演算ではないとブロック406において判断される場合、第一の仮の不正確フラグ(flag_it1)の状態が判断される。ブロック408における状態決定は、複数の乗数値I、I、およびI、複数のスケール値Q、Q、およびQ、図3のブロック322またはブロック324で決定された中間の複数の乗数値I’およびI’、ならびに図3のブロック318で決定された最大のスケール値Qmaxに基づく。下記複数の式19および20で説明される複数の条件のどちらかが真の場合、第一の仮の不正確フラグは、真にセットされる。
【数19】

【数20】

式19で説明される条件は、2の最大のスケール値Qmaxから第一の入力のスケール値Qを減じた結果乗を第一の中間の乗数値I’に乗じた結果は、第一の入力の乗数値Iに等しくないことを提供する。式20で説明される条件は、2の最大のスケール値Qmaxから第二の入力のスケール値Qを減じた結果乗を第二の中間の乗数値I’に乗じた結果は、第二の入力の乗数値Iに等しくないことを提供する。上記複数の式19および20で説明された複数の条件のどちらかが真の場合、第一の仮の不正確フラグは、真にセットされる。
【0057】
第一の仮の不正確フラグの状態が判断された(ブロック408)後、またはブロック404で実行された算術演算が乗算演算であると、ブロック406において判断された場合、右正規化演算が、乗数値結果Iおよびスケール値結果Qに基づいて実行される(ブロック410)。ブロック410で実行された右正規化演算は、図6に関連して下記で説明される右正規化演算600に基づいて実装される。一般的に、ブロック406で実行された右正規化演算は、乗数値I(例えば、乗数値結果I)およびスケール値Q(例えば、スケール値結果Q)を右正規化するために使用される。例えば、乗数値結果Iが、例のスケールされた整数データ型をオーバーフローする(すなわち、図2の例の2進表現の複数のビットの数をオーバーフローする)場合、ブロック406で実行される右正規化が、乗数値結果Iを右正規化し、オーバーフローした複数のビットを修復するために使用される。
【0058】
右正規化演算が実行された後(ブロック410)、不正確フラグ(flag_i)の状態が、第一の仮の不正確フラグ(flag_it1)および/または第二の仮の不正確フラグ(flag_it2)に基づいて決定される(ブロック412)。ブロック404で実行された算術演算が乗算演算の場合、不正確フラグの状態は、第二の仮の不正確フラグの状態に等しくセットされる。しかしながら、ブロック404で実行された算術演算が加算または減算演算の場合、不正確フラグの状態は、第一の仮の不正確フラグおよび第二の仮の不正確フラグの論理ORをとることにより決定される(すなわち、flag_i=flag_it1 or flag_it2)。
【0059】
その後、ブロック404で実行された算術演算が、乗算演算かどうかが判断される。ブロック404で実行された算術演算が、乗算演算であると、ブロック413において判断される場合、左正規化演算が、乗数値結果Iおよびスケール値結果Qに基づいて実行される(ブロック414)。左正規化演算は、図7に関連して説明される例の左正規化演算700を用いて実装される。一般的に、ブロック414で実行される左正規化演算は、乗数値結果Iおよびスケール値Qを左正規化し、または最大化するために、乗数値結果Iの規模に基づいて使用される。例えば、乗数値結果Iの規模が小さすぎる(例えば、比較的に0に近い)場合、ブロック414で実行される左正規化演算は、規模を増加させるために使用される。
【0060】
一方で、ブロック413において、ブロック404で実行された算術演算が乗算演算ではないと判断される場合、ゼロチェック演算が実行される(ブロック415)。ブロック415で実行されるゼロチェック演算は、下記図5に関連して説明される例のゼロチェック演算500により実装される。ゼロチェック演算は、乗数値結果Iおよびスケール値結果Qを修正しならびにゼロフラグおよび負フラグを乗数値結果Iおよび不正確フラグに基づいて更新するために使用される。
【0061】
飽和チェック演算は、その後実行される(ブロック416)。ブロック416の飽和チェック演算は、下記図8に関連して説明される例の飽和チェック演算800を用いることにより実装される。一般的に、ブロック416で実行される飽和チェック演算は、乗数値結果Iおよびスケール値結果Qに基づいて実行され、ならびに乗数値結果Iおよびスケール値結果Qを所望の数値域内に維持するために乗数値結果Iおよびスケール値結果Qを刈り込むために使用される。
【0062】
その後、ブロック404で実行された算術演算が乗算演算であるかどうかが判断される(ブロック418)。ブロック418において、ブロック404で実行された算術演算が乗算演算であると判断される場合、非正規化フラグは、偽にクリアされる(ブロック420)。しかしながら、ブロック418において、ブロック404で実行された算術演算が、乗算演算でないと判断される場合、非正規化チェック演算が実行される(ブロック422)。ブロック422の非正規化チェック演算は、例の非正規化チェック演算900を用いることにより実装され、下記図9に関連して説明されるように、非正規化フラグの状態を、乗数値結果Iに基づいて更新するために使用される。
【0063】
複数の状態フラグは、その後、例えば、状態フラグレジスタに書き込まれ(ブロック424)、乗数値結果Iおよびスケール値結果Qは、結果値ZSCINTにパックされる(ブロック426)。
【0064】
複数の図5−9は、上記図4に関連して説明された例の複数の状態演算を実装することの例の複数の方法を表現する複数のフロー図である。一般的に、例の複数の状態演算は、プロセッサ(例えば、図13のプロセッサ1312)および/またはハードウェア(例えば、図12の例のシステム)の複数の状態フラグ(例えば、ゼロフラグ、負フラグ等)を更新するために使用される。加えて、例の複数の状態演算は、複数の数値域制限および/または数値の複数の条件(例えば、複数のゼロ条件、複数の負の条件等)に基づいて、複数のスケールされた整数値を修正するために使用される。図2に関連して上記で説明されたように、ハードウェアおよび/またはソフトウェアで実装された場合、複数のプラットフォームベース制限が、例のスケールされた整数データ型の数値域上に課せられる。複数の図5−9の例の複数の状態演算は、Imin≦I≦Imaxの乗数値数値域およびQmin≦Q≦Qmaxのスケール値数値域に基づく。

このように、乗数値Iの数値域は、複数の符号付き整数値を含み、スケール値Qの数値域は、複数の符号なし整数値(例えば、複数の非負値)を含む。複数の図5−9の例の複数の状態演算は、ハードウェア(例えば、図12の例のシステム1200)および/または機械アクセス可能媒体(例えば、コンピュータアクセス可能媒体)上に記憶され、プロセッサシステム(例えば、図13のプロセッサシステム)上で実行されるソフトウェアで実装される。その上、それぞれの状態演算は、メモリ(例えば、図13のシステムメモリ1324)に記憶され、例えば、プロセッサ1312または例のシステム1200が状態演算を実行するように構成する命令または関数を実行することにより実行される。
【0065】
ここで図5に移ると、フロー図は、上記図2に関連して説明された例のスケールされた整数データ型に基づく一例のゼロチェック演算500を表現している。例のゼロチェック演算500は、乗数値Iに基づいて、乗数値Iおよびスケール値Qを修正するために使用される。加えて、例のゼロチェック演算500は、乗数値Iおよび不正確フラグに基づいて、ゼロフラグおよび負フラグを更新するために使用される。例のゼロチェック演算500は、ゼロチェック命令または関数を実装すること(例えば、(Iresult、Qresult、flag_z)=check_zero(I、Q、flag_i))により実行され、ゼロチェック命令または関数が実行された場合、プロセッサ(例えば、図13のプロセッサ1312)および/またはハードウェア(例えば、図12の例のシステム1200)に、乗数値I、スケール値Q、不正確フラグ、ゼロフラグ、および負フラグに基づいて、例のゼロチェック演算500を実行させる。
【0066】
始めに、乗数値Iがゼロに等しいかどうかを判断するために、ゼロテストが実行される(ブロック502)。ブロック502において、乗数値Iがゼロに等しいと判断される場合、乗数値I、スケール値Q、および負フラグは、更新される(ブロック504)。具体的には、乗数値Iは、ゼロに等しくセットされ、スケール値Qは、例のスケールされた整数データ型の数値域により定義される最小スケール値Qminに等しくセットされ、ゼロフラグは、不正確フラグの否定された値に等しくセットされ、負フラグは、偽に等しくセットされる。乗数値I、スケール値Q、ゼロフラグ、および負フラグは、その後、返される(ブロック506)。ブロック502において、乗数値Iがゼロに等しくないと判断される場合、スケール値Qが最小スケール値Qminより小さいかどうかを判断するために比較が実行される(ブロック508)。
【0067】
ブロック508において、スケール値が最小スケール値Qminより小さくないと判断される場合、乗数値I、スケール値Q、ゼロフラグ、および負フラグは、変更されずに返される(ブロック506)。しかしながら、ブロック508において、スケール値Qが最小スケール値Qminより小さいと判断される場合、乗数値I、スケール値Q、およびゼロフラグは、更新される(ブロック510)。具体的には、乗数値Iは、ゼロに等しくセットされ、スケール値Qは、最小スケール値Qminに等しくセットされ、ゼロフラグは、偽にクリアされる。
【0068】
比較は、乗数値Iがゼロより小さいかどうかを判断するために、その後実行される(ブロック512)。ブロック512において、乗数値Iがゼロより小さいと判断される場合、負フラグは、真にセットされる(ブロック514)。負フラグが真にセットされた後(ブロック514)、またはブロック512で乗数値Iがゼロより小さくないと判断され、負フラグが変更されない場合、乗数値I、スケール値Q、ゼロフラグ、および負フラグは、返される(ブロック506)。
【0069】
図6は、上記図4に関連して説明された例の複数の拡張算術演算と共に使用される例の右正規化演算600を表現するフロー図である。例の右正規化演算600は、乗数値Iおよびスケール値Qを右正規化しおよび不正確フラグを更新するために使用される。例の右正規化演算600は、右正規化命令または関数(例えば、(Iresult、Qresult、flag_i)=rnorm(I、Q))を実装することにより実行され、右正規化命令または関数が実行された場合、プロセッサ(例えば、図13のプロセッサ1312)および/またはハードウェア(例えば、図12の例のシステム1200)に、乗数値I、スケール値Q、および不正確フラグに基づいて、例の右正規化演算600を実行させる。
【0070】
始めに、乗数値Iが最大乗数値Imaxより小さいまたはに等しいおよび最小乗数値Iminより大きいまたはに等しい(すなわち、Imin≦I≦Imax)かどうかを判断するために比較が実行される(ブロック602)。ブロック602において、乗数値Iが最大乗数値Imaxより小さいまたはに等しいおよび最小乗数値Iminより大きいまたはに等しいと判断される場合、乗数値Iおよびスケール値Qは、変更されない。不正確フラグは、その後、偽にセットされ(すなわち、ゼロにクリアされ)(ブロック604)、スケールされた整数値(I、Q)および不正確フラグが、返される(ブロック606)。
【0071】
ブロック602において、乗数値Iが最大乗数値Imaxより小さくないまたはに等しくないおよび最小乗数値Iminより大きくないまたはに等しくないと判断される場合、乗数値Iおよびスケール値Qは、右正規化された乗数値Irightおよび右正規化されたスケール値Qrightを決めるために、右正規化される(ブロック608)。乗数値Iおよびスケール値Qは、下記複数の式23および24の複数の数値域条件を満たすように選択される非負整数値k(すなわち、k≧0)に基づいて右正規化される。加えて、右正規化された乗数値Irightおよび右正規化されたスケール値Qrightは、下記複数の式23および24に従って決められる。
【数21】

【数22】

【数23】

【数24】


非負整数値kは、式21の条件または式22の条件に従って選択される。加えて、複数の式23および24に示されるように、右正規化乗数値Irightおよび右正規化スケール値Qrightは、非負整数値kに基づく。式23に示されるように、右正規化乗数値Irightは、2の非負整数値k乗で割られる乗数値Iのフロア関数により決定される。式24に示されるように、右正規化スケール値Qrightは、スケール値Qを非負整数値kに加算することにより決定される。
【0072】
不正確フラグは、右正規化乗数値Irightに基づき更新される(ブロック610)。具体的には、右正規化乗数値Irightおよび2の非負整数値乗(すなわち、2)の積が乗数値Iに等しければ(Iright・2=I?)、不正確フラグは、偽にクリアされ、さもなければ、不正確フラグは変更されない。ブロック610において、不正確フラグが更新された後、右正規化スケールされた整数値(Iright、Qright)および不正確フラグは、返される(ブロック606)。
【0073】
図7は、上記図4に関連して説明された例の複数の拡張算術演算と共に使用される一例の左正規化演算700を説明する算術演算である。例の左正規化演算700は、乗数値Iが比較的に小さいまたはゼロに等しい場合、乗数値Iおよびスケール値Qを正規化しまたは最大化するために使用される。このように、比較的に小さいまたはゼロの値は、返されない例の左正規化演算700は、左正規化命令または関数(例えば、(Iresult、Qresult)=lnorm(I、Q))を実装することにより実行され、左正規化命令または関数が実行された場合、プロセッサ(例えば、図13のプロセッサ1312)および/またはハードウェア(例えば、図12の例のシステム1200)に、乗数値I、スケール値Qに基づいて、例の左正規化演算700を実行させる。
【0074】
図7の例において、乗数値Iがゼロに等しい(すなわち、I=0?)または最大乗数値Imaxより大きいもしくは最小乗数値Iminより小さい(すなわち、I>ImaxもしくはI<Imin)かどうかが最初に判断される(ブロック702)。ブロック702において、乗数値Iがゼロに等しいまたは最大乗数値Imaxより大きいもしくは最小乗数値Iminより小さいと判断される場合、乗数値Iおよびスケール値Qは、変更されずに残される。スケールされた整数値(I、Q)が、その後、返される(ブロック704)。
【0075】
ブロック702において、乗数値Iがゼロに等しくないならびに最大乗数値Imaxより小さいまたはに等しいおよび最小乗数値Iminより大きいまたはに等しい場合、乗数値Iおよびスケール値Qは左正規化される(ブロック706)。乗数値Iおよびスケール値Qは、左正規化乗数値Ileftおよび左正規化スケール値Qleftを生成するために、非負整数値k(すなわち、k≧0)を選択することにより左正規化される。より具体的には、非負整数値kは、下記式25または式26に従って選択される。加えて、左正規化乗数値Ileftおよび左正規化スケール値Qleftは、下記複数の式27および28で説明されるように決定される。
【数25】

【数26】

【数27】

【数28】

式25に示されるように、非負整数値kは、最小乗数値Iminに関連する数値域に基づいて選択される。あるいは、式26に示されるように、非負整数値kは、最大乗数値Imaxに関連する数値域に基づいて選択される。式27に示されるように、左正規化乗数値Ileftは、乗数値Iに2の非負整数値k乗を乗じることにより、決定される。式28に示されるように、左正規化値Qleftは、非負整数値kをスケール値Qから減じることにより決定される。左正規化スケールされた整数値(Ileft、Qleft)は、その後、返される(ブロック704)。
【0076】
図8は、上記図4に関連して説明される例の複数の拡張算術演算と共に使用される一例の飽和チェック演算800を表現するフロー図である。例の飽和チェック演算800は、乗数値Iおよび/またはスケール値Qが範囲外または飽和しているかどうかを、複数の数値域制限値(例えば、Qmax、Imax等)と乗数値Iおよびスケール値Qと比較することにより判断するために使用される。それらが複数の数値域制限値の範囲外の場合、乗数値Iまたはスケール値Qは、短縮される(例えば、複数の数値域制限値にセットされる)。例の飽和チェック演算800は、乗数値Iおよびスケール値Qに基づいて飽和フラグの状態を更新するために同様に使用される。
【0077】
例の飽和チェック演算800は、飽和チェックまたはクリップ命令または関数(例えば、(Iresult、Qresult)=clip_Q(I、Q))を実装することにより実行され、飽和チェックまたはクリップ命令または関数が実行された場合、プロセッサ(例えば、図13のプロセッサ1312)および/またはハードウェア(例えば、図12のプロセッサシステム1200)に、例の飽和チェック演算800の複数の比較を、乗数値I、スケール値Q、および飽和フラグに基づいて実行させる。
【0078】
比較は、スケール値Qおよび最大スケール値Qmaxに基づいて、スケール値Qが最大スケール値Qmaxより小さいまたはに等しいかどうかを判断するために実行される(ブロック802)。ブロック802において、スケール値Qが最大スケール値Qmaxより小さいまたはに等しいと判断される場合、飽和フラグは偽にクリアされる(ブロック804)。しかしながら、ブロック802において、スケール値Qが最大スケール値Qmaxより小さくないまたはに等しくないと判断される場合、飽和フラグは、真にセットされ(ブロック805)、スケール値は、最大スケール値Qmaxにセットされる(すなわち、Q=Qmax)(ブロック806)。
【0079】
飽和フラグがクリアされた後(ブロック804)、またはスケール値Qが最大スケール値Qmaxに等しくセットされた後、ゼロテストが、乗数値Iに基づき、乗数値Iがゼロより小さい(すなわち、I<0?)かどうかを判断するために実行される(ブロック808)。ブロック808において、乗数値Iがゼロより小さいと判断される場合、乗数値Iは、最小乗数値Iminに等しくセットされる(すなわち、I=Imin)(ブロック810)。しかしながら、ブロック808において、乗数値Iがゼロより小さくないと判断される場合、乗数値Iは、最大乗数値Imaxに等しくセットされる(すなわち、I=Imax)(ブロック812)。ブロック804において、飽和フラグが偽にクリアされた後、ブロック810において、乗数値Iは、Iminにセットされ、またはブロック812において、乗数値Iは、最大乗数値Imaxに等しくセットされ(すなわち、I=Imax)、スケールされた整数値(I、Q)および飽和フラグは、返される(ブロック814)。
【0080】
図9は、上記図4に関連して説明された例の複数の拡張算術演算と共に使用される一例の非正規化チェック演算900を表現するフロー図である。例の非正規化チェック演算900は、乗数Iが非正規化値かどうかを判断するために使用される。一般的に、複数の非正規化値は、下記に説明されるように特定の正規化数値域内にない値である。加えて、例の非正規化チェック演算900は、乗数値Iに基づいて、非正規化フラグの状態を更新するために使用される。
【0081】
例の非正規化チェック演算900は、チェック非正規化命令または関数(例えば、(flag_u)=check_unnorm(I))を実装することにより実行され、チェック非正規化命令または関数が実行された場合、プロセッサ(例えば、図13のプロセッサ1312)および/またはハードウェア(例えば、図12の例のシステム1200)に、乗数値Iに基づいて、複数の比較を実行させ、非正規化フラグの状態を更新させる。
【0082】
乗数値Iおよび数値域条件に基づく複数の比較は、乗数値Iが非正規化値かどうかを判断するために実行される(ブロック902)。具体的には、数値域条件は、下記式29により説明される。
【数29】

ブロック902において、乗数値Iが、式29で説明されるように、IminおよびImaxに基づく数値域条件の範囲内であると判断される場合、非正規化フラグは、真にセットされる(ブロック904)。しかしながら、ブロック902において、乗数値Iが、式29で説明される数値域条件を満たさないと判断される場合、非正規化フラグは変更されない。
【0083】
図10は、正規化演算が、上記図2に関連して説明された例のスケールされた整数データ型を用いて実行される一例の方法を表現するフロー図である。正規化演算は、スケールされた整数値が、例えば、複数の図5−9の例の複数の状態演算の乗数値数値域、またはスケール値数値域、および/または複数の数値条件により説明される例のスケールされた整数データ型の複数の値の所望の範囲内であることを保証するために使用される。正規化演算は、ハードウェア(例えば、図12の例のシステム1200)および/または機械アクセス可能媒体に記憶され、プロセッサシステム(例えば、図13のプロセッサシステム1310)に実行されるソフトウェアで実装される。
【0084】
正規化演算は、図4の例の複数の拡張算術演算を用いることにより、1に等しい正規化値NSCINTおよび入力値XSCINTに基づいて乗算演算を実行するために実装される。このように、入力値XSCINTは、例の複数の拡張算術演算で実装されるような乗算演算および/または複数の図5−9の例の複数の状態演算により修正されない。加えて、例の正規化演算1000は、入力値XSCINTに基づいて複数の状態フラグ(例えば、上記図4に関連して説明された複数の状態フラグ)を更新するために使用される。
【0085】
入力値XSCINTが得られ(ブロック1002)、正規化値NSCINTが得られる(ブロック1004)。入力値XSCINTは、例のスケールされた整数データ型の任意の所望のスケールされた整数値である。正規化値NSCINTは、一般的に、正規化値NSCINT=(1、β)(すなわち、NSCINT=1.0)を決定するために、1に等しい乗数値Iおよび入力値NSCINTのバイアス値βに等しいQを有するために選択される。
【0086】
入力値XSCINTおよび正規化値NSCINTは、乗算演算に渡される(ブロック1006)。具体的には、乗算演算は、複数の図5−9の例の複数の状態演算の1つ以上を含み、例の複数の拡張算術演算の乗算演算と実質的に同様または同一である(図4)。乗算演算および関連した複数の状態演算は、入力値XSCINTの複数の数値特性を解析および/または修正し、複数の図5−9の例の複数の状態演算に示されるように複数の状態フラグを更新する。
【0087】
図11は、上記図2に関連して説明された例のスケールされた整数データ型を用いて逆数演算が実行される一例の方法を表現するフロー図である。より具体的には、図11に関連して説明される複数の方法は、スケールされた整数値の逆数を見つけるために使用される。スケールされた整数値の逆数は、例えば、逆数乗算に基づく除算演算(すなわち、X÷Y=X・Y−1)を実行するために使用される。加えて、図11の複数の方法は、ハードウェア(例えば、図12の例のシステム1200)および/または機械可読媒体に記憶され、プロセッサシステム(例えば、図13のプロセッサシステム1310)上で実行されるソフトウェアで実装される。
【0088】
入力値XSCINTは、入力のスケールされた整数値(I、Q)を生成するために、入力値XSCINTから入力の乗数値Iおよび入力のスケール値Qを分けるまたは解析することにより、展開(アンパック)される(ブロック1102)。入力の乗数値Iおよび入力のスケール値Qは、その後、1≦I’<2の範囲内のスケールされた乗数値I’およびスケールされたスケール値を有するスケールされた整数値(I’、Q’)を生成するために再定義またはスケールされる(ブロック1104)。より具体的には、スケールされた乗数値I’およびスケールされたスケール値Q’は、入力のスケールされた整数値(I、Q)の数値等価値(上記式3で説明されたように)をスケールされた整数値(I’、Q’)の数値等価値に等しくセットすること、1≦I’<2の範囲のスケールされた乗数値I’を選択すること、および下記式30に示されるようにスケールされたスケール値を解くことにより決定される。
【数30】

【0089】
スケールされた整数値(I’,Q’)の逆数値は、その後、スケールされた乗数値I’およびスケールされたスケール値Q’に基づいて決定される(ブロック1106)。逆数値は、下記式31に説明されるように決定される。
【数31】

式31に示されるように、入力のスケールされた整数値(I,Q)の逆数値1/I’・2Q’−βは、1≦I’<2であるスケールされた整数値(I’,Q’)の逆数に比例する。
【0090】
スケールされた乗数値I’の逆数の値(すなわち、1/I’)は、その後、決定される(ブロック1108)。スケールされた乗数値の逆数の値1/I’を決定することは、逆関数の値を決定することと類似または同一である。具体的には、逆関数の値は、入力変数xに対して、逆関数近似多項式p(x)を決定することにより、例えば、最良近似法を用いて決定される。逆関数近似多項式p(x)の値は、その後、近似された逆数値p(I’)・1/2Q’−βを生成するために、入力変数値をスケールされた乗数値I’に等しくセットすることにより決定される。
【0091】
スケーリング定数sの値は、2のスケーリング定数乗(すなわち、2)がスケールされた乗数値の逆数1/I’により乗じられる値(すなわち、2/I’または2・p(I’))が比較的に大きな値となるように決定される(ブロック1110)。入力のスケールされた整数値(I,Q)の逆数を用いる複数の演算(例えば、複数の乗算演算)が比較的に正確な複数の結果を生成できるように、2/I’の比較的に大きな値を決定する。
【0092】
2のスケーリング定数s乗(2)の値は、その後、下記式32に示されるように、逆数の乗数値Irecipおよび逆数のスケール値Qrecipを決定するために、逆数値1/I’・2Q’ーβの分子および分母により乗じらる(ブロック1112)。
【数32】

式32に示されるように、2のスケーリング定数s乗(2)と2のスケールされたスケール値Q’およびスケーリング定数sの合計の負の結果乗を乗じた逆関数近似多項式p(I’)との積は、2のスケーリング定数s乗(2)を逆数値1/I’・2Q’−βの分子および分母で乗じる結果におよそ等しくなる。逆数乗数値Irecipおよび逆数スケール値Qrecipは、その後、スケールされた整数型フォーマット(例えば、図2の例の2進表現200)にパックされる(ブロック1114)。
【0093】
図12は、ここで説明される複数の装置、複数の方法、および複数の製品を実装するために使用される一例のシステム1200の機能ブロック図である。図12に示される複数の構造は、ハードウェアおよび/またはソフトウェアの任意の所望の組み合わせを用いて実装される。例えば、1つ以上の集積回路、ディスクリート半導体素子、または受動電子素子が使用される。加えて、またはあるいは、図12の複数の構造の幾つかもしくは全て、またはその一部は、機械可読媒体上に記憶される複数の命令、コード、または他のソフトウェアおよび/またはファームウェア等実装され、実行された場合、例えば、プロセッサシステム(例えば、図13のプロセッサシステム1310)にここで説明された複数の方法を実行させる。
【0094】
一般的に、例のシステム1200は、複数の算術演算および複数の状態演算を、上記図2に関連して説明される例のスケールされた整数データ型に基づいて実行する。加えて、例のシステム1200は、複数の状態フラグ(例えば上記図4に関連して説明された複数の状態フラグ)を、上記図4に関連して説明された例の複数の拡張算術演算および上記複数の図5−9に関連して説明された例の複数の状態演算に基づいて更新するように構成される。一般的に、例のシステム1200は、ここで説明される複数の方法を、ランタイム段階または例のシステム1200もしくはプロセッサシステム1310(図13)の任意の他の動作状態の間に実行するように構成される。
【0095】
ここで、図12の詳細に移ると、例のシステム1200は、データインターフェース1202、データ展開器(アンパッカ)1204、データパッカ1206、逆数生成器1208、比較器1210、減算器1212、シフタ1214、乗算器1216、および加算器を備え、示されるようにそれらの全ては、通信的に結合されている。データインターフェース1202は、複数のスケールされた整数値、複数のバイアス値、および例えば、メモリロケーションなどの、ここで説明された複数の演算に関連する任意の他の値を得て、記憶するように構成される。例えば、データインターフェース1202は、メモリロケーションから複数のスケールされた整数値を得て、それらをデータ展開器(アンパッカ)1204へ送る。さらに、データインターフェース1202は、複数のスケールされた整数値をデータパッカ1206から得て、複数のスケールされた整数値を複数のメモリロケーションの1つ以上に記憶する。加えて、またはあるいは、データインターフェース1202は、複数の演算(例えば、上記図3に関連して説明された例の複数の算術演算および上記複数の図5ー9に関連して説明された例の複数の状態演算)から複数のスケールされた整数値を得ておよび/またはと通信するように構成される。
【0096】
データ展開器(アンパッカ)1204は、スケールされた整数データ型フォーマット(例えば、図2の例の2進表現200)内の複数のスケールされた整数値を図12の複数の機能ブロックの任意から得て、複数のスケールされた整数値を、複数のスケールされた整数値のそれぞれから乗数値Iおよびスケール値Qに分けることまたは解析することにより、展開(アンパック)するように構成される。加えて、データ展開器(アンパッカ)1204は、複数の乗数値Iおよび複数のスケール値Qを図12の複数の機能ブロックの任意に伝えるように構成される。
【0097】
データパッカ1206は、複数の乗数値Iおよび対応する複数のスケール値Qを図12の複数の機能ブロックの任意から得て、複数の乗数値Iおよび複数のスケール値Qをスケールされた整数データ型フォーマット(例えば、図2の例の2進表現200)にパックするように構成される。加えて、データパッカ1206は、スケールされた整数データ型フォーマット内の複数のスケールされた整数値を図12の複数のブロックの任意に伝えるように構成される。
【0098】
逆数生成器1208は、複数のスケールされた整数値および複数のバイアス値βを得て、図11の複数の方法に関連して説明されたように複数の逆数スケールされた整数値を生成するように構成される。加えて、逆数生成器1208は、複数の逆数スケール生成器を図12の複数の機能ブロックの任意に伝えるように構成される。
【0099】
比較器1210は、複数のスケールされた整数値を得て、複数の比較を実行するように構成される。例えば、比較器1210は、複数のスケールされた整数値を、複数の乗数数値域制限IminおよびImaxならびに複数のスケール数値域制限QminおよびQmaxなどの複数の数値域制限と比較するように構成される。比較器1210は、例のゼロチェック演算500(図5)および例の左正規化演算700(図7)に関連したゼロテストなどの複数のゼロテスト比較を実行するように同様に構成される。加えて、比較器1210は、上記複数の図6および7に関連して説明された非負整数値kなどの他の複数の値を得て、例の右正規化演算600(図6)および例の左正規化演算700に関連して説明された複数の比較を実行するように構成される。その上、比較器1210は、複数の図5−9の例の複数の状態演算に関連して説明された複数の比較を実行するように構成される。
【0100】
減算器1212は、複数のスケールされた整数値および複数のバイアス値βを得て、複数のスケールされた整数値および/またはバイアス値βに基づいて複数の減算演算を実行するように構成される。例えば、上記式3で説明されたスケールされた整数符号値の数値変換のスケール値Qおよびバイアス値βの減算は、減算器1212により実行される。加えて、上記式12の入力の複数の乗数値IxおよびIyの減算演算は、減算器1212により実行される。
【0101】
シフタ1214は、複数のスケールされた整数値および/または他の複数の値に基づいて、複数のシフト演算および/または複数のシフト演算を経由して除算演算を実行するように構成される。例えば、上記図3に関連して説明された中間の複数の乗数値I’およびI’は、上記複数の式14および15に従って決定される。より具体的には、第一の中間の乗数値I’は、Qmax−Qの値に等しい回数だけ第一の入力の乗数値Iを右シフトすることに基づいて決定される。
【0102】
シフタ1214は、例えば、上記複数の式21および22で説明された複数の数値域条件の項の値などの複数の値をシフトするために同様に構成される。例えば、シフタ1214は、非負整数値kに等しい回数だけ乗数値Iを右シフトすることにより項を評価するように構成される。
【0103】
乗算器1216は、ここで説明される複数の方法に関連する複数のスケールされた整数値および任意の他の複数の値に基づいて、複数の乗算演算を実行するように構成される。例えば、乗算器1216は、例の複数の算術演算(図3)に関連して説明された複数のスケールされた整数値の乗算演算を実行するように構成される。乗算器1216は、上記式3のスケールされた整数数値評価の乗算を実行するために同様に使用される。具体的には、乗算器1216は、乗数値Iに2の合成スケール指数(すなわち、Q−β)乗の結果を乗じるように構成される。加えて、乗算器1216は、例えば、逆数生成器1208からスケールされた整数逆数値を受け取り、スケールされた整数逆数を他のスケールされた整数値で乗じることによる逆数乗算に基づいて複数の除算演算を実行するために使用される。
【0104】
加算器1218は、複数のスケールされた整数値およびここで説明される複数の方法に関連する任意の他の複数の値に基づいて複数の加算演算を実行するために使用される。例えば、加算器1218は、図3に関連して説明される複数のスケールされた整数値の複数の加算演算を実行するように構成される。加算器1218は、例えば、上記複数の式6および7の指数(1+β)などの複数の指数を加算するように同様に構成される。
【0105】
図13は、ここで説明される複数の装置および複数の方法を実装するために使用される一例のプロセッサシステム1310のブロック図である。図13に示されるように、プロセッサシステム1310は、相互接続バスまたはネットワーク1314に結合されたプロセッサ1312を備える。プロセッサ1312は、レジスタセットまたはレジスタスペース1316を有し、これは、図13では、全体的にオンチップであるように描かれているが、これは、あるいは、全体的にまたは部分的にオフチップで配置され、複数の専用電気接続を経由しておよび/または相互接続ネットワークもしくはバス1314を経由して直接接続されてよい。プロセッサ1312は、例えば、Intel X−Scale(登録商標)ファミリ、Intel Pentium(登録商標)ファミリ等からのプロセッサなどの、任意の適したプロセッサ、プロセッシングユニットまたはマイクロプロセッサでよい。下記で詳細に説明される例において、プロセッサ1312は、一般にIA−32プロセッサと称される32ビットIntelプロセッサである。図13には示されていないが、システム1310は、マルチプロセッサシステムでよく、したがって、プロセッサ1312と同一のまたは同様で、相互接続バスまたはネットワーク1314に結合された1つ以上の追加のプロセッサを備えてよい。
【0106】
図13のプロセッサ1312は、メモリコントローラ1320および入力/出力(I/O)コントローラ1322を有するのチップセット1318に結合される。良く知られるように、チップセットは、一般的に、チップセットに結合される1つ以上のプロセッサによりアクセス可能なまたは使用される複数の汎用および特定用途レジスタ、タイマ等と同様に複数のI/Oおよびメモリ管理機能を提供する。メモリコントローラ1320は、プロセッサ1312(複数のプロセッサがある場合、または複数のプロセッサ)がシステムメモリ1324および不揮発性メモリ1325にアクセスすることを可能にする複数の機能を実行する。
【0107】
システムメモリ1324は、例えば、スタティックランダムアクセスメモリ(SRAM)、ダイナミックランダムアクセスメモリ(DRAM)などの揮発性メモリの任意の所望のタイプを有する。不揮発性メモリ1325は、フラッシュメモリまたは読み出し専用メモリ(ROM)などの不揮発性メモリの任意の所望のタイプを有する。
【0108】
I/Oコントローラ1322は、プロセッサ1312が複数の周辺入力/出力(I/O)装置1326および1328とI/Oバス1330を経由して通信することを可能にする複数の機能を実行する。複数のI/Oデバイス1326および1328は、例えば、キーボード、ビデオディスプレイもしくはモニタ、マウスなどのI/Oデバイスの任意の所望のタイプでよい。メモリコントローラ1320およびI/Oコントローラ1322は、図13において、チップセット1318内の別々の複数の機能ブロックとして描かれているが、これら複数のブロックにより実行される複数の機能は、1つの半導体回路内に集積されてよく、または、2つ以上の別々の集積回路を用いて実装されてもよい。
【0109】
ここで説明される複数の方法は、プロセッサ1312により実行され、コンピュータ可読媒体上に記憶される複数の命令を用いて実装される。コンピュータ可読媒体は、複数の大容量記憶デバイス(例えば、ディスクドライブ)、複数のリムーバブル記憶デバイス(例えば、複数のフロッピーディスク、複数のメモリカードまたはスティック等)および/または複数の集積メモリデバイス(例えば、ランダムアクセスメモリ、フラッシュメモリ等)の任意の所望の組み合わせを用いて実装される半導体、磁気および/または光学メディアの任意の所望の組み合わせを備える。
【0110】
特定の複数の方法、複数の装置、および複数の製品がここで説明されたが、本発明の範囲は、これに制限されない。それどころか、本発明は、全ての方法、装置、および製品を適切に、添付の複数の請求項の範囲内で、文言上または均等論に基づいて網羅する。

【特許請求の範囲】
【請求項1】
スケールされた整数値を識別する段階、
前記スケールされた整数値に基づいて、ビット領域の第一の部分から第一の情報を抽出することにより、乗数値を決定する段階であって、前記ビット領域の前記第一の部分は、第一の符号付き整数値を有するように構成可能な段階、
前記スケールされた整数値に基づいて、前記ビット領域の第二の部分から第二の情報を抽出することにより、スケール値を決定する段階であって、前記ビット領域の前記第二の部分は、第二の符号付き整数値を有するように構成可能な段階、および
前記乗数値および前記スケール値に基づいて、算術演算を実行する段階
を備える方法。
【請求項2】
前記算術演算は、2の補数算術演算および整数算術演算の1つである請求項1に定義される方法。
【請求項3】
前記ビット領域の前記第一の部分および前記第二の部分は、メモリロケーションに関連する請求項1に定義される方法。
【請求項4】
前記乗数値および前記スケール値の少なくとも1つに基づいて、状態演算を実行する段階をさらに備える請求項1に定義される方法。
【請求項5】
プロセッサシステム、および
前記プロセッサシステムに通信的に結合されたメモリを備え、
前記メモリは、記憶された複数の命令を有し、
前記記憶された複数の命令は、前記プロセッサシステムが、
スケールされた整数値を識別すること、
前記スケールされた整数値に基づいて、ビット領域の第一の部分から第一の情報を抽出することにより、乗数値を決定することであって、前記ビット領域の前記第一の部分は、第一の符号付き整数値を有するように構成可能なこと、
前記スケールされた整数値に基づいて、前記ビット領域の第二の部分から第二の情報を抽出することにより、スケール値を決定することであって、前記ビット領域の前記第二の部分は、第二の符号付き整数値を有するように構成可能なこと、および
前記乗数値および前記スケール値に基づいて、算術演算を実行すること
を可能にする装置。
【請求項6】
前記算術演算は、2の補数算術演算および整数算術演算の少なくとも1つである請求項5に定義される装置。
【請求項7】
前記ビット領域の前記第一の部分および前記第二の部分は、メモリロケーションに関連する請求項5に定義される装置。
【請求項8】
前記記憶された複数の命令は、前記プロセッサシステムが、前記乗数値および前記スケール値の少なくとも1つに基づいて、状態演算を実行することを可能にする請求項5に定義される装置。
【請求項9】
記憶された複数の命令を備える機械アクセス可能媒体であって、前記複数の命令が実行された場合、前記複数の命令は、機械に、
スケールされた整数値を識別すること、
前記スケールされた整数値に基づいて、ビット領域の第一の部分から第一の情報を抽出することにより、乗数値を決定することであって、前記ビット領域の前記第一の部分は、第一の符号付き整数値を有するように構成可能なこと、
前記スケールされた整数値に基づいて、前記ビット領域の第二の部分から第二の情報を抽出することにより、スケール値を決定することであって、前記ビット領域の前記第二の部分は、第二の符号付き整数値を有するように構成可能なこと、および
前記乗数値および前記スケール値に基づいて、算術演算を実行すること
をさせる機械アクセス可能媒体。
【請求項10】
前記算術演算は、2の補数算術演算および整数算術演算の少なくとも1つである請求項9に定義される機械アクセス可能媒体。
【請求項11】
前記ビット領域の前記第一の部分および前記第二の部分は、メモリロケーションに関連する請求項9に定義される機械アクセス可能媒体。
【請求項12】
記憶された複数の命令を備え、前記複数の命令が実行された場合、前記複数の命令は、機械に、前記乗数値および前記スケール値の少なくとも1つに基づいて、状態演算を実行することをさせる請求項9に定義される機械アクセス可能媒体。
【請求項13】
バイアス値を識別する段階と、
第一の入力値を識別する段階と、
第一のスケール値を識別する段階と、
前記第一の入力値、前記第一のスケール値、および前記バイアス値に基づいて、第一の乗数値を決定する段階と、
前記第一の乗数値をビット領域の第一の部分に記憶する段階であって、前記ビット領域の前記第一の部分は、第一の符号付き整数値であるように構成することができる段階と、
第二の入力値を識別する段階と、
第二のスケール値を識別する段階と、
前記第二の入力値、前記第二のスケール値、および前記バイアス値に基づいて、第二の乗数値を決定する段階と、
前記第二の乗数値を前記ビット領域の第二の部分に記憶する段階であって、前記ビット領域の前記第二の部分は、第二の符号付き整数値であるように構成することができる段階と、および
前記第一の乗数値、前記第一のスケール値、前記第二の乗数値、および第二のスケール値に基づいて整数ベース演算を実行する段階と
を備える方法。
【請求項14】
前記第一の乗数値は、前記第一の入力値を、2の前記第一のスケール値から前記バイアス値を減じた値乗で割ることで決定される請求項13に定義される方法。
【請求項15】
前記整数ベース演算は、前記第一の乗数値を前記第二の乗数値に加算する加算演算である請求項13に定義される方法。
【請求項16】
前記整数ベース演算は、前記第一の乗数値を前記第二の乗数値で乗じならびに前記第一のスケール値および前記第二のスケール値の合計から前記バイアス値を減じる乗算演算である請求項13に定義される方法。
【請求項17】
最小のスケール値、最大のスケール値、最小の乗数値、および最大の乗数値の少なくとも1つ識別する段階をさらに備える請求項13に定義される方法。
【請求項18】
前記最小のスケール値、前記最大のスケール値、前記最小の乗数値、および前記最大の乗数値の少なくとも1つに基づいて状態演算を実行する段階をさらに備える請求項17に定義される方法。
【請求項19】
プロセッサシステム、および
前記プロセッサシステムに通信的に結合されたメモリを備え、
前記メモリは、記憶された複数の命令を有し、
前記記憶された複数の命令は、前記プロセッサシステムが、
バイアス値を識別すること、
第一の入力値を識別すること、
第一のスケール値を識別すること、
前記第一の入力値、前記第一のスケール値、および前記バイアス値に基づいて、第一の乗数値を決定すること、
前記第一の乗数値をビット領域の第一の部分に記憶することであって、前記ビット領域の前記第一の部分は、第一の符号付き整数値であるように構成することができること、
第二の入力値を識別すること、
第二のスケール値を識別すること、
前記第二の入力値、前記第二のスケール値、および前記バイアス値に基づいて、第二の乗数値を決定すること、
前記第二の乗数値を前記ビット領域の第二の部分に記憶する段階であって、前記ビット領域の前記第二の部分は、第二の符号付き整数値であるように構成することができること、および
前記第一の乗数値、前記第一のスケール値、前記第二の乗数値、および第二のスケール値に基づいて整数ベース演算を実行すること
を可能にする装置。
【請求項20】
前記記憶された複数の命令は、前記プロセッサシステムが、前記第一の乗数値を、前記第一の入力値を、2の前記第一のスケール値から前記バイアス値を減じた値乗で割ることで決定することを可能にする請求項0に定義される装置。
【請求項21】
前記整数ベース演算は、前記第一の乗数値を前記第二の乗数値に加算する加算演算である請求項0に定義される装置。
【請求項22】
前記整数ベース演算は、前記第一の乗数値を前記第二の乗数値で乗じならびに前記第一のスケール値および前記第二のスケール値の合計から前記バイアス値を減じる乗算演算である請求項0に定義される装置。
【請求項23】
前記記憶された複数の命令は、前記プロセッサシステムが、最小のスケール値、最大のスケール値、最小の乗数値、および最大の乗数値の少なくとも1つ識別することを可能にする請求項0に定義される装置。
【請求項24】
前記記憶された複数の命令は、前記プロセッサシステムが、前記最小のスケール値、前記最大のスケール値、前記最小の乗数値、および前記最大の乗数値の少なくとも1つに基づいて状態演算を実行することを可能にする請求項23に定義される装置。
【請求項25】
記憶された複数の命令を備える機械アクセス可能媒体であって、前記複数の命令が実行された場合、前記複数の命令は、機械に、
バイアス値を識別すること、
第一の入力値を識別すること、
第一のスケール値を識別すること、
前記第一の入力値、前記第一のスケール値、および前記バイアス値に基づいて、第一の乗数値を決定すること、
前記第一の乗数値をビット領域の第一の部分に記憶することであって、前記ビット領域の前記第一の部分は、第一の符号付き整数値であるように構成することができること、
第二の入力値を識別すること、
第二のスケール値を識別すること、
前記第二の入力値、前記第二のスケール値、および前記バイアス値に基づいて、第二の乗数値を決定すること、
前記第二の乗数値を前記ビット領域の第二の部分に記憶する段階であって、前記ビット領域の前記第二の部分は、第二の符号付き整数値であるように構成することができること、および
前記第一の乗数値、前記第一のスケール値、前記第二の乗数値、および第二のスケール値に基づいて整数ベース演算を実行すること
をさせる機械アクセス可能媒体。
【請求項26】
記憶された複数の命令を備え、前記複数の命令が実行された場合、前記複数の命令は、機械に、前記第一の乗数値を、前記第一の入力値を、2の前記第一のスケール値から前記バイアス値を減じた値乗で割ることで決定することをさせる請求項25に定義される機械アクセス可能媒体。
【請求項27】
前記整数ベース演算は、前記第一の乗数値を前記第二の乗数値に加算する加算演算である請求項25に定義される機械アクセス可能媒体。
【請求項28】
前記整数ベース演算は、前記第一の乗数値を前記第二の乗数値で乗じならびに前記第一のスケール値および前記第二のスケール値の合計から前記バイアス値を減じる乗算演算である請求項25に定義される機械アクセス可能媒体。
【請求項29】
記憶された複数の命令を備え、前記複数の命令が実行された場合、前記複数の命令は、機械に、最小のスケール値、最大のスケール値、最小の乗数値、および最大の乗数値の少なくとも1つ識別することをさせる請求項25に定義される機械アクセス可能媒体。
【請求項30】
記憶された複数の命令を備え、前記複数の命令が実行された場合、前記複数の命令は、機械に、前記最小のスケール値、前記最大のスケール値、前記最小の乗数値、および前記最大の乗数値の少なくとも1つに基づいて状態演算を実行することをさせる請求項29に定義される機械アクセス可能媒体。
【請求項31】
バイアス値を識別する段階と、
第一の入力値を識別する段階と、
第一の乗数値を識別する段階と、
前記第一の入力値、前記第一の乗数値、および前記バイアス値に基づいて、第一のスケール値を決定する段階と、
前記第一のスケール値をビット領域の第一の部分に記憶する段階であって、前記ビット領域の前記第一の部分は、第一の符号付き整数値であるように構成することができる段階と、
第二の入力値を識別する段階と、
第二の乗数値を識別する段階と、
前記第二の入力値、前記第二の乗数値、および前記バイアス値に基づいて、第二のスケール値を決定する段階と、
前記第二のスケール値を前記ビット領域の第二の部分に記憶する段階であって、前記ビット領域の前記第二の部分は、第二の符号付き整数値であるように構成することができる段階と、および
前記第一の乗数値、前記第一のスケール値、前記第二の乗数値、および第二のスケール値に基づいて整数ベース演算を実行する段階と
を備える方法。
【請求項32】
前記第一のスケール値を決定する段階は、前記第一の乗数値に割られる前記第一の入力値の商の2を基底とするログ関数に前記バイアス値を加算する段階を備える請求項31に定義される方法。
【請求項33】
前記整数ベース演算は、前記第一の乗数値を前記第二の乗数値に加算する加算演算である請求項31に定義される方法。
【請求項34】
前記整数ベース演算は、前記第一の乗数値を前記第二の乗数値で乗じならびに前記第一のスケール値および前記第二のスケール値の合計から前記バイアス値を減じる乗算演算である請求項31に定義される方法。
【請求項35】
プロセッサシステム、および
前記プロセッサシステムに通信的に結合されたメモリを備え、
前記メモリは、記憶された複数の命令を有し、
前記記憶された複数の命令は、前記プロセッサシステムが、
バイアス値を識別すること、
第一の入力値を識別すること、
第一の乗数値を識別すること、
前記第一の入力値、前記第一の乗数値、および前記バイアス値に基づいて、第一のスケール値を決定すること、
前記第一のスケール値をビット領域の第一の部分に記憶することであって、前記ビット領域の前記第一の部分は、第一の符号付き整数値であるように構成することができること、
第二の入力値を識別すること、
第二の乗数値を識別すること、
前記第二の入力値、前記第二の乗数値、および前記バイアス値に基づいて、第二のスケール値を決定すること、
前記第二のスケール値を前記ビット領域の第二の部分に記憶することであって、前記ビット領域の前記第二の部分は、第二の符号付き整数値であるように構成することができること、および
前記第一の乗数値、前記第一のスケール値、前記第二の乗数値、および第二のスケール値に基づいて整数ベース演算を実行すること
を可能にする装置。
【請求項36】
前記記憶された複数の命令は、前記プロセッサシステムが、前記第一のスケール値を決定することを、前記第一の乗数値に割られる前記第一の入力値の商の2を基底とするログ関数に前記バイアス値を加算することにより可能にする請求項35に定義される装置。
【請求項37】
前記整数ベース演算は、前記第一の乗数値を前記第二の乗数値に加算する加算演算である請求項35に定義される装置。
【請求項38】
前記整数ベース演算は、前記第一の乗数値を前記第二の乗数値で乗じならびに前記第一のスケール値および前記第二のスケール値の合計から前記バイアス値を減じる乗算演算である請求項35に定義される装置。
【請求項39】
記憶された複数の命令を備える機械アクセス可能媒体であって、前記複数の命令が実行された場合、前記複数の命令は、機械に、
バイアス値を識別すること、
第一の入力値を識別すること、
第一の乗数値を識別すること、
前記第一の入力値、前記第一の乗数値、および前記バイアス値に基づいて、第一のスケール値を決定すること、
前記第一のスケール値をビット領域の第一の部分に記憶することであって、前記ビット領域の前記第一の部分は、第一の符号付き整数値であるように構成することができること、
第二の入力値を識別すること、
第二の乗数値を識別すること、
前記第二の入力値、前記第二の乗数値、および前記バイアス値に基づいて、第二のスケール値を決定すること、
前記第二のスケール値を前記ビット領域の第二の部分に記憶することであって、前記ビット領域の前記第二の部分は、第二の符号付き整数値であるように構成することができること、および
前記第一の乗数値、前記第一のスケール値、前記第二の乗数値、および第二のスケール値に基づいて整数ベース演算を実行すること
をさせる機械アクセス可能媒体。
【請求項40】
記憶された複数の命令を備え、前記複数の命令が実行された場合、前記複数の命令は、機械に、前記第一のスケール値を決定することを、前記第一の乗数値に割られる前記第一の入力値の商の2を基底とするログ関数に前記バイアス値を加算することによりさせる請求項39に定義される機械アクセス可能媒体。
【請求項41】
前記整数ベース演算は、前記第一の乗数値を前記第二の乗数値に加算する加算演算である請求項39に定義される機械アクセス可能媒体。
【請求項42】
前記整数ベース演算は、前記第一の乗数値を前記第二の乗数値で乗じならびに前記第一のスケール値および前記第二のスケール値の合計から前記バイアス値を減じる乗算演算である請求項39に定義される機械アクセス可能媒体。
【請求項43】
第一のスケールされた整数値および第二のスケールされた整数値を認識するように構成可能なデータインターフェース、および
前記データインターフェースに通信的に結合され、前記第一のスケールされた整数値に基づいて、第一の乗数値および第一のスケール値を、ならびに前記第二のスケールされた整数値に基づいて、第二の乗数値および第二のスケール値を認識するように構成可能なデータ展開器(アンパッカ)であって、前記第一の乗数値、前記第一のスケール値、前記第二の乗数値、および前記第二のスケール値は、それぞれ、符号付き整数値を有するように構成することができるデータ展開器(アンパッカ)
を備える装置。
【請求項44】
前記第一の乗数値を前記第二の乗数値におよび前記第一のスケール値を前記第二のスケール値に加算することにより加算演算を実行するように構成可能な加算器をさらに備える請求項43に定義される装置。
【請求項45】
前記加算器は、前記第一の乗数値および前記第二の乗数値に基づいて、2の補数加算演算を実行するように構成することができる請求項44に定義される装置。
【請求項46】
前記第一の乗数値に前記第二の乗数値を乗じ、ならびに前記第一のスケール値および前記第二のスケール値の合計からバイアス値を減じることにより、乗算えんざんを実行するように構成することができる乗算器をさらに備える請求項43に定義される装置。
【請求項47】
前記乗算器は、前記第一の乗数値、前記第二の乗数値、前記第一のスケール値、および前記第二のスケール値の少なくとも1つに基づいて、2の補数乗算演算を実行するように構成することができる請求項46に定義される装置。
【請求項48】
プロセッサシステム、および
前記プロセッサシステムに通信的に結合されたフラッシュメモリを備え、
前記フラッシュメモリは、記憶された複数の命令を有し、
前記記憶された複数の命令は、前記プロセッサシステムが、
バイアス値を識別すること、
第一の入力値を識別すること、
第一のスケール値を識別すること、
前記第一の入力値、前記第一のスケール値、および前記バイアス値に基づいて、第一の乗数値を決定すること、
前記第一の乗数値をビット領域の第一の部分に記憶することであって、前記ビット領域の前記第一の部分は、第一の符号付き整数値であるように構成することができること、
第二の入力値を識別すること、
第二のスケール値を識別すること、
前記第二の入力値、前記第二のスケール値、および前記バイアス値に基づいて、第二の乗数値を決定すること、
前記第二の乗数値を前記ビット領域の第二の部分に記憶する段階であって、前記ビット領域の前記第二の部分は、第二の符号付き整数値であるように構成することができること、および
前記第一の乗数値、前記第一のスケール値、前記第二の乗数値、および第二のスケール値に基づいて整数ベース演算を実行すること
を可能にする装置。
【請求項49】
前記整数ベース演算は、2の補数算術演算である請求項48に定義される装置。
【請求項50】
算術演算を実行するために要求を受け取る段階と、
前記要求に応答して、スケールされた整数値に基づいて前記算術演算を実行するために、プロセッサで複数の命令の一組を実行する段階と
を備え、
前記複数の命令の実行は、前記プロセッサに、
前記スケールされた整数値を認識すること、
前記スケールされた整数値に基づいて、ビット領域の第一の部分から第一の情報を抽出することにより、乗数値を決定することであって、前記ビット領域の前記第一の部分は、第一の符号付き整数値を有するように構成可能なこと、
前記スケールされた整数値に基づいて、前記ビット領域の第二の部分から第二の情報を抽出することにより、スケール値を決定することであって、前記ビット領域の前記第二の部分は、第二の符号付き整数値を有するように構成可能なこと、および
前記乗数値および前記スケール値に基づいて、算術演算を実行すること
をさせる方法。
【請求項51】
前記算術演算は、2の補数算術演算および整数算術演算の1つである請求項50に定義される方法。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate


【公表番号】特表2007−515021(P2007−515021A)
【公表日】平成19年6月7日(2007.6.7)
【国際特許分類】
【出願番号】特願2006−545703(P2006−545703)
【出願日】平成16年12月1日(2004.12.1)
【国際出願番号】PCT/US2004/040361
【国際公開番号】WO2005/062165
【国際公開日】平成17年7月7日(2005.7.7)
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.フロッピー
【出願人】(591003943)インテル・コーポレーション (1,101)
【Fターム(参考)】