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