(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2023070010
(43)【公開日】2023-05-18
(54)【発明の名称】バイナリ・クラスタ化を使用した前方誤り訂正符号化
(51)【国際特許分類】
H03M 13/29 20060101AFI20230511BHJP
H03M 13/11 20060101ALI20230511BHJP
H04L 1/00 20060101ALI20230511BHJP
【FI】
H03M13/29
H03M13/11
H04L1/00 B
【審査請求】未請求
【請求項の数】20
【出願形態】OL
【外国語出願】
(21)【出願番号】P 2022079561
(22)【出願日】2022-05-13
(31)【優先権主張番号】17/519,458
(32)【優先日】2021-11-04
(33)【優先権主張国・地域又は機関】US
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.ZIGBEE
(71)【出願人】
【識別番号】501450960
【氏名又は名称】エヌビディア コーポレーション
(74)【代理人】
【識別番号】110000855
【氏名又は名称】弁理士法人浅村特許事務所
(72)【発明者】
【氏名】シュリダール マジャリ
(72)【発明者】
【氏名】ハーシュ マニア―ル
(72)【発明者】
【氏名】レザ マランディアン ハグ
【テーマコード(参考)】
5J065
5K014
【Fターム(参考)】
5J065AD03
5J065AE06
5J065AH01
5K014BA05
(57)【要約】
【課題】バイナリ・クラスタ化された前方誤り訂正(FEC)符号化スキームを提供する。
【解決手段】FECパケットの計算元となるメディア・パケットのバイナリ・クラスタ化された符号化を定義するシステム及び方法が開示される。様々な符号化が、各FECパケットを計算するために、M個のメディア・パケットを含むフレームのどのメディア・パケットを使用するのかを指定する。様々な符号化は、フレームのメディア・パケットの数量(M≦floor(2
N))に基づいて定義され、Nのバイナリ表現の各ビットは、メディア・パケットの異なるクラスタ・ペア符号化に関連付けられる。各クラスタ・ペアは、ビット=0のクラスタ及びビット=1のクラスタを含む。少なくとも2つのクラスタ・ペア符号化を使用するFECパケットの計算が、各メディア・パケットの冗長性を提供し、それによって、メディア・パケットの回復率を向上させる。
【選択図】
図1
【特許請求の範囲】
【請求項1】
コンピュータ実装方法であって、
メディア・パケットのシーケンスを受信するステップであって、前記メディア・パケットの数量は、正の整数Nについて、2N以下であり、各メディア・パケットは、Nビットによって指定される異なるバイナリ値に関連付けられている、ステップと、
メディア・パケットの前記シーケンスから、第1のビットがアサートされている前記バイナリ値に関連付けられている1つ又は複数のメディア・パケットで構成される前記メディア・パケットの第1のクラスタを選択するステップであって、前記数量における第1のメディア・パケット及び前記数量における第2のメディア・パケットは、前記第1のクラスタに含まれている、ステップと、
メディア・パケットの前記シーケンスから、第2のビットがアサートされている前記バイナリ値に関連付けられている1つ又は複数のメディア・パケットで構成される前記メディア・パケットの第2のクラスタを選択するステップであって、前記第1のメディア・パケットは、前記第2のクラスタに含まれており、前記第2のメディア・パケットは、前記第2のクラスタに含まれていない、ステップと、
前記第1のクラスタを使用して、複数の前方誤り訂正(FEC)パケットのうちの第1のFECパケットを計算するステップと、
前記第2のクラスタを使用して、前記複数のFECパケットのうちの第2のFECパケットを計算するステップと
を含む、コンピュータ実装方法。
【請求項2】
前記第1のビットは、前記バイナリ値の最上位ビットである、請求項1に記載のコンピュータ実装方法。
【請求項3】
前記バイナリ値の前記第1のビットは、前記バイナリ値の最下位ビットではない、請求項1に記載のコンピュータ実装方法。
【請求項4】
前記数量における各メディア・パケットに関連付けられている前記バイナリ値は、前記メディア・パケットが受信される前記シーケンスを示す、請求項1に記載のコンピュータ実装方法。
【請求項5】
前記第1及び第2のFECパケットは、排他的OR演算を使用して計算される、請求項1に記載のコンピュータ実装方法。
【請求項6】
メディア・パケットの前記数量、並びに前記第1及び第2のFECパケットを、リモート・デバイスに送信するステップをさらに含む、請求項1に記載のコンピュータ実装方法。
【請求項7】
前記第1及び第2のFECパケットは、並行して計算される、請求項1に記載のコンピュータ実装方法。
【請求項8】
前記複数のFECパケットにおけるいくつかのFECパケットは、パケット・ロス率及び前記数量に基づいて決定される、請求項1に記載のコンピュータ実装方法。
【請求項9】
前記第1のクラスタを選択するステップ、前記第2のクラスタを選択するステップ、前記第1のFECパケットを計算するステップ、又は前記第2のFECパケットを計算するステップのうちの少なくとも1つは、メディア・パケットの前記数量、並びに前記第1及び第2のFECパケットを、ユーザ・デバイスにストリーミングするために、サーバ上又はデータ・センタにおいて実行される、請求項1に記載のコンピュータ実装方法。
【請求項10】
前記第1のクラスタを選択するステップ、前記第2のクラスタを選択するステップ、前記第1のFECパケットを計算するステップ、又は前記第2のFECパケットを計算するステップのうちの少なくとも1つは、クラウド計算環境内で実行される、請求項1に記載のコンピュータ実装方法。
【請求項11】
前記第1のクラスタを選択するステップ、前記第2のクラスタを選択するステップ、前記第1のFECパケットを計算するステップ、又は前記第2のFECパケットを計算するステップのうちの少なくとも1つは、ニューラル・ネットワークのトレーニング、テスト、又は認定のうちの少なくとも1つのために実行される、請求項1に記載のコンピュータ実装方法。
【請求項12】
前記ニューラル・ネットワークは、マシン、ロボット、又は自律走行車のうちの少なくとも1つに採用されているニューラル・ネットワークを含む、請求項11に記載のコンピュータ実装方法。
【請求項13】
送信インターフェースと、
前記送信インターフェースに結合されている前方誤り訂正(FEC)符号化器と
を備えるシステムであって、前記FEC符号化器は、
メディア・パケットであって、前記メディア・パケットの数量は、正の整数Nについて、2N以下であり、各メディア・パケットは、Nビットによって指定される異なるバイナリ値に関連付けられている、メディア・パケットのシーケンスを受信し、
メディア・パケットの前記シーケンスから、第1のビットがアサートされている前記バイナリ値に関連付けられている1つ又は複数のメディア・パケットで構成される前記メディア・パケットの第1のクラスタであって、前記数量における第1のメディア・パケット及び前記数量における第2のメディア・パケットを含む第1のクラスタを選択し、
メディア・パケットの前記シーケンスから、第2のビットがアサートされている前記バイナリ値に関連付けられている1つ又は複数のメディア・パケットで構成される前記メディア・パケットの第2のクラスタであって、前記第1のメディア・パケットを含み、前記第2のメディア・パケットを含まない第2のクラスタを選択し、
前記第1のクラスタを使用して、複数のFECパケットのうちの第1のFECパケットを計算し、
前記第2のクラスタを使用して、前記複数のFECパケットのうちの第2のFECパケットを計算する、
システム。
【請求項14】
前記バイナリ値の前記第1のビットは、最上位ビットである、請求項19に記載のシステム。
【請求項15】
前記バイナリ値の前記第1のビットは、前記バイナリ値の最下位ビットではない、請求項19に記載のシステム。
【請求項16】
前記数量における各メディア・パケットに関連付けられている前記バイナリ値は、前記メディア・パケットが受信される前記シーケンスを示す、請求項19に記載のシステム。
【請求項17】
前記複数のFECパケットの数量は、パケット・ロス率に基づいて決定される、請求項19に記載のシステム。
【請求項18】
前記FEC符号化器は更に、前記送信インターフェースを介して、ネットワークに、メディア・パケットの前記数量、並びに前記第1及び第2のFECパケットを出力する、請求項19に記載のシステム。
【請求項19】
コンピュータ命令を保存する非一時的コンピュータ可読媒体であって、前記コンピュータ命令は、1つ又は複数のプロセッサによって実行される場合に、前記1つ又は複数のプロセッサに、
メディア・パケットのシーケンスを受信するステップであって、前記メディア・パケットの数量は、正の整数Nについて、2N以下であり、各メディア・パケットは、Nビットによって指定される異なるバイナリ値に関連付けられている、ステップと、
メディア・パケットの前記シーケンスから、第1のビットがアサートされている前記バイナリ値に関連付けられている1つ又は複数のメディア・パケットで構成される前記メディア・パケットの第1のクラスタを選択するステップであって、前記数量における第1のメディア・パケット及び前記数量における第2のメディア・パケットは、前記第1のクラスタに含まれている、ステップと、
メディア・パケットの前記シーケンスから、第2のビットがアサートされている前記バイナリ値に関連付けられている1つ又は複数のメディア・パケットで構成される前記メディア・パケットの第2のクラスタを選択するステップであって、前記第1のメディア・パケットは、前記第2のクラスタに含まれており、前記第2のメディア・パケットは、前記第2のクラスタに含まれていない、ステップと、
前記第1のクラスタを使用して、複数の前方誤り訂正(FEC)パケットのうちの第1のFECパケットを計算するステップと、
前記第2のクラスタを使用して、前記複数のFECパケットのうちの第2のFECパケットを計算するステップと
を実行させる、非一時的コンピュータ可読媒体。
【請求項20】
メディア・パケットの前記数量、並びに前記第1及び第2のFECパケットを、リモート・デバイスに送信するステップをさらに含む、請求項19に記載の非一時的コンピュータ可読媒体。
【発明の詳細な説明】
【背景技術】
【0001】
パケット・ロスは、マルチメディア・ストリーミングの性能を低下させる。前方誤り訂正(FEC:Forward Error Correction)は、失われたパケットの回復を可能にすることによって、ネットワーク・パケット・ロスを軽減するために使用され得る手法である。従来のXORベースのFEC手法は、フレーム内の任意のパケットを回復するのに十分な冗長性を提供しないことがよくある(1フレームにはM個のメディア・パケットが含まれている)。冗長性は、単一のFECパケット内のより多くのメディア・パケットをカバーし、及び/又はより多くのFECパケットを計算(及び送信)することによって向上され得る。従来の手法は、複数の失われたパケットが同じメディア・フレームに属している場合に、限られたカバレッジを提供することがよくある。また、従来の手法は、単に重複するメディア・パケットを送信して、メディア・パケットの回復を向上させ得る。
【発明の概要】
【発明が解決しようとする課題】
【0002】
これらの問題、及び/又は先行技術に関連付けられた他の問題に対処し、改善する必要性がある。
【課題を解決するための手段】
【0003】
本開示の実施例は、バイナリ・クラスタ化を使用した前方誤り訂正のための符号化スキームに関する。FECパケットの計算元となるメディア・パケットのバイナリ・クラスタ化された符号化を定義するシステム及び方法が開示されている。様々な符号化がフレーム内のどのメディア・パケットを使用して各FECパケットを計算したのかを指定する(1フレームにはM個のメディア・パケットが含まれる)。様々な符号化はフレーム内のメディア・パケットの数量、M≦floor(2N)、に基づいて定義され得る。Nのバイナリ表現の各ビットは、メディア・パケットの異なるクラスタ・ペア符号化に関連付けられている。各クラスタ・ペアには、ビット=0のクラスタとビット=1のクラスタとが含まれる。
【0004】
例えば、M=64及びN=6であるとき、6ビットは、メディア・パケットに関連付けられるバイナリ値を表す。N=6の場合、6つのクラスタ・ペア(12個のクラスタ符号化)が存在し得る。各クラスタ符号化は、FECパケットを計算するためのメディア・パケットのセットを選択する。フレームのメディア・パケットの各々は、Nビット・バイナリ値0~2N-1のうちのそれぞれの1つに関連付けられている(各値は単一のメディア・パケットに関連付けられている)。フレーム内の任意のパケットを回復するのに十分な冗長性を提供しないことがよくある前述の手法といった従来のXORベースのFEC手法とは対照的に、各特定のメディア・パケットは、1つよりも多いFECパケットによってカバーされないことがある。
【0005】
FECのバイナリ・クラスタ化された符号化のためのシステム、方法、及びコンピュータ可読媒体が説明されている。一実施例では、メディア・パケットのシーケンスが受信される。メディア・パケットの数量は、正の整数Nについて、2N以下であり、各メディア・パケットは、Nビットによって指定される異なるバイナリ値に関連付けられている。第1のビットがアサートされているバイナリ値に関連付けられているメディア・パケットで構成されるメディア・パケットの第1のクラスタが選択される。上記数量における第1のメディア・パケット及び上記数量における第2のメディア・パケットは、第1のクラスタに含まれている。一実施例では、第1のビットは、最下位ビット、最上位ビット、又はその中間の任意のビットであり得るが、限定されない。第2のビットがアサートされているバイナリ値に関連付けられているメディア・パケットで構成されるメディア・パケットの第2のクラスタが選択される。第1のメディア・パケットは、第2のクラスタに含まれており、第2のメディア・パケットは、第2のクラスタに含まれていない。第1のクラスタを使用して、複数のFECパケットのうちの第1のFECパケットが計算され、第2のクラスタを使用して、複数のFECパケットのうちの第2のFECパケットが計算される。
【0006】
バイナリ・クラスタ化されたFEC符号化スキームのための本システム及び方法について、添付の図面を参照して以下に詳細に説明する。
【図面の簡単な説明】
【0007】
【
図1】本開示のいくつかの実施例を実装する際の使用に適しているFECパケットを生成するためにバイナリ・クラスタ化された符号化スキームを使用するシステム例のブロック図を示す。
【
図2A】フレーム内のメディア・パケットと、本開示のいくつかの実施例を実装する際の使用に適しているクラスタ符号化ペアを示す。
【
図2B】本開示のいくつかの実施例を実装する際の使用に適しているクラスタ符号化を示す。
【
図2C】本開示のいくつかの実施例を実装する際の使用に適しているクラスタ符号化を示す。
【
図2D】本開示のいくつかの実施例を実装する際の使用に適しているクラスタ符号化を示す。
【
図3】一実施例による、バイナリ・クラスタ化されたFEC符号化スキームのための方法のフローチャートを示す。
【
図4】本開示のいくつかの実施例を実装する際の使用に適している並列処理ユニット例を示す。
【
図5A】本開示のいくつかの実施例を実装する際の使用に適している、
図4のPPUを使用して実装される処理システムの概念図である。
【
図5B】様々な前の実施例の様々なアーキテクチャ及び/又は機能が実装され得る模範的なシステムを示す。
【
図5C】少なくとも1つの実施例において、機械学習のトレーニング及び利用に使用することができる模範的なシステムのコンポーネントを示す。
【
図6】本開示のいくつかの実施例を実装する際の使用に適している模範的なストリーミング・システムを示す。
【発明を実施するための形態】
【0008】
送信中に失われたパケットを回復するためのバイナリ・クラスタ化されたFEC符号化スキームに関するシステム及び方法が開示される。特に、バイナリ・クラスタ化されたFEC符号化スキームは、従来のFEC手法と比較して、マルチメディア・ストリーミングのパケット回復を向上させることができる。1フレームに対して生成されるいくつかのFECパケットと、FECパケットを生成するために使用されるフレーム内のメディア・パケットとに応じて、失われた(例えば、ドロップされた)メディア・パケットを回復する能力は変化する。各FECパケットは、排他的OR(XOR:Exclusive OR)論理演算子を使用して複数のメディア・パケットを組み合わせることによって生成される。従来のXORベースのFEC手法は、フレーム内の任意のメディア・パケットを回復するのに十分な冗長性を提供しないことがよくある。場合によっては、特定のメディア・パケットを使用して1つのFECパケットだけを計算する場合、パケットの冗長性はない。各FECパケットを計算するためにより多くのメディア・パケットを使用することによって、冗長性を向上させることができ、これにより、特定のメディア・パケットを使用して、複数のFECパケットが計算される。より多くのFECパケットを計算することによっても、冗長性を向上させることができ、これにより、特定のメディア・パケットを使用して、複数のFECパケットが計算される。従来の手法では、通常、1つよりも多いFECパケットによって特定のメディア・パケットをカバーすることができない。従来の手法はまた、単に重複するメディア・パケットを送信して、冗長メディア・パケットを送信することによって、メディア・パケットの回復を向上させ得る。
【0009】
バイナリ・クラスタ化されたFEC符号化スキームは、FECパケットを生成するためのメディア・パケットのセット(クラスタ)を選択して、冗長性及びメディア・パケット回復率を向上させる。メディア・パケットの各フレームについて計算されるFECパケットの数は、受信器によって決定されるパケット・ロスに基づいて変化し得る。例えば、均一なパケット・ロスが2%であるとき、従来のFEC符号化手法は、メディア・パケットの90.85%の回復を可能にするが、バイナリ・クラスタ化されたFEC符号化スキームは、メディア・パケットの96.73%の回復を可能にする。同様に、均一なパケット・ロスが4%であるとき、従来のFEC符号化手法では、メディア・パケットの85%が回復されるが、バイナリ・クラスタ化されたFEC符号化スキームを使用すると96.57%のメディア・パケットが回復される。パケット・ロス率が2%又は4%であるときに、バイナリ・クラスタ化されたFEC符号化スキームと同様のメディア・パケット回復率を達成するためには、従来の手法は、約5%多くのFECパケットの計算及び送信が必要となる。
【0010】
図1は、本開示のいくつかの実施例を実装する際の使用に適しているバイナリ・クラスタ化されたFEC符号化スキームを実装するシステム例100のブロック図を示す。本明細書で説明されるこの配置及び他の配置は、実例としてのみ記載されていることを理解すべきである。他の配置及び要素(例えば、マシン、インターフェース、機能、順序、機能のグループ分けなど)を、示されているものに加えて又は代わりに使用することができ、また、いくつかの要素を完全に省略することもできる。更に、本明細書で説明される要素のうちの多くは、個別の若しくは分散されたコンポーネントとして、又は他のコンポーネントと併せて、並びに任意の適切な組み合わせ及び場所で実装され得る機能的エンティティである。本明細書においてエンティティによって実行されていると説明される様々な機能は、ハードウェア、ファームウェア、及び/又はソフトウェアによって実行され得る。例えば、メモリに保存された命令を実行するプロセッサによって、様々な機能が実行され得る。更に、当業者は、システム100の動作を実行する任意のシステムが、本開示の実施例の範囲及び趣旨内であることを理解するであろう。
【0011】
図1に示されるように、システム100は、FEC符号化器110、送信インターフェース130、ネットワーク135、受信インターフェース140、及びXOR FECパケット復号化器145を含む。パケット・ロス・フィードバック124を介してパケット・ロス率を受信することに応答して、FECコントローラ120は、メディア・パケット105の各フレームについて計算されるいくつかのFECパケット116を動的に決定する。一実施例では、パケット・ロス率は、フレームごとの失われたパケットの割合又は総数として表され得る。一実施例では、パケット・ロス率は、個々のフレームについて提供され得るか、又は複数のフレームについて決定され得る。一実施例では、FECパケット116の数は、パケット・ロス率とフレーム内のメディア・パケット105の数とに基づいて決定される。一実施例では、FECパケット116の数は、パケット・ロス率の増加に応じて増加し、パケット・ロス率の低下に応じて減少する。ルック・アップ・テーブルを使用して、各パケット・ロス率に必要なFECパケット116の数を決定することができる。FECコントローラ120によって決定されるFECパケット116の数は、メディア・パケット選択ユニット115及び/又はXOR FECパケット符号化器125に提供される。一実施例では、パケット116の数は、メディア・パケット選択ユニット115からXOR FECパケット符号化器125に渡される。
【0012】
FECパケット126は、(バイナリ)クラスタ符号化に従って計算される。具体的には、各クラスタ符号化は、XOR演算を介して組み合わされるメディア・パケット105の特定のセット(クラスタ)に関連付けられて、FECパケット126が計算される。クラスタ内のメディア・パケット105は、各メディア・パケットに関連付けられているバイナリ値に基づいて選択される。一実施例では、各フレームのメディア・パケット105には、0から始まりM-1までインクリメントする、メディア・パケット105が受信される順序に一致するシーケンスでのバイナリ値が割り当てられる。ここでは、Mは、各フレーム内のメディア・パケット105の数に相当する。別の実施例では、各フレームのメディア・パケット105には、シーケンスと等しくない順序でバイナリ値が割り当てられる。ここでは、フレーム内の各メディア・パケットには、0~M-1の異なるバイナリ値が割り当てられる。各クラスタ符号化は、
図2Aと併せて説明されるように、メディア・パケット105の異なるクラスタに関連付けられている。
【0013】
ユーザの希望に応じて、上記のフレームワークを実装し得る様々な任意選択のアーキテクチャ及び特徴に関して、理解をより助ける情報を記載する。以下の情報は、例示のために記載されているものであり、いかようにも限定と解釈されるべきではないことに強く留意されたい。以下の特徴はいずれも、任意選択で、説明される他の特徴を除外して又は除外することなく組み込むことができる。
【0014】
図2Aは、フレーム200内のメディア・パケットと、本開示のいくつかの実施例を実装する際の使用に適しているクラスタ符号化ペア210とを示す。フレーム200は、M=64個のメディア・パケット105を含み、各メディア・パケット105にはバイナリ値が割り当てられている。
図2Aに示されているように、フレーム200のメディア・パケット105は、8×8配列に編成され得、各メディア・パケット105は、1つの列及び1つの行に関連付けられた位置(10進数0~63)を占有している。例えば、位置12のメディア・パケット105に割り当てられているバイナリ値は、バイナリ値001100である。なお、メディア・パケット105は、メディア・パケット105が受信されるシーケンス(1番目、2番目、3番目、4番目など)と一致する連続するバイナリ値に関連付けられている必要はない。
【0015】
次の説明のコンテキストでは、フレーム内のメディア・パケットの数量(M≦floor(2N))と、各フレームのメディア・パケットのN個の異なるクラスタ・ペア符号化とに基づいて、異なるクラスタ符号化が定義され得る。各メディア・パケット105に割り当てられたバイナリ値は、Nビットで表される。各クラスタ・ペア符号化は、Nビットのうちの異なるビットに関連付けられる。クラスタ・ペア符号化は、関連付けられているビット=0であるクラスタ符号化と、関連付けられているビット=1のクラスタとを含む。
【0016】
例えば、M=64及びN=6であるとき、6ビットは、メディア・パケットに関連付けられるバイナリ値を表す。N=6の場合、6つのクラスタ・ペア符号化(12個のクラスタ符号化)がある。各クラスタ符号化は、FECパケット126を計算するためのメディア・パケット105のセット(クラスタ)を選択する。前述のように、フレーム200内のメディア・パケット105の各々は、Nビット・バイナリ値0~2N-1のうちのそれぞれの1つに関連付けられている(各値は単一のメディア・パケットに関連付けられている)。N=6の場合、3ビット(N/2)が列ビットであり、3ビットが行ビットであり、各々、0~7で変動する。一実施例では、列ビットがバイナリ値の最下位ビットであり、行ビットがバイナリ値の最上位ビットである。別の実施例では、行ビットがバイナリ値の最下位ビットであり、列ビットがバイナリ値の最上位ビットである。更に別の実施例では、バイナリ値のビットは、行ビットと列ビットとの間で交互に入れ替わる。一般に、バイナリ値の各ビットは、限定なく、行ビット又は列ビットのいずれかに関連付けられる。
【0017】
クラスタ符号化ペア210は、クラスタ符号化211及び212を含み、且つ3つの列ビット(ビット0はlsbである)のうちのビット1(中央)であるNビット・バイナリ値のうちのビット1に関連付けられている。クラスタ符号化211に対して選択されたメディア・パケットのセットを示すために、ビット1が1に相当するフレーム200内のメディア・パケットの4つの列は網掛けされている。クラスタ符号化212に対して選択されたメディア・パケットのセットを示すために、ビット1がゼロに相当するメディア・パケットの4つの列は網掛けされている。ビット1ではないバイナリ値のビットは、クラスタ符号化ペア210のメディア・パケットのセットの選択では無視される。ただし、クラスタ符号化ペア210は、第1及び第2のFECパケットを計算するために使用されたときには、冗長性を提供しない。これは、クラスタ符号化211及び212の両方に単一のメディア・パケットが含まれていないからである。冗長性は、第3のFECパケットを計算するために少なくとも1つの追加のクラスタ符号化を使用することによって、メディア・パケットの少なくとも一部分に対して提供され得る。
【0018】
図2Bは、本開示のいくつかの実施例を実装する際の使用に適しているクラスタ符号化221、222、231、及び232を示す。クラスタ符号化221及び222は、3つの列ビットのlsbであるNビット・バイナリ値のビット0に関連付けられたクラスタ符号化ペアである。クラスタ符号化221に対して選択されたメディア・パケットのセットを示すために、ビット0が1に相当するフレーム200内のメディア・パケットの4つの列は網掛けされている。クラスタ符号化222に対して選択されたメディア・パケットのセットを示すために、ビット0がゼロに相当するメディア・パケットの4つの列は網掛けされている。クラスタ符号化ペア210と同様に、クラスタ符号化221及び222は、冗長性を提供しない。しかしながら、冗長性は、4つのFECパケットを計算するためにクラスタ符号化211、212、221、及び222を使用することによって、フレーム200内のすべてのメディア・パケットに対して提供される。
【0019】
クラスタ符号化231及び232は、3つの列ビットのmsbであるNビット・バイナリ値のビット2に関連付けられたクラスタ符号化ペアである。クラスタ符号化231に対して選択されたメディア・パケットのセットを示すために、ビット2が1に相当するフレーム200内のメディア・パケットの4つの列は網掛けされている。クラスタ符号化232に対して選択されたメディア・パケットのセットを示すために、ビット2がゼロに相当するフレーム200内のメディア・パケットの4つの列は網掛けされている。冗長性は、4つのFECパケットを計算するためにクラスタ符号化211、212、231、及び232を使用することによって、フレーム200内のすべてのメディア・パケットに対して提供される。或いは、冗長性は、4つのFECパケットを計算するためにクラスタ符号化221、222、231、及び232を使用することによって、フレーム200内のすべてのメディア・パケットに対して提供される。更に、6つのクラスタ符号化211、212、221、222、231、及び232を使用して、追加の冗長性を提供することができる。
【0020】
図2Cは、本開示のいくつかの実施例を実装する際の使用に適しているクラスタ符号化241及び242を示す。クラスタ符号化241及び242は、3つの行ビットのビット1(中央)であるNビット・バイナリ値のビット4に関連付けられたクラスタ符号化ペアである。クラスタ符号化241に対して選択されたメディア・パケットのセットを示すために、ビット4が1に相当するフレーム200内のメディア・パケットの4つの行は網掛けされている。クラスタ符号化242に対して選択されたメディア・パケットのセットを示すために、ビット4がゼロに相当するフレーム200内のメディア・パケットの4つの行は網掛けされている。クラスタ符号化ペア210と同様に、クラスタ符号化241及び242は、冗長性を提供しない。しかしながら、冗長性は、4つのFECパケットを計算するためにクラスタ符号化241及び242と、追加のクラスタ符号化ペアとを使用することによって、フレーム200内のすべてのメディア・パケットに対して提供される。
【0021】
図2Dは、本開示のいくつかの実施例を実装する際の使用に適しているクラスタ符号化251、252、261、及び262を示す。クラスタ符号化251及び252は、3つの行ビットのlsbであるNビット・バイナリ値のビット3に関連付けられたクラスタ符号化ペアである。クラスタ符号化251に対して選択されたメディア・パケットのセットを示すために、ビット3が1に相当するフレーム200内のメディア・パケットの4つの行は網掛けされている。クラスタ符号化252に対して選択されたメディア・パケットのセットを示すために、ビット3がゼロに相当するフレーム200内のメディア・パケットの4つの行は網掛けされている。クラスタ符号化ペア210と同様に、クラスタ符号化251及び252は、冗長性を提供しない。しかしながら、冗長性は、4つのFECパケットを計算するためにクラスタ符号化251及び252と、追加のクラスタ符号化ペアとを使用することによって、フレーム200内のすべてのメディア・パケットに対して提供される。
【0022】
クラスタ符号化261及び262は、3つの行ビットのmsbであるNビット・バイナリ値のビット5に関連付けられたクラスタ符号化ペアである。クラスタ符号化261に対して選択されたメディア・パケットのセットを示すために、ビット5が1に相当するフレーム200内のメディア・パケットの4つの行は網掛けされている。クラスタ符号化262に対して選択されたメディア・パケットのセットを示すために、ビット5がゼロに相当するフレーム200内のメディア・パケットの4つの行は網掛けされている。冗長性は、4つのFECパケットを計算するためにクラスタ符号化261及び262と、追加のクラスタ符号化ペアとを使用することによって、フレーム200内のすべてのメディア・パケットに対して提供される。
【0023】
図1に戻ると、メディア・パケット選択ユニット115は、XOR FECパケット符号化器125によってFECパケット116の数におけるFECパケット126を計算するために使用される各クラスタ符号化のために、メディア・パケット105からメディア・パケット114のセット(クラスタ)を選択する。一実施例では、メディア・パケット選択ユニット115は、メディア・パケット105の少なくとも1つのフレームを保存するためのバッファを含む。クラスタ符号化は、FECパケット116の数に従って決定され得る。
【0024】
一実施例では、FECパケット116の数を決定することに加えて、FECコントローラ120はまた、メディア・パケットのセットを選択して各FECパケットを計算するクラスタ符号化を決定する。一実施例では、メディア・パケット選択ユニット115は、FECパケット116の数に基づいてクラスタ符号化を決定する。例えば、パケット・ロス・フィードバック124が第1のパケット・ロス率を示しているときに、4つのFECパケット126が4つのクラスタ符号化に従って計算され得る。パケット・ロス・フィードバック124が第2のパケット・ロス率を示しているときに、5つのFECパケット126が5つのクラスタ符号化に従って計算され得る。
【0025】
クラスタ符号化は、FECパケット116の数(又はパケット・ロス)と固定された関連付けを有していても、又は(ルック・アップ・テーブルを介して)プログラム可能であってもよい。関連付けが固定されているときは、第1及び第2のパケット・ロス率の両方に同じ4つのクラスタ符号化が使用され、第2のパケット・ロス率に異なるクラスタ符号化が追加される。関連付けがプログラム可能であるときは、第1及び第2のパケット・ロス率の両方に同じ4つのクラスタ符号化を使用する代わりに、第2のパケット・ロスが、第1のパケット・ロス率に使用されていないクラスタ符号化を少なくとも2つ指定し得る。
【0026】
メディア・パケット114の選択されたセットは、FECパケット126の生成のためにXOR FECパケット符号化器125に入力される。XOR FECパケット符号化器125はまた、各フレームに対して生成されるFECパケット116の数も受信する。XOR FECパケット符号化器125は、メディア・パケット114の各セットのFECパケットを計算し、FECパケット126を送信インターフェース130に出力する。送信インターフェース130は、各フレームのFECパケット126及びメディア・パケット105をネットワーク135に送信する。受信インターフェース140は、受信したメディア・パケット155及び受信したFECパケット146を、XOR FECパケット復号化器145に出力する。XOR FECパケット復号化器145は、受信したFECパケット146と受信したメディア・パケット155との組み合わせを使用して、回復されたメディア・パケット150を生成する。バイナリ・クラスタ化された符号化スキームは、従来の送信インターフェース、受信インターフェース、及びXOR FECパケット復号化器と互換性がある。したがって、FEC符号化器110は、送信インターフェース、受信インターフェース、及びXOR FECパケット復号化器に変更を加える必要なく、既存のシステムに組み込むことができる。
【0027】
図3は、一実施例による、バイナリ・クラスタ化されたFEC符号化スキームのための方法300のフローチャートを示す。本明細書で説明される方法300の各ブロックは、ハードウェア、ファームウェア、及び/又はソフトウェアの任意の組み合わせを使用して実行され得る計算プロセスを含む。例えば、メモリに保存された命令を実行するプロセッサによって、様々な機能が実行され得る。この方法はまた、コンピュータ・ストレージ媒体に保存されたコンピュータ使用可能命令としても具体化され得る。この方法は、いくつか例を挙げると、スタンドアロン・アプリケーション、サービス又はホスト・サービス(スタンドアロン又は別のホスト・サービスとの組み合わせ)、又は別の製品へのプラグ・インによって提供され得る。更に、方法300は、例として、
図1のシステム100に関して説明される。しかしながら、この方法は、任意の1つのシステム、又は本明細書で説明されているものを含むが、これらに限定されないシステムの任意の組み合わせによって、追加的又は代替的に実行され得る。更に、当業者は、方法300を実行する任意のシステムが、本開示の実施例の範囲及び趣旨内であることを理解するであろう。
【0028】
ステップ305において、メディア・パケットのシーケンスが受信される。メディア・パケットの数量は、正の整数Nについて、2N以下であり、各メディア・パケットは、Nビットによって指定される異なるバイナリ値に関連付けられている。一実施例では、上記数量における各メディア・パケットに関連付けられているバイナリ値は、メディア・パケットが受信されるシーケンスを示す。一実施例では、上記数量における各メディア・パケットに割り当てられているバイナリ値は、メディア・パケットが受信されるシーケンスに関連付けられていない。
【0029】
ステップ310において、第1のビットがアサートされているバイナリ値に関連付けられているメディア・パケットで構成されるメディア・パケットの第1のクラスタが選択される。上記数量における第1のメディア・パケット及び上記数量における第2のメディア・パケットは、第1のクラスタに含まれている。一実施例では、第1のビットは、バイナリ値の最上位ビットである。一実施例では、第1のビットは、バイナリ値の最下位ビットである。一実施例では、バイナリ値の第1のビットは、lsbでもmsbでもない。
【0030】
ステップ315において、第2のビットがアサートされているバイナリ値に関連付けられているメディア・パケットで構成されるメディア・パケットの第2のクラスタが選択される。第1のメディア・パケットは、第2のクラスタに含まれており、第2のメディア・パケットは、第2のクラスタに含まれていない。
【0031】
ステップ320において、第1のクラスタを使用して、複数のFECパケットのうちの第1のFECパケットが計算される。ステップ325において、第2のクラスタを使用して、複数のFECパケットのうちの第2のFECパケットが計算される。一実施例では、複数のFECパケットにおけるいくつかのFECパケットは、パケット・ロス率及び上記数量に基づいて決定される。一実施例では、第1及び第2のFECパケットは、排他的OR演算を使用して計算される。一実施例では、第1及び第2のFECパケットは、並行して計算される。一実施例では、メディア・パケットの数量と、第1及び第2のFECパケットとは、リモート・デバイスに送信される。
【0032】
バイナリ・クラスタ符号化は、XORベースのFECを使用したメディア・パケット回復を向上させるための冗長性を提供する。従来の手法では、通常、1つよりも多いFECパケットによって特定のメディア・パケットをカバーすることができない。バイナリ・クラスタ化されたFEC符号化スキームは、FECパケットを生成するためのメディア・パケットのセット又はクラスタを選択する。クラスタは、冗長性及びメディア・パケット回復率を向上させるために定義される。追加的に、メディア・パケットの各フレームについて計算されるFECパケットの数は、受信器によって決定されるパケット・ロスに基づいて変化し得る。
【0033】
並列処理アーキテクチャ
図4は、一実施例による、並列処理ユニット(PPU:Parallel Processing Unit)400を示す。PPU400を使用して、システム100を実装し得る。PPU400を使用して、FEC符号化器110及びXOR FECパケット復号化器145のうちの1つ又は複数をシステム100内に実装し得る。一実施例では、PPU400などのプロセッサは、ニューラル・ネットワーク・モデルを実装するように構成され得る。ニューラル・ネットワーク・モデルは、プロセッサによって実行されるソフトウェア命令として実装されても、又は、他の実施例では、プロセッサが、入力(例えば、値を表す電気信号)のセットを処理するように構成されたハードウェア要素の行列を含んで、ニューラル・ネットワーク・モデルのアクティベーションを表し得る出力のセットを生成することができる。更に他の実施例では、ニューラル・ネットワーク・モデルは、ソフトウェア命令と、ハードウェア要素の行列によって実行される処理との組み合わせとして実装されてもよい。ニューラル・ネットワーク・モデルの実装には、例えば、ニューラル・ネットワーク・モデルの教師付き又は教師なしトレーニングだけでなく、又は、別の方法では、パラメータのセットを使用して推論を実行して、新規の入力のセットを処理することを通じて、ニューラル・ネットワーク・モデルのパラメータのセットを決定することが含まれ得る。
【0034】
一実施例では、PPU400は、1つ又は複数の集積回路デバイスに実装されたマルチ・スレッド・プロセッサである。PPU400は、多くのスレッドを並行して処理するように設計されたレイテンシ隠蔽アーキテクチャである。スレッド(例えば、実行のスレッド)は、PPU400によって実行されるように構成された命令のセットのインスタンス化である。一実施例では、PPU400は、ディスプレイ・デバイスでの表示のための2次元(2D)画像データを生成するために、3次元(3D)グラフィックス・データを処理するためのグラフィックス・レンダリング・パイプラインを実装するように構成されたグラフィックス処理ユニット(GPU:Graphics Processing Unit)である。他の実施例では、PPU400は、汎用計算を実行するために利用され得る。本明細書では、例示のために1つの模範的な並列プロセッサが提供されているが、そのようなプロセッサは、例示のためにのみ記載されているものであり、また、当該プロセッサを補完及び/又は代替するために任意のプロセッサが採用され得ることに強く留意されたい。
【0035】
1つ又は複数のPPU400は、数千もの高性能計算(HPC:High Performance Computing)アプリケーション、データ・センタ・アプリケーション、クラウド計算アプリケーション、及び機械学習アプリケーションを高速化するように構成され得る。PPU400は、自律走行車両、シミュレーション、レイ又はパス・トレーシングなどの計算グラフィックス、深層学習、高精度音声、画像、及びテキスト認識システム、インテリジェント・ビデオ分析、分子シミュレーション、創薬、疾患診断、天気予報、ビッグ・データ分析、天文学、分子動力学シミュレーション、財務モデリング、ロボット工学、工場自動化、リアル・タイム言語翻訳、オンライン検索の最適化、並びにパーソナライズ化されたユーザ推薦などのための多数の深層学習システム及びアプリケーションを高速化するように構成され得る。
【0036】
図4に示されているように、PPU400は、入出力(I/O:Input/Output)ユニット405、フロント・エンド・ユニット415、スケジューラ・ユニット420、作業配分ユニット425、ハブ430、クロスバー(Xbar:Crossbar)470、1つ又は複数の汎用処理クラスタ(GPC:General Processing Cluster)450、及び1つ又は複数のメモリ・パーティション・ユニット480を含む。PPU400は、1つ又は複数の高速NVLink410インターコネクトを介してホスト・プロセッサ又は他のPPU400に接続され得る。PPU400は、インターコネクト402を介してホスト・プロセッサ又は他の周辺デバイスに接続され得る。PPU400は、いくつかのメモリ・デバイスを含むローカル・メモリ404にも接続され得る。一実施例では、ローカル・メモリは、いくつかのダイナミック・ランダム・アクセス・メモリ(DRAM:Dynamic Random Access Memory)デバイスを含み得る。DRAMデバイスは、各デバイス内に複数のDRAMダイがスタックされた高帯域幅メモリ(HBM:High-Bandwidth Memory)サブシステムとして構成され得る。
【0037】
NVLink410インターコネクトは、1つ又は複数のCPUと組み合わされた1つ又は複数のPPU400をシステムがスケーリングし、含めることを可能にし、PPU400とCPUとの間のキャッシュ・コヒーレンス、及びCPUマスタリングをサポートする。データ及び/又はコマンドは、NVLink410によって、ハブ430を経由して、PPU400の他のユニット(1つ又は複数のコピー・エンジン、ビデオ符号化器、ビデオ復号化器、電源管理ユニットなど(明示的には図示せず))に/から送信され得る。NVLink410については、
図5Bと併せてより詳細に説明する。
【0038】
I/Oユニット405は、インターコネクト402経由で、ホスト・プロセッサ(図示せず)から通信(例えば、コマンド、データなど)を送信及び受信するように構成されている。I/Oユニット405は、インターコネクト402を介して直接、又はメモリ・ブリッジなどの1つ又は複数の中間デバイスを通じて、ホスト・プロセッサと通信することができる。一実施例では、I/Oユニット405は、インターコネクト402を介してPPU400のうちの1つ又は複数など、1つ又は複数の他のプロセッサと通信することができる。一実施例では、I/Oユニット405は、ペリフェラル・コンポーネント・インターコネクト・エクスプレス(PCIe:Peripheral Component Interconnect Express)インターフェースをPCIeバス経由の通信のために実装し、インターコネクト402は、PCIeバスである。代替実施例では、I/Oユニット405は、他のタイプのよく知られているインターフェースを外部デバイスと通信するため実装してもよい。
【0039】
I/Oユニット405は、インターコネクト402経由で受信したパケットを復号化する。一実施例では、パケットは、PPU400に様々な操作を実行させるように構成されたコマンドを表す。I/Oユニット405は、復号化されたコマンドを、コマンドが指定し得るとおりにPPU400の他の様々なユニットに送信する。例えば、いくつかのコマンドは、フロント・エンド・ユニット415に送信され得る。他のコマンドは、ハブ430、又はPPU400の他のユニット(1つ又は複数のコピー・エンジン、ビデオ符号化器、ビデオ復号化器、電源管理ユニットなど(明示的には図示せず))に送信され得る。つまり、I/Oユニット405は、PPU400の様々な論理ユニット間の通信をルーティングするように構成されている。
【0040】
一実施例では、ホスト・プロセッサによって実行されるプログラムが、処理のためにPPU400にワークロードを提供するバッファ内のコマンド・ストリームを符号化する。ワークロードは、いくつかの命令及びこれらの命令によって処理されるデータを含み得る。バッファは、ホスト・プロセッサとPPU400との両方によってアクセス可能(例えば、読み取り/書き込み)であるメモリ内の領域である。例えば、I/Oユニット405は、インターコネクト402に接続されたシステム・メモリ内のバッファに、インターコネクト402経由で送信されたメモリ・リクエストを介してアクセスするように構成され得る。一実施例では、ホスト・プロセッサは、コマンド・ストリームをバッファに書き込み、その後、コマンド・ストリームの先頭へのポインタをPPU400に送信する。フロント・エンド・ユニット415は、1つ又は複数のコマンド・ストリームへのポインタを受信する。フロント・エンド・ユニット415は、1つ又は複数のストリームを管理し、ストリームからコマンドを読み取り、PPU400の様々なユニットにコマンドを転送する。
【0041】
フロント・エンド・ユニット415は、1つ又は複数のストリームによって定義されたタスクを処理するために様々なGPC450を構成するスケジューラ・ユニット420に結合されている。スケジューラ・ユニット420は、スケジューラ・ユニット420によって管理される様々なタスクに関する状態情報を追跡するように構成されている。状態は、どのGPC450にタスクが割り当てられているか、タスクがアクティブであるか又は非アクティブであるか、タスクに関連付けられている優先レベルなどを示し得る。スケジューラ・ユニット420は、1つ又は複数のGPC450での複数のタスクの実行を管理する。
【0042】
スケジューラ・ユニット420は、GPC450での実行のためのタスクをディスパッチするように構成された作業配分ユニット425に結合されている。作業配分ユニット425は、スケジューラ・ユニット420から受信されたいくつかのスケジュール済みタスクを追跡し得る。一実施例では、作業配分ユニット425は、GPC450の各々について保留中タスクのプール及びアクティブ・タスクのプールを管理する。GPC450がタスクの実行を完了すると、そのタスクは、GPC450のアクティブ・タスクのプールから退去させられ、保留中タスクのプールから他のタスクのうちの1つが、GPC450での実行のために選択及びスケジュールされる。アクティブ・タスクがGPC450でアイドル状態になっている場合(データ依存性が解決されるのを待っている間など)、そのアクティブ・タスクは、GPC450から退去させられて、保留中タスクのプールに戻され得る。その一方で、保留中タスクのプール内の別のタスクがGPC450での実行のために選択及びスケジュールされる。
【0043】
一実施例では、ホスト・プロセッサがドライバ・カーネルを実行する。ドライバ・カーネルは、ホスト・プロセッサ上で実行される1つ又は複数のアプリケーションがPPU400での実行のために操作をスケジュールすることを可能にするアプリケーション・プログラミング・インターフェース(API:Application Progamming Interface)を実装する。一実施例では、複数の計算アプリケーションがPPU400によって同時に実行され、PPU400は、複数の計算アプリケーションに対して分離、サービス品質(QoS:Quality of Service)、及び独立したアドレス空間を提供する。アプリケーションは、ドライバ・カーネルに、PPU400による実行のための1つ又は複数のタスクを生成させる命令(例えば、API呼び出し)を生成し得る。ドライバ・カーネルは、PPU400によって処理されている1つ又は複数のストリームにタスクを出力する。各タスクは、本明細書ではワープと呼ばれる、関連スレッドの1つ又は複数のグループを含み得る。一実施例では、1ワープは、並行して実行され得る32個の関連スレッドを含む。協調スレッドとは、タスクを実行するための命令を含み、共有メモリを介してデータを交換し得る複数のスレッドを指し得る。タスクは、GPC450内の1つ又は複数の処理ユニットに割り当てられ得、命令は少なくとも1つのワープによる実行のためにスケジュールされる。
【0044】
作業配分ユニット425は、XBar470を介して1つ又は複数のGPC450と通信する。XBar470は、PPU400のユニットのうちの多くをPPU400の他のユニットに結合するインターコネクト・ネットワークである。例えば、XBar470は、作業配分ユニット425を特定のGPC450に結合するように構成され得る。明示的には示されていないが、PPU400の1つ又は複数の他のユニットも、ハブ430を介してXBar470に接続され得る。
【0045】
タスクはスケジューラ・ユニット420によって管理され、作業配分ユニット425によってGPC450にディスパッチされる。GPC450は、タスクを処理し、結果を生成するように構成されている。結果は、GPC450内の他のタスクによって消費されたり、XBar470経由で異なるGPC450にルーティングされたり、又はメモリ404に保存されたりし得る。結果は、メモリ404に/からデータを読み取り及び書き込みするためのメモリ・インターフェースを実装するメモリ・パーティション・ユニット480を介してメモリ404に書き込まれ得る。結果は、NVLink410を介して別のPPU400又はCPUに送信されることも可能である。一実施例では、PPU400は、PPU400に結合されたメモリ404の別個且つ個別のメモリ・デバイスの数に相当する数Uのメモリ・パーティション・ユニット480を含む。各GPC450は、仮想アドレスの物理アドレスへの変換、メモリ保護、及びメモリ・リクエストの調停を提供するためにメモリ管理ユニットを含み得る。一実施例では、メモリ管理ユニットは、仮想アドレスのメモリ404内の物理アドレスへの変換を実行するための1つ又は複数のトランスレーション・ルックアサイド・バッファ(TLB:Translation Lookaside Buffer)を提供する。
【0046】
一実施例では、メモリ・パーティション・ユニット480は、ラスタ演算(ROP:Raster Operation)ユニット、レベル2(L2:Level two)キャッシュ、及びメモリ404に結合されたメモリ・インターフェースを含む。メモリ・インターフェースは、高速データ転送のために、32、64、128、1024ビット・データ・バスなどを実装し得る。PPU400は、高帯域幅メモリ・スタック又はグラフィックス・ダブル・データ・レート、バージョン5、シンクロナス・ダイナミック・ランダム・アクセス・メモリ、又は他のタイプの永続ストレージなど、最大Y個のメモリ・デバイスに接続され得る。一実施例では、メモリ・インターフェースは、HBM2メモリ・インターフェースを実装し、YはUの半分に相当する。一実施例では、HBM2メモリ・スタックは、PPU400と同じ物理パッケージに位置し、従来のGDDR5 SDRAMシステムと比較して大幅な電力及び面積の節約を提供する。一実施例では、各HBM2スタックは、4つのメモリ・ダイを含み、Y=4であり、各HBM2スタックは、合計で8つのチャネルに対して1つのダイあたりに2つの128ビット・チャネルと、1024ビットのデータ・バス幅とを含む。
【0047】
一実施例では、メモリ404は、データを保護するためにシングル・エラー訂正ダブル・エラー検出(SECDED:Single-Error Correcting Double-Error Detecting)エラー訂正コード(ECC:Error Correction Code)をサポートしている。ECCは、データ破損の影響を受けやすい計算アプリケーションのより高い信頼性を提供する。PPU400が非常に大規模なデータセットを処理する、及び/又はアプリケーションを長時間実行する大規模なクラスタ計算環境では、信頼性が特に重要である。
【0048】
一実施例では、PPU400は、マルチ・レベルのメモリ階層を実装している。一実施例では、メモリ・パーティション・ユニット480は、統合メモリをサポートして、CPU及びPPU400のメモリに単一の統合された仮想アドレス空間を提供し、仮想メモリ・システム間でのデータ共有を可能にする。一実施例では、PPU400による他のプロセッサに位置するメモリへのアクセス頻度はトレースされて、メモリ・ページが、当該ページにより頻繁にアクセスするPPU400の物理メモリに移動されることを確実にする。一実施例では、NVLink410は、アドレス変換サービスをサポートしているため、PPU400はCPUのページ・テーブルに直接アクセスすることができ、PPU400によるCPUメモリへのフル・アクセスが提供される。
【0049】
一実施例では、コピー・エンジンが、複数のPPU400間、又はPPU400とCPUとの間でデータを転送する。コピー・エンジンは、ページ・テーブルにマッピングされていないアドレスのページ・フォールトを生成することができる。その後、メモリ・パーティション・ユニット480は、ページ・フォールトをサービスし、アドレスをページ・テーブルにマッピングし、その後、コピー・エンジンが転送を実行することができる。従来のシステムでは、複数のプロセッサ間での複数のコピー・エンジン操作のためにメモリがピン留めされ(例えば、非ページ可能である)、使用可能なメモリが大幅に削減される。ハードウェア・ページの障害が発生すると、メモリ・ページが存在し、コピー・プロセスが透過的であるかどうかを気にすることなく、アドレスをコピー・エンジンに渡すことができる。
【0050】
メモリ404又は他のシステム・メモリからのデータは、メモリ・パーティション・ユニット480によってフェッチされ、L2キャッシュ460に保存され得る。L2キャッシュ460は、オン・チップに位置し、様々なGPC450間で共有される。図に示されているように、各メモリ・パーティション・ユニット480は、対応するメモリ404に関連付けられたL2キャッシュの一部分を含む。この場合、より低いレベルのキャッシュは、GPC450内の様々なユニットに実装され得る。例えば、GPC450内の処理ユニットの各々は、レベル1(L1:Level one)キャッシュを実装することができる。L1キャッシュは、特定の処理ユニット専用のプライベート・メモリである。L2キャッシュ460は、メモリ・インターフェース470及びXBar470に結合され、L2キャッシュからのデータはフェッチされ、処理のためにL1キャッシュの各々に保存され得る。
【0051】
一実施例では、各GPC450内の処理ユニットは、単一命令、複数データ(SIMD:Single-Instruction,Multiple-Data)アーキテクチャを実装している。このアーキテクチャでは、スレッドのグループ(例えば、ワープ)内の各スレッドが、同じ命令セットに基づいてデータの異なるセットを処理するように構成されている。スレッドのグループ内のすべてのスレッドが同じ命令を実行する。別の実施例では、処理ユニットは、単一命令、複数スレッド(SIMT:Single-Instruction,Multiple-Thread)アーキテクチャを実装している。このアーキテクチャでは、スレッドのグループ内の各スレッドが、同じ命令セットに基づいてデータの異なるセットを処理するように構成されているが、スレッドのグループ内の個々のスレッドは、実行中に分岐することができる。一実施例では、各ワープに対してプログラム・カウンタ、呼び出しスタック、及び実行状態が維持され、ワープ内のスレッドが分岐するときに、ワープとワープ内の直列実行との間での同時並行性が可能になる。別の実施例では、各個々のスレッドに対してプログラム・カウンタ、呼び出しスタック、及び実行状態が維持され、すべてのスレッド間、ワープ内、及びワープ間で等しい同時並行性が可能になる。各個々のスレッドに対して実行状態が維持されるときは、同じ命令を実行するスレッドは収束され、最大効率のために並行して実行され得る。
【0052】
協調グループは、スレッドが通信する粒度を開発者が表現することを可能にする通信スレッドのグループを編成するためのプログラミング・モデルであり、これにより、より豊富で効率的な並列分解の表現が可能になる。協調起動APIは、並列アルゴリズムの実行のためのスレッド・ブロック間の同期をサポートする。従来のプログラミング・モデルは、協調スレッドを同期させるための単一の単純なコンストラクトを提供する。つまり、スレッド・ブロック(例えば、syncthreads( )関数)のすべてのスレッドにわたるバリアである。しかしながら、多くの場合、プログラマは、スレッド・ブロックの粒度よりも小さくスレッドのグループを定義し、定義されたグループ内で同期して、より優れた性能、デザインの柔軟性、及び集合的なグループ全体の関数インターフェースの形式でのソフトウェアの再利用を可能にしたいと考える。
【0053】
協調グループは、プログラマがサブ・ブロック(例えば、単一スレッドのように小さい)及びマルチ・ブロック粒度でスレッドのグループを明示的に定義し、協調グループ内のスレッドの同期化などの集合的な操作を実行することを可能にする。プログラミング・モデルは、ソフトウェア境界を越えたクリーンな構成をサポートしているため、ライブラリ及び効用関数は、収束について仮定することなく、ローカル・コンテキスト内で安全に同期することができる。協調グループ・プリミティブは、プロデューサ・コンシューマ並列性、日和見並列性(opportunistic parallelism)、及びスレッド・ブロックのグリッド全体にわたるグローバル同期など、協調的並列性の新しいパターンを可能にする。
【0054】
各処理ユニットは、完全にパイプライン化された単精度、倍精度、及び/又は混合精度であり得、且つ浮動小数点演算論理ユニット及び整数演算論理ユニットであり得る多数(例えば、128個など)の個別の処理コア(例えば、機能ユニット)を含む。一実施例では、浮動小数点演算論理ユニットは、浮動小数点演算のためのIEEE 754-2008規格を実装している。一実施例では、コアは、64個の単精度(32ビット)浮動小数点コア、64個の整数コア、32個の倍精度(64ビット)浮動小数点コア、及び8個のテンソル・コアを含む。
【0055】
行列演算を実行するように構成されているテンソル・コア。特に、テンソル・コアは、ニューラル・ネットワークのトレーニング及び推論中の畳み込み演算のための行列行列乗算(GEMM:Matrix-Matrix Multiplication)などの深層学習行列演算を実行するように構成されている。一実施例では、各テンソル・コアは、4×4行列に対して演算を行い、行列積和演算D=A・B+Cを実行する。ここで、A、B、C、及びDは4×4行列である。
【0056】
一実施例では、行列乗算入力A及びBは、整数、固定小数点、又は浮動小数点行列であり得る一方で、累積行列C及びDは、等しい又はそれ以上のビット幅の整数、固定小数点、又は浮動小数点行列であり得る。一実施例では、テンソル・コアは、32ビット整数累積を有する1、4、又は8ビット整数入力データに対して演算を行う。8ビット整数行列乗算では、1024回の演算が必要であり、後に8×8×16行列乗算の他の中間積との32ビット整数加算を使用して累積される完全精度積がもたらされる。一実施例では、テンソル・コアは、32ビット浮動小数点累積で16ビット浮動小数点入力データに対して演算を行う。16ビット浮動小数点乗算では、64回の演算が必要であり、後に4×4×4行列乗算の他の中間積との32ビット浮動小数点加算を使用して累積される完全精度積がもたらされる。実際には、テンソル・コアを使用して、これらのより小さな要素から構築される、より大きな2次元又はより高い次元の行列演算を実行する。CUDA 9 C++APIなどのAPIは、特殊化した行列ロード、行列積和、及び行列ストア演算を公開して、CUDA-C++プログラムからテンソル・コアを効率的に使用する。CUDAレベルでは、ワープ・レベルのインターフェースは、ワープの32個のすべてのスレッドにスパンする16×16サイズの行列を想定している。
【0057】
各処理ユニットはまた、特殊関数(例えば、属性評価、逆数平方根など)を実行するM個の特殊関数ユニット(SFU:Special Function Unit)を含み得る。一実施例では、SFUは、階層ツリー・データ構造を横断するように構成されたツリー・トラバーサル・ユニットを含み得る。一実施例では、SFUは、テクスチャ・マップ・フィルタリング演算を実行するように構成されたテクスチャ・ユニットを含み得る。一実施例では、テクスチャ・ユニットは、メモリ404からテクスチャ・マップ(例えば、テクセルの2D配列)をロードし、テクスチャ・マップをサンプリングして、処理ユニットによって実行されるシェーダ・プログラムで使用するためのサンプリングされたテクスチャ値を生成するように構成されている。一実施例では、テクスチャ・マップは、L1キャッシュを構成するか又は含めることができる共有メモリに保存される。テクスチャ・ユニットは、ミップ・マップ(例えば、様々な詳細レベルのテクスチャ・マップ)を使用したフィルタリング演算などのテクスチャ演算を実装する。一実施例では、各処理ユニットは、2つのテクスチャ・ユニットを含む。
【0058】
各処理ユニットはまた、共有メモリとレジスタ・ファイルとの間のロード及びストア演算を実装するN個のロード・ストア・ユニット(LSU:Load Store Unit)を含む。各処理ユニットは、コアの各々をレジスタ・ファイルに、LSUをレジスタ・ファイル、共有メモリに接続するインターコネクト・ネットワークを含む。一実施例では、インターコネクト・ネットワークは、コアのいずれかをレジスタ・ファイル内のレジスタのいずれかに接続し、LSUをレジスタ・ファイル及び共有メモリ内のメモリ場所に接続するように構成され得るクロスバーである。
【0059】
共有メモリは、データ保存、並びに処理ユニット間及び処理ユニット内のスレッド間での通信を可能にするオン・チップ・メモリの配列である。一実施例では、共有メモリは、128KBのストレージ容量を含み、処理ユニットの各々からメモリ・パーティション・ユニット480への経路にある。共有メモリは、読み取り及び書き込みのキャッシュに使用することができる。共有メモリ、L1キャッシュ、L2キャッシュ、及びメモリ404のうちの1つ又は複数がバッキング・ストアである。
【0060】
データ・キャッシュと共有メモリ機能を1つのメモリ・ブロックに組み合わせることで、両方のタイプのメモリ・アクセスにおいて最高の全体的な性能が提供される。容量は、共有メモリを使用しないプログラムによってキャッシュとして使用可能である。例えば、共有メモリが容量の半分を使用するように構成されている場合、テクスチャ及びロード/ストア演算では残りの容量を使用することができる。共有メモリ内への統合により、共有メモリをストリーミング・データ用の高スループット・コンジットとして機能させると同時に、頻繁に再利用されるデータへの高帯域幅及び低レイテンシ・アクセスを提供することが可能となる。
【0061】
汎用並列計算用に構成されていると、グラフィックス処理と比較してより単純な構成を使用することができる。具体的には、固定関数グラフィックス処理ユニットがバイパスされ、より単純なプログラミング・モデルが作成される。汎用並列計算構成では、作業配分ユニット425は、GPC450内の処理ユニットにスレッドのブロックを直接割り当てて配分する。スレッドは、各スレッドが一意の結果を生成することを確実にするために計算において一意のスレッドIDを使用し、プログラムを実行し且つ計算を実行するために処理ユニットを使用し、スレッド間で通信するために共有メモリを使用し、共有メモリ及びメモリ・パーティション・ユニット480を介してグローバル・メモリの読み取り及び書き込みを行うためにLSUを使用して、同じプログラムを実行する。汎用並列計算用に構成されていると、処理ユニットはまた、スケジューラ・ユニット420が処理ユニットでの新しい作業を開始するために使用することができるコマンドを書き込むことができる。
【0062】
PPU400の各々は、テンソル・コア(TC:Tensor Core)、テンソル処理ユニット(TPU:Tensor Processing Unit)、ピクセル・ビジュアル・コア(PVC:Pixel Visual Core)、レイ・トレーシング(RT:Ray Tracing)コア、ビジョン処理ユニット(VPU:Vision Processing Unit)、グラフィックス処理クラスタ(GPC:Graphics Processing Cluster)、テクスチャ処理クラスタ(TPC:Texture Processing Cluster)、ストリーミング・マルチプロセッサ(SM:Streaming Multiprocessor)、ツリー・トラバーサル・ユニット(TTU:Tree Traversal Unit)、人工知能アクセラレータ(AIA:Artificial Intelligence Accelerator)、深層学習アクセラレータ(DLA:Deep Learning Accelerator)、算術論理ユニット(ALU:Arithmetic-Logic Unit)、特定用途向け集積回路(ASIC:Application-Specific Integrated Circuit)、浮動小数点ユニット(FPU:Floating Point Unit)、入出力(I/O)要素、又はペリフェラル・コンポーネント・インターコネクト(PCI:Peripheral Component Interconnect)又はペリフェラル・コンポーネント・インターコネクト・エクスプレス(PCIe)要素など、1つ又は複数の処理コア及び/又はそのコンポーネントを含むか、及び/又はその機能を実行するように構成され得る。
【0063】
PPU400は、デスクトップ・コンピュータ、ラップトップ・コンピュータ、タブレット・コンピュータ、サーバ、スーパーコンピュータ、スマートフォン(例えば、ワイヤレスのハンド・ヘルド・デバイス)、携帯情報端末(PDA:Personal Digital Assistant)、デジタル・カメラ、車両、ヘッド・マウント・ディスプレイ、ハンド・ヘルド電子デバイスなどに含まれていてもよい。一実施例では、PPU400は、単一の半導体基板上に具体化される。別の実施例では、PPU400は、追加のPPU400、メモリ404、縮小命令セット・コンピュータ(RISC:Reduced Instruction Set Computer)CPU、メモリ管理ユニット(MMU:Memory Management Unit)、ディジタル・アナログ・コンバータ(DAC:Digital-to-Analog Converter)などの1つ又は複数のデバイスとともに、システム・オン・チップ(SoC)に含まれている。
【0064】
一実施例では、PPU400は、1つ又は複数のメモリ・デバイスを含むグラフィックス・カード上に含まれていてもよい。グラフィックス・カードは、デスクトップ・コンピュータのマザーボード上のPCIeスロットとインターフェースするように構成され得る。更に別の実施例では、PPU400は、マザーボードのチップセットに含まれる統合型グラフィックス処理ユニット(iGPU)又は並列プロセッサであってもよい。更に別の実施例では、PPU400は、再構成可能なハードウェアで実現されてもよい。更に別の実施例では、PPU400の一部が、再構成可能なハードウェアで実現されてもよい。
【0065】
模範的な計算システム
人工知能計算などのアプリケーションにおいて、開発者がより多くの並列性を公開及び活用するようになるにつれて、多数のGPU及びCPUを備えたシステムが様々な業界で使用されている。数十から数千もの計算ノードを備えた高性能GPU高速化システムが、データ・センタ、研究施設、スーパーコンピュータに導入され、これまでになく大きな問題を解決する。高性能システム内の処理デバイスの数が増えるにつれて、通信及びデータ転送機構は、帯域幅の増加に対応するように拡張する必要がある。
【0066】
図5Aは、一実施例による、
図4のPPU400を使用して実装された処理システム500の概念図である。模範的なシステム500は、
図3に示される方法300を実装するように構成され得る。処理システム500は、CPU530、スイッチ510、及び複数のPPU400とそれぞれのメモリ404を含む。
【0067】
NVLink410は、PPU400の各々間に高速通信リンクを提供する。
図5Bに特定の数のNVLink410及びインターコネクト402接続が例示されているが、各PPU400及びCPU530への接続数は異なっていてもよい。スイッチ510は、インターコネクト402とCPU530との間でインターフェースする。PPU400、メモリ404、及びNVLink410は、単一の半導体プラットフォーム上に位置付けられて、並列処理モジュール525を形成することができる。一実施例では、スイッチ510は、様々な異なる接続及び/又はリンク間でインターフェースするために、2つ以上のプロトコルをサポートする。
【0068】
別の実施例(図示せず)では、NVLink410は、PPU400の各々とCPU530との間に1つ又は複数の高速通信リンクを提供し、スイッチ510は、インターコネクト402とPPU400の各々との間でインターフェースする。PPU400、メモリ404、及びインターコネクト402は、単一の半導体プラットフォーム上に位置付けられて、並列処理モジュール525を形成することができる。更に別の実施例(図示せず)では、インターコネクト402は、PPU400の各々とCPU530との間に1つ又は複数の通信リンクを提供し、スイッチ510は、NVLink410を使用してPPU400の各々間でインターフェースして、PPU400間に1つ又は複数の高速通信リンクを提供する。別の実施例(図示せず)では、NVLink410は、スイッチ510を介してPPU400とCPU530との間に1つ又は複数の高速通信リンクを提供する。更に別の実施例(図示せず)では、インターコネクト402は、PPU400の各々間に直接1つ又は複数の通信リンクを提供する。NVLink410高速通信リンクのうちの1つ又は複数は、物理NVLinkインターコネクトとして、又はNVLink410と同じプロトコルを使用して、オン・チップ又はオン・ダイのいずれかのインターコネクトとして実装され得る。
【0069】
本説明のコンテキストでは、単一の半導体プラットフォームとは、ダイ又はチップ上に製作された単独の単位的な半導体ベースの集積回路を指し得る。単一の半導体プラットフォームという用語はまた、接続性が向上したマルチ・チップ・モジュールを指し、オン・チップ操作をシミュレートし、従来のバス実装を利用するよりも大幅な向上があることに留意されたい。当然ながら、様々な回路又はデバイスはまた、ユーザの希望に応じて、個別に又は半導体プラットフォームの様々な組み合わせに位置付けられてもよい。交互に、並列処理モジュール525は、回路ボード基板として実装されてもよく、PPU400及び/又はメモリ404の各々は、パッケージ・デバイスであってもよい。一実施例では、CPU530、スイッチ510、及び並列処理モジュール525は、単一の半導体プラットフォーム上に位置付けられている。
【0070】
一実施例では、各NVLink410の信号速度は、20~25ギガビット/秒であり、各PPU400は、6つのNVLink410インターフェースを含む(
図5Aに示されるように、各PPU400に5つのNVLink410インターフェースが含まれる)。各NVLink410は、各方向に25ギガバイト/秒のデータ転送レートを提供し、6つのリンクは、400ギガバイト/秒を提供する。NVLink410は、
図5Aに示されるように、PPU-PPU間の通信に排他的に使用することができる。又は、CPU530も1つ又は複数のNVLink410インターフェースを含むときは、PPU-PPU間及びPPU-CPU間の何らかの組み合わせに使用することができる。
【0071】
一実施例では、NVLink410は、CPU530から各PPU400のメモリ404への直接ロード/保存/アトミック・アクセスを可能にする。一実施例では、NVLink410は、コヒーレンシー操作をサポートするため、メモリ404から読み取られたデータをCPU530のキャッシュ階層に保存して、CPU530のキャッシュ・アクセス・レイテンシを低減することを可能にする。一実施例では、NVLink410は、アドレス・トランスレーション・サービス(ATS:Address Translation Service)のサポートを含んでいるため、PPU400がCPU530内のページ・テーブルに直接アクセスすることを可能にする。NVLink410のうちの1つ又は複数はまた、低電力モードで動作するように構成され得る。
【0072】
図5Bは、様々な前の実施例の様々なアーキテクチャ及び/又は機能が実装され得る模範的なシステム565を示す。模範的なシステム565は、
図3に示される方法300を実装するように構成され得る。
【0073】
図に示されているように、通信バス575に接続されている少なくとも1つの中央処理ユニット530を含むシステム565が提供されている。通信バス575は、次のデバイス:メイン・メモリ540、ネットワーク・インターフェース535、CPU530、ディスプレイ・デバイス545、入力デバイス560、スイッチ510、及び並列処理システム525のうちの1つ又は複数を直接又は間接的に結合し得る。通信バス575は、任意の適切なプロトコルを使用して実装され得、また、アドレス・バス、データ・バス、制御バス、又はこれらの組み合わせなどの1つ又は複数のリンク又はバスを表し得る。通信バス575には、業界標準アーキテクチャ(ISA:Industry Standard Architecture)バス、拡張業界標準アーキテクチャ(EISA:Extended Industry Standard Architecture)バス、ビデオ・エレクトロニクス・スタンダーズ・アソシエーション(VESA:Video Electronics Standards Association)バス、ペリフェラル・コンポーネント・インターコネクト(PCI)バス、ペリフェラル・コンポーネント・インターコネクト・エクスプレス(PCIe)バス、HyperTransport、及び/又は別のタイプのバス若しくはリンクなど、1つ又は複数のバス又はリンクのタイプが含まれ得る。いくつかの実施例では、コンポーネント間に直接接続がある。一実例として、CPU530は、メイン・メモリ540に直接接続され得る。更に、CPU530は、並列処理システム525に直接接続され得る。コンポーネント間に直接又はポイント・ツー・ポイント接続がある場合、通信バス575は、接続を実行するためにPCIeリンクを含み得る。これらの実例では、PCIバスをシステム565に含める必要はない。
【0074】
図5Bの様々なブロックは、通信バス575を介して回線で接続されているものとして示されているが、これは限定を意図したものではなく、明確にするためだけのものである。例えば、いくつかの実施例では、ディスプレイ・デバイス545などのプレゼンテーション・コンポーネントは、入力デバイス560などのI/Oコンポーネントと見なされ得る(例えば、ディスプレイがタッチ・スクリーンの場合)。別の実例として、CPU530及び/又は並列処理システム525は、メモリを含み得る(例えば、メイン・メモリ540は、並列処理システム525、CPU530、及び/又は他のコンポーネントに加えて、ストレージ・デバイスを表し得る)。つまり、
図5Bの計算デバイスは例示にすぎない。
図5Bの計算デバイスの範囲内であるとすべて企図されるため、「ワークステーション」、「サーバ」、「ラップトップ」、「デスクトップ」、「タブレット」、「クライアント・デバイス」、「モバイル・デバイス」、「ハンド・ヘルド・デバイス」、「ゲーム・コンソール」、「電子制御ユニット(ECU:Electronic Control Unit)」、「仮想現実システム」、及び/又は他のデバイス若しくはシステムのタイプなどのカテゴリ間で区別はされない。
【0075】
システム565はまた、メイン・メモリ540を含む。制御論理(ソフトウェア)及びデータは、様々なコンピュータ可読媒体の形式を取り得るメイン・メモリ540に保存される。コンピュータ可読媒体は、システム565によってアクセスされ得る任意の利用可能な媒体であり得る。コンピュータ可読媒体には、揮発性及び不揮発性媒体、並びにリムーバブル及び非リムーバブル媒体の両方が含まれ得る。例として、限定ではないが、コンピュータ可読媒体は、コンピュータ・ストレージ媒体及び通信媒体を含み得る。
【0076】
コンピュータ・ストレージ媒体には、コンピュータ可読命令、データ構造、プログラム・モジュール、及び/又は他のデータ・タイプなどの情報の保存のための任意の方法又は技術で実装された揮発性及び不揮発性媒体及び/又はリムーバブル及び非リムーバブル媒体の両方が含まれ得る。例えば、メイン・メモリ540は、コンピュータ可読命令(例えば、プログラム及び/又はオペレーティング・システムなどのプログラム要素を表す)を保存し得る。コンピュータ・ストレージ媒体には、RAM、ROM、EEPROM、フラッシュ・メモリ若しくは他のメモリ技術、CD-ROM、デジタル多用途ディスク(DVD:Digital Versatile Disk)若しくは他の光学ディスク・ストレージ、磁気カセット、磁気テープ、磁気ディスク・ストレージ若しくは他の磁気ストレージ・デバイス、又は、所望の情報を保存するために使用され得、且つシステム565によってアクセスされ得る任意の他の媒体が含まれるが、これらに限定されない。本明細書で使用される場合、コンピュータ・ストレージ媒体は、信号自体は含まない。
【0077】
コンピュータ・ストレージ媒体は、搬送波又は他の輸送機構などの変調されたデータ信号でコンピュータ可読命令、データ構造、プログラム・モジュール、及び/又は他のデータ・タイプを具体化し得、任意の情報配信媒体を含み得る。「変調されたデータ信号」という用語は、信号内の情報を符号化するようにその特性のうちの1つ又は複数が設定又は変更されている信号を指し得る。例として、限定ではないが、コンピュータ・ストレージ媒体には、有線ネットワーク又は直接有線接続などの有線メディア、並びに音響、RF、赤外線、及び他のワイヤレス媒体などのワイヤレス媒体が含まれ得る。上記のいずれかの組み合わせもまた、コンピュータ可読媒体の範囲に含まれる。
【0078】
コンピュータ・プログラムは、実行されると、システム565が様々な機能を実行することを可能にする。CPU530は、コンピュータ可読命令のうちの少なくともいくつかを実行して、システム565の1つ又は複数のコンポーネントを制御して、本明細書で説明される方法及び/又はプロセスのうちの1つ又は複数を実行するように構成され得る。CPU530の各々は、多数のソフトウェア・スレッドを同時に処理することが可能である1つ又は複数のコア(例えば、1、2、4、8、28、72個など)を含み得る。CPU530は、任意のタイプのプロセッサを含み得、また、実装されているシステム565のタイプに応じて、異なるタイプのプロセッサ(例えば、モバイル・デバイスではコア数が少ないプロセッサ、サーバではコア数が多いプロセッサ)を含み得る。例えば、システム565のタイプに応じて、プロセッサは、縮小命令セット計算(RISC)を使用して実装されるアドバンスドRISCマシン(ARM:Advanced RISC Machine)プロセッサ、又は複合命令セット計算(CISC:Complex Instruction Set Computing)を使用して実装される×86プロセッサであり得る。システム565は、1つ又は複数のマイクロプロセッサ、又は数学コ・プロセッサなどの補助コ・プロセッサに加えて、1つ又は複数のCPU530を含み得る。
【0079】
CPU530に加えて又はそれに代えて、並列処理モジュール525は、コンピュータ可読命令のうちの少なくともいくつかを実行して、システム565の1つ又は複数のコンポーネントを制御して、本明細書で説明される方法及び/又はプロセスのうちの1つ又は複数を実行するように構成され得る。並列処理モジュール525は、システム565によって使用されて、グラフィックス(例えば、3Dグラフィックス)がレンダリングされるか、又は汎用計算が実行され得る。例えば、並列処理モジュール525は、GPUでの汎用計算(GPGPU:General-Purpose computing on GPU)に使用され得る。一実施例では、CPU530及び/又は並列処理モジュール525は、方法、プロセス、及び/又はこれらの一部分の任意の組み合わせを個別に又は共同で実行し得る。
【0080】
システム565はまた、入力デバイス560、並列処理システム525、及びディスプレイ・デバイス545を含む。ディスプレイ・デバイス545には、ディスプレイ(例えば、モニタ、タッチ・スクリーン、テレビ画面、ヘッドアップディスプレイ(HUD:Heads-Up-Display)、他のディスプレイ・タイプ、又はこれらの組み合わせ)、スピーカ、及び/又は他のプレゼンテーション・コンポーネントが含まれ得る。ディスプレイ・デバイス545は、他のコンポーネント(例えば、並列処理システム525、CPU530など)からデータを受信し、データ(例えば、画像、ビデオ、サウンドなど)を出力し得る。
【0081】
ネットワーク・インターフェース535は、システム565が、入力デバイス560、ディスプレイ・デバイス545、及び/又は他のコンポーネント(そのうちのいくつかは、システム565に組み込まれていても(例えば、統合されていても)よい)を含む他のデバイスに論理的に結合されることを可能にし得る。例示的な入力デバイス560には、マイク、マウス、キーボード、ジョイスティック、ゲーム・パッド、ゲーム・コントローラ、サテライト・ディッシュ、スキャナ、プリンタ、ワイヤレス・デバイスなどが含まれる。入力デバイス560は、ユーザが生成したエア・ジェスチャ、声、又は他の生理学的入力を処理するナチュラル・ユーザ・インターフェース(NUI:Natural User Interface)を提供し得る。場合によっては、入力は、更なる処理のために適切なネットワーク要素に送信され得る。NUIは、音声認識、スタイラス認識、顔認識、バイオメトリック認識、画面上と画面の隣との両方のジェスチャ認識、エア・ジェスチャ、頭部及び目の追跡、並びにシステム565のディスプレイに関連付けられたタッチ認識(以下により詳細に説明される)の任意の組み合わせを実装し得る。システム565は、ジェスチャ検出及び認識のために、立体カメラ・システム、赤外線カメラ・システム、RGBカメラ・システム、タッチ・スクリーン技術、及びこれらの組み合わせなどの深度カメラを含み得る。追加的に、システム565は、動きの検出を可能にする加速度計又はジャイロスコープ(例えば、慣性測定ユニット(IMU:Inertia Measurement Unit)の一部として)を含み得る。いくつかの実例では、加速度計又はジャイロスコープの出力は、システム565によって使用されて、没入感のある拡張現実又は仮想現実をレンダリングすることができる。
【0082】
更に、システム565は、通信のために、ネットワーク・インターフェース535を介してネットワーク(例えば、電気通信ネットワーク、ローカル・エリア・ネットワーク(LAN:Local Area Network)、ワイヤレス・ネットワーク、インターネット、ピア・ツー・ピア・ネットワーク、ケーブル・ネットワークなどのワイド・エリア・ネットワーク(WAN:Wide Area Network))に結合され得る。システム565は、分散ネットワーク及び/又はクラウド計算環境内に含まれていてもよい。
【0083】
ネットワーク・インターフェース535は、1つ又は複数の受信器、送信器、及び/又はトランシーバを含み得る。トランシーバは、システム565が、有線及び/又はワイヤレス通信を含む電子通信ネットワークを介して他の計算デバイスと通信することを可能にする。ネットワーク・インターフェース535は、パケット構文解析、並びにネットワーク処理及び通信の高速化(例えば、であり、限定されない)などの操作を実行するために、1つ又は複数の処理ユニット(DPU:Data Processing Unit)を含むネットワーク・インターフェース・コントローラ(NIC:Network Interface Controller)として実装され得る。ネットワーク・インターフェース535は、ワイヤレス・ネットワーク(例えば、Wi-Fi、Z-Wave、ブルートゥース(登録商標)、ブルートゥース LE、ZigBeeなど)、有線ネットワーク(例えば、イーサネット(登録商標)又はInfiniBand経由の通信)、ロー・パワー・ワイド・エリア・ネットワーク(例えば、LoRaWAN、SigFoxなど)、及び/又はインターネットなどの多数の異なるネットワークのうちのいずれかを介した通信を可能にするためにコンポーネント及び機能を含み得る。
【0084】
システム565はまた、セカンダリ・ストレージ(図示せず)を含み得る。セカンダリ・ストレージには、例えば、フロッピー(登録商標)・ディスク・ドライブ、磁気テープ・ドライブ、コンパクト・ディスク・ドライブ、デジタル多用途ディスク(DVD)ドライブ、録音デバイス、ユニバーサル・シリアル・バス(USB:Universal Serial Bus)フラッシュ・メモリを表す、ハード・ディスク・ドライブ及び/又はリムーバブル・ストレージ・ドライブが含まれる。リムーバブル・ストレージ・ドライブは、よく知られている方法でリムーバブル・ストレージ・ユニットに対する読み取り/書き込みを行う。システム565はまた、ハード・ワイヤード電源、バッテリ電源、又はこれらの組み合わせ(図示せず)を含み得る。電源は、システム565のコンポーネントが動作することを可能にするために、システム565に給電し得る。
【0085】
上記のモジュール及び/又はデバイスの各々さえも、単一の半導体プラットフォーム上に位置付けられて、システム565を形成することができる。交互に、様々なモジュールはまた、ユーザの希望に応じて、個別に、又は半導体プラットフォームの様々な組み合わせに位置付けられてもよい。上記では様々な実施例について説明しているが、これらの実施例は、限定ではなく、例としてのみ提示されていることを理解すべきである。したがって、好ましい実施例の幅及び範囲は、上記の模範的な実施例のいずれにも限定されるべきではなく、以下の特許請求の範囲及びその均等物に従ってのみ定義されるべきである。
【0086】
ネットワーク環境例
本開示の実施例を実装する際の使用に適しているネットワーク環境は、1つ又は複数のクライアント・デバイス、サーバ、ネットワーク・アッタッチド・ストレージ(NAS:Network Attached Storage)、他のバックエンド・デバイス、及び/又は他のデバイス・タイプを含み得る。クライアント・デバイス、サーバ、及び/又は他のデバイス・タイプ(例えば、各デバイス)は、
図5Aの処理システム500及び/又は
図5Bの模範的なシステム565の1つ又は複数のインスタンスに実装され得る。例えば、各デバイスは、処理システム500及び/又は模範的なシステム565の同様のコンポーネント、特徴、及び/又は機能を含み得る。
【0087】
ネットワーク環境のコンポーネントは、有線、ワイヤレス、又はその両方であり得るネットワークを介して互いに通信し得る。ネットワークには、複数のネットワーク又はネットワークのネットワークが含まれ得る。例として、ネットワークには、1つ又は複数のワイド・エリア・ネットワーク(WAN)、1つ又は複数のローカル・エリア・ネットワーク(LAN)、インターネット及び/又は公衆電話交換網(PSTN:Public Switched Telephone Network)などの1つ又は複数のパブリック・ネットワーク、並びに/又は、1つ又は複数のプライベート・ネットワークが含まれ得る。ネットワークにワイヤレス電気通信ネットワークが含まれている場合、基地局、通信塔、又は更にはアクセス・ポイント(及び他のコンポーネント)などのコンポーネントがワイヤレス接続性を提供し得る。
【0088】
互換性のあるネットワーク環境には、1つ又は複数のピア・ツー・ピア・ネットワーク環境(この場合、サーバはネットワーク環境に含まれ得ない)、及び1つ又は複数のクライアント・サーバ・ネットワーク環境(この場合、1つ又は複数のサーバがネットワーク環境に含まれ得る)が含まれ得る。ピア・ツー・ピア・ネットワーク環境では、本明細書で説明されるサーバに関する機能は、任意の数のクライアント・デバイスで実装され得る。
【0089】
少なくとも1つの実施例では、ネットワーク環境には、1つ又は複数のクラウド・ベースのネットワーク環境、分散計算環境、これらの組み合わせなどが含まれ得る。クラウド・ベースのネットワーク環境は、フレームワーク層、ジョブ・スケジューラ、リソース・マネージャ、及び1つ又は複数のサーバ(1つ又は複数のコア・ネットワーク・サーバ及び/又はエッジ・サーバを含み得る)で実装される分散ファイル・システムを含み得る。フレームワーク層は、ソフトウェア層のソフトウェア及び/又はアプリケーション層の1つ又は複数のアプリケーションをサポートするためのフレームワークを含み得る。ソフトウェア又はアプリケーションには、それぞれ、ウェブ・ベースのサービス・ソフトウェア又はアプリケーションが含まれ得る。実施例では、クライアント・デバイスのうちの1つ又は複数が、(例えば、1つ又は複数のアプリケーション・プログラミング・インターフェース(API)を介してサービス・ソフトウェア及び/又はアプリケーションにアクセスすることによって)ウェブ・ベースのサービス・ソフトウェア又はアプリケーションを使用し得る。フレームワーク層は、大規模なデータ処理(例えば、「ビッグ・データ」)に分散ファイル・システムを使用し得るなど、無料のオープン・ソースのソフトウェア・ウェブ・アプリケーション・フレームワークの一タイプであり得るが、これに限定されない。
【0090】
クラウド・ベースのネットワーク環境は、本明細書で説明される計算及び/又はデータ・ストレージ機能(又はその1つ又は複数の部分)の組み合わせを実行するクラウド計算及び/又はクラウド・ストレージを提供し得る。これらの様々な機能はいずれも、(例えば、州、地域、国、地球などの全体に分散され得る1つ又は複数のデータ・センタの)中央又はコア・サーバから複数の場所に分散され得る。ユーザ(例えば、クライアント・デバイス)への接続がエッジ・サーバに比較的近い場合、コア・サーバはエッジ・サーバに機能のうちの少なくとも一部分を指定し得る。クラウド・ベースのネットワーク環境は、プライベート(例えば、単一の組織に限定される)であっても、パブリック(例えば、多くの組織で利用可能である)であっても、及び/又はこれらの組み合わせ(例えば、ハイブリッドのクラウド環境)であってもよい。
【0091】
クライアント・デバイスは、
図5Aの処理システム例500及び/又は
図5Bの模範的なシステム565のコンポーネント、特徴、及び/又は機能のうちの少なくともいくつかを含み得る。例として、限定ではないが、クライアント・デバイスは、パーソナル・コンピュータ(PC:Personal Computer)、ラップトップ・コンピュータ、モバイル・デバイス、スマートフォン、タブレット・コンピュータ、スマート・ウォッチ、ウェアラブル・コンピュータ、携帯情報端末(PDA)、MP3プレーヤ、仮想現実ヘッドセット、全地球測位システム(GPS:Global Positioning System)若しくはデバイス、ビデオ・プレーヤ、ビデオ・カメラ、監視デバイス若しくはシステム、車両、ボート、飛行船、仮想マシン、ドローン、ロボット、ハンド・ヘルド通信デバイス、病院用デバイス、ゲーム・デバイス若しくはシステム、エンターテインメント・システム、車載コンピュータ・システム、組み込みシステム・コントローラ、リモート・コントロール、電化製品、家庭用電子機器、ワークステーション、エッジ・デバイス、これらの描出したデバイスの任意の組み合わせ、又は任意の他の適切なデバイスとして具体化され得る。
【0092】
機械学習
PPU400などのプロセッサ上で開発された深層ニューラル・ネットワーク(DNN:Deep Neural Network)は、自動運転車から、医薬品開発の迅速化、オンライン画像データベースでの自動画像キャプショニングから、ビデオ・チャット・アプリケーションでのスマートなリアル・タイム言語翻訳まで、様々な使用事例に使用されてきている。深層学習は、人間の脳の神経学習過程をモデル化し、継続的に学習し、継続的によりスマートになり、時間の経過とともにより正確な結果をより迅速にもたらす手法である。子どもは、まず大人から様々な形状を正しく識別して分類するように教育を受け、最終的には、指導なしで形状を特定できるようになる。同様に、深層学習システム又はニューラル学習システムは、基本的なオブジェクト、隠れたオブジェクトなどをよりスマート且つ効率的に識別すると同時に、オブジェクトにコンテキストを割り当てるために、オブジェクト認識及び分類に関するトレーニングを受ける必要がある。
【0093】
最も単純なレベルでは、人間の脳のニューロンは、受け取った様々な入力を観察し、これらの入力の各々に重要度レベルが割り当てられ、作用するために他のニューロンに出力が渡される。人工ニューロン又はパーセプトロンは、ニューラル・ネットワークの最も基本的なモデルである。1つの実例では、パーセプトロンは、パーセプトロンが認識及び分類するようにトレーニングされているオブジェクトの様々な特徴を表す1つ又は複数の入力を受け取ることができ、これらの特徴の各々には、オブジェクトの形状を定義する際のその特徴の重要度に基づいて、特定の重みが割り当てられる。
【0094】
深層ニューラル・ネットワーク(DNN)モデルは、膨大な量の入力データでトレーニングされて複雑な問題を高精度で迅速に解決することができる多数の接続ノードの複数の層(例えば、パーセプトロン、ボルツマン・マシン、放射基底関数、畳み込み層など)を含む。1つの実例では、DNNモデルの第1の層は、自動車の入力画像を様々なセクションに分割し、直線及び角度などの基本パターンを探す。第2の層は、線を集めて、ホイール、フロントガラス、及びミラーなどの上位レベルのパターンを探す。次の層は、車両のタイプを識別し、いくつかの最終層は、入力画像のラベルを生成し、特定の自動車ブランドのモデルを識別する。
【0095】
DNNがトレーニングされると、DNNを導入及び使用して、推論として知られているプロセスでオブジェクト又はパターンを識別及び分類することができる。推論(DNNが所与の入力から有用な情報を抽出するプロセス)の実例としては、ATMマシンに預け入れされた小切手の手書きの数字を識別すること、写真の中の友人の画像を識別すること、5,000万人以上のユーザに推薦する映画を提供すること、無人自動車において様々なタイプの自動車、歩行者、及び道路障害物を識別及び分類すること、又は、人間の音声をリアル・タイムで翻訳することが挙げられる。
【0096】
トレーニング中、データは、入力に対応するラベルを示す予測が生成されるまで、順方向伝播フェーズでDNNを通過する。ニューラル・ネットワークが入力に正しくラベルを付けない場合、正しいラベルと予測ラベルとの間のエラーが解析され、DNNが当該入力とトレーニング・データセットの他の入力に正しくラベルを付けるまで、後方向伝播フェーズ中に各特徴の重みが調整される。複雑なニューラル・ネットワークをトレーニングするには、PPU400でサポートされる浮動小数点乗算及び加算など、大量の並列計算性能が必要である。推論は、トレーニングよりも計算集約的ではなく、トレーニングされたニューラル・ネットワークがこれまでに見たことのない新しい入力に適用されて、画像を分類し、感情を検出し、推薦事項を特定し、音声を認識及び翻訳し、概して新しい情報を推論するレイテンシに敏感なプロセスである。
【0097】
ニューラル・ネットワークは、行列数学演算に大きく依存しており、複雑な多層ネットワークでは、効率と速度との両方のために多大な量の浮動小数点性能及び帯域幅が必要である。行列数学演算に最適化され、且つ数十から数百のTFLOPSの性能を提供する数千の処理コアによって、PPU400は、深層ニューラル・ネットワーク・ベースの人工知能及び機械学習アプリケーションに必要な性能を提供することが可能である計算プラットフォームである。
【0098】
更に、本明細書に開示される手法のうちの1つ又は複数を適用して生成される画像を使用して、現実世界のオブジェクト及び環境を認識するために使用されるDNNのトレーニング、テスト、又は認定を行うことができる。このような画像には、道路、工場、建物、都市部の環境、農村部の環境、人間、動物、及び他の物理的オブジェクト又は現実世界の環境のシーンが含まれ得る。このような画像を使用して、現実世界の物理的オブジェクトを操作する、処理する、又は修正するためにマシン又はロボットに採用されるDNNのトレーニング、テスト、及び認定を行うことができる。更に、このような画像を使用して、現実世界で車両をナビゲート及び動かすために自律走行車両に採用されるDNNのトレーニング、テスト、及び認定を行うことができる。追加的に、本明細書に開示される手法のうちの1つ又は複数を適用して生成される画像を使用して、そのようなマシン、ロボット、及び車両のユーザに情報を伝えることができる。
【0099】
図5Cは、少なくとも1つの実施例による、機械学習のトレーニング及び利用に使用できる模範的なシステム555のコンポーネントを示す。考察するように、様々なコンポーネントは、単一のエンティティ又は複数のエンティティの制御下にあり得る、計算デバイス及びリソースの様々な組み合わせ、又は単一の計算システムによって提供することができる。更に、様々なエンティティによって、態様がトリガされ、開始され、又は要求され得る。少なくとも1つの実施例では、ニューラル・ネットワークのトレーニングは、プロバイダ環境506に関連付けられたプロバイダから指示され得る一方で、少なくとも1つの実施例では、トレーニングは、クライアント・デバイス502又は他のそのようなリソースを介してプロバイダ環境へアクセスする顧客又は他のユーザから要求され得る。少なくとも1つの実施例では、トレーニング・データ(又はトレーニングされたニューラル・ネットワークによって解析されるデータ)は、プロバイダ、ユーザ、又はサード・パーティ・コンテンツ・プロバイダ524によって提供され得る。少なくとも1つの実施例では、クライアント・デバイス502は、ユーザの代理としてナビゲートされる車両又はオブジェクトであり得、例えば、デバイスのナビゲーションを支援するリクエストを提出する及び/又は指示を受信することができる。
【0100】
少なくとも1つの実施例では、プロバイダ環境506によって受信されるように、少なくとも1つのネットワーク504を介してリクエストを提出することができる。少なくとも1つの実施例では、クライアント・デバイスは、デスクトップ・コンピュータ、ノートブック・コンピュータ、コンピュータ・サーバ、スマートフォン、タブレット・コンピュータ、ゲーム・コンソール(ポータブルであるか又はそうでないもの)、コンピュータ・プロセッサ、計算論理、及びセット・トップ・ボックスなどであるが、これらに限定されない、ユーザがそのようなリクエストを生成及び送信することを可能にする任意の適切な電子及び/又は計算デバイスであり得る。ネットワーク504には、インターネット、イントラネット、イーサネット(登録商標)、セルラ・ネットワーク、ローカル・エリア・ネットワーク(LAN)、ワイド・エリア・ネットワーク(WAN)、パーソナル・エリア・ネットワーク(PAN:Personal Area Network)、ピア間の直接ワイヤレス接続のアド・ホック・ネットワークなどを含み得る、リクエスト又は他のそのようなデータを送信するための適切なネットワークが含まれ得る。
【0101】
少なくとも1つの実施例では、リクエストは、インターフェース層508で受信することができ、インターフェース層508は、この実例では、トレーニング及び推論マネージャ532にデータを転送することができる。トレーニング及び推論マネージャ532は、リクエスト、及びサービスに対応するデータ又はコンテンツを管理するためのハードウェア及びソフトウェアを含むシステム又はサービスであり得る。少なくとも1つの実施例では、トレーニング及び推論マネージャ532は、ニューラル・ネットワークをトレーニングするためのリクエストを受信することができ、また、トレーニング・モジュール512へのリクエストのためのデータを提供することができる。少なくとも1つの実施例では、トレーニング・モジュール512は、リクエストによって指定されていない場合、使用する適切なモデル又はニューラル・ネットワークを選択し、関連するトレーニング・データを使用してモデルをトレーニングすることができる。少なくとも1つの実施例では、トレーニング・データは、トレーニング・データ・リポジトリ514に保存された、クライアント・デバイス502から受信された、又はサード・パーティ・プロバイダ524から取得されたデータのバッチであり得る。少なくとも1つの実施例では、トレーニング・モジュール512は、トレーニング・データに対する責任を負っている場合がある。ニューラル・ネットワークは、リカレント・ニューラル・ネットワーク(RNN:Recurrent Neural Network)又は畳み込みニューラル・ネットワーク(CNN:Convolutional Neural Network)など、任意の適切なネットワークであり得る。ニューラル・ネットワークがトレーニングされて、成功裏に評価されると、トレーニングされたニューラル・ネットワークは、モデル・リポジトリ516に保存され得る。モデル・リポジトリ516は、例えば、ユーザ、アプリケーション、又はサービスなどの様々なモデル又はネットワークを保存し得る。少なくとも1つの実施例では、多数の異なる要因に基づいて利用され得るように、単一のアプリケーション又はエンティティに対して複数のモデルが存在し得る。
【0102】
少なくとも1つの実施例では、次の時点において、トレーニングされたニューラル・ネットワークによって少なくとも部分的に決定されるか又は影響を受けるコンテンツ(例えば、パス決定)又はデータについて、クライアント・デバイス502(又は別のそのようなデバイス)からリクエストが受信され得る。このリクエストには、例えば、1つ又は複数の推論若しくは他の出力値、分類、又は予測を取得するためにニューラル・ネットワークを使用して処理される入力データが含まれ得る。又は、少なくとも1つの実施例では、入力データは、インターフェース層508によって受信され、推論モジュール518に向けられてもよい。ただし、異なるシステム又はサービスを使用することもできる。少なくとも1つの実施例では、推論モジュール518は、推論モジュール518にローカルにまだ保存されていない場合、本明細書で考察されるようにトレーニングされた深層ニューラル・ネットワーク(DNN)などの適切なトレーニングされたネットワークを、モデル・リポジトリ516から取得することができる。推論モジュール518は、トレーニングされたネットワークへの入力としてデータを提供でき、トレーニングされたネットワークは、その後、出力として1つ又は複数の推論を生成することができる。これには、例えば、入力データのインスタンスの分類が含まれ得る。少なくとも1つの実施例では、推論は、次に、ユーザに対する表示又は通信のために、クライアント・デバイス502に送信され得る。少なくとも1つの実施例では、ユーザのコンテキスト・データはまた、ユーザ・コンテキスト・データ・リポジトリ522に保存され得る。ユーザ・コンテキスト・データ・リポジトリ522には、推論を生成する際又はインスタンスの取得後にユーザに返すデータを決定する際にネットワークへの入力として有用であり得るユーザに関するデータが含まれ得る。少なくとも1つの実施例では、入力又は推論データのうちの少なくとも一部を含み得る関連データはまた、将来のリクエストを処理するためにローカル・データベース534に保存され得る。少なくとも1つの実施例では、ユーザはアカウント情報又は他の情報を使用して、プロバイダ環境のリソース又は機能にアクセスすることができる。少なくとも1つの実施例では、許可され且つ利用可能である場合は、モデルを更にトレーニングするためにユーザ・データも収集及び使用して、将来のリクエストに対してより正確な推論を提供することができる。少なくとも1つの実施例では、リクエストは、ユーザ・インターフェースを介して、クライアント・デバイス502上で実行されている機械学習アプリケーション526へ受信され、同じインターフェースを介して結果が表示され得る。クライアント・デバイスは、リクエストを生成し、結果又は応答を処理するためのプロセッサ528及びメモリ562だけでなく、機械学習アプリケーション526のデータを保存するための少なくとも1つのデータ・ストレージ要素552などのリソースを含み得る。
【0103】
少なくとも1つの実施例では、プロセッサ528(又はトレーニング・モジュール512又は推論モジュール518のプロセッサ)は、中央処理ユニット(CPU:Central Processing Unit)になる。しかしながら、すでに述べたように、このような環境におけるリソースは、GPUを利用して、少なくとも特定のタイプのリクエストのデータを処理することができる。数千のコアによって、PPU400などのGPUは、かなりの並列ワークロードを処理するように設計されているため、ニューラル・ネットワークのトレーニング及び予測の生成のための深層学習によく使われるようになっている。オフライン・ビルド用にGPUを使用することで、より大規模で複雑なモデルのトレーニングを迅速に行うことができるが、オフラインで予測を生成することは、要求時の入力特徴を使用できないか、又は特徴のすべての順列に対して予測を生成し、リアル・タイム・リクエストに役立つためにルック・アップ・テーブルに保存しなければならないことを意味する。深層学習フレームワークがCPUモードをサポートしており、妥当なレイテンシで、CPU上でフィード・フォワードを実行するのにモデルが十分に小さく且つ単純である場合、CPUインスタンス上のサービスがモデルをホストすることができる。この場合、トレーニングは、GPUで、オフラインで行うことができ、推論は、CPUで、リアル・タイムで行うことができる。CPUアプローチが実行可能ではない場合は、GPUインスタンスでサービスを実行することができる。しかしながら、GPUの性能及びコスト特性はCPUとは異なるため、ランタイム・アルゴリズムをGPUにオフロードするサービスを実行することは、CPUベースのサービスとは異なる設計が必要になり得る。
【0104】
少なくとも1つの実施例では、プロバイダ環境506におけるエンハンスメントのために、ビデオ・データがクライアント・デバイス502から提供され得る。少なくとも1つの実施例では、クライアント・デバイス502でのエンハンスメントのために、ビデオ・データが処理され得る。少なくとも1つの実施例では、ビデオ・データは、サード・パーティ・コンテンツ・プロバイダ524からストリーミングされ、サード・パーティ・コンテンツ・プロバイダ524、プロバイダ環境506、又はクライアント・デバイス502によってエンハンスされ得る。少なくとも1つの実施例では、プロバイダ環境506においてトレーニング・データとして使用されるために、ビデオ・データがクライアント・デバイス502から提供され得る。
【0105】
少なくとも1つの実施例では、クライアント・デバイス502及び/又はプロバイダ環境506によって、教師付き及び/又は教師なしトレーニングを実行することができる。少なくとも1つの実施例では、トレーニング・データ514(例えば、分類された又はラベル付けされたデータ)のセットが、トレーニング・データとして機能するための入力として提供される。少なくとも1つの実施例では、トレーニング・データには、ニューラル・ネットワークのトレーニング対象となる少なくとも1つのタイプのオブジェクトのインスタンスと、そのタイプのオブジェクトを特定する情報とが含まれ得る。少なくとも1つの実施例では、トレーニング・データには、各々があるタイプのオブジェクトの表現を含んでいる画像のセットが含まれ得る。また、各画像には、ラベル、メタデータ、分類、又はそれぞれの画像内に表されるオブジェクトのタイプを識別する他の情報が含まれているか、又は関連付けられている。トレーニング・データとして、他の様々なタイプのデータを使用することができ、テキスト・データ、オーディオ・データ、ビデオ・データなどが含まれ得る。少なくとも1つの実施例では、トレーニング・データ514は、トレーニング・モジュール512へのトレーニング入力として提供される。少なくとも1つの実施例では、トレーニング・モジュール512は、ニューラル・ネットワーク(又は他のモデル若しくはアルゴリズムなど)をトレーニングするためにトレーニング・アプリケーションを実行する1つ又は複数の計算デバイスなど、ハードウェア及びソフトウェアを含むシステム又はサービスであり得る。少なくとも1つの実施例では、トレーニング・モジュール512は、トレーニングに使用するモデルのタイプを示す指示又はリクエストを受信する。少なくとも1つの実施例では、モデルは、そのような目的に有用である任意の適切な統計モデル、ネットワーク、又はアルゴリズムであり得、人工ニューラル・ネットワーク、深層学習アルゴリズム、学習分類器、ベイズ・ネットワークなどが含まれ得る。少なくとも1つの実施例では、トレーニング・モジュール512は、適切なリポジトリ516から初期モデル又は他のトレーニングされていないモデルを選択し、トレーニング・データ514を利用してモデルをトレーニングし、これにより、同様のタイプのデータを分類したり、他のそのような推論を生成したりするために使用することができるトレーニングされたモデル(例えば、トレーニングされた深層ニューラル・ネットワーク)を生成することができる。トレーニング・データが使用されない少なくとも1つの実施例では、トレーニング・モジュール512に従って、入力データのトレーニングに適切な初期モデルを依然として選択することができる。
【0106】
少なくとも1つの実施例では、モデルは、選択されたモデルのタイプに部分的に応じて、いくつかの異なる方法でトレーニングすることができる。少なくとも1つの実施例では、機械学習アルゴリズムにトレーニング・データのセットを提供することができる。ここで、モデルは、トレーニング・プロセスによって作成されたモデル・アーチファクトである。少なくとも1つの実施例では、トレーニング・データの各インスタンスは、正解(例えば、分類)を含み、これは、ターゲット又はターゲット属性と呼ばれ得る。少なくとも1つの実施例では、学習アルゴリズムは、入力データ属性をターゲット(予測される回答)にマッピングするトレーニング・データのパターンを見つけ、これらのパターンをキャプチャする機械学習モデルが出力される。少なくとも1つの実施例では、次に、機械学習モデルを使用して、ターゲットが指定されていない新しいデータの予測を取得することができる。
【0107】
少なくとも1つの実施例では、トレーニング及び推論マネージャ532は、バイナリ分類モデル、マルチクラス分類モデル、生成モデル、及び回帰モデルを含む機械学習モデルのセットから選択することができる。少なくとも1つの実施例では、使用されるモデルのタイプは、少なくとも部分的に予測されるターゲットのタイプに依存することができる。
【0108】
一実施例では、PPU400は、グラフィックス処理ユニット(GPU)を含む。PPU400は、グラフィックス・データを処理するためのシェーダ・プログラムを指定するコマンドを受信するように構成されている。グラフィックス・データは、点、直線、三角形、四角形、三角形ストリップなどのプリミティブのセットとして定義され得る。通常、プリミティブには、プリミティブのいくつかの頂点(例えば、モデル空間座標系にある)と、プリミティブの各頂点に関連付けられる属性とを指定するデータが含まれる。PPU400は、グラフィックス・プリミティブを処理してフレーム・バッファ(例えば、ディスプレイのピクセルの各々のピクセル・データ)を生成するように構成され得る。
【0109】
アプリケーションが、シーンのモデル・データ(例えば、頂点及び属性の集合)を、システム・メモリ又はメモリ404といったメモリに書き込みを行う。モデル・データは、ディスプレイで可視であり得るオブジェクトの各々を定義する。アプリケーションは、次に、モデル・データのレンダリング及び表示を要求するドライバ・カーネルに対してAPI呼び出しを行う。ドライバ・カーネルは、モデル・データを読み取り、1つ又は複数のストリームにコマンドを書き込み、モデル・データを処理するための操作を実行する。コマンドは、PPU400内の処理ユニットに実装される、頂点シェーダ、ハル・シェーダ、ドメイン・シェーダ、ジオメトリ・シェーダ、及びピクセル・シェーダのうちの1つ又は複数を含む様々なシェーダ・プログラムを参照し得る。例えば、処理ユニットのうちの1つ又は複数は、モデル・データによって定義されたいくつかの頂点を処理する頂点シェーダ・プログラムを実行するように構成され得る。一実施例では、異なる処理ユニットが、異なるシェーダ・プログラムを同時に実行するように構成され得る。例えば、処理ユニットの第1のサブセットは、頂点シェーダ・プログラムを実行するように構成され得、処理ユニットの第2のサブセットは、ピクセル・シェーダ・プログラムを実行するように構成され得る。処理ユニットの第1のサブセットは、頂点データを処理して、処理された頂点データを生成し、処理された頂点データをL2キャッシュ460及び/又はメモリ404に書き込む。処理された頂点データがラスタライズされて(例えば、3次元データからスクリーン空間内の2次元データに変換されて)、フラグメント・データが生成された後、処理ユニットの第2のサブセットは、ピクセル・シェーダを実行して、処理されたフラグメント・データを生成する。これは、次に、他の処理されたフラグメント・データとブレンドされ、メモリ404内のフレーム・バッファに書き込まれる。頂点シェーダ・プログラム及びピクセル・シェーダ・プログラムは同時に実行し、シーンのすべてのモデル・データがフレーム・バッファにレンダリングされるまで、パイプライン化された方法で同じシーンからの異なるデータを処理し得る。次に、フレーム・バッファの内容が、ディスプレイ・デバイスでの表示のためにディスプレイ・コントローラに送信される。
【0110】
本明細書に開示される手法のうちの1つ又は複数を適用して生成される画像は、モニタ又は他のディスプレイ・デバイスに表示され得る。いくつかの実施例では、ディスプレイ・デバイスは、画像を生成又はレンダリングするシステム又はプロセッサに直接結合され得る。他の実施例では、ディスプレイ・デバイスは、ネットワーク経由など、システム又はプロセッサに間接的に結合され得る。このようなネットワークの例としては、インターネット、モバイル電気通信ネットワーク、WIFIネットワーク、並びに任意の他の有線及び/又はワイヤレス・ネットワーク・システムが挙げられる。ディスプレイ・デバイスが間接的に結合されている場合、システム又はプロセッサによって生成された画像は、ネットワーク経由でディスプレイ・デバイスにストリーミングされ得る。このようなストリーミングは、例えば、ビデオゲーム、又は画像をレンダリングする他のアプリケーションが、サーバ、データ・センタ、又は、クラウド・ベースの計算環境で実行されることを可能にし、また、レンダリングされた画像が、サーバ又はデータ・センタから物理的に別個の1つ又は複数のユーザ・デバイス(コンピュータ、ビデオ・ゲーム・コンソール、スマートフォン、他のモバイル・デバイスなど)に送信及び表示されることを可能にする。したがって、本明細書で開示される手法を適用して、ストリーミングされる画像をエンハンスしたり、NVIDIA GeForce Now(GFN)、Google Stadiaなどの画像をストリーミングするサービスを向上させたりすることができる。
【0111】
ストリーミング・システム例
図6は、本開示のいくつかの実施例による、ストリーミング・システム605のシステム図例である。
図6は、サーバ603(
図5Aの処理システム例500及び/又は
図5Bの模範的なシステム565と同様のコンポーネント、特徴、及び/又は機能を含み得る)、クライアント・デバイス604(
図5Aの処理システム例500及び/又は
図5Bの模範的なシステム565と同様のコンポーネント、特徴、及び/又は機能を含み得る)、及びネットワーク606(本明細書に説明されるネットワークと同様であり得る)を含む。本開示のいくつかの実施例では、システム605が実装され得る。
【0112】
一実施例では、ストリーミング・システム605は、ゲーム・ストリーミング・システムであり、サーバ603は、ゲーム・サーバである。システム605では、ゲーム・セッションでは、クライアント・デバイス604は、入力デバイス626への入力に応答して入力データのみを受信し、入力データをサーバ603に送信し、符号化された表示データをサーバ603から受信し、表示データをディスプレイ624に表示し得る。したがって、より計算集約的な計算及び処理が、サーバ603にオフロードされる(例えば、ゲーム・セッションのグラフィカル出力のためのレンダリング、特に、レイ又はパス・トレーシングがサーバ603のGPU615によって実行される)。つまり、ゲーム・セッションは、サーバ603からクライアント・デバイス604にストリーミングされるため、グラフィックス処理及びレンダリングのためのクライアント・デバイス604の要件が低減される。
【0113】
例えば、ゲーム・セッションのインスタンス化に関して、クライアント・デバイス604は、サーバ603からの表示データの受信に基づいて、ゲーム・セッションのフレームをディスプレイ624に表示し得る。クライアント・デバイス604は、入力デバイス626のうちの1つへの入力を受信し、それに応じて入力データを生成し得る。クライアント・デバイス604は、通信インターフェース621を介して、ネットワーク606(例えば、インターネット)経由でサーバ603に入力データを送信し、サーバ603は、通信インターフェース618を介して入力データを受信し得る。CPU608は、入力データを受信し、入力データを処理し、GPU615にゲーム・セッションのレンダリングを生成させるデータをGPU615に送信し得る。例えば、入力データは、ゲーム内のユーザのキャラクタの動き、武器の発射、再装弾、ボールの受け渡し、車両の旋回などを表し得る。レンダリング・コンポーネント612が、ゲーム・セッション(例えば、入力データの結果を表す)をレンダリングし、レンダ・キャプチャ・コンポーネント614が、ゲーム・セッションのレンダリングを表示データとして(例えば、ゲーム・セッションのレンダリングされたフレームをキャプチャする画像データとして)キャプチャし得る。ゲーム・セッションのレンダリングには、GPUなどの1つ又は複数の並列処理ユニットを使用して計算されるレイ又はパス・トレースされたライティング及び/又はシャドウ効果が含まれ得、GPUは更に、1つ又は複数の専用ハードウェア・アクセラレータ又は処理コアの使用を採用して、サーバ603のレイ又はパス・トレーシング手法を実行し得る。次に、符号化器616が表示データを符号化して、符号化された表示データを生成し得る。符号化された表示データは、通信インターフェース618を介して、ネットワーク606経由でクライアント・デバイス604に送信され得る。クライアント・デバイス604は、通信インターフェース621を介して、符号化された表示データを受信し得る。復号化器622が符号化された表示データを復号化して、表示データを生成し得る。次に、クライアント・デバイス604は、ディスプレイ624を介して表示データを表示し得る。
【0114】
サーバ603は、通信インターフェース618及びネットワーク606を介して、計算されたFECパケットとともにクライアント・デバイス604に転送される1つ又は複数のソース・ビデオ・ストリーム(メディア・パケット・フレーム)を受信するシステム100のFEC符号化器110を含み得る。
【0115】
本明細書に説明される手法は、プロセッサ・ベースの命令実行マシン、システム、装置、又はデバイスによる、又はこれらに関連する使用のためにコンピュータ可読媒体に保存された実行可能命令に具体化され得ることに留意されたい。いくつかの実施例では、当業者は、データを保存するために様々なタイプのコンピュータ可読媒体を含めることが可能であることを理解するであろう。本明細書で使用される場合、「コンピュータ可読媒体」には、命令実行マシン、システム、装置、又はデバイスが、コンピュータ可読媒体から命令を読み取り(フェッチし)、説明された実施例を実行するために命令を実行し得るように、コンピュータ・プログラムの実行可能命令を保存するための任意の適切な媒体のうちの1つ又は複数が含まれる。適切なストレージ形式には、電子形式、磁気形式、光学形式、及び電磁形式のうちの1つ又は複数が含まれる。従来の模範的なコンピュータ可読媒体の非包括的リストには、ポータブル・コンピュータ・ディスケット、ランダム・アクセス・メモリ(RAM:Random Access Memory)、読み取り専用メモリ(ROM:Read-Only Memory)、消去可能プログラム可能読み取り専用メモリ(EPROM:Erasable Programmable Read Only Memory)、フラッシュ・メモリ・デバイス、及び光学ストレージ・デバイス(ポータブル・コンパクト・ディスク(CD:Compact Disc)、ポータブル・デジタル・ビデオ・ディスク(DVD:Digital Video Disc)などを含む)が含まれる。
【0116】
添付の図に例示されているコンポーネントの配置は、例示のためのものであり、他の配置が可能であることを理解すべきである。例えば、本明細書で説明される要素のうちの1つ又は複数は、全体的又は部分的に、電子ハードウェア・コンポーネントとして実現され得る。他の要素は、ソフトウェア、ハードウェア、又はソフトウェアとハードウェアとの組み合わせで実装され得る。更に、本明細書で説明される機能を依然として実現しながら、これらの他の要素のうちのいくつか又は全部を組み合わせても、いくつかを完全に省略しても、追加のコンポーネントを追加してもよい。したがって、本明細書で説明される主題は、多くの異なるバリエーションで具体化され得、そのようなバリエーションはすべて特許請求の範囲内であると企図されている。
【0117】
本明細書で説明される主題を理解しやすくするために、多くの態様は、一連のアクションで説明されている。当業者は、特殊回路によって、1つ又は複数のプロセッサによって実行されるプログラム命令によって、又はその両方の組み合わせによって、様々なアクションが実行され得ることを認識するであろう。本明細書における任意の一連のアクションの説明は、その一連を実行するために説明された特定の順序に従う必要があることを意味することを意図するものではない。本明細書に説明されるすべての方法は、本明細書に特に明記されていない限り、又はコンテキストによって明確に矛盾する場合を除き、任意の適切な順序で実行され得る。
【0118】
主題を説明するコンテキスト(特に、次の特許請求の範囲のコンテキスト)における「a」及び「an」及び「the」の用語及び同様の参照の使用は、本明細書に特に明記されていない限り、又はコンテキストによって明確に矛盾する場合を除き、単数形及び複数形の両方を対象とするように解釈されるべきである。1つ又は複数の項目のリストが続く「少なくとも1つ」という用語の使用(例えば、「A及びBのうちの少なくとも1つ」)は、本明細書に特に明記されていない限り、又はコンテキストによって明確に矛盾する場合を除き、リストされた項目から選択される1つの項目(A又はB)、又は、リストされた項目のうちの2つ以上の任意の組み合わせ(A及びB)を意味するものと解釈されるべきである。更に、前述の説明は、例示のためだけであり、限定のためではない。これは、求められる保護の範囲は、以下に記載される特許請求の範囲と、その任意の均等物とともに定義されるためである。本明細書に提供される任意及びすべての実例又は例示的な用語(例えば、「など」)の使用は、単に主題をよりよく例示することを目的としたものであり、特に主張されていない限り、主題の範囲に限定を課すものではない。特許請求の範囲及び書面の説明の両方における、「~に基づく(based on)」という用語及び結果をもたらすための条件を示す他の類似フレーズの使用は、その結果をもたらす他の条件を除外することは意図されていない。本明細書における用語は、請求項に係わらない任意の要素が、請求項に係る発明の実践に不可欠であることを示していると解釈されるべきではない。
【外国語明細書】