【文献】
Riccardo Bettati, Nicholas S. Bowen, Jen-Yao Chung,Checking Imprecise Computation,Proceedings of the IEEE Workshop on Imprecise and Approximate Computation,IEEE,1992年12月,Pages:45-49
【文献】
Swagath Venkataramani, Vinay K. Chippa, Srimat T. Chakradhar, Kaushik Roy, Anand Raghunathan,Quality Programmable Vector Processors for Approximate Computing,Proceedings of the 46th Annual IEEE/ACM International Symposium on Microarchitecture (MICRO'46),ACM,2013年12月,Pages:1-12
(58)【調査した分野】(Int.Cl.,DB名)
当該プロセッサは、前記累積された誤差の量が前記誤差限界を超えたと検知するとき、当該プロセッサのマイクロコードが、当該プロセッサに、前記計算のセットを実行するように命令する命令の再実行をさせ、前記命令の前記再実行の間、当該プロセッサは前記計算のセットを非近似化において実行する、請求項1に記載のプロセッサ。
前記スナップショットは、前記命令のうち第1の命令のアドレスを含み、前記マイクロコードは、前記命令のうち前記第1の命令の前記アドレスにおいて前記命令の再実行をさせる、請求項3に記載のプロセッサ。
当該プロセッサは、第1の所定の命令に応答して前記近似化において計算を実行することを開始し、第2の所定の命令に応答して前記近似化において計算を実行することを終了するように構成される、請求項1に記載のプロセッサ。
前記プロセッサが、前記累積された誤差の量が前記誤差限界を超えたと検知するとき、前記プロセッサに、前記計算のセットを実行するように命令する命令の再実行をさせるステップであって、前記命令の前記再実行の間、前記プロセッサは前記計算のセットを非近似化において実行する、ステップ
をさらに備える請求項14に記載の方法。
【発明を実施するための形態】
【0007】
プロセッサが近似計算を実行する実施形態を説明する。近似計算が行われるのは、プロセッサの命令セットアーキテクチャによって指定することができる最高精度より低い程度の精度で計算が実行されるときである。
【0008】
次に
図1を参照すると、プロセッサ100の一実施形態を例示する構成図が示される。プロセッサ100は、中央処理装置(CPU)又はグラフィック処理装置(GPU)など、記憶された命令を実行するプログラマブルデータプロセッサを備える。プロセッサ100は、命令キャッシュ102と、命令キャッシュ102に結合された命令トランスレータ104と、命令トランスレータ104からマイクロ命令を受け取るように結合された1つ又は複数の近似化機能ユニット106と、命令オペランド166を近似化機能ユニット106に提供するように結合されたアーキテクチャレジスタ108と、近似化機能ユニット106に結合された近似制御レジスタ132と、近似化機能ユニット106に結合されたデータキャッシュメモリ138と、近似化機能ユニット106に結合されたスナップショットストレージ134とを含む。プロセッサ100は、他のユニットを含むこともでき、例えば、リネームユニット、命令スケジューラ及び/又は予約ステーションを命令トランスレータ104と近似化機能ユニット106との間に採用することができ、リオーダバッファをアウトオブオーダ命令実行に対応するように採用することができる
【0009】
命令キャッシュ102は、メモリから取り出され、プロセッサ100によって実行されるアーキテクチャ命令174をキャッシュする。アーキテクチャ命令174は、
図3に関して説明する近似計算命令399の実施形態などの近似計算命令を含むことができる。近似計算命令399は、プロセッサ100の近似計算ポリシー、すなわち、近似化機能ユニット106が最高度の精度で計算を実行するのか又は最高度より低い精度及び最高度より低い程度で計算を実行するのかを制御する。近似計算命令399は、本明細書に説明するように、プロセッサ100の汎用レジスタの各々に関連付けられた誤差(error)量のクリア(clearing)も制御する。好ましくは、プロセッサ100は、近似化をしない他の機能ユニットを含む。一実施形態において、アーキテクチャ命令174は、本明細書に説明する近似計算命令399の実施形態を含むように修正されたx86命令セットアーキテクチャ(ISA)に実質的に従う。プロセッサ100のISAがx86ISA以外である他の実施形態が企図されている。
【0010】
命令トランスレータ104は、命令キャッシュ102からアーキテクチャ命令174を受け取る。命令トランスレータ104は、アーキテクチャ命令174を復号し、それらをマイクロ命令に変換する命令デコーダを含む。マイクロ命令は、アーキテクチャ命令セットとは異なる命令セット、すなわち、マイクロアーキテクチャ命令セットによって定義される。マイクロ命令は、アーキテクチャ命令174を実現する。
【0011】
好ましくは、命令トランスレータ104は、プロセッサ100の読取り専用メモリに好ましくは記憶された、マイクロコード命令を含むマイクロコード136をさらに含む。一実施形態において、マイクロコード命令はマイクロ命令である。代替実施形態において、マイクロコード命令は、マイクロトランスレータによってマイクロ命令に変換される。マイクロコード136は、命令トランスレータ104のプログラマブルロジックアレイによって直接マイクロ命令に変換されない、プロセッサ100のISAのアーキテクチャ命令174のサブセットを実現する。さらに、マイクロコード136は、一実施形態により、近似計算によって生成された累積誤差限界が誤差限界を超えるとき生成されるなどのマイクロアーキテクチャ例外を扱う。
【0012】
アーキテクチャレジスタ108は、命令(例えば、マイクロ命令)オペランド166を近似化機能ユニット106に提供し、近似化機能ユニット106によって生成された結果を、好ましくはリオーダバッファ(図示せず)を介して受け取る。アーキテクチャレジスタ108の各々に関連付けられているのは、関連付けられたレジスタ108に記憶された結果の誤差の量の指標(indication)を保持する誤差ストレージ109である。近似化機能ユニット106が結果164(アーキテクチャレジスタ108に書き込まれる)を生成するたびに、近似化機能ユニット106は、近似計算により累積した、結果164に関連付けられた誤差168の量の指標をさらに生成する。誤差168は宛先レジスタ108に関連付けられた誤差ストレージ109に書き込まれる。さらに、レジスタ108がオペランドを近似化機能ユニット106に提供するたびに、関連付けられた誤差ストレージ109は、オペランドに関連付けられた誤差162を近似化機能ユニット106に提供する。これにより、近似化機能ユニット106は、近似計算を実行するとき、計算の入力オペランド166の誤差と、近似化機能ユニット106によって導入された誤差との両方を累積することが可能になる。
【0013】
スナップショットストレージ134は、プロセッサ100の状態のスナップショットを保持する。プロセッサ100は、近似計算を実行することを開始する前に、その状態をスナップショットストレージ134に書き込み、したがって、近似計算の結果の累積された誤差が誤差限界を超える場合、プロセッサ100は、一実施形態により以下により詳細に説明するように、その状態をスナップショット134から復元し、近似なしで計算を再実行することができる。一実施形態において、スナップショットストレージ134は、プロセッサ100のプライベートメモリを備える。好ましくは、スナップショット134は、近似計算を実行する命令のセット内の第1の命令のアドレスを含む。マイクロコード136が命令のセットの再実行を引き起こし、ただし近似のない一実施形態(例えば、
図10)において、マイクロコード136は、スナップショット134に保持された第1の命令のアドレスへの分岐を引き起こす。
【0014】
データキャッシュ138は、システムメモリロケーションからデータをキャッシュする。一実施形態において、データキャッシュ138は、第1のレベルのデータキャッシュと、命令キャッシュ102及び第1のレベルのキャッシュを支援する第2のレベルのキャッシュとを含むキャッシュメモリの階層である。一実施形態において、近似計算を採用するプログラムは、プロセッサ100によって提供された誤差限界の特徴を超えた後、回復を享受することになっている場合は、そのデータがデータキャッシュ138をオーバーフローしないことを確実にしなければならない。
【0015】
一実施形態において、近似制御レジスタ132は、近似化機能ユニット106に提供される、プロセッサ100の近似ポリシー176を指定する情報を保持する。好ましくは、近似制御レジスタ132は、近似フラグと、近似量と、誤差限界(又は誤差閾値)とを含む。近似フラグは、近似化機能ユニット106によって実行された計算が最高精度の計算なのか又は近似計算なのか、すなわち、最高精度モードであるのか又は近似計算モード(又は近似化モード)であるのかを示す。近似量は、近似化機能ユニット106に、それらの近似計算を実行するのに採用することができる最高度より低い程度の精度を知らせる。誤差限界は、近似計算の結果164において容認され得る累積された誤差168の量を指定し、それを超えると、誤差限界を超えたことをプロセッサ100が信号で伝え、好ましくは、したがって、計算を近似なしで再度実行することができる。一実施形態において、近似化機能ユニット106は、近似制御レジスタ132に記憶された近似ポリシーにより計算を実行する。代替実施形態において、各命令は、例えばプレフィックスなどにおいて、近似ポリシーを近似化機能ユニット106に対して指定する。一実施形態において、近似制御レジスタ132は、プロセッサ100の命令セットアーキテクチャの命令によって書き込み可能である。
【0016】
近似化機能ユニット106は、通常計算(すなわち、命令セットアーキテクチャによって指定された最高度の精度で)又は近似計算(すなわち、命令セットアーキテクチャによって指定された、最高度より低い精度で)を選択的に実行することができる。近似化機能ユニット106の各々は、命令の処理に関連付けられた機能を実行するハードウェア又はハードウェアとプロセッサ100内のマイクロコードとの組合せである。より具体的には、ハードウェア又はハードウェアとマイクロコードとの組合せは、計算を実行して、結果を生成する。機能ユニットの例には、限定はされないが、整数ユニットなどの実行ユニット、単一問題多重データ(single issue multiple data;SIMD)ユニット、マルチメディアユニット、及び浮動小数点乗算器、浮動小数点除算器及び浮動小数点加算器などの浮動小数点ユニットが含まれる。有利には、近似化機能ユニット106は、通常計算を実行するときよりも近似計算を実行するときのほうが電力の消費が少ない。近似化機能ユニット106の実施形態は、
図2に関してより詳細に説明される。
【0017】
次に
図2を参照すると、
図1の近似化機能ユニット106の3つの実施形態を例示する構成図が示される。3つの実施形態は、近似化浮動小数点乗算器106Aと、近似化超越関数計算ユニット106Bと、近似化除算器106Cとである。
【0018】
近似化浮動小数点乗算器106Aは、入力オペランド166をレジスタ108から受け取り、
図1の結果164を生成する。近似化浮動小数点乗算器106Aは、入力オペランド166の最上位ビットへの乗算を実行するゲート202と、入力オペランド166の最下位ビットへの乗算を実行するゲート204とを含む。近似化浮動小数点乗算器106Aは、近似ポリシー176に基づいて最下位ビット乗算ゲート204への電力の選択的提供を制御する電力制御ロジック206をさらに含む。例えば、近似モードが最高精度である場合、電力制御206により、最下位ビット乗算ゲート204のトランジスタに電力が提供されるが、近似モードが最高精度より低い場合、電力制御206により、最下位ビット乗算ゲート204のトランジスタに電力が提供されない。一実施形態において、最下位ビット乗算ゲート204は、電力制御206が近似化ポリシー176に示された近似量に基づいて最下位ビットのより小さい又はより少ないほうの乗算に関連付けられたゲートをパワーオフするようにグループ化される。好ましくは、近似化浮動小数点乗算器106Aは、最下位ビット乗算ゲート204の中間結果が最上位ビット乗算ゲート202(例えば、キャリー)に提供されるように構成され、最下位ビット乗算ゲート204が近似計算モードでパワーオフされるとき、デフォルト値(例えば、ゼロ)が中間結果として最上位ビット乗算ゲート202に提供される。
【0019】
一般的に言えば、近似化乗算器106Aは、2つのファクタ166の各々のNビットを乗算することができ、その場合、Nビットは命令セットアーキテクチャによって指定された最高精度である。しかし、近似化乗算器106Aは、2つのファクタ166の各々のNビットより少ない乗算をして、最高精度より低い精度の結果164を生成することもできる。好ましくは、乗算器は、乗算を実行するとき、ファクタ166の最下位ビットのMビットを除外し、その場合、MはNより小さい。例えば、ファクタ166の仮数が各々53ビットとすると、ファクタ166の53ビットのうち下部のNビットの乗算に通常使用されるであろう近似化乗算器のゲート204のトランジスタは、ファクタ166のうち下部のMビットが近似乗算に含まれないようにオフにされ、その場合、ビット数のMは近似ポリシーにおいて、例えば、近似制御レジスタ132において指定される。このようにして、近似化乗算器106Aは、除外ビットを乗算するのに通常使用されるであろうトランジスタをオフにすることができるので、最高精度モードよりも近似化モードにおいてより少ない電力を潜在的に使用する。好ましくは、除外されるビットの数Mは、電力ゲーティングロジック206の複雑性を低減するために、限定された数のMの値だけが近似ポリシーによって指定され得るように量子化される。
【0020】
近似化超越関数ユニット106Bは、入力オペランド166をレジスタ108から受け取り、
図1の結果164を生成する。近似化超越関数計算ユニット106Bは、多項式に基づいて入力オペランド166に対して超越関数を実行して結果164を生成する超越計算ロジック214を含む。多項式は、近似モードなどの計算ポリシー176からの選択制御入力に基づいて高次多項式212A又は低次多項式212Bのいずれかを選択する多重化216から選択される。すなわち、多重化216は、近似化モードが最高精度であるとき、高次多項式212Aを選択し、近似化モードが最高精度より低いとき、低次多項式212Bを選択する。一般的に言えば、近似化超越関数計算ユニット106Bは、次数Nの多項式を使用して、最高精度で超越関数を実行し、次数Mの多項式を使用して、その場合、MがN未満であるが、最高精度未満で超越関数を実行し、その場合、Mは近似ポリシーによって指定される。有利には、近似化モードであるとき、より低い次数の多項式を採用して超越関数計算を実行することによって、近似化超越関数計算ユニット106Bは、最高精度モードで動作するときよりも少ない電力を消費し優れた性能を出すことができる。これは、より低い次数の多項式を採用すると、より高い次数の多項式よりも乗算と加算が少なくて済むからである。
【0021】
近似化除算器106Cは、入力オペランド166をレジスタ108から受け取り、
図1の結果164を生成する。近似化除算器106Cは、除算ロジック222と反復制御ロジック224とを含む。除算ロジック222は、第1の反復の間、除算計算を入力オペランド166に対して実行して、中間結果164と中間結果164の精度の指標226とを生成する。中間結果164は、入力として除算ロジック222にフィードバックされ、精度指標226が反復制御ロジック224に提供される。その後の反復で、除算ロジック222は、現在の反復の間、除算計算を入力オペランド166と前の反復の中間結果164とに対して実行して、別の中間結果164と中間結果164の精度の指標226とを生成し、中間結果164は入力として除算ロジック222にフィードバックされ、精度指標226が反復制御ロジック224に提供される。反復制御224は、精度226を監視し、精度226が近似化ポリシー176に示される許容レベルに達した時点で反復を停止する。有利には、近似ポリシーが近似モードを示すとき、最高精度より低い精度と引き換えに、より少ない反復を実行することにより、電力消費の低減が近似化除算器106Cによって達成され得る。
【0022】
一実施形態において、近似化機能ユニット106の各々は、入力誤差162及び近似ポリシーの近似化量に基づいて、近似化機能ユニット106によって生成された結果164に関連付けられた誤差168の量を出力するルックアップテーブルを含む。好ましくは、ルックアップテーブルによって出力される誤差168の量は、それ自体、結果164に関連付けられた誤差の最大量を指定する近似である。
【0023】
一実施形態において、近似化機能ユニット106は、近似制御レジスタ132によって提供された近似ポリシーではなく、又は近似ポリシーに加えて、近似ポリシーの全部又は一部分を決定するために、近似化命令399を変換するとき、命令トランスレータ104によって生成されたマイクロ命令を復号する命令デコーダを含む。別の実施形態において、例えば、命令トランスレータ104が適当な近似化機能ユニット106に転送するために命令174を単に復号し、近似化機能ユニット106が近似ポリシーを決定するために命令174を復号する一実施形態において、命令デコーダは、近似化命令399自体を復号する。
【0024】
次に
図3を参照すると、近似命令399を例示する構成図が示される。より具体的には、近似命令は、近似プレフィックスを有する計算命令300と、近似計算命令310と、近似開始プレフィックス(start approximation prefix)を有する計算命令320と、近似開始命令(start approximation instruction)330と、近似停止プレフィックス(stop approximation prefix)を有する計算命令340と、近似停止命令(stop approximation instruction)350と、誤差クリアプレフィックス(clear error prefix)を有する計算命令360と、誤差クリア命令370と、ロードレジスタ命令380とを含む。
【0025】
近似プレフィックスを有する計算命令300は、プロセッサ100の命令セットに一般に見出されるものなどのオペコード及び他のフィールド304を含む。オペコード304は、例えば、加算、減算、乗算、除算、融合積和演算、平方根、逆数、逆数平方根、及び超越関数など、近似化機能ユニット106が計算を実行することができる最高精度すなわち最高精度モードに従うより低い精度を有する結果を生成することに影響を受けやすい、近似化機能ユニット106によって実行され得る様々な計算のいずれかを指定することができる。近似プレフィックスを有する計算命令300は、近似プレフィックス302をさらに含む。一実施形態において、近似プレフィックス302は所定の値を含み、命令バイトのストリーム内の並びにオペコード及び他のフィールド304に先行するその存在が、プロセッサ100に、指定された計算を近似化において(in an approximating manner)実行するように命令する。一実施形態において、所定の値は、x86ISAなどのISAにおいてプレフィックス値としてすでに使用されてはいない値である。一実施形態において、近似プレフィックス302の一部分は、オペコード及び他のフィールド304によって指定される計算において採用されるべき、近似量及び/又は誤差限界などの、近似ポリシー又は少なくともその一部分を指定する。別の実施形態において、近似プレフィックス302は、オペコード及び他のフィールド304によって指定される計算が近似的に実行されるべきであることを単に示し、近似ポリシーは、プロセッサ100によって、又はプロセッサ100に対して事前に伝達された近似ポリシー全体からとられ、近似ポリシーは、例えば、近似制御レジスタ132などのレジスタに記憶され得る。命令300の近似ポリシーがプレフィックス302と近似ポリシー全体との組合せから導出される他の実施形態が企図されている。
【0026】
代替実施形態において、近似計算命令310は、近似計算オペコード及び他のフィールド312を含む。近似計算オペコード値は、プロセッサ100の命令セット内の他のオペコード値とは区別可能である。すなわち、近似計算オペコード値は、通常(例えば、近似プレフィックス302などのプレフィックスがない場合)プロセッサ100に最高精度で計算を実行するように命令する他のオペコード値とは区別可能である。好ましくは、命令セットは、各タイプの計算に対して1つ、例えば、加算についてその独自の区別可能オペコード値を用いて1つ、減算についてその独自の区別可能オペコード値を用いて1つなど、複数の近似計算命令310を含む。
【0027】
近似開始プレフィックスを有する計算命令320は、プロセッサ100の命令セットに一般に見出されるものなどのオペコード及び他のフィールド324を含む。オペコード324は、様々な計算のいずれかを指定してもよく、又は非計算命令であってもよい。近似開始プレフィックスを有する計算命令320は、近似開始プレフィックス322をさらに含む。一実施形態において、近似開始プレフィックス322は所定の値を含み、命令バイトのストリーム内の並びにオペコード及び他のフィールド324に先行するその存在が、プロセッサ100に、その後の計算(もし存在する場合、命令320内に指定された計算を含む)を、近似化において計算を実行することを停止するように命令されるまで(例えば、以下に説明する命令340及び350により)、近似化において実行するように命令する。一実施形態において、所定の値は、プレフィックス値としてx86ISAなどのISAにすでに使用されてはいない値であり、本明細書に説明する他のプレフィックス(例えば、近似プレフィックス302、近似停止プレフィックス342及び誤差クリアプレフィックス362)とは区別可能である。近似開始プレフィックス322の実施形態は、近似開始プレフィックス322の一部分が近似ポリシーを指定してもよく、或いはその後の計算を近似ポリシー全体を使用して近似的に実行すべきであることを単に示してもよく、或いはこれらの組み合わせであってもよい点において、近似プレフィックス302と同様である。
【0028】
代替実施形態において、近似開始命令330は、近似開始オペコード332を含む。近似開始命令330は、プロセッサ100に、近似化において計算を実行することを停止するように命令されるまで近似化においてその後の計算を実行するように命令する。近似開始オペコード332の実施形態は、近似ポリシーの指定に関して近似プレフィックス302と同様である。近似開始オペコード332の値は、プロセッサ100の命令セット内の他のオペコード値とは区別可能である。
【0029】
近似停止プレフィックスを有する計算命令340は、プロセッサ100の命令セットに一般に見出されるものなどのオペコード及び他のフィールド344を含む。オペコード344は、様々な計算のいずれかを指定してもよく、又は非計算命令であってもよい。近似停止プレフィックスを有する計算命令340は、近似停止プレフィックス342をさらに含む。一実施形態において、近似停止プレフィックス342は所定の値を含み、命令バイトのストリーム内の並びにオペコード及び他のフィールド344に先行するその存在が、プロセッサ100に、(例えば、命令300、310、320又は330により、近似化において計算を実行するように命令されるまで、)近似化において計算(もし存在する場合、命令340で指定された計算を含む)を実行することを停止するように命令する。一実施形態において、所定の値は、プレフィックス値としてx86ISAなどのISAにすでに使用されてはいない値であり、本明細書に説明する他のプレフィックスとは区別可能である。
【0030】
代替実施形態において、近似停止命令350は近似停止オペコード352を含む。近似停止命令350は、プロセッサ100に、(近似化において計算を実行するように命令されるまで、)近似化において計算を実行することを停止するように命令する。近似停止オペコード352の値は、プロセッサ100の命令セット内の他のオペコード値とは区別可能である。一実施形態において、プロセッサ100による例外の生成がさらに、プロセッサ100に、近似化において計算を実行することを停止するように命令し、すなわち、近似モードが最高精度に設定されるようにする。
【0031】
誤差クリアプレフィックスを有する計算命令360は、プロセッサ100の命令セットに一般に見出されるものなどのオペコード及び他のフィールド364を含む。オペコード364は、様々な計算のいずれかを指定してもよい。誤差クリアプレフィックスを有する計算命令360は、プロセッサ100が計算の結果を書き込む宛先レジスタを指定するレジスタフィールド366をさらに含む。誤差クリアプレフィックスを有する計算命令360は誤差クリアプレフィックス362をさらに含む。一実施形態において、誤差クリアプレフィックス362は所定の値を含み、命令バイトのストリーム内の並びにオペコード及び他のフィールド364に先行するその存在が、プロセッサ100に、レジスタフィールド366によって指定されたレジスタ108に関連付けられた誤差109をクリアするように命令する。一実施形態において、所定の値は、プレフィックス値としてx86ISAなどISAにすでに使用されてはいない値であり、本明細書に説明する他のプレフィックスとは区別可能である。
【0032】
代替実施形態において、誤差クリア命令370は、誤差クリアオペコード372とレジスタフィールド376とを含む。誤差クリア命令370は、プロセッサ100に、レジスタフィールド376によって指定されたレジスタ108に関連付けられた誤差109をクリアするように命令する。誤差クリアオペコード372の値は、プロセッサ100の命令セット内の他のオペコード値とは区別可能である。
【0033】
ロードレジスタ及び誤差クリア命令380は、ロードレジスタオペコード382と、メモリアドレスオペランドフィールド384と、レジスタフィールド386とを含む。オペコード382は、プロセッサ100に、メモリアドレスオペランド384によって指定されたメモリロケーションからレジスタフィールド386に指定された宛先レジスタにデータをロードするように命令する。オペコード382はさらに、プロセッサ100に、レジスタフィールド386によって指定されたレジスタ108に関連付けられた誤差109をクリアするように命令する。
【0034】
一実施形態において、誤差クリア命令370は、単一のレジスタ108ではなくすべてのレジスタ108の誤差109をクリアする。例えば、レジスタフィールド376の値は、すべてのレジスタ108をクリアするように示す所定の値であり得る。同様の実施形態は、誤差クリアプレフィックスを有する計算命令360とロードレジスタ及び誤差クリア命令380とに関して企図されている。
【0035】
一実施形態において、命令トランスレータ104は、プロセッサ100が近似計算モードであるのか又は最高精度モードであるのかを示すフラグを維持する。例えば、命令トランスレータ104は、近似開始命令330又は近似開始プレフィックス320を有する計算命令に直面することに応答してフラグを設定することができ、近似停止命令350又は近似停止プレフィックスを有する計算命令340に直面することに応答してフラグをクリアすることができる。各マイクロ命令は、マイクロ命令によって指定された計算が、最高精度で又は近似において実行されるべきことを示すインジケータ(indicator)を含む。命令トランスレータ104は、アーキテクチャ命令166を1つ又は複数のマイクロ命令に変換するとき、モードフラグの現在の値に基づいてそれに応じてインジケータに追加する(populates)。或いは、300又は310などのアーキテクチャ近似計算命令の場合、命令トランスレータ104は、それぞれ、プレフィックス302又はオペコード312によりマイクロ命令のインジケータに追加する。さらに別の実施形態において、マイクロ命令のインジケータは、近似計算を指定するマイクロ命令オペコード(マイクロアーキテクチャ命令セット内で区別可能である)を含む。
【0036】
次に
図4を参照すると、一実施形態による、
図1のプロセッサ100の動作を例示する流れ図が示される。流れはブロック402から開始する。
【0037】
ブロック402では、プロセッサ100が、アーキテクチャ命令166を復号する。流れは判定ブロック404に進む。
【0038】
判定ブロック404では、プロセッサ100は、命令166が近似開始命令であるのかどうか、例えば、
図3の320又は330であるのかどうかを決定する。そうである場合、流れはブロック406に進み、その他の場合、流れは判定ブロック414に進む。
【0039】
判定ブロック406では、プロセッサ100は、近似停止命令、例えば、
図3の340又は350に直面するまで、近似ポリシー(例えば、近似開始命令において指定されたもの、近似制御レジスタ132において指定された近似ポリシー、又はこれらの組合せ)により、その後の計算を実行する。流れはブロック406で終了する。
【0040】
判定ブロック414では、プロセッサ100は、命令166が近似停止命令であるかどうか、例えば、
図3の340又は350であるかどうかを決定する。そうである場合は、流れはブロック416に進む。その他の場合は、流れは判定ブロック424に進む。
【0041】
ブロック416では、プロセッサ100は、近似において計算を実行することを停止し、代わりに、それらを最高精度で実行する(プロセッサ100が近似開始命令、例えば、
図3の320又は330又は近似計算命令300又は310に直面するまで)。流れはブロック416で終了する。
【0042】
判定ブロック424では、プロセッサ100は、命令166が誤差クリア命令であるかどうか、例えば、
図3の360又は370又は380であるかどうかを決定する。そうである場合、流れはブロック426に進む。その他の場合、流れは判定ブロック434に進む。
【0043】
ブロック426では、プロセッサ100は、レジスタフィールド366/376/386で指定されたレジスタ108に関連付けられた誤差109をクリアする。流れはブロック426で終了する。
【0044】
判定ブロック434では、プロセッサ100は、命令166が計算命令166であるかどうかを決定する。そうである場合、流れはブロック452に進む。その他の場合、流れはブロック446に進む。
【0045】
ブロック446では、プロセッサ100は、他の命令166、すなわち、計算命令399以外の命令セットアーキテクチャの命令を実行する。流れはブロック446で終了する。
【0046】
ブロック452では、関連する近似化機能ユニット106が計算命令166を受け取り、それを復号する。流れは判定ブロック454に進む。
【0047】
判定ブロック454では、近似化機能ユニット106が、近似ポリシーが近似化であるのか又は最高精度であるのかを決定する。近似化である場合、流れはブロック456に進む。最高精度である場合、流れはブロック458に進む。
【0048】
ブロック456では、近似化機能ユニット106が、近似化において、例えば、
図2に関して上記のようになど本明細書で説明するように、計算を実行する。流れはブロック456で終了する。
【0049】
ブロック458では、近似化機能ユニット106が非近似化において(in a non-approximating manner)、すなわち、最高精度で、計算を実行する。流れはブロック458で終了する。
【0050】
次に
図5を参照すると、コンピュータシステム内の
図1のプロセッサ100の動作を例示する流れ図が示される。流れはブロック502から開始する。
【0051】
ブロック502では、プロセッサ100上で実行されるプログラム(例えば、オペレーティングシステム又は他のプログラム)が計算を実行するためにプロセッサ100によって使用される近似ポリシーを決定する。好ましくは、近似ポリシーは、計算自体における容認可能な誤差限界及び近似量すなわち、各近似化機能ユニット106が各々の近似された計算に採用すべき近似の量を指定する。プログラムは、現在のシステム構成に少なくとも部分的に基づいて、近似ポリシーを決定する。例えば、プログラムは、コンピュータシステムがバッテリ電力で、又は壁面AC電力などの実際上無制限の電源で動作しているかどうかを検知することができる。さらに、プログラムは、ディスプレイサイズやスピーカ品質など、コンピュータシステムのハードウェア構成を検知することができる。プログラムは、オーディオ/ビデオ関連の計算などの特定の計算を最高精度ではなく近似的に実行することの望ましさ及び/又は受容性を決定する際に、上記のようなファクタを考慮することができる。流れはブロック504に進む。
【0052】
ブロック504では、プログラムは、近似ポリシーをプロセッサ100に提供する。一実施形態において、プログラムは、近似ポリシーを近似制御レジスタ132に書き込む。一実施形態において、プログラムは、x86WRMSR命令を実行して、プロセッサ100に新たな近似ポリシーを提供する。流れはブロック504で終了する。
【0053】
好ましくは、システム構成が変更になるとき、例えば、システムが壁面コンセントにプラグが差し込まれ又は壁面コンセントからプラグが抜かれ、或いは異なるサイズの外部モニタにプラグが差し込まれるとき、プログラムは構成の変更を検知し、ブロック502において近似ポリシーを変更し、ブロック504において新たな近似ポリシーをプロセッサ100に伝達する。
【0054】
次に
図6を参照すると、3つの異なるコンピューティングシステムを例示する構成図が示される。システムの各々は、
図1の近似計算対応プロセッサ100と、ディスプレイ606と、データを含むバッファ604とを含み、データにより、プロセッサ100が、例えば、
図3の近似計算命令399を使用して計算を実行して、ディスプレイ606上に表示されるべきピクセルをレンダリングする。
【0055】
第1のシステムはデスクトップコンピュータ602Aであり、デスクトップコンピュータ602Aは、大型ディスプレイ606A(例えば、24インチ以上)を含み、本質的に無制限の電源、例えば、壁面コンセントから電力を受ける。第2のシステムはラップトップコンピュータ602Bであり、ラップトップコンピュータ602Bは、中型サイズのディスプレイ606B(例えば、15インチ)を含み、ユーザの選択に依存して壁面コンセントからかバッテリからのいずれかで電力を受ける。第3のシステムはスマートフォンや卓上コンピュータなどのハンドヘルドコンピュータ602Cであり、ハンドヘルドコンピュータ602Cは、相対的に小型のディスプレイ(例えば、4.8インチ)606Cを含み、その電力を主にバッテリから受ける。図示する例では、ディスプレイはすべて、容認され/受容され得る近似の量が主にディスプレイサイズに基づくように、近似的に同じ解像度を有すると仮定されるが、近似計算の量は、ディスプレイの解像度のばらつきにより変動することもあることが理解されるべきである。集合的にシステム602と呼ばれる3つのシステムは、近似計算対応プロセッサ100を含むことができるシステムを代表することが意図されており、本明細書に説明する近似計算の実施形態の様々な用途を例示する比較のために異なる特徴と共に提供される。しかし、他の実施形態が企図されており、近似計算対応プロセッサ100の用途は、図示する実施形態に限定されない。
【0056】
第1のシステム602Aは、ピクセルレンダリングの近似によって引き起こされる視覚歪みが大型ディスプレイ602A上では容易に明らかである可能性があり、電源が近似計算に起因する電力の節減の必要をより必要なくする可能性があるので、近似を容認せず、高精度を要求する傾向がある。
【0057】
第2のシステム602Bは、特にバッテリ電力で動作するとき、適量の近似によって引き起こされる、より大型の同様の解像度を有するディスプレイ上より少ないが明らかであり得る視覚歪みが、バッテリ寿命の利点との許容可能なトレードオフであり得るので、適量の精度を要求し、適量の近似を容認する傾向がある。他方、システム602Bが壁面の電源にプラグが差し込まれるとき、好ましい近似ポリシーは、第1のシステム602Aの近似ポリシーと同様であり得る。
【0058】
第3のシステム602Cは、名ばかりの(nominal)ズームレベルにおける小型のディスプレイ606C上では近似による視覚歪みが明らかでない又は大いに明らかでない可能性があるので、最も低い精度を要求する傾向があり、バッテリ電力を節約する必要が相対的に大きい。
【0059】
次に
図7を参照すると、
図6のシステム602の動作を例示する流れ図が示される。流れはブロック702から開始する。
【0060】
ブロック702では、システム602がパワーオン又はリセットされるときなどに、プログラムがシステム602におけるディスプレイ606のタイプを検知する。或いは、プログラムは、例えば、外部モニタが、ラップトップ602Bにプラグが差し込まれ、或いはラップトップ602Bからプラグが抜かれるとき、ディスプレイ606の変化を検知することができる。さらに、プログラムは、壁面コンセントにプラグを差し込む又は壁面コンセントからプラグを抜くなどの電源の変化を検知することができる。流れはブロック502に進む。
【0061】
ブロック502では、
図5に関して上に説明したように、プログラムは、システム構成に基づいて近似ポリシーを決定する。流れはブロック504に進む。
【0062】
ブロック504では、プログラムは、
図5に関して上に説明したように、プロセッサ100に近似ポリシーを提供する。流れはブロック708に進む。
【0063】
ブロック708では、プロセッサ100は、例えば、
図4及び
図10〜12に関して本明細書に説明するように、受け取った近似ポリシーに基づいて計算を実行する。流れはブロック708で終了する。
【0064】
或いは、プロセッサ100上で実行されるソフトウェア(例えば、グラフィックソフトウェア)は、異なる近似ポリシーに関連付けられた(例えば、
図6の異なるシステム構成に関連付けられた異なる近似ポリシーの各々の)コードの異なるルーチン(計算命令399を含む)と、現在のシステム構成に基づく適当なルーチンへのソフトウェア分岐とを含む。
【0065】
次に
図8を参照すると、本明細書に説明するように、近似計算認識プロセッサ100上で実行されるソフトウェアの開発のためのプロセスを例示する流れ図が示される。流れはブロック802から開始する。
【0066】
ブロック802では、プログラマが、C言語などの従来のプログラミング言語を用いて、グラフィックソフトウェアなどのプログラムを開発し、近似ディレクティブを用いて近似認識コンパイラを呼び出す。近似認識コンパイラは、対象プロセッサ100の近似計算能力、より具体的には、プロセッサ100によってサポートされる近似命令399のセットを知っている。近似ディレクティブは、コマンドラインのオプションであってもよく、又は、コンパイラによって生成されるオブジェクトコードが近似計算を実行する近似命令399を含むべきであることをコンパイラに対して伝達する他の方法でもよい。好ましくは、近似認識コンパイラは、プログラミング言語によって指定された計算が近似計算を容認するところのルーチンだけコンパイルするように近似ディレクティブを用いて呼び出され、一方、近似計算を容認しない他のルーチンは、近似ディレクティブなしでコンパイルされる。それぞれの方法によって生成されたオブジェクトファイルは、実行可能プログラムに共にリンクされる。近似容認ルーチンは、相対的に専用ルーチンになる傾向があり得る。例えば、ピクセルレンダリングルーチンは、近似計算の影響を受けやすい浮動小数点データにおける計算を含むことがあり、それに対して近似認識コンパイラが近似化命令399を生成するが、一方、ループ制御変数は、整数データでよく、近似認識コンパイラは、例えば、ループ制御変数を更新する計算を実行するために近似化命令399を生成しない。流れはブロック804に進む。
【0067】
804では、近似認識コンパイラは、プログラムをコンパイルし、プロセッサ100にオブジェクトコードとして近似計算を実行するように命令する近似命令399を含む機械語命令を生成する。一実施形態において、コンパイラによって生成される機械コードは、近似ディレクティブの使用なしでその他の方法で生成されるであろう機械コードと同様であるが、命令のうちいくつかが、
図3の近似プレフィックス302、近似開始プレフィックス322、近似停止プレフィックス342、又は誤差クリアプレフィックス362などの近似関連プレフィックスによって先行される。一実施形態において、近似認識コンパイラは、近似ディレクティブがない場合にその他の方法で生成するであろう通常計算命令の代わりに近似計算命令310を生成する。一実施形態において、近似認識コンパイラは、開始/停止近似命令330/350及び/又は開始/停止近似プレフィックス322/342により区切られた通常命令シーケンスを生成する。一実施形態において、近似認識コンパイラは、上に説明したように、その各々が異なる近似ポリシーを採用した複数のコードルーチンを生成し、コンパイラは、プログラムがプログラム自体で決定することができ、或いはプログラムがオペレーティングシステムから取得することができる現在のシステム構成に基づいて、適当なサブルーチンをコールするコードを生成する。流れはブロック804で終了する。
【0068】
次に
図9を参照すると、本明細書に説明するように、近似計算認識プロセッサ100上で実行されるソフトウェアの開発のための代替プロセスを例示する流れ図が示される。流れはブロック902から開始する。
【0069】
ブロック902では、プログラマがブロック802における説明と同様のプログラムを開発し、近似認識コンパイラを呼び出す。しかし、プログラミング言語及びコンパイラは、近似ディレクティブ及び/又は近似容認データタイプをサポートする。例えば、C言語の方言(dialect)が、上記のようなディレクティブ及び/又はデータタイプをサポートすることができる。近似ディレクティブには、プログラマが選択的プログラム変数を近似容認データとしてマークするためにソースコードに含めることができるコンパイラディレクティブ(例えば、C言語の#include又は#defineディレクティブと同様の)を含むことができる。同様に、プログラマは、近似容認データタイプ変数として宣言されたプログラム変数をソースコードに含めることができ、それに対して、コンパイラは近似計算を変数に対して実行させる命令399を生成することを知っている。流れはブロック904に進む。
【0070】
ブロック904では、近似認識コンパイラは、プログラムをコンパイルして、ブロック804に関して上に説明したやり方と同様の、ただしコンパイルされるソースコードに含まれる近似ディレクティブ及び/又は近似容認データタイプに応答した、オブジェクトコードを生成する。流れはブロック904で終了する。
【0071】
次に
図10を参照すると、近似計算を実行するプログラムを実行する
図1のプロセッサ100の動作を例示する流れ図が示される。流れはブロック1002から開始する。
【0072】
ブロック1002では、プログラムは、上に説明したやり方と同様に、近似ポリシーをプロセッサ100に提供する。或いは、プログラム自体が、近似ポリシーを提供する(及び、終了と同時に現在の近似ポリシーを復元する)。さらに、以下に説明するように、誤差閾値を超えるという事象において実行され得る、近似計算を実行しない代替コードパスが指定される。流れはブロック1004に進む。
【0073】
ブロック1004では、プロセッサ100は、その状態を
図1のスナップショットストレージ134に書き込むことによって、その現在の状態のスナップショットを撮る。一実施形態において、プロセッサ100は、プログラムによって実行される命令に直面することに応答してスナップショットを撮る。一実施形態において、命令は、x86WRMSR命令を含む。一実施形態において、スナップショットを撮ることは、キャッシュラインのクリーンコピーがキャッシュ138に存在するように、プログラムの近似計算のセットによってタッチされるであろうメモリのダーティキャッシュラインに書き戻すことと、次いで、上記キャッシュラインを、近似計算の対象であり得ることを示すように特別としてマークすることとを含む。キャッシュラインは、特別としてマークされるので、近似計算の結果によって修正されるとき、少なくとも、プログラムが許容可能な誤差限界を超えることなく完了できることが検証されるまでは、メモリに書き戻されない。したがって、その後、プロセッサ100が誤差限界を超えたと決定する場合(例えば、ブロック1012において)、特別なキャッシュラインは無効にされ、非特別としてマークされ、その後の計算の非近似セットについて、キャッシュラインの近似前の計算状態がメモリ内で利用可能となる(例えば、ブロック1014において)。そのような実施形態では、プログラマは、特別なキャッシュラインがキャッシュ138からあふれ出てはならないことを認識しなければならない。そうでないと、プロセッサ100は、そのような状態を誤差限界を超えるとして取り扱う。好ましくは、マルチコアプロセッサの実施形態では、キャッシュ138は近似計算のセットを実行するコアに対してローカルでなければならない。流れはブロック1006に進む。
【0074】
ブロック1006では、プロセッサ100、特に近似化機能ユニット106は、近似ポリシーに基づいて、プログラム命令によって指定された近似計算を実行して、近似結果164を生成する。近似化機能ユニット106は、上に説明したように、入力オペランドの誤差値162と近似計算によって導入される誤差とに基づいて、結果164の誤差168も近似化する。流れはブロック1008に進む。
【0075】
ブロック1008では、近似化機能ユニット106は、累積誤差168を、近似結果164を受け取る宛先レジスタ108に関連付けられた誤差ストレージ109に書き込む。流れは判定ブロック1012に進む。
【0076】
判定ブロック1012では、プロセッサ100は、ブロック1008において生成された誤差168が近似ポリシーの誤差限界を超えるかどうかを決定する。超える場合、流れはブロック1014に進む。その他の場合、流れはブロック1006に戻って、プログラムの別の近似計算を実行する。
【0077】
ブロック1014では、プロセッサ100は、ブロック1004においてスナップショットを撮った後、プロセッサ100の状態をスナップショットストレージ134に記憶されたスナップショットに復元し、誤差限界を超えた、近似において実行された計算を伴ったプログラムを、近似なしで、又は少なくともその一部分を再実行する。ブロック1014の動作の実施形態は、
図11及び12に関して以下に説明される。流れはブロック1014で終了する。
【0078】
次に
図11を参照すると、一実施形態による、
図10のブロック1014の動作をより詳細に例示する流れ図が示される。流れはブロック1102から開始する。
【0079】
ブロック1102では、制御が、判定ブロック1012において誤差限界を超えたことを検知したことに応答して生成されるマイクロ例外(すなわち、非アーキテクチャ例外)を介して、プロセッサ100のマイクロコード136に移される。マイクロコード136は、
図10に関して上に説明したように、プロセッサ100の状態をスナップショットに復元する。さらに、マイクロコード136は、アーキテクチャ例外を生成する。流れはブロック1104に進む。
【0080】
ブロック1104では、アーキテクチャ例外ハンドラが、
図10のブロック1002において指定された代替コードパスに制御を移し、したがって、近似計算のセットが最高精度で実行される。一実施形態において、例外ハンドラは、近似を無効にするように近似ポリシーを設定し(すなわち、近似ポリシーを最高精度に設定し)、次いで、事前に近似が有効にされていたときに実行された同じコードにジャンプし、これが今度は、近似が無効にされて実行されることになる。流れはブロック1104で終了する。
【0081】
次に
図12を参照すると、代替実施形態による、
図10のブロック1014の動作をより詳細に例示する流れ図が示される。流れはブロック1202から開始する。
【0082】
ブロック1202では、制御が、誤差限界を超えたことを検知したことに応答して生成されるマイクロ例外を介して、プロセッサ100のマイクロコード136に移され、マイクロコード136は、プロセッサ100の状態をスナップショットに復元する。流れはブロック1204に進む。
【0083】
ブロック1204では、マイクロコード136は、近似ポリシーを最高精度に設定する(例えば、近似制御レジスタ132に書き込む)。マイクロコード136はさらに、すべてのレジスタ108に関連付けられた誤差値109をクリアする。マイクロコード136はさらに、例えば、ブロック1004においてスナップショットを撮った後の時点からの、プログラムの再実行を引き起こす。一実施形態において、マイクロコード136は、スナップショットストレージ134に記憶された命令アドレスからプログラムを再実行する。流れはブロック1204で終了する。
【0084】
近似計算がオーディオ及びビデオの目的のために実行される実施形態を説明してきたが、近似計算がコンピュータゲーム物理計算に使用されるセンサ計算などの他の目的のために実行される他の実施形態が企図されている。例えば、上記計算に使用されるアナログ/デジタル変換値は、16ビットまで正確であるだけでもよく、したがって、例えば、53ビットの正確さを使用するゲーム物理分析は不必要である。
【0085】
本発明の様々な実施形態を本明細書に説明してきたが、それらは限定によってではなく、例によって提示されていることを理解されたい。本発明の範囲を逸脱することなく、形態及び詳細の様々な変更をそれらにおいて加えることができることが、当該コンピュータ業界の当業者には明らかであろう。例えば、ソフトウェアは、例えば、本明細書に説明する装置及び方法の機能、製作、モデリング、シミュレーション、説明、及び/又は試験を有効にすることができる。これは、汎用プログラミング言語(例えば、C、C++)、Verilog HDL及びVHDLなどを含むハードウェア記述言語(HDL)、又は他の利用可能なプログラムの使用により達成することができる。そのようなソフトウェアは、磁気テープ、半導体、磁気ディスク、若しくは光ディスク(例えば、CD−ROM、DVD−ROMなど)、ネットワーク、ワイヤライン、ワイヤレス、又は他の通信媒体などの、任意の周知のコンピュータ使用可能媒体に配置することができる。本明細書に説明する装置及び方法の実施形態は、プロセッサコアなどの半導体知的財産コア(例えば、HDLにおいて具現化された又は指定された)に含め、集積回路の生産においてハードウェアに変換することができる。さらに、本明細書に説明する装置及び方法は、ハードウェアとソフトウェアとの組合せとして具現化することができる。したがって、本発明は、本明細書に説明する例示的な実施形態のいずれかによって限定されるべきではなく、以下の特許請求の範囲及びその均等物によってのみ定義されるべきである。具体的には、本発明は、汎用コンピュータにおいて使用され得るプロセッサデバイス内で実現することができる。最後に、当業者は、開示された概念及び具体的な実施形態を、添付の特許請求の範囲によって定義される本発明の範囲から逸脱することなく本発明の同じ目的を実行する他の構造を設計し又は修正するための基礎として、容易に使用することができることを理解するべきである。