特許第5939586号(P5939586)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ インテル・コーポレーションの特許一覧

<>
  • 特許5939586-オーバーロードチェックを実行する命令 図000002
  • 特許5939586-オーバーロードチェックを実行する命令 図000003
  • 特許5939586-オーバーロードチェックを実行する命令 図000004
  • 特許5939586-オーバーロードチェックを実行する命令 図000005
  • 特許5939586-オーバーロードチェックを実行する命令 図000006
  • 特許5939586-オーバーロードチェックを実行する命令 図000007
  • 特許5939586-オーバーロードチェックを実行する命令 図000008
  • 特許5939586-オーバーロードチェックを実行する命令 図000009
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】5939586
(24)【登録日】2016年5月27日
(45)【発行日】2016年6月22日
(54)【発明の名称】オーバーロードチェックを実行する命令
(51)【国際特許分類】
   G06F 9/42 20060101AFI20160609BHJP
   G06F 9/30 20060101ALI20160609BHJP
   G06F 9/315 20060101ALI20160609BHJP
   G06F 17/16 20060101ALI20160609BHJP
   G06F 21/54 20130101ALI20160609BHJP
【FI】
   G06F9/42 380
   G06F9/30 350B
   G06F9/30 340D
   G06F17/16 F
   G06F21/54
【請求項の数】20
【外国語出願】
【全頁数】13
(21)【出願番号】特願2014-51273(P2014-51273)
(22)【出願日】2014年3月14日
(65)【公開番号】特開2014-182825(P2014-182825A)
(43)【公開日】2014年9月29日
【審査請求日】2014年3月14日
(31)【優先権主張番号】13/843,558
(32)【優先日】2013年3月15日
(33)【優先権主張国】US
(73)【特許権者】
【識別番号】591003943
【氏名又は名称】インテル・コーポレーション
(74)【代理人】
【識別番号】110000877
【氏名又は名称】龍華国際特許業務法人
(72)【発明者】
【氏名】ディクソン、マーティン ジー.
(72)【発明者】
【氏名】パテル、バイジュ
(72)【発明者】
【氏名】ゴパラクリシュナ、ラジーヴ
【審査官】 清木 泰
(56)【参考文献】
【文献】 特開昭64−091228(JP,A)
【文献】 特開昭50−093053(JP,A)
【文献】 米国特許出願公開第2013/0166889(US,A1)
【文献】 特開平07−334346(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/30− 9/42
G06F17/10−17/18
G06F 7/00
G06F 7/38− 7/537
G06F 7/57− 7/575
G06F 7/74− 7/78
G06F 9/44− 9/455
G06F21/12−21/16
G06F21/50−21/57
(57)【特許請求の範囲】
【請求項1】
命令実行パイプライン内の機能ユニットであって、相対的に大きなデータサイズからの主要なデータが、前記主要なデータが流される先である相対的に小さなデータサイズ内にフィットするかどうかを判定する第1命令を実行するための回路を有する機能ユニットと、
前記主要なデータを前記相対的に大きなデータサイズから前記相対的に小さなデータサイズに流す第2命令を検出し、前記第1命令を命令ストリーム内において前記第2命令の前に挿入する論理回路と、
を有するプロセッサ。
【請求項2】
前記回路は、前記相対的に大きなデータサイズを有する入力オペランドにおいて、前記相対的に大きなデータサイズの最上位ビットのビット位置から始まり、前記相対的に小さなデータサイズの最上位ビットに対応するビット場所までのビットが、すべて等しいかどうかを確認する比較器を含む請求項1に記載のプロセッサ。
【請求項3】
前記回路は、前記相対的に大きなデータサイズを有する入力オペランドにおいて、前記主要なデータの最上位ビットが、前記相対的に小さなデータサイズにおける2番目の最上位ビットより高くないかどうかを確認する請求項1に記載のプロセッサ。
【請求項4】
前記回路は
i)前記相対的に大きなデータサイズを有する入力オペランドにおいて、前記相対的に大きなデータサイズの最上位ビットのビット位置から始まり、前記相対的に小さなデータサイズの最上位ビットに対応するビット場所までのビットがすべて等しいかどうかを確認することと、
ii)前記相対的に大きなデータサイズを有する入力オペランドにおいて、前記相対的に大きなデータサイズの最上位ビットのビット位置から始まり、前記相対的に小さなデータサイズの最上位ビットに対応するビット場所よりも1ビット上位にあるビット場所までのビットがすべて等しいかどうかを確認することと、
のいずれかを情報に依存して選択して実行する比較器を含む、請求項1に記載のプロセッサ。
【請求項5】
前記情報は、前記機能ユニットによって実行される命令の命令フォーマット内のコンテンツから判定される請求項4に記載のプロセッサ。
【請求項6】
前記情報は、前記プロセッサの制御レジスタ空間から判定される請求項4に記載のプロセッサ。
【請求項7】
前記制御レジスタ空間は、モデル固有のレジスタ空間である請求項6に記載のプロセッサ。
【請求項8】
前記制御レジスタ空間は、スレッド用のコンテキスト情報を保持するためのものである請求項6に記載のプロセッサ。
【請求項9】
前記主要なデータは、ベクトルの要素内に存在している請求項1から8の何れか1項に記載のプロセッサ。
【請求項10】
相対的に大きなデータサイズから相対的に小さなデータサイズに主要なデータを移動させる処理を検出するステップと、
前記処理が命令ストリーム内において実行される前に実行される命令を前記命令ストリームに挿入するステップと、
命令実行パイプライン内の前記命令を実行するステップであって、前記相対的に大きなデータサイズ内の前記主要なデータが前記相対的に小さなデータサイズ内にフィットすることをチェックするステップを含み、前記命令の結果は、前記主要なデータが前記相対的に小さなデータサイズ内にフィットしない場合には、警告であり、且つ、前記主要なデータが前記相対的に小さなデータサイズ内にフィットする場合には、警告ではない、ステップと、
を有する方法。
【請求項11】
前記主要なデータは、ベクトル内に存在している請求項10に記載の方法。
【請求項12】
前記警告は、フラグである請求項10または11に記載の方法。
【請求項13】
前記警告は、例外である請求項10または11に記載の方法。
【請求項14】
プロセッサによって処理された際に前記プロセッサに方法を実行させるコードを有するプログラムであって、
前記方法は、
相対的に大きなデータサイズから相対的に小さなデータサイズに主要なデータを移動させる処理を検出するステップと、
前記処理が命令ストリーム内において実行される前に実行される命令を前記命令ストリームに挿入するステップと、
を有し、
前記命令は、前記移動と関連するオーバーフロー状態についてチェックするためのものである、プログラム。
【請求項15】
前記主要なデータは、ベクトル内に存在している請求項14に記載のプログラム。
【請求項16】
前記命令の命令フォーマットは、前記命令を実行する機能ユニットに、前記相対的に小さなデータサイズのサイズについて通知する請求項14または15に記載のプログラム。
【請求項17】
前記命令によって生成される警告を処理するためのプログラムコードを有する請求項14から16の何れか1項に記載のプログラム。
【請求項18】
命令実行パイプラインを有するプロセッサであり、前記命令実行パイプラインは、機能ユニットを有し、前記機能ユニットは、相対的に大きなデータサイズからの主要なデータが前記主要なデータが流される先である相対的に小さなデータサイズ内にフィットするかどうかを判定する第1命令を実行するための回路を有する、プロセッサと、
前記プロセッサのメモリコントローラに結合されたメモリと、
前記主要なデータを前記相対的に大きなデータサイズから前記相対的に小さなデータサイズに流す第2命令を検出し、前記第1命令を命令ストリーム内において前記第2命令の前に挿入する論理回路と、
を有する演算システム。
【請求項19】
前記回路は、前記相対的に大きなデータサイズを有する入力オペランドにおいて、前記相対的に大きなデータサイズの最上位ビットのビット位置から始まり、前記相対的に小さなデータサイズの最上位ビットに対応するビット場所までのビットが、すべて等しいかどうかを確認する比較器を含む請求項18に記載の演算システム。
【請求項20】
前記回路は、前記相対的に大きなデータサイズを有する入力オペランドにおいて、前記主要なデータの最上位ビットが、前記相対的に小さなデータサイズにおける2番目の最上位ビットより高くないかどうかを確認する請求項18に記載の演算システム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明の分野は、一般に、演算科学に関し、且つ、更に詳しくは、オーバーロードチェックを実行する命令に関する。
【背景技術】
【0002】
図1は、半導体チップ上の論理回路によって実装された処理コア100の概略図を示している。この処理コアは、パイプライン101を含む。パイプラインは、プログラムコード命令を完全に実行するために必要とされるマルチステッププロセスにおいて特定のステップを実行するようにそれぞれが設計された複数のステージから構成されている。これらは、通常、少なくとも、1)命令のフェッチ及び復号化、2)データのフェッチ、3)実行、4)書戻しを含む。実行ステージは、(例えば、上述のステップ1)などの)1つ又は複数の先行するステージにおいてフェッチ及び復号化された命令によって識別される特定の演算を(例えば、上述のステップ2)などの)別の先行するステージにおいて同一の命令によって識別されると共にフェッチされたデータに対して実行する。演算の対象となるデータは、通常、(汎用)レジスタ保存空間102からフェッチされる。又、演算が完了した際に生成される新しいデータは、通常、(例えば、上述のステージ4)などの)レジスタ保存空間に「書戻し」される。
【0003】
実行ステージと関連する論理回路は、通常、その独自の演算の一意のサブセットを実行するようにそれぞれが設計された複数の「実行ユニット」又は「機能ユニット」103_1〜103_Nから構成されている(例えば、第1機能ユニットは、整数の数学演算を実行し、第2機能ユニットは、浮動小数点命令を実行し、第3機能ユニットは、キャッシュ/メモリとの間においてロード/ストア演算を実行し、以下同様である)。すべての機能ユニットによって実行されるすべての演算の集合体は、処理コア100によってサポートされる「命令セット」に対応している。
【0004】
コンピュータ科学の分野においては、「スカラー」と「ベクトル」という2つのタイプのプロセッサアーキテクチャが広く認識されている。スカラープロセッサは、データの単一の組に対して演算を実行する命令を実行するように設計されており、ベクトルプロセッサは、データの複数の組に対して演算を実行する命令を実行するように設計されている。図2A及び図2Bは、スカラープロセッサとベクトルプロセッサの間の基本的な相違点を明示する比較例を提示している。
【0005】
図2Aは、単一のオペランドセットであるA及びBを1つにAND演算し、単一の(又は、「スカラー」の)結果C(即ち、A.AND.B=C)を生成するスカラーAND命令の一例を示している。対照的に、図2Bは、A/BとD/Eという2つのオペランドセットを(例えば、同時に並行して)それぞれ1つにAND演算してベクトルの結果C、F(即ち、A.AND.B=C及びD.AND.E=F)を生成するベクトルAND命令の一例を示している。用語の観点において、「ベクトル」とは、複数の「要素」を有するデータ要素である。例えば、ベクトルV=Q,R,S,T,Uは、Q、R、S、T、及びUという5つの異なる要素を有する。例示用のベクトルVの「サイズ」は、5である(その理由は、ベクトルVが5つの要素を有しているためである)。
【0006】
又、図1は、汎用レジスタ空間102とは別のベクトルレジスタ空間107の存在をも示している。具体的には、汎用レジスタ空間102は、名目上、スカラー値を保存するために使用される。従って、実行ユニットうちのいずれかがスカラー演算を実行する際には、それらの実行ユニットは、名目上、汎用レジスタ保存空間102から呼び出されたオペランドを使用する(と共に、結果を汎用レジスタ保存空間102に書き戻す)。対照的に、実行ユニットのうちのいずれかがベクトル演算を実行する際には、それらの実行ユニットは、名目上、ベクトルレジスタ空間107から呼び出されたオペランドを使用する(と共に、結果をベクトルレジスタ空間107に書き戻す)。同様に、メモリの異なる領域をスカラー値及びベクトル値の保存のために割り当ててもよい。
【0007】
又、機能ユニット103_1〜103_Nへの及びこれらからの個々の入力及び出力に位置したマスキング論理104_1〜104_N及び105_1〜105_Nの存在にも留意されたい。様々な実装形態においては、ベクトル演算の場合には、実際には、これらの層のうちの1つのみが実装されているが、これは、厳格な要件ではない(図1には図示されていないが、恐らくは、ベクトル動作を実行せず、スカラー演算のみを実行する実行ユニットは、マスキング層を有する必要がない)。マスキングを利用するベクトル命令の場合には、入力マスキング論理104_1〜104_N及び/又は出力マスキング論理105_1〜105_Nを使用することにより、事実上、そのベクトル命令の演算の対象となる要素を制御してもよい。この場合には、マスクベクトルが、(例えば、ベクトルレジスタ保存空間107から読み取られる入力オペランドベクトルと共に)マスクレジスタ空間106から読み取られ、且つ、マスキング論理層104、105のうちの少なくとも1つに対して提示される。
【0008】
ベクトルプログラムコードを実行している際には、それぞれのベクトル命令は、フルデータワードを必ずしも必要としない。例えば、いくつかの命令用の入力ベクトルは、8つの要素のみであってもよく、その他の命令用の入力ベクトルは、16個の要素であってもよく、その他の命令用の入力ベクトルは、32個の要素であってもよく、以下同様である。従って、マスキング層104/105は、様々な命令における様々なベクトルサイズに影響を及ぼすように、特定の命令について適用されるフルベクトルデータワードの要素の組を識別するべく使用される。通常、それぞれのベクトル命令ごとに、マスクレジスタ空間106内に維持されている特定のマスクパターンを命令によって呼び出し、マスクレジスタ空間からフェッチし、且つ、マスク層104/105のいずれか又は両方に供給することにより、特定のベクトル演算用の要素の正しい組を「有効化」している。
【図面の簡単な説明】
【0009】
図1】命令実行パイプラインの一実施形態を示す。
図2A】ベクトル処理に関係するものである。
図2B】ベクトル処理に関係するものである。
図3】オーバーロード状態についてチェックする命令を使用する方法を示す。
図4】オーバーロード状態が存在するかどうかを判定する方法を示す。
図5】オーバーロード状態が存在するかどうかを判定する別の方法を示す。
図6】オーバーロード状態についてチェックするように設計された機能ユニットの一実施形態を示す。
図7】プロセッサの一実施形態を示す。
【発明を実施するための形態】
【0010】
当技術分野において理解されているように、ソフトウェアアルゴリズムは、一般に、変数に対して且つ変数の観点において実行される動作を表している。ソフトウェアがデータを実際に処理することができように、事実上、数値データが変数に挿入される。Cなどのコンピュータソフトウェアソースコード言語においては、変数は、様々な変数「タイプ」のうちの1つ(例えば、整数や浮動小数点など)であるものとして宣言される。変数のデータを保持するために必要とされるメモリ及び/又はレジスタ空間の単位(例えば、32ビットや64ビットなど)が変数タイプの定義の一部を構成してもよい。
【0011】
ソフトウェアプロセス自体は、先行するデータ計算の結果が後続のデータ計算に入力される1つ又は複数の「データフロー」として見なすことができる。場合によっては、第1タイプの変数を伴うプロセスが、異なるタイプの変数を伴うプロセスに入力されることになる。「相対的に大きな」データタイプが「相対的に小さな」データタイプに入力される場合に、問題が生じる可能性がある。例えば、64ビットの値が、わずかに32ビットのサイズを有するものとして定義されている変数に入力される場合には、「オーバーフローエラー」が結果的に生じることになる。
【0012】
データ値が、そのサイズにおいて最大状態にあり、且つ、データ値を増分する試みが行われた場合には、別のタイプのオーバーフローエラーが発生する可能性がある。例えば、2×(2^16)という値は、16個の1として表現される。この値が、16ビットのデータユニットサイズにおいて維持された場合には、事実上、データユニットサイズの最大容量に到達することになる。この値に対してこれを増分する数学演算(例えば、+1の演算が値に対して実行されるもの)を実行した場合には、オーバーロードエラーが結果的に生じることになり、その理由は、利用可能ではない第17番目のビットに値を桁上がりさせる必要があるからである。
【0013】
残念ながら、プログラマは、通常、自身のコードの個々の変数のデータ値の可能な上限をチェックしない。従って、オーバーフローエラーは、それなりに一般的な存在である。更に悪いことには、マルウェアは、特に、このようなエラーの生成を追及する可能性がある。これらの課題に対処するべく、プログラマは、所謂、セーフ整数(safe integer)又はその他の強いタイピング型の言語(strongly typed language)を使用するという選択肢を有する。セーフ整数ライブラリを使用する際には、演算は、すべての演算の後に、オーバーフロー及びアンダーフローについてチェックされる。新しい分岐及びサブルーチン全体をプログラムに挿入しなければならないことから、これには、性能の犠牲が伴う。
【0014】
図3は、オーバーフロー状態が存在するかどうかを判定するように設計されたプロセッサの命令セットアーキテクチャ(Instruction Set Architecture:ISA)内の「オーバーフローチェック」命令の使用を利用した改善された方式を示している。図3の方法によれば、相対的に大きなサイズのデータタイプから相対的に小さなサイズのデータタイプへのデータフローが検出されている301。この場合には、第1の相対的に大きなデータサイズの単一のソースオペランド又は複数のソースオペランドから相対的に小さなデータユニットサイズから構成されたデスティネーションへのブロードキャスト、並べ替え、シャッフルなどを実行する特定のタイプの命令がプロセッサISA内に存在してもよい。例えば、ブロードキャスト命令は、32ビットのソースオペランドの下位の半分を2×16のベクトル結果のそれぞれの16ビットの要素にブロードキャストしてもよい。
【0015】
検出に応答し、データフローによってオーバーフローエラーが結果的に生じるかどうかを試験する「オーバーフローチェック」命令が実行されている302。データフローによってオーバーフロー状態が生じないと命令が判定した場合には、命令の結果は、オーバーフロー警告に対応するものではない303。データフローによってオーバーフロー状態が生じることになると命令が判定した場合には、命令の結果は、なんらかの種類のオーバーフロー警告に対応することになる304。例えば、警告304は、例外、割込み、又はフラグの形態をとってもよい(以下においては、利便を目的として、例外又は割込みを例外と呼ぶこととする)。
【0016】
例外とは、基本的に、プログラムフローを自動的にエラーハンドラに対して送付することになるエラー状態のことである。エラーハンドラとは、様々な種類のエラーを処理するように特別に設計されたソフトウェア及び/又はハードウェアコンポーネントである。この場合には、オーバーフロー状態によって生成される例外は、この特定のタイプのエラーに適用される特定の是正措置を識別するべくエラーハンドラが使用するなんらかの種類の識別子を有することになる。
【0017】
フラグは、通常、命令実行パイプラインの制御レジスタ空間内のビットとして実装される。この場合には、異なる状態を識別するための異なるフラグが制御レジスタ空間内に存在しており、これらの状態のうちのいくつかは、(例えば、ゼロに等しかったり、ゼロ未満であるなどのように)必ずしもエラー状態ではない。この特定の方式においては、フラグビットを制御レジスタ空間内において予約することにより、相対的に大きなデータタイプを相対的に小さなデータタイプに入力することができるかどうかを判定するように設計された命令によってオーバーフローが検出されたかどうかを通知している。この場合には、オーバーフローチェック命令と相対的に大きなデータを相対的に小さなデータに入力する命令の間に条件付き分岐命令を自動的に挿入してもよい。この条件付き分岐命令は、フラグが設定された場合に、相対的に大きなデータを相対的に小さなデータに入力する命令を実行する代わりに、オーバーフロー状態命令及びジャンププログラムの実行によってなんらかのその他の場所に関連付けられたフラグを調べるように設計されてもよい。
【0018】
相対的に大きなサイズから相対的に小さなデータサイズへのデータフローの検出301は、実行前の時点において、コンパイラにより、或いは、実行時において、ハードウェア内において、実行してもよい。前者のケースにおいては、コンパイラは、相対的に大きなものから相対的に小さなものへのデータフローを識別し、且つ、オーバーフローチェック命令を相対的に大きなものから相対的に小さなものへのデータフローの前に挿入する。後者のケースにおいては、ハードウェアは、動作中に、相対的に大きなものから相対的に小さなものへのデータフローを検出する。データを相対的に大きなデータサイズから相対的に小さなデータサイズに本質的に移動させる命令の場合には、コンパイラ及び/又はハードウェアは、その命令の存在を認識し、且つ、事実上、命令ストリーム内において、その命令の前に、オーバールック命令を挿入する。或いは、この代わりに、コンパライのコード生成プロセスは、単純に、相対的に大きなデータユニットサイズから相対的に小さなデータユニットサイズへのフローを生成する命令が必要とされる任意の時点において、第1の先行するオーバールックチェック命令と、相対的に大きなものから相対的に小さなものへのデータフロー命令である第2の後続の命令と、という2つの命令を自動的に挿入してもよい。コンパイラの場合には、この挿入は、オブジェクトコード内において明示的に実施してもよい。
【0019】
ハードウェアの場合には、命令実行パイプラインは、命令キューを調査すると共に相対的に大きなデータユニットから相対的に小さなデータユニットへのフローを生成する命令の存在を検出するスヌープ回路を命令フェッチステージ内に有してもよい。これに応答し、命令フェッチステージ内の特別な回路がオーバーロードチェック命令を生成し、このオーバーロードチェック命令が、検出された命令のデータ入力オペランドのコンテンツを仮定し、且つ、命令キュー内において、検出された命令の前に、オーバーロードチェック命令を挿入する。
【0020】
図4は、オーバーロード検出命令の動作方法を提示している。図4において観察されるように、この命令は、オペランド内の主要なデータの最上位ビットが結果のデータサイズ内の2番目の最上位ビットを上回っていないかどうかを判定している401。例えば、結果が16ビットである場合には、命令は、入力オペランドの主要なデータが16ビットのうちの16番目に到達しているかどうかを判定する。判定結果が肯定的である場合には、オーバーロード警告が生成される。判定結果が否定的である場合には、オーバーロードエラー警告は生成されない。この特定のプロセスは、基本的に、入力オペランドの主要なデータの最上位ビットが使用されていないことの確認を追及していることに留意されたい。このように振る舞うことにより、この命令は、主要なデータの後続の増分を許容している。即ち、オーバーロードチェック命令は、主要なデータについて後続の増分が実行された場合に、その主要なデータがその新しい相対的に小さなデータストア割当内に位置するのに伴って、オーバーロードエラーが結果的に生じないことを保証している。
【0021】
図5は、結果内の最上位ビットが入力オペランドの主要なデータによって消費されないかどうかを判定する方法の一実施形態を示している。図5において観察されるように、命令は、結果内の最上位ビットに対応するビット場所から始まる入力オペランドの最上位ビットまでのすべての入力オペランドのビット値が等しいかどうかを確認している501。図5は、32ビットの入力オペランド502の特定の一例を示しており、この場合には、その最下位の16ビットが16ビットの結果503内にマッピングされている。上述のプロセス501は、結果内の最上位ビット(16番目のビット)504と、入力オペランド内の最上位ビット(32番目のビット)505と、を識別し、且つ、これらのビットと、その間のすべてのビットが、等しいことをチェックしている。図5の例において観察されるように、これらのすべてのビットは、等しくなっており、従って、オーバーロードエラー警告はトリガされないであろう。
【0022】
この特定の方法は、負の数を表現するための相補的な表記法を使用しているプロセッサの場合に有効である。この場合には、(図5の例において観察されるように)、正の主要ではない桁は、0として表現され、負の主要ではない桁は、1として表現される。2つのマーキングされたビット場所の間の桁の等価性についてチェックする上述の特定の方法は、ビットが1であるのか又は0であるのかについては不可知であり、且つ、従って、入力オペランドが正の数であるのか又は負の数であるのかについても、不可知である。
【0023】
図6は、命令実行パイプライン機能ユニットの論理設計600を示している。図6において観察されるように、機能ユニットは、幅がNである比較器601を含み、この場合に、Nは、比較を要することになるビットの最大数に対応している。この場合には、機能ユニット600は、いくつかの異なる相対的に大きなデータサイズから相対的に小さなデータサイズへのフローに関するオーバーロードチェックをサポートしているものと仮定されている。等価性について比較される入力ビットの数に対応した比較器601の入力幅は、実行されている特定の相対的に大きなデータサイズから相対的に小さなデータサイズへのフローに応じて構成される。
【0024】
例えば、一実施形態においては、機能ユニットは、1)64ビットデータ値から32ビットデータ値、2)64ビットデータ値から16ビットデータ値、並びに、3)64ビットデータ値から8ビットデータ値のうちのそれぞれに関するオーバーロードチェックをサポートしている。64ビットから32ビットへのフローは、33ビット幅の比較に対応しており、64ビットから16ビットへのフローは、49ビット幅の比較に対応しており、且つ、64ビットから8ビットへのフローは、57ビット幅の比較に対応している。この場合には、Nは、57に対応することになり、その理由は、機能ユニットが常に等価性をチェックする必要があるビットの最大数が57であるからである。
【0025】
従って、64ビットデータから8ビットデータへのフローについてオーバーロードチェックを実行するように機能ユニットが求められた際には、機能ユニットは、比較器601に対するすべてのN=57入力を有効化することになる。64ビットから32ビット及び64ビットから16ビットへのオーバーロードチェックの場合には、機能ユニットは、比較器の入力のうちの33及び69をそれぞれ有効化することになる。有効化対象の比較器入力は、入力オペランド604の最上位ビット位置から入力オペランドの最下位ビット位置に向かって計数される。この場合に、一実施形態においては、命令のopcode及び/又は即値オペランドに応答する読出し専用メモリ(ROM)602内のマイクロコードを使用し、比較器601に対する個々の入力用の有効化入力603_1〜603_Nを設定している。例えば、64ビットから8ビットへのオーバーロードチェックを実行する必要があると命令のopcode及び/又は即値オペランドが示している場合には、ROM602内のマイクロコードは、比較器601のすべてのN=57入力を有効化するように機能する。比較器601は、上述のように、オーバールックチェックが失敗した場合には、例外を生成するか又はフラグを設定する。
【0026】
上述の説明は、64ビット整数又は32ビット整数などの単一のスカラー入力オペランドのオーバーロードチェックに関するものであったが、様々なベクトル命令も、相対的に大きなデータサイズから相対的に小さなデータサイズへのフローの演算を実行してもよい。例えば、並べ替え又はシャッフル命令は、入力ベクトルを入力オペランドとして受け付けてもよく、且つ、その要素が入力ベクトルの要素のうちの1つ又は複数の要素のなんらかの種類の再構成物に対応している(これらに対して実行されたなんらかのブール論理及び/又は数学演算には対応してはいない)出力ベクトルを基本的に生成してもよい。例えば、並べ替え命令は、並べ替え命令の論理が実装されるように設計された固定パターンに従って、入力ベクトル要素を強制的に再構成してもよいであろう。即値オペランドにより、異なる固定パターンを呼び出してもよい。シャッフル命令は、第1及び第2入力オペランドを受け付けてもよく、この場合に、第2オペランドのそれぞれの要素は、結果内の同一の方式によって配置された要素に対応しており、且つ、第1オペランド内の要素のうちの1つを、その結果の要素場所について選択されるべき要素として、識別している。この場合に、第2要素は、図1との関係において上述したマスクに類似している。これらのタイプの命令のいずれかは、その要素がこれらの要素よりも小さなサイズを有する結果を生成してもよい。
【0027】
機能ユニット600の論理回路は、ベクトル命令を想定するのみならず、結果内における選択のために選択された入力ベクトルの特定の要素をも想定する機能を含んでいると説明することができる。例えば、オーバーロードチェック命令が並べ替え命令の直前に挿入された場合には、オーバーロードチェック命令の命令フォーマットは、i)並べ替えパターンを識別する並べ替え命令内の同一の即値オペランドと、ii)その要素が並べ替え命令の結果内に含まれている並べ替え命令用の入力ベクトルと、を含んでもよい。
【0028】
この場合に、即値オペランドによって識別される固定パターンは、結果に包含されるように入力ベクトルのすべての要素を選択しなくてもよい。オーバーロード命令は、即値オペランドを検討して結果に出現するべき入力ベクトルの要素を識別すると共に上述の原理と合致したオーバーロードエラーについて選択された要素のそれぞれをチェックする論理を有するように設計される。
【0029】
場合によっては、入力オペランドのデータ要素を並行して処理することができるように、例えば、処理対象の入力オペランドのそれぞれのベクトル要素ごとに1つの論理設計インスタンスを配置するなどのように、複数の同一の論理設計インスタンス604を単一の機能ユニット内に配置することもできよう。或いは、この代わりに、処理を要する設計要素の数よりも少ない数の設計インスタンスが存在している場合には、マイクロコードは、結果が少しずつ生成されるように、第1要素が処理された後に、同一の機能ユニットを通じて、第2要素を処理することができる。
【0030】
シャッフル命令の場合には、機能ユニット600は、相対的に小さなサイズに入力するべき特定のデータ要素を判定することができるように、両方の入力ベクトル(選択されるべきソース要素を定義する第1の入力ベクトル及びソース要素を収容する第2の入力ベクトル)を受け取る。複数の論理設計インスタンスは、これらのデータ要素のいくつか又はすべてを並行して処理することができる。すべての要素ではなく一部の要素が並行して処理される程度に、単一の設計インスタンスは、結果が少しずつ形成されるように、一連のソース要素を処理することができる。
【0031】
一実施形態においては、例えば、上述のように、例外又はフラグであってもよいオーバーロードチェック命令の結果は、ベクトルの並べ替え又はシャッフル命令の場合に、1つ又は複数の不都合なデータ要素を識別する。例えば、最大で32個の要素を有するソース要素入力ベクトルを受け付ける並べ替え及び/又はシャッフル命令をISAがサポートしている場合には、オーバーロード試験に合格しないソース要素を別個に識別するために使用される32個のフラグビットが制御レジスタ空間内に存在してもよい。相対的に少ない数のデータ要素を生成する並べ替え/ベクトル命令の場合には、更に少ない数のフラグビットが使用されることになろう。類似のデータ構造(例えば、それぞれの32ビットが1つの並べ替えに対応しているもの)を例外に伴って合格させることができる。
【0032】
機能ユニットがオーバーロードチェックを実行する程度にまで、命令実行パイプラインは、適切なオペランドを機能ユニットに対して入力できなければならない。例えば、機能ユニットがスカラー命令とベクトル命令の両方を試験する必要がある場合には、命令実行パイプラインは、スカラーレジスタ空間とベクトルレジスタ空間の両方を機能ユニットに対して結合する必要がある。
【0033】
上述の実施形態は、相対的に小さなターゲットデータサイズの最上位ビットが相対的に大きなソースデータサイズ内の主要なデータによって消費されないことを保証することにより、増分によって生成されるオーバーロードエラーの防止を試みる考え方を対象としていた。その他の実施形態においては、主要なデータによる相対的に小さなターゲットデータサイズの(2番目の最上位ビットのみではなく)最上位ビットの消費がチェックによって許容されるように、この特定の保護を省略してもよい。これは、上述の説明との比較において1ビットだけ減少するように、幅がNである比較器の入力幅の計算に対して影響を及ぼす。一実施形態においては、いずれの考え方を採用するのかについては、(命令の考え方の構成ごとに)命令フォーマットのopcode又は即値オペランド内において設定されるか、或いは、ハードウェアスレッドコンテンツレジスタ空間又はMSR(Model Specific Register)空間などのなんらかの形態のレジスタ空間内における設定により、スレッドごとに、又はプロセッサごとに、更にグローバルに、設定されている。
【0034】
図7は、例示用のマルチコアプロセッサ700のアーキテクチャを示している。図7において観察されるように、このプロセッサは、1)複数の処理コア701_1〜701_N、2)相互接続ネットワーク702、3)LLC(Last Level Caching)システム703、4)メモリコントローラ704及び入出力ハブ705を含む。処理コアのそれぞれは、プログラムコード命令を実行する1つ又は複数の命令実行パイプラインを収容している。このような命令実行パイプラインのいずれか又はすべては、図1の説明と一貫性を有するベクトル命令の実行をサポートしてもよく、且つ、オーバーロードチェック命令を実行することができる機能ユニットを含んでもよいと共に、データを相対的に大きなデータサイズから相対的に小さなデータサイズに移動させる命令の検出に応答してオーバーロードチェック命令を命令ストリームに挿入する回路を含んでもよい。相互接続ネットワーク702は、コア701_1〜701_Nのそれぞれを、互いに、且つ、その他のコンポーネント703、704、705と、相互接続するように機能する。LLC(Last Level Caching)システム703は、命令及び/又はデータがシステムメモリ708に戻る前に、プロセッサ内におけるキャッシュの最後の層として機能する。
【0035】
メモリコントローラ704は、システムメモリ708との間においてデータ及び命令の読取り/書込みを実行する。入出力ハブ705は、プロセッサと「入出力」装置(不揮発性ストレージ装置及び/又はネットワークインターフェイス)間の通信を管理している。Nを上回る数のコアを有するシステムを実現することができるように、複数のプロセッサをリンクするべく、ポート706が相互接続ネットワーク702から延在している。グラフィクスプロセッサ707は、グラフィクス演算を実行する。電力管理回路(図示されてはいない)が、全体としての(「パッケージレベル」における)プロセッサの性能及び電力状態と、個々のコア701_1〜701_Nやグラフィクスプロセッサ707などのようなプロセッサ内の個々のユニットの性能及び/又は電力状態の側面と、を管理している。利便を目的として、図7には、重要性を有するその他の機能ブロック(例えば、PLL(Phase Locked Loop)回路)は示されていない。
【0036】
上述の説明によって教示されているプロセスは、(「仮想機械」、半導体チップ上に配設された汎用CPUプロセッサ、又は半導体チップ上に配設された特殊目的プロセッサなどの)機械に特定の機能を実行させる機械実行可能命令などのプログラムコードによって実行してもよい。或いは、この代わりに、これらの機能は、機能を実行するハードウェアによって実現された論理を収容した特定のハードウェアコンポーネントにより、或いは、プログラムされたコンピュータコンポーネントとカスタムハードウェアコンポーネントの任意の組合せにより、実行してもよい。
【0037】
ストレージ媒体を使用してプログラムコードを保存してもよい。プログラムコードを保存するストレージ媒体は、限定を伴うことなしに、1つ又は複数のメモリ(例えば、1つ又は複数のフラッシュメモリ、ランダムアクセスメモリ(スタティック、ダイナミック、又はその他のもの))、光ディスク、CD−ROM、DVD ROM、EPROM、EEPROM、磁気又は光カード、又は電子的な命令を保存するのに適したその他のタイプの機械可読媒体として、実装してもよい。又、プログラムコードは、リモートコンピュータ(例えば、サーバーなど)から要求元のコンピュータ(例えば、クライアント)に、(例えば、(例えば、ネットワーク接続などの)通信リンクを介した)伝播媒体として実施されたデータ信号により、ダウンロードしてもよい。
【0038】
以上、本明細書においては、その特定の例示用の実施形態を参照し、本発明について記述したが、添付の請求項に記述されている本発明の更に広範な精神及び範囲を逸脱することなしに、様々な変更及び変形を実施してもよいことが明らかであろう。従って、本明細書及び図面は、限定の意味においてではなく、例示の意味において解釈されるものとする。
図1
図2A
図2B
図3
図4
図5
図6
図7