(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-01-15
(45)【発行日】2024-01-23
(54)【発明の名称】データ表現間の一貫性のある変換を加速するプロセッサ、方法、プログラム、コンピュータ可読記憶媒体、および装置
(51)【国際特許分類】
G06F 9/30 20180101AFI20240116BHJP
G06F 9/315 20180101ALI20240116BHJP
G06F 9/34 20180101ALI20240116BHJP
G06F 9/345 20180101ALI20240116BHJP
【FI】
G06F9/30 350A
G06F9/315 M
G06F9/34 350A
G06F9/345 A
【外国語出願】
(21)【出願番号】P 2019091787
(22)【出願日】2019-05-15
【審査請求日】2022-05-09
(32)【優先日】2018-06-30
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】591003943
【氏名又は名称】インテル・コーポレーション
(74)【代理人】
【識別番号】110000877
【氏名又は名称】弁理士法人RYUKA国際特許事務所
(72)【発明者】
【氏名】クリシュナクマール ナイアー
(72)【発明者】
【氏名】アンドリュー ヤン
(72)【発明者】
【氏名】マイケル ロトジン
(72)【発明者】
【氏名】ニティン ガレグラット
(72)【発明者】
【氏名】トム シェバイ
(72)【発明者】
【氏名】トニー ワーナー
【審査官】坂東 博司
(56)【参考文献】
【文献】米国特許出願公開第2010/0241824(US,A1)
【文献】欧州特許出願公開第01303141(EP,A1)
【文献】米国特許出願公開第2003/0063805(US,A1)
【文献】特開2003-125404(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/30
G06F 9/315
G06F 9/34
G06F 9/345
(57)【特許請求の範囲】
【請求項1】
複数のソーステンソルブロックを含むソーステンソルデータ構
造を記憶するための第1ストレージであって、各ソーステンソルブロックは
、第1ビット数で表現される第1数値表現を含む複数のソーステンソルデータ要素を有し、前記ソーステンソルデータ構造
は、複数のソーステンソルブロックの事前定義された構造配置を有する、第1ストレージと、
第1テンソル変換命令を復号するためのデコーダと、
前記第1テンソル変換命令の実行に応答して、前
記複数のソーステンソルブロックを
、前記第1ビット数とは異な
る第2ビット数で表現される第2数値表現を含む複数のデスティネーションテンソルデータ要素を有す
る複数のデスティネーションテンソルブロックに変換するための実行回路であって、前記実行回路は
、前記複数のソーステンソルブロックの前記事前定義された構造配置との一貫性を維持するために、前記第1ビット数および前記第2ビット数の比率に応じて1つのソーステンソルブロッ
クを複数の対応するデスティネーションテンソルブロックに変換し
、それぞれのデスティネーションテンソルブロックを指示されたメモリ領域に記憶する、実行回路と、
を備
え、
前記第1ビット数は前記第2ビット数の1/2倍であり、
前記実行回路は、1つのソーステンソルブロックを2つの対応するデスティネーションテンソルブロックに変換することによってN個のソーステンソルブロックを2N個のデスティネーションテンソルブロックに変換する、または、1つのソーステンソルブロックを4つの対応するデスティネーションテンソルブロックに変換することによってN個のソーステンソルブロックを4N個のデスティネーションテンソルブロックに変換する、
プロセッサ。
【請求項2】
前
記複数のデスティネーションテンソルブロックの一部が生成されると、前
記複数のデスティネーションテンソルブロックのうち2つ以上が
、1または複数のデスティネーションブロックサイズのギャップによっ
てメモリ内で分離される、請求項1に記載のプロセッサ。
【請求項3】
複数のソーステンソルブロックを含むソーステンソルデータ構造を記憶するための第1ストレージであって、各ソーステンソルブロックは、第1ビット数で表現される第1数値表現を含む複数のソーステンソルデータ要素を有し、前記ソーステンソルデータ構造は、複数のソーステンソルブロックの事前定義された構造配置を有する、第1ストレージと、
第1テンソル変換命令を復号するためのデコーダと、
前記第1テンソル変換命令の実行に応答して、前記複数のソーステンソルブロックを、前記第1ビット数とは異なる第2ビット数で表現される第2数値表現を含む複数のデスティネーションテンソルデータ要素を有する複数のデスティネーションテンソルブロックに変換するための実行回路であって、前記実行回路は、前記複数のソーステンソルブロックの前記事前定義された構造配置との一貫性を維持するために、前記第1ビット数および前記第2ビット数の比率に応じて複数のソーステンソルブロックのセットを1つの対応するデスティネーションテンソルブロックに変換し、それぞれのデスティネーションテンソルブロックを指示されたメモリ領域に記憶する、実行回路と、
を備え、
前記第1ビット数は前記第2ビット数の2倍であり、
前記実行回路は、2つのソーステンソルブロックのセットを1つの対応するデスティネーションテンソルブロックに変換することによってN個のソーステンソルブロックをN/2個のデスティネーションテンソルブロックに変換する、または、4つのソーステンソルブロックのセットを1つの対応するデスティネーションテンソルブロックに変換することによってN個のソーステンソルブロックをN/4個のデスティネーションテンソルブロックに変換する、
プロセッサ。
【請求項4】
前記実行回路は、ディープラーニングの作業が一のフェーズから他のフェーズへ推移するとき、前記複数のソーステンソルブロックを前記複数のデスティネーションテンソルブロックに変換する、請求項1から3のいずれか一項に記載のプロセッサ。
【請求項5】
複数のソーステンソルブロックを含むソーステンソルデータ構
造をフェッチするステップであって、各ソーステンソルブロックは
、第1ビット数で表現される第1数値表現を含む複数のソーステンソルデータ要素を有し、前記ソーステンソルデータ構造
は、複数のソーステンソルブロックの事前定義された構造配置を有する、ステップと
、
前記複数のソーステンソルブロックを
、前記第1ビット数とは異な
る第2ビット数で表現される第2数値表現を含む複数のデスティネーションテンソルデータ要素を有す
る複数のデスティネーションテンソルブロックに変換するステップであって
、前記複数のソーステンソルブロックの前記事前定義された構造配置との一貫性を維持するために、1つのソーステンソルブロッ
クが、前記第1ビット数および前記第2ビット数の比率に応じて複数の対応するデスティネーションテンソルブロックに変換される、ステップと
、
それぞれのデスティネーションテンソルブロックを指示されたメモリ領域に記憶するステップと、
を備
え、
前記第1ビット数は前記第2ビット数の1/2倍であり、
前記変換するステップは、1つのソーステンソルブロックを2つの対応するデスティネーションテンソルブロックに変換することによってN個のソーステンソルブロックを2N個のデスティネーションテンソルブロックに変換する、または、1つのソーステンソルブロックを4つの対応するデスティネーションテンソルブロックに変換することによってN個のソーステンソルブロックを4N個のデスティネーションテンソルブロックに変換する、
方法。
【請求項6】
前
記複数のデスティネーションテンソルブロックの一部が生成されると、前
記複数のデスティネーションテンソルブロックのうち2つ以上が
、1または複数のデスティネーションブロックサイズのギャップによってメモリ内で分離される、請求
項5に記載の方法。
【請求項7】
複数のソーステンソルブロックを含むソーステンソルデータ構造をフェッチするステップであって、各ソーステンソルブロックは、第1ビット数で表現される第1数値表現を含む複数のソーステンソルデータ要素を有し、前記ソーステンソルデータ構造は、複数のソーステンソルブロックの事前定義された構造配置を有する、ステップと、
前記複数のソーステンソルブロックを、前記第1ビット数とは異なる第2ビット数で表現される第2数値表現を含む複数のデスティネーションテンソルデータ要素を有する複数のデスティネーションテンソルブロックに変換するステップであって、前記複数のソーステンソルブロックの前記事前定義された構造配置との一貫性を維持するために、複数のソーステンソルブロックのセットが、前記第1ビット数および前記第2ビット数の比率に応じて1つの対応するデスティネーションテンソルブロックに変換される、ステップと、
それぞれのデスティネーションテンソルブロックを指示されたメモリ領域に記憶するステップと、
を備え、
前記第1ビット数は前記第2ビット数の2倍であり、
前記変換するステップは、2つのソーステンソルブロックのセットを1つの対応するデスティネーションテンソルブロックに変換することによってN個のソーステンソルブロックをN/2個のデスティネーションテンソルブロックに変換する、または、4つのソーステンソルブロックのセットを1つの対応するデスティネーションテンソルブロックに変換することによってN個のソーステンソルブロックをN/4個のデスティネーションテンソルブロックに変換する、
方法。
【請求項8】
前記変換するステップは、ディープラーニングの作業が一のフェーズから他のフェーズへ推移するとき、前記複数のソーステンソルブロックを前記複数のデスティネーションテンソルブロックに変換する、請求項5から7のいずれか一項に記載の方法。
【請求項9】
複数のソーステンソルブロックを含むソーステンソルデータ構
造をフェッチするオペレーションであって、各ソーステンソルブロックは
、第1ビット数で表現される第1数値表現を含む複数のソーステンソルデータ要素を有し、前記ソーステンソルデータ構造
は、複数のソーステンソルブロックの事前定義された構造配置を有する、オペレーションと、
前記複数のソーステンソルブロックを
、前記第1ビット数とは異な
る第2ビット数で表現される第2数値表現を含む複数のデスティネーションテンソルデータ要素を有す
る複数のデスティネーションテンソルブロックに変換するオペレーションであって
、前記複数のソーステンソルブロックの前記事前定義された構造配置との一貫性を維持するために、1つのソーステンソルブロッ
クが、前記第1ビット数および前記第2ビット数の比率に応じて複数の対応するデスティネーションテンソルブロックに変換される、オペレーションと
、
それぞれのデスティネーションテンソルブロックを指示されたメモリ領域に記憶するオペレーションと、
を機械に実行させるためのプログラ
ムであって、
前記第1ビット数は前記第2ビット数の1/2倍であり、
前記変換するオペレーションは、1つのソーステンソルブロックを2つの対応するデスティネーションテンソルブロックに変換することによってN個のソーステンソルブロックを2N個のデスティネーションテンソルブロックに変換する、または、1つのソーステンソルブロックを4つの対応するデスティネーションテンソルブロックに変換することによってN個のソーステンソルブロックを4N個のデスティネーションテンソルブロックに変換する、
プログラム。
【請求項10】
前
記複数のデスティネーションテンソルブロックの一部が生成されると、前
記複数のデスティネーションテンソルブロックのうち2つ以上が
、1または複数のデスティネーションブロックサイズのギャップによっ
てメモリ内で分離される、請求
項9に記載のプログラム。
【請求項11】
複数のソーステンソルブロックを含むソーステンソルデータ構造をフェッチするオペレーションであって、各ソーステンソルブロックは、第1ビット数で表現される第1数値表現を含む複数のソーステンソルデータ要素を有し、前記ソーステンソルデータ構造は、複数のソーステンソルブロックの事前定義された構造配置を有する、オペレーションと、
前記複数のソーステンソルブロックを、前記第1ビット数とは異なる第2ビット数で表現される第2数値表現を含む複数のデスティネーションテンソルデータ要素を有する複数のデスティネーションテンソルブロックに変換するオペレーションであって、前記複数のソーステンソルブロックの前記事前定義された構造配置との一貫性を維持するために、複数のソーステンソルブロックのセットが、前記第1ビット数および前記第2ビット数の比率に応じて1つの対応するデスティネーションテンソルブロックに変換される、オペレーションと、
それぞれのデスティネーションテンソルブロックを指示されたメモリ領域に記憶するオペレーションと、
を機械に実行させるためのプログラムであって、
前記第1ビット数は前記第2ビット数の2倍であり、
前記変換するオペレーションは、2つのソーステンソルブロックのセットを1つの対応するデスティネーションテンソルブロックに変換することによってN個のソーステンソルブロックをN/2個のデスティネーションテンソルブロックに変換する、または、4つのソーステンソルブロックのセットを1つの対応するデスティネーションテンソルブロックに変換することによってN個のソーステンソルブロックをN/4個のデスティネーションテンソルブロックに変換する、
プログラム。
【請求項12】
前記変換するオペレーションは、ディープラーニングの作業が一のフェーズから他のフェーズへ推移するとき、前記複数のソーステンソルブロックを前記複数のデスティネーションテンソルブロックに変換する、請求項9から11のいずれか一項に記載のプログラム。
【請求項13】
請求
項9から12のいずれか一項に記載のプログラムを記憶するコンピュータ可読記憶媒体。
【請求項14】
複数のソーステンソルブロックを含むソーステンソルデータ構
造をフェッチする手段であって、各ソーステンソルブロックは
、第1ビット数で表現される第1数値表現を含む複数のソーステンソルデータ要素を有し、前記ソーステンソルデータ構造
は、複数のソーステンソルブロックの事前定義された構造配置を有する、手段と
、
前記複数のソーステンソルブロックを
、前記第1ビット数とは異な
る第2ビット数で表現される第2数値表現を含む複数のデスティネーションテンソルデータ要素を有す
る複数のデスティネーションテンソルブロックに変換する手段であって
、前記複数のソーステンソルブロックの前記事前定義された構造配置との一貫性を維持するために、1つのソーステンソルブロッ
クが、前記第1ビット数および前記第2ビット数の比率に応じて複数の対応するデスティネーションテンソルブロックに変換される、手段と
、
それぞれのデスティネーションテンソルブロックを指示されたメモリ領域に記憶する手段と、
を備
え、
前記第1ビット数は前記第2ビット数の1/2倍であり、
前記変換する手段は、1つのソーステンソルブロックを2つの対応するデスティネーションテンソルブロックに変換することによってN個のソーステンソルブロックを2N個のデスティネーションテンソルブロックに変換する、または、1つのソーステンソルブロックを4つの対応するデスティネーションテンソルブロックに変換することによってN個のソーステンソルブロックを4N個のデスティネーションテンソルブロックに変換する、
装置。
【請求項15】
複数のソーステンソルブロックを含むソーステンソルデータ構造をフェッチする手段であって、各ソーステンソルブロックは、第1ビット数で表現される第1数値表現を含む複数のソーステンソルデータ要素を有し、前記ソーステンソルデータ構造は、複数のソーステンソルブロックの事前定義された構造配置を有する、手段と、
前記複数のソーステンソルブロックを、前記第1ビット数とは異なる第2ビット数で表現される第2数値表現を含む複数のデスティネーションテンソルデータ要素を有する複数のデスティネーションテンソルブロックに変換する手段であって、前記複数のソーステンソルブロックの前記事前定義された構造配置との一貫性を維持するために、複数のソーステンソルブロックのセットが、前記第1ビット数および前記第2ビット数の比率に応じて1つの対応するデスティネーションテンソルブロックに変換される、手段と、
それぞれのデスティネーションテンソルブロックを指示されたメモリ領域に記憶する手段と、
を備え、
前記第1ビット数は前記第2ビット数の2倍であり、
前記変換する手段は、2つのソーステンソルブロックのセットを1つの対応するデスティネーションテンソルブロックに変換することによってN個のソーステンソルブロックをN/2個のデスティネーションテンソルブロックに変換する、または、4つのソーステンソルブロックのセットを1つの対応するデスティネーションテンソルブロックに変換することによってN個のソーステンソルブロックをN/4個のデスティネーションテンソルブロックに変換する、
装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、概してコンピュータプロセッサの分野に関する。より具体的には、実施形態は、データ表現間の一貫性のある変換を加速する装置および方法に関する。
【背景技術】
【0002】
ディープラーニングの作業負荷は様々なフェーズを経て進行することが多く、各々がテンソルデータ要素の異なる数値表現から恩恵を受ける。一般に、作業負荷処理のいくつかのフェーズはあまり精度を必要とせず、より小さな要素サイズで実行され得るが、他のフェーズはより高い精度を必要とし、より大きい要素サイズを利用する。典型的には、テンソル演算毎秒(TOPS(tensor operations-per-second))は要素サイズと逆にスケーリングするので、より小さい(すなわち低精度)要素で作業するとTOPSが高くなる。
【0003】
しかしながら、テンソルデータがフェーズからフェーズへ推移するとき、数値表現変換が必要である。変換は従来ソフトウェアによって処理されるが、これは性能に影響を及ぼす可能性がある。さらに、テンソル全体は、維持する必要がある定義された(そしてしばしば多次元の)構造を有するので、変換プロセスは個々のテンソル要素の単なる操作以上のものを伴う。
【図面の簡単な説明】
【0004】
本発明のより良い理解は、以下の図面と併せて以下の詳細な説明から得ることができる。
【0005】
【
図1A】本発明の実施形態による汎用ベクトルフレンドリー命令フォーマットおよびその命令テンプレートを示すブロック図である。
【
図1B】本発明の実施形態による汎用ベクトルフレンドリー命令フォーマットおよびその命令テンプレートを示すブロック図である。
【0006】
【
図2A】本発明の実施形態による例示的なVEX命令フォーマットを示すブロック図である。
【
図2B】本発明の実施形態による例示的なVEX命令フォーマットを示すブロック図である。
【
図2C】本発明の実施形態による例示的なVEX命令フォーマットを示すブロック図である。
【0007】
【
図3】本発明の一実施形態によるレジスタアーキテクチャのブロック図である。
【0008】
【
図4A】本発明の実施形態による、例示的なインオーダーフェッチ、復号、リタイアパイプライン、および例示的なレジスタリネーミングと、アウトオブオーダー発行/実行パイプラインとの両方を示すブロック図である。
【0009】
【
図4B】本発明の実施形態による、プロセッサに含まれるべきインオーダーフェッチ、復号、リタイアコアおよび例示的なレジスタリネーミングの例示的な実施形態と、アウトオブオーダー発行/実行アーキテクチャコアとの両方を示すブロック図である。
【0010】
【
図5A】オンダイ相互接続ネットワークへの接続を伴う、シングルプロセッサコアのブロック図である。
【0011】
【
図5B】本発明の実施形態による
図5Aのプロセッサコアの一部の拡大図である。
【0012】
【
図6】本発明の実施形態による、統合メモリコントローラおよびグラフィックスを有するシングルコアプロセッサおよびマルチコアプロセッサのブロック図である。
【0013】
【
図7】本発明の一実施形態によるシステムのブロック図である。
【0014】
【
図8】本発明の一実施形態による第2のシステムのブロック図である。
【0015】
【
図9】本発明の一実施形態による第3のシステムのブロック図である。
【0016】
【
図10】本発明の一実施形態によるシステムオンチップ(SoC)のブロック図である。
【0017】
【
図11】本発明の実施形態による、ソース命令セット内のバイナリ命令をターゲット命令セット内のバイナリ命令に変換するためのソフトウェア命令変換器の使用を対比するブロック図である。
【0018】
【
図12A】本発明の実施形態が実装され得るプロセッサアーキテクチャを示す図である。
【
図12B】本発明の実施形態が実装され得る別のプロセッサアーキテクチャを示す図である。
【0019】
【
図13】テンソルデータ要素をアップコンバートするためのテンソル変換命令の実施形態のオペレーションを示す図である。
【
図14】テンソルデータ要素をアップコンバートするためのテンソル変換命令の別の実施形態のオペレーションを示す図である。
【
図15】テンソルデータ要素をアップコンバートするためのテンソル変換命令の別の実施形態のオペレーションを示す図である。
【
図16】テンソルデータ要素をアップコンバートするためのテンソル変換命令の別の実施形態のオペレーションを示す図である。
【
図17】テンソルデータ要素をアップコンバートするためのテンソル変換命令の別の実施形態のオペレーションを示す図である。
【
図18】テンソルデータ要素をアップコンバートするためのテンソル変換命令の別の実施形態のオペレーションを示す図である。
【0020】
【
図19】テンソルデータ要素をダウンコンバートするためのテンソル変換命令の実施形態のオペレーションを示す図である。
【
図20】テンソルデータ要素をダウンコンバートするためのテンソル変換命令の別の実施形態のオペレーションを示す図である。
【
図21】テンソルデータ要素をダウンコンバートするためのテンソル変換命令の別の実施形態のオペレーションを示す図である。
【
図22】テンソルデータ要素をダウンコンバートするためのテンソル変換命令の別の実施形態のオペレーションを示す図である。
【
図23】テンソルデータ要素をダウンコンバートするためのテンソル変換命令の別の実施形態のオペレーションを示す図である。
【
図24】テンソルデータ要素をダウンコンバートするためのテンソル変換命令の別の実施形態のオペレーションを示す図である。
【0021】
【
図25】本発明の一実施形態による方法を示す図である。
【発明を実施するための形態】
【0022】
以下の説明では、説明を目的として、以下に記載される本発明の実施形態の完全な理解を提供するために、多数の具体的な詳細が明記される。しかしながら、本発明の実施形態がこれらの具体的詳細のいくつかを伴わずに実践されてもよいことは、当業者にとって明らかであろう。他の例では、本発明の実施形態の基本的な原理を曖昧にすることを避けるために、公知の構造および装置はブロック図の形態で示されている。
[例示的なプロセッサアーキテクチャ、命令フォーマット、およびデータタイプ]
【0023】
命令セットは、1または複数の命令フォーマットを含む。所与の命令フォーマットは、とりわけ、実行すべき演算(オペコード)およびこの演算が実行されるオペランドを指定するための様々なフィールド(ビット数、ビットの位置)を定義する。いくつかの命令フォーマットは、命令テンプレート(またはサブフォーマット)の定義を通じてさらに細かく分けられる。たとえば、所与の命令フォーマットの命令テンプレートは、命令フォーマットのフィールドの異なるサブセットを有するように定義されてもよく(含まれるフィールドは通常同じ順序であるが、含まれるフィールドが少ないため少なくともいくつかは異なるビット位置を有する)、および/または所与のフィールドが異なって解釈されるように定義されてもよい。したがって、ISAの各命令は、所与の命令フォーマットを使用して(そして定義されている場合はその命令フォーマットの命令テンプレートのうち所与のものにおいて)表現され、演算およびオペランドを指定するためのフィールドを含む。たとえば、例示的なADD命令は、特定のオペコードと、このオペコードを指定するためのオペコードフィールドおよびオペランドを選択するためのオペランドフィールド(ソース1/デスティネーションおよびソース2)を含む命令フォーマットとを有し、命令ストリーム内でのこのADD命令の発生は、特定のオペランドを選択するオペランドフィールド内に特定の内容を有することになる。
【0024】
本明細書に記載される命令の実施形態は、異なるフォーマットで具現化され得る。加えて、例示的なシステム、アーキテクチャ、およびパイプラインが以下に詳述される。命令の実施形態は、このようなシステム、アーキテクチャ、およびパイプライン上で実行され得るが、詳述されるものに限定されない。
【0025】
[汎用ベクトルフレンドリー命令フォーマット]
【0026】
ベクトルフレンドリー命令フォーマットは、ベクトル命令に適した命令フォーマットである(たとえば、ベクトル演算に固有の特定のフィールドがある)。ベクトルフレンドリー命令フォーマットを通じてベクトル演算とスカラー演算の両方がサポートされる実施形態が説明されているが、代替実施形態は、ベクトルフレンドリー命令フォーマットを通じてベクトル演算のみを使用する。
【0027】
図1Aおよび
図1Bは、本発明の実施形態による汎用ベクトルフレンドリー命令フォーマットおよびその命令テンプレートを示すブロック図である。
図1Aは、本発明の実施形態による、汎用ベクトルフレンドリー命令フォーマットおよびそのクラスA命令テンプレートを示すブロック図であり、
図1Bは、本発明の実施形態による汎用ベクトルフレンドリー命令フォーマットおよびそのクラスB命令テンプレートを示すブロック図である。具体的には、両方ともメモリアクセスなし105命令テンプレートおよびメモリアクセス120命令テンプレートを含むクラスAおよびクラスB命令テンプレートが、そのために定義された汎用ベクトルフレンドリー命令フォーマット100である。ベクトルフレンドリー命令フォーマットの文脈における汎用という用語は、特定の命令セットに結び付けられていない命令フォーマットを指す。
【0028】
ベクトルフレンドリー命令フォーマットが以下をサポートする本発明の実施形態が説明される。32ビット(4バイト)または64ビット(8バイト)データ要素幅(またはサイズ)の64バイトベクトルオペランド長(またはサイズ)(したがって、64バイトベクトルは16個のダブルワードサイズ要素/あるいは8個のクワッドワードサイズ要素のいずれかからなる)/16ビット(2バイト)または8ビット(1バイト)データ要素幅(またはサイズ)の64バイトベクトルオペランド長(またはサイズ)/32ビット(4バイト)、64ビット(8バイト)、16ビット(2バイト)、または8ビット(1バイト)データ要素幅(またはサイズ)の32バイトベクトルオペランド長(またはサイズ)/および32ビット(4バイト)、64ビット(8バイト)、16ビット(2バイト)、または8ビット(1バイト)データ要素幅(またはサイズ)の16バイトベクトルオペランド長(またはサイズ)。これに対して代替実施形態は、より大きい、小さい、または異なるデータ要素幅(たとえば、128ビット(16バイト)データ要素幅)の、より大きい、小さい、および/または異なるベクトルオペランドサイズ(たとえば、256バイトベクトルオペランド)をサポートしてもよい。
【0029】
図1AのクラスA命令テンプレートは、以下を含む。1)メモリアクセスなし105命令テンプレートには、メモリアクセスなし、フルラウンド制御タイプ演算110命令テンプレートおよびメモリアクセスなし、データ変換タイプ演算115命令テンプレートが示されており、2)メモリアクセス120命令テンプレート内には、メモリアクセス、一時的125命令テンプレートおよびメモリアクセス、非一時的130命令テンプレートが示されている。
図1BのクラスB命令テンプレートは、以下を含む。1)メモリアクセスなし105命令テンプレート内には、メモリアクセスなし、書き込みマスク制御、部分ラウンド制御タイプ演算112命令テンプレートおよびメモリアクセスなし、書き込みマスク制御、vsizeタイプ演算117命令テンプレートが示されており、2)メモリアクセス120命令テンプレート内には、メモリアクセス、書き込みマスク制御127命令テンプレートが示されている。
【0030】
汎用ベクトルフレンドリー命令フォーマット100は、
図1Aおよび
図1Bに示される順序で下記に列挙される以下のフィールドを含む。
【0031】
フォーマットフィールド140-このフィールド内の特定の値(命令フォーマット識別子値)は、ベクトルフレンドリー命令フォーマット、ひいては命令ストリーム内のベクトルフレンドリー命令フォーマットにおける命令の発生を、一意に識別する。そのため、このフィールドは、汎用ベクトルフレンドリー命令フォーマットのみを有する命令セットには必要がないという意味で任意選択的である。
【0032】
基本演算フィールド142-その内容は異なる基本演算を区別する。
【0033】
レジスタインデックスフィールド144-その内容は、直接またはアドレス生成を通じて、レジスタ内またはメモリ内にあっても、ソースおよびデスティネーションオペランドの位置を指定する。これらは、PxQ(たとえば、32x512、16x128、32x1024、64x1024)レジスタファイルからN個のレジスタを選択するのに十分なビット数を含む。一実施形態では、Nは最大3つのソースおよび1つのデスティネーションレジスタであり得るが、代替実施形態は、より多いかまたは少ないソースおよびデスティネーションレジスタをサポートしてもよい(たとえば、最大2つのソースをサポートし、これらのソースのうちの1つがデスティネーションとしても機能してもよく、最大3つのソースをサポートして、これらのソースのうちの1つがデスティネーションとしても機能してもよく、最大2つのソースおよび1つのデスティネーションをサポートしてもよい)。
【0034】
修飾子フィールド146-その内容は、メモリアクセスを指定する汎用ベクトル命令フォーマットの命令の出現を、指定しないものから区別する、つまり、メモリアクセスなし105命令テンプレートとメモリアクセス120命令テンプレートとの間で区別する。メモリアクセス演算はメモリ階層に対して読み出しおよび/または書き込みを行い(場合によっては、レジスタ内の値を使用してソースアドレスおよび/またはデスティネーションアドレスを指定する)、非メモリアクセス演算は行わない(たとえば、ソースおよびデスティネーションはレジスタである)。一実施形態では、このフィールドは、メモリアドレス計算を実行する3つの異なる方法の間でも選択するが、代替実施形態は、より多い、少ない、または異なるメモリアドレス計算を実行する方法をサポートし得る。
【0035】
拡大演算フィールド150-その内容は、基本演算に加えて、様々な異なる演算のうちどれを実行するかを区別する。このフィールドは文脈特定である。本発明の一実施形態では、このフィールドは、クラスフィールド168、アルファフィールド152、およびベータフィールド154に分割される。拡大演算フィールド150は、2、3、または4つの命令ではなく1つの命令で共通の演算群を実行できるようにする。
【0036】
スケールフィールド160-その内容は、メモリアドレス生成のためにインデックスフィールドの内容のスケーリングを可能にする(たとえば、2[スケール]*[インデックス]+[基本]を使用するアドレス生成のため)。
【0037】
置換フィールド162A-その内容は、メモリアドレス生成の一部として使用される(たとえば、2[スケール]*[インデックス]+[基本]+[置換]を使用するアドレス生成のため)。
【0038】
置換係数フィールド162B(置換係数フィールド162Bの真上の置換フィールド162Aの並置は、一方または他方が使用されることを示すことに留意されたい)-その内容は、アドレス生成の一部として使用される。これは、メモリアクセスのサイズ(N)によってスケーリングされるべき置換係数を指定し、Nはメモリアクセス内のバイト数である(たとえば、2[スケール]*[インデックス]+[基本]+[スケーリングされた置換]を使用するアドレス生成のため)。冗長な下位ビットは無視されるため、実効アドレスを計算するのに使用される最終置換を生成するために、置換係数フィールドの内容にメモリオペランドの合計サイズ(N)が乗算される。Nの値は、フルオペコードフィールド174(本明細書内で後述される)およびデータ操作フィールド154Cに基づいて、実行時にプロセッサハードウェアによって決定される。置換フィールド162Aおよび置換係数フィールド162Bは、これらがメモリアクセスなし105命令テンプレートのために使用されないという意味で任意選択的であり、および/または異なる実施形態はこれら2つのうちの一方を実装してもどちらも実装しなくてもよい。
【0039】
データ要素幅フィールド164-その内容は、多数のデータ要素幅のうちどれを使用するかを区別する(いくつかの実施形態では全ての命令について、他の実施形態ではいくつかの命令のみについて)。このフィールドは、1つのデータ要素幅のみがサポートされる場合、および/またはオペコードの何らかの態様を使用してデータ要素幅がサポートされる場合には必要とされないという意味で、任意選択的である。
【0040】
書き込みマスクフィールド170-その内容は、データ要素位置ごとに、デスティネーションベクトルオペランド内のそのデータ要素位置が基本演算および拡大演算の結果を反映するか否かを制御する。クラスA命令テンプレートがマージング-書き込みマスキングをサポートする一方で、クラスB命令テンプレートはマージング-書き込みマスキングおよびゼロ-書き込みマスキングの両方をサポートする。マージ時に、ベクトルマスクは、デスティネーション中の任意のセットの要素が任意の演算(基本演算および拡大演算によって指定される)の実行中の更新から保護する。別の一実施形態では、対応するマスクビットが0を有するデスティネーションの各要素の古い値を維持する。対照的に、ベクトルマスクをゼロにすると、任意の演算(基本演算および拡大演算によって指定される)の実行中にデスティネーション中の任意のセットの要素をゼロにすることができる。一実施形態では、対応するマスクビットが0値を有するときにデスティネーションの要素は0に設定される。この機能のサブセットは、実行されている演算のベクトル長(つまり、修飾されている要素の最初から最後までの範囲)を制御する能力である。しかしながら、修飾された要素が連続している必要はない。したがって、書き込みマスクフィールド170は、ロード、ストア、算術、論理などを含む、部分的なベクトル演算を可能にする。使用すべき書き込みマスクを含む多数の書き込みマスクレジスタのうち1つを書き込みマスクフィールド170の内容が選択する(したがって書き込みマスクフィールド170の内容は、実行すべきそのマスキングを間接的に識別する)本発明の実施形態が説明されているが、代替実施形態は、代わりにまたは付加的に、マスク書き込みフィールド170の内容が実行すべきマスキングを直接指定できるようにする。
【0041】
即値フィールド172-その内容は、即値の指定を可能にする。このフィールドは、即値をサポートしない汎用ベクトルフレンドリーフォーマットの実装には存在せず、即値を使用しない命令には存在しないという意味で、任意選択的である。
【0042】
クラスフィールド168-その内容は、異なるクラスの命令の間で区別する。
図1Aおよび
図1Bを参照すると、このフィールドの内容は、クラスAとクラスBの命令の間で選択する。
図1Aおよび
図1Bでは、特定の値がフィールド内に存在することを示すために、角を丸めた四角形が使用されている(たとえば、それぞれ
図1Aおよび
図1Bにおけるクラスフィールド168のクラスA168AおよびクラスB168B)。
【0043】
[クラスAの命令テンプレート]
【0044】
クラスAの非メモリアクセス105の命令テンプレートの場合、アルファフィールド152はRSフィールド152Aとして解釈され、その内容は、異なる拡大演算タイプのうちどれが実行されるべきかを区別し(たとえば、ラウンド152A.1およびデータ変換152A.2がメモリアクセスなし、ラウンドタイプ演算110およびメモリアクセスなし、データ変換タイプ演算115命令テンプレートに対してそれぞれ指定される)、その一方でベータフィールド154は、指定されたタイプの演算のどれが実行されるべきかを区別する。メモリアクセスなし105命令テンプレートには、スケールフィールド160、置換フィールド162A、および置換スケールフィールド162Bは存在しない。
【0045】
[メモリアクセスなし命令テンプレート-フルラウンド制御タイプ演算]
【0046】
メモリアクセスなし、フルラウンド制御タイプ演算110命令テンプレートでは、ベータフィールド154はラウンド制御フィールド154Aとして解釈され、その内容は静的な丸めを提供する。本発明の記載された実施形態では、ラウンド制御フィールド154Aは全浮動小数点例外抑制(SAE)フィールド156およびラウンド演算制御フィールド158を含むが、代替実施形態は、これら両方の概念をサポートして同じフィールドに符号化してもよく、またはこれらの概念/フィールドの一方または他方を有してもよい(たとえば、ラウンド演算制御フィールド158のみを有してもよい)。
【0047】
SAEフィールド156-その内容は、例外イベント報告を無効化すべきか否かを区別する。SAEフィールド156の内容が、抑制が有効化されたことを示すとき、所与の命令はいかなる種類の浮動小数点例外フラグも報告せず、いかなる浮動小数点例外ハンドラも発生させない。
【0048】
ラウンド演算制御フィールド158-その内容は、丸め演算群のうちどれを実行すべきかを区別する(たとえば、切り上げ、切り捨て、ゼロ方向の丸め、最近接丸め)。こうして、ラウンド演算制御フィールド158は、命令ごとに丸めモードを変更できるようにする。プロセッサが丸めモードを指定するための制御レジスタを含む本発明の一実施形態では、ラウンド演算制御フィールド150の内容はそのレジスタ値に優先する。
【0049】
[メモリアクセスなし命令テンプレート-データ変換タイプ演算]
【0050】
メモリアクセスなし、データ変換タイプ演算115命令テンプレートでは、ベータフィールド154はデータ変換フィールド154Bとして解釈され、その内容は、多数のデータ変換のうちどれが実行されるべきかを区別する(たとえば、データ変換なし、スウィズル、ブロードキャスト)。
【0051】
クラスAのメモリアクセス120命令テンプレートの場合、アルファフィールド152はエビクションヒントフィールド152Bとして解釈され、その内容は、エビクションヒントのうちどれが使用されるべきかを区別し(
図1Aでは、メモリアクセス、一時的125命令テンプレートおよびメモリアクセス、非一時的130命令テンプレートのために一時的152B.1および非一時的152B.2がそれぞれ指定される)、その一方でベータフィールド154はデータ操作フィールド154Cとして解釈され、その内容は、多数のデータ操作演算(プリミティブとも称される)のうちどれが実行されるべきかを区別する(たとえば、操作なし、ブロードキャスト、ソースのアップコンバージョン、およびデスティネーションのダウンコンバージョン)。メモリアクセス120命令テンプレートは、スケールフィールド160、および任意選択的に置換フィールド162Aまたは置換スケールフィールド162Bを含む。
【0052】
ベクトルメモリ命令は、変換サポートを使用して、メモリからのベクトルロードおよびメモリへのベクトルストアを実行する。通常のベクトル命令と同様に、ベクトルメモリ命令は、実際に転送される要素を書き込みマスクとして選択されたベクトルマスクの内容によって指示して、データ要素ごとにメモリとの間でデータを転送する。
【0053】
[メモリアクセス命令テンプレート-一時的]
【0054】
一時的データは、キャッシングの恩恵を受けるのに十分なほど早く再利用されそうなデータである。しかしながらこれはヒントであり、異なるプロセッサが、ヒント全体を無視することを含む異なるやり方でこれを実装し得る。
【0055】
[メモリアクセス命令テンプレート-非一時的]
【0056】
非一時的データは、第1レベルキャッシュでのキャッシングの恩恵を受けるのに十分なほど早く再利用されそうもないデータであり、エビクションのために優先されるべきである。しかしながらこれはヒントであり、異なるプロセッサが、ヒント全体を無視することを含む異なるやり方でこれを実装し得る。
【0057】
[クラスBの命令テンプレート]
【0058】
クラスBの命令テンプレートの場合、アルファフィールド152は書き込みマスク制御(Z)フィールド152Cとして解釈されるべきであり、その内容は、書き込みマスクフィールド170によって制御された書き込みマスキングがマージングであるべきかゼロ化であるべきかを区別する。
【0059】
クラスBの非メモリアクセス105の命令テンプレートの場合、ベータフィールド154の一部はRLフィールド157Aとして解釈されるべきであり、その内容は、異なる拡大演算タイプのうちどれが実行されるべきかを区別し(たとえば、ラウンド157A.1およびベクトル長(VSIZE)157A.2は、メモリアクセスなし、書き込みマスク制御、部分ラウンド制御タイプ演算112命令テンプレートおよびメモリアクセスなし、書き込みマスク制御、VSIZEタイプ演算117命令テンプレートに対してそれぞれ指定される)、その一方でベータフィールド154の残りは、指定されたタイプの演算のどれが実行されるべきかを区別する。メモリアクセスなし105命令テンプレートには、スケールフィールド160、置換フィールド162A、および置換スケールフィールド162Bは存在しない。
【0060】
メモリアクセスなし、書き込みマスク制御、部分ラウンド制御タイプ演算110命令テンプレートでは、ベータフィールド154の残りはラウンド演算フィールド159Aとして解釈され、例外イベント報告は無効化される(所与の命令はいかなる種類の浮動小数点例外フラグも報告せず、いかなる浮動小数点例外ハンドラも発生させない)。
【0061】
ラウンド演算制御フィールド159A-ラウンド演算制御フィールド158と同様に、その内容は、丸め演算群のうちどれを実行すべきかを区別する(たとえば、切り上げ、切り捨て、ゼロ方向の丸め、最近接丸め)。こうして、ラウンド演算制御フィールド159Aは、命令ごとに丸めモードを変更できるようにする。プロセッサが丸めモードを指定するための制御レジスタを含む本発明の一実施形態では、ラウンド演算制御フィールド150の内容はそのレジスタ値に優先する。
【0062】
メモリアクセスなし、書き込みマスク制御、VSIZEタイプ演算117命令テンプレートでは、ベータフィールド154の残りはベクトル長フィールド159Bとして解釈され、その内容は、多数のデータベクトル長のうちどれが実行されるべきかを区別する(たとえば、128、256、または512バイト)。
【0063】
クラスBのメモリアクセス120命令テンプレートの場合、ベータフィールド154の一部はブロードキャストフィールド157Bとして解釈され、その内容は、ブロードキャストタイプのデータ操作演算が実行されるべきか否かを区別し、その一方でベータフィールド154の残りはベクトル長フィールド159Bとして解釈される。メモリアクセス120命令テンプレートは、スケールフィールド160、および任意選択的に置換フィールド162Aまたは置換スケールフィールド162Bを含む。
【0064】
汎用ベクトルフレンドリー命令フォーマット100に関して、フォーマットフィールド140、基本演算フィールド142、およびデータ要素幅フィールド164を含むフルオペコードフィールド174が示されている。フルオペコードフィールド174がこれらのフィールドの全てを含む一実施形態が示されているが、フルオペコードフィールド174は、これらの全てをサポートしない実施形態では、これらのフィールドの全てよりも少ないフィールドを含む。フルオペコードフィールド174は、演算コード(オペコード)を提供する。
【0065】
拡大演算フィールド150、データ要素幅フィールド164、および書き込みマスクフィールド170は、これらの特徴が汎用ベクトルフレンドリー命令フォーマットにおいて命令ごとに指定され得るようにする。
【0066】
書き込みマスクフィールドおよびデータ要素幅フィールドの組み合わせは、異なるデータ要素幅に基づいてマスクを適用できるようにするという点で、型付き命令を作成する。
【0067】
クラスAおよびクラスBに見られる様々な命令テンプレートは、異なる状況において有益である。本発明のいくつかの実施形態では、異なるプロセッサまたはプロセッサ内の異なるコアは、クラスAのみ、クラスBのみ、または両方のクラスをサポートすることができる。たとえば、汎用コンピューティングを目的とした高性能汎用アウトオブオーダーコアはクラスBのみをサポートでき、主にグラフィックスおよび/または科学(スループット)コンピューティングを目的としたコアはクラスAのみをサポートでき、両方を目的としたコアは両方をサポートできる(当然ながら、両方のクラスからのテンプレートおよび命令の組み合わせを有するが両方のクラスからの全てのテンプレートおよび命令を有するわけではないコアも、本発明の範囲に含まれる)。また、1つのプロセッサが複数のコアを含んでもよく、その全てが同じクラスをサポートするか、または異なるコアが異なるクラスをサポートする。たとえば、別個のグラフィックスコアおよび汎用コアを有するプロセッサでは、主にグラフィックスおよび/または科学コンピューティングを目的としたグラフィックスコアのうち1つはクラスAのみをサポートすることができ、その一方で汎用コアのうち1または複数は、クラスBのみをサポートする汎用コンピューティングを目的としたアウトオブオーダー実行およびレジスタリネーミングを有する高性能汎用コアであってもよい。別個のグラフィックスコアを有していない別のプロセッサは、クラスAおよびクラスBの両方をサポートするもう1つの汎用インオーダーまたはアウトオブオーダーコアを含み得る。当然ながら、1つのクラスからの特徴は、本発明の異なる実施形態において別のクラスにも実装され得る。高水準言語で書かれたプログラムは、1)実行のためにターゲットプロセッサによってサポートされるクラスの命令のみを有する形式、または2)全てのクラスの命令の異なる組み合わせを使用して書かれた代替ルーチンを有し、現在コードを実行しているプロセッサによってサポートされる命令に基づいて実行すべきルーチンを選択する制御フローコードを有する形式を含む、様々の異なる実行可能な形式に変換される(たとえば、ジャストインタイムコンパイルまたは静的コンパイル)。
【0068】
[VEX命令フォーマット]
【0069】
VEX符号化は、命令に3つ以上のオペランドを持たせることができ、SIMDベクトルレジスタを28ビットより長くすることができる。VEXプリフィックスの使用は、3オペランド(またはそれ以上の)構文を提供する。たとえば、前の2オペランド命令はA=A+Bのような演算を実行しており、これがソースオペランドを上書きする。VEXプリフィックスの使用により、オペランドはA=B+Cのような非破壊演算を実行することができる。
【0070】
図2Aは、VEXプリフィックス202、実オペコードフィールド230、Mod R/Mバイト240、SIBバイト250、置換フィールド262、およびIMM8 272を含む例示的なAVX命令フォーマットを示す。
図2Bは、
図2Aからのどのフィールドがフルオペコードフィールド274および基本演算フィールド241を構成するかを示す。
図2Cは、
図2Aからのどのフィールドがレジスタインデックスフィールド244を構成するかを示す。
【0071】
VEXプリフィックス(バイト0-2)202は、3バイト形式で符号化されている。第1のバイトはフォーマットフィールド290(VEXバイト0、ビット[7:0])であり、これは明示的なC4バイト値(C4命令フォーマットを区別するために使用される一意の値)を含む。第2から第3バイト(VEXバイト1-2)は、特定の機能を提供する多数のビットフィールドを含む。具体的には、REXフィールド205(VEXバイト1、ビット[7-5])は、VEX.Rビットフィールド(VEXバイト1、ビット[7]-R)、VEX.Xビットフィールド(VEXバイト1、ビット[6]-X)、およびVEX.Bビットフィールド(VEXバイト1、ビット[5]-B)からなる。命令の他のフィールドは、VEX.R、VEX.X、およびVEX.Bを加えることによってRrrr、Xxxx、およびBbbbが形成され得るように、当技術分野で知られているようにレジスタインデックスの下位3ビットを符号化する(rrr、xxx、およびbbb)。オペコードマップフィールド215(VEXバイト1、ビット[4:0]-mmmmm)は、暗黙の先行オペコードバイトを符号化するための内容を含む。Wフィールド264(VEXバイト2、ビット[7]-W)は、表記VEX.Wによって表され、命令に応じて異なる機能を提供する。VEX.vvvv220(VEXバイト2、ビット[6:3]-vvvv)の役割は、以下を含み得る。1)VEX.vvvvは、反転(1の補数)形式で指定された第1のソースレジスタオペランドを符号化し、2つ以上のソースオペランドを有する命令に有効である。2)VEX.vvvvは、特定のベクトルシフトのために1の補数形式で指定されたデスティネーションレジスタオペランドを符号化する。または3)VEX.vvvvはいずれのオペランドも符号化せず、フィールドは確保されて1111bを含むべきである。VEX.L268サイズフィールド(VEXバイト2、ビット[2]-L)=0の場合、28ビットベクトルを示し、VEX.L=1の場合、256ビットベクトルを示す。プリフィックス符号化フィールド225(VEXバイト2、ビット[1:0]-pp)は、基本演算フィールド241に追加ビットを提供する。
【0072】
実オペコードフィールド230(バイト3)は、オペコードバイトとしても知られている。オペコードの一部はこのフィールドで指定される。
【0073】
MOD R/Mフィールド240(バイト4)は、MODフィールド242(ビット[7-6])、Regフィールド244(ビット[5-3])、およびR/Mフィールド246(ビット[2-0])を含む。Regフィールド244の役割は、以下を含み得る。デスティネーションレジスタオペランドまたはソースレジスタオペランド(Rrrrのrrr)のいずれかを符号化する、またはオペコード拡張子として扱われていかなる命令オペランドを符号化するためにも使用されない。R/Mフィールド246の役割は、以下を含み得る。メモリアドレスを参照する命令オペランドを符号化する、もしくはデスティネーションレジスタオペランドまたはソースレジスタオペランドのいずれかを符号化する。
【0074】
スケール、インデックス、ベース(SIB)-スケールフィールド250(バイト5)の内容はSS252(ビット[7-6])を含み、これはメモリアドレス生成に使用される。SIB.xxx254(ビット[5-3])およびSIB.bbb256(ビット[2-0])の内容は、レジスタインデックスXxxxおよびBbbbに関連して先に言及されている。
【0075】
置換フィールド262および即値フィールド(IMM8)272はデータを含む。
【0076】
[例示的なレジスタアーキテクチャ]
【0077】
図3は、本発明の一実施形態によるレジスタアーキテクチャ300のブロック図である。図示される実施形態では512ビット幅のベクトルレジスタ310が32個あり、これらのレジスタはzmm0からzmm31として参照される。下の6つのzmmレジスタの下位256ビットはレジスタymm0から15に重ねられる。下の6つのzmmレジスタの下位128ビット(ymmレジスタの下位128ビット)はレジスタxmm0から15に重ねられる。
【0078】
汎用レジスタ325-図示される実施形態では、メモリオペランドをアドレス指定するために既存のx86アドレス指定モードと共に使用される16個の64ビット汎用レジスタがある。これらのレジスタは、RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP、およびR8からR15の名前によって参照される。
【0079】
MMXパック整数フラットレジスタファイル350がエイリアスされる、スカラー浮動小数点スタックレジスタファイル(x87スタック)345-図示される実施形態では、x87スタックは、x87命令セット拡張子を使用して32/64/80ビット浮動小数点データに対してスカラー浮動小数点演算を実行するために使用される8要素スタックである。一方、MMXレジスタは、64ビットパック整数データに対して演算を実行するため、ならびにMMXレジスタとXMMレジスタとの間で実行されるいくつかの演算のためにオペランドを保持するために、使用される。
【0080】
本発明の代替実施形態は、より広いまたはより狭いレジスタを使用することができる。加えて、本発明の代替実施形態は、より多い、少ない、または異なるレジスタファイルおよびレジスタを使用することができる。
【0081】
[例示的なコアアーキテクチャ、プロセッサ、およびコンピュータアーキテクチャ]
【0082】
プロセッサコアは、異なる方法で、異なる目的のため、そして異なるプロセッサに実装され得る。たとえば、このようなコアの実装は、1)汎用コンピューティングを目的とした汎用インオーダーコア、2)汎用コンピューティングを目的とした高性能汎用アウトオブオーダーコア、3)主にグラフィックスおよび/または科学(スループット)コンピューティングを目的とした専用コア、を含み得る。異なるプロセッサの実装は、1)汎用コンピューティングを目的とした1または複数の汎用インオーダーコアおよび/または汎用コンピューティングを目的とした1または複数の汎用アウトオブオーダーコアを含むCPU、および2)主にグラフィックスおよび/または科学(スループット)を目的とした1または複数の専用コアを含むコプロセッサ、を含み得る。このような異なるプロセッサは異なるコンピュータシステムアーキテクチャをもたらし、これは、1)CPUとは別個のチップ上のコプロセッサ、2)CPUと同じパッケージ内の別個のダイ上のコプロセッサ、3)CPUと同じダイ上のコプロセッサ(この場合、このようなコプロセッサは、統合グラフィックスおよび/または科学(スループット)ロジックなどの専用ロジック、または専用コアと称されることがある)、および4)同じダイ上に、記載されたCPU(アプリケーションコアまたはアプリケーションプロセッサと称されることもある)、上述のコプロセッサ、および追加機能を含み得る、システムオンチップ、を含み得る。例示的なコアアーキテクチャが次に説明され、続いて例示的なプロセッサおよびコンピュータアーキテクチャが説明される。本明細書で詳述されるのは、例示的なコア、プロセッサなどを備える回路(ユニット)である。
【0083】
[例示的なコアアーキテクチャ]
【0084】
図4Aは、本発明の実施形態による、例示的なインオーダーパイプライン、および例示的なレジスタリネーミング、アウトオブオーダー発行/実行パイプラインの両方を示すブロック図である。
図4Bは、本発明の実施形態による、プロセッサに含まれるべきインオーダーアーキテクチャコアおよび例示的なレジスタリネーミングの例示的な実施形態と、アウトオブオーダー発行/実行アーキテクチャコアとの両方を示すブロック図である。
図4Aおよび
図4Bの実線のボックスはインオーダーパイプラインおよびインオーダーコアを示し、破線のボックスの任意選択的な追加はレジスタリネーミング、アウトオブオーダー発行/実行パイプライン、およびコアを示す。インオーダーの態様がアウトオブオーダーの態様のサブセットであると仮定して、アウトオブオーダーの態様が説明される。
【0085】
図4Aでは、プロセッサパイプライン400は、フェッチステージ402、長さ復号ステージ404、復号ステージ406、割り当てステージ408、リネーミングステージ410、スケジューリング(ディスパッチまたは発行としても知られる)ステージ412、レジスタ読み出し/メモリ読み出しステージ414、実行ステージ416、ライトバック/メモリ書き込みステージ418、例外処理ステージ422、およびコミットステージ424を含む。
【0086】
図4Bは、実行エンジンユニット450に結合されたフロントエンドユニット430を含むプロセッサコア490を示し、両方ともメモリユニット470に結合されている。コア490は、縮小命令セットコンピューティング(RISC)コア、複合命令セットコンピューティング(CISC)コア、超長命令語(VLIW)コア、もしくはハイブリッドまたは代替のコアタイプであってもよい。さらに別の選択肢として、コア490は、たとえばネットワークまたは通信コア、圧縮エンジン、コプロセッサコア、汎用コンピューティンググラフィックス処理ユニット(GPGPU)コア、グラフィックスコアなどのような、特殊用途コアであってもよい。
【0087】
フロントエンドユニット430は、命令キャッシュユニット434に結合された分岐予測ユニット432を含み、命令キャッシュユニット434は命令翻訳ルックアサイドバッファ(TLB)436に結合され、これは命令フェッチユニット438に接続され、これは復号ユニット440に結合されている。復号ユニット440(またはデコーダ)は、命令を復号し、出力として1または複数のマイクロ演算、マイクロコードエントリポイント、マイクロ命令、その他の命令、またはその他の制御信号を生成し、これらは元の命令から復号され、または元の命令を別途反映し、または元の命令に由来する。復号ユニット440は、様々な異なる機構を用いて実装され得る。適切な機構の例は、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ(PLA)、マイクロコード読み出し専用メモリ(ROM)などを含むが、これらに限定されない。一実施形態では、コア490は、(たとえば、復号ユニット440内に、あるいはフロントエンドユニット430の中に)特定のマクロ命令のためのマイクロコードを記憶するマイクロコードROMまたはその他の媒体を含む。復号ユニット440は、実行エンジンユニット450内のリネーム/アロケータユニット452に結合されている。
【0088】
実行エンジンユニット450は、リタイアメントユニット454および1または複数のスケジューラユニット456のセットに結合されたリネーム/アロケータユニット452を含む。スケジューラユニット456は、予約ステーション、中央命令ウィンドウなどを含む、任意の数の異なるスケジューラを表す。スケジューラユニット456は、物理レジスタファイルユニット458に結合されている。物理レジスタファイルユニット458の各々は1または複数の物理レジスタファイルを表し、その異なるものたちは、スカラー整数、スカラー浮動小数点、パック整数、パック浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス(たとえば、次に実行される命令のアドレスである命令ポインタ)などの1または複数の異なるデータタイプを記憶する。一実施形態では、物理レジスタファイルユニット458は、ベクトルレジスタユニットおよびスカラーレジスタユニットを備える。これらのレジスタユニットは、アーキテクチャベクトルレジスタ、ベクトルマスクレジスタ、および汎用レジスタを提供することができる。物理レジスタファイルユニット458には、レジスタリネーミングおよびアウトオブオーダー実行が実装され得る様々な方法を示すためにリタイアメントユニット454が重なっている(たとえば、リオーダーバッファおよびリタイアメントレジスタファイルを使用する、将来ファイル、履歴バッファ、およびリタイアメントレジスタファイルを使用する、レジスタマップおよびレジスタのプールを使用する、など)。リタイアメントユニット454および物理レジスタファイルユニット458は実行クラスタ460に結合されている。実行クラスタ460は、1または複数の実行ユニット462のセットおよび1または複数のメモリアクセスユニット464のセットを含む。実行ユニット462は、様々な演算(たとえば、シフト、加算、減算、乗算)を、様々なタイプのデータ(たとえば、スカラー浮動小数点、パック整数、パック浮動小数点、ベクトル整数、ベクトル浮動小数点)に対して実行できる。いくつかの実施形態は、特定の機能または機能のセットに専用の複数の実行ユニットを含み得るが、他の実施形態は、1つのみの実行ユニット、または全てが全ての機能を実行する多数の実行ユニットを含んでもよい。特定の実施形態は特定のタイプのデータ/演算に別個のパイプラインを作成するので(たとえば、各々がスケジューラユニット、物理レジスタファイルユニット、および/または実行クラスタを有する、スカラー整数パイプライン、スカラー浮動小数点/パック整数/パック浮動小数点/ベクトル整数/ベクトル浮動小数点パイプライン、および/またはメモリアクセスパイプライン、そして別個のメモリアクセスパイプラインの場合には、このパイプラインの実行クラスタのみがメモリアクセスユニット464を有する特定の実施形態が実施される)、スケジューラユニット456、物理レジスタファイルユニット458、および実行クラスタ460は場合により複数であるように示されている。別個のパイプラインが使用される場合、これらのパイプラインのうち1または複数はアウトオブオーダー発行/実行であり、残りはインオーダーであってもよいことも、理解されるべきである。
【0089】
メモリアクセスユニット464のセットはメモリユニット470に結合されており、これはレベル2(L2)キャッシュユニット476に結合されたデータキャッシュユニット474に結合されたデータTLBユニット472を含む。例示的な一実施形態では、メモリアクセスユニット464は、ロードユニット、ストアアドレスユニット、およびストアデータユニットを含むことができ、その各々はメモリユニット470内のデータTLBユニット472に結合されている。命令キャッシュユニット434は、メモリユニット470内のレベル2(L2)キャッシュユニット476にさらに結合されている。L2キャッシュユニット476は、1または複数の他のレベルのキャッシュおよび最終的にはメインメモリに結合される。
【0090】
例として、例示的なレジスタリネーミング、アウトオブオーダー発行/実行コアアーキテクチャは、以下のようにパイプライン400を実装することができる。1)命令フェッチ438はフェッチステージ402および長さ復号ステージ404を実行する。2)復号ユニット440は復号ステージ406を実行する。3)リネーム/アロケータユニット452は割り当てステージ408およびリネーミングステージ410を実行する。4)スケジューラユニット456はスケジュールステージ412を実行する。5)物理レジスタファイルユニット458およびメモリユニット470はレジスタ読み出し/メモリ読み出しステージ414を実行し、実行クラスタ460は実行ステージ416を実行する。6)メモリユニット470および物理レジスタファイルユニット458はライトバック/メモリ書き込みステージ418を実行する。7)様々なユニットが例外処理ステージ422に関与し得る。8)リタイアメントユニット454および物理レジスタファイルユニット458はコミットステージ424を実行する。
【0091】
コア490は、本明細書に記載される命令を含む、1または複数の命令セットをサポートし得る(たとえば、(より新しいバージョンで追加されたいくつかの拡張子を有する)x86命令セット、カリフォルニア州サニーベールのMIPS TechnologiesのMIPS命令セット、カリフォルニア州サニーベールのARM Holdingsの(NEONなどの任意選択的な追加拡張子を有する)ARM命令セット)。一実施形態では、コア490はパックデータ命令セット拡張子(たとえば、AVX1、AVX2)をサポートするロジックを含み、これによって、複数のマルチメディアアプリケーションが使用する演算がパックデータを使用して実行できるようになる。
【0092】
コアは、(演算またはスレッドの2つ以上のパラレルセットを実行する)マルチスレッド化をサポートしてもよく、タイムスライスマルチスレッド化、(1つの物理コアが、その物理コアが同時にマルチスレッド化されるスレッドの各々に論理コアを提供する)同時マルチスレッド化、またはこれらの組み合わせ(たとえば、Intel(登録商標)ハイパースレッディングテクノロジーの場合のような、タイムスライスフェッチおよび復号ならびにその後の同時マルチスレッド化)を含む様々な方法で、これを行えることは、理解されるべきである。
【0093】
レジスタリネーミングはアウトオブオーダー実行の文脈で説明されたが、レジスタリネーミングがインオーダーアーキテクチャで使用されてもよいことは、理解されるべきである。図示されたプロセッサの実施形態はまた、別個の命令およびデータキャッシュユニット434/474および共有L2キャッシュユニット476も含むが、代替実施形態は、たとえばレベル1(L1)内部キャッシュ、または複数のレベルの内部キャッシュなど、命令およびデータの両方のための1つの内部キャッシュを有してもよい。いくつかの実施形態では、システムは、内部キャッシュと、コアおよび/またはプロセッサの外部にある外部キャッシュとの組み合わせを含んでもよい。あるいは、キャッシュの全てがコアおよび/またはプロセッサの外部にあってもよい。
【0094】
[特定の例示的なインオーダーコアアーキテクチャ]
【0095】
図5Aおよび
図5Bは、より具体的で例示的なインオーダーコアアーキテクチャのブロック図を示し、このコアは、チップ内のいくつかのロジックブロック(同じタイプおよび/または異なるタイプの他のコアを含む)のうちの1つとなる。ロジックブロックは、用途に応じて、高帯域幅相互接続ネットワーク(たとえば、リングネットワーク)を通じて何らかの固定機能ロジック、メモリI/Oインターフェース、およびその他の必要なI/Oロジックと通信する。
【0096】
図5Aは、本発明の実施形態による、オンダイ相互接続ネットワーク502との接続およびレベル2(L2)キャッシュのローカルサブセット504を伴う、シングルプロセッサコアのブロック図である。一実施形態では、命令デコーダ500は、パックデータ命令セット拡張子を有するx86命令セットをサポートする。L1キャッシュ506は、スカラーおよびベクトルユニット内へのキャッシュメモリの低レイテンシアクセスを可能にする。一実施形態では(設計を簡素化するために)、スカラーユニット508およびベクトルユニット510は別個のレジスタセット(それぞれスカラーレジスタ512およびベクトルレジスタ514)を使用し、その間で転送されたデータはメモリに書き込まれ、その後レベル1(L1)キャッシュ506から読み出されるが、本発明の代替実施形態は異なるアプローチを使用してもよい(たとえば、1つのレジスタセットを使用するか、書き込み読み出しを伴わずに2つのレジスタファイル間でデータを転送させる通信経路を含む)。
【0097】
L2キャッシュのローカルサブセット504は、プロセッサコアごとに1つずつの別個のローカルサブセットに分割されるグローバルL2キャッシュの一部である。各プロセッサコアは、L2キャッシュの自身のローカルサブセット504への直接アクセスパスを有する。プロセッサコアによって読み出されたデータは、L2キャッシュサブセット504に記憶され、自身のローカルL2キャッシュサブセットにアクセスしている他のプロセッサコアと並行して、迅速にアクセスされることが可能である。プロセッサコアによって書き込まれたデータは、自身のL2キャッシュサブセット504に記憶され、必要であれば他のサブセットからフラッシュされる。リングネットワークは共有データの一貫性を保証する。リングネットワークは、プロセッサコア、L2キャッシュ、および他のロジックブロックなどのエージェントがチップ内で互いに通信できるようにするために、双方向である。各リングデータパスは、いくつかの実施形態では方向ごとに1024ビット幅である。
【0098】
図5Bは、本発明の実施形態による
図5Aのプロセッサコアの一部の拡大図である。
図5BはL1キャッシュ506のL1データキャッシュ506A部分、ならびにベクトルユニット510およびベクトルレジスタ514に関するさらなる詳細を含む。具体的には、ベクトルユニット510は16幅ベクトル処理ユニット(VPU)(16幅ALU528を参照)であり、これは整数、単精度浮動小数点、および倍精度浮動小数点命令のうち1または複数を実行する。VPUは、スウィズルユニット520を用いるレジスタ入力のスウィズル、数値変換ユニット522Aおよび522Bを用いる数値変換、および複製ユニット524とメモリ入力とを用いる複製をサポートする。
【0099】
[統合メモリコントローラおよびグラフィックスを有するプロセッサ]
【0100】
図6は、本発明の実施形態による、2つ以上のコアを有し、統合メモリコントローラを有し、統合グラフィックスを有することができるプロセッサ600のブロック図である。
図6の実線のボックスは、シングルコア602A、システムエージェント610、1または複数のバスコントローラユニット616のセットを有するプロセッサ600を示し、その一方で破線のボックスの任意選択的な追加は、複数のコア602AからN、システムエージェントユニット610内の1または複数の統合メモリコントローラユニット614のセット、および専用ロジック608を有する代替プロセッサ600を示す。
【0101】
したがって、プロセッサ600の異なる実装は、1)(1または複数のコアを含み得る)統合グラフィックスおよび/または科学(スループット)ロジックである専用ロジック608、および1または複数の汎用コア(たとえば、汎用インオーダーコア、汎用アウトオブオーダーコア、2つの組み合わせ)であるコア602AからNを有するCPU、2)主にグラフィックスおよび/または科学(スループット)のために統合された複数の専用コアであるコア602AからNを有するコプロセッサ、および3)複数の汎用インオーダーコアであるコア602AからNを有するコプロセッサ、を含み得る。したがって、プロセッサ600は、たとえば、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU(汎用グラフィックス処理ユニット)、高スループットメニーインテグレーテッドコア(MIC)コプロセッサ(30以上のコアを含む)、組み込みプロセッサ、などのような、汎用プロセッサ、コプロセッサ、または専用プロセッサであってもよい。プロセッサは、1または複数のチップ上に実装されてもよい。プロセッサ600は、BiCMOS、CMOS、またはNMOSなどのいくつかのプロセス技術のいずれかを使用した1もしくは複数の基板の一部であってもよく、かつ/またはその基板上に実装されてもよい。
【0102】
メモリ階層は、コア604AからNの中の1または複数のレベルのキャッシュ、1または複数の共有キャッシュユニット606のセット、および統合メモリコントローラユニット614のセットに結合された外部メモリ(図示せず)を含む。共有キャッシュユニット606のセットは、レベル2(L2)、レベル3(L3)、レベル4(L4)、またはその他のレベルのキャッシュなど、1または複数の中間レベルキャッシュ、最終レベルキャッシュ(LLC)、および/またはこれらの組み合わせを含んでもよい。一実施形態では、リングベースの相互接続ユニット612は、統合グラフィックスロジック608、共有キャッシュユニット606のセット、およびシステムエージェントユニット610/統合メモリコントローラユニット614を相互接続するが、代替実施形態は、このようなユニットを相互接続するための任意の数の公知の技術を使用することができる。一実施形態では、1または複数のキャッシュユニット606とコア602AからNとの間で一貫性が維持される。
【0103】
いくつかの実施形態では、コア602AからNのうち1または複数は、マルチスレッド化が可能である。システムエージェント610は、コア602AからNを調整および動作させるこれらの構成要素を含む。システムエージェントユニット610は、たとえば電力制御ユニット(PCU)およびディスプレイユニットを含んでもよい。PCUは、コア602AからNおよび統合グラフィックスロジック608の電力状態を調整するのに必要なロジックおよび構成要素であるか、またはこれらを含んでもよい。ディスプレイユニットは、1または複数の外部接続されたディスプレイを駆動するためのものである。
【0104】
コア602AからNは、アーキテクチャ命令セットに関して同種でも異種でもよい。つまり、コア602AからNのうち2つ以上が同じ命令セットを実行することができ、その一方で他のものは、その命令セットのサブセットまたは異なる命令セットしか実行することができない。
【0105】
[例示的なコンピュータアーキテクチャ]
【0106】
図7から
図10は、例示的なコンピュータアーキテクチャのブロック図である。ラップトップ、デスクトップ、ハンドヘルドPC、パーソナルデジタルアシスタント、エンジニアリングワークステーション、サーバ、ネットワーク装置、ネットワークハブ、スイッチ、組み込みプロセッサ、デジタル信号プロセッサ(DSP)、グラフィックスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、携帯型メディアプレーヤ、ハンドヘルドデバイス、および様々なその他の電子装置の分野で既知のその他のシステム設計および構成もまた適している。一般に、本明細書に開示されるようなプロセッサおよび/または他の実行ロジックを組み込むことが可能な非常に多様なシステムまたは電子装置が、一般的に適している。
【0107】
ここで
図7を参照すると、本発明の一実施形態によるシステム700のブロック図が示されている。システム700は、コントローラハブ720に結合された、1または複数のプロセッサ710、715を含み得る。一実施形態では、コントローラハブ720は、グラフィックスメモリコントローラハブ(GMCH)790および入力/出力ハブ(IOH)750(別個のチップ上にあってもよい)を含む。GMCH790は、メモリ740およびコプロセッサ745が結合されたメモリおよびグラフィックスコントローラを含む。IOH750は入力/出力(I/O)装置760をGMCH790に結合する。あるいは、メモリおよびグラフィックスコントローラのうち一方または両方が(本明細書に記載されるような)プロセッサに統合され、メモリ740およびコプロセッサ745がプロセッサ710、およびIOH750を有する1つのチップ内のコントローラハブ720に直接結合される。
【0108】
追加のプロセッサ715の任意選択的な性質は、
図7に破線で示されている。各プロセッサ710、715は、本明細書に記載される処理コアのうち1または複数を含んでもよく、プロセッサ600の何らかのバージョンであってもよい。
【0109】
メモリ740は、たとえば、ダイナミックランダムアクセスメモリ(DRAM)、相変化メモリ(PCM)、またはこれら2つの組み合わせであってもよい。少なくとも1つの実施形態では、コントローラハブ720は、フロントサイドバス(FSB)、ポイントツーポイントインターフェース、または類似の接続795などのマルチドロップバスを介して、プロセッサ710、715と通信する。
【0110】
一実施形態では、コプロセッサ745は、たとえば、高スループットMICプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU、組み込みプロセッサなどのような、専用プロセッサである。一実施形態では、コントローラハブ720は、統合グラフィックスアクセラレータを含んでもよい。
【0111】
アーキテクチャ、マイクロアーキテクチャ、熱、消費電力特性などに関することを含む、利点のメトリックスのスペクトルに関して、物理リソース710、715の間には様々な違いがあり得る。
【0112】
一実施形態では、プロセッサ710は、一般的なタイプのデータ処理オペレーションを制御する命令を実行する。命令に組み込まれているのはコプロセッサ命令であってもよい。プロセッサ710は、これらのコプロセッサ命令を、添付されたコプロセッサ745によって実行されるべきタイプのものとして認識する。したがって、プロセッサ710は、コプロセッサバスまたはその他の相互接続上で、これらのコプロセッサ命令(またはコプロセッサ命令を表す制御信号)をコプロセッサ745に発行する。コプロセッサ745は、受信したコプロセッサ命令を受け付けて実行する。
【0113】
ここで
図8を参照すると、本発明の一実施形態による、第1のより具体的な例示的システム800のブロック図が示されている。
図8に示されるように、マルチプロセッサシステム800はポイントツーポイント相互接続システムであり、ポイントツーポイント相互接続850を介して結合された第1のプロセッサ870および第2のプロセッサ880を含む。プロセッサ870および880の各々は、プロセッサ600の何らかのバージョンであってもよい。本発明の一実施形態では、プロセッサ870および880はそれぞれプロセッサ710および715であり、コプロセッサ838はコプロセッサ745である。別の実施形態では、プロセッサ870および880はそれぞれプロセッサ710およびコプロセッサ745である。
【0114】
統合メモリコントローラ(IMC)ユニット872および882をそれぞれ含むプロセッサ870および880が示されている。プロセッサ870はまた、そのバスコントローラユニットの一部としてポイントツーポイント(P-P)インターフェース876および878を含み、同様に第2のプロセッサ880はP-Pインターフェース886および888を含む。プロセッサ870、880は、P-Pインターフェース回路878、888を使用して、ポイントツーポイント(P-P)インターフェース850を介して情報を交換することができる。
図8に示されるように、IMC872および882はプロセッサをそれぞれのメモリ、すなわちメモリ832およびメモリ834に結合するが、これらはそれぞれのプロセッサにローカルに接続されたメインメモリの一部であってもよい。
【0115】
プロセッサ870、880は各々、ポイントツーポイントインターフェース回路876、894、886、898を使用して、個別のP-Pインターフェース852、854を介してチップセット890と情報を交換することができる。チップセット890は、高性能インターフェース892を介してコプロセッサ838と任意選択的に情報を交換することができる。一実施形態では、コプロセッサ838は、たとえば、高スループットMICプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU、組み込みプロセッサなどのような、専用プロセッサである。
【0116】
共有キャッシュ(図示せず)は、いずれかのプロセッサの中、または両方のプロセッサの外側に含まれ得るが、プロセッサが低電力モードになった場合に一方または両方のプロセッサのローカルキャッシュ情報が共有キャッシュに記憶され得るように、P-P相互接続を介してプロセッサと接続されてもよい。
【0117】
チップセット890は、インターフェース896を介して第1バス816に結合されてもよい。一実施形態では、第1バス816はペリフェラルコンポーネントインターコネクト(PCI)バス、もしくはPCIエクスプレスバスまたは別のI/O相互接続バスなどのバスであってもよいが、本発明の範囲はこれに限定されない。
【0118】
図8に示されるように、第1バス816を第2バス820に結合するバスブリッジ818と共に、様々なI/O装置814が第1バス816に結合されてもよい。一実施形態では、コプロセッサ、高スループットMICプロセッサ、GPGPU、アクセラレータ(たとえば、グラフィックスアクセラレータまたはデジタル信号処理(DSP)ユニットなど)、フィールドプログラマブルゲートアレイ、またはその他任意のプロセッサなど、1または複数の追加のプロセッサ815が、第1バス816に結合されている。一実施形態では、第2バス820は低ピン数(LPC)バスであってもよい。一実施形態では、たとえばキーボードおよび/またはマウス822、通信装置827、ならびに命令/コードおよびデータ830を含み得るディスクドライブまたは別の大容量記憶装置などの記憶ユニット828を含む第2バス820に、様々な装置が結合されてもよい。さらに、オーディオI/O824が第2バス820に結合されてもよい。他のアーキテクチャも可能であることに留意されたい。たとえば、
図8のポイントツーポイントアーキテクチャの代わりに、システムはマルチドロップバスまたはその他のこのようなアーキテクチャを実装してもよい。
【0119】
ここで
図9を参照すると、本発明の一実施形態による、第2のより具体的な例示的システム900のブロック図が示されている。
図8および
図9の類似の要素には類似の参照番号が付され、
図9の他の態様を曖昧にすることを回避するために、
図8の特定の態様は
図9から省略されている。
【0120】
図9は、プロセッサ870、880が統合メモリならびにI/O制御ロジック(「CL」)972および982をそれぞれ含むことを示している。したがって、CL972、982は統合メモリコントローラユニットを含み、I/O制御ロジックを含む。
図9は、メモリ832、834がCL872、882に結合されていることのみならず、I/O装置914もまた制御ロジック872、882に結合されていることを示している。レガシーI/O装置915はチップセット890に結合されている。
【0121】
ここで
図10を参照すると、本発明の一実施形態によるSoC1000のブロック図が示されている。
図6の類似の要素には類似の参照番号が付されている。また、破線のボックスは、より高度なSoC上の任意選択的な特徴である。
図10では、相互接続ユニット1002は、1または複数のコア102A-Nのセット、キャッシュユニット604A-N、および共有キャッシュユニット606を含むアプリケーションプロセッサ1010と、システムエージェントユニット610と、バスコントローラユニット616と、統合メモリコントローラユニット614と、統合グラフィックスロジック、画像プロセッサ、オーディオプロセッサおよびビデオプロセッサを含み得る、1または複数のコプロセッサ1020のセットと、スタティックランダムアクセスメモリ(SRAM)ユニット1030と、直接メモリアクセス(DMA)ユニット1032と、1または複数の外部ディスプレイに結合するためのディスプレイユニット1040と、に結合されている。一実施形態では、コプロセッサ1020は、たとえば、ネットワークまたは通信プロセッサ、圧縮エンジン、GPGPU、高スループットMICプロセッサ、組み込みプロセッサなどのような、専用プロセッサを含む。
【0122】
本明細書に開示される機構の実施形態は、ハードウェア、ソフトウェア、ファームウェア、またはこのような実装アプローチの組み合わせにおいて実装されてもよい。本発明の実施形態は、少なくとも1つのプロセッサと、(揮発性および不揮発性メモリおよび/または記憶素子を含む)記憶システムと、少なくとも1つの入力装置と、少なくとも1つの出力装置とを備えるプログラマブルシステム上で実行されるコンピュータプログラムまたはプログラムコードとして実装されてもよい。
【0123】
図8に示されるコード830のようなプログラムコードは、本明細書に記載される機能を実行して出力情報を生成するために、入力命令に適用され得る。出力情報は、既知の方法で、1または複数の出力装置に適用され得る。本出願の目的のため、処理システムは、たとえば、デジタル信号プロセッサ(DSP)、マイクロコントローラ、特定用途向け集積回路(ASIC)、またはマイクロプロセッサのようなプロセッサを有する、任意のシステムを含む。
【0124】
プログラムコードは処理システムと通信するために、高水準手続き型またはオブジェクト指向プログラミング言語で実装され得る。プログラムコードはまた、望ましければ、アセンブリまたは機械言語で実装されてもよい。実際、本明細書に記載される機構は、いかなる特定のプログラミング言語にも範囲が限定されない。いずれにせよ、言語は、コンパイラ言語またはインタプリタ言語であり得る。
【0125】
少なくとも1つの実施形態の1または複数の態様は、機械によって読み出されると、本明細書に記載される技術を実行するためのロジックを機械に作製させる、プロセッサ内の様々なロジックを表現する機械可読媒体上に記憶された代表的命令によって実施され得る。「IPコア」として知られるこのような表現は、有形の機械可読媒体上に記憶され、実際にロジックまたはプロセッサを製造する製造機械にロードするために、様々な顧客または製造施設に供給され得る。
【0126】
このような機械可読記憶媒体は、無制限に、ハードディスク、フロッピーディスク、光ディスク、コンパクトディスク読み出し専用メモリ(CD-ROM)、再書き込み可能コンパクトディスク(CD-RW)、および光磁気ディスクを含むその他の任意のタイプのディスク、読み出し専用メモリ(ROM)、ダイナミックランダムアクセスメモリ(DRAM)、スタティックランダムアクセスメモリ(SRAM)、消去可能プログラマブル読み出し専用メモリ(EPROM)、フラッシュメモリ、電気的消去可能プログラマブル読み出し専用メモリ(EEPROM)、相変化メモリ(PCM)のようなランダムアクセスメモリ(RAM)などの半導体デバイス、磁気または光カード、もしくは電子命令を記憶するのに適したその他任意のタイプの媒体などの記憶媒体を含む、機械または装置によって製造または形成された物品の、非一時的で有形の配置を含み得る。
【0127】
したがって、本発明の実施形態はまた、命令を含み、ハードウェア記述言語(HDL)などの設計データを含む、非一時的で有形の機械可読媒体も含み、これは本明細書に記載される構造、回路、装置、プロセッサ、および/またはシステム機能を定義する。このような実施形態は、プログラム製品と呼ばれることもある。
【0128】
[エミュレーション(バイナリ変換、コードモーフィングなどを含む)]
【0129】
場合によっては、命令をソース命令セットからターゲット命令セットに変換するために命令変換器が使用されてもよい。たとえば、命令変換器は、ある命令を、コアによって処理される1または複数の他の命令に(たとえば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を使用して)変換、モーフ、エミュレート、または別途変換することができる。命令変換器は、ソフトウェア、ハードウェア、ファームウェア、またはこれらの組み合わせで実装されてもよい。命令変換器は、プロセッサ上にあっても、プロセッサ外にあっても、または部分的にプロセッサ上で部分的にプロセッサ外にあってもよい。
【0130】
図11は、本発明の実施形態による、ソース命令セット内のバイナリ命令をターゲット命令セット内のバイナリ命令に変換するためのソフトウェア命令変換器の使用を対比するブロック図である。図示される実施形態では、命令変換器はソフトウェア命令変換器であるが、代替として命令変換器はソフトウェア、ハードウェア、ファームウェア、またはこれらの様々な組み合わせで実装されてもよい。
図11は、少なくとも1つの第1命令セットコア1116を有するプロセッサによって自然に実行され得る第1バイナリコード(たとえば、x86)1106を生成するために第1コンパイラ1104を使用してコンパイルされ得る、高水準言語1102のプログラムを示す。いくつかの実施形態では、少なくとも1つの第1命令セットコア1116を有するプロセッサは、少なくとも1つのx86命令セットコアを有するIntelプロセッサと実質的に同じ結果を達成するために、(1)Intelのx86命令セットコアの命令セットのかなりの部分、または(2)少なくとも1つのx86命令セットコアを有するIntelプロセッサ上で実行することを目的とするオブジェクトコードバージョンのアプリケーションまたはその他のソフトウェアを、互換的に実行または別途処理することによって、少なくとも1つのx86命令セットコアを有するIntelプロセッサと実質的に同じ機能を実行できる任意のプロセッサを表す。第1コンパイラ1104は、追加のリンケージ処理があってもなくても、少なくとも1つの第1命令セットコア1116を有するプロセッサ上で実行されることが可能な第1命令セット1106のバイナリコード(たとえば、オブジェクトコード)を生成するように動作可能なコンパイラを表す。同様に、
図11は、少なくとも1つの第1命令セットコア1114のないプロセッサ(たとえば、カリフォルニア州サニーベールのMIPS TechnologiesのMIPS命令セットを実行する、および/またはカリフォルニア州サニーベールのARM HoldingsのARM命令セットを実行するコアを備えたプロセッサ)によって自然に実行され得る代替命令セットバイナリコード1110を生成するために代替命令セットコンパイラ1108を使用してコンパイルされ得る高水準言語1102内のプログラムを示す。命令変換器1112は、第1バイナリコード1106を、第1命令セットコア1114のないプロセッサによって自然に実行され得るコードに変換するために使用される。これを可能にする命令変換器を作るのは困難なので、この変換されたコードは代替命令セットバイナリコード1110と同じにはなりにくい。しかしながら、変換されたコードは一般的なオペレーションを果たし、代替命令セットからの命令で構成されることになる。したがって、命令変換器1112は、エミュレーション、シミュレーション、またはその他のプロセスを通じて、第1命令セットプロセッサまたはコアを有していないプロセッサまたはその他の電子装置が第1バイナリコード1106を実行できるようにする、ソフトウェア、ファームウェア、ハードウェア、またはこれらの組み合わせを表す。
[データ表現間の一貫性のある変換を加速する装置および方法]
【0131】
前述のように、テンソルデータがフェーズからフェーズへ推移するとき、数値表現変換が必要である。変換は従来ソフトウェアによって処理されるが、これは性能に影響を及ぼす可能性がある。
【0132】
本発明の一実施形態は、本明細書では記憶補助を受けてCONVNUMERICと称されることもある新しい命令、およびテンソルデータをある数値表現から別の数値表現に変換して構造的一貫性を維持するための関連プロセッサ回路を含む。本明細書に記載される様々なテンソル演算を効率的に実行するために、プロセッサの実行回路に行列処理ユニットが組み込まれている。CONVNUMERIC命令の一実施形態は、入力数値表現および所望の出力数値表現を示すソフトウェア指定フィールドを含む。入力/出力要素サイズの可能性がある違いのために、行列処理ユニットは、必要とされる入力および出力帯域幅の差を管理するためのバッファを含んでもよい。
【0133】
図12Aおよび
図12Bは、本発明の実施形態が実装され得る例示的なプロセッサアーキテクチャを示す図である。図示されるアーキテクチャは、コア領域1201、および共有または「アンコア」領域1210を含む。共有領域1210は、コア1201aおよび1201bの全てまたはサブセットによって共有されるデータ構造および回路を含む。図示される実施形態では、複数のコア1201aおよび1201bは、複数の命令ストリームまたはスレッドを同時に実行することが可能な同時マルチスレッドコアである。簡略化のために
図12Aでは2つのコア1201aおよび1201bのみが示されているが、コア領域1201は任意の数のコアを含むことができ、その各々がコア1201aについて示されるのと同じアーキテクチャを含み得ることが、理解されるだろう。別の実施形態は、異種コア(たとえば、低電力コアと高電力/高性能コアとの組み合わせ)を含む。
【0134】
図12Aに示される様々な構成要素は、
図1Aから
図11の対応する構成要素と同じ方法で実装され得る。たとえば、コア1201aは、
図1Aおよび
図1B並びに
図2Aから
図2Cの命令フォーマットのうち1つを使用して、および/または
図3に示されるレジスタアーキテクチャを使用して、CONVNUMERIC命令を実行することができる。加えて、コア1201aは、
図4Bに示されるコア490の構成要素を含むことができ、本明細書(たとえば、
図5A、
図5B、
図6など)に記載されるプロセッサ/コア構成要素のいずれかを含むことができる。
【0135】
コア1201aおよび1201bの各々は、システムメモリ1260またはL1命令キャッシュ1210から命令をフェッチする命令フェッチ回路1218および命令を復号する復号回路1209を含む命令ストリームの、アウトオブオーダー(またはインオーダー)実行を同時に行うための命令パイプライン構成要素を含む。実行回路1208は、復号された命令を実行し、命令オペランド、オペコード、および任意の即値によって指定されるような基本的なオペレーションを実行する。
【0136】
図示される実施形態では、復号ユニット1209は、CONVNUMERIC命令を複数のマイクロオペレーションに復号するCONVNUMERIC復号回路1209aを含み、当該複数のマイクロオペレーションは次に、実行回路1208の行列処理ユニット(MPU)1208aによって実行される。一実施形態では、MPU1208aは、高速一時/ローカルストレージ1208bに結合され、変換命令によって生成された変換結果を記憶した後に、システムメモリ1260に結果を返して記憶する。別個のユニットとして示されているが、MPU1208aは、実行回路1208全体に広がる様々な機能ユニットによって実装されてもよい。また、実行回路1208内の構成要素として示されているが、一時ストレージ(TS)1208bは、1または複数のレベルのキャッシュに(たとえばデータキャッシュ1202に)実装されてもよく、または実行回路1208および復号回路1209によってアクセス可能な別個の高速メモリ(たとえば、スクラッチパッドメモリ)として実装されてもよい。
【0137】
代替実施形態では、
図12Bに示されるように、MPUアクセラレータ1201dは、キャッシュコヒーレント相互接続を介してプロセッサコア1201aおよび1201bにしっかりと結合されている(たとえばコアと同じキャッシュコヒーレントメモリトランザクションのセットにMPUが加わる)。この実施形態では、デコーダ1209は本明細書に記載される数値CONVNUMERIC命令を復号し、その結果生じるマイクロオペレーションは、テンソル変換回路1201eおよびローカルバッファまたはメモリ1201fを用いて本明細書に記載される数値変換を実行するMPUアクセラレータ1201bに、実行のために渡される。一実施形態では、ローカルバッファまたはメモリ1201fは、メモリサブシステムによって実装されたキャッシュ一貫性プロトコルに加わるMPUアクセラレータ1201dのキャッシュを備える。さらに別の実施形態では、MPUアクセラレータ1201dは、専用フェッチユニットおよび復号ユニットを備え、それぞれ、メモリから変換命令をフェッチし、命令を復号する。しかしながら、MPUがプロセッサアーキテクチャに統合される特定の方法は、本発明の基本的な原理には関連しないことに留意すべきである。
【0138】
図12Aおよび
図12Bには、汎用レジスタ(GPR)1218d、ベクトルレジスタ1218bのセット、マスクレジスタ1218aのセット、および制御レジスタ1218cのセットも示されている。一実施形態では、複数のベクトルデータ要素が、2つの256ビット値、4つの128ビット値、8つの64ビット値、16個の32ビット値などを記憶するための512ビット幅を有することができる、各ベクトルレジスタ1206にパックされる。しかしながら、本発明の基本的な原理は、いかなる特定のサイズ/タイプのベクトルデータにも限定されない。一実施形態では、マスクレジスタ1207は、(たとえば、上述のマスクレジスタk0からk7として実装される)ベクトルレジスタ1206に記憶された値に対してビットマスキング演算を実行するために使用される、8つの64ビットオペランドマスクレジスタを含む。しかしながら、本発明の基本的な原理は、いかなる特定のマスクレジスタサイズ/タイプにも限定されない。
【0139】
制御レジスタ1218cは、命令を実行することによって、プロセッサコア1201aの現在の状態を判断するために使用される様々な制御ビットまたは「フラグ」を記憶する。限定ではなく例として、x86アーキテクチャでは、制御レジスタはEFLAGSレジスタを含む。
【0140】
オンダイ相互接続(IDI)/一貫性プロトコルを実装するIDIなどの相互接続1206は、コア1201aおよび1201b(および場合によってはMPUアクセラレータ1201d)を、互いにかつ共有領域1210内の様々な構成要素に通信可能に結合する。たとえば、相互接続1206は、コア1201aをインターフェース1207を介して、レベル3(L3)キャッシュと、プロセッサをシステムメモリ1260に結合する統合メモリコントローラ1230とに結合する。
【0141】
統合メモリコントローラ1230は、メモリオペレーション(たとえば、システムメモリ1260からレジスタへのMOV)を実行するときに、システムメモリ1260へのアクセスを提供する。PCIエクスプレス回路などの1または複数の入力/出力(I/O)回路(図示せず)もまた、共有領域1210に含まれ得る。
【0142】
命令ポインタレジスタ1212は、フェッチ、復号、および実行すべき次の命令を識別する命令ポインタアドレスを記憶する。命令は、システムメモリ1260、および/またはL2キャッシュ1213、共有L3キャッシュ1220、またはL1命令キャッシュ1210などの1または複数の共有キャッシュレベルから、フェッチまたはプリフェッチされてもよい。加えてL1データキャッシュ1202は、システムメモリ1260からロードされ、および/または命令およびデータの両方をキャッシュする他のキャッシュレベル1213、1220のうち1つから取り出されたデータを記憶する。命令TLB(ITLB)1211は、フェッチ回路1218によってフェッチされた命令の仮想アドレスから物理アドレスへの変換を記憶し、データTLB(DTLB)1203は、復号回路1209および実行回路1208によって処置されたデータの仮想アドレスから物理アドレスへの変換を記憶する。
【0143】
図12Aおよび
図12Bはまた、命令分岐アドレスを推測的に予測するための分岐予測ユニット1221と、分岐アドレスおよびターゲットアドレスを記憶するための分岐ターゲットバッファ(BTB)1222とを示す。一実施形態では、分岐履歴テーブル(図示せず)またはその他のデータ構造が、分岐予測/誤予測ごとに維持および更新され、分岐予測ユニット1221が次の分岐予測を行うために使用される。
【0144】
図12Aおよび
図12Bは、プロセッサ内で利用される全ての回路および相互接続の包括的な図を提供するように意図されていないことに、留意されたい。むしろ、本発明の実施形態に関連しない構成要素は示されていない。逆に、いくつかの構成要素は、本発明の実施形態が実装され得る例示的なアーキテクチャを提供する目的のためだけに示されている。
【0145】
テンソルデータの数値表現の変換は、大きく2つのカテゴリに分類される。1つ目は、要素あたりの入ってくる意味のある有意桁/仮数ビットの数が、要素あたりの出て行く意味のある有意桁/仮数ビットの数よりも多い「ダウンコンバージョン」のケースである。2つ目は、要素あたりの入ってくる意味のある有意桁/仮数ビットの数が、要素あたりの出て行く意味のある有意桁/仮数ビットの数よりも少ない「アップコンバージョン」のケースである。したがって、本出願の文脈において、アップコンバージョンおよびダウンコンバージョンとは、それぞれ、数値表現の総ビット幅の増加および減少を指す。
【0146】
アップコンバージョン/ダウンコンバージョンは、必ずではないものの、要素あたりの記憶ビット数の増加/減少に関連していることが多いことに、留意されたい。たとえば、16ビット固定小数点表現から半精度浮動小数点表現への変換は、ダウンコンバージョンの場合であっても要素あたりの記憶ビット数を減少させない(すなわち、半精度浮動小数点は16ビット浮動小数点を備えているからである)。変換が要素あたりの記憶ビット数を変える場合、以下に記載されるように、ハードウェア内で何らかの一時的なバッファリングが必要とされることがある。
【0147】
様々な形態のCONVNUMERIC命令によって実行される変換の例が、
図13から
図24に関連して以下に説明される。これらの図は、メモリ構成およびテンソル構造の一貫性を示すために、幅512bのメモリアレイに記憶された例示的なテンソルを示している。ビット/要素(bpe)が少ない数値タイプからbpeが多い数値タイプに変換するとき、変換後データは入力データよりも広い帯域幅を必要とする。いくつかの実施形態では、性能を向上させるために、バッファまたはキューなどの一時ストレージが使用される。いずれの場合も、テンソル全体は、維持する必要がある定義された(そしてしばしば多次元の)構造を有するので、MPU1208a/1201dによって実行される変換は個々のテンソル要素の単なる操作以上のものを伴う。
【0148】
以下に記載される実施形態は、この一貫性のある構造を維持しながら変換を実行する。たとえば、一実施形態では、全体の出力テンソルデータ構造内の適切な構造的順序付けを保証するために、メモリストレージの前にそれぞれの変換済みテンソルブロックに対してメモリ領域が識別される。場合によっては、これは、後続の変換済みテンソルブロックが正しい構造位置に記憶されることを保証するために、変換済みテンソルブロック間のメモリ内に1または複数のブロックサイズのギャップを確保する必要があるかもしれない。
【0149】
最初に
図13を参照すると、明確さのため、メモリアレイビュー1301および論理ビュー1302を含む、1024x1024の行列のメモリ構成の2つの異なる図が提供されている。メモリアレイビュー1301は、メモリアレイの幅(図示される実施形態では512b)を有する配置を備え、各テンソルブロックは最初(A0,0)から最後(A15,15)までスタック内に配置されている。論理ビュー1302は、テンソル要素を行と列に配置する。たとえば、第1行はテンソルブロックA0,0からA0,15を含み、第2行(図示せず)はテンソルブロックA1,0からA1,15を含み、以下同様である。
【0150】
図14から
図24は同様に、異なる数値フォーマット間で変換するための異なる変換命令について、メモリアレイビュー1401、1501、1601、1701、1801、1901、2001、2101、2201、2301、2401および論理ビュー1402、1502、1602、1702、1802、1902、2002、2102、2202、2302、2402の両方をそれぞれ含む。なお、これらの異なるビューは基本的なデータを可視化する目的のためだけに提供され、ビュー間で推移するためにオペレーションが実行されていることを示すよう意味するものではないことに、留意されたい。加えて、各図は(論理ビューの観点から)、どのようにしてそれぞれのテンソルデータのブロックが新しいテンソルデータフォーマット1304、1404、1504、1604、1704、1804、1904、2004、2104、2204、2304、2404に変換されるかを示し、また、変換されたテンソル値についてそれぞれメモリアレイビュー1305、1405、1505、1605、1705、1805、1905、2005、2105、2205、2305、2405を示す。
【0151】
図13に戻ると、8bpeから16bpeへの変換のためのメモリ構成が示されている。幅512bのメモリアレイ内に記憶された四角いテンソルのブロックサイズは、64x64から32x32まで変化する。つまり、MPU1208aは、テンソルブロック(A0,0)についてブロック(A'0,0)、(A'0,1)、(A'1,0)、および(A'1,1)として示されるように、各64x64の8bpeテンソルを4つの32x32の16bpeテンソル1304に分解する。簡略化のために図示されていないが、MPU1208a(または1201d)は、(A0,1)から(A15,15)までの残りの要素の各々についても並行して類似のオペレーションを実行する。ここでは、32x32テンソルの各々が元の64x64ブロックと同じメモリ内の同じストレージを占有することがわかる。
【0152】
一実施形態では、CONVNUMERIC命令に応答して、MPU1208a(または1201d)は最初に、
図13ではブロック(A'0,0)および(A'0,1)として表される、A0,0の上半分全体(32x64)を受信して、その一時記憶メモリ1208b内に記憶する。次いでMPU1208a/1201dは、A'0,0を完全に生成し、A'0,1がそれに続くように、記憶されたデータを通る複数の変換パスを実行する。入力データと同様に、結果として得られる16bpe要素を示すために、論理ビュー1304およびメモリアレイビュー1305の両方が提供される。プロセスはA0,0の下半分(32x64)についても継続し、MPU1208a/1201dはA'1,0を完全に生成してA'1,1がそれに続くように動作している。一実施形態では、MPU1208a/1201dは、残りのA'0,*ブロック、A'1,*ブロックなどをA'31,31ブロックまでシーケンシャルに記憶するために、メモリ内に十分なギャップを持ってメモリアレイ(たとえば、ビュー1305参照)内の要素を記憶する。元のブロックA0,0が処理されてしまうと、MPU1208a/1201dは次に8bpeのA0,1ブロックの処理に進み、このブロックに対して同様に動作する。
【0153】
異なるバージョンのCONVNUMERIC命令に応答して、以下に説明されるようにMPU1208a/1201dによって異なるダウンコンバージョンのオペレーションが実行されてもよい。一実施形態では、これらの異なるバージョンは、CONVNUMERIC命令に対して使用される特定のオペコードで指定される。あるいは、または付加的に、異なるバージョンは、即値を用いて、および/または命令によって参照される特定のオペランドに基づいて、指定されてもよい。
【0154】
図14は、16bpeから32bpeのCONVNUMERIC命令に応答してMPU1208a/1201dによって実行される変換オペレーションの例を示す。つまり、MPU1208a/1201dは、テンソルブロック(A0,0)についてブロック(A'0,0)、(A'0,1)、(A'1,0)、および(A'1,1)として示されるように、各32x32の16bpeテンソル(メモリアレイビュー1401および論理ビュー1402に再度示される)を4つの16x16の32bpeテンソル1404に分解する。簡略化のために図示されていないが、MPU1208a/1201dは、(A0,1)から(A31,31)までの残りの要素の各々についても類似のオペレーションを実行する。16x16テンソルの各々が元の32x32ブロックと同じメモリ内の同じストレージを占有することがわかる。
【0155】
一実施形態では、CONVNUMERIC命令に応答して、MPU1208a/1201dは最初に、
図14ではブロック(A'0,0)および(A'0,1)として表される、A0,0の上半分全体(16x32)を受信して、その一時記憶メモリ1208b内に記憶する。次いでMPU1208a/1201dは、A'0,0を完全に生成し、A'0,1がそれに続くように、記憶されたデータを通る複数の変換パスを実行する。入力データと同様に、結果として得られる32bpe要素を示すために、論理ビュー1404およびメモリアレイビュー1405の両方が提供される。プロセスはA0,0の下半分についても継続し、MPU1208a/1201dはA'1,0を完全に生成してA'1,1がそれに続くように動作している。一実施形態では、MPU1208a/1201dは、残りのA'0,*ブロック、A'1,*ブロックなどをA'63,63ブロックまでシーケンシャルに記憶するために、メモリ内に十分なギャップを持ってメモリアレイ(たとえば、ビュー1405参照)内の要素を記憶する。元のブロックA0,0が処理されてしまうと、MPU1208a/1201dは次に8bpeのA0,1ブロックの処理に進み、このブロックに対して同様に動作する。
【0156】
図15は、テンソルデータ要素のアップコンバージョンを実行する別の実施形態を示す。この場合、MPU1208a/1201dは8bpeから32bpeのCONVNUMERIC命令を実行する。ここで、MPU1208a/1201dは、メモリアレイビュー1504に示されるブロック(A'0,0)および(A'3,0)と共に、論理ビュー1503内のブロック(A'0,0)から(A'0,3)、および(A'3,0)、および(A'3,3)として示されるように、各64x64の8bpeテンソル(メモリアレイビュー1501および論理ビュー1502に再度示される)を16x16の32bpeテンソルに分解する。簡略化のために図示されていないが、MPU1208a/1201dは、残りのブロックの各々についても並行して類似のオペレーションを実行する。
【0157】
なお、本発明の基本的な原理を遵守しながら様々なその他のデータフォーマットおよび要素サイズが使用され得ることに、留意されたい。たとえば、代替メモリフォーマットは、16ビットデータタイプを32x32として、32ビットデータタイプを32x16として、および8ビットデータタイプを32x64として、記憶することができる。これらのデータフォーマットを使用するいくつかの実施形態が、
図16から
図18にそれぞれ示されている。
【0158】
図16は、テンソルデータ要素のアップコンバージョンを実行する別の実施形態を示す。この場合、MPU1208a/1201dは、64個の8ビット要素のセットを32個の16ビット要素に変換するためのCONVNUMERIC命令を実行する。64個の8ビット要素が32行に配置されたテンソルブロック(A0,0)の例が示されており、これが2つのテンソルブロック(A'0,0)および(A'0,1)に変換され、その各々は32行に配置された32個の16ビット要素(テンソルブロック1603)を有する。
【0159】
図17は、テンソルデータ要素のアップコンバージョンを実行する一実施形態を示す。MPU1208a/1201dは、32個の16ビット要素のセットを16個の32ビット要素のセットに変換するためのCONVNUMERIC命令を実行する。32個の8ビット要素が32行に配置されたテンソルブロック(A0,0)の例が示されており、これが2つのテンソルブロック(A'0,0)および(A'0,1)に変換され、その各々は32行に配置された16個の32ビット要素(テンソルブロック1703)を有する。
【0160】
図18は、8ビットテンソルデータ要素から32ビットテンソルデータ要素へのテンソルのアップコンバージョンを実行する一実施形態を示す。MPU1208a/1201dは、64個の8ビット要素の32行を16個の32ビットテンソル要素の32行に変換するためのCONVNUMERIC命令を実行する。64個の8ビット要素が32行に配置されたテンソルブロック(A0,0)の例が示されており、これが4つのテンソルブロック(A'0,0)、(A'0,1)、(A'0,2)、および(A'0,3)に変換され、その各々は16個の32ビットテンソル要素(テンソルブロック1803)32行を有する。
【0161】
大きいbpeのテンソルから小さいbpeのテンソルに変換するとき、変換後データは入力データよりも狭い帯域幅を必要とする。ハードウェアは、出力のために十分な結果要素が累積されるまで、変換された出力を一時ストレージに記憶する。
【0162】
ダウンコンバージョンの間、1つの出力ブロックを生成するために、複数の入力テンソルブロックが組み合わせられる。この実施形態では、MPU1208a/1201dによって使用される一時ストレージ1208bは、上段ブロックに関する様々なシナリオについて全ての入力データを保持するのに十分な大きさである。
【0163】
図19は、16bpe値のブロックを8bpe値に変換する一実施形態を示す。上述の実施形態と同様に、メモリアレイビュー1901および論理ビュー1902を含むメモリ構成の2つの異なるビューが提供される。この実施形態では、入力テンソルブロックは32x32x16bpeブロックである。MPU1208a/1201dはこれらの入力ブロックのうち4つを1つの64x64x8bpeブロックに変換する。たとえば、
図19では、入力ブロック(A0,0)、(A0,1)、(A1,0)、および(A1,1)は、後にメモリアレイ1904内の第1メモリ位置に記憶される出力ブロック(A'0,0)1903に変換される。一実施形態では、MPU1208a/1201dは、次の出力ブロック(A'0,1)(たとえば、入力ブロック(A0,2)、(A0,3)、(A1,2)、および(A1,3))を生成するために、次の4つのブロックのセット(図示せず)を使用する。
【0164】
図20は、32bpe値のブロックを16bpe値に変換する一実施形態を示す。前の実施形態と同様に、メモリアレイビュー2001および論理ビュー2002が提供される。この実施形態では、入力テンソルブロックは16x16x32bpeブロックである。MPU1208a/1201dはこれらの入力ブロックのうち4つを1つの32x32x16bpeブロックに変換する。たとえば、
図20では、入力ブロック(A0,0)、(A0,1)、(A1,0)、および(A1,1)は、後にメモリアレイ2004内の第1メモリ位置に記憶される出力ブロック(A'0,0)2003に変換される。一実施形態では、MPU1208a/1201dは、次の出力ブロック(A'0,1)(たとえば、入力ブロック(A0,2)、(A0,3)、(A1,2)、および(A1,3))を生成するために、次の4つのブロックのセット(図示せず)を使用する。
【0165】
図21は、32bpe値のブロックを8bpe値に変換する一実施形態を示す。前の実施形態と同様に、メモリアレイビュー2101および論理ビュー2102が提供される。この実施形態では、入力テンソルブロックは16x16x32bpeブロックである。MPU1208a/1201dはこれらの入力ブロックのうち16個を1つの64x64x8bpeブロックに変換する。たとえば、
図20では、入力ブロック(A0,0)、(A0,3)、(A3,0)、および(A3,3)は、後にメモリアレイ2104内の第1メモリ位置に記憶される出力ブロック(A'0,0)2103に変換される。一実施形態では、MPU1208a/1201dは、次の出力ブロック(A'0,1)を生成するために、次の4つのブロックのセット(図示せず)を使用する。
【0166】
図22は、16bpe値のブロックを8bpe値に変換する別の実施形態を示す。前の実施形態と同様に、メモリアレイビュー2201および論理ビュー2202が提供される。この実施形態では、入力テンソルブロックは32x32x16bpeブロックである。MPU1208a/1201dはこれらの入力ブロックのうち2つを1つの32x64x8bpeブロックに変換する。たとえば、
図20では、入力ブロック(A0,0)および(A0,1)は、後にメモリアレイ2204内の第1メモリ位置に記憶される出力ブロック(A'0,0)2203に変換される。一実施形態では、MPU1208a/1201dは、次の出力ブロック(A'0,1)を生成するために、次の2つのブロックのセット(図示せず)を使用する。
【0167】
図23は、16bpe値のブロックを8bpe値に変換する別の実施形態を示す。前の実施形態と同様に、メモリアレイビュー2301および論理ビュー2302が提供される。この実施形態では、入力テンソルブロックは、16個の32ビット要素32行である。MPU1208a/1201dは、これらの入力ブロックのうち2つを、32行で配置された32個の16ビット要素2303のうち1つのテンソルブロックに変換する。たとえば、
図23では、入力ブロック(A0,0)および(A0,1)は、後にメモリアレイ2304内の第1メモリ位置に記憶される出力ブロック(A'0,0)2303に変換される。一実施形態では、MPU1208a/1201dは、次の出力ブロック(A'0,1)を生成するために、次の2つのブロックのセット(たとえば、(A0,2)および(A0,3))を使用する。
【0168】
図24は、32bpeテンソル値のブロックを8bpe値に変換する一実施形態を示す。前の実施形態と同様に、メモリアレイビュー2401および論理ビュー2402が提供される。この実施形態では、入力テンソルブロックは、16個の32ビット要素32行を備える。MPU1208a/1201dは、これらの入力ブロックのうち4つを、32行で配置された64個の8ビット要素2403のうち1つのテンソルブロックに変換する。たとえば、
図24では、入力ブロック(A0,0)および(A0,3)は、後にメモリアレイ2404内の第1メモリ位置に記憶される出力ブロック(A'0,0)2403に変換される。一実施形態では、MPU1208a/1201dは、次の出力ブロック(A'0,1)を生成するために、次の4つのブロックのセット(図示せず)を使用する。
【0169】
本発明の一実施形態による方法が、
図25に示されている。方法は、本明細書に記載されるプロセッサおよびシステムアーキテクチャ上に実装されてもよいが、いかなる特定のアーキテクチャにも限定されない。
【0170】
2501で、複数の入力テンソルブロックを備えるソーステンソルデータ構造を識別するソースオペランドを有する数値変換命令(たとえば、CONVNUMERIC)がフェッチされる。上述のように、入力テンソルブロックは、出力/変換済みテンソルブロックにおいて維持されなければならない、事前定義された一貫性のある構造配置を有する。数値変換命令は、入力数値表現および出力数値表現を識別する1または複数のフィールドを含む。
【0171】
上述のように、「アップコンバージョン」の場合、入力テンソルブロックの要素あたりビット数は、出力テンソルブロックの要素あたりビット数よりも少ない。逆に、「ダウンコンバージョン」の場合、入力テンソルブロックの要素あたりビット数は、出力テンソルブロックの要素あたりビット数よりも多い。
【0172】
2502では、数値変換命令が復号される。たとえば、マイクロコード化プロセッサでは、復号により、実行回路内の機能ユニット上でスケジュールおよび実行される1または複数のマイクロオペレーションを生成する。
【0173】
2503では、入力テンソルブロックのうち1または複数が(たとえばメモリから)取り出され、一時/ローカルストレージに記憶される。一実施形態では、一時/ローカルストレージは、実行回路内のローカルキャッシュまたは高速バッファストレージである。
【0174】
2504では、数値変換命令が実行されて、デスティネーションテンソルデータ構造の1または複数のデスティネーションテンソルブロック内で各入力テンソルブロック内のテンソル要素を第1数値表現から第2数値表現に変換する。一実施形態では、デスティネーションテンソルブロックの一貫性のある構造配置はデスティネーションテンソルデータ構造において維持される。これはたとえば、デスティネーションテンソルデータ構造内のブロックの最終的な配置を予想し、まだ生成されていない他のデスティネーションテンソルブロックで満たされるべき完成したデスティネーションテンソルブロックの間にメモリのギャップを作成することによって、達成され得る(たとえば、
図13のテンソルブロック(A'1,0)参照)。
【0175】
2505で決定された、追加の入力テンソルブロックが残っている場合には、これらは2503で取り出されて一時/ローカルストレージに記憶され、これらのブロックに対して数値変換オペレーション2504が実行される。このプロセスは、処理すべき入力テンソルブロックがなくなるまで繰り返される。2506では、数値変換命令がリタイアされ、プロセッサのアーキテクチャ状態が更新される(すなわち、完成したデスティネーションテンソルデータ構造を反映するため)。変換メモリはテンソル全体に適合するには小さすぎる場合があるので、命令のリタイアはローカルストレージ変換と並行して行われてもよい。
【0176】
上記の明細書では、本発明の実施形態は、その特定の例示的な実施形態を参照して説明されてきた。しかしながら、添付請求項に明記された本発明のより広い精神および範囲から逸脱することなく、様々な修正および変更が加えられてもよいことは、明らかであろう。したがって、明細書および図面は、限定的ではなく説明的な意味で見なされるべきである。
【0177】
装置のいずれかについて記載された構成要素、特徴、および詳細は、いずれの方法にも任意選択的に適用されることが可能であり、これらの方法は実施形態において、このような装置によって、および/またはこのような装置を用いて実行されることが可能である。本明細書に記載されるプロセッサのいずれも、本明細書に開示されるシステムのいずれにも含まれることが可能である。いくつかの実施形態では、コンピュータシステムは、相互接続、相互接続に結合されたプロセッサ、相互接続に結合されたダイナミックランダムアクセスメモリ(DRAM)を含むことができる。あるいは、DRAMの代わりに、リフレッシュする必要のない他のタイプの揮発性メモリが使用されてもよく、またはフラッシュメモリが使用されてもよい。
【0178】
説明および請求項において、用語「結合された」および/または「接続された」が、その派生語と共に使用されてきたかもしれない。これらの用語は互いに同義語として意図されるものではない。むしろ、実施形態では、「接続された」は2つ以上の要素が互いに直接物理的および/または電気的に接触していることを示すために使用され得る。「結合された」は、2つ以上の要素が互いに直接物理的および/または電気的に接触していることを意味し得る。しかしながら、「結合された」は、2つ以上の要素が互いに直接接触しておらず、それでもなお互いに協働または相互接続していることも意味し得る。たとえば、実行ユニットは、1または複数の介在する構成要素を通じてレジスタおよび/または復号ユニットと結合され得る。図中、接続および結合を示すために矢印が使用されている。
【0179】
用語「および/または」が使用されてきたかもしれない。本明細書で使用される際に、用語「および/または」は、一方または他方または両方を意味する(たとえば、Aおよび/またはBは、AまたはBまたはAおよびBの両方を意味する)。
【0180】
上記の説明において、実施形態の完全な理解を提供するために、具体的な詳細が明記されてきた。しかしながら、これらの具体的詳細のうちいくつかがない他の実施形態が実践されてもよい。本発明の範囲は、上記で提供された特定の実施例によってではなく、以下の請求項によってのみ決定されるべきである。他の例では、公知の回路、構造、装置、およびオペレーションは、説明の理解を曖昧にするのを回避するために、ブロック図の形態で、および/または詳細を伴わずに、示されてきた。適切であると考えられる場合、別途指定されるかまたは明らかでない限り、任意選択的に類似のまたは同じ特性を有する、対応する要素または同じ要素を示すために、図面の間で参照番号、または参照番号の末尾が繰り返されている。
【0181】
特定のオペレーションは、ハードウェア構成要素によって実行されてもよく、もしくはオペレーションを実行する命令でプログラムされた、機械、回路、またはハードウェア構成要素(たとえば、プロセッサ、プロセッサの一部、回路など)を生じるおよび/またはもたらすために使用され得る機械実行可能命令または回路実行可能命令において、具現化されてもよい。これらのオペレーションはまた、任意選択的に、ハードウェアとソフトウェアの組み合わせによっても実行され得る。プロセッサ、機械、回路、またはハードウェアは、特定のまたは固有の回路またはその他のロジック(たとえば、ファームウェアおよび/またはソフトウェアと潜在的に組み合わせられるハードウェア)を含んでもよく、これは命令を実行および/または処理し、命令に応答して結果を記憶するように動作する。
【0182】
いくつかの実施形態は、機械可読媒体を含む製造品(たとえば、コンピュータプログラム製品)を含む。媒体は、機械によって読み取り可能な形態の情報を提供、たとえば記憶する、機構を含んでもよい。機械可読媒体は、機械によって実行された場合および/またはそのようなときに、本明細書に開示される1または複数のオペレーション、方法、または技術を実行する機械を機械が実行するおよび/またはもたらすように動作する、命令または命令のシーケンスを提供するか、または記憶していてもよい。
【0183】
いくつかの実施形態では、機械可読媒体は非一時的機械可読記憶媒体を含んでもよい。たとえば、非一時的機械可読記憶媒体は、フロッピーディスケット、光記憶媒体、光ディスク、光データ記憶装置、CD-ROM、磁気ディスク、光磁気ディスク、読み出し専用メモリ(ROM)、プログラマブルROM(PROM)、消去可能プログラマブルROM(EPROM)、電気的消去可能プログラマブルROM(EEPROM)、ランダムアクセスメモリ(RAM)、スタティックRAM(SRAM)、ダイナミックRAM(DRAM)、フラッシュメモリ、相変化メモリ、相変化データ記憶材料、不揮発性メモリ、不揮発性データ記憶装置、非一時的メモリ、非一時的データ記憶装置などを含んでもよい。非一時的機械可読記憶媒体は、一時的な伝播信号からなるものではない。いくつかの実施形態では、記憶媒体は、固体物質を含む有形の媒体を含んでもよい。
【0184】
適切な機械の例は、汎用プロセッサ、専用プロセッサ、デジタル論理回路、集積回路などを含むが、これらに限定されない。適切な機械のさらに別の例は、プロセッサ、デジタル論理回路、または集積回路を含む、コンピュータシステムまたはその他の電子装置を含む。このようなコンピュータシステムまたは電子装置の例は、デスクトップコンピュータ、ラップトップコンピュータ、ノートブックコンピュータ、タブレットコンピュータ、ノートブック、スマートフォン、携帯電話、サーバ、ネットワーク装置(たとえば、ルータおよびスイッチ)、モバイルインターネットデバイス(MID)、メディアプレーヤ、スマートテレビ、ネットトップ、セットトップボックス、およびビデオゲームコントローラを含むが、これらに限定されない。
【0185】
本明細書を通して、たとえば「1つの実施形態」、「一実施形態」「1または複数の実施形態」、「いくつかの実施形態」への言及は、本発明の実践に特定の特徴が含まれ得るが、必ずしも必要とは限らないことを示す。同様に、説明において、本開示を簡素化し、様々な発明の態様の理解を助ける目的のために、1つの実施形態、図面、またはその説明において様々な特徴がまとめられることがある。しかしながら、本開示のこの方法は、本発明が各請求項に明確に列挙されたよりも多くの特徴を必要とするという意図を反映していると解釈されるべきではない。むしろ、以下の請求項が反映するように、発明的な態様は、1つの開示された実施形態の全ての特徴よりも少ない特徴にある。したがって、詳細な説明に続く請求項は、詳細な説明に明確に組み込まれており、各請求項は本発明の別個の実施形態として独立している。
【0186】
本発明の実施形態は様々なステップを含むことができ、これらは上述されている。ステップは、汎用または専用プロセッサにステップを実行させるために使用され得る機械実行可能命令において具現化され得る。あるいは、これらのステップは、ステップを実行するためのハードワイヤードロジックを含む特定のハードウェア構成要素によって、またはプログラムされたコンピュータ構成要素およびカスタムハードウェア構成要素の任意の組み合わせによって、実行されてもよい。
【0187】
本明細書で説明される際に、命令は、特定のオペレーションを実行するように構成された、または非一時的コンピュータ可読媒体内で具現化されたメモリ内に記憶されている事前定義された機能またはソフトウェア命令を有する、特定用途向け集積回路(ASIC)など、ハードウェアの特定の構成を指すことができる。したがって、図面に示される技術は、1または複数の電子装置(たとえば、エンドステーション、ネットワーク要素など)上に記憶および実行されるコードおよびデータを使用して、実装されることが可能である。このような電子装置は、非一時的コンピュータ機械可読記憶媒体(たとえば、磁気ディスク、光ディスク、ランダムアクセスメモリ、読み出し専用メモリ、フラッシュメモリ装置、相変化メモリ)および一時的コンピュータ機械可読通信媒体(たとえば、搬送波、赤外線信号、デジタル信号などのような、電気、光、音響、またはその他の形態の伝播信号)のようなコンピュータ機械可読媒体を使用して、コードおよびデータを記憶および通信する(内部的に、および/またはネットワークを介して他の電子装置と)。加えて、このような電子装置は通常、1または複数の記憶装置(非一時的機械可読記憶媒体)、ユーザ入力/出力装置(たとえば、キーボード、タッチスクリーン、および/またはディスプレイ)、およびネットワーク接続など、1または複数の他の構成要素に結合された1または複数のプロセッサのセットを含む。プロセッサのセットと他の構成要素の結合は、通常、1または複数のバスおよびブリッジ(バスコントローラとも呼ばれる)を通じて行われる。記憶装置およびネットワークトラフィックを搬送する信号は、それぞれ1または複数の機械可読記憶媒体および機械可読通信媒体を表す。したがって、所与の電子装置の記憶装置は通常、その電子装置の1または複数のプロセッサのセット上で実行するためのコードおよび/またはデータを記憶する。当然ながら、本発明の一実施形態の1または複数の部分は、ソフトウェア、ファームウェア、および/またはハードウェアの異なる組み合わせを用いて実装されてもよい。
【0188】
この詳細な説明を通して、説明を目的として、本発明の完全な理解を提供するために、多数の具体的な詳細が明記された。しかしながら、本発明がこれらの具体的詳細のいくつかを伴わずに実践されてもよいことは、当業者にとって明らかであろう。特定の例では、本発明の主題を曖昧にするのを回避するために、公知の構造および機能はあまり詳細には説明されなかった。したがって、本発明の範囲および精神は、以下の請求項に関して判断されるべきである。
[他の可能性のある請求項]
(項目1)
ソーステンソルデータ構造のソーステンソルブロックを記憶するための第1ストレージであって、各ソーステンソルブロックは、第1数値表現を含む複数のソーステンソルデータ要素を有し、上記ソーステンソルデータ構造はソーステンソルブロックの事前定義された構造配置を有する、第1ストレージと、
第1テンソル変換命令を復号するためのデコーダと、
上記第1テンソル変換命令の実行に応答して、上記ソーステンソルブロックを、上記第1数値表現とは異なる第2数値表現を含む複数のデスティネーションテンソルデータ要素を有するデスティネーションテンソルブロックに変換するための実行回路であって、上記実行回路は、上記第1数値表現および上記第2数値表現に基づいて指定された順序で1または複数のソーステンソルブロックのセットを1または複数の対応するデスティネーションテンソルブロックに変換し、上記ソーステンソルブロックの上記事前定義された構造配置との一貫性を維持するために、それぞれのデスティネーションテンソルブロックを指示されたメモリ領域に記憶する、実行回路と、
を備えるプロセッサ。
(項目2)
上記デスティネーションテンソルブロックの一部が生成されると、上記デスティネーションテンソルブロックのうち2つ以上が、メモリ内の1または複数のデスティネーションブロックサイズのギャップによって分離される、項目1に記載のプロセッサ。
(項目3)
上記第1数値表現は上記第2数値表現よりも少ないビットを備える、項目1に記載のプロセッサ。
(項目4)
上記実行回路は、各ソーステンソルブロックを複数のデスティネーションテンソルブロックに変換する、項目3に記載のプロセッサ。
(項目5)
上記実行回路は、N個のソーステンソルブロックを2N個または4N個のデスティネーションテンソルブロックに変換する、項目4に記載のプロセッサ。
(項目6)
上記第1数値表現は上記第2数値表現よりも多くのビットを備える、項目1に記載のプロセッサ。
(項目7)
上記実行回路は、複数のソーステンソルブロックを各デスティネーションテンソルブロックに変換する、項目6に記載のプロセッサ。
(項目8)
上記実行回路は、N個のソーステンソルブロックをN/2個またはN/4個のデスティネーションテンソルブロックに変換する、項目7に記載のプロセッサ。
(項目9)
ソーステンソルデータ構造のソーステンソルブロックをフェッチするステップであって、各ソーステンソルブロックは、第1数値表現を含む複数のソーステンソルデータ要素を有し、上記ソーステンソルデータ構造はソーステンソルブロックの事前定義された構造配置を有する、ステップと、
1または複数の上記ソーステンソルブロックを、上記第1数値表現とは異なる第2数値表現を含む複数のデスティネーションテンソルデータ要素を有する1または複数のデスティネーションテンソルブロックに変換するステップであって、上記1または複数のソーステンソルブロックのセットは、上記第1数値表現および上記第2数値表現に基づいて指定された順序で1または複数の対応するデスティネーションテンソルブロックに変換される、ステップと、
上記ソーステンソルブロックの上記事前定義された構造配置との一貫性を維持するために、それぞれのデスティネーションテンソルブロックを指示されたメモリ領域に記憶するステップと、
を備える方法。
(項目10)
上記デスティネーションテンソルブロックの一部が生成されると、上記デスティネーションテンソルブロックのうち2つ以上が、メモリ内の1または複数のデスティネーションブロックサイズのギャップによって分離される、項目9に記載の方法。
(項目11)
上記第1数値表現は上記第2数値表現よりも少ないビットを備える、項目9に記載の方法。
(項目12)
各ソーステンソルブロックが複数のデスティネーションテンソルブロックに変換される、項目11に記載の方法。
(項目13)
N個のソーステンソルブロックが2N個または4N個のデスティネーションテンソルブロックに変換される、項目12に記載の方法。
(項目14)
上記第1数値表現は上記第2数値表現よりも多くのビットを備える、項目9に記載の方法。
(項目15)
複数のソーステンソルブロックが各デスティネーションテンソルブロックに変換される、項目14に記載の方法。
(項目16)
N個のソーステンソルブロックがN/2個またはN/4個のデスティネーションテンソルブロックに変換される、項目15に記載の方法。
(項目17)
機械によって実行されると、
ソーステンソルデータ構造のソーステンソルブロックをフェッチするオペレーションであって、各ソーステンソルブロックは、第1数値表現を含む複数のソーステンソルデータ要素を有し、上記ソーステンソルデータ構造はソーステンソルブロックの事前定義された構造配置を有する、オペレーションと、
1または複数の上記ソーステンソルブロックを、上記第1数値表現とは異なる第2数値表現を含む複数のデスティネーションテンソルデータ要素を有する1または複数のデスティネーションテンソルブロックに変換するオペレーションであって、上記1または複数のソーステンソルブロックのセットは、上記第1数値表現および上記第2数値表現に基づいて指定された順序で1または複数の対応するデスティネーションテンソルブロックに変換される、オペレーションと、
上記ソーステンソルブロックの上記事前定義された構造配置との一貫性を維持するために、それぞれのデスティネーションテンソルブロックを指示されたメモリ領域に記憶するオペレーションと、
を上記機械に実行させる、プログラムコードを記憶した機械可読媒体。
(項目18)
上記デスティネーションテンソルブロックの一部が生成されると、上記デスティネーションテンソルブロックのうち2つ以上が、メモリ内の1または複数のデスティネーションブロックサイズのギャップによって分離される、項目17に記載の機械可読媒体。
(項目19)
上記第1数値表現は上記第2数値表現よりも少ないビットを備える、項目17に記載の機械可読媒体。
(項目20)
各ソーステンソルブロックが複数のデスティネーションテンソルブロックに変換される、項目19に記載の機械可読媒体。
(項目21)
N個のソーステンソルブロックが2N個または4N個のデスティネーションテンソルブロックに変換される、項目20に記載の機械可読媒体。
(項目22)
上記第1数値表現は上記第2数値表現よりも多くのビットを備える、項目17に記載の機械可読媒体。
(項目23)
複数のソーステンソルブロックが各デスティネーションテンソルブロックに変換される、項目22に記載の機械可読媒体。
(項目24)
N個のソーステンソルブロックがN/2個またはN/4個のデスティネーションテンソルブロックに変換される、項目23に記載の機械可読媒体。