本発明は独立請求項による装置、システム及び方法によって定義される。好ましい実施例は従属項で定義される。
本発明の第1態様によると、装置が定義され、前記装置は前記装置をインターコネクトに結合させるように構成されるインターフェースと、データを処理するようにそれぞれ構成される複数のプロセッシングモジュールと、複数のプロセッシングモジュールそれぞれの処理を制御するように構成される制御モジュールと、複数のプロセッシングモジュールのうち少なくとも一つによって処理されるデータの少なくとも一部を保存するように構成されるキャッシュモジュールを含み、それぞれのプロセッシングモジュールは複数のプロセッシング要素を使って演算を遂行することによってデータを処理するように構成されるプロセッシングコアと、インターフェースを通じてのデータおよびキャッシュモジュールに保存されたデータを引き出し、引き出されたデータをプロセッシングコアに提供するように構成される入力制御ユニットと、プロセッシングコアによって処理されたデータをインターフェースおよびキャッシュモジュールに提供するように構成される出力制御ユニットを含む。
前記装置は前記インターフェースを使ってコンピューティングシステムに接続(plugged)され得、前記コンピューティングシステムは複数のプロセッシングモジュールによる処理のための入力データを受信し、前記装置の処理の結果を提供することができる。前記装置は、複数のプロセッシングモジュールがキャッシュモジュールを通じて任意の中間データまたは結果を直接アクセスできるように結果データの一部を保存するキャッシュモジュールをさらに含む。これを通じて、最初の設定に対する入力データの伝送および(最終)結果の交換を減少させることができる。処理中にデータが要求される場合にも、前記インターフェースを通じての中間データの過度な通信が減少し得る。
キャッシュモジュールは同じダイ(die)や回路上で、または同じパッケージ内で複数のプロセッシングモジュールと共に提供され得、キャッシュモジュールを通じて次の計算サイクルに対する入力データで出力データを直接交換できるようにするために、複数のプロセッシングモジュールに有線で連結されるか他の方式で結合され得る。前記キャッシュモジュールは、(互いに異なるまたは同じ)一つ以上のプロセッシングモジュールの処理のための入力としてさらに作用できる、プロセッシングモジュールのうち一つ以上の結果データの少なくとも一部を保存および/またはバッファリングするメモリとして構成され得る。前記キャッシュモジュールは、それぞれのプロセッシングモジュールのための低レイテンシ(latency)オンチップ(on-chip)メモリを提供するために、プロセッシングモジュールに連結され得る多数の書き込み及び読み取りポートを有するメモリであり得る
前記装置は複数のプロセッシングモジュールを含み、各プロセッシングモジュールは前記インターフェースを通じて、または前記キャッシュモジュールから直接引き出され得る入力データに対する必要な演算を遂行することができる。これを通じて、多様な作業や演算のために前記装置を柔軟に構成することができる。
それぞれのプロセッシングモジュールは、入力データの多数のデータ値を処理して対応する(中間)結果を生成できる複数のプロセッシング要素を有するプロセッシングコアを含む。それぞれのプロセッシングモジュールは、プロセッシングコアによって処理される入力データが、インターフェースを通じて引き出されるか、またはキャッシュモジュールから引き出されるかを制御する入力制御ユニットをさらに含む。コンボリューション演算結果の提供は出力制御ユニットによってさらに制御され、出力制御ユニットは出力データがインターフェースを通じて(外部保存所に)提供されるか、または複数のプロセッシングモジュールのうち少なくとも一つによって後続入力としてさらに使用される中間データとしてキャッシュモジュールに保存されるかを制御する。これを通じて、多様な作業や演算のための動作を加速するように前記装置を柔軟に構成することができ、これに伴い、可用リソースが効率的に活用され、インターフェースを通じて外部ホストに通信されるデータの量が減少する。したがって、各プロセッシング要素はキャッシュモジュールに対する同時アクセスを獲得するために、個別的な書き込み及び読み取りインターフェース上でキャッシュモジュールにアクセスすることができる。
好ましくは、入力データおよび/または出力データはニューラルネットワークのレイヤーデータを含むことができる。一実施例において、入力データおよび/または出力データはイメージデータを含むことができ、入力データおよび/または出力データのデータ要素は各イメージの画像要素(ピクセル)であり得る。
好ましい実施例において、前記演算はコンボリューション演算であり得る。したがって、本明細書の全般にわたって、プロセッシングモジュールはコンボリューションモジュールで表記され得、プロセッシングコアは複数のプロセッシング要素を使ってコンボリューション演算を遂行することによってデータを処理するように構成され得るコンボリューションコアで表記され得る。しかし、本発明はコンボリューション演算を加速することにのみ限定されないことが理解されるべきである。他の実施例において、プロセッシングコアは例えば入力データに対する関係演算を遂行することができる。当業者は多様な他の例の演算を考慮することができる。
好ましい実施例において、制御モジュールはインターフェースを通じて構成データを引き出し、該当構成データに基づいて複数のプロセッシングモジュールのうち少なくとも一つのプロセッシングモジュールを設定するように構成される。前記構成データは次元性(dimensionality)、データ類型などを含む入力データの特性を記述/含むことができる。また、前記構成データは、処理される入力データのデータ、繰り返し回数などを識別できる演算(例えばコンボリューション演算)のパラメータをさらに記述/含むことができる。また、前記構成データは、任意の組み合わせで中間データおよび/または結果的な出力データの特性(例えば大きさ、データ類型など)を保存するためのキャッシュモジュールの活用をさらに記述することができる。前記構成データは、望む演算を遂行するように前記装置を設定できるホストによって送信され得る。設定後に、前記装置はインターフェースを通じて最初の入力データを受信することができ、前記制御モジュールは複数のプロセッシングモジュールをトリガリング(trigger)して最初および任意の後続入力データの処理を開始することができる。
好ましい実施例において、前記制御モジュールは複数のプロセッシングモジュールの間でコマンドをスケジューリング(schedule)するようにさらに構成される。前記コマンドは入力データの可用性により個別プロセッシングモジュールの処理を開始することができ、インターフェースを通じて、および/またはキャッシュモジュールに/から出力データおよび/または入力データを保存および/または引き出すように個別プロセッシングモジュールをさらに構成することができる。
一実施例において、前記コマンドは複数のプロセッシングモジュールの入力制御ユニットおよび出力制御ユニットのうち一つ以上から受信される複数の状態に応答してスケジューリングされる。これらの状態は状態フラグでまたは類似する技術を通じてシグナリングされ得る。前記制御モジュールは、複数のプロセッシングモジュールの入力制御ユニットおよび出力制御ユニットのそれぞれに連結され、入力データの読み取りが完了したという表示、結果が準備されたという表示、結果の提供が完了したという表示、および複数のプロセッシングモジュール間のコマンドの仲裁を可能とする処理の追加状態のうち一つ以上を示すことができる信号を受信することができる。前記コマンドは任意の種類のプログラミングロジックまたはプログラミング言語を使って定義され得る。前記コマンドは、多数のパラメータを単一ワードに接合(concatenate)させることができる複数のビット(例えば64、128、256、512、1024、またはそれ以上(好ましくは2の指数)のビット)を含む2進ワードを使って定義される2進命令語で定義され得る。しかし、ワードを定義するためにより多いか少ないビットが使われ得ることが理解されるべきである。例えば、2進命令語は512ビットのワードを含むことができる。それぞれのプロセッシングモジュールによる処理のパラメータは、レイヤー演算類型およびパラメータ(例えば領域の大きさ、フィルタの大きさ、ストライド(stride)、拡張(dilation)、コンボリューション/デコンボリューション/プーリング(pooling)、スケジューリング従属性リストなど);入力平面位置(例えば外部メモリまたはキャッシュモジュール内での)、ベースアドレス、平面オフセットなど;および出力平面位置(例えば外部メモリまたはキャッシュモジュール内での)、ベースアドレス、平面オフセットなどのうち一つ以上を任意の組み合わせで含むことができる。
さらに他の実施例において、前記制御モジュールは、少なくとも一つのプロセッシングモジュールの少なくとも一つの出力制御ユニットおよび一つ以上のプロセッシングモジュールの一つ以上の入力制御ユニットを制御して、少なくとも一つのプロセッシングモジュールによって処理されたデータをキャッシュモジュールを通じて一つ以上のプロセッシングモジュールにフィードバックするように構成される。少なくとも一つのプロセッシングモジュールは後続(コンボリューションまたは任意の異なる)演算で一つ以上のプロセッシングモジュールによって要求され得る結果を提供することができる。前記制御モジュールは少なくとも一つのプロセッシングモジュールの少なくとも一つの出力制御ユニットが任意の結果をキャッシュモジュールに保存するように構成することができ、一つ以上のプロセッシングモジュールの一つ以上の入力制御ユニットが入力データをキャッシュモジュールから読み取るように構成することができる。前記少なくとも一つのプロセッシングモジュールの少なくとも一つのプロセッシングコアがコンボリューション(または任意の異なる演算)を完了するやいなや、前記少なくとも一つのプロセッシングモジュールの少なくとも一つの出力制御ユニットは結果をキャッシュモジュールに保存することができ、結果が利用可能であることを(それぞれの状態フラグを通じて)制御モジュールにシグナリングすることができる。その後、前記制御モジュールは、一つ以上の入力制御ユニットがそれぞれのプロセッシングコアによって遂行される後続(コンボリューションまたは任意の異なる)演算のための入力データとして結果データをキャッシュモジュールから直接引き出すように、一つ以上のプロセッシングモジュールの一つ以上の入力制御ユニットの演算をトリガリングすることができる。これを通じて、インターフェースを通じての入力データまたは結果のいかなる交換も必要とせずに演算の反復的な処理が可能となり、これに伴い、効果的にインターフェースの使用が減少する。キャッシュモジュールが複数のプロセッシングモジュールによって共有されるため、複数のプロセッシングモジュールそれぞれはキャッシングされた結果を再使用することができる。キャッシュモジュールは読み取りおよび書き込み側に多数のポートを有することができるオンチップメモリであり得る。これを通じて、インターフェースに比べてオンチップキャッシュモジュールの帯域幅がさらに広くなり得る。オンチップキャッシュモジュールは電力集約的な境界I/Oインターフェースを必要としないため、電力消耗を効果的に減少させることができる。
さらに他の実施例において、それぞれのプロセッシングモジュールはインターフェースを通じて係数データを引き出すように構成される係数制御ユニットをさらに含む。前記制御モジュールは複数のプロセッシングモジュールの係数制御ユニットのうち一つ以上から受信される複数の状態に応答してコマンドをさらにスケジューリングするように構成され得る。例えば、係数制御ユニットは係数データが読み取られたということを制御モジュールにシグナリングすることができる。係数データはプロセッシングコアに提供され得、これに伴い、プロセッシングコアは入力データおよび係数データに基づいて(コンボリューションまたは任意の異なる)演算を遂行することができる。
好ましい実施例において、少なくとも一つの(またはそれぞれの)プロセッシングコアは、データバッファと、複数のプロセッシング要素を制御して前記データバッファに保存された入力データを処理するように構成される処理制御ユニットをさらに含む。プロセッシング要素によって具現される演算がコンボリューション演算である場合、前記処理制御ユニットは本明細書の全般にわたってコンボリューション制御ユニットとも指称され得ることが理解されるべきである。前記データバッファは入力制御ユニットによって制御され得、入力制御ユニットによって引き出されたデータを保存することができる。前記処理制御ユニットはデータバッファからの入力データの引き出しを駆動することができる。引き続き、前記処理制御ユニットは、それぞれの入力データを使って演算の一部をそれぞれ計算できる複数のプロセッシング要素による(コンボリューションまたは任意の異なる)演算の処理を開始することができる。
好ましい実施例において、少なくとも一つの(またはそれぞれの)プロセッシングコアは係数バッファをさらに含み、前記処理制御ユニットは複数のプロセッシング要素を制御してデータバッファに保存された入力データを係数バッファに保存された係数データを使って処理するように構成される。係数バッファは係数制御ユニットによって制御され得、引き出された係数データを保存することができる。前記処理制御ユニットは、係数データおよび入力データが同時に読み取られるように、係数バッファおよびデータバッファからの係数データおよび入力データの引き出しをそれぞれ駆動することができる。引き続き、前記処理制御ユニットは、それぞれの入力データおよび係数データを使って演算の一部をそれぞれ計算できる複数のプロセッシング要素による(コンボリューションまたは任意の異なる)演算の処理を開始することができる。
好ましい実施例によると、前記係数データは入力データの少なくとも一部に適用される加重値係数およびバイアス値を含む。
一実施例において、前記データバッファはデータ(例えば入力データの少なくとも一部)を2次元アレイで保存するように構成される2次元データバッファである。したがって、保存されたデータは2個のインデックスを使ってアクセスされ得、これに伴い個別プロセッシング要素による処理のための入力データ要素の選択および引き出しを単純化することができる。殆どのシナリオにおいて、前記複数のプロセッシング要素は入力データの連続的な領域で入力データに対する演算を行うため、データバッファは入力データの連続的な領域にローディングされ得、個別プロセッシング要素はこれらのインデックスにより入力データのそれぞれのデータ要素が提供され得る。
好ましい実施例において、前記データバッファ内のデータは本発明の一つ以上の実施例で説明されるような入力ウインドウを使ってアクセスされ得る。
少なくとも一つの実施例において、前記プロセッシングコアの少なくとも一つのプロセッシング要素は、乗算-累積(multiply-accumulate)演算を遂行するように構成される。前記乗算-累積演算は乗算-累積回路(multiply-accumulate circuit;MAC)を使って具現され得る。それぞれのプロセッシング要素は、専用ハードウェアでまたは乗算-累積演算や関係演算のような演算を遂行するように構成されるプログラミング可能なハードウェアで提供され得る。前記プロセッシングモジュールまたはその少なくとも一部はASICを含むカスタマイジング(customize)されたハードウェアで、またはFPGAを含む再構成可能なハードウェアで具現され得る。すべてのプロセッシング要素は同じであるか類似する方式でハードウェアで具現され得、それぞれのプロセッシング要素は演算を具現できることが理解されるべきである。しかし、プロセッシング要素は互いに異なるように具現されてもよい。例えば、それぞれのプロセッシングモジュールの複数のプロセッシング要素は互いに異なる演算を具現することができるか、または同じ演算に対して任意の組み合わせで互いに異なるように具現され得る。
さらに他の実施例において、前記プロセッシングコアの少なくとも一つのプロセッシング要素は(乗算-累積または任意の異なる)演算の結果をバッファリングするように構成される結果保存所をさらに含む。前記結果保存所は部分結果を保存することができ、個別プロセッシング要素によって遂行される演算によって影響を受けるそれぞれの位置で同じ出力に対する部分結果をバッファリングするように処理制御ユニットによって制御され得る。乗算-累積演算を提供するプロセッシング要素は結果保存所を具現するメモリを有するMACユニットと、乗算器、加算器およびバイアスマルチプレクサを有するMADD回路で具現され得る。FPGA具現例において、MADD回路は一つ以上の専用DSPブロックを全体の的にまたは部分的に活用することができる。追加的にまたは代案として、MADD回路は分散ロジックでのみ具現され得る。前記結果保存所を具現するメモリは専用RAMまたはLUT基盤SRAMであり得る。
前記MACユニットの処理は複数のクロックサイクルのレイテンシを有することができる。特に、MADD回路の処理および結果保存所での後続保存は多数のクロックサイクルを必要とし得る。したがって、最近保存された部分結果はいくつかのクロックサイクル後に利用可能(およびアクセス可能または引き出し可能)であり得る。これに伴い、結果保存所での最近修正されたアドレスの遅延された可用性により処理が遅延され得る。このような問題を解決するために、結果保存所はプロセッシングコアの演算の多数の結果をバッファリングすることができ、プロセッシングコアは同じであるか互いに異なる係数および/またはパラメータを使って互いに異なる入力データに対して互いに異なる結果を繰り返し計算することができる。それぞれの部分結果が結果保存所に保存される。MACユニットのレイテンシを定義する多数のクロックサイクルが経過した後に、プロセッシングコアは最初の入力データの処理に戻って、結果保存所に保存された部分結果を要求する最初データに対する次のまたは同じ係数および/またはパラメータに基づいて次の部分結果を計算することができる。このような結果は結果保存所からの要求される部分結果に累積される。このような設計はハードウェアのレイテンシを活用してプロセッシング要素の複雑なハードウェアの具現なしにパイプライニンググ(pipelining)を可能とする。
MACユニットのメモリは後続累積のための結果をバッファリングするためにレジスタを使う従来のMACとは異なる。本発明の実施例に係る結果保存所はそのようなレジスタと比べていくつかの長所を有する。従来のMACでは加算器が単一レジスタから入力を受信するため、入力データの一つの領域にのみ累積が制限され得る。単一レジスタを使って入力データに対する順次的処理を具現することは、読み取られる入力データの量の増加をさらに要求し得る。アドレッシング可能な結果保存所をプロセッシング要素に提供することによって、プロセッシング要素は入力データの多様な領域に対して柔軟に演算を行うことができ、入力データのそれぞれの領域に対する複数の部分結果を保存することができる。
さらに他の実施例において、前記装置はインターフェースを通じて入力データを引き出すように構成され、前記入力データはニューラルネットワークの入力レイヤーの少なくとも一部を示す。前記制御モジュールは、ニューラルネットワークのレイアウトおよびトポロジー(topology)を示し、ニューラルネットワークの各レイヤー上で遂行される(コンボリューションまたは任意の異なる)演算を特定する構成データをインターフェースを通じて受信することができる。
他の実施例において、少なくとも一つのプロセッシングモジュールはニューラルネットワークのレイヤーの少なくとも一部を処理し、キャッシュに保存されたデータはニューラルネットワークの次のレイヤーの少なくとも一部を示す。したがって、前記装置はインターフェースを通じて入力レイヤーの入力データを受信することができ、ニューラルネットワークの次のレイヤーの処理のための入力データとして使われ得る、入力レイヤーに対するコンボリューション演算によって生成された結果の少なくとも一部をキャッシュモジュールに保存することができる。これを通じて、インターフェースを通じて交換されるデータの量を減らすことができる。
好ましくは、前記ニューラルネットワークはコンボリューションニューラルネットワーク(CNN)である。
特に好ましい実施例において、前記装置はコンボリューションニューラルネットワーク加速器である。
本発明の他の一態様によると、プロセッシングホスト、少なくとも一つのメモリ、およびインターコネクトを含むシステムが定義され、前記システムは本発明の一実施例に係る装置をさらに含む。前記インターコネクトは前記プロセッシングホスト、前記少なくとも一つのメモリおよび前記装置を結合させるように構成され得、これに伴い、前記装置は前記インターコネクトを通じて前記少なくとも一つのメモリから入力データを引き出すことができる。前記装置はコンボリューション演算を遂行する加速器であり得る。前記プロセッシングホストは必要なデータ(例えばセンサまたは状態データおよび他の処理データ)を少なくとも一つのメモリにローディングすることができ、望む(コンボリューションまたは任意の異なる)演算を遂行するように前記装置を構成することができる。引き続き、前記ホストは必要な作業を遂行するために、前記少なくとも一つのメモリから入力データを受信(または引き出し)するように前記装置を構成することができる。完了時に、前記装置は前記プロセッシングホストに対して結果の可用性をシグナリングすることができ/できるか、該当結果を前記少なくとも一つのメモリに直接書き込むことができる。
前記装置は、次の繰り返しで望む演算を遂行するために、同一のまたは他のプロセッシングモジュールによってアクセスされ得る、それぞれのプロセッシングモジュールによって処理されたデータの少なくとも一部を保存できるキャッシュモジュールを具現するため、前記少なくとも一つのメモリと前記装置の間で前記インターコネクトを通じて交換されるデータの数が減少する。コンボリューション演算を遂行するように個別的に構成され、インターコネクトを通じてデータをキャッシュモジュールから/に引き出しおよび/または保存し/するか、前記少なくとも一つのメモリに保存できる複数のプロセッシングモジュールを前記装置に提供することによって、前記装置は多様なコンボリューション作業および演算に柔軟に適応することができる。
好ましい実施例において、前記インターコネクトはシステムバスである。
前記装置の実施例は任意の組み合わせで前記システムの実施例に併合され得ることが理解されるべきである。同様に、本発明の一実施例に係る前記システムの特徴は任意の組み合わせで前記装置の少なくとも一つの実施例に併合され得る。
本発明のさらに他の態様によると、本発明の一つ以上の実施例に係る装置を動作させる方法が定義される。
本発明の一態様で、加速器装置によってデータをアクセスし処理するための方法が定義され、前記方法は、前記加速器装置によって処理される入力データの少なくとも一部を引き出す段階、前記入力データを複数の隣接した入力タイルに分節化(segment)する段階-前記入力タイルはあらかじめ決定された大きさを有する-、前記複数の隣接した入力タイルのうち少なくとも一つを前記加速器装置のデータバッファに保存する段階、前記データバッファに保存された、前記複数の隣接した入力タイルのうち前記少なくとも一つのデータ要素にわたって入力ウインドウを配置することによって、前記データバッファに保存された前記データ要素をアクセスして複数の入力領域を生成する段階-前記入力ウインドウはパラメータの集合に応じて調節可能-、および前記複数の入力領域のうち少なくとも一つを順次処理して、前記加速器装置によって前記複数の隣接した入力タイルのうち前記少なくとも一つを少なくとも部分的に処理する段階を含む。
前記方法は本発明の一つ以上の実施例に係る装置に適用され得る。前記方法はデータバッファに保存されたデータの引き出しを単純化する。したがって、プロセッシング要素を具現するハードウェアは連続的な入力領域の処理のために単純化され得る。
一実施例において、前記方法は、複数の隣接した入力タイルのうち他の一つをデータバッファに順次保存する段階、および入力ウインドウを使って複数の隣接した入力タイルのうち前記他の一つのデータをアクセスする段階をさらに含む。
一実施例によると、パラメータの集合はストライド値および拡張値を含む。
好ましい実施例において、拡張値は入力ウインドウの2個の連続的な位置間の距離を規定する。
さらに他の実施例において、前記方法は加速器装置の処理モードを決定する段階をさらに含む。
好ましくは、第1処理モードで、ストライド値は入力ウインドウによってサンプリングされたデータ要素間の間隔を定義する。
他の実施例によると、第2処理モードで、ストライド値は入力ウインドウの単一データ要素によって生成されたデータ要素の数を定義する。データ要素は1以上の次元、2次元、3次元、または4以上の次元で生成され得る。 例えば、データ要素は水平次元および垂直次元を含む2次元で生成され得る。入力ウインドウの単一データ要素によって生成されたデータ要素の数は、次元の数および/または各次元に対して定義され得るストライド値(またはストライド値成分)に従属され得る。例えば、2次元で、水平ストライド値(成分)s×および垂直ストライド値(成分)syが定義され得、入力ウインドウの単一データ要素によって生成されたデータ要素の数はs×*syであり得る。ストライド値および/または拡張値のようなパラメータの集合の任意のパラメータは、入力および/または出力データの次元を指称できる一つ以上の次元に対する一つ以上の成分を有するものと定義され得ることが理解されるべきである。パラメータの各成分は、例えば同じストライド値(成分)が少なくとも一部のまたはすべての次元に適用され得るように、個別次元および/または多数の次元と関連され得る。例えば、s×=syの場合、同じストライド値が出力データの2個の次元それぞれに適用され得る。
一実施例において、パラメータの集合は係数バッファに保存された係数行列に対するマッピングをさらに含み、入力領域はマッピングに応じて係数行列の少なくとも一つの要素を入力領域に適用することによって処理される。
一実施例によると、前記方法は、前記入力領域の生成と並行して前記係数行列の前記少なくとも一つの要素を引き出す段階、および少なくとも一つのプロセッシング要素を使って前記入力領域上に前記係数行列の前記少なくとも一つの要素を適用する段階をさらに含む。
好ましい実施例において、前記少なくとも一つのプロセッシング要素は要素別積(element-wise product)を具現する。
他の実施例によると、前記入力ウインドウは前記マッピングおよび/または前記処理モードによって前記データバッファに保存されたデータ要素にわたって配置される。
さらに他の実施例において、入力ウインドウを通じてデータ要素をアクセスするものはデータバッファを具現する回路に内蔵(hard-wired)される。
他の実施例において、前記データバッファは2次元データバッファであり、前記複数の入力領域それぞれは2次元領域を示す。
好ましくは、前記加速器装置は入力データに対するコンボリューション演算を具現する。
好ましい実施例において、前記入力データはセンサデータを含む。好ましくは、前記センサデータはコンピュータビジョンデータ、イメージデータおよび/または一つ以上のデバイスの処理状態のモニタリングデータのうち一つ以上を含むことができる。
本発明の一態様によると、コンピューティングデバイスまたは装置上で実行される時、本発明の任意の一つの実施例に係る方法を実行するように前記コンピューティングデバイスまたは装置を構成する命令語を保存する一つ以上のマシン読み取り可能(machine readable)媒体が定義される。
本発明の他の態様によると、入力データを処理するための加速器装置が定義され、前記装置は前記装置をインターコネクトに結合させるように構成されるインターフェースおよび入力データを処理するように構成される少なくとも一つのプロセッシングモジュールを含み、前記加速器装置はインターフェースを通じて入力データの少なくとも一部を引き出し、本発明の一つ以上の実施例の任意の一方法により少なくとも一つのプロセッシングモジュールを使って入力データを処理するように構成される。加速器装置は本発明の一つ以上の実施例に係る装置またはシステムの任意の特徴を任意の組み合わせで含むことができることが理解されるべきである。
本発明の実施例および例示は、多様なモジュール、ユニット、コア、または要素を指称する。前記モジュール、ユニット、コアおよび/または要素は必要な機能を遂行するために、専用ハードウェアでおよび/またはソフトウェアやファームウェアによって構成されるハードウェアで任意の組み合わせで具現され得ることが理解されるべきである。例えば、前記処理(またはコンボリューション)モジュール、前記処理(またはコンボリューション)コアおよび/または前記処理(またはコンボリューション)要素は、任意の組み合わせで、FPGAまたはASICに基づいたハードウェアまたは任意の異なるカスタマイジングされたおよび/またはプログラミング可能なハードウェアで具現され得る。同様に、前記キャッシュモジュール、前記データバッファ、前記係数バッファおよび/または前記結果保存所は任意の組み合わせでメモリ回路で具現され得る。ハードウェア構成要素それぞれは、本発明の実施例で説明されるような必要な機能を遂行するようにソフトウェアおよび/またはファームウェアによってさらに構成され得る。前記制御モジュール、前記入力制御ユニット、前記出力制御ユニットおよび/または前記コンボリューション制御ユニットは、任意の組み合わせで、本発明の実施例で説明されるような制御演算および/またはシグナリングを遂行するように構成される汎用または専用処理ハードウェアを使って具現され得る。しかし、本発明の実施例がハードウェア基盤であっても、このような構成は例示に過ぎず、本発明はハードウェアおよび/またはソフトウェアへの特定の具現に限定されないことが理解されるべきである。
本発明の具体的な特徴、態様および長所は下記の説明および添付図面と関連してさらによく理解されるであろう。
以下の説明で、例示として多様な実施例を図示する図面を参照する。また、多様な実施例がいくつかの例を参照して以下で説明されるであろう。実施例は請求された対象の範囲から逸脱することなく設計および構造の変化を含むことができるということが理解されるべきである。
図1は、ニューラルネットワークの概略図を図示する。ニューラルネットワークは人工知能、機械学習、データマイニング(data mining)および他の領域で使われる広く知られているシステムである。ニューラルネットワークは入力データ内の要素を識別または分類したり特徴づけるように訓練され得る。ニューラルネットワークは典型的に入力レイヤー101および出力レイヤー103を含む少なくとも二つの相互に連結されたレイヤーを含み、これは図1で「レイヤー0」および「レイヤーL-1」で図示される。また、ニューラルネットワークは一つ以上の隠れ層105を含むことができ、これは図1で「レイヤー1」~「レイヤーL-2」で図示される。それぞれのレイヤー101、105、103はニューラルネットワークの次のレイヤーの各データ要素を決定するために、コンボリューション演算または関係演算のような数学的演算により処理され得る複数の1次元、2次元、または多次元データ要素またはテンソル(tensor)を含むことができ、ここで次のレイヤーはまた1次元、2次元、または多次元のデータ要素またはテンソルを含むことができる。ニューラルネットワークの入力および出力レイヤーの次元および構造はニューラルネットワークの隣接したレイヤーを相互に連結する数学的演算を通じて専ら定義され得る。
例えば、ニューラルネットワークの入力レイヤー101上の入力データは、例えば車両に装着されたりまたはスマートグラス、ヘッドセット、ヘッドマウント(head-mounted)ディスプレイまたはシースルー(see-through)ディスプレイのようなウェアラブル(wearable)デバイスに装着され得るビデオカメラによってキャプチャーされたイメージデータを含むことができる。ニューラルネットワークは顔、交通標識、他の車両などのようなイメージデータ内の物体を認識するように訓練され得る。物体に関するそれぞれの分類および追加のデータが出力レイヤー103に提供され得る。
図1は例えば入力イメージに対してコンピュータビジョン作業またはアルゴリズムを遂行するのに使われ得る特定の類型のニューラルネットワークを図示するが、本発明はニューラルネットワーク、特定の類型のニューラルネットワーク、または特定の応用領域に限定されないことが理解されるべきである。
ニューラルネットワークの次のレイヤーの値を計算するための数学的演算は図2に図示されたコンボリューション演算で表現され得る。図2で、入力平面はそれぞれIW×IHの大きさを有する複数の2次元入力平面を含む入力平面テンソル201で定義される。それぞれの入力平面201-1、…、201-cは、加重値テンソル203の一連の加重値行列203-1、…、203-cの加重値行列とコンボリューションされ得、ここでそれぞれの加重値行列は、活性化関数factによってマッピングされた後に、ニューラルネットワークの次のレイヤーの値を定義する出力平面テンソル205の一つの出力平面205-1、…、205-nに寄与する。したがって、N個の出力平面205-1、…、205-nに対して、一連の加重値行列203-1、…、203-cのそれぞれはN個の加重値行列を含む。したがって、入力平面テンソル201のC個の入力平面および出力平面テンソル205のN個の出力平面に対する加重値テンソル203はFW×FH×N×Cの大きさを有する。本明細書の全般にわたって、加重値行列は加重値を係数として特定する係数行列として理解され得ることが理解されるべきである。したがって、一つ以上の実施例において、加重値行列は係数行列であり得、ここで係数は加重値(本明細書の全般にわたって加重値係数とも指称される)を示す。一つ以上の実施例において、加重値は一般的に係数として理解され得、したがって加重値行列および係数行列という用語だけでなく加重値、係数(値)および/または加重値係数(値)という用語は本明細書の全般にわたって同義的に使われ得る。
入力平面201-1、…、201-cをそれぞれの加重値行列とココンボリューションした結果は、個別出力平面205-1、…、205-nに対するバイアス(bias)値を含むバイアスベクター207を形成できる単一バイアス値によってさらにバイアスされる。
コンボリューションされた入力平面および加重値行列とバイアス値の和は、活性化関数factによってマッピングされてそれぞれの出力平面205-1、…、205-nを生成する。
一般的に、コンボリューション演算は以下で定義され得、ここでfactは活性化関数、I(c)は入力平面テンソル201、W(n、c)は加重値テンソル203、B(n)はバイアスベクター207、O(n)は出力平面テンソル205である。
図3は、本発明の一つ以上の実施例で適用され得る出力平面テンソルの要素を計算するためのコンボリューション演算を図示する。図3に図示された演算は図2に図示されたような要素に基づくことができるため、同一または類似する特徴に対しては同じ参照符号が使われた。
入力平面テンソルはC個の入力平面201-1、…、201-cを含むことができる。同様に、出力平面テンソルは出力平面205-1、…、205-nを含むことができる。図2に図示されたような一連の加重値行列203-1、…、203-cから抽出され得るそれぞれの出力平面205-1、…、205-nに対する加重値行列301-1、…、301-nの集合は、それぞれの位置305で入力平面201-1、…、201-cから抽出されるデータ値303と要素別に積算され、出力平面205-1、…、205-nごとに合算されて(内積)、位置307で出力平面205-1、…、205-nごとにコンボリューションの単一データ結果を提供する。したがって、位置305は出力平面205-1、…、205-nでの位置307と互いに関連され得る。
入力値303および加重値行列301-1、…、301-nはそれぞれ単一値を計算するためのコンボリューションに使われる。このような値は、図2のバイアスベクター207により定義され得るバイアス値309-1、…、309-nによってそれぞれさらにバイアスされる。その結果は活性化関数311-1、…、311-nによりマッピングされ得る。それぞれの入力平面201-1、…、201-cの入力データはそれぞれの出力平面205-1、…、205-nでの出力値に寄与する。そのような寄与はそれぞれの加重値行列301-1、…、301-nにより制御される。本明細書の全般にわたってコンボリューションカーネル(convolution kernel)とも指称され得る加重値行列の大きさは、入力平面201-1、…、201-cでの入力データの入力領域のそれぞれの大きさを決定することができる。
図4は、本発明の一実施例に係る装置の概略図を図示する。装置401は例えば図1、図2および図3に図示されたようなニューラルネットワークの演算を支援できるコンボリューション演算のための加速器であり得る。しかし、加速器装置がニューラルネットワークのコンボリューション演算に関して説明されるとしても、該当装置は一つの特定のシナリオにのみ限定されず、入力データに対して遂行される相当量の(コンボリューションまたは任意の異なる)演算を伴う任意の作業またはシナリオを加速できることが理解されるべきである。
装置401はインターフェースを通じてインターコネクト403に結合され得る。インターコネクトは例えば装置401を外部メモリ405およびプロセッシングホスト407に連結するためのシステムバスまたは任意の異なる適切な連結またはリンクであり得る。プロセッシングホスト407は装置401の演算を制御することができ、コンボリューション演算を使って入力データを処理するためにメモリ405に保存された入力データを処理するように装置401を構成することができる。装置401は複数のプロセッシングモジュールを含むことができる。図4の実施例において、プロセッシングモジュールはメモリ405に保存された入力データを処理するようにそれぞれ構成され得るコンボリューションモジュール409で図示され得る。装置401は任意の数のコンボリューションモジュール409(例えば、図4に図示されたようなE個のコンボリューションモジュール)で構成され得る。これによって、複数のコンボリューションモジュール409による個別レイヤーのうち一部または多数の入力データの並列処理が可能となる。コンボリューションモジュール409はまた本明細書の全般にわたってコンボリューションエンジンと指称され得、これらの用語は相互に交換的に使われ得る。
装置401はコンボリューションモジュール409およびキャッシュモジュール413それぞれの処理を制御できる制御モジュール411をさらに含む。キャッシュモジュール413はコンボリューションモジュール409それぞれに連結され得、コンボリューションモジュール409のうち一つ以上によって処理されたデータを保存し、コンボリューションモジュール409それぞれが前記保存されたデータを追加の処理のための入力データとして引き出し(retrieve)できるようにするように構成され得る。キャッシュモジュール413はオンチップメモリであり得る。集積回路では殆どの電力が外部ハードウェアアクセスによって消費されるため、キャッシュモジュール413で結果を保有することは電力消費を減少させる。さらに、オンチップキャッシュモジュール413はより高いデータ交換速度およびより短いレイテンシ(latency)期間を可能にすることができる。キャッシュモジュール413はキャッシングされたデータを低いレイテンシで提供するための多数の書き込み及び読み取りポートを含むことができる。したがって、キャッシュモジュール413は任意の整列アルゴリズムまたは他のキャッシング戦略の具現ロジックを必要としない低エネルギー、低レイテンシのオンチップメモリとして理解されるべきである。
コンボリューションモジュールはコンボリューションコア415、入力制御ユニット417および出力制御ユニット419を含むことができる。コンボリューションコア415はM個のプロセッシング要素418のような複数のプロセッシング要素418を使って(コンボリューションまたは任意の異なる)演算を遂行することによって任意の入力データを処理することができる。
入力制御ユニット417はコンボリューションコア415により処理されるデータを引き出すように構成され得る。特に、入力制御ユニット417はメモリ405に保存されたデータまたはインターコネクト403を通じてプロセッシングホスト407により提供されるデータのようなデータをインターフェースを通じて引き出すことができる。入力制御ユニットはまた、キャッシュモジュール413に保存されたデータを引き出すように構成され得る。したがって、コンボリューションコア415により処理される入力データはインターフェースを通じて外部で引き出され得るか、またはコンボリューションモジュール409のうち任意のものによって以前に処理されたデータに対応し得る。これによって、インターフェースを通じて伝送されるデータの量が減少し得、したがってインターコネクト403の帯域幅を節約することができる。コンボリューションモジュール409それぞれと相互に連結される装置401内にキャッシュモジュールを提供することによって、コンボリューションモジュール409はインターフェースを通じての任意のデータ伝送を必要とせずに他の(または同じ)コンボリューションモジュールに対してフィードバックされる結果を柔軟に生成することができる。したがって、出力制御ユニット419はコンボリューションコア415により処理されたデータをインターフェースおよびインターコネクト403を通じてメモリ405および/またはキャッシュモジュール413に提供するように構成され得る。出力制御ユニット419はまた、コンボリューションコア415により処理されたデータをインターフェースおよびインターコネクト403を通じてプロセッシングホスト407に直接またはメモリ405を通じて提供するように構成され得る。例えば、出力制御ユニット419はメモリ405にデータを書き込むことができる。その後、プロセッシングホスト407はメモリ405で結果を入手することができるという通知を受けることができ、プロセッシングホスト407はメモリ405から結果を引き出すことができる。一例において、プロセッシングホスト407は結果の書き込み中に出力制御ユニット419によってアドレッシング(address)され得るアドレッシング可能空間を有することができる。
プロセッシングホスト407は構成データを制御モジュール411に伝送することによって装置401を構成することができる。構成データは任意の適切なプログラミングまたは記述(description)言語を使ってデータ構造の定義、コマンドシークエンス(command sequence)等を使う処理に関する任意の定義を含むことができる。装置401に対するそれぞれの命令語は、複数のパラメータを長い2進ワードのような単一2進ワードに接合させるビットフィールド(bit field)で定義され得る。パラメータは(i)領域の大きさ、フィルタの大きさ、ストライド、拡張、コンボリューション/デコンボリューション/プーリング、スケジューリング従属性リストなどのようなレイヤー演算類型およびパラメータ、(ii)入力平面位置(RAM/キャッシュ)、ベースアドレスおよび平面オフセットなど、(iii)出力平面位置(RAM/キャッシュ)、ベースアドレスおよび平面オフセットなどおよび/または装置の処理を特定する任意の異なるパラメータを任意の組み合わせで含むことができる。
制御モジュール411は複数のコンボリューションモジュール409によりシグナリング(signal)された状態に応答して複数のコンボリューションモジュール409の間でコマンドをスケジューリングすることができる。この状態はリンク421を通じて入力制御ユニット417によりシグナリングされ得る「入力読み取り完了」状態、リンク423を通じて出力制御ユニット419によりシグナリングされる「結果準備」状態または「結果書き込み完了」状態および個別プロセッシング要素によって制御モジュール411にシグナリングされる追加状態のうち一つ以上を任意の組み合わせで含むことができる。一例において、コマンドのスケジューリングはリンク423を通じて制御モジュール411にシグナリングされ得る「結果書き込み完了」状態によって制御され得る。「結果書き込み完了」状態は現在の入力データに対する以前のコマンド処理の結果を要求する次のコマンドをスケジューリングするための条件であり得る。制御モジュール411は(コマンド)リンク425または装置401で利用可能な任意の異なるシグナリング経路を通じてそれぞれのコンボリューションモジュール409の処理を制御することができる。
コンボリューションモジュール409はプロセッシングホスト407および/またはメモリ405からインターフェースを通じて係数データを引き出すことができる係数制御ユニット427をさらに含むことができる。入力制御ユニット417および出力制御ユニット419と同様に、係数制御ユニット427は(コマンド)リンク425を通じて制御モジュール411により制御され得、以下で説明されるように、データの流れの閉ループ(closed-loop)制御を可能とするために制御モジュール411および/または入力制御ユニット417に係数データの引き出しに関するそれぞれの状態を任意の組み合わせで提供することができる。しかし、係数制御ユニット427は専ら選択的であり得ることが理解されるべきである。かえって、係数制御ユニット427は係数データの処理を要求する実施例でのみ提供され得る。
演算を開始するために、プロセッシングホスト407はコマンドシークエンス、係数集合、および入力レイヤーデータをメモリ405に書き込むことができる。これはニューラルネットワークを定義する命令語および係数と、図1に図示された入力レイヤー101のような入力レイヤーのデータを含むことができる。プロセッシングホスト407はインターコネクト403を通じて制御モジュール411に開始トリガーを発行することができる。開始トリガーに応答して、制御モジュール411はメモリ405からコマンドシークエンスの少なくとも一部を読み取り、コンボリューションモジュール409に対して個別コマンドをスケジューリングすることができる。
メモリ405を通じてのコマンドの提供は、同じコマンドシークエンスが連続的な入力レイヤー上で繰り返し実行されなければならない場合に有利であり得る。このような場合、制御モジュール411はそれぞれの繰り返し後に最初に保存されたコマンドシークエンスをメモリ405から再び読み取るように構成され得る。追加的にまたは代案として、制御モジュール411の内部保存容量に応じて、制御モジュール411は単一パス(single pass)でメモリ405からコマンドシークエンスを読み取り、それぞれの開始トリガー後にコマンドシークエンスを再使用するように構成され得る。したがって、プロセッシングホスト407は次の入力レイヤーのデータをメモリ405に書き込み、それぞれの完了時点でメモリ405から出力レイヤーの結果を読み取りのみする必要があり得る。
メモリ405にコマンドを保存することによって、コマンドシークエンス、係数集合および入力レイヤーデータをメモリ405に最初に書き込むことを除き、実行中にプロセッシングホスト407が関与せずに装置401条での実行(例えばニューラルネットワークの実行)が可能になる。引き続き、次のレイヤー(これはニューラルネットワークの(後続)内部レイヤー、次のフレームの入力レイヤー、または一般的にホスト書き込み(host write)であり得る次の入力レイヤーであり得る)のデータのみがメモリ405に書き込まれなければならず、最終または中間実行結果はメモリ405から読み取られなければならない。一実施例において、メモリ405でのおよび/またはメモリ405からのデータのコピーはDMAプロセスによって行われ得る。
複数のプロセッシング要素418に加えて、コンボリューションコア415はデータバッファ431およびコンボリューション制御ユニット433を含むことができる。また、係数データの処理を必要とし、係数制御ユニット427を含むことができる実施例において、それぞれの(または少なくとも一部の)プロセッシング要素418は係数バッファ429を含むことができる。係数バッファ429は係数制御ユニット427により制御され得、後続コンボリューション演算に要求される係数データを保存することができる。データバッファ431は入力制御ユニット417により制御され得、複数のプロセッシング要素418による後続コンボリューション演算に要求されるデータを保存することができる。係数バッファ429はそれぞれの係数を保存し、複数のプロセッシング要素418に係数を提供するように構成されるメモリアレイであり得る。係数バッファ429は複数のプロセッシング要素418それぞれに加重値係数のような互いに異なる係数データを提供するための複数の個別リンクを含むことができる。
係数制御ユニット427はメモリ405から係数およびバイアス値を読み取ることができる。係数およびバイアス値はメモリ帯域幅を最小化するために圧縮された可変フォーマットでメモリ405に保存され得る。係数制御ユニット427は係数およびバイアス値を圧縮解除し、これを固定された最終フォーマットで係数バッファ429に伝達するように構成され得る。
コンボリューション制御ユニット433は、それぞれのプロセッシング要素418が係数バッファ429およびデータバッファ431から正しい入力データが提供されて演算を遂行するようにスケジューリングおよび制御方式を適用することができる。コンボリューション制御ユニット433はウインドウ位置または入力平面の間のプロセス止まり(process-stall)を避けるために、プロセッシング要素418の処理をさらにモニタリングすることができる。スケジューリングおよび制御方式はNCO基盤であり得る。この例において、係数およびデータ選択パターンはNCOによって生成され得る。通常的に、NCOは周期的な値を生成することができる。追加的にまたは代案として、スケジューリングおよび制御方式はルックアップテーブル(lookup table;LUT)基盤メカニズムであり得、係数およびデータ選択パターンはルックアップテーブルで定義される。ルックアップテーブルの内容は係数集合と共に定義され得る。LUTはそれぞれの係数集合の係数値の位置を選択したり割当するのに使われ得る。係数集合およびLUTは任意の形状および希少性(sparseness)を有する行列をフィルタカーネル(filter kernel)で定義するのに組み合わせられて使われ得る。コンボリューション制御ユニット433はLUTの要素をステップオーバー(step over)することができ、これらの要素を行列から係数を選択するための座標、またはコンボリューションのための係数集合の係数値に割当するための座標として使うことができる。したがって、係数集合およびこれのLUTは互いに対応し得る。係数制御ユニット427は係数集合と共に任意のLUTを読み取ることができる。ルックアップテーブルは多様な処理パラメータの単純化された定義(例えば、ルックアップテーブルが一部の位置に0の値を含む場合、係数行列内のどの係数位置が使用されるべきであるかに関する定義)を可能とする。これを通じて入力/出力平面対に対する任意の形状の係数行列の定義が可能になる。
データバッファ431は入力制御ユニット417により引き出された入力データを2次元アレイで保存できる2次元データバッファで構成され得る。したがって、データバッファ431内のデータは2個のインデックスを使ってアクセスされ得る。好ましい実施例において、データバッファ431内のデータは、例えば図14で説明されるような調節可能な入力ウインドウを通じて引き出され得る。データバッファ431は複数のプロセッシング要素418のすべてのプロセッシング要素に対してデータバッファ431に保存された入力データに対するアクセスを可能にすることができる。それぞれのプロセッシング要素418上でコンボリューション演算を遂行するために要求される入力データの決定および引き出しは、係数バッファ429からの互いに異なる係数値を考慮してデータバッファ431からの同じ入力データに対するサンプリングをするように入力ウインドウを調節することによって達成され得る。
入力制御ユニット417は入力データをコンボリューションコア415に供給することができる。例えば、入力データは入力画素であり得る。入力制御ユニット417は入力データのタイル(例えばピクセルのタイル)がデータバッファ431内に読み取られるようにすることができる。タイルの少なくとも一部は一つ以上の隣り合うタイルまたはパッディング(padding)値との重なり(overlap)を含むことができる。
コンボリューション演算は乗算-累積回路(MAC)を提供することによって複数のプロセッシング要素418それぞれによって具現され得、MACは乗算器435、合算器437および結果をバッファリングするように構成される結果保存所439を含むことができる。複数のプロセッシング要素418の各プロセッシング要素は、合算器437の入力を決定してバイアス値で合計を初期化したり、乗算器435の結果を結果保存所439に保存された部分的な結果に累積させるマルチプレクサ441をさらに含むことができる。
結果保存所439はアドレッシング可能なメモリ(例えばアドレッシング可能なSRAM)で具現され得る。プロセッシング要素418にアドレッシング可能な結果保存所439を提供することによって、プロセッシング要素418は入力データの多様な領域に対して柔軟に演算を行い、アドレッシング可能な結果保存所439内に入力データのそれぞれの領域に対する複数の部分結果を保存することができる。結果保存所439はTW×TH大きさのR個の出力タイルを収容することができる。したがって、それぞれのプロセッシング要素418において、結果保存所439はコンボリューションコア415の計算容量を単一入力平面シークエンスに対してM×R個の出力タイルまで増やすためにR個の出力タイルまでバッファリングすることができる。
複数のプロセッシング要素418の結果は、結果スケーリング(scaling)および量子化ユニット、シリアライザ(serializer)、結果再整列ユニット、そして複数のプロセッシング要素418の結果を後処理する特定の作業を遂行するように構成され得る追加プロセッシングユニットのうち一つ以上を含むコンボリューションコア415の多様な後続プロセッシング要素に提供され得る。また、処理の結果は、活性化関数を具現することができ、最終結果を出力制御ユニット419に提供できる活性化ユニット443に提供され得る。例えば、コンボリューション積累積はカーネルの大きさおよび入力平面カウントが増加するにつれてワードの長さを増加させ、累積した積のワードの長さを効果的に増加させることができる。プロセッシング要素418で十分な精密度で演算が行われ得るように、最終結果のみがダウンスケーリング(down-scale)されて結果スケーリングおよび量子化ユニットで入力ワードの長さで再び量子化され得る。
装置401はコンボリューションニューラルネットワーク(CNN)のための加速器として使われ得る。例えば、メモリ405からインターコネクト403を通じて引き出された入力データはCNNの入力レイヤーを示すことができ、それぞれのコンボリューションモジュール409はCNNのレイヤーのうち少なくとも一部を処理することができる。また、キャッシュモジュール413に保存されたデータは、複数のコンボリューションモジュール409のうち同一のまたは異なるコンボリューションモジュールによって処理されるCNNの次のレイヤーのうち少なくとも一部を示すことができる。
初期化中に、プロセッシングホスト407は入力レイヤーの入力平面テンソルおよび加重値テンソルをメモリ405にローディングすることができる。例えば、入力平面テンソルおよび加重値テンソルは図2に図示されたような入力平面テンソル201および加重値テンソル203に対応し得る。また、プロセッシングホスト307はコマンドシークエンスをメモリ405にローディングすることができる。入力平面テンソル、加重値テンソルおよびコマンドシークエンスがメモリ405にローディングされるやいなや、プロセッシングホスト407は制御モジュール411を通じて装置401の動作をトリガリングすることができる。制御モジュール411はメモリ405からコマンドシークエンスを引き出すことができ、複数のコンボリューションモジュール409の間でコマンドシークエンスのコマンドをスケジューリングするための仲裁者として作用することができる。
制御モジュール411が複数のコンボリューションモジュール409のうち一つで実行するコマンドをスケジューリングすることによって、コンボリューションモジュール409のそれぞれの入力制御ユニット417および係数制御ユニット427は入力平面のうち少なくとも一部の入力データおよびその加重値テンソルをメモリ405からそれぞれ引き出す。入力平面はIW×IHの大きさを有することができ、複数のタイルに分割され得、コンボリューションモジュール409はタイルのうち一つ以上を引き出すことができる。
制御モジュール411による複数のコンボリューションモジュール409のうち一つ以上に対するコマンドのスケジューリングは、以前のコマンドの完了に依存し得る。それぞれのコンボリューションモジュール409は、入力制御ユニット417および出力制御ユニット419と制御モジュール411の間のそれぞれの連結(例えばリンク421、423)を含むことができる。これらの連結は、例えばコマンド識別子、完了マーカーフィールドなどを任意の組み合わせで含むことができるフラグ(flag)や類似する信号を送信するように構成され得る。フラグは入力制御ユニット417からのコマンド完了フラグを含むことができる。このようなコマンド完了フラグは、入力データを要求する次のコマンドをトリガリングできるが、現在の処理の結果を要求しないスケジューリング条件を示すことができる。フラグは出力制御ユニット419からのコマンド完了フラグをさらに含むことができる。このようなコマンド完了フラグは、任意のコンボリューションモジュール409で、現在の処理の結果を要求する次のコマンドをトリガリングできるスケジューリング条件を示すことができる。
フラグ基盤スケジューリングを可能とするために、各コマンドは従属性リストで以前のコマンドおよび条件に対する従属性を定義することができ、これはコンボリューションモジュール409(またはそのユニット)のうち一つ以上によって提供されるフラグに基づいて制御モジュール411により検査され得る。従属性は現在実行されるコマンド周囲の定義された数のコマンド(これは従属性検査のための移動ウインドウ(moving window)を定義できる)に対して検査され得る。これを通じて従属性リストの項目数を固定されたビット数に減少させることができる。
スケジューリング時に、コマンドは制御モジュール411から望むコンボリューションモジュール409に送信され得る。コマンドは多数のビットフィールドからなる命令語ワードであり得る。命令語ワードはコンボリューションモジュール409の内部の各ステージ(例するにバッファ429、431)およびコンボリューション制御ユニット433)に並列で提供され得る。命令語ワードを受信すると、コンボリューションモジュール409のステージは各ステージの処理のために要求されるビットフィールドのみを使って個別的に各ステージの実行を開始することができる。データの流れを制御するために、コンボリューションモジュール409はコンボリューションコア415および/またはプロセッシング要素418の処理が開始される時に、係数およびデータ可用性を維持するために閉ループ制御接近法を適用することができる。制御モジュール411はコンボリューションモジュール409に対する命令語としてのコマンドをスケジューリングすることができる。これは入力平面読み取りベースアドレス、平面アドレスオフセット、平面カウント、算術演算の類型およびパラメータ、係数読み取りベースアドレス、出力平面書き込みベースアドレス、平面オフセットなどのうち一つ以上を任意の組み合わせで含む単一命令語ワードであり得る。コンボリューションモジュール409の各ステージは命令語を並列で受信することができ、命令語ワードの関連部分を個別的に使って遂行を開始することができる。
一例によると、データの流れに対する閉ループ制御は下記の段階のうち一つ以上を含むことができる。
1.係数制御ユニット427は係数バッファ429での充填(filling)レベルまたは使用可能空間を継続してモニタリングすることができ、係数バッファ429で利用可能な空いた空間が十分な場合、インターフェースを通じて次の入力平面の係数を読み取ることができる。係数が読み取られる時に、係数制御ユニット427は完了フラグを入力制御ユニット417に送信することができる。
2.入力制御ユニット417はデータバッファ431での充填レベルまたは使用可能空間を継続してモニタリングすることができる。係数制御ユニット427から完了フラグを受信した後に、入力制御ユニット417はインターフェースを通じて、および/またはキャッシュモジュール413から次の入力平面のデータを読み取ることができ、利用可能な空いた空間が十分な場合、データバッファ431にデータを書き込むことができる。
3.コンボリューション制御ユニット433はデータバッファ431の充填レベルを継続してモニタリングすることができ、要求されたデータがデータバッファ、431に存在すると直ぐに算術演算を開始することができる。これはまた、それぞれのフラグを使って入力制御ユニット417によりコンボリューション制御ユニット433にシグナリングされ得る。この段階では要求された係数が係数バッファ429に存在するが、これは係数制御ユニット427により送信された完了フラグがデータバッファ431内にデータを読み取るための前提条件であるためである。したがって、データバッファ431の充填レベルを検査した後に、コンボリューション制御ユニット433は一つ以上のプロセッシング要素418を駆動するために、係数データバッファ429およびデータバッファ431からの係数およびデータに対する読み取り位置をそれぞれ生成し始めることができる。
4.現在の入力データに対する計算が終了した後に、コンボリューション制御ユニット433はデータバッファ431からのデータおよび係数バッファ429からの関連係数の少なくとも一部をフラッシング(flush)することができる。使用可能空間は段階1および2でモニタリングされ得、係数制御ユニット427および入力制御ユニット417は段階3にしたがって次の処理をトリガリングするために追加的な係数および入力データを継続して読み取ることができる。
したがって、コンボリューション制御ユニット433は算術演算を制御することができ、制御モジュール411は装置401でのスケジューリングを制御することができる。係数バッファ429およびデータバッファ431はいずれも例えば多数の入力平面に対するいくつかの係数集合および多数のデータタイルのようなデータを保存するように構成され得、これに伴いコンボリューションコア415は係数またはデータの追加の引き出しを待つ必要なく、現在の入力平面に対する処理を完了した後に次の入力平面に対する処理を直接継続できるようになる。これを通じて、プロセッシング要素418の動作にバランスを取って持続的な演算を提供することができる。閉ループ制御は係数バッファ429およびデータバッファ431の最適の充填を可能とする。これに伴い、インターフェースのハードウェア制約によってのみ制限されるデータ処理量(data throughput)が増加する。
データの流れの閉ループ制御は本発明の一つ以上の実施例で定義され得る。しかし、閉ループ制御の一部が具現され得、互いに異なるデータの流れ制御接近法が他の実施例で使われ得ることが理解されるべきである。特に、データの流れは他の構成要素によって、および/または互いに異なる順序で制御され得、本発明はデータの流れの特定の類型の閉ループ制御に限定されない。
図5は、データワードのような複数のデータ要素503で構成された入力タイル501を図示する。データ要素509はPW×PHの大きさを有する2次元領域を示すことができる。入力タイル501を結合するために、データ要素503は入力制御ユニット417によりメモリ405から順次引き出され得る。図5に図示されたように、入力タイル501は8×8データ要素のアレイで構成され得る。しかし、互いに異なる大きさのデータ要素503または入力タイル501の異なる分割が選択され得、本発明は8×8データワードを含む入力タイルに限定されないことが理解されるべきである。
図6は、IW×IH大きさの入力平面を図5の入力タイル501のような複数の入力タイルに分割したものを図示する。図6に図示されたように、各入力タイルはタイル原点601を有することができる。図4を再び参照すると、入力タイル501は装置401の基本プロセッシングユニットを定義することができる。入力平面をそれぞれのタイル原点601で複数の入力タイルに分割することによって、装置401は可変的な大きさの入力平面に対してコンボリューション演算を遂行するように柔軟に適応することができる。装置401は一つのシークエンスで入力タイル領域を処理するように構成され得る。装置401は入力平面テンソルの入力平面にわたって同じタイル原点601で入力タイルを順次読み取ってコンボリューション演算を実行することができ、結果的な出力タイルは同一原点を有する出力平面テンソルの一つ以上の出力平面にわたる出力タイルに対応し得る。したがって、装置401は、一つ以上の入力平面にわたって、タイル原点601を経て進行して各タイル原点601から順次的な計算を実行することによって、入力平面テンソルを処理することができる。入力平面テンソルを固定された大きさの入力タイルに分割することによって、加速器401の演算は入力平面テンソルの特定の大きさの入力平面に対して独立的であり得る。入力平面テンソルは細分されて互いに異なるタイル原点601で順次的な段階で処理される。
一つ以上の好ましい実施例において、入力データはタイルデータだけでなくタイルを囲む追加データ(これはタイルの縁で特定の大きさの加重値カーネルのコンボリューションを可能とするのに必要であり得る)を含むことができる。例えば、5×5のカーネルの大きさは、タイルの上部および左側(および/または下部および右側)で少なくとも2個の追加の行を必要とし得る。したがって、1×1加重値カーネルを除いて、加速器は加重値カーネルの要求される重なりにより隣のタイルからデータを読み取ることができる。装置401はそれぞれの加重値カーネルに対して要求される周辺データを使って、入力平面テンソルの一つ以上の入力平面から同一原点でタイルシークエンスを読み取ることができ、タイルシークエンスにより出力平面データを計算するコンボリューション演算を実行することができる。コンボリューション演算を遂行するために、各入力タイルは本発明の実施例に関して後述されるように、プロセッシング要素によって後続してアクセス、サンプリングおよび処理される複数の処理領域に細分され得る。
本発明の実施例がコンボリューション演算に関して説明されたが、本発明はコンボリューション演算にのみ限定されないことが理解されるべきである。具体的には、プロセッシング要素418は例えばコンボリューション演算と並行してまたはその代わりに遂行され得る関係演算を具現することができる。例えば、乗算器435および合算器437に追加して、またはその代わりに、一つ以上のプロセッシング要素418は最大プーリングを具現するために結果保存所439とデータバッファ431の出力の間に提供される構成可能な比較器(例えば、所定類型のCNNによって要求され得るレイヤー演算を遂行する、構成可能なウインドウ深さ方向(window depth-wise)プーリングユニット)を含むことができる。
好ましい実施例において、結果保存所439の容量は単一入力平面から出力平面が計算される演算にそれぞれのプロセッシング要素418を使うために減少し得、出力平面の独立的な集合がすべての入力平面から計算され得る。このような実施例において、結果保存所439は、マルチプレクサ441を通じて合算器437に直接フィードバックされて(sw*MW)×(sh*MH)のデータワード容量を有する単一レジスタステージであり得、ここでswおよびshはデコンボリューションが使われる場合にはそれぞれ最大水平および垂直デコンボリューションストライド値であり、そうでない場合には1である。また、コンボリューションコア415が単一入力平面から単一出力平面を計算するのにのみ使われる場合、Mは1であり得る。これらの演算は例えば平面方向(plane-wise)コンボリューション/デコンボリューションおよび平面方向プーリングを含む平面方向演算と指称され得る。
本発明の実施例は下記の演算、すなわちコンボリューション(平面方向または深さ方向)、デコンボリューション(平面方向または深さ方向)、最大プーリング(平面方向または深さ方向)、平均プーリング(平面方向または深さ方向)、完全連結レイヤー(データバッファ431に連結加重値をローディングし、各入力平面データ値を個別的な1×1フィルタとして係数バッファ429に個別的にローディングすることによって行われる)、行列乗算および/または活性化レイヤー(例えば、活性化ユニット443で活性化LUTを具現することによって行われる)のうち一つ以上を可能にするように構成され得る。
本発明は特定の構成のニューラルネットワークに限定されないことが理解されるべきである。具体的には、本発明の一つ以上の実施例は多様な構成のニューラルネットワークを具現するのに使われ得る。
図7は、本発明の一実施例に係る装置によるタイルシークエンスの処理を図示する。この装置は図4に図示されたような装置401に対応し得る。また、入力平面テンソルのタイルおよび出力平面テンソルのタイルは、図5および図6に図示されたタイルにより構成され得る。
図7はライン701、703、705の同一原点でのそれぞれの入力タイルシークエンスに対する計算を図示する。ライン701で、上部左側原点707のタイルシークエンスが計算され得、引き続きライン703に図示されたような隣接した位置のタイルシークエンスが計算され得る。ライン705の最後のタイル原点709で処理が終了され得る。加重値行列集合711の値およびバイアス値713が各ライン701、703、705で同一に維持され得るが、入力および出力平面での入力タイルの位置(または原点)のみが各ライン701、703、705で変更され得る。各シークエンス701、703、705で固定された大きさの領域を有する入力タイルに対する計算を行うことによって、任意の入力および出力平面(またはテンソル)の大きさに対して独立的な処理能力が可能となる。
加速器装置401は並列的にまたは順次的に入力平面テンソルの一つ以上の入力平面にわたって同一原点で入力タイルシークエンスIT(c)を読み取り、コンボリューション方程式715により表現されるように、同じタイル領域に対するコンボリューション演算を遂行して出力タイルOT(n)を生成するように構成され得る。このようなシークエンスは、加重値行列集合711およびバイアス値713を使って全体の入力平面テンソルのコンボリューションを完了するために、ライン703、705に図示されたような後続タイル原点で繰り返される。
図4の装置401を参照すると、入力制御ユニット417は入力タイルの少なくとも一つの領域(そして必要な場合、周辺の重なり)を再構成する入力データでデータバッファ431を満たすことができ、クロックサイクル単位でDW×DH大きさの配置および調節可能な入力ウインドウを使って入力データに対するアクセスを可能にすることができる。
入力制御ユニット417が入力タイルIT(c)を読み取ることによって、係数制御ユニット427は計算される各出力平面に対するバイアス値B(n)を読み取ることができる。次の段階でまたはバイアス値B(n)を読み取る前に、係数制御ユニット427は入力タイルIT(c)ごとに加重値行列テンソル711 W(n、c)の要求される行列集合を読み取ることができる。
加重値行列集合711 W(n、c)およびバイアス値713 B(n)は係数バッファ429に提供され得、係数バッファ429は加重値行列集合711 W(n、c)の加重値行列からの単一係数およびバイアス値713 B(n)からのバイアス値を含むM個の出力平面に対するパラメータに対して、出力平面ごとに同時アクセスを提供することができる。M個の単一加重値行列係数はアクセスごとに行列の同じ位置から供給され得る。
したがって、コンボリューションコア415は出力平面ごとに単一加重値係数を使用してM個の出力タイルOT(n)上のDW×DH領域に対する部分結果を同時に計算することができ、これは単一加重値係数とM個のプロセッシング要素418でのDW×DH領域の入力データを要素別に乗算することによって行われる。
図4を再び参照すると、コンボリューションコア415のコンボリューション制御ユニット433は、コンボリューション方程式715の乗算被演算子であるW(n、c)と入力タイルIT(c)の入力データのDW×DH大きさの各入力領域を複数のプロセッシング要素418それぞれの乗算器435に対する入力として同時に提供するように係数バッファ429およびデータバッファ431を駆動するように構成され得る。バイアスベクターB(n) 713のバイアス値は各プロセッシング要素418により該当プロセッシング要素の第1計算サイクルで読み取られて(およびマルチプレクサ441により選択)、結果保存所439に保存される部分結果の計算中に考慮され得、後続繰り返しで完了し得る。したがって、結果の累積は結果保存所439により達成され得る。マルチプレクサ441は最初にバイアススケーリングおよびラウンディング(rounding)要素からの入力を合算器437に対する被演算子として選択することができる。後続サイクルで、マルチプレクサ441は結果保存所439の出力を合算器437に対する被演算子として選択して累積を具現することができる。バイアススケーリングおよびラウンディング要素は、アップスケーリング(up-scale)されたバイアス値と共に、結果の大きさ範囲に比例するオフセットを処理された係数に対して追加することができる。バイアススケーリングおよびラウンディング要素によって適用される値(例えば、バイアス値およびバイアススケーリング値)は、ニューラルネットワークの定義で(例えばコマンドワード内で)特定され得る。これを通じて、高いワード長さ(high word-length)累積結果の切断(truncation)によって、量子化値に非対称誤差が導入される効果を減少させることができる。
また、図4を参照すると、コンボリューション制御ユニット433は、実際に積が計算されている位置で同じ出力平面の累積した部分結果を合算器437での入力と同時に提示するために、データバッファ431および係数バッファ429に対する読み取りに対して整列した結果保存所439の読み取りをトリガリングすることができる。累積した部分結果に追加された積(合算器437の出力)は追加的な累積した部分結果として結果保存所439に再び書き込まれ得る。
出力平面ごとに適用される単一加重値係数に対するDW×DHのカーディナリティ(cardinality)で入力タイル領域を読み取ることによって、コンボリューションコア415はM個のプロセッシング要素418を使って出力平面のM個の出力タイルOT(n)それぞれに対してDW×DH領域に対するクロックサイクル当たりの部分結果の計算を具現することができる。コンボリューション制御ユニット433はW(n、c)のすべての加重値行列係数をステップオーバーすることができ、係数位置に対応する計算領域原点からのオフセットとしてDW×DHのカーディナリティを有する入力データをデータバッファ431から読み取り、DW×DH個の入力データ位置にわたって加重値カーネルに対する全体のコンボリューション演算を並列的に形成することができる。
一つ以上の実施例において、互いに異なるコンボリューションモジュール409は隣り合うタイルシークエンスを並列的に処理することができる。例えば、図7のライン701のタイルシークエンスは第1コンボリューションモジュールによって計算され得、図7のライン703のタイルシークエンスは第2コンボリューションモジュールによって計算され得、ライン705のタイルシークエンスは装置401のさらに異なるコンボリューションモジュールによって計算され得る。各コンボリューションモジュール409において、プロセッシング要素418はそれぞれのタイルシークエンスと関連した同じデータをデータバッファ431から獲得することができる。このような構成は入力平面領域にわたるコンボリューションモジュール409の並列処理を示すことができる。
一つ以上の実施例において、装置401は複数のコンボリューションモジュール409により入力平面テンソルの入力平面にわたってタイル原点でタイルシークエンスを並列的に計算するように構成され得る。このような構成は出力平面にわたるコンボリューションモジュール409の並列処理を示すことができる。
一つ以上の実施例において、装置401は複数のコンボリューションモジュール409にわたってタイルシークエンスの計算を分配するように構成され得、互いに異なるプロセッシング要素418は入力タイルの部分領域を並列的に計算することができる。これはデータバッファ431からコンボリューションコア415の各プロセッシング要素418でのそれぞれの並列連結によって可能になる。このような構成は入力タイル領域にわたるプロセッシング要素418の並列処理を示すことができる。
前述された一実施例によると、装置401は互いに異なるコンボリューションモジュール409が互いに異なる原点で互いに異なるタイルシークエンスを並列的に計算(前述したような入力平面領域にわたる並列処理)できるように構成され得る。他の実施例によると、互いに異なるコンボリューションモジュール409は同じタイル原点で(そして同じタイルシークエンスを読み取って)R*M個の互いに異なる出力平面の数を計算し、ニューラルネットワークレイヤーによって生成された全体の出力平面カウントを完了することができる(前述したような出力平面にわたる並列処理)。さらに他の実施例において、データバッファ431のウインドウの大きさDW×DHはDW=w*MW、DH=h*MHに拡大され得、これを通じて同じR*M個の出力平面に対する拡大したDW×DHウインドウ上でw*h個のプロセッシング要素418の演算が可能になる(前述したような入力タイル領域にわたる並列処理)。他の実施例において、複数のコンボリューションモジュール409および各コンボリューションモジュール409の複数のプロセッシング要素418は、入力データに対する並列処理を可能とするために多様な(そして互いに異なる)方式および構成で使われ得ることが理解されるべきである。
図4を再び参照すると、コンボリューション制御ユニット433は各出力タイルOT(n)上の要求される領域に対する入力タイルIT(c)のコンボリューション結果を、順次的な段階で累積する任意の処理を延長させることができる。図8~図13と関連して後述されるように、コンボリューション制御ユニット433は各入力タイルIT(c)内のそれぞれの要求される計算領域原点(入力領域原点)でコンボリューションシークエンスを繰り返して、出力タイルOT(n)の各領域に対して要求される部分結果を生成することができる。計算領域原点および入力領域原点という用語は本明細書の全般にわたって相互に交換的に使われ得る。コンボリューション制御ユニット433は、複数のプロセッシング要素418の並列性を活用してM個のグループでプロセッシング要素418によるコンボリューション演算をさらに繰り返して、結果保存所439に保存される出力平面のR*M個の出力タイルを生成することができる。
結果保存所439の容量がプロセッシング要素419当たりTW×TH×R個のデータ要素に対応する場合、コンボリューションコア415はR*M個の出力タイルに対する累積データを保存することができる。これを通じて、N個の出力平面を生成するための入力平面シークエンス読み取りの数をN/M/R回に減少させることができる。
N個の出力平面を計算するために、制御ユニット411はコンボリューションモジュール409のR*M個の出力平面結果をキャッシュモジュール413に書き込むことができ、ニューラルネットワークの実際のレイヤーによって生成されるN個の出力平面全部に対する計算が完了するまで、次のグループのR*M個の出力平面を計算するために入力平面を同じであるか異なるコンボリューションモジュール409内に再び読み取ることができる。対応する加重値テンソルを使って入力平面の入力タイルIT(c)に対するコンボリューションを完了した後に、コンボリューション制御ユニット433は入力平面の次の入力タイルIT(c)とデータバッファ431および係数バッファ429から読み取られたそれぞれの加重値に対する処理を継続し、ニューラルネットワークの現在のレイヤーに対する入力平面および加重値テンソルの全体のコンボリューションを生成することができる。
出力平面ごとに加重値行列から各サイクルで単一加重値係数を使用することによって、コンボリューション演算の全体の機能を維持しながらも、任意の加重値行列の大きさに対して独立的に、任意の加重値行列の大きさおよび形状に対して完全にスケーリングされ得るようにプロセッシング要素418の活用がなされ得る。
出力平面の数Nがプロセッシング要素の数Mの分数である場合、大きさがDW×DH=(w*MW)×(h*MH)であるデータバッファ431の拡大した入力ウインドウは、プロセッシング要素418ごとに互いに異なる出力平面を計算するよりは、同じ出力平面に対して大きさがDW×DHである隣接したMW×MH個の入力領域の部分を計算するように多数のプロセッシング要素418をグループ化することができる。
図4を再び参照すると、装置401によるコマンド実行は、すべての入力平面にわたって同一原点から入力タイルの全体のシークエンスを読み取り、加重値行列でコンボリューション演算を遂行して出力平面の出力タイルを計算することによって行われ得る。出力平面の単一出力タイルに対する結果は最終入力平面に対する加重値係数に基づいて最終累積サイクル中に完了することができる。
図8は、図7のライン701、703、705のうち一つに図示されたような入力タイルシークエンスに対する単一計算原点での計算を含む、タイルシークエンスと関連した計算を図示する。図8は、対応する入力平面にわたって同じタイル原点(例えば図6のタイル原点601のうち一つ)で複数の入力タイル803-1、…、803-cの入力タイルシークエンスを図示する。入力タイル803-1、…、803-cは入力タイル803-1、…、803-cそれぞれにわたって分散した複数の入力領域原点804で連続した隣接入力領域に細分される。必要な場合、入力領域は入力領域の境界での処理が可能なように延長され得る。入力領域でのデータ要素は、入力領域原点804に対して入力タイル803-1、…、803-cのデータ要素にわたって入力ウインドウ807、809、811、813を配置することによってサンプリングされ得る。図8に図示されたように、入力ウインドウ807、809、811、813は計算原点とも表記され得る入力領域原点801に対して配置される。このような配置はフィルタカーネル805の値に対するマッピングによって影響を受けることができる。各入力ウインドウ807、809、811、813は入力タイル803-1、…、803-cのうち一つで基本的な(場合により延びた)入力領域のデータ値をサンプリングするのに使われ得、これに伴い、入力領域集合815-1、…、815-cはそれぞれ入力ウインドウ807、809、811、813によりサンプリングされた単一入力領域803-1、…、803-cの値を示す。したがって、入力ウインドウはサイクル単位でそれぞれの位置に移動して、入力タイル803-1、…、803-cの基本的なデータ要素をそれぞれキャプチャーすることができる。集合815-1、…、815-c内のサイクル単位でキャプチャーされたデータは、対応する出力平面にわたって複数の出力タイル821-1、…、821-nの同じ位置で、対応する出力領域819とそれぞれ関連する処理項目817-1、…、817-nでの要素別積計算のための第1被演算子として使われ得る。処理項目817-1、…、817-nによる要素別積計算に対する他の入力は、対応する出力タイル821-1、…、821-nに対するフィルタカーネル805での位置によって選択されたそれぞれの加重値係数であり得る。したがって、フィルタカーネル805はそれぞれの加重値(またはフィルタ)係数を特定する加重値行列に対応するか該当加重値行列として定義され得る。
図4を再び参照すると、要素別積演算および集合815-1、…、815-cの部分結果の後続累積は、コンボリューションコア415のプロセッシング要素418によって遂行され得る。部分結果はそれぞれの出力タイル821-1、…、821-nに対して結果保存所439に累積され得る。それぞれの結果保存所439は、Rによる実際の出力平面に対する対応する加重値カーネルを使って、順次的な段階でプロセッシング要素418ごとにR個の出力タイルまで累積することができる。
図8に図示されたように、一実施例において、第1入力平面の入力タイル803-1にわたって入力ウインドウ807、809、811、813を配置し、結果保存所439に累積した対応する部分結果を計算した後に、最終入力平面の入力タイル803-cまで次の(そして、その後の)入力平面の入力タイルにわたって入力ウインドウ807、809、811、813を配置するシークエンスを継続して集合815-cを導き出すことができる。したがって、それぞれの入力タイル803-1、…、803-cに対して、入力領域原点801でフィルタカーネル805により入力領域のすべての位置にわたって入力ウインドウが繰り返されてすべての要素別積を累積することによって、各出力タイル821-1、…、821-nの出力領域819に対するコンボリューション結果を生成する。
好ましい実施例において、タイルシークエンスの次の入力平面に切り替える前に、すべての可能な出力平面に対して少なくとも部分的な結果を生成するために、単一入力平面の入力タイルのすべての計算原点にわたって計算が遂行され得る。このような処理は、計算ウインドウ807、809、811、813を使用することができ、繰り返し遂行され得る下記の項目のうち一つ以上により定義され得る。
1.右側から水平に次の計算原点に進行する。入力タイルの活性領域の水平末端に到達すると、最も左側の位置に戻る。処理は項目1を継続することができ、および/または、項目2の少なくとも一つの段階の実行を並列的に開始することができる。
2.結果保存所439に保存された後に出力タイル(R個の中で)に進行する、出力タイルの最大数に到達すると、第1出力タイルに戻る。処理は項目2を継続することができ、および/または、項目3の少なくとも一つの段階の実行を並列的に開始することができる。
3.下から垂直に次の計算原点に進行する。入力タイルの活性領域の垂直末端に到達すると、最上端の位置に戻る。処理は項目3を継続することができ、および/または、項目4の少なくとも一つの段階の実行を並列的に開始することができる。
4.水平にフィルタカーネルの次の加重値係数に進行する。フィルタカーネルの水平末端に到達すると、カーネル内の第1水平位置に戻る。処理は項目4を継続することができ、および/または、項目5の少なくとも一つの段階の実行を並列的に開始することができる。
5.垂直にフィルタカーネルの次の加重値係数に進行する。フィルタカーネルの垂直末端に到達すると、カーネル内の第1垂直位置に戻る。処理は項目5を継続することができ、および/または、項目6の実行を並列的に開始することができる。
6.項目1~5が現在入力平面のタイル領域(項目1および3)、出力タイル(項目2)およびフィルタ係数(項目4および5)にわたって繰り返される場合、次の入力平面の可用性により、項目1~5のうち一つ以上(又は全部)の処理が中断され得る。以前の入力タイルはデータバッファ431からフラッシングされる。入力制御ユニット417および係数制御ユニット427(適用可能な場合)はデータ-流れ制御(例えば前述したデータの流れの閉ループ制御)により各バッファ431、429に後続入力(および係数)データを供給する。
一つ以上の実施例において、次の計算原点に切り替える前に計算原点で完全なフィルタカーネルのコンボリューションが計算されなければならないため、特に結果保存所439が(sw*MW)×(sh*MH)データワードの容量を有するレジスタアレイである場合には、繰り返し順序が変更され得る。このような変更された繰り返し順序は下記の項目のうち一つ以上により定義され得る。
1.水平にフィルタカーネルの次の加重値係数に進行する。フィルタカーネルの水平末端に到達すると、カーネル内の第1水平位置に戻る。処理は項目1を継続することができ、および/または、項目2の少なくとも一つの段階の実行を並列的に開始することができる。
2.垂直にフィルタカーネルの次の加重値係数に進行する。フィルタカーネルの垂直末端に到達すると、カーネル内の第1垂直位置に戻る。処理は項目2を継続することができ、および/または、項目3の実行を並列的に開始することができる。
3.結果保存所439に保存された後に出力タイル(R個の中で)に進行する、出力タイルの最大数に到達すると、第1出力タイルに戻る。処理は項目3を継続することができ、および/または、項目4の少なくとも一つの段階の実行を並列的に開始することができる。
4.右側から水平に次の計算原点に進行する。入力タイルの活性領域の水平末端に到達すると、最も左側の位置に戻る。処理は項目4を継続することができ、および/または、項目5の少なくとも一つの段階の実行を並列的に開始することができる。
5.下から垂直に次の計算原点に進行する。入力タイルの活性領域の垂直末端に到達すると、最上端の位置に戻る。処理は項目5を継続することができ、および/または、項目6の実行を並列的に開始することができる。
6.項目1~5が現在入力平面のタイル領域(項目4および5)、出力タイル(項目3)およびフィルタ係数(項目1および2)にわたって繰り返される場合、次の入力平面の可用性により、項目1~5のうち一つ以上(又は全部)の処理が中断され得る。以前の入力タイルはデータバッファ431からフラッシングされる。入力制御ユニット417および係数制御ユニット427(適用可能な場合)はデータ-流れ制御(例えば前述したデータの流れの閉ループ制御)により各バッファ431、429に後続入力(および係数)データを供給する。
前述した実施例のうち一つ以上の繰り返し中に、現在の入力タイルが最後の入力平面のものであり、現在の加重値係数が水平方向および垂直方向のいずれにおいてもフィルタカーネルの最後の位置にある場合、各プロセッシング要素418の合算器437により生成される現在の結果は、コンボリューションコア415の後続処理構成要素(例えば結果スケーリングおよび量子化ユニット、シリアライザユニット、結果再整列ユニットおよび/または活性化ユニット443、そしてこれらの任意の順序の任意の組み合わせ)に出力され得る。コンボリューションコア415は最後の入力平面タイルにわたる繰り返し後にコマンドを完了することができる。その後、次のコマンドがコンボリューションコア415によりスケジューリングおよび処理され得る。
コンボリューションモジュール409で一つ以上の次のコマンドをバッファリングするために、コンボリューションモジュール409の個別要素は制御ユニット411があらかじめ次のコマンドをスケジューリングできるように(コマンド)リンク425にリンクされた内部保存所(例えばコマンドFIFO)を有することができ、次のコマンドはコンボリューションモジュール409の構成要素によってシグナリングされる時に該当コマンドの従属性リストおよび現在のフラグまたは状態によってスケジューリングされ得る。好ましくは、入力制御ユニット417がリンク421を通じて「入力読み取り完了」フラグを制御モジュール411にシグナリングすることができ/できるか、出力制御ユニット419がリンク423を通じて「結果書き込み完了」フラグを制御モジュール411にシグナリングすることができ、これを通じて制御モジュール411はコンボリューションモジュール409の内部保存所に次のコマンドを最大の量で維持することができる。バイアスマルチプレクサ823-1、…、823-nは集合815-1に対応する第1計算サイクルで出力タイル821-1、…、821-nに対するそれぞれのバイアス値を選択して、対応するバイアス値の寄与を結果保存所439の部分結果に対して最初に追加することができる。
図4を再び参照すると、入力ウインドウを配置することによるコンボリューション演算のタイル指向的な面積基盤の計算は、それぞれのバッファ(429および431)を通じて入力データおよび係数データを効率的に引き出すことができるようにする。すべての出力タイル821-1、…、821-nに対する単一出力領域819の処理は、図4のプロセッシング要素418のような一つのプロセッシング要素で順次遂行され得る。しかし、一つ以上の出力タイル821-1、…、821-nの出力領域819の計算は、一つ以上の出力タイル821-1、…、821-nの出力領域819が互いに異なるプロセッシング要素418で計算されるように、2個以上の(またはすべての)プロセッシング要素418にわたって分割され得ることが理解されるべきである。また、出力タイル821-1、…、821-nは複数のプロセッシング要素の互いに異なるプロセッシング要素418により並列的に処理され得る。したがって、処理項目817-1、…、817-nは互いに異なるプロセッシング要素418の互いに異なる乗算器435に対応することができ、マルチプレクサ823-1、…、823-nは互いに異なるプロセッシング要素418の互いに異なるマルチプレクサ441に対応し得る。他の実施例において、プロセッシング要素はまた、複数の出力平面821-1、…、821-nに対する複数の出力タイルを順次処理し、結果保存所439のそれぞれの別個領域に部分結果を保存するように構成され得る。結果保存所439はR個までの出力タイルを保存するように構成され得る。M個のプロセッシング要素418が提供される場合、出力タイルの容量はM*Rであり得る。それぞれのプロセッシング要素418は同じDW×DH入力ウインドウデータを獲得することができ、互いに異なる出力タイルに対して並列的にはM個、順次的にはR個の結果を計算してM*R個の出力タイルを導き出すことができる。MおよびRは目標演算の要件に基づいてロジック設計中に構成され得る。ハードウェアリソースに関して、Mは並列プロセッシング要素418の量を決定することができ、Rは各プロセッシング要素418の結果保存所439の物理的な容量を決定することができる。他の実施例において、前述した通り、DW×DH=(w*MW)×(h*MH)の場合、w*h個のプロセッシング要素418が同じ出力タイルに対して計算することができ、ここで水平および垂直計算原点は正規的な構成でよりw倍およびh倍さらに遠くなり得る。これは水平方向および垂直方向のいずれにおいても入力タイル領域を通じて繰り返す段階をより少なく必要とする。したがって、本発明に係る装置は入力データの大きさおよび要求されるコンボリューション演算に対して柔軟に適応することができる。また、本発明の実施例に係る装置は、計算作業の要件を充足するように特定の数のプロセッシング要素および/または多数のコンボリューションモジュールで柔軟に構成され得る。
また、図8に図示された処理は、重なりデータに延びた入力タイル上の単一計算領域原点801での2×2カーネルの大きさを有する、単一ワード水平および垂直ストライドおよび拡張コンボリューション計算シークエンスとして特徴づけられ得る。係数データは、入力ウインドウ807、809、811、813のそれぞれの位置により、2次元データバッファ(例えば図4のデータバッファ431)からそれぞれの入力データがアクセスされるそれぞれの位置で加重値行列から選択され得る。入力領域原点801に対する入力ウインドウの位置はフィルタカーネル805による加重値行列での加重値係数の位置に対応することができ、これを通じて隣接した入力データ位置で加重値行列を使った全体のコンボリューション演算が並列的に行われ得る。全体のタイルのコンボリューションはすべての連続的な入力領域原点804で連続的な計算シークエンスによって完了する。
加重値行列での加重値係数の位置と、結果的な出力タイルの大きさに関する入力ウインドウの大きさ、形態および配置の間の関係は、遂行されるコンボリューション演算の類型に従属され得る。一つ以上の実施例によると、コンボリューション演算の類型はコンボリューションモードおよびデコンボリューションモード(コンボリューションに対する前置)を含むことができる。
入力ウインドウの形態、大きさおよび配置と、加重値および計算された出力値の大きさに対する関係は、ストライド値および拡張値を含むパラメータの集合によって決定され得る。
コンボリューションモードで、拡張値は入力ウインドウの2個の連続的な位置間の距離を決定することができる。このような距離は、入力領域に合せられる時、加重値行列の係数の間の距離に対応し得る。1と同一の拡張値は加重値行列係数が隣接したデータ要素にマッピングされるものと定義することができる。2と同一の拡張値は加重値行列係数が入力領域のそれぞれの第2データ要素にマッピングされるものと定義することができる。当業者であれば3以上の拡張値もこれによって定義され得ることが理解できるであろう。
コンボリューションモードで、ストライド値は入力タイルにわたって入力ウインドウによってサンプリングされるデータ要素間の間隔を決定することができる。ストライド値は入力タイル上の入力領域でサンプリングされるそれぞれのデータ要素間の間隔を設定することによって入力領域の形状を定義することができる。ストライド値が1と同じである場合、入力ウインドウは隣接したデータ要素によって形成される。ストライド値が2と同じである場合、入力ウインドウは入力タイルのすべての第2データ要素を含む。したがって、ストライド値は入力タイルと出力タイルの大きさの間の比率を決定することができる。
ストライド値はまた、結果保存所439が2個以上の出力領域の結果を保存できるかどうかを決定するのに使われ得るが、これは2個以上のストライド値に対しては結果的な出力領域の大きさが対応する入力領域の大きさより小さいであろうからである。
一つ以上の実施例において、対応する入力データバッファ(例えば図4のデータバッファ431)は少なくともストライド値および拡張値を使って調節され得る入力ウインドウにより入力領域をサンプリングできる2次元データバッファで構成され得る。入力ウインドウは図8の入力領域原点804のような一つ以上の入力領域原点に配置されて、データバッファ431に保存された入力データに対するアクセスを提供することができる。これを通じて、データ要素が個別的にアドレッシングされる必要がなく、かえってパラメータ化された調節可能な入力ウインドウによって引き出され得るため、要求される入力データの引き出しを単純化することができる。
また、図8を参照すると、入力ウインドウおよびその配置は2×2フィルタカーネルに関して1のストライド値および1の拡張値によって定義され得る。
図9は、加重値行列の加重値係数を選択できるフィルタカーネル907と関連して、入力タイル905の入力領域原点903に配置され得る入力ウインドウ901の構成に関する他の例を図示する。入力ウインドウ901は2×2フィルタカーネル907に関して2のストライド値および1の拡張値によって定義され得る。入力ウインドウ901は複数の入力領域原点903の原点908周囲に配置されて、入力ウインドウ901、909、911および913がフィルタカーネル907により加重値行列の各加重値係数に関して処理されるようにする。入力ウインドウ901、909、911および913によりサンプリングされた4×4入力領域のすべてのデータ要素は、出力タイル917の同じ出力領域915に寄与する。
したがって、図9に図示された構成は、重なりデータによって延びる入力タイル905上の複数の原点903の単一計算領域原点908での2×2フィルタカーネル、2ワード水平および垂直ストライドおよび単一ワード拡張コンボリューション計算シークエンスとして特徴づけられ得る。
加重値行列からの加重値係数は、入力データが図4のデータバッファ431のようなデータバッファからそれぞれの入力ウインドウ901、909、911および913によりサンプリングされるフィルタカーネル907によりそれぞれの位置で選択され得る。このような構成で、入力タイル905上のすべての第2データ要素が引き出される。計算領域原点908に対する入力ウインドウ901、909、911および913の位置は加重値行列での加重値係数の位置に対応することができ、これを通じて2ワード間隔の位置で加重値行列を使った全体のコンボリューションサイクルが並列的に行われ得る。図9に図示されたように、結果は出力タイル917の各出力領域原点921で出力領域915内の隣接したデータ要素を示す。全体の入力タイル905のコンボリューションはすべての原点903で入力ウインドウを連続的にサンプリングすることによって完了することができ、これを通じて出力タイル917内のすべての原点に対する結果が得られる。
図10は、入力ウインドウの他の構成および2×2フィルタカーネルに関する1のストライド値および2の拡張値を使った加重値係数のマッピングを図示する。これは2×2フィルタカーネルの大きさ、単一ワード水平および垂直ストライドおよび2ワード拡張コンボリューション計算シークエンスに相当し得る。したがって、加重値行列は入力データの隣接した位置から並列的にすべての第2データ要素に延びる。
図11は、2×2フィルタカーネルに関して2のストライド値および2の拡張値を有する入力ウインドウの他の構成を図示する。これは重なりデータに延びた入力タイル上の単一計算領域原点での2×2フィルタカーネルの大きさ、2ワード水平および垂直ストライドおよび拡張コンボリューション計算シークエンスに相当し得る。
図8、図9および図10と関連して説明された構成と同様に、加重値係数は対応する入力ウインドウの位置に対応する位置で選択される。図11による構成で、入力ウインドウは、原点から始まる入力タイルのすべての第2データ要素をキャプチャーし、原点に対する入力ウインドウの位置は加重値行列での加重値係数の位置に2をかけたものに対応し、これは2ワードだけ離隔した位置から並列的にすべての第2データ要素まで延びた加重値行列を使った全体のコンボリューションサイクルと同じ計算シークエンスに対応し得る。部分結果は出力タイルの各出力領域原点での隣接したデータ要素のものである。全体のタイルコンボリューションはすべての入力計算原点で連続的な計算シークエンスによって完了して、出力タイルのすべての出力領域原点に対する全体の部分結果を生成する。
デコンボリューションモードで、ストライド値は入力平面データ要素ごとにどれほど多い出力平面データ要素を水平方向および垂直方向の両方で生成するかを決定することができる。ストライド値は入力タイルと出力タイルの次元間の比率を決定することができる。ストライド値が1より大きい場合、入力タイルの一部のみが出力タイルを生成するのに使われ、単一入力タイルは出力平面の多数の出力タイルに対する部分結果を生成することができる。
好ましくは、各入力平面に対して、データ要素は水平方向および垂直方向のいずれにおいてもストライド値と同じ間隔を有する出力平面のデータ領域にわたって配置され、加重値行列は入力平面のそれぞれのデータ要素に対してコピーされ、入力データ要素ごとに加重値係数として使われて出力平面の部分結果を生成することができる。出力平面のデータ要素にマッピングされた部分結果の数は、水平方向および垂直方向のいずれにおいてもストライド値と同じ周期を有するパターンを有することができる。
デコンボリューションモードで、図4のコンボリューションコア415のようなコンボリューションコアは、図4のデータバッファ431のようなデータバッファからDW×DH個の隣接データワードを読み取り、出力領域にわたってストライド値と同じデータ要素間の間隔を有する出力タイルの出力領域(カーディナリティがDW×DHである)に対するデコンボリューション演算の部分結果を生成することができる。加重値行列の内部で水平方向および垂直方向にストライド値による加重値係数選択段階によって部分結果が生成される。
図12は、2×2フィルタカーネルに関して、1のストライド値および1の拡張値で単一入力領域原点の周囲にデコンボリューションシークエンスに対する入力ウインドウを配置することを図示する。入力ウインドウはフィルタカーネル1203により入力タイルの複数の入力領域原点1213の入力領域原点1201に対して配置され得る。これに伴い、入力領域原点1201に対して入力ウインドウ1205、1207、1209および1211が導き出され得る。
デコンボリューション中に、フィルタカーネル1203による加重値行列からの加重値係数の選択は、入力領域原点1201に対する入力ウインドウ1205、1207、1209および1211の位置に対して逆(inverse)であり得る。
図12に図示されたような構成は、重なりデータに延びた入力タイル上の単一計算領域原点1201での2×2フィルタカーネル、単一ワード水平および垂直ストライドおよび拡張デコンボリューション計算シークエンスとして理解され得る。係数は入力ウインドウ1205、1207、1209および1211の位置により加重値行列から選択される。入力領域原点1201に対する入力ウインドウ1205、1207、1209、1211の位置は、フィルタカーネル1203による加重値行列での実際の加重値係数位置の逆であり得る。これを通じて、隣接した位置で並列的に加重値行列を使った全体のデコンボリューションサイクルと同じ計算シークエンスが導き出され得る。タイルの全体のデコンボリューションは入力タイルのすべての計算領域原点1213で連続的な計算シークエンスによって完了する。
図13Aおよび13Bは、入力タイルのデータ要素をサンプリングするための入力ウインドウの他の構成および2のストライド値、1の拡張値および3×3フィルタカーネル1303に対する複数の入力領域原点1302の単一入力領域原点1301周囲のデコンボリューションシークエンスに対する出力タイルに関する結果を図示する。図13Aおよび図13Bは、入力タイル1305上の入力ウインドウの配置および出力タイル1307に対する対応する結果を図示する。図13Aおよび図13Bで図示された構成は、複数の出力領域原点1310の出力領域原点1308で出力領域を生成する3×3フィルタカーネル、2ワード水平および垂直ストライドおよび単一ワード拡張デコンボリューション計算シークエンスとして理解され得、ここで出力領域は重なりデータに延びた入力タイル1305上の単一計算領域原点1301周囲の入力データから水平方向および垂直方向のいずれにおいてもストライドの倍だけより大きい。複数の入力領域原点1302それぞれでの計算によって、対応する出力領域原点1310での結果が生成され得る。
入力ウインドウの配置によって入力ウインドウ1309、1311、1313および1315が導き出され得る。
図13Aの第1ラインに図示されたように、フィルタカーネル1303の中心値によってマッピングされた加重値係数と入力ウインドウ1309の組み合わせは、出力タイル1307上の出力領域1317のストライドだけ離隔した位置に対する部分結果を生成する。本明細書全般にわたって使われるストライドだけ離隔した位置という用語は、ストライド値により水平および/または垂直に離隔した領域上の位置を指称する。
入力ウインドウ1311、1313、1315、1309およびフィルタカーネル1303により選択された加重値行列からのそれぞれの加重値係数は、出力タイル1307上の出力領域1317の位置に対する単一ワード位置オフセットを有する、出力タイル1307上の出力領域1319のストライドだけ離隔した位置に対する部分結果を導き出すことができる。
図13Bは、出力タイル1307の他のデータ要素を計算するのに使われるフィルタカーネル1303による加重値行列の互いに異なる加重値係数と入力ウインドウ1309および1313および入力ウインドウ1309および1315の他の組み合わせを図示する。
入力ウインドウ1315と加重値係数1321の組み合わせおよび入力ウインドウ1309と加重値係数1323の組み合わせは、出力タイル1307上の出力領域1317の位置に対する単一ワード水平オフセットおよび該当位置にマッチングされる垂直位置を有する、出力タイル1307上の出力領域1325のストライドだけ離隔した位置に対する部分結果を定義する。入力ウインドウ1313と加重値係数1327との組み合わせおよび入力ウインドウ1309と加重値係数1329との組み合わせは、出力タイル1307上の出力領域1317の位置に対する単一ワード垂直オフセットおよび該当位置にマッチングされる水平位置を有する、出力タイル1307上の出力領域1331のストライドだけ離隔した位置に対する部分結果を定義する。
図13Aおよび図13Bに関して詳細に説明した通り、入力領域原点1301に対する入力ウインドウの位置は、加重値行列での加重値係数の実際の位置を負のストライド値(この例では-2)で割ったものに対応し得る。これを通じて、DW×DH入力ウインドウ1309、1311、1313、1315による部分結果が、サイクルごとに位置オフセットが変更されることによって、水平方向および垂直方向の両方でストライドだけ離隔した位置それぞれに対して値を伝播する間に、加重値行列を使った全体のデコンボリューションサイクルと同じ計算シークエンスが導き出され得、これに伴いDW×DH大きさの入力領域から(ストライド*DW)×(ストライド*DH)大きさの領域が効果的に導き出される。出力領域原点1308に対する出力領域1317、1319、1325、1331に対応する部分結果伝播パターンの位置オフセットは、加重値行列での加重値係数の実際の位置に対応し得る。
図13Aおよび図13Bの構成によって、入力ウインドウ1309、1311、1313、1315のすべての位置およびフィルタカーネル1303による加重値行列の各加重値係数との組み合わせに対して、すべての入力領域原点1302での連続的な計算シークエンスによる全体のタイルデコンボリューションが可能になる。
図14は、本発明の一実施例に係る加速器装置によってデータのレイヤーをアクセスし処理するための方法のフローチャートを図示する。この方法は図4に図示された装置401のような加速器装置上で具現され得る。
方法1400は項目1401から開始して、加速器装置によって処理される入力データの少なくとも一部が引き出される項目1403に進行することができる。項目1405で入力データは複数の隣接した入力タイルに分節化または分割され得る。入力タイルはあらかじめ決定された大きさを有することができる。引き続き、項目1407で複数の隣接した入力タイルのうち少なくとも一つが加速器装置のデータバッファに保存され得る。
項目1409で、データバッファに保存された複数の隣接した入力タイルのうち少なくとも一つのデータ要素は、データバッファに保存されたデータ要素にわたって入力ウインドウを配置することによってアクセスされて複数の入力領域を生成することができ、ここで入力ウインドウはパラメータの集合に応じて調節され得る。パラメータの集合はストライド値および拡張値を含むことができ、これは係数値の位置に関する入力領域上の入力ウインドウの構成および配置、そして出力データ要素に対する寄与を定義することができる。入力ウインドウの構成の例が図8~図13の実施例に関して説明された。
項目1411で、複数の入力領域のうち少なくとも一つが順次処理され、複数の隣接した入力タイルのうち少なくとも一つを加速器装置によって少なくとも部分的に処理することができる。
項目1407で複数の隣接した入力タイルのうち他の一つをデータバッファに保存し、項目1409で入力ウインドウを使って複数の隣接した入力タイルのうち他の一つのデータをアクセスすることによって方法1401が繰り返され得る。これは全体の入力データに対する計算が完了するまで順次または並列的に繰り返され得る。
方法1400は項目1413で終了され得る。
本発明の実施例は、装置の自動化制御に対してコンピュータによってガイドされたり自動化される意思決定を可能とする情報を提供するために、顔および物体の検出、交通モニタリングおよび自動化走行のような、コンピュータビジョンを含む多様な技術的領域だけでなく、大量の数学的演算の遂行を必要とする任意の異なる領域で適用され得る。しかし、本発明は入力データの特定の構成および/または応用分野に限定されず、デバイスの制御に適合な情報を導き出すために、センサ、状態、または構成データに対する複雑な計算を可能とする処理装置の技術的な設定を定義できることが理解されるべきである。
いくつかの実施例が詳細に説明されたが、本発明の態様は多様な形態を取り得ることが理解されるべきである。特に、請求された対象は説明された例と異なるように実施または具現され得、説明された特徴および特性は任意の組み合わせで実施または具現され得る。本明細書に開示された実施例は、特許請求の範囲によって定義されたように、本発明を限定するものではなく例示するためのものである。