パーソナル及び/又はその他のモバイルデバイスを含む典型的なコンピューティングシステムは、高度な画像処理又はコンピュータビジョンアルゴリズムを採用して、人間の視覚系が実行できるタスクを自動化する。コンピュータビジョンタスクは、デジタル画像を取得し、処理し、解析し、理解することを含み、これは、部分的に、デジタル画像から次元データを抽出して数値及び/又はシンボル情報を生成することを容易にする。コンピュータビジョンアルゴリズムは、数値及び/又はシンボル情報を使用して、とりわけ、3次元(3D)ポーズ推定、イベント検出、オブジェクト認識、ビデオ追跡等に関連づけられた判断を行い、かつ/あるいはその他の方法で動作を実行することができる。
高度な画像処理又はコンピュータビジョンアルゴリズムは、畳み込みニューラルネットワーク(CNN、又はConvNet)を採用することができる。CNNは、画像を分類し、類似性により画像をクラスタ化し(例えば、フォトサーチ)、畳み込みを使用して画像内のオブジェクト認識を実行するために典型的に使用される、深い人工ニューラルネットワークである。本明細書で用いられるとき、畳み込みは、2つの所与の関数のうち一方の形状が他方の関数の形状によりどのように修正されるかを表す統合により、該2つの所与の関数から導出される関数を参照する。例えば、CNNを使用して、画像特徴(例えば、水平線、2次元(2D)形状等)に対応する1つ以上のフィルタを入力画像に通して入力画像内の画像特徴のマッチを識別することにより、入力画像に含まれる顔、個人、街路標識、動物などを識別することができる。
いくつかの例において、CNNは、画像をテンソルとして取り込み、かつ/あるいはその他の方法で処理し、テンソルは、さらなる次元を有する数字の行列である。例えば、CNNは、3Dテンソルにより表される入力画像を取得することができ、第1及び第2の次元は、行列の幅及び高さに対応し、第3の次元は、行列の深さに対応する。例えば、行列の幅及び高さは、入力画像の幅及び高さに対応でき、行列の深さは、色深度(例えば、色レイヤ)又は画像の色符号化(例えば、赤‐緑‐青(RGB)符号化)に対応できる。
ニューラルネットワークと比較して、CNNは、フル画像に十分にスケーリングする。例えば、典型的なニューラルネットワークは、入力(例えば、単一ベクトル)を受け取り、該入力を一連の隠れ層を通して変換する。各隠れ層は、ニューロンのセットを含み、各ニューロンは、前の層内の全てのニューロンに全結合され(fully-connected)、単一の層内のニューロンは、完全に独立して機能し、いかなる接続も共有しない。このような例において、典型的なニューラルネットワークは、200×200×3(例えば、200画素×200画素×3の色深度)の画像を120,000の重みに翻訳することができ、各重みは、1つより多くのニューロンを有することができる。例えば、画像は、各色深度に対応する3つの入力チャネルを有することができ、各入力チャネルは、200画素×200画素の大きさを有する。
典型的なCNNはまた、入力を受け取り、該入力を一連の隠れ層を通して変換することができる。例えば、CNNは、複数の畳み込み層、プーリング層、及び/又は全結合層を有することができる。このような例において、CNNは、畳み込み層とプーリング層と全結合層とを含む複数の層トリプレットを有することができる。いくつかの例において、CNNは、1つ以上の全結合層に出力する複数の畳み込み及びプーリング層ペアを有する。いくつかの例において、CNNは、20層、30層等を含むことができる。
畳み込み層は、畳み込み関数又は演算を適用して、入力(前の)層の画像をCNNにおける次の層にマッピングする。各入力層が入力画像に関連づけられた複数の入力特徴(例えば、入力チャネル)を有することができるため、畳み込みは3Dである。畳み込み層は、各個々の入力チャネル内に領域フィルタウィンドウを形成し、(1)領域フィルタウィンドウに関連づけられたフィルタ重みと(2)領域フィルタウィンドウによりカバーされる入力データとの積を算出することにより出力データ又は活性化(activations)を生成することによって、畳み込みを実行する。例えば、入力画像の出力特徴は、畳み込みフィルタを使用して複数の領域フィルタウィンドウを含む複数の入力チャネルをスキャンすることにより決定できる。
プーリング層は、各出力チャネル内の活性化のセットから情報を抽出する。プーリング層は、最大プーリング層に対応する最大プーリング演算又は平均プーリング層に対応する平均プーリング演算を実行することができる。最大プーリング演算は、プーリングウィンドウ内で活性化の最大値を選択することを含む。平均プーリング演算は、プーリングウィンドウ内で活性化の平均値を算出することを含む。
全結合層は、畳み込み層及び/又はプーリング層により算出されたデータを取得し、データを1つ以上のクラスに分類する。全結合層は、分類されたデータが入力画像の特定の画像特徴に対応するかどうかを決定する。例えば、全結合層は、分類されたデータが単純な画像特徴(例えば、水平線)に対応するか、あるいは動物(例えば、猫)のようなより複雑な画像特徴に対応するかを決定することができる。
いくつかの例において、CNNは、畳み込み層、プーリング層等の後に開始されるパラメトリック正規化線形ユニット(Parametric Rectified Linear Unit、PReLU)演算又は正規化線形ユニット(Rectified Linear Unit、ReLU)演算などの後処理演算を実行する。PReLU演算及びReLU演算は、CNNニューロンの出力に適用される活性化関数に対応する。例えば、CNNが畳み込み層、プーリング層等から出力を生成した後、PReLU演算又はReLU演算は、活性化に対して要素ごと活性化関数を適用することを含むことができる。例えば、PReLU演算は、出力がPReLUベースパラメータより小さいとき、第1のPReLUパラメータで活性化に乗算し、かつ/あるいはその他の方法でスケーリングすることを含むことができる。他の例において、PReLU演算は、活性化がPReLUベースパラメータより大きいとき、第2のPReLUパラメータで活性化に乗算し、かつ/あるいはその他の方法でスケーリングすることを含むことができる。ReLU演算は、活性化に最大関数を適用することを含むことができ、ReLU演算は、ゼロと活性化との間の最大値を返す。このような例において、ReLU演算は、任意の負の要素をゼロに設定することを含むことができ、ゆえに、活性化に対するさらなる指数関数、乗算、又は除算演算を排除及び/又はその他の方法で回避することにより、CNNの訓練を高速化する。
しかしながら、CNNの隠れ層は、幅、高さ、及び深さを含む3つの次元に配置されたニューロンを有することができる。CNNの層内のニューロンの各々は、その前の層の一部分(例えば、比較的小さい領域(例えば、2×2活性化マップ、3×3活性化マップ等))にのみ接続される。一層の全てのニューロンが先行層の全てのニューロンに接続される典型的なニューラルネットワークと比較して、CNN層のニューロンは、実質的により少ない数の層間接続に起因して、実質的により少ない重みを結果としてもたらす。
本明細書に開示される例は、CNN演算の効率を向上させる。本明細書に開示される一例示的なCNNアクセラレータは、任意のPReLU/ReLU/ReLU‐X、及び活性化ごとのスケーリング及びバイアスを有する、全結合を含む任意の層における任意の非重複最大及び平均プーリングを有する、マルチチャネルCNN行列‐行列畳み込みを実現する。個々の畳み込み演算を順次実行した従来の実装と比較して、本明細書に開示される例示的なCNNアクセラレータは、複数の畳み込み演算を実質的に並列に実行する。さらに、例示的なCNNアクセラレータは、重複プーリング(例えば、最大プーリング、平均プーリング等)演算を実現することができる。
図1は、畳み込みを使用した例示的な入力ボリューム102及び例示的な出力ボリューム104の例示的な畳み込み演算100を示す。図1の例示的な入力ボリューム102は、多次元行列に記憶された画素値により表される例示的な入力画像(例えば、写真、ビデオフレーム等)106に対応する。例えば、入力画像106は、カメラなどのデバイスから、又はメモリ(例えば、不揮発性メモリ、揮発性メモリ等)から取り出せる。例示的な入力ボリューム102は、多次元行列を表す例示的な入力チャネル(C1、CC等)110、112のセットを含む。例示的な入力ボリューム102は、X×Y×Cにより表され、X及びYは、例示的な画素108における、例示的な入力チャネル110、112の各々の大きさであり、Cは、入力チャネルの数又は入力ボリューム102の深さを表す。例示的な画素108の各々は、数字で表される。例えば、数字は、画素108の色の強度(例えば、赤、緑、又は青の強度)に対応できる。
図1の図示された例において、入力ボリューム102は、大きさX及びYを有する第1のチャネル110と大きさX及びYを有するCチャネル112とを含む複数の多次元行列を含む。いくつかの例において、入力チャネルCの数量は、入力画像の色符号化(例えば、赤‐緑‐青(RGB)符号化)に対応する。例えば、入力ボリューム102は、200×200×3のサイズの入力画像106に対応でき、入力画像106は、200画素の高さ(例えば、Y=200)、200画素の幅(例えば、X=200)であり、3つの符号化色(例えば、C=3)を有する。
図1の図示された例において、出力ボリューム104は、第1の例示的なフィルタ(フィルタ1)114及び第2の例示的なフィルタ(フィルタK)116などの例示的なフィルタを使用して入力ボリューム102を畳み込むことにより生成される。図1の例示的なフィルタ114、116は、画像特徴に対応する。例えば、画像特徴は、入力画像106に含まれ得る水平線、垂直線、対角線等であり得る。あるいは、例示的なフィルタ114、116は、特徴検出器又はカーネルと呼ばれる。図1の図示された例において、フィルタ114、116は、大きさFw、Fh、Cの多次元行列である。Fwは、係数又は重みにおける、フィルタ114、116の幅(例えば、第1のフィルタ114に関連づけられた第1の係数118、第2のフィルタ116に関連づけられた第2の係数120等)を表し、Fhは、係数118、120における、フィルタ114、116の高さを表し、Cは、フィルタ114、116の深さを表す。図1の図示された例において、入力ボリューム102の深さは、フィルタ114、116の深さにマッチする。例えば、フィルタチャネルの数量は、Cにより表される入力チャネルの数量に等しい。例示的な係数118、120は、例示的な入力画像106に含まれる画像特徴を識別するために調整できる学習可能値を表す。
図1の図示された例において、フィルタ114、116のそれぞれのチャネル(例えば、C1、C2、CC等)は、9つの例示的な係数118、120を含む3×3行列である。あるいは、例示的なフィルタ114、116のチャネルは、異なる数の係数を含む異なる行列サイズであってもよい。図1の図示された例において、第1のフィルタ(フィルタ1)114は第1の係数118を含み、第2のフィルタ(フィルタK)116は第2の係数120を含み、第1の係数118は第2の係数120と異なる。あるいは、第1の例示的な係数118のうち1つ以上及び第2の例示的な係数120のうち1つ以上が、同じであってもよい。図1の図示された例において、フィルタ114、116は、各チャネルについて異なる係数を含む。図1の図示された例において、畳み込み演算100は、K個のフィルタ114、116を使用する。例えば、畳み込み演算100は、50個のフィルタ(例えば、K=50)、100個のフィルタ(例えば、K=100)等を使用することができる。
動作において、例示的な出力位置122は、例示的な入力チャネル部分124と例示的なフィルタ114、116とのドット積を実行することにより生成される。典型的なCNNにおいて、例示的な出力位置122などの出力位置は、活性化と呼ぶこともできる。例えば、畳み込み演算100は、第1のフィルタ114の第1のフィルタチャネルと第1の入力チャネル110の入力チャネル部分124との第1のドット積を算出することを含むことができる。例示的な畳み込み演算100は、第1の例示的なフィルタ114の第2のフィルタチャネルと第2の例示的な入力チャネル112の例示的な入力チャネル部分124との第2のドット積を算出することを含むことができる。入力チャネル124の各々についてドット積が算出されるまで、さらなるドット積が算出される。
図1の図示された例において、C個のドット積が、各々がCの深さを有するフィルタ114、116に基づいて出力位置122の各々について算出される。このような例において、例示的な出力チャネル128の第1の例示的な出力チャネル(K1)126の出力位置122は、第1のドット積、第2のドット積等、最大C個のドット積までの和を決定することにより算出される。典型的なCNNにおいて、第1の例示的な出力チャネル126などの出力チャネルは、活性化マップ、特徴マップ、又は畳み込み特徴と呼ぶこともできる。
第1の例示的な出力チャネル126の例示的な出力位置122の算出に応答して、ドット積は、第2の例示的な入力チャネル部分130、第3の例示的な入力チャネル部分132等について、第1の例示的な入力チャネル110の全体が処理されるまで算出される。第1の例示的な入力チャネル110の全体の処理に応答して、例示的な畳み込み演算100は、残りの入力チャネル(例えば、C2、C3など、最大CCまで)の各々について上述の演算を実行することを続行し、例示的な出力チャネル128のうち対応するものを生成する。
図1の図示された例において、畳み込み演算100は、入力チャネル部分124に1回だけアクセスする。第1の例示的な出力チャネル122が考えられる場合、入力データ及び関連づけられたフィルタリングのみが読み出される必要があり、全ての後の出力チャネル128について、対応する異なるフィルタを用いて繰り返すことができる。例示的な畳み込み演算100を順次でなく並列に実行することにより、必要とされるデータの量が低減される。入力データの複数のチャネルが適切な例示的なフィルタ114、116と畳み込まれて、複数の例示的な出力チャネル128のための例示的な出力位置122を並列に生成し、これは、いくつかの例において、各々任意にプールされる。
図2は、「出力位置ごと」ベースの例示的なマルチチャネル畳み込み演算200を示す。例えば、マルチチャネル畳み込み演算200は、活性化ごとベースで実行できる。図2の例示的なマルチチャネル畳み込み演算200は、例示的なCNN(例えば、CNNアクセラレータ、CNNハードウェアアクセラレータ等)の例示的な畳み込み層を表す。例えば、マルチチャネル畳み込み演算200は、プーリング層に活性化を提供することができ、プーリング層は同様に、全結合層(例えば、非線形層)又は別の畳み込み層に活性化を提供することができる。このような例において、全結合層は、別の畳み込み、プーリング、及び全結合層を含む別の層トリプレットに活性化を提供することができる。
図2の図示された例において、列又はワードにおける大きさX(例えば、16ビットワード)と行における大きさYとを有する例示的な入力データ202は、大きさFw及びFhの複数の例示的なフィルタ204を使用して畳み込まれ、Fw及びFhは双方、3である。例えば、入力データ202は、図1の入力画像106から、及び/又はメモリから取得できる。図2の図示された例において、入力データ202は、複数の入力チャネルが畳み込まれるためにローカルに記憶されたL個の例示的なデータ行206を含む。図2の図示された例では、行206の一部分が、各入力チャネルについて記憶される。いくつかの例において、行206は、入力チャネルのデータの全てを含み、一方で他の例において、行206は、入力チャネルのデータの一部分を含む。
図2の図示された例において、マルチチャネル畳み込み演算200は、例示的な出力チャネル210の例示的な出力位置208の各々を実質的に並列に生成することを含む。例えば、データ行206のうち第1のデータ行が、出力チャネル210のうち第2の出力チャネルに含まれる出力位置208のうち第2の出力位置を生成するためにフィルタ204のうち第2のフィルタを使用して畳み込まれるのと実質的に並列に、データ行206のうち第1のデータ行が、出力チャネル210のうち第1の出力チャネルに含まれる出力位置208のうち第1の出力位置を生成するためにフィルタ204のうち第1のフィルタを使用して畳み込まれる。
図2の図示された例において、出力チャネル210の各々は、その独自の累算器(例えば、ハードウェア及び/又はマシン読取可能命令で実現される累算器)を有し、かつ/あるいはその他の方法でそれに関連づけられる。いくつかの例において、最大プーリング又は平均プーリングは、例示的なプールエリア212内の各要素に対して比較演算、ストア演算、及び累算演算を実行することにより出力チャネル210に対して実現され、結果を単に出力する。
図2の図示された例において、プールエリア212は、出力位置208の2×2エリアである。あるいは、例示的なプールエリア212は、任意の他のサイズであってもよい。例えば、プーリング演算は、プールエリア212に含まれる値の最大値、平均値等を取り、結果として生じる最大値、平均値等を出力することを含むことができる。いくつかの例において、プーリング演算は重複を含む。他の例において、プーリング演算は重複を含まない。例えば、プールエリア212は、プーリング演算が重複を含まないとき、各位置が1回だけ読み出されなければならないため、別のプールエリアと重複できない。
図3は、例示的なプーリング演算300の概略表現を示す。図3の例示的なプーリング演算300は、例示的なCNNのプーリング層を表す。例えば、プーリング演算300は、CNNの全結合層又はCNNの別の畳み込み層に出力を提供することができる。図3の図示された例において、プーリング演算300は、図2のマルチチャネル畳み込み演算200からの出力チャネル210を処理することを含む。図3の図示された例において、出力チャネル210は、出力チャネル210の高さ、幅、及び深さにそれぞれ対応する大きさH、W、及びCを有する。
図3の図示された例において、プーリング演算300は、図2のプールエリア212を、プールエリア212の最大値(例えば、最大プーリング)又は平均値(例えば、平均プーリング)を算出し、例示的なプーリング出力チャネル304のうちそれぞれのプーリング出力チャネルの、例示的な出力位置302のうちそれぞれの出力位置における最大値又は平均値を出力することにより処理する。図3の図示された例において、プーリング出力チャネル304は、大きさH、W、及びCを有し、図2の出力チャネル210にマッチする。
図3の例示的なプーリング演算300は、プーリング演算300のストライド(例えば、ストライド長)に基づいて複数のプールエリア212を処理する(例えば、反復的に処理する)。図3の図示された例において、ストライド長は、1つのインデックス、列等だけ隣接して移動される(例えば、出力チャネル210の右側に移動される)プールエリア212に対応するものである。図3の図示された例において、プーリング演算300は重複プーリング演算である。例えば、図3に表すプールエリア212は第1の位置にある。出力位置302のうち第1の出力位置が算出された後、プールエリア212は第2の位置に移動され、第2の位置は、ストライド長が1のとき、第1の位置の右側へ1インデックス又は1列である。このような例において、第1の位置におけるプールエリア212の第2の列は、第2の位置におけるプールエリア212の第1の列と重複する。例示的なプーリング演算300は、出力チャネル210の全体にわたりプールエリア212の最大値又は平均値を算出する。
図4は、例示的な全結合演算400の概略表現を示す。図4の例示的な全結合演算400は、例示的なCNNの全結合層である。例えば、全結合演算400は、別の畳み込み、プーリング、及び全結合層を含む別のCNNトリプレット層に出力を提供することができる。CNNにおいて、全結合層は、前の層内の全ての活性化に対するフル接続を有する。全結合層は、ベクトル行列乗算を行うためのチャネル畳み込みに類似する。
図4の図示された例において、データ入力402は1×Mアレイとして示され、係数又は重みアレイ404はV×Mである。対応する例示的な出力アレイ406は、サイズ1xVである。(サイズMの)各列が各要素を乗算されて和を取得し、これがV回実行される。いくつかの例において、CNNは出力アレイ406を評価して、画像特徴が図1の入力画像106に含まれるパーセントの可能性を決定する。例えば、CNNは、水平線、対角線などの複数の単純な画像特徴が入力画像106に含まれることについてパーセントの可能性を決定することができる。他の例において、CNNは、ネコ、イヌ、ゾウなどの複数の複雑な画像特徴が入力画像106に含まれることについてパーセントの可能性を決定することができる。
図5は、例示的なCNNアクセラレータ500のブロック図を示す。図5の図示された例において、CNNアクセラレータ500は、画像分類アルゴリズム、及び/又は画像及びビデオ認識、リコメンダシステム、及び自然言語処理における他タイプの処理を加速する(accelerate)ために使用される、プラットフォーム(例えば、ハードウェアプラットフォーム)又はハードウェアアクセラレータである。さらに又はあるいは、CNNアクセラレータ500は、ハードウェアプロセッサ上で実行するソフトウェアにより実現できる。例示的なCNNアクセラレータ500は、図1の例示的な畳み込み演算100、図2の例示的なマルチチャネル畳み込み演算200、図3の例示的なプーリング演算300、又は図4の全結合演算400のうち少なくとも1つを実現する。図5の図示された例において、CNNアクセラレータ500は、例示的なコントローラ502、例示的なダイレクトメモリアクセス(direct memory access、DMA)コントローラ504、例示的なデータストア506、例示的な係数ストア508、例示的な接続マルチプレクサ(connection multiplexer、CONXTN MUX)510、例示的なデータパス要素(data path element、DPE)アレイ512、及び例示的な出力バッファ514を含む。
図5の図示された例において、CNNアクセラレータ500は、CNNアクセラレータ500の動作モード及び動作シーケンスを決定するコントローラ502を含む。例えば、コントローラ502は、CNNアクセラレータ500に、(任意のプーリングを有する)畳み込みモード、プーリングモード(例えば、重複プーリングモード)、又は全結合モード(例えば、非線形モード)で動作するように指示することができる。いくつかの例において、コントローラ502は、1つ以上のモードにより生成された出力に対して、後処理演算(例えば、PReLU演算、ReLU演算等)を実行するかどうかを決定する。例示的なコントローラ502は、例示的なDMAコントローラ504に、畳み込みされ及び/又はその他の方法で処理されるべき入力チャネルに関連づけられた係数データ及び画像データを取り出すように指示する。例えば、コントローラ502は、DMAコントローラ504に、例示的なメインメモリ516から図2の入力データ202及びフィルタ204に関連づけられた係数データを取り出すように指示することができる。
いくつかの例において、コントローラ502は、モードに基づいてCNNアクセラレータ500の1つ以上のコンポーネントを構成する。例えば、コントローラ502は、データストア506及び/又は係数ストア508を1つ以上のランダムアクセスメモリ(RAM)(例えば、スタティックRAM(SRAM)、ダイナミックRAM(DRAM)等)ブロックへ編成することにより、データストア506及び/又は係数ストア508を構成することができる。他の例において、コントローラ502は、データストア506から特定の構成、順序、及び/又は方法でデータを受信するように接続マルチプレクサ510の行列を構成する(例えば、データストア506から1×256、2×128、4×64等のデータ行列を受信する)。他の例において、コントローラ502は、畳み込みモード、プーリングモード、又は全結合モードで動作するようにDPEアレイ512を構成する。
いくつかの例において、コントローラ502は、畳み込みモードの畳み込み配置を決定する。例えば、コントローラ502は、畳み込みモードの1×256、2×128、4×64、8×32等の畳み込み配置を決定することができる。例えば、2×128畳み込み配置では、入力チャネルの2つのストリームが、128個の出力チャネルについて、単一の位置について順次合計され、最終結果は2つのストリームの合計である。いくつかの例において、コントローラ502は、畳み込み演算中に使用されないままであるDPE520の数量の決定に基づいて畳み込み配置を決定する。
畳み込み演算が64個の入力チャネル及び192個の出力チャネルを必要とする例において、コントローラ502は、1*256畳み込み配置と比較して4*64畳み込み配置を使用するよう決定することができる。例えば、4*64畳み込み配置を使用するよう決定することにより、CNNアクセラレータ500は、DPE520のうち全256個を利用することができる。このような例において、192個の出力チャネルは、64個の出力チャネルの3つのバッチで処理でき、64個の出力チャネルの各出力チャネルは、DPE520のうち4つ(例えば、256個のDPE=4個のDPE*64個の出力チャネル)により処理されて、フルのDPE利用(utilization)を達成する。1*256畳み込み配置を使用するよう決定することにより、例示的なCNNアクセラレータ500は、64個の使用されないDPE520を有することになり、なぜならば、192個の出力チャネルが並列に処理されるからであり、192個の出力チャネルの各出力チャネルは1個のDPE520により処理され、ゆえに、75%のDPE利用しか結果として生じない。例示的なコントローラ502は、4*64畳み込み配置が他の畳み込み配置より大きいDPE利用を結果としてもたらすと決定することにより、4*64畳み込み配置を使用するよう決定することができる。
いくつかの例において、コントローラ502は、CNNアクセラレータ500の動作の順序を決定し、かつ/あるいはその他の方法で制御する。例えば、コントローラ502は、処理するデータストア506の1つ以上のデータ行、処理する係数ストア508の1つ以上の係数ブロック等を選択することができる。例えば、コントローラ502は、アドレスコマンドを生成すること、及び/又はその他の方法でデータストア506、係数ストア508、及び/又は出力バッファ514のアドレスを選択することにより処理されるデータを選択することによって、CNNアクセラレータ500の動作順序を制御することができる。
図5の図示された例において、CNNアクセラレータ500は、コンピューティングシステムのメインメモリ516からデータを取り出すDMAコントローラ504を含む。図5の図示された例において、メインメモリ516はDRAMである。あるいは、例示的なメインメモリ516は、SRAM、又は任意の他タイプの不揮発性又は揮発性メモリであってもよい。図5の図示された例において、DMAコントローラ504はメモリインターフェースである。例えば、DMAコントローラ504は、例示的なデータ入力インターフェース518を介して、メインメモリ516からデータ(例えば、画像データ、係数データ等)をクエリし(queries)、受信し、及び/又はその他の方法で取り出し、取り出したデータをデータストア506、係数ストア508等に転送する。
図5の図示された例において、CNNアクセラレータ500は、データ行列を記憶し、データ行列の部分を処理のために接続マルチプレクサ510に供給するデータストア506を含む。図5の図示された例において、データストア506はDRAMである。あるいは、例示的なデータストア506は、SRAM、又は任意の他タイプの不揮発性又は揮発性メモリであってもよい。例示的なデータストア506は、16個のストレージインスタンスを含み、各インスタンスはサイズが8kBであり、総ストレージ128kBをもたらす。例示的なデータストア506は、データ行あたり128ビットの、512データ行として構成される。あるいは、例示的なデータストア506は、異なるストレージインスタンス数量、異なるストレージインスタンスサイズ、異なるデータ行数量、及び/又は異なるデータ行あたりビット数量を用いて構成されてもよい。例示的なデータストア506に対応するさらなる詳細が、図11及び/又は図12に関連して以下で説明される。
図5の図示された例において、CNNアクセラレータ500は、係数のデータ行列(例えば、フィルタ係数、カーネル係数等)を記憶し、データ行列の部分を処理のためにDPEアレイ512に供給する係数ストア508を含む。いくつかの例において、係数ストア508は、1つ以上のバイアス値及び/又は1つ以上のスケール値を記憶する。図5の図示された例において、係数ストア508はDRAMである。あるいは、例示的な係数ストア508は、SRAM、又は任意の他タイプの不揮発性又は揮発性メモリであってもよい。例示的な係数ストア508に対応するさらなる詳細が、図7、図8、及び/又は図9に関連して以下で説明される。
図5の図示された例において、CNNアクセラレータ500は、データストア506に記憶されたデータの部分を選択する接続マルチプレクサ510を含む。いくつかの例において、接続マルチプレクサ510は、CNNアクセラレータ500の畳み込み配置に基づいてデータストア506からデータを選択する。例えば、コントローラ502がCNNアクセラレータ500を2×128畳み込み配置に基づいて動作するように構成することに応答して、接続マルチプレクサ510は、データストア506から128個の浮動小数点(FP)16ビット(FP16)ワードの2つのセット(例えば、2×128個のFP16ワード)を選択し、256個のFP16ワードを処理のためにDPEアレイ512に送信する。
図5の図示された例において、CNNアクセラレータ500は、1つ以上の畳み込み演算、1つ以上のプーリング演算、又は1つ以上の全結合演算を実行するDPEアレイ512を含む。いくつかの例において、DPEアレイ512は、これらに限られないがバイアス演算、パラメトリック正規化線形ユニット(PReLU)演算、正規化線形ユニット(ReLU)演算(例えば、ReLU‐X演算)、又はスケール演算などの後処理演算を実行する。このような例において、DPEアレイ512は、コントローラ502から受信したコマンド、命令等に基づいて、演算のうち1つ(例えば、畳み込み演算等)又は後処理演算のうち1つを実行する。図5の図示された例において、DPEアレイ512は、256個の例示的なDPE520を含み、256個のDPE520の各DPEが、DPEアレイ512のうち他のDPE520と実質的に並列に、演算(例えば、畳み込み演算、プーリング演算等)、後処理演算(例えば、PReLU演算、ReLU演算等)などを実行することができる。あるいは、図5に表された256個のDPE520より少ない又は多いDPEが使用されてもよい。DPE520に対応するさらなる詳細が、図6に関連して以下で説明される。
図5の図示された例において、CNNアクセラレータ500は、DPEアレイ512からの出力を記憶し、この出力をさらなる処理のために外部コンピューティングデバイス、ハードウェア、システム等に送信する例示的な出力バッファ514を含む。図5の例示的な出力バッファ514は、別個の読み出し及び書き込みポートを含む。例示的な出力バッファ514は256個のチャネルを有し、該チャネルの各チャネルは16ビットの入力/出力(I/O)チャネルである。例示的な出力バッファ514は、2×8*4096ビットデータ行列として構成された8キロバイト(kB)メモリストレージの1つのインスタンスである。例えば、出力バッファ514は、ピンポンバッファとして動作する。あるいは、例示的な出力バッファ514は、2つ以上のインスタンス及び/又は8kBより少ない又は多いメモリストレージを含んでもよい。あるいは、例示的な出力バッファ514は、任意の他の構成(例えば、4×4*4096ビットデータ行列、8×2*4096ビットデータ行列等)で構成されてもよい。
例示的なCNNアクセラレータ500を実現する例示的な方法が図5に示されているが、図5に示されている要素、処理、及び/又はデバイスのうち1つ以上が、組み合わせられ、分割され、再配置され、省略され、消去され、かつ/あるいは任意の他の方法で実現されてもよい。さらに、図5の例示的なコントローラ502、例示的なDMAコントローラ504、例示的なデータストア506、例示的な係数ストア508、例示的な接続マルチプレクサ510、例示的なDPEアレイ512、例示的な出力バッファ514、例示的なDPE520、及び/又はより一般的には例示的なCNNアクセラレータ500は、ハードウェア、ソフトウェア、ファームウェア、及び/又はハードウェア、ソフトウェア、及び/又はファームウェアの任意の組み合わせにより実現されてもよい。ゆえに、例えば、例示的なコントローラ502、例示的なDMAコントローラ504、例示的なデータストア506、例示的な係数ストア508、例示的な接続マルチプレクサ510、例示的なDPEアレイ512、例示的な出力バッファ514、例示的なDPE520、及び/又はより一般的には例示的なCNNアクセラレータ500のうち任意のものが、1つ以上のアナログ又はデジタル回路、論理回路、プログラマブルプロセッサ、プログラマブルコントローラ、グラフィックス処理ユニット(GPU)、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、プログラマブル論理デバイス(PLD)、及び/又はフィールドプログラマブル論理デバイス(FPLD)により実現できる。純粋にソフトウェア及び/又はファームウェア実装をカバーするために本特許の装置又はシステムクレームのうち任意のものを読むとき、例示的なコントローラ502、例示的なDMAコントローラ504、例示的なデータストア506、例示的な係数ストア508、例示的な接続マルチプレクサ510、例示的なDPEアレイ512、例示的な出力バッファ514、及び/又は例示的なDPE520のうち少なくとも1つが、ソフトウェア及び/又はファームウェアを含むメモリ、デジタル多用途ディスク(DVD)、コンパクトディスク(CD)、ブルーレイ(登録商標)ディスクなどの非一時的コンピュータ読取可能記憶デバイス又は記憶ディスクを含むことがここに明示的に定義される。またさらに、図5の例示的なCNNアクセラレータ500は、図5に示されたものに追加で又は代わって1つ以上の要素、処理、及び/又はデバイスを含んでもよく、かつ/あるいは図示された要素、処理、及びデバイスの任意のもの又は全てうち2つ以上を含んでもよい。本明細書で用いられるとき、フレーズ「通信において」はその変形を含め、直接通信及び/又は1つ以上の中間コンポーネントを通した間接通信を包含し、直接の物理的(例えば、有線)通信及び/又は一定の通信を必要とせず、むしろ、周期的な間隔、スケジュールされた間隔、非周期的な間隔、及び/又は1回限りのイベントにおける選択的通信をさらに含む。
図6は、例示的なDPE600を示す。例えば、図6のDPE600は、図5のDPE520の1つ以上に対応できる。図6の例示的なDPE600は、畳み込み演算、プーリング演算、又は全結合演算を実行する。いくつかの例において、図6のDPE600は、図5の例示的なCNNアクセラレータ500のモード(例えば、動作モード)に基づいて、バイアス演算、PReLU演算、ReLU演算(例えば、ReLU‐X演算)、スケール演算等の後処理演算を実行する。図6の図示された例において、DPE600は、例示的な乗算器(MULT)602、例示的な累算器(ACCUM)604、例示的なレジスタ(REG)606、及び例示的な比較器(COMP)608を含む。
図6の図示された例において、DPE600は、2つの値の乗算演算を実行する乗算器602を含む。いくつかの例において、乗算器602は、第1の例示的なインターフェース(DATA IN)610から取得された第1の値と、第2の例示的なインターフェース(COEFF/BIAS/SCALE)612から取得された第2の値とを乗算する。図6の図示された例において、第1のインターフェース610はデータストアインターフェースである。例えば、第1のインターフェース610から受信されるデータは、図5の接続マルチプレクサ510を介したデータストア506からのデータに対応できる。図6の図示された例において、第2のインターフェース612は係数ストアインターフェースである。例えば、第2のインターフェース612から受信されるデータは、図5の係数ストア508からのバイアス値、係数値、スケール値等であり得る。
図6の図示された例において、乗算器602は、バイナリ乗算器(例えば、1つ以上のバイナリ又は論理加算器)である。例示的な乗算器602は、例示的なイネーブルインターフェース(ENABLE)614から受信された信号に基づいて有効にされる。例えば、イネーブルインターフェース614から受信される信号は、図5のコントローラ502により生成されたバイナリ値(例えば、0に関連づけられたロー信号、又は1に関連づけられたハイ信号)に対応できる。例示的な乗算器602は、例示的なバイパスセレクタインターフェース616からの信号に基づいてバイパスされる。例えば、バイパスセレクタインターフェース616から受信される信号は、図5のコントローラ502により生成されたバイナリ値に対応できる。例えば、バイパスセレクタインターフェース616からの信号がハイ信号である(例えば、第1のバイパスインターフェース618が有効にされている)とき、第1のインターフェース610及び/又は第2のインターフェース612からの1つ以上の値が、第1の例示的なバイパスインターフェース618を介して通過できる。例えば、コントローラ502は、DPE600の1つ以上の動作を実行するとき、速度増加及び/又は電力低減のために信号をバイパスセレクタインターフェース616に送信することができる。
図6の図示された例において、DPE600は、加算又は累算演算を実行する累算器604を含む。図6の例示的な累算器604は、符号付き固定小数点(fixed-point)値を保持する24ビット累算器である。いくつかの例において、FPフォーマットにおける整数ビット(integer bits)及び小数ビット(fractional bits)の数量は累算の間に動的に調整されて、レンジ対精度の適切なバランスが達成されることを確保する。例えば、累算器604は、累算器604のレンジ(例えば、累算器604に累算及び/又はその他の方法で記憶できるデータのサイズ)又は精度のうち少なくとも1つを修正するように調整できる。例えば、累算器604は、最初、12整数ビットを取得し、処理し、かつ/あるいはその他の方法で取り扱うように構成できる。例示的な累算器604は、累算器604への入力が、利用可能な整数ビット数より大きいビット数を必要とするとき、12整数ビットを調整することができる。このような例において、累算器604は、小数ビットを犠牲にして12整数ビットから入力にマッチする数量の整数ビットに増加する(例えば、レンジは増加するが、精度は低減する)。
いくつかの例において、累算器604は、累算器加算の結果がオーバーフローするとき、累算器604が処理できる整数ビット数量を調整し、かつ/あるいはその他の方法で修正する。例えば、累算器604は、整数ビット数を1だけ増加させることができ、ゆえに、小数ビット数は1だけ低減される(例えば、レンジは増加するが、精度は低減する)。いくつかの例において、累算器604は、累算器加算の結果が整数ビットのフルレンジを使用しないとき、累算器604が処理できる整数ビット数量を調整し、かつ/あるいはその他の方法で修正する。例えば、累算器604は、最小12ビットを条件として整数ビット数を1だけ減少させることができ、ゆえに、小数ビット数は1だけ増加する(例えば、レンジは減少するが、精度は増加する)。あるいは、例示的な累算器604は、整数ビット数を2以上増加(例えば、反復的に増加)又は減少(例えば、反復的に減少)させることができる。
例示的な累算器604のレンジ及び/又は精度が調整される例において、累算器604は、近似値、推定値等を生成することができる。例えば、累算器604が精度バランス動作を実行することに応答して、累算器604が累算器604の精度を増加させる又は減少させるのいずれかをして(例えば、ビット(例えば、小数ビット)数を増加させる、ビット数を減少させる等)累算器604のレンジを調整又は修正する場合、累算器604の出力は、累算器604が修正されなかった場合の出力と比較して近似値又は推定値を結果としてもたらす可能性がある。しかしながら、累算器604により生成される近似値、推定値等は、累算器604が修正されていない場合の出力と実質的に同等であり、かつ/あるいはその他の点でそれに相応する。例えば、図6のDPE600の1つ以上の動作、処理、出力等の実行及び/又は生成は、累算器604の精度、レンジ等が調整されることに基づいて影響されない。このような例において、動作又は出力のいかなる変化も実質的に無視できる。
図6の図示された例において、乗算器602は、2つの値の乗算に基づいて累算器604への出力を生成する。例示的な累算器604は、第2の例示的なイネーブルインターフェース(ENABLE)620からの信号が累算器604が有効にされていることを示すとき、乗算器602からの出力を取得し、該出力と前に算出された和との和を算出する。例えば、第2のイネーブルインターフェース620から受信される信号は、図5のコントローラ502により生成されたバイナリ値に対応できる。例えば、累算器604は、ハイ信号が第2のイネーブルインターフェース620から受信されたとき、有効にされる。
いくつかの例において、累算器604は、バイパスセレクタインターフェース616からの信号に基づいてバイパスされる。例えば、乗算器602からの値は、ハイ信号がバイパスセレクタインターフェース616から受信された(例えば、第2のバイパスインターフェース622が有効にされている)とき、第2の例示的なバイパスインターフェース(BYPASS)622を介して累算器604をバイパスすることができる。いくつかの例において、累算器604は、例示的なクリア累算器インターフェース(CLR)624からの信号に基づいてクリアされ、かつ/あるいはその他の方法で空にされる。例えば、クリア累算器インターフェース624から受信される信号は、図5のコントローラ502により生成されたバイナリ値に対応できる。
図6の図示された例において、累算器604の出力は、レジスタ606又は例示的なデータ出力インターフェース626のうち少なくとも1つに送信される。図6の例示的なデータ出力インターフェース626は、出力バッファインターフェースである。例えば、データ出力インターフェース626は、図5の出力バッファ514にデータを送信することができる。図6の例示的なレジスタ606は、例示的なデータ出力インターフェース626に書き込まれる前に、結果(例えば、個々の結果)を保持するために使用される中間記憶要素である。例えば、DPE600は、レジスタ606を使用して平均プーリング演算の値を記憶することができる。例示的なレジスタ606は、例示的なクリアレジスタインターフェース(STORE_CLR)628からの信号に基づいてクリアされ、かつ/あるいはその他の方法で空にされる。例えば、クリアレジスタインターフェース628から受信される信号は、図5のコントローラ502により生成されたバイナリ値に対応できる。例えば、レジスタ606に記憶された値は、ハイ信号がクリアレジスタインターフェース628から受信されたとき、削除できる。
図6の図示された例において、DPE600は、畳み込みモードに対して構成される。動作において、例示的な乗算器602は、第1のインターフェース610からのデータ入力値(例えば、FP16で表される活性化値、画素値等)と第2のインターフェース612からの係数値とを乗算して、畳み込み出力値(例えば、活性化、活性化値、活性化出力等)を生成する。例示的な乗算器602は、畳み込み出力値を例示的な累算器604に送信する。畳み込み出力値の受信に応答して、例示的な累算器604は、畳み込み出力値をデータ出力インターフェース626に送信し、データ出力インターフェース626は同様に、図5の出力バッファ514に送信する。
いくつかの例において、畳み込みモードにおけるDPE600は、任意のプーリングに対して構成される。例えば、DPE600は、最大プーリングインターフェース(MP_POOL)627からハイ信号を受信することに基づいて、畳み込みモードにおける最大プーリング演算に対して構成できる。ハイ信号の受信に応答して、DPE600は、例示的なレジスタ606に記憶されたプール出力値(例えば、図2のプールエリア212の最大値f)をデータ出力インターフェース626に送信する前に、プールエリア全体が処理されるまで待機する。
例示的な最大プーリング演算において、例示的な乗算器602は、第1のインターフェース610からの第1のデータ入力値と、第2のインターフェース612からの第1の係数値とを乗算して、第1の畳み込み出力値を生成する。例えば、第1のデータ入力値は、図2の入力データ202からのFP16における第1の画素値、第1の活性化値等であり得、第1の係数値は、図2のフィルタ204のうち第1のフィルタのFP16における第1の係数値であり得る。例えば、第1の畳み込み出力値は、図2のプールエリア212の出力位置208のうち第1の出力位置であり得る。例示的な乗算器602は、第1の畳み込み出力値を例示的な累算器604に送信し、累算器604は、第1の畳み込み出力値を例示的なレジスタ606に送信する。例示的なレジスタ606は、第1の畳み込み値を例示的な比較器608の第1の例示的な入力629に送信する。
記憶に応答して、例示的な乗算器602は、第1のインターフェース610からの第2のデータ入力値と第2のインターフェース612からの第2の係数値とを乗算して、第2の畳み込み出力値を生成する。例えば、第2のデータ入力値は、図2の入力データ202からの第2の画素値、第2の活性化値等であり得、第2の係数値は、図2のフィルタ204のうち第1のフィルタの第2の係数であり得る。例示的な乗算器602は、第2の畳み込み出力値を例示的な累算器604に送信する。例示的な累算器604は、例示的なプールインターフェース(POOL)630からハイ信号を受信したとき、第2の畳み込み出力値を比較器608の第2の例示的な入力631に送信する。例えば、プールインターフェース630から受信される信号は、図5のコントローラ502により生成されたバイナリ値に対応できる。例示的なプールインターフェース630は、プーリングが有効にされている(例えば、平均プーリング又は最大プーリングが有効にされている)ときにハイ信号を生成し、プーリングが有効にされていないときにロー信号を生成する。例えば、累算器604は、ハイ信号がプールインターフェース630から受信されたとき、第2の畳み込み出力値を比較器608の第2の入力631に送信する。例えば、第2の畳み込み出力値は、図2のプールエリア212の出力位置208のうち第2の出力位置であり得る。
図6の図示された例において、比較器608は、DPE600が最大プーリング演算を行っているとき、第1の畳み込み出力値及び第2の畳み込み出力値の最大値を決定する。第1の畳み込み出力値(例えば、レジスタ606内の記憶された値)が第2の畳み込み出力値より小さいと決定したことに応答して、例示的な比較器608は、例示的な比較器出力632に対してハイ信号(例えば、1のバイナリ値に対応する信号)を生成する。例示的な比較器出力632に対するハイ信号は、例示的なフリップフロップ634が1の例示的な論理出力(Y_FF)636(例えば、ハイ信号に対応するバイナリ値)を生成することを可能にする。例えば、論理出力636は、バイナリ値(例えば、0又は1の値)に対応する。例えば、論理出力636が1であるとき、この条件はY_FFとして表され、論理出力636が0である、かつ/あるいはその他の方法でロー信号に対応するとき、〜Y_FFとして表される。
例示的な論理出力636が1である、かつ/あるいはその他の方法で有効にされていることに応答して、例示的なコントローラ502は、第2の畳み込み出力値をプール出力値としてレジスタ606に記憶する。例えば、コントローラ502は、例示的なストアインターフェース(STORE||Y_FF&POOL&〜PRELU)644への信号を生成する。例示的なストアインターフェース644からの信号は、バイナリ値に対応する。例示的なストアインターフェース644からのロー信号の受信に応答して、例示的なコントローラ502は、例示的なレジスタ606に値を記憶するように指示しない。例示的なストアインターフェース644からのハイ信号の受信に応答して、例示的なコントローラ502は、レジスタ606に値を記憶するように指示する。例えば、ストアインターフェース644からの信号は、論理出力636がハイ信号であり、プールインターフェース630がハイ信号であり、例示的なPReLUインターフェース(PRELU)638がロー信号である(例えば、DPE600がPReLU演算を実行していない)とき、ハイ信号である。他の例において、ストアインターフェース644は、論理出力636がロー信号である、プールインターフェース630がロー信号である、あるいはPReLUインターフェース638がハイ信号である、のうち少なくとも1つのとき、ロー信号を出力する。
第1の畳み込み出力値(例えば、例示的なレジスタ606内の記憶された値)が第2の畳み込み出力値より大きいと決定したことに応答して、比較器608は、例示的な比較器出力632に対してロー信号を生成し、これは、例示的なフリップフロップ634に、例示的な論理出力636に対応するロー信号を生成するように指示する。例示的な論理出力636がロー信号に対応し、かつ/あるいはその他の方法で無効にされていることに応答して、例示的なコントローラ502は、第2の畳み込み出力値をレジスタ606に記憶しない。
例示的なDPE600は、プールエリア全体(例えば、図2のプールエリア212)が処理されるまで、データ入力値を処理する(例えば、反復的に処理する)。プールエリア全体が処理されたとき、例示的なレジスタ606は、例示的な最大プーリングインターフェース627が有効にされているとき、プール出力値(例えば、図2のプールエリア212の最大値)を例示的なデータ出力インターフェース626に出力する。
他の例において、DPE600は、畳み込みモードで動作しているとき、平均プーリング演算に対して構成できる。例えば、乗算器602は、図2のプールエリア212の出力位置208に対応する第1の出力値、第2の出力値、第3の出力値、及び第4の出力値を算出することができる。例示的な累算器604は、第1乃至第4の出力値の和を算出することができる。例えば、乗算器602は、第1の出力値を算出することができ、累算器604は、これをゼロ値に加算して第1の出力値に基づく第1の和を生成する。このような例において、乗算器602は、第2の出力値を算出することができ、累算器604は、これを第1の和に加算して第1及び第2の出力値に等しい第2の和を生成し、総計が算出され、総計が第1乃至第4の出力値の和に等しくなるまで同様である。
総計の算出に応答して、例示的な累算器604は、総計を例示的なレジスタ606に記憶し、レジスタ606は同様に、第3の例示的なインターフェース(!PRELU||AV POOL||BIAS_SCALE_EN)637からの信号に基づいて総計を例示的な乗算器602に送信する。例えば、第3のインターフェース637の信号は、図5のコントローラ502により生成されたバイナリ値に対応できる。例えば、第3のインターフェース637の信号は、DPE600がPReLU演算を実行していない(例えば、PRELU!=1)、DPE600がバイアス演算又はスケール演算を実行している(例えば、BIAS_SCALE_EN==1)、あるいはDPE600が平均プーリング演算を実行している(例えば、AV_POOL==1)とき、ハイ信号である。例えば、第3のインターフェース637は、DPE600が平均プーリング演算を実行しているとき、式!PRELU||AV POOL||BIAS_SCALE_ENに対してハイ信号を出力する。
例示的なレジスタ606からの総計の受信に応答して、例示的な乗算器602は、総計と例示的なプールサイズ値(1/Av;X)640とを乗算することにより平均プール値を算出し、平均プール値を例示的な累算器604に出力し、累算器604は同様に、平均プール値を例示的なデータ出力インターフェース626に出力する。例示的なプールサイズ値640は、プールエリアのサイズに対応する。例えば、プールサイズ値640は、1/(プール幅×プール高さ)の商とすることができる。例えば、図2のプールエリア212に関連づけられたプールサイズ値640は、1/4(例えば、1/4=1/(2×2))である。図6の図示された例において、乗算器602は、例示的な平均プーリングインターフェース(AV POOL)642からの信号に基づいてプールサイズ値640を取り出す。例えば、平均プーリングインターフェース642からの信号は、図5のコントローラ502により生成されたバイナリ値に対応できる。例えば、平均プーリングインターフェース642は、DPE600が平均プーリング演算を実行しているとき、ハイ信号を出力する。
いくつかの例において、DPE600は、プーリング演算に対して構成される。例えば、DPE600は、図2のプールエリア212の出力位置208に対応する第1の入力値、第2の入力値、第3の入力値、及び第4の入力値を取得することができる。このような例において、DPE600は、上述のように、第1乃至第4の入力値の平均値又は最大値を決定することができる。
さらに他の例において、DPE600は、バイアス演算、スケール演算、PReLU演算、又はReLU演算(例えば、ReLU‐X演算)のうち少なくとも1つを含む1つ以上の後処理演算に対して構成できる。例えば、DPE600は、層ごとベースの任意の層の出力におけるバイアス演算、スケール演算、PReLU演算、又はReLU‐X演算に対して構成できる。例えば、累算器604は、例示的なバイアススケールイネーブルインターフェース(BIAS_SCALE_EN)646からの信号に基づいて、第2のインターフェース612からバイアス値又はスケール値を取得することができる。例えば、バイアススケールイネーブルインターフェース646からの信号は、バイナリ値に対応する。例えば、累算器604は、バイアススケールイネーブルインターフェース646がハイ信号を出力するとき、第2のインターフェース612からバイアス値又はスケール値を取得することができる。
例示的なバイアス演算において、例示的な累算器604は、第2のインターフェース612から取り出されたバイアス値を、例示的なレジスタ606に記憶された出力値(例えば、畳み込み出力値、平均プール値、最大プール値、プール出力値等)に加算する。例示的なスケール演算において、例示的な乗算器602は、バイアススケールイネーブルインターフェース646がハイ値を出力したとき、第2のインターフェース612から取り出されたスケール値で出力値に乗算し、かつ/あるいはその他の方法でスケーリングする。
いくつかの例において、DPE600は、DPE600が畳み込み演算、プーリング演算等を実行した後、PReLU演算に対して構成される。このような例において、図5のコントローラ502は、PReLUインターフェース638に対してハイ信号を生成する。例えば、PReLUインターフェース638から受信された信号は、図5のコントローラ502により生成されたバイナリ値に対応できる。例えば、コントローラ502がPReLUインターフェース638に対してハイ信号を生成したことに応答して、比較器608は、畳み込み演算又はプーリング演算の出力に対応する第1の値と、例示的なPReLUベースパラメータ(t0)648に対応する第2の値とを比較する。例えば、第1の値は、図2の出力位置208のうち第1の出力位置の値、図2のプールエリア212の最大値等であり得る。図2の図示された例において、PReLUベースパラメータ648は、FP16フォーマットに変換された10ビット符号付き整数である。あるいは、例示的なPReLUベースパラメータ648は、任意の他のビット数量及び/又は任意の他のフォーマットであってもよい。
第1の値(例えば、レジスタ606内の記憶された値)が第2の値(例えば、例示的なPReLUベースパラメータ(t0)648)より小さいことに応答して、例示的な比較器608はロー信号を出力し、ゆえに、例示的な論理出力636にロー信号に対応させる。例示的な論理出力636がロー信号に対応することに応答して、例示的な乗算器602は、第1の例示的なPReLU入力パラメータ(a0)650と例示的なレジスタ606に記憶された出力値との乗算に基づいて第1のPReLU出力値を算出する。例えば、例示的なPReLUスイッチインターフェース(PRELU&〜Y_FF)652は、PReLUインターフェース638がハイ信号を出力し(例えば、DPE600がPReLU演算を実行している)、論理出力636がロー信号に対応するとき、ハイ信号を出力する。
他の例において、第1の値が第2の値より大きいとき、比較器608はハイ信号を出力し、ゆえに、論理出力636にハイ信号に対応させる。例示的な論理出力636がハイ信号に対応することに応答して、例示的な乗算器602は、第2の例示的なPReLU入力パラメータ(a1)654と例示的なレジスタ606に記憶された出力値との乗算に基づいて第2のPReLU出力値を算出する。例えば、PReLUスイッチインターフェース652は、PReLUインターフェース638がハイ信号を出力し、論理出力636がハイ信号に対応するとき、ロー信号を生成する。PReLU演算の一般的な形式は、以下で式(1)及び式(2)で説明される。
y=a0*x x<t0の場合
式(1)
y=a1*x x>t0の場合
式(2)
上記式(1)〜(2)の示された例において、yは、乗算器602により算出されるPReLU出力値を参照し、xは、レジスタ606に記憶された出力値を参照し、a0は、第1のPReLU入力パラメータ650を参照し、a1は、第2のPReLU入力パラメータ654を参照し、t0は、PReLUベースパラメータ648を参照する。
いくつかの例において、DPE600は、DPE600が畳み込み演算、プーリング演算等を実行した後、ReLU演算(例えば、ReLU‐X演算)に対して構成される。このような例において、図5のコントローラ502は、例示的なReLU‐Xインターフェース(RELU_X)656に対してハイ信号を生成する。例えば、ReLU‐Xインターフェース656から受信される信号は、バイナリ値に対応できる。例えば、コントローラ502がReLU‐Xインターフェース656に対してハイ信号を生成したことに応答して、比較器608は、畳み込み演算又はプーリング演算の出力に対応する第1の値と、例示的なReLU‐Xパラメータ(1/AV;X)658に対応する第2の値とを比較する。例えば、第1の値は、図2の出力位置208のうち第1の出力位置の値、図2のプールエリア212の最大値等であり得る。図2の図示された例において、ReLU‐Xパラメータ658は、FP16値である。あるいは、例示的なReLU‐Xパラメータ658は、任意の他のビット数量及び/又は任意の他のフォーマットであってもよい。
図6の図示された例において、ReLU‐Xパラメータ658は、プールサイズ値(1/Av;X)640とレジスタを共有する。いくつかの例において、ReLU‐Xパラメータ658は、ゼロの値を有する。このような例において、ReLU‐X演算は、以下で式(3)で説明される関数を実行する。
y=min(z,(max (0,x))
式(3)
上記式(3)の例において、yは、ReLU‐X出力値を参照し、xは、レジスタ606に記憶された出力値を参照し、zは、ReLU‐Xパラメータ658を参照する。例えば、DPE600がReLU‐X演算に対して構成されるとき、コントローラ502は、ReLU‐Xパラメータ658をゼロに設定し、比較器608は、レジスタ606に記憶された出力値がゼロより大きいかどうかを決定する。例示的な比較器608が出力値がゼロより大きいと決定したとき、例示的なコントローラ502は、ReLU‐Xパラメータ658をReLU‐X値に設定し、比較器608は、レジスタ606に記憶された出力値がReLU‐X値より大きいかどうかを決定する。例示的な比較器608が、レジスタ606に記憶された出力値がReLU‐X値より大きいと決定した場合、出力値はデータ出力インターフェース626に送信され、そうでない場合、ReLU‐X値が例示的なReLU‐X値インターフェース(〜Y_FF&RELU_X)660を介してデータ出力インターフェース626に送信される。
図6の図示された例において、乗算器602、レジスタ606、及び比較器608はFP16ベースである。例えば、乗算器602、レジスタ606、及び比較器608は、FP16フォーマットの値を処理し、記憶し、かつ/あるいはその他の方法で取り扱うことができる。図6の図示された例において、累算器604は、固定24ビットベースのフォーマットである。例えば、累算器604は、固定24ビットベースのフォーマットの値を処理し、記憶し、かつ/あるいはその他の方法で取り扱うことができる。あるいは、例示的な乗算器602、例示的な累算器604、例示的なレジスタ606、及び/又は例示的な比較器608のうちの1つ以上が、任意の他のフォーマットであってもよい。
いくつかの例において、累算器604は、例示的な隣接するDPEインターフェース662を介して隣接DPEからデータを取得する。例えば、累算器604は、図6のDPE600に結合された図5のDPE520の1つからデータを取得することができる。例示的な累算器604は、複数のストリームの1つ以上の和が算出されるべき(例えば、畳み込み演算が複数の入力ストリームに分割される)例において、隣接DPEから取得されたデータを処理する。例えば、DPE600は、2*128畳み込み配置に対して構成でき、図1の入力チャネル110、112の2つのストリームが、単一の位置について順次合計される。このような例において、DPE600は、コントローラ502が隣接するデータインターフェース(ACCUM)664に対して例示的なハイ信号を生成したとき、別のDPE600から入力ストリームを取得することができる。例えば、隣接データインターフェース664がハイ信号を受信したことに応答して、乗算器602は、隣接DPEインターフェース662を介して隣接DPEからデータを受信する。このような例において、コントローラ502は、ハイ信号をバイパスセレクタインターフェース616に送信して、第1のバイパスインターフェース618を有効にする。第1の例示的なバイパスインターフェース618が有効にされていることに応答して、例示的な乗算器602は、隣接DPEから受信したデータを例示的な累算器604に送信し、累算器604は、DPE600により算出された第1の和と隣接DPEにより算出された第2の和とに基づいて総和を算出する。
図7は、図5の例示的なCNNアクセラレータ500の動作モードに基づいて第2の例示的な係数ストア702及び第3の例示的な係数ストア704に編成された第1の例示的な係数ストア700の例示である。例示的な係数ストア700、702、704は、図5の例示的な係数ストア508に対応できる。例えば、係数ストア700、702、704は、図5のコントローラ502からアドレス指定及び/又は制御できる。
図7の図示された例において、係数ストア700、702、704は、別個の読み出し及び書き込み入力/出力(I/O)ポート又はチャネルを含む。例示的な係数ストア700、702、704の各々は、各チャネルが16ビットである256個のチャネル(CH0‐CH255)を有する。例示的な係数ストア700、702、704の各々は、256*4096ビットの単一インスタンスとして構成されて、総ストレージで128kBを生じる。あるいは、例示的な係数ストア700、702、704は、任意の他のサイズ及び/又は任意の他の構成であってもよい。
図7の図示された例において、第1の係数ストア700は、256個のFP16出力の256個のチャネルを有して256*256ワードの係数ストレージを生じ、FP16出力の各々は、図5のDPE520の1つに接続される。図7の図示された例において、第1の係数ストア700は、CNNアクセラレータ500が1*256モードで動作しているとき、図5のコントローラ502により第2の係数ストア702に構成される。例えば、図1の入力チャネル110、112の各々は、1*256モードで動作するとき、図1の出力チャネル126の各々について、単一の位置(例えば、出力チャネル122)について順次合計される。例えば、1*256モードは、DPE520のうち1つが1つの入力チャネルを処理して256個の出力チャネルにおける出力位置を実質的に並列に生じることに対応する。
図7の図示された例において、第1の係数ストア700は、CNNアクセラレータ500が1*256モードで動作しているとき、図5のコントローラ502により第2の係数ストア702に構成される。図7の第2の例示的な係数ストア702は、単一の係数ブロックとして構成され、単一のブロックは、256列(例えば、CH0〜CH255)に分割され、256列の各々は、図1の入力チャネル110、112の全てに対する係数のセットを表す。例えば、256列の各々は、図1のフィルタ114、116の1つに対応できる。
図7の図示された例において、第1の係数ストア700は、CNNアクセラレータ500が2*128モードで動作しているとき、図5のコントローラ502により第3の係数ストア704に構成される。例えば、図1の入力チャネル110、112の2つのストリームは、2*128モードで動作するとき、図1の出力チャネル126の各々について、単一の位置(例えば、出力チャネル122)について順次合計される。このような例において、2*128モードの結果は2つのストリームの合計である。例えば、2*128モードは、DPE520のうち2つが1つの入力チャネルを処理して128個の出力チャネルにおける出力位置を実質的に並列に生じることに対応する。
図7の図示された例において、第3の係数ストア704は、2つの例示的な係数ブロック706、708に構成され、ブロック706、708の各々は、図5のデータストア506の各データRAMブロックに対応する。図7の図示された例において、ブロック706、708の各々は、128列を含む。例えば、第1のブロック706は、64個のチャネルの第1のセット(例えば、CH0〜CH63)を含み、第2のブロック708は、64個のチャネルの第2のセット(例えば、CH64〜CH127)を含む。図7の図示された例において、ブロック706、708のうち1つにおける列は、図1の入力チャネル110、112の半分に対する係数のセットを表す。図7の図示された例において、アドレスあたり128*FP16ワードの2つのブロック706、708が存在し、ゆえに、ブロック706、708のうち1つが、データストア506からのデータ入力の各ブロックについて、図5のDPE520の2つのセットのうち1つに適用される。
あるいは、第1の例示的な係数ストア700は、例示的なCNNアクセラレータ500が4*64モードで動作しているとき、図5の例示的なコントローラ502により第4の係数ストア(図示せず)に構成されてもよい。例えば、第4の係数ストアは、4つの係数ブロックとして構成でき、4つのブロックの各々が、図5のデータストア506の各データRAMブロックに対応する。例えば、第4の係数ストアは、アドレスあたり64*FP16ワードの4つのブロックを有することができ、ゆえに、4つのブロックのうち1つが、データストア506からのデータ入力の各ブロックについて、図5のDPE520の4つのセットのうち1つに適用される。
あるいは、第1の例示的な係数ストア700は、例示的なCNNアクセラレータ500が8*32モードで動作しているとき、図5の例示的なコントローラ502により第5の係数ストア(図示せず)に構成されてもよい。例えば、第5の係数ストアは、8つの係数ブロックとして構成でき、8つのブロックの各々は、図5のデータストア506の各データRAMブロックに対応する。例えば、第5の係数ストアは、アドレスあたり32*FP16ワードの8つのブロックを有することができ、ゆえに、8つのブロックのうち1つが、データストア506からのデータ入力の各ブロックについて、図5のDPE520の8つのセットのうち1つに適用される。
あるいは、第1の例示的な係数ストア700は、例示的なCNNアクセラレータ500が16*16モードで動作しているとき、図5の例示のコントローラ502により第6の係数ストア(図示せず)に構成されてもよい。例えば、第6の係数ストアは、16個の係数ブロックとして構成でき、16個のブロックの各々は、図5のデータストア506の各データRAMブロックに対応する。例えば、第6の係数ストアは、アドレスあたり16×FP16ワードの16個のブロックを有することができ、ゆえに、16個のブロックのうち1つが、データストア506からのデータ入力の各ブロックについて、図5のDPE520の16個のセットのうち1つに適用される。
例えば、図1の入力チャネル110、112の4つのストリームは、4*64モードで動作するとき、図1の出力チャネル126の各々について、単一の位置(例えば、出力チャネル122)について順次合計される。このような例において、4*64モードの結果は4つのストリームの合計である。例えば、4*64モードは、DPE520のうち4つが1つの入力チャネルを処理して64個の出力チャネルの出力を実質的に並列に生じることに対応する。
図8は、図5の例示的な係数ストア508の例示的なアドレス指定モデルを表す例示的な表800である。図8の例示的な表800において、例示的なアドレスシーケンス列(ADDRESS SEQUENCE)802は、例示的な係数ストア508のためのアドレス指定スキームを記述する。例示的なアドレスシーケンス列802において、用語CH STR INは、入力チャネルストライド値を参照し、用語CH STR OUTは、出力チャネルストライド値を参照する。図8の例示的な表800において、例示的な入力チャネル列(INPUT CHANNEL)804は、畳み込み演算のための入力チャネル(例えば、図1の入力チャネル110、112)を表す。
図8の例示的な表800において、例示的なデータ列(DATA[127:0])806は、一度に8つのチャネルの各々について単一の係数16ビットワードを記憶する128ビットワードを表し、係数モード(例えば、1×256モード、2×128モード等)にかかわらず16ビットチャネルを効果的に占有する。例えば、FP16が16ビットチャネルをフルに占有する、2つのuf8係数が16ビットチャネルを占有する、等である。例示的な係数列(COEFFICIENT)808は、フィルタのインデックス(例えば、図1の第1のフィルタ114の係数)を表す。
図9は、非FP16フォーマットに基づく図5の例示的な係数ストア508に対する例示的なアドレス指定モデルを表す例示的な表900である。図9の例示的な表900では、16ビットが各チャネルに割り振られる。例示的なデータ列(DATA[127:0])902における16ビットチャネル(例えば、CH0、CH1、CH7等)の各々の内部で、データは全ての入力チャネルについてパックされる(packed)。非FP16モードでは、入力チャネルストライド(CH STR IN)は直接の意味を有さないがストライドとして算出され、それにより、RAMあたりチャネル数量(CH_PER_RAM)で乗算されると、ストライドは次のRAMブロックに正しく到達する(例えば、CH STR INは非128ビット境界に整合され(aligned)得る)。3×3畳み込み(例えば、9つの係数)に対する4ビットパレット化画像の例を以下に説明する。
4チャネル、8ビット係数を有する、例示的な3×3フィルタ:Coeff Stride(In)=4.5行=0x0048h。
4チャネル、4ビット係数を有する、例示的な2×2フィルタ:Coeff Stride(In)=2.25行=0x0024h。
図10は、本明細書に開示される例を実現する例示的な畳み込み演算1000を示す。例えば、畳み込み演算1000は、図5のCNNアクセラレータ500により実行できる。図10の図示された例において、畳み込み演算1000の畳み込みモードは1*256モードであり、例示的な入力チャネル1002の各入力チャネルは、複数の出力チャネルの例示的な出力チャネル1006について、単一の例示的な出力位置1004について順次合計される。
図10の図示された例において、入力チャネル1002は、幅28画素(X=28)及び高さ28画素(Y=28)並びに深さ50チャネル(C=50)の大きさを有する。例示的な入力チャネル1002の例示的な入力位置1008は、幅5画素(Fw=5)、高さ5画素(Fh=5)、及び深さ50チャネル(C=50)の大きさを有する例示的なフィルタ1010を使用して処理される。あるいは、例示的な入力チャネル1002は、CNNの二次畳み込み層(例えば、最初の畳み込み層の後の畳み込み層)に対応してもよい。例えば、入力チャネル1002は、画素値と比較した活性化を含んでもよい。
図10の図示された例において、出力位置1004は、入力チャネル1002の入力位置1008とフィルタ1010との全ての畳み込みの全ての積の和を算出することにより決定される。例示的な出力チャネル1006のさらなる出力位置が、入力位置の全体が処理されるまで例示的な入力チャネル1002の残りの入力位置を畳み込むことにより処理される。例示的な入力チャネル1002の入力位置の全体の処理に応答して、例示的なCNNアクセラレータ500は、異なるフィルタセットを使用して別の出力チャネルを算出する。図10の図示された例において、CNNアクセラレータ500は、入力チャネル1002を100個のフィルタセットについて異なるフィルタセットで畳み込んで(例えば、反復的に畳み込んで)100個の出力チャネルを生成する。
図11は、1*256畳み込み配置に基づく図5の例示的な接続マルチプレクサ510の例示的な動作1100を示す。図11の図示された例において、接続マルチプレクサ510は、単一のFP16出力を、図5のDPE520の全256個にわたり複製させる。図11の図示された例において、接続マルチプレクサ510は、データストア506からFP16データを選択する。
図11の図示された例において、データストア506は、1*256畳み込み配置に基づいて構成される。図11の例に示されたデータストア506は、単一の大きいRAMとして構成された16個の例示的なブロック(RAM0‐RAM15)1102に編成される。ブロック1102の各々は、FP16ワードの8つの例示的な列1104を含み、8つの列1104の各々は、複数の例示的なデータ行1106を含む。あるいは、例示的なブロック1102は、8列より少ない若しくは多い列、及び/又は図11に示されるデータ行より少ない若しくは多いデータ行を有してもよい。図11の図示された例において、データ行1106の各々は、入力チャネルの8ワードを含む。例示的な接続マルチプレクサ510は、フィルタと、処理されている現在の入力チャネルとに基づいて、各サイクルについて8つの入力ワードのうち適切なワードを選択する。図5の例示的なコントローラ502は、入力チャネルストライドに基づいて適切なワードのアドレスを決定する。例示的なコントローラ502は、RAMアドレスと接続行列(connection matrix)アドレスとのうち少なくとも1つの組み合わせに基づいて全体のアドレスを決定する。
図11の図示された例において、単一の入力チャネルが一度に処理される。例えば、第1のクロックサイクルの間、接続マルチプレクサ510は、第1の入力チャネルに対応するブロック1102の各々のデータ行1106のうち最初の2つを選択し、複数のデータ行1106を図1のDPE520のそれぞれのDPEに出力する。例えば、接続マルチプレクサ510は、データ行1106のうち32行を選択することができ(例えば、32データ行=(2データ行/ブロック)×(16ブロック))、各データ行1106は、128ビットを含み(例えば、128ビット=(16ビット/ワード)×(8ワード/データ行))、DPE520により処理されるべき4096ビットを生じる(例えば、4096ビット=(128ビット/データ行)×(2データ行/ブロック)×16ブロック)。このような例において、第2のクロックサイクルの間、接続マルチプレクサ510は、第2の入力チャネルに対応する16個のブロック1102の各々の次の2つのデータ行1106を選択し、複数のデータ行1106を処理のためにDPE520のそれぞれのDPEに出力することができる。このような例において、データストア506、接続マルチプレクサ510などのアドレス指定及び制御シーケンス決定(sequencing)は、図5のコントローラ502又はDMAコントローラ504のうち少なくとも1つにより実施される。
図12は、2*128畳み込み配置に基づく図5の例示的な接続マルチプレクサ510の例示的な動作1200を示す。図12の図示された例において、接続マルチプレクサ510は、2つのFP16出力を、図5のDPE520の128個の双方のセットにわたり複製させる。図12の図示された例において、接続マルチプレクサ510は、データストア506からFP16データを選択する。
図12の図示された例において、データストア506は、2*128畳み込み配置に基づいて構成される。図12の例に示されたデータストア506は、2つの例示的なRAMブロック1204、1206として構成された16個の例示的なブロック(RAM0‐RAM15)1202に編成される。第1の例示的なRAMブロック1204はRAM0‐RAM7を含み、第2の例示的なRAMブロック1206はRAM8‐RAM15を含む。ブロック1202の各々は、FP16ワードの8つの例示的な列1208を含み、8つの列1208の各々は、複数の例示的なデータ行1210を含む。図12の図示された例において、第1のRAMブロック1204は入力チャネルセットの前半を含み、第2のRAMブロック1206は入力チャネルセットの後半を含む。あるいは、例示的なブロック1202は、8列より少ない若しくは多い列、及び/又は図12に示されるデータ行より少ない若しくは多いデータ行を有してもよい。
図12の図示された例において、単一の入力チャネルが一度に処理される。例えば、第1のクロックサイクルの間、接続マルチプレクサ510は、第1のRAMブロック1204に含まれるブロック1202の各々のデータ行1210のうち最初の2つと、第2のRAMブロック1206に含まれるブロック1202の各々のデータ行1210のうち最初の2つとを選択し、選択されたデータ行1210は、処理されるべき第1の入力チャネルに対応する。例示的な接続マルチプレクサ510は、複数のデータ行1210を図1のDPE520のそれぞれのDPEに出力する。例えば、接続マルチプレクサ510は、第1のRAMブロック1204からデータ行1210のうち16データ行を、及び第2のRAMブロック1206からデータ行1210のうち16データ行を選択することができ、各データ行1210は128ビットを含み、DPE520により処理されるべき4096ビットを生じる。
このような例において、第2のクロックサイクルの間に、接続マルチプレクサ510は、処理されるべき第2の入力チャネルに対応する第1のRAMブロック1204内のブロック1202の各々の次の2つのデータ行1210及び第2のRAMブロック1206内のブロック1202の各々の次の2つのデータ行1210を選択することができる。例示的な接続マルチプレクサ510は、複数のデータ行1210を処理のためにDPE520のそれぞれのDPEに出力する。このような例において、データストア506、接続マルチプレクサ510などのアドレス指定及び制御シーケンス決定は、図5のコントローラ502又はDMAコントローラ504のうち少なくとも1つにより実施される。
図13は、図5の例示的なCNNアクセラレータ500を実現する例示的なCNNアクセラレータ1300の例示的な実装のブロック図である。図13の例示的なCNNアクセラレータ1300は、複数の入力チャネルを処理すること、及び/又は実質的に並列に(例えば、実質的に同時に)1つ以上の出力チャネルを生成することにより、畳み込み演算を加速する。図13の図示された例において、CNNアクセラレータ1300は、例示的なDPEインベントリエンジン1302、例示的なDPE構成最適化器1304、例示的なモードセレクタ1306、例示的な畳み込みエンジン1308、例示的なプーリングエンジン1310、及び例示的な全結合エンジン1312を含む。
図13の図示された例において、CNNアクセラレータ1300は、DPEインベントリエンジン1302を含み、DPEインベントリエンジン1302は、プラットフォーム(例えば、図5のCNNアクセラレータ500)上に存在する利用可能なDPEを棚卸し、かつ/あるいはその他の方法で識別する。例示的なDPEインベントリエンジン1302は、図5の例示的なコントローラ502に対応できる。図13の図示された例において、DPEインベントリエンジン1302は、プラットフォーム上に存在するDPEをクエリし、決定し、特徴付け、かつ/あるいは識別する手段を実現する。いくつかの例において、DPEインベントリエンジン1302は、処理に利用可能な図5のDPE520の数量を決定する。いくつかの例において、DPEインベントリエンジン1302は、図5の1つ以上のDPE520、及び/又はより一般的には図5のCNNアクセラレータ500の、畳み込み配置、モードなどを決定する。
図13の図示された例において、CNNアクセラレータ1300は、例示的なDPE構成最適化器1304を含み、DPE構成最適化器1304は、DPE構成、モードなどを選択し、かつ/あるいはその他の方法で決定し、DPEリソース利用を増加させ(例えば、最大化し)、かつ/あるいはその他の方法で最適化し、電力消費を低減させ(例えば、最小化し)、かつ/あるいはその他の方法で最適化する。例示的なDPE構成最適化器1304は、図5の例示的なコントローラ502に対応できる。図13の図示された例において、DPE構成最適化器1304は、DPE構成、モードなどを決定する手段を実現して、DPEリソースの利用を増加させ、電力消費を低減させる。例えば、DPE構成は、CNNアクセラレータ500が畳み込みモード、プーリングモード、全結合モードなどであるとき、データストア506、係数ストア508、DPEアレイ512などの構成に対応できる。例示的なDPE構成最適化器1304は、実質的に低い電力(例えば、繰り返しのデータ移動がほとんど又は全くない)及び最大限のハードウェア利用を使用して、図5の例示的なCNNアクセラレータ500の最適な動作を提供する手段を実現する。
いくつかの例において、データ移動を低減させるために、出力の総数及び総係数セットを、図5の例示的な係数ストア508内に保持できる。いくつかの例において、DPE構成最適化器1304は、データ移動を低減させるために、フィルタの大きさに基づいて係数ストア508の構成を決定する。例えば、FP16係数を使用する3×3のフィルタサイズについて、DPE構成最適化器1304は、約28個の入力チャネルの制限を決定することができる(例えば、
であり、係数ストア508は256個の位置を有する)。このような例において、DPE構成最適化器1304は、28個の入力チャネルの制限を決定して、出力の総数及び総係数セットが図5の係数ストア508に記憶できることを確保する。
いくつかの例において、DPE構成最適化器1304は、出力チャネルの数量を減少させ、各々のモードにおける低減は、入力チャネル取り扱い能力の倍増をもたらす。例えば、DPE構成最適化器1304は、1*256畳み込み配置から2*128畳み込み配置又は4*64畳み込み配置に変更して、同じ加速をより少ない全体的な電力使用で提供することができる。いくつかの例において、DPE構成最適化器1304は、全ての入力チャネル(例えば、入力画像データ)又は画像に関連づけられた全ての係数が係数ストア508に適合しないとき、循環バッファ管理を展開する。例えば、DPE構成最適化器1304は、チャネルごと循環バッファ管理システムを構成することができ、全てのチャネルが最も早い機会にメモリ(例えば、SRAM、DRAMなど)から断続的に補充され、停止がないこと又は最小限の停止を確保する。
いくつかの例において、DPE構成最適化器1304は、畳み込み配置を使用することから結果として生じるDPE利用に基づいて、CNNアクセラレータ1300が動作(例えば、畳み込み演算、プーリング演算、全結合演算など)を続行することを停止させ、かつ/あるいはその他の方法で防止する。例えば、DPE構成最適化器1304は、解析、評価、処理などされるべき第1の畳み込み配置として、1*256畳み込み配置を選択することができる。このような例において、DPE構成最適化器1304は、動作要件(例えば、処理又は生成されるべき入力チャネルの数量、出力チャネルの数量など)に基づきCNNアクセラレータ1300の動作中にDPEアレイ512の256個のDPE520のうち64個が使用されないことに基づいて、1*256畳み込み配置が75%の第1のDPE利用を結果として生じると決定することができる。例示的なDPE構成最適化器1304は、75%の第1のDPE利用を90%のDPE利用閾と比較し、比較に基づいて(例えば、75%の第1のDPE利用は90%のDPE利用閾より小さい)、第1のDPE利用がDPE利用閾を満たさないと決定することができる。第1のDPE利用がDPE利用閾を満たさないとの決定に応答して、例示的なDPE構成最適化器1304は、DPE利用のために別の畳み込み配置が生成、決定、及び/又は評価されるまで、例示的なCNNアクセラレータ1300が第1の畳み込み配置で動作を実行することを停止させることができる。
いくつかの例において、停止に応答して、DPE構成最適化器1304は、処理されるべき4*64畳み込み配置などの第2の畳み込み配置を選択する。このような例において、DPE構成最適化器1304は、動作要件に基づきCNNアクセラレータ1300の動作中にDPEアレイ512の256個のDPE520のうち0個が使用されないことに基づいて、4*64畳み込み配置が100%の第2のDPE利用を結果としてもたらすと決定することができる。例示的なDPE構成最適化器1304は、100%の第2のDPE利用を90%のDPE利用閾と比較し、比較に基づいて(例えば、100%の第2のDPE利用は90%のDPE利用閾より大きい)、第2のDPE利用がDPE利用閾を満たすと決定することができる。第2のDPE利用がDPE利用閾を満たすとの決定に応答して、例示的なDPE構成最適化器1304は、例示的なCNNアクセラレータ1300に第2の畳み込み配置で動作を実行するように指示することができる。さらに又はあるいは、例示的なDPE構成最適化器1304は、第2のDPE利用を第1のDPE利用と比較し、第2の畳み込み配置が第1の畳み込み配置より大きいDPE利用を有することに基づいて、例示的なCNNアクセラレータ1300に第2の畳み込み配置で動作を実行するように指示することができる。
いくつかの例において、DPE構成最適化器1304は、DPE520の累算器604の構成を調整する(例えば、動的に調整する、動的に構成する、など)。いくつかの例において、DPE構成最適化器1304は、入力値が累算器604に利用可能な既存の整数ビット数を必要としないとき、累算器604の整数ビット数を減少させる。例えば、DPE構成最適化器1304は、レンジを増加させるが累算器604の精度を低減させるように、累算器604が処理できる整数ビット数を減少させることができる。いくつかの例において、DPE構成最適化器1304は、累算器604がオーバーフローしたとき、累算器604の整数ビット数を増加させる。例えば、構成最適化器1304は、レンジを増加させるが累算器604の精度を低減させるように、累算器604が処理できる整数ビット数を増加させることができる。
図13の図示された例において、CNNアクセラレータ1300は、モードセレクタ1306を含み、モードセレクタ1306は、動作モード、実行されるべき動作、及び/又は畳み込み配置を選択する。例示的なモードセレクタ1306は、図5の例示的なコントローラ502に対応できる。図13の図示された例において、モードセレクタ1306は、畳み込みモード、プーリングモード、全結合モードなどの動作モードを選択し、選択されたモードに基づいてCNNアクセラレータ1300を構成する手段を実現する。いくつかの例において、モードセレクタ1306は、畳み込みモード内で任意のプーリングモードを選択する。いくつかの例において、モードセレクタ1306は、モードのうち1つにおいて後処理演算を選択する。例えば、モードセレクタ1306は、畳み込みモードにおける畳み込み演算を完了した後、プーリングモードにおけるプーリング演算を完了した後などに、図5のDPE520にバイアス演算、スケール演算、PReLU演算、ReLU演算などを実行するように指示することができる。
いくつかの例において、モードセレクタ1306は、選択されたモードに基づいて図5のCNNアクセラレータ500を構成する。例えば、モードセレクタ1306は、選択されたモードに基づいて図5のデータストア506、係数ストア508、DPEアレイ512などを構成することができる。例えば、モードセレクタ1306は、係数値を係数ストア508に送信するようにDMAコントローラ504に指示することにより、畳み込みモードに対して係数ストア508を構成することができる。他の例において、モードセレクタ1306は、バイアスパラメータ、スケールパラメータ等を処理するためにDPEアレイ512に送信するように係数ストア508に指示することにより、バイアス演算、スケール演算等に対してDPEアレイ512を構成することができる。
図13の図示された例において、CNNアクセラレータ1300は、畳み込みエンジン1308を含み、畳み込みエンジン1308は、入力画像に関連づけられた画像データに対する畳み込み演算を実行し、かつ/あるいはその他の方法で容易にする。例示的な畳み込みエンジン1308は、図5の例示的なコントローラ502に対応できる。例えば、畳み込みエンジン1308は、畳み込み演算を実行するためにデータストア506、係数ストア508、DPE520の1つ以上などに指示及び/又は指図するコントローラ502に対応できる。図13の図示された例において、畳み込みエンジン1308は、活性化値、画素値などを含む複数の入力チャネルを複数のフィルタと畳み込んで、複数の出力チャネルを実質的に並列に生成する手段を含む。例えば、畳み込みエンジン1308は、DPEアレイ512の1つ以上のDPE520を使用して畳み込み演算を容易にする手段を含む。
いくつかの例において、畳み込みエンジン1308は、入力画像(例えば、図1の入力画像106)に関連づけられた画像データ(例えば、活性化値、画素値など)を取得し、画像データを、入力画像内で検出されるべき関心のある画像特徴に関連づけられたフィルタ係数と畳み込み、画像データの、フィルタ係数との重複に関連づけられた出力を生成することにより、畳み込みを実行する。このような例において、モデルセレクタ1306は、畳み込み配置に基づいて図5のデータストア506、係数ストア508、DPEアレイ512などを構成する。
モードセレクタ1306が2*128畳み込み配置を選択する例において、例示的な畳み込みエンジン1308は、図12に関連して上述したように、例示的データストア506を2つのRAMブロックに構成する。例示的な畳み込みエンジン1308は、図7の第3の例示的な係数ストア704に関連して上述したように、係数ストア508を2つの係数ブロックに構成する。例示的な畳み込みエンジン1308は、例示的なデータストア506に処理されるべき各入力チャネルのデータ行の一部又は全部をロードし、図5の例示的な係数ストア508に入力データに関連づけられた係数をロードし、それにより、データ行及び係数は、図5のDPE520のそれぞれのDPEに整合する。
例示的なデータストア506及び例示的な係数ストア508がロードされ、かつ/あるいはその他の方法で構成されたことに応答して、例示的な畳み込みエンジン1308は、第1の出力位置(例えば、図10の出力位置1004)について実質的に並列に畳み込み演算(例えば、図10の畳み込み演算1000)を実行する。例えば、畳み込みエンジン1308は、係数ストア508に含まれる係数がDPE520に対して循環されて(cycled)畳み込み出力値を生成する間、データストア506に記憶された適切なワード(例えば、入力位置1008に関連づけられたワード)をアドレス指定してDPE520のそれぞれのDPEに送信することにより、畳み込み演算を実現する。
例示的な畳み込みエンジン1308は、ワードの全体(例えば、図10の入力位置1008に関連づけられたワードの全体)が処理されるまで、ワードを処理する(例えば、反復的に処理する)。いくつかの例において、畳み込みエンジン1308は、入力位置に対する全てのワードが処理されたとき、後処理演算(例えば、バイアス演算、スケール演算、PReLU演算、ReLU演算など)を実行する。入力チャネルストライドを使用し、例示的な畳み込みエンジン1308は、全ての入力位置が処理され、入力チャネルが処理されて畳み込み出力値を生成するまで、DPE520を使用して次のチャネルを畳み込む。
いくつかの例において、畳み込みエンジン1308は、畳み込みモード内で畳み込み出力に対して任意のプーリング演算(例えば、平均プーリング演算、最大プーリング演算など)を実行する。例えば、畳み込みエンジン1308は、プール出力として、出力バッファ(例えば、図5の出力バッファ514)に対するプールエリア(例えば、図2のプールエリア212)の平均値、最大値などを決定することができる。例示的な畳み込みエンジン1308は、出力バッファ514がフルである(例えば、DPE520につき閾数量の値が算出された)とき、プール出力、及び/又はより一般的にはDPE520の出力を、出力バッファ514からメモリに書き込む。
図13の図示された例において、CNNアクセラレータ1300は、プーリングエンジン1310を含み、プーリングエンジン1310は、1つ以上の畳み込み出力に対して平均プーリング演算又は最大プーリング演算などのプーリング演算を実行する。例示的なプーリングエンジン1310は、図5の例示的なコントローラ502に対応できる。例えば、プーリングエンジン1310は、プーリングモード内でプーリング演算を実行するためにデータストア506、係数ストア508、DPE520の1つ以上などに指示及び/又は指図するコントローラ502に対応できる。図示された例において、プーリングエンジン1310は、畳み込みエンジン1308により生成された畳み込み出力のセットに対してプーリング演算を実行する手段を実現する。
いくつかの例において、プーリングエンジン1310は、プールエリアを処理してプール出力を生成する。例えば、プーリングエンジン1310は、図3のプールエリア212を処理して、プールエリア212の平均値、最大値等に基づいて図3の出力位置302を生成することができる。例えば、プーリングエンジン1310は、2×2プールについては4クロックサイクル毎、3×3プールについては9クロックサイクル毎などで、データを出力することができる。例示的なプーリングエンジン1310は、プールエリア内のデータの和を算出することにより平均プーリング演算を実行し、その和に1/Avを乗算する。Avは、プール幅にプール高さを乗算したもの算出することにより決定されるプールサイズである。例示的なプーリングエンジン1310は、プールエリアの最大値を決定することにより、最大プーリング演算を実行する。
図13の図示された例において、CNNアクセラレータ1300は、全結合エンジン1312を含み、全結合エンジン1312は、畳み込みエンジン1308からの出力(例えば、畳み込み出力)及び/又はプーリングエンジン1310からの出力(例えば、プール出力)を使用して、訓練データセットに基づいて入力画像(例えば、図1の入力画像106)を様々なクラスに分類する。図13の例示的な全結合エンジン1312は、図5のコントローラ502に対応できる。例えば、コントローラ502は、データストア506、係数ストア508、DPEアレイ512などに、全結合演算を実行する(例えば、図4の出力アレイ406を生成する)ように指示することができる。図13の図示された例において、全結合エンジン1312は、畳み込み出力及び/又はプール出力に基づいて入力画像の画像特徴を分類して、入力画像に含まれる画像特徴を検出し、かつ/あるいはその他の方法で識別する手段を実現する。
いくつかの例において、CNNアクセラレータ1300は、1つ以上のリンクされたリストを使用することにより、図5のCNNアクセラレータ500を実現する。リンクされたリストは、データ要素の線形集合であり、その線形順序は、メモリにおけるそれらの物理的配置によって与えられないが、代わりに、データ要素の各々が、データ要素のうち次のデータ要素を指し示す。いくつかの例において、リンクされたリストはシステムメモリに記憶される。例えば、リンクされたリストは、図5のメインメモリ516に記憶され、図5のコントローラ502により実行され得る。いくつかの例において、リンクされたリストはサブ関数を容易にし、サブ関数は連結してマクロ関数を形成する。いくつかの例において、畳み込みエンジン1308、プーリングエンジン1310、全結合エンジン1312などは、マクロ関数の終了を示すNULLリンクに到達するまで各演算を順次通過できるため、サブ関数の数量に制限はない。例えば、コントローラ502は、CNNアクセラレータ500の全体的なCNN関数を明確に識別可能なブロックに分解し、NULLリンクに到達するまでブロックの各々を実行することができる。
いくつかの例において、図13のCNNアクセラレータ1300は、2つ以上の別個のリンクされたリストを維持する。図13の例示的なCNNアクセラレータ1300は、2つ以上のリンクされたリストをデフォルトでラウンドロビン方式で、又は任意の他の方法で実行し、かつ/あるいはその他の方法で処理することができる。いくつかの例において、図13のCNNアクセラレータ1300は、リンクされたリストのうち1つ以上をロックし又はフリーズさせて、リンクされたリストのうち1つが、リンクされたリストのうち第2のリストに引き渡す前に完了することを確保できる。
例示的なDPEインベントリエンジン手段、例示的なDPE構成最適化器手段、例示的なモードセレクタ手段、例示的な畳み込みエンジン手段、例示的なプーリングエンジン手段、及び/又は例示的な全結合エンジン手段は、ハードウェアプロセッサ上で実行するソフトウェアにより実現される。さらに又は代わりに、例示的なDPEインベントリエンジン手段、例示的なDPE構成最適化器手段、例示的なモードセレクタ手段、例示的な畳み込みエンジン手段、例示的なプーリングエンジン手段、及び/又は例示的な全結合エンジン手段は、代わりに、ASIC、FPGAなどの所望の機能性を達成するための論理演算を実行するように構造化された論理回路、及び/又はそのような回路とソフトウェア及び/又はファームウェアとの組み合わせにより実現され得る。
例示的なCNNアクセラレータ500を実現する例示的な方法が図5に示されているが、図5に示されている要素、処理、及び/又はデバイスのうち1つ以上が、組み合わせられ、分割され、再配置され、省略され、消去され、かつ/あるいは任意の他の方法で実現されてもよい。さらに、図13の例示的なDPEインベントリエンジン1302、例示的なDPE構成最適化器1304、例示的なモードセレクタ1306、例示的な畳み込みエンジン1308、例示的なプーリングエンジン1310、例示的な全結合エンジン1312、及び/又はより一般的には例示的なCNNアクセラレータ1300は、ハードウェア、ソフトウェア、ファームウェア、及び/又は、ハードウェア、ソフトウェア、及び/又はファームウェアの任意の組み合わせにより実現されてもよい。ゆえに、例えば、図13の例示的なDPEインベントリエンジン1302、例示的なDPE構成最適化器1304、例示的なモードセレクタ1306、例示的な畳み込みエンジン1308、例示的なプーリングエンジン1310、例示的な全結合エンジン1312、及び/又はより一般的には例示的なCNNアクセラレータ1300のうち任意のものが、1つ以上のアナログ又はデジタル回路、論理回路、プログラマブルプロセッサ、プログラマブルコントローラ、グラフィックス処理ユニット(GPU)、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、プログラマブル論理デバイス(PLD)、及び/又はフィールドプログラマブル論理デバイス(FPLD)により実現できる。純粋にソフトウェア及び/又はファームウェア実装をカバーするために本特許の装置又はシステムクレームのうち任意のものを読むとき、例示的なDPEインベントリエンジン1302、例示的なDPE構成最適化器1304、例示的なモードセレクタ1306、例示的な畳み込みエンジン1308、例示的なプーリングエンジン1310、及び/又は例示的な全結合エンジン1312のうちの少なくとも1つが、ソフトウェア及び/又はファームウェアを含むメモリ、デジタル多用途ディスク(DVD)、コンパクトディスク(CD)、ブルーレイディスクなどの非一時的コンピュータ読取可能記憶デバイス又は記憶ディスクを含むことがここに明示的に定義される。またさらに、図13の例示的なCNNアクセラレータ1300は、図13に示されたものに追加で又は代わって1つ以上の要素、処理、及び/又はデバイスを含んでもよく、かつ/あるいは図示された要素、処理、及びデバイスの任意のもの又は全てのうち2つ以上を含んでもよい。本明細書で用いられるとき、フレーズ「通信において」はその変形を含め、直接通信及び/又は1つ以上の中間コンポーネントを通した間接通信を包含し、直接の物理的(例えば、有線)通信及び/又は一定の通信を必要とせず、むしろ、周期的な間隔、スケジュールされた間隔、非周期的な間隔、及び/又は1回限りのイベントにおける選択的通信をさらに含む。
図13のCNNアクセラレータ1300を実現するための、例示的なハードウェア論理、マシン読取可能命令、ハードウェアにより実現されるステートマシン、及び/又はこれらの任意の組み合わせを表すフローチャートが、図14〜図18に示される。マシン読取可能命令は、図19に関連して以下で論じられる例示的なプロセッサプラットフォーム1900に示されるプロセッサ1912などのコンピュータプロセッサによる実行のための実行可能プログラム又は実行可能プログラムの一部であってもよい。プログラムは、CD‐ROM、フロッピーディスク、ハードドライブ、DVD、ブルーレイディスク、又はプロセッサ1912に関連づけられたメモリなどの非一時的コンピュータ読取可能記憶媒体に記憶されたソフトウェアで具現化されてもよいが、代わりに、プログラム全体及び/又はその一部が、プロセッサ1912以外のデバイスにより実行され、かつ/あるいはファームウェア又は専用ハードウェアで具現化されてもよい。さらに、例示的なプログラムは図14〜図18に示されるフローチャートを参照して説明されるが、例示的なCNNアクセラレータ1300を実現する多くの他の方法が代わりに使用されてもよい。例えば、ブロックの実行順序が変更されてもよく、かつ/あるいは説明されたブロックのいくつかが変更され、消去され、あるいは組み合わせられてもよい。さらに又は代わりに、ブロックのうち任意のもの又は全てが、ソフトウェア又はファームウェアを実行することなく対応する動作を実行するように構造化された1つ以上のハードウェア回路(例えば、離散及び/又は集積アナログ及び/又はデジタル回路、FPGA、ASIC、比較器、演算増幅器(オペアンプ)、論理回路など)により実現されてもよい。
上述したように、図14〜図18の例示的な処理は、ハードディスクドライブ、フラッシュメモリ、読取専用メモリ、コンパクトディスク、デジタル多用途ディスク、キャッシュ、ランダムアクセスメモリ、及び/又は情報が任意の継続時間の間(例えば、延長された期間の間、永続的に、短い間、一時的にバッファリングするため、及び/又は情報をキャッシュするため)記憶される任意の他の記憶デバイス又は記憶ディスクなどの非一時的コンピュータ及び/又はマシン読取可能媒体に記憶される実行可能命令(例えば、コンピュータ及び/又はマシン読取可能命令)を使用して実現されてもよい。本明細書で用いられるとき、用語の非一時的コンピュータ読取可能媒体は、任意タイプのコンピュータ読取可能記憶デバイス及び/又は記憶ディスクを含み、伝搬信号を除外し、伝送媒体を除外することが明確に定義される。
本明細書において、「含める」及び「含む」(及びその全ての形式及び時制)は、オープンエンドの用語として使用される。ゆえに、クレームが、何らかの形式の「含める」又は「含む」(例えば、含む、含める、含んでいる、含めている、有するなど)をプリアンブルとして又は任意の種類のクレーム記載内で採用するときはいつでも、対応するクレーム又は記載の範囲外に該当することなく、さらなる要素、用語などが存在し得ることが理解されるべきである。本明細書で用いられるとき、フレーズ「少なくとも」が、例えばクレームのプリアンブルにおいて移行語として使用される場合、それは、用語「含む」及び「含める」がオープンエンドであるのと同様にオープンエンドである。用語「及び/又は」は、例えばA、B、及び/又はCなどの形式で使用されるとき、(1)A単体、(2)B単体、(3)C単体、(4)AとB、(5)AとC、(6)BとC、及び(7)AとBとCなどの、A、B、Cのうち任意の組み合わせ又はサブセットを参照する。
図14は、入力画像に関連づけられた画像データを処理する図5のCNNアクセラレータ500及び/又は図13のCNNアクセラレータ1300を実現するために実行され得る例示的なマシン読取可能命令1400を表すフローチャートである。図14の例示的なマシン読取可能命令1400はブロック1402で始まり、ブロック1402において、例示的なCNNアクセラレータ1300は、利用可能なデータ処理要素(DPE)を棚卸する。例えば、DPEインベントリエンジン1302は、処理のためのDPE520の可用性、DPE520のうち1つ以上の構成及び/又はモード、などを決定することができる。
ブロック1404において、例示的なCNNアクセラレータ1300は、DPEリソース利用を最大化し、電力消費を最小化するために、DPE構成を選択する。例えば、DPE構成最適化器1304は、フィルタサイズ、処理されるべき入力チャネルの数量、生成されるべき出力チャネルの所望数量などに基づいて1*256畳み込み配置、2*128畳み込み配置などを使用するよう決定して、DPEリソース利用を増加させ、電力消費を低減させることができる。このような例において、DPE構成最適化器1304は、入力チャネルの数量を制限して、入力チャネルに関連づけられた画像データの全体及び対応する係数が図5のCNNアクセラレータ500に全体的に記憶できることを確保し、データ移動を低減させて(例えば、最小化して)、実質的に高いDPEリソース利用(例えば、75%利用、100%利用など)を維持しながら電力消費を低減させることができる。
DPE構成の選択に応答して、例示的なCNNアクセラレータ1300は、ブロック1406において、DPE構成が1つ以上の使用されないDPEをきたし又は結果としてもたらすかどうかを決定する。動作要件が64個の入力チャネル及び192個の出力チャネルを含む例において、DPE構成最適化器1304は、4*64が他の畳み込み配置(例えば、1*256、2*128、4*32など)と比較してより高いDPE利用を結果としてもたらすことに基づいて、4*64畳み込み配置を使用し、全ての入力について3回循環されるよう決定する。
ブロック1406において、例示的なCNNアクセラレータ1300が使用されないDPEがあると決定した場合、制御はブロック1408に進み、CNNアクセラレータ1300の動作を停止させて代わりのDPE構成を生成する。例えば、DPE構成最適化器1304は、動作に対して閾数量の利用可能DPE520が割り当てられる、指定される、などされるまで、CNNアクセラレータ1300の動作の前進を防止又は保留するよう決定することができる。例えば、DPE構成最適化器1304は、DPE利用閾より上にDPE利用を増加させるために、DPE520の代わりの畳み込み配置を生成するよう決定することができる。例えば、DPE構成最適化器1304がブロック1404において1*256畳み込み配置を選択した場合、64個の使用されないDPE520は、畳み込み演算全体を通して75%のDPE利用を結果としてもたらし、ゆえに、4*64畳み込み配置などの他の畳み込み配置と比較して、より長い畳み込み時間をきたし、4*64畳み込み配置は、0個の使用されないDPE520及び対応する100%のDPE利用を結果としてもたらす。
このような例において、DPE構成最適化器1304は、ブロック1408において、4*64畳み込み配置を生成し、かつ/あるいはその他の方法で決定することができる。例えば、DPE構成最適化器1304は、4*64畳み込み配置のDPE利用が(1)前に生成された畳み込み配置(例えば、1*256畳み込み配置、及び/又は(2)DPE利用閾(例えば、75%のDPE利用、90%のDPE利用など)より大きいことに基づいて、4*64畳み込み配置を使用するよう決定することができる。例えば、DPE構成最適化器1304は、対応するDPE利用がDPE利用閾を満たす(例えば、DPE利用がDPE利用閾より大きい)ことに基づいて、4*64畳み込み配置を生成し、使用するよう決定することができる。ブロック1408における代わりのDPE構成の生成に応答して、制御はブロック1404に戻り、ブロック1408において生成されたDPE構成を選択する。代わりに、使用されないDPE520がない結果をもたらすか又はDPE利用閾を満たす代わりのDPE構成がない場合、制御は(例えば、タイムアウト期間の後、1つ以上の畳み込み配置のDPE利用を評価した後、などに)ブロック1406からブロック1410に進み、現在のDPE構成で続行し、代わりのDPE構成がないことを示す警告を生成し、あるいはCNNアクセラレータ1300の動作を停止させてもよい。
ブロック1406において、例示的なCNNアクセラレータ1300が使用されないDPEがないと決定した場合、ブロック1410において、CNNアクセラレータ1300は、コントローラモードを選択する。例えば、モードセレクタ1306は、任意プーリング付き畳み込みモード、重複プーリングモード、又は全結合モードで動作するよう決定することができる。
任意プーリング付き畳み込みモードの選択に応答して、制御はブロック1412に進み、任意プーリング付き畳み込みモードで動作を開始する。ブロック1412を実現するために使用できる例示的な処理が、図15に関連して後述される。例えば、コントローラ502は、DPE520に畳み込みモード、プーリング付き畳み込みモード等で動作するように指示することができる。
重複プーリングモードの選択に応答して、制御はブロック1414に進み、重複プーリングモードで動作を開始する。ブロック1414を実現するために使用できる例示的な処理が、図16に関連して後述される。例えば、コントローラ502は、DPE520に重複プーリングモードで動作するように指示することができる。
全結合モードの選択に応答して、制御はブロック1416に進み、全結合モードで動作を開始する。ブロック1416を実現するために使用できる例示的な処理が、図17に関連して後述される。例えば、コントローラ502は、DPE520に全結合モードで動作するように指示することができる。ブロック1412において任意プーリング付き畳み込み演算を、ブロック1414において重複プーリング演算を、又はブロック1416において全結合演算を終了し、かつ/あるいはその他の方法で実行したことに応答して、例示的なマシン読取可能命令1400は終了する。
図15は、任意プーリング付き畳み込みを実行する図5のCNNアクセラレータ500及び/又は図13のCNNアクセラレータ1300を実現するために実行され得る例示的なマシン読取可能命令1412を表すフローチャートである。例示的なマシン読取可能命令1412は、図14の例示的なマシン読取可能命令1400のブロック1412を実現することができる。図15の例示的なマシン読取可能命令1412はブロック1502で始まり、ブロック1502において、例示的なCNNアクセラレータ1300は、CNNアクセラレータ1300のモードを任意プーリング付き畳み込みに設定する。例えば、モードセレクタ1306は、CNNアクセラレータ1300を任意プーリング付き畳み込みモードに対して構成することができる。
ブロック1504において、例示的なCNNアクセラレータ1300は、入力チャネルに対して最小数の行が存在するかどうかを決定する。例えば、畳み込みエンジン1308は、ストレージに最小数の行が存在するかどうかを決定して、関心のある入力チャネルを畳み込むことができる。例えば、図5のDMAコントローラ504は、1つ以上の入力チャネルが処理されるために必要な複数のデータ行をデータストア506に送信することができる。
ブロック1504において、例示的なCNNアクセラレータ1300が、入力チャネルに対して最小数の行が存在しないと決定した場合、制御は、最小数の行が利用可能になるまでブロック1504において待機する。ブロック1504において、例示的なCNNアクセラレータ1300が、入力チャネルに対して最小数の行が存在すると決定した場合、制御はブロック1506に進み、入力チャネルの畳み込みを開始する。例えば、畳み込みエンジン1308は、図10の入力チャネル1002のうち1つを図10のフィルタ1010のうち1つで畳み込み、畳み込み出力値を生成することができる。
入力チャネルの畳み込みの開始に応答して、制御はブロック1508に進み、畳み込みが完了したかどうかを決定する。例えば、畳み込みエンジン1308は、図10の入力位置1008について値の全体が処理されるまで、入力チャネル1002のうち1つをフィルタ1010のうち1つで畳み込むことができる。ブロック1508において、例示的なCNNアクセラレータ1300が、畳み込みが完了していないと決定した場合、制御は畳み込みが完了するまで待機し、そうでなければ、制御はブロック1510に進み、処理すべきさらなる入力があるかどうかを決定する。例えば、畳み込みエンジン1308は、処理されるべき入力位置1008に含まれるさらなる活性化値、画素値などがあると決定することができる。
ブロック1510において、例示的なCNNアクセラレータ1300が、処理すべきさらなる入力があると決定した場合、制御はブロック1504に戻り、さらなる入力を処理するために最小数の行が存在するかどうかを決定する。ブロック1510において、例示的なCNNアクセラレータ1300が、処理すべき残された入力がないと決定した場合、ブロック1512において、CNNアクセラレータ1300は、小計を累算する(例えば、図10の入力位置1008に対応する畳み込み出力値の和を算出する)。例えば、畳み込みエンジン1308は、小計を累算することができる。
ブロック1514において、例示的なCNNアクセラレータ1300は、プーリングが有効にされているかどうかを決定する。例えば、モードセレクタ1306は、平均プーリング、最大プーリングなどを可能にするよう決定することができる。ブロック1514において、例示的なCNNアクセラレータ1300が、プーリングが有効にされていないと決定した場合、制御はブロック1518に進み、出力バッファに書き込む。例えば、畳み込みエンジン1308は、図10の入力位置1008についての畳み込み出力の累算値を出力バッファに出力して、図10の出力位置1004を生成することができる。出力バッファへの書き込みに応答して、図15の例示的なマシン読取可能命令1412は、図14の例示的なマシン読取可能命令1400に戻り、終了する。例えば、畳み込みエンジン1308は、フィルタ1010で畳み込まれた入力チャネル1002の入力位置1008に対応する出力位置1004を生成した。このような例において、畳み込みエンジン1308は、入力チャネル1002の残りの入力位置を畳み込んで(例えば、反復的に畳み込んで)出力チャネル1006を生成することができる。
ブロック1514において、例示的なCNNアクセラレータ1300が、プーリングが有効にされていると決定した場合、制御はブロック1516に進み、プーリング及び畳み込み比較を実行する。例えば、プーリングエンジン1310は、出力チャネル1006のプールエリアの平均値又は最大値を算出することができる。プーリング及び畳み込み比較を実行してプール出力値を生成したことに応答して、制御はブロック1518に進み、プール出力値を出力バッファに書き込む。
図16は、重複プーリングを実行する図5のCNNアクセラレータ500及び/又は図13のCNNアクセラレータ1300を実現するために実行され得る例示的なマシン読取可能命令1414を表すフローチャートである。図14の例示的なマシン読取可能命令1414は、図14の例示的なマシン読取可能命令1400のブロック1414を実現するために使用できる。図14の例示的なマシン読取可能命令1414はブロック1602で始まり、ブロック1602において、例示的なCNNアクセラレータ1300は、CNNアクセラレータ1300のモードを重複プーリングに設定する。例えば、モードセレクタ1306は、CNNアクセラレータ1300を重複プーリングモードに対して構成することができる。
モードを重複プーリングに設定したことに応答して、例示的なCNNアクセラレータ1300は、ブロック1604において、プールエリアに対して最小数の行が存在するかどうかを決定する。例えば、プーリングエンジン1310は、ストレージに最小数の行が存在するかどうかを決定して、プールエリアを処理することができる。例えば、図5のDMAコントローラ504は、図2のプールエリア212を処理するために必要な複数のデータ行をデータストア506に送信することができる。
ブロック1604において、例示的なCNNアクセラレータ1300が、プールエリアに対して最小数の行が存在しないと決定した場合、制御は、最小数の行が利用可能になるまでブロック1604において待機する。ブロック1604において、例示的なCNNアクセラレータ1300が、プールエリアに対して最小数の行が存在すると決定した場合、制御はブロック1606に進み、現在の値を最大プーリングのために記憶された値と比較し、あるいは平均プーリングのために累算する。例えば、プーリングエンジン1310は、最大プーリングに対して構成されているとき、プールエリアの値を比較して(例えば、反復的に比較して)プールエリアの最大値を決定することができる。他の例において、プーリングエンジン1310は、プールエリアの値を累算し、プールエリアのサイズ及びプールエリアの累算値に基づいてプールエリアの平均値を算出することができる。最大プール値又は平均プール値の算出に応答して、図16の例示的なマシン読取可能命令1414は、図14の例示的なマシン読取可能命令1400に戻り、終了する。
図17は、全結合演算を実行する図5のCNNアクセラレータ500及び/又は図13のCNNアクセラレータ1300を実現するために実行され得る例示的なマシン読取可能命令1416を表すフローチャートである。図17の例示的なマシン読取可能命令1416は、図14の例示的なマシン読取可能命令1400のブロック1416を実現するために使用できる。図17の例示的なマシン読取可能命令1416はブロック1702で始まり、ブロック1702において、例示的なCNNアクセラレータ1300は、CNNアクセラレータ1300のモードを全結合モードに設定する。例えば、モードセレクタ1306は、CNNアクセラレータ1300を全結合モードに対して構成することができる。
モードを全結合モードに設定したことに応答して、例示的なCNNアクセラレータ1300は、N個の完全なベクトルを保持するように係数ストアを構成する。例えば、図5のコントローラ502は、DMAコントローラ504に、図4の係数アレイ404を図5の係数ストア508に送信するように指示することができる。
ブロック1706において、例示的なCNNアクセラレータ1300は、RAMにデータ行列を分散させて、全てのDPEをベクトルの並列処理について可能にする。例えば、図5のコントローラ502は、DMAコントローラ504に、図5のメインメモリ516からデータストア506にデータ(例えば、畳み込み出力値、プール出力値など)を送信するように指示することができ、データストア506は同様に、該データを接続マルチプレクサ510を介してDPE520に送信する。ここで、DPE520の各々は、他のDPE520と実質的に並列に図4の出力アレイ406の一部を生成し、かつ/あるいはその他の方法で算出する。ベクトルの処理に応答して、図17の例示的なマシン読取可能命令1416は、図14の例示的なマシン読取可能命令1400に戻り、終了する。
図18は、累算器を構成する(例えば、動的に構成する)図5のCNNアクセラレータ500及び/又は図13のCNNアクセラレータ1300を実現するために実行され得る例示的なマシン読取可能命令1800を表すフローチャートである。例示的なマシン読取可能命令1800はブロック1802で始まり、ブロック1802において、例示的なCNNアクセラレータ1300は、入力により必要とされる整数ビット数を決定する。例えば、DPE構成最適化器1304は、累算器604への入力値が17整数ビットを必要とし、累算器604の構成が、累算器604が16整数ビットを処理することを可能にすると決定することができる。
ブロック1804において、例示的なCNNアクセラレータ1300は、必要とされる整数ビット数が現在の整数ビット数より大きいかどうかを決定する。例えば、DPE構成最適化器1304は、17整数ビットの入力値が、累算器604の構成の16整数ビットより多い整数ビットを必要とすると決定することができる。
ブロック1804において、例示的なCNNアクセラレータ1300が、必要とされる整数ビット数が現在の整数ビット数より大きいと決定した場合、制御はブロック1810に進み、FP16を固定小数点フォーマットに変換する。ブロック1804において、例示的なCNNアクセラレータ1300が、必要とされる整数ビット数が現在の整数ビット数より小さいと決定した場合、ブロック1806において、CNNアクセラレータ1300は、整数ビット数を必要とされる数に増加させ、それに応じて小数ビット数を減少させることにより、固定小数点フォーマットを調整する。例えば、DPE構成最適化器1304は、整数ビット数を16整数ビットから17整数ビットに増加させて累算器604のレンジを増加させ、小数ビット数を減少させて累算器604の精度を減少させることができる。
固定小数点フォーマットの調整に応答して、例示的なCNNアクセラレータ1300は、ブロック1808において、累算器を更新された固定小数点フォーマットに整合させる(aligns)。例えば、DPE構成最適化器1304は、この例において、累算器604を17整数ビットの更新された固定小数点フォーマットに整合させることができる。ブロック1808における累算器の整合に応答して、例示的なCNNアクセラレータ1300は、ブロック1810において、FP16入力を固定小数点フォーマットに変換する。例えば、畳み込みエンジン1308、プーリングエンジン1310、全結合エンジン1312などは、累算器604への入力をFP16から固定小数点フォーマットに変換することができる。
ブロック1812において、例示的なCNNアクセラレータは、入力を累算値に加算する。例えば、畳み込みエンジン1308、プーリングエンジン1310、全結合エンジン1312などは、累算器604への入力値を前に記憶された値又は前に累算された値に加算することができる。
入力を累算値に加算したことに応答して、例示的なCNNアクセラレータ1300は、加算オーバーフローがあるかどうかを決定する。例えば、DPE構成最適化器1304は、累算器604の整数ビット数がオーバーフローを防止するのに十分でないと決定することができる。
ブロック1814において、例示的なCNNアクセラレータ1300が、加算オーバーフローがあると決定した場合、制御はブロック1822に進み、累算器の固定小数点フォーマットを1だけ調整し、小数ビットを1だけ減少させる。ブロック1814において、例示的なCNNアクセラレータ1300が、加算オーバーフローがないと決定した場合、ブロック1816において、CNNアクセラレータ1300は、加算結果が整数ビットのフルレンジを使用しているかどうかを決定する。例えば、DPE構成最適化器1304は、整数ビット数を1だけ減少させてレンジを低減させ、これは整数ビットのフルレンジが使用されないことに起因して必要とされず、また、精度を増加させて図6の累算器604の動作を最適化し、かつ/あるいはその他の方法で向上させることができる。
ブロック1816において、例示的なCNNアクセラレータ1300が、加算結果が整数ビットのフルレンジを使用していると決定した場合、制御はブロック1824に進み、加算結果を固定小数点フォーマットに整合させ、累算器に割り当てる。例えば、DPE構成最適化器1304は、加算結果が累算器604の整数ビットのフルレンジを使用することに基づいて、累算器604が最適化されていると決定することができる。
ブロック1816において、例示的なCNNアクセラレータ1300が、加算結果が整数ビットのフルレンジを使用していないと決定した場合、ブロック1818において、CNNアクセラレータ1300は、整数ビット数が12より大きいかどうかを決定する。例えば、DPE構成最適化器1304は、累算器604の整数ビット数が最小閾値の12整数ビットを上回るかどうかを決定し、そうでない場合、整数ビット数を最小閾値に少なくとも等しい値に増加させる。あるいは、最小閾値は、任意の他の整数ビット数であってもよい。
ブロック1818において、例示的なCNNアクセラレータ1300が、整数ビット数が12より大きくないと決定した場合、制御はブロック1822に進み、整数ビット数を1だけ増加させ、小数ビットを1だけ減少させることにより、累算器の固定小数点フォーマットを調整する。例えば、DPE構成最適化器1304は、整数ビット数を増加させることにより累算器604のレンジを増加させるが、小数ビット数を減少させることにより累算器604の精度を減少させることができる。固定小数点フォーマットの調整に応答して、制御はブロック1824に進み、加算結果を固定小数点フォーマットに整合させ、累算器に割り当てる。
ブロック1818において、例示的なCNNアクセラレータ1300が、整数ビット数が12より大きいと決定した場合、ブロック1820において、CNNアクセラレータ1300は、整数ビット数を1だけ減少させ、小数ビットを1だけ増加させることにより、固定小数点フォーマットを調整する。例えば、DPE構成最適化器1304は、整数ビット数を減少させることにより累算器604のレンジを減少させるが、小数ビット数を増加させることにより累算器604の精度を増加させることができる。
ブロック1820における固定小数点フォーマットの調整に応答して、制御はブロック1824に進み、加算結果を固定小数点フォーマットに整合させ、累算器に割り当てる。例えば、DPE構成最適化器1304は、加算結果を更新された固定小数点フォーマットに整合させ、更新された固定小数点フォーマットを累算器604に割り当てることができる。加算結果を固定小数点フォーマットに整合させ、累算器に割り当てたことに応答して、図18の例示的なマシン読取可能命令1800は終了する。
図19は、図13のCNNアクセラレータ1300を実現する図14〜図18の命令を実行するように構造化された例示的なプロセッサプラットフォーム1900のブロック図である。プロセッサプラットフォーム1900は、例えば、サーバ、パーソナルコンピュータ、ワークステーション、自己学習機械(例えば、ニューラルネットワーク)、モバイルデバイス(例えば、セルフォン、スマートフォン、iPad(登録商標)TMなどのタブレット)、パーソナルデジタルアシスタント(PDA)、インターネットアプライアンス、DVDプレーヤ、CDプレーヤ、デジタルビデオレコーダ、ブルーレイプレーヤ、ゲーミングコンソール、パーソナルビデオレコーダ、セットトップボックス、ヘッドセット若しくは他のウェアラブルデバイス、又は任意の他タイプのコンピュータデバイスであってもよい。
図示された例のプロセッサプラットフォーム1900は、プロセッサ1912を含む。図示された例のプロセッサ1912はハードウェアである。例えば、プロセッサ1912は、1つ以上の集積回路、論理回路、マイクロプロセッサ、GPU、DSP、又は任意の所望のファミリ若しくは製造業者からのコントローラにより実現できる。ハードウェアプロセッサは、半導体ベース(例えば、シリコンベース)デバイスであってもよい。この例において、プロセッサ1912は、図13の例示的なCNNアクセラレータ1300、例示的なDPEインベントリエンジン1302、例示的なDPE構成最適化器1304、例示的なモードセレクタ1306、例示的な畳み込みエンジン1308、例示的なプーリングエンジン1310、及び例示的な全結合エンジン1312を実現する。
図示された例のプロセッサ1912は、ローカルメモリ1913(例えば、キャッシュ)を含む。図示された例のプロセッサ1912は、バス1918を介して揮発性メモリ1914及び不揮発性メモリ1916を含むメインメモリと通信する。揮発性メモリ1914は、非同期ダイナミックランダムアクセスメモリ(Synchronous Dynamic Random Access Memory、SDRAM)、ダイナミックランダムアクセスメモリ(Dynamic Random Access Memory、DRAM)、RAMBUS(登録商標)ダイナミックランダムアクセスメモリ(RAMBUS Dynamic Random Access Memory、RDRAM(登録商標))、及び/又は任意の他タイプのランダムアクセスメモリデバイスにより実現されてもよい。不揮発性メモリ1916は、フラッシュメモリ及び/又は任意の他の所望タイプのメモリデバイスにより実現されてもよい。メインメモリ1914、1916へのアクセスは、メモリコントローラにより制御される。
図示された例のプロセッサプラットフォーム1900は、インターフェース回路1920をさらに含む。インターフェース回路1920は、イーサネット(登録商標)インターフェース、ユニバーサルシリアルバス(USB)、Bluetooth(登録商標)インターフェース、近距離通信(NFC)インターフェース、及び/又はPCIエクスプレスインターフェースなどの、任意タイプのインターフェース標準により実現されてもよい。
図示された例において、1つ以上の入力デバイス1922がインターフェース回路1920に接続されている。入力デバイス1922は、ユーザがデータ及び/又はコマンドをプロセッサ1912に入力することを可能にする。入力デバイス1922は、例えば、オーディオセンサ、マイクロホン、カメラ(静止画又はビデオ)、キーボード、ボタン、マウス、タッチスクリーン、トラックパッド、トラックボール、等点(isopoint)デバイス、及び/又は音声認識システムにより実現できる。
また、1つ以上の出力デバイス1924が、図示された例のインターフェース回路1920に接続されている。出力デバイス1924は、例えば、ディスプレイデバイス(例えば、発光ダイオード(LED)、有機発光ダイオード(OLED)、液晶ディスプレイ(LCD)、陰極線管ディスプレイ(CRT)、インプレーススイッチング(in-place switching、IPS)ディスプレイ、タッチスクリーンなど)、触覚出力デバイス、プリンタ、及び/又はスピーカにより実現できる。ゆえに、図示された例のインターフェース回路1920は、グラフィックスドライバカード、グラフィックスドライバチップ、及び/又はグラフィックスドライバプロセッサを典型的に含む。
図示された例のインターフェース回路1920は、ネットワーク1926を介した外部マシン(例えば、任意の種類のコンピューティングデバイス)とのデータの交換を容易にするための送信機、受信機、送受信機、モデム、住宅ゲートウェイ、無線アクセスポイント、及び/又はネットワークインターフェースなどの通信デバイスをさらに含む。通信は、例えば、イーサネット接続、デジタル加入者線(DSL)接続、電話回線接続、同軸ケーブルシステム、衛星システム、ラインオブサイト(line-of-site)無線システム、セルラー電話システムなどを介してもよい。
図示された例のプロセッサプラットフォーム1900は、ソフトウェア及び/又はデータを記憶するための1つ以上の大容量記憶デバイス1928をさらに含む。そのような大容量記憶デバイス1928の例は、フロッピーディスクドライブ、ハードドライブディスク、コンパクトディスクドライブ、ブルーレイディスクドライブ、リダンダントアレイオブインディペンデントディスク(redundant array of independent disks、RAID)、及びデジタル多用途ディスク(DVD)ドライブを含む。
図14〜図18のマシン実行可能命令1932は、大容量記憶デバイス1928内、揮発性メモリ1914内、不揮発性メモリ1916内、及び/又はCD又はDVDなどの取外し可能な非一時的コンピュータ読取可能記憶媒体上に記憶されてもよい。
上述から、畳み込みニューラルネットワークの畳み込み効率を向上させる例示的なシステム、方法、装置、及び製造品が開示されていることが理解されるであろう。本明細書に開示される例は、複数の入力チャネルを複数のフィルタで畳み込み、出力チャネルの複数の出力位置を実質的に並列に、及び/又はさもなければ実質的に同時に生成することにより、畳み込み演算を加速する。本明細書に開示される例は、動作モード又は畳み込み配置のうち少なくとも1つに基づいて入力画像データ及びフィルタ係数のためのストレージインスタンスを構成することにより、高められた畳み込み効率を提供する。本明細書に開示される例は、畳み込み演算中に1回だけ入力チャネルの入力位置にアクセスすることによってCNNアクセラレータ内のデータ移動を最小化し及び/又は低減させることにより、低減された電力で向上した畳み込み演算を提供する。
例1は、畳み込み効率を向上させる装置を含み、当該装置は、プラットフォームに利用可能なデータ処理要素(DPE)アレイに含まれるDPEを識別するDPEインベントリエンジンと、上記DPEのうち識別されたDPEの畳み込み配置を決定するモードセレクタと、上記DPEのうち上記識別されたDPEに基づいてDPE利用を決定するDPE構成最適化器と、上記DPE利用がDPE利用閾を満たすとき上記DPEのうち上記識別されたDPEを使用して畳み込み演算を容易にする(facilitate)畳み込みエンジンと、を含む。
例2は、例1に記載の装置を含み、上記畳み込みエンジンは、(a)入力チャネルの入力位置の活性化値と(b)上記入力位置に対応するフィルタ係数とを乗算して畳み込み出力を生成し、上記畳み込み出力の和を算出して出力チャネルの出力位置を生成する。
例3は、例2に記載の装置を含み、上記出力位置は、第1の出力位置であり、上記畳み込みエンジンは、上記第1の出力位置を含む出力位置を含むプールエリアを算出し、上記プールエリアの平均値又は最大値のうち少なくとも1つを算出する。
例4は、例3の記載の装置を含み、上記畳み込みエンジンは、上記プールエリアの上記少なくとも1つの平均値又は最大値に対して、バイアス演算、スケール演算、パラメトリック正規化器線形ユニット(rectifier linear unit)演算、又は正規化器線形ユニット演算のうち少なくとも1つを実行する。
例5は、例1に記載の装置を含み、上記畳み込み配置は、第1の畳み込み配置であり、上記DPE利用は、第1のDPE利用であり、上記DPE構成最適化器は、上記第1のDPE利用を上記DPE利用閾と比較し、上記第1のDPE利用が上記DPE利用閾を満たさないとき上記畳み込み演算の上記容易にすることを防止し、第2の畳み込み配置に関連づけられた第2のDPE利用を上記DPE利用閾と比較し、上記畳み込みエンジンは、上記比較に基づいて上記第2のDPE利用が上記DPE利用閾を満たすとき上記第2の畳み込み配置を使用して上記畳み込み演算を容易にする。
例6は、例1に記載の装置を含み、上記DPEアレイは256個のDPEを含む。
例7は、例1に記載の装置を含み、上記畳み込み配置は、1*256、2*128、4*64、8*32、又は16*16畳み込み配置のうち少なくとも1つである。
例8は、例1に記載の装置を含み、上記畳み込みエンジンは、実質的に並列に上記DPEのうち上記識別されたDPEを使用して上記畳み込み演算を容易にする。
例9は、例1に記載の装置を含み、上記畳み込みエンジンは、累算器の整数ビット数を調整して上記累算器のレンジを修正すること、又は上記累算器の小数ビット数を調整して上記累算器の精度を修正すること、のうち少なくとも1つにより上記畳み込み演算を容易にする。
例10は、命令を含む非一時的コンピュータ読取可能記憶媒体を含み、上記命令は、実行されたときにマシンに少なくとも、プラットフォームに利用可能なデータ処理要素(DPE)アレイに含まれるDPEを識別し、上記DPEのうち識別されたDPEの畳み込み配置を決定し、上記DPEのうち上記識別されたDPEに基づいてDPE利用を決定し、上記DPE利用がDPE利用閾を満たすとき上記DPEのうち上記識別されたDPEを使用して畳み込み演算を容易にすることをさせる。
例11は、例10に記載の非一時的コンピュータ読取可能記憶媒体を含み、当該媒体は命令をさらに含み、上記命令は、実行されたときに上記マシンに少なくとも、(a)入力チャネルの入力位置の活性化値と(b)上記入力位置に対応するフィルタ係数とを乗算して畳み込み出力を生成し、上記畳み込み出力の和を算出して出力チャネルの出力位置を生成することをさせる。
例12は、例11に記載の非一時的コンピュータ読取可能記憶媒体を含み、上記出力位置は、第1の出力位置であり、当該媒体は命令をさらに含み、上記命令は、実行されたときに上記マシンに少なくとも、上記第1の出力位置を含む出力位置を含むプールエリアを算出し、上記プールエリアの平均値又は最大値のうち少なくとも1つを算出することをさせる。
例13は、例11に記載の非一時的コンピュータ読取可能記憶媒体を含み、当該媒体は命令をさらに含み、上記命令は、実行されたときに上記マシンに少なくとも、上記プールエリアの上記少なくとも1つの平均値又は最大値に対して、バイアス演算、スケール演算、パラメトリック正規化器線形ユニット演算、又は正規化器線形ユニット演算のうち少なくとも1つを実行することをさせる。
例14は、例10に記載の非一時的コンピュータ読取可能記憶媒体を含み、上記畳み込み配置は、第1の畳み込み配置であり、上記DPE利用は、第1のDPE利用であり、当該媒体は命令をさらに含み、上記命令は、実行されたときに上記マシンに少なくとも、上記第1のDPE利用を上記DPE利用閾と比較し、上記第1のDPE利用が上記DPE利用閾を満たさないとき上記畳み込み演算の上記容易にすることを防止し、第2の畳み込み配置に関連づけられた第2のDPE利用を上記DPE利用閾と比較し、上記比較に基づいて上記第2のDPE利用が上記DPE利用閾を満たすとき上記第2の畳み込み配置を使用して上記畳み込み演算を容易にすることをさせる。
例15は、例10に記載の非一時的コンピュータ読取可能記憶媒体を含み、上記DPEアレイは256個のDPEを含む。
例16は、例10に記載の非一時的コンピュータ読取可能記憶媒体を含み、上記畳み込み配置は、1*256、2*128、4*64、8*32、又は16*16畳み込み配置のうち少なくとも1つである。
例17は、例10に記載の非一時的コンピュータ読取可能記憶媒体を含み、上記DPEのうち上記識別されたDPEは、実質的に並列に上記畳み込みを容易にする。
例18は、例10に記載の非一時的コンピュータ読取可能記憶媒体を含み、当該媒体は命令をさらに含み、上記命令は、実行されたときに上記マシンに少なくとも、累算器の整数ビット数を調整して上記累算器のレンジを修正し、あるいは上記累算器の小数ビット数を調整して上記累算器の精度を修正することをさせる。
例19は、畳み込み効率を向上させる方法を含み、当該方法は、プラットフォームに利用可能なデータ処理要素(DPE)アレイに含まれるDPEを識別するステップと、上記DPEのうち識別されたDPEの畳み込み配置を決定するステップと、上記DPEのうち上記識別されたDPEに基づいてDPE利用を決定するステップと、上記DPE利用がDPE利用閾を満たすとき上記DPEのうち上記識別されたDPEを使用して畳み込み演算を容易にするステップと、を含む。
例20は、例19に記載の方法を含み、(a)入力チャネルの入力位置の活性化値と(b)上記入力位置に対応するフィルタ係数とを乗算して畳み込み出力を生成するステップと、上記畳み込み出力の和を算出して出力チャネルの出力位置を生成するステップと、をさらに含む。
例21は、例20に記載の方法を含み、上記出力位置は、第1の出力位置であり、当該方法は、上記第1の出力位置を含む出力位置を含むプールエリアを算出するステップと、上記プールエリアの平均値又は最大値のうち少なくとも1つを算出するステップと、をさらに含む。
例22は、例21に記載の方法を含み、上記プールエリアの上記少なくとも1つの平均値又は最大値に対して、バイアス演算、スケール演算、パラメトリック正規化器線形ユニット演算、又は正規化器線形ユニット演算のうち少なくとも1つを実行するステップ、をさらに含む。
例23は、例19に記載の方法を含み、上記畳み込み配置は、第1の畳み込み配置であり、上記DPE利用は、第1のDPE利用であり、当該方法は、上記第1のDPE利用を上記DPE利用閾と比較するステップと、上記第1のDPE利用が上記DPE利用閾を満たさないとき上記畳み込み演算の上記容易にすることを防止するステップと、第2の畳み込み配置に関連づけられた第2のDPE利用を上記DPE利用閾と比較するステップと、上記比較に基づいて上記第2のDPE利用が上記DPE利用閾を満たすとき上記第2の畳み込み配置を使用して上記畳み込み演算を容易にするステップと、を含む。
例24は、例19に記載の方法を含み、上記DPEアレイは256個のDPEを含む。
例25は、例19に記載の方法を含み、上記畳み込み配置は、1*256、2*128、4*64、8*32、又は16*16畳み込み配置のうち少なくとも1つである。
例26は、例19に記載の方法を含み、上記DPEのうち上記識別されたDPEは、実質的に並列に上記畳み込みを容易にする。
例27は、例19に記載の方法を含み、上記畳み込み演算を容易にするステップは、累算器の整数ビット数を調整して上記累算器のレンジを修正するステップ、又は上記累算器の小数ビット数を調整して上記累算器の精度を修正するステップ、のうち少なくとも1つを含む。
例28は、畳み込み効率を向上させる装置を含み、当該装置は、プラットフォームに利用可能なDPEアレイに含まれるDPEを識別する第1の手段と、上記DPEのうち識別されたDPEの畳み込み配置を決定する第2の手段と、上記DPEのうち上記識別されたDPEに基づいてDPE利用を決定する第3の手段と、上記DPE利用がDPE利用閾を満たすとき上記DPEのうち上記識別されたDPEを使用して畳み込み演算を容易にする第4の手段と、を含む。
例29は、例28に記載の装置を含み、上記第4の手段は、(a)入力チャネルの入力位置の活性化値と(b)上記入力位置に対応するフィルタ係数とを乗算して畳み込み出力を生成し、上記畳み込み出力の和を算出して出力チャネルの出力位置を生成する。
例30は、例29に記載の装置を含み、上記出力位置は、第1の出力位置であり、上記第4の手段は、上記第1の出力位置を含む出力位置を含むプールエリアを算出し、上記プールエリアの平均値又は最大値のうち少なくとも1つを算出する。
例31は、例30に記載の装置を含み、上記第4の手段は、上記プールエリアの上記少なくとも1つの平均値又は最大値に対して、バイアス演算、スケール演算、パラメトリック正規化器線形ユニット演算、又は正規化器線形ユニット演算のうち少なくとも1つを実行する。
例32は、例28に記載の装置を含み、上記畳み込み配置は、第1の畳み込み配置であり、上記DPE利用は、第1のDPE利用であり、上記第3の手段は、上記第1のDPE利用を上記DPE利用閾と比較し、上記第1のDPE利用が上記DPE利用閾を満たさないとき上記畳み込み演算の上記容易にすることを防止し、第2の畳み込み配置に関連づけられた第2のDPE利用を上記DPE利用閾と比較し、上記第4の手段は、上記比較に基づいて上記第2のDPE利用が上記DPE利用閾を満たすとき上記第2の畳み込み配置を使用して上記畳み込み演算を容易にする。
例33は、例28に記載の装置を含み、上記DPEアレイは256個のDPEを含む。
例34は、例28に記載の装置を含み、上記畳み込み配置は、1*256、2*128、4*64、8*32、又は16*16畳み込み配置のうち少なくとも1つである。
例35は、例28に記載の装置を含み、上記第4の手段は、実質的に並列に上記DPEのうち上記識別されたDPEを使用して上記畳み込み演算を容易にする。
例36は、例28に記載の装置を含み、上記第4の手段は、累算器の整数ビット数を調整して上記累算器のレンジを修正すること、又は上記累算器の小数ビット数を調整して上記累算器の精度を修正すること、のうち少なくとも1つにより上記畳み込み演算を容易にする。
本明細書に開示された例は、それぞれのゲートウェイに対するリンクを通して結合されたモノのインターネット(IoT)ネットワークに適用してもよい。モノのインターネット(IoT)は、多数のコンピューティングデバイスが互いに及びインターネットに相互接続されて、かなり低いレベルでの機能性及びデータ獲得を提供する概念である。ゆえに、本明細書で用いられるとき、IoTデバイスは、他のIoTデバイス及びインターネットなどのより広いネットワークと通信して、とりわけ、感知又は制御などの機能を実行する半自律デバイスを含んでもよい。
しばしば、IoTデバイスは、メモリ、サイズ、又は機能性において制限され、より多数を、より少数のより大きいデバイスと同様のコストで展開させることができる。しかしながら、IoTデバイスは、スマートフォン、ラップトップ、タブレット、若しくはPC、又は他のより大きいデバイスであってもよい。さらに、IoTデバイスは、スマートフォン又は他のコンピューティングデバイス上のアプリケーションなどの仮想デバイスであってもよい。IoTデバイスは、IoTゲートウェイを含んでもよく、IoTゲートウェイは、データ記憶、処理制御などのために、IoTデバイスを他のIoTデバイスに、及びクラウドアプリケーションに結合するために使用される。
IoTデバイスのネットワークは、水分配システム、電力分配システム、パイプライン制御システム、プラント制御システム、ライトスイッチ、サーモスタット、ロック、カメラ、アラーム、動きセンサなどの、商用及びホームオートメーションデバイスを含んでもよい。IoTデバイスは、例えば、システムを制御し、又はデータにアクセスするために、リモートのコンピュータ、サーバ、及び他のシステムを通してアクセス可能であってもよい。
インターネット及び同様のネットワークの将来の成長は、かなり多数のIoTデバイスを伴う可能性がある。したがって、本明細書で論じられる手法の文脈において、このような将来のネットワーキングのための多くのイノベーションは、全てのこれらの層が妨げられずに成長し、接続されたリソースを発見し、アクセス可能にし、接続されたリソースを隠し、区分する能力をサポートする必要に対処する。任意数のネットワークプロトコル及び通信標準が使用されてもよく、各プロトコル及び標準は、特定の目的に対処するよう設計される。さらに、プロトコルは、位置、時間、又は空間にかかわらず動作する人間によりアクセス可能なサービスをサポートするファブリックの一部である。イノベーションには、サービスデリバリ及びハードウェア及びソフトウェアなどの関連づけられたインフラストラクチャ、セキュリティ強化、サービスレベル及びサービスデリバリ合意に規定されたサービス品質(QoS)条件に基づくサービスの供給が含まれる。
バックボーンリンクは、光ネットワークを含む任意数の有線又は無線技術を含んでもよく、ローカルエリアネットワーク(LAN)、ワイドエリアネットワーク(WAN)、又はインターネットの一部であってもよい。さらに、このような通信リンクは、様々なデバイスの相互接続を容易にするMUXing/deMUXingコンポーネントの使用を含む、IoTデバイス及びゲートウェイ双方の間の光信号経路を容易にする。
ネットワークトポロジは、Bluetooth低エネルギー(Bluetooth low energy、BLE)リンクを使用するネットワークで提供されるメッシュネットワークなどの、任意数のタイプのIoTネットワークを含んでもよい。存在し得る他タイプのIoTネットワークには、IEEE802.11(Wi‐Fi(登録商標))リンクを通してIoTデバイスと通信するために使用される無線ローカルエリアネットワーク(WLAN)ネットワーク、LTE/LTE‐A(4G)又は5Gセルラーネットワークを通してIoTデバイスと通信するために使用されるセルラーネットワーク、及び低電力ワイドエリア(low-power wide area、LPWA)ネットワーク、例えば、LoRaアライアンスにより公表されたLoRaWan仕様と互換性があるLPWAネットワーク、又はインターネットエンジニアリングタスクフォース(IETF)により公表された仕様と互換性があるIPv6オーバー低電力ワイドエリアネットワーク(Low Power Wide-Area Networks、LPWAN)ネットワークが含まれる。さらに、それぞれのIoTネットワークは、LTEセルラーリンク、LPWAリンク、又はZigbee(登録商標)などのIEEE802.15.4標準に基づくリンクなどの任意数の通信リンクを使用して、外部ネットワークプロバイダ(例えば、ティア(tier)2又はティア3プロバイダ)と通信してもよい。それぞれのIoTネットワークはまた、制約付きアプリケーションプロトコル(Constrained Application Protocol、CoAP)などの様々なネットワーク及びインターネットアプリケーションプロトコルを使用して動作してもよい。それぞれのIoTネットワークはまた、リンクされたデバイス及びネットワークのクラスタツリーを形成するリンクのチェーンを提供するコーディネータデバイスと統合されてもよい。
これらIoTネットワークの各々は、本明細書に記載されているものなどの新しい技術的特徴のための機会を提供し得る。向上した技術及びネットワークは、フォグデバイス又はシステムとしてのIoTネットワークの使用を含む、デバイス及びネットワークの指数関数的な成長を可能にし得る。このような向上した技術の利用が増えたとき、IoTネットワークは、直接的な人間の介入を必要とせず、自己管理、機能的進化、及び協調に対して開発される可能性がある。向上した技術は、IoTネットワークが中央集権的な制御システムなしに機能することさえ可能にし得る。したがって、本明細書に記載される向上した技術は、現在の実装をはるかに超えてネットワーク管理及び動作機能を自動化し、強化するために使用されてもよい。
一例において、バックボーンリンク上などのIoTデバイス間の通信は、認証、認可、及びアカウンティング(authentication, authorization, and accounting、AAA)のために非中央集権的なシステムにより保護されてもよい。非中央集権的なAAAシステムでは、分散された支払い、クレジット、監査、認可、及び認証システムが、相互接続された異種ネットワークインフラストラクチャにわたり実現され得る。これは、システム及びネットワークが自律的な動作に移ることを可能にする。これらタイプの自律的な動作では、マシンは、人的リソースについて契約し、他のマシンネットワークとの間でパートナーシップを交渉することさえあり得る。これは、計測、測定、トレーサビリティ、及び追跡可能性を提供するソリューションを達成するだけでなく、概説され、計画されたサービスレベル合意に対して相互の目標及びバランスのとれたサービスデリバリの達成を可能にし得る。新しいサプライチェーン構造及び方法の創造は、いかなる人間の関与もなしに多数のサービスを創造させ、価値についてマイニングさせ、崩壊させる可能性がある。
このようなIoTネットワークは、音、光、電子トラフィック、顔及びパターン認識、嗅覚、振動などのセンシング技術をIoTデバイス間の自律組織に統合することによりさらに強化されてもよい。感知システムの統合は、契約サービス目標、オーケストレーション、及びサービス品質(QoS)に基づくリソースの群化及び融合に対するサービスデリバリの系統的及び自律的な通信及び協調を可能にし得る。
IoTデバイスのクラスタは、クラウドネットワークと同様に、他のIoTデバイスと通信するように装備されてもよい。これは、IoTデバイスがデバイス間のアドホックネットワークを形成することを可能にでき、これらが、フォグデバイスと呼ばれ得る単一のデバイスとして機能することを可能にする。
IoTデバイスのメッシュネットワークと通信するクラウドコンピューティングネットワークは、クラウドコンピューティングネットワークのエッジでフォグデバイスとして動作し得る。IoTデバイスのメッシュネットワークはフォグと呼ばれ、クラウドのエッジで動作し得る。
フォグは、大規模に相互接続されたネットワークであると考えられてもよく、多数のIoTデバイスが、例えば無線リンクにより互いに通信する。一例として、この相互接続されたネットワークは、オープンコネクティビティファウンデーションTM(Open Connectivity Foundation、OCF)によりリリースされた相互接続仕様を使用して容易にされ得る。この標準は、デバイスが互いを発見し、相互接続のための通信を確立することを可能にする。他の相互接続プロトコルが使用されてもよく、例えば、とりわけ、オプティマイズド・リンク・ステート・ルーティング(optimized link state routing、OLSR)プロトコル、ベター・アプローチ・トゥ・モバイル・アドホック・ネットワーキング(better approach to mobile ad-hoc networking、B.A.T.M.A.N.)ルーティングプロトコル、又はOMAライトウェイトM2M(LWM2M)プロトコルが含まれる。
IoTデバイスの3つのタイプは、ゲートウェイ、データアグリゲータ、及びセンサを含むが、IoTデバイス及び機能性の任意の組み合わせが使用されてもよい。ゲートウェイは、クラウドとフォグとの間の通信を提供するエッジデバイスであってもよく、さらに、動きデータ、フローデータ、温度データなどのセンサから取得されたデータのバックエンド処理機能を提供してもよい。データアグリゲータは、任意数のセンサからデータを収集し、解析のためのバックエンド処理機能を実行してもよい。結果、生データ、又は双方が、ゲートウェイを通してクラウドに渡されてもよい。センサは、フルのIoTデバイスであってもよく、例えば、データの収集及びデータの処理の双方が可能である。いくつかの場合、センサは、機能性においてより限定されてもよく、例えば、データを収集し、データアグリゲータ又はゲートウェイがデータを処理することを可能にする。
任意のIoTデバイスからの通信は、IoTデバイスのうち任意のものの間の便利なパス(例えば、最も便利なパス)に沿って渡されてゲートウェイに到達し得る。これらのネットワークでは、相互接続の数が実質的な冗長性を提供し、複数のIoTデバイスのロスがあっても通信が維持されることを可能にする。さらに、メッシュネットワークの使用は、別のIoTデバイスに接続するためのレンジがゲートウェイに接続するためのレンジよりはるかに小さい可能性があるとき、かなり低電力か又はインフラストラクチャから離れて位置するIoTデバイスが使用されることを可能にする。
これらのIoTデバイスから提供されるフォグは、クラウドのエッジに位置する単一のデバイス、例えばフォグデバイスとして、サーバなどのクラウド内のデバイスに提示されてもよい。この例において、フォグ内のデバイスから来る警告は、フォグ内の特定のIoTデバイスから来ていると識別されることなく、送信されてもよい。このように、フォグは、コンピューティング及びストレージリソースを提供し、とりわけデータ解析、データ集約、及び機械学習などの処理又はデータ集中的タスクを実行する分散プラットフォームと考えられてもよい。
いくつかの例において、IoTデバイスは、命令型プログラミングスタイルを使用して構成されてもよく、例えば、各IoTデバイスは、特定の機能及び通信パートナーを有する。しかしながら、フォグデバイスを形成するIoTデバイスは、宣言型プログラミングスタイルで構成でき、IoTデバイスがその動作及び通信を再構成すること、例えば、条件、問い合わせ、及びデバイス故障に応答して必要なリソースを決定することを可能にする。一例として、サーバに位置するユーザからの、IoTデバイスにより監視される機器のサブセットの動作に関する問い合わせは、フォグデバイスが問い合わせに答えるために必要とされる特定のセンサなどのIoTデバイスを選択する結果をもたらし得る。次いで、これらセンサからのデータは、問い合わせに答えるためにフォグデバイスによりサーバに送信される前に、センサ、データアグリゲータ、又はゲートウェイのうち任意の組み合わせにより集約され、解析され得る。この例において、フォグ内のIoTデバイスは、フローセンサ又は温度センサからのデータを追加するなど、問い合わせに基づいて使用されるセンサを選択してもよい。さらに、IoTデバイスのいくつかが動作していない場合、利用可能であれば、フォグデバイス内の他のIoTデバイスが類似のデータを提供してもよい。
特定の例示的なシステム、方法、装置、及び製造品が本明細書で開示されたが、本特許の適用の範囲はこれらに限定されない。反対に、本特許は、本特許の特許請求の範囲内に公正に該当する全てのシステム、方法、装置、及び製造品をカバーする。