(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-12-06
(45)【発行日】2024-12-16
(54)【発明の名称】ゼロスキップを伴うベクトル乗算加算の命令及びロジック
(51)【国際特許分類】
G06F 9/30 20180101AFI20241209BHJP
G06F 9/318 20180101ALI20241209BHJP
G06F 9/345 20180101ALI20241209BHJP
G06F 17/16 20060101ALI20241209BHJP
G06T 1/20 20060101ALI20241209BHJP
【FI】
G06F9/30 350A
G06F9/318 A
G06F9/345 A
G06F17/16 P
G06F17/16 M
G06T1/20 A
G06F9/30 310A
【外国語出願】
(21)【出願番号】P 2020154476
(22)【出願日】2020-09-15
【審査請求日】2023-09-13
(32)【優先日】2019-12-23
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】593096712
【氏名又は名称】インテル コーポレイション
(74)【代理人】
【識別番号】100107766
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【氏名又は名称】伊東 忠彦
(74)【代理人】
【識別番号】100135079
【氏名又は名称】宮崎 修
(72)【発明者】
【氏名】スプラティム パル
(72)【発明者】
【氏名】サシカント アヴァンチャ
(72)【発明者】
【氏名】イシュワール バーティ
(72)【発明者】
【氏名】ウェイ-ユー チェン
(72)【発明者】
【氏名】ディパンカール ダス
(72)【発明者】
【氏名】アシュトシュ ガルグ
(72)【発明者】
【氏名】チャンドラ エス. グラム
(72)【発明者】
【氏名】ジュンジエ グー
(72)【発明者】
【氏名】グエイ-ユアン ルエー
(72)【発明者】
【氏名】スブラマニアム マイユラン
(72)【発明者】
【氏名】ジョルジ イー. パラ
(72)【発明者】
【氏名】スダルシャン シュリニヴァサン
(72)【発明者】
【氏名】ヴァルゲーゼ ジョージ
【審査官】坂東 博司
(56)【参考文献】
【文献】特開平10-134032(JP,A)
【文献】米国特許出願公開第2018/0315158(US,A1)
【文献】米国特許出願公開第2020/0210192(US,A1)
【文献】米国特許出願公開第2015/0268940(US,A1)
【文献】米国特許出願公開第2014/0229713(US,A1)
【文献】小田嶋 哲哉ほか,ベクトル長を可変とするSVEアーキテクチャの評価,情報処理学会 研究報告 ハイパフォーマンスコンピューティング(HPC) 2017-HPC-160 [online] ,日本,情報処理学会,2017年07月19日,pp.1-7,CSNG201700582011
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/30
G06F 9/318
G06F 9/345
G06F 17/16
G06T 1/20
(57)【特許請求の範囲】
【請求項1】
グラフィックプロセッサであって、当該グラフィックプロセッサは、
述語マスク、繰返し回数、及び初期オペランドのセットを有するハードウェアマクロ命令をフェッチする命令フェッチャであって、前記ハードウェアマクロ命令は、行列のセットに関連付けられた入力に対して1回以上の乗算及び加算演算を行うための命令である、命令フェッチャと、
前記ハードウェアマクロ命令をデコードし、1回以上の乗算及び加算演算を行うハードウェア命令のセットを生成する命令デコーダであって、前記ハードウェア命令のセットは、前記述語マスク及び前記繰返し回数に基づいて生成される、命令デコーダと、
前記ハードウェア命令のセットを実行する処理リソースであって、前記ハードウェアマクロ命令は、前記ハードウェア命令のセットが完了するとリタイアされる、処理リソースと、を含む、
グラフィックプロセッサ。
【請求項2】
前記初期オペランドのセットは、デスティネーションオペランド及び複数のソースオペランドを含む、請求項1に記載のグラフィックプロセッサ。
【請求項3】
前記ハードウェア命令のセットは、1つ又は複数のハードウェア命令を含み、該1つ又は複数のハードウェア命令のそれぞれが、前記処理リソースに、単一のサイクルで乗算及び加算演算を行わせるための命令である、請求項2に記載のグラフィックプロセッサ。
【請求項4】
前記1つ又は複数のハードウェア命令のそれぞれが、前記単一のサイクルで複数のデータ要素に対して前記乗算及び加算演算を行うための命令である、請求項3に記載のグラフィックプロセッサ。
【請求項5】
前記繰返し回数は、前記ハードウェア命令のセットに対して生成するハードウェア命令の最大数を示す、請求項4に記載のグラフィックプロセッサ。
【請求項6】
前記ハードウェア命令のセットを生成するために、前記命令デコーダは、
前記述語マスク内のアクティブビットに対する第1のハードウェア命令を生成し、
前記述語マスク内の非アクティブビットに対する第2のハードウェア命令の生成をバイパスする、請求項5に記載のグラフィックプロセッサ。
【請求項7】
前記ハードウェア命令のセットを生成するために、前記命令デコーダは、さらに、
前記第1のハードウェア命令に対する第1のオペランドセットを生成し、該第1のオペランドセットは、前記第1のハードウェア命令で使用されるデスティネーションレジスタ及び複数のソースレジスタを示し、前記第1のオペランドセットは、前記初期オペランドのセット及びオペランドオフセットに基づいて生成される、請求項6に記載のグラフィックプロセッサ。
【請求項8】
前記述語マスクは、ソースオペランドに関連する各非ゼロ要素についてアクティブビットを含む、請求項1乃至7のいずれか一項に記載のグラフィックプロセッサ。
【請求項9】
グラフィックプロセッサで命令を実行する方法であって、当該方法は、
述語マスク、繰返し回数、及び初期オペランドのセットを有するハードウェアマクロ命令をフェッチするステップであって、該ハードウェアマクロ命令は、行列のセットに関連付けられた入力に対して1回以上の乗算及び加算演算を行うための命令である、フェッチするステップと、
前記ハードウェアマクロ命令をデコードされたハードウェアマクロ命令にデコードするステップと、
前記デコードされたハードウェアマクロ命令に基づいて、1回以上の乗算及び加算演算を行うハードウェア命令のセットを生成するステップであって、該ハードウェア命令のセットは、前記述語マスク及び前記繰返し回数に基づいて生成される、生成するステップと、
グラフィックプロセッサの処理リソースを介して前記ハードウェア命令のセットを実行するステップと、
前記ハードウェア命令のセットが完了すると、前記ハードウェアマクロ命令をリタイアさせるステップと、を含む、
方法。
【請求項10】
前記初期オペランドのセットは、デスティネーションオペランド及び複数のソースオペランドを含む、請求項9に記載の方法。
【請求項11】
前記ハードウェア命令のセットは1つ又は複数のハードウェア命令を含み、該1つ又は複数のハードウェア命令のそれぞれが、前記処理リソースに、単一のサイクルで乗算及び加算演算を行わせる、請求項10に記載の方法。
【請求項12】
前記1つ又は複数のハードウェア命令のそれぞれが、前記単一のサイクルで複数のデータ要素に対して前記乗算及び加算演算を行う、請求項11に記載の方法。
【請求項13】
前記繰返し回数は、前記ハードウェア命令のセットに対して生成するハードウェア命令の最大数を示す、請求項12に記載の方法。
【請求項14】
前記ハードウェア命令のセットを生成するステップは、
前記述語マスク内のアクティブビットに対する第1のハードウェア命令を生成するステップと、
前記述語マスク内の非アクティブビットに対する第2のハードウェア命令の生成をバイパスするステップと、を含む、請求項13に記載の方法。
【請求項15】
前記ハードウェア命令のセットを生成するステップは、さらに、
前記第1のハードウェア命令に対する第1のオペランドセットを生成するステップを含み、該第1のオペランドセットは、前記第1のハードウェア命令で使用されるデスティネーションレジスタ及び複数のソースレジスタを示し、前記第1のオペランドセットは、前記初期オペランドのセット及びオペランドオフセットに基づいて生成される、請求項14に記載の方法。
【請求項16】
前記述語マスクは、ソースオペランドに関連する各非ゼロ要素についてアクティブビットを含む、請求項9乃至15のいずれか一項に記載の方法。
【請求項17】
データ処理システムであって、当該データ処理システムは、
バスに結合されたメモリと、
前記バスに接続されたグラフィックプロセッサと、を含み、
該グラフィックプロセッサは、
述語マスク、繰返し回数、及びデスティネーションオペランドと複数のソースオペランドとを含む初期オペランドのセットを有するハードウェアマクロ命令をフェッチする命令フェッチャであって、前記ハードウェアマクロ命令は、行列のセットに関連付けられた入力に対して1回以上の乗算及び加算演算を行うための命令である、命令フェッチャと、
前記ハードウェアマクロ命令をデコードし、1回以上の乗算及び加算演算を行うハードウェア命令のセットを生成する命令デコーダであって、前記ハードウェア命令のセットは、前記述語マスク及び前記繰返し回数に基づいて生成される、命令デコーダと、
前記ハードウェア命令のセットを実行する処理リソースであって、前記ハードウェアマクロ命令は、前記ハードウェア命令のセットが完了するとリタイアされる、処理リソースと、を含む、
データ処理システム。
【請求項18】
前記ハードウェア命令のセットは、1つ又は複数のハードウェア命令を含み、該1つ又は複数のハードウェア命令のそれぞれが、前記処理リソースに、単一のサイクルで乗算及び加算演算を行わせるための命令である、請求項17に記載のデータ処理システム。
【請求項19】
前記1つ又は複数のハードウェア命令のそれぞれが、前記単一のサイクルで複数のデータ要素に対して前記乗算及び加算演算を行うための命令である、請求項18に記載のデータ処理システム。
【請求項20】
前記繰返し回数は、前記ハードウェア命令のセットに対して生成するハードウェア命令の最大数を示す、請求項19に記載のデータ処理システム。
【請求項21】
前記ハードウェア命令のセットを生成するために、前記命令デコーダは、
前記述語マスク内のアクティブビットに対する第1のハードウェア命令を生成し、
前記述語マスク内の非アクティブビットに対する第2のハードウェア命令の生成をバイパスする、請求項20に記載のデータ処理システム。
【請求項22】
前記ハードウェア命令のセットを生成するために、前記命令デコーダは、さらに、
前記第1のハードウェア命令に対する第1のオペランドセットを生成し、前記第1のオペランドセットは、前記第1のハードウェア命令で使用されるデスティネーションレジスタ及び複数のソースレジスタを示し、前記第1のオペランドセットは、前記初期オペランドのセット及びオペランドオフセットに基づいて生成される、請求項21に記載のデータ処理システム。
【請求項23】
前記述語マスクは、ソースオペランドに関連する各非ゼロ要素についてアクティブビットを含む、請求項17乃至22のいずれか一項に記載のデータ処理システム。
【発明の詳細な説明】
【技術分野】
【0001】
本願は、ゼロスキップを伴うベクトル乗算加算(multiply add:積和演算)の命令及びロジックに関する。
【背景技術】
【0002】
行列乗算は、高性能コンピューティング(HPC)及び機械学習(ML)ワークロードで実行される最も一般的な演算の1つである。行列乗算演算は、大抵の場合、融合乗算-加算命令の変形を用いて、プロセッサ機能ユニットで実行される。これらのワークロードで使用される行列は大抵の場合スパースであるため、命令に提供される乗数又は被乗数がゼロである可能性が高く、結果としてゼロ値が累積される。従って、そのような演算は、最終結果に影響を与えることなくバイパスすることができる。
【図面の簡単な説明】
【0003】
本実施形態の上記の特徴を詳しく理解することができるように、上で簡単に要約された実施形態のより具体的な説明が、実施形態を参照することによって行われ得、その実施形態のいくつかは、添付図面に示される。ただし、添付の図面は典型的な実施形態のみを示しており、従って、その範囲を限定するものと見なすべきではないことに留意されたい。
【
図1】一実施形態による処理システムのブロック図である。
【
図2A】本明細書で説明する実施形態によって提供されるコンピュータシステム及びグラフィックプロセッサを示す図である。
【
図2B】本明細書で説明する実施形態によって提供されるコンピュータシステム及びグラフィックプロセッサを示す図である。
【
図2C】本明細書で説明する実施形態によって提供されるコンピュータシステム及びグラフィックプロセッサを示す図である。
【
図2D】本明細書で説明する実施形態によって提供されるコンピュータシステム及びグラフィックプロセッサを示す図である。
【
図3A】本明細書で説明する実施形態によって提供される追加のグラフィックプロセッサ及び計算アクセラレータアーキテクチャのブロック図である。
【
図3B】本明細書で説明する実施形態によって提供される追加のグラフィックプロセッサ及び計算アクセラレータアーキテクチャのブロック図である。
【
図3C】本明細書で説明する実施形態によって提供される追加のグラフィックプロセッサ及び計算アクセラレータアーキテクチャのブロック図である。
【
図4】いくつかの実施形態による、グラフィックプロセッサのグラフィック処理エンジン410のブロック図である。
【
図5A】本明細書で説明する実施形態による、グラフィックプロセッサコアで使用される処理要素のアレイを含むスレッド実行ロジックを示す図である。
【
図5B】本明細書で説明する実施形態による、グラフィックプロセッサコアで使用される処理要素のアレイを含むスレッド実行ロジックを示す図である。
【
図6】一実施形態による、追加の実行ユニットを示す図である。
【
図7】いくつかの実施形態によるグラフィックプロセッサ命令フォーマットを示すブロック図である。
【
図8】別の実施形態によるグラフィックプロセッサのブロック図である。
【
図9A】いくつかの実施形態による、グラフィックプロセッサのコマンドフォーマット及びコマンドシーケンスを示す図である。
【
図9B】いくつかの実施形態による、グラフィックプロセッサのコマンドフォーマット及びコマンドシーケンスを示す図である。
【
図10】いくつかの実施形態によるデータ処理システムのための例示的なグラフィックソフトウェアアーキテクチャを示す図である。
【
図11A】一実施形態によるIPコア開発システムを示すブロック図である。
【
図11B】本明細書で説明するいくつかの実施形態による集積回路パッケージアセンブリの側断面図である。
【
図11C】基板に接続されたハードウェア論理チップレットの複数のユニットを含むパッケージアセンブリを示す図である。
【
図11D】一実施形態による、交換可能なチップレットを含むパッケージアセンブリを示す図である。
【
図12】本明細書で説明する様々な実施形態による、1つ又は複数のIPコアを用いて製造され得る例示的な集積回路及び関連するグラフィックプロセッサを示す図である。
【
図13A】本明細書で説明する様々な実施形態による、1つ又は複数のIPコアを用いて製造され得る例示的な集積回路及び関連するグラフィックプロセッサを示す図である。
【
図13B】本明細書で説明する様々な実施形態による、1つ又は複数のIPコアを用いて製造され得る例示的な集積回路及び関連するグラフィックプロセッサを示す図である。
【
図14】一実施形態による機械学習ソフトウェアスタックを示す図である。
【
図15A】例示的な深層ニューラルネットワークの層を示す図である。
【
図15B】例示的な深層ニューラルネットワークの層を示す図である。
【
図16】例示的な再帰型ニューラルネットワークを示す図である。
【
図17】深層ニューラルネットワークの訓練及び展開を示す図である。
【
図19】一実施形態によるデータ処理システムのブロック図である。
【
図20】ソース行列及びデスティネーション行列に対する一般的な行列乗算演算を示す図である。
【
図21A】スパース入力に対してゼロスキップを伴う乗算加算ベクトル演算を可能にするための命令及び関連するハードウェアロジックを示す図である。
【
図21B】スパース入力に対してゼロスキップを伴う乗算加算ベクトル演算を可能にするための命令及び関連するハードウェアロジックを示す図である。
【
図21C】スパース入力に対してゼロスキップを伴う乗算加算ベクトル演算を可能にするための命令及び関連するハードウェアロジックを示す図である。
【
図22】一実施形態による、スパース入力の命令展開及びスキップを示す図である。
【
図23】一実施形態による、乗算/加算/ベクトル命令の実行を容易にする方法を示す図である。
【
図24】一実施形態による、グラフィックプロセッサを含むコンピュータ装置のブロック図である。
【発明を実施するための形態】
【0004】
本明細書で説明する実施形態は、一般的に、一般行列乗算(GEMM)カーネルにある複数の乗算-加算命令を圧縮する新しい命令(madv)を提供する。命令を実行すると、グラフィックプロセッサの機能ユニットは、ブロードキャストソースのゼロ値を比較して、述語(predicate)としてmadv命令に送られるskipMaskビットマップを作成できる。述語は、madv命令の展開中に個々の乗算-加算命令をスキップするために使用される。命令インスタンスのスキップは、スパース行列の乗算に特に役立つ。展開中にスキップできる命令反復の回数は、入力のスパース性に関連している。HPC/ML計算ドメインでは、行列のスパース性が50%を超える可能性があり、動的な乗算-加算命令の半分以上をバイパスできるため、そのようなワークロードで2倍以上の高速化が実現する。さらに、そのようなワークロードによって消費される命令フェッチ及びデコードの帯域幅は、グラフィックプロセッサによって消費される動作電力の量とともに減少する。一般に、madv命令によって提供される利点と所与の入力行列内のゼロの数との間には、直接的な相関関係が確認され得る。
【0005】
説明の目的で、以下で説明する様々な実施形態の完全な理解を与えるために、多くの特定の詳細について述べる。しかしながら、当業者には、これらの特定の詳細のいくつかがなくても実施形態を実施できることは、明らかであろう。他の例では、基礎となる原理を不明瞭にしないようにし、実施形態のより完全な理解を与えるために、よく知られた構造及び装置がブロック図の形式で示される。以下の実施形態のいくつかについてグラフィックプロセッサを参照して説明するが、本明細書で説明する技術及び教示は、汎用処理装置又はグラフィック処理装置を含む様々なタイプの回路又は半導体デバイスに適用され得る。本明細書における「一実施形態」又は「実施形態」への言及は、実施形態に関して、又は実施形態に関連して説明する特定の特徴、構造、又は特性が、そのような実施形態のうちの少なくとも1つに含まれ得ることを示す。しかしながら、明細書中の様々な場所での「一実施形態では」という句の出現は、必ずしも全てが同じ実施形態を指すとは限らない。
【0006】
以下の説明及び特許請求の範囲では、「結合された」及び「接続された」という用語が、それらの派生語とともに使用され得る。これらの用語は互いに同義語として意図していないことを理解されたい。「結合された」は、互いに直接物理的又は電気的に接触しても、しなくてもよい2つ以上の要素が、互いに協働又は相互作用することを示すために使用される。「接続された」は、互いに結合された2つ以上の要素の間の通信の確立を示すために使用される。
【0007】
以下の説明では、
図1~
図13は、様々な実施形態を組み込むか、又は様々な実施形態に関連する例示的なデータ処理システム及びグラフィックプロセッサロジックの概要を提示する。
図14~
図19は、機械学習の概要と、グラフィックプロセッサ及び並列プロセッサの機械学習への適用性と提示する。
図20~
図24は、様々な実施形態の特定の詳細を提示する。以下の実施形態のいくつかの態様は、グラフィックプロセッサに関して説明し、他の態様は、中央処理装置(CPU)等の汎用プロセッサに関して説明する。同様の技術及び教示は、多くの集積コアプロセッサ、GPUクラスタ、又はフィールドプログラマブルゲートアレイ(FPGA)の1つ又は複数のインスタンスを含むがこれらに限定されない、他のタイプの回路又は半導体デバイスに適用できる。一般に、この教示は、画像(例えば、サンプル、ピクセル)、頂点データ、又は幾何学データを操作又は処理する、又は機械学習及び高性能コンピュータアプリケーションの並列処理操作を行う任意のプロセッサ又はマシンに適用できる。
【0008】
システムの概要
【0009】
図1は、一実施形態による処理システム100のブロック図である。システム100は、シングルプロセッサデスクトップシステム、マルチプロセッサワークステーションシステム、或いは多数のプロセッサ102又はプロセッサコア107を有するサーバシステムで使用することができる。一実施形態では、システム100は、ローカル又はワイドエリアネットワークへの有線又は無線接続を伴うモノのインターネット(IoT)装置内等のモバイル、ハンドヘルド、又は埋込み型装置で使用するために、システムオンチップ(SoC)集積回路内に組み込まれた処理プラットフォームである。
【0010】
一実施形態では、システム100は、サーバベースのゲームプラットフォーム、ゲームを含むゲームコンソール及びメディアコンソール、モバイルゲームコンソール、ハンドヘルドゲームコンソール、又はオンラインゲームコンソールを含むか、それに結合するか、又はその中に統合することができる。いくつかの実施形態では、システム100は、携帯電話、スマートフォン、タブレットコンピュータ装置、又は内部記憶容量が少ないラップトップ等のモバイルインターネット接続装置の一部である。処理システム100はまた、スマートウォッチウェアラブル装置等のウェアラブル装置;現実世界の視覚、音声、又は触覚体験を補完するために視覚、音声、又は触覚出力を提供し、或いは他にテキスト、音声、グラフィック、ビデオ、ホログラフィック画像又はビデオ、又は触覚フィードバックを提供する拡張現実(AR)又は仮想現実(VR)機能で強化されたスマートアイウェア又は衣服;他の拡張現実(AR)装置;又は他の仮想現実(VR)装置を含むか、それと結合するか、又はその中に統合することができる。いくつかの実施形態では、処理システム100は、テレビ又はセットトップボックス装置を含むか、又はその一部である。一実施形態では、システム100は、バス、トラクタトレーラー、自動車、モータサイクル又は電力サイクル、飛行機又はグライダー(又は、これらの任意の組合せ)等の自動運転車両を含むか、それに結合するか、又はその中に統合することができる。自動運転車両は、システム100を使用して、車両の周囲で感知された環境を処理することができる。
【0011】
いくつかの実施形態では、1つ又は複数のプロセッサ102はそれぞれ、実行時にシステム又はユーザソフトウェアの動作を行う命令を処理するための1つ又は複数のプロセッサコア107を含む。いくつかの実施形態では、1つ又は複数のプロセッサコア107のうちの少なくとも1つが、特定の命令セット109を処理するように構成される。いくつかの実施形態では、命令セット109は、複合命令セットコンピューティング(CISC)、縮小命令セットコンピューティング(RISC)、又は超長命令語(VLIW)を介した計算を容易にし得る。1つ又は複数のプロセッサコア107は、他の命令セットのエミュレーションを容易にするための命令を含み得る、異なる命令セット109を処理し得る。プロセッサコア107は、デジタル信号プロセッサ(DSP)等の他の処理装置も含み得る。
【0012】
いくつかの実施形態では、プロセッサ102は、キャッシュメモリ104を含む。アーキテクチャに応じて、プロセッサ102は、単一の内部キャッシュ又は複数のレベルの内部キャッシュを有することができる。いくつかの実施形態では、キャッシュメモリは、プロセッサ102の様々なコンポーネントの間で共有される。いくつかの実施形態では、プロセッサ102は、外部キャッシュ(例えば、レベル3(L3)キャッシュ又はラストレベルキャッシュ(LLC))(図示せず)も使用し、このキャッシュは、既知のキャッシュコヒーレンシ技術を用いてプロセッサコア107の間で共有することができる。レジスタファイル106は、プロセッサ102にさらに含まれ得、且つ異なるタイプのデータを格納するための異なるタイプのレジスタ(例えば、整数レジスタ、浮動小数点レジスタ、状態レジスタ、及び命令ポインタレジスタ)を含み得る。いくつかのレジスタは、汎用レジスタであり得るが、他のレジスタは、プロセッサ102の設計に固有であり得る。
【0013】
いくつかの実施形態では、1つ又は複数のプロセッサ102は、1つ又は複数のインターフェイスバス110に結合され、プロセッサ102とシステム100内の他のコンポーネントとの間でアドレス、データ、又は制御信号等の通信信号を送信する。一実施形態では、インターフェイスバス110は、ダイレクトメディアインターフェイス(DMI)バスのバージョン等のプロセッサーバスとすることができる。ただし、プロセッサーバスは、DMIバスに限定されず、1つ又は複数の周辺コンポーネント相互接続バス(例えば、PCI、PCIエクスプレス)、メモリバス、又は他のタイプのインターフェイスバスを含み得る。一実施形態では、プロセッサ102は、集積メモリコントローラ116及びプラットフォームコントローラハブ130を含む。メモリコントローラ116は、メモリ装置とシステム100の他のコンポーネントとの間の通信を容易にする一方、プラットフォームコントローラハブ(PCH)130は、ローカルI/Oバスを介したI/O装置への接続を提供する。
【0014】
メモリ装置120は、ダイナミックランダムアクセスメモリ(DRAM)装置、スタティックランダムアクセスメモリ(SRAM)装置、フラッシュメモリ装置、相変化メモリ装置、又はプロセスメモリとして機能するための適切な性能を有する他の何らかのメモリ装置であり得る。一実施形態では、メモリ装置120は、システム100のシステムメモリとして動作して、1つ又は複数のプロセッサ102がアプリケーション又はプロセスを実行するときに使用するデータ122及び命令121を格納することができる。メモリコントローラ116は、プロセッサ102内の1つ又は複数のグラフィックプロセッサ108と通信して、グラフィック及びメディア処理を行い得るオプションの外部グラフィックプロセッサ118とも結合する。いくつかの実施形態では、グラフィック、メディア、又は計算処理は、グラフィック、メディア、又は計算処理の特殊なセットを実行するように構成できるコプロセッサであるアクセラレータ112によって支援され得る。例えば、一実施形態では、アクセラレータ112は、機械学習又は計算処理を最適化するために使用される行列乗算アクセラレータである。一実施形態では、アクセラレータ112は、グラフィックプロセッサ108と連携して光線追跡処理(ray-tracing operations)を行うために使用できる光線追跡アクセラレータである。一実施形態では、外部アクセラレータ119は、アクセラレータ112の代わりに、又はアクセラレータ112と連携して使用され得る。
【0015】
いくつかの実施形態では、表示装置111は、プロセッサ102に接続することができる。表示装置111は、モバイル電子装置又はラップトップ装置又は表示インターフェイス(例えば、DisplayPort等)を介して取り付けられる外部表示装置のように、1つ又は複数の内部表示装置であってもよい。一実施形態では、表示装置111は、仮想現実(VR)アプリケーション又は拡張現実(AR)アプリケーションで使用するための立体表示装置等のヘッドマウントディスプレイ(HMD)とすることができる。
【0016】
いくつかの実施形態では、プラットフォームコントローラハブ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(登録商標)トランシーバ、Bluetooth(登録商標)トランシーバ、或いは3G、4G、5G、又はLTE(Long-Term Evolution)トランシーバ等のモバイルネットワークトランシーバとすることができる。ファームウェアインターフェイス128は、システムファームウェアとの通信を可能にし、例えば、UEFI(unified extensible firmware interface)であり得る。ネットワークコントローラ134は、有線ネットワークへのネットワーク接続を可能にし得る。いくつかの実施形態では、高性能ネットワークコントローラ(図示せず)は、インターフェイスバス110と結合する。一実施形態では、音声コントローラ146は、マルチチャネル高品位音声コントローラである。一実施形態では、システム100は、レガシー(例えば、パーソナルシステム2(PS/2))装置をシステムに結合するためのオプションのレガシーI/Oコントローラ140を含む。プラットフォームコントローラハブ130は、1つ又は複数のユニバーサルシリアルバス(USB)コントローラ142に接続して、キーボード及びマウス143の組合せ、カメラ144、又は他のUSB入力装置等の入力装置を接続することもできる。
【0017】
示されているシステム100は、例示的であり、異なるように構成された他のタイプのデータ処理システムも使用できるので、限定ではないことを理解されたい。例えば、メモリコントローラ116及びプラットフォームコントローラハブ130のインスタンスは、外部グラフィックプロセッサ118等の別個の外部グラフィックプロセッサに統合され得る。一実施形態では、プラットフォームコントローラハブ130及び/又はメモリコントローラ116は、1つ又は複数のプロセッサ102の外部にあってもよい。例えば、システム100は、外部メモリコントローラ116及びプラットフォームコントローラハブ130を含むことができ、これらは、プロセッサ102と通信するシステムチップセット内のメモリコントローラハブ及び周辺コントローラハブとして構成してもよい。
【0018】
例えば、回路基板(スレッド)を使用することができ、その上に、CPU、メモリ、及び他のコンポーネント等のコンポーネントが配置され、熱性能を高めるように設計されている。いくつかの例では、プロセッサ等の処理コンポーネントはスレッドの上面に配置される一方、DIMM等のニアメモリ(near memory)はスレッドの下面に配置される。この設計によって強化されたエアフローの結果として、コンポーネントは、典型的なシステムよりも高い周波数及び電力レベルで動作し、それによりパフォーマンスを向上させることができる。さらに、スレッドは、ラック内の電源ケーブル及びデータ通信ケーブルと盲目的に嵌合するように構成され、それにより迅速に取り外し、アップグレード、再インストール、及び/又は交換する能力が高まる。同様に、スレッドに配置されたプロセッサ、アクセラレータ、メモリ、データストレージドライブ等の個々のコンポーネントは、互いの間隔が広がるため、容易にアップグレードできるように構成される。例示的な実施形態では、コンポーネントは、それらの真正性を証明するためにハードウェア認証機能をさらに含む。
【0019】
データセンターは、イーサネット及びオムニパスを含む複数の他のネットワークアーキテクチャをサポートする単一のネットワークアーキテクチャ(ファブリック)を利用することができる。スレッドは、典型的なツイストペアケーブル(例えば、カテゴリ5、カテゴリ5E、カテゴリ6等)よりも高い帯域幅及び低レイテンシを提供する光ファイバーを介してスイッチに接続できる。高帯域幅、低レイテンシの相互接続、及びネットワークアーキテクチャにより、データセンターは、使用中に、メモリ、アクセラレータ(例えば、GPU、グラフィックアクセラレータ、FPGA、ASIC、ニューラルネットワーク、及び/又は人工知能アクセラレータ等)、及び物理的に集約解除されたデータストレージドライブ等のリソースをプールし、必要に応じてこれらをコンピュータリソース(プロセッサ等)に提供し、コンピュータリソースが、ローカルであるかのようにプールされたリソースにアクセスできるようにする。
【0020】
電源又は電力源は、電圧及び/又は電流を、システム100又は本明細書で説明する任意のコンポーネント又はシステムに供給することができる。一例では、電源は、壁のコンセントに差し込むためのACからDC(交流から直流)へのアダプタを含む。そのようなAC電力は、再生可能エネルギー(例えば、太陽光発電)電源であり得る。一例では、電源は、外部AC-DCコンバータ等のDC電源を含む。一例では、電源又は電力源は、充電場への近接によって充電するワイヤレス充電ハードウェアを含む。一例では、電源は、内部バッテリ、交流電源、運動ベースの電源、太陽光電源、又は燃料電池電源を含むことができる。
【0021】
図2A~
図2Dは、本明細書で説明する実施形態によって提供されるコンピュータシステム及びグラフィックプロセッサを示す。本明細書の他の図の要素と同じ参照符号(又は名前)を有する
図2A~
図2Dの要素は、本明細書の他の場所で説明しているのと同様の方法で動作又は機能できるが、それに限定されるものではない。
【0022】
図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との間のコヒーレンシを維持する。
【0023】
いくつかの実施形態では、プロセッサ200はまた、1つ又は複数のバスコントローラユニット216及びシステムエージェントコア210のセットを含み得る。1つ又は複数のバスコントローラユニット216は、1つ又は複数のPCI又はPCIエクスプレスバス等の周辺バスのセットを管理する。システムエージェントコア210は、様々なプロセッサコンポーネントに管理機能を提供する。いくつかの実施形態では、システムエージェントコア210は、様々な外部メモリ装置(図示せず)へのアクセスを管理するための1つ又は複数の集積メモリコントローラ214を含む。
【0024】
いくつかの実施形態では、プロセッサコア202A~202Nのうちの1つ又は複数は、同時マルチスレッディングのサポートを含む。そのような実施形態では、システムエージェントコア210は、マルチスレッド処理中にコア202A~202Nを調整及び操作するためのコンポーネントを含む。システムエージェントコア210は、プロセッサコア202A~202N及びグラフィックプロセッサ208の電力状態を調整するためのロジック及びコンポーネントを含む電力制御ユニット(PCU)をさらに含み得る。
【0025】
いくつかの実施形態では、プロセッサ200は、グラフィック処理操作を行うためのグラフィックプロセッサ208をさらに含む。いくつかの実施形態では、グラフィックプロセッサ208は、共有キャッシュユニット206のセットと、1つ又は複数の集積メモリコントローラ214を含むシステムエージェントコア210と結合する。いくつかの実施形態では、システムエージェントコア210は、グラフィックプロセッサの出力を1つ又は複数の結合されたディスプレイに駆動する表示コントローラ211も含む。いくつかの実施形態では、表示コントローラ211はまた、少なくとも1つの相互接続を介してグラフィックプロセッサと結合された別個のモジュールであってもよく、又はグラフィックプロセッサ208内に統合してもよい。
【0026】
いくつかの実施形態では、リングベースの相互接続ユニット212は、プロセッサ200の内部コンポーネントを結合するために使用される。しかしながら、ポイントツーポイント相互接続、スイッチ相互接続、又は当技術分野で周知の技術を含む他の技術等の代替の相互接続ユニットを使用してもよい。いくつかの実施形態では、グラフィックプロセッサ208は、I/Oリンク213を介してリング相互接続212と結合する。
【0027】
例示的なI/Oリンク213は、様々なプロセッサコンポーネントとeDRAMモジュール等の高性能埋込み型メモリモジュール218との間の通信を容易にするオンパッケージI/O相互接続を含む、I/O相互接続の複数の種類のうちの少なくとも1つを表す。いくつかの実施形態では、プロセッサコア202A~202N及びグラフィックプロセッサ208のそれぞれは、埋込み型メモリモジュール218を共有ラストレベルキャッシュとして使用することができる。
【0028】
いくつかの実施形態では、プロセッサコア202A~202Nは、同じ命令セットアーキテクチャを実行する同種(homogeneous)のコアである。別の実施形態では、プロセッサコア202A~202Nは、命令セットアーキテクチャ(ISA)に関して異種(heterogeneous)であり、プロセッサコア202A~202Nのうちの1つ又は複数が第1の命令セットを実行する一方、他のコアのうちの少なくとも1つが、第1の命令セット又は別の命令セットのサブセットを実行する。一実施形態では、プロセッサコア202A~202Nは、マイクロアーキテクチャに関して異種であり、電力消費が比較的高い1つ又は複数のコアが、電力消費が低い1つ又は複数の電力コアと結合する。一実施形態では、プロセッサコア202A~202Nは、計算能力に関して異種である。さらに、プロセッサ200は、1つ又は複数のチップ上で、又は他のコンポーネントに加えて、例示されたコンポーネントを有するSoC集積回路として実装することができる。
【0029】
図2Bは、本明細書で説明するいくつかの実施形態による、グラフィックプロセッサコア219のハードウェアロジックのブロック図である。本明細書の他の図の要素と同じ参照符号(又は名前)を有する
図2Bの要素は、本明細書の他の場所で説明しているのと同様の方法で動作又は機能できるが、それに限定されるものではない。コアスライスと呼ばれることもあるグラフィックプロセッサコア219は、モジュール式グラフィックプロセッサ内の1つ又は複数のグラフィックコアとすることができる。グラフィックプロセッサコア219は、1つのグラフィックコアスライスの例であり、本明細書で説明するグラフィックプロセッサは、目標電力及び性能エンベロープに基づいた複数のグラフィックコアスライスを含み得る。各グラフィックプロセッサコア219は、汎用及び固定機能(function:関数)ロジックのモジュール式ブロックを含む、サブスライスとも呼ばれる複数のサブコア221A~221Fと結合された固定機能ブロック230を含むことができる。
【0030】
いくつかの実施形態では、固定機能ブロック230は、例えば、より低い性能及び/又はより低い電力のグラフィックプロセッサ実装において、グラフィックプロセッサコア219の全てのサブコアによって共有され得る幾何学/固定機能パイプライン231を含む。様々な実施形態において、幾何学/固定機能パイプライン231は、3D固定機能パイプライン(例えば、以下で説明する
図3及び
図4における3Dパイプライン312)、ビデオフロントエンドユニット、スレッド生成器(spawner)及びスレッドディスパッチャ、統合リターン(unified return)バッファマネージャ(例えば、以下で説明するように、
図4の統合リターンバッファ418)を管理する統合リターンバッファマネージャを含む。
【0031】
一実施形態では、固定機能ブロック230は、グラフィックSoCインターフェイス232、グラフィックマイクロコントローラ233、及びメディアパイプライン234も含む。グラフィックSoCインターフェイス232は、グラフィックプロセッサコア219と、システムオンチップ集積回路内の他のプロセッサコアとの間のインターフェイスを提供する。グラフィックマイクロコントローラ233は、スレッドディスパッチ、スケジューリング、及びプリエンプション(pre-emption)を含むグラフィックプロセッサコア219の様々な機能を管理するように構成可能なプログラム可能なサブプロセッサである。メディアパイプライン234(例えば、
図3及び
図4のメディアパイプライン316)は、画像及びビデオデータを含むマルチメディアデータのデコード、エンコード、前処理、及び/又は後処理を容易にするロジックを含む。メディアパイプライン234は、サブコア221~212F内の計算又はサンプリングロジックへの要求を介してメディア処理を実施する。
【0032】
一実施形態では、SoCインターフェイス232によって、グラフィックプロセッサコア219が、共有ラストレベルキャッシュメモリ、システムRAM、埋込み型のオンチップ又はオンパッケージDRAM等のメモリ階層要素を含む、汎用アプリケーションプロセッサコア(例えば、CPU)及び/又はSoC内の他のコンポーネントと通信することが可能になる。また、SoCインターフェイス232によって、カメラ撮像パイプライン等のSoC内の固定機能装置との通信が可能になり、グラフィックプロセッサコア219とSoC内のCPUとの間で共有され得るグローバルメモリアトミック(atomic)の使用及び/又は実装が可能になる。SoCインターフェイス232はまた、グラフィックプロセッサコア219のための電力管理制御を実施し、グラフィックコア219のクロックドメインとSoC内の他のクロックドメインとの間のインターフェイスを可能にする。一実施形態では、SoCインターフェイス232は、グラフィックプロセッサ内の1つ又は複数のグラフィックコアのそれぞれにコマンド及び命令を与えるように構成されたコマンドストリーマ及びグローバルスレッドディスパッチャからのコマンドバッファの受領を可能にする。コマンド及び命令は、メディア処理が実行される場合はメディアパイプライン234にディスパッチでき、グラフィック処理操作が実行される場合は幾何学及び固定機能パイプライン(例えば、幾何学及び固定機能パイプライン231、幾何学及び固定機能パイプライン237)にディスパッチできる。
【0033】
グラフィックマイクロコントローラ233は、グラフィックプロセッサコア219の様々なスケジューリング及び管理タスクを実行するように構成することができる。一実施形態では、グラフィックマイクロコントローラ233は、サブコア221A~221F内で実行ユニット(EU)アレイ222A~222F、224A~224F内の様々なグラフィック並列エンジンに対してグラフィック及び/又は計算ワークロードスケジューリングを実行することができる。このスケジューリングモデルでは、グラフィックプロセッサコア219を含むSoCのCPUコアで実行されるホストソフトウェアが、適切なグラフィックエンジンにスケジューリング操作を呼び出す、複数のグラフィックプロセッサドアベルのうちの1つにワークロードを送信できる。スケジュール操作には、次にどのワークロードを実行するかの決定、コマンドストリーマへのワークロードの送信、エンジンで実行されている既存のワークロードの横取り(pre-empting)、ワークロードの進行状況の監視、ワークロードの完了時のホストソフトウェアへの通知が含まれる。一実施形態では、グラフィックマイクロコントローラ233は、グラフィックプロセッサコア219の低電力又はアイドル状態を促進することもでき、グラフィックプロセッサコア219に、オペレーティングシステム及び/又はシステム上のグラフィックドライバソフトウェアから独立して、低電力状態遷移でグラフィックプロセッサコア219内のレジスタを保存及び復元する能力を提供する。
【0034】
グラフィックプロセッサコア219は、図示されたサブコア221A~221Fよりも多いか又は少ない、最大N個のモジュール式サブコアを有することができる。N個のサブコアの各セットについて、グラフィックプロセッサコア219は、共有機能(function:関数)ロジック235、共有及び/又はキャッシュメモリ236、幾何学/固定機能パイプライン237だけでなく、様々なグラフィック及び計算処理の動作を加速させる追加の固定機能ロジック238も含むことができる。共有機能ロジック235は、
図4の共有機能ロジック420(例えば、サンプラー、数学、及び/又はスレッド間通信ロジック)に関連付けられた、グラフィックプロセッサコア219内のN個の各サブコアによって共有できる論理ユニットを含むことができる。共有及び/又はキャッシュメモリ236は、グラフィックプロセッサコア219内のN個のサブコア221A~221Fのセットのラストレベルキャッシュとすることができ、且つ複数のサブコアによってアクセス可能な共有メモリとしても機能することができる。幾何学/固定機能パイプライン237は、固定機能ブロック230内の幾何学/固定機能パイプライン231の代わりに含めることができ、同じ又は類似の論理ユニットを含むことができる。
【0035】
一実施形態では、グラフィックプロセッサコア219は、グラフィックプロセッサコア219が使用する様々な固定機能加速化ロジックを含むことができる追加の固定機能ロジック238を含む。一実施形態では、追加の固定機能ロジック238は、位置のみのシェーディング(shading)で使用する追加の幾何学パイプラインを含む。位置のみのシェーディングでは、2つの幾何学パイプライン、幾何学/固定機能パイプライン238、231内のフル幾何学パイプラインと、追加の固定機能ロジック238に含めることができる追加の幾何学パイプラインであるカル(cull)パイプラインとが存在する。一実施形態では、カルパイプラインは、フル幾何学パイプラインの細分化したバージョンである。フルパイプライン及びカルパイプラインは、同じアプリケーションの異なるインスタンスを実行でき、各インスタンスには個別のコンテキストがある。位置のみのシェーディングでは、破棄された三角形の長いカルラン(cull runs)を非表示にできるため、場合によってはシェーディングをより早く完了できる。例えば、一実施形態では、追加の固定機能ロジック238内のカルパイプラインロジックは、メインアプリケーションと並行して位置シェーダー(shader)を実行でき、ピクセルのフレームバッファへのラスタライズ(rasterization)及びレンダリングを実行せずに、カルパイプラインが頂点の位置属性のみをフェッチ及びシェーディングするので、一般にフルパイプラインよりも高速に重要な結果を生成することができる。カルパイプラインは、生成された重要な結果を使用して、それら三角形が間引きされている(culled)かどうかに関係なく、全ての三角形の可視性情報を計算できる。完全なパイプライン(この例では再生パイプラインと呼ばれ得る)は、可視情報を消費して、間引きされた三角形をスキップして、最終的にラスタライズフェーズに渡される可視の三角形のみをシェーディングできる。
【0036】
一実施形態では、追加の固定機能ロジック238は、機械学習訓練又は推論のための最適化を含む実装のために、固定関数行列乗算ロジック等の機械学習加速化ロジックも含むことができる。
【0037】
各グラフィックサブコア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を利用して、スレッドグループ内で実行されるスレッドがオンチップメモリの共通プールを用いて実行できるようにする。
【0038】
図2Cは、マルチコアグループ240A~240Nに配置されたグラフィック処理リソースの専用セットを含むグラフィック処理ユニット(GPU)239を示す。単一のマルチコアグループ240Aのみの詳細が提示されているが、他のマルチコアグループ240B~240Nは、グラフィック処理リソースの同じ又は同様のセットを装備できることが理解されよう。
【0039】
図示されるように、マルチコアグループ240Aは、グラフィックコア243のセット、テンソルコア244のセット、及び光線追跡コア245のセットを含み得る。スケジューラ/ディスパッチャ241は、様々なコア243、244、245に対する実行のためにグラフィックスレッドをスケジュールし、ディスパッチする。レジスタファイル242のセットは、グラフィックスレッドを実行するときにコア243、244、245によって使用されるオペランド値を格納する。これらには、例えば、整数値を格納するための整数レジスタ、浮動小数点値を格納するための浮動小数点レジスタ、パックされたデータ要素(整数及び/又は浮動小数点データ要素)を格納するためのベクトルレジスタ、及びテンソル/マトリックス値を格納するためのタイルレジスタが含まれる。一実施形態では、タイルレジスタは、ベクトルレジスタの組合せセットとして実装される。
【0040】
1つ又は複数の組合せレベル1(L1)キャッシュ及び共有メモリユニット247は、テクスチャデータ、頂点データ、ピクセルデータ、光線(ray)データ、境界ボリュームデータ等のグラフィックデータを各マルチコアグループ240A内にローカルに格納する。1つ又は複数のテクスチャユニット247を使用して、テクスチャマッピング及びサンプリング等のテクスチャリング操作を行うこともできる。マルチコアグループ240A~240Nの全て又はサブセットによって共有されるレベル2(L2)キャッシュ253は、グラフィックデータ及び/又は複数の同時グラフィックスレッドのための命令を格納する。図示されるように、L2キャッシュ253は、複数のマルチコアグループ240A~240Nに亘って共有され得る。1つ又は複数のメモリコントローラ248は、GPU239を、システムメモリ(例えば、DRAM)及び/又は専用グラフィックメモリ(例えば、GDDR6メモリ)であり得るメモリ249に結合する。
【0041】
入力/出力(I/O)回路250は、GPU239を、デジタル信号プロセッサ(DSP)、ネットワークコントローラ、又はユーザ入力装置等の1つ又は複数のI/O装置252に結合する。オンチップ相互接続を使用して、I/O装置252をGPU239及びメモリ249に結合することができる。I/O回路250の1つ又は複数のI/Oメモリ管理ユニット(IOMMU)251が、I/O装置252をシステムメモリ249に直接結合する。一実施形態では、IOMMU251は、ページテーブルの複数のセットを管理して、仮想アドレスをシステムメモリ249内の物理アドレスにマッピングする。この実施形態では、I/O装置252、CPU246、及びGPU(複数可)239は、同じ仮想アドレス空間を共有することができる。
【0042】
一実施態様では、IOMMU251は仮想化をサポートする。この場合に、そのIOMMU251は、ゲスト/グラフィックの仮想アドレスをゲスト/グラフィックの物理アドレスにマッピングするためのページテーブルの第1のセットと、ゲスト/グラフィックの物理アドレスを(例えば、システムメモリ249内の)システム/ホストの物理アドレスにマッピングするためのページテーブルの第2のセットとを管理する。ページテーブルの第1及び第2のセットのそれぞれのベースアドレスは、制御レジスタに格納され、コンテキストスイッチでスワップアウトされる(例えば、それによって、新しいコンテキストに、関連するページテーブルのセットへのアクセスが提供される)。
図2Cには示されていないが、コア243、244、245及び/又はマルチコアグループ240A~240Nのそれぞれは、仮想的なゲスト変換から物理的なゲスト変換、物理的なゲスト変換から物理的なホスト変換、及び仮想的なゲスト変換から物理的なホスト変換をキャッシュするための変換ルックアサイド(lookaside)バッファ(TLB)を含み得る。
【0043】
一実施形態では、CPU246、GPU239、及びI/O装置252は、単一の半導体チップ及び/又はチップパッケージに統合される。図示されたメモリ249は、同じチップ上に統合してもよく、又はオフチップインターフェイスを介してメモリコントローラ248に結合してもよい。一実施態様では、メモリ249は、他の物理的なシステムレベルのメモリと同じ仮想アドレス空間を共有するGDDR6メモリを含むが、本発明の基本的な原理は、この特定の実施態様に限定されるものではない。
【0044】
一実施形態では、テンソルコア244は、ディープラーニング操作を行うために使用される基本的な計算処理である行列演算を行うように特に設計された複数の実行ユニットを含む。例えば、同時行列乗算演算は、ニューラルネットワークの訓練及び推論に使用できる。テンソルコア244は、単精度浮動小数点(例えば、32ビット)、半精度浮動小数点(例えば、16ビット)、整数ワード(16ビット)、バイト(8ビット)、及びハーフバイト(4ビット)を含む様々なオペランド精度を用いて行列処理を行うことができる。一実施形態では、ニューラルネットワーク実施態様は、レンダリングされた各シーンの特徴を抽出し、複数のフレームからの詳細を潜在的に組み合わせて、高品質の最終画像を構築する。
【0045】
ディープラーニングの実施態様において、並列行列乗算作業は、テンソルコア244での実行のためにスケジュールされ得る。特に、ニューラルネットワークの訓練は、かなりの数の行列ドット積演算を必要とする。N×N×N行列乗算の内積定式化を処理するために、テンソルコア244は、少なくともN個のドット積処理要素を含み得る。行列の乗算が始まる前に、1つの行列全体がタイルレジスタに読み込まれ、第2の行列の少なくとも1つの列がNサイクルの各サイクルに読み込まれる。各サイクルで、N個のドット積が処理される。
【0046】
行列要素は、16ビットワード、8ビットバイト(例えば、INT8)、及び4ビットハーフバイト(例えば、INT4)を含む、特定の実施態様に応じて異なる精度で格納され得る。テンソルコア244に異なる精度モードを指定して、様々なワークロード(例えば、バイト及びハーフバイトへの量子化を許容できるワークロードの推論等)で最も効率的な精度が使用されるのを保証する。
【0047】
一実施形態では、光線追跡コア245は、リアルタイム光線追跡及び非リアルタイム光線追跡実装の両方のための光線追跡処理を加速させる。特に、光線追跡コア245は、境界ボリューム階層(BVH)を用いて光線横断(ray traversal)を実行し、光線とBVHボリューム内に囲まれたプリミティブとの間の交差を識別するための光線横断/交差回路を含む。光線追跡コア245は、(例えば、Zバッファ又は同様の構成を用いて)深度テスト及びカリング(culling)を行うための回路も含み得る。一実施態様では、光線追跡コア245は、本明細書に記載の画像ノイズ除去技術と協調して横断及び交差処理を行い、その少なくとも一部はテンソルコア244上で実行され得る。例えば、一実施形態では、テンソルコア244は、ディープラーニングニューラルネットワークを実装して、光線追跡コア245によって生成されたフレームのノイズ除去を行う。ただし、CPU246、グラフィックコア243、及び/又は光線追跡コア245は、ノイズ除去及び/又はディープラーニングアルゴリズムの全て又は一部を実装することもできる。
【0048】
さらに、上述したように、ノイズ除去に対して分散型アプローチを使用することができ、そのアプローチで、GPU239は、ネットワーク又は高速相互接続を介して他のコンピュータ装置に結合されたコンピュータ装置内にある。この実施形態では、相互接続されたコンピュータ装置は、ニューラルネットワーク学習/訓練データを共有して、システム全体が異なるタイプの画像フレーム及び/又は異なるグラフィックアプリケーションのノイズ除去を行うために学習する速度を向上させる。
【0049】
一実施形態では、光線追跡コア245は、全てのBVH横断及び光線(ray)プリミティブ交差を処理し、グラフィックコア243が光線当たり数千の命令で過負荷状態になるのを防ぐ。一実施形態では、各光線追跡コア245は、境界ボックステスト(例えば、横断操作)を実行するための専用回路の第1のセットと、光線三角形交差テスト(例えば、交差する光線がトラバースされる)を実行するための専用回路の第2のセットとを含む。こうして、一実施形態では、マルチコアグループ240Aは、光線プローブを単に起動するだけで済み、光線追跡コア245は、独立して光線横断及び交差を実行し、ヒットデータ(例えば、ヒット、ヒットなし、複数ヒット等)をスレッドコンテキストに返す。他のコア243、244は、光線追跡コア245が横断及び交差処理を行う間に、他のグラフィック又は計算作業を行うために解放される。
【0050】
一実施形態では、各光線追跡コア245は、BVHテスト演算を行う横断ユニットと、光線-プリミティブ交差テストを行う交差ユニットとを含む。交差ユニットは、「ヒット」、「ヒットなし」、又は「複数ヒット」応答を生成し、その応答を適切なスレッドに提供する。横断及び交差処理中に、他のコア(例えば、グラフィックコア243及びテンソルコア244)の実行リソースは、他の形式のグラフィック作業を行うために解放される。
【0051】
以下に説明する特定の一実施形態では、作業がグラフィックコア243と光線追跡コア245との間で分散されるハイブリッドラスタライズ/光線追跡アプローチが使用される。
【0052】
一実施形態では、光線追跡コア245(及び/又は他のコア243、244)は、マイクロソフト(登録商標)のDirectX Ray Tracing(DXR)等の光線追跡命令セットに対するハードウェアサポートを含み、DXRは、ディスパッチレイコマンドだけでなく、及び光線生成、最近接ヒット、任意のヒット、ミスシェーダー(各オブジェクトに固有のシェーダー及びテクスチャのセットを割り当てることができる)を含む。光線追跡コア245、グラフィックコア243、テンソルコア244によってサポートされ得る別の光線追跡プラットフォームは、Vulkan1.1.85である。ただし、本発明の基本的な原理は、特定の光線追跡ISAに限定されないことに注意されたい。
【0053】
一般に、様々なコア245、244、243は、光線生成、最近接ヒット、任意のヒット、光線-プリミティブ交差、プリミティブ毎及び階層境界ボックス構築、ミス、訪問、及び例外のための命令/機能を含む光線追跡命令セットをサポートすることができる。より具体的には、一実施形態は、以下の機能を実行するための光線追跡命令を含む。
【0054】
光線生成 光線生成命令は、各ピクセル、サンプル、又は他のユーザ規定の作業割当てに対して実行され得る。
【0055】
最近接ヒット 最近接ヒット命令は、光線とシーン内のプリミティブとの最も近い交点を見つけるために実行され得る。
【0056】
任意のヒット(any hit) 任意のヒット命令は、光線とシーン内のプリミティブとの間の複数の交差を識別し、潜在的に新しい最も近い交差ポイントを識別する。
【0057】
交差 交差命令は、光線-プリミティブ交差テストを行い、結果を出力する。
【0058】
プリミティブ毎の境界ボックス構築 この命令は、(例えば、新しいBVH又は他の加速度データ構造を構築する場合に)所与のプリミティブ又はプリミティブのグループの周りに境界ボックスを構築する。
【0059】
ミス 光線がシーン内の全ての幾何学、又はシーンの指定された領域に当たらないことを示す。
【0060】
訪問(visit) 光線が横断する小さな(children)ボリュームを示す。
【0061】
例外 (例えば、様々なエラー条件に対して呼び出される)様々なタイプの例外ハンドラを含む。
【0062】
図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コントローラによって実行される演算を行うためのロジックを含むことができる。
【0063】
GPGPU270は、L2キャッシュ253、L1キャッシュ254、命令キャッシュ255、及び共有メモリ256を含む複数のキャッシュメモリを含み、それらの少なくとも一部は、キャッシュメモリとしてパーティション化することもできる。GPGPU270は、複数の計算ユニット260A~260Nも含む。各計算ユニット260A~260Nは、ベクトルレジスタ261、スカラーレジスタ262、ベクトル論理ユニット263、及びスカラー論理ユニット264のセットを含む。計算ユニット260A~260Nは、ローカル共有メモリ265及びプログラムカウンタ266も含むことができる。計算ユニット260A~260Nは、定数キャッシュ267と結合することができ、これは、GPGPU270上で実行されるカーネル又はシェーダープログラムの実行中に変化しないデータである定数データを格納するために使用することができる。一実施形態では、常数キャッシュ267はスカラーデータキャッシュであり、キャッシュされたデータはスカラーレジスタ262に直接フェッチすることができる。
【0064】
動作中に、1つ又は複数のCPU246は、アクセス可能なアドレス空間にマッピングされたGPGPU270内のレジスタ又はメモリにコマンドを書き込むことができる。コマンドプロセッサ257は、レジスタ又はメモリからコマンドを読み取り、それらのコマンドがGPGPU270内でどのように処理されるかを決定することができる。次に、スレッドディスパッチャ258を使用して、これらのコマンドを実行するために計算ユニット260A~260Nにスレッドをディスパッチすることができる。各計算ユニット260A~260Nは、他の計算ユニットから独立してスレッドを実行することができる。さらに、各計算ユニット260A~260Nは、条件付き計算のために独立して構成することができ、計算の結果をメモリに条件付きで出力することができる。コマンドプロセッサ257は、提出されたコマンドが完了すると、1つ又は複数のCPU246に割り込むことができる。
【0065】
図3A~
図3Cは、本明細書で説明する実施形態によって提供される追加のグラフィックプロセッサ及び計算アクセラレータアーキテクチャのブロック図を示す。本明細書の任意の他の図の要素と同じ参照符号(又は名前)を有する
図3A~
図3Cの要素は、本明細書の他の場所で説明しているのと同様の任意の方法で動作又は機能できるが、それに限定されるものではない。
【0066】
図3Aは、グラフィックプロセッサ300のブロック図であり、このプロセッサ300は、別個のグラフィック処理ユニットであり得るか、或いは複数の処理コア又は限定されないが、メモリ装置又はネットワークインターフェイス等の他の半導体デバイスと統合されたグラフィックプロセッサであり得る。いくつかの実施形態では、グラフィックプロセッサは、メモリマップされたI/Oインターフェイスを介して、グラフィックプロセッサ上のレジスタと通信し、プロセッサメモリに配置されたコマンドと通信する。いくつかの実施形態では、グラフィックプロセッサ300は、メモリにアクセスするためのメモリインターフェイス314を含む。メモリインターフェイス314は、ローカルメモリ、1つ又は複数の内部キャッシュ、1つ又は複数の共有外部キャッシュ、及び/又はシステムメモリへのインターフェイスであり得る。
【0067】
いくつかの実施形態では、グラフィックプロセッサ300は、ディスプレイ出力データを表示装置318に駆動する表示コントローラ302も含む。表示コントローラ302は、ビデオ又はユーザインターフェイス要素の複数の層の表示及び構成のための1つ又は複数のオーバーレイ平面のためのハードウェアを含む。表示装置318は、内部又は外部の表示装置であり得る。一実施形態では、表示装置318は、仮想現実(VR)表示装置又は拡張現実(AR)表示装置等のヘッドマウント型表示装置である。いくつかの実施形態では、グラフィックプロセッサ300は、MPEG-2等の動画エキスパートグループ(MPEG)フォーマット、H.264/MPEG-4AVC、H.265/HEVC等のAVC(Advanced Video Coding)フォーマット、AOMedia(Alliance for Open Media)VP8、VP9だけでなく、SMPTE(Society of Motion Picture&Television Engineers)421M/VC-1、及びJPEG等のJPEG(Joint Photographic Experts Group)、及びMJPEG(Motion JPEG)フォーマットを含むがこれらに限定されない1つ又は複数のメディアエンコーディングフォーマットに、それらから、又はそれらの間でメディアをエンコード、デコード、又はトランスコードするビデオコーデックエンジン306を含む。
【0068】
いくつかの実施形態では、グラフィックプロセッサ300は、例えば、ビット境界ブロック転送を含む2次元(2D)ラスタライザ処理を行うためのブロック画像転送(BLIT)エンジン304を含む。しかしながら、一実施形態では、2Dグラフィック処理は、グラフィック処理エンジン(GPE)310の1つ又は複数のコンポーネントを用いて実行される。いくつかの実施形態では、GPE310は、3次元(3D)グラフィック処理及びメディア処理を含むグラフィック処理を行うための計算エンジンである。
【0069】
いくつかの実施形態では、GPE310は、3Dプリミティブ形状(例えば、長方形、三角形等)に作用する処理機能を用いて3次元画像及びシーンをレンダリングする等の3D処理を行うための3Dパイプライン312を含む。3Dパイプライン312は、要素内で様々なタスクを実行する及び/又は実行スレッドを3D/メディアサブシステム315に生成する(spawn)プログラム可能な固定機能要素を含む。3Dパイプライン312を使用してメディア処理を行うことができるが、GPE310の実施形態は、ビデオ後処理及び画像強調等のメディア処理を行うために特に使用されるメディアパイプライン316も含む。
【0070】
いくつかの実施形態では、メディアパイプライン316は、ビデオコーデックエンジン306の代わりに、又はそれに代わって、ビデオデコード加速、ビデオインターレース解除、及びビデオエンコード加速等の1つ又は複数の特殊メディア処理を行う固定機能又はプログラム可能な論理ユニットを含む。いくつかの実施形態では、メディアパイプライン316は、3D/メディアサブシステム315で実行するためにスレッドを生成するスレッド生成(spawning)ユニットをさらに含む。生成されたスレッドは、3D/メディアサブシステム315に含まれる1つ又は複数のグラフィック実行ユニットでメディア処理の計算を行う。
【0071】
いくつかの実施形態では、3D/メディアサブシステム315は、3Dパイプライン312及びメディアパイプライン316によって生成されたスレッドを実行するためのロジックを含む。一実施形態では、パイプラインは、スレッド実行要求を3D/メディアサブシステム315に送信し、このサブシステム315は、利用可能なスレッド実行リソースへの様々なリクエストを調停及びディスパッチするためのスレッドディスパッチロジックを含む。実行リソースには、3D及びメディアスレッドを処理するグラフィック実行ユニットのアレイが含まれる。いくつかの実施形態では、3D/メディアサブシステム315は、スレッド命令及びデータのための1つ又は複数の内部キャッシュを含む。いくつかの実施形態では、サブシステムは、スレッド同士の間でデータを共有し、出力データを格納するために、レジスタ及びアドレス指定可能なメモリを含む共有メモリも含む。
【0072】
図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でさらに詳細に説明するように、ベースダイ又はベース基板に結合された別個のチップレット上に存在する。
【0073】
グラフィック処理エンジンクラスタ322は、オンチップ又はオンパッケージのファブリック相互接続324と接続することができる。ファブリック相互接続324によって、グラフィックエンジンタイル310A~310Dと、ビデオコーデック306及び1つ又は複数のコピーエンジン304等のコンポーネントとの間の通信が可能になる。コピーエンジン304は、メモリ装置326A~326Dとグラフィックプロセッサ320の外部にあるメモリ(例えば、システムメモリ)との間でデータを移動するために使用することができる。ファブリック相互接続324を使用して、グラフィックエンジンタイル310A~310Dを相互接続することもできる。グラフィックプロセッサ320は、オプションとして、外部表示装置318との接続を可能にする表示コントローラ302を含む。グラフィックプロセッサは、グラフィック又は計算アクセラレータとして構成することもできる。アクセラレータ構成では、表示コントローラ302及び表示装置318を省略してもよい。
【0074】
グラフィックプロセッサ320は、ホストインターフェイス328を介してホストシステムに接続することができる。ホストインターフェイス328は、グラフィックプロセッサ320、システムメモリ、及び/又は他のシステムコンポーネントの間の通信を可能にする。ホストインターフェイス328は、例えば、PCIエクスプレスバス又は別のタイプのホストシステムインターフェイスであってもよい。
【0075】
図3Cは、本明細書で説明する実施形態による計算アクセラレータ330を示す。計算アクセラレータ330は、
図3Bのグラフィックプロセッサ320とのアーキテクチャ上の類似点を含み得、計算の加速化のために最適化される。計算エンジンクラスタ332は、並列又はベクトルベースの汎用計算処理のために最適化された実行ロジックを含む1組の計算エンジンタイル340A~340Dを含むことができる。いくつかの実施形態では、計算エンジンタイル340A~340Dは、固定機能グラフィック処理ロジックを含まないが、一実施形態では、計算エンジンタイル340A~340Dのうちの1つ又は複数は、メディアの加速化を実行するロジックを含むことができる。計算エンジンタイル340A~340Dは、メモリ相互接続325A~325Dを介してメモリ326A~326Dに接続することができる。メモリ326A~326D及びメモリ相互接続325A~325Dは、グラフィックプロセッサ320と同様の技術であっても、又は異なっていてもよい。グラフィック計算エンジンタイル340A~340Dは、1組のタイル相互接続323A~323Fを介して相互接続することもでき、ファブリック相互接続324と接続する、及び/又はファブリック相互接続324によって相互接続することができる。一実施形態では、計算アクセラレータ330は、デバイス全体のキャッシュとして構成できる大容量L3キャッシュ336を含む。計算アクセラレータ330は、
図3Bのグラフィックプロセッサ320と同様の方法で、ホストインターフェイス328を介してホストプロセッサ及びメモリに接続することもできる。
【0076】
グラフィック処理エンジン
【0077】
図4は、いくつかの実施形態によるグラフィックプロセッサのグラフィック処理エンジン410のブロック図である。一実施形態では、グラフィック処理エンジン(GPE)410は、
図3Aに示されるGPE310のバージョンであり、
図3Bのグラフィックエンジンタイル310A~310Dを表すこともできる。本明細書の他の図の要素と同じ参照符号(又は名前)を有する
図4の要素は、本明細書の他の場所で説明しているのと同様の方法で動作又は機能できるが、それに限定されるものではない。例えば、
図3Aの3Dパイプライン312及びメディアパイプライン316が示されている。メディアパイプライン316は、GPE410のいくつかの実施形態ではオプションであり、GPE410内に明示的に含んでいなくてもよい。例えば、少なくとも1つの実施形態では、別個のメディア及び/又は画像プロセッサがGPE410に結合される。
【0078】
いくつかの実施形態では、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は、グラフィックコア(例えば、グラフィックコア(複数可)415A、グラフィックコア(複数可)415B)の1つ又は複数のブロックを含み、各ブロックは1つ又は複数のグラフィックコアを含む。各グラフィックコアには、グラフィック及び計算処理を行うための汎用及びグラフィック固有の実行ロジックだけでなく、固定機能のテクスチャ処理及び/又は機械学習、及び人工知能加速化ロジック等の、1組のグラフィック実行リソースが含まれる。
【0079】
様々な実施形態では、3Dパイプライン312は、命令を処理し且つ実行スレッドをグラフィックコアアレイ414にディスパッチすることにより、頂点シェーダー、幾何学シェーダー、ピクセルシェーダー、フラグメントシェーダー、計算シェーダー、又は他のシェーダープログラム等の1つ又は複数のシェーダープログラムを処理する固定機能及びプログラム可能なロジックを含み得る。グラフィックコアアレイ414は、これらのシェーダープログラムの処理に使用する実行リソースの統合ブロックを提供する。グラフィックコアアレイ414のグラフィックコア415A~414B内の多目的の実行ロジック(例えば、実行ユニット)は、様々な3D APIシェーダー言語のサポートを含み、複数のシェーダーに関連する複数の同時実行スレッドを実行することができる。
【0080】
いくつかの実施形態では、グラフィックコアアレイ414は、ビデオ及び/又は画像処理等のメディア機能を実行する実行ロジックを含む。一実施形態では、実行ユニットは、グラフィック処理操作に加えて、並列の汎用計算処理を行うようにプログラム可能な汎用ロジックを含む。汎用ロジックは、
図1のプロセッサコア107又は
図2Aのコア202A~202N内の汎用ロジックと並行して、又はその汎用ロジックと協同して、処理動作を行うことができる。
【0081】
グラフィックコアアレイ414上で実行されるスレッドによって生成される出力データは、統合リターンバッファ(URB)418内のメモリにデータを出力することができる。URB418は、複数のスレッドのデータを格納することができる。いくつかの実施形態では、URB418を使用して、グラフィックコアアレイ414上で実行される異なるスレッドの間でデータを送信することができる。いくつかの実施形態では、URB418は、グラフィックコアアレイ上のスレッドと共有機能ロジック420内の固定機能ロジックとの間の同期のためにさらに使用することができる。
【0082】
いくつかの実施形態では、グラフィックコアアレイ414は、アレイが可変数のグラフィックコアを含み、各グラフィックコアがGPE410の目標電力及び性能レベルに基づいて可変数の実行ユニットを有するように、スケーラブルである。一実施形態では、実行リソースは動的にスケーラブルであり、それによって必要に応じて実行リソースを有効又は無効にできる。
【0083】
グラフィックコアアレイ414は、グラフィックコアアレイ内のグラフィックコア同士の間で共有される複数のリソースを含む共有機能ロジック420と結合する。共有機能ロジック420内の共有機能は、グラフィックコアアレイ414に特殊な補助機能を提供するハードウェア論理ユニットである。様々な実施形態では、共有機能ロジック420は、サンプラー421、数学422、及びスレッド間通信(ITC)423ロジックを含むが、これらに限定されるものではない。さらに、いくつかの実施形態は、共有機能ロジック420内に1つ又は複数のキャッシュ425を実装する。
【0084】
共有機能は、少なくとも、所与の特殊化機能に対する要求がグラフィックコアアレイ414内に含めるには不十分な場合に実装される。代わりに、その特殊化機能の単一のインスタンス化が、共有機能ロジック420内のスタンドアロンエンティティとして実装され、グラフィックコアアレイ414内の実行リソースの中で共有される。グラフィックコアアレイ414の間で共有され、且つグラフィックコアアレイ414内に含まれる機能の正確なセットは、実施形態によって異なる。いくつかの実施形態では、グラフィックコアアレイ414によって広範囲に使用される、共有機能ロジック420内の特定の共有機能は、グラフィックコアアレイ414内の共有機能ロジック416内に含まれ得る。様々な実施形態では、グラフィックコアアレイ414内の共有機能ロジック416は、共有機能ロジック420内の一部又は全てのロジックを含むことができる。一実施形態では、共有機能ロジック420内の全ての論理要素は、グラフィックコアアレイ414の共有機能ロジック416内で複製してもよい。一実施形態では、共有機能ロジック420は、グラフィックコアアレイ414内の共有機能ロジック416の利益となるように除外される。
【0085】
実行ユニット
【0086】
図5A~
図5Bは、本明細書で説明する実施形態による、グラフィックプロセッサコアで使用される処理要素のアレイを含むスレッド実行ロジック500を示す。本明細書の他の図の要素と同じ参照符号(又は名前)を有する
図5A~
図5Bの要素は、本明細書の他の場所で説明しているのと同様の方法で動作又は機能できるが、それに限定されるものではない。
図5A~
図5Bは、
図2Bの各サブコア221A~221Fで示されるハードウェアロジックを表すことができるスレッド実行ロジック500の概要を示す。
図5Aは、汎用グラフィックプロセッサ内の実行ユニットを表しており、
図5Bは、計算アクセラレータ内で使用され得る実行ユニットを表している。
【0087】
図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のアレイは、任意の数の個々の実行ユニットを含むようにスケーラブルである。
【0088】
いくつかの実施形態では、実行ユニット508A~508Nは、主にシェーダープログラムを実行するために使用される。シェーダープロセッサ502は、様々なシェーダープログラムを処理し、スレッドディスパッチャ504を介してシェーダープログラムに関連する実行スレッドをディスパッチすることができる。一実施形態では、スレッドディスパッチャは、グラフィック及びメディアパイプラインからのスレッド開始要求を調停(arbitrate)し、且つ実行ユニット508A~508N内の1つ又は複数の実行ユニットで要求されたスレッドをインスタンス化するロジックを含む。例えば、幾何学パイプラインは、頂点、テッセレーション(tessellation)、又は幾何学シェーダーをスレッド実行ロジックにディスパッチして処理することができる。いくつかの実施形態では、スレッドディスパッチャ504は、実行中のシェーダープログラムからのランタイムスレッド生成要求を処理することもできる。
【0089】
いくつかの実施形態では、実行ユニット508A~508Nは、多くの標準3Dグラフィックシェーダー命令のネイティブ(native)サポートを含む命令セットをサポートし、それによってグラフィックライブラリ(例えば、Direct3D及びOpenGL)からのシェーダープログラムが最小限の変換で実行される。実行ユニットは、頂点及び幾何学処理(例えば、頂点プログラム、幾何学プログラム、頂点シェーダー)、ピクセル操作(例えば、ピクセルシェーダー、フラグメントシェーダー)、及び汎用操作(例えば、計算シェーダー及びメディアシェーダー)をサポートする。実行ユニット508A~508Nのそれぞれは、マルチ発出の(multi-issue)単一命令複数データ(SIMD)の実行が可能であり、マルチスレッド操作によって、より長いレイテンシのメモリアクセスに直面した際に効率的な実行環境が可能になる。各実行ユニット内の各ハードウェアスレッドには、専用の高帯域幅レジスタファイル及び関連する独立したスレッド状態がある。実行は、整数、単精度及び倍精度の浮動小数点演算、SIMD分岐機能、論理演算、超越演算、及び他の様々な演算が可能なパイプラインへのクロック毎のマルチ発出である。メモリ又は共有機能のうちの1つからのデータを待機している間に、実行ユニット508A~508N内の依存関係ロジックは、要求したデータが返されるまで待機スレッドをスリープ状態にさせる。待機スレッドがスリープ状態である間に、ハードウェアリソースは、他のスレッドの処理に費やされる場合がある。例えば、頂点シェーダー処理に関連する遅延中に、実行ユニットは、ピクセルシェーダー、フラグメントシェーダー、又は異なる頂点シェーダーを含む別のタイプのシェーダープログラムの処理を行うことができる。様々な実施形態は、SIMDの使用の代替として、又はSIMDの使用に加えて、単一命令マルチスレッド(SIMT)の使用による実行使用に適用することができる。SIMDコア又は処理への言及は、SIMTにも適用でき、又はSIMTと組み合わせたSIMDにも適用できる。
【0090】
実行ユニット508A~508Nの各実行ユニットは、データ要素のアレイ上で動作する。データ要素の数は、「実行サイズ」、つまり命令のチャネルの数である。実行チャネルは、データ要素へのアクセス、マスキング、及び命令内のフロー制御のための実行の論理ユニットである。チャネルの数は、特定のグラフィックプロセッサの物理算術論理ユニット(ALU)又は浮動小数点ユニット(FPU)の数に依存しない場合がある。いくつかの実施形態では、実行ユニット508A~508Nは、整数及び浮動小数点データ型をサポートする。
【0091】
実行ユニット命令セットは、SIMD命令を含む。様々なデータ要素は、パックされたデータ型としてレジスタに格納でき、実行ユニットは、要素のデータサイズに基づいて様々な要素を処理する。例えば、256ビット幅のベクトルを操作する場合に、ベクトルの256ビットはレジスタに格納され、実行ユニットは、ベクトルを、4個の個別の54ビットパックデータ要素(クワッドワード(QW)サイズのデータ要素)、8個の個別の32ビットパックデータ要素(ダブルワード(DW)サイズのデータ要素)、16個の個別の16ビットパックデータ要素(ワード(W)サイズのデータ要素)、又は32個の個別の8ビットデータ要素(バイト(B)サイズのデータ要素)として操作する。ただし、異なるベクトル幅及びレジスタサイズが可能である。
【0092】
一実施形態では、1つ又は複数の実行ユニットを、融合EUに共通のスレッド制御ロジック(507A~507N)を有する融合実行ユニット509A~509Nに組み合わせることができる。複数のEUを1つのEUグループに融合できる。融合EUグループ内の各EUは、個別のSIMDハードウェアスレッドを実行するように構成できる。融合されたEUグループ内のEUの数は、実施形態によって異なり得る。さらに、SIMD8、SIMD16、及びSIMD32を含むがこれらに限定されない、様々なSIMD幅をEU毎に実行できる。各融合グラフィック実行ユニット509A~509Nは、少なくとも2つの実行ユニットを含む。例えば、融合実行ユニット509Aは、第1のEU508A、第2のEU508B、並びに第1のEU508A及び第2のEU508Bに共通のスレッド制御ロジック507Aを含む。スレッド制御ロジック507Aは、融合グラフィック実行ユニット509Aで実行されるスレッドを制御し、融合実行ユニット509A~509N内の各EUが共通の命令ポインタレジスタを用いて実行できるようにする。
【0093】
1つ又は複数の内部命令キャッシュ(例えば、506)が、実行ユニットのスレッド命令をキャッシュするために、スレッド実行ロジック500に含まれる。いくつかの実施形態では、1つ又は複数のデータキャッシュ(例えば、512)が、スレッド実行中にスレッドデータをキャッシュするために含まれる。実行ロジック500上で実行するスレッドは、明示的に管理されたデータを共有ローカルメモリ511に格納することもできる。いくつかの実施形態では、サンプラー510は、3D処理のテクスチャサンプリング及びメディア処理のメディアサンプリングを提供するために含まれる。いくつかの実施形態では、サンプラー510は、サンプリングされたデータを実行ユニットに提供する前に、サンプリングプロセス中にテクスチャ又はメディアデータを処理するための特殊なテクスチャ又はメディアサンプリング機能を含む。
【0094】
実行中に、グラフィック及びメディアパイプラインは、スレッド生成及びディスパッチロジックを介してスレッド開始要求をスレッド実行ロジック500に送信する。幾何学的オブジェクトのグループが処理され、ピクセルデータにラスタライズされると、シェーダープロセッサ502内のピクセルプロセッサロジック(ピクセルシェーダーロジック、フラグメントシェーダーロジック等)が呼び出され、出力情報がさらに計算され、結果が出力サーフェス(surface)(カラーバッファ、深度(depth)バッファ、ステンシルバッファ等)に書き込まれる。いくつかの実施形態では、ピクセルシェーダー又はフラグメントシェーダーが、ラスタライズされたオブジェクトに亘って補間される様々な頂点属性の値を計算する。いくつかの実施形態では、次に、シェーダープロセッサ502内のピクセルプロセッサロジックは、アプリケーションプログラミングインターフェイス(API)が提供するピクセル又はフラグメントシェーダープログラムを実行する。シェーダープログラムを実行するために、シェーダープロセッサ502は、スレッドディスパッチャ504を介してスレッドを実行ユニット(例えば、508A)にディスパッチする。いくつかの実施形態では、シェーダープロセッサ502は、サンプラー510のテクスチャサンプリングロジックを使用して、メモリに格納されたテクスチャマップのテクスチャデータにアクセスする。テクスチャデータ及び入力幾何学データに対する算術演算は、各幾何学フラグメントのピクセルカラーデータを計算するか、或いは1つ又は複数のピクセルを更なる処理から破棄する。
【0095】
いくつかの実施形態では、データポート514は、スレッド実行ロジック500が処理済みデータをメモリに出力してグラフィックプロセッサ出力パイプラインでさらに処理するためのメモリアクセス機構を提供する。いくつかの実施形態では、データポート514は、データポートを介したメモリアクセスのためにデータをキャッシュするために、1つ又は複数のキャッシュメモリ(例えば、データキャッシュ512)を含むか、又はそれに結合する。
【0096】
一実施形態では、実行ロジック500は、光線追跡加速機能を提供できる光線トレーサ505を含むこともできる。光線トレーサ505は、光線生成のための命令/機能を含む光線追跡命令セットをサポートすることができる。光線追跡命令セットは、
図2Cの光線追跡コア245によりサポートされる光線追跡命令セットと同様であっても、異なっていてもよい。
【0097】
図5Bは、実施形態による、実行ユニット508の例示的な内部の詳細を示す。グラフィック実行ユニット508は、命令フェッチユニット537、汎用レジスタファイルアレイ(GRF)524、アーキテクチャレジスタファイルアレイ(ARF)526、スレッドアービタ(arbiter)522、送信ユニット530、分岐ユニット532、SIMD浮動小数点ユニット(FPU)534のセット、及び一実施形態では、専用の整数SIMD ALU535のセットを含むことができる。GRF524及びARF526は、グラフィック実行ユニット508でアクティブであり得る各同時ハードウェアスレッドに関連する汎用レジスタファイル及びアーキテクチャレジスタファイルのセットを含む。一実施形態では、スレッド毎のアーキテクチャ状態がARF526に維持される一方、スレッド実行中に使用されるデータはGRF524に格納される。各スレッドの命令ポインタを含む各スレッドの実行状態は、ARF526のスレッド固有のレジスタに保持できる。
【0098】
一実施形態では、グラフィック実行ユニット508は、同時マルチスレッディング(SMT)と細粒度インターリーブマルチスレッディング(IMT)との組合せであるアーキテクチャを有する。アーキテクチャは、同時実行スレッドのターゲット数及び実行ユニット当たりのレジスタ数に基づいて設計時に微調整できるモジュール構成を有しており、実行ユニットのリソースは、複数の同時スレッドの実行に使用されるロジック全体に分割される。グラフィック実行ユニット508によって実行され得る論理スレッドの数は、ハードウェアスレッドの数に限定されず、複数の論理スレッドを各ハードウェアスレッドに割り当てることができる。
【0099】
一実施形態では、グラフィック実行ユニット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バイトを格納することができる。柔軟なアドレス指定モードでは、レジスタを一緒にアドレス指定して、より広いレジスタを効果的に構築する、又はストライドされた長方形のブロックデータ構造を表すことができる。
【0100】
一実施形態では、メモリ操作、サンプラー操作、及び他のより長いレイテンシのシステム通信は、メッセージ通過送信ユニット530によって実行される「送信」命令を介してディスパッチされる。一実施形態では、分岐命令は専用分岐ユニット532にディスパッチされ、SIMD発散及び最終的な収束を容易にする。
【0101】
一実施形態では、グラフィック実行ユニット508は、浮動小数点演算を行うために1つ又は複数のSIMD浮動小数点ユニット(FPU)534を含む。一実施形態では、FPU534は、整数計算もサポートする。一実施形態では、FPU534は、最大M個の32ビット浮動小数点(又は整数)演算をSIMD実行することができ、又は最大2M個の16ビット整数又は16ビット浮動小数点演算をSIMD実行することができる。一実施形態では、FPUの少なくとも1つは、高スループット超越数学関数及び倍精度54ビット浮動小数点をサポートする拡張数学能力を提供する。いくつかの実施形態では、8ビット整数のSIMD ALU535のセットも存在し、これは、機械学習計算に関連する演算を行うように特に最適化することができる。
【0102】
一実施形態では、グラフィック実行ユニット508の複数のインスタンスのアレイは、グラフィックサブコアグループ(例えば、サブスライス)にインスタンス化することができる。スケーラビリティのために、乗算アーキテクトはサブコアグループ毎に実行ユニットの正確な数を選択できる。一実施形態では、実行ユニット508は、複数の実行チャネルに亘って命令を実行することができる。更なる実施形態では、グラフィック実行ユニット508で実行される各スレッドは、異なるチャネルで実行される。
【0103】
図6は、一実施形態による追加の実行ユニット600を示す。実行ユニット600は、例えば、
図3Cのような計算エンジンタイル340A~340Dで使用するための計算最適化実行ユニットであってよいが、それに限定されるものではない。実行ユニット600の変形を、
図3Bのようにグラフィックエンジンタイル310A~310Dで使用してもよい。一実施形態では、実行ユニット600は、スレッド制御ユニット601、スレッド状態ユニット602、命令フェッチ/プリフェッチユニット603、及び命令デコードユニット604を含む。実行ユニット600は、実行ユニット内のハードウェアスレッドに割り当てることができるレジスタを格納するレジスタファイル606をさらに含む。実行ユニット600は、送信ユニット607及び分岐ユニット608をさらに含む。一実施形態では、送信ユニット607及び分岐ユニット608は、
図5Bのグラフィック実行ユニット508の送信ユニット530及び分岐ユニット532と同様に動作することができる。
【0104】
実行ユニット600は、複数の異なるタイプの機能ユニットを含む計算ユニット610も含む。一実施形態では、計算ユニット610は、算術論理ユニットのアレイを含むALUユニット611を含む。ALUユニット611は、64ビット、32ビット、及び16ビットの整数及び浮動小数点演算を行うように構成することができる。整数演算及び浮動小数点演算は同時に実行され得る。計算ユニット610は、シストリック(systolic)アレイ612及び数学ユニット613も含むことができる。シストリックアレイ612は、ベクトル又は他のデータ並列処理をシストリック方式で行うために使用できるデータ処理ユニットのWワイド及びDディープネットワークを含む。一実施形態では、シストリックアレイ612は、行列ドット積演算等の行列演算を行うように構成することができる。一実施形態では、シストリックアレイ612は、16ビット浮動小数点演算だけでなく、8ビット及び4ビット整数演算をサポートする。一実施形態では、シストリックアレイ612は、機械学習動作を加速させるように構成することができる。そのような実施形態では、シストリックアレイ612は、bfloat16ビット浮動小数点フォーマットをサポートするように構成することができる。一実施形態では、数学ユニット613は、ALUユニット611よりも効率的且つ低電力の方法で数学演算の特定のサブセットを実行するために含まれ得る。数学ユニット613は、他の実施形態によって提供されるグラフィック処理エンジンの共有機能ロジックで見出され得る数学ロジック(例えば、
図4の共有機能ロジック420の数学ロジック422)の変形を含み得る。一実施形態では、数学ユニット613は、32ビット及び64ビットの浮動小数点演算を行うように構成することができる。
【0105】
スレッド制御ユニット601は、実行ユニット内のスレッドの実行を制御するロジックを含む。スレッド制御ユニット601は、実行ユニット600内のスレッドの実行を開始、停止、及び先取り(横取り)するスレッド調停ロジックを含むことができる。スレッド状態ユニット602は、実行ユニット600で実行するように割り当てられたスレッドのスレッド状態を格納するために使用できる。スレッド状態を実行ユニット600内に格納することによって、それらのスレッドがブロック又はアイドル状態になったときに、スレッドの迅速な先取り(横取り)を可能にする。命令フェッチ/プリフェッチユニット603は、より高いレベルの実行ロジックの命令キャッシュ(例えば、
図5Aのような命令キャッシュ506)から命令をフェッチすることができる。命令フェッチ/プリフェッチユニット603は、現在実行中のスレッドの解析に基づいて、命令キャッシュにロードされる命令のプリフェッチ要求を発することもできる。命令デコードユニット604は、計算ユニットにより実行される命令をデコードするために使用することができる。一実施形態では、命令デコードユニット604は、複雑な命令を構成要素のマイクロオペレーションにデコードするための二次デコーダとして使用することができる。
【0106】
実行ユニット600は、実行ユニット600上で実行されるハードウェアスレッドによって使用できるレジスタファイル606をさらに含む。レジスタファイル606内のレジスタは、実行ユニット600の計算ユニット610内の複数の同時スレッドを実行するために使用されるロジック全体に分割できる。グラフィック実行ユニット600によって実行され得る論理スレッドの数は、ハードウェアスレッドの数に限定されず、複数の論理スレッドを各ハードウェアスレッドに割り当てることができる。レジスタファイル606のサイズは、サポートされているハードウェアスレッドの数に基づいて、実施形態によって異なり得る。一実施形態では、レジスタの名前変更を使用して、レジスタをハードウェアスレッドに動的に割り当てることができる。
【0107】
図7は、いくつかの実施形態によるグラフィックプロセッサ命令フォーマット700を示すブロック図である。1つ又は複数の実施形態では、グラフィックプロセッサ実行ユニットは、複数のフォーマットの命令を有する命令セットをサポートする。実線のボックスは、実行ユニットの命令に一般的に含まれるコンポーネントを示しているが、破線はオプションのコンポーネント、又は命令のサブセットにのみ含まれるコンポーネントを示している。いくつかの実施形態では、説明及び図示する命令フォーマット700は、命令が処理されると命令デコードから生じるマイクロオペレーションとは対照的に、実行ユニットに供給される命令であるという点でマクロ命令である。
【0108】
いくつかの実施形態では、グラフィックプロセッサ実行ユニットは、128ビット命令フォーマット710の命令をネイティブにサポートする。64ビット圧縮(compacted)命令フォーマット730が、選択された命令、命令オプション、及びオペランドの数に基づいていくつかの命令で利用可能である。ネイティブの128ビット命令フォーマット710は、全ての命令オプションへのアクセスを提供するが、いくつかのオプション及び操作は64ビットフォーマット730に制限される。64ビットフォーマット730で使用可能なネイティブ命令は、実施形態によって異なる。いくつかの実施形態では、命令は、インデックスフィールド713内のインデックス値のセットを用いて部分的に圧縮される。実行ユニットハードウェアは、インデックス値に基づいて圧縮テーブルのセットを参照し、且つ圧縮テーブルの出力を使用して、ネイティブ命令を128ビット命令フォーマット710に再構築する。命令の他のサイズ及びフォーマットを使用できる。
【0109】
各フォーマットについて、命令オペコード712は、実行ユニットが実行することになる動作を規定する。実行ユニットは、各オペランドの複数のデータ要素に亘って各命令を並列に実行する。例えば、追加命令に応答して、実行ユニットは、テクスチャ要素又は画像要素を表す各カラーチャネルに亘って同時に追加操作を行う。デフォルトでは、実行ユニットは、オペランドの全てのデータチャネルに亘って各命令を実行する。いくつかの実施形態では、命令制御フィールド714によって、チャネル選択(例えば、予測)及びデータチャネル順序(例えば、スウィズル(swizzle))等の特定の実行オプションに対する制御が可能になる。128ビット命令フォーマット710の命令の場合に、実行サイズフィールド716は、並列に実行されるデータチャネルの数を制限する。いくつかの実施形態では、実行サイズフィールド716は、64ビット圧縮命令フォーマット730での使用に利用できない。
【0110】
いくつかの実行ユニット命令は、2つのソース(source)オペランド、src0 720、src1 722、及び1つのデスティネーション(destination)718を含む最大3つのオペランドを有する。いくつかの実施形態では、実行ユニットは、デスティネーションの1つが暗示されるデュアルデスティネーション命令をサポートする。データ操作命令は、第3のソースオペランド(例えば、SRC2 724)を有することができ、命令オペコード712は、ソースオペランドの数を決定する。命令の最後のソースオペランドは、命令と共に渡される即値(ハードコード等)にすることができる。
【0111】
いくつかの実施形態では、128ビット命令フォーマット710は、例えば、直接レジスタアドレス指定モード又は間接レジスタアドレス指定モードのどちらが使用されるかを指定するアクセス/アドレスモードフィールド726を含む。直接レジスタアドレス指定モードを使用する場合に、1つ又は複数のオペランドのレジスタアドレスは、命令のビットによって直接提供される。
【0112】
いくつかの実施形態では、128ビット命令フォーマット710は、命令のアドレスモード及び/又はアクセスモードを指定するアクセス/アドレスモードフィールド726を含む。一実施形態では、アクセスモードは、命令のデータアクセスアラインメントを規定するために使用される。いくつかの実施形態は、16バイト整列アクセスモード及び1バイト整列アクセスモードを含むアクセスモードをサポートし、アクセスモードのバイト配置(アライメント)は、命令オペランドのアクセス配置(アライメント)を決定する。例えば、第1のモードでは、命令はソースオペランド及びデスティネーションオペランドにバイト配置のアドレス指定を使用でき、第2のモードでは、命令は全てのソースオペランド及びデスティネーションオペランドに16バイト配置のアドレス指定を使用できる。
【0113】
一実施形態では、アクセス/アドレスモードフィールド726のアドレスモード部分は、命令が直接又は間接アドレス指定のどちらを使用するかを決定する。直接レジスタアドレス指定モードを使用する場合に、命令のビットは、1つ又は複数のオペランドのレジスタアドレスを直接提供する。間接レジスタアドレス指定モードを使用する場合に、1つ又は複数のオペランドのレジスタアドレスは、命令のアドレスレジスタ値及びアドレス即時フィールドに基づいて計算できる。
【0114】
いくつかの実施形態では、命令は、オペコード712のビットフィールドに基づいてグループ化されて、オペコードデコード740を簡素化する。8ビットオペコードの場合に、ビット4、5、及び6により、実行ユニットがオペコードのタイプを決定することができる。示されている正確なオペコードのグループ化は単なる例である。いくつかの実施形態では、移動及び論理オペコードグループ742は、データ移動及び論理命令(例えば、移動(mov)、比較(cmp))を含む。いくつかの実施形態では、移動及び論理グループ742は5つの最上位ビット(MSB)を共有し、移動(mov)命令は0000xxxbの形式であり、論理命令は0001xxxbの形式である。フロー制御命令グループ744(例えば、呼び出し、ジャンプ(jmp))は、0010xxxb(例えば、0x20)の形式の命令を含む。他の命令グループ746は、0011xxxb(例えば、0x30)の形式の同期命令(例えば、待機、送信)を含む命令の混合を含む。並列数学命令グループ748は、コンポーネントに関する算術命令(例えば、加算、乗算(mul))を0100xxxb(例えば、0x40)の形式で含む。並列数学グループ748は、データチャネルに亘って算術演算を並列に行う。ベクトル数学グループ750は、0101xxxxb(例えば、0x50)の形式の算術命令(例えば、dp4)を含む。ベクトル数学グループは、ベクトルオペランドに対してドット積計算等の算術を行う。図示のオペコード復号740は、一実施形態では、実行ユニットのどの部分を使用して復号された命令を実行するかを決定するために使用することができる。例えば、いくつかの命令は、シストリックアレイによって実行されるシストリック命令として指定される場合がある。光線追跡命令(図示せず)等の他の命令は、実行ロジックのスライス又はパーティション内の光線追跡コア又は光線追跡ロジックにルーティングできる。
【0115】
グラフィックパイプライン
【0116】
図8は、グラフィックプロセッサ800の別の実施形態のブロック図である。本明細書の他の図の要素と同じ参照符号(又は名前)を有する
図8の要素は、本明細書の他の場所で説明しているもの同様に動作又は機能することができるが、それに限定されるものではない。
【0117】
いくつかの実施形態では、グラフィックプロセッサ800は、幾何学パイプライン820、メディアパイプライン830、表示エンジン840、スレッド実行ロジック850、及びレンダリング出力パイプライン870を含む。いくつかの実施形態では、グラフィックプロセッサ800は、1つ又は複数の汎用処理コアを含むマルチコア処理システム内のグラフィックプロセッサである。グラフィックプロセッサは、1つ又は複数の制御レジスタ(図示せず)へのレジスタ書き込みによって、又はリング相互接続802を介してグラフィックプロセッサ800に発せられたコマンドを介して制御される。いくつかの実施形態では、リング相互接続802は、グラフィックプロセッサ800を、他のグラフィックプロセッサ又は汎用プロセッサ等の他の処理コンポーネントに結合する。リング相互接続802からのコマンドは、コマンドストリーマ803によって解釈され、コマンドストリーマ803は、幾何学ストリーマパイプライン820又はメディアパイプライン830の個々のコンポーネントに命令を供給する。
【0118】
いくつかの実施形態では、コマンドストリーマ803は、メモリから頂点データを読み取り、コマンドストリーマ803によって提供される頂点処理コマンドを実行する頂点フェッチャ805の動作を指示する。いくつかの実施形態では、頂点フェッチャ805は、頂点データを頂点シェーダー807に提供し、頂点シェーダー807は、座標空間変換及び照明操作を各頂点に対して行う。いくつかの実施形態では、頂点フェッチャ805及び頂点シェーダー807は、スレッドディスパッチャ831を介して実行スレッドを実行ユニット852A~852Bにディスパッチすることにより、頂点処理命令を実行する。
【0119】
いくつかの実施形態では、実行ユニット852A~852Bは、グラフィック及びメディア処理を行うための命令セットを有するベクトルプロセッサのアレイである。いくつかの実施形態では、実行ユニット852A~852Bは、各アレイに固有であるか、又はアレイ同士の間で共有される、付属のL1キャッシュ851を有する。キャッシュは、データ及び命令を異なるパーティションに含むようにパーティション化されたデータキャッシュ、命令キャッシュ、又は単一のキャッシュとして構成できる。
【0120】
いくつかの実施形態では、幾何学パイプライン820は、3Dオブジェクトのハードウェア加速化テッセレーションを実行するテッセレーションコンポーネントを含む。いくつかの実施形態では、プログラム可能なハル(hull)シェーダー811が、テッセレーション操作を構成する。プログラム可能なドメインシェーダー817が、テッセレーション出力のバックエンド評価を提供する。テッセレータ813は、ハルシェーダー811の指示で動作し、幾何学パイプライン820への入力として提供される粗い幾何学的モデルに基づいて、詳細な幾何学的オブジェクトのセットを生成する特別な目的のロジックを含む。いくつかの実施形態では、テッセレーションが使用されない場合に、テッセレーションコンポーネント(例えば、ハルシェーダー811、テッセレータ813、ドメインシェーダー817)をバイパスできる。
【0121】
いくつかの実施形態では、完全な幾何学的オブジェクトは、実行ユニット852A~852Bにディスパッチされた1つ又は複数のスレッドを介して幾何学シェーダー819によって処理することができ、又はクリッパー829に直接進むことができる。いくつかの実施形態では、幾何学シェーダーは、グラフィックパイプラインの前の段階のような頂点又は頂点のパッチではなく、幾何学的オブジェクト全体で動作する。テッセレーションが無効になっている場合に、幾何学シェーダー819は頂点シェーダー807から入力を受け取る。いくつかの実施形態では、幾何学シェーダー819は、テッセレーションユニットが無効になっている場合に、幾何学テッセレーションを実行するように幾何学シェーダーのプログラムによってプログラム可能である。
【0122】
ラスタライズの前に、クリッパー829は頂点データを処理する。クリッパー829は、固定機能クリッパー、又はクリッピング及び幾何学シェーダー機能を有するプログラム可能なクリッパーであり得る。いくつかの実施形態では、レンダリング出力パイプライン870のラスタライザ(rasterizer)及び深度テストコンポーネント873は、ピクセルシェーダーをディスパッチして、幾何学的オブジェクトをピクセル毎の表現に変換する。いくつかの実施形態では、ピクセルシェーダーロジックはスレッド実行ロジック850に含まれる。いくつかの実施形態では、アプリケーションが、ラスタライザ及び深度テストコンポーネント873をバイパスし、ストリームアウトユニット823を介して非ラスタ化頂点データにアクセスすることができる。
【0123】
グラフィックプロセッサ800は、相互接続バス、相互接続ファブリック、又はプロセッサの主要なコンポーネント同士の間でのデータ及びメッセージの受け渡しを可能にするいくつかの他の相互接続機構を有する。いくつかの実施形態では、実行ユニット852A~852B及び関連する論理ユニット(例えば、L1キャッシュ851、サンプラー854、テクスチャキャッシュ858等)は、データポート856を介して相互接続して、メモリアクセスを実行し、且つプロセッサのレンダリング出力パイプラインコンポーネントと通信する。いくつかの実施形態では、サンプラー854、キャッシュ851、858、及び実行ユニット852A~852Bはそれぞれ、別個のメモリアクセス経路を有する。一実施形態では、テクスチャキャッシュ858は、サンプラーキャッシュとして構成することもできる。
【0124】
いくつかの実施形態では、レンダリング出力パイプライン870は、頂点ベースのオブジェクトを関連するピクセルベースの表現に変換するラスタライザ及び深度テストコンポーネント873を含む。いくつかの実施形態では、ラスタライザロジックは、固定機能の三角形及び線のラスタライズを実行するためのウィンドウ処理(windower)/マスク処理(masker)ユニットを含む。いくつかの実施形態では、関連するレンダリングキャッシュ878及び深度キャッシュ879も利用可能である。ピクセル操作コンポーネント877が、ピクセルベースの操作をデータに対して行うが、場合によっては、2D処理に関連付けられたピクセル操作(例えば、ブレンディングを含むビットブロック画像転送)が、2Dエンジン841によって実行されるか、又はオーバーレイ表示面を用いてコントローラ843によって表示時に置き換えられる。いくつかの実施形態では、共有L3キャッシュ875が、全てのグラフィックコンポーネントに利用可能であり、メインシステムのメモリを使用せずにデータを共有できるようにする。
【0125】
いくつかの実施形態では、グラフィックプロセッサメディアパイプライン830は、メディアエンジン837及びビデオフロントエンド834を含む。いくつかの実施形態では、ビデオフロントエンド834は、コマンドストリーマ803からパイプラインコマンドを受け取る。いくつかの実施形態では、メディアパイプライン830は、別個のコマンドストリーマを含む。いくつかの実施形態では、ビデオフロントエンド834は、コマンドをメディアエンジン837に送信する前にメディアコマンドを処理する。いくつかの実施形態では、メディアエンジン837は、スレッドディスパッチャ831を介してスレッド実行ロジック850にディスパッチするためにスレッドを生成するスレッド生成機能を含む。
【0126】
いくつかの実施形態では、グラフィックプロセッサ800は、表示エンジン840を含む。いくつかの実施形態では、表示エンジン840は、プロセッサ800の外部にあり、且つリング相互接続802或いは他の何らかの相互接続バス又はファブリックを介してグラフィックプロセッサと結合する。いくつかの実施形態では、表示エンジン840は、2Dエンジン841及び表示コントローラ843を含む。いくつかの実施形態では、表示エンジン840は、3Dパイプラインから独立して動作することができる専用ロジックを含む。いくつかの実施形態では、表示コントローラ843は、ラップトップコンピュータのようなシステム統合型表示装置、又は表示装置コネクタを介して取り付けられた外部表示装置であり得る表示装置(図示せず)と結合する。
【0127】
いくつかの実施形態では、幾何学パイプライン820及びメディアパイプライン830は、複数のグラフィック及びメディアプログラミングインターフェイスに基づいて操作を行うように構成可能であり、且ついずれか1つのアプリケーションプログラミングインターフェイス(API)に固有ではない。いくつかの実施形態では、グラフィックプロセッサのドライバソフトウェアは、特定のグラフィック又はメディアライブラリに固有のAPI呼出しを、グラフィックプロセッサが処理できるコマンドに変換する。いくつかの実施形態では、全てがクロノス(Khronos)グループからのオープングラフィックライブラリ(OpenGL)、オープンコンピュータ言語(OpenCL)、及び/又はVulkanグラフィック及び計算APIのサポートが提供される。いくつかの実施形態では、マイクロソフト社のDirect3Dライブラリに対するサポートも提供され得る。いくつかの実施形態では、これらのライブラリの組合せがサポートされ得る。オープンソースのコンピュータビジョンライブラリ(OpenCV)のサポートも提供される。将来のAPIのパイプラインからグラフィックプロセッサのパイプラインへのマッピングを作成できる場合に、互換性のある3Dパイプラインを含む将来のAPIもサポートされる。
【0128】
グラフィックパイプラインプログラミング
【0129】
図9Aは、いくつかの実施形態によるグラフィックプロセッサコマンドフォーマット900を示すブロック図である。
図9Bは、一実施形態によるグラフィックプロセッサコマンドシーケンス910を示すブロック図である。
図9Aの実線のボックスは、グラフィックコマンドに一般的に含まれるコンポーネントを示す一方、破線は、オプションであるコンポーネントを含むか、又はグラフィックコマンドのサブセットにのみ含まれるコンポーネントを含む。
図9Aの例示的なグラフィックプロセッサコマンドフォーマット900は、クライアント902を識別するためのデータフィールド、コマンドオペレーションコード(オペコード)904、及びコマンドのデータ906を含む。サブオペコード905及びコマンドサイズ908もいくつかのコマンドに含まれる。
【0130】
いくつかの実施形態では、クライアント902は、コマンドデータを処理するグラフィック装置のクライアントユニットを指定する。いくつかの実施形態では、グラフィックプロセッサのコマンドパーサー(parser)は、各コマンドのクライアントフィールドを調べて、コマンドの更なる処理を条件付けし、コマンドデータを適切なクライアントユニットにルーティングする。いくつかの実施形態では、グラフィックプロセッサクライアントユニットは、メモリインターフェイスユニット、レンダリングユニット、2Dユニット、3Dユニット、及びメディアユニットを含む。各クライアントユニットは、コマンドを処理する対応する処理パイプラインを有する。クライアントユニットがコマンドを受信すると、クライアントユニットは、オペコード904を読み取り、存在する場合にサブオペコード905を読み取って、実行すべき操作を決定する。クライアントユニットは、データフィールド906の情報を用いてコマンドを実行する。いくつかのコマンドについては、明示的なコマンドサイズ908がコマンドのサイズを指定すると予想される。いくつかの実施形態では、コマンドパーサーは、コマンドオペコードに基づいてコマンドの少なくともいくつかのサイズを自動的に決定する。いくつかの実施形態では、コマンドは倍長語(ダブルワード)の倍数を介して整列される。他のコマンド形式を使用できる。
【0131】
図9Bのフロー図は、例示的なグラフィックプロセッサのコマンドシーケンス910を示す。いくつかの実施形態では、グラフィックプロセッサの実施形態を特徴付けるデータ処理システムのソフトウェア又はファームウェアは、グラフィック処理のセットをセットアップ、実行、終了するために、示されるコマンドシーケンスのバージョンを使用する。実施形態がこれらの特定のコマンド又はこのコマンドシーケンスに限定されないので、サンプルコマンドシーケンスが、例示の目的でのみ示され、説明される。さらに、コマンドは、コマンドシーケンスのコマンドのバッチとして発せられ得、それによってグラフィックプロセッサは、コマンドのシーケンスを少なくとも部分的に同時に処理する。
【0132】
いくつかの実施形態では、グラフィックプロセッサのコマンドシーケンス910は、パイプラインフラッシュコマンド912で開始し、アクティブなグラフィックパイプラインに、パイプラインの現在保留中のコマンドを完了させることができる。いくつかの実施形態では、3Dパイプライン922及びメディアパイプライン924は、同時に動作しない。パイプラインフラッシュが実行され、アクティブなグラフィックパイプラインに、任意の保留中のコマンドを完了させる。パイプラインフラッシュに応答して、グラフィックプロセッサのコマンドパーサーは、アクティブな描画エンジンが保留中の操作を完了し、関連する読み取りキャッシュが無効になるまで、コマンド処理を一時停止する。オプションで、「ダーティ(dirty)」とマークされているレンダリングキャッシュ内のデータをメモリにフラッシュすることができる。いくつかの実施形態では、パイプラインフラッシュコマンド912は、パイプライン同期のために、又はグラフィックプロセッサを低電力状態にする前に使用することができる。
【0133】
いくつかの実施形態では、コマンドシーケンスがグラフィックプロセッサにパイプラインを明示的に切り替えることを要求するときに、パイプライン選択コマンド913が使用される。いくつかの実施形態では、実行コンテキストが両方のパイプラインに対してコマンドを発するものでない限り、パイプラインコマンドを発する前に、実行コンテキスト内でパイプライン選択コマンド913が1回だけ必要である。いくつかの実施形態では、パイプライン選択コマンド913を介してパイプラインが切り替わる直前に、パイプラインフラッシュコマンド912が必要である。
【0134】
いくつかの実施形態では、パイプライン制御コマンド914は、動作のためにグラフィックパイプラインを構成し、3Dパイプライン922及びメディアパイプライン924をプログラムするために使用される。いくつかの実施形態では、パイプライン制御コマンド914は、アクティブなパイプラインのパイプライン状態を構成する。一実施形態では、パイプライン制御コマンド914は、パイプライン同期のために、及びコマンドのバッチを処理する前にアクティブなパイプライン内の1つ又は複数のキャッシュメモリからデータをクリアするために使用される。
【0135】
いくつかの実施形態では、リターンバッファ状態コマンド916が、それぞれのパイプラインがデータを書き込むためのリターンバッファのセットを構成するために使用される。いくつかのパイプライン操作では、その中で操作が処理中に中間データを書き込む1つ又は複数のリターンバッファの割り当て、選択、又は構成が必要である。いくつかの実施形態では、グラフィックプロセッサはまた、出力データを格納し、スレッド間通信を行うために、1つ又は複数のリターンバッファを使用する。いくつかの実施形態では、リターンバッファ状態916は、パイプライン操作のセットに使用するリターンバッファのサイズ及び数を選択することを含む。
【0136】
コマンドシーケンスにおける残りのコマンドは、操作のためのアクティブなパイプラインに基づいて異なる。パイプライン決定920に基づいて、コマンドシーケンスは、3Dパイプライン状態930で開始する3Dパイプライン922、又はメディアパイプライン状態940で開始するメディアパイプライン924に合わせて調整される。
【0137】
3Dパイプライン状態930を構成するコマンドは、頂点バッファ状態、頂点要素状態、一定色状態、深度バッファ状態、及び3Dプリミティブコマンドを処理する前に構成される他の状態変数のための3D状態設定コマンドを含む。これらのコマンドの値は、使用中の特定の3D APIに少なくとも部分的に基づいて決定される。いくつかの実施形態では、3Dパイプライン状態930コマンドはまた、それら特定のパイプライン要素が使用されない場合に、特定のパイプライン要素を選択的に無効化又はバイパスすることができる。
【0138】
いくつかの実施形態では、3Dプリミティブ932コマンドは、3Dパイプラインによって処理すべき3Dプリミティブを送信するために使用される。3Dプリミティブ932コマンドを介してグラフィックプロセッサに渡されるコマンド及び関連パラメータは、グラフィックパイプラインの頂点フェッチ機能に転送される。頂点フェッチ機能は、3Dプリミティブ932コマンドデータを使用して、頂点データ構造を生成する。頂点データ構造は、1つ又は複数のリターンバッファに格納される。いくつかの実施形態では、3Dプリミティブ932コマンドを使用して、頂点シェーダーを介して3Dプリミティブに対して頂点操作を行う。頂点シェーダーを処理するために、3Dパイプライン922は、シェーダー実行スレッドをグラフィックプロセッサ実行ユニットにディスパッチする。
【0139】
いくつかの実施形態では、3Dパイプライン922は、実行934コマンド又はイベントを介してトリガーされる。いくつかの実施形態では、レジスタ書込みがコマンド実行をトリガーする。いくつかの実施形態では、実行は、コマンドシーケンスの「go」又は「kick」コマンドを介してトリガーされる。一実施形態では、コマンド実行は、グラフィックパイプラインを介してコマンドシーケンスをフラッシュするためにパイプライン同期コマンドを用いてトリガーされる。3Dパイプラインは、3Dプリミティブの幾何学処理を行う。処理が完了すると、得られた幾何学的オブジェクトがラスタライズされ、ピクセルエンジンが得られたピクセルに色を付ける。ピクセルシェーディング及びピクセルバックエンド処理を制御する追加のコマンドも、これらの処理に含めることができる。
【0140】
いくつかの実施形態では、グラフィックプロセッサコマンドシーケンス910は、メディア処理を行うとき、メディアパイプライン924の経路を辿る。一般に、メディアパイプライン924のプログラミングの特定の使用及び方法は、実行されるメディア又は計算処理に依存する。特定のメディアデコード処理は、メディアデコード中にメディアパイプラインにオフロードされる場合がある。いくつかの実施形態では、メディアパイプラインをバイパスすることもでき、メディアデコードは、1つ又は複数の汎用処理コアによって提供されるリソースを用いて全体的又は部分的に実行することができる。一実施形態では、メディアパイプラインは、汎用グラフィックプロセッサユニット(GPGPU)演算のための要素も含み、グラフィックプロセッサは、グラフィックプリミティブのレンダリングに明示的に関連しない計算シェーダープログラムを用いてSIMDベクトル演算を行うために使用される。
【0141】
いくつかの実施形態では、メディアパイプライン924は、3Dパイプライン922と同様の方法で構成される。メディアパイプライン状態940を構成するコマンドのセットが、メディアオブジェクトコマンド942の前にコマンドキューにディスパッチ又は配置される。いくつかの実施形態では、メディアパイプライン状態940のためのコマンドが、メディアオブジェクトを処理するために使用されることになるメディアパイプライン要素を構成するためのデータを含む。これには、エンコード又はデコードフォーマット等、メディアパイプライン内のビデオデコード及びビデオエンコードロジックを構成するためのデータが含まれる。いくつかの実施形態では、メディアパイプライン状態940のためのコマンドが、状態設定のバッチを含む「間接的な」状態要素への1つ又は複数のポインタの使用もサポートする。
【0142】
いくつかの実施形態では、メディアオブジェクトコマンド942は、メディアパイプラインによる処理のためにポインタをメディアオブジェクトに供給する。メディアオブジェクトには、処理すべきビデオデータを含むメモリバッファが含まれる。いくつかの実施形態では、全てのメディアパイプライン状態は、メディアオブジェクトコマンド942を発する前に有効でなければならない。パイプライン状態が構成され、且つメディアオブジェクトコマンド942がキューに入れられると、メディアパイプライン924は、実行コマンド944又は同等の実行イベント(例えば、レジスタ書込み)を介してトリガーされる。次に、メディアパイプライン924からの出力は、3Dパイプライン922又はメディアパイプライン924によって提供される操作によって後処理され得る。いくつかの実施形態では、GPGPU演算は、メディア処理と同様の方法で構成及び実行される。
【0143】
グラフィックソフトウェアアーキテクチャ
【0144】
図10は、いくつかの実施形態による、データ処理システム1000の例示的なグラフィックソフトウェアアーキテクチャを示す。いくつかの実施形態では、ソフトウェアアーキテクチャは、3Dグラフィックアプリケーション1010、オペレーティングシステム1020、及び少なくとも1つのプロセッサ1030を含む。いくつかの実施形態では、プロセッサ1030は、グラフィックプロセッサ1032及び1つ又は複数の汎用プロセッサコア1034を含む。グラフィックアプリケーション1010及びオペレーティングシステム1020はそれぞれ、データ処理システムのシステムメモリ1050で実行される。
【0145】
いくつかの実施形態では、3Dグラフィックアプリケーション1010は、シェーダー命令1012を含む1つ又は複数のシェーダープログラムを含む。シェーダー言語命令は、Direct3Dの高レベルシェーダー言語(HLSL)、OpenGLシェーダー言語(GLSL)等の高レベルシェーダー言語であってもよい。アプリケーションは、汎用プロセッサコア1034による実行に適した機械語での実行可能命令1014も含む。アプリケーションは、頂点データによって規定されるグラフィックオブジェクト1016も含む。
【0146】
いくつかの実施形態では、オペレーティングシステム1020は、マイクロソフト社のマイクロソフト(登録商標)ウィンドウズ(登録商標)オペレーティングシステム、独自の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)のバージョン等の中間形式で提供される。
【0147】
いくつかの実施形態では、ユーザモードグラフィックドライバ1026は、シェーダー命令1012をハードウェア固有の表現に変換するためのバックエンドシェーダーコンパイラ1027を含む。OpenGL APIが使用される場合に、GLSL高レベル言語のシェーダー命令1012が、コンパイルのためにユーザモードグラフィックドライバ1026に渡される。いくつかの実施形態では、ユーザモードグラフィックドライバ1026は、オペレーティングシステムカーネルモード機能1028を使用して、カーネルモードグラフィックドライバ1029と通信する。いくつかの実施形態では、カーネルモードグラフィックドライバ1029は、グラフィックプロセッサ1032と通信して、コマンド及び命令をディスパッチする。
【0148】
IPコアの実装
【0149】
少なくとも1つの実施形態の1つ又は複数の態様は、プロセッサ等の集積回路内の論理を表す及び/又は規定する、機械可読媒体に格納された代表的なコードによって実装され得る。例えば、機械可読媒体は、プロセッサ内の様々な論理を表す命令を含み得る。機械によって読み取られるとき、命令は、機械に、本明細書で説明している技術を実行するためのロジックを作成させることができる。「IPコア」として知られるそのような表現は、集積回路の構造を記述するハードウェアモデルとして有形の機械可読媒体に格納され得る、集積回路の再利用可能な論理ユニットである。ハードウェアモデルは、様々な顧客又は製造施設に供給され、顧客又は製造施設によって、集積回路を製造する製造機械にハードウェアモデルがロードされる。集積回路は、回路が、本明細書で説明する実施形態のいずれかに関連して説明している処理を行うように製造することができる。
【0150】
図11Aは、一実施形態による、処理を行うための集積回路を製造するために使用され得るIPコア開発システム1100を示すブロック図である。IPコア開発システム1100を使用して、より大きな設計に組み込むことができる、又は集積回路全体(例えば、SOC集積回路)を構築するのに使用できるモジュール式の再利用可能な設計を生成することができる。設計設備1130は、高レベルプログラミング言語(例えば、C/C++)でIPコア設計のソフトウェアシミュレーション1110を生成することができる。ソフトウェアシミュレーション1110は、シミュレーションモデル1112を用いて、IPコアの動作を設計、テスト、及び検証するために使用することができる。シミュレーションモデル1112は、機能、動作、及び/又はタイミングシミュレーションを含み得る。次に、レジスタ転送レベル(RTL)設計1115をシミュレーションモデル1112から作成又は合成することができる。RTL設計1115は、モデル化されたデジタル信号を用いて実行される関連するロジックを含む、ハードウェアレジスタ同士の間のデジタル信号の流れをモデル化する集積回路の動作を抽象化したものである。RTL設計1115に加えて、論理レベル又はトランジスタレベルでのより低いレベルの設計も、作成、設計、又は合成され得る。こうして、初期設計及びシミュレーションの特定の詳細は異なる場合がある。
【0151】
RTL設計1115又は同等物は、設計設備によって、ハードウェア記述言語(HDL)又は物理的設計データの他の何らかの表現であり得るハードウェアモデル1120にさらに合成され得る。HDLをさらにシミュレーション又はテストして、IPコアの設計を検証できる。IPコア設計は、不揮発性メモリ1140(例えば、ハードディスク、フラッシュメモリ、又は任意の不揮発性記憶媒体)を用いて、サードパーティの製造施設1165への配信のために格納することができる。あるいはまた、IPコア設計は、有線接続1150又は無線接続1160を介して(例えば、インターネットを介して)送信してもよい。次に、製造施設1165は、IPコア設計に少なくとも部分的に基づく集積回路を製造し得る。製造された集積回路は、本明細書で説明する少なくとも1つの実施形態に従って処理を行うように構成され得る。
【0152】
図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の表面に結合して、マザーボード、他のチップセット、又はマルチチップモジュール等の他の電気装置に電気信号をルーティングすることができる。
【0153】
いくつかの実施形態では、ロジック1172、1174のユニットは、ロジック1172、1174の間で電気信号をルーティングするように構成されたブリッジ1182と電気的に結合される。ブリッジ1182は、電気信号の経路を提供する高密度相互接続構造であり得る。ブリッジ1182は、ガラス又は適切な半導体材料から構成されるブリッジ基板を含み得る。電気ルーティング機能をブリッジ基板上に形成して、ロジック1172、1174の間のチップ間接続を提供できる。
【0154】
ロジック1172、1174の2つのユニット及びブリッジ1182が示されているが、本明細書で説明する実施形態は、1つ又は複数のダイ上により多い又はより少ない論理ユニットを含むことができる。ロジックが単一のダイに含まれる場合に、ブリッジ1182は除外され得るため、1つ又は複数のダイは、ゼロ又はそれ以上のブリッジによって接続され得る。あるいはまた、複数のダイ又はロジックのユニットを1つ又は複数のブリッジによって接続できる。さらに、複数の論理ユニット、ダイ、及びブリッジを、3次元構成を含む他の可能な構成で一緒に接続できる。
【0155】
図11Cは、基板1180(例えば、ベースダイ)に接続されたハードウェア論理チップレットの複数のユニットを含むパッケージアセンブリ1190を示す。本明細書で説明するようなグラフィック処理ユニット、並列プロセッサ、及び/又は計算アクセラレータは、別々に製造される多様なシリコンチップレットから構成することができる。この文脈では、チップレットは、他のチップレットと共に大きなパッケージに組み立てることができるロジックの個別のユニットを含む、少なくとも部分的にパッケージ化された集積回路である。異なるIPコアロジックを含むチップレットの多様なセットを単一のデバイスに組み立てることができる。さらに、アクティブなインターポーザー技術を用いて、チップレットをベースダイ又はベースチップレットに統合できる。本明細書で説明する概念によって、GPU内の様々なIPの形式の間の相互接続及び通信が可能になる。IPコアは、様々なプロセス技術を用いて製造し、製造中に構成できるため、複数のIPを、特に複数のフレーバー(flavors)IPを含む大規模なSoCで同じ製造プロセスに集約する複雑さを回避できる。複数のプロセス技術を使用できるようにすることで、製品化までの時間が短縮され、複数の製品SKUを形成する費用効果の高い方法が提供される。さらに、集約解除された(disaggregated)IPは独立してパワーゲーティング(power gated)され易くなり、所与のワークロードで使用されていないコンポーネントの電源をオフにできるため、全体的な電力消費を削減できる。
【0156】
ハードウェア論理チップレットは、専用ハードウェア論理チップレット1172、論理又はI/Oチップレット1174、及び/又はメモリチップレット1175を含み得る。ハードウェア論理チップレット1172及び論理又はI/Oチップレット1174は、少なくとも部分的に構成可能なロジック又は固定機能ロジックハードウェアで実装され得、且つ本明細書で説明するプロセッサコア、グラフィックプロセッサ、並列プロセッサ、又は他のアクセラレータ装置のいずれかの1つ又は複数の部分を含むことができる。メモリチップレット1175は、DRAM(例えば、GDDR、HBM)メモリ又はキャッシュ(SRAM)メモリとすることができる。
【0157】
各チップレットは、別個の半導体ダイとして製造され、且つ相互接続構造1173を介して基板1180と結合され得る。相互接続構造1173は、基板1180内の様々なチップレットとロジックとの間で電気信号をルーティングするように構成され得る。相互接続構造1173は、バンプ又はピラー等であるがこれらに限定されない相互接続を含むことができる。いくつかの実施形態では、相互接続構造1173は、例えば、論理、I/O及びメモリチップレットの処理に関連する入力/出力(I/O)信号及び/又は電力又は接地信号等の電気信号をルーティングするように構成され得る。
【0158】
いくつかの実施形態では、基板1180は、エポキシベースの積層基板である。他の実施形態では、基板1180は、他の適切なタイプの基板を含み得る。パッケージアセンブリ1190は、パッケージ相互接続1183を介して他の電気装置に接続することができる。パッケージ相互接続1183を基板1180の表面に結合して、マザーボード、他のチップセット、又はマルチチップモジュール等の他の電気装置に電気信号をルーティングすることができる。
【0159】
いくつかの実施形態では、論理又はI/Oチップレット1174及びメモリチップレット1175は、論理又はI/Oチップレット1174とメモリチップレット1175との間で電気信号をルーティングするように構成されるブリッジ1187を介して電気的に結合され得る。ブリッジ1187は、電気信号の経路を提供する高密度相互接続構造であり得る。ブリッジ1187は、ガラス又は適切な半導体材料から構成されるブリッジ基板を含み得る。電気ルーティング機能をブリッジ基板上に形成して、論理又はI/Oチップレット1174とメモリチップレット1175との間にチップ間接続を提供できる。ブリッジ1187は、シリコンブリッジ又は相互接続ブリッジとも呼ばれ得る。例えば、いくつかの実施形態では、ブリッジ1187は、埋込み型マルチダイ相互接続ブリッジ(EMIB)である。いくつかの実施形態では、ブリッジ1187は、単にあるチップレットから別のチップレットへの直接接続であり得る。
【0160】
基板1180は、I/O1191、キャッシュメモリ1192、及び他のハードウェアロジック1193のためのハードウェアコンポーネントを含むことができる。ファブリック1185を基板1180に埋め込んで、様々な論理チップレットと基板1180内のロジック1191、1193との間の通信を可能にする。一実施形態では、I/O1191、ファブリック1185、キャッシュ、ブリッジ、及び他のハードウェアロジック1193は、基板1180の上に積層されたベースダイに統合することができる。
【0161】
様々な実施形態において、パッケージアセンブリ1190は、ファブリック1185或いは1つ又は複数のブリッジ1187によって相互接続されるより少ない又はより多い数のコンポーネント及びチップレットを含むことができる。パッケージアセンブリ1190内のチップレットは、3D又は2.5D構成で配置され得る。一般に、ブリッジ構造1187を使用して、例えば、論理又はI/Oチップレットとメモリチップレットとの間のポイント間相互接続を容易にすることができる。ファブリック1185を使用して、様々な論理及び/又はI/Oチップレット(例えば、チップレット1172、1174、1191、1193)を他の論理及び/又はI/Oチップレットと相互接続することができる。一実施形態では、基板内のキャッシュメモリ1192は、パッケージアセンブリ1190のグローバルキャッシュ、分散型グローバルキャッシュの一部、又はファブリック1185の専用キャッシュとして機能することができる。
【0162】
図11Dは、一実施形態による、交換可能なチップレット1195を含むパッケージアセンブリ1194を示す。交換可能なチップレット1195は、1つ又は複数のベースチップレット1196、1198の標準化されたスロット内に組み付けることができる。ベースチップレット1196、1198は、本明細書で説明する他のブリッジ相互接続に類似し得る又は例えばEMIBであり得るブリッジ相互接続1197を介して結合できる。メモリチップレットは、ブリッジ相互接続を介して論理又はI/Oチップレットに接続することもできる。I/O及び論理チップレットは、相互接続ファブリックを介して通信できる。ベースチップレットはそれぞれ、ロジック又はI/O又はメモリ/キャッシュのいずれかに対して、標準化されたフォーマットで1つ又は複数のスロットをサポートできる。
【0163】
一実施形態では、SRAM及び電力供給回路を、1つ又は複数のベースチップレット1196、1198に製造することができ、これは、ベースチップレットの上に積み重ねられる交換可能なチップレット1195とは異なるプロセス技術を用いて製造することができる。例えば、ベースチップレット1196、1198は、より大きなプロセス技術を用いて製造することができる一方、交換可能なチップレットは、より小さなプロセス技術を用いて製造することができる。交換可能なチップレット1195のうちの1つ又は複数は、メモリ(例えば、DRAM)チップレットであり得る。電力及び/又はパッケージアセンブリ1194を使用する製品を対象とする性能に基づいて、パッケージアセンブリ1194に異なるメモリ密度を選択できる。さらに、様々なタイプ数の機能ユニットを含む論理チップレットを、製品の対象となる電力及び/又は能力に基づいて組立時に選択することができる。さらに、異なるタイプのIP論理コアを含むチップレットを交換可能なチップレットのスロットに挿入できるため、異なる技術のIPブロックを組み合わせて使用できるハイブリッドプロセッサ設計が可能になる。
【0164】
チップ集積回路の例示的なシステム
【0165】
図12~
図13は、本明細書で説明する様々な実施形態による、1つ又は複数のIPコアを用いて製造され得る例示的な集積回路及び関連するグラフィックプロセッサを示す。図示されているものに加えて、追加のグラフィックプロセッサ/コア、周辺機器インターフェイスコントローラ、又は汎用プロセッサコアを含む他のロジック及び回路が含まれ得る。
【0166】
図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によって提供してもよい。メモリインターフェイスは、メモリコントローラ1265を介してSDRAM又はSRAMメモリ装置にアクセスするために提供され得る。いくつかの集積回路は、埋込み型セキュリティエンジン1270をさらに含む。
【0167】
図13A~
図13Bは、本明細書で説明する実施形態による、SoC内で使用するための例示的なグラフィックプロセッサを示すブロック図である。
図13Aは、一実施形態による、1つ又は複数のIPコアを用いて製造され得るシステムオンチップ集積回路の例示的なグラフィックプロセッサ1310を示す。
図13Bは、一実施形態による、1つ又は複数のIPコアを用いて製造することができるシステムオンチップ集積回路の追加の例示的なグラフィックプロセッサ1340を示す。
図13Aのグラフィックプロセッサ1310は、低電力グラフィックプロセッサコアの例である。
図13Bのグラフィックプロセッサ1340は、高性能グラフィックプロセッサコアの例である。グラフィックプロセッサ1310、1340のそれぞれは、
図12のグラフィックプロセッサ1210の変形であり得る。
【0168】
図13Aに示されるように、グラフィックプロセッサ1310は、頂点プロセッサ1305及び1つ又は複数のフラグメントプロセッサ1315A~1315N(例えば、1315A、1315B、1315C、1315Dから1315N-1、及び1315N)を含む。グラフィックプロセッサ1310は、個別のロジックを介して異なるシェーダープログラムを実行できるため、頂点プロセッサ1305は頂点シェーダープログラムの動作を行うように最適化される一方、1つ又は複数のフラグメントプロセッサ1315A~1315Nはフラグメント又はピクセルシェーダープログラムのフラグメント(例えば、ピクセル)シェーディング処理を行う。頂点プロセッサ1305は、3Dグラフィックパイプラインの頂点処理段階を実行し、プリミティブ及び頂点データを生成する。フラグメントプロセッサ1315A~1315Nは、頂点プロセッサ1305によって生成されたプリミティブ及び頂点データを使用して、表示装置に表示されるフレームバッファを生成する。一実施形態では、フラグメントプロセッサ1315A~1315Nは、OpenGL APIで提供されるようなフラグメントシェーダープログラムを実行するように最適化され、これは、Direct3D APIで提供されるようなピクセルシェーダープログラムと同様の処理を行うために使用され得る。
【0169】
グラフィックプロセッサ1310は、1つ又は複数のメモリ管理ユニット(MMU)1320A~1320B、キャッシュ1325A~1325B、及び回路相互接続1330A~1330Bをさらに含む。1つ又は複数のMMU1320A~1320Bは、1つ又は複数のキャッシュ1325A~1325Bに格納された頂点又は画像/テクスチャデータに加えて、メモリに格納された頂点又は画像/テクスチャデータを参照することができる頂点プロセッサ1305及び/又はフラグメントプロセッサ1315A~1315Nを含む、グラフィックプロセッサ1310の仮想アドレスから物理アドレスへのマッピングを提供する。一実施形態では、1つ又は複数のMMU1320A~1320Bは、
図12の1つ又は複数のアプリケーションプロセッサ1205、画像プロセッサ1215、及び/又はビデオプロセッサ1220に関連する1つ又は複数のMMUを含む、システム内の他のMMUと同期することができ、それによって各プロセッサ1205~1220は共有又は統合された仮想メモリシステムに参加できる。実施形態によれば、1つ又は複数の回路相互接続1330A~1330Bによって、グラフィックプロセッサ1310が、SoCの内部バスを介して又は直接接続を介して、SoC内の他のIPコアとインターフェイス接続することが可能になる。
【0170】
図13Bに示されるように、グラフィックプロセッサ1340は、
図13Aのグラフィックプロセッサ1310の1つ又は複数のMMU1320A~1320B、キャッシュ1325A~1325B、及び回路相互接続1330A~1330Bを含む。グラフィックプロセッサ1340は、1つ又は複数のシェーダーコア1355A~1355N(例えば、1355A、1355B、1355C、1355D、1355E、1355Fから1355N-1、1355N)を含み、これは統合されたシェーダーコアアーキテクチャを提供し、このアーキテクチャでは、単一のコア又はタイプ又はコアが、頂点シェーダー、フラグメントシェーダー、及び/又は計算シェーダーを実装するシェーダープログラムコードを含む、全てのタイプのプログラム可能なシェーダーコードを実行できる。存在するシェーダーコアの正確な数は、実施形態及び実施態様によって異なり得る。さらに、グラフィックプロセッサ1340はコア間タスクマネージャー1345を含み、このマネージャー1345は1つ又は複数のシェーダーコア1355A~1355N及びタイリングユニット1358に実行スレッドをディスパッチするスレッドディスパッチャとして機能し、タイルベースのレンダリングのタイリング処理を加速させ、シーンのレンダリング処理は、例えば、シーン内のローカル空間コヒーレンスを活用する、又は内部キャッシュの使用を最適化するために、イメージ空間で細分化される。
【0171】
機械学習の概要
【0172】
機械学習アルゴリズムは、データのセットに基づいて学習することができるアルゴリズムである。機械学習アルゴリズムの実施形態は、データセット内の高レベルの抽象化をモデル化するように設計できる。例えば、画像認識アルゴリズムを使用して、いくつかのカテゴリのうちのどれに所与の入力が属するかを決定できる。回帰アルゴリズムは、入力が与えられた数値を出力できる。パターン認識アルゴリズムを使用して、変換されたテキストを生成する、又はテキストを音声に変換し及び/又は音声認識を実行することができる。
【0173】
例示的なタイプの機械学習アルゴリズムは、ニューラルネットワークである。ニューラルネットワークには多くの種類があり、単純なタイプのニューラルネットワークはフィードフォワードネットワークである。フィードフォワードネットワークは、ノードが層に配置された非循環グラフとして実装できる。典型的に、フィードフォワードネットワークトポロジには、少なくとも1つの隠れ層によって分離された入力層及び出力層が含まれる。隠れ層は、入力層が受け取った入力を、出力層での出力を生成するのに役立つ表現に変換する。ネットワークノードは、エッジを介して隣接する層のノードに完全に接続されるが、各層内のノード同士の間にエッジはない。フィードフォワードネットワークの入力層のノードで受け取ったデータは、層を接続する各エッジにそれぞれ関連付けられた係数(重み)に基づいてネットワーク内の各連続層のノードの状態を計算する活性化関数を介して、出力層のノードに伝播(つまり、「フィードフォワード」)される。実行中のアルゴリズムによって表される特定のモデルに応じて、ニューラルネットワークアルゴリズムからの出力は様々な形式をとることができる。
【0174】
機械学習アルゴリズムを使用して特定の問題をモデル化する前に、アルゴリズムは、訓練データセットを用いて訓練される。ニューラルネットワークの訓練には、ネットワークトポロジの選択、ネットワークによってモデル化されている問題を表す訓練データのセットの使用、及びネットワークモデルが訓練データセットの全てのインスタンスについて最小のエラーで実行されるまで重みを調整することが含まれる。例えば、ニューラルネットワークの教師ありの学習訓練プロセス中に、訓練データセット内のインスタンスを表す入力に応答してネットワークによって生成された出力は、そのインスタンスの「正しい」ラベル付き出力と比較され、出力とラベル付き出力との間の差を表すエラー信号が計算され、接続に関連付けられた重みが調整されて、エラー信号がネットワークの層を介して後方に伝播されるときにそのエラーを最小限に抑える。訓練データセットのインスタンスから生成された各出力のエラーが最小化されると、ネットワークは「訓練済み」と見なされる。
【0175】
機械学習アルゴリズムの精度は、アルゴリズムを訓練するために使用されるデータセットの品質によって著しく影響を受ける可能性がある。訓練プロセスは大量の計算が必要になる場合があり、従来の汎用プロセッサではかなりの時間がかかる場合がある。従って、並列処理ハードウェアが、多くのタイプの機械学習アルゴリズムを訓練するために使用される。これは、ニューラルネットワークの係数を調整する際に実行される計算自体が自然に並列実装に役立つため、ニューラルネットワークの訓練を最適化するのに特に役立つ。具体的には、多くの機械学習アルゴリズム及びソフトウェアアプリケーションが、汎用グラフィック処理装置内の並列処理ハードウェアを利用するように適合されている。
【0176】
図14は、機械学習ソフトウェアスタック1400の一般化された図である。機械学習アプリケーション1402は、訓練データセットを用いてニューラルネットワークを訓練するか、又は訓練済み深層ニューラルネットワークを使用して機械知能を実装するように構成され得る。機械学習アプリケーション1402は、ニューラルネットワーク及び/又は展開前にニューラルネットワークを訓練するために使用できる特殊なソフトウェアのための訓練及び推論機能を含むことができる。機械学習アプリケーション1402は、画像認識、マッピング及び位置特定、自律ナビゲーション、音声合成、医用画像処理、又は言語翻訳を含むがこれらに限定されない任意のタイプの機械知能を実装することができる。
【0177】
機械学習アプリケーション1402のハードウェア加速化は、機械学習フレームワーク1404を介して有効にすることができる。機械学習フレームワーク1404は、機械学習プリミティブのライブラリを提供することができる。機械学習プリミティブは、機械学習アルゴリズムによって一般的に実行される基本的な演算である。機械学習フレームワーク1404がない場合に、機械学習アルゴリズムの開発者は、機械学習アルゴリズムに関連付けられたメインの計算ロジックを作成して最適化し、次に、新しい並列プロセッサが開発された際に計算ロジックを再最適化する必要がある。代わりに、機械学習アプリケーションは、機械学習フレームワーク1404によって提供されるプリミティブを用いて必要な計算を行うように構成できる。例示的なプリミティブには、畳み込みニューラルネットワーク(CNN)の訓練中に実行される計算処理であるテンソル畳み込み、活性化関数、及びプーリングが含まれる。機械学習フレームワーク1404は、行列及びベクトル演算等の多くの機械学習アルゴリズムによって実行される基本的な線形代数サブプログラムを実装するためのプリミティブを提供することもできる。
【0178】
機械学習フレームワーク1404は、機械学習アプリケーション1402から受け取った入力データを処理し、計算フレームワーク1406への適切な入力を生成することができる。計算フレームワーク1406は、GPGPUドライバ1408に提供される基礎となる命令を抽象化して、機械学習フレームワーク1404がGPGPUハードウェア1410のアーキテクチャを熟知している必要なしに、機械学習フレームワーク1404が、GPGPUハードウェア1410を介してハードウェア加速化を利用するのを可能にする。さらに、計算フレームワーク1406は、様々なタイプ及び世代のGPGPUハードウェア1410に亘る機械学習フレームワーク1404のハードウェア加速化を有効にすることができる。
【0179】
機械学習ニューラルネットワークの実装
【0180】
本明細書で説明する実施形態によって提供されるコンピューティングアーキテクチャは、機械学習のためのニューラルネットワークの訓練及び展開に特に適したタイプの並列処理を行うように構成することができる。ニューラルネットワークは、グラフ関係を有する関数のネットワークとして一般化できる。当技術分野で知られているように、機械学習で使用される様々なタイプのニューラルネットワーク実装がある。ニューラルネットワークの1つの例示的なタイプは、前述したようなフィードフォワードネットワークである。
【0181】
ニューラルネットワークの第2の例示的なタイプは、畳み込みニューラルネットワーク(CNN)である。CNNは、画像データ等、既知のグリッド状のトポロジを有するデータを処理するための特殊なフィードフォワードニューラルネットワークである。従って、CNNは、一般に視覚計算及び画像認識アプリケーションに使用されるが、音声及び言語処理等の他のタイプのパターン認識にも使用できる。CNN入力層のノードは、「フィルター」のセット(網膜にある受容野から発想を得た特徴検出器)に編成され、フィルターの各セットの出力はネットワークの連続層のノードに伝播される。CNNの計算には、畳み込み数学演算を各フィルターに適用して、そのフィルターの出力を生成することが含まれる。畳み込みは、2つの関数によって実行される特殊な数学演算であり、2つの元の関数のうちの1つの修正バージョンである第3の関数を生成する。畳み込みネットワークの用語では、畳み込みの第1の関数は入力と呼ばれる一方、第2の関数は畳み込みカーネルと呼ばれる。出力は、特徴マップと呼ばれる場合がある。例えば、畳み込み層への入力は、入力画像の様々な色成分を規定するデータの多次元アレイにすることができる。畳み込みカーネルは、パラメータの多次元アレイにすることができ、パラメータは、ニューラルネットワークの訓練プロセスによって適応される。
【0182】
再帰型ニューラルネットワーク(RNN)は、層同士の間のフィードバック接続を含むフィードフォワードニューラルネットワークのファミリーである。RNNは、ニューラルネットワークの様々な部分に亘ってパラメータデータを共有することにより、シーケンシャルデータのモデリングを可能にする。RNNのアーキテクチャにはサイクルが含まれる。サイクルは、RNNからの出力データの少なくとも一部がシーケンス内の後続の入力を処理するためのフィードバックとして使用されるため、将来の時点での変数の現在値がそれ自体の値に及ぼす影響を表す。この特徴により、言語データを構成できる変数の性質により、RNNは言語処理に特に役立つ。
【0183】
以下に説明する図は、例示的なフィードフォワード、CNN、及びRNNネットワークを提示するとともに、それらのタイプの各ネットワークをそれぞれ訓練及び展開するための一般的なプロセスを説明している。これらの説明は、本明細書で説明する特定の実施形態に関して例示的且つ非限定的であり、例示される概念は、深層ニューラルネットワーク及び機械学習技術に一般的に適用できることが理解されよう。
【0184】
上記の例示的なニューラルネットワークを使用して、ディープラーニングを実行することができる。ディープラーニングは、深層ニューラルネットワークを用いた機械学習である。ディープラーニングで使用される深層ニューラルネットワークは、単一の隠れ層のみを含む浅いニューラルネットワークとは対照的に、複数の隠れ層で構成される人工ニューラルネットワークである。より深い(深層)ニューラルネットワークは、一般に、訓練するのにより多くの計算負荷がかかる。ただし、ネットワークの追加の隠れ層により、浅い機械学習手法に比べて出力エラーが減少する多段階パターン認識が可能になる。
【0185】
ディープラーニングで使用される深層ニューラルネットワークは、典型的に、モデルに提供される特徴表現に基づいて、演算(例えば、オブジェクト分類、音声認識等)を行うことができる数学モデルを表すバックエンドネットワークに結合された特徴認識を実行するフロントエンドネットワークを含む。ディープラーニングにより、モデルに対して手動で作成された特徴エンジニアリングを実行する必要なく、機械学習を実行できる。代わりに、深層ニューラルネットワークは、入力データ内の統計構造又は相関に基づいて特徴を学習できる。学習した特徴は、検出した特徴を出力にマッピングできる数学モデルに提供できる。ネットワークで使用される数学的モデルは、通常、実行される特定のタスクに特化しており、様々なタスクを実行するために様々なモデルが使用される。
【0186】
ニューラルネットワークが構築されると、学習モデルをネットワークに適用して、特定のタスクを実行するようにネットワークを訓練することができる。学習モデルは、ネットワークの出力エラーを減らすためにモデル内の重みをどの様に調整するかを記述する。エラーの逆伝播は、ニューラルネットワークの訓練に使用される一般的な方法である。入力ベクトルが、処理のためにネットワークに提示される。ネットワークの出力は、損失関数を用いて目的の出力と比較され、エラー値が出力層のニューロン毎に計算される。次に、エラー値は、各ニューロンが元の出力への寄与を大まかに表す関連エラー値を有するまで、逆方向に伝播される。次に、ネットワークは、確率的勾配降下アルゴリズム等のアルゴリズムを用いてこれらのエラーから学習し、ニューラルネットワークの重みを更新できる。
【0187】
図15A~
図15Bは、例示的な畳み込みニューラルネットワークを示す。
図15Aは、CNN内の様々な層を示す。
図15Aに示されるように、画像処理をモデル化するために使用される例示的なCNNは、入力画像の赤、緑、及び青(RGB)成分を表す入力1502を受け取ることができる。入力1502は、複数の畳み込み層(例えば、第1の畳み込み層1504、第2の畳み込み層1506)によって処理することができる。複数の畳み込み層からの出力は、オプションで、完全に接続された層のセット1508によって処理される。完全に接続された層のニューロンは、フィードフォワードネットワークに関して前述したように、前の層の全てのアクティブ化に完全に接続する。完全に接続された層1508からの出力を使用して、ネットワークから出力結果を生成することができる。完全に接続された層1508内のアクティブ化は、畳み込みの代わりに行列乗算を用いて計算することができる。全てのCNN実装が完全に接続された層1508を利用するわけではない。例えば、いくつかの実施態様では、第2の畳み込み層1506はCNNの出力を生成できる。
【0188】
畳み込み層はまばらに接続されており、これは、完全に接続された層1508に見られる従来のニューラルネットワーク構成とは異なる。従来のニューラルネットワーク層は完全に接続されており、それによって全ての出力ユニットが全ての入力ユニットと相互作用する。ただし、図示のように、フィールドの畳み込みの出力が(フィールド内の各ノードの各状態値ではなく)後続の層のノードに入力されるため、畳み込み層はまばらに接続される。畳み込み層に関連付けられたカーネルは、畳み込み演算を行い、その出力は次の層に送られる。畳み込み層内で実行される次元削減は、CNNが大きな画像を処理するようにスケーリングできるようにする1つの態様である。
【0189】
図15Bは、CNNの畳み込み層内の例示的な計算段階を示す。CNNの畳み込み層1512への入力は、畳み込み層1514の3つの段階で処理することができる。3つの段階には、畳み込み段階1516、検出器段階1518、及びプーリング段階1520が含まれ得る。次に、畳み込み層1514は、連続する畳み込み層にデータを出力することができる。ネットワークの最後の畳み込み層は、出力特徴マップデータを生成するか、又は完全に接続された層に入力を提供して、例えばCNNへの入力の分類値を生成できる。
【0190】
畳み込み段階1516では、いくつかの畳み込みを並行して実行して、線形活性化のセットが生成される。畳み込み段階1516は、線形変換プラス並進として指定できる任意の変換であるアフィン変換を含むことができる。アフィン変換には、回転、並進、スケーリング、及びこれらの変換の組合せが含まれる。畳み込み段階は、入力の特定の領域に接続されている関数(ニューロン等)の出力を計算し、その領域は、ニューロンに関連付けられたローカル領域として決定できる。ニューロンは、ニューロンの重みと、ニューロンが接続されているローカル入力の領域との間のドット積を計算する。畳み込み段階1516からの出力は、畳み込み層1514の連続する段階によって処理される線形活性化のセットを規定する。
【0191】
線形活性化は、検出器段階1518によって処理することができる。検出器段階1518では、各線形活性化は、非線形活性化関数によって処理される。非線形活性化関数は、畳み込み層の受容野に影響を与えることなく、ネットワーク全体の非線形特性を向上させる。いくつかのタイプの非線形活性化関数を使用できる。1つの特定のタイプは正規化線形ユニット(ReLU)であり、これはf(x)=max(0,x)として規定された活性化関数を使用して、活性化のしきい値がゼロになる。
【0192】
プーリング段階1520は、第2の畳み込み層1506の出力を近くの出力の要約統計量で置き換えるプーリング関数を使用する。プーリング関数を使用して、並進不変性をニューラルネットワークに導入することができ、それによって入力への小さな並進は、プーリングされた出力を変更しない。ローカル並進への不変性は、入力データ内の特徴の存在が特徴の正確な位置よりも重要であるシナリオで役立ち得る。プーリング段階1520中に、最大プーリング、平均プーリング、l2ノルムプーリング等、様々なタイプのプーリング関数を使用できる。さらに、いくつかのCNN実装にはプーリング段階が含まれていない。代わりに、そのような実装は、以前の畳み込み段階と比較してストライドが増大した、追加の畳み込み段階に置き換えられる。
【0193】
次に、畳み込み層1514からの出力は、次の層1522によって処理され得る。次の層1522は、追加の畳み込み層又は完全に接続された層1508のうちの1つであり得る。例えば、
図15Aの第1の畳み込み層1504は、第2の畳み込み層に出力することができる一方、第2の畳み込み層は、完全に接続された層1508のうちの第1の層に出力することができる。
【0194】
図16は、例示的な再帰型ニューラルネットワークを示す。再帰型ニューラルネットワーク(RNN)では、ネットワークの以前の状態が、ネットワークの現在の状態の出力に影響を与える。RNNは、様々な関数を用いて様々な方法で構築できる。RNNの使用は、通常、数学モデルを使用して、以前の入力シーケンスに基づいて将来を予測することを中心に展開する。例えば、RNNを使用して統計的言語モデリングを実行し、以前の一連の単語が与えられた場合、次の単語を予測できる。図示されたRNN1600は、入力ベクトルを受け取る入力層1602、再帰関数を実装するための隠れ層1604、前の状態の「メモリ」を可能にするためのフィードバック機構1605、及び結果を出力するための出力層1606を有するものとして説明することができる。RNN1600は時間ステップに基づいて動作する。所与の時間ステップでのRNNの状態は、フィードバック機構1605を介して以前の時間ステップに基づいて影響を受ける。所与の時間ステップでは、隠れ層1604の状態は、以前の状態と現在の時間ステップの入力とによって規定される。第1の時間ステップにおける初期入力(x
1)は、隠れ層1604によって処理できる。第2の入力(x
2)は、初期入力(x
1)の処理中に決定された状態情報を用いて、隠れ層1604によって処理できる。所与の状態は、s
t=f(Ux
t+Ws
t-1)として計算でき、ここで、U及びWはパラメータ行列である。関数fは一般に、双曲線正接関数(Tanh)又は正規化線形関数f(x)=max(0,x)の変形等の非線形性である。ただし、隠れ層1604で使用される特定の数学関数は、RNN1600の特定の実装の詳細に応じて異なり得る。
【0195】
説明した基本的なCNN及びRNNネットワークに加えて、これらのネットワークのバリエーションを有効にすることができる。RNNの変形の1つの例は、長・短期記憶(LSTM)RNNである。LSTM RNNは、より長い言語シーケンスを処理するために必要となり得る長期依存関係を学習できる。CNNの変形は、CNNに似た構造を有しており、且つ深層信念ネットワークと同様の方法で訓練される畳み込み深層信念ネットワークである。深層信念ネットワーク(DBN)は、確率(ランダム)変数の複数の層で構成される生成ニューラルネットワークである。DBNは、貪欲な(greedy)教師なし学習を用いて、層毎に訓練できる。次に、DBNの学習した重みを使用して、ニューラルネットワークの重みの最適な初期セットを決定することにより、訓練前のニューラルネットワークを提供できる。
【0196】
図17は、深層ニューラルネットワークの訓練及び展開を示す。所与のネットワークがタスクのために構築されると、ニューラルネットワークは訓練データセット1702を用いて訓練される。訓練プロセスのハードウェア加速化を可能にするために、様々な訓練フレームワークが開発されている。例えば、
図14の機械学習フレームワーク1404は、訓練フレームワーク1704として構成され得る。訓練フレームワーク1704は、未訓練状態のニューラルネットワーク1706に接続し(hook into)、本明細書で説明する並列処理リソースを用いて未訓練状態のニューラルネットを訓練して、訓練済みニューラルネットワーク1708を生成するのを可能にし得る。訓練プロセスを開始するために、初期重みは、ランダムに、又は深層信念ネットワークを用いて事前訓練することによって選択され得る。次に、訓練サイクルは、教師あり又は教師なしの方法のいずれかで実行される。
【0197】
教師あり学習は、訓練データセット1702が入力に対する所望の出力と対になっている入力を含む場合、又は訓練データセットが既知の出力を有する入力を含み且つニューラルネットワークの出力が手動で等級付けされる場合等に、訓練が媒介(mediated)操作として実行される学習方法である。ネットワークは入力を処理し、得られた出力を一組の予期される出力又は望ましい出力と比較する。次に、エラーはシステムを通じて逆伝播される。訓練フレームワーク1704は、未訓練状態のニューラルネットワーク1706を制御する重みを調節するように調整することができる。訓練フレームワーク1704は、未訓練状態のニューラルネットワーク1706が既知の入力データに基づいて正解を生成するのに適したモデルに向けてどれだけ十分に収束しているかを監視するツールを提供することができる。ニューラルネットワークによって生成された出力を微調整するためにネットワークの重みが調整されると、訓練プロセスが繰り返し発生する。ニューラルネットワークが、訓練済みニューラルネットワーク1708に関連する統計的に望ましい精度に達するまで、訓練プロセスを続けることができる。次に、訓練済みニューラルネットワーク1708を展開して、任意の数の機械学習動作を実施し、新しいデータ1712の入力に基づいて推論結果1714を生成できる。
【0198】
教師なし学習は、ネットワークがラベル付けされていないデータを用いてそれ自体を訓練しようと試みる学習方法である。こうして、教師なし学習の場合に、訓練データセット1702には、関連する出力データのない入力データが含まれる。未訓練状態のニューラルネットワーク1706は、ラベル付けされていない入力内のグループを学習し、個々の入力がデータセット全体にどのように関連付けられているかを判断できる。教師なし訓練を使用して、自己組織化マップを生成でき、自己組織化マップは、データの次元数を減らすのに役立つ処理を行うことができる一種の訓練済みニューラルネットワーク1708である。教師なし訓練を使用して異常検出を行うこともでき、これにより、データの通常のパターンから逸脱した入力データセット内のデータポイントを特定できる。
【0199】
教師あり及び教師なし訓練のバリエーションも使用され得る。半教師あり学習は、訓練データセット1702に、同じ分布のラベル付きデータとラベルなしデータの混合が含まれる手法である。インクリメンタル式(incremental)学習は、入力データを継続的に使用して、モデルをさらに訓練する教師あり学習の変形である。インクリメンタル式学習によって、訓練済みニューラルネットワーク1708が、初期訓練中にネットワーク内に注ぎ込まれた知識を忘れることなく、新しいデータ1712に適応することが可能になる。
【0200】
教師ありか教師なしかにかかわらず、特に深層ニューラルネットワークの訓練プロセスは、単一の計算ノードにとって過度の計算負荷かかる可能性がある。単一の計算ノードを用いる代わりに、計算ノードの分散ネットワークを使用して、訓練プロセスを加速できる。
【0201】
図18は、分散学習を示すブロック図である。分散学習は、複数の分散計算ノードを使用して、ニューラルネットワークの教師あり又は教師なし訓練を行う訓練モデルである。分散計算ノードはそれぞれ、1つ又は複数のホストプロセッサと1つ又は複数の汎用処理ノードとを含むことができる。図示のように、分散学習は、モデルの並列処理1802、データの並列処理1804、並びにモデル及びデータの並列処理1806の組合せを行うことができる。
【0202】
モデルの並列処理1802では、分散システム内の異なる計算ノードが、単一のネットワークの異なる部分に対して訓練計算を行うことができる。例えば、ニューラルネットワークの各層は、分散システムの異なる処理ノードによって訓練できる。モデルの並列処理の利点は、特に大きなモデルに拡張できることである。ニューラルネットワークの異なる層に関連付けられている計算を分割することにより、全ての層の重みが単一の計算ノードのメモリに収まらない非常に大規模なニューラルネットワークの訓練が可能になる。場合によっては、モデルの並列処理は、大規模なニューラルネットワークの教師なし訓練を行う際に特に役立ち得る。
【0203】
データの並列処理1804では、分散ネットワークの異なるノードにはモデルの完全なインスタンスがあり、各ノードはデータの異なる部分を受け取る。次に、異なるノードからの結果が結合される。データの並列処理には様々なアプローチが可能であるが、データの並列訓練アプローチでは全て、結果を組み合わせて、各ノードの間でモデルパラメータを同期させる手法が必要である。結合(組み合わされた)データへの例示的なアプローチには、パラメータの平均化と更新ベースのデータの並列処理とが含まれる。パラメータの平均化は、訓練データのサブセットで各ノードを訓練し、グローバルパラメータ(例えば、重み、バイアス)を各ノードからのパラメータの平均に設定する。パラメータの平均化では、パラメータデータを維持する中央パラメータサーバを使用する。更新ベースのデータの並列処理は、ノードからパラメータサーバにパラメータを転送する代わりに、モデルへの更新が転送されることを除いて、パラメータの平均化と似ている。さらに、更新ベースのデータの並列処理は、更新がノード同士の間で圧縮及び転送される非中央化方式で実行できる。
【0204】
組み合わされたモデル及びデータの並列処理1806は、例えば、各計算ノードが複数のGPUを含む分散システムで実装することができる。各ノードにはモデルの完全なインスタンスがあり得、各ノード内の個別のGPUはモデルの異なる部分を訓練するために使用される。
【0205】
分散訓練は、単一のマシンでの訓練と比較してオーバーヘッドが増大する。ただし、本明細書で説明する並列プロセッサ及びGPGPUはそれぞれ、高帯域幅のGPUからGPUへのデータ転送及び高速リモートデータ同期を可能にする手法を含む、分散訓練のオーバーヘッドを減らす様々な手法を実装できる。
【0206】
例示的な機械学習アプリケーション
【0207】
機械学習は、コンピュータビジョン、自動運転及びナビゲーション、音声認識、及び言語処理を含むがこれらに限定されない様々な技術的問題を解決するために適用することができる。コンピュータビジョンは、従来、機械学習アプリケーションの最も活発な研究分野のうちの1つであった。コンピュータビジョンの用途は、顔の認識等の人間の視覚能力の再現から、視覚能力の新しいカテゴリの作成まで多岐にわたる。例えば、コンピュータビジョンの用途は、ビデオに表示されているオブジェクトに発生する振動からの音波を認識するように構成できる。並列プロセッサの加速化機械学習により、以前に可能であったよりも著しく大規模の訓練データセットを用いてコンピュータビジョンのアプリケーションを訓練でき、低電力並列プロセッサを用いて推論システムを展開できる。
【0208】
並列プロセッサの加速化機械学習には、車線及び道路標識認識、障害物回避、ナビゲーション、及び運転制御を含む自律運転アプリケーションがある。加速化機械学習手法を使用して、特定の訓練入力に対する適切な応答を規定するデータセットに基づいて運転モデルを訓練できる。本明細書で説明する並列プロセッサにより、自律運転ソリューションに使用される益々複雑になるニューラルネットワークの迅速な訓練が可能になり、自律型車両への統合に適したモバイルプラットフォームでの低電力推論プロセッサの展開が可能になる。
【0209】
並列プロセッサ加速化深層ニューラルネットワークは、自動音声認識(ASR)への機械学習アプローチを可能にした。ASRには、入力音響シーケンスが与えられたときに最も可能性の高い言語シーケンスを計算する関数の作成が含まれる。深層ニューラルネットワークを用いた加速化機械学習により、以前はASRに使用していた隠れマルコフモデル(HMM)及びガウス混合モデル(GMM)の置き換えが可能になった。
【0210】
並列プロセッサ加速化機械学習を使用して、自然言語処理を加速させることもできる。自動学習手順では、統計的推論アルゴリズムを利用して、誤った入力又は見慣れない入力に対してロバストなモデルを生成できる。例示的な自然言語プロセッサプリケーションには、人間の言語同士の間の自動機械翻訳が含まれる。
【0211】
機械学習に使用される並列処理プラットフォームは、訓練プラットフォームと展開プラットフォームとに分けることができる。訓練プラットフォームは、一般的に高度に並列化されており、マルチGPUシングルノード訓練とマルチノード、マルチGPU訓練とを加速させるための最適化が含まれるが、展開された機械学習(推論等)プラットフォームには、一般に、カメラ、自律ロボット、及び自律車両等の製品で使用するのに適した低電力並列プロセッサが含まれる。
【0212】
マトリックスアクセラレーションロジックを含むGPGPU
【0213】
図19は、一実施形態によるデータ処理システム1900のブロック図である。データ処理システム1900は、プロセッサ1902、統合メモリ1910、及び機械学習加速論理を含むGPGPU1920を有する異種処理システムである。プロセッサ1902及びGPGPU1920は、本明細書で説明するようなプロセッサ及びGPGPU/並列プロセッサのいずれであってもよい。プロセッサ1902は、システムメモリ1912に格納されたコンパイラ1915のための命令を実行することができる。コンパイラ1915は、プロセッサ1902上で実行され、ソースコード1914Aをコンパイル済みコード1914Bにコンパイルする。コンパイル済みコード1914Bは、プロセッサ1902によって実行され得る命令及び/又はGPGPU1920によって実行され得る命令を含むことができる。コンパイル中に、コンパイラ1915は、コンパイル済みコード1914Bに存在するデータの並列処理のレベルに関するヒント及び/又はコンパイル済みコード1914Bに基づいてディスパッチされるスレッドに関連するデータの局所性に関するヒントを含むメタデータを挿入するための処理を行い得る。コンパイラ1915は、そのような処理を行うために必要な情報を含むことができ、又は処理は、ランタイムライブラリ1916の助けを借りて行うことができる。ランタイムライブラリ1916は、ソースコード1914Aのコンパイルでコンパイラ1915も支援し、GPGPU1920でコンパイル済み命令の実行を容易にするために、コンパイル済みコード1914Bと実行時にリンクされる命令を含むこともできる。
【0214】
統合メモリ1910は、プロセッサ1902及びGPGPU1920によってアクセスされ得る統合アドレス空間を表す。統合メモリは、システムメモリ1912だけでなくGPGPUメモリ1918を含み得る。GPGPUメモリ1918は、GPGPU1920のアドレス空間内のメモリであり、システムメモリ1912の一部又は全てを含むことができる。一実施形態では、GPGPUメモリ1918は、GPGPU1920によって独占的に使用するために専用化された任意のメモリの少なくとも一部を含むこともできる。一実施形態では、システムメモリ1912に格納されたコンパイル済みコード1914Bは、GPGPU1920によるアクセスのためにGPGPUメモリ1918にマッピングすることができる。
【0215】
GPGPU1920は、複数の計算ブロック1924A~1924Nを含み、これらは、本明細書で説明する様々な計算ユニット又は実行要素のうちの1つ又は複数を含むことができる。一実施形態では、GPGPU1920は、行列演算(例えば、ドット積、乗算/加算等)のサブセットを加速させるように設計された1つ又は複数の特殊関数計算ユニットを含むことができる行列アクセラレータ1923をさらに含む。GPGPU1920は、レジスタのセット1925、電力及び性能モジュール1926、及びキャッシュ1927を含むがこれらに限定されない、計算ブロック1924A~1924N及び行列アクセラレータ1923によって共有され得るリソースのセットも含み得る。一実施形態では、レジスタ1925は、直接的及び間接的にアクセス可能なレジスタを含み、間接的にアクセス可能なレジスタは、行列アクセラレータ1923による使用のために最適化される。電力及び性能モジュール1926は、計算ブロック1924A~1924Nが、計算ブロック1924A~1924N内のゲートアイドル状態のコンポーネントに電力を供給するための電力供給及びクロック周波数を調整するように構成され得る。様々な実施形態では、キャッシュ1927は、命令キャッシュ及び/又はより低いレベルのデータキャッシュを含むことができる。
【0216】
GPGPU1920は、L3データキャッシュ1930をさらに含むことができ、L3データキャッシュ1930を使用して、行列アクセラレータ1923及び/又は計算ブロック1924A~1924N内の計算要素によって統合メモリ1910からアクセスされるデータをキャッシュすることができる。一実施形態では、L3データキャッシュ1930は、計算ブロック1924A~1924N及び行列アクセラレータ1923内の計算要素によって共有できる共有ローカルメモリ1932を含む。
【0217】
一実施形態では、GPGPU1920は、フェッチ及びデコードユニット1921並びにスケジューラコントローラ1922等の命令処理ロジックを含む。フェッチ及びデコードユニット1921は、計算ブロック1924A~1924N又は行列アクセラレータ1923の1つ又は複数により実行される命令をフェッチ及びデコードするフェッチユニット及びデコードユニットを含む。命令は、スケジューラコントローラ1922を介して、計算ブロック1924A~1924N又は行列アクセラレータ内の適切な機能ユニットにスケジュールすることができる。一実施形態では、スケジューラコントローラ1922は、高度なスケジューリング処理を行うように構成可能なASICである。一実施形態では、スケジューラコントローラ1922は、ファームウェアモジュールからロードされたスケジューラ命令を実行することができるマイクロコントローラ又は命令当たりの低エネルギー処理コアである。
【0218】
一実施形態では、計算ブロック1924A~1924Nによって実行されるいくつかの関数は、行列アクセラレータ1923に直接スケジュールされるか、又はオフロードすることができる。様々な実施形態では、行列アクセラレータ1923は、3Dグラフィック又は計算シェーダープログラムで使用される乗算及び加算演算やドット積演算等の、行列計算処理を効率的に行うように構成された処理要素ロジックを含む。一実施形態では、行列アクセラレータ1923は、機械学習フレームワークによって使用される処理を加速させるように構成することができる。一実施形態では、行列アクセラレータ1923は、特定のセットの並列行列乗算及び/又は加算演算を行うように明示的に構成された特定用途向け集積回路である。一実施形態では、行列アクセラレータ1923は、ワークロード同士の間で更新できる固定機能ロジックを提供するフィールドプログラマブルゲートアレイ(FPGA)である。行列アクセラレータ1923によって実行することができる行列演算のセットは、計算ブロック1924A~1924Nによって実行することができる演算に対して制限されることがある。しかしながら、行列アクセラレータ1923は、計算ブロック1924A~1924Nと比較して著しく高いスループットでこれらの演算を行うことができ得る。
【0219】
GEMMの演算例
【0220】
グラフィック、ベクトル、及び並列プロセッサは、一般的に、一般行列乗算(GEMM)演算を加速させる1つ又は複数の命令を含む。M×K行列及びK×N行列で行列乗算を行って、M×N行列を生成できる。大きな行列の乗算は、大きな行列をブロックに分割することで行うことができ、ブロックは、大きな行列の長方形の部分である。次に、ブロックを処理リソースにフェッチして処理できる。一実施形態では、本明細書で説明するような実行ユニット、グラフィックコア、又は計算ユニット等のマルチスレッド処理リソースは、ハードウェアスレッドにタスクを割り当てて、ブロックの各セットを処理し、出力行列に格納すべき出力を生成することができる。各スレッドは、K次元に沿って行列をトラバースし、積の出力を累積できる。処理リソース内のレジスタの可用性に基づいて、単一のスレッド内で複数のブロックを処理できる。
【0221】
図20は、ソース(source)行列及びデスティネーション(destination)行列に対する一般行列乗算演算を示す。M×K行列(A行列2002)にK×N行列(B行列2004)を乗算して、M×N出力行列(C行列2006)が生成される単精度GEMM演算(例えば、SGEMM)が示されている。図示された行列は、より大きな行列のブロックであり得る。ブロックのサイズは、機械のSIMD幅(例えば、simd幅×simd幅)によって異なり得る。例えば、SIMD8処理要素では、A、B、Cは、行列要素の8×8ブロックとすることができる。一実施形態では、A行列2002は処理要素の共有ローカルメモリに格納される一方、B行列2004はL3キャッシュに格納され、C行列2006は処理リソースの汎用レジスタファイル内のレジスタに格納されるが、他の実施形態は異なる構成にしてもよい。行列の要素のための例示的なレジスタ(例えば、rxx)及びチャネル(例えば、0~7)が示されている。演算中に、行列要素は、示されたソースからフェッチされ、行列の要素の図示されたレジスタ及びチャネルに格納され得る。一実施形態では、madv命令は、<src1>データ(B行列)に存在するいかなるスパース性を利用することなく、<src2>データ(A行列)上のスパース性を処理する。そのような実施形態では、<src2>(例えば、行列)がまばら(疎)な入力に使用される。
【0222】
一実施形態では、SGEMM演算は、表1に示されるフォーマットを有する命令を介して実装することができる。
表1 グラフィックプロセッサの命令フォーマット
【表1】
【0223】
表1の命令フォーマットは、
図7に示される命令フォーマット710、730のバージョンである。表1の命令フォーマットの場合に、<opcode>は実行する演算を規定し、<dst>は演算によって生成された結果を格納するオペランドであり、<src0>、<src1>、及び<src2>は3つのソースオペランドである。オプションで2つの修飾子(<pred>、<cmod>)を使用できる。<pred>は、フラグレジスタ(f0.0)をビットマスクとして使用して特定のチャネルをマスクオフ(off)する述語であり、書き込み<dst>及び<cmod>は、cmp(比較)命令で一般的に使用され、ソースオペランドから生成された比較結果に基づいてフラグレジスタにビットマスクを生成する。例えば、<src0>及び<src1>の各チャネルが等しくない場合に、命令cmp(ne)f0.0は、フラグレジスタ(f0.0)にビットを設定する。
【0224】
SGEMM演算の一部の命令シーケンスを表2に示す。
表2 k=0の場合のSGEMM演算シーケンス
【表2】
【0225】
表2は、
図20の行列に対して演算を行うための例示的な命令シーケンスを示し、ここで、k=0である。同様のシーケンスがk=1~7まで繰り返される。より高いループが、A行列及びB行列から次の要素のセットをロードし、さらに汎用レジスタファイルに格納されている同じC行列に累積させる。示されるmad opcodeは、演算<dst>=<src0>+<src1>*<src2>を実行する。各オペランドは、レジスタアドレス、領域指定オプション、及びデータ型で構成される。第1の命令(line00)は、SIMDワイドレジスタr10と、レジスタr76.0のブロードキャストされたSIMDチャネルとの乗算を行う。結果はSIMDワイドレジスタr34に追加される。<dst>の場合、例えばr34.0<1>:fの場合に、r34はレジスタアドレス(regnum)であり、.0はデータ型の単位でのレジスタ内のオフセット(subregnum)であり、<1>は書き込みのパックストライド(packed stride)を示す領域指定オプションであり、及び:fはfloatデータ型を示す。<src0>又は<src1>の場合、例えば、r10.0<1,0>:fの場合に、r10はレジスタアドレス(regnum)であり、.0はデータ型の単位でのレジスタ内のオフセット(subregnum)であり、<1,0>は読み取りのパックストライドを示す領域指定オプションであり、及び:fはデータ型を示す。<src2>の場合、例えばr76.0<0>:fの場合に、r76はレジスタアドレス(regnum)であり、.0はデータ型の単位でのレジスタ内のオフセット(subregnum)であり、<0>は読み取りの単一のSIMDチャネルのブロードキャストを示す領域指定オプションであり、及び:fはfloatデータ型を示す。line01~07の命令は同様の演算を行い、r76の異なるSIMDチャネルに亘って進行し、結果を連続したレジスタ(例えば、r77、r78)に累積する。
【0226】
乗算加算ベクトル命令
【0227】
表2の命令シーケンスの解析は、SGEMM演算に使用される8個のmad命令に亘って、<src1>及び<src2>オペランドレジスタアドレスは同じであるが、<src0>及び<dst>オペランドは順次インクリメントすることを示す。また、<src0>及び<dst>は特定のmad命令で同じなので、同じレジスタで累積が行われる。この解析の結果を利用して、フォーマット:<pred>madv.rcount<dst><src0><src1><src2>を有するハードウェア実装の乗算加算ベクトル(madv)命令をサポートするグラフィック処理リソースを有効にすることができる。
【0228】
図21A~
図21Cは、スパース入力に対してゼロスキップを伴う乗算加算ベクトル演算を可能にするための命令及び関連するハードウェアロジックを示す。
図21Aは、乗算加算ベクトル命令2100のフォーマットを示す。
図21Bは、算加算ベクトル命令2100のデコードを可能にするハードウェアロジック2110を示す。
図21Cは、本明細書で説明する乗算/加算/ベクトル命令2100のデコード及び実行を可能にするように構成される実行ロジック2120を示す。
【0229】
図21Aに示されるように、一実施形態は、乗算加算ベクトル命令(madv命令2100)が1つ又は複数の入力ベクトルに対して自動ゼロスキップを伴う一連の乗算加算命令を実行するハードウェアサポートを提供する。madv命令2100のフォーマットには、述語(pred2102)、繰返し回数2104(madv.rcount)が追加された命令オペコード、デスティネーションオペランド(dst2106)、及び複数のソースオペランド(src0 2107,src1 2108,src2 2109)が含まれる。一実施形態では、述語値はフラグレジスタに基づいて決定され、述語マスクのビットは、チャネルのアレイではなく、個々のmad命令のアレイに対して述語を適用する。従って、述語マスクを使用して、madv命令2100によって表される命令のセット内の特定の命令の生成を有効又は無効にすることができる。
【0230】
一実施形態では、madv命令2100は、デコード中に複数の追加の命令に展開されるハードウェアマクロ命令として実装される。そのような実施形態では、繰返し回数2104の値は、実行リソース内で一度に展開される命令の数を示す。例えば、以下の表3に示すmadv.8命令は、実行リソース内で表2に示されるSGEMM命令シーケンスに展開できる。
表3 乗算加算ベクトル命令の例
【表3】
【0231】
上記の表3の命令の場合に、繰返し回数2104は8回である。供給されたオペランドは、展開命令のセットの第1の命令の初期オペランドを表す。後続の命令のオペランドは、展開中に生成される。オペランド展開では、<dst>2106及び<src0>2107の連続するレジスタと、<src2>2109の連続するサブレジスタとのブロックを、繰返し回数2104の値に基づいて決定される連続するレジスタ/サブレジスタの数と共に使用する。フラグレジスタの値に基づいて、例えば、スパース入力に対してゼロスキップが実行される場合等に、命令セット内の特定の命令の展開をバイパスできる。
【0232】
図21Bに示されるように、一実施形態では、madv命令のデコード中に命令展開が実行されるが、他の実装手法が、命令実行パイプラインの実行段階による命令の直接実行等によって、他の実施形態で使用され得る。一実施形態では、処理リソース内の命令デコードロジック2110は、従来の命令デコードロジックに加えて、カウンタ/状態機械2111、優先順位エンコーダ2112、命令生成器2113、及びオペランド生成器2114を含むことができる。カウンタ/状態機械2111は、madv命令の展開中に使用するためのカウンタ値及びデコード状態を格納する。優先順位エンコード2112は、述語をスキャンして、生成すべき第1のmad命令を示す第1のアクティブ化されたビットを決定するために使用される。
【0233】
提案するmadv命令は、ALUパイプのデコード段階にカウンタ/状態機械を追加し、mad命令のシーケンスを生成することにより、実行ユニットに実装することができる。優先順位エンコーダ2112は、述語マスクをスキャンして、最初に設定されたビットを見つける。Mad命令は、その命令の対応するビットが述語ビットフィールドに設定されている場合に、命令生成器2113によって生成される。次に、オペランド生成器2114は、初期オペランドレジスタ及びサブレジスタ値、並びに述語マスク内に設定されたビット位置に基づいて、対応するオペランド値を生成する。madv命令の実行は、以下の表4の疑似コード(pseudocode)に示すように実行できる。
【表4】
【0234】
オペランド生成器2114は、表4の擬似コードに示されるのと同様の方法で、オペランドのregnum及びsubregnum値を生成することができる。
【0235】
図21Cに示されるように、マルチスレッド処理リソース内の実行ロジック2120は、本明細書で説明するように、madv命令を展開して実行するように構成され得る。実行ロジック2120は、本明細書で説明するような実行ユニット、計算ユニット、又はストリーミングマルチプロセッサ等のマルチスレッド処理リソース内で見出すことができる。一実施形態では、1組の命令キュー2122A~2122Nは、実行ロジック2120のN個のスレッドによる実行を保留しているN組の命令を格納することができる。各スレッドは、現在の命令の依存関係がクリアにされるまでスレッドの実行を停止させる関連するプリデコード段階2124A~2124Nを有する。現在の命令の依存関係が残っていない場合に、スレッドは準備完了としてマークされる。クリアにされると、スレッドは、ALUのうちの1つの実行パイプラインにディスパッチするスレッドを選択する調停プロセスに参加できる。
【0236】
各ALUのそれぞれのアービタ(arbiter)2126A~2126Mは、ALU内の実行リソースの可用性に基づいて、1つ又は複数の準備完了スレッドを選択することができる。次に、選択したスレッドの命令が、選択したALUの実行パイプラインにディスパッチされる。図示したALUの実行パイプライン段階には、デコード段階2128A~2128M、レジスタ読み取り段階2130A~2130M、実行段階2132A~2132M、及び書き戻し(WB)段階2134A~2134Mが含まれる。一実施形態では、単一のmadv命令は、命令を受け取るALUのデコード段階2128A~2128M内で複数のmad命令に展開することができる。
【0237】
一実施形態では、実行ロジック2120内のALUの数は、実行ロジック2120によって実行され得るスレッドの数より少ない。一実施形態では、複数の命令が単一のALUに発せられ得る。一実施形態では、利用可能なALUのサブセットのみがmadv命令展開のために構成され得、そのような命令はそれらの特定のALUによって実行される。実行ロジック2120がmadv命令を実行するために消費するクロックの総数は、mad命令当たりのクロック数、繰返し回数、及びスキップした命令の数に依存する。一実施形態では、実行ロジックのALUは、クロック毎に1つのmad命令を実行することができる。そのような実施形態では、madv.8命令は、実行するために8クロックかかり、スパース入力値を処理するとき、スキップされた命令毎に1クロックを引いたものになる。
【0238】
図22は、一実施形態による、スパース入力の命令展開及びスキップを示す。一実施形態では、比較命令2201を使用して、<src2>入力として使用されるレジスタデータをゼロと比較し、madv命令2202に使用される予測マスクを生成する。一実施形態では、madv命令の展開が<src0>及び<dst>オペランドに連続したレジスタを使用することに留意されたい。madv命令を使用するシェーダープログラムのコンパイル中に、十分な連続レジスタが利用できない場合に、シェーダーコンパイラは、分割した繰返し回数の複数の命令2203を出力できる。例えば、<src0>及び<dst>オペランドに異なるレジスタ開始点を用いて、繰返し回数が8の1つの命令ではなく、繰返し回数が4の2つの命令を出力する。複数の命令を使用することになる場合に、その命令を、<src1>及び<src2>レジスタの再利用を可能にするアトミック操作として実行することができる。例示的な<src2>2109、命令2202、又は命令2203が与えられると、1組のmad命令2204を生成することができる。<src2>2109内のスパース要素の命令生成をバイパスでき、それによってスパース<src2>要素を含むmad命令の実行がバイパスされるだけでなく、対応する命令の生成もバイパスされ、スパース行列ワークロードによって消費される命令フェッチ及びデコード帯域幅が削減される。
【0239】
場合によっては、madv命令のSIMDサイズは、結果が複数のレジスタに書き込まれるように、レジスタサイズよりも大きくなる可能性がある。そのような場合に、madvマクロ命令を展開すると、個々のmad命令の<dst>及び<src0>が複数のレジスタによってインクリメントされる。例えば、SIMD命令=32、データ型=4バイト、レジスタ幅=64バイトの場合に、<dst>及び<src0>は(SIMD*データ型/レジスタ幅)=2レジスタだけインクリメントされる。本明細書では、動作は一般にSIMD動作として説明しているが、本明細書で説明する技法は、SIMTベースのアーキテクチャ等の他の並列処理アーキテクチャにも適合させることもできる。
【0240】
専用のアキュムレータレジスタ(accXレジスタ)を含むグラフィックプロセッサアーキテクチャの場合に、本明細書で説明するようなmadv命令は、<src0>及び<dst>オペランドにアキュムレータレジスタを明示的又は暗黙的に使用できることに留意されたい。アキュムレータレジスタは、複数の浮動小数点演算を累積するために使用される、より大きな及び/又はより高精度のレジスタであり得る。アキュムレータレジスタを使用すると、入力又は出力のデータ型の精度に応じて、より精度の高い結果が生成され得る。アーキテクチャのアキュムレータの数が制限されている場合に、1つ又は複数のmadv命令の結果をアキュムレータに格納できるが、他は汎用レジスタに格納され得る。
【0241】
図23は、一実施形態による、乗算/加算/ベクトル命令の実行を容易にする方法2300を示す。方法2300は、本明細書で説明するグラフィックプロセッサ又は並列プロセッサの計算又はグラフィックプロセッサパイプラインのロジックによって実行することができる。例えば、方法2300は、
図21Bのハードウェアロジック2110を用いて、
図21Cの実行ロジック2120によって実行することができる。方法2300は、
図21Aのmadv命令2100等のハードウェアマクロ命令の実行を容易にするために、及び/又は本明細書で説明するように使用することができる。
【0242】
一実施形態では、方法2300は、グラフィック又は並列プロセッサのハードウェアロジックを介して、ハードウェアマクロ命令をフェッチする動作を行うことを含む(ブロック2301)。ハードウェアマクロ命令には、述語マスク、繰返し回数、及び初期オペランドのセット(<dst>、<src0>、<src1>、<src2>)がある。ハードウェアマクロ命令は、行列のセットに関連付けられた入力データに対して1回以上の乗算/加算演算を行うように構成される。方法2300は、ハードウェアマクロ命令をデコードするための動作を行うことをさらに含む(ブロック2302)。一実施形態では、フェッチされたハードウェアマクロ命令は、命令実行パイプラインのプリデコード段階(例えば、プリデコード段階2124A~2124N)のロジックが、関連するロード又は比較命令等の依存関係が満されていると判定するまで、命令キューに格納され得る。依存関係が満たされると、命令は、本明細書で説明する処理リソースのデコードロジックによって、デコードのために自動的に送信され得る。
【0243】
デコード処理は、実行のために生成するハードウェア命令のセットを決定することを少なくとも部分的に含むか、又は実行することができる。例えば、述語マスクのアクティブ化されたビット毎にmad命令を生成できる。述語マスクは、
図22に示されるように、<src2>オペランドのサブレジスタに格納された入力に基づいて生成できる。例えば、比較命令を使用して、<src2>入力として使用されるデータをゼロと比較することにより、フラグレジスタ内のビットを設定できる。次に、フラグレジスタを述語マスクとして使用できる。次に、述語マスク及び繰返し回数を使用して、実行のためのハードウェア命令のセットを生成できる(ブロック2303)。命令は、
図21Bのように、命令生成器2113によって生成することができる。生成すべき命令の最大数は、繰返し回数に基づいて決定できる。特定のハードウェア命令の生成は、述語マスク内の関連するビットによって無効にされた場合にバイパスされる。
【0244】
命令のセット内の生成された命令によって使用される特定のオペランドは、述語マスク及び初期オペランドのセットに基づいて決定することができる(ブロック2304)。命令のオペランドは、
図21Bのように、オペランド生成器2114によって生成することができる。<dst>及び<src0>オペランドには連続した連続レジスタが使用され、<src2>オペランドには連続したサブレジスタが使用される。バイパスされる命令にはオペランドは生成されない。次に、グラフィック又は並列プロセッサの命令実行パイプラインは、ハードウェア命令のセットをアトミックに(atomically)実行できる(ブロック2305)。アトミック実行は、命令のセットの実行中に行われる1つ又は複数の操作がアトミックに実行されることを示し、それによって、命令のセット内の命令は単一の命令と見なされる。ハードウェアマクロ命令の実行によって消費される特定のクロックサイクル数は、単一の乗算-加算演算を行うためのサイクル数、命令に関連付けられた繰返し回数、及びスパース入力データによりバイパスされる命令又は操作の数に基づいて異なる。次に、グラフィック又は並列プロセッサの命令実行パイプラインは、ハードウェア命令のセット内の各命令が完了すると、ハードウェアマクロ命令をリタイアさせることができる(ブロック2306)。
【0245】
madv命令への入力のスパース性に応じて、実行サイクルの数が変化し得ることに留意されたい。こうして、命令のレイテンシは、次の依存性命令のスケジューリングを可能にするようにコンパイル時に決定できない場合がある。従って、madv命令によって実行される複数の命令又は操作は、コンパイラ及びスケジューリングハードウェアによって単一のアトミック命令であると見なされる。こうして、連続する依存性madv命令のセットの場合に、第1のmadv命令が、後続の依存性命令が実行パイプラインに入る前に完了するように、命令は順番に実行される。
【0246】
追加の例示的なコンピュータ装置
【0247】
図24は、一実施形態による、グラフィックプロセッサ2404を含むコンピュータ装置2400のブロック図である。コンピュータ装置2400は、
図1のようなデータ処理システム100等のコンピュータ装置とすることができ、
図14に示されるコンポーネントを含むことができる。コンピュータ装置2400はまた、セットトップボックス(例えば、インターネットベースのケーブルテレビセットトップボックス等)、全地球測位システム(GPS)ベースの装置等の通信装置であり得るか、又はその中に含まれ得る。コンピュータ装置2400はまた、携帯電話等のモバイルコンピュータ装置、スマートフォン、携帯情報端末(PDA)、タブレットコンピュータ、ラップトップコンピュータ、電子書籍リーダー、スマートテレビ、テレビプラットフォーム、ウェアラブル装置(メガネ、時計、ブレスレット、スマートカード、ジュエリー、衣料品等)、メディアプレイヤであり得るか、又はその中に含まれ得る。例えば、一実施形態では、コンピュータ装置2400は、システムオンチップ(SoC又はSOC)等の集積回路(IC)を使用するモバイルコンピュータ装置を含み、コンピュータ装置2400の様々なハードウェア及び/又はソフトウェアコンポーネントを単一のチップに集積する。
【0248】
コンピュータ装置2400は、グラフィックプロセッサ2404を含む。グラフィックプロセッサ2404は、本明細書で説明する任意のグラフィックプロセッサを表す。グラフィックプロセッサは、1つ又は複数のグラフィックエンジン、グラフィックプロセッサコア、及び本明細書で説明する他のグラフィック実行リソースを含む。このようなグラフィック実行リソースは、実行ユニット、シェーダーエンジン、フラグメントプロセッサ、頂点プロセッサ、ストリーミングマルチプロセッサ、グラフィックプロセッサクラスタ、或いはグラフィックリソース又は画像リソースの処理、又は異種プロセッサで汎用計算処理を行うのに適したコンピュータリソースの任意のコレクションを含むがこれらに限定されない形式で提示できる。
【0249】
一実施形態では、グラフィックプロセッサ2404は、キャッシュ2414を含み、このキャッシュ2414は、単一のキャッシュ、又は任意の数のL1、L2、L3、又はL4キャッシュ、レンダリングキャッシュ、深度キャッシュ、サンプラーキャッシュ、及び/又はシェーダーユニットキャッシュを含むがこれらに限定されないキャッシュメモリの複数のセグメントに分割することができる。いくつかの実施形態では、グラフィックプロセッサ2404は、共有ローカルメモリ(SLM2434)を含むGPGPUエンジン2444だけでなく、GPGPUエンジン2444によって使用されるレジスタを含むレジスタファイル2424も含む。レジスタファイル2424は、汎用レジスタ、アーキテクチャレジスタ、構成レジスタ、及び他のタイプのレジスタを含むことができる。汎用レジスタファイル(GRF)及び/又はアーキテクチャレジスタファイル(ARF)は、GPGPUエンジン2444内の計算ユニット(例えば、計算2450、計算2455)の1つ又は複数のブロック内の処理リソース内に常駐することもできる。本明細書に記載される乗算/加算/ベクトル(madv)命令のデコード及び実行を可能にすることを含む、例示のコンポーネントが、本明細書に記載される様々な実施形態の技術を提供するために使用され得る。一実施形態では、madv命令の実行は、madv命令を複数の乗算/加算(mad)命令に展開するハードウェアベースのデコード/展開ロジック2442を介して容易にされるが、他の実施形態では、異なる実装手法を使用してもよい。
【0250】
図示のように、一実施形態では、グラフィックプロセッサ2404に加えて、コンピュータ装置2400は、アプリケーションプロセッサ2406、メモリ2408、及び入力/出力(I/O)ソース2410を含むがこれらに限定されない、任意の数及びタイプのハードウェアコンポーネント及び/又はソフトウェアコンポーネントをさらに含み得る。アプリケーションプロセッサ2406は、
図3を参照して示されるように、ハードウェアグラフィックパイプラインと相互作用して、グラフィックパイプライン機能を共有することができる。処理データは、ハードウェアグラフィックパイプラインのバッファに格納され、状態情報はメモリ2408に格納される。結果のデータは、
図3Aの表示装置318等の表示装置を介して出力するために表示コントローラに転送できる。表示装置は、陰極線管(CRT)、薄膜トランジスタ(TFT)、液晶ディスプレイ(LCD)、有機発光ダイオード(OLED)アレイ等の様々なタイプであってもよく、グラフィカルユーザインターフェイスを介してユーザに情報を表示すように構成され得る。
【0251】
アプリケーションプロセッサ2406は、
図1のプロセッサ102等の1つ又は複数のプロセッサを含むことができ、コンピュータ装置2400のオペレーティングシステム(OS)2402を実行するために少なくとも部分的に使用される中央処理装置(CPU)であってよい。OS2402は、コンピュータ装置2400のハードウェア及び/又は物理リソースと1人又は複数のユーザとの間のインターフェイスとして機能することができる。OS2402は、
図10のユーザモードグラフィックドライバ1026及び/又はカーネルモードグラフィックドライバ1029等のグラフィックドライバロジック2422を含む、コンピュータ装置2400内の様々なハードウェア装置のためのドライバロジックを含むことができる。
【0252】
いくつかの実施形態では、グラフィックプロセッサ2404は、アプリケーションプロセッサ2406の一部(物理CPUパッケージの一部等)として存在することがあり得、その場合に、メモリ2408の少なくとも一部は、アプリケーションプロセッサ2406及びグラフィックプロセッサ2404によって共有され得るが、メモリ2408の少なくとも一部は、グラフィックプロセッサ2404専用であってもよく、又はグラフィックプロセッサ2404は、別個のメモリストアを有してもよい。メモリ2408は、バッファ(例えば、フレームバッファ)の事前に割り当てられた領域を含み得る。しかしながら、当業者は、実施形態がそのように限定されず、より下位のグラフィックパイプラインにアクセス可能な任意のメモリを使用してもよいことを理解すべきである。メモリ2408は、グラフィックプロセッサ2404を利用してデスクトップ又は3Dグラフィックシーンをレンダリングするアプリケーションを含む様々な形態のランダムアクセスメモリ(RAM)(例えば、SDRAM、SRAM等)を含み得る。
図1のメモリコントローラ116等のメモリコントローラハブは、メモリ2408内のデータにアクセスし、そのデータをグラフィックパイプライン処理のためにグラフィックプロセッサ2404に転送することができる。メモリ2408は、コンピュータ装置2400内の他のコンポーネントが利用できるようにされ得る。例えば、コンピュータ装置2400の様々なI/Oソース2410から受信した任意のデータ(例えば、入力グラフィックデータ)は、ソフトウェアプログラム又はアプリケーションの実装において1つ又は複数のプロセッサ(例えば、アプリケーションプロセッサ2406)によって処理される前に、メモリ2408に一時的にキューイングすることができる。同様に、ソフトウェアプログラムが、コンピュータシステムインターフェイスのうちの1つを介してコンピュータ装置2400から外部エンティティに送信するか、内部ストレージ要素に保存する必要があると判断したデータは、大抵の場合、送信又は保存される前に、メモリ2408に一時的にキューイングされる。
【0253】
I/Oソースは、タッチスクリーン、タッチパネル、タッチパッド、仮想又は通常のキーボード、仮想又は通常のマウス、ポート、コネクタ、ネットワーク装置等の装置を含むことができ、
図1を参照してプラットフォームコントローラハブを介して取り付けることができる。さらに、I/Oソース2410は、コンピュータ装置2400との間でデータを転送するために実装される(例えば、ネットワーキングアダプタ)、又はコンピュータ装置2400内の大規模な不揮発性ストレージに実装される(例えば、ハードディスクドライブ)ような1つ又は複数のI/O装置を含むことができる。英数字及び他のキーを含むユーザ入力装置を使用して、情報及びコマンド選択をグラフィックプロセッサ2404に通信できる。別のタイプのユーザ入力装置は、方向情報及びコマンド選択をGPUに伝達し、表示装置上のカーソルの動きを制御するマウス、トラックボール、タッチスクリーン、タッチパッド、カーソル方向キー等のカーソルコントロールである。コンピュータ装置2400のカメラ及びマイクロフォンアレイを使用して、ジェスチャを観察し、音声及びビデオを記録し、視覚及び音声コマンドを送受信することができる。
【0254】
ネットワークインターフェイスとして構成されたI/Oソース2410は、LAN、ワイドエリアネットワーク(WAN)、メトロポリタンエリアネットワーク(MAN)、パーソナルエリアネットワーク(PAN)、Bluetooth(登録商標)、クラウドネットワーク、セルラー又はモバイルネットワーク(例えば、第3世代(3G)、第4世代(4G)等)、イントラネット、インターネット等のネットワークへのアクセスを提供することができる。ネットワークインターフェイスは、例えば、1つ又は複数のアンテナを含むワイヤレスネットワークインターフェイスを含むことができる。ネットワークインターフェイスには、例えば、イーサネットケーブル、同軸ケーブル、光ファイバーケーブル、シリアルケーブル、又はパラレルケーブルであり得るネットワークケーブルを介してリモート装置と通信する有線ネットワークインターフェイスも含まれ得る。
【0255】
ネットワークインターフェイスは、例えば、IEEE802.11規格に準拠することにより、LANへのアクセスを提供し得、及び/又は、無線ネットワークインターフェイスは、例えば、Bluetooth(登録商標)規格に準拠することにより、パーソナルエリアネットワークへのアクセスを提供し得る。以前の規格バージョンと後続の規格バージョンとを含む他のワイヤレスネットワークインターフェイス及び/又はプロトコルもサポートされる。ワイヤレスLAN規格を介した通信に加えて、又はその代わりに、ネットワークインターフェイスは、例えば、時分割多元アクセス(TDMA)プロトコル、GSM(Global Systems for Mobile Communications)プロトコル、コード分割、多元接続(CDMA)プロトコル、及び/又は他のタイプのワイヤレス通信プロトコル等を用いてワイヤレス通信を提供し得る。
【0256】
上述の例よりも少なく又は多く装備したシステムは、特定の実施態様にとって好ましい場合があることを理解されたい。従って、コンピュータ装置2400の構成は、価格の制約、性能要件、技術的改善、又は他の状況等の多数の要因に応じて、実装毎に異なり得る。例には、(限定ではなく)モバイル装置、携帯情報端末、モバイルコンピュータ装置、スマートフォン、携帯電話、ハンドセット、一方向ポケットベル、双方向ポケットベル、メッセージング装置、コンピュータ、パーソナルコンピュータ(PC)、デスクトップコンピュータ、ラップトップコンピュータ、ノートブックコンピュータ、ハンドヘルドコンピュータ、タブレットコンピュータ、サーバ、サーバアレイ又はサーバファーム、Webサーバ、ネットワークサーバ、インターネットサーバ、ワークステーション、ミニコンピュータ、メインフレームコンピュータ、スーパーコンピュータ、ネットワーク機器、Web機器、分散型コンピュータシステム、マルチプロセッサシステム、プロセッサベースのシステム、家電製品、プログラム可能な家電製品、テレビ、デジタルテレビ、セットトップボックス、ワイヤレスアクセスポイント、基地局、加入者局、モバイル加入者センター、無線ネットワークコントローラ、ルーター、ハブ、ゲートウェイ、ブリッジ、スイッチ、マシン、又はこれらの組合せが含まれる。
【0257】
実施形態は、ペアレントボード(parent-board)、ハードワイヤードロジック、メモリ装置によって格納され且つマイクロプロセッサによって実行されるソフトウェア、ファームウェア、特定用途向け集積回路(ASIC)、及び/又はフィールドプログラマブルゲートアレイ(FPGA)を用いて相互接続される1つ又は複数のマイクロチップ又は集積回路のうちの任意の1つ又は組合せとして実装され得る。「ロジック(論理)」という用語は、例として、ソフトウェア又はハードウェア、及び/又はソフトウェアとハードウェアとの組合せを含み得る。
【0258】
実施形態は、例えば、機械実行可能命令を格納した1つ又は複数の機械可読媒体を含み得るコンピュータプログラム製品として提供され得、命令がコンピュータ、ネットワークのコンピュータ、又は他の電子装置等の1つ又は複数の機械によって実行されたときに、本明細書で説明する実施形態による動作を行う1つ又は複数の機械をもたらし得る。機械可読媒体には、フロッピーディスク、光ディスク、CD-ROM(コンパクトディスク読み取り専用メモリ)、及び光磁気ディスク、ROM、RAM、EPROM(消去可能なプログラム可能な読み取り専用メモリ)、EEPROM(電気的消去可能、プログラム可能な読み取り専用メモリ)、磁気カード又は光学式カード、フラッシュメモリ、又は機械実行可能な命令を格納するのに適した他のタイプの非一時的な機械可読媒体が含まれるが、これらに限定されるものではない。
【0259】
さらに、実施形態は、コンピュータプログラム製品としてダウンロードすることができ、プログラムは、通信リンク(例えば、モデム及び/又はネットワーク接続)を介して、搬送波又は他の伝播媒体によって具体化及び/又は変調される1つ又は複数のデータ信号によって、リモートコンピュータ(例えば、サーバ)から要求側コンピュータ(例えば、クライアント)に転送することができる。
【0260】
本明細書における「一実施形態」又は「実施形態」への言及は、実施形態に関連して説明する特定の特徴、構造、又は特性が、本発明の少なくとも1つの実施形態に含まれ得ることを意味する。本明細書の様々な場所での「一実施形態では」という句の出現は、必ずしも全てが同じ実施形態を指すとは限らない。以下の図に示されているプロセスは、ハードウェア(例えば、回路、専用ロジック等)、ソフトウェア(非一時的な機械可読記憶媒体の命令として)、又はハードウェアとソフトウェアとの両方の組合せを含む処理ロジックによって実行できる。様々な実施形態を詳細に参照し、それらの例は添付の図面に示される。以下の詳細な説明では、本発明の完全な理解を与えるために、多くの特定の詳細が示されている。しかし、当業者には、本発明がこれらの特定の詳細なしに実施できることが明らかであろう。他の例では、実施形態の態様を不必要に不明瞭にしないように、周知の方法、手順、コンポーネント、回路、及びネットワークは詳細には説明していない。
【0261】
様々な要素を説明するために第1、第2等の用語が本明細書で使用され得るが、これらの要素はこれらの用語によって限定されるべきではないことも理解されよう。これらの用語は、ある要素を別の要素と区別するためにのみ使用される。例えば、本発明の範囲から逸脱することなく、第1の接点を第2の接点と呼ぶことができ、同様に、第2の接点を第1の接点と呼ぶことができる。第1の接点と第2の接点とは両方とも接点であるが、同じ接点ではない。
【0262】
本明細書で使用される用語は、特定の実施形態を説明することのみを目的とし、全ての実施形態に関して限定することを意図するものではない。本発明の説明及び添付の特許請求の範囲で使用される場合に、単数形「1つの(a, an)」、及び「その(the)」は、文脈が他に明確に示さない限り、複数形も含むことを意図する。本明細書で使用される「及び/又は」という用語は、関連する列挙された項目の1つ又は複数のありとあらゆる可能な組合せを指し、包含することも理解されよう。本明細書で使用される場合に、「備える、有する、含む(comprises, comprising)という用語は、述べた特徴、整数、ステップ、動作、要素、及び/又は構成要素の存在を指定するが、1つ又は複数の他の特徴、整数、ステップ、動作、要素、構成要素、及び/又はそれらのグループの存在又は追加を排除しないことがさらに理解されよう。
【0263】
本明細書で使用される場合に、「もし~ならば、の場合に(if)」という用語は、状況に応じて、「とき、場合(when)」又は「~すると(upon)」又は「決定に応答して(in response to determining)」又は「検出に応答して(in response to detecting)」を意味すると解釈され得る。同様に、「~と決定(判定)されたとき(場合)」又は「(指定された条件又はイベント)が検出されたとき(場合)」という句は、状況に応じて、「決定(判定)すると」又は「決定(判定)に応答して」又は「(指定された条件又はイベント)を検出すると」又は「(指定された条件又はイベント)を検出することに応答して」を意味すると解釈され得る。
【0264】
本明細書で説明する実施形態は、スパース入力のための自動ゼロスキップを伴うベクトル乗算加算命令を可能にするための命令及び関連するロジックを提供する。以下の節及び/又は例は、その特定の実施形態又は例に関する。実施例の詳細は、1つ又は複数の実施形態のどこでも使用することができる。異なる実施形態又は例の様々な特徴は、様々な異なる用途に適合するように含まれるいくつかの特徴及び除外される他の特徴と様々に組み合わせることができる。例は、方法、方法の動作を行うための手段、機械によって実行されると機械に本明細書で説明する実施形態及び例による方法又は装置又はシステムの動作を実行させる命令を含む少なくとも1つの機械可読媒体等の主題を含み得る。様々な構成要素は、説明した動作又は機能を実行するための手段であり得る。
【0265】
一実施形態は、述語マスク、繰返し回数、及び初期オペランドのセットを有するハードウェアマクロ命令をフェッチするステップを含む方法を実行するロジックを含む汎用グラフィックプロセッサを提供し、初期オペランドはデスティネーションオペランド及び複数のソースオペランド(例えば、<src0>、<src1>、<src2>)を含む。繰返し回数は、ハードウェア命令のセットに対して生成するハードウェア命令の最大数を示す。述語マスクは、命令セット内のどの命令を生成又はバイパスするかを示す。述語マスクは、ゼロとソース入力オペランド(例えば、<src2>)に関連付けられた各要素との間の比較によって生成できる。ハードウェアマクロ命令は、行列のセットに関連付けられた入力データに対して1回以上の乗算及び加算演算を行うように構成される。
【0266】
この方法はさらに、命令デコードロジックを介してハードウェアマクロ命令をデコードするステップを含む。ハードウェアマクロ命令をデコードするステップは、実行のために生成するハードウェア命令のセットを決定するステップと、命令のセット内の命令を生成するステップとを含む。生成する命令の数及び特定の命令は、繰返し回数及び述語マスクに基づいて決定できる。特定の命令反復の生成をスキップする必要があることを述語マスクが示していない限り、ハードウェア命令は、繰返し回数の指定された反復毎に生成される。この方法はさらに、生成された命令によって使用されるオペランドを生成することを含む。生成されたオペランドは、レジスタ又はサブレジスタのブロック内の単に連続する(successive)及び規則的に連続する(consecutive)レジスタ又はサブレジスタを指定でき、レジスタ及びサブレジスタのストライドは、命令のSIMDサイズ及びレジスタのサイズに基づいて決定される。この方法は、命令のセット内の各命令の実行が完了したときに、命令のセットをアトミックに実行し、ハードウェアマクロ命令をリタイアさせることをさらに含む。一実施形態では、ハードウェア命令のセットは、1つ又は複数のハードウェア命令を含み、1つ又は複数のハードウェア命令のそれぞれは、処理リソースに、乗算及び加算演算を単一のサイクルで実行させる。1つ又は複数のハードウェア命令のそれぞれが、単一のサイクルで複数のデータ要素に対して乗算及び加算演算を行う。
【0267】
追加の実施形態は、上記の方法を実行するためのグラフィック処理ロジックを提供する。追加の実施形態は、上記のグラフィック処理ロジックを含むデータ処理システムも含む。上記の技法は、本明細書で説明しているグラフィック又は並列プロセッサアーキテクチャのいずれかに統合又は適合させることができる。当業者は、前述の説明から、実施形態の幅広い技術が様々な形態で実施され得ることを理解するであろう。従って、実施形態についてその特定の例に関連して説明したが、実施形態の真の範囲は、他の修正が、図面、明細書、及び以下の特許請求の範囲を検討すると当業者に明らかになるため、そのように限定すべきではない。