(57)【要約】  畳み込みニューラルネットワーク（ＣＮＮ）アクセラレータの畳み込み効率を向上させる方法、装置、システム、及び製造品が開示される。一例示的な装置が、プラットフォームに利用可能なデータ処理要素（ＤＰＥ）アレイに含まれるＤＰＥを識別するＤＰＥインベントリエンジンと、ＤＰＥのうち識別されたＤＰＥの畳み込み配置を決定するモードセレクタと、ＤＰＥのうち識別されたＤＰＥに基づいてＤＰＥ利用を決定するＤＰＥ構成最適化器と、ＤＰＥ利用がＤＰＥ利用閾を満たすとき、ＤＰＥのうち識別されたＤＰＥを使用して畳み込み演算を容易にする畳み込みエンジンとを含む。
2020521263.tif 000002
【特許請求の範囲】
【請求項１】
ハードウェアアクセラレータであって、
データパス要素（ＤＰＥ）アレイ内のハードウェアＤＰＥであり、
累算器と、
前記累算器に結合された乗算器であり、前記乗算器は、前記ハードウェアＤＰＥが畳み込みモードであるとき、活性化値及びフィルタ係数値を含む第１の入力を乗算して第１の畳み込み出力を生成する、乗算器と、
を含むハードウェアＤＰＥと、
前記ＤＰＥアレイに結合されたコントローラであり、前記コントローラは、前記乗算器又は前記累算器のうち少なくとも１つに第２の入力に基づき第２の畳み込み出力を生成させることにより、前記ハードウェアＤＰＥを前記畳み込みモードからプーリングモードに調整し、前記第２の入力はプールエリアの出力位置値を含み、前記第１の入力のうち少なくとも１つが前記第２の入力のうち少なくとも１つと異なる、コントローラと、
を含むハードウェアアクセラレータ。
【請求項２】
前記ハードウェアＤＰＥは、
前記乗算器に結合されたデータ入力インターフェースであり、前記データ入力インターフェースは、第１のインターフェースに対応する第１の論理ロー信号の検出に応答して前記活性化値を前記乗算器に送信し、前記第１のインターフェースは前記データ入力インターフェースと異なる、データ入力インターフェースと、
前記乗算器に結合されたフィルタ係数インターフェースであり、前記フィルタ係数インターフェースは、平均プーリングインターフェースに対応する第２の論理ロー信号の検出に応答して前記フィルタ係数値を前記乗算器に送信する、フィルタ係数インターフェースと、を含み、
前記乗算器は、イネーブルインターフェースに対応する論理ハイ信号の検出に応答して前記活性化値と前記フィルタ係数値とを乗算する、
請求項１に記載のハードウェアアクセラレータ。
【請求項３】
前記ハードウェアＤＰＥは、
フリップフロップと、
前記フリップフロップに結合された比較器であり、前記比較器は、
プールインターフェースに対応する第１の論理ハイ信号の検出に応答して前記第２の畳み込み出力を前記第１の畳み込み出力と比較し、
前記第２の畳み込み出力が前記第１の畳み込み出力より大きいとの決定に応答して、第２の論理ハイ信号を生成するように前記フリップフロップを呼び出す、比較器と、
前記比較器及び前記累算器に結合されたレジスタであり、前記レジスタは、
前記第１の畳み込み出力を記憶し、
前記第２の論理ハイ信号の検出に応答して、前記第２の畳み込み出力を記憶し、
最大プーリングインターフェースに対応する第３の論理ハイ信号の検出に応答して、前記第２の畳み込み出力をデータアウトインターフェースに送信する、レジスタと、
を含む、請求項１に記載のハードウェアアクセラレータ。
【請求項４】
前記出力位置値は第１の出力位置値であり、前記ハードウェアＤＰＥは、
第１のインターフェースに対応する第１の論理ハイ信号の検出に応答して、出力位置値の和値を前記乗算器に送信するレジスタであり、前記出力位置値は前記第１の出力位置値を含む、レジスタ、を含み、
平均プーリングインターフェースに対応する第２の論理ハイ信号の検出に応答して、前記乗算器は、前記和値とプールサイズ値とを乗算することにより前記第２の畳み込み出力を生成する、
請求項１に記載のハードウェアアクセラレータ。
【請求項５】
前記ハードウェアＤＰＥに結合されたバッファ、をさらに含み、前記累算器は、最大プーリングインターフェースに対応する論理ロー信号の検出に応答して、前記第１の畳み込み出力を前記バッファに送信する、請求項１に記載のハードウェアアクセラレータ。
【請求項６】
前記コントローラは、（Ａ）前記累算器のレンジを修正するための前記累算器の第１の整数ビット数、又は（Ｂ）前記累算器の精度を修正するための前記累算器の第２の小数ビット数、のうち少なくとも１つを調整する、請求項１に記載のハードウェアアクセラレータ。
【請求項７】
前記ＤＰＥアレイは、前記ハードウェアＤＰＥの２５６個のインスタンスを含み、前記ハードウェアＤＰＥは、
前記コントローラ及び前記ＤＰＥアレイに結合された係数ストアと、
前記コントローラに結合されたデータストアであり、前記コントローラは、
構成配置に基づいて前記ＤＰＥアレイを構成し、前記構成配置は、１＊２５６、２＊１２８、４＊６４、８＊３２、又は１６＊１６配置のうち少なくとも１つであり、
前記構成配置に基づいて前記係数ストア又は前記データストアのうち少なくとも１つを構成する、データストアと、
をさらに含む、請求項１に記載のハードウェアアクセラレータ。
【請求項８】
ハードウェアアクセラレータであって、
データパス要素（ＤＰＥ）アレイ内のハードウェアＤＰＥであり、前記ハードウェアＤＰＥは、
第１の入力を乗算する手段であり、前記第１の入力は活性化値及びフィルタ係数値を含み、前記乗算する手段は、前記ハードウェアＤＰＥが畳み込みモードであるとき、第１の畳み込み出力を生成する、手段と、
前記第１の畳み込み出力を含む畳み込み出力を累算する手段と、
を含む、ハードウェアＤＰＥと、
前記ハードウェアＤＰＥに第２の入力に基づき第２の畳み込み出力を生成させることにより、前記ハードウェアＤＰＥを前記畳み込みモードからプーリングモードに調整する手段であり、前記第２の入力はプールエリアの出力位置値を含み、前記第１の入力のうち少なくとも１つが前記第２の入力のうち少なくとも１つと異なる、手段と、
を含むハードウェアアクセラレータ。
【請求項９】
前記ハードウェアＤＰＥは、
第１のインターフェースに対応する第１の論理ロー信号の検出に応答して前記活性化値を前記乗算する手段に送信する、データ入力インターフェースをとる手段であり、前記第１のインターフェースは、前記データ入力インターフェースをとる手段と異なる、手段と、
平均プーリングインターフェースに対応する第２の論理ロー信号の検出に応答して前記フィルタ係数値を前記乗算する手段に送信する、フィルタ係数インターフェースをとる手段であり、前記乗算する手段は、イネーブルインターフェースに対応する論理ハイ信号の検出に応答して前記活性化値と前記フィルタ係数値とを乗算する、手段と、
を含む、請求項８に記載のハードウェアアクセラレータ。
【請求項１０】
前記ハードウェアＤＰＥは、
フリップフロップと、
前記フリップフロップに結合された比較する手段であり、前記比較する手段は、
プールインターフェースに対応する第１の論理ハイ信号の検出に応答して前記第２の畳み込み出力を前記第１の畳み込み出力と比較し、
前記第２の畳み込み出力が前記第１の畳み込み出力より大きいとの決定に応答して、第２の論理ハイ信号を生成するように前記フリップフロップを呼び出す、手段と、
前記比較する手段及び前記累算する手段に結合された記憶する手段であり、前記記憶する手段は、
前記第１の畳み込み出力を記憶し、
前記第２の論理ハイ信号の検出に応答して、前記第２の畳み込み出力を記憶し、
最大プーリングインターフェースに対応する第３の論理ハイ信号の検出に応答して、前記第２の畳み込み出力をデータアウトインターフェースに送信する、手段と、
を含む、請求項８に記載のハードウェアアクセラレータ。
【請求項１１】
前記出力位置値は第１の出力位置値であり、前記ハードウェアＤＰＥは、
第１のインターフェースに対応する第１の論理ハイ信号の検出に応答して、出力位置値の和値を前記乗算する手段に送信する手段であり、前記出力位置値は前記第１の出力位置値を含む、手段、を含み、
平均プーリングインターフェースに対応する第２の論理ハイ信号の検出に応答して、前記乗算する手段は、前記和値とプールサイズ値とを乗算することにより前記第２の畳み込み出力を生成する、
請求項８に記載のハードウェアアクセラレータ。
【請求項１２】
前記ハードウェアＤＰＥに結合されたバッファリングする手段、をさらに含み、前記累算する手段は、最大プーリングインターフェースに対応する論理ロー信号の検出に応答して、前記第１の畳み込み出力を前記バッファリングする手段に送信する、請求項８に記載のハードウェアアクセラレータ。
【請求項１３】
前記調整する手段は、（Ａ）前記累算する手段のレンジを修正するための前記累算する手段の第１の整数ビット数、又は（Ｂ）前記累算する手段の精度を修正するための前記累算する手段の第２の小数ビット数、のうち少なくとも１つを調整する、請求項８に記載のハードウェアアクセラレータ。
【請求項１４】
前記ＤＰＥアレイは、前記ハードウェアＤＰＥの２５６個のインスタンスを含み、
前記調整する手段及び前記ＤＰＥアレイに結合された、第１の記憶する手段と、
前記調整する手段に結合された、第２の記憶する手段であり、前記調整する手段は、
構成配置に基づいて前記ＤＰＥアレイを構成し、前記構成配置は、１＊２５６、２＊１２８、４＊６４、８＊３２、又は１６＊１６配置のうち少なくとも１つであり、
前記構成配置に基づいて前記第１の記憶する手段又は前記第２の記憶する手段のうち少なくとも１つを構成する、手段と、
をさらに含む請求項８に記載のハードウェアアクセラレータ。
【請求項１５】
ハードウェアアクセラレータであって、
複数のハードウェアデータパス要素（ＤＰＥ）を含むＤＰＥアレイであり、前記複数の前記ハードウェアＤＰＥのうち第１のＤＰＥが、
累算器と、
前記累算器に結合された乗算器と、
を含む、ＤＰＥアレイと、
前記ＤＰＥアレイに結合された接続マルチプレクサと、
前記接続マルチプレクサに結合されたデータストアと、
前記ＤＰＥアレイに結合された係数データストアと、
前記ＤＰＥアレイ、前記係数ストア、及び前記データストアに結合されたコントローラと、
を含むハードウェアアクセラレータ。
【請求項１６】
前記ＤＰＥアレイ及び前記コントローラに結合された出力バッファと、
前記コントローラ、前記データストア、及び前記出力バッファに結合されたダイレクトメモリアクセスコントローラと、
をさらに含む請求項１５に記載のハードウェアアクセラレータ。
【請求項１７】
前記第１のＤＰＥは、
前記乗算器の第１の入力に結合されたイネーブルインターフェースと、
データ入力インターフェースと、
前記複数の前記ハードウェアＤＰＥのうち第２のＤＰＥに結合された隣接データインターフェースと、
前記データ入力インターフェース及び前記隣接データインターフェースに結合された第１のスイッチと、
前記乗算器の第１のインターフェース及び第２の入力に結合された第２のスイッチであり、前記第２のスイッチは、前記第２のスイッチが第１のスイッチ位置を有することに応答して前記第１のスイッチに結合される、第２のスイッチと、
を含む、請求項１５に記載のハードウェアアクセラレータ。
【請求項１８】
前記第１のＤＰＥは、
前記乗算器に結合されたバイパスセレクタインターフェースと、
前記乗算器の第１の出力及び前記乗算器の第２の出力に結合された第１のスイッチと、
前記第１のスイッチに結合された第１のバイパスインターフェースと、
前記累算器の入力及び前記累算器の出力に結合された第２のスイッチと、
前記第２のスイッチに結合された第２のバイパスインターフェースと、
を含む、請求項１５に記載のハードウェアアクセラレータ。
【請求項１９】
前記第１のＤＰＥは、
フリップフロップと、
前記フリップフロップに結合された比較器と、
前記比較器及び前記累算器に結合されたレジスタと、
を含む、請求項１５に記載のハードウェアアクセラレータ。
【請求項２０】
前記第１のＤＰＥは、
前記乗算器、前記比較器の第１の入力、及び前記レジスタの出力に結合された第１のスイッチと、
前記比較器の第２の入力に結合された第２のスイッチと、
前記累算器の出力及び前記第２のスイッチに結合された第３のスイッチと、
前記乗算器の入力及び前記第３のスイッチに結合された第４のスイッチと、
を含む、請求項１９に記載のハードウェアアクセラレータ。
【請求項２１】
前記第１のＤＰＥは、
前記レジスタの第１の入力に結合された第１のスイッチと、
前記第１のスイッチ及び前記レジスタの第２の入力に結合された第２のスイッチと、
前記レジスタの第３の入力に結合されたクリアレジスタインターフェースと、
前記レジスタの第４の入力に結合されたストアインターフェースと、
を含む、請求項１９に記載のハードウェアアクセラレータ。
【発明の詳細な説明】
【技術分野】
【０００１】
［関連出願］
本特許は、2017年5月19日に出願された米国仮特許出願第62/508,896号の利益を主張する出願から生じる。米国仮特許出願第62/508,896号はここでその全体を参照により本明細書に援用される。米国仮特許出願第62/508,896号の優先権をここに主張する。
【０００２】
［技術分野］
本開示は、概して画像処理に関し、より詳細には畳み込み効率を向上させる方法、システム、及び装置に関する。
【背景技術】
【０００３】
近年、画像処理能力に対する需要は、高出力の専用デスクトップハードウェアを超えてきており、パーソナル及び／又は他のモバイルデバイスに対する期待となっている。モバイルデバイスは、典型的には、サイズ制約、温度管理制約、及び／又は供給電力制約により制限される処理能力を含む。
【図面の簡単な説明】
【０００４】
【図１】畳み込みを使用した例示的な入力ボリューム及び例示的な出力ボリュームの例示的な畳み込み演算を示す。
【図２】「出力位置ごと」ベースの例示的なマルチチャネル畳み込み演算を示す。
【図３】例示的なプーリング演算の概略表現を示す。
【図４】例示的な全結合演算の概略表現を示す。
【図５】例示的な畳み込みニューラルネットワーク（ＣＮＮ）アクセラレータのブロック図を示す。
【図６】例示的なデータパス要素（ＤＰＥ）を示す。
【図７】例示的な係数ストアの図である。
【図８】例示的な係数ストアに対する例示的なアドレス指定モデルを表す例示的な表である。
【図９】非ＦＰ１６フォーマットに基づく例示的な係数ストアに対する例示的なアドレス指定モデルを表す例示的な表である。
【図１０】本明細書に開示される例を実現する例示的な畳み込み演算を示す。
【図１１】例示的な１＊２５６畳み込み配置に基づく例示的な接続マルチプレクサの例示的な動作を示す。
【図１２】例示的な２＊１２８畳み込み配置に基づく例示的な接続マルチプレクサの例示的な動作を示す。
【図１３】図５の例示的なＣＮＮアクセラレータを実現する別の例示的なＣＮＮアクセラレータの例示的な実装のブロック図である。
【図１４】入力画像に関連づけられた画像データを処理する図５のＣＮＮアクセラレータ及び／又は図１３のＣＮＮアクセラレータを実現するために実行され得る、例示的なマシン読取可能命令を表すフローチャートである。
【図１５】任意のプーリングを用いて畳み込み演算を実行する図５のＣＮＮアクセラレータ及び／又は図１３のＣＮＮアクセラレータを実現するために実行され得る、例示的なマシン読取可能命令を表すフローチャートである。
【図１６】重複プーリング演算を実行する図５のＣＮＮアクセラレータ及び／又は図１３のＣＮＮアクセラレータを実現するために実行され得る、例示的なマシン読取可能命令を表すフローチャートである。
【図１７】全結合演算を実行する図５のＣＮＮアクセラレータ及び／又は図１３のＣＮＮアクセラレータを実現するために実行され得る、例示的なマシン読取可能命令を表すフローチャートである。
【図１８】例示的な累算器を構成する図５のＣＮＮアクセラレータ及び／又は図１３のＣＮＮアクセラレータを実現するために実行され得る、例示的なマシン読取可能命令を表すフローチャートである。
【図１９】図１４〜図１８の例示的なマシン読取可能命令を実行して図１３の例示的なＣＮＮアクセラレータを実現するように構造化された例示的なプロセッサプラットフォームのブロック図である。
【０００５】
図は、縮尺どおりではない。一般に、同一の参照番号は、図面及び添付の書面による説明の全体を通じて、同一又は類似の部分を参照するために使用される。
【発明を実施するための形態】
【０００６】
パーソナル及び／又はその他のモバイルデバイスを含む典型的なコンピューティングシステムは、高度な画像処理又はコンピュータビジョンアルゴリズムを採用して、人間の視覚系が実行できるタスクを自動化する。コンピュータビジョンタスクは、デジタル画像を取得し、処理し、解析し、理解することを含み、これは、部分的に、デジタル画像から次元データを抽出して数値及び／又はシンボル情報を生成することを容易にする。コンピュータビジョンアルゴリズムは、数値及び／又はシンボル情報を使用して、とりわけ、３次元（３Ｄ）ポーズ推定、イベント検出、オブジェクト認識、ビデオ追跡等に関連づけられた判断を行い、かつ／あるいはその他の方法で動作を実行することができる。
【０００７】
高度な画像処理又はコンピュータビジョンアルゴリズムは、畳み込みニューラルネットワーク（ＣＮＮ、又はＣｏｎｖＮｅｔ）を採用することができる。ＣＮＮは、画像を分類し、類似性により画像をクラスタ化し（例えば、フォトサーチ）、畳み込みを使用して画像内のオブジェクト認識を実行するために典型的に使用される、深い人工ニューラルネットワークである。本明細書で用いられるとき、畳み込みは、２つの所与の関数のうち一方の形状が他方の関数の形状によりどのように修正されるかを表す統合により、該２つの所与の関数から導出される関数を参照する。例えば、ＣＮＮを使用して、画像特徴（例えば、水平線、２次元（２Ｄ）形状等）に対応する１つ以上のフィルタを入力画像に通して入力画像内の画像特徴のマッチを識別することにより、入力画像に含まれる顔、個人、街路標識、動物などを識別することができる。
【０００８】
いくつかの例において、ＣＮＮは、画像をテンソルとして取り込み、かつ／あるいはその他の方法で処理し、テンソルは、さらなる次元を有する数字の行列である。例えば、ＣＮＮは、３Ｄテンソルにより表される入力画像を取得することができ、第１及び第２の次元は、行列の幅及び高さに対応し、第３の次元は、行列の深さに対応する。例えば、行列の幅及び高さは、入力画像の幅及び高さに対応でき、行列の深さは、色深度（例えば、色レイヤ）又は画像の色符号化（例えば、赤‐緑‐青（ＲＧＢ）符号化）に対応できる。
【０００９】
ニューラルネットワークと比較して、ＣＮＮは、フル画像に十分にスケーリングする。例えば、典型的なニューラルネットワークは、入力（例えば、単一ベクトル）を受け取り、該入力を一連の隠れ層を通して変換する。各隠れ層は、ニューロンのセットを含み、各ニューロンは、前の層内の全てのニューロンに全結合され（fully-connected）、単一の層内のニューロンは、完全に独立して機能し、いかなる接続も共有しない。このような例において、典型的なニューラルネットワークは、２００×２００×３（例えば、２００画素×２００画素×３の色深度）の画像を１２０，０００の重みに翻訳することができ、各重みは、１つより多くのニューロンを有することができる。例えば、画像は、各色深度に対応する３つの入力チャネルを有することができ、各入力チャネルは、２００画素×２００画素の大きさを有する。
【００１０】
典型的なＣＮＮはまた、入力を受け取り、該入力を一連の隠れ層を通して変換することができる。例えば、ＣＮＮは、複数の畳み込み層、プーリング層、及び／又は全結合層を有することができる。このような例において、ＣＮＮは、畳み込み層とプーリング層と全結合層とを含む複数の層トリプレットを有することができる。いくつかの例において、ＣＮＮは、１つ以上の全結合層に出力する複数の畳み込み及びプーリング層ペアを有する。いくつかの例において、ＣＮＮは、２０層、３０層等を含むことができる。
【００１１】
畳み込み層は、畳み込み関数又は演算を適用して、入力（前の）層の画像をＣＮＮにおける次の層にマッピングする。各入力層が入力画像に関連づけられた複数の入力特徴（例えば、入力チャネル）を有することができるため、畳み込みは３Ｄである。畳み込み層は、各個々の入力チャネル内に領域フィルタウィンドウを形成し、（１）領域フィルタウィンドウに関連づけられたフィルタ重みと（２）領域フィルタウィンドウによりカバーされる入力データとの積を算出することにより出力データ又は活性化（activations）を生成することによって、畳み込みを実行する。例えば、入力画像の出力特徴は、畳み込みフィルタを使用して複数の領域フィルタウィンドウを含む複数の入力チャネルをスキャンすることにより決定できる。
【００１２】
プーリング層は、各出力チャネル内の活性化のセットから情報を抽出する。プーリング層は、最大プーリング層に対応する最大プーリング演算又は平均プーリング層に対応する平均プーリング演算を実行することができる。最大プーリング演算は、プーリングウィンドウ内で活性化の最大値を選択することを含む。平均プーリング演算は、プーリングウィンドウ内で活性化の平均値を算出することを含む。
【００１３】
全結合層は、畳み込み層及び／又はプーリング層により算出されたデータを取得し、データを１つ以上のクラスに分類する。全結合層は、分類されたデータが入力画像の特定の画像特徴に対応するかどうかを決定する。例えば、全結合層は、分類されたデータが単純な画像特徴（例えば、水平線）に対応するか、あるいは動物（例えば、猫）のようなより複雑な画像特徴に対応するかを決定することができる。
【００１４】
いくつかの例において、ＣＮＮは、畳み込み層、プーリング層等の後に開始されるパラメトリック正規化線形ユニット（Parametric  Rectified  Linear  Unit、ＰＲｅＬＵ）演算又は正規化線形ユニット（Rectified  Linear  Unit、ＲｅＬＵ）演算などの後処理演算を実行する。ＰＲｅＬＵ演算及びＲｅＬＵ演算は、ＣＮＮニューロンの出力に適用される活性化関数に対応する。例えば、ＣＮＮが畳み込み層、プーリング層等から出力を生成した後、ＰＲｅＬＵ演算又はＲｅＬＵ演算は、活性化に対して要素ごと活性化関数を適用することを含むことができる。例えば、ＰＲｅＬＵ演算は、出力がＰＲｅＬＵベースパラメータより小さいとき、第１のＰＲｅＬＵパラメータで活性化に乗算し、かつ／あるいはその他の方法でスケーリングすることを含むことができる。他の例において、ＰＲｅＬＵ演算は、活性化がＰＲｅＬＵベースパラメータより大きいとき、第２のＰＲｅＬＵパラメータで活性化に乗算し、かつ／あるいはその他の方法でスケーリングすることを含むことができる。ＲｅＬＵ演算は、活性化に最大関数を適用することを含むことができ、ＲｅＬＵ演算は、ゼロと活性化との間の最大値を返す。このような例において、ＲｅＬＵ演算は、任意の負の要素をゼロに設定することを含むことができ、ゆえに、活性化に対するさらなる指数関数、乗算、又は除算演算を排除及び／又はその他の方法で回避することにより、ＣＮＮの訓練を高速化する。
【００１５】
しかしながら、ＣＮＮの隠れ層は、幅、高さ、及び深さを含む３つの次元に配置されたニューロンを有することができる。ＣＮＮの層内のニューロンの各々は、その前の層の一部分（例えば、比較的小さい領域（例えば、２×２活性化マップ、３×３活性化マップ等））にのみ接続される。一層の全てのニューロンが先行層の全てのニューロンに接続される典型的なニューラルネットワークと比較して、ＣＮＮ層のニューロンは、実質的により少ない数の層間接続に起因して、実質的により少ない重みを結果としてもたらす。
【００１６】
本明細書に開示される例は、ＣＮＮ演算の効率を向上させる。本明細書に開示される一例示的なＣＮＮアクセラレータは、任意のＰＲｅＬＵ／ＲｅＬＵ／ＲｅＬＵ‐Ｘ、及び活性化ごとのスケーリング及びバイアスを有する、全結合を含む任意の層における任意の非重複最大及び平均プーリングを有する、マルチチャネルＣＮＮ行列‐行列畳み込みを実現する。個々の畳み込み演算を順次実行した従来の実装と比較して、本明細書に開示される例示的なＣＮＮアクセラレータは、複数の畳み込み演算を実質的に並列に実行する。さらに、例示的なＣＮＮアクセラレータは、重複プーリング（例えば、最大プーリング、平均プーリング等）演算を実現することができる。
【００１７】
図１は、畳み込みを使用した例示的な入力ボリューム１０２及び例示的な出力ボリューム１０４の例示的な畳み込み演算１００を示す。図１の例示的な入力ボリューム１０２は、多次元行列に記憶された画素値により表される例示的な入力画像（例えば、写真、ビデオフレーム等）１０６に対応する。例えば、入力画像１０６は、カメラなどのデバイスから、又はメモリ（例えば、不揮発性メモリ、揮発性メモリ等）から取り出せる。例示的な入力ボリューム１０２は、多次元行列を表す例示的な入力チャネル（Ｃ１、ＣＣ等）１１０、１１２のセットを含む。例示的な入力ボリューム１０２は、Ｘ×Ｙ×Ｃにより表され、Ｘ及びＹは、例示的な画素１０８における、例示的な入力チャネル１１０、１１２の各々の大きさであり、Ｃは、入力チャネルの数又は入力ボリューム１０２の深さを表す。例示的な画素１０８の各々は、数字で表される。例えば、数字は、画素１０８の色の強度（例えば、赤、緑、又は青の強度）に対応できる。
【００１８】
図１の図示された例において、入力ボリューム１０２は、大きさＸ及びＹを有する第１のチャネル１１０と大きさＸ及びＹを有するＣチャネル１１２とを含む複数の多次元行列を含む。いくつかの例において、入力チャネルＣの数量は、入力画像の色符号化（例えば、赤‐緑‐青（ＲＧＢ）符号化）に対応する。例えば、入力ボリューム１０２は、２００×２００×３のサイズの入力画像１０６に対応でき、入力画像１０６は、２００画素の高さ（例えば、Ｙ＝２００）、２００画素の幅（例えば、Ｘ＝２００）であり、３つの符号化色（例えば、Ｃ＝３）を有する。
【００１９】
図１の図示された例において、出力ボリューム１０４は、第１の例示的なフィルタ（フィルタ１）１１４及び第２の例示的なフィルタ（フィルタＫ）１１６などの例示的なフィルタを使用して入力ボリューム１０２を畳み込むことにより生成される。図１の例示的なフィルタ１１４、１１６は、画像特徴に対応する。例えば、画像特徴は、入力画像１０６に含まれ得る水平線、垂直線、対角線等であり得る。あるいは、例示的なフィルタ１１４、１１６は、特徴検出器又はカーネルと呼ばれる。図１の図示された例において、フィルタ１１４、１１６は、大きさＦｗ、Ｆｈ、Ｃの多次元行列である。Ｆｗは、係数又は重みにおける、フィルタ１１４、１１６の幅（例えば、第１のフィルタ１１４に関連づけられた第１の係数１１８、第２のフィルタ１１６に関連づけられた第２の係数１２０等）を表し、Ｆｈは、係数１１８、１２０における、フィルタ１１４、１１６の高さを表し、Ｃは、フィルタ１１４、１１６の深さを表す。図１の図示された例において、入力ボリューム１０２の深さは、フィルタ１１４、１１６の深さにマッチする。例えば、フィルタチャネルの数量は、Ｃにより表される入力チャネルの数量に等しい。例示的な係数１１８、１２０は、例示的な入力画像１０６に含まれる画像特徴を識別するために調整できる学習可能値を表す。
【００２０】
図１の図示された例において、フィルタ１１４、１１６のそれぞれのチャネル（例えば、Ｃ１、Ｃ２、ＣＣ等）は、９つの例示的な係数１１８、１２０を含む３×３行列である。あるいは、例示的なフィルタ１１４、１１６のチャネルは、異なる数の係数を含む異なる行列サイズであってもよい。図１の図示された例において、第１のフィルタ（フィルタ１）１１４は第１の係数１１８を含み、第２のフィルタ（フィルタＫ）１１６は第２の係数１２０を含み、第１の係数１１８は第２の係数１２０と異なる。あるいは、第１の例示的な係数１１８のうち１つ以上及び第２の例示的な係数１２０のうち１つ以上が、同じであってもよい。図１の図示された例において、フィルタ１１４、１１６は、各チャネルについて異なる係数を含む。図１の図示された例において、畳み込み演算１００は、Ｋ個のフィルタ１１４、１１６を使用する。例えば、畳み込み演算１００は、５０個のフィルタ（例えば、Ｋ＝５０）、１００個のフィルタ（例えば、Ｋ＝１００）等を使用することができる。
【００２１】
動作において、例示的な出力位置１２２は、例示的な入力チャネル部分１２４と例示的なフィルタ１１４、１１６とのドット積を実行することにより生成される。典型的なＣＮＮにおいて、例示的な出力位置１２２などの出力位置は、活性化と呼ぶこともできる。例えば、畳み込み演算１００は、第１のフィルタ１１４の第１のフィルタチャネルと第１の入力チャネル１１０の入力チャネル部分１２４との第１のドット積を算出することを含むことができる。例示的な畳み込み演算１００は、第１の例示的なフィルタ１１４の第２のフィルタチャネルと第２の例示的な入力チャネル１１２の例示的な入力チャネル部分１２４との第２のドット積を算出することを含むことができる。入力チャネル１２４の各々についてドット積が算出されるまで、さらなるドット積が算出される。
【００２２】
図１の図示された例において、Ｃ個のドット積が、各々がＣの深さを有するフィルタ１１４、１１６に基づいて出力位置１２２の各々について算出される。このような例において、例示的な出力チャネル１２８の第１の例示的な出力チャネル（Ｋ１）１２６の出力位置１２２は、第１のドット積、第２のドット積等、最大Ｃ個のドット積までの和を決定することにより算出される。典型的なＣＮＮにおいて、第１の例示的な出力チャネル１２６などの出力チャネルは、活性化マップ、特徴マップ、又は畳み込み特徴と呼ぶこともできる。
【００２３】
第１の例示的な出力チャネル１２６の例示的な出力位置１２２の算出に応答して、ドット積は、第２の例示的な入力チャネル部分１３０、第３の例示的な入力チャネル部分１３２等について、第１の例示的な入力チャネル１１０の全体が処理されるまで算出される。第１の例示的な入力チャネル１１０の全体の処理に応答して、例示的な畳み込み演算１００は、残りの入力チャネル（例えば、Ｃ２、Ｃ３など、最大ＣＣまで）の各々について上述の演算を実行することを続行し、例示的な出力チャネル１２８のうち対応するものを生成する。
【００２４】
図１の図示された例において、畳み込み演算１００は、入力チャネル部分１２４に１回だけアクセスする。第１の例示的な出力チャネル１２２が考えられる場合、入力データ及び関連づけられたフィルタリングのみが読み出される必要があり、全ての後の出力チャネル１２８について、対応する異なるフィルタを用いて繰り返すことができる。例示的な畳み込み演算１００を順次でなく並列に実行することにより、必要とされるデータの量が低減される。入力データの複数のチャネルが適切な例示的なフィルタ１１４、１１６と畳み込まれて、複数の例示的な出力チャネル１２８のための例示的な出力位置１２２を並列に生成し、これは、いくつかの例において、各々任意にプールされる。
【００２５】
図２は、「出力位置ごと」ベースの例示的なマルチチャネル畳み込み演算２００を示す。例えば、マルチチャネル畳み込み演算２００は、活性化ごとベースで実行できる。図２の例示的なマルチチャネル畳み込み演算２００は、例示的なＣＮＮ（例えば、ＣＮＮアクセラレータ、ＣＮＮハードウェアアクセラレータ等）の例示的な畳み込み層を表す。例えば、マルチチャネル畳み込み演算２００は、プーリング層に活性化を提供することができ、プーリング層は同様に、全結合層（例えば、非線形層）又は別の畳み込み層に活性化を提供することができる。このような例において、全結合層は、別の畳み込み、プーリング、及び全結合層を含む別の層トリプレットに活性化を提供することができる。
【００２６】
図２の図示された例において、列又はワードにおける大きさＸ（例えば、１６ビットワード）と行における大きさＹとを有する例示的な入力データ２０２は、大きさＦｗ及びＦｈの複数の例示的なフィルタ２０４を使用して畳み込まれ、Ｆｗ及びＦｈは双方、３である。例えば、入力データ２０２は、図１の入力画像１０６から、及び／又はメモリから取得できる。図２の図示された例において、入力データ２０２は、複数の入力チャネルが畳み込まれるためにローカルに記憶されたＬ個の例示的なデータ行２０６を含む。図２の図示された例では、行２０６の一部分が、各入力チャネルについて記憶される。いくつかの例において、行２０６は、入力チャネルのデータの全てを含み、一方で他の例において、行２０６は、入力チャネルのデータの一部分を含む。
【００２７】
図２の図示された例において、マルチチャネル畳み込み演算２００は、例示的な出力チャネル２１０の例示的な出力位置２０８の各々を実質的に並列に生成することを含む。例えば、データ行２０６のうち第１のデータ行が、出力チャネル２１０のうち第２の出力チャネルに含まれる出力位置２０８のうち第２の出力位置を生成するためにフィルタ２０４のうち第２のフィルタを使用して畳み込まれるのと実質的に並列に、データ行２０６のうち第１のデータ行が、出力チャネル２１０のうち第１の出力チャネルに含まれる出力位置２０８のうち第１の出力位置を生成するためにフィルタ２０４のうち第１のフィルタを使用して畳み込まれる。
【００２８】
図２の図示された例において、出力チャネル２１０の各々は、その独自の累算器（例えば、ハードウェア及び／又はマシン読取可能命令で実現される累算器）を有し、かつ／あるいはその他の方法でそれに関連づけられる。いくつかの例において、最大プーリング又は平均プーリングは、例示的なプールエリア２１２内の各要素に対して比較演算、ストア演算、及び累算演算を実行することにより出力チャネル２１０に対して実現され、結果を単に出力する。
【００２９】
図２の図示された例において、プールエリア２１２は、出力位置２０８の２×２エリアである。あるいは、例示的なプールエリア２１２は、任意の他のサイズであってもよい。例えば、プーリング演算は、プールエリア２１２に含まれる値の最大値、平均値等を取り、結果として生じる最大値、平均値等を出力することを含むことができる。いくつかの例において、プーリング演算は重複を含む。他の例において、プーリング演算は重複を含まない。例えば、プールエリア２１２は、プーリング演算が重複を含まないとき、各位置が１回だけ読み出されなければならないため、別のプールエリアと重複できない。
【００３０】
図３は、例示的なプーリング演算３００の概略表現を示す。図３の例示的なプーリング演算３００は、例示的なＣＮＮのプーリング層を表す。例えば、プーリング演算３００は、ＣＮＮの全結合層又はＣＮＮの別の畳み込み層に出力を提供することができる。図３の図示された例において、プーリング演算３００は、図２のマルチチャネル畳み込み演算２００からの出力チャネル２１０を処理することを含む。図３の図示された例において、出力チャネル２１０は、出力チャネル２１０の高さ、幅、及び深さにそれぞれ対応する大きさＨ、Ｗ、及びＣを有する。
【００３１】
図３の図示された例において、プーリング演算３００は、図２のプールエリア２１２を、プールエリア２１２の最大値（例えば、最大プーリング）又は平均値（例えば、平均プーリング）を算出し、例示的なプーリング出力チャネル３０４のうちそれぞれのプーリング出力チャネルの、例示的な出力位置３０２のうちそれぞれの出力位置における最大値又は平均値を出力することにより処理する。図３の図示された例において、プーリング出力チャネル３０４は、大きさＨ、Ｗ、及びＣを有し、図２の出力チャネル２１０にマッチする。
【００３２】
図３の例示的なプーリング演算３００は、プーリング演算３００のストライド（例えば、ストライド長）に基づいて複数のプールエリア２１２を処理する（例えば、反復的に処理する）。図３の図示された例において、ストライド長は、１つのインデックス、列等だけ隣接して移動される（例えば、出力チャネル２１０の右側に移動される）プールエリア２１２に対応するものである。図３の図示された例において、プーリング演算３００は重複プーリング演算である。例えば、図３に表すプールエリア２１２は第１の位置にある。出力位置３０２のうち第１の出力位置が算出された後、プールエリア２１２は第２の位置に移動され、第２の位置は、ストライド長が１のとき、第１の位置の右側へ１インデックス又は１列である。このような例において、第１の位置におけるプールエリア２１２の第２の列は、第２の位置におけるプールエリア２１２の第１の列と重複する。例示的なプーリング演算３００は、出力チャネル２１０の全体にわたりプールエリア２１２の最大値又は平均値を算出する。
【００３３】
図４は、例示的な全結合演算４００の概略表現を示す。図４の例示的な全結合演算４００は、例示的なＣＮＮの全結合層である。例えば、全結合演算４００は、別の畳み込み、プーリング、及び全結合層を含む別のＣＮＮトリプレット層に出力を提供することができる。ＣＮＮにおいて、全結合層は、前の層内の全ての活性化に対するフル接続を有する。全結合層は、ベクトル行列乗算を行うためのチャネル畳み込みに類似する。
【００３４】
図４の図示された例において、データ入力４０２は１×Ｍアレイとして示され、係数又は重みアレイ４０４はＶ×Ｍである。対応する例示的な出力アレイ４０６は、サイズ１ｘＶである。（サイズＭの）各列が各要素を乗算されて和を取得し、これがＶ回実行される。いくつかの例において、ＣＮＮは出力アレイ４０６を評価して、画像特徴が図１の入力画像１０６に含まれるパーセントの可能性を決定する。例えば、ＣＮＮは、水平線、対角線などの複数の単純な画像特徴が入力画像１０６に含まれることについてパーセントの可能性を決定することができる。他の例において、ＣＮＮは、ネコ、イヌ、ゾウなどの複数の複雑な画像特徴が入力画像１０６に含まれることについてパーセントの可能性を決定することができる。
【００３５】
図５は、例示的なＣＮＮアクセラレータ５００のブロック図を示す。図５の図示された例において、ＣＮＮアクセラレータ５００は、画像分類アルゴリズム、及び／又は画像及びビデオ認識、リコメンダシステム、及び自然言語処理における他タイプの処理を加速する（accelerate）ために使用される、プラットフォーム（例えば、ハードウェアプラットフォーム）又はハードウェアアクセラレータである。さらに又はあるいは、ＣＮＮアクセラレータ５００は、ハードウェアプロセッサ上で実行するソフトウェアにより実現できる。例示的なＣＮＮアクセラレータ５００は、図１の例示的な畳み込み演算１００、図２の例示的なマルチチャネル畳み込み演算２００、図３の例示的なプーリング演算３００、又は図４の全結合演算４００のうち少なくとも１つを実現する。図５の図示された例において、ＣＮＮアクセラレータ５００は、例示的なコントローラ５０２、例示的なダイレクトメモリアクセス（direct  memory  access、ＤＭＡ）コントローラ５０４、例示的なデータストア５０６、例示的な係数ストア５０８、例示的な接続マルチプレクサ（connection  multiplexer、ＣＯＮＸＴＮ  ＭＵＸ）５１０、例示的なデータパス要素（data  path  element、ＤＰＥ）アレイ５１２、及び例示的な出力バッファ５１４を含む。
【００３６】
図５の図示された例において、ＣＮＮアクセラレータ５００は、ＣＮＮアクセラレータ５００の動作モード及び動作シーケンスを決定するコントローラ５０２を含む。例えば、コントローラ５０２は、ＣＮＮアクセラレータ５００に、（任意のプーリングを有する）畳み込みモード、プーリングモード（例えば、重複プーリングモード）、又は全結合モード（例えば、非線形モード）で動作するように指示することができる。いくつかの例において、コントローラ５０２は、１つ以上のモードにより生成された出力に対して、後処理演算（例えば、ＰＲｅＬＵ演算、ＲｅＬＵ演算等）を実行するかどうかを決定する。例示的なコントローラ５０２は、例示的なＤＭＡコントローラ５０４に、畳み込みされ及び／又はその他の方法で処理されるべき入力チャネルに関連づけられた係数データ及び画像データを取り出すように指示する。例えば、コントローラ５０２は、ＤＭＡコントローラ５０４に、例示的なメインメモリ５１６から図２の入力データ２０２及びフィルタ２０４に関連づけられた係数データを取り出すように指示することができる。
【００３７】
いくつかの例において、コントローラ５０２は、モードに基づいてＣＮＮアクセラレータ５００の１つ以上のコンポーネントを構成する。例えば、コントローラ５０２は、データストア５０６及び／又は係数ストア５０８を１つ以上のランダムアクセスメモリ（ＲＡＭ）（例えば、スタティックＲＡＭ（ＳＲＡＭ）、ダイナミックＲＡＭ（ＤＲＡＭ）等）ブロックへ編成することにより、データストア５０６及び／又は係数ストア５０８を構成することができる。他の例において、コントローラ５０２は、データストア５０６から特定の構成、順序、及び／又は方法でデータを受信するように接続マルチプレクサ５１０の行列を構成する（例えば、データストア５０６から１×２５６、２×１２８、４×６４等のデータ行列を受信する）。他の例において、コントローラ５０２は、畳み込みモード、プーリングモード、又は全結合モードで動作するようにＤＰＥアレイ５１２を構成する。
【００３８】
いくつかの例において、コントローラ５０２は、畳み込みモードの畳み込み配置を決定する。例えば、コントローラ５０２は、畳み込みモードの１×２５６、２×１２８、４×６４、８×３２等の畳み込み配置を決定することができる。例えば、２×１２８畳み込み配置では、入力チャネルの２つのストリームが、１２８個の出力チャネルについて、単一の位置について順次合計され、最終結果は２つのストリームの合計である。いくつかの例において、コントローラ５０２は、畳み込み演算中に使用されないままであるＤＰＥ５２０の数量の決定に基づいて畳み込み配置を決定する。
【００３９】
畳み込み演算が６４個の入力チャネル及び１９２個の出力チャネルを必要とする例において、コントローラ５０２は、１＊２５６畳み込み配置と比較して４＊６４畳み込み配置を使用するよう決定することができる。例えば、４＊６４畳み込み配置を使用するよう決定することにより、ＣＮＮアクセラレータ５００は、ＤＰＥ５２０のうち全２５６個を利用することができる。このような例において、１９２個の出力チャネルは、６４個の出力チャネルの３つのバッチで処理でき、６４個の出力チャネルの各出力チャネルは、ＤＰＥ５２０のうち４つ（例えば、２５６個のＤＰＥ＝４個のＤＰＥ＊６４個の出力チャネル）により処理されて、フルのＤＰＥ利用（utilization）を達成する。１＊２５６畳み込み配置を使用するよう決定することにより、例示的なＣＮＮアクセラレータ５００は、６４個の使用されないＤＰＥ５２０を有することになり、なぜならば、１９２個の出力チャネルが並列に処理されるからであり、１９２個の出力チャネルの各出力チャネルは１個のＤＰＥ５２０により処理され、ゆえに、７５％のＤＰＥ利用しか結果として生じない。例示的なコントローラ５０２は、４＊６４畳み込み配置が他の畳み込み配置より大きいＤＰＥ利用を結果としてもたらすと決定することにより、４＊６４畳み込み配置を使用するよう決定することができる。
【００４０】
いくつかの例において、コントローラ５０２は、ＣＮＮアクセラレータ５００の動作の順序を決定し、かつ／あるいはその他の方法で制御する。例えば、コントローラ５０２は、処理するデータストア５０６の１つ以上のデータ行、処理する係数ストア５０８の１つ以上の係数ブロック等を選択することができる。例えば、コントローラ５０２は、アドレスコマンドを生成すること、及び／又はその他の方法でデータストア５０６、係数ストア５０８、及び／又は出力バッファ５１４のアドレスを選択することにより処理されるデータを選択することによって、ＣＮＮアクセラレータ５００の動作順序を制御することができる。
【００４１】
図５の図示された例において、ＣＮＮアクセラレータ５００は、コンピューティングシステムのメインメモリ５１６からデータを取り出すＤＭＡコントローラ５０４を含む。図５の図示された例において、メインメモリ５１６はＤＲＡＭである。あるいは、例示的なメインメモリ５１６は、ＳＲＡＭ、又は任意の他タイプの不揮発性又は揮発性メモリであってもよい。図５の図示された例において、ＤＭＡコントローラ５０４はメモリインターフェースである。例えば、ＤＭＡコントローラ５０４は、例示的なデータ入力インターフェース５１８を介して、メインメモリ５１６からデータ（例えば、画像データ、係数データ等）をクエリし（queries）、受信し、及び／又はその他の方法で取り出し、取り出したデータをデータストア５０６、係数ストア５０８等に転送する。
【００４２】
図５の図示された例において、ＣＮＮアクセラレータ５００は、データ行列を記憶し、データ行列の部分を処理のために接続マルチプレクサ５１０に供給するデータストア５０６を含む。図５の図示された例において、データストア５０６はＤＲＡＭである。あるいは、例示的なデータストア５０６は、ＳＲＡＭ、又は任意の他タイプの不揮発性又は揮発性メモリであってもよい。例示的なデータストア５０６は、１６個のストレージインスタンスを含み、各インスタンスはサイズが８ｋＢであり、総ストレージ１２８ｋＢをもたらす。例示的なデータストア５０６は、データ行あたり１２８ビットの、５１２データ行として構成される。あるいは、例示的なデータストア５０６は、異なるストレージインスタンス数量、異なるストレージインスタンスサイズ、異なるデータ行数量、及び／又は異なるデータ行あたりビット数量を用いて構成されてもよい。例示的なデータストア５０６に対応するさらなる詳細が、図１１及び／又は図１２に関連して以下で説明される。
【００４３】
図５の図示された例において、ＣＮＮアクセラレータ５００は、係数のデータ行列（例えば、フィルタ係数、カーネル係数等）を記憶し、データ行列の部分を処理のためにＤＰＥアレイ５１２に供給する係数ストア５０８を含む。いくつかの例において、係数ストア５０８は、１つ以上のバイアス値及び／又は１つ以上のスケール値を記憶する。図５の図示された例において、係数ストア５０８はＤＲＡＭである。あるいは、例示的な係数ストア５０８は、ＳＲＡＭ、又は任意の他タイプの不揮発性又は揮発性メモリであってもよい。例示的な係数ストア５０８に対応するさらなる詳細が、図７、図８、及び／又は図９に関連して以下で説明される。
【００４４】
図５の図示された例において、ＣＮＮアクセラレータ５００は、データストア５０６に記憶されたデータの部分を選択する接続マルチプレクサ５１０を含む。いくつかの例において、接続マルチプレクサ５１０は、ＣＮＮアクセラレータ５００の畳み込み配置に基づいてデータストア５０６からデータを選択する。例えば、コントローラ５０２がＣＮＮアクセラレータ５００を２×１２８畳み込み配置に基づいて動作するように構成することに応答して、接続マルチプレクサ５１０は、データストア５０６から１２８個の浮動小数点（ＦＰ）１６ビット（ＦＰ１６）ワードの２つのセット（例えば、２×１２８個のＦＰ１６ワード）を選択し、２５６個のＦＰ１６ワードを処理のためにＤＰＥアレイ５１２に送信する。
【００４５】
図５の図示された例において、ＣＮＮアクセラレータ５００は、１つ以上の畳み込み演算、１つ以上のプーリング演算、又は１つ以上の全結合演算を実行するＤＰＥアレイ５１２を含む。いくつかの例において、ＤＰＥアレイ５１２は、これらに限られないがバイアス演算、パラメトリック正規化線形ユニット（ＰＲｅＬＵ）演算、正規化線形ユニット（ＲｅＬＵ）演算（例えば、ＲｅＬＵ‐Ｘ演算）、又はスケール演算などの後処理演算を実行する。このような例において、ＤＰＥアレイ５１２は、コントローラ５０２から受信したコマンド、命令等に基づいて、演算のうち１つ（例えば、畳み込み演算等）又は後処理演算のうち１つを実行する。図５の図示された例において、ＤＰＥアレイ５１２は、２５６個の例示的なＤＰＥ５２０を含み、２５６個のＤＰＥ５２０の各ＤＰＥが、ＤＰＥアレイ５１２のうち他のＤＰＥ５２０と実質的に並列に、演算（例えば、畳み込み演算、プーリング演算等）、後処理演算（例えば、ＰＲｅＬＵ演算、ＲｅＬＵ演算等）などを実行することができる。あるいは、図５に表された２５６個のＤＰＥ５２０より少ない又は多いＤＰＥが使用されてもよい。ＤＰＥ５２０に対応するさらなる詳細が、図６に関連して以下で説明される。
【００４６】
図５の図示された例において、ＣＮＮアクセラレータ５００は、ＤＰＥアレイ５１２からの出力を記憶し、この出力をさらなる処理のために外部コンピューティングデバイス、ハードウェア、システム等に送信する例示的な出力バッファ５１４を含む。図５の例示的な出力バッファ５１４は、別個の読み出し及び書き込みポートを含む。例示的な出力バッファ５１４は２５６個のチャネルを有し、該チャネルの各チャネルは１６ビットの入力／出力（Ｉ／Ｏ）チャネルである。例示的な出力バッファ５１４は、２×８＊４０９６ビットデータ行列として構成された８キロバイト（ｋＢ）メモリストレージの１つのインスタンスである。例えば、出力バッファ５１４は、ピンポンバッファとして動作する。あるいは、例示的な出力バッファ５１４は、２つ以上のインスタンス及び／又は８ｋＢより少ない又は多いメモリストレージを含んでもよい。あるいは、例示的な出力バッファ５１４は、任意の他の構成（例えば、４×４＊４０９６ビットデータ行列、８×２＊４０９６ビットデータ行列等）で構成されてもよい。
【００４７】
例示的なＣＮＮアクセラレータ５００を実現する例示的な方法が図５に示されているが、図５に示されている要素、処理、及び／又はデバイスのうち１つ以上が、組み合わせられ、分割され、再配置され、省略され、消去され、かつ／あるいは任意の他の方法で実現されてもよい。さらに、図５の例示的なコントローラ５０２、例示的なＤＭＡコントローラ５０４、例示的なデータストア５０６、例示的な係数ストア５０８、例示的な接続マルチプレクサ５１０、例示的なＤＰＥアレイ５１２、例示的な出力バッファ５１４、例示的なＤＰＥ５２０、及び／又はより一般的には例示的なＣＮＮアクセラレータ５００は、ハードウェア、ソフトウェア、ファームウェア、及び／又はハードウェア、ソフトウェア、及び／又はファームウェアの任意の組み合わせにより実現されてもよい。ゆえに、例えば、例示的なコントローラ５０２、例示的なＤＭＡコントローラ５０４、例示的なデータストア５０６、例示的な係数ストア５０８、例示的な接続マルチプレクサ５１０、例示的なＤＰＥアレイ５１２、例示的な出力バッファ５１４、例示的なＤＰＥ５２０、及び／又はより一般的には例示的なＣＮＮアクセラレータ５００のうち任意のものが、１つ以上のアナログ又はデジタル回路、論理回路、プログラマブルプロセッサ、プログラマブルコントローラ、グラフィックス処理ユニット（ＧＰＵ）、デジタル信号プロセッサ（ＤＳＰ）、特定用途向け集積回路（ＡＳＩＣ）、プログラマブル論理デバイス（ＰＬＤ）、及び／又はフィールドプログラマブル論理デバイス（ＦＰＬＤ）により実現できる。純粋にソフトウェア及び／又はファームウェア実装をカバーするために本特許の装置又はシステムクレームのうち任意のものを読むとき、例示的なコントローラ５０２、例示的なＤＭＡコントローラ５０４、例示的なデータストア５０６、例示的な係数ストア５０８、例示的な接続マルチプレクサ５１０、例示的なＤＰＥアレイ５１２、例示的な出力バッファ５１４、及び／又は例示的なＤＰＥ５２０のうち少なくとも１つが、ソフトウェア及び／又はファームウェアを含むメモリ、デジタル多用途ディスク（ＤＶＤ）、コンパクトディスク（ＣＤ）、ブルーレイ（登録商標）ディスクなどの非一時的コンピュータ読取可能記憶デバイス又は記憶ディスクを含むことがここに明示的に定義される。またさらに、図５の例示的なＣＮＮアクセラレータ５００は、図５に示されたものに追加で又は代わって１つ以上の要素、処理、及び／又はデバイスを含んでもよく、かつ／あるいは図示された要素、処理、及びデバイスの任意のもの又は全てうち２つ以上を含んでもよい。本明細書で用いられるとき、フレーズ「通信において」はその変形を含め、直接通信及び／又は１つ以上の中間コンポーネントを通した間接通信を包含し、直接の物理的（例えば、有線）通信及び／又は一定の通信を必要とせず、むしろ、周期的な間隔、スケジュールされた間隔、非周期的な間隔、及び／又は１回限りのイベントにおける選択的通信をさらに含む。
【００４８】
図６は、例示的なＤＰＥ６００を示す。例えば、図６のＤＰＥ６００は、図５のＤＰＥ５２０の１つ以上に対応できる。図６の例示的なＤＰＥ６００は、畳み込み演算、プーリング演算、又は全結合演算を実行する。いくつかの例において、図６のＤＰＥ６００は、図５の例示的なＣＮＮアクセラレータ５００のモード（例えば、動作モード）に基づいて、バイアス演算、ＰＲｅＬＵ演算、ＲｅＬＵ演算（例えば、ＲｅＬＵ‐Ｘ演算）、スケール演算等の後処理演算を実行する。図６の図示された例において、ＤＰＥ６００は、例示的な乗算器（ＭＵＬＴ）６０２、例示的な累算器（ＡＣＣＵＭ）６０４、例示的なレジスタ（ＲＥＧ）６０６、及び例示的な比較器（ＣＯＭＰ）６０８を含む。
【００４９】
図６の図示された例において、ＤＰＥ６００は、２つの値の乗算演算を実行する乗算器６０２を含む。いくつかの例において、乗算器６０２は、第１の例示的なインターフェース（ＤＡＴＡ  ＩＮ）６１０から取得された第１の値と、第２の例示的なインターフェース（ＣＯＥＦＦ／ＢＩＡＳ／ＳＣＡＬＥ）６１２から取得された第２の値とを乗算する。図６の図示された例において、第１のインターフェース６１０はデータストアインターフェースである。例えば、第１のインターフェース６１０から受信されるデータは、図５の接続マルチプレクサ５１０を介したデータストア５０６からのデータに対応できる。図６の図示された例において、第２のインターフェース６１２は係数ストアインターフェースである。例えば、第２のインターフェース６１２から受信されるデータは、図５の係数ストア５０８からのバイアス値、係数値、スケール値等であり得る。
【００５０】
図６の図示された例において、乗算器６０２は、バイナリ乗算器（例えば、１つ以上のバイナリ又は論理加算器）である。例示的な乗算器６０２は、例示的なイネーブルインターフェース（ＥＮＡＢＬＥ）６１４から受信された信号に基づいて有効にされる。例えば、イネーブルインターフェース６１４から受信される信号は、図５のコントローラ５０２により生成されたバイナリ値（例えば、０に関連づけられたロー信号、又は１に関連づけられたハイ信号）に対応できる。例示的な乗算器６０２は、例示的なバイパスセレクタインターフェース６１６からの信号に基づいてバイパスされる。例えば、バイパスセレクタインターフェース６１６から受信される信号は、図５のコントローラ５０２により生成されたバイナリ値に対応できる。例えば、バイパスセレクタインターフェース６１６からの信号がハイ信号である（例えば、第１のバイパスインターフェース６１８が有効にされている）とき、第１のインターフェース６１０及び／又は第２のインターフェース６１２からの１つ以上の値が、第１の例示的なバイパスインターフェース６１８を介して通過できる。例えば、コントローラ５０２は、ＤＰＥ６００の１つ以上の動作を実行するとき、速度増加及び／又は電力低減のために信号をバイパスセレクタインターフェース６１６に送信することができる。
【００５１】
図６の図示された例において、ＤＰＥ６００は、加算又は累算演算を実行する累算器６０４を含む。図６の例示的な累算器６０４は、符号付き固定小数点（fixed-point）値を保持する２４ビット累算器である。いくつかの例において、ＦＰフォーマットにおける整数ビット（integer  bits）及び小数ビット（fractional  bits）の数量は累算の間に動的に調整されて、レンジ対精度の適切なバランスが達成されることを確保する。例えば、累算器６０４は、累算器６０４のレンジ（例えば、累算器６０４に累算及び／又はその他の方法で記憶できるデータのサイズ）又は精度のうち少なくとも１つを修正するように調整できる。例えば、累算器６０４は、最初、１２整数ビットを取得し、処理し、かつ／あるいはその他の方法で取り扱うように構成できる。例示的な累算器６０４は、累算器６０４への入力が、利用可能な整数ビット数より大きいビット数を必要とするとき、１２整数ビットを調整することができる。このような例において、累算器６０４は、小数ビットを犠牲にして１２整数ビットから入力にマッチする数量の整数ビットに増加する（例えば、レンジは増加するが、精度は低減する）。
【００５２】
いくつかの例において、累算器６０４は、累算器加算の結果がオーバーフローするとき、累算器６０４が処理できる整数ビット数量を調整し、かつ／あるいはその他の方法で修正する。例えば、累算器６０４は、整数ビット数を１だけ増加させることができ、ゆえに、小数ビット数は１だけ低減される（例えば、レンジは増加するが、精度は低減する）。いくつかの例において、累算器６０４は、累算器加算の結果が整数ビットのフルレンジを使用しないとき、累算器６０４が処理できる整数ビット数量を調整し、かつ／あるいはその他の方法で修正する。例えば、累算器６０４は、最小１２ビットを条件として整数ビット数を１だけ減少させることができ、ゆえに、小数ビット数は１だけ増加する（例えば、レンジは減少するが、精度は増加する）。あるいは、例示的な累算器６０４は、整数ビット数を２以上増加（例えば、反復的に増加）又は減少（例えば、反復的に減少）させることができる。
【００５３】
例示的な累算器６０４のレンジ及び／又は精度が調整される例において、累算器６０４は、近似値、推定値等を生成することができる。例えば、累算器６０４が精度バランス動作を実行することに応答して、累算器６０４が累算器６０４の精度を増加させる又は減少させるのいずれかをして（例えば、ビット（例えば、小数ビット）数を増加させる、ビット数を減少させる等）累算器６０４のレンジを調整又は修正する場合、累算器６０４の出力は、累算器６０４が修正されなかった場合の出力と比較して近似値又は推定値を結果としてもたらす可能性がある。しかしながら、累算器６０４により生成される近似値、推定値等は、累算器６０４が修正されていない場合の出力と実質的に同等であり、かつ／あるいはその他の点でそれに相応する。例えば、図６のＤＰＥ６００の１つ以上の動作、処理、出力等の実行及び／又は生成は、累算器６０４の精度、レンジ等が調整されることに基づいて影響されない。このような例において、動作又は出力のいかなる変化も実質的に無視できる。
【００５４】
図６の図示された例において、乗算器６０２は、２つの値の乗算に基づいて累算器６０４への出力を生成する。例示的な累算器６０４は、第２の例示的なイネーブルインターフェース（ＥＮＡＢＬＥ）６２０からの信号が累算器６０４が有効にされていることを示すとき、乗算器６０２からの出力を取得し、該出力と前に算出された和との和を算出する。例えば、第２のイネーブルインターフェース６２０から受信される信号は、図５のコントローラ５０２により生成されたバイナリ値に対応できる。例えば、累算器６０４は、ハイ信号が第２のイネーブルインターフェース６２０から受信されたとき、有効にされる。
【００５５】
いくつかの例において、累算器６０４は、バイパスセレクタインターフェース６１６からの信号に基づいてバイパスされる。例えば、乗算器６０２からの値は、ハイ信号がバイパスセレクタインターフェース６１６から受信された（例えば、第２のバイパスインターフェース６２２が有効にされている）とき、第２の例示的なバイパスインターフェース（ＢＹＰＡＳＳ）６２２を介して累算器６０４をバイパスすることができる。いくつかの例において、累算器６０４は、例示的なクリア累算器インターフェース（ＣＬＲ）６２４からの信号に基づいてクリアされ、かつ／あるいはその他の方法で空にされる。例えば、クリア累算器インターフェース６２４から受信される信号は、図５のコントローラ５０２により生成されたバイナリ値に対応できる。
【００５６】
図６の図示された例において、累算器６０４の出力は、レジスタ６０６又は例示的なデータ出力インターフェース６２６のうち少なくとも１つに送信される。図６の例示的なデータ出力インターフェース６２６は、出力バッファインターフェースである。例えば、データ出力インターフェース６２６は、図５の出力バッファ５１４にデータを送信することができる。図６の例示的なレジスタ６０６は、例示的なデータ出力インターフェース６２６に書き込まれる前に、結果（例えば、個々の結果）を保持するために使用される中間記憶要素である。例えば、ＤＰＥ６００は、レジスタ６０６を使用して平均プーリング演算の値を記憶することができる。例示的なレジスタ６０６は、例示的なクリアレジスタインターフェース（ＳＴＯＲＥ＿ＣＬＲ）６２８からの信号に基づいてクリアされ、かつ／あるいはその他の方法で空にされる。例えば、クリアレジスタインターフェース６２８から受信される信号は、図５のコントローラ５０２により生成されたバイナリ値に対応できる。例えば、レジスタ６０６に記憶された値は、ハイ信号がクリアレジスタインターフェース６２８から受信されたとき、削除できる。
【００５７】
図６の図示された例において、ＤＰＥ６００は、畳み込みモードに対して構成される。動作において、例示的な乗算器６０２は、第１のインターフェース６１０からのデータ入力値（例えば、ＦＰ１６で表される活性化値、画素値等）と第２のインターフェース６１２からの係数値とを乗算して、畳み込み出力値（例えば、活性化、活性化値、活性化出力等）を生成する。例示的な乗算器６０２は、畳み込み出力値を例示的な累算器６０４に送信する。畳み込み出力値の受信に応答して、例示的な累算器６０４は、畳み込み出力値をデータ出力インターフェース６２６に送信し、データ出力インターフェース６２６は同様に、図５の出力バッファ５１４に送信する。
【００５８】
いくつかの例において、畳み込みモードにおけるＤＰＥ６００は、任意のプーリングに対して構成される。例えば、ＤＰＥ６００は、最大プーリングインターフェース（ＭＰ＿ＰＯＯＬ）６２７からハイ信号を受信することに基づいて、畳み込みモードにおける最大プーリング演算に対して構成できる。ハイ信号の受信に応答して、ＤＰＥ６００は、例示的なレジスタ６０６に記憶されたプール出力値（例えば、図２のプールエリア２１２の最大値ｆ）をデータ出力インターフェース６２６に送信する前に、プールエリア全体が処理されるまで待機する。
【００５９】
例示的な最大プーリング演算において、例示的な乗算器６０２は、第１のインターフェース６１０からの第１のデータ入力値と、第２のインターフェース６１２からの第１の係数値とを乗算して、第１の畳み込み出力値を生成する。例えば、第１のデータ入力値は、図２の入力データ２０２からのＦＰ１６における第１の画素値、第１の活性化値等であり得、第１の係数値は、図２のフィルタ２０４のうち第１のフィルタのＦＰ１６における第１の係数値であり得る。例えば、第１の畳み込み出力値は、図２のプールエリア２１２の出力位置２０８のうち第１の出力位置であり得る。例示的な乗算器６０２は、第１の畳み込み出力値を例示的な累算器６０４に送信し、累算器６０４は、第１の畳み込み出力値を例示的なレジスタ６０６に送信する。例示的なレジスタ６０６は、第１の畳み込み値を例示的な比較器６０８の第１の例示的な入力６２９に送信する。
【００６０】
記憶に応答して、例示的な乗算器６０２は、第１のインターフェース６１０からの第２のデータ入力値と第２のインターフェース６１２からの第２の係数値とを乗算して、第２の畳み込み出力値を生成する。例えば、第２のデータ入力値は、図２の入力データ２０２からの第２の画素値、第２の活性化値等であり得、第２の係数値は、図２のフィルタ２０４のうち第１のフィルタの第２の係数であり得る。例示的な乗算器６０２は、第２の畳み込み出力値を例示的な累算器６０４に送信する。例示的な累算器６０４は、例示的なプールインターフェース（ＰＯＯＬ）６３０からハイ信号を受信したとき、第２の畳み込み出力値を比較器６０８の第２の例示的な入力６３１に送信する。例えば、プールインターフェース６３０から受信される信号は、図５のコントローラ５０２により生成されたバイナリ値に対応できる。例示的なプールインターフェース６３０は、プーリングが有効にされている（例えば、平均プーリング又は最大プーリングが有効にされている）ときにハイ信号を生成し、プーリングが有効にされていないときにロー信号を生成する。例えば、累算器６０４は、ハイ信号がプールインターフェース６３０から受信されたとき、第２の畳み込み出力値を比較器６０８の第２の入力６３１に送信する。例えば、第２の畳み込み出力値は、図２のプールエリア２１２の出力位置２０８のうち第２の出力位置であり得る。
【００６１】
図６の図示された例において、比較器６０８は、ＤＰＥ６００が最大プーリング演算を行っているとき、第１の畳み込み出力値及び第２の畳み込み出力値の最大値を決定する。第１の畳み込み出力値（例えば、レジスタ６０６内の記憶された値）が第２の畳み込み出力値より小さいと決定したことに応答して、例示的な比較器６０８は、例示的な比較器出力６３２に対してハイ信号（例えば、１のバイナリ値に対応する信号）を生成する。例示的な比較器出力６３２に対するハイ信号は、例示的なフリップフロップ６３４が１の例示的な論理出力（Ｙ＿ＦＦ）６３６（例えば、ハイ信号に対応するバイナリ値）を生成することを可能にする。例えば、論理出力６３６は、バイナリ値（例えば、０又は１の値）に対応する。例えば、論理出力６３６が１であるとき、この条件はＹ＿ＦＦとして表され、論理出力６３６が０である、かつ／あるいはその他の方法でロー信号に対応するとき、〜Ｙ＿ＦＦとして表される。
【００６２】
例示的な論理出力６３６が１である、かつ／あるいはその他の方法で有効にされていることに応答して、例示的なコントローラ５０２は、第２の畳み込み出力値をプール出力値としてレジスタ６０６に記憶する。例えば、コントローラ５０２は、例示的なストアインターフェース（ＳＴＯＲＥ｜｜Ｙ＿ＦＦ＆ＰＯＯＬ＆〜ＰＲＥＬＵ）６４４への信号を生成する。例示的なストアインターフェース６４４からの信号は、バイナリ値に対応する。例示的なストアインターフェース６４４からのロー信号の受信に応答して、例示的なコントローラ５０２は、例示的なレジスタ６０６に値を記憶するように指示しない。例示的なストアインターフェース６４４からのハイ信号の受信に応答して、例示的なコントローラ５０２は、レジスタ６０６に値を記憶するように指示する。例えば、ストアインターフェース６４４からの信号は、論理出力６３６がハイ信号であり、プールインターフェース６３０がハイ信号であり、例示的なＰＲｅＬＵインターフェース（ＰＲＥＬＵ）６３８がロー信号である（例えば、ＤＰＥ６００がＰＲｅＬＵ演算を実行していない）とき、ハイ信号である。他の例において、ストアインターフェース６４４は、論理出力６３６がロー信号である、プールインターフェース６３０がロー信号である、あるいはＰＲｅＬＵインターフェース６３８がハイ信号である、のうち少なくとも１つのとき、ロー信号を出力する。
【００６３】
第１の畳み込み出力値（例えば、例示的なレジスタ６０６内の記憶された値）が第２の畳み込み出力値より大きいと決定したことに応答して、比較器６０８は、例示的な比較器出力６３２に対してロー信号を生成し、これは、例示的なフリップフロップ６３４に、例示的な論理出力６３６に対応するロー信号を生成するように指示する。例示的な論理出力６３６がロー信号に対応し、かつ／あるいはその他の方法で無効にされていることに応答して、例示的なコントローラ５０２は、第２の畳み込み出力値をレジスタ６０６に記憶しない。
【００６４】
例示的なＤＰＥ６００は、プールエリア全体（例えば、図２のプールエリア２１２）が処理されるまで、データ入力値を処理する（例えば、反復的に処理する）。プールエリア全体が処理されたとき、例示的なレジスタ６０６は、例示的な最大プーリングインターフェース６２７が有効にされているとき、プール出力値（例えば、図２のプールエリア２１２の最大値）を例示的なデータ出力インターフェース６２６に出力する。
【００６５】
他の例において、ＤＰＥ６００は、畳み込みモードで動作しているとき、平均プーリング演算に対して構成できる。例えば、乗算器６０２は、図２のプールエリア２１２の出力位置２０８に対応する第１の出力値、第２の出力値、第３の出力値、及び第４の出力値を算出することができる。例示的な累算器６０４は、第１乃至第４の出力値の和を算出することができる。例えば、乗算器６０２は、第１の出力値を算出することができ、累算器６０４は、これをゼロ値に加算して第１の出力値に基づく第１の和を生成する。このような例において、乗算器６０２は、第２の出力値を算出することができ、累算器６０４は、これを第１の和に加算して第１及び第２の出力値に等しい第２の和を生成し、総計が算出され、総計が第１乃至第４の出力値の和に等しくなるまで同様である。
【００６６】
総計の算出に応答して、例示的な累算器６０４は、総計を例示的なレジスタ６０６に記憶し、レジスタ６０６は同様に、第３の例示的なインターフェース（！ＰＲＥＬＵ｜｜ＡＶ  ＰＯＯＬ｜｜ＢＩＡＳ＿ＳＣＡＬＥ＿ＥＮ）６３７からの信号に基づいて総計を例示的な乗算器６０２に送信する。例えば、第３のインターフェース６３７の信号は、図５のコントローラ５０２により生成されたバイナリ値に対応できる。例えば、第３のインターフェース６３７の信号は、ＤＰＥ６００がＰＲｅＬＵ演算を実行していない（例えば、ＰＲＥＬＵ！＝１）、ＤＰＥ６００がバイアス演算又はスケール演算を実行している（例えば、ＢＩＡＳ＿ＳＣＡＬＥ＿ＥＮ＝＝１）、あるいはＤＰＥ６００が平均プーリング演算を実行している（例えば、ＡＶ＿ＰＯＯＬ＝＝１）とき、ハイ信号である。例えば、第３のインターフェース６３７は、ＤＰＥ６００が平均プーリング演算を実行しているとき、式！ＰＲＥＬＵ｜｜ＡＶ  ＰＯＯＬ｜｜ＢＩＡＳ＿ＳＣＡＬＥ＿ＥＮに対してハイ信号を出力する。
【００６７】
例示的なレジスタ６０６からの総計の受信に応答して、例示的な乗算器６０２は、総計と例示的なプールサイズ値（１／Ａｖ；Ｘ）６４０とを乗算することにより平均プール値を算出し、平均プール値を例示的な累算器６０４に出力し、累算器６０４は同様に、平均プール値を例示的なデータ出力インターフェース６２６に出力する。例示的なプールサイズ値６４０は、プールエリアのサイズに対応する。例えば、プールサイズ値６４０は、１／（プール幅×プール高さ）の商とすることができる。例えば、図２のプールエリア２１２に関連づけられたプールサイズ値６４０は、１／４（例えば、１／４＝１／（２×２））である。図６の図示された例において、乗算器６０２は、例示的な平均プーリングインターフェース（ＡＶ  ＰＯＯＬ）６４２からの信号に基づいてプールサイズ値６４０を取り出す。例えば、平均プーリングインターフェース６４２からの信号は、図５のコントローラ５０２により生成されたバイナリ値に対応できる。例えば、平均プーリングインターフェース６４２は、ＤＰＥ６００が平均プーリング演算を実行しているとき、ハイ信号を出力する。
【００６８】
いくつかの例において、ＤＰＥ６００は、プーリング演算に対して構成される。例えば、ＤＰＥ６００は、図２のプールエリア２１２の出力位置２０８に対応する第１の入力値、第２の入力値、第３の入力値、及び第４の入力値を取得することができる。このような例において、ＤＰＥ６００は、上述のように、第１乃至第４の入力値の平均値又は最大値を決定することができる。
【００６９】
さらに他の例において、ＤＰＥ６００は、バイアス演算、スケール演算、ＰＲｅＬＵ演算、又はＲｅＬＵ演算（例えば、ＲｅＬＵ‐Ｘ演算）のうち少なくとも１つを含む１つ以上の後処理演算に対して構成できる。例えば、ＤＰＥ６００は、層ごとベースの任意の層の出力におけるバイアス演算、スケール演算、ＰＲｅＬＵ演算、又はＲｅＬＵ‐Ｘ演算に対して構成できる。例えば、累算器６０４は、例示的なバイアススケールイネーブルインターフェース（ＢＩＡＳ＿ＳＣＡＬＥ＿ＥＮ）６４６からの信号に基づいて、第２のインターフェース６１２からバイアス値又はスケール値を取得することができる。例えば、バイアススケールイネーブルインターフェース６４６からの信号は、バイナリ値に対応する。例えば、累算器６０４は、バイアススケールイネーブルインターフェース６４６がハイ信号を出力するとき、第２のインターフェース６１２からバイアス値又はスケール値を取得することができる。
【００７０】
例示的なバイアス演算において、例示的な累算器６０４は、第２のインターフェース６１２から取り出されたバイアス値を、例示的なレジスタ６０６に記憶された出力値（例えば、畳み込み出力値、平均プール値、最大プール値、プール出力値等）に加算する。例示的なスケール演算において、例示的な乗算器６０２は、バイアススケールイネーブルインターフェース６４６がハイ値を出力したとき、第２のインターフェース６１２から取り出されたスケール値で出力値に乗算し、かつ／あるいはその他の方法でスケーリングする。
【００７１】
いくつかの例において、ＤＰＥ６００は、ＤＰＥ６００が畳み込み演算、プーリング演算等を実行した後、ＰＲｅＬＵ演算に対して構成される。このような例において、図５のコントローラ５０２は、ＰＲｅＬＵインターフェース６３８に対してハイ信号を生成する。例えば、ＰＲｅＬＵインターフェース６３８から受信された信号は、図５のコントローラ５０２により生成されたバイナリ値に対応できる。例えば、コントローラ５０２がＰＲｅＬＵインターフェース６３８に対してハイ信号を生成したことに応答して、比較器６０８は、畳み込み演算又はプーリング演算の出力に対応する第１の値と、例示的なＰＲｅＬＵベースパラメータ（ｔ０）６４８に対応する第２の値とを比較する。例えば、第１の値は、図２の出力位置２０８のうち第１の出力位置の値、図２のプールエリア２１２の最大値等であり得る。図２の図示された例において、ＰＲｅＬＵベースパラメータ６４８は、ＦＰ１６フォーマットに変換された１０ビット符号付き整数である。あるいは、例示的なＰＲｅＬＵベースパラメータ６４８は、任意の他のビット数量及び／又は任意の他のフォーマットであってもよい。
【００７２】
第１の値（例えば、レジスタ６０６内の記憶された値）が第２の値（例えば、例示的なＰＲｅＬＵベースパラメータ（ｔ０）６４８）より小さいことに応答して、例示的な比較器６０８はロー信号を出力し、ゆえに、例示的な論理出力６３６にロー信号に対応させる。例示的な論理出力６３６がロー信号に対応することに応答して、例示的な乗算器６０２は、第１の例示的なＰＲｅＬＵ入力パラメータ（ａ０）６５０と例示的なレジスタ６０６に記憶された出力値との乗算に基づいて第１のＰＲｅＬＵ出力値を算出する。例えば、例示的なＰＲｅＬＵスイッチインターフェース（ＰＲＥＬＵ＆〜Ｙ＿ＦＦ）６５２は、ＰＲｅＬＵインターフェース６３８がハイ信号を出力し（例えば、ＤＰＥ６００がＰＲｅＬＵ演算を実行している）、論理出力６３６がロー信号に対応するとき、ハイ信号を出力する。
【００７３】
他の例において、第１の値が第２の値より大きいとき、比較器６０８はハイ信号を出力し、ゆえに、論理出力６３６にハイ信号に対応させる。例示的な論理出力６３６がハイ信号に対応することに応答して、例示的な乗算器６０２は、第２の例示的なＰＲｅＬＵ入力パラメータ（ａ１）６５４と例示的なレジスタ６０６に記憶された出力値との乗算に基づいて第２のＰＲｅＬＵ出力値を算出する。例えば、ＰＲｅＬＵスイッチインターフェース６５２は、ＰＲｅＬＵインターフェース６３８がハイ信号を出力し、論理出力６３６がハイ信号に対応するとき、ロー信号を生成する。ＰＲｅＬＵ演算の一般的な形式は、以下で式（１）及び式（２）で説明される。
ｙ＝ａ０＊ｘ    ｘ＜ｔ０の場合
式（１）
ｙ＝ａ１＊ｘ    ｘ＞ｔ０の場合
式（２）
上記式（１）〜（２）の示された例において、ｙは、乗算器６０２により算出されるＰＲｅＬＵ出力値を参照し、ｘは、レジスタ６０６に記憶された出力値を参照し、ａ０は、第１のＰＲｅＬＵ入力パラメータ６５０を参照し、ａ１は、第２のＰＲｅＬＵ入力パラメータ６５４を参照し、ｔ０は、ＰＲｅＬＵベースパラメータ６４８を参照する。
【００７４】
いくつかの例において、ＤＰＥ６００は、ＤＰＥ６００が畳み込み演算、プーリング演算等を実行した後、ＲｅＬＵ演算（例えば、ＲｅＬＵ‐Ｘ演算）に対して構成される。このような例において、図５のコントローラ５０２は、例示的なＲｅＬＵ‐Ｘインターフェース（ＲＥＬＵ＿Ｘ）６５６に対してハイ信号を生成する。例えば、ＲｅＬＵ‐Ｘインターフェース６５６から受信される信号は、バイナリ値に対応できる。例えば、コントローラ５０２がＲｅＬＵ‐Ｘインターフェース６５６に対してハイ信号を生成したことに応答して、比較器６０８は、畳み込み演算又はプーリング演算の出力に対応する第１の値と、例示的なＲｅＬＵ‐Ｘパラメータ（１／ＡＶ；Ｘ）６５８に対応する第２の値とを比較する。例えば、第１の値は、図２の出力位置２０８のうち第１の出力位置の値、図２のプールエリア２１２の最大値等であり得る。図２の図示された例において、ＲｅＬＵ‐Ｘパラメータ６５８は、ＦＰ１６値である。あるいは、例示的なＲｅＬＵ‐Ｘパラメータ６５８は、任意の他のビット数量及び／又は任意の他のフォーマットであってもよい。
【００７５】
図６の図示された例において、ＲｅＬＵ‐Ｘパラメータ６５８は、プールサイズ値（１／Ａｖ；Ｘ）６４０とレジスタを共有する。いくつかの例において、ＲｅＬＵ‐Ｘパラメータ６５８は、ゼロの値を有する。このような例において、ＲｅＬＵ‐Ｘ演算は、以下で式（３）で説明される関数を実行する。
ｙ＝ｍｉｎ（ｚ，（ｍａｘ  （０，ｘ））
式（３）
上記式（３）の例において、ｙは、ＲｅＬＵ‐Ｘ出力値を参照し、ｘは、レジスタ６０６に記憶された出力値を参照し、ｚは、ＲｅＬＵ‐Ｘパラメータ６５８を参照する。例えば、ＤＰＥ６００がＲｅＬＵ‐Ｘ演算に対して構成されるとき、コントローラ５０２は、ＲｅＬＵ‐Ｘパラメータ６５８をゼロに設定し、比較器６０８は、レジスタ６０６に記憶された出力値がゼロより大きいかどうかを決定する。例示的な比較器６０８が出力値がゼロより大きいと決定したとき、例示的なコントローラ５０２は、ＲｅＬＵ‐Ｘパラメータ６５８をＲｅＬＵ‐Ｘ値に設定し、比較器６０８は、レジスタ６０６に記憶された出力値がＲｅＬＵ‐Ｘ値より大きいかどうかを決定する。例示的な比較器６０８が、レジスタ６０６に記憶された出力値がＲｅＬＵ‐Ｘ値より大きいと決定した場合、出力値はデータ出力インターフェース６２６に送信され、そうでない場合、ＲｅＬＵ‐Ｘ値が例示的なＲｅＬＵ‐Ｘ値インターフェース（〜Ｙ＿ＦＦ＆ＲＥＬＵ＿Ｘ）６６０を介してデータ出力インターフェース６２６に送信される。
【００７６】
図６の図示された例において、乗算器６０２、レジスタ６０６、及び比較器６０８はＦＰ１６ベースである。例えば、乗算器６０２、レジスタ６０６、及び比較器６０８は、ＦＰ１６フォーマットの値を処理し、記憶し、かつ／あるいはその他の方法で取り扱うことができる。図６の図示された例において、累算器６０４は、固定２４ビットベースのフォーマットである。例えば、累算器６０４は、固定２４ビットベースのフォーマットの値を処理し、記憶し、かつ／あるいはその他の方法で取り扱うことができる。あるいは、例示的な乗算器６０２、例示的な累算器６０４、例示的なレジスタ６０６、及び／又は例示的な比較器６０８のうちの１つ以上が、任意の他のフォーマットであってもよい。
【００７７】
いくつかの例において、累算器６０４は、例示的な隣接するＤＰＥインターフェース６６２を介して隣接ＤＰＥからデータを取得する。例えば、累算器６０４は、図６のＤＰＥ６００に結合された図５のＤＰＥ５２０の１つからデータを取得することができる。例示的な累算器６０４は、複数のストリームの１つ以上の和が算出されるべき（例えば、畳み込み演算が複数の入力ストリームに分割される）例において、隣接ＤＰＥから取得されたデータを処理する。例えば、ＤＰＥ６００は、２＊１２８畳み込み配置に対して構成でき、図１の入力チャネル１１０、１１２の２つのストリームが、単一の位置について順次合計される。このような例において、ＤＰＥ６００は、コントローラ５０２が隣接するデータインターフェース（ＡＣＣＵＭ）６６４に対して例示的なハイ信号を生成したとき、別のＤＰＥ６００から入力ストリームを取得することができる。例えば、隣接データインターフェース６６４がハイ信号を受信したことに応答して、乗算器６０２は、隣接ＤＰＥインターフェース６６２を介して隣接ＤＰＥからデータを受信する。このような例において、コントローラ５０２は、ハイ信号をバイパスセレクタインターフェース６１６に送信して、第１のバイパスインターフェース６１８を有効にする。第１の例示的なバイパスインターフェース６１８が有効にされていることに応答して、例示的な乗算器６０２は、隣接ＤＰＥから受信したデータを例示的な累算器６０４に送信し、累算器６０４は、ＤＰＥ６００により算出された第１の和と隣接ＤＰＥにより算出された第２の和とに基づいて総和を算出する。
【００７８】
図７は、図５の例示的なＣＮＮアクセラレータ５００の動作モードに基づいて第２の例示的な係数ストア７０２及び第３の例示的な係数ストア７０４に編成された第１の例示的な係数ストア７００の例示である。例示的な係数ストア７００、７０２、７０４は、図５の例示的な係数ストア５０８に対応できる。例えば、係数ストア７００、７０２、７０４は、図５のコントローラ５０２からアドレス指定及び／又は制御できる。
【００７９】
図７の図示された例において、係数ストア７００、７０２、７０４は、別個の読み出し及び書き込み入力／出力（Ｉ／Ｏ）ポート又はチャネルを含む。例示的な係数ストア７００、７０２、７０４の各々は、各チャネルが１６ビットである２５６個のチャネル（ＣＨ０‐ＣＨ２５５）を有する。例示的な係数ストア７００、７０２、７０４の各々は、２５６＊４０９６ビットの単一インスタンスとして構成されて、総ストレージで１２８ｋＢを生じる。あるいは、例示的な係数ストア７００、７０２、７０４は、任意の他のサイズ及び／又は任意の他の構成であってもよい。
【００８０】
図７の図示された例において、第１の係数ストア７００は、２５６個のＦＰ１６出力の２５６個のチャネルを有して２５６＊２５６ワードの係数ストレージを生じ、ＦＰ１６出力の各々は、図５のＤＰＥ５２０の１つに接続される。図７の図示された例において、第１の係数ストア７００は、ＣＮＮアクセラレータ５００が１＊２５６モードで動作しているとき、図５のコントローラ５０２により第２の係数ストア７０２に構成される。例えば、図１の入力チャネル１１０、１１２の各々は、１＊２５６モードで動作するとき、図１の出力チャネル１２６の各々について、単一の位置（例えば、出力チャネル１２２）について順次合計される。例えば、１＊２５６モードは、ＤＰＥ５２０のうち１つが１つの入力チャネルを処理して２５６個の出力チャネルにおける出力位置を実質的に並列に生じることに対応する。
【００８１】
図７の図示された例において、第１の係数ストア７００は、ＣＮＮアクセラレータ５００が１＊２５６モードで動作しているとき、図５のコントローラ５０２により第２の係数ストア７０２に構成される。図７の第２の例示的な係数ストア７０２は、単一の係数ブロックとして構成され、単一のブロックは、２５６列（例えば、ＣＨ０〜ＣＨ２５５）に分割され、２５６列の各々は、図１の入力チャネル１１０、１１２の全てに対する係数のセットを表す。例えば、２５６列の各々は、図１のフィルタ１１４、１１６の１つに対応できる。
【００８２】
図７の図示された例において、第１の係数ストア７００は、ＣＮＮアクセラレータ５００が２＊１２８モードで動作しているとき、図５のコントローラ５０２により第３の係数ストア７０４に構成される。例えば、図１の入力チャネル１１０、１１２の２つのストリームは、２＊１２８モードで動作するとき、図１の出力チャネル１２６の各々について、単一の位置（例えば、出力チャネル１２２）について順次合計される。このような例において、２＊１２８モードの結果は２つのストリームの合計である。例えば、２＊１２８モードは、ＤＰＥ５２０のうち２つが１つの入力チャネルを処理して１２８個の出力チャネルにおける出力位置を実質的に並列に生じることに対応する。
【００８３】
図７の図示された例において、第３の係数ストア７０４は、２つの例示的な係数ブロック７０６、７０８に構成され、ブロック７０６、７０８の各々は、図５のデータストア５０６の各データＲＡＭブロックに対応する。図７の図示された例において、ブロック７０６、７０８の各々は、１２８列を含む。例えば、第１のブロック７０６は、６４個のチャネルの第１のセット（例えば、ＣＨ０〜ＣＨ６３）を含み、第２のブロック７０８は、６４個のチャネルの第２のセット（例えば、ＣＨ６４〜ＣＨ１２７）を含む。図７の図示された例において、ブロック７０６、７０８のうち１つにおける列は、図１の入力チャネル１１０、１１２の半分に対する係数のセットを表す。図７の図示された例において、アドレスあたり１２８＊ＦＰ１６ワードの２つのブロック７０６、７０８が存在し、ゆえに、ブロック７０６、７０８のうち１つが、データストア５０６からのデータ入力の各ブロックについて、図５のＤＰＥ５２０の２つのセットのうち１つに適用される。
【００８４】
あるいは、第１の例示的な係数ストア７００は、例示的なＣＮＮアクセラレータ５００が４＊６４モードで動作しているとき、図５の例示的なコントローラ５０２により第４の係数ストア（図示せず）に構成されてもよい。例えば、第４の係数ストアは、４つの係数ブロックとして構成でき、４つのブロックの各々が、図５のデータストア５０６の各データＲＡＭブロックに対応する。例えば、第４の係数ストアは、アドレスあたり６４＊ＦＰ１６ワードの４つのブロックを有することができ、ゆえに、４つのブロックのうち１つが、データストア５０６からのデータ入力の各ブロックについて、図５のＤＰＥ５２０の４つのセットのうち１つに適用される。
【００８５】
あるいは、第１の例示的な係数ストア７００は、例示的なＣＮＮアクセラレータ５００が８＊３２モードで動作しているとき、図５の例示的なコントローラ５０２により第５の係数ストア（図示せず）に構成されてもよい。例えば、第５の係数ストアは、８つの係数ブロックとして構成でき、８つのブロックの各々は、図５のデータストア５０６の各データＲＡＭブロックに対応する。例えば、第５の係数ストアは、アドレスあたり３２＊ＦＰ１６ワードの８つのブロックを有することができ、ゆえに、８つのブロックのうち１つが、データストア５０６からのデータ入力の各ブロックについて、図５のＤＰＥ５２０の８つのセットのうち１つに適用される。
【００８６】
あるいは、第１の例示的な係数ストア７００は、例示的なＣＮＮアクセラレータ５００が１６＊１６モードで動作しているとき、図５の例示のコントローラ５０２により第６の係数ストア（図示せず）に構成されてもよい。例えば、第６の係数ストアは、１６個の係数ブロックとして構成でき、１６個のブロックの各々は、図５のデータストア５０６の各データＲＡＭブロックに対応する。例えば、第６の係数ストアは、アドレスあたり１６×ＦＰ１６ワードの１６個のブロックを有することができ、ゆえに、１６個のブロックのうち１つが、データストア５０６からのデータ入力の各ブロックについて、図５のＤＰＥ５２０の１６個のセットのうち１つに適用される。
【００８７】
例えば、図１の入力チャネル１１０、１１２の４つのストリームは、４＊６４モードで動作するとき、図１の出力チャネル１２６の各々について、単一の位置（例えば、出力チャネル１２２）について順次合計される。このような例において、４＊６４モードの結果は４つのストリームの合計である。例えば、４＊６４モードは、ＤＰＥ５２０のうち４つが１つの入力チャネルを処理して６４個の出力チャネルの出力を実質的に並列に生じることに対応する。
【００８８】
図８は、図５の例示的な係数ストア５０８の例示的なアドレス指定モデルを表す例示的な表８００である。図８の例示的な表８００において、例示的なアドレスシーケンス列（ＡＤＤＲＥＳＳ  ＳＥＱＵＥＮＣＥ）８０２は、例示的な係数ストア５０８のためのアドレス指定スキームを記述する。例示的なアドレスシーケンス列８０２において、用語ＣＨ  ＳＴＲ  ＩＮは、入力チャネルストライド値を参照し、用語ＣＨ  ＳＴＲ  ＯＵＴは、出力チャネルストライド値を参照する。図８の例示的な表８００において、例示的な入力チャネル列（ＩＮＰＵＴ  ＣＨＡＮＮＥＬ）８０４は、畳み込み演算のための入力チャネル（例えば、図１の入力チャネル１１０、１１２）を表す。
【００８９】
図８の例示的な表８００において、例示的なデータ列（ＤＡＴＡ［１２７：０］）８０６は、一度に８つのチャネルの各々について単一の係数１６ビットワードを記憶する１２８ビットワードを表し、係数モード（例えば、１×２５６モード、２×１２８モード等）にかかわらず１６ビットチャネルを効果的に占有する。例えば、ＦＰ１６が１６ビットチャネルをフルに占有する、２つのｕｆ８係数が１６ビットチャネルを占有する、等である。例示的な係数列（ＣＯＥＦＦＩＣＩＥＮＴ）８０８は、フィルタのインデックス（例えば、図１の第１のフィルタ１１４の係数）を表す。
【００９０】
図９は、非ＦＰ１６フォーマットに基づく図５の例示的な係数ストア５０８に対する例示的なアドレス指定モデルを表す例示的な表９００である。図９の例示的な表９００では、１６ビットが各チャネルに割り振られる。例示的なデータ列（ＤＡＴＡ［１２７：０］）９０２における１６ビットチャネル（例えば、ＣＨ０、ＣＨ１、ＣＨ７等）の各々の内部で、データは全ての入力チャネルについてパックされる（packed）。非ＦＰ１６モードでは、入力チャネルストライド（ＣＨ  ＳＴＲ  ＩＮ）は直接の意味を有さないがストライドとして算出され、それにより、ＲＡＭあたりチャネル数量（ＣＨ＿ＰＥＲ＿ＲＡＭ）で乗算されると、ストライドは次のＲＡＭブロックに正しく到達する（例えば、ＣＨ  ＳＴＲ  ＩＮは非１２８ビット境界に整合され（aligned）得る）。３×３畳み込み（例えば、９つの係数）に対する４ビットパレット化画像の例を以下に説明する。
【００９１】
４チャネル、８ビット係数を有する、例示的な３×３フィルタ：Ｃｏｅｆｆ  Ｓｔｒｉｄｅ（Ｉｎ）＝４．５行＝０ｘ００４８ｈ。
【００９２】
４チャネル、４ビット係数を有する、例示的な２×２フィルタ：Ｃｏｅｆｆ  Ｓｔｒｉｄｅ（Ｉｎ）＝２．２５行＝０ｘ００２４ｈ。
【００９３】
図１０は、本明細書に開示される例を実現する例示的な畳み込み演算１０００を示す。例えば、畳み込み演算１０００は、図５のＣＮＮアクセラレータ５００により実行できる。図１０の図示された例において、畳み込み演算１０００の畳み込みモードは１＊２５６モードであり、例示的な入力チャネル１００２の各入力チャネルは、複数の出力チャネルの例示的な出力チャネル１００６について、単一の例示的な出力位置１００４について順次合計される。
【００９４】
図１０の図示された例において、入力チャネル１００２は、幅２８画素（Ｘ＝２８）及び高さ２８画素（Ｙ＝２８）並びに深さ５０チャネル（Ｃ＝５０）の大きさを有する。例示的な入力チャネル１００２の例示的な入力位置１００８は、幅５画素（Ｆｗ＝５）、高さ５画素（Ｆｈ＝５）、及び深さ５０チャネル（Ｃ＝５０）の大きさを有する例示的なフィルタ１０１０を使用して処理される。あるいは、例示的な入力チャネル１００２は、ＣＮＮの二次畳み込み層（例えば、最初の畳み込み層の後の畳み込み層）に対応してもよい。例えば、入力チャネル１００２は、画素値と比較した活性化を含んでもよい。
【００９５】
図１０の図示された例において、出力位置１００４は、入力チャネル１００２の入力位置１００８とフィルタ１０１０との全ての畳み込みの全ての積の和を算出することにより決定される。例示的な出力チャネル１００６のさらなる出力位置が、入力位置の全体が処理されるまで例示的な入力チャネル１００２の残りの入力位置を畳み込むことにより処理される。例示的な入力チャネル１００２の入力位置の全体の処理に応答して、例示的なＣＮＮアクセラレータ５００は、異なるフィルタセットを使用して別の出力チャネルを算出する。図１０の図示された例において、ＣＮＮアクセラレータ５００は、入力チャネル１００２を１００個のフィルタセットについて異なるフィルタセットで畳み込んで（例えば、反復的に畳み込んで）１００個の出力チャネルを生成する。
【００９６】
図１１は、１＊２５６畳み込み配置に基づく図５の例示的な接続マルチプレクサ５１０の例示的な動作１１００を示す。図１１の図示された例において、接続マルチプレクサ５１０は、単一のＦＰ１６出力を、図５のＤＰＥ５２０の全２５６個にわたり複製させる。図１１の図示された例において、接続マルチプレクサ５１０は、データストア５０６からＦＰ１６データを選択する。
【００９７】
図１１の図示された例において、データストア５０６は、１＊２５６畳み込み配置に基づいて構成される。図１１の例に示されたデータストア５０６は、単一の大きいＲＡＭとして構成された１６個の例示的なブロック（ＲＡＭ０‐ＲＡＭ１５）１１０２に編成される。ブロック１１０２の各々は、ＦＰ１６ワードの８つの例示的な列１１０４を含み、８つの列１１０４の各々は、複数の例示的なデータ行１１０６を含む。あるいは、例示的なブロック１１０２は、８列より少ない若しくは多い列、及び／又は図１１に示されるデータ行より少ない若しくは多いデータ行を有してもよい。図１１の図示された例において、データ行１１０６の各々は、入力チャネルの８ワードを含む。例示的な接続マルチプレクサ５１０は、フィルタと、処理されている現在の入力チャネルとに基づいて、各サイクルについて８つの入力ワードのうち適切なワードを選択する。図５の例示的なコントローラ５０２は、入力チャネルストライドに基づいて適切なワードのアドレスを決定する。例示的なコントローラ５０２は、ＲＡＭアドレスと接続行列（connection  matrix）アドレスとのうち少なくとも１つの組み合わせに基づいて全体のアドレスを決定する。
【００９８】
図１１の図示された例において、単一の入力チャネルが一度に処理される。例えば、第１のクロックサイクルの間、接続マルチプレクサ５１０は、第１の入力チャネルに対応するブロック１１０２の各々のデータ行１１０６のうち最初の２つを選択し、複数のデータ行１１０６を図１のＤＰＥ５２０のそれぞれのＤＰＥに出力する。例えば、接続マルチプレクサ５１０は、データ行１１０６のうち３２行を選択することができ（例えば、３２データ行＝（２データ行／ブロック）×（１６ブロック））、各データ行１１０６は、１２８ビットを含み（例えば、１２８ビット＝（１６ビット／ワード）×（８ワード／データ行））、ＤＰＥ５２０により処理されるべき４０９６ビットを生じる（例えば、４０９６ビット＝（１２８ビット／データ行）×（２データ行／ブロック）×１６ブロック）。このような例において、第２のクロックサイクルの間、接続マルチプレクサ５１０は、第２の入力チャネルに対応する１６個のブロック１１０２の各々の次の２つのデータ行１１０６を選択し、複数のデータ行１１０６を処理のためにＤＰＥ５２０のそれぞれのＤＰＥに出力することができる。このような例において、データストア５０６、接続マルチプレクサ５１０などのアドレス指定及び制御シーケンス決定（sequencing）は、図５のコントローラ５０２又はＤＭＡコントローラ５０４のうち少なくとも１つにより実施される。
【００９９】
図１２は、２＊１２８畳み込み配置に基づく図５の例示的な接続マルチプレクサ５１０の例示的な動作１２００を示す。図１２の図示された例において、接続マルチプレクサ５１０は、２つのＦＰ１６出力を、図５のＤＰＥ５２０の１２８個の双方のセットにわたり複製させる。図１２の図示された例において、接続マルチプレクサ５１０は、データストア５０６からＦＰ１６データを選択する。
【０１００】
図１２の図示された例において、データストア５０６は、２＊１２８畳み込み配置に基づいて構成される。図１２の例に示されたデータストア５０６は、２つの例示的なＲＡＭブロック１２０４、１２０６として構成された１６個の例示的なブロック（ＲＡＭ０‐ＲＡＭ１５）１２０２に編成される。第１の例示的なＲＡＭブロック１２０４はＲＡＭ０‐ＲＡＭ７を含み、第２の例示的なＲＡＭブロック１２０６はＲＡＭ８‐ＲＡＭ１５を含む。ブロック１２０２の各々は、ＦＰ１６ワードの８つの例示的な列１２０８を含み、８つの列１２０８の各々は、複数の例示的なデータ行１２１０を含む。図１２の図示された例において、第１のＲＡＭブロック１２０４は入力チャネルセットの前半を含み、第２のＲＡＭブロック１２０６は入力チャネルセットの後半を含む。あるいは、例示的なブロック１２０２は、８列より少ない若しくは多い列、及び／又は図１２に示されるデータ行より少ない若しくは多いデータ行を有してもよい。
【０１０１】
図１２の図示された例において、単一の入力チャネルが一度に処理される。例えば、第１のクロックサイクルの間、接続マルチプレクサ５１０は、第１のＲＡＭブロック１２０４に含まれるブロック１２０２の各々のデータ行１２１０のうち最初の２つと、第２のＲＡＭブロック１２０６に含まれるブロック１２０２の各々のデータ行１２１０のうち最初の２つとを選択し、選択されたデータ行１２１０は、処理されるべき第１の入力チャネルに対応する。例示的な接続マルチプレクサ５１０は、複数のデータ行１２１０を図１のＤＰＥ５２０のそれぞれのＤＰＥに出力する。例えば、接続マルチプレクサ５１０は、第１のＲＡＭブロック１２０４からデータ行１２１０のうち１６データ行を、及び第２のＲＡＭブロック１２０６からデータ行１２１０のうち１６データ行を選択することができ、各データ行１２１０は１２８ビットを含み、ＤＰＥ５２０により処理されるべき４０９６ビットを生じる。
【０１０２】
このような例において、第２のクロックサイクルの間に、接続マルチプレクサ５１０は、処理されるべき第２の入力チャネルに対応する第１のＲＡＭブロック１２０４内のブロック１２０２の各々の次の２つのデータ行１２１０及び第２のＲＡＭブロック１２０６内のブロック１２０２の各々の次の２つのデータ行１２１０を選択することができる。例示的な接続マルチプレクサ５１０は、複数のデータ行１２１０を処理のためにＤＰＥ５２０のそれぞれのＤＰＥに出力する。このような例において、データストア５０６、接続マルチプレクサ５１０などのアドレス指定及び制御シーケンス決定は、図５のコントローラ５０２又はＤＭＡコントローラ５０４のうち少なくとも１つにより実施される。
【０１０３】
図１３は、図５の例示的なＣＮＮアクセラレータ５００を実現する例示的なＣＮＮアクセラレータ１３００の例示的な実装のブロック図である。図１３の例示的なＣＮＮアクセラレータ１３００は、複数の入力チャネルを処理すること、及び／又は実質的に並列に（例えば、実質的に同時に）１つ以上の出力チャネルを生成することにより、畳み込み演算を加速する。図１３の図示された例において、ＣＮＮアクセラレータ１３００は、例示的なＤＰＥインベントリエンジン１３０２、例示的なＤＰＥ構成最適化器１３０４、例示的なモードセレクタ１３０６、例示的な畳み込みエンジン１３０８、例示的なプーリングエンジン１３１０、及び例示的な全結合エンジン１３１２を含む。
【０１０４】
図１３の図示された例において、ＣＮＮアクセラレータ１３００は、ＤＰＥインベントリエンジン１３０２を含み、ＤＰＥインベントリエンジン１３０２は、プラットフォーム（例えば、図５のＣＮＮアクセラレータ５００）上に存在する利用可能なＤＰＥを棚卸し、かつ／あるいはその他の方法で識別する。例示的なＤＰＥインベントリエンジン１３０２は、図５の例示的なコントローラ５０２に対応できる。図１３の図示された例において、ＤＰＥインベントリエンジン１３０２は、プラットフォーム上に存在するＤＰＥをクエリし、決定し、特徴付け、かつ／あるいは識別する手段を実現する。いくつかの例において、ＤＰＥインベントリエンジン１３０２は、処理に利用可能な図５のＤＰＥ５２０の数量を決定する。いくつかの例において、ＤＰＥインベントリエンジン１３０２は、図５の１つ以上のＤＰＥ５２０、及び／又はより一般的には図５のＣＮＮアクセラレータ５００の、畳み込み配置、モードなどを決定する。
【０１０５】
図１３の図示された例において、ＣＮＮアクセラレータ１３００は、例示的なＤＰＥ構成最適化器１３０４を含み、ＤＰＥ構成最適化器１３０４は、ＤＰＥ構成、モードなどを選択し、かつ／あるいはその他の方法で決定し、ＤＰＥリソース利用を増加させ（例えば、最大化し）、かつ／あるいはその他の方法で最適化し、電力消費を低減させ（例えば、最小化し）、かつ／あるいはその他の方法で最適化する。例示的なＤＰＥ構成最適化器１３０４は、図５の例示的なコントローラ５０２に対応できる。図１３の図示された例において、ＤＰＥ構成最適化器１３０４は、ＤＰＥ構成、モードなどを決定する手段を実現して、ＤＰＥリソースの利用を増加させ、電力消費を低減させる。例えば、ＤＰＥ構成は、ＣＮＮアクセラレータ５００が畳み込みモード、プーリングモード、全結合モードなどであるとき、データストア５０６、係数ストア５０８、ＤＰＥアレイ５１２などの構成に対応できる。例示的なＤＰＥ構成最適化器１３０４は、実質的に低い電力（例えば、繰り返しのデータ移動がほとんど又は全くない）及び最大限のハードウェア利用を使用して、図５の例示的なＣＮＮアクセラレータ５００の最適な動作を提供する手段を実現する。
【０１０６】
いくつかの例において、データ移動を低減させるために、出力の総数及び総係数セットを、図５の例示的な係数ストア５０８内に保持できる。いくつかの例において、ＤＰＥ構成最適化器１３０４は、データ移動を低減させるために、フィルタの大きさに基づいて係数ストア５０８の構成を決定する。例えば、ＦＰ１６係数を使用する３×３のフィルタサイズについて、ＤＰＥ構成最適化器１３０４は、約２８個の入力チャネルの制限を決定することができる（例えば、
【数１】
2020521263.tif 000003
であり、係数ストア５０８は２５６個の位置を有する）。このような例において、ＤＰＥ構成最適化器１３０４は、２８個の入力チャネルの制限を決定して、出力の総数及び総係数セットが図５の係数ストア５０８に記憶できることを確保する。
【０１０７】
いくつかの例において、ＤＰＥ構成最適化器１３０４は、出力チャネルの数量を減少させ、各々のモードにおける低減は、入力チャネル取り扱い能力の倍増をもたらす。例えば、ＤＰＥ構成最適化器１３０４は、１＊２５６畳み込み配置から２＊１２８畳み込み配置又は４＊６４畳み込み配置に変更して、同じ加速をより少ない全体的な電力使用で提供することができる。いくつかの例において、ＤＰＥ構成最適化器１３０４は、全ての入力チャネル（例えば、入力画像データ）又は画像に関連づけられた全ての係数が係数ストア５０８に適合しないとき、循環バッファ管理を展開する。例えば、ＤＰＥ構成最適化器１３０４は、チャネルごと循環バッファ管理システムを構成することができ、全てのチャネルが最も早い機会にメモリ（例えば、ＳＲＡＭ、ＤＲＡＭなど）から断続的に補充され、停止がないこと又は最小限の停止を確保する。
【０１０８】
いくつかの例において、ＤＰＥ構成最適化器１３０４は、畳み込み配置を使用することから結果として生じるＤＰＥ利用に基づいて、ＣＮＮアクセラレータ１３００が動作（例えば、畳み込み演算、プーリング演算、全結合演算など）を続行することを停止させ、かつ／あるいはその他の方法で防止する。例えば、ＤＰＥ構成最適化器１３０４は、解析、評価、処理などされるべき第１の畳み込み配置として、１＊２５６畳み込み配置を選択することができる。このような例において、ＤＰＥ構成最適化器１３０４は、動作要件（例えば、処理又は生成されるべき入力チャネルの数量、出力チャネルの数量など）に基づきＣＮＮアクセラレータ１３００の動作中にＤＰＥアレイ５１２の２５６個のＤＰＥ５２０のうち６４個が使用されないことに基づいて、１＊２５６畳み込み配置が７５％の第１のＤＰＥ利用を結果として生じると決定することができる。例示的なＤＰＥ構成最適化器１３０４は、７５％の第１のＤＰＥ利用を９０％のＤＰＥ利用閾と比較し、比較に基づいて（例えば、７５％の第１のＤＰＥ利用は９０％のＤＰＥ利用閾より小さい）、第１のＤＰＥ利用がＤＰＥ利用閾を満たさないと決定することができる。第１のＤＰＥ利用がＤＰＥ利用閾を満たさないとの決定に応答して、例示的なＤＰＥ構成最適化器１３０４は、ＤＰＥ利用のために別の畳み込み配置が生成、決定、及び／又は評価されるまで、例示的なＣＮＮアクセラレータ１３００が第１の畳み込み配置で動作を実行することを停止させることができる。
【０１０９】
いくつかの例において、停止に応答して、ＤＰＥ構成最適化器１３０４は、処理されるべき４＊６４畳み込み配置などの第２の畳み込み配置を選択する。このような例において、ＤＰＥ構成最適化器１３０４は、動作要件に基づきＣＮＮアクセラレータ１３００の動作中にＤＰＥアレイ５１２の２５６個のＤＰＥ５２０のうち０個が使用されないことに基づいて、４＊６４畳み込み配置が１００％の第２のＤＰＥ利用を結果としてもたらすと決定することができる。例示的なＤＰＥ構成最適化器１３０４は、１００％の第２のＤＰＥ利用を９０％のＤＰＥ利用閾と比較し、比較に基づいて（例えば、１００％の第２のＤＰＥ利用は９０％のＤＰＥ利用閾より大きい）、第２のＤＰＥ利用がＤＰＥ利用閾を満たすと決定することができる。第２のＤＰＥ利用がＤＰＥ利用閾を満たすとの決定に応答して、例示的なＤＰＥ構成最適化器１３０４は、例示的なＣＮＮアクセラレータ１３００に第２の畳み込み配置で動作を実行するように指示することができる。さらに又はあるいは、例示的なＤＰＥ構成最適化器１３０４は、第２のＤＰＥ利用を第１のＤＰＥ利用と比較し、第２の畳み込み配置が第１の畳み込み配置より大きいＤＰＥ利用を有することに基づいて、例示的なＣＮＮアクセラレータ１３００に第２の畳み込み配置で動作を実行するように指示することができる。
【０１１０】
いくつかの例において、ＤＰＥ構成最適化器１３０４は、ＤＰＥ５２０の累算器６０４の構成を調整する（例えば、動的に調整する、動的に構成する、など）。いくつかの例において、ＤＰＥ構成最適化器１３０４は、入力値が累算器６０４に利用可能な既存の整数ビット数を必要としないとき、累算器６０４の整数ビット数を減少させる。例えば、ＤＰＥ構成最適化器１３０４は、レンジを増加させるが累算器６０４の精度を低減させるように、累算器６０４が処理できる整数ビット数を減少させることができる。いくつかの例において、ＤＰＥ構成最適化器１３０４は、累算器６０４がオーバーフローしたとき、累算器６０４の整数ビット数を増加させる。例えば、構成最適化器１３０４は、レンジを増加させるが累算器６０４の精度を低減させるように、累算器６０４が処理できる整数ビット数を増加させることができる。
【０１１１】
図１３の図示された例において、ＣＮＮアクセラレータ１３００は、モードセレクタ１３０６を含み、モードセレクタ１３０６は、動作モード、実行されるべき動作、及び／又は畳み込み配置を選択する。例示的なモードセレクタ１３０６は、図５の例示的なコントローラ５０２に対応できる。図１３の図示された例において、モードセレクタ１３０６は、畳み込みモード、プーリングモード、全結合モードなどの動作モードを選択し、選択されたモードに基づいてＣＮＮアクセラレータ１３００を構成する手段を実現する。いくつかの例において、モードセレクタ１３０６は、畳み込みモード内で任意のプーリングモードを選択する。いくつかの例において、モードセレクタ１３０６は、モードのうち１つにおいて後処理演算を選択する。例えば、モードセレクタ１３０６は、畳み込みモードにおける畳み込み演算を完了した後、プーリングモードにおけるプーリング演算を完了した後などに、図５のＤＰＥ５２０にバイアス演算、スケール演算、ＰＲｅＬＵ演算、ＲｅＬＵ演算などを実行するように指示することができる。
【０１１２】
いくつかの例において、モードセレクタ１３０６は、選択されたモードに基づいて図５のＣＮＮアクセラレータ５００を構成する。例えば、モードセレクタ１３０６は、選択されたモードに基づいて図５のデータストア５０６、係数ストア５０８、ＤＰＥアレイ５１２などを構成することができる。例えば、モードセレクタ１３０６は、係数値を係数ストア５０８に送信するようにＤＭＡコントローラ５０４に指示することにより、畳み込みモードに対して係数ストア５０８を構成することができる。他の例において、モードセレクタ１３０６は、バイアスパラメータ、スケールパラメータ等を処理するためにＤＰＥアレイ５１２に送信するように係数ストア５０８に指示することにより、バイアス演算、スケール演算等に対してＤＰＥアレイ５１２を構成することができる。
【０１１３】
図１３の図示された例において、ＣＮＮアクセラレータ１３００は、畳み込みエンジン１３０８を含み、畳み込みエンジン１３０８は、入力画像に関連づけられた画像データに対する畳み込み演算を実行し、かつ／あるいはその他の方法で容易にする。例示的な畳み込みエンジン１３０８は、図５の例示的なコントローラ５０２に対応できる。例えば、畳み込みエンジン１３０８は、畳み込み演算を実行するためにデータストア５０６、係数ストア５０８、ＤＰＥ５２０の１つ以上などに指示及び／又は指図するコントローラ５０２に対応できる。図１３の図示された例において、畳み込みエンジン１３０８は、活性化値、画素値などを含む複数の入力チャネルを複数のフィルタと畳み込んで、複数の出力チャネルを実質的に並列に生成する手段を含む。例えば、畳み込みエンジン１３０８は、ＤＰＥアレイ５１２の１つ以上のＤＰＥ５２０を使用して畳み込み演算を容易にする手段を含む。
【０１１４】
いくつかの例において、畳み込みエンジン１３０８は、入力画像（例えば、図１の入力画像１０６）に関連づけられた画像データ（例えば、活性化値、画素値など）を取得し、画像データを、入力画像内で検出されるべき関心のある画像特徴に関連づけられたフィルタ係数と畳み込み、画像データの、フィルタ係数との重複に関連づけられた出力を生成することにより、畳み込みを実行する。このような例において、モデルセレクタ１３０６は、畳み込み配置に基づいて図５のデータストア５０６、係数ストア５０８、ＤＰＥアレイ５１２などを構成する。
【０１１５】
モードセレクタ１３０６が２＊１２８畳み込み配置を選択する例において、例示的な畳み込みエンジン１３０８は、図１２に関連して上述したように、例示的データストア５０６を２つのＲＡＭブロックに構成する。例示的な畳み込みエンジン１３０８は、図７の第３の例示的な係数ストア７０４に関連して上述したように、係数ストア５０８を２つの係数ブロックに構成する。例示的な畳み込みエンジン１３０８は、例示的なデータストア５０６に処理されるべき各入力チャネルのデータ行の一部又は全部をロードし、図５の例示的な係数ストア５０８に入力データに関連づけられた係数をロードし、それにより、データ行及び係数は、図５のＤＰＥ５２０のそれぞれのＤＰＥに整合する。
【０１１６】
例示的なデータストア５０６及び例示的な係数ストア５０８がロードされ、かつ／あるいはその他の方法で構成されたことに応答して、例示的な畳み込みエンジン１３０８は、第１の出力位置（例えば、図１０の出力位置１００４）について実質的に並列に畳み込み演算（例えば、図１０の畳み込み演算１０００）を実行する。例えば、畳み込みエンジン１３０８は、係数ストア５０８に含まれる係数がＤＰＥ５２０に対して循環されて（cycled）畳み込み出力値を生成する間、データストア５０６に記憶された適切なワード（例えば、入力位置１００８に関連づけられたワード）をアドレス指定してＤＰＥ５２０のそれぞれのＤＰＥに送信することにより、畳み込み演算を実現する。
【０１１７】
例示的な畳み込みエンジン１３０８は、ワードの全体（例えば、図１０の入力位置１００８に関連づけられたワードの全体）が処理されるまで、ワードを処理する（例えば、反復的に処理する）。いくつかの例において、畳み込みエンジン１３０８は、入力位置に対する全てのワードが処理されたとき、後処理演算（例えば、バイアス演算、スケール演算、ＰＲｅＬＵ演算、ＲｅＬＵ演算など）を実行する。入力チャネルストライドを使用し、例示的な畳み込みエンジン１３０８は、全ての入力位置が処理され、入力チャネルが処理されて畳み込み出力値を生成するまで、ＤＰＥ５２０を使用して次のチャネルを畳み込む。
【０１１８】
いくつかの例において、畳み込みエンジン１３０８は、畳み込みモード内で畳み込み出力に対して任意のプーリング演算（例えば、平均プーリング演算、最大プーリング演算など）を実行する。例えば、畳み込みエンジン１３０８は、プール出力として、出力バッファ（例えば、図５の出力バッファ５１４）に対するプールエリア（例えば、図２のプールエリア２１２）の平均値、最大値などを決定することができる。例示的な畳み込みエンジン１３０８は、出力バッファ５１４がフルである（例えば、ＤＰＥ５２０につき閾数量の値が算出された）とき、プール出力、及び／又はより一般的にはＤＰＥ５２０の出力を、出力バッファ５１４からメモリに書き込む。
【０１１９】
図１３の図示された例において、ＣＮＮアクセラレータ１３００は、プーリングエンジン１３１０を含み、プーリングエンジン１３１０は、１つ以上の畳み込み出力に対して平均プーリング演算又は最大プーリング演算などのプーリング演算を実行する。例示的なプーリングエンジン１３１０は、図５の例示的なコントローラ５０２に対応できる。例えば、プーリングエンジン１３１０は、プーリングモード内でプーリング演算を実行するためにデータストア５０６、係数ストア５０８、ＤＰＥ５２０の１つ以上などに指示及び／又は指図するコントローラ５０２に対応できる。図示された例において、プーリングエンジン１３１０は、畳み込みエンジン１３０８により生成された畳み込み出力のセットに対してプーリング演算を実行する手段を実現する。
【０１２０】
いくつかの例において、プーリングエンジン１３１０は、プールエリアを処理してプール出力を生成する。例えば、プーリングエンジン１３１０は、図３のプールエリア２１２を処理して、プールエリア２１２の平均値、最大値等に基づいて図３の出力位置３０２を生成することができる。例えば、プーリングエンジン１３１０は、２×２プールについては４クロックサイクル毎、３×３プールについては９クロックサイクル毎などで、データを出力することができる。例示的なプーリングエンジン１３１０は、プールエリア内のデータの和を算出することにより平均プーリング演算を実行し、その和に１／Ａｖを乗算する。Ａｖは、プール幅にプール高さを乗算したもの算出することにより決定されるプールサイズである。例示的なプーリングエンジン１３１０は、プールエリアの最大値を決定することにより、最大プーリング演算を実行する。
【０１２１】
図１３の図示された例において、ＣＮＮアクセラレータ１３００は、全結合エンジン１３１２を含み、全結合エンジン１３１２は、畳み込みエンジン１３０８からの出力（例えば、畳み込み出力）及び／又はプーリングエンジン１３１０からの出力（例えば、プール出力）を使用して、訓練データセットに基づいて入力画像（例えば、図１の入力画像１０６）を様々なクラスに分類する。図１３の例示的な全結合エンジン１３１２は、図５のコントローラ５０２に対応できる。例えば、コントローラ５０２は、データストア５０６、係数ストア５０８、ＤＰＥアレイ５１２などに、全結合演算を実行する（例えば、図４の出力アレイ４０６を生成する）ように指示することができる。図１３の図示された例において、全結合エンジン１３１２は、畳み込み出力及び／又はプール出力に基づいて入力画像の画像特徴を分類して、入力画像に含まれる画像特徴を検出し、かつ／あるいはその他の方法で識別する手段を実現する。
【０１２２】
いくつかの例において、ＣＮＮアクセラレータ１３００は、１つ以上のリンクされたリストを使用することにより、図５のＣＮＮアクセラレータ５００を実現する。リンクされたリストは、データ要素の線形集合であり、その線形順序は、メモリにおけるそれらの物理的配置によって与えられないが、代わりに、データ要素の各々が、データ要素のうち次のデータ要素を指し示す。いくつかの例において、リンクされたリストはシステムメモリに記憶される。例えば、リンクされたリストは、図５のメインメモリ５１６に記憶され、図５のコントローラ５０２により実行され得る。いくつかの例において、リンクされたリストはサブ関数を容易にし、サブ関数は連結してマクロ関数を形成する。いくつかの例において、畳み込みエンジン１３０８、プーリングエンジン１３１０、全結合エンジン１３１２などは、マクロ関数の終了を示すＮＵＬＬリンクに到達するまで各演算を順次通過できるため、サブ関数の数量に制限はない。例えば、コントローラ５０２は、ＣＮＮアクセラレータ５００の全体的なＣＮＮ関数を明確に識別可能なブロックに分解し、ＮＵＬＬリンクに到達するまでブロックの各々を実行することができる。
【０１２３】
いくつかの例において、図１３のＣＮＮアクセラレータ１３００は、２つ以上の別個のリンクされたリストを維持する。図１３の例示的なＣＮＮアクセラレータ１３００は、２つ以上のリンクされたリストをデフォルトでラウンドロビン方式で、又は任意の他の方法で実行し、かつ／あるいはその他の方法で処理することができる。いくつかの例において、図１３のＣＮＮアクセラレータ１３００は、リンクされたリストのうち１つ以上をロックし又はフリーズさせて、リンクされたリストのうち１つが、リンクされたリストのうち第２のリストに引き渡す前に完了することを確保できる。
【０１２４】
例示的なＤＰＥインベントリエンジン手段、例示的なＤＰＥ構成最適化器手段、例示的なモードセレクタ手段、例示的な畳み込みエンジン手段、例示的なプーリングエンジン手段、及び／又は例示的な全結合エンジン手段は、ハードウェアプロセッサ上で実行するソフトウェアにより実現される。さらに又は代わりに、例示的なＤＰＥインベントリエンジン手段、例示的なＤＰＥ構成最適化器手段、例示的なモードセレクタ手段、例示的な畳み込みエンジン手段、例示的なプーリングエンジン手段、及び／又は例示的な全結合エンジン手段は、代わりに、ＡＳＩＣ、ＦＰＧＡなどの所望の機能性を達成するための論理演算を実行するように構造化された論理回路、及び／又はそのような回路とソフトウェア及び／又はファームウェアとの組み合わせにより実現され得る。
【０１２５】
例示的なＣＮＮアクセラレータ５００を実現する例示的な方法が図５に示されているが、図５に示されている要素、処理、及び／又はデバイスのうち１つ以上が、組み合わせられ、分割され、再配置され、省略され、消去され、かつ／あるいは任意の他の方法で実現されてもよい。さらに、図１３の例示的なＤＰＥインベントリエンジン１３０２、例示的なＤＰＥ構成最適化器１３０４、例示的なモードセレクタ１３０６、例示的な畳み込みエンジン１３０８、例示的なプーリングエンジン１３１０、例示的な全結合エンジン１３１２、及び／又はより一般的には例示的なＣＮＮアクセラレータ１３００は、ハードウェア、ソフトウェア、ファームウェア、及び／又は、ハードウェア、ソフトウェア、及び／又はファームウェアの任意の組み合わせにより実現されてもよい。ゆえに、例えば、図１３の例示的なＤＰＥインベントリエンジン１３０２、例示的なＤＰＥ構成最適化器１３０４、例示的なモードセレクタ１３０６、例示的な畳み込みエンジン１３０８、例示的なプーリングエンジン１３１０、例示的な全結合エンジン１３１２、及び／又はより一般的には例示的なＣＮＮアクセラレータ１３００のうち任意のものが、１つ以上のアナログ又はデジタル回路、論理回路、プログラマブルプロセッサ、プログラマブルコントローラ、グラフィックス処理ユニット（ＧＰＵ）、デジタル信号プロセッサ（ＤＳＰ）、特定用途向け集積回路（ＡＳＩＣ）、プログラマブル論理デバイス（ＰＬＤ）、及び／又はフィールドプログラマブル論理デバイス（ＦＰＬＤ）により実現できる。純粋にソフトウェア及び／又はファームウェア実装をカバーするために本特許の装置又はシステムクレームのうち任意のものを読むとき、例示的なＤＰＥインベントリエンジン１３０２、例示的なＤＰＥ構成最適化器１３０４、例示的なモードセレクタ１３０６、例示的な畳み込みエンジン１３０８、例示的なプーリングエンジン１３１０、及び／又は例示的な全結合エンジン１３１２のうちの少なくとも１つが、ソフトウェア及び／又はファームウェアを含むメモリ、デジタル多用途ディスク（ＤＶＤ）、コンパクトディスク（ＣＤ）、ブルーレイディスクなどの非一時的コンピュータ読取可能記憶デバイス又は記憶ディスクを含むことがここに明示的に定義される。またさらに、図１３の例示的なＣＮＮアクセラレータ１３００は、図１３に示されたものに追加で又は代わって１つ以上の要素、処理、及び／又はデバイスを含んでもよく、かつ／あるいは図示された要素、処理、及びデバイスの任意のもの又は全てのうち２つ以上を含んでもよい。本明細書で用いられるとき、フレーズ「通信において」はその変形を含め、直接通信及び／又は１つ以上の中間コンポーネントを通した間接通信を包含し、直接の物理的（例えば、有線）通信及び／又は一定の通信を必要とせず、むしろ、周期的な間隔、スケジュールされた間隔、非周期的な間隔、及び／又は１回限りのイベントにおける選択的通信をさらに含む。
【０１２６】
図１３のＣＮＮアクセラレータ１３００を実現するための、例示的なハードウェア論理、マシン読取可能命令、ハードウェアにより実現されるステートマシン、及び／又はこれらの任意の組み合わせを表すフローチャートが、図１４〜図１８に示される。マシン読取可能命令は、図１９に関連して以下で論じられる例示的なプロセッサプラットフォーム１９００に示されるプロセッサ１９１２などのコンピュータプロセッサによる実行のための実行可能プログラム又は実行可能プログラムの一部であってもよい。プログラムは、ＣＤ‐ＲＯＭ、フロッピーディスク、ハードドライブ、ＤＶＤ、ブルーレイディスク、又はプロセッサ１９１２に関連づけられたメモリなどの非一時的コンピュータ読取可能記憶媒体に記憶されたソフトウェアで具現化されてもよいが、代わりに、プログラム全体及び／又はその一部が、プロセッサ１９１２以外のデバイスにより実行され、かつ／あるいはファームウェア又は専用ハードウェアで具現化されてもよい。さらに、例示的なプログラムは図１４〜図１８に示されるフローチャートを参照して説明されるが、例示的なＣＮＮアクセラレータ１３００を実現する多くの他の方法が代わりに使用されてもよい。例えば、ブロックの実行順序が変更されてもよく、かつ／あるいは説明されたブロックのいくつかが変更され、消去され、あるいは組み合わせられてもよい。さらに又は代わりに、ブロックのうち任意のもの又は全てが、ソフトウェア又はファームウェアを実行することなく対応する動作を実行するように構造化された１つ以上のハードウェア回路（例えば、離散及び／又は集積アナログ及び／又はデジタル回路、ＦＰＧＡ、ＡＳＩＣ、比較器、演算増幅器（オペアンプ）、論理回路など）により実現されてもよい。
【０１２７】
上述したように、図１４〜図１８の例示的な処理は、ハードディスクドライブ、フラッシュメモリ、読取専用メモリ、コンパクトディスク、デジタル多用途ディスク、キャッシュ、ランダムアクセスメモリ、及び／又は情報が任意の継続時間の間（例えば、延長された期間の間、永続的に、短い間、一時的にバッファリングするため、及び／又は情報をキャッシュするため）記憶される任意の他の記憶デバイス又は記憶ディスクなどの非一時的コンピュータ及び／又はマシン読取可能媒体に記憶される実行可能命令（例えば、コンピュータ及び／又はマシン読取可能命令）を使用して実現されてもよい。本明細書で用いられるとき、用語の非一時的コンピュータ読取可能媒体は、任意タイプのコンピュータ読取可能記憶デバイス及び／又は記憶ディスクを含み、伝搬信号を除外し、伝送媒体を除外することが明確に定義される。
【０１２８】
本明細書において、「含める」及び「含む」（及びその全ての形式及び時制）は、オープンエンドの用語として使用される。ゆえに、クレームが、何らかの形式の「含める」又は「含む」（例えば、含む、含める、含んでいる、含めている、有するなど）をプリアンブルとして又は任意の種類のクレーム記載内で採用するときはいつでも、対応するクレーム又は記載の範囲外に該当することなく、さらなる要素、用語などが存在し得ることが理解されるべきである。本明細書で用いられるとき、フレーズ「少なくとも」が、例えばクレームのプリアンブルにおいて移行語として使用される場合、それは、用語「含む」及び「含める」がオープンエンドであるのと同様にオープンエンドである。用語「及び／又は」は、例えばＡ、Ｂ、及び／又はＣなどの形式で使用されるとき、（１）Ａ単体、（２）Ｂ単体、（３）Ｃ単体、（４）ＡとＢ、（５）ＡとＣ、（６）ＢとＣ、及び（７）ＡとＢとＣなどの、Ａ、Ｂ、Ｃのうち任意の組み合わせ又はサブセットを参照する。
【０１２９】
図１４は、入力画像に関連づけられた画像データを処理する図５のＣＮＮアクセラレータ５００及び／又は図１３のＣＮＮアクセラレータ１３００を実現するために実行され得る例示的なマシン読取可能命令１４００を表すフローチャートである。図１４の例示的なマシン読取可能命令１４００はブロック１４０２で始まり、ブロック１４０２において、例示的なＣＮＮアクセラレータ１３００は、利用可能なデータ処理要素（ＤＰＥ）を棚卸する。例えば、ＤＰＥインベントリエンジン１３０２は、処理のためのＤＰＥ５２０の可用性、ＤＰＥ５２０のうち１つ以上の構成及び／又はモード、などを決定することができる。
【０１３０】
ブロック１４０４において、例示的なＣＮＮアクセラレータ１３００は、ＤＰＥリソース利用を最大化し、電力消費を最小化するために、ＤＰＥ構成を選択する。例えば、ＤＰＥ構成最適化器１３０４は、フィルタサイズ、処理されるべき入力チャネルの数量、生成されるべき出力チャネルの所望数量などに基づいて１＊２５６畳み込み配置、２＊１２８畳み込み配置などを使用するよう決定して、ＤＰＥリソース利用を増加させ、電力消費を低減させることができる。このような例において、ＤＰＥ構成最適化器１３０４は、入力チャネルの数量を制限して、入力チャネルに関連づけられた画像データの全体及び対応する係数が図５のＣＮＮアクセラレータ５００に全体的に記憶できることを確保し、データ移動を低減させて（例えば、最小化して）、実質的に高いＤＰＥリソース利用（例えば、７５％利用、１００％利用など）を維持しながら電力消費を低減させることができる。
【０１３１】
ＤＰＥ構成の選択に応答して、例示的なＣＮＮアクセラレータ１３００は、ブロック１４０６において、ＤＰＥ構成が１つ以上の使用されないＤＰＥをきたし又は結果としてもたらすかどうかを決定する。動作要件が６４個の入力チャネル及び１９２個の出力チャネルを含む例において、ＤＰＥ構成最適化器１３０４は、４＊６４が他の畳み込み配置（例えば、１＊２５６、２＊１２８、４＊３２など）と比較してより高いＤＰＥ利用を結果としてもたらすことに基づいて、４＊６４畳み込み配置を使用し、全ての入力について３回循環されるよう決定する。
【０１３２】
ブロック１４０６において、例示的なＣＮＮアクセラレータ１３００が使用されないＤＰＥがあると決定した場合、制御はブロック１４０８に進み、ＣＮＮアクセラレータ１３００の動作を停止させて代わりのＤＰＥ構成を生成する。例えば、ＤＰＥ構成最適化器１３０４は、動作に対して閾数量の利用可能ＤＰＥ５２０が割り当てられる、指定される、などされるまで、ＣＮＮアクセラレータ１３００の動作の前進を防止又は保留するよう決定することができる。例えば、ＤＰＥ構成最適化器１３０４は、ＤＰＥ利用閾より上にＤＰＥ利用を増加させるために、ＤＰＥ５２０の代わりの畳み込み配置を生成するよう決定することができる。例えば、ＤＰＥ構成最適化器１３０４がブロック１４０４において１＊２５６畳み込み配置を選択した場合、６４個の使用されないＤＰＥ５２０は、畳み込み演算全体を通して７５％のＤＰＥ利用を結果としてもたらし、ゆえに、４＊６４畳み込み配置などの他の畳み込み配置と比較して、より長い畳み込み時間をきたし、４＊６４畳み込み配置は、０個の使用されないＤＰＥ５２０及び対応する１００％のＤＰＥ利用を結果としてもたらす。
【０１３３】
このような例において、ＤＰＥ構成最適化器１３０４は、ブロック１４０８において、４＊６４畳み込み配置を生成し、かつ／あるいはその他の方法で決定することができる。例えば、ＤＰＥ構成最適化器１３０４は、４＊６４畳み込み配置のＤＰＥ利用が（１）前に生成された畳み込み配置（例えば、１＊２５６畳み込み配置、及び／又は（２）ＤＰＥ利用閾（例えば、７５％のＤＰＥ利用、９０％のＤＰＥ利用など）より大きいことに基づいて、４＊６４畳み込み配置を使用するよう決定することができる。例えば、ＤＰＥ構成最適化器１３０４は、対応するＤＰＥ利用がＤＰＥ利用閾を満たす（例えば、ＤＰＥ利用がＤＰＥ利用閾より大きい）ことに基づいて、４＊６４畳み込み配置を生成し、使用するよう決定することができる。ブロック１４０８における代わりのＤＰＥ構成の生成に応答して、制御はブロック１４０４に戻り、ブロック１４０８において生成されたＤＰＥ構成を選択する。代わりに、使用されないＤＰＥ５２０がない結果をもたらすか又はＤＰＥ利用閾を満たす代わりのＤＰＥ構成がない場合、制御は（例えば、タイムアウト期間の後、１つ以上の畳み込み配置のＤＰＥ利用を評価した後、などに）ブロック１４０６からブロック１４１０に進み、現在のＤＰＥ構成で続行し、代わりのＤＰＥ構成がないことを示す警告を生成し、あるいはＣＮＮアクセラレータ１３００の動作を停止させてもよい。
【０１３４】
ブロック１４０６において、例示的なＣＮＮアクセラレータ１３００が使用されないＤＰＥがないと決定した場合、ブロック１４１０において、ＣＮＮアクセラレータ１３００は、コントローラモードを選択する。例えば、モードセレクタ１３０６は、任意プーリング付き畳み込みモード、重複プーリングモード、又は全結合モードで動作するよう決定することができる。
【０１３５】
任意プーリング付き畳み込みモードの選択に応答して、制御はブロック１４１２に進み、任意プーリング付き畳み込みモードで動作を開始する。ブロック１４１２を実現するために使用できる例示的な処理が、図１５に関連して後述される。例えば、コントローラ５０２は、ＤＰＥ５２０に畳み込みモード、プーリング付き畳み込みモード等で動作するように指示することができる。
【０１３６】
重複プーリングモードの選択に応答して、制御はブロック１４１４に進み、重複プーリングモードで動作を開始する。ブロック１４１４を実現するために使用できる例示的な処理が、図１６に関連して後述される。例えば、コントローラ５０２は、ＤＰＥ５２０に重複プーリングモードで動作するように指示することができる。
【０１３７】
全結合モードの選択に応答して、制御はブロック１４１６に進み、全結合モードで動作を開始する。ブロック１４１６を実現するために使用できる例示的な処理が、図１７に関連して後述される。例えば、コントローラ５０２は、ＤＰＥ５２０に全結合モードで動作するように指示することができる。ブロック１４１２において任意プーリング付き畳み込み演算を、ブロック１４１４において重複プーリング演算を、又はブロック１４１６において全結合演算を終了し、かつ／あるいはその他の方法で実行したことに応答して、例示的なマシン読取可能命令１４００は終了する。
【０１３８】
図１５は、任意プーリング付き畳み込みを実行する図５のＣＮＮアクセラレータ５００及び／又は図１３のＣＮＮアクセラレータ１３００を実現するために実行され得る例示的なマシン読取可能命令１４１２を表すフローチャートである。例示的なマシン読取可能命令１４１２は、図１４の例示的なマシン読取可能命令１４００のブロック１４１２を実現することができる。図１５の例示的なマシン読取可能命令１４１２はブロック１５０２で始まり、ブロック１５０２において、例示的なＣＮＮアクセラレータ１３００は、ＣＮＮアクセラレータ１３００のモードを任意プーリング付き畳み込みに設定する。例えば、モードセレクタ１３０６は、ＣＮＮアクセラレータ１３００を任意プーリング付き畳み込みモードに対して構成することができる。
【０１３９】
ブロック１５０４において、例示的なＣＮＮアクセラレータ１３００は、入力チャネルに対して最小数の行が存在するかどうかを決定する。例えば、畳み込みエンジン１３０８は、ストレージに最小数の行が存在するかどうかを決定して、関心のある入力チャネルを畳み込むことができる。例えば、図５のＤＭＡコントローラ５０４は、１つ以上の入力チャネルが処理されるために必要な複数のデータ行をデータストア５０６に送信することができる。
【０１４０】
ブロック１５０４において、例示的なＣＮＮアクセラレータ１３００が、入力チャネルに対して最小数の行が存在しないと決定した場合、制御は、最小数の行が利用可能になるまでブロック１５０４において待機する。ブロック１５０４において、例示的なＣＮＮアクセラレータ１３００が、入力チャネルに対して最小数の行が存在すると決定した場合、制御はブロック１５０６に進み、入力チャネルの畳み込みを開始する。例えば、畳み込みエンジン１３０８は、図１０の入力チャネル１００２のうち１つを図１０のフィルタ１０１０のうち１つで畳み込み、畳み込み出力値を生成することができる。
【０１４１】
入力チャネルの畳み込みの開始に応答して、制御はブロック１５０８に進み、畳み込みが完了したかどうかを決定する。例えば、畳み込みエンジン１３０８は、図１０の入力位置１００８について値の全体が処理されるまで、入力チャネル１００２のうち１つをフィルタ１０１０のうち１つで畳み込むことができる。ブロック１５０８において、例示的なＣＮＮアクセラレータ１３００が、畳み込みが完了していないと決定した場合、制御は畳み込みが完了するまで待機し、そうでなければ、制御はブロック１５１０に進み、処理すべきさらなる入力があるかどうかを決定する。例えば、畳み込みエンジン１３０８は、処理されるべき入力位置１００８に含まれるさらなる活性化値、画素値などがあると決定することができる。
【０１４２】
ブロック１５１０において、例示的なＣＮＮアクセラレータ１３００が、処理すべきさらなる入力があると決定した場合、制御はブロック１５０４に戻り、さらなる入力を処理するために最小数の行が存在するかどうかを決定する。ブロック１５１０において、例示的なＣＮＮアクセラレータ１３００が、処理すべき残された入力がないと決定した場合、ブロック１５１２において、ＣＮＮアクセラレータ１３００は、小計を累算する（例えば、図１０の入力位置１００８に対応する畳み込み出力値の和を算出する）。例えば、畳み込みエンジン１３０８は、小計を累算することができる。
【０１４３】
ブロック１５１４において、例示的なＣＮＮアクセラレータ１３００は、プーリングが有効にされているかどうかを決定する。例えば、モードセレクタ１３０６は、平均プーリング、最大プーリングなどを可能にするよう決定することができる。ブロック１５１４において、例示的なＣＮＮアクセラレータ１３００が、プーリングが有効にされていないと決定した場合、制御はブロック１５１８に進み、出力バッファに書き込む。例えば、畳み込みエンジン１３０８は、図１０の入力位置１００８についての畳み込み出力の累算値を出力バッファに出力して、図１０の出力位置１００４を生成することができる。出力バッファへの書き込みに応答して、図１５の例示的なマシン読取可能命令１４１２は、図１４の例示的なマシン読取可能命令１４００に戻り、終了する。例えば、畳み込みエンジン１３０８は、フィルタ１０１０で畳み込まれた入力チャネル１００２の入力位置１００８に対応する出力位置１００４を生成した。このような例において、畳み込みエンジン１３０８は、入力チャネル１００２の残りの入力位置を畳み込んで（例えば、反復的に畳み込んで）出力チャネル１００６を生成することができる。
【０１４４】
ブロック１５１４において、例示的なＣＮＮアクセラレータ１３００が、プーリングが有効にされていると決定した場合、制御はブロック１５１６に進み、プーリング及び畳み込み比較を実行する。例えば、プーリングエンジン１３１０は、出力チャネル１００６のプールエリアの平均値又は最大値を算出することができる。プーリング及び畳み込み比較を実行してプール出力値を生成したことに応答して、制御はブロック１５１８に進み、プール出力値を出力バッファに書き込む。
【０１４５】
図１６は、重複プーリングを実行する図５のＣＮＮアクセラレータ５００及び／又は図１３のＣＮＮアクセラレータ１３００を実現するために実行され得る例示的なマシン読取可能命令１４１４を表すフローチャートである。図１４の例示的なマシン読取可能命令１４１４は、図１４の例示的なマシン読取可能命令１４００のブロック１４１４を実現するために使用できる。図１４の例示的なマシン読取可能命令１４１４はブロック１６０２で始まり、ブロック１６０２において、例示的なＣＮＮアクセラレータ１３００は、ＣＮＮアクセラレータ１３００のモードを重複プーリングに設定する。例えば、モードセレクタ１３０６は、ＣＮＮアクセラレータ１３００を重複プーリングモードに対して構成することができる。
【０１４６】
モードを重複プーリングに設定したことに応答して、例示的なＣＮＮアクセラレータ１３００は、ブロック１６０４において、プールエリアに対して最小数の行が存在するかどうかを決定する。例えば、プーリングエンジン１３１０は、ストレージに最小数の行が存在するかどうかを決定して、プールエリアを処理することができる。例えば、図５のＤＭＡコントローラ５０４は、図２のプールエリア２１２を処理するために必要な複数のデータ行をデータストア５０６に送信することができる。
【０１４７】
ブロック１６０４において、例示的なＣＮＮアクセラレータ１３００が、プールエリアに対して最小数の行が存在しないと決定した場合、制御は、最小数の行が利用可能になるまでブロック１６０４において待機する。ブロック１６０４において、例示的なＣＮＮアクセラレータ１３００が、プールエリアに対して最小数の行が存在すると決定した場合、制御はブロック１６０６に進み、現在の値を最大プーリングのために記憶された値と比較し、あるいは平均プーリングのために累算する。例えば、プーリングエンジン１３１０は、最大プーリングに対して構成されているとき、プールエリアの値を比較して（例えば、反復的に比較して）プールエリアの最大値を決定することができる。他の例において、プーリングエンジン１３１０は、プールエリアの値を累算し、プールエリアのサイズ及びプールエリアの累算値に基づいてプールエリアの平均値を算出することができる。最大プール値又は平均プール値の算出に応答して、図１６の例示的なマシン読取可能命令１４１４は、図１４の例示的なマシン読取可能命令１４００に戻り、終了する。
【０１４８】
図１７は、全結合演算を実行する図５のＣＮＮアクセラレータ５００及び／又は図１３のＣＮＮアクセラレータ１３００を実現するために実行され得る例示的なマシン読取可能命令１４１６を表すフローチャートである。図１７の例示的なマシン読取可能命令１４１６は、図１４の例示的なマシン読取可能命令１４００のブロック１４１６を実現するために使用できる。図１７の例示的なマシン読取可能命令１４１６はブロック１７０２で始まり、ブロック１７０２において、例示的なＣＮＮアクセラレータ１３００は、ＣＮＮアクセラレータ１３００のモードを全結合モードに設定する。例えば、モードセレクタ１３０６は、ＣＮＮアクセラレータ１３００を全結合モードに対して構成することができる。
【０１４９】
モードを全結合モードに設定したことに応答して、例示的なＣＮＮアクセラレータ１３００は、Ｎ個の完全なベクトルを保持するように係数ストアを構成する。例えば、図５のコントローラ５０２は、ＤＭＡコントローラ５０４に、図４の係数アレイ４０４を図５の係数ストア５０８に送信するように指示することができる。
【０１５０】
ブロック１７０６において、例示的なＣＮＮアクセラレータ１３００は、ＲＡＭにデータ行列を分散させて、全てのＤＰＥをベクトルの並列処理について可能にする。例えば、図５のコントローラ５０２は、ＤＭＡコントローラ５０４に、図５のメインメモリ５１６からデータストア５０６にデータ（例えば、畳み込み出力値、プール出力値など）を送信するように指示することができ、データストア５０６は同様に、該データを接続マルチプレクサ５１０を介してＤＰＥ５２０に送信する。ここで、ＤＰＥ５２０の各々は、他のＤＰＥ５２０と実質的に並列に図４の出力アレイ４０６の一部を生成し、かつ／あるいはその他の方法で算出する。ベクトルの処理に応答して、図１７の例示的なマシン読取可能命令１４１６は、図１４の例示的なマシン読取可能命令１４００に戻り、終了する。
【０１５１】
図１８は、累算器を構成する（例えば、動的に構成する）図５のＣＮＮアクセラレータ５００及び／又は図１３のＣＮＮアクセラレータ１３００を実現するために実行され得る例示的なマシン読取可能命令１８００を表すフローチャートである。例示的なマシン読取可能命令１８００はブロック１８０２で始まり、ブロック１８０２において、例示的なＣＮＮアクセラレータ１３００は、入力により必要とされる整数ビット数を決定する。例えば、ＤＰＥ構成最適化器１３０４は、累算器６０４への入力値が１７整数ビットを必要とし、累算器６０４の構成が、累算器６０４が１６整数ビットを処理することを可能にすると決定することができる。
【０１５２】
ブロック１８０４において、例示的なＣＮＮアクセラレータ１３００は、必要とされる整数ビット数が現在の整数ビット数より大きいかどうかを決定する。例えば、ＤＰＥ構成最適化器１３０４は、１７整数ビットの入力値が、累算器６０４の構成の１６整数ビットより多い整数ビットを必要とすると決定することができる。
【０１５３】
ブロック１８０４において、例示的なＣＮＮアクセラレータ１３００が、必要とされる整数ビット数が現在の整数ビット数より大きいと決定した場合、制御はブロック１８１０に進み、ＦＰ１６を固定小数点フォーマットに変換する。ブロック１８０４において、例示的なＣＮＮアクセラレータ１３００が、必要とされる整数ビット数が現在の整数ビット数より小さいと決定した場合、ブロック１８０６において、ＣＮＮアクセラレータ１３００は、整数ビット数を必要とされる数に増加させ、それに応じて小数ビット数を減少させることにより、固定小数点フォーマットを調整する。例えば、ＤＰＥ構成最適化器１３０４は、整数ビット数を１６整数ビットから１７整数ビットに増加させて累算器６０４のレンジを増加させ、小数ビット数を減少させて累算器６０４の精度を減少させることができる。
【０１５４】
固定小数点フォーマットの調整に応答して、例示的なＣＮＮアクセラレータ１３００は、ブロック１８０８において、累算器を更新された固定小数点フォーマットに整合させる（aligns）。例えば、ＤＰＥ構成最適化器１３０４は、この例において、累算器６０４を１７整数ビットの更新された固定小数点フォーマットに整合させることができる。ブロック１８０８における累算器の整合に応答して、例示的なＣＮＮアクセラレータ１３００は、ブロック１８１０において、ＦＰ１６入力を固定小数点フォーマットに変換する。例えば、畳み込みエンジン１３０８、プーリングエンジン１３１０、全結合エンジン１３１２などは、累算器６０４への入力をＦＰ１６から固定小数点フォーマットに変換することができる。
【０１５５】
ブロック１８１２において、例示的なＣＮＮアクセラレータは、入力を累算値に加算する。例えば、畳み込みエンジン１３０８、プーリングエンジン１３１０、全結合エンジン１３１２などは、累算器６０４への入力値を前に記憶された値又は前に累算された値に加算することができる。
【０１５６】
入力を累算値に加算したことに応答して、例示的なＣＮＮアクセラレータ１３００は、加算オーバーフローがあるかどうかを決定する。例えば、ＤＰＥ構成最適化器１３０４は、累算器６０４の整数ビット数がオーバーフローを防止するのに十分でないと決定することができる。
【０１５７】
ブロック１８１４において、例示的なＣＮＮアクセラレータ１３００が、加算オーバーフローがあると決定した場合、制御はブロック１８２２に進み、累算器の固定小数点フォーマットを１だけ調整し、小数ビットを１だけ減少させる。ブロック１８１４において、例示的なＣＮＮアクセラレータ１３００が、加算オーバーフローがないと決定した場合、ブロック１８１６において、ＣＮＮアクセラレータ１３００は、加算結果が整数ビットのフルレンジを使用しているかどうかを決定する。例えば、ＤＰＥ構成最適化器１３０４は、整数ビット数を１だけ減少させてレンジを低減させ、これは整数ビットのフルレンジが使用されないことに起因して必要とされず、また、精度を増加させて図６の累算器６０４の動作を最適化し、かつ／あるいはその他の方法で向上させることができる。
【０１５８】
ブロック１８１６において、例示的なＣＮＮアクセラレータ１３００が、加算結果が整数ビットのフルレンジを使用していると決定した場合、制御はブロック１８２４に進み、加算結果を固定小数点フォーマットに整合させ、累算器に割り当てる。例えば、ＤＰＥ構成最適化器１３０４は、加算結果が累算器６０４の整数ビットのフルレンジを使用することに基づいて、累算器６０４が最適化されていると決定することができる。
【０１５９】
ブロック１８１６において、例示的なＣＮＮアクセラレータ１３００が、加算結果が整数ビットのフルレンジを使用していないと決定した場合、ブロック１８１８において、ＣＮＮアクセラレータ１３００は、整数ビット数が１２より大きいかどうかを決定する。例えば、ＤＰＥ構成最適化器１３０４は、累算器６０４の整数ビット数が最小閾値の１２整数ビットを上回るかどうかを決定し、そうでない場合、整数ビット数を最小閾値に少なくとも等しい値に増加させる。あるいは、最小閾値は、任意の他の整数ビット数であってもよい。
【０１６０】
ブロック１８１８において、例示的なＣＮＮアクセラレータ１３００が、整数ビット数が１２より大きくないと決定した場合、制御はブロック１８２２に進み、整数ビット数を１だけ増加させ、小数ビットを１だけ減少させることにより、累算器の固定小数点フォーマットを調整する。例えば、ＤＰＥ構成最適化器１３０４は、整数ビット数を増加させることにより累算器６０４のレンジを増加させるが、小数ビット数を減少させることにより累算器６０４の精度を減少させることができる。固定小数点フォーマットの調整に応答して、制御はブロック１８２４に進み、加算結果を固定小数点フォーマットに整合させ、累算器に割り当てる。
【０１６１】
ブロック１８１８において、例示的なＣＮＮアクセラレータ１３００が、整数ビット数が１２より大きいと決定した場合、ブロック１８２０において、ＣＮＮアクセラレータ１３００は、整数ビット数を１だけ減少させ、小数ビットを１だけ増加させることにより、固定小数点フォーマットを調整する。例えば、ＤＰＥ構成最適化器１３０４は、整数ビット数を減少させることにより累算器６０４のレンジを減少させるが、小数ビット数を増加させることにより累算器６０４の精度を増加させることができる。
【０１６２】
ブロック１８２０における固定小数点フォーマットの調整に応答して、制御はブロック１８２４に進み、加算結果を固定小数点フォーマットに整合させ、累算器に割り当てる。例えば、ＤＰＥ構成最適化器１３０４は、加算結果を更新された固定小数点フォーマットに整合させ、更新された固定小数点フォーマットを累算器６０４に割り当てることができる。加算結果を固定小数点フォーマットに整合させ、累算器に割り当てたことに応答して、図１８の例示的なマシン読取可能命令１８００は終了する。
【０１６３】
図１９は、図１３のＣＮＮアクセラレータ１３００を実現する図１４〜図１８の命令を実行するように構造化された例示的なプロセッサプラットフォーム１９００のブロック図である。プロセッサプラットフォーム１９００は、例えば、サーバ、パーソナルコンピュータ、ワークステーション、自己学習機械（例えば、ニューラルネットワーク）、モバイルデバイス（例えば、セルフォン、スマートフォン、ｉＰａｄ（登録商標）ＴＭなどのタブレット）、パーソナルデジタルアシスタント（ＰＤＡ）、インターネットアプライアンス、ＤＶＤプレーヤ、ＣＤプレーヤ、デジタルビデオレコーダ、ブルーレイプレーヤ、ゲーミングコンソール、パーソナルビデオレコーダ、セットトップボックス、ヘッドセット若しくは他のウェアラブルデバイス、又は任意の他タイプのコンピュータデバイスであってもよい。
【０１６４】
図示された例のプロセッサプラットフォーム１９００は、プロセッサ１９１２を含む。図示された例のプロセッサ１９１２はハードウェアである。例えば、プロセッサ１９１２は、１つ以上の集積回路、論理回路、マイクロプロセッサ、ＧＰＵ、ＤＳＰ、又は任意の所望のファミリ若しくは製造業者からのコントローラにより実現できる。ハードウェアプロセッサは、半導体ベース（例えば、シリコンベース）デバイスであってもよい。この例において、プロセッサ１９１２は、図１３の例示的なＣＮＮアクセラレータ１３００、例示的なＤＰＥインベントリエンジン１３０２、例示的なＤＰＥ構成最適化器１３０４、例示的なモードセレクタ１３０６、例示的な畳み込みエンジン１３０８、例示的なプーリングエンジン１３１０、及び例示的な全結合エンジン１３１２を実現する。
【０１６５】
図示された例のプロセッサ１９１２は、ローカルメモリ１９１３（例えば、キャッシュ）を含む。図示された例のプロセッサ１９１２は、バス１９１８を介して揮発性メモリ１９１４及び不揮発性メモリ１９１６を含むメインメモリと通信する。揮発性メモリ１９１４は、非同期ダイナミックランダムアクセスメモリ（Synchronous  Dynamic  Random  Access  Memory、ＳＤＲＡＭ）、ダイナミックランダムアクセスメモリ（Dynamic  Random  Access  Memory、ＤＲＡＭ）、ＲＡＭＢＵＳ（登録商標）ダイナミックランダムアクセスメモリ（RAMBUS  Dynamic  Random  Access  Memory、ＲＤＲＡＭ（登録商標））、及び／又は任意の他タイプのランダムアクセスメモリデバイスにより実現されてもよい。不揮発性メモリ１９１６は、フラッシュメモリ及び／又は任意の他の所望タイプのメモリデバイスにより実現されてもよい。メインメモリ１９１４、１９１６へのアクセスは、メモリコントローラにより制御される。
【０１６６】
図示された例のプロセッサプラットフォーム１９００は、インターフェース回路１９２０をさらに含む。インターフェース回路１９２０は、イーサネット（登録商標）インターフェース、ユニバーサルシリアルバス（ＵＳＢ）、Ｂｌｕｅｔｏｏｔｈ（登録商標）インターフェース、近距離通信（ＮＦＣ）インターフェース、及び／又はＰＣＩエクスプレスインターフェースなどの、任意タイプのインターフェース標準により実現されてもよい。
【０１６７】
図示された例において、１つ以上の入力デバイス１９２２がインターフェース回路１９２０に接続されている。入力デバイス１９２２は、ユーザがデータ及び／又はコマンドをプロセッサ１９１２に入力することを可能にする。入力デバイス１９２２は、例えば、オーディオセンサ、マイクロホン、カメラ（静止画又はビデオ）、キーボード、ボタン、マウス、タッチスクリーン、トラックパッド、トラックボール、等点（isopoint）デバイス、及び／又は音声認識システムにより実現できる。
【０１６８】
また、１つ以上の出力デバイス１９２４が、図示された例のインターフェース回路１９２０に接続されている。出力デバイス１９２４は、例えば、ディスプレイデバイス（例えば、発光ダイオード（ＬＥＤ）、有機発光ダイオード（ＯＬＥＤ）、液晶ディスプレイ（ＬＣＤ）、陰極線管ディスプレイ（ＣＲＴ）、インプレーススイッチング（in-place  switching、ＩＰＳ）ディスプレイ、タッチスクリーンなど）、触覚出力デバイス、プリンタ、及び／又はスピーカにより実現できる。ゆえに、図示された例のインターフェース回路１９２０は、グラフィックスドライバカード、グラフィックスドライバチップ、及び／又はグラフィックスドライバプロセッサを典型的に含む。
【０１６９】
図示された例のインターフェース回路１９２０は、ネットワーク１９２６を介した外部マシン（例えば、任意の種類のコンピューティングデバイス）とのデータの交換を容易にするための送信機、受信機、送受信機、モデム、住宅ゲートウェイ、無線アクセスポイント、及び／又はネットワークインターフェースなどの通信デバイスをさらに含む。通信は、例えば、イーサネット接続、デジタル加入者線（ＤＳＬ）接続、電話回線接続、同軸ケーブルシステム、衛星システム、ラインオブサイト（line-of-site）無線システム、セルラー電話システムなどを介してもよい。
【０１７０】
図示された例のプロセッサプラットフォーム１９００は、ソフトウェア及び／又はデータを記憶するための１つ以上の大容量記憶デバイス１９２８をさらに含む。そのような大容量記憶デバイス１９２８の例は、フロッピーディスクドライブ、ハードドライブディスク、コンパクトディスクドライブ、ブルーレイディスクドライブ、リダンダントアレイオブインディペンデントディスク（redundant  array  of  independent  disks、ＲＡＩＤ）、及びデジタル多用途ディスク（ＤＶＤ）ドライブを含む。
【０１７１】
図１４〜図１８のマシン実行可能命令１９３２は、大容量記憶デバイス１９２８内、揮発性メモリ１９１４内、不揮発性メモリ１９１６内、及び／又はＣＤ又はＤＶＤなどの取外し可能な非一時的コンピュータ読取可能記憶媒体上に記憶されてもよい。
【０１７２】
上述から、畳み込みニューラルネットワークの畳み込み効率を向上させる例示的なシステム、方法、装置、及び製造品が開示されていることが理解されるであろう。本明細書に開示される例は、複数の入力チャネルを複数のフィルタで畳み込み、出力チャネルの複数の出力位置を実質的に並列に、及び／又はさもなければ実質的に同時に生成することにより、畳み込み演算を加速する。本明細書に開示される例は、動作モード又は畳み込み配置のうち少なくとも１つに基づいて入力画像データ及びフィルタ係数のためのストレージインスタンスを構成することにより、高められた畳み込み効率を提供する。本明細書に開示される例は、畳み込み演算中に１回だけ入力チャネルの入力位置にアクセスすることによってＣＮＮアクセラレータ内のデータ移動を最小化し及び／又は低減させることにより、低減された電力で向上した畳み込み演算を提供する。
【０１７３】
例１は、畳み込み効率を向上させる装置を含み、当該装置は、プラットフォームに利用可能なデータ処理要素（ＤＰＥ）アレイに含まれるＤＰＥを識別するＤＰＥインベントリエンジンと、上記ＤＰＥのうち識別されたＤＰＥの畳み込み配置を決定するモードセレクタと、上記ＤＰＥのうち上記識別されたＤＰＥに基づいてＤＰＥ利用を決定するＤＰＥ構成最適化器と、上記ＤＰＥ利用がＤＰＥ利用閾を満たすとき上記ＤＰＥのうち上記識別されたＤＰＥを使用して畳み込み演算を容易にする（facilitate）畳み込みエンジンと、を含む。
【０１７４】
例２は、例１に記載の装置を含み、上記畳み込みエンジンは、（ａ）入力チャネルの入力位置の活性化値と（ｂ）上記入力位置に対応するフィルタ係数とを乗算して畳み込み出力を生成し、上記畳み込み出力の和を算出して出力チャネルの出力位置を生成する。
【０１７５】
例３は、例２に記載の装置を含み、上記出力位置は、第１の出力位置であり、上記畳み込みエンジンは、上記第１の出力位置を含む出力位置を含むプールエリアを算出し、上記プールエリアの平均値又は最大値のうち少なくとも１つを算出する。
【０１７６】
例４は、例３の記載の装置を含み、上記畳み込みエンジンは、上記プールエリアの上記少なくとも１つの平均値又は最大値に対して、バイアス演算、スケール演算、パラメトリック正規化器線形ユニット（rectifier  linear  unit）演算、又は正規化器線形ユニット演算のうち少なくとも１つを実行する。
【０１７７】
例５は、例１に記載の装置を含み、上記畳み込み配置は、第１の畳み込み配置であり、上記ＤＰＥ利用は、第１のＤＰＥ利用であり、上記ＤＰＥ構成最適化器は、上記第１のＤＰＥ利用を上記ＤＰＥ利用閾と比較し、上記第１のＤＰＥ利用が上記ＤＰＥ利用閾を満たさないとき上記畳み込み演算の上記容易にすることを防止し、第２の畳み込み配置に関連づけられた第２のＤＰＥ利用を上記ＤＰＥ利用閾と比較し、上記畳み込みエンジンは、上記比較に基づいて上記第２のＤＰＥ利用が上記ＤＰＥ利用閾を満たすとき上記第２の畳み込み配置を使用して上記畳み込み演算を容易にする。
【０１７８】
例６は、例１に記載の装置を含み、上記ＤＰＥアレイは２５６個のＤＰＥを含む。
【０１７９】
例７は、例１に記載の装置を含み、上記畳み込み配置は、１＊２５６、２＊１２８、４＊６４、８＊３２、又は１６＊１６畳み込み配置のうち少なくとも１つである。
【０１８０】
例８は、例１に記載の装置を含み、上記畳み込みエンジンは、実質的に並列に上記ＤＰＥのうち上記識別されたＤＰＥを使用して上記畳み込み演算を容易にする。
【０１８１】
例９は、例１に記載の装置を含み、上記畳み込みエンジンは、累算器の整数ビット数を調整して上記累算器のレンジを修正すること、又は上記累算器の小数ビット数を調整して上記累算器の精度を修正すること、のうち少なくとも１つにより上記畳み込み演算を容易にする。
【０１８２】
例１０は、命令を含む非一時的コンピュータ読取可能記憶媒体を含み、上記命令は、実行されたときにマシンに少なくとも、プラットフォームに利用可能なデータ処理要素（ＤＰＥ）アレイに含まれるＤＰＥを識別し、上記ＤＰＥのうち識別されたＤＰＥの畳み込み配置を決定し、上記ＤＰＥのうち上記識別されたＤＰＥに基づいてＤＰＥ利用を決定し、上記ＤＰＥ利用がＤＰＥ利用閾を満たすとき上記ＤＰＥのうち上記識別されたＤＰＥを使用して畳み込み演算を容易にすることをさせる。
【０１８３】
例１１は、例１０に記載の非一時的コンピュータ読取可能記憶媒体を含み、当該媒体は命令をさらに含み、上記命令は、実行されたときに上記マシンに少なくとも、（ａ）入力チャネルの入力位置の活性化値と（ｂ）上記入力位置に対応するフィルタ係数とを乗算して畳み込み出力を生成し、上記畳み込み出力の和を算出して出力チャネルの出力位置を生成することをさせる。
【０１８４】
例１２は、例１１に記載の非一時的コンピュータ読取可能記憶媒体を含み、上記出力位置は、第１の出力位置であり、当該媒体は命令をさらに含み、上記命令は、実行されたときに上記マシンに少なくとも、上記第１の出力位置を含む出力位置を含むプールエリアを算出し、上記プールエリアの平均値又は最大値のうち少なくとも１つを算出することをさせる。
【０１８５】
例１３は、例１１に記載の非一時的コンピュータ読取可能記憶媒体を含み、当該媒体は命令をさらに含み、上記命令は、実行されたときに上記マシンに少なくとも、上記プールエリアの上記少なくとも１つの平均値又は最大値に対して、バイアス演算、スケール演算、パラメトリック正規化器線形ユニット演算、又は正規化器線形ユニット演算のうち少なくとも１つを実行することをさせる。
【０１８６】
例１４は、例１０に記載の非一時的コンピュータ読取可能記憶媒体を含み、上記畳み込み配置は、第１の畳み込み配置であり、上記ＤＰＥ利用は、第１のＤＰＥ利用であり、当該媒体は命令をさらに含み、上記命令は、実行されたときに上記マシンに少なくとも、上記第１のＤＰＥ利用を上記ＤＰＥ利用閾と比較し、上記第１のＤＰＥ利用が上記ＤＰＥ利用閾を満たさないとき上記畳み込み演算の上記容易にすることを防止し、第２の畳み込み配置に関連づけられた第２のＤＰＥ利用を上記ＤＰＥ利用閾と比較し、上記比較に基づいて上記第２のＤＰＥ利用が上記ＤＰＥ利用閾を満たすとき上記第２の畳み込み配置を使用して上記畳み込み演算を容易にすることをさせる。
【０１８７】
例１５は、例１０に記載の非一時的コンピュータ読取可能記憶媒体を含み、上記ＤＰＥアレイは２５６個のＤＰＥを含む。
【０１８８】
例１６は、例１０に記載の非一時的コンピュータ読取可能記憶媒体を含み、上記畳み込み配置は、１＊２５６、２＊１２８、４＊６４、８＊３２、又は１６＊１６畳み込み配置のうち少なくとも１つである。
【０１８９】
例１７は、例１０に記載の非一時的コンピュータ読取可能記憶媒体を含み、上記ＤＰＥのうち上記識別されたＤＰＥは、実質的に並列に上記畳み込みを容易にする。
【０１９０】
例１８は、例１０に記載の非一時的コンピュータ読取可能記憶媒体を含み、当該媒体は命令をさらに含み、上記命令は、実行されたときに上記マシンに少なくとも、累算器の整数ビット数を調整して上記累算器のレンジを修正し、あるいは上記累算器の小数ビット数を調整して上記累算器の精度を修正することをさせる。
【０１９１】
例１９は、畳み込み効率を向上させる方法を含み、当該方法は、プラットフォームに利用可能なデータ処理要素（ＤＰＥ）アレイに含まれるＤＰＥを識別するステップと、上記ＤＰＥのうち識別されたＤＰＥの畳み込み配置を決定するステップと、上記ＤＰＥのうち上記識別されたＤＰＥに基づいてＤＰＥ利用を決定するステップと、上記ＤＰＥ利用がＤＰＥ利用閾を満たすとき上記ＤＰＥのうち上記識別されたＤＰＥを使用して畳み込み演算を容易にするステップと、を含む。
【０１９２】
例２０は、例１９に記載の方法を含み、（ａ）入力チャネルの入力位置の活性化値と（ｂ）上記入力位置に対応するフィルタ係数とを乗算して畳み込み出力を生成するステップと、上記畳み込み出力の和を算出して出力チャネルの出力位置を生成するステップと、をさらに含む。
【０１９３】
例２１は、例２０に記載の方法を含み、上記出力位置は、第１の出力位置であり、当該方法は、上記第１の出力位置を含む出力位置を含むプールエリアを算出するステップと、上記プールエリアの平均値又は最大値のうち少なくとも１つを算出するステップと、をさらに含む。
【０１９４】
例２２は、例２１に記載の方法を含み、上記プールエリアの上記少なくとも１つの平均値又は最大値に対して、バイアス演算、スケール演算、パラメトリック正規化器線形ユニット演算、又は正規化器線形ユニット演算のうち少なくとも１つを実行するステップ、をさらに含む。
【０１９５】
例２３は、例１９に記載の方法を含み、上記畳み込み配置は、第１の畳み込み配置であり、上記ＤＰＥ利用は、第１のＤＰＥ利用であり、当該方法は、上記第１のＤＰＥ利用を上記ＤＰＥ利用閾と比較するステップと、上記第１のＤＰＥ利用が上記ＤＰＥ利用閾を満たさないとき上記畳み込み演算の上記容易にすることを防止するステップと、第２の畳み込み配置に関連づけられた第２のＤＰＥ利用を上記ＤＰＥ利用閾と比較するステップと、上記比較に基づいて上記第２のＤＰＥ利用が上記ＤＰＥ利用閾を満たすとき上記第２の畳み込み配置を使用して上記畳み込み演算を容易にするステップと、を含む。
【０１９６】
例２４は、例１９に記載の方法を含み、上記ＤＰＥアレイは２５６個のＤＰＥを含む。
【０１９７】
例２５は、例１９に記載の方法を含み、上記畳み込み配置は、１＊２５６、２＊１２８、４＊６４、８＊３２、又は１６＊１６畳み込み配置のうち少なくとも１つである。
【０１９８】
例２６は、例１９に記載の方法を含み、上記ＤＰＥのうち上記識別されたＤＰＥは、実質的に並列に上記畳み込みを容易にする。
【０１９９】
例２７は、例１９に記載の方法を含み、上記畳み込み演算を容易にするステップは、累算器の整数ビット数を調整して上記累算器のレンジを修正するステップ、又は上記累算器の小数ビット数を調整して上記累算器の精度を修正するステップ、のうち少なくとも１つを含む。
【０２００】
例２８は、畳み込み効率を向上させる装置を含み、当該装置は、プラットフォームに利用可能なＤＰＥアレイに含まれるＤＰＥを識別する第１の手段と、上記ＤＰＥのうち識別されたＤＰＥの畳み込み配置を決定する第２の手段と、上記ＤＰＥのうち上記識別されたＤＰＥに基づいてＤＰＥ利用を決定する第３の手段と、上記ＤＰＥ利用がＤＰＥ利用閾を満たすとき上記ＤＰＥのうち上記識別されたＤＰＥを使用して畳み込み演算を容易にする第４の手段と、を含む。
【０２０１】
例２９は、例２８に記載の装置を含み、上記第４の手段は、（ａ）入力チャネルの入力位置の活性化値と（ｂ）上記入力位置に対応するフィルタ係数とを乗算して畳み込み出力を生成し、上記畳み込み出力の和を算出して出力チャネルの出力位置を生成する。
【０２０２】
例３０は、例２９に記載の装置を含み、上記出力位置は、第１の出力位置であり、上記第４の手段は、上記第１の出力位置を含む出力位置を含むプールエリアを算出し、上記プールエリアの平均値又は最大値のうち少なくとも１つを算出する。
【０２０３】
例３１は、例３０に記載の装置を含み、上記第４の手段は、上記プールエリアの上記少なくとも１つの平均値又は最大値に対して、バイアス演算、スケール演算、パラメトリック正規化器線形ユニット演算、又は正規化器線形ユニット演算のうち少なくとも１つを実行する。
【０２０４】
例３２は、例２８に記載の装置を含み、上記畳み込み配置は、第１の畳み込み配置であり、上記ＤＰＥ利用は、第１のＤＰＥ利用であり、上記第３の手段は、上記第１のＤＰＥ利用を上記ＤＰＥ利用閾と比較し、上記第１のＤＰＥ利用が上記ＤＰＥ利用閾を満たさないとき上記畳み込み演算の上記容易にすることを防止し、第２の畳み込み配置に関連づけられた第２のＤＰＥ利用を上記ＤＰＥ利用閾と比較し、上記第４の手段は、上記比較に基づいて上記第２のＤＰＥ利用が上記ＤＰＥ利用閾を満たすとき上記第２の畳み込み配置を使用して上記畳み込み演算を容易にする。
【０２０５】
例３３は、例２８に記載の装置を含み、上記ＤＰＥアレイは２５６個のＤＰＥを含む。
【０２０６】
例３４は、例２８に記載の装置を含み、上記畳み込み配置は、１＊２５６、２＊１２８、４＊６４、８＊３２、又は１６＊１６畳み込み配置のうち少なくとも１つである。
【０２０７】
例３５は、例２８に記載の装置を含み、上記第４の手段は、実質的に並列に上記ＤＰＥのうち上記識別されたＤＰＥを使用して上記畳み込み演算を容易にする。
【０２０８】
例３６は、例２８に記載の装置を含み、上記第４の手段は、累算器の整数ビット数を調整して上記累算器のレンジを修正すること、又は上記累算器の小数ビット数を調整して上記累算器の精度を修正すること、のうち少なくとも１つにより上記畳み込み演算を容易にする。
【０２０９】
本明細書に開示された例は、それぞれのゲートウェイに対するリンクを通して結合されたモノのインターネット（ＩｏＴ）ネットワークに適用してもよい。モノのインターネット（ＩｏＴ）は、多数のコンピューティングデバイスが互いに及びインターネットに相互接続されて、かなり低いレベルでの機能性及びデータ獲得を提供する概念である。ゆえに、本明細書で用いられるとき、ＩｏＴデバイスは、他のＩｏＴデバイス及びインターネットなどのより広いネットワークと通信して、とりわけ、感知又は制御などの機能を実行する半自律デバイスを含んでもよい。
【０２１０】
しばしば、ＩｏＴデバイスは、メモリ、サイズ、又は機能性において制限され、より多数を、より少数のより大きいデバイスと同様のコストで展開させることができる。しかしながら、ＩｏＴデバイスは、スマートフォン、ラップトップ、タブレット、若しくはＰＣ、又は他のより大きいデバイスであってもよい。さらに、ＩｏＴデバイスは、スマートフォン又は他のコンピューティングデバイス上のアプリケーションなどの仮想デバイスであってもよい。ＩｏＴデバイスは、ＩｏＴゲートウェイを含んでもよく、ＩｏＴゲートウェイは、データ記憶、処理制御などのために、ＩｏＴデバイスを他のＩｏＴデバイスに、及びクラウドアプリケーションに結合するために使用される。
【０２１１】
ＩｏＴデバイスのネットワークは、水分配システム、電力分配システム、パイプライン制御システム、プラント制御システム、ライトスイッチ、サーモスタット、ロック、カメラ、アラーム、動きセンサなどの、商用及びホームオートメーションデバイスを含んでもよい。ＩｏＴデバイスは、例えば、システムを制御し、又はデータにアクセスするために、リモートのコンピュータ、サーバ、及び他のシステムを通してアクセス可能であってもよい。
【０２１２】
インターネット及び同様のネットワークの将来の成長は、かなり多数のＩｏＴデバイスを伴う可能性がある。したがって、本明細書で論じられる手法の文脈において、このような将来のネットワーキングのための多くのイノベーションは、全てのこれらの層が妨げられずに成長し、接続されたリソースを発見し、アクセス可能にし、接続されたリソースを隠し、区分する能力をサポートする必要に対処する。任意数のネットワークプロトコル及び通信標準が使用されてもよく、各プロトコル及び標準は、特定の目的に対処するよう設計される。さらに、プロトコルは、位置、時間、又は空間にかかわらず動作する人間によりアクセス可能なサービスをサポートするファブリックの一部である。イノベーションには、サービスデリバリ及びハードウェア及びソフトウェアなどの関連づけられたインフラストラクチャ、セキュリティ強化、サービスレベル及びサービスデリバリ合意に規定されたサービス品質（ＱｏＳ）条件に基づくサービスの供給が含まれる。
【０２１３】
バックボーンリンクは、光ネットワークを含む任意数の有線又は無線技術を含んでもよく、ローカルエリアネットワーク（ＬＡＮ）、ワイドエリアネットワーク（ＷＡＮ）、又はインターネットの一部であってもよい。さらに、このような通信リンクは、様々なデバイスの相互接続を容易にするＭＵＸｉｎｇ／ｄｅＭＵＸｉｎｇコンポーネントの使用を含む、ＩｏＴデバイス及びゲートウェイ双方の間の光信号経路を容易にする。
【０２１４】
ネットワークトポロジは、Ｂｌｕｅｔｏｏｔｈ低エネルギー（Bluetooth  low  energy、ＢＬＥ）リンクを使用するネットワークで提供されるメッシュネットワークなどの、任意数のタイプのＩｏＴネットワークを含んでもよい。存在し得る他タイプのＩｏＴネットワークには、ＩＥＥＥ８０２．１１（Ｗｉ‐Ｆｉ（登録商標））リンクを通してＩｏＴデバイスと通信するために使用される無線ローカルエリアネットワーク（ＷＬＡＮ）ネットワーク、ＬＴＥ／ＬＴＥ‐Ａ（４Ｇ）又は５Ｇセルラーネットワークを通してＩｏＴデバイスと通信するために使用されるセルラーネットワーク、及び低電力ワイドエリア（low-power  wide  area、ＬＰＷＡ）ネットワーク、例えば、ＬｏＲａアライアンスにより公表されたＬｏＲａＷａｎ仕様と互換性があるＬＰＷＡネットワーク、又はインターネットエンジニアリングタスクフォース（ＩＥＴＦ）により公表された仕様と互換性があるＩＰｖ６オーバー低電力ワイドエリアネットワーク（Low  Power  Wide-Area  Networks、ＬＰＷＡＮ）ネットワークが含まれる。さらに、それぞれのＩｏＴネットワークは、ＬＴＥセルラーリンク、ＬＰＷＡリンク、又はＺｉｇｂｅｅ（登録商標）などのＩＥＥＥ８０２．１５．４標準に基づくリンクなどの任意数の通信リンクを使用して、外部ネットワークプロバイダ（例えば、ティア（tier）２又はティア３プロバイダ）と通信してもよい。それぞれのＩｏＴネットワークはまた、制約付きアプリケーションプロトコル（Constrained  Application  Protocol、ＣｏＡＰ）などの様々なネットワーク及びインターネットアプリケーションプロトコルを使用して動作してもよい。それぞれのＩｏＴネットワークはまた、リンクされたデバイス及びネットワークのクラスタツリーを形成するリンクのチェーンを提供するコーディネータデバイスと統合されてもよい。
【０２１５】
これらＩｏＴネットワークの各々は、本明細書に記載されているものなどの新しい技術的特徴のための機会を提供し得る。向上した技術及びネットワークは、フォグデバイス又はシステムとしてのＩｏＴネットワークの使用を含む、デバイス及びネットワークの指数関数的な成長を可能にし得る。このような向上した技術の利用が増えたとき、ＩｏＴネットワークは、直接的な人間の介入を必要とせず、自己管理、機能的進化、及び協調に対して開発される可能性がある。向上した技術は、ＩｏＴネットワークが中央集権的な制御システムなしに機能することさえ可能にし得る。したがって、本明細書に記載される向上した技術は、現在の実装をはるかに超えてネットワーク管理及び動作機能を自動化し、強化するために使用されてもよい。
【０２１６】
一例において、バックボーンリンク上などのＩｏＴデバイス間の通信は、認証、認可、及びアカウンティング（authentication,  authorization,  and  accounting、ＡＡＡ）のために非中央集権的なシステムにより保護されてもよい。非中央集権的なＡＡＡシステムでは、分散された支払い、クレジット、監査、認可、及び認証システムが、相互接続された異種ネットワークインフラストラクチャにわたり実現され得る。これは、システム及びネットワークが自律的な動作に移ることを可能にする。これらタイプの自律的な動作では、マシンは、人的リソースについて契約し、他のマシンネットワークとの間でパートナーシップを交渉することさえあり得る。これは、計測、測定、トレーサビリティ、及び追跡可能性を提供するソリューションを達成するだけでなく、概説され、計画されたサービスレベル合意に対して相互の目標及びバランスのとれたサービスデリバリの達成を可能にし得る。新しいサプライチェーン構造及び方法の創造は、いかなる人間の関与もなしに多数のサービスを創造させ、価値についてマイニングさせ、崩壊させる可能性がある。
【０２１７】
このようなＩｏＴネットワークは、音、光、電子トラフィック、顔及びパターン認識、嗅覚、振動などのセンシング技術をＩｏＴデバイス間の自律組織に統合することによりさらに強化されてもよい。感知システムの統合は、契約サービス目標、オーケストレーション、及びサービス品質（ＱｏＳ）に基づくリソースの群化及び融合に対するサービスデリバリの系統的及び自律的な通信及び協調を可能にし得る。
【０２１８】
ＩｏＴデバイスのクラスタは、クラウドネットワークと同様に、他のＩｏＴデバイスと通信するように装備されてもよい。これは、ＩｏＴデバイスがデバイス間のアドホックネットワークを形成することを可能にでき、これらが、フォグデバイスと呼ばれ得る単一のデバイスとして機能することを可能にする。
【０２１９】
ＩｏＴデバイスのメッシュネットワークと通信するクラウドコンピューティングネットワークは、クラウドコンピューティングネットワークのエッジでフォグデバイスとして動作し得る。ＩｏＴデバイスのメッシュネットワークはフォグと呼ばれ、クラウドのエッジで動作し得る。
【０２２０】
フォグは、大規模に相互接続されたネットワークであると考えられてもよく、多数のＩｏＴデバイスが、例えば無線リンクにより互いに通信する。一例として、この相互接続されたネットワークは、オープンコネクティビティファウンデーションＴＭ（Open  Connectivity  Foundation、ＯＣＦ）によりリリースされた相互接続仕様を使用して容易にされ得る。この標準は、デバイスが互いを発見し、相互接続のための通信を確立することを可能にする。他の相互接続プロトコルが使用されてもよく、例えば、とりわけ、オプティマイズド・リンク・ステート・ルーティング（optimized  link  state  routing、ＯＬＳＲ）プロトコル、ベター・アプローチ・トゥ・モバイル・アドホック・ネットワーキング（better  approach  to  mobile  ad-hoc  networking、Ｂ．Ａ．Ｔ．Ｍ．Ａ．Ｎ．）ルーティングプロトコル、又はＯＭＡライトウェイトＭ２Ｍ（ＬＷＭ２Ｍ）プロトコルが含まれる。
【０２２１】
ＩｏＴデバイスの３つのタイプは、ゲートウェイ、データアグリゲータ、及びセンサを含むが、ＩｏＴデバイス及び機能性の任意の組み合わせが使用されてもよい。ゲートウェイは、クラウドとフォグとの間の通信を提供するエッジデバイスであってもよく、さらに、動きデータ、フローデータ、温度データなどのセンサから取得されたデータのバックエンド処理機能を提供してもよい。データアグリゲータは、任意数のセンサからデータを収集し、解析のためのバックエンド処理機能を実行してもよい。結果、生データ、又は双方が、ゲートウェイを通してクラウドに渡されてもよい。センサは、フルのＩｏＴデバイスであってもよく、例えば、データの収集及びデータの処理の双方が可能である。いくつかの場合、センサは、機能性においてより限定されてもよく、例えば、データを収集し、データアグリゲータ又はゲートウェイがデータを処理することを可能にする。
【０２２２】
任意のＩｏＴデバイスからの通信は、ＩｏＴデバイスのうち任意のものの間の便利なパス（例えば、最も便利なパス）に沿って渡されてゲートウェイに到達し得る。これらのネットワークでは、相互接続の数が実質的な冗長性を提供し、複数のＩｏＴデバイスのロスがあっても通信が維持されることを可能にする。さらに、メッシュネットワークの使用は、別のＩｏＴデバイスに接続するためのレンジがゲートウェイに接続するためのレンジよりはるかに小さい可能性があるとき、かなり低電力か又はインフラストラクチャから離れて位置するＩｏＴデバイスが使用されることを可能にする。
【０２２３】
これらのＩｏＴデバイスから提供されるフォグは、クラウドのエッジに位置する単一のデバイス、例えばフォグデバイスとして、サーバなどのクラウド内のデバイスに提示されてもよい。この例において、フォグ内のデバイスから来る警告は、フォグ内の特定のＩｏＴデバイスから来ていると識別されることなく、送信されてもよい。このように、フォグは、コンピューティング及びストレージリソースを提供し、とりわけデータ解析、データ集約、及び機械学習などの処理又はデータ集中的タスクを実行する分散プラットフォームと考えられてもよい。
【０２２４】
いくつかの例において、ＩｏＴデバイスは、命令型プログラミングスタイルを使用して構成されてもよく、例えば、各ＩｏＴデバイスは、特定の機能及び通信パートナーを有する。しかしながら、フォグデバイスを形成するＩｏＴデバイスは、宣言型プログラミングスタイルで構成でき、ＩｏＴデバイスがその動作及び通信を再構成すること、例えば、条件、問い合わせ、及びデバイス故障に応答して必要なリソースを決定することを可能にする。一例として、サーバに位置するユーザからの、ＩｏＴデバイスにより監視される機器のサブセットの動作に関する問い合わせは、フォグデバイスが問い合わせに答えるために必要とされる特定のセンサなどのＩｏＴデバイスを選択する結果をもたらし得る。次いで、これらセンサからのデータは、問い合わせに答えるためにフォグデバイスによりサーバに送信される前に、センサ、データアグリゲータ、又はゲートウェイのうち任意の組み合わせにより集約され、解析され得る。この例において、フォグ内のＩｏＴデバイスは、フローセンサ又は温度センサからのデータを追加するなど、問い合わせに基づいて使用されるセンサを選択してもよい。さらに、ＩｏＴデバイスのいくつかが動作していない場合、利用可能であれば、フォグデバイス内の他のＩｏＴデバイスが類似のデータを提供してもよい。
【０２２５】
特定の例示的なシステム、方法、装置、及び製造品が本明細書で開示されたが、本特許の適用の範囲はこれらに限定されない。反対に、本特許は、本特許の特許請求の範囲内に公正に該当する全てのシステム、方法、装置、及び製造品をカバーする。
【図１】
2020521263.tif 000004
【図２】
2020521263.tif 000005
【図３】
2020521263.tif 000006
【図４】
2020521263.tif 000007
【図５】
2020521263.tif 000008
【図６】
2020521263.tif 000009
【図７】
2020521263.tif 000010
【図８】
2020521263.tif 000011
【図９】
2020521263.tif 000012
【図１０】
2020521263.tif 000013
【図１１】
2020521263.tif 000014
【図１２】
2020521263.tif 000015
【図１３】
2020521263.tif 000016
【図１４】
2020521263.tif 000017
【図１５】
2020521263.tif 000018
【図１６】
2020521263.tif 000019
【図１７】
2020521263.tif 000020
【図１８】
2020521263.tif 000021
【図１９】
2020521263.tif 000022
【国際調査報告】
2020521263.tif 000023
2020521263.tif 000024
2020521263.tif 000025