(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2025-03-17
(45)【発行日】2025-03-26
(54)【発明の名称】ベクトル正規化のための単一の命令セットアーキテクチャ(ISA)命令の使用
(51)【国際特許分類】
G06F 17/16 20060101AFI20250318BHJP
G06F 9/38 20180101ALI20250318BHJP
G06F 15/80 20060101ALI20250318BHJP
【FI】
G06F17/16 K
G06F9/38 310G
G06F9/38 370C
G06F15/80
【外国語出願】
(21)【出願番号】P 2020159659
(22)【出願日】2020-09-24
【審査請求日】2023-09-21
(32)【優先日】2019-11-15
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】593096712
【氏名又は名称】インテル コーポレイション
(74)【代理人】
【識別番号】100107766
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【氏名又は名称】伊東 忠彦
(74)【代理人】
【識別番号】100135079
【氏名又は名称】宮崎 修
(72)【発明者】
【氏名】アビシェク リシーケサン
(72)【発明者】
【氏名】スプラティム パル
(72)【発明者】
【氏名】シャシャンク ラクシュミナラヤナ
(72)【発明者】
【氏名】スブラマニアム マイユラン
【審査官】三坂 敏夫
(56)【参考文献】
【文献】特開2012-069116(JP,A)
【文献】特開2008-077663(JP,A)
【文献】特開2011-227908(JP,A)
【文献】松村 聖司 他,kd-treeにより構造化された大規模高次元ベクトル群に対するGPUを用いた高速最近傍探索法の検討,情報処理学会研究報告,一般社団法人情報処理学会,2012年04月15日,第1頁-第8頁
(58)【調査した分野】(Int.Cl.,DB名)
G06F 17/00-17/18
G06F 9/38
G06F 15/80
(57)【特許請求の範囲】
【請求項1】
方法であって、当該方法は、
V個のベクトルのセットの各ベクトルに対して行うべきベクトル正規化処理を指定する単一の命令のグラフィック処理装置(GPU)による受け取りに応答して、
前記GPUの第1の処理装置
が、V個のベクトルのセットのうちの1つのベクトルの2乗長さをそれぞれ表すV個の2乗長さ値を生成することであり、前記V個のベクトルのセットのうちのN個のベクトルの複数の成分ベクトルをそれぞれ表し、且つV/N個のレジスタの第1のセットのそれぞれのレジスタに格納されるNセットの入力毎に、前記Nセットの入力に対してN個の並列ドット積演算を行うことにより、N個の2乗長さ値を一度に生成するステップと、
前記GPUの第2の処理装置
が、前記V個のベクトルのセットのうちの1つのベクトルの複数の正規化成分ベクトルをそれぞれ表すVセットの出力を生成することであり、前記V個の2乗長さ値のうちのN個の2乗長さ値毎に、前記N個の2乗長さ値に対してN個の並列演算を行うことにより、Nセットの出力を一度に生成するステップと、を含み、
前記N個の並列演算のそれぞれが、逆平方根関数とベクトルスケーリング関数との組合せを実行
し、
前記第1の処理装置は浮動小数点ユニット(FPU)を含み、前記第2の処理装置はコプロセッサを含む、
方法。
【請求項2】
前記GPUの第2の処理装置
が、前記Vセットの出力を生成することは、V/N個のレジスタの第2セットのそれぞれのレジスタに、一度にNセットの出力ずつ前記Vセットの出力を格納する、請求項1に記載の方法。
【請求項3】
Vは8であり、Nは2である、請求項1又は2に記載の方法。
【請求項4】
前記V/N個のレジスタの第1のセットは4個の256ビットレジスタを含み、前記複数の成分ベクトルは3つの32ビット成分ベクトルを含む、請求項1乃至3のいずれか一項に記載の方法。
【請求項5】
前記V/N個のレジスタの第2セットは4個の256ビットレジスタを含み、前記複数の正規化成分ベクトルは3つの32ビット正規化成分ベクトルを含む、請求項1乃至4のいずれか一項に記載の方法。
【請求項6】
前記N個の並列ドット積演算は、2ワイド単一命令複数データ(SIMD)ドット積命令により生じる、請求項1乃至3のいずれか一項に記載の方法。
【請求項7】
前記N個の並列演算は、2ワイド単一命令複数データ(SIMD)命令により生じる、請求項1乃至3のいずれか一項に記載の方法。
【請求項8】
前記逆平方根関数は、オペランドに対して単精度逆平方根演算を行うことを含み、該演算には、
前記オペランドの指数成分に対して逆平方根演算を行うこと、
前記オペランドの仮数成分に対して逆平方根演算を行うことであって、該演算には、
前記仮数成分を第1のサブ成分と第2のサブ成分とに分割すること、
前記第1のサブ成分の前記逆平方根演算の結果を決定すること、及び
前記第2のサブ成分の前記逆平方根演算の結果を決定することが含まれる、前記前記オペランドの仮数成分に対して逆平方根演算を行うこと、及び
前記逆平方根演算の結果を返すことが含まれる、請求項1乃至3のいずれか一項に記載の方法。
【請求項9】
グラフィック処理装置(GPU)であって、該GPUは、
V/N個のレジスタの第1のセットと、
該V/N個のレジスタの第1のセットに結合された第1の処理装置と、
前記V/N個のレジスタの第1のセットに結合された第2の処理装置と、
V個のベクトルのセットの各ベクトルに対して行うべきベクトル正規化処理を指定する単一の命令の受け取りに応答して、(i)前記第1の処理装置によって行うべきV/N回のNワイド単一命令複数データ(SIMD)ドット積演算を発し、及び(ii)前記第2の処理装置によって行うべき逆平方根関数とベクトルスケーリング関数との組合せを実行するV/N回のNワイド単一命令複数データ(SIMD)演算を発するように動作可能な実行ユニットと、を含み、
前記第1の処理装置は、前記V個のベクトルのセットのうちの1つのベクトルの2乗長さをそれぞれ表すV個の2乗長さ値を生成するように動作可能であり、前記V個のベクトルのセットのうちのN個のベクトルの複数の成分ベクトルをそれぞれ表し、且つ前記V/N個のレジスタの第1のセットのそれぞれのレジスタに格納されるNセットの入力毎に、前記V/N回のNワイドSIMDドット積演算の1つを行うことにより、N個の2乗長さ値を一度に生成するように動作可能であり、
前記第2の処理装置は、前記V個のベクトルのセットのうちの1つのベクトルの複数の正規化成分ベクトルをそれぞれ表すVセットの出力を生成するように動作可能であり、前記V個の2乗長さ値のうちのN個の2乗長さ値毎に、前記V/N回のNワイドSIMD演算の1つを行うことにより、Nセットの出力を一度に生成するように動作可能であ
り、
前記第1の処理装置は浮動小数点ユニット(FPU)を含み、前記第2の処理装置はコプロセッサを含む、
GPU。
【請求項10】
V/N個のレジスタの第1のセットをさらに含み、前記Vセットの出力は、前記V/N個のレジスタの第2セットのそれぞれのレジスタに、一度にNセットの出力ずつ格納される、請求項
9に記載のGPU。
【請求項11】
Vは8であり、Nは2である、請求項
9又は
10に記載のGPU。
【請求項12】
前記V/N個のレジスタの第1のセットは4個の256ビットレジスタを含み、前記複数の成分ベクトルは3つの32ビット成分ベクトルを含む、請求項
9乃至
11のいずれか一項に記載のGPU。
【請求項13】
前記V/N個のレジスタの第2セットは4個の256ビットレジスタを含み、前記複数の正規化成分ベクトルは3つの32ビット正規化成分ベクトルを含む、請求項
9乃至
12のいずれか一項に記載のGPU。
【請求項14】
前記逆平方根関数は、オペランドに対して単精度逆平方根演算を行うことを含み、該演算には、
前記オペランドの指数成分に対して逆平方根演算を行うこと、
前記オペランドの仮数成分に対して逆平方根演算を行うことであって、該演算には、
前記仮数成分を第1のサブ成分と第2のサブ成分とに分割すること、
前記第1のサブ成分の前記逆平方根演算の結果を決定すること、及び
前記第2のサブ成分の前記逆平方根演算の結果を決定することが含まれる、前記オペランドの仮数成分に対して逆平方根演算を行うこと、及び
前記逆平方根演算の結果を返すことが含まれる、請求項
9乃至
11のいずれか一項に記載のGPU。
【請求項15】
前記第1のサブ成分の値を決定することは、前記第1のサブ成分の初期推定値を決定すること、及び前記第1のサブ成分の実際の値と前記第1のサブ成分の前記初期推定値との間の差を決定することを含む、請求項
14に記載のGPU。
【請求項16】
前記初期推定値を決定することは、線形補間を行うことを含む、請求項
15に記載のGPU。
【請求項17】
前記第1のサブ成分の前記実際の値と前記第1のサブ成分の前記初期推定値との間の前記差は、区分的線形近似を介して決定される、請求項
15又は
16に記載のGPU。
【請求項18】
前記第1及び第2のサブ成分についての前記逆平方根演算の結果を決定することは、並行して実行される、請求項
14乃至
17のいずれか一項に記載のGPU。
【発明の詳細な説明】
【技術分野】
【0001】
本明細書で説明する実施形態は、概して、グラフィック処理装置(GPU)及びグラフィック命令セットアーキテクチャ(ISA)の分野に関し、より具体的には、ベクトル正規化の実行のためのクロックサイクル数を削減する改良したベクトル正規化命令に関する。
【背景技術】
【0002】
グラフィック処理装置(GPU)は、シェーダーコードを処理するために複数のタイプの命令を使用する。ベクトルの正規化の必要性は、方向ベクトルの計算、表面の法線の計算、物理/衝突、影の深度及び周囲の深度の計算、幾何学的変換、照明、反射、法線マッピング、バンプマッピング等を含むシナリオを処理するための3次元(3D)ゲーム及び他の3Dグラフィックアプリケーションの文脈で頻繁に発生する。グラフィックアプリケーションプログラミングインターフェイス(API)に応じて、ベクトルの正規化は、3つの演算(つまり、Microsoft DirectX APIでのドット積、逆平方根、ベクトルスケーリング)、又は単一の演算(つまり、OpenGL APIでの正規化処理)によって表され得る。ISAレベルでは、ベクトルの正規化は7つの命令で表すことができる。
・ドット積(SIMD8):MUL、MAD、MAD;
・逆平方根(SIMD8):数学;
・ベクトルスケーリング(SIMD8):MUL、MUL、MUL。
【0003】
業界標準での上位3つのピクセルシェーダーの(グラフィックハードウェアの消費時間の観点からの)静的解析と、Kishonti InformaticsのGFXBenchのManhattanや、ULの3DMark11のような卓越したベンチマークとが、ベクトルの正規化処理に関連して、ManhattanのOpenGL API命令の21%、及び3DMark11の4つのサブテストにおけるMicrosoft DirectX API命令の8%、8%、11%、及び6%を示している。そのため、ベクトル正規化処理を実行するためのクロックサイクル数の削減は、ピクセルシェーダーのパフォーマンスだけでなく、頂点シェーダー、計算シェーダー、場合によっては幾何学シェーダー、ハルシェーダー、ドメインシェーダーにも大きなプラスの影響を与えるだろう。
【図面の簡単な説明】
【0004】
本明細書で説明する実施形態は、添付図面の図において、限定としてではなく、例として示され、添付図面では、同様の参照符号が同様の要素を指す。
【
図1】一実施形態による、処理システムのブロック図である。
【
図2A】いくつかの実施形態による、コンピュータシステム及びグラフィックプロセッサを示す図である。
【
図2B】いくつかの実施形態による、コンピュータシステム及びグラフィックプロセッサを示す図である。
【
図2C】いくつかの実施形態による、コンピュータシステム及びグラフィックプロセッサを示す図である。
【
図2D】いくつかの実施形態による、コンピュータシステム及びグラフィックプロセッサを示す図である。
【
図3A】いくつかの実施形態による、追加のグラフィックプロセッサ及び計算アクセラレータアーキテクチャのブロック図である。
【
図3B】いくつかの実施形態による、追加のグラフィックプロセッサ及び計算アクセラレータアーキテクチャのブロック図である。
【
図3C】いくつかの実施形態による、追加のグラフィックプロセッサ及び計算アクセラレータアーキテクチャのブロック図である。
【
図4】いくつかの実施形態による、グラフィックプロセッサのグラフィック処理エンジンのブロック図である。
【
図5A】いくつかの実施形態による、グラフィックプロセッサコアで使用される処理要素のアレイを含むスレッド実行ロジックを示す図である。
【
図5B】いくつかの実施形態による、グラフィックプロセッサコアで使用される処理要素のアレイを含むスレッド実行ロジックを示す図である。
【
図6】一実施形態による、追加の実行ユニットを示す図である。
【
図7】いくつかの実施形態による、グラフィックプロセッサの命令フォーマットを示すブロック図である。
【
図8】グラフィックプロセッサの別の実施形態のブロック図である。
【
図9A】いくつかの実施形態による、グラフィックプロセッサのコマンドフォーマットを示すブロック図である。
【
図9B】一実施形態による、グラフィックプロセッサのコマンドシーケンスを示すブロック図である。
【
図10】いくつかの実施形態による、データ処理システムのための例示的なグラフィックソフトウェアアーキテクチャを示す図である。
【
図11A】一実施形態による、動作を実行するための集積回路を製造するために使用され得るIPコア開発システムを示すブロック図である。
【
図11B】いくつかの実施形態による、集積回路パッケージアセンブリの側断面図である。
【
図11C】一実施形態による、基板に接続されたハードウェア論理チップレットの複数のユニットを含むパッケージアセンブリを示す図である。
【
図11D】一実施形態による、交換可能なチップレットを含むパッケージアセンブリを示す図である。
【
図12】一実施形態による、1つ又は複数のIPコアを用いて製造され得るチップ集積回路上の例示的なシステムを示すブロック図である。
【
図13A】いくつかの実施形態による、SoC内で使用するための例示的なグラフィックプロセッサを示すブロック図である。
【
図13B】いくつかの実施形態による、SoC内で使用するための例示的なグラフィックプロセッサを示すブロック図である。
【
図14】ベクトル正規化処理の実行に含まれる3つのステップを概念的に示す図である。
【
図15】一実施形態による、GPUのシェーダーユニットの高レベルの簡略化されたビューを示すブロック図である。
【
図16】MUL、MAD、及びRSQ命令を用いたベクトル正規化処理のスループットを示す図である。
【
図17】一実施形態による、SIMD8 DP3演算を行うために、SIMD2 DP3演算のための2セットの入力及び2つの出力を4個のレジスタに格納するためのレジスタレイアウトを示す図である。
【
図18】一実施形態による、SIMD8 RSQVS演算を行うために、SIMD2 RSQVS演算のための2セットの出力を4個のレジスタに格納するためのレジスタレイアウトを示す図である。
【
図19】一実施形態によるベクトル正規化処理を示すフロー図である。
【
図20】一実施形態による、DP3及びRSQVS命令を用いるベクトル正規化処理のスループットを示す図である。
【
図21A】一実施形態による、チップ集積回路上のシステムの追加の例示的なグラフィックプロセッサを示すブロック図である。
【
図21B】一実施形態による、チップ集積回路上のシステムの追加の例示的なグラフィックプロセッサを示すブロック図である。
【
図22】コンピュータ装置の一実施形態を示す図である。
【
図23】単精度浮動小数点フォーマットの一実施形態を示す図である。
【
図24】浮動小数点拡張数学演算を行うためのプロセスの一実施形態を示すフロー図である。
【
図25】仮数に対して浮動小数点拡張数学演算を行うためのプロセスの一実施形態を示すフロー図である。
【
図27】最上位ビット平方根と初期推定値との間の差のグラフである。
【
図28】
図27のグラフからの拡大された線形セグメントを示す図である。
【
図29】ルックアップテーブルエントリへのインデックスのグラフである。
【発明を実施するための形態】
【0005】
本明細書で説明する実施形態は、概して、ベクトル正規化の実行のためのクロックサイクル数を削減する改良したベクトル正規化命令を対象とする。
【0006】
図14~
図30を参照して以下でさらに詳細に説明する一実施形態によれば、V個のベクトルに対して行うべきベクトル正規化処理を指定する命令(例えば、VNM)を、ISAを介して公開することができる。グラフィック処理装置(GPU)によるVNM命令の受け取りに応答して、GPUの第1の処理装置によって、V個のベクトルのセットのうちの1つのベクトルの2乗長さをそれぞれ表すV個の2乗長さ値を生成することであり、V個のベクトルのセットのうちのN個のベクトルに対する複数の成分ベクトルをそれぞれ表し、且つV/N個のレジスタの第1のセットのそれぞれのレジスタに格納されるNセットの入力毎に、Nセットの入力に対してN個の並列ドット積演算を行うことにより、N個の2乗長さ値を一度に生成される。GPUの第2の処理装置によって、V個のベクトルのセットのうちの1つのベクトルの複数の正規化成分ベクトルをそれぞれ表すVセットの出力を生成することであり、V個の2乗長さ値のうちのN個の2乗長さ値毎に、N個の2乗長さ値に対してN個の並列演算を行うことにより、Nセットの出力を一度に生成され、N個の並列演算のそれぞれが、逆平方根関数とベクトルスケーリング関数との組合せを実行する。
【0007】
システムの概要
【0008】
図1は、一実施形態による、処理システム100のブロック図である。システム100は、シングルプロセッサデスクトップシステム、マルチプロセッサワークステーションシステム、或いは多数のプロセッサ102又はプロセッサコア107を有するサーバシステムで使用することができる。一実施形態では、システム100は、ローカル又はワイドエリアネットワークへの有線又は無線接続を伴うモノのインターネット(IoT)装置内等のモバイル、ハンドヘルド、又は埋込み型装置で使用するために、システムオンチップ(SoC)集積回路内に組み込まれた処理プラットフォームである。
【0009】
一実施形態では、システム100は、サーバベースのゲームプラットフォーム、ゲームを含むゲームコンソール及びメディアコンソール、モバイルゲームコンソール、ハンドヘルドゲームコンソール、又はオンラインゲームコンソールを含むか、それに結合するか、又はその中に統合することができる。いくつかの実施形態では、システム100は、携帯電話、スマートフォン、タブレットコンピュータ装置、又は内部記憶容量が少ないラップトップ等のモバイルインターネット接続装置の一部である。処理システム100はまた、スマートウォッチウェアラブル装置等のウェアラブル装置;現実世界の視覚、音声、又は触覚体験を補完するために視覚、音声、又は触覚出力を提供し、或いは他にテキスト、音声、グラフィック、ビデオ、ホログラフィック画像又はビデオ、又は触覚フィードバックを提供する拡張現実(AR)又は仮想現実(VR)機能で強化されたスマートアイウェア又は衣服;他の拡張現実(AR)装置;又は他の仮想現実(VR)装置を含むか、それと結合するか、又はその中に統合することができる。いくつかの実施形態では、処理システム100は、テレビ又はセットトップボックス装置を含むか、又はその一部である。一実施形態では、システム100は、バス、トラクタトレーラー、自動車、モータサイクル又は電力サイクル、飛行機又はグライダー(又は、これらの任意の組合せ)等の自動運転車両を含むか、それに結合するか、又はその中に統合することができる。自動運転車両は、システム100を使用して、車両の周囲で感知された環境を処理することができる。
【0010】
いくつかの実施形態では、1つ又は複数のプロセッサ102はそれぞれ、実行時にシステム又はユーザソフトウェアの動作を行う命令を処理するための1つ又は複数のプロセッサコア107を含む。いくつかの実施形態では、1つ又は複数のプロセッサコア107のうちの少なくとも1つが、特定の命令セット109を処理するように構成される。いくつかの実施形態では、命令セット109は、複合命令セットコンピューティング(CISC)、縮小命令セットコンピューティング(RISC)、又は超長命令語(VLIW)を介した計算を容易にし得る。1つ又は複数のプロセッサコア107は、他の命令セットのエミュレーションを容易にするための命令を含み得る、異なる命令セット109を処理し得る。プロセッサコア107は、デジタル信号プロセッサ(DSP)等の他の処理装置も含み得る。
【0011】
いくつかの実施形態では、プロセッサ102は、キャッシュメモリ104を含む。アーキテクチャに応じて、プロセッサ102は、単一の内部キャッシュ又は複数のレベルの内部キャッシュを有することができる。いくつかの実施形態では、キャッシュメモリは、プロセッサ102の様々なコンポーネントの間で共有される。いくつかの実施形態では、プロセッサ102は、外部キャッシュ(例えば、レベル3(L3)キャッシュ又はラストレベルキャッシュ(LLC))(図示せず)も使用し、このキャッシュは、既知のキャッシュコヒーレンシ技術を用いてプロセッサコア107の間で共有することができる。レジスタファイル106は、プロセッサ102にさらに含まれ得、且つ異なるタイプのデータを格納するための異なるタイプのレジスタ(例えば、整数レジスタ、浮動小数点レジスタ、状態レジスタ、及び命令ポインタレジスタ)を含み得る。いくつかのレジスタは、汎用レジスタであり得るが、他のレジスタは、プロセッサ102の設計に固有であり得る。
【0012】
いくつかの実施形態では、1つ又は複数のプロセッサ102は、1つ又は複数のインターフェイスバス110に結合され、プロセッサ102とシステム100内の他のコンポーネントとの間でアドレス、データ、又は制御信号等の通信信号を送信する。一実施形態では、インターフェイスバス110は、ダイレクトメディアインターフェイス(DMI)バスのバージョン等のプロセッサーバスとすることができる。ただし、プロセッサーバスは、DMIバスに限定されず、1つ又は複数の周辺コンポーネント相互接続バス(例えば、PCI、PCIエクスプレス)、メモリバス、又は他のタイプのインターフェイスバスを含み得る。一実施形態では、プロセッサ102は、集積メモリコントローラ116及びプラットフォームコントローラハブ130を含む。メモリコントローラ116は、メモリ装置とシステム100の他のコンポーネントとの間の通信を容易にする一方、プラットフォームコントローラハブ(PCH)130は、ローカルI/Oバスを介したI/O装置への接続を提供する。
【0013】
メモリ装置120は、ダイナミックランダムアクセスメモリ(DRAM)装置、スタティックランダムアクセスメモリ(SRAM)装置、フラッシュメモリ装置、相変化メモリ装置、又はプロセスメモリとして機能するための適切な性能を有する他の何らかのメモリ装置であり得る。一実施形態では、メモリ装置120は、システム100のシステムメモリとして動作して、1つ又は複数のプロセッサ102がアプリケーション又はプロセスを実行するときに使用するデータ122及び命令121を格納することができる。メモリコントローラ116は、プロセッサ102内の1つ又は複数のグラフィックプロセッサ108と通信して、グラフィック及びメディア処理を行い得るオプションの外部グラフィックプロセッサ118とも結合する。いくつかの実施形態では、グラフィック、メディア、又は計算処理は、グラフィック、メディア、又は計算処理の特殊なセットを実行するように構成できるコプロセッサであるアクセラレータ112によって支援され得る。例えば、一実施形態では、アクセラレータ112は、機械学習又は計算処理を最適化するために使用される行列乗算アクセラレータである。一実施形態では、アクセラレータ112は、グラフィックプロセッサ108と連携して光線追跡処理(ray-tracing operations)を行うために使用できる光線追跡アクセラレータである。一実施形態では、外部アクセラレータ119は、アクセラレータ112の代わりに、又はアクセラレータ112と連携して使用され得る。
【0014】
いくつかの実施形態では、表示装置111は、プロセッサ102に接続することができる。表示装置111は、モバイル電子装置又はラップトップ装置又は表示インターフェイス(例えば、DisplayPort等)を介して取り付けられる外部表示装置のように、1つ又は複数の内部表示装置であってもよい。一実施形態では、表示装置111は、仮想現実(VR)アプリケーション又は拡張現実(AR)アプリケーションで使用するための立体表示装置等のヘッドマウントディスプレイ(HMD)とすることができる。
【0015】
いくつかの実施形態では、プラットフォームコントローラハブ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入力装置等の入力装置を接続することもできる。
【0016】
示されているシステム100は、例示的であり、異なるように構成された他のタイプのデータ処理システムも使用できるので、限定ではないことを理解されたい。例えば、メモリコントローラ116及びプラットフォームコントローラハブ130のインスタンスは、外部グラフィックプロセッサ118等の別個の外部グラフィックプロセッサに統合され得る。一実施形態では、プラットフォームコントローラハブ130及び/又はメモリコントローラ116は、1つ又は複数のプロセッサ102の外部にあってもよい。例えば、システム100は、外部メモリコントローラ116及びプラットフォームコントローラハブ130を含むことができ、これらは、プロセッサ102と通信するシステムチップセット内のメモリコントローラハブ及び周辺コントローラハブとして構成してもよい。
【0017】
例えば、回路基板(スレッド)を使用することができ、その上に、CPU、メモリ、及び他のコンポーネント等のコンポーネントが配置され、熱性能を高めるように設計されている。いくつかの例では、プロセッサ等の処理コンポーネントはスレッドの上面に配置される一方、DIMM等のニアメモリ(near memory)はスレッドの下面に配置される。この設計によって強化されたエアフローの結果として、コンポーネントは、典型的なシステムよりも高い周波数及び電力レベルで動作し、それによりパフォーマンスを向上させることができる。さらに、スレッドは、ラック内の電源ケーブル及びデータ通信ケーブルと盲目的に嵌合するように構成され、それにより迅速に取り外し、アップグレード、再インストール、及び/又は交換する能力が高まる。同様に、スレッドに配置されたプロセッサ、アクセラレータ、メモリ、データストレージドライブ等の個々のコンポーネントは、互いの間隔が広がるため、容易にアップグレードできるように構成される。例示的な実施形態では、コンポーネントは、それらの真正性を証明するためにハードウェア認証機能をさらに含む。
【0018】
データセンターは、イーサネット及びオムニパスを含む複数の他のネットワークアーキテクチャをサポートする単一のネットワークアーキテクチャ(ファブリック)を利用することができる。スレッドは、典型的なツイストペアケーブル(例えば、カテゴリ5、カテゴリ5E、カテゴリ6等)よりも高い帯域幅及び低レイテンシを提供する光ファイバーを介してスイッチに接続できる。高帯域幅、低レイテンシの相互接続、及びネットワークアーキテクチャにより、データセンターは、使用中に、メモリ、アクセラレータ(例えば、GPU、グラフィックアクセラレータ、FPGA、ASIC、ニューラルネットワーク、及び/又は人工知能アクセラレータ等)、及び物理的に集約解除されたデータストレージドライブ等のリソースをプールし、必要に応じてこれらをコンピュータリソース(プロセッサ等)に提供し、コンピュータリソースが、ローカルであるかのようにプールされたリソースにアクセスできるようにする。
【0019】
電源又は電力源は、電圧及び/又は電流を、システム100又は本明細書で説明する任意のコンポーネント又はシステムに供給することができる。一例では、電源は、壁のコンセントに差し込むためのACからDC(交流から直流)へのアダプタを含む。そのようなAC電力は、再生可能エネルギー(例えば、太陽光発電)電源であり得る。一例では、電源は、外部AC-DCコンバータ等のDC電源を含む。一例では、電源又は電力源は、充電場への近接によって充電するワイヤレス充電ハードウェアを含む。一例では、電源は、内部バッテリ、交流電源、運動ベースの電源、太陽光電源、又は燃料電池電源を含むことができる。
【0020】
図2A~
図2Dは、本明細書で説明する実施形態によって提供されるコンピュータシステム及びグラフィックプロセッサを示す。本明細書の他の図の要素と同じ参照符号(又は名前)を有する
図2A~
図2Dの要素は、本明細書の他の場所で説明しているのと同様の方法で動作又は機能できるが、それに限定されるものではない。
【0021】
図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との間のコヒーレンシを維持する。
【0022】
いくつかの実施形態では、プロセッサ200はまた、1つ又は複数のバスコントローラユニット216及びシステムエージェントコア210のセットを含み得る。1つ又は複数のバスコントローラユニット216は、1つ又は複数のPCI又はPCIエクスプレスバス等の周辺バスのセットを管理する。システムエージェントコア210は、様々なプロセッサコンポーネントに管理機能を提供する。いくつかの実施形態では、システムエージェントコア210は、様々な外部メモリ装置(図示せず)へのアクセスを管理するための1つ又は複数の集積メモリコントローラ214を含む。
【0023】
いくつかの実施形態では、プロセッサコア202A~202Nのうちの1つ又は複数は、同時マルチスレッディングのサポートを含む。そのような実施形態では、システムエージェントコア210は、マルチスレッド処理中にコア202A~202Nを調整及び操作するためのコンポーネントを含む。システムエージェントコア210は、プロセッサコア202A~202N及びグラフィックプロセッサ208の電力状態を調整するためのロジック及びコンポーネントを含む電力制御ユニット(PCU)をさらに含み得る。
【0024】
いくつかの実施形態では、プロセッサ200は、グラフィック処理操作を行うためのグラフィックプロセッサ208をさらに含む。いくつかの実施形態では、グラフィックプロセッサ208は、共有キャッシュユニット206のセットと、1つ又は複数の集積メモリコントローラ214を含むシステムエージェントコア210と結合する。いくつかの実施形態では、システムエージェントコア210は、グラフィックプロセッサの出力を1つ又は複数の結合されたディスプレイに駆動する表示コントローラ211も含む。いくつかの実施形態では、表示コントローラ211はまた、少なくとも1つの相互接続を介してグラフィックプロセッサと結合された別個のモジュールであってもよく、又はグラフィックプロセッサ208内に統合してもよい。
【0025】
いくつかの実施形態では、リングベースの相互接続ユニット212は、プロセッサ200の内部コンポーネントを結合するために使用される。しかしながら、ポイントツーポイント相互接続、スイッチ相互接続、又は当技術分野で周知の技術を含む他の技術等の代替の相互接続ユニットを使用してもよい。いくつかの実施形態では、グラフィックプロセッサ208は、I/Oリンク213を介してリング相互接続212と結合する。
【0026】
例示的なI/Oリンク213は、様々なプロセッサコンポーネントとeDRAMモジュール等の高性能埋込み型メモリモジュール218との間の通信を容易にするオンパッケージI/O相互接続を含む、I/O相互接続の複数の種類のうちの少なくとも1つを表す。いくつかの実施形態では、プロセッサコア202A~202N及びグラフィックプロセッサ208のそれぞれは、埋込み型メモリモジュール218を共有ラストレベルキャッシュとして使用することができる。
【0027】
いくつかの実施形態では、プロセッサコア202A~202Nは、同じ命令セットアーキテクチャを実行する同種(homogeneous)のコアである。別の実施形態では、プロセッサコア202A~202Nは、命令セットアーキテクチャ(ISA)に関して異種(heterogeneous)であり、プロセッサコア202A~202Nのうちの1つ又は複数が第1の命令セットを実行する一方、他のコアのうちの少なくとも1つが、第1の命令セット又は別の命令セットのサブセットを実行する。一実施形態では、プロセッサコア202A~202Nは、マイクロアーキテクチャに関して異種であり、電力消費が比較的高い1つ又は複数のコアが、電力消費が低い1つ又は複数の電力コアと結合する。一実施形態では、プロセッサコア202A~202Nは、計算能力に関して異種である。さらに、プロセッサ200は、1つ又は複数のチップ上で、又は他のコンポーネントに加えて、例示されたコンポーネントを有するSoC集積回路として実装することができる。
【0028】
図2Bは、本明細書で説明するいくつかの実施形態による、グラフィックプロセッサコア219のハードウェアロジックのブロック図である。本明細書の他の図の要素と同じ参照符号(又は名前)を有する
図2Bの要素は、本明細書の他の場所で説明しているのと同様の方法で動作又は機能できるが、それに限定されるものではない。コアスライスと呼ばれることもあるグラフィックプロセッサコア219は、モジュール式グラフィックプロセッサ内の1つ又は複数のグラフィックコアとすることができる。グラフィックプロセッサコア219は、1つのグラフィックコアスライスの例であり、本明細書で説明するグラフィックプロセッサは、目標電力及び性能エンベロープに基づいた複数のグラフィックコアスライスを含み得る。各グラフィックプロセッサコア219は、汎用及び固定機能(function:関数)ロジックのモジュール式ブロックを含む、サブスライスとも呼ばれる複数のサブコア221A~221Fと結合された固定機能ブロック230を含むことができる。
【0029】
いくつかの実施形態では、固定機能ブロック230は、例えば、より低い性能及び/又はより低い電力のグラフィックプロセッサ実装において、グラフィックプロセッサコア219の全てのサブコアによって共有され得る幾何学/固定機能パイプライン231を含む。様々な実施形態において、幾何学/固定機能パイプライン231は、3D固定機能パイプライン(例えば、以下で説明する
図3及び
図4における3Dパイプライン312)、ビデオフロントエンドユニット、スレッド生成器(spawner)及びスレッドディスパッチャ、統合リターン(unified return)バッファマネージャ(例えば、以下で説明するように、
図4の統合リターンバッファ418)を管理する統合リターンバッファマネージャを含む。
【0030】
一実施形態では、固定機能ブロック230は、グラフィックSoCインターフェイス232、グラフィックマイクロコントローラ233、及びメディアパイプライン234も含む。グラフィックSoCインターフェイス232は、グラフィックプロセッサコア219と、システムオンチップ集積回路内の他のプロセッサコアとの間のインターフェイスを提供する。グラフィックマイクロコントローラ233は、スレッドディスパッチ、スケジューリング、及びプリエンプション(pre-emption)を含むグラフィックプロセッサコア219の様々な機能を管理するように構成可能なプログラム可能なサブプロセッサである。メディアパイプライン234(例えば、
図3及び
図4のメディアパイプライン316)は、画像及びビデオデータを含むマルチメディアデータのデコード、エンコード、前処理、及び/又は後処理を容易にするロジックを含む。メディアパイプライン234は、サブコア221~212F内の計算又はサンプリングロジックへの要求を介してメディア処理を実施する。
【0031】
一実施形態では、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)にディスパッチできる。
【0032】
グラフィックマイクロコントローラ233は、グラフィックプロセッサコア219の様々なスケジューリング及び管理タスクを実行するように構成することができる。一実施形態では、グラフィックマイクロコントローラ233は、サブコア221A~221F内で実行ユニット(EU)アレイ222A~222F、224A~224F内の様々なグラフィック並列エンジンに対してグラフィック及び/又は計算ワークロードスケジューリングを実行することができる。このスケジューリングモデルでは、グラフィックプロセッサコア219を含むSoCのCPUコアで実行されるホストソフトウェアが、適切なグラフィックエンジンにスケジューリング操作を呼び出す、複数のグラフィックプロセッサドアベルのうちの1つにワークロードを送信できる。スケジュール操作には、次にどのワークロードを実行するかの決定、コマンドストリーマへのワークロードの送信、エンジンで実行されている既存のワークロードの横取り(pre-empting)、ワークロードの進行状況の監視、ワークロードの完了時のホストソフトウェアへの通知が含まれる。一実施形態では、グラフィックマイクロコントローラ233は、グラフィックプロセッサコア219の低電力又はアイドル状態を促進することもでき、グラフィックプロセッサコア219に、オペレーティングシステム及び/又はシステム上のグラフィックドライバソフトウェアから独立して、低電力状態遷移でグラフィックプロセッサコア219内のレジスタを保存及び復元する能力を提供する。
【0033】
グラフィックプロセッサコア219は、図示されたサブコア221A~221Fよりも多いか又は少ない、最大N個のモジュール式サブコアを有することができる。N個のサブコアの各セットについて、グラフィックプロセッサコア219は、共有機能(function:関数)ロジック235、共有及び/又はキャッシュメモリ236、幾何学/固定機能パイプライン237だけでなく、様々なグラフィック及び計算処理の動作を加速させる追加の固定機能ロジック238も含むことができる。共有機能ロジック235は、
図4の共有機能ロジック420(例えば、サンプラー、数学、及び/又はスレッド間通信ロジック)に関連付けられた、グラフィックプロセッサコア219内のN個の各サブコアによって共有できる論理ユニットを含むことができる。共有及び/又はキャッシュメモリ236は、グラフィックプロセッサコア219内のN個のサブコア221A~221Fのセットのラストレベルキャッシュとすることができ、且つ複数のサブコアによってアクセス可能な共有メモリとしても機能することができる。幾何学/固定機能パイプライン237は、固定機能ブロック230内の幾何学/固定機能パイプライン231の代わりに含めることができ、同じ又は類似の論理ユニットを含むことができる。
【0034】
一実施形態では、グラフィックプロセッサコア219は、グラフィックプロセッサコア219が使用する様々な固定機能加速化ロジックを含むことができる追加の固定機能ロジック238を含む。一実施形態では、追加の固定機能ロジック238は、位置のみのシェーディング(shading)で使用する追加の幾何学パイプラインを含む。位置のみのシェーディングでは、2つの幾何学パイプライン、幾何学/固定機能パイプライン238、231内のフル幾何学パイプラインと、追加の固定機能ロジック238に含めることができる追加の幾何学パイプラインであるカル(cull)パイプラインとが存在する。一実施形態では、カルパイプラインは、フル幾何学パイプラインの細分化したバージョンである。フルパイプライン及びカルパイプラインは、同じアプリケーションの異なるインスタンスを実行でき、各インスタンスには個別のコンテキストがある。位置のみのシェーディングでは、破棄された三角形の長いカルラン(cull runs)を非表示にできるため、場合によってはシェーディングをより早く完了できる。例えば、一実施形態では、追加の固定機能ロジック238内のカルパイプラインロジックは、メインアプリケーションと並行して位置シェーダー(shader)を実行でき、ピクセルのフレームバッファへのラスタライズ(rasterization)及びレンダリングを実行せずに、カルパイプラインが頂点の位置属性のみをフェッチ及びシェーディングするので、一般にフルパイプラインよりも高速に重要な結果を生成することができる。カルパイプラインは、生成された重要な結果を使用して、それら三角形が間引きされている(culled)かどうかに関係なく、全ての三角形の可視性情報を計算できる。完全なパイプライン(この例では再生パイプラインと呼ばれ得る)は、可視情報を消費して、間引きされた三角形をスキップして、最終的にラスタライズフェーズに渡される可視の三角形のみをシェーディングできる。
【0035】
一実施形態では、追加の固定機能ロジック238は、機械学習訓練又は推論のための最適化を含む実装のために、固定関数行列乗算ロジック等の機械学習加速化ロジックも含むことができる。
【0036】
各グラフィックサブコア221A~221F内には、グラフィックパイプライン、メディアパイプライン、又はシェーダープログラムによる要求に応答して、グラフィック、メディア、及び計算処理を行うために使用できる1組の実行リソースが含まれる。グラフィックサブコア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を利用して、スレッドグループ内で実行されるスレッドがオンチップメモリの共通プールを用いて実行できるようにする。
【0037】
図2Cは、マルチコアグループ240A~240Nに配置されたグラフィック処理リソースの専用セットを含むグラフィック処理ユニット(GPU)239を示す。単一のマルチコアグループ240Aのみの詳細が提示されているが、他のマルチコアグループ240B~240Nは、グラフィック処理リソースの同じ又は同様のセットを装備できることが理解されよう。
【0038】
図示されるように、マルチコアグループ240Aは、グラフィックコア243のセット、テンソルコア244のセット、及び光線追跡コア245のセットを含み得る。スケジューラ/ディスパッチャ241は、様々なコア243、244、245に対する実行のためにグラフィックスレッドをスケジュールし、ディスパッチする。レジスタファイル242のセットは、グラフィックスレッドを実行するときにコア243、244、245によって使用されるオペランド値を格納する。これらには、例えば、整数値を格納するための整数レジスタ、浮動小数点値を格納するための浮動小数点レジスタ、パックされたデータ要素(整数及び/又は浮動小数点データ要素)を格納するためのベクトルレジスタ、及びテンソル/マトリックス値を格納するためのタイルレジスタが含まれる。一実施形態では、タイルレジスタは、ベクトルレジスタの組合せセットとして実装される。
【0039】
1つ又は複数の組合せレベル1(L1)キャッシュ及び共有メモリユニット247は、テクスチャデータ、頂点データ、ピクセルデータ、光線(ray)データ、境界ボリュームデータ等のグラフィックデータを各マルチコアグループ240A内にローカルに格納する。1つ又は複数のテクスチャユニット247を使用して、テクスチャマッピング及びサンプリング等のテクスチャリング操作を行うこともできる。マルチコアグループ240A~240Nの全て又はサブセットによって共有されるレベル2(L2)キャッシュ253は、グラフィックデータ及び/又は複数の同時グラフィックスレッドのための命令を格納する。図示されるように、L2キャッシュ253は、複数のマルチコアグループ240A~240Nに亘って共有され得る。1つ又は複数のメモリコントローラ248は、GPU239を、システムメモリ(例えば、DRAM)及び/又は専用グラフィックメモリ(例えば、GDDR6メモリ)であり得るメモリ249に結合する。
【0040】
入力/出力(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は、同じ仮想アドレス空間を共有することができる。
【0041】
一実施態様では、IOMMU251は仮想化をサポートする。この場合に、そのIOMMU251は、ゲスト/グラフィックの仮想アドレスをゲスト/グラフィックの物理アドレスにマッピングするためのページテーブルの第1のセットと、ゲスト/グラフィックの物理アドレスを(例えば、システムメモリ249内の)システム/ホストの物理アドレスにマッピングするためのページテーブルの第2のセットとを管理する。ページテーブルの第1及び第2のセットのそれぞれのベースアドレスは、制御レジスタに格納され、コンテキストスイッチでスワップアウトされる(例えば、それによって、新しいコンテキストに、関連するページテーブルのセットへのアクセスが提供される)。
図2Cには示されていないが、コア243、244、245及び/又はマルチコアグループ240A~240Nのそれぞれは、仮想的なゲスト変換から物理的なゲスト変換、物理的なゲスト変換から物理的なホスト変換、及び仮想的なゲスト変換から物理的なホスト変換をキャッシュするための変換ルックアサイド(lookaside)バッファ(TLB)を含み得る。
【0042】
一実施形態では、CPU246、GPU239、及びI/O装置252は、単一の半導体チップ及び/又はチップパッケージに統合される。図示されたメモリ249は、同じチップ上に統合してもよく、又はオフチップインターフェイスを介してメモリコントローラ248に結合してもよい。一実施態様では、メモリ249は、他の物理的なシステムレベルのメモリと同じ仮想アドレス空間を共有するGDDR6メモリを含むが、本発明の基本的な原理は、この特定の実施態様に限定されるものではない。
【0043】
一実施形態では、テンソルコア244は、ディープラーニング操作を行うために使用される基本的な計算処理である行列演算を行うように特に設計された複数の実行ユニットを含む。例えば、同時行列乗算演算は、ニューラルネットワークの訓練及び推論に使用できる。テンソルコア244は、単精度浮動小数点(例えば、32ビット)、半精度浮動小数点(例えば、16ビット)、整数ワード(16ビット)、バイト(8ビット)、及びハーフバイト(4ビット)を含む様々なオペランド精度を用いて行列処理を行うことができる。一実施形態では、ニューラルネットワーク実施態様は、レンダリングされた各シーンの特徴を抽出し、複数のフレームからの詳細を潜在的に組み合わせて、高品質の最終画像を構築する。
【0044】
ディープラーニングの実施態様において、並列行列乗算作業は、テンソルコア244での実行のためにスケジュールされ得る。特に、ニューラルネットワークの訓練は、かなりの数の行列ドット積演算を必要とする。N×N×N行列乗算の内積定式化を処理するために、テンソルコア244は、少なくともN個のドット積処理要素を含み得る。行列の乗算が始まる前に、1つの行列全体がタイルレジスタに読み込まれ、第2の行列の少なくとも1つの列がNサイクルの各サイクルに読み込まれる。各サイクルで、N個のドット積が処理される。
【0045】
行列要素は、16ビットワード、8ビットバイト(例えば、INT8)、及び4ビットハーフバイト(例えば、INT4)を含む、特定の実施態様に応じて異なる精度で格納され得る。テンソルコア244に異なる精度モードを指定して、様々なワークロード(例えば、バイト及びハーフバイトへの量子化を許容できるワークロードの推論等)で最も効率的な精度が使用されるのを保証する。
【0046】
一実施形態では、光線追跡コア245は、リアルタイム光線追跡及び非リアルタイム光線追跡実装の両方のための光線追跡処理を加速させる。特に、光線追跡コア245は、境界ボリューム階層(BVH)を用いて光線横断(ray traversal)を実行し、光線とBVHボリューム内に囲まれたプリミティブとの間の交差を識別するための光線横断/交差回路を含む。光線追跡コア245は、(例えば、Zバッファ又は同様の構成を用いて)深度テスト及びカリング(culling)を行うための回路も含み得る。一実施態様では、光線追跡コア245は、本明細書に記載の画像ノイズ除去技術と協調して横断及び交差処理を行い、その少なくとも一部はテンソルコア244上で実行され得る。例えば、一実施形態では、テンソルコア244は、ディープラーニングニューラルネットワークを実装して、光線追跡コア245によって生成されたフレームのノイズ除去を行う。ただし、CPU246、グラフィックコア243、及び/又は光線追跡コア245は、ノイズ除去及び/又はディープラーニングアルゴリズムの全て又は一部を実装することもできる。
【0047】
さらに、上述したように、ノイズ除去に対して分散型アプローチを使用することができ、そのアプローチで、GPU239は、ネットワーク又は高速相互接続を介して他のコンピュータ装置に結合されたコンピュータ装置内にある。この実施形態では、相互接続されたコンピュータ装置は、ニューラルネットワーク学習/訓練データを共有して、システム全体が異なるタイプの画像フレーム及び/又は異なるグラフィックアプリケーションのノイズ除去を行うために学習する速度を向上させる。
【0048】
一実施形態では、光線追跡コア245は、全てのBVH横断及び光線(ray)プリミティブ交差を処理し、グラフィックコア243が光線当たり数千の命令で過負荷状態になるのを防ぐ。一実施形態では、各光線追跡コア245は、境界ボックステスト(例えば、横断操作)を実行するための専用回路の第1のセットと、光線三角形交差テスト(例えば、交差する光線がトラバースされる)を実行するための専用回路の第2のセットとを含む。こうして、一実施形態では、マルチコアグループ240Aは、光線プローブを単に起動するだけで済み、光線追跡コア245は、独立して光線横断及び交差を実行し、ヒットデータ(例えば、ヒット、ヒットなし、複数ヒット等)をスレッドコンテキストに返す。他のコア243、244は、光線追跡コア245が横断及び交差処理を行う間に、他のグラフィック又は計算作業を行うために解放される。
【0049】
一実施形態では、各光線追跡コア245は、BVHテスト演算を行う横断ユニットと、光線-プリミティブ交差テストを行う交差ユニットとを含む。交差ユニットは、「ヒット」、「ヒットなし」、又は「複数ヒット」応答を生成し、その応答を適切なスレッドに提供する。横断及び交差処理中に、他のコア(例えば、グラフィックコア243及びテンソルコア244)の実行リソースは、他の形式のグラフィック作業を行うために解放される。
【0050】
以下に説明する特定の一実施形態では、作業がグラフィックコア243と光線追跡コア245との間で分散されるハイブリッドラスタライズ/光線追跡アプローチが使用される。
【0051】
一実施形態では、光線追跡コア245(及び/又は他のコア243、244)は、マイクロソフト(登録商標)のDirectX Ray Tracing(DXR)等の光線追跡命令セットに対するハードウェアサポートを含み、DXRは、ディスパッチレイコマンドだけでなく、及び光線生成、最近接ヒット、任意のヒット、ミスシェーダー(各オブジェクトに固有のシェーダー及びテクスチャのセットを割り当てることができる)を含む。光線追跡コア245、グラフィックコア243、テンソルコア244によってサポートされ得る別の光線追跡プラットフォームは、Vulkan1.1.85である。ただし、本発明の基本的な原理は、特定の光線追跡ISAに限定されないことに注意されたい。
【0052】
一般に、様々なコア245、244、243は、光線生成、最近接ヒット、任意のヒット、光線-プリミティブ交差、プリミティブ毎及び階層境界ボックス構築、ミス、訪問、及び例外のための命令/機能を含む光線追跡命令セットをサポートすることができる。より具体的には、一実施形態は、以下の機能を実行するための光線追跡命令を含む。
【0053】
光線生成 光線生成命令は、各ピクセル、サンプル、又は他のユーザ規定の作業割当てに対して実行され得る。
【0054】
最近接ヒット 最近接ヒット命令は、光線とシーン内のプリミティブとの最も近い交点を見つけるために実行され得る。
【0055】
任意のヒット(any hit) 任意のヒット命令は、光線とシーン内のプリミティブとの間の複数の交差を識別し、潜在的に新しい最も近い交差ポイントを識別する。
【0056】
交差 交差命令は、光線-プリミティブ交差テストを行い、結果を出力する。
【0057】
プリミティブ毎の境界ボックス構築 この命令は、(例えば、新しいBVH又は他の加速度データ構造を構築する場合に)所与のプリミティブ又はプリミティブのグループの周りに境界ボックスを構築する。
【0058】
ミス 光線がシーン内の全ての幾何学、又はシーンの指定された領域に当たらないことを示す。
【0059】
訪問(visit) 光線が横断する小さな(children)ボリュームを示す。
【0060】
例外 (例えば、様々なエラー条件に対して呼び出される)様々なタイプの例外ハンドラを含む。
【0061】
図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コントローラによって実行される演算を行うためのロジックを含むことができる。
【0062】
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に直接フェッチすることができる。
【0063】
動作中に、1つ又は複数のCPU246は、アクセス可能なアドレス空間にマッピングされたGPGPU270内のレジスタ又はメモリにコマンドを書き込むことができる。コマンドプロセッサ257は、レジスタ又はメモリからコマンドを読み取り、それらのコマンドがGPGPU270内でどのように処理されるかを決定することができる。次に、スレッドディスパッチャ258を使用して、これらのコマンドを実行するために計算ユニット260A~260Nにスレッドをディスパッチすることができる。各計算ユニット260A~260Nは、他の計算ユニットから独立してスレッドを実行することができる。さらに、各計算ユニット260A~260Nは、条件付き計算のために独立して構成することができ、計算の結果をメモリに条件付きで出力することができる。コマンドプロセッサ257は、提出されたコマンドが完了すると、1つ又は複数のCPU246に割り込むことができる。
【0064】
図3A~
図3Cは、本明細書で説明する実施形態によって提供される追加のグラフィックプロセッサ及び計算アクセラレータアーキテクチャのブロック図を示す。本明細書の任意の他の図の要素と同じ参照符号(又は名前)を有する
図3A~
図3Cの要素は、本明細書の他の場所で説明しているのと同様の任意の方法で動作又は機能できるが、それに限定されるものではない。
【0065】
図3Aは、グラフィックプロセッサ300のブロック図であり、このプロセッサ300は、別個のグラフィック処理ユニットであり得るか、或いは複数の処理コア又は限定されないが、メモリ装置又はネットワークインターフェイス等の他の半導体デバイスと統合されたグラフィックプロセッサであり得る。いくつかの実施形態では、グラフィックプロセッサは、メモリマップされたI/Oインターフェイスを介して、グラフィックプロセッサ上のレジスタと通信し、プロセッサメモリに配置されたコマンドと通信する。いくつかの実施形態では、グラフィックプロセッサ300は、メモリにアクセスするためのメモリインターフェイス314を含む。メモリインターフェイス314は、ローカルメモリ、1つ又は複数の内部キャッシュ、1つ又は複数の共有外部キャッシュ、及び/又はシステムメモリへのインターフェイスであり得る。
【0066】
いくつかの実施形態では、グラフィックプロセッサ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を含む。
【0067】
いくつかの実施形態では、グラフィックプロセッサ300は、例えば、ビット境界ブロック転送を含む2次元(2D)ラスタライザ処理を行うためのブロック画像転送(BLIT)エンジン304を含む。しかしながら、一実施形態では、2Dグラフィック処理は、グラフィック処理エンジン(GPE)310の1つ又は複数のコンポーネントを用いて実行される。いくつかの実施形態では、GPE310は、3次元(3D)グラフィック処理及びメディア処理を含むグラフィック処理を行うための計算エンジンである。
【0068】
いくつかの実施形態では、GPE310は、3Dプリミティブ形状(例えば、長方形、三角形等)に作用する処理機能を用いて3次元画像及びシーンをレンダリングする等の3D処理を行うための3Dパイプライン312を含む。3Dパイプライン312は、要素内で様々なタスクを実行する及び/又は実行スレッドを3D/メディアサブシステム315に生成する(spawn)プログラム可能な固定機能要素を含む。3Dパイプライン312を使用してメディア処理を行うことができるが、GPE310の実施形態は、ビデオ後処理及び画像強調等のメディア処理を行うために特に使用されるメディアパイプライン316も含む。
【0069】
いくつかの実施形態では、メディアパイプライン316は、ビデオコーデックエンジン306の代わりに、又はそれに代わって、ビデオデコード加速、ビデオインターレース解除、及びビデオエンコード加速等の1つ又は複数の特殊メディア処理を行う固定機能又はプログラム可能な論理ユニットを含む。いくつかの実施形態では、メディアパイプライン316は、3D/メディアサブシステム315で実行するためにスレッドを生成するスレッド生成(spawning)ユニットをさらに含む。生成されたスレッドは、3D/メディアサブシステム315に含まれる1つ又は複数のグラフィック実行ユニットでメディア処理の計算を行う。
【0070】
いくつかの実施形態では、3D/メディアサブシステム315は、3Dパイプライン312及びメディアパイプライン316によって生成されたスレッドを実行するためのロジックを含む。一実施形態では、パイプラインは、スレッド実行要求を3D/メディアサブシステム315に送信し、このサブシステム315は、利用可能なスレッド実行リソースへの様々なリクエストを調停及びディスパッチするためのスレッドディスパッチロジックを含む。実行リソースには、3D及びメディアスレッドを処理するグラフィック実行ユニットのアレイが含まれる。いくつかの実施形態では、3D/メディアサブシステム315は、スレッド命令及びデータのための1つ又は複数の内部キャッシュを含む。いくつかの実施形態では、サブシステムは、スレッド同士の間でデータを共有し、出力データを格納するために、レジスタ及びアドレス指定可能なメモリを含む共有メモリも含む。
【0071】
図3Bは、本明細書で説明する実施形態による、タイル型アーキテクチャを有するグラフィックプロセッサ320を示す。一実施形態では、グラフィックプロセッサ320は、グラフィックエンジンタイル310A~310D内に
図3Aのグラフィック処理エンジン310の複数のインスタンスを有するグラフィック処理エンジンクラスタ322を含む。各グラフィックエンジンタイル310A~310Dは、1組のタイル相互接続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でさらに詳細に説明するように、ベースダイ又はベース基板に結合された別個のチップレット上に存在する。
【0072】
グラフィック処理エンジンクラスタ322は、オンチップ又はオンパッケージのファブリック相互接続324と接続することができる。ファブリック相互接続324によって、グラフィックエンジンタイル310A~310Dと、ビデオコーデック306及び1つ又は複数のコピーエンジン304等のコンポーネントとの間の通信が可能になる。コピーエンジン304は、メモリ装置326A~326Dとグラフィックプロセッサ320の外部にあるメモリ(例えば、システムメモリ)との間でデータを移動するために使用することができる。ファブリック相互接続324を使用して、グラフィックエンジンタイル310A~310Dを相互接続することもできる。グラフィックプロセッサ320は、オプションとして、外部表示装置318との接続を可能にする表示コントローラ302を含む。グラフィックプロセッサは、グラフィック又は計算アクセラレータとして構成することもできる。アクセラレータ構成では、表示コントローラ302及び表示装置318を省略してもよい。
【0073】
グラフィックプロセッサ320は、ホストインターフェイス328を介してホストシステムに接続することができる。ホストインターフェイス328は、グラフィックプロセッサ320、システムメモリ、及び/又は他のシステムコンポーネントの間の通信を可能にする。ホストインターフェイス328は、例えば、PCIエクスプレスバス又は別のタイプのホストシステムインターフェイスであってもよい。
【0074】
図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を介してホストプロセッサ及びメモリに接続することもできる。
【0075】
グラフィック処理エンジン
【0076】
図4は、いくつかの実施形態によるグラフィックプロセッサのグラフィック処理エンジン410のブロック図である。一実施形態では、グラフィック処理エンジン(GPE)410は、
図3Aに示されるGPE310のバージョンであり、
図3Bのグラフィックエンジンタイル310A~310Dを表すこともできる。本明細書の他の図の要素と同じ参照符号(又は名前)を有する
図4の要素は、本明細書の他の場所で説明しているのと同様の方法で動作又は機能できるが、それに限定されるものではない。例えば、
図3Aの3Dパイプライン312及びメディアパイプライン316が示されている。メディアパイプライン316は、GPE410のいくつかの実施形態ではオプションであり、GPE410内に明示的に含んでいなくてもよい。例えば、少なくとも1つの実施形態では、別個のメディア及び/又は画像プロセッサがGPE410に結合される。
【0077】
いくつかの実施形態では、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組のグラフィック実行リソースが含まれる。
【0078】
様々な実施形態では、3Dパイプライン312は、命令を処理し且つ実行スレッドをグラフィックコアアレイ414にディスパッチすることにより、頂点シェーダー、幾何学シェーダー、ピクセルシェーダー、フラグメントシェーダー、計算シェーダー、又は他のシェーダープログラム等の1つ又は複数のシェーダープログラムを処理する固定機能及びプログラム可能なロジックを含み得る。グラフィックコアアレイ414は、これらのシェーダープログラムの処理に使用する実行リソースの統合ブロックを提供する。グラフィックコアアレイ414のグラフィックコア415A~414B内の多目的の実行ロジック(例えば、実行ユニット)は、様々な3D APIシェーダー言語のサポートを含み、複数のシェーダーに関連する複数の同時実行スレッドを実行することができる。
【0079】
いくつかの実施形態では、グラフィックコアアレイ414は、ビデオ及び/又は画像処理等のメディア機能を実行する実行ロジックを含む。一実施形態では、実行ユニットは、グラフィック処理操作に加えて、並列の汎用計算処理を行うようにプログラム可能な汎用ロジックを含む。汎用ロジックは、
図1のプロセッサコア107又は
図2Aのコア202A~202N内の汎用ロジックと並行して、又はその汎用ロジックと協同して、処理動作を行うことができる。
【0080】
グラフィックコアアレイ414上で実行されるスレッドによって生成される出力データは、統合リターンバッファ(URB)418内のメモリにデータを出力することができる。URB418は、複数のスレッドのデータを格納することができる。いくつかの実施形態では、URB418を使用して、グラフィックコアアレイ414上で実行される異なるスレッドの間でデータを送信することができる。いくつかの実施形態では、URB418は、グラフィックコアアレイ上のスレッドと共有機能ロジック420内の固定機能ロジックとの間の同期のためにさらに使用することができる。
【0081】
いくつかの実施形態では、グラフィックコアアレイ414は、アレイが可変数のグラフィックコアを含み、各グラフィックコアがGPE410の目標電力及び性能レベルに基づいて可変数の実行ユニットを有するように、スケーラブルである。一実施形態では、実行リソースは動的にスケーラブルであり、それによって必要に応じて実行リソースを有効又は無効にできる。
【0082】
グラフィックコアアレイ414は、グラフィックコアアレイ内のグラフィックコア同士の間で共有される複数のリソースを含む共有機能ロジック420と結合する。共有機能ロジック420内の共有機能は、グラフィックコアアレイ414に特殊な補助機能を提供するハードウェア論理ユニットである。様々な実施形態では、共有機能ロジック420は、サンプラー421、数学422、及びスレッド間通信(ITC)423ロジックを含むが、これらに限定されるものではない。さらに、いくつかの実施形態は、共有機能ロジック420内に1つ又は複数のキャッシュ425を実装する。
【0083】
共有機能は、少なくとも、所与の特殊化機能に対する要求がグラフィックコアアレイ414内に含めるには不十分な場合に実装される。代わりに、その特殊化機能の単一のインスタンス化が、共有機能ロジック420内のスタンドアロンエンティティとして実装され、グラフィックコアアレイ414内の実行リソースの中で共有される。グラフィックコアアレイ414の間で共有され、且つグラフィックコアアレイ414内に含まれる機能の正確なセットは、実施形態によって異なる。いくつかの実施形態では、グラフィックコアアレイ414によって広範囲に使用される、共有機能ロジック420内の特定の共有機能は、グラフィックコアアレイ414内の共有機能ロジック416内に含まれ得る。様々な実施形態では、グラフィックコアアレイ414内の共有機能ロジック416は、共有機能ロジック420内の一部又は全てのロジックを含むことができる。一実施形態では、共有機能ロジック420内の全ての論理要素は、グラフィックコアアレイ414の共有機能ロジック416内で複製してもよい。一実施形態では、共有機能ロジック420は、グラフィックコアアレイ414内の共有機能ロジック416の利益となるように除外される。
【0084】
実行ユニット
【0085】
図5A~
図5Bは、本明細書で説明する実施形態による、グラフィックプロセッサコアで使用される処理要素のアレイを含むスレッド実行ロジック500を示す。本明細書の他の図の要素と同じ参照符号(又は名前)を有する
図5A~
図5Bの要素は、本明細書の他の場所で説明しているのと同様の方法で動作又は機能できるが、それに限定されるものではない。
図5A~
図5Bは、
図2Bの各サブコア221A~221Fで示されるハードウェアロジックを表すことができるスレッド実行ロジック500の概要を示す。
図5Aは、汎用グラフィックプロセッサ内の実行ユニットを表しており、
図5Bは、計算アクセラレータ内で使用され得る実行ユニットを表している。
【0086】
図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のアレイは、任意の数の個々の実行ユニットを含むようにスケーラブルである。
【0087】
いくつかの実施形態では、実行ユニット508A~508Nは、主にシェーダープログラムを実行するために使用される。シェーダープロセッサ502は、様々なシェーダープログラムを処理し、スレッドディスパッチャ504を介してシェーダープログラムに関連する実行スレッドをディスパッチすることができる。一実施形態では、スレッドディスパッチャは、グラフィック及びメディアパイプラインからのスレッド開始要求を調停(arbitrate)し、且つ実行ユニット508A~508N内の1つ又は複数の実行ユニットで要求されたスレッドをインスタンス化するロジックを含む。例えば、幾何学パイプラインは、頂点、テッセレーション(tessellation)、又は幾何学シェーダーをスレッド実行ロジックにディスパッチして処理することができる。いくつかの実施形態では、スレッドディスパッチャ504は、実行中のシェーダープログラムからのランタイムスレッド生成要求を処理することもできる。
【0088】
いくつかの実施形態では、実行ユニット508A~508Nは、多くの標準3Dグラフィックシェーダー命令のネイティブ(native)サポートを含む命令セットをサポートし、それによってグラフィックライブラリ(例えば、Direct3D及びOpenGL)からのシェーダープログラムが最小限の変換で実行される。実行ユニットは、頂点及び幾何学処理(例えば、頂点プログラム、幾何学プログラム、頂点シェーダー)、ピクセル操作(例えば、ピクセルシェーダー、フラグメントシェーダー)、及び汎用操作(例えば、計算シェーダー及びメディアシェーダー)をサポートする。実行ユニット508A~508Nのそれぞれは、マルチ発出の(multi-issue)単一命令複数データ(SIMD)の実行が可能であり、マルチスレッド操作によって、より長いレイテンシのメモリアクセスに直面した際に効率的な実行環境が可能になる。各実行ユニット内の各ハードウェアスレッドには、専用の高帯域幅レジスタファイル及び関連する独立したスレッド状態がある。実行は、整数、単精度及び倍精度の浮動小数点演算、SIMD分岐機能、論理演算、超越演算、及び他の様々な演算が可能なパイプラインへのクロック毎のマルチ発出である。メモリ又は共有機能のうちの1つからのデータを待機している間に、実行ユニット508A~508N内の依存関係ロジックは、要求したデータが返されるまで待機スレッドをスリープ状態にさせる。待機スレッドがスリープ状態である間に、ハードウェアリソースは、他のスレッドの処理に費やされる場合がある。例えば、頂点シェーダー処理に関連する遅延中に、実行ユニットは、ピクセルシェーダー、フラグメントシェーダー、又は異なる頂点シェーダーを含む別のタイプのシェーダープログラムの処理を行うことができる。様々な実施形態は、SIMDの使用の代替として、又はSIMDの使用に加えて、単一命令マルチスレッド(SIMT)の使用による実行使用に適用することができる。SIMDコア又は処理への言及は、SIMTにも適用でき、又はSIMTと組み合わせたSIMDにも適用できる。
【0089】
実行ユニット508A~508Nの各実行ユニットは、データ要素のアレイ上で動作する。データ要素の数は、「実行サイズ」、つまり命令のチャネルの数である。実行チャネルは、データ要素へのアクセス、マスキング、及び命令内のフロー制御のための実行の論理ユニットである。チャネルの数は、特定のグラフィックプロセッサの物理算術論理ユニット(ALU)又は浮動小数点ユニット(FPU)の数に依存しない場合がある。いくつかの実施形態では、実行ユニット508A~508Nは、整数及び浮動小数点データ型をサポートする。
【0090】
実行ユニット命令セットは、SIMD命令を含む。様々なデータ要素は、パックされたデータ型としてレジスタに格納でき、実行ユニットは、要素のデータサイズに基づいて様々な要素を処理する。例えば、256ビット幅のベクトルを操作する場合に、ベクトルの256ビットはレジスタに格納され、実行ユニットは、ベクトルを、4個の個別の54ビットパックデータ要素(クワッドワード(QW)サイズのデータ要素)、8個の個別の32ビットパックデータ要素(ダブルワード(DW)サイズのデータ要素)、16個の個別の16ビットパックデータ要素(ワード(W)サイズのデータ要素)、又は32個の個別の8ビットデータ要素(バイト(B)サイズのデータ要素)として操作する。ただし、異なるベクトル幅及びレジスタサイズが可能である。
【0091】
一実施形態では、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が共通の命令ポインタレジスタを用いて実行できるようにする。
【0092】
1つ又は複数の内部命令キャッシュ(例えば、506)が、実行ユニットのスレッド命令をキャッシュするために、スレッド実行ロジック500に含まれる。いくつかの実施形態では、1つ又は複数のデータキャッシュ(例えば、512)が、スレッド実行中にスレッドデータをキャッシュするために含まれる。実行ロジック500上で実行するスレッドは、明示的に管理されたデータを共有ローカルメモリ511に格納することもできる。いくつかの実施形態では、サンプラー510は、3D処理のテクスチャサンプリング及びメディア処理のメディアサンプリングを提供するために含まれる。いくつかの実施形態では、サンプラー510は、サンプリングされたデータを実行ユニットに提供する前に、サンプリングプロセス中にテクスチャ又はメディアデータを処理するための特殊なテクスチャ又はメディアサンプリング機能を含む。
【0093】
実行中に、グラフィック及びメディアパイプラインは、スレッド生成及びディスパッチロジックを介してスレッド開始要求をスレッド実行ロジック500に送信する。幾何学的オブジェクトのグループが処理され、ピクセルデータにラスタライズされると、シェーダープロセッサ502内のピクセルプロセッサロジック(ピクセルシェーダーロジック、フラグメントシェーダーロジック等)が呼び出され、出力情報がさらに計算され、結果が出力サーフェス(surface)(カラーバッファ、深度(depth)バッファ、ステンシルバッファ等)に書き込まれる。いくつかの実施形態では、ピクセルシェーダー又はフラグメントシェーダーが、ラスタライズされたオブジェクトに亘って補間される様々な頂点属性の値を計算する。いくつかの実施形態では、次に、シェーダープロセッサ502内のピクセルプロセッサロジックは、アプリケーションプログラミングインターフェイス(API)が提供するピクセル又はフラグメントシェーダープログラムを実行する。シェーダープログラムを実行するために、シェーダープロセッサ502は、スレッドディスパッチャ504を介してスレッドを実行ユニット(例えば、508A)にディスパッチする。いくつかの実施形態では、シェーダープロセッサ502は、サンプラー510のテクスチャサンプリングロジックを使用して、メモリに格納されたテクスチャマップのテクスチャデータにアクセスする。テクスチャデータ及び入力幾何学データに対する算術演算は、各幾何学フラグメントのピクセルカラーデータを計算するか、或いは1つ又は複数のピクセルを更なる処理から破棄する。
【0094】
いくつかの実施形態では、データポート514は、スレッド実行ロジック500が処理済みデータをメモリに出力してグラフィックプロセッサ出力パイプラインでさらに処理するためのメモリアクセス機構を提供する。いくつかの実施形態では、データポート514は、データポートを介したメモリアクセスのためにデータをキャッシュするために、1つ又は複数のキャッシュメモリ(例えば、データキャッシュ512)を含むか、又はそれに結合する。
【0095】
一実施形態では、実行ロジック500は、光線追跡加速機能を提供できる光線トレーサ505を含むこともできる。光線トレーサ505は、光線生成のための命令/機能を含む光線追跡命令セットをサポートすることができる。光線追跡命令セットは、
図2Cの光線追跡コア245によりサポートされる光線追跡命令セットと同様であっても、異なっていてもよい。
【0096】
図5Bは、実施形態による、実行ユニット508の例示的な内部の詳細を示す。グラフィック実行ユニット508は、命令フェッチユニット537、汎用レジスタファイルアレイ(GRF)524、アーキテクチャレジスタファイルアレイ(ARF)526、スレッドアービタ(arbiter)522、送信ユニット530、分岐ユニット532、SIMD浮動小数点ユニット(FPU)534のセット、及び一実施形態では、専用の整数SIMD ALU535のセットを含むことができる。GRF524及びARF526は、グラフィック実行ユニット508でアクティブであり得る各同時ハードウェアスレッドに関連する汎用レジスタファイル及びアーキテクチャレジスタファイルのセットを含む。一実施形態では、スレッド毎のアーキテクチャ状態がARF526に維持される一方、スレッド実行中に使用されるデータはGRF524に格納される。各スレッドの命令ポインタを含む各スレッドの実行状態は、ARF526のスレッド固有のレジスタに保持できる。
【0097】
一実施形態では、グラフィック実行ユニット508は、同時マルチスレッディング(SMT)と細粒度インターリーブマルチスレッディング(IMT)との組合せであるアーキテクチャを有する。アーキテクチャは、同時実行スレッドのターゲット数及び実行ユニット当たりのレジスタ数に基づいて設計時に微調整できるモジュール構成を有しており、実行ユニットのリソースは、複数の同時スレッドの実行に使用されるロジック全体に分割される。グラフィック実行ユニット508によって実行され得る論理スレッドの数は、ハードウェアスレッドの数に限定されず、複数の論理スレッドを各ハードウェアスレッドに割り当てることができる。
【0098】
一実施形態では、グラフィック実行ユニット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バイトを格納することができる。柔軟なアドレス指定モードでは、レジスタを一緒にアドレス指定して、より広いレジスタを効果的に構築する、又はストライドされた長方形のブロックデータ構造を表すことができる。
【0099】
一実施形態では、メモリ操作、サンプラー操作、及び他のより長いレイテンシのシステム通信は、メッセージ通過送信ユニット530によって実行される「送信」命令を介してディスパッチされる。一実施形態では、分岐命令は専用分岐ユニット532にディスパッチされ、SIMD発散及び最終的な収束を容易にする。
【0100】
一実施形態では、グラフィック実行ユニット508は、浮動小数点演算を行うために1つ又は複数のSIMD浮動小数点ユニット(FPU)534を含む。一実施形態では、FPU534は、整数計算もサポートする。一実施形態では、FPU534は、最大M個の32ビット浮動小数点(又は整数)演算をSIMD実行することができ、又は最大2M個の16ビット整数又は16ビット浮動小数点演算をSIMD実行することができる。一実施形態では、FPUの少なくとも1つは、高スループット超越数学関数及び倍精度54ビット浮動小数点をサポートする拡張数学(extended math:発展数学)能力を提供する。いくつかの実施形態では、8ビット整数のSIMD ALU535のセットも存在し、これは、機械学習計算に関連する演算を行うように特に最適化することができる。
【0101】
一実施形態では、グラフィック実行ユニット508の複数のインスタンスのアレイは、グラフィックサブコアグループ(例えば、サブスライス)にインスタンス化することができる。スケーラビリティのために、乗算アーキテクトはサブコアグループ毎に実行ユニットの正確な数を選択できる。一実施形態では、実行ユニット508は、複数の実行チャネルに亘って命令を実行することができる。更なる実施形態では、グラフィック実行ユニット508で実行される各スレッドは、異なるチャネルで実行される。
【0102】
図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と同様に動作することができる。
【0103】
実行ユニット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ビットの浮動小数点演算を行うように構成することができる。
【0104】
スレッド制御ユニット601は、実行ユニット内のスレッドの実行を制御するロジックを含む。スレッド制御ユニット601は、実行ユニット600内のスレッドの実行を開始、停止、及び先取り(横取り)するスレッド調停ロジックを含むことができる。スレッド状態ユニット602は、実行ユニット600で実行するように割り当てられたスレッドのスレッド状態を格納するために使用できる。スレッド状態を実行ユニット600内に格納することによって、それらのスレッドがブロック又はアイドル状態になったときに、スレッドの迅速な先取り(横取り)を可能にする。命令フェッチ/プリフェッチユニット603は、より高いレベルの実行ロジックの命令キャッシュ(例えば、
図5Aのような命令キャッシュ506)から命令をフェッチすることができる。命令フェッチ/プリフェッチユニット603は、現在実行中のスレッドの解析に基づいて、命令キャッシュにロードされる命令のプリフェッチ要求を発することもできる。命令デコードユニット604は、計算ユニットにより実行される命令をデコードするために使用することができる。一実施形態では、命令デコードユニット604は、複雑な命令を構成要素のマイクロオペレーションにデコードするための二次デコーダとして使用することができる。
【0105】
実行ユニット600は、実行ユニット600上で実行されるハードウェアスレッドによって使用できるレジスタファイル606をさらに含む。レジスタファイル606内のレジスタは、実行ユニット600の計算ユニット610内の複数の同時スレッドを実行するために使用されるロジック全体に分割できる。グラフィック実行ユニット600によって実行され得る論理スレッドの数は、ハードウェアスレッドの数に限定されず、複数の論理スレッドを各ハードウェアスレッドに割り当てることができる。レジスタファイル606のサイズは、サポートされているハードウェアスレッドの数に基づいて、実施形態によって異なり得る。一実施形態では、レジスタの名前変更を使用して、レジスタをハードウェアスレッドに動的に割り当てることができる。
【0106】
図7は、いくつかの実施形態によるグラフィックプロセッサ命令フォーマット700を示すブロック図である。1つ又は複数の実施形態では、グラフィックプロセッサ実行ユニットは、複数のフォーマットの命令を有する命令セットをサポートする。実線のボックスは、実行ユニットの命令に一般的に含まれるコンポーネントを示しているが、破線はオプションのコンポーネント、又は命令のサブセットにのみ含まれるコンポーネントを示している。いくつかの実施形態では、説明及び図示する命令フォーマット700は、命令が処理されると命令デコードから生じるマイクロオペレーションとは対照的に、実行ユニットに供給される命令であるという点でマクロ命令である。
【0107】
いくつかの実施形態では、グラフィックプロセッサ実行ユニットは、128ビット命令フォーマット710の命令をネイティブにサポートする。64ビット圧縮(compacted)命令フォーマット730が、選択された命令、命令オプション、及びオペランドの数に基づいていくつかの命令で利用可能である。ネイティブの128ビット命令フォーマット710は、全ての命令オプションへのアクセスを提供するが、いくつかのオプション及び操作は64ビットフォーマット730に制限される。64ビットフォーマット730で使用可能なネイティブ命令は、実施形態によって異なる。いくつかの実施形態では、命令は、インデックスフィールド713内のインデックス値のセットを用いて部分的に圧縮される。実行ユニットハードウェアは、インデックス値に基づいて圧縮テーブルのセットを参照し、且つ圧縮テーブルの出力を使用して、ネイティブ命令を128ビット命令フォーマット710に再構築する。命令の他のサイズ及びフォーマットを使用できる。
【0108】
各フォーマットについて、命令オペコード712は、実行ユニットが実行することになる動作を規定する。実行ユニットは、各オペランドの複数のデータ要素に亘って各命令を並列に実行する。例えば、追加命令に応答して、実行ユニットは、テクスチャ要素又は画像要素を表す各カラーチャネルに亘って同時に追加操作を行う。デフォルトでは、実行ユニットは、オペランドの全てのデータチャネルに亘って各命令を実行する。いくつかの実施形態では、命令制御フィールド714によって、チャネル選択(例えば、予測)及びデータチャネル順序(例えば、スウィズル(swizzle))等の特定の実行オプションに対する制御が可能になる。128ビット命令フォーマット710の命令の場合に、実行サイズフィールド716は、並列に実行されるデータチャネルの数を制限する。いくつかの実施形態では、実行サイズフィールド716は、64ビット圧縮命令フォーマット730での使用に利用できない。
【0109】
いくつかの実行ユニット命令は、2つのソース(source)オペランド、src0 720、src1 722、及び1つのデスティネーション(destination)718を含む最大3つのオペランドを有する。いくつかの実施形態では、実行ユニットは、デスティネーションの1つが暗示されるデュアルデスティネーション命令をサポートする。データ操作命令は、第3のソースオペランド(例えば、SRC2 724)を有することができ、命令オペコード712は、ソースオペランドの数を決定する。命令の最後のソースオペランドは、命令と共に渡される即値(ハードコード等)にすることができる。
【0110】
いくつかの実施形態では、128ビット命令フォーマット710は、例えば、直接レジスタアドレス指定モード又は間接レジスタアドレス指定モードのどちらが使用されるかを指定するアクセス/アドレスモードフィールド726を含む。直接レジスタアドレス指定モードを使用する場合に、1つ又は複数のオペランドのレジスタアドレスは、命令のビットによって直接提供される。
【0111】
いくつかの実施形態では、128ビット命令フォーマット710は、命令のアドレスモード及び/又はアクセスモードを指定するアクセス/アドレスモードフィールド726を含む。一実施形態では、アクセスモードは、命令のデータアクセスアラインメントを規定するために使用される。いくつかの実施形態は、16バイト整列アクセスモード及び1バイト整列アクセスモードを含むアクセスモードをサポートし、アクセスモードのバイト配置(アライメント)は、命令オペランドのアクセス配置(アライメント)を決定する。例えば、第1のモードでは、命令はソースオペランド及びデスティネーションオペランドにバイト配置のアドレス指定を使用でき、第2のモードでは、命令は全てのソースオペランド及びデスティネーションオペランドに16バイト配置のアドレス指定を使用できる。
【0112】
一実施形態では、アクセス/アドレスモードフィールド726のアドレスモード部分は、命令が直接又は間接アドレス指定のどちらを使用するかを決定する。直接レジスタアドレス指定モードを使用する場合に、命令のビットは、1つ又は複数のオペランドのレジスタアドレスを直接提供する。間接レジスタアドレス指定モードを使用する場合に、1つ又は複数のオペランドのレジスタアドレスは、命令のアドレスレジスタ値及びアドレス即時フィールドに基づいて計算できる。
【0113】
いくつかの実施形態では、命令は、オペコード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は、一実施形態では、実行ユニットのどの部分を使用して復号された命令を実行するかを決定するために使用することができる。例えば、いくつかの命令は、シストリックアレイによって実行されるシストリック命令として指定される場合がある。光線追跡命令(図示せず)等の他の命令は、実行ロジックのスライス又はパーティション内の光線追跡コア又は光線追跡ロジックにルーティングできる。
【0114】
グラフィックパイプライン
【0115】
図8は、グラフィックプロセッサ800の別の実施形態のブロック図である。本明細書の他の図の要素と同じ参照符号(又は名前)を有する
図8の要素は、本明細書の他の場所で説明しているもの同様に動作又は機能することができるが、それに限定されるものではない。
【0116】
いくつかの実施形態では、グラフィックプロセッサ800は、幾何学パイプライン820、メディアパイプライン830、表示エンジン840、スレッド実行ロジック850、及びレンダリング出力パイプライン870を含む。いくつかの実施形態では、グラフィックプロセッサ800は、1つ又は複数の汎用処理コアを含むマルチコア処理システム内のグラフィックプロセッサである。グラフィックプロセッサは、1つ又は複数の制御レジスタ(図示せず)へのレジスタ書き込みによって、又はリング相互接続802を介してグラフィックプロセッサ800に発せられたコマンドを介して制御される。いくつかの実施形態では、リング相互接続802は、グラフィックプロセッサ800を、他のグラフィックプロセッサ又は汎用プロセッサ等の他の処理コンポーネントに結合する。リング相互接続802からのコマンドは、コマンドストリーマ803によって解釈され、コマンドストリーマ803は、幾何学ストリーマパイプライン820又はメディアパイプライン830の個々のコンポーネントに命令を供給する。
【0117】
いくつかの実施形態では、コマンドストリーマ803は、メモリから頂点データを読み取り、コマンドストリーマ803によって提供される頂点処理コマンドを実行する頂点フェッチャ805の動作を指示する。いくつかの実施形態では、頂点フェッチャ805は、頂点データを頂点シェーダー807に提供し、頂点シェーダー807は、座標空間変換及び照明操作を各頂点に対して行う。いくつかの実施形態では、頂点フェッチャ805及び頂点シェーダー807は、スレッドディスパッチャ831を介して実行スレッドを実行ユニット852A~852Bにディスパッチすることにより、頂点処理命令を実行する。
【0118】
いくつかの実施形態では、実行ユニット852A~852Bは、グラフィック及びメディア処理を行うための命令セットを有するベクトルプロセッサのアレイである。いくつかの実施形態では、実行ユニット852A~852Bは、各アレイに固有であるか、又はアレイ同士の間で共有される、付属のL1キャッシュ851を有する。キャッシュは、データ及び命令を異なるパーティションに含むようにパーティション化されたデータキャッシュ、命令キャッシュ、又は単一のキャッシュとして構成できる。
【0119】
いくつかの実施形態では、幾何学パイプライン820は、3Dオブジェクトのハードウェア加速化テッセレーションを実行するテッセレーションコンポーネントを含む。いくつかの実施形態では、プログラム可能なハル(hull)シェーダー811が、テッセレーション操作を構成する。プログラム可能なドメインシェーダー817が、テッセレーション出力のバックエンド評価を提供する。テッセレータ813は、ハルシェーダー811の指示で動作し、幾何学パイプライン820への入力として提供される粗い幾何学的モデルに基づいて、詳細な幾何学的オブジェクトのセットを生成する特別な目的のロジックを含む。いくつかの実施形態では、テッセレーションが使用されない場合に、テッセレーションコンポーネント(例えば、ハルシェーダー811、テッセレータ813、ドメインシェーダー817)をバイパスできる。
【0120】
いくつかの実施形態では、完全な幾何学的オブジェクトは、実行ユニット852A~852Bにディスパッチされた1つ又は複数のスレッドを介して幾何学シェーダー819によって処理することができ、又はクリッパー829に直接進むことができる。いくつかの実施形態では、幾何学シェーダーは、グラフィックパイプラインの前の段階のような頂点又は頂点のパッチではなく、幾何学的オブジェクト全体で動作する。テッセレーションが無効になっている場合に、幾何学シェーダー819は頂点シェーダー807から入力を受け取る。いくつかの実施形態では、幾何学シェーダー819は、テッセレーションユニットが無効になっている場合に、幾何学テッセレーションを実行するように幾何学シェーダーのプログラムによってプログラム可能である。
【0121】
ラスタライズの前に、クリッパー829は頂点データを処理する。クリッパー829は、固定機能クリッパー、又はクリッピング及び幾何学シェーダー機能を有するプログラム可能なクリッパーであり得る。いくつかの実施形態では、レンダリング出力パイプライン870のラスタライザ(rasterizer)及び深度テストコンポーネント873は、ピクセルシェーダーをディスパッチして、幾何学的オブジェクトをピクセル毎の表現に変換する。いくつかの実施形態では、ピクセルシェーダーロジックはスレッド実行ロジック850に含まれる。いくつかの実施形態では、アプリケーションが、ラスタライザ及び深度テストコンポーネント873をバイパスし、ストリームアウトユニット823を介して非ラスタ化頂点データにアクセスすることができる。
【0122】
グラフィックプロセッサ800は、相互接続バス、相互接続ファブリック、又はプロセッサの主要なコンポーネント同士の間でのデータ及びメッセージの受け渡しを可能にするいくつかの他の相互接続機構を有する。いくつかの実施形態では、実行ユニット852A~852B及び関連する論理ユニット(例えば、L1キャッシュ851、サンプラー854、テクスチャキャッシュ858等)は、データポート856を介して相互接続して、メモリアクセスを実行し、且つプロセッサのレンダリング出力パイプラインコンポーネントと通信する。いくつかの実施形態では、サンプラー854、キャッシュ851、858、及び実行ユニット852A~852Bはそれぞれ、別個のメモリアクセス経路を有する。一実施形態では、テクスチャキャッシュ858は、サンプラーキャッシュとして構成することもできる。
【0123】
いくつかの実施形態では、レンダリング出力パイプライン870は、頂点ベースのオブジェクトを関連するピクセルベースの表現に変換するラスタライザ及び深度テストコンポーネント873を含む。いくつかの実施形態では、ラスタライザロジックは、固定機能の三角形及び線のラスタライズを実行するためのウィンドウ処理(windower)/マスク処理(masker)ユニットを含む。いくつかの実施形態では、関連するレンダリングキャッシュ878及び深度キャッシュ879も利用可能である。ピクセル操作コンポーネント877が、ピクセルベースの操作をデータに対して行うが、場合によっては、2D処理に関連付けられたピクセル操作(例えば、ブレンディングを含むビットブロック画像転送)が、2Dエンジン841によって実行されるか、又はオーバーレイ表示面を用いてコントローラ843によって表示時に置き換えられる。いくつかの実施形態では、共有L3キャッシュ875が、全てのグラフィックコンポーネントに利用可能であり、メインシステムのメモリを使用せずにデータを共有できるようにする。
【0124】
いくつかの実施形態では、グラフィックプロセッサメディアパイプライン830は、メディアエンジン837及びビデオフロントエンド834を含む。いくつかの実施形態では、ビデオフロントエンド834は、コマンドストリーマ803からパイプラインコマンドを受け取る。いくつかの実施形態では、メディアパイプライン830は、別個のコマンドストリーマを含む。いくつかの実施形態では、ビデオフロントエンド834は、コマンドをメディアエンジン837に送信する前にメディアコマンドを処理する。いくつかの実施形態では、メディアエンジン837は、スレッドディスパッチャ831を介してスレッド実行ロジック850にディスパッチするためにスレッドを生成するスレッド生成機能を含む。
【0125】
いくつかの実施形態では、グラフィックプロセッサ800は、表示エンジン840を含む。いくつかの実施形態では、表示エンジン840は、プロセッサ800の外部にあり、且つリング相互接続802或いは他の何らかの相互接続バス又はファブリックを介してグラフィックプロセッサと結合する。いくつかの実施形態では、表示エンジン840は、2Dエンジン841及び表示コントローラ843を含む。いくつかの実施形態では、表示エンジン840は、3Dパイプラインから独立して動作することができる専用ロジックを含む。いくつかの実施形態では、表示コントローラ843は、ラップトップコンピュータのようなシステム統合型表示装置、又は表示装置コネクタを介して取り付けられた外部表示装置であり得る表示装置(図示せず)と結合する。
【0126】
いくつかの実施形態では、幾何学パイプライン820及びメディアパイプライン830は、複数のグラフィック及びメディアプログラミングインターフェイスに基づいて操作を行うように構成可能であり、且ついずれか1つのアプリケーションプログラミングインターフェイス(API)に固有ではない。いくつかの実施形態では、グラフィックプロセッサのドライバソフトウェアは、特定のグラフィック又はメディアライブラリに固有のAPI呼出しを、グラフィックプロセッサが処理できるコマンドに変換する。いくつかの実施形態では、全てがクロノス(Khronos)グループからのオープングラフィックライブラリ(OpenGL)、オープンコンピュータ言語(OpenCL)、及び/又はVulkanグラフィック及び計算APIのサポートが提供される。いくつかの実施形態では、マイクロソフト社のDirect3Dライブラリに対するサポートも提供され得る。いくつかの実施形態では、これらのライブラリの組合せがサポートされ得る。オープンソースのコンピュータビジョンライブラリ(OpenCV)のサポートも提供される。将来のAPIのパイプラインからグラフィックプロセッサのパイプラインへのマッピングを作成できる場合に、互換性のある3Dパイプラインを含む将来のAPIもサポートされる。
【0127】
グラフィックパイプラインプログラミング
【0128】
図9Aは、いくつかの実施形態によるグラフィックプロセッサコマンドフォーマット900を示すブロック図である。
図9Bは、一実施形態によるグラフィックプロセッサコマンドシーケンス910を示すブロック図である。
図9Aの実線のボックスは、グラフィックコマンドに一般的に含まれるコンポーネントを示す一方、破線は、オプションであるコンポーネントを含むか、又はグラフィックコマンドのサブセットにのみ含まれるコンポーネントを含む。
図9Aの例示的なグラフィックプロセッサコマンドフォーマット900は、クライアント902を識別するためのデータフィールド、コマンドオペレーションコード(オペコード)904、及びコマンドのデータ906を含む。サブオペコード905及びコマンドサイズ908もいくつかのコマンドに含まれる。
【0129】
いくつかの実施形態では、クライアント902は、コマンドデータを処理するグラフィック装置のクライアントユニットを指定する。いくつかの実施形態では、グラフィックプロセッサのコマンドパーサー(parser)は、各コマンドのクライアントフィールドを調べて、コマンドの更なる処理を条件付けし、コマンドデータを適切なクライアントユニットにルーティングする。いくつかの実施形態では、グラフィックプロセッサクライアントユニットは、メモリインターフェイスユニット、レンダリングユニット、2Dユニット、3Dユニット、及びメディアユニットを含む。各クライアントユニットは、コマンドを処理する対応する処理パイプラインを有する。クライアントユニットがコマンドを受信すると、クライアントユニットは、オペコード904を読み取り、存在する場合にサブオペコード905を読み取って、実行すべき操作を決定する。クライアントユニットは、データフィールド906の情報を用いてコマンドを実行する。いくつかのコマンドについては、明示的なコマンドサイズ908がコマンドのサイズを指定すると予想される。いくつかの実施形態では、コマンドパーサーは、コマンドオペコードに基づいてコマンドの少なくともいくつかのサイズを自動的に決定する。いくつかの実施形態では、コマンドは倍長語(ダブルワード)の倍数を介して整列される。他のコマンド形式を使用できる。
【0130】
図9Bのフロー図は、例示的なグラフィックプロセッサのコマンドシーケンス910を示す。いくつかの実施形態では、グラフィックプロセッサの実施形態を特徴付けるデータ処理システムのソフトウェア又はファームウェアは、グラフィック処理のセットをセットアップ、実行、終了するために、示されるコマンドシーケンスのバージョンを使用する。実施形態がこれらの特定のコマンド又はこのコマンドシーケンスに限定されないので、サンプルコマンドシーケンスが、例示の目的でのみ示され、説明される。さらに、コマンドは、コマンドシーケンスのコマンドのバッチとして発せられ得、それによってグラフィックプロセッサは、コマンドのシーケンスを少なくとも部分的に同時に処理する。
【0131】
いくつかの実施形態では、グラフィックプロセッサのコマンドシーケンス910は、パイプラインフラッシュコマンド912で開始し、アクティブなグラフィックパイプラインに、パイプラインの現在保留中のコマンドを完了させることができる。いくつかの実施形態では、3Dパイプライン922及びメディアパイプライン924は、同時に動作しない。パイプラインフラッシュが実行され、アクティブなグラフィックパイプラインに、任意の保留中のコマンドを完了させる。パイプラインフラッシュに応答して、グラフィックプロセッサのコマンドパーサーは、アクティブな描画エンジンが保留中の操作を完了し、関連する読み取りキャッシュが無効になるまで、コマンド処理を一時停止する。オプションで、「ダーティ(dirty)」とマークされているレンダリングキャッシュ内のデータをメモリにフラッシュすることができる。いくつかの実施形態では、パイプラインフラッシュコマンド912は、パイプライン同期のために、又はグラフィックプロセッサを低電力状態にする前に使用することができる。
【0132】
いくつかの実施形態では、コマンドシーケンスがグラフィックプロセッサにパイプラインを明示的に切り替えることを要求するときに、パイプライン選択コマンド913が使用される。いくつかの実施形態では、実行コンテキストが両方のパイプラインに対してコマンドを発するものでない限り、パイプラインコマンドを発する前に、実行コンテキスト内でパイプライン選択コマンド913が1回だけ必要である。いくつかの実施形態では、パイプライン選択コマンド913を介してパイプラインが切り替わる直前に、パイプラインフラッシュコマンド912が必要である。
【0133】
いくつかの実施形態では、パイプライン制御コマンド914は、動作のためにグラフィックパイプラインを構成し、3Dパイプライン922及びメディアパイプライン924をプログラムするために使用される。いくつかの実施形態では、パイプライン制御コマンド914は、アクティブなパイプラインのパイプライン状態を構成する。一実施形態では、パイプライン制御コマンド914は、パイプライン同期のために、及びコマンドのバッチを処理する前にアクティブなパイプライン内の1つ又は複数のキャッシュメモリからデータをクリアするために使用される。
【0134】
いくつかの実施形態では、リターンバッファ状態コマンド916が、それぞれのパイプラインがデータを書き込むためのリターンバッファのセットを構成するために使用される。いくつかのパイプライン操作では、その中で操作が処理中に中間データを書き込む1つ又は複数のリターンバッファの割り当て、選択、又は構成が必要である。いくつかの実施形態では、グラフィックプロセッサはまた、出力データを格納し、スレッド間通信を行うために、1つ又は複数のリターンバッファを使用する。いくつかの実施形態では、リターンバッファ状態916は、パイプライン操作のセットに使用するリターンバッファのサイズ及び数を選択することを含む。
【0135】
コマンドシーケンスにおける残りのコマンドは、操作のためのアクティブなパイプラインに基づいて異なる。パイプライン決定920に基づいて、コマンドシーケンスは、3Dパイプライン状態930で開始する3Dパイプライン922、又はメディアパイプライン状態940で開始するメディアパイプライン924に合わせて調整される。
【0136】
3Dパイプライン状態930を構成するコマンドは、頂点バッファ状態、頂点要素状態、一定色状態、深度バッファ状態、及び3Dプリミティブコマンドを処理する前に構成される他の状態変数のための3D状態設定コマンドを含む。これらのコマンドの値は、使用中の特定の3D APIに少なくとも部分的に基づいて決定される。いくつかの実施形態では、3Dパイプライン状態930コマンドはまた、それら特定のパイプライン要素が使用されない場合に、特定のパイプライン要素を選択的に無効化又はバイパスすることができる。
【0137】
いくつかの実施形態では、3Dプリミティブ932コマンドは、3Dパイプラインによって処理すべき3Dプリミティブを送信するために使用される。3Dプリミティブ932コマンドを介してグラフィックプロセッサに渡されるコマンド及び関連パラメータは、グラフィックパイプラインの頂点フェッチ機能に転送される。頂点フェッチ機能は、3Dプリミティブ932コマンドデータを使用して、頂点データ構造を生成する。頂点データ構造は、1つ又は複数のリターンバッファに格納される。いくつかの実施形態では、3Dプリミティブ932コマンドを使用して、頂点シェーダーを介して3Dプリミティブに対して頂点操作を行う。頂点シェーダーを処理するために、3Dパイプライン922は、シェーダー実行スレッドをグラフィックプロセッサ実行ユニットにディスパッチする。
【0138】
いくつかの実施形態では、3Dパイプライン922は、実行934コマンド又はイベントを介してトリガーされる。いくつかの実施形態では、レジスタ書込みがコマンド実行をトリガーする。いくつかの実施形態では、実行は、コマンドシーケンスの「go」又は「kick」コマンドを介してトリガーされる。一実施形態では、コマンド実行は、グラフィックパイプラインを介してコマンドシーケンスをフラッシュするためにパイプライン同期コマンドを用いてトリガーされる。3Dパイプラインは、3Dプリミティブの幾何学処理を行う。処理が完了すると、得られた幾何学的オブジェクトがラスタライズされ、ピクセルエンジンが得られたピクセルに色を付ける。ピクセルシェーディング及びピクセルバックエンド処理を制御する追加のコマンドも、これらの処理に含めることができる。
【0139】
いくつかの実施形態では、グラフィックプロセッサコマンドシーケンス910は、メディア処理を行うとき、メディアパイプライン924の経路を辿る。一般に、メディアパイプライン924のプログラミングの特定の使用及び方法は、実行されるメディア又は計算処理に依存する。特定のメディアデコード処理は、メディアデコード中にメディアパイプラインにオフロードされる場合がある。いくつかの実施形態では、メディアパイプラインをバイパスすることもでき、メディアデコードは、1つ又は複数の汎用処理コアによって提供されるリソースを用いて全体的又は部分的に実行することができる。一実施形態では、メディアパイプラインは、汎用グラフィックプロセッサユニット(GPGPU)演算のための要素も含み、グラフィックプロセッサは、グラフィックプリミティブのレンダリングに明示的に関連しない計算シェーダープログラムを用いてSIMDベクトル演算を行うために使用される。
【0140】
いくつかの実施形態では、メディアパイプライン924は、3Dパイプライン922と同様の方法で構成される。メディアパイプライン状態940を構成するコマンドのセットが、メディアオブジェクトコマンド942の前にコマンドキューにディスパッチ又は配置される。いくつかの実施形態では、メディアパイプライン状態940のためのコマンドが、メディアオブジェクトを処理するために使用されることになるメディアパイプライン要素を構成するためのデータを含む。これには、エンコード又はデコードフォーマット等、メディアパイプライン内のビデオデコード及びビデオエンコードロジックを構成するためのデータが含まれる。いくつかの実施形態では、メディアパイプライン状態940のためのコマンドが、状態設定のバッチを含む「間接的な」状態要素への1つ又は複数のポインタの使用もサポートする。
【0141】
いくつかの実施形態では、メディアオブジェクトコマンド942は、メディアパイプラインによる処理のためにポインタをメディアオブジェクトに供給する。メディアオブジェクトには、処理すべきビデオデータを含むメモリバッファが含まれる。いくつかの実施形態では、全てのメディアパイプライン状態は、メディアオブジェクトコマンド942を発する前に有効でなければならない。パイプライン状態が構成され、且つメディアオブジェクトコマンド942がキューに入れられると、メディアパイプライン924は、実行コマンド944又は同等の実行イベント(例えば、レジスタ書込み)を介してトリガーされる。次に、メディアパイプライン924からの出力は、3Dパイプライン922又はメディアパイプライン924によって提供される操作によって後処理され得る。いくつかの実施形態では、GPGPU演算は、メディア処理と同様の方法で構成及び実行される。
【0142】
グラフィックソフトウェアアーキテクチャ
【0143】
図10は、いくつかの実施形態による、データ処理システム1000の例示的なグラフィックソフトウェアアーキテクチャを示す。いくつかの実施形態では、ソフトウェアアーキテクチャは、3Dグラフィックアプリケーション1010、オペレーティングシステム1020、及び少なくとも1つのプロセッサ1030を含む。いくつかの実施形態では、プロセッサ1030は、グラフィックプロセッサ1032及び1つ又は複数の汎用プロセッサコア1034を含む。グラフィックアプリケーション1010及びオペレーティングシステム1020はそれぞれ、データ処理システムのシステムメモリ1050で実行される。
【0144】
いくつかの実施形態では、3Dグラフィックアプリケーション1010は、シェーダー命令1012を含む1つ又は複数のシェーダープログラムを含む。シェーダー言語命令は、Direct3Dの高レベルシェーダー言語(HLSL)、OpenGLシェーダー言語(GLSL)等の高レベルシェーダー言語であってもよい。アプリケーションは、汎用プロセッサコア1034による実行に適した機械語での実行可能命令1014も含む。アプリケーションは、頂点データによって規定されるグラフィックオブジェクト1016も含む。
【0145】
いくつかの実施形態では、オペレーティングシステム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)のバージョン等の中間形式で提供される。
【0146】
いくつかの実施形態では、ユーザモードグラフィックドライバ1026は、シェーダー命令1012をハードウェア固有の表現に変換するためのバックエンドシェーダーコンパイラ1027を含む。OpenGL APIが使用される場合に、GLSL高レベル言語のシェーダー命令1012が、コンパイルのためにユーザモードグラフィックドライバ1026に渡される。いくつかの実施形態では、ユーザモードグラフィックドライバ1026は、オペレーティングシステムカーネルモード機能1028を使用して、カーネルモードグラフィックドライバ1029と通信する。いくつかの実施形態では、カーネルモードグラフィックドライバ1029は、グラフィックプロセッサ1032と通信して、コマンド及び命令をディスパッチする。
【0147】
IPコアの実装
【0148】
少なくとも1つの実施形態の1つ又は複数の態様は、プロセッサ等の集積回路内の論理を表す及び/又は規定する、機械可読媒体に格納された代表的なコードによって実装され得る。例えば、機械可読媒体は、プロセッサ内の様々な論理を表す命令を含み得る。機械によって読み取られるとき、命令は、機械に、本明細書で説明している技術を実行するためのロジックを作成させることができる。「IPコア」として知られるそのような表現は、集積回路の構造を記述するハードウェアモデルとして有形の機械可読媒体に格納され得る、集積回路の再利用可能な論理ユニットである。ハードウェアモデルは、様々な顧客又は製造施設に供給され、顧客又は製造施設によって、集積回路を製造する製造機械にハードウェアモデルがロードされる。集積回路は、回路が、本明細書で説明する実施形態のいずれかに関連して説明している処理を行うように製造することができる。
【0149】
図11Aは、一実施形態による、処理を行うための集積回路を製造するために使用され得るIPコア開発システム1100を示すブロック図である。IPコア開発システム1100を使用して、より大きな設計に組み込むことができる、又は集積回路全体(例えば、SOC集積回路)を構築するのに使用できるモジュール式の再利用可能な設計を生成することができる。設計設備1130は、高レベルプログラミング言語(例えば、C/C++)でIPコア設計のソフトウェアシミュレーション1110を生成することができる。ソフトウェアシミュレーション1110は、シミュレーションモデル1112を用いて、IPコアの動作を設計、テスト、及び検証するために使用することができる。シミュレーションモデル1112は、機能、動作、及び/又はタイミングシミュレーションを含み得る。次に、レジスタ転送レベル(RTL)設計1115をシミュレーションモデル1112から作成又は合成することができる。RTL設計1115は、モデル化されたデジタル信号を用いて実行される関連するロジックを含む、ハードウェアレジスタ同士の間のデジタル信号の流れをモデル化する集積回路の動作を抽象化したものである。RTL設計1115に加えて、論理レベル又はトランジスタレベルでのより低いレベルの設計も、作成、設計、又は合成され得る。こうして、初期設計及びシミュレーションの特定の詳細は異なる場合がある。
【0150】
RTL設計1115又は同等物は、設計設備によって、ハードウェア記述言語(HDL)又は物理的設計データの他の何らかの表現であり得るハードウェアモデル1120にさらに合成され得る。HDLをさらにシミュレーション又はテストして、IPコアの設計を検証できる。IPコア設計は、不揮発性メモリ1140(例えば、ハードディスク、フラッシュメモリ、又は任意の不揮発性記憶媒体)を用いて、サードパーティの製造施設1165への配信のために格納することができる。あるいはまた、IPコア設計は、有線接続1150又は無線接続1160を介して(例えば、インターネットを介して)送信してもよい。次に、製造施設1165は、IPコア設計に少なくとも部分的に基づく集積回路を製造し得る。製造された集積回路は、本明細書で説明する少なくとも1つの実施形態に従って処理を行うように構成され得る。
【0151】
図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の表面に結合して、マザーボード、他のチップセット、又はマルチチップモジュール等の他の電気装置に電気信号をルーティングすることができる。
【0152】
いくつかの実施形態では、ロジック1172、1174のユニットは、ロジック1172、1174の間で電気信号をルーティングするように構成されたブリッジ1182と電気的に結合される。ブリッジ1182は、電気信号の経路を提供する高密度相互接続構造であり得る。ブリッジ1182は、ガラス又は適切な半導体材料から構成されるブリッジ基板を含み得る。電気ルーティング機能をブリッジ基板上に形成して、ロジック1172、1174の間のチップ間接続を提供できる。
【0153】
ロジック1172、1174の2つのユニット及びブリッジ1182が示されているが、本明細書で説明する実施形態は、1つ又は複数のダイ上により多い又はより少ない論理ユニットを含むことができる。ロジックが単一のダイに含まれる場合に、ブリッジ1182は除外され得るため、1つ又は複数のダイは、ゼロ又はそれ以上のブリッジによって接続され得る。あるいはまた、複数のダイ又はロジックのユニットを1つ又は複数のブリッジによって接続できる。さらに、複数の論理ユニット、ダイ、及びブリッジを、3次元構成を含む他の可能な構成で一緒に接続できる。
【0154】
図11Cは、基板1180(例えば、ベースダイ)に接続されたハードウェア論理チップレットの複数のユニットを含むパッケージアセンブリ1190を示す。本明細書で説明するようなグラフィック処理ユニット、並列プロセッサ、及び/又は計算アクセラレータは、別々に製造される多様なシリコンチップレットから構成することができる。この文脈では、チップレットは、他のチップレットと共に大きなパッケージに組み立てることができるロジックの個別のユニットを含む、少なくとも部分的にパッケージ化された集積回路である。異なるIPコアロジックを含むチップレットの多様なセットを単一のデバイスに組み立てることができる。さらに、アクティブなインターポーザー技術を用いて、チップレットをベースダイ又はベースチップレットに統合できる。本明細書で説明する概念によって、GPU内の様々なIPの形式の間の相互接続及び通信が可能になる。IPコアは、様々なプロセス技術を用いて製造し、製造中に構成できるため、複数のIPを、特に複数のフレーバー(flavors)IPを含む大規模なSoCで同じ製造プロセスに集約する複雑さを回避できる。複数のプロセス技術を使用できるようにすることで、製品化までの時間が短縮され、複数の製品SKUを形成する費用効果の高い方法が提供される。さらに、集約解除された(disaggregated)IPは独立してパワーゲーティング(power gated)され易くなり、所与のワークロードで使用されていないコンポーネントの電源をオフにできるため、全体的な電力消費を削減できる。
【0155】
ハードウェア論理チップレットは、専用ハードウェア論理チップレット1172、論理又はI/Oチップレット1174、及び/又はメモリチップレット1175を含み得る。ハードウェア論理チップレット1172及び論理又はI/Oチップレット1174は、少なくとも部分的に構成可能なロジック又は固定機能ロジックハードウェアで実装され得、且つ本明細書で説明するプロセッサコア、グラフィックプロセッサ、並列プロセッサ、又は他のアクセラレータ装置のいずれかの1つ又は複数の部分を含むことができる。メモリチップレット1175は、DRAM(例えば、GDDR、HBM)メモリ又はキャッシュ(SRAM)メモリとすることができる。
【0156】
各チップレットは、別個の半導体ダイとして製造され、且つ相互接続構造1173を介して基板1180と結合され得る。相互接続構造1173は、基板1180内の様々なチップレットとロジックとの間で電気信号をルーティングするように構成され得る。相互接続構造1173は、バンプ又はピラー等であるがこれらに限定されない相互接続を含むことができる。いくつかの実施形態では、相互接続構造1173は、例えば、論理、I/O及びメモリチップレットの処理に関連する入力/出力(I/O)信号及び/又は電力又は接地信号等の電気信号をルーティングするように構成され得る。
【0157】
いくつかの実施形態では、基板1180は、エポキシベースの積層基板である。他の実施形態では、基板1180は、他の適切なタイプの基板を含み得る。パッケージアセンブリ1190は、パッケージ相互接続1183を介して他の電気装置に接続することができる。パッケージ相互接続1183を基板1180の表面に結合して、マザーボード、他のチップセット、又はマルチチップモジュール等の他の電気装置に電気信号をルーティングすることができる。
【0158】
いくつかの実施形態では、論理又はI/Oチップレット1174及びメモリチップレット1175は、論理又はI/Oチップレット1174とメモリチップレット1175との間で電気信号をルーティングするように構成されるブリッジ1187を介して電気的に結合され得る。ブリッジ1187は、電気信号の経路を提供する高密度相互接続構造であり得る。ブリッジ1187は、ガラス又は適切な半導体材料から構成されるブリッジ基板を含み得る。電気ルーティング機能をブリッジ基板上に形成して、論理又はI/Oチップレット1174とメモリチップレット1175との間にチップ間接続を提供できる。ブリッジ1187は、シリコンブリッジ又は相互接続ブリッジとも呼ばれ得る。例えば、いくつかの実施形態では、ブリッジ1187は、埋込み型マルチダイ相互接続ブリッジ(EMIB)である。いくつかの実施形態では、ブリッジ1187は、単にあるチップレットから別のチップレットへの直接接続であり得る。
【0159】
基板1180は、I/O1191、キャッシュメモリ1192、及び他のハードウェアロジック1193のためのハードウェアコンポーネントを含むことができる。ファブリック1185を基板1180に埋め込んで、様々な論理チップレットと基板1180内のロジック1191、1193との間の通信を可能にする。一実施形態では、I/O1191、ファブリック1185、キャッシュ、ブリッジ、及び他のハードウェアロジック1193は、基板1180の上に積層されたベースダイに統合することができる。
【0160】
様々な実施形態において、パッケージアセンブリ1190は、ファブリック1185或いは1つ又は複数のブリッジ1187によって相互接続されるより少ない又はより多い数のコンポーネント及びチップレットを含むことができる。パッケージアセンブリ1190内のチップレットは、3D又は2.5D構成で配置され得る。一般に、ブリッジ構造1187を使用して、例えば、論理又はI/Oチップレットとメモリチップレットとの間のポイント間相互接続を容易にすることができる。ファブリック1185を使用して、様々な論理及び/又はI/Oチップレット(例えば、チップレット1172、1174、1191、1193)を他の論理及び/又はI/Oチップレットと相互接続することができる。一実施形態では、基板内のキャッシュメモリ1192は、パッケージアセンブリ1190のグローバルキャッシュ、分散型グローバルキャッシュの一部、又はファブリック1185の専用キャッシュとして機能することができる。
【0161】
図11Dは、一実施形態による、交換可能なチップレット1195を含むパッケージアセンブリ1194を示す。交換可能なチップレット1195は、1つ又は複数のベースチップレット1196、1198の標準化されたスロット内に組み付けることができる。ベースチップレット1196、1198は、本明細書で説明する他のブリッジ相互接続に類似し得る又は例えばEMIBであり得るブリッジ相互接続1197を介して結合できる。メモリチップレットは、ブリッジ相互接続を介して論理又はI/Oチップレットに接続することもできる。I/O及び論理チップレットは、相互接続ファブリックを介して通信できる。ベースチップレットはそれぞれ、ロジック又はI/O又はメモリ/キャッシュのいずれかに対して、標準化されたフォーマットで1つ又は複数のスロットをサポートできる。
【0162】
一実施形態では、SRAM及び電力供給回路を、1つ又は複数のベースチップレット1196、1198に製造することができ、これは、ベースチップレットの上に積み重ねられる交換可能なチップレット1195とは異なるプロセス技術を用いて製造することができる。例えば、ベースチップレット1196、1198は、より大きなプロセス技術を用いて製造することができる一方、交換可能なチップレットは、より小さなプロセス技術を用いて製造することができる。交換可能なチップレット1195のうちの1つ又は複数は、メモリ(例えば、DRAM)チップレットであり得る。電力及び/又はパッケージアセンブリ1194を使用する製品を対象とする性能に基づいて、パッケージアセンブリ1194に異なるメモリ密度を選択できる。さらに、様々なタイプ数の機能ユニットを含む論理チップレットを、製品の対象となる電力及び/又は能力に基づいて組立時に選択することができる。さらに、異なるタイプのIP論理コアを含むチップレットを交換可能なチップレットのスロットに挿入できるため、異なる技術のIPブロックを組み合わせて使用できるハイブリッドプロセッサ設計が可能になる。
【0163】
チップ集積回路の例示的なシステム
【0164】
図12~
図13は、本明細書で説明する様々な実施形態による、1つ又は複数のIPコアを用いて製造され得る例示的な集積回路及び関連するグラフィックプロセッサを示す。図示されているものに加えて、追加のグラフィックプロセッサ/コア、周辺機器インターフェイスコントローラ、又は汎用プロセッサコアを含む他のロジック及び回路が含まれ得る。
【0165】
図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をさらに含む。
【0166】
図13A~
図13Bは、本明細書で説明する実施形態による、SoC内で使用するための例示的なグラフィックプロセッサを示すブロック図である。
図13Aは、一実施形態による、1つ又は複数のIPコアを用いて製造され得るシステムオンチップ集積回路の例示的なグラフィックプロセッサ1310を示す。
図13Bは、一実施形態による、1つ又は複数のIPコアを用いて製造することができるシステムオンチップ集積回路の追加の例示的なグラフィックプロセッサ1340を示す。
図13Aのグラフィックプロセッサ1310は、低電力グラフィックプロセッサコアの例である。
図13Bのグラフィックプロセッサ1340は、高性能グラフィックプロセッサコアの例である。グラフィックプロセッサ1310、1340のそれぞれは、
図12のグラフィックプロセッサ1210の変形であり得る。
【0167】
図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で提供されるようなピクセルシェーダープログラムと同様の処理を行うために使用され得る。
【0168】
グラフィックプロセッサ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コアとインターフェイス接続することが可能になる。
【0169】
図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に実行スレッドをディスパッチするスレッドディスパッチャとして機能し、タイルベースのレンダリングのタイリング処理を加速させ、シーンのレンダリング処理は、例えば、シーン内のローカル空間コヒーレンスを活用する、又は内部キャッシュの使用を最適化するために、イメージ空間で細分化される。
【0170】
ベクトル正規化処理を行うための命令
【0171】
本明細書で説明する実施形態では、ベクトル正規化処理を行うために複数のタイプのISA命令を必要とするのではなく、新しいベクトル正規化命令が、新しいISA命令(例えば、VNM<First Input Register><First Output Register>)として導入されることが提案される。このようにして、VNM命令がグラフィックハードウェアによって内部で分解又は他に表される様々な操作及びその実行は、以下でさらに説明するように最適化することができる。
【0172】
図14は、ベクトル正規化処理1400を行う際に含まれる3つのステップを概念的に示す。ベクトルV
→の正規化ベクトルN
→は、同じ方向のベクトルであるが、ノルム(長さ)が1である。V
→が成分ベクトルA
→、B
→及びC
→を有する3成分ベクトルであると仮定すると、ここで、A
→、B
→、及びC
→は、x、y、及びz方向の直交成分ベクトルであり、V
→=A
→+B
→+C
→であり、N
→は次のように表すことができる。
【0173】
【0174】
図14に示されるように、ベクトル正規化処理を行うための3つのステップには、(i)成分ベクトルのドット積(1410)を実行すること、(ii)成分ベクトルのドット積の和の逆平方根(reciprocal square root)(1420)を実行すること、及び(iii)ベクトルスケーリング(1430)-成分ベクトルとステップ(ii)で計算された逆平方根との乗算が含まれる。
【0175】
図16を参照して以下でさらに説明するように、S(つまり、ベクトル長さの2乗)を計算するための現在のハードウェア実装の1つは、8ワイド単一命令複数データ(SIMD)乗算命令(例えば、SIMD8 MUL)を用いて、D=A
2を計算し、そして2つのSIMD8乗算加算(multiply add)命令(つまり、SIMD8 MAD)を用いてE=D+B
2を計算し、次にS=E+C
2を計算する。
【0176】
シェーダーユニット
【0177】
図15は、一実施形態による、GPU1500のシェーダーユニット1510の高レベルの簡略化されたビューを示すブロック図である。本明細書で説明する様々な例の文脈では、GPU1500内のシェーダーユニット1510等のシェーダーユニット(本明細書では実行ユニット又はEUとも呼ばれる)は、マルチスレッドSIMDプロセッサユニットとして実装される。典型的に、各シェーダーユニットには、数あるシェーダーユニット機能の中でも、拡張数学演算(例えば、サイン、コサイン、平方根、逆平方根、逆元(inverse)/逆数(reciprocal)、2を底とする対数、基数2の指数、べき乗等の超越演算等)を実行する少なくとも2つの処理ユニット(例えば、浮動小数点ユニット(FPU)1511、算術論理演算ユニット(ALU)、及びコプロセッサ1512)、スレッドアービタユニット(図示せず)、及びスレッド毎の汎用レジスタファイル(GRF)1513が含まれる。一実施形態によれば、FPU1511は、SIMD8 FPUであり、コプロセッサ1512は、SIMD2実行ユニットである。
【0178】
図16は、MUL、MAD、及びRSQ命令を用いたベクトル正規化処理のスループットを示している。既存のGPUは、複数の命令を使用してシェーダーコードを処理する。例えば、上記のように、様々なシナリオの多くの3Dゲーム及びグラフィックアプリケーションで頻繁に使用されるベクトル正規化は、1つ又は複数の演算によってグラフィックAPIで表されるが、コンパイラーによって、基礎となるコンピューターアーキテクチャの抽象的なモデルを表す、ISAによってサポートされる一連の命令に変換される。ここでは、新しく提案する単一のISAベクトル正規化命令のパフォーマンス向上を評価する目的で、クロックあたりの命令(IPC)に関するスループットを、(ベクトル正規化が次の7つの命令で表される)ISAと比較する。
・ドット積(SIMD8):MUL、MAD、MAD
・逆平方根(SIMD8):数学(MATH)、
・ベクトルスケーリング(SIMD8):MUL、MUL、MUL。
【0179】
この例の文脈では、SIMD8 FPU1610及びSIMD2コプロセッサ1620は、(各ブロックが1つのクロックサイクルを表す)8個のベクトルに対してベクトル正規化処理を行うために、上記の7つの命令を並列に実行して示されている。この例では、灰色のブロックが1つのスレッドに関連付けられ、塗りつぶされていないブロックが別のスレッドに関連付けられる。第1のスレッドの3成分SIMD8ドット積演算1611は、FPU1610で実行されるSIMD8 MUL、SIMD8 MAD、及びSIMD8 MADによって表される。ドット積演算1611の結果(8乗のベクトル長さ)が利用可能になると、4つの連続的な(back-to-back:引き続いて行われる)SIMD2 RSQ演算によって表され3成分SIMD8逆平方根MATH/RSQRT(又はRSQ)演算1621が、コプロセッサ1620上で実行されて、SIMD8スループットを得る。MATH/RSQRT演算1621の結果が利用可能になると、それら結果は、3つのSIMD8 MUL演算を行うことによって、FPU1610上で行われるベクトルスケーリング演算1613によって使用される。MATH/RSQRT演算1621がコプロセッサ1620によって実行されている間に、別のスレッドが正規化すべき次の8個のベクトルの2乗ベクトル長さを計算するための3成分SIMD8ドット積演算1612は、FPU1610で並列に起動できる。同様に、ベクトルスケーリング演算1613がFPU1610で実行されている間に、(他のスレッドからの)別のRSQ命令のセットをコプロセッサ1620上で並列に起動して、対応するドット積演算1612からの結果に対してMATH/RSQRT演算1622を行うことができる。
【0180】
前述したことに基づいて、SIMD8ベクトル正規化処理を計算するために、FPU1610は6クロックを使用し、コプロセッサ1620は4クロックを使用する。そうして、スループットの観点から見ると、FPU1610は、より多くのクロックを必要とするため、リミッターになる。従って、上記のベクトル正規化処理の実行のスループット(つまり、IPC)は、6クロックでの1つのSIMD8ベクトル正規化命令、つまり0.167のIPCである。
【0181】
S=A2+B2+C2の最適化計算
【0182】
一実施形態によれば、S(ベクトル長さの2乗)の計算は、新しいベクトル正規化命令の一部として、3成分ドット積Sを実行することによって改善される。この文脈では、ベクトル正規化が単一の命令と見なされているため、3つの乗算器を並列に使用でき、3つの入力の加算器を使用して3つの乗算の結果を合計できる。
図19及び
図20を参照して以下でさらに説明するように、面積及び電力の検討事項を考慮して、一実施形態では、この3成分のドット積演算(DP3)は、GPUハードウェアの実行パイプラインでSIMD2演算として実行され、4回繰り返してSIMD8結果を得るが、これは1つのSIMD8 MUL及び2つのSIMD8 MAD演算を用いた上記の実行とは対照的である。一実施形態では、SIMD2 DP3演算は、並列処理すべき2個のベクトルの2セットの入力成分ベクトルがそこから読み取られ、且つ2つの出力(それぞれの2乗ベクトル長さ)が
図17を参照して以下でさらに説明するように出力される特定のレジスタレイアウトを使用して実行される。
【0183】
特定の実施態様に応じて、乗算が2乗演算に制限されるため、乗算器の更なる最適化を実現できる。例えば、Michael J. Schulteらによる“High-Speed Inverse Square Roots(in ARITH ’99 Proceedings of the 14th IEEE Symposium on Computer Arithmetic)”のセクション2.2で説明されている特殊な平方単位を参照されたい。
【0184】
レジスタレイアウト
【0185】
図17は、一実施形態による、SIMD8 DP3演算を行うために、SIMD2 DP3演算の2セットの入力1755及び1765及び2つの出力1750及び1760を4個のレジスタ1710、1720、1730及び1740に格納するためのレジスタレイアウト1700を示す。この例の文脈において、少なくとも1つの新規の特徴は、レジスタ1710、1720、1730、及び1740を使用して、それぞれのSIMD2 DP3演算の入力を格納するとともに、それぞれのSIMD2 DP3演算の出力結果を格納することである。
【0186】
一実施形態によれば、S(2乗ベクトル長さ)は、
図20を参照して以下でさらに説明するように、レジスタレイアウト1700を用いて演算を4回繰り返すことにより、SIMD8 FPUユニットに対する3成分ドット積SIMD2命令として計算できる。この例の文脈では、各レジスタ1710、1720、1730及び1740は、2つの異なるベクトルのそれぞれの成分ベクトル1770a~c及び1780a~cを表す2セットの入力(すなわち、第1の入力セット1755及び第2の入力セット1765)を含み、3成分のドット積(DP3)、S=A
2+B
2+C
2を計算することができる。例えば、2セットの256ビットのレジスタには、32ビットの浮動小数点A、B、C成分ベクトル値(SIMD2)を含めることができ、これは、256ビットレジスタのうちの192ビットを占める。残りの64ビットは、DP3演算を用いてSを計算するための入力を取得する間に、最初は利用されないが、DP3演算の出力(つまり、第1の出力1750及び第2の出力1760)を格納するために使用できる。
【0187】
この例の文脈では、そのような4個の256ビットレジスタ(例えば、レジスタ1710、1720、1730、及び1740)を、4つのSIMD2 DP3命令の入力として使用することができる。演算Sの結果は、SIMD2値として同じ256ビットレジスタの64ビット部分(例えば、第1の出力1750及び第2の出力1760を表す2セットの32ビット浮動小数点値)(この部分は、DP3演算への入力を受けている間には使用されなかった)に書き込むことができる。そうして、4個の256ビットレジスタの64ビット部分(例えば、第1の出力1750及び第2の出力1760)を使用して、(SIMD8 Sの計算に使用される)4つのSIMD2 DP3演算の出力を格納できる。
【0188】
この例の文脈では、一度に8個のベクトルのベクトル正規化をサポートする特定の実施態様の具体例を与えるために、特定のレジスタサイズと入力及び出力サイズとが指定されているが、当業者は、追加のより多い又は少ないベクトル及び/又は精度の低い要件に対応するためにサイズを増減できることを理解するだろう。同様に、より多い又は少ないセットの入力、出力、及びレジスタセットを使用してもよく、レジスタ内のデータの順序付け及び位置付けは、図示されたもの以外であってもよい。例えば、SIMD16ベクトル正規化処理は、8個のレジスタを用いて8つの連続的なSIMD2 DP3命令を実行することで、4個のレジスタ(4セットの成分ベクトル入力を含む)を用いて4つの連続的なSIMD4 DP3を実行することで、又は2つのレジスタ(8セットの成分ベクトル入力を含む)を用いて2つの連続したSIMD8 DP3命令を実行することでサポートできる。
【0189】
図18は、一実施形態による、SIMD8 RSQVS演算を行うために、SIMD2 RSQVS演算の2セットの出力1850及び1860を4個のレジスタ1810、1820、1830及び1840に格納するためのレジスタレイアウト1800を示す。以下でさらに説明するように、一実施形態では、逆平方根関数及びベクトルスケーリング関数を単一のSIMD2逆平方根及びベクトルスケーリング(RSQVS)命令に組み合わせることができる。さらに、従来の逆平方根の実装を使用してもよく、又は
図21A~
図30を参照して説明するように、最適化された逆平方根計算を使用してもよい。
【0190】
以下でさらに詳細に説明するように、一実施形態では、RSQVS演算(本明細書ではRN
A
→N
B
→N
C
→とも呼ばれる)は、入力成分ベクトルA,B,C及び出力2乗ベクトル長さSの特定のデータ編成規則を用いて演算を4回繰り返することにより、SIMD2処理ユニット(例えば、SIMD2コプロセッサ)での逆平方根関数とベクトルスケーリング関数との組合せを表す、最適化された組合せSIMD2命令として計算することができる。例えば、入力成分ベクトルA、B、及びCと、出力2乗ベクトル長さSとは、
図17を参照して上述したレジスタレイアウト1700に従って編成され得る。
【0191】
この例の文脈では、入力成分ベクトルA,B,Cと、出力2乗ベクトル長さSとが、4つのSIMD2 RN
A
→N
B
→N
C
→(RSQVS)演算への入力として8個のベクトルのそれぞれで利用可能であり、SIMD8 RN
A
→N
B
→N
C
→(RSQVS)演算を形成すると想定している。データ編成は、
図17に関して説明したとおり又は別のデータ編成であってよい。
【0192】
この例の文脈では、4つのSIMD2 RSQVS演算から得られる第1の出力セット1850及び第2の出力セット1860(それぞれが正規化成分ベクトルN
A
→、N
B
→、N
C
→の1セットの32ビット浮動小数点値を含む)は、SIMD2 N
A
→N
B
→N
C
→として4個のそれぞれの出力レジスタ1810、1820、1830、及び1840に書き込むことができる。このようにして、レジスタ1810は、8個のベクトルのうちの2個について、成分ベクトルの第1の成分ベクトルセット(例えば、
図17の第1の入力セット1755)及び第2の正規化成分ベクトルセット(例えば、
図17の第2の入力セット1765)を含み、レジスタ1820、1830、及び1840は、他の6つのベクトルの正規化成分ベクトルを含む。一実施形態では、レジスタ1810、1820、1830、及び1840は、256ビットレジスタであり、そのうちの96ビットが、第1の出力セット1850を格納するために使用され、96ビットが第2の出力セット1860を格納するために使用され、残りの64ビットが未使用である。
【0193】
図19は、一実施形態によるベクトル正規化処理を示すフロー図である。この例の文脈では、ベクトル正規化命令が問題のISAで使用できると想定される。ブロック1910において、ベクトル正規化処理を指定する単一のベクトル正規化命令がGPUによって受け取られる。一実施形態によれば、GPU内の実行ユニット(例えば、
図6の実行ユニット(EU)600)は、複数のスレッドのコンテキストを維持する。各スレッドは、命令フェッチユニットからの命令を要求し、それら命令を受け取る。EU内のスレッドコントローラ(例えば、スレッド制御601)は、選択された優先順位ポリシーに基づいてスレッド間でスケジューリングする。スケジューラによってスレッドが選択されると、そのスレッドからの命令が、FPU及びコプロセッサに送信されて実行される。
【0194】
一実施形態では、ベクトル正規化処理は、8個のベクトルに対してベクトル正規化を行うSIMD8ベクトル正規化処理であり、その成分ベクトルは、汎用レジスタファイル(例えば、汎用レジスタファイル153)の1つ又は複数のレジスタに格納され得る。例えば、ベクトルがそれぞれ3つの成分を有していると仮定すると、ベクトルの正規化処理を開始する前に、8個のベクトルのうちの2個のそれぞれのベクトルについての2セットの成分ベクトルA,B,Cを、
図17を参照して上述したように4個のレジスタのそれぞれに格納できる。
【0195】
この例の文脈では、単一のベクトル正規化命令の受け取りに応答して、GPUハードウェアは、4つの3成分SIMD2ドット積(DP3)命令をGPUの第1の処理装置(例えば、SIMD8 FPU)に発し、そして、4つのRSQVS命令(逆数平方根関数とベクトルスケーリング関数との組合せを表す)をGPUの第2の処理装置(例えば、SIMD2コプロセッサ)に発する。
【0196】
ブロック1915において、第1の入力レジスタに格納されたそれぞれの成分ベクトルに対してSIMD2 DP3命令を実行することにより、8個のベクトルのうちの第1及び第2のベクトルの2乗長さ(S1及びS2)が生成される。一実施形態では、単一のベクトル正規化命令は、複数(例えば、4個)の入力レジスタ(例えば、R1、R2、R3、及びR4)のうちの第1のレジスタ(例えば、R1)、及び複数(例えば、4個)の出力レジスタ(R5、R6、R7、及びR8)のうちの第1のレジスタ(例えば、R5)を指定し得、これらの指定されたレジスタはベクトル正規化命令で使用される。ハードウェアは、それぞれのDP3命令が完了すると入力レジスタを自動的にインクリメントし、それぞれのRSQVS命令が完了すると出力レジスタを自動的にインクリメントする。
【0197】
一実施形態によれば、ブロック1915における第1のSIMD2 DP3命令の実行は、(i)第1の入力レジスタ(例えば、レジスタ1710)から8個のベクトルのうちの第1のベクトルの成分ベクトル(例えば、成分ベクトル1770a~c)を読み取り、第1のベクトルの長さの2乗(S1=A1
2+B1
2+C1
2)を計算し、その結果(S1)を第1の出力(例えば、第1の出力1750)として(成分ベクトルが読み取られたのと)同じレジスタ(例えば、レジスタ1710)に格納すること、及び(ii)第1の入力レジスタ(例えば、レジスタ1710)から8個のベクトルのうちの第2のベクトルの成分ベクトル(例えば、成分ベクトル1780a~c)を読み取り、第2のベクトルの長さの2乗(S2=A2
2+B2
2+C2
2)を計算し、その結果(S2)を第2の出力(例えば、第2の出力1760)として(成分ベクトルが読み取られたのと)同じレジスタ(例えば、レジスタ1710)に格納すること、を含む。
【0198】
ブロック1920において、ブロック1915で生成された2乗長さ(S
1及びS
2)と第1の入力レジスタ内の2セットの成分ベクトルとに基づいて、正規化成分ベクトルN
A_1
→、N
B_1
→、N
C_1
→及びN
A_2
→、N
B_2
→、N
C_2
→の形式の2セットの出力(例えば、第1の出力セット1850及び第2の出力セット1860)が、逆平方根関数とベクトルベクトルスケーリング関数との組合せを実行するSIMD2 組合せ逆平方根及びスケーリング(RSQVS)命令を実行することによって生成され、第1の出力レジスタ(例えば、レジスタ1810)に格納される。一実施形態によれば、逆平方根関数は、
図21A~
図30を参照して以下で説明するように最適化される。あるいはまた、従来の相互平方根の実装を使用することもできる。
【0199】
ブロック1925において、第2の入力レジスタに格納されたそれぞれの成分ベクトルに対してSIMD2 DP3命令を実行することにより、8個のベクトルのうちの第3及び第4のベクトルの2乗長さ(S3及びS4)が生成される。一実施形態によれば、ブロック1925におけるこの第2のSIMD2 DP3命令の実行は、(i)第2の入力レジスタ(例えば、レジスタ1720)から8個のベクトルのうちの第3のベクトルの成分ベクトル(例えば、成分ベクトル1770a~c)を読み取り、第3のベクトルの長さの2乗(S3=A3
2+B3
2+C3
2)を計算し、その結果(S3)を第1の出力(例えば、第1の出力1750)として(成分ベクトルが読み取られたのと)同じレジスタ(例えば、レジスタ1720)に格納すること、及び(ii)第2の入力レジスタ(例えば、レジスタ1720)から8個のベクトルのうちの第4のベクトルの成分ベクトル(例えば、成分ベクトル1780a~c)を読み取り、第4のベクトルの長さの2乗(S4=A4
2+B4
2+C4
2)を計算し、その結果(S4)を第2の出力(例えば、第2の出力1760)として(成分ベクトルが読み取られたのと)同じレジスタ(例えば、レジスタ1720)に格納すること、を含む。
【0200】
ブロック1930において、ブロック1925で生成された2乗長さ(S3及びS4)と第2の入力レジスタ内の2セットの成分ベクトルとに基づいて、正規化成分ベクトルNA_3
→、NB_3
→、NC_3
→及びNA_4
→、NB_4
→、NC_4
→の形式の2セットの出力(例えば、第1の出力セット1850及び第2の出力セット1860)が、第2のSIMD2 RSQVS命令を実行することによって生成され、第2の出力レジスタ(例えば、レジスタ1820)に格納される。
【0201】
ブロック1935において、第3の入力レジスタに格納されたそれぞれの成分ベクトルに対してSIMD2 DP3命令を実行することにより、8個のベクトルのうちの第5及び第6のベクトルの2乗長さ(S5及びS6)が生成される。一実施形態によれば、ブロック1935におけるこの第3のSIMD2 DP3命令の実行は、(i)第3の入力レジスタ(例えば、レジスタ1730)から8個のベクトルのうちの第5のベクトルの成分ベクトル(例えば、成分ベクトル1770a~c)を読み取り、第5のベクトルの長さの2乗(S5=A5
2+B5
2+C5
2)を計算し、その結果(S5)を第1の出力(例えば、第1の出力1750)として(成分ベクトルが読み取られたのと)同じレジスタ(例えば、レジスタ1730)に格納すること、及び(ii)第3の入力レジスタ(例えば、レジスタ1730)から8個のベクトルのうちの第6のベクトルの成分ベクトル(例えば、成分ベクトル1780a~c)を読み取り、第6のベクトルの長さの2乗(S6=A6
2+B6
2+C6
2)を計算し、その結果(S6)を第2の出力(例えば、第2の出力1760)として(成分ベクトルが読み取られたのと)同じレジスタ(例えば、レジスタ1730)に格納すること、を含む。
【0202】
ブロック1940において、ブロック1935で生成された2乗長さ(S5及びS6)と第3の入力レジスタ内の2セットの成分ベクトルとに基づいて、正規化成分ベクトルNA_5
→、NB_5
→、NC_5
→及びNA_6
→、NB_6
→、NC_6
→の形式の2セットの出力(例えば、第1の出力セット1850及び第2の出力セット1860)が、第3のSIMD2 RSQVS命令を実行することによって生成され、第3の出力レジスタ(例えば、レジスタ1830)に格納される。
【0203】
ブロック1945において、第4の入力レジスタに対してSIMD2 DP3命令を実行することにより、8個のベクトルのうちの第7及び第8のベクトルの2乗長さ(S7及びS8)が生成される。一実施形態によれば、ブロック1935におけるこの第4のSIMD2 DP3命令の実行は、(i)第4の入力レジスタ(例えば、レジスタ1740)から8個のベクトルのうちの第7のベクトルの成分ベクトル(例えば、成分ベクトル1770a~c)を読み取り、第7のベクトルの長さの2乗(S7=A7
2+B7
2+C7
2)を計算し、その結果(S7)を第1の出力(例えば、第1の出力1750)として(成分ベクトルが読み取られたのと)同じレジスタ(例えば、レジスタ1740)に格納すること、及び(ii)第4の入力レジスタ(例えば、レジスタ1740)から8個のベクトルのうちの第8のベクトルの成分ベクトル(例えば、成分ベクトル1780a~c)を読み取り、第8のベクトルの長さの2乗(S8=A8
2+B8
2+C8
2)を計算し、その結果(S8)を第2の出力(例えば、第2の出力1760)として(成分ベクトルが読み取られたのと)同じレジスタ(例えば、レジスタ1740)に格納すること、を含む。
【0204】
ブロック1950において、ブロック1945で生成された2乗長さ(S7及びS8)と第4の入力レジスタ内の2セットの成分ベクトルとに基づいて、正規化成分ベクトルNA_7
→、NB_7
→、NC_7
→及びNA_8
→、NB_8
→、NC_8
→の形式の2セットの出力(例えば、第1の出力セット1850及び第2の出力セット1860)が、第4のSIMD2 RSQVS命令を実行することによって生成され、第4の出力レジスタ(例えば、レジスタ1840)に格納される。この時点で処理が完了し、24個の正規化成分ベクトル全てが4つの出力レジスタで使用可能になる。
【0205】
この例の文脈では、ベクトル正規化命令は、8個のベクトル対して選ばれた2個のベクトルを一度に演算し、4つの入力レジスタ及び4つの出力レジスタを使用すると想定されるが、代替実施形態では、ベクトル正規化処理を演算するベクトルVの数、並列に処理されるVベクトルの数N、並びに入力及び出力レジスタの数V/Nは、他の数にすることができる。例えば、レジスタサイズ及び成分ベクトルサイズを一定に保ち、8個の入力レジスタ及び8個の出力レジスタを用いて、8つのSIMD2 DP3命令及び8つのSIMD2 RSQVS命令を実行することにより、16個のベクトルを一度に2個処理できる。同様に、本明細書で説明する様々な例の文脈では、256ビットのレジスタサイズと32ビットの成分ベクトルサイズとが想定されるが、代替実施形態では、これらのサイズの一方又は両方がより大きく又は小さくてもよい。例えば、512ビットのレジスタサイズを想定すると、2個の入力レジスタ及び2個の出力レジスタを用いて、2つのSIMD4 DP3命令及び2つのSIMD4 RSQVS命令を実行することにより、32ビットでそれぞれ表される8個の3成分ベクトルを一度に4個処理できる。
【0206】
図20は、一実施形態による、DP3及びRSQVS命令を用いるベクトル正規化処理のスループットを示す。この例の文脈では、SIMD2 FPU2010及びSIMD2コプロセッサ2020が、2つの命令を並列に実行して、(各ブロックが1クロックサイクルを表す)8個のベクトルに対してベクトル正規化処理を行うように示されている。
【0207】
FPU2010に対して4つの3成分SIMD2ドット積演算(DP3)が実行されて、8個のベクトルのそれぞれの2乗された長さが生成される。それぞれの4つのSIMD2 RSQVS命令が依存する2乗長さを利用できるため、それら演算は、コプロセッサ2020で実行できる。
【0208】
前述したことに基づいて、FPU2010は、SIMD8 DP3演算を効果的に計算するために4クロックを使用し、コプロセッサ2020は、SIMD8 RSQVS演算を計算するために4クロックを使用する。そのため、スループットの観点から見ると、FPU2020とコプロセッサとの両方が、両方とも等しい数のクロックを使用するので、等しいリミッターである。従って、提案する新しいVNM(Vector Normalization)命令の実装のスループット(つまり、IPC)は、1つのSIMD8 VNM命令/4クロック、つまり0.25のIPCである。そのため、上記の既存のベクトル正規化の実装に対する新しい単一のVNM命令のIPCの改善は50%である。実行クロックの削減に関して、新しいVNM命令は、クロック数を6クロックから4クロックに2つ削減し、これは、上述したベクトル正規化の7つの命令の実装と比較して、33.33%(2/6*100=33.33%)の実行クロックの削減を表す。
【0209】
新しいVNM命令のレジスタファイル帯域幅は、上述した7つの命令実行の文脈で3回の読取り操作及び2回のレジスタ再利用と比較して、レジスタファイルからのレジスタの8回の読取り操作を含む。そのため、全体として、2つの実行の間でレジスタファイルの帯域幅に変化はない。
【0210】
逆平方根の最適化された計算
【0211】
図21A~
図21Bは、本明細書で説明する実施形態による、追加の例示的なグラフィックプロセッサロジックを示す。
図21Aは、
図12のグラフィックプロセッサ1210内に含まれ得るグラフィックコア2100を示し、
図13Bのように、統合されたシェーダーコア1355A~1355Nであってもよい。
図21Bは、マルチチップモジュールへの配置に適した高度に並列な汎用グラフィック処理装置2130を示す。
【0212】
図21Aに示されるように、グラフィックコア2100は、グラフィックコア2100内の実行リソースに共通の共有命令キャッシュ2102、テクスチャユニット2118、及びキャッシュ/共有メモリ2120を含む。グラフィックコア2100は複数のスライス2101A~1401N又は各コアのパーティションを含むことができ、グラフィックプロセッサはグラフィックコア2100の複数のインスタンスを含むことができる。スライス2101A~1401Nは、ローカル命令キャッシュ2104A~2104N、スレッドスケジューラ2106A~2106N、スレッドディスパッチャ2108A~2108N、及び1組のレジスタ2110Aを含むサポートロジックを含むことができる。論理演算を行うために、スライス2101A~2101Nは、追加の関数ユニット(AFU2112A~2112N)、浮動小数点ユニット(FPU2114A~2114N)、整数演算論理ユニット(ALU2116A~2116N)、アドレス計算ユニット(ACU2113A~2113N)、倍精度浮動小数点ユニット(DPFPU2115A~2115N)、及び行列処理ユニット(MPU2117A~2117N)のセットを含むことができる。
【0213】
計算ユニットのいくつかは、特定の精度で動作する。例えば、FPU2114A~2114Nは単精度(32ビット)及び半精度(16ビット)の浮動小数点演算を行うことができ、DPFPU2115A~2115Nは倍精度(64ビット)の浮動小数点演算を行うことができる。ALU2116A~2116Nは、8ビット、16ビット、及び32ビットの精度で可変精度整数演算を行うことができ、混合精度演算のために構成できる。MPU2117A~2117Nは、半精度浮動小数点演算及び8ビット整数演算を含む混合精度行列演算のために構成することもできる。MPU2117A~2117Nは、様々な行列演算を行って、機械学習アプリケーションフレームワークを高速化でき、これには、加速化され一般化された行列間乗算(GEMM)のサポートの有効化が含まれる。AFU2112A~2112Nは、三角演算(例えば、正弦、余弦等)を含む、浮動小数点又は整数ユニットではサポートされていない追加の論理演算を行うことができる。
【0214】
図21Bに示されるように、汎用処理装置(GPGPU)2130は、グラフィック処理装置のアレイによって実行される高並列計算演算を可能にするように構成され得る。さらに、GPGPU2130をGPGPUの他のインスタンスに直接リンクして、マルチGPUクラスタを作成し、特に深層ニューラルネットワークの訓練速度を向上させることができる。GPGPU2130は、ホストプロセッサとの接続を可能にするためのホストインターフェイス2132を含む。一実施形態では、ホストインターフェイス2132は、PCIエクスプレスインターフェイスである。ただし、ホストインターフェイスは、ベンダー固有の通信インターフェイス又は通信ファブリックにすることもできる。GPGPU2130は、ホストプロセッサからコマンドを受け取り、グローバルスケジューラ2134を使用して、それらのコマンドに関連する実行スレッドを1組の計算クラスタ2136A~2136Hに分配する。計算クラスタ2136A~2136Hは、キャッシュメモリ2138を共有する。キャッシュメモリ2138は、計算クラスタ2136A~2136H内のキャッシュメモリのためのより高いレベルのキャッシュとして機能することができる。
【0215】
GPGPU2130は、1組のメモリコントローラ2142A~2142Bを介して計算クラスタ2136A~2136Hと結合されるメモリ2134A~2134Bを含む。様々な実施形態において、メモリ2134A~2134Bは、ダイナミックランダムアクセスメモリ(DRAM)、又はグラフィックダブルデータレート(GDDR)メモリを含む同期グラフィックスランダムアクセスメモリ(SGRAM)等のグラフィックランダムアクセスメモリを含む様々なタイプのメモリ装置を含むことができる。
【0216】
一実施形態では、計算クラスタ2136A~2136Hはそれぞれ、
図21のグラフィックコア2100等の1組のグラフィックコアを含み、これは、機械学習計算に適した精度範囲で計算演算を行うことができる複数のタイプの整数及び浮動小数点論理ユニットを含むことができる。例えば、一実施形態では、計算クラスタ2136A~2136Hのそれぞれにおける浮動小数点ユニットの少なくともサブセットは、16ビット又は32ビット浮動小数点演算を行うように構成することができる一方、浮動小数点ユニットの異なるサブセットは、64ビット浮動小数点演算を行うように構成することができる。
【0217】
GPGPU2130の複数のインスタンスは、計算クラスタとして動作するように構成することができる。同期及びデータ交換のために計算クラスタによって使用される通信メカニズムは、実施形態によって異なる。一実施形態では、GPGPU2130の複数のインスタンスは、ホストインターフェイス2132を介して通信する。一実施形態では、GPGPU2130は、GPGPU2130をGPUリンク2140と結合するI/Oハブ2139を含み、GPUリンク2140はGPGPUの他のインスタンスへの直接接続を可能にする。一実施形態では、GPUリンク2140は、GPGPU2130の複数のインスタンスの間の通信及び同期を可能にする専用のGPU間(GPU-to-GPU)ブリッジに結合される。一実施形態では、GPUリンク2140は、高速相互接続と結合して、データを他のGPGPU又は並列プロセッサに送受信する。一実施形態では、GPGPU2130の複数のインスタンスは、別個のデータ処理システムに配置され、ホストインターフェイス2132を介してアクセス可能なネットワーク装置を介して通信する。一実施形態では、GPUリンク2140は、ホストインターフェイス2132に加えて、又はその代わりとして、ホストプロセッサへの接続を可能にするように構成できる。
【0218】
GPGPU2130の図示の構成は、ニューラルネットワークを訓練するように構成することができるが、一実施形態は、高性能又は低電力の推論プラットフォーム内での展開のために構成できるGPGPU2130の代替構成を提供する。推論構成では、GPGPU2130に含まれる計算クラスタ2136A~2136Hは、訓練構成に比べて少なくなる。さらに、メモリ2134A~2134Bに関連するメモリ技術は、推論構成と訓練構成との間で異なる場合があり、より高い帯域幅のメモリ技術が訓練構成に専念する。一実施形態では、GPGPU2130の推論構成は、推論する特定の命令をサポートすることができる。例えば、推論構成は、展開されたニューラルネットワークの推論操作中に一般的に使用される、1つ又は複数の8ビット整数ドット積命令のサポートを提供できる。
【0219】
図22は、浮動小数点拡張数学演算を行うために実行ユニット2210を使用するコンピュータ装置2200を示す。コンピュータ装置2200(例えば、スマートウェアラブル装置、仮想現実(VR)装置、ヘッドマウントディスプレイ(HMD)、モバイルコンピュータ、モノのインターネット(IoT)装置、ラップトップコンピュータ、デスクトップコンピュータ、サーバコンピュータ等)は、
図1の処理システム100と同じであり得、従って、簡潔性、明確性、及び理解を容易にするために、
図1~
図13Bを参照して上で述べた詳細の多くは、以下でさらに議論せず、繰り返さない。図示のように、一実施形態では、コンピュータ装置2200は、ホスティング実行ユニット2210として示される。
【0220】
図示されるように、一実施形態では、実行ユニット2210は、グラフィック処理装置(「GPU」又は「グラフィックプロセッサ」)2214によってホストされる。さらに他の実施形態では、実行ユニット2210は、中央処理装置(「CPU」又は「アプリケーションプロセッサ」)2212のファームウェア又はその一部によってホストされ得る。簡潔性、明確性、及び理解を容易にするために、この文書の残り全体を通して、実行ユニット2210を、GPU2214の一部として議論し得るが、実施形態はそのように限定されない。
【0221】
コンピュータ装置2200は、サーバコンピュータ、デスクトップコンピュータ等の大規模コンピュータシステム等、任意の数及びタイプの通信装置を含むことができ、さらにセットトップボックス(例えば、インターネットベースのケーブルテレビセットトップボックス等)、全地球測位システム(GPS)ベースの装置等を含むことができる。コンピュータ装置2200は、スマートフォン、携帯情報端末(PDA)、タブレットコンピュータ、ラップトップコンピュータ、電子書籍リーダー、スマートテレビ、テレビプラットフォーム、ウェアラブル装置(例えば、眼鏡、時計、ブレスレット、スマートカード、ジュエリー、衣料品等)、メディアプレーヤ等を含む携帯電話等の通信装置として機能するモバイルコンピュータ装置を含むことができる。例えば、一実施形態では、コンピュータ装置2200は、システムオンチップ(「SoC」又は「SOC」)等の集積回路(「IC」)をホストし、コンピュータ装置2200の様々なハードウェア及び/又はソフトウェアコンポーネントをシングルチップに統合するコンピュータプラットフォームを使用するモバイルコンピュータ装置を含むことができる。
【0222】
図示されるように、一実施形態では、コンピュータ装置2200は、(限定なしに)GPU2214、グラフィックドライバ(「GPUドライバ」、「グラフィックドライバロジック」、「ドライバロジック」、ユーザモードドライバ(UMD)、UMD、ユーザモードドライバフレームワーク(UMDF)、UMDF、又は単に「ドライバ」とも呼ばれる)2216、CPU2212、メモリ2208、ネットワーク装置、ドライバ等だけでなく、タッチスクリーン、タッチパネル、タッチパッド、仮想又は通常のキーボード、仮想又は通常のマウス、ポート、コネクタ等の入出力(I/O)ソース2204等の任意の数及びタイプのハードウェア及び/又はソフトウェアコンポーネントを含むことができる。
【0223】
コンピュータ装置2200は、コンピュータ装置2200のハードウェア及び/又は物理リソースとユーザとの間のインターフェイスとして機能するオペレーティングシステム(OS)2206を含み得る。CPU2212は1つ又は複数のプロセッサを含むことができ、GPU2214は1つ又は複数のグラフィックプロセッサを含むことができると企図される。
【0224】
「ノード」、「コンピューティングノード」、「サーバ」、「サーバ装置」、「クラウドコンピュータ」、「クラウドサーバ」、「クラウドサーバコンピュータ」、「マシン」、「ホストマシン」、「装置」、「コンピュータ装置」、「コンピュータ」、「コンピュータシステム」等の用語は、この文書全体を通して交換可能に使用され得ることに留意されたい。さらに、「アプリケーション」、「ソフトウェアアプリケーション」、「プログラム」、「ソフトウェアプログラム」、「パッケージ」、「ソフトウェアパッケージ」等の用語は、この文書全体を通して交換可能に使用され得ることに留意されたい。また、「ジョブ」、「入力」、「要求」、「メッセージ」等の用語は、この文書全体を通して交換可能に使用され得る。
【0225】
グラフィックパイプラインは、グラフィックコプロセッサ設計で実装でき、CPU2212は、CPU2212に含まれるか、又はCPU2212と同じ場所に配置され得るGPU2214と連携するように設計される。一実施形態では、GPU2214は、グラフィックレンダリングに関連する従来の機能を実行するための任意の数及びタイプの従来のソフトウェア及びハードウェアロジックだけでなく、任意の数及びタイプの命令を実行するための新しいソフトウェア及びハードウェアロジックを使用できる。
【0226】
前述したように、メモリ2208は、オブジェクト情報を有するアプリケーションデータベースを含むランダムアクセスメモリ(RAM)を含み得る。メモリコントローラハブは、RAM内のデータにアクセスし、グラフィックパイプライン処理のためにそのデータをGPU2214に転送することができる。RAMは、ダブルデータレートRAM(DDR RAM)、拡張データ出力RAM(EDO RAM)等を含み得る。CPU2212は、ハードウェアグラフィックパイプラインと相互作用して、グラフィックパイプライン機能を共有する。
【0227】
処理したデータは、ハードウェアグラフィックパイプラインのバッファに格納され、状態情報はメモリ2208に格納される。結果として得られる画像は、画像を表示するための表示コンポーネント等のI/Oソース2204に転送される。表示装置は、情報をユーザに表示するための陰極線管(CRT)、薄膜トランジスタ(TFT)、液晶ディスプレイ(LCD)、有機発光ダイオード(OLED)アレイ等のような様々なタイプのものであり得ると企図される。
【0228】
メモリ2208は、バッファ(例えば、フレームバッファ)の予め割り当てられた領域を含み得るが、当業者であれば、実施形態はそのように限定されず、より低いグラフィックパイプラインにアクセス可能な任意のメモリを使用してもよいことを理解するはずである。コンピュータ装置2200は、
図1で参照されるように、1つ又は複数のI/Oソース2204等のプラットフォームコントローラハブ(PCH)130をさらに含み得る。
【0229】
CPU2212は、コンピュータシステムが実施するソフトウェアルーチンを何でも実行するために、命令を実行するための1つ又は複数のプロセッサを含み得る。命令には、データに対して実行される何らかの操作(演算)が含まれることがよくある。データと命令との両方がシステムメモリ2208及び関連するキャッシュに格納され得る。キャッシュは、典型的に、システムメモリ2208よりも待ち時間が短くなるように設計される。例えば、システムメモリ2208が低速のダイナミックRAM(DRAM)セルで構築され得るのに対し、キャッシュは、プロセッサと同じシリコンチップに統合され、及び/又は高速のスタティックRAM(SRAM)セルで構築され得る。システムメモリ2208ではなく、より頻繁に使用される命令及びデータをキャッシュに格納する傾向があることにより、コンピュータ装置2200の全体的なパフォーマンス効率が向上する。いくつかの実施形態では、GPU2214は、CPU2212の一部(物理CPUパッケージの一部等)として存在し得ると企図され、その場合に、メモリ2208は、CPU2212及びGPU2214によって共有されるか、又は分離されたままであり得る。
【0230】
システムメモリ2208は、コンピュータ装置2200内の他のコンポーネントが利用できるようにすることができる。例えば、様々なインターフェイス(例えば、キーボード及びマウス、プリンタポート、ローカルエリアネットワーク(LAN)ポート、モデムポート等)からコンピュータ装置2200に受信された、又はコンピュータ装置2200(例えば、ハードディスクドライブ)の内部ストレージ要素から取得された任意のデータ(例えば、入力グラフィックデータ)は、大抵の場合、ソフトウェアプログラムの実装の際に1つ又は複数のプロセッサによって操作される前にシステムメモリ2208に一時的にキューイングされる。同様に、ソフトウェアプログラムがコンピュータ装置2200からコンピュータシステムインターフェイスの1つを介して外部エンティティに送信するか、又は内部ストレージ要素に格納する必要があると判断したデータは、大抵の場合、送信又は格納前にシステムメモリ2208に一時的にキューイングされる。
【0231】
さらに、例えば、PCHは、そのようなデータがシステムメモリ2208とその適切な対応するコンピュータシステムインターフェイス(及び、コンピュータシステムがそのように設計されている場合に内部記憶装置)との間で適切に渡されることを保証するために使用され得、且つそれ自体と確認されたI/Oソース/装置2204との間の双方向ポイントツーポイントリンクを有し得る。同様に、MCHは、システムメモリ2208が、(互いに時間的に近接して発生し得る)CPU2212及びGPU2214、インターフェイス及び内部ストレージ要素の間でアクセスする様々な競合要求を管理するために使用できる。
【0232】
I/Oソース2204は、コンピュータ装置2200との間でデータを転送するために実装される(例えば、ネットワーキングアダプタ)、又はコンピュータ装置2200内の大規模な不揮発性ストレージ(例えば、ハードディスクドライブ)のための1つ又は複数のI/O装置を含むことができる。英数字及び他のキーを含むユーザ入力装置を使用して、情報及びコマンド選択をGPU2214に通信できる。別のタイプのユーザ入力装置は、方向情報及びコマンド選択をGPU2214に伝達し、且つ表示装置上のカーソルの動きを制御するマウス、トラックボール、タッチスクリーン、タッチパッド、又はカーソル方向キー等のカーソルコントロールである。コンピュータ装置2200のカメラ及びマイクアレイを使用して、ジェスチャを観察し、音声及びビデオを記録し、視覚及び音声コマンドを送受信することができる。
【0233】
コンピュータ装置2200は、LAN、ワイドエリアネットワーク(WAN)、メトロポリタンエリアネットワーク(MAN)、パーソナルエリアネットワーク(PAN)、Bluetooth(登録商標)、クラウドネットワーク、モバイルネットワーク(例えば、第3世代(3G)、第4世代(4G)等)、イントラネット、インターネット等の、ネットワークへのアクセスを提供するネットワークインターフェイスをさらに含み得る。ネットワークインターフェイスには、例えば、1つ又は複数のアンテナを表し得るアンテナを有するワイヤレスネットワークインターフェイスが含まれ得る。ネットワークインターフェイスには、例えば、イーサネットケーブル、同軸ケーブル、光ファイバーケーブル、シリアルケーブル、パラレルケーブル等であり得るネットワークケーブルを介してリモート装置と通信する有線ネットワークインターフェイスも含まれる。
【0234】
ネットワークインターフェイスは、例えば、IEEE802.11b及び/又はIEEE802.11g規格に準拠することにより、LANへのアクセスを提供することができ、及び/又は無線ネットワークインターフェイスは、例えば、Bluetooth(登録商標)規格に準拠することにより、パーソナルエリアネットワークへのアクセスを提供することができる。規格の以前の及び後続のバージョンを含む他の無線ネットワークインターフェイス及び/又はプロトコルもサポートされ得る。無線LAN規格を介した通信に加えて、又はその代わりに、ネットワークインターフェイスは、例えば、時分割、多重アクセス(TDMA)プロトコル、GSM(Global Systems for Mobile Communications)プロトコル、符号分割、多重アクセス(CDMA)プロトコル、及び/又は他のタイプのワイヤレス通信プロトコル等を用いてワイヤレス通信を提供する。
【0235】
ネットワークインターフェイスは、モデム、ネットワークインターフェイスカード等の1つ又は複数の通信インターフェイス、又はイーサネット、トークンリングへの結合に使用されるもの等の他のよく知られたインターフェイス装置、又は、例えば、LAN又はWANをサポートするための通信リンクを提供する目的の他のタイプの物理的な有線又は無線のアタッチメントを含むことができる。このようにして、コンピュータシステムは、例えば、イントラネット又はインターネットを含む従来のネットワークインフラストラクチャを介して、いくつかの周辺装置、クライアント、コントロールサーフェス、コンソール、又はサーバに結合することもできる。
【0236】
上述した例よりも少ないか又は多い設備を備えたシステムは、特定の実施態様にとって好ましい場合があることを理解されたい。従って、コンピュータ装置2200の構成は、価格の制約、性能要件、技術的改善、又は他の状況等の多数の要因に応じて、実施態様毎に異なり得る。電子装置又はコンピュータシステム2200の例には、(限定なしに)モバイル装置、携帯情報端末、モバイルコンピュータ装置、スマートフォン、携帯電話、ハンドセット、一方向ポケットベル、双方向ポケットベル、メッセージング装置、コンピュータ、パーソナルコンピュータ(PC)、デスクトップコンピュータ、ラップトップコンピュータ、ノートブックコンピュータ、ハンドヘルドコンピュータ、タブレットコンピュータ、サーバ、サーバアレイ又はサーバファーム、Webサーバ、ネットワークサーバ、インターネットサーバ、ワークステーション、ミニコンピュータ、メインフレームコンピュータ、スーパーコンピュータ、ネットワーク機器、Web機器、分散型コンピュータシステム、マルチプロセッサシステム、プロセッサベースのシステム、家電製品、プログラム可能な家電製品、テレビ、デジタルテレビ、セットトップボックス、ワイヤレスアクセスポイント、基地局、加入者局、モバイル加入者センター、無線ネットワークコントローラ、ルーター、ハブ、ゲートウェイ、ブリッジ、スイッチ、マシン、又はこれらの組合せが含まれ得る。
【0237】
実施形態は、ペアレントボード(parent-board)、ハードワイヤードロジック、メモリ装置によって格納され且つマイクロプロセッサによって実行されるソフトウェア、ファームウェア、特定用途向け集積回路(ASIC)、及び/又はフィールドプログラマブルゲートアレイ(FPGA)を用いて相互接続される1つ又は複数のマイクロチップ又は集積回路のうちの任意の1つ又は組合せとして実装され得る。「ロジック(論理)」という用語は、例として、ソフトウェア又はハードウェア、及び/又はソフトウェアとハードウェアとの組合せを含み得る。
【0238】
実施形態は、例えば、機械実行可能命令を格納した1つ又は複数の機械可読媒体を含み得るコンピュータプログラム製品として提供され得、命令がコンピュータ、コンピュータのネットワーク、又は他の電子装置等の1つ又は複数の機械によって実行されたときに、本明細書で説明する実施形態による動作を行う1つ又は複数の機械をもたらし得る。機械可読媒体には、フロッピーディスク、光ディスク、CD-ROM(コンパクトディスク読み取り専用メモリ)、及び光磁気ディスク、ROM、RAM、EPROM(消去可能なプログラム可能な読み取り専用メモリ)、EEPROM(電気的消去可能、プログラム可能な読み取り専用メモリ)、磁気カード又は光学式カード、フラッシュメモリ、又は機械実行可能な命令を格納するのに適した他のタイプの非一時的な機械可読媒体が含まれ得るが、これらに限定されるものではない。
【0239】
さらに、実施形態は、コンピュータプログラム製品としてダウンロードすることができ、プログラムは、通信リンク(例えば、モデム及び/又はネットワーク接続)を介して、搬送波又は他の伝播媒体によって具体化及び/又は変調される1つ又は複数のデータ信号によって、リモートコンピュータ(例えば、サーバ)から要求側コンピュータ(例えば、クライアント)に転送することができる。
【0240】
一実施形態によれば、実行ユニット2210は、単一点浮動小数点拡張数学演算を行うための1つ又は複数のFPUを含む。殆どの単一点浮動小数点数学演算では、指数に対する演算の実行は比較的簡単である。ただし、仮数に対して演算を行うのは比較的困難である。
【0241】
図23は、単精度浮動小数点フォーマットの一実施形態を示す。
図23に示されるように、単精度(SP)浮動小数点(FP)は32ビットを含み、ビット31は符号成分2305を表し、ビット30~23は、指数成分2310を表し、そして、ビット22~0は、仮数成分2320を表す。一実施形態では、このフォーマットによって表される実数値は、以下のように与えることができる。
【数2】
ここで、b
nは、SP FPフォーマットのn番目のビット位置のビットを表す。
【0242】
例えば、
図23に示されるSP FP数の実数値は、
【数3】
である。一実施形態によれば、FP数学演算の最適化が実施される。そのような実施形態では、最適化が仮数成分2320に対して実行され、これ以降、Y=f(X)によって参照され、ここで、Xは入力仮数であり、Yは出力仮数である。
【0243】
図24は、浮動小数点拡張数学演算を行うためのプロセス2400の一実施形態を示すフロー図である。プロセス2400は、ハードウェア(例えば、回路、専用ロジック、プログラム可能ロジック等)、ソフトウェア(処理装置上で実行される命令等)、又はそれらの組合せを含み得る処理ロジックによって実行され得る。一実施形態では、プロセス2400は、FPU2211で実行される1つ又は複数の命令によって行うことができる。プロセス2400は、提示を簡潔且つ明確にするために線形シーケンスで示されているが、それらのいくつでも、並行して、非同期で、又は異なる順序で実行することができると企図される。簡潔性、明確性、及び理解を容易にするために、
図1~
図23を参照して議論した詳細の多くは、ここでは議論又は繰り返さない。
【0244】
説明を簡単にするために、プロセス2400は、平方根演算の実行を参照して説明する。ただし、残りの演算(逆平方根、除算、逆数、正弦/余弦、指数、対数等)については、平方根の実装に基づいて以下で説明する。プロセス2400は、オペランドに対してFP演算を行うために1つ又は複数の命令を受け取る処理ブロック2410で開始する。処理ブロック2420において、FP演算は、オペランドの指数成分2310に対して実行される。例えば、指数の平方根は次のように表すことができる。
esq=(e-127)/2
ここで、eは入力SP FP数(以下、Xと呼ぶ)の8ビットの指数(ビット30~23)である。
【0245】
(e-127)が偶数であると判定すると、esq計算は、esq=(e-127)/2を含む。ただし、(e-127)が奇数であると判定すると、esq=(e-128)/2となり、入力仮数が2倍にされる。入力SP FP数(X)表現が、X=(-1)s×2(e-127)×1.mとして提供されると、平方根演算の結果(以下、Yと呼ぶ)は次のように与えられる(例えば、Xが正のSP FP数であると仮定)。
Y=√X=(-1)S×2(e-127)/2×√(1.m)
=(-1)S×2(e-128)/2×√(2×1.m)、(e-127)が奇数の場合。
【0246】
こうして、仮数の平方根は、以下のように表すことができる。
1.msq=√(1.m)
ここで、msqは結果として得られる平方根SP FP数(Y)の23ビットの仮数部(ビット22~0)であり、mは入力SP FP数(X)の23ビットの仮数部(ビット22~0)である。
その結果、msqの計算には、(e-127)が偶数の場合に、1.msq=√(1.m)が含まれ、(e-127)が奇数の場合に、1.msq=√(2×1.m)が含まれる(例えば、入力の仮数に2を掛けて、結果の指数(esq)を非小数の2進数にするためである。)。
【0247】
処理ブロック2430において、FP演算は、オペランドの仮数成分2320に対して行われる。入力SP FP数の仮数のSP FP平方根を得るために、入力仮数は、1.m(24ビットの小数の2進数)としての仮数の10進表現の代わりに、範囲が[223,224-1]の24ビット(X)の符号なし整数と見なされる。
【0248】
図25は、仮数成分に対して浮動小数点拡張数学演算を行うためのプロセス2500の一実施形態を示すフロー図である。プロセス2500は、ハードウェア(例えば、回路、専用ロジック、プログラム可能ロジック等)、ソフトウェア(処理装置上で実行される命令等)、又はそれらの組合せを含み得る処理ロジックによって実行され得る。一実施形態では、プロセス2500は、FPU2211で実行される1つ又は複数の命令によって行うことができる。プロセス2500は、提示を簡潔且つ明瞭にするために線形シーケンスで示されているが、それらのいくつでも、並行して、非同期で、又は異なる順序で実行することができると企図される。簡潔性、明確性、及び理解を容易にするために、
図1~
図17を参照して議論した詳細の多くは、ここでは議論又は繰り返さない。
【0249】
プロセス2500は、仮数成分2320が2つのサブ成分に分割される処理ブロック2510で開始する。一実施形態では、FP数学演算の期待される出力結果のSP FP仮数の24ビットは、2つの成分、Nビットを含む第1の成分(例えば、最上位の12ビット(MSB))(Yhとして参照される)と、Mビットを含む第2の成分(例えば、最下位の12ビット(LSB))(Ylとして参照される)に分割され、ここで、N+M=24である。処理ブロック2520において、平方根演算の結果がYhについて計算される。一実施形態によれば、Yhは、計算を2つの部分に分割することによって計算され、その計算には、Yh(又は、Yhi)の初期推定値を決定すること、及び実際のYhと推定されたYhiと間の差(つまり、Yhe=Yh-Yhi)を決定することが含まれる。
【0250】
一実施形態によれば、
図26の線2610によって示されるように、Y
hiは、線形補間(LERP)(例えば、(X
0、Y
0)と(X
1、Y
l)との間の直線、ここで、X
0=2
23、X
1=2
24、Y
0=√X
0、Y
1=√X
1)を実行することによって決定される。区間(X
0、X
1)の値Xについて、直線に沿った値Y
hiは傾きの方程式から与えられる。
(Y
hi-Y
0)/(X-X
0)=(Y
1-Y
0)/(X
1-X
0)、
次のようになる:
Y
hi=Y
0+(X-X
0)×(Y
1-Y
0)/(X
1-X
0)=√2
24+(X-2
24)×(√2
24-√2
23)/(2
24-2
23)
=2
12+(X-2
24)×(2
12-2
11×√2)/2
23
=(2
35+(X-2
24)×(2
12-2
11×√2))/2
23
【0251】
一実施形態では、この結果は、1つの減算演算、1つの乗算演算、1つのシフト演算、及び1つの加算演算を介して計算することができる。別の実施形態では、結果は、1つの減算演算、1つの乗算及び累算(MAD)演算、及び1つのシフト演算を介して計算することもできる。いくつかの実施形態では、中間のFP乗算/減算/加算/シフト演算は、結果として得られる12ビットMSB平方根Yhにおけるゼロ単位の最小精度(ULP)誤差を確実にするために、SPよりも仮数においてより高い精度を必要とし得る。
【0252】
実際のY
hと推定されたY
hiとの差が
図27に示される。
図27に示されるように、この差Y
heのプロットは、
図26の線2620と線2610との間の値の差として表すことができる(詳細な説明のために
図27にも示されている)。一実施形態によれば、差分値Y
heは、
図27に示される曲線2710の区分的線形近似(piecewise linear approximation:PLA)を用いて推定され得る。
図28は、Y
he曲線2710のPLAの要素である線形セグメントの詳細を提供するために、
図27に示される線形セグメントのうちの1つの拡大バージョンを示す。
【0253】
一実施形態によれば、Y
heのPLAは、結果として得られる平方根(Y
h)の12ビットMSB成分における0ビットULP相対誤差を計算するために61個の線分を実装する。そのような実施形態では、線分のそれぞれの傾き及びy切片は、入力のMSBビットを用いてインデックス付けされるルックアップテーブル(LUT)(例えば、
図22のLUT2213)に格納される。
図28は、傾き(m
i)及びy切片(c
i)がインデックスiでLUTに格納されるそのような線分(LS
i)の一実施形態を示す。入力仮数(X)、傾き(m
i)、及びy切片(c
i)を用いて、Y
heは、MAD演算を用いて次のように計算できる。
Y
he=m
iX+c
i
【0254】
傾き(mi)の実数値が非常に小さい10進数であるため、MAD演算での乗算で使用される傾きがSP FP値であると決定すると、得れた結果はシフトを実装し得る。一実施形態では、中間のFP MAD/シフト演算は、結果として得られる12ビットのMSB平方根Yhにおいて0ULP誤差を確実にするために、SPよりも仮数においてより高い精度を実装し得る。更なる実施形態では、PLAで使用されるいくつかの線分はより長くてもよく(例えば、より大きな入力仮数範囲をカバーする)、他のものはより短くてもよい(例えば、より短い入力仮数レンジをカバーする)。
【0255】
そのような実施形態では、インデックス付けロジックは、可変サイズの線分のインデックス付けが複雑であるために、(例えば、LUT内の傾き及びy切片の対応する位置を用いて)128の等距離入力仮数範囲を取ることによって簡素化される。さらに、PLAの各線形セグメントが等しい入力仮数範囲を表すようにするために、隣接するLUT位置に傾き及びy切片の重複する値を設定して、長い入力セグメントを表すことができ、これにより、7MSBビットの入力仮数(X)を用いてLUTインデックス付けロジックが簡素化される。
【0256】
結果として得られる平方根Yの12ビットMSB部分(Yh)は、次のように計算され得る。
Yh=Yhi+Yhe
一実施形態では、中間結果Yhi及びYheが最大25ビットの仮数を有することができるため、結果として得られるYhは12ビットに丸められ、0ULP相対誤差で12ビットMSBの結果平方根(Yh)を計算する。
【0257】
図25に戻ると、平方根演算の結果は、処理ブロック2530において、第2の成分(例えば、結果として得られる平方根SP FP数Y(Y
l)の12ビットLSB部分)について計算される。一実施形態では、Y
h及びY
lに対する演算は、並行して行われ得る。
【0258】
平方根の実施形態の場合に、Y、X、Yh、及びYlを結び付ける方程式は、次のように拡張される。
Y=Yh+Yl=√X
両辺を2乗にすることで、
Y2=(Yh+Yl)2=X
Yh
2+Yl
2+2YhYl=X
Z=X-Yh
2=Yl
2+2YhYlとする。
ここで、Yl<<Yh、つまり2YhYl>>Yl
2の場合に、Yl
2を無視できる。
従って、Z≒2YhYlとなる。
【0259】
Ylが結果として得られる平方根Yの12LSBビットであり、YhがYの12MSBビットであるので、YhのMSB(12番目のMSBビット)は常に1である(SP FP仮数フォーマットによると):
Yl<Yh/212
Yh>212Yl
2YhYl>213Yl
2
Yl
2<2YhYl/213
その結果、YhのMSB(12番目のMSBビット)が常に1であるので(SP FP仮数フォーマットによると)、Yl
2のMSBビット位置は2YhYlのMSBビット位置より少なくとも13ビット低くなる。
だから、2YhYl>>Yl
2
そのため、Yl<<Yh
従って、Z≒2YhYlとなる。
【0260】
近似Z≒2YhYlに基づいて、
Yl=Z/(2Yh)=(X-Yh
2)/(2Yh)
従って、Ylの計算は、Yh
2を見つけること、入力仮数XからYh
2の減算、X-Yh
2の2×4096による除算、それに4096/Yhの乗算に分けられる。一実施形態では、4096/Yhは、4096/YhのPLAを介して計算される。この実施形態は、2Yhによる除算を回避し、2の累乗である2×4096で除算することにより除算をシフト演算に変換する。
【0261】
一実施形態では、223から224の間に1200個の完全な2乗(perfect squares:完全平方)があるため(例えば、[223、224]は、Y2=Xによって表される範囲である)、Yh
2の1200個の可能な値がある。Yh
2を計算するには、1200個の完全な2乗の範囲を10の間隔に分割し、各間隔には128個の完全な2乗がある。ただし、第1の範囲には、128×10=1280のように80個の完全な2乗が追加される。その結果、入力仮数の範囲も10個の間隔に分割される。
【0262】
更なる実施形態では、Xが位置する入力仮数間隔は、128個の完全な2乗の各間隔において最大の完全な2乗を含むように格納された第1レベルのLUTを用いて識別され得る。そのような実施形態では、Xは、この10エントリLUTテーブルの各エントリと比較されて、X≦LUT内のエントリであるかどうかを判定する。比較により、Xは完全な2乗より大きく、LUTの直ぐ次のエントリ以下であることが分かり、LUTの次のエントリのインデックス(Entry
i)は、Xが入る間隔を表す。Entry
iは、Entry
i-1<X<Entry
iである、第1レベルのLUTの完全な2乗のエントリの間にある128個の完全な2乗の次のレベルのLUTを識別するためのインデックスとして使用できる。一実施形態では、合計10個のそのような第2のLUTがあり、128個の完全な2乗の間隔毎に1つずつある。代替実施形態では、129個の完全な2乗のエントリが、各第2レベルのLUTに実装され、これには、Entry
i-1及びEntry
iが含まれる。表1は、LUTの一実施形態を示す。
【表1】
【0263】
表1は、LUTインデックス及びLUTエントリ(例えば、Yh
2を表す1280個の完全な2乗の全範囲内の128個の完全な2乗のあらゆる間隔における最大の完全な2乗)を示す。表1に示されるように、入力仮数X=12345678のサンプル値を用いると、表1に示されるように、比較チェックX≦11943936(LUTの4番目のインデックスエントリ)は失敗するが、比較チェックX≦12845056(LUTの5番目のインデックスエントリ)は成功する。示されているように、比較はインデックス5(Entryi)を返し、これは、11943936~12845056の範囲の129個の完全な2乗を含む第5番目の第2レベルのLUTを指す。
【0264】
入力仮数Xに最も近い完全な2乗Y
h
2を識別するために、最も小さい完全な2乗(Y
ha
2)が、129個の完全な2乗の各間隔に格納される。X-Y
ha
2の差(Z
ha)は、Xに対応して識別された第2レベルのLUTのY
ha
2を用いて決定される。その後、Z
haはシフト演算を用いて2×2048と2×4096とで除算され、idx
halとidx
hahとになる。これは、隣接する完全な2乗n
2と(n+1)
2との間に2nの整数があるという特性に基づいている。こうして、Y
hの範囲は2896から4095に及び、2896に近い2の最も近い累乗は2048であり、4095に近い2の最も近い累乗は4096である。idx
hae=(idx
hal+idx
hah)/2の平均が次に計算され、これは第2レベルのLUTのY
h
2のエントリの推定インデックスである。
図29は、idx
hae対(第2レベルのLUTにおけるY
h
2のエントリに対する実際のインデックスである)idxのグラフの一実施形態を示す。
【0265】
図29に示されるように、両方の線が互いにスケーリングされたバージョンである。y
2=m
2x+c
2としてのidx
hae及びy
1=m
1x+c
1としてのidxの線形方程式に基づいて、y
2=y
1+(m
2-m
1)x+(c
2-c
1)となる。方程式y
2=m
2x+c
2及びy
1=m
1x+c
1の両方が、それらのそれぞれの傾き及びy切片値とともに
図29に示される。y
2は、第2レベルのLUTのY
h
2のエントリに対する実際のインデックス(idx)を表し、idx
haeの式(y
1で表される)のスケーリングに基づいて取得されている。従って、Y
h
2が計算された。一実施形態では、この計算は、1つのMAD演算及び1つの加算演算を用いて行われる。
【0266】
Y
h
2が計算されると、X-Y
h
2は、1つの減算演算を介して計算され、1つのシフト演算により2×4096で除算されて、中間結果が生成され得る。その後、中間結果に4096/Y
hが乗算される。一実施形態では、
図30に示されるように、4096/Y
hは、16個の線形セグメントを含む区分的線形近似を介して計算される。
図30は、入力仮数Xによって表されるx軸をさらに示す。4096/Y
hのPLAは、1つのMAD演算を用いて計算され得る。上記のように、中間結果(X-Y
h
2)/(2×4096)に4096/Y
hを乗算して、結果として得られる平方根Yの12ビットLSB部分を次のように取得する。
Y
l=(X-Y
h
2)/(2Y
h)
【0267】
図24に戻ると、Y
h及びY
lに対して行われた浮動小数点演算の結果は、浮動小数点演算の結果(又は出力)として指数成分の結果と結合され、ブロック2440を処理する。上述のプロセスの実行レイテンシは、平方根(Y)の仮数の計算に依存する。指数(e
sq)の計算では、入力指数(e)のLSBビットが偶数又は奇数かを確認し、それに応じて128又は127を減算し(てバイアスにより指数をシフトし)、1ビットシフト演算で2で除算し、さらに127を加算し(てバイアスにより指数をシフトし)、その結果をSP FP指数フォーマットに戻す。Y(平方根の仮数)の計算に含まれる乗算、加算、減算、及びシフトの演算には、平方根の指数e
sqよりも多くの実行サイクルが必要である。
【0268】
一実施形態では、平方根Yの仮数の計算には4つの計算が含まれ、各演算が入力仮数Xに基づいているため(例えば、それらは互いに依存しないため)、並列に実行することができる。そのような実施形態では、結果として得られる平方根Yの12ビットMSB部分の初期推定値(Yhi)を計算し、実際のYhと推定されたYhiの差をYhe=Yh-Yhiとして計算し、Yh
2を計算Ylの一部として計算し、4096/Yhを計算Ylの一部として計算する。
【0269】
一実施形態では、Yhiの計算は、1つの減算演算、1つのMAD演算、及び1つのシフト演算を含む。実際のYhと推定されたYhiの差をYhe=Yh-Yhiとして計算するには、傾き及びy切片を取得するために1つのLUTルックアップが実装され、PLAの一部として1つのMAD演算及び1つの丸め演算が実行され、これには、LSBビットが1の場合に、LSBビットのチェック、残りのビットへの1の加算が含まれる。
【0270】
Yl(結果として得られる平方根Yの12ビットLSB部分)を計算する構成要素としてYh
2を計算することには、2つのLUTルックアップ、10個の並列比較演算、3個の並列シフト演算(例えば、X-Yha
2を2×2048で除算してidxhalを取得し、X-Yha
2を2×4096で除算してidxhahを取得し、及びインデックスidxhal及びidxhahの平均化の際に2で除算してidxhaeを取得する)、1つの加算演算(例えば、idxhal及びidxhahの平均化でidxhaeを取得する)、1つの減算(X-Yha
2)、1つのMAD演算及び1つの加算演算(例えば、idxhaeの式を再スケーリングすることにより、idxhaeから、第2レベルのLUTへのエントリの実際のインデックスidxを計算する)ことが含まれる。
【0271】
X-Yh
2は、2×4096で除算するために、1つの減算及び1つのシフト演算によって計算することができる。中間結果(X-Yh
2)/(2×4096)に4096/Yhを乗算してYlを得るには、1つの乗算演算が必要である。一実施形態では、4096/Yhを計算するには、傾き及びy切片を取得するための1つのLUTルックアップと、PLAの一部としての1つのMAD演算とが含まれる。中間結果(X-Yh
2)/(2×4096)に4096/Yhを乗算してYlを得るには、1つの乗算演算が必要である。
【0272】
逆平方根(RSQ)
【0273】
指数のRSQは、次のように表すことができる。
ersq=-(e-127)/2
ここで、eは、入力SP FP数Xの8ビットの指数(ビット30~23)である。
【0274】
(e-127)が偶数であると判定すると、ersq計算は、ersq=-(e-127)/2のみを含み、判定(e-127)が奇数の場合に、結果はersq=-(e-128)/2になり、入力仮数は2倍にされる。Xが、X=(-1)s×2(e-127)×1.mとして表されるとすると、RSQ(Y)の結果は次のように与えられる(Xが正のSP FP数であると仮定)。
Y=1/√X=(-1)s×2-(e-127)/2×(1/√(1.m))
=(-1)s×2-(e-128)/2×(1/√(2×1.m))、(e-127)が奇数の場合。
【0275】
仮数のRSQの計算は、結果として得られるRSQ Yの12MSBビット(Yh)と12LSBビット(Yl)とに分割される。こうして、入力Xに対して、RSQ(X)=Yとする。
Y=1/√X=Yh+Yl
1/X=(Yh+Yl)2=Yh
2+Yl
2+2YhYl
上記のように、Yl<<Yhなので、Yl
2を無視できるため、次のようになる。
X=1/(Yh+Yl)2=1/(Yh
2*(1+Yl/Yh)2)
≒1/Yh
2*(1-2Yl/Yh)
Yl/Yh<<1であり、(1+Yl/Yh)2に対して二項級数の近似を適用することにより、
X*Yh
2=1-2Yl/Yh
2Yl/Yh=1-X*Yh
2
Yl=(Yh-X*Yh
3)/2
【0276】
SP FP平方根を参照して上で議論したように、Yh及びYh
3は、提案で与えられる説明と同様に、LERP及びPLAによって得ることができる。Yh
3にXを乗算し、上式からYhからの減算及びシフトによる2の除算によってYlを取得する。
【0277】
逆元(Inverse)/逆数(Reciprocal)(INV)
【0278】
指数のINVは、次のように表すことができる。
einv=-(e-127)
ここで、eは、入力SP FP数Xの8ビットの指数(ビット30~23)である。
【0279】
INVの計算は、仮数を結果として得られるINV Yの12MSBビット(Yh)及び12LSBビット(Yl)に分割することから再び開始する。こうして、入力Xに対して、INV(X)=Yとする。
Y=1/X=Yh+Yl
Yl=1/X-Yh
=1/X*(1-X*Yh)
=Yh*(1-X*Yh)、近似1/X≒Yhによって
=Yh-X*Yh
2
【0280】
Yh及びYh
2は、上記のSP FP平方根についての提案の説明と同様に、LERP及びPLAによって得ることができる。上記の式から、Yh
2はXで乗算され、YlはYhからの減算によって計算される。
【0281】
サイン/コサイン(SIN/COS)
【0282】
SP FP入力のSINは、SINが周期関数であるため、範囲縮小法によって計算される。こうして、入力のSINは-π/2からπ/2の範囲(例えば、入力範囲[-π/2:π/2]の場合に得られる結果は-1から1の範囲である)で計算され、範囲外になり、関数は周期的なままである。入力範囲を縮小したSIN出力が-1から1まで変化する可能性があるため、出力の再正規化後にSINの指数成分を計算できる。
SIN(2(e-127)×1.m)=SIN(RR(2(e-127)×1.m))
ここで、RR(X)は入力値Xに範囲縮小を適用し、その結果を0からπ/2以内に縮小する。
【0283】
RR(X)=intRR+frcRRの出力が与えられ、ここで、intRR及びfrcRRは、範囲縮小時の結果の整数及び少数(fractional)成分である。
intRR=int((2(e-127)×1.m)/(π/2))
=int(2(e-127)×1.m×2/π)
frcRR=(2(e-127)×1.m)-(intRR×π/2)
SIN(2(e-127)×1.m)=SIN(frcRR)
【0284】
一実施形態では、2/π及びπ/2による乗算は、πの近似及び丸め込みによって達成することができる。intRRの異なる値に基づいて、SIN計算の結果のfrcRR
iを次の表2から取得できる。
【表2】
【0285】
入力の範囲縮小後に、SIN(frcRRi)は、1レベルのPLAを用いて計算することができる。一実施形態では、PLAは、可変サイズ入力範囲の16個の線形セグメント又は26個の等しいサイズの線形セグメントを実装し、対応する値の傾き及びy切片がLUTに格納される。COSの計算は、表2の符号及びfrcRRi列の異なる行エントリの順序を除いて、SIN計算と似ている。
【0286】
2を底とする対数(LOG)
【0287】
SP FP数Xの2を底とするLOG(Y)は、次のように表すことができる(LOGは正のSP FP数に対してのみ適用可能である)。
Y=LOG(X)=LOG(2e-127×1.m)=e-127+LOG(1.m)
ここで、eは入力SP FP数の8ビットの指数(ビット30~23)であり、mは仮数ビット22~0である。e-127はLOG(1.m)の結果に追加される(e-127として追加されるのは整数で、LOG(1.m)は少数である)。結果の値は再正規化され(SP FPフォーマットに合わせるために結果をシフトする)、結果のLOGの指数(elog)を取得する。
【0288】
一実施形態によれば、LOG(X)=Y(ここで、X=1.m)のSP FP仮数を計算する際に3つの演算が実行される。そのような実施形態では、初期推定値が、LERP及び2レベルのPLAを介して計算され、初期推定値とYとの間の差を推定する。最初に、LERPは、入力仮数X及び出力仮数範囲Yの全範囲に対して実行され(演算1)、Yiniを取得する。LERPのエラーがYerr=Y-Yiniとすると、Yerrを計算するために2レベルのPLAが実装される。
【0289】
レベル1のPLAは、上記の演算1でLERPから発生するYerrを概算する。一実施形態では、入力/出力仮数範囲全体が、レベル1のPLAの一部として64個の線形セグメントに分割される。こうして、線形セグメントの線形方程式には、傾き及びy切片のための64×2エントリLUTが実装される。レベル1のPLAの結果はYerr_l1として参照され得る。レベル2のPLAは、上記のレベル1のPLAから発生するYerr_l1errを概算する。64個のレベル1のPLA範囲のそれぞれは、レベル2のPLAにおいて32個の線形セグメントに分割される。レベル1のPLAの64個の範囲のそれぞれにYerr_l1errの類似性があるため、レベル2のPLAにおいて、レベル1のPLAの64個の範囲のそれぞれに同じ32個の線形方程式を適用できる。これにより、LUTサイズが32×64×2から32×2に縮小される。
【0290】
指数-基数2(EXP)
【0291】
SP FP数Xの基数2のEXP(Y)は、次のように表すことができる。
Y=EXP(X)=2((-1)^s×2^(e-127)×1.m)=2int((-1)^s×2^(e-127)×1.m)+frc((-1)^s×2^(e-127)×1.m)
ここで、eは入力SP FP数の8ビットの指数(ビット30~23)であり、mは仮数ビット22~0である。int(X)はxの整数部分を表し、frc(X)はxの小数部分を表す。
【0292】
入力SP FP数が正であると判定すると、
Y=2int(2^(e-127)×1.m)+frc(2^(e-127)×1.m)
ここで、int(2(e-127)×1.m)は結果として得られるEXP Yの指数であり、2frc(2^(e-127)×1.m)は結果として得られるEXP Yの仮数である。
【0293】
入力SP FP数が負であると判定すると、
Y=2-int(2^(e-127)×1.m)-frc(2^(e-127)×1.m)
=2-int(2^(e-127)×1.m)×2-frc(2^(e-127)×1.m)
=2-int(2^(e-127)×1.m)-1×21-frc(2^(e-127)×1.m)
ここで、-int(2(e-127)×1.m)-1は結果として得られるEXP Yの指数であり、2frc(2^(e-127)×1.m)は結果として得られるEXP Yの仮数である。
【0294】
一実施形態では、EXPは容易にオーバーフロー又はアンダーフローする可能性があり、入力の有効範囲は[-128、+127]である。こうして、入力X=1.m*2e-127であり、ここで、1.mは[1、2)の範囲なので、e-127は0から6までしか変化しない。e-127>0の場合に、frc計算は、1.mのe-127MSBビットを2int(2^(e-127)×1.m)に入れる(左シフトする)。事実上、e-127=0を想定して計算する必要があるのは2.mだけである。e-127の他の場合(e-127が1~6の範囲で変化する)に、2.m内のmビット数は23よりも少ないため、こうして、結果として得られる計算に必要な精度は低くなる。
【0295】
一実施形態では、入力Xの仮数は、2.mを計算するために、8MSBビット(Xh)及び15LSBビット(Xl)に分割される。そのような実施形態では、最終的に得られるEXPは、2Xh及び2Xlを乗算することによって計算することができる。2Xlを計算するには、入力Xの仮数の全範囲に亘ってLERPを実行し、相対誤差は<2-21である。こうして、LERPの1つのレベルは精度要件を満たし、LERPの結果はYlerpになる。2Xhを計算するために、PLAは、入力Xの仮数の全範囲を8個の線形セグメントに分割することによって実装される。
【0296】
PLAの結果がYini_Xhであるとすると、実際の2XhとYini_Xhとの間の差は、Yini_Xhを最も近い10進の2進小数点に丸めることによって計算され得、丸め込みの結果はYini_Xh_rndになる。上記のように、結果として得られるEXPは次のように計算できる。
2.m=2Xh×2Xl=Yini_Xh_rnd×Ylerp
【0297】
浮動小数点除算(FPDIV)
【0298】
FPDIVの結果は、次のように表すことができる。
Z=Y/X
ここで、Yは被除数であり、Xは除数である。
【0299】
一実施形態では、得られた結果は、INV演算(1/X)及びMUL演算(Y×1/X)によって計算することができる。そのような実施形態では、FPDIV演算は、INV演算に統合されており、INVと同じ数のサイクルで完了するように最適化されているので、実行レイテンシは、INV演算と同じである。一実施形態によれば、FPDIV演算は、INV演算に統合されているので、INVと同じ数のサイクルで完了するように最適化される。例えば、FPDIV演算の指数部分は単純な減算演算であることが容易に分かる。被除数Yの指数がeyであり、除数Xの指数がexの場合に、結果として得られる指数efpdiv=ey-exであり、得られる結果は、結果のFPDIVの仮数部を計算した後で再正規化される。INVの結果、次のようになる。
W=1/X=Wh+Wl、及びWl=Wh-X×Wh
2
(例えば、上記のINV演算の結果の方程式による);これは次を意味する。
Z=Y/X=Y×(Wh-X×Wh
2)=Y×Wh-Y×X×Wh
2
【0300】
Whを推定している間に、V=Y×Xを並行して計算できる。V×Xh
2=Y×X×Wh
2を計算している間に、Y×Whを並行して計算できる。こうして、FPDIVはINVと同じサイクル数で計算できる。その結果、開示されるFPDIV計算は、現在のソリューションで必要とされるようなパイプラインを介した複数のパス(少なくとも2つ)を必要とせず、既存のソリューションと比較して、開示されるFPDIVの実行レイテンシを大幅に少なくする。
【0301】
逆平方根とベクトルスケーリングとの組合せ
【0302】
上記の逆平方根Rの計算に加えて、NA
→、NB
→、NC
→の計算は、RのYh、Ylの計算中に、A→、B→、C→とのRの計算及びRの乗算を組み合わせることでさらに最適化できる。これにより、バンチ演算(bunched operation)全体は、逆平方根Rの計算と比較して、追加のサイクルを必要としない。
【0303】
一実施形態によれば、Rの計算の第1段階は、線形補間(LERP)及び区分的線形近似(PLA)を用いるYh及びYh
3の計算を含み、NA
→=A→×Rの計算の第2段階は、NA
→=A→×(Yh+Yl)を含む。
NA
→=A→×(Yh+Yl)
=A→×Yh+A→×Yl
=A→×Yh+A→×((Yh-X×Yh
3))/2
=A→×Yh+((A→×Yh-A→×X×Yh
3))/2
【0304】
PA=A→×Yhは、第2段階で計算できる。
【0305】
QA=A→×Xは、Yh及びYh
3の計算と並行して、第1段階で計算できる。
【0306】
TA=QA×Yh
3は、PAの計算と並行して、第2段階で計算できる。
【0307】
最後にNA
→=A→×Yh+((A→×Yh-A→×X×Yh
3))/2=PA+((PA-TA))/2は、第3段階で、1つの減算、1つの右シフト演算、及び1つの加算で取得できる。PA、QA、TA、及びNA
→の計算中に、PB、QB、TB、NB
→、PC、QC、TC、NC
→を並行して計算できる。このRとNA
→、NB
→、NC
→との最適化された組合せ計算は、上記ではRNA
→NB
→NC
→、又はRSQVSと呼ばれる。
【0308】
本明細書で説明する様々な実施形態は、命令(例えば、VNM)を公開することを企図しているが、V個のベクトルに対して実行すべきベクトル正規化処理を指定する。追加又は代替として、(i)3成分ドット積演算(例えば、SIMD8 DP3)、(ii)3成分逆平方根演算(例えば、SIMD8 RSQ)、及び逆平方根関数とベクトルスケーリング関数との両方を組み合わせる3成分演算(例えば、SIMD8 RSQVS)の1つ又は複数に対して、個々のISA命令を公開できる。
【0309】
方法の多くはそれらの最も基本的な形式で説明しているが、プロセスを方法のいずれかに追加又は削除でき、情報は、本発明の実施形態の基本的な範囲から逸脱することなく、説明したメッセージのいずれかに追加又は削除できる。多くの更なる修正及び適合がなされ得ることは、当業者には明らかであろう。特定の実施形態は、概念を限定するためではなく、その概念を例示するために提供される。実施形態の範囲は、上記で提供された特定の例によってではなく、以下の特許請求の範囲によってのみ決定すべきである。
【0310】
要素「A」が要素「B」に、又は要素「B」と共に結合されると言われる場合に、要素Aは、要素Bに直接結合され得るか、又は例えば要素Cを介して間接的に結合され得る。構成要素、機能、構造、プロセス、又は特性Aが構成要素、機能、構造、プロセス、又は特性Bを「生じさせる」と明細書及び特許請求の範囲が述べる場合に、これは、「A」が「B」の少なくとも部分的な原因であることを意味するが、「B」を生じさせるのに役立つ少なくとも1つの他の構成要素、機能、構造、プロセス、又は特性も存在し得る。明細書に、構成要素、機能、構造、プロセス、又は特性が「含まれる可能性がある」、「含むことができる」、「含まれ得る」と記載されている場合に、その特定の構成要素、機能、構造、プロセス、又は特性を含める必要はない。明細書又は特許請求の範囲が「1つの(a, an)」要素に言及している場合に、これは、説明している要素の1つだけがあることを意味するものではない。
【0311】
実施形態は、実施態様又は例である。本明細書における「実施形態」又は「一実施形態」、「いくつかの実施形態」、又は「他の実施形態」への言及は、実施形態に関連して説明する特定の特徴、構造、又は特性が、少なくともいくつかの実施形態に含まれ得るが、必ずしも全ての実施形態に含まれないことを意味する。「実施形態」、「一実施形態」、又は「いくつかの実施形態」の様々な出現は、必ずしも全てが同じ実施形態を参照するわけではない。例示的な実施形態の前述の説明では、開示を簡素化し、様々な新規の態様の1つ又は複数の理解を助ける目的で、様々な特徴が、単一の実施形態、図、又はその説明に一緒にグループ化される場合があることを理解されたい。しかしながら、この開示の方法は、特許請求の範囲に記載される実施形態が、各請求項で明示的に列挙されるよりも多くの特徴を必要とするという意図を反映するものとして解釈すべきではない。むしろ、以下の特許請求の範囲が反映するように、新規の態様は、前述の単一の開示された実施形態の全ての特徴より少ないところにある。こうして、特許請求の範囲は、これにより、この詳細な説明に明確に組み込まれ、各請求項は、それ自体で別個の実施形態として成立する。
【0312】
以下の節及び/又は例は、更なる実施形態又は例に関する。例の詳細は、1つ又は複数の実施形態のいずれにも使用することができる。異なる実施形態又は例の様々な特徴は、様々な異なる用途に適合するように含まれるいくつかの特徴及び除外される他の特徴と様々に組み合わせることができる。例は、機械によって実行されると、機械に、本明細書で説明する実施形態及び例によるハイブリッド通信を容易にするための方法の動作又は装置又はシステムの動作を実行させる命令を含む、方法、方法の動作を実行するための手段、少なくとも1つの機械可読媒体等の主題を含み得る。
【0313】
いくつかの実施形態は、方法を含む例1に関係する。この方法は、V個のベクトルのセットの各ベクトルに対して行うべきベクトル正規化処理を指定する単一の命令のグラフィック処理装置(GPU)による受信に応答して:GPUの第1の処理装置によって、V個のベクトルのセットのうちの1つのベクトルの2乗長さをそれぞれ表すV個の2乗長さ値を生成することであり、V個のベクトルのセットのうちのN個のベクトルの複数の成分ベクトルをそれぞれ表し、且つV/N個のレジスタの第1のセットのそれぞれのレジスタに格納されるNセットの入力毎に、Nセットの入力に対してN個の並列ドット積演算を行うことにより、N個の2乗長さ値を一度に生成するステップと;GPUの第2の処理装置によって、V個のベクトルのセットのうちの1つのベクトルの複数の正規化成分ベクトルをそれぞれ表すVセットの出力を生成することであり、V個の2乗長さ値のうちのN個の2乗長さ値毎に、N個の2乗長さ値に対してN個の並列演算を行うことにより、Nセットの出力を一度に生成するステップと、を含み、N個の並列演算のそれぞれが、逆平方根関数とベクトルスケーリング関数との組合せを実行する。
【0314】
例2は、例1の主題を含み、GPUの第2の処理装置によって、Vセットの出力を生成することは、V/N個のレジスタの第2セットのそれぞれのレジスタに、一度にNセットの出力ずつVセットの出力を格納する。
【0315】
例3は、実施例1~2の主題を含み、Vは8であり、Nは2である。
【0316】
例4は、例1~3の主題を含み、V/N個のレジスタの第1のセットは4個の256ビットレジスタを含み、複数の成分ベクトルは3つの32ビット成分ベクトルを含む。
【0317】
例5は、例1~4の主題を含み、V/N個のレジスタの第2セットは4個の256ビットレジスタを含み、複数の正規化成分ベクトルは3つの32ビット正規化成分ベクトルを含む。
【0318】
例6は、例1~5の主題を含み、第1の処理装置は浮動小数点ユニット(FPU)を含み、第2の処理装置はコプロセッサを含む。
【0319】
例7は、例1~6の主題を含み、N個の並列ドット積演算は、2ワイド単一命令複数データ(SIMD)ドット積命令により生じる。
【0320】
例8は、例1~7の主題を含み、N個の並列処理は、2ワイド単一命令複数データ(SIMD)命令により生じる。
【0321】
例9は、例1~8の主題を含み、逆平方根関数は、オペランドに対して単精度逆平方根演算を行うことを含み、この演算には、
オペランドの指数成分に対して逆平方根演算を行うこと、
オペランドの仮数成分に対して逆平方根演算を行うことであって、この演算には、
仮数成分を第1のサブ成分と第2のサブ成分とに分割すること、
第1のサブ成分の逆平方根演算の結果を決定すること、及び
第2のサブ成分の逆平方根演算の結果を決定することが含まれる、逆平方根演算を行うこと、及び
逆平方根演算の結果を返すことが含まれる。
【0322】
いくつかの実施形態は、グラフィック処理装置(GPU)を含む例10に関係する。このGPUは、V/N個のレジスタの第1のセットと;V/N個のレジスタの第1のセットに結合された第1の処理装置と;V/N個のレジスタの第1のセットに結合された第2の処理装置と;V個のベクトルのセットの各ベクトルに対して行うべきベクトル正規化処理を指定する単一の命令の受け取りに応答して、(i)第1の処理装置によって行うべきV/N回のNワイド単一命令複数データ(SIMD)ドット積を発し、及び(ii)第2の処理装置によって行うべき逆平方根関数とベクトルスケーリング関数との組合せを実行するV/N回のNワイド単一命令複数データ(SIMD)演算を発するように動作可能な実行ユニットと;を含み、
第1の処理装置は、V個のベクトルのセットのうちの1つのベクトルの2乗長さをそれぞれ表すV個の2乗長さ値を生成するように動作可能であり、V個のベクトルのセットのうちのN個のベクトルの複数の成分ベクトルをそれぞれ表し、且つV/N個のレジスタの第1のセットのそれぞれのレジスタに格納されるNセットの入力毎に、前記V/N回のNワイドSIMDドット積演算の1つを実行することにより、N個の2乗長さ値を一度に生成するように動作可能であり、
第2の処理装置は、V個のベクトルのセットのうちの1つのベクトルの複数の正規化成分ベクトルをそれぞれ表すVセットの出力を生成するように動作可能であり、V個の2乗長さ値のうちのN個の2乗長さ値毎に、V/N回のNワイドSIMD演算の1つを行うことにより、Nセットの出力を一度に生成するように動作可能である。
【0323】
例11は、例10の主題を含み、GPUは、V/N個のレジスタの第1のセットをさらに含み、Vセットの出力は、V/N個のレジスタの第2セットのそれぞれのレジスタに、一度にNセットの出力ずつ格納される。
【0324】
例12は、例10~11の主題を含み、Vは8であり、Nは2である。
【0325】
例13は、例10~12の主題を含み、V/N個のレジスタの第1のセットは4個の256ビットレジスタを含み、複数の成分ベクトルは3つの32ビット成分ベクトルを含む。
【0326】
例14は、例10~13の主題を含み、V/N個のレジスタの第2セットは4個の256ビットレジスタを含み、複数の正規化成分ベクトルは3つの32ビット正規化成分ベクトルを含む。
【0327】
例15は、例10~14の主題を含み、第1の処理装置は浮動小数点ユニット(FPU)を含み、第2の処理装置はコプロセッサを含む。
【0328】
例16は、例10~15の主題を含み、逆平方根関数は、オペランドに対して単精度逆平方根演算を行うことを含み、この演算には、
オペランドの指数成分に対して逆平方根演算を行うこと、
オペランドの仮数成分に対して逆平方根演算を行うことであって、この演算には、
仮数成分を第1のサブ成分と第2のサブ成分とに分割すること、
第1のサブ成分の逆平方根演算の結果を決定すること、及び
第2のサブ成分の逆平方根演算の結果を決定することが含まれる、逆平方根演算を行うこと、及び
逆平方根演算の結果を返すことが含まれる。
【0329】
例17は、例10~16の主題を含み、第1のサブ成分の値を決定することは、第1のサブ成分の初期推定値を決定すること、及び第1のサブ成分の実際の値と第1のサブ成分の初期推定値との間の差を決定することを含む。
【0330】
例18は、例10~17の主題を含み、初期推定を決定することは、線形補間を行うことを含む。
【0331】
例19は、例10~18の主題を含み、第1のサブ成分の実際の値と第1のサブ成分の初期推定値との間の差は、区分的線形近似によって決定される。
【0332】
実施例20は、例10~19の主題を含み、第1及び第2のサブ成分についての逆平方根演算の結果を決定することは、並行して実行される。
【0333】
いくつかの実施形態は、システムを含む例21に関係する。このシステムは、V個のベクトルのセットの各ベクトルに対して行うべきベクトル正規化処理を指定する単一の命令の受け取りに応答して、V個のベクトルのセットのうちの1つのベクトルの2乗長さ値をそれぞれ表すV個の2乗長さ値を生成することであり、V個のベクトルのセットのうちのN個のベクトルの複数の成分ベクトルをそれぞれ表し、且つV/N個のレジスタの第1のセットのそれぞれのレジスタに格納されるNセットの入力毎に、Nセットの入力に対してN個の並列ドット積演算を行うことにより、N個の2乗長さ値を一度に生成するための手段と、
V個のベクトルのセットのうちの1つのベクトルの複数の正規化成分ベクトルをそれぞれ表すVセットの出力を生成することであり、V個の2乗長さ値のうちのN個の2乗長さ値毎に、N個の2乗長さ値に対してN個の並列演算を行うことにより、Nセットの出力を一度に生成するための手段と、を含み、
N個の並列演算のそれぞれが、逆平方根関数とベクトルスケーリング関数との組合せを実行する。
【0334】
いくつかの実施形態は、例1~10のいずれかの方法を実施又は実行する機器を含む例22に関する。
【0335】
例23は、コンピュータ装置上で実行されたときに、前述の例に記載された方法を実施又は実行する、又は機器を実現するための複数の命令を含む少なくとも1つの機械可読媒体を含む。
【0336】
図面及び前述の説明は、実施形態の例を与える。当業者は、説明した要素の1つ又は複数が単一の機能要素に結合され得ることを理解するであろう。あるいはまた、特定の要素を複数の機能要素に分割することもできる。一実施形態の要素を別の実施形態に追加することができる。例えば、本明細書で説明するプロセスの順序は、変更してもよく、本明細書で説明する方法に限定されない。さらに、フロー図の動作は、示される順序で実施する必要はなく、必ずしも全ての動作を実行する必要もない。また、他の動作に依存しないそれらの動作は、他の動作と並行して実行してもよい。実施形態の範囲は、これらの特定の例によって決して制限されない。構造、寸法、材料の使用法等、明細書で明示的に指定されているかどうかにかかわらず、様々なバリエーションが可能である。実施形態の範囲は、少なくとも以下の特許請求の範囲によって与えられるのと同じくらい広い。