(57)【要約】  少なくとも１つのニューラルネットワークアクセラレータ（２３８）は、入力データセットに対してニューラルネットワークの層の第１のサブセットの演算を実行し、中間データセットを生成し、中間データセットを共有メモリ（６１２）の共有メモリキュー（６１４）に格納する。ホストコンピュータシステム（４０２）の第１のプロセッサ要素（６０２）は、入力データをニューラルネットワークアクセラレータに与え、ニューラルネットワークアクセラレータに対し、入力データセットに対するニューラルネットワークの層の第１のサブセットの演算を実行するようシグナリングする。ホストコンピュータシステムの第２のプロセッサ要素（６０４）は、中間データセットを共有メモリキューから読み出し、中間データセットに対してニューラルネットワークの層の第２のサブセットの演算を実行し、ニューラルネットワークアクセラレータが別の入力データセットに対してニューラルネットワークの層の第１のサブセットの演算を実行している間に、出力データセットを生成する。
2020537786.tif 000002
【特許請求の範囲】
【請求項１】
ニューラルネットワーク処理システムであって、
共有メモリと、
前記共有メモリに結合された少なくとも１つのニューラルネットワークアクセラレータとを備え、前記少なくとも１つのニューラルネットワークアクセラレータは、入力データセットに対してニューラルネットワークの層の第１のサブセットの演算を実行し、中間データセットを生成し、前記中間データセットを前記共有メモリの共有メモリキューに格納するように構成されており、前記ニューラルネットワーク処理システムはさらに、
前記共有メモリに結合され第１のプロセッサ要素と第２のプロセッサ要素とを有するホストコンピュータシステムを備え、
前記第１のプロセッサ要素は、前記第１のプロセッサ要素に動作を実行させる命令を実行するように構成されており、前記動作は、
入力データを前記少なくとも１つのニューラルネットワークアクセラレータに与えることと、
前記少なくとも１つのニューラルネットワークアクセラレータに対し、前記入力データセットに対する前記ニューラルネットワークの前記層の第１のサブセットの前記演算を実行するようシグナリングすることとを含み、
前記第２のプロセッサ要素は、前記第２のプロセッサ要素に動作を実行させる命令を実行するように構成されており、前記動作は、
前記中間データセットを前記共有メモリキューから読み出すことと、
前記ニューラルネットワークアクセラレータが別の入力データセットに対して前記ニューラルネットワークの前記層の第１のサブセットの前記演算を実行している間に、前記中間データセットに対して前記ニューラルネットワークの層の第２のサブセットの演算を実行し出力データセットを生成することとを含む、ニューラルネットワーク処理システム。
【請求項２】
前記第１のプロセッサ要素に、前記入力データを前記少なくとも１つのニューラルネットワークアクセラレータに与えることを実行させる命令は、前記第１のプロセッサ要素に、第１の時間に第１の入力データセットを、第１の時間よりも後の第２の時間に第２の入力データセットを、前記少なくとも１つのニューラルネットワークアクセラレータに与えることを実行させ、
前記第２のプロセッサ要素に、前記層の第２のサブセットの前記演算を実行させる命令は、前記第２のプロセッサ要素に、前記少なくとも１つのニューラルネットワークアクセラレータが前記第２の入力データセットに対して前記ニューラルネットワークの前記層の第１のサブセットの前記演算を実行するのと並行して、前記第１の入力データセットに対して前記層の第２のサブセットの前記演算を実行させる命令を含む、請求項１に記載のニューラルネットワーク処理システム。
【請求項３】
前記第２のプロセッサ要素に、前記中間データセットを前記共有メモリキューから読み出すことを実行させる命令は、前記第２のプロセッサ要素に、前記読み出しの後に前記共有メモリキューが空であることを前記第１のプロセッサ要素に対してシグナリングすることを実行させる命令を含む、請求項１に記載のニューラルネットワーク処理システム。
【請求項４】
前記第１のプロセッサ要素はさらに、前記少なくとも１つのニューラルネットワークアクセラレータが前記入力データに対する前記ニューラルネットワークの前記層の第１のサブセットの実行を完了したときに前記共有メモリキューが満杯であることを前記第２のプロセッサ要素に対してシグナリングすることを前記第１のプロセッサ要素に実行させる命令を、実行するように構成されており、
前記第２のプロセッサ要素は、前記第１のプロセッサ要素からの前記シグナリングに応じて前記中間データセットを前記共有メモリキューから読み出すことを前記第２のプロセッサ要素に実行させる命令を、実行するように構成されている、請求項３に記載のニューラルネットワーク処理システム。
【請求項５】
前記第１のプロセッサ要素はさらに、前記中間データセットを第１のフォーマットから第２のフォーマットに変換することを前記第１のプロセッサ要素に実行させる命令を、実行するように構成されている、または、前記第２のプロセッサ要素はさらに、前記中間データセットを第１のフォーマットから第２のフォーマットに変換することを前記第２のプロセッサ要素に実行させる命令を、実行するように構成されている、請求項１に記載のニューラルネットワーク処理システム。
【請求項６】
前記第１のプロセッサ要素はさらに、
前記第１のプロセッサ要素または前記第２のプロセッサ要素のいずれが変換を実行するように構成されることが割り当てられているかを判断することと、
前記第１のプロセッサ要素が前記変換を実行するよう割り当てられているという判断に応じて、前記中間データセットを第１のフォーマットから第２のフォーマットに変換することとを、前記第１のプロセッサ要素に実行させる命令を、実行するように構成されており、
前記第２のプロセッサ要素はさらに、
前記第１のプロセッサ要素または前記第２のプロセッサ要素のいずれが前記変換を実行するように構成されることが割り当てられているかを判断することと、
前記第２のプロセッサ要素が前記変換を実行するよう割り当てられているという判断に応じて、前記中間データセットを前記第１のフォーマットから前記第２のフォーマットに変換することとを、前記第２のプロセッサ要素に実行させる命令を、実行するように構成されている、請求項１に記載のニューラルネットワーク処理システム。
【請求項７】
前記層の第１のサブセットは畳み込み層およびマックスプーリング層を含み、前記層の第２のサブセットは全結合層を含む、請求項１に記載のニューラルネットワーク処理システム。
【請求項８】
前記層の第２のサブセットはソフトマックス層を含む、請求項７に記載のニューラルネットワーク処理システム。
【請求項９】
方法であって、
ホストコンピュータシステムの第１のプロセッサ要素が、入力データをニューラルネットワークアクセラレータに与えるステップと、
前記第１のプロセッサ要素が、前記入力データに対してニューラルネットワークの層の第１のサブセットの演算を実行するよう前記ニューラルネットワークアクセラレータに対してシグナリングするステップと、
前記ニューラルネットワークアクセラレータが、前記入力データセットに対して前記ニューラルネットワークの前記層の第１のサブセットの前記演算を実行するステップと、
前記ニューラルネットワークアクセラレータが中間データセットを生成するステップと、
前記ニューラルネットワークアクセラレータが前記中間データセットを共有メモリの共有メモリキューに格納するステップと、
前記ホストコンピュータシステムの第２のプロセッサ要素が、前記中間データセットを前記共有メモリキューから読み出すステップと、
前記ニューラルネットワークアクセラレータが別の入力データセットに対して前記ニューラルネットワークの前記層の第１のサブセットの前記演算を実行している間に、前記第２のプロセッサ要素が前記中間データセットに対して前記ニューラルネットワークの層の第２のサブセットの演算を実行するステップと、
前記第２のプロセッサ要素が出力データを生成するステップとを含む、方法。
【請求項１０】
前記入力データを前記ニューラルネットワークアクセラレータに与えるステップは、前記第１のプロセッサ要素が、第１の時間に第１の入力データセットを、第１の時間よりも後の第２の時間に第２の入力データセットを、前記ニューラルネットワークアクセラレータに与えるステップを含み、
前記層の第２のサブセットの前記演算を実行するステップは、前記ニューラルネットワークアクセラレータが前記第２の入力データセットに対して前記ニューラルネットワークの前記層の第１のサブセットの前記演算を実行するのと並行して、前記第１の入力データセットに対して前記層の第２のサブセットの前記演算を実行するステップを含む、請求項９に記載の方法。
【請求項１１】
前記中間データセットを前記共有メモリキューから読み出すステップは、前記読み出しの後に前記共有メモリキューが空であることを前記第１のプロセッサ要素に対してシグナリングするステップを含む、請求項９に記載の方法。
【請求項１２】
前記第１のプロセッサ要素が、前記ニューラルネットワークアクセラレータが前記入力データに対する前記ニューラルネットワークの前記層の第１のサブセットの実行を完了したときに前記共有メモリキューが満杯であることを前記第２のプロセッサ要素に対してシグナリングするステップと、
前記第２のプロセッサ要素が、前記第１のプロセッサ要素からの前記シグナリングに応じて前記中間データセットを前記共有メモリキューから読み出すステップとをさらに含む、請求項９に記載の方法。
【請求項１３】
前記第１のプロセッサ要素が前記中間データセットを第１のフォーマットから第２のフォーマットに変換するステップ、または、前記第２のプロセッサ要素が前記中間データセットを第１のフォーマットから第２のフォーマットに変換するステップをさらに含む、請求項１２に記載の方法。
【請求項１４】
前記第１のプロセッサ要素が、前記第１のプロセッサ要素または前記第２のプロセッサ要素のいずれが変換を実行するように構成されることが割り当てられているかを判断するステップと、
前記第１のプロセッサ要素が前記変換を実行するよう割り当てられているという判断に応じて、前記第１のプロセッサ要素が、前記中間データセットを第１のフォーマットから第２のフォーマットに変換するステップと、
前記第２のプロセッサ要素が、前記第１のプロセッサ要素または前記第２のプロセッサ要素のいずれが前記変換を実行するように構成されることが割り当てられているかを判断するステップと、
前記第２のプロセッサ要素が前記変換を実行するよう割り当てられているという判断に応じて、前記第２のプロセッサ要素が、前記中間データセットを前記第１のフォーマットから前記第２のフォーマットに変換するステップとをさらに含む、請求項９に記載の方法。
【請求項１５】
前記層の第１のサブセットは畳み込み層およびマックスプーリング層を含み、前記層の第２のサブセットは全結合層を含む、請求項９に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は概してニューラルネットワーク処理システムに関する。
【背景技術】
【０００２】
背景
機械学習は、明示的にプログラムされていなくとも動作するようコンピューティングシステムを誘導する科学である。古典的な機械学習は、Ｋ平均クラスタリング、線形回帰およびロジスティック回帰、確率的勾配降下法、相関規則学習などを含むさまざまなクラスタリングおよび分類技術を含む。深層学習は、機械学習におけるより新しいフロンティアである。深層学習は、特徴抽出および変換のために非線形処理ユニットの複数の層を使用する、ある種の機械学習アルゴリズムである。深層学習アルゴリズムは、教師なし（たとえばパターン分析）または教師あり（たとえば分類）アルゴリズムとすることができる。深層学習アルゴリズムは、人工ニューラルネットワーク（artificial neural network）（ＡＮＮ）（本明細書では「ニューラルネットワーク」と呼ぶ）の層を使用して実装することができる。
【０００３】
一般的に、ニューラルネットワークは、グラフで接続されたノード（すなわち「ニューロン」）の集まりである。ニューラルネットワーク内のノードは、重み付けされた入力の合計を計算し、その合計に任意選択のバイアスを加算する。このノードの出力は、最終的な総和の関数（「活性化関数」と呼ばれる）である。活性化関数の例は、シグモイド関数、双曲線正接（ｔａｎｈ）関数、正規化線形ユニット（Rectified Linear Unit）（ＲｅＬＵ）関数、および恒等関数を含む。ニューラルネットワークモデルは多くの場合ノードの層に組織され、これが特定のトポロジーならびに対応する重みおよびバイアスを定める。重みおよびバイアスはネットワークパラメータと呼ばれる。
【０００４】
一般的に、ニューラルネットワークは、入力層と出力層とを含み、任意で入力層と出力層との間に１つ以上の隠れ層を含み得る。深層学習用途で使用されるニューラルネットワークは、典型的には多数の隠れ層を含み、このことからディープニューラルネットワーク（deep neural network）（ＤＮＮ）という用語が生まれている。ニューラルネットワークの層は、密に接続することができる（たとえばある層の各ノードは前の層のすべてのノードに完全に接続される）、または疎に接続することができる（たとえばある層の各ノードは前の層のノードの一部にのみ接続される）。畳み込みニューラルネットワーク（convolutional neural network）（ＣＮＮ）は、畳み込み層と呼ばれる疎に接続された１つ以上の層を含むＤＮＮの一種である。ＣＮＮは、画像またはビデオデータの処理によく適している。その他の種類のＤＮＮは、音声およびテキストデータの処理によく適している回帰型ニューラルネットワーク（recurrent neural network）（ＲＮＮ）を含む。
【発明の概要】
【発明が解決しようとする課題】
【０００５】
フィールドプログラマブルゲートアレイ（ＦＰＧＡ）は、ソフトウェアから呼び出された機能を加速させる回路を実装するために使用されてきた。ソフトウェアから呼び出された機能を加速させる回路はハードウェアアクセラレータと呼ばれる。ハードウェアアクセラレータの例は、画像処理ソフトウェアから呼び出すことができるＦＰＧＡ回路として実装される各種画像フィルタを含む。ハードウェアアクセラレータが、当該ハードウェアアクセラレータを起動するソフトウェアを実行するホストコンピュータシステムを有するシステムにおいて有益であるためには、ハードウェアアクセラレータが提供するパフォーマンスの向上が、ホストコンピュータシステムとハードウェアアクセラレータとの間でデータを移動させることに伴う処理オーバーヘッドよりも大きくなければならない。ホストコンピュータシステムとハードウェアアクセラレータとの間でデータを移動させるのに要する時間が、ハードウェアアクセラレータではなくホストコンピュータシステムが動作を実行するのに要する時間よりも長い場合、より優れた実装は、ハードウェアアクセラレータなしで、ホストコンピュータシステムを含み得る。また、ホストコンピュータシステムを待つ間ハードウェアアクセラレータがアイドルである場合、ハードウェアアクセラレータが提供する総合的なパフォーマンスの利点は少なくなる。
【課題を解決するための手段】
【０００６】
概要
開示されているニューラルネットワーク処理システムは、共有メモリと、少なくとも１つのニューラルネットワークアクセラレータと、ホストコンピュータシステムとを備える。ニューラルネットワークアクセラレータは、入力データセットに対してニューラルネットワークの層の第１のサブセットの演算を実行し、中間データセットを生成し、中間データセットを共有メモリの共有メモリキューに格納するように、構成されている。ホストコンピュータシステムは、第１のプロセッサ要素と第２のプロセッサ要素とを有する。第１のプロセッサ要素は、入力データをニューラルネットワークアクセラレータに与えることと、ニューラルネットワークアクセラレータに対し、入力データセットに対するニューラルネットワークの層の第１のサブセットの演算を実行するようシグナリングすることとを第１のプロセッサ要素に実行させる命令を、実行するように構成されている。第２のプロセッサ要素は、中間データセットを共有メモリキューから読み出すことと、ニューラルネットワークアクセラレータが別の入力データセットに対してニューラルネットワークの層の第１のサブセットの演算を実行している間に、中間データセットに対してニューラルネットワークの層の第２のサブセットの演算を実行し出力データセットを生成することとを第２のプロセッサ要素に実行させる命令を、実行するように構成されている。
【０００７】
いくつかの実施形態において、第１のプロセッサ要素に、入力データを少なくとも１つのニューラルネットワークアクセラレータに与えることを実行させる命令は、第１のプロセッサ要素に、第１の時間に第１の入力データセットを、第１の時間よりも後の第２の時間に第２の入力データセットを、少なくとも１つのニューラルネットワークアクセラレータに与えることを実行させてもよい。第２のプロセッサ要素に、層の第２のサブセットの演算を実行させる命令は、第２のプロセッサ要素に、少なくとも１つのニューラルネットワークアクセラレータが第２の入力データセットに対してニューラルネットワークの層の第１のサブセットの演算を実行するのと並行して、第１の入力データセットに対して層の第２のサブセットの演算を実行させる命令を含み得る。
【０００８】
いくつかの実施形態において、第２のプロセッサ要素に、中間データセットを共有メモリキューから読み出すことを実行させる命令は、第２のプロセッサ要素に、読み出しの後に共有メモリキューが空であることを第１のプロセッサ要素に対してシグナリングすることを実行させる命令を含み得る。
【０００９】
いくつかの実施形態において、第１のプロセッサ要素はさらに、少なくとも１つのニューラルネットワークアクセラレータが入力データに対するニューラルネットワークの層の第１のサブセットの実行を完了したときに共有メモリキューが満杯であることを第２のプロセッサ要素に対してシグナリングすることを第１のプロセッサ要素に実行させる命令を、実行するように構成されていてもよい。第２のプロセッサ要素は、第１のプロセッサ要素からのシグナリングに応じて中間データセットを共有メモリキューから読み出すことを第２のプロセッサ要素に実行させる命令を、実行するように構成されていてもよい。
【００１０】
いくつかの実施形態において、第１のプロセッサ要素はさらに、中間データセットを第１のフォーマットから第２のフォーマットに変換することを第１のプロセッサ要素に実行させる命令を、実行するように構成されていてもよい。
【００１１】
いくつかの実施形態において、第２のプロセッサ要素はさらに、中間データセットを第１のフォーマットから第２のフォーマットに変換することを第２のプロセッサ要素に実行させる命令を、実行するように構成されていてもよい。
【００１２】
いくつかの実施形態において、第１のプロセッサ要素はさらに、第１のプロセッサ要素または第２のプロセッサ要素のいずれが変換を実行するように構成されることが割り当てられているかを判断することと、第１のプロセッサ要素が変換を実行するよう割り当てられているという判断に応じて、中間データセットを第１のフォーマットから第２のフォーマットに変換することとを、第１のプロセッサ要素に実行させる命令を、実行するように構成されていてもよい。第２のプロセッサ要素はさらに、第１のプロセッサ要素または第２のプロセッサ要素のいずれが変換を実行するように構成されることが割り当てられているかを判断することと、第２のプロセッサ要素が変換を実行するよう割り当てられているという判断に応じて、中間データセットを第１のフォーマットから第２のフォーマットに変換することとを、第２のプロセッサ要素に実行させる命令を、実行するように構成されていてもよい。
【００１３】
いくつかの実施形態において、ニューラルネットワークは畳み込みニューラルネットワークであってもよい。
【００１４】
いくつかの実施形態において、層の第１のサブセットは畳み込み層およびマックスプーリング層を含み得る。また、層の第２のサブセットは全結合層を含み得る。
【００１５】
いくつかの実施形態において、層の第２のサブセットはソフトマックス層を含み得る。
いくつかの実施形態において、少なくとも１つのニューラルネットワークアクセラレータは、フィールドプログラマブルゲートアレイおよびグラフィック処理ユニットを含み得る。
【００１６】
開示されている方法は、ホストコンピュータシステムの第１のプロセッサ要素が、入力データをニューラルネットワークアクセラレータに与えるステップを含む。第１のプロセッサ要素は、入力データに対してニューラルネットワークの層の第１のサブセットの演算を実行するようニューラルネットワークアクセラレータに対してシグナリングし、ニューラルネットワークアクセラレータは、入力データセットに対してニューラルネットワークの層の第１のサブセットの演算を実行する。ニューラルネットワークアクセラレータは中間データセットを生成し、中間データセットを共有メモリの共有メモリキューに格納する。ホストコンピュータシステムの第２のプロセッサ要素が、中間データセットを共有メモリから読み出し、ニューラルネットワークアクセラレータが別の入力データセットに対してニューラルネットワークの層の第１のサブセットの演算を実行している間に、中間データセットに対してニューラルネットワークの層の第２のサブセットの演算を実行する。第２のプロセッサ要素は出力データを生成する。
【００１７】
いくつかの実施形態において、入力データをニューラルネットワークアクセラレータに与えるステップは、第１のプロセッサ要素が、第１の時間に第１の入力データセットを、第１の時間よりも後の第２の時間に第２の入力データセットを、ニューラルネットワークアクセラレータに与えるステップを含み得る。層の第２のサブセットの演算を実行するステップは、ニューラルネットワークアクセラレータが第２の入力データセットに対してニューラルネットワークの層の第１のサブセットの演算を実行するのと並行して、第１の入力データセットに対して層の第２のサブセットの演算を実行するステップを含み得る。
【００１８】
いくつかの実施形態において、中間データセットを共有メモリキューから読み出すステップは、読み出しの後に共有メモリキューが空であることを第１のプロセッサ要素に対してシグナリングするステップを含み得る。
【００１９】
いくつかの実施形態において、この方法は、第１のプロセッサ要素が、ニューラルネットワークアクセラレータが入力データに対するニューラルネットワークの層の第１のサブセットの実行を完了したときに共有メモリキューが満杯であることを第２のプロセッサ要素に対してシグナリングするステップと、第２のプロセッサ要素が、第１のプロセッサ要素からのシグナリングに応じて中間データセットを共有メモリキューから読み出すステップとをさらに含み得る。
【００２０】
いくつかの実施形態において、この方法は、第１のプロセッサ要素が中間データセットを第１のフォーマットから第２のフォーマットに変換するステップをさらに含み得る。
【００２１】
いくつかの実施形態において、この方法は、第２のプロセッサ要素が中間データセットを第１のフォーマットから第２のフォーマットに変換するステップをさらに含み得る。
【００２２】
いくつかの実施形態において、この方法は、第１のプロセッサ要素が、第１のプロセッサ要素または第２のプロセッサ要素のいずれが変換を実行するように構成されることが割り当てられているかを判断するステップと、第１のプロセッサ要素が変換を実行するよう割り当てられているという判断に応じて、第１のプロセッサ要素が、中間データセットを第１のフォーマットから第２のフォーマットに変換するステップをさらに含み得る。加えて、この方法はまた、第２のプロセッサ要素が、第１のプロセッサ要素または第２のプロセッサ要素のいずれが変換を実行するように構成されることが割り当てられているかを判断するステップと、第２のプロセッサ要素が変換を実行するよう割り当てられているという判断に応じて、第２のプロセッサ要素が、中間データセットを第１のフォーマットから第２のフォーマットに変換するステップとを含み得る。
【００２３】
いくつかの実施形態において、ニューラルネットワークは畳み込みニューラルネットワークであってもよい。
【００２４】
いくつかの実施形態において、層の第１のサブセットは畳み込み層およびマックスプーリング層を含み得る。また、層の第２のサブセットは全結合層を含み得る。
【００２５】
その他の特徴は、以下の詳細な説明および請求項を検討することによって認識されるであろう。
【００２６】
上記方法およびシステムの各種局面および特徴は、以下の詳細な説明を再考し図面を参照すると明らかになるであろう。
【図面の簡単な説明】
【００２７】
【図１】一例に係るニューラルネットワークを実装するためのシステムを示すブロック図である。
【図２】一例に係るコンピューティングシステムを示すブロック図である。
【図３】一例に係るアクセラレーション回路を示すブロック図である。
【図４】ある実装例に係る具体例としてのニューラルネットワーク処理システムを示す図である。
【図５】図３に示される具体例としてのニューラルネットワークアクセラレータの別の図を示す。
【図６】ニューラルネットワーク処理システムを、第１のプロセッサ要素とニューラルネットワークアクセラレータと第２のプロセッサ要素との間のデータフローおよび制御シグナリングとともに示す図である。
【図７】プロデューサコンポーネントおよびコンシューマプロセッサによる入力データセットの並列パイプライン処理を示す図である。
【図８】ニューラルネットワーク処理システムにおいてプロデューサとしてともに動作する第１のプロセッサ要素およびニューラルネットワークアクセラレータが実行するプロセスのフローチャートを示す図である。
【図９】ニューラルネットワーク処理システムにおいてコンシューマとして動作する第２のプロセッサ要素が実行するプロセスのフローチャートを示す図である。
【図１０】別の具体例としての実装例に係るニューラルネットワーク処理システムを示す図である。
【図１１】一例に係るプログラマブルＩＣを示すブロック図である。
【図１２】プログラマブルＩＣのＦＰＧＡ実装例を示す図である。
【発明を実施するための形態】
【００２８】
以下の説明では、本明細書で提示する具体例を説明するために数多くの具体的な詳細事項を記載する。しかしながら、その他の１つ以上の例および／またはこれらの例の変形が以下の具体的な詳細事項すべてがなくても実施され得ることは、当業者にとって明らかなはずである。他の場合において、周知の特徴は、本明細書における例の説明が不明瞭になることを避けるべく、詳細に記載していない。説明し易くするために、同一の参照番号を異なる図面で使用して同一要素または同一要素のその他の例を示す場合がある。
【００２９】
開示されている方法およびシステムは、畳み込みニューラルネットワーク（ＣＮＮ）、回帰型ニューラルネットワーク（ＲＮＮ）、および行列乗算または畳み込み等の演算を伴うその他のニューラルネットワークに適用することができる。ＣＮＮは、演算の層を有する有向グラフとして表すことができる。各層は、ＣＯＮＶ（Convolution）（畳み込み）、または画像から列への変換（image-to-column conversion）（「ｉｍ２ｃｏｌ」）、汎用行列乗算（general matrix multiplication）（「ＧＥＭＭ」）、活性化（たとえば正規化線形ユニット、「ＲＥＬＵ」関数）、プーリング（たとえば「ｍａｘｐｏｏｌ」）、局所応答正規化（local response normalization）（ＬＲＮ層）、および内積（たとえば「全結合」（fully connected）（ＦＣ）層）等の、１つ以上の演算を必要とし得る。各層への入力は、すべて行列で表される、画像または音声サンプルおよび訓練された重み等のデータである。
【００３０】
開示されている実装例は、ホストコンピュータシステムとニューラルネットワークアクセラレータとを含むニューラルネットワーク処理システムに適している。ホストコンピュータシステムは、ニューラルネットワーク処理の全体的な流れを制御するソフトウェアを実行し、ニューラルネットワークアクセラレータは、ニューラルネットワークの選択された層における演算のためのハードウェアアクセラレータである。簡潔にするために、ホストコンピュータシステムを「ホスト」と呼ぶこともあり、ニューラルネットワークアクセラレータを代わりに「アクセラレーション回路」、「カーネルアクセラレータ」または「カーネルアクセラレータ回路」と呼ぶこともある、または代わりにそう呼ぶことがある。
【００３１】
発明者らは、ＣＮＮのような用途では、ＣＮＮのいくつかの層をニューラルネットワークアクセラレータ上で実装し他の層をホスト上で実装することにより、パフォーマンスの利点を実現できることを発見した。しかしながら、ＣＮＮの順伝播のいくつかの演算がホスト上で実行されるとき、ニューラルネットワークアクセラレータはアイドルの場合があり、これはニューラルネットワークアクセラレータの利用効率および演算効率を低下させる。開示されている方法およびシステムは、ニューラルネットワークアクセラレータによるアイドリングをほぼ排除しユーザ設定可能パラメータを提供することにより、ホストとニューラルネットワークアクセラレータとの間で作業負荷のバランスを取り、パフォーマンスを改善する。
【００３２】
開示されている手法では、ニューラルネットワークアクセラレータのアイドル時間を短縮するために、ホストの第１のプロセッサ要素とニューラルネットワークアクセラレータとが、ホストの第２のプロセッサ要素と、パイプライン化される。第１のプロセッサ要素およびニューラルネットワークアクセラレータはともにプロデューサとして機能し、ニューラルネットワークの層の第１のサブセットのニューラルネットワーク演算を実行する。第２のプロセッサ要素は、ニューラルネットワークアクセラレータからの処理済みのデータのコンシューマとして機能し、ニューラルネットワークの層の第２のサブセットの演算を実行する。第１のプロセッサ要素および第２のプロセッサ要素は、共有メモリキューの調整された使用を通じて協働でニューラルネットワークアクセラレータをビジー状態に保つ。本明細書で使用する「プロセッサ要素」は、コンピュータシステムのプロセッサコア、異種プロセッサ回路、または１つ以上のプロセッサコアもしくはプロセッサ回路上で実行されるスレッドであってもよい。
【００３３】
次に図面を参照すると、図１は、一例に係るニューラルネットワークを実装するためのシステム１００を示すブロック図である。システム１００は、コンピュータシステム１０２と、１つ以上のコンピュータシステム１０８とを含む。コンピュータシステム１０２は、１つ以上の設計ツール１０４を提供するソフトウェアを実行するように構成された従来のコンピューティングコンポーネントを含む。各コンピュータシステム１０８は１つ以上のニューラルネットワーク１１０を実装する。ニューラルネットワーク１１０は、アプリケーション１１２、アクセラレーションライブラリ１１４、および１つ以上のハードウェアアクセレレータ１１６を用いて実装される。
【００３４】
一例において、ハードウェアアクセラレータ１１６は、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）等のプログラマブル集積回路（ＩＣ）を含む。アクセラレーションライブラリ１１４は、ハードウェアアクセラレータ１１６とやり取りするためのアプリケーションプログラミングインターフェイス（application programming interface）（ＡＰＩ）を提供する。アクセラレーションライブラリ１１４は、ニューラルネットワーク層および他の種類のニューラルネットワーク構造の予め定められ最適化された実装を含む、ニューラルネットワーク機能を提供するライブラリを含むこともできる。したがって、ニューラルネットワーク１１０は、ハードウェアアクセラレータ１１６において実装されるハードウェア部分と、アクセラレーションライブラリ１１４において実装されるソフトウェア部分との両方を含むことができる。アプリケーション１１２は、アクセラレーションライブラリ１１４のＡＰＩを呼び出して、ハードウェアアクセラレータ１１６をプログラムおよび制御することにより、ニューラルネットワーク１１６を実装する。
【００３５】
設計者は、設計ツール１０４とやり取りすることによってニューラルネットワーク１１０を定義する。設計ツール１０４は、ハードウェアアクセラレータ１１６をプログラミングするためのファイル（たとえばＦＰＧＡのためのコンフィギュレーションビットストリーム）、アクセラレーションライブラリ１１４を提供するファイル、およびアプリケーション１１２を提供するファイルを生成することができる。設計者は、レジスタ転送言語（register transfer language）（ＲＴＬ）を用いて、またはＣ、Ｃ＋＋、ＯｐｅｎＣＬなどのようなプログラミング言語を用いて、またはＲＴＬとプログラマブル言語との組み合わせを用いて、ニューラルネットワーク１１０のハードウェア部分を定義することができる。ユーザは、Ｃ、Ｃ＋＋、ＯｐｅｎＣＬなどのようなプログラミング言語を用いてニューラルネットワーク１１０のソフトウェア部分を定義することができる。設計ツール１０４は、ソフトウェア定義ニューラルネットワークをコンパイルすることにより、ハードウェアアクセラレータ１１６をプログラミングするためのファイルおよびアクセラレーションライブラリ１１４のためのライブラリファイルを生成する。設計者は、クラスライブラリ、テンプレートライブラリなどを提供するライブラリ１０６を用いることにより、ニューラルネットワーク１１０のハードウェア部分およびソフトウェア部分の開発を支援することができる。
【００３６】
ユーザは、プログラミング言語（たとえばＣ、Ｃ＋＋、Ｐｙｔｈｏｎなど）を用いてアプリケーション１１２を定義することができる。ユーザは、Ｃａｆｆｅ、ＴｅｎｓｏｒＦｌｏｗ（商標）、ＭＸＮｅｔなどのようなニューラルネットワークフレームワークおよびライブラリを利用することができる。
【００３７】
図２は、一例に係るコンピューティングシステム１０８を示すブロック図である。コンピューティングシステム１０８は、ハードウェア２０４と、ハードウェア２０４上で実行されるソフトウェア２０６とを含む。ハードウェア２０４は、処理システム２１０と、システムメモリ２１６と、ストレージデバイス（「ストレージ２１８」）と、ハードウェアアクセラレータ１１６とを含む。ソフトウェア２０６は、オペレーティングシステム（ＯＳ）２４４と、アクセラレーションライブラリ１１４と、アプリケーション１１２とを含む。処理システム２１０、システムメモリ２１６、およびストレージ２１８は、本明細書に記載のホストコンピュータシステムを構成する。
【００３８】
処理システム２１０は、マイクロプロセッサ２１２と、サポート回路２１４と、周辺バス２１５とを含む。マイクロプロセッサ２１２は、ｘ８６ベースのプロセッサ、ＡＲＭ（登録商標）ベースのプロセッサなどのような、任意の種類の汎用中央処理装置（ＣＰＵ）とすることができる。マイクロプロセッサ２１２は、１つ以上のコアと、対応付けられた回路（たとえばキャッシュメモリ、メモリ管理ユニット（ＭＭＵ）、割り込みコントローラなど）とを含み得る。マイクロプロセッサ２１２は、本明細書に記載の１つ以上の動作を実行しシステムメモリ２１６および／またはストレージ２１８に格納することができるプログラムコードを実行するように構成されている。サポート回路２１４は、マイクロプロセッサ２１２と協働することによりマイクロプロセッサ２１２、システムメモリ２１６、ストレージ２１８、ハードウェアアクセラレータ１１６、または任意の他の周辺デバイスの間のデータフローを管理する各種デバイスを含む。たとえば、サポート回路２１４は、チップセット（たとえばノースブリッジ、サウスブリッジ、プラットフォームホストコントローラなど）、電圧レギュレータ、ファームウェア（たとえばＢＩＯＳ）などを含み得る。サポート回路２１４は、マイクロプロセッサ２１２と、ハードウェアアクセラレータ１１６等の各種周辺機器が接続される周辺バス２１５との間のデータフローを管理する。いくつかの例において、マイクロプロセッサ２１２は、チップセット（たとえばノースブリッジ、サウスブリッジなど）の機能の全部または実質的な部分を吸収する、システムインパッケージ（System-in-Package）（ＳｉＰ）、システムオンチップ（System-on-Chip）（ＳｏＣ）などであってもよい。周辺バス２１５は、周辺コンポーネント相互接続エクスプレス（Peripheral Component Interconnect Express）（ＰＣＩｅ）等の拡張バス規格を実装することができる。この例において、処理システム２１０はハードウェアアクセラレータ１１６から分離されたものとして示されている。以下でさらに説明するその他の例では、処理システム２１０およびハードウェアアクセラレータ１１６を、システムオンチップ（ＳｏＣ）を用いて同一の集積回路（ＩＣ）上に実装することができる。
【００３９】
システムメモリ２１６は、実行可能な命令およびデータ等の情報を格納し取り出すことを可能にするデバイスである。システムメモリ２１６は、たとえばダブルデータレート（double-data rate）（ＤＤＲ）ダイナミックＲＡＭ（ＤＲＡＭ）等の１つ以上のランダムアクセスメモリ（ＲＡＭ）モジュールを含み得る。ストレージデバイス２１８は、ローカルストレージデバイス（たとえば１つ以上のハードディスク、フラッシュメモリモジュール、ソリッドステートディスク、および光ディスク）および／またはコンピューティングシステム１０８が１つ以上のネットワークデータストレージシステムと通信することを可能にするストレージインターフェイスを含む。ハードウェア２０４は、グラフィックカード、ユニバーサルシリアルバス（ＵＳＢ）インターフェイスなどのような、コンピューティングシステムのさまざまなその他の従来のデバイスおよび周辺機器を含み得る。
【００４０】
ハードウェアアクセラレータ１１６は、プログラマブルＩＣ２２８と、不揮発性メモリ（non-volatile memory）（ＮＶＭ）２２４と、ＲＡＭ２２６とを含む。プログラマブルＩＣ２２８は、ＦＰＧＡなどであってもよい、または、ＦＰＧＡなどを有するＳｏＣであってもよい。ＮＶＭ２２４は、フラッシュメモリなどのような任意の種類の不揮発性メモリを含み得る。ＲＡＭ２２６は、ＤＤＲ  ＤＲＡＭなどを含み得る。プログラマブルＩＣ２２８は、ＮＶＭ２２４およびＲＡＭ２２６に結合される。プログラマブルＩＣ２２８はまた、処理システム２１０の周辺バス２１５に結合される。
【００４１】
ＯＳ２４４は、Ｌｉｎｕｘ（登録商標）、Ｍｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ（登録商標）、Ｍａｃ  ＯＳ（登録商標）などのような、当該技術で周知の任意のコモディディオペレーティングシステムであればよい。アクセラレーションライブラリ１１４は、ハードウェアアクセラレータ１１６のコマンドおよび制御のためのＡＰＩを提供するドライバおよびライブラリを含む。アプリケーション１１２は、ニューラルネットワークを実装するためにアクセラレーションライブラリ１１４のＡＰＩを呼び出すマイクロプロセッサ２１２上で実行されるソフトウェアを含む。
【００４２】
動作時、プログラマブルＩＣ２２８はアクセラレーション回路２３０で構成される。アクセラレーション回路２３０は一般的にベースプラットフォーム２３０Ａとニューラルネットワークアクセラレータ２３０Ｂとを含む。たとえば、アクセラレーション回路２３０は、スタティック領域２３４とプログラマブル領域２３６とを用いて実装することができる。スタティック領域２３４は、周辺バス２１５、ＮＶＭ２２４、およびＲＡＭ２２６へのインターフェイスを提供するためのサポート回路２４０を含む。プログラマブル領域２３６は、１つ以上のニューラルネットワークアクセラレータ（「カーネル２３８」）を含み得る。ベースプラットフォーム２３０Ａはスタティック領域２３４を用いて実装し、ニューラルネットワークアクセラレータ２３０Ｂはプログラマブル領域２３６を用いて実装する。別の例において、ベースプラットフォーム２３０Ａは、プログラマブル領域２３６の一部を用いて実装することもできる。したがって、いくつかの例において、プログラマブル領域２３６はいくつかのインターフェイス回路も含む。いくつかの例において、アクセラレーション回路２３０は、各々をニューラルネットワークアクセラレータ２３８で個別に構成することができる２つ以上のプログラマブル領域２３６を含み得る。
【００４３】
スタティック領域２３４は、その回路がプログラマブル領域２３６の再構成にわたって一定のままであるという点で「スタティック」である。一例において、サポート回路２４０は、ＰＣＩｅエンドポイント回路、ダイレクトメモリアクセス（ＤＭＡ）コントローラ、相互接続、メモリコントローラ、メモリインターフェイス回路（たとえばＤＤＲインターフェイス）、デカップラ回路（部分的再構成をサポートする）、フラッシュプログラマ、デバッグ回路などを含む。いくつかの例において、プログラマブル領域２３６はサポート回路２４０のうちのいずれも含んでいない。他の例において、いくつかのサポート回路はプログラマブル領域２３６に実装される。そのような場合、プログラマブル領域２３６は「拡張されたプログラマブル領域」と呼ぶことができる。いずれの場合でも、一例において、ＰＣＩｅ回路およびＤＭＡ回路等のいくつかのサポート回路２４０は常にスタティック領域２３４に存在する。
【００４４】
図３は、一例に係るアクセラレーション回路２３０を示すブロック図である。アクセラレーション回路２３０は、サポート回路２４０とニューラルネットワークアクセラレータ２３８とを含む。この例において、サポート回路２４０は、ＰＣＩｅエンドポイント回路３０２と、ＰＣＩｅ  ＤＭＡコントローラ３０４と、相互接続回路３０６と、メモリコントローラ３１０と、メモリインターフェイス３１２とを含む。サポート回路２４０は、明確にするために省略されている他の回路（たとえばデカップラ回路、デバッグ回路など）を含み得る。ＰＣＩｅエンドポイント３０２は、周辺バス２１５への物理インターフェイスを提供する。ＰＣＩｅ  ＤＭＡコントローラ３０４は、ＲＡＭ２２６およびニューラルネットワークアクセラレータ２３８へのＤＭＡ動作を容易にする。相互接続３０６は、ＰＣＩｅ  ＤＭＡコントローラ３０４をメモリコントローラ３１０およびニューラルネットワークアクセラレータ２３８に結合する。メモリコントローラ３１０はメモリインターフェイス３１２に結合される。メモリインターフェイス３１２はＲＡＭ２２６に結合される。
【００４５】
動作時、アクセラレーションライブラリ１１４は、ＰＣＩｅ  ＤＭＡコントローラ３０４を介して直接ＲＡＭ２２６にアクセスすることができる。アクセラレーションライブラリ１１４はまた、ＰＣＩｅ  ＤＭＡコントローラ３０４を介してニューラルネットワークアクセラレータ２３８にアクセスすることもできる。ニューラルネットワークアクセラレータ２３８は、メモリコントローラ３１０を介してＲＡＭ２２６にアクセスすることができる。データは、システムメモリ２１６とＲＡＭ２２６との間のＤＭＡ動作を用いて、ソフトウェア２０６とニューラルネットワークアクセラレータ２３８との間でやり取りすることができる。
【００４６】
この例において、ニューラルネットワークアクセラレータ２３８は、インターフェイス３３０、３３１、および３３２を用いて相互接続３０６と通信する。特に、これらのインターフェイスは、第１の読出インターフェイス３３０と、第２の読出インターフェイス３３１と、読出／書込インターフェイス３３２とを含む。たとえば、読出インターフェイス３３０は、ニューラルネットワークアクセラレータ２３８を制御するための制御インターフェイスとして使用することができる。読出インターフェイス３３１は、メモリインターフェイス３１２のうちの第１のメモリインターフェイスを介してＲＡＭ２２６から読み出すために使用することができる。読出／書込インターフェイス３３２は、メモリインターフェイス３１２のうちの第２のメモリインターフェイスを介してＲＡＭ２２６から読み出しおよび書き込みをするために使用することができる。
【００４７】
ニューラルネットワークアクセラレータ２３８は、相互接続インターフェイス３４０と、制御ロジック３４２と、処理回路３４１とを含む。処理回路３４１は、フォーマッタ回路３４４回路（たとえばＩＭ２ＣＯＬ）と、読出制御回路３４６と、マルチプレクサ３５６と、先入れ先出し回路（「ＦＩＦＯ３５８」）と、行列乗算器アレイ３６２と、ＲｅＬＵスケーラ回路３６４と、プーリング回路３６６（たとえばｍａｘｐｏｏｌ）と、マルチプレクサ３６８と、ＦＩＦＯ３５４と、書込制御回路３５２と、キャッシュ３４８と、読出制御回路３５０と、ＦＩＦＯ３６０とを含む。相互接続インターフェイス３４０は、インターフェイス３３０、３３１および３３２と、制御ロジック３４２と、処理回路３４１とに結合される。相互接続インターフェイス３４０は、制御ロジック３４２とインターフェイス３３０との間の通信、ならびに処理回路３４１とインターフェイス３３１および３３２との間の通信を容易にするために、スイッチ、クロックコンバータなどを含み得る。
【００４８】
この例において、相互接続インターフェイス３４０は、フォーマッタ回路３４４、読出制御回路３４６、キャッシュ３４８、および書込制御回路３５２それぞれの入力に結合される。フォーマッタ回路３４４および読出制御回路３４６それぞれの出力は、マルチプレクサ３５６の入力に結合される。マルチプレクサ３５６の出力は、ＦＩＦＯ３５８の入力に結合される。ＦＩＦＯ３５８の出力は、行列乗算器アレイ３６２の第１の入力に結合される。キャッシュ３４８の出力は、読出制御回路３５０の入力に結合される。読出制御回路３５０の出力は、ＦＩＦＯ３６０の入力に結合される。ＦＩＦＯ３６０の出力は、行列乗算器アレイ３６２の第２の入力に結合される。行列乗算器アレイ３６２の出力は、ＲｅＬＵスケーラ３６４の入力に結合される。ＲｅＬＵスケーラ３６４の出力は、プーリング回路３６６の入力およびマルチプレクサ３６８の入力に結合される。プーリング回路３６６の出力は、マルチプレクサ３６８の別の入力に結合される。マルチプレクサ３６８の出力は、ＦＩＦＯ３５４の入力に結合される。ＦＩＦＯ３５４の出力は、書込制御回路３５２に結合される。
【００４９】
動作時、行列乗算器アレイ３６２は、ニューラルネットワークを実装するための行列乗算演算を実行する。行列乗算器アレイ３６２の入力は、ＦＩＦＯ３５８からの入力活性化行列と、ＦＩＦＯ３６０からの重み行列とを受ける。入力活性化行列は、読出制御回路３４６を用いてＲＡＭ２２６から直接読み出すことができる。これに代えて、入力活性化をＲＡＭ２２６から読み出し、行列乗算器アレイ３６２に入力するためにフォーマッタ回路３４４によって処理してもよい。重み行列は、読出制御回路３５０によってＲＡＭ２２６から読み出され、キャッシュ３４８にキャッシュされてもよい。ＲｅＬＵスケーラ３６４は、活性化関数を実行し、行列乗算器アレイ３６２の出力をスケーリングすることができる。プーリング回路３６６は、行列乗算器アレイ３６２のスケーリングされた出力に対して最大プーリング関数を実現できる。一例において、プーリング回路３６６はＣＬＢまたは他のコンフィギュラブルロジックを用いて実装される。プーリング回路３６６またはＲｅＬＵスケーラ３６４いずれかの出力を、ＦＩＦＯ３５４に格納することができる。書込制御回路３５２は、ＦＩＦＯのデータをＲＡＭ２２６に書き込む。制御ロジック３４２は、フォーマッタ回路３４４、読出制御回路３４６、マルチプレクサ３５６および３６８、読出制御回路３５０、ＲｅＬＵスケーラ３６４、プーリング回路３６６、および書込制御回路３５２等の、処理回路３４１内のさまざまな回路を制御する。
【００５０】
図４は、ある実装例に係る具体例としてのニューラルネットワーク処理システム４００を示す。このシステムは、ニューラルネットワークアクセラレータ２３８に通信可能に結合されたホストコンピュータシステム４０２を含む。ホストコンピュータシステム４０２は、図２に示されるように、処理システム２１０、システムメモリ２１６、およびストレージ２１８を含み得る。ホストコンピュータシステム４０２は、機械学習（ＭＬ）フレームワーク４１０およびニューラルネットワークアクセラレータ（ＫＡ）インターフェイス４１２によって特別にプログラムされる。図１のアプリケーション１１２に対応するＭＬフレームワークプログラムは、特定のニューラルネットワークアプリケーション、たとえば画像または音声処理を指定し、図１のようにアクセラレーションライブラリとして実装することができるＫＡインターフェイスは、ＭＬフレームワークからのニューラルネットワーク処理を求める要求に応じて、ニューラルネットワークアクセラレータ２３８上でニューラルネットワーク演算を開始する。ニューラルネットワークアクセラレータ２３８はＲＡＭ２２６に結合され、ホストとニューラルネットワークアクセラレータとはＲＡＭを介して通信する。ニューラルネットワークアクセラレータは一組のコンフィギュレーションレジスタ４０８を有する。コンフィギュレーションレジスタは、メモリバッファのアドレスをＲＡＭ２２６に格納するため、ならびに、汎用行列乗算（ＧＥＭＭ）のための行列次元および畳み込みのためのストライド／ウィンドウ等の、ニューラルネットワーク演算のためのコンフィギュレーションパラメータを格納するために、ＫＡインターフェイス４１２にアクセスすることができる。
【００５１】
ＫＡインターフェイス４１２は、ホスト４０２上で実行する２つのプロセッサ要素として動作する。第１のプロセッサ要素はニューラルネットワークアクセラレータとともに演算を開始し、第２のプロセッサ要素はニューラルネットワークアクセラレータからの出力データを用いてニューラルネットワーク処理を完了する。第１および第２のプロセッサ要素ならびにニューラルネットワークアクセラレータは、ＲＡＭ２２６内の共有メモリキュー（図示せず）から動作する。第１のプロセッサ要素は、処理すべきデータをニューラルネットワークアクセラレータに入力し、ニューラルネットワークアクセラレータは、指定されたニューラルネットワーク演算をこの入力データに対して実行し、出力データを共有メモリキューに格納する。第１のプロセッサ要素は、共有メモリキューが、処理されたデータで満杯であることを第２のプロセッサ要素に対してシグナリングする。第２のプロセッサ要素は、処理されたデータを共有メモリキューから読み出し、その後、共有キューが空であることを第１のプロセッサ要素に対してシグナリングする。第１のプロセッサ要素は、共有メモリキューが空であるというシグナルを受けると、別のデータセットをニューラルネットワークアクセラレータに入力することができる。ニューラルネットワークアクセラレータが次の入力データセットを処理している間、第２のプロセッサ要素は、前の入力データセットから得た、処理されたデータに対し、残りのニューラルネットワーク演算を実行する。
【００５２】
開示されている手法は、どの特定のハードウェアプラットフォームにも限定されない。しかしながら、当業者に基準系を提供することを目的として、ニューラルネットワークアクセラレータは、Ｘｉｌｉｎｘ社から入手可能なＫＩＮＴＥＸ（登録商標）  ＵＬＴＲＡＳＣＡＬＥ（商標）１１５デバイス上に実装することができる。ＲＡＭ２２６は、ニューラルネットワークアクセラレータとともにプリント回路基板に搭載されたＤＤＲ  ＳＤＲＡＭであり、ＲＡＭは、ニューラルネットワークアクセラレータにデータを入力するための１つのＲＡＭおよびニューラルネットワークアクセラレータからの出力データを格納するための別のＲＡＭ等の、複数のＲＡＭデバイスを含み得る。ホスト４０２とＲＡＭとの間、およびホストとニューラルネットワークアクセラレータとの間のインターフェイスは、周辺コンポーネント相互接続エクスプレスＰＣＩＥである。ニューラルネットワークアクセラレータは、ダイレクトメモリアクセス（ＤＭＡ）チャネルを用いて、ホストメモリの一部をＲＡＭおよびコンフィギュレーションレジスタ４０８にマッピングする。ホストコンピュータシステム４０２は、ＭＬフレームワーク４１０およびＫＡインターフェイス４１２を実行するのに適した任意のコンピュータシステムまたはコンピュータシステムの組み合わせもしくはネットワークとすることができる。ＭＬフレームワークは、ＴｅｎｓｏｒＦｌｏｗ（商標）、Ｃａｆｆｅ、およびＭＸＮｅｔ等のプログラミングパッケージを用いて指定することができる。
【００５３】
ＫＡインターフェイス４１２は、ニューラルネットワークアクセラレータ２３８による処理のためのニューラルネットワーク要求をＭＬフレームワーク４１０から受ける。処理のためにニューラルネットワーク要求をニューラルネットワークアクセラレータに送信する前に、ＫＡインターフェイスは、ニューラルネットワークアクセラレータと共有するＲＡＭ２２６に、ニューラルネットワークの層に対応付けられた重み行列を書き込む。すべての重み行列を連続ブロックとして共有メモリに書き込むことにより、ＤＭＡ動作の数およびオーバーヘッドを低減し、ニューラルネットワークの層における畳み込みまたは行列乗算のために重みが必要なときにニューラルネットワークアクセラレータが重みを確実に利用できるようにする。
【００５４】
ＭＬフレームワーク４１０からニューラルネットワーク要求を受けたことに応じて、ＫＡインターフェイス４１２は、層ごとの命令のグループをアセンブルして命令パッケージにし、この命令パッケージをＲＡＭ２２６に書き込む。層ごとの各命令は、ニューラルネットワークのそれぞれの層の処理を指定する。加えて、層ごとの各命令は、共有メモリ内の組み合わされた重み行列のベースアドレスからの重み行列のそれぞれのオフセットを指定する。ニューラルネットワークの各層の処理は、重み行列のうちの対応する１つの行列にアクセスする。層ごとの命令はまた、異なる層における異なるニューラルネットワーク演算のためのコンフィギュレーションパラメータを指定する。たとえば、コンフィギュレーションパラメータは、スケーリングファクタ、畳み込みウィンドウおよびストライド、マックスプール（ｍａｘｐｏｏｌ）処理のための行列次元、および活性化関数を指定することができる。コンフィギュレーションパラメータはさらに、ＲＡＭ内の命令パッケージのベースアドレスを含む。ニューラルネットワークの異なる層は、ニューラルネットワーク演算の異なるセットを必要とする可能性がある。
【００５５】
ＫＡインターフェイス４１２はさらに、ニューラルネットワークアクセラレータ２３８のコンフィギュレーションレジスタ４０８にコンフィギュレーションパラメータを設定する。コンフィギュレーションパラメータは、重み行列のベースアドレス、入出力データ行列のベースアドレス、および入出力データ行列のベースアドレスからのオフセットを含む。重み行列を「Ａ」と呼び、入力データ行列を「Ｂ」と呼び、出力データ行列を「Ｃ」と呼ぶことがある。
【００５６】
命令のパッケージが処理できる状態であることを示すＫＡインターフェイス４１２からの信号に応じて、ニューラルネットワークアクセラレータ２３８は、命令パッケージからの層ごとの命令を逐次的に処理する。命令のパッケージは、ニューラルネットワークアクセラレータがニューラルネットワークの層の指定された処理を実行するときに従うプログラムまたはステートマシンを効果的に指定する。
【００５７】
図５は、図３の、具体例としてのニューラルネットワークアクセラレータ２３８の別の図を示す。マージされた重み行列５２０は、ホストによって書き込まれ、ＲＡＭ２２６の連続アドレスに格納される。具体例としての応用例において、命令パッケージ５１６内の層ごとの命令は、ニューラルネットワークの層において実行されるべきニューラルネットワーク演算のセット、ならびに、スケーリング、マックスプール次元、および活性化関数のためのコンフィギュレーションパラメータを指定する。ニューラルネットワーク演算の異なるセットを命令パッケージ内の層ごとの命令のうちの異なる命令において指定することにより、ニューラルネットワークアクセラレータによる層ごとの特定の処理を指示することができる。
【００５８】
命令パッケージ５１６からの層ごとの命令を処理する際、ニューラルネットワークアクセラレータは命令を逐次的に処理する。たとえば、第１の層ごとの命令を処理し、続いて、命令パッケージの第２の層ごとの命令を処理する。第１の層ごとの命令を処理する際、ニューラルネットワークアクセラレータ２３８は、ＲＡＭ２２６内のＢ／Ｃバッファ５１８の第１の部分から入力データを読み出し、ＲＡＭ内のＢ／Ｃバッファの第２の部分へ出力データを書き込む。第２の層ごとの命令を処理する際、ニューラルネットワークアクセラレータは、Ｂ／Ｃバッファの第２の部分から入力データを読み出し、Ｂ／Ｃバッファの第１の部分へ出力データを書き込む。ニューラルネットワークアクセラレータはその後、連続する層ごとの命令ごとに、入力データおよび出力データのために使用するＢ／Ｃバッファの部分を交互に使用する。
【００５９】
ニューラルネットワークアクセラレータ２３８は、コンフィギュレーションレジスタ４０８と、ディスパッチおよびアドレッシングロジック回路５０２（図３の読出および書込制御を実現する）と、フォーマッタ回路３４４と、畳み込みまたは行列乗算器回路３６２と、正規化線形ユニット（ＲｅＬＵ）およびスケーリング回路３６４と、プーリング回路３６６とを含む。マルチプレクサ３５６および３６８は、指定されたニューラルネットワーク演算に従いディスパッチおよびアドレッシングロジックによって制御される。コンフィギュレーションレジスタ内のコンフィギュレーションデータは、フォーマッタ回路、行列乗算器回路、ＲｅＬＵスケーリング回路、およびプーリング回路のコンフィギュレーションパラメータを提供する。
【００６０】
ディスパッチおよびアドレッシング回路５０２は、命令パッケージ５１６から層ごとの命令を読み出し、作業要求において参照されるデータを用いて指定されたニューラルネットワーク演算を開始する。ディスパッチおよびアドレッシング回路は、マルチプレクサ３５６を制御して、層ごとの命令において指定されたパラメータに従い、ＲＡＭ２２６から読み出された入力データとフォーマッタ回路３４４からのフォーマットされたデータとの間で選択を行う。フォーマッタ回路３４４は、入力データを、ＭＬフレームワークから提供されたフォーマットから、畳み込みまたは行列乗算器回路３６２に適したフォーマットに変換する。たとえば、ある実装例において、フォーマッタ回路は、画像データを列データに変換する（ｉｍ２ｃｏｌ）。別の実装例において、フォーマッタ回路は、行優先または列優先フォーマットを、計算アレイジオメトリに一致するカスタムハイブリッド行／列優先フォーマットに変換する。畳み込みまたは行列乗算器回路３６２は、入力データと、重み行列５２０から選択された重み行列との間の行列乗算を実行する。ある実装例において、行列乗算回路３６２は、乗算器−アキュムレータ回路のシストリックアレイである。ＲｅＬＵ回路３６４は、ニューラルネットワークに対する活性化関数およびスケーリング関数を実現する。具体例としての応用例において、プーリング回路３６６は、後続の層に課される計算要件を減じるために、畳み込み層間のデータの空間サイズを縮小する。空間サイズの縮小は、過剰適合を回避するのにも役立つ。具体例としての応用例において、プーリング回路は、マックスプール関数を実現する。ディスパッチおよびアドレッシング回路は、マルチプレクサ３６８を制御することにより、ＲｅＬＵおよびスケーリング回路３６４からのデータと、Ｂ／Ｃバッファ５１８に出力行列として格納するためのプーリング回路３６６からのデータとの間で選択を行う。
【００６１】
図６は、ニューラルネットワーク処理システムを、第１のプロセッサ要素６０２とニューラルネットワークアクセラレータ２３８と第２のプロセッサ要素６０４との間のデータフローおよび制御シグナリングとともに示す。番号が付された円はこのシステム内で機能および制御が実行される順序を示し、破線はデータおよび制御信号の流れを表す。第１のプロセッサ要素６０２が第２のプロセッサ要素６０４からキュー空信号を受けると（１）、第１のプロセッサ要素は、ニューラルネットワークアクセラレータ２３８による処理のために入力データセット６１０をＲＡＭ６０８に反映することができる（２）。第１のプロセッサ要素は、入力データセットをＲＡＭに書き込むと、入力データセットに対する指定されたニューラルネットワーク演算の実行を開始するようニューラルネットワークアクセラレータにシグナリングする（３）。
【００６２】
ニューラルネットワークアクセラレータは、ＲＡＭ６０８から入力データセット６１０を読み出し（４）、ニューラルネットワーク演算の指定されたサブセットを実行する。畳み込みニューラルネットワークの具体例としての実装例において、ニューラルネットワークアクセラレータは、畳み込み層、ＲｅＬＵ、およびマックスプーリング層の演算を実行する。ニューラルネットワークアクセラレータは、全結合層の演算を実行することもできる。しかしながら、パフォーマンスを改善するために、第２のプロセッサ要素６０４が全結合層の演算を実行する。ニューラルネットワークアクセラレータは、ＲＡＭ６１２内の共有メモリキュー６１４に出力データを格納し、処理が完了すると、完了したことを第１のプロセッサ要素６０２に対してシグナリングする（６）。ニューラルネットワークアクセラレータからの出力データは、第２のプロセッサ要素６０４が出力データをさらに処理する実装例においては中間データセットとみなすことができる。ＲＡＭ６０８および６１２は、実装要件に応じて、図５に示されるような単一のＲＡＭ２２６であってもよく、または物理的に別々のＲＡＭであってもよい。
【００６３】
いくつかの実装例において、ニューラルネットワークの層の処理全体を、第１のプロセッサ要素または第２のプロセッサ要素のいずれがニューラルネットワークアクセラレータからの出力データのデータ変換を実行するかについてのユーザ設定を通じて、第１のプロセッサ要素と第２のプロセッサ要素との間で均等化することができる。ニューラルネットワークアクセラレータによるアイドリングは、第１のプロセッサ要素と第２のプロセッサ要素との間で処理を均等化することによって最小にすることができる。ニューラルネットワークアクセラレータの利用は、ホストの処理とニューラルネットワークアクセラレータの処理とが等しくなる方向に向かうほど大きくなる。データフォーマットが、ホストが入力データを受けるときのデータフォーマットと異なる場合、データ変換は、ニューラルネットワークアクセラレータがより効率的にニューラルネットワーク演算を実行した結果である。データフォーマット変換が実行される理由は、ホストデータフォーマットが確立されたＭＬフレームワークフォーマット（たとえばＭＸＮｅｔの行優先）に従う一方で、ニューラルネットワークアクセラレータはパフォーマンスを最大にするためにカスタムフォーマットを使用できることにある。たとえば、ニューラルネットワークアクセラレータは、ニューラルネットワークアクセラレータおよびその行列乗算器のアーキテクチャに基づいて、列優先フォーマット、画像行フォーマット、または別のフォーマットを使用することができる。
【００６４】
ユーザが、データ変換を実行するように第１のプロセッサ要素６０２を構成した場合、第１のプロセッサ要素は、共有メモリキュー６１４内の出力データを変換し（６．５）、次いで、キューが満杯であることを第２のプロセッサ要素６０４にシグナリングする（７）。第１のプロセッサ要素からキュー満杯信号を受けたことに応じて、第２のプロセッサ要素は、共有メモリキューの内容をＲＡＭ６１２内の別のワークスペースにコピーし（８）、次いで、共有メモリキューが空であることを第１のプロセッサ要素にシグナリングする（１）。共有メモリキューが空であることを第２のプロセッサ要素がシグナリングすると、前の入力データセットについてニューラルネットワークアクセラレータが生成した出力データに対して第２のプロセッサ要素がニューラルネットワークの層の指定されたサブセットの演算を実行している間に、第１のプロセッサ要素は、処理のために別のデータセットをニューラルネットワークアクセラレータに入力することができる。ユーザが、データ変換を実行するように第２のプロセッサ要素を構成した場合、第２のプロセッサ要素は、共有メモリキューからコピーされた出力データを変換する（８．５）。畳み込みニューラルネットワークの実装例において、第２のプロセッサ要素はソフトマックス層の演算を実行する。しかしながら、ニューラルネットワークアクセラレータが実装しない任意の層（たとえばＲｅＬＵおよびマックスプール）の演算を実行するように第２のプロセッサ要素をプログラムできることが認識されるであろう。
【００６５】
図７は、プロデューサコンポーネント７０２（プロセッサ要素６０２およびニューラルネットワークアクセラレータ２３８）およびコンシューマプロセッサ６０４による入力データセットの並列パイプライン処理を示す。先に述べたように、第２の／コンシューマプロセッサは、共有メモリキューが空であるときに第１の／プロデューサプロセッサにシグナリングし、第１のプロセッサ要素は、共有メモリキューが満杯であるときに第２のプロセッサ要素にシグナリングする。第１のプロセッサ要素は、共有メモリキューが空であるときに入力データセットの処理を開始することができ、第２のプロセッサ要素は、共有メモリキューが満杯であるときにニューラルネットワークアクセラレータからの出力データの処理を開始することができる。細線に重ねられた太い線分は関連するコンポーネントによるアクティブな処理を表し、細線は時間の経過を表す。
【００６６】
入力データセットと、共有メモリキューが空であることを第２のプロセッサ要素６０４がシグナリングしたこととに応じて、線分７０４によって表されるように、第１のプロセッサ要素は第１のデータセットをニューラルネットワークアクセラレータに入力し、ニューラルネットワークアクセラレータはニューラルネットワークの層のサブセットの演算を実行する。ニューラルネットワークアクセラレータおよび第１のプロセッサ要素が入力データセットの処理を完了すると、線７０６によって示されるように、第１のプロセッサ要素は共有メモリキューが満杯であることを第２のプロセッサ要素にシグナリングする。満杯信号に応じて、線７０８によって示されるように、第２のプロセッサ要素は、共有メモリキューから別のメモリワークスペースに出力データを直ちにコピーし、データのコピー後に、キューが空であることを第１のプロセッサ要素にシグナリングする。
【００６７】
キュー空信号と、次のデータセットが利用可能であることとに応じて、線分７１０によって表されるように、第１のプロセッサ要素は次のデータセットをニューラルネットワークアクセラレータに入力し、ニューラルネットワークアクセラレータはニューラルネットワークの層のサブセットの演算を実行する。ニューラルネットワークアクセラレータが次の入力データセットを処理する間、線分７１２によって示されるように、第２のプロセッサ要素は第１の入力データセットから得られた出力データに対してニューラルネットワークの層の別のサブセットの演算を、並行して実行する。すなわち、第１のプロセッサ要素およびニューラルネットワークアクセラレータが入力データセットＮを処理するのと並行して、第２のプロセッサ要素は、ニューラルネットワークアクセラレータによる入力データセットＮ−１の処理から得られた出力データを処理し、入力データセットの順序は、Ｎ−１、Ｎ、Ｎ＋１などである。
【００６８】
図８は、ニューラルネットワーク処理システムにおいてプロデューサとしてともに動作する第１のプロセッサ要素およびニューラルネットワークアクセラレータが実行するプロセスのフローチャートを示す。判断ブロック８０２において、第１のプロセッサ要素は、継続する前に、第２のプロセッサ要素からの空信号によって示されるように共有メモリキューが空になるまで待つ。共有メモリキューが空であることを第２のプロセッサ要素がシグナリングしたことに応じて、第１のプロセッサ要素はブロック８０４に進み、入力データセットを読み出し、ニューラルネットワークアクセラレータと共有するメモリに入力データセットを書き込む。第１のプロセッサ要素は、入力データセットが処理に利用可能である場合ニューラルネットワークアクセラレータにシグナリングし、ブロック８０６において、ニューラルネットワークアクセラレータが完了をシグナリングするのを待つ。
【００６９】
判断ブロック８０８は、ユーザが、データ変換を実行するように第１のプロセッサ要素を構成したか否かを確認する。ユーザは、第１のプロセッサ要素または第２のプロセッサ要素のいずれかを、たとえばシステム起動時またはシステムランタイム中にパラメータ値を入力することなどによって、データ変換を実行するように構成することができる。ユーザが第１のプロセッサ要素をデータ変換を実行するものとして指定した場合、ブロック８１０で、第１のプロセッサ要素は、共有メモリキュー内の出力データを変換し、変換後に、ブロック８１２で、キューが満杯であることを第２のプロセッサ要素にシグナリングする。ユーザが第２のプロセッサ要素をデータ変換を実行するものとして指定した場合、第１のプロセッサ要素はブロック８１０をスキップする。第１のプロセッサ要素はブロック８０２に戻り、第２のプロセッサ要素が共有メモリキューを空にするのを待つ。
【００７０】
図９は、ニューラルネットワーク処理システムにおいてコンシューマとして動作する第２のプロセッサ要素が実行するプロセスのフローチャートを示す。判断ブロック９０２において、第２のプロセッサ要素は、継続する前に、第１のプロセッサ要素からの満杯信号によって示されるように共有メモリキューが満杯になるまで待つ。共有メモリキューが満杯であることを第１のプロセッサ要素がシグナリングしたことに応じて、第２のプロセッサ要素は、ブロック９０４に進み共有メモリキューから別個のメモリワークスペースにデータをコピーする。データをコピーした後、第２のプロセスは、共有メモリキューが空であることを第１のプロセスにシグナリングする。
【００７１】
判断ブロック９０６は、ユーザが、データ変換を実行するように第２のプロセッサ要素を構成したか否かを確認する。ユーザが第２のプロセッサ要素をデータ変換を実行するものとして指定した場合、ブロック９０８において、第２のプロセッサ要素は、別個のワークスペース内の出力データを所望のフォーマットに変換する。ユーザが第１のプロセッサ要素をデータ変換を実行するものとして指定した場合、第２のプロセスはブロック９０８の処理をスキップする。
【００７２】
ブロック９１０において、第２のプロセッサ要素は、ニューラルネットワークの層のサブセットの演算を実行する。一例としての実装例において、第２のプロセッサ要素に割り当てられた層のサブセットは、全結合層およびソフトマックス層を含む。
【００７３】
ブロック９１２において、第２のプロセッサ要素は、出力データをパースし、パースしたデータをＭＬフレームワークに返す。たとえば、第２のプロセッサ要素は、出力データをパースし、出力データを人間が読むことができる形式に変換することができる。
【００７４】
図１０は、別の具体例としての実装例に係る、処理回路の異種クラスタを有するニューラルネットワーク処理システム９２２を示す。システム９２２は、ＣＰＵと、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）回路９２６と、ニューラルネットワークアクセラレータとして動作するグラフィック処理ユニット（ＧＰＵ）９２８とを含む。ＣＰＵは、データ準備、分岐を伴う制御動作、アクセラレータへの送信に適さないメモリバウンド動作を処理する。ＦＰＧＡは、カスタムメモリ階層からも利益を得る計算集約型ジョブを処理する。ＧＰＵは、大きな計算集約型タスクを処理する。
【００７５】
ＦＰＧＡ回路９２６は、計算が多数の層に分散されているニューラルネットワークのためのニューラルネットワークアクセラレータとして有益であり、各層の計算要件は、ＧＰＵ９２８を十分に利用し続けるには不十分である。カスタムオンチップメモリは、小さな層間で移動するときのデータ局所性を保証し、それによって計算を著しく加速するのに役立ち得る。
【００７６】
ＧＰＵ９２８は、各層の計算要件がＧＰＵをビジーな状態に保つとともにＧＰＵのプロセッサ要素とメモリとの間のデータ転送に対する依存度を低い状態に保つニューラルネットワークのためのニューラルネットワークアクセラレータとして有益である。
【００７７】
図１１は、一例に係るプログラマブルＩＣ２２８を示すブロック図である。プログラマブルＩＣ２２８は、プログラマブルロジック３と、コンフィギュレーションロジック２５と、コンフィギュレーションメモリ２６とを含む。プログラマブルＩＣ２２８は、ＮＶＭ２２４、ＲＡＭ２２６、および他の回路２９等の外部回路に結合することができる。プログラマブルロジック３は、ロジックセル３０と、サポート回路３１と、プログラマブル相互接続３２とを含む。ロジックセル３０は、複数の入力の一般的な論理関数を実装するように構成することができる回路を含む。サポート回路３１は、トランシーバ、入出力ブロック、デジタル信号プロセッサ、メモリなどのような、専用回路を含む。ロジックセル３０およびサポート回路３１は、プログラマブル相互接続３２を用いて相互接続することができる。ロジックセル３０をプログラムするため、サポート回路３１のパラメータを設定するため、および、プログラマブル相互接続３２をプログラムするための情報は、コンフィギュレーションロジック２５によってコンフィギュレーションメモリ２６に格納される。コンフィギュレーションロジック２５は、不揮発性メモリ２２４からまたは任意の他のソースから（たとえばＤＲＡＭ２２６または他の回路２９から）、コンフィギュレーションデータを取得することができる。いくつかの例において、プログラマブルＩＣ２２８は処理システム２を含む。処理システム２は、マイクロプロセッサ、メモリ、サポート回路、ＩＯ回路などを含み得る。たとえば、処理システム２は、処理システム２１０と同様の回路を含み得る。いくつかの例において、処理システム２は、図２の処理システム２１０の代わりに使用することができる。そのような場合、図２のコンピューティングシステム１０８全体を、ソフトウェア２０６が処理システム２上で実行されるプログラマブルＩＣ２２８を用いて実装することができる。
【００７８】
図１２は、多数の異なるプログラマブルタイルを含むプログラマブルＩＣ２２８のＦＰＧＡ実装例を示し、上記プログラマブルタイルは、トランシーバ３７、コンフィギュラブルロジックブロック（「ＣＬＢ」）３３、ランダムアクセスメモリブロック（「ＢＲＡＭ」）３４、入出力ブロック（「ＩＯＢ」）３６、コンフィギュレーションおよびクロッキングロジック（「ＣＯＮＦＩＧ／ＣＬＯＣＫＳ」）４２、デジタル信号処理ブロック（「ＤＳＰ」）３５、専用入出力ブロック（「Ｉ／Ｏ」）４１（たとえばコンフィギュレーションポートおよびクロックポート）、ならびに、デジタルクロックマネージャ、アナログデジタル変換器、システムモニタリングロジックなどのようなその他のプログラマブルロジック３９を含む。ＦＰＧＡはまた、ＰＣＩｅインターフェイス４０、アナログデジタル変換器（ＡＤＣ）３８などを含み得る。
【００７９】
いくつかのＦＰＧＡにおいて、各プログラマブルタイルは、図１２の上部に含まれる例によって示されるように、同じタイル内のプログラマブルロジック要素の入力および出力端子４８への接続を有する少なくとも１つのプログラマブル相互接続要素（「ＩＮＴ」）４３を含み得る。各プログラマブル相互接続要素４３はまた、同じタイルまたは他のタイル内の隣接するプログラマブル相互接続要素の相互接続セグメント４９への接続を含み得る。各プログラマブル相互接続要素４３はまた、ロジックブロック間の汎用ルーティングリソース（図示せず）の相互接続セグメント５０への接続を含み得る。汎用ルーティングリソースは、相互接続セグメント（たとえば相互接続セグメント５０）のトラックを含むロジックブロック（図示せず）と、相互接続セグメントを接続するためのスイッチブロック（図示せず）との間のルーティングチャネルを含み得る。汎用ルーティングリソースの相互接続セグメント（たとえば相互接続セグメント５０）は、１つ以上のロジックブロックにまたがることができる。プログラマブル相互接続要素４３は、汎用ルーティングリソースとともに、示されているＦＰＧＡのためのプログラマブル相互接続構造（「プログラマブル相互接続」）を実現する。
【００８０】
ある実装例において、ＣＬＢ３３は、ユーザロジックに加えて単一のプログラマブル相互接続要素（「ＩＮＴ」）４３を実装するようにプログラムすることができるコンフィギュラブルロジック要素（「ＣＬＥ」）４４を含み得る。ＢＲＡＭ３４は、１つ以上のプログラマブル相互接続要素に加えてＢＲＡＭロジック要素（「ＢＲＬ」）４５を含み得る。典型的に、タイルに含まれる相互接続要素の数は、タイルの高さによって決まる。図示されている例において、ＢＲＡＭタイルは、５つのＣＬＢと同じ高さを有するが、他の数（たとえば４つ）を用いてもよい。ＤＳＰタイル３５は、適切な数のプログラマブル相互接続要素に加えてＤＳＰロジック要素（「ＤＳＰＬ」）４６を含み得る。ＩＯＢ３６は、たとえば、プログラマブル相互接続要素４３の１つのインスタンスに加えて、入出力ロジック要素（「ＩＯＬ」）４７の２つのインスタンスを含み得る。当業者には明らかなように、たとえばＩ／Ｏロジック要素４７に接続される実際のＩ／Ｏパッドは、典型的には入出力ロジック要素４７の領域に限定されない。
【００８１】
図示されている例において、ダイの中心付近の水平領域が、コンフィギュレーション、クロック、および他の制御ロジックに使用される。この水平領域または列から延びる垂直列５１は、ＦＰＧＡの幅にわたってクロックおよびコンフィギュレーション信号を分配するために使用される。
【００８２】
図１２に示されるアーキテクチャを利用するいくつかのＦＰＧＡは、ＦＰＧＡの大部分を構成する規則的な列構造を壊す追加のロジックブロックを含む。追加のロジックブロックは、プログラマブルブロックおよび／または専用ロジックとすることができる。
【００８３】
なお、図１２は、具体例としてのＦＰＧＡアーキテクチャだけを示すことを意図している。たとえば、ある行内のロジックブロックの数、行の相対的な幅、行の数および順序、行に含まれるロジックブロックの種類、ロジックブロックの相対的なサイズ、および図１２の上部に含まれる相互接続／ロジックの実装例は、具体例にすぎない。たとえば、実際のＦＰＧＡにおいては、ユーザロジックの効率的な実装を容易にするためにＣＬＢが現れる場所には必ずＣＬＢの２つ以上の隣接する行が含まれるのが典型的であるが、隣接するＣＬＢ行の数はＦＰＧＡの全体的なサイズによって変化する。
【００８４】
当業者は、１つ以上のプロセッサとプログラムコードで設定されたメモリ構成とを含む、さまざまな代替コンピューティング構成が、本明細書で開示されているプロセスおよびデータ構造をホストするのに適していることを理解するであろう。加えて、プロセスは、磁気もしくは光ディスクもしくはテープ、電子記憶装置、またはネットワーク上のアプリケーションサービス等の、さまざまなコンピュータ読取可能記憶媒体または配信チャネルを介して提供されてもよい。
【００８５】
局面および特徴は場合によっては個々の図面に示されることがあるが、１つの図面の特徴を、別の図面の特徴と、その組み合わせが明示的に示されていないまたは組み合わせとして明示的に説明されていない場合であっても、組み合わせることができることが、理解されるであろう。
【００８６】
本方法およびシステムは、さまざまなニューラルネットワーク処理システムに適用可能であると考えられる。当業者にとって、他の局面および特徴は、本明細書の検討から明らかであろう。本明細書および図面は例にすぎないとみなされ本発明の真の範囲は以下の特許請求の範囲によって示されることが意図されている。
【図１】
2020537786.tif 000003
【図２】
2020537786.tif 000004
【図３】
2020537786.tif 000005
【図４】
2020537786.tif 000006
【図５】
2020537786.tif 000007
【図６】
2020537786.tif 000008
【図７】
2020537786.tif 000009
【図８】
2020537786.tif 000010
【図９】
2020537786.tif 000011
【図１０】
2020537786.tif 000012
【図１１】
2020537786.tif 000013
【図１２】
2020537786.tif 000014
【手続補正書】
【提出日】令和2年6月17日(2020.6.17)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
畳み込みニューラルネットワーク処理システムであって、
共有メモリと、
前記共有メモリに結合された少なくとも１つのニューラルネットワークアクセラレータとを備え、前記少なくとも１つのニューラルネットワークアクセラレータは、入力データセットに対してニューラルネットワークの層の第１のサブセットの演算を実行し、前記層の第１のサブセットの前記演算の実行時に中間データセットを生成し、前記中間データセットを前記共有メモリの共有メモリキューに格納するように構成されており、前記ニューラルネットワーク処理システムはさらに、
前記共有メモリに結合され第１のプロセッサ要素と第２のプロセッサ要素とを有するホストコンピュータシステムを備え、
前記第１のプロセッサ要素は、前記第１のプロセッサ要素に動作を実行させる命令を実行するように構成されており、前記動作は、
入力データを前記少なくとも１つのニューラルネットワークアクセラレータに与えることと、
前記少なくとも１つのニューラルネットワークアクセラレータに対し、前記入力データセットに対する前記ニューラルネットワークの前記層の第１のサブセットの前記演算を実行するようシグナリングすることと、
システム起動またはランタイムパラメータが前記第１のプロセッサ要素を前記中間データを変換するように構成しているか否かを判断することと、
前記システム起動またはランタイムパラメータが前記第１のプロセッサ要素を構成していることに応じて、前記中間データセットを第１のフォーマットから第２のフォーマットに変換することとを含み、
前記第２のプロセッサ要素は、前記第２のプロセッサ要素に動作を実行させる命令を実行するように構成されており、前記動作は、
前記中間データセットを前記共有メモリキューから読み出すことと、
前記ニューラルネットワークアクセラレータが別の入力データセットに対して前記ニューラルネットワークの前記層の第１のサブセットの前記演算を実行している間に、前記中間データセットに対して前記ニューラルネットワークの層の第２のサブセットの演算を実行し出力データセットを生成することと、
システム起動またはランタイムパラメータが前記第２のプロセッサ要素を前記中間データを変換するように構成しているか否かを判断することと、
前記システム起動またはランタイムパラメータが前記第２のプロセッサ要素を構成していることに応じて、前記中間データセットを前記１のフォーマットから前記第２のフォーマットに変換することとを含み、
前記層の第１のサブセットは畳み込み層およびマックスプーリング層を含み、前記層の第２のサブセットは全結合層を含む、ニューラルネットワーク処理システム。
【請求項２】
前記第１のプロセッサ要素に、前記入力データを前記少なくとも１つのニューラルネットワークアクセラレータに与えることを実行させる命令は、前記第１のプロセッサ要素に、第１の時間に第１の入力データセットを、第１の時間よりも後の第２の時間に第２の入力データセットを、前記少なくとも１つのニューラルネットワークアクセラレータに与えることを実行させ、
前記第２のプロセッサ要素に、前記層の第２のサブセットの前記演算を実行させる命令は、前記第２のプロセッサ要素に、前記少なくとも１つのニューラルネットワークアクセラレータが前記第２の入力データセットに対して前記ニューラルネットワークの前記層の第１のサブセットの前記演算を実行するのと並行して、前記第１の入力データセットに対して前記層の第２のサブセットの前記演算を実行させる命令を含む、請求項１に記載のニューラルネットワーク処理システム。
【請求項３】
前記第２のプロセッサ要素に、前記中間データセットを前記共有メモリキューから読み出すことを実行させる命令は、前記第２のプロセッサ要素に、前記読み出しの後に前記共有メモリキューが空であることを前記第１のプロセッサ要素に対してシグナリングすることを実行させる命令を含む、請求項１に記載のニューラルネットワーク処理システム。
【請求項４】
前記第１のプロセッサ要素はさらに、前記少なくとも１つのニューラルネットワークアクセラレータが前記入力データに対する前記ニューラルネットワークの前記層の第１のサブセットの実行を完了したときに前記共有メモリキューが満杯であることを前記第２のプロセッサ要素に対してシグナリングすることを前記第１のプロセッサ要素に実行させる命令を、実行するように構成されており、
前記第２のプロセッサ要素は、前記第１のプロセッサ要素からの前記シグナリングに応じて前記中間データセットを前記共有メモリキューから読み出すことを前記第２のプロセッサ要素に実行させる命令を、実行するように構成されている、請求項３に記載のニューラルネットワーク処理システム。
【請求項５】
前記第１のフォーマットは列優先フォーマットであり、前記第２のフォーマットは行優先フォーマットである、請求項１に記載のニューラルネットワーク処理システム。
【請求項６】
前記層の第２のサブセットはソフトマックス層を含む、請求項１に記載のニューラルネットワーク処理システム。
【請求項７】
方法であって、
ホストコンピュータシステムの第１のプロセッサ要素が、入力データをニューラルネットワークアクセラレータに与えるステップと、
前記第１のプロセッサ要素が、前記入力データに対して畳み込みニューラルネットワークの層の第１のサブセットの演算を実行するよう前記ニューラルネットワークアクセラレータに対してシグナリングするステップと、
前記ニューラルネットワークアクセラレータが、前記入力データセットに対して前記ニューラルネットワークの前記層の第１のサブセットの前記演算を実行するステップと、
前記ニューラルネットワークアクセラレータが前記層の第１のサブセットの前記演算の実行時に中間データセットを生成するステップと、
前記ニューラルネットワークアクセラレータが前記中間データセットを共有メモリの共有メモリキューに格納するステップと、
前記第１のプロセッサ要素が、システム起動またはランタイムパラメータが前記第１のプロセッサ要素を前記中間データを変換するように構成しているか否かを判断するステップと、
前記システム起動またはランタイムパラメータが前記第１のプロセッサ要素を構成していることに応じて、前記第１のプロセッサ要素が前記中間データセットを第１のフォーマットから第２のフォーマットに変換するステップと、
前記ホストコンピュータシステムの第２のプロセッサ要素が、前記中間データセットを前記共有メモリキューから読み出すステップと、
前記第２のプロセッサ要素が、システム起動またはランタイムパラメータが前記第１のプロセッサ要素を前記中間データを変換するように構成しているか否かを判断するステップと、
前記システム起動またはランタイムパラメータが前記第２のプロセッサ要素を構成していることに応じて、前記第２のプロセッサ要素が前記中間データセットを前記１のフォーマットから前記第２のフォーマットに変換するステップと、
前記ニューラルネットワークアクセラレータが別の入力データセットに対して前記ニューラルネットワークの前記層の第１のサブセットの前記演算を実行している間に、前記第２のプロセッサ要素が前記中間データセットに対して前記ニューラルネットワークの層の第２のサブセットの演算を実行するステップと、
前記第２のプロセッサ要素が出力データを生成するステップとを含み、
前記層の第１のサブセットは畳み込み層およびマックスプーリング層を含み、前記層の第２のサブセットは全結合層を含む、方法。
【請求項８】
前記入力データを前記ニューラルネットワークアクセラレータに与えるステップは、前記第１のプロセッサ要素が、第１の時間に第１の入力データセットを、第１の時間よりも後の第２の時間に第２の入力データセットを、前記ニューラルネットワークアクセラレータに与えるステップを含み、
前記層の第２のサブセットの前記演算を実行するステップは、前記ニューラルネットワークアクセラレータが前記第２の入力データセットに対して前記ニューラルネットワークの前記層の第１のサブセットの前記演算を実行するのと並行して、前記第１の入力データセットに対して前記層の第２のサブセットの前記演算を実行するステップを含む、請求項７に記載の方法。
【請求項９】
前記中間データセットを前記共有メモリキューから読み出すステップは、前記読み出しの後に前記共有メモリキューが空であることを前記第１のプロセッサ要素に対してシグナリングするステップを含む、請求項８に記載の方法。
【請求項１０】
前記第１のプロセッサ要素が、前記ニューラルネットワークアクセラレータが前記入力データに対する前記ニューラルネットワークの前記層の第１のサブセットの実行を完了したときに前記共有メモリキューが満杯であることを前記第２のプロセッサ要素に対してシグナリングするステップと、
前記第２のプロセッサ要素が、前記第１のプロセッサ要素からの前記シグナリングに応じて前記中間データセットを前記共有メモリキューから読み出すステップとをさらに含む、請求項７に記載の方法。
【請求項１１】
前記第１のフォーマットは列優先フォーマットであり、前記第２のフォーマットは行優先フォーマットである、請求項１０に記載の方法。
【国際調査報告】
2020537786.tif 000015
2020537786.tif 000016
2020537786.tif 000017
2020537786.tif 000018
2020537786.tif 000019