(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2022151657
(43)【公開日】2022-10-07
(54)【発明の名称】演算アーキテクチャにおける8ビット浮動小数点オペランドのサポート
(51)【国際特許分類】
G06F 17/16 20060101AFI20220929BHJP
G06F 9/38 20060101ALI20220929BHJP
【FI】
G06F17/16 K
G06F9/38 370C
【審査請求】未請求
【請求項の数】25
【出願形態】OL
【外国語出願】
(21)【出願番号】P 2022026883
(22)【出願日】2022-02-24
(31)【優先権主張番号】17/212,588
(32)【優先日】2021-03-25
(33)【優先権主張国・地域又は機関】US
(71)【出願人】
【識別番号】593096712
【氏名又は名称】インテル コーポレイション
(74)【代理人】
【識別番号】100107766
【弁理士】
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【弁理士】
【氏名又は名称】伊東 忠彦
(74)【代理人】
【識別番号】100135079
【弁理士】
【氏名又は名称】宮崎 修
(74)【代理人】
【識別番号】100112759
【弁理士】
【氏名又は名称】藤村 直樹
(72)【発明者】
【氏名】ナヴィーン メレンプディ
(72)【発明者】
【氏名】スブラマニアム マイユラン
(72)【発明者】
【氏名】ヴァーギーズ ジョージ
(72)【発明者】
【氏名】ファンウェン フゥ
(72)【発明者】
【氏名】シュアイ ムゥ
(72)【発明者】
【氏名】スプラティム パル
(72)【発明者】
【氏名】ウェイ シオン
【テーマコード(参考)】
5B013
5B056
【Fターム(参考)】
5B013DD03
5B056BB42
5B056CC01
5B056FF01
5B056FF02
(57)【要約】 (修正有)
【課題】8ビット浮動小数点フォーマットを使用して演算を実行する装置、方法及びプログラムを提供する。
【解決手段】処理システム100において、プロセッサによる方法は、実行するためにフェッチした命令を、デコードされた命令にデコードするステップを含む。デコードされた命令は、8ビット浮動小数点オペランドに作用して、プロセッサが並列ドット積演算を実行することを引き起こす行列命令である。方法はさらに、デコードされた命令をスケジューリングするために、デコードされた命令によって指定される8ビット浮動小数点データ・フォーマットに従って入力データを8ビット浮動小数点オペランドに提供するステップと、シストリック・ドット積回路が、デコードされた命令をシストリック層を使用して8ビット浮動小数点オペランドのドット積を生成するステップと、を含む。
【選択図】
図1
【特許請求の範囲】
【請求項1】
プロセッサを有する装置であって、前記プロセッサは:
実行するためにフェッチした命令を、デコードされた命令にデコードするデコーダであって、前記デコードされた命令は、8ビット浮動小数点オペランドに作用して、プロセッサが並列ドット積演算を実行することを引き起こす行列命令である、デコーダ;
前記デコードされた命令をスケジューリングするコントローラであって、前記デコードされた命令によって指定される8ビット浮動小数点データ・フォーマットに従って入力データを前記8ビット浮動小数点オペランドに提供するコントローラ;及び
前記デコードされた命令を、シストリック層を使用して実行するシストリック・ドット積回路であって、各々のシストリック層は、相互接続された乗算器、シフター、及び加算器の1つ以上のセットを含み、乗算器、シフター、及び加算器の各セットは前記8ビット浮動小数点オペランドのドット積を生成する、シストリック・ドット積回路;
を含む装置。
【請求項2】
前記シフターは、前記乗算器の出力を正規化する、請求項1に記載の装置。
【請求項3】
前記乗算器は、4ビット乗算器、8ビット乗算器、16ビット乗算器、又は32ビット乗算器のうちの少なくとも1つを含む、請求項1に記載の装置。
【請求項4】
前記加算器は、前記シフターによって正規化された前記乗算器によって生成された積を追加する加算ツリーを含み、前記加算器は、最も近い偶数に丸めることで前記加算ツリーの結果を丸める、請求項2に記載の装置。
【請求項5】
前記結果は、前記デコードされた命令によって指定される宛先の精度に丸められる、請求項4に記載の装置。
【請求項6】
前記シストリック・ドット積回路は、アキュムレータ・ソース・オペランドの後-蓄積を実行し、前記後-蓄積では、前記8ビット浮動小数点オペランドのドット積の生成に続いて、前記アキュムレータ・ソース・オペランドを蓄積する、請求項1に記載の装置。
【請求項7】
前記シストリック・ドット積回路は、アキュムレータ・ソース・オペランドの蓄積を実行し、前記蓄積では、前記シストリック・ドット積回路の第1ステージ、又は前記シストリック・ドット積回路の中間ステージのうちの1つにおいて前記アキュムレータ・ソース・オペランドを蓄積する、請求項1に記載の装置。
【請求項8】
プロセッサが、実行するためにフェッチした命令を、デコードされた命令にデコードするステップであって、前記デコードされた命令は、8ビット浮動小数点オペランドに作用して、前記プロセッサが並列ドット積演算を実行することを引き起こす行列命令である、ステップ;
前記プロセッサが、前記デコードされた命令をスケジューリングするステップであって、前記デコードされた命令によって指定される8ビット浮動小数点データ・フォーマットに従って入力データを前記8ビット浮動小数点オペランドに提供するステップ;及び
前記プロセッサのシストリック・ドット積回路が、前記デコードされた命令をシストリック層を使用して実行するステップであって、各々のシストリック層は、相互接続された乗算器、シフター、及び加算器の1つ以上のセットを含み、乗算器、シフター、及び加算器の各セットは前記8ビット浮動小数点オペランドのドット積を生成する、ステップ;
を含む方法。
【請求項9】
前記シフターは、前記乗算器の出力を正規化し、前記加算器は、前記シフターによって正規化された前記乗算器によって生成された積を追加する加算ツリーを含み、前記加算器は、最も近い偶数に丸めることで前記加算ツリーの結果を丸める、請求項8に記載の方法。
【請求項10】
前記結果は、前記デコードされた命令によって指定される宛先の精度に丸められる、請求項9に記載の方法。
【請求項11】
前記乗算器は、4ビット乗算器、8ビット乗算器、16ビット乗算器、又は32ビット乗算器のうちの少なくとも1つを含む、請求項8に記載の方法。
【請求項12】
前記シストリック・ドット積回路が、アキュムレータ・ソース・オペランドの後-蓄積を実行するステップを更に含み、前記後-蓄積では、前記8ビット浮動小数点オペランドのドット積の生成に続いて、前記アキュムレータ・ソース・オペランドを蓄積する、請求項8に記載の方法。
【請求項13】
前記シストリック・ドット積回路が、アキュムレータ・ソース・オペランドの蓄積を実行するステップを更に含み、前記蓄積では、前記シストリック・ドット積回路の第1ステージ、又は前記シストリック・ドット積回路の中間ステージのうちの1つにおいて前記アキュムレータ・ソース・オペランドを蓄積する、請求項8に記載の方法。
【請求項14】
命令を含むコンピュータ・プログラムであって、前記命令は1つ以上のプロセッサにより実行されると:
前記1つ以上のプロセッサが、実行するためにフェッチした命令を、デコードされた命令にデコードするステップであって、前記デコードされた命令は、8ビット浮動小数点オペランドに作用して、前記1つ以上のプロセッサが並列ドット積演算を実行することを引き起こす行列命令である、ステップ;
前記1つ以上のプロセッサが、前記デコードされた命令をスケジューリングするステップであって、前記デコードされた命令によって指定される8ビット浮動小数点データ・フォーマットに従って入力データを前記8ビット浮動小数点オペランドに提供するステップ;及び
前記1つ以上のプロセッサのシストリック・ドット積回路が、前記デコードされた命令をシストリック層を使用して実行するステップであって、各々のシストリック層は、相互接続された乗算器、シフター、及び加算器の1つ以上のセットを含み、乗算器、シフター、及び加算器の各セットは前記8ビット浮動小数点オペランドのドット積を生成する、ステップ;
を実行することを引き起こす、コンピュータ・プログラム。
【請求項15】
前記シフターは、前記乗算器の出力を正規化し、前記加算器は、前記シフターによって正規化された前記乗算器によって生成された積を追加する加算ツリーを含み、前記加算器は、最も近い偶数に丸めることで前記加算ツリーの結果を丸める、請求項14に記載のコンピュータ・プログラム。
【請求項16】
前記結果は、前記デコードされた命令によって指定される宛先の精度に丸められる、請求項15に記載のコンピュータ・プログラム。
【請求項17】
前記命令は、前記1つ以上のプロセッサに:前記シストリック・ドット積回路が、アキュムレータ・ソース・オペランドの後-蓄積を実行することを行わせ、前記後-蓄積では、前記8ビット浮動小数点オペランドのドット積の生成に続いて、前記アキュムレータ・ソース・オペランドを蓄積する、請求項14に記載のコンピュータ・プログラム。
【請求項18】
前記命令は、前記1つ以上のプロセッサに:前記シストリック・ドット積回路が、アキュムレータ・ソース・オペランドの蓄積を実行することを行わせ、前記蓄積では、前記シストリック・ドット積回路の第1ステージ、又は前記シストリック・ドット積回路の中間ステージのうちの1つにおいて前記アキュムレータ・ソース・オペランドを蓄積する、請求項14に記載のコンピュータ・プログラム。
【請求項19】
演算アーキテクチャにおいて8ビット浮動小数点フォーマットのオペランドをサポートすることを支援するシステムであって、前記システムは:
メモリ;及び
複数のGPUの1つ以上のプロセッサ;
を含み、前記1つ以上のプロセッサは前記メモリに通信可能に結合され、且つ:
実行するためにフェッチした命令を、デコードされた命令にデコードするデコーダであって、前記デコードされた命令は、8ビット浮動小数点オペランドに作用して、グラフィックス処理ユニットが並列ドット積演算を実行することを引き起こす行列命令である、デコーダ;
前記デコードされた命令をスケジューリングするコントローラであって、前記デコードされた命令によって指定される8ビット浮動小数点データ・フォーマットに従って入力データを前記8ビット浮動小数点オペランドに提供するコントローラ;及び
前記デコードされた命令を、シストリック層を使用して実行するシストリック・ドット積回路であって、各々のシストリック層は、相互接続された乗算器、シフター、及び加算器の1つ以上のセットを含み、乗算器、シフター、及び加算器の各セットは前記8ビット浮動小数点オペランドのドット積を生成する、シストリック・ドット積回路;
を含む、システム。
【請求項20】
前記シフターは、前記乗算器の出力を正規化する、請求項19に記載のシステム。
【請求項21】
前記乗算器は、4ビット乗算器、8ビット乗算器、16ビット乗算器、又は32ビット乗算器のうちの少なくとも1つを含む、請求項19に記載のシステム。
【請求項22】
前記加算器は、前記シフターによって正規化された前記乗算器によって生成された積を追加する加算ツリーを含み、前記加算器は、最も近い偶数に丸めることで前記加算ツリーの結果を丸める、請求項20に記載のシステム。
【請求項23】
前記結果は、前記デコードされた命令によって指定される宛先の精度に丸められる、請求項22に記載のシステム。
【請求項24】
演算アーキテクチャにおいて8ビット浮動小数点フォーマットのオペランドをサポートすることを支援する装置であって:
実行するためにフェッチした命令を、デコードされた命令にデコードする手段であって、前記デコードされた命令は、8ビット浮動小数点オペランドに作用して、プロセッサが並列ドット積演算を実行することを引き起こす行列命令である、手段;
前記デコードされた命令をスケジューリングする手段であって、前記デコードされた命令によって指定される8ビット浮動小数点データ・フォーマットに従って入力データを前記8ビット浮動小数点オペランドに提供する手段;及び
前記デコードされた命令を、シストリック層を使用して実行する手段であって、各々のシストリック層は、相互接続された乗算器、シフター、及び加算器の1つ以上のセットを含み、乗算器、シフター、及び加算器の各セットは前記8ビット浮動小数点オペランドのドット積を生成する、手段;
を含む装置。
【請求項25】
請求項11-15のうちの何れか一項に記載の方法を実行するように更に構成された請求項24に記載の装置。
【発明の詳細な説明】
【技術分野】
【0001】
[0001] 本件は一般にデータ処理に関連し、特に演算アーキテクチャにおける8ビット浮動小数点フォーマット・オペランドをサポートすることに関連する。
【背景技術】
【0002】
[0002] 現在の並列グラフィックス・データ処理は、例えば、線型補間、テセレーション、ラスタライゼーション、テクスチャ・マッピング、深度テスト等のようなグラフィックス・データに対する特定の演算を実行するために開発されたシステム及び方法を含む。従来、グラフィックス・プロセッサは、グラフィックス・データを処理するために固定機能計算ユニットを使用していた;しかしながら、より最近では、グラフィックス・プロセッサの一部がプログラム可能にされており、このようなプロセッサが、頂点データ及びフラグメント・データを処理するためのより広範なオペレーションをサポートすることを可能にしている。
【0003】
[0003] パフォーマンスを更に向上させるために、グラフィックス・プロセッサは、典型的には、グラフィックス・パイプラインの異なる部分を通る可能な限り多くのグラフィックス・データを並行的に処理しようとするパイプライン化のような処理技術を実装する。単一命令、多重データ(SIMD)又は単一命令、多重スレッド(SIMT)アーキテクチャを有する並列グラフィックス・プロセッサは、グラフィックス・パイプラインにおける並列処理の量を最大化するように設計される。SIMDアーキテクチャでは、複数の処理エレメントを有するコンピュータは、複数のデータ・ポイントにおいて同じ動作を同時に実行しようとする。SIMTアーキテクチャでは、並列スレッドのグループは、処理効率を高めるために、可能な限り頻繁にプログラム命令を同期させて一緒に実行しようと試みる。
【0004】
[0004] グラフィックス・プロセッサは、人工知能(AI)及び機械学習(ML)の分野におけるアプリケーションに頻繁に利用される。これらの分野の進歩により、MLモデルは、ニューラル・ネットワークのトレーニングのために低精度演算を利用することが可能になっている。従来のトレーニング・プラットフォームは、高性能シストリック・アレイ実装における浮動小数点16(FP16)及びブレイン浮動小数点16(bfloat16又はBF16)データ・フォーマットをサポートしている。最近は、8ビット・データ・フォーマットのような低精度データ・フォーマットを使用するディープ・ニューラル・ネットワークのトレーニングを支援するように作られている。しかしながら、従来のシステムは、8ビット浮動小数点フォーマット・オペランドを使用して演算を実行するためのハードウェア・サポートを提供しない。
【図面の簡単な説明】
【0005】
[0005] 本実施形態の上記の特徴を詳細に理解することができるように、ここで簡単に要約される実施形態のより詳細な説明は、実施形態を参照することによって行われ、そのうちの一部は添付図面に示されている。しかしながら、添付図面は、典型的な実施形態しかを示しておらず、従ってその範囲を限定するように解釈されるべきでないことに留意されたい。
【0006】
[0006]
【
図1】処理システムのブロック図である。 [0007]
【
図2A】コンピューティング・システム及びグラフィックス・プロセッサを示す。
【
図2B】コンピューティング・システム及びグラフィックス・プロセッサを示す。
【
図2C】コンピューティング・システム及びグラフィックス・プロセッサを示す。
【
図2D】コンピューティング・システム及びグラフィックス・プロセッサを示す。 [0008]
【
図3A】追加的なグラフィックス・プロセッサ及び演算アクセラレータ・アーキテクチャのブロック図を示す。
【
図3B】追加的なグラフィックス・プロセッサ及び演算アクセラレータ・アーキテクチャのブロック図を示す。
【
図3C】追加的なグラフィックス・プロセッサ及び演算アクセラレータ・アーキテクチャのブロック図を示す。 [0009]
【
図4】グラフィックス・プロセッサのグラフィックス処理エンジンのブロック図である。 [0011]
【
図5A】グラフィックス・プロセッサ・コアで使用される処理要素のアレイを含むスレッド実行ロジックを示す。
【
図5B】グラフィックス・プロセッサ・コアで使用される処理要素のアレイを含むスレッド実行ロジックを示す。 [0011]
【
図6】追加的な実行ユニットを示す。 [0012]
【
図7】グラフィックス・プロセッサ命令フォーマットを示すブロック図である。 [0013]
【
図8】追加的なグラフィックス・プロセッサ・アーキテクチャのブロック図である。 [0014]
【
図9A】グラフィックス・プロセッサ・コマンド・フォーマット及びコマンド・シーケンスを示す。
【
図9B】グラフィックス・プロセッサ・コマンド・フォーマット及びコマンド・シーケンスを示す。 [0015]
【
図10】データ処理システムのための例示的なグラフィックス・ソフトウェア・アーキテクチャを示す。 [0016]
【
図11A】IPコア開発システムを示すブロック図である。 [0017]
【
図11B】集積回路パッケージ・アセンブリの側断面図を示す。 [0018]
【
図11C】基板(例えば、ベース・ダイ)に接続されたハードウェア論理チップレットの複数のユニットを含むパッケージ・アセンブリを示す。 [0019]
【
図11D】交換可能なチップレットを含むパッケージ・アセンブリを示す。 [0020]
【
図12】チップ集積回路における例示的なシステムを示すブロック図である。 [0021]
【
図13A】SoC内で使用するための例示的なグラフィックス・プロセッサを示すブロック図である。
【
図13B】SoC内で使用するための例示的なグラフィックス・プロセッサを示すブロック図である。 [0022]
【
図14】実施形態によるデータ処理システムのブロック図である。 [0023]
【
図15】実施形態によるブレイン・フロート8(BFLOAT8又はBF8)のバイナリ・フォーマットを示すブロック図である。 [0024]
【
図16】実施形態による命令パイプラインによって実行されるシストリックDP 8ビットFPフォーマット動作を示すブロック図である。 [0025]
【
図17A】実施形態による8ビット浮動小数点フォーマット入力オペランドに関してシストリック・ドット積を実行するシストリック・アレイ回路を示すブロック図である。
【
図17B】実施形態による8ビット浮動小数点フォーマット入力オペランドに関してシストリック・ドット積を実行するシストリック・アレイ回路を示すブロック図である。 [0026]
【
図18A】本件で説明される実施形態に従ってシストリック・アレイ回路によって実行することが可能な命令を示す。 [0027]
【
図18B】実施形態によるプログラム・コード・コンパイル・プロセスを示す。 [0028]
【
図19】8ビット浮動小数点フォーマットの入力オペランドに関するシストリック・ドット積蓄積の命令を実行するための方法の実施形態を示すフローチャートである。 [0029]
【
図20】8ビット浮動小数点フォーマットの入力オペランドに関するシストリック・ドット積蓄積のための方法の実施形態を示すフローチャートである。 [0030]
【
図21】実施形態に従って命令パイプラインにより実行される8ビットFPフォーマット変換動作を示すブロック図である。 [0031]
【
図22A】本件で説明される実施形態に従って処理ユニットにより実行することが可能な命令を示す。 [0032]
【
図22B】実施形態によるプログラム・コード・コンパイル・プロセスを示す。 [0033]
【
図23】浮動小数点データを8ビット浮動小数点フォーマット・データに変換する命令を実行するための方法の実施形態を示すフローチャートである。 [0034]
【
図24】浮動小数点データを8ビット浮動小数点フォーマット・データに変換する方法の実施形態を示すフローチャートである。 [0035]
【
図25】実施形態に従って命令パイプラインによって実行される確率的丸め演算を伴う8ビットFPフォーマット変換を示すブロック図である。 [0036]
【
図26】実施形態による仮数及び乱数の符号-大きさ表現の固定小数点加算を示すブロック図である。 [0037]
【
図27A】本件で説明される実施形態に従って処理ユニットによって実行することが可能な命令を示す。 [0038]
【
図27B】実施形態によるプログラム・コード・コンパイル・プロセスを示す。 [0039]
【
図28】浮動小数点値に対して効率的な確率的丸めを実行するための命令を実行する方法の実施形態を示すフローチャートである。 [0040]
【
図29】浮動小数点値に対して効率的な確率的丸めを実行するための方法の実施形態を示すフローチャートである。 [0041]
【
図30】実施形態に従う異なるバイナリ符号化及び指数バイアスを使用する2つの8ビット浮動小数点フォーマットを示すブロック図である。 [0042]
【
図31】実施形態に従う命令パイプラインによって実行されるハイブリッド8ビットFPフォーマットのシストリック動作を示すブロック図である。 [0043]
【
図32】実施形態によるハイブリッド浮動小数点・確率的動作を行うためのシストリック・アレイ回路のハイブリッドFMAユニットを示すブロック図である。 [0044]
【
図33A】本件で説明される実施形態に従うシストリック・アレイ回路によって実行することが可能な命令を示す。 [0045]
【
図33B】実施形態によるプログラム・コード・コンパイル・プロセスを示す。 [0046]
【
図34】ハイブリッド浮動小数点シストリック動作の命令を実行するための方法の実施形態を示すフローチャートである。 [0047]
【
図35】ハイブリッド浮動小数点シストリック動作のための方法の実施形態を示すフローチャートである。 [0048]
【
図36】実施形態に従って命令パイプラインによって実行される混合モード8ビットFPフォーマット動作を示すブロック図である。 [0049]
【
図37】実施形態に従う少なくとも1つの8ビットFPフォーマット・オペランドを使用して混合モードMAC動作を実行するためのハードウェア回路の例示的な略図を示す。 [0050]
【
図38A】本件で説明される実施形態に従って処理ユニットによって実行することが可能な命令のセットを示す。 [0051]
【
図38B】実施形態によるプログラム・コード・コンパイル・プロセスを示す。 [0052]
【
図39】8ビット浮動小数点フォーマット・オペランドを用いて混合モード演算を実行するための命令を実行する方法の実施形態を示すフローチャートである。 [0053]
【
図40】8ビット浮動小数点フォーマット・オペランドを用いて混合モード演算を実行するための方法の実施形態を示すフローチャートである。
【発明を実施するための形態】
【0007】
[0054] グラフィックス処理ユニット(GPU)は、例えばグラフィックス演算、機械学習演算、パターン解析演算、及び/又は種々の汎用GPU(GPGPU)機能を加速させるために、ホスト/プロセッサ・コアに通信可能に結合される。GPUは、バス又は他の相互接続(例えば、PCIe又はNVLinkのような高速相互接続)を介してホスト・プロセッサ/コアに通信可能に結合されてもよい。或いは、GPUは、コアと同じパッケージ又はチップ上に統合されてもよいし、内部プロセッサ・バス/相互接続(即ち、パッケージ又はチップの内部)でコアに通信可能に結合されてもよい。GPUが接続される方法にかかわらず、プロセッサ・コアは、作業記述子に含まれる一連のコマンド/命令の形式で、作業をGPUに割り当てることができる。そして、GPUは、これらのコマンド/命令を効率的に処理するために、専用の回路/ロジックを使用する。
【0008】
[0055] 以下の説明では、より完全な理解をもたらすために、多くの具体的な詳細が述べられている。しかしながら、本願で説明される実施形態は、これらの具体的な詳細の1つ以上によらず実施されてもよいことは、当業者に明らかであろう。他の例において、周知の特徴は、本実施形態の詳細を不明瞭にすることを避けるために記載されていない。
【0009】
システム概要
[0056]
図1は、実施形態による処理システム100のブロック図である。システム100は、シングル・プロセッサ・デスクトップ・システム、マルチプロセッサ・ワークステーション・システム、又は、多数のプロセッサ102又はプロセッサ・コア107を有するサーバー・システムで使用されてもよい。一実施形態では、システム100は、ローカル又はワイド・エリア・ネットワークへの有線又は無線の接続を利用するモノのインターネット(IoT)のデバイスにおけるもののようなモバイルの、ハンドヘルドの、又は埋め込み式のデバイスで使用するための、システム・オン・チップ(SoC)集積回路内に組み込まれた処理プラットフォームである。
【0010】
[0057] 一実施形態では、システム100は、サーバー・ベースのゲーム・プラットフォーム;ゲーム及びメディア・コンソールを含むゲーム・コンソール;モバイル・ゲーム・コンソール、ハンドヘルド・ゲーム・コンソール、又はオンライン・ゲーム・コンソールを含むこと、それらと結合すること、又はそれらの中に統合されることが可能である。幾つかの実施形態では、システム100は、移動電話、スマート・フォン、タブレット・コンピューティング・デバイス、又は、小さな内部記憶容量しか有しないラップトップのようなモバイル・インターネット接続デバイスの一部である。また、処理システム100は、スマート・ウォッチ・ウェアラブル・デバイスのようなウェアラブル・デバイス;現実世界の視覚、聴覚、又は触覚の体験を補うための、或いはその他の文字、音声、図形、ビデオ、ホログラフィック画像又はビデオ、又は触覚的なフィードバックを提供するための、視覚、聴覚、触覚の出力を提供するために拡張現実(AR)又は仮想現実(VR)機能で強化されたスマート・アイウェア又は衣類;その他の拡張現実(AR)デバイス;又はその他の仮想現実(VR)デバイスを含むこと、それらに結合すること、又はそれらに統合されることが可能である。幾つかの実施形態では、処理システム100は、テレビジョン又はセット・トップ・ボックス・デバイスを含むか、又はその一部である。一実施形態では、システム100は、バス、トラクター・トレーラー、自動車、モーター又は電動自転車、飛行機又はグライダ(又はそれらの任意の組み合わせ)などの自動運転を行う乗り物を含むこと、それらに結合すること、又はそれらに統合されることが可能である。自動運転を行う乗り物は、乗り物の周囲で感知された環境を処理するためにシステム100を使用することが可能である
[0058] 一部の実施形態では、1つ以上のプロセッサ102はそれぞれ、実行されるとシステム又はユーザー・ソフトウェアのための演算を実行する命令を処理するために1つ以上のプロセッサ・コア107を含む。本件における実施形態において、プロセッサは、コマンド/命令を効率的に処理するための専用ハードウェア回路と言及することが可能であり、プロセッサ回路と言及されてもよい。幾つかの実施形態では、1つ以上のプロセッサ・コア107のうちの少なくとも1つは、特定の命令セット109を処理するように構成される。幾つかの実施形態において、命令セット109は、複合命令セット演算(CISC)、縮小命令セット演算(RISC)、又は超長命令ワード(VLIW)による演算を促進することができる。1つ以上のプロセッサ・コア107は、他の命令セットのエミュレーションを促進するための命令を含むことが可能な異なる命令セット109を処理することができる。プロセッサ・コア107はまた、デジタル信号プロセッサ(DSP)などの他の処理デバイスを含んでもよい。
【0011】
[0059] 一部の実施形態では、プロセッサ102はキャッシュ・メモリ104を含む。アーキテクチャに応じて、プロセッサ102は、単一の内部キャッシュ又は複数レベルの内部キャッシュを有することが可能である。幾つかの実施形態では、キャッシュ・メモリは、プロセッサ102の様々な構成要素の間で共有される。幾つかの実施形態では、プロセッサ102はまた、外部キャッシュ(例えば、レベル3(L3)キャッシュ又は最終レベル・キャッシュ(LLC))(図示せず)も使用しており、これは既知のキャッシュ・コヒーレンシ技術を使用してプロセッサ・コア107内で共有されることが可能である。レジスタ・ファイル106は、プロセッサ102に追加的に含まれることが可能であり、異なるタイプのデータを格納するための異なるタイプのレジスタ(例えば、整数レジスタ、浮動小数点レジスタ、状態レジスタ、及び命令ポインタ・レジスタ)を含むことが可能である。幾つかのレジスタは汎用レジスタであってもよい一方、他のレジスタはプロセッサ102の設計に特有であってもよい。
【0012】
[0060] 一部の実施形態では、1つ以上のプロセッサ102は1つ以上のインターフェース・バス110に結合されて、アドレス、データ、又は制御信号などの通信信号を、プロセッサ102とシステム100内の他の構成要素との間で伝送する。インターフェース・バス110は、一実施形態では、ダイレクト・メディア・インターフェース(DMI)バスのバージョンのようなプロセッサ・バスであるとすることが可能である。しかしながら、プロセッサ・バスは、DMIバスに限定されず、1つ以上のペリフェラル・コンポーネント相互接続バス(例えば、PCI、PCIエクスプレス)、メモリ・バス、又はその他のタイプのインターフェース・バスを含んでもよい。一実施形態では、プロセッサ102は、集積メモリ・コントローラ116及びプラットフォーム・コントローラ・ハブ130を含む。メモリ・コントローラ116は、メモリ・デバイスとシステム100の他の構成要素との間の通信を促進する一方、プラットフォーム・コントローラ・ハブ(PCH)130は、ローカルI/OバスによりI/Oデバイスへの接続を提供する。
【0013】
[0061] メモリ・デバイス120は、ダイナミック・ランダム・アクセス・メモリ(DRAM)デバイス、スタティック・ランダム・アクセス・メモリ(SRAM)デバイス、フラッシュ・メモリ・デバイス、相変化メモリ・デバイス、又は、プロセス・メモリとして機能するのに適したパフォーマンスを有する何らかの他のメモリ・デバイスであるとすることが可能である。一実施形態では、メモリ・デバイス120は、1つ以上のプロセッサ102がアプリケーション又はプロセスを実行する場合に使用するために、データ122及び命令121を格納するように、システム100のシステム・メモリとして動作することが可能である。メモリ・コントローラ116はまた、プロセッサ102内の1つ以上のグラフィックス・プロセッサ108と通信して、グラフィックス及びメディア演算を実行することが可能なオプションの外部グラフィックス・プロセッサ118と結合する。幾つかの実施形態では、グラフィックス、メディア、及び/又は演算処理は、グラフィックス、メディア、又は演算処理の特化されたセットを実行するように構成されることが可能なコプロセッサであるアクセラレータ112によって支援されてもよい。例えば、一実施形態では、アクセラレータ112は、機械学習又は演算処理を最適化するために使用される行列乗算アクセラレータである。一実施形態では、アクセラレータ112は、グラフィックス・プロセッサ108と協調してレイ・トレーシング処理を実行するために使用されることが可能なレイ・トレーシング・アクセラレータである。一実施形態では、外部アクセラレータ119は、アクセラレータ112の代わりに、又はアクセラレータ112と協調して使用されることが可能である。
【0014】
[0062] 一部の実施形態では、ディスプレイ・デバイス111はプロセッサ102に接続されることが可能である。ディスプレイ・デバイス111は、モバイル電子デバイス、ラップトップ・デバイスにおけるもののような1つ以上の内部ディスプレイ・デバイス、又はディスプレイ・インターフェース(例えば、DisplayPortなど)を介して取り付けられた外部ディスプレイ・デバイスであるとすることが可能である。一実施形態では、ディスプレイ・デバイス111は、仮想現実(VR)アプリケーション又は拡張現実(AR)アプリケーションで使用するための立体ディスプレイ・デバイスのようなヘッド・マウント・ディスプレイ(HMD)であるとすることが可能である。
【0015】
[0063] 一部の実施形態では、プラットフォーム・コントローラ・ハブ130は、周辺機器が、高速I/Oバスを介してメモリ装置120及びプロセッサ102に接続することを可能にする。I/O周辺装置は、オーディオ・コントローラ146、ネットワーク・コントローラ134、ファームウェア・インターフェース128、無線トランシーバ126、タッチ・センサ125、データ記憶装置124(例えば、不揮発性メモリ、揮発性メモリ、ハード・ディスク・ドライブ、フラッシュ・メモリ、NAND、3D NAND、3D XPointなど)を含むが、これらに限定されない。データ記憶装置124は、記憶インターフェース(例えば、SATA)を介して、又はペリフェラル・コンポーネント・インターコネクト・バス(例えば、PCI、PCIエクスプレス)のような周辺バスを介して接続することができる。タッチ・センサ125は、タッチ・スクリーン・センサー、圧力センサー、又は指紋センサーを含むことができる。無線トランシーバ126は、Wi-Fiトランシーバ、ブルートゥース(登録商標)・トランシーバ、又は、3G、4G、5G、ロング・ターム・エボリューション(LTE)トランシーバのような移動ネットワーク・トランシーバであるとすることができる。ファームウェア・インターフェース128は、システム・ファームウェアとの通信を可能にし、例えば、ユニファイド拡張可能ファームウェア・インターフェース(UEFI)であるとすることが可能である。ネットワーク・コントローラ134は、有線ネットワークへのネットワーク接続を可能にすることができる。幾つかの実施形態では、ハイ・パフォーマンス・ネットワーク・コントローラ(図示せず)がインターフェース・バス110に結合している。オーディオ・コントローラ146は、一実施形態では、マルチ・チャネル・ハイ・デフィニジョン・オーディオ・コントローラである。一実施形態では、システム100は、レガシー(例えば、パーソナル・システム2(PS/2))デビスをシステムに結合するためのオプションのレガシーI/Oコントローラ140を含む。プラットフォーム・コントローラ・ハブ130はまた、1つ以上のユニバーサル・シリアル・バス(USB)コントローラ142に接続することが可能であり、キーボード及びマウス143の組み合わせ、カメラ144、又は他のUSB入力装置のような入力装置を接続することができる。
【0016】
[0064] 別様に構成された他のタイプのデータ処理システムが使用されてもよいので、図示されているシステム100は、例示的であり、限定的ではないことが理解されるであろう。例えば、プラットフォーム・コントローラ・ハブ130及びメモリ・コントローラ116のインスタンスは、外部グラフィックス・プロセッサ118のような個別の外部グラフィックス・プロセッサに統合されてもよい。一実施形態では、プラットフォーム・コントローラ・ハブ130及び/又はメモリ・コントローラ116は、1つ以上のプロセッサ102の外部にあってもよい。例えば、システム100は、外部メモリ・コントローラ116及びプラットフォーム・コントローラ・ハブ130を含むことが可能であり、これらは、プロセッサ102と通信するシステム・チップセット内のメモリ・コントローラ・ハブ及び周辺機器コントローラ・ハブとして構成することができる。
【0017】
[0065] 例えば、CPU、メモリ、及びその他の構成要素などの構成要素が配置される回路基板(スレッド)は、上昇する熱特性に対して設計される。幾つかの例では、プロセッサなどの処理構成要素は、スレッドのトップ側に配置されるが、DIMMなどのメモリ近辺は、スレッドのボトム側に配置される。この設計によって提供される空気流の増大の結果として、構成要素は、典型的なシステムにおける場合よりも高い周波数及び電力レベルで動作することが可能であり、それによってパフォーマンスを向上させることができる。更に、スレッドは、ラック内の電力及びデータ通信ケーブルと手放しに嵌合するように構成され、それによって、スレッドを迅速に取り外し、アップグレードし、再設置し、及び/又は交換する能力を高める。同様に、プロセッサ、アクセラレータ、メモリ、及びデータ記憶ドライブのような、スレッド上に配置される個々の構成要素は、互いの間隔が増加することに起因して、容易にアップグレードされるように構成される。例示的な実施形態では、構成要素は、更に、それらの真正性を証明するためのハードウェア認証機能を含む。
【0018】
[0066] データ・センターは、イーサネット及びオムニ・パス(Omni-Path)を含む複数の他のネットワーク・アーキテクチャをサポートする単一のネットワーク・アーキテクチャ(「ファブリック」)を利用することができる。スレッドは、典型的なツイスト・ペア・ケーブル(例えば、カテゴリ5、カテゴリ5e、カテゴリ6など)よりも高い帯域幅及び短い待ち時間を提供する光ファイバを介してスイッチに結合されることが可能である。高帯域幅、低遅延の相互接続及びネットワーク・アーキテクチャに起因して、データ・センターは、使用時に、メモリ、アクセラレータ(例えば、GPU、グラフィックス・アクセラレータ、FPGA、ASIC、ニューラル・ネットワーク、及び/又は人工知能アクセラレータ等)、及び、物理的に分解されたデータ記憶ドライブのようなリソースをプールし、必要に応じて計算リソース(例えば、プロセッサ)にそれらを提供し、その計算リソースが、あたかもローカルであるかのように、プールされたリソースにアクセスすることを可能にする。
【0019】
[0067] 電源供給又は電源は、電圧及び/又は電流を、システム100又は本願で説明される任意の構成要素又はシステムに提供することができる。一例では、電源は、壁コンセントに差し込むためのAC-DC(交流-直流)アダプタを含む。このようなAC電力は、再生可能エネルギ(例えば、ソーラー・パワー)電力源であるとすることが可能である。一例では、電源は、外部AC-DCコンバータのようなDC電源を含む。一例では、電力源又は電源供給は、充電フィールドの近傍を介して充電するための無線充電ハードウェアを含む。一例では、電源は、内部バッテリ、交流電源、運動に基づく電源、ソーラー・パワー電源、又は燃料電池電源を含むことが可能である
[0068]
図2A-2Dは、本願で説明する実施形態によって提供されるコンピューティング・システム及びグラフィックス・プロセッサを示す。本願の何らかの他の図中の要素と同じ参照番号(又は名称)を有する
図2A-2Dの要素は、本願の他の箇所で説明されているものと同様の方法な何らかの方法で動作又は機能することが可能であるが、そのようには限定されない。
【0020】
[0069]
図2Aは、1つ又は複数のプロセッサ・コア202A-202N、統合メモリ・コントローラ214、及び統合グラフィックス・プロセッサ208を有するプロセッサ200の実施形態のブロック図である。プロセッサ200は、破線ボックスによって表現される追加のコア202Nまでの追加のコアを含み、それを含むことが可能である。プロセッサ・コア202A-202Nの各々は、1つ以上の内部キャッシュ・ユニット204A-204Nを含む。幾つかの実施形態では、各プロセッサ・コアはまた、1つ以上の共用キャッシュ・ユニット206へのアクセスを有する。内部キャッシュ・ユニット204A-204N及び共用キャッシュ・ユニット206は、プロセッサ200内のキャッシュ・メモリ階層を表現する。キャッシュ・メモリ階層は、各プロセッサ・コア内の命令及びデータ・キャッシュの少なくとも1つのレベルと、レベル2(L2)、レベル3(L3)、レベル4(L4)などの共有される中間レベルのキャッシュの1つ以上のレベルと、他のキャッシュ・レベルとを含んでもよく、ここで、外部メモリより前のキャッシュの最高レベルはLLCとして分類される。幾つかの実施形態では、キャッシュ・コヒーレンス・ロジックは、種々のキャッシュ・ユニット206と204A-204Nとの間のコヒーレンス性を維持する。
【0021】
[0070] 一部の実施形態では、プロセッサ200は、1つ以上のバス・コントローラ・ユニット216、及びシステム・エージェント・コア210のセットを含んでもよい。1つ又は複数のバス・コントローラ・ユニット216は、1つ又は複数のPCI又はPCIエクスプレス・バスのような一組のペリフェラル・バスを管理する。システム・エージェント・コア210は、様々なプロセッサ・構成要素の管理機能を提供する。幾つかの実施形態では、システム・エージェント・コア210は、様々な外部メモリ・デバイス(図示せず)へのアクセスを管理するために、1つ以上の集積メモリ・コントローラ214を含む。
【0022】
[0071] 幾つかの実施形態では、1つ以上のプロセッサ・コア202A-202Nは、同時マルチ・スレッディングのためのサポートを含む。このような実施形態では、システム・エージェント・コア210は、マルチ・スレッド処理中にコア202A-202Nを調整及び動作させるための構成要素を含む。システム・エージェント・コア210は、更に、プロセッサ・コア202A-202N及びグラフィックス・プロセッサ208の電力状態を調整するためのロジック及び構成要素を含む電力制御ユニット(PCU)を含んでもよい。
【0023】
[0072] 一部の実施形態では、プロセッサ200は、グラフィックス処理動作を実行するために、グラフィックス・プロセッサ208を追加的に含む。幾つかの実施形態では、グラフィックス・プロセッサ208は、1つ以上の集積メモリ・コントローラ214を含む、一組の共有キャッシュ・ユニット206及びシステム・エージェント・コア210と結合する。幾つかの実施形態では、システム・エージェント・コア210はまた、グラフィックス・プロセッサ出力を、1つ以上の結合されたディスプレイに対して駆動するディスプレイ・コントローラ211を含む。幾つかの実施形態において、ディスプレイ・コントローラ211はまた、少なくとも1つの相互接続を介してグラフィックス・プロセッサに結合された別個のモジュールであってもよく、又はグラフィックス・プロセッサ208内に統合されてもよい。
【0024】
[0073] 幾つかの実施形態では、リング・ベースの相互接続ユニット212が、プロセッサ200の内部構成要素を結合するために使用される。しかしながら、別の相互接続ユニット、例えばポイント・ツー・ポイント相互接続、スイッチド相互接続、又は当技術分野で周知の技術を含む他の技術が使用されてもよい。幾つかの実施形態では、グラフィックス・プロセッサ208は、I/Oリンク213を介してリング相互接続212と結合する。
【0025】
[0074] 例示的なI/Oリンク213は、種々のプロセッサ構成要素とeDRAMモジュールなどの高性能埋め込みメモリ・モジュール218との間の通信を促進するオンパッケージI/O相互接続を含む、複数の種類のI/O相互接続のうちの少なくとも1つを表現する。幾つかの実施形態では、プロセッサ・コア202A-202N及びグラフィックス・プロセッサ208のそれぞれは、共有される最終レベル・キャッシュとして埋め込みメモリ・モジュール218を使用することができる。
【0026】
[0075] 幾つかの実施形態では、プロセッサ・コア202A-202Nは、同一の命令セット・アーキテクチャを実行するホモジーニアス・コアである。別の実施形態では、プロセッサ・コア202A-202Nは、命令セット・アーキテクチャ(ISA)に関してヘテロジニアスであり、プロセッサ・コア202A-202Nのうちの1つ以上は、第1命令セットを実行し、他のコアのうちの少なくとも1つは、第1命令セットのサブセット又は異なる命令セットを実行する。一実施形態では、プロセッサ・コア202A-202Nは、マイクロアーキテクチャに関してヘテロジニアスであり、比較的高い電力消費を有する1つ以上のコアは、より低い電力消費を有する1つ以上の電力コアと結合する。一実施形態では、プロセッサ・コア202A-202Nは、計算能力に関してヘテロジニアスである。更に、プロセッサ200は、他の構成要素に加えて、図示の構成要素を有する1つ以上のチップ又はSoC集積回路として実装することができる。
【0027】
[0076]
図2Bは、本願で説明される幾つかの実施形態によるグラフィックス・プロセッサ・コア219のハードウェア・ロジックのブロック図である。本願の任意の他の図面の要素と同じ参照番号(又は名称)を有する
図2Bの要素は、本願の他の箇所に記載されるものと同様の何らかの方法で動作又は機能することが可能であるが、それに限定されない。グラフィックス・プロセッサ・コア219は、しばしばコア・スライスと呼ばれることもあり、モジュラ・グラフィックス・プロセッサ内の1つ又は複数のグラフィックス・コアであるとすることが可能である。グラフィックス・プロセッサ・コア219は、1つのグラフィックス・コア・スライスの例であり、本願で説明するようなグラフィックス・プロセッサは、ターゲット・パワー及びパフォーマンス・エンベロープに基づく複数のグラフィックス・コア・スライスを含んでもよい。各グラフィックス・プロセッサ・コア219は、サブ・スライスとも呼ばれる複数のサブ・コア221A-221Fと結合された固定機能ブロック230を含むことが可能であり、固定機能ブロックは、汎用及び固定機能ロジックのモジュラ・ブロックを含む。
【0028】
[0077] 幾つかの実施形態では、固定機能ブロック230は、グラフィックス・プロセッサ・コア219内の全てのサブ・コアによって、例えば、低パフォーマンス及び/又は低電力グラフィックス・プロセッサの実装において共有されることが可能なジオメトリ/固定機能パイプライン231を含む。様々な実施形態では、ジオメトリ/固定機能パイプライン231は、ビデオ・フロント・エンド・ユニット、スレッド・スパウナ(spawner)及びスレッド・ディスパッチャ、及びユニファイド・リターン・バッファを管理するユニファイド・リターン・バッファ・マネージャ(例えば、後述するような
図4のユニファイド・リターン・バッファ418)、3D固定機能パイプライン(例えば、
図3A及び
図4のような3Dパイプライン312)を含む。
【0029】
[0078] 一実施形態では、固定機能ブロック230は、グラフィックスSoCインターフェース232、グラフィックス・マイクロコントローラ233、及びメディア・パイプライン234も含む。グラフィックスSoCインターフェース232は、チップ集積回路上のシステム内のグラフィックス・プロセッサ・コア219と他のプロセッサ・コアとの間のインターフェースを提供する。グラフィックス・マイクロコントローラ233は、スレッド・ディスパッチ、スケジューリング、及びプリエンプションを含むグラフィックス・プロセッサ・コア219の様々な機能を管理するように構成することが可能なプログラマブル・サブ・プロセッサである。メディア・パイプライン234(例えば、
図3A及び
図4のメディア・パイプライン316)は、画像及びビデオ・データを含むマルチ・メディア・データの復号化、符号化、前処理、及び/又は後処理を促進するロジックを含む。メディア・パイプライン234は、サブ・コア221-221F内の演算又はサンプリング・ロジックのための要求を介してメディア演算を実行する。
【0030】
[0079] 一実施形態では、SoCインターフェース232は、グラフィックス・プロセッサ・コア219が、共有最終レベル・キャッシュ・メモリ、システムRAM、及び/又は埋込みオンチップ又はオンパッケージDRAMなどのメモリ階層要素を含む、SoC内の汎用アプリケーション・プロセッサ・コア及び/又はその他の構成要素と通信することを可能にする。また、SoCインターフェース232は、カメラ撮像パイプラインのようなSoC内の固定機能デバイスとの通信を可能にし、SoC内のCPUとグラフィックス・プロセッサ・コア219との間で共有されることが可能なグローバル・メモリ・アトミクスの使用を可能にし、及び/又は実施する。また、SoCインターフェース232は、グラフィックス・プロセッサ・コア219のための電力管理制御を実装し、グラフィックス・コア219のクロック・ドメインとSoC内の他のクロック・ドメインとの間のインターフェースを可能にすることができる。一実施形態では、SoCインターフェース232は、グラフィックス・プロセッサ内の1つ以上のグラフィックス・コアの各々にコマンド及び命令を提供するように構成されたコマンド・ストリーマ及びグローバル・スレッド・ディスパッチャからのコマンド・バッファの受信を可能にする。コマンド及び命令は、メディア演算が実行される場合にはメディア・パイプライン234へ、グラフィックス処理演算が実行される場合にはジオメトリ&固定機能パイプラインへ(例えば、ジオメトリ&固定機能パイプライン231、ジオメトリ&固定機能パイプライン237へ)ディスパッチされることが可能である。
【0031】
[0080] グラフィックス・マイクロコントローラ233は、グラフィックス・プロセッサ・コア219に対する様々なスケジューリング及び管理タスクを実行するように構成されることが可能である。一実施形態では、グラフィックス・マイクロコントローラ233は、サブ・コア221A-221F内の実行ユニット(EU)アレイ222A-222F、224A-224F内の種々のグラフィックス並列エンジンにおけるグラフィックス及び/又は演算ワークロード・スケジューリングを実行することができる。このスケジューリング・モデルでは、グラフィックス・プロセッサ・コア219を含むSoCのCPUコア上で実行されるホスト・ソフトウェアは、適切なグラフィックス・エンジンでスケジューリング動作を起動する複数のグラフィックス・プロセッサ・ドアベルのうちの1つにワークロードをサブミットすることができる。スケジューリング動作は、次に動作させるワークロードを決定すること、コマンド・ストリーマにワークロードをサブミットすること、エンジンで実行している既存のワークロードをプリエンプトすること、ワークロードの進行をモニタリングすること、及び、ワークロードが完了したときにホスト・ソフトウェアに通知すること、を含む。一実施形態では、グラフィックス・マイクロコントローラ233はまた、グラフィックス・プロセッサ・コア219の低電力又はアイドル状態を促進することが可能であり、システムのオペレーティング・システム及び/又はグラフィックス・ドライバ・ソフトウェアから独立して、低電力状態遷移にわたってグラフィックス・プロセッサ・コア219内のレジスタを保存及び復元する能力を、グラフィックス・プロセッサ・コア219に提供することができる。
【0032】
[0081] グラフィックス・プロセッサ・コア219は、図示のサブ・コア221A-221Fより多くても少なくてもよく、N個に及ぶモジュール式サブ・コアを有する可能性がある。N個のサブ・コアの各セットについて、グラフィックス・プロセッサ・コア219はまた、共有機能ロジック235、共有及び/又はキャッシュ・メモリ236、ジオメトリ/固定機能パイプライン237、並びに、種々のグラフィックスを加速し及び演算処理を行うための追加的な固定機能ロジック238も含むことができる。共有機能ロジック235は、グラフィックス・プロセッサ・コア219内のN個のサブ・コア各々によって共有されることが可能な
図4の共有機能ロジック420に関連する論理ユニット(例えば、サンプラ、数学、及び/又はスレッド間通信ロジック)を含むことができる。共有及び/又はキャッシュ・メモリ236は、グラフィックス・プロセッサ・コア219内のN個のサブ・コア221A-221Fのセットのための最終レベルのキャッシュであるとすることが可能であり、複数のサブ・コアによってアクセス可能な共有メモリとして機能することも可能である。ジオメトリ/固定機能パイプライン237は、固定機能ブロック230内のジオメトリ/固定機能パイプライン231の代わりに包含されることが可能であり、同一又は類似の論理ユニットを含むことができる。
【0033】
[0082] 一実施形態では、グラフィックス・プロセッサ・コア219は、グラフィックス・プロセッサ・コア219によって使用される種々の固定機能加速ロジックを含むことが可能な追加の固定機能ロジック238を含む。一実施形態では、追加の固定機能ロジック238は、ポジション・オンリー・シェーディングで使用するための追加の幾何学的パイプラインを含む。ポジション・オンリー・シェーディングでは、2つのジオメトリ・パイプラインが存在し、ジオメトリ/固定機能パイプライン238、231内のフル(full)ジオメトリ・パイプラインと、追加の固定機能ロジック238内に含まれる可能性がある追加のジオメトリ・パイプラインであるカル(cull)パイプラインとである。一実施形態では、カル・パイプラインは、フル・ジオメトリ・パイプラインのトリミング・ダウンされたバージョンである。フル・パイプライン及びカル・パイプラインは、同一アプリケーションの異なるインスタンスを実行することができ、各インスタンスは別々のコンテキストを有する。ポジション・オンリー・シェーディングは、廃棄された三角形の長期のカル・ラン(long cull runs)を隠すことができ、場合によっては、シェーディングがより早期に完了することを可能にする。例えば一実施形態では、追加の固定機能ロジック238内のカル・パイプライン・ロジックは、メイン・アプリケーションと並列的にポジション・シェーダーを実行することができ、一般に、カル・パイプラインは、ピクセルのフレーム・バッファへのラスタライゼーション及びレンダリングを行うことなく、頂点の位置属性のみをフェッチし及びシェーディングするので、フル・パイプラインよりも速く、重要な結果を生成する。カル・パイプラインは、生成されたクリティカルな結果を使用して、それらの三角形が選別されるかどうかによらず、全ての三角形に対する視認情報を演算することができる。フル・パイプライン(この例では、再生パイプラインと言及されてもよい)は、最終的にラスタライゼーションの段階に渡される可視三角形のみを遮蔽するために、選別された三角形をスキップするように、視認情報を使うことができる。
【0034】
[0083] 一実施形態では、追加の固定機能ロジック238は、機械学習トレーニング又は推論のための最適化を含む実装のために、固定機能行列乗算ロジックのような機械学習加速ロジックを含むことも可能である。
【0035】
[0084] 各グラフィックス・サブ・コア221A-221F内には一組の実行リソースが含まれ、それは、グラフィックス・パイプライン、メディア・パイプライン、又はシェーダー・プログラムによる要求に応じて、グラフィックス、メディア、及び演算処理を実行するために使用されることが可能である。グラフィックス・サブ・コア221A-221Fは、複数のEUアレイ222A-222F、224A-224F、スレッド・ディスパッチ及びスレッド間通信(TD/IC)ロジック223A-223F、3D(例えば、テクスチャ)サンプラ225A-225F、メディア・サンプラ206A-206F、シェーダー・プロセッサ227A-227F、及び共有ローカル・メモリ(SLM)228A-228Fを含む。EUアレイ222A-222F、224A-224Fは、各々、複数の実行ユニットを含み、これらは、グラフィックス、メディア、又は計算の演算のサービスにおいて、グラフィックス、メディア、又は計算のシェーダー・プログラムを含む浮動小数点及び整数/固定小数点論理演算を実行することが可能な汎用のグラフィックス処理ユニットである。TD/ICロジック223A-223Fは、サブ・コア内の実行ユニットに対するローカル・スレッド・ディスパッチ及びスレッド制御演算を実行し、サブ・コアの実行ユニットで実行されるスレッド間の通信を促進する。3Dサンプラ225A-225Fは、テクスチャ又はその他の3Dグラフィックス関連データをメモリに読み込むことができる。3Dサンプラは、設定されたサンプル状態と、所与のテクスチャに関連するテクスチャ・フォーマットとに基づいて、テクスチャ・データを別様に読み込むことができる。メディア・サンプラ206A-206Fは、メディア・データに関連するタイプ及びフォーマットに基づいて、同様な読み込み処理を実行することができる。一実施形態では、各グラフィックス・サブ・コア221A-221Fは、代替的に、統一された3D及びメディア・サンプラを含むことができる。各サブ・コア221A-221F内の実行ユニットで実行されるスレッドは、各サブ・コア内の共有ローカル・メモリ228A-228Fを使用して、スレッド・グループ内で実行されるスレッドが、オンチップ・メモリの共通プールを使用して実行できるようにすることができる。
【0036】
[0085]
図2Cは、マルチ・コア・グループ240A-240Nに配置されたグラフィックス処理リソースの専用セットを含むグラフィックス処理ユニット(GPU)239を示す。単一のマルチ・コア・グループ240Aのみの詳細が提供されているが、他のマルチ・コア・グループ240B-240Nが、同じ又は類似のグラフィックス処理リソースのセットを備える可能性があることは理解されるであろう。
【0037】
[0086] 図示されているように、マルチ・コア・グループ240Aは、一組のグラフィックス・コア243、一組のテンソル・コア244、及び一組のレイ・トレーシング・コア245を含む可能性がある。スケジューラ/ディスパッチャ241は、種々のコア243、244、245上で実行するためにグラフィックス・スレッドをスケジューリングし、ディスパッチする。一組のレジスタ・ファイル242は、グラフィックス・スレッドを実行する場合に、コア243、244、245によって使用されるオペランド値を記憶する。これらは、例えば、整数値を記憶するための整数レジスタ、浮動小数点値を記憶するための浮動小数点レジスタ、パックされたデータ要素(整数及び/又は浮動小数点データ要素)を記憶するためのベクトル・レジスタ、及び、テンソル/行列の値を記憶するためのタイル・レジスタを含んでもよい。一実施形態では、タイル・レジスタは、ベクトル・レジスタの組み合わせられたセットとして実装される。
【0038】
[0087] 1つ以上の結合レベル1(L1)キャッシュ及び共有メモリ・ユニット247は、テクスチャ・データ、頂点データ、ピクセル・データ、光線データ、境界ボリューム・データなどのグラフィックス・データを、各マルチ・コア・グループ240A内にローカルに記憶する。1つ以上のテクスチャ・ユニット247を使用して、テクスチャ・マッピング及びサンプリングなどのテクスチャリング演算を実行することもできる。マルチ・コア・グループ240A-240Nの全て又はサブセットによって共有されるレベル2(L2)キャッシュ253は、複数の同時グラフィックス・スレッドのためのグラフィックス・データ及び/又は命令を格納する。図示のように、L2キャッシュ253は、複数のマルチ・コア・グループ240A-240Nにわたって共有されてもよい。1つ以上のメモリ・コントローラ248は、GPU 239を、システム・メモリ(例えば、DRAM)及び/又は専用グラフィックス・メモリ(例えば、GDDR6メモリ)である可能性があるメモリ249に結合する。
【0039】
[0088] 入力/出力(I/O)回路250は、GPU239を、デジタル信号プロセッサ(DSP)、ネットワーク・コントローラ、又はユーザー入力装置のような1つ以上の入出力装置252に結合する。オンチップ相互接続を使用して、I/Oデバイス252をGPU239及びメモリ249に結合することができる。I/O回路250の1つ以上のI/Oメモリ管理ユニット(IOMMU)251は、I/O装置252を、システム・メモリ249に直接的に結合する。一実施形態では、IOMMU251は、仮想アドレスをシステム・メモリ249内の物理アドレスにマッピングするために、ページ・テーブルの複数のセットを管理する。この実施形態では、I/O装置252、CPU246、及びGPU239は、同じ仮想アドレス空間を共有してもよい。
【0040】
[0089] ある実装では、IOMMU251は仮想化をサポートしている。この場合、ゲスト/グラフィックスの仮想アドレスを、ゲスト/グラフィックスの物理アドレスにマッピングするためのページ・テーブルの第1セットと、ゲスト/グラフィックスの物理アドレスを、システム/ホストの物理アドレスに(例えば、システム・メモリ249内に)マッピングするためのページ・テーブルの第2セットとを管理することができる。ページ・テーブルの第1及び第2セット各々のベース・アドレスは、制御レジスタに記憶され、コンテキスト・スイッチで交換されることが可能である(例えば、その結果、新しいコンテキストがページ・テーブルの関連するセットへのアクセスに提供される)。
図2Cには示されていないが、コア243、244、245、及び/又はマルチ・コア・グループ240A-240Nの各々は、ゲスト仮想からゲスト物理への変換、ゲスト物理からゲスト仮想への変換、及びゲスト仮想からホスト物理への変換をキャッシュするための変換ルックアサイド・バッファ(TLB)を含むことが可能である。
【0041】
[0090] 一実施形態では、CPU246、GPU239、及びI/Oデバイス252は、単一の半導体チップ及び/又はチップ・パッケージに集積される。図示されたメモリ249は、同じチップ上に集積されてもよいし、或いはオフチップ・インターフェースを介してメモリ・コントローラ248に結合されてもよい。ある実装では、メモリ249は、他の物理システム・レベルのメモリと同じ仮想アドレス空間を共有するGDDR6メモリを含むが、本発明の基礎となる原理は、この特定の実装に限定されない。
【0042】
[0091] 一実施形態では、テンソル・コア244は、ディープ・ラーニング演算を実行するために使用される基本的な演算処理である行列演算を実行するように、特別に設計された複数の実行ユニットを含む。例えば、同時行列乗算演算は、ニューラル・ネットワーク訓練及び推論のために使用されることが可能である。テンソル・コア244は、単精度浮動小数点(例えば、32ビット)、半精度浮動小数点(例えば、16ビット)、整数ワード(16ビット)、バイト(8ビット)、及び半バイト(4ビット)を含む種々のオペランド精度を使用して行列処理を実行することができる。一実施形態では、ニューラル・ネットワークの実装は、複数のフレームからの詳細を潜在的に組み合わせて、レンダリングされた各シーンの特徴を抽出し、高品質の最終画像を構築する。
【0043】
[0092] ディープ・ラーニングの実装では、並列行列乗算作業はテンソル・コア244での実行のためにスケジューリングされてもよい。ニューラル・ネットワークのトレーニングは、特に、かなりの数の行列ドット積演算を必要とする。N×N×N行列乗算の内積公式を処理するために、テンソル・コア244は、少なくともN個のドット積処理要素を含む可能性がある。行列乗算が始まる前に、1つの行列全体がタイル・レジスタにロードされ、第2行列の少なくとも1つの列が、Nサイクルの各サイクルでロードされる。サイクル毎に、処理されたN個のドット積が存在する。
【0044】
[0093] 行列要素は、16ビット・ワード、8ビット・バイト(例えばINT8)、4ビット半バイト(例えばINT4)を含む、特定の実装に応じて異なる精度で格納されることが可能である。様々なワークロード(例えば、バイト及び半バイトへの量子化に耐えることが可能な推論ワークロードなど)に対して最も効率的な精度が使用されることを保証するために、異なる精度のモードがテンソル・コア244のために指定されてもよい。
【0045】
[0094] 一実施形態では、レイ・トレーシング・コア245は、リアルタイム・レイ・トレーシング及び非リアルタイム・レイ・トレーシング実装の両方のためのレイ・トレーシング演算を加速する。特に、レイ・トレーシング・コア245は、境界ボリューム階層(BVH)を使用してレイ・トラバースを実行し、BVHボリュームで囲まれた光線とプリミティブとの間の交わりを識別するためのレイ・トラバース/交わり回路を含む。レイ・トレーシング・コア245はまた、深度テスト及び選別を(例えば、Zバッファ又は同様の構成を使用して)実行するための回路を含んでもよい。一実施形態では、レイ・トレーシング・コア245は、本件で説明される画像ノイズ除去技術と協調して横断及び交差演算を行い、そのうちの少なくとも一部はテンソル・コア244で実行されてもよい。例えば、一実施形態では、テンソル・コア244は、レイ・トレーシング・コア245によって生成されたフレームのノイズ除去を実行するために、ディープ・ラーニング・ニューラル・ネットワークを実装する。しかしながら、CPU246、グラフィックス・コア243、及び/又はレイ・トレーシング・コア245は、ノイズ除去及び/又はディープ・ラーニング・アルゴリズムの全部又は一部を実装することもできる。
【0046】
[0095] 更に、上述のように、GPU239がネットワーク又は高速相互接続を介して他のコンピューティング・デバイスに結合されたコンピューティング・デバイス内にある状況において、ノイズ除去の分散アプローチが使用されてもよい。この実施形態では、相互接続されたコンピューティング・デバイスは、ニューラル・ネットワーク学習/訓練データを共有して、異なるタイプの画像フレーム及び/又は異なるグラフィックス・アプリケーションに対してノイズ除去を実行するためにシステム全体が学習する速度を改善する。
【0047】
[0096] 一実施形態では、レイ・トレーシング・コア245は、全てのBVHトラバース及び光線-プリミティブ交差を処理し、グラフィックス・コア243が、光線当たり数千の命令でオーバーロードに陥るのを防ぐ。一実施形態では、各々のレイ・トレーシング・コア245は、境界ボックス・テスト(例えば、横断動作)を実施するための特殊回路の第1セットと、光線-三角形交差テスト(例えば、横切っている交差光)を実行するための特殊回路の第2セットとを含む。従って、一実施形態では、マルチ・コア・グループ240Aは、単に光線プローブを開始することができ、レイ・トレーシング・コア245は、独立して光線の横断及び交差を実行し、ヒット・データ(例えば、ヒット、ノー・ヒット、マルチ・ヒットなど)をスレッド・コンテキストに返す。他のコア243、244は、レイ・トレーシング・コア245が横断及び交差演算を実行する一方で、他のグラフィックスを実行するか又は他の作業を演算するために解放される。
【0048】
[0097] 一実施形態では、各々のレイ・トレーシング・コア245は、BVHテスト演算を実行するための横断ユニットと、光線-プリミティブ交差テストを実行する交差ユニットとを含む。交差ユニットは「ヒット」、「ノー・ヒット」、又は「マルチ・ヒット」の応答を生成し、それを適切なスレッドに提供する。横断及び交差演算の間に、他のコア(例えば、グラフィックス・コア243及びテンソル・コア244)の実行リソースは、他の形態のグラフィックス作業を実行するために解放される。
【0049】
[0098] 以下に説明される特定の一実施形態では、作業がグラフィックス・コア243とレイ・トレーシング・コア245との間で分配されるハイブリッド・ラスタライゼーション/レイ・トレーシング・アプローチが使用される。
【0050】
[0099] 一実施形態では、レイ・トレーシング・コア245(及び/又は他のコア243、244)は、DispatchRaysコマンドを含むマイクロソフト社のDirectX Ray Tracing(DXR)、及び、光線生成、最近接ヒット、任意ヒット、及びミス・シェーダーのようなレイ・トレーシング命令セットのためのハードウェア・サポートを含み、それは各オブジェクトに対するシェーダー及びテクスチャのセットの割り当てを可能にする。レイ・トレーシング・コア245、グラフィックス・コア243、及びテンソル・コア244によってサポートされ得る別のレイ・トレーシング・プラットフォームは、Vulkan1.1.85である。しかしながら、本件の実施形態の基本原理は、特定のレイ・トレーシングISAに限定されない。
【0051】
[0100] 一般に、種々のコア245、244、243は、光線生成、最近接ヒット、任意ヒット、光線-プリミティブ交差、プリミティブ及び階層関連の境界ボックス構成、ミス、ビジット、及び例外、に関する命令/機能を含むレイ・トレーシング命令セットをサポートすることができる。より具体的には、一実施形態は以下の機能を実行するためのレイ・トレーシング命令を含む:
[0101] 光線生成 - 光線生成命令は、各ピクセル、サンプル、又は他のユーザー定義の作業割り当てに対して実行されることが可能である。
【0052】
[0102] 最近接ヒット - 最近接ヒット命令は、シーン内でプリミティブを有する光線の最も近い交点を発見するために実行されることが可能である。
【0053】
[0103] 任意ヒット - 任意ヒット命令は、シーン内の光線とプリミティブとの間の複数の交点を識別し、潜在的に新しい最も近い交点を識別する。
【0054】
[0104] 交差 - 交差命令は、光線-プリミティブ交差テストを行い、結果を出力する。
【0055】
[0105] プリミティブ関連境界ボックス構成 - この命令は、(例えば、新しいBVH又は他の加速データ構造を構築する場合に)所与のプリミティブ又はプリミティブのグループ周囲に境界ボックスを構築する。
【0056】
[0106] ミス - 光線がシーン内の全てのジオメトリ、又はシーンの特定の領域にミスヒットであることを示す。
【0057】
[0107] ビジット - 光線が横切ることになる子ボリュームを示す。
【0058】
[0107]
例外 - 様々なタイプの例外処理を含む(様々なエラー条件に対して呼び出される)
[0109]
図2Dは、本願で説明される実施形態に従って、グラフィックス・プロセッサ及び/又はコンピュータ・アクセラレータとして構成することが可能な汎用グラフィックス処理ユニット(GPGPU)270のブロック図である。GPGPU270は、1つ以上のシステム及び/又はメモリ・バスを介して、ホスト・プロセッサ(例えば、1つ以上のCPU246)及びメモリ271、272と相互接続することができる。一実施形態では、メモリ271は、1つ以上のCPU246と共有される可能性があるシステム・メモリであり、メモリ272は、GPGPU270専用のデバイス・メモリである。一実施形態では、GPGPU270及びデバイス・メモリ272内の構成要素は、1つ又は複数のCPU246にアクセスすることが可能なメモリ・アドレスにマッピングされてもよい。メモリ271及び272へのアクセスは、メモリ・コントローラ268により促進されることが可能である。一実施形態では、メモリ・コントローラ268は、内部ダイレクト・メモリ・アクセス(DMA)コントローラ269を含むか、或いは動作を実行するためのロジックを含むことが可能であり、そうでなければその動作はDMAコントローラによって実行されるであろう。
【0059】
[0110] GPGPU270は、L2キャッシュ253、L1キャッシュ254、命令キャッシュ255、及び共有メモリ256を含む複数のキャッシュ・メモリを含み、そのうちの少なくとも一部がキャッシュ・メモリとして区分けされてもよい。GPGPU270はまた、複数の演算ユニット260A-260Nを含む。各コンピュータ・ユニット260A-260Nは、ベクトル・レジスタ261、スカラー・レジスタ262、ベクトル論理ユニット263、及びスカラー論理ユニット264のセットを含む。演算ユニット260A-260Nはまた、ローカル共有メモリ265及びプログラム・カウンタ266を含むことも可能である。演算ユニット260A-260Nは、コンスタント・キャッシュ267と結合することが可能であり、コンスタント・キャッシュ267は、GPGPU270上で実行されるカーネル又はシェーダー・プログラムの実行中に変化しないデータである定数データを格納するために使用されることが可能である。一実施形態では、コンスタント・キャッシュ267は、スカラ・データ・キャッシュであり、キャッシュされたデータは、スカラー・レジスタ262に直接的にフェッチされることが可能である。
【0060】
[0111] 動作中、1つ以上のCPU(複数可)246は、アクセス可能なアドレス空間にマッピングされているGPGPU270内のレジスタ又はメモリに、コマンドを書き込むことができる。コマンド・プロセッサ257は、レジスタ又はメモリからコマンドを読み込み、これらのコマンドがGPGPU270内でどのように処理されるかを決定することができる。次いで、スレッド・ディスパッチャ258は、スレッドを演算ユニット260A-260Nにディスパッチして、これらのコマンドを実行することができる。各演算ユニット260A-260Nは、他の演算ユニットとは独立してスレッドを実行することができる。更に、各々の演算ユニット260A-260Nは、条件付きの計算のために独立して構成されることが可能であり、計算結果をメモリに条件付きで出力することができる。コマンド・プロセッサ257は、サブミットされたコマンドが完了した場合に、1つ以上のCPU246を中断することができる。
【0061】
[0112]
図3A-3Cは、本願で説明する実施形態によって提供される追加のグラフィックス・プロセッサ及び演算アクセラレータ・アーキテクチャのブロック図を示す。本願の他の任意の図の要素と同じ参照番号(又は名称)を有する
図3A-3Cの要素は、本願のどこかで説明されているものと同様の方法で動作又は機能することが可能であるが、そのようには限定されない。
【0062】
[0113]
図3Aは、グラフィックス・プロセッサ300のブロック図であり、これは、別個のグラフィックス処理ユニットであってもよいし、又は、複数の処理コアと或いはメモリ・デバイス又はネットワーク・インターフェースなどの他の半導体デバイスと一体化されたグラフィックス・プロセッサであってもよいが、これらに限定されない。幾つかの実施形態では、グラフィックス・プロセッサは、グラフィックス・プロセッサ上のレジスタに対するメモリ・マップI/Oインターフェースを介して、及びプロセッサ・メモリ内に配置されたコマンドにより通信する。幾つかの実施形態では、グラフィックス・プロセッサ300は、メモリにアクセスするためのメモリ・インターフェース314を含む。メモリ・インターフェース314は、ローカル・メモリ、1つ以上の内部キャッシュ、1つ以上の共有外部キャッシュ、及び/又はシステム・メモリへのインターフェースであるとすることができる。
【0063】
[0114] 一部の実施形態では、グラフィックス・プロセッサ300は、ディスプレイ・デバイス318に対して表示出力データを駆動するディスプレイ・コントローラ302も含む。ディスプレイ・コントローラ302は、ビデオ又はユーザー・インターフェース要素の複数層の表示及び構成のための1つ以上のオーバーレイ・プレーンのためのハードウェアを含む。ディスプレイ・デバイス318は、内部又は外部ディスプレイ・デバイスであるとすることが可能である。一実施形態では、ディスプレイ・デバイス318は、仮想現実(VR)ディスプレイ・デバイス又は拡張現実(AR)ディスプレイ・デバイスのようなヘッド・マウント・ディスプレイ・デバイスである。幾つかの実施形態において、グラフィックス・プロセッサ300は、1つ以上のメディア・エンコーディング・フォーマットへ、から、又は間で、メディアをエンコード、デコード、又はトランスコードするビデオ・コーデック・エンジン306を含み、フォーマットは、MPEG-2のようなMPEG(Moving Picture Experts Group)フォーマット、 H.264/MPEG-4 AVCのようなAVC(Advanced Video Coding)フォーマット、H.265/HEVC、AOMedia(Alliance for Open Media)VP8, VP9,並びに、SMPTE(the Society of Motion Picture & Television Engineers)421M/VC-1、そして、JPEG及びMJPEG(Motion JPEG)のようなJPEG(Joint Photographic Experts Group (JPEG))フォーマットを含むがこれらに限定されない。
【0064】
[0115] 一部の実施形態では、グラフィックス・プロセッサ300は、例えばビット境界ブロック転送を含む2次元(2D)ラスタライザ演算を実行するためにブロック画像転送(BLIT)エンジン304を含む。しかしながら、一実施形態では、2Dグラフィックス演算は、グラフィックス処理エンジン(GPE)310の1つ以上の構成要素を使用して実行される。幾つかの実施態様において、GPE310は、3次元(3D)グラフィックス演算及びメディア演算を含むグラフィックス演算を実行するための計算エンジンである。
【0065】
[0116] 一部の実施形態では、GPE310は、3Dプリミティブ形状(例えば、長方形、三角形など)に作用する処理機能を用いて3次元画像及びシーンをレンダリングするような3D処理を実行するための3Dパイプライン312を含む。3Dパイプライン312は、要素内の様々なタスクを実行し、及び/又は3D/メディア・サブシステム315に実行スレッドを生成する、プログラマブル&固定機能要素を含む。3Dパイプライン312はメディア処理を実行するために使用されることが可能であるが、GPE310の実施形態は、ビデオ後処理及び画像強調などのメディア処理を実行するために特に使用されるメディア・パイプライン316も含む。
【0066】
[0117] 一部の実施形態では、メディア・パイプライン316は、ビデオ・コーデック・エンジン306に代わって又はその代わりに、ビデオ・デコード加速、ビデオ・デインターレース、及びビデオ・エンコード加速などの、1つ以上の特殊なメディア処理を実行するための固定機能又はプログラマブル論理ユニットを含む。幾つかの実施形態では、メディア・パイプライン316は、3D/メディア・サブシステム315での実行のためにスレッドを生成するスレッド生成ユニットを追加的に含む。生成されたスレッドは、3D/メディア・サブシステム315に含まれる1つ以上のグラフィックス実行ユニット上でメディア処理のための演算を実行する。
【0067】
[0118] 幾つかの実施態様において、3D/メディア・サブシステム315は、3Dパイプライン312及びメディア・パイプライン316によって生成されるスレッドを実行するためのロジックを含む。一実施形態では、パイプラインは、3D/メディア・サブシステム315にスレッド実行リクエストを送信し、これは、様々なリクエストを仲裁し、利用可能なスレッド実行リソースにディスパッチするためのスレッド・ディスパッチ・ロジックを含む。実行リソースは、3D及びメディア・スレッドを処理するためのグラフィックス実行ユニットのアレイを含む。幾つかの実施形態では、3D/メディア・サブシステム315は、スレッド命令及びデータのための1つ以上の内部キャッシュを含む。幾つかの実施形態では、サブシステムはまた、スレッド間でデータを共有し、出力データを記憶するために、レジスタ及びアドレス指定可能メモリを含む共有メモリを含む。
【0068】
[0119]
図3Bは、本件で説明される実施形態による、タイル化されたアーキテクチャを有するグラフィックス・プロセッサ320を示す。一実施形態では、グラフィックス・プロセッサ320は、グラフィックス・エンジン・タイル310A-310D内に
図3Aのグラフィックス処理エンジン310の複数のインスタンスを有するグラフィックス処理エンジン・クラスタ322を含む。各グラフィックス・エンジン・タイル310A-310Dは、タイル相互接続323A-323Fのセットを介して相互接続されることが可能である。各グラフィックス・エンジン・タイル310A-310Dはまた、メモリ相互接続325A-325Dを介してメモリ・モジュール又はメモリ・デバイス326A-326Dに接続することも可能である。メモリ・デバイス326A-326Dは、任意のグラフィックス・メモリ技術を使用することができる。例えば、メモリ・デバイス326A-326Dは、グラフィックス・ダブル・データ・レート(GDDR)メモリであってもよい。メモリ・デバイス326A-326Dは、一実施形態では、それら各自のグラフィックス・エンジン・タイル310A-310Dとともにダイ上にある可能性がある高帯域幅メモリ(HBM)モジュールである。一実施形態では、メモリ・デバイス326A-326Dは、それら各自のグラフィックス・エンジン・タイル310A-310Dの上に積み重ねられることが可能なスタック・メモリ・デバイスである。一実施形態では、各グラフィックス・エンジン・タイル310A-310D及び関連メモリ326A-326Dは、
図11B-11Dで更に詳細に説明されるように、ベース・ダイ又はベース基板に結合された別個のチプレット上に存在する。
【0069】
[0120] グラフィックス・プロセッサ320は、メモリ・デバイス326A-326Dが、関連するグラフィックス・エンジン・タイル310A-310Dと結合される不均一メモリ・アクセス(NUMA)システムにより構成されることが可能である。所与のメモリ・デバイスは、それが直接的に接続されるタイル以外のグラフィックス・エンジン・タイルによってアクセスされてもよい。しかしながら、メモリ・デバイス326A-326Dに対するアクセス待ち時間は、ローカル・タイルにアクセスする場合に最も小さいであろう。一実施形態では、キャッシュ・コヒーレントNUMA(ccNUMA)システムは、タイル相互接続323A-323Fを使用して、グラフィックス・エンジン・タイル310A-310D内のキャッシュ・コントローラ間の通信が、複数のキャッシュが同じメモリ位置を記憶している場合に一貫したメモリ・イメージを維持することができるようにする。
【0070】
[0121] グラフィックス処理エンジン・クラスタ322は、オンチップ又はオンパッケージ・ファブリック相互接続324と接続することができる。ファブリック相互接続324は、グラフィックス・エンジン・タイル310A-310Dと、ビデオ・コーデック306及び1つ以上のコピー・エンジン304などの構成要素と、の間の通信を可能にすることができる。コピー・エンジン304は、メモリ・デバイス326A-326D、及びグラフィックス・プロセッサ320の外部にあるメモリ(例えば、システム・メモリ)から、内へ、及び間で、データを移動させるために使用することができる。ファブリック相互接続324はまた、グラフィックス・エンジン・タイル310A-310Dを相互接続するために使用することも可能である。グラフィックス・プロセッサ320は、オプションとして、外部ディスプレイ・デバイス318との接続を可能にするためのディスプレイ・コントローラ302を含んでもよい。グラフィックス・プロセッサはまた、グラフィックス又は演算アクセラレータとして構成されることも可能である。アクセラレータ構成では、ディスプレイ・コントローラ302及びディスプレイ・デバイス318は省略されてもよい。
【0071】
[0122] グラフィックス・プロセッサ320は、ホスト・インターフェース328を介してホスト・システムに接続することが可能である。ホスト・インターフェース328は、グラフィックス・プロセッサ320、システム・メモリ、及び/又は他のシステム構成要素間の通信を可能にすることができる。ホスト・インターフェース328は、例えば、PCIエクスプレス・バス又は他のタイプのホスト・システム・インターフェースであるとすることが可能である。
【0072】
[0123]
図3Cは、本件で説明される実施形態による演算アクセラレータ330を示す。演算アクセラレータ330は、
図3Bのグラフィックス・プロセッサ320に類似するアーキテクチャを含むことが可能であり、演算加速のために最適化される。計算エンジン・クラスタ332は、並列又はベクトル・ベースの汎用演算処理のために最適化された実行ロジックを含む一組の計算エンジン・タイル340A-340Dを含むことができる。幾つかの実施形態では、計算エンジン・タイル340A-340Dは、固定機能グラフィックス処理ロジックを含まないが、一実施形態では、計算エンジン・タイル340A-340Dのうちの1つ以上は、メディア加速を実行するためのロジックを含むことが可能である。計算エンジン・タイル340A-340Dは、メモリ相互接続325A-325Dを介してメモリ326A-326Dに接続することができる。メモリ326A-326D及びメモリ相互接続325A-325Dは、グラフィックス・プロセッサ320と同様な技術であってもよいし、或いは異なるものであるとすることも可能である。グラフィックス計算エンジン・タイル340A-340Dはまた、タイル相互接続323A-323Fのセットを介して相互接続されることが可能であり、ファブリック相互接続324と接続されること及び/又はファブリック相互接続324によって相互接続されることが可能である。一実施形態では、演算アクセラレータ330は、デバイス・ワイド・キャッシュとして構成されることが可能な大きなL3キャッシュ336を含む。演算アクセラレータ330はまた、
図3Bのグラフィックス・プロセッサ320と同様な方法で、ホスト・インターフェース328を介してホスト・プロセッサ及びメモリに接続することができる。
【0073】
グラフィックス処理エンジン
[0124]
図4は、幾つかの実施形態によるグラフィックス・プロセッサのグラフィックス処理エンジン410のブロック図である。一実施形態では、グラフィックス処理エンジン(GPE)410は、
図3Aに示されるGPE310のバージョンであり、
図3Bのグラフィックス・エンジン・タイル310A-310Dを表現している可能性もある。本件の任意の他の図の要素と同じ参照番号(又は名称)を有する
図4の要素は、本願の他の箇所に記載されたものと同様の方法で動作又は機能することが可能であるが、そのようには限定されない。例えば、
図3Aの3Dパイプライン312及びメディア・パイプライン316が示されている。メディア・パイプライン316は、GPE410の幾つかの実施形態ではオプションであり、GPE410内に明示的に含まれなくてもよい。例えば少なくとも1つの実施形態において、別個のメディア及び/又は画像プロセッサはGPE410に結合される。
【0074】
[0125] 幾つかの実施態様において、GPE410は、3Dパイプライン312及び/又はメディア・パイプライン316にコマンド・ストリームを提供するコマンド・ストリーマ403に結合するか又はそれを含む。幾つかの実施形態では、コマンド・ストリーマ403は、システム・メモリ、又は内部キャッシュ・メモリ及び共有キャッシュ・メモリのうちの1つ以上であるとすることが可能なメモリに結合される。幾つかの実施態様において、コマンド・ストリーマ403は、メモリからコマンドを受信し、コマンドを3Dパイプライン312及び/又はメディア・パイプライン316に送信する。コマンドは、3Dパイプライン312及びメディア・パイプライン316のためのコマンドを格納するリング・バッファからフェッチされるディレクティブである。一実施形態では、リング・バッファは、複数のコマンドのバッチを格納するバッチ・コマンド・バッファを追加的に含むことができる。また、3Dパイプライン312のためのコマンドは、3Dパイプライン312のための頂点及び幾何学的データ、及び/又はメディア・パイプライン316のための画像データ及びメモリ・オブジェクトのような、メモリに格納されたデータへの参照を含むことも可能であるが、これらに限定されない。3Dパイプライン312及びメディア・パイプライン316は、それぞれのパイプライン内のロジックにより動作を実行することによって、又は1つ以上の実行スレッドをグラフィックス・コア・アレイ414にディスパッチすることによって、コマンド及びデータを処理する。一実施形態では、グラフィックス・コア・アレイ414は、グラフィックス・コアの1つ以上のブロック(例えば、グラフィックス・コア415A、グラフィックス・コア415B)を含み、各ブロックは1つ以上のグラフィックス・コアを含む。各グラフィックス・コアは、グラフィックス及び演算処理を実行するための汎用及びグラフィックス専用の実行ロジック、並びに固定機能テクスチャ処理及び/又は機械学習及び人工知能加速ロジック、を含むグラフィックス実行リソースのセットを含む。
【0075】
[0126] 様々な実施形態では、3Dパイプライン312は、命令を処理し、実行スレッドをグラフィックス・コア・アレイ414にディスパッチことによって、頂点シェーダー、ジオメトリ・シェーダー、ピクセル・シェーダー、フラグメント・シェーダー、演算シェーダー、又はその他のシェーダー・プログラムなどの1つ以上のシェーダー・プログラムを処理するために、固定機能&プログラマブル・ロジックを含むことが可能である。グラフィックス・コア・アレイ414は、これらのシェーダー・プログラムを処理する際に使用する実行リソースの統一ブロックを提供する。グラフィックス・コア・アレイ414のグラフィックス・コア415A-414B内の多目的実行ロジック(例えば実行ユニット)は、様々な3D APIシェーダー言語のサポートを含み、複数のシェーダーに関連する複数の同時実行スレッドを実行することが可能である。
【0076】
[0127] 一部の実施形態では、グラフィックス・コア・アレイ414は、ビデオ及び/又は画像処理のようなメディア機能を実行するための実行ロジックを含む。一実施形態では、実行ユニットは、グラフィックス演算処理に加えて、並列的な汎用演算処理を実行するようにプログラム可能な汎用ロジックを含む。汎用ロジックは、
図1のプロセッサ・コア107又は
図2Aにおけるもののようなコア202A-202N内の汎用ロジックと並列的に又は関連して演算処理を実行することができる。
【0077】
[0128] グラフィックス・コア・アレイ414上で実行するスレッドによって生成される出力データは、ユニファイド・リターン・バッファ(URB)418内のメモリへデータを出力することができる。URB418は、複数のスレッドのデータを格納することができる。幾つかの実施形態において、URB418は、グラフィックス・コア・アレイ414上で実行される異なるスレッド間でデータを送信するために使用されてもよい。幾つかの実施形態において、URB418は、グラフィックス・コア・アレイ上のスレッドと、共有機能ロジック420内の固定機能ロジックとの間の同期のために追加的に使用されてもよい。
【0078】
[0129] 幾つかの実施態様において、グラフィックス・コア・アレイ414は、アレイが可変数のグラフィックス・コアを含むようにスケーラブルであり、それら各々がGPE410のターゲット・パワー及びパフォーマンス・レベルに基づいて可変数の実行ユニットを有する。一実施形態では、実行リソースは動的にスケーラブルであり、その結果、実行リソースはイネーブル又はディセーブルにされてもよい。
【0079】
[0130] グラフィックス・コア・アレイ414は、グラフィックス・コア・アレイ内のグラフィックス・コア間で共有される複数のリソースを含む共有機能ロジック420と結合する。共有機能ロジック420内の共有機能は、グラフィックス・コア・アレイ414に特殊補足機能を提供するハードウェア論理ユニットである。様々な実施形態において、共有機能ロジック420は、サンプラ421、マス(math)422、及びスレッド間通信(ITC)423ロジックを含むが、これらに限定されない。更に、幾つかの実施形態は、共有機能ロジック420内に1つ以上のキャッシュ425を実装する。
【0080】
[0131] 共有機能は、少なくとも、所与の特殊な機能に対する需要がグラフィックス・コア・アレイ414内に含めるには不十分である場合に実装される。その代わりに、その特殊機能の単一インスタンスは、共有機能ロジック420内のスタンド・アロン・エンティティとして実装され、グラフィックス・コア・アレイ414内の実行リソース間で共有される。グラフィックス・コア・アレイ414間で共有され、グラフィックス・コア・アレイ414内に含まれる機能の正確なセットは、実施形態によって異なる。幾つかの実施形態では、グラフィックス・コア・アレイ414によって広く使用される共有機能ロジック420内の特定の共有機能は、グラフィックス・コア・アレイ414内の共有機能ロジック416内に含まれてもよい。様々な実施形態では、グラフィックス・コア・アレイ414内の共有機能ロジック416は、共有機能ロジック420内の一部又は全部のロジックを含むことができる。一実施形態では、共有機能ロジック420内の全てのロジック要素は、グラフィックス・コア・アレイ414の共有機能ロジック416内で重複している可能性がある。一実施形態では、共有機能ロジック420は、グラフィックス・コア・アレイ414内の共有機能ロジック416のために除外される。
【0081】
実行ユニット
[0132]
図5A-5Bは、本願で説明される実施形態による、グラフィックス・プロセッサ・コアに使用される処理要素のアレイを含むスレッド実行ロジック500を示す。本願の他の図の要素と同じ参照番号(又は名称)を有する
図5A-
図5Bの要素は、本願の他の箇所に記載されているものと同様の方法で動作又は機能することができるが、そのようには限定されない。
図5A-5Bは、
図2Bの各サブ・コア221A-221Fで示されるハードウェア・ロジックを表すことが可能なスレッド実行ロジック500の概要を示す。
図5Aは汎用グラフィックス・プロセッサ内の実行ユニットを表現し、
図5Bはコンピュータ・アクセラレータ内で使用されてもよい実行ユニットを表現する。
【0082】
[0133]
図5Aに示すように、幾つかの実施形態では、スレッド実行ロジック500は、シェーダー・プロセッサ502、スレッド・ディスパッチャ504、命令キャッシュ506、複数の実行ユニット508A-508Nを含むスケーラブル実行ユニット、サンプラ510、共有ローカル・メモリ511、データ・キャッシュ512、及びデータ・ポート514を含む。一実施形態では、スケーラブル実行ユニット・アレイは、ワークロードの演算要件に基づいて、1つ以上の実行ユニット(例えば、実行ユニット508A、508B、508C、508D、ないし508N-1及び508Nのうちの任意のもの)をイネーブル又はディセーブルにすることによって、動的にスケーリングすることが可能である。一実施形態では、包含される構成要素は、構成要素の各々にリンクする相互接続構造を介して相互接続される。幾つかの実施形態では、スレッド実行ロジック500は、命令キャッシュ506、データ・ポート514、サンプラ510、及び実行ユニット508A-508Nのうちの1つ以上を介して、システム・メモリ又はキャッシュ・メモリなどのメモリに対する1つ以上の接続を含む。幾つかの実施形態では、各実行ユニット(例えば、508A)は、複数の同時ハードウェア/スレッドを実行する一方、各スレッドに対して複数のデータ要素を並列に処理することが可能なスタンドアロンのプログラマブル汎用演算ユニットである。様々な実施形態では、実行ユニット508A-508Nのアレイは、任意数の個々の実行ユニットを含むようにスケーラブルである。
【0083】
[0134] 一部の実施形態では、実行ユニット508A-508Nは主にシェーダー・プログラムを実行するために使用される。シェーダー・プロセッサ502は、様々なシェーダー・プログラムを処理し、スレッド・ディスパッチャ504を介してシェーダー・プログラムに関連付けられた実行スレッドをディスパッチすることができる。一実施形態では、スレッド・ディスパッチャは、グラフィックス及びメディア・パイプラインからのスレッド開始要求を調停し、実行ユニット508A-508N内の1つ以上の実行ユニットで要求されたスレッドをインスタンス化するロジックを含む。例えば、ジオメトリ・パイプラインは、頂点、テセレーション、又はジオメトリ・シェーダーを、処理のためにスレッド実行ロジックにディスパッチすることができる。幾つかの実施形態では、スレッド・ディスパッチャ504は、実行中のシェーダー・プログラムからのランタイム・スレッド生成要求を処理することもできる。
【0084】
[0135] 一部の実施形態では、実行ユニット508A-508Nは、多くの標準3Dグラフィックス・シェーダー命令に対するネイティブ・サポートを含む命令セットをサポートし、その結果、グラフィックス・ライブラリ(例えば、Direct3D及びOpenGL)からのシェーダー・プログラムが最小限の変換で実行される。実行ユニットは、頂点と幾何学的処理(例えば、頂点プログラム、幾何学プログラム、頂点シェーダー)、ピクセル処理(例えば、ピクセル・シェーダー、フラグメント・シェーダー)、及び汎用処理(例えば、計算及びメディア・シェーダー)をサポートする。実行ユニット508A-508Nの各々は、マルチ・イシュー・シングル命令複数データ(SIMD)の実行が可能であり、マルチ・スレッド動作は、より高いレイテンシ・メモリ・アクセスに直面する場合に効率的な実行環境を可能にする。各実行ユニット内の各ハードウェア・スレッドは、専用の高帯域幅レジスタ・ファイル及び関連する独立したスレッド状態を有する。実行は、整数、単精度及び倍精度の浮動小数点演算、SIMD分岐能力、論理演算、超越演算、及びその他の演算を行うことが可能なパイプラインに対するクロック毎のマルチ・イシューである。メモリ又は共有機能の1つからのデータを待機する間、実行ユニット508A-508N内の依存性ロジックは、要求されたデータが返されるまで、待機しているスレッドをスリープさせる。待機スレッドがスリープしている間、ハードウェア・リソースは、他のスレッドの処理に割り当てられてもよい。例えば、頂点シェーダー演算に関連する遅延の間に、実行ユニットは、ピクセル・シェーダー、フラグメント・シェーダー、又は別のタイプのシェーダー・プログラム(頂点シェーダーを含む)の演算を実行することが可能である。種々実施形態は、SIMDを使用する代替として、又はSIMDの使用に加えて、単一命令複数スレッド(SIMT)の使用による実行の使用に適用されることが可能である。SIMDコア又は演算に対する参照は、SIMTに適用することも可能であり、或いはSIMTとの組み合わせでSIMDにも適用することも可能である。
【0085】
[0136] 実行ユニット508A-508Nの各実行ユニットは、データ要素のアレイに関して作用する。データ要素の数は「実行サイズ」、即ち命令のチャネル数である。実行チャネルは、命令内のデータ要素アクセス、マスキング、及びフロー制御のための実行の論理的な単位である。チャネル数は、特定のグラフィックス・プロセッサのための物理的な算術論理ユニット(ALU)又は浮動小数点ユニット(FPU)の数とは独立していてもよい。幾つかの実施形態では、実行ユニット508A-508Nは、整数及び浮動小数点データ・タイプをサポートする。
【0086】
[0137] 実行ユニット命令セットはSIMD命令を含む。種々のデータ要素は、パックされたデータ・タイプとしてレジスタに記憶することが可能であり、実行ユニットは、要素のデータ・サイズに基づいて種々の要素を処理する。例えば、256ビット幅のベクトルに作用する場合、ベクトルの256ビットはレジスタに格納され、実行ユニットは、4つの別々の54ビット・パック・データ要素(Quad-Word(QW)サイズ・データ要素)、8つの別々の32ビット・パック・データ要素(Double Word(DW)サイズ・データ要素)、16個の別々の16ビットパック・データ要素(Word(W)サイズ・データ要素)、又は32個の別々の8ビット・データ要素(バイト(B)サイズ・データ要素)としてベクトルに関して作用する。しかしながら、異なるベクトル幅及びレジスタ・サイズが可能である。
【0087】
[0138] 一実施形態では、1つ以上の実行ユニットは、融合したEUに共通するスレッド制御ロジック(507A-507N)を有する融合実行ユニット509A-509Nに組み合わせられることが可能である。複数のEUはEUグループに融合させることが可能である。融合EUグループ内の各EUは、別々のSIMDハードウェア・スレッドを実行するように構成することが可能である。融合EUグループ内のEUの数は、実施形態に応じて変えることが可能である。更に、SIMD8、SIMD16、及びSIMD32を含む様々なSIMD幅は、EUごとに実行されることが可能であるが、これらに限定されない。各々の融合グラフィックス実行ユニット509A-509Nは、少なくとも2つの実行ユニットを含む。例えば、融合実行ユニット509Aは、第1EU508Aと、第2EU508Bと、第1EU508A及び第2EU508Bに共通するスレッド制御ロジック507Aとを含む。スレッド制御ロジック507Aは、融合グラフィックス実行ユニット509Aで実行されるスレッドを制御し、融合実行ユニット509A-509N内の各EUが、共通の命令ポインタ・レジスタを使用して実行することを可能にする。
【0088】
[0139] 実行ユニットに対するスレッド命令をキャッシュするために、1つ以上の内部命令キャッシュ(例えば506)は、スレッド実行ロジック500に含まれる。幾つかの実施形態では、1つ以上のデータ・キャッシュ(例えば512)は、スレッド実行中にスレッド・データをキャッシュするために含まれる。実行ロジック500上で実行されるスレッドはまた、明示的に管理されたデータを、共有ローカル・メモリ511に記憶することも可能である。幾つかの実施態様において、サンプラ510は、3D処理のためのテクスチャ・サンプリング及びメディア処理のためのメディア・サンプリングを提供するために含まれる。幾つかの実施形態において、サンプラ510は、サンプリングされたデータを実行ユニットに提供する前に、サンプリング・プロセス中にテクスチャ又はメディア・データを処理するための特殊なテクスチャ又はメディア・サンプリング機能を含む。
【0089】
[0140] 実行中に、グラフィックス及びメディア・パイプラインは、スレッド開始要求をスレッド実行ロジック500へ、スレッド生成及びディスパッチ・ロジックを介して送信する。一旦、ジオメトリック・オブジェクトのグループが処理され、ピクセル・データにラスタライズされると、シェーダー・プロセッサ502内のピクセル・プロセッサ・ロジック(例えば、ピクセル・シェーダー・ロジック、フラグメント・シェーダー・ロジックなど)が、出力情報を更に演算し、結果が出力表面(例えば、カラー・バッファ、デプス・バッファ、ステンシル・バッファなど)に書き込まれるように呼び出される。幾つかの実施形態では、ピクセル・シェーダー又はフラグメント・シェーダーは、ラスタライズされたオブジェクトにわたって補間されるべき様々な頂点属性の値を計算する。幾つかの実施形態では、シェーダー・プロセッサ502内のピクセル・プロセッサ・ロジックは、次いで、アプリケーション・プログラミング・インターフェース(API)供給ピクセル又はフラグメント・シェーダー・プログラムを実行する。シェーダー・プログラムを実行するために、シェーダー・プロセッサ502は、スレッド・ディスパッチャ504を介して実行ユニット(例えば、508A)にスレッドをディスパッチする。幾つかの実施形態では、シェーダー・プロセッサ502は、メモリに記憶されたテクスチャ・マップ内のテクスチャ・データにアクセスするために、サンプラ510内のテクスチャ・サンプリング・ロジックを使用する。テクスチャ・データ及び入力ジオメトリ・データに対する算術演算は、各々の幾何学的断片についてピクセル・カラー・データを計算するか、又は1つ以上のピクセルを更なる処理から排除する。
【0090】
[0141] 一部の実施形態では、データ・ポート514は、スレッド実行ロジック500にメモリ・アクセス機構を提供し、処理されたデータをメモリに出力し、グラフィックス・プロセッサ出力パイプラインにおける更なる処理に備える。幾つかの実施形態では、データ・ポート514は、データ・ポートを介してメモリ・アクセスのためのデータをキャッシュするために、1つ以上のキャッシュ・メモリ(例えば、データ・キャッシュ512)を含むか、又はそれに結合する。
【0091】
[0142] 一実施形態では、実行ロジック500はまた、レイ・トレーシング加速機能を提供することが可能なレイ・トレーサ505を含むことも可能である。レイ・トレーサ505は、光線発生のための命令/機能を含むレイ・トレーシング命令セットをサポートすることができる。レイ・トレーシング命令セットは、
図2Cのレイ・トレーシング・コア245によってサポートされるレイ・トレーシング命令セットと類似しているか、又は相違している可能性がある。
【0092】
[0143]
図5Bは、実施形態による実行ユニット508の例示的な内部詳細を示す。グラフィックス実行ユニット508は、命令フェッチ・ユニット537、汎用レジスタ・ファイル・アレイ(GRF)524、アーキテクチャ・レジスタ・ファイル・アレイ(ARF)526、スレッド・アービタ522、送信ユニット530、分岐ユニット532、SIMD浮動小数点ユニット(FPU)534のセット、及び一実施形態では専用整数SIMD ALU535のセットを含むことが可能である。GRF524及びARF526は、グラフィックス実行ユニット508においてアクティブである可能性がある、同時ハードウェア・スレッド各々に関連する汎用レジスタ・ファイル及びアーキテクチャ・レジスタ・ファイルのセットを含む。一実施形態では、スレッド毎のアーキテクチャ状態はARF526内に維持され、スレッド実行中に使用されるデータはGRF524内に記憶される。各スレッドに対する命令ポインタを含む各スレッドの実行状態は、ARF526内のスレッド特有のレジスタに保持することができる。
【0093】
[0144] 一実施形態では、グラフィックス実行ユニット508は、同時マルチ・スレッディング(SMT)と微細インターリーブ・マルチ・スレッディング(IMT)との組み合わせであるアーキテクチャを有する。アーキテクチャは、同時スレッドのターゲット数及び実行ユニット当たりのレジスタ数に基づいて、設計時に微調整されることが可能なモジュール構成を有し、ここで、実行ユニット・リソースは複数の同時スレッドを実行するために使用されるロジックにわたって分割される。グラフィックス実行ユニット508によって実行されることが可能な論理スレッドの数は、ハードウェア・スレッドの数に限定されず、複数の論理スレッドは各ハードウェア・スレッドに割り当てられることが可能である。
【0094】
[0145] 一実施形態では、グラフィックス実行ユニット508は、それぞれ異なる命令であってもよい複数の命令を共に発行することができる。グラフィックス実行ユニット・スレッド508のスレッド・アービタ522は、実行のために、送信ユニット530、分岐ユニット532、又はSIMD FPU534のうちの1つに命令をディスパッチすることができる。各々の実行スレッドは、GRF524内の128個の汎用レジスタにアクセスすることが可能であり、各レジスタは32バイトを記憶することができ、32ビット・データ要素のSIMD8要素ベクトルとしてアクセス可能である。一実施形態では、各々の実行ユニット・スレッドは、GRF524内の4Kバイトに対してアクセスするが、実施形態はそれに限定されず、他の実施形態では、より大きな又はより少ないレジスタ・リソースが提供される可能性がある。一実施形態では、グラフィックス実行ユニット508は、演算処理を独立して実行することが可能な7つのハードウェア・スレッドに分けられるが、実行ユニット当たりのスレッドの数も実施形態に応じて変わる可能性がある。例えば、一実施形態では、最大16個のハードウェア・スレッドがサポートされる。7つのスレッドが4Kバイトにアクセスする可能性がある実施形態では、GRF524は合計28Kバイトを記憶することができる。16スレッドが4Kバイトにアクセスできる場合、GRF524は合計64Kバイトを格納することができる。フレキシブル・アドレッシング・モードは、レジスタが一緒にアドレス指定され、より広いレジスタを効果的に構築したり、ストライドした長方形ブロック・データ構造を表現したりすることを許容することができる。
【0095】
[0146] 一実施形態では、メモリ動作、サンプラ動作、及び他のより長い待ち時間のシステム通信が、メッセージ受け渡し送信ユニット530によって実行される「送信」命令によりディスパッチされる。一実施形態では、分岐命令は、SIMDの多様性及び最終的な収束を促進するために、専用分岐ユニット532にディスパッチされる。
【0096】
[0147] 一実施形態では、グラフィックス実行ユニット508は、浮動小数点演算を実行するために1つ以上のSIMD浮動小数点ユニット(FPU)534を含む。一実施形態では、FPU(複数可)534も整数演算をサポートする。一実施形態では、FPU534は、M個に及ぶ32ビット浮動小数点(又は整数)SIMD演算を実行することができ、又は、2M個に及ぶ16ビット整数又は16ビット浮動小数点のSIMD演算を実行することができる。一実施形態では、FPUのうちの少なくとも1つは、高スループット超越数学関数及び倍精度54ビット浮動小数点をサポートする拡張された数学機能を提供する。幾つかの実施形態において、8ビット整数SIMD ALU535のセットも存在し、機械学習演算に関連する演算を実行するために特別に最適化されてもよい。
【0097】
[0148] 一実施形態では、グラフィックス実行ユニット508の複数インスタンスのアレイは、グラフィックス・サブ・コア・グループ化(例えば、サブ・スライス)でインスタンス化されることが可能である。スケーラビリティに関し、製品アーキテクチャはサブ・コア・グループごとに正確な数の実行ユニットを選択することができる。一実施形態では、実行ユニット508は、複数の実行チャネルにわたって命令を実行することができる。更なる実施形態では、グラフィックス実行ユニット508で実行される各スレッドは、異なるチャネルで実行される。
【0098】
[0149]
図6は、一実施形態による追加的な実行ユニット600を示す。実行ユニット600は、例えば
図3Cにおけるもののようなコンピュータ・エンジン・タイル340A-340Dで使用するための演算に最適化された実行ユニットであってもよいが、そのようには限定されない。また、
図3Bに示すように、グラフィックス・エンジン・タイル310A-310Dにおいて、実行ユニット600の変形例が使用されてもよい。一実施形態では、実行ユニット600は、スレッド制御ユニット601、スレッド状態ユニット602、命令フェッチ/プリフェッチ・ユニット603、及び命令デコード・ユニット604(本件では、デコーダとも言及される)を含む。実行ユニット600は、更に、実行ユニット内でハードウェア・スレッドに割り当てることが可能なレジスタを記憶するレジスタ・ファイル606を含む。実行ユニット600は送信ユニット607及び分岐ユニット608を追加的に含む。一実施形態では、送信ユニット607及び分岐ユニット608は、
図5Bのグラフィックス実行ユニット508の送信ユニット530及び分岐ユニット532と同様に動作することが可能である。
【0099】
[0150] 実行ユニット600は、複数の異なるタイプの機能ユニットを含む演算ユニット610も含む。一実施形態では、演算ユニット610は、算術論理ユニットのアレイを含むALUユニット611を含む。ALUユニット611は、64ビット、32ビット、及び16ビットの整数及び浮動小数点の演算を実行するように構成することができる。整数及び浮動小数点の演算は同時に実行されてもよい。演算ユニット610はまた、シストリック・アレイ612、及び数学ユニット613を含むことも可能である。シストリック・アレイ612は、シストリック方式でベクトル又はその他のデータ並列演算を実行するために使用されることが可能なデータ処理ユニットの幅W及び深度Dのネットワークを含む。一実施形態では、シストリック・アレイ612は、行列ドット積演算のような行列演算を実行するように構成されることが可能である。一実施形態では、シストリック・アレイ612は、16ビット浮動小数点演算に加えて、8ビット及び4ビット整数演算をサポートする。一実施形態では、シストリック・アレイ612は、機械学習演算を加速するように構成されることが可能である。そのような実施形態では、シストリック・アレイ612は、bfloat16ビット浮動小数点フォーマットをサポートするように構成されることが可能である。一実施形態では、数学ユニット613は、ALUユニット611よりも効率的で低電力な方法で数学的演算の特定のサブセットを実行するために含まれることが可能である。数学ユニット613は、他の実施形態によって提供されるグラフィックス処理エンジンの共有機能ロジックに見受けられる数学ロジックの変形(例えば、
図4の共有機能ロジック420の数学ロジック422)を含むことが可能である。一実施形態では、数学ユニット613は、32ビット及び64ビットの浮動小数点演算を実行するように構成されることが可能である。
【0100】
[0151] スレッド制御ユニット601は、実行ユニット内のスレッドの実行を制御するロジックを含む。スレッド制御ユニット601は、実行ユニット600内のスレッドの実行を開始、停止、及びプリエンプトするスレッド調停ロジックを含むことができる。スレッド状態ユニット602は、実行ユニット600で実行するために割り当てられたスレッドに対するスレッド状態を記憶するために使用されることが可能である。実行ユニット600内にスレッド状態を格納することは、これらのスレッドがブロックされ又はアイドルになった場合に、スレッドの迅速なプリエンプションを可能にする。命令フェッチ/プリフェッチ・ユニット603は、より高いレベルの実行ロジックの命令キャッシュ(例えば、
図5Aにおけるもののような命令キャッシュ506)から命令をフェッチすることができる。命令フェッチ/プリフェッチ・ユニット603はまた、現在実行中のスレッドの分析に基づいて、命令キャッシュにロードされる命令に対するプリフェッチ要求を発行することができる。命令デコード・ユニット604は、演算ユニットによって実行される命令をデコードするために使用されることが可能である。一実施形態では、命令デコード・ユニット604は、複雑な命令を、マイクロ・オペレーション構成要素にデコードするための2次デコーダとして使用されることが可能である。
【0101】
[0152] 実行部600は、実行ユニット600上で実行するハードウェア・スレッドによって使用されることが可能なレジスタ・ファイル606を追加的に含む。レジスタ・ファイル606内のレジスタは、実行ユニット600の演算ユニット610内で複数の同時スレッドを実行するために使用されるロジックにわたって分割されることが可能である。グラフィックス実行ユニット600によって実行される可能性がある論理スレッドの数は、ハードウェア・スレッドの数に限定されず、複数の論理スレッドが各ハードウェア・スレッドに割り当てられることが可能である。レジスタ・ファイル606のサイズは、サポートされるハードウェア・スレッドの数に基づいて、実施形態に応じて変わる可能性がある。一実施形態では、レジスタのリネームは、ハードウェア・スレッドにレジスタを動的に割り当てるために使用されることが可能である。
【0102】
[0153]
図7は、幾つかの実施形態によるグラフィックス・プロセッサ命令フォーマット700を示すブロック図である。1つ以上の実施形態において、グラフィックス・プロセッサ実行ユニットは、複数のフォーマットで命令を有する命令セットをサポートする。実線のボックスは、実行ユニット命令に一般的に含まれる構成要素を示す一方、破線は、オプション的である構成要素、又は命令のサブセットに含まれるだけの構成要素を含む。幾つかの実施形態では、説明され図示されたる命令フォーマット700は、命令が処理されると命令デコードから生じるマイクロ・オペレーションとは対照的に、それらは実行ユニットに供給される命令であるという点で、マクロ命令である。
【0103】
[0154] 幾つかの実施形態では、グラフィックス・プロセッサ実行ユニットは、128ビット命令フォーマット710において命令をネイティブにサポートする。64ビット・コンパクト命令フォーマット730は、選択された命令、命令オプション、及びオペランド数に基づいて幾つかの命令に対して利用可能である。ネイティブ128ビット命令フォーマット710は、全ての命令オプションに対してアクセスを提供するが、64ビット・フォーマット730では、幾つかのオプション及び処理は制限される。64ビット・フォーマット730で利用可能なネイティブ命令は、実施形態によって異なる。幾つかの実施形態では、命令は、インデックス・フィールド713内のインデックス値のセットを部分的に使用してコンパクト化される。実行ユニット・ハードウェアは、インデックス値に基づいて一組の圧縮テーブルを参照し、圧縮テーブル出力を使用して、128ビット命令フォーマット710内のネイティブ命令を再構成する。命令の他のサイズ及びフォーマットを使用することが可能である。
【0104】
[0155] 各フォーマットに対して、命令オペコード712は実行ユニットが実行する動作を定義する。実行ユニットは、各オペランドの複数のデータ要素にわたって、各命令を並列に実行する。例えば、加算命令に応答して、実行ユニットは、テクスチャ要素又はピクチャ要素を表す各カラー・チャネルにわたって同時加算演算を実行する。デフォルトでは、実行ユニットはオペランドの全てのデータ・チャネルにわたって各命令を実行する。幾つかの実施形態では、命令制御フィールド714は、チャネル選択(例えば、予測)及びデータ・チャネル順序(例えば、スウィズル(swizzle))などの特定の実行オプションの制御を可能にする。128ビット命令フォーマット710における命令については、exec-sizeフィールド716は、並列に実行されるデータ・チャネルの数を制限する。幾つかの実施形態では、exec-sizeフィールド716は、64ビットのコンパクトな命令フォーマット730での使用には利用可能でない。
【0105】
[0156] 一部の実行ユニット命令は、2つのソース・オペランド、src0 720、src1 722、及び1つの宛先718を含む最大3つのオペランドを有する。幾つかの実施形態では、実行ユニットは、宛先の1つは暗示されるデュアル宛先命令をサポートする。データ処理命令は、第3ソース・オペランド(例えば、SRC2 724)を有することが可能であり、命令オペコード712はソース・オペランドの数を決定する。命令の最後のソース・オペランドは、命令により渡される直接的な(例えば、ハード・コーディングされた)値であるとすることが可能である。
【0106】
[0157] 幾つかの実施形態では、128ビット命令フォーマット710は、例えば、直接レジスタ・アドレッシング・モード又は間接レジスタ・アドレッシング・モードが使用されるかどうかを指定するアクセス/アドレス・モード・フィールド726を含む。直接レジスタ・アドレッシング指定モードが使用される場合、1つ以上のオペランドのレジスタ・アドレスは、命令中のビットによって直接的に提供される。
【0107】
[0158] 幾つかの実施形態では、128ビット命令フォーマット710は、命令のアクセス・モード及び/又はアドレス・モードを指定するアクセス/アドレス・モード・フィールド726を含む。一実施形態では、アクセス・モードは、命令のためのデータ・アクセス・アライメントを定義するために使用される。幾つかの実施形態は、16バイト整列アクセス・モード及び1バイト整列アクセス・モードを含むアクセス・モードをサポートし、ここで、アクセス・モードのバイト・アライメントは命令オペランドのアクセス・アライメントを決定する。例えば、第1モードにある場合、命令は、送信元オペランドと送信先オペランドのためにバイト整列アドレッシングを使用することができ、第2モードにある場合、命令は、全ての送信元オペランドと送信先オペランドのために16バイト整列アドレスを使用することができる。
【0108】
[0159] 一実施形態では、アクセス/アドレス・モード・フィールド726のアドレス・モード部分は、命令が直接又は間接アドレッシングを使用するかどうかを決定する。直接レジスタ・アドレッシング・モードが使用される場合、命令内のビットは1つ以上のオペランドのレジスタ・アドレスを直接的に提供する。間接レジスタ・アドレッシング・モードが使用される場合、1つ以上のオペランドのレジスタ・アドレスは、命令内のアドレス即時フィールド及びアドレス・レジスタ値に基づいて計算されることが可能である。
【0109】
[0160] 一部の実施形態では、命令は、オペコード・デコード740を単純化するために、オペコード712ビット・フィールドに基づいてグループ化される。8ビットのオペコードの場合、ビット4、5、及び6は、実行ユニットが、オペコードのタイプを決定することを可能にする。図示されている精密なオペコード・グループ化は、単なる一例である。幾つかの実施形態において、移動及び論理オペコード・グループ742は、データ移動及び論理命令(例えば、移動(mov)、比較(cmp))を含む。幾つかの実施形態では、移動及び論理グループ742は、5つの最上位ビット(MSB)を共有し、ここで、移動(mov)命令は0000xxxxbの形式であり、論理命令は0001xxxbの形式である。フロー制御命令グループ744(例えば、呼び出し(call)、ジャンプ(jmp))は、0010xxxxb(例えば、0x20)の形式の命令を含む。他の命令グループ746は、0011xxxxb(例えば、0x30)の形式で同期命令(例えば、待機(wait)、送信(send))を含む命令の混合を含む。並列数学命令グループ748は、0100xxxxb(例えば、0x40)の形式で、コンポーネントごとの算術命令(例えば、加算(add)、乗算(mul))を含む。並列数学グループ748は、データ・チャネルにわたって並列的に算術演算を実行する。ベクトル数学グループ750は、0101xxxxb(例えば、0x50)の形式の算術命令(例えば、dp4)を含む。ベクトル数学グループは、ベクトル・オペランドのドット積計算のような演算を実行する。図示されるオペコード・デコード740は、一実施形態では、実行ユニットのどの部分が、デコードされた命令を実行するために使用されるか、を決定するために使用されることが可能である。例えば、幾つかの命令は、シストリック・アレイによって実行されるシストリック命令として指定されてもよい。レイ・トレーシング命令(図示せず)のような他の命令は、実行ロジックのスライス又はパーティション内のレイ・トレーシング・コア又はレイ・トレーシング・ロジックにルーティングされることが可能である。
【0110】
グラフィックス・パイプライン
[0161]
図8は、グラフィックス・プロセッサ800の別の実施形態のブロック図である。本願における任意の他の図の要素と同じ参照番号(又は名称)を有する
図8の要素は、本願の他の箇所に記載されているものと同様の方法で動作又は機能することが可能であるが、そのようには限定されない。
【0111】
[0162] 一部の実施形態では、グラフィックス・プロセッサ800は、幾何学パイプライン820、メディア・パイプライン830、ディスプレイ・エンジン840、スレッド実行ロジック850、及びレンダリング出力パイプライン870を含む。幾つかの実施形態では、グラフィックス・プロセッサ800は、1つ以上の汎用処理コアを含むマルチ・コア処理システム内のグラフィックス・プロセッサである。グラフィックス・プロセッサは、1つ以上の制御レジスタ(図示せず)へのレジスタ書き込みにより、又はリング相互接続802を介するグラフィックス・プロセッサ800へ発行されるコマンドにより制御される。幾つかの実施形態では、リング相互接続802は、グラフィックス・プロセッサ800を、他のグラフィックス・プロセッサ又は汎用プロセッサなどの他の処理構成要素に結合する。リング相互接続802からのコマンドは、幾何学パイプライン820又はメディア・パイプライン830の個々の構成要素に命令を供給するコマンド・ストリーマ803によって解釈される。
【0112】
[0163] 一部の実施形態では、コマンド・ストリーマ803は、メモリから頂点データを読み込み、コマンド・ストリーマ803によって提供される頂点処理コマンドを実行する頂点フェッチャ805の動作を指示する。幾つかの実施形態では、頂点フェッチャ805は頂点データを頂点シェーダー807に提供し、頂点シェーダーは各頂点に対する座標空間変換及びライティング動作を実行する。幾つかの実施形態では、頂点フェッチャ805及び頂点シェーダー807は、スレッド・ディスパッチャ831により、実行スレッドを実行ユニット852A-852Bへディスパッチすることによって頂点処理命令を実行する。
【0113】
[0164] 幾つかの実施形態では、実行ユニット852A-852Bは、グラフィックス及びメディア演算を実行するための命令セットを有するベクトル・プロセッサのアレイである。幾つかの実施形態では、実行ユニット852A-852Bは、各アレイに固有の、又はアレイ間で共有されるアタッチされたL1キャッシュ851を有する。キャッシュは、データ・キャッシュ、命令キャッシュ、又は単一キャッシュであって異なるパーティションにデータ及び命令を含めるように区分けされた単一のキャッシュ、として構成されることが可能である。
【0114】
[0165] 幾つかの実施形態では、幾何学パイプライン820は、3Dオブジェクトのハードウェア加速テセレーションを実行するためのテセレーション構成要素を含む。幾つかの実施形態では、プログラマブル・ハル・シェーダー811がテセレーション動作を設定する。プログラマブル・ドメイン・シェーダー817は、テセレーション出力のバックエンド評価を提供する。テセレータ813は、ハル・シェーダー811の方向で動作し、幾何学パイプライン820への入力として提供される粗い幾何学モデルに基づいて、一組の詳細な幾何学的オブジェクトを生成するための特殊目的ロジックを含む。幾つかの実施形態では、テセレーションが使用されない場合に、テセレーション構成要素(例えば、ハル・シェーダー811、テセレータ813、及びドメイン・シェーダー817)をバイパスすることができる。テセレーション構成要素は頂点シェーダー807から受け取ったデータに基づいて動作することが可能である。
【0115】
[0166] 幾つかの実施形態では、完全な幾何学オブジェクトは、実行ユニット852A-852Bにディスパッチされる1つ以上のスレッドにより、幾何学シェーダー819によって処理されるか、又はクリップ処理部(クリッパ)829へ直接進むことができる。幾つかの実施形態では、幾何学シェーダーは、グラフィックス・パイプラインの前のステージにおけるもののような頂点や頂点のパッチではなく、幾何学オブジェクト全体に関して動作する。テセレーションがディセーブルにされると、幾何学シェーダー819は頂点シェーダー807から入力を受け取る。幾つかの実施形態では、幾何学シェーダー819は、テセレーション・ユニットがディセーブルにされている場合に幾何学テセレーションを実行するように、幾何学シェーダー・プログラムによってプログラム可能である。
【0116】
[0167] ラスタ化の前に、クリッパ829は頂点データを処理する。クリッパ829は、クリッピング及び幾何学シェーダー機能を有する固定機能クリッパ又はプログラマブル・クリッパであってもよい。幾つかの実施態様において、レンダリング出力パイプライン870内のラスタライザ及び深度テスト構成要素873は、幾何学オブジェクトを、ピクセル単位の表現に変換するためにピクセル・シェーダーをディスパッチする。幾つかの実施形態では、ピクセル・シェーダー・ロジックは、スレッド実行ロジック850に含まれる。幾つかの実施形態では、アプリケーションは、ラスタライザ及び深度テスト構成要素873をバイパスし、ストリーム出力ユニット823を介してラスタライズされていない頂点データにアクセスすることができる。
【0117】
[0168] グラフィックス・プロセッサ800は、相互接続バス、相互接続ファブリック、又はその他の総合接続機構であってプロセッサの主要構成要素間でデータ及びメッセージの伝送を可能にするものを有する。幾つかの実施形態では、実行ユニット852A-852B及び関連する論理ユニット(例えば、L1キャッシュ851、サンプラ854、テクスチャ・キャッシュ858など)は、データ・ポート856を介して相互接続され、メモリ・アクセスを実行して、プロセッサのレンダリング出力パイプライン構成要素を用いて通信する。幾つかの実施形態では、サンプラ854、キャッシュ851、858、及び実行ユニット852A-852Bの各々は別個のメモリ・アクセス経路を有する。一実施形態では、テクスチャ・キャッシュ858は、サンプラ・キャッシュとして構成されることも可能である。
【0118】
[0169] 幾つかの実施態様において、レンダリング出力パイプライン870は、頂点ベースのオブジェクトを、関連するピクセルに基づく表現に変換するラスタライザ及び深度テスト構成要素873を含む。幾つかの実施形態では、ラスタライザ・ロジックは、固定機能三角形及びライン・ラスタライゼーションを実行するためのウィンドウ/マスク部を含む。関連するレンダリング・キャッシュ878及び深度キャッシュ879もまた、幾つかの実施形態で利用可能である。ピクセル処理構成要素877は、データに対してピクセル・ベースの処理を実行するが、幾つかの例では、2D処理に関連するピクセル処理(例えば、ブレンドを伴うビット・ブロック画像転送)は、2Dエンジン841によって実行されるか、又は表示時間にオーバレイ表示プレーンを使用して表示コントローラ843によって置換される。幾つかの実施形態では、共有L3キャッシュ875は、全てのグラフィックス構成要素に利用可能であり、メイン・システム・メモリを使用せずにデータの共有を可能にする。
【0119】
[0170] 幾つかの実施形態では、グラフィックス・プロセッサ・メディア・パイプライン830は、メディア・エンジン837及びビデオ・フロント・エンド834を含む。幾つかの実施形態では、ビデオ・フロント・エンド834は、コマンド・ストリーマ803からパイプライン・コマンドを受信する。幾つかの実施形態では、メディア・パイプライン830は、個々のコマンド・ストリーマを含む。幾つかの実施形態では、ビデオ・フロント・エンド834は、メディア・エンジン837にコマンドを送信する前にメディア・コマンドを処理する。幾つかの実施形態では、メディア・エンジン837は、スレッド・ディスパッチャ831によるスレッド実行ロジック850へのディスパッチのためにスレッドを生成するスレッド生成機能を含む。
【0120】
[0171] 一部の実施形態では、グラフィックス・プロセッサ800は、ディスプレイ・エンジン840を含む。幾つかの実施形態では、ディスプレイ・エンジン840は、プロセッサ800の外部にあり、リング相互接続802、又は他の幾つかの相互接続バス若しくはファブリックを介してグラフィックス・プロセッサと結合する。幾つかの実施形態では、ディスプレイ・エンジン840は、2Dエンジン841及びディスプレイ・コントローラ843を含む。幾つかの実施形態では、ディスプレイ・エンジン840は、3Dパイプラインから独立して動作することが可能な専用ロジックを含む。幾つかの実施形態では、ディスプレイ・コントローラ843は、ラップトップ・コンピュータにおけるもののようなシステム統合ディスプレイ・デバイス、又はディスプレイ・デバイス・コネクタを介して取り付けられる外部ディスプレイ・デバイスであってもよいディスプレイ・デバイス(図示せず)と結合する。
【0121】
[0172] 幾つかの実施形態では、幾何学パイプライン820及びメディア・パイプライン830は、複数のグラフィックス及びメディア・プログラミング・インターフェースに基づく演算を実行するように設定することが可能であり、何らかの1つのアプリケーション・プログラミング・インターフェース(API)に特有ではない。幾つかの実施形態では、グラフィックス・プロセッサ用のドライバ・ソフトウェアは、特定のグラフィックス又はメディア・ライブラリに特有のAPI呼び出しを、グラフィックス・プロセッサにより処理されることが可能なコマンドに変換する。幾つかの実施形態では、OpenGL(Open Graphics Library)、OpenCL(Open Computing Language)、及び/又はヴァルカン(Vulkan)グラフィックス及び計算APIに対するサポートは、全てクロノス・グループ(Khronos Group)から提供される。幾つかの実施形態において、マイクロソフト・コーポレーション社からのDirect3Dライブラリに対するサポートが提供される可能性もある。幾つかの実施形態において、これらのライブラリの組み合せがサポートされる可能性がある。OpenCV(Open Source Computer Vision Library)に対するサポートが提供される可能性もある。将来のAPIのパイプラインからグラフィックス・プロセッサのパイプラインへのマッピングが可能であるならば、互換性のある3Dパイプラインを有する将来のAPIもサポートされるであろう。
【0122】
グラフィックス・パイプライン・プログラミング
[0173]
図9Aは、幾つかの実施形態によるグラフィックス・プロセッサ・コマンド・フォーマット900を示すブロック図である。
図9Bは、実施形態によるグラフィックス・プロセッサ・コマンド・シーケンス910を示すブロック図である。
図9Aの実線のボックスは、グラフィックス・コマンドに一般的に含まれる構成要素を示し、破線は、オプションである構成要素、又はグラフィックス・コマンドのサブセットに含まれるだけの構成要素を示す。
図9Aの例示的なグラフィックス・プロセッサ・コマンド・フォーマット900は、クライアント902を識別するためのデータ・フィールド、コマンド・オペレーション・コード(opcode)904、及びコマンドのためのデータ906を含む。サブ・オペコード905及びコマンド・サイズ908もまた、幾つかのコマンドに含まれる。
【0123】
[0174] 幾つかの実施形態では、クライアント902は、コマンド・データを処理するグラフィックス・デバイスのクライアント・ユニットを指定する。幾つかの実施形態では、グラフィックス・プロセッサ・コマンド・パーサーは、コマンドの更なる処理を条件付けて、コマンド・データを適切なクライアント・ユニットへルーティングするために、各コマンドのクライアント・フィールドを検査する。幾つかの実施形態では、グラフィックス・プロセッサ・クライアント・ユニットは、メモリ・インターフェース・ユニット、レンダリング・ユニット、2Dユニット、3Dユニット、及びメディア・ユニットを含む。各クライアント・ユニットは、コマンドを処理する対応する処理パイプラインを有する。コマンドがクライアント・ユニットによって受信されると、クライアント・ユニットはオペコード904を読み込み、もしあればサブ・オペコード905を読み込み、実行する動作を決定する。クライアント・ユニットは、データ・フィールド906の情報を使用してコマンドを実行する。幾つかのコマンドでは、明示的なコマンド・サイズ908が、コマンドのサイズを指定するために期待される。幾つかの実施形態では、コマンド・パーサーは、コマンド・オペコードに基づいて、少なくとも幾つかのコマンドのサイズを自動的に決定する。幾つかの実施形態において、コマンドは、ダブル・ワードの倍数で整合させられる。他のコマンド・フォーマットを使用することも可能である。
【0124】
[0175]
図9Bのフローチャートは、例示的なグラフィックス・プロセッサ・コマンド・シーケンス910を示す。幾つかの実施形態では、グラフィックス・プロセッサの実施形態を特徴付けるデータ処理システムのソフトウェア又はファームウェアは、一組のグラフィックス演算をセットアップし、実行し、終了するように示されるコマンド・シーケンスのバージョンを使用する。サンプル・コマンド・シーケンスは、これらの特定のコマンド又はこのコマンド・シーケンスに限定されない実施形態として、例示例の目的だけのために図示及び説明されている。更に、グラフィックス・プロセッサが少なくとも部分的に同時にコマンドのシーケンスを処理するように、コマンドは、コマンド・シーケンス内のコマンドのバッチとして発行されてもよい。
【0125】
[0176] 幾つかの実施形態では、グラフィックス・プロセッサ・コマンド・シーケンス910は、パイプライン・フラッシュ・コマンド912で始まり、何らかのアクティブなグラフィックス・パイプラインが、パイプラインに対して現時点で未完了のコマンドを完了させることを引き起こす。幾つかの実施態様において、3Dパイプライン922及びメディア・パイプライン924は、同時に動作しない。パイプライン・フラッシュは、アクティブなグラフィックス・パイプラインが、何らかの未完了のコマンドを完了させることを引き起こすように実行される。パイプライン・フラッシュに応答して、グラフィックス・プロセッサのコマンド・パーサーは、アクティブな描画エンジンが未完了の動作を完了し、関連する読み込みキャッシュが無効化されるまで、コマンド処理を一時停止する。オプションとして「ダーティ(dirty)」にマーキングされるレンダリング・キャッシュ内の任意のデータが、メモリに対してフラッシュされることが可能である。幾つかの実施形態において、パイプライン・フラッシュ・コマンド912は、パイプライン同期のために、又はグラフィックス・プロセッサを低電力状態にする前に使用されることが可能である。
【0126】
[0177] 幾つかの実施形態では、コマンド・シーケンスがグラフィックス・プロセッサを用いてパイプライン同士を明示的にスイッチングする場合に、パイプライン選択コマンド913が使用される。幾つかの実施形態において、パイプライン選択コマンド913は、コンテキストが両方のパイプラインに対してコマンドを発行するものでない限り、パイプライン・コマンドを発行する前に実行コンテキスト内で一度だけ使用される。幾つかの実施形態では、パイプライン・フラッシュ・コマンド912は、パイプライン選択コマンド913を介してパイプライン・スイッチングの直前に使用される。
【0127】
[0178] 幾つかの実施形態では、パイプライン制御コマンド914は、演算のためにグラフィックス・パイプラインを構築し、3Dパイプライン922及びメディア・パイプライン924をプログラムするために使用される。幾つかの実施形態では、パイプライン制御コマンド914は、アクティブ・パイプラインに対するパイプライン状態を設定する。一実施形態では、コマンドのバッチを処理する前に、アクティブ・パイプライン内の1つ以上のキャッシュ・メモリからデータをクリアするため、及びパイプライン同期のために、パイプライン制御コマンド914が使用される。
【0128】
[0179] 幾つかの実施形態では、リターン・バッファ状態コマンド916は、各パイプラインがデータを書き込むためのリターン・バッファのセットを構成するために使用される。一部のパイプライン・オペレーションは、処理中にオペレーションが中間データを書き込む1つ以上のリターン・バッファの割り当て、選択、又は設定を使用とする。幾つかの実施形態では、グラフィックス・プロセッサはまた、出力データを格納し、クロス・スレッド通信を行うために1つ以上のリターン・バッファを使用する。幾つかの実施形態では、リターン・バッファ状態916は、パイプライン演算のセットに使用するリターン・バッファのサイズ及び数を選択することを含む。
【0129】
[0180] コマンド・シーケンス内の残りのコマンドは、演算に関するアクティブ・パイプラインに基づいて異なる。パイプライン決定920に基づいて、コマンド・シーケンスは、3Dパイプライン状態930で始まる3Dパイプライン922、又はメディア・パイプライン状態940で始まるメディア・パイプライン924に合わせられる。
【0130】
[0181] 3Dパイプライン状態930を設定するためのコマンドは、頂点バッファ状態、頂点要素状態、コンスタント・カラー状態、深度バッファ状態、及びその他の状態変数であて3Dプリミティブ・コマンドが処理される前に設定されるべき状態変数、に対する3D状態設定コマンドを含む。これらのコマンドの値は、使用中の特定の3D APIに少なくとも部分的に基づいて決定される。幾つかの実施形態では、3Dパイプライン状態930コマンドは、特定のパイプライン要素を、それらの要素が使用されない場合には選択的にディセーブル又はバイパスすることも可能である。
【0131】
[0182] 一部の実施形態では、3Dプリミティブ932コマンドは、3Dパイプラインによって処理される3Dプリミティブをサブミットするために使用される。3Dプリミティブ932コマンドを介してグラフィックス・プロセッサに渡されるコマンド及び関連パラメータは、グラフィックス・パイプラインにおける頂点フェッチ関数に転送される。頂点フェッチ関数は、頂点データ構造を生成するために3Dプリミティブ932コマンド・データを使用する。頂点データ構造は1つ以上のリターン・バッファに格納される。幾つかの実施形態では、3Dプリミティブ932コマンドは、頂点シェーダーにより3Dプリミティブに関して頂点演算を実行するために使用される。頂点シェーダーを処理するために、3Dパイプライン922は、シェーダー実行スレッドを、グラフィックス・プロセッサ実行ユニットにディスパッチする。
【0132】
[0183] 幾つかの実施形態では、3Dパイプライン922は、実行934コマンド又はイベントによりトリガされる。幾つかの実施形態において、レジスタ書き込みは、コマンド実行をトリガする。幾つかの実施形態では、実行は、コマンド・シーケンス内の‘go’又は‘kick’コマンドによりトリガされる。一実施形態では、コマンド実行は、パイプライン同期コマンドを使用してトリガされ、グラフィックス・パイプラインによりコマンド・シーケンスをフラッシュする。3Dパイプラインは、3Dプリミティブに対して幾何学的処理を実行する。演算が完了すると、結果として生じる幾何学オブジェクトはラスタライズされ、ピクセル・エンジンは、結果として生じるピクセルを着色する。ピクセル・シェーディング及びピクセル・バックエンド演算を制御するための追加コマンドが、これらの演算のために含まれてもよい。
【0133】
[0184] 一部の実施形態では、グラフィックス・プロセッサのコマンド・シーケンス910は、メディア演算を実行する際に、メディア・パイプライン924の経路に従う。一般に、メディア・パイプライン924のプログラミングの特定の用途及び方法は、メディア又は実行される演算処理に依存する。特定のメディア・デコード演算は、メディア・デコード中にメディア・パイプラインにオフロードされる可能性がある。幾つかの実施形態では、メディア・パイプラインはバイパスされることも可能であり、メディア・デコードは、1つ以上の汎用処理コアによって提供されるリソースを使用して全体的又は部分的に実行されることが可能である。一実施形態では、メディア・パイプラインは、汎用グラフィックス・プロセッサ・ユニット(GPGPU)演算のための要素も含み、グラフィックス・プロセッサは、グラフィックス・プリミティブのレンダリングに明示的には関連しない演算シェーダー・プログラムを使用してSIMDベクトル演算を実行するために使用される。
【0134】
[0185] 幾つかの実施態様において、メディア・パイプライン924は、3Dパイプライン922と同様に構成される。メディア・パイプライン状態940を設定するためのコマンドのセットは、メディア・オブジェクト・コマンド942の前にコマンド・キューにディスパッチされる又は配置される。幾つかの実施形態では、メディア・パイプライン状態940のためのコマンドは、メディア・オブジェクトを処理するために使用されるメディア・パイプライン要素を構成するためのデータを含む。これは、エンコード又はデコード・フォーマットのような、メディア・パイプライン内のビデオ・デコード及びビデオ・エンコード・ロジックを構成するためのデータを含む。幾つかの実施形態では、メディア・パイプライン状態940のためのコマンドはまた、状態設定のバッチを含む“間接的な”状態要素に対する1つ以上のポインタの使用をサポートする。
【0135】
[0186] 一部の実施形態では、メディア・オブジェクト・コマンド942は、メディア・パイプラインによる処理のために、ポインタをメディア・オブジェクトに供給する。メディア・オブジェクトは、処理されるビデオ・データを含むメモリ・バッファを含む。幾つかの実施形態では、全てのメディア・パイプライン状態は、メディア・オブジェクト・コマンド942を発行する前に「有効」であるべきである。いったんパイプライン状態が設定され、メディア・オブジェクト・コマンド942がキューイングされると、メディア・パイプライン924は、実行コマンド944又は同等な実行イベント(例えば、レジスタ書き込み)によりトリガされる。次いで、メディア・パイプライン924からの出力は、3Dパイプライン922又はメディア・パイプライン924によって提供される演算によって後処理されることが可能である。幾つかの実施形態では、GPGPU演算は、メディア演算と同様な方法で設定され、実行される。
【0136】
グラフィックス・ソフトウェア・アーキテクチャ
[0187]
図10は、幾つかの実施形態によるデータ処理システム1000のための例示的なグラフィックス・ソフトウェア・アーキテクチャを示す。幾つかの実施形態では、ソフトウェア・アーキテクチャは、3Dグラフィックス・アプリケーション1010、オペレーティング・システム1020、及び少なくとも1つのプロセッサ1030を含む。幾つかの実施形態では、プロセッサ1030は、グラフィックス・プロセッサ1032及び1つ以上の汎用プロセッサ・コア1034を含む。グラフィックス・アプリケーション1010及びオペレーティング・システム1020はそれぞれ、データ処理システムのシステム・メモリ1050内で実行される。
【0137】
[0188] 一部の実施形態では、3Dグラフィックス・アプリケーション1010は、シェーダー命令1012を含む1つ以上のシェーダー・プログラムを含む。シェーダー言語命令は、Direct3DのHLSL(High-level Shader Language)、GLSL(OpenGL Shader Language)などのようなハイ・レベル・シェーダー言語におけるものであってもよい。アプリケーションはまた、汎用プロセッサ・コア1034による実行に適したマシン言語の実行可能命令1014を含む。アプリケーションは、頂点データによって定義されるグラフィックス・オブジェクト1016も含む。
【0138】
[0189] 幾つかの実施形態では、オペレーティング・システム1020は、マイクロソフト・コーポレーション社からのMicrosoft(登録商標)、Windows(登録商標)オペレーティング・システム、プロプライエタリUNIX(登録商標)のようなオペレーティング・システム、又はLinux(登録商標)カーネルの変形を使用するオープン・ソースUNIX(登録商標)のようなオペレーティング・システムである。オペレーティング・システム1020は、Direct3D API、OpenGL API、又はVulkan APIなどのグラフィックスAPI 1022をサポートすることができる。Direct3D APIが使用される場合、オペレーティング・システム1020はフロント・エンド・シェーダー・コンパイラ1024を使用して、HLSLのシェーダー命令1012を、より低いレベルのシェーダー言語にコンパイルする。コンパイルはジャスト・イン・タイム(JIT)コンパイルであってもよいし、或いはアプリケーションはシェーダー事前コンパイルを実行することが可能である。幾つかの実施形態では、ハイ・レベル・シェーダーは、3Dグラフィックス・アプリケーション1010のコンパイル中に、低レベル・シェーダーにコンパイルされる。幾つかの実施形態では、シェーダー命令1012は、Vulkan APIによって使用される或るバージョンのSPIR(Standard Portable Intermediate Representation)のような中間形式で提供される。
【0139】
[0190] 幾つかの実施形態では、ユーザー・モード・グラフィックス・ドライバ1026は、シェーダー命令1012をハードウェア固有の表現に変換するためのバック・エンド・シェーダー・コンパイラ1027を含む。OpenGL APIが使用される場合、GLSLハイ・レベル言語のシェーダー命令1012は、コンパイルのためにユーザー・モード・グラフィックス・ドライバ1026に渡される。幾つかの実施形態では、ユーザー・モード・グラフィックス・ドライバ1026は、オペレーティング・システム・カーネル・モード機能1028を使用して、カーネル・モード・グラフィックス・ドライバ1029と通信する。幾つかの実施形態では、カーネル・モード・グラフィックス・ドライバ1029は、コマンド及び命令をディスパッチするためにグラフィックス・プロセッサ1032と通信する。
【0140】
IPコア実装
[0191] 少なくとも1つの実施形態の1つ以上の態様は、プロセッサのような集積回路内のロジックを表現及び/又は定義する機械読み込み可能な媒体に格納される代表的なコードによって実装されることが可能である。例えば、機械読み取り可能な媒体は、プロセッサ内の種々のロジックを表現する命令を含んでもよい。幾つかの実装において、機械読み取り可能な媒体はまた、本件では、コンピュータ読み取り可能な媒体、又は非一時的なコンピュータ読み取り可能な媒体と言及される。機械(又はマシン)によって読み込まれる場合に、命令は、本件で説明される技術を実行するようにマシンに論理を構築させることができる。このような表現は、“IPコア”として知られており、集積回路の構造を記述するハードウェア・モデルとして、有形の機械読み取り可能な媒体に記憶されることが可能な集積回路用の再利用可能な論理ユニットである。ハードウェア・モデルは、集積回路を製造する製造マシンにハードウェア・モデルをロードする、種々の消費者又は製造施設に供給されることが可能である。集積回路は、本件で説明される実施形態の何れかに関連して説明される動作を回路が実行するように製造されることが可能である。
【0141】
[0192]
図11Aは、実施形態による動作を実行するように集積回路を製造するために使用されることが可能なIPコア開発システム1100を示すブロック図である。IPコア開発システム1100は、より大きな設計に組み込まれることが可能な、又は集積回路(例えば、SOC集積回路)全体を構築するために使用されることが可能な、モジュール式の再利用可能な設計を行うために使用されてもよい。設計施設1130は、ハイ・レベル・プログラミング言語(例えば、C/C++)でIPコア設計のソフトウェア・シミュレーション1110を生成することができる。ソフトウェア・シミュレーション1110は、シミュレーション・モデル1112を使用して、IPコアの挙動を設計、テスト、及び検証するために使用されることが可能である。シミュレーション・モデル1112は、機能シミュレーション、挙動シミュレーション、及び/又はタイミング・シミュレーションを含んでもよい。次いで、レジスタ転送レベル(RTL)設計1115が、シミュレーション・モデル1112から作成又は合成されることが可能である。RTL設計1115は、モデル化されたデジタル信号を用いて実行される関連論理を含む、ハードウェア・レジスタ間のデジタル信号の流れをモデル化する集積回路の挙動の抽象化である。RTL設計1115に加えて、論理レベル又はトランジスタ・レベルでのより低いレベルの設計が、生成、設計、又は合成されてもよい。従って、初期設計及びシミュレーションの特定の詳細は、変わる可能性がある。
【0142】
[0193] RTL設計1115又は同等物は、更に、設計施設によって、ハードウェア記述言語(HDL)におけるものである可能性があるハードウェア・モデル1120、又は物理設計データの何らかの他の表現に、更に合成されてもよい。HDLは、IPコア設計を検証するために更にシミュレーション又はテストされることが可能である。IPコア設計は、不揮発性メモリ1140(例えば、ハード・ディスク、フラッシュ・メモリ、又は任意の不揮発性記憶媒体)を使用して、第三者製造施設1165に届けるために格納されることが可能である。代替的に、IPコア設計は、有線接続1150又は無線接続1160を介して(例えば、インターネットを介して)伝送されてもよい。次に、製造設備1165は、IPコア設計に少なくとも部分的に基づいて集積回路を製造することができる。製造される集積回路は、本件で説明される少なくとも1つの実施形態に従って動作を実行するように構成されることが可能である。
【0143】
[0194]
図11Bは、本件で説明される幾つかの実施形態による集積回路パッケージ・アセンブリ1170の側断面図を示す。集積回路パッケージ・アセンブリ1170は、本件で説明される1つ以上のプロセッサ又はアクセラレータ・デバイスの実装を示す。パッケージ・アセンブリ1170は、基板1180に接続されたハードウェア・ロジック1172、1174の複数ユニットを含む。ロジック1172、1174は、少なくとも部分的に、設定可能なロジック又は固定機能ロジックのハードウェアに実装されてもよく、本件で説明されるプロセッサ・コア、グラフィックス・プロセッサ、又は他のアクセラレータ・デバイスのうちの任意の1つ以上の部分を含むことが可能である。ロジック1172、1174の各ユニットは、半導体ダイ内に実装され、相互接続構造1173を介して基板1180と結合されることが可能である。相互接続構造1173は、ロジック1172、1174と基板1180との間で電気信号をルーティングするように構成されることが可能であり、バンプ又はピラーなどの相互接続を含むことが可能であるが、これらに限定されない。幾つかの実施形態では、相互接続構造1173は、例えばロジック1172、1174の動作に関連する入力/出力(I/O)信号及び/又は電力若しくはグランド信号などの電気信号をルーティングするように構成されてもよい。幾つかの実施態様において、基板1180は、エポキシ・ベースの積層基板である。基板1180は、他の実施形態では、他の適切なタイプの基板を含んでもよい。パッケージ・アセンブリ1170は、パッケージ相互接続1183を介して他の電気デバイスに接続することができる。パッケージ相互接続1183は、マザーボード、他のチップセット、又はマルチ・チップ・モジュールのような他の電気デバイスに電気信号をルーティングするために、基板1180の表面に結合されてもよい。
【0144】
[0195] 幾つかの実施形態では、ロジック1172、1174のユニットは、ロジック1172、1174の間で電気信号をルーティングするように構成されたブリッジ1182に電気的に結合される。ブリッジ1182は、電気信号に経路を提供する高密度相互接続構造であってもよい。ブリッジ1182は、ガラス又は適切な半導体材料から構成されるブリッジ基板を含んでもよい。ロジック1172、1174の間にチップ対チップ接続を提供するために、電気ルーティング機能部をブリッジ基板に形成することが可能である
[0196] ロジック1172、1174の2つのユニット及びブリッジ1182が示されているが、本件で説明される実施形態は、1つ以上のダイ上に、より多い又はより少ないロジック・ユニットを含んでもよい。ロジックが単一のダイに含まれる場合、ブリッジ1182は除外されてもよいので、1つ以上のダイは、ゼロ個以上のブリッジによって接続されることが可能である。代替的に、複数のダイ又はロジック・ユニットは、1つ以上のブリッジによって接続されることが可能である。更に、複数のロジック・ユニット、ダイ、及びブリッジは、三次元構成を含む他の可能な構成で互いに接続されることが可能である。
【0145】
[0197]
図11Cは、基板1180(例えば、ベース・ダイ)に接続された複数ユニットのハードウェア・ロジック・チップレットを含むパッケージ・アセンブリ1190を示す。本件で説明されるようなグラフィックス処理ユニット、並列プロセッサ、及び/又は演算アクセラレータは、別々に製造される多様なシリコン・チップレットから構成されることが可能である。この文脈において、チップレットは、他のチプレットと共に、より大きなパッケージに組み立てられことが可能な個々のロジック・ユニットを含む、少なくとも部分的にパッケージされた集積回路である。異なるIPコア・ロジックを有するチップレットの多様なセットは、単一のデバイスに組み立てられることが可能である。更に、チップレットは、アクティブ・インターポーザ技術を用いてベース・ダイ又はベース・チップレットに一体化されることが可能である。本件で説明される概念は、GPU内の様々な形態のIP間で相互接続及び通信を可能にする。IPコアは、様々なプロセス技術を用いて製造され、製造中に構成することが可能であり、これにより、複数のIP、特に複数のフレーバーIPを備えた大きなSoC上で、同一の製造プロセスに集中する複雑さを回避することができる。複数のプロセス技術を使用できるようにすることは、販売までの時間を改善し、複数の製品SKUを作成するためのコスト効果的な方法を提供する。加えて、非集約化されたIPは、独立してパワーゲート(登録商標)制御され、所与のワークロードで使用されない構成要素は、電源オフにされることが可能であり、全体的な電力消費を低減する。
【0146】
[0198] ハードウェア・ロジック・チップレットは、特殊目的のハードウェア・ロジック・チップレット1172、ロジック又はI/Oチップレット1174、及び/又はメモリ・チップレット1175を含むことが可能である。ハードウェア・ロジック・チップレット1172及びロジック又はI/Oチップレット1174は、少なくとも部分的に、設定可能なロジック又は固定された機能ロジック・ハードウェアに実装されることが可能であり、本件で説明されるプロセッサ・コア、グラフィック・プロセッサ、パラレル・プロセッサ、又は他のアクセラレータ・デバイスのうちの任意の1つ以上の部分を含むことが可能である。メモリ・チップレット1175は、DRAM(例えば、GDDR、HBM)メモリ又はキャッシュ(SRAM)メモリであるとすることが可能である。
【0147】
[0199] 各チップレットは、個々の半導体ダイとして製造され、相互接続構造1173を介して基板1180と結合されることが可能である。相互接続構造1173は、基板1180内の様々なチップレットとロジックとの間で電気信号をルーティングするように構成されてもよい。相互接続構造1173は、バンプ又はピラーなどの相互接続を含むことが可能であるが、これらに限定されない。幾つかの実施形態では、相互接続構造1173は、例えば、ロジック、I/O及びメモリ・チップレットの動作に関連する入力/出力(I/O)信号及び/又は電力若しくはグランド信号などの電気信号をルーティングするように構成されてもよい。
【0148】
[0200] 幾つかの実施態様において、基板1180は、エポキシ・ベースの積層基板である。基板1180は、他の実施形態では、他の適切なタイプの基板を含んでもよい。パッケージ・アセンブリ1190は、パッケージ相互接続1183を介して他の電気デバイスに接続することができる。パッケージ相互接続1183は、マザーボード、他のチップセット、又はマルチ・チップ・モジュールのような他の電気デバイスに電気信号をルーティングするために、基板1180の表面に結合されてもよい。
【0149】
[0201] 一部の実施形態では、ロジック又はI/Oチップレット1174及びメモリ・チップレット1175は、ロジック又はI/Oチップレット1174とメモリ・チップレット1175との間で電気信号をルーティングするように構成されたブリッジ1187を介して電気的に結合されることが可能である。ブリッジ1187は、電気信号のルートを提供する高密度相互接続構造であってもよい。ブリッジ1187は、ガラス又は適切な半導体材料により構成されるブリッジ基板を含んでもよい。ロジック又はI/Oチップレット1174とメモリ・チップレット1175との間にチップ対チップ接続を提供するために、電気的ルーティング機能部は、ブリッジ基板上に形成されることが可能である。ブリッジ1187はまた、シリコン・ブリッジ又は相互接続ブリッジと言及されてもよい。例えば、ブリッジ1187は、幾つかの実施形態では、埋め込みマルチ・ダイ相互接続ブリッジ(EMIB)である。幾つかの実施形態において、ブリッジ1187は、単に、あるチップレットから別のチップレットへの直接接続であってもよい。
【0150】
[0202] 基板1180は、I/O1191、キャッシュ・メモリ1192、及び他のハードウェア・ロジック1193のためのハードウェア構成要素を含むことが可能である。様々なロジック・チップレットと基板1180内のロジック1191、1193との間の通信を可能にするために、ファブリック1185は基板1180内に埋め込まれることが可能である。一実施形態では、I/O1191、ファブリック1185、キャッシュ、ブリッジ、及び他のハードウェア・ロジック1193は、基板1180のトップに積層されるベース・ダイに統合されることが可能である。ファブリック1185は、チップ相互接続上のネットワーク、又はパッケージ・アセンブリの構成要素間でデータ・パケットを切り替える別の形態のパケット交換ファブリックであってもよい。
【0151】
[0203] 様々な実施形態では、パッケージ・アセンブリ1190は、ファブリック1185又は1つ以上のブリッジ1187によって相互接続された、より少ない又はより多い数の構成要素及びチップレットを含むことが可能である。パッケージ・アセンブリ1190内のチップレットは、3D又は2.5D形式で配置されてもよい。一般に、ブリッジ構造1187は、例えばロジック又はI/Oチップレット及びメモリ・チップレットの間の点-対-点の相互接続を促進にするために使用されてもよい。ファブリック1185は、種々のロジック及び/又はI/Oチップレット(例えば、チップレット1172、1174、1191、1193)を、他のロジック及び/又はI/Oチップレットと相互接続するために使用されることが可能である。一実施形態では、基板内のキャッシュ・メモリ1192は、パッケージ・アセンブリ1190のためのグローバル・キャッシュ、分散されたグローバル・キャッシュの一部、又はファブリック1185のための専用キャッシュとして機能することが可能である。
【0152】
[0204]
図11Dは、一実施形態による、交換可能なチップレット1195を含むパッケージ・アセンブリ1194を示す。交換可能なチップレット1195は、1つ以上のベース・チップレット1196、1198上の標準化スロットに組み立てられることが可能である。ベース・チップレット1196、1198は、ブリッジ相互接続1197を介して結合されてもよく、ブリッジ相互接続1197は、本件で説明される他のブリッジ相互接続と同様であるとすることが可能であり、例えばEMIBであってもよい。メモリ・チップレットは、ブリッジ相互接続を介してロジック又はI/Oチップレットに接続されることも可能である。I/O及びロジック・チップレットは、相互接続ファブリックを介して通信することが可能である。ベース・チップレットの各々は、ロジック又はI/O又はメモリ/キャッシュのうちの1つに対して標準化フォーマットで1つ以上のスロットをサポートすることができる。
【0153】
[0205] 一実施形態では、SRAM及び電力分配回路は、ベース・チップレット1196、1198のうちの1つ以上の中に製造されることが可能であり、これらは、ベース・チップレットのトップにスタックされる交換可能なチップレット1195に対して異なるプロセス技術を用いて製造されることが可能である。例えば、ベース・チップレット1196、1198は、より大規模なプロセス技術を用いて製造することが可能であり、交換可能なチップレットは、より小規模なプロセス技術を用いて製造されることが可能である。1つ以上の交換可能なチップレット1195は、メモリ(例えば、DRAM)チップレットであってもよい。パッケージ・アセンブリ1194を使用する製品に対してターゲットとする電力及び/又はパフォーマンスに基づいて、様々なメモリ密度が、パッケージ・アセンブリ1194に対して選択されることが可能である。更に、多種多様な機能ユニットを有するロジック・チップレットは、製品についてターゲットとされる電力及び/又はパフォーマンスに基づいて組み立て時に選択されることが可能である。更に、異なるタイプのIPロジック・コアを含むチップレットが、交換可能なチップレット・スロットに挿入されることが可能であり、異なる技術IPブロックを混合して適合させることが可能なハイブリッド・プロセッサ設計を可能にする。
【0154】
チップ集積回路におけるシステム例
[0206]
図12-13Bは、本件で説明される様々な実施形態による1つ以上のIPコアを使用して製造されることが可能な例示的な集積回路及び関連するグラフィックス・プロセッサを示す。図示されているものに加えて、追加のグラフィックス・プロセッサ/コア、周辺インターフェース・コントローラ、又は汎用プロセッサ・コアを含む、他のロジック及び回路が包含されてもよい。
【0155】
[0207]
図12は、一実施形態による1つ以上のIPコアを使用して製造されることが可能なチップ集積回路1200における例示的なシステムを示すブロック図である。例示的な集積回路1200は、1つ以上のアプリケーション・プロセッサ1205(例えば、CPU)と、少なくとも1つのグラフィックス・プロセッサ1210とを含み、追加的に、画像プロセッサ1215及び/又はビデオ・プロセッサ1220を含んでもよく、何れも同一又は複数の異なる設計施設からのモジュラIPコアであってもよい。集積回路1200は、USBコントローラ1225、UARTコントローラ1230、SPI/SDIOコントローラ1235、及びI
2S/I
2Cコントローラ1240を含む周辺又はバス・ロジックを含む。更に、集積回路は、高解像度マルチメディア・インターフェース(HDMI(登録商標))コントローラ1250及びモバイル産業プロセッサ・インターフェース(MIPI)ディスプレイ・インターフェース1255のうちの1つ以上に結合されたディスプレイ・デバイス1245を含むことが可能である。ストレージは、フラッシュ・メモリ及びフラッシュ・メモリ・コントローラを含むフラッシュ・メモリ・サブシステム1260によって提供されてもよい。メモリ・インターフェースは、SDRAM又はSRAMメモリ・デバイスへのアクセスのために、メモリ・コントローラ1265を介して提供されてもよい。幾つかの集積回路は、埋め込みセキュリティ・エンジン1270を更に含む。
【0156】
[0208]
図13A-13Bは、本件で説明される実施形態による、SoC内で使用するための例示的なグラフィックス・プロセッサを示すブロック図である。
図13Aは、実施形態による、1つ以上のIPコアを使用して製造されることが可能なチップ集積回路におけるシステムの例示的なグラフィックス・プロセッサ1310を示す。
図13Bは、実施形態による、1つ以上のIPコアを使用して製造されることが可能なチップ集積回路におけるシステムの追加の例示的なグラフィックス・プロセッサ1340を示す。
図13Aのグラフィックス・プロセッサ1310は、低電力グラフィックス・プロセッサ・コアの例である。
図13Bのグラフィックス・プロセッサ1340は、ハイ・パフォーマンス・グラフィックス・プロセッサ・コアの一例である。グラフィックス・プロセッサ1310、1340の各々は、
図12のグラフィックス・プロセッサ1210の変形であるとすることが可能である。
【0157】
[0209]
図13Aに示されるように、グラフィックス・プロセッサ1310は、頂点プロセッサ1305と、1つ以上のフラグメント・プロセッサ(例えば、1315A、1315B、1315C、1315D、1315N-1及び1315N)とを含む。グラフィックス・プロセッサ1310は、頂点プロセッサ1305が頂点シェーダー・プログラムに対して演算を実行するために最適化される一方、1つ以上のフラグメント・プロセッサ(複数可)1315A-1315Nが、フラグメント又はピクセル・シェーダー・プログラムに対してフラグメント(例えば、ピクセル)シェーダー演算を実行するように、別々のロジックにより異なるシェーダー・プログラムを実行することが可能である。頂点プロセッサ1305は、3Dグラフィックス・パイプラインの頂点処理ステージを実行し、プリミティブ及び頂点データを生成する。フラグメント・プロセッサ(複数可)1315A-1315Nは、頂点プロセッサ1305によって生成されたプリミティブ及び頂点データを使用して、ディスプレイ・デバイスに表示されるフレーム・バッファを生成する。一実施形態では、フラグメント・プロセッサ1315A-1315Nは、OpenGL APIで提供されているように、フラグメント・シェーダー・プログラムを実行するように最適化されており、このプログラムは、Direct3D APIで提供されるような、ピクセル・シェーダー・プログラムと同様な動作を実行するために使用されることが可能である。
【0158】
[0210] グラフィックス・プロセッサ1310は、1つ以上のメモリ管理ユニット(MMU)1320A-1320B、キャッシュ1325A-1325B、及び回路相互接続1330A-1330Bを更に含む。1つ以上のMMU1320A-1320Bは、頂点プロセッサ1305及び/又はフラグメント・プロセッサ1315A-1315Nを含むグラフィックス・プロセッサ1310のための仮想-対-物理アドレス・マッピングを提供し、これは、1つ以上のキャッシュ1325A-1325Bに記憶された頂点又は画像/テクスチャ・データに加えて、メモリに記憶された頂点又は画像/テクスチャ・データを参照することができる。一実施形態では、1つ以上のMMU1320A-1320Bは、各プロセッサ1205-1220が共有又は統一された仮想メモリ・システムに参加できるように、
図12の1つ以上のアプリケーション・プロセッサ1205、画像プロセッサ1215、及び/又はビデオ・プロセッサ1220に関連付けられた1つ以上のMMUを含む、システム内の他のMMUと同期することが可能である。1つ以上の回路相互接続1330A-1330Bは、実施形態に従って、グラフィックス・プロセッサ1310が、SoCの内部バスを介して又は直接接続を介して、SoC内の他のIPコアとのインターフェースとなることを可能にする。
【0159】
[0211]
図13Bに示すように、グラフィックス・プロセッサ1340は、
図13Aのグラフィックス・プロセッサ1310の1つ以上のMMU1320A-1320B、キャッシュ1325A-1325B、及び回路相互接続1330A-1330Bを含む。グラフィックス・プロセッサ1340は、1つ以上のシェーダー・コア1355A-1355N(例えば、1355A、1355B、1355C、1355D、1355E、1355F、ないし1355N-1、及び1355N)を含み、1つ以上のシェーダー・コアは、単一のコア又はタイプ又はコアが、頂点シェーダー、フラグメント・シェーダー、及び/又は演算シェーダーを実装するシェーダー・プログラム・コードを含む、全てのタイプのプログラマブル・シェーダー・コードを実行することが可能な統一されたシェーダー・コア・アーキテクチャを提供する。提示されているシェーダー・コアの正確な数は、実施形態及び実装に応じて変わる可能性がある。更に、グラフィックス・プロセッサ1340は、1つ以上のシェーダー・コア1355A-1355Nに実行スレッドをディスパッチするためのスレッド・ディスパッチャとして機能するコア間タスク・マネージャ1345と、タイル・ベースのレンダリングのためのタイル処理を加速するタイル・ユニット1358とを含み、シーンのレンダリング演算は、例えばシーン内の局所空間コヒーレンスを利用するため、又は内部キャッシュの使用を最適化するために、画像空間内で細分化される。
【0160】
[0212] 幾つかの実施形態では、処理リソースは、本件で説明されるようなGPU内のグラフィックス・プロセッサ又はグラフィックス・プロセッサ構造(例えば、並列処理ユニット、グラフィックス処理エンジン、マルチ・コア・グループ、演算ユニット、次のグラフィックス・コアの演算ユニット)に関連する処理エレメント(例えば、GPGPUコア、レイ・トレーシング・コア、テンソル・コア、実行リソース、実行ユニット(EU)、ストリーム・プロセッサ、ストリーミング・マルチプロセッサ(SM)、グラフィックス・マルチプロセッサ)を表す。例えば、処理リソースは、グラフィックス・マルチプロセッサのGPGPGPUコア又はテンソル/レイ・トレーシング・コアの1つ;グラフィックス・マルチプロセッサのレイ・トレーシング・コア、テンソル・コア又はGPGPUコア;グラフィックス・マルチプロセッサの実行リソース;マルチ・コア・グループのGFXコア、テンソル・コア、又はレイ・トレーシング・コアの1つ;演算ユニットのベクトル論理ユニット又はスカラー論理ユニットの1つ;EUアレイ又はEUアレイを有する実行ユニット;実行ロジックの実行ユニット;及び/又は実行ユニットであってもよい。処理リソースはまた、例えば、グラフィックス処理エンジン、処理クラスタ、GPGPU、GPGPU、グラフィックス処理エンジン、グラフィックス処理エンジン・クラスタ、及び/又はグラフィックス処理エンジン内の実行リソースであってもよい。処理リソースは、グラフィックス・プロセッサ内の処理リソース、グラフィックス・プロセッサ、及び/又はグラフィックス・プロセッサであってもよい。
【0161】
[0213]
演算アーキテクチャにおける8ビット浮動小数点フォーマット・オペランドをサポートすること
並列計算は、多くの計算又はプロセスの実行が同時に実行される計算の一種である。並列計算は、SIMD又はSIMTを含む種々の形態で到来する可能性があるが、これらに限定されない。SIMDは、複数のデータ・ポイントに対して同じ演算を同時に実行する複数の処理要素を有するコンピュータを述べている。一例において、上述の
図5A-5Bは、EU、FPU、及びALUの観点から一般的なプロセッサにおけるSIMD及びその実装を参照している。一般的なSIMDマシンでは、データは、各々がチャネルのアレイを含むレジスタにパッケージ化される。命令は、レジスタのチャネルnに見出されるデータに対して、別のレジスタの同じチャネルに見出されるデータとともに作用する。SIMDマシンは、単一の命令シーケンスが大量のデータに同時に適用されることが可能なエリアにおいて有利である。例えば、一実施形態では、グラフィックス・プロセッサ(例えば、GPGPU、GPUなど)が、演算シェーダー・プログラム(computational shader programs)を使用してSIMDベクトル演算を実行するために使用されることが可能である。
【0162】
[0214] また、種々の実施形態は、SIMDの使用の代替として、又はSIMDの使用に加えて、単一命令多重スレッド(SIMT)の使用による実行のユース・ケースに適用することも可能である。SIMDコア又は演算に関する言及は、SIMTにも適用可能であり、SIMTとの組み合わせにおけるSIMDにも適用可能である。以下の説明は、SIMDマシンに関して説明される。しかしながら、本件における実施形態は、SIMDコンテキストにおけるアプリケーションに単に限定されるものではなく、例えばSIMTのような他の並列演算パラダイムに適用されてもよい。議論と説明を容易にするために、以下の記述は概してSIMDの実装に焦点を当てる。しかしながら、実施形態は、説明される技術及び方法に修正を加えることなく、SIMTマシンに同様に適用することができる。SIMTマシンに関し、以下に説明される類似のパターンに従い、命令をシストリック・アレイに提供し、SIMTマシンにおいて命令を実行することができる。他のタイプの並列計算機もまた、本件の実施形態を利用することができる。
【0163】
[0215] 様々な実施形態は、行列加速回路を有するGPGPUを実装することができる。このような行列加速回路は、機械学習(ML)演算加速に利用することができる。
【0164】
[0216]
図14は、実施形態によるデータ処理システム1400のブロック図である。本件で議論される様々な実施形態は、データ処理システム1400のようなシステムで実装されてもよい。データ処理システム1400は、プロセッサ1402、統一メモリ1410、及び機械学習加速ロジックを含むGPGPU 1420を有するヘテロジニアス処理システムである。プロセッサ1402及びGPGPU 1420は、本件で説明される任意のプロセッサ及びGPGPU/並列プロセッサであるとすることが可能である。プロセッサ1402は、システム・メモリ1412に記憶されたコンパイラ1415のための命令を実行することができる。コンパイラ1415は、ソース・コード1414Aを、コンパイルされたコード1414Bにコンパイルするようにプロセッサ1402上で動作する。コンパイルされたコード1414Bは、プロセッサ1402によって実行され得る命令、及び/又はGPGPU 1420によって実行され得る命令を含むことができる。コンパイルの間、コンパイラ1415は、コンパイルされたコード1414Bに存在するデータ並列性のレベルに関するヒント、及び/又はコンパイルされたコード1414Bに基づいてディスパッチされるスレッドに関連するデータ局所性に関するヒントを含む、メタデータを挿入するための処理を実行することができる。コンパイラ1415は、そのような処理を実行するために利用される情報を含むことが可能であり、あるいは、ランタイム・ライブラリ1416の支援とともに処理を実行することが可能である。ランタイム・ライブラリ1416はまた、ソース・コード1414Aのコンパイルにおいてコンパイラ1415を支援することが可能であり、また、GPGPU 1420におけるコンパイルされた命令の実行を支援にするために、コンパイルされたコード1414Bとランタイムでリンクされる命令を含むことも可能である。
【0165】
[0217] 統一メモリ1410は、プロセッサ1402及びGPGPU 1420によってアクセスされることが可能な統一アドレス空間を表す。統一メモリは、システム・メモリ1412及びGPGPUメモリ1418を含むことができる。GPGPUメモリ1418は、GPGPU 1420のアドレス空間内のメモリであり、且つシステム・メモリ1412の一部又は全部を含むことができる。一実施形態では、GPGPUメモリ1418はまた、GPGPU 1420によって使用されるために専用化される任意のメモリの少なくとも一部を含むことが可能である。一実施形態では、システム・メモリ1412に格納されたコンパイルされたコード1414Bは、GPGPU 1420によるアクセスのためにGPGPUメモリ1418にマッピングすることが可能である。
【0166】
[0218]
GPGPU 1420は、複数の演算ブロック1424A-1424Nを含み、これらは本件で説明される種々の演算ユニット又は実行要素のうちの1つ以上を含むことが可能である。一実施形態では、GPGPU 1420は、行列演算のサブセット(例えば、ドット積(又は内積)など)を加速するように設計された1つ以上の特殊機能演算ユニットを含むことが可能な行列アクセラレータ1423を更に含む。また、GPGPU 1420は、演算ブロック1424A-1424N及び行列アクセラレータ1423によって共有さすることが可能な一組のリソースを含むことが可能であり、一組のリソースは、レジスタ1425、電力&パフォーマンス・モジュール1426、及びキャッシュ1427の組を含むが、これらに限定されない。一実施形態では、レジスタ1425は、直接的及び間接的にアクセス可能なレジスタを含み、ここで、間接的にアクセス可能なレジスタは、行列アクセラレータ1423による使用のために最適化される。電力&パフォーマンス・モジュール1426は、演算ブロック1424A-1424N内の電力ゲート・アイドル構成要素に対して、演算ブロック1424A-1424Nのクロック周波数及び電力配分を調整するように構成することが可能である。様々な実施形態において、キャッシュ1427は、命令キャッシュ及び/又は下位レベルのデータ・キャッシュを含むことができる。[0148]GPGPU 1420は、更に、L3データ・キャッシュ1430を含むことが可能であり、これは、行列アクセラレータ1423及び/又は演算ブロック1424A-1424N内の演算要素によって、統一メモリ1410からアクセスされるデータをキャッシュするために使用することができる。一実施形態では、L3データ・キャッシュ1430は、演算ブロック1424A-1424N内の演算要素及び行列アクセラレータ1423によって共有することが可能な共有ローカル・メモリ1432を含む。
【0167】
[0219] 一実施形態では、GPGPU 1420は、フェッチ&デコード・ユニット1421(本件ではデコーダ1421のようにデコーダとも呼ばれる)などの命令ハンドリング・ロジックと、スケジューラ・コントローラ1422とを含む。フェッチ&デコード・ユニット1421は、コンピュータ・ブロック1424A-1424N又は行列アクセラレータ1423のうちの1つ以上による実行のための命令をフェッチしてデコードするフェッチ&デコード・ユニットを含む。命令は、演算ブロック1424A-1424N内の適切な機能ユニットに対して、又はスケジューラ・コントローラ1422を介して行列アクセラレータに対して、スケジューリングされることが可能である。一実施形態では、スケジューラ・コントローラ1422は、高度なスケジューリング動作を実行するように構成することが可能なASICである。一実施形態では、スケジューラ・コントローラ1422は、マイクロコントローラであるか、又はファームウェア・モジュールからロードされるスケジューラ命令を実行することが可能な命令別低エネルギ処理コア(low energy-per-instruction processing core)である
[0220] 一実施形態では、コンピュータ・ブロック1424A-1424Nによって実行される幾つかの機能は、直接的にスケジューリングされるか、又は行列アクセラレータ1423にオフロードされることが可能である。様々な実施形態において、行列アクセラレータ1423は、3Dグラフィックス又は演算シェーダー・プログラムによって使用される乗算&加算演算、及びドット積演算のような行列演算処理を効率的に実行するように構成された処理要素ロジックを含む。一実施形態では、行列アクセラレータ1423は、機械学習フレームワークによって使用される演算を加速するように構成することができる。一実施形態では、行列アクセラレータ1423は、並列行列乗算及び/又は加算演算の特定のセットを実行するように明示的に構成された特定用途向け集積回路である。一実施形態では、行列アクセラレータ1423は、ワークロード間で更新されることが可能な固定機能ロジックを提供するフィールド・プログラマブル・ゲート・アレイ(FPGA)である。行列アクセラレータ1423によって実行されることが可能な行列演算のセットは、演算ブロック1424A-1424Nによって実行されることが可能な演算に関連して制限されることが可能である。しかしながら、行列アクセラレータ1423は、演算ブロック1424A-1424Nに対してかなり高いスループットでこれらの処理を実行することができる。
【0168】
[0221] 実施形態において、
図14のデータ処理システム1400は、人工知能(AI)及び機械学習(ML)の分野におけるアプリケーションに利用されてもよい。これらの分野の進歩は、MLモデルが、ニューラル・ネットワークを訓練するために低精度演算の恩恵を享受することを可能にしている。従来の訓練プラットフォームは、ハイ・パフォーマンス・シストリック・アレイ実装におけるIEEE-754浮動小数点16(FP16)及びブレイン浮動小数点16(bfloat16又はBF16)データ・フォーマットをサポートする。しかしながら、最近の進歩は、8ビット浮動小数点データ・フォーマットのような、より低い精度のデータ・フォーマットを使用するディープ・ニューラル・ネットワークの訓練をサポートするためになされている。このような8ビット浮動小数点データ・フォーマットの1つはbfloat8又はBF8である。BF8は、1つの符号ビット、5つの指数ビット、2つの仮数ビットというバイナリ・フォーマットを有する。幾つかのケースにおいて、BF8フォーマットを利用することは、FP16又はBF16の実装と比較して、ニューラル・ネットワークの訓練スループットにおいて2倍に及ぶ改善を提供することができる。しかしながら、従来のシステムは、BF8オペランドのような8ビット浮動小数点オペランドを使用して演算を実行するためのハードウェア・サポートを提供していない。
【0169】
[0222] 本件の実施形態は、演算アーキテクチャにおいて8ビット浮動小数点フォーマット・オペランドに対するサポートを提供することによって、上述の欠点に対処する。一実施形態において、本件で説明される8ビット浮動小数点フォーマットは、BF8フォーマットである。実施形態は、演算アーキテクチャにおける8ビット浮動小数点フォーマット・オペランドをサポートするための種々の技術を導入する。実施形態の技術の1つは、8ビット浮動小数点フォーマット入力オペランドに関するシストリック・ドット積蓄積(systolic dot product accumulate)である。実施形態の別の技術は、浮動小数点データを8ビット浮動小数点フォーマット・データに変換すること、又は浮動小数点データを8ビット浮動小数点フォーマット・データから変換することである。実施形態の別の技術は、浮動小数点フォーマットのデータ値に対して効率的な確率的丸め(stochastic rounding)を実行することである。実施形態の別の技術は、ハイブリッド浮動小数点シストリック演算である。更なる実施形態の技術は、8ビット浮動小数点フォーマット・オペランドで混合モード演算を実行することである。以下、本件における実施形態の技術を更に詳細に説明する。
【0170】
8ビット浮動小数点入力オペランドに関するシストリック・ドット積蓄積
[0223] 実施形態は、8ビット浮動小数点フォーマット入力オペランドにおけるシストリック・ドット積蓄積を提供する。
【0171】
[0224] 前述のように、従来の訓練プラットフォームは、ハイ・パフォーマンス・シストリック・アレイ実装におけるIEEE-754 FP16及びBFLOAT16データ・フォーマットをサポートする。これらのデータ・フォーマットは、シストリック・アレイ・ドット積累積(systolic dot-product accumulate, DPAS)エンジンにおいてもサポートされている。上述のように、ディープ・ニューラル・ネットワークは、8ビット浮動小数点データ・フォーマット(BFLOAT8又はBF8、バイナリ・フォーマット=1s-5e-2m)を使用して訓練することができる。BFLOAT8は、FP16やBFLOAT16の実装と比較して、訓練スループットにおいて2倍に及ぶ改善を提供することができる。しかしながら、BFLOAT8数値フォーマットを用いるシストリック・ドット積演算をサポートする既存の解決法は存在しない。
【0172】
[0225] 実施形態は、BF8データ・フォーマットをサポートするために、DPAS (ドット積蓄積シストリック)エンジンへの拡張を提供する。実装は、3つの入力オペランドc += a*bに対して行列ドット積を実行するための命令を提供し、ここで、a及びbの行列はBFデータ・タイプのものである。更に、実施形態は、命令をフェッチし、デコードし、そして実行するためのハードウェア回路を提供する。幾つかの実装において、ドット積の蓄積された表現は、32ビット(FP32)又は16ビット(FP16、BF16)の何れかの浮動小数点方式で返すことができる。実施形態は、シストリック演算密度及びスループットを増加させること、データ移動コストを低減させること(BF8は、16ビット・データ・フォーマットと比較して、半分の帯域幅及びキャッシュ/レジスタ空間を利用するからである)、及び混合精度のBFLOAT8訓練を可能にすることによる訓練を加速させること、という技術的利点を提供する。
【0173】
[0226] 実施形態は、8ビット浮動小数点(例えば、BF8)データ・フォーマットで提示された入力引数に対するドット積及び累積演算をサポートするためのDPAS命令を提供する。
図15は、実施形態によるBFLOAT8(BF8)バイナリ・フォーマット1500を示すブロック図である。BF8バイナリ・フォーマット1500は、符号1510、指数1520、仮数1530のビットで表現される。符号ビット1510は1ビットであり、指数1520は5ビットであり、仮数1530は2ビットである。5ビット指数1520は、6.1e-05と5.7344e+04の間のノーマルな浮動小数点値を表現することが可能な15のオフセット値を使用する。BF8バイナリ・フォーマット1500は、ダイナミック・レンジを、1.5e-05という最小表現値まで下方に拡張するサブノーマルな値もサポートする。
【0174】
[0227]
図16は、実施形態による命令パイプライン1600によって実行されるシストリックDP 8ビットFPフォーマット演算1610を示すブロック図である。命令パイプライン1600は、ドット積演算のようなシストリックDP8ビット・フォーマット演算1610を実行するように構成されることが可能であるが、これに限定されない。2つのベクトルのドット積は、ベクトルの対応する成分の積の和に等しいスカラー値である。ドット積は、以下の数式(1)で示されるように算出することができる。
【0175】
【数1】
[0228] ドット積は、畳み込みニューラル・ネットワーク(CNN)のようなニューラル・ネットワークの畳み込み演算で使用される可能性がある。ハードウェア命令を加速するために使用される命令パイプライン1600は、ハードウェア命令をフェッチしてデコードすることができる命令フェッチ&デコード・ユニット1421と、デコードされた命令を、演算ブロック1424A-1424N(まとめて演算ブロック1424と称する)の内の1つ以上の実行ユニット及び/又は行列アクセラレータ1423に対してスケジューリングすることができるコントローラ・ユニット1620(スケジューラ・コントローラ1422など)とを含むことができる。命令パイプライン1600はまた、入力データを、演算ブロック1424及び/又は行列アクセラレータ1423へ、シストリックDP 8ビット・フォーマット演算1610のハードウェア命令でエンコードされた8ビットFPフォーマットに従ってルーティングするために、マルチプレクサ(muxes)の集まりのような選択回路1630を含むことが可能である。
【0176】
[0229] 一実施形態では、ハードウェア命令は、演算ブロック1424に対してスケジューリングされること、及び行列アクセラレータ1423へオフロードされることが可能である。シストリックDP8ビットFPフォーマット演算1610を実行するための1つ以上のハードウェア命令及び関連データは、メモリ1650に記憶されることが可能である。ハードウェア命令の出力が、メモリ1650に記憶されることも可能である。メモリ1650は、
図14のように、システム・メモリ1412、GPGPUメモリ1418、又は1つ以上のキャッシュ・メモリ1427、1430を含む、本件で説明される任意のメモリであるとすることが可能である。幾つかの実施形態において、メモリ1650は、1つ以上のレジスタ・ファイルであるとすることが可能である。
【0177】
[0230] 一実施形態では、行列アクセラレータ1423は、1つ以上のハードウェア命令を実行して、シストリックDP 8ビット・フォーマット演算1610を、シストリック・アレイ回路1640を使用して実行することができる。シストリック・アレイ回路1640は、ドット積演算を実行するように構成することが可能なプログラマブル&固定機能ハードウェアの組み合わせを含むことが可能である。演算ブロック1424内の機能ユニットもまた、ドット積演算を実行するように構成されることも可能である、シストリック・アレイ回路1640は、演算ブロック1424に対してかなり高いスループットで、ドット積演算の限られたサブセットを実行するように構成されることが可能である。
【0178】
[0231] 本件の実施形態では、DPAS命令は、レジスタ・ファイルからの8ビット浮動小数点フォーマット(例えば、BF8)ソース・オペランドに関してシストリック・ドット積&蓄積演算を実行し、その結果を、選択された精度(fp32、fp16、bf16)で蓄積し、最終的な出力をレジスタ・ファイルに書き込んで返すために提供される。シストリックDP8ビット・フォーマット演算1610を実行するためのこのDPAS命令は、c += a*bを演算するために3つの入力オペランドを受け入れ、ここで、‘a'及び‘b'オペランドはBF8のような8ビットFPタイプのものである。入力オペランドと出力オペランドのサポートされている組み合わせの幾つかを以下に示す。
【0179】
【数2】
[0232] DPASは、BFLOAT8入力(src1×src2)を有するシストリック・パイプラインにおける積和及び累積演算である。シストリック・パイプラインの各々の融合積和(FMA)ステージは、シストリック・アレイ回路1640内の32ビットSIMDチャネルを表現し、それぞれsrc1及びsrc2からの4つの入力エレメント(例えば、dp4a演算)に対してDPAS演算を実行する。dstとsrc0は、IEEE754フロート又はハーフ・フロート・オペランドを受け付け、src0は、シストリック・アレイにおける先行するDPAS反復からの累積された出力を含む。実施形態は、dp4a、dp2a(ブロック=2)、dp8a(ブロック=8)、dp32a(ブロック=32)などを含むブロック正規化技術の任意の反復を利用することが可能であるが、それに限定されない。各ブロック正規化技術は、それ自体の利点(例えば、改善されたエリア効率)及び欠点(例えば、精度の損失)に関連付けられる。実装される特定のブロック正規化技術は、使用される特定のアプリケーションに基づいてもよい。
【0180】
[0233] ‘sdepth’パラメータは演算のシストリック深度を表現し、これは、これらの一連の‘sdepth'演算が、連続するレジスタに優先して実行されることを意味する。各ステージの出力は、次のシストリック・ステージへの累積入力となる32ビット精度で維持されます。dst引数とsrc0引数は、IEEE-754フロート、ハーフ・フロート、bfloat16データ・タイプを受け入れることが可能であり、以前に蓄積された結果は、ソース・レジスタ(src0)を介して命令に渡される。最終的な蓄積された出力は、宛先データ・フォーマット(destination data format)に変換され、宛先レジスタ(dst)に書き込まれる。‘rcount'パラメータは演算の反復回数であり、これは、dpas命令の‘rcount’数が生成され、dstとsrc0は逐次的に前進するレジスタであり、src1が同じままであり、src2は32要素前進することを意味する。
【0181】
[0234] 実施形態において、アキュムレータ・オペランド‘c’は、FP32、FP16、又はBF16であるとすることが可能である。シストリック・アレイ回路1640のハードウェアは、入力上に関してサブノーマル値(即ち、DAZ=0)をサポートするべきである。実施形態では、入力されたサブノーマル値は、それらがシストリック・アレイ回路1640の第1ステージに供給される前に、アップ・コンバートされてグリッド上で正規化され得る。
【0182】
[0235] 幾つかの実装では、入力引数‘c'を通じて渡される部分和は、シストリック・チェーンの最後に蓄積されて、内部正規化と加算演算に起因する精度損失を最小化することができる。シストリック・チェーンの最後でのアキュムレータ入力引数(‘c’)のこの蓄積は、“後-蓄積”(late accumulate)と呼ばれる。シストリック・アレイの各ステージにおける内的な合計は累積され、最も近いものに丸められることを使用して、FP32値に丸められる。幾つかの実施形態において、アキュムレータ入力引数(‘c’)の蓄積は、シストリック・チェーンの第1ステージで生じるか、又はシストリック・チェーンの任意の中間ステージで生じる可能性がある。
【0183】
[0236]
図17Aは、実施形態による8ビット浮動小数点フォーマット入力オペランドに関するシストリック・ドット積蓄積を実行するためのシストリック・アレイ回路1700を示すブロック図である。一実施形態では、
図17Aに示される8ビット浮動小数点フォーマット入力オペランドに関するシストリック・ドット積蓄積は、例示的なdp4a演算である。ある実装において、シストリック・アレイ回路1700は、
図16に関して説明したシストリック・アレイ回路1640と同一である。シストリック・アレイ回路1700は、ドット積演算を実行するように構成することが可能な、プログラマブル&固定機能ハードウェアの組み合わせを含むことが可能である。シストリック・アレイ回路1700の回路及び素子の他の変形例及び組み合わせが実装されてもよく、本件で説明されるものに限定されない。
図17Aは、シストリック・アレイ回路1700の一例のアーキテクチャを提供し、他のアーキテクチャは、本件で議論されるように、8ビット浮動小数点フォーマット入力オペランド演算に関してシストリック・ドット積蓄積を行うように実装されてもよい。
【0184】
[0237] シストリック・アレイ回路1700内の各FMAユニットは、src1及びsrc2レジスタからの4対のBF8入力値に対してベクトル・ドット積演算(例えば、4要素ベクトル・ドット積演算(dp4a))を実行する。一実施形態では、各FMAユニットは、乗算器1710a-1710d及びシフター1715b-1715d対の組み合わせ、ならびに加算器1720を含む。第3入力レジスタsrc0は、先行するドット積反復からの部分的な累積和を含む。シストリック・アレイに一緒に連結された複数のこのようなFMAユニットは、以下で更に説明するように、DPAS動作を実行することができる。シストリック・アレイの実装は、効率的な設計を行うために可能な任意の順序でこれらの個々のFMAユニットをチェーン化することができ、蓄積の順序は問題ない。
【0185】
[0238] 本件の実施形態において、シストリック・アレイ回路1700は、BF8入力(例えば、DAZ=0)に関してサブノーマル値をサポートすべきである。これは、入力の指数を拡張し、グリッド上でサブノーマル入力値を正規化することによって達成することができる。乗算は、例えば、精度を損なうことなく、4ビット乗算器1710a-1710d及び1730a-1730dを使用して行うことができる。乗算器1710a-1710d及び1730a-1730dの出力は、各乗算器の後の32ビット・シフター1715a-1715e及び1735a-1735eのようなシフターを使用して正規化すことができる。シフター1715a-1715e、1735a-1735eは、32ビット・シフターとして示されているが、本件の実施形態では、シフター1715a-1715e、1735a-1735eは、任意の精度とすることができる。例えば、大きなブロック・サイズ32のブロック正規化演算が使用されるケースでは、シフター1715a-1715e、1735a-1735eは、48ビットに及ぶほど増長することができる。従って、32ビット・シフター1715a-1715e、1735a-1735eが説明の目的で示されているが、実施形態は、特定の32ビット・シフター・サイズに限定されず、シフター1715a-1715e、1735a-1735eは、任意の精度であってもよい。
【0186】
[0239] シフター1715a-1715e、1735a-1735eから出力される正規化された成果は、5方向FP32加算器(5-way FP32 adder)1720、1740のような加算器で一緒に加算され、最近隣への丸めを行って丸められ、FP32出力を生成する。幾つかの実施形態において、5方向FP32加算器は、正規化のために選択されたブロック・サイズに基づいて、N方向加算ツリー(N-way adder tree)(Nは設定可能である)であってもよい。実施形態では、それぞれの後のFP32中間結果における(例えば、加算器1720、1740における)何れのサブノーマル値も、ゼロにフラッシュされる。
【0187】
[0240] 前述のように、シストリック・アレイ回路1700は、後-蓄積を実施することができる。後-蓄積のために、src0は、FP32加算器1750のような最終加算器においてシストリック・チェーンの末端で蓄積される。従って、シストリック・アレイ回路1700の第1ステージ(例えば、‘depth 0’)に対する‘c’値はゼロである。後-蓄積は、累積された出力の数値精度の損失を防止し、ワークロード・レベル精度で、改善されたパフォーマンスを提供することができる。前述したように、幾つかの実施形態では、アキュムレータ入力引数(‘c’)の蓄積は、シストリック・チェーンの第1ステージで行うか、又はシストリック・チェーンの任意の中間ステージで行うことが可能である。
【0188】
[0241] 後-累積の後の最終的な出力(例えば、dest(FP32)1752)は、最も近い偶数に丸めること(round to nearest even, RNE)を使用して、加算器1750によって宛先精度(destination precision)に丸められる。シストリック・アレイ回路1700の実装は、幾つかの例を挙げると、FP32、FP16、及びBF16を含む複数の出力フォーマットをサポートすることができる。幾つかの実施形態において、加算器1750の最終的な出力におけるサブノーマル値は、出力がFP32又はBF16である場合に、ゼロにフラッシュされる。幾つかの実施形態では、サブノーマル値は、FP16出力でサポートされる。
【0189】
[0242]
図17Bは、実施形態に従う8ビット浮動小数点フォーマット入力オペランドに関する収縮ドット積蓄積を実行するためのシストリック・アレイ回路1755を示すブロック図である。一実施形態では、
図17Bに示される8ビット浮動小数点フォーマット入力オペランドに関するシストリック・ドット積蓄積は、例示的なdp2a演算であり、これは2要素ベクトル・ドット積演算である。ある実装において、シストリック・アレイ回路1755は、
図16に関して説明されたシストリック・アレイ回路1640と同一である。シストリック・アレイ回路1755は、ドット積演算を実行するように構成することが可能なプログラマブル&固定機能ハードウェアの組み合わせを含むことができる。シストリック・アレイ回路1755の回路及び要素の他の変形例及び組み合わせが実装されてもよく、本件に示されるものに限定されない。
図17Bは、シストリック・アレイ回路1755の一例のアーキテクチャを提供しており、他のアーキテクチャが、本件で議論されるように、8ビット浮動小数点フォーマット入力オペランド演算に関するシストリック・ドット積蓄積を行うように実装されてもよい。
【0190】
[0243] シストリック・アレイ回路1755内の各FMAユニットは、src1及びsrc2レジスタからの4対のBF8入力値に対してベクトル・ドット積演算(例えば、2要素ベクトル・ドット積演算(dp2a))を実行する。一実施形態では、各FMAユニットは、再バイアス(re-bias)&正規化回路1760a-1760h、乗算器1770a-1770d、及び加算器1780a-b、1785a-bの組み合わせを含む。第3入力レジスタsrc0は、先行するドット積反復からの部分的な累積された合計を含む。シストリック・アレイに共に連結された複数のこのようなFMAユニットは、以下で更に説明するように、DPAS処理を実行することができる。シストリック・アレイの実装は、効率的な設計を行うために可能な任意の順序でこれらの個々のFMAユニットをチェーン化することができ、蓄積の順序は問題ない。
【0191】
[0244] 本件の実施形態において、シストリック・アレイ回路1755は、BF8入力(例えば、DAZ=0)に関してサブノーマル値をサポートすべきである。これは、入力指数を拡張し、グリッド上でサブノーマル入力値を正規化することによって達成することができる。再バイアス&正規化回路1760a-1760hは、到来するオペランド(src1(BF8)及びsrc2(BF8))の両方を、8ビットFPフォーマット及びそのサブノーマル値(例えば、DAZ=0)の両方を収容することが可能な共通のバイナリ・フォーマット(例えば、FP32)に変換することができる。
【0192】
[0245] 乗算は、例えば、精度を損なうことなく、FP32乗算器1770a-1770dを用いて実行することができる。乗算器1710a-1710dの出力は、例えば、FP32加算器1780a、1780b及びFP32加算器1785a、1785bによって提供される加算ツリーのような加算ツリー(例えば、選択されたブロック・サイズに基づくN方向加算ツリー)において一緒に加算され、最近接への丸め(RNE)を用いて丸められ、FP32出力を生成することができる。実施形態では、それぞれの後のFP32中間結果における(例えば、加算器1780a-b、1785a-bにおける)何れのサブノーマル値も、ゼロにフラッシュされる。
【0193】
[0246] 前述のように、シストリック・アレイ回路1755は、後-蓄積を実施することができる。後-蓄積のために、src0は、FP32加算器1790、1795により提供されるような最終加算ツリーにおいてシストリック・チェーンの末端で蓄積される。従って、シストリック・アレイ回路1755の第1ステージ(例えば、‘depth 0’)に対する‘c’値はゼロである。後-蓄積は、累積された出力の数値精度の損失を防止し、ワークロード・レベル精度で、改善されたパフォーマンスを提供することができる。前述したように、幾つかの実施形態では、アキュムレータ入力引数(‘c’)の蓄積は、シストリック・チェーンの第1ステージで行うか、又はシストリック・チェーンの任意の中間ステージで行うことが可能である。
【0194】
[0247] 後-累積の後の最終的な出力(例えば、dest(FP32)1792)は、最も近い偶数に丸めること(RNE)を使用して、加算器1795によって宛先精度に丸められる。シストリック・アレイ回路1755の実装は、幾つかの例を挙げると、FP32、FP16、及びBF16を含む複数の出力フォーマットをサポートすることができる。幾つかの実施形態において、加算器1795の最終的な出力におけるサブノーマル値は、出力がFP32又はBF16である場合に、ゼロにフラッシュされる。幾つかの実施形態では、サブノーマル値は、FP16出力でサポートされる。
【0195】
[0248] 以下は、実施形態に従う8ビット浮動小数点フォーマット入力オペランド(例えば、BF8オペランド)に関するシストリック・ドット積蓄積を実装するための疑似コードの例である。
【0196】
【数3】
[0249]
図18Aは、本件で説明される実施形態に従うシストリック・アレイ回路によって実行することが可能な累積命令1800によるドット積を示す。
図18Aは、8ビット浮動小数点フォーマット入力オペランドに作用する、実施形態によって提供されるシストリック行列ロジックによって実行することが可能な累積命令によるドット積のフィールドを示す。
図18Aは、累積命令1800によるドット積のフィールドを示し、これは、実行されると、シストリック行列アクセラレータが、8ビット浮動小数点フォーマット入力オペランド(例えば、BF8オペランド)に関して累積とともにドット積を実行することを引き起こす。一実施形態において、命令1800は、オペコード・フィールド1802と、シストリック深度1804(sdepth)と、反復カウント1806(rcount)と、オペランド・フィールドであって、宛先1808、第0ソース1810(src0)、第1ソース1812(srcl)、及び第2ソース1814(src2)を指定するオペランド・フィールドとを含む。
【0197】
[0250] オペコード・フィールド1802は、実行ロジックに対する命令1800を識別するオペコードを指定することができる。一実施形態では、オペコード・フィールド1802は、イネーブルにされている場合には、命令が行列アクセラレータ(例えば、行列アクセラレータ1423)によって実行されるべきであることを示す1つ以上のビットを含む。一実施形態では、オペコード・フィールド1802は、命令1800が、行列アクセラレータ1423内のドット積ロジック(例えば、シストリック・アレイ回路1640)のような特定用途ドット積ロジックによって実行されるべきであることを指定する1つ以上のビットを含むことも可能である。
【0198】
[0251] シストリック深度1804(sdepth)は、入力データを処理するために使用するシストリック層の数を指定するために使用されることが可能である。一実施形態では、シストリック深度1804は、直近の値として提供されることが可能である。反復カウント1806(rcount)は、連続するレジスタを前進させるdst及びsrc0と、同じままのsrc1と、N要素前進するsrc2とともに(ここで、Nは宛先フォーマット)生成されるdpas命令の数を指定するために使用することが可能である。
【0199】
[0252] 宛先1808、第0ソース1810(src0)、第1ソース1812(srcl)、及び第2ソース1814(srcl)を使用して、計算が書き込まれる宛先と、ソース・データが取り出されることが可能なロケーションとを指定することができる。一実施形態では、宛先1808は、データが書き込まれるべきレジスタを指定することができる。一実施形態では、宛先1808は、スカラー・レジスタであるとすることが可能であるが、一部の実施形態では、宛先は、複数のチャネルからの出力を格納するベクトル・レジスタであるとすることが可能である。第0ソース1810、第1ソース1812、及び第2ソース1814は、ソース・データの1つ以上のチャネルを含むレジスタ又は直近の値であるとすることが可能であり、各チャネルはシストリック・アレイ回路によって処理されるべき4つの要素を有する。
【0200】
[0253] 幾つかの実施形態では、説明されたもの以外の追加のフィールドが存在してもよい。例えば、一実施形態では、ソース・オペランドの数値修飾を指定するソース修飾子フィールドが存在する。ソース・オペランドの各データ要素の値は、オプションとして、その絶対値をとらせることが可能であり、及び/又はその符号を、実行パイプラインに送る前に反転させることが可能である。絶対値修飾子(absolute value modifier)は、保証された負の値を生成することができるように、ネゲート修飾子の前に適用されることが可能である。一実施形態では、飽和フィールドが存在し、これは宛先の飽和(destination saturation)を抑制するために使用することができる。飽和がイネーブルにされる場合、宛先レジスタへの出力データは飽和にされる。特定の飽和演算は、宛先データ・タイプに依存する。飽和は、そのデータ・タイプの飽和ターゲット範囲外の任意のデータを、ターゲット範囲で最も近い表現値に変換する演算である。
【0201】
[0254]
図18Bは、一実施形態によるプログラム・コード・コンパイル・プロセス1815を示す。一実施形態では、ソフトウェア・プログラムのソース・コード・レベル記述1820は、複数レベルのコンパイルを含むことが可能なコンパイラ1830において、処理ロジックによって実行される8ビット・ドット積を含むか又は指定する演算1840を有するレベルにコンパイルされる。演算1840は、中間言語で指定される演算であるとすることが可能であり、又は機械学習フレームワークによって提供されるプリミティブのような演算フレームワークのプリミティブを参照するプログラム・コードであるとすることが可能である。次いで、8ビット・ドット積を含むか又は指定する演算1840は、シェーダー・コンパイラであるとすることが可能な追加のコンパイラ1850によって、マシン・レベルのオブジェクト・コード1860に更にコンパイルされることが可能であり、そのオブジェクト・コードは、本件で説明されるような行列演算のためにアクセラレータによって実行される8ビットのドット積命令を含む。
【0202】
[0255]
図19は、8ビット浮動小数点フォーマット入力オペランドに関するシストリック・ドット積蓄積のための命令を実行する方法1900の実施形態を示すフローチャートである。方法1900は、ハードウェア(例えば、回路、専用ロジック、プログラマブル・ロジックなど)、ソフトウェア(例えば、処理デバイス上で実行される命令)、又はそれらの組み合わせを含む可能性がある処理ロジックによって実行される可能性がある。方法1900のプロセスは、説明における簡潔さ及び明瞭さのために直線的なシーケンスで示されている;しかしながら、それらのうちの任意数のものが、並列的に、非同期的に、又は異なる順序で実行され得ることが想定されている。更に、簡潔さ、明確さ、理解しやすさのために、
図1-18に関して説明された構成要素及びプロセスのうちの多くは、以下において反復も議論もされない可能性がある。ある実装では、
図14のデータ処理システム1400のようなデータ処理システムが、方法1900を実行する可能性がある。
【0203】
[0256] 方法1900は処理ブロック1910から始まり、GPGPU内で実行されるために単一の命令がフェッチされてデコードされる。ある実装において、単一命令は、デコードされた行列命令にデコードされ、それは8ビット浮動小数点フォーマット・オペランドに作用して、GPGPUが並列ドット積演算を実行することを引き起こすことができる。処理ブロック1920において、1つ以上の8ビット浮動小数点フォーマット・オペランド(例えば、BF8オペランド)を使用して、デコードされた行列命令を行列アクセラレータ上で実行するために、一組のパイプライン・コマンドが決定される。
【0204】
[0257] 次いで、処理ブロック1930において、1つ以上の8ビット浮動小数点フォーマット・オペランドを使用して、デコードされた行列命令を実行するために、一組のパイプライン・コマンドが、シストリック・ドット積パイプラインに対してスケジューリングされる。最後に、処理ブロック1940において、一組のパイプライン・コマンドの完了に応答して、デコードされた行列命令は退去する。
【0205】
[0258]
図20は、8ビット浮動小数点フォーマット入力オペランドに関するシストリック・ドット積蓄積のための方法2000の実施形態を示すフローチャートである。方法2000は、ハードウェア(例えば、回路、専用ロジック、プログラマブル・ロジックなど)、ソフトウェア(例えば、処理デバイス上で実行される命令)、又はそれらの組み合わせを含む可能性がある処理ロジックによって実行される可能性がある。方法2000のプロセスは、説明における簡潔さ及び明瞭さのために直線的なシーケンスで示されている;しかしながら、それらのうちの任意数のものが、並列的に、非同期的に、又は異なる順序で実行され得ることが想定されている。更に、簡潔さ、明確さ、理解しやすさのために、
図1-19に関して説明された構成要素及びプロセスのうちの多くは、以下において反復も議論もされない可能性がある。ある実装では、
図16のシストリック・アレイ回路1640又は
図17のシストリック・アレイ回路のようなシストリック・アレイが、方法2000を実行する可能性がある。
【0206】
[0259] 方法2000は処理ブロック2010で始まり、GPGPUの行列演算アクセラレータによって実行されるために、命令に関するソース値及び演算深度がフェッチされる。ある実装において、ソース値は8ビット浮動小数点フォーマット・オペランド(例えば、BF8オペランド)である。処理ブロック2020では、4ビット乗算器を使用して、ソース入力要素の要素ごとの乗算に基づいて、一組の積が生成される。
【0207】
[0260] 処理ブロック2030において、乗算器の出力は、各乗算器に対して32ビット・シフターを使用して正規化される。次いで、処理ブロック2040において、正規化された乗数出力のセットについての合計が計算され、その合計は最も近い偶数に丸められる。最後に、処理ブロック2050において、行列演算アクセラレータの最終深度層において、正規化された乗算出力のセットと初期アキュムレータ値との合計が計算される。次いで、総計は、最も近い偶数への丸めを使用して、宛先出力精度に丸められる。
【0208】
浮動小数点データを8ビット浮動小数点フォーマットへ(又はから)変換すること
[0261] 本件の実施形態は、浮動小数点データを8ビット浮動小数点フォーマット・データへ(又はから)変換するためのものである。
【0209】
[0262] 先に論じたように、ディープ・ラーニングの進歩は、MLモデルが、ニューラル・ネットワークを訓練するために低精度演算を活用することを可能にしている。従来の訓練プラットフォームは、ハイ・パフォーマンス・シストリック・アレイ実装におけるIEEE-754 FP16やBFLOAT16データ・フォーマットをサポートしている。これらの実装は、ドット積演算の長いチェーンの間での精度の損失を防止するために、高精度アキュムレータを使用する。ニューラル・ネットワーク内では、これらの高精度出力は、入力として次の層へ送られる前に、層の後処理中に低精度フォーマットに落とすように丸められるべきである。例えば、ニューラル・ネットワークのための従来のハードウェア実装は、FP32からFP16及びBF16への丸めをサポートしている。
【0210】
[0263] 上述したように、8ビットのFPフォーマット・データ(BFLOAT8、1s-5e-2mなど)は、訓練及び推論パフォーマンスを向上させることができる。BFLOAT8 FMAのハードウェア実装は、数値精度を維持するためにFP32又はFP16アキュムレータの何れかを使用することができる。しかしながら、従来のシステムは、後処理中にFP32又はFP16のFMA出力をBFLOAT8に丸めるためのハードウェア・サポートを持っていない。従来のシステムは、この丸め演算を実行するためにシーケンス演算及びビット単位の命令を使用する、より遅いソフトウェア実装を提供する可能性がある。例えば、この機能は、演算命令、ビット単位命令、及び比較命令のシーケンスを使用してソフトウェアでエミュレートすることができる。このような遅いソフトウェア実装は、ディープ・ニューラル・ネットワーク・トレーニングにおいてしばしば使用される、より小さな不規則なカーネルに対するパフォーマンス・ペナルティをもたらすことになる。
【0211】
[0264] 実施形態は、浮動小数点データを8ビット浮動小数点フォーマット・データに変換する命令を提案する。ある実装において、実施形態の変換命令は、IEEE-754 FP32やFP16からBFLOAT8へのダウン変換を、最近接偶数への丸め(nearest-to-even rounding)により実行する。ある実装において、実施形態の変換命令は、BFLOAT8メモリ・フォーマットを用いる混合精度演算処理を促すために、BFLOAT8からFP32やFP16へのアップ・コンバートを実行する。
【0212】
[0265] 実施形態は、浮動小数点データを8ビット浮動小数点フォーマット・データに変換するための命令及びハードウェア・ソリューションを提供する。本件における実施形態の命令及びハードウェア技術は、長い命令シーケンスを、プログラマによって使用されることが可能な単一の命令に置き換える。これは、ニューラル・ネットワークにおける不規則なカーネル演算に対するパフォーマンス改善をもたらすことができる。また、実施形態は、ニューラル・ネットワークの訓練スループットを加速することが可能な混合精度の8ビット浮動小数点フォーマット(例えば、BFLOAT8)訓練を可能にする。
【0213】
[0266]
図21は、実施形態に従う命令パイプライン2100によって実行される8ビットFPフォーマット変換処理2110を示すブロック図である。命令パイプライン2100は、8ビットFPフォーマット変換処理2110を実行するように構成することができる。命令パイプライン2100は、ハードウェア命令を加速するために使用することが可能であり、ハードウェア命令をフェッチ及びデコードすることが可能な命令フェッチ&デコード・ユニット1421と、コントローラ・ユニット2120(スケジューラ・コントローラ1422など)とを含むことが可能であり、コントローラ・ユニットは、デコードされた命令を、演算ブロック1424A-1424N(まとめて演算ブロック1424と称する)内の1つ以上の実行ユニット及び/又は行列アクセラレータ1423に対してスケジューリングすることができる。命令パイプライン2100はまた、8ビットFPフォーマット変換処理2110のハードウェア命令においてエンコードされた8ビットFPフォーマットに従って、入力データを、演算ブロック1424及び/又は行列アクセラレータ1423へルーティングするために、マルチプレクサ(muxes)の集まりのような選択回路2130を含むことが可能である。
【0214】
[0267] 一実施形態において、ハードウェア命令は演算ブロック1424に対してスケジューリングされ、及び/又は行列アクセラレータ1423にオフロードすることができる(例えば、シストリック・アレイ回路2140を使用する演算のため計算のためである)。8ビットFPフォーマット変換処理2110を実行するための1つ以上のハードウェア命令及び関連するデータは、メモリ2150に記憶することが可能である。また、ハードウェア命令の出力も、メモリ2150に記憶することができる。メモリ2150は、
図14のように、システム・メモリ1412、GPGPUメモリ1418、又は1つ以上のキャッシュ・メモリ1427、1430を含む、本件で説明される何らかのメモリであるとすることが可能である。
【0215】
[0268] 一実施形態において、演算ブロック1424は、処理ユニット2160を使用して、8ビットFPフォーマット変換処理2110を実行するように、1つ以上のハードウェア命令を実行することができる。処理ユニット2160は、8ビットFPフォーマット変換処理を実行するように構成することが可能な、プログラマブル&固定機能ハードウェアの組み合わせを含むことが可能である。幾つかの実装において、処理ユニット2160は、ベクトル処理ユニット(VPU)であってもよい。幾つかの実装において、処理ユニット2160は、浮動小数点ユニット(FPU)であってもよい。処理ユニット2160は、変換回路2162、最近接丸め(RNE)演算回路2164、及び特殊処理回路2166を含んでもよい。
【0216】
[0269] 実施形態では、8ビットFPフォーマット変換処理2110を実行するためのハードウェア命令は、IEEE-754 FP32又はFP16データとBFLOAT8フォーマットとの間のデータ変換を提供する。データ変換は、FP32/FP16から8ビットFPフォーマット(例えば、BF8)へのダウン変換、又は8ビットFPフォーマット(例えば、BF8)からFP32/FP16へのアップ・コンバートを含むことが可能である。上述の
図15は、実施形態の8ビットFPフォーマットとして利用することが可能な例示的なBF8バイナリ・フォーマットを示す。BFLOAT8バイナリ・フォーマットは、符号、指数、仮数ビットとして表現される。5ビットの指数は、6.1e-05から5.7344e+04の間のノーマルな浮動小数点値を表すことが可能な15のオフセット値を使用する。フォーマットは、ダイナミック・レンジを、1.5e-05という最小の表現可能な値まで下方に拡張するサブノーマル値もサポートする。
【0217】
[0270] FP32又はFP16からBF8へ下方に変換する場合に、値は、最近接偶数丸め(round-to-nearest-even, RTNE)プロセスを用いて丸められる。FP32又はFP16からの変換の両方の場合において、サブノーマルがサポートされる。BF8からFP16又はFP32の何れかへアップ・コンバートする場合に、8ビットFPフォーマット(BF8)の指数値は適切にスケーリングされ、仮数はゼロ拡張される。
【0218】
[0271] 実施形態では、変換回路2162は、上述の変換プロセスを実行するために、プログラマブル&固定機能ハードウェアを含むことが可能である。RNE丸め回路2164は、変換されたデータのRNE丸めを実行するために、プログラマブル&固定機能ハードウェアを含むことが可能である。特殊処理回路2166は、例えば、アンダーフロー、オーバーフロー、非ノーマル化のような、データを変換する及び/又は丸める場合に遭遇したコーナー・ケースに対処するプログラマブル&固定機能ハードウェアを含むことが可能である。
【0219】
[0272] 幾つかの実装において、本件で説明される8ビットFPフォーマット・データの変換のための命令は、以下の形式をとることができる:
[0273] mov dst, src0
[0274] 変換回路2162が、FP32/FP16からBF8にダウン・コンバートされる場合、命令は、出力に関してサブノーマル値を保持すべきである。幾つかの実施形態において、特殊処理回路2166は、オーバーフローをもたらす飽和挙動(saturation behavior)を示す可能性がある(即ち、大きな値がBF8_MAXに飽和しない)。RNE丸め回路2164は、最近接偶数丸めプロセスを使用して仮数を丸めるべきである。FP32、FP16からBF8へのダウン・コンバートを実行する場合に、8ビットFPフォーマット・データの変換のための命令の幾つかの例示的な実装を以下に詳細に示す:
[0275] mov <bf8>, <fp32>
[0276] mov <bf8>, <fp16>
[0277] 変換回路2162が、FP32/FP16からBF8にアップ・コンバートされる場合、指数値は、再スケーリングされ、値は、再正規化される。仮数ビットは、LSBビットに関してゼロで拡張される。BF8からFP32又はFP16へのアップ・コンバートを実行する場合に、8ビットFPフォーマット・データの変換のための命令の幾つかの例示的な実装を以下に詳細に示す:
[0278] mov <fp32>, <bf8>
[0279] mov <fp16>, <bf8>
[0280]
図22Aは、本件で説明される実施形態に従って、処理ユニットによって実行することが可能な命令2200を示す。
図22Aは、8ビット浮動小数点フォーマット入力オペランドを変換するmov命令のフィールドを示し、これは、一実施形態によって提供されるVPU又はFPUのような処理ユニットによって実行可能である。
図22Aはmov命令2200のフィールドを示し、これは実行されると、処理ユニットが、mov命令を、8ビット浮動小数点フォーマット入力オペランド(例えば、BF8オペランド)へ又はそれから変換することを引き起こす。mov命令は、その第2オペランドによって参照されるデータ・アイテム(即ち、レジスタの内容、メモリの内容、又は定数値)を、その第1オペランドによって参照されるロケーション(即ち、レジスタ又はメモリ)にコピーする。
【0220】
[0281] 一実施形態において、命令2200は、オペコード・フィールド2202と、宛先2204及びソース2206(src)を指定するためのオペランド・フィールドとを含む。
【0221】
[0282] オペコード・フィールド2202は、命令2200を、実行ロジックに対して識別するオペコードを指定することができる。一実施形態において、オペコード・フィールド2202は1つ以上のビットを含み、それらがイネーブルにされると、命令が演算ブロック(例えば、演算ブロック1424)の処理ユニットによって実行されるべきであることを示す。
【0222】
[0283] 宛先2204及びソース2206(src)は、計算が書き込まれる宛先と、ソース・データを取り出すことが可能なロケーションとを指定するために使用することが可能である。一実施形態において、宛先2204は、データが書き込まれるレジスタを指定することができる。一実施形態において、宛先2204は、スカラー・レジスタであるとすることが可能であるが、一部の実施形態では、宛先は、複数のチャネルからの出力を格納するベクトル・レジスタであるとすることも可能である。ソース(src)2206は、ソース・データの1つ以上のチャネルを含むレジスタ又は即時値であるとすることが可能である。
【0223】
[0284] 幾つかの実施形態において、図示されたもの以外の追加のフィールドが存在してもよい。例えば、一実施形態では、ソース・オペランドの数値修正を指定するソース修飾子フィールドが存在する。ソース・オペランドの各データ要素の値は、オプションとして、その絶対値をとらせることが可能であり、及び/又はその符号を、実行パイプラインへ送る前に反転させることが可能である。絶対値修飾子は、保証された負の値を生成することができるように、ネゲート修飾子の前に適用されることが可能である。一実施形態では、飽和フィールドが存在し、これは宛先の飽和を抑制するために使用することができる。飽和がイネーブルにされる場合、宛先レジスタへの出力データは飽和にされる。具体的な飽和演算は、宛先データ・タイプに依存する。飽和は、データ・タイプの飽和ターゲット範囲外にある任意のデータを、ターゲット範囲で最も近い表現値に変換する演算である。
【0224】
[0285]
図22Bは、一実施形態によるプログラム・コード・コンパイル・プロセス2215を示す。一実施形態において、ソフトウェア・プログラムのソース・コード・レベル記述2220は、複数レベルのコンパイルを含むことが可能なコンパイラ2230において、処理ロジックによって実行される8ビットFPフォーマット変換命令を含むか又は指定する演算2240を有するレベルにコンパイルされる。演算2240は、中間言語で指定された演算であるとすることが可能であり、或いは、機械学習フレームワークによって提供されるプリミティブのような演算フレームワークのプリミティブを参照するプログラム・コードであるとすることが可能である。次いで、8ビットFPフォーマット変換命令を含むか又は指定する演算2240は、追加のコンパイラ2250(シェーダー・コンパイラであってもよい)によって、マシン・レベルのオブジェクト・コード2260に更にコンパイルされることが可能であり、そのオブジェクト・コードは、本件で説明されるように、コンピュータ・ブロックの処理ユニット(例えば、VPU、FPU)によって実行されるべき8ビットFPフォーマット変換命令を含む。
【0225】
[0286] 以下は、実施形態による浮動小数点データを8ビット浮動小数点フォーマット・データ(例えば、BF8オペランド)へ変換するか又はそれから変換するための疑似コードの例である。
【0226】
【数4】
[0287]
図23は、浮動小数点データを8ビット浮動小数点フォーマット・データに変換する命令を実行する方法2300の実施形態を示すフローチャートである。方法2300は、ハードウェア(例えば、回路、専用ロジック、プログラマブル・ロジックなど)、ソフトウェア(例えば、処理デバイス上で実行される命令)、又はそれらの組み合わせを含む可能性がある処理ロジックによって実行される可能性がある。方法2300のプロセスは、説明における簡潔さ及び明瞭さのために直線的なシーケンスで示されている;しかしながら、それらのうちの任意数のものが、並列的に、非同期的に、又は異なる順序で実行され得ることが想定されている。更に、簡潔さ、明確さ、理解しやすさのために、
図1-22に関して説明された構成要素及びプロセスのうちの多くは、以下において反復も議論もされない可能性がある。ある実装では、
図14のデータ処理システム1400のようなデータ処理システムが、方法2300を実行する可能性がある。
【0227】
[0288] 方法2300は処理ブロック2310で始まり、GPGPU内で実行されるために単一の命令がフェッチされてデコードされる。ある実装において、単一命令は、デコードされた命令にデコードされ、GPGPUが、オペランドの8ビット浮動小数点フォーマットへの/からの変換を実行することを引き起こす。処理ブロック2320において、一組のコマンドは、GPGPUの演算ブロック上で、デコードされたベクトル命令を実行するように決定される。
【0228】
[0289] 処理ブロック2330において、一組のコマンドは、デコードされた命令を実行して、オペランドの8ビット浮動小数点フォーマットへの/からの変換を実行するために、GPGPUの演算ブロックに対してスケジューリングされる。次いで、処理ブロック2340において、デコードされた命令は、一組のコマンドの完了に応じて退去する。
【0229】
[0290]
図24は、浮動小数点データを8ビット浮動小数点フォーマット・データに変換するための方法2400の実施形態を示すフローチャートである。方法2400は、ハードウェア(例えば、回路、専用ロジック、プログラマブル・ロジックなど)、ソフトウェア(例えば、処理デバイス上で実行される命令)、又はそれらの組み合わせを含む可能性がある処理ロジックによって実行される可能性がある。方法2400のプロセスは、説明における簡潔さ及び明瞭さのために直線的なシーケンスで示されている;しかしながら、それらのうちの任意数のものが、並列的に、非同期的に、又は異なる順序で実行され得ることが想定されている。更に、簡潔さ、明確さ、理解しやすさのために、
図1-23に関して説明された構成要素及びプロセスのうちの多くは、以下において反復も議論もされない可能性がある。ある実装において、
図21の処理ユニット2160のような処理ユニットは、方法2400を実行することが可能である。
【0230】
[0291] 方法2400は、処理ブロック2410から始まり、命令のソース値がGPGPUの演算ブロックによって実行されるようにフェッチされる。ある実装において、ソース値は異なるデータ形式に変換され、ソース値は少なくとも1つの8ビット浮動小数点形式オペランドであるか、又は8ビット浮動小数点形式オペランドに変換されるものである。決定ブロック2420において、ソース値が0、無限大、又は非数(not-a-number, NaN)に等しいかどうかが決定される。そうであった場合、方法2400は処理ブロック2425に進み、ソース値は、特別なユース・ケース値(例えば、0、無限大など)として宛先に返される。
【0231】
[0292] 決定ブロック2420において、ソース値が0、無限大、又はNaNに等しくない場合、方法2400は処理ブロック2430に進み、ソース値は、ソース値をスケーリングし、正規化し、変換することによって、宛先の符号付きの大きさのフォーマットに変換される。次いで、処理ブロック2440において、最近接偶数丸めプロセスが、変換されたソース値に適用される。
【0232】
[0293] 決定ブロック2450において、オーバーフロー、アンダーフロー、又は非・正常状態が発生したかどうかが決定される。そうであった場合、方法2400は処理ブロック2460に進み、変換され丸められたソース値は、特別なユース・ケース値(例えば、0、無限大など)として返される。一方、オーバーフロー、アンダーフロー、又は非・正常状態が発生していない場合、方法2400は処理ブロック2470に進み、変換され丸められたソース値が宛先値として返される。
【0233】
浮動小数点フォーマット・データ値に対する効率的な確率的丸めの実行
[0294] 本件における実施形態は、浮動小数点フォーマット・データ値に対して効率的な確率的丸めを実行することをもたらす。
【0234】
[0295] ディープ・ラーニング・トレーニングは8ビット浮動小数点フォーマット(例えば、BF8、1s-5e-2m)に移行しているので、精度の損失に起因して導入される数値誤差は、MLモデル収束に著しい影響を与える可能性がある。精度損失を補償する方法の一つは、ニューラル・ネットワークの次の層に入力として渡される前に、FP32又はFP16の累積FMA出力をBF8に変換する際に‘丸め(rounding)’を使用することである。
【0235】
[0296] しかしながら、ドット積演算の長いチェーンにわたって蓄積された丸め誤差もまた、ディープ・ニューラル・ネットワークのトレーニングで使用される反復解法の数値安定性に対して懸念がある。この問題は、FP16(=4.88e-04)及びBF16(=3.90e-03)と比較して、BF8では機械の‘ε’(=0.125)がより大きいので、より低い精度で悪化する。
【0236】
[0297] 複数のワークロードにわたってBF8データ・フォーマットを使用する場合、確率的丸め(stochastic rounding)は、丸め誤差の蓄積を減らし、収束の達成を支援することができる。確率的丸めは、非決定論的な丸めプロセスであって、実数を次に大きな又は小さな浮動小数点数へ、確率(1マイナスその数までの相対距離)で丸める丸めプロセスを指す。確率的丸めのための本格的なハードウェア・サポートは、構築と検証に費用がかかる浮動小数点擬似乱数生成器を含むであろう。
【0237】
[0298] しかしながら、ディープ・ニューラル・ネットワーク学習の状況では、ディープ・ラーニング・トレーニングは、乱数発生器に関してより少ない制約しかなく、また、ソルバーの数値安定性に影響を及ぼすことなく乱数をしばしば再利用することができる。軽減された乱数発生器制約に基づいて、実施形態は、ソフトウェアで生成され管理される低い精度のランダム・ビット(例えば、FP16→BF8の場合は8ビット、FP32→FP16の場合は16ビット)を用いて、確率的丸めを加速するために、ハードウェアと命令の組み合わせを提供する。
【0238】
[0299] 本件における実施形態は、算術演算のより高い精度の出力が、より低い精度のフォーマット(例えば、BF8(1s-5e-2m)、HF8(1s4e3m)、FP16及びBF16浮動小数点フォーマット)に変換される場合に、確率的丸め演算を適用するために1つ以上の命令を提供する。これらの命令は、ソフトウェア・ベースの疑似乱数発生器(PRNG)によって生成された整数の乱数を含む、より高い精度の1つ又は2つのソース・オペランドと第3入力オペランドを含む可能性がある。幾つかの実装において、PRNGソフトウェアは、xoroshiro128++のような安価なPSNRアルゴリズム又は同等なものを使用することができる。出力は、命令で指定される宛先データ・フォーマットで格納される。
【0239】
[0300] 本件における実施形態の命令及びハードウェアは、広範な命令シーケンスを、ニューラル・ネットワーク・トレーニングのパフォーマンスの改善された速度及び効率のために、プログラマによって使用され得る単一の命令で置き換える技術的利点を提供する。実施形態はまた、ハードウェアの複雑さを低減するために、PRNGを丸め演算から切り離す一方で、プログラマが、乱数を生成して管理する(キャッシュして再利用する)ためのアルゴリズムを使用することを可能にする。更に、実施形態は、ニューラル・ネットワーク・トレーニングの速度及び効率を改善するために、BFLOAT8混合精密トレーニングの逆伝搬を加速する。
【0240】
[0301]
図25は、実施形態による、命令パイプライン2500によって実行される確率的丸め演算2510を用いて8ビットFPフォーマット変換を示すブロック図である。命令パイプライン2500は、確率的丸め演算2510を用いて8ビットFPフォーマット変換を実行するように構成することができる。命令パイプライン2500は、ハードウェア命令を加速するために使用することが可能であり、ハードウェア命令をフェッチ及びデコードすることが可能な命令フェッチ&デコード・ユニット1421と、コントローラ・ユニット2520(スケジューラ・コントローラ1422など)とを含むことが可能であり、コントローラ・ユニットは、デコードされた命令を、演算ブロック1424A-1424N(まとめて演算ブロック1424と称する)内の1つ以上の実行ユニット及び/又は行列アクセラレータ1423に対してスケジューリングすることができる。命令パイプライン2500はまた、確率的丸め演算2510を用いる8ビットFPフォーマット変換のハードウェア命令においてエンコードされた8ビットFPフォーマットに従って、入力データを、演算ブロック1424及び/又は行列アクセラレータ1423へルーティングするために、マルチプレクサ(muxes)の集まりのような選択回路2530を含むことも可能である。
【0241】
[0302] 一実施形態において、ハードウェア命令は演算ブロック1424に対してスケジューリングされ、及び/又は行列アクセラレータ1423にオフロードすることができる(例えば、シストリック・アレイ回路2540を使用する演算のためである)。確率的丸め演算2510を用いて8ビットFPフォーマット変換処理2110を実行するための1つ以上のハードウェア命令及び関連するデータは、メモリ2550に記憶することが可能である。また、ハードウェア命令の出力も、メモリ2550に記憶することができる。メモリ2550は、
図14のように、システム・メモリ1412、GPGPUメモリ1418、又は1つ以上のキャッシュ・メモリ1427、1430を含む、本件で説明される何らかのメモリであるとすることが可能である。
【0242】
[0303] 一実施形態において、演算ブロック1424は、処理ユニット2560を使用して、確率的丸め演算2510を用いて8ビットFPフォーマット変換を実行するために、1つ以上のハードウェア命令を実行することができる。処理ユニット2560は、確率的丸め演算を用いる8ビットFPフォーマット変換を実行するように構成することが可能な、プログラマブル&固定機能ハードウェアの組み合わせを含むことが可能である。幾つかの実装において、処理ユニット2560は、ベクトル処理ユニット(VPU)であってもよい。幾つかの実装において、処理ユニット2560は、浮動小数点ユニット(FPU)であってもよい。処理ユニット2560は、変換回路2562、確率的丸め回路2564、及び特殊処理回路2166を含んでもよい。
【0243】
[0304] 実施形態において、確率的丸め演算を用いて8ビットFPフォーマット変換を実行する命令は、より高い精度の浮動小数点から、より低い精度の浮動小数点への変換中に、確率的丸めを実行することができる。命令は以下の形式をとることができる:
[0305] srnd dest, src0, src1
[0306] この命令では、src0は、高精度浮動小数点入力を含むソース・オペランドであり、src1は、丸めハードウェアによって使用されるランダム整数を含む。ランダム整数は、xoroshiro128++のようなPRNGアルゴリズムを使用してソフトウェアによって生成される。丸め演算の出力は、命令オペコードで指定される低精度の浮動小数点形式でdstに返される。
【0244】
[0307] 変換回路2562によって実行される変換中に、src0の正規化された符号-大きさ表現が生成される。変換回路2562は、変換処理を実行するためのプログラマブル&固定機能ハードウェアを含むことが可能である。次いで、確率的丸め回路2564は、固定小数点加算器2565を使用して、src1からのランダム整数を、src0の正規化された符号-大きさ表現に追加して、中間結果を生成する。ランダム整数は、PRNGアルゴリズムを使用してソフトウェアによって生成されるPRNG 2570である。次いで、確率的丸め回路2564は、何らかの指数調整を行った後に、中間結果を、宛先仮数フォーマットのサイズで切り捨てる。確率的丸め回路2564は、確率的丸めプロセスを実行するために、プログラマブル&固定機能ハードウェアを含むことが可能である。特殊処理回路2566は、例えば、アンダーフロー、オーバーフロー、非ノーマル化のような、データを変換する及び/又は丸める場合に遭遇したコーナー・ケースに対処するプログラマブル&固定機能ハードウェアを含むことが可能である。
【0245】
[0308] 幾つかの実施形態において、丸め演算に使用されるランダム・ビットの数は、命令オペコードで定義される入力及び出力データ・フォーマットに依存する可能性がある。以下の表1は、例示的なサポートされる入力及び出力フォーマットと丸め演算を実行するために使用されるランダム・ビット数のリストを提供する。
【0246】
【数5】
表1
[0309] 幾つかの実施形態において、乱数の幅は、ソース及び宛先データ・フォーマットに応じて変化する可能性がある。ソース・データ・フォーマットがNビットの仮数を有し、宛先データ・フォーマットがKビットの仮数を有すると仮定すると、確率的丸め回路2564で丸めを実行するために、(N-K)ビットの乱数を使用することができる。
【0247】
[0310]
図26は、実施形態による、仮数及び乱数の符号-大きさ表現の固定小数点加算2600を示すブロック図である。ソース仮数2601(先頭が1である)及び乱数2605が、加算結果2610を生成するために加算されるように示されている。ソース仮数は、Nビットの仮数2602を含み、仮数のうちのKビット2604は、宛先フォーマットで使用される仮数ビット数を表す。加算の前に、乱数2605のビットは、ソース仮数2601の(N-K)個の最下位ビットに整列される。加算結果2610は、2つの先頭ビット(X)と仮数ビット(x)の残りの加算となる加算結果を示す。
【0248】
[0311]
図27Aは、本件で説明される実施形態に従って、処理ユニットによって実行することが可能な命令2700を示す。
図27Aは、確率的丸めを使用して浮動小数点フォーマット入力オペランドを変換する命令のフィールドを示す。命令は、一実施形態によって提供されるVPU又はFPUのような処理ユニットによって実行可能である。
図27Aは、命令2700のフィールドを示し、命令は、実行されると、確率的丸めを使用して浮動小数点フォーマット入力オペランドを変換する命令を、処理ユニットに実行させる。一実施形態では、命令2700は、オペコード・フィールド2702と、宛先2704、第0ソース(src0)2706、及び第1ソース(src1)2708を指定するためのオペランド・フィールドとを含む。
【0249】
[0312] オペコード・フィールド2702は、実行論理に対して命令2700識別するオペコードを指定することができる。一実施形態では、オペコード・フィールド2702は1つ以上のビットを含み、それは、イネーブルされた場合に、命令が演算ブロック(例えば、演算ブロック1424)の処理ユニットによって実行されるべきであることを示す。
【0250】
[0313] 宛先2704、第0ソース2706(src0)、及び第1ソース2708(src1)は、計算が書き込まれる宛先と、ソース・データを取り出すことが可能なロケーションとを指定するために使用されることが可能であるできる。一実施形態において、宛先2704は、データが書き込まれるレジスタを指定することができる。一実施形態において、宛先2704は、スカラー・レジスタであるとすることが可能であるが、一部の実施形態では、宛先は、複数のチャネルからの出力を格納するベクトル・レジスタであるとすることも可能である。第0ソース(src0)2706と第1ソース(src1)2708は、ソース・データの1つ以上のチャネルを含むレジスタ又は即時値であるとすることが可能である。
【0251】
[0314] 幾つかの実施形態において、図示されたもの以外の追加のフィールドが存在してもよい。例えば、一実施形態では、ソース・オペランドの数値修正を指定するソース修飾子フィールドが存在する。ソース・オペランドの各データ要素の値は、オプションとして、その絶対値をとらせることが可能であり、及び/又はその符号を、実行パイプラインへ送る前に反転させることが可能である。絶対値修飾子は、保証された負の値を生成することができるように、ネゲート修飾子の前に適用されることが可能である。一実施形態では、飽和フィールドが存在し、これは宛先の飽和を抑制するために使用することができる。飽和がイネーブルにされる場合、宛先レジスタへの出力データは飽和にされる。具体的な飽和演算は、宛先データ・タイプに依存する。飽和は、データ・タイプの飽和ターゲット範囲外にある任意のデータを、ターゲット範囲で最も近い表現値に変換する演算である。
【0252】
[0315]
図27Bは、一実施形態によるプログラム・コード・コンパイル・プロセス2715を示す。一実施形態では、ソフトウェア・プログラムのソース・コード・レベル記述2720は、複数レベルのコンパイルを含むことが可能なコンパイラ2730において、処理ロジックによって実行される確率的丸めを使用するFPフォーマット変換命令を含むか又は指定する演算2740を有するレベルにコンパイルされる。演算2740は、中間言語で指定された演算であるとすることが可能であり、或いは、機械学習フレームワークによって提供されるプリミティブのような演算フレームワークのプリミティブを参照するプログラム・コードであるとすることが可能である。次いで、確率的丸め命令を用いるFPフォーマット変換を含むか又は指定する演算2740は、シェーダー・コンパイラとすることが可能な追加のコンパイラ2750によって、マシン・レベルのオブジェクト・コード2760に更にコンパイルされることが可能であり、そのオブジェクト・コードは、本件で説明されるように、コンピュータ・ブロックの処理ユニット(例えば、VPU、FPU)によって実行される確率的丸め命令を伴うFPフォーマット変換を含む。
【0253】
[0316] 以下は、実施形態による浮動小数点フォーマット・データ値に対する効率的な確率的丸めを実現するための第1の疑似コード例である。
【0254】
【数6】
[0317] 以下は、実施形態による浮動小数点データ値に対する効率的な確率的丸めを実現するための第2の簡略化された疑似コード例である。
【0255】
【数7】
[0318]
図28は、浮動小数点値に対して効率的な確率的丸めを実行する命令を実行するための方法2800の実施形態を示すフローチャートである。方法2800は、ハードウェア(例えば、回路、専用ロジック、プログラマブル・ロジックなど)、ソフトウェア(例えば、処理デバイス上で実行される命令)、又はそれらの組み合わせを含む可能性がある処理ロジックによって実行される可能性がある。方法2800のプロセスは、説明における簡潔さ及び明瞭さのために直線的なシーケンスで示されている;しかしながら、それらのうちの任意数のものが、並列的に、非同期的に、又は異なる順序で実行され得ることが想定されている。更に、簡潔さ、明確さ、理解しやすさのために、
図1-27に関して説明された構成要素及びプロセスのうちの多くは、以下において反復も議論もされない可能性がある。ある実装では、
図14のデータ処理システム1400のようなデータ処理システムが、方法2300を実行する可能性がある。
【0256】
[0319] 方法2800は処理ブロック2810で始まり、GPGPU内で実行されるために単一の命令がフェッチされてデコードされる。ある実装において、単一命令は、デコードされた命令にデコードされ、GPGPUが、確率的丸めを用いて8ビット浮動小数点フォーマットの変換を実行することを引き起こす。次いで、処理ブロック2820において、一組のコマンドは、GPGPUの演算ブロック上で、デコードされたベクトル命令を実行するように決定される。
【0257】
[0320] 処理ブロック2830において、一組のコマンドは、デコードされた命令を実行して、確率的丸めを用いる8ビット浮動小数点フォーマットの変換を実行するために、GPGPUの演算ブロックに対してスケジューリングされる。最後に、処理ブロック2840において、デコードされた命令は、一組のコマンドの完了に応じて退去する。
【0258】
[0321]
図29は、浮動小数点値に対して効率的な確率的丸めを実行するための方法2900の実施形態を示すフローチャートである。方法2900は、ハードウェア(例えば、回路、専用ロジック、プログラマブル・ロジックなど)、ソフトウェア(例えば、処理デバイス上で実行される命令)、又はそれらの組み合わせを含む可能性がある処理ロジックによって実行される可能性がある。方法2900のプロセスは、説明における簡潔さ及び明瞭さのために直線的なシーケンスで示されている;しかしながら、それらのうちの任意数のものが、並列的に、非同期的に、又は異なる順序で実行され得ることが想定されている。更に、簡潔さ、明確さ、理解しやすさのために、
図1-28に関して説明された構成要素及びプロセスのうちの多くは、以下において反復も議論もされない可能性がある。ある実装において、
図25の処理ユニット2560のような処理ユニットは、方法2900を実行することが可能である。
【0259】
[0322] 方法2900は、処理ブロック2910から始まり、ソース値がGPGPUの演算ブロックによって実行されるように、命令のためにフェッチされる。ある実装において、ソース値は、より高い精度の浮動小数点からより低い精度の浮動小数点へ変換される。決定ブロック2920において、ソース値が0、無限大、又はNaNに等しいかどうかが決定される。そうであった場合、方法2900は処理ブロック2925に進み、ソース値は、特別なユース・ケース値として宛先に返される。決定ブロック2920において、ソース値が0、無限大、又はNaNに等しくない場合、方法2900は処理ブロック2930に進み、ソース値は、宛先の符号-大きさフォーマットに変換され、変換されたソース値は正規化される。
【0260】
[0323] 続いて、処理ブロック2940において、変換され正規化されたソース値に、乱数が加えられる。ある実装では、乱数は、ソース及び宛先のオペランドとあて先オペランドのデータ・フォーマットに基づいて決定されるサイズを有する。ある実装では、乱数はPRNGソフトウェアから得られる。処理ブロック2950において、結果の和の指数調整が実行され、結果の和は、結果の宛先値を生成するために、宛先オペランド仮数フォーマットのサイズに切り捨てられる。
【0261】
[0324] 決定ブロック2960において、オーバーフロー、アンダーフロー、又は非・正常状態が発生したかどうかが決定される。そうであった場合、方法2900は処理ブロック2970に進み、特別なユース・ケース値が、結果の宛先値として返される。一方、オーバーフロー、アンダーフロー、又は非・正常状態が発生していない場合、方法2900は処理ブロック2980に進み、結果の宛先値が返される。
【0262】
ハイブリッド浮動小数点シストリック演算
[0325] 本件における実施形態は、ハイブリッド浮動小数点シストリック演算をもたらす。
【0263】
[0326] ディープ・ラーニングのアルゴリズムの進歩により、モデルはニューラル・ネットワークの訓練に低精度演算を利用することができるようになった。ディープ・ニューラル・ネットワークの雑音レジリエンス特性はまた、種々のディープ・ラーニング・タスクに利用できるカスタム・データ・フォーマットの実験を可能にしている。ディープ・ラーニング・コミュニティで広く受け入れられ且つハードウェア製造業者によって適用されているこのようなカスタム・データ・フォーマットの1つは、BFLOAT16である。
【0264】
[0327] より小さなビット幅(8ビット以下)がディープ・ラーニングで使用されるので、データ・フォーマットの更なるカスタマイズが、ビットの効率的な割り当てのために実装される可能性がある。例えば、バックプロパゲーション中に、より広い分布を有する傾向のある誤差勾配は、より高いダイナミック・レンジ(即ち、より大きな指数)を有するデータ・フォーマットを利用する一方、フォワード(又は、推論)経路は、数値誤差を低減するために、より高い数値精度(即ち、より大きな仮数)から恩恵を受けることができる、ということが知られている。この挙動は、エッジ・デバイスに最適化された、より小さなモデル(より少ないモデル・パラメータ)においてより明白である。より小さなビット幅のデータ・フォーマットでは、これはダイナミック・レンジと数値精度の間のトレード・オフを招く。
【0265】
[0328] 指数と仮数の間のビット配分の取り引きに加えて、浮動小数点フォーマットは、数値分布の適切な指数バイアス又はゼロ点を選択することによって、数値分布をカスタマイズすることも可能である。ディープ・ラーニング・アプリケーションで使用されるほとんどのテンソルの典型的な(0近辺の)ガウス型データ分布が与えられる場合、フォーマットによって表現することが可能なより小さな値の数を最大化するための指数バイアスが、典型的には選択される。これは、数値分布の重要な部分を優先することによって、より小さなダイナミック・レンジを持つことを部分的に補うことができる。
【0266】
[0329] ディープ・ニューラル・ネットワークを訓練するために使用することが可能な2つの8ビット浮動小数点表現が導入されている。それらのフォーマットの1つであるBFLOAT8は、数の対称的な分布を有する‘s1.e5.m2'バイナリ表現を使用する。もう1つのフォーマットHFLOAT8は、より小さな数値の方に偏った数値分布を有する非対象指数バイアスを伴う‘s1.e4.m3'形式で表現される。訓練パイプラインの様々な部分に対処するために、BFLOAT8及びHFLOAT8フォーマットの組み合わせを一緒に使用することは、改善されたモデル精度をもたらす可能性がある。単一のトレーニング・フローへの複数のデータ・フォーマットの混合は、異なるバイナリ・フォーマットで表現された入力行列間でハイブリッド浮動小数点演算をもたらす可能性がある。業界が8ビット及び8ビット以下のデータ・フォーマットに移行するにつれて、この種のハイブリッド演算はより一般的になるであろう。しかしながら、浮動小数点ハードウェアを有する従来のシステムは、異なるバイナリ符号化を使用したり、或いは従来式でない指数バイアスを使用したりするオペランド間の算術演算をサポートしない。
【0267】
[0330] 実施形態は、DPASハードウェアへの拡張を提供して、入力オペランドのためのカスタム・バイナリ符号化をサポートし、ハイブリッド浮動小数点演算を可能にすることによって、この技術的問題に対処する。指数サイズ及び/又は指数バイアスのような入力オペランドのバイナリ・フォーマット情報は、ハードウェアに組み込むことが可能であり、或いは命令符号化の一部としてオプションとして表現することが可能である。実施形態のハードウェア拡張は、要求された算術演算を実行する前に、その情報を利用して、入力引数を再バイアスし、共通の内部フォーマットに変換することができる。
【0268】
[0331]
図30は、実施形態による、異なるバイナリ符号化及び指数バイアスを使用する2つの8ビット浮動小数点フォーマットを示すブロック図である。左側のBFLOAT8(又はBrain-Float8)フォーマット3000は、s1.e5.m2フォーマットを使用するBFLOAT8バイナリ・フォーマットを示す。s1.e5.m2フォーマットは、1つの符号ビット3002、5つの指数ビット3004、及び2つの仮数ビット3006を含む。右側のHFLOAT8(又はHybrid-Float8)フォーマット3010は、s1.e4.m3フォーマットを使用するHFLOAT8バイナリ・フォーマットを示す。s1.e4.m3フォーマットは、1つの符号ビット3012、4つの指数ビット3014、及び3つの仮数ビット3016を含む。更に、HFLOAT8フォーマット3010は、より大きな指数バイアスを使用して、数値分布を、より小さな数値の方へシフトさせる。これら2つのフォーマットの相違は以下の表2に要約される。
【0269】
【数8】
表2
[0332] 本件における実施形態のハイブリッド浮動ハードウェアは、精度を最大化するために、トレーニング・パイプラインの様々な部分に最も適した利用可能な浮動小数点フォーマットのリストからアプリケーションが選択することを可能にすることによって、上述の欠点を克服する技術的利点を提供する。更に、実施形態は、ハードウェアに対する増加変更とともに複数のデータ・フォーマットをサポートすることができる。これは、プロセッサ・パフォーマンスとニューラル・ネットワーク・トレーニング・スループットを改善する。
【0270】
[0333]
図31は、実施形態による、命令パイプライン3100によって実行されるハイブリッド8ビットFPフォーマット・シストリック演算を示すブロック図である。命令パイプライン3100は、ドット積演算のようなハイブリッド8ビットFPフォーマット・シストリック演算3110を実行するように構成されることが可能であるが、それに限定されない。2つのベクトルのドット積は、ベクトルの対応する成分の積の和に等しいスカラー値である。ドット積は、以下の数式(1)に示されるように算出することができる。
【0271】
【数9】
[0334] ドット積は、畳み込みニューラル・ネットワーク(CNN)のようなニューラル・ネットワークの畳み込み演算で使用される可能性がある。ハードウェア命令を加速するために使用される命令パイプライン3100は、ハードウェア命令をフェッチしてデコードすることができる命令フェッチ&デコード・ユニット1421と、デコードされた命令を、演算ブロック1424A-1424N(まとめて演算ブロック1424と称する)の内の1つ以上の実行ユニット及び/又は行列アクセラレータ1423に対してスケジューリングすることができるコントローラ・ユニット3120(スケジューラ・コントローラ1422など)とを含むことができる。命令パイプライン3100はまた、入力データを、演算ブロック1424及び/又は行列アクセラレータ1423へ、ハイブリッド8ビットFPフォーマット・シストリック演算3110のハードウェア命令でエンコードされたハイブリッド8ビットFPフォーマットに従ってルーティングするために、マルチプレクサ(muxes)の集まりのような選択回路1630を含むことが可能である。
【0272】
[0335] 一実施形態では、ハードウェア命令は、演算ブロック1424に対してスケジューリングされること、及び行列アクセラレータ1423へオフロードされることが可能である。ハイブリッド8ビットFPフォーマット・シストリック演算3110を実行するための1つ以上のハードウェア命令及び関連データは、メモリ3150に記憶されることが可能である。ハードウェア命令の出力が、メモリ3150に記憶されることも可能である。メモリ1650は、
図14のように、システム・メモリ1412、GPGPUメモリ1418、又は1つ以上のキャッシュ・メモリ1427、1430を含む、本件で説明される任意のメモリであるとすることが可能である。
【0273】
[0336] 一実施形態では、行列アクセラレータ1423は、1つ以上のハードウェア命令を実行して、ハイブリッド8ビットFPフォーマット・シストリック演算3110を、シストリック・アレイ回路3140を使用して実行することができる。シストリック・アレイ回路3140は、ドット積演算を実行するように構成されることが可能な、プログラマブル&固定機能ハードウェアの組み合わせを含むことが可能である。演算ブロック1424内の機能ユニットもまた、ドット積演算を実行するように構成されることも可能であるが、シストリック・アレイ回路3140は、演算ブロック1424に対してかなり高いスループットで、ドット積演算のうちの限られたサブセットを実行するように構成されることが可能である。
【0274】
[0337] 実施形態において、DPAS命令は、レジスタ・ファイルからのハイブリッド8ビット浮動小数点フォーマット・データ(例えば、BF8及びHF8)ソース・オペランドに関してシストリック・ドット積&蓄積演算を実行し、その結果を、選択された精度(fp32、fp16、bf16)で蓄積し、最終的な出力をレジスタ・ファイルに書き込んで返すために提供される。ハイブリッド8ビットFPフォーマット・シストリック演算3110を実行するためのこのDPAS命令は、c += a*bを演算するために3つの入力オペランドを受け入れ、ここで、‘a'及び‘b'オペランドはBF8やHF8のようなハイブリッド8ビットFPタイプのものである。入力オペランドのFPフォーマット・タイプの他の組み合わせ及び変形例が、実施形態において可能であり、BF8やHF8フォーマットに限定されない。
【0275】
[0338]
図32は、実施形態による、ハイブリッド浮動小数点シストリック演算を実行するためのシストリック・アレイ回路のハイブリッドFMAユニット3200を示すブロック図である。一実施形態では、ハイブリッドFMAユニット3200は、
図31に関して説明したシストリック・アレイ回路3140の一部であってもよい。一実施形態では、ハイブリッドFMAユニット3200は、ハイブリッドFPフォーマット・オペランドを有するDPAS命令の演算を実行する。ハイブリッドFMAユニット3200のハイブリッドFMA実装は、カスタム浮動小数点フォーマットを受け入れ、算術演算を実行する前に、それらをより高精度の共通フォーマットに内的に変換することができる。
【0276】
[0339] 実施形態において、例えば、指数に割り当てられたビット数や、使用されるべき指数オフセットのようなカスタム・バイナリ・フォーマットに関する情報は、整数ビットマップ(以下“imm”,“<imm.cbf>”として示される)として、FMA命令に対する第4引数として、命令に従って渡されることが可能である。実施形態のハイブリッドDPAS命令の幾つかの例は、入力(例えば、BF8及びHF8)と出力の引数の様々な組み合わせを使用して、以下に示される。
【0277】
hdpas_01.<sdepth>x<rcount> <f32> <f32> <hf8> <bf8> <imm.cbf>
hdpas_02.<sdepth>x<rcount> <f16> <f16> <bf8> <hf8> <imm.cbf>
hdpas_12.<sdepth>x<rcount> <f32> <f32> <hf8> <hf8> <imm.cbf>
dst src0 src1 src2. imm
[0340] 命令エンコーディングは、<hdpas_xx>として表現されることが可能であり、‘xx’は、入力引数(src1, src2, 又はその両方)のうちのどれが、カスタム入力フォーマットの使用に許可されているかを示す。命令エンコーディングの実装は、ターゲット・アーキテクチャによって使用されるエンコーディング方式に依存して変わることが可能である。
【0278】
[0341]
図32を参照すると、ハイブリッドFMAユニット3200によって実行される実施形態のハイブリッドFMA演算は、HFLOAT8及びBFLOAT8データ・フォーマットで表現されるsrc1及びsrc2オペランドに対してそれぞれ実施される。これら双方のフォーマットは、指数と仮数に対して異なるビット割り当てを伴う異なるバイナリ・フォーマットを使用するだけでなく、異なる指数バイアスをも使用する(例えば、BFLOAT8バイアス=15、HFLOAT8バイアス=11)。
【0279】
[0342] ハイブリッドFMAユニット3200は、複数の再バイアス(re-bias)&正規化ユニット3210a-h、複数の乗算器3220a-d、複数のシフター3230a-3230r、及び加算器3240を含むことが可能である。内部ビット幅の詳細は、入力及び出力精度の要求に応じて、ハイブリッドFMAユニット3200内で変化してもよい。
【0280】
[0343] ハイブリッドFMAユニット3200の第1ステージは、再バイアス&正規化ユニット3210a-3210hを含む。再バイアス&正規化ユニット3210a-3210hは、到来するオペランド(src1(HF8)及びsrc2(BF8))を、共通の‘s1.e8.m3'バイナリ・フォーマットであって、BFLOAT8及びHFLOAT8双方のフォーマット及びそれらのサブノーマル値(例えば、DAZ=0)を収容することが可能な共通の‘s1.e8.m3'バイナリ・フォーマットに変換することができる。
【0281】
[0344] ハイブリッドFMAユニット3200の第2ステージは、乗算器3220a-3220dを含む。乗算器3220a-3220dは、拡張されたs1.e8.m3フォーマットを入力として使用し、中間17ビット符号-大きさ表現(s1.e8.m2.6)を生成する。
【0282】
[0345] ハイブリッドFMAユニット3200の第3ステージは、シフター3230a-3230eを含む。シフター3230a-3230eは、例えば32ビット・シフターを使用して、src0(先行する累積和を含む)と共に、乗算器3220a-3220d出力を正規化することができる。
【0283】
[0346] ハイブリッドFMAユニットの最終ステージは、加算器3240を含む。加算器3240は、例えばs1.e8.m2.27フォーマットの結果の一部として、27ビット仮数を生成する加算器ツリーを含む。加算器3240は、最近接偶数丸め法を使用して、この結果を丸めてs1.e8.23mフォーマットに落とす。
【0284】
[0347]
図33Aは、本件で説明される実施形態に従うシストリック・アレイ回路によって実行することが可能な累積命令3300によるハイブリッド・ドット積を示す。
図33Aは、ハイブリッド8ビット浮動小数点フォーマット入力オペランドに作用する、実施形態によって提供されるシストリック行列ロジックによって実行することが可能な累積命令3300によるハイブリッド・ドット積のフィールドを示す。
図33Aは、累積命令3300によるハイブリッド・ドット積のフィールドを示し、これは、実行されると、シストリック行列アクセラレータが、ハイブリッド8ビット浮動小数点フォーマット入力オペランド(例えば、BF8及びHF8オペランド)に関して累積とともにドット積を実行することを引き起こす。一実施形態において、命令3300は、オペコード・フィールド3302と、シストリック深度3304(sdepth)と、反復カウント3306(rcount)と、オペランド・フィールドであって、宛先3308、第0ソース3310(src0)、第1ソース3312(srcl)、第2ソース3314(src2)、及び整数ビットマップ(imm)フィールド3316を指定するオペランド・フィールドとを含む。
【0285】
[0348] オペコード・フィールド3302は、実行ロジックに対する命令3300を識別するオペコードを指定することができる。一実施形態では、オペコード・フィールド3302は、イネーブルにされている場合には、命令が行列アクセラレータ(例えば、行列アクセラレータ1423)によって実行されるべきであることを示す1つ以上のビットを含む。一実施形態では、オペコード・フィールド3302は、命令3300が、行列アクセラレータ1423内のドット積ロジック(例えば、シストリック・アレイ回路3140)のような特定用途ドット積ロジックによって実行されるべきであることを指定する1つ以上のビットを含むことも可能である。
【0286】
[0349] シストリック深度3304(sdepth)は、入力データを処理するために使用するシストリック層の数を指定するために使用されることが可能である。一実施形態では、シストリック深度3304は、直近の値として提供されることが可能である。反復カウント3306(rcount)は、連続するレジスタを前進させるdst及びsrc0と、同じままのsrc1と、N要素前進するsrc2とともに(ここで、Nは宛先フォーマット)生成されるdpas命令の数を指定するために使用することが可能である。
【0287】
[0350] 宛先3308、第0ソース3310(src0)、第1ソース3312(srcl)、及び第2ソース3314(srcl)を使用して、計算が書き込まれる宛先と、ソース・データが取り出されることが可能なロケーションとを指定することができる。一実施形態では、宛先3308は、データが書き込まれるべきレジスタを指定することができる。一実施形態では、宛先3308は、スカラー・レジスタであるとすることが可能であるが、一部の実施形態では、宛先は、複数のチャネルからの出力を格納するベクトル・レジスタであるとすることが可能である。第0ソース3310、第1ソース3312、及び第2ソース3314は、ソース・データの1つ以上のチャネルを含むレジスタ又は直近の値であるとすることが可能であり、各チャネルはシストリック・アレイ回路によって処理されるべき4つの要素を有する。
【0288】
[0351] 整数ビットマップ(imm)フィールド3316は、少なくとも1つのソース・オペランド(例えば、src1 3312及び/又はsrc2 3314)のカスタム・バイナリ・フォーマットに関する情報、例えば指数のために割り当てられるビット数や、使用されるべき指数オフセットに関する情報、を指定するために使用することが可能である。この情報は、命令3300において、immフィールド3316内の整数ビットマップとして渡すことが可能である。
【0289】
[0352] 幾つかの実施形態では、説明されたもの以外の追加のフィールドが存在してもよい。例えば、一実施形態では、ソース・オペランドの数値修飾を指定するソース修飾子フィールドが存在する。ソース・オペランドの各データ要素の値は、オプションとして、その絶対値をとらせることが可能であり、及び/又はその符号を、実行パイプラインに送る前に反転させることが可能である。絶対値修飾子は、保証された負の値を生成することができるように、ネゲート修飾子の前に適用されることが可能である。一実施形態では、宛先の飽和を抑制するために使用することが可能な飽和フィールドが存在する。飽和がイネーブルにされる場合、宛先レジスタへの出力データは飽和にされる。特定の飽和演算は、宛先データ・タイプに依存する。飽和は、そのデータ・タイプの飽和ターゲット範囲外の任意のデータを、ターゲット範囲で最も近い表現値に変換する演算である。
【0290】
[0353]
図18Bは、一実施形態によるプログラム・コード・コンパイル・プロセス3315を示す。一実施形態では、ソフトウェア・プログラムのソース・コード・レベル記述3320は、複数レベルのコンパイルを含むことが可能なコンパイラ3330において、処理ロジックによって実行されるハイブリッド8ビットFPドット積を含むか又は指定する演算3340を有するレベルにコンパイルされる。演算3340は、中間言語で指定される演算であるとすることが可能であり、又は機械学習フレームワークによって提供されるプリミティブのような演算フレームワークのプリミティブを参照するプログラム・コードであるとすることが可能である。次いで、ハイブリッド8ビットFPドット積を含むか又は指定する演算3340は、シェーダー・コンパイラであるとすることが可能な追加のコンパイラ1850によって、マシン・レベルのオブジェクト・コード3360に更にコンパイルされることが可能であり、そのオブジェクト・コードは、本件で説明されるような行列演算のためにアクセラレータによって実行されるハイブリッド8ビットFPドット積命令を含む。
【0291】
[0354] 以下は、実施形態による、ハイブリッド浮動小数点シストリック演算を実施するための疑似コード例である。
【0292】
【数10】
[0355]
図34は、ハイブリッド浮動小数点シストリック演算の命令を実行するための方法3400の実施形態を示すフローチャートである。方法3400は、ハードウェア(例えば、回路、専用ロジック、プログラマブル・ロジックなど)、ソフトウェア(例えば、処理デバイス上で実行される命令)、又はそれらの組み合わせを含む可能性がある処理ロジックによって実行される可能性がある。方法3400のプロセスは、説明における簡潔さ及び明瞭さのために直線的なシーケンスで示されている;しかしながら、それらのうちの任意数のものが、並列的に、非同期的に、又は異なる順序で実行され得ることが想定されている。更に、簡潔さ、明確さ、理解しやすさのために、
図1-33に関して説明された構成要素及びプロセスのうちの多くは、以下において反復も議論もされない可能性がある。ある実装では、
図14のデータ処理システム1400のようなデータ処理システムが、方法3400を実行する可能性がある。
【0293】
[0356] 方法3400は処理ブロック3410から始まり、GPGPU内で実行されるために単一の命令がフェッチされてデコードされる。ある実装において、単一命令は、デコードされた行列命令にデコードされ、それはハイブリッド8ビット浮動小数点フォーマット・オペランドに作用して、GPGPUが並列ドット積演算を実行することを引き起こすことができる。処理ブロック3420において、1つ以上の8ビット浮動小数点フォーマット・オペランドを使用して、デコードされた行列命令を行列アクセラレータ上で実行するために、一組のパイプライン・コマンドが決定される。
【0294】
[0357] 次いで、処理ブロック3430において、1つ以上のハイブリッド8ビット浮動小数点フォーマット・オペランドを使用して、デコードされた行列命令を実行するために、一組のパイプライン・コマンドが、シストリック・ドット積パイプラインに対してスケジューリングされる。最後に、処理ブロック3440において、一組のパイプライン・コマンドの完了に応答して、デコードされた行列命令は退去する。
【0295】
[0358]
図35は、ハイブリッド浮動小数点シストリック演算のための方法3500の実施形態を示すフローチャートである。方法3500は、ハードウェア(例えば、回路、専用ロジック、プログラマブル・ロジックなど)、ソフトウェア(例えば、処理デバイス上で実行される命令)、又はそれらの組み合わせを含む可能性がある処理ロジックによって実行される可能性がある。方法3500のプロセスは、説明における簡潔さ及び明瞭さのために直線的なシーケンスで示されている;しかしながら、それらのうちの任意数のものが、並列的に、非同期的に、又は異なる順序で実行され得ることが想定されている。更に、簡潔さ、明確さ、理解しやすさのために、
図1-34に関して説明された構成要素及びプロセスのうちの多くは、以下において反復も議論もされない可能性がある。ある実装では、
図31のシストリック・アレイ回路1640のようなシストリック・アレイが、方法3500を実行する可能性がある。
【0296】
[0359] 方法3500は処理ブロック3510で始まり、GPGPUの行列演算アクセラレータによって実行されるために、命令に関するソース値及び計算深度がフェッチされる。ある実装において、ソース値はハイブリッド8ビット浮動小数点フォーマット・オペランドである。処理ブロック3520において、ソース値入力は、共通バイナリ・フォーマットへの変換の一部として再バイアスされ、正規化される。
【0297】
[0360] 続いて、処理ブロック3530では、共通バイナリ・フォーマットにおけるソース入力要素の要素毎の乗数に基づいて、一組の積が生成される。次いで、処理ブロック3540において、乗算器の出力及び累算器の入力は、各乗算器に対する及び累算器の入力に対するシフターを使用して正規化される。処理ブロック3550において、正規化された乗数出力のセットについての合計が計算され、その合計は最も近い偶数に丸められる。最後に、処理ブロック3560において、合計は、最も近い偶数への丸めを使用して、宛先出力精度に丸められる。
【0298】
8ビット浮動小数点オペランドを用いた混合モード演算の実行
[0361] 実施形態は、8ビット浮動小数点フォーマット・オペランドで混合モード演算を実行することをもたらす。
【0299】
[0362] ディープ・ラーニングのアルゴリズムの進歩により、モデルはニューラル・ネットワークの訓練に低精度演算を利用することができるようになった。従来のトレーニング・プラットフォームは、ハイ・パフォーマンス・シストリックアレイ実装におけるIEEE-754 FP16及びBFLOAT16のデータ・フォーマットをサポートすることができる。しかしながら、(BFLOAT8、1s-5e-2mのような)8ビットFPが、訓練及び推論のパフォーマンスを向上させるために利用されてもよい。
【0300】
[0363] 畳み込み&線型層のようなニューラル・ネットワークのコア演算処理の大部分は、8ビットFPフォーマットのデータ・タイプを利用することが可能であるかもしれないが、混合精度のレジーム(例えば、8ビットFPフォーマットと16ビット又は32ビットFPフォーマット)の下で動作するディープ・ニューラル・ネットワークの部分が依然として存在する。混合精度レジームの下で動作するディープ・ニューラル・ネットワークの部分の幾つかの例は、バッチ正規化(BatchNorm)及びレイヤー正規化(LayerNorm)演算であり、これらは、(平均や分散のような)各自の内部統計をより高い精度で維持する一方、層が、前の層から到来する8ビットFPフォーマット入力(例えば、BFLOAT8)を受け入れる。
【0301】
[0364] この混合精度問題に対処するための従来システムの現在のアプローチは、入力テンソルを、適切なより高い精度のフォーマットに、演算を実行する前にアップ・コンバートし、後にシストリック又は出力テンソルに対するより低い精度へダウン・コンバートすることである。しかしながら、従来のアプローチのこれらの変換処理は、入力テンソルの超高精度なコピーを格納するための追加のオーバヘッドを招き、レジスタ帯域幅圧力及び依存性を増加させる。
【0302】
[0365] 本件における実施形態は、8ビットFPフォーマット(例えば、BFLOAT8及びその他のIEEE-754 FPフォーマット)入力オペランドで混合モード演算を実行するための命令を提供することによって、これらの技術的問題に対処する。上述した
図15は、実施形態の8ビットFPフォーマットとして利用することが可能な例示的なBF8バイナリ・フォーマットを示している。BFLOAT8バイナリ・フォーマットは、符号、指数、仮数ビットとして表現される。5ビット指数は、6.1e-05から5.7344e+04の間のノーマルな浮動小数点値を表すことが可能な15というオフセット値を使用する。フォーマットはまた、ダイナミック・レンジを、1.5e-05という表現可能な最小値まで拡張するサブノーマル値もサポートする。
【0303】
[0366] 混合モード演算を実行するためのこれらの命令は、少なくとも1つの入力オペランドを8ビットFPフォーマット(例えば、BFLOAT8)で受け入れることができる一方で、他の入力は、例えば、標準の浮動小数点又は半精度の浮動小数点フォーマットであるとすることが可能である。実施形態は、上述の混合モードオペランドで動作することが可能な頻繁に発生する演算の一組の命令、例えば乗算(MUL)、ADD、乗算-累算(MAC)、SEL、及び減算(SUB)をもたらす。
【0304】
[0367] 本件における実施形態は、レジスタ・ファイルに対するフットプリント及び帯域幅要件を軽減することによって、上述の技術的問題を克服する技術的利点を提供する。更に、実施形態は、例えば、BatchNormやLayerNorm演算の大きなパーセンテージを有するネットワークのエンド・ツー・エンドのトレーニング・パフォーマンスを改善する。更に、混合精度8ビットFPフォーマット・トレーニングを可能にすることは、トレーニング・スループットの観点から、ニューラル・ネットワークにおけるトレーニングを加速するのに役立つ可能性がある。
【0305】
[0368]
図36は、実施形態に従う命令パイプライン3600によって実行される混合モード8ビットFPフォーマット演算3610を示すブロック図である。命令パイプライン3600は、混合モード8ビットFPフォーマット演算3610を実行するように構成することができる。命令パイプライン3600は、ハードウェア命令を加速するために使用することが可能であり、ハードウェア命令をフェッチ及びデコードすることが可能な命令フェッチ&デコード・ユニット1421と、コントローラ・ユニット3620(スケジューラ・コントローラ1422など)とを含むことが可能であり、コントローラ・ユニットは、デコードされた命令を、演算ブロック1424A-1424N(まとめて演算ブロック1424と称する)内の1つ以上の実行ユニット及び/又は行列アクセラレータ1423に対してスケジューリングすることができる。命令パイプライン3600はまた、混合モード8ビットFPフォーマット演算3610のハードウェア命令においてエンコードされた混合モード8ビットFPフォーマットに従って、入力データを、演算ブロック1424及び/又は行列アクセラレータ1423へルーティングするために、マルチプレクサ(muxes)の集まりのような選択回路3630を含むことが可能である。
【0306】
[0369] 一実施形態において、ハードウェア命令は演算ブロック1424に対してスケジューリングされ、及び/又は行列アクセラレータ1423にオフロードすることができる(例えば、シストリック・アレイ回路3640を使用する演算のため計算のためである)。混合モード8ビットFPフォーマット演算3610を実行するための1つ以上のハードウェア命令及び関連するデータは、メモリ3650に記憶することが可能である。また、ハードウェア命令の出力も、メモリ3650に記憶することができる。メモリ3650は、
図14のように、システム・メモリ1412、GPGPUメモリ1418、又は1つ以上のキャッシュ・メモリ1427、1430を含む、本件で説明される何らかのメモリであるとすることが可能である。
【0307】
[0370] 一実施形態において、演算ブロック1424は、処理ユニット3660を使用して、混合モード8ビットFPフォーマット演算3610を実行するように、1つ以上のハードウェア命令を実行することができる。処理ユニット3660は、混合モード8ビットFPフォーマット演算を実行するように構成することが可能な、プログラマブル&固定機能ハードウェアの組み合わせを含むことが可能である。幾つかの実装において、処理ユニット3660は、ベクトル処理ユニット(VPU)であってもよい。幾つかの実装において、処理ユニット3660は、浮動小数点ユニット(FPU)であってもよい。処理ユニット3660は、変換回路3662、最近接丸め(RNE)演算回路3664、及び特殊処理回路3666を含んでもよい。
【0308】
[0371] 幾つかの実施形態では、混合モード8ビットFPフォーマット演算3610を実行するためのハードウェア命令は、8ビットFP (例えば、BFLOAT8)入力オペランドに対して混合モード演算をもたらす。この命令は、少なくとも1つの8ビットFPフォーマット(例えば、BFLOAT8)入力オペランドを受け入れる一方で、他の入力オペランドは、IEEE-754浮動小数点又は半精度浮動小数点データ・フォーマットであるとすることが可能である。
【0309】
[0372] 変換回路3662は、上述の変換プロセスを実行するために、プログラマブル&固定機能ハードウェアを含むことが可能である。変換回路3662は、8ビットFPフォーマット(例えば、BF8)オペランドを、より高い精度のフォーマットに内的にアップ・コンバートして、他の入力オペランドのフォーマットに一致させることが可能であり、その演算は、より高い精度で実行される。変換回路3662のデータ変換は、ターゲット精度のダイナミック・レンジに一致するように8ビットのFPフォーマット入力を正規化し直し(再正規化し)、最下位ビット(LSB)でゼロを用いて仮数を拡張する。BFLOAT8入力に関するサブノーマル値は保存され、ターゲット精度に正規化される。RNE丸め回路3664は、変換されたデータのRNE丸め演算を実行するために、プログラマブル&固定機能ハードウェアを含むことができる。特殊処理回路3666は、例えば、アンダーフロー、オーバーフロー、非ノーマル化のような、データを変換する及び/又は丸める場合に遭遇したコーナー・ケースに対処するプログラマブル&固定機能ハードウェアを含むことが可能である。
【0310】
[0373] 幾つかの実装では、本件で説明されるような8ビットFPフォーマット・データの変換のための命令は、以下の形式をとることができる:
mac <f32> <f32> <f32> <bf8>
mac <f16> <f16> <f16> <bf8>
sub <f16> <f16> <bf8>
add <f32> <f16> <bf8>
mul <f16> <f16> <bf8>
dst src0 src1 src2
[0374] 8ビットFPフォーマット混合モードの幾つかの例を以下に詳述する:
[0375] 2つのソース・オペランドを伴う命令(mov, add, cmp, sel, mulなど):ソースのうちの1つは8ビットFPフォーマット(例えば、BFLOAT8)であり、もう1つは高精度タイプである。宛先は、8ビットFPフォーマットであるか、或いはより高精度のタイプの何れかである。
【0311】
[0376] 3つのソース・オペランドを伴う命令(macなど):ソースのうちの1つ又は2つは8ビットのFPフォーマット(例えば、BFLOAT8)であり、残りはより高精度のタイプである。宛先は、8ビットのFPフォーマットか、より高精度のタイプの何れかである。
【0312】
[0377]
図37は、実施形態による、少なくとも1つの8ビットFPフォーマット・オペランドを使用して混合モードMAC演算を実行するためのハードウェア回路3700の例示的な概略図を示す。ある実装において、ハードウェア回路3700は、
図36に関して説明した処理ユニット3660内に実装されてもよい。
【0313】
[0378]
図37の例に示されるように、混合モードMAC演算を実行するためのハードウェア回路3700は、FP16(src1)3704とBF8(src2)3706の入力オペランドを受け入れ、累積和src0(F16)3702と共に累積する。最終的な出力(dst(FP16) 3750)は、FP16出力に変換される。変換回路3710a、3710b、3710cは、src1 3704及びsrc2 3706入力をFP32へ内的にアップ・コンバートする。変換回路3710a-cは、
図36に関して説明した変換回路3662と同じであってもよい。実施形態において、変換回路3710a-cは、全ての入力(例えば、DAZ=0)に関してサブノーマル値を維持することができる。
【0314】
[0379] 乗算器3720は、変換回路3710b,3710cから受け取ったFP32入力を乗算して、中間出力を生成することができる。乗算器3720からの中間出力は、正規化され、src0入力3702(変換回路3710aによってFP32フォーマットに変換されたもの)と加算器3730において累積される。
【0315】
[0380] 最後に、別の変換回路3740(
図36の変換回路3662と同じであってもよい)が、FP32の和をFP16の出力3750に変換する。実施形態では、変換回路3740は、全ての出力(dst)データ・タイプ(例えば、FTZ=0)に関してサブノーマル値を維持する。
【0316】
[0381]
図38Aは、本件で説明される実施形態による、処理ユニットによって実行可能な一組の命令3800を示す。
図38Aは、8ビットFPフォーマット・オペランドを使用して、混合モード演算を実行するための命令3800のフィールドを示す。命令3800は、混合モードmac命令3812、混合モードsub命令3814、混合モードadd命令3816、及び混合モードmul命令3818を含むが、これらに限定されない。8ビットFPフォーマット・オペランドに関する演算のための他の混合モード命令が、実施形態によって実施されてもよい。
【0317】
[0382] 命令3800は、実施形態によって提供される、VPU又はFPUのような処理ユニットによって実行可能である。
図38Aは、命令3800のフィールドを示しており、この命令は実行されると、8ビットFPフォーマット・オペランドを使用して混合モード演算を実行するための命令を、処理ユニットに実行させる。一実施形態では、命令3800は、オペコード・フィールド3802と、宛先3804、第0ソース(src0)3806、第1ソース(src1)3808、及び/又は第2ソース(src2)3810を指定するオペランド・フィールドとを含む。
【0318】
[0383] オペコード・フィールド3802は、命令3800を、実行ロジックに対して識別するオペコードを指定することができる。一実施形態において、オペコード・フィールド3802は1つ以上のビットを含み、それらがイネーブルにされると、命令が演算ブロック(例えば、演算ブロック1424)の処理ユニットによって実行されるべきであることを示す。
【0319】
[0384] 宛先3804、第0ソース3806(src0)、第1ソース3808(src1)、及び第2ソース3806(src2)は、計算が書き込まれる宛先と、ソース・データを取り出すことが可能なロケーションとを指定するために使用することが可能である。一実施形態において、宛先3804は、データが書き込まれるレジスタを指定することができる。一実施形態において、宛先3804は、スカラー・レジスタであるとすることが可能であるが、一部の実施形態では、宛先は、複数のチャネルからの出力を格納するベクトル・レジスタであるとすることも可能である。第0ソース3806(src0)、第1ソース3808(src1)、及び第2ソース3806(src2)は、ソース・データの1つ以上のチャネルを含むレジスタ又は即時値であるとすることが可能である。
【0320】
[0385] 幾つかの実施形態において、図示されたもの以外の追加のフィールドが存在してもよい。例えば、一実施形態では、ソース・オペランドの数値修正を指定するソース修飾子フィールドが存在する。ソース・オペランドの各データ要素の値は、オプションとして、その絶対値をとらせることが可能であり、及び/又はその符号を、実行パイプラインへ送る前に反転させることが可能である。絶対値修飾子は、保証された負の値を生成することができるように、ネゲート修飾子の前に適用されることが可能である。一実施形態では、飽和フィールドが存在し、これは宛先の飽和を抑制するために使用することができる。飽和がイネーブルにされる場合、宛先レジスタへの出力データは飽和にされる。具体的な飽和演算は、宛先データ・タイプに依存する。飽和は、データ・タイプの飽和ターゲット範囲外にある任意のデータを、ターゲット範囲で最も近い表現値に変換する演算である。
【0321】
[0386]
図38Bは、一実施形態によるプログラム・コード・コンパイル・プロセス3815を示す。一実施形態において、ソフトウェア・プログラムのソース・コード・レベル記述3820は、複数レベルのコンパイルを含むことが可能なコンパイラ3830において、処理ロジックによって実行される8ビットFP混合モード命令を含むか又は指定する演算3840を有するレベルにコンパイルされる。演算3840は、中間言語で指定された演算であるとすることが可能であり、或いは、機械学習フレームワークによって提供されるプリミティブのような演算フレームワークのプリミティブを参照するプログラム・コードであるとすることが可能である。次いで、8ビットFP混合モード命令を含むか又は指定する演算3840は、追加のコンパイラ3850(シェーダー・コンパイラであってもよい)によって、マシン・レベルのオブジェクト・コード3860に更にコンパイルされることが可能であり、そのオブジェクト・コードは、本件で説明されるように、コンピュータ・ブロックの処理ユニット(例えば、VPU、FPU)によって実行されるべき8ビットFP混合モード命令を含む。
【0322】
[0387] 以下は、実施形態による混合モード8ビットFPフォーマット演算を実行するための疑似コード例である。
【0323】
【数11】
[0388]
図39は、8ビット浮動小数点フォーマット・オペランドで混合モード演算を実行する命令を実行するための方法3900の実施形態を示すフローチャートである。方法3900は、ハードウェア(例えば、回路、専用ロジック、プログラマブル・ロジックなど)、ソフトウェア(例えば、処理デバイス上で実行される命令)、又はそれらの組み合わせを含む可能性がある処理ロジックによって実行される可能性がある。方法3900のプロセスは、説明における簡潔さ及び明瞭さのために直線的なシーケンスで示されている;しかしながら、それらのうちの任意数のものが、並列的に、非同期的に、又は異なる順序で実行され得ることが想定されている。更に、簡潔さ、明確さ、理解しやすさのために、
図1-38に関して説明された構成要素及びプロセスのうちの多くは、以下において反復も議論もされない可能性がある。ある実装では、
図14のデータ処理システム1400のようなデータ処理システムが、方法3900を実行する可能性がある。
【0324】
[0389] 方法3900は処理ブロック3910から始まり、GPGPU内で実行されるために単一の命令がフェッチされてデコードされる。ある実装において、単一命令は、デコードされた行列命令にデコードされ、GPGPUが、8ビット浮動小数点フォーマット混合モード演算を実行することを引き起こすことができる。処理ブロック3920において、一組のコマンドが、デコードされたベクトル命令をGPGPUの演算ブロックで実行するために決定される。
【0325】
[0390] 次いで、処理ブロック3930において、デコードされた命令を実行して 8ビット浮動小数点フォーマット混合モード演算を実行するために、一組のコマンドが、GPGPUの演算ブロックに対してスケジューリングされる。最後に、処理ブロック3940において、一組のコマンドの完了に応答して、デコードされた命令は退去する。
【0326】
[0391]
図40は、8ビット浮動小数点フォーマット・オペランドで混合モード演算を実行するための方法4000の実施形態を示すフローチャートである。方法4000は、ハードウェア(例えば、回路、専用ロジック、プログラマブル・ロジックなど)、ソフトウェア(例えば、処理デバイス上で実行される命令)、又はそれらの組み合わせを含む可能性がある処理ロジックによって実行される可能性がある。方法4000のプロセスは、説明における簡潔さ及び明瞭さのために直線的なシーケンスで示されている;しかしながら、それらのうちの任意数のものが、並列的に、非同期的に、又は異なる順序で実行され得ることが想定されている。更に、簡潔さ、明確さ、理解しやすさのために、
図1-39に関して説明された構成要素及びプロセスのうちの多くは、以下において反復も議論もされない可能性がある。ある実装では、
図36の処理ユニット3660のような処理ユニットが、方法4000を実行する可能性がある。
【0327】
[0392] 方法4000は処理ブロック4010で始まり、GPGPUの演算ブロックによって実行される演算のために、命令に関するソース値がフェッチされる。ある実装において、ソース値は混合モード8ビット浮動小数点フォーマット・オペランドである。処理ブロック4020において、ソース値入力は、共通バイナリ・フォーマットへの変換の一部として再バイアスされ、正規化される。続いて、処理ブロック4030において、演算は、共通バイナリ・フォーマットでソース入力要素に対して実行される。
【0328】
[0393] 続いて、処理ブロック4040において、演算出力は、シフターを使用して正規化される。次に、処理ブロック4050において、正規化された出力は、結果値を生成するために、宛先フォーマットに変換される。最後に、処理ブロック4060において、結果値は宛先オペランドに返される。
【0329】
[0394] 以下の実施例は更なる実施形態に関連する:
実施例1は、演算アーキテクチャにおいて8ビット浮動小数点フォーマットのオペランドに対するサポートを提供する装置である。一実施形態において、実施例1は、8ビット浮動小数点フォーマットの入力オペランドに関してシストリック・ドット積の蓄積をもたらす。実施例1の装置はプロセッサを含み、プロセッサは:実行するためにフェッチした命令を、デコードされた命令にデコードするデコーダであって、デコードされた命令は、8ビット浮動小数点オペランドに作用して、プロセッサが並列ドット積演算を実行することを引き起こす行列命令である、デコーダ;デコードされた命令をスケジューリングするコントローラであって、デコードされた命令によって指定される8ビット浮動小数点データ・フォーマットに従って入力データを8ビット浮動小数点オペランドに提供するコントローラ;及びデコードされた命令を、シストリック層を使用して実行するシストリック・ドット積回路であって、各々のシストリック層は、相互接続された乗算器、シフター、及び加算器の1つ以上のセットを含み、乗算器、シフター、及び加算器の各セットは8ビット浮動小数点オペランドのドット積を生成する、シストリック・ドット積回路を含む。
【0330】
[0395] 実施例2において、実施例1の対象事項はオプションとして以下の事項を含むことが可能である:シフターは、乗算器の出力を正規化する。実施例3において、実施例1-2のうちの任意の1つの対象事項はオプションとして以下の事項を含むことが可能である:乗算器は、4ビット乗算器、8ビット乗算器、16ビット乗算器、又は32ビット乗算器のうちの少なくとも1つを含む。実施例4において、実施例1-3のうちの任意の1つの対象事項はオプションとして以下の事項を含むことが可能である:加算器は、シフターによって正規化された乗算器によって生成された積を追加する加算ツリーを含み、加算器は、最も近い偶数に丸めることで加算ツリーの結果を丸める。
【0331】
[0396] 実施例5において、実施例1-4のうちの任意の1つの対象事項はオプションとして以下の事項を含むことが可能である:結果は、デコードされた命令によって指定される宛先の精度に丸められる。実施例6において、実施例1-5のうちの任意の1つの対象事項はオプションとして以下の事項を含むことが可能である:シストリック・ドット積回路は、アキュムレータ・ソース・オペランドの後-蓄積を実行し、後-蓄積では、8ビット浮動小数点オペランドのドット積の生成に続いて、アキュムレータ・ソース・オペランドを蓄積する。実施例7において、実施例1-6のうちの任意の1つの対象事項はオプションとして以下の事項を含むことが可能である:シストリック・ドット積回路は、アキュムレータ・ソース・オペランドの蓄積を実行し、蓄積では、シストリック・ドット積回路の第1ステージ、又はシストリック・ドット積回路の中間ステージのうちの1つにおいてアキュムレータ・ソース・オペランドを蓄積する。
【0332】
[0397] 実施例8において、実施例1-7のうちの任意の1つの対象事項はオプションとして以下の事項を含むことが可能である:プロセッサはグラフィックス処理ユニット(GPU)を含む。実施例8において、実施例1-8のうちの任意の1つの対象事項はオプションとして以下の事項を含むことが可能である:装置は、単一命令多重データ(SIMD)マシン又は単一命令多重スレッド(SIMT)マシンのうちの少なくとも1つである。
【0333】
[0398] 実施例10は、演算アーキテクチャにおいて8ビット浮動小数点フォーマットのオペランドをサポートすることを支援する方法であり、方法は:プロセッサが、実行するためにフェッチした命令を、デコードされた命令にデコードするステップであって、デコードされた命令は、8ビット浮動小数点オペランドに作用して、プロセッサが並列ドット積演算を実行することを引き起こす行列命令である、ステップ;プロセッサが、デコードされた命令をスケジューリングするステップであって、デコードされた命令によって指定される8ビット浮動小数点データ・フォーマットに従って入力データを8ビット浮動小数点オペランドに提供するステップ;及びプロセッサのシストリック・ドット積回路が、デコードされた命令をシストリック層を使用して実行するステップであって、各々のシストリック層は、相互接続された乗算器、シフター、及び加算器の1つ以上のセットを含み、乗算器、シフター、及び加算器の各セットは8ビット浮動小数点オペランドのドット積を生成する、ステップを含む。
【0334】
[0399] 実施例11において、実施例10の対象事項はオプションとして以下の事項を含むことが可能である:シフターは、乗算器の出力を正規化し、加算器は、シフターによって正規化された乗算器によって生成された積を追加する加算ツリーを含み、加算器は、最も近い偶数に丸めることで加算ツリーの結果を丸める。実施例12において、実施例10-11のうちの任意の1つの対象事項はオプションとして以下の事項を含むことが可能である:結果は、デコードされた命令によって指定される宛先の精度に丸められる。実施例13において、実施例10-12のうちの任意の1つの対象事項はオプションとして以下の事項を含むことが可能である:乗算器は、4ビット乗算器、8ビット乗算器、16ビット乗算器、又は32ビット乗算器のうちの少なくとも1つを含む。
【0335】
[0400] 実施例14において、実施例10-13のうちの任意の1つの対象事項はオプションとして以下の事項を含むことが可能である:シストリック・ドット積回路が、アキュムレータ・ソース・オペランドの後-蓄積を実行するステップを更に含み、後-蓄積では、8ビット浮動小数点オペランドのドット積の生成に続いて、アキュムレータ・ソース・オペランドを蓄積する。実施例15において、実施例10-14のうちの任意の1つの対象事項はオプションとして以下の事項を含むことが可能である:シストリック・ドット積回路が、アキュムレータ・ソース・オペランドの蓄積を実行するステップを更に含み、蓄積では、シストリック・ドット積回路の第1ステージ、又は前記シストリック・ドット積回路の中間ステージのうちの1つにおいて前記アキュムレータ・ソース・オペランドを蓄積する。
【0336】
[0401] 実施例16は、演算アーキテクチャにおいて8ビット浮動小数点フォーマットのオペランドをサポートすることを支援する非一時的なコンピュータ読み取り可能な媒体である。実施例16において、非一時的なコンピュータ読み取り可能な媒体は、命令を記憶することが可能であり、命令は1つ以上のプロセッサによって実行されると、プロセッサに以下の方法を実行させ、方法は:1つ以上のプロセッサが、実行するためにフェッチした命令を、デコードされた命令にデコードするステップであって、デコードされた命令は、8ビット浮動小数点オペランドに作用して、1つ以上のプロセッサが並列ドット積演算を実行することを引き起こす行列命令である、ステップ;1つ以上のプロセッサが、デコードされた命令をスケジューリングするステップであって、デコードされた命令によって指定される8ビット浮動小数点データ・フォーマットに従って入力データを8ビット浮動小数点オペランドに提供するステップ;及び1つ以上のプロセッサのシストリック・ドット積回路が、デコードされた命令をシストリック層を使用して実行するステップであって、各々のシストリック層は、相互接続された乗算器、シフター、及び加算器の1つ以上のセットを含み、乗算器、シフター、及び加算器の各セットは8ビット浮動小数点オペランドのドット積を生成する、ステップを含む。
【0337】
[0402] 実施例17において、実施例16の対象事項はオプションとして以下の事項を含むことが可能である:シフターは、乗算器の出力を正規化し、加算器は、シフターによって正規化された乗算器によって生成された積を追加する加算ツリーを含み、加算器は、最も近い偶数に丸めることで加算ツリーの結果を丸める。実施例18において、実施例16-17のうちの任意の1つの対象事項はオプションとして以下の事項を含むことが可能である:結果は、デコードされた命令によって指定される宛先の精度に丸められる。
【0338】
[0403] 実施例19において、実施例16-18のうちの任意の1つの対象事項はオプションとして以下の事項を含むことが可能である:命令は、1つ以上のプロセッサに:シストリック・ドット積回路が、アキュムレータ・ソース・オペランドの後-蓄積を実行することを行わせ、後-蓄積では、8ビット浮動小数点オペランドのドット積の生成に続いて、アキュムレータ・ソース・オペランドを蓄積する。実施例20において、実施例16-19のうちの任意の1つの対象事項はオプションとして以下の事項を含むことが可能である:命令は、1つ以上のプロセッサに:シストリック・ドット積回路が、アキュムレータ・ソース・オペランドの蓄積を実行することを行わせ、蓄積では、シストリック・ドット積回路の第1ステージ、又はシストリック・ドット積回路の中間ステージのうちの1つにおいてアキュムレータ・ソース・オペランドを蓄積する。
【0339】
[0404] 実施例21は、演算アーキテクチャにおいて8ビット浮動小数点フォーマットのオペランドをサポートすることを支援するシステムである。実施例21の1つ以上のプロセッサは、メモリに通信可能に結合され、且つ:実行するためにフェッチした命令を、デコードされた命令にデコードするデコーダであって、デコードされた命令は、8ビット浮動小数点オペランドに作用して、グラフィックス処理ユニットが並列ドット積演算を実行することを引き起こす行列命令である、デコーダ;デコードされた命令をスケジューリングするコントローラであって、デコードされた命令によって指定される8ビット浮動小数点データ・フォーマットに従って入力データを8ビット浮動小数点オペランドに提供するコントローラ;及びデコードされた命令を、シストリック層を使用して実行するシストリック・ドット積回路であって、各々のシストリック層は、相互接続された乗算器、シフター、及び加算器の1つ以上のセットを含み、乗算器、シフター、及び加算器の各セットは8ビット浮動小数点オペランドのドット積を生成する、シストリック・ドット積回路を含む。
【0340】
[0405] 実施例22において、実施例21の対象事項はオプションとして以下の事項を含むことが可能である:シフターは、乗算器の出力を正規化する。実施例23において、実施例21-22のうちの任意の1つの対象事項はオプションとして以下の事項を含むことが可能である:乗算器は、4ビット乗算器、8ビット乗算器、16ビット乗算器、又は32ビット乗算器のうちの少なくとも1つを含む。実施例24において、実施例21-23のうちの任意の1つの対象事項はオプションとして以下の事項を含むことが可能である:加算器は、シフターによって正規化された乗算器によって生成された積を追加する加算ツリーを含み、加算器は、最も近い偶数に丸めることで加算ツリーの結果を丸める。
【0341】
[0406] 実施例25において、実施例21-24のうちの任意の1つの対象事項はオプションとして以下の事項を含むことが可能である:結果は、デコードされた命令によって指定される宛先の精度に丸められる。実施例26において、実施例21-25のうちの任意の1つの対象事項はオプションとして以下の事項を含むことが可能である:シストリック・ドット積回路は、アキュムレータ・ソース・オペランドの後-蓄積を実行し、後-蓄積では、8ビット浮動小数点オペランドのドット積の生成に続いて、アキュムレータ・ソース・オペランドを蓄積する。実施例27において、実施例21-26のうちの任意の1つの対象事項はオプションとして以下の事項を含むことが可能である:シストリック・ドット積回路は、アキュムレータ・ソース・オペランドの蓄積を実行し、蓄積では、シストリック・ドット積回路の第1ステージ、又はシストリック・ドット積回路の中間ステージのうちの1つにおいてアキュムレータ・ソース・オペランドを蓄積する。
【0342】
[0407] 実施例28において、実施例21-27のうちの任意の1つの対象事項はオプションとして以下の事項を含むことが可能である:プロセッサはグラフィックス処理ユニット(GPU)を含む。実施例28において、実施例21-28のうちの任意の1つの対象事項はオプションとして以下の事項を含むことが可能である:装置は、単一命令多重データ(SIMD)マシン又は単一命令多重スレッド(SIMT)マシンのうちの少なくとも1つである。
【0343】
[0408] 実施例30は、演算アーキテクチャにおいて8ビット浮動小数点フォーマットのオペランドをサポートすることを支援する装置であり、当該装置は:実行するためにフェッチした命令を、デコードされた命令にデコードする手段であって、デコードされた命令は、8ビット浮動小数点オペランドに作用して、プロセッサが並列ドット積演算を実行することを引き起こす行列命令である、手段;デコードされた命令をスケジューリングする手段であって、デコードされた命令によって指定される8ビット浮動小数点データ・フォーマットに従って入力データを8ビット浮動小数点オペランドに提供する手段;及びデコードされた命令を、シストリック層を使用して実行する手段であって、各々のシストリック層は、相互接続された乗算器、シフター、及び加算器の1つ以上のセットを含み、乗算器、シフター、及び加算器の各セットは8ビット浮動小数点オペランドのドット積を生成する、手段を含む。実施例31において、実施例30の対象事項はオプションとして、実施例11-15のうちの何れか1つに記載の方法を実行するように更に構成された装置を更に含む。
【0344】
[0409] 実施例32は、演算デバイス上で実行されることに応答して、演算デバイスに実施例10-15のうちの何れか1つの方法を実行させる複数の命令を含む少なくとも1つの機械読み取り可能な媒体である。実施例33は、実施例10-15のうちの何れか1つの方法を実行するように構成された、演算アーキテクチャにおける8ビット浮動小数点フォーマットのオペランドをサポートすることを支援する装置である。実施例34は、実施例10-15のうちの何れか1つの方法を実行する手段を有する、演算アーキテクチャにおける8ビット浮動小数点フォーマットのオペランドをサポートすることを支援する装置である。実施例における特定事項は、1つ以上の実施形態のどこにおいて使用されてもよい。
【0345】
[0410] 実施例35は、演算アーキテクチャにおける8ビット浮動小数点フォーマットのオペランドをサポートすることを支援する装置であり、特に、浮動小数点データを8ビット浮動小数点フォーマット・データに、又は8ビット浮動小数点フォーマット・データから浮動小数点データに変換することを支援する。実施例35の装置は、複数のグラフィックス処理ユニット(GPU)のプロセッサを含み、該プロセッサは:該プロセッサの演算ブロックによって実行される命令のソース値をフェッチし(該ソース値は、異なるデータ・フォーマットに変換され、該ソース値は、8ビット浮動小数点フォーマットのオペランドの少なくとも1つであるか、又は該8ビット浮動小数点オペランドに変換される);ソース値を、リスケーリングし、正規化し、及び変換し、変換されたソース値に最も近い偶数に丸めることを適用することによって、宛先の符号付き大きさのフォーマットに変換し;変換され且つ丸められたソース値を宛先値として返す。
【0346】
[0411] 実施例36は、演算アーキテクチャにおける8ビット浮動小数点フォーマット・オペランドをサポートすることを支援し、特に浮動小数点フォーマットのデータ値に対する効率的な確率的な丸め処理を支援する装置である。実施例36の装置は、複数のグラフィックス処理ユニット(GPU)のプロセッサを含み、プロセッサは:プロセッサの演算ブロックによって実行される命令のソース値をフェッチし(ソース値は、より高い精度の浮動小数点からより低い精度の浮動小数点へ変換される);ソース値を、宛先の符号付き大きさのフォーマットに変換し、変換されたソース値を正規化し;変換され且つ正規化されたソース値に乱数を加え(乱数は、ソース及び宛先オペランドのデータ・フォーマットに基づいて決定されるサイズを有し、乱数はPRNGから取得される);結果の合計の指数調整を行い、結果の合計を、宛先オペランドの仮数フォーマットのサイズに切り捨てて、結果の宛先値を生成し;その結果の宛先値を返す。
【0347】
[0412] 実施例37は、演算アーキテクチャにおける8ビット浮動小数点フォーマット・オペランドをサポートすることを支援し、特にハイブリッド浮動小数点シストリック演算を支援する装置である。実施例37の装置は、複数のグラフィックス処理ユニット(GPU)のプロセッサを含み、該プロセッサは:プロセッサの行列演算アクセラレータによって実行される命令のための演算深さとソース値をフェッチし(ソース値は、ハイブリッド8ビット浮動小数点フォーマット・オペランドを含み);ソース値を、共通バイナリ・フォーマットへの変換の一部として、再バイアス及び正規化し;共通バイナリ・フォーマットにおける再バイアスされ且つ正規化されたソース値の要素ごとの乗算に基づいて、一組の積を生成し;乗算器出力及びアキュムレータ入力を、各乗算器に対する及びアキュムレータ入力に対するシフターを使用して正規化し;正規化された乗算器出力のセットの合計を計算し、その合計を最も近い偶数に丸め;計算された合計を、最も近い偶数に丸めることで、宛先出力精度に丸める。
【0348】
[0413] 実施例38は、演算アーキテクチャにおける8ビット浮動小数点フォーマット・オペランドをサポートすることを支援し、特に8ビット浮動小数点フォーマット・オペランドとの混合モード演算を支援する装置である。実施例38の装置は、複数のグラフィックス処理ユニット(GPU)のプロセッサを含み、プロセッサは:プロセッサの演算ブロックによって実行される演算のための命令のソース値をフェッチし(ソース値は、混合モード8ビット浮動小数点フォーマット・オペランドを含み);共通バイナリ・フォーマットへの変換の一部として、ソース値を再バイアス及び正規化し;共通バイナリ・フォーマットにおける再バイアスされ且つ正規化されたソース値に関して演算を実行し;シフターを使用して出力を正規化し;正規化された出力を宛先フォーマットに変換して結果値を生成し;結果値を宛先オペランドに返す。
【0349】
[0414] 前述の説明及び図面は、限定的な意味ではなく例示的に考慮されるべきである。当業者は、添付のクレームに記載された特徴のより広義の精神及び範囲から逸脱することなく、本件で説明された実施形態に対して種々の修正及び変更が施されてもよいことを理解するであろう。
【外国語明細書】