(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-03-13
(45)【発行日】2023-03-22
(54)【発明の名称】畳み込み演算のための装置及び方法
(51)【国際特許分類】
G06F 17/10 20060101AFI20230314BHJP
G06F 7/523 20060101ALI20230314BHJP
G06F 7/50 20060101ALI20230314BHJP
【FI】
G06F17/10 A
G06F7/523
G06F7/50
(21)【出願番号】P 2021545885
(86)(22)【出願日】2020-04-07
(86)【国際出願番号】 CN2020083574
(87)【国際公開番号】W WO2021073053
(87)【国際公開日】2021-04-22
【審査請求日】2021-08-05
(31)【優先権主張番号】201910977395.3
(32)【優先日】2019-10-15
(33)【優先権主張国・地域又は機関】CN
(73)【特許権者】
【識別番号】512015127
【氏名又は名称】バイドゥ オンライン ネットワーク テクノロジー(ペキン) カンパニー リミテッド
(74)【代理人】
【識別番号】100118902
【氏名又は名称】山本 修
(74)【代理人】
【識別番号】100106208
【氏名又は名称】宮前 徹
(74)【代理人】
【識別番号】100196508
【氏名又は名称】松尾 淳一
(74)【代理人】
【識別番号】100138759
【氏名又は名称】大房 直樹
(72)【発明者】
【氏名】ジョウ,ジョーンリヤーン
【審査官】坂東 博司
(56)【参考文献】
【文献】米国特許出願公開第2019/0228051(US,A1)
【文献】米国特許出願公開第2019/0026078(US,A1)
【文献】特開平03-201817(JP,A)
【文献】特開平05-158966(JP,A)
【文献】米国特許第08117247(US,B1)
【文献】米国特許出願公開第2008/313439(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 17/10
G06F 7/523
G06F 7/50
(57)【特許請求の範囲】
【請求項1】
畳み込み演算のための装置であって、
それぞれ第1行列と第2行列から行列要素を受信し、前記第1行列と前記第2行列における互に対応する該当行列要素をそれぞれ乗算して複数の積要素を生成するように構成される複数の乗算器と、
それぞれ前記複数の乗算器に結合され且つそれぞれ複数のキャッシュユニットを含む複数の分散型キャッシュであって、前記複数の積要素をそれぞれ前記複数の分散型キャッシュにおける該当キャッシュユニットに記憶するように構成されるものと、
前記複数の分散型キャッシュに結合され且つ直列に結合された複数のレジスタを含み、読出制御信号を受信し、前記読出制御信号を段階的に遅延させ、段階的に遅延された複数の読出制御信号を出力し、前記複数の分散型キャッシュにそれぞれ前記読出制御信号と前記段階的に遅延された複数の読出制御信号を提供するように構成されるレジスタ遅延チェーンと、
前記複数の分散型キャッシュに結合され、前記複数の分散型キャッシュから、前記読出制御信号と前記段階的に遅延された複数の読出制御信号に対応するキャッシュユニットにおける積要素を受信し、受信された複数の分散型キャッシュの該当キャッシュユニットにおける積要素に基づいて累積加算データを生成するように構成される累積加算回路とを含む、畳み込み演算のための装置。
【請求項2】
前記累積加算回路は、
前記複数の分散型キャッシュに結合され、前記読出制御信号と前記段階的に遅延された複数の読出制御信号に対応するキャッシュユニットにおける積要素を受信するように構成されるマルチプレクサモジュールと、
それぞれ前記マルチプレクサモジュールに結合される複数のアキュムレータであって、前記複数の
アキュムレータにおける各アキュムレータは、
前記マルチプレクサモジュールから、前記複数の分散型キャッシュにおける、前記アキュムレータに対応するキャッシュユニットの積要素を受信し、受信された積要素に基づいて前記累積加算データを生成するように構成されるものとを含む、請求項1に記載の装置。
【請求項3】
前記複数のアキュムレータの数は前記複数の分散型キャッシュにおける各分散型キャッシュの前記複数のキャッシュユニットの数に等しい、請求項2に記載の装置。
【請求項4】
前記複数の分散型キャッシュにおける前記複数のキャッシュユニットにそれぞれ対応する読出制御信号を順次生成するように構成される読出制御信号生成回路を更に含む、請求項1に記載の装置。
【請求項5】
前記複数の分散型キャッシュは、複数のクロック周期内における各クロック周期において、前記複数の積要素をそれぞれ前記複数の分散型キャッシュにおける前記クロック周期に対応するキャッシュユニットに記憶するように構成され、
前記読出制御信号生成回路は、前記複数のクロック周期内における各クロック周期において、前記複数の分散型キャッシュにおける該当キャッシュユニットに対応する読出制御信号を生成するように構成される、請求項4に記載の装置。
【請求項6】
前記複数の分散型キャッシュは、各クロック周期において生成された前記複数の積要素をそれぞれ順に前記複数の分散型キャッシュにおける該当キャッシュユニットに記憶するように構成され、
前記読出制御信号生成回路は、前記複数のクロック周期内における各クロック周期において、前記複数のキャッシュユニットにおける1つのキャッシュユニットに対する読出アドレスを含む前記読出制御信号を生成し、次のクロック周期において前記読出アドレスに1つのアドレス単位を増加させるように構成される、請求項5に記載の装置。
【請求項7】
前記複数の分散型キャッシュにおける各分散型キャッシュは前記読出アドレスに対応するキャッシュユニットにおける積要素を前記累積加算回路に出力するように構成される、請求項6に記載の装置。
【請求項8】
前記装置はフィールドプログラマブルゲートアレイ内に含まれる、請求項1に記載の装置。
【請求項9】
前記複数の分散型キャッシュにおける各分散型キャッシュはルックアップテーブルメモリ(LUTM)である、請求項8に記載の装置。
【請求項10】
特定用途向け集積回路内に含まれる、請求項1に記載の装置。
【請求項11】
前記第1行列は入力データセット行列であり、前記第2行列はフィルタセット行列であり、
前記入力データセット行列は複数のチャネルの入力データ行列を含み、前記フィルタセット行列は複数のチャネルのフィルタ行列を含み、
前記入力データ行列のチャネルの数は前記フィルタ行列のチャネルの数に等しい、請求項1から10のいずれか一項に記載の装置。
【請求項12】
前記複数の分散型キャッシュにおける各分散型キャッシュの前記複数のキャッシュユニットの数は前記フィルタ行列のチャネルの数に等しい、請求項11に記載の装置。
【請求項13】
複数のクロック周期内における各クロック周期において、1つのチャネルのフィルタ行列と対応する1つのチャネルの入力データ行列における互に対応する該当行列要素はそれぞれ前記複数の乗算器に入力される、請求項11に記載の装置。
【請求項14】
前記複数の分散型キャッシュの数は前記フィルタ行列における行列要素の数に等しい、請求項11に記載の装置。
【請求項15】
前記複数のレジスタの数は前記複数の分散型キャッシュの数より所定値だけ小さい、請求項14に記載の装置。
【請求項16】
畳み込み演算のための方法であって、
第1行列と第2行列から行列要素を受信し、前記第1行列と前記第2行列における互に対応する該当行列要素をそれぞれ乗算して複数の積要素を生成することと、
前記複数の積要素をそれぞれ複数の分散型キャッシュにおける該当キャッシュユニットに記憶することと、
読出制御信号を受信し、前記読出制御信号を段階的に遅延させ、段階的に遅延された複数の読出制御信号を出力し、前記複数の分散型キャッシュにそれぞれ前記読出制御信号と前記段階的に遅延された複数の読出制御信号を提供することと、
前記複数の分散型キャッシュから、前記読出制御信号と前記段階的に遅延された複数の読出制御信号に対応するキャッシュユニットにおける積要素を受信することと、
受信された複数の分散型キャッシュの該当キャッシュユニットにおける積要素に基づいて累積加算データを生成することと、を含む畳み込み演算のための方法。
【請求項17】
前記複数の分散型キャッシュにおける複数のキャッシュユニットにそれぞれ対応する読出制御信号を順次生成することを更に含む請求項16に記載の方法。
【請求項18】
前記複数の積要素を記憶することは、複数のクロック周期内における各クロック周期において、前記複数の積要素をそれぞれ前記複数の分散型キャッシュにおける前記クロック周期に対応するキャッシュユニットに記憶することを含み、
前記読出制御信号を生成することは、前記複数のクロック周期内における各クロック周期において、前記複数の分散型キャッシュにおける該当キャッシュユニットに対応する読出制御信号を生成することを含む、請求項17に記載の方法。
【請求項19】
前記複数の積要素を記憶することは、各クロック周期において生成された前記複数の積要素をそれぞれ順に前記複数の分散型キャッシュにおける該当キャッシュユニットに記憶することを含み、
前記読出制御信号を生成することは、前記複数のクロック周期内における各クロック周期において、前記複数のキャッシュユニットにおける1つのキャッシュユニットに対する読出アドレスを含む前記読出制御信号を生成し、次のクロック周期において前記読出アドレスに1つのアドレス単位を増加させることを含む、請求項18に記載の方法。
【請求項20】
前記累積加算データを生成することは、前記読出アドレスに対応するキャッシュユニットにおける積要素に基づいて前記累積加算データを生成することを含む、請求項19に記載の方法。
【発明の詳細な説明】
【関連出願の相互参照】
【0001】
本願は、2019年10月15日に出願された中国特許出願201910977395.3の優先権を請求し、その出願の全体が参照によって本明細書に組み込まれる。
【技術分野】
【0002】
本願の実施例は、主にデータ処理分野に関し、より具体的には、畳み込み演算のための装置及び方法に関する。
【背景技術】
【0003】
深層学習理論の提出と発展に伴い、畳み込みニューラルネットワークは益々多く注目を集め、発展してきた。畳み込みアルゴリズムは、畳み込みニューラルネットワークのコアとなるアルゴリズムであり、畳み込みニューラルネットワークの90%の演算時間を占める。そのため、畳み込み演算は、フィールドプログラマブルゲートアレイ(FPGA)に基づくニューラルネットワークのハードウェアアクセラレータを設計する際の主な最適化対象である。畳み込みアルゴリズムのハードウェア回路設計は、ハードウェアアクセラレータの資源使用量及び達成できる演算力に直接的に関与する。
【0004】
従来の解決手段では、畳み込みアルゴリズムに基づいて定義された加算ツリーの構造を採用している。畳み込みの加算ツリーの実現では、畳み込みアルゴリズムの6層循環の特徴に基づいて、畳み込み演算の6つの次元を十分に展開する。すなわち、まずフィルタ行列と入力データ行列における対応点に乗算を行い、その後、フィルタ行列のウィンドウ内及びチャネル(Channel)の方向において、各点毎に積算を行い、この実現は、容易に且つ直接的に行うことができる。しかし、この実現の欠点も明らかであり、例えば、演算の次元を増加させる場合、加算器の深さを増加させる必要があり、消費された資源も指数関数的に増加し、資源に依存するFPGAにとっては許容できない。
【発明の概要】
【0005】
本開示の実施例に基づいて、改良された特性を有する畳み込み演算のための装置及び方法を提供する。
本願の第1態様では、畳み込み演算のための装置を提供する。前記装置は、それぞれ第1行列と第2行列から行列要素を受信し、前記第1行列と前記第2行列における互に対応する該当行列要素をそれぞれ乗算して複数の積要素を生成するように構成される複数の乗算器と、それぞれ前記複数の乗算器に結合され且つそれぞれ複数のキャッシュユニットを含む複数の分散型キャッシュであって、前記複数の積要素をそれぞれ前記複数分散型キャッシュにおける該当キャッシュユニットに記憶するように構成されるものと、前記複数の分散型キャッシュに結合され且つ直列に結合された複数のレジスタを含み、読出制御信号を受信し、前記読出制御信号を段階的に遅延させて、段階的に遅延された複数の読出制御信号を出力し、前記複数の分散型キャッシュにそれぞれ前記読出制御信号と前記段階的に遅延された複数の読出制御信号を提供するように構成されるレジスタ遅延チェーンと、前記複数の分散型キャッシュに結合される、前記複数の分散型キャッシュから、前記読出制御信号と前記段階的に遅延された複数の読出制御信号に対応するキャッシュユニットにおける積要素を受信し、受信された複数の分散型キャッシュの該当キャッシュユニットにおける積要素に基づいて累積加算データを生成するように構成される累積加算回路と、を含む。
【0006】
本願の第2態様では、畳み込み演算のための方法を提供する。前記方法は、第1行列と第2行列から行列要素を受信し、前記第1行列と前記第2行列における互に対応する該当行列要素をそれぞれ乗算して複数の積要素を生成することと、前記複数の積要素をそれぞれ複数の分散型キャッシュにおける該当キャッシュユニットに記憶することと、読出制御信号を受信し、前記読出制御信号を段階的に遅延させ、段階的に遅延された複数の読出制御信号を出力し、前記複数の分散型キャッシュにそれぞれ前記読出制御信号と前記段階的に遅延された複数の読出制御信号を提供することと、前記複数の分散型キャッシュから、前記読出制御信号と前記段階的に遅延された複数の読出制御信号に対応するキャッシュユニットにおける積要素を受信することと、受信された複数の分散型キャッシュの該当キャッシュユニットにおける積要素に基づいて累積加算データを生成することと、を含む。
【0007】
理解すべきことは、本発明の明細書に記述された内容は、本願の実施例の肝心又は重要な特徴を制限するものでもなく、本願の範囲を制限するものでもないことである。本発明の他の特徴は、以下の説明により容易に理解され得る。
【図面の簡単な説明】
【0008】
図面に合わせて以下の詳細な説明を参照しながら、本願の各実施例の上記と他の特徴、利点及び態様は、より顕著になる。図面において、同一又は類似の符号は同一又は類似の元素を示し、図面において、
【
図2】本願の実施例による畳み込み演算のための装置を示すブロック図である。
【
図3】本願の実施例による畳み込み演算のための装置の模式図である。
【
図4】本願の実施例による各クロック周期内で入力された行列要素と生成された積要素の模式図である。
【
図5】本願の実施例による各クロック周期内で読み取った積要素の模式図である。
【
図6】本願の実施例による畳み込み演算のための方法を示すフローチャートである。
【発明を実施するための形態】
【0009】
以下、図面を参照しながら本願の実施例をより詳細に説明する。図面では、本願の幾つかの実施例を示すが、理解すべきことは、本願は、様々な形態によって実現することができ、本明細書に記載される実施例に限定されると解釈すべきではないことである。逆で、提供するこれらの実施例は、本願をより明確と全体的に理解するためのものである。理解すべきことは、本願の図面及び実施例は、例示的なものに過ぎず、本願の保護範囲を限定するためのものではないことである。
【0010】
本願の実施例の説明において、「含む」の用語及びその類似用語は、開放的に含む、すなわち「含むがこれらに限定されない」と理解すべきである。用語「に基づいて」は、「少なくとも部分的に...に基づいて」と理解すべきである。「一実施例」又は「当該実施例」は、「少なくとも1つの実施例」であると理解すべきである。技術用語「第1」、「第2」などの用語は、異なるまたは同一のものを指すことがある。以下、他の明確な定義と暗黙的定義を含める可能性もある。
【0011】
上述した畳み込みの加算ツリーの実現に比べて、資源を節約するために、別の従来の解決手段ではシストリックアレイ構造を利用している。シストリックアレイの実現において、畳み込み演算の5つの次元が空間的に展開され、チャネルの次元が時間的に展開される。このような解決手段では、資源を効果的に利用することができ、畳み込み演算の次元を増加させる場合、シストリックアレイの実現に必要な資源を増加させる必要なく、チャネルの方向における積算を時間的次元で延長させるだけであるためである。この従来の解決手段では、FPGAにおけるレジスタ資源によってチャネル的次元での遅延チェーンを実現する。例えば、この従来の解決手段では、レジスタを用いて中間計算データを6個のクロック周期に遅延させてから、積算を行う。しかし、このような解決手段では、レジスタ資源を過度消費するという欠点も存在する。FPGAの全体的な資源は、一般的にLUT(ルックアップテーブル)、LUTM(LUTメモリ)、レジスタ、DSP(デジタル信号プロセッサ)を含む。レジスタ資源の過度消費はFPGAの全体的な資源の使用がアンバランスになることを引き起こし、よって「木のバケツの効果」を引き起こす。
【0012】
少なくとも上記問題を解決するために、本願の実施例に基づいて、ハードウェア資源を節約でき且つ必要なハードウェア資源のバランスが取れた畳み込み演算の手段を提供する。本願の実施例に基づいて、2つの行列における互に対応する各行列要素の積は、それぞれ複数の分散型キャッシュの該当キャッシュユニット内に記憶され、複数の分散型キャッシュの該当キャッシュユニットの読出制御信号はレジスタ遅延チェーンによって段階的に遅延され、複数の分散型キャッシュから受信された各読出制御信号に対応するキャッシュユニットにおける積に基づいて累積加算結果を生成する。
【0013】
本願の実施例に基づいて、複数の分散型キャッシュと、複数の分散型キャッシュに用いられる読出制御信号に対するレジスタ遅延チェーンを構成することで、シストリックアレイ構造における中間計算データに対するレジスタ遅延チェーンに類似する機能を実現し、これによって、畳み込み演算を実現する。そのため、各分散型キャッシュでは積を保持する場合に、読出制御信号のみを段階的に遅延させ、よってシストリックアレイ構造のようにレジスタ遅延チェーンによる中間計算データの伝達を回避する。このようにして、本願の実施例による畳み込み演算の解決手段はレジスタ資源を節約すると同時に全体消費電力を低減させる。一部の実施例において、通常に使用されていない分散型キャッシュ、例えば、FPGAにおけるLUTMを利用し、全体的な設計資源を節約でき且つ資源のバランスが取れる。
【0014】
下記内容では、図面に合わせて様々な実施例を参照しながら本願を詳細に説明する。
図1は畳み込み演算のモデル100の模式図である。
図1に示すように、入力データセット行列は複数の入力データ行列102を含み、フィルタセット行列は複数のフィルタ行列104を含む。入力データ行列102はセンサにより出力された様々なデータの行列であり、フィルタ行列104は畳み込み演算を行うためのウィンドウ行列である。例えば、
図1に示すようなCは、入力データセット行列における入力データ行列102のチャネルの数及びフィルタセット行列におけるフィルタ行列104のチャネルの数を示す。更に、各入力データ行列102の次元はH×Wであり、各フィルタ行列104の次元はR×Sである。
【0015】
図1に示すように、各フィルタセット行列における複数のフィルタ行列104は入力データセット行列における複数の入力データ行列102と畳み込み演算を行い、1つの出力行列106を生成する。そのため、複数のフィルタセット行列を畳み込み演算に使用する場合、複数の出力チャネルを有する出力行列106を生成する。例えば、M個のフィルタセット行列を使用する場合、M個のチャネルを有する出力行列106を生成し、各出力行列106の次元はE×Fである。
【0016】
畳み込み演算において、1つのフィルタ行列104は1つのウィンドウにおいて1つの該当する入力データ行列102と畳み込み演算を行う場合、入力データ行列102のこのウィンドウに対応する部分行列における各行列要素とフィルタ行列104の該当行列要素を乗算し、積要素を生成し、これらの積要素が加算されることで累積加算データを生成する。例えば、
図1に示すように、C個のフィルタ行列104は示されるウィンドウにおいてC個の入力データ行列102と畳み込み演算を行い、C個の累積加算データを生成し、これらのC個の累積加算データが加算されることで1つの出力行列106における1つの行列要素を生成する。入力データ行列102内におけるウィンドウの変位によって、1つの出力行列106における全ての行列要素を生成する。更にM個のフィルタセット行列を使用する場合、以上のようにM個の出力行列106を生成し、次のステップでの他の演算に用いられる。
【0017】
下記内容において、複数のフィルタ行列104は1つのウィンドウにおいてそれぞれ複数の入力データ行列102の対応する部分行列と畳み込み演算を行う状況を一例として説明する。
【0018】
図2は本願の実施例による畳み込み演算のための装置200を示すブロック図である。
図2に示すように、装置200は、複数の乗算器202、複数の分散型キャッシュ204、レジスタ遅延チェーン206と累積加算回路208を含む。
【0019】
複数の乗算器202は、それぞれ第1行列と第2行列から行列要素を受信し、第1行列と第2行列における互に対応する該当行列要素をそれぞれ乗算して複数の積要素を生成するように構成される。一部の実施例において、第1行列は複数のチャネルの入力データ行列を含む入力データセット行列であり、第2行列は複数のチャネルのフィルタ行列を含むフィルタセット行列である。一部の実施例において、複数の乗算器202は、複数のクロック周期内における各クロック周期において、行列要素を受信し且つ複数の積要素を生成する。一部の実施例において、入力データセット行列はC個のチャネルの入力データ行列を含み、フィルタセット行列はC個のチャネルのフィルタ行列を含み、複数の乗算器202はC個のクロック周期内における各クロック周期において1つのチャネルからの入力データ行列と対応する1つのチャネルのフィルタ行列の行列要素を受信し、複数の積要素を生成する。
【0020】
複数の分散型キャッシュ204は、それぞれ複数の乗算器202に結合され、それぞれ複数のキャッシュユニットを含む。複数の分散型キャッシュ204は、複数の積要素をそれぞれ複数の分散型キャッシュ204内における該当キャッシュユニットに記憶するように構成される。一部の実施例において、複数の分散型キャッシュ204は、複数のクロック周期内における各クロック周期において、複数の乗算器202から複数の積要素を受信し、複数の積要素をそれぞれ対応する分散型キャッシュのこのクロック周期に対応するキャッシュユニット内に記憶する。一部の実施例において、複数の分散型キャッシュ204における各分散型キャッシュは、複数のクロック周期において積要素を順に各キャッシュユニット内に記憶する。
【0021】
レジスタ遅延チェーン206は、複数の分散型キャッシュ204に結合され且つ直列に結合された複数のレジスタを含む。レジスタ遅延チェーン206は、読出制御信号を受信し、読出制御信号を段階的に遅延させ、段階的に遅延された複数の読出制御信号を出力し、複数の分散型キャッシュ204にそれぞれこの読出制御信号と段階的に遅延された複数の読出制御信号を提供するように構成される。一部の実施例において、レジスタ遅延チェーン206は、複数のクロック周期内における各クロック周期において、読出制御信号を受信し、この読出制御信号は各分散型キャッシュのあるキャッシュユニットに対応する。一部の実施例において、複数の分散型キャッシュ204における第1分散型キャッシュは、複数のクロック周期における各クロック周期において遅延されていない読出制御信号を受信する。一部の実施例において、レジスタ遅延チェーン206における各レジスタは、複数のクロック周期内における各クロック周期において、このレジスタで受信された読出制御信号を遅延させ、遅延された読出制御信号を次のクロック周期に、対応するキャッシュユニット及び次の段階のレジスタに提供される。
【0022】
累積加算回路208は複数の分散型キャッシュ204に結合される。累積加算回路208は、複数の分散型キャッシュ204から、読出制御信号と段階的に遅延された複数の読出制御信号に対応するキャッシュユニットにおける積要素を受信し、受信された複数の分散型キャッシュの該当キャッシュユニットにおける積要素に基づいて累積加算データを生成するように構成される。一部の実施例において、累積加算回路208は、複数のクロック周期内における各クロック周期において、複数の分散型キャッシュ204からそれぞれ各分散型キャッシュで受信された読出制御信号に対応する各キャッシュユニットにおける積要素を受信する。一部の実施例において、累積加算回路208は、複数の分散型キャッシュ204の同じクロック周期に対応する各キャッシュユニットから受信される積要素に対する積算を行う。一部の実施例において、累積加算回路208は、同じクロック周期で生成された積要素に対する積算を行う。一部の実施例において、入力データセット行列はC個のチャネルの入力データ行列を含み、且つフィルタセット行列はC個のチャネルのフィルタ行列を含む場合、C個のクロック周期の後、累積加算回路208は、1つのチャネルの入力データ行列と、対応する1つのチャネルのフィルタ行列とウィンドウにおける畳み込み演算の結果を出力し、更に1つのクロック周期を経た後、累積加算回路208は、他のチャネルの入力データ行列と、対応する1つのチャネルのフィルタ行列とウィンドウにおける畳み込み演算の結果を出力し、以下同様である。
【0023】
図2に示すように、一部の実施例において、装置200は読出制御信号生成回路210を更に含んでもよい。読出制御信号生成回路210は、複数の分散型キャッシュ204における複数のキャッシュユニットにそれぞれ対応する読出制御信号を順に生成するように構成される。一部の実施例において、読出制御信号生成回路210は、複数のクロック周期内における各クロック周期において、複数の分散型キャッシュ204における該当キャッシュユニットに対応する読出制御信号を生成する。一部の実施例において、読出制御信号生成回路210は、複数のクロック周期内における各クロック周期において、複数のキャッシュユニットにおける1つのキャッシュユニットに対する読出アドレスを含む読出制御信号を生成し、次のクロック周期において読出アドレスに1つのアドレス単位を増加させる。一部の実施例において、読出アドレスは、あるキャッシュユニット、あるクロック周期及びこのクロック周期で生成された積要素に対応する。
【0024】
一部の実施例において、複数の分散型キャッシュ204における各分散型キャッシュが読出制御信号と段階的に遅延された複数の読出制御信号を受信することに応じて、複数の分散型キャッシュ204は、読出制御信号における読出アドレスに対応するキャッシュユニットにおける積要素を累積加算回路208に出力する。
【0025】
本願の実施例に基づいて、複数の分散型キャッシュと、複数の分散型キャッシュに用いられる読出制御信号に対するレジスタ遅延チェーンを構成することで、各分散型キャッシュでは積を保持する場合に、読出制御信号のみを段階的に遅延させ、よってシストリックアレイ構造のようにレジスタ遅延チェーンによって中間計算データを伝達することを回避する。このようにして、本願の実施例による装置200はレジスタ資源を節約すると同時に全体消費電力を低減させる。
【0026】
一部の実施例において、装置200はFPGA内に含まれる。代替的な実施例において、装置200は特定用途向け集積回路内に含まれる。
一部の実施例において、各分散型キャッシュはFPGAにおけるLUTM資源である。例えば、このFGPAはザイリンクス社(Xilinx)製のFPGAである。このようにして、FPGAにおける一般的に使用されていないLUTMを分散型キャッシュとして利用することで、全体的な設計資源を節約し且つ資源のバランスを実現する。更に、LUTMの操作が簡単で、複雑な制御ロジックが必要とされないため、より高いクロックの設計をサポートでき、ニューラルネットワークアクセラレータの全体的な演算力を向上させることができる。
【0027】
図3は本願の実施例による畳み込み演算のための装置300の模式図である。
図3の装置300は、複数の乗算器202、複数の分散型キャッシュ204、レジスタ遅延チェーン206と累積加算回路208の具体的な構成を示す。装置300は装置200の具体的な実施形態であると考えられてもよい。理解すべきことは、図面の簡略化のために、
図3において読出制御信号生成回路210の具体的な構成を図示せず、読出制御信号ADDR_nを示していることである。読出制御信号生成回路210は、いかなる公知の回路により実現されてよい。
【0028】
図3に示すように、複数の乗算器202は乗算器M0~M15を含み、複数の分散型キャッシュ204は分散型キャッシュLUTM0~LUTM15を含み、レジスタ遅延チェーン206は複数のレジスタreg1~reg15を含み、累積加算回路208はマルチプレクサモジュールMULとアキュムレータACC0~ACC15を含む。更に、フィルタ行列における行列要素w0~w15はそれぞれ乗算器M0~M15に入力され、入力データ行列における該当行列要素i0~i15はそれぞれ乗算器M0~M15に入力される。更に、分散型キャッシュLUTM0~LUTM15における各分散型キャッシュはそれぞれ複数のキャッシュユニットData0~Data15を含む。理解すべきことは、
図3において各部品の具体的な数を示しているが、本願の実施例による装置300は他のいかなる数の各部品を含んでもよいことである。
【0029】
一部の実施例において、乗算器M0~M15の数はフィルタ行列における行列要素の数に等しい。一部の実施例において、分散型キャッシュLUTM0~LUTM15の数はフィルタ行列における行列要素の数に等しい。一部の実施例において、分散型キャッシュLUTM0~LUTM15における各分散型キャッシュのキャッシュユニットData0~Data15の数はフィルタ行列のチャネルの数に等しい。一部の実施例において、アキュムレータACC0~ACC15の数はキャッシュユニットData0~Data15の数に等しい。一部の実施例において、レジスタreg1~reg15の数は分散型キャッシュLUTM0~LUTM15の数より所定値だけ小さい。例えば、この所定値は1である。
図3において、一例として、フィルタ行列における行列要素の数R×Sは16に等しく、フィルタ行列のチャネルの数Cは16に等しい。
【0030】
図3に示すように、乗算器M0~M15はそれぞれ分散型キャッシュLUTM0~LUTM15に結合される。レジスタreg1~reg15は、相互に直列に結合されることで遅延チェーンを形成し、レジスタreg1は読出制御信号ADDR_nを遅延チェーンの入力として受信し、レジスタreg1~reg15の出力はそれぞれ分散型キャッシュLUTM1~LUTM15に結合される。分散型キャッシュLUTM0~LUTM15はマルチプレクサモジュールMULに結合される。一部の実施例において、分散型キャッシュLUTM0~LUTM15のそれぞれはリング(ring)キャッシュである。マルチプレクサモジュールMULはアキュムレータACC0~ACC15に結合される。各アキュムレータは加算器とレジスタを含み、加算器の出力はレジスタに結合され、レジスタの出力は加算器の1つの入力として加算器に結合されることによって、積算機能を実現する。マルチプレクサモジュールMULの出力はそれぞれ該当加算器の他の入力に結合される。アキュムレータACC0は加算器dsp0とレジスタReg0を含み、アキュムレータACC1は加算器dsp1とレジスタReg1を含む。同様に、アキュムレータACC15は加算器dsp15とレジスタReg15を含む。
【0031】
以下、
図4と
図5に合わせて
図3に示すような畳み込み演算のための装置300の具体的な操作を説明する。
図4は本願の実施例による各クロック周期内で入力された行列要素と生成された積要素の模式図である。
図5は本願の実施例による各クロック周期内で読み取った積要素の模式図である。
【0032】
図3と
図4に示すように、乗算器M0~M15は、複数のクロック周期clock0~clock15内における各クロック周期において、それぞれ行列要素w0~w15及び行列要素i0~i15を受信し、積要素w0*i0~w15*i15を生成する。分散型キャッシュLUTM0~LUTM15は、複数のクロック周期clock0~clock15内における各クロック周期において、積要素w0*i0~w15*i15をそれぞれ対応する分散型キャッシュのキャッシュユニットData0~Data15内におけるクロック周期に対応するキャッシュユニットに記憶する。一例として、分散型キャッシュLUTM0~LUTM15は、クロック周期clock0で生成された積要素w0*i0~w15*i15をそれぞれ各分散型キャッシュのキャッシュユニットData0内に記憶し、分散型キャッシュLUTM0~LUTM15は、クロック周期clock1で生成された積要素w0*i0~w15*i15をそれぞれ各分散型キャッシュのキャッシュユニットData1内に記憶する。同様に、分散型キャッシュLUTM0~LUTM15は、クロック周期clock15で生成された積要素w0*i0~w15*i15をそれぞれ各分散型キャッシュのキャッシュユニットData15内に記憶する。
【0033】
図4において、クロック周期clock16において積要素w0*i0~w15*i15を生成することを示している。この第17のクロック周期clock16は、フィルタ行列が次のウィンドウ位置に変位する時の入力データ行列との畳み込み演算のサイクル開始であると考えられてもよい。
【0034】
図3と
図4に示すように、複数のクロック周期clock0~clock15内における各クロック周期において読出制御信号ADDR_nを生成し、ここで、nは15
以下、0
以上である。一例として、クロック周期clock0において読出制御信号ADDR_0を生成し、それはキャッシュユニットData0に対応し、各分散型キャッシュのキャッシュユニットData0における積要素を読み取るために用いられ、クロック周期clock1において読出制御信号ADDR_1を生成し、それはキャッシュユニットData1に対応し、各分散型キャッシュのキャッシュユニットData1における積要素を読み取るために用いられる。同様に、クロック周期clock15において読出制御信号ADDR_15を生成し、それはキャッシュユニットData15に対応し、各分散型キャッシュのキャッシュユニットData15における積要素を読み取るために用いられる。
【0035】
図3と
図5に示すように、クロック周期clock0で生成された読出制御信号ADDR_0は分散型キャッシュLUTM0に提供され、分散型キャッシュLUTM0のキャッシュユニットData0における積要素w0*i0はクロック周期clock0で読み取られる。クロック周期clock0で生成された読出制御信号ADDR_0はレジスタreg1に入力され、レジスタreg1は読出制御信号ADDR_0を遅延させ、すなわち、レジスタreg1クロック周期clock0において読出制御信号ADDR_0を記憶し、次のクロック周期clock1において読出制御信号ADDR_0を出力する。レジスタreg1は次のクロック周期clock1において遅延された読出制御信号ADDR_0を分散型キャッシュLUTM1に提供し、分散型キャッシュLUTM1のキャッシュユニットData0における積要素w1*i1はクロック周期clock1で読み取られる。更に、クロック周期clock1で生成された読出制御信号ADDR_1は分散型キャッシュLUTM0に提供され、分散型キャッシュLUTM0のキャッシュユニットData1における積要素w0*i0はクロック周期clock1で読み取られる。更に、クロック周期clock1において、読出制御信号ADDR_0はレジスタreg2に入力され、レジスタreg2は読出制御信号ADDR_0を遅延させ、読出制御信号ADDR_1はレジスタreg1に入力され、レジスタreg1は読出制御信号ADDR_1を遅延させる。
【0036】
同様に、クロック周期clock2において、分散型キャッシュLUTM2のキャッシュユニットData0における積要素w2*i2、分散型キャッシュLUTM1のキャッシュユニットData1における積要素w1*i1、及び分散型キャッシュLUTM0のキャッシュユニットData2における積要素w0*i0は読み取られる。更に、クロック周期clock15において、分散型キャッシュLUTM15のキャッシュユニットData0における積要素w15*i15、分散型キャッシュLUTM14のキャッシュユニットData1における積要素w14*i14……及び分散型キャッシュLUTM0のキャッシュユニットData15における積要素w0*i0は読み取られる。
図3は、このクロック周期clock15においてマルチプレクサモジュールMULが各キャッシュユニットData15、Data14、……Data0内における積要素を受信することを示す。
【0037】
図3と
図5に示すように、クロック周期clock0において、マルチプレクサモジュールMULは、分散型キャッシュLUTM0のキャッシュユニットData0における積要素w0*i0を受信し、積要素w0*i0をキャッシュユニットData0に対応するアキュムレータACC0に提供する。クロック周期clock0において、アキュムレータACC0における加算器dsp0は、積要素w0*i0とヌルデータを加算し、累積加算結果をレジスタReg0内に記憶する。クロック周期clock1において、マルチプレクサモジュールMULは、分散型キャッシュLUTM1のキャッシュユニットData0における積要素w1*i1及び分散型キャッシュLUTM0のキャッシュユニットData1における積要素w0*i0を受信し、分散型キャッシュLUTM1のキャッシュユニットData0における積要素w1*i1をキャッシュユニットData0に対応するアキュムレータACC0に提供し、分散型キャッシュLUTM0のキャッシュユニットData1における積要素w0*i0をキャッシュユニットData1に対応するアキュムレータACC1に提供する。クロック周期clock1において、アキュムレータACC0における加算器dsp0は、積要素w1*i1とクロック周期clock0で生成された累積加算データを加算し、新規な累積加算データをレジスタReg0内に記憶し、アキュムレータACC1における加算器dsp1は、積要素w0*i0とヌルデータを加算し、累積加算結果をレジスタReg1内に記憶する。
【0038】
同様に、クロック周期clock15において、アキュムレータACC0における加算器dsp0は、積要素w15*i15とクロック周期clock14で生成された累積加算データを加算し、新規な累積加算データをレジスタReg0内に記憶することで、クロック周期clock0で生成された積要素w0*i0~w15*i15の和、すなわち、畳み込み演算の結果を取得する。16個のクロック周期の後のクロック周期clock16において、アキュムレータACC0はクロック周期clock0で入力された2つの行列の該当行列要素に対する畳み込み演算の結果を出力する。更に、クロック周期clock16において、アキュムレータACC1における加算器dsp1は、積要素w15*i15とクロック周期clock15で生成された累積加算データを加算し、新規な累積加算データをレジスタReg1内に記憶することで、クロック周期clock1で生成された積要素w0*i0~w15*i15の和、すなわち、畳み込み演算の結果を取得する。17個のクロック周期の後のクロック周期clock17において、アキュムレータACC1はクロック周期clock1で入力された2つの行列の該当行列要素に対する畳み込み演算の結果を出力し、以下同様である。
【0039】
図5に示すように、アキュムレータACC0~ACC15は、それぞれ互に1つのクロック周期を遅延させて読み取った該当キャッシュユニットの各積要素を積算し、すなわち、図に示される各斜線における積要素をそれぞれ積算し、よってそれぞれ各積要素が生成されたクロック周期に対応する畳み込み演算の結果を生成する。
【0040】
本願の実施例に基づいて、複数の分散型キャッシュと、複数の分散型キャッシュに用いられる読出制御信号に対するレジスタ遅延チェーンを構成することで、畳み込み演算を実現する。各分散型キャッシュでは積を保持する場合における読出制御信号のみを段階的に遅延させ、シストリックアレイ構造のようにレジスタ遅延チェーンによる中間計算データの伝達を回避する。このようにして、本願の実施例による畳み込み演算のための装置はレジスタ資源を節約すると同時に全体消費電力を低減させる。更に、通常に使用されていない分散型キャッシュ、例えば、FPGAにおけるLUTMを利用し、全体的な設計資源を節約し且つ資源のバランスを実現することができる。
【0041】
図6は本願の実施例による畳み込み演算のための方法600を示すフローチャートである。
図6に示すように、方法600は、ブロック602~610を含む。
ブロック602において、方法600は、第1行列と第2行列から行列要素を受信し、第1行列と第2行列における互に対応する該当行列要素をそれぞれ乗算して複数の積要素を生成することを含む。
【0042】
ブロック604において、方法600は、複数の積要素をそれぞれ複数の分散型キャッシュにおける該当キャッシュユニットに記憶することを含む。
ブロック606において、方法600は、読出制御信号を受信し、読出制御信号を段階的に遅延させ、段階的に遅延された複数の読出制御信号を出力し、複数の分散型キャッシュにそれぞれこの読出制御信号と段階的に遅延された複数の読出制御信号を提供することを含む。
【0043】
ブロック608において、方法600は、複数の分散型キャッシュから、この読出制御信号と段階的に遅延された複数の読出制御信号に対応するキャッシュユニットにおける積要素を受信することを含む。
【0044】
ブロック610において、方法600は、受信された複数の分散型キャッシュの該当キャッシュユニットにおける積要素に基づいて累積加算データを生成することを含む。
一部の実施例において、方法600は、更に、順に複数の分散型キャッシュにおける複数のキャッシュユニットにそれぞれ対応する読出制御信号を生成することを含んでもよい。
【0045】
一部の実施例において、複数の積要素を記憶することは、複数のクロック周期内における各クロック周期において、複数の積要素をそれぞれ複数の分散型キャッシュにおけるクロック周期に対応するキャッシュユニットに記憶することを含み、読出制御信号を生成することは、複数のクロック周期内における各クロック周期において、複数の分散型キャッシュにおける該当キャッシュユニットに対応する読出制御信号を生成することを含む。
【0046】
一部の実施例において、複数の積要素を記憶することは、各クロック周期で生成された複数の積要素をそれぞれ順に複数の分散型キャッシュにおける該当キャッシュユニットに記憶することを含み、読出制御信号を生成することは、複数のクロック周期内における各クロック周期において、複数のキャッシュユニットにおける1つのキャッシュユニットに対する読出アドレスを含む読出制御信号を生成し、次のクロック周期において読出アドレスに1つのアドレス単位を増加させることを含む。
【0047】
一部の実施例において、累積加算データを生成することは、読出アドレスに対応するキャッシュユニットにおける積要素に基づいて累積加算データを生成することを含む。
理解すべきことは、本願の実施例を実施する方法は、システムオンチップ(SoC)アーキテクチャに適用されるように、1つ又は複数のプログラミング言語のいかなる組み合わせで書かれてよいことである。更に、特定の順序を用いて各操作を示すが、理解すべきことは、示された特定の順序又は順に実行するためにこのような操作が求められ、又は全ての図示される操作を実行することで所望の結果を取得することである。一定の環境下で、マルチタスク及び並行処理が有利であり得る。
【0048】
上記説明に様々な具体的な実施例の詳細が含まれているが、本願の範囲に対する限制ではないと理解すべきである。別々の実施例で説明されているいくつかの特徴、単一の実現において組み合わせて実現することもできる。逆で、単一の実現の文脈に説明した様々な特徴は、個別に又はいかなる適切な一部の組み合わせの方式で複数の実現において実現してよい。
【0049】
構造の特徴及び/又は方法のロジックの動作に固有の言語を使用して本主題を説明したが、特許請求の範囲に限定された主題は、必ずしも前述した特定の特徴又は動作に限定されるべきではないことを理解すべきである。むしろ、前述した特定の特徴又は動作は、単に特許請求の範囲を実現する例示的形式に過ぎない。