(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024109937
(43)【公開日】2024-08-14
(54)【発明の名称】変分把持生成
(51)【国際特許分類】
B25J 13/00 20060101AFI20240806BHJP
B25J 13/08 20060101ALI20240806BHJP
【FI】
B25J13/00 Z
B25J13/08 A
【審査請求】有
【請求項の数】24
【出願形態】OL
(21)【出願番号】P 2024087934
(22)【出願日】2024-05-30
(62)【分割の表示】P 2020084996の分割
【原出願日】2020-05-14
(31)【優先権主張番号】62/848,521
(32)【優先日】2019-05-15
(33)【優先権主張国・地域又は機関】US
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.BLUETOOTH
2.ZIGBEE
(71)【出願人】
【識別番号】501450960
【氏名又は名称】エヌビディア コーポレーション
(74)【代理人】
【識別番号】110000855
【氏名又は名称】弁理士法人浅村特許事務所
(72)【発明者】
【氏名】アルサラン ムーサビアン
(72)【発明者】
【氏名】クレメンス エップナー
(72)【発明者】
【氏名】ディーター フォックス
(57)【要約】
【課題】改善された把持決定の方法を提供すること。
【解決手段】コンピュータ・システムであって、1つ以上のプロセッサと、コンピュータ・システムに少なくとも以下を行わせる実行可能命令を記憶するコンピュータ読み取り可能なメモリと、を備え、コンピュータ・システムは、1つ以上のプロセッサによって実行されることにより、第1のニューラル・ネットワークを使用して、物体の3次元点群から、ロボットが物体を把持することを可能にする把持姿勢のセットを生成するステップと、第2のニューラル・ネットワークを使用して、把持姿勢のセット内の個々の把持の評価を決定するステップと、第2のニューラル・ネットワークによって決定された評価の勾配に少なくとも部分的に基づいて、把持姿勢のセット内の個々の把持を精緻化し、当該精緻化された把持姿勢のセットを生成する、コンピュータ・システム。
【選択図】
図5
【特許請求の範囲】
【請求項1】
コンピュータ・システムであって、
1つ以上のプロセッサと、
前記コンピュータ・システムに少なくとも以下を行わせる実行可能命令を記憶するコンピュータ読み取り可能なメモリと、
を備え、
前記コンピュータ・システムは、前記1つ以上のプロセッサによって実行されることにより、
第1のニューラル・ネットワークを使用して、物体の3次元点群から、ロボットが物体を把持することを可能にする把持姿勢のセットを生成するステップと、
第2のニューラル・ネットワークを使用して、把持姿勢のセット内の個々の把持の評価を決定するステップと、
前記第2のニューラル・ネットワークによって決定された評価の勾配に少なくとも部分的に基づいて、前記把持姿勢のセット内の個々の把持を精緻化し、当該精緻化された前記把持姿勢のセットを生成する、コンピュータ・システム。
【請求項2】
請求項1に記載のコンピュータ・システムであって、
前記実行可能命令は、前記1つ以上のプロセッサによって実行されることにより、前記コンピュータ・システムに、
前記把持姿勢のセットにおける個々の把持の評価に少なくとも部分的に基づいて、前記精緻化された把持姿勢のセットから特定の把持姿勢を選択するステップと、
ロボットを用いて特定の把持姿勢を実行することにより、ロボットに物体を把持させるステップと、をさらに行わせる、コンピュータ・システム。
【請求項3】
請求項1に記載のコンピュータ・システムであって、
前記実行可能命令は、前記1つ以上のプロセッサによって実行されることにより、前記コンピュータ・システムに、
深度カメラから三次元画像情報を取得するステップと、
前記三次元画像情報から、前記物体の三次元点群を生成するステップと、
さらに以下を行わせる、コンピュータ・システム。
【請求項4】
前記実行可能命令は、前記1つ以上のプロセッサによって実行されることにより、前記コンピュータ・システムに、前記第2のニューラル・ネットワークによって決定された以前に精緻化された把持姿勢の勾配に少なくとも部分的に基づいて、以前に精緻化された把持姿勢を精緻化させる、請求項1に記載のコンピュータ・システム。
【請求項5】
前記第1のニューラル・ネットワークは、前記物体の部分的な点群を前記物体の把持姿勢のセットにマッピングするように訓練された変分オートエンコーダである、請求項1に記載のコンピュータ・システム。
【請求項6】
各把持を精緻化させることは、ロボットのグリッパに剛体の制約を適用することによって少なくとも部分的に達成される、請求項1に記載のコンピュータ・システム。
【請求項7】
前記第2のニューラル・ネットワークは、前記物体の3次元点群を用いて、前記把持姿勢のセット内の各把持姿勢を評価する、請求項1記載のコンピュータ・システム。
【請求項8】
前記物体の三次元点群は、前記物体の一部の点群である、請求項1記載のコンピュータ・システム。
【請求項9】
コンピュータが実施する方法であって
深度カメラによって生成された画像データを用いて物体の三次元点群を生成するステップと
三次元点群を第1のニューラル・ネットワークに提供するステップであって、前記第1のニューラル・ネットワークは、ロボットが物体を把持することを可能にする把持姿勢の第1のセットを前記三次元点群から生成するように訓練される、ステップと
前記把持姿勢の第1のセットおよび前記三次元点群を第2のニューラル・ネットワークに提供し、前記第2のニューラル・ネットワークは、個々の把持姿勢の評価を決定するように訓練されるステップと、
前記把持姿勢の第2のセットを生成するために、前記第2のニューラル・ネットワークによって生成された前記評価の勾配を使用して、把持姿勢の第1のセットを修正するステップと、を含む、方法。
【請求項10】
前記把持姿勢の第2のセットから、個々の把持姿勢が閾値より大きい関連評価を有する把持姿勢の第3のセットを識別するステップと、
把持姿勢の第3のセットにおける個々の把持姿勢の評価に少なくとも部分的に基づいて、把持姿勢の第3のセットから特定の把持姿勢を選択するステップと、
ロボットを用いて特定の把持姿勢を実行することにより、物体を把持するステップと、
をさらに含む、請求項9に記載の方法。
【請求項11】
前記物体の画像情報を取得することであって、当該画像情報は、前記物体の少なくとも一部についての深度情報を含む、前記取得するステップと、
前記画像情報から前記物体の少なくとも一部の三次元点群を決定するステップと
をさらに含む、請求項9に記載の方法。
【請求項12】
前記把持姿勢の第2のセットに対して前記第2のニューラル・ネットワークによって生成された勾配に少なくとも部分的に基づいて前記把持姿勢の第2のセットを修正することによって前記把持姿勢の第3のセットを生成することをさらに含む、請求項9に記載の方法。
【請求項13】
前記第1のニューラル・ネットワークは、前記物体の部分的な点群を前記物体の前記把持姿勢の第1のセットにマッピングするように訓練され、
前記第2のニューラル・ネットワークは、前記物体の前記把持姿勢の成功確率の評価を生成するように訓練される、請求項9に記載の方法。
【請求項14】
個々の把持姿勢の修正は、並進更新量未満に制限される、請求項9に記載の方法。
【請求項15】
前記第2のニューラル・ネットワークは、前記物体の点群および前記物体の前記把持姿勢に少なくとも部分的に基づく把持成功の導関数を表す、請求項9に記載の方法。
【請求項16】
前記第2のニューラル・ネットワークは、少なくとも、前記点群によって表されていない前記物体の一部の位置を外挿することによって前記把持姿勢を評価する、請求項9に記載の方法。
【請求項17】
一組の命令を記憶した記録可能媒体であって、前記一組の命令は、1つ以上のプロセッサによって、
第1のニューラル・ネットワークを使用して、物体の3次元点群から、ロボットのグリッパで物体を把持するための把持姿勢のセットを生成するステップと、
第2のニューラル・ネットワークを使用して、前記把持姿勢のセット内の個々の把持の評価を決定するステップと、
評価の勾配に少なくとも部分的に基づいて、前記把持姿勢のセット内の個々の把持の成功確率を改善して、前記改善された前記把持姿勢のセットを生成するステップと、
を実行させる、記録可能媒体。
【請求項18】
前記命令セットは、前記1つ以上のプロセッサによって、
前記改善された前記把持姿勢のセットから、評価に少なくとも部分的に基づいて失敗すると予測される姿勢を除外するステップと、
前記改善された把持姿勢のセットから選択された特定の把持姿勢を実行することによってロボットに物体を把持させるステップと、
をさらに実行させる、請求項17に記載の記録可能媒体。
【請求項19】
前記物体の三次元点群は、医療用画像処理装置を用いて生成される、請求項17に記載の記録可能媒体。
【請求項20】
前記一組の命令は、前記1つ以上のプロセッサによって、前記第2のニューラル・ネットワークによって生成された個々の把持姿勢の勾配を使用して、前記改善された把持姿勢のセット内の個々の把持姿勢を改善させることを実行させる、請求項17に記載の記録可能媒体。
【請求項21】
前記第1のニューラル・ネットワークは、前記物体の部分的な点群を前記物体の把持姿勢の集合にマッピングするように訓練された変分オートエンコーダである、請求項17に記載の記録可能媒体。
【請求項22】
前記第2のニューラル・ネットワークは、成功した把持と失敗した把持の両方を用いて訓練される、請求項17に記載の記録可能媒体。
【請求項23】
前記第2のニューラル・ネットワークは、前記物体の3次元点群と、前記把持姿勢のセット内の個々の把持姿勢とを用いて、個々の把持姿勢の成功の可能性を評価する、請求項17に記載の記録可能媒体。
【請求項24】
1つ以上のプロセッサと、実行可能命令を記憶するメモリと、
物体の点群から物体に対する把持姿勢のセットを生成するように訓練された第1のニューラル・ネットワークと、
把持姿勢のセットの個々の把持姿勢の成功を評価するように訓練された第2のニューラル・ネットワークと、
把持姿勢のセットから、第2のニューラル・ネットワークによって生成された勾配を用いて把持姿勢を精緻化することによって生成された精緻化された把持姿勢を実行するロボットマニピュレータと、
を備えた、ロボット。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、変分把持生成に関する。
【背景技術】
【0002】
ロボティック・オートメーションは、様々な実施例において、タスクを実行するときの生産性、安全性、及び経済性の向上を可能にする重要な分野である。物体を操作するロボットについては、把持姿勢を生成することが、タスクの重要な構成要素であることが多い。
【発明の概要】
【発明が解決しようとする課題】
【0003】
一実例では、ロボットは物体を観察し、その物体をロボットが持ち上げられるように、どこにグリッパを位置付けるか(姿勢とも呼ばれる3D位置及び3D配向)を決定する。個々の把持の安定性は、物体及びグリッパの形状、物体の質量分布、及び表面摩擦に依存することがある。物体の周りの形状により、あるシーンにおいてロボットのマニピュレータを他の物体に衝突させずに到達可能な把持点が限定されることによって、さらなる制約が課されることがある。いくつかの実例では、この問題は、物体の周りの確実な把持点を選択するための、形状に着想を得た発見的手法によって対処され、おそらくそれに続いて、サンプリングされた把持の安定性及び到達可能性のより詳細な形状分析がおこなわれる。これらの手法の多くは、物体の完全な3Dモデルが入手可能かどうかに依存しており、このことは、たとえばロボットがノイズの多い深度カメラでしかシーンを観察しない現実的なシナリオでは、厳しい制限となり得る。したがって、改善された把持決定の方法が必要である。
【課題を解決するための手段】
【0004】
本発明の一態様によると、
コンピュータ・システムであって、
1つ以上のプロセッサと、
前記コンピュータ・システムに少なくとも以下を行わせる実行可能命令を記憶するコンピュータ読み取り可能なメモリと、
を備え、
前記コンピュータ・システムは、前記1つ以上のプロセッサによって実行されることにより、
第1のニューラル・ネットワークを使用して、物体の3次元点群から、ロボットが物体を把持することを可能にする把持姿勢のセットを生成するステップと、
第2のニューラル・ネットワークを使用して、把持姿勢のセット内の個々の把持の評価を決定するステップと、
前記第2のニューラル・ネットワークによって決定された評価の勾配に少なくとも部分的に基づいて、前記把持姿勢のセット内の個々の把持を精緻化し、当該精緻化された前記把持姿勢のセットを生成する、コンピュータ・システムを提供する。
【図面の簡単な説明】
【0005】
【
図1】一実施例による、様々な物体を把持するロボティック・システムの実例を示す図である。
【
図2】一実施例による、マグについて予測された把持の実例を示す図である。
【
図3】一実施例による、把持座標フレームの実例を示す図である。
【
図4】一実施例による、把持姿勢を識別する方法の実例を示す図である。
【
図5】一実施例による、把持姿勢を識別するようにシステムを訓練するためのプロセスの実例を示す図である。
【
図6】一実施例による、精緻化された把持姿勢の実例を示す図である。
【
図7】一実施例による、物理シミュレータを用いて生成した訓練データの実例を示す図である。
【
図8】一実施例による、把持の成功率及びカバレッジに対する潜在空間の次元の影響を示す図である。
【
図9】一実施例による、生成された把持の精度及びカバレッジを改善することに対する精緻化ステップ数の影響を示す図である。
【
図10】一実施例による、カバレッジ率に対するサンプリングされた把持数の影響を示す図である。
【
図11】一実施例による、システムを試験するのに使用されるロボティック・グリッパ及び取り揃えた物体の実例を示す図である。
【
図12】一実施例による、Grasp-Netを使用して生成された把持及びGPDを使用して生成された把持の実例を示す図である。
【
図13】一実施例による、把持実験結果の2つの表を示す図である。
【
図14A】少なくとも一実施例による、推論及び/又は訓練論理を示す図である。
【
図14B】少なくとも一実施例による、推論及び/又は訓練論理を示す図である。
【
図15】少なくとも一実施例による、ニューラル・ネットワークの訓練及び展開を示す図である。
【
図16】少なくとも一実施例による、例示的データ・センタ・システムを示す図である。
【
図17A】少なくとも一実施例による、自律車両の実例を示す図である。
【
図17B】少なくとも一実施例による、
図17Aの自律車両のカメラのロケーション及び視野の実例を示す図である。
【
図17C】少なくとも一実施例による、
図17Aの自律車両の例示的システム・アーキテクチャを示すブロック図である。
【
図17D】少なくとも一実施例による、クラウド・ベースのサーバと
図17Aの自律車両との通信のためのシステムを示す図である。
【
図18】少なくとも一実施例による、コンピュータ・システムを示すブロック図である。
【
図19】少なくとも一実施例による、コンピュータ・システムを示すブロック図である。
【
図20】少なくとも一実施例による、コンピュータ・システムを示す図である。
【
図21】少なくとも一実施例による、コンピュータ・システムを示す図である。
【
図22】少なくとも一実施例による、1つ又は複数のIPコアを使用して作製することができる例示的な集積回路及び関連グラフィックス・プロセッサを示す図である。
【
図23A】少なくとも一実施例による、1つ又は複数のIPコアを使用して作製することができる例示的な集積回路及び関連グラフィックス・プロセッサを示す図である。
【
図23B】少なくとも一実施例による、1つ又は複数のIPコアを使用して作製することができる例示的な集積回路及び関連グラフィックス・プロセッサを示す図である。
【
図24A】少なくとも一実施例による、追加の例示的グラフィックス・プロセッサ論理を示す図である。
【
図24B】少なくとも一実施例による、追加の例示的グラフィックス・プロセッサ論理を示す図である。
【
図25】少なくとも一実施例による、コンピュータ・システムを示す図である。
【
図26A】少なくとも一実施例による、並列プロセッサを示す図である。
【
図26B】少なくとも一実施例による、パーティション・ユニットを示す図である。
【
図26C】少なくとも一実施例による、処理クラスタを示す図である。
【
図26D】少なくとも一実施例による、グラフィックス・マルチプロセッサを示す図である。
【
図27】少なくとも一実施例による、プロセッサ用のプロセッサ・マイクロ・アーキテクチャを示すブロック図である。
【
図28】少なくとも一実施例による、深層学習アプリケーション・プロセッサを示す図である。
【
図29】少なくとも一実施例による、例示的ニューロモーフィック・プロセッサを示すブロック図である。
【
図30】少なくとも一実施例による、グラフィックス・プロセッサの少なくとも一部分を示す図である。
【
図31】少なくとも一実施例による、グラフィックス・プロセッサの少なくとも一部分を示す図である。
【
図32】少なくとも一実施例による、グラフィックス・プロセッサ・コアの少なくとも一部分のブロック図である。
【
図33A】少なくとも一実施例による、スレッド実行論理を示す図である。
【
図33B】少なくとも一実施例による、スレッド実行論理を示す図である。
【
図34】少なくとも一実施例による、並列処理ユニット(「PPU」)を示す図である。
【
図35】少なくとも一実施例による、汎用処理クラスタ(「GPC」)を示す図である。
【
図36】少なくとも一実施例による、並列処理ユニット(「PPU」)のメモリ・パーティション・ユニットを示す図である。
【
図37】少なくとも一実施例による、ストリーミング・マルチプロセッサを示す図である。
【発明を実施するための形態】
【0006】
本明細書は、把持生成の問題を、変分オートエンコーダを使用して把持のセットをサンプリングすることとして構築し、サンプリングされた把持を、把持評価器モデルを使用してアセスメント及び精緻化する技法について説明する。把持サンプラと把持精緻化の両方のネットワークは、深度カメラによって観察される3D点群を入力として取り込む。この手法の評価は、シミュレーション及び実世界のロボット実験において提供される。一実施例では、本明細書に記載の技法は、多様な外観、大きさ、及び重量を有する一般に使用される様々な物体に対して、88%の成功率を達成する。このモデルは、シミュレーションにおいてのみ訓練され、いかなる余分なステップもなく、実世界において機能する。
【0007】
1.序論
把持選択は、ロボット操作において重要な問題である。ここで、ロボットは物体を観察し、この物体を持ち上げるためにそのグリッパをどこに動かすか(3D位置及び3D配向)を決定する必要がある(
図1を参照)。把持の安定性は、物体及びグリッパの形状、物体の質量分布、並びに表面摩擦に依存することから、把持選択は複雑になることがある。物体の周りの形状は、あるシーンにおいてロボットのマニピュレータを他の物体に衝突させずに到達可能な把持点がどれかについて、さらなる制約を課すことがある(
図2を参照)。いくつかの実例では、この問題は、物体の周りの確実な把持点を選択するための、形状に着想を得た発見的手法によって対処され、任意選択でそれに続いて、サンプリングされた把持の安全性及び到達可能性のより詳細な形状分析がおこなわれる。これらの手法の多くは、物体の完全な3Dモデルが入手可能かどうかに依存しており、このことは、たとえばロボットがノイズの多い深度カメラでしかシーンを観察しない一部の現実的なシナリオでは、制限となり得る。この制限を克服するために、いくつかの実施例は、完全な物体モデルを生成するようにカメラを移動させ、又は形状補完を実行し、それに続いて、形状に基づく把持分析がおこなわれる。しかし、いくつかの実施例では、カメラを移動することは、制約のある空間では不可能な場合があり、形状補完は、把持生成及び評価をおこなうには十分に正確ではない場合がある。
【0008】
一実施例では、深層学習技法を使用して、生の点群データから把持の品質が評価される。この手法は、良好な把持アセスメントを提供するが、評価のために把持をサンプリングするのになお手動で設計された発見的手法を使用し、又は交差エントロピー法(CEM)など、ブラックボックスの最適化技法に依存している。さらに、この手法は、サンプリングされた把持を改善するための効率的な手段を提供しない。本明細書では、未知の物体について安定した把持の多様なセットを効率的に生成するために、学習ベースのフレームワークを導入する。この手法は、把持をサンプリングし、評価し、改善する2つのネットワーク・アーキテクチャを導入する。様々な実施例は、以下の特徴のうちの1つ又は複数を含む。
【0009】
観察された物体の部分的な点群を、物体の把持の多様なセットにマッピングするように訓練されることが可能な変分オートエンコーダ(VAE)。重要なことに、私たちのVAEは、すべての実現可能な機能する把持の高度なカバレッジを提供する一方で、失敗する把持は少数しか生成しない。
【0010】
VAEサンプルの精度を改善するために、私たちは把持分別器ネットワークを導入し、これは、観察される物体及びロボット・グリッパの点群を、6Dグリッパ姿勢の品質アセスメントにマッピングする。重要なことに、把持サンプルを改善するため、たとえば、把持サンプルを動かして衝突しないようにするため、又はグリッパが物体と良好に位置合わせされるようにするために、このネットワークの勾配が使用できることを示す。
【0011】
私たちの手法が以前の手法より優れており、ロボットが成功率88%で17個の物体を持ち上げられるようにすることを実証する。さらに、私たちの手法が、高い成功率を維持しながら、把持サンプルの多様なセットを生成することを示す。
【0012】
本明細書は、以下のように構成される。最初に、深層学習を使用する把持の関連手法を対比し、次いで把持決定手法の異なる構成要素:把持サンプリング、評価、及び精緻化について説明する。さらに、様々なアブレーション研究の異なるハイパーパラメータの影響を示すために、本明細書に記載の技法が、現実のロボティック・プラットフォーム上で評価される。
【0013】
2.代替実施例
6DOF把持の学習。ロボット把持問題を解決するいくつかの実施例は、データ駆動型である。他の実施例は、手作りの特徴ベクトルに基づく。さらなる実施例は、生の視覚的測定値に対して作用するように畳み込みアーキテクチャを利用する。多くの把持合成手法は、把持を、画像内の配向された矩形として表すことにより可能になる。この3DOF表現は、グリッパ姿勢を画像平面に平行になるように制限する。しかし、こうした表現の欠点は、以下のことを含むことがある。こうした表示は把持の多様性を限定するので、アーム又はタスクによりさらに制限が課せられる場合、物体を持ち上げることが不可能になることがある。静的画像センサの場合、これは過度に制限された作業空間につながることもある。
【0014】
本明細書に記載の技法は、完全な6DOFの把持前姿勢を予測する問題に取り組む。これは、物体の一部分が隠れており、それが把持の成功に影響を及ぼすので、困難なことがある。様々な実施例は、ターゲット物体の形状を再構築するという補助タスクを含めることにより、この問題を回避する。次いで、6DOFの把持結果を予測するという主タスクは、測定の一部ではない局所的な形状を使用することができる。様々な実施例は、把持スコア関数を学習し、これを把持精緻化にも使用する。
【0015】
いくつかの実例は、この問題を、単一の最良な把持姿勢への回帰として構築するが、こうした実施例は本質的に、実現可能な把持の多様な分布を予測する能力が欠如していることがある。たとえば、一実施例は、6DOFの把持前姿勢を選択するために、事前定義された24通りの配向を分類する。こうした粗い分解SO(3)は、予測される把持の多様性が必然的に限定されることにつながる。対照的に、把持点検出方法(「GPD」)は、候補把持のより高密度なサンプリングを使用する。観察される点群の1つの点が、ランダムにサンプリングされ、主湾曲の推定される面法線及び局所的方向に位置合わせされたダルブーフレームが構築される。この発見的手法は、候補把持の非常に多様なセットを作製するが、マグ、皿、又はボールの縁など、薄い構造体に沿った把持を生成することができず、その理由は、ノイズの多い測定値からこれらの面法線を推定することが困難だからである。本明細書に記載の技法は、こうしたバイアスの影響を被ることはない。その結果、本明細書に記載の技法は、GPDが見いだせない把持を見いだすことができる。
【0016】
様々な実施例は、把持の問題を、強化学習問題又はその近似として構築する。学習済みの把持ポリシーは、最終的な把持姿勢だけを記述するよりさらに表現に富んでいる。それでもなお、多くの実例の動作空間は通常se(2)であり、多様性がトップダウンの把持に限定される。
【0017】
3Dデータから学習するためのディープ・ニューラル・ネットワーク。様々な実施例は、3D点群データに深層学習を適用する。いくつかの実例では、3Dデータは、3Dボクセルとして、又は2.5深度画像から抽出された特徴として表現され、畳み込みニューラル・ネットワークを使用して処理される。PointNet及びPointNet++は、3Dデータを表現することができ、表現を効率的に抽出する。他の実例は、3Dデータを表現するネットワーク・アーキテクチャの様々な変形形態を使用して、3D物体の姿勢推定、意味的セグメンテーション、及び部分セグメンテーションの重要な改善を示す。成功する把持を推定するために、把持の6DOF姿勢は正確であることが必要である。単一のRGB画像上で動作することは、入力と出力が同じドメインにないので、求められる精度を提供しない。したがって、3D点群データを使用して把持を生成する。SE(3)において把持を生成及び評価するための表現を学習するために、PointNet++を使用する。
【0018】
変分オートエンコーダ。変分オートエンコーダ(「VAE」)は、深層生成モデルの主要なカテゴリのうちの1つである。VAEは、訓練データの尤度を最大化するように、教師なしで訓練されることが可能である。VAEは、将来予測、新視点の生成、及び物体セグメンテーションなどの様々なタスクに適用されてきている。この研究では、SE(3)の把持の多様なセットをサンプリングするために、VAEを使用する。
【0019】
生成器モジュールは、潜在空間及び観察される点群Xからの異なるサンプルに基づくVAEである。生成器モジュールは、異なる把持提案を生成し、評価ネットワーク(分別器)が、それらの提案が成功するという可能性がどのくらいかに基づき、それらを受け入れ、又は拒絶する。生成器と分別器の両方が、物体の3D点群Xを入力の一部として取り入れる。
【0020】
3.6DOF把持姿勢の生成
把持姿勢の生成を、ロボット・グリッパの姿勢のセットを作り出すプロセスとして構築し、それにより、これらの姿勢のいずれにおいてもグリッパを閉じることにより、物体の安定した把持が実現されるようにする。さらにこのプロセスは、物体を把持することができるあらゆる実現可能なやり方を最終的に網羅する姿勢の多様なセットを生成すべきである。ロボット・グリッパの姿勢はSE(3)で与えられて、グリッパの3D並進及び3D配向が特定される。ここでは、単一の物体について把持姿勢を生成することに焦点を当て、マニピュレータの到達範囲、及びシーンにある他の物体に起因するさらなる制限は、この研究の範囲を超えたものであり、マニピュレータ軌道最適化技法によって対処することができる。あらゆる実現可能な把持の空間のなかで、成功する把持のサブ空間が狭いことから、把持姿勢の生成は困難である。把持の姿勢のわずかな摂動が、成功する把持を失敗に変えることがある。安定した把持の多様なセットを生成するために、私たちの手法は、変分オートエンコーダ・ネットワークを使用して把持姿勢をサンプリングし、それに続いて、反復的な評価及び精緻化のプロセスがおこなわれる。私たちの手法への入力は、ロボットが持ち上げるべき物体の点群である。
【0021】
具体的には、事後分布P(G
*|X)を学習することを目的とし、ここでG
*は、すべての成功する把持の空間を表し、Xは、カメラによって観察される物体の部分的な点群である。各把持g∈G
*は、(R,T)∈SE(3)によって表され、ここでR∈SO(3)及び
【数1】
は、把持gの回転及び並進である。把持は、物体参照フレームにおいて定義され、このフレームの原点は
【数2】
であり、観察される点群の質量の中心である。その軸は、カメラ・フレームの軸に平行である(
図3を参照)。成功する把持G
*の分布は、複雑で非連続的なことがある。たとえば、マグについてG
*の分布は、縁、持ち手、及び底に沿って複数のモードを有する。各モード内で、成功する把持の空間は連続的であるが、異なるモードの把持は、互いに分離していることがある。物体カテゴリごとの別々のモードの総数は、物体の形状及び大きさに基づいて変化する。
【0022】
G*のモードの数は事前にわからないので、成功する把持g∈G*の尤度を最大化する生成器モジュールを学習することを提案する。生成器は、訓練中、成功する把持しか観察しないので、生成器が、失敗する把持g∈G-を生成することもあり得る。これらのネガティブの把持を検出及び精緻化するために、P(S|g,X)、すなわち把持g及び観察される点群Xの成功確率を予測するように、評価モジュールが訓練される。評価モジュールは、サンプリングされた把持に適用されると、把持の成功を予測し、その成功勾配を、ネットワークを通して逆に伝播して、改善された把持姿勢を生成する。このプロセスを繰り返すことができる。閾値を下回ったままの把持をすべて破棄することにより、高品質の把持の最終的なセットが提供される。
【0023】
3.1.変分把持サンプラ
図5に示す把持サンプラは、P(G|X)、すなわち事前定義された成功する把持g∈G
*のセットの尤度を最大化する生成モデルである。点群X及び潜在変数zを前提とすると、サンプラは、把持を予測する確定関数である。P(z)、すなわち潜在空間の確率密度関数がわかっており、事前に選択されることが仮定される。私たちの手法では、P(z)=N(0,1)を使用する。点群Xを前提とすると、P(z)から異なるzをサンプリングすることによって、異なる把持が生成される。生成された把持の尤度は、以下のように書くことができる。
P(G|X)=∫P(G|X,z;Θ)P(z)dz (1)
それぞれのポジティブの把持g∈G
*の最適化の式(1)は、潜在空間の値すべてを積分することを必要とし、これは手に負えない。式(1)を扱いやすくするため、エンコーダQ(z|X、g)が、点群Xと把持gの各ペアを、潜在空間z内の小さいサブ空間にマッピングする。サンプリングされたz~Qを前提とすると、デコーダは、把持
【数3】
を再構築する。訓練中、エンコーダ及びデコーダは、グラウンド・トゥルースの把持g∈G
*と再構築された把持
【数4】
との間で、再構築損失
【数5】
を最小に抑えるように最適化される。さらに、単位分散で正規分布された潜在空間を確保するように、分布Q(,|,)と正規分布N(0,1)との間のKL発散D
KLが最小に抑えられる。損失関数は、以下のように定義される。
【数6】
式(2)は、確率的勾配降下法を使用して最適化される。ランダムな視点から観察される物体について、ミニ・バッチごとに、点群Xがサンプリングされる。サンプリングされた点群Xについて、層化サンプリングを使用して、グラウンド・トゥルースの把持G
*のセットから把持gがサンプリングされる。配向及び並進の損失を組み合わせるために、再構築損失を以下のように定義する。
【数7】
ここで、T(.;,p)は、ロボット・グリッパ上の事前定義された点pのセットの変換である。訓練中、デコーダは、N(0,1)からサンプリングされた潜在値zをデコードすることを学習し、把持を生成する一方で、エンコーダは、正規分布を維持しながら把持姿勢を再構築するのに十分な情報をzが含むように、zを出力することを学習する。推論中、エンコーダQは取り除かれ、潜在値はN(0,1)からサンプリングされる。
【0024】
このエンコード及びデコーダのアーキテクチャでは、各点が3D座標及び特徴ベクトルを有する。各層の特徴は、各点の特徴、及び互いに対する点の3D関係に基づき、コンピュートされる。各入力点x∈Xの特徴は、連結されてg=[R,T]になる。デコーダでは、各点の特徴が、潜在変数zと連結される。エンコーダは、点群Xと潜在変数把持gの相対情報を、デコーダによって再構築が可能なやり方で圧縮することを学習する。
【0025】
3.2.把持姿勢の評価
把持サンプラは、ポジティブの把持だけを使用して、連続した事後分布P(G|X,z)を訓練する。その結果、把持サンプラは、分布のモード間にある失敗した把持を含む場合がある。これらの過渡的な把持及び他の偽ポジティブを識別し、取り除く必要がある。これをおこなうために、成功確率P(S|g,X)を各把持に割り当てる把持評価ネットワークが必要である。このネットワークは、観察された点群Xに対する把持を推理する必要があるが、同時に、物体の観察されていない部分を外挿できなくてはならない。いくつかの実施例は、物体の観察された局所的な部分だけに基づき、把持を分類することを学習する。実際、物体の観察された点群は、欠落した深度値又はノイズの多い深度値などの不備がある。この問題を軽減するために、以前の方法は、高品質の深度センサの使用や、複数のビューの使用に頼るが、これにより、制御された環境の外側にシステムを導入することが制限される。この研究では、物体の不完全な観察された点群Xだけを使用して、各把持を分類する。
【0026】
把持姿勢の成功は、物体に対する把持の相対姿勢に依存する。評価器ネットワークへの入力は、点群X及び把持gである。把持サンプラと同様に、把持評価器にPointNetアーキテクチャを使用する。把持を分類するために複数の方法が存在する。第1に、簡単な手法は、把持gの6D姿勢を、第1の層の各点x∈Xの特徴に関連付けることである。私たちの実験では、こうした表現は、把持分類の精度低下につながることが示された。その代わりに、物体の点群により密接に結びつけられるようなやり方で、把持gを表現することを提案する。6D把持姿勢gに従ってレンダリングされた点群Xgによって、ロボット・グリッパを近似する。点が物体に属するのかグリッパに属するのかを示す追加のバイナリ特徴を使用することにより、物体の点群Xとグリッパの点群Xgを組み合わせて単一の点群にする。PointNetアーキテクチャでは、各点の特徴は、点自体、及びその近傍、さらに点の相対的な空間関係の関数である。統合点群X∪Xgを使用することにより、把持姿勢gと物体点群Xとの間のすべての相対情報を使用して把持を分類することが自然になる。把持評価器は、
L評価器=-(ylog(s)+(1-y)log(1-s)) (4)
を最適化することにより、交差エントロピー損失を使用して最適化され、
ここでyは、把持が成功するかどうかを示す把持のグラウンド・トゥルース・バイナリ・ラベルであり、sは、評価器による成功の予測確率である。
【0027】
ロバストな評価器を訓練するために、モデルは、ポジティブの把持とネガティブの把持の両方を用いて訓練される必要がある。実現可能なすべての6D把持姿勢の空間は、組合せ的に大きいので、すべてのネガティブの把持をサンプリングすることは不可能である。その代わりに、ネガティブの把持をサンプリングするためのハード・ネガティブの・マイニングをおこなう。ハード・ネガティブの把持G-のセットは、ポジティブの把持と同様の姿勢を有するが、物体に衝突するか、物体から遠すぎて物体を把持できない把持として定義される。より正式には、G-は、
G-={g-|∃g∈G*:L(g,g-)<∈} (5)
として定義され、
ここでL(.,.)は、式(3)において定義される。訓練中、gーは、事前に生成されたネガティブの把持のセットからサンプリングされ、ポジティブの把持をランダムに摂動させることによって、グリッパのメッシュを物体のメッシュに衝突させるか、グリッパのメッシュを物体から遠くに動かす。
【0028】
3.3.反復的な把持姿勢の精緻化
評価ネットワークは、実現できそうにない把持は拒絶するが、拒絶された把持の大部分は、成功する把持に近いものであり得る。成功しない把持を成功する把持に変える変換Δg∈SE(3))を探すことによって、この見識を利用することができる。より正式には、成功の確率を増大させる精緻化変換Δg、すなわちP(s=1|g+Δg)>P(s=1|g)を探す。評価ネットワークは、点群X及び把持gに基づき、成功sの微分可能関数を表現する。成功確率を最大に向上させることにつながる精緻化変換は、把持変換に対する成功の導関数:∂S/∂gを取ることにより、コンピュートすることができる。偏導関数∂S/∂gは、成功の確率を増大させるように、グリッパ点群Xgのそれぞれの点について変換を提供する。導関数は、グリッパのそれぞれの点に関して独立してコンピュートされるので、Xgについて非剛体変換につながることがある。剛体の制約を適用するために、変換されたグリッパ点群Xgは、オイラー角R
g=(α
g、β
g、γ
g)及び変換T
gにおいて定義された把持の配向の関数として定義される。連鎖法則を使用して、Δ
gは、以下のようにコンピュートされる。
【数8】
【0029】
偏導関数∂S/∂gは、局所的な近傍において有効な近似にすぎないので、各ステップで更新の大きさを限定するためにハイパーパラメータηを使用する。実際、把持の最大並進更新が1cmを超えないようなやり方で、ηを選択する。
図6は、様々な反復において推定される把持の精緻化を示す。
【0030】
4.実験
把持のための訓練データ。成功する把持の参照セットを生成するために、任意の物体形状について把持の現実的なシミュレーションを提供する物理シミュレーションFleXを使用する。候補の把持が、物体形状に基づきサンプリングされる。物体のメッシュ表面のランダムな点をサンプリングし、グリッパのz軸(
図3を参照)を面法線に位置合わせする。グリッパと物体表面との間の距離が、ゼロとグリッパの指の長さとの間で一様にサンプリングされる。z軸周りの配向も、一様分布から導かれる。衝突せず、指同士の間の閉鎖量が物体に交差する把持だけをシミュレーションする。ShapeNetにおける6つのカテゴリから、合計で206個の物体を使用する:箱、及び円筒(ランダムに生成)、並びにボール、ボトル、及びマグ。合計で10,816,720通りの候補把持がサンプリングされ、そのうち7,074,038通り(65.4%)、すなわち非空の閉鎖量試験にパスする把持をシミュレーションする。シミュレーションは、浮遊性の平行あごグリッパ、及び重力のない浮遊性の物体から成る。表面摩擦及び物体密度は一定に保たれる。グリッパは、その指を閉めた後、事前定義された振とう動作を実行する。物体が両指の間に保たれていれば、把持は成功とラベル付けされる。全体で、2,104,894通り(19.4%)の成功する把持を生成する。結果的に生じるポジティブの把持のラベルは、
図7の実例に示すように密に分布される。
【0031】
訓練。把持生成器と評価器の両方のネットワークは、PointNet++を使用し、同様のアーキテクチャを有する。両方のモジュールは、3セットの抽象化層と、それに続く完全結合層から成る。生成器ネットワーク用の訓練データの各バッチは、ランダムなビューからの物体のレンダリングと、サンプリングされた把持が十分な多様性を有することを保証するために層化サンプリングを使用してサンプリングされた64通りの把持とから成る。KL発散損失の重み(式(2)のα)は、0.01に設定される。評価器ネットワーク用の訓練データの各バッチは、ポジティブの把持30%と、ネガティブの把持30%と、ハード・ネガティブの把持40%とから成る。ハード・ネガティブの把持は、各軸に±0.6ラジアン、及び並進に±3cmを適用することによって摂動されたポジティブの把持から選択される。両方のモデルは、0.0001の学習率を使用して、Adamオプティマイザで訓練される。すべての把持がシミュレーションで生成され、いずれのモデルを訓練するためにも実データは全く使用しなかった(セクション4を参照)。
【0032】
ネットワーク・アーキテクチャの詳細。把持生成器と評価器の両方は、PointNet++アーキテクチャに基づく。両方のモデルは、3セットの抽象化層から成る。各セットの抽象化層は、128個の点、32個の点、及びすべての点をサンプリングする。各セットの抽象化層は、サンプリングされた点の2cm以内の点、4cm以内の点、∞以内の点、及び半径以内の点をサンプリングする。各セットの抽象化層は、3つの完全結合層を使用して、特徴をコンピュートする。各セットの抽象化層のチャネル数は、それぞれ[64,64,128]、[128,128,256]、及び[256,256,512]である。セットの抽象化層の後に、1024ユニットを有する2つの完全結合層が続く。把持生成器ネットワークは、単位四元数として表現される回転Rと、並進Tとを出力する。四元数は、線形の完全結合層にL2ノルムを適用することによって生成される。並進Tには正常化をおこなわない。評価器ネットワークは、ソフトマックス層を使用して、各把持のスコアを予測する。
【0033】
評価メトリック。把持方法を定量的に評価するために、2つのメトリック、すなわち成功率及びカバレッジ率を使用する。成功率は、すべての予測された把持のうち、成功する把持の割合である。このメトリックは、実行される把持だけを考慮し、他の把持に関するいかなる情報も含まない。1つの把持だけを予測することは、3D把持には適切ではなく、その理由は、予測された把持が、ロボットと環境内の他の物体との衝突につながることがあり、又は、予測された把持に到達できる実現可能で有効なロボット関節構成がない場合があるからである。実行可能で成功する把持を達成するために、異なる並進及び方向からの把持の多様なセットを生成して、運動学的な実現可能性及び衝突回避を確認することが必要である。その結果、把持の多様性を捕捉し、ポジティブの把持G
*の空間が、生成された把持によってどのくらい良好にカバーされるかを測定するカバレッジ率を導入する。把持gからせいぜい2cm離れた把持
【数9】
が存在する場合、ポジティブの把持g∈G
*は、予測される把持
【数10】
のセットによってカバーされる。物体フレームにおいて同様の並進を有するポジティブの把持は、同様の配向を有する。その結果、把持の並進の距離を、把持がカバーされるかどうかを評価するための基準として使用することを選択した。把持はSE(3)において定義されるので、G
*は非可算無限である。その結果、G
*は、把持をサンプリングしながらデータを生成することによって近似される。成功率とカバレッジ率は、バイナリ分類の文脈における精度と再現率に類似している。精度-再現曲線と同様に、成功率とカバレッジ率の曲線を使用して、私たちの方法を分析し評価する。アブレーション研究及び分析のために、成功-カバレッジ率のAUCを使用する。
【0034】
4.1.分析及びアブレーション研究
訓練データの生成(セクション4)と同じ物理シミュレーションを使用して、異なるパラメータ及びモジュールの影響を定量的に評価する。アブレーション研究については、訓練中にホールド・アウトされた10個の異なる物体について、86通りの物体点群観察を生成する。点群ごとに、200個の潜在値がサンプリングされ10回の反復にわたって精緻化され、結果的に1視点あたり2200通りの把持、合計182,600通りの把持が得られる。
【0035】
潜在空間の次元。生成された把持の品質に影響を及ぼす潜在空間の次元を決定するとき、固有の張力が存在する。潜在空間は、VAEが把持を再構築できるようにするのに十分な容量を有する必要がある。同時に、高次元の潜在空間は過剰適合につながり、さらに著しく多くの訓練データをカバーすることが必要になる。またそれは、特に推論中にサンプリングされた潜在値が、訓練中に生成器ネットワークによって見られていない場合、推論中にサンプリングされた把持の品質を劣化させる。この影響を分析するために、潜在空間の次元数を増やして生成器ネットワークを評価する。
図8は、結果的に得られる成功-カバレッジ曲線を示す。図からわかるように、1次元は、潜在空間が十分な容量を有していないので、最も少ないAUCを有する。3次元及び4次元の潜在空間は、訓練データについてわずかに良好なL
vaeにつながるが、訓練中にVAEが潜在空間を密にカバーすることができないので、推論中の性能が劣る。これらの結果を前提として、以降のすべての評価に2次元の潜在空間を選択する。
【0036】
把持品質に対する精緻化の影響。把持の精緻化により、評価器ネットワークに基づく成功確率が増大するが、これは、精緻化された把持が試験期間中に成功することを必ずしも意味しない。各精緻化ステップにより導かれた実際の改善を分析するために、シミュレーションにおいて把持を評価する。
図9は、各精緻化の反復においてコンピュートされた、把持の成功-カバレッジ曲線を示す。図示してあるように、生成された把持の成功率が増大しているだけでなく、カバレッジ率も同じく増大している。これは、把持が改善されると、これらの把持が、G
*のサンプリングされたポジティブの把持に近づくからである。曲線のAUCは、精緻化の10回目の反復後に定常に達する。
【0037】
カバレッジに対するサンプリングされた把持の影響。前のセクションでは、200個のランダムな潜在値を使用してアブレーション研究を実行したが、その理由は、それがGPUメモリに適合する最大のバッチ・サイズであり、私たちのロボット実験に使用したのと同じ設定だったからである。サンプリングされた潜在値の数は限られていたので、
図9のカバレッジ率は、10回の精緻化ステップの後でも0.5未満であった。サンプリングされた把持の数がカバレッジにどのように影響するかを調査するために、前のアブレーション研究に使用したのと同じ点群に対して、10個の異なるバッチで2000通りの把持をサンプリングする。
図10は、サンプルが増えると、カバレッジ率が増大する様子を示す。
【0038】
4.2.ロボット実験
生成された把持の最終的な試験は、実世界でそれらを実行し、不完全な知覚、ロボット関節の限界、制御誤差、及びモデル化するのが困難な摩擦などの物理現象に対処することである。以下のことを明らかにしたい。(1)私たちの方法は、シミュレーションにおいてのみ訓練されたが、実世界に合わせて拡張される;(2)生成された把持分布は、ロボットの運動学及び衝突の制約に反するものを破棄した後でも、成功する把持を見いだすのに十分なほど多様である;(3)私たちの方法の多様な把持サンプリングは、代替的な6DOFの把持プランナ(「GPD」)と比較して、より高い成功率につながる。
【0039】
すべての実験は、Intel RealSense D415カメラがその平行あごのグリッパに装着された7DOFのFranka Pandaマニピュレータを使用しておこなわれる。視覚的及び物理的に困難な、一般に使用される物体のセットを選択する。物体の重さは42g(胡椒入れ)から618g(マスタードの瓶)までの間である。ハードウェア設定及び物体の試験セットを、
図11に示す。
【0040】
プロトコル。各物体は、3つの異なる安定した姿勢で、ロボットの前にテーブル上に置かれる。ロボットのエンドエフェクタは、手に装着された深度カメラがテーブル上で遮られることのないビューを有するように、動かされる。ロボットが物体を落とすことなく10cm持ち上げることができれば、把持は成功とみなされる。
【0041】
測定された点群をフィルタリングし、テーブル平面を取り除き、残りの点をクラスタ化する。この抽出された物体点群は、私たちの手法への、及びGPDへの入力としての役割を果たす。両方の方法は、スコアリングされた把持のリストを返す。各把持姿勢に対して衝突のない経路を確認するために、モーション・プランナを使用し、最高スコアを有する把持姿勢を実行する。返されたセットのなかでいずれの把持も実行できない場合には、この試験は失敗とみなす。1つの方法につき合計で51回の試験を走らせる。
【0042】
結果。表1は、私たちの方法が、すべての物体にわたり成功率でGPDより優れていることを示している。この理由の1つは、私たちの方法が多様な把持を生成し、それにより運動学的に実行可能な把持を見いだしやすくなることである。対照的に、GPDは、多くの異なる把持を生成せず、これはときに、運動学的に実行可能な把持を見いだせないという状況につながる。GPDにとってマグは特に難しく、その理由は、GPDが、縁からの把持を全く生成しないからである(
図12を参照)。問題の別の発生源は、物体の表面のうちの1つに対して、指グリッパが接線方向になる把持である。この場合、把持を実行する際のわずかな誤差により、把持が、物体を掴むことからそれを押すことに変わることがある。実験の詳細な結果を、表2及び
図13に示す。
【0043】
5.結論
この研究では、未知の物体に対して把持の多様なセットを生成するために、6DOFのGraspNetを導入した。私たちの方法は、物体について様々な把持をサンプリングする訓練されたVAEから成る。VAEは、成功する把持姿勢の複雑な分布を捕捉することができるが、高度にロバストな把持生成に必要な精度をそれほど提供しない。この限界を克服するために、把持品質を評価し、反復プロセスにおいて把持を精緻化できる把持評価器ネットワークをさらに導入する。私たちの知る限り、学習済みの把持サンプラも、勾配ベースの精緻化プロセスも、これまでに導入されたことがない。
【0044】
私たちのモデルの訓練は、物理シミュレータによって生成された合成把持データを使用しておこなわれる。したがって、私たちのモデルは、実世界のいかなるデータを収集する必要もなく、物体のより大きいセットに合わせて拡大することができる。実際のロボット・プラットフォーム及び内蔵RGB-Dカメラに私たちの方法を導入することにより、未知の3Dモデルを有する物体について、この方法を実世界に移行できることを実証した。未知の3Dモデルを有する17個の物体についてロボット実験を実施し、3D把持において最先端の結果を達成した。また、現実的な物理シミュレータでのアブレーション研究を介して、成功率及びカバレッジという観点から、生成された把持の徹底的な分析を実施した。
【表1】
【表2】
【0045】
表2 ロボット実験の詳細な結果。レ:試験は成功した X:生成された把持は物体を把持するのに成功しなかった *:生成された把持のうち運動学的に実行可能なものがない。
【0046】
この手法は、コンピュータ・ビジョン及びロボット工学において多数の興味深い方向性を切り開く。私たちの方法では、すべての潜在値が一様にサンプリングされ、次いで、衝突チェック及び運動学的に実行可能な解に基づき、把持が取り除かれる。考えられる機能拡張は、対称の物体だけを考慮するのではなく、周囲の物体も考慮するようにサンプラ又は評価器を訓練して、衝突する把持又は実行不可能な把持の生成を直接回避することである。興味深い他の方向性は、サンプリングされた把持を精緻化するためだけでなく、物体に近づいているマニピュレータにリアルタイムのフィードバック案内を提供するために、評価器を使用することである。私たちの実験は、私たちの勾配ベースの手法が、マニピュレータを成功する把持にどんどん近づけることに成功できたという証拠を提供する。
【0047】
図14Aは、1つ又は複数の実施例に関して推論及び/又は訓練の動作を実行するために使用される推論及び/又は訓練論理1415を示す。推論及び/又は訓練論理1415に関する詳細事項は、
図14A及び/又は
図14Bと併せて以下に提供される。
【0048】
少なくとも一実施例では、推論及び/又は訓練論理1415は、1つ若しくは複数の実施例の態様において推論するために訓練及び/若しくは使用されるニューラル・ネットワークのニューロン若しくは層に対応した、順伝播及び/若しくは出力の重み、並びに/又は入力/出力データを記憶するためのデータ・ストレージ1401を、限定することなく含んでもよい。少なくとも一実施例では、データ・ストレージ1401は、1つ若しくは複数の実施例の態様を使用した訓練及び/又は推論中に、入力/出力データ及び/又は重みパラメータを順伝播する間に1つ又は複数の実施例と併せて訓練又は使用されるニューラル・ネットワークの各層の重みパラメータ及び/又は入力/出力データを記憶する。少なくとも一実施例では、データ・ストレージ1401の任意の部分は、プロセッサのL1、L2、又はL3のキャッシュ、若しくはシステム・メモリを含む他のオン・チップ又はオフ・チップのデータ・ストレージとともに含められてもよい。
【0049】
少なくとも一実施例では、データ・ストレージ1401の任意の部分は、1つ若しくは複数のプロセッサ、又は他のハードウェア論理デバイス若しくは回路の内部にあっても外部にあってもよい。少なくとも一実施例では、データ・ストレージ1401は、キャッシュ・メモリ、ダイナミック・ランダム・アドレス可能メモリ(「DRAM」:dynamic randomly addressable memory)、スタティック・ランダム・アドレス可能メモリ(「SRAM」:static randomly addressable memory)、不揮発性メモリ(たとえば、フラッシュ・メモリ)、又は他のストレージであってもよい。少なくとも一実施例では、データ・ストレージ1401が、たとえばプロセッサの内部にあるか外部にあるかの選択、又はDRAM、SRAM、フラッシュ、若しくは何らか他のタイプのストレージから構成されるかの選択は、オン・チップ対オフ・チップで利用可能なストレージ、実行される訓練及び/又は推論機能のレイテンシ要件、ニューラル・ネットワークの推論及び/又は訓練で使用されるデータのバッチ・サイズ、又はこれらの要因の何からの組合せに応じて決められてもよい。
【0050】
少なくとも一実施例では、推論及び/又は訓練論理1415は、1つ若しくは複数の実施例の態様において推論するために訓練及び/若しくは使用されるニューラル・ネットワークのニューロン若しくは層に対応した、逆伝播及び/若しくは出力の重み、並びに/又は入力/出力データを記憶するためのデータ・ストレージ1405を、限定することなく含んでもよい。少なくとも一実施例では、データ・ストレージ1405は、1つ若しくは複数の実施例の態様を使用した訓練及び/又は推論中に、入力/出力データ及び/又は重みパラメータを逆伝播する間に1つ又は複数の実施例と併せて訓練又は使用されるニューラル・ネットワークの各層の重みパラメータ及び/又は入力/出力データを記憶する。少なくとも一実施例では、データ・ストレージ1405の任意の部分は、プロセッサのL1、L2、又はL3のキャッシュ、若しくはシステム・メモリを含む他のオン・チップ又はオフ・チップのデータ・ストレージとともに含められてもよい。少なくとも一実施例では、データ・ストレージ1405の任意の部分は、1つ若しくは複数のプロセッサ、又は他のハードウェア論理デバイス若しくは回路の内部にあっても外部にあってもよい。少なくとも一実施例では、データ・ストレージ1405は、キャッシュ・メモリ、DRAM、SRAM、不揮発性メモリ(たとえば、フラッシュ・メモリ)、又は他のストレージであってもよい。少なくとも一実施例では、データ・ストレージ1405が、たとえばプロセッサの内部にあるか外部にあるかの選択、又はDRAM、SRAM、フラッシュ、若しくは何らか他のタイプのストレージから構成されるかの選択は、オン・チップ対オフ・チップで利用可能なストレージ、実行される訓練及び/又は推論機能のレイテンシ要件、ニューラル・ネットワークの推論及び/又は訓練で使用されるデータのバッチ・サイズ、又はこれらの要因の何からの組合せに応じて決められてもよい。
【0051】
少なくとも一実施例では、データ・ストレージ1401と、データ・ストレージ1405は、別々のストレージ構造であってもよい。少なくとも一実施例では、データ・ストレージ1401と、データ・ストレージ1405は、同じストレージ構造であってもよい。少なくとも一実施例では、データ・ストレージ1401と、データ・ストレージ1405は、部分的に同じストレージ構造で、部分的に別々のストレージ構造であってもよい。少なくとも一実施例では、データ・ストレージ1401と、コード及び/又はデータ・ストレージ1405との任意の部分は、プロセッサのL1、L2、又はL3のキャッシュ、若しくはシステム・メモリを含む他のオン・チップ又はオフ・チップのデータ・ストレージとともに含められてもよい。
【0052】
少なくとも一実施例では、推論及び/又は訓練論理1415は、訓練及び/又は推論コードに少なくとも部分的に基づく、又はそれにより示される論理演算及び/又は数学的演算を実行するための、1つ又は複数の算術論理演算ユニット(「ALU」:arithmetic logic unit)1410を、限定することなく含んでもよく、その結果が、アクティブ化ストレージ1720に記憶されるアクティブ化(たとえば、ニューラル・ネットワーク内の層若しくはニューロンからの出力値)をもたらしてもよく、これらは、データ・ストレージ1401及び/又は、データ・ストレージ1405に記憶される入力/出力及び/又は重みパラメータの関数である。少なくとも一実施例では、アクティブ化ストレージ1420に記憶されるアクティブ化は、命令又は他のコードを実行したことに応答して、ALU1410によって実行される線形代数計算又は行列ベースの計算に従って生成され、ここでデータ・ストレージ1405及び/又はデータ1401に記憶された重み値は、バイアス値、勾配情報、運動量値(momentum value)などの他の値、又は他のパラメータ若しくはハイパーパラメータとともにオペランドとして使用され、これらのいずれか又はすべてが、データ・ストレージ1405、又はデータ・ストレージ1401、又はオン・チップ若しくはオフ・チップの別のストレージに記憶されてもよい。少なくとも一実施例では、ALU1410は、1つ若しくは複数のプロセッサ、又は他のハードウェア論理デバイス若しくは回路内に含まれるが、別の実施例では、ALU1410は、それらを使用するプロセッサ又は他のハードウェア論理デバイス若しくは回路の外部にあってもよい(たとえばコプロセッサ)。少なくとも一実施例では、ALU1410は、プロセッサの実行ユニット内に含まれてもよく、又は同じプロセッサ内にあるか異なるタイプの異なるプロセッサ(たとえば、中央処理装置、グラフィックス・プロセッシング・ユニット、固定機能ユニットなど)の間で分散されているかのいずれかであるプロセッサの実行ユニットによりアクセス可能なALUバンク内に、他のやり方で含まれてもよい。少なくとも一実施例では、データ・ストレージ1401、データ・ストレージ1405、及びアクティブ化ストレージ1420は、同じプロセッサ又は他のハードウェア論理デバイス若しくは回路にあってもよく、別の実施例では、それらは異なるプロセッサ又は他のハードウェア論理デバイス若しくは回路にあってもよく、或いは同じプロセッサ又は他のハードウェア論理デバイス若しくは回路と、異なるプロセッサ又は他のハードウェア論理デバイス若しくは回路との何らかの組合せにあってもよい。少なくとも一実施例では、アクティブ化ストレージ1420の任意の部分は、プロセッサのL1、L2、又はL3のキャッシュ、若しくはシステム・メモリを含む他のオン・チップ又はオフ・チップのデータ・ストレージとともに含められてもよい。さらに、推論及び/又は訓練コードが、プロセッサ又は他のハードウェア論理若しくは回路にアクセス可能な他のコードとともに記憶されてもよく、プロセッサのフェッチ、デコード、スケジューリング、実行、リタイア、及び/又は他の論理回路を使用してフェッチ及び/又は処理されてもよい。
【0053】
少なくとも一実施例では、アクティブ化ストレージ1420は、キャッシュ・メモリ、DRAM、SRAM、不揮発性メモリ(たとえば、フラッシュ・メモリ)、又は他のストレージであってもよい。少なくとも一実施例では、アクティブ化ストレージ1420は、完全に又は部分的に、1つ若しくは複数のプロセッサ又は他の論理回路の内部にあってもよく、又は外部にあってもよい。少なくとも一実施例では、アクティブ化ストレージ1420が、たとえばプロセッサの内部にあるか外部にあるかの選択、又はDRAM、SRAM、フラッシュ、若しくは何らか他のタイプのストレージから構成されるかの選択は、オン・チップ対オフ・チップの利用可能なストレージ、実行される訓練及び/又は推論機能のレイテンシ要件、ニューラル・ネットワークの推論及び/又は訓練で使用されるデータのバッチ・サイズ、又はこれらの要因の何からの組合せに応じて決められてもよい。少なくとも一実施例では、
図14Aに示す推論及び/又は訓練論理1415は、グーグルからのTensorflow(登録商標)処理ユニット、Graphcore(商標)からの推論処理ユニット(IPU:inference processing unit)、又はIntel CorpからのNervana(登録商標)(たとえば「Lake Crest」)プロセッサなどの特定用途向け集積回路(「ASIC:application-specific integrated circuit」)と併せて使用されてもよい。少なくとも一実施例では、
図14Aに示す推論及び/又は訓練論理1415は、中央処理装置(「CPU」:central processing unit)ハードウェア、グラフィックス・プロセッシング・ユニット(「GPU」:graphics processing unit)ハードウェア、又はフィールド・プログラマブル・ゲート・アレイ(「FPGA」:field programmable gate array)など他のハードウェアと併せて使用されてもよい。
【0054】
図14Bは、少なくとも1つの様々な実施例による、推論及び/又は訓練論理1415を示す。少なくとも一実施例では、推論及び/又は訓練論理1415は、ハードウェア論理を限定することなく含んでもよく、このハードウェア論理では、計算リソースが、ニューラル・ネットワーク内のニューロンの1つ若しくは複数の層に対応する重み値又は他の情報の専用のものであるか、又は他のやり方でそれらと併せてしか使用されない。少なくとも一実施例では、
図14Bに示す推論及び/又は訓練論理1415は、グーグルからのTensorflow(登録商標)処理ユニット、Graphcore(商標)からの推論処理ユニット(IPU)、又はインテルコーポレーションからのNervana(登録商標)(たとえば「Lake Crest」)プロセッサなどの特定用途向け集積回路(ASIC)と併せて使用されてもよい。少なくとも一実施例では、
図14Bに示す推論及び/又は訓練論理1415は、中央処理装置(CPU)ハードウェア、グラフィックス・プロセッシング・ユニット(「GPU」)ハードウェア、又はフィールド・プログラマブル・ゲート・アレイ(FPGA)など他のハードウェアと併せて使用されてもよい。少なくとも一実施例では、推論及び/又は訓練論理1415は、限定することなく、データ・ストレージ1401、及びデータ・ストレージ1405を含み、これらを使用して、重み値、並びに/又はバイアス値、勾配情報、運動量値、及び/若しくは他のパラメータ若しくはハイパーパラメータ情報を含む他の情報を記憶してもよい。
図14Bに示す少なくとも一実施例では、データ・ストレージ1401及びデータ・ストレージ1405のそれぞれは、計算ハードウェア1402及び計算ハードウェア1406などの専用計算リソースにそれぞれ関連付けられる。少なくとも一実施例では、計算ハードウェア1402及び計算ハードウェア1406のそれぞれは、線形代数関数などの数学的関数を、それぞれデータ・ストレージ1401及びデータ・ストレージ1405に記憶された情報に対してのみ実行する1つ又は複数のALUを備え、その結果は、アクティブ化ストレージ1420に記憶される。
【0055】
少なくとも一実施例では、データ・ストレージ1401及び1405のそれぞれ、並びに対応する計算ハードウェア1402及び1406は、ニューラル・ネットワークの異なる層にそれぞれ対応し、それにより、データ・ストレージ1401と計算ハードウェア1402との1つの「ストレージ/計算の対1401/1402」から結果的に生じるアクティブ化は、ニューラル・ネットワークの概念的組織化を反映させるために、次のデータ・ストレージ1405と計算ハードウェア1406との「ストレージ/計算の対1405/1406」への入力として提供される。少なくとも一実施例では、ストレージ/計算の対1401/1402、及び1405/1406は、2つ以上のニューラル・ネットワークの層に対応してもよい。少なくとも一実施例では、ストレージ/計算の対1401/1402、及び1405/1406の後に、又はそれと並列に、追加のストレージ/計算の対(図示せず)が、推論及び/又は訓練論理1415に含まれてもよい。
【0056】
図15は、少なくとも一実施例による、ディープ・ニューラル・ネットワークの訓練及び導入を示す。少なくとも一実施例では、未訓練ニューラル・ネットワーク91506が、訓練データ・セット1502を使用して訓練される。少なくとも一実施例では、訓練フレームワーク1504は、PyTorchフレームワークであり、一方他の実施例では、訓練フレームワーク1504は、Tensorflow、Boost、Caffe、マイクロソフトCognitive Toolkit/CNTK、MXNet、Chainer、Keras、Deeplearning4j、又は他の訓練フレームワークである。少なくとも一実施例では、訓練フレームワーク1504は、未訓練ニューラル・ネットワーク1506を訓練し、本明細書に記載の処理リソースを使用してそれが訓練されるのを可能にして、訓練済みニューラル・ネットワーク1508を生成する。少なくとも一実施例では、重みは、ランダムに選択されてもよく、又はディープ・ビリーフ・ネットワークを使用した事前訓練によって選択されてもよい。少なくとも一実施例では、訓練は、教師あり、一部教師あり、又は教師なしのいずれかのやり方で実行されてもよい。
【0057】
少なくとも一実施例では、未訓練ニューラル・ネットワーク1506は教師あり学習を使用して訓練され、ここで訓練データ・セット1502は、入力に対する所望の出力と対になった入力を含み、又は訓練データ・セット1502は、既知の出力を有する入力を含み、ニューラル・ネットワークの出力が手動で採点される。少なくとも一実施例では、未訓練ニューラル・ネットワーク1506は教師ありのやり方で訓練され、訓練データ・セット1502からの入力を処理し、結果として得られた出力を、予想の又は所望の出力のセットと比較する。少なくとも一実施例では、次いで、誤差が、未訓練ニューラル・ネットワーク1506を通って逆伝播される。少なくとも一実施例では、訓練フレームワーク1504は、未訓練ニューラル・ネットワーク1506を制御する重みを調節する。少なくとも一実施例では、訓練フレームワーク1504は、未訓練ニューラル・ネットワーク1506が、新規データ1512などの既知の入力データに基づき、結果1514などにおいて正しい答えを生成するのに好適な訓練済みニューラル・ネットワーク1508などのモデルに向かって、どれだけ良好に収束しているかを監視するツールを含む。少なくとも一実施例では、訓練フレームワーク1504は、未訓練ニューラル・ネットワーク1506を繰り返し訓練する一方、損失関数、及び確率的勾配降下法などの調整アルゴリズムを使用して、未訓練ニューラル・ネットワーク1506の出力を精緻化するように重みを調整する。少なくとも一実施例では、訓練フレームワーク1504は、未訓練ニューラル・ネットワーク1506が所望の精度に到達するまで未訓練ニューラル・ネットワーク1506を訓練する。少なくとも一実施例では、次いで訓練済みニューラル・ネットワーク1508を、任意の数の機械学習動作を実装するように導入することができる。
【0058】
少なくとも一実施例では、未訓練ニューラル・ネットワーク1506は、教師なし学習を使用して訓練され、ここで未訓練ニューラル・ネットワーク1506は、ラベルなしデータを使用して自らを訓練しようとする。少なくとも一実施例では、教師なし学習の訓練データ・セット1502は、いかなる関連出力データ又は「グラウンド・トゥルース」データもない入力データを含む。少なくとも一実施例では、未訓練ニューラル・ネットワーク1506は、訓練データ・セット1502内でグループ化を学習することができ、個々の入力が、未訓練データ・セット1502にどのように関係しているかを判定することができる。少なくとも一実施例では、教師なし訓練を使用して、自己組織化マップを生成することができ、自己組織化マップは、新規データ1512の次元を低減するのに有用な動作を実行することができるタイプの訓練済みニューラル・ネットワーク1508である。少なくとも一実施例では、教師なし訓練を使用して異常検出を実行することもでき、異常検出は、新規データ・セット1512の通常のパターンから逸脱した、新規データ・セット1512内のデータ点を識別できるようにする。
【0059】
少なくとも一実施例では、半教師あり学習が使用されてもよく、それは、ラベル付きデータとラベルなしデータが訓練データ・セット1502に混在している技法である。少なくとも一実施例では、訓練フレームワーク1504を使用して、伝達学習技法などによる漸次的学習が実行されてもよい。少なくとも一実施例では、漸次的学習により、訓練済みニューラル・ネットワーク1508は、初期訓練中にネットワーク内に教え込まれた知識を忘れることなく、新規データ1512に適合できるようになる。
【0060】
データ・センタ
図16は、少なくとも一実施例が使用されてもよい例示的なデータ・センタ1600を示す。少なくとも一実施例では、データ・センタ1600は、データ・センタ・インフラストラクチャ層1610、フレームワーク層1620、ソフトウェア層1630、及びアプリケーション層1640を含む。
【0061】
少なくとも一実施例では、
図16に示すように、データ・センタ・インフラストラクチャ層1610は、リソース・オーケストレータ1612、グループ化済みコンピューティング・リソース1614、及びノード・コンピューティング・リソース(「ノードC.R.」:node computing resource)1616(1)~1616(N)を含んでもよく、ここで「N」は、任意の正の整数を表す。少なくとも一実施例では、ノードC.R.1616(1)~1616(N)は、任意の数の中央処理装置(「CPU」)又は(アクセラレータ、フィールド・プログラマブル・ゲート・アレイ(FPGA)、グラフィックス・プロセッサなどを含む)他のプロセッサ、メモリ・デバイス(たとえば、ダイナミック読取り専用メモリ)、ストレージ・デバイス(たとえば、半導体ドライブ又はディスク・ドライブ)、ネットワーク入力/出力(「NW I/O」:network input/output)デバイス、ネットワーク・スイッチ、仮想機械(「VM」:virtual machine)、電源モジュール、及び冷却モジュールを含んでもよいが、これらに限定されない。少なくとも一実施例では、ノードC.R.1616(1)~1616(N)のうち1つ又は複数のノードC.R.は、上述したコンピューティング・リソースのうちの1つ又は複数を有するサーバであってもよい。
【0062】
少なくとも一実施例では、グループ化済みコンピューティング・リソース1614は、1つ若しくは複数のラック(図示せず)内に収容されたノードC.R.の別々のグループ、又は様々なグラフィカル・ロケーション(同じく図示せず)においてデータ・センタに収容された多数のラックを含んでもよい。グループ化済みコンピューティング・リソース1614内のノードC.R.の別々のグループは、1つ若しくは複数のワークロードをサポートするように構成又は配分されてもよいグループ化済みのコンピュート・リソース、ネットワーク・リソース、メモリ・リソース、又はストレージ・リソースを含んでもよい。少なくとも一実施例では、CPU又はプロセッサを含むいくつかのノードC.R.は、1つ又は複数のラック内でグループ化されて、1つ又は複数のワークロードをサポートするためのコンピュート・リソースが提供されてもよい。少なくとも一実施例では、1つ又は複数のラックはまた、任意の数の電源モジュール、冷却モジュール、及びネットワーク・スイッチを任意の組合せで含んでもよい。
【0063】
少なくとも一実施例では、リソース・オーケストレータ1622は、1つ又は複数のノードC.R.1616(1)~1616(N)及び/若しくはグループ化済みコンピューティング・リソース1614を構成してもよく、又は他のやり方で制御してもよい。少なくとも一実施例では、リソース・オーケストレータ1622は、データ・センタ1600用のソフトウェア設計インフラストラクチャ(「SDI」:software design infrastructure)管理エンティティを含んでもよい。少なくとも一実施例では、リソース・オーケストレータは、ハードウェア、ソフトウェア、又はこれらの何らかの組合せを含んでもよい。
【0064】
図16に示す少なくとも一実施例では、フレームワーク層1620は、ジョブ・スケジューラ1632、構成マネージャ1634、リソース・マネージャ1636、及び分配ファイル・システム1638を含む。少なくとも一実施例では、フレームワーク層1620は、ソフトウェア層1630のソフトウェア1632、及び/又はアプリケーション層1640の1つ若しくは複数のアプリケーション1642をサポートするためのフレームワークを含んでもよい。少なくとも一実施例では、ソフトウェア1632又はアプリケーション1642はそれぞれ、アマゾン・ウェブ・サービス、グーグル・クラウド、及びマイクロソフト・アジュールによって提供されるものなど、ウェブ・ベースのサービス・ソフトウェア又はアプリケーションを含んでもよい。少なくとも一実施例では、フレームワーク層1620は、大規模なデータ処理(たとえば「ビック・データ」)のために分配ファイル・システム1638を使用することができるApache Spark(登録商標)(以下「Spark」)など、無料でオープン・ソースのソフトウェア・ウェブ・アプリケーション・フレームワークの一種であってもよいが、これに限定されない。少なくとも一実施例では、ジョブ・スケジューラ1632は、データ・センタ1600の様々な層によってサポートされるワークロードのスケジューリングを容易にするために、Sparkドライバを含んでもよい。少なくとも一実施例では、構成マネージャ1634は、ソフトウェア層1630、並びに大規模なデータ処理をサポートするためのSpark及び分配ファイル・システム1638を含むフレームワーク層1620などの異なる層を構成することが可能であってもよい。少なくとも一実施例では、リソース・マネージャ1636は、分配ファイル・システム1638及びジョブ・スケジューラ1632をサポートするようにマッピング若しくは配分されたクラスタ化済み又はグループ化済みのコンピューティング・リソースを管理することが可能であってもよい。少なくとも一実施例では、クラスタ化済み又はグループ化済みのコンピューティング・リソースは、データ・センタ・インフラストラクチャ層1610にあるグループ化済みコンピューティング・リソース1614を含んでもよい。少なくとも一実施例では、リソース・マネージャ1636は、リソース・オーケストレータ1612と連携して、これらのマッピング又は配分されたコンピューティング・リソースを管理してもよい。
【0065】
少なくとも一実施例では、ソフトウェア層1630に含まれるソフトウェア1632は、ノードC.R.1616(1)~1616(N)、グループ化済みコンピューティング・リソース1614、及び/又はフレームワーク層1620の分配ファイル・システム1638のうちの少なくとも一部分によって使用されるソフトウェアを含んでもよい。1つ又は複数のタイプのソフトウェアは、インターネット・ウェブ・ページ検索ソフトウェア、電子メール・ウイルス・スキャン・ソフトウェア、データベース・ソフトウェア、及びストリーミング・ビデオ・コンテンツ・ソフトウェアを含んでもよいが、これらに限定されない。
【0066】
少なくとも一実施例では、アプリケーション層1640に含まれるアプリケーション1642は、ノードC.R.1616(1)~1616(N)、グループ化済みコンピューティング・リソース1614、及び/又はフレームワーク層1620の分配ファイル・システム1638のうちの少なくとも一部分によって使用される1つ若しくは複数のタイプのアプリケーションを含んでもよい。1つ若しくは複数のタイプのアプリケーションは、任意の数のゲノム学アプリケーション、認識コンピュート、並びに訓練若しくは推論のソフトウェア、機械学習フレームワーク・ソフトウェア(たとえば、PyTorch、Tensorflow、Caffeなど)を含む機械学習アプリケーション、又は1つ若しくは複数の実施例と併せて使用される他の機械学習アプリケーションを含んでもよいが、これらに限定されない。
【0067】
少なくとも一実施例では、構成マネージャ1634、リソース・マネージャ1636、及びリソース・オーケストレータ1612のうちのいずれかは、任意の技術的に実行可能なやり方で取得された任意の量及びタイプのデータに基づき、任意の数及びタイプの自己修正措置を実装してもよい。少なくとも一実施例では、自己修正措置は、データ・センタ1600のデータ・センタ演算子が、不良の恐れのある構成を決定しないようにし、十分に利用されていない且つ/又は性能の低いデータ・センタの部分をなくせるようにしてもよい。
【0068】
少なくとも一実施例では、データ・センタ1600は、1つ若しくは複数の機械学習モデルを訓練し、又は本明細書に記載の1つ若しくは複数の実施例による1つ若しくは複数の機械学習モデルを使用して情報を予測若しくは推論するためのツール、サービス、ソフトウェア、又は他のリソースを含んでもよい。たとえば、少なくとも一実施例では、機械学習モデルは、データ・センタ1600に関して上述したソフトウェア及びコンピューティング・リソースを使用して、ニューラル・ネットワーク・アーキテクチャに従って重みパラメータを計算することによって、訓練されてもよい。少なくとも一実施例では、1つ又は複数のニューラル・ネットワークに対応する訓練済み機械学習モデルは、本明細書に記載の1つ又は複数の技法によって計算された重みパラメータを使用することにより、データ・センタ1600に関して上述したリソースを使用して、情報を推論又は予測するために使用されてもよい。
【0069】
少なくとも一実施例では、データ・センタは、上述したリソースを使用して訓練及び/又は推論を実行するために、CPU、特定用途向け集積回路(ASIC)、GPU、FPGA、又は他のハードウェアを使用してもよい。さらに、上述した1つ又は複数のソフトウェア及び/又はハードウェアのリソースは、画像認識、音声認識、又は他の人工知能サービスなどの情報の訓練又は推論の実行を、ユーザが行えるようにするためのサービスとして構成されてもよい。
【0070】
推論及び/又は訓練論理1415を使用して、1つ若しくは複数の実施例に関連する推論及び/又は訓練の動作が実行される。推論及び/又は訓練論理1415に関する詳細事項は、
図14A及び/又は
図14Bと併せて以下に提供される。少なくとも一実施例では、推論及び/又は訓練論理1415は、本明細書に記載のニューラル・ネットワークの訓練動作、ニューラル・ネットワークの機能及び/若しくはアーキテクチャ、又はニューラル・ネットワークのユース・ケースを使用して計算された重みパラメータに少なくとも部分的に基づき、推論又は予測の動作のために
図16のシステムにおいて使用されてもよい。
【0071】
一実施例では、本明細書に記載の技法が、自律車両、又は車両のドライバ支援システムに適用される。たとえば、本明細書に記載の技法を使用して、自動フォークリフト又は倉庫ピッキング・ロボットを制御してもよい。一実施例では、このシステムは、パレット又は他の物体を持ち上げるのに必要なフォークリフトの位置決めを表現する把持姿勢を決定するために使用される。別の実施例では、本明細書に記載の技法は、自動倉庫において箱から物体を取るために使用される。別の実施例では、このシステムは、非自律でも、自律でも、又は半自律でもよい廃品収集車両(廃棄物収集車両又はごみ収集車とも呼ぶ)の把持姿勢を決定するために使用される。たとえば一実施例では、このシステムを使用して、箱(たとえば、ゴミ箱、リサイクル容器、又は庭瓦礫入れ)を持ち上げ、中身をそれぞれの、又は別の廃棄物収集車両に入れて空にするために使用される把持アームの把持姿勢を決定することができる。様々な目的の(たとえば、現場で建築材料を移動する)ロボティック・アームを使用する他の車両又は装置も、本開示の実施例を実践することができる文脈である。
【0072】
図17Aは、少なくとも一実施例による自律車両1700の例を示す。少なくとも一実施例では、自律車両1700(或いは、本明細書において「車両1700」と呼ばれる)は、限定することなく、車、トラック、バス、及び/又は1人若しくは複数の乗員を収容する別のタイプの車両などの乗用車とすることができる。少なくとも一実施例では、車両1700は、貨物運搬用のセミ・トラクタのトレーラ・トラックであってもよい。少なくとも一実施例では、車両1700は、航空機、ロボット車両、又は他の種類の車両であってもよい。
【0073】
自律車両は、米国運輸省の一部門である全米高速道路交通安全局(「NHTSA」:National Highway Traffic Safety Administration)、及び自動車技術者協会(「SAE」:Society of Automotive Engineers)の「自動車用運転自動化システムのレベル分類及び定義(Taxonomy and Definitions for Terms Related to Driving Automation Systems for On-Road Motor Vehicles)」(たとえば、2018年6月15日発行の規格No.J3016-201806、2016年9月30日発行の規格No.J3016-201609、及びこの規格の旧版及び新版)により定義される自動化レベルという観点から説明されてもよい。1つ又は複数の実施例では、車両1700は、自律運転レベルのレベル1~レベル5のうちの1つ又は複数による機能性に対応可能であってもよい。たとえば、少なくとも一実施例では、車両1700は、実施例に応じて、条件付き自動化(レベル3)、高度自動化(レベル4)、及び/又は完全自動化(レベル5)に対応可能であってもよい。
【0074】
少なくとも一実施例では、車両1700は、限定することなく、シャシ、車両本体、ホイール(2本、4本、6本、8本、18本など)、タイヤ、車軸、及び車両の他の構成要素などの構成要素を含んでもよい。少なくとも一実施例では、車両1700は、限定することなく、内燃機関、ハイブリッド電力プラント、完全電気エンジン、及び/又は別のタイプの推進システムなどの推進システム1750を含んでもよい。少なくとも一実施例では、推進システム1750は、車両1700のドライブ・トレインに連結されてもよく、ドライブ・トレインは、限定することなく、車両1700の推進を可能にするためのトランスミッションを含んでもよい。少なくとも一実施例では、推進システム1750は、スロットル/アクセル1752からの信号を受信したことに応答して、制御されてもよい。
【0075】
少なくとも一実施例では、限定することなくハンドルを含んでもよい操縦システム1754は、推進システム1750が動作しているときに(たとえば、車両が動いているときに)車両1700を(たとえば所望の経路又はルートに沿って)操縦するために使用される。少なくとも一実施例では、操縦システム1754は、操縦アクチュエータ1756から信号を受信してもよい。ハンドルは、完全自動化(レベル5)の機能性に関しては任意選択であってもよい。少なくとも一実施例では、ブレーキ・アクチュエータ1748及び/又はブレーキ・センサからの信号を受信したことに応答して車両ブレーキを動作させるために、ブレーキ・センサ・システム1746が使用されてもよい。
【0076】
少なくとも一実施例では、1つ又は複数のシステム・オン・チップ(「SoC」:system on chip)(
図17Aには示さず)及び/若しくはグラフィックス・プロセッシング・ユニット(「GPU」)を限定することなく含んでもよいコントローラ1736は、車両1700の1つ又は複数の構成要素及び/若しくはシステムに(たとえば、コマンドを表す)信号を提供する。たとえば、少なくとも一実施例では、コントローラ1736は、ブレーキ・アクチュエータ1748を介して車両ブレーキを動作させるための信号、操縦アクチュエータ1756を介して操縦システム1754を動作させるための信号、スロットル/アクセル1752を介して推進システム1750を動作させるための信号を送信してもよい。コントローラ1736は、自律運転を可能にし、且つ/又は運転車両1700において人間のドライバを支援するために、センサ信号を処理し、動作コマンド(たとえばコマンドを表す信号)を出力する1つ又は複数の搭載(たとえば一体型の)コンピューティング・デバイス(たとえば、スーパーコンピュータ)を含んでもよい。少なくとも一実施例では、コントローラ1736は、自律運転機能のための第1のコントローラ1736、機能的安全機能のための第2のコントローラ1736、人工知能機能(たとえば、コンピュータ・ビジョン)のための第3のコントローラ1736、インフォテイメント機能のための第4のコントローラ1736、緊急事態における冗長性のための第5のコントローラ1736、及び/又は他のコントローラを含んでもよい。少なくとも一実施例では、単一のコントローラ1976が、上記機能性のうちの2つ以上に対処してもよく、2つ以上のコントローラ1976が、単一の機能性に対処してもよく、且つ/又はこれらの何らかの組合せであってもよい。
【0077】
少なくとも一実施例では、コントローラ1736は、1つ又は複数のセンサから受信したセンサ・データ(たとえば、センサ入力)に応答して、車両1700の1つ又は複数の構成要素及び/若しくはシステムを制御するための信号を提供する。少なくとも一実施例では、センサ・データは、たとえば限定することなく、全地球的航法衛星システム(「GNSS」:global navigation satellite system)センサ1758(たとえば、全地球測位システム・センサ)、RADARセンサ1760、超音波センサ1762、LIDARセンサ1764、慣性計測装置(「IMU」:inertial measurement unit)センサ1766(たとえば、加速度計、ジャイロスコープ、磁気コンパス、磁力計など)、マイクロフォン1796、ステレオ・カメラ1768、広角カメラ1770(たとえば、魚眼カメラ)、赤外線カメラ1772、周囲カメラ1774(たとえば、360度カメラ)、長距離カメラ(
図17Aには示さず)、中距離カメラ(
図17Aには示さず)、(たとえば、車両1700のスピードを計測するための)スピード・センサ1744、振動センサ1742、操縦センサ1740、(たとえば、ブレーキ・センサ・システム1746の一部分としての)ブレーキ・センサ、及び/又は他のタイプのセンサから、受信されてもよい。
【0078】
少なくとも一実施例では、1つ又は複数のコントローラ1736は、車両1700の計器クラスタ1732からの(たとえば入力データによって表される)入力を受信し、ヒューマン・マシン・インターフェース(「HMI」:human-machine interface)ディスプレイ1734、可聴アナンシエータ、拡声器を介して、且つ/又は車両1700の他の構成要素を介して、(たとえば、出力データ、ディスプレイ・データなどによって表される)出力を提供してもよい。少なくとも一実施例では、出力は、車両速度、スピード、時間、地図データ(たとえば、ハイ・デフィニション・マップ(
図17Aには示さず)、ロケーション・データ(たとえば、地図上などの車両1700のロケーション)、方向、他車両のロケーション(たとえば、占有グリッド)、コントローラ1736が感知した物体及び物体の状態についての情報などの情報を含んでもよい。たとえば、少なくとも一実施例では、HMIディスプレイ1734は、1つ若しくは複数の物体(たとえば、道路標識、警告標識、信号の変化など)の存在についての情報、及び/又は車両が行った、行っている、又はこれから行う運転操作についての情報(たとえば、現在車線変更中、3.22km(2マイル)先の出口34Bを出る、など)を表示してもよい。
【0079】
少なくとも一実施例では、車両1700はさらにネットワーク・インターフェース1724を含み、このネットワーク・インターフェースは、1つ又は複数のネットワークを介して通信するためのワイヤレス・アンテナ1726及び/又はモデムを使用してもよい。たとえば、少なくとも一実施例では、ネットワーク・インターフェース1724は、ロング・ターム・エボリューション(「LTE」:Long-Term Evolution)、広帯域符号分割多元接続(「WCDMA(登録商標)」:Wideband Code Division Multiple Access)、ユニバーサル・モバイル・テレコミュニケーション・システム(「UMTS」:Universal Mobile Telecommunications System)、グローバル・システム・フォー・モバイル・コミュニケーションズ(「GSM」:Global System for Mobile communication)、IMT-CDMAマルチ・キャリア(「CDMA2000」)などを介して通信可能であってもよい。また、少なくとも一実施例では、ワイヤレス・アンテナ1726は、Bluetooth、Bluetooth Low Energy (「LE」:Low Energy)、Z-Wave、ZigBeeなどのローカル・エリア・ネットワーク、及び/又はLoRaWAN、SigFoxなどの低電力広域ネットワーク(「LPWAN」:low power wide-area network)を使用して、環境内の物体同士間(たとえば車両、モバイル・デバイスなど)での通信を可能にしてもよい。
【0080】
1つ若しくは複数の実施例に関連する推論及び/又は訓練の動作を実行するために、推論及び/又は訓練論理1415が使用される。推論及び/又は訓練論理1415に関する詳細事項は、
図14A及び/又は
図14Bと併せて以下に提供される。少なくとも一実施例では、推論及び/又は訓練論理1415は、本明細書に記載のニューラル・ネットワークの訓練動作、ニューラル・ネットワークの機能及び/若しくはアーキテクチャ、又はニューラル・ネットワークのユース・ケースを使用して計算された重みパラメータに少なくとも部分的に基づき、推論又は予測の動作のために
図17Aのシステムにおいて使用されてもよい。
【0081】
一実施例では、
図17Bに示すカメラは、フォークリフト、又は自動倉庫ピッキング・ロボットに位置付けられてもよい。
【0082】
図17Bは、少なくとも一実施例による
図17Aの自律車両1700についてカメラのロケーション及び視野の例を示す。少なくとも一実施例では、カメラ及びそれぞれの視野は、一例の実施例であり、限定するものではない。たとえば、少なくとも一実施例では、追加及び/又は代替のカメラが含まれてもよく、且つ/又はカメラが車両1700の異なるロケーションに位置付けられてもよい。
【0083】
少なくとも一実施例では、カメラのカメラ・タイプは、車両1700の構成要素及び/又はシステムとともに使用できるように適合されていてもよいデジタル・カメラを含んでもよいが、これに限定されない。カメラは、自動車安全性要求レベル(「ASIL」:automotive safety integrity level)B及び/又は別のASILにおいて動作してもよい。少なくとも一実施例では、カメラ・タイプは、実施例に応じて、毎秒60フレーム(fps:frames per second)、1220fps、240fpsなど、任意の画像捕捉率に対応可能であってもよい。少なくとも一実施例では、カメラは、ロール・シャッタ、グローバル・シャッタ、別のタイプのシャッタ、又はこれらの組合せを使用することが可能であってもよい。少なくとも一実施例では、カラー・フィルタ・アレイは、赤色、クリア、クリア、クリア(「RCCC」:red clear clear clear)のカラー・フィルタ・アレイ、赤色、クリア、クリア、青色(「RCCB:red clear clear blue」)のカラー・フィルタ・アレイ、赤色、青色、緑色、クリア(「RBGC」:red blue green clear)のカラー・フィルタ・アレイ、Foveon X3のカラー・フィルタ・アレイ、ベイヤー・センサ(RGGB)のカラー・フィルタ・アレイ、モノクロ・センサのカラー・フィルタ・アレイ、及び/又は別のタイプのカラー・フィルタ・アレイを含んでもよい。少なくとも一実施例では、光感度を上げるために、RCCC、RCCB、及び/又はRBGCのカラー・フィルタ・アレイを有するカメラなど、クリア・ピクセル・カメラが使用されてもよい。
【0084】
少なくとも一実施例では、1つ又は複数のカメラを使用して、先進ドライバ支援システム(「ADAS」:advanced driver assistance systems)機能が(たとえば、冗長設計又はフェイル・セーフ設計の一部として)実行されてもよい。たとえば、少なくとも一実施例では、多機能モノ・カメラが設置されて、車線逸脱警告、交通標識支援、及びインテリジェント・ヘッドライト制御を含む機能が提供されてもよい。少なくとも一実施例では、1つ又は複数のカメラ(たとえばすべてのカメラ)は、画像データ(たとえばビデオ)の記録と提供を同時に行ってもよい。
【0085】
少なくとも一実施例では、1つ又は複数のカメラは、カメラの画像データ捕捉性能を妨げる恐れのある迷光及び車内部からの反射(たとえば、ダッシュボードからフロントガラスに反射される反射)をなくすために、カスタム設計の(3次元(「3D」:three-dimensional)印刷された)アセンブリなどの取付けアセンブリに取り付けられてもよい。ドアミラー取付けアセンブリを参照すると、少なくとも一実施例では、ドアミラー・アセンブリは、カメラ取付けプレートがドアミラーの形の合うように、カスタムで3D印刷されてもよい。少なくとも一実施例では、カメラは、ドアミラーと一体であってもよい。サイド・ビュー・カメラについて、少なくとも一実施例では、カメラはこの場合もキャビンの各角にある4本のピラーに一体化されてもよい。
【0086】
少なくとも一実施例では、車両1700前方の環境の一部分を含む視野を有するカメラ(たとえば正面カメラ)は周囲のビューに対して使用されて、正面の経路及び障害物を識別しやすくするとともに、コントローラ1736及び/又は制御SoCのうちの1つ又は複数とともに使用されて、占有グリッドの生成及び/又は好ましい車両経路の判定に不可欠な情報の提供を補助してもよい。少なくとも一実施例では、正面カメラを使用して、緊急ブレーキ、歩行者検出、及び衝突回避を限定することなく含む、LIDARと同じADAS機能のうちの多くが実行されてもよい。少なくとも一実施例では、正面カメラはまた、車線逸脱警告(「LDW」:Lane Departure Warnings)、自律クルーズ・コントロール(「ACC」:Autonomous Cruise Control)、及び/又は交通標識認識などの他の機能を限定することなく含むADASの機能及びシステムのために使用されてもよい。
【0087】
少なくとも一実施例では、たとえばCMOS:complementary metal oxide semiconductor(「相補型金属酸化膜半導体」)カラー撮像装置を含む単眼カメラのプラットフォームを含む様々なカメラが、正面構成で使用されてもよい。少なくとも一実施例では、周囲からビューに入ってくる物体(たとえば歩行者、クロス・トラフィック、又は自転車)を感知するために、広角カメラ1770が使用されてもよい。
図17Bには1つの広角カメラ1770しか示していないが、他の実施例では、車両1700には(ゼロを含む)任意の数の広角カメラ1770が存在してもよい。少なくとも一実施例では、特にニューラル・ネットワークがそれに対してまだ訓練されていない物体について、深度ベースの物体検出のために、任意の数の長距離カメラ1798(たとえば、長距離ビューのステレオ・カメラの対)が使用されてもよい。少なくとも一実施例では、長距離カメラ1798はまた、物体検出及び分類、並びに基本的な物体追跡に使用されてもよい。
【0088】
少なくとも一実施例では、任意の数のステレオ・カメラ1768は、正面構成にも含まれてよい。少なくとも一実施例では、1つ又は複数のステレオ・カメラ1768は、拡張可能な処理ユニットを備えた一体型制御ユニットを含んでもよく、この制御ユニットは、一体型のコントローラ・エリア・ネットワーク(「CAN」:Controller Area Network)又はイーサネット(登録商標)・インターフェースを単一チップ上に有するプログラム可能論理(「FPGA」)及びマルチ・コア・マイクロプロセッサを提供してもよい。少なくとも一実施例では、こうしたユニットは、画像内のすべての点に対する距離推定を含め、車両1700の環境の3Dマップを生成するのに使用されてもよい。少なくとも一実施例では、ステレオ・カメラ1768のうちの1つ又は複数は、限定することなくコンパクト・ステレオ・ビジョン・センサを含んでもよく、このセンサは、車両1700からターゲット物体までの距離を測定し、生成された情報(たとえば、メタデータ)を使用して自律緊急ブレーキ及び車線逸脱警告の機能をアクティブ化することができる2つのカメラ・レンズ(左右に1つずつ)及び画像処理チップを、限定することなく含んでもよい。少なくとも一実施例では、本明細書に記載のものに加えて、又はその代わりに、他のタイプのステレオ・カメラ1768が使用されてもよい。
【0089】
少なくとも一実施例では、車両1700の側方の環境の一部分を含む視野を有するカメラ(たとえば、サイド・ビュー・カメラ)が、周囲のビューのために使用されて、占有グリッドの作製及び更新、並びに側面衝突警告の生成のために使用される情報を提供してもよい。たとえば、少なくとも一実施例では、周囲カメラ1774(たとえば
図17Bに示すように4つの周囲カメラ1774)を、車両1700に配置することができる。周囲カメラ1774は、限定することなく、任意の数及び組合せの広角カメラ1770、魚眼カメラ、及び/又は360度カメラなどを含んでもよい。たとえば、少なくとも一実施例では、4つの魚眼カメラが、車両1700の前方、後方、及び側方に配置されてもよい。少なくとも一実施例では、車両1700は、3つの周囲カメラ1774(たとえば、左、右、及び後方)を使用してもよく、第4の周囲カメラとして、1つ又は複数の他のカメラ(たとえば正面カメラ)を活用してもよい。
【0090】
少なくとも一実施例では、車両1700後方の環境の一部分を含む視野を有するカメラ(たとえば、リア・ビュー・カメラ)が、駐車支援、周囲のビュー、後方衝突警告のために使用されて、占有グリッドの作製及び更新がなされてもよい。少なくとも一実施例では、本明細書に記載の正面カメラとしても好適なカメラ(たとえば、長距離カメラ1798、及び/又は中距離カメラ1776、ステレオ・カメラ1768)、赤外線カメラ1772など)を含むが、これらに限定されない多種多様なカメラが使用されてもよい。
【0091】
1つ若しくは複数の実施例に関連する推論及び/又は訓練の動作を実行するために、推論及び/又は訓練論理1415が使用される。推論及び/又は訓練論理1415に関する詳細事項は、
図14A及び/又は
図14Bと併せて以下に提供される。少なくとも一実施例では、推論及び/又は訓練論理1415は、本明細書に記載のニューラル・ネットワークの訓練動作、ニューラル・ネットワークの機能及び/若しくはアーキテクチャ、又はニューラル・ネットワークのユース・ケースを使用して計算された重みパラメータに少なくとも部分的に基づき、推論又は予測の動作のために
図17Bのシステムにおいて使用されてもよい。
【0092】
図17Cは、少なくとも一実施例による
図17Aの自律車両1700の例示的システム・アーキテクチャを示すブロック図である。少なくとも一実施例では、
図17Cの車両1700の構成要素、特徴、及びシステムのそれぞれは、バス1702を介して接続されるものとして示される。少なくとも一実施例では、バス1702は、限定することなく、CANデータ・インターフェース(或いは、本明細書において(CANバス)と呼ばれる)を含んでもよい。少なくとも一実施例では、CANは、ブレーキの作動、加速、ブレーキ制御、操縦、フロントガラス・ワイパなど、車両1700の様々な特徴及び機能の制御を補助するために使用される車両1700内部のネットワークであってもよい。少なくとも一実施例では、バス1702は、それぞれが独自の一意の識別子(たとえばCAN ID)をもつ数十又はさらには数百のノードを有するように構成されてもよい。少なくとも一実施例では、バス1702は、ハンドル角度、対地スピード、エンジンの毎分回転数(「RPM」:revolutions per minute)、ボタン位置、及び/又は他の車両状態インジケータを見いだすように読み取られてもよい。少なくとも一実施例では、バス1702は、ASILのBに準拠したCANバスであってもよい。
【0093】
少なくとも一実施例では、CANに加えて、又はその代わりに、FlexRay及び/又はEthernet(登録商標)が使用されてもよい。少なくとも一実施例では、任意の数のバス1702が存在してもよく、これには、限定することなく、ゼロ以上のCANバス、ゼロ以上のFlexRayバス、ゼロ以上のEthernet(登録商標)バス、及び/又は他のプロトコルを使用するゼロ以上の他のタイプのバスが含まれてもよい。少なくとも一実施例では、2つ以上のバス1702を使用して異なる機能が実行されてもよく、且つ/又はそれらを使用して冗長性が与えられてもよい。たとえば、第1のバス1702が衝突回避機能のために使用され、第2のバス1702が作動制御のために使用されてもよい。少なくとも一実施例では、各バス1702は、車両1700の任意の構成要素と通信してもよく、2つ以上のバス1702が同じ構成要素と通信してもよい。少なくとも一実施例では、任意の数のシステム・オン・チップ(「SoC」)1704のそれぞれ、コントローラ1736のそれぞれ、及び/又は車両内の各コンピュータは、同じ入力データ(たとえば、車両1700のセンサからの入力)にアクセス可能であってもよく、CANバスなどの共通のバスに接続されてもよい。
【0094】
少なくとも一実施例では、車両1700は、
図17Aに関して本明細書に記載するものなど、1つ又は複数のコントローラ1736を含んでもよい。コントローラ1736は、様々な機能に使用されてもよい。少なくとも一実施例では、コントローラ1736は、車両1700の様々な他の構成要素及びシステムのうちの任意のものに結合されてもよく、車両1700、車両1700の人工知能、及び/又は車両1700のインフォテイメントなどの制御に使用されてもよい。
【0095】
少なくとも一実施例では、車両1700は、任意の数のSoC1704を含んでもよい。それぞれのSoC1704は、限定することなく、中央処理装置(「CPU」)1706、グラフィックス・プロセッシング・ユニット(「GPU」)1708、プロセッサ1710、キャッシュ1712、アクセラレータ1714、データ・ストア1716、及び/又は図示していない他の構成要素及び特徴を含んでもよい。少なくとも一実施例では、車両1700を様々なプラットフォーム及びシステムにおいて制御するために、SoC1704が使用されてもよい。たとえば、少なくとも一実施例では、SoC1704は、1つ又は複数のサーバ(
図17Cには示さず)からネットワーク・インターフェース1724を介して地図のリフレッシュ及び/又は更新を得ることができるハイ・デフィニション(「HD」:High Definition)マップ1722を有するシステム(たとえば車両1700のシステム)に組み込まれてもよい。
【0096】
少なくとも一実施例では、CPU1706は、CPUクラスタ、又はCPUコンプレックス(或いは本明細書において「CCPLEX」と呼ばれる)を含んでもよい。少なくとも一実施例では、CPU1706は、複数のコア及び/又はレベル2(「L2」)キャッシュを含んでもよい。たとえば、少なくとも一実施例では、CPU1706は、コヒーレントなマルチプロセッサ構成において8つのコアを含んでもよい。少なくとも一実施例では、CPU1706は、4つのデュアル・コア・クラスタを含んでもよく、ここで各クラスタは、専用のL2キャッシュ(たとえば、2MBのL2キャッシュ)を有する。少なくとも一実施例では、CPU1706(たとえば、CCPLEX)は、CPU1706のクラスタの任意の組合せを、任意の所与の時間にアクティブ化できるようにする同時のクラスタ動作をサポートするように構成されてもよい。
【0097】
少なくとも一実施例では、CPU1706のうちの1つ又は複数は、電力管理機能を実装してもよく、この機能は限定することなく、以下の特徴のうちの1つ又は複数を含む:個々のハードウェア・ブロックが、アイドル時に自動的にクロック・ゲート制御されて動的電力を節約することができる;割込み待ち(「WFI」:Wait for Interrupt)/イベント待ち(「WFE」:Wait for Event)命令の実行に起因してコアが能動的に命令を実行していないとき、各コア・クロックをゲート制御することができる;各コアを独立して電力ゲート制御することができる;すべてのコアがクロック・ゲート制御又は電力ゲート制御されるとき、各コア・クラスタを独立してクロック・ゲート制御することができる;且つ/又はすべてのコアが電力ゲート制御されるとき、各コア・クラスタを独立して電力ゲート制御することができる。少なくとも一実施例では、CPU1706はさらに、電力状態を管理するための拡張アルゴリズムを実装してもよく、ここで、許容された電力状態及び予想されるウェイクアップ時間が指定され、コア、クラスタ、及びCCPLEXが入るべき最良の電力状態を、ハードウェア/マイクロコードが判定する。少なくとも一実施例では、処理コアは、作業がマイクロコードにオフロードされた状態で、電力状態に入る簡単なシーケンスをソフトウェアにおいてサポートしてもよい。
【0098】
少なくとも一実施例では、GPU1708は、統合されたGPU(或いは、本明細書において「iGPU」と呼ばれる)を含んでもよい。少なくとも一実施例では、GPU1708は、プログラム可能であってもよく、並列なワークロードに対して効率的であってもよい。少なくとも一実施例では、GPU1708は拡張テンソル命令セットを使用してもよい。一実施例では、GPU1708は、1つ又は複数のストリーミング・マイクロプロセッサを含んでもよく、ここで各ストリーミング・マイクロプロセッサは、レベル1(「L1」)キャッシュ(たとえば少なくとも96KBのストレージ容量を有するL1キャッシュ)を含んでもよく、2つ以上のストリーミング・マイクロプロセッサは、L2キャッシュ(たとえば、512KBのストレージ容量を有するL2キャッシュ)を共有してもよい。少なくとも一実施例では、GPU1708は、少なくとも8つのストリーミング・マイクロプロセッサを含んでもよい。少なくとも一実施例では、GPU1708は、コンピュート・アプリケーション・プログラミング・インターフェース(API:application programming interface)を使用してもよい。少なくとも一実施例では、GPU1708は、1つ又は複数の並列なコンピューティング・プラットフォーム、及び/又はプログラミング・モジュール(たとえば、NVIDIAのCUDA)を使用してもよい。
【0099】
少なくとも一実施例では、GPU1708のうちの1つ又は複数は、自動車用及び組み込まれたユース・ケースにおいて最良の性能になるように電力最適化されてもよい。たとえば、一実施例では、GPU1708は、フィン電界効果トランジスタ(「FinFET」:Fin field-effect transistor)上で作製することができる。少なくとも一実施例では、各ストリーミング・マイクロプロセッサは、複数のブロックに区分けされた多数の混合精度の処理コアを組み込んでもよい。たとえば、限定することなく64個のPF32コアと、32個のPF64コアを、4つの処理ブロックに区分けすることができる。少なくとも一実施例では、各処理ブロックに、16個のFP32コア、8個のFP64コア、16個のINT32コア、深層学習の行列演算用の2つの混合精度のNVIDIA TENSORコア、レベルゼロ(「L0」)命令キャッシュ、ワープ・スケジューラ、ディスパッチ・ユニット、及び/又は64KBのレジスタ・ファイルを配分することができる。少なくとも一実施例では、ストリーミング・マイクロプロセッサは、整数と浮動小数点の独立した並列のデータ経路を含み、コンピュータ処理とアドレッシング計算を混用することによってワークロードの効率的な実行を実現する。少なくとも一実施例では、ストリーミング・マイクロプロセッサは、独立したスレッド・スケジューリング機能を含み、並列スレッド間でよりきめ細かい同期及び連携を可能にしてもよい。少なくとも一実施例では、ストリーミング・マイクロプロセッサは、性能を向上させると同時にプログラミングを簡単にするために、L1データ・キャッシュと共有メモリ・ユニットの組合せを含んでもよい。
【0100】
少なくとも一実施例では、GPU1708のうちの1つ又は複数は、高帯域幅メモリ(「HBW」:high bandwidth memory)及び/又は16GBのHBM2メモリ・サブシステムを含み、いくつかの例では、約900GB/秒のピーク・メモリ帯域幅を提供してもよい。少なくとも一実施例では、HBMメモリに加えて、又はその代わりに、グラフィックス・ダブル・データ・レート・タイプの5つの同期ランダム・アクセス・メモリ(「GDDR5」:graphics double data rate type five)などの同期グラフィックス・ランダム・アクセス・メモリ(「SGRAM」:synchronous graphics random-access memory)が使用されてもよい。
【0101】
少なくとも一実施例では、GPU1708は、統合メモリ技術を含んでもよい。少なくとも一実施例では、アドレス・トランスレーション・サービス(「ATS」:address translation services)サポートを使用して、GPU1708が、CPU1706のページ・テーブルに直接アクセスできるようにしてもよい。少なくとも一実施例では、GPU1708メモリ管理ユニット(「MMU」:memory management unit)がミスに遭遇したときには、アドレス・トランスレーション要求が、CPU1706に送信されてもよい。少なくとも一実施例では、それに応答して、CPU1706は、自らのページ・テーブルで、仮想から物理へのアドレスのマッピングを探し、トランスレーションをGPU1708に送り返してもよい。少なくとも一実施例では、統合メモリ技術は、CPU1706とGPU1708の両方のメモリに対して単一の統合された仮想アドレス空間を与えることを可能にし、それにより、GPU1708のプログラミング、及びGPU1708へのアプリケーションの移植を簡単にする。
【0102】
少なくとも一実施例では、GPU1708は、他のプロセッサのメモリへのGPU1708のアクセス頻度を記録することができる任意の数のアクセス・カウンタを含んでもよい。少なくとも一実施例では、アクセス・カウンタは、最も頻繁にページにアクセスしているプロセッサの物理メモリに、メモリ・ページが確実に移動されるのを補助し、それにより、プロセッサ間で共有されるメモリ範囲の効率を向上させてもよい。
【0103】
少なくとも一実施例では、SoC1704のうちの1つ又は複数は、本明細書に記載のものを含む任意の数のキャッシュ1712を含んでもよい。たとえば、少なくとも一実施例では、キャッシュ1712は、CPU1706もGPU1708も利用可能な(たとえば、CPU1706とGPU1708の両方に接続された)レベル3(「L3」)キャッシュを含むことができる。少なくとも一実施例では、キャッシュ1712は、キャッシュ・コヒーレンス・プロトコルなど(たとえば、MEI、MESI、MSIなど)を使用することにより、線の状態を記録することができるライト・バック・キャッシュを含んでもよい。少なくとも一実施例では、L3キャッシュは、実施例に応じて4MB以上を含んでもよいが、より小さいキャッシュ・サイズが使用されてもよい。
【0104】
少なくとも一実施例では、SoC1704のうちの1つ又は複数は、1つ又は複数のアクセラレータ1714(たとえば、ハードウェア・アクセラレータ、ソフトウェアアクセラレータ、又はこれらの組合せ)を含んでもよい。少なくとも一実施例では、SoC1704は、最適化されたハードウェア・アクセラレータ及び/又は大型のオン・チップ・メモリを含むことができるハードウェア加速クラスタを含んでもよい。少なくとも一実施例では、大型のオン・チップ・メモリ(たとえば、4MBのSRAM)は、ハードウェア加速クラスタが、ニューラル・ネットワーク及び他の計算を加速できるようにしてもよい。少なくとも一実施例では、ハードウェア加速クラスタを使用して、GPU1708を補完し、GPU1708のいくつかのタスクをオフロードしてもよい(たとえば、他のタスクを実行できるようにGPU1708のサイクルをより多く解放してもよい)。少なくとも一実施例では、加速を受け入れるのに十分なほど安定している目的とするワークロード(たとえば、知覚、畳み込みニューラル・ネットワーク(「CNN」:convolutional neural network)、再帰ニューラル・ネットワーク(「RNN」:recurrent neural network)など)のために、アクセラレータ1714を使用することができる。少なくとも一実施例では、CNNは、領域ベースの、すなわち領域畳み込みニューラル・ネットワーク(「RCNN」:regional convolutional neural network)、及び(たとえば、物体検出に使用される)高速RCNN、又は他のタイプのCNNを含んでもよい。
【0105】
少なくとも一実施例では、アクセラレータ1714(たとえば、ハードウェア加速クラスタ)は、深層学習アクセラレータ(「DLA」:deep learning accelerator)を含んでもよい。DLAは、限定することなく、1つ又は複数のTensor処理ユニット(「TPU」:Tensor processing units)を含んでもよく、このユニットは、深層学習アプリケーション及び推論のために、さらに毎秒10兆の演算を提供するように構成されてもよい。少なくとも一実施例では、TPUは、画像処理機能(たとえば、CNN、RCNNなど)を実行するように構成され、そのために最適化されたアクセラレータであってもよい。DLAはさらに、ニューラル・ネットワーク・タイプと浮動小数点演算の特定のセット、並びに推論のために最適化されてもよい。少なくとも一実施例では、DLAの設計により、典型的な汎用GPUよりもミリメートル当たりの性能を向上させることができ、典型的には、CPUの性能を大いに上回る。少なくとも一実施例では、TPUは、たとえば特徴と重みの両方のためのINT8、INT16、及びFP16のデータ型をサポートする単一インスタンスの畳み込み関数、並びに後処理関数を含む、いくつか関数を実行してもよい。少なくとも一実施例では、DLAは、たとえば、限定することなく、カメラ・センサからのデータを使用した物体識別及び検出のためのCNN、カメラ・センサからのデータを使用した距離推定のためのCNN、マイクロフォン1796からのデータを使用した緊急車両検出、及び識別、及び検出のためのCNN、カメラ・センサからのデータを使用した顔認識及び車両所有者識別ためのCNN、並びに/又はセキュリティ及び/若しくは安全に関するイベントのためのCNNを含め、様々な機能のうちのいずれかのための処理済み若しくは未処理のデータに対して、迅速且つ効率的にニューラル・ネットワーク、特にCNNを実行してもよい。
【0106】
少なくとも一実施例では、DLAは、GPU1708の任意の機能を実行してもよく、たとえば推論アクセラレータを使用することにより、設計者は、任意の機能のためにDLA又はGPU1708のいずれかをターゲットにしてもよい。たとえば、少なくとも一実施例では、設計者は、CNN及び浮動小数点演算の処理をDLAに集中させ、他の機能をGPU1708及び/又は他のアクセラレータ1714に任せてもよい。
【0107】
少なくとも一実施例では、アクセラレータ1714(たとえば、ハードウェア加速クラスタ)は、プログラマブル・ビジョン・アクセラレータ(「PVA」:programmable vision accelerator)を含んでもよく、このプログラマブル・ビジョン・アクセラレータは、本明細書において代替的にコンピュータ・ビジョン・アクセラレータと呼ばれてもよい。少なくとも一実施例では、PVAは、先進ドライバ支援システム(「ADAS」)1738、自律運転、拡張現実(「AR」:augmented reality)アプリケーション、及び/又は仮想現実(「VR」:virtual reality)アプリケーションのために、コンピュータ・ビジョン・アルゴリズムを加速するように設計及び構成されてもよい。PVAにより、性能と融通性との均衡が保たれてもよい。たとえば、少なくとも一実施例では、各PVAは、たとえば限定することなく、任意の数の縮小命令セット・コンピュータ(「RISC」:reduced instruction set computer)コア、ダイレクト・メモリ・アクセス(「DMA」:direct memory access)、及び/又は任意の数のベクトル・プロセッサを含んでもよい。
【0108】
少なくとも一実施例では、RISCコアは、画像センサ(たとえば、本明細書に記載のカメラのうちの任意のカメラの画像センサ)、及び/又は画像信号プロセッサなどと相互作用してもよい。少なくとも一実施例では、RISCコアのそれぞれは、任意の量のメモリを含んでもよい。少なくとも一実施例では、RISCコアは、実施例に応じて複数のプロトコルのうちの任意のものを使用してもよい。少なくとも一実施例では、RISCコアは、リアル・タイム・オペレーティング・システム(「RTOS」:real-time operating system)を実行してもよい。少なくとも一実施例では、RISCコアは、1つ又は複数の集積回路デバイス、特定用途向け集積回路(「ASIC」)、及び/又はメモリ・デバイスを使用して実装されてもよい。たとえば、少なくとも一実施例では、RISCコアは、命令キャッシュ及び/又は密結合RAMを含むことができる。
【0109】
少なくとも一実施例では、DMAは、PVAの構成要素がCPU1706とは無関係にシステム・メモリにアクセスできるようにしてもよい。少なくとも一実施例では、DMAは、多次元アドレッシング、及び/又はサーキュラ・アドレッシングを含むがこれらに限定されない、PVAに最適化を提供するために使用される任意の数の特徴をサポートしてもよい。少なくとも一実施例では、DMAは、6つ以上のアドレッシング次元までをサポートしてもよく、これには、限定することなく、ブロック幅、ブロック高さ、ブロック深度、水平ブロック・ステッピング、垂直ブロック・ステッピング、及び/又は深度ステッピングが含まれてもよい。
【0110】
少なくとも一実施例では、ベクトル・プロセッサは、コンピュータ・ビジョン・アルゴリズムのためのプログラミングを効率的でフレキシブルに実行するように設計されてもよいプログラム可能なプロセッサとすることができ、信号処理機能を提供する。少なくとも一実施例では、PVAは、PVAコアと、2つのベクトル処理サブシステム・パーティションを含んでもよい。少なくとも一実施例では、PVAコアは、プロセッサ・サブシステム、DMAエンジン(たとえば2つのDMAエンジン)、及び/又は他の周辺装置を含んでもよい。少なくとも一実施例では、ベクトル処理サブシステムは、PVAの一次処理エンジンとして動作してもよく、ベクトル処理ユニット(「VPU」:vector processing unit)、命令キャッシュ、及び/又はベクトル・メモリ(たとえば、「VMEM」)を含んでもよい。少なくとも一実施例では、VPUは、たとえば単一命令複数データ(「SIMD」:single instruction, multiple data)、超長命令語(「VLIW」:very long instruction word)のデジタル信号プロセッサなどのデジタル信号プロセッサを含んでもよい。少なくとも一実施例では、SIMDとVLIWの組合せによって、スループット及びスピードが改善されてもよい。
【0111】
少なくとも一実施例では、それぞれのベクトル・プロセッサは、命令キャッシュを含んでもよく、専用のメモリに結合されてもよい。その結果、少なくとも一実施例では、それぞれのベクトル・プロセッサは、他のベクトル・プロセッサとは無関係に実行されるように構成されてもよい。少なくとも一実施例では、特定のPVAに含まれるベクトル・プロセッサは、データ並列処理を用いるように構成されてもよい。たとえば、少なくとも一実施例では、単一のPVAに含まれる複数のベクトル・プロセッサは、同じコンピュータ・ビジョン・アルゴリズムを画像の異なる領域上で実行してもよい。少なくとも一実施例では、特定のPVAに含まれるベクトル・プロセッサは、異なるコンピュータ・ビジョン・アルゴリズムを同じ画像上で同時に実行してもよく、又はさらには、異なるアルゴリズムを連続した画像上で、若しくは画像の部分上で実行してもよい。少なくとも一実施例では、とりわけ、任意の数のPVAがハードウェア加速クラスタに含まれてもよく、任意の数のベクトル・プロセッサが各PVAに含まれてもよい。少なくとも一実施例では、PVAは、システムの全体的な安全性を強化するために、追加のエラー訂正コード(「ECC」:Error Correction Code)メモリを含んでもよい。
【0112】
少なくとも一実施例では、アクセラレータ1714(たとえば、ハードウェア加速クラスタ)は、オン・チップのコンピュータ・ビジョン・ネットワーク、及びスタティック・ランダム・アクセス・メモリ(「SRAM」)を含み、アクセラレータ1714のための高帯域幅、低レイテンシのSRAMを提供してもよい。少なくとも一実施例では、オン・チップ・メモリは、たとえば限定することなく、8つのフィールド設定可能なメモリ・ブロックから成る少なくとも4MBのSRAMを含んでもよく、これは、PVAからもDLAからもアクセス可能であってもよい。少なくとも一実施例では、メモリ・ブロックの各対は、アドバンスト・ペリフェラル・バス(「APB」:advanced peripheral bus)インターフェース、構成回路、コントローラ、及びマルチプレクサを含んでもよい。少なくとも一実施例では、任意のタイプのメモリが使用されてもよい。少なくとも一実施例では、PVA及びDLAは、メモリへの高速アクセスをPVA及びDLAに提供するバックボーンを介して、メモリにアクセスしてもよい。少なくとも一実施例では、バックボーンは、PVA及びDLAを(たとえばAPBを使用して)メモリに相互接続するオン・チップのコンピュータ・ビジョン・ネットワークを含んでもよい。
【0113】
少なくとも一実施例では、オン・チップのコンピュータ・ビジョン・ネットワークは、何らかの制御信号/アドレス/データを送信する前に、PVAとDLAの両方が準備信号及び有効信号を提供することを判定するインターフェースを含んでもよい。少なくとも一実施例では、インターフェースは、制御信号/アドレス/データを送信するための別々の位相及び別々のチャネル、並びに継続的なデータ転送のためのバースト型通信を提供してもよい。少なくとも一実施例では、インターフェースは、国際標準化機構(「ISO」:Organization for Standardization)26262又は国際電気標準会議(「IEC」:International Electrotechnical Commission)61508の規格に準拠してもよいが、他の規格及びプロトコルが使用されてもよい。
【0114】
少なくとも一実施例では、SoC1704のうちの1つ又は複数は、リアル・タイム・レイ・トレーシングのハードウェア・アクセラレータを含んでもよい。少なくとも一実施例では、リアル・タイム・レイ・トレーシングのハードウェア・アクセラレータを使用して、物体の(たとえば世界モデル内での)位置及び範囲が迅速且つ効率的に判定されて、RADAR信号解釈のため、音伝播合成及び/若しくは分析のため、SONARシステムのシミュレーションのため、一般波形の伝播シミュレーションのため、ローカリゼーション及び/若しくは他の機能を目的としたLIDARデータとの比較のため、並びに/又は他の使用法のためのリアル・タイムの可視化シミュレーションが生成されてもよい。
【0115】
少なくとも一実施例では、アクセラレータ1714(たとえば、ハードウェア・アクセラレータ・クラスタ)は、自律運転のための多様な使用法を有する。少なくとも一実施例では、PVAは、ADAS及び自律車両の主要な処理ステージに使用することができるプログラマブル・ビジョン・アクセラレータであってもよい。少なくとも一実施例では、PVAの性能は、低電力及び低レイテンシの予測可能な処理を必要とするアルゴリズム・ドメインに良好に適合する。言い換えれば、PVAは、低レイテンシ及び低電力の予測可能なラン・タイムを必要とする半稠密(semi-dense)又は稠密な規則的計算に対して、データ・セットが小さくても良好に機能する。少なくとも一実施例では、車両1700などの自律車両では、従来のコンピュータ・ビジョン・アルゴリズムを実行するようにPVAが設計されるが、これは、それらが、物体検出及び整数数値の演算に有効だからである。
【0116】
たとえば、技術の少なくとも一実施例によれば、PVAを使用して、コンピュータ・ステレオ・ビジョンが実行されてもよい。少なくとも一実施例では、いくつかの例においてセミ・グローバル・マッチングに基づくアルゴリズムが使用されてもよいが、これは限定するものではない。少なくとも一実施例では、レベル3~5の自律運転のためのアプリケーションは、動き推定/ステレオ・マッチング(たとえば、動きからの構造化、歩行者認識、車線検出など)をオン・ザ・フライで使用する。少なくとも一実施例では、PVAは、2つの単眼カメラからの入力に対して、コンピュータ・ステレオ・ビジョン機能を実行してもよい。
【0117】
少なくとも一実施例では、PVAを使用して、高密度オプティカル・フローが実行されてもよい。たとえば、少なくとも一実施例では、PVAは、未加工のRADARデータを(たとえば4Dの高速フーリエ変換を使用して)処理して、処理済みRADARデータを提供することができる。少なくとも一実施例では、PVAは、飛行時間の深度処理に使用され、たとえば未加工の飛行時間データを処理することにより、処理済みの飛行時間データが提供される。
【0118】
少なくとも一実施例では、たとえば限定することなく、物体検出ごとに信頼性の尺度を出力するニューラル・ネットワークを含む、制御及び運転の安全性を強化するための任意のタイプのネットワークを実行するために、DLAが使用されてもよい。少なくとも一実施例では、信頼性は、他の検出と比較した各検出の確率として、若しくはその相対的な「重み」を提供するものとして表されても、又は解釈されてもよい。少なくとも一実施例では、信頼性によって、どの検出を誤検出ではなく正検出とみなすべきかに関して、システムがさらなる判定を下せるようになる。たとえば、少なくとも一実施例では、システムは、信頼性に対して閾値を設定し、閾値を超える検出だけを正検出とみなしてもよい。自動緊急ブレーキ(「AEB」:automatic emergency braking)が使用される実施例では、誤検出によって車両は自動的に緊急ブレーキをかけることになり、これは明らかに望ましくない。少なくとも一実施例では、非常に信頼性の高い検出が、AEBのトリガとみなされてもよい。少なくとも一実施例では、DLAは、信頼値を回帰するようにニューラル・ネットワークを実行してもよい。少なくとも一実施例では、ニューラル・ネットワークは、とりわけ境界ボックスの次元、(たとえば別のサブシステムから)取得した地面推定、車両1700の配向と相関しているIMUセンサ1766からの出力、距離、ニューラル・ネットワーク及び/又は他のセンサ(たとえば、LIDARセンサ1764若しくはRADARセンサ1760)から取得した物体の3Dロケーション推定などのパラメータの少なくともいくつかのサブセットを、その入力として取ってもよい。
【0119】
少なくとも一実施例では、SoC1704のうちの1つ又は複数は、データ・ストア1716(たとえばメモリ)を含んでもよい。少なくとも一実施例では、データ・ストア1716は、SoC1704のオン・チップ・メモリであってもよく、このメモリは、GPU1708及び/又はDLA上で実行されるニューラル・ネットワークを記憶してもよい。少なくとも一実施例では、データ・ストア1716の容量は、冗長性及び安全性のためにニューラル・ネットワークの複数のインスタンスを記憶するのに十分なほど大きくてもよい。少なくとも一実施例では、データ・ストア1716は、L2又はL3のキャッシュを備えてもよい。
【0120】
少なくとも一実施例では、SoC1704のうちの1つ又は複数は、任意の数のプロセッサ1710(たとえば、組み込みプロセッサ)を含んでもよい。プロセッサ1710は、ブート電力並びに管理機能及び関連するセキュリティ執行に対処するための専用プロセッサ及びサブシステムであってもよいブート及び電力管理プロセッサを含んでもよい。少なくとも一実施例では、ブート及び電力管理プロセッサは、SoC1704のブート・シーケンスの一部であってもよく、ラン・タイム電力管理サービスを提供してもよい。少なくとも一実施例では、ブート電力及び管理プロセッサは、クロックと電圧のプログラミング、システムの低電力状態への移行の支援、SoC1704の熱及び温度センサの管理、並びに/又はSoC1704の電力状態の管理を提供してもよい。少なくとも一実施例では、各温度センサは、その出力周波数が温度に比例するリング発振器として実装されてもよく、SoC1704は、リング発振器を使用して、CPU1706、GPU1708、及び/又はアクセラレータ1714の温度を検出してもよい。少なくとも一実施例では、温度が閾値を超えると判定された場合には、ブート及び電力管理プロセッサは、温度不良ルーチンに入り、SoC1704を低電力状態にし、且つ/又は車両1700を運転手-安全停止モードにしても(たとえば、車両1700を安全停止させる)よい。
【0121】
少なくとも一実施例では、プロセッサ1710はさらに、オーディオ処理エンジンとしての役割を果たすことができる組み込みプロセッサのセットを含んでもよい。少なくとも一実施例では、オーディオ処理エンジンは、多重インターフェースを介した多チャネルのオーディオ、及び幅広くフレキシブルな様々なオーディオI/Oインターフェースのための、完全なハードウェア・サポートを可能にするオーディオ・サブシステムであってもよい。少なくとも一実施例では、オーディオ処理エンジンは、専用RAMのあるデジタル信号プロセッサを有する専用プロセッサ・コアである。
【0122】
少なくとも一実施例では、プロセッサ1710はさらに、低電力センサ管理及び立ち上げのユース・ケースをサポートするのに必要なハードウェア特徴を提供することができる常時オン・プロセッサ・エンジンを含んでもよい。少なくとも一実施例では、常時オン・プロセッサ・エンジンは、限定することなく、プロセッサ・コア、密結合RAM、サポート周辺装置(たとえば、タイマ、及び割込みコントローラ)、様々なI/Oコントローラ周辺装置、及びルーティング論理を含んでもよい。
【0123】
少なくとも一実施例では、プロセッサ1710はさらに安全クラスタ・エンジンを含んでもよく、このエンジンは限定することなく、自動車用途の安全管理に対処するための専用のプロセッサ・サブシステムを含む。少なくとも一実施例では、安全クラスタ・エンジンは、限定することなく、2つ以上のプロセッサ・コア、密結合RAM、サポート周辺装置(たとえば、タイマ、及び割込みコントローラなど)、及び/又はルーティング論理を含んでもよい。安全モードでは、少なくとも一実施例においてロックステップ・モードで2つ以上のコアが動作し、これらの動作間で何らかの差を検出するための比較論理を有する単一コアとして機能してもよい。少なくとも一実施例では、プロセッサ1710はさらにリアル・タイム・カメラ・エンジンを含んでもよく、このエンジンは限定することなく、リアル・タイムのカメラ管理に対処するための専用のプロセッサ・サブシステムを含んでもよい。少なくとも一実施例では、プロセッサ1710はさらに、高ダイナミック・レンジの信号プロセッサを含んでもよく、この信号プロセッサは、カメラ処理パイプラインの一部であるハードウェア・エンジンである画像信号プロセッサを限定することなく含んでもよい。
【0124】
少なくとも一実施例では、プロセッサ1710は、ビデオ画像合成器を含んでもよく、この合成器は、再生装置のウインドウに最終画像を生成するのにビデオ再生アプリケーションが必要とするビデオ後処理機能を実装する(たとえばマイクロプロセッサに実装された)処理ブロックであってもよい。少なくとも一実施例では、ビデオ画像合成器は、広角カメラ1770、周囲カメラ1774、及び/又はキャビン内監視カメラ・センサに対して、レンズゆがみ補正を実行してもよい。少なくとも一実施例では、キャビン内監視カメラ・センサは、好ましくは、キャビン内のイベントを識別し、それに適宜応答するように構成された、SoC1704の別のインスタンスで実行されているニューラル・ネットワークによって監視される。少なくとも一実施例では、キャビン内システムは、セルラー・サービスをアクティブ化し、電話をかけたり、電子メールを書いたり、車両の行き先を変更したり、車両のインフォテイメント・システム及び設定をアクティブ化又は変更したり、音声作動式のウェブ・サーフィンを提供したりするために、限定することなく読唇を実行してもよい。少なくとも一実施例では、ある一定の機能は、車両が自律モードで動作しているときにドライバにとって利用可能になり、それ以外のときには使用不可になる。
【0125】
少なくとも一実施例では、ビデオ画像合成器は、空間と時間の両方のノイズ低減のための拡張された時間的ノイズ低減を含んでもよい。たとえば、少なくとも一実施例では、ビデオで動きが生じる場合には、ノイズ低減が空間情報に適切に重み付けして、隣接するフレームによって提供される情報の重みを軽くする。少なくとも一実施例では、画像又は画像の一部分が動きを含まない場合には、ビデオ画像合成器により実行される時間的ノイズ低減は、前の画像からの情報を使用して、現在の画像のノイズを低減してもよい。
【0126】
少なくとも一実施例では、ビデオ画像合成器はまた、入力されたステレオ・レンズ・フレームに対してステレオ平行化を実行するように構成されてもよい。少なくとも一実施例では、ビデオ画像合成器はさらに、オペレーティング・システムのデスクトップが使用中のときに、ユーザ・インターフェースを合成するために使用されてもよく、GPU1708は、新規の表面を継続的にレンダリングする必要がなくなる。少なくとも一実施例では、GPU1708の電源が入れられ、アクティブで3Dレンダリングを行っているとき、性能及び応答性を向上させるために、ビデオ画像合成器を使用してGPU1708をオフロードしてもよい。
【0127】
少なくとも一実施例では、SoC1704のうちの1つ又は複数はさらに、ビデオ及びカメラからの入力を受信するためのモバイル・インダストリ・プロセッサ・インターフェース(「MIPI」:mobile industry processor interface)のカメラ直列インターフェース、高速インターフェース、並びに/又はカメラ及び関連ピクセルの入力機能に使用されてもよいビデオ入力ブロックを含んでもよい。少なくとも一実施例では、SoC1704のうちの1つ又は複数はさらに、入力/出力コントローラを含んでもよく、このコントローラはソフトウェアによって制御されてもよく、特定の役割に縛られていないI/O信号を受信するために使用されてもよい。
【0128】
少なくとも一実施例では、1つ又は複数のSoC1704はさらに、周辺装置、オーディオ・エンコーダ/デコーダ(「コーデック」)、電力管理、及び/又は他の装置との通信を可能にするための幅広い周辺装置インターフェースを含んでもよい。SoC1704は、(たとえば、ギガビット・マルチメディア・シリアル・リンク及びイーサネット(登録商標)を介して接続された)カメラからのデータ、センサ(たとえば、イーサネット(登録商標)を介して接続されてもよいLIDARセンサ1764、RADARセンサ1760など)からのデータ、バス1702からのデータ(たとえば、車両1700のスピード、ハンドル位置など)、(たとえば、イーサネット(登録商標)又はCANバスを介して接続された)GNSSセンサ1758からのデータなどを処理するために使用されてもよい。少なくとも一実施例では、SoC1704のうちの1つ又は複数はさらに、専用の高性能大容量ストレージ・コントローラを含んでもよく、このコントローラは独自のDMAエンジンを含んでもよく、ルーチンのデータ管理タスクからCPU1706を解放するために使用されてもよい。
【0129】
少なくとも一実施例では、SoC1704は、自動化レベル3~5に及ぶフレキシブルなアーキテクチャを有するエンドツーエンドのプラットフォームであってもよく、それにより、多様性及び冗長性を得るためにコンピュータ・ビジョン及びADAS技法を活用し効率的に利用する包括的な機能的安全性アーキテクチャが提供され、フレキシブルで、信頼性の高い運転ソフトウェア・スタックが、深層学習ツールとともに提供される。少なくとも一実施例では、SoC1704は、従来のシステムより高速で、信頼性が高く、さらにはエネルギー効率及び空間効率が高い。たとえば、少なくとも一実施例では、アクセラレータ1714は、CPU1706、GPU1708、及びデータ・ストア1716と組み合わされると、レベル3~5の自律車両のための高速で効率的なプラットフォームを実現することができる。
【0130】
少なくとも一実施例では、コンピュータ・ビジョン・アルゴリズムはCPU上で実行されてもよく、このアルゴリズムは、Cプログラミング言語などの高レベル・プログラミング言語を使用して構成されて、多様な視覚データにわたって多様な処理アルゴリズムを実行してもよい。しかし、少なくとも一実施例では、CPUは、多くのコンピュータ・ビジョン・アプリケーションの性能要件、たとえば実行時間及び電力消費に関する要件などを満足できないことが多い。少なくとも一実施例では、多くのCPUは、車両内のADASアプリケーション及び現実的なレベル3~5の自律車両において使用される複雑な物体検出アルゴリズムを、リアル・タイムで実行することができない。
【0131】
本明細書に記載の実施例は、複数のニューラル・ネットワークを同時に且つ/又は順番に実行できるようにし、結果を組み合わせて、レベル3~5の自律運転機能を可能にすることができる。たとえば、少なくとも一実施例では、DLA又は個別GPU(たとえば、GPU1720)上で実行しているCNNは、テキスト及び単語認識を含んでもよく、ニューラル・ネットワークがそれについて特に訓練されてこなかった標識を含む交通標識を、スーパーコンピュータが読み、理解できるようにする。少なくとも一実施例では、DLAはさらに、標識を識別し、解釈し、標識の意味的理解を提供することができ、その意味的理解を、CPUコンプレックス上で実行されている経路計画モジュールに渡すことができるニューラル・ネットワークを含んでもよい。
【0132】
少なくとも一実施例では、レベル3、4、又は5の運転に関して、複数のニューラル・ネットワークが同時に実行されてもよい。たとえば、少なくとも一実施例では、電光と併せて「注意:点滅時は凍結状態」と示される警告標識は、いくつかのニューラル・ネットワークによって別々に解釈されても、集合的に解釈されてもよい。少なくとも一実施例では、標識自体は、第1の導入済みニューラル・ネットワーク(たとえば、訓練されてきたニューラル・ネットワーク)によって交通標識として識別されてもよく、「点滅時は凍結状態」という文字は、第2の導入済みニューラル・ネットワークによって解釈されてもよく、点滅光が検出された場合には、このニューラル・ネットワークが、凍結状態が存在することを車両の(好ましくはCPUコンプレックス上で実行している)経路計画ソフトウェアに通知する。少なくとも一実施例では、点滅光は、第3の導入済みニューラル・ネットワークを複数のフレームにわたって動作させることによって識別されてもよく、点滅光の存在(又は存在しないこと)が、車両の経路計画ソフトウェアに通知される。少なくとも一実施例では、3つすべてのニューラル・ネットワークが、DLA内及び/又はGPU1708上などで同時に実行されてもよい。
【0133】
少なくとも一実施例では、顔認識及び車両所有者識別のためのCNNは、カメラ・センサからのデータを使用して、車両1700の承認済みのドライバ及び/又は所有者の存在を識別してもよい。少なくとも一実施例では、常時オンのセンサ処理エンジンを使用して、所有者がドライバ用ドアに近づいてきたときに車両を解錠し、ライトを点灯させ、所有者が車両から離れるときには、セキュリティ・モードで車両を使用不可にしてもよい。こうして、SoC1704は、窃盗及び/又は自動車乗っ取りに対するセキュリティを実現する。
【0134】
少なくとも一実施例では、緊急車両の検出及び識別のためのCNNは、マイクロフォン1796からのデータを使用して、緊急車両のサイレンを検出及び識別してもよい。少なくとも一実施例では、SoC1704は、環境及び市街地の音を分類するとともに、視覚データを分類するためにCNNを使用する。少なくとも一実施例では、DLA上で実行されるCNNは、緊急車両が近づいてくる相対的なスピードを(たとえばドップラー効果を使用することによって)識別するように訓練される。少なくとも一実施例では、CNNはまた、GNSSセンサ1758によって識別される、車両が稼働している地域に特有の緊急車両を識別するように訓練されてもよい。少なくとも一実施例では、欧州で稼働している場合には、CNNは欧州のサイレンを検出しようとし、米国の場合には、北米のサイレンだけを識別しようとする。少なくとも一実施例では、緊急車両が検出されると、緊急車両安全ルーチンを実行するための制御プログラムを使用して、車両の速度を落とし、道路脇に寄せ、車両を停止させ、且つ/又は緊急車両が通過するまで、超音波センサ1762を併用して車両をアイドリングにしてもよい。
【0135】
少なくとも一実施例では、車両1700はCPU1718(たとえば、個別CPU又はdCPU)を含んでもよく、このCPUは高速相互接続(たとえば、PCIe)を介してSoC1704に結合されてもよい。少なくとも一実施例では、CPU1718は、たとえばX86プロセッサを含んでもよい。CPU1718は、たとえば、ADASセンサとSoC1704の間で潜在的に不整合な結果を調停すること、並びに/又はコントローラ1736及び/若しくはチップ上のインフォテイメント・システム(「インフォテイメントSoC」)1730の状態及び健全性を監視することを含め、様々な機能のうちの任意の機能を実行するために使用されてもよい。
【0136】
少なくとも一実施例では、車両1700はGPU1720(たとえば、個別GPU又はdGPU)を含んでもよく、このGPUは高速相互接続(たとえば、NVIDIAのNVLINK)を介してSoC1704に結合されてもよい。少なくとも一実施例では、GPU1720は、冗長な及び/又は異なるニューラル・ネットワークを実行することなどによって、追加の人工知能機能を提供してもよく、車両1700のセンサからの入力(たとえば、センサ・データ)に少なくとも部分的に基づき、ニューラル・ネットワークを訓練及び/又は更新するために使用されてもよい。
【0137】
少なくとも一実施例では、車両1700はさらに、ネットワーク・インターフェース1724を含んでもよく、このインターフェースは限定することなく、ワイヤレス・アンテナ1726(たとえば、セルラー・アンテナ、Bluetoothアンテナなど、異なる通信プロトコル向けの1つ又は複数のワイヤレス・アンテナ1726)を含んでもよい。少なくとも一実施例では、クラウド(たとえば、サーバ及び/又は他のネットワーク・デバイス)、他の車両、及び/又はコンピューティング・デバイス(たとえば、乗員のクライアント・デバイス)とのインターネットを介したワイヤレス接続を可能にするために、ネットワーク・インターフェース1724が使用されてもよい。少なくとも一実施例では、他の車両と通信するために、車両170と他の車両との間に直接リンクが確立されてもよく、且つ/又は(たとえば、ネットワークにわたって、且つインターネットを介して)間接リンクが確立されてもよい。少なくとも一実施例では、直接リンクは、車車間通信リンクを使用して提供されてもよい。車車間通信リンクは、車両1700の近傍の車両(たとえば、車両1700の前方、側方、及び/又は後方の車両)についての情報を車両1700に提供してもよい。少なくとも一実施例では、前述した機能は、車両1700の協調型アダプティブ・クルーズ・コントロール機能の一部であってもよい。
【0138】
少なくとも一実施例では、ネットワーク・インターフェース1724は、変調及び復調の機能を提供し、コントローラ1736がワイヤレス・ネットワークを介して通信できるようにするSoCを含んでもよい。少なくとも一実施例では、ネットワーク・インターフェース1724は、ベースバンドから無線周波数へのアップ・コンバージョン、及び無線周波数からベースバンドへのダウン・コンバージョンのための無線周波数フロント・エンドを含んでもよい。少なくとも一実施例では、周波数変換は、任意の技術的に実行可能なやり方で実行されてもよい。たとえば、周波数変換は、よく知られたプロセスにより、且つ/又はスーパー・ヘテロダイン・プロセスを使用して実行することができる。少なくとも一実施例では、無線周波数フロント・エンド機能は、別個のチップによって提供されてもよい。少なくとも一実施例では、ネットワーク・インターフェースは、LTE、WCDMA(登録商標)、UMTS、GSM、CDMA2000、Bluetooth、Bluetooth LE、Wi-Fi、Z-Wave、ZigBee、LoRaWAN、及び/又は他のワイヤレス・プロトコルを介して通信するためのワイヤレス機能を含んでもよい。
【0139】
少なくとも一実施例では、車両1700はさらにデータ・ストア1728を含んでもよく、このデータ・ストアは限定することなく、オフ・チップ(たとえばSoC1704上にない)ストレージを含んでもよい。少なくとも一実施例では、データ・ストア1728は、RAM、SRAM、ダイナミック・ランダム・アクセス・メモリ(「DRAM」)、ビデオ・ランダム・アクセス・メモリ(「VRAM」:video random-access memory)、フラッシュ、ハード・ディスク、並びに/又は少なくとも1ビットのデータを記憶することができる他の構成要素及び/若しくはデバイスを含む1つ若しくは複数のストレージ要素を、限定することなく含んでもよい。
【0140】
少なくとも一実施例では、車両1700はさらに、マッピング、知覚、占有グリッド生成、及び/又は経路計画の機能を支援するためのGNSSセンサ1758(たとえば、GPS及び/又は補助GPSセンサ)を含んでもよい。少なくとも一実施例では、イーサネット(登録商標)からシリアル(たとえばRS-232)へのブリッジを有するUSBコネクタを使用するGPSをたとえば限定することなく含む任意の数のGNSSセンサ1758が使用されてもよい。
【0141】
少なくとも一実施例では、車両1700はさらに、RADARセンサ1760を含んでもよい。RADARセンサ1760は、暗闇及び/又は厳しい気象条件の中でも、長距離の車両検出を行うために車両1700によって使用されてもよい。少なくとも一実施例では、RADARの機能的安全性レベルは、ASIL Bであってもよい。RADARセンサ1760は、制御のために(たとえば、RADARセンサ1760によって生成されたデータを送信するために)、また物体追跡データにアクセスするために、CAN及び/又はバス1702を使用してもよく、いくつかの例では、未加工データにアクセスするためにイーサネット(登録商標)にアクセスできる。少なくとも一実施例では、多様なタイプのRADARセンサが使用されてもよい。たとえば限定することなく、RADARセンサ1760は、前方、後方、及び側方のRADAR使用に好適であってもよい。少なくとも一実施例では、RADARセンサ1760のうちの1つ又は複数は、パルス・ドップラRADARセンサである。
【0142】
少なくとも一実施例では、RADARセンサ1760は、狭視野の長距離、広視野の短距離、側面を網羅する短距離など、異なる構成を含んでもよい。少なくとも一実施例では、長距離RADARは、アダプティブ・クルーズ・コントロール機能のために使用されてもよい。少なくとも一実施例では、長距離RADARシステムは、2つ以上の独立した走査によって実現される250mの範囲内などの広視野を提供してもよい。少なくとも一実施例では、RADARセンサ1760は、静的物体と移動している物体とを区別しやすくしてもよく、緊急ブレーキ支援及び前方衝突警告を行うためにADASシステム1738によって使用されてもよい。長距離RADARシステムに含まれるセンサ1760は、複数の(たとえば6つ以上の)固定RADARアンテナ、並びに高速CAN及びFlexRayインターフェースを有するモノスタティックのマルチモードRADARを、限定することなく含んでもよい。少なくとも一実施例では、6つのアンテナがある場合、中央の4つのアンテナは、隣接した車線からの干渉が最小の状態で、より高速で車両1700の周囲を記録するように設計された集中したビーム・パターンを生成してもよい。少なくとも一実施例では、他の2つのアンテナは、視野を拡張してもよく、車両1700の車線に入る又はそこから出る車両を迅速に検出するのを可能にする。
【0143】
少なくとも一実施例では、中距離RADARシステムは、一例として最大160m(前方)、又は80m(後方)の範囲、及び最大42度(前方)、又は150度(後方)の視野を含んでもよい。少なくとも一実施例では、短距離RADARシステムは、限定することなく、後方バンパの両端部に設置されるように設計された任意の数のRADARセンサ1760を含んでもよい。後方バンパの両端部に設置されたとき、少なくとも一実施例では、RADARセンサ・システムは、後方及び車両隣の死角を常に監視する2本のビームを生成してもよい。少なくとも一実施例では、短距離RADARシステムは、死角検出及び/又は車線変更支援を行うために、ADASシステム1738において使用されてもよい。
【0144】
少なくとも一実施例では、車両1700はさらに、超音波センサ1762を含んでもよい。超音波センサ1762は、車両1700の前方、後方、及び/又は側方に配置されてもよく、駐車支援のため、且つ/又は占有グリッドを生成し更新するために使用されてもよい。少なくとも一実施例では、多様な超音波センサ1762が使用されてもよく、異なる検出範囲(たとえば、2.5m、4m)には異なる超音波センサ1762が使用されてもよい。少なくとも一実施例では、超音波センサ1762は、機能的安全性レベルASIL Bで動作してもよい。
【0145】
少なくとも一実施例では、車両1700は、LIDARセンサ1764を含んでもよい。LIDARセンサ1764は、物体及び歩行者の検出、緊急ブレーキ、衝突回避、及び/又は他の機能のために使用されてもよい。少なくとも一実施例では、LIDARセンサ1764は、機能的安全性レベルASIL Bであってもよい。少なくとも一実施例では、車両1700は、複数のLIDARセンサ1764(たとえば、2つ、4つ、6つなど)を含んでもよく、これらのセンサは、(たとえばデータをギガビット・イーサネット(登録商標)・スイッチに提供するために)イーサネット(登録商標)を使用してもよい。
【0146】
少なくとも一実施例では、LIDARセンサ1764は、360度の視野について、物体及びそれらの距離のリストを提供可能であってもよい。少なくとも一実施例では、市販のLIDARセンサ1764は、たとえば宣伝された範囲がおおよそ100mであり、精度が2cm~3cmであり、100Mbpsのイーサネット(登録商標)接続をサポートしてもよい。少なくとも一実施例では、1つ又は複数の非突出型LIDARセンサ1764が使用されてもよい。こうした実施例では、LIDARセンサ1764は、車両1700の前方、後方、側方、及び/又は角に組み込むことができる小さいデバイスとして実装されてもよい。少なくとも一実施例では、こうした実施例のLIDARセンサ1764は、最大120度の水平視野、及び35度の垂直視野を、低反射性の物体に対しても200mの範囲で提供してもよい。少なくとも一実施例では、前方に取り付けられたLIDARセンサ1764は、45度~135度の水平視野をもたらすように構成されてもよい。
【0147】
少なくとも一実施例では、3DフラッシュLIDARなどのLIDAR技術も使用されてよい。3DフラッシュLIDARは、レーザのフラッシュを送信源として使用して、車両1700の周囲を最大でおおよそ200mまで照射する。少なくとも一実施例では、フラッシュLIDARユニットは、限定することなくレセプタを含み、このレセプタは、レーザ・パルスの通過時間及び各ピクセルにおける反射光を記録し、それらは、車両1700から物体までの範囲に対応する。少なくとも一実施例では、フラッシュLIDARによって、非常に正確でゆがみのない周囲画像が、レーザのフラッシュごとに生成できるようになる。少なくとも一実施例では、4つのフラッシュLIDARが、車両1700の各側面に1つ導入されてもよい。少なくとも一実施例では、3DフラッシュLIDARシステムは、ファン以外に可動部品のない半導体3D凝視アレイ(staring array)のLIDARカメラ(たとえば、非走査型LIDARデバイス)を、限定することなく含む。少なくとも一実施例では、フラッシュLIDARデバイスは、フレーム当たり5ナノ秒のクラスI(目に安全な)レーザ・パルスを使用してもよく、3D範囲の点群及び位置同期された(co-registered)強度データの形で反射レーザ光を捕捉してもよい。
【0148】
少なくとも一実施例では、車両はさらにIMUセンサ1766を含んでもよい。少なくとも一実施例では、IMUセンサ1766は、少なくとも一実施例では、車両1700の後方車軸の中央に位置付けられてもよい。少なくとも一実施例では、IMUセンサ1766は、たとえば限定することなく、加速度計、磁力計、ジャイロスコープ、磁気コンパス、及び/又は他のタイプのセンサを含んでもよい。6軸の用途など少なくとも一実施例では、IMUセンサ1766は限定することなく、加速度計及びジャイロスコープを含んでもよい。9軸の用途など少なくとも一実施例では、IMUセンサ1766は限定することなく、加速度計、ジャイロスコープ、及び磁力計を含んでもよい。
【0149】
少なくとも一実施例では、IMUセンサ1766は、微小電気機械システム(「MEMS」:micro-electro-mechanical systems)慣性センサ、高感度GPS受信機、及び先進のKalmanフィルタリング・アルゴリズムを組み合わせて、位置、速度、及び姿勢の推定値を提供する小型の高性能GPS補強型慣性航法システム(「GPS/INS」:GPS-Aided Inertial Navigation System)として実装されてもよい。少なくとも一実施例では、IMUセンサ1766により、車両1700は、速度変化を直接観察しそれをGPSからIMUセンサ1766に相関させることによって、磁気センサからの入力を必要とせずに方位を推定できるようになる。少なくとも一実施例では、IMUセンサ1766及びGNSSセンサ1758は、単一の統合ユニットに組み合わされてもよい。
【0150】
少なくとも一実施例では、車両1700は、車両1700の中及び/又はその周りに設置されたマイクロフォン1796を含んでもよい。少なくとも一実施例では、マイクロフォン1796は、とりわけ緊急車両の検出及び識別のために使用されてもよい。
【0151】
少なくとも一実施例では、車両1700はさらに、ステレオ・カメラ1768、広角カメラ1770、赤外線カメラ1772、周囲カメラ1774、長距離カメラ1798、中距離カメラ1776、及び/又は他のカメラ・タイプを含む任意の数のカメラ・タイプを含んでもよい。少なくとも一実施例では、カメラは、車両1700の全周囲の周りで画像データを捕捉するために使用されてもよい。少なくとも一実施例では、使用されるカメラのタイプは、車両1700の特徴に応じて異なる。少なくとも一実施例では、車両1700の周りで必要な被写域を提供するために、カメラ・タイプの任意の組合せが使用されてもよい。少なくとも一実施例では、カメラの数は、実施例に応じて異なってもよい。たとえば、少なくとも一実施例では、車両1700は6台のカメラ、7台のカメラ、10台のカメラ、12台のカメラ、又は別の数のカメラを含むことができる。カメラは、一例として限定することなく、ギガビット・マルチメディア・シリアル・リンク(「GMSL」:Gigabit Multimedia Serial Link)及び/又はギガビット・イーサネット(登録商標)をサポートしてもよい。少なくとも一実施例では、各カメラは、
図17A及び
図17Bに関して本明細書でさらに詳細に上で説明されている。
【0152】
少なくとも一実施例では、車両1700はさらに、振動センサ1742を含んでもよい。振動センサ1742は、車軸など、車両1700の構成要素の振動を測定してもよい。たとえば、少なくとも一実施例では、振動の変化は、路面の変化を示すことがある。少なくとも一実施例では、2つ以上の振動センサ1742が使用される場合には、路面の摩擦又はすべり量を判定するために振動の差が使用されてもよい(たとえば、動力により駆動される車軸と自由回転する車軸との間に振動差がある場合)。
【0153】
少なくとも一実施例では、車両1700は、ADASシステム1738を含んでもよい。ADASシステム1738は、限定することなく、いくつかの例においてSoCを含んでもよい。少なくとも一実施例では、ADASシステム1738は、限定することなく、任意の数及び任意の組合せの、自律/アダプティブ/自動のクルーズ・コントロール(「ACC」:autonomous/adaptive/automatic cruise control)システム、協調型アダプティブ・クルーズ・コントロール(「CACC」:cooperative adaptive cruise control)システム、正面衝突警告(「FCW」:forward crash warning)システム、自動緊急ブレーキ(「AEB」:automatic emergency braking)システム、車線逸脱警告(「LDW」:lane departure warning)システム、車線維持支援(「LKA」:lane keep assist)システム、死角警告(「BSW」:blind spot warning)システム、後方クロス・トラフィック警告(「RCTW」:ear cross-traffic warning)システム、衝突警告(「CW」:collision warning)システム、車線センタリング(「LC」:ane centering)システム、並びに/又は他のシステム、特徴、及び/若しくは機能を含んでもよい。
【0154】
少なくとも一実施例では、ACCシステムは、RADARセンサ1760、LIDARセンサ1764、及び/又は任意の数のカメラを使用してもよい。少なくとも一実施例では、ACCシステムは、縦方向ACCシステム及び/又は横方向ACCシステムを含んでもよい。少なくとも一実施例では、縦方向ACCシステムは、車両1700の直前の車両までの距離を監視及び制御し、車両1700のスピードを自動的に調節して、前の車両からの安全な距離を維持する。少なくとも一実施例では、横方向ACCシステムは、距離の維持を実行し、必要なときに車線変更するよう車両1700に通知する。少なくとも一実施例では、横方向ACCは、LC及びCWなどの他のADAS用途に関係する。
【0155】
少なくとも一実施例では、CACCシステムは、他の車両からの情報を使用し、この情報は、ワイヤレス・リンクにより、又は間接的にネットワーク接続を介して(たとえばインターネットを介して)、他の車両からネットワーク・インターフェース1724及び/又はワイヤレス・アンテナ1726により受信されてもよい。少なくとも一実施例では、車車間(「V2V」:vehicle-to-vehicle)通信リンクによって直接リンクが提供されてもよく、一方インフラストラクチャ車間(「I2V」:infrastructure-to-vehicle)通信リンクによって間接リンクが提供されてもよい。一般に、V2V通信の概念は、すぐ前の先行車両(たとえば、車両1700のすぐ前で同じ車線にいる車両)についての情報を提供し、I2V通信の概念は、さらにその前の交通についての情報を提供する。少なくとも一実施例では、CACCシステムは、I2VとV2Vの情報源のいずれか又は両方を含んでもよい。少なくとも一実施例では、車両1700の前の車両についての情報があれば、CACCシステムは信頼性をさらに高めることができ、交通の流れをより円滑にし、路上での渋滞を低減できる可能性を有する。
【0156】
少なくとも一実施例では、FCWシステムは、危険物に対してドライバに忠告するように設計され、それによりドライバは修正措置を取ることができる。少なくとも一実施例では、FCWシステムは正面カメラ及び/又はRADARセンサ1760を使用し、これらは、ディスプレイ、スピーカ、及び/又は振動構成要素などのドライバへのフィードバックに電気的に結合されている専用のプロセッサ、DSP、FPGA、及び/又はASICに結合されている。少なくとも一実施例では、FCWシステムは、音、視覚的警告、振動、及び/又はクイック・ブレーキ・パルスなどの形で警告を提供してもよい。
【0157】
少なくとも一実施例では、AEBシステムは、別の車両又は他の物体との差し迫った正面衝突を検出し、指定された時間内又は距離パラメータ内にドライバが修正措置を取らない場合には、自動でブレーキをかけてもよい。少なくとも一実施例では、AEBシステムは、専用のプロセッサ、DSP、FPGA、及び/又はASICに結合された正面カメラ及び/又はRADARセンサ1760を使用してもよい。少なくとも一実施例では、AEBシステムが危険物を検出したとき、AEBシステムは通常、修正措置を取って衝突を避けるよう最初にドライバに忠告し、ドライバが修正措置を取らない場合には、AEBシステムは、予測される衝突を防ぐ又は少なくともその衝撃を軽減するために自動的にブレーキをかけてもよい。少なくとも一実施例では、AEBシステムは、ダイナミック・ブレーキ・サポート及び/又は衝突直前ブレーキなどの技法を含んでもよい。
【0158】
少なくとも一実施例では、LDWシステムは、車両1700が車線の目印に交差したときにドライバに忠告するために、ハンドル又は座席の振動など、視覚的、聴覚的、及び/又は触覚的な警告を提供する。少なくとも一実施例では、ドライバが方向指示器を作動させることによって意図的な車線逸脱を示す場合には、LDWシステムは作動しない。少なくとも一実施例では、LDWシステムは、正面カメラを使用してもよく、これは、ディスプレイ、スピーカ、及び/又は振動構成要素などのドライバへのフィードバックに電気的に結合することができる専用のプロセッサ、DSP、FPGA、及び/又はASICに結合されている。少なくとも一実施例では、LKAシステムは、LDWシステムの変形形態である。LKAシステムは、車両1700が車線からはみ出し始めた場合に、車両1700を修正するように操縦入力又はブレーキ制御を提供する。
【0159】
少なくとも一実施例では、BSWシステムは、自動車の死角にある車両を検出し、ドライバに警告する。少なくとも一実施例では、BSWシステムは、視覚的、聴覚的、及び/又は触覚的なアラートを提供して、合流又は車線変更が安全ではないことを示してもよい。少なくとも一実施例では、BSWシステムは、ドライバが方向指示器を使用したときに追加の警告を提供してもよい。少なくとも一実施例では、BSWシステムは、専用のプロセッサ、DSP、FPGA、及び/又はASICに結合された背面カメラ及び/又はRADARセンサ1760を使用してもよく、これらの専用のプロセッサ、DSP、FPGA、及び/又はASICは、ディスプレイ、スピーカ、及び/又は振動構成要素などのドライバへのフィードバックに電気的に結合されている。
【0160】
少なくとも一実施例では、RCTWシステムは、車両1700の後退時に、後方カメラの範囲外に物体が検出されたときに、視覚的、聴覚的、及び/又は触覚的な通知を提供してもよい。少なくとも一実施例では、RCTWシステムは、衝突を回避するために確実に車両ブレーキがかけられるように、AEBシステムを含む。少なくとも一実施例では、RCTWシステムは、1つ又は複数の背面RADARセンサ1760を使用してもよく、これはディスプレイ、スピーカ、及び/又は振動構成要素などのドライバへのフィードバックに電気的に結合された専用のプロセッサ、DSP、FPGA、及び/又はASICに結合されている。
【0161】
少なくとも一実施例では、従来のADASシステムは、誤検出結果を出しがちなことがあり、これはドライバにとっては迷惑で気が散るものであり得るが、通常は大したことにはならない。なぜなら、従来のADASシステムは、ドライバに忠告し、安全を要する状態が本当に存在し、それに適宜対応するかどうかを、ドライバが判断できるようにするからである。少なくとも一実施例では、結果が矛盾する場合、一次コンピュータ(たとえば第1のコントローラ1736)からの結果に従うか、又は二次コンピュータ(たとえば、第2のコントローラ1736)からの結果に従うかどうかを、車両1700自体が判断する。たとえば、少なくとも一実施例では、ADASシステム1738は、バックアップ・コンピュータの合理性モジュールに知覚情報を抵抗するための、バックアップ及び/又は二次コンピュータであってもよい。少なくとも一実施例では、バックアップ・コンピュータの合理性モニタが、ハードウェア構成要素上の冗長性の多様なソフトウェアを実行して、知覚の誤り及び動的な運転タスクを検出してもよい。少なくとも一実施例では、ADASシステム1738からの出力は、監視MCUに提供されてもよい。少なくとも一実施例では、一次コンピュータからの出力と二次コンピュータからの出力が矛盾する場合には、監視MCUが、安全な動作を確保するために矛盾をどのように調和させるかを判定する。
【0162】
少なくとも一実施例では、一次コンピュータは、一次コンピュータの選択した結果の信頼性を示す信頼性スコアを、監視MCUに提供するように構成されてもよい。少なくとも一実施例では、信頼性スコアが閾値を超える場合には、二次コンピュータが矛盾する又は一貫性のない結果を提供しているかどうかに関わらず、監視MCUは一次コンピュータの指示に従ってもよい。少なくとも一実施例では、信頼性スコアが閾値を満足せず、一次コンピュータと二次コンピュータが異なる結果(たとえば、矛盾)を示す場合には、監視MCUは、コンピュータ同士を調停して、適切な結果を判定してもよい。
【0163】
少なくとも一実施例では、二次コンピュータが誤アラームを提供する条件を、一次コンピュータと二次コンピュータからの出力に少なくとも部分的に基づき判定するように訓練及び構成されたニューラル・ネットワークを、監視MCUが実行するように構成されてもよい。少なくとも一実施例では、監視MCUのニューラル・ネットワークは、二次コンピュータの出力が信用されてもよいときと、信用できないときとを学習してもよい。たとえば、少なくとも一実施例では、二次コンピュータがRADARベースのFCWシステムである場合、監視MCUのニューラル・ネットワークは、アラームをトリガする排水溝の格子又はマンホール・カバーなど、実際には危険物ではない金属物体をFCWシステムが識別するときを学習してもよい。少なくとも一実施例では、二次コンピュータがカメラ・ベースのLDWシステムである場合、自転車や歩行者が存在し、車線逸脱が実際には最も安全な操作であるときに、監視MCUのニューラル・ネットワークはLDWを無効にするように学習してもよい。少なくとも一実施例では、監視MCUは、ニューラル・ネットワークを関連するメモリとともに実行するのに好適なDLA又はGPUのうちの少なくとも1つを含んでもよい。少なくとも一実施例では、監視MCUは、SoC1704の構成要素を備えても、且つ/又はその構成要素として含まれてもよい。
【0164】
少なくとも一実施例では、ADASシステム1738は、コンピュータ・ビジョンの従来のルールを使用してADAS機能を実行する二次コンピュータを含んでもよい。少なくとも一実施例では、二次コンピュータは、従来のコンピュータ・ビジョン・ルール(if-thenルール)を使用してもよく、ニューラル・ネットワークが監視MCUに存在することによって、信頼性、安全性、及び性能が向上してもよい。たとえば、少なくとも一実施例では、多様な実装及び意図的な非同一性により、特にソフトウェア(又はソフトウェアとハードウェアのインターフェース)の機能によって生じる誤りに対し、システム全体の誤り耐性が高まる。たとえば、少なくとも一実施例では、一次コンピュータ上で実行中のソフトウェアにバグ又はエラーがあり、二次コンピュータ上で実行中の非同一のソフトウェア・コードが、全体的に同じ結果を提供する場合には、監視MCUは、全体的な結果が正しく、一次コンピュータ上のソフトウェア又はハードウェアのバグが重大なエラーを引き起こしていないという、より高い信頼性を有してもよい。
【0165】
少なくとも一実施例では、ADASシステム1738の出力は、一次コンピュータの知覚ブロック、及び/又は一次コンピュータの動的運転タスクブロックに供給されてもよい。たとえば、少なくとも一実施例では、ADASシステム1738が、直前の物体に起因して正面衝突警告を示している場合には、知覚ブロックは、物体を識別するときにこの情報を使用してもよい。少なくとも一実施例では、二次コンピュータは、本明細書に記載するように、訓練済みの、したがって誤検出のリスクを低減する独自のニューラル・ネットワークを有してもよい。
【0166】
少なくとも一実施例では、車両1700はさらに、インフォテイメントSoC1730(たとえば、車両内インフォテイメント・システム(IVI):in-vehicle infotainment system)を含んでもよい。インフォテイメント・システム1730はSoCとして図示及び説明されるが、少なくとも一実施例では、SoCではなくてもよく、限定することなく2つ以上の個別の構成要素を含んでもよい。少なくとも一実施例では、インフォテイメントSoC1730は、限定することなく、ハードウェアとソフトウェアの組合せを含んでもよく、この組合せを使用して、オーディオ(たとえば、音楽、パーソナル・デジタル・アシスタント、ナビゲーション命令、ニュース、ラジオなど)、ビデオ(たとえば、TV、映画、ストリーミングなど)、電話(たとえば、ハンズフリー通話)、ネットワーク接続(たとえば、LTE、Wi-Fiなど)、及び/又は情報サービス(たとえば、ナビゲーション・システム、後方駐車支援、無線データ・システム、車両関連情報、たとえば燃料レベル、合計走行距離、ブレーキ燃料レベル、オイル・レベル、ドアの開閉、空気フィルタ情報など)を車両1700に提供してもよい。たとえば、インフォテイメントSoC1730は、ラジオ、ディスク再生装置、ナビゲーション・システム、ビデオ再生装置、USB及びBluetooth接続、カーピュータ、車内エンタテイメント、Wi-Fi、ハンドル・オーディオ制御、ハンズフリー音声制御、ヘッド・アップ・ディスプレイ(「HUD」:heads-up display)、HMIディスプレイ1734、テレマテックス・デバイス、(たとえば、様々な構成要素、特徴、及び/若しくはシステムを制御及び/若しくは相互作用するための)制御パネル、並びに/又は他の構成要素を含むことができる。少なくとも一実施例では、さらにインフォテイメントSoC1730を使用して、ADASシステム1738からの情報、車両操作計画、軌道などの自律運転情報、周囲環境情報(たとえば、交差点情報、車両情報、道路情報など)、及び/又は他の情報などの(たとえば、視覚的及び/又は聴覚的な)情報が、車両のユーザに提供されてもよい。
【0167】
少なくとも一実施例では、インフォテイメントSoC1730は、任意の量及びタイプのGPU機能を含んでもよい。少なくとも一実施例では、インフォテイメントSoC1730は、バス1702(たとえば、CANバス、イーサネット(登録商標)など)を介して、車両1700の他のデバイス、システム、及び/又は構成要素と通信してもよい。少なくとも一実施例では、インフォテイメントSoC1730は監視MCUに結合されてもよく、それにより、一次コントローラ1736(たとえば、車両1700の一次及び/又はバックアップのコンピュータ)が故障したときに、インフォテイメント・システムのGPUが、一部の自己運転機能を実行してもよい。少なくとも一実施例では、インフォテイメントSoC1730は、本明細書に記載するように、車両1700を運転手-安全停止モードにしてもよい。
【0168】
少なくとも一実施例では、車両1700はさらに、計器クラスタ1732(たとえば、デジタル・ダッシュボード、電子計器クラスタ、デジタル計器パネルなど)を含んでもよい。計器クラスタ1732は、限定することなく、コントローラ、及び/又はスーパーコンピュータ(たとえば、個別のコントローラ又はスーパーコンピュータ)を含んでもよい。少なくとも一実施例では、計器クラスタ1732は、限定することなく、スピード・メータ、燃料レベル、油圧、タコメータ、オドメータ、方向指示器、シフトレバー位置インジケータ、シート・ベルト警告灯、バーキング・ブレーキ警告灯、エンジン故障灯、補助拘束システム(たとえば、エアバッグ)情報、ライト制御、安全システム制御、ナビゲーション情報など、任意の数及び組合せの計器セットを含んでもよい。いくつかの例では、インフォテイメントSoC1730と計器クラスタ1732との間で、情報が表示及び/又は共有されてもよい。少なくとも一実施例では、計器クラスタ1732は、インフォテイメントSoC1730の一部として含まれてもよく、又はその逆であってもよい。
【0169】
1つ若しくは複数の実施例に関連する推論及び/又は訓練の動作を実行するために、推論及び/又は訓練論理1415が使用される。推論及び/又は訓練論理1415に関する詳細事項は、
図14A及び/又は
図14Bと併せて以下に提供される。少なくとも一実施例では、推論及び/又は訓練論理1415は、本明細書に記載のニューラル・ネットワークの訓練動作、ニューラル・ネットワークの機能及び/若しくはアーキテクチャ、又はニューラル・ネットワークのユース・ケースを使用して計算された重みパラメータに少なくとも部分的に基づき、推論又は予測の動作のために
図17Cのシステムにおいて使用されてもよい。
【0170】
図17Dは、少なくとも一実施例による、クラウド・ベースのサーバと
図17Aの自律車両1700との間で通信するためのシステム1776の図である。少なくとも一実施例では、システム1776は、限定することなく、サーバ1778、ネットワーク1790、並びに車両1700を含む任意の数及びタイプの車両を含んでもよい。サーバ1778は、限定することなく、複数のGPU1784(A)~1784(H)(本明細書ではまとめてGPU1784と呼ぶ)、PCIeスイッチ1782(A)~1782(D)(本明細書ではまとめてPCIeスイッチ1782と呼ぶ)、及び/又はCPU1780(A)~1780(B)(本明細書ではまとめてCPU1780と呼ぶ)を含んでもよい。GPU1784、CPU1780、及びPCIeスイッチ1782は、たとえば限定することなく、NVIDIAにより開発されたNVLinkインターフェース1788、及び/又はPCIe接続1786などの高速相互接続によって、相互接続されてもよい。少なくとも一実施例では、GPU1784同士は、NVLink及び/又はNVSスイッチSoCを介して接続され、GPU1784とPCIeスイッチ1782は、PCIe相互接続を介して接続される。少なくとも一実施例では、8個のGPU1784、2個のCPU1780、及び4個のPCIeスイッチ1782が図示してあるが、これは限定するものではない。少なくとも一実施例では、サーバ1778のそれぞれは、限定することなく、任意の数のGPU1784、CPU1780、及び/又はPCIeスイッチ1782を任意の組合せで含んでもよい。たとえば、少なくとも一実施例では、サーバ1778は、それぞれが8個、16個、32個、及び/又はそれ以上のGPU1784を含むことができる。
【0171】
少なくとも一実施例では、サーバ1778は、最近始まった道路工事などの予想外の又は変更された道路状態を示す画像を表す画像データを、ネットワーク1790を介して車両から受信してもよい。少なくとも一実施例では、サーバ1778は、ニューラル・ネットワーク1792、更新済みニューラル・ネットワーク1792、及び/又は、限定することなく交通状態及び道路状態に関する情報を含む地図情報1794を、ネットワーク1790を介して車両に送信してもよい。少なくとも一実施例では、地図情報1794の更新は、建築現場、穴、迂回路、洪水、及び/又は他の障害物に関する情報など、HDマップ1722に対する更新を、限定することなく含んでもよい。少なくとも一実施例では、ニューラル・ネットワーク1792、更新済みニューラル・ネットワーク1792、及び/又は地図情報1794は、環境内の任意の数の車両から受信したデータに表された新しい訓練及び/又は経験から得られたものであってもよく、且つ/又は、データ・センタにおいて(たとえば、サーバ1778及び/又は他のサーバを使用して)実行された訓練に少なくとも部分的に基づき、得られたものであってもよい。
【0172】
少なくとも一実施例では、サーバ1778を使用して、訓練データに少なくとも部分的に基づき、機械学習モデル(たとえば、ニューラル・ネットワーク)が訓練されてもよい。訓練データは車両によって生成されてもよく、且つ/又はシミュレーションで(たとえば、ゲーム・エンジンを使用して)生成されてもよい。少なくとも一実施例では、(たとえば、関連するニューラル・ネットワークが教師あり学習により恩恵を受ける場合には)任意の量の訓練データがタグ付けされ、且つ/又は他の前処理を受ける。少なくとも一実施例では、(たとえば、関連するニューラル・ネットワークが教師あり学習を必要としない場合には)任意の量の訓練データはタグ付け及び/又は前処理されない。少なくとも一実施例では、機械学習モデルが訓練されると、機械学習モデルは車両によって使用されてもよく(たとえば、ネットワーク1790を介して車両に送信されてもよく、且つ/又は機械学習モデルは、車両を遠隔監視するためにサーバ1778によって使用されてもよい。
【0173】
少なくとも一実施例では、サーバ1778は車両からデータを受信し、リアル・タイムの知的推論ができるように、最新のリアル・タイムのニューラル・ネットワークにデータを適用してもよい。少なくとも一実施例では、サーバ1778は、NVIDIAによって開発されたDGX及びDGXステーション・マシンなど、GPU1784によって動く深層学習スーパーコンピュータ及び/又は専用AIコンピュータを含んでもよい。しかし、少なくとも一実施例では、サーバ1778は、CPUにより動くデータ・センタを使用する深層学習インフラストラクチャを含んでもよい。
【0174】
少なくとも一実施例では、サーバ1778の深層学習インフラストラクチャは、高速のリアル・タイムの推論が可能であってもよく、その機能を使用して、車両1700のプロセッサ、ソフトウェア、及び/又は関連ハードウェアの健全性を評価及び確認してもよい。たとえば、少なくとも一実施例では、深層学習インフラストラクチャは、一連の画像、及び/又はその一連の画像において(たとえば、コンピュータ・ビジョン及び/又は他の機械学習の物体分類技法により)車両1700が位置特定した物体など、周期的な更新を車両1700から受信してもよい。少なくとも一実施例では、深層学習インフラストラクチャは、独自のニューラル・ネットワークを実行して物体を識別し、それを車両1700によって識別された物体と比較してもよく、結果が一致せず、車両1700のAIが故障していると深層学習インフラストラクチャが結論づけた場合には、サーバ1778は、車両1700のフェイル・セーフ・コンピュータに制御を掌握し、乗員に通知し、安全な停車操作を完了するよう命じる信号を車両1700に送信してもよい。
【0175】
少なくとも一実施例では、サーバ1778は、GPU1784、及び1つ又は複数のプログラム可能な推論アクセラレータ(たとえば、NVIDIAのTensorRT3)を含んでもよい。少なくとも一実施例では、GPUにより動くサーバと、推論の加速とを組み合わせることによって、リアル・タイムの応答を可能にすることができる。性能がそれほど重要ではない場合など、少なくとも一実施例では、CPU、FPGA、及び他のプロセッサにより動くサーバが、推論に使用されてもよい。少なくとも一実施例では、1つ又は複数の実施例を実行するために、ハードウェア構造体1415が使用される。ハードウェア構造体1415に関する詳細事項は、
図14A及び/又は
図14Bと併せて以下に提供される。
【0176】
コンピュータ・システム
図18は、例示的なコンピュータ・システムを示すブロック図であり、このコンピュータ・システムは、少なくとも一実施例による、命令を実行するための実行ユニットを含んでもよいプロセッサとともに形成された、相互接続されたデバイス及び構成要素、システム・オン・チップ(SoC)、又はこれらの何らかの組合せ1800を有するシステムであってもよい。少なくとも一実施例では、コンピュータ・システム1800は、本明細書に記載の実施例などにおいて本開示に従ってデータを処理するためのアルゴリズムを実行する論理を含む実行ユニットを使用するための、プロセッサ1800などの構成要素を、限定することなく含んでもよい。少なくとも一実施例では、コンピュータ・システム1800は、カリフォルニア州サンタクララのインテルコーポレーションから入手可能なPENTIUM(登録商標)プロセッサ・ファミリー、XeonTM、Itanium(登録商標)、XScaleTM及び/又はStrongARMTM、Intel(登録商標)Core(商標)、又はIntel(登録商標)Nervana(商標)マイクロプロセッサなどのプロセッサを含んでもよいが、(他のマイクロプロセッサ、エンジニアリング・ワークステーション、セット・トップ・ボックスなどを有するPCを含め)他のシステムが使用されてもよい。少なくとも一実施例では、コンピュータ・システム1800は、ワシントン州、レドモンドのマイクロソフトコーポレーションから入手可能なWINDOWS(登録商標)のオペレーティング・システムのあるバージョンを実行してもよいが、他のオペレーティング・システム(たとえば、UNIX(登録商標)及びLinux(登録商標))、組み込みソフトウェア、及び/又はグラフィカル・ユーザ・インターフェースが使用されてもよい。
【0177】
実施例は、携帯型デバイス及び組み込みアプリケーションなど、他のデバイスで使用されてもよい。携帯型デバイスのいくつかの例は、セルラー・フォン、インターネット・プロトコル・デバイス、デジタル・カメラ、パーソナル・デジタル・アシスタント(「PDA」:personal digital assistants)、及び携帯型PCを含む。少なくとも一実施例では、組み込みアプリケーションは、マイクロコントローラ、デジタル信号プロセッサ(「DSP」:digital signal processor)、システム・オン・チップ、ネットワーク・コンピュータ(「NetPC」:network computers)、セット・トップ・ボックス、ネットワーク・ハブ、広域ネットワーク(「WAN」:wide area network)スイッチ、又は少なくとも一実施例による1つ又は複数の命令を実行することができる任意の他のシステムを含んでもよい。
【0178】
少なくとも一実施例では、コンピュータ・システム1800は、限定することなくプロセッサ1802を含んでもよく、このプロセッサ1802は限定することなく、本明細書に記載の技法による機械学習モデルの訓練及び/又は推論を実行するための1つ又は複数の実行ユニット1808を含んでもよい。少なくとも一実施例では、システム18は、シングル・プロセッサのデスクトップ又はサーバ・システムであるが、別の実施例では、システム18はマルチプロセッサ・システムであってもよい。少なくとも一実施例では、プロセッサ1802は、限定することなく、複合命令セット・コンピュータ(「CISC」:complex instruction set computer)マイクロプロセッサ、縮小命令セット・コンピューティング(「RISC」)マイクロプロセッサ、超長命令語(「VLIW」)マイクロプロセッサ、命令セットの組合せを実装するプロセッサ、又は任意の他のプロセッサ・デバイス、たとえばデジタル信号プロセッサなどを含んでもよい。少なくとも一実施例では、プロセッサ1802は、プロセッサ・バス1810に結合されてもよく、このプロセッサ・バスは、プロセッサ1802とコンピュータ・システム1800内の他の構成要素との間でデジタル信号を送信してもよい。
【0179】
少なくとも一実施例では、プロセッサ1802は、限定することなく、レベル1(「L1」)の内部キャッシュ・メモリ(「キャッシュ」)1804を含んでもよい。少なくとも一実施例では、プロセッサ1802は、単一の内部キャッシュ又は複数レベルの内部キャッシュを有してもよい。少なくとも一実施例では、キャッシュ・メモリは、プロセッサ1802の外部にあってもよい。他の実施例は、特定の実装形態及び必要性に応じて、内部キャッシュと外部キャッシュの両方の組合せも含んでよい。少なくとも一実施例では、レジスタ・ファイル1806は、整数レジスタ、浮動小数点レジスタ、状態レジスタ、及び命令ポインタ・レジスタを限定することなく含む様々レジスタに、異なるタイプのデータを記憶してもよい。
【0180】
少なくとも一実施例では、整数及び浮動小数点の演算を実行するための論理を限定することなく含む実行ユニット1808も、プロセッサ1802にある。プロセッサ1802は、ある一定のマクロ命令のためのマイクロコードを記憶するマイクロコード(「uコード」)読取り専用メモリ(「ROM」:read only memory)も含んでよい。少なくとも一実施例では、実行ユニット1808は、パック命令セット1809に対処する論理を含んでもよい。少なくとも一実施例では、パック命令セット1809を、命令を実行する関連回路とともに汎用プロセッサ1802の命令セットに含めることにより、多くのマルチメディア・アプリケーションによって使用される演算を、汎用プロセッサ1802のパック・データを使用して実行することができる。1つ又は複数の実施例では、プロセッサのデータ・バスの全幅を使用してパック・データの演算を実行することによって、多くのマルチメディア・アプリケーションを加速し、より効率的に実行することができ、これにより、1度に1つのデータ要素に対して1つ又は複数の演算を実行するためにプロセッサのデータ・バス間でより小さい単位のデータを転送する必要をなくすことができる。
【0181】
少なくとも一実施例では、実行ユニット1808はまた、マイクロコントローラ、組み込みプロセッサ、グラフィックス・デバイス、DSP、及び他のタイプの論理回路において使用されてもよい。少なくとも一実施例では、コンピュータ・システム1800は、限定することなくメモリ1820を含んでもよい。少なくとも一実施例では、メモリ1820は、ダイナミック・ランダム・アクセス・メモリ(「DRAM」)デバイス、スタティック・ランダム・アクセス・メモリ(「SRAM」)デバイス、フラッシュ・メモリ・デバイス、又は他のメモリ・デバイスとして実装されてもよい。メモリ1820は、プロセッサ1802によって実行されてもよいデータ信号によって表される命令1819、及び/又はデータ1821を記憶してもよい。
【0182】
少なくとも一実施例では、システム論理チップが、プロセッサ・バス1810及びメモリ1820に結合されてもよい。少なくとも一実施例では、システム論理チップは、限定することなく、メモリ・コントローラ・ハブ(「MCH」:memory controller hub)1816を含んでもよく、プロセッサ1802は、プロセッサ・バス1810を介してMCHと通信してもよい。少なくとも一実施例では、MCH1816は、命令及びデータを記憶するため、及びグラフィックス・コマンド、データ、及びテクスチャを記憶するために、高帯域幅メモリ経路1818をメモリ1820に提供してもよい。少なくとも一実施例では、MCH1816は、プロセッサ1802と、メモリ1820と、コンピュータ・システム1800の他の構成要素との間でデータ信号を導き、プロセッサ・バス1810と、メモリ1820と、システムI/O1822との間でデータ信号をブリッジしてもよい。少なくとも一実施例では、システム論理チップは、グラフィックス・コントローラに結合するためのグラフィックス・ポートを提供してもよい。少なくとも一実施例では、MCH1816は、高帯域幅メモリ経路1818を介してメモリ1820に結合されてもよく、グラフィックス/ビデオカード1812は、アクセラレーテッド・グラフィックス・ポート(「AGP」:Accelerated Graphics Port)相互接続1814を介してMCH1816に結合されてもよい。
【0183】
少なくとも一実施例では、コンピュータ・システム1800は、MCH1816をI/Oコントローラ・ハブ(「ICH」:I/O controller hub)1830に結合するためのプロプライエタリ・ハブ・インターフェース・バスであるシステムI/O1822を使用してもよい。少なくとも一実施例では、ICH1830は、ローカルのI/Oバスを介していくつかのI/Oデバイスに直接接続を提供してもよい。少なくとも一実施例では、ローカルI/Oバスは、周辺装置をメモリ1820、チップセット、及びプロセッサ1802に接続するための高速I/Oバスを、限定することなく含んでもよい。例としては、オーディオ・コントローラ1829、ファームウェア・ハブ(「フラッシュBIOS」)1828、ワイヤレス・トランシーバ1826、データ・ストレージ1824、ユーザ入力及びキーボードのインターフェースを含むレガシーI/Oコントローラ1823、ユニバーサル・シリアル・バス(「USB」:Universal Serial Bus)などのシリアル拡張ポート1827、及びネットワーク・コントローラ1834が、限定することなく含まれてもよい。データ・ストレージ1824は、ハード・ディスク・ドライブ、フロッピー(登録商標)・ディスク・ドライブ、CD-ROMデバイス、フラッシュ・メモリ・デバイス、又は他の大容量ストレージ・デバイスを備えてもよい。
【0184】
少なくとも一実施例では、
図18は、相互接続されたハードウェア・デバイス又は「チップ」を含むシステムを示すが、一方他の実施例では、
図18は例示的なシステム・オン・チップ(「SoC」)を示してもよい。少なくとも一実施例では、図ccで示すデバイスは、プロプライエタリ相互接続、標準相互接続(たとえば、PCIe)、又はこれらの何らかの組合せで相互接続されてもよい。少なくとも一実施例では、コンピュータ・システム1800の1つ又は複数の構成要素は、コンピュート・エクスプレス・リンク(CXL:compute express link)相互接続を使用して相互接続されてもよい。
【0185】
1つ若しくは複数の実施例に関連する推論及び/又は訓練の動作を実行するために、推論及び/又は訓練論理1415が使用される。推論及び/又は訓練論理1415に関する詳細事項は、
図14A及び/又は
図14Bと併せて以下に提供される。少なくとも一実施例では、推論及び/又は訓練論理1415は、本明細書に記載のニューラル・ネットワークの訓練動作、ニューラル・ネットワークの機能及び/若しくはアーキテクチャ、又はニューラル・ネットワークのユース・ケースを使用して計算された重みパラメータに少なくとも部分的に基づき、推論又は予測の動作のために
図18のシステムにおいて使用されてもよい。
【0186】
一実施例では、電子デバイス1900は、自動ピッキング・システム又は自動フォークリフトの動作を制御するロボット制御システムであってもよい。一実施例では、電子デバイス1900は、ロボットのグリッパ、爪、又は手を作動させる1つ又は複数のサーボ・モータ・コントローラを含んでもよい。
【0187】
図19は、少なくとも一実施例による、プロセッサ1910を利用するための電子デバイス1900を示すブロック図である。少なくとも一実施例では、電子デバイス1900は、たとえば限定することなく、ノートブック、タワー・サーバ、ラック・サーバ、ブレード・サーバ、ラップトップ、デスクトップ、タブレット、モバイル・デバイス、電話、組み込みコンピュータ、又は任意の他の好適な電子デバイスであってもよい。
【0188】
少なくとも一実施例では、システム1900は、任意の好適な数又は種類の構成要素、周辺装置、モジュール、若しくはデバイスに通信可能に結合されたプロセッサ1910を、限定することなく含んでもよい。少なくとも一実施例では、I
2Cバス、システム・マネージメント・バス(「SMBus」:System Management Bus)、ロー・ピン・カウント(LPC:Low Pin Count)バス、シリアル・ペリフェラル・インターフェース(「SPI」:Serial Peripheral Interface)、ハイ・デフィニション・オーディオ(「HDA」:High Definition Audio)バス、シリアル・アドバンス・テクノロジー・アタッチメント(「SATA」:Serial Advance Technology Attachment)バス、ユニバーサル・シリアル・バス(「USB」)(バージョン1、2、3)、又はユニバーサル非同期レシーバ/トランスミッタ(「UART」:Universal Asynchronous Receiver/Transmitter)バスなどのバス若しくはインターフェースを使用して結合されるプロセッサ1910。少なくとも一実施例では、
図19は、相互接続されたハードウェア・デバイス又は「チップ」を含むシステムを示すが、一方他の実施例では、
図19は例示的なシステム・オン・チップ(「SoC」)を示してもよい。少なくとも一実施例では、
図19に示すデバイスは、プロプライエタリ相互接続、標準相互接続(たとえば、PCIe)、又はこれらの何らかの組合せで相互接続されてもよい。少なくとも一実施例では、
図19の1つ又は複数の構成要素は、コンピュート・エクスプレス・リンク(CXL)相互接続を使用して相互接続されてもよい。
【0189】
少なくとも一実施例では、
図19は、ディスプレイ1924、タッチ画面1925、タッチ・パッド1930、近距離無線通信ユニット(「NFC」:Near Field Communications unit)1945、センサ・ハブ1940、熱センサ1946、エクスプレス・チップセット(「EC」:Express Chipset)1935、トラステッド・プラットフォーム・モジュール(「TPM」:Trusted Platform Module)1938、BIOS/ファームウェア/フラッシュ・メモリ(「BIOS、FWフラッシュ」:BIOS/firmware/flash memory)1922、DSP1960、ソリッド・ステート・ディスク(「SSD」:Solid State Disk)若しくはハード・ディスク・ドライブ(「HDD」:Hard Disk Drive)などのドライブ1920、ワイヤレス・ローカル・エリア・ネットワーク・ユニット(「WLAN」:wireless local area network unit)1950、Bluetoothユニット1952、ワイヤレス広域ネットワーク・ユニット(「WWAN」:Wireless Wide Area Network unit)1956、全地球測位システム(GPS:Global Positioning System)1955、USB3.0カメラなどのカメラ(「USB3.0カメラ」)1954、又は、たとえばLPDDR3規格に実装された低電力ダブル・データ・レート(「LPDDR」:Low Power Double Data Rate)メモリ・ユニット(「LPDDR3」)1915を含んでもよい。これらの構成要素は、それぞれ任意の好適なやり方で実装されてもよい。
【0190】
少なくとも一実施例では、上述した構成要素を介して、他の構成要素がプロセッサ1910に通信可能に結合されてもよい。少なくとも一実施例では、加速度計1941、周囲光センサ(「ALS」:Ambient Light Sensor)1942、コンパス1943、及びジャイロスコープ1944が、センサ・ハブ1940に通信可能に結合されてもよい。少なくとも一実施例では、熱センサ1939、ファン1937、キーボード1946、及びタッチ・パッド1930が、EC1935に通信可能に結合されてもよい。少なくとも一実施例では、スピーカ1963、ヘッドフォン1964、及びマイクロフォン(「mic」)1965が、オーディオ・ユニット(オーディオ・コーデック及びクラスdアンプ)1962に通信可能に結合されてもよく、このオーディオ・ユニットが、DSP1960に通信可能に結合されてもよい。少なくとも一実施例では、オーディオ・ユニット1964は、たとえば限定することなく、オーディオ・コーダ/デコーダ(「コーデック」)及びクラスDアンプリファイアを含んでもよい。少なくとも一実施例では、SIMカード(「SIM」)1957は、WWANユニット1956に通信可能に結合されてもよい。少なくとも一実施例では、WLANユニット1950及びBluetoothユニット1952などの構成要素、並びにWWAN1956は、次世代フォーム・ファクタ(「NGFF」:Next Generation Form Factor)に実装されてもよい。
【0191】
1つ若しくは複数の実施例に関連する推論及び/又は訓練の動作を実行するために、推論及び/又は訓練論理1415が使用される。推論及び/又は訓練論理1415に関する詳細事項は、
図14A及び/又は
図14Bと併せて以下に提供される。少なくとも一実施例では、推論及び/又は訓練論理1415は、本明細書に記載のニューラル・ネットワークの訓練動作、ニューラル・ネットワークの機能及び/若しくはアーキテクチャ、又はニューラル・ネットワークのユース・ケースを使用して計算された重みパラメータに少なくとも部分的に基づき、推論又は予測の動作のために
図19のシステムにおいて使用されてもよい。
【0192】
図20は、少なくとも一実施例による、コンピュータ・システム2000を示す。少なくとも一実施例では、コンピュータ・システム2000は、本開示全体を通して説明する様々なプロセス及び方法を実装するように構成される。
【0193】
少なくとも一実施例では、コンピュータ・システム2000は、限定することなく、少なくとも1つの中央処理装置(「CPU」)2002を含み、この処理装置は、PCI:Peripheral Component Interconnect(「ペリフェラル・コンポーネント・インターコネクト」)、ペリフェラル・コンポーネント・インターコネクト・エクスプレス(「PCI-Express」:peripheral component interconnect express)、AGP:Accelerated Graphics Port(「アクセラレーテッド・グラフィックス・ポート」)、ハイパートランスポート、又は任意の他のバス若しくはポイントツーポイントの通信プロトコルなど、任意の好適なプロトコルを使用して実装された通信バス2010に接続される。少なくとも一実施例では、コンピュータ・システム2000は、メイン・メモリ2004、及び(たとえば、ハードウェア、ソフトウェア、又はこれらの組合せとして実装される)制御論理を限定することなく含み、データは、ランダム・アクセス・メモリ(「RAM」:random access memory)の形をとってもよいメイン・メモリ2004に記憶される。少なくとも一実施例では、ネットワーク・インターフェース・サブシステム(「ネットワーク・インターフェース」)2022は、他のシステムからデータを受信し、コンピュータ・システム2000から他のシステムにデータを送信するための他のコンピューティング・デバイス及びネットワークとのインターフェースを提供する。
【0194】
少なくとも一実施例では、コンピュータ・システム2000は、限定することなく、入力デバイス2008、パラレル処理システム2012、及びディスプレイ・デバイス2006を含み、このディスプレイ・デバイスは、従来の陰極線管(「CRT」:cathode ray tube)、液晶ディスプレイ(「LCD」:liquid crystal display)、発光ダイオード(「LED」:light emitting diode)、プラズマ・ディスプレイ、又は他の好適なディスプレイ技術を使用して実装することができる。少なくとも一実施例では、ユーザ入力は、キーボード、マウス、タッチ・パッド、マイクロフォンなどの入力デバイス2008から受け取る。少なくとも一実施例では、上記モジュールのそれぞれを単一の半導体プラットフォームに置いて、処理システムを形成することができる。
【0195】
1つ若しくは複数の実施例に関連する推論及び/又は訓練の動作を実行するために、推論及び/又は訓練論理1415が使用される。推論及び/又は訓練論理1415に関する詳細事項は、
図14A及び/又は
図14Bと併せて以下に提供される。少なくとも一実施例では、訓練論理1415は、本明細書に記載のニューラル・ネットワークの訓練動作、ニューラル・ネットワークの機能及び/若しくはアーキテクチャ、又はニューラル・ネットワークのユース・ケースを使用して計算された重みパラメータに少なくとも部分的に基づき、推論又は予測の動作のために
図20のシステムにおいて使用されてもよい。
【0196】
図21は、少なくとも一実施例によるコンピュータ・システム2100を示す。少なくとも一実施例では、コンピュータ・システム2100は、限定することなく、コンピュータ2110及びUSBスティック2120を含んでもよい。少なくとも一実施例では、コンピュータ・システム2110は、限定することなく、任意の数及びタイプのプロセッサ(図示せず)、並びにメモリを含んでもよい。少なくとも一実施例では、コンピュータ2110は、限定することなく、サーバ、クラウド・インスタンス、ラップトップ、及びデスクトップ・コンピュータを含む。
【0197】
少なくとも一実施例では、USBスティック2120は、限定することなく、処理ユニット2130、USBインターフェース2140、及びUSBインターフェース論理2150を含む。少なくとも一実施例では、処理ユニット2130は、命令を実行することができる任意の命令実行システム、装置、又はデバイスであってもよい。少なくとも一実施例では、処理ユニット2130は、限定することなく、任意の数及びタイプの処理コア(図示せず)を含んでもよい。少なくとも一実施例では、処理コア2130は、機械学習に関連する任意の量及びタイプの演算を実行するように最適化された特定用途向け集積回路(「ASIC」)を備える。たとえば、少なくとも一実施例では、処理コア2130は、機械学習の推論演算を実行するように最適化されたテンソル処理ユニット(「TPC」:tensor processing unit)である。少なくとも一実施例では、処理コア2130は、機械視覚及び機械学習の推論演算を実行するように最適化された視覚処理ユニット(「VPU」)である。
【0198】
少なくとも一実施例では、USBインターフェース2140は、任意のタイプのUSBコネクタ又はUSBソケットであってもよい。たとえば、少なくとも一実施例では、USBインターフェース2140は、データ及び電源用のUSB3.0 Type-Cのソケットである。少なくとも一実施例では、USBインターフェース2140は、USB3.0 Type-Aのコネクタである。少なくとも一実施例では、USBインターフェース論理2150は、処理ユニット2130がUSBコネクタ2140を介してデバイス(たとえばコンピュータ2110)と又はインターフェースをとることを可能にする任意の量及びタイプの論理を含んでもよい。
【0199】
1つ若しくは複数の実施例に関連する推論及び/又は訓練の動作を実行するために、推論及び/又は訓練論理1415が使用される。推論及び/又は訓練論理1415に関する詳細事項は、
図14A及び/又は
図14Bと併せて以下に提供される。少なくとも一実施例では、推論及び/又は訓練論理1415は、本明細書に記載のニューラル・ネットワークの訓練動作、ニューラル・ネットワークの機能及び/若しくはアーキテクチャ、又はニューラル・ネットワークのユース・ケースを使用して計算された重みパラメータに少なくとも部分的に基づき、推論又は予測の動作のために
図21のシステムにおいて使用されてもよい。
【0200】
図22は、本明細書に記載の様々な実施例による、1つ又は複数のIPコアを使用して作製することができる例示的な集積回路及び関連グラフィックス・プロセッサを示す。図示してあるものに加えて、少なくとも一実施例では、追加のグラフィックス・プロセッサ/コア、周辺装置インターフェース・コントローラ、若しくは汎用プロセッサ・コアを含む他の論理及び回路が含まれてもよい。
【0201】
図22は、少なくとも一実施例による1つ又は複数のIPコアを使用して作製することができる例示的なシステム・オン・チップ集積回路2200を示すブロック図である。少なくとも一実施例では、集積回路2200は、1つ又は複数のアプリケーション・プロセッサ2205(たとえば、CPU)、少なくとも1つのグラフィックス・プロセッサ2210を含み、さらに、画像プロセッサ2215及び/又はビデオ・プロセッサ2220を含んでもよく、これらのいずれもが、モジュール式IPコアであってもよい。少なくとも一実施例では、集積回路2200は、USBコントローラ2225、UARTコントローラ2230、SPI/SDIOコントローラ2235、及びI.sup.2S/I.sup.2Cコントローラ2240を含む周辺装置又はバス論理を含む。少なくとも一実施例では、集積回路2200は、ハイ・デフィニション・マルチメディア・インターフェース(HDMI(登録商標):high-definition multimedia interface(登録商標))コントローラ2250及びモバイル・インダストリ・プロセッサ・インターフェース(MIPI)ディスプレイ・インターフェース2255のうちの1つ又は複数に結合されるディスプレイ・デバイス2245を含むことができる。少なくとも一実施例では、フラッシュ・メモリ及びフラッシュ・メモリ・コントローラを含むフラッシュ・メモリ・サブシステム2260によって、ストレージが提供されてもよい。少なくとも一実施例では、SDRAM又はSRAMメモリ・デバイスにアクセスするために、メモリ・コントローラ2265を介してメモリ・インターフェースが提供されてもよい。少なくとも一実施例では、いくつかの集積回路はさらに、組み込みセキュリティ・エンジン2270を含む。
【0202】
1つ若しくは複数の実施例に関連する推論及び/又は訓練の動作を実行するために、推論及び/又は訓練論理1415が使用される。推論及び/又は訓練論理1415に関する詳細事項は、
図14A及び/又は
図14Bと併せて以下に提供される。少なくとも一実施例では、推論及び/又は訓練論理1415は、本明細書に記載のニューラル・ネットワークの訓練動作、ニューラル・ネットワークの機能及び/若しくはアーキテクチャ、又はニューラル・ネットワークのユース・ケースを使用して計算された重みパラメータに少なくとも部分的に基づき、推論又は予測の動作のために集積回路2200において使用されてもよい。
【0203】
図23A~
図23Bは、本明細書に記載の様々実施例による、1つ又は複数のIPコアを使用して作製することができる例示的な集積回路及び関連グラフィックス・プロセッサを示す。図示してあるものに加えて、少なくとも一実施例では、追加のグラフィックス・プロセッサ/コア、周辺装置インターフェース・コントローラ、又は汎用プロセッサ・コアを含む他の論理及び回路が含まれてもよい。
【0204】
図23A~
図23Bは、本明細書に記載の実施例によるSoC内で使用するための例示的なグラフィックス・プロセッサを示すブロック図である。
図23Aは、少なくとも一実施例による1つ又は複数のIPコアを使用して作製することができるシステム・オン・チップ集積回路の例示的なグラフィックス・プロセッサ2310を示す。
図23Bは、少なくとも一実施例による1つ又は複数のIPコアを使用して作製することができるシステム・オン・チップ集積回路のさらなる例示的なグラフィックス・プロセッサ2340を示す。少なくとも一実施例では、
図23Aのグラフィックス・プロセッサ2310は、低電力グラフィックス・プロセッサ・コアである。少なくとも一実施例では、
図23Bのグラフィックス・プロセッサ2340は、高性能グラフィックス・プロセッサ・コアである。少なくとも一実施例では、グラフィックス・プロセッサ2310、2340のそれぞれは、
図22のグラフィックス・プロセッサ2210の変形形態とすることができる。
【0205】
少なくとも一実施例では、グラフィックス・プロセッサ2310は、頂点プロセッサ2305と、1つ又は複数のフラグメント・プロセッサ2315A~2315N(たとえば、2315A、2315B、2315C、2315D~2315N-1、及び2315N)とを含む。少なくとも一実施例では、グラフィックス・プロセッサ2310は、別個の論理を介して異なるシェーダ・プログラムを実行することができ、それにより、頂点プロセッサ2305は、頂点シェーダ・プログラムのための動作を実行するように最適化され、一方、1つ又は複数のフラグメント・プロセッサ2315A~2315Nは、フラグメント又はピクセルのシェーダ・プログラムのためのフラグメント(たとえば、ピクセル)シェーディング動作を実行する。少なくとも一実施例では、頂点プロセッサ2305は、3Dグラフィックス・パイプラインの頂点処理ステージを実行し、プリミティブ及び頂点データを生成する。少なくとも一実施例では、フラグメント・プロセッサ2315A~2315Nは、頂点プロセッサ2305によって生成されたプリミティブ及び頂点データを使用して、ディスプレイ・デバイスに表示されるフレーム・バッファを生成する。少なくとも一実施例では、フラグメント・プロセッサ2315A~2315Nは、OpenGLのAPIにおいて提供されるフラグメント・シェーダ・プログラムを実行するように最適化され、OpenGLのAPIは、Direct 3D APIにおいて提供されるピクセル・シェーダ・プログラムと同様の動作を実行するために使用されてもよい。
【0206】
少なくとも一実施例では、グラフィックス・プロセッサ2310はさらに、1つ又は複数のメモリ管理ユニット(MMU)2320A~2320B、キャッシュ2325A~2325B、及び回路相互接続2330A~2330Bを含む。少なくとも一実施例では、1つ又は複数のMMU2320A~2320Bは、頂点プロセッサ2305及び/又はフラグメント・プロセッサ2315A~2315Nを含め、グラフィックス・プロセッサ2310のための仮想から物理のアドレス・マッピングを提供し、それらは、1つ又は複数のキャッシュ2325A~2325Bに記憶された頂点又は画像/テクスチャのデータに加えて、メモリに記憶された頂点又は画像/テキストのデータを参照してもよい。少なくとも一実施例では、1つ又は複数のMMU2320A~2320Bは、
図25の1つ若しくは複数のアプリケーション・プロセッサ2205、画像プロセッサ2215、及び/又はビデオ・プロセッサ2220に関連付けられた1つ若しくは複数のMMUを含む、システム内の他のMMUと同期されてもよく、それにより各プロセッサ2205~2220は、共有の又は統合された仮想メモリ・システムに参加することができる。少なくとも一実施例では、1つ又は複数の回路相互接続2330A~2330Bは、グラフィックス・プロセッサ2310が、SoCの内部バスを介して、又は直接接続を介して、SoC内の他のIPコアとインターフェースをとることができるようにする。
【0207】
少なくとも一実施例では、グラフィックス・プロセッサ2340は、
図23Aのグラフィックス・プロセッサ2310の1つ又は複数のMMU2320A~2320B、キャッシュ2325A~2325B、及び回路相互接続2330A~2330Bを含む。少なくとも一実施例では、グラフィックス・プロセッサ2340は、1つ又は複数のシェーダ・コア2355A~2355N(たとえば、2355A、2355B、2355C、2355D、2355E、2355F~2355N-1、及び2355N)を含み、このシェーダ・コアは、単一のコア、又はタイプ、又はコアが、頂点シェーダ、フラグメント・シェーダ、及び/又はコンピュート・シェーダを実装するためのシェーダ・プログラム・コードを含むすべてのタイプのプログラム可能なシェーダ・コードを実行することができる統合されたシェーダ・コア・アーキテクチャを提供する。少なくとも一実施例では、シェーダ・コアの数は変えることができる。少なくとも一実施例では、グラフィックス・プロセッサ2340は、1つ又は複数のシェーダ・コア2355A~2355Nに実行スレッドをディスパッチするためのスレッド・ディスパッチャとして作用するコア間タスク・マネージャ2345と、たとえばシーン内のローカル空間コヒーレンスを利用するため、又は内部キャッシュの使用を最適化するために、シーンのレンダリング動作が画像空間において細分化される、タイル・ベースのレンダリングのためのタイリング動作を加速するためのタイリング・ユニット2358とを含む。
【0208】
1つ若しくは複数の実施例に関連する推論及び/又は訓練の動作を実行するために、推論及び/又は訓練論理1415が使用される。推論及び/又は訓練論理1415に関する詳細事項は、
図14A及び/又は
図14Bと併せて以下に提供される。少なくとも一実施例では、推論及び/又は訓練論理1415は、本明細書に記載のニューラル・ネットワークの訓練動作、ニューラル・ネットワークの機能及び/若しくはアーキテクチャ、又はニューラル・ネットワークのユース・ケースを使用して計算された重みパラメータに少なくとも部分的に基づき、推論又は予測の動作のために集積回路23A及び/又は23Bにおいて使用されてもよい。
【0209】
図24A~
図24Bは、本明細書に記載の実施例による、さらなる例示的なグラフィックス・プロセッサ論理を示す。
図24Aは、少なくとも一実施例では
図22のグラフィックス・プロセッサ2210に含めることができるグラフィックス・コア2400を示し、少なくとも一実施例では
図23Bのように、統合されたシェーダ・コア2355A~2355Nであってもよい。
図24Bは、少なくとも一実施例におけるマルチ・チップ・モジュールに導入するのに適した高並列の汎用グラフィックス・プロセッシング・ユニット2430を示す。
【0210】
一実施例では、グラフィックス・コア2400は、共有命令キャッシュ2402、テクスチャ・ユニット2418、及びキャッシュ/共有メモリ2420を含み、これらは、グラフィックス・コア2400内の実行リソースに共通である。少なくとも一実施例では、グラフィックス・コア2400は、コアごとに複数のスライス2401A~2401N、又はパーティションを含むことができ、グラフィックス・プロセッサは、グラフィックス・コア2400の複数のインスタンスを含むことができる。スライス2401A~2401Nは、論理命令キャッシュ2404A~2404N、スレッド・スケジューラ2406A~2406N、スレッド・ディスパッチャ2408A~2408N、及びレジスタのセット2410A~2410Nを含むサポート論理を含むことができる。一実施例では、スライス2401A~2401Nは、追加機能ユニット(AFU:additional function unit2412A~2412N)、浮動小数点ユニット(FPU:floating-point unit2414A~2414N)、整数算術論理演算ユニット(ALU2416~2416N)、アドレス計算ユニット(ACL2413A~2413N)、倍精度浮動小数点ユニット(DPFPU:double-precision floating-point unit2415A~2415N)、及び行列処理ユニット(MPU2417A~2417N)のセットを含むことができる。
【0211】
一実施例では、FPU2414A~2414Nは、単精度(32ビット)及び半精度(16ビット)の浮動小数点演算を実行することができ、DPFPU2415A~2415Nは、倍精度(64ビット)の浮動小数点演算を実行する。一実施例では、ALU2416A~2416Nは、8ビット、16ビット、及び32ビットの精度で可変精度の整数演算を実行することができ、混合精度の演算ができるように構成されることが可能である。一実施例では、MPU2417A~2417Nも、半精度浮動小数点及び8ビット整数演算を含む混合精度の行列演算ができるように構成されることが可能である。一実施例では、MPU2417A~2417Nは、汎用行列-行列乗算(GEMM:general matrix to matrix multiplication)の加速をサポートできるようにすることを含め、機械学習アプリケーション・フレームワークを加速するための様々な行列演算を実行することができる。一実施例では、AFU2412A~2412Nは、三角関数演算(たとえば、サイン、コサインなど)を含む、浮動小数点又は整数の単位にサポートされていない追加の論理演算を実行することができる。
【0212】
1つ若しくは複数の実施例に関連する推論及び/又は訓練の動作を実行するために、推論及び/又は訓練論理1415が使用される。推論及び/又は訓練論理1415に関する詳細事項は、
図14A及び/又は
図14Bと併せて以下に提供される。少なくとも一実施例では、推論及び/又は訓練論理1415は、本明細書に記載のニューラル・ネットワークの訓練動作、ニューラル・ネットワークの機能及び/若しくはアーキテクチャ、又はニューラル・ネットワークのユース・ケースを使用して計算された重みパラメータに少なくとも部分的に基づき、推論又は予測の動作のためにグラフィックス・コア2400において使用されてもよい。
【0213】
図24Bは、汎用処理ユニット(GPGPU:general-purpose processing unit2430)を示し、この処理ユニットは、少なくとも一実施例において、グラフィックス・プロセッシング・ユニットのアレイによる高並列のコンピュート動作を実行可能にするように構成されることが可能である。少なくとも一実施例では、GPGPU2430は、GPGPU2430の他のインスタンスに直接リンクされて、ディープ・ニューラル・ネットワークの訓練スピードを向上させるために複数のGPUクラスタを生成することができる。少なくとも一実施例では、GPGPU2430は、ホスト・プロセッサとの接続を可能にするためのホスト・インターフェース2432を含む。少なくとも一実施例では、ホスト・インターフェース2432は、PCI Expressインターフェースである。少なくとも一実施例では、ホスト・インターフェース2432は、2432は、ベンダー固有の通信インターフェース又は通信ファブリックとすることができる。少なくとも一実施例では、GPGPU2430は、ホスト・プロセッサからコマンドを受け取り、グローバル・スケジューラ2434を使用して、これらのコマンドに関連付けられた実行スレッドを、コンピュート・クラスタ2436A~2436Hのセットに分配する。少なくとも一実施例では、コンピュート・クラスタ2436A~2436Hは、キャッシュ・メモリ2438を共有する。少なくとも一実施例では、キャッシュ・メモリ2438は、コンピュート・クラスタ2436A~2436H内のキャッシュ・メモリ用の高レベル・キャッシュとして作用することができる。
【0214】
少なくとも一実施例では、GPGPU2430は、メモリ・コントローラ2442A~2442Bのセットを介して、コンピュート・クラスタ2436A~2436Hに結合されたメモリ2444A~2444Bを含む。少なくとも一実施例では、メモリ2444A~2444Bは、グラフィックス・ダブル・データ・レート(GDDR: graphics double data rate)メモリを含む同期グラフィックス・ランダム・アクセス・メモリ(SGRAM)など、ダイナミック・ランダム・アクセス・メモリ(DRAM)又はグラフィックス・ランダム・アクセス・メモリを含む、様々なタイプのメモリ・デバイスを含むことができる。
【0215】
少なくとも一実施例では、コンピュート・クラスタ2436A~2436Hはそれぞれ、
図24Aのグラフィックス・コア2400などのグラフィックス・コアのセットを含み、このグラフィックス・コアのセットは、機械学習計算に適したものを含め、様々な精度で計算動作を実行することができる複数のタイプの整数及び浮動小数点の論理ユニットを含むことができる。たとえば、少なくとも一実施例では、コンピュート・クラスタ2436A~2436Hのそれぞれにおける浮動小数点ユニットの少なくともサブセットは、16ビット又は32ビットの浮動小数点演算を実行するように構成されることが可能であり、一方、浮動小数点ユニットの別のサブセットは、64ビットの浮動小数点演算を実行するように構成されることが可能である。
【0216】
少なくとも一実施例では、GPGPU2430の複数のインスタンスは、コンピュート・クラスタとして動作するように構成されることが可能である。少なくとも一実施例では、コンピュート・クラスタ2436A~2436Hにより同期及びデータ交換のために使用される通信は、実施例にわたって異なる。少なくとも一実施例では、GPGPU2430の複数のインスタンスは、ホスト・インターフェース2432を介して通信する。少なくとも一実施例では、GPGPU2430は、I/Oハブ2439を含み、このハブは、GPGPU2430の他のインスタンスへの直接接続を可能にするGPUリンク2440に、GPGPU2430を結合する。少なくとも一実施例では、GPUリンク2440は、GPGPU2430の複数のインスタンス間での通信及び同期を可能にするGPUからGPUへの専用のブリッジに結合される。少なくとも一実施例では、GPUリンク2440は、他のGPGPU又は並列プロセッサにデータを送受信するための高速相互接続に結合される。少なくとも一実施例では、GPGPU2430の複数のインスタンスは、別々のデータ処理システムに位置付けられ、ホスト・インターフェース2432を介してアクセス可能なネットワーク・デバイスを介して通信する。少なくとも一実施例では、GPUリンク2440は、ホスト・インターフェース2432に加えて、又はその代わりに、ホスト・プロセッサへの接続を可能にするように構成することができる。
【0217】
少なくとも一実施例では、GPGPU2430は、ニューラル・ネットワークを訓練するように構成されることが可能である。少なくとも一実施例では、GPGPU2430は、推論プラットフォーム内で使用することができる。GPGPU2430が推論のために使用される少なくとも一実施例では、GPGPUは、GPGPUがニューラル・ネットワークの訓練に使用されるときよりも少数のコンピュート・クラスタ2436A~2436Hを含んでもよい。少なくとも一実施例では、メモリ2444A~2444Bに関連するメモリ技術は、推論の構成と訓練の構成とで異なってもよく、高帯域幅のメモリ技術が、訓練構成に当てられる。少なくとも一実施例では、GPGPU2430の推論構成は、推論固有の命令をサポートすることができる。たとえば、少なくとも一実施例では、推論構成は、1つ又は複数の8ビットの整数のドット積命令をサポートすることができ、これは、導入済みニューラル・ネットワークの推論動作中に使用されてもよい。
【0218】
1つ若しくは複数の実施例に関連する推論及び/又は訓練の動作を実行するために、推論及び/又は訓練論理1415が使用される。推論及び/又は訓練論理1415に関する詳細事項は、
図14A及び/又は
図14Bと併せて以下に提供される。少なくとも一実施例では、推論及び/又は訓練論理1415は、本明細書に記載のニューラル・ネットワークの訓練動作、ニューラル・ネットワークの機能及び/若しくはアーキテクチャ、又はニューラル・ネットワークのユース・ケースを使用して計算された重みパラメータに少なくとも部分的に基づき、推論又は予測の動作のためにGPGPU2430おいて使用されてもよい。
【0219】
図25は、少なくとも一実施例によるコンピューティング・システム2500を示すブロック図である。少なくとも一実施例では、コンピューティング・システム2500は、メモリ・ハブ2505を含んでもよい相互接続経路を介して通信する1つ又は複数のプロセッサ2502とシステム・メモリ2504とを有する処理サブシステム2501を含む。少なくとも一実施例では、メモリ・ハブ2505は、チップセット構成要素内の別個の構成要素であってもよく、又は1つ若しくは複数のプロセッサ2502内に一体化されていてもよい。少なくとも一実施例では、メモリ・ハブ2505は、通信リンク2506を介してI/Oサブシステム2511に結合される。少なくとも一実施例では、I/Oサブシステム2511は、コンピューティング・システム2500が1つ又は複数の入力デバイス2508からの入力を受け取れるようにすることができるI/Oハブ2507を含む。少なくとも一実施例では、I/Oハブ2507は、ディスプレイ・コントローラを有効にすることができ、このディスプレイ・コントローラは、1つ又は複数のプロセッサ2502に含まれて、1つ又は複数のディスプレイ・デバイス2510Aに出力を提供してもよい。少なくとも一実施例では、I/Oハブ2507に結合された1つ又は複数のディスプレイ・デバイス2510Aは、ローカルの、内部の、又は組み込まれたディスプレイ・デバイスを含むことができる。
【0220】
少なくとも一実施例では、処理サブシステム2501は、バス又は他の通信リンク2513を介してメモリ・ハブ2505に結合された1つ又は複数の並列プロセッサ2512を含む。少なくとも一実施例では、通信リンク2513は、PCIエクスプレスなどであるがこれに限定されない任意の数の規格に基づく通信リンク技術若しくはプロトコルのうちの1つであってもよく、又はベンダー固有の通信インターフェース若しくは通信ファブリックであってもよい。少なくとも一実施例では、1つ又は複数の並列プロセッサ2512は、メニー・インテグレーテッド・コア(MIC:many integrated core)プロセッサなど、多数の処理コア及び/又は処理クラスタを含むことのできる、計算に集中した並列又はベクトルの処理システムを形成する。少なくとも一実施例では、1つ又は複数の並列プロセッサ2512は、グラフィックス処理サブシステムを形成し、このサブシステムは、I/Oハブ2507を介して結合された1つ又は複数のディスプレイ・デバイス2510Aに、ピクセルを出力することができる。で少なくとも一実施例では、1つ又は複数の並列プロセッサ2512はまた、1つ又は複数のディスプレイ・デバイス2510Bへの直接接続を可能にするディスプレイ・コントローラ及びディスプレイ・インターフェース(図示せず)を含むことができる。
【0221】
少なくとも一実施例では、システム・ストレージ・ユニット2514は、I/Oハブ2507に接続されて、コンピューティング・システム2500のためのストレージ機構を提供することができる。少なくとも一実施例では、I/Oスイッチ2516を使用して、I/Oハブ2507と、プラットフォームに一体化されてもよいネットワーク・アダプタ2518及び/又はワイヤレス・ネットワーク・アダプタ2519などの他の構成要素、並びに1つ又は複数のアドイン・デバイス2520を介して加えることができる様々な他のデバイスとの通信を可能にするためのインターフェース機構を提供することができる。少なくとも一実施例では、ネットワーク・アダプタ2518は、イーサネット(登録商標)・アダプタ、又は別の有線ネットワーク・アダプタとすることができる。少なくとも一実施例では、ワイヤレス・ネットワーク・アダプタ2519は、Wi-Fi、Bluetooth、近距離無線通信(NFC)、又は1つ若しくは複数のワイヤレス無線を含む他のネットワーク・デバイスのうちの1つ又は複数を含むことができる。
【0222】
少なくとも一実施例では、コンピューティング・システム2500は、USB又は他のポート接続、光学ストレージ・ドライブ、ビデオ捕捉デバイスなどを含む明示されていない他の構成要素を含むことができ、これらもI/Oハブ2507に接続されてもよい。少なくとも一実施例では、
図25の様々な構成要素を相互接続する通信経路が、PCI(ペリフェラル・コンポーネント・インターコネクト)ベースのプロトコル(たとえば、PCI-エクスプレス)などの任意の好適なプロトコル、又はNV-Link高速相互接続などの他のバス若しくはポイントツーポイント通信インターフェース、又は他の相互接続プロトコルを使用して、実装されてもよい。
【0223】
少なくとも一実施例では、1つ又は複数の並列プロセッサ2512は、たとえばビデオ出力回路を含むグラフィックス及びビデオの処理に最適化された回路を組み込んでおり、グラフィックス・プロセッシング・ユニット(GPU)を構成する。少なくとも一実施例では、1つ又は複数の並列プロセッサ2512は、汎用処理に最適化された回路を組み込んでいる。少なくとも一実施例では、コンピューティング・システム2500の構成要素は、単一の集積回路上の1つ又は複数の他のシステム要素と一体化されてもよい。たとえば、少なくとも一実施例では、1つ又は複数の並列プロセッサ2512、メモリ・ハブ2505、プロセッサ2502、及びI/Oハブ2507を、システム・オン・チップ(SoC)集積回路に一体化することができる。少なくとも一実施例では、コンピューティング・システム2500の構成要素は、単一のパッケージに一体化されて、システム・イン・パッケージ(SIP:system in package)構成を形成することができる。少なくとも一実施例では、コンピューティング・システム2500の構成要素の少なくとも一部分を、マルチ・チップ・モジュール(MCM:multi-chip module)に一体化することができ、このモジュールを、他のマルチ・チップ・モジュールと相互接続して、モジュール式コンピューティング・システムにすることができる。
【0224】
1つ若しくは複数の実施例に関連する推論及び/又は訓練の動作を実行するために、推論及び/又は訓練論理1415が使用される。推論及び/又は訓練論理1415に関する詳細事項は、
図14A及び/又は
図14Bと併せて以下に提供される。少なくとも一実施例では、推論及び/又は訓練論理1415は、本明細書に記載のニューラル・ネットワークの訓練動作、ニューラル・ネットワークの機能及び/若しくはアーキテクチャ、又はニューラル・ネットワークのユース・ケースを使用して計算された重みパラメータに少なくとも部分的に基づき、推論又は予測の動作のために
図2500のシステムにおいて使用されてもよい。
【0225】
図26Aは、少なくとも一実施例による並列プロセッサ2600を示す。少なくとも一実施例では、並列プロセッサ2600の様々な構成要素は、プログラム可能なプロセッサ、特定用途向け集積回路(ASIC)、又はフィールド・プログラマブル・ゲート・アレイ(FPGA)などの1つ又は複数の集積回路デバイスを使用して実装されてもよい。少なくとも一実施例では、図示してある並列プロセッサ2600は、例示的な実施例による
図25に示す1つ又は複数の並列プロセッサ2512の変形形態である。
【0226】
少なくとも一実施例では、並列プロセッサ2600は並列処理ユニット2602を含む。少なくとも一実施例では、並列処理ユニット2602は、並列処理ユニット2602の他のインスタンスを含む他のデバイスとの通信を可能にするI/Oユニット2604を含む。少なくとも一実施例では、I/Oユニット2604は、他のデバイスに直接接続されてもよい。少なくとも一実施例では、I/Oユニット2604は、メモリ・ハブ2505などのハブ又はスイッチ・インターフェースの使用を介して、他のデバイスと接続される。少なくとも一実施例では、メモリ・ハブ2505とI/Oユニット2604との間の接続は、通信リンク2513を形成する。少なくとも一実施例では、I/Oユニット2604は、ホスト・インターフェース2606及びメモリ・クロスバー2616に接続され、ここでホスト・インターフェース2606は、処理動作の実行を対象とするコマンドを受け取り、メモリ・クロスバー2616は、メモリ動作の実行を対象とするコマンドを受け取る。
【0227】
少なくとも一実施例では、ホスト・インターフェース2606が、I/Oユニット2604を介してコマンド・バッファを受け取るとき、ホスト・インターフェース2606は、これらのコマンドを実行するためのワーク動作をフロント・エンド2608に向けることができる。少なくとも一実施例では、フロント・エンド2608はスケジューラ2610に結合され、このスケジューラは、コマンド又は他のワーク・アイテムを処理クラスタ・アレイ2612に分配するように構成される。少なくとも一実施例では、スケジューラ2610は、処理クラスタ・アレイ2612の処理クラスタ・アレイ2612にタスクが分配される前に、処理クラスタ・アレイ2612が適切に構成され、有効な状態にあることを確実にする。少なくとも一実施例では、スケジューラ2610は、マイクロコントローラで実行しているファームウェア論理を介して実装される。少なくとも一実施例では、マイクロコントローラ実装スケジューラ2610は、複雑なスケジューリング及びワーク分配動作を、粗い粒度と細かい粒度で実行するように構成可能であり、処理アレイ2612で実行しているスレッドの迅速なプリエンプション及びコンテキストのスイッチングを可能にする。少なくとも一実施例では、ホスト・ソフトウェアは、処理アレイ2612でのスケジューリングのワークロードを、複数のグラフィックス処理のドアベルのうちの1つを介して証明することができる。少なくとも一実施例では、次いで、スケジューラ2610を含むマイクロコントローラ内のスケジューラ2610論理によって、ワークロードを自動的に処理アレイ2612全体に分配することができる。
【0228】
少なくとも一実施例では、処理クラスタ・アレイ2612は、最大「N個」の処理クラスタ(たとえば、クラスタ2614A、クラスタ2614B~クラスタ2614N)を含むことができる。少なくとも一実施例では、処理クラスタ・アレイ2612の各クラスタ2614A~2614Nは、大量の同時スレッドを実行することができる。少なくとも一実施例では、スケジューラ2610は、様々なスケジューリング及び/又はワーク分配のアルゴリズムを使用して、処理クラスタ・アレイ2612のクラスタ2614A~2614Nにワークを配分することができ、これらのアルゴリズムは、プログラム又は計算のタイプごとに生じるワークロードに応じて、異なってもよい。少なくとも一実施例では、スケジューリングは、スケジューラ2610によって動的に対処されてもよく、又は処理クラスタ・アレイ2612によって実行されるように構成されたプログラム論理のコンパイル中に、コンパイラ論理によって部分的に支援されてもよい。少なくとも一実施例では、処理クラスタ・アレイ2612の異なるクラスタ2614A~2614Nは、異なるタイプのプログラムを処理するように、又は異なるタイプの計算を実行するように配分されることが可能である。
【0229】
少なくとも一実施例では、処理クラスタ・アレイ2612は、様々なタイプの並列処理動作を実行するように構成されることが可能である。少なくとも一実施例では、処理クラスタ・アレイ2612は、汎用の並列コンピュート動作を実行するように構成される。たとえば、少なくとも一実施例では、処理クラスタ・アレイ2612は、ビデオ及び/又はオーディオ・データのフィルタリング、物理動作を含むモデリング動作の実行、及びデータ変換の実行を含む処理タスクを実行するための論理を含むことができる。
【0230】
少なくとも一実施例では、処理クラスタ・アレイ2612は、並列グラフィックス処理動作を実行するように構成される。少なくとも一実施例では、処理クラスタ・アレイ2612は、テクスチャ動作を実行するためのテクスチャ・サンプリング論理、並びにモザイク論理、及び他の頂点処理論理を含むがこれらに限定されないこうしたグラフィックス処理動作の実行をサポートするための追加の論理を含むことができる。少なくとも一実施例では、処理クラスタ・アレイ2612は、頂点シェーダ、モザイク・シェーダ、ジオメトリ・シェーダ、及びピクセル・シェーダなどであるが、これらに限定されないグラフィックス処理関連のシェーダ・プログラムを実行するように構成されることが可能である。少なくとも一実施例では、並列処理ユニット2602は、処理できるようにデータをシステム・メモリからI/Oユニット2604を介して転送することができる。少なくとも一実施例では、処理中、転送されたデータを、処理中にオン・チップ・メモリ(たとえば、並列プロセッサ・メモリ2622)に記憶し、次いでシステム・メモリに書き戻すことができる。
【0231】
少なくとも一実施例では、並列処理ユニット2602を使用してグラフィックス処理が実行される場合には、処理クラスタ・アレイ2612の複数のクラスタ2614A~2614Nにグラフィックス処理動作をよりうまく分配できるようにするため、処理ワークロードをおおよそ等しい大きさのタスクに分割するようにスケジューラ2610を構成することができる。少なくとも一実施例では、処理クラスタ・アレイ2612の一部分は、異なるタイプの処理を実行するように構成されることが可能である。たとえば、少なくとも一実施例では、レンダリング画像を生成して表示するために、第1の部分は、頂点シェーディング及びトポロジ生成を実行するように構成されてもよく、第2の部分は、モザイク及びジオメトリのシェーディングを実行するように構成されてもよく、第3の部分は、ピクセル・シェーディング又は他の画面空間動作を実行するように構成されてもよい。少なくとも一実施例では、クラスタ2614A~2614Nのうちの1つ又は複数によって生成される中間データをバッファに記憶して、さらなる処理ができるようにクラスタ2614A~2614Nの間で中間データを送信できるようにしてもよい。
【0232】
少なくとも一実施例では、処理クラスタ・アレイ2612は、実行される処理タスクをスケジューラ2610を介して受け取ることができ、スケジューラ2610は、処理タスクを定義するコマンドをフロント・エンド2608から受け取る。少なくとも一実施例では、処理タスクは、処理されるデータのインデックス、たとえば、表面(パッチ)データ、プリミティブ・データ、頂点データ、及び/又はピクセル・データ、並びに状態パラメータ、及びデータをどのように処理すべきかを定義するコマンド(たとえば、どのプログラムを実行すべきか)を含むことができる。少なくとも一実施例では、スケジューラ2610は、タスクに対応するインデックスをフェッチするように構成されてもよく、又はフロント・エンド2608からインデックスを受け取ってもよい。少なくとも一実施例では、フロント・エンド2608は、入ってくるコマンド・バッファ(たとえば、バッチ・バッファ、プッシュ・バッファなど)によって指定されるワークロードが開始される前に、処理クラスタ・アレイ2612が有効な状態に構成されていることを保証するように構成されることが可能である。
【0233】
少なくとも一実施例では、並列処理ユニット2602の1つ又は複数のインスタンスのそれぞれは、並列プロセッサ・メモリ2622と結合することができる。少なくとも一実施例では、並列プロセッサ・メモリ2622には、メモリ・クロスバー2616を介してアクセスすることができ、メモリ・クロスバー2616は、処理クラスタ・アレイ2612並びにI/Oユニット2604からメモリ要求を受け取ることができる。少なくとも一実施例では、メモリ・クロスバー2616は、メモリ・インターフェース2618を介して並列プロセッサ・メモリ2622にアクセスすることができる。少なくとも一実施例では、メモリ・インターフェース2618は、複数のパーティション・ユニット(たとえば、パーティション・ユニット2620A、パーティション・ユニット2620B~パーティション・ユニット2620N)を含むことができ、これらのユニットはそれぞれ、並列プロセッサ・メモリ2622の一部分(たとえば、メモリ・ユニット)に結合することができる。少なくとも一実施例では、パーティション・ユニット2620A~2620Nの数は、メモリ・ユニットの数と等しくなるように構成され、それにより、第1のパーティション・ユニット2620Aは、対応する第1のメモリ・ユニット2624Aを有し、第2のパーティション・ユニット2620Bは、対応するメモリ・ユニット2624Bを有し、N番目のパーティション・ユニット2620Nは、対応するN番目のメモリ・ユニット2624Nを有する。少なくとも一実施例では、パーティション・ユニット2620A~2620Nの数は、メモリ・デバイスの数に等しくなくてもよい。
【0234】
少なくとも一実施例では、メモリ・ユニット2624A~2624Nは、グラフィックス・ダブル・データ・レート(GDDR)メモリを含む同期グラフィックス・ランダム・アクセス・メモリ(SGRAM)など、ダイナミック・ランダム・アクセス・メモリ(DRAM)又はグラフィックス・ランダム・アクセス・メモリを含む、様々なタイプのメモリ・デバイスを含むことができる。少なくとも一実施例では、またメモリ・ユニット2624A~2624Nはまた、高帯域幅メモリ(HBM)を含むがこれに限定されない3D積層メモリを含んでもよい。少なくとも一実施例では、並列プロセッサ・メモリ2622の利用可能な帯域幅を効率的に使用するために、フレーム・バッファ又はテクスチャ・マップなどのレンダー・ターゲットが、メモリ・ユニット2624A~2624Nにわたって記憶されて、パーティション・ユニット2620A~2620Nが、各レンダー・ターゲットの部分を並列に書き込みできるようにしてもよい。少なくとも一実施例では、システム・メモリとローカル・キャッシュ・メモリを併用する統合メモリ設計に有利なように、並列プロセッサ・メモリ2622のローカル・インスタンスは除外されてもよい。
【0235】
少なくとも一実施例では、処理クラスタ・アレイ2612のクラスタ2614A~2614Nのうちのいずれか1つは、並列プロセッサ・メモリ2622内のメモリ・ユニット2624A~2624Nのいずれかに書き込まれることになるデータを処理することができる。少なくとも一実施例では、メモリ・クロスバー2616は、各クラスタ2614A~2614Nの出力を、出力に対してさらなる処理動作を実行することができる任意のパーティション・ユニット2620A~2620N、又は別のクラスタ2614A~2614Nに転送するように構成されることが可能である。少なくとも一実施例では、各クラスタ2614A~2614Nは、メモリ・クロスバー2616を通ってメモリ・インターフェース2618と通信して、様々な外部メモリ・デバイスからの読取り、又はそれへの書込みを行うことができる。少なくとも一実施例では、メモリ・クロスバー2616は、I/Oユニット2604と通信するためのメモリ・インターフェース2618への接続部、並びに並列プロセッサ・メモリ2622のローカル・インスタンスへの接続部を有して、異なる処理クラスタ2614A~2614N内の処理ユニットが、システム・メモリ、又は並列処理ユニット2602のローカルにない他のメモリと通信できるようにする。少なくとも一実施例では、メモリ・クロスバー2616は、仮想チャネルを使用して、クラスタ2614A~2614Nと、パーティション・ユニット2620A~2620Nとの間でトラフィック・ストリームを分離することができる。
【0236】
少なくとも一実施例では、並列処理ユニット2602の複数のインスタンスは、単一のアドイン・カードに提供されてもよく、又は複数のアドイン・カードが相互接続されてもよい。少なくとも一実施例では、異なるインスタンスが異なる数の処理コア、異なる量のローカル並列プロセッサ・メモリ、及び/又は他の異なる構成を有する場合でも、並列処理ユニット2602の異なるインスタンスは相互動作するように構成されることが可能である。たとえば、少なくとも一実施例では、並列処理ユニット2602のいくつかインスタンスは、他のインスタンスに比べて高い精度の浮動小数点ユニットを含むことができる。少なくとも一実施例では、並列処理ユニット2602又は並列プロセッサ2600のうちの1つ又は複数のインスタンスを組み込んだシステムは、デスクトップ、ラップトップ、若しくは携帯型のパーソナル・コンピュータ、サーバ、ワークステーション、ゲーム・コンソール、及び/又は組み込みシステムを含むが、これらに限定されない様々な構成及びフォーム・ファクタで実装することができる。
【0237】
図26Bは、少なくとも一実施例によるパーティション・ユニット2620のブロック図である。少なくとも一実施例では、パーティション・ユニット2620は、
図26Aのパーティション・ユニット2620A~2620Nのうちの1つのパーティション・ユニットのインスタンスである。少なくとも一実施例では、パーティション・ユニット2620は、L2キャッシュ2621、フレーム・バッファ・インターフェース2625、及びROP:raster operations unit2626(ラスタ演算ユニット)を含む。L2キャッシュ2621は、メモリ・クロスバー2616及びROP2626から受け取ったロード及びストアの動作を実行するように構成された読取り/書込みキャッシュである。少なくとも一実施例では、読取りミス及び至急の書戻し要求が、処理されるようにL2キャッシュ2621によってフレーム・バッファ・インターフェース2625に出力される。少なくとも一実施例では、更新も、処理されるようにフレーム・バッファ・インターフェース2625を介してフレームに送られる。少なくとも一実施例では、フレーム・バッファ・インターフェース2625は、
図26の(たとえば並列プロセッサ・メモリ2622内の)メモリ・ユニット2624A~2624Nなど、並列プロセッサ・メモリのメモリ・ユニットのうちの1つとインターフェースをとる。
【0238】
少なくとも一実施例では、ROP2626は、ステンシル、zテスト、ブレンディングなどのラスタ演算を実行する処理ユニットである。少なくとも一実施例では、次いでROP2626は、グラフィックス・メモリに記憶された処理済みグラフィックス・データを出力する。少なくとも一実施例では、ROP2626は、メモリに書き込まれる深度又は色データを圧縮し、メモリから読み取られた深度又は色データを解凍するための圧縮論理を含む。少なくとも一実施例では、圧縮論理は、複数の圧縮アルゴリズムのうちの1つ又は複数を利用するロスレス圧縮論理とすることができる。ROP2926によって実行される圧縮のタイプは、圧縮されるデータの統計的特徴に基づき変更することができる。たとえば、少なくとも一実施例では、深度及び色データに対してはタイルごとにデルタ色圧縮が実行される。
【0239】
少なくとも一実施例では、ROP2626は、パーティション・ユニット2620内ではなく、各処理クラスタ内(たとえば、
図26Aのクラスタ2614A~2614N)に含まれる。少なくとも一実施例では、ピクセル・フラグメント・データではなく、ピクセル・データの読取り及び書込み要求が、メモリ・クロスバー2616を介して送信される。少なくとも一実施例では、処理済みグラフィックス・データは、
図25の1つ又は複数のディスプレイ・デバイス2510のうちの1つなどのディスプレイ・デバイスに表示されてもよく、プロセッサ2502によってさらに処理できるようにルーティングされてもよく、又は
図26Aの並列プロセッサ2600内の処理エンティティのうちの1つによってさらに処理できるようにルーティングされてもよい。
【0240】
図26Cは、少なくとも一実施例による並列処理ユニット内の処理クラスタ2614のブロック図である。少なくとも一実施例では、処理クラスタは、
図26Aの処理クラスタ2614A~2614Nのうちの1つの処理クラスタのインスタンスである。少なくとも一実施例では、処理クラスタ2614は、多数のスレッドを並列で実行するように構成されてもよく、ここで用語「スレッド」とは、入力データの特定のセットに対して実行している特定のプログラムのインスタンスを指す。少なくとも一実施例では、複数の独立した命令ユニットを提供することなく、多数のスレッドの並列実行をサポートするために、単一命令複数データ(SIMD)の命令発行技法が使用される。少なくとも一実施例では、それぞれの処理クラスタ内の処理エンジンのセットに命令を発行するように構成された共通の命令ユニットを使用して、全体的に同期された多数のスレッドの並列実行をサポートするために、単一命令複数スレッド(SIMT:single-instruction, multiple-thread)の技法が使用される。
【0241】
少なくとも一実施例では、処理クラスタ2614の動作は、SIMT並列プロセッサに処理タスクを分配するパイプライン・マネージャ2632を介して制御することができる。少なくとも一実施例では、パイプライン・マネージャ2632は、
図26のスケジューラ2610から命令を受け取り、グラフィックス・マルチプロセッサ2634及び/又はテクスチャ・ユニット2636を介してこれらの命令の実行を管理する。少なくとも一実施例では、グラフィックス・マルチプロセッサ2634は、SIMT並列プロセッサの例示的なインスタンスである。しかし、少なくとも一実施例では、アーキテクチャの異なる様々なタイプのSIMT並列プロセッサが、処理クラスタ2614内に含まれてもよい。少なくとも一実施例では、グラフィックス・マルチプロセッサ2634の1つ又は複数のインスタンスは、処理クラスタ2614内に含めることができる。少なくとも一実施例では、グラフィックス・マルチプロセッサ2634はデータを処理することができ、処理済みデータを、他のシェーダ・ユニットを含む複数の可能な宛先のうちの1つに分配するためにデータ・クロスバー2640が使用されてもよい。少なくとも一実施例では、パイプライン・マネージャ2632は、データ・クロスバー2640を通して分配されることになる処理済みデータの宛先を指定することによって、処理済みデータの分配を容易にすることができる。
【0242】
少なくとも一実施例では、処理クラスタ2614内の各グラフィックス・マルチプロセッサ2634は、関数実行論理(たとえば、算術論理演算ユニット、ロード・ストア・ユニットなど)の同一のセットを含むことができる。少なくとも一実施例では、関数実行論理は、前の命令が完了する前に新規の命令を発行することができるパイプライン式に構成されることが可能である。少なくとも一実施例では、関数実行論理は、整数及び浮動小数点の算術、比較演算、ブール演算、ビット・シフト、及び様々な代数関数の計算を含む様々な演算をサポートする。少なくとも一実施例では、同じ関数ユニットのハードウェアを活用して、異なる演算を実行することができ、関数ユニットの任意の組合せが存在してもよい。
【0243】
少なくとも一実施例では、処理クラスタ2614に送信される命令がスレッドを構成する。少なくとも一実施例では、並列処理エンジンのセットにわたって実行されているスレッドのセットが、スレッド・グループである。少なくとも一実施例では、スレッド・グループは、異なる入力データに対してプログラムを実行する。少なくとも一実施例では、スレッド・グループ内の各スレッドを、グラフィックス・マルチプロセッサ2634内の異なる処理エンジンに割り当てることができる。少なくとも一実施例では、スレッド・グループは、グラフィックス・マルチプロセッサ2634内の処理エンジンの数よりも少ないスレッドを含んでもよい。少なくとも一実施例では、スレッド・グループが処理エンジンの数よりも少ないスレッドを含む場合、処理エンジンのうちの1つ又は複数は、そのスレッド・グループが処理されているサイクル中にはアイドルであってもよい。少なくとも一実施例では、スレッド・グループはまた、グラフィックス・マルチプロセッサ2634内の処理エンジンの数よりも多いスレッドを含んでもよい。少なくとも一実施例では、スレッド・グループがグラフィックス・マルチプロセッサ2634内の処理エンジンの数より多くのスレッドを含む場合には、連続したクロック・サイクルにわたって処理を実行することができる。少なくとも一実施例では、複数のスレッド・グループを、グラフィックス・マルチプロセッサ2634上で同時に実行することができる。
【0244】
少なくとも一実施例では、グラフィックス・マルチプロセッサ2634は、ロード及びストアの動作を実行するための内部キャッシュ・メモリを含む。少なくとも一実施例では、グラフィックス・マルチプロセッサ2634は、内部キャッシュをやめて、処理クラスタ2614内のキャッシュ・メモリ(たとえば、L1キャッシュ2648)を使用することができる。少なくとも一実施例では、各グラフィックス・マルチプロセッサ2634は、パーティション・ユニット(たとえば、
図26Aのパーティション・ユニット2620A~2620N)内のL2キャッシュにもアクセスすることができ、これらのキャッシュが、すべての処理クラスタ2614間で共有され、スレッド間でデータを転送するために使用されてもよい。少なくとも一実施例では、グラフィックス・マルチプロセッサ2634は、オフ・チップのグローバル・メモリにもアクセスすることができ、このメモリは、ローカル並列プロセッサ・メモリ及び/又はシステム・メモリのうちの1つ又は複数を含むことができる。少なくとも一実施例では、並列処理ユニット2602の外部にある任意のメモリが、グローバル・メモリとして使用されてもよい。少なくとも一実施例では、処理クラスタ2614は、共通の命令及びデータを共有することができるグラフィックス・マルチプロセッサ2634の複数のインスタンスを含み、これらはL1キャッシュ2648に記憶されてもよい。
【0245】
少なくとも一実施例では、各処理クラスタ2614は、仮想アドレスを物理アドレスにマッピングするように構成されたMMU2645(メモリ管理ユニット)を含んでもよい。少なくとも一実施例では、MMU2645の1つ又は複数のインスタンスは、
図26のメモリ・インターフェース2618内にあってもよい。少なくとも一実施例では、MMU2645は、仮想アドレスを、タイル(タイリングについては詳述する)及び任意選択でキャッシュ・ライン・インデックスの物理アドレスにマッピングするために使用されるページ・テーブル・エントリ(PTE)のセットを含む。少なくとも一実施例では、MMU2645は、アドレスのトランスレーション・ルックアサイド・バッファ(TLB:translation lookaside buffer)又はキャッシュを含んでもよく、これらは、グラフィックス・マルチプロセッサ2634若しくはL1キャッシュ、又は処理クラスタ2614内にあってもよい。少なくとも一実施例では、表面データ・アクセスをローカルに分散するように物理アドレスを処理して、パーティション・ユニット間で要求の効率的なインターリーブが可能になる。少なくとも一実施例では、キャッシュ・ライン・インデックスを使用して、キャッシュ・ラインの要求がヒットかミスかが判定されてもよい。
【0246】
少なくとも一実施例では、各グラフィックス・マルチプロセッサ2634がテクスチャ・ユニット2636に結合されて、テクスチャ・マッピング動作、たとえば、テクスチャ・サンプル位置の判定、テクスチャ・データの読取り、及びテクスチャ・データのフィルタリングが実行されるように、処理クラスタ2614が構成されてもよい。少なくとも一実施例では、テクスチャ・データは、内部テクスチャL1キャッシュ(図示せず)から、又はグラフィックス・マルチプロセッサ2634内のL1キャッシュから読み取られ、必要に応じて、L2キャッシュ、ローカル並列プロセッサ・メモリ、又はシステム・メモリからフェッチされる。少なくとも一実施例では、各グラフィックス・マルチプロセッサ2634は、処理済みタスクをデータ・クロスバー2640に出力して、さらなる処理ができるように別の処理クラスタ2614に処理済みタスクを提供し、又はメモリ・クロスバー2616を介して、L2キャッシュ、ローカル並列プロセッサ・メモリ、又はシステム・メモリに処理済みタスクを記憶する。少なくとも一実施例では、プレROP2642(プレ・ラスタ演算ユニット)は、グラフィックス・マルチプロセッサ2634からデータを受け取り、ROPユニットにデータを仕向けるように構成されており、ROPユニットは、本明細書に記載のするように、パーティション・ユニット(たとえば、
図26のパーティション・ユニット2620A~2620N)内に位置付けられてもよい。少なくとも一実施例では、プレROP2642ユニットは、色ブレンディングの最適化を実行し、ピクセル色データを組織化し、アドレス・トランスレーションを実行することができる。
【0247】
1つ若しくは複数の実施例に関連する推論及び/又は訓練の動作を実行するために、推論及び/又は訓練論理1415が使用される。推論及び/又は訓練論理1415に関する詳細事項は、
図14A及び/又は
図14Bと併せて以下に提供される。少なくとも一実施例では、推論及び/又は訓練論理1415は、本明細書に記載のニューラル・ネットワークの訓練動作、ニューラル・ネットワークの機能及び/若しくはアーキテクチャ、又はニューラル・ネットワークのユース・ケースを使用して計算された重みパラメータに少なくとも部分的に基づき、推論又は予測の動作のためにグラフィックス処理クラスタ2614において使用されてもよい。
【0248】
図26Dは、少なくとも一実施例によるグラフィックス・マルチプロセッサ2634を示す。少なくとも一実施例では、グラフィックス・マルチプロセッサ2634は、処理クラスタ2614のパイプライン・マネージャ2632と結合する。少なくとも一実施例では、グラフィックス・マルチプロセッサ2634は、命令キャッシュ2652、命令ユニット2654、アドレス・マッピング・ユニット2656、レジスタ・ファイル2658、1つ又は複数の汎用グラフィックス・プロセッシング・ユニット(GPGPU)コア2662、及び1つ又は複数のロード/ストア・ユニット2666を含むがこれらに限定されない実行パイプラインを有する。GPGPUコア2662、及びロード/ストア・ユニット2666は、メモリ及びキャッシュ相互接続2668を介して、キャッシュ・メモリ2672及び共有メモリ2670に結合される。
【0249】
少なくとも一実施例では、命令キャッシュ2652は、実行すべき命令のストリームをパイプライン・マネージャ2632から受け取る。少なくとも一実施例では、命令は、命令キャッシュ2652にキャッシュされ、命令ユニット2654により実行されるようにディスパッチされる。少なくとも一実施例では、命令ユニット2654は、命令をスレッド・グループ(たとえば、ワープ)としてディスパッチすることができ、アスレッド・グループの各スレッドは、GPGPUコア2662内の異なる実行ユニットに割り当てられる。少なくとも一実施例では、命令は、統一アドレス空間内のアドレスを指定することによって、ローカル、共有、又はグローバルのアドレス空間のいずれかにアクセスすることができる。少なくとも一実施例では、アドレス・マッピング・ユニット2656を使用して、統一アドレス空間のアドレスを、ロード/ストア・ユニット2666がアクセスできる個別メモリ・アドレスにトランスレーションすることができる。
【0250】
少なくとも一実施例では、レジスタ・ファイル2658は、グラフィックス・マルチプロセッサ2634の機能ユニットにレジスタのセットを提供する。少なくとも一実施例では、レジスタ・ファイル2658は、グラフィックス・マルチプロセッサ2634の機能ユニット(たとえばGPGPUコア2662、ロード/ストア・ユニット2666)のデータ経路に接続された、オペランドのための一時的なストレージを提供する。少なくとも一実施例では、レジスタ・ファイル2658は、レジスタ・ファイル2658の専用部分に各機能ユニットが配分されるように、それぞれの機能ユニット間で分割される。一実施例では、レジスタ・ファイル2658は、グラフィックス・マルチプロセッサ2634によって実行されている異なるワープ間で分割される。
【0251】
少なくとも一実施例では、GPGPUコア2662はそれぞれ、グラフィックス・マルチプロセッサ2634の命令を実行するために使用される浮動小数点ユニット(FPU)及び/又は整数算術論理演算ユニット(ALU)を含むことができる。GPGPUコア2662同士は、同様のアーキテクチャであってもよく、又は異なるアーキテクチャであってもよい。少なくとも一実施例では、GPGPUコア2662の第1の部分は、単精度FPU及び整数ALUを含み、GPGPUコアの第2の部分は、倍精度FPUを含む。少なくとも一実施例では、FPUは、浮動小数点演算のためにIEEE754-2008規格を実装することができ、又は、可変精度の浮動小数点演算を有効にすることができる。少なくとも一実施例では、グラフィックス・マルチプロセッサ2634はさらに、矩形コピー又はピクセル・ブレンディングの動作などの特定の機能を実行するための、1つ若しくは複数の固定機能ユニット又は特別機能ユニットをさらに含むことができる。少なくとも一実施例では、GPGPUコアの1つ又は複数は、固定の又は特別な機能論理も含むことができる。
【0252】
少なくとも一実施例では、GPGPUコア2662は、複数のデータ・セットに対して単一の命令を実行することができるSIMD論理を含む。一実施例では、GPGPUコア2662は、SIMD4、SIMD8、及びSIMD16の命令を物理的に実行することができ、SIMD1、SIMD2、及びSIMD32の命令を論理的に実行することができる。少なくとも一実施例では、GPGPUコアのためのSIMD命令は、シェーダ・コンパイラによるコンパイル時に生成されてもよく、又は単一プログラム複数データ(SPMD:single program multiple data)又はSIMTのアーキテクチャ向けに書かれコンパイルされたプログラムを実行しているときに、自動的に生成されてもよい。少なくとも一実施例では、SIMT実行モデルのために構成されたプログラムの複数のスレッドは、単一のSIMD命令を介して実行することができる。たとえば、少なくとも一実施例では、同じ又は同様の動作を実行する8個のSIMTスレッドを、単一のSIMD8の論理ユニットを介して並列に実行することができる。
【0253】
少なくとも一実施例では、メモリ及びキャッシュ相互接続2668は、グラフィックス・マルチプロセッサ2634の各機能ユニットをレジスタ・ファイル2658及び共有メモリ2670に接続する相互接続ネットワークである。少なくとも一実施例では、メモリ及びキャッシュ相互接続2668は、ロード/ストア・ユニット2666が、共有メモリ2670とレジスタ・ファイル2658の間でロード及びストアの動作を実装できるようにするクロスバー相互接続である。少なくとも一実施例では、レジスタ・ファイル2658は、GPGPUコア2662と同じ周波数で動作することができ、したがって、GPGPUコア2662とレジスタ・ファイル2658の間のデータ転送は非常に低レイテンシである。少なくとも一実施例では、共有メモリ2670を使用して、グラフィックス・マルチプロセッサ2634内の機能ユニットで実行されるスレッド間の通信を可能にすることができる。少なくとも一実施例では、キャッシュ・メモリ2672を、たとえばデータ・キャッシュとして使用して、機能ユニットとテクスチャ・ユニット2636の間で通信されるテクスチャ・データをキャッシュすることができる。少なくとも一実施例では、共有メモリ2670は、プログラム管理キャッシュとしても使用することができる。少なくとも一実施例では、GPGPUコア2662で実行されているスレッドは、キャッシュ・メモリ2672内に記憶される自動キャッシュ・データに加えて、共有メモリ内にプログラム的にデータを記憶することができる。
【0254】
少なくとも一実施例では、本明細書に記載の並列プロセッサ又はGPGPUは、ホスト/プロセッサ・コアに通信可能に結合されて、グラフィックス動作、機械学習動作、パターン分析動作、及び様々な汎用GPU(GPGPU)機能を加速する。少なくとも一実施例では、GPUは、バス又は他の相互接続(たとえば、PCIe又はNVLinkなどの高速相互接続)を介してホスト・プロセッサ/コアに通信可能に結合されてもよい。少なくとも一実施例では、GPUは、コアと同じパッケージ又はチップに一体化されてもよく、内部(すなわち、パッケージ又はチップの内部の)プロセッサ・バス/相互接続を介してコアに通信可能に結合されてもよい。少なくとも一実施例では、GPUの接続方法に関わらず、プロセッサ・コアは、ワーク記述子に含まれたコマンド/命令のシーケンスの形でワークをGPUに配分してもよい。少なくとも一実施例では、次いでGPUは、これらのコマンド/命令を効率的に処理するために専用の回路/論理を使用する。
【0255】
1つ若しくは複数の実施例に関連する推論及び/又は訓練の動作を実行するために、推論及び/又は訓練論理1415が使用される。推論及び/又は訓練論理1415に関する詳細事項は、
図14A及び/又は
図14Bと併せて以下に提供される。少なくとも一実施例では、推論及び/又は訓練論理1415は、本明細書に記載のニューラル・ネットワークの訓練動作、ニューラル・ネットワークの機能及び/若しくはアーキテクチャ、又はニューラル・ネットワークのユース・ケースを使用して計算された重みパラメータに少なくとも部分的に基づき、推論又は予測の動作のためにグラフィックス・マルチプロセッサ2634において使用されてもよい。
【0256】
図27は、少なくとも一実施例による、命令を実行するための論理回路を含んでもよいプロセッサ2700のマイクロ・アーキテクチャを示すブロック図である。少なくとも一実施例では、プロセッサ2700は、x86命令、AMR命令、特定用途向け集積回路(ASIC)用の特別命令などを含む命令を実行してもよい。少なくとも一実施例では、プロセッサ2700は、カリフォルニア州サンタクララのインテルコーポレーションによる、MMX技術で有効化されたマイクロプロセッサ内の64ビット幅MMXTMレジスタなど、パック・データを記憶するためのレジスタを含んでもよい。少なくとも一実施例では、整数形式と浮動小数点形式の両方で利用可能なMMXレジスタは、単一命令複数データ(「SIMD」)及びストリーミングSIMD拡張(「SSE」:streaming SIMD extensions)命令を伴うパック・データ要素で動作してもよい。少なくとも一実施例では、SSE2、SSE3、SSE4、AVX、又はそれ以上(総称して「SSEx」と呼ばれる)の技術に関する128ビット幅のXMMレジスタは、こうしたパック・データのオペランドを保持してもよい。少なくとも一実施例では、プロセッサ2700は、機械学習若しくは深層学習のアルゴリズム、訓練、又は推論を加速するために命令を実行してもよい。
【0257】
少なくとも一実施例では、プロセッサ2700は、実行すべき命令をフェッチし、プロセッサ・パイプラインで後に使用すべき命令を準備するイン・オーダー・フロント・エンド(「フロント・エンド」)2701を含む。少なくとも一実施例では、フロント・エンド2701は、いくつかのユニットを含んでもよい。少なくとも一実施例では、命令プリフェッチャ2726が、メモリから命令をフェッチし、命令デコーダ2728に命令を供給し、命令デコーダが、命令をデコード又は解釈する。たとえば、少なくとも一実施例では、命令デコーダ2728は、受け取った命令を、機械が実行することのできる「マイクロ命令」又は「マイクロ・オペレーション」と呼ばれる(「マイクロ・オプス」又は「uops」とも呼ばれる)1つ又は複数のオペレーションにデコードする。少なくとも一実施例では、命令デコーダ2728は、命令を、オプコード及び対応するデータ、並びに制御フィールドに構文解析して、これらがマイクロ・アーキテクチャによって使用されて、少なくとも一実施例による動作が実行されてもよい。少なくとも一実施例では、トレース・キャッシュ2730は、デコードされたuopsを、実行できるようにuopキュー2734においてプログラム順のシーケンス又はトレースにアセンブルしてもよい。少なくとも一実施例では、トレース・キャッシュ2730が複雑な命令に遭遇すると、マイクロコードROM2732が、動作の完了に必要なuopsを提供する。
【0258】
少なくとも一実施例では、単一のマイクロ・オプスに変換できる命令もあれば、全動作を完了するためにいくつかのマイクロ・オプスを必要とする命令もある。少なくとも一実施例では、命令を完了するために5つ以上のマイクロ・オプスが要な場合、命令デコーダ2728は、マイクロコードROM2732にアクセスして、命令を実行してもよい。少なくとも一実施例では、命令は、命令デコーダ2728において処理できるように、少数のマイクロ・オプスにデコードされてもよい。少なくとも一実施例では、動作を完了するのに多数のマイクロ・オプスが必要な場合には、命令は、マイクロコードROM2732に記憶されてもよい。少なくとも一実施例では、トレース・キャッシュ2730は、少なくとも一実施例によるマイクロコードROM2732からの1つ又は複数の命令を完了するために、エントリ・ポイント・プログラマブル論理アレイ(「PLA」:programmable logic array)を参照して、マイクロコード・シーケンスを読み取るための正しいマイクロ命令ポインタを判定する。少なくとも一実施例では、マイクロコードROM2732が命令のためのマイクロ・オプスのシーケンシングを終了した後、機械のフロント・エンド2701は、トレース・キャッシュ2730からマイクロ・オプスのフェッチを再開してもよい。
【0259】
少なくとも一実施例では、アウト・オブ・オーダー実行エンジン(「アウト・オブ・オーダー・エンジン」)2703は、実行できるように命令を準備してもよい。少なくとも一実施例では、アウト・オブ・オーダー実行論理は、命令のフローをなめらかにし、その順序を変更するために多数バッファを有し、命令がパイプラインを下り、実行されるようにスケジューリングされるときの性能を最適化する。アウト・オブ・オーダー実行エンジン2703は、限定することなく、アロケータ/レジスタ・リネーマ2740、メモリuopキュー2742、整数/浮動小数点uopキュー2744、メモリ・スケジューラ2746、高速スケジューラ2702、低速/汎用浮動小数点スケジューラ(「低速/汎用FP:floating pointスケジューラ」)2704、及び単純浮動小数点スケジューラ(「単純FPスケジューラ」)2706を含む。少なくとも一実施例では、高速スケジューラ2702、低速/汎用浮動小数点スケジューラ2704、及び単純浮動小数点スケジューラ2706は、本明細書において集合的に「uopスケジューラ2702、2704、2706」とも呼ばれる。アロケータ/レジスタ・リネーマ2740は、実行するために各uopが必要とする機械バッファ及びリソースを配分する。少なくとも一実施例では、アロケータ/レジスタ・リネーマ2740は、レジスタ・ファイルへのエントリ時に論理レジスタの名前を変更する。少なくとも一実施例では、アロケータ/レジスタ・リネーマ2740はまた、メモリ・スケジューラ2746及びuopスケジューラ2702、2704、2706の前の、2つのuopキュー、すなわちメモリ動作のためのメモリuopキュー2742と非メモリ動作のための整数/浮動小数点uopキュー2744のうちの1つに、各uopのエントリを配分する。少なくとも一実施例では、uopスケジューラ2702、2704、2706は、uopsがいつ実行準備されるかを、それらの従属入力レジスタ・オペランドのソースが準備されていること、及びそれらの動作を完了するためにuopが必要とする実行リソースが利用可能であることに基づき、判定する。少なくとも一実施例では、少なくとも一実施例の高速スケジューラ2702は、メイン・クロック・サイクルの半分ごとにスケジューリングしてもよく、低速/汎用浮動小数点スケジューラ2704及び単純浮動小数点スケジューラ2706は、メイン・プロセッサのクロック・サイクル当たりに1回スケジューリングしてもよい。少なくとも一実施例では、uopスケジューラ2702、2704、2706は、実行できるようにuopsをスケジューリングするためにディスパッチ・ポートを調停する。
【0260】
少なくとも一実施例では、実行ブロックb11は、限定することなく、整数レジスタ・ファイル/バイパス・ネットワーク2708、浮動小数点レジスタ・ファイル/バイパス・ネットワーク(「FPレジスタ・ファイル/バイパス・ネットワーク」)2710、アドレス生成ユニット(「AGU」:address generation units)2712及び2714、高速算術論理演算ユニット(ALU)(「高速ALU」)2716及び2718、低速算術論理演算ユニット(「低速ALU」)2720、浮動小数点ALU(「FP」)2722、並びに浮動小数点移動ユニット(「FP移動」)2724を含む。少なくとも一実施例では、整数レジスタ・ファイル/バイパス・ネットワーク2708及び浮動小数点レジスタ・ファイル/バイパス・ネットワーク2710は、本明細書において「レジスタ・ファイル2708、2710」とも呼ばれる。少なくとも一実施例では、AGU2712及び2714、高速ALU2716及び2718、低速ALU2720、浮動小数点ALU2722、及び浮動小数点移動ユニット2724は、本明細書において「実行ユニット2712、2714、2716、2718、2720、2722、及び2724」とも呼ばれる。少なくとも一実施例では、実行ブロックb11は、限定することなく、(ゼロを含む)任意の数及びタイプのレジスタ・ファイル、バイパス・ネットワーク、アドレス生成ユニット、及び実行ユニットを、任意の組合せで含んでもよい。
【0261】
少なくとも一実施例では、レジスタ・ファイル2708、2710は、uopスケジューラ2702、2704、2706と、実行ユニット2712、2714、2716、2718、2720、2722、及び2724との間に配置されてもよい。少なくとも一実施例では、整数レジスタ・ファイル/バイパス・ネットワーク2708は、整数演算を実行する。少なくとも一実施例では、浮動小数点レジスタ・ファイル/バイパス・ネットワーク2710は、浮動小数点演算を実行する。少なくとも一実施例では、レジスタ・ファイル2708、2710のそれぞれは、限定することなく、バイパス・ネットワークを含んでもよく、このバイパス・ネットワークは、レジスタ・ファイルにまだ書き込まれていない完了したばかりの結果を、新しい従属uopsにバイパス又は転送してもよい。少なくとも一実施例では、レジスタ・ファイル2708、2710は、互いにデータを通信してもよい。少なくとも一実施例では、整数レジスタ・ファイル/バイパス・ネットワーク2708は、限定することなく、2つの別々のレジスタ・ファイル、すなわち低次32ビットのデータ用の1つのレジスタ・ファイル、及び高次32ビットのデータ用の第2のレジスタ・ファイルを含んでもよい。少なくとも一実施例では、浮動小数点命令は、通常、64~128ビット幅のオペランドを有することから、浮動小数点レジスタ・ファイル/バイパス・ネットワーク2710は、限定することなく、128ビット幅のエントリを含んでもよい。
【0262】
少なくとも一実施例では、実行ユニット2712、2714、2716、2718、2720、2722、2724は、命令を実行してもよい。少なくとも一実施例では、レジスタ・ファイル2708、2710は、マイクロ命令が実行する必要のある整数及び浮動小数点のデータのオペランド値を記憶する。少なくとも一実施例では、プロセッサ2700は、限定することなく、任意の数及び組合せの実行ユニット2712、2714、2716、2718、2720、2722、2724を含んでよい。少なくとも一実施例では、浮動小数点ALU2722及び浮動小数点移動ユニット2724は、浮動小数点、MMX、SIMD、AVX、及びSEE、又は特別な機械学習命令を含む他の演算を実行してもよい。少なくとも一実施例では、浮動小数点ALU2722は、限定することなく、64ビットずつの浮動小数点デバイダを含み、除算、平方根、及び残りのマイクロ・オプスを実行してもよい。少なくとも一実施例では、浮動小数点値を含む命令は、浮動小数点ハードウェアによって対処されてもよい。少なくとも一実施例では、ALU演算は、高速ALU2716、2718に渡されてもよい。少なくとも一実施例では、高速ALU2716、2718は、クロック・サイクルの半分の実効レイテンシで高速演算を実行してもよい。少なくとも一実施例では、低速ALU2720は、乗数、シフト、フラグ論理、及びブランチ処理などの長レイテンシ・タイプの演算のための整数実行ハードウェアを、限定することなく含んでもよいことから、ほとんどの複雑な整数演算は低速ALUに進む。少なくとも一実施例では、メモリのロード/ストア動作は、AGUS2712、2714によって実行されてもよい。少なくとも一実施例では、高速ALU2716、高速ALU2718、及び低速ALU2720は、64ビットのデータ・オペランドで整数演算を実行してもよい。少なくとも一実施例では、高速ALU2716、高速ALU2718、及び低速ALU2720は、16、32、128、256などを含む様々なデータ・ビット・サイズをサポートするように実装されてもよい。少なくとも一実施例では、浮動小数点ALU2722及び浮動小数点移動ユニット2724は、様々なビット幅を有する幅広いオペランドをサポートするように実装されてもよい。少なくとも一実施例では、浮動小数点ALU2722及び浮動小数点移動ユニット2724は、SIMD及びマルチメディア命令と併せて128ビット幅のパック・データ・オペランドで動作してもよい。
【0263】
少なくとも一実施例では、uopスケジューラ2702、2704、2706は、親ロードが実行を終了する前に、従属演算をディスパッチする。少なくとも一実施例では、uopsは、プロセッサ2700において投機的にスケジューリング及び実行されてもよいので、プロセッサ2700は、メモリ・ミスに対処するための論理も含んでよい。少なくとも一実施例では、データ・キャッシュにおいてデータ・ロードがミスした場合、一時的に不正確なデータを有するスケジューラを通り過ぎたパイプラインに、進行中の従属演算が存在してもよい。少なくとも一実施例では、リプレイ機構が、不正確なデータを使用する命令を追跡及び再実行する。少なくとも一実施例では、従属演算は、リプレイされる必要があってもよく、独立した演算は、完了が許容されてもよい。少なくとも一実施例では、プロセッサの少なくとも一実施例のスケジューラ及びリプレイ機構はまた、テキスト・ストリング比較演算のための命令シーケンスを捕捉するように設計されてもよい。
【0264】
少なくとも一実施例では、用語「レジスタ」は、オペランドを識別するための命令の一部として使用することができるオンボード・プロセッサのストレージ・ロケーションを指してもよい。少なくとも一実施例では、レジスタは、(プログラマの視点から見て)プロセッサの外部から使用可能であり得るものであってもよい。少なくとも一実施例では、レジスタは、特定のタイプの回路に限定されなくてもよい。むしろ、少なくとも一実施例では、レジスタは、データを記憶し、データを提供し、本明細書に記載の機能を実行してもよい。少なくとも一実施例では、本明細書に記載のレジスタは、専用物理レジスタ、レジスタ・リネーミングを使用して動的に配分される物理レジスタ、専用物理レジスタと動的に配分される物理レジスタとの組合せなど、任意の数の異なる技法を使用して、プロセッサ内の回路によって実装されてもよい。少なくとも一実施例では、整数レジスタは、32ビットの整数データを記憶する。少なくとも一実施例のレジスタ・ファイルは、パック・データのための8つのマルチメディアSIMDレジスタも含む。
【0265】
1つ若しくは複数の実施例に関連する推論及び/又は訓練の動作を実行するために、推論及び/又は訓練論理1415が使用される。推論及び/又は訓練論理1415に関する詳細事項は、
図14A及び/又は
図14Bと併せて以下に提供される。少なくとも一実施例では、推論及び/又は訓練論理1415の一部又はすべてが、EXEブロック2711、及び図示してある若しくは図示していない他のメモリ又はレジスタに組み込まれてもよい。たとえば、少なくとも一実施例では、本明細書に記載の訓練及び/又は推論の技法は、EXEブロック2711に示すALUのうちの1つ又は複数を使用してもよい。さらに、重みパラメータは、本明細書に記載の1つ又は複数の機械学習アルゴリズム、ニューラル・ネットワーク・アーキテクチャ、ユース・ケース、又は訓練技法を実行するためのEXEブロック2711のALUを構成するオン・チップ若しくはオフ・チップのメモリ及び/又はレジスタ(図示する又は図示せず)に記憶されてもよい。
【0266】
図28は、少なくとも一実施例による深層学習アプリケーション・プロセッサ2800を示す。少なくとも一実施例では、深層学習アプリケーション・プロセッサ2800は、深層学習アプリケーション・プロセッサ2800によって実行される場合に、本開示全体を通して記載するプロセス及び技法の一部又はすべてを、深層学習アプリケーション・プロセッサ2800に実行させる命令を使用する。少なくとも一実施例では、深層学習アプリケーション・プロセッサ2800は、特定用途向け集積回路(ASIC)である。少なくとも一実施例では、アプリケーション・プロセッサ2800は、1つ若しくは複数の命令又は両方を実行した結果としていずれもハードウェアに「ハード・ワイヤード」された行列乗算演算を実行する。少なくとも一実施例では、深層学習アプリケーション・プロセッサ2800は、限定することなく、処理クラスタ2810(1)~2810(12)、チップ間リンク(「ICL」)2820(1)~2820(12)、チップ間コントローラ(「ICC」)2830(1)~2830(2)、高帯域幅メモリ第2世代(「HBM2」)2840(1)~2840(4)、メモリ・コントローラ(「Mem Ctrlrs」)2842(1)~2842(4)、高帯域幅メモリ物理層(「HBM PHY」)2844(1)~2844(4)、管理-コントローラ中央処理装置(「管理-コントローラCPU」)2850、シリアル・ペリフェラル・インターフェース、集積回路間、及び汎用入力/出力ブロック(「SPI、I2C、GPIO」)2860、周辺構成要素相互接続エクスプレス・コントローラ及びダイレクト・メモリ・アクセス・ブロック(「PCIeコントローラ及びDMA」)2870、並びに16レーン周辺構成要素相互接続エクスプレス・ポート(「PCI Expressx16」)2880を含む。
【0267】
少なくとも一実施例では、処理クラスタ2810は、本明細書に記載の技法を含む1つ又は複数の訓練技法を使用して計算された重みパラメータに基づき、推論又は予測の演算を含む深層学習演算を実行してもよい。少なくとも一実施例では、各処理クラスタ2810は、限定することなく、任意の数及びタイプのプロセッサを含んでもよい。少なくとも一実施例では、深層学習アプリケーション・プロセッサ2800は、任意の数及びタイプの処理クラスタ2800を含んでもよい。少なくとも一実施例では、チップ間リンク2820は、双方向性である。少なくとも一実施例では、チップ間リンク2820及びチップ間コントローラ2830は、1つ又は複数のニューラル・ネットワークに具体化された1つ又は複数の機械学習アルゴリズムを実行した結果得られるアクティブ化情報を含む情報を、複数の深層学習アプリケーション・プロセッサ2800が交換できるようにする。少なくとも一実施例では、深層学習アプリケーション・プロセッサ2800は、(ゼロを含む)任意の数及びタイプのICL2820及びICC2830を含んでもよい。
【0268】
少なくとも一実施例では、HBM2 2840は、合計32ギガバイト(GB:Gigabyte)のメモリを提供する。HBM2 2840(i)は、メモリ・コントローラ2842(i)とHBM PHY2844(i)の両方に関連付けられる。少なくとも一実施例では、任意の数のHBM2 2840が、任意のタイプ及び合計量の高帯域幅メモリを提供してもよく、(ゼロを含む)任意の数及びタイプのメモリ・コントローラ2842及びHBM PHY2844に関連付けられてもよい。少なくとも一実施例では、SPI、I2C、GPIO2860、PCIeコントローラ及びDMA2870、並びに/又はPCIe2880は、任意の技術的に実行可能なやり方で任意の数及びタイプの通信規格を有効にする任意の数及びタイプのブロックに置き換えられてもよい。
【0269】
1つ若しくは複数の実施例に関連する推論及び/又は訓練の動作を実行するために、推論及び/又は訓練論理1415が使用される。推論及び/又は訓練論理1415に関する詳細事項は、
図14A及び/又は
図14Bと併せて以下に提供される。少なくとも一実施例では、深層学習アプリケーション・プロセッサ2800は、深層学習アプリケーション・プロセッサ2800に提供される情報を予測又は推論するようにニューラル・ネットワークなどの機械学習モデルを訓練するために使用される。少なくとも一実施例では、深層学習アプリケーション・プロセッサ2800は、別のプロセッサ若しくはシステムによって、又は深層学習アプリケーション・プロセッサ2800によって訓練されてきた訓練済み機械学習モデル(たとえば、ニューラル・ネットワーク)に基づき、情報を推論又は予測するために使用される。少なくとも一実施例では、プロセッサ2800は、本明細書に記載の1つ又は複数のニューラル・ネットワークのユース・ケースを実行するために使用されてもよい。
【0270】
図29は、少なくとも一実施例による、ニューロモーフィック・プロセッサ2900のブロック図である。少なくとも一実施例では、ニューロモーフィック・プロセッサ2900は、ニューロモーフィック・プロセッサ2900の外部のソースから1つ又は複数の入力を受信する。少なくとも一実施例では、これらの入力は、ニューロモーフィック・プロセッサ2900内の1つ又は複数のニューロン2902に送信されてもよい。少なくとも一実施例では、ニューロン2902及びその構成要素は、1つ又は複数の算術論理演算ユニット(ALU)を含む回路又は論理を使用して、実装されてもよい。少なくとも一実施例では、ニューロモーフィック・プロセッサ2900は、限定することなく、ニューロン2902の数千又は数百万のインスタンスを含んでもよいが、任意の好適な数のニューロン2902が使用されてもよい。少なくとも一実施例では、ニューロン2902の各インスタンスは、ニューロン入力2904及びニューロン出力2906を含んでもよい。少なくとも一実施例では、ニューロン2902は出力を生成してもよく、この出力は、ニューロンの他のインスタンスの入力に送信されてもよい。たとえば、少なくとも一実施例では、ニューロン入力2904及びニューロン出力2906は、シナプス2908を介して相互接続されてもよい。
【0271】
少なくとも一実施例では、ニューロン2902とシナプス2908は、ニューロモーフィック・プロセッサ2900が受信した情報をニューロモーフィック・プロセッサ2900が動作して処理又は分析するように、相互接続されてもよい。少なくとも一実施例では、ニューロン2902は、ニューロン入力2904を介して受信した入力が、閾値を超えているとき、出力パルス(又は「発火」若しくは「スパイク」)を送信してもよい。少なくとも一実施例では、ニューロン2902は、ニューロン入力2904において受信した信号を合計又は積分してもよい。たとえば、少なくとも一実施例では、ニューロン2902は、漏れ積分発火ニューロン(leaky integrate-and-fire neuron)として実装されてもよく、ここで、合計(「膜電位」と呼ばれる)が閾値を超える場合には、ニューロン2902は、シグモイド関数又は閾値関数などの伝達関数を使用して、出力(又は「発火」)を生成してもよい。少なくとも一実施例では、漏れ積分発火ニューロンは、ニューロン入力2904で受信した信号を合計して膜電位にしてもよく、また、崩壊因子(又は漏れ)を適用して膜電位を低減してもよい。少なくとも一実施例では、複数の入力信号が、閾値を超えるほど十分に素早く(すなわち、膜電位の崩壊が少なすぎて発火できなくなる前に)ニューロン入力2904において受信された場合には、漏れ積分発火ニューロンが発火してもよい。少なくとも一実施例では、ニューロン2902は、入力を受信し、入力を積分して膜電位にし、膜電位を崩壊させる回路又は論理を使用して、実装されてもよい。少なくとも一実施例では、入力は平均化されてもよく、又は任意の他の好適な伝達関数が使用されてもよい。さらに、少なくとも一実施例では、ニューロン2902は、ニューロン2904に伝達関数を適用した結果が閾値を超えるとき、ニューロン2906において出力スパイクを生成するコンパレータ回路又は論理を、限定することなく含んでもよい。少なくとも一実施例では、ニューロン2902は発火すると、前に受信した入力情報を、たとえば膜電位を0又は他の好適なデフォルト値に再設定することによって、無視してもよい。少なくとも一実施例では、膜電位が0にリセットされると、ニューロン2902は、好適な期間(又は不応期)の後に通常の動作を再開してもよい。
【0272】
少なくとも一実施例では、ニューロン2902は、シナプス2908を通して相互接続されてもよい。少なくとも一実施例では、シナプス2908は、第1のニューロン2902の出力から第2のニューロン2902の入力に信号を送信するように動作してもよい。少なくとも一実施例では、ニューロン2902は、シナプス2908の2つ以上のインスタンスを介して情報を送信してもよい。少なくとも一実施例では、ニューロン出力2906の1つ又は複数のインスタンスは、シナプス2908のインスタンスを介して、同じニューロン2902のニューロン入力2904のインスタンスに接続されてもよい。少なくとも一実施例では、シナプス2908のインスタンスを介して送信されることになる出力を生成するニューロン2902のインスタンスは、シナプス2908のそのインスタンスに対して「シナプス前ニューロン」と呼ばれてもよい。少なくとも一実施例では、シナプス2908のインスタンスを介して送信されることになる入力を受信するニューロン2902のインスタンスは、シナプス2908のそのインスタンスに対して「シナプス後ニューロン」と呼ばれてもよい。少なくとも一実施例では、ニューロン2902のインスタンスは、シナプス2908の1つ又は複数のインスタンスから入力を受信してもよく、また、シナプス2908の1つ又は複数のインスタンスを介して出力を送信してもよいので、ニューロン2902の単一のインスタンスは、したがって、シナプス2908の様々なインスタンスに対して「シナプス前ニューロン」と「シナプス後ニューロン」の両方であってもよい。
【0273】
少なくとも一実施例では、ニューロン2902は、1つ又は複数の層に組織化されてもよい。ニューロン2902の各インスタンスは、1つ又は複数のシナプス2908を通って1つ又は複数のニューロン入力2904にファン・アウトすることができる1つのニューロン出力2906を有してもよい。少なくとも一実施例では、第1の層2910のニューロン2902のニューロン出力2906は、第2の層2912のニューロン2902のニューロン入力2904に接続されてもよい。少なくとも一実施例では、層2910は、「フィード・フォワード」層と呼ばれてもよい。少なくとも一実施例では、第1の層2910のインスタンスにおけるニューロン2902の各インスタンスは、第2の層2912におけるニューロン2902の各インスタンスにファン・アウトしてもよい。少なくとも一実施例では、第1の層2910は、「完全に接続されたフィード・フォワード層」と呼ばれてもよい。少なくとも一実施例では、第2の層2912のインスタンスにおけるニューロン2902の各インスタンスは、第3の層2914におけるニューロン2902の全インスタンスより少ないインスタンスにファン・アウトしてもよい。少なくとも一実施例では、第2の層2912は、「疎に接続されたフィード・フォワード層」と呼ばれてもよい。少なくとも一実施例では、第2の層2912のニューロン2902は、(同じ)第2の層2912におけるニューロン2902を含め、複数の他の層のニューロン2902にファン・アウトしてもよい。少なくとも一実施例では、第2の層2912は、「回帰層」と呼ばれてもよい。ニューロモーフィック・プロセッサ2900は、疎に接続されたフィード・フォワード層と完全に接続されたフィード・フォワード層の両方を限定することなく含む、回帰層とフィード・フォワード層の任意の好適な組合せを限定することなく含んでもよい。
【0274】
少なくとも一実施例では、ニューロモーフィック・プロセッサ2900は、シナプス2908をニューロン2902に接続するための再構成可能相互接続アーキテクチャ、又は専用ハード・ワイヤード相互接続を、限定することなく含んでもよい。少なくとも一実施例では、ニューロモーフィック・プロセッサ2900は、ニューラル・ネットワーク・トポロジ、及びニューロンのファン・イン/ファン・アウトに基づき、必要に応じてシナプスを異なるニューロン2902に配分できるようにする回路又は論理を、限定することなく含んでもよい。たとえば、少なくとも一実施例では、シナプス2908は、ネットワーク・オン・チップなどの相互接続ファブリックを使用して、又は専用の接続を用いて、ニューロン2902に接続されてもよい。少なくとも一実施例では、シナプス相互接続及びその構成要素は、回路又は論理を使用して実装されてもよい。
【0275】
図30は、グラフィックス・プロセッサ3000のブロック図であり、これは、個別グラフィックス・プロセッシング・ユニットであってもよく、又は複数の処理コアと一体化されたグラフィックス・プロセッサであってもよい。少なくとも一実施例では、グラフィックス・プロセッサ3000は、メモリにマッピングされたI/Oインターフェースを介して、グラフィックス・プロセッサ3000のレジスタと、メモリに入れられたコマンドを用いて通信する。少なくとも一実施例では、グラフィックス・プロセッサ3000は、メモリにアクセスするためのメモリ・インターフェース3014を含む。少なくとも一実施例では、メモリ・インターフェース3014は、ローカル・メモリ、1つ若しくは複数の内部キャッシュ、1つ若しくは複数の共有外部キャッシュ、及び/又はシステム・メモリへのインターフェースである。
【0276】
少なくとも一実施例では、グラフィックス・プロセッサ3000はまた、ディスプレイ出力データをディスプレイ・デバイス3020に向けて駆動するためのディスプレイ・コントローラ3002も含む。少なくとも一実施例では、ディスプレイ・コントローラ3002は、ディスプレイ・デバイス3020用の1つ又は複数の重なり平面、及び多層のビデオ若しくはユーザ・インターフェース要素の合成のためのハードウェアを含む。少なくとも一実施例では、ディスプレイ・デバイス3020は、内部又は外部のディスプレイ・デバイスとすることができる。少なくとも一実施例では、ディスプレイ・デバイス3020は、仮想現実(VR)ディスプレイ・デバイス又は拡張現実(AR)ディスプレイ・デバイスなどの頭部装着型ディスプレイ・デバイスである。少なくとも一実施例では、グラフィックス・プロセッサ3000は、MPEG-2などの動画エキスパート・グループ(MPEG)フォーマット、H.264/MPEG-4AVCなどのアドバンスト・ビデオ・コーディング(AVC)フォーマット、並びに映画テレビ技術者協会(SMPTE)421M/VC-1、及びJPEGなどのジョイント・フォトグラフィック・エキスパート・グループ(JPEG)フォーマット、及びモーションJPEG(MJPEG)フォーマットを含むがこれらに限定されない1つ又は複数のメディア符号化フォーマットに、それらのフォーマットから、又はそれらのフォーマット間で、メディアをエンコード、デコード、又はコード変換するためのビデオ・コーデック・エンジン3006を含む。
【0277】
少なくとも一実施例では、グラフィックス・プロセッサ3000は、たとえばビット境界ブロック転送を含む2次元(2D)ラスターライザ動作を実行するためのブロック画像転送(BLIT)エンジン3004を含む。しかし、少なくとも一実施例では、2Dグラフィックス動作は、グラフィックス処理エンジン(GPE)3010の1つ又は複数の構成要素を使用して実行される。少なくとも一実施例では、GPE3010は、3次元(3D)グラフィックス動作及びメディア動作を含むグラフィックス動作を実行するためのコンピュート・エンジンである。
【0278】
少なくとも一実施例では、GPE3010は、3Dのプリミティブ形状(たとえば、矩形、三角形など)に作用する処理関数を使用して、3次元画像及びシーンをレンダリングするなど、3D動作を実行するための3Dパイプライン3012を含む。3Dパイプライン3012は、プログラム可能で固定された関数要素を含み、これは、3D/メディア・サブシステム3015に対して様々なタスクを実行し、且つ/又は実行スレッドをスポーンする。3Dパイプライン3012を使用してメディア動作を実行できるが、少なくとも一実施例では、GPE3010は、ビデオの後処理及び画像強調などのメディア動作を実行するために使用されるメディア・パイプライン3016も含む。
【0279】
少なくとも一実施例では、メディア・パイプライン3016は、ビデオ・コーデック・エンジン3006の代わりに、又はそれを代表して、ビデオ・デコード加速、ビデオ・インターレース解除、及びエンコード加速などの1つ又は複数の特別なメディア動作を実行するための固定機能又はプログラム可能論理ユニットを含む。少なくとも一実施例では、メディア・パイプライン3016は、3D/メディア・サブシステム3015で実行するためのスレッドをスポーンするためのスレッド・スポーニング・ユニットをさらに含む。少なくとも一実施例では、スポーンされたスレッドは、3D/メディア・サブシステム3015に含まれた1つ又は複数のグラフィックス実行ユニット上で、メディア動作のための計算を実行する。
【0280】
少なくとも一実施例では、3D/メディア・サブシステム3015は、3Dパイプライン3012及びメディア・パイプライン3016によってスポーンされたスレッドを実行するための論理を含む。少なくとも一実施例では、3Dパイプライン3012及びメディア・パイプライン3016は、スレッド実行要求を3D/メディア・サブシステム3015に送信し、この3D/メディア・サブシステム3015は、様々な要求を調停し、利用可能なスレッド実行リソースにディスパッチするためのスレッド・ディスパッチ論理を含む。少なくとも一実施例では、実行リソースは、3D及びメディア・スレッドを処理するためのグラフィックス実行ユニットのアレイを含む。少なくとも一実施例では、3D/メディア・サブシステム3015は、スレッド命令及びデータのための1つ又は複数の内部キャッシュを含む。少なくとも一実施例では、サブシステム3015はまた、スレッド間でデータを共有し、出力データを記憶するための、レジスタ及びアドレス可能メモリを含む共有メモリも含む。
【0281】
1つ若しくは複数の実施例に関連する推論及び/又は訓練の動作を実行するために、推論及び/又は訓練論理1415が使用される。推論及び/又は訓練論理1415に関する詳細事項は、
図14A及び/又は
図14Bと併せて以下に提供される。少なくとも一実施例では、推論及び/又は訓練論理1415の一部又はすべてが、グラフィックス・プロセッサ3000に組み込まれてもよい。たとえば、少なくとも一実施例では、本明細書に記載の訓練及び/又は推論の技法は、3Dパイプライン3012に具体化されたALUのうちの1つ又は複数を使用してもよい。さらに、少なくとも一実施例では、本明細書に記載の推論及び/又は訓練の動作は、
図14A又は
図14Bに示す論理以外の論理を使用して行われてもよい。少なくとも一実施例では、重みパラメータは、本明細書に記載の1つ又は複数の機械学習アルゴリズム、ニューラル・ネットワーク・アーキテクチャ、ユース・ケース、又は訓練技法を実行するためのグラフィックス・プロセッサ3000のALUを構成するオン・チップ若しくはオフ・チップのメモリ及び/又はレジスタ(図示する又は図示せず)に記憶されてもよい。
【0282】
図31は、少なくとも一実施例によるグラフィックス・プロセッサのグラフィックス処理エンジン3110のブロック図である。少なくとも一実施例では、グラフィックス処理エンジン(GPE)3110は、
図30に示すGPE3010の1つのバージョンである。少なくとも一実施例では、メディア・パイプライン3016は任意選択であり、GPE3110内に明示的に含まれなくてもよい。少なくとも一実施例では、別個のメディア及び/又は画像のプロセッサが、GPE3110に結合される。
【0283】
少なくとも一実施例では、GPE3110は、コマンド・ストリーマ3103に結合され、又はそれを含み、このコマンド・ストリーマは、3Dパイプライン3012及び/又はメディア・パイプライン3016にコマンド・ストリームを提供する。少なくとも一実施例では、コマンド・ストリーマ3103はメモリに結合され、このメモリは、システム・メモリであってもよく、又は内部キャッシュ・メモリ及び共有キャッシュ・メモリのうちの1つ若しくは複数であってもよい。少なくとも一実施例では、コマンド・ストリーマ3103は、メモリからコマンドを受信し、3Dパイプライン3012及び/又はメディア・パイプライン3016にコマンドを送信する。少なくとも一実施例では、コマンドは、リング・バッファからフェッチされる命令、プリミティブ、又はマイクロ・オペレーションであり、このリング・バッファは、3Dパイプライン3012及びメディア・パイプライン3016のためのコマンドを記憶する。少なくとも一実施例では、リング・バッファはさらに、複数のコマンドのバッチを記憶するバッチ・コマンド・バッファを含むことができる。少なくとも一実施例では、3Dパイプライン3012用のコマンドはまた、3Dパイプライン3012用の頂点及び形状のデータ、並びに/又はメディア・パイプライン3016用の画像データ及びメモリ・オブジェクトなどであるがこれらに限定されないメモリに記憶されたデータへの参照も含むことができる。少なくとも一実施例では、3Dパイプライン3012及びメディア・パイプライン3016は、演算を実行することにより、又は1つ若しくは複数の実行スレッドをグラフィックス・コア・アレイ3114にディスパッチすることにより、コマンド及びデータを処理する。少なくとも一実施例では、グラフィックス・コア・アレイ3114は、グラフィックス・コア(たとえば、グラフィックス・コア3115A、グラフィックス・コア3115B)の1つ又は複数のブロックを含み、各ブロックは、1つ又は複数のグラフィックス・コアを含む。少なくとも一実施例では、各グラフィックス・コアは、グラフィックス及びコンピュートの動作を実行するための汎用及びグラフィックス専用の実行論理、並びに、
図14A及び
図14Bの推論及び/又は訓練論理1415を含め、固定機能のテクスチャ処理及び/又は機械学習、及び人工知能の加速論理を含むグラフィックス実行リソースのセットを含む。
【0284】
少なくとも一実施例では、3Dパイプライン3012は、命令を処理し、実行スレッドをグラフィックス・コア・アレイ3114にディスパッチすることにより、頂点シェーダ、ジオメトリ・シェーダ、ピクセル・シェーダ、フラグメント・シェーダ、コンピュート・シェーダ、又は他のシェーダ・プログラムなどの1つ又は複数のシェーダ・プログラムを処理するための固定機能及びプログラム可能論理を含む。少なくとも一実施例では、グラフィックス・コア・アレイ3114は、シェーダ・プログラムを処理する際に使用するための実行リソースの統合ブロックを提供する。少なくとも一実施例では、グラフィック・コア・アレイ3114のグラフィックス・コア3115A~3115B内の多目的の実行論理(たとえば、実行ユニット)は、様々な3DのAPIシェーダ言語のサポートを含み、複数のシェーダに関連付けられた複数の同時実行スレッドを実行することができる。
【0285】
少なくとも一実施例では、グラフィックス・コア・アレイ3114はまた、ビデオ及び/又は画像の処理など、メディア機能を実行するための実行論理も含む。少なくとも一実施例では、実行ユニットはさらに、グラフィックス処理動作に加えて並列の汎用計算動作を実行するようにプログラム可能な汎用論理を含む。
【0286】
少なくとも一実施例では、グラフィックス・コア・アレイ3114上で実行しているスレッドにより生成される出力データは、統合リターン・バッファ(URB)3118のメモリにデータを出力することができる。URB3118は、複数のスレッド用のデータを記憶することができる。少なくとも一実施例では、グラフィックス・コア・アレイ3114上で実行している異なるスレッド間でデータを送信するために、URB3118を使用してもよい。少なくとも一実施例では、グラフィックス・コア・アレイ3114上のスレッドと、共有機能論理3120内の固定機能論理との間の同期のために、URB3118がさらに使用されてもよい。
【0287】
少なくとも一実施例では、グラフィックス・コア・アレイ3114はスケーラブルであり、それにより、グラフィックス・コア・アレイ3114は、可変数のグラフィックス・コアを含み、それぞれのグラフィックス・コアが、GPE3110の目的とする電力及び性能のレベルに基づき可変数の実行ユニットを有する。少なくとも一実施例では、実行リソースは動的にスケーラブルであり、それにより実行リソースは、必要に応じて有効化又は無効化されてもよい。
【0288】
少なくとも一実施例では、グラフィックス・コア・アレイ3114は、グラフィックス・コア・アレイ3114のグラフィックス・コア間で共有される複数のリソースを含む共有機能論理3120に結合される。少なくとも一実施例では、共有機能論理3120によって実行される共有機能は、専用の補足機能をグラフィックス・コア・アレイ3114に提供するハードウェア論理ユニットに具体化される。少なくとも一実施例では、共有機能論理3120は、サンプラ3121、数理3122、及びスレッド間通信(ITC)3123の論理を含むが、これらに限定されない。少なくとも一実施例では、1つ又は複数のキャッシュ3125が、共有機能論理3120にイン含まれ、又はそれに結合される。
【0289】
少なくとも一実施例では、専用機能の需要が不十分でグラフィックス・コア・アレイ3114内に含められない場合に、共有機能が使用される。少なくとも一実施例では、専用機能を1つにインスタンス化したものが、共有機能論理3120において使用され、グラフィックス・コア・アレイ3114内の他の実行リソース間で共有される。少なくとも一実施例では、共有機能論理3120内の、グラフィックス・コア・アレイ3114によってのみ使用される特定の共有機能は、グラフィックス・コア・アレイ3114内の共有機能論理3116内に含まれてもよい。少なくとも一実施例では、グラフィックス・コア・アレイ3114内の共有機能論理3116は、共有機能論理3120内の一部又はすべての論理を含むことができる。少なくとも一実施例では、共有機能論理3120内のすべての論理要素は、グラフィックス・コア・アレイ3114の共有機能論理3116内で複製されてもよい。少なくとも一実施例では、共有機能論理3120は、グラフィックス・コア・アレイ3114内の共有機能論理3116に有利なように除外される。
【0290】
1つ若しくは複数の実施例に関連する推論及び/又は訓練の動作を実行するために、推論及び/又は訓練論理1415が使用される。推論及び/又は訓練論理1415に関する詳細事項は、
図14A及び/又は
図14Bと併せて以下に提供される。少なくとも一実施例では、推論及び/又は訓練論理1415の一部又はすべてが、グラフィックス・プロセッサ3110に組み込まれてもよい。たとえば、少なくとも一実施例では、本明細書に記載の訓練及び/又は推論の技法は、3Dパイプライン3012、グラフィックス・コア3115A、共有機能論理3116、グラフィックス・コア3115B、共有機能論理3120、又は
図31の他の論理に具体化されたALUのうちの1つ又は複数を使用してもよい。さらに、少なくとも一実施例では、本明細書に記載の推論及び/又は訓練の動作は、
図14A又は
図14Bに示す論理以外の論理を使用して行われてもよい。少なくとも一実施例では、重みパラメータは、本明細書に記載の1つ又は複数の機械学習アルゴリズム、ニューラル・ネットワーク・アーキテクチャ、ユース・ケース、又は訓練技法を実行するためのグラフィックス・プロセッサ3110のALUを構成するオン・チップ若しくはオフ・チップのメモリ及び/又はレジスタ(図示する又は図示せず)に記憶されてもよい。
【0291】
図32は、本明細書に記載の少なくとも一実施例によるグラフィックス・プロセッサ・コア3200のハードウェア論理のブロック図である。少なくとも一実施例では、グラフィックス・プロセッサ・コア3200は、グラフィックス・コア・アレイ内に含まれる。少なくとも一実施例では、コア・スライスと呼ばれることもあるグラフィックス・プロセッサ・コア3200は、モジュール式グラフィックス・プロセッサ内の1つ又は複数のグラフィックス・コアとすることができる。少なくとも一実施例では、グラフィックス・プロセッサ・コア3200は、1つのグラフィックス・コア・スライスの例示であり、本明細書に記載のグラフィックス・プロセッサは、目的の電力及び性能のエンベロープに基づき、複数のグラフィックス・コア・スライスを含んでもよい。少なくとも一実施例では、各グラフィックス・コア3200は、汎用及び固定の機能論理のモジュール式ブロックを含むサブ・スライスとも呼ばれる複数のサブ・コア3201A~3201Fに結合された固定機能ブロック3230を含むことができる。
【0292】
少なくとも一実施例では、固定機能ブロック3230は、たとえば低性能及び/又は低電力のグラフィックス・プロセッサ実装形態において、グラフィックス・プロセッサ3200内のすべてのサブ・コアが共有できるジオメトリ/固定機能パイプライン3236を含む。少なくとも一実施例では、ジオメトリ/固定機能パイプライン3236は、3D固定機能パイプライン、ビデオ・フロント・エンド・ユニット、スレッド・スポーナ(spawner)及びスレッド・ディスパッチャ、並びに統合リターン・バッファを管理する統合リターン・バッファ・マネージャを含む。
【0293】
少なくとも一実施例では、固定機能ブロック3230はまた、グラフィックスSoCインターフェース3237、グラフィックス・マイクロコントローラ3238、及びメディア・パイプライン3239を含む。グラフィックスSoCインターフェース3237は、グラフィックス・コア3200と、システム・オン・チップ集積回路内の他のプロセッサ・コアとのインターフェースを提供する。少なくとも一実施例では、グラフィックス・マイクロコントローラ3238は、スレッド・ディスパッチ、スケジューリング、及びプリエンプションを含め、グラフィックス・プロセッサ3200の様々な機能を管理するように構成可能なプログラム可能サブ・プロセッサである。少なくとも一実施例では、メディア・パイプライン3239は、画像及びビデオのデータを含むマルチメディア・データのデコーディング、エンコーディング、前処理、及び/又は後処理を容易にする論理を含む。少なくとも一実施例では、メディア・パイプライン3239は、サブ・コア3201~3201F内のコンピュート論理又はサンプリング論理への要求を介して、メディア動作を実装する。
【0294】
少なくとも一実施例では、SoCインターフェース3237は、汎用アプリケーション・プロセッサ・コア(たとえば、CPU)、及び/又はSoC内の他の構成要素と、グラフィックス・コア3200が通信できるようにし、SoC内の他の構成要素には、共有ラスト・レベル・キャッシュ・メモリ、システムRAM、及び/又は組み込みオン・チップ若しくはオン・パッケージのDRAMなどのメモリ階層要素が含まれる。少なくとも一実施例では、SoCインターフェース3237はまた、カメラ・イメージング・パイプラインなど、SoC内の固定機能デバイスとの通信を可能にし、グラフィックス・コア3200とSoC内のCPUとの間で共有することができるグローバル・メモリ・アトミックの使用を可能にし、且つ/又はそれを実装する。少なくとも一実施例では、SoCインターフェース3237はまた、グラフィックス・コア3200の電力管理制御を実装することができ、グラフィックス・コア3200のクロック・ドメインと、SoC内の他のクロック・ドメインとの間でインターフェースをとれるようにする。少なくとも一実施例では、SoCインターフェース3237は、グラフィックス・プロセッサ内の1つ又は複数のグラフィックス・コアのそれぞれにコマンド及び命令を提供するように構成されたコマンド・ストリーマ及びグローバル・スレッド・ディスパッチャから、コマンド・バッファを受信できるようにする。少なくとも一実施例では、コマンド及び命令は、メディア動作が実行されるときにはメディア・パイプライン3239にディスパッチされることが可能であり、又はグラフィックス処理動作が実行されるときには、ジオメトリ及び固定機能パイプライン(たとえば、ジオメトリ及び固定機能パイプライン3236、ジオメトリ及び固定機能パイプライン3214)にディスパッチされることが可能である。
【0295】
少なくとも一実施例では、グラフィックス・マイクロコントローラ3238は、グラフィックス・コア3200のための様々なスケジューリング及び管理タスクを実行するように構成されることが可能である。少なくとも一実施例では、グラフィックス・マイクロコントローラ3238は、サブ・コア3201A~3201F内の実行ユニット(EU:execution unit)アレイ3202A~3202F、3204A~3204F内の様々なグラフィックス並列エンジンで、グラフィックスを実行し、且つ/又はワークロードのスケジューリングをコンピュートすることができる。少なくとも一実施例では、グラフィックス・コア3200を含むSoCのCPUコア上で実行されているホスト・ソフトウェアは、複数のグラフィックス・プロセッサ・ドアベルのうちの1つにワークロードを送出することができ、このドアベルが、適切なグラフィックス・エンジンに対するスケジューリング動作を呼び出す。少なくとも一実施例では、スケジューリング動作は、どのワークロードを次に実行すべきかを判定すること、コマンド・ストリーマにワークロードを送出すること、エンジン上で実行されている既存のワークロードをプリエンプションすること、ワークロードの進行を管理すること、及びワークロードが完了したときにホスト・ソフトウェアに通知することを含む。少なくとも一実施例では、グラフィックス・マイクロコントローラ3238はまた、グラフィックス・コア3200の低電力又はアイドル状態を促進して、オペレーティング・システム及び/又はシステム上のグラフィックス・ドライバ・ソフトウェアとは無関係に、低電力状態の移行全体にわたってグラフィックス・コア3200内のレジスタを保存及び復元する機能をグラフィックス・コア3200に提供することができる。
【0296】
少なくとも一実施例では、グラフィックス・コア3200は、図示してあるサブ・コア3201A~3201Fより多くの、又はそれより少ない、N個までのモジュール式サブ・コアを有してもよい。N個のサブ・コアのセットごとに、少なくとも一実施例では、グラフィックス・コア3200はまた、共有機能論理3210、共有及び/又はキャッシュ・メモリ3212、ジオメトリ/固定機能パイプライン3214、並びに様々なグラフィックスを加速し、処理動作をコンピュートするための追加の固定機能論理3216を含むことができる。少なくとも一実施例では、共有機能論理3210は、グラフィックス・コア3200内の各N個のサブ・コアが共有できる論理ユニット(たとえば、サンプラ、数理、及び/又はスレッド間通信の論理)を含むことができる。共有の、及び/又はキャッシュのメモリ3212は、グラフィックス・コア3200内のN個のサブ・コア3210A~3210Fのためのラスト・レベル・キャッシュとすることができ、また、複数のサブ・コアがアクセスできる共有メモリとしての役割も果たすことができる。少なくとも一実施例では、ジオメトリ/固定機能パイプライン3214は、固定機能ブロック3230内のジオメトリ/固定機能パイプライン3236の代わりに含まれてもよく、同じ又は同様の論理ユニットを含むことができる。
【0297】
少なくとも一実施例では、グラフィックス・コア3200は、グラフィックス・コア3200が使用するための様々な固定機能加速論理を含むことができる追加の固定機能論理3216を含む。少なくとも一実施例では、追加の固定機能論理3216は、位置限定シェーディング(position only shading)に使用するための追加のジオメトリ・パイプラインを含む。位置限定シェーディングでは、少なくとも2つのジオメトリ・パイプラインが存在しているが、ジオメトリ/固定機能パイプライン3216、3236内の完全ジオメトリ・パイプラインと選別パイプライン(cull pipeline)においてであり、この選別パイプラインは、追加の固定機能論理3216内に含まれてもよい追加のジオメトリ・パイプラインである。少なくとも一実施例では、選別パイプラインは、完全ジオメトリ・パイプラインの縮小版である。少なくとも一実施例では、完全パイプライン及び選別パイプラインは、アプリケーションの異なるインスタンスを実行することができ、各インスタンスは別個のコンテキストを有する。少なくとも一実施例では、位置限定シェーディングは、切り捨てられた三角形の長い選別ランを隠すことができ、いくつかのインスタンスにおいてシェーディングを早く完了させることができる。たとえば、少なくとも一実施例では、選別パイプラインは、ピクセルをフレーム・バッファにラスタ化及びレンダリングすることなく、頂点の位置属性をフェッチしシェーディングするので、追加の固定機能論理3216内の選別パイプライン論理は、メイン・アプリケーションと並列で位置シェーダを実行することができ、完全パイプラインよりも全体的に早く臨界結果(critical result)を生成する。少なくとも一実施例では、選別パイプラインは、生成された臨界結果を使用して、すべての三角形について、これらの三角形が選別されているかどうかに関わらず、可視性情報をコンピュートすることができる。少なくとも一実施例では、(このインスタンスではリプレイ・パイプラインと呼ばれてもよい)完全パイプラインは、可視性情報を消費して、選別された三角形を飛ばして可視三角形だけをシェーディングすることができ、この可視性三角形が、最終的にラスタ化フェーズに渡される。
【0298】
少なくとも一実施例では、追加の固定機能論理3216はまた、機械学習の訓練又は推論の最適化を含む実装形態のために、固定機能の行列乗算論理など、機械学習の加速論理を含むことができる。
【0299】
少なくとも一実施例では、各グラフィックス・サブ・コア3201A~3201Fは、実行リソースのセットを含み、このセットは、グラフィックス・パイプライン、メディア・パイプライン、又はシェーダ・プログラムからの要求に応答して、グラフィックス動作、メディア動作、及びコンピュート動作を実行するために使用されてもよい。少なくとも一実施例では、グラフィックス・サブ・コア3201A~3201Fは、複数のEUアレイ3202A~3202F、3204A~3204F、スレッド・ディスパッチ及びスレッド間通信(TD/IC:thread dispatch and inter-thread communication)論理3203A~3203F、3D(たとえば、テクスチャ)サンプラ3205A~3205F、メディア・サンプラ3206A~3206F、シェーダ・プロセッサ3207A~3207F、及び共有ローカル・メモリ(SLM:shared local memory)3208A~3208Fを含む。EUアレイ3202A~3202F、3204A~3204Fはそれぞれ、複数の実行ユニットを含み、これらは、グラフィックス、メディア、又はコンピュート・シェーダ・プログラムを含むグラフィックス動作、メディア動作、又はコンピュート動作のサービスにおいて浮動小数点及び整数/固定小数点の論理演算を実行することができる汎用グラフィックス・プロセッシング・ユニットである。少なくとも一実施例では、TD/IC論理3203A~3203Fは、サブ・コア内の実行ユニットのためのローカル・スレッド・ディスパッチ及びスレッド制御動作を実行し、サブ・コアの実行ユニット上で実行されているスレッド間の通信を容易にする。少なくとも一実施例では、3Dサンプラ3205A~3205Fは、テクスチャ又は他の3Dグラフィックス関連のデータをメモリに読み取ることができる。少なくとも一実施例では、3Dサンプラは、所与のテクスチャに関連付けられた構成済みサンプル状態及びテクスチャ・フォーマットに基づき、テクスチャ・データを異なるやり方で読み取ることができる。少なくとも一実施例では、メディア・サンプラ3206A~3206Fは、メディア・データに関連付けられたタイプ及びフォーマットに基づき、同様の読取り動作を実行することができる。少なくとも一実施例では、各グラフィックス・サブ・コア3201A~3201Fは、代替的に3Dとメディアの統合サンプラを含むことができる。少なくとも一実施例では、各サブ・コア3201A~3201F内の実行ユニット上で実行しているスレッドは、スレッド・グループ内で実行しているスレッドが、オン・チップ・メモリの共通プールを使用して実行できるようにするために、各サブ・コア内の共有ローカル・メモリ3208A~3208Fを利用することができる。
【0300】
1つ若しくは複数の実施例に関連する推論及び/又は訓練の動作を実行するために、推論及び/又は訓練論理1415が使用される。推論及び/又は訓練論理1415に関する詳細事項は、
図14A及び/又は
図14Bと併せて以下に提供される。少なくとも一実施例では、推論及び/又は訓練論理1415の一部又はすべてが、グラフィックス・プロセッサ3210に組み込まれてもよい。たとえば、少なくとも一実施例では、本明細書に記載の訓練及び/又は推論の技法は、3Dパイプライン3210、グラフィックス・マイクロコントローラ3238、ジオメトリ及び固定機能パイプライン3214及び3236、又は
図31の他の論理に具体化されたALUのうちの1つ又は複数を使用してもよい。さらに、少なくとも一実施例では、本明細書に記載の推論及び/又は訓練の動作は、
図14A又は
図14Bに示す論理以外の論理を使用して行われてもよい。少なくとも一実施例では、重みパラメータは、本明細書に記載の1つ又は複数の機械学習アルゴリズム、ニューラル・ネットワーク・アーキテクチャ、ユース・ケース、又は訓練技法を実行するためのグラフィックス・プロセッサ3200のALUを構成するオン・チップ若しくはオフ・チップのメモリ及び/又はレジスタ(図示する又は図示せず)に記憶されてもよい。
【0301】
図33A~
図33Bは、少なくとも一実施例による、グラフィックス・プロセッサ・コアの処理要素のアレイを含むスレッド実行論理3300を示す。
図33Aは、スレッド実行論理3300が使用される少なくとも一実施例を示す。
図33Bは、少なくとも一実施例による、実行ユニットの例示的な内部詳細事項を示す図である。
【0302】
図33Aに示すように、少なくとも一実施例では、スレッド実行論理3300は、シェーダ・プロセッサ3302、スレッド・ディスパッチャ3304、命令キャッシュ3306、複数の実行ユニット3308A~3308Nを含むスケーラブル実行ユニット・アレイ、サンプラ3310、データ・キャッシュ3312、及びデータ・ポート3314を含む。少なくとも一実施例では、スケーラブル実行ユニット・アレイは、1つ又は複数の実行ユニット(たとえば、実行ユニット3308A、3308B、3308C、3308D~3308N-1、及び3308Nのうちのいずれか)を、たとえばワークロードの計算要件に基づき有効又は無効にすることによって、動的に拡大縮小することができる。少なくとも一実施例では、スケーラブル実行ユニットは、実行ユニットのそれぞれにリンクされる相互接続ファブリックを介して相互接続される。少なくとも一実施例では、スレッド実行論理3300は、命令キャッシュ3306、データ・ポート3314、サンプラ3310、及び実行ユニット3308A~3308Nのうちの1つ又は複数を介した、システム・メモリ又はキャッシュ・メモリなどのメモリへの1つ又は複数の接続を含む。少なくとも一実施例では、各実行ユニット(たとえば、3308A)は、スレッドごとに複数のデータ要素を並列で処理しながら、複数の同時のハードウェア・スレッドを実行することができるスタンドアロンのプログラム可能な汎用計算ユニットである。少なくとも一実施例では、実行ユニット3308A~3308Nのアレイは、任意の数の個々の実行ユニットを含むように拡大縮小可能である。
【0303】
少なくとも一実施例では、実行ユニット3308A~3308Nは、シェーダ・プログラムを実行するために主に使用される。少なくとも一実施例では、シェーダ・プロセッサ3302は、様々なシェーダ・プログラムを処理し、シェーダ・プログラムに関連付けられた実行スレッドを、スレッド・ディスパッチャ3304を介してディスパッチすることができる。少なくとも一実施例では、スレッド・ディスパッチャ3304は、グラフィックス及びメディア・パイプラインからのスレッド開始要求を調停し、要求されたスレッドを、実行ユニット3308A~3308Nの1つ又は複数の実行ユニット上でインスタンス化するための論理を含む。たとえば、少なくとも一実施例では、ジオメトリ・パイプラインは、頂点シェーダ、モザイク・シェーダ、又はジオメトリ・シェーダを、処理できるようにスレッド実行論理にディスパッチすることができる。少なくとも一実施例では、スレッド・ディスパッチャ3304はまた、実行しているシェーダ・プログラムからのラン・タイム・スレッド・スポーニング要求(spawning request)を処理することができる。
【0304】
少なくとも一実施例では、実行ユニット3308A~3308Nは、多くの標準的な3Dグラフィックス・シェーダ命令のネイティブ・サポートを含む命令セットをサポートし、それにより、グラフィックス・ライブラリ(たとえば、Direct3D及びOpenGL)からのシェーダ・プログラムが、最小のトランスレーションで実行される。少なくとも一実施例では、実行ユニットは、頂点及びジオメトリの処理(たとえば、頂点プログラム、ジオメトリ・プログラム、頂点シェーダ)、ピクセル処理(たとえば、ピクセル・シェーダ、フラグメント・シェーダ)、及び汎用処理(たとえば、コンピュート及びメディアのシェーダ)をサポートする。少なくとも一実施例では、1つ又は複数の算術論理演算ユニット(ALU)を含む各実行ユニット3308A~3308Nのそれぞれは、単一命令複数データ(SIMD)の実行を複数発行することができ、マルチスレッド化された動作によって、メモリ・アクセスのレイテンシが高いにもかかわらず、効率的な実行環境が可能になる。少なくとも一実施例では、各実行ユニット内の各ハードウェア・スレッドは、専用の高帯域幅レジスタ・ファイル及び関連する独立したスレッド状態を有する。少なくとも一実施例では、実行は、整数演算、単精度及び倍精度の浮動小数点演算、SIMDブランチ性能、論理演算、超越演算、及び他の種々の演算を行うことができるパイプラインに対して、クロック当たり複数発行される。少なくとも一実施例では、メモリ、又は共有機能のうちの1つからのデータを待機している間に、実行ユニット3308A~3308N内の従属論理は、要求したデータが戻されるまで、待機スレッドをスリープ状態にする。少なくとも一実施例では、待機スレッドがスリープ状態の間に、ハードウェア・リソースは他のスレッドの処理に専念してもよい。たとえば、少なくとも一実施例では、頂点シェーダ動作に関連する遅延中に、実行ユニットは、ピクセル・シェーダ、フラグメント・シェーダ、又は異なる頂点シェーダを含む別のタイプのシェーダ・プログラムを実行することができる。
【0305】
少なくとも一実施例では、実行ユニット3308A~3308Nの各実行ユニットは、データ要素のアレイに対して動作する。少なくとも一実施例では、データ要素の数は「実行サイズ」であり、又は命令に対するチャネルの数である。少なくとも一実施例では、実行チャネルは、データ要素のアクセス、マスキング、及び命令内のフロー制御に関する実行の論理ユニットである。少なくとも一実施例では、チャネルの数は、特定のグラフィックス・プロセッサのための物理的な算術論理演算ユニット(ALU)又は浮動小数点ユニット(FPU)の数とは無関係であってもよい。少なくとも一実施例では、実行ユニット3308A~3308Nは、整数及び浮動小数点のデータ・タイプをサポートしてもよい。
【0306】
少なくとも一実施例では、実行ユニット命令セットは、SIMD命令を含む。少なくとも一実施例では、様々なデータ要素が、パック・データ・タイプとしてレジスタに記憶されてもよく、実行ユニットは、要素のデータ・サイズに基づき様々な要素を処理する。たとえば、少なくとも一実施例では、256ビット幅ベクトルで動作しているとき、ベクトルの256ビットがレジスタに記憶され、実行ユニットは、4個の別々の64ビット・パック・データ要素(クワッド・ワード(QW:Quad-Word)サイズのデータ要素)、8個の別々の32ビット・パック・データ要素(ダブル・ワード(DW:Double Word)サイズのデータ要素)、16個の別々の16ビット・パック・データ要素(ワード(W:Word)サイズのデータ要素)、又は32個の別々の8ビット・データ要素(バイト(B:byte)サイズのデータ要素)としてベクトル上で動作する。しかし少なくとも一実施例では、異なるベクトル幅及びレジスタサイズが考えられる。
【0307】
少なくとも一実施例では、1つ又は複数の実行ユニットを組み合わせて、融合EUに共通したスレッド制御論理(3307A~3307N)を有する融合実行ユニット(fused execution unit)3309A~3309Nにすることができる。少なくとも一実施例では、複数のEUを融合して、EUグループにすることができる。少なくとも一実施例では、融合EUグループの各EUは、別々のSIMDハードウェア・スレッドを実行するように構成されることが可能である。融合EUグループのEUの数は、様々な実施例に応じて異なってもよい。少なくとも一実施例では、SIMD8、SIMD16、及びSIMD32を含むがこれに限定されない様々なSIMD幅を、EUごとに実行することができる。少なくとも一実施例では、各融合グラフィックス実行ユニット3309A~3309Nは、少なくとも2つの実行ユニットを含む。たとえば、少なくとも一実施例では、融合実行ユニット3309Aは、第1のEU3308A、第2のEU3308B、及び第1のEU3308Aと第2のEU3308Bに共通のスレッド制御論理3307Aを含む。少なくとも一実施例では、スレッド制御論理3307Aは、融合グラフィックス実行ユニット3309Aで実行されているスレッドを制御して、融合実行ユニット3309A~3309N内の各EUを、共通の命令ポインタ・レジスタを使用して実行できるようにする。
【0308】
少なくとも一実施例では、1つ又は複数の内部命令キャッシュ(たとえば、3306)は、実行ユニットに対するスレッド命令をキャッシュするためにスレッド実行論理3300に含まれる。少なくとも一実施例では、1つ又は複数のデータ・キャッシュ(たとえば、3312)は、スレッド実行中にスレッド・データをキャッシュするために含まれる。少なくとも一実施例では、サンプラ3310は、3D動作のためのテクスチャ・サンプリング、及びメディア動作のためのメディア・サンプリングを実行するために含まれる。少なくとも一実施例では、サンプラ3310は、特別なテクスチャ又はメディア・サンプリング機能を含み、サンプリングされたデータを実行ユニットに提供する前に、サンプリング処理中にテクスチャ又はメディアのデータを処理する。
【0309】
実行中、少なくとも一実施例では、グラフィックス及びメディア・パイプラインは、スレッド開始要求を、スレッド・スポーニング及びディスパッチ論理を介してスレッド実行論理3300に送る。少なくとも一実施例では、幾何学的物体のグループが処理され、ピクセル・データにラスタ化されたら、シェーダ・プロセッサ3302内のピクセル・プロセッサ論理(たとえば、ピクセル・シェーダ論理、フラグメント・シェーダ論理など)が呼び出されて、出力情報をさらにコンピュートし、結果を出力面(たとえば、色バッファ、深度バッファ、ステンシル・バッファなど)に書き込ませる。少なくとも一実施例では、ピクセル・シェーダ又はフラグメント・シェーダは、ラスタ化された物体間で補間されることになる様々な頂点属性の値を計算する。少なくとも一実施例では、次いで、シェーダ・プロセッサ3302内のピクセル・プロセッサ論理が、アプリケーション・プログラミング・インターフェース(API)付きのピクセル・シェーダ・プログラム又はフラグメント・シェーダ・プログラムを実行する。少なくとも一実施例では、シェーダ・プログラムを実行するために、シェーダ・プロセッサ3302は、スレッド・ディスパッチャ3304を介してスレッドを実行ユニット(たとえば、3308A)にディスパッチする。少なくとも一実施例では、シェーダ・プロセッサ3302は、サンプラ3310のテクスチャ・サンプリング論理を使用して、メモリに記憶されたテクスチャ・マップのテクスチャ・データにアクセスする。少なくとも一実施例では、テクスチャ・データ及び入力ジオメトリ・データに対する算術演算によって、各ジオメトリ・フラグメントのピクセル色データがコンピュートされ、又はさらに処理されないように1つ又は複数のピクセルが切り捨てられる。
【0310】
少なくとも一実施例では、データ・ポート3314は、スレッド実行論理3300のためのメモリ・アクセス機構を提供して、処理済みデータを、グラフィックス・プロセッサ出力パイプラインでさらに処理できるようにメモリに出力する。少なくとも一実施例では、データ・ポート3314は、1つ又は複数のキャッシュ・メモリ(たとえば、データ・キャッシュ3312)を含み、又はそれに結合されて、データ・ポートを介したメモリ・アクセスのためのデータをキャッシュする。
【0311】
図33Bに示してあるように、少なくとも一実施例では、グラフィック実行ユニット3308は、命令フェッチ・ユニット3337、汎用レジスタ・ファイル・アレイ(GRF:general register file array)3324、アーキテクチャ・レジスタ・ファイル・アレイ(ARF)3326、スレッド調停装置(arbiter)3322、送信ユニット3330、ブランチ・ユニット3332、SIMD浮動小数点ユニット(FPU)3334のセット、及び少なくとも一実施例では、専用整数SIMD ALU3335のセットを含むことができる。少なくとも一実施例では、GRF3324及びARF3326は、各同時ハードウェア・スレッドに関連付けられた汎用レジスタ・ファイルとアーキテクチャ・レジスタ・ファイルのセットを含み、このハードウェア・スレッドは、グラフィックス実行ユニット3308においてアクティブであってもよい。少なくとも一実施例では、スレッドごとのアーキテクチャ状態が、ARF3326において維持され、スレッド実行中に使用されるデータが、GRF3324に記憶される。少なくとも一実施例では、各スレッドに対する命令ポインタを含む各スレッドの実行状態は、ARF3326のスレッド専用レジスタに保持することが可能である。
【0312】
少なくとも一実施例では、グラフィックス実行ユニット3308は、同時マルチスレッディング(SMT:Simultaneous Multi-Threading)と微細化インターリーブ・マルチスレッディング(IMT:Interleaved Multi-Threading)の組合せであるアーキテクチャを有する。少なくとも一実施例では、アーキテクチャは、実行ユニット当たりの同時スレッドのターゲット数及びレジスタ数に基づき設計時に微調整することができるモジュール式構成を有し、ここで実行ユニットのリソースは、複数の同時スレッドを実行するために使用される論理にわたって分割される。
【0313】
少なくとも一実施例では、グラフィックス実行ユニット3308は複数の命令を共同発行することができ、この命令は、それぞれ異なる命令であってもよい。少なくとも一実施例では、グラフィックス実行ユニット・スレッド3308のスレッド調停装置3322は、送信ユニット3330、ブランチ・ユニット3342、又はSIMD FPU3334のうちの1つに命令をディスパッチして実行できるようにすることができる。少なくとも一実施例では、各実行スレッドは、GRF3324内の128個の汎用レジスタにアクセスすることができ、ここで各レジスタは、32ビットのデータ要素のSIMD8要素のベクトルとしてアクセス可能な32バイトを記憶することができる。少なくとも一実施例では、各実行ユニット・スレッドは、GRF3324内の4Kバイトにアクセスすることができるが、実施例はこのように限定されず、他の実施例ではより多くの、又はより少ないリソースが提供されてもよい。少なくとも一実施例では、最大7個のスレッドを同時に実行できるが、実行ユニット当たりのスレッド数も、実施例に応じて変えることができる。7個のスレッドが4Kバイトにアクセスできる少なくとも一実施例では、GRF3324は、合計28Kバイトを記憶することができる。少なくとも一実施例では、フレキシブルなアドレッシング・モードにより、複数のレジスタがともにアドレスされてより幅広いレジスタを構築したり、ストライド設定された矩形ブロック・データ構造を表したりできるようにすることができる。
【0314】
少なくとも一実施例では、メモリ動作、サンプラ動作、及び他のレイテンシの長いシステム通信は、メッセージ引渡し送信ユニット3330によって実行される「送信」命令を介してディスパッチされる。少なくとも一実施例では、ブランチ命令は、SIMDの発散及び最終的な収束を容易にするために、専用のブランチ・ユニット3332にディスパッチされる。
【0315】
少なくとも一実施例では、グラフィックス実行ユニット3308は、浮動小数点演算を実行するための1つ又は複数のSIMD浮動小数点ユニット(FPU)3334を含む。少なくとも一実施例では、FPU3334は、整数計算もサポートする。少なくとも一実施例ではFPU3334は、最大M個の32ビット浮動小数点(若しくは整数)演算をSIMDで実行し、又は最大で2M個の16ビット整数演算、若しくは16ビット浮動小数点演算をSIMDで実行することができる。少なくとも一実施例では、FPUのうちの少なくとも1つは、拡張数理機能を提供して、高スループットの超越数理関数、及び倍精度の64ビット浮動小数点をサポートする。少なくとも一実施例では、8ビットの整数SIMD ALU3335のセットも存在し、機械学習計算に関連する動作を実行するように特に最適化されてもよい。
【0316】
少なくとも一実施例では、グラフィックス実行ユニット3308の複数のインスタンスのアレイが、グラフィックス・サブ・コア・グループ(たとえば、サブ・スライス)においてインスタンス化されてもよい。少なくとも一実施例では、実行ユニット3308は、複数の実行チャネルにわたって命令を実行することができる。少なくとも一実施例では、グラフィックス実行ユニット3308で実行される各スレッドは、異なるチャネルで実行される。
【0317】
1つ若しくは複数の実施例に関連する推論及び/又は訓練の動作を実行するために、推論及び/又は訓練論理1415が使用される。推論及び/又は訓練論理1415に関する詳細事項は、
図14A及び/又は
図14Bと併せて以下に提供される。少なくとも一実施例では、推論及び/又は訓練論理1415の一部又はすべてが、実行論理3300に組み込まれてもよい。さらに、少なくとも一実施例では、本明細書に記載の推論及び/又は訓練の動作は、
図14A又は
図14Bに示す論理以外の論理を使用して行われてもよい。少なくとも一実施例では、重みパラメータは、本明細書に記載の1つ又は複数の機械学習アルゴリズム、ニューラル・ネットワーク・アーキテクチャ、ユース・ケース、又は訓練技法を実行するための実行論理3300のALUを構成するオン・チップ若しくはオフ・チップのメモリ及び/又はレジスタ(図示する又は図示せず)に記憶されてもよい。
【0318】
図34は、少なくとも一実施例による並列処理ユニット(「PPU」)3400を示す。少なくとも一実施例では、PPU3400は、PPU3400によって実行された場合に、本開示全体を通して記載するプロセス及び技法の一部又はすべてを、PPU3400に実行させる機械可読コードで構成される。少なくとも一実施例では、PPU3400はマルチスレッド・プロセッサであり、このプロセッサは、1つ又は複数の集積回路デバイスに実装され、コンピュータ可読命令(機械可読命令若しくは単に命令とも呼ばれる)を、複数のスレッドで並列に処理するように設計されたレイテンシ隠蔽技法としてマルチスレッディングを利用する。少なくとも一実施例では、スレッドとは、実行スレッドを指し、PPU3400によって実行されるように構成された命令のセットをインスタンス化したものである。少なくとも一実施例では、PPU3400は、液晶ディスプレイ(「LCD」)デバイスなどのディスプレイ・デバイスに表示できるように2次元(「2D」)画像データを生成するために、3次元(「3D」)グラフィックス・データを処理するためのグラフィックス・レンダリング・パイプラインを実装するように構成されたグラフィックス・プロセッシング・ユニット(「GPU」)である。少なくとも一実施例では、PPU3400を利用して、線形代数演算及び機械学習演算などの計算が実行される。
図34は、単に例示を目的とした並列プロセッサの例を示しており、本開示の範囲内で企図されるプロセッサ・アーキテクチャの非限定的な例として解釈されるべきであり、同プロセッサに追加するため、且つ/又はそれを置き換えるために、任意の好適なプロセッサが利用されてもよいことが解釈されるべきである。
【0319】
少なくとも一実施例では、1つ又は複数のPPU3400は、任意の高性能コンピューティング(「HPC」:High Performance Computing)、データ・センタ、及び機械学習のアプリケーションを加速するように構成される。少なくとも一実施例では、PPU3400は、以下の非限定的な例を含む深層学習システム及びアプリケーションを加速するように構成される:自律車両プラットフォーム、深層学習、高精度音声、画像、テキスト認識システム、インテリジェント・ビデオ分析、分子シミュレーション、創薬、病気診断、天気予報、ビッグ・データ分析、天文学、分子動態シミュレーション、金融モデリング、ロボット工学、工場自動化、リアル・タイム言語翻訳、オンライン検索最適化、及び個別化ユーザ推奨など。
【0320】
少なくとも一実施例では、PPU3400は、限定することなく、入力/出力(「I/O」)ユニット3406、フロント・エンド・ユニット3410、スケジューラ・ユニット3412、ワーク分配ユニット3414、ハブ3416、クロスバー(「Xbar」:crossbar)3420、1つ又は複数の汎用処理クラスタ(「GPC」:general processing cluster)3418、及び1つ又は複数のパーティション・ユニット(「メモリ・パーティション・ユニット」)3422を含む。少なくとも一実施例では、PPU3400は、1つ又は複数の高速GPU相互接続(「GPU相互接続」)3408を介してホスト・プロセッサ又は他のPPU3400に接続される。少なくとも一実施例では、PPU3400は、相互接続3402を介してホスト・プロセッサ又は他の周辺デバイスに接続される。少なくとも一実施例では、PPU3400は、1つ又は複数のメモリ・デバイス(「メモリ」)3404を備えるローカル・メモリに接続される。少なくとも一実施例では、メモリ・デバイス3404は、限定することなく、1つ又は複数のダイナミック・ランダム・アクセス・メモリ(「DRAM」)デバイスを含む。少なくとも一実施例では、1つ又は複数のDRAMデバイスは、複数のDRAMダイが各デバイス内で積層された高帯域幅メモリ(「HBM」)サブシステムとして構成されても、且つ/又は構成可能であってもよい。
【0321】
少なくとも一実施例では、高速GPU相互接続3408は、有線ベースのマルチ・レーン通信リンクを指してもよく、このリンクは、拡張縮小するためにシステムによって使用され、1つ又は複数の中央処理装置(「CPU」)と組み合わされた1つ又は複数のPPU3400を含み、PPU3400とCPUとの間のキャッシュ・コヒーレンス、及びCPUマスタリングをサポートする。少なくとも一実施例では、データ及び/又はコマンドは、高速GPU相互接続3408により、ハブ3416を介して、1つ又は複数のコピー・エンジン、ビデオ・エンコーダ、ビデオ・デコーダ、電力管理ユニット、及び
図34に明示されていないこともある他の構成要素などのPPU3400の別のユニットに/から送信される。
【0322】
少なくとも一実施例では、I/Oユニット3406は、システム・バス3402を介してホスト・プロセッサ(
図34には示さず)から通信(たとえば、コマンド、データ)を送受信するように構成される。少なくとも一実施例では、I/Oユニット3406は、システム・バス3402を介して直接、又は1つ若しくは複数の、メモリ・ブリッジなどの中間デバイスを介して、ホスト・プロセッサと通信する。少なくとも一実施例では、I/Oユニット3406は、システム・バス3402を介してPPU3400のうちの1つ又は複数などの1つ又は複数の他のプロセッサと通信してもよい。少なくとも一実施例では、I/Oユニット3406は、ペリフェラル・コンポーネント・インターコネクト・エクスプレス(「PCIe」)インターフェースを実装して、PCIeバスを介して通信できるようにする。少なくとも一実施例では、I/Oユニット3406は、外部デバイスと通信するためのインターフェースを実装する。
【0323】
少なくとも一実施例では、I/Oユニット3406は、システム・バス3402を介して受信したパケットをデコードする。少なくとも一実施例では、少なくともいくつかのパケットは、PPU3400に様々な動作を実行させるように構成されたコマンドを表す。少なくとも一実施例では、I/Oユニット3406は、デコードされたコマンドを、コマンドによって指定されるPPU3400の様々な他のユニットに送信する。少なくとも一実施例では、コマンドは、フロント・エンド・ユニット3410に送信され、且つ/又はハブ3416、若しくは(
図34には明示していない)1つ若しくは複数のコピー・エンジン、ビデオ・エンコーダ、ビデオ・デコーダ、電力管理ユニットなどのPPU3400の他のユニットに送信される。少なくとも一実施例では、I/Oユニット3406はPPU3400の様々な論理ユニット間で、通信をルーティングするように構成される。
【0324】
少なくとも一実施例では、ホスト・プロセッサによって実行されるプログラムは、ワークロードをPPU3400に提供して処理できるようにするバッファにおいて、コマンド・ストリームをエンコードする。少なくとも一実施例では、ワークロードは、命令と、これらの命令によって処理されることになるデータとを含む。少なくとも一実施例では、バッファは、ホスト・プロセッサとPPU3400の両方がアクセス(たとえば、書込み/読取り)可能なメモリ内の領域であり、ポスト・インターフェース・ユニットは、I/Oユニット3406によってシステム・バス3402を介して送信されるメモリ要求を介して、システム・バス3402に接続されたシステム・メモリ内のバッファにアクセスするように構成されてもよい。少なくとも一実施例では、ホスト・プロセッサは、バッファにコマンド・ストリームを書き込み、次いでコマンド・ストリームの開始点を指すポインタをPPU3400に送信し、それによりフロント・エンド・ユニット3410は、1つ又は複数のコマンド・ストリームを指すポインタを受信し、1つ又は複数のコマンド・ストリームを管理して、コマンド・ストリームからコマンドを読み取り、コマンドをPPU3400の様々なユニットに転送する。
【0325】
少なくとも一実施例では、フロント・エンド・ユニット3410は、1つ又は複数のコマンド・ストリームによって定義されるタスクを処理するように様々なGPC3418を構成するスケジューラ・ユニット3412に結合される。少なくとも一実施例では、スケジューラ・ユニット3412は、スケジューラ・ユニット3412によって管理される様々タスクに関連する状態情報を追跡するように構成され、ここで状態情報は、どのGPC3418にタスクが割り当てられるか、タスクがアクティブか非アクティブか、タスクに関連付けられた優先レベルなどを示してもよい。少なくとも一実施例では、スケジューラ・ユニット3412は、GPC3418のうちの1つ又は複数において、複数のタスクの実行を管理する。
【0326】
少なくとも一実施例では、スケジューラ・ユニット3412は、GPC3418で実行するためのタスクをディスパッチするように構成されたワーク分配ユニット3414に結合される。少なくとも一実施例では、ワーク分配ユニット3414は、スケジューラ・ユニット3412から受信したスケジュール済みタスクの数を追跡し、ワーク分配ユニット3414は、GPC3418のそれぞれについて、ペンディング・タスク・プール、及びアクティブ・タスク・プールを管理する。少なくとも一実施例では、ペンディング・タスク・プールは、特定のGPC3418によって処理されるように割り当てられたタスクを含むいくつかのスロット(たとえば、32スロット)を備え、アクティブ・タスク・プールは、GPC3418によりアクティブに処理されているタスクのためのいくつかのスロット(たとえば、4スロット)を備え、それにより、GPC3418のうちの1つがタスクの実行を完了すると、GPC3418のアクティブ・タスク・プールからそのタスクが排除され、ペンディング・タスク・プールからの他のタスクのうちの1つが選択され、GPC3418で実行されるようにスケジューリングされる。少なくとも一実施例では、データ依存性が解決されるのを待機している間など、アクティブ・タスクがGPC3418上でアイドルである場合には、アクティブ・タスクがGPC3418から排除され、ペンディング・タスク・プールに戻され、その間に、ペンディング・タスク・プールの別のタスクが選択され、GPC3418で実行されるようにスケジューリングされる。
【0327】
少なくとも一実施例では、ワーク分配ユニット3414は、Xバー3420を介して1つ又は複数のGPC3418と通信する。少なくとも一実施例では、Xバー3420は、PPU3400のユニットのうちの多くを、PPU3400の別のユニットに結合する相互接続ネットワークであり、ワーク分配ユニット3414を特定のGPC3418に結合するように構成されることが可能である。少なくとも一実施例では、PPU3400の1つ又は複数の他のユニットも、ハブ3416を介してXバー3420に接続されてもよい。
【0328】
少なくとも一実施例では、タスクはスケジューラ・ユニット3412によって管理され、ワーク分配ユニット3414によってGPC3418のうちの1つにディスパッチされる。GPC3418は、タスクを処理し、結果を生成するように構成される。少なくとも一実施例では、結果は、GPC3418内の他のタスクによって消費されてもよく、Xバー3420を介して異なるGPC3418にルーティングされてもよく、又はメモリ3404に記憶されてもよい。少なくとも一実施例では、結果を、パーティション・ユニット3422を介してメモリ3404に書き込むことができ、パーティション・ユニット3422は、メモリ3404への/からのデータの読取り及び書込みを行うためのメモリ・インターフェースを実装する。少なくとも一実施例では、結果を、高速GPU相互接続3408を介して別のPPU3404又はCPUに送信することができる。少なくとも一実施例では、PPU3400は、PPU3400に結合された別々の個別メモリ・デバイス3404の数に等しいU個のパーティション・ユニット3422を、限定することなく含む。少なくとも一実施例では、パーティション・ユニット3422は、
図36と併せて以下でさらに詳細に説明される。
【0329】
少なくとも一実施例では、ホスト・プロセッサはドライバ・カーネルを実行し、このカーネルは、ホスト・プロセッサで実行されている1つ又は複数のアプリケーションがPPU3400で実行するための動作をスケジューリングできるようにするアプリケーション・プログラミング・インターフェース(API)を実装している。少なくとも一実施例では、複数のコンピュート・アプリケーションが、PPU3400によって同時に実行され、PPU3400は、複数のコンピュート・アプリケーションに対して、隔離、サービス品質(「QoS」:quality of service)、及び独立したアドレス空間を提供する。少なくとも一実施例では、アプリケーションは、PPU3400によって実行するための1つ又は複数のタスクをドライバ・カーネルに生成させる(たとえば、APIコールの形の)命令を生成し、ドライバ・カーネルは、PPU3400によって処理されている1つ又は複数のストリームにタスクを出力する。少なくとも一実施例では、各タスクは、ワープと呼ばれてもよい関連スレッドの1つ又は複数のグループを備える。少なくとも一実施例では、ワープは、並列に実行することができる複数の関連スレッド(たとえば、32個のスレッド)を備える。少なくとも一実施例では、連動スレッドとは、タスクを実行するための命令を含み、共有メモリを介してデータを交換する複数のスレッドを指してもよい。少なくとも一実施例では、スレッド及び連動スレッドは、
図36と併せて少なくとも一実施例によりさらに詳細に説明される。
【0330】
1つ若しくは複数の実施例に関連する推論及び/又は訓練の動作を実行するために、推論及び/又は訓練論理1415が使用される。推論及び/又は訓練論理1415に関する詳細事項は、
図14A及び/又は
図14Bと併せて以下に提供される。少なくとも一実施例では、深層学習アプリケーション・プロセッサは、PPU3400に提供される情報を予測又は推論するようにニューラル・ネットワークなどの機械学習モデルを訓練するために使用される。少なくとも一実施例では、深層学習アプリケーション・プロセッサ3400は、別のプロセッサ若しくはシステムによって、又はPPU3400によって訓練されてきた訓練済み機械学習モデル(たとえば、ニューラル・ネットワーク)に基づき、情報を推論又は予測するために使用される。少なくとも一実施例では、PPU3400は、本明細書に記載の1つ又は複数のニューラル・ネットワークのユース・ケースを実行するために使用されてもよい。
【0331】
図35は、少なくとも一実施例による汎用処理クラスタ(「GPC」)3500を示す。少なくとも一実施例では、GPC3500は、
図34のGPC3418である。少なくとも一実施例では、各GPC3500は、限定することなく、タスクを処理するためのいくつかのハードウェア・ユニットを含み、各GPC3500は、限定することなく、パイプライン・マネージャ3502、プレ・ラスタ演算ユニット(「PROP」:pre-raster operations unit)3504、ラスタ・エンジン3508、ワーク分配クロスバー(「WDX」:work distribution crossbar)3516、メモリ管理ユニット(「MMU」)3518、1つ又は複数のデータ処理クラスタ(「DPC」:Data Processing Clusters)3506、及びパーツの任意の好適な組合せを含む。
【0332】
少なくとも一実施例では、GPC3500の動作は、パイプライン・マネージャ3502によって制御される。少なくとも一実施例では、パイプライン・マネージャ3502は、GPC3500に配分されたタスクを処理するために1つ又は複数のDPC3506の構成を管理する。少なくとも一実施例では、パイプライン・マネージャ3502は、グラフィックス・レンダリング・パイプラインの少なくとも一部分を実装するように、1つ又は複数のDPC3506のうちの少なくとも1つを構成する。少なくとも一実施例では、DPC3506は、プログラム可能なストリーミング・マルチプロセッサ(「SM」:streaming multi-processor)3514で頂点シェーダ・プログラムを実行するように構成される。少なくとも一実施例では、パイプライン・マネージャ3502は、少なくとも一実施例では、ワーク分配ユニットから受信したパケットを、GPC3500内の適切な論理ユニットにルーティングするように構成され、いくつかのパケットは、PROP3504の固定機能ハードウェア・ユニット及び/又はラスタ・エンジン3508にルーティングされてもよく、他のパケットは、プリミティブ・エンジン3512又はSM3514によって処理されるようにDPC3506にルーティングされてもよい。少なくとも一実施例では、パイプライン・マネージャ3502は、ニューラル・ネットワーク・モデル及び/又はコンピューティング・パイプラインを実装するように、DPC3506のうちの少なくとも1つを構成する。
【0333】
少なくとも一実施例では、PROPユニット3504は、ラスタ・エンジン3508及びDPC3506によって生成されたデータを、
図39と併せて上でより詳細に説明したパーティション・ユニット3922のラスタ動作(ROP)ユニットにルーティングするように構成される。少なくとも一実施例では、PROPユニット3504は、色ブレンディングの最適化を実行し、ピクセル・データを組織化し、アドレス・トランスレーションを実行し、その他の動作を行うように構成される。少なくとも一実施例では、ラスタ・エンジン3508は、少なくとも一実施例では様々なラスタ動作を実行するように構成されたいくつかの固定機能ハードウェア・ユニットを、限定することなく含み、ラスタ・エンジン3508は、限定することなく、セットアップ・エンジン、粗いラスタ・エンジン、選別エンジン、クリッピング・エンジン、細かいラスタ・エンジン、タイル合体エンジン、及びこれらの任意の好適な組合せを含む。少なくとも一実施例では、セットアップ・エンジンは、変換された頂点を受信し、頂点によって定義された幾何プリミティブに関連付けられた平面方程式を生成し、平面方程式が、粗いラスタ・エンジンに送信されて、プリミティブに対するカバレッジ情報(たとえば、タイルのx、yカバレッジ・マスク)が生成され、粗いラスタ・エンジンの出力が、選別エンジンに送信され、ここでzテストに落ちたプリミティブに関連付けられたフラグメントが選別され、クリッピング・エンジンに送信され、ここで視錐台の外側にあるフラグメントがクリップされる。少なくとも一実施例では、クリッピング及び選別を通過したフラグメントは、細かいラスタ・エンジンに渡されて、セットアップ・エンジンによって生成された平面方程式に基づき、ピクセル・フラグメントに対する属性が生成される。少なくとも一実施例では、ラスタ・エンジン3508の出力は、DPC3506内に実装されたフラグメント・シェーダによってなど任意の好適なエンティティによって処理されることになるフラグメントを含む。
【0334】
少なくとも一実施例では、GPC3500に含まれる各DPC3506は、限定することなく、Mパイプ・コントローラ(「MPC」:M-Pipe Controller)3510、プリミティブ・エンジン3512、1つ又は複数のSM3514、及びこれらの任意の好適な組合せを含む。少なくとも一実施例では、MPC3510は、DPC3506の動作を制御して、パイプライン・マネージャ3502から受信したパケットを、DPC3506内の適切なユニットにルーティングする。少なくとも一実施例では、頂点に関連付けられたパケットは、頂点に関連付けられた頂点属性をメモリからフェッチするように構成されたプリミティブ・エンジン3512にルーティングされ、対照的に、シェーダ・プログラムに関連付けられたパケットは、SM3514に送信されてもよい。
【0335】
少なくとも一実施例では、SM3514は、いくつかのスレッドにより表されたタスクを処理するように構成されたプログラム可能なストリーミング・プロセッサを、限定することなく含む。少なくとも一実施例では、SM3514はマルチスレッド化されており、スレッドの特定のグループからの複数のスレッド(たとえば、32個のスレッド)を同時に実行するように構成され、単一命令複数データ(SIMD)アーキテクチャを実装し、ここでスレッドのグループ(ワープ)内の各スレッドは、同じ命令セットに基づき、異なるデータ・セットを処理するように構成される。少なくとも一実施例では、スレッド・グループ内のすべてのスレッドが同じ命令を実行する。少なくとも一実施例では、SM3514は、単一命令複数スレッド(SIMT)アーキテクチャを実装し、ここで、スレッド・グループの各スレッドは、同じ命令セットに基づき、異なるデータ・セットを処理するように構成されるが、スレッド・グループ内の個々のスレッドは、実行中に発散することが許容される。少なくとも一実施例では、プログラム・カウンタ、コール・スタック、及び実行状態がワープごとに維持されて、ワープ内のスレッドが発散するときに、ワープ間の同時処理、及びワープ内での直列実行が可能になる。別の実施例では、プログラム・カウンタ、コール・スタック、及び実行状態が個々のスレッドごとに維持されて、すべてのスレッド間、ワープ内、及びワープ間で等しい同時処理が可能になる。少なくとも一実施例では、実行状態が個々のスレッドごとに維持され、同じ命令を実行しているスレッドが、より効率的になるように収束され並列に実行されてもよい。SM3514の少なくとも一実施例は、以下でさらに詳細に説明される。
【0336】
少なくとも一実施例では、MMU3518は、GPC3500とメモリ・パーティション・ユニット(たとえば、
図34のパーティション・ユニット3422)との間でインターフェースを提供し、MMU3518は、仮想アドレスから物理アドレスへのトランスレーション、メモリ保護、及びメモリ要求の調停を提供する。少なくとも一実施例では、MMU3518は、仮想アドレスからメモリの物理アドレスへのトランスレーションを実行するための1つ又は複数のトランスレーション・ルックアサイド・バッファ(「TLB」)を提供する。
【0337】
1つ若しくは複数の実施例に関連する推論及び/又は訓練の動作を実行するために、推論及び/又は訓練論理1415が使用される。推論及び/又は訓練論理1415に関する詳細事項は、
図14A及び/又は
図14Bと併せて以下に提供される。少なくとも一実施例では、深層学習アプリケーション・プロセッサは、GPC3500に提供される情報を予測又は推論するようにニューラル・ネットワークなどの機械学習モデルを訓練するために使用される。少なくとも一実施例では、GPC3500は、別のプロセッサ若しくはシステムによって、又はGPC3500によって訓練されてきた訓練済み機械学習モデル(たとえば、ニューラル・ネットワーク)に基づき、情報を推論又は予測するために使用される。少なくとも一実施例では、GPC3500は、本明細書に記載の1つ又は複数のニューラル・ネットワークのユース・ケースを実行するために使用されてもよい。
【0338】
図36は、少なくとも一実施例による並列処理ユニット(「PPU」)のメモリ・パーティション・ユニット3600を示す。少なくとも一実施例では、パーティション・ユニット3600は、限定することなく、ラスタ演算(「ROP」)ユニット3602、レベル2(「L2」)キャッシュ3604、メモリ・インターフェース3606、及びそれらの任意の好適な組合せを含む。一実施例では、メモリ・インターフェース3606はメモリに結合される。一実施例では、メモリ・インターフェース3606は、高速データ転送のために、32、64、128、1024ビットのデータ・バスなどを実装してもよい。少なくとも一実施例では、PPUは、パーティション・ユニット3600の対当たりにメモリ・インターフェース3606を1つの、U個のメモリ・インターフェース3606を組み込んでおり、ここでパーティション・ユニット3600の各対は、対応するメモリ・デバイスに接続される。たとえば、少なくとも一実施例では、PPUは、高帯域幅メモリ・スタック、又はグラフィックス・ダブル・データ・レート、バージョン5、同期ダイナミック・ランダム・アクセス・メモリ(「GDDR5 SDRAM」)など、最大Y個のメモリ・デバイスに接続されてもよい。
【0339】
少なくとも一実施例では、メモリ・インターフェース3606は、高帯域幅メモリの第2世代(「HBM2」:high bandwidth memory second generation)メモリ・インターフェースを実装し、YはUの半分に等しい。少なくとも一実施例では、HBM2メモリ・スタックは、PPUと同じ物理パッケージに位置付けられて、従来のGDDR5 SDRAMシステムに比べて実質的な電力と面積の節約を実現する。少なくとも一実施例では、各HBM2スタックは、限定することなく4個のメモリ・ダイを含み、Yは4に等しく、各HBM2スタックは、1つのダイ当たりに2つの128ビット・チャネルの合計8チャネル、及び1024ビットのデータ・バス幅を含む。少なくとも一実施例では、メモリは、1ビット・エラー訂正2ビット・エラー検出(「SECDED」:Single-Error Correcting Double-Error Detecting)エラー訂正コード(「ECC」)をサポートしてデータを保護する。ECCは、データ破損を受けやすいコンピュート・アプリケーションに、より高い信頼性を提供する。
【0340】
少なくとも一実施例では、PPUは、マルチ・レベルのメモリ階層を実装する。少なくとも一実施例では、メモリ・パーティション・ユニット3600は、統合されたメモリをサポートして、中央処理装置(「CPU」)及びPPUメモリに単一の統合された仮想アドレス空間を提供し、仮想メモリ・システム間でのデータの共有を可能にする。少なくとも一実施例では、他のプロセッサに位置付けられたメモリにPPUがアクセスする頻度を追跡して、より頻繁にページにアクセスしているPPUの物理メモリに、メモリ・ページが確実に移動されるようにする。少なくとも一実施例では、高速GPU相互接続3408は、アドレス・トランスレーション・サービスをサポートして、PPUが直接CPUのページ・テーブルにアクセスできるようにし、PPUによるCPUメモリへのフル・アクセスを実現する。
【0341】
少なくとも一実施例では、コピー・エンジンは、複数のPPU間、又はPPUとCPUの間で、データを転送する。少なくとも一実施例では、コピー・エンジンは、ページ・テーブルにマッピングされていないアドレスについてページ誤りを生成することができ、次いでメモリ・パーティション・ユニット3600がページ誤りに対応して、アドレスをページ・テーブルにマッピングし、その後で、コピー・エンジンが転送を実行する。少なくとも一実施例では、メモリは、複数のプロセッサ間でコピー・エンジンの複数の動作についてピン留めされて(たとえば、ページ移動不可能にされて)、実質的に利用可能なメモリを低減させる。少なくとも一実施例では、ハードウェアのページ誤りがある場合、メモリ・ページが常駐であるかどうかに関わらず、アドレスをコピー・エンジンに渡すことができ、コピー・プロセスは透過的である。
【0342】
少なくとも一実施例によれば、
図34のメモリ3404又は他のシステム・メモリからのデータは、メモリ・パーティション・ユニット3600によってフェッチされ、L2キャッシュ3604に記憶され、このL2キャッシュは、オン・チップに位置付けられ、様々GPC間で共有される。少なくとも一実施例では、各メモリ・パーティション・ユニット3600は、対応するメモリ・デバイスに関連付けられたL2キャッシュの少なくとも一部分を、限定することなく含む。少なくとも一実施例では、より低いレベルのキャッシュが、GPC内の様々なユニットに実装される。少なくとも一実施例では、SM3514のそれぞれは、レベル1(「L1」)キャッシュを実装してもよく、ここでL1キャッシュは、特定のSM3514専用のプライベート・メモリであり、L2キャッシュ3604からのデータは、SM3514の機能ユニットで処理するために、L1キャッシュのそれぞれにフェッチされ記憶される。少なくとも一実施例では、L2キャッシュ3604は、メモリ・インターフェース3606及びXバー3420に結合される。
【0343】
少なくとも一実施例では、ROPユニット3602は、色圧縮、ピクセル・ブレンディングなど、ピクセル色に関係するグラフィックス・ラスタ演算を実行する。ROPユニット3602は、少なくとも一実施例では、ラスタ・エンジン3508と併せて深度テストを実装して、ピクセル・フラグメントに関連付けられたサンプル・ロケーションの深度を、ラスタ・エンジン3508の選別エンジンから受信する。少なくとも一実施例では、深度は、フラグメントに関連付けられたサンプル・ロケーションの深度バッファにおける対応する深度と比べてテストされる。少なくとも一実施例では、フラグメントが、サンプル・ロケーションの深度テストを通過すると、ROPユニット3602は、深度バッファを更新し、深度テストの結果をラスタ・エンジン3508に送信する。パーティション・ユニット3600の数はGPCの数とは異なってもよく、したがって、各ROPユニット3602は、少なくとも一実施例では、GPCのそれぞれに結合されてもよいことが理解されよう。少なくとも一実施例では、ROPユニット3602は、異なるGPCから受信したパケットを追跡し、ROPユニット3602によって生成された結果を、Xバー3420を通してどれにルーティングするかを判定する。
【0344】
図37は、少なくとも一実施例による、ストリーミング・マルチプロセッサ(「SM」)3700を示す。少なくとも一実施例では、SM3700は、
図35のSMである。少なくとも一実施例では、SM3700は、限定することなく、命令キャッシュ3702、1つ又は複数のスケジューラ・ユニット3702、レジスタ・ファイル3708、1つ又は複数の処理コア(「コア」)3710、1つ又は複数の特殊機能ユニット(「SFU」:special function unit)3712、1つ又は複数のロード/ストア・ユニット(「LSU」load/store unit)3714、相互接続ネットワーク3716、共有メモリ/レベル1(「L1」)キャッシュ3718、及びこれらの任意の好適な組合せを含む。少なくとも一実施例では、ワーク分配ユニットは、並列処理ユニット(「PPU」)の汎用処理クラスタ(「GPC」)で実行するためにタスクをディスパッチし、各タスクは、GPC内の特定のデータ処理クラスタ(「DPC」)に配分され、タスクがシェーダ・プログラムに関連する場合には、タスクはSM3700のうちの1つに配分される。少なくとも一実施例では、スケジューラ・ユニット3704は、ワーク分配ユニットからタスクを受信し、SM3700に割り当てられた1つ又は複数のスレッド・ブロックについて命令スケジューリングを管理する。少なくとも一実施例では、スケジューラ・ユニット3704は、並列スレッドのワープとして実行できるようにスレッド・ブロックをスケジューリングし、ここで各スレッド・ブロックは、少なくとも1つのワープに配分される。少なくとも一実施例では、各ワープは、スレッドを実行する。少なくとも一実施例では、スケジューラ・ユニット3704は、複数の異なるスレッド・ブロックを管理して、異なるスレッド・ブロックにワープを配分し、次いで複数の異なる連動グループからの命令を、各クロック・サイクル中に様々な機能ユニット(たとえば、処理コア3710、SFU3712、及びLSU3714)にディスパッチする。
【0345】
少なくとも一実施例では、連動グループとは、通信するスレッドのグループを組織化するためのプログラミング・モデルを指し、このモデルは、スレッドが通信する粒度をデベロッパが表せるようにして、より豊富でより効率的な並列分解の表現を可能にする。少なくとも一実施例では、連動した起動APIは、並列アルゴリズムを実行できるようにスレッド・ブロック間の同期をサポートする。少なくとも一実施例では、従来のプログラミング・モデルのアプリケーションは、連動スレッドを同期するための単一の簡単な構造、すなわちスレッド・ブロックのすべてのスレッドにわたるバリア(たとえば、syncthreads()関数)を提供する。しかし、少なくとも一実施例では、プログラマは、スレッド・ブロックの粒度よりも小さいスレッド・グループを定義し、定義されたグループ内で同期して、集合的なグループ全般にわたる機能インターフェースの形で、より高い性能、設計の融通性、及びソフトウェア再利用を可能にしてもよい。少なくとも一実施例では、連動グループによって、プログラマは、サブ・ブロック(すなわち、単一スレッドと同じ大きさ)の粒度及びマルチ・ブロックの粒度において、スレッドのグループを明示的に定義し、連動グループ内のスレッドに対する同期などの集合的な動作を実行できるようになる。プログラミング・モデルは、ソフトウェア境界を横切るクリーンな合成をサポートし、それにより、ライブラリ及びユーティリティ関数を、収束について仮定する必要なくそれらのローカルなコンテキスト内で安全に同期することができる。少なくとも一実施例では、連動グループのプリミティブは、プロデューサ-コンシューマ並列性、日和見並列性(opportunistic parallelism)、及びスレッド・ブロックのグリッド全体にわたるグローバルな同期を限定することなく含む新しいパターンの連動並列性を可能にする。
【0346】
少なくとも一実施例では、ディスパッチ・ユニット3706は、機能ユニットの1つ又は複数に命令を送信するように構成され、スケジューラ・ユニット3704は、同じワープからの2つの異なる命令を、各クロック・サイクル中にディスパッチできるようにする2つのディスパッチ・ユニット3706を限定することなく含む。少なくとも一実施例では、各スケジューラ・ユニット3704は、単一のディスパッチ・ユニット3706又は追加のディスパッチ・ユニット3706を含む。
【0347】
少なくとも一実施例では、各SM3700は、SM3700の機能ユニットにレジスタのセットを提供するレジスタ・ファイル3708を限定することなく含む。少なくとも一実施例では、レジスタ・ファイル3708は、各機能ユニットがレジスタ・ファイル3708の専用部分に配分されるように、それぞれの機能ユニット間で分割される。少なくとも一実施例では、レジスタ・ファイル3708は、SM3700によって実行されている異なるワープ間で分割され、レジスタ・ファイル3708は、機能ユニットのデータ経路に接続されたオペランド用の一時的なストレージを提供する。少なくとも一実施例では、各SM3700は、限定することなく、複数のL処理コア3710を含む。少なくとも一実施例では、各SM3700は、限定することなく、多数の(たとえば、128個以上の)個別の処理コア3710を含む。少なくとも一実施例では、各処理コア3710は、少なくとも一実施例では、浮動小数点算術論理演算ユニット及び整数算術論理演算ユニットを限定することなく含む完全にパイプライン化された、単精度の、倍精度の、及び/又は混合精度の処理ユニットを限定することなく含む。少なくとも一実施例では、浮動小数点算術論理演算ユニットは、浮動小数点演算のためのIEEE754-2008規格を実装する。少なくとも一実施例では、処理コア3710は、限定することなく、64個の単精度(32ビット)浮動小数点コア、64個の整数コア、32個の倍精度(64ビット)浮動小数点コア、及び8個のテンソル・コアを含む。
【0348】
テンソル・コアは、少なくとも一実施例による行列演算を実行するように構成される。少なくとも一実施例では、1つ又は複数のテンソル・コアは、処理コア3710に含まれる。少なくとも一実施例では、テンソル・コアは、ニューラル・ネットワークの訓練及び推論のための畳み込み演算など、深層学習の行列演算を実行するように構成される。少なくとも一実施例では、各テンソル・コアは、4×4の行列で動作し、行列の積和演算(matrix multiply and accumulate operation)D=A×B+Cを実行し、ここでA、B、C、及びDは4×4の行列である。
【0349】
少なくとも一実施例では、行列乗算の入力A及びBは、16ビットの浮動小数点行列であり、和の行列C及びDは、16ビットの浮動小数点又は32ビットの浮動小数点行列である。少なくとも一実施例では、テンソル・コアは、32ビットの浮動小数点の和を有する16ビットの浮動小数点入力データで動作する。少なくとも一実施例では、16ビットの浮動小数点乗算は、64個の演算を使用し、結果的に完全精度の積をもたらし、次いでその積が、4×4×4の行列乗算の他の中間積との32ビット浮動小数点加算を使用して加算される。テンソル・コアを使用して、少なくとも一実施例では、これらの小さい要素から構築される、はるかに大きい2次元又はさらに高次元の行列演算が実行される。少なくとも一実施例では、CUDA9C++APIなどのAPIは、CUDA-C++プログラムからテンソル・コアを効率的に使用するために、特殊な行列ロード演算、行列積和演算、及び行列ストア演算を公開している。少なくとも一実施例では、CUDAレベルにおいて、ワープ・レベル・インターフェースは、ワープの32スレッドすべてにわたる16×16のサイズの行列を仮定している。
【0350】
少なくとも一実施例では、各SM3700は、特殊関数(たとえば、属性評価、逆数平方根など)を実行するM個のSFU3712を、限定することなく含む。少なくとも一実施例では、SFU3712は、限定することなく、階層ツリー・データ構造をトラバースするように構成されたツリー・トラバーサル・ユニットを含む。少なくとも一実施例では、SFU3712は、テクスチャ・マップのフィルタリング動作を実行するように構成されたテクスチャ・ユニットを、限定することなく含む。少なくとも一実施例では、テクスチャ・ユニットは、メモリ及びサンプル・テクスチャ・マップからテクスチャ・マップ(たとえば、テクセルの2Dアレイ)をロードして、SM3700により実行されるシェーダ・プログラムで使用するためのサンプリングされたテクスチャ値を生成するように構成される。少なくとも一実施例では、テクスチャ・マップは、共有メモリ/レベル1キャッシュ3718に記憶される。少なくとも一実施例では、テクスチャ・ユニットは、少なくとも一実施例によれば、ミップ・マップ(たとえば、詳細さのレベルが異なるテクスチャ・マップ)を使用したフィルタリング動作などのテクスチャ動作を実装する。少なくとも一実施例では、各SM3700は、限定することなく、2つのテクスチャ・ユニットを含む。
【0351】
各SM3700は、少なくとも一実施例では、共有メモリ/L1キャッシュ3718とレジスタ・ファイル3708の間でロード及びストア動作を実装するN個のLSU3714を、限定することなく含む。各SM3700は、少なくとも一実施例では、機能ユニットのそれぞれをレジスタ・ファイル3708に接続し、LSU3714をレジスタ・ファイル3708に接続する相互接続ネットワーク3716と、共有メモリ/L1キャッシュ3718を、限定することなく含む。少なくとも一実施例では、相互接続ネットワーク3716はクロスバーであり、このクロスバーは、いずれかの機能ユニットをレジスタ・ファイル3708のいずれかのレジスタに接続し、LSU3714をレジスタ・ファイル3708と共有メモリ/L1キャッシュ3718のメモリ・ロケーションとに接続するように構成されてもよい。
【0352】
少なくとも一実施例では、共有メモリ/L1キャッシュ3718は、少なくとも一実施例では、SM3700とプリミティブ・エンジンの間、及びSM3700のスレッド間でデータ・ストレージ及び通信を可能にするオン・チップ・メモリのアレイである。少なくとも一実施例では、共有メモリ/L1キャッシュ3718は、限定することなく、128KBのストレージ容量を備え、SM3700からパーティション・ユニットに向かう経路にある。少なくとも一実施例では、共有メモリ/L1キャッシュ3718は、少なくとも一実施例では、読取り及び書込みをキャッシュするために使用される。少なくとも一実施例では、共有メモリ/L1キャッシュ3718、L2キャッシュ、及びメモリのうちの1つ又は複数は、補助ストレージである。
【0353】
少なくとも一実施例では、データ・キャッシュと共有メモリ機能とを単一のメモリ・ブロックに組み合わせることによって、両方のタイプのメモリ・アクセスについて性能が向上する。少なくとも一実施例では、容量は、共有メモリを使用しないプログラムによってキャッシュとして使用され、又は使用可能であり、それにより、共有メモリが容量の半分を使用するように構成されている場合、テクスチャ及びロード/ストア動作が、残りの容量を使用することができる。少なくとも一実施例によれば、共有メモリ/L1キャッシュ3718内に統合することによって、共有メモリ/L1キャッシュ3718が、データをストリームするための高スループットの管として機能しながら、同時に高帯域幅及び低レイテンシのアクセスを、頻繁に再使用されるデータに提供できるようになる。少なくとも一実施例では、汎用並列計算向けに構成されるときには、グラフィックス処理と比べてより簡単な構成を使用することができる。少なくとも一実施例では、固定機能のグラフィックス・プロセッシング・ユニットがバイパスされて、はるかに簡単なプログラミング・モデルが作製される。汎用並列計算の構成では、ワーク分配ユニットは、少なくとも一実施例においてスレッド・ブロックを直接DPCに割当て及び分配する。少なくとも一実施例では、ブロック内のスレッドは、各スレッドが確実に一意の結果を生成するように、計算において一意のスレッドIDを使用して同じプログラムを実行し、SM3700を使用して、プログラムを実行し計算を行い、共有メモリ/L1キャッシュ3718を使用してスレッド間で通信し、LSU3714を使用して、共有メモリ/L1キャッシュ3718及びメモリ・パーティション・ユニットを介してグローバル・メモリを読み取り、書き込む。少なくとも一実施例では、汎用並列計算向けに構成されるときには、SM3700は、DCP上で新規のワークを起動するためにスケジューラ・ユニット3702が使用できるコマンドを書き込む。
【0354】
少なくとも一実施例では、PPUは、デスクトップ・コンピュータ、ラップトップ・コンピュータ、タブレット・コンピュータ、サーバ、スーパーコンピュータ、スマート・フォン(たとえば、ワイヤレスの携帯型デバイス)、パーソナル・デジタル・アシスタント(「PDA」)、デジタル・カメラ、車両、頭装着型ディスプレイ、携帯型電子デバイスなどに含まれ、又はこれらに結合される。少なくとも一実施例では、PPUは、単一の半導体基板に具体化される。少なくとも一実施例では、PPUは、追加のPPU、メモリ、縮小命令セット・コンピュータ(「RISC」)CPU、メモリ管理ユニット(「MMU」)、デジタル-アナログ変換器(「DAC」:digital-to-analog converter)などの1つ又は複数の他のデバイスとともにシステム・オン・チップ(「SoC」)に含まれる。
【0355】
少なくとも一実施例では、PPUは、1つ又は複数のメモリ・デバイスを含むグラフィックス・カードに含まれてもよい。グラフィックス・カードは、デスクトップ・コンピュータのマザーボード上のPCIeスロットとインターフェースをとるように構成されてもよい。少なくとも一実施例では、PPUは、マザーボードのチップセットに含まれる統合グラフィックス・プロセッシング・ユニット(「iGPU」:integrated graphics processing unit)であってもよい。
【0356】
1つ若しくは複数の実施例に関連する推論及び/又は訓練の動作を実行するために、推論及び/又は訓練論理1415が使用される。推論及び/又は訓練論理1415に関する詳細事項は、
図14A及び/又は
図14Bと併せて以下に提供される。少なくとも一実施例では、深層学習アプリケーション・プロセッサは、SM3700に提供される情報を予測又は推論するようにニューラル・ネットワークなどの機械学習モデルを訓練するために使用される。少なくとも一実施例では、SM3700は、別のプロセッサ若しくはシステムによって、又はSM3700によって訓練されてきた訓練済み機械学習モデル(たとえば、ニューラル・ネットワーク)に基づき、情報を推論又は予測するために使用される。少なくとも一実施例では、SM3700は、本明細書に記載の1つ又は複数のニューラル・ネットワークのユース・ケースを実行するために使用されてもよい。
【0357】
少なくとも一実施例では、単一の半導体プラットフォームとは、単独で単体の半導体ベースの集積回路又はチップを指してもよい。少なくとも一実施例では、マルチ・チップ・モジュールは、オン・チップ動作をシミュレートする接続性が向上した状態で使用されてもよく、従来の中央処理装置(「CPU」)及びバスの実装形態の利用を大幅に改善する。少なくとも一実施例では、ユーザの希望に応じて、半導体プラットフォームとは別々に、又は半導体プラットフォームとの様々な組合せで、様々なモジュールがさらに設置されてもよい。
【0358】
少なくとも一実施例では、機械読取り可能で実行可能なコード若しくはコンピュータ制御論理アルゴリズムの形のコンピュータ・プログラムが、メイン・メモリ2004及び/又は二次ストレージに記憶される。コンピュータ・プログラムは、1つ又は複数のプロセッサによって実行された場合に、少なくとも一実施例による様々な機能をシステム2000が実行できるようにする。メモリ2004、ストレージ、及び/又は任意の他のストレージが、コンピュータ読取り可能媒体の考えられる例である。少なくとも一実施例では、二次ストレージとは、フロッピー(登録商標)・ディスク・ドライブ、磁気テープ・ドライブ、コンパクト・ディスク・ドライブ、デジタル多用途ディスク(「DVD」:digital versatile disk)ドライブ、記録デバイス、ユニバーサル・シリアル・バス(「USB」)フラッシュ・メモリなどを表すハード・ディスク・ドライブ及び/若しくはリムーバブル・ストレージ・ドライブなどの任意の好適なストレージ・デバイス又はシステムを指してもよい。少なくとも一実施例では、様々な先の図面のアーキテクチャ及び/又は機能は、CPU2002、並列処理システム2012、CPU2002と並列処理システム2012の両方の機能の少なくとも一部分を実現可能な集積回路、チップセット(たとえば、関連機能を実行するためのユニットとして機能し、販売されるように設計された集積回路のグループなど)、及び集積回路の任意の好適な組合せの文脈において実装される。
【0359】
少なくとも一実施例では、様々な先の図面のアーキテクチャ及び/又は機能は、汎用コンピュータ・システム、回路板システム、エンタテイメント目的専用のゲーム・コンソール・システム、及び特定用途システムなどの文脈において実装される。少なくとも一実施例では、コンピュータ・システム2000は、デスクトップ・コンピュータ、ラップトップ・コンピュータ、タブレット・コンピュータ、サーバ、スーパーコンピュータ、スマート・フォン(たとえば、ワイヤレスの携帯型デバイス)、パーソナル・デジタル・アシスタント(「PDA」)、デジタル・カメラ、車両、頭装着型ディスプレイ、携帯型電子デバイス、モバイル・フォン・デバイス、テレビ、ワークステーション、ゲーム・コンソール、組み込みシステム、及び/又は任意の他のタイプの論理の形をとってもよい。
【0360】
少なくとも一実施例では、並列処理システム2012は、限定することなく、複数の並列処理ユニット(「PPU」)2014、及び関連メモリ2016を含む。少なくとも一実施例では、PPU2014は、相互接続2018及びスイッチ2020又はマルチプレクサを介してホスト・プロセッサ又は他の周辺デバイスに接続される。少なくとも一実施例では、並列処理システム2012は、計算タスクをPPU2014にわたって分配し、これは、たとえば複数のグラフィックス・プロセッシング・ユニット(「GPU」)のスレッド・ブロックにわたる計算タスクの分配の一部として、並列化可能とすることができる。少なくとも一実施例では、メモリは、PPU2014の一部又は全部にわたって共有され、(たとえば、読取り及び/又は書込みアクセスのために)アクセス可能であるが、こうした共有メモリは、PPU2014に常駐しているローカル・メモリ及びレジスタの使用に対して、性能に不利益をもたらすことがある。少なくとも一実施例では、PPU2014の動作は、_syncthreads()などのコマンドを使用することによって同期され、ここで(たとえば、複数のPPU2014にわたって動作している)ブロック内のすべてのスレッドが、進行前にコードのある一定の実行ポイントに到達する。
【0361】
他の変形形態は、本開示の範囲内にある。したがって、開示した技法は、様々な修正及び代替的な構成が可能であるが、それらのうち一定の例示的な実施例が図面に示され、上で詳細に説明されてきた。しかし、特定の1つ又は複数の開示された形に本開示を限定する意図はなく、その反対に、特許請求の範囲に定義される開示の趣旨及び範囲に入るすべての修正形態、代替的な構成、及び等価物を網羅することを意図している。
【0362】
開示される実施例を説明する文脈において(特に、以下の特許請求の範囲の文脈において)「a」及び「an」及び「the」という用語、並びに同様の指示物を使用することは、本明細書に別段の記載のない限り、又は文脈によって明らかに否定されない限り、単数と複数の両方を網羅すると解釈されるべきである。「備える(comprising)」、「有する(having)」、「含む(including)」、「収容する(containing)」という用語は、別段の記載のない限り、オープンエンドの用語(「含むが、これに限定されない」を意味する)と解釈される。「接続される」という用語は、修飾されずに物理的接続を指している場合には、何か介在するものがあったとしても、部分的に又は完全に中に収容される、取り付けられる、又は互いに接合されるものとして解釈される。本明細書において値の範囲を詳述することは、本明細書において別段の記載がない限り、またそれぞれ別々の値が、本明細書に個々に詳述されているかのように明細書に組み込まれていない限り、範囲内に含まれるそれぞれ別々の値を個々に参照する簡潔な方法として機能することを単に意図しているにすぎない。「セット」(たとえば、「アイテムのセット」)又は「サブセット」という用語の使用は、文脈によって別段の記載がない、又は否定されていない限り、1つ又は複数の部材を備える空ではない集合として解釈されるべきである。さらに、文脈によって別段の記載がない、又は否定されていない限り、対応するセットの「サブセット」という用語は、対応するセットの厳密なサブセットを必ずしも指すのではなく、サブセットと対応するセットは等しくてもよい。
【0363】
「A、B、及びCのうちの少なくとも1つ」又は「A、B、及びCのうちの少なくとも1つ」という形の言い回しなどの結合語は、別段の具体的な記載のない限り、又は文脈によって明確に否定されていない限り、項目、用語などが、AかBかCである、又はAとBとCのセットのいずれかの空でないサブセットであることを提示するために一般に使用される文脈で理解される。たとえば、3つの部材を有するセットの説明的な例では、「A、B、及びCのうちの少なくとも1つ」並びに「A、B、及びCのうちの少なくとも1つ」という結合句は、次のセットのうちのいずれかを指す:{A}、{B}、{C}、{A、B}、{A、C}、{B、C}、{A、B、C}。したがって、こうした結合語は、ある一定の実施例が、少なくとも1つのA、少なくとも1つのB、及び少なくとも1つのCのそれぞれの存在を必要とすることを全体的に暗示するものではない。さらに、別段の記載のない、又は文脈によって否定されていない限り、「複数」という用語は、複数である状態を示す(たとえば、「複数の項目(a plurality of items)」は複数の項目(multiple items)を示す)。複数である項目の数は、少なくとも2つであるが、明示的に、又は文脈によって示されている場合にはそれより多くてもよい。さらに、別段の記載のない、又は文脈からそうでないことが明らかでない限り、「~に基づく」という言い回しは、「少なくとも部分的に~に基づく」を意味し、「~だけに基づく」を意味しない。
【0364】
本明細書に記載のプロセスの動作は、本明細書に別段の記載のない、又は文脈によって明確に否定されない限り、任意の好適な順序で実行することができる。少なくとも一実施例では、本明細書に記載のプロセス(又はその変形及び/又は組合せ)などのプロセスは、実行可能命令で構成された1つ又は複数のコンピュータ・システムの制御下で実行され、1つ又は複数のプロセッサ上で、ハードウェアによって、又はそれらの組合せによって集合的に実行されるコード(たとえば、実行可能な命令、1つ若しくは複数のコンピュータ・プログラム、又は1つ若しくは複数のアプリケーション)として実装される。少なくとも一実施例では、コードは、たとえば1つ又は複数のプロセッサによって実行可能な複数の命令を備えるコンピュータ・プログラムの形で、コンピュータ読取り可能ストレージ媒体に記憶される。少なくとも一実施例では、コンピュータ読取り可能ストレージ媒体は、一時的な信号(たとえば、伝播する一時的な電気若しくは電磁送信)を除外するが、一時的な信号のトランシーバ内の非一時的なデータ・ストレージ回路(たとえば、バッファ、キャッシュ、及びキュー)を含む非一時的なコンピュータ読取り可能ストレージ媒体である。少なくとも一実施例では、コード(たとえば、実行可能コード又はソース・コード)は、1つ又は複数の非一時的なコンピュータ読取り可能ストレージ媒体のセットに記憶され、このストレージ媒体には、コンピュータ・システムの1つ又は複数のプロセッサによって実行されたときに(すなわち、実行された結果として)、コンピュータ・システムに本明細書に記載の動作を実行させる実行可能命令が記憶されている(又は、実行可能命令を記憶するための他のメモリを有する)。非一時的なコンピュータ読取り可能ストレージ媒体のセットは、少なくとも一実施例では、複数の非一時的なコンピュータ読取り可能ストレージ媒体を備え、複数の非一時的なコンピュータ読取り可能ストレージ媒体の個々の非一時的なストレージ媒体のうちの1つ又は複数には、すべてのコードがないが、複数の非一時的なコンピュータ読取り可能ストレージ媒体は、集合的にすべてのコードを記憶している。少なくとも一実施例では、実行可能命令は、異なる命令が異なるプロセッサによって実行されるように実行され、たとえば、非一時的なコンピュータ読取り可能ストレージ媒体は命令を記憶し、メインの中央処理装置(「CPU」)は一部の命令を実行し、グラフィックス・プロセッシング・ユニット(「GPU」)は他の命令を実行する。少なくとも一実施例では、コンピュータ・システムの異なる構成要素は、別々のプロセッサを有し、異なるプロセッサは、命令の異なるサブセットを実行する。
【0365】
したがって、少なくとも一実施例では、コンピュータ・システムは、本明細書に記載のプロセスの動作を単独で又は集合的に実行する1つ又は複数のサービスを実装するように構成され、こうしたコンピュータ・システムは、動作の実行を可能にする適用可能なハードウェア及び/又はソフトウェアで構成される。さらに、本開示の少なくとも一実施例を実装するコンピュータ・システムは、単一のデバイスであり、別の実施例では、異なるやり方で動作する複数のデバイスを備える分散型のコンピュータ・システムであり、それにより単一のデバイスがすべての動作を実行しないように分散型のコンピュータ・システムが本明細書に記載の動作を実行する。
【0366】
本明細書に提供されるあらゆる例、又は例示的な言葉(たとえば、「など」)の使用は、本開示の実施例をより明らかにすることだけを意図しており、別段の主張のない限り、本開示の範囲に制限を加えるものではない。本明細書のいかなる言葉も、特許請求されていない任意の要素を、本開示の実践に不可欠なものとして示すと解釈されるべきではない。
【0367】
本明細書に引用される出版物、特許出願、及び特許を含むすべての参考文献は、各参考文献が参照により組み込まれることがあたかも個別に明確に示され、その全体が本明細書に記載されたかのように、それと同程度まで参照により本明細書に組み込まれる。
【0368】
明細書及び特許請求の範囲において、「結合される」及び「接続される」という用語が、その派生語とともに使用されてもよい。これらの用語は、互いに同義語として意図されていない場合があることを理解すべきである。むしろ、特定の例では、「接続される」又は「結合される」は、2つ以上の要素が物理的又は電気的に互いに直接又は間接的に接触していることを示すために使用されてもよい。また「結合される」は、2つ以上の要素が直接互いに接触していないが、なお互いに連動又は相互作用することを意味してもよい。
【0369】
別段の具体的な記載のない限り、明細書全体を通して「処理する」、「コンピューティング」、「計算する」、又は「判定する」などの用語は、コンピューティング・システムのレジスタ及び/又はメモリ内の、電子的などの物理的な量として表されるデータをコンピューティング・システムのメモリ、レジスタ、又は他のそのような情報ストレージ・デバイス、送信デバイス、若しくはディスプレイ・デバイス内の物理的な量として同様に表される他のデータになるよう操作及び/又は変換するコンピュータ若しくはコンピューティング・システム、又は同様の電子コンピューティング・デバイスの行為及び/又はプロセスを指す。
【0370】
同様に、「プロセッサ」という用語は、レジスタ及び/又はメモリからの電子データを処理し、その電子データを、レジスタ及び/又はメモリに記憶することができる他の電子データに変換する任意のデバイス、又はデバイスの一部分を指してもよい。非限定的な例として、「プロセッサ」は、CPU又はGPUであってもよい。「コンピューティング・プラットフォーム」は、1つ又は複数のプロセッサを備えてもよい。本明細書で使用する「ソフトウェア」プロセスは、たとえば、タスク、スレッド、及び知的エージェントなど、経時的にワークを実行するソフトウェア及び/又はハードウェアのエンティティを含んでもよい。また、各プロセスは、命令を直列で又は並列で連続的に又は断続的に実行するための複数のプロセスを指してもよい。「システム」及び「方法」という用語は、1つ又は複数の方法をシステムが具体化することができ、方法がシステムと考えられてもよい場合に限り、本明細書において交換可能に使用される。
【0371】
本明細書では、アナログ・データ又はデジタル・データを得る、取得する、受信する、又はそれらをサブシステム、コンピュータ・システム、又はコンピュータ実装機械に入力することに言及することができる。アナログ・データ又はデジタル・データを得る、取得する、受信する、又は入力するプロセスは、関数呼出し、又はアプリケーション・プログラミング・インターフェースへの呼出しのパラメータとしてデータを受信するなど、様々なやり方で実現することができる。いくつかの実装形態では、アナログ・データ又はデジタル・データを得る、取得する、受信する、又は入力するプロセスは、直列又は並列のインターフェースを介してデータを転送することによって実現することができる。別の実装形態では、アナログ・データ又はデジタル・データを得る、取得する、受信する、又は入力するプロセスは、提供するエンティティから取得するエンティティにコンピュータ・ネットワークを介してデータを転送することによって実現することができる。また、アナログ・データ又はデジタル・データを提供する、出力する、送信する、送る、又は提示することにも言及することができる。様々な例では、アナログ・データ又はデジタル・データを提供する、出力する、送信する、送る、又は提示するプロセスは、関数呼出しの入力又は出力のパラメータ、アプリケーション・プログラミング・インターフェース若しくはプロセス間通信機構のパラメータとしてデータを転送することによって実現することができる。
【0372】
上の議論は、記載した技法の例示的な実装形態について述べているが、記載した機能を実装するために他のアーキテクチャが使用されてもよく、この他のアーキテクチャは、本開示の範囲内にあることが意図される。さらに、議論を目的として、役割の具体的な分配が定義されているが、様々な機能及び役割は、状況に応じて異なるやり方で分配及び分割されてもよい。
【0373】
さらに、主題は、構造的特徴及び/又は方法論的行為に特有の言葉で説明されてきたが、添付の特許請求の範囲で請求される主題は、必ずしも説明された特有の特徴又は行為に限定されないことが理解されるべきである。むしろ、特有の特徴及び行為は、特許請求の範囲を実装する例示的な形として開示されている。
【0374】
本明細書及び図面は、適宜、限定的ではなく説明的な意味で考えられるべきである。しかし、特許請求の範囲に述べる本発明のより広い趣旨及び範囲から逸脱することなく、本発明に様々な修正及び変更が加えられてもよいことは明らかである。
【0375】
他の変形形態は、本開示の趣旨の範囲内にある。したがって、開示した技法は、様々な修正及び代替的な構成が可能であるが、それらのうち一定の例示的な実施例が図面に示され、上で詳細に説明されてきた。しかし、特定の1つ又は複数の開示された形に本発明を限定する意図はなく、その反対に、添付の特許請求の範囲に定義される本発明の趣旨及び範囲に入るすべての修正、代替的な構成、及び等価物を網羅することを意図している。
【0376】
開示される実施例を説明する文脈において(特に、以下の特許請求の範囲の文脈において)「a」及び「an」及び「the」という用語、並びに同様の指示語を使用することは、本明細書に別段の記載のない限り、又は文脈によって明確に否定されない限り、単数と複数の両方を網羅すると解釈されるべきである。「備える(comprising)」、「有する(having)」、「含む(including)」、及び「収容する(containing)」という用語は、別段の記載のない限り、オープンエンドの用語(すなわち、「含むが、これに限定されない」を意味する)と解釈される。「接続される」という用語は、修飾されずに物理的接続を指している場合には、何か介在するものがあったとしても、部分的に又は完全に中に収容される、取り付けられる、又は互いに接合されるものとして解釈される。本明細書において値の範囲を詳述することは、本明細書において別段の記載がない限り、その範囲内に含まれるそれぞれ別々の値を個々に参照する簡潔な方法として機能することを単に意図しているにすぎず、それぞれの別々の値は、本明細書に個々に詳述されているかのように本明細書に組み込まれる。「セット」(たとえば、「アイテムのセット」)又は「サブセット」という用語の使用は、別段の記載がない限り、又は文脈によって否定されていない限り、1つ又は複数の部材を備える空ではない集合として解釈されるべきである。さらに、別段の記載がない限り、又は文脈によって否定されていない限り、対応するセットの「サブセット」という用語は、対応するセットの厳密なサブセットを必ずしも指すのではなく、サブセットと対応するセットは等しくてもよい。
【0377】
「A、B、及びCのうちの少なくとも1つ」又は「A、B、及びCのうちの少なくとも1つ」という形の言い回しなどの結合語は、別段の具体的な記載のない限り、又は文脈によって明確に否定されていない限り、項目、用語などが、AかBかCであってもよい、又はAとBとCのセットのいずれかの空でないサブセットであってもよいことを提示するために一般に使用される文脈で理解される。たとえば、3つの部材を有するセットの説明的な実例では、「A、B、及びCのうちの少なくとも1つ」並びに「A、B、及びCのうちの少なくとも1つ」という結合句は、次のセットのうちのいずれかを指す:{A}、{B}、{C}、{A、B}、{A、C}、{B、C}、{A、B、C}。したがって、こうした結合語は、ある一定の実施例が、少なくとも1つのA、少なくとも1つのB、及び少なくとも1つのCのそれぞれの存在を必要とすることを全体的に暗示するものではない。さらに、別段の記載のない限り、又は文脈によって否定されていない限り、「複数」という用語は、複数である状態を示す(たとえば、「複数の項目(a plurality of items)」は複数の項目(multiple items)を示す)。複数の項目の数は、少なくとも2つであるが、明示的に、又は文脈によって示されている場合にはそれより多くてもよい。さらに、別段の記載のない限り、又は文脈からそうでないことが明らかでない限り、「~に基づく」という言い回しは、「少なくとも部分的に~に基づく」を意味し、「~だけに基づく」を意味しない。
【0378】
本明細書に記載のプロセスの動作は、本明細書に別段の記載のない限り、又は文脈によって明確に否定されない限り、任意の好適な順序で実行することができる。一実施例では、本明細書に記載のプロセス(又はその変形及び/又は組合せ)などのプロセスは、実行可能命令とともに構成された1つ又は複数のコンピュータ・システムの制御下で実行され、1つ又は複数のプロセッサ上で、ハードウェアによって、又はそれらの組合せによって集合的に実行されるコード(たとえば、実行可能な命令、1つ若しくは複数のコンピュータ・プログラム、又は1つ若しくは複数のアプリケーション)として実装される。一実施例では、コードは、たとえば1つ又は複数のプロセッサによって実行可能な複数の命令を備えるコンピュータ・プログラムの形で、コンピュータ読取り可能ストレージ媒体に記憶される。一実施例では、コンピュータ読取り可能ストレージ媒体は、一時的な信号(たとえば、伝播する一時的な電気若しくは電磁送信)を除外するが、一時的な信号のトランシーバ内の非一時的なデータ・ストレージ回路(たとえば、バッファ、キャッシュ、及びキュー)を含む非一時的なコンピュータ読取り可能ストレージ媒体である。一実施例では、コード(たとえば、実行可能コード又はソース・コード)は、1つ又は複数の非一時的なコンピュータ読取り可能ストレージ媒体のセットに記憶され、このストレージ媒体には、コンピュータ・システムの1つ又は複数のプロセッサによって実行されたときに(すなわち、実行された結果として)、コンピュータ・システムに本明細書に記載の動作を実行させる実行可能命令が記憶されている(又は、実行可能命令を記憶するための他のメモリを有する)。非一時的なコンピュータ読取り可能ストレージ媒体のセットは、一実施例では、複数の非一時的なコンピュータ読取り可能ストレージ媒体を備え、複数の非一時的なコンピュータ読取り可能ストレージ媒体の個々の非一時的なストレージ媒体のうちの1つ又は複数には、すべてのコードがないが、複数の非一時的なコンピュータ読取り可能ストレージ媒体は、集合的にすべてのコードを記憶している。一実施例では、実行可能命令は、異なる命令が異なるプロセッサによって実行されるように実行され、たとえば、非一時的なコンピュータ読取り可能ストレージ媒体は命令を記憶し、メインCPUは一部の命令を実行し、グラフィックス・プロセッサ・ユニットは他の命令を実行する。一実施例では、コンピュータ・システムの異なる構成要素は、別々のプロセッサを有し、異なるプロセッサは、命令の異なるサブセットを実行する。
【0379】
したがって、一実施例では、コンピュータ・システムは、本明細書に記載のプロセスの動作を単独で又は集合的に実行する1つ又は複数のサービスを実装するように構成され、こうしたコンピュータ・システムは、動作の実行を可能にする適用可能なハードウェア及び/又はソフトウェアとともに構成される。さらに、本開示の一実施例を実装するコンピュータ・システムは、単一のデバイスであり、別の実施例では、異なるやり方で動作する複数のデバイスを備える分散型のコンピュータ・システムであり、それにより分散型のコンピュータ・システムが本明細書に記載の動作を実行するようになり、単一のデバイスがすべての動作を実行しないようになる。
【0380】
本明細書に提供されるあらゆる実例、又は例示的な言葉(たとえば、「など」)の使用は、本発明の実施例をより明らかにすることだけを意図しており、別段の主張のない限り、本発明の範囲に制限を加えるものではない。本明細書のいかなる言葉も、特許請求されていない任意の要素を、本発明の実践に不可欠なものとして示すと解釈されるべきではない。
【0381】
発明者らが知っている、本発明を実施するのに最良のモードを含む本開示の実施例が、本明細書において説明される。これらの実施例の変形形態は、先の説明を読めば、当業者には明らかになることがある。発明者らは、当業者がこうした変形形態を適宜採用することを予想しており、発明者らは、本開示の実施例が、本明細書に具体的に説明されたのとは別のやり方で実践されることを意図している。したがって、本開示の範囲は、本明細書に添付の特許請求の範囲に述べる主題のすべての修正形態及び等価物を、適用法により許可されるものとして含む。さらに、上述した要素の実現可能なすべての変形形態における任意の組合せは、本明細書に別段の記載のない限り、又は文脈により明確に否定されていない限り、本開示の範囲によって包含される。
【0382】
本明細書に引用される出版物、特許出願、及び特許を含むすべての参考文献は、各参考文献が参照により組み込まれることがあたかも個別に明確に示され、その全体が本明細書に記載されたかのように、それと同程度まで参照により本明細書に組み込まれる。
【0383】
明細書及び特許請求の範囲において、「結合される」及び「接続される」という用語が、その派生語とともに使用されてもよい。これらの用語は、互いに同義語として意図されていない場合があることを理解すべきである。むしろ、特定の実例では、「接続される」又は「結合される」は、2つ以上の要素が直接又は間接的に物理的又は電気的に互いに接触していることを示すために使用されてもよい。また「結合される」は、2つ以上の要素が互いに直接接触していないが、なお互いに連動又は相互作用することを意味してもよい。
【0384】
別段の具体的な記載のない限り、明細書全体を通して「処理する」、「コンピューティング」、「計算する」、「判定する」などの用語は、コンピューティング・システムのレジスタ及び/又はメモリ内の、電子的などの物理的な量として表されるデータを、コンピューティング・システムのメモリ、レジスタ、又は他のそのような情報ストレージ・デバイス、送信デバイス、若しくはディスプレイ・デバイス内の物理的な量として同様に表される他のデータにするよう操作及び/又は変換するコンピュータ若しくはコンピューティング・システム、又は同様の電子コンピューティング・デバイスの動作及び/又はプロセスを指す。
【0385】
同様に、「プロセッサ」という用語は、レジスタ及び/又はメモリからの電子データを処理し、その電子データを、レジスタ及び/又はメモリに記憶することができる他の電子データに変換する任意のデバイス、又はデバイスの一部分を指してもよい。非限定的な実例として、「プロセッサ」は、中央処理装置(CPU)又はグラフィックス・プロセッシング・ユニット(GPU)であってもよい。「コンピューティング・プラットフォーム」は、1つ又は複数のプロセッサを備えてもよい。本明細書で使用する「ソフトウェア」プロセスは、たとえば、タスク、スレッド、及び知的エージェントなど、経時的にワークを実行するソフトウェア及び/又はハードウェアのエンティティを含んでもよい。また、各プロセスは、命令を直列で又は並列で連続的に又は断続的に実行するための複数のプロセスを指してもよい。「システム」及び「方法」という用語は、システムが1つ又は複数の方法を具体化することができ、方法がシステムと考えられてもよい場合に限り、本明細書において交換可能に使用される。
【0386】
本明細書では、アナログ・データ又はデジタル・データを得る、取得する、受信する、又はそれらをサブシステム、コンピュータ・システム、若しくはコンピュータ実装機械に入力することに言及することがある。アナログ・データ及びデジタル・データを得る、取得する、受信する、又は入力するプロセスは、関数呼出し、又はアプリケーション・プログラミング・インターフェースへの呼出しのパラメータとしてデータを受信するなど、様々な方法で実現することができる。いくつかの実装形態では、アナログ・データ又はデジタル・データを得る、取得する、受信する、又は入力するプロセスは、直列又は並列のインターフェースを介してデータを転送することによって実現することができる。別の実装形態では、アナログ・データ又はデジタル・データを得る、取得する、受信する、又は入力するプロセスは、提供するエンティティから取得するエンティティにコンピュータ・ネットワークを介してデータを転送することによって実現することができる。また、アナログ・データ又はデジタル・データを提供する、出力する、送信する、送る、又は提示することにも言及することがある。様々な実例では、アナログ・データ又はデジタル・データを提供する、出力する、送信する、送る、又は提示するプロセスは、関数呼出しの入力又は出力のパラメータ、アプリケーション・プログラミング・インターフェース若しくはプロセス間通信機構のパラメータとしてデータを転送することによって実現することができる。
【0387】
上の議論は、説明した技法の例示的な実装形態について述べているが、説明した機能を実装するために他のアーキテクチャが使用されてもよく、この他のアーキテクチャは、本開示の範囲内にあることが意図される。さらに、議論を目的として、役割の具体的な分配が定義されているが、様々な機能及び役割は、状況に応じて異なるやり方で分配及び分割されてもよい。
【0388】
さらに、主題は、構造的特徴及び/又は方法論的動作に特有の言語で説明されてきたが、添付の特許請求の範囲で定義される主題は、説明した特有の特徴又は動作に必ずしも限定されないことが理解されるべきである。むしろ、特有の特徴及び動作は、特許請求の範囲を実装する例示的な形として開示されている。