(57)【要約】      （修正有）【課題】主要なデータが流される先であるデータサイズ内にフィットするかどうかを判定するための回路を有するプロセッサを提供する。【解決手段】処理コア１００は、相対的に大きなサイズのデータタイプから相対的に小さなサイズのデータタイプへのデータフロー検出に応答し、データフローによってオーバーフローエラーが結果的に生じるかどうかを試験する命令を実行する。データフローによってオーバーフロー状態が生じないと命令が判定した場合には、命令の結果は、オーバーフロー警告に対応しない。オーバーフロー状態が生じると命令が判定した場合には、なんらかの種類のオーバーフロー警告に対応する。【選択図】図１
2014182825.tif 000002
【特許請求の範囲】
【請求項１】
命令実行パイプライン内の機能ユニットであって、相対的に大きなソースデータサイズからの主要なデータが、前記主要なデータが流される先である相対的に小さなデータサイズ内にフィットするかどうかを判定するための回路を有する機能ユニット
を有するプロセッサ。
【請求項２】
前記回路は、前記相対的に大きなデータサイズの最上位ビットのビット位置から始まり、前記相対的に小さなデータサイズのビット範囲内のビット場所までのビットが、すべて等しいかどうかを確認する比較器を含む請求項１に記載のプロセッサ。
【請求項３】
前記相対的に小さなデータサイズのビット範囲内の前記ビット場所は、前記相対的に小さなデータサイズのビット範囲の最上位のビット位置に位置している請求項２に記載のプロセッサ。
【請求項４】
前記回路は、前記相対的に大きなデータサイズの最上位ビットのビット位置から始まり、前記相対的に小さなデータサイズの最上位ビットの直後のビット場所までのビットが、すべて等しいかどうかを確認する比較器を含む請求項１に記載のプロセッサ。
【請求項５】
前記回路は、前記相対的に大きなデータサイズの最上位ビットのビット位置から始まり、
ｉ）前記相対的に小さなデータサイズの最上位ビットの直後のビット場所、又は、
ｉｉ）前記相対的に小さなデータサイズのビット範囲内の最上位ビット場所、
のうちのいずれかまでのビットが、すべて等しいかどうかを確認する比較器を含み、
この場合に、ｉ）又はｉｉ）のうちのいずれを利用するかは、情報に依存する請求項１に記載のプロセッサ。
【請求項６】
前記情報は、前記機能ユニットによって実行される命令の命令フォーマット内のコンテンツから判定される請求項５に記載のプロセッサ。
【請求項７】
前記情報は、前記プロセッサの制御レジスタ空間から判定される請求項５に記載のプロセッサ。
【請求項８】
前記制御レジスタ空間は、モデル固有のレジスタ空間である請求項７に記載のプロセッサ。
【請求項９】
前記制御レジスタ空間は、スレッド用のコンテキスト情報を保持するためのものである請求項７に記載のプロセッサ。
【請求項１０】
前記主要なデータは、ベクトルの要素内に存在している請求項１から９の何れか１項に記載のプロセッサ。
【請求項１１】
前記プロセッサは、論理回路を収容しており、前記論理回路は、前記主要なデータを前記相対的に大きなソースデータサイズから前記相対的に小さなデータサイズに流す第２命令を検出し、且つ、前記命令を生成すると共に命令ストリーム内において前記第２命令の前に前記命令を挿入する請求項１から１０の何れか１項に記載のプロセッサ。
【請求項１２】
命令実行パイプライン内の命令を実行するステップであって、相対的に大きなデータサイズ内の主要なデータが相対的に小さなデータサイズ内にフィットすることをチェックするステップを含み、前記命令の結果は、前記主要なデータが前記相対的に小さなデータサイズ内にフィットしない場合には、警告であり、且つ、前記主要なデータが前記相対的に小さなデータサイズ内にフィットする場合には、警告ではない、ステップ
を有する方法。
【請求項１３】
前記主要なデータは、ベクトル内に存在している請求項１２に記載の方法。
【請求項１４】
前記警告は、フラグである請求項１２または１３に記載の方法。
【請求項１５】
前記警告は、例外である請求項１２または１３に記載の方法。
【請求項１６】
前記命令実行パイプライン内において、前記主要なデータを前記相対的に大きなデータサイズから前記相対的に小さなデータサイズに移動させる第２命令を検出するステップと、
これに応答して、前記命令を生成し、且つ、前記第２命令の前に前記命令を挿入するステップと、
を更に有する請求項１２から１５の何れか１項に記載の方法。
【請求項１７】
プロセッサによって処理された際に前記プロセッサに方法を実行させる命令をその上部に保存された状態において有するプログラムであって、
前記方法は、
相対的に大きなデータサイズから相対的に小さなデータサイズに主要なデータを移動させる処理を検出するステップと、
前記処理が命令ストリーム内において実行される前に実行される命令を前記命令ストリームに挿入するステップと、
を有すし、
前記命令は、前記移動と関連するオーバーフロー状態についてチェックする、プログラム。
【請求項１８】
前記主要なデータは、ベクトル内に存在している請求項１７に記載のプログラム。
【請求項１９】
前記命令の命令フォーマットは、前記命令を実行する機能ユニットに、前記相対的に小さなデータサイズのサイズについて通知する請求項１７または１８に記載のプログラム。
【請求項２０】
前記命令によって生成される警告を処理するためのプログラムコードを有する請求項１７から１９の何れか１項に記載のプログラム。
【請求項２１】
命令実行パイプラインを有するプロセッサと、
前記プロセッサのメモリコントローラに結合されたメモリと、
を有し、
前記命令実行パイプラインは、機能ユニットを有し、前記機能ユニットは、相対的に大きなソースデータサイズからの主要なデータが前記主要なデータが流される先である相対的に小さなデータサイズ内にフィットするかどうかを判定するための回路を有する
演算システム。
【請求項２２】
前記回路は、前記相対的に大きなデータサイズの最上位ビットのビット位置から始まる前記相対的に小さなデータサイズのビット範囲内のビット場所までのビットが、すべて等しいかどうかを確認する比較器を含む請求項２１に記載の演算システム。
【請求項２３】
前記相対的に小さなデータサイズのビット範囲内のビット場所は、前記相対的に小さなデータサイズのビット範囲の最上位のビット位置に位置している請求項２１または２２に記載の演算システム。
【請求項２４】
前記回路は、前記相対的に大きなデータサイズの最上位ビットのビット位置から始まる前記相対的に小さなデータサイズの最上位のビットの直後のビット場所までのビットが、すべて等しいかどうかを確認する比較器を含む請求項２１に記載の演算システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の分野は、一般に、演算科学に関し、且つ、更に詳しくは、オーバーロードチェックを実行する命令に関する。
【背景技術】
【０００２】
図１は、半導体チップ上の論理回路によって実装された処理コア１００の概略図を示している。この処理コアは、パイプライン１０１を含む。パイプラインは、プログラムコード命令を完全に実行するために必要とされるマルチステッププロセスにおいて特定のステップを実行するようにそれぞれが設計された複数のステージから構成されている。これらは、通常、少なくとも、１）命令のフェッチ及び復号化、２）データのフェッチ、３）実行、４）書戻しを含む。実行ステージは、（例えば、上述のステップ１）などの）１つ又は複数の先行するステージにおいてフェッチ及び復号化された命令によって識別される特定の演算を（例えば、上述のステップ２）などの）別の先行するステージにおいて同一の命令によって識別されると共にフェッチされたデータに対して実行する。演算の対象となるデータは、通常、（汎用）レジスタ保存空間１０２からフェッチされる。又、演算が完了した際に生成される新しいデータは、通常、（例えば、上述のステージ４）などの）レジスタ保存空間に「書戻し」される。
【０００３】
実行ステージと関連する論理回路は、通常、その独自の演算の一意のサブセットを実行するようにそれぞれが設計された複数の「実行ユニット」又は「機能ユニット」１０３＿１〜１０３＿Ｎから構成されている（例えば、第１機能ユニットは、整数の数学演算を実行し、第２機能ユニットは、浮動小数点命令を実行し、第３機能ユニットは、キャッシュ／メモリとの間においてロード／ストア演算を実行し、以下同様である）。すべての機能ユニットによって実行されるすべての演算の集合体は、処理コア１００によってサポートされる「命令セット」に対応している。
【０００４】
コンピュータ科学の分野においては、「スカラー」と「ベクトル」という２つのタイプのプロセッサアーキテクチャが広く認識されている。スカラープロセッサは、データの単一の組に対して演算を実行する命令を実行するように設計されており、ベクトルプロセッサは、データの複数の組に対して演算を実行する命令を実行するように設計されている。図２Ａ及び図２Ｂは、スカラープロセッサとベクトルプロセッサの間の基本的な相違点を明示する比較例を提示している。
【０００５】
図２Ａは、単一のオペランドセットであるＡ及びＢを１つにＡＮＤ演算し、単一の（又は、「スカラー」の）結果Ｃ（即ち、Ａ．ＡＮＤ．Ｂ＝Ｃ）を生成するスカラーＡＮＤ命令の一例を示している。対照的に、図２Ｂは、Ａ／ＢとＤ／Ｅという２つのオペランドセットを（例えば、同時に並行して）それぞれ１つにＡＮＤ演算してベクトルの結果Ｃ、Ｆ（即ち、Ａ．ＡＮＤ．Ｂ＝Ｃ及びＤ．ＡＮＤ．Ｅ＝Ｆ）を生成するベクトルＡＮＤ命令の一例を示している。用語の観点において、「ベクトル」とは、複数の「要素」を有するデータ要素である。例えば、ベクトルＶ＝Ｑ，Ｒ，Ｓ，Ｔ，Ｕは、Ｑ、Ｒ、Ｓ、Ｔ、及びＵという５つの異なる要素を有する。例示用のベクトルＶの「サイズ」は、５である（その理由は、ベクトルＶが５つの要素を有しているためである）。
【０００６】
又、図１は、汎用レジスタ空間１０２とは別のベクトルレジスタ空間１０７の存在をも示している。具体的には、汎用レジスタ空間１０２は、名目上、スカラー値を保存するために使用される。従って、実行ユニットうちのいずれかがスカラー演算を実行する際には、それらの実行ユニットは、名目上、汎用レジスタ保存空間１０２から呼び出されたオペランドを使用する（と共に、結果を汎用レジスタ保存空間１０２に書き戻す）。対照的に、実行ユニットのうちのいずれかがベクトル演算を実行する際には、それらの実行ユニットは、名目上、ベクトルレジスタ空間１０７から呼び出されたオペランドを使用する（と共に、結果をベクトルレジスタ空間１０７に書き戻す）。同様に、メモリの異なる領域をスカラー値及びベクトル値の保存のために割り当ててもよい。
【０００７】
又、機能ユニット１０３＿１〜１０３＿Ｎへの及びこれらからの個々の入力及び出力に位置したマスキング論理１０４＿１〜１０４＿Ｎ及び１０５＿１〜１０５＿Ｎの存在にも留意されたい。様々な実装形態においては、ベクトル演算の場合には、実際には、これらの層のうちの１つのみが実装されているが、これは、厳格な要件ではない（図１には図示されていないが、恐らくは、ベクトル動作を実行せず、スカラー演算のみを実行する実行ユニットは、マスキング層を有する必要がない）。マスキングを利用するベクトル命令の場合には、入力マスキング論理１０４＿１〜１０４＿Ｎ及び／又は出力マスキング論理１０５＿１〜１０５＿Ｎを使用することにより、事実上、そのベクトル命令の演算の対象となる要素を制御してもよい。この場合には、マスクベクトルが、（例えば、ベクトルレジスタ保存空間１０７から読み取られる入力オペランドベクトルと共に）マスクレジスタ空間１０６から読み取られ、且つ、マスキング論理層１０４、１０５のうちの少なくとも１つに対して提示される。
【０００８】
ベクトルプログラムコードを実行している際には、それぞれのベクトル命令は、フルデータワードを必ずしも必要としない。例えば、いくつかの命令用の入力ベクトルは、８つの要素のみであってもよく、その他の命令用の入力ベクトルは、１６個の要素であってもよく、その他の命令用の入力ベクトルは、３２個の要素であってもよく、以下同様である。従って、マスキング層１０４／１０５は、様々な命令における様々なベクトルサイズに影響を及ぼすように、特定の命令について適用されるフルベクトルデータワードの要素の組を識別するべく使用される。通常、それぞれのベクトル命令ごとに、マスクレジスタ空間１０６内に維持されている特定のマスクパターンを命令によって呼び出し、マスクレジスタ空間からフェッチし、且つ、マスク層１０４／１０５のいずれか又は両方に供給することにより、特定のベクトル演算用の要素の正しい組を「有効化」している。
【図面の簡単な説明】
【０００９】
【図１】命令実行パイプラインの一実施形態を示す。
【図２Ａ】ベクトル処理に関係するものである。
【図２Ｂ】ベクトル処理に関係するものである。
【図３】オーバーロード状態についてチェックする命令を使用する方法を示す。
【図４】オーバーロード状態が存在するかどうかを判定する方法を示す。
【図５】オーバーロード状態が存在するかどうかを判定する別の方法を示す。
【図６】オーバーロード状態についてチェックするように設計された機能ユニットの一実施形態を示す。
【図７】プロセッサの一実施形態を示す。
【発明を実施するための形態】
【００１０】
当技術分野において理解されているように、ソフトウェアアルゴリズムは、一般に、変数に対して且つ変数の観点において実行される動作を表している。ソフトウェアがデータを実際に処理することができように、事実上、数値データが変数に挿入される。Ｃなどのコンピュータソフトウェアソースコード言語においては、変数は、様々な変数「タイプ」のうちの１つ（例えば、整数や浮動小数点など）であるものとして宣言される。変数のデータを保持するために必要とされるメモリ及び／又はレジスタ空間の単位（例えば、３２ビットや６４ビットなど）が変数タイプの定義の一部を構成してもよい。
【００１１】
ソフトウェアプロセス自体は、先行するデータ計算の結果が後続のデータ計算に入力される１つ又は複数の「データフロー」として見なすことができる。場合によっては、第１タイプの変数を伴うプロセスが、異なるタイプの変数を伴うプロセスに入力されることになる。「相対的に大きな」データタイプが「相対的に小さな」データタイプに入力される場合に、問題が生じる可能性がある。例えば、６４ビットの値が、わずかに３２ビットのサイズを有するものとして定義されている変数に入力される場合には、「オーバーフローエラー」が結果的に生じることになる。
【００１２】
データ値が、そのサイズにおいて最大状態にあり、且つ、データ値を増分する試みが行われた場合には、別のタイプのオーバーフローエラーが発生する可能性がある。例えば、２×（２＾１６）という値は、１６個の１として表現される。この値が、１６ビットのデータユニットサイズにおいて維持された場合には、事実上、データユニットサイズの最大容量に到達することになる。この値に対してこれを増分する数学演算（例えば、＋１の演算が値に対して実行されるもの）を実行した場合には、オーバーロードエラーが結果的に生じることになり、その理由は、利用可能ではない第１７番目のビットに値を桁上がりさせる必要があるからである。
【００１３】
残念ながら、プログラマは、通常、自身のコードの個々の変数のデータ値の可能な上限をチェックしない。従って、オーバーフローエラーは、それなりに一般的な存在である。更に悪いことには、マルウェアは、特に、このようなエラーの生成を追及する可能性がある。これらの課題に対処するべく、プログラマは、所謂、セーフ整数（ｓａｆｅ  ｉｎｔｅｇｅｒ）又はその他の強いタイピング型の言語（ｓｔｒｏｎｇｌｙ  ｔｙｐｅｄ  ｌａｎｇｕａｇｅ）を使用するという選択肢を有する。セーフ整数ライブラリを使用する際には、演算は、すべての演算の後に、オーバーフロー及びアンダーフローについてチェックされる。新しい分岐及びサブルーチン全体をプログラムに挿入しなければならないことから、これには、性能の犠牲が伴う。
【００１４】
図３は、オーバーフロー状態が存在するかどうかを判定するように設計されたプロセッサの命令セットアーキテクチャ（Ｉｎｓｔｒｕｃｔｉｏｎ  Ｓｅｔ  Ａｒｃｈｉｔｅｃｔｕｒｅ：ＩＳＡ）内の「オーバーフローチェック」命令の使用を利用した改善された方式を示している。図３の方法によれば、相対的に大きなサイズのデータタイプから相対的に小さなサイズのデータタイプへのデータフローが検出されている３０１。この場合には、第１の相対的に大きなデータサイズの単一のソースオペランド又は複数のソースオペランドから相対的に小さなデータユニットサイズから構成されたデスティネーションへのブロードキャスト、並べ替え、シャッフルなどを実行する特定のタイプの命令がプロセッサＩＳＡ内に存在してもよい。例えば、ブロードキャスト命令は、３２ビットのソースオペランドの下位の半分を２×１６のベクトル結果のそれぞれの１６ビットの要素にブロードキャストしてもよい。
【００１５】
検出に応答し、データフローによってオーバーフローエラーが結果的に生じるかどうかを試験する「オーバーフローチェック」命令が実行されている３０２。データフローによってオーバーフロー状態が生じないと命令が判定した場合には、命令の結果は、オーバーフロー警告に対応するものではない３０３。データフローによってオーバーフロー状態が生じることになると命令が判定した場合には、命令の結果は、なんらかの種類のオーバーフロー警告に対応することになる３０４。例えば、警告３０４は、例外、割込み、又はフラグの形態をとってもよい（以下においては、利便を目的として、例外又は割込みを例外と呼ぶこととする）。
【００１６】
例外とは、基本的に、プログラムフローを自動的にエラーハンドラに対して送付することになるエラー状態のことである。エラーハンドラとは、様々な種類のエラーを処理するように特別に設計されたソフトウェア及び／又はハードウェアコンポーネントである。この場合には、オーバーフロー状態によって生成される例外は、この特定のタイプのエラーに適用される特定の是正措置を識別するべくエラーハンドラが使用するなんらかの種類の識別子を有することになる。
【００１７】
フラグは、通常、命令実行パイプラインの制御レジスタ空間内のビットとして実装される。この場合には、異なる状態を識別するための異なるフラグが制御レジスタ空間内に存在しており、これらの状態のうちのいくつかは、（例えば、ゼロに等しかったり、ゼロ未満であるなどのように）必ずしもエラー状態ではない。この特定の方式においては、フラグビットを制御レジスタ空間内において予約することにより、相対的に大きなデータタイプを相対的に小さなデータタイプに入力することができるかどうかを判定するように設計された命令によってオーバーフローが検出されたかどうかを通知している。この場合には、オーバーフローチェック命令と相対的に大きなデータを相対的に小さなデータに入力する命令の間に条件付き分岐命令を自動的に挿入してもよい。この条件付き分岐命令は、フラグが設定された場合に、相対的に大きなデータを相対的に小さなデータに入力する命令を実行する代わりに、オーバーフロー状態命令及びジャンププログラムの実行によってなんらかのその他の場所に関連付けられたフラグを調べるように設計されてもよい。
【００１８】
相対的に大きなサイズから相対的に小さなデータサイズへのデータフローの検出３０１は、実行前の時点において、コンパイラにより、或いは、実行時において、ハードウェア内において、実行してもよい。前者のケースにおいては、コンパイラは、相対的に大きなものから相対的に小さなものへのデータフローを識別し、且つ、オーバーフローチェック命令を相対的に大きなものから相対的に小さなものへのデータフローの前に挿入する。後者のケースにおいては、ハードウェアは、動作中に、相対的に大きなものから相対的に小さなものへのデータフローを検出する。データを相対的に大きなデータサイズから相対的に小さなデータサイズに本質的に移動させる命令の場合には、コンパイラ及び／又はハードウェアは、その命令の存在を認識し、且つ、事実上、命令ストリーム内において、その命令の前に、オーバールック命令を挿入する。或いは、この代わりに、コンパライのコード生成プロセスは、単純に、相対的に大きなデータユニットサイズから相対的に小さなデータユニットサイズへのフローを生成する命令が必要とされる任意の時点において、第１の先行するオーバールックチェック命令と、相対的に大きなものから相対的に小さなものへのデータフロー命令である第２の後続の命令と、という２つの命令を自動的に挿入してもよい。コンパイラの場合には、この挿入は、オブジェクトコード内において明示的に実施してもよい。
【００１９】
ハードウェアの場合には、命令実行パイプラインは、命令キューを調査すると共に相対的に大きなデータユニットから相対的に小さなデータユニットへのフローを生成する命令の存在を検出するスヌープ回路を命令フェッチステージ内に有してもよい。これに応答し、命令フェッチステージ内の特別な回路がオーバーロードチェック命令を生成し、このオーバーロードチェック命令が、検出された命令のデータ入力オペランドのコンテンツを仮定し、且つ、命令キュー内において、検出された命令の前に、オーバーロードチェック命令を挿入する。
【００２０】
図４は、オーバーロード検出命令の動作方法を提示している。図４において観察されるように、この命令は、オペランド内の主要なデータの最上位ビットが結果のデータサイズ内の２番目の最上位ビットを上回っていないかどうかを判定している４０１。例えば、結果が１６ビットである場合には、命令は、入力オペランドの主要なデータが１６ビットのうちの１６番目に到達しているかどうかを判定する。判定結果が肯定的である場合には、オーバーロード警告が生成される。判定結果が否定的である場合には、オーバーロードエラー警告は生成されない。この特定のプロセスは、基本的に、入力オペランドの主要なデータの最上位ビットが使用されていないことの確認を追及していることに留意されたい。このように振る舞うことにより、この命令は、主要なデータの後続の増分を許容している。即ち、オーバーロードチェック命令は、主要なデータについて後続の増分が実行された場合に、その主要なデータがその新しい相対的に小さなデータストア割当内に位置するのに伴って、オーバーロードエラーが結果的に生じないことを保証している。
【００２１】
図５は、結果内の最上位ビットが入力オペランドの主要なデータによって消費されないかどうかを判定する方法の一実施形態を示している。図５において観察されるように、命令は、結果内の最上位ビットに対応するビット場所から始まる入力オペランドの最上位ビットまでのすべての入力オペランドのビット値が等しいかどうかを確認している５０１。図５は、３２ビットの入力オペランド５０２の特定の一例を示しており、この場合には、その最下位の１６ビットが１６ビットの結果５０３内にマッピングされている。上述のプロセス５０１は、結果内の最上位ビット（１６番目のビット）５０４と、入力オペランド内の最上位ビット（３２番目のビット）５０５と、を識別し、且つ、これらのビットと、その間のすべてのビットが、等しいことをチェックしている。図５の例において観察されるように、これらのすべてのビットは、等しくなっており、従って、オーバーロードエラー警告はトリガされないであろう。
【００２２】
この特定の方法は、負の数を表現するための相補的な表記法を使用しているプロセッサの場合に有効である。この場合には、（図５の例において観察されるように）、正の主要ではない桁は、０として表現され、負の主要ではない桁は、１として表現される。２つのマーキングされたビット場所の間の桁の等価性についてチェックする上述の特定の方法は、ビットが１であるのか又は０であるのかについては不可知であり、且つ、従って、入力オペランドが正の数であるのか又は負の数であるのかについても、不可知である。
【００２３】
図６は、命令実行パイプライン機能ユニットの論理設計６００を示している。図６において観察されるように、機能ユニットは、幅がＮである比較器６０１を含み、この場合に、Ｎは、比較を要することになるビットの最大数に対応している。この場合には、機能ユニット６００は、いくつかの異なる相対的に大きなデータサイズから相対的に小さなデータサイズへのフローに関するオーバーロードチェックをサポートしているものと仮定されている。等価性について比較される入力ビットの数に対応した比較器６０１の入力幅は、実行されている特定の相対的に大きなデータサイズから相対的に小さなデータサイズへのフローに応じて構成される。
【００２４】
例えば、一実施形態においては、機能ユニットは、１）６４ビットデータ値から３２ビットデータ値、２）６４ビットデータ値から１６ビットデータ値、並びに、３）６４ビットデータ値から８ビットデータ値のうちのそれぞれに関するオーバーロードチェックをサポートしている。６４ビットから３２ビットへのフローは、３３ビット幅の比較に対応しており、６４ビットから１６ビットへのフローは、４９ビット幅の比較に対応しており、且つ、６４ビットから８ビットへのフローは、５７ビット幅の比較に対応している。この場合には、Ｎは、５７に対応することになり、その理由は、機能ユニットが常に等価性をチェックする必要があるビットの最大数が５７であるからである。
【００２５】
従って、６４ビットデータから８ビットデータへのフローについてオーバーロードチェックを実行するように機能ユニットが求められた際には、機能ユニットは、比較器６０１に対するすべてのＮ＝５７入力を有効化することになる。６４ビットから３２ビット及び６４ビットから１６ビットへのオーバーロードチェックの場合には、機能ユニットは、比較器の入力のうちの３３及び６９をそれぞれ有効化することになる。有効化対象の比較器入力は、入力オペランド６０４の最上位ビット位置から入力オペランドの最下位ビット位置に向かって計数される。この場合に、一実施形態においては、命令のｏｐｃｏｄｅ及び／又は即値オペランドに応答する読出し専用メモリ（ＲＯＭ）６０２内のマイクロコードを使用し、比較器６０１に対する個々の入力用の有効化入力６０３＿１〜６０３＿Ｎを設定している。例えば、６４ビットから８ビットへのオーバーロードチェックを実行する必要があると命令のｏｐｃｏｄｅ及び／又は即値オペランドが示している場合には、ＲＯＭ６０２内のマイクロコードは、比較器６０１のすべてのＮ＝５７入力を有効化するように機能する。比較器６０１は、上述のように、オーバールックチェックが失敗した場合には、例外を生成するか又はフラグを設定する。
【００２６】
上述の説明は、６４ビット整数又は３２ビット整数などの単一のスカラー入力オペランドのオーバーロードチェックに関するものであったが、様々なベクトル命令も、相対的に大きなデータサイズから相対的に小さなデータサイズへのフローの演算を実行してもよい。例えば、並べ替え又はシャッフル命令は、入力ベクトルを入力オペランドとして受け付けてもよく、且つ、その要素が入力ベクトルの要素のうちの１つ又は複数の要素のなんらかの種類の再構成物に対応している（これらに対して実行されたなんらかのブール論理及び／又は数学演算には対応してはいない）出力ベクトルを基本的に生成してもよい。例えば、並べ替え命令は、並べ替え命令の論理が実装されるように設計された固定パターンに従って、入力ベクトル要素を強制的に再構成してもよいであろう。即値オペランドにより、異なる固定パターンを呼び出してもよい。シャッフル命令は、第１及び第２入力オペランドを受け付けてもよく、この場合に、第２オペランドのそれぞれの要素は、結果内の同一の方式によって配置された要素に対応しており、且つ、第１オペランド内の要素のうちの１つを、その結果の要素場所について選択されるべき要素として、識別している。この場合に、第２要素は、図１との関係において上述したマスクに類似している。これらのタイプの命令のいずれかは、その要素がこれらの要素よりも小さなサイズを有する結果を生成してもよい。
【００２７】
機能ユニット６００の論理回路は、ベクトル命令を想定するのみならず、結果内における選択のために選択された入力ベクトルの特定の要素をも想定する機能を含んでいると説明することができる。例えば、オーバーロードチェック命令が並べ替え命令の直前に挿入された場合には、オーバーロードチェック命令の命令フォーマットは、ｉ）並べ替えパターンを識別する並べ替え命令内の同一の即値オペランドと、ｉｉ）その要素が並べ替え命令の結果内に含まれている並べ替え命令用の入力ベクトルと、を含んでもよい。
【００２８】
この場合に、即値オペランドによって識別される固定パターンは、結果に包含されるように入力ベクトルのすべての要素を選択しなくてもよい。オーバーロード命令は、即値オペランドを検討して結果に出現するべき入力ベクトルの要素を識別すると共に上述の原理と合致したオーバーロードエラーについて選択された要素のそれぞれをチェックする論理を有するように設計される。
【００２９】
場合によっては、入力オペランドのデータ要素を並行して処理することができるように、例えば、処理対象の入力オペランドのそれぞれのベクトル要素ごとに１つの論理設計インスタンスを配置するなどのように、複数の同一の論理設計インスタンス６０４を単一の機能ユニット内に配置することもできよう。或いは、この代わりに、処理を要する設計要素の数よりも少ない数の設計インスタンスが存在している場合には、マイクロコードは、結果が少しずつ生成されるように、第１要素が処理された後に、同一の機能ユニットを通じて、第２要素を処理することができる。
【００３０】
シャッフル命令の場合には、機能ユニット６００は、相対的に小さなサイズに入力するべき特定のデータ要素を判定することができるように、両方の入力ベクトル（選択されるべきソース要素を定義する第１の入力ベクトル及びソース要素を収容する第２の入力ベクトル）を受け取る。複数の論理設計インスタンスは、これらのデータ要素のいくつか又はすべてを並行して処理することができる。すべての要素ではなく一部の要素が並行して処理される程度に、単一の設計インスタンスは、結果が少しずつ形成されるように、一連のソース要素を処理することができる。
【００３１】
一実施形態においては、例えば、上述のように、例外又はフラグであってもよいオーバーロードチェック命令の結果は、ベクトルの並べ替え又はシャッフル命令の場合に、１つ又は複数の不都合なデータ要素を識別する。例えば、最大で３２個の要素を有するソース要素入力ベクトルを受け付ける並べ替え及び／又はシャッフル命令をＩＳＡがサポートしている場合には、オーバーロード試験に合格しないソース要素を別個に識別するために使用される３２個のフラグビットが制御レジスタ空間内に存在してもよい。相対的に少ない数のデータ要素を生成する並べ替え／ベクトル命令の場合には、更に少ない数のフラグビットが使用されることになろう。類似のデータ構造（例えば、それぞれの３２ビットが１つの並べ替えに対応しているもの）を例外に伴って合格させることができる。
【００３２】
機能ユニットがオーバーロードチェックを実行する程度にまで、命令実行パイプラインは、適切なオペランドを機能ユニットに対して入力できなければならない。例えば、機能ユニットがスカラー命令とベクトル命令の両方を試験する必要がある場合には、命令実行パイプラインは、スカラーレジスタ空間とベクトルレジスタ空間の両方を機能ユニットに対して結合する必要がある。
【００３３】
上述の実施形態は、相対的に小さなターゲットデータサイズの最上位ビットが相対的に大きなソースデータサイズ内の主要なデータによって消費されないことを保証することにより、増分によって生成されるオーバーロードエラーの防止を試みる考え方を対象としていた。その他の実施形態においては、主要なデータによる相対的に小さなターゲットデータサイズの（２番目の最上位ビットのみではなく）最上位ビットの消費がチェックによって許容されるように、この特定の保護を省略してもよい。これは、上述の説明との比較において１ビットだけ減少するように、幅がＮである比較器の入力幅の計算に対して影響を及ぼす。一実施形態においては、いずれの考え方を採用するのかについては、（命令の考え方の構成ごとに）命令フォーマットのｏｐｃｏｄｅ又は即値オペランド内において設定されるか、或いは、ハードウェアスレッドコンテンツレジスタ空間又はＭＳＲ（Ｍｏｄｅｌ  Ｓｐｅｃｉｆｉｃ  Ｒｅｇｉｓｔｅｒ）空間などのなんらかの形態のレジスタ空間内における設定により、スレッドごとに、又はプロセッサごとに、更にグローバルに、設定されている。
【００３４】
図７は、例示用のマルチコアプロセッサ７００のアーキテクチャを示している。図７において観察されるように、このプロセッサは、１）複数の処理コア７０１＿１〜７０１＿Ｎ、２）相互接続ネットワーク７０２、３）ＬＬＣ（Ｌａｓｔ  Ｌｅｖｅｌ  Ｃａｃｈｉｎｇ）システム７０３、４）メモリコントローラ７０４及び入出力ハブ７０５を含む。処理コアのそれぞれは、プログラムコード命令を実行する１つ又は複数の命令実行パイプラインを収容している。このような命令実行パイプラインのいずれか又はすべては、図１の説明と一貫性を有するベクトル命令の実行をサポートしてもよく、且つ、オーバーロードチェック命令を実行することができる機能ユニットを含んでもよいと共に、データを相対的に大きなデータサイズから相対的に小さなデータサイズに移動させる命令の検出に応答してオーバーロードチェック命令を命令ストリームに挿入する回路を含んでもよい。相互接続ネットワーク７０２は、コア７０１＿１〜７０１＿Ｎのそれぞれを、互いに、且つ、その他のコンポーネント７０３、７０４、７０５と、相互接続するように機能する。ＬＬＣ（Ｌａｓｔ  Ｌｅｖｅｌ  Ｃａｃｈｉｎｇ）システム７０３は、命令及び／又はデータがシステムメモリ７０８に戻る前に、プロセッサ内におけるキャッシュの最後の層として機能する。
【００３５】
メモリコントローラ７０４は、システムメモリ７０８との間においてデータ及び命令の読取り／書込みを実行する。入出力ハブ７０５は、プロセッサと「入出力」装置（不揮発性ストレージ装置及び／又はネットワークインターフェイス）間の通信を管理している。Ｎを上回る数のコアを有するシステムを実現することができるように、複数のプロセッサをリンクするべく、ポート７０６が相互接続ネットワーク７０２から延在している。グラフィクスプロセッサ７０７は、グラフィクス演算を実行する。電力管理回路（図示されてはいない）が、全体としての（「パッケージレベル」における）プロセッサの性能及び電力状態と、個々のコア７０１＿１〜７０１＿Ｎやグラフィクスプロセッサ７０７などのようなプロセッサ内の個々のユニットの性能及び／又は電力状態の側面と、を管理している。利便を目的として、図７には、重要性を有するその他の機能ブロック（例えば、ＰＬＬ（Ｐｈａｓｅ  Ｌｏｃｋｅｄ  Ｌｏｏｐ）回路）は示されていない。
【００３６】
上述の説明によって教示されているプロセスは、（「仮想機械」、半導体チップ上に配設された汎用ＣＰＵプロセッサ、又は半導体チップ上に配設された特殊目的プロセッサなどの）機械に特定の機能を実行させる機械実行可能命令などのプログラムコードによって実行してもよい。或いは、この代わりに、これらの機能は、機能を実行するハードウェアによって実現された論理を収容した特定のハードウェアコンポーネントにより、或いは、プログラムされたコンピュータコンポーネントとカスタムハードウェアコンポーネントの任意の組合せにより、実行してもよい。
【００３７】
ストレージ媒体を使用してプログラムコードを保存してもよい。プログラムコードを保存するストレージ媒体は、限定を伴うことなしに、１つ又は複数のメモリ（例えば、１つ又は複数のフラッシュメモリ、ランダムアクセスメモリ（スタティック、ダイナミック、又はその他のもの））、光ディスク、ＣＤ−ＲＯＭ、ＤＶＤ  ＲＯＭ、ＥＰＲＯＭ、ＥＥＰＲＯＭ、磁気又は光カード、又は電子的な命令を保存するのに適したその他のタイプの機械可読媒体として、実装してもよい。又、プログラムコードは、リモートコンピュータ（例えば、サーバーなど）から要求元のコンピュータ（例えば、クライアント）に、（例えば、（例えば、ネットワーク接続などの）通信リンクを介した）伝播媒体として実施されたデータ信号により、ダウンロードしてもよい。
【００３８】
以上、本明細書においては、その特定の例示用の実施形態を参照し、本発明について記述したが、添付の請求項に記述されている本発明の更に広範な精神及び範囲を逸脱することなしに、様々な変更及び変形を実施してもよいことが明らかであろう。従って、本明細書及び図面は、限定の意味においてではなく、例示の意味において解釈されるものとする。
【図１】
2014182825.tif 000003
【図２Ａ】
2014182825.tif 000004
【図２Ｂ】
2014182825.tif 000005
【図３】
2014182825.tif 000006
【図４】
2014182825.tif 000007
【図５】
2014182825.tif 000008
【図６】
2014182825.tif 000009
【図７】
2014182825.tif 000010
【外国語明細書】
2014182825000001.pdf