(57)【要約】      （修正有）【課題】１または複数の第１数値表現を含む複数のソーステンソルデータ要素を有するソーステンソルブロックのセットを、第１数値表現および第２数値表現に基づいて指定された順序で１または複数の対応するデスティネーションテンソルブロックに変換するための装置および方法を提供する。【解決手段】方法は、ソーステンソルデータ構造のソーステンソルブロックをフェッチするステップと、１または複数のソーステンソルブロックを、第１数値表現とは異なる第２数値表現を含む複数のデスティネーションテンソルデータ要素を有する１または複数のデスティネーションテンソルブロックに変換するステップと、ソーステンソルブロックの事前定義された構造配置との一貫性を維持するために、それぞれのデスティネーションテンソルブロックを指示されたメモリ領域に記憶するステップと、を備える。【選択図】図２５
2020004394.tif 000002
【特許請求の範囲】
【請求項１】
ソーステンソルデータ構造のソーステンソルブロックを記憶するための第１ストレージであって、各ソーステンソルブロックは、第１数値表現を含む複数のソーステンソルデータ要素を有し、前記ソーステンソルデータ構造はソーステンソルブロックの事前定義された構造配置を有する、第１ストレージと、
第１テンソル変換命令を復号するためのデコーダと、
前記第１テンソル変換命令の実行に応答して、前記ソーステンソルブロックを、前記第１数値表現とは異なる第２数値表現を含む複数のデスティネーションテンソルデータ要素を有するデスティネーションテンソルブロックに変換するための実行回路であって、前記実行回路は、前記第１数値表現および前記第２数値表現に基づいて指定された順序で１または複数のソーステンソルブロックのセットを１または複数の対応するデスティネーションテンソルブロックに変換し、前記ソーステンソルブロックの前記事前定義された構造配置との一貫性を維持するために、それぞれのデスティネーションテンソルブロックを指示されたメモリ領域に記憶する、実行回路と、
を備えるプロセッサ。
【請求項２】
前記デスティネーションテンソルブロックの一部が生成されると、前記デスティネーションテンソルブロックのうち２つ以上が、メモリ内の１または複数のデスティネーションブロックサイズのギャップによって分離される、請求項１に記載のプロセッサ。
【請求項３】
前記第１数値表現は前記第２数値表現よりも少ないビットを備える、請求項１に記載のプロセッサ。
【請求項４】
前記実行回路は、各ソーステンソルブロックを複数のデスティネーションテンソルブロックに変換する、請求項１または３に記載のプロセッサ。
【請求項５】
前記実行回路は、Ｎ個のソーステンソルブロックを２Ｎ個または４Ｎ個のデスティネーションテンソルブロックに変換する、請求項１または４に記載のプロセッサ。
【請求項６】
前記第１数値表現は前記第２数値表現よりも多くのビットを備える、請求項１に記載のプロセッサ。
【請求項７】
前記実行回路は、複数のソーステンソルブロックを各デスティネーションテンソルブロックに変換する、請求項１または６に記載のプロセッサ。
【請求項８】
前記実行回路は、Ｎ個のソーステンソルブロックをＮ／２個またはＮ／４個のデスティネーションテンソルブロックに変換する、請求項１または７に記載のプロセッサ。
【請求項９】
ソーステンソルデータ構造のソーステンソルブロックをフェッチするステップであって、各ソーステンソルブロックは、第１数値表現を含む複数のソーステンソルデータ要素を有し、前記ソーステンソルデータ構造はソーステンソルブロックの事前定義された構造配置を有する、ステップと、
１または複数の前記ソーステンソルブロックを、前記第１数値表現とは異なる第２数値表現を含む複数のデスティネーションテンソルデータ要素を有する１または複数のデスティネーションテンソルブロックに変換するステップであって、前記１または複数のソーステンソルブロックのセットは、前記第１数値表現および前記第２数値表現に基づいて指定された順序で１または複数の対応するデスティネーションテンソルブロックに変換される、ステップと、
前記ソーステンソルブロックの前記事前定義された構造配置との一貫性を維持するために、それぞれのデスティネーションテンソルブロックを指示されたメモリ領域に記憶するステップと、
を備える方法。
【請求項１０】
前記デスティネーションテンソルブロックの一部が生成されると、前記デスティネーションテンソルブロックのうち２つ以上が、メモリ内の１または複数のデスティネーションブロックサイズのギャップによって分離される、請求項９に記載の方法。
【請求項１１】
前記第１数値表現は前記第２数値表現よりも少ないビットを備える、請求項９に記載の方法。
【請求項１２】
各ソーステンソルブロックが複数のデスティネーションテンソルブロックに変換される、請求項９または１１に記載の方法。
【請求項１３】
Ｎ個のソーステンソルブロックが２Ｎ個または４Ｎ個のデスティネーションテンソルブロックに変換される、請求項９または１２に記載の方法。
【請求項１４】
前記第１数値表現は前記第２数値表現よりも多くのビットを備える、請求項９に記載の方法。
【請求項１５】
複数のソーステンソルブロックが各デスティネーションテンソルブロックに変換される、請求項９または１４に記載の方法。
【請求項１６】
Ｎ個のソーステンソルブロックがＮ／２個またはＮ／４個のデスティネーションテンソルブロックに変換される、請求項９または１５に記載の方法。
【請求項１７】
ソーステンソルデータ構造のソーステンソルブロックをフェッチするオペレーションであって、各ソーステンソルブロックは、第１数値表現を含む複数のソーステンソルデータ要素を有し、前記ソーステンソルデータ構造はソーステンソルブロックの事前定義された構造配置を有する、オペレーションと、
１または複数の前記ソーステンソルブロックを、前記第１数値表現とは異なる第２数値表現を含む複数のデスティネーションテンソルデータ要素を有する１または複数のデスティネーションテンソルブロックに変換するオペレーションであって、前記１または複数のソーステンソルブロックのセットは、前記第１数値表現および前記第２数値表現に基づいて指定された順序で１または複数の対応するデスティネーションテンソルブロックに変換される、オペレーションと、
前記ソーステンソルブロックの前記事前定義された構造配置との一貫性を維持するために、それぞれのデスティネーションテンソルブロックを指示されたメモリ領域に記憶するオペレーションと、
を機械に実行させるためのプログラム。
【請求項１８】
前記デスティネーションテンソルブロックの一部が生成されると、前記デスティネーションテンソルブロックのうち２つ以上が、メモリ内の１または複数のデスティネーションブロックサイズのギャップによって分離される、請求項１７に記載のプログラム。
【請求項１９】
前記第１数値表現は前記第２数値表現よりも少ないビットを備える、請求項１７に記載のプログラム。
【請求項２０】
各ソーステンソルブロックが複数のデスティネーションテンソルブロックに変換される、請求項１７または１９に記載のプログラム。
【請求項２１】
Ｎ個のソーステンソルブロックが２Ｎ個または４Ｎ個のデスティネーションテンソルブロックに変換される、請求項１７または２０に記載のプログラム。
【請求項２２】
前記第１数値表現は前記第２数値表現よりも多くのビットを備える、請求項１７に記載のプログラム。
【請求項２３】
複数のソーステンソルブロックが各デスティネーションテンソルブロックに変換される、請求項１７または２２に記載のプログラム。
【請求項２４】
Ｎ個のソーステンソルブロックがＮ／２個またはＮ／４個のデスティネーションテンソルブロックに変換される、請求項１７または２３に記載のプログラム。
【請求項２５】
請求項１７から２４のいずれか一項に記載のプログラムを記憶するコンピュータ可読記憶媒体。
【請求項２６】
ソーステンソルデータ構造のソーステンソルブロックをフェッチする手段であって、各ソーステンソルブロックは、第１数値表現を含む複数のソーステンソルデータ要素を有し、前記ソーステンソルデータ構造はソーステンソルブロックの事前定義された構造配置を有する、手段と、
１または複数の前記ソーステンソルブロックを、前記第１数値表現とは異なる第２数値表現を含む複数のデスティネーションテンソルデータ要素を有する１または複数のデスティネーションテンソルブロックに変換する手段であって、前記１または複数のソーステンソルブロックのセットは、前記第１数値表現および前記第２数値表現に基づいて指定された順序で１または複数の対応するデスティネーションテンソルブロックに変換される、手段と、
前記ソーステンソルブロックの前記事前定義された構造配置との一貫性を維持するために、それぞれのデスティネーションテンソルブロックを指示されたメモリ領域に記憶する手段と、
を備える装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、概してコンピュータプロセッサの分野に関する。より具体的には、実施形態は、データ表現間の一貫性のある変換を加速する装置および方法に関する。
【背景技術】
【０００２】
ディープラーニングの作業負荷は様々な位相を経て進行することが多く、各々がテンソルデータ要素の異なる数値表現から恩恵を受ける。一般に、作業負荷処理のいくつかの位相はあまり精度を必要とせず、より小さな要素サイズで実行され得るが、他の位相はより高い精度を必要とし、より大きい要素サイズを利用する。典型的には、テンソル演算毎秒（ＴＯＰＳ（ｔｅｎｓｏｒ  ｏｐｅｒａｔｉｏｎｓ−ｐｅｒ−ｓｅｃｏｎｄ））は要素サイズと逆にスケーリングするので、より小さい（すなわち低精度）要素で作業するとＴＯＰＳが高くなる。
【０００３】
しかしながら、テンソルデータが位相から位相へ推移するとき、数値表現変換が必要である。変換は従来ソフトウェアによって処理されるが、これは性能に影響を及ぼす可能性がある。さらに、テンソル全体は、維持する必要がある定義された（そしてしばしば多次元の）構造を有するので、変換プロセスは個々のテンソル要素の単なる操作以上のものを伴う。
【図面の簡単な説明】
【０００４】
本発明のより良い理解は、以下の図面と併せて以下の詳細な説明から得ることができる。
【０００５】
【図１Ａ】本発明の実施形態による汎用ベクトルフレンドリー命令フォーマットおよびその命令テンプレートを示すブロック図である。
【図１Ｂ】本発明の実施形態による汎用ベクトルフレンドリー命令フォーマットおよびその命令テンプレートを示すブロック図である。
【０００６】
【図２Ａ】本発明の実施形態による例示的なＶＥＸ命令フォーマットを示すブロック図である。
【図２Ｂ】本発明の実施形態による例示的なＶＥＸ命令フォーマットを示すブロック図である。
【図２Ｃ】本発明の実施形態による例示的なＶＥＸ命令フォーマットを示すブロック図である。
【０００７】
【図３】本発明の一実施形態によるレジスタアーキテクチャのブロック図である。
【０００８】
【図４Ａ】本発明の実施形態による、例示的なインオーダーフェッチ、復号、リタイアパイプライン、および例示的なレジスタリネーミングと、アウトオブオーダー発行／実行パイプラインとの両方を示すブロック図である。
【０００９】
【図４Ｂ】本発明の実施形態による、プロセッサに含まれるべきインオーダーフェッチ、復号、リタイアコアおよび例示的なレジスタリネーミングの例示的な実施形態と、アウトオブオーダー発行／実行アーキテクチャコアとの両方を示すブロック図である。
【００１０】
【図５Ａ】オンダイ相互接続ネットワークへの接続を伴う、シングルプロセッサコアのブロック図である。
【００１１】
【図５Ｂ】本発明の実施形態による図５Ａのプロセッサコアの一部の拡大図である。
【００１２】
【図６】本発明の実施形態による、統合メモリコントローラおよびグラフィックスを有するシングルコアプロセッサおよびマルチコアプロセッサのブロック図である。
【００１３】
【図７】本発明の一実施形態によるシステムのブロック図である。
【００１４】
【図８】本発明の一実施形態による第２のシステムのブロック図である。
【００１５】
【図９】本発明の一実施形態による第３のシステムのブロック図である。
【００１６】
【図１０】本発明の一実施形態によるシステムオンチップ（ＳｏＣ）のブロック図である。
【００１７】
【図１１】本発明の実施形態による、ソース命令セット内のバイナリ命令をターゲット命令セット内のバイナリ命令に変換するためのソフトウェア命令変換器の使用を対比するブロック図である。
【００１８】
【図１２Ａ】本発明の実施形態が実装され得るプロセッサアーキテクチャを示す図である。
【図１２Ｂ】本発明の実施形態が実装され得る別のプロセッサアーキテクチャを示す図である。
【００１９】
【図１３】テンソルデータ要素をアップコンバートするためのテンソル変換命令の実施形態のオペレーションを示す図である。
【図１４】テンソルデータ要素をアップコンバートするためのテンソル変換命令の別の実施形態のオペレーションを示す図である。
【図１５】テンソルデータ要素をアップコンバートするためのテンソル変換命令の別の実施形態のオペレーションを示す図である。
【図１６】テンソルデータ要素をアップコンバートするためのテンソル変換命令の別の実施形態のオペレーションを示す図である。
【図１７】テンソルデータ要素をアップコンバートするためのテンソル変換命令の別の実施形態のオペレーションを示す図である。
【図１８】テンソルデータ要素をアップコンバートするためのテンソル変換命令の別の実施形態のオペレーションを示す図である。
【００２０】
【図１９】テンソルデータ要素をダウンコンバートするためのテンソル変換命令の実施形態のオペレーションを示す図である。
【図２０】テンソルデータ要素をダウンコンバートするためのテンソル変換命令の別の実施形態のオペレーションを示す図である。
【図２１】テンソルデータ要素をダウンコンバートするためのテンソル変換命令の別の実施形態のオペレーションを示す図である。
【図２２】テンソルデータ要素をダウンコンバートするためのテンソル変換命令の別の実施形態のオペレーションを示す図である。
【図２３】テンソルデータ要素をダウンコンバートするためのテンソル変換命令の別の実施形態のオペレーションを示す図である。
【図２４】テンソルデータ要素をダウンコンバートするためのテンソル変換命令の別の実施形態のオペレーションを示す図である。
【００２１】
【図２５】本発明の一実施形態による方法を示す図である。
【発明を実施するための形態】
【００２２】
以下の説明では、説明を目的として、以下に記載される本発明の実施形態の完全な理解を提供するために、多数の具体的な詳細が明記される。しかしながら、本発明の実施形態がこれらの具体的詳細のいくつかを伴わずに実践されてもよいことは、当業者にとって明らかであろう。他の例では、本発明の実施形態の基本的な原理を曖昧にすることを避けるために、公知の構造および装置はブロック図の形態で示されている。
［例示的なプロセッサアーキテクチャ、命令フォーマット、およびデータタイプ］
【００２３】
命令セットは、１または複数の命令フォーマットを含む。所与の命令フォーマットは、とりわけ、実行すべき演算（オペコード）およびこの演算が実行されるオペランドを指定するための様々なフィールド（ビット数、ビットの位置）を定義する。いくつかの命令フォーマットは、命令テンプレート（またはサブフォーマット）の定義を通じてさらに細かく分けられる。たとえば、所与の命令フォーマットの命令テンプレートは、命令フォーマットのフィールドの異なるサブセットを有するように定義されてもよく（含まれるフィールドは通常同じ順序であるが、含まれるフィールドが少ないため少なくともいくつかは異なるビット位置を有する）、および／または所与のフィールドが異なって解釈されるように定義されてもよい。したがって、ＩＳＡの各命令は、所与の命令フォーマットを使用して（そして定義されている場合はその命令フォーマットの命令テンプレートのうち所与のものにおいて）表現され、演算およびオペランドを指定するためのフィールドを含む。たとえば、例示的なＡＤＤ命令は、特定のオペコードと、このオペコードを指定するためのオペコードフィールドおよびオペランドを選択するためのオペランドフィールド（ソース１／デスティネーションおよびソース２）を含む命令フォーマットとを有し、命令ストリーム内でのこのＡＤＤ命令の発生は、特定のオペランドを選択するオペランドフィールド内に特定の内容を有することになる。
【００２４】
本明細書に記載される命令の実施形態は、異なるフォーマットで具現化され得る。加えて、例示的なシステム、アーキテクチャ、およびパイプラインが以下に詳述される。命令の実施形態は、このようなシステム、アーキテクチャ、およびパイプライン上で実行され得るが、詳述されるものに限定されない。
【００２５】
［汎用ベクトルフレンドリー命令フォーマット］
【００２６】
ベクトルフレンドリー命令フォーマットは、ベクトル命令に適した命令フォーマットである（たとえば、ベクトル演算に固有の特定のフィールドがある）。ベクトルフレンドリー命令フォーマットを通じてベクトル演算とスカラー演算の両方がサポートされる実施形態が説明されているが、代替実施形態は、ベクトルフレンドリー命令フォーマットを通じてベクトル演算のみを使用する。
【００２７】
図１Ａおよび図１Ｂは、本発明の実施形態による汎用ベクトルフレンドリー命令フォーマットおよびその命令テンプレートを示すブロック図である。図１Ａは、本発明の実施形態による、汎用ベクトルフレンドリー命令フォーマットおよびそのクラスＡ命令テンプレートを示すブロック図であり、図１Ｂは、本発明の実施形態による汎用ベクトルフレンドリー命令フォーマットおよびそのクラスＢ命令テンプレートを示すブロック図である。具体的には、両方ともメモリアクセスなし１０５命令テンプレートおよびメモリアクセス１２０命令テンプレートを含むクラスＡおよびクラスＢ命令テンプレートが、そのために定義された汎用ベクトルフレンドリー命令フォーマット１００である。ベクトルフレンドリー命令フォーマットの文脈における汎用という用語は、特定の命令セットに結び付けられていない命令フォーマットを指す。
【００２８】
ベクトルフレンドリー命令フォーマットが以下をサポートする本発明の実施形態が説明される。３２ビット（４バイト）または６４ビット（８バイト）データ要素幅（またはサイズ）の６４バイトベクトルオペランド長（またはサイズ）（したがって、６４バイトベクトルは１６個のダブルワードサイズ要素／あるいは８個のクワッドワードサイズ要素のいずれかからなる）／１６ビット（２バイト）または８ビット（１バイト）データ要素幅（またはサイズ）の６４バイトベクトルオペランド長（またはサイズ）／３２ビット（４バイト）、６４ビット（８バイト）、１６ビット（２バイト）、または８ビット（１バイト）データ要素幅（またはサイズ）の３２バイトベクトルオペランド長（またはサイズ）／および３２ビット（４バイト）、６４ビット（８バイト）、１６ビット（２バイト）、または８ビット（１バイト）データ要素幅（またはサイズ）の１６バイトベクトルオペランド長（またはサイズ）。これに対して代替実施形態は、より大きい、小さい、または異なるデータ要素幅（たとえば、１２８ビット（１６バイト）データ要素幅）の、より大きい、小さい、および／または異なるベクトルオペランドサイズ（たとえば、２５６バイトベクトルオペランド）をサポートしてもよい。
【００２９】
図１ＡのクラスＡ命令テンプレートは、以下を含む。１）メモリアクセスなし１０５命令テンプレートには、メモリアクセスなし、フルラウンド制御タイプ演算１１０命令テンプレートおよびメモリアクセスなし、データ変換タイプ演算１１５命令テンプレートが示されており、２）メモリアクセス１２０命令テンプレート内には、メモリアクセス、一時的１２５命令テンプレートおよびメモリアクセス、非一時的１３０命令テンプレートが示されている。図１ＢのクラスＢ命令テンプレートは、以下を含む。１）メモリアクセスなし１０５命令テンプレート内には、メモリアクセスなし、書き込みマスク制御、部分ラウンド制御タイプ演算１１２命令テンプレートおよびメモリアクセスなし、書き込みマスク制御、ｖｓｉｚｅタイプ演算１１７命令テンプレートが示されており、２）メモリアクセス１２０命令テンプレート内には、メモリアクセス、書き込みマスク制御１２７命令テンプレートが示されている。
【００３０】
汎用ベクトルフレンドリー命令フォーマット１００は、図１Ａおよび図１Ｂに示される順序で下記に列挙される以下のフィールドを含む。
【００３１】
フォーマットフィールド１４０−このフィールド内の特定の値（命令フォーマット識別子値）は、ベクトルフレンドリー命令フォーマット、ひいては命令ストリーム内のベクトルフレンドリー命令フォーマットにおける命令の発生を、一意に識別する。そのため、このフィールドは、汎用ベクトルフレンドリー命令フォーマットのみを有する命令セットには必要がないという意味で任意選択的である。
【００３２】
基本演算フィールド１４２−その内容は異なる基本演算を区別する。
【００３３】
レジスタインデックスフィールド１４４−その内容は、直接またはアドレス生成を通じて、レジスタ内またはメモリ内にあっても、ソースおよびデスティネーションオペランドの位置を指定する。これらは、ＰｘＱ（たとえば、３２ｘ５１２、１６ｘ１２８、３２ｘ１０２４、６４ｘ１０２４）レジスタファイルからＮ個のレジスタを選択するのに十分なビット数を含む。一実施形態では、Ｎは最大３つのソースおよび１つのデスティネーションレジスタであり得るが、代替実施形態は、より多いかまたは少ないソースおよびデスティネーションレジスタをサポートしてもよい（たとえば、最大２つのソースをサポートし、これらのソースのうちの１つがデスティネーションとしても機能してもよく、最大３つのソースをサポートして、これらのソースのうちの１つがデスティネーションとしても機能してもよく、最大２つのソースおよび１つのデスティネーションをサポートしてもよい）。
【００３４】
修飾子フィールド１４６−その内容は、メモリアクセスを指定する汎用ベクトル命令フォーマットの命令の出現を、指定しないものから区別する、つまり、メモリアクセスなし１０５命令テンプレートとメモリアクセス１２０命令テンプレートとの間で区別する。メモリアクセス演算はメモリ階層に対して読み出しおよび／または書き込みを行い（場合によっては、レジスタ内の値を使用してソースアドレスおよび／またはデスティネーションアドレスを指定する）、非メモリアクセス演算は行わない（たとえば、ソースおよびデスティネーションはレジスタである）。一実施形態では、このフィールドは、メモリアドレス計算を実行する３つの異なる方法の間でも選択するが、代替実施形態は、より多い、少ない、または異なるメモリアドレス計算を実行する方法をサポートし得る。
【００３５】
拡大演算フィールド１５０−その内容は、基本演算に加えて、様々な異なる演算のうちどれを実行するかを区別する。このフィールドは文脈特定である。本発明の一実施形態では、このフィールドは、クラスフィールド１６８、アルファフィールド１５２、およびベータフィールド１５４に分割される。拡大演算フィールド１５０は、２、３、または４つの命令ではなく１つの命令で共通の演算群を実行できるようにする。
【００３６】
スケールフィールド１６０−その内容は、メモリアドレス生成のためにインデックスフィールドの内容のスケーリングを可能にする（たとえば、２［スケール］＊［インデックス］＋［基本］を使用するアドレス生成のため）。
【００３７】
置換フィールド１６２Ａ−その内容は、メモリアドレス生成の一部として使用される（たとえば、２［スケール］＊［インデックス］＋［基本］＋［置換］を使用するアドレス生成のため）。
【００３８】
置換係数フィールド１６２Ｂ（置換係数フィールド１６２Ｂの真上の置換フィールド１６２Ａの並置は、一方または他方が使用されることを示すことに留意されたい）−その内容は、アドレス生成の一部として使用される。これは、メモリアクセスのサイズ（Ｎ）によってスケーリングされるべき置換係数を指定し、Ｎはメモリアクセス内のバイト数である（たとえば、２［スケール］＊［インデックス］＋［基本］＋［スケーリングされた置換］を使用するアドレス生成のため）。冗長な下位ビットは無視されるため、実効アドレスを計算するのに使用される最終置換を生成するために、置換係数フィールドの内容にメモリオペランドの合計サイズ（Ｎ）が乗算される。Ｎの値は、フルオペコードフィールド１７４（本明細書内で後述される）およびデータ操作フィールド１５４Ｃに基づいて、実行時にプロセッサハードウェアによって決定される。置換フィールド１６２Ａおよび置換係数フィールド１６２Ｂは、これらがメモリアクセスなし１０５命令テンプレートのために使用されないという意味で任意選択的であり、および／または異なる実施形態はこれら２つのうちの一方を実装してもどちらも実装しなくてもよい。
【００３９】
データ要素幅フィールド１６４−その内容は、多数のデータ要素幅のうちどれを使用するかを区別する（いくつかの実施形態では全ての命令について、他の実施形態ではいくつかの命令のみについて）。このフィールドは、１つのデータ要素幅のみがサポートされる場合、および／またはオペコードの何らかの態様を使用してデータ要素幅がサポートされる場合には必要とされないという意味で、任意選択的である。
【００４０】
書き込みマスクフィールド１７０−その内容は、データ要素位置ごとに、デスティネーションベクトルオペランド内のそのデータ要素位置が基本演算および拡大演算の結果を反映するか否かを制御する。クラスＡ命令テンプレートがマージング−書き込みマスキングをサポートする一方で、クラスＢ命令テンプレートはマージング−書き込みマスキングおよびゼロ−書き込みマスキングの両方をサポートする。マージ時に、ベクトルマスクは、デスティネーション中の任意のセットの要素が任意の演算（基本演算および拡大演算によって指定される）の実行中の更新から保護する。別の一実施形態では、対応するマスクビットが０を有するデスティネーションの各要素の古い値を維持する。対照的に、ベクトルマスクをゼロにすると、任意の演算（基本演算および拡大演算によって指定される）の実行中にデスティネーション中の任意のセットの要素をゼロにすることができる。一実施形態では、対応するマスクビットが０値を有するときにデスティネーションの要素は０に設定される。この機能のサブセットは、実行されている演算のベクトル長（つまり、修飾されている要素の最初から最後までの範囲）を制御する能力である。しかしながら、修飾された要素が連続している必要はない。したがって、書き込みマスクフィールド１７０は、ロード、ストア、算術、論理などを含む、部分的なベクトル演算を可能にする。使用すべき書き込みマスクを含む多数の書き込みマスクレジスタのうち１つを書き込みマスクフィールド１７０の内容が選択する（したがって書き込みマスクフィールド１７０の内容は、実行すべきそのマスキングを間接的に識別する）本発明の実施形態が説明されているが、代替実施形態は、代わりにまたは付加的に、マスク書き込みフィールド１７０の内容が実行すべきマスキングを直接指定できるようにする。
【００４１】
即値フィールド１７２−その内容は、即値の指定を可能にする。このフィールドは、即値をサポートしない汎用ベクトルフレンドリーフォーマットの実装には存在せず、即値を使用しない命令には存在しないという意味で、任意選択的である。
【００４２】
クラスフィールド１６８−その内容は、異なるクラスの命令の間で区別する。図１Ａおよび図１Ｂを参照すると、このフィールドの内容は、クラスＡとクラスＢの命令の間で選択する。図１Ａおよび図１Ｂでは、特定の値がフィールド内に存在することを示すために、角を丸めた四角形が使用されている（たとえば、それぞれ図１Ａおよび図１Ｂにおけるクラスフィールド１６８のクラスＡ１６８ＡおよびクラスＢ１６８Ｂ）。
【００４３】
［クラスＡの命令テンプレート］
【００４４】
クラスＡの非メモリアクセス１０５の命令テンプレートの場合、アルファフィールド１５２はＲＳフィールド１５２Ａとして解釈され、その内容は、異なる拡大演算タイプのうちどれが実行されるべきかを区別し（たとえば、ラウンド１５２Ａ．１およびデータ変換１５２Ａ．２がメモリアクセスなし、ラウンドタイプ演算１１０およびメモリアクセスなし、データ変換タイプ演算１１５命令テンプレートに対してそれぞれ指定される）、その一方でベータフィールド１５４は、指定されたタイプの演算のどれが実行されるべきかを区別する。メモリアクセスなし１０５命令テンプレートには、スケールフィールド１６０、置換フィールド１６２Ａ、および置換スケールフィールド１６２Ｂは存在しない。
【００４５】
［メモリアクセスなし命令テンプレート−フルラウンド制御タイプ演算］
【００４６】
メモリアクセスなし、フルラウンド制御タイプ演算１１０命令テンプレートでは、ベータフィールド１５４はラウンド制御フィールド１５４Ａとして解釈され、その内容は静的な丸めを提供する。本発明の記載された実施形態では、ラウンド制御フィールド１５４Ａは全浮動小数点例外抑制（ＳＡＥ）フィールド１５６およびラウンド演算制御フィールド１５８を含むが、代替実施形態は、これら両方の概念をサポートして同じフィールドに符号化してもよく、またはこれらの概念／フィールドの一方または他方を有してもよい（たとえば、ラウンド演算制御フィールド１５８のみを有してもよい）。
【００４７】
ＳＡＥフィールド１５６−その内容は、例外イベント報告を無効化すべきか否かを区別する。ＳＡＥフィールド１５６の内容が、抑制が有効化されたことを示すとき、所与の命令はいかなる種類の浮動小数点例外フラグも報告せず、いかなる浮動小数点例外ハンドラも発生させない。
【００４８】
ラウンド演算制御フィールド１５８−その内容は、丸め演算群のうちどれを実行すべきかを区別する（たとえば、切り上げ、切り捨て、ゼロ方向の丸め、最近接丸め）。こうして、ラウンド演算制御フィールド１５８は、命令ごとに丸めモードを変更できるようにする。プロセッサが丸めモードを指定するための制御レジスタを含む本発明の一実施形態では、ラウンド演算制御フィールド１５０の内容はそのレジスタ値に優先する。
【００４９】
［メモリアクセスなし命令テンプレート−データ変換タイプ演算］
【００５０】
メモリアクセスなし、データ変換タイプ演算１１５命令テンプレートでは、ベータフィールド１５４はデータ変換フィールド１５４Ｂとして解釈され、その内容は、多数のデータ変換のうちどれが実行されるべきかを区別する（たとえば、データ変換なし、スウィズル、ブロードキャスト）。
【００５１】
クラスＡのメモリアクセス１２０命令テンプレートの場合、アルファフィールド１５２はエビクションヒントフィールド１５２Ｂとして解釈され、その内容は、エビクションヒントのうちどれが使用されるべきかを区別し（図１Ａでは、メモリアクセス、一時的１２５命令テンプレートおよびメモリアクセス、非一時的１３０命令テンプレートのために一時的１５２Ｂ．１および非一時的１５２Ｂ．２がそれぞれ指定される）、その一方でベータフィールド１５４はデータ操作フィールド１５４Ｃとして解釈され、その内容は、多数のデータ操作演算（プリミティブとも称される）のうちどれが実行されるべきかを区別する（たとえば、操作なし、ブロードキャスト、ソースのアップコンバージョン、およびデスティネーションのダウンコンバージョン）。メモリアクセス１２０命令テンプレートは、スケールフィールド１６０、および任意選択的に置換フィールド１６２Ａまたは置換スケールフィールド１６２Ｂを含む。
【００５２】
ベクトルメモリ命令は、変換サポートを使用して、メモリからのベクトルロードおよびメモリへのベクトルストアを実行する。通常のベクトル命令と同様に、ベクトルメモリ命令は、実際に転送される要素を書き込みマスクとして選択されたベクトルマスクの内容によって指示して、データ要素ごとにメモリとの間でデータを転送する。
【００５３】
［メモリアクセス命令テンプレート−一時的］
【００５４】
一時的データは、キャッシングの恩恵を受けるのに十分なほど早く再利用されそうなデータである。しかしながらこれはヒントであり、異なるプロセッサが、ヒント全体を無視することを含む異なるやり方でこれを実装し得る。
【００５５】
［メモリアクセス命令テンプレート−非一時的］
【００５６】
非一時的データは、第１レベルキャッシュでのキャッシングの恩恵を受けるのに十分なほど早く再利用されそうもないデータであり、エビクションのために優先されるべきである。しかしながらこれはヒントであり、異なるプロセッサが、ヒント全体を無視することを含む異なるやり方でこれを実装し得る。
【００５７】
［クラスＢの命令テンプレート］
【００５８】
クラスＢの命令テンプレートの場合、アルファフィールド１５２は書き込みマスク制御（Ｚ）フィールド１５２Ｃとして解釈されるべきであり、その内容は、書き込みマスクフィールド１７０によって制御された書き込みマスキングがマージングであるべきかゼロ化であるべきかを区別する。
【００５９】
クラスＢの非メモリアクセス１０５の命令テンプレートの場合、ベータフィールド１５４の一部はＲＬフィールド１５７Ａとして解釈されるべきであり、その内容は、異なる拡大演算タイプのうちどれが実行されるべきかを区別し（たとえば、ラウンド１５７Ａ．１およびベクトル長（ＶＳＩＺＥ）１５７Ａ．２は、メモリアクセスなし、書き込みマスク制御、部分ラウンド制御タイプ演算１１２命令テンプレートおよびメモリアクセスなし、書き込みマスク制御、ＶＳＩＺＥタイプ演算１１７命令テンプレートに対してそれぞれ指定される）、その一方でベータフィールド１５４の残りは、指定されたタイプの演算のどれが実行されるべきかを区別する。メモリアクセスなし１０５命令テンプレートには、スケールフィールド１６０、置換フィールド１６２Ａ、および置換スケールフィールド１６２Ｂは存在しない。
【００６０】
メモリアクセスなし、書き込みマスク制御、部分ラウンド制御タイプ演算１１０命令テンプレートでは、ベータフィールド１５４の残りはラウンド演算フィールド１５９Ａとして解釈され、例外イベント報告は無効化される（所与の命令はいかなる種類の浮動小数点例外フラグも報告せず、いかなる浮動小数点例外ハンドラも発生させない）。
【００６１】
ラウンド演算制御フィールド１５９Ａ−ラウンド演算制御フィールド１５８と同様に、その内容は、丸め演算群のうちどれを実行すべきかを区別する（たとえば、切り上げ、切り捨て、ゼロ方向の丸め、最近接丸め）。こうして、ラウンド演算制御フィールド１５９Ａは、命令ごとに丸めモードを変更できるようにする。プロセッサが丸めモードを指定するための制御レジスタを含む本発明の一実施形態では、ラウンド演算制御フィールド１５０の内容はそのレジスタ値に優先する。
【００６２】
メモリアクセスなし、書き込みマスク制御、ＶＳＩＺＥタイプ演算１１７命令テンプレートでは、ベータフィールド１５４の残りはベクトル長フィールド１５９Ｂとして解釈され、その内容は、多数のデータベクトル長のうちどれが実行されるべきかを区別する（たとえば、１２８、２５６、または５１２バイト）。
【００６３】
クラスＢのメモリアクセス１２０命令テンプレートの場合、ベータフィールド１５４の一部はブロードキャストフィールド１５７Ｂとして解釈され、その内容は、ブロードキャストタイプのデータ操作演算が実行されるべきか否かを区別し、その一方でベータフィールド１５４の残りはベクトル長フィールド１５９Ｂとして解釈される。メモリアクセス１２０命令テンプレートは、スケールフィールド１６０、および任意選択的に置換フィールド１６２Ａまたは置換スケールフィールド１６２Ｂを含む。
【００６４】
汎用ベクトルフレンドリー命令フォーマット１００に関して、フォーマットフィールド１４０、基本演算フィールド１４２、およびデータ要素幅フィールド１６４を含むフルオペコードフィールド１７４が示されている。フルオペコードフィールド１７４がこれらのフィールドの全てを含む一実施形態が示されているが、フルオペコードフィールド１７４は、これらの全てをサポートしない実施形態では、これらのフィールドの全てよりも少ないフィールドを含む。フルオペコードフィールド１７４は、演算コード（オペコード）を提供する。
【００６５】
拡大演算フィールド１５０、データ要素幅フィールド１６４、および書き込みマスクフィールド１７０は、これらの特徴が汎用ベクトルフレンドリー命令フォーマットにおいて命令ごとに指定され得るようにする。
【００６６】
書き込みマスクフィールドおよびデータ要素幅フィールドの組み合わせは、異なるデータ要素幅に基づいてマスクを適用できるようにするという点で、型付き命令を作成する。
【００６７】
クラスＡおよびクラスＢに見られる様々な命令テンプレートは、異なる状況において有益である。本発明のいくつかの実施形態では、異なるプロセッサまたはプロセッサ内の異なるコアは、クラスＡのみ、クラスＢのみ、または両方のクラスをサポートすることができる。たとえば、汎用コンピューティングを目的とした高性能汎用アウトオブオーダーコアはクラスＢのみをサポートでき、主にグラフィックスおよび／または科学（スループット）コンピューティングを目的としたコアはクラスＡのみをサポートでき、両方を目的としたコアは両方をサポートできる（当然ながら、両方のクラスからのテンプレートおよび命令の組み合わせを有するが両方のクラスからの全てのテンプレートおよび命令を有するわけではないコアも、本発明の範囲に含まれる）。また、１つのプロセッサが複数のコアを含んでもよく、その全てが同じクラスをサポートするか、または異なるコアが異なるクラスをサポートする。たとえば、別個のグラフィックスコアおよび汎用コアを有するプロセッサでは、主にグラフィックスおよび／または科学コンピューティングを目的としたグラフィックスコアのうち１つはクラスＡのみをサポートすることができ、その一方で汎用コアのうち１または複数は、クラスＢのみをサポートする汎用コンピューティングを目的としたアウトオブオーダー実行およびレジスタリネーミングを有する高性能汎用コアであってもよい。別個のグラフィックスコアを有していない別のプロセッサは、クラスＡおよびクラスＢの両方をサポートするもう１つの汎用インオーダーまたはアウトオブオーダーコアを含み得る。当然ながら、１つのクラスからの特徴は、本発明の異なる実施形態において別のクラスにも実装され得る。高水準言語で書かれたプログラムは、１）実行のためにターゲットプロセッサによってサポートされるクラスの命令のみを有する形式、または２）全てのクラスの命令の異なる組み合わせを使用して書かれた代替ルーチンを有し、現在コードを実行しているプロセッサによってサポートされる命令に基づいて実行すべきルーチンを選択する制御フローコードを有する形式を含む、様々の異なる実行可能な形式に変換される（たとえば、ジャストインタイムコンパイルまたは静的コンパイル）。
【００６８】
［ＶＥＸ命令フォーマット］
【００６９】
ＶＥＸ符号化は、命令に３つ以上のオペランドを持たせることができ、ＳＩＭＤベクトルレジスタを２８ビットより長くすることができる。ＶＥＸプリフィックスの使用は、３オペランド（またはそれ以上の）構文を提供する。たとえば、前の２オペランド命令はＡ＝Ａ＋Ｂのような演算を実行しており、これがソースオペランドを上書きする。ＶＥＸプリフィックスの使用により、オペランドはＡ＝Ｂ＋Ｃのような非破壊演算を実行することができる。
【００７０】
図２Ａは、ＶＥＸプリフィックス２０２、実オペコードフィールド２３０、Ｍｏｄ  Ｒ／Ｍバイト２４０、ＳＩＢバイト２５０、置換フィールド２６２、およびＩＭＭ８  ２７２を含む例示的なＡＶＸ命令フォーマットを示す。図２Ｂは、図２Ａからのどのフィールドがフルオペコードフィールド２７４および基本演算フィールド２４１を構成するかを示す。図２Ｃは、図２Ａからのどのフィールドがレジスタインデックスフィールド２４４を構成するかを示す。
【００７１】
ＶＥＸプリフィックス（バイト０−２）２０２は、３バイト形式で符号化されている。第１のバイトはフォーマットフィールド２９０（ＶＥＸバイト０、ビット［７：０］）であり、これは明示的なＣ４バイト値（Ｃ４命令フォーマットを区別するために使用される一意の値）を含む。第２から第３バイト（ＶＥＸバイト１−２）は、特定の機能を提供する多数のビットフィールドを含む。具体的には、ＲＥＸフィールド２０５（ＶＥＸバイト１、ビット［７−５］）は、ＶＥＸ．Ｒビットフィールド（ＶＥＸバイト１、ビット［７］−Ｒ）、ＶＥＸ．Ｘビットフィールド（ＶＥＸバイト１、ビット［６］−Ｘ）、およびＶＥＸ．Ｂビットフィールド（ＶＥＸバイト１、ビット［５］−Ｂ）からなる。命令の他のフィールドは、ＶＥＸ．Ｒ、ＶＥＸ．Ｘ、およびＶＥＸ．Ｂを加えることによってＲｒｒｒ、Ｘｘｘｘ、およびＢｂｂｂが形成され得るように、当技術分野で知られているようにレジスタインデックスの下位３ビットを符号化する（ｒｒｒ、ｘｘｘ、およびｂｂｂ）。オペコードマップフィールド２１５（ＶＥＸバイト１、ビット［４：０］−ｍｍｍｍｍ）は、暗黙の先行オペコードバイトを符号化するための内容を含む。Ｗフィールド２６４（ＶＥＸバイト２、ビット［７］−Ｗ）は、表記ＶＥＸ．Ｗによって表され、命令に応じて異なる機能を提供する。ＶＥＸ．ｖｖｖｖ２２０（ＶＥＸバイト２、ビット［６：３］−ｖｖｖｖ）の役割は、以下を含み得る。１）ＶＥＸ．ｖｖｖｖは、反転（１の補数）形式で指定された第１のソースレジスタオペランドを符号化し、２つ以上のソースオペランドを有する命令に有効である。２）ＶＥＸ．ｖｖｖｖは、特定のベクトルシフトのために１の補数形式で指定されたデスティネーションレジスタオペランドを符号化する。または３）ＶＥＸ．ｖｖｖｖはいずれのオペランドも符号化せず、フィールドは確保されて１１１１ｂを含むべきである。ＶＥＸ．Ｌ２６８サイズフィールド（ＶＥＸバイト２、ビット［２］−Ｌ）＝０の場合、２８ビットベクトルを示し、ＶＥＸ．Ｌ＝１の場合、２５６ビットベクトルを示す。プリフィックス符号化フィールド２２５（ＶＥＸバイト２、ビット［１：０］−ｐｐ）は、基本演算フィールド２４１に追加ビットを提供する。
【００７２】
実オペコードフィールド２３０（バイト３）は、オペコードバイトとしても知られている。オペコードの一部はこのフィールドで指定される。
【００７３】
ＭＯＤ  Ｒ／Ｍフィールド２４０（バイト４）は、ＭＯＤフィールド２４２（ビット［７−６］）、Ｒｅｇフィールド２４４（ビット［５−３］）、およびＲ／Ｍフィールド２４６（ビット［２−０］）を含む。Ｒｅｇフィールド２４４の役割は、以下を含み得る。デスティネーションレジスタオペランドまたはソースレジスタオペランド（Ｒｒｒｒのｒｒｒ）のいずれかを符号化する、またはオペコード拡張子として扱われていかなる命令オペランドを符号化するためにも使用されない。Ｒ／Ｍフィールド２４６の役割は、以下を含み得る。メモリアドレスを参照する命令オペランドを符号化する、もしくはデスティネーションレジスタオペランドまたはソースレジスタオペランドのいずれかを符号化する。
【００７４】
スケール、インデックス、ベース（ＳＩＢ）−スケールフィールド２５０（バイト５）の内容はＳＳ２５２（ビット［７−６］）を含み、これはメモリアドレス生成に使用される。ＳＩＢ．ｘｘｘ２５４（ビット［５−３］）およびＳＩＢ．ｂｂｂ２５６（ビット［２−０］）の内容は、レジスタインデックスＸｘｘｘおよびＢｂｂｂに関連して先に言及されている。
【００７５】
置換フィールド２６２および即値フィールド（ＩＭＭ８）２７２はデータを含む。
【００７６】
［例示的なレジスタアーキテクチャ］
【００７７】
図３は、本発明の一実施形態によるレジスタアーキテクチャ３００のブロック図である。図示される実施形態では５１２ビット幅のベクトルレジスタ３１０が３２個あり、これらのレジスタはｚｍｍ０からｚｍｍ３１として参照される。下の６つのｚｍｍレジスタの下位２５６ビットはレジスタｙｍｍ０から１５に重ねられる。下の６つのｚｍｍレジスタの下位１２８ビット（ｙｍｍレジスタの下位１２８ビット）はレジスタｘｍｍ０から１５に重ねられる。
【００７８】
汎用レジスタ３２５−図示される実施形態では、メモリオペランドをアドレス指定するために既存のｘ８６アドレス指定モードと共に使用される１６個の６４ビット汎用レジスタがある。これらのレジスタは、ＲＡＸ、ＲＢＸ、ＲＣＸ、ＲＤＸ、ＲＢＰ、ＲＳＩ、ＲＤＩ、ＲＳＰ、およびＲ８からＲ１５の名前によって参照される。
【００７９】
ＭＭＸパック整数フラットレジスタファイル３５０がエイリアスされる、スカラー浮動小数点スタックレジスタファイル（ｘ８７スタック）３４５−図示される実施形態では、ｘ８７スタックは、ｘ８７命令セット拡張子を使用して３２／６４／８０ビット浮動小数点データに対してスカラー浮動小数点演算を実行するために使用される８要素スタックである。一方、ＭＭＸレジスタは、６４ビットパック整数データに対して演算を実行するため、ならびにＭＭＸレジスタとＸＭＭレジスタとの間で実行されるいくつかの演算のためにオペランドを保持するために、使用される。
【００８０】
本発明の代替実施形態は、より広いまたはより狭いレジスタを使用することができる。加えて、本発明の代替実施形態は、より多い、少ない、または異なるレジスタファイルおよびレジスタを使用することができる。
【００８１】
［例示的なコアアーキテクチャ、プロセッサ、およびコンピュータアーキテクチャ］
【００８２】
プロセッサコアは、異なる方法で、異なる目的のため、そして異なるプロセッサに実装され得る。たとえば、このようなコアの実装は、１）汎用コンピューティングを目的とした汎用インオーダーコア、２）汎用コンピューティングを目的とした高性能汎用アウトオブオーダーコア、３）主にグラフィックスおよび／または科学（スループット）コンピューティングを目的とした専用コア、を含み得る。異なるプロセッサの実装は、１）汎用コンピューティングを目的とした１または複数の汎用インオーダーコアおよび／または汎用コンピューティングを目的とした１または複数の汎用アウトオブオーダーコアを含むＣＰＵ、および２）主にグラフィックスおよび／または科学（スループット）を目的とした１または複数の専用コアを含むコプロセッサ、を含み得る。このような異なるプロセッサは異なるコンピュータシステムアーキテクチャをもたらし、これは、１）ＣＰＵとは別個のチップ上のコプロセッサ、２）ＣＰＵと同じパッケージ内の別個のダイ上のコプロセッサ、３）ＣＰＵと同じダイ上のコプロセッサ（この場合、このようなコプロセッサは、統合グラフィックスおよび／または科学（スループット）ロジックなどの専用ロジック、または専用コアと称されることがある）、および４）同じダイ上に、記載されたＣＰＵ（アプリケーションコアまたはアプリケーションプロセッサと称されることもある）、上述のコプロセッサ、および追加機能を含み得る、システムオンチップ、を含み得る。例示的なコアアーキテクチャが次に説明され、続いて例示的なプロセッサおよびコンピュータアーキテクチャが説明される。本明細書で詳述されるのは、例示的なコア、プロセッサなどを備える回路（ユニット）である。
【００８３】
［例示的なコアアーキテクチャ］
【００８４】
図４Ａは、本発明の実施形態による、例示的なインオーダーパイプライン、および例示的なレジスタリネーミング、アウトオブオーダー発行／実行パイプラインの両方を示すブロック図である。図４Ｂは、本発明の実施形態による、プロセッサに含まれるべきインオーダーアーキテクチャコアおよび例示的なレジスタリネーミングの例示的な実施形態と、アウトオブオーダー発行／実行アーキテクチャコアとの両方を示すブロック図である。図４Ａおよび図４Ｂの実線のボックスはインオーダーパイプラインおよびインオーダーコアを示し、破線のボックスの任意選択的な追加はレジスタリネーミング、アウトオブオーダー発行／実行パイプライン、およびコアを示す。インオーダーの態様がアウトオブオーダーの態様のサブセットであると仮定して、アウトオブオーダーの態様が説明される。
【００８５】
図４Ａでは、プロセッサパイプライン４００は、フェッチステージ４０２、長さ復号ステージ４０４、復号ステージ４０６、割り当てステージ４０８、リネーミングステージ４１０、スケジューリング（ディスパッチまたは発行としても知られる）ステージ４１２、レジスタ読み出し／メモリ読み出しステージ４１４、実行ステージ４１６、ライトバック／メモリ書き込みステージ４１８、例外処理ステージ４２２、およびコミットステージ４２４を含む。
【００８６】
図４Ｂは、実行エンジンユニット４５０に結合されたフロントエンドユニット４３０を含むプロセッサコア４９０を示し、両方ともメモリユニット４７０に結合されている。コア４９０は、縮小命令セットコンピューティング（ＲＩＳＣ）コア、複合命令セットコンピューティング（ＣＩＳＣ）コア、超長命令語（ＶＬＩＷ）コア、もしくはハイブリッドまたは代替のコアタイプであってもよい。さらに別の選択肢として、コア４９０は、たとえばネットワークまたは通信コア、圧縮エンジン、コプロセッサコア、汎用コンピューティンググラフィックス処理ユニット（ＧＰＧＰＵ）コア、グラフィックスコアなどのような、特殊用途コアであってもよい。
【００８７】
フロントエンドユニット４３０は、命令キャッシュユニット４３４に結合された分岐予測ユニット４３２を含み、命令キャッシュユニット４３４は命令翻訳ルックアサイドバッファ（ＴＬＢ）４３６に結合され、これは命令フェッチユニット４３８に接続され、これは復号ユニット４４０に結合されている。復号ユニット４４０（またはデコーダ）は、命令を復号し、出力として１または複数のマイクロ演算、マイクロコードエントリポイント、マイクロ命令、その他の命令、またはその他の制御信号を生成し、これらは元の命令から復号され、または元の命令を別途反映し、または元の命令に由来する。復号ユニット４４０は、様々な異なる機構を用いて実装され得る。適切な機構の例は、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ（ＰＬＡ）、マイクロコード読み出し専用メモリ（ＲＯＭ）などを含むが、これらに限定されない。一実施形態では、コア４９０は、（たとえば、復号ユニット４４０内に、あるいはフロントエンドユニット４３０の中に）特定のマクロ命令のためのマイクロコードを記憶するマイクロコードＲＯＭまたはその他の媒体を含む。復号ユニット４４０は、実行エンジンユニット４５０内のリネーム／アロケータユニット４５２に結合されている。
【００８８】
実行エンジンユニット４５０は、リタイアメントユニット４５４および１または複数のスケジューラユニット４５６のセットに結合されたリネーム／アロケータユニット４５２を含む。スケジューラユニット４５６は、予約ステーション、中央命令ウィンドウなどを含む、任意の数の異なるスケジューラを表す。スケジューラユニット４５６は、物理レジスタファイルユニット４５８に結合されている。物理レジスタファイルユニット４５８の各々は１または複数の物理レジスタファイルを表し、その異なるものたちは、スカラー整数、スカラー浮動小数点、パック整数、パック浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス（たとえば、次に実行される命令のアドレスである命令ポインタ）などの１または複数の異なるデータタイプを記憶する。一実施形態では、物理レジスタファイルユニット４５８は、ベクトルレジスタユニットおよびスカラーレジスタユニットを備える。これらのレジスタユニットは、アーキテクチャベクトルレジスタ、ベクトルマスクレジスタ、および汎用レジスタを提供することができる。物理レジスタファイルユニット４５８には、レジスタリネーミングおよびアウトオブオーダー実行が実装され得る様々な方法を示すためにリタイアメントユニット４５４が重なっている（たとえば、リオーダーバッファおよびリタイアメントレジスタファイルを使用する、将来ファイル、履歴バッファ、およびリタイアメントレジスタファイルを使用する、レジスタマップおよびレジスタのプールを使用する、など）。リタイアメントユニット４５４および物理レジスタファイルユニット４５８は実行クラスタ４６０に結合されている。実行クラスタ４６０は、１または複数の実行ユニット４６２のセットおよび１または複数のメモリアクセスユニット４６４のセットを含む。実行ユニット４６２は、様々な演算（たとえば、シフト、加算、減算、乗算）を、様々なタイプのデータ（たとえば、スカラー浮動小数点、パック整数、パック浮動小数点、ベクトル整数、ベクトル浮動小数点）に対して実行できる。いくつかの実施形態は、特定の機能または機能のセットに専用の複数の実行ユニットを含み得るが、他の実施形態は、１つのみの実行ユニット、または全てが全ての機能を実行する多数の実行ユニットを含んでもよい。特定の実施形態は特定のタイプのデータ／演算に別個のパイプラインを作成するので（たとえば、各々がスケジューラユニット、物理レジスタファイルユニット、および／または実行クラスタを有する、スカラー整数パイプライン、スカラー浮動小数点／パック整数／パック浮動小数点／ベクトル整数／ベクトル浮動小数点パイプライン、および／またはメモリアクセスパイプライン、そして別個のメモリアクセスパイプラインの場合には、このパイプラインの実行クラスタのみがメモリアクセスユニット４６４を有する特定の実施形態が実施される）、スケジューラユニット４５６、物理レジスタファイルユニット４５８、および実行クラスタ４６０は場合により複数であるように示されている。別個のパイプラインが使用される場合、これらのパイプラインのうち１または複数はアウトオブオーダー発行／実行であり、残りはインオーダーであってもよいことも、理解されるべきである。
【００８９】
メモリアクセスユニット４６４のセットはメモリユニット４７０に結合されており、これはレベル２（Ｌ２）キャッシュユニット４７６に結合されたデータキャッシュユニット４７４に結合されたデータＴＬＢユニット４７２を含む。例示的な一実施形態では、メモリアクセスユニット４６４は、ロードユニット、ストアアドレスユニット、およびストアデータユニットを含むことができ、その各々はメモリユニット４７０内のデータＴＬＢユニット４７２に結合されている。命令キャッシュユニット４３４は、メモリユニット４７０内のレベル２（Ｌ２）キャッシュユニット４７６にさらに結合されている。Ｌ２キャッシュユニット４７６は、１または複数の他のレベルのキャッシュおよび最終的にはメインメモリに結合される。
【００９０】
例として、例示的なレジスタリネーミング、アウトオブオーダー発行／実行コアアーキテクチャは、以下のようにパイプライン４００を実装することができる。１）命令フェッチ４３８はフェッチステージ４０２および長さ復号ステージ４０４を実行する。２）復号ユニット４４０は復号ステージ４０６を実行する。３）リネーム／アロケータユニット４５２は割り当てステージ４０８およびリネーミングステージ４１０を実行する。４）スケジューラユニット４５６はスケジュールステージ４１２を実行する。５）物理レジスタファイルユニット４５８およびメモリユニット４７０はレジスタ読み出し／メモリ読み出しステージ４１４を実行し、実行クラスタ４６０は実行ステージ４１６を実行する。６）メモリユニット４７０および物理レジスタファイルユニット４５８はライトバック／メモリ書き込みステージ４１８を実行する。７）様々なユニットが例外処理ステージ４２２に関与し得る。８）リタイアメントユニット４５４および物理レジスタファイルユニット４５８はコミットステージ４２４を実行する。
【００９１】
コア４９０は、本明細書に記載される命令を含む、１または複数の命令セットをサポートし得る（たとえば、（より新しいバージョンで追加されたいくつかの拡張子を有する）ｘ８６命令セット、カリフォルニア州サニーベールのＭＩＰＳ  ＴｅｃｈｎｏｌｏｇｉｅｓのＭＩＰＳ命令セット、カリフォルニア州サニーベールのＡＲＭ  Ｈｏｌｄｉｎｇｓの（ＮＥＯＮなどの任意選択的な追加拡張子を有する）ＡＲＭ命令セット）。一実施形態では、コア４９０はパックデータ命令セット拡張子（たとえば、ＡＶＸ１、ＡＶＸ２）をサポートするロジックを含み、これによって、複数のマルチメディアアプリケーションが使用する演算がパックデータを使用して実行できるようになる。
【００９２】
コアは、（演算またはスレッドの２つ以上のパラレルセットを実行する）マルチスレッド化をサポートしてもよく、タイムスライスマルチスレッド化、（１つの物理コアが、その物理コアが同時にマルチスレッド化されるスレッドの各々に論理コアを提供する）同時マルチスレッド化、またはこれらの組み合わせ（たとえば、Ｉｎｔｅｌ（登録商標）ハイパースレッディングテクノロジーの場合のような、タイムスライスフェッチおよび復号ならびにその後の同時マルチスレッド化）を含む様々な方法で、これを行えることは、理解されるべきである。
【００９３】
レジスタリネーミングはアウトオブオーダー実行の文脈で説明されたが、レジスタリネーミングがインオーダーアーキテクチャで使用されてもよいことは、理解されるべきである。図示されたプロセッサの実施形態はまた、別個の命令およびデータキャッシュユニット４３４／４７４および共有Ｌ２キャッシュユニット４７６も含むが、代替実施形態は、たとえばレベル１（Ｌ１）内部キャッシュ、または複数のレベルの内部キャッシュなど、命令およびデータの両方のための１つの内部キャッシュを有してもよい。いくつかの実施形態では、システムは、内部キャッシュと、コアおよび／またはプロセッサの外部にある外部キャッシュとの組み合わせを含んでもよい。あるいは、キャッシュの全てがコアおよび／またはプロセッサの外部にあってもよい。
【００９４】
［特定の例示的なインオーダーコアアーキテクチャ］
【００９５】
図５Ａおよび図５Ｂは、より具体的で例示的なインオーダーコアアーキテクチャのブロック図を示し、このコアは、チップ内のいくつかのロジックブロック（同じタイプおよび／または異なるタイプの他のコアを含む）のうちの１つとなる。ロジックブロックは、用途に応じて、高帯域幅相互接続ネットワーク（たとえば、リングネットワーク）を通じて何らかの固定機能ロジック、メモリＩ／Ｏインターフェース、およびその他の必要なＩ／Ｏロジックと通信する。
【００９６】
図５Ａは、本発明の実施形態による、オンダイ相互接続ネットワーク５０２との接続およびレベル２（Ｌ２）キャッシュのローカルサブセット５０４を伴う、シングルプロセッサコアのブロック図である。一実施形態では、命令デコーダ５００は、パックデータ命令セット拡張子を有するｘ８６命令セットをサポートする。Ｌ１キャッシュ５０６は、スカラーおよびベクトルユニット内へのキャッシュメモリの低レイテンシアクセスを可能にする。一実施形態では（設計を簡素化するために）、スカラーユニット５０８およびベクトルユニット５１０は別個のレジスタセット（それぞれスカラーレジスタ５１２およびベクトルレジスタ５１４）を使用し、その間で転送されたデータはメモリに書き込まれ、その後レベル１（Ｌ１）キャッシュ５０６から読み出されるが、本発明の代替実施形態は異なるアプローチを使用してもよい（たとえば、１つのレジスタセットを使用するか、書き込み読み出しを伴わずに２つのレジスタファイル間でデータを転送させる通信経路を含む）。
【００９７】
Ｌ２キャッシュのローカルサブセット５０４は、プロセッサコアごとに１つずつの別個のローカルサブセットに分割されるグローバルＬ２キャッシュの一部である。各プロセッサコアは、Ｌ２キャッシュの自身のローカルサブセット５０４への直接アクセスパスを有する。プロセッサコアによって読み出されたデータは、Ｌ２キャッシュサブセット５０４に記憶され、自身のローカルＬ２キャッシュサブセットにアクセスしている他のプロセッサコアと並行して、迅速にアクセスされることが可能である。プロセッサコアによって書き込まれたデータは、自身のＬ２キャッシュサブセット５０４に記憶され、必要であれば他のサブセットからフラッシュされる。リングネットワークは共有データの一貫性を保証する。リングネットワークは、プロセッサコア、Ｌ２キャッシュ、および他のロジックブロックなどのエージェントがチップ内で互いに通信できるようにするために、双方向である。各リングデータパスは、いくつかの実施形態では方向ごとに１０２４ビット幅である。
【００９８】
図５Ｂは、本発明の実施形態による図５Ａのプロセッサコアの一部の拡大図である。図５ＢはＬ１キャッシュ５０６のＬ１データキャッシュ５０６Ａ部分、ならびにベクトルユニット５１０およびベクトルレジスタ５１４に関するさらなる詳細を含む。具体的には、ベクトルユニット５１０は１６幅ベクトル処理ユニット（ＶＰＵ）（１６幅ＡＬＵ５２８を参照）であり、これは整数、単精度浮動小数点、および倍精度浮動小数点命令のうち１または複数を実行する。ＶＰＵは、スウィズルユニット５２０を用いるレジスタ入力のスウィズル、数値変換ユニット５２２Ａおよび５２２Ｂを用いる数値変換、および複製ユニット５２４とメモリ入力とを用いる複製をサポートする。
【００９９】
［統合メモリコントローラおよびグラフィックスを有するプロセッサ］
【０１００】
図６は、本発明の実施形態による、２つ以上のコアを有し、統合メモリコントローラを有し、統合グラフィックスを有することができるプロセッサ６００のブロック図である。図６の実線のボックスは、シングルコア６０２Ａ、システムエージェント６１０、１または複数のバスコントローラユニット６１６のセットを有するプロセッサ６００を示し、その一方で破線のボックスの任意選択的な追加は、複数のコア６０２ＡからＮ、システムエージェントユニット６１０内の１または複数の統合メモリコントローラユニット６１４のセット、および専用ロジック６０８を有する代替プロセッサ６００を示す。
【０１０１】
したがって、プロセッサ６００の異なる実装は、１）（１または複数のコアを含み得る）統合グラフィックスおよび／または科学（スループット）ロジックである専用ロジック６０８、および１または複数の汎用コア（たとえば、汎用インオーダーコア、汎用アウトオブオーダーコア、２つの組み合わせ）であるコア６０２ＡからＮを有するＣＰＵ、２）主にグラフィックスおよび／または科学（スループット）のために統合された複数の専用コアであるコア６０２ＡからＮを有するコプロセッサ、および３）複数の汎用インオーダーコアであるコア６０２ＡからＮを有するコプロセッサ、を含み得る。したがって、プロセッサ６００は、たとえば、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、ＧＰＧＰＵ（汎用グラフィックス処理ユニット）、高スループットメニーインテグレーテッドコア（ＭＩＣ）コプロセッサ（３０以上のコアを含む）、組み込みプロセッサ、などのような、汎用プロセッサ、コプロセッサ、または専用プロセッサであってもよい。プロセッサは、１または複数のチップ上に実装されてもよい。プロセッサ６００は、ＢｉＣＭＯＳ、ＣＭＯＳ、またはＮＭＯＳなどのいくつかのプロセス技術のいずれかを使用した１もしくは複数の基板の一部であってもよく、かつ／またはその基板上に実装されてもよい。
【０１０２】
メモリ階層は、コア６０４ＡからＮの中の１または複数のレベルのキャッシュ、１または複数の共有キャッシュユニット６０６のセット、および統合メモリコントローラユニット６１４のセットに結合された外部メモリ（図示せず）を含む。共有キャッシュユニット６０６のセットは、レベル２（Ｌ２）、レベル３（Ｌ３）、レベル４（Ｌ４）、またはその他のレベルのキャッシュなど、１または複数の中間レベルキャッシュ、最終レベルキャッシュ（ＬＬＣ）、および／またはこれらの組み合わせを含んでもよい。一実施形態では、リングベースの相互接続ユニット６１２は、統合グラフィックスロジック６０８、共有キャッシュユニット６０６のセット、およびシステムエージェントユニット６１０／統合メモリコントローラユニット６１４を相互接続するが、代替実施形態は、このようなユニットを相互接続するための任意の数の公知の技術を使用することができる。一実施形態では、１または複数のキャッシュユニット６０６とコア６０２ＡからＮとの間で一貫性が維持される。
【０１０３】
いくつかの実施形態では、コア６０２ＡからＮのうち１または複数は、マルチスレッド化が可能である。システムエージェント６１０は、コア６０２ＡからＮを調整および動作させるこれらの構成要素を含む。システムエージェントユニット６１０は、たとえば電力制御ユニット（ＰＣＵ）およびディスプレイユニットを含んでもよい。ＰＣＵは、コア６０２ＡからＮおよび統合グラフィックスロジック６０８の電力状態を調整するのに必要なロジックおよび構成要素であるか、またはこれらを含んでもよい。ディスプレイユニットは、１または複数の外部接続されたディスプレイを駆動するためのものである。
【０１０４】
コア６０２ＡからＮは、アーキテクチャ命令セットに関して同種でも異種でもよい。つまり、コア６０２ＡからＮのうち２つ以上が同じ命令セットを実行することができ、その一方で他のものは、その命令セットのサブセットまたは異なる命令セットしか実行することができない。
【０１０５】
［例示的なコンピュータアーキテクチャ］
【０１０６】
図７から図１０は、例示的なコンピュータアーキテクチャのブロック図である。ラップトップ、デスクトップ、ハンドヘルドＰＣ、パーソナルデジタルアシスタント、エンジニアリングワークステーション、サーバ、ネットワーク装置、ネットワークハブ、スイッチ、組み込みプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、グラフィックスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、携帯型メディアプレーヤ、ハンドヘルドデバイス、および様々なその他の電子装置の分野で既知のその他のシステム設計および構成もまた適している。一般に、本明細書に開示されるようなプロセッサおよび／または他の実行ロジックを組み込むことが可能な非常に多様なシステムまたは電子装置が、一般的に適している。
【０１０７】
ここで図７を参照すると、本発明の一実施形態によるシステム７００のブロック図が示されている。システム７００は、コントローラハブ７２０に結合された、１または複数のプロセッサ７１０、７１５を含み得る。一実施形態では、コントローラハブ７２０は、グラフィックスメモリコントローラハブ（ＧＭＣＨ）７９０および入力／出力ハブ（ＩＯＨ）７５０（別個のチップ上にあってもよい）を含む。ＧＭＣＨ７９０は、メモリ７４０およびコプロセッサ７４５が結合されたメモリおよびグラフィックスコントローラを含む。ＩＯＨ７５０は入力／出力（Ｉ／Ｏ）装置７６０をＧＭＣＨ７９０に結合する。あるいは、メモリおよびグラフィックスコントローラのうち一方または両方が（本明細書に記載されるような）プロセッサに統合され、メモリ７４０およびコプロセッサ７４５がプロセッサ７１０、およびＩＯＨ７５０を有する１つのチップ内のコントローラハブ７２０に直接結合される。
【０１０８】
追加のプロセッサ７１５の任意選択的な性質は、図７に破線で示されている。各プロセッサ７１０、７１５は、本明細書に記載される処理コアのうち１または複数を含んでもよく、プロセッサ６００の何らかのバージョンであってもよい。
【０１０９】
メモリ７４０は、たとえば、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、相変化メモリ（ＰＣＭ）、またはこれら２つの組み合わせであってもよい。少なくとも１つの実施形態では、コントローラハブ７２０は、フロントサイドバス（ＦＳＢ）、ポイントツーポイントインターフェース、または類似の接続７９５などのマルチドロップバスを介して、プロセッサ７１０、７１５と通信する。
【０１１０】
一実施形態では、コプロセッサ７４５は、たとえば、高スループットＭＩＣプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、ＧＰＧＰＵ、組み込みプロセッサなどのような、専用プロセッサである。一実施形態では、コントローラハブ７２０は、統合グラフィックスアクセラレータを含んでもよい。
【０１１１】
アーキテクチャ、マイクロアーキテクチャ、熱、消費電力特性などに関することを含む、利点のメトリックスのスペクトルに関して、物理リソース７１０、７１５の間には様々な違いがあり得る。
【０１１２】
一実施形態では、プロセッサ７１０は、一般的なタイプのデータ処理オペレーションを制御する命令を実行する。命令に組み込まれているのはコプロセッサ命令であってもよい。プロセッサ７１０は、これらのコプロセッサ命令を、添付されたコプロセッサ７４５によって実行されるべきタイプのものとして認識する。したがって、プロセッサ７１０は、コプロセッサバスまたはその他の相互接続上で、これらのコプロセッサ命令（またはコプロセッサ命令を表す制御信号）をコプロセッサ７４５に発行する。コプロセッサ７４５は、受信したコプロセッサ命令を受け付けて実行する。
【０１１３】
ここで図８を参照すると、本発明の一実施形態による、第１のより具体的な例示的システム８００のブロック図が示されている。図８に示されるように、マルチプロセッサシステム８００はポイントツーポイント相互接続システムであり、ポイントツーポイント相互接続８５０を介して結合された第１のプロセッサ８７０および第２のプロセッサ８８０を含む。プロセッサ８７０および８８０の各々は、プロセッサ６００の何らかのバージョンであってもよい。本発明の一実施形態では、プロセッサ８７０および８８０はそれぞれプロセッサ７１０および７１５であり、コプロセッサ８３８はコプロセッサ７４５である。別の実施形態では、プロセッサ８７０および８８０はそれぞれプロセッサ７１０およびコプロセッサ７４５である。
【０１１４】
統合メモリコントローラ（ＩＭＣ）ユニット８７２および８８２をそれぞれ含むプロセッサ８７０および８８０が示されている。プロセッサ８７０はまた、そのバスコントローラユニットの一部としてポイントツーポイント（Ｐ−Ｐ）インターフェース８７６および８７８を含み、同様に第２のプロセッサ８８０はＰ−Ｐインターフェース８８６および８８８を含む。プロセッサ８７０、８８０は、Ｐ−Ｐインターフェース回路８７８、８８８を使用して、ポイントツーポイント（Ｐ−Ｐ）インターフェース８５０を介して情報を交換することができる。図８に示されるように、ＩＭＣ８７２および８８２はプロセッサをそれぞれのメモリ、すなわちメモリ８３２およびメモリ８３４に結合するが、これらはそれぞれのプロセッサにローカルに接続されたメインメモリの一部であってもよい。
【０１１５】
プロセッサ８７０、８８０は各々、ポイントツーポイントインターフェース回路８７６、８９４、８８６、８９８を使用して、個別のＰ−Ｐインターフェース８５２、８５４を介してチップセット８９０と情報を交換することができる。チップセット８９０は、高性能インターフェース８９２を介してコプロセッサ８３８と任意選択的に情報を交換することができる。一実施形態では、コプロセッサ８３８は、たとえば、高スループットＭＩＣプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、ＧＰＧＰＵ、組み込みプロセッサなどのような、専用プロセッサである。
【０１１６】
共有キャッシュ（図示せず）は、いずれかのプロセッサの中、または両方のプロセッサの外側に含まれ得るが、プロセッサが低電力モードになった場合に一方または両方のプロセッサのローカルキャッシュ情報が共有キャッシュに記憶され得るように、Ｐ−Ｐ相互接続を介してプロセッサと接続されてもよい。
【０１１７】
チップセット８９０は、インターフェース８９６を介して第１バス８１６に結合されてもよい。一実施形態では、第１バス８１６はペリフェラルコンポーネントインターコネクト（ＰＣＩ）バス、もしくはＰＣＩエクスプレスバスまたは別のＩ／Ｏ相互接続バスなどのバスであってもよいが、本発明の範囲はこれに限定されない。
【０１１８】
図８に示されるように、第１バス８１６を第２バス８２０に結合するバスブリッジ８１８と共に、様々なＩ／Ｏ装置８１４が第１バス８１６に結合されてもよい。一実施形態では、コプロセッサ、高スループットＭＩＣプロセッサ、ＧＰＧＰＵ、アクセラレータ（たとえば、グラフィックスアクセラレータまたはデジタル信号処理（ＤＳＰ）ユニットなど）、フィールドプログラマブルゲートアレイ、またはその他任意のプロセッサなど、１または複数の追加のプロセッサ８１５が、第１バス８１６に結合されている。一実施形態では、第２バス８２０は低ピン数（ＬＰＣ）バスであってもよい。一実施形態では、たとえばキーボードおよび／またはマウス８２２、通信装置８２７、ならびに命令／コードおよびデータ８３０を含み得るディスクドライブまたは別の大容量記憶装置などの記憶ユニット８２８を含む第２バス８２０に、様々な装置が結合されてもよい。さらに、オーディオＩ／Ｏ８２４が第２バス８２０に結合されてもよい。他のアーキテクチャも可能であることに留意されたい。たとえば、図８のポイントツーポイントアーキテクチャの代わりに、システムはマルチドロップバスまたはその他のこのようなアーキテクチャを実装してもよい。
【０１１９】
ここで図９を参照すると、本発明の一実施形態による、第２のより具体的な例示的システム９００のブロック図が示されている。図８および図９の類似の要素には類似の参照番号が付され、図９の他の態様を曖昧にすることを回避するために、図８の特定の態様は図９から省略されている。
【０１２０】
図９は、プロセッサ８７０、８８０が統合メモリならびにＩ／Ｏ制御ロジック（「ＣＬ」）９７２および９８２をそれぞれ含むことを示している。したがって、ＣＬ９７２、９８２は統合メモリコントローラユニットを含み、Ｉ／Ｏ制御ロジックを含む。図９は、メモリ８３２、８３４がＣＬ８７２、８８２に結合されていることのみならず、Ｉ／Ｏ装置９１４もまた制御ロジック８７２、８８２に結合されていることを示している。レガシーＩ／Ｏ装置９１５はチップセット８９０に結合されている。
【０１２１】
ここで図１０を参照すると、本発明の一実施形態によるＳｏＣ１０００のブロック図が示されている。図６の類似の要素には類似の参照番号が付されている。また、破線のボックスは、より高度なＳｏＣ上の任意選択的な特徴である。図１０では、相互接続ユニット１００２は、１または複数のコア１０２Ａ−Ｎのセット、キャッシュユニット６０４Ａ−Ｎ、および共有キャッシュユニット６０６を含むアプリケーションプロセッサ１０１０と、システムエージェントユニット６１０と、バスコントローラユニット６１６と、統合メモリコントローラユニット６１４と、統合グラフィックスロジック、画像プロセッサ、オーディオプロセッサおよびビデオプロセッサを含み得る、１または複数のコプロセッサ１０２０のセットと、スタティックランダムアクセスメモリ（ＳＲＡＭ）ユニット１０３０と、直接メモリアクセス（ＤＭＡ）ユニット１０３２と、１または複数の外部ディスプレイに結合するためのディスプレイユニット１０４０と、に結合されている。一実施形態では、コプロセッサ１０２０は、たとえば、ネットワークまたは通信プロセッサ、圧縮エンジン、ＧＰＧＰＵ、高スループットＭＩＣプロセッサ、組み込みプロセッサなどのような、専用プロセッサを含む。
【０１２２】
本明細書に開示される機構の実施形態は、ハードウェア、ソフトウェア、ファームウェア、またはこのような実装アプローチの組み合わせにおいて実装されてもよい。本発明の実施形態は、少なくとも１つのプロセッサと、（揮発性および不揮発性メモリおよび／または記憶素子を含む）記憶システムと、少なくとも１つの入力装置と、少なくとも１つの出力装置とを備えるプログラマブルシステム上で実行されるコンピュータプログラムまたはプログラムコードとして実装されてもよい。
【０１２３】
図８に示されるコード８３０のようなプログラムコードは、本明細書に記載される機能を実行して出力情報を生成するために、入力命令に適用され得る。出力情報は、既知の方法で、１または複数の出力装置に適用され得る。本出願の目的のため、処理システムは、たとえば、デジタル信号プロセッサ（ＤＳＰ）、マイクロコントローラ、特定用途向け集積回路（ＡＳＩＣ）、またはマイクロプロセッサのようなプロセッサを有する、任意のシステムを含む。
【０１２４】
プログラムコードは処理システムと通信するために、高水準手続き型またはオブジェクト指向プログラミング言語で実装され得る。プログラムコードはまた、望ましければ、アセンブリまたは機械言語で実装されてもよい。実際、本明細書に記載される機構は、いかなる特定のプログラミング言語にも範囲が限定されない。いずれにせよ、言語は、コンパイラ言語またはインタプリタ言語であり得る。
【０１２５】
少なくとも１つの実施形態の１または複数の態様は、機械によって読み出されると、本明細書に記載される技術を実行するためのロジックを機械に作製させる、プロセッサ内の様々なロジックを表現する機械可読媒体上に記憶された代表的命令によって実施され得る。「ＩＰコア」として知られるこのような表現は、有形の機械可読媒体上に記憶され、実際にロジックまたはプロセッサを製造する製造機械にロードするために、様々な顧客または製造施設に供給され得る。
【０１２６】
このような機械可読記憶媒体は、無制限に、ハードディスク、フロッピーディスク、光ディスク、コンパクトディスク読み出し専用メモリ（ＣＤ−ＲＯＭ）、再書き込み可能コンパクトディスク（ＣＤ−ＲＷ）、および光磁気ディスクを含むその他の任意のタイプのディスク、読み出し専用メモリ（ＲＯＭ）、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、スタティックランダムアクセスメモリ（ＳＲＡＭ）、消去可能プログラマブル読み出し専用メモリ（ＥＰＲＯＭ）、フラッシュメモリ、電気的消去可能プログラマブル読み出し専用メモリ（ＥＥＰＲＯＭ）、相変化メモリ（ＰＣＭ）のようなランダムアクセスメモリ（ＲＡＭ）などの半導体デバイス、磁気または光カード、もしくは電子命令を記憶するのに適したその他任意のタイプの媒体などの記憶媒体を含む、機械または装置によって製造または形成された物品の、非一時的で有形の配置を含み得る。
【０１２７】
したがって、本発明の実施形態はまた、命令を含み、ハードウェア記述言語（ＨＤＬ）などの設計データを含む、非一時的で有形の機械可読媒体も含み、これは本明細書に記載される構造、回路、装置、プロセッサ、および／またはシステム機能を定義する。このような実施形態は、プログラム製品と呼ばれることもある。
【０１２８】
［エミュレーション（バイナリ変換、コードモーフィングなどを含む）］
【０１２９】
場合によっては、命令をソース命令セットからターゲット命令セットに変換するために命令変換器が使用されてもよい。たとえば、命令変換器は、ある命令を、コアによって処理される１または複数の他の命令に（たとえば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を使用して）変換、モーフ、エミュレート、または別途変換することができる。命令変換器は、ソフトウェア、ハードウェア、ファームウェア、またはこれらの組み合わせで実装されてもよい。命令変換器は、プロセッサ上にあっても、プロセッサ外にあっても、または部分的にプロセッサ上で部分的にプロセッサ外にあってもよい。
【０１３０】
図１１は、本発明の実施形態による、ソース命令セット内のバイナリ命令をターゲット命令セット内のバイナリ命令に変換するためのソフトウェア命令変換器の使用を対比するブロック図である。図示される実施形態では、命令変換器はソフトウェア命令変換器であるが、代替として命令変換器はソフトウェア、ハードウェア、ファームウェア、またはこれらの様々な組み合わせで実装されてもよい。図１１は、少なくとも１つの第１命令セットコア１１１６を有するプロセッサによって自然に実行され得る第１バイナリコード（たとえば、ｘ８６）１１０６を生成するために第１コンパイラ１１０４を使用してコンパイルされ得る、高水準言語１１０２のプログラムを示す。いくつかの実施形態では、少なくとも１つの第１命令セットコア１１１６を有するプロセッサは、少なくとも１つのｘ８６命令セットコアを有するＩｎｔｅｌプロセッサと実質的に同じ結果を達成するために、（１）Ｉｎｔｅｌのｘ８６命令セットコアの命令セットのかなりの部分、または（２）少なくとも１つのｘ８６命令セットコアを有するＩｎｔｅｌプロセッサ上で実行することを目的とするオブジェクトコードバージョンのアプリケーションまたはその他のソフトウェアを、互換的に実行または別途処理することによって、少なくとも１つのｘ８６命令セットコアを有するＩｎｔｅｌプロセッサと実質的に同じ機能を実行できる任意のプロセッサを表す。第１コンパイラ１１０４は、追加のリンケージ処理があってもなくても、少なくとも１つの第１命令セットコア１１１６を有するプロセッサ上で実行されることが可能な第１命令セット１１０６のバイナリコード（たとえば、オブジェクトコード）を生成するように動作可能なコンパイラを表す。同様に、図１１は、少なくとも１つの第１命令セットコア１１１４のないプロセッサ（たとえば、カリフォルニア州サニーベールのＭＩＰＳ  ＴｅｃｈｎｏｌｏｇｉｅｓのＭＩＰＳ命令セットを実行する、および／またはカリフォルニア州サニーベールのＡＲＭ  ＨｏｌｄｉｎｇｓのＡＲＭ命令セットを実行するコアを備えたプロセッサ）によって自然に実行され得る代替命令セットバイナリコード１１１０を生成するために代替命令セットコンパイラ１１０８を使用してコンパイルされ得る高水準言語１１０２内のプログラムを示す。命令変換器１１１２は、第１バイナリコード１１０６を、第１命令セットコア１１１４のないプロセッサによって自然に実行され得るコードに変換するために使用される。これを可能にする命令変換器を作るのは困難なので、この変換されたコードは代替命令セットバイナリコード１１１０と同じにはなりにくい。しかしながら、変換されたコードは一般的なオペレーションを果たし、代替命令セットからの命令で構成されることになる。したがって、命令変換器１１１２は、エミュレーション、シミュレーション、またはその他のプロセスを通じて、第１命令セットプロセッサまたはコアを有していないプロセッサまたはその他の電子装置が第１バイナリコード１１０６を実行できるようにする、ソフトウェア、ファームウェア、ハードウェア、またはこれらの組み合わせを表す。
［データ表現間の一貫性のある変換を加速する装置および方法］
【０１３１】
前述のように、テンソルデータが位相から位相へ推移するとき、数値表現変換が必要である。変換は従来ソフトウェアによって処理されるが、これは性能に影響を及ぼす可能性がある。
【０１３２】
本発明の一実施形態は、本明細書では記憶補助を受けてＣＯＮＶＮＵＭＥＲＩＣと称されることもある新しい命令、およびテンソルデータをある数値表現から別の数値表現に変換して構造的一貫性を維持するための関連プロセッサ回路を含む。本明細書に記載される様々なテンソル演算を効率的に実行するために、プロセッサの実行回路に行列処理ユニットが組み込まれている。ＣＯＮＶＮＵＭＥＲＩＣ命令の一実施形態は、入力数値表現および所望の出力数値表現を示すソフトウェア指定フィールドを含む。入力／出力要素サイズの可能性がある違いのために、行列処理ユニットは、必要とされる入力および出力帯域幅の差を管理するためのバッファを含んでもよい。
【０１３３】
図１２Ａおよび図１２Ｂは、本発明の実施形態が実装され得る例示的なプロセッサアーキテクチャを示す図である。図示されるアーキテクチャは、コア領域１２０１、および共有または「アンコア」領域１２１０を含む。共有領域１２１０は、コア１２０１ａおよび１２０１ｂの全てまたはサブセットによって共有されるデータ構造および回路を含む。図示される実施形態では、複数のコア１２０１ａおよび１２０１ｂは、複数の命令ストリームまたはスレッドを同時に実行することが可能な同時マルチスレッドコアである。簡略化のために図１２Ａでは２つのコア１２０１ａおよび１２０１ｂのみが示されているが、コア領域１２０１は任意の数のコアを含むことができ、その各々がコア１２０１ａについて示されるのと同じアーキテクチャを含み得ることが、理解されるだろう。別の実施形態は、異種コア（たとえば、低電力コアと高電力／高性能コアとの組み合わせ）を含む。
【０１３４】
図１２Ａに示される様々な構成要素は、図１Ａから図１１の対応する構成要素と同じ方法で実装され得る。たとえば、コア１２０１ａは、図１Ａおよび図１Ｂ並びに図２Ａから図２Ｃの命令フォーマットのうち１つを使用して、および／または図３に示されるレジスタアーキテクチャを使用して、ＣＯＮＶＮＵＭＥＲＩＣ命令を実行することができる。加えて、コア１２０１ａは、図４Ｂに示されるコア４９０の構成要素を含むことができ、本明細書（たとえば、図５Ａ、図５Ｂ、図６など）に記載されるプロセッサ／コア構成要素のいずれかを含むことができる。
【０１３５】
コア１２０１ａおよび１２０１ｂの各々は、システムメモリ１２６０またはＬ１命令キャッシュ１２１０から命令をフェッチする命令フェッチ回路１２１８および命令を復号する復号回路１２０９を含む命令ストリームの、アウトオブオーダー（またはインオーダー）実行を同時に行うための命令パイプライン構成要素を含む。実行回路１２０８は、復号された命令を実行し、命令オペランド、オペコード、および任意の即値によって指定されるような基本的なオペレーションを実行する。
【０１３６】
図示される実施形態では、復号ユニット１２０９は、ＣＯＮＶＮＵＭＥＲＩＣ命令を複数のマイクロオペレーションに復号するＣＯＮＶＮＵＭＥＲＩＣ復号回路１２０９ａを含み、当該複数のマイクロオペレーションは次に、実行回路１２０８の行列処理ユニット（ＭＰＵ）１２０８ａによって実行される。一実施形態では、ＭＰＵ１２０８ａは、高速一時／ローカルストレージ１２０８ｂに結合され、変換命令によって生成された変換結果を記憶した後に、システムメモリ１２６０に結果を返して記憶する。別個のユニットとして示されているが、ＭＰＵ１２０８ａは、実行回路１２０８全体に広がる様々な機能ユニットによって実装されてもよい。また、実行回路１２０８内の構成要素として示されているが、一時ストレージ（ＴＳ）１２０８ｂは、１または複数のレベルのキャッシュに（たとえばデータキャッシュ１２０２に）実装されてもよく、または実行回路１２０８および復号回路１２０９によってアクセス可能な別個の高速メモリ（たとえば、スクラッチパッドメモリ）として実装されてもよい。
【０１３７】
代替実施形態では、図１２Ｂに示されるように、ＭＰＵアクセラレータ１２０１ｄは、キャッシュコヒーレント相互接続を介してプロセッサコア１２０１ａおよび１２０１ｂにしっかりと結合されている（たとえばコアと同じキャッシュコヒーレントメモリトランザクションのセットにＭＰＵが加わる）。この実施形態では、デコーダ１２０９は本明細書に記載される数値ＣＯＮＶＮＵＭＥＲＩＣ命令を復号し、その結果生じるマイクロオペレーションは、テンソル変換回路１２０１ｅおよびローカルバッファまたはメモリ１２０１ｆを用いて本明細書に記載される数値変換を実行するＭＰＵアクセラレータ１２０１ｂに、実行のために渡される。一実施形態では、ローカルバッファまたはメモリ１２０１ｆは、メモリサブシステムによって実装されたキャッシュ一貫性プロトコルに加わるＭＰＵアクセラレータ１２０１ｄのキャッシュを備える。さらに別の実施形態では、ＭＰＵアクセラレータ１２０１ｄは、専用フェッチユニットおよび復号ユニットを備え、それぞれ、メモリから変換命令をフェッチし、命令を復号する。しかしながら、ＭＰＵがプロセッサアーキテクチャに統合される特定の方法は、本発明の基本的な原理には関連しないことに留意すべきである。
【０１３８】
図１２Ａおよび図１２Ｂには、汎用レジスタ（ＧＰＲ）１２１８ｄ、ベクトルレジスタ１２１８ｂのセット、マスクレジスタ１２１８ａのセット、および制御レジスタ１２１８ｃのセットも示されている。一実施形態では、複数のベクトルデータ要素が、２つの２５６ビット値、４つの１２８ビット値、８つの６４ビット値、１６個の３２ビット値などを記憶するための５１２ビット幅を有することができる、各ベクトルレジスタ１２０６にパックされる。しかしながら、本発明の基本的な原理は、いかなる特定のサイズ／タイプのベクトルデータにも限定されない。一実施形態では、マスクレジスタ１２０７は、（たとえば、上述のマスクレジスタｋ０からｋ７として実装される）ベクトルレジスタ１２０６に記憶された値に対してビットマスキング演算を実行するために使用される、８つの６４ビットオペランドマスクレジスタを含む。しかしながら、本発明の基本的な原理は、いかなる特定のマスクレジスタサイズ／タイプにも限定されない。
【０１３９】
制御レジスタ１２１８ｃは、命令を実行することによって、プロセッサコア１２０１ａの現在の状態を判断するために使用される様々な制御ビットまたは「フラグ」を記憶する。限定ではなく例として、ｘ８６アーキテクチャでは、制御レジスタはＥＦＬＡＧＳレジスタを含む。
【０１４０】
オンダイ相互接続（ＩＤＩ）／一貫性プロトコルを実装するＩＤＩなどの相互接続１２０６は、コア１２０１ａおよび１２０１ｂ（および場合によってはＭＰＵアクセラレータ１２０１ｄ）を、互いにかつ共有領域１２１０内の様々な構成要素に通信可能に結合する。たとえば、相互接続１２０６は、コア１２０１ａをインターフェース１２０７を介して、レベル３（Ｌ３）キャッシュと、プロセッサをシステムメモリ１２６０に結合する統合メモリコントローラ１２３０とに結合する。
【０１４１】
統合メモリコントローラ１２３０は、メモリオペレーション（たとえば、システムメモリ１２６０からレジスタへのＭＯＶ）を実行するときに、システムメモリ１２６０へのアクセスを提供する。ＰＣＩエクスプレス回路などの１または複数の入力／出力（Ｉ／Ｏ）回路（図示せず）もまた、共有領域１２１０に含まれ得る。
【０１４２】
命令ポインタレジスタ１２１２は、フェッチ、復号、および実行すべき次の命令を識別する命令ポインタアドレスを記憶する。命令は、システムメモリ１２６０、および／またはＬ２キャッシュ１２１３、共有Ｌ３キャッシュ１２２０、またはＬ１命令キャッシュ１２１０などの１または複数の共有キャッシュレベルから、フェッチまたはプリフェッチされてもよい。加えてＬ１データキャッシュ１２０２は、システムメモリ１２６０からロードされ、および／または命令およびデータの両方をキャッシュする他のキャッシュレベル１２１３、１２２０のうち１つから取り出されたデータを記憶する。命令ＴＬＢ（ＩＴＬＢ）１２１１は、フェッチ回路１２１８によってフェッチされた命令の仮想アドレスから物理アドレスへの変換を記憶し、データＴＬＢ（ＤＴＬＢ）１２０３は、復号回路１２０９および実行回路１２０８によって処置されたデータの仮想アドレスから物理アドレスへの変換を記憶する。
【０１４３】
図１２Ａおよび図１２Ｂはまた、命令分岐アドレスを推測的に予測するための分岐予測ユニット１２２１と、分岐アドレスおよびターゲットアドレスを記憶するための分岐ターゲットバッファ（ＢＴＢ）１２２２とを示す。一実施形態では、分岐履歴テーブル（図示せず）またはその他のデータ構造が、分岐予測／誤予測ごとに維持および更新され、分岐予測ユニット１２２１が次の分岐予測を行うために使用される。
【０１４４】
図１２Ａおよび図１２Ｂは、プロセッサ内で利用される全ての回路および相互接続の包括的な図を提供するように意図されていないことに、留意されたい。むしろ、本発明の実施形態に関連しない構成要素は示されていない。逆に、いくつかの構成要素は、本発明の実施形態が実装され得る例示的なアーキテクチャを提供する目的のためだけに示されている。
【０１４５】
テンソルデータの数値表現の変換は、大きく２つのカテゴリに分類される。１つ目は、要素あたりの入ってくる意味のある有意桁／仮数ビットの数が、要素あたりの出て行く意味のある有意桁／仮数ビットの数よりも多い「ダウンコンバージョン」のケースである。２つ目は、要素あたりの入ってくる意味のある有意桁／仮数ビットの数が、要素あたりの出て行く意味のある有意桁／仮数ビットの数よりも少ない「アップコンバージョン」のケースである。したがって、本出願の文脈において、アップコンバージョンおよびダウンコンバージョンとは、それぞれ、数値表現の総ビット幅の増加および減少を指す。
【０１４６】
アップコンバージョン／ダウンコンバージョンは、必ずではないものの、要素あたりの記憶ビット数の増加／減少に関連していることが多いことに、留意されたい。たとえば、１６ビット固定小数点表現から半精度浮動小数点表現への変換は、ダウンコンバージョンの場合であっても要素あたりの記憶ビット数を減少させない（すなわち、半精度浮動小数点は１６ビット浮動小数点を備えているからである）。変換が要素あたりの記憶ビット数を変える場合、以下に記載されるように、ハードウェア内で何らかの一時的なバッファリングが必要とされることがある。
【０１４７】
様々な形態のＣＯＮＶＮＵＭＥＲＩＣ命令によって実行される変換の例が、図１３から図２４に関連して以下に説明される。これらの図は、メモリ構成およびテンソル構造の一貫性を示すために、幅５１２ｂのメモリアレイに記憶された例示的なテンソルを示している。ビット／要素（ｂｐｅ）が少ない数値タイプからｂｐｅが多い数値タイプに変換するとき、変換後データは入力データよりも広い帯域幅を必要とする。いくつかの実施形態では、性能を向上させるために、バッファまたはキューなどの一時ストレージが使用される。いずれの場合も、テンソル全体は、維持する必要がある定義された（そしてしばしば多次元の）構造を有するので、ＭＰＵ１２０８ａ／１２０１ｄによって実行される変換は個々のテンソル要素の単なる操作以上のものを伴う。
【０１４８】
以下に記載される実施形態は、この一貫性のある構造を維持しながら変換を実行する。たとえば、一実施形態では、全体の出力テンソルデータ構造内の適切な構造的順序付けを保証するために、メモリストレージの前にそれぞれの変換済みテンソルブロックに対してメモリ領域が識別される。場合によっては、これは、後続の変換済みテンソルブロックが正しい構造位置に記憶されることを保証するために、変換済みテンソルブロック間のメモリ内に１または複数のブロックサイズのギャップを確保する必要があるかもしれない。
【０１４９】
最初に図１３を参照すると、明確さのため、メモリアレイビュー１３０１および論理ビュー１３０２を含む、１０２４ｘ１０２４の行列のメモリ構成の２つの異なる図が提供されている。メモリアレイビュー１３０１は、メモリアレイの幅（図示される実施形態では５１２ｂ）を有する配置を備え、各テンソルブロックは最初（Ａ０，０）から最後（Ａ１５，１５）までスタック内に配置されている。論理ビュー１３０２は、テンソル要素を行と列に配置する。たとえば、第１行はテンソルブロックＡ０，０からＡ０，１５を含み、第２行（図示せず）はテンソルブロックＡ１，０からＡ１，１５を含み、以下同様である。
【０１５０】
図１４から図２４は同様に、異なる数値フォーマット間で変換するための異なる変換命令について、メモリアレイビュー１４０１、１５０１、１６０１、１７０１、１８０１、１９０１、２００１、２１０１、２２０１、２３０１、２４０１および論理ビュー１４０２、１５０２、１６０２、１７０２、１８０２、１９０２、２００２、２１０２、２２０２、２３０２、２４０２の両方をそれぞれ含む。なお、これらの異なるビューは基本的なデータを可視化する目的のためだけに提供され、ビュー間で推移するためにオペレーションが実行されていることを示すよう意味するものではないことに、留意されたい。加えて、各図は（論理ビューの観点から）、どのようにしてそれぞれのテンソルデータのブロックが新しいテンソルデータフォーマット１３０４、１４０４、１５０４、１６０４、１７０４、１８０４、１９０４、２００４、２１０４、２２０４、２３０４、２４０４に変換されるかを示し、また、変換されたテンソル値についてそれぞれメモリアレイビュー１３０５、１４０５、１５０５、１６０５、１７０５、１８０５、１９０５、２００５、２１０５、２２０５、２３０５、２４０５を示す。
【０１５１】
図１３に戻ると、８ｂｐｅから１６ｂｐｅへの変換のためのメモリ構成が示されている。幅５１２ｂのメモリアレイ内に記憶された四角いテンソルのブロックサイズは、６４ｘ６４から３２ｘ３２まで変化する。つまり、ＭＰＵ１２０８ａは、テンソルブロック（Ａ０，０）についてブロック（Ａ'０，０）、（Ａ'０，１）、（Ａ'１，０）、および（Ａ'１，１）として示されるように、各６４ｘ６４の８ｂｐｅテンソルを４つの３２ｘ３２の１６ｂｐｅテンソル１３０４に分解する。簡略化のために図示されていないが、ＭＰＵ１２０８ａ（または１２０１ｄ）は、（Ａ０，１）から（Ａ１５，１５）までの残りの要素の各々についても並行して類似のオペレーションを実行する。ここでは、３２ｘ３２テンソルの各々が元の６４ｘ６４ブロックと同じメモリ内の同じストレージを占有することがわかる。
【０１５２】
一実施形態では、ＣＯＮＶＮＵＭＥＲＩＣ命令に応答して、ＭＰＵ１２０８ａ（または１２０１ｄ）は最初に、図１３ではブロック（Ａ'０，０）および（Ａ'０，１）として表される、Ａ０，０の上半分全体（３２ｘ６４）を受信して、その一時記憶メモリ１２０８ｂ内に記憶する。次いでＭＰＵ１２０８ａ／１２０１ｄは、Ａ'０，０を完全に生成し、Ａ'０，１がそれに続くように、記憶されたデータを通る複数の変換パスを実行する。入力データと同様に、結果として得られる１６ｂｐｅ要素を示すために、論理ビュー１３０４およびメモリアレイビュー１３０５の両方が提供される。プロセスはＡ０，０の下半分（３２ｘ６４）についても継続し、ＭＰＵ１２０８ａ／１２０１ｄはＡ'１，０を完全に生成してＡ'１，１がそれに続くように動作している。一実施形態では、ＭＰＵ１２０８ａ／１２０１ｄは、残りのＡ'０，＊ブロック、Ａ'１，＊ブロックなどをＡ'３１，３１ブロックまでシーケンシャルに記憶するために、メモリ内に十分なギャップを持ってメモリアレイ（たとえば、ビュー１３０５参照）内の要素を記憶する。元のブロックＡ０，０が処理されてしまうと、ＭＰＵ１２０８ａ／１２０１ｄは次に８ｂｐｅのＡ０，１ブロックの処理に進み、このブロックに対して同様に動作する。
【０１５３】
異なるバージョンのＣＯＮＶＮＵＭＥＲＩＣ命令に応答して、以下に説明されるようにＭＰＵ１２０８ａ／１２０１ｄによって異なるダウンコンバージョンのオペレーションが実行されてもよい。一実施形態では、これらの異なるバージョンは、ＣＯＮＶＮＵＭＥＲＩＣ命令に対して使用される特定のオペコードで指定される。あるいは、または付加的に、異なるバージョンは、即値を用いて、および／または命令によって参照される特定のオペランドに基づいて、指定されてもよい。
【０１５４】
図１４は、１６ｂｐｅから３２ｂｐｅのＣＯＮＶＮＵＭＥＲＩＣ命令に応答してＭＰＵ１２０８ａ／１２０１ｄによって実行される変換オペレーションの例を示す。つまり、ＭＰＵ１２０８ａ／１２０１ｄは、テンソルブロック（Ａ０，０）についてブロック（Ａ'０，０）、（Ａ'０，１）、（Ａ'１，０）、および（Ａ'１，１）として示されるように、各３２ｘ３２の１６ｂｐｅテンソル（メモリアレイビュー１４０１および論理ビュー１４０２に再度示される）を４つの１６ｘ１６の３２ｂｐｅテンソル１４０４に分解する。簡略化のために図示されていないが、ＭＰＵ１２０８ａ／１２０１ｄは、（Ａ０，１）から（Ａ３１，３１）までの残りの要素の各々についても類似のオペレーションを実行する。１６ｘ１６テンソルの各々が元の３２ｘ３２ブロックと同じメモリ内の同じストレージを占有することがわかる。
【０１５５】
一実施形態では、ＣＯＮＶＮＵＭＥＲＩＣ命令に応答して、ＭＰＵ１２０８ａ／１２０１ｄは最初に、図１４ではブロック（Ａ'０，０）および（Ａ'０，１）として表される、Ａ０，０の上半分全体（１６ｘ３２）を受信して、その一時記憶メモリ１２０８ｂ内に記憶する。次いでＭＰＵ１２０８ａ／１２０１ｄは、Ａ'０，０を完全に生成し、Ａ'０，１がそれに続くように、記憶されたデータを通る複数の変換パスを実行する。入力データと同様に、結果として得られる３２ｂｐｅ要素を示すために、論理ビュー１４０４およびメモリアレイビュー１４０５の両方が提供される。プロセスはＡ０，０の下半分についても継続し、ＭＰＵ１２０８ａ／１２０１ｄはＡ'１，０を完全に生成してＡ'１，１がそれに続くように動作している。一実施形態では、ＭＰＵ１２０８ａ／１２０１ｄは、残りのＡ'０，＊ブロック、Ａ'１，＊ブロックなどをＡ'６３，６３ブロックまでシーケンシャルに記憶するために、メモリ内に十分なギャップを持ってメモリアレイ（たとえば、ビュー１４０５参照）内の要素を記憶する。元のブロックＡ０，０が処理されてしまうと、ＭＰＵ１２０８ａ／１２０１ｄは次に８ｂｐｅのＡ０，１ブロックの処理に進み、このブロックに対して同様に動作する。
【０１５６】
図１５は、テンソルデータ要素のアップコンバージョンを実行する別の実施形態を示す。この場合、ＭＰＵ１２０８ａ／１２０１ｄは８ｂｐｅから３２ｂｐｅのＣＯＮＶＮＵＭＥＲＩＣ命令を実行する。ここで、ＭＰＵ１２０８ａ／１２０１ｄは、メモリアレイビュー１５０４に示されるブロック（Ａ'０，０）および（Ａ'３，０）と共に、論理ビュー１５０３内のブロック（Ａ'０，０）から（Ａ'０，３）、および（Ａ'３，０）、および（Ａ'３，３）として示されるように、各６４ｘ６４の８ｂｐｅテンソル（メモリアレイビュー１５０１および論理ビュー１５０２に再度示される）を１６ｘ１６の３２ｂｐｅテンソルに分解する。簡略化のために図示されていないが、ＭＰＵ１２０８ａ／１２０１ｄは、残りのブロックの各々についても並行して類似のオペレーションを実行する。
【０１５７】
なお、本発明の基本的な原理を遵守しながら様々なその他のデータフォーマットおよび要素サイズが使用され得ることに、留意されたい。たとえば、代替メモリフォーマットは、１６ビットデータタイプを３２ｘ３２として、３２ビットデータタイプを３２ｘ１６として、および８ビットデータタイプを３２ｘ６４として、記憶することができる。これらのデータフォーマットを使用するいくつかの実施形態が、図１６から図１８にそれぞれ示されている。
【０１５８】
図１６は、テンソルデータ要素のアップコンバージョンを実行する別の実施形態を示す。この場合、ＭＰＵ１２０８ａ／１２０１ｄは、６４個の８ビット要素のセットを３２個の１６ビット要素に変換するためのＣＯＮＶＮＵＭＥＲＩＣ命令を実行する。６４個の８ビット要素が３２行に配置されたテンソルブロック（Ａ０，０）の例が示されており、これが２つのテンソルブロック（Ａ'０，０）および（Ａ'０，１）に変換され、その各々は３２行に配置された３２個の１６ビット要素（テンソルブロック１６０３）を有する。
【０１５９】
図１７は、テンソルデータ要素のアップコンバージョンを実行する一実施形態を示す。ＭＰＵ１２０８ａ／１２０１ｄは、３２個の１６ビット要素のセットを１６個の３２ビット要素のセットに変換するためのＣＯＮＶＮＵＭＥＲＩＣ命令を実行する。３２個の８ビット要素が３２行に配置されたテンソルブロック（Ａ０，０）の例が示されており、これが２つのテンソルブロック（Ａ'０，０）および（Ａ'０，１）に変換され、その各々は３２行に配置された１６個の３２ビット要素（テンソルブロック１７０３）を有する。
【０１６０】
図１８は、８ビットテンソルデータ要素から３２ビットテンソルデータ要素へのテンソルのアップコンバージョンを実行する一実施形態を示す。ＭＰＵ１２０８ａ／１２０１ｄは、６４個の８ビット要素の３２行を１６個の３２ビットテンソル要素の３２行に変換するためのＣＯＮＶＮＵＭＥＲＩＣ命令を実行する。６４個の８ビット要素が３２行に配置されたテンソルブロック（Ａ０，０）の例が示されており、これが４つのテンソルブロック（Ａ'０，０）、（Ａ'０，１）、（Ａ'０，２）、および（Ａ'０，３）に変換され、その各々は１６個の３２ビットテンソル要素（テンソルブロック１８０３）３２行を有する。
【０１６１】
大きいｂｐｅのテンソルから小さいｂｐｅのテンソルに変換するとき、変換後データは入力データよりも狭い帯域幅を必要とする。ハードウェアは、出力のために十分な結果要素が累積されるまで、変換された出力を一時ストレージに記憶する。
【０１６２】
ダウンコンバージョンの間、１つの出力ブロックを生成するために、複数の入力テンソルブロックが組み合わせられる。この実施形態では、ＭＰＵ１２０８ａ／１２０１ｄによって使用される一時ストレージ１２０８ｂは、上段ブロックに関する様々なシナリオについて全ての入力データを保持するのに十分な大きさである。
【０１６３】
図１９は、１６ｂｐｅ値のブロックを８ｂｐｅ値に変換する一実施形態を示す。上述の実施形態と同様に、メモリアレイビュー１９０１および論理ビュー１９０２を含むメモリ構成の２つの異なるビューが提供される。この実施形態では、入力テンソルブロックは３２ｘ３２ｘ１６ｂｐｅブロックである。ＭＰＵ１２０８ａ／１２０１ｄはこれらの入力ブロックのうち４つを１つの６４ｘ６４ｘ８ｂｐｅブロックに変換する。たとえば、図１９では、入力ブロック（Ａ０，０）、（Ａ０，１）、（Ａ１，０）、および（Ａ１，１）は、後にメモリアレイ１９０４内の第１メモリ位置に記憶される出力ブロック（Ａ'０，０）１９０３に変換される。一実施形態では、ＭＰＵ１２０８ａ／１２０１ｄは、次の出力ブロック（Ａ'０，１）（たとえば、入力ブロック（Ａ０，２）、（Ａ０，３）、（Ａ１，２）、および（Ａ１，３））を生成するために、次の４つのブロックのセット（図示せず）を使用する。
【０１６４】
図２０は、３２ｂｐｅ値のブロックを１６ｂｐｅ値に変換する一実施形態を示す。前の実施形態と同様に、メモリアレイビュー２００１および論理ビュー２００２が提供される。この実施形態では、入力テンソルブロックは１６ｘ１６ｘ３２ｂｐｅブロックである。ＭＰＵ１２０８ａ／１２０１ｄはこれらの入力ブロックのうち４つを１つの３２ｘ３２ｘ１６ｂｐｅブロックに変換する。たとえば、図２０では、入力ブロック（Ａ０，０）、（Ａ０，１）、（Ａ１，０）、および（Ａ１，１）は、後にメモリアレイ２００４内の第１メモリ位置に記憶される出力ブロック（Ａ'０，０）２００３に変換される。一実施形態では、ＭＰＵ１２０８ａ／１２０１ｄは、次の出力ブロック（Ａ'０，１）（たとえば、入力ブロック（Ａ０，２）、（Ａ０，３）、（Ａ１，２）、および（Ａ１，３））を生成するために、次の４つのブロックのセット（図示せず）を使用する。
【０１６５】
図２１は、３２ｂｐｅ値のブロックを８ｂｐｅ値に変換する一実施形態を示す。前の実施形態と同様に、メモリアレイビュー２１０１および論理ビュー２１０２が提供される。この実施形態では、入力テンソルブロックは１６ｘ１６ｘ３２ｂｐｅブロックである。ＭＰＵ１２０８ａ／１２０１ｄはこれらの入力ブロックのうち１６個を１つの６４ｘ６４ｘ８ｂｐｅブロックに変換する。たとえば、図２０では、入力ブロック（Ａ０，０）、（Ａ０，３）、（Ａ３，０）、および（Ａ３，３）は、後にメモリアレイ２１０４内の第１メモリ位置に記憶される出力ブロック（Ａ'０，０）２１０３に変換される。一実施形態では、ＭＰＵ１２０８ａ／１２０１ｄは、次の出力ブロック（Ａ'０，１）を生成するために、次の４つのブロックのセット（図示せず）を使用する。
【０１６６】
図２２は、１６ｂｐｅ値のブロックを８ｂｐｅ値に変換する別の実施形態を示す。前の実施形態と同様に、メモリアレイビュー２２０１および論理ビュー２２０２が提供される。この実施形態では、入力テンソルブロックは３２ｘ３２ｘ１６ｂｐｅブロックである。ＭＰＵ１２０８ａ／１２０１ｄはこれらの入力ブロックのうち２つを１つの３２ｘ６４ｘ８ｂｐｅブロックに変換する。たとえば、図２０では、入力ブロック（Ａ０，０）および（Ａ０，１）は、後にメモリアレイ２２０４内の第１メモリ位置に記憶される出力ブロック（Ａ'０，０）２２０３に変換される。一実施形態では、ＭＰＵ１２０８ａ／１２０１ｄは、次の出力ブロック（Ａ'０，１）を生成するために、次の２つのブロックのセット（図示せず）を使用する。
【０１６７】
図２３は、１６ｂｐｅ値のブロックを８ｂｐｅ値に変換する別の実施形態を示す。前の実施形態と同様に、メモリアレイビュー２３０１および論理ビュー２３０２が提供される。この実施形態では、入力テンソルブロックは、１６個の３２ビット要素３２行である。ＭＰＵ１２０８ａ／１２０１ｄは、これらの入力ブロックのうち２つを、３２行で配置された３２個の１６ビット要素２３０３のうち１つのテンソルブロックに変換する。たとえば、図２３では、入力ブロック（Ａ０，０）および（Ａ０，１）は、後にメモリアレイ２３０４内の第１メモリ位置に記憶される出力ブロック（Ａ'０，０）２３０３に変換される。一実施形態では、ＭＰＵ１２０８ａ／１２０１ｄは、次の出力ブロック（Ａ'０，１）を生成するために、次の２つのブロックのセット（たとえば、（Ａ０，２）および（Ａ０，３））を使用する。
【０１６８】
図２４は、３２ｂｐｅテンソル値のブロックを８ｂｐｅ値に変換する一実施形態を示す。前の実施形態と同様に、メモリアレイビュー２４０１および論理ビュー２４０２が提供される。この実施形態では、入力テンソルブロックは、１６個の３２ビット要素３２行を備える。ＭＰＵ１２０８ａ／１２０１ｄは、これらの入力ブロックのうち４つを、３２行で配置された６４個の８ビット要素２４０３のうち１つのテンソルブロックに変換する。たとえば、図２４では、入力ブロック（Ａ０，０）および（Ａ０，３）は、後にメモリアレイ２４０４内の第１メモリ位置に記憶される出力ブロック（Ａ'０，０）２４０３に変換される。一実施形態では、ＭＰＵ１２０８ａ／１２０１ｄは、次の出力ブロック（Ａ'０，１）を生成するために、次の４つのブロックのセット（図示せず）を使用する。
【０１６９】
本発明の一実施形態による方法が、図２５に示されている。方法は、本明細書に記載されるプロセッサおよびシステムアーキテクチャ上に実装されてもよいが、いかなる特定のアーキテクチャにも限定されない。
【０１７０】
２５０１で、複数の入力テンソルブロックを備えるソーステンソルデータ構造を識別するソースオペランドを有する数値変換命令（たとえば、ＣＯＮＶＮＵＭＥＲＩＣ）がフェッチされる。上述のように、入力テンソルブロックは、出力／変換済みテンソルブロックにおいて維持されなければならない、事前定義された一貫性のある構造配置を有する。数値変換命令は、入力数値表現および出力数値表現を識別する１または複数のフィールドを含む。
【０１７１】
上述のように、「アップコンバージョン」の場合、入力テンソルブロックの要素あたりビット数は、出力テンソルブロックの要素あたりビット数よりも少ない。逆に、「ダウンコンバージョン」の場合、入力テンソルブロックの要素あたりビット数は、出力テンソルブロックの要素あたりビット数よりも多い。
【０１７２】
２５０２では、数値変換命令が復号される。たとえば、マイクロコード化プロセッサでは、復号により、実行回路内の機能ユニット上でスケジュールおよび実行される１または複数のマイクロオペレーションを生成する。
【０１７３】
２５０３では、入力テンソルブロックのうち１または複数が（たとえばメモリから）取り出され、一時／ローカルストレージに記憶される。一実施形態では、一時／ローカルストレージは、実行回路内のローカルキャッシュまたは高速バッファストレージである。
【０１７４】
２５０４では、数値変換命令が実行されて、デスティネーションテンソルデータ構造の１または複数のデスティネーションテンソルブロック内で各入力テンソルブロック内のテンソル要素を第１数値表現から第２数値表現に変換する。一実施形態では、デスティネーションテンソルブロックの一貫性のある構造配置はデスティネーションテンソルデータ構造において維持される。これはたとえば、デスティネーションテンソルデータ構造内のブロックの最終的な配置を予想し、まだ生成されていない他のデスティネーションテンソルブロックで満たされるべき完成したデスティネーションテンソルブロックの間にメモリのギャップを作成することによって、達成され得る（たとえば、図１３のテンソルブロック（Ａ'１，０）参照）。
【０１７５】
２５０５で決定された、追加の入力テンソルブロックが残っている場合には、これらは２５０３で取り出されて一時／ローカルストレージに記憶され、これらのブロックに対して数値変換オペレーション２５０４が実行される。このプロセスは、処理すべき入力テンソルブロックがなくなるまで繰り返される。２５０６では、数値変換命令がリタイアされ、プロセッサのアーキテクチャ状態が更新される（すなわち、完成したデスティネーションテンソルデータ構造を反映するため）。変換メモリはテンソル全体に適合するには小さすぎる場合があるので、命令のリタイアはローカルストレージ変換と並行して行われてもよい。
【０１７６】
上記の明細書では、本発明の実施形態は、その特定の例示的な実施形態を参照して説明されてきた。しかしながら、添付請求項に明記された本発明のより広い精神および範囲から逸脱することなく、様々な修正および変更が加えられてもよいことは、明らかであろう。したがって、明細書および図面は、限定的ではなく説明的な意味で見なされるべきである。
【０１７７】
装置のいずれかについて記載された構成要素、特徴、および詳細は、いずれの方法にも任意選択的に適用されることが可能であり、これらの方法は実施形態において、このような装置によって、および／またはこのような装置を用いて実行されることが可能である。本明細書に記載されるプロセッサのいずれも、本明細書に開示されるシステムのいずれにも含まれることが可能である。いくつかの実施形態では、コンピュータシステムは、相互接続、相互接続に結合されたプロセッサ、相互接続に結合されたダイナミックランダムアクセスメモリ（ＤＲＡＭ）を含むことができる。あるいは、ＤＲＡＭの代わりに、リフレッシュする必要のない他のタイプの揮発性メモリが使用されてもよく、またはフラッシュメモリが使用されてもよい。
【０１７８】
説明および請求項において、用語「結合された」および／または「接続された」が、その派生語と共に使用されてきたかもしれない。これらの用語は互いに同義語として意図されるものではない。むしろ、実施形態では、「接続された」は２つ以上の要素が互いに直接物理的および／または電気的に接触していることを示すために使用され得る。「結合された」は、２つ以上の要素が互いに直接物理的および／または電気的に接触していることを意味し得る。しかしながら、「結合された」は、２つ以上の要素が互いに直接接触しておらず、それでもなお互いに協働または相互接続していることも意味し得る。たとえば、実行ユニットは、１または複数の介在する構成要素を通じてレジスタおよび／または復号ユニットと結合され得る。図中、接続および結合を示すために矢印が使用されている。
【０１７９】
用語「および／または」が使用されてきたかもしれない。本明細書で使用される際に、用語「および／または」は、一方または他方または両方を意味する（たとえば、Ａおよび／またはＢは、ＡまたはＢまたはＡおよびＢの両方を意味する）。
【０１８０】
上記の説明において、実施形態の完全な理解を提供するために、具体的な詳細が明記されてきた。しかしながら、これらの具体的詳細のうちいくつかがない他の実施形態が実践されてもよい。本発明の範囲は、上記で提供された特定の実施例によってではなく、以下の請求項によってのみ決定されるべきである。他の例では、公知の回路、構造、装置、およびオペレーションは、説明の理解を曖昧にするのを回避するために、ブロック図の形態で、および／または詳細を伴わずに、示されてきた。適切であると考えられる場合、別途指定されるかまたは明らかでない限り、任意選択的に類似のまたは同じ特性を有する、対応する要素または同じ要素を示すために、図面の間で参照番号、または参照番号の末尾が繰り返されている。
【０１８１】
特定のオペレーションは、ハードウェア構成要素によって実行されてもよく、もしくはオペレーションを実行する命令でプログラムされた、機械、回路、またはハードウェア構成要素（たとえば、プロセッサ、プロセッサの一部、回路など）を生じるおよび／またはもたらすために使用され得る機械実行可能命令または回路実行可能命令において、具現化されてもよい。これらのオペレーションはまた、任意選択的に、ハードウェアとソフトウェアの組み合わせによっても実行され得る。プロセッサ、機械、回路、またはハードウェアは、特定のまたは固有の回路またはその他のロジック（たとえば、ファームウェアおよび／またはソフトウェアと潜在的に組み合わせられるハードウェア）を含んでもよく、これは命令を実行および／または処理し、命令に応答して結果を記憶するように動作する。
【０１８２】
いくつかの実施形態は、機械可読媒体を含む製造品（たとえば、コンピュータプログラム製品）を含む。媒体は、機械によって読み取り可能な形態の情報を提供、たとえば記憶する、機構を含んでもよい。機械可読媒体は、機械によって実行された場合および／またはそのようなときに、本明細書に開示される１または複数のオペレーション、方法、または技術を実行する機械を機械が実行するおよび／またはもたらすように動作する、命令または命令のシーケンスを提供するか、または記憶していてもよい。
【０１８３】
いくつかの実施形態では、機械可読媒体は非一時的機械可読記憶媒体を含んでもよい。たとえば、非一時的機械可読記憶媒体は、フロッピーディスケット、光記憶媒体、光ディスク、光データ記憶装置、ＣＤ−ＲＯＭ、磁気ディスク、光磁気ディスク、読み出し専用メモリ（ＲＯＭ）、プログラマブルＲＯＭ（ＰＲＯＭ）、消去可能プログラマブルＲＯＭ（ＥＰＲＯＭ）、電気的消去可能プログラマブルＲＯＭ（ＥＥＰＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、スタティックＲＡＭ（ＳＲＡＭ）、ダイナミックＲＡＭ（ＤＲＡＭ）、フラッシュメモリ、相変化メモリ、相変化データ記憶材料、不揮発性メモリ、不揮発性データ記憶装置、非一時的メモリ、非一時的データ記憶装置などを含んでもよい。非一時的機械可読記憶媒体は、一時的な伝播信号からなるものではない。いくつかの実施形態では、記憶媒体は、固体物質を含む有形の媒体を含んでもよい。
【０１８４】
適切な機械の例は、汎用プロセッサ、専用プロセッサ、デジタル論理回路、集積回路などを含むが、これらに限定されない。適切な機械のさらに別の例は、プロセッサ、デジタル論理回路、または集積回路を含む、コンピュータシステムまたはその他の電子装置を含む。このようなコンピュータシステムまたは電子装置の例は、デスクトップコンピュータ、ラップトップコンピュータ、ノートブックコンピュータ、タブレットコンピュータ、ノートブック、スマートフォン、携帯電話、サーバ、ネットワーク装置（たとえば、ルータおよびスイッチ）、モバイルインターネットデバイス（ＭＩＤ）、メディアプレーヤ、スマートテレビ、ネットトップ、セットトップボックス、およびビデオゲームコントローラを含むが、これらに限定されない。
【０１８５】
本明細書を通して、たとえば「１つの実施形態」、「一実施形態」「１または複数の実施形態」、「いくつかの実施形態」への言及は、本発明の実践に特定の特徴が含まれ得るが、必ずしも必要とは限らないことを示す。同様に、説明において、本開示を簡素化し、様々な発明の態様の理解を助ける目的のために、１つの実施形態、図面、またはその説明において様々な特徴がまとめられることがある。しかしながら、本開示のこの方法は、本発明が各請求項に明確に列挙されたよりも多くの特徴を必要とするという意図を反映していると解釈されるべきではない。むしろ、以下の請求項が反映するように、発明的な態様は、１つの開示された実施形態の全ての特徴よりも少ない特徴にある。したがって、詳細な説明に続く請求項は、詳細な説明に明確に組み込まれており、各請求項は本発明の別個の実施形態として独立している。
【０１８６】
本発明の実施形態は様々なステップを含むことができ、これらは上述されている。ステップは、汎用または専用プロセッサにステップを実行させるために使用され得る機械実行可能命令において具現化され得る。あるいは、これらのステップは、ステップを実行するためのハードワイヤードロジックを含む特定のハードウェア構成要素によって、またはプログラムされたコンピュータ構成要素およびカスタムハードウェア構成要素の任意の組み合わせによって、実行されてもよい。
【０１８７】
本明細書で説明される際に、命令は、特定のオペレーションを実行するように構成された、または非一時的コンピュータ可読媒体内で具現化されたメモリ内に記憶されている事前定義された機能またはソフトウェア命令を有する、特定用途向け集積回路（ＡＳＩＣ）など、ハードウェアの特定の構成を指すことができる。したがって、図面に示される技術は、１または複数の電子装置（たとえば、エンドステーション、ネットワーク要素など）上に記憶および実行されるコードおよびデータを使用して、実装されることが可能である。このような電子装置は、非一時的コンピュータ機械可読記憶媒体（たとえば、磁気ディスク、光ディスク、ランダムアクセスメモリ、読み出し専用メモリ、フラッシュメモリ装置、相変化メモリ）および一時的コンピュータ機械可読通信媒体（たとえば、搬送波、赤外線信号、デジタル信号などのような、電気、光、音響、またはその他の形態の伝播信号）のようなコンピュータ機械可読媒体を使用して、コードおよびデータを記憶および通信する（内部的に、および／またはネットワークを介して他の電子装置と）。加えて、このような電子装置は通常、１または複数の記憶装置（非一時的機械可読記憶媒体）、ユーザ入力／出力装置（たとえば、キーボード、タッチスクリーン、および／またはディスプレイ）、およびネットワーク接続など、１または複数の他の構成要素に結合された１または複数のプロセッサのセットを含む。プロセッサのセットと他の構成要素の結合は、通常、１または複数のバスおよびブリッジ（バスコントローラとも呼ばれる）を通じて行われる。記憶装置およびネットワークトラフィックを搬送する信号は、それぞれ１または複数の機械可読記憶媒体および機械可読通信媒体を表す。したがって、所与の電子装置の記憶装置は通常、その電子装置の１または複数のプロセッサのセット上で実行するためのコードおよび／またはデータを記憶する。当然ながら、本発明の一実施形態の１または複数の部分は、ソフトウェア、ファームウェア、および／またはハードウェアの異なる組み合わせを用いて実装されてもよい。
【０１８８】
この詳細な説明を通して、説明を目的として、本発明の完全な理解を提供するために、多数の具体的な詳細が明記された。しかしながら、本発明がこれらの具体的詳細のいくつかを伴わずに実践されてもよいことは、当業者にとって明らかであろう。特定の例では、本発明の主題を曖昧にするのを回避するために、公知の構造および機能はあまり詳細には説明されなかった。したがって、本発明の範囲および精神は、以下の請求項に関して判断されるべきである。
［他の可能性のある請求項］
（項目１）
ソーステンソルデータ構造のソーステンソルブロックを記憶するための第１ストレージであって、各ソーステンソルブロックは、第１数値表現を含む複数のソーステンソルデータ要素を有し、上記ソーステンソルデータ構造はソーステンソルブロックの事前定義された構造配置を有する、第１ストレージと、
第１テンソル変換命令を復号するためのデコーダと、
上記第１テンソル変換命令の実行に応答して、上記ソーステンソルブロックを、上記第１数値表現とは異なる第２数値表現を含む複数のデスティネーションテンソルデータ要素を有するデスティネーションテンソルブロックに変換するための実行回路であって、上記実行回路は、上記第１数値表現および上記第２数値表現に基づいて指定された順序で１または複数のソーステンソルブロックのセットを１または複数の対応するデスティネーションテンソルブロックに変換し、上記ソーステンソルブロックの上記事前定義された構造配置との一貫性を維持するために、それぞれのデスティネーションテンソルブロックを指示されたメモリ領域に記憶する、実行回路と、
を備えるプロセッサ。
（項目２）
上記デスティネーションテンソルブロックの一部が生成されると、上記デスティネーションテンソルブロックのうち２つ以上が、メモリ内の１または複数のデスティネーションブロックサイズのギャップによって分離される、項目１に記載のプロセッサ。
（項目３）
上記第１数値表現は上記第２数値表現よりも少ないビットを備える、項目１に記載のプロセッサ。
（項目４）
上記実行回路は、各ソーステンソルブロックを複数のデスティネーションテンソルブロックに変換する、項目３に記載のプロセッサ。
（項目５）
上記実行回路は、Ｎ個のソーステンソルブロックを２Ｎ個または４Ｎ個のデスティネーションテンソルブロックに変換する、項目４に記載のプロセッサ。
（項目６）
上記第１数値表現は上記第２数値表現よりも多くのビットを備える、項目１に記載のプロセッサ。
（項目７）
上記実行回路は、複数のソーステンソルブロックを各デスティネーションテンソルブロックに変換する、項目６に記載のプロセッサ。
（項目８）
上記実行回路は、Ｎ個のソーステンソルブロックをＮ／２個またはＮ／４個のデスティネーションテンソルブロックに変換する、項目７に記載のプロセッサ。
（項目９）
ソーステンソルデータ構造のソーステンソルブロックをフェッチするステップであって、各ソーステンソルブロックは、第１数値表現を含む複数のソーステンソルデータ要素を有し、上記ソーステンソルデータ構造はソーステンソルブロックの事前定義された構造配置を有する、ステップと、
１または複数の上記ソーステンソルブロックを、上記第１数値表現とは異なる第２数値表現を含む複数のデスティネーションテンソルデータ要素を有する１または複数のデスティネーションテンソルブロックに変換するステップであって、上記１または複数のソーステンソルブロックのセットは、上記第１数値表現および上記第２数値表現に基づいて指定された順序で１または複数の対応するデスティネーションテンソルブロックに変換される、ステップと、
上記ソーステンソルブロックの上記事前定義された構造配置との一貫性を維持するために、それぞれのデスティネーションテンソルブロックを指示されたメモリ領域に記憶するステップと、
を備える方法。
（項目１０）
上記デスティネーションテンソルブロックの一部が生成されると、上記デスティネーションテンソルブロックのうち２つ以上が、メモリ内の１または複数のデスティネーションブロックサイズのギャップによって分離される、項目９に記載の方法。
（項目１１）
上記第１数値表現は上記第２数値表現よりも少ないビットを備える、項目９に記載の方法。
（項目１２）
各ソーステンソルブロックが複数のデスティネーションテンソルブロックに変換される、項目１１に記載の方法。
（項目１３）
Ｎ個のソーステンソルブロックが２Ｎ個または４Ｎ個のデスティネーションテンソルブロックに変換される、項目１２に記載の方法。
（項目１４）
上記第１数値表現は上記第２数値表現よりも多くのビットを備える、項目９に記載の方法。
（項目１５）
複数のソーステンソルブロックが各デスティネーションテンソルブロックに変換される、項目１４に記載の方法。
（項目１６）
Ｎ個のソーステンソルブロックがＮ／２個またはＮ／４個のデスティネーションテンソルブロックに変換される、項目１５に記載の方法。
（項目１７）
機械によって実行されると、
ソーステンソルデータ構造のソーステンソルブロックをフェッチするオペレーションであって、各ソーステンソルブロックは、第１数値表現を含む複数のソーステンソルデータ要素を有し、上記ソーステンソルデータ構造はソーステンソルブロックの事前定義された構造配置を有する、オペレーションと、
１または複数の上記ソーステンソルブロックを、上記第１数値表現とは異なる第２数値表現を含む複数のデスティネーションテンソルデータ要素を有する１または複数のデスティネーションテンソルブロックに変換するオペレーションであって、上記１または複数のソーステンソルブロックのセットは、上記第１数値表現および上記第２数値表現に基づいて指定された順序で１または複数の対応するデスティネーションテンソルブロックに変換される、オペレーションと、
上記ソーステンソルブロックの上記事前定義された構造配置との一貫性を維持するために、それぞれのデスティネーションテンソルブロックを指示されたメモリ領域に記憶するオペレーションと、
を上記機械に実行させる、プログラムコードを記憶した機械可読媒体。
（項目１８）
上記デスティネーションテンソルブロックの一部が生成されると、上記デスティネーションテンソルブロックのうち２つ以上が、メモリ内の１または複数のデスティネーションブロックサイズのギャップによって分離される、項目１７に記載の機械可読媒体。
（項目１９）
上記第１数値表現は上記第２数値表現よりも少ないビットを備える、項目１７に記載の機械可読媒体。
（項目２０）
各ソーステンソルブロックが複数のデスティネーションテンソルブロックに変換される、項目１９に記載の機械可読媒体。
（項目２１）
Ｎ個のソーステンソルブロックが２Ｎ個または４Ｎ個のデスティネーションテンソルブロックに変換される、項目２０に記載の機械可読媒体。
（項目２２）
上記第１数値表現は上記第２数値表現よりも多くのビットを備える、項目１７に記載の機械可読媒体。
（項目２３）
複数のソーステンソルブロックが各デスティネーションテンソルブロックに変換される、項目２２に記載の機械可読媒体。
（項目２４）
Ｎ個のソーステンソルブロックがＮ／２個またはＮ／４個のデスティネーションテンソルブロックに変換される、項目２３に記載の機械可読媒体。
【図１Ａ】
2020004394.tif 000003
【図１Ｂ】
2020004394.tif 000004
【図２Ａ】
2020004394.tif 000005
【図２Ｂ】
2020004394.tif 000006
【図２Ｃ】
2020004394.tif 000007
【図３】
2020004394.tif 000008
【図４Ａ】
2020004394.tif 000009
【図４Ｂ】
2020004394.tif 000010
【図５Ａ】
2020004394.tif 000011
【図５Ｂ】
2020004394.tif 000012
【図６】
2020004394.tif 000013
【図７】
2020004394.tif 000014
【図８】
2020004394.tif 000015
【図９】
2020004394.tif 000016
【図１０】
2020004394.tif 000017
【図１１】
2020004394.tif 000018
【図１２Ａ】
2020004394.tif 000019
【図１２Ｂ】
2020004394.tif 000020
【図１３】
2020004394.tif 000021
【図１４】
2020004394.tif 000022
【図１５】
2020004394.tif 000023
【図１６】
2020004394.tif 000024
【図１７】
2020004394.tif 000025
【図１８】
2020004394.tif 000026
【図１９】
2020004394.tif 000027
【図２０】
2020004394.tif 000028
【図２１】
2020004394.tif 000029
【図２２】
2020004394.tif 000030
【図２３】
2020004394.tif 000031
【図２４】
2020004394.tif 000032
【図２５】
2020004394.tif 000033
【外国語明細書】
2020004394000001.pdf