(57)【要約】  開示される回路は、ＲＡＭ回路（４０４、４０６）と、メモリコントローラ（４０２）と、処理回路のアレイ（４０８、４１０）とを含む。各ＲＡＭ回路は読出しポートおよび書込みポートを含む。メモリコントローラは、ＲＡＭ回路内のテンソルバッファ（４１２、４１４、４１６、４１８）のバンク内に配置されたテンソルデータにアクセスする。メモリコントローラは、共有の読出し制御信号線（共有の読出しアドレス線および共有の読出しイネーブル信号線）によって各読出しポートに結合され、共有の書込みアドレス線によって各書込みポートに結合される。メモリコントローラは、複数の書込みイネーブル信号線のそれぞれのサブセットによって複数のＲＡＭ回路の各々の少なくとも１つの書込みポートに結合される。メモリコントローラは、テンソルバッファのうちの異なるテンソルバッファに異なる時間にアクセスするための読出し制御信号および書込み制御信号を生成する。処理回路のアレイはＲＡＭ回路に結合される。アレイはテンソルデータに対してテンソル演算を実行するための処理回路の複数の行および複数の列を含む。処理回路の各アレイ内の各行の処理回路は、テンソルデータの同一の部分を受信するように結合される。
2021518601.tif 000002
【特許請求の範囲】
【請求項１】
回路構成であって、
複数のＲＡＭ回路を備え、各ＲＡＭ回路は少なくとも１つの読出しポートおよび少なくとも１つの書込みポートを含み、前記回路構成はさらに、
メモリコントローラを備え、前記メモリコントローラは、前記複数のＲＡＭ回路内のテンソルバッファの複数のバンク内に配置されたテンソルデータにアクセスするように構成され、共有の読出しアドレスバスと共有の読出しイネーブル信号線とによって前記複数のＲＡＭ回路の各々の前記少なくとも１つの読出しポートに結合され、共有の書込みアドレスバスと複数の書込みイネーブル信号線のそれぞれのサブセットとによって前記複数のＲＡＭ回路の各々の前記少なくとも１つの書込みポートに結合され、前記メモリコントローラはさらに、前記複数のＲＡＭ回路内の前記テンソルバッファのうちの異なるテンソルバッファに異なる時間にアクセスするための読出しアドレス、読出しイネーブル信号、書込みアドレス、および書込みイネーブル信号を生成するように構成され、前記回路構成はさらに、
処理回路の複数の行および複数の列を含む処理回路のアレイを備え、処理要素の行の複数のサブセットのうちの各サブセットは、読出しデータバスによって前記ＲＡＭ回路のうちのそれぞれ１つの前記少なくとも１つの読出しポートに結合され、処理要素の最終行は、書込みデータバスによって前記複数のＲＡＭ回路の各々の前記少なくとも１つの書込みポートに結合され、
前記処理回路のアレイは、前記テンソルデータに対してテンソル演算を実行するように構成され、
前記処理回路のアレイ内の各行の前記処理回路は、同一のテンソルデータを入力するように結合される、回路構成。
【請求項２】
前記テンソルバッファはモジュール間テンソルバッファおよびモジュール内テンソルバッファを含み、各バンクは少なくとも１つのモジュール間テンソルバッファおよび少なくとも１つのモジュール内テンソルバッファを含む、請求項１に記載の回路構成。
【請求項３】
前記少なくとも１つの読出しポートは第１の読出しポートおよび第２の読出しポートを含み、前記少なくとも１つの書込みポートは第１の書込みポートおよび第２の書込みポートを含み、
前記メモリコントローラはさらに、
前記第１の読出しポートを介して前記テンソルバッファの第１のサブセットをアドレス指定するアドレスおよび読出しイネーブル信号を生成し、
前記第２の読出しポートを介して前記テンソルバッファの第２のサブセットをアドレス指定するアドレスおよび読出しイネーブル信号を生成し、
前記第１の書込みポートを介して前記テンソルバッファの第３のサブセットをアドレス指定するアドレスおよび書込みイネーブル信号を生成し、
前記第２の書込みポートを介して前記テンソルバッファの第４のサブセットをアドレス指定するアドレスおよび書込みイネーブル信号を生成するように構成される、請求項１に記載の回路構成。
【請求項４】
前記テンソルバッファはモジュール間テンソルバッファおよびモジュール内テンソルバッファを含み、各バンクは少なくとも１つのモジュール間テンソルバッファおよび少なくとも１つのモジュール内テンソルバッファを含み、前記メモリコントローラはさらに、
処理回路の別のアレイからのデータについて、前記テンソルバッファのうちのモジュール間テンソルバッファＸ０へのデータの書込みを可能にすることとモジュール間テンソルバッファＸ１へのデータの書込みを可能にすることとを交互に行ない、
前記処理回路のアレイによる前記テンソルバッファＸ０からのデータの読出しを可能にすることと前記テンソルバッファＸ１からのデータの読出しを可能にすることとを交互に行なうように構成される、請求項１に記載の回路構成。
【請求項５】
前記テンソルバッファはモジュール間テンソルバッファおよびモジュール内テンソルバッファを含み、各バンクは少なくとも１つのモジュール間テンソルバッファおよび少なくとも１つのモジュール内テンソルバッファを含み、前記メモリコントローラはさらに、
前記テンソルバッファのうちのモジュール内テンソルバッファＢ０へのデータの書込みを可能にすることとモジュール内テンソルバッファＢ１へのデータの書込みを可能にすることとを交互に行ない、
前記処理回路のアレイによる前記テンソルバッファＢ０からのデータの読出しを可能にすることと前記テンソルバッファＢ１からのデータの読出しを可能にすることとを交互に行なうように構成される、請求項１に記載の回路構成。
【請求項６】
前記メモリコントローラはさらに、
前記テンソルバッファのうちのモジュール内テンソルバッファＢ２へのデータの書込みを可能にすることとモジュール内テンソルバッファＢ３へのデータの書込みを可能にすることとを交互に行ない、
前記処理回路のアレイによる前記テンソルバッファＢ２からのデータの読出しを可能にすることと前記テンソルバッファＢ３からのデータの読出しを可能にすることとを交互に行なうように構成される、請求項５に記載の回路構成。
【請求項７】
前記少なくとも１つの読出しポートは第１の読出しポートおよび第２の読出しポートを含み、前記少なくとも１つの書込みポートは第１の書込みポート、第２の書込みポート、および第３の書込みポートを含み、
前記メモリコントローラはさらに、
前記第１の読出しポートを介して前記テンソルバッファの第１のサブセットをアドレス指定するアドレスおよび読出しイネーブル信号を生成し、
前記第２の読出しポートを介して前記テンソルバッファの第２のサブセットをアドレス指定するアドレスおよび読出しイネーブル信号を生成し、
前記第１の書込みポートを介して前記テンソルバッファの第３のサブセットをアドレス指定するアドレスおよび書込みイネーブル信号を生成し、
前記第２の書込みポートを介して前記テンソルバッファの第４のサブセットをアドレス指定するアドレスおよび書込みイネーブル信号を生成し、
前記第３の書込みポートを介して前記テンソルバッファの第５のサブセットをアドレス指定するアドレスおよび書込みイネーブル信号を生成するように構成される、請求項１に記載の回路構成。
【請求項８】
【数１】
2021518601.tif 000016
【請求項９】
システムであって、
パイプライン内に結合される複数のＮ個のモジュールを備え、前記パイプライン内の前記複数のＮ個のモジュールのうちの第２のモジュールから第Ｎのモジュールは、前記パイプライン内の前記複数のＮ個のモジュールのうちの前のモジュールから出力されたテンソルデータを入力し、各モジュールは請求項１〜８のいずれか１項に記載の回路構成を含む、システム。
【請求項１０】
方法であって、
メモリコントローラが、複数のテンソルバッファのうちの異なるテンソルバッファ内のテンソルデータに異なる時間にアクセスするための読出しアドレス、読出しイネーブル信号、書込みアドレス、および複数の書込みイネーブル信号を生成することを備え、前記テンソルデータは、複数のＲＡＭ回路内のテンソルバッファの複数のバンク内に配置され、各ＲＡＭ回路は少なくとも１つの読出しポートおよび少なくとも１つの書込みポートを含み、前記方法はさらに、
前記メモリコントローラからすべての前記複数のＲＡＭ回路の前記少なくとも１つの読出しポートに、各読出しアドレスおよび読出しイネーブル信号を並列に送信することと、
前記メモリコントローラからすべての前記複数のＲＡＭ回路の前記少なくとも１つの書込みポートに、各書込みアドレスを並列に送信することと、
前記複数のＲＡＭ回路のうちの１つの前記少なくとも１つの書込みポートに、前記複数の書込みイネーブル信号のサブセットをそれぞれ送信することと、
前記複数のＲＡＭ回路から処理回路の複数の行および複数の列を含む処理回路のアレイに、テンソルデータを入力することとを備え、前記処理要素の行の複数のサブセットのうちの各サブセットは、読出しデータバスによって前記ＲＡＭ回路のうちのそれぞれ１つの前記少なくとも１つの読出しポートに結合され、処理要素の最終行は、書込みデータバスによって前記複数のＲＡＭ回路の各々の前記少なくとも１つの書込みポートに結合され、各行の前記処理回路は同一のテンソルデータを入力するように結合され、前記方法はさらに、
前記処理回路のアレイによって前記テンソルデータに対してテンソル演算を実行することを備える、方法。
【請求項１１】
前記テンソルバッファはモジュール間テンソルバッファおよびモジュール内テンソルバッファを含み、各バンクは少なくとも１つのモジュール間テンソルバッファおよび少なくとも１つのモジュール内テンソルバッファを含み、前記少なくとも１つの読出しポートは第１の読出しポートおよび第２の読出しポートを含み、前記少なくとも１つの書込みポートは第１の書込みポートおよび第２の書込みポートを含み、前記方法はさらに、
前記メモリコントローラが、前記第１の読出しポートを介して前記テンソルバッファの第１のサブセットをアドレス指定するアドレスおよび読出しイネーブル信号を生成することと、
前記メモリコントローラが、前記第２の読出しポートを介して前記テンソルバッファの第２のサブセットをアドレス指定するアドレスおよび読出しイネーブル信号を生成することと、
前記メモリコントローラが、前記第１の書込みポートを介して前記テンソルバッファの第３のサブセットをアドレス指定するアドレスおよび書込みイネーブル信号を生成することと、
前記メモリコントローラが、前記第２の書込みポートを介して前記テンソルバッファの第４のサブセットをアドレス指定するアドレスおよび書込みイネーブル信号を生成することとを備える、請求項１０に記載の方法。
【請求項１２】
前記テンソルバッファはモジュール間テンソルバッファおよびモジュール内テンソルバッファを含み、各バンクは少なくとも１つのモジュール間テンソルバッファおよび少なくとも１つのモジュール内テンソルバッファを含み、前記方法はさらに、
処理回路の別のアレイからのデータについて、前記テンソルバッファのうちのモジュール間テンソルバッファＸ０へのデータの書込みを可能にすることとモジュール間テンソルバッファＸ１へのデータの書込みを可能にすることとを交互に行なうことと、
前記処理回路のアレイによる前記テンソルバッファＸ０からのデータの読出しを可能にすることと前記テンソルバッファＸ１からのデータの読出しを可能にすることとを交互に行なうこととを備える、請求項１０に記載の方法。
【請求項１３】
前記テンソルバッファはモジュール間テンソルバッファおよびモジュール内テンソルバッファを含み、各バンクは少なくとも１つのモジュール間テンソルバッファおよび少なくとも１つのモジュール内テンソルバッファを含み、前記方法はさらに、
前記テンソルバッファのうちのモジュール内テンソルバッファＢ０へのデータの書込みを可能にすることとモジュール内テンソルバッファＢ１へのデータの書込みを可能にすることとを交互に行なうことと、
前記処理回路のアレイによる前記テンソルバッファＢ０からのデータの読出しを可能にすることと前記テンソルバッファＢ１からのデータの読出しを可能にすることとを交互に行なうこととを備える、請求項１０に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は概して、ニューラルネットワークにおけるテンソルデータ用のフレキシブルでスケーラブルなメモリ構成に関する。
【背景技術】
【０００２】
背景
ニューラルネットワークにおけるデータはテンソルと見なされ、多次元アレイとして格納される。たとえば、ベクトルはランク１のテンソルであり、行列はランク２のテンソルである。３つのカラーチャネル（Ｒ、ＧおよびＢ）を有する２Ｄ画像はランク３のテンソルである。経時的に収集した３Ｄ医療画像はランク４のテンソルとして編成され得る。
【０００３】
ニューラルネットワークは計算グラフとして表わすことができ、このグラフ内の各ノードは計算層である。データテンソルメモリは、１つの層が生成するデータテンソルを次の層が消費するように、２つの層の間に配置され得る。
【０００４】
ＡｌｅｘＮｅｔおよびＶＧＧＮｅｔは、一連の層として実現されるニューラルネットワークの例である。別の層からの入力を受信しない入力層を除いて、１つの層の出力は前の層の出力のみに依存する。最近のより高精度の畳み込みニューラルネットワークは、より一般的なニューラルネットトポロジを有する。これらのネットワーク内の層は、一連の層ではなく、「直並列グラフ」または「ｓｐグラフ」とも称され得る２端子の直並列有向グラフのノードである。ＧｏｏｇＬｅＮｅｔおよびＲｅｓＮｅｔは、直並列グラフトポロジを示すニューラルネットワークの例である。
【０００５】
ハードウェアアーキテクチャのスペクトルがこれらの層を処理し得る。スペクトルの一端に、層モジュールまたは単に「モジュール」が各層の出力を計算するように実現される。スペクトルの他端では、汎用のモジュールが層を反復的に処理する。これら２つの極端の間で、層は、各モジュールが１つ以上の層の出力を計算するが、すべての層について計算するモジュールはないように、モジュールのネットワーク全体にわたって分割され得る。データテンソルメモリを介して、１つのモジュールが次のモジュールにデータを送信する。また、複数の層を処理するモジュールが、１つの層からの出力データを反復的な層処理のためにそれ自体にフィードバックする。このメモリの設計が本発明の主題である。
【０００６】
画像分類に適用される畳み込みニューラルネットワークの最近の成功を受けて、データテンソルメモリの多くの実現例は画像中心である。各チャネルからの２次元（２Ｄ）画像は、並列処理のために演算部の２Ｄアレイに空間的に分配される。この手法の欠点は、画像次元が変化すると、高効率を維持するために演算アレイが変化しなければならず、それに応じてデータテンソルメモリを再設計しなければならないことである。さらに、演算アレイを再次元化できない場合は効率が低下する。
【発明の概要】
【課題を解決するための手段】
【０００７】
概要
開示される回路構成は、複数のＲＡＭ回路と、メモリコントローラと、処理回路のアレイとを含む。各ＲＡＭ回路は、少なくとも１つの読出しポートおよび少なくとも１つの書込みポートを含む。メモリコントローラは、複数のＲＡＭ回路内のテンソルバッファの複数のバンク内に配置されたテンソルデータにアクセスするように構成される。メモリコントローラは、共有の読出しアドレスバスと共有の読出しイネーブル信号線とによって複数のＲＡＭ回路の各々の少なくとも１つの読出しポートに結合され、共有の書込みアドレスバスと複数の書込みイネーブル信号線のそれぞれのサブセットとによって複数のＲＡＭ回路の各々の少なくとも１つの書込みポートに結合される。メモリコントローラはさらに、複数のＲＡＭ回路内のテンソルバッファのうちの異なるテンソルバッファに異なる時間にアクセスするための読出しアドレス、読出しイネーブル信号、書込みアドレス、および書込みイネーブル信号を生成するように構成される。処理回路のアレイは、処理回路の複数の行および複数の列を含む。処理要素の行の複数のサブセットのうちの各サブセットは、読出しデータバスによってＲＡＭ回路のうちのそれぞれ１つの少なくとも１つの読出しポートに結合される。処理要素の最終行は、書込みデータバスによって複数のＲＡＭ回路の各々の少なくとも１つの書込みポートに結合される。処理回路のアレイは、テンソルデータに対してテンソル演算を実行するように構成され、処理回路の各アレイ内の各行の処理回路は、同一のテンソルデータを入力するように結合される。
【０００８】
いくつかの実施形態では、テンソルバッファはモジュール間テンソルバッファおよびモジュール内テンソルバッファを含んでもよく、各バンクは少なくとも１つのモジュール間テンソルバッファおよび少なくとも１つのモジュール内テンソルバッファを含んでもよい。
【０００９】
いくつかの実施形態では、少なくとも１つの読出しポートは第１の読出しポートおよび第２の読出しポートを含んでもよく、少なくとも１つの書込みポートは第１の書込みポートおよび第２の書込みポートを含んでもよい。メモリコントローラはさらに、第１の読出しポートを介してテンソルバッファの第１のサブセットをアドレス指定するアドレスおよび読出しイネーブル信号を生成し、第２の読出しポートを介してテンソルバッファの第２のサブセットをアドレス指定するアドレスおよび読出しイネーブル信号を生成し、第１の書込みポートを介してテンソルバッファの第３のサブセットをアドレス指定するアドレスおよび書込みイネーブル信号を生成し、第２の書込みポートを介してテンソルバッファの第４のサブセットをアドレス指定するアドレスおよび書込みイネーブル信号を生成するように構成されてもよい。
【００１０】
いくつかの実施形態では、テンソルバッファはモジュール間テンソルバッファおよびモジュール内テンソルバッファを含んでもよく、各バンクは少なくとも１つのモジュール間テンソルバッファおよび少なくとも１つのモジュール内テンソルバッファを含んでもよい。メモリコントローラはさらに、処理回路の別のアレイからのデータについて、テンソルバッファのうちのモジュール間テンソルバッファＸ０へのデータの書込みを可能にすることとモジュール間テンソルバッファＸ１へのデータの書込みを可能にすることとを交互に行ない、処理回路のアレイによるテンソルバッファＸ０からのデータの読出しを可能にすることとテンソルバッファＸ１からのデータの読出しを可能にすることとを交互に行なうように構成されてもよい。
【００１１】
いくつかの実施形態では、テンソルバッファはモジュール間テンソルバッファおよびモジュール内テンソルバッファを含んでもよく、各バンクは少なくとも１つのモジュール間テンソルバッファおよび少なくとも１つのモジュール内テンソルバッファを含んでもよい。メモリコントローラはさらに、テンソルバッファのうちのモジュール内テンソルバッファＢ０へのデータの書込みを可能にすることとモジュール内テンソルバッファＢ１へのデータの書込みを可能にすることとを交互に行ない、処理回路のアレイによるテンソルバッファＢ０からのデータの読出しを可能にすることとテンソルバッファＢ１からのデータの読出しを可能にすることとを交互に行なうように構成されてもよい。
【００１２】
いくつかの実施形態では、メモリコントローラはさらに、テンソルバッファのうちのモジュール内テンソルバッファＢ２へのデータの書込みを可能にすることとモジュール内テンソルバッファＢ３へのデータの書込みを可能にすることとを交互に行ない、処理回路のアレイによるテンソルバッファＢ２からのデータの読出しを可能にすることとテンソルバッファＢ３からのデータの読出しを可能にすることとを交互に行なうように構成されてもよい。
【００１３】
いくつかの実施形態では、少なくとも１つの読出しポートは第１の読出しポートおよび第２の読出しポートを含んでもよく、少なくとも１つの書込みポートは第１の書込みポート、第２の書込みポート、および第３の書込みポートを含んでもよい。メモリコントローラはさらに、第１の読出しポートを介してテンソルバッファの第１のサブセットをアドレス指定するアドレスおよび読出しイネーブル信号を生成し、第２の読出しポートを介してテンソルバッファの第２のサブセットをアドレス指定するアドレスおよび読出しイネーブル信号を生成し、第１の書込みポートを介してテンソルバッファの第３のサブセットをアドレス指定するアドレスおよび書込みイネーブル信号を生成し、第２の書込みポートを介してテンソルバッファの第４のサブセットをアドレス指定するアドレスおよび書込みイネーブル信号を生成し、第３の書込みポートを介してテンソルバッファの第５のサブセットをアドレス指定するアドレスおよび書込みイネーブル信号を生成するように構成されてもよい。
【００１４】
【数１】
2021518601.tif 000003
【００１５】
別の開示される回路構成は、パイプライン内に結合される複数のＮ個のモジュールを含む。パイプライン内の複数のＮ個のモジュールのうちの第２のモジュールから第Ｎのモジュールは、前のモジュールから出力されたテンソルデータを入力する。各モジュールは、複数のＲＡＭ回路と、メモリコントローラと、処理回路のアレイとを含む。各ＲＡＭ回路は、少なくとも１つの読出しポートおよび少なくとも１つの書込みポートを含む。メモリコントローラは、複数のＲＡＭ回路内のテンソルバッファの複数のバンク内に配置されたテンソルデータにアクセスするように構成される。メモリコントローラは、共有の読出しアドレスバスと共有の読出しイネーブル信号線とによって複数のＲＡＭ回路の各々の少なくとも１つの読出しポートに結合され、共有の書込みアドレスバスと複数の書込みイネーブル信号線のそれぞれのサブセットとによって複数のＲＡＭ回路の各々の少なくとも１つの書込みポートに結合される。メモリコントローラはさらに、複数のＲＡＭ回路内のテンソルバッファのうちの異なるテンソルバッファに異なる時間にアクセスするための読出しアドレス、読出しイネーブル信号、書込みアドレス、および書込みイネーブル信号を生成するように構成される。処理回路のアレイは、処理回路の複数の行および複数の列を含む。処理要素の行の複数のサブセットのうちの各サブセットは、読出しデータバスによってＲＡＭ回路のうちのそれぞれ１つの少なくとも１つの読出しポートに結合される。処理要素の最終行は、書込みデータバスによって複数のＲＡＭ回路の各々の少なくとも１つの書込みポートに結合される。処理回路のアレイは、テンソルデータに対してテンソル演算を実行するように構成され、処理回路の各アレイ内の各行の処理回路は、同一のテンソルデータを入力するように結合される。
【００１６】
いくつかの実施形態では、テンソルバッファはモジュール間テンソルバッファおよびモジュール内テンソルバッファを含んでもよく、各バンクは少なくとも１つのモジュール間テンソルバッファおよび少なくとも１つのモジュール内テンソルバッファを含んでもよい。
【００１７】
いくつかの実施形態では、少なくとも１つの読出しポートは第１の読出しポートおよび第２の読出しポートを含んでもよく、少なくとも１つの書込みポートは第１の書込みポートおよび第２の書込みポートを含んでもよい。メモリコントローラはさらに、第１の読出しポートを介してテンソルバッファの第１のサブセットをアドレス指定するアドレスおよび読出しイネーブル信号を生成し、第２の読出しポートを介してテンソルバッファの第２のサブセットをアドレス指定するアドレスおよび読出しイネーブル信号を生成し、第１の書込みポートを介してテンソルバッファの第３のサブセットをアドレス指定するアドレスおよび書込みイネーブル信号を生成し、第２の書込みポートを介してテンソルバッファの第４のサブセットをアドレス指定するアドレスおよび書込みイネーブル信号を生成するように構成されてもよい。
【００１８】
いくつかの実施形態では、テンソルバッファはモジュール間テンソルバッファおよびモジュール内テンソルバッファを含んでもよく、各バンクは少なくとも１つのモジュール間テンソルバッファおよび少なくとも１つのモジュール内テンソルバッファを含んでもよい。メモリコントローラはさらに、処理回路の別のアレイからのデータについて、テンソルバッファのうちのモジュール間テンソルバッファＸ０へのデータの書込みを可能にすることとモジュール間テンソルバッファＸ１へのデータの書込みを可能にすることとを交互に行ない、処理回路のアレイによるテンソルバッファＸ０からのデータの読出しを可能にすることとテンソルバッファＸ１からのデータの読出しを可能にすることとを交互に行なうように構成されてもよい。
【００１９】
いくつかの実施形態では、テンソルバッファはモジュール間テンソルバッファおよびモジュール内テンソルバッファを含んでもよく、各バンクは少なくとも１つのモジュール間テンソルバッファおよび少なくとも１つのモジュール内テンソルバッファを含んでもよい。メモリコントローラはさらに、テンソルバッファのうちのモジュール内テンソルバッファＢ０へのデータの書込みを可能にすることとモジュール内テンソルバッファＢ１へのデータの書込みを可能にすることとを交互に行ない、処理回路のアレイによるテンソルバッファＢ０からのデータの読出しを可能にすることとテンソルバッファＢ１からのデータの読出しを可能にすることとを交互に行なうように構成されてもよい。
【００２０】
いくつかの実施形態では、メモリコントローラはさらに、テンソルバッファのうちのモジュール内テンソルバッファＢ２へのデータの書込みを可能にすることとモジュール内テンソルバッファＢ３へのデータの書込みを可能にすることとを交互に行ない、処理回路のアレイによるテンソルバッファＢ２からのデータの読出しを可能にすることとテンソルバッファＢ３からのデータの読出しを可能にすることとを交互に行なうように構成されてもよい。
【００２１】
いくつかの実施形態では、少なくとも１つの読出しポートは第１の読出しポートおよび第２の読出しポートを含んでもよく、少なくとも１つの書込みポートは第１の書込みポート、第２の書込みポート、および第３の書込みポートを含んでもよい。メモリコントローラはさらに、第１の読出しポートを介してテンソルバッファの第１のサブセットをアドレス指定するアドレスおよび読出しイネーブル信号を生成し、第２の読出しポートを介してテンソルバッファの第２のサブセットをアドレス指定するアドレスおよび読出しイネーブル信号を生成し、第１の書込みポートを介してテンソルバッファの第３のサブセットをアドレス指定するアドレスおよび書込みイネーブル信号を生成し、第２の書込みポートを介してテンソルバッファの第４のサブセットをアドレス指定するアドレスおよび書込みイネーブル信号を生成し、第３の書込みポートを介してテンソルバッファの第５のサブセットをアドレス指定するアドレスおよび書込みイネーブル信号を生成するように構成されてもよい。
【００２２】
【数２】
2021518601.tif 000004
【００２３】
開示される方法は、メモリコントローラが、複数のテンソルバッファのうちの異なるテンソルバッファ内のテンソルデータに異なる時間にアクセスするための読出しアドレス、読出しイネーブル信号、書込みアドレス、および複数の書込みイネーブル信号を生成することを含む。テンソルデータは、複数のＲＡＭ回路内のテンソルバッファの複数のバンク内に配置され、各ＲＡＭ回路は少なくとも１つの読出しポートおよび少なくとも１つの書込みポートを含む。上記方法は、メモリコントローラからすべての複数のＲＡＭ回路の少なくとも１つの読出しポートに、各読出しアドレスおよび読出しイネーブル信号を並列に送信し、メモリコントローラからすべての複数のＲＡＭ回路の少なくとも１つの書込みポートに、各書込みアドレスを並列に送信する。上記方法はさらに、複数のＲＡＭ回路のうちの１つの少なくとも１つの書込みポートに、複数の書込みイネーブル信号のサブセットをそれぞれ送信することを含む。上記方法は、複数のＲＡＭ回路から処理回路のアレイにテンソルデータを入力する。処理回路のアレイは、処理回路の複数の行および複数の列を含む。処理要素の行の複数のサブセットのうちの各サブセットは、読出しデータバスによってＲＡＭ回路のうちのそれぞれ１つの少なくとも１つの読出しポートに結合される。処理要素の最終行は、書込みデータバスによって複数のＲＡＭ回路の各々の少なくとも１つの書込みポートに結合される。上記方法はさらに、処理回路の各アレイによってテンソルデータに対してテンソル演算を実行することを含む。
【００２４】
いくつかの実施形態では、テンソルバッファはモジュール間テンソルバッファおよびモジュール内テンソルバッファを含んでもよい。各バンクは少なくとも１つのモジュール間テンソルバッファおよび少なくとも１つのモジュール内テンソルバッファを含んでもよい。少なくとも１つの読出しポートは第１の読出しポートおよび第２の読出しポートを含んでもよく、少なくとも１つの書込みポートは第１の書込みポートおよび第２の書込みポートを含んでもよい。上記方法はさらに、メモリコントローラが、第１の読出しポートを介してテンソルバッファの第１のサブセットをアドレス指定するアドレスおよび読出しイネーブル信号を生成することと、メモリコントローラが、第２の読出しポートを介してテンソルバッファの第２のサブセットをアドレス指定するアドレスおよび読出しイネーブル信号を生成することと、メモリコントローラが、第１の書込みポートを介してテンソルバッファの第３のサブセットをアドレス指定するアドレスおよび書込みイネーブル信号を生成することと、メモリコントローラが、第２の書込みポートを介してテンソルバッファの第４のサブセットをアドレス指定するアドレスおよび書込みイネーブル信号を生成することとを含んでもよい。
【００２５】
いくつかの実施形態では、テンソルバッファはモジュール間テンソルバッファおよびモジュール内テンソルバッファを含んでもよく、各バンクは少なくとも１つのモジュール間テンソルバッファおよび少なくとも１つのモジュール内テンソルバッファを含んでもよい。上記方法はさらに、処理回路の別のアレイからのデータについて、テンソルバッファのうちのモジュール間テンソルバッファＸ０へのデータの書込みを可能にすることとモジュール間テンソルバッファＸ１へのデータの書込みを可能にすることとを交互に行なうことと、処理回路のアレイによるテンソルバッファＸ０からのデータの読出しを可能にすることとテンソルバッファＸ１からのデータの読出しを可能にすることとを交互に行なうこととを含んでもよい。
【００２６】
いくつかの実施形態では、テンソルバッファはモジュール間テンソルバッファおよびモジュール内テンソルバッファを含んでもよく、各バンクは少なくとも１つのモジュール間テンソルバッファおよび少なくとも１つのモジュール内テンソルバッファを含んでもよい。上記方法はさらに、テンソルバッファのうちのモジュール内テンソルバッファＢ０へのデータの書込みを可能にすることとモジュール内テンソルバッファＢ１へのデータの書込みを可能にすることとを交互に行なうことと、処理回路のアレイによるテンソルバッファＢ０からのデータの読出しを可能にすることとテンソルバッファＢ１からのデータの読出しを可能にすることとを交互に行なうこととを含んでもよい。
【００２７】
その他の特徴は、以下の詳細な説明および請求項を検討することによって認識されるであろう。
【００２８】
開示されるシステムおよび方法の各種局面および特徴は、以下の詳細な説明を再考し図面を参照すると明らかになるであろう。
【図面の簡単な説明】
【００２９】
【図１】テンソルバッファの種類間の階層関係を示す図である。
【図２】モジュール（ｍ−１）、ｍ、および（ｍ＋１）、ならびにニューラルネットワークのモジュール間にピンポンメモリを実現するモジュール間テンソルバッファを示す図である。
【図３】モジュールがニューラルネットワークの複数の層の演算を実行し、モジュール内テンソルバッファをピンポンメモリとして使用して１つの層の出力を次の処理層のためにこのモジュールにフィードバックする、例示的なマルチレベル回路図である。
【図４】図の上部にＧｏｏｇｌｅＬｅＮｅｔニューラルネットワークの５層におけるパイプラインビュー演算を示し、図の下部にインセプション層３ａ演算およびインセプション層３ｂ演算の分解図を示す図である。
【図５】演算スケジュールおよびテンソルバッファの使用を示す図である。
【図６】テンソルバッファの複数のバンクを格納して当該バンクにアクセスするためのメモリ構成を含む、ニューラルネットワークの複数の層を処理するための回路構成を示す図である。
【図７】例示的なアプリケーションに係るテンソルバッファの複数のバンクを格納して当該バンクにアクセスするためのメモリ構成を含む、ニューラルネットワークの複数の層を処理するための回路構成を示す図である。
【図８】本開示の実現例と一致する処理要素の回路図である。
【図９】開示される回路およびプロセスをその上で実現し得るプログラマブル集積回路（ＩＣ）を示す図である。
【発明を実施するための形態】
【００３０】
詳細な説明
以下の説明では、本明細書で提示する具体例を説明するために数多くの具体的な詳細事項を記載する。しかしながら、その他の１つ以上の例および／またはこれらの例の変形が以下の具体的な詳細事項すべてがなくても実施され得ることは、当業者にとって明らかなはずである。他の場合において、周知の特徴は、本明細書における例の説明が不明瞭になることを避けるべく、詳細に記載していない。説明し易くするために、同一の参照番号を異なる図面で使用して同一要素または同一要素のその他の例を示す場合がある。
【００３１】
開示される回路構成によると、一群のＲＡＭを一緒に使用してフレキシブルなマルチポートのデータテンソルメモリを形成して、所望のデータ帯域幅を処理回路のアレイに提供する。一群のＲＡＭは、複数の層を処理する処理回路が、１つの処理層からの出力データを次の層の処理のためにフィードバックすることができるように構築される。開示されるメモリ構成は２次元の画像アプリケーションに限定されず、異なるアプリケーションにスケーラブルである。
【００３２】
開示される回路および方法は複数のＲＡＭ回路を含んでもよく、その各々が少なくとも１つの読出しポートおよび少なくとも１つの書込みポートを有する。メモリコントローラが、ＲＡＭ回路内のテンソルバッファの複数のバンクに格納されたテンソルデータにアクセスするように構成される。メモリコントローラは、共有の読出しアドレスバスと共有の読出しイネーブル信号線とによってＲＡＭ回路の各読出しポートに結合される。メモリコントローラはまた、共有の書込みアドレスバスと書込みイネーブル信号線のそれぞれのサブセットとによってＲＡＭ回路の各書込みポートに結合される。ＲＡＭ回路内のテンソルバッファのうちの異なるテンソルバッファは、メモリコントローラが、読出しアドレス、読出しイネーブル信号、書込みアドレス、および書込みイネーブル信号をＲＡＭ回路に生成することによって、異なる時間にアクセスされる。
【００３３】
処理回路のアレイがＲＡＭ回路に結合される。処理回路のアレイの行のそれぞれのサブセットは、ＲＡＭ回路のうちの１つの各読出しポートのデータピンに結合される。アレイ内の処理要素の最終行は、すべてのＲＡＭ回路の各書込みポートの書込みピンに結合される。処理回路のアレイ内の各行の処理回路は、それぞれのＲＡＭ回路から同一のテンソルデータを入力するように結合される。処理回路のアレイは、テンソルデータに対してテンソル演算を実行するように構成された処理回路の複数の行および複数の列を含む。
【００３４】
開示されるメモリ構成は、従来の手法に対して数多くの利点を提供する。すべてのテンソルバンクは、同一の読出しアドレスおよび書込みアドレスを並列に共有する。メモリコントローラはテンソルバンクの数に気づかないので、メモリコントローラハードウェアおよびソフトウェアの可搬性を最大化することができる。
【００３５】
メモリ構成は、さまざまな固有のＳＲＡＭ寸法に適合可能である。たとえば、Ｘｉｌｉｎｘ  ＢＲＡＭおよびＵｌｔｒａＲＡＭは限られた一組の寸法をサポートするのに対して、ＡＳＩＣはテープアウト前に任意のカスタムＳＲＡＭ寸法を指定することができる。この開示されるメモリ構成は、基本となるＳＲＡＭの固有の寸法に容易に適合可能である。ＳＲＡＭをビルディングブロックとして用いて、処理要素（ＰＥ）のアレイをサーブするためのテンソルバッファのテンソルバンクを最初に構築することができる。テンソルバンクのデータ帯域幅は、ＰＥのアレイの一部またはすべての帯域幅と一致する。１つのバンクが十分な帯域幅を有していない場合は、複数の並列バンクが必要な帯域幅を提供するように構築され得る。
【００３６】
テンソルバッファをテンソルバンクに編成すると、基本となるＳＲＡＭの物理的寸法が上層プログラムから切離されて、ハードウェアアーキテクチャが、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、システム・オン・チップ（ＳｏＣ）、システム・イン・パッケージ（ＳｉＰ）、および特定用途向け集積回路（ＡＳＩＣ）などのプラットフォーム間で移植可能になる。
【００３７】
図１は、テンソルバッファの種類間の階層関係を示す。データテンソルメモリは１つ以上の２ポートＲＡＭ（１つの読出しポートおよび１つの書込みポート）を備える。２ポートＲＡＭはテンソルバッファのバンクとして配置され得る。テンソルバッファは、データテンソルを格納するために割当てられるメモリの一部である。各バンクは、たとえば２〜６個のテンソルバッファを実現し得る。テンソルバッファのバンクは、１つ以上のＲＡＭによって格納が提供される一群の複数のテンソルバッファであり、バンク内のテンソルバッファのうちの２つ以上は書込み制御および書込みデータを共有し、バンク内のテンソルバッファのうちの２つ以上は読出し制御を共有する。各バンク内のバッファは、最大で２つの読出しポートおよび２つの書込みポートを使用し得る。
【００３８】
テンソルバッファ１０２は、モジュール間テンソルバッファ１０４またはモジュール内テンソルバッファ１０６として分類され得る。モジュール間テンソルバッファは、モジュールｍによって出力されてモジュールｍ＋１によって処理されるテンソルバッファである。モジュール内テンソルバッファは、モジュールｍによって生成されてさらにモジュールｍによって処理されるテンソルバッファである。テンソルバッファを表わす際には、モジュールｍによって処理されるテンソルバッファを上付き文字（ｍ）で示す。文脈が明確であれば、モジュール内バッファについては上付き文字（ｍ）を省略する場合がある。
【００３９】
【数３】
2021518601.tif 000005
【００４０】
モジュール内テンソルバッファ１０６は、ネットワーク・イン・ネットワーク（network-in-network）テンソルバッファ１１２、内部テンソルバッファ１１４、または並列パイプライン並列バッファ１１６であり得る。ネットワーク・イン・ネットワークテンソルバッファは、ニューラルネットワークの１つの層の一組の演算によって生成され、このニューラルネットワークの同一の計算サブグラフ内の異なる層の別の一組の演算によって処理される（たとえば、インセプション３ａの内部の３×３リデュースは、これも同一のインセプション３ａ計算サブグラフ内にある３×３層のためのネットワーク・イン・ネットワークテンソルを生成する）テンソルバッファである。内部テンソルバッファは、異なる計算サブグラフ内の１つの層の演算によって生成されて次の層の演算によって処理されるテンソルバッファである。並列パイプラインテンソルバッファは、上流モジュール間テンソルバッファ、ネットワーク・イン・ネットワークテンソルバッファ、およびネットワーク・イン・ネットワーク内部テンソルバッファと並列にモジュールによって処理され得るテンソルバッファである。
【００４１】
テンソルバッファをモジュール間バッファおよびモジュール内バッファに分けると、モジュールをパイプライン内で演算するように独立して設計することができるため、設計再利用が最大化される。１つのモジュールの設計者は、出力サンプルスケジュールをパイプライン内の次のモジュールの入力サンプルスケジュールと正確に（すなわち、サイクルまで）一致させる必要はない。１つのモジュールの平均出力サンプルレートを次のモジュールの入力サンプルレートと一致させるだけで十分である。
【００４２】
【数４】
2021518601.tif 000006
【００４３】
本明細書に記載されるおよび／または図面に示される動作および活動のうちの１つ以上を実行するように複数のモジュールが実現され得る。これらの文脈において、「モジュール」は、テンソルバッファの格納を提供すること、テンソルバッファにアクセスすること、およびテンソルデータを処理することなど、これらのまたは関連の動作／活動のうちの１つ以上を実行する回路である。たとえば、モジュールは、ＲＡＭ回路、プログラマブル論理回路、特定用途向け集積回路（ＡＳＩＣ）、および／または１つ以上のマイクロプロセッサ回路の組合わせを含み得る。
【００４４】
図３は、モジュールがニューラルネットワークの複数の層の演算を実行し、モジュール内テンソルバッファをピンポンメモリとして使用して１つの層の出力を次の処理層のためにこのモジュールにフィードバックする、例示的なマルチレベル回路図を示す。レベル２０２はモジュール１、２および３を示しており、モジュール１はモジュール２が処理するデータを生成し、モジュール２はモジュール３が処理するデータを生成する。モジュール２は、仮想ニューラルネットワークの層１〜４の処理を実行する。レベル２０４は、ニューラルネットワークの層１〜４の処理においてモジュール２が使用するモジュール間テンソルバッファおよびモジュール内テンソルバッファを示す。レベル２０６はモジュール２のより詳細な図を示す。
【００４５】
【数５】
2021518601.tif 000007
【００４６】
図４および図５は、特定の例示的なニューラルネットワークについてテンソルバッファのバンクを実現するための開示される手法のアプリケーションを示す。例示的なニューラルネットワークはＧｏｏｇＬｅＮｅｔである。ＧｏｏｇＬｅＮｅｔニューラルネットワークのいくつかの態様を参照してさまざまな回路および方法を説明するが、開示される手法は他のニューラルネットワークに適合可能かつ適用可能であることが認識されるであろう。
【００４７】
例示的な実現例では、多層モジュールは、テンソルバッファに結合され、かつインセプション３ａ  ３５２からインセプション５ｂ  ３５４までのすべてのインセプション層を計算する、デュアルパイプライン計算ユニットを含み得る。テンソルバッファは、図６および図７に示されるように読出しポートおよび書込みポートを共有するテンソルバンク内に実現される。同一のポートを共有するテンソルバッファには、テンソルバンク内の異なるアドレスが割当てられる。
【００４８】
図４は、図の上部に、ＧｏｏｇｌｅＬｅＮｅｔニューラルネットワーク３５０のインセプションサブグラフ（代替的に「インセプションモジュール」とも称され得る）内の７層におけるパイプラインビュー演算を示し、図の下部に、インセプション層３ａ演算およびインセプション層３ｂ演算の分解図を示す。インセプション層３ａおよび３ｂはブロック３５２および３５４として示されており、図４の下部にはインセプション層３ａおよび３ｂの各々の内部のデータフローが示されている。円３５６は畳み込み層２によって出力されてインセプション層３ａによって入力されるデータテンソルであり、円３５８はインセプション層３ａによって出力されてインセプション層３ｂによって入力されるデータテンソルであり、円３６０はインセプション層３ｂによって出力されてインセプション層４ａによって入力されるデータテンソルである。演算ブロックの内部の括弧付きの数字は、ブロックの演算が行なわれる順序を示す。すなわち、演算の順序は、インセプション層３ａにおける１×１畳み込み、インセプション層３ａにおける３×３リダクション畳み込み、インセプション層３ａにおける３×３畳み込み、等である。
【００４９】
【数６】
2021518601.tif 000008
【００５０】
並列処理パイプラインは、インセプション層３ａにおける３×３畳み込みおよびプレプール演算の両方の演算順序が３番目であり、インセプション層３ｂにおける３×３畳み込みおよびプレプール演算の両方の演算順序が９番目であることによって、図４に示されている。
【００５１】
図５は、演算スケジュールおよびテンソルバッファの使用を示す。図５はまた、各インセプション層の演算が２つの並列パイプラインとして実現され得る方法を示す。一次パイプラインは融合畳み込み、整流線形ユニット（ＲｅＬＵ）、およびポストプーリング演算を実行することができ、これらは、１×１、３×３リデュース、３×３、５×５リデュース、プールプロジェクション、および５×５とラベル付けされたブロックとして示されている。二次パイプラインは、プレプールブロックによって示されるようにプレプーリング演算を実行することができる。テンソルバンクを管理するための開示される手法は、各パイプラインの特定の演算によって限定されない。しかしながら、テンソルバンクを構築する際、一次パイプラインは最も計算集約的で高価であり、データを待つ必要はないはずである。テンソルバッファは全体として、高価な一次パイプラインを忙しい状態に保つ。
【００５２】
各演算は正方形のブロックとして描かれており、各テンソルバッファは立方体として描かれている。空間上の理由から、例示的なスケジュールにおける時間は曲がりくねって進行する。演算は、２つの並列パイプライン全体にわたって左から右に描かれている。
【００５３】
矢印はデータ依存性を表わす。たとえば、インセプション３ａ  ３５２では、第１、第３、第５、および第６の演算はすべて、テンソルバッファＢ０の異なるアドレスに書込む。第１、第３、第５、および第６の演算は、互いの出力に上書きしない。実線の各矢印線は、演算のテンソルバッファへの依存性を表わし、破線の各矢印線は、スケジュール内の後の時間におけるテンソルバッファの、スケジュール内の先の時間における同一のテンソルバッファの処理への依存性を表わす。出力要素はテンソルバッファＢ０において組合わされ、インセプション層３ｂ  ３５４における第７、第８、第１０の演算、およびプレプーリング演算によってすべて読出される。第９のプレプーリング演算および３×３畳み込み演算は並列実行される。左を指すデータ依存性矢印がない限り、その他のスケジュールも可能である。たとえば、第４および第５の演算はスワップ可能である。
【００５４】
なお、プレプーリングは３×３畳み込みと並列に演算するように常にスケジューリングされる。なぜなら、３×３畳み込みはプレプーリングとテンソルバッファを共有しておらず、図らずも一次パイプラインにおいて最も多くの時間を消費するため、プレプーラ（pre-pooler）の設計に課すタイミング制約が最も緩いからである。一次パイプライン内のすべての演算は、データ消費を実行可能であるときに、当該演算が必要なデータを有している。この結果、一次パイプラインはデータを待つ必要がなく、完全に利用され続ける。
【００５５】
【数７】
2021518601.tif 000009
【００５６】
図６は、テンソルバッファの複数のバンクを格納して当該バンクにアクセスするためのメモリ構成を含む、ニューラルネットワークの複数の層を処理するための回路構成４００を示す。回路構成は、メモリコントローラ４０２と、複数のＲＡＭ４０４、…、４０６と、アレイ処理要素（ＰＥ）とを含む。ＰＥのアレイは、ＰＥの複数のセクション４０８、…、４１０を含む。ＲＡＭの各々は、モジュール間テンソルバッファ４１２および４１４ならびにモジュール内テンソルバッファ４１６および４１８を含み得るテンソルバンクを格納するように構成される。
【００５７】
ＲＡＭ／テンソルバンク４０４、…、４０６の実現例はアプリケーション要件に従って異なり得る。例示的なＳｏＣ／ＳｉＰ実現例では、ＲＡＭ／テンソルバンクは、高帯域幅メモリ（ＨＢＭ）ＤＲＡＭおよびオフチップメモリ・ダブルデータレート（ＤＤＲ）ＤＲＡＭなどのより大きなインパッケージメモリによって補完されるオンダイＳＲＡＭであってもよい。オンダイＳＲＡＭはオンダイキャッシュにおいて効果的に動作させることができる。
【００５８】
【数８】
2021518601.tif 000010
【００５９】
ＰＥのアレイセクション４０８、…、４１０は、ＲＡＭ４０４、…、４０６にそれぞれ結合される。ＰＥの各アレイセクションは、融合畳み込み、整流線形ユニット（ＲｅＬＵ）、およびポストプーリングのインセプション層演算を実行することなどによって、関連するＲＡＭ／テンソルバンク内のテンソルバッファを処理する。ニューラルネットワークの各層は深いネスト化ループとして実現され、コントローラはＰＥのアレイ上でネスト化ループを実行する。コントローラは、データの処理を完了するまで制御するために、すべてのループ範囲を追跡する。
【００６０】
簡潔性および柔軟性のために、テンソルバッファの基本的なＲＡＭビルディングブロックは固定寸法であってもよく、たとえばＤワード×Ｍビット／ワードであってもよい。８ビットデータ要素を使用するニューラルネットワークの場合、４０９６×６４のＲＡＭ（４０９６ワード×６４ビット／ワード）が４０９６×８要素のメモリビルディングブロックである。６つの例示的なテンソルバッファの各々は同一の帯域幅（同一のデータバス幅、および１ＲＡＭサイクル当たり同一の最大読出し／書込み回数）を有する。
【００６１】
【数９】
2021518601.tif 000011
【００６２】
例示的な実現例では、ビルディングブロックＲＡＭは、ＲＡＭクロックサイクルごとに１回の読出しおよびさらに１回の書込みのスループットを有することができ、このＲＡＭは、ＲＡＭクロックサイクルごとに８要素をＰＥのアレイに提供することができる。このＲＡＭは、ＰＥのアレイから同一のレートでデータを受信することもできる。８要素の各々は、半分の帯域幅でアレイの特定の１行を送る。具体的には、ＲＡＭサイクルごとに８個の８ビット要素をテンソルバッファから読出すことができ、この８ビット要素はＰＥの８行にそれぞれ入力される。ＰＥは、２倍のＲＡＭクロックレートで演算可能である。より多くの行を有するより大きな処理アレイにより多くの並列のテンソルバッファバンクを結合して、データテンソルメモリを処理要素アレイと共にスケーラブルにすることができる。
【００６３】
ＰＥアレイ内の各行は、データテンソルから１つのチャネルを受信し得る。Ｎ次元データテンソルの場合、各行はＮ−１次元で演算を実行する。たとえば、画像処理において、各行は１つのカラーチャネルを処理し、各ＰＥは２Ｄ畳み込みを計算する。入力データがランク４のテンソルである場合、各チャネルはランク３のテンソル（オブジェクトの３Ｄスキャンなど）である。データテンソルバッファ読出しアドレスシーケンスは、さまざまなデータテンソル次元に適合するように変更可能である。データテンソルバッファの基本的構造は、ビルディングブロックＲＡＭからテンソルバッファの１つのバンクまで、そしてバンクの並列セットまで、同一のままである。
【００６４】
ＲＡＭ／テンソルバンク４０４、…、４０６の各々は、読出しポートおよび書込みポートを有する。いくつかの実現例では、ＲＡＭは図７に示されるように２つの書込みポートを有し得る。ＲＡＭの読出しポートは、メモリコントローラからの同一の読出し制御信号線に結合される。すなわち、ＲＡＭ４０４、…、４０６は、メモリコントローラから同一の読出しアドレス４２０および読出しイネーブル信号４２２を受信するように結合される。ＲＡＭ４０４および４０６の読出しポートのデータ出力ピンは、読出しデータバス信号線４２４および４２６に接続される。それによって、複数のＲＡＭにまたがるデータテンソルをＲＡＭから並列に読出し、ＰＥのアレイ内のＰＥの行のそれぞれのサブセットによって処理することができる。
【００６５】
ＲＡＭ４０４、…、４０６の書込みポートは、同一の書込みアドレス線４２８に結合される。メモリコントローラは、書込みイネーブル信号のそれぞれのセットをＲＡＭの書込みポートに与える。各ＲＡＭに与えられる書込みイネーブル信号の数は、ＰＥのアレイの行の各サブセット内の行の数に対応する。この例における各アレイは８行を含み、メモリコントローラはそれぞれの書込みイネーブル信号を各ＲＡＭに与える。ＰＥの行のＭ個のサブセット、およびＲ本の行を含む各サブセットの場合、書込みイネーブル信号の総数はＭ＊Ｒ＝Ｎである。ＲＡＭ４０４は書込みイネーブル信号１から８を受信し、ＲＡＭ４０６は書込みイネーブル信号ｋからＮを受信する。
【００６６】
【数１０】
2021518601.tif 000012
【００６７】
ＰＥの例示的な各セクション４０８、…、４１０は、セクション内のＰＥの上位行からの出力によって示されるように８個の８ビットテンソル要素を出力する。上位行ＰＥの合成出力は、ＲＡＭの書込みポートのデータピンに接続される。たとえば、セクション４０８の上位行ＰＥの合成出力は、ＲＡＭ４０４および４０６の書込みポートのデータピン（図示せず）に接続された書込みデータバス４３０として示されている。
【００６８】
ＰＥアレイは行列・ベクトル乗算器である。例示的なアプリケーションでは、各ＲＡＭ／バンク４０４、…、４０６はＰＥアレイの８レーン（８行）をサーブする。なぜなら、通常はＲＡＭ／バンクを実現するＳＲＡＭの幅に制限があるからである。たとえば、ＳＲＡＭは６４ビット幅とすることができ、これは８個の８ビットレーンをサポートすることになる。例示的なアプリケーションでは、ＰＥのアレイはＮ１行およびＮ２列を有し、ここでＮ１＝９６であり、Ｎ２＝１６である。したがって、アレイは９６／８＝１２個のＳＲＡＭバンクを使用する。
【００６９】
例示的なＰＥアレイが米国特許第９，７７９，７８６号に記載されている。このＰＥアレイは行列・ベクトル演算ｚ＝Ｗｘを実行する。ＷはＮ２×Ｎ１行列であり、ｘおよびｚは両方ともＮ１成分を有するベクトルである。図示のＰＥアレイを９０度回転させると、ＰＥアレイ行は行列の行に対応し、ＰＥアレイ列は行列の列に対応することになる。
【００７０】
ＰＥの例示的なアレイはパイプライン方式で動作する。アレイの１行および１列内のＰＥによって生成された出力は、次の行および同一の列内のＰＥへの入力として与えられる。たとえば、ＰＥ４３２の出力はＰＥ４３４に入力される。列内の上位ＰＥによって出力された列データは、メモリＲＡＭ／テンソルバンクに格納され、対応する列内のＰＥからの出力データの組合わせ（たとえば合計）を表わす。ＰＥアレイ（Ｎ２列）の出力はすべてのＲＡＭ／バンク４０４、…、４０６のデータ書込みポートにフィードバックされる。この出力は次のモジュールにも送られ得る。
【００７１】
いくつかの実現例によると、予め定められた初期化値が、各列内のたとえばＰＥ４３２などの第１のＰＥに与えられ得る。ＰＥは、初期化値を、前のＰＥからの出力として受信したかのように使用し、それによってアレイ内のＰＥは実質的に同一の論理および構成を有する。初期化値は、レジスタ、ＲＡＭ回路、またはＰＥ内に位置する同様の記憶回路によって与えられ得る。
【００７２】
画像処理アプリケーションのいくつかの例示的な実現例では、ＲＡＭ４０４、…、４０６はまず、画像の一組の入力特徴マップ（ＩＦＭ）に対応するデータを格納する。システムは、２次元（２Ｄ）畳み込みカーネルを画像データの小さな部分（「スライスデータ」）に適用することによって各ＩＦＭを処理する。各ＩＦＭの入力スライスデータは、メモリコントローラ４０２によって反復的に読出され、ＰＥのアレイによる処理のためにＲＡＭによって出力され得る。少なくとも２つの異なる畳み込みカーネル用のマスクがＰＥのローカルメモリ回路（図示せず）に格納され、入力スライスデータのセットに適用され得る。
【００７３】
特定の例として、画像処理は、ソース画像のさまざまなカラーチャネルに対応するＩＦＭ上で実行され得る。各カラーチャネルは、異なる一組の光学周波数に対応する。各行および反復に関して、スライスデータは、行ごとに異なる画像の同様の部分から取られ得る。列内のＰＥの各々は、ＰＥのローカルメモリ回路に格納されたマスクに対して規定される、異なる一組の畳み込みカーネルを適用する。この結果は出力特徴マップ（ＯＦＭ）としてＲＡＭ４０４、…、４０６に格納される。
【００７４】
【数１１】
2021518601.tif 000013
【００７５】
表１に、モジュールｍのメモリコントローラ５０６の、ＲＡＭ／テンソルバンク５０２および５０４の読出しおよび書込みポートへの接続をまとめている。この接続は図７にも示されている。
【００７６】
【表１】
2021518601.tif 000014
【００７７】
【数１２】
2021518601.tif 000015
【００７８】
表１では、読出しポート０がすべてのアドレスをカバーし、その他のポートの各々がメモリのアドレスのサブセットをカバーすると示しているが、メモリが２つの読出し・３つの書込みポートメモリセルで作られた場合はすべてのポートがメモリのすべてのアドレスをカバーし得ることが理解されるであろう。
【００７９】
図８は、本開示の実現例と一致する処理要素の回路図である。この回路図は、本明細書に記載および図示されるさまざまな実現例で使用可能な処理要素の例を示す。処理要素は、ローカルメモリブロック６０２および演算部６０４を含む。ローカルメモリブロックは２つのメモリ回路６０６および６０８を有し、その各々がそれぞれの入力ポート（Ｄ）および出力ポート（Ｑ）を有する。マルチプレクサ６１２は、ｒｅａｄ＿ｐａｇｅ信号に応じて出力から選択する。ｒｅａｄ＿ｐａｇｅ信号は、現在アクティブである結合メモリ空間の部分（またはページ）を識別する。
【００８０】
いくつかの実現例によると、各メモリ回路６０６および６０８は読出しモードまたは書込みモードのいずれでも動作可能であるが、同時に両方のモードでは動作しない。モードはＲ／Ｗ入力信号の状態によって決定される。メモリ回路６０６および６０８のＲ／Ｗ入力は、ｗｅ＿ｐｉｎｇ信号およびｗｅ＿ｐｏｎｇ信号によってそれぞれ制御される。ｗｅ＿ｐｉｎｇ信号およびｗｅ＿ｐｏｎｇ信号はさらに、ｗａｄｄｒ＿ｈｉ信号を処理要素のクロスポイント行ＩＤと比較することによってゲートされ得る。異なるマスクが、共有のデータバス（ｗｄａｔａ）を引き続き使用しながら、各処理要素にロードされ得るように、各処理要素には異なるＩＤが割当てられ得る。さまざまな実現例によると、低アドレスビットについての２つの異なるアドレスバス（ｐｉｎｇ＿ａｄｄｒ＿ｌｏおよびｐｏｎｇ＿ａｄｄｒ＿ｌｏ）を使用して、書込みポインタと読出しポインタとを区別する。たとえば、ｐｉｎｇ＿ａｄｄｒ＿ｌｏはメモリ回路６０６がアクティブであるときに読出しポインタによって駆動され得るのに対して、ｐｏｎｇ＿ａｄｄｒ＿ｌｏは書込みポインタによって駆動され得る。読出しポインタおよび書込みポインタは、それぞれのアクティブ／非アクティブ状態の変化に応答してｐｉｎｇアドレスバスまたはｐｏｎｇアドレスバスにスワップ可能である。
【００８１】
演算部６０４は乗算器６１４および加算器６１６を含み、これらはＸ＿ｄａｔａ信号線上で受信した入力スライスデータに対してテンソル演算を行う。乗算器６１４はまた、マルチプレクサ６１２の出力をテンソル演算への入力として取込む。乗算器６１４の出力は、ｙ＿ｄａｔａ＿ｃａｓｃａｄｅ信号からのデータと共に加算器６１６に与えられる。ｙ＿ｄａｔａ＿ｃａｓｃａｄｅ信号は、列内の前の処理要素の出力から与えられる。処理要素が列内の第１の処理要素である場合、信号のソースは、処理要素または他の場所に格納され得る初期化値に対応し得る。加算器６１６は、特定の実現例に応じて、バイアス入力も受信し得る。
【００８２】
図８は、入力クロック（三角形）記号を有するボックスによって表わされる多数のクロック制御レジスタ（フリップフロップ）を示す。当該レジスタを使用して適切な信号タイミングを提供することができる。たとえば、レジスタブロック６１８は、メモリ回路６０６および６０８が使用する制御信号およびデータ信号を同期させて遅延させる。レジスタブロック６１８は、ｙ＿ｄａｔａ＿ｃａｓｃａｄｅデータ入力との同期性を維持するために、列に沿った各点で制御信号を遅延させるのに有用であり得る。別の例として、レジスタ６１０を使用して、行内の後続の処理要素に対して行データをパイプライン化することができる。
【００８３】
図９は、開示される回路およびプロセスをその上で実現し得るプログラマブル集積回路（ＩＣ）９００を示す。プログラマブルＩＣはＳｏＣまたはＳｉＰとして実現される場合もあり、フィールドプログラマブルゲートアレイ論理（ＦＰＧＡ）を、他のプログラマブルリソースと合わせて含む。ＦＰＧＡ論理は、いくつかの異なる種類の配置されたプログラマブル論理ブロックを含み得る。たとえば、図９が示すプログラマブルＩＣ９００は、マルチギガビットトランシーバ（ＭＧＴ）９０１と、構成可能論理ブロック（ＣＬＢ）９０２と、ランダムアクセスメモリブロック（ＢＲＡＭ）９０３と、入出力ブロック（ＩＯＢ）９０４と、構成およびクロッキング論理（ＣＯＮＦＩＧ／ＣＬＯＣＫＳ）９０５と、デジタル信号処理ブロック（ＤＳＰ）９０６と、特殊入出力ブロック（Ｉ／Ｏ）９０７（たとえば、クロックポート）と、デジタルクロックマネージャ、アナログ−デジタル変換器、およびシステム監視論理などの他のプログラマブル論理９０８と含む、多数の異なるプログラマブルタイルを含む。ＦＰＧＡ論理を有するプログラマブルＩＣとしては、さらに専用プロセッサブロック（ＰＲＯＣ）９１０と、内部および外部再構成ポート（図示せず）とを含むものもある。
【００８４】
いくつかのＦＰＧＡ論理において、各プログラマブルタイルはプログラマブルインターコネクト要素（ＩＮＴ）９１１を含み、このインターコネクト要素は、隣接する各タイルにおける対応のインターコネクト要素との間の標準接続を有する。したがって、プログラマブルインターコネクト要素は、全体として図示のＦＰＧＡ論理のプログラマブルインターコネクト構造を実現する。図９の上部に含まれている例で示すように、プログラマブルインターコネクト要素ＩＮＴ９１１は、同一のタイル内のプログラマブル論理要素との間の接続も有する。
【００８５】
たとえば、ＣＬＢ９０２は、１つのプログラマブルインターコネクト要素ＩＮＴ９１１に加えて、ユーザ論理を実現するようにプログラムされ得る構成可能論理要素ＣＬＥ９１２を含み得る。ＢＲＡＭ９０３は、１つ以上のプログラマブルインターコネクト要素に加えてＢＲＡＭ論理要素（ＢＲＬ）９１３を含み得る。通例、１つのタイルに含まれるインターコネクト要素の数は、タイルの高さによって決まる。図示された実施形態においては、ＢＲＡＭタイルの高さはＣＬＢ５個分と等しいが、他の数（たとえば４個）が用いられてもよい。ＤＳＰタイル９０６は、適切な数のプログラマブルインターコネクト要素に加えて、ＤＳＰ論理要素（ＤＳＰＬ）９１４を含み得る。ＩＯＢ９０４は、たとえば、プログラマブルインターコネクト要素ＩＮＴ９１１の１つのインスタンスに加えて、入出力論理要素（ＩＯＬ）９１５の２つのインスタンスを含み得る。当業者には明らかであるが、たとえば入出力論理要素９１５に接続される実際のＩ／Ｏボンドパッドは、図示されたさまざまな論理ブロック上に金属を積層することによって製造され、典型的には入出力論理要素９１５の領域にあるとは限らない。
【００８６】
図示された実施形態においては、ダイの中心付近の列領域（図９において陰影付きで示す領域）は、構成、クロック、および他の制御論理に用いられる。この列から伸びる水平領域９０９を用いて、プログラマブルＩＣの幅にわたってクロックおよび構成信号を分配する。なお、「列」領域および「水平」領域という呼称は、図面を縦置きして見た向きを基準としている。
【００８７】
図９に示されるアーキテクチャを使用するプログラマブルＩＣには、当該プログラマブルＩＣの大部分を構成する規則正しい列構造に割って入る追加の論理ブロックが含まれる場合もある。この追加の論理ブロックは、プログラマブルブロックおよび／または専用論理であってもよい。たとえば、図９に示されるプロセッサブロックＰＲＯＣ９１０は、いくつかのＣＬＢおよびＢＲＡＭのいくつかの列にまたがる。
【００８８】
なお、図９が意図するのは、プログラマブルＩＣのアーキテクチャの一例にすぎない。１列中の論理ブロックの数、列の相対幅、列の数および順番、列に含まれる論理ブロックの種類、論理ブロックの相対サイズ、ならびに、図９の上部に含まれているインターコネクト／論理の実現例は、単なる例として示されている。たとえば典型的には、ユーザ論理の効率的な実現を容易にするために、実際のプログラマブルＩＣでは、ＣＬＢが現れる場合は必ず２列以上のＣＬＢが隣接して含まれている。
【００８９】
態様および特徴が別々の図に記載されている場合があるが、組合わせが明示的に図示されていないとしても、または、組合わせとして明示的に説明されていないとしても、ある図中の特徴を別の図中の特徴と組合わせてもよいことが理解されるであろう。
【００９０】
上述の方法およびシステムは、さまざまなニューラルネットワークに適用可能であると考えられる。本明細書を考慮することによって、他の態様および特徴が当業者に明らかになるであろう。上述の方法およびシステムは、ソフトウェアを実行するように構成された１つ以上のプロセッサとして、特定用途向け集積回路（ＡＳＩＣとして）、またはプログラマブル論理デバイスの論理として実現されてもよい。本明細書および図面は例示にすぎず、本発明の真の範囲は以下の特許請求の範囲によって示されるということが意図される。
【図１】
2021518601.tif 000017
【図２】
2021518601.tif 000018
【図３】
2021518601.tif 000019
【図４】
2021518601.tif 000020
【図５】
2021518601.tif 000021
【図６】
2021518601.tif 000022
【図７】
2021518601.tif 000023
【図８】
2021518601.tif 000024
【図９】
2021518601.tif 000025
【国際調査報告】
2021518601.tif 000026
2021518601.tif 000027
2021518601.tif 000028