(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-08-24
(45)【発行日】2023-09-01
(54)【発明の名称】超並列ソフトウェア定義ハードウェアシステムにおける静的ブロックスケジューリング
(51)【国際特許分類】
G06F 8/41 20180101AFI20230825BHJP
G06F 9/38 20180101ALI20230825BHJP
G06F 17/10 20060101ALI20230825BHJP
G06N 3/02 20060101ALI20230825BHJP
【FI】
G06F8/41 170
G06F9/38 370C
G06F17/10 A
G06N3/02
(21)【出願番号】P 2020521607
(86)(22)【出願日】2018-10-01
(86)【国際出願番号】 US2018053820
(87)【国際公開番号】W WO2019079025
(87)【国際公開日】2019-04-25
【審査請求日】2021-09-27
(32)【優先日】2017-10-17
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】591025439
【氏名又は名称】ザイリンクス インコーポレイテッド
【氏名又は名称原語表記】XILINX INCORPORATED
(74)【代理人】
【識別番号】110002077
【氏名又は名称】園田・小林弁理士法人
(72)【発明者】
【氏名】ウー, ヨンジュン
(72)【発明者】
【氏名】ゼイダ, インドリフ
(72)【発明者】
【氏名】ドゥレー, エリオット
(72)【発明者】
【氏名】シラサオ, アシシュ
【審査官】北川 純次
(56)【参考文献】
【文献】米国特許出願公開第2017/0103299(US,A1)
【文献】特開2014-006650(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 8/41
G06F 9/38
G06F 17/10
G06N 3/02-3/10
(57)【特許請求の範囲】
【請求項1】
1つまたは複数のコンピューティングプロセッサを使用して、
ニューラルネットワーク中の少なくとも1つの層を実行するときに実施される複数の関数の、パイプラインにおける、連続した順序を定義するモデルを受信することであって、前記モデルが、複数の層を備える前記ニューラルネットワークを表す、複数の関数の、パイプラインにおける、連続した順序を定義するモデルを受信することと、
前記モデルに基づいて、
前記複数の関数を実行することであって、前記複数の関数は、前記ニューラルネットワークの前記少なくとも1つの層において同一のプロセス
の識別に基づいて、シストリックアレイを
介して実行される、前記複数の関数を実行す
ることと、
前記モデルおよび前記シストリックアレイに対応するソースコードを、ハードウェアシステムにおいて前記ニューラルネットワークを実行するときに静的スケジュールを提供するハードウェアレベル設計にコンパイルすることと
を含む、方法。
【請求項2】
前記ハードウェアレベル設計に基づいてフィールドプログラマブルゲートアレイ(FPGA)を構成することであって、前記ハードウェアレベル設計がレジスタ転送レベル(RTL)コードを含む、フィールドプログラマブルゲートアレイ(FPGA)を構成すること
をさらに含む、請求項1に記載の方法。
【請求項3】
前記シストリックアレイの前記ソースコードをコンパイルすることが、
相互接続された処理要素のうちの1つについての表現を使用して、前記シストリックアレイに対応する前記ソースコードを前記相互接続された処理要素の2次元アレイに変換すること
を含む、請求項1に記載の方法。
【請求項4】
前記シストリックアレイの前記ソースコードをコンパイルすることは、
前記相互接続された処理要素の各々によって実施される複数の動作を識別することであって、前記相互接続された処理要素の各々が同じ複数の動作を実施する、複数の動作を識別することと、
前記複数の動作が同時に機能できるように、前記複数の動作を前記ハードウェアシステムにおける異なるハードウェア要素に割り当てることと
を含む、請求項3に記載の方法。
【請求項5】
前記モデルが、複数のパイプライン化関数の前記連続した順序を示すソフトウェア定義並列化プラグマを含む、請求項1に記載の方法。
【請求項6】
前記モデルに対応する前記ソースコードが、前記ニューラルネットワークのためのアンタイムド関数コードを含む、請求項1に記載の方法。
【請求項7】
複数のパイプライン化関数が、畳み込みユニット、プーリングユニット、およびデータを前記複数のパイプライン化関数における活性化ユニットに送信する行列乗算器のうちの少なくとも1つを含む、請求項1に記載の方法。
【請求項8】
プロセッサと、
コンパイラを備えるメモリと
を備えるコンピューティングシステムであって、前記コンパイラは、前記プロセッサによって実行されたとき、
ニューラルネットワーク中の少なくとも1つの層を実行するときに実施される複数の関数の、パイプラインにおける、連続した順序を定義するモデルを受信することであって、前記モデルが、複数の層を備える前記ニューラルネットワークを表す、複数の関数の、パイプラインにおける、連続した順序を定義するモデルを受信することと、
前記モデルに基づいて、
前記複数の関数を実行することであって、前記複数の関数は、前記ニューラルネットワークの前記少なくとも1つの層において同一のプロセス
の識別に基づいて、シストリックアレイを
介して実行される前記複数の関数を実行す
ることと、
前記モデルおよび前記シストリックアレイに対応するソースコードを、ハードウェアシステムにおいて前記ニューラルネットワークを実行するときに静的スケジュールを提供するハードウェアレベル設計にコンパイルすることと
を含む動作を実施する、コンピューティングシステム。
【請求項9】
前記動作は、
前記ハードウェアレベル設計に基づいてフィールドプログラマブルゲートアレイ(FPGA)を構成することであって、前記ハードウェアレベル設計がレジスタ転送レベル(RTL)コードを含む、フィールドプログラマブルゲートアレイ(FPGA)を構成すること
をさらに含む、請求項8に記載のコンピューティングシステム。
【請求項10】
前記シストリックアレイの前記ソースコードをコンパイルすることが、
相互接続された処理要素のうちの1つについての表現を使用して、前記シストリックアレイに対応する前記ソースコードを前記相互接続された処理要素の2次元アレイに変換すること
を含む、請求項8に記載のコンピューティングシステム。
【請求項11】
前記シストリックアレイの前記ソースコードをコンパイルすることは、
前記相互接続された処理要素の各々によって実施される複数の動作を識別することであって、前記相互接続された処理要素の各々が同じ複数の動作を実施する、複数の動作を識別することと、
前記複数の動作が同時に機能できるように、前記複数の動作を前記ハードウェアシステムにおける異なるハードウェア要素に割り当てることと
を含む、請求項10に記載のコンピューティングシステム。
【請求項12】
前記モデルが、複数のパイプライン化関数の前記連続した順序を示すソフトウェア定義並列化プラグマを含む、請求項8に記載のコンピューティングシステム。
【請求項13】
前記モデルに対応する前記ソースコードが、前記ニューラルネットワークのためのアンタイムド関数コードを含む、請求項8に記載のコンピューティングシステム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示の例は、一般に、超並列プログラマブルハードウェアシステムをスケジュールすることに関する。
【背景技術】
【0002】
機械学習は、コンピューティングシステムが、明示的にプログラムされることなしに働くことを引き起こす科学である。古典的な機械学習は、K平均クラスタリング、線形およびロジスティック回帰、確率的勾配降下法、相関ルール学習などを含む、様々なクラスタリングおよび分類技法を含む。深層学習は、機械学習におけるより新しい最先端領域である。深層学習は、特徴抽出および変換のために非線形処理ユニットの複数の層を使用する機械学習アルゴリズムのクラスである。深層学習アルゴリズムは、教師なし(たとえば、パターン分析)であるか、または教師あり(たとえば、分類)であり得る。深層学習アルゴリズムは、(本明細書では「ニューラルネットワーク」と呼ばれる)人工ニューラルネットワーク(ANN)の層を使用して実装され得る。
【0003】
概して、ニューラルネットワークは、グラフ中で接続されたノード(すなわち、「ニューロン」)の集合である。ニューラルネットワーク中のノードは、重み付けされた入力の和を算出し、その和に随意のバイアスを加算する。ノードの出力は、(「活性化関数」と呼ばれる)最終的な和の関数である。例示的な活性化関数は、シグモイド関数、双曲線正接(tanh)関数、正規化線形ユニット(ReLU)関数、および恒等関数を含む。ニューラルネットワークモデルは、しばしば、特定のトポロジーと、対応する重みおよびバイアスとを定義するノードの層に編成される。重みおよびバイアスは、ネットワークパラメータと呼ばれる。
【0004】
概して、ニューラルネットワークは、入力層と出力層とを含み、入力層と出力層との間の1つまたは複数の隠れ層を随意に含むことができる。深層学習アプリケーションにおいて使用されるニューラルネットワークは、典型的に、多くの隠れ層を含み、それにより、深層ニューラルネットワーク(DNN)という用語が生じる。ニューラルネットワークの層は、密接続される(たとえば、層中の各ノードが前の層中のすべてのノードに全接続される)か、またはスパース接続され得る(たとえば、層中の各ノードが前の層中のノードの一部のみに接続される)。畳み込みニューラルネットワーク(CNN)は、畳み込み層と呼ばれる、1つまたは複数のスパース接続された層を含む、DNNのタイプである。CNNは、画像またはビデオデータを処理するのに好適である。DNNの他のタイプは、音声およびテキストデータを処理するのに好適であるリカレントニューラルネットワーク(RNN)を含む。
【0005】
現代のフィールドプログラマブルゲートアレイ(FPGA)は、超並列ハードウェアシステムをもたらすために利用され得る、数百万個のルックアップテーブルと、数千個の構成可能な論理ブロック(CLB)、デジタル信号処理(DSP)およびランダムアクセスメモリブロック(BRAM)とを与える。既存のFPGAシステムは、ハードウェア記述言語(HDL)、または高位合成(HLS:high level synthesis)ツールを使用してスケジュールされるプログラムコード(たとえば、CまたはC++)のいずれかを使用して構成される。
【0006】
HDL手法では、すべてのプロセスは、極めて複雑な状態機械およびデータ管理論理を用いて手動でスケジュールされる。しかしながら、このプロセスは、大規模FPGAシステムの場合、時間がかかる。シングルスレッドソフトウェア機能では、数千個のプロセスをスケジュールすることの複雑さは指数関数的に増大し、いくつかの場合には、スケジューリングは収束することができない。
【発明の概要】
【0007】
ニューラルネットワークをスケジュールするための技法が説明される。一例は、ニューラルネットワーク中の少なくとも1つの層を実行するときに実施される複数の関数の連続した順序を定義するモデルを受信することであって、ニューラルネットワークが複数の層を備える、複数の関数の連続した順序を定義するモデルを受信することを含む方法である。本方法は、ニューラルネットワークの少なくとも1つの層において同一のプロセスを実行するためのシストリックアレイを受信することと、モデルおよびシストリックアレイに対応するソースコードを、ハードウェアシステムにおいてニューラルネットワークを実行するときに静的スケジュールを提供するハードウェアレベル設計にコンパイルすることとを含む。
【0008】
別の例は、1つまたは複数の処理デバイス上で実行されたとき、ニューラルネットワークをスケジュールするための動作を実施する命令を記憶する非一時的コンピュータ可読記憶媒体である。動作は、ニューラルネットワーク中の少なくとも1つの層を実行するときに実施される複数の関数の連続した順序を定義するモデルを受信することであって、ニューラルネットワークが複数の層を備える、複数の関数の連続した順序を定義するモデルを受信することを含む。動作は、ニューラルネットワークの少なくとも1つの層において同一のプロセスを実行するためのシストリックアレイを受信することと、モデルおよびシストリックアレイに対応するソースコードを、ハードウェアシステムにおいてニューラルネットワークを実行するときに静的スケジュールを提供するハードウェアレベル設計にコンパイルすることとを含む。
【0009】
別の例は、プロセッサとメモリとを含むコンピューティングシステムである。メモリは、プロセッサによって実行されたとき、動作を実施するコンパイラを含む。動作は、ニューラルネットワーク中の少なくとも1つの層を実行するときに実施される複数の関数の連続した順序を定義するモデルを受信することであって、ニューラルネットワークが複数の層を備える、複数の関数の連続した順序を定義するモデルを受信することを含む。動作は、ニューラルネットワークの少なくとも1つの層において同一のプロセスを実行するためのシストリックアレイを受信することと、モデルおよびシストリックアレイに対応するソースコードを、ハードウェアシステムにおいてニューラルネットワークを実行するときに静的スケジュールを提供するハードウェアレベル設計にコンパイルすることとを含む。
【0010】
上記の具陳された特徴が詳細に理解され得るように、上記で手短に要約されたより詳細な説明は、添付の図面にその一部が示されている例示的な実装形態を参照することによってなされ得る。しかしながら、添付の図面は、典型的な例示的な実装形態を示すにすぎず、したがって、その範囲の限定と見なされるべきでないことに留意されたい。
【図面の簡単な説明】
【0011】
【
図1】一例による、多層ニューラルネットワークを示す図である。
【
図2】一例による、FPGAにおいてニューラルネットワークパイプラインを確立するためのシステムの図である。
【
図3】一例による、ニューラルネットワークパイプラインをスケジュールするためのフローチャートである。
【
図4】一例による、ニューラルネットワーク中の層のハードウェアモデルを示す図である。
【
図5】一例による、ニューラルネットワーク中の、畳み込みまたは全接続層を実施するためのシストリックアレイを示す図である。
【
図6】一例による、デジタル信号処理ブロック中のパイプライン化処理要素を示す図である。
【
図7】一例による、ニューラルネットワークを実装するためのシステムを示すブロック図である。
【
図8】一例による、コンピューティングシステムを示すブロック図である。
【
図9】一例による、アクセラレーション回路を示すブロック図である。
【
図10】一例による、プログラマブル集積回路(IC)を示すブロック図である。
【
図11】一例による、プログラマブルICのFPGA実装形態を示す図である。
【発明を実施するための形態】
【0012】
理解を容易にするために、可能な場合、図に共通である同じ要素を示すために同じ参照番号が使用されている。一例の要素が、他の例に有益に組み込まれ得ることが企図される。
【0013】
図を参照しながら様々な特徴が以下で説明される。図は一定の縮尺で描かれることも描かれないこともあり、同様の構造または機能の要素が、図全体にわたって同様の参照番号によって表されることに留意されたい。図は、特徴の説明を容易にすることを意図されているにすぎないことに留意されたい。図は、本明細書の網羅的な説明として、または特許請求の範囲に対する限定として意図されていない。さらに、示されている例は、すべての態様または利点が示される必要があるとは限らない。特定の例に関して説明される一態様または利点は、必ずしもその例に限定されるとは限らず、そのように示されていない場合でも、またはそのように明示的に説明されていない場合でも、任意の他の例において実施され得る。
【0014】
本明細書の実施形態は、超並列ハードウェアシステムにおいて実装されるニューラルネットワークを静的にスケジュールするための技法について説明する。ニューラルネットワークは、本明細書では上位レベル、中間レベル、および下位レベルと呼ばれる3つの異なるレベルを使用してスケジュールされ得る。一実施形態では、上位レベルは、ハードウェアシステムにおいて同時に動作する関数(たとえば、畳み込み関数、最大プーリング/最大プール関数、正規化線形ユニット(ReLU)関数、およびスケーリング関数)の連続した順序を確立する、ニューラルネットワーク中の層のハードウェアまたはソフトウェアモデルを含む。モデルは、層において異なる関数を相互接続するデータチャネルを含み得る。
【0015】
中間レベルでは、処理要素のシストリックアレイまたはメッシュを形成するために、上位レベルにおいて定義される層における同一のプロセスが接続され、レイテンシを最小限に抑えるために平衡化されたデータフローチャネルが使用される。一実施形態では、シストリックアレイはソースコード(たとえば、CまたはC++)を使用して設計され、ソースコードは、ソースコードをレジスタ転送レベル(RTL)コードに変換するときにHLSコンパイラによって並列化され、RTLコードは、次いで、FPGAなど、プログラマブルハードウェアを構成するために使用される。下位レベルでは、HLSコンパイラは、シストリックアレイ中の処理要素によって実施される動作をプログラマブルハードウェアの異なる部分に割り当てることができる。たとえば、処理要素が異なるデジタル信号処理(DSP)ブロックを使用して実装される場合、処理要素によって実施される異なる動作(たとえば、読取り、書込み、乗算、加算など)は、並列に実施され得る。ニューラルネットワークのスケジューリングを異なるレベルに分割することによって、コンパイラは、システム中のハードウェア要素が同時に動作することができるように、並列化されたパイプラインを生成することができる。
【0016】
図1は、一例による、多層ニューラルネットワーク100を示す。本明細書で使用されるニューラルネットワーク100は、機械学習において使用される計算モジュールであり、人工ニューロンと呼ばれる接続されたユニットの大きい集合に基づき、ニューロン間の接続は、変動する強度の活性化信号を搬送する。ニューラルネットワーク100は、明示的にプログラムされるのではなく、例からトレーニングされ得る。一実施形態では、ニューラルネットワーク100中のニューロンは、層、たとえば、層1、層2、層3などにおいて接続され、データが、第1の層、たとえば、層1から、最後の層、たとえば、層7に進む。7つの層が
図1に示されているが、ニューラルネットワーク100は数百個または数千個の異なる層を含むことができる。
【0017】
ニューラルネットワークは、コンピュータビジョン、特徴検出、音声認識など、任意の数のタスクを実施することができる。
図1では、ニューラルネットワーク100は、デジタル画像中の物体を分類する、顔認識を実施する、テキストを識別するなど、デジタル画像中の特徴を検出する。そうするために、画像データ105が、ニューラルネットワーク中の第1の層に供給され、第1の層は、画像データ105に対して、対応する関数、この例では、10×10畳み込みを実施する。次いで、その関数の結果は、次の層、たとえば、層2に受け渡され、層2は、処理された画像データを次のレベルに受け渡す前に層2の関数を実施し、以下同様である。層によって処理された後に、データは画像分類器110において受信され、画像分類器110は、画像データ中の特徴を検出することができる。
【0018】
層は、層1が層2の前に実施され、層2が層3の前に実施され、以下同様であるように、連続した順序で定義される。したがって、下位層と(1つまたは複数の)上位層との間にデータ依存性が存在する。層2は層1からデータを受信するのを待つが、一実施形態では、ニューラルネットワーク100は、各層が同時に動作することができるように並列化され得る。すなわち、各クロックサイクル中に、層は、新しいデータを受信し、処理されたデータを出力することができる。たとえば、各クロックサイクル中に、新しい画像データ105が層1に与えられ得る。簡単のために、各クロックサイクル中に、新しい画像の一部が層1に与えられ、各層が、前のクロックサイクル中で受信された画像データのために、処理されたデータを出力することができると仮定する。並列化されたパイプラインを形成するように層がハードウェアで実装された場合、7つのクロックサイクルの後に、層の各々は画像データの一部を処理するために同時に動作する。「画像データの一部」は、画像全体、1つの画像のピクセルのセット、画像のバッチ、または各層が同時に処理することができる任意の量のデータであり得る。したがって、並列パイプラインを形成するように層をハードウェアで実装することは、層を一度に1つ動作させることと比較して、ニューラルネットワークのスループットを非常に増加させることができる。超並列ハードウェアシステム中の層をスケジュールすることのタイミング利益は、ニューラルネットワーク100中の層の数が増加するにつれてさらに改善する。
【0019】
図2は、一例による、FPGA205においてニューラルネットワークパイプライン215を確立するためのシステム200である。FPGA205に加えて、システム200は、FPGA205中でプログラマブル論理210を構成するコンピューティングデバイス250を含む。たとえば、コンピューティングデバイス250は、ラップトップ、デスクトップ、またはサーバであり得る。コンピューティングデバイス250は、任意の数の処理コアを各々含んでいることがある任意の数の処理要素を表すプロセッサ255を含む。デバイス250は、揮発性または不揮発性メモリ要素を有することができるメモリ260をも含む。
【0020】
メモリ260はコンパイラ265を含み、コンパイラ265は、一実施形態では、CまたはC++などのソースコードをRTLコードに変換するソフトウェアアプリケーション(たとえば、HLSコンパイラ)であり、RTLコードは、ニューラルネットワークパイプライン215を確立するようにプログラマブル論理210を構成する。ソースコードをコンパイルするとき、コンパイラ265は、スケジューラ270を使用してRTLを生成し、それは、ニューラルネットワークパイプライン215を形成する異なるハードウェア要素(たとえば、DSPブロック220またはCLB222)が同時に動作することができるようにパイプライン215を静的にスケジュールする。一実施形態では、静的スケジュールは、ハードウェア要素が実行する順序がランタイム中に変化しないように固定である。一実施形態では、スケジューラ270は、コンパイラ265がニューラルネットワークパイプライン215を確立するための静的にスケジュールされたRTLコードを生成するために使用する、上位レベル、中間レベル、および下位レベルを受信するか、または生成する。一実施形態では、スケジュールの上位レベルは、ニューラルネットワーク中の層(または複数の層)のハードウェアまたはソフトウェアモデルを含む層設計である。層設計は層命令のパラメータ化275によって定義され得、それは、畳み込み関数、最大プーリング関数、ReLU関数、およびスケーリング関数など、同時に動作することができる、層中の複数の関数の連続した順序であり得る。
【0021】
一実施形態では、スケジュールの中間レベルは、データチャネルを使用して相互接続される複数の処理要素(PE)を含むシストリックアレイ280である。一実施形態では、PEの各々は、FPGA中のDSPブロック220または1つまたは複数のCLB222(またはその両方の組合せ)のうちの1つまたは複数を含む。DSPブロック220は、CLB222よりも速い速度でDSPを実施し、システム電力消費を低下させることができる特殊な論理ブロックである。その上、CLB222を使用して同じDSP性能を達成することは、より大きい集積回路をもたらすので、DSPブロック220を追加することにより、FPGAの全体的なサイズを低減することができる。DSPブロック220は、加算器、事前加算器、減算器、アキュムレータ、加算ユニットなどを含む。
【0022】
シストリックアレイ280は、PEを形成するDSPブロック220またはCLB222が、層において定義される関数を実施するためにどのように相互接続されるかを定義する。たとえば、畳み込みを実施するために、シストリックアレイ280は複数の相互接続されたPEを含み得、複数の相互接続されたPEは各々、FPGA205中のプログラマブルDSPブロック220から形成された複数の乗算アキュムレータ(MAC:multiply-accumulator)ブロックを含む。別の実施形態では、最大プーリング関数またはReLU関数を実装するとき、PEは、対応する動作を実施するCLB222を含み得る。層命令のパラメータ化275において定義される関数のように、コンパイラ265は、PEが同時に動作することができるように、シストリックアレイ280に対応するRTLコードを生成することができる。
【0023】
一実施形態では、スケジュールの下位レベルは、シストリックアレイ280中のPEによって実施される動作を定義するPE設計285である。上記の例を続けると、PEがMACブロックを含む場合、PE設計285は、これらのブロックによって実施される、読取り動作、書込み動作、乗算動作、および加算動作(add operation)をリストすることができる。もちろん、MACブロックは、PEを実装することの一例にすぎず、最大プーリングユニットまたはReLUの一部であるPEによって、他の動作が実施され得る。
【0024】
FPGA205は、プログラマブル論理210とメモリ225とを含む。プログラマブル論理210は、プログラマブル論理ブロックのアレイと、論理ブロックが通信可能に連結されることを可能にする再構成可能な相互接続の階層とを含むことができる。プログラマブル論理ブロックの一例は、ニューラルネットワークパイプライン215中の、畳み込みまたは全接続層を実施するときに有用であるDSPブロック220を含む。プログラマブル論理ブロックは、スケーリング関数または最大プール関数を実施するときに使用され得る1つまたは複数のCLB222をも含むことができる。一実施形態では、ニューラルネットワークパイプライン215は、畳み込みを実施するために行列乗算が使用され得るように、受信された画像データを(im2colと呼ばれる)2D行列に変換するためのプログラマブル論理210を含む。
【0025】
FPGA205が示されているが、本明細書で説明されるスケジューリング技法は、ニューラルネットワークを実装するように特別に設計されたグラフィックスプロセッサユニット(GPU)または特定用途向け集積回路(ASIC)など、他のタイプの非プログラマブルハードウェアシステム上で、ニューラルネットワークパイプライン215を実装するために実施され得る。すなわち、これらのシステム上でニューラルネットワークを設計するかまたは実装するとき、ハードウェア要素が同時に動作することができるようにハードウェア要素が静的にスケジュールされるように、層命令のパラメータ化275と、シストリックアレイ280と、PE設計285とが使用され得る。
【0026】
図3は、一例による、ニューラルネットワークパイプラインをスケジュールするための方法300のフローチャートである。ブロック305において、スケジューラは、FPGAにおいて同時に動作する複数の関数の連続した順序を確立する、ニューラルネットワーク中の層のためのモデルを受信する。一実施形態では、モデルは、層命令のパラメータ化275を含む、
図2で説明されたような層設計である。さらに、モデルは、超並列ハードウェアシステム、たとえば、FPGAにおいて実装されるような完全なニューラルネットワークを表すソフトウェアまたはハードウェアモデルであり得る。
【0027】
一実施形態では、モデルは、ユーザによってスケジューラに与えられる。たとえば、ユーザは、ユーザがFPGA上に実装することを望むニューラルネットワークのタイプに従ってモデルを設計し得る。たとえば、異なるニューラルネットワークは、異なる層と、それらの層内の異なる関数とを有することができる。上述のように、ニューラルネットワークは、デジタル画像中の特徴検出、オーディオ処理、またはテキストを処理することなど、異なるタスクを実施するように設計され得る。ニューラルネットワークの非限定的な例は、CNN、RNN、長短期記憶(LSTM)ニューラルネットワーク、および特徴ベース学習または教師あり/教師なし学習を使用するニューラルネットワークを含む。その上、同じタイプのニューラルネットワークの構造は、大きく変動することができる。たとえば、いくつかのCNNは数十個の層を含むことができ、他のCNNは数百個の層を含むことができ、層の各々は別様に構成され得、たとえば、3×3畳み込みを実施する層、11×11畳み込みを実施する層、全接続(FC)層、プーリング層などである。
【0028】
一実施形態では、モデルは、ニューラルネットワーク中の層の各々のための上位レベルスケジュールを定義する。
図4は、一例による、ニューラルネットワーク中の層のアーキテクチャ記述(architecture description)400のハードウェアモデルを示す。アーキテクチャ記述400は、画像中の特徴検出を実施するための、層スケジューラ405、畳み込みユニット410、最大プーリングユニット415、マルチプレクサ(mux)420、ReLU425、mux430、スケーリングユニット435、およびmux440を含み、これらは、一般に、パイプライン化関数(pipelined function)と呼ばれる。アーキテクチャ記述400のモデルは、ニューラルネットワークの1つまたは複数の層を実行するときのパイプライン化関数の連続した順序を定義する。一実施形態では、畳み込みユニット410は、行列乗算器を使用して行列乗算を実施し、任意の数の重み(またはカーネル)を使用して、受信された画像データを重み付けする。一実施形態では、最大プーリングユニット415は、画像がパイプラインの後半でスケーリングされるときに特徴が失われないように画像中の特徴を拡大する。ReLU425は、あるタイプの活性化ユニットまたはランプ関数であり、その活性化ユニットまたはランプ関数は、一実施形態では、f(x)=max(0,x)として定義され、ここで、xはニューロンからの出力である。スケーリングユニット435は、処理されたデータの値を、量子化による数値誤差を最小限に抑えるように調整することができる。
【0029】
層スケジューラ405は、データフローがどこで開始するかを決定する。たとえば、いくつかの層では、入力画像データは、最初に、畳み込みユニット410に送られ得る。ニューラルネットワーク中の他の層では、画像データは、畳み込みユニット410をバイパスし、代わりに、最大プーリングユニット415またはスケーリングユニット435に層スケジューラ405によって送られる。さらに、データがアーキテクチャ記述400中を伝搬する様式は、層に応じて変動することができる。たとえば、第1の層では、画像データが畳み込みユニット410によって処理された後に、mux420は、処理されたデータをReLU425に直接フォワーディングし、それにより、最大プーリングユニット415をバイパスし得る。代替的に、第2の層では、畳み込みユニット410によって出力されたデータは、最初に、最大プーリングユニット415によって処理され、その後、mux420がそのデータをReLU425に送信する。このようにして、マルチプレクサ420、430、および440は、たとえば層スケジューラ405によって与えられた制御信号に従って、画像データがアーキテクチャ記述400中をどのように流れるかを変更することができる。
【0030】
一実施形態では、アーキテクチャ記述400は、ニューラルネットワークを実行するために必要とされる完全なシステムを示すブロック図である。言い換えれば、アーキテクチャ記述400は、ニューラルネットワークおよびその対応する層を実行するためにFPGA(または他のハードウェアシステム)において必要とされるハードウェアブロックを、抽象化された(abstracted)レベルで表す。図示されていないが、アーキテクチャ記述400は、異なるブロックが同時に実行することを可能にするためにそれらのブロックの間に挿入されたデータフローチャネルを含み得る。データフローチャネルは、全体的なシステムレイテンシを最小限に抑えるように、適切にサイズ決定され得る。その上、
図4に示されているアーキテクチャ記述400はソフトウェア定義され得、これは、ユーザが単に(ここでは異なるブロックとして表される)スカラー動作(scalar operation)のシーケンスを表現し、並列化プラグマ(parallelization pragma)を追加することを意味する。すなわち、ユーザは、ブロックをスケジュールすることなしに(すなわち、ブロックがいつ実行されるべきであるかを定義することなしに)、これらのブロックが実行されるシーケンスを定義することができる。一実施形態では、並列化プラグマは、定義されたブロックが並列に動作するようにスケジュールされるべきであることをコンパイラに指定する指示プラグマ(directive pragma)である。
図4に示されているハードウェアモデルをソースコードに変換し、並列化プラグマを使用することによって、コンパイラは、アーキテクチャ記述400を実行するための最適な静的スケジュールを作成することができる。一実施形態では、得られた静的スケジュールは、
図4に示されている異なるブロックが同時に実行することを可能にする。
【0031】
アーキテクチャ記述400をハードウェアモデルとして表現するのではなく、アーキテクチャ記述400は、ソフトウェアモデルとして表され得る。アーキテクチャ記述400のためのソフトウェアモデルのC++実装形態の一例が表1で与えられる。
【0032】
表1中のソースコードは、「p_cnnLayers」個の層をもつニューラルネットワークのためのアンタイムド関数コード(untimed functional code)である。さらに、コードは、定義されたシーケンスにおいて順序付けされるが、明示的にスケジュールされない。この実施形態では、HLS DATAFLOWは、データフローのための並列化プラグマである。このプラグマは、ニューラルネットワーク設計者が、並列ブロックをスケジュールする必要なしにそれらのブロックをインスタンス化することによってRTL概念を使用することを可能にする。RTLにコンパイルされた後に、コードにおける異なる関数(たとえば、Conv、MaxPool、Relu、およびScale)が同時に動作する。図示されていないが、コードは、異なる関数を相互接続するFIFO(または他のバッファ)を含み得る。
【0033】
表1に示されているコードから生成された、得られたコンパイルされたRTLは、ニューラルネットワークのすべての層のための、統計的にスケジュールされた状態機械を含んでいる。各層内で、すべてのブロック(または関数)は同時に稼働する。
図4に示されているハードウェアモデルと、表1中のソフトウェアコードとは、設計者が高レベルソフトウェア定義システムにおけるハードウェア挙動を表現することができる容易さを示す。
【0034】
方法300に戻ると、ブロック310において、スケジューラは、ニューラルネットワーク層において同一のプロセスを実行するためのシストリックアレイを受信する。一実施形態では、設計者は、シストリックアレイの構成を定義するソフトウェアコードを与え、スケジューラ(またはコンパイラ)は、次いで、そのシストリックアレイを、シストリックアレイ中の異なる動作がハードウェアで同時に実行するように並列化する。
【0035】
一実施形態では、シストリックアレイは2次元アレイであり、2次元アレイは、全体的なスケジューリングを簡略化し、ならびに、一貫したデータフローを維持して、ハードウェアシステムにおいて配置することおよびルーティングすることをより容易にする。一実施形態では、シストリックアレイは、同時に実行するために相互接続された複数のPEを含む。たとえば、各PEは、乗算アキュムレータ(MAC)ブロックであり得る。しかしながら、PEは、シストリックアレイによって実施されるプロセスに応じて変動することができる。たとえば、畳み込みを実施するために使用されるシストリックアレイはMACブロックを有し得、プーリング、ReLU、またはスケーリングを実施するために使用されるシストリックアレイは異なるPEを有する。多次元アレイにおいてPEを配列することによって、PEの各々は、指数関数的に大きくなる帯域幅データ経路を受信することができる。ここで示されている2次元メッシュは、帯域幅と、配置およびルーティングの難しさとの間の妥協を与える。
【0036】
図5は、一例による、ニューラルネットワーク中のシストリックアレイ280を示す。
図5では、シストリックアレイ280は、畳み込みブロックとして構成される。一実施形態では、
図4に示されている畳み込みユニット410は、
図5に示されているシストリックアレイ280のうちの1つまたは複数から形成される。
図4中の他のブロック、すなわち、最大プーリングユニット415、ReLU425、およびスケーリングユニット435は、同じシストリックアレイ280または異なるシストリックアレイを使用して形成され得る。
【0037】
図5では、2次元シストリックアレイ280は、4×4行列を形成するために相互接続された複数のPEを含む。一実施形態では、スケジューラは、ユーザまたは設計者によって与えられたソフトウェアコードを使用してシストリックアレイ280を形成する。この例では、シストリックアレイ280は、forループ(および、HLSコンパイラの場合、随意のアンロールプラグマ(unroll pragma))から導出され得、それは、A×Bの乗算をN回実施する。スケジューラは、次いで、
図5に示されているシストリックアレイ280を生成し、それは、A入力およびB入力から形成された行列の行列乗算を実施することを含む。
【0038】
この例では、4つの上PE、すなわち、PE00、01、02、および03は、Bオペランド行列からデータを受信し、4つの最左PE、すなわち、PE00、10、20、および30は、Aオペランド行列からデータを受信する。一実施形態では、スケジューラは、各個々のPEが他のPEと同時にその関数を実施するようにPEを同期させる同期信号を生成する。一実施形態では、PEは、各クロックサイクル中に入力を受信し、各クロックサイクル中に出力を与える。PEは、受信されたデータを処理するために1つのクロックサイクルを必要とするか、または、受信されたデータを処理するために複数のクロックサイクルを使用し得る。いずれの場合も、PEは、各クロックサイクル中に、受信されたデータに対して何らかの動作が実施されているようにスケジュールされ得る。
【0039】
一実施形態では、アレイ280中のPEは、バッファを使用してデータを交換する。たとえば、FIFOが、PEが矢印によって示されているようにデータを交換するロケーションの各々に配設され得る。その上、FIFOは、レイテンシを最小限に抑えるように平衡化されたデータフローチャネルの一部であり得る。一実施形態では、PEは、ソフトウェア定義ストリームクラスとして表現される。
【0040】
図5に示されているように、スケジューラは、スケジューラが並列化されたシストリックアレイ280に変換することができるシストリックアレイを定義するソフトウェアコード(たとえば、上記で説明された「forループ」)を受信することができる。たとえば、ユーザによって与えられたソフトウェア定義は、単一のPEまたはコアを含む表現を含むことができ、スケジューラは、それをアンパックして、
図5に示されているPEのシストリックアレイ280またはメッシュにする。
【0041】
図3に戻ると、ブロック315において、コンパイラは、高レベルコードをRTLコードにコンパイルし、RTLコードは、ニューラルネットワークのパイプラインのための静的スケジュールを提供する。一実施形態では、コンパイラは、RTLコードを生成するために、ブロック305において受信されたモデルとブロック310において受信されたシストリックアレイとに対応するソースコードを使用する。たとえば、コンパイラは、全体としてニューラルネットワーク全体をスケジュールすることを試みるのではなく、モデルまたは層設計において個々のブロックをスケジュールすることができる。
図4を参照すると、コンパイラは、スケジューリング処理を簡略化し、スケジューリングが収束する可能性を増加させるために、畳み込みユニット410と、最大プーリングユニット415と、ReLU425と、スケーリングユニット435とを別々にスケジュールすることができる。すなわち、個々のブロックをスケジュールすることによって、コンパイラは、ブロックを形成するハードウェアをスケジュールし、次いで、スケジューリングプロセスの上位レベルを実施するときにブロック間でデータを共有するためのデータフローチャネルを生成することができる。
【0042】
上位レベルにおける個々のブロックをスケジュールするとき、コンパイラは、ブロックを1つまたは複数のシストリックアレイに分割することができる。すなわち、シストリックアレイはスケジューリングの中間レベルを表し、スケジューリングの中間レベルは、上位レベルにおけるブロック、すなわち、アーキテクチャ記述400における関数ブロック(functional block)をさらに再分割する。一実施形態では、シストリックアレイは、(複数の乗算を実施することに依拠する畳み込みなどの)関数ブロック中で同一のプロセスが実施されているときに使用される。言い換えれば、畳み込みは同じPE(たとえば、同じMACブロック)を使用して実施され得るので、これらのPEは、並列に動作する多次元シストリックアレイ280に配列され得る。対照的に、一実施形態では、上位レベルにおけるブロック中での異なるプロセスは、データフローチャネルと接続され、シストリックアレイまたはメッシュを形成することなしにスケジューリングの下位レベル中にスケジュールされる。
【0043】
スケジューリングの下位レベル中に、コンパイラは、スケジュールの上位レベルおよび中間レベルにおいてプロセスおよび関数を形成するハードウェアブロックをスケジュールする。たとえば、
図4に示されているアーキテクチャ設計中のブロックと、シストリックアレイとを形成するPEは、ハードウェア要素に分割され得、ハードウェア要素は、次いで、コンパイラによってスケジュールされる。一実施形態では、スケジューラは、ハードウェア要素が入力オペランドを受信し、クロックサイクルごとに出力を作り出すように、これらの要素の動作をパイプライン化することができる。スケジューリングを複数のレベルに再分割することによって、コンパイラおよびスケジューラは、異なるブロック、ソフトウェア機能/方法、および処理要素が同時に動作するようにハードウェアシステムを構成するハードウェアレベルコード(たとえば、RTLコード)を生成することができる。
【0044】
図6は、一例による、デジタル信号処理ブロック中のパイプライン化PE600を示す。この実施形態では、PE600は、畳み込みを実施するためのMACブロック605であるが、任意の1つまたは複数のハードウェア要素であり得る。
図6では、MACブロック605は、単一のクロックサイクル中で実施され得ない浮動小数点動作(floating point operation)を実施する。したがって、HLSコンパイラが、この浮動小数点動作を、各々1つのクロックサイクル中で実施され得るサブ動作に分割することができる。ここで、浮動小数点動作は、最初に読取り動作610を実施し、後続の乗算動作615を実施し、後続の加算動作(addition operation)620と、書込み動作625とを実施することによって、4つのクロックサイクル中で実施され得る。
【0045】
第1のクロックサイクルにおいて、読取り動作610は、オペランドAおよびBを取り出す。第2のクロックサイクルにおいて、乗算動作(multiply operation)615は、AオペランドにBオペランドを乗算する。第3のクロックサイクルにおいて、加算動作620は、この乗算の結果を前の乗算に加算し、累算動作として働く。第4のクロックサイクルにおいて、書込み動作は、加算動作の結果(たとえば、出力C)をメモリに書き込む。このようにして、MACブロック605の全体的な動作は、各クロックサイクル中に完了され得る複数のステップに分割され得る。
【0046】
一実施形態では、動作610、615、620、および625を並列にまたは同時に実施するために、それらの動作は、FPGA中の異なるハードウェア要素によって実施される。すなわち、読取り動作610は第1のメモリインターフェースハードウェア要素によって実施され得、書込み動作625は第2のメモリインターフェースハードウェア要素によって実施される。これらのハードウェア要素が、別個のメモリから読み取り、別個のメモリに書き込むことを試みている(すなわち、FPGA中の異なるブロックRAM(BRAM)要素が、オペランドAおよびBならびに出力Cを記憶するように割り当てられる)限り、読取り動作610と書込み動作625とは、同時に実施され得る。同様に、乗算動作615と加算動作620とが同時に実施され得るように、乗算動作615は第1のDSPブロックによって実施され得、加算動作620は第2のDSPブロックによって実施される。
【0047】
図6は、7つのクロックサイクル(すなわち、サイクル1、2、3、4、5、6、および7)中のPE600のステータスを示し、PE600は、その7つのクロックサイクル中に、画像データ(すなわち、画像データ105A~D)の4つのチャンクまたはパケットを処理する。サイクル1中に、画像データ105Aに対応するオペランドAおよびBがFPGA中のメモリから読み取られる。サイクル2中に、画像データ105Bに対応するオペランドAおよびBがメモリから読み取られると同時に、画像データ105Aに対応するオペランドAおよびBが乗算される。サイクル3中に、画像データ105Bに対応するオペランドAおよびBが乗算され、画像データ105Cに対応するオペランドAおよびBがメモリから読み取られると同時に、画像データ105Aに対して乗算を実施した結果が加算動作620によって加算される。サイクル4によって、PE600を構築するハードウェア要素のすべてが同時に実行する。この例では、サイクル4において、画像データ105Bに対して乗算を実施した結果が加算され、画像データ105Cに対応するオペランドAおよびBが乗算され、画像データ105Dに対応するオペランドAおよびBがメモリから読み取られる間に、画像データ105Aについて加算を実施した結果がFPGAのメモリに書き込まれる。追加の画像データが利用可能である(すなわち、PE600によって処理される必要があるさらなる画像データがニューラルネットワークパイプライン中にある)限り、ハードウェア要素は同時に実行する。言い換えれば、コンパイラは、ハードウェア要素が同時に動作するように、FPGA中のハードウェア要素を使用してハードウェア要素をパイプラインにスケジュールすることができる。コンパイラは、スケジュールの上位レベル、中間レベル、および下位レベルにおいてすべてのハードウェア要素について同様のスケジューリングプロセスを実施することができるので、ニューラルネットワークパイプラインは、全体として、ハードウェア要素が同時に動作するようにスケジュールされ得る。
【0048】
方法300に戻ると、ブロック320において、コンピューティングデバイスは、ブロック315において生成されたRTLコードに従って、FPGA中でプログラマブルハードウェア論理を構成する。すなわち、コンピューティングデバイスは、
図6に示されているPEを実施するために選択されたハードウェア要素が同時に動作することができるようにFPGAを構成する。その上、RTLコードは、バッファを含み得るハードウェア要素間のデータフローチャネルを定義することができる。RTLが詳細に言及されているが、コンパイラ(または合成ツール)は、GPUまたはASICなどのハードウェアシステムにおいてニューラルネットワークを実行するときに静的スケジュールを提供する、任意の種類のハードウェアレベル設計を生成し得る。
【0049】
図7は、一例による、ニューラルネットワークを実装するためのシステム700を示すブロック図である。システム700は、コンピュータシステム702と、1つまたは複数のコンピュータシステム708とを含む。コンピュータシステム702は、1つまたは複数の設計ツール704を与えるソフトウェアを実行するように構成された従来のコンピューティング構成要素を含む。各コンピュータシステム708は、1つまたは複数のニューラルネットワーク710を実行する。(1つまたは複数の)ニューラルネットワーク710は、アプリケーション712と、アクセラレーションライブラリ714と、1つまたは複数のハードウェアアクセラレータ716とを使用して実装される。
【0050】
一例では、(1つまたは複数の)ハードウェアアクセラレータ716は、FPGAなどのプログラマブルICを含む。アクセラレーションライブラリ714は、(1つまたは複数の)ハードウェアアクセラレータ716とインターフェースするためのアプリケーションプログラミングインターフェース(API)を与える。アクセラレーションライブラリ714はまた、ニューラルネットワーク層および他のタイプのニューラルネットワーク構造のあらかじめ定義されたおよび最適化された実装形態を含む、ニューラルネットワーク機能を与えるライブラリを含むことができる。したがって、(1つまたは複数の)ニューラルネットワーク710は、(1つまたは複数の)ハードウェアアクセラレータ716において実装されるハードウェア部分、ならびに、アクセラレーションライブラリ714において実装されるソフトウェア部分の両方を含むことができる。アプリケーション712は、(1つまたは複数の)ニューラルネットワーク710を実装するように(1つまたは複数の)ハードウェアアクセラレータ716をプログラムし、制御するためにアクセラレーションライブラリ714のAPIを起動する。
【0051】
設計者は、(1つまたは複数の)ニューラルネットワーク710を定義するために(1つまたは複数の)設計ツール704と対話する。(1つまたは複数の)設計ツール704は、(1つまたは複数の)ハードウェアアクセラレータ716をプログラムするためのファイル(たとえば、FPGAのための構成ビットストリーム)と、アクセラレーションライブラリ714を与えるファイルと、アプリケーション712を与えるファイルとを生成することができる。設計者は、レジスタ転送言語(RTL)を使用して、あるいは、C、C++、OpenCLなどのプログラミング言語、またはRTLと(1つまたは複数の)プログラマブル言語との組合せを使用して、(1つまたは複数の)ニューラルネットワーク710のハードウェア部分を定義することができる。ユーザは、C、C++、OpenCLなどのプログラミング言語を使用して、(1つまたは複数の)ニューラルネットワーク710のソフトウェア部分を定義することができる。(1つまたは複数の)設計ツール704は、(1つまたは複数の)ハードウェアアクセラレータ716をプログラムするためのファイルと、アクセラレーションライブラリ714のためのライブラリファイルとを生成するために、ソフトウェア定義されたニューラルネットワークをコンパイルする。設計者は、(1つまたは複数の)ニューラルネットワーク710のハードウェア部分およびソフトウェア部分を開発するのを支援するために、クラスライブラリ、テンプレートライブラリなどを与えるライブラリ706を活用することができる。
【0052】
ユーザは、プログラミング言語(たとえば、C、C++、Pythonなど)を使用してアプリケーション712を定義することができる。ユーザは、Caffe、TensorFlow、MXNetなど、ニューラルネットワークフレームワークおよびライブラリを活用することができる。
【0053】
図8は、一例による、コンピューティングシステム708を示すブロック図である。コンピューティングシステム708は、ハードウェア804と、ハードウェア804上で実行するソフトウェア806とを含む。ハードウェア804は、処理システム810と、システムメモリ816と、ストレージデバイス(「ストレージ818」)と、ハードウェアアクセラレータ716とを含む。ソフトウェア806は、オペレーティングシステム(OS)844と、アクセラレーションライブラリ714と、アプリケーション712とを含む。
【0054】
処理システム810は、マイクロプロセッサ812と、サポート回路814と、周辺バス815とを含む。マイクロプロセッサ812は、x86ベースプロセッサ、ARM(登録商標)ベースプロセッサなど、任意のタイプの汎用中央処理ユニット(CPU)であり得る。マイクロプロセッサ812は、1つまたは複数のコアと、関連する回路要素(たとえば、キャッシュメモリ、メモリ管理ユニット(MMU)、割込みコントローラなど)とを含むことができる。マイクロプロセッサ812は、本明細書で説明される1つまたは複数の動作を実施するプログラムコードを実行するように構成され、それらのプログラムコードは、システムメモリ816および/またはストレージ818に記憶され得る。サポート回路814は、マイクロプロセッサ812と協働して、マイクロプロセッサ812、システムメモリ816、ストレージ818、ハードウェアアクセラレータ716、または任意の他の周辺デバイスの間のデータフローを管理する、様々なデバイスを含む。たとえば、サポート回路814は、チップセット(たとえば、ノースブリッジ、サウスブリッジ、プラットフォームホストコントローラなど)、電圧調節器、ファームウェア(たとえば、BIOS)などを含むことができる。サポート回路814は、マイクロプロセッサ812と周辺バス815との間のデータフローを管理し、そこにハードウェアアクセラレータ716などの様々な周辺機器が接続される。いくつかの例では、マイクロプロセッサ812は、チップセット(たとえば、ノースブリッジ、サウスブリッジなど)の機能性の全部または実質的部分を吸収する、システムインパッケージ(SiP)、システムオンチップ(SoC)などであり得る。周辺バスは、周辺構成要素相互接続エクスプレス(PCIe)など、拡張バス規格を実装することができる。本例では、処理システム810は、ハードウェアアクセラレータ716とは別個に示されている。以下でさらに説明される他の例では、処理システム810とハードウェアアクセラレータ716とは、システムオンチップ(SoC)を使用して同じIC上に実装され得る。
【0055】
システムメモリ816は、実行可能な命令およびデータなどの情報が記憶され、取り出されることを可能にするデバイスである。システムメモリ816は、たとえば、ダブルデータレート(DDR)ダイナミックRAM(DRAM)など、1つまたは複数のランダムアクセスメモリ(RAM)モジュールを含むことができる。ストレージデバイス818は、ローカルストレージデバイス(たとえば、1つまたは複数のハードディスク、フラッシュメモリモジュール、ソリッドステートディスク、および光ディスク)、および/またはコンピューティングシステム708が1つまたは複数のネットワークデータストレージシステムと通信することを可能にするストレージインターフェースを含む。ハードウェア804は、グラフィックスカード、ユニバーサルシリアルバス(USB)インターフェースなど、コンピューティングシステムの様々な他の従来のデバイスおよび周辺機器を含むことができる。
【0056】
ハードウェアアクセラレータ716は、プログラマブルIC828と、不揮発性メモリ824と、RAM826とを含む。プログラマブルIC828は、FPGAなど、またはFPGAを有するSoCなどであり得る。NVM824は、フラッシュメモリなど、任意のタイプの不揮発性メモリを含むことができる。RAM826は、DDR DRAMなどを含むことができる。プログラマブルIC828は、NVM824およびRAM826に連結される。プログラマブルIC828は、処理システム810の周辺バス815にも連結される。
【0057】
OS844は、Linux(登録商標)、Microsoft Windows(登録商標)、Mac OS(登録商標)など、当技術分野において知られている任意のコモディティオペレーティングシステムであり得る。アクセラレーションライブラリ714は、ハードウェアアクセラレータ716のコマンドおよび制御のためのAPIを与えるドライバおよびライブラリを含む。アプリケーション712は、(1つまたは複数の)ニューラルネットワークを実装するためにアクセラレーションライブラリ714のAPIを起動する、マイクロプロセッサ812上で実行するソフトウェアを含む。
【0058】
動作中、プログラマブルIC828は、アクセラレーション回路830(たとえば、ニューラルネットワークアクセラレーション回路またはカーネルアクセラレーション回路)で構成される。アクセラレーション回路830は、概して、ベースプラットフォーム830Aとカーネル830Bとを含む。たとえば、アクセラレーション回路830は、静的領域834とプログラマブル領域836とを使用して実装され得る。静的領域834は、周辺バス815と、NVM824と、RAM826とにインターフェースを与えるためのサポート回路840を含む。プログラマブル領域836は、1つまたは複数のカーネル回路(「(1つまたは複数の)カーネル838」)を含むことができる。ベースプラットフォーム830Aは静的領域834を使用して実装され、カーネル830Bはプログラマブル領域836を使用して実装される。別の例では、ベースプラットフォーム830Aはまた、プログラマブル領域836の一部分を使用して実装され得る。したがって、いくつかの例では、プログラマブル領域836は、いくつかのインターフェース回路をも含む。いくつかの例では、アクセラレーション回路830は、それらの各々が個々に(1つまたは複数の)カーネル838で構成され得る、2つ以上のプログラマブル領域836を含むことができる。
【0059】
静的領域834は、静的領域834の回路要素がプログラマブル領域836の再構成にわたって不変のままであるという点で「静的」であり、上記で説明された静的スケジューリングとは異なる。一例では、サポート回路840は、PCIeエンドポイント回路、ダイレクトメモリアクセス(DMA)コントローラ、相互接続、メモリコントローラ、メモリインターフェース回路(たとえば、DDRインターフェース)、(部分再構成をサポートするための)デカップラ回路、フラッシュプログラマー、デバッグ回路などを含む。いくつかの例では、プログラマブル領域836は、サポート回路840のいずれをも含まない。他の例では、いくつかのサポート回路は、プログラマブル領域836において実装される。そのような場合、プログラマブル領域836は「拡張されたプログラマブル領域」と呼ばれることがある。いずれの場合も、一例では、PCIe回路およびDMA回路など、いくつかのサポート回路840は、常に、静的領域834中に存在する。
【0060】
図9は、一例による、アクセラレーション回路830を示すブロック図である。アクセラレーション回路830は、サポート回路840とカーネル838とを含む。本例では、サポート回路840は、PCIeエンドポイント回路(「PCIeエンドポイント902」)と、PCIe DMAコントローラ904と、相互接続回路(「相互接続906」)と、メモリコントローラ910と、メモリインターフェース912とを含む。サポート回路840は、明快のために省略される他の回路(たとえば、デカップラ回路、デバッグ回路など)を含むことができる。PCIeエンドポイント902は、周辺バス815への物理インターフェースを与える。PCIe DMAコントローラ904は、RAM826とカーネル838とへのDMA動作を容易にする。相互接続906は、PCIe DMAコントローラ904をメモリコントローラ910とカーネル838とに連結する。メモリコントローラ910はメモリインターフェース912に連結される。メモリインターフェース912はRAM826に連結される。
【0061】
動作中、アクセラレーションライブラリ714は、PCIe DMAコントローラ904を通してRAM826に直接アクセスすることができる。アクセラレーションライブラリ714はまた、PCIe DMAコントローラ904を通してカーネル838にアクセスすることができる。カーネル838は、メモリコントローラ910を通してRAM826にアクセスすることができる。データは、システムメモリ816とRAM826との間のDMA動作を使用して、ソフトウェア806とカーネル838との間で交換され得る。
【0062】
本例では、カーネル838は、相互接続906と通信するためにインターフェース930、931、および932を使用する。特に、これらのインターフェースは、第1の読取りインターフェース930と、第2の読取りインターフェース931と、読取り/書込みインターフェース932とを含み得る。たとえば、読取りインターフェース930は、カーネル838を制御するための制御インターフェースとして使用され得る。読取りインターフェース931は、メモリインターフェース912のうちの第1のメモリインターフェースを通してRAM826から読み取るために使用され得る。読取り/書込みインターフェース932は、メモリインターフェース912のうちの第2のメモリインターフェースを通してRAM826からの読取りおよび書込みを行うために使用され得る。
【0063】
カーネル838は、相互接続インターフェース940と、制御論理942と、処理回路941とを含む。処理回路941は、IM2COL回路(「IM2COL944」)と、読取り制御回路(「読取り制御946」)と、マルチプレクサ956と、先入れ先出し回路(「FIFO958」)と、算出アレイ962と、スケーラ回路(ReLU活性化回路などの「スケーラ964」)と、最大プール回路(「最大プール966」)と、マルチプレクサ968と、FIFO954と、書込み制御回路(「書込み制御952」)と、キャッシュ948と、読取り制御回路(「読取り制御950」)と、FIFO960とを含む。相互接続インターフェース940は、インターフェース930、931、および932と、制御論理942と、処理回路941とに連結される。相互接続インターフェース940は、制御論理942とインターフェース930との間の通信、ならびに処理回路941とインターフェース931および932との間の通信を容易にするための、スイッチ、クロック変換器などを含むことができる。
【0064】
本例では、相互接続インターフェース940は、IM2COL回路944の入力と、読取り制御回路946の入力と、キャッシュ948の入力と、書込み制御回路952の入力とに連結される。IM2COL回路944の出力と、読取り制御回路946の出力とが、マルチプレクサ956の入力に連結される。マルチプレクサ956の出力がFIFO958の入力に連結される。FIFO958の出力が算出アレイ962の第1の入力に連結される。キャッシュ948の出力が読取り制御回路950の入力に連結される。読取り制御回路950の出力がFIFO960の入力に連結される。FIFO960の出力が算出アレイ962の第2の入力に連結される。算出アレイ962の出力がスケーラ964の入力に連結される。スケーラ964の出力が、最大プール回路966の入力とマルチプレクサ968の入力とに連結される。最大プール回路966の出力がマルチプレクサ968の別の入力に連結される。マルチプレクサ968の出力がFIFO954の入力に連結される。FIFO954の出力が書込み制御回路952に連結される。
【0065】
動作中、算出アレイ962は、ニューラルネットワークを実装するための行列乗算動作を実施する。算出アレイ962の入力は、FIFO958から入力活性化行列を受信し、FIFO960から重み行列を受信する。入力活性化行列は、読取り制御回路946を使用してRAM826から直接読み取られ得る。代替的に、入力活性化は、RAM826から読み取られ、算出アレイ962への入力のためにIM2COL回路944によって処理され得る。IM2COL回路944の実施形態が以下で説明される。重み行列は、読取り制御回路950によってRAM826から読み取られ、キャッシュ948中にキャッシュされ得る。スケーラ964は、算出アレイ962の出力をスケーリングすることができる。最大プール回路966は、算出アレイ962のスケーリングされた出力に対する最大プーリング関数を実装することができる。一例では、最大プール回路966は、CLBまたは他の構成可能な論理を使用して実装される。最大プール回路966の出力またはスケーラ964の出力のいずれかがFIFO954に記憶され得る。書込み制御回路952は、FIFO中のデータをRAM826に書き込む。制御論理942は、IM2COL回路944、読取り制御回路946、マルチプレクサ956および968、読取り制御回路950、ならびにスケーラ964、最大プール回路966、ならびに書込み制御回路952など、処理回路941中の様々な回路を制御する。
【0066】
図10は、一例による、プログラマブルIC828を示すブロック図である。プログラマブルIC828は、プログラマブル論理3と、構成論理25と、構成メモリ26とを含む。プログラマブルIC828は、NVM824、RAM826、および他の回路29など、外部回路に連結され得る。プログラマブル論理3は、論理セル30と、サポート回路31と、プログラマブル相互接続32とを含む。論理セル30は、複数の入力の一般的な論理関数を実装するように構成され得る回路を含む。サポート回路31は、トランシーバ、入出力ブロック、デジタル信号プロセッサ、メモリなどの専用の回路を含む。論理セルとサポート回路31とは、プログラマブル相互接続32を使用して相互接続され得る。論理セル30をプログラムするための情報と、サポート回路31のパラメータを設定するための情報と、プログラマブル相互接続32をプログラムするための情報とが、構成論理25によって構成メモリ26に記憶される。構成論理25は、不揮発性メモリ824または任意の他のソース(たとえば、DRAM28または他の回路29)から構成データを取得することができる。いくつかの例では、プログラマブルIC828は処理システム2を含む。処理システム2は、(1つまたは複数の)マイクロプロセッサ、メモリ、サポート回路、IO回路などを含むことができる。たとえば、処理システム2は、処理システム810と同様の回路を含むことができる。いくつかの例では、処理システム2は、処理システム810の代わりに使用され得る。そのような場合、コンピューティングシステム708全体がプログラマブルIC828を使用して実装され得、ソフトウェア806は処理システム2上で実行する。
【0067】
図11は、トランシーバ37、CLB33、BRAM34、入出力ブロック(「IOB」)36、構成およびクロッキング論理(「CONFIG/CLOCKS」)42、DSPブロック35、特殊な入出力ブロック(「I/O」)41(たとえば、構成ポートおよびクロックポート)、ならびにデジタルクロックマネージャ、アナログデジタル変換器、システム監視論理などの他のプログラマブル論理39を含む、多数の異なるプログラマブルタイルを含むプログラマブルIC828のFPGA実装形態を示す。FPGAはまた、PCIeインターフェース40、アナログデジタル変換器(ADC)38などを含むことができる。
【0068】
いくつかのFPGAでは、各プログラマブルタイルは、
図11の上部に含まれる例によって示されているように、同じタイル内のプログラマブル論理要素の入力および出力端子48への接続を有する少なくとも1つのプログラマブル相互接続要素(「INT」)43を含むことができる。各プログラマブル相互接続要素43は、同じタイルまたは(1つまたは複数の)他のタイル中の(1つまたは複数の)隣接するプログラマブル相互接続要素の相互接続セグメント49への接続をも含むことができる。各プログラマブル相互接続要素43は、論理ブロック(図示せず)間の一般的なルーティングリソースの相互接続セグメント50への接続をも含むことができる。一般的なルーティングリソースは、相互接続セグメント(たとえば、相互接続セグメント50)のトラックを備える論理ブロック(図示せず)と、相互接続セグメントを接続するためのスイッチブロック(図示せず)との間のルーティングチャネルを含むことができる。一般的なルーティングリソースの相互接続セグメント(たとえば、相互接続セグメント50)は、1つまたは複数の論理ブロックにわたることができる。一般的なルーティングリソースとともにとられるプログラマブル相互接続要素43は、示されているFPGAのためのプログラマブル相互接続構造(「プログラマブル相互接続」)を実装する。
【0069】
例示的な一実装形態では、CLB33は、ユーザ論理を実装するようにプログラムされ得る構成可能論理要素(「CLE」)44と、単一のプログラマブル相互接続要素(「INT」)43とを含むことができる。BRAM34は、1つまたは複数のプログラマブル相互接続要素に加えてBRAM論理要素(「BRL」)45を含むことができる。典型的には、タイル中に含まれる相互接続要素の数は、タイルの高さに依存する。描かれている例では、BRAMタイルは、5つのCLBと同じ高さを有するが、他の数(たとえば、4つ)も使用され得る。DSPタイル35は、適切な数のプログラマブル相互接続要素に加えてDSP論理要素(「DSPL」)46を含むことができる。IOB36は、たとえば、プログラマブル相互接続要素43の1つのインスタンスに加えて入出力論理要素(「IOL」)47の2つのインスタンスを含むことができる。当業者に明らかになるように、たとえばI/O論理要素47に接続される実際のI/Oパッドは、典型的に、入出力論理要素47のエリアに制限されない。
【0070】
描かれている例では、(
図11に示されている)ダイの中心の近くの水平方向のエリアが、構成、クロック、および他の制御論理のために使用される。この水平方向のエリアまたは列から延びる垂直方向の列51が、FPGAの幅にわたってクロックおよび構成信号を分散させるために使用される。
【0071】
図11に示されているアーキテクチャを利用するいくつかのFPGAは、FPGAの大部分を構築する規則的な列状構造を損なう追加の論理ブロックを含む。追加の論理ブロックは、プログラマブルブロックおよび/または専用の論理であり得る。
【0072】
図11は、例示的なFPGAアーキテクチャを示すことを意図されているにすぎないことに留意されたい。たとえば、1つの行中の論理ブロックの数、行の相対幅、行の数および順序、行中に含まれる論理ブロックのタイプ、論理ブロックの相対サイズ、および
図11の上部に含まれる相互接続/論理実装形態は、例にすぎない。たとえば、実際のFPGAでは、ユーザ論理の効率的な実装を容易にするために、CLBが現れるところならどこでも、CLBの2つ以上の隣接する行が典型的に含まれるが、隣接するCLB行の数は、FPGAの全体的なサイズによって変動する。
【0073】
本発明の様々な実施形態の説明は、例示の目的で提示されており、網羅的なものでも、開示される実施形態に限定されるものでもない。説明される実施形態の範囲および趣旨から逸脱することなく、多くの修正および変形が当業者に明らかになるであろう。本明細書で使用される用語は、実施形態の原理、実際的適用例、または市場で見られる技術に対する技術的改善を最も良く説明するために、あるいは、他の当業者が本明細書で開示される実施形態を理解することを可能にするために選定された。
【0074】
上記では、本開示において提示される実施形態への言及が行われた。しかしながら、本開示の範囲は、特定の説明される実施形態に限定されない。代わりに、本明細書で説明される特徴および要素の任意の組合せが、異なる実施形態に関係するか否かにかかわらず、企図された実施形態を実装および実施するために企図される。さらに、本明細書で開示される実施形態は、他の可能な解決策または従来技術に勝る利点を達成し得るが、特定の利点が所与の実施形態によって達成されるか否かは、本開示の範囲を限定するものではない。したがって、本明細書で説明される態様、特徴、実施形態および利点は、例示的なものにすぎず、(1つまたは複数の)請求項において明示的に具陳されている場合を除いて、添付の特許請求の範囲の要素または限定と見なされない。同様に、「本発明」への言及は、本明細書で開示される発明の主題の一般化と解釈されるものではなく、(1つまたは複数の)請求項において明示的に具陳されている場合を除いて、添付の特許請求の範囲の要素または限定であると見なされるものではない。
【0075】
本明細書で説明される態様は、完全にハードウェアの実施形態、(ファームウェア、常駐ソフトウェア、マイクロコードなどを含む)完全にソフトウェアの実施形態、またはソフトウェア態様とハードウェア態様とを組み合わせる実施形態の形態をとり得、これらはすべて、本明細書では概して「モジュール」または「システム」と呼ばれることがある。
【0076】
本発明は、システム、方法、および/またはコンピュータプログラム製品であり得る。コンピュータプログラム製品は、プロセッサに本発明の態様を行わせるためのコンピュータ可読プログラム命令をその上に有する(1つまたは複数の)コンピュータ可読記憶媒体を含み得る。
【0077】
コンピュータ可読記憶媒体は、命令実行デバイスによる使用のための命令を保持および記憶することができる有形デバイスであり得る。コンピュータ可読記憶媒体は、たとえば、限定はしないが、電子ストレージデバイス、磁気ストレージデバイス、光ストレージデバイス、電磁ストレージデバイス、半導体ストレージデバイス、または上記の任意の好適な組合せであり得る。コンピュータ可読記憶媒体のより具体的な例の非網羅的なリストは、ポータブルコンピュータディスケット、ハードディスク、ランダムアクセスメモリ(RAM)、読取り専用メモリ(ROM)、消去可能プログラマブル読取り専用メモリ(EPROMまたはフラッシュメモリ)、スタティックランダムアクセスメモリ(SRAM)、ポータブルコンパクトディスク読取り専用メモリ(CD-ROM)、デジタル多用途ディスク(DVD)、メモリスティック、フロッピーディスク、パンチカードまたは命令が記録された溝における隆起構造など、機械的に符号化されたデバイス、および上記の任意の好適な組合せを含む。本明細書で使用されるコンピュータ可読記憶媒体は、電波または他の自由に伝搬する電磁波、導波路または他の伝送媒体中を伝搬する電磁波(たとえば、光ファイバーケーブルを通過する光パルス)、あるいはワイヤを通して送信される電気信号など、それ自体が一時的信号であると解釈されるべきではない。
【0078】
本明細書で説明されるコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体からそれぞれのコンピューティング/処理デバイスに、あるいはネットワーク、たとえば、インターネット、ローカルエリアネットワーク、ワイドエリアネットワークおよび/またはワイヤレスネットワークを介して外部コンピュータまたは外部ストレージデバイスにダウンロードされ得る。ネットワークは、銅伝送ケーブル、光伝送ファイバー、ワイヤレス送信、ルータ、ファイアウォール、スイッチ、ゲートウェイコンピュータおよび/またはエッジサーバを備え得る。各コンピューティング/処理デバイス中のネットワークアダプタカードまたはネットワークインターフェースは、ネットワークからコンピュータ可読プログラム命令を受信し、そのコンピュータ可読プログラム命令を、それぞれのコンピューティング/処理デバイス内のコンピュータ可読記憶媒体に記憶するためにフォワーディングする。
【0079】
本発明の動作を行うためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セットアーキテクチャ(ISA)命令、機械命令、機械依存命令、マイクロコード、ファームウェア命令、状態設定データ、あるいは、Smalltalk、C++などのオブジェクト指向プログラミング言語、および「C」プログラミング言語または同様のプログラミング言語などの従来の手続き型プログラミング言語を含む1つまたは複数のプログラミング言語の任意の組合せで書き込まれたソースコードまたはオブジェクトコードのいずれかであり得る。コンピュータ可読プログラム命令は、完全にユーザのコンピュータ上で、部分的にユーザのコンピュータ上で、スタンドアロンソフトウェアパッケージとして、部分的にユーザのコンピュータ上でおよび部分的にリモートコンピュータ上で、あるいは完全にリモートコンピュータまたはサーバ上で実行し得る。後者のシナリオでは、リモートコンピュータは、ローカルエリアネットワーク(LAN)またはワイドエリアネットワーク(WAN)を含む任意のタイプのネットワークを通してユーザのコンピュータに接続され得るか、あるいは接続は、(たとえば、インターネットサービスプロバイダを使用してインターネットを通して)外部コンピュータに対して行われ得る。いくつかの実施形態では、たとえば、プログラマブル論理回路要素、フィールドプログラマブルゲートアレイ(FPGA)、またはプログラマブル論理アレイ(PLA)を含む電子回路要素が、本発明の態様を実施するために、電子回路要素を個人化するためにコンピュータ可読プログラム命令の状態情報を利用することによって、コンピュータ可読プログラム命令を実行し得る。
【0080】
本発明の態様が、本発明の実施形態による方法、装置(システム)、およびコンピュータプログラム製品のフローチャートの例示図および/またはブロック図を参照しながら本明細書で説明された。フローチャートの例示図および/またはブロック図の各ブロック、ならびにフローチャートの例示図および/またはブロック図中のブロックの組合せが、コンピュータ可読プログラム命令によって実装され得ることを理解されよう。
【0081】
これらのコンピュータ可読プログラム命令は、汎用コンピュータ、専用コンピュータ、または機械を製造するための他のプログラマブルデータ処理装置のプロセッサに与えられ得、その結果、コンピュータまたは他のプログラマブルデータ処理装置のプロセッサを介して実行する命令は、フローチャートおよび/またはブロック図の1つまたは複数のブロックにおいて指定された関数/行為を実装するための手段を作成する。これらのコンピュータ可読プログラム命令はまた、コンピュータ、プログラマブルデータ処理装置、および/または他のデバイスに特定の様式で機能するように指示することができるコンピュータ可読記憶媒体に記憶され得、その結果、命令が記憶されたコンピュータ可読記憶媒体は、フローチャートおよび/またはブロック図の1つまたは複数のブロックにおいて指定された関数/行為の態様を実装する命令を含む製造品を備える。
【0082】
コンピュータ可読プログラム命令はまた、コンピュータ実装プロセスを作り出すために、一連の動作ステップをコンピュータ、他のプログラマブルデータ処理装置または他のデバイス上で実施させるように、コンピュータ、他のプログラマブル装置、または他のデバイスにロードされ得、その結果、コンピュータ、他のプログラマブル装置、または他のデバイス上で実行する命令は、フローチャートおよび/またはブロック図の1つまたは複数のブロックにおいて指定された関数/行為を実装する。
【0083】
図中のフローチャートおよびブロック図は、本発明の様々な実施形態によるシステム、方法、およびコンピュータプログラム製品の可能な実装形態のアーキテクチャ、機能性、および動作を示す。この点について、フローチャートまたはブロック図中の各ブロックは、(1つまたは複数の)指定された論理関数を実装するための1つまたは複数の実行可能な命令を備える、命令のモジュール、セグメント、または部分を表し得る。いくつかの代替実装形態では、ブロック中で言及される関数は、図中で言及される順序から外れて行われ得る。たとえば、関与する機能性に応じて、連続して示されている2つのブロックが、事実上、実質的に同時に実行され得るか、またはブロックが、時々、逆の順序で実行され得る。また、ブロック図および/またはフローチャートの例示図の各ブロック、ならびにブロック図および/またはフローチャートの例示図中のブロックの組合せが、指定された関数または行為を実施するかあるいは専用ハードウェアとコンピュータ命令との組合せを行う専用ハードウェアベースシステムによって実装され得ることに留意されたい。
【0084】
非限定的な例のリスティングが以下で提供される。
【0085】
一例では、ニューラルネットワークをスケジュールするための方法が提供される。そのような方法は、ニューラルネットワーク中の少なくとも1つの層を実行するときに実施される複数のパイプライン化関数の連続した順序を定義するモデルを受信することであって、ニューラルネットワークが複数の層を備える、複数のパイプライン化関数の連続した順序を定義するモデルを受信することと、
ニューラルネットワークの少なくとも1つの層において同一のプロセスを実行するためのシストリックアレイを受信することと、1つまたは複数のコンピューティングプロセッサを使用して、モデルおよびシストリックアレイに対応するソースコードを、ハードウェアシステムにおいてニューラルネットワークを実行するときに静的スケジュールを提供するハードウェアレベル設計にコンパイルすることとを含み得る。
【0086】
あるそのような方法は、ハードウェアレベル設計に基づいてフィールドプログラマブルゲートアレイ(FPGA)を構成することであって、ハードウェアレベル設計がレジスタ転送レベル(RTL)コードを含む、フィールドプログラマブルゲートアレイ(FPGA)を構成することをさらに含み得る。
【0087】
あるそのような方法では、シストリックアレイのソースコードをコンパイルすることは、シストリックアレイのソースコードを、相互接続された処理要素の2次元アレイに変換することを含み得る。
【0088】
あるそのような方法では、シストリックアレイのソースコードをコンパイルすることは、相互接続された処理要素の各々によって実施される複数の動作を識別することであって、相互接続された処理要素の各々が同じ複数の動作を実施する、複数の動作を識別することと、複数の動作が同時に機能することが可能であり得るように、複数の動作をハードウェアシステム中の異なるハードウェア要素に割り当てることとを含み得る。
【0089】
あるそのような方法では、モデルは、複数のパイプライン化関数の連続した順序を示すソフトウェア定義並列化プラグマを含み得る。
【0090】
あるそのような方法では、モデルに対応するソースコードは、ニューラルネットワークのためのアンタイムド関数コードを含む。
【0091】
あるそのような方法では、複数のパイプライン化関数は、畳み込みユニット、プーリングユニット、およびデータを複数のパイプライン化関数における活性化ユニットに送信する行列乗算器のうちの少なくとも1つを含む。
【0092】
別の例では、1つまたは複数の処理デバイス上で実行されたとき、ニューラルネットワークをスケジュールするための動作を実施する命令を記憶する非一時的コンピュータ可読記憶媒体が提供され得る。動作は、ニューラルネットワーク中の少なくとも1つの層を実行するときに実施される複数のパイプライン化関数の連続した順序を定義するモデルを受信することであって、ニューラルネットワークが複数の層を備える、複数のパイプライン化関数の連続した順序を定義するモデルを受信することと、ニューラルネットワークの少なくとも1つの層において同一のプロセスを実行するためのシストリックアレイを受信することと、モデルおよびシストリックアレイに対応するソースコードを、ハードウェアシステムにおいてニューラルネットワークを実行するときに静的スケジュールを提供するハードウェアレベル設計にコンパイルすることとを含み得る。
【0093】
そのようなコンピュータ可読記憶媒体では、動作は、ハードウェアレベル設計に基づいてフィールドプログラマブルゲートアレイ(FPGA)を構成することであって、ハードウェアレベル設計がレジスタ転送レベル(RTL)コードを含む、フィールドプログラマブルゲートアレイ(FPGA)を構成することをさらに含み得る。
【0094】
そのようなコンピュータ可読記憶媒体では、シストリックアレイのソースコードをコンパイルすることは、シストリックアレイのソースコードを、相互接続された処理要素の2次元アレイに変換することを含み得る。
【0095】
そのようなコンピュータ可読記憶媒体では、シストリックアレイのソースコードをコンパイルすることは、相互接続された処理要素の各々によって実施される複数の動作を識別することであって、相互接続された処理要素の各々が同じ複数の動作を実施する、複数の動作を識別することと、複数の動作が同時に機能することが可能であり得るように、複数の動作をハードウェアシステム中の異なるハードウェア要素に割り当てることとを含み得る。
【0096】
そのようなコンピュータ可読記憶媒体では、モデルは、複数のパイプライン化関数の連続した順序を示すソフトウェア定義並列化プラグマを含み得る。
【0097】
そのようなコンピュータ可読記憶媒体では、モデルに対応するソースコードは、ニューラルネットワークのためのアンタイムド関数コードを含む。
【0098】
そのようなコンピュータ可読記憶媒体では、複数のパイプライン化関数は、畳み込みユニット、プーリングユニット、およびデータを複数のパイプライン化関数における活性化ユニットに送信する行列乗算器のうちの少なくとも1つを含む。
【0099】
別の例では、コンピューティングシステムが提供され得る。そのようなコンピューティングシステムは、プロセッサと、コンパイラを備えるメモリとを含み得、コンパイラは、プロセッサによって実行されたとき、ニューラルネットワーク中の少なくとも1つの層を実行するときに実施される複数のパイプライン化関数の連続した順序を定義するモデルを受信することであって、ニューラルネットワークが複数の層を備える、複数のパイプライン化関数の連続した順序を定義するモデルを受信することと、ニューラルネットワークの少なくとも1つの層において同一のプロセスを実行するためのシストリックアレイを受信することと、モデルおよびシストリックアレイに対応するソースコードを、ハードウェアシステムにおいてニューラルネットワークを実行するときに静的スケジュールを提供するハードウェアレベル設計にコンパイルすることとを含む動作を実施する。
【0100】
あるそのようなコンピューティングシステムでは、動作は、ハードウェアレベル設計に基づいてフィールドプログラマブルゲートアレイ(FPGA)を構成することであって、ハードウェアレベル設計がレジスタ転送レベル(RTL)コードを含む、フィールドプログラマブルゲートアレイ(FPGA)を構成することをさらに含み得る。
【0101】
そのようなコンピューティングシステムでは、シストリックアレイのソースコードをコンパイルすることは、シストリックアレイのソースコードを、相互接続された処理要素の2次元アレイに変換することを含む。
【0102】
そのようなコンピューティングシステムでは、シストリックアレイのソースコードをコンパイルすることは、相互接続された処理要素の各々によって実施される複数の動作を識別することであって、相互接続された処理要素の各々が同じ複数の動作を実施する、複数の動作を識別することと、複数の動作が同時に機能できるように、複数の動作をハードウェアシステム中の異なるハードウェア要素に割り当てることとを含み得る。
【0103】
あるそのようなコンピューティングシステムでは、モデルは、複数のパイプライン化関数の連続した順序を示すソフトウェア定義並列化プラグマを含み得る。
【0104】
あるそのようなコンピューティングシステムでは、モデルに対応するソースコードは、ニューラルネットワークのためのアンタイムド関数コードを含み得る。
【0105】
上記は特定の例を対象とするが、他のおよびさらなる例がその基本的範囲から逸脱することなく考案され得、その範囲は以下の特許請求の範囲によって決定される。