(57)【特許請求の範囲】
【請求項１】
プロセッサであって：
後続の計算を近似化で実行するよう当該プロセッサに指示する命令を復号するように構成されるデコーダと；
オペランドを保持するように構成されるアーキテクチャレジスタと；
前記後続の計算の実行に先行して、当該プロセッサの状態のスナップショットを受け取るように構成されるスナップショットストレージと；
各アーキテクチャレジスタに関連付けられる誤差ストレージであって、該アーキテクチャレジスタに格納される結果の誤差の量を示すように構成される、誤差ストレージと；
前記アーキテクチャレジスタから１つ以上のオペランドと、前記関連付けられる誤差ストレージから誤差の量を受け取り、前記命令に応答して前記近似化で前記１つ以上のオペランドに対して後続の計算を実行し、近似計算に先行して前記１つ以上のオペランドに関連付けられる誤差の量を、前記近似計算を実行することによって導入される誤差の量とともに累積し、前記結果及び前記累積された誤差の量を、宛先のアーキテクチャレジスタ及びその関連付けられる誤差ストレージに格納するように構成され、前記プロセッサの状態は、前記累積された誤差の量が誤差限界を超えるときに前記スナップショットストレージから前記スナップショットへ復元される、機能ユニットと；
を具備する、プロセッサ。
【請求項２】
前記命令は、前記後続の計算を前記近似化で実行するよう当該プロセッサに指示するプレフィックスを備える、
請求項１に記載のプロセッサ。
【請求項３】
前記プレフィックスは、当該プロセッサが前記後続の計算を実行する最高精度よりも低い精度を指定する、
請求項２に記載のプロセッサ。
【請求項４】
前記デコーダは更に、第２の後続の計算を最高精度で実行するよう当該プロセッサに指示する第２の命令を復号するよう構成され、
前記機能ユニットは、前記第２の命令に応答して前記第２の後続の計算を前記最高精度で実行するように構成される、
請求項１に記載のプロセッサ。
【請求項５】
前記第２の命令は、前記第２の後続の計算を前記最高精度で実行するよう当該プロセッサに指示するプレフィックスを備える、
請求項４に記載のプロセッサ。
【請求項６】
当該プロセッサについて近似ポリシーを指定する情報を保持するように構成される近似制御レジスタであって、前記近似ポリシーは、複数の命令実行にわたる最大許容累積誤差量の指定を含むものである、前記近似制御レジスタを更に備え、
当該プロセッサは、前記誤差ストレージ内に格納される誤差の量が、前記指定された最大許容累積誤差量を超えるときに、例外を生成するように構成される、
請求項１に記載のプロセッサ。
【請求項７】
前記近似ポリシーは更に、前記機能ユニットが各々の近似された計算で採用すべき近似の量を指定し、前記機能ユニットは、前記後続の計算が前記近似の量と前記最大許容累積誤差量との双方によって制限されるように、前記近似の量に基づいてその近似を調整するように構成される、
請求項６に記載のプロセッサ。
【請求項８】
当該プロセッサは現在のシステム構成を決定し、該現在のシステム構成に基づいて近似ポリシーを設定するように構成される、
請求項６に記載のプロセッサ。
【請求項９】
前記現在のシステム構成は、モニタ解像度を含み、当該プロセッサは、前記モニタ解像度を少なくとも用いて近似ポリシーを設定するように構成される、
請求項８に記載のプロセッサ。
【請求項１０】
前記現在のシステム構成は、スピーカ品質を含み、当該プロセッサは、比較的低品質のスピーカでは、比較的高品質のスピーカの場合よりも、オーディオ関連の計算において相対的により多くの誤差の量を容認するという近似ポリシーを設定するように構成される、
請求項８に記載のプロセッサ。
【請求項１１】
当該プロセッサは、前記現在のシステム構成における変化を検出し、前記近似ポリシーを修正するように構成される、
請求項８に記載のプロセッサ。
【請求項１２】
前記機能ユニットは、入力オペランドに対して超越関数を実行して、多項式に基づいて結果を生成するように構成され、前記機能ユニットは、最大精度の計算を実行するように指示された場合、第１の多項式を選択し、近似計算を実行するように指示された場合、相対的に低い次数の第２の多項式を選択するように構成される、
請求項１に記載のプロセッサ。
【請求項１３】
前記機能ユニットは、除算ロジック及び反復制御ロジックを有するように構成される除算器であり、
前記除算ロジックは、入力オペランドに対して反復除算計算を実行して、複数の反復の各々の間に中間結果と該中間結果の精度の指標とを生成し、前記中間結果を当該除算ロジックへの入力として返すように構成され、
前記反復制御ロジックは、精度が近似ポリシーで指定されたレベルに到達すると、前記の反復を終了するように構成される、
請求項１に記載のプロセッサ。
【請求項１４】
プロセッサによって実行される方法であって、当該方法は：
前記プロセッサによって、後続の計算を近似化で実行するよう前記プロセッサに指示する命令を復号するステップと；
オペランドを前記プロセッサのアーキテクチャレジスタに格納するステップと；
スナップショットストレージにおいて、前記後続の計算の実行に先行して、前記プロセッサの状態のスナップショットを受け取るステップと；
各オペランドに関連付けられる誤差の量とともに、１つ以上のオペランドを前記プロセッサの機能ユニットに提供するステップであって、前記誤差の量は、各アーキテクチャレジスタに関連付けられる誤差ストレージに格納される、ステップと；
前記命令の復号に応答して、前記機能ユニットによって、前記後続の計算を前記近似化で実行するステップと；
近似計算に先行して前記１つ以上のオペランドに関連付けられる誤差の量を、前記近似計算を実行することによって導入される誤差の量とともに累積するステップと；
結果及び前記累積された誤差の量を、宛先レジスタ及びその関連付けられる誤差ストレージに格納するステップと；
前記累積された誤差の量が誤差限界を超えるときに前記プロセッサの状態を前記スナップショットストレージから前記スナップショットに復元するステップと；
を具備する、方法。
【請求項１５】
前記命令は、前記後続の計算を前記近似化で実行するよう前記プロセッサに指示するプレフィックスを備える、
請求項１４に記載の方法。
【請求項１６】
前記プレフィックスは、前記プロセッサが前記後続の計算を実行する最高精度よりも低い精度を指定する、
請求項１５に記載の方法。
【請求項１７】
前記プロセッサによって、第２の後続の計算を最高精度で実行するよう前記プロセッサに指示する第２の命令を復号するステップと、
前記第２の命令の復号に応答して、前記プロセッサによって、前記第２の後続の計算を前記最高精度で実行するステップと、
を更に備える、請求項１４に記載の方法。
【請求項１８】
前記第２の命令は、前記第２の後続の計算を前記最高精度で実行するよう前記プロセッサに指示するプレフィックスを備える、
請求項１７に記載の方法。
【請求項１９】
前記プロセッサについて近似ポリシーを指定する情報を近似制御レジスタに格納するステップであって、前記近似ポリシーは、複数の命令実行にわたる最大許容累積誤差量の指定を含む、ステップと、
前記誤差ストレージ内に格納される前記誤差の量が、前記指定された最大許容累積誤差量を超えるときに例外を生成するステップと、
を更に備える、請求項１４に記載の方法。
【請求項２０】
現在のシステム構成を決定し、該現在のシステム構成に基づいて近似ポリシーを設定するステップ、
を更に備える、請求項１９に記載の方法。
【請求項２１】
前記現在のシステム構成は、モニタ解像度を含み、当該方法は、前記モニタ解像度を少なくとも用いて近似ポリシーを設定するステップを更に備える、
請求項２０に記載の方法。
【請求項２２】
前記現在のシステム構成は、スピーカ品質を含み、当該方法は、比較的低品質のスピーカでは、比較的高品質のスピーカの場合よりも、オーディオ関連の計算において相対的により多くの誤差の量を容認するという近似ポリシーを設定するステップを更に備える、
請求項２０に記載の方法。
【請求項２３】
前記現在のシステム構成における変化を検出し、前記近似ポリシーを修正するステップ、
を更に備える、請求項２０に記載の方法。
【請求項２４】
超越関数に関して最大精度の計算を実行するように指示された場合、第１の多項式を選択し、超越関数に関して近似計算を実行するように指示された場合、相対的に低い次数の第２の多項式を選択するステップと、
前記機能ユニットによって、入力オペランドに対して超越関数を実行して、前記選択された多項式に基づいて結果を生成するステップと、
を更に備える、請求項１４に記載の方法。
【請求項２５】
前記機能ユニットによって、入力オペランドに対して反復除算計算を実行して、複数の反復の各々の間に中間結果と該中間結果の精度の指標とを生成し、前記中間結果を除算ロジックへの入力として返すステップと、
精度が近似ポリシーで指定されたレベルに到達すると、前記の反復を終了するステップと、
を更に備える、請求項１４に記載の方法。
【発明の詳細な説明】
【背景技術】
【０００１】
近似計算の領域には相当量の理論的研究があった。近似計算は、精度の潜在的低減と引き換えに電力消費を低減するやり方で計算を実行しようとする。近似計算は、学究的世界の人気のある話題であったが、商業的に実現可能なプロセッサで近似計算をどのように使用するかに関しては、ほとんど成果がなかった。
【０００２】
関連出願の相互参照
本出願は、２０１４年１０月２３日に出願した米国非仮特許出願第１４／５２２，５２０号の優先権を主張し、該出願は、２０１４年２月１０日に出願した「ＰＲＯＣＥＳＳＯＲ  ＴＨＡＴ  ＰＥＲＦＯＲＭＳ  ＡＰＰＲＯＸＩＭＡＴＥ  ＣＯＭＰＵＴＩＮＧ  ＩＮＳＴＲＵＣＴＩＯＮＳ；ＰＲＯＣＥＳＳＯＲ  ＴＨＡＴ  ＲＥＣＯＶＥＲＳ  ＦＲＯＭ  ＥＸＣＥＳＳＩＶＥ  ＡＰＰＲＯＸＩＭＡＴＥ  ＣＯＭＰＵＴＩＮＧ  ＥＲＲＯＲ；ＰＲＯＣＥＳＳＯＲ  ＷＩＴＨ  ＡＰＰＲＯＸＩＭＡＴＥ  ＣＯＭＰＵＴＩＮＧ  ＦＵＮＣＴＩＯＮＡＬ  ＵＮＩＴ」という名称の米国仮特許出願第６１／９３７，７４１号に基づいて優先権を主張し、参照によりその全体が本明細書に組み込まれている。
【発明の概要】
【０００３】
一態様において、本発明はプロセッサを提供する。プロセッサは、計算のセットを近似化（approximate  manner）において実行する前にプロセッサの状態のスナップショットを受け取るように構成されたストレージを含む。プロセッサは、計算のセットが近似化において実行される間、累積された誤差の量を示すインジケータをさらに含む。プロセッサは、累積された誤差の量が誤差限界を超えたことを検知するとき、プロセッサの状態をストレージからスナップショットに復元するように構成される。
【０００４】
別の態様において、本発明は、プロセッサ上での動作の方法を提供する。方法は、計算のセットを近似化において実行する前にプロセッサの状態のスナップショットを撮るステップと、計算のセットが近似化において実行される間、累積された誤差の量のインジケータを決定するステップと、プロセッサが、累積された誤差の量が誤差限界を超えたことを検知するとき、プロセッサの状態をスナップショットに復元するステップとを含む。
【０００５】
さらに別の態様において、本発明は、コンピューティングデバイスでの使用のための少なくとも１つの非一時的コンピュータ使用可能媒体に符号化されたコンピュータプログラム製品を提供し、該コンピュータプログラム製品は、プロセッサを指定するために前記媒体に具現化されたコンピュータ使用可能プログラムコードを備える。コンピュータ使用可能プログラムコードは、計算のセットを近似化において実行する前にプロセッサの状態のスナップショットを受け取るように構成されたストレージを指定する第１のプログラムコードを含む。コンピュータ使用可能プログラムコードは、計算のセットが近似化において実行される間、累積された誤差の量を示すインジケータを指定する第２のプログラムコードをさらに含む。プロセッサは、累積された誤差の量が誤差限界を超えたことを検知するとき、プロセッサの状態をストレージからスナップショットに復元するように構成される。
【図面の簡単な説明】
【０００６】
【図１】プロセッサの一実施形態を示す構成図である。
【図２】図１の近似化機能ユニットの３つの実施形態を示す構成図である。
【図３】近似命令を例示する構成図である。
【図４Ａ】一実施形態による、図１のプロセッサの動作を例示する流れ図である。
【図４Ｂ】一実施形態による、図１のプロセッサの動作を例示する流れ図である。
【図５】コンピュータシステム内の図１のプロセッサの動作を例示する流れ図である。
【図６】３つの異なるコンピューティングシステムを例示する構成図である。
【図７】図６のシステムの動作を例示する流れ図である。
【図８】近似計算認識プロセッサ上で実行されるソフトウェアの開発のためのプロセスを例示する流れ図である。
【図９】近似計算認識プロセッサ上で実行されるソフトウェアの開発のための代替プロセスを例示する流れ図である。
【図１０】近似計算を実行するプログラムを実行する図１のプロセッサの動作を例示する流れ図である。
【図１１】一実施形態による、図１０のブロック１０１４の動作をより詳細に例示する流れ図である。
【図１２】代替実施形態による、図１０のブロック１０１４の動作をより詳細に示す流れ図である。
【発明を実施するための形態】
【０００７】
プロセッサが近似計算を実行する実施形態を説明する。近似計算が行われるのは、プロセッサの命令セットアーキテクチャによって指定することができる最高精度より低い程度の精度で計算が実行されるときである。
【０００８】
次に図１を参照すると、プロセッサ１００の一実施形態を例示する構成図が示される。プロセッサ１００は、中央処理装置（ＣＰＵ）又はグラフィック処理装置（ＧＰＵ）など、記憶された命令を実行するプログラマブルデータプロセッサを備える。プロセッサ１００は、命令キャッシュ１０２と、命令キャッシュ１０２に結合された命令トランスレータ１０４と、命令トランスレータ１０４からマイクロ命令を受け取るように結合された１つ又は複数の近似化機能ユニット１０６と、命令オペランド１６６を近似化機能ユニット１０６に提供するように結合されたアーキテクチャレジスタ１０８と、近似化機能ユニット１０６に結合された近似制御レジスタ１３２と、近似化機能ユニット１０６に結合されたデータキャッシュメモリ１３８と、近似化機能ユニット１０６に結合されたスナップショットストレージ１３４とを含む。プロセッサ１００は、他のユニットを含むこともでき、例えば、リネームユニット、命令スケジューラ及び／又は予約ステーションを命令トランスレータ１０４と近似化機能ユニット１０６との間に採用することができ、リオーダバッファをアウトオブオーダ命令実行に対応するように採用することができる
【０００９】
命令キャッシュ１０２は、メモリから取り出され、プロセッサ１００によって実行されるアーキテクチャ命令１７４をキャッシュする。アーキテクチャ命令１７４は、図３に関して説明する近似計算命令３９９の実施形態などの近似計算命令を含むことができる。近似計算命令３９９は、プロセッサ１００の近似計算ポリシー、すなわち、近似化機能ユニット１０６が最高度の精度で計算を実行するのか又は最高度より低い精度及び最高度より低い程度で計算を実行するのかを制御する。近似計算命令３９９は、本明細書に説明するように、プロセッサ１００の汎用レジスタの各々に関連付けられた誤差（error）量のクリア（clearing）も制御する。好ましくは、プロセッサ１００は、近似化をしない他の機能ユニットを含む。一実施形態において、アーキテクチャ命令１７４は、本明細書に説明する近似計算命令３９９の実施形態を含むように修正されたｘ８６命令セットアーキテクチャ（ＩＳＡ）に実質的に従う。プロセッサ１００のＩＳＡがｘ８６ＩＳＡ以外である他の実施形態が企図されている。
【００１０】
命令トランスレータ１０４は、命令キャッシュ１０２からアーキテクチャ命令１７４を受け取る。命令トランスレータ１０４は、アーキテクチャ命令１７４を復号し、それらをマイクロ命令に変換する命令デコーダを含む。マイクロ命令は、アーキテクチャ命令セットとは異なる命令セット、すなわち、マイクロアーキテクチャ命令セットによって定義される。マイクロ命令は、アーキテクチャ命令１７４を実現する。
【００１１】
好ましくは、命令トランスレータ１０４は、プロセッサ１００の読取り専用メモリに好ましくは記憶された、マイクロコード命令を含むマイクロコード１３６をさらに含む。一実施形態において、マイクロコード命令はマイクロ命令である。代替実施形態において、マイクロコード命令は、マイクロトランスレータによってマイクロ命令に変換される。マイクロコード１３６は、命令トランスレータ１０４のプログラマブルロジックアレイによって直接マイクロ命令に変換されない、プロセッサ１００のＩＳＡのアーキテクチャ命令１７４のサブセットを実現する。さらに、マイクロコード１３６は、一実施形態により、近似計算によって生成された累積誤差限界が誤差限界を超えるとき生成されるなどのマイクロアーキテクチャ例外を扱う。
【００１２】
アーキテクチャレジスタ１０８は、命令（例えば、マイクロ命令）オペランド１６６を近似化機能ユニット１０６に提供し、近似化機能ユニット１０６によって生成された結果を、好ましくはリオーダバッファ（図示せず）を介して受け取る。アーキテクチャレジスタ１０８の各々に関連付けられているのは、関連付けられたレジスタ１０８に記憶された結果の誤差の量の指標（indication）を保持する誤差ストレージ１０９である。近似化機能ユニット１０６が結果１６４（アーキテクチャレジスタ１０８に書き込まれる）を生成するたびに、近似化機能ユニット１０６は、近似計算により累積した、結果１６４に関連付けられた誤差１６８の量の指標をさらに生成する。誤差１６８は宛先レジスタ１０８に関連付けられた誤差ストレージ１０９に書き込まれる。さらに、レジスタ１０８がオペランドを近似化機能ユニット１０６に提供するたびに、関連付けられた誤差ストレージ１０９は、オペランドに関連付けられた誤差１６２を近似化機能ユニット１０６に提供する。これにより、近似化機能ユニット１０６は、近似計算を実行するとき、計算の入力オペランド１６６の誤差と、近似化機能ユニット１０６によって導入された誤差との両方を累積することが可能になる。
【００１３】
スナップショットストレージ１３４は、プロセッサ１００の状態のスナップショットを保持する。プロセッサ１００は、近似計算を実行することを開始する前に、その状態をスナップショットストレージ１３４に書き込み、したがって、近似計算の結果の累積された誤差が誤差限界を超える場合、プロセッサ１００は、一実施形態により以下により詳細に説明するように、その状態をスナップショット１３４から復元し、近似なしで計算を再実行することができる。一実施形態において、スナップショットストレージ１３４は、プロセッサ１００のプライベートメモリを備える。好ましくは、スナップショット１３４は、近似計算を実行する命令のセット内の第１の命令のアドレスを含む。マイクロコード１３６が命令のセットの再実行を引き起こし、ただし近似のない一実施形態（例えば、図１０）において、マイクロコード１３６は、スナップショット１３４に保持された第１の命令のアドレスへの分岐を引き起こす。
【００１４】
データキャッシュ１３８は、システムメモリロケーションからデータをキャッシュする。一実施形態において、データキャッシュ１３８は、第１のレベルのデータキャッシュと、命令キャッシュ１０２及び第１のレベルのキャッシュを支援する第２のレベルのキャッシュとを含むキャッシュメモリの階層である。一実施形態において、近似計算を採用するプログラムは、プロセッサ１００によって提供された誤差限界の特徴を超えた後、回復を享受することになっている場合は、そのデータがデータキャッシュ１３８をオーバーフローしないことを確実にしなければならない。
【００１５】
一実施形態において、近似制御レジスタ１３２は、近似化機能ユニット１０６に提供される、プロセッサ１００の近似ポリシー１７６を指定する情報を保持する。好ましくは、近似制御レジスタ１３２は、近似フラグと、近似量と、誤差限界（又は誤差閾値）とを含む。近似フラグは、近似化機能ユニット１０６によって実行された計算が最高精度の計算なのか又は近似計算なのか、すなわち、最高精度モードであるのか又は近似計算モード（又は近似化モード）であるのかを示す。近似量は、近似化機能ユニット１０６に、それらの近似計算を実行するのに採用することができる最高度より低い程度の精度を知らせる。誤差限界は、近似計算の結果１６４において容認され得る累積された誤差１６８の量を指定し、それを超えると、誤差限界を超えたことをプロセッサ１００が信号で伝え、好ましくは、したがって、計算を近似なしで再度実行することができる。一実施形態において、近似化機能ユニット１０６は、近似制御レジスタ１３２に記憶された近似ポリシーにより計算を実行する。代替実施形態において、各命令は、例えばプレフィックスなどにおいて、近似ポリシーを近似化機能ユニット１０６に対して指定する。一実施形態において、近似制御レジスタ１３２は、プロセッサ１００の命令セットアーキテクチャの命令によって書き込み可能である。
【００１６】
近似化機能ユニット１０６は、通常計算（すなわち、命令セットアーキテクチャによって指定された最高度の精度で）又は近似計算（すなわち、命令セットアーキテクチャによって指定された、最高度より低い精度で）を選択的に実行することができる。近似化機能ユニット１０６の各々は、命令の処理に関連付けられた機能を実行するハードウェア又はハードウェアとプロセッサ１００内のマイクロコードとの組合せである。より具体的には、ハードウェア又はハードウェアとマイクロコードとの組合せは、計算を実行して、結果を生成する。機能ユニットの例には、限定はされないが、整数ユニットなどの実行ユニット、単一問題多重データ（single  issue  multiple  data；ＳＩＭＤ）ユニット、マルチメディアユニット、及び浮動小数点乗算器、浮動小数点除算器及び浮動小数点加算器などの浮動小数点ユニットが含まれる。有利には、近似化機能ユニット１０６は、通常計算を実行するときよりも近似計算を実行するときのほうが電力の消費が少ない。近似化機能ユニット１０６の実施形態は、図２に関してより詳細に説明される。
【００１７】
次に図２を参照すると、図１の近似化機能ユニット１０６の３つの実施形態を例示する構成図が示される。３つの実施形態は、近似化浮動小数点乗算器１０６Ａと、近似化超越関数計算ユニット１０６Ｂと、近似化除算器１０６Ｃとである。
【００１８】
近似化浮動小数点乗算器１０６Ａは、入力オペランド１６６をレジスタ１０８から受け取り、図１の結果１６４を生成する。近似化浮動小数点乗算器１０６Ａは、入力オペランド１６６の最上位ビットへの乗算を実行するゲート２０２と、入力オペランド１６６の最下位ビットへの乗算を実行するゲート２０４とを含む。近似化浮動小数点乗算器１０６Ａは、近似ポリシー１７６に基づいて最下位ビット乗算ゲート２０４への電力の選択的提供を制御する電力制御ロジック２０６をさらに含む。例えば、近似モードが最高精度である場合、電力制御２０６により、最下位ビット乗算ゲート２０４のトランジスタに電力が提供されるが、近似モードが最高精度より低い場合、電力制御２０６により、最下位ビット乗算ゲート２０４のトランジスタに電力が提供されない。一実施形態において、最下位ビット乗算ゲート２０４は、電力制御２０６が近似ポリシー１７６に示された近似量に基づいて最下位ビットのより小さい又はより少ないほうの乗算に関連付けられたゲートをパワーオフするようにグループ化される。好ましくは、近似化浮動小数点乗算器１０６Ａは、最下位ビット乗算ゲート２０４の中間結果が最上位ビット乗算ゲート２０２（例えば、キャリー）に提供されるように構成され、最下位ビット乗算ゲート２０４が近似計算モードでパワーオフされるとき、デフォルト値（例えば、ゼロ）が中間結果として最上位ビット乗算ゲート２０２に提供される。
【００１９】
一般的に言えば、近似化乗算器１０６Ａは、２つのファクタ１６６の各々のＮビットを乗算することができ、その場合、Ｎビットは命令セットアーキテクチャによって指定された最高精度である。しかし、近似化乗算器１０６Ａは、２つのファクタ１６６の各々のＮビットより少ない乗算をして、最高精度より低い精度の結果１６４を生成することもできる。好ましくは、乗算器は、乗算を実行するとき、ファクタ１６６の最下位ビットのＭビットを除外し、その場合、ＭはＮより小さい。例えば、ファクタ１６６の仮数が各々５３ビットとすると、ファクタ１６６の５３ビットのうち下部のＮビットの乗算に通常使用されるであろう近似化乗算器のゲート２０４のトランジスタは、ファクタ１６６のうち下部のＭビットが近似乗算に含まれないようにオフにされ、その場合、ビット数のＭは近似ポリシーにおいて、例えば、近似制御レジスタ１３２において指定される。このようにして、近似化乗算器１０６Ａは、除外ビットを乗算するのに通常使用されるであろうトランジスタをオフにすることができるので、最高精度モードよりも近似化モードにおいてより少ない電力を潜在的に使用する。好ましくは、除外されるビットの数Ｍは、電力ゲーティングロジック２０６の複雑性を低減するために、限定された数のＭの値だけが近似ポリシーによって指定され得るように量子化される。
【００２０】
近似化超越関数ユニット１０６Ｂは、入力オペランド１６６をレジスタ１０８から受け取り、図１の結果１６４を生成する。近似化超越関数計算ユニット１０６Ｂは、多項式に基づいて入力オペランド１６６に対して超越関数を実行して結果１６４を生成する超越計算ロジック２１４を含む。多項式は、近似モードなどの計算ポリシー１７６からの選択制御入力に基づいて高次多項式２１２Ａ又は低次多項式２１２Ｂのいずれかを選択する多重化２１６から選択される。すなわち、多重化２１６は、近似化モードが最高精度であるとき、高次多項式２１２Ａを選択し、近似化モードが最高精度より低いとき、低次多項式２１２Ｂを選択する。一般的に言えば、近似化超越関数計算ユニット１０６Ｂは、次数Ｎの多項式を使用して、最高精度で超越関数を実行し、次数Ｍの多項式を使用して、その場合、ＭがＮ未満であるが、最高精度未満で超越関数を実行し、その場合、Ｍは近似ポリシーによって指定される。有利には、近似化モードであるとき、より低い次数の多項式を採用して超越関数計算を実行することによって、近似化超越関数計算ユニット１０６Ｂは、最高精度モードで動作するときよりも少ない電力を消費し優れた性能を出すことができる。これは、より低い次数の多項式を採用すると、より高い次数の多項式よりも乗算と加算が少なくて済むからである。
【００２１】
近似化除算器１０６Ｃは、入力オペランド１６６をレジスタ１０８から受け取り、図１の結果１６４を生成する。近似化除算器１０６Ｃは、除算ロジック２２２と反復制御ロジック２２４とを含む。除算ロジック２２２は、第１の反復の間、除算計算を入力オペランド１６６に対して実行して、中間結果１６４と中間結果１６４の精度の指標２２６とを生成する。中間結果１６４は、入力として除算ロジック２２２にフィードバックされ、精度指標２２６が反復制御ロジック２２４に提供される。その後の反復で、除算ロジック２２２は、現在の反復の間、除算計算を入力オペランド１６６と前の反復の中間結果１６４とに対して実行して、別の中間結果１６４と中間結果１６４の精度の指標２２６とを生成し、中間結果１６４は入力として除算ロジック２２２にフィードバックされ、精度指標２２６が反復制御ロジック２２４に提供される。反復制御２２４は、精度２２６を監視し、精度２２６が近似ポリシー１７６に示される許容レベルに達した時点で反復を停止する。有利には、近似ポリシーが近似モードを示すとき、最高精度より低い精度と引き換えに、より少ない反復を実行することにより、電力消費の低減が近似化除算器１０６Ｃによって達成され得る。
【００２２】
一実施形態において、近似化機能ユニット１０６の各々は、入力誤差１６２及び近似ポリシーの近似化量に基づいて、近似化機能ユニット１０６によって生成された結果１６４に関連付けられた誤差１６８の量を出力するルックアップテーブルを含む。好ましくは、ルックアップテーブルによって出力される誤差１６８の量は、それ自体、結果１６４に関連付けられた誤差の最大量を指定する近似である。
【００２３】
一実施形態において、近似化機能ユニット１０６は、近似制御レジスタ１３２によって提供された近似ポリシーではなく、又は近似ポリシーに加えて、近似ポリシーの全部又は一部分を決定するために、近似命令３９９を変換するとき、命令トランスレータ１０４によって生成されたマイクロ命令を復号する命令デコーダを含む。別の実施形態において、例えば、命令トランスレータ１０４が適当な近似化機能ユニット１０６に転送するために命令１７４を単に復号し、近似化機能ユニット１０６が近似ポリシーを決定するために命令１７４を復号する一実施形態において、命令デコーダは、近似命令３９９自体を復号する。
【００２４】
次に図３を参照すると、近似命令３９９を例示する構成図が示される。より具体的には、近似命令は、近似プレフィックスを有する計算命令３００と、近似計算命令３１０と、近似開始プレフィックス（start  approximation  prefix）を有する計算命令３２０と、近似開始命令（start  approximation  instruction）３３０と、近似停止プレフィックス（stop  approximation  prefix）を有する計算命令３４０と、近似停止命令（stop  approximation  instruction）３５０と、誤差クリアプレフィックス（clear  error  prefix）を有する計算命令３６０と、誤差クリア命令３７０と、ロードレジスタ命令３８０とを含む。
【００２５】
近似プレフィックスを有する計算命令３００は、プロセッサ１００の命令セットに一般に見出されるものなどのオペコード及び他のフィールド３０４を含む。オペコード３０４は、例えば、加算、減算、乗算、除算、融合積和演算、平方根、逆数、逆数平方根、及び超越関数など、近似化機能ユニット１０６が計算を実行することができる最高精度すなわち最高精度モードに従うより低い精度を有する結果を生成することに影響を受けやすい、近似化機能ユニット１０６によって実行され得る様々な計算のいずれかを指定することができる。近似プレフィックスを有する計算命令３００は、近似プレフィックス３０２をさらに含む。一実施形態において、近似プレフィックス３０２は所定の値を含み、命令バイトのストリーム内の並びにオペコード及び他のフィールド３０４に先行するその存在が、プロセッサ１００に、指定された計算を近似化において（in  an  approximating  manner）実行するように命令する。一実施形態において、所定の値は、ｘ８６ＩＳＡなどのＩＳＡにおいてプレフィックス値としてすでに使用されてはいない値である。一実施形態において、近似プレフィックス３０２の一部分は、オペコード及び他のフィールド３０４によって指定される計算において採用されるべき、近似量及び／又は誤差限界などの、近似ポリシー又は少なくともその一部分を指定する。別の実施形態において、近似プレフィックス３０２は、オペコード及び他のフィールド３０４によって指定される計算が近似的に実行されるべきであることを単に示し、近似ポリシーは、プロセッサ１００によって、又はプロセッサ１００に対して事前に伝達された近似ポリシー全体からとられ、近似ポリシーは、例えば、近似制御レジスタ１３２などのレジスタに記憶され得る。命令３００の近似ポリシーがプレフィックス３０２と近似ポリシー全体との組合せから導出される他の実施形態が企図されている。
【００２６】
代替実施形態において、近似計算命令３１０は、近似計算オペコード及び他のフィールド３１２を含む。近似計算オペコード値は、プロセッサ１００の命令セット内の他のオペコード値とは区別可能である。すなわち、近似計算オペコード値は、通常（例えば、近似プレフィックス３０２などのプレフィックスがない場合）プロセッサ１００に最高精度で計算を実行するように命令する他のオペコード値とは区別可能である。好ましくは、命令セットは、各タイプの計算に対して１つ、例えば、加算についてその独自の区別可能オペコード値を用いて１つ、減算についてその独自の区別可能オペコード値を用いて１つなど、複数の近似計算命令３１０を含む。
【００２７】
近似開始プレフィックスを有する計算命令３２０は、プロセッサ１００の命令セットに一般に見出されるものなどのオペコード及び他のフィールド３２４を含む。オペコード３２４は、様々な計算のいずれかを指定してもよく、又は非計算命令であってもよい。近似開始プレフィックスを有する計算命令３２０は、近似開始プレフィックス３２２をさらに含む。一実施形態において、近似開始プレフィックス３２２は所定の値を含み、命令バイトのストリーム内の並びにオペコード及び他のフィールド３２４に先行するその存在が、プロセッサ１００に、その後の計算（もし存在する場合、命令３２０内に指定された計算を含む）を、近似化において計算を実行することを停止するように命令されるまで（例えば、以下に説明する命令３４０及び３５０により）、近似化において実行するように命令する。一実施形態において、所定の値は、プレフィックス値としてｘ８６ＩＳＡなどのＩＳＡにすでに使用されてはいない値であり、本明細書に説明する他のプレフィックス（例えば、近似プレフィックス３０２、近似停止プレフィックス３４２及び誤差クリアプレフィックス３６２）とは区別可能である。近似開始プレフィックス３２２の実施形態は、近似開始プレフィックス３２２の一部分が近似ポリシーを指定してもよく、或いはその後の計算を近似ポリシー全体を使用して近似的に実行すべきであることを単に示してもよく、或いはこれらの組み合わせであってもよい点において、近似プレフィックス３０２と同様である。
【００２８】
代替実施形態において、近似開始命令３３０は、近似開始オペコード３３２を含む。近似開始命令３３０は、プロセッサ１００に、近似化において計算を実行することを停止するように命令されるまで近似化においてその後の計算を実行するように命令する。近似開始オペコード３３２の実施形態は、近似ポリシーの指定に関して近似プレフィックス３０２と同様である。近似開始オペコード３３２の値は、プロセッサ１００の命令セット内の他のオペコード値とは区別可能である。
【００２９】
近似停止プレフィックスを有する計算命令３４０は、プロセッサ１００の命令セットに一般に見出されるものなどのオペコード及び他のフィールド３４４を含む。オペコード３４４は、様々な計算のいずれかを指定してもよく、又は非計算命令であってもよい。近似停止プレフィックスを有する計算命令３４０は、近似停止プレフィックス３４２をさらに含む。一実施形態において、近似停止プレフィックス３４２は所定の値を含み、命令バイトのストリーム内の並びにオペコード及び他のフィールド３４４に先行するその存在が、プロセッサ１００に、（例えば、命令３００、３１０、３２０又は３３０により、近似化において計算を実行するように命令されるまで、）近似化において計算（もし存在する場合、命令３４０で指定された計算を含む）を実行することを停止するように命令する。一実施形態において、所定の値は、プレフィックス値としてｘ８６ＩＳＡなどのＩＳＡにすでに使用されてはいない値であり、本明細書に説明する他のプレフィックスとは区別可能である。
【００３０】
代替実施形態において、近似停止命令３５０は近似停止オペコード３５２を含む。近似停止命令３５０は、プロセッサ１００に、（近似化において計算を実行するように命令されるまで、）近似化において計算を実行することを停止するように命令する。近似停止オペコード３５２の値は、プロセッサ１００の命令セット内の他のオペコード値とは区別可能である。一実施形態において、プロセッサ１００による例外の生成がさらに、プロセッサ１００に、近似化において計算を実行することを停止するように命令し、すなわち、近似モードが最高精度に設定されるようにする。
【００３１】
誤差クリアプレフィックスを有する計算命令３６０は、プロセッサ１００の命令セットに一般に見出されるものなどのオペコード及び他のフィールド３６４を含む。オペコード３６４は、様々な計算のいずれかを指定してもよい。誤差クリアプレフィックスを有する計算命令３６０は、プロセッサ１００が計算の結果を書き込む宛先レジスタを指定するレジスタフィールド３６６をさらに含む。誤差クリアプレフィックスを有する計算命令３６０は誤差クリアプレフィックス３６２をさらに含む。一実施形態において、誤差クリアプレフィックス３６２は所定の値を含み、命令バイトのストリーム内の並びにオペコード及び他のフィールド３６４に先行するその存在が、プロセッサ１００に、レジスタフィールド３６６によって指定されたレジスタ１０８に関連付けられた誤差１０９をクリアするように命令する。一実施形態において、所定の値は、プレフィックス値としてｘ８６ＩＳＡなどＩＳＡにすでに使用されてはいない値であり、本明細書に説明する他のプレフィックスとは区別可能である。
【００３２】
代替実施形態において、誤差クリア命令３７０は、誤差クリアオペコード３７２とレジスタフィールド３７６とを含む。誤差クリア命令３７０は、プロセッサ１００に、レジスタフィールド３７６によって指定されたレジスタ１０８に関連付けられた誤差１０９をクリアするように命令する。誤差クリアオペコード３７２の値は、プロセッサ１００の命令セット内の他のオペコード値とは区別可能である。
【００３３】
ロードレジスタ及び誤差クリア命令３８０は、ロードレジスタオペコード３８２と、メモリアドレスオペランドフィールド３８４と、レジスタフィールド３８６とを含む。オペコード３８２は、プロセッサ１００に、メモリアドレスオペランド３８４によって指定されたメモリロケーションからレジスタフィールド３８６に指定された宛先レジスタにデータをロードするように命令する。オペコード３８２はさらに、プロセッサ１００に、レジスタフィールド３８６によって指定されたレジスタ１０８に関連付けられた誤差１０９をクリアするように命令する。
【００３４】
一実施形態において、誤差クリア命令３７０は、単一のレジスタ１０８ではなくすべてのレジスタ１０８の誤差１０９をクリアする。例えば、レジスタフィールド３７６の値は、すべてのレジスタ１０８をクリアするように示す所定の値であり得る。同様の実施形態は、誤差クリアプレフィックスを有する計算命令３６０とロードレジスタ及び誤差クリア命令３８０とに関して企図されている。
【００３５】
一実施形態において、命令トランスレータ１０４は、プロセッサ１００が近似計算モードであるのか又は最高精度モードであるのかを示すフラグを維持する。例えば、命令トランスレータ１０４は、近似開始命令３３０又は近似開始プレフィックスを有する計算命令３２０に直面することに応答してフラグを設定することができ、近似停止命令３５０又は近似停止プレフィックスを有する計算命令３４０に直面することに応答してフラグをクリアすることができる。各マイクロ命令は、マイクロ命令によって指定された計算が、最高精度で又は近似において実行されるべきことを示すインジケータ（indicator）を含む。命令トランスレータ１０４は、アーキテクチャ命令１６６を１つ又は複数のマイクロ命令に変換するとき、モードフラグの現在の値に基づいてそれに応じてインジケータに追加する（populates）。或いは、３００又は３１０などのアーキテクチャ近似計算命令の場合、命令トランスレータ１０４は、それぞれ、プレフィックス３０２又はオペコード３１２によりマイクロ命令のインジケータに追加する。さらに別の実施形態において、マイクロ命令のインジケータは、近似計算を指定するマイクロ命令オペコード（マイクロアーキテクチャ命令セット内で区別可能である）を含む。
【００３６】
次に図４を参照すると、一実施形態による、図１のプロセッサ１００の動作を例示する流れ図が示される。流れはブロック４０２から開始する。
【００３７】
ブロック４０２では、プロセッサ１００が、アーキテクチャ命令１６６を復号する。流れは判定ブロック４０４に進む。
【００３８】
判定ブロック４０４では、プロセッサ１００は、命令１６６が近似開始命令であるのかどうか、例えば、図３の３２０又は３３０であるのかどうかを決定する。そうである場合、流れはブロック４０６に進み、その他の場合、流れは判定ブロック４１４に進む。
【００３９】
判定ブロック４０６では、プロセッサ１００は、近似停止命令、例えば、図３の３４０又は３５０に直面するまで、近似ポリシー（例えば、近似開始命令において指定されたもの、近似制御レジスタ１３２において指定された近似ポリシー、又はこれらの組合せ）により、その後の計算を実行する。流れはブロック４０６で終了する。
【００４０】
判定ブロック４１４では、プロセッサ１００は、命令１６６が近似停止命令であるかどうか、例えば、図３の３４０又は３５０であるかどうかを決定する。そうである場合は、流れはブロック４１６に進む。その他の場合は、流れは判定ブロック４２４に進む。
【００４１】
ブロック４１６では、プロセッサ１００は、近似において計算を実行することを停止し、代わりに、それらを最高精度で実行する（プロセッサ１００が近似開始命令、例えば、図３の３２０又は３３０又は近似計算命令３００又は３１０に直面するまで）。流れはブロック４１６で終了する。
【００４２】
判定ブロック４２４では、プロセッサ１００は、命令１６６が誤差クリア命令であるかどうか、例えば、図３の３６０又は３７０又は３８０であるかどうかを決定する。そうである場合、流れはブロック４２６に進む。その他の場合、流れは判定ブロック４３４に進む。
【００４３】
ブロック４２６では、プロセッサ１００は、レジスタフィールド３６６／３７６／３８６で指定されたレジスタ１０８に関連付けられた誤差１０９をクリアする。流れはブロック４２６で終了する。
【００４４】
判定ブロック４３４では、プロセッサ１００は、命令１６６が計算命令１６６であるかどうかを決定する。そうである場合、流れはブロック４５２に進む。その他の場合、流れはブロック４４６に進む。
【００４５】
ブロック４４６では、プロセッサ１００は、他の命令１６６、すなわち、計算命令３９９以外の命令セットアーキテクチャの命令を実行する。流れはブロック４４６で終了する。
【００４６】
ブロック４５２では、関連する近似化機能ユニット１０６が計算命令１６６を受け取り、それを復号する。流れは判定ブロック４５４に進む。
【００４７】
判定ブロック４５４では、近似化機能ユニット１０６が、近似ポリシーが近似化であるのか又は最高精度であるのかを決定する。近似化である場合、流れはブロック４５６に進む。最高精度である場合、流れはブロック４５８に進む。
【００４８】
ブロック４５６では、近似化機能ユニット１０６が、近似化において、例えば、図２に関して上記のようになど本明細書で説明するように、計算を実行する。流れはブロック４５６で終了する。
【００４９】
ブロック４５８では、近似化機能ユニット１０６が非近似化において（in  a  non-approximating  manner）、すなわち、最高精度で、計算を実行する。流れはブロック４５８で終了する。
【００５０】
次に図５を参照すると、コンピュータシステム内の図１のプロセッサ１００の動作を例示する流れ図が示される。流れはブロック５０２から開始する。
【００５１】
ブロック５０２では、プロセッサ１００上で実行されるプログラム（例えば、オペレーティングシステム又は他のプログラム）が計算を実行するためにプロセッサ１００によって使用される近似ポリシーを決定する。好ましくは、近似ポリシーは、計算自体における容認可能な誤差限界及び近似量すなわち、各近似化機能ユニット１０６が各々の近似された計算に採用すべき近似の量を指定する。プログラムは、現在のシステム構成に少なくとも部分的に基づいて、近似ポリシーを決定する。例えば、プログラムは、コンピュータシステムがバッテリ電力で、又は壁面ＡＣ電力などの実際上無制限の電源で動作しているかどうかを検知することができる。さらに、プログラムは、ディスプレイサイズやスピーカ品質など、コンピュータシステムのハードウェア構成を検知することができる。プログラムは、オーディオ／ビデオ関連の計算などの特定の計算を最高精度ではなく近似的に実行することの望ましさ及び／又は受容性を決定する際に、上記のようなファクタを考慮することができる。流れはブロック５０４に進む。
【００５２】
ブロック５０４では、プログラムは、近似ポリシーをプロセッサ１００に提供する。一実施形態において、プログラムは、近似ポリシーを近似制御レジスタ１３２に書き込む。一実施形態において、プログラムは、ｘ８６ＷＲＭＳＲ命令を実行して、プロセッサ１００に新たな近似ポリシーを提供する。流れはブロック５０４で終了する。
【００５３】
好ましくは、システム構成が変更になるとき、例えば、システムが壁面コンセントにプラグが差し込まれ又は壁面コンセントからプラグが抜かれ、或いは異なるサイズの外部モニタにプラグが差し込まれるとき、プログラムは構成の変更を検知し、ブロック５０２において近似ポリシーを変更し、ブロック５０４において新たな近似ポリシーをプロセッサ１００に伝達する。
【００５４】
次に図６を参照すると、３つの異なるコンピューティングシステムを例示する構成図が示される。システムの各々は、図１の近似計算対応プロセッサ１００と、ディスプレイ６０６と、データを含むバッファ６０４とを含み、データにより、プロセッサ１００が、例えば、図３の近似計算命令３９９を使用して計算を実行して、ディスプレイ６０６上に表示されるべきピクセルをレンダリングする。
【００５５】
第１のシステムはデスクトップコンピュータ６０２Ａであり、デスクトップコンピュータ６０２Ａは、大型ディスプレイ６０６Ａ（例えば、２４インチ以上）を含み、本質的に無制限の電源、例えば、壁面コンセントから電力を受ける。第２のシステムはラップトップコンピュータ６０２Ｂであり、ラップトップコンピュータ６０２Ｂは、中型サイズのディスプレイ６０６Ｂ（例えば、１５インチ）を含み、ユーザの選択に依存して壁面コンセントからかバッテリからのいずれかで電力を受ける。第３のシステムはスマートフォンや卓上コンピュータなどのハンドヘルドコンピュータ６０２Ｃであり、ハンドヘルドコンピュータ６０２Ｃは、相対的に小型のディスプレイ（例えば、４．８インチ）６０６Ｃを含み、その電力を主にバッテリから受ける。図示する例では、ディスプレイはすべて、容認され／受容され得る近似の量が主にディスプレイサイズに基づくように、近似的に同じ解像度を有すると仮定されるが、近似計算の量は、ディスプレイの解像度のばらつきにより変動することもあることが理解されるべきである。集合的にシステム６０２と呼ばれる３つのシステムは、近似計算対応プロセッサ１００を含むことができるシステムを代表することが意図されており、本明細書に説明する近似計算の実施形態の様々な用途を例示する比較のために異なる特徴と共に提供される。しかし、他の実施形態が企図されており、近似計算対応プロセッサ１００の用途は、図示する実施形態に限定されない。
【００５６】
第１のシステム６０２Ａは、ピクセルレンダリングの近似によって引き起こされる視覚歪みが大型ディスプレイ６０２Ａ上では容易に明らかである可能性があり、電源が近似計算に起因する電力の節減の必要をより必要なくする可能性があるので、近似を容認せず、高精度を要求する傾向がある。
【００５７】
第２のシステム６０２Ｂは、特にバッテリ電力で動作するとき、適量の近似によって引き起こされる、より大型の同様の解像度を有するディスプレイ上より少ないが明らかであり得る視覚歪みが、バッテリ寿命の利点との許容可能なトレードオフであり得るので、適量の精度を要求し、適量の近似を容認する傾向がある。他方、システム６０２Ｂが壁面の電源にプラグが差し込まれるとき、好ましい近似ポリシーは、第１のシステム６０２Ａの近似ポリシーと同様であり得る。
【００５８】
第３のシステム６０２Ｃは、名ばかりの（nominal）ズームレベルにおける小型のディスプレイ６０６Ｃ上では近似による視覚歪みが明らかでない又は大いに明らかでない可能性があるので、最も低い精度を要求する傾向があり、バッテリ電力を節約する必要が相対的に大きい。
【００５９】
次に図７を参照すると、図６のシステム６０２の動作を例示する流れ図が示される。流れはブロック７０２から開始する。
【００６０】
ブロック７０２では、システム６０２がパワーオン又はリセットされるときなどに、プログラムがシステム６０２におけるディスプレイ６０６のタイプを検知する。或いは、プログラムは、例えば、外部モニタが、ラップトップ６０２Ｂにプラグが差し込まれ、或いはラップトップ６０２Ｂからプラグが抜かれるとき、ディスプレイ６０６の変化を検知することができる。さらに、プログラムは、壁面コンセントにプラグを差し込む又は壁面コンセントからプラグを抜くなどの電源の変化を検知することができる。流れはブロック５０２に進む。
【００６１】
ブロック５０２では、図５に関して上に説明したように、プログラムは、システム構成に基づいて近似ポリシーを決定する。流れはブロック５０４に進む。
【００６２】
ブロック５０４では、プログラムは、図５に関して上に説明したように、プロセッサ１００に近似ポリシーを提供する。流れはブロック７０８に進む。
【００６３】
ブロック７０８では、プロセッサ１００は、例えば、図４及び図１０〜１２に関して本明細書に説明するように、受け取った近似ポリシーに基づいて計算を実行する。流れはブロック７０８で終了する。
【００６４】
或いは、プロセッサ１００上で実行されるソフトウェア（例えば、グラフィックソフトウェア）は、異なる近似ポリシーに関連付けられた（例えば、図６の異なるシステム構成に関連付けられた異なる近似ポリシーの各々の）コードの異なるルーチン（計算命令３９９を含む）と、現在のシステム構成に基づく適当なルーチンへのソフトウェア分岐とを含む。
【００６５】
次に図８を参照すると、本明細書に説明するように、近似計算認識プロセッサ１００上で実行されるソフトウェアの開発のためのプロセスを例示する流れ図が示される。流れはブロック８０２から開始する。
【００６６】
ブロック８０２では、プログラマが、Ｃ言語などの従来のプログラミング言語を用いて、グラフィックソフトウェアなどのプログラムを開発し、近似ディレクティブを用いて近似認識コンパイラを呼び出す。近似認識コンパイラは、対象プロセッサ１００の近似計算能力、より具体的には、プロセッサ１００によってサポートされる近似命令３９９のセットを知っている。近似ディレクティブは、コマンドラインのオプションであってもよく、又は、コンパイラによって生成されるオブジェクトコードが近似計算を実行する近似命令３９９を含むべきであることをコンパイラに対して伝達する他の方法でもよい。好ましくは、近似認識コンパイラは、プログラミング言語によって指定された計算が近似計算を容認するところのルーチンだけコンパイルするように近似ディレクティブを用いて呼び出され、一方、近似計算を容認しない他のルーチンは、近似ディレクティブなしでコンパイルされる。それぞれの方法によって生成されたオブジェクトファイルは、実行可能プログラムに共にリンクされる。近似容認ルーチンは、相対的に専用ルーチンになる傾向があり得る。例えば、ピクセルレンダリングルーチンは、近似計算の影響を受けやすい浮動小数点データにおける計算を含むことがあり、それに対して近似認識コンパイラが近似命令３９９を生成するが、一方、ループ制御変数は、整数データでよく、近似認識コンパイラは、例えば、ループ制御変数を更新する計算を実行するために近似命令３９９を生成しない。流れはブロック８０４に進む。
【００６７】
８０４では、近似認識コンパイラは、プログラムをコンパイルし、プロセッサ１００にオブジェクトコードとして近似計算を実行するように命令する近似命令３９９を含む機械語命令を生成する。一実施形態において、コンパイラによって生成される機械コードは、近似ディレクティブの使用なしでその他の方法で生成されるであろう機械コードと同様であるが、命令のうちいくつかが、図３の近似プレフィックス３０２、近似開始プレフィックス３２２、近似停止プレフィックス３４２、又は誤差クリアプレフィックス３６２などの近似関連プレフィックスによって先行される。一実施形態において、近似認識コンパイラは、近似ディレクティブがない場合にその他の方法で生成するであろう通常計算命令の代わりに近似計算命令３１０を生成する。一実施形態において、近似認識コンパイラは、開始／停止近似命令３３０／３５０及び／又は開始／停止近似プレフィックス３２２／３４２により区切られた通常命令シーケンスを生成する。一実施形態において、近似認識コンパイラは、上に説明したように、その各々が異なる近似ポリシーを採用した複数のコードルーチンを生成し、コンパイラは、プログラムがプログラム自体で決定することができ、或いはプログラムがオペレーティングシステムから取得することができる現在のシステム構成に基づいて、適当なサブルーチンをコールするコードを生成する。流れはブロック８０４で終了する。
【００６８】
次に図９を参照すると、本明細書に説明するように、近似計算認識プロセッサ１００上で実行されるソフトウェアの開発のための代替プロセスを例示する流れ図が示される。流れはブロック９０２から開始する。
【００６９】
ブロック９０２では、プログラマがブロック８０２における説明と同様のプログラムを開発し、近似認識コンパイラを呼び出す。しかし、プログラミング言語及びコンパイラは、近似ディレクティブ及び／又は近似容認データタイプをサポートする。例えば、Ｃ言語の方言（dialect）が、上記のようなディレクティブ及び／又はデータタイプをサポートすることができる。近似ディレクティブには、プログラマが選択的プログラム変数を近似容認データとしてマークするためにソースコードに含めることができるコンパイラディレクティブ（例えば、Ｃ言語の＃ｉｎｃｌｕｄｅ又は＃ｄｅｆｉｎｅディレクティブと同様の）を含むことができる。同様に、プログラマは、近似容認データタイプ変数として宣言されたプログラム変数をソースコードに含めることができ、それに対して、コンパイラは近似計算を変数に対して実行させる命令３９９を生成することを知っている。流れはブロック９０４に進む。
【００７０】
ブロック９０４では、近似認識コンパイラは、プログラムをコンパイルして、ブロック８０４に関して上に説明したやり方と同様の、ただしコンパイルされるソースコードに含まれる近似ディレクティブ及び／又は近似容認データタイプに応答した、オブジェクトコードを生成する。流れはブロック９０４で終了する。
【００７１】
次に図１０を参照すると、近似計算を実行するプログラムを実行する図１のプロセッサ１００の動作を例示する流れ図が示される。流れはブロック１００２から開始する。
【００７２】
ブロック１００２では、プログラムは、上に説明したやり方と同様に、近似ポリシーをプロセッサ１００に提供する。或いは、プログラム自体が、近似ポリシーを提供する（及び、終了と同時に現在の近似ポリシーを復元する）。さらに、以下に説明するように、誤差閾値を超えるという事象において実行され得る、近似計算を実行しない代替コードパスが指定される。流れはブロック１００４に進む。
【００７３】
ブロック１００４では、プロセッサ１００は、その状態を図１のスナップショットストレージ１３４に書き込むことによって、その現在の状態のスナップショットを撮る。一実施形態において、プロセッサ１００は、プログラムによって実行される命令に直面することに応答してスナップショットを撮る。一実施形態において、命令は、ｘ８６ＷＲＭＳＲ命令を含む。一実施形態において、スナップショットを撮ることは、キャッシュラインのクリーンコピーがキャッシュ１３８に存在するように、プログラムの近似計算のセットによってタッチされるであろうメモリのダーティキャッシュラインに書き戻すことと、次いで、上記キャッシュラインを、近似計算の対象であり得ることを示すように特別としてマークすることとを含む。キャッシュラインは、特別としてマークされるので、近似計算の結果によって修正されるとき、少なくとも、プログラムが許容可能な誤差限界を超えることなく完了できることが検証されるまでは、メモリに書き戻されない。したがって、その後、プロセッサ１００が誤差限界を超えたと決定する場合（例えば、ブロック１０１２において）、特別なキャッシュラインは無効にされ、非特別としてマークされ、その後の計算の非近似セットについて、キャッシュラインの近似前の計算状態がメモリ内で利用可能となる（例えば、ブロック１０１４において）。そのような実施形態では、プログラマは、特別なキャッシュラインがキャッシュ１３８からあふれ出てはならないことを認識しなければならない。そうでないと、プロセッサ１００は、そのような状態を誤差限界を超えるとして取り扱う。好ましくは、マルチコアプロセッサの実施形態では、キャッシュ１３８は近似計算のセットを実行するコアに対してローカルでなければならない。流れはブロック１００６に進む。
【００７４】
ブロック１００６では、プロセッサ１００、特に近似化機能ユニット１０６は、近似ポリシーに基づいて、プログラム命令によって指定された近似計算を実行して、近似結果１６４を生成する。近似化機能ユニット１０６は、上に説明したように、入力オペランドの誤差値１６２と近似計算によって導入される誤差とに基づいて、結果１６４の誤差１６８も近似化する。流れはブロック１００８に進む。
【００７５】
ブロック１００８では、近似化機能ユニット１０６は、累積誤差１６８を、近似結果１６４を受け取る宛先レジスタ１０８に関連付けられた誤差ストレージ１０９に書き込む。流れは判定ブロック１０１２に進む。
【００７６】
判定ブロック１０１２では、プロセッサ１００は、ブロック１００８において生成された誤差１６８が近似ポリシーの誤差限界を超えるかどうかを決定する。超える場合、流れはブロック１０１４に進む。その他の場合、流れはブロック１００６に戻って、プログラムの別の近似計算を実行する。
【００７７】
ブロック１０１４では、プロセッサ１００は、ブロック１００４においてスナップショットを撮った後、プロセッサ１００の状態をスナップショットストレージ１３４に記憶されたスナップショットに復元し、誤差限界を超えた、近似において実行された計算を伴ったプログラムを、近似なしで、又は少なくともその一部分を再実行する。ブロック１０１４の動作の実施形態は、図１１及び１２に関して以下に説明される。流れはブロック１０１４で終了する。
【００７８】
次に図１１を参照すると、一実施形態による、図１０のブロック１０１４の動作をより詳細に例示する流れ図が示される。流れはブロック１１０２から開始する。
【００７９】
ブロック１１０２では、制御が、判定ブロック１０１２において誤差限界を超えたことを検知したことに応答して生成されるマイクロ例外（すなわち、非アーキテクチャ例外）を介して、プロセッサ１００のマイクロコード１３６に移される。マイクロコード１３６は、図１０に関して上に説明したように、プロセッサ１００の状態をスナップショットに復元する。さらに、マイクロコード１３６は、アーキテクチャ例外を生成する。流れはブロック１１０４に進む。
【００８０】
ブロック１１０４では、アーキテクチャ例外ハンドラが、図１０のブロック１００２において指定された代替コードパスに制御を移し、したがって、近似計算のセットが最高精度で実行される。一実施形態において、例外ハンドラは、近似を無効にするように近似ポリシーを設定し（すなわち、近似ポリシーを最高精度に設定し）、次いで、事前に近似が有効にされていたときに実行された同じコードにジャンプし、これが今度は、近似が無効にされて実行されることになる。流れはブロック１１０４で終了する。
【００８１】
次に図１２を参照すると、代替実施形態による、図１０のブロック１０１４の動作をより詳細に例示する流れ図が示される。流れはブロック１２０２から開始する。
【００８２】
ブロック１２０２では、制御が、誤差限界を超えたことを検知したことに応答して生成されるマイクロ例外を介して、プロセッサ１００のマイクロコード１３６に移され、マイクロコード１３６は、プロセッサ１００の状態をスナップショットに復元する。流れはブロック１２０４に進む。
【００８３】
ブロック１２０４では、マイクロコード１３６は、近似ポリシーを最高精度に設定する（例えば、近似制御レジスタ１３２に書き込む）。マイクロコード１３６はさらに、すべてのレジスタ１０８に関連付けられた誤差値１０９をクリアする。マイクロコード１３６はさらに、例えば、ブロック１００４においてスナップショットを撮った後の時点からの、プログラムの再実行を引き起こす。一実施形態において、マイクロコード１３６は、スナップショットストレージ１３４に記憶された命令アドレスからプログラムを再実行する。流れはブロック１２０４で終了する。
【００８４】
近似計算がオーディオ及びビデオの目的のために実行される実施形態を説明してきたが、近似計算がコンピュータゲーム物理計算に使用されるセンサ計算などの他の目的のために実行される他の実施形態が企図されている。例えば、上記計算に使用されるアナログ／デジタル変換値は、１６ビットまで正確であるだけでもよく、したがって、例えば、５３ビットの正確さを使用するゲーム物理分析は不必要である。
【００８５】
本発明の様々な実施形態を本明細書に説明してきたが、それらは限定によってではなく、例によって提示されていることを理解されたい。本発明の範囲を逸脱することなく、形態及び詳細の様々な変更をそれらにおいて加えることができることが、当該コンピュータ業界の当業者には明らかであろう。例えば、ソフトウェアは、例えば、本明細書に説明する装置及び方法の機能、製作、モデリング、シミュレーション、説明、及び／又は試験を有効にすることができる。これは、汎用プログラミング言語（例えば、Ｃ、Ｃ＋＋）、Ｖｅｒｉｌｏｇ  ＨＤＬ及びＶＨＤＬなどを含むハードウェア記述言語（ＨＤＬ）、又は他の利用可能なプログラムの使用により達成することができる。そのようなソフトウェアは、磁気テープ、半導体、磁気ディスク、若しくは光ディスク（例えば、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭなど）、ネットワーク、ワイヤライン、ワイヤレス、又は他の通信媒体などの、任意の周知のコンピュータ使用可能媒体に配置することができる。本明細書に説明する装置及び方法の実施形態は、プロセッサコアなどの半導体知的財産コア（例えば、ＨＤＬにおいて具現化された又は指定された）に含め、集積回路の生産においてハードウェアに変換することができる。さらに、本明細書に説明する装置及び方法は、ハードウェアとソフトウェアとの組合せとして具現化することができる。したがって、本発明は、本明細書に説明する例示的な実施形態のいずれかによって限定されるべきではなく、以下の特許請求の範囲及びその均等物によってのみ定義されるべきである。具体的には、本発明は、汎用コンピュータにおいて使用され得るプロセッサデバイス内で実現することができる。最後に、当業者は、開示された概念及び具体的な実施形態を、添付の特許請求の範囲によって定義される本発明の範囲から逸脱することなく本発明の同じ目的を実行する他の構造を設計し又は修正するための基礎として、容易に使用することができることを理解するべきである。
【図１】
0006586435.tif 000002
【図２】
0006586435.tif 000003
【図３】
0006586435.tif 000004
【図４Ａ】
0006586435.tif 000005
【図４Ｂ】
0006586435.tif 000006
【図５】
0006586435.tif 000007
【図６】
0006586435.tif 000008
【図７】
0006586435.tif 000009
【図８】
0006586435.tif 000010
【図９】
0006586435.tif 000011
【図１０】
0006586435.tif 000012
【図１１】
0006586435.tif 000013
【図１２】
0006586435.tif 000014