(57)【要約】  本明細書の実施形態は、超並列ハードウェアシステム（２０５）において実装されるニューラルネットワーク（１００）を静的にスケジュールするための技法について説明する。ニューラルネットワーク（１００）は、本明細書では上位レベル、中間レベル、および下位レベルと呼ばれる３つの異なるスケジューリングレベルを使用してスケジュールされ得る。一実施形態では、上位レベルは、ハードウェアシステム（２０５）において同時に動作する関数の連続した順序を確立する、ニューラルネットワーク（１００）中の層のハードウェアまたはソフトウェアモデル（４００）を含む。中間レベルでは、シストリックアレイ（２８０）またはメッシュを形成するために、上位レベルにおいて定義される関数における同一のプロセスが接続され、レイテンシを最小限に抑えるために平衡化されたデータフローチャネルが使用される。下位レベルでは、コンパイラ（２６５）が、ニューラルネットワーク（１００）のための静的スケジュールを提供するために、シストリックアレイ中の処理要素によって実施される動作をハードウェアシステム（２０５）の異なる部分に割り当てることができる。【選択図】図３
2020537789.tif 000002
【特許請求の範囲】
【請求項１】
ニューラルネットワークをスケジュールするための方法であって、
前記ニューラルネットワーク中の少なくとも１つの層を実行するときに実施される複数のパイプライン化関数の連続した順序を定義するモデルを受信することであって、前記ニューラルネットワークが複数の層を備える、複数のパイプライン化関数の連続した順序を定義するモデルを受信することと、
前記ニューラルネットワークの前記少なくとも１つの層において同一のプロセスを実行するためのシストリックアレイを受信することと、
１つまたは複数のコンピューティングプロセッサを使用して、前記モデルおよび前記シストリックアレイに対応するソースコードを、ハードウェアシステムにおいて前記ニューラルネットワークを実行するときに静的スケジュールを提供するハードウェアレベル設計にコンパイルすることと
を含む、方法。
【請求項２】
前記ハードウェアレベル設計に基づいてフィールドプログラマブルゲートアレイ（ＦＰＧＡ）を構成することであって、前記ハードウェアレベル設計がレジスタ転送レベル（ＲＴＬ）コードを含む、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）を構成すること
をさらに含む、請求項１に記載の方法。
【請求項３】
前記シストリックアレイの前記ソースコードをコンパイルすることが、
前記シストリックアレイの前記ソースコードを、相互接続された処理要素の２次元アレイに変換すること
を含む、請求項１に記載の方法。
【請求項４】
前記シストリックアレイの前記ソースコードをコンパイルすることは、
前記相互接続された処理要素の各々によって実施される複数の動作を識別することであって、前記相互接続された処理要素の各々が同じ複数の動作を実施する、複数の動作を識別することと、
前記複数の動作が同時に機能できるように、前記複数の動作を前記ハードウェアシステム中の異なるハードウェア要素に割り当てることと
を含む、請求項３に記載の方法。
【請求項５】
前記モデルが、前記複数のパイプライン化関数の前記連続した順序を示すソフトウェア定義並列化プラグマを含む、請求項１に記載の方法。
【請求項６】
前記モデルに対応する前記ソースコードが、前記ニューラルネットワークのためのアンタイムド関数コードを含む、請求項１に記載の方法。
【請求項７】
前記複数のパイプライン化関数が、畳み込みユニット、プーリングユニット、およびデータを前記複数のパイプライン化関数における活性化ユニットに送信する行列乗算器のうちの少なくとも１つを含む、請求項１に記載の方法。
【請求項８】
プロセッサと、
コンパイラを備えるメモリと
を備えるコンピューティングシステムであって、前記コンパイラは、前記プロセッサによって実行されたとき、
ニューラルネットワーク中の少なくとも１つの層を実行するときに実施される複数のパイプライン化関数の連続した順序を定義するモデルを受信することであって、前記ニューラルネットワークが複数の層を備える、複数のパイプライン化関数の連続した順序を定義するモデルを受信することと、
前記ニューラルネットワークの前記少なくとも１つの層において同一のプロセスを実行するためのシストリックアレイを受信することと、
前記モデルおよび前記シストリックアレイに対応するソースコードを、ハードウェアシステムにおいて前記ニューラルネットワークを実行するときに静的スケジュールを提供するハードウェアレベル設計にコンパイルすることと
を含む動作を実施する、コンピューティングシステム。
【請求項９】
前記動作は、
前記ハードウェアレベル設計に基づいてフィールドプログラマブルゲートアレイ（ＦＰＧＡ）を構成することであって、前記ハードウェアレベル設計がレジスタ転送レベル（ＲＴＬ）コードを含む、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）を構成すること
をさらに含む、請求項８に記載のコンピューティングシステム。
【請求項１０】
前記シストリックアレイの前記ソースコードをコンパイルすることが、
前記シストリックアレイの前記ソースコードを、相互接続された処理要素の２次元アレイに変換すること
を含む、請求項８に記載のコンピューティングシステム。
【請求項１１】
前記シストリックアレイの前記ソースコードをコンパイルすることは、
前記相互接続された処理要素の各々によって実施される複数の動作を識別することであって、前記相互接続された処理要素の各々が同じ複数の動作を実施する、複数の動作を識別することと、
前記複数の動作が同時に機能できるように、前記複数の動作を前記ハードウェアシステム中の異なるハードウェア要素に割り当てることと
を含む、請求項１０に記載のコンピューティングシステム。
【請求項１２】
前記モデルが、前記複数のパイプライン化関数の前記連続した順序を示すソフトウェア定義並列化プラグマを含む、請求項８に記載のコンピューティングシステム。
【請求項１３】
前記モデルに対応する前記ソースコードが、前記ニューラルネットワークのためのアンタイムド関数コードを含む、請求項８に記載のコンピューティングシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示の例は、一般に、超並列プログラマブルハードウェアシステムをスケジュールすることに関する。
【背景技術】
【０００２】
機械学習は、コンピューティングシステムが、明示的にプログラムされることなしに働くことを引き起こす科学である。古典的な機械学習は、Ｋ平均クラスタリング、線形およびロジスティック回帰、確率的勾配降下法、相関ルール学習などを含む、様々なクラスタリングおよび分類技法を含む。深層学習は、機械学習におけるより新しい最先端領域である。深層学習は、特徴抽出および変換のために非線形処理ユニットの複数の層を使用する機械学習アルゴリズムのクラスである。深層学習アルゴリズムは、教師なし（たとえば、パターン分析）であるか、または教師あり（たとえば、分類）であり得る。深層学習アルゴリズムは、（本明細書では「ニューラルネットワーク」と呼ばれる）人工ニューラルネットワーク（ＡＮＮ）の層を使用して実装され得る。
【０００３】
概して、ニューラルネットワークは、グラフ中で接続されたノード（すなわち、「ニューロン」）の集合である。ニューラルネットワーク中のノードは、重み付けされた入力の和を算出し、その和に随意のバイアスを加算する。ノードの出力は、（「活性化関数」と呼ばれる）最終的な和の関数である。例示的な活性化関数は、シグモイド関数、双曲線正接（ｔａｎｈ）関数、正規化線形ユニット（ＲｅＬＵ）関数、および恒等関数を含む。ニューラルネットワークモデルは、しばしば、特定のトポロジーと、対応する重みおよびバイアスとを定義するノードの層に編成される。重みおよびバイアスは、ネットワークパラメータと呼ばれる。
【０００４】
概して、ニューラルネットワークは、入力層と出力層とを含み、入力層と出力層との間の１つまたは複数の隠れ層を随意に含むことができる。深層学習アプリケーションにおいて使用されるニューラルネットワークは、典型的に、多くの隠れ層を含み、それにより、深層ニューラルネットワーク（ＤＮＮ）という用語が生じる。ニューラルネットワークの層は、密接続される（たとえば、層中の各ノードが前の層中のすべてのノードに全接続される）か、またはスパース接続され得る（たとえば、層中の各ノードが前の層中のノードの一部のみに接続される）。畳み込みニューラルネットワーク（ＣＮＮ）は、畳み込み層と呼ばれる、１つまたは複数のスパース接続された層を含む、ＤＮＮのタイプである。ＣＮＮは、画像またはビデオデータを処理するのに好適である。ＤＮＮの他のタイプは、音声およびテキストデータを処理するのに好適であるリカレントニューラルネットワーク（ＲＮＮ）を含む。
【０００５】
現代のフィールドプログラマブルゲートアレイ（ＦＰＧＡ）は、超並列ハードウェアシステムをもたらすために利用され得る、数百万個のルックアップテーブルと、数千個の構成可能な論理ブロック（ＣＬＢ）、デジタル信号処理（ＤＳＰ）およびランダムアクセスメモリブロック（ＢＲＡＭ）とを与える。既存のＦＰＧＡシステムは、ハードウェア記述言語（ＨＤＬ）、または高位合成（ＨＬＳ：ｈｉｇｈ  ｌｅｖｅｌ  ｓｙｎｔｈｅｓｉｓ）ツールを使用してスケジュールされるプログラムコード（たとえば、ＣまたはＣ＋＋）のいずれかを使用して構成される。
【０００６】
ＨＤＬ手法では、すべてのプロセスは、極めて複雑な状態機械およびデータ管理論理を用いて手動でスケジュールされる。しかしながら、このプロセスは、大規模ＦＰＧＡシステムの場合、時間がかかる。シングルスレッドソフトウェア機能では、数千個のプロセスをスケジュールすることの複雑さは指数関数的に増大し、いくつかの場合には、スケジューリングは収束することができない。
【発明の概要】
【０００７】
ニューラルネットワークをスケジュールするための技法が説明される。一例は、ニューラルネットワーク中の少なくとも１つの層を実行するときに実施される複数の関数の連続した順序を定義するモデルを受信することであって、ニューラルネットワークが複数の層を備える、複数の関数の連続した順序を定義するモデルを受信することを含む方法である。本方法は、ニューラルネットワークの少なくとも１つの層において同一のプロセスを実行するためのシストリックアレイを受信することと、モデルおよびシストリックアレイに対応するソースコードを、ハードウェアシステムにおいてニューラルネットワークを実行するときに静的スケジュールを提供するハードウェアレベル設計にコンパイルすることとを含む。
【０００８】
別の例は、１つまたは複数の処理デバイス上で実行されたとき、ニューラルネットワークをスケジュールするための動作を実施する命令を記憶する非一時的コンピュータ可読記憶媒体である。動作は、ニューラルネットワーク中の少なくとも１つの層を実行するときに実施される複数の関数の連続した順序を定義するモデルを受信することであって、ニューラルネットワークが複数の層を備える、複数の関数の連続した順序を定義するモデルを受信することを含む。動作は、ニューラルネットワークの少なくとも１つの層において同一のプロセスを実行するためのシストリックアレイを受信することと、モデルおよびシストリックアレイに対応するソースコードを、ハードウェアシステムにおいてニューラルネットワークを実行するときに静的スケジュールを提供するハードウェアレベル設計にコンパイルすることとを含む。
【０００９】
別の例は、プロセッサとメモリとを含むコンピューティングシステムである。メモリは、プロセッサによって実行されたとき、動作を実施するコンパイラを含む。動作は、ニューラルネットワーク中の少なくとも１つの層を実行するときに実施される複数の関数の連続した順序を定義するモデルを受信することであって、ニューラルネットワークが複数の層を備える、複数の関数の連続した順序を定義するモデルを受信することを含む。動作は、ニューラルネットワークの少なくとも１つの層において同一のプロセスを実行するためのシストリックアレイを受信することと、モデルおよびシストリックアレイに対応するソースコードを、ハードウェアシステムにおいてニューラルネットワークを実行するときに静的スケジュールを提供するハードウェアレベル設計にコンパイルすることとを含む。
【００１０】
上記の具陳された特徴が詳細に理解され得るように、上記で手短に要約されたより詳細な説明は、添付の図面にその一部が示されている例示的な実装形態を参照することによってなされ得る。しかしながら、添付の図面は、典型的な例示的な実装形態を示すにすぎず、したがって、その範囲の限定と見なされるべきでないことに留意されたい。
【図面の簡単な説明】
【００１１】
【図１】一例による、多層ニューラルネットワークを示す図である。
【図２】一例による、ＦＰＧＡにおいてニューラルネットワークパイプラインを確立するためのシステムの図である。
【図３】一例による、ニューラルネットワークパイプラインをスケジュールするためのフローチャートである。
【図４】一例による、ニューラルネットワーク中の層のハードウェアモデルを示す図である。
【図５】一例による、ニューラルネットワーク中の、畳み込みまたは全接続層を実施するためのシストリックアレイを示す図である。
【図６】一例による、デジタル信号処理ブロック中のパイプライン化処理要素を示す図である。
【図７】一例による、ニューラルネットワークを実装するためのシステムを示すブロック図である。
【図８】一例による、コンピューティングシステムを示すブロック図である。
【図９】一例による、アクセラレーション回路を示すブロック図である。
【図１０】一例による、プログラマブル集積回路（ＩＣ）を示すブロック図である。
【図１１】一例による、プログラマブルＩＣのＦＰＧＡ実装形態を示す図である。
【発明を実施するための形態】
【００１２】
理解を容易にするために、可能な場合、図に共通である同じ要素を示すために同じ参照番号が使用されている。一例の要素が、他の例に有益に組み込まれ得ることが企図される。
【００１３】
図を参照しながら様々な特徴が以下で説明される。図は一定の縮尺で描かれることも描かれないこともあり、同様の構造または機能の要素が、図全体にわたって同様の参照番号によって表されることに留意されたい。図は、特徴の説明を容易にすることを意図されているにすぎないことに留意されたい。図は、本明細書の網羅的な説明として、または特許請求の範囲に対する限定として意図されていない。さらに、示されている例は、すべての態様または利点が示される必要があるとは限らない。特定の例に関して説明される一態様または利点は、必ずしもその例に限定されるとは限らず、そのように示されていない場合でも、またはそのように明示的に説明されていない場合でも、任意の他の例において実施され得る。
【００１４】
本明細書の実施形態は、超並列ハードウェアシステムにおいて実装されるニューラルネットワークを静的にスケジュールするための技法について説明する。ニューラルネットワークは、本明細書では上位レベル、中間レベル、および下位レベルと呼ばれる３つの異なるレベルを使用してスケジュールされ得る。一実施形態では、上位レベルは、ハードウェアシステムにおいて同時に動作する関数（たとえば、畳み込み関数、最大プーリング／最大プール関数、正規化線形ユニット（ＲｅＬＵ）関数、およびスケーリング関数）の連続した順序を確立する、ニューラルネットワーク中の層のハードウェアまたはソフトウェアモデルを含む。モデルは、層において異なる関数を相互接続するデータチャネルを含み得る。
【００１５】
中間レベルでは、処理要素のシストリックアレイまたはメッシュを形成するために、上位レベルにおいて定義される層における同一のプロセスが接続され、レイテンシを最小限に抑えるために平衡化されたデータフローチャネルが使用される。一実施形態では、シストリックアレイはソースコード（たとえば、ＣまたはＣ＋＋）を使用して設計され、ソースコードは、ソースコードをレジスタ転送レベル（ＲＴＬ）コードに変換するときにＨＬＳコンパイラによって並列化され、ＲＴＬコードは、次いで、ＦＰＧＡなど、プログラマブルハードウェアを構成するために使用される。下位レベルでは、ＨＬＳコンパイラは、シストリックアレイ中の処理要素によって実施される動作をプログラマブルハードウェアの異なる部分に割り当てることができる。たとえば、処理要素が異なるデジタル信号処理（ＤＳＰ）ブロックを使用して実装される場合、処理要素によって実施される異なる動作（たとえば、読取り、書込み、乗算、加算など）は、並列に実施され得る。ニューラルネットワークのスケジューリングを異なるレベルに分割することによって、コンパイラは、システム中のハードウェア要素が同時に動作することができるように、並列化されたパイプラインを生成することができる。
【００１６】
図１は、一例による、多層ニューラルネットワーク１００を示す。本明細書で使用されるニューラルネットワーク１００は、機械学習において使用される計算モジュールであり、人工ニューロンと呼ばれる接続されたユニットの大きい集合に基づき、ニューロン間の接続は、変動する強度の活性化信号を搬送する。ニューラルネットワーク１００は、明示的にプログラムされるのではなく、例からトレーニングされ得る。一実施形態では、ニューラルネットワーク１００中のニューロンは、層、たとえば、層１、層２、層３などにおいて接続され、データが、第１の層、たとえば、層１から、最後の層、たとえば、層７に進む。７つの層が図１に示されているが、ニューラルネットワーク１００は数百個または数千個の異なる層を含むことができる。
【００１７】
ニューラルネットワークは、コンピュータビジョン、特徴検出、音声認識など、任意の数のタスクを実施することができる。図１では、ニューラルネットワーク１００は、デジタル画像中の物体を分類する、顔認識を実施する、テキストを識別するなど、デジタル画像中の特徴を検出する。そうするために、画像データ１０５が、ニューラルネットワーク中の第１の層に供給され、第１の層は、画像データ１０５に対して、対応する関数、この例では、１０×１０畳み込みを実施する。次いで、その関数の結果は、次の層、たとえば、層２に受け渡され、層２は、処理された画像データを次のレベルに受け渡す前に層２の関数を実施し、以下同様である。層によって処理された後に、データは画像分類器１１０において受信され、画像分類器１１０は、画像データ中の特徴を検出することができる。
【００１８】
層は、層１が層２の前に実施され、層２が層３の前に実施され、以下同様であるように、連続した順序で定義される。したがって、下位層と（１つまたは複数の）上位層との間にデータ依存性が存在する。層２は層１からデータを受信するのを待つが、一実施形態では、ニューラルネットワーク１００は、各層が同時に動作することができるように並列化され得る。すなわち、各クロックサイクル中に、層は、新しいデータを受信し、処理されたデータを出力することができる。たとえば、各クロックサイクル中に、新しい画像データ１０５が層１に与えられ得る。簡単のために、各クロックサイクル中に、新しい画像の一部が層１に与えられ、各層が、前のクロックサイクル中で受信された画像データのために、処理されたデータを出力することができると仮定する。並列化されたパイプラインを形成するように層がハードウェアで実装された場合、７つのクロックサイクルの後に、層の各々は画像データの一部を処理するために同時に動作する。「画像データの一部」は、画像全体、１つの画像のピクセルのセット、画像のバッチ、または各層が同時に処理することができる任意の量のデータであり得る。したがって、並列パイプラインを形成するように層をハードウェアで実装することは、層を一度に１つ動作させることと比較して、ニューラルネットワークのスループットを非常に増加させることができる。超並列ハードウェアシステム中の層をスケジュールすることのタイミング利益は、ニューラルネットワーク１００中の層の数が増加するにつれてさらに改善する。
【００１９】
図２は、一例による、ＦＰＧＡ２０５においてニューラルネットワークパイプライン２１５を確立するためのシステム２００である。ＦＰＧＡ２０５に加えて、システム２００は、ＦＰＧＡ２０５中でプログラマブル論理２１０を構成するコンピューティングデバイス２５０を含む。たとえば、コンピューティングデバイス２５０は、ラップトップ、デスクトップ、またはサーバであり得る。コンピューティングデバイス２５０は、任意の数の処理コアを各々含んでいることがある任意の数の処理要素を表すプロセッサ２５５を含む。デバイス２５０は、揮発性または不揮発性メモリ要素を有することができるメモリ２６０をも含む。
【００２０】
メモリ２６０はコンパイラ２６５を含み、コンパイラ２６５は、一実施形態では、ＣまたはＣ＋＋などのソースコードをＲＴＬコードに変換するソフトウェアアプリケーション（たとえば、ＨＬＳコンパイラ）であり、ＲＴＬコードは、ニューラルネットワークパイプライン２１５を確立するようにプログラマブル論理２１０を構成する。ソースコードをコンパイルするとき、コンパイラ２６５は、スケジューラ２７０を使用してＲＴＬを生成し、それは、ニューラルネットワークパイプライン２１５を形成する異なるハードウェア要素（たとえば、ＤＳＰブロック２２０またはＣＬＢ２２２）が同時に動作することができるようにパイプライン２１５を静的にスケジュールする。一実施形態では、静的スケジュールは、ハードウェア要素が実行する順序がランタイム中に変化しないように固定である。一実施形態では、スケジューラ２７０は、コンパイラ２６５がニューラルネットワークパイプライン２１５を確立するための静的にスケジュールされたＲＴＬコードを生成するために使用する、上位レベル、中間レベル、および下位レベルを受信するか、または生成する。一実施形態では、スケジュールの上位レベルは、ニューラルネットワーク中の層（または複数の層）のハードウェアまたはソフトウェアモデルを含む層設計である。層設計は層命令のパラメータ化２７５によって定義され得、それは、畳み込み関数、最大プーリング関数、ＲｅＬＵ関数、およびスケーリング関数など、同時に動作することができる、層中の複数の関数の連続した順序であり得る。
【００２１】
一実施形態では、スケジュールの中間レベルは、データチャネルを使用して相互接続される複数の処理要素（ＰＥ）を含むシストリックアレイ２８０である。一実施形態では、ＰＥの各々は、ＦＰＧＡ中のＤＳＰブロック２２０または１つまたは複数のＣＬＢ２２２（またはその両方の組合せ）のうちの１つまたは複数を含む。ＤＳＰブロック２２０は、ＣＬＢ２２２よりも速い速度でＤＳＰを実施し、システム電力消費を低下させることができる特殊な論理ブロックである。その上、ＣＬＢ２２２を使用して同じＤＳＰ性能を達成することは、より大きい集積回路をもたらすので、ＤＳＰブロック２２０を追加することにより、ＦＰＧＡの全体的なサイズを低減することができる。ＤＳＰブロック２２０は、加算器、事前加算器、減算器、アキュムレータ、加算ユニットなどを含む。
【００２２】
シストリックアレイ２８０は、ＰＥを形成するＤＳＰブロック２２０またはＣＬＢ２２２が、層において定義される関数を実施するためにどのように相互接続されるかを定義する。たとえば、畳み込みを実施するために、シストリックアレイ２８０は複数の相互接続されたＰＥを含み得、複数の相互接続されたＰＥは各々、ＦＰＧＡ２０５中のプログラマブルＤＳＰブロック２２０から形成された複数の乗算アキュムレータ（ＭＡＣ：ｍｕｌｔｉｐｌｙ−ａｃｃｕｍｕｌａｔｏｒ）ブロックを含む。別の実施形態では、最大プーリング関数またはＲｅＬＵ関数を実装するとき、ＰＥは、対応する動作を実施するＣＬＢ２２２を含み得る。層命令のパラメータ化２７５において定義される関数のように、コンパイラ２６５は、ＰＥが同時に動作することができるように、シストリックアレイ２８０に対応するＲＴＬコードを生成することができる。
【００２３】
一実施形態では、スケジュールの下位レベルは、シストリックアレイ２８０中のＰＥによって実施される動作を定義するＰＥ設計２８５である。上記の例を続けると、ＰＥがＭＡＣブロックを含む場合、ＰＥ設計２８５は、これらのブロックによって実施される、読取り動作、書込み動作、乗算動作、および加算動作（ａｄｄ  ｏｐｅｒａｔｉｏｎ）をリストすることができる。もちろん、ＭＡＣブロックは、ＰＥを実装することの一例にすぎず、最大プーリングユニットまたはＲｅＬＵの一部であるＰＥによって、他の動作が実施され得る。
【００２４】
ＦＰＧＡ２０５は、プログラマブル論理２１０とメモリ２２５とを含む。プログラマブル論理２１０は、プログラマブル論理ブロックのアレイと、論理ブロックが通信可能に連結されることを可能にする再構成可能な相互接続の階層とを含むことができる。プログラマブル論理ブロックの一例は、ニューラルネットワークパイプライン２１５中の、畳み込みまたは全接続層を実施するときに有用であるＤＳＰブロック２２０を含む。プログラマブル論理ブロックは、スケーリング関数または最大プール関数を実施するときに使用され得る１つまたは複数のＣＬＢ２２２をも含むことができる。一実施形態では、ニューラルネットワークパイプライン２１５は、畳み込みを実施するために行列乗算が使用され得るように、受信された画像データを（ｉｍ２ｃｏｌと呼ばれる）２Ｄ行列に変換するためのプログラマブル論理２１０を含む。
【００２５】
ＦＰＧＡ２０５が示されているが、本明細書で説明されるスケジューリング技法は、ニューラルネットワークを実装するように特別に設計されたグラフィックスプロセッサユニット（ＧＰＵ）または特定用途向け集積回路（ＡＳＩＣ）など、他のタイプの非プログラマブルハードウェアシステム上で、ニューラルネットワークパイプライン２１５を実装するために実施され得る。すなわち、これらのシステム上でニューラルネットワークを設計するかまたは実装するとき、ハードウェア要素が同時に動作することができるようにハードウェア要素が静的にスケジュールされるように、層命令のパラメータ化２７５と、シストリックアレイ２８０と、ＰＥ設計２８５とが使用され得る。
【００２６】
図３は、一例による、ニューラルネットワークパイプラインをスケジュールするための方法３００のフローチャートである。ブロック３０５において、スケジューラは、ＦＰＧＡにおいて同時に動作する複数の関数の連続した順序を確立する、ニューラルネットワーク中の層のためのモデルを受信する。一実施形態では、モデルは、層命令のパラメータ化２７５を含む、図２で説明されたような層設計である。さらに、モデルは、超並列ハードウェアシステム、たとえば、ＦＰＧＡにおいて実装されるような完全なニューラルネットワークを表すソフトウェアまたはハードウェアモデルであり得る。
【００２７】
一実施形態では、モデルは、ユーザによってスケジューラに与えられる。たとえば、ユーザは、ユーザがＦＰＧＡ上に実装することを望むニューラルネットワークのタイプに従ってモデルを設計し得る。たとえば、異なるニューラルネットワークは、異なる層と、それらの層内の異なる関数とを有することができる。上述のように、ニューラルネットワークは、デジタル画像中の特徴検出、オーディオ処理、またはテキストを処理することなど、異なるタスクを実施するように設計され得る。ニューラルネットワークの非限定的な例は、ＣＮＮ、ＲＮＮ、長短期記憶（ＬＳＴＭ）ニューラルネットワーク、および特徴ベース学習または教師あり／教師なし学習を使用するニューラルネットワークを含む。その上、同じタイプのニューラルネットワークの構造は、大きく変動することができる。たとえば、いくつかのＣＮＮは数十個の層を含むことができ、他のＣＮＮは数百個の層を含むことができ、層の各々は別様に構成され得、たとえば、３×３畳み込みを実施する層、１１×１１畳み込みを実施する層、全接続（ＦＣ）層、プーリング層などである。
【００２８】
一実施形態では、モデルは、ニューラルネットワーク中の層の各々のための上位レベルスケジュールを定義する。図４は、一例による、ニューラルネットワーク中の層のアーキテクチャ記述（ａｒｃｈｉｔｅｃｔｕｒｅ  ｄｅｓｃｒｉｐｔｉｏｎ）４００のハードウェアモデルを示す。アーキテクチャ記述４００は、画像中の特徴検出を実施するための、層スケジューラ４０５、畳み込みユニット４１０、最大プーリングユニット４１５、マルチプレクサ（ｍｕｘ）４２０、ＲｅＬＵ４２５、ｍｕｘ４３０、スケーリングユニット４３５、およびｍｕｘ４４０を含み、これらは、一般に、パイプライン化関数（ｐｉｐｅｌｉｎｅｄ  ｆｕｎｃｔｉｏｎ）と呼ばれる。アーキテクチャ記述４００のモデルは、ニューラルネットワークの１つまたは複数の層を実行するときのパイプライン化関数の連続した順序を定義する。一実施形態では、畳み込みユニット４１０は、行列乗算器を使用して行列乗算を実施し、任意の数の重み（またはカーネル）を使用して、受信された画像データを重み付けする。一実施形態では、最大プーリングユニット４１５は、画像がパイプラインの後半でスケーリングされるときに特徴が失われないように画像中の特徴を拡大する。ＲｅＬＵ４２５は、あるタイプの活性化ユニットまたはランプ関数であり、その活性化ユニットまたはランプ関数は、一実施形態では、ｆ（ｘ）＝ｍａｘ（０，ｘ）として定義され、ここで、ｘはニューロンからの出力である。スケーリングユニット４３５は、処理されたデータの値を、量子化による数値誤差を最小限に抑えるように調整することができる。
【００２９】
層スケジューラ４０５は、データフローがどこで開始するかを決定する。たとえば、いくつかの層では、入力画像データは、最初に、畳み込みユニット４１０に送られ得る。ニューラルネットワーク中の他の層では、画像データは、畳み込みユニット４１０をバイパスし、代わりに、最大プーリングユニット４１５またはスケーリングユニット４３５に層スケジューラ４０５によって送られる。さらに、データがアーキテクチャ記述４００中を伝搬する様式は、層に応じて変動することができる。たとえば、第１の層では、画像データが畳み込みユニット４１０によって処理された後に、ｍｕｘ４２０は、処理されたデータをＲｅＬＵ４２５に直接フォワーディングし、それにより、最大プーリングユニット４１５をバイパスし得る。代替的に、第２の層では、畳み込みユニット４１０によって出力されたデータは、最初に、最大プーリングユニット４１５によって処理され、その後、ｍｕｘ４２０がそのデータをＲｅＬＵ４２５に送信する。このようにして、マルチプレクサ４２０、４３０、および４４０は、たとえば層スケジューラ４０５によって与えられた制御信号に従って、画像データがアーキテクチャ記述４００中をどのように流れるかを変更することができる。
【００３０】
一実施形態では、アーキテクチャ記述４００は、ニューラルネットワークを実行するために必要とされる完全なシステムを示すブロック図である。言い換えれば、アーキテクチャ記述４００は、ニューラルネットワークおよびその対応する層を実行するためにＦＰＧＡ（または他のハードウェアシステム）において必要とされるハードウェアブロックを、抽象化された（ａｂｓｔｒａｃｔｅｄ）レベルで表す。図示されていないが、アーキテクチャ記述４００は、異なるブロックが同時に実行することを可能にするためにそれらのブロックの間に挿入されたデータフローチャネルを含み得る。データフローチャネルは、全体的なシステムレイテンシを最小限に抑えるように、適切にサイズ決定され得る。その上、図４に示されているアーキテクチャ記述４００はソフトウェア定義され得、これは、ユーザが単に（ここでは異なるブロックとして表される）スカラー動作（ｓｃａｌａｒ  ｏｐｅｒａｔｉｏｎ）のシーケンスを表現し、並列化プラグマ（ｐａｒａｌｌｅｌｉｚａｔｉｏｎ  ｐｒａｇｍａ）を追加することを意味する。すなわち、ユーザは、ブロックをスケジュールすることなしに（すなわち、ブロックがいつ実行されるべきであるかを定義することなしに）、これらのブロックが実行されるシーケンスを定義することができる。一実施形態では、並列化プラグマは、定義されたブロックが並列に動作するようにスケジュールされるべきであることをコンパイラに指定する指示プラグマ（ｄｉｒｅｃｔｉｖｅ  ｐｒａｇｍａ）である。図４に示されているハードウェアモデルをソースコードに変換し、並列化プラグマを使用することによって、コンパイラは、アーキテクチャ記述４００を実行するための最適な静的スケジュールを作成することができる。一実施形態では、得られた静的スケジュールは、図４に示されている異なるブロックが同時に実行することを可能にする。
【００３１】
アーキテクチャ記述４００をハードウェアモデルとして表現するのではなく、アーキテクチャ記述４００は、ソフトウェアモデルとして表され得る。アーキテクチャ記述４００のためのソフトウェアモデルのＣ＋＋実装形態の一例が表１で与えられる。
2020537789.tif 000003
【００３２】
表１中のソースコードは、「ｃｎｎＬａｙｅｒｓ」個の層をもつニューラルネットワークのためのアンタイムド関数コード（ｕｎｔｉｍｅｄ  ｆｕｎｃｔｉｏｎａｌ  ｃｏｄｅ）である。さらに、コードは、定義されたシーケンスにおいて順序付けされるが、明示的にスケジュールされない。この実施形態では、ＨＬＳ  ＤＡＴＡＦＬＯＷは、データフローのための並列化プラグマである。このプラグマは、ニューラルネットワーク設計者が、並列ブロックをスケジュールする必要なしにそれらのブロックをインスタンス化することによってＲＴＬ概念を使用することを可能にする。ＲＴＬにコンパイルされた後に、コードにおける異なる関数（たとえば、Ｃｏｎｖ、ＭａｘＰｏｏｌ、Ｒｅｌｕ、およびＳｃａｌｅ）が同時に動作する。図示されていないが、コードは、異なる関数を相互接続するＦＩＦＯ（または他のバッファ）を含み得る。
【００３３】
表１に示されているコードから生成された、得られたコンパイルされたＲＴＬは、ニューラルネットワークのすべての層のための、統計的にスケジュールされた状態機械を含んでいる。各層内で、すべてのブロック（または関数）は同時に稼働する。図４に示されているハードウェアモデルと、表１中のソフトウェアコードとは、設計者が高レベルソフトウェア定義システムにおけるハードウェア挙動を表現することができる容易さを示す。
【００３４】
方法３００に戻ると、ブロック３１０において、スケジューラは、ニューラルネットワーク層において同一のプロセスを実行するためのシストリックアレイを受信する。一実施形態では、設計者は、シストリックアレイの構成を定義するソフトウェアコードを与え、スケジューラ（またはコンパイラ）は、次いで、そのシストリックアレイを、シストリックアレイ中の異なる動作がハードウェアで同時に実行するように並列化する。
【００３５】
一実施形態では、シストリックアレイは２次元アレイであり、２次元アレイは、全体的なスケジューリングを簡略化し、ならびに、一貫したデータフローを維持して、ハードウェアシステムにおいて配置することおよびルーティングすることをより容易にする。一実施形態では、シストリックアレイは、同時に実行するために相互接続された複数のＰＥを含む。たとえば、各ＰＥは、乗算アキュムレータ（ＭＡＣ）ブロックであり得る。しかしながら、ＰＥは、シストリックアレイによって実施されるプロセスに応じて変動することができる。たとえば、畳み込みを実施するために使用されるシストリックアレイはＭＡＣブロックを有し得、プーリング、ＲｅＬＵ、またはスケーリングを実施するために使用されるシストリックアレイは異なるＰＥを有する。多次元アレイにおいてＰＥを配列することによって、ＰＥの各々は、指数関数的に大きくなる帯域幅データ経路を受信することができる。ここで示されている２次元メッシュは、帯域幅と、配置およびルーティングの難しさとの間の妥協を与える。
【００３６】
図５は、一例による、ニューラルネットワーク中のシストリックアレイ２８０を示す。図５では、シストリックアレイ２８０は、畳み込みブロックとして構成される。一実施形態では、図４に示されている畳み込みユニット４１０は、図５に示されているシストリックアレイ２８０のうちの１つまたは複数から形成される。図５中の他のブロック、すなわち、最大プーリングユニット４１５、ＲｅＬＵ４２５、およびスケーリングユニット４３５は、同じシストリックアレイ２８０または異なるシストリックアレイを使用して形成され得る。
【００３７】
図５では、２次元シストリックアレイ２８０は、４×４行列を形成するために相互接続された複数のＰＥを含む。一実施形態では、スケジューラは、ユーザまたは設計者によって与えられたソフトウェアコードを使用してシストリックアレイ２８０を形成する。この例では、シストリックアレイ２８０は、ｆｏｒループ（および、ＨＬＳコンパイラの場合、随意のアンロールプラグマ（ｕｎｒｏｌｌ  ｐｒａｇｍａ））から導出され得、それは、Ａ×Ｂの乗算をＮ回実施する。スケジューラは、次いで、図５に示されているシストリックアレイ２８０を生成し、それは、Ａ入力およびＢ入力から形成された行列の行列乗算を実施することを含む。
【００３８】
この例では、４つの上ＰＥ、すなわち、ＰＥ００、０１、０２、および０３は、Ｂオペランド行列からデータを受信し、４つの最左ＰＥ、すなわち、ＰＥ００、１０、２０、および３０は、Ａオペランド行列からデータを受信する。一実施形態では、スケジューラは、各個々のＰＥが他のＰＥと同時にその関数を実施するようにＰＥを同期させる同期信号を生成する。一実施形態では、ＰＥは、各クロックサイクル中に入力を受信し、各クロックサイクル中に出力を与える。ＰＥは、受信されたデータを処理するために１つのクロックサイクルを必要とするか、または、受信されたデータを処理するために複数のクロックサイクルを使用し得る。いずれの場合も、ＰＥは、各クロックサイクル中に、受信されたデータに対して何らかの動作が実施されているようにスケジュールされ得る。
【００３９】
一実施形態では、アレイ２８０中のＰＥは、バッファを使用してデータを交換する。たとえば、ＦＩＦＯが、ＰＥが矢印によって示されているようにデータを交換するロケーションの各々に配設され得る。その上、ＦＩＦＯは、レイテンシを最小限に抑えるように平衡化されたデータフローチャネルの一部であり得る。一実施形態では、ＰＥは、ソフトウェア定義ストリームクラスとして表現される。
【００４０】
図５に示されているように、スケジューラは、スケジューラが並列化されたシストリックアレイ２８０に変換することができるシストリックアレイを定義するソフトウェアコード（たとえば、上記で説明された「ｆｏｒループ」）を受信することができる。たとえば、ユーザによって与えられたソフトウェア定義は、単一のＰＥまたはコアを含む表現を含むことができ、スケジューラは、それをアンパックして、図５に示されているＰＥのシストリックアレイ２８０またはメッシュにする。
【００４１】
図４に戻ると、ブロック３１５において、コンパイラは、高レベルコードをＲＴＬコードにコンパイルし、ＲＴＬコードは、ニューラルネットワークのパイプラインのための静的スケジュールを提供する。一実施形態では、コンパイラは、ＲＴＬコードを生成するために、ブロック３０５において受信されたモデルとブロック３１０において受信されたシストリックアレイとに対応するソースコードを使用する。たとえば、コンパイラは、全体としてニューラルネットワーク全体をスケジュールすることを試みるのではなく、モデルまたは層設計において個々のブロックをスケジュールすることができる。図４を参照すると、コンパイラは、スケジューリング処理を簡略化し、スケジューリングが収束する可能性を増加させるために、畳み込みユニット４１０と、最大プーリングユニット４１５と、ＲｅＬＵ４２５と、スケーリングユニット４３５とを別々にスケジュールすることができる。すなわち、個々のブロックをスケジュールすることによって、コンパイラは、ブロックを形成するハードウェアをスケジュールし、次いで、スケジューリングプロセスの上位レベルを実施するときにブロック間でデータを共有するためのデータフローチャネルを生成することができる。
【００４２】
上位レベルにおける個々のブロックをスケジュールするとき、コンパイラは、ブロックを１つまたは複数のシストリックアレイに分割することができる。すなわち、シストリックアレイはスケジューリングの中間レベルを表し、スケジューリングの中間レベルは、上位レベルにおけるブロック、すなわち、アーキテクチャ記述４００における関数ブロック（ｆｕｎｃｔｉｏｎａｌ  ｂｌｏｃｋ）をさらに再分割する。一実施形態では、シストリックアレイは、（複数の乗算を実施することに依拠する畳み込みなどの）関数ブロック中で同一のプロセスが実施されているときに使用される。言い換えれば、畳み込みは同じＰＥ（たとえば、同じＭＡＣブロック）を使用して実施され得るので、これらのＰＥは、並列に動作する多次元シストリックアレイ２８０に配列され得る。対照的に、一実施形態では、上位レベルにおけるブロック中での異なるプロセスは、データフローチャネルと接続され、シストリックアレイまたはメッシュを形成することなしにスケジューリングの下位レベル中にスケジュールされる。
【００４３】
スケジューリングの下位レベル中に、コンパイラは、スケジュールの上位レベルおよび中間レベルにおいてプロセスおよび関数を形成するハードウェアブロックをスケジュールする。たとえば、図４に示されているアーキテクチャ設計中のブロックと、シストリックアレイとを形成するＰＥは、ハードウェア要素に分割され得、ハードウェア要素は、次いで、コンパイラによってスケジュールされる。一実施形態では、スケジューラは、ハードウェア要素が入力オペランドを受信し、クロックサイクルごとに出力を作り出すように、これらの要素の動作をパイプライン化することができる。スケジューリングを複数のレベルに再分割することによって、コンパイラおよびスケジューラは、異なるブロック、ソフトウェア機能／方法、および処理要素が同時に動作するようにハードウェアシステムを構成するハードウェアレベルコード（たとえば、ＲＴＬコード）を生成することができる。
【００４４】
図６は、一例による、デジタル信号処理ブロック中のパイプライン化ＰＥ６００を示す。この実施形態では、ＰＥ６００は、畳み込みを実施するためのＭＡＣブロック６０５であるが、任意の１つまたは複数のハードウェア要素であり得る。図６では、ＭＡＣブロック６０５は、単一のクロックサイクル中で実施され得ない浮動小数点動作（ｆｌｏａｔｉｎｇ  ｐｏｉｎｔ  ｏｐｅｒａｔｉｏｎ）を実施する。したがって、ＨＬＳコンパイラが、この浮動小数点動作を、各々１つのクロックサイクル中で実施され得るサブ動作に分割することができる。ここで、浮動小数点動作は、最初に読取り動作６１０を実施し、後続の乗算動作６１５を実施し、後続の加算動作（ａｄｄｉｔｉｏｎ  ｏｐｅｒａｔｉｏｎ）６２０と、書込み動作６２５とを実施することによって、４つのクロックサイクル中で実施され得る。
【００４５】
第１のクロックサイクルにおいて、読取り動作６１０は、オペランドＡおよびＢを取り出す。第２のクロックサイクルにおいて、乗算動作（ｍｕｌｔｉｐｌｙ  ｏｐｅｒａｔｉｏｎ）６１５は、ＡオペランドにＢオペランドを乗算する。第３のクロックサイクルにおいて、加算動作６２０は、この乗算の結果を前の乗算に加算し、累算動作として働く。第４のクロックサイクルにおいて、書込み動作は、加算動作の結果（たとえば、出力Ｃ）をメモリに書き込む。このようにして、ＭＡＣブロック６０５の全体的な動作は、各クロックサイクル中に完了され得る複数のステップに分割され得る。
【００４６】
一実施形態では、動作６１０、６１５、６２０、および６２５を並列にまたは同時に実施するために、それらの動作は、ＦＰＧＡ中の異なるハードウェア要素によって実施される。すなわち、読取り動作６１０は第１のメモリインターフェースハードウェア要素によって実施され得、書込み動作６２５は第２のメモリインターフェースハードウェア要素によって実施される。これらのハードウェア要素が、別個のメモリから読み取り、別個のメモリに書き込むことを試みている（すなわち、ＦＰＧＡ中の異なるブロックＲＡＭ（ＢＲＡＭ）要素が、オペランドＡおよびＢならびに出力Ｃを記憶するように割り当てられる）限り、読取り動作６１０と書込み動作６２５とは、同時に実施され得る。同様に、乗算動作６１５と加算動作６２０とが同時に実施され得るように、乗算動作６１５は第１のＤＳＰブロックによって実施され得、加算動作６２０は第２のＤＳＰブロックによって実施される。
【００４７】
図６は、７つのクロックサイクル（すなわち、サイクル１、２、３、４、５、６、および７）中のＰＥ６００のステータスを示し、ＰＥ６００は、その７つのクロックサイクル中に、画像データ（すなわち、画像データ１０５Ａ〜Ｄ）の４つのチャンクまたはパケットを処理する。サイクル１中に、画像データ１０５Ａに対応するオペランドＡおよびＢがＦＰＧＡ中のメモリから読み取られる。サイクル２中に、画像データ１０５Ｂに対応するオペランドＡおよびＢがメモリから読み取られると同時に、画像データ１０５Ａに対応するオペランドＡおよびＢが乗算される。サイクル３中に、画像データ１０５Ｂに対応するオペランドＡおよびＢが乗算され、画像データ１０５Ｃに対応するオペランドＡおよびＢがメモリから読み取られると同時に、画像データ１０５Ａに対して乗算を実施した結果が加算動作６２０によって加算される。サイクル４によって、ＰＥ６００を構築するハードウェア要素のすべてが同時に実行する。この例では、サイクル４において、画像データ１０５Ｂに対して乗算を実施した結果が加算され、画像データ１０５Ｃに対応するオペランドＡおよびＢが乗算され、画像データ１０５Ｄに対応するオペランドＡおよびＢがメモリから読み取られる間に、画像データ１０５Ａについて加算を実施した結果がＦＰＧＡのメモリに書き込まれる。追加の画像データが利用可能である（すなわち、ＰＥ６００によって処理される必要があるさらなる画像データがニューラルネットワークパイプライン中にある）限り、ハードウェア要素は同時に実行する。言い換えれば、コンパイラは、ハードウェア要素が同時に動作するように、ＦＰＧＡ中のハードウェア要素を使用してハードウェア要素をパイプラインにスケジュールすることができる。コンパイラは、スケジュールの上位レベル、中間レベル、および下位レベルにおいてすべてのハードウェア要素について同様のスケジューリングプロセスを実施することができるので、ニューラルネットワークパイプラインは、全体として、ハードウェア要素が同時に動作するようにスケジュールされ得る。
【００４８】
方法３００に戻ると、ブロック３２０において、コンピューティングデバイスは、ブロック３１５において生成されたＲＴＬコードに従って、ＦＰＧＡ中でプログラマブルハードウェア論理を構成する。すなわち、コンピューティングデバイスは、図６に示されているＰＥを実施するために選択されたハードウェア要素が同時に動作することができるようにＦＰＧＡを構成する。その上、ＲＴＬコードは、バッファを含み得るハードウェア要素間のデータフローチャネルを定義することができる。ＲＴＬが詳細に言及されているが、コンパイラ（または合成ツール）は、ＧＰＵまたはＡＳＩＣなどのハードウェアシステムにおいてニューラルネットワークを実行するときに静的スケジュールを提供する、任意の種類のハードウェアレベル設計を生成し得る。
【００４９】
図７は、一例による、ニューラルネットワークを実装するためのシステム７００を示すブロック図である。システム７００は、コンピュータシステム７０２と、１つまたは複数のコンピュータシステム７０８とを含む。コンピュータシステム７０２は、１つまたは複数の設計ツール７０４を与えるソフトウェアを実行するように構成された従来のコンピューティング構成要素を含む。各コンピュータシステム７０８は、１つまたは複数のニューラルネットワーク７１０を実行する。（１つまたは複数の）ニューラルネットワーク７１０は、アプリケーション７１２と、アクセラレーションライブラリ７１４と、１つまたは複数のハードウェアアクセラレータ７１６とを使用して実装される。
【００５０】
一例では、（１つまたは複数の）ハードウェアアクセラレータ７１６は、ＦＰＧＡなどのプログラマブルＩＣを含む。アクセラレーションライブラリ７１４は、（１つまたは複数の）ハードウェアアクセラレータ７１６とインターフェースするためのアプリケーションプログラミングインターフェース（ＡＰＩ）を与える。アクセラレーションライブラリ７１４はまた、ニューラルネットワーク層および他のタイプのニューラルネットワーク構造のあらかじめ定義されたおよび最適化された実装形態を含む、ニューラルネットワーク機能を与えるライブラリを含むことができる。したがって、（１つまたは複数の）ニューラルネットワーク７１０は、（１つまたは複数の）ハードウェアアクセラレータ７１６において実装されるハードウェア部分、ならびに、アクセラレーションライブラリ７１４において実装されるソフトウェア部分の両方を含むことができる。アプリケーション７１２は、（１つまたは複数の）ニューラルネットワーク７１０を実装するように（１つまたは複数の）ハードウェアアクセラレータ７１６をプログラムし、制御するためにアクセラレーションライブラリ７１４のＡＰＩを起動する。
【００５１】
設計者は、（１つまたは複数の）ニューラルネットワーク７１０を定義するために（１つまたは複数の）設計ツール７０４と対話する。（１つまたは複数の）設計ツール７０４は、（１つまたは複数の）ハードウェアアクセラレータ７１６をプログラムするためのファイル（たとえば、ＦＰＧＡのための構成ビットストリーム）と、アクセラレーションライブラリ７１４を与えるファイルと、アプリケーション７１２を与えるファイルとを生成することができる。設計者は、レジスタ転送言語（ＲＴＬ）を使用して、あるいは、Ｃ、Ｃ＋＋、ＯｐｅｎＣＬなどのプログラミング言語、またはＲＴＬと（１つまたは複数の）プログラマブル言語との組合せを使用して、（１つまたは複数の）ニューラルネットワーク７１０のハードウェア部分を定義することができる。ユーザは、Ｃ、Ｃ＋＋、ＯｐｅｎＣＬなどのプログラミング言語を使用して、（１つまたは複数の）ニューラルネットワーク７１０のソフトウェア部分を定義することができる。（１つまたは複数の）設計ツール７０４は、（１つまたは複数の）ハードウェアアクセラレータ７１６をプログラムするためのファイルと、アクセラレーションライブラリ７１４のためのライブラリファイルとを生成するために、ソフトウェア定義されたニューラルネットワークをコンパイルする。設計者は、（１つまたは複数の）ニューラルネットワーク７１０のハードウェア部分およびソフトウェア部分を開発するのを支援するために、クラスライブラリ、テンプレートライブラリなどを与えるライブラリ７０６を活用することができる。
【００５２】
ユーザは、プログラミング言語（たとえば、Ｃ、Ｃ＋＋、Ｐｙｔｈｏｎなど）を使用してアプリケーション７１２を定義することができる。ユーザは、Ｃａｆｆｅ、ＴｅｎｓｏｒＦｌｏｗ、ＭＸＮｅｔなど、ニューラルネットワークフレームワークおよびライブラリを活用することができる。
【００５３】
図８は、一例による、コンピューティングシステム７０８を示すブロック図である。コンピューティングシステム７０８は、ハードウェア８０４と、ハードウェア８０４上で実行するソフトウェア８０６とを含む。ハードウェア８０４は、処理システム８１０と、システムメモリ８１６と、ストレージデバイス（「ストレージ８１８」）と、ハードウェアアクセラレータ７１６とを含む。ソフトウェア８０６は、オペレーティングシステム（ＯＳ）８４４と、アクセラレーションライブラリ７１４と、アプリケーション７１２とを含む。
【００５４】
処理システム８１０は、マイクロプロセッサ８１２と、サポート回路８１４と、周辺バス８１５とを含む。マイクロプロセッサ８１２は、ｘ８６ベースプロセッサ、ＡＲＭ（登録商標）ベースプロセッサなど、任意のタイプの汎用中央処理ユニット（ＣＰＵ）であり得る。マイクロプロセッサ８１２は、１つまたは複数のコアと、関連する回路要素（たとえば、キャッシュメモリ、メモリ管理ユニット（ＭＭＵ）、割込みコントローラなど）とを含むことができる。マイクロプロセッサ８１２は、本明細書で説明される１つまたは複数の動作を実施するプログラムコードを実行するように構成され、それらのプログラムコードは、システムメモリ８１６および／またはストレージ８１８に記憶され得る。サポート回路８１４は、マイクロプロセッサ８１２と協働して、マイクロプロセッサ８１２、システムメモリ８１６、ストレージ８１８、ハードウェアアクセラレータ７１６、または任意の他の周辺デバイスの間のデータフローを管理する、様々なデバイスを含む。たとえば、サポート回路８１４は、チップセット（たとえば、ノースブリッジ、サウスブリッジ、プラットフォームホストコントローラなど）、電圧調節器、ファームウェア（たとえば、ＢＩＯＳ）などを含むことができる。サポート回路８１４は、マイクロプロセッサ８１２と周辺バス８１５との間のデータフローを管理し、そこにハードウェアアクセラレータ７１６などの様々な周辺機器が接続される。いくつかの例では、マイクロプロセッサ８１２は、チップセット（たとえば、ノースブリッジ、サウスブリッジなど）の機能性の全部または実質的部分を吸収する、システムインパッケージ（ＳｉＰ）、システムオンチップ（ＳｏＣ）などであり得る。周辺バスは、周辺構成要素相互接続エクスプレス（ＰＣＩｅ）など、拡張バス規格を実装することができる。本例では、処理システム８１０は、ハードウェアアクセラレータ７１６とは別個に示されている。以下でさらに説明される他の例では、処理システム８１０とハードウェアアクセラレータ７１６とは、システムオンチップ（ＳｏＣ）を使用して同じＩＣ上に実装され得る。
【００５５】
システムメモリ８１６は、実行可能な命令およびデータなどの情報が記憶され、取り出されることを可能にするデバイスである。システムメモリ８１６は、たとえば、ダブルデータレート（ＤＤＲ）ダイナミックＲＡＭ（ＤＲＡＭ）など、１つまたは複数のランダムアクセスメモリ（ＲＡＭ）モジュールを含むことができる。ストレージデバイス８１８は、ローカルストレージデバイス（たとえば、１つまたは複数のハードディスク、フラッシュメモリモジュール、ソリッドステートディスク、および光ディスク）、および／またはコンピューティングシステム７０８が１つまたは複数のネットワークデータストレージシステムと通信することを可能にするストレージインターフェースを含む。ハードウェア８０４は、グラフィックスカード、ユニバーサルシリアルバス（ＵＳＢ）インターフェースなど、コンピューティングシステムの様々な他の従来のデバイスおよび周辺機器を含むことができる。
【００５６】
ハードウェアアクセラレータ７１６は、プログラマブルＩＣ８２８と、不揮発性メモリ８２４と、ＲＡＭ８２６とを含む。プログラマブルＩＣ８２８は、ＦＰＧＡなど、またはＦＰＧＡを有するＳｏＣなどであり得る。ＮＶＭ８２４は、フラッシュメモリなど、任意のタイプの不揮発性メモリを含むことができる。ＲＡＭ８２６は、ＤＤＲ  ＤＲＡＭなどを含むことができる。プログラマブルＩＣ８２８は、ＮＶＭ８２４およびＲＡＭ８２６に連結される。プログラマブルＩＣ８２８は、処理システム８１０の周辺バス８１５にも連結される。
【００５７】
ＯＳ８４４は、Ｌｉｎｕｘ（登録商標）、Ｍｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ（登録商標）、Ｍａｃ  ＯＳ（登録商標）など、当技術分野において知られている任意のコモディティオペレーティングシステムであり得る。アクセラレーションライブラリ７１４は、ハードウェアアクセラレータ７１６のコマンドおよび制御のためのＡＰＩを与えるドライバおよびライブラリを含む。アプリケーション７１２は、（１つまたは複数の）ニューラルネットワークを実装するためにアクセラレーションライブラリ７１４のＡＰＩを起動する、マイクロプロセッサ８１２上で実行するソフトウェアを含む。
【００５８】
動作中、プログラマブルＩＣ８２８は、アクセラレーション回路８３０（たとえば、ニューラルネットワークアクセラレーション回路またはカーネルアクセラレーション回路）で構成される。アクセラレーション回路８３０は、概して、ベースプラットフォーム８３０Ａとカーネル８３０Ｂとを含む。たとえば、アクセラレーション回路８３０は、静的領域８３４とプログラマブル領域８３６とを使用して実装され得る。静的領域８３４は、周辺バス８１５と、ＮＶＭ８２４と、ＲＡＭ８２６とにインターフェースを与えるためのサポート回路８４０を含む。プログラマブル領域８３６は、１つまたは複数のカーネル回路（「（１つまたは複数の）カーネル８３８」）を含むことができる。ベースプラットフォーム８３０Ａは静的領域８３４を使用して実装され、カーネル８３０Ｂはプログラマブル領域８３６を使用して実装される。別の例では、ベースプラットフォーム８３０Ａはまた、プログラマブル領域８３６の一部分を使用して実装され得る。したがって、いくつかの例では、プログラマブル領域８３６は、いくつかのインターフェース回路をも含む。いくつかの例では、アクセラレーション回路８３０は、それらの各々が個々に（１つまたは複数の）カーネル８３８で構成され得る、２つ以上のプログラマブル領域８３６を含むことができる。
【００５９】
静的領域８３４は、静的領域８３４の回路要素がプログラマブル領域８３６の再構成にわたって不変のままであるという点で「静的」であり、上記で説明された静的スケジューリングとは異なる。一例では、サポート回路８４０は、ＰＣＩｅエンドポイント回路、ダイレクトメモリアクセス（ＤＭＡ）コントローラ、相互接続、メモリコントローラ、メモリインターフェース回路（たとえば、ＤＤＲインターフェース）、（部分再構成をサポートするための）デカップラ回路、フラッシュプログラマー、デバッグ回路などを含む。いくつかの例では、プログラマブル領域８３６は、サポート回路８４０のいずれをも含まない。他の例では、いくつかのサポート回路は、プログラマブル領域８３６において実装される。そのような場合、プログラマブル領域８３６は「拡張されたプログラマブル領域」と呼ばれることがある。いずれの場合も、一例では、ＰＣＩｅ回路およびＤＭＡ回路など、いくつかのサポート回路８４０は、常に、静的領域８３４中に存在する。
【００６０】
図９は、一例による、アクセラレーション回路８３０を示すブロック図である。アクセラレーション回路８３０は、サポート回路８４０とカーネル８３８とを含む。本例では、サポート回路８４０は、ＰＣＩｅエンドポイント回路（「ＰＣＩｅエンドポイント９０２」）と、ＰＣＩｅ  ＤＭＡコントローラ９０４と、相互接続回路（「相互接続９０６」）と、メモリコントローラ９１０と、メモリインターフェース９１２とを含む。サポート回路８４０は、明快のために省略される他の回路（たとえば、デカップラ回路、デバッグ回路など）を含むことができる。ＰＣＩｅエンドポイント９０２は、周辺バス８１５への物理インターフェースを与える。ＰＣＩｅ  ＤＭＡコントローラ９０４は、ＲＡＭ８２６とカーネル８３８とへのＤＭＡ動作を容易にする。相互接続９０６は、ＰＣＩｅ  ＤＭＡコントローラ９０４をメモリコントローラ９１０とカーネル８３８とに連結する。メモリコントローラ９１０はメモリインターフェース９１２に連結される。メモリインターフェース９１２はＲＡＭ８２６に連結される。
【００６１】
動作中、アクセラレーションライブラリ７１４は、ＰＣＩｅ  ＤＭＡコントローラ９０４を通してＲＡＭ８２６に直接アクセスすることができる。アクセラレーションライブラリ７１４はまた、ＰＣＩｅ  ＤＭＡコントローラ９０４を通してカーネル８３８にアクセスすることができる。カーネル８３８は、メモリコントローラ９１０を通してＲＡＭ８２６にアクセスすることができる。データは、システムメモリ８１６とＲＡＭ８２６との間のＤＭＡ動作を使用して、ソフトウェア８０６とカーネル８３８との間で交換され得る。
【００６２】
本例では、カーネル８３８は、相互接続９０６と通信するためにインターフェース９３０、９３１、および９３２を使用する。特に、これらのインターフェースは、第１の読取りインターフェース９３０と、第２の読取りインターフェース９３１と、読取り／書込みインターフェース９３２とを含み得る。たとえば、読取りインターフェース９３０は、カーネル８３８を制御するための制御インターフェースとして使用され得る。読取りインターフェース９３１は、メモリインターフェース９１２のうちの第１のメモリインターフェースを通してＲＡＭ８２６から読み取るために使用され得る。読取り／書込みインターフェース９３２は、メモリインターフェース９１２のうちの第２のメモリインターフェースを通してＲＡＭ８２６からの読取りおよび書込みを行うために使用され得る。
【００６３】
カーネル８３８は、相互接続インターフェース９４０と、制御論理９４２と、処理回路９４１とを含む。処理回路９４１は、ＩＭ２ＣＯＬ回路（「ＩＭ２ＣＯＬ９４４」）と、読取り制御回路（「読取り制御９４６」）と、マルチプレクサ９５６と、先入れ先出し回路（「ＦＩＦＯ９５８」）と、算出アレイ９６２と、スケーラ回路（ＲｅＬＵ活性化回路などの「スケーラ９６４」）と、最大プール回路（「最大プール９６６」）と、マルチプレクサ９６８と、ＦＩＦＯ９５４と、書込み制御回路（「書込み制御９５２」）と、キャッシュ９４８と、読取り制御回路（「読取り制御９５０」）と、ＦＩＦＯ９６０とを含む。相互接続インターフェース９４０は、インターフェース９３０、９３１、および９３２と、制御論理９４２と、処理回路９４１とに連結される。相互接続インターフェース９４０は、制御論理９４２とインターフェース９３０との間の通信、ならびに処理回路９４１とインターフェース９３１および９３２との間の通信を容易にするための、スイッチ、クロック変換器などを含むことができる。
【００６４】
本例では、相互接続インターフェース９４０は、ＩＭ２ＣＯＬ回路９４４の入力と、読取り制御回路９４６の入力と、キャッシュ９４８の入力と、書込み制御回路９５２の入力とに連結される。ＩＭ２ＣＯＬ回路９４４の出力と、読取り制御回路９４６の出力とが、マルチプレクサ９５６の入力に連結される。マルチプレクサ９５６の出力がＦＩＦＯ９５８の入力に連結される。ＦＩＦＯ９５８の出力が算出アレイ９６２の第１の入力に連結される。キャッシュ９４８の出力が読取り制御回路９５０の入力に連結される。読取り制御回路９５０の出力がＦＩＦＯ９６０の入力に連結される。ＦＩＦＯ９６０の出力が算出アレイ９６２の第２の入力に連結される。算出アレイ９６２の出力がスケーラ９６４の入力に連結される。スケーラ９６４の出力が、最大プール回路９６６の入力とマルチプレクサ９６８の入力とに連結される。最大プール回路９６６の出力がマルチプレクサ９６８の別の入力に連結される。マルチプレクサ９６８の出力がＦＩＦＯ９５４の入力に連結される。ＦＩＦＯ９５４の出力が書込み制御回路９５２に連結される。
【００６５】
動作中、算出アレイ９６２は、ニューラルネットワークを実装するための行列乗算動作を実施する。算出アレイ９６２の入力は、ＦＩＦＯ９５８から入力活性化行列を受信し、ＦＩＦＯ９６０から重み行列を受信する。入力活性化行列は、読取り制御回路９４６を使用してＲＡＭ８２６から直接読み取られ得る。代替的に、入力活性化は、ＲＡＭ８２６から読み取られ、算出アレイ９６２への入力のためにＩＭ２ＣＯＬ回路９４４によって処理され得る。ＩＭ２ＣＯＬ回路９４４の実施形態が以下で説明される。重み行列は、読取り制御回路９５０によってＲＡＭ８２６から読み取られ、キャッシュ９４８中にキャッシュされ得る。スケーラ９６４は、算出アレイ９６２の出力をスケーリングすることができる。最大プール回路９６６は、算出アレイ９６２のスケーリングされた出力に対する最大プーリング関数を実装することができる。一例では、最大プール回路９６６は、ＣＬＢまたは他の構成可能な論理を使用して実装される。最大プール回路９６６の出力またはスケーラ９６４の出力のいずれかがＦＩＦＯ９５４に記憶され得る。書込み制御回路９５２は、ＦＩＦＯ中のデータをＲＡＭ８２６に書き込む。制御論理９４２は、ＩＭ２ＣＯＬ回路９４４、読取り制御回路９４６、マルチプレクサ９５６および９６８、読取り制御回路９５０、ならびにスケーラ９６４、最大プール回路９６６、ならびに書込み制御回路９５２など、処理回路９４１中の様々な回路を制御する。
【００６６】
図１０は、一例による、プログラマブルＩＣ８２８を示すブロック図である。プログラマブルＩＣ８２８は、プログラマブル論理３と、構成論理２５と、構成メモリ２６とを含む。プログラマブルＩＣ８２８は、ＮＶＭ８２４、ＲＡＭ８２６、および他の回路２９など、外部回路に連結され得る。プログラマブル論理３は、論理セル３０と、サポート回路３１と、プログラマブル相互接続３２とを含む。論理セル３０は、複数の入力の一般的な論理関数を実装するように構成され得る回路を含む。サポート回路３１は、トランシーバ、入出力ブロック、デジタル信号プロセッサ、メモリなどの専用の回路を含む。論理セルとサポート回路３１とは、プログラマブル相互接続３２を使用して相互接続され得る。論理セル３０をプログラムするための情報と、サポート回路３１のパラメータを設定するための情報と、プログラマブル相互接続３２をプログラムするための情報とが、構成論理２５によって構成メモリ２６に記憶される。構成論理２５は、不揮発性メモリ８２４または任意の他のソース（たとえば、ＤＲＡＭ２８または他の回路２９）から構成データを取得することができる。いくつかの例では、プログラマブルＩＣ８２８は処理システム２を含む。処理システム２は、（１つまたは複数の）マイクロプロセッサ、メモリ、サポート回路、ＩＯ回路などを含むことができる。たとえば、処理システム２は、処理システム８１０と同様の回路を含むことができる。いくつかの例では、処理システム２は、処理システム８１０の代わりに使用され得る。そのような場合、コンピューティングシステム７０８全体がプログラマブルＩＣ８２８を使用して実装され得、ソフトウェア８０６は処理システム２上で実行する。
【００６７】
図１１は、トランシーバ３７、ＣＬＢ３３、ＢＲＡＭ３４、入出力ブロック（「ＩＯＢ」）３６、構成およびクロッキング論理（「ＣＯＮＦＩＧ／ＣＬＯＣＫＳ」）４２、ＤＳＰブロック３５、特殊な入出力ブロック（「Ｉ／Ｏ」）４１（たとえば、構成ポートおよびクロックポート）、ならびにデジタルクロックマネージャ、アナログデジタル変換器、システム監視論理などの他のプログラマブル論理３９を含む、多数の異なるプログラマブルタイルを含むプログラマブルＩＣ８２８のＦＰＧＡ実装形態を示す。ＦＰＧＡはまた、ＰＣＩｅインターフェース４０、アナログデジタル変換器（ＡＤＣ）３８などを含むことができる。
【００６８】
いくつかのＦＰＧＡでは、各プログラマブルタイルは、図１１の上部に含まれる例によって示されているように、同じタイル内のプログラマブル論理要素の入力および出力端子４８への接続を有する少なくとも１つのプログラマブル相互接続要素（「ＩＮＴ」）４３を含むことができる。各プログラマブル相互接続要素４３は、同じタイルまたは（１つまたは複数の）他のタイル中の（１つまたは複数の）隣接するプログラマブル相互接続要素の相互接続セグメント４９への接続をも含むことができる。各プログラマブル相互接続要素４３は、論理ブロック（図示せず）間の一般的なルーティングリソースの相互接続セグメント５０への接続をも含むことができる。一般的なルーティングリソースは、相互接続セグメント（たとえば、相互接続セグメント５０）のトラックを備える論理ブロック（図示せず）と、相互接続セグメントを接続するためのスイッチブロック（図示せず）との間のルーティングチャネルを含むことができる。一般的なルーティングリソースの相互接続セグメント（たとえば、相互接続セグメント５０）は、１つまたは複数の論理ブロックにわたることができる。一般的なルーティングリソースとともにとられるプログラマブル相互接続要素４３は、示されているＦＰＧＡのためのプログラマブル相互接続構造（「プログラマブル相互接続」）を実装する。
【００６９】
例示的な一実装形態では、ＣＬＢ３３は、ユーザ論理を実装するようにプログラムされ得る構成可能論理要素（「ＣＬＥ」）４４と、単一のプログラマブル相互接続要素（「ＩＮＴ」）４３とを含むことができる。ＢＲＡＭ３４は、１つまたは複数のプログラマブル相互接続要素に加えてＢＲＡＭ論理要素（「ＢＲＬ」）４５を含むことができる。典型的には、タイル中に含まれる相互接続要素の数は、タイルの高さに依存する。描かれている例では、ＢＲＡＭタイルは、５つのＣＬＢと同じ高さを有するが、他の数（たとえば、４つ）も使用され得る。ＤＳＰタイル３５は、適切な数のプログラマブル相互接続要素に加えてＤＳＰ論理要素（「ＤＳＰＬ」）４６を含むことができる。ＩＯＢ３６は、たとえば、プログラマブル相互接続要素４３の１つのインスタンスに加えて入出力論理要素（「ＩＯＬ」）４７の２つのインスタンスを含むことができる。当業者に明らかになるように、たとえばＩ／Ｏ論理要素４７に接続される実際のＩ／Ｏパッドは、典型的に、入出力論理要素４７のエリアに制限されない。
【００７０】
描かれている例では、（図１１に示されている）ダイの中心の近くの水平方向のエリアが、構成、クロック、および他の制御論理のために使用される。この水平方向のエリアまたは列から延びる垂直方向の列５１が、ＦＰＧＡの幅にわたってクロックおよび構成信号を分散させるために使用される。
【００７１】
図１１に示されているアーキテクチャを利用するいくつかのＦＰＧＡは、ＦＰＧＡの大部分を構築する規則的な列状構造を損なう追加の論理ブロックを含む。追加の論理ブロックは、プログラマブルブロックおよび／または専用の論理であり得る。
【００７２】
図１１は、例示的なＦＰＧＡアーキテクチャを示すことを意図されているにすぎないことに留意されたい。たとえば、１つの行中の論理ブロックの数、行の相対幅、行の数および順序、行中に含まれる論理ブロックのタイプ、論理ブロックの相対サイズ、および図１１の上部に含まれる相互接続／論理実装形態は、例にすぎない。たとえば、実際のＦＰＧＡでは、ユーザ論理の効率的な実装を容易にするために、ＣＬＢが現れるところならどこでも、ＣＬＢの２つ以上の隣接する行が典型的に含まれるが、隣接するＣＬＢ行の数は、ＦＰＧＡの全体的なサイズによって変動する。
【００７３】
本発明の様々な実施形態の説明は、例示の目的で提示されており、網羅的なものでも、開示される実施形態に限定されるものでもない。説明される実施形態の範囲および趣旨から逸脱することなく、多くの修正および変形が当業者に明らかになるであろう。本明細書で使用される用語は、実施形態の原理、実際的適用例、または市場で見られる技術に対する技術的改善を最も良く説明するために、あるいは、他の当業者が本明細書で開示される実施形態を理解することを可能にするために選定された。
【００７４】
上記では、本開示において提示される実施形態への言及が行われた。しかしながら、本開示の範囲は、特定の説明される実施形態に限定されない。代わりに、本明細書で説明される特徴および要素の任意の組合せが、異なる実施形態に関係するか否かにかかわらず、企図された実施形態を実装および実施するために企図される。さらに、本明細書で開示される実施形態は、他の可能な解決策または従来技術に勝る利点を達成し得るが、特定の利点が所与の実施形態によって達成されるか否かは、本開示の範囲を限定するものではない。したがって、本明細書で説明される態様、特徴、実施形態および利点は、例示的なものにすぎず、（１つまたは複数の）請求項において明示的に具陳されている場合を除いて、添付の特許請求の範囲の要素または限定と見なされない。同様に、「本発明」への言及は、本明細書で開示される発明の主題の一般化と解釈されるものではなく、（１つまたは複数の）請求項において明示的に具陳されている場合を除いて、添付の特許請求の範囲の要素または限定であると見なされるものではない。
【００７５】
本明細書で説明される態様は、完全にハードウェアの実施形態、（ファームウェア、常駐ソフトウェア、マイクロコードなどを含む）完全にソフトウェアの実施形態、またはソフトウェア態様とハードウェア態様とを組み合わせる実施形態の形態をとり得、これらはすべて、本明細書では概して「モジュール」または「システム」と呼ばれることがある。
【００７６】
本発明は、システム、方法、および／またはコンピュータプログラム製品であり得る。コンピュータプログラム製品は、プロセッサに本発明の態様を行わせるためのコンピュータ可読プログラム命令をその上に有する（１つまたは複数の）コンピュータ可読記憶媒体を含み得る。
【００７７】
コンピュータ可読記憶媒体は、命令実行デバイスによる使用のための命令を保持および記憶することができる有形デバイスであり得る。コンピュータ可読記憶媒体は、たとえば、限定はしないが、電子ストレージデバイス、磁気ストレージデバイス、光ストレージデバイス、電磁ストレージデバイス、半導体ストレージデバイス、または上記の任意の好適な組合せであり得る。コンピュータ可読記憶媒体のより具体的な例の非網羅的なリストは、ポータブルコンピュータディスケット、ハードディスク、ランダムアクセスメモリ（ＲＡＭ）、読取り専用メモリ（ＲＯＭ）、消去可能プログラマブル読取り専用メモリ（ＥＰＲＯＭまたはフラッシュメモリ）、スタティックランダムアクセスメモリ（ＳＲＡＭ）、ポータブルコンパクトディスク読取り専用メモリ（ＣＤ−ＲＯＭ）、デジタル多用途ディスク（ＤＶＤ）、メモリスティック、フロッピーディスク、パンチカードまたは命令が記録された溝における隆起構造など、機械的に符号化されたデバイス、および上記の任意の好適な組合せを含む。本明細書で使用されるコンピュータ可読記憶媒体は、電波または他の自由に伝搬する電磁波、導波路または他の伝送媒体中を伝搬する電磁波（たとえば、光ファイバーケーブルを通過する光パルス）、あるいはワイヤを通して送信される電気信号など、それ自体が一時的信号であると解釈されるべきではない。
【００７８】
本明細書で説明されるコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体からそれぞれのコンピューティング／処理デバイスに、あるいはネットワーク、たとえば、インターネット、ローカルエリアネットワーク、ワイドエリアネットワークおよび／またはワイヤレスネットワークを介して外部コンピュータまたは外部ストレージデバイスにダウンロードされ得る。ネットワークは、銅伝送ケーブル、光伝送ファイバー、ワイヤレス送信、ルータ、ファイアウォール、スイッチ、ゲートウェイコンピュータおよび／またはエッジサーバを備え得る。各コンピューティング／処理デバイス中のネットワークアダプタカードまたはネットワークインターフェースは、ネットワークからコンピュータ可読プログラム命令を受信し、そのコンピュータ可読プログラム命令を、それぞれのコンピューティング／処理デバイス内のコンピュータ可読記憶媒体に記憶するためにフォワーディングする。
【００７９】
本発明の動作を行うためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セットアーキテクチャ（ＩＳＡ）命令、機械命令、機械依存命令、マイクロコード、ファームウェア命令、状態設定データ、あるいは、Ｓｍａｌｌｔａｌｋ、Ｃ＋＋などのオブジェクト指向プログラミング言語、および「Ｃ」プログラミング言語または同様のプログラミング言語などの従来の手続き型プログラミング言語を含む１つまたは複数のプログラミング言語の任意の組合せで書き込まれたソースコードまたはオブジェクトコードのいずれかであり得る。コンピュータ可読プログラム命令は、完全にユーザのコンピュータ上で、部分的にユーザのコンピュータ上で、スタンドアロンソフトウェアパッケージとして、部分的にユーザのコンピュータ上でおよび部分的にリモートコンピュータ上で、あるいは完全にリモートコンピュータまたはサーバ上で実行し得る。後者のシナリオでは、リモートコンピュータは、ローカルエリアネットワーク（ＬＡＮ）またはワイドエリアネットワーク（ＷＡＮ）を含む任意のタイプのネットワークを通してユーザのコンピュータに接続され得るか、あるいは接続は、（たとえば、インターネットサービスプロバイダを使用してインターネットを通して）外部コンピュータに対して行われ得る。いくつかの実施形態では、たとえば、プログラマブル論理回路要素、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、またはプログラマブル論理アレイ（ＰＬＡ）を含む電子回路要素が、本発明の態様を実施するために、電子回路要素を個人化するためにコンピュータ可読プログラム命令の状態情報を利用することによって、コンピュータ可読プログラム命令を実行し得る。
【００８０】
本発明の態様が、本発明の実施形態による方法、装置（システム）、およびコンピュータプログラム製品のフローチャートの例示図および／またはブロック図を参照しながら本明細書で説明された。フローチャートの例示図および／またはブロック図の各ブロック、ならびにフローチャートの例示図および／またはブロック図中のブロックの組合せが、コンピュータ可読プログラム命令によって実装され得ることを理解されよう。
【００８１】
これらのコンピュータ可読プログラム命令は、汎用コンピュータ、専用コンピュータ、または機械を製造するための他のプログラマブルデータ処理装置のプロセッサに与えられ得、その結果、コンピュータまたは他のプログラマブルデータ処理装置のプロセッサを介して実行する命令は、フローチャートおよび／またはブロック図の１つまたは複数のブロックにおいて指定された関数／行為を実装するための手段を作成する。これらのコンピュータ可読プログラム命令はまた、コンピュータ、プログラマブルデータ処理装置、および／または他のデバイスに特定の様式で機能するように指示することができるコンピュータ可読記憶媒体に記憶され得、その結果、命令が記憶されたコンピュータ可読記憶媒体は、フローチャートおよび／またはブロック図の１つまたは複数のブロックにおいて指定された関数／行為の態様を実装する命令を含む製造品を備える。
【００８２】
コンピュータ可読プログラム命令はまた、コンピュータ実装プロセスを作り出すために、一連の動作ステップをコンピュータ、他のプログラマブルデータ処理装置または他のデバイス上で実施させるように、コンピュータ、他のプログラマブル装置、または他のデバイスにロードされ得、その結果、コンピュータ、他のプログラマブル装置、または他のデバイス上で実行する命令は、フローチャートおよび／またはブロック図の１つまたは複数のブロックにおいて指定された関数／行為を実装する。
【００８３】
図中のフローチャートおよびブロック図は、本発明の様々な実施形態によるシステム、方法、およびコンピュータプログラム製品の可能な実装形態のアーキテクチャ、機能性、および動作を示す。この点について、フローチャートまたはブロック図中の各ブロックは、（１つまたは複数の）指定された論理関数を実装するための１つまたは複数の実行可能な命令を備える、命令のモジュール、セグメント、または部分を表し得る。いくつかの代替実装形態では、ブロック中で言及される関数は、図中で言及される順序から外れて行われ得る。たとえば、関与する機能性に応じて、連続して示されている２つのブロックが、事実上、実質的に同時に実行され得るか、またはブロックが、時々、逆の順序で実行され得る。また、ブロック図および／またはフローチャートの例示図の各ブロック、ならびにブロック図および／またはフローチャートの例示図中のブロックの組合せが、指定された関数または行為を実施するかあるいは専用ハードウェアとコンピュータ命令との組合せを行う専用ハードウェアベースシステムによって実装され得ることに留意されたい。
【００８４】
非限定的な例のリスティングが以下で提供される。
【００８５】
一例では、ニューラルネットワークをスケジュールするための方法が提供される。そのような方法は、ニューラルネットワーク中の少なくとも１つの層を実行するときに実施される複数のパイプライン化関数の連続した順序を定義するモデルを受信することであって、ニューラルネットワークが複数の層を備える、複数のパイプライン化関数の連続した順序を定義するモデルを受信することと、
ニューラルネットワークの少なくとも１つの層において同一のプロセスを実行するためのシストリックアレイを受信することと、１つまたは複数のコンピューティングプロセッサを使用して、モデルおよびシストリックアレイに対応するソースコードを、ハードウェアシステムにおいてニューラルネットワークを実行するときに静的スケジュールを提供するハードウェアレベル設計にコンパイルすることとを含み得る。
【００８６】
あるそのような方法は、ハードウェアレベル設計に基づいてフィールドプログラマブルゲートアレイ（ＦＰＧＡ）を構成することであって、ハードウェアレベル設計がレジスタ転送レベル（ＲＴＬ）コードを含む、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）を構成することをさらに含み得る。
【００８７】
あるそのような方法では、シストリックアレイのソースコードをコンパイルすることは、シストリックアレイのソースコードを、相互接続された処理要素の２次元アレイに変換することを含み得る。
【００８８】
あるそのような方法では、シストリックアレイのソースコードをコンパイルすることは、相互接続された処理要素の各々によって実施される複数の動作を識別することであって、相互接続された処理要素の各々が同じ複数の動作を実施する、複数の動作を識別することと、複数の動作が同時に機能することが可能であり得るように、複数の動作をハードウェアシステム中の異なるハードウェア要素に割り当てることとを含み得る。
【００８９】
あるそのような方法では、モデルは、複数のパイプライン化関数の連続した順序を示すソフトウェア定義並列化プラグマを含み得る。
【００９０】
あるそのような方法では、モデルに対応するソースコードは、ニューラルネットワークのためのアンタイムド関数コードを含む。
【００９１】
あるそのような方法では、複数のパイプライン化関数は、畳み込みユニット、プーリングユニット、およびデータを複数のパイプライン化関数における活性化ユニットに送信する行列乗算器のうちの少なくとも１つを含む。
【００９２】
別の例では、１つまたは複数の処理デバイス上で実行されたとき、ニューラルネットワークをスケジュールするための動作を実施する命令を記憶する非一時的コンピュータ可読記憶媒体が提供され得る。動作は、ニューラルネットワーク中の少なくとも１つの層を実行するときに実施される複数のパイプライン化関数の連続した順序を定義するモデルを受信することであって、ニューラルネットワークが複数の層を備える、複数のパイプライン化関数の連続した順序を定義するモデルを受信することと、ニューラルネットワークの少なくとも１つの層において同一のプロセスを実行するためのシストリックアレイを受信することと、モデルおよびシストリックアレイに対応するソースコードを、ハードウェアシステムにおいてニューラルネットワークを実行するときに静的スケジュールを提供するハードウェアレベル設計にコンパイルすることとを含み得る。
【００９３】
そのようなコンピュータ可読記憶媒体では、動作は、ハードウェアレベル設計に基づいてフィールドプログラマブルゲートアレイ（ＦＰＧＡ）を構成することであって、ハードウェアレベル設計がレジスタ転送レベル（ＲＴＬ）コードを含む、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）を構成することをさらに含み得る。
【００９４】
そのようなコンピュータ可読記憶媒体では、シストリックアレイのソースコードをコンパイルすることは、シストリックアレイのソースコードを、相互接続された処理要素の２次元アレイに変換することを含み得る。
【００９５】
そのようなコンピュータ可読記憶媒体では、シストリックアレイのソースコードをコンパイルすることは、相互接続された処理要素の各々によって実施される複数の動作を識別することであって、相互接続された処理要素の各々が同じ複数の動作を実施する、複数の動作を識別することと、複数の動作が同時に機能することが可能であり得るように、複数の動作をハードウェアシステム中の異なるハードウェア要素に割り当てることとを含み得る。
【００９６】
そのようなコンピュータ可読記憶媒体では、モデルは、複数のパイプライン化関数の連続した順序を示すソフトウェア定義並列化プラグマを含み得る。
【００９７】
そのようなコンピュータ可読記憶媒体では、モデルに対応するソースコードは、ニューラルネットワークのためのアンタイムド関数コードを含む。
【００９８】
そのようなコンピュータ可読記憶媒体では、複数のパイプライン化関数は、畳み込みユニット、プーリングユニット、およびデータを複数のパイプライン化関数における活性化ユニットに送信する行列乗算器のうちの少なくとも１つを含む。
【００９９】
別の例では、コンピューティングシステムが提供され得る。そのようなコンピューティングシステムは、プロセッサと、コンパイラを備えるメモリとを含み得、コンパイラは、プロセッサによって実行されたとき、ニューラルネットワーク中の少なくとも１つの層を実行するときに実施される複数のパイプライン化関数の連続した順序を定義するモデルを受信することであって、ニューラルネットワークが複数の層を備える、複数のパイプライン化関数の連続した順序を定義するモデルを受信することと、ニューラルネットワークの少なくとも１つの層において同一のプロセスを実行するためのシストリックアレイを受信することと、モデルおよびシストリックアレイに対応するソースコードを、ハードウェアシステムにおいてニューラルネットワークを実行するときに静的スケジュールを提供するハードウェアレベル設計にコンパイルすることとを含む動作を実施する。
【０１００】
あるそのようなコンピューティングシステムでは、動作は、ハードウェアレベル設計に基づいてフィールドプログラマブルゲートアレイ（ＦＰＧＡ）を構成することであって、ハードウェアレベル設計がレジスタ転送レベル（ＲＴＬ）コードを含む、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）を構成することをさらに含み得る。
【０１０１】
そのようなコンピューティングシステムでは、シストリックアレイのソースコードをコンパイルすることは、シストリックアレイのソースコードを、相互接続された処理要素の２次元アレイに変換することを含む。
【０１０２】
そのようなコンピューティングシステムでは、シストリックアレイのソースコードをコンパイルすることは、相互接続された処理要素の各々によって実施される複数の動作を識別することであって、相互接続された処理要素の各々が同じ複数の動作を実施する、複数の動作を識別することと、複数の動作が同時に機能できるように、複数の動作をハードウェアシステム中の異なるハードウェア要素に割り当てることとを含み得る。
【０１０３】
あるそのようなコンピューティングシステムでは、モデルは、複数のパイプライン化関数の連続した順序を示すソフトウェア定義並列化プラグマを含み得る。
【０１０４】
あるそのようなコンピューティングシステムでは、モデルに対応するソースコードは、ニューラルネットワークのためのアンタイムド関数コードを含み得る。
【０１０５】
上記は特定の例を対象とするが、他のおよびさらなる例がその基本的範囲から逸脱することなく考案され得、その範囲は以下の特許請求の範囲によって決定される。
【図１】
2020537789.tif 000004
【図２】
2020537789.tif 000005
【図３】
2020537789.tif 000006
【図４】
2020537789.tif 000007
【図５】
2020537789.tif 000008
【図６】
2020537789.tif 000009
【図７】
2020537789.tif 000010
【図８】
2020537789.tif 000011
【図９】
2020537789.tif 000012
【図１０】
2020537789.tif 000013
【図１１】
2020537789.tif 000014
【手続補正書】
【提出日】令和1年12月10日(2019.12.10)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】００３２
【補正方法】変更
【補正の内容】
【００３２】
表１中のソースコードは、「ｐ＿ｃｎｎＬａｙｅｒｓ」個の層をもつニューラルネットワークのためのアンタイムド関数コード（ｕｎｔｉｍｅｄ  ｆｕｎｃｔｉｏｎａｌ  ｃｏｄｅ）である。さらに、コードは、定義されたシーケンスにおいて順序付けされるが、明示的にスケジュールされない。この実施形態では、ＨＬＳ  ＤＡＴＡＦＬＯＷは、データフローのための並列化プラグマである。このプラグマは、ニューラルネットワーク設計者が、並列ブロックをスケジュールする必要なしにそれらのブロックをインスタンス化することによってＲＴＬ概念を使用することを可能にする。ＲＴＬにコンパイルされた後に、コードにおける異なる関数（たとえば、Ｃｏｎｖ、ＭａｘＰｏｏｌ、Ｒｅｌｕ、およびＳｃａｌｅ）が同時に動作する。図示されていないが、コードは、異なる関数を相互接続するＦＩＦＯ（または他のバッファ）を含み得る。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】００３６
【補正方法】変更
【補正の内容】
【００３６】
図５は、一例による、ニューラルネットワーク中のシストリックアレイ２８０を示す。図５では、シストリックアレイ２８０は、畳み込みブロックとして構成される。一実施形態では、図４に示されている畳み込みユニット４１０は、図５に示されているシストリックアレイ２８０のうちの１つまたは複数から形成される。図４中の他のブロック、すなわち、最大プーリングユニット４１５、ＲｅＬＵ４２５、およびスケーリングユニット４３５は、同じシストリックアレイ２８０または異なるシストリックアレイを使用して形成され得る。
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】００４１
【補正方法】変更
【補正の内容】
【００４１】
図３に戻ると、ブロック３１５において、コンパイラは、高レベルコードをＲＴＬコードにコンパイルし、ＲＴＬコードは、ニューラルネットワークのパイプラインのための静的スケジュールを提供する。一実施形態では、コンパイラは、ＲＴＬコードを生成するために、ブロック３０５において受信されたモデルとブロック３１０において受信されたシストリックアレイとに対応するソースコードを使用する。たとえば、コンパイラは、全体としてニューラルネットワーク全体をスケジュールすることを試みるのではなく、モデルまたは層設計において個々のブロックをスケジュールすることができる。図４を参照すると、コンパイラは、スケジューリング処理を簡略化し、スケジューリングが収束する可能性を増加させるために、畳み込みユニット４１０と、最大プーリングユニット４１５と、ＲｅＬＵ４２５と、スケーリングユニット４３５とを別々にスケジュールすることができる。すなわち、個々のブロックをスケジュールすることによって、コンパイラは、ブロックを形成するハードウェアをスケジュールし、次いで、スケジューリングプロセスの上位レベルを実施するときにブロック間でデータを共有するためのデータフローチャネルを生成することができる。
【手続補正４】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
ニューラルネットワークをスケジュールするための方法であって、
１つまたは複数のコンピューティングプロセッサを使用して、
前記ニューラルネットワーク中の少なくとも１つの層を実行するときに実施される複数の関数の、パイプラインにおける、連続した順序を定義するモデルを受信することであって、前記モデルが、複数の層を備える前記ニューラルネットワークを表す、複数の関数の、パイプラインにおける、連続した順序を定義するモデルを受信することと、
前記モデルに基づいて、および前記ニューラルネットワークの前記少なくとも１つの層において同一のプロセスを接続することによって、シストリックアレイを生成することであって、前記シストリックアレイが前記複数の関数を実行するためのものである、シストリックアレイを生成することと、
前記モデルおよび前記シストリックアレイに対応するソースコードを、ハードウェアシステムにおいて前記ニューラルネットワークを実行するときに静的スケジュールを提供するハードウェアレベル設計にコンパイルすることと
を含む、方法。
【請求項２】
前記ハードウェアレベル設計に基づいてフィールドプログラマブルゲートアレイ（ＦＰＧＡ）を構成することであって、前記ハードウェアレベル設計がレジスタ転送レベル（ＲＴＬ）コードを含む、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）を構成すること
をさらに含む、請求項１に記載の方法。
【請求項３】
前記シストリックアレイの前記ソースコードをコンパイルすることが、
相互接続された処理要素のうちの１つについての表現を使用して、前記シストリックアレイに対応する前記ソースコードを前記相互接続された処理要素の２次元アレイに変換すること
を含む、請求項１に記載の方法。
【請求項４】
前記シストリックアレイの前記ソースコードをコンパイルすることは、
前記相互接続された処理要素の各々によって実施される複数の動作を識別することであって、前記相互接続された処理要素の各々が同じ複数の動作を実施する、複数の動作を識別することと、
前記複数の動作が同時に機能できるように、前記複数の動作を前記ハードウェアシステムにおける異なるハードウェア要素に割り当てることと
を含む、請求項３に記載の方法。
【請求項５】
前記モデルが、複数のパイプライン化関数の前記連続した順序を示すソフトウェア定義並列化プラグマを含む、請求項１に記載の方法。
【請求項６】
前記モデルに対応する前記ソースコードが、前記ニューラルネットワークのためのアンタイムド関数コードを含む、請求項１に記載の方法。
【請求項７】
複数のパイプライン化関数が、畳み込みユニット、プーリングユニット、およびデータを前記複数のパイプライン化関数における活性化ユニットに送信する行列乗算器のうちの少なくとも１つを含む、請求項１に記載の方法。
【請求項８】
プロセッサと、
コンパイラを備えるメモリと
を備えるコンピューティングシステムであって、前記コンパイラは、前記プロセッサによって実行されたとき、
ニューラルネットワーク中の少なくとも１つの層を実行するときに実施される複数の関数の、パイプラインにおける、連続した順序を定義するモデルを受信することであって、前記モデルが、複数の層を備える前記ニューラルネットワークを表す、複数の関数の、パイプラインにおける、連続した順序を定義するモデルを受信することと、
前記モデルに基づいて、および前記ニューラルネットワークの前記少なくとも１つの層において同一のプロセスを接続することによって、シストリックアレイを生成することであって、前記シストリックアレイが前記複数の関数を実行するためのものである、シストリックアレイを生成することと、
前記モデルおよび前記シストリックアレイに対応するソースコードを、ハードウェアシステムにおいて前記ニューラルネットワークを実行するときに静的スケジュールを提供するハードウェアレベル設計にコンパイルすることと
を含む動作を実施する、コンピューティングシステム。
【請求項９】
前記動作は、
前記ハードウェアレベル設計に基づいてフィールドプログラマブルゲートアレイ（ＦＰＧＡ）を構成することであって、前記ハードウェアレベル設計がレジスタ転送レベル（ＲＴＬ）コードを含む、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）を構成すること
をさらに含む、請求項８に記載のコンピューティングシステム。
【請求項１０】
前記シストリックアレイの前記ソースコードをコンパイルすることが、
相互接続された処理要素のうちの１つについての表現を使用して、前記シストリックアレイに対応する前記ソースコードを前記相互接続された処理要素の２次元アレイに変換すること
を含む、請求項８に記載のコンピューティングシステム。
【請求項１１】
前記シストリックアレイの前記ソースコードをコンパイルすることは、
前記相互接続された処理要素の各々によって実施される複数の動作を識別することであって、前記相互接続された処理要素の各々が同じ複数の動作を実施する、複数の動作を識別することと、
前記複数の動作が同時に機能できるように、前記複数の動作を前記ハードウェアシステムにおける異なるハードウェア要素に割り当てることと
を含む、請求項１０に記載のコンピューティングシステム。
【請求項１２】
前記モデルが、複数のパイプライン化関数の前記連続した順序を示すソフトウェア定義並列化プラグマを含む、請求項８に記載のコンピューティングシステム。
【請求項１３】
前記モデルに対応する前記ソースコードが、前記ニューラルネットワークのためのアンタイムド関数コードを含む、請求項８に記載のコンピューティングシステム。
【国際調査報告】
2020537789.tif 000015
2020537789.tif 000016
2020537789.tif 000017
2020537789.tif 000018