(58)【調査した分野】(Int.Cl.,DB名)
前記直接データをデコードして、前記実行回路によって使われるべき前記丸めモードを決定するとともに前記精度例外が抑制されるべきかどうかを決定する回路をさらに有する、
請求項1記載のプロセッサ。
前記第一の組の一つまたは複数のビットが第一の値をもつことに応答して、前記実行回路は、最も近い整数値に対応する丸められた結果を生成する、最も近いものへの丸めモードを選択する、請求項1記載のプロセッサ。
前記第一の組の一つまたは複数のビットが第二の値をもつことに応答して、前記実行回路は、打ち切られた結果を生成する打ち切り丸めモードを選択する、請求項3記載のプロセッサ。
前記第一の組の一つまたは複数のビットが第三の値または第四の値をもつことに応答して、前記実行回路は、それぞれ負の無限大のほうへの丸めモードまたは正の無限大のほうへの丸めモードを選択する、請求項3記載のプロセッサ。
前記第一の組の一つまたは複数のビットが第一の値をもつことに応答して、最も近い整数値に対応する丸められた結果を生成する、最も近いものへの丸めモードを選択する、請求項10記載の方法。
前記第一の組の一つまたは複数のビットが第三の値または第四の値をもつことに応答して、それぞれ負の無限大のほうへの丸めモードまたは正の無限大のほうへの丸めモードを選択する、請求項13記載の方法。
前記動作が、前記第一の組の一つまたは複数のビットが第一の値をもつことに応答して、最も近い整数値に対応する丸められた結果を生成する、最も近いものへの丸めモードを選択することを含む、請求項15記載のプログラム。
前記動作が、前記第一の組の一つまたは複数のビットが第二の値をもつことに応答して、打ち切られた結果を生成する打ち切り丸めモードを選択することを含む、請求項17記載のプログラム。
前記動作が、前記第一の組の一つまたは複数のビットが第三の値または第四の値をもつことに応答して、それぞれ負の無限大のほうへの丸めモードまたは正の無限大のほうへの丸めモードを選択することを含む、請求項18記載のプログラム。
【発明を実施するための形態】
【0006】
さまざまな実施形態において、プロセッサにおいて、たとえば該プロセッサの浮動小数点ユニット(FPU: floating point unit)において丸め処理を効率的に実行するために、命令セット・アーキテクチャ(ISA: instruction set architecture)の複数の丸め命令が使用されうる。米国電気電子技術者協会(IEEE: Institute of Electrical and Electronics Engineers)規格754-1985(1985年発表)(本稿では二進浮動小数点演算のためのIEEE規格またはIEEE規格754)に述べられている丸めモードに加えて、追加的な丸めモードに従って丸め処理を実行するために諸実施形態が使用されうる。たとえばいくつかの実施形態では、命令が、下記に述べるような中間点で零から遠いほうへの(halfway away from zero)丸め処理および零から遠いほうへの(away from zero)丸め処理のサポートを提供してもよい。さらに、これらの丸め処理は多くのデータ型とともに使用されうる。いくつかの実装では、丸め処理は単一命令複数データ(SIMD: single instruction multiple data)データ型に対して実行されることができ、それにより命令は、パックされたデータ要素といった拡張されたデータ型に対して実行されることができる。パックされたデータ要素(packed data element)では、複数のデータ要素が、プロセッサの拡張されたレジスタのような単一の位置にパックされる。
【0007】
柔軟性を受け入れ、効率的な命令実行を提供するために、諸実施形態は、ソース・オペランドに対して実行されることのできるISAベースの命令を提供しうる。これらのISAベースの命令は、ソース・オペランドの最も近い整数値への丸めを実行する丸め処理のさまざまな実装であってよい。そのようなソース・オペランドはすでに限られた精度のフォーマットにあってもよい(すなわち、算術演算の結果ではなくレジスタ/メモリから読まれたデータ)。そのような命令は、マルチメディア・アプリケーション、ゲーム・アプリケーションなどを含むさまざまなアプリケーションに使用されうる。さらに、諸実施形態は、さまざまなプログラミング言語に適用可能でありうる丸め処理を可能にするコンパイラ・ベースのプリミティブにおいて実装されてもよい。さまざまな実施形態において、丸め命令は、ソース・オペランドとして浮動小数点数を取り、それを最も近い整数値に丸め、結果をやはり整数値をもつ浮動小数点値として記憶しうることを注意しておく。
【0008】
さまざまな実施形態において、実行の制御は、少なくとも部分的には、命令とともに受領された情報、たとえば命令とともに受信された直接データ(immediate data)に基づいて扱われうる。種々の実装において、そのような直接データは、プロセッサによって現在使用中のデフォルト丸めモードをオーバーライドしうる。そのようなオーバーライドの場合には、直接データはさらに丸めモードの制御を提供しうる。さらに、直接データは精度例外(precision exceptions)のオーバーライド(すなわち精度抑制(precision suppression))を提供しうる。こうして、直接データは、特定の丸め処理の非固定制御(non-sticky control)を提供し、それにより該処理が最小限のサイクル数で実行されうるようにするために使用されうる。これがそうでありうるのは、命令に付随して受信された直接データが丸め制御情報を含むとき、構成設定レジスタ内に存在するそのような情報を更新する必要がないことがありうるからである。ここで、構成設定レジスタは、拡張された制御・状態レジスタ(CSR: control and status register)、たとえばインテル(登録商標)アーキテクチャ(たとえばIA-32アーキテクチャ)に従ってプロセッサ内に存在するマルチメディア拡張CSR(MXCSR: multimedia extension CSR)のようなものである。しかしながら、諸実施形態はさまざまなプロセッサ型において使用されうること、本発明の範囲がこの点で限定されるものではないことを理解されたい。
【0009】
ここで
図1を参照すると、本発明のある実施形態に基づく方法の流れ図が示されている。
図1に示されるように、方法100は、プロセッサ内で丸め命令および付随する直接データを受信することによって始まりうる(ブロック110)。たとえば、多くの実装において、ユーザー・レベル命令、たとえばISAベースの命令がプロセッサにおいて受信されうる。該命令に加え、それに付随する直接データが提供されうる。のちにさらに述べるように、そのような直接データは、処理のさまざまな側面を制御するための複数のフィールドを含みうる。
【0010】
引き続き
図1を参照すると、制御はブロック110から菱形115に進む。菱形115では、直接データが構成設定レジスタの丸めモードをオーバーライドするかどうかが決定される。すなわち、直接データのフィールドが、デフォルト丸めモードがオーバーライドされるべきかどうかを示すオーバーライド指標を含んでいてもよい。さまざまな実施形態において、そのようなデフォルト丸めモードは、CSR、たとえばMXCSRのような構成設定レジスタのフィールド内に存在していてもよい。ただし、本発明の範囲はこの点に関して限定されるものではない。直接データがオーバーライド指標を含む場合、制御はブロック120に進む。ブロック120では、前記命令によって指定されたソース・オペランドが、プロセッサのたとえば浮動小数点ユニット(FPU)に送付されうる。さらに、ソース・オペランドは、丸め処理の丸めモードを制御するための情報とともに送付されうる。制御情報は直接データから、すなわち直接データの丸めモード・フィールドに記述されているとおりに得られてもよい。のちにさらに述べるように、いくつかの実装では、プロセッサの制御選択器ユニットのような制御ユニットが前記命令および前記直接データを受信し、前記直接データを復号してデフォルト丸めモードがオーバーライドされるべきかどうかを決定し、もしそうであれば、直接データに記述されている丸めモードを得る。
【0011】
引き続き
図1を参照すると、菱形115においてもし代わりに、直接データがオーバーライド指標を含まないと判定される場合、制御はブロック125に進む。ブロック125では、ソース・オペランドは、FPUにおける実行のために送付されうる。さらに、丸め処理が、たとえば構成設定レジスタに記述されているデフォルト丸めモードに基づいて実行されうる。
【0012】
いずれにせよ、ブロック120および125のどちらからも、制御は、丸め処理が実行されうるブロック130に進む。丸め処理は、入力(すなわちソース・オペランド)の端数精度を丸めモードに従って除去する。さまざまな実施形態において、丸め処理を実行する種々の仕方が実現されうる。たとえば、多くの実装では、丸め処理を実行するために、FPUが加算器および丸めユニットを含みうる。IEEE規格754に従った丸めモードを実行するために、加算器は第一のオペランドとしてのソース・オペランドと、第二のオペランドについての定数値、たとえば0とを提供されうる。加算器の出力は次いで丸めユニットに供給され、該丸めユニットが前記の結果を選択された動作モードに従って丸めうる。こうして、丸めユニットは、その入力値を丸めて整数値をとる浮動小数点結果(integral valued floating point result)にしうる。
【0013】
他の諸実施形態では、IEEE規格754の丸めモードに加えて、追加的な丸めモードが実行されうる。そのような実装では、FPU加算器はソース・オペランドと、第二のオペランドとしての、ソース・オペランドの値および丸めモードに基づく特定のデータ値を供給されうる。これについてはのちにさらに述べる。次いで、丸め処理が前記結果に対して実行されうる。ここで、丸め処理はIEEE規格754の処理でもよい。拡張丸めモードのさらに別の実装では、ソース・オペランドおよび0の値がFPU加算器への入力に与えられてもよく、結果として得られる値が次いで、丸めユニットに送られた制御情報に従って丸められてもよい。
【0014】
実行後、丸め処理の結果は行き先〔デスティネーション〕オペランドに記憶されてもよい(ブロック140)。さまざまな実施形態において、行き先オペランドはプロセッサの拡張されたメモリ・レジスタであってよい。ただし、本発明の範囲はそのように限定されるものではない。さらに、丸め処理の間に精度例外が発生したかどうかが判定されてもよい(菱形145)。すなわち、丸め処理が例外を起こす不精確な結果を発展させたかどうかが判定されうる。もしそうでなければ、方法100は終結しうる。
【0015】
もしその代わり、精度例外が起こされている場合、制御は菱形150に進みうる。菱形150では、直接データが精度例外を抑制するフィールドを含むかどうかが判定されうる。すなわち、いくつかの実装では、直接データが抑制フィールドを含んでいてもよい。このフィールドの値が、精度例外が持ち上がった場合に関連する丸め命令が精度例外を抑制すべきかどうかを示しうる。精度抑制指標が存在する場合、たとえ精度例外が発生しても、さらなる行動は取られず、方法100は終結しうる。もしその代わり、直接データが精度例外を抑制する指標を含まない場合、制御はブロック160に進む。ブロック160において、精度例外フラグが状態レジスタ中にセットされうる。たとえば、いくつかの実装では、状態レジスタはMXCSRに対応しうる。ただし、本発明の範囲はこの点に関して限定されるものではない。状態レジスタ内のこのフラグの状態に基づいて、精度例外が持ち上げられ(raised)うる(たとえば、フラグがマスクされていない場合)。もしそうであれば、その例外に対処するために、たとえばソフトウェア・ハンドラを介した適切な処置が実行されうる。もしその代わりにフラグがマスクされている場合、たとえ精度例外が起こって、状態レジスタにフラグが立っていても、そのセットされたフラグに関して何の行動も取られなくてもよい。
図1の実施形態におけるこの特定の実装を用いて記載されているが、本発明の範囲はこの点に関して限定されるものではないことは理解しておくべきである。
【0016】
ここで
図2を参照すると、本発明のある実施形態に基づくプロセッサの一部分のブロック図が示されている。
図2に示されるように、プロセッサ200は、レジスタ205(これは汎用プロセッサ・レジスタであってもよい)からの、たとえばマイクロ処理(μop:micro-operation)によって生成された、はいってくる命令情報と、それに付随する直接データ(immediate data)とを受領するよう結合されている制御選択器ユニット210を含みうる。マイクロ処理は、所与の丸め処理を実行するためにISAの単一命令に応じて生成されうる。さまざまな実施形態において、ハードウェア、ファームウェアまたはそれらの組み合わせで実装されうる制御選択器ユニット210が直接データを復号する。直接データに基づいて、たとえば現在の丸め制御状態220を記憶する制御もしくは構成設定レジスタにおいて表されているようなプロセッサの現在の丸めモードがオーバーライドされるべきかどうかが決定されうる。もしそうであれば、制御選択器ユニット210は直接データのモード・フィールド、つまり丸めモード・フィールドを復号して適正な丸めモードを決定しうる。
【0017】
制御選択器ユニット210は、浮動小数点ユニット(FPU)240に結合されていて、はいってくる情報に基づいて該ユニットに制御命令を与えてもよい。
図2にさらに示されるように、いわゆる拡張された(XMM)レジスタ230のような拡張されたレジスタ・ファイルがプロセッサ200内に存在していてもよい。それは、命令において丸め処理のためのソース・オペランドおよび行き先オペランドとしてはたらくよう指定されているレジスタを含みうる。このように、XMMレジスタ230は、FPU240にソース・オペランドを与え、FPU240から行き先オペランドを受領するためにFPU240に結合されうる。
【0018】
さまざまな実施形態において、FPU240はデータに対して処理を実行するさまざまな回路を含みうる。
図2の実施形態では、FPU240はFPU加算器242を含む。具体的には、
図2に示されるように、FPU加算器242は、はいってくるオペランド、たとえば第一のソース・オペランドおよび第二のソース・オペランド(すなわちオペランドS1およびS2)を受領するよう結合されうる。FPU240はまた、FPU加算器242の出力に結合されたFPU丸め器244を含んでいてもよい。さまざまな実施形態において、FPU加算器242は無限精度をもつ演算結果を生成してもよい。しかしながら、記憶および他の制約から、結果は丸められて、所望のフォーマットの最終結果を、たとえば単精度または倍精度の浮動小数点要素を与えてもよい。したがって、FPU丸め器244は、無限に精密な結果をFPU加算器242から受領し、プロセッサ200の現在の丸めモードによって指定される、あるいは命令と一緒にすなわち制御選択器ユニット210を介して得られた直接データからの制御に基づく、丸め処理を実行しうる。FPU丸め器244は、一般に、FPU加算器242における数学的演算の結果として発生する限りなく精密な結果を受領してもよいが、さまざまな実装では、丸め命令と一緒に与えられるソース・オペランドはすでに限られた精度のフォーマットにあってもよい。これらの例において、FPU丸め器244はその入力値(たとえば、与えられた丸め命令のソース・オペランドに対応する)を受領し、たとえば最も近い整数値に対応する丸められた結果を生成しうる。
【0019】
こうして、与えられた丸め命令に基づいて、FPU240は、たとえばXMMレジスタ230の一つからの与えられたソース・オペランドに対して、制御選択器ユニット210からの情報によって制御されるように丸め処理を実行しうる。さらに、丸め処理の完了に際し、結果はXMMレジスタ230内のたとえば別のレジスタに記憶されてもよい。処理の間に精度例外が発生する場合、通常、FP状態レジスタ225にそのことを示すフラグがセットされうる。しかしながら、さまざまな実施形態において、丸め命令に関連付けられた直接データが精度抑制を示す場合、そのようなフラグはセットされなくてもよい。
図2の実施形態ではこの特定の実装について記載されているが、本発明の範囲がこの点に関して限定されるものではないことは理解しておくべきである。たとえば、いくつかの実施形態では、たとえば丸め制御状態(rounding control state)220およびFP状態レジスタ(FP status register)225によって表されるような、制御および状態の状態(control and status state)が、MXCSRのような単一のCSR内に記憶されてもよい。
【0020】
直接データは、さまざまな形で制御選択器ユニット210に与えられうることを注意しておく。たとえば、いくつかの実装では、直接データは単一バイトのデータ要素の形であってもよい。ただし、本発明の範囲はそれに限定されるものではない。さらに、直接データ要素内に制御情報をエンコードするさまざまな仕方が実現されうる。ここで
図3を参照すると、本発明のある実施形態に基づく直接データ要素のブロック図が示されている。
図3に示されるように、直接データ要素300は、オーバーライド指標310、モード制御フィールド320、精度オーバーライド指標330およびリザーブ・フィールド340を含む8ビット語であってもよい。
図3の実施形態ではこの特定の実装について示しているが、本発明の範囲はこのように限定されるものではない。
【0021】
図3の実施形態において、オーバーライド指標310は、直接データ要素300に関連付けられた丸め命令のオーバーライド状態を決定するために使用されうる。下記の表1に示されるように、オーバーライド指標310は、デフォルトの丸めモード(MXCSRのような構成設定レジスタによって表現されるような)のオーバーライドを示すために論理的な低レベルにセットされうる。論理的な高い値はデフォルト・モードの使用を示す。
【0022】
【表1】
オーバーライド指標310がデフォルト丸めモードがオーバーライドされるべきであることを示す場合、丸め命令に関連付けられる丸めモードを決定するために丸めモード・フィールド320が復号されうる。下記の表2に示されるように、いくつかの実装では、IEEE規格754によって規定される4つの丸めモードを2つの拡張丸めモードとともに含む6つの丸めモードがサポートされうる。拡張丸めモードについてはのちにさらに論じる。
【0023】
【表2】
直接データ要素300はさらに、精度抑制指標330を含む。この指標は、たとえ関連する命令の処理の間に精度例外が起こったとしても精度例外が状態レジスタ内の例外フラグのセットを引き起こさないようにする、不正確な結果の許容を示すためにセットされうる。
【0024】
具体的には、下記の表3に示されるように、精度抑制指標330は次の形を取りうる。
【0025】
【表3】
精度抑制指標330はさまざまな言語、たとえばC99、フォートランおよびジャバのユーザー・レベル命令との関連で使用されうることを注意しておく。最後に、いくつかの実施形態では、リザーブ・フィールド340は追加的な情報のためにリザーブされうる。さらに、表1〜表3に記載される個別的な値は、指標およびフィールドの特定の位置およびサイズとともに、限定されるものではなく、さまざまな変更、修正および拡張が本発明の範囲内であることを注意しておく。
【0026】
上記のように、多くの実装において、丸め処理は、ISAの単一命令に応じて実行されうる。このようにして、ユーザー・レベルのサポートが提供され、丸め処理は効率的に実行できる。所与のISAにおいて、複数のそのような丸め命令が存在し、個別的な丸め処理を扱うために利用可能であることがある。たとえば、倍精度および単精度の浮動小数点値やパックされた値およびスカラー値の丸めといったものである。これらの丸め命令は、浮動小数点データ要素の端数部分を切り捨てるために使用されてもよい。ISAレベルの命令の存在に加えて、直接データまたは他の制御フィールド情報のおかげで、プロセッサの現在のデフォルト状態を修正する必要なしに、(他の属性のなかでも)丸めモードの効率的なローカル制御が許容されうる。
【0027】
下記の表4に示されるように、さまざまな型のデータ要素に対する効率的な丸め処理を可能にするために、ISAには丸め命令のさまざまな種類が存在しうる。
【0028】
【表4】
これらのISAベース命令がどのように機能するかの例として、ROUNDPD命令は、直接要素(immediate element)(すなわちIMM8)において指定されている丸めモードによってソース・オペランド(すなわち、XMMレジスタまたはメモリから得られうる第二のオペランド)内の2つの倍精度浮動小数点値を丸め、結果を行き先オペランド(すなわち、XMMレジスタであってもよい第一のオペランド)に入れるために使用されうる。直接要素は、丸め処理のための制御フィールドを指定しうる。先の表1〜表3を参照すると、直接データのビット4(すなわち
図3の指標330)が精度例外についてのプロセッサの振る舞いを制御しうる。一方、ビット0(すなわち
図3の指標310)は丸めモード制御のソースを選択しうる。最後に、ビット3:1(すなわち、
図3のフィールド320)は非固定丸めモード値を指定しうる。いくつかの実施形態では、いずれかのソース・オペランドがシグナル発生非数(SNaN: signaling not a number)であれば、それは静穏NaN(QNaN)に変換されることを注意しておく。構成設定レジスタが非正規化数を0とみなす(DAZ: denormals as zeros)ようセットされている場合、非正規化数は丸めの前に0に変換されうる。構成設定レジスタが非正規化数を0にフラッシュする(FTZ: flush denormals to zeros)ようセットされている場合、非正規化数は丸めの後で0に変換されうる。
【0029】
これらのISA命令がどのように機能しうるかのさらなる例として、ROUNDPS命令は、ソース・オペランド内の4つのパックされた単精度浮動小数点値を丸め、結果を行き先オペランドに入れるために使用されうる。例示の目的のため、具体的な丸め命令は次の形を取りうる。
【0030】
ROUNDPS xmm0, xmm1, imm8 (最も近い整数への丸め)
この命令は、第一のレジスタ、すなわちxmm1内のパックされた単精度値を取り、各値を直接データ(すなわちimm8)の丸めモードによって記述されるように最も近い整数値に丸め、結果を第二のレジスタ、すなわちxmm0に記憶しうる。下記の表5は、ソース・オペランド(すなわちxmm1)内に存在する、それぞれ限られた精度の浮動小数点値に対応する代表的な値と、行き先オペランド(すなわちxmm0)に記憶される、整数値をとる浮動小数点数、つまり元のソース値に最も近い整数値に対応する、結果として得られる丸められた値とを示している。
【0031】
【表5】
さらなる実装では、丸め処理は、ソースFP値から整数値(すなわち、整数値をとるFP値ではなく)を生成する命令に応じてであってもよいことを注意しておく。他の実装は、より低い精度の浮動小数点表現への丸めを可能にしうる。よって、諸実施形態は、構成設定レジスタ内のデフォルト丸めモードまたは命令に関連付けられた直接データに記述されているローカル丸めモードのいずれかによって制御される、標準的な丸めモードまたは特殊化された丸めモードに従ってソース値を丸める効率的な手段を提供しうる。
【0032】
さまざまな実施形態において、直接データは、IEEE規格754の丸め処理とは異なる丸めモードを実行するような制御情報を提供しうる。これらの丸めモードは、中間点で零から遠いほうへの丸め(round halfway away from zero)および零から遠いほうへの丸め(round away from zero)の丸めモードを含みうる。ここで
図4を参照すると、本発明のある実施形態に基づく丸め処理を実行する方法の流れ図が示されている。
図4に示されるように、方法400は、これらの拡張された丸めモードを実行するために使用されうる。方法400は、ソース・オペランドが0以上であるかどうかを判定することによって始まりうる(菱形410)。もしそうであれば、制御はブロック420に進み、所定の値がソース・オペランドから減算されうる(ブロック420)。たとえば、FP加算器が、選択されている特定の丸めモードに基づいて、ソース・オペランドから所与の値を減算しうる。もちろん、この減算は、前記所定の値についての負の値との加算として実行されうる。次いで、選択された丸め処理が、このFP加算の結果に対して実行されうる(ブロック430)。いくつかの実装では、打ち切り(truncate)(零への丸め(round to zero)とも呼ばれる)のようなIEEE規格754丸め処理が前記結果に対して実行されて拡張された丸めモードの結果が得られるのでもよい。もしその代わりに菱形410においてソース・オペランドが0より小さいと判定される場合、制御はブロック440に進む。ブロック440では、所定の値(これは上記と同じ値であってもよい)がFP加算器においてソース・オペランドに加算されてもよい。次いで、ブロック450において、選択された丸め処理が前記結果に対して実行され、結果としての丸められた値が得られる。
【0033】
本発明の範囲はこの点に関して限定されるものではないが、中間点で零から遠いほうへの丸めの処理は、その所定の値として0.5の値を使ってもよい。一方、零から遠いほうへの丸めの処理は、1
-を使ってもよい。ここで、1
-とは、1より小さく1に等しくない、最も近い表現可能なFP値に対応する。単精度および倍精度のFP値について、0.5はそれぞれ0x3f000000および0x3fe0000000000000に対応しうる。単精度および倍精度のFP値について、−0.5はそれぞれ0xbf000000および0xbfe000000000000に対応しうる。単精度および倍精度のFP値について、1
-はそれぞれ0x3f7fffffおよび0x3fefffffffffffffに対応しうる。単精度および倍精度のFP値について、−1
-はそれぞれ0xbf7fffffおよび0xbfefffffffffffffに対応しうる。下記の表6には、これらの処理を実行するためのソース・コードの例が示されている。
【0034】
【表6】
これらの例において、処理ROUND_TOWARD_ZEROはIEEE規格754の打ち切り処理であり、加算/減算の結果に対して実行される。これらの拡張された丸めモードの処理を実行する際、前記所定の値は第二のソース・オペランドとして(たとえば
図2の実施形態におけるS2のように)FP加算器に与えられてもよいことを注意しておく。あるいはまた、実施形態によっては、他の丸め処理と同様に、第二のソース・オペランドは0であってもよく、選択された拡張丸めモード処理を実施するために制御信号が丸めユニットに送られてもよい。
【0035】
このように、さまざまな実施形態において、丸めを実行するための向上が実現されうる。これらの向上は、制御レジスタの状態を保存し、ダミーFP演算を実行し、前記状態を再セットする、またさらには数を整数に変換して浮動小数点に戻す近似的な単純化といったさまざまな処理を実行する必要を回避しうる。不正確な精度例外を抑制することにより、準拠性が異なる言語の丸めのサポートが簡略化されうる。一方、実装は、たとえばC99言語における、ある種の丸め機能についての標準的な丸めモードに従ってもよい。
【0036】
諸実施形態は、多くの異なるシステム型において実装されうる。ここで
図5を参照すると、本発明のある実施形態に基づくシステムのブロック図が示されている。
図5に示されるように、マルチプロセッサ・システム500はポイント・ツー・ポイント相互接続システムであり、ポイント・ツー・ポイントの相互接続550を介して結合された第一のプロセッサ570および第二のプロセッサ580を含む。
図5に示されるように、プロセッサ570および580のそれぞれは、第一および第二のプロセッサ・コア(すなわち、プロセッサ・コア574aおよび574bならびにプロセッサ・コア584aおよび584b)を含むマルチコア・プロセッサであってもよい。コアのそれぞれが、本発明の実施形態に基づいて、ISAレベルの命令に応じて丸め処理を実行しうることを注意しておく。
【0037】
第一のプロセッサ570はさらに、ポイント・ツー・ポイントの(P-P)インターフェース576および578を含む。同様に、第二のプロセッサ580はP-Pインターフェース586および588を含む。
図5に示されるように、メモリ・コントローラ・ハブ(MCH)
572および582はプロセッサをそれぞれのメモリ、すなわちメモリ532およびメモリ534に結合させる。これらのメモリはそれぞれのプロセッサにローカルに取り付けられたメイン・メモリの部分であってもよい。
【0038】
第一のプロセッサ570および第二のプロセッサ580は、それぞれP-P相互接続552および554を介してチップセット590に結合されうる。
図5に示されるように、チップセット590はP-Pインターフェース594および598を含む。さらに、チップセット590は、チップセット590を高性能グラフィック・エンジン538と結合するインターフェース592を含む。ある実施形態では、グラフィック・エンジン538をチップセット590に結合させるために、先進グラフィック・ポート(AGP: Advanced Graphics Port)バス539が使用されうる。AGPバス539は、米国カリフォルニア州サンタクララのインテル・コーポレイションによって1998年5月4日に発表された、加速されたグラフィック・ポート・インターフェース(Accelerated Graphics Port Interface)規格、第2.0版に準拠してもよい。あるいはまた、ポイント・ツー・ポイント相互接続539がこれらのコンポーネントを結合してもよい。
【0039】
次いで、チップセット590はインターフェース596を介して第一のバス516に結合されうる。ある実施形態では、第一のバス516は、PCIローカル・バス規格、プロダクション・バージョン、第2.1版、1995年6月、によって定義されるような周辺コンポーネント相互接続(PCI: Peripheral Component Interconnect)バスまたはPCIエクスプレス(PCI Express(商標))バスまたは他の第三世代の入出力(I/O)相互接続バスであってもよい。ただし、本発明の範囲はそのように限定されるものではない。
【0040】
図5に示されるように、さまざまなI/O装置514が、第一のバス516を第二のバス520に結合するバス・ブリッジ518とともに、第一のバス516に結合されうる。ある実施形態では、第二のバス520は低ピン数(LPC: low pin count)バスであってもよい。第二のバス520にはさまざまな装置が結合されうる。それには、ある実施形態ではたとえば、キーボード/マウス522、通信装置526およびコード530を含みうるディスク・ドライブまたは他の大容量記憶装置といったデータ記憶ユニット528が含まれる。さらに、オーディオI/O524が第二のバス520に結合されていてもよい。他のアーキテクチャが可能であることを注意しておく。たとえば、
図5のポイント・ツー・ポイント・アーキテクチャの代わりに、システムはマルチドロップ・バスまたは他のそのようなアーキテクチャを実装してもよい。
【0041】
実施形態は、コードにおいて実装されてもよく、記憶媒体上に記憶されてもよい。記憶媒体がその上に記憶された命令を有し、該命令が、システムが該命令を実行するようプログラムするために使用されるのである。記憶媒体は、これに限られないが、フロッピー(登録商標)ディスク、光ディスク、コンパクト・ディスク読み出し専用メモリ(CD-ROM)、書き換え可能型コンパクト・ディスク(CD-RW)および光磁気ディスクを含む任意の型のディスク、読み出し専用メモリ(ROM)、動的ランダム・アクセス・メモリ(DRAM)、静的ランダム・アクセス・メモリ(SRAM)といったランダム・アクセス・メモリ(RAM)、消去可能なプログラム可能型読み出し専用メモリ(EPROM)、フラッシュメモリ、電気的に消去可能なプログラム可能型読み出し専用メモリ(EEPROM)といった半導体デバイス、磁気カードもしくは光カードまたは電子的な命令を記憶するために好適な他の任意の型の媒体を含みうる。
【0042】
本発明について、限られた数の実施形態に関して記載してきたが、当業者はそうした実施形態からの数多くの修正および変形を認識するであろう。付属の請求項は本発明の真の精神および範囲にはいるそのようなすべての修正および変形をカバーすることが意図されている。
【0043】
特願2009−528536の出願当初の特許請求の範囲は次のとおり。
〔請求項1〕
プロセッサにおいて丸め命令および直接値(immediate value)を受領する段階と;
前記直接値の丸めモード・オーバーライド指標がアクティブであるかどうかを判定する段階と;
もしアクティブであれば、前記丸め命令に応答して、前記直接値に記述されている丸めモードに従って前記プロセッサの浮動小数点ユニットにおいてソース・オペランドに対して丸め処理を実行する段階とを有する、
方法。
〔請求項2〕
前記直接値の前記丸めモード・オーバーライド指標がアクティブでなければ、前記丸め命令に応答して、前記プロセッサの制御レジスタ内に記述されている丸めモードに従って前記丸め処理を実行する段階をさらに有する、請求項1記載の方法。
〔請求項3〕
前記丸め処理の実行の間、デフォルト丸めモードを含む制御レジスタの値を維持することをさらに含む、請求項1記載の方法。
〔請求項4〕
丸められた結果を得るための第一のオペランドに対する丸め命令の実行を、前記丸め命令に関連付けられた制御フィールド内にオーバーライド指標が存在していれば、前記丸め命令に関連付けられた制御フィールド内に記述されている丸めモードに従って行う手段と;
前記実行を行う手段に結合された記憶手段とを有する、
システム。
〔請求項5〕
前記丸め命令および前記制御フィールドを受領し、前記制御フィールドの丸めモード部分を復号し、前記オーバーライド指標が存在していれば前記丸めモード部分から制御信号を生成する選択器手段をさらに有する、請求項4記載のシステム。
〔請求項6〕
前記実行を行う手段が、前記選択器手段からの制御信号に応答して前記第一のオペランドに対して丸め処理を実行する浮動小数点ユニットを有し、前記第一のオペランドが限られた精度の値をもつ、請求項5記載のシステム
〔請求項7〕
前記実行を行う手段のためのデフォルト丸めモードを記憶する制御レジスタをさらに有し、前記実行を行う手段が前記丸め命令の実行を、前記制御フィールド内に前記オーバーライド指標が存在していれば、前記デフォルト丸めモードとは異なる丸めモードに従って行う、請求項4記載のシステム。
〔請求項8〕
前記実行を行う手段が前記丸め命令を前記異なる丸めモードに従って実行することを、前記デフォルト丸めモードが前記制御レジスタに記憶されている間に行う、請求項7記載のシステム。
〔請求項9〕
前記実行を行う手段が前記異なる丸めモードを実行するのを、前記第一のオペランドが閾値以下である場合には前記第一のオペランドへの第一の値の加算を介して、そうでない場合には前記第一のオペランドへの第二の値の加算を介して行い、前記第一の値は前記第二の値の浮動小数点バージョンの正負を変えたものである、請求項7記載のシステム。
〔請求項10〕
命令が記憶されている機械可読媒体であって、前記命令は機械によって実行されたときに、該機械に:
前記命令によって規定されるモードに従って丸め処理を実行する段階と;
前記丸め命令の結果を第一の記憶領域に記憶する段階とを有する方法を実行させる、
機械可読媒体。
〔請求項11〕
前記モードが、制御レジスタに記憶されているデフォルト丸めモードとは異なる丸めモードに従って前記丸め処理の実行を引き起こすものである、請求項10記載の機械可読媒体。
〔請求項12〕
前記方法がさらに、前記命令に関連付けられた直接値の一部分を復号する段階をさらに有し、前記直接値の前記一部分は複数の丸めモードのうちの一つに対応する符号(code)を含む、請求項10記載の機械可読媒体。
〔請求項13〕
第一の単一命令複数データ(SIMD)オペランドの少なくとも一つの要素を丸める第一の命令を、前記第一の命令によって規定される、複数のモードのうちの一つのモードに従って実行する実行論理を有する、
プロセッサ。
〔請求項14〕
前記第一の命令および前記第一の命令に関連付けられた直接データ要素を受領し、前記直接データ要素のオーバーライド指標に基づいて、デフォルト丸めモードがオーバーライドされるべきかどうかを判定するコントローラをさらに有する、請求項13記載のプロセッサ。
〔請求項15〕
前記実行論理が、前記デフォルト丸めモードがオーバーライドされるべきである場合、前記直接データ要素の丸めモードに従って前記少なくとも一つの要素を丸める、請求項14記載のプロセッサ。
〔請求項16〕
前記第一の命令は、前記実行論理のデフォルト丸めモード以外の丸めモードを示すオーバーライド指標と、前記複数のモードのうちの前記モードを示すモード・フィールドとを含む、請求項13記載のプロセッサ。
〔請求項17〕
前記複数のモードのうちの少なくとも一つのモードは前記実行論理の制御レジスタに記憶されているデフォルト丸めモードとは異なる、請求項13記載のプロセッサ。
〔請求項18〕
前記複数のモードのうちの前記少なくとも一つのモードに従っての前記第一の命令の実行の間、前記デフォルト丸めモードが前記制御レジスタ内に記憶されたままである、請求項17記載のプロセッサ。
〔請求項19〕
前記実行論理が前記少なくとも一つの要素を丸めて整数の値をもつ浮動小数点値にし、前記第一のSIMDオペランドは限られた精度の浮動小数点値を含む、請求項13記載のプロセッサ。
〔請求項20〕
前記実行論理が前記少なくとも一つの要素を丸めて整数値にし、前記第一のSIMDオペランドは浮動小数点値を含む、請求項13記載のプロセッサ。