JP7016942B2 - 演算アクセラレータ - Google Patents

演算アクセラレータ Download PDF

Info

Publication number
JP7016942B2
JP7016942B2 JP2020500125A JP2020500125A JP7016942B2 JP 7016942 B2 JP7016942 B2 JP 7016942B2 JP 2020500125 A JP2020500125 A JP 2020500125A JP 2020500125 A JP2020500125 A JP 2020500125A JP 7016942 B2 JP7016942 B2 JP 7016942B2
Authority
JP
Japan
Prior art keywords
matrix
arithmetic
memory
data
circuit
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2020500125A
Other languages
English (en)
Other versions
JP2020526830A (ja
Inventor
リヤオ,ホゥオン
リウ,ホゥ
ワーン,ハオ
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Publication of JP2020526830A publication Critical patent/JP2020526830A/ja
Application granted granted Critical
Publication of JP7016942B2 publication Critical patent/JP7016942B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/491Computations with decimal numbers radix 12 or 20.
    • G06F7/498Computations with decimal numbers radix 12 or 20. using counter-type accumulators
    • G06F7/4981Adding; Subtracting
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/50Adding; Subtracting
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/52Multiplying; Dividing
    • G06F7/523Multiplying only

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • Mathematical Physics (AREA)
  • Computing Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Software Systems (AREA)
  • Complex Calculations (AREA)

Description

[関連出願への相互参照]
この出願は、2017年7月7日に中国特許庁に出願された「OPERATION ACCELERATOR」という名称の中国特許第201710553286.X号に対する優先権を主張し、その全内容を参照により援用する。
[技術分野]
この出願は、データ計算技術の分野に関し、特に、演算アクセラレータに関する。
現在、2つの行列A及びBの積は、以下の2つの方式のいずれかで計算され得る。
方式1:ベクトルプロセッサを使用することにより計算が実行される。
C=A×Bであり、ベクトルプロセッサは同時にM個の要素を計算できると仮定する。図1を参照すると、ベクトルプロセッサは、行列Aの行i内のベクトル(要素Ai1、Ai2、...、Ai(M-1)及びAiMを含む)をソースレジスタReg0にロードし、次いで、行列Bの行j内のベクトル(要素Bj1、Bj2、...、Bj(M-1)及びBjMを含む)をレジスタReg1にロードし、Reg0及びReg1内の対応する要素を乗算し、最後に、ベクトルプロセッサは、加算木を使用することにより累算演算を完了し、行列Cの行i及び列j内のデータCijを計算する。複数の計算の後に、行列Cが取得され得る。
方式2:計算速度を更に増加させるために、行列の乗算演算は、二次元計算アレイを使用することにより完了され得る。
例えば、二次元計算アレイは、N*Nシストリックアレイ(systolic array)でもよい。1つのベクトルと1つの行列とを乗算する演算は、1つのこのようなシストリックアレイを使用することにより各クロックサイクルにおいて完了され得る。
方式1では、2つのN*N行列の乗算演算を完了するために、N^3個の乗算演算が必要であり、ベクトルプロセッサは、各クロックサイクルにおいてM個の要素を乗算し得るので、1つの乗算演算を完了するために必要な持続時間は、N^3/M個のクロックサイクルである。方式2では、2つのN*N行列の乗算演算を完了するために、N^3個の乗算演算が必要であり、シストリックアレイはN^2個の演算ユニットを有するので、1つの行列演算を完了するために必要な持続時間は、N^3/N^2=N個のクロックサイクルである。方式1と方式2との双方において、N*N行列の乗算演算を完了するのに長い時間がかかる。
この出願の実施形態は、2つのN*N行列に対して乗算演算を実行するための時間を低減するための演算アクセラレータを提供する。
上記の目的を達成するために、この出願の実施形態は、以下の技術的解決策を提供する。
第1の態様によれば、演算アクセラレータが提供される。演算アクセラレータは、第1の行列を記憶するように構成された第1のメモリであり、第1の行列はM*N行列である、第1のメモリと、第2の行列を記憶するように構成された第2のメモリであり、第2の行列はN*K行列である、第2のメモリと、第1のメモリ及び第2のメモリに接続された演算回路であり、演算回路は行列乗算回路と加算回路とを含み、行列乗算回路は演算ブロックを含むM個の演算グループを含み、各演算グループはK個の演算ブロックを含み、各演算ブロックはN個の演算ユニットを含み、演算ユニットは、第1のメモリ及び第2のメモリにより送信されたデータを受信するためにそれぞれ使用される2つの入力を備え、演算ユニットは2つのデータを乗算し、加算回路は、各演算ブロックの計算結果を取得するために、同じ演算ブロックに属する演算ユニットの計算結果を加算するように構成される、演算回路と、演算回路に接続されたコントローラであり、コントローラが以下の動作、すなわち、第2の行列のK個の列ベクトルを各演算グループのK個の演算ブロックにそれぞれ書き込む動作であり、第2の行列のベクトルの第g列内の第jのデータが、K個の演算ブロック内の第gの演算ブロック内の第jの演算ユニットに書き込まれる動作と、第1の行列のM個の行ベクトルをM個の演算グループにそれぞれ送信する動作であり、第1の行列の第iの行ベクトルがM個の演算グループ内の第iの演算グループに送信され、第iの演算グループ内の各演算ブロック内の第jの演算ユニットが第iの行ベクトル内の第jのデータを受信し、それにより、M個の演算グループ内の各演算ユニットが、演算ユニットにより受信された2つのデータに対して乗算演算を実行し、加算回路が、第3の行列を取得するために各演算ブロック内の演算ユニットの計算結果を加算し、第3の行列は第1の行列と第2の行列との積であり、第3の行列内の行i及び列gの要素は、第iの演算グループ内の第gの演算ブロックの計算結果でありM、N及びKは0よりも大きい整数であり、iは0よりも大きくM+1よりも小さい整数であり、gは0よりも大きくK+1よりも小さい整数であり、jは0よりも大きくN+1よりも小さい整数である、動作とを実行するように構成される、コントローラとを含む。
第1の態様において提供される方法では、M個の演算グループがM*N*K個の演算ユニットを含むので、演算アクセラレータは、1つのクロックサイクル内でM*N*K個の乗算演算を実行し得る。この場合、演算アクセラレータは、M*N行列とN*K行列との積を計算し得る。従来技術と比較して、この方法は、行列乗算演算により必要とされる時間を大幅に低減できる。
可能な設計では、加算回路は、M*K個の加算木を含み、1つの加算木は、1つの演算ブロックに対応し、加算木は、対応する演算ブロック内のN個の演算ユニットに接続され、加算木は、加算木に接続されたN個の演算ユニットの計算結果を加算するように構成される。
この可能な設計では、加算回路の構成の構造が具体的に提供される。
可能な設計では、演算ユニットは、記憶ユニットに書き込まれるデータを記憶するように構成された記憶ユニットと、記憶ユニットに接続された乗算回路であり、受信データと記憶ユニットに記憶されたデータとの積を計算するように構成された乗算回路とを含む。
この可能な設計では、演算ユニットの構成の構造が具体的に提供される。
可能な設計では、演算ユニットは、複数の記憶ユニットと、乗算回路と、複数の記憶ユニットに接続された第1の選択回路と、複数の記憶ユニット及び乗算回路に接続された第2の選択回路とを含む。複数の記憶ユニットは、データを記憶するように構成され、第1の選択回路は、乗算回路が乗算演算を実行する前に、複数の記憶ユニットから、乗算回路が乗算演算を実行するときに使用されるデータを記憶するための記憶ユニットを選択するように構成され、第2の選択回路は、乗算回路が乗算演算を実行するときに、乗算回路が乗算演算を実行するときに使用されるデータを記憶するための記憶ユニットを選択するように構成され、乗算回路は、受信データと第2の選択回路により選択された記憶ユニットに記憶されたデータとの積を計算するように構成される。
この可能な設計では、記憶ユニットは、2つのblock(ブロック)に分割されてもよい。演算ユニットが複数の記憶ユニットを含むとき、演算ユニットが1つの記憶ユニット内の1つのblock内のデータに基づいて乗算演算を実行する場合、コントローラは、複数の記憶ユニット内の他の記憶ユニット又は乗算演算に関与する記憶ユニット内の他のblockにデータを更に書き込んでもよく、それにより、演算ユニットの作業効率を改善する。
可能な設計では、第1のメモリは、第1のバスを使用することにより演算回路に接続され、第1のバスのビット幅は、Wi*N*Mであり、第2のメモリは、第2のバスを使用することにより演算回路に接続され、第2のバスのビット幅は、Wi*Nであり、Wiは、演算ユニットにより許容される入力データの最大ビット幅である。
可能な設計では、演算アクセラレータは、第1のメモリ、第2のメモリ及びコントローラに接続された記憶ユニットアクセスコントローラを更に含み、記憶ユニットアクセスコントローラは、コントローラの制御下で、第1の行列及び第2の行列を取得し、第1の行列を第1のメモリに保存し、第2の行列を第2のメモリに保存するように構成される。
可能な設計では、演算アクセラレータは、第1の行列のソースデータを記憶するように構成された第3のメモリと、第1のメモリ、第2のメモリ、第3のメモリ及びコントローラに接続された記憶ユニットアクセスコントローラであり、記憶ユニットアクセスコントローラは、コントローラの制御下で、第1の行列のソースデータ及び第2の行列を取得し、第1の行列のソースデータを第3のメモリに保存し、第2の行列を第2のメモリに保存するように構成される、記憶ユニットアクセスコントローラと、第1のメモリ、第3のメモリ及びコントローラに接続されたベクトル計算ユニットであり、ベクトル計算ユニットは、コントローラの制御下で、第1の行列のソースデータを第1の行列に変換し、第1の行列を第1のメモリに保存するように構成される、ベクトル計算ユニットとを更に含む。
この可能な設計では、演算アクセラレータは、第1の行列のソースデータを使用することにより第1の行列を取得する能力を更に有する。
可能な設計では、第3のメモリは、演算回路に接続され、第3のメモリは、第3の行列を記憶するように更に構成される。
可能な設計では、演算アクセラレータは、演算回路、ベクトル計算ユニット及びコントローラに接続された累算器を更に含み、累算器は、コントローラの制御下で、第3の行列及び第4の行列内の対応する位置における要素を加算し、第5の行列を取得するように構成され、ベクトル計算ユニットは、コントローラの制御下で、第5の行列を第3のメモリに保存するように更に構成され、第3の行列は、第1の行列と第2の行列との積であり、第1の行列は、第1の計算対象の行列の第1の部分を含み、第1の計算対象の行列の第1の部分は、第1の計算対象の行列の第1~第N列の要素であり、第2の行列は、第2の計算対象の行列の第1の部分であり、第2の計算対象の行列の第1の部分は、第2の計算対象の行列の第1~第N行の要素であり、第1の計算対象の行列は、M個の行の要素を含み、第2の計算対象の行列は、K個の列の要素を含み、第4の行列は、第1の計算対象の行列の第2の部分と第2の計算対象の行列の第2の部分との積であり、第1の計算対象の行列の第2の部分は、第1の計算対象の行列における第1の部分以外の部分であり、第2の計算対象の行列の第2の部分は、第2の計算対象の行列における第1の部分以外の部分である。
可能な設計では、演算アクセラレータは、コントローラに接続された命令フェッチバッファであり、コントローラにより使用される命令を記憶するように構成された命令フェッチバッファと、命令フェッチバッファ、記憶ユニットアクセスコントローラ及び外部メモリに接続されたバスインタフェースユニットであり、外部メモリから命令を取得するために命令フェッチバッファにより使用され、外部メモリから第1の行列のソースデータ、第1の行列及び第2の行列のうち少なくとも1つを取得するために記憶ユニットアクセスコントローラにより更に使用されるバスインタフェースユニットとを更に含む。
従来技術において2つの行列の積を計算するプロセスの概略図である。 従来技術において畳み込みカーネルを重み行列に変換する概略図である。 従来技術において入力データを入力行列に変換する概略図である。 従来技術において2つの行列に対して乗算演算を実行するための方法の概略図である。 本発明の実施形態による演算アクセラレータの概略構成図である。 本発明の実施形態による演算回路の概略構成図である。 本発明の実施形態による演算回路における配線の概略図である。 本発明の実施形態による各演算ブロックにロードされた列ベクトルの概略図である。 本発明の実施形態による各演算グループ内の演算ユニット内のデータの概略図である。 本発明の実施形態による各演算ブロックにロードされた行ベクトルの概略図である。 本発明の実施形態による各演算グループ内の演算ユニット内のデータの概略図である。 本発明の実施形態による各演算グループ内の演算ユニットにより計算されたデータの概略図である。 本発明の実施形態による加算木と演算ブロックとの間の関係の概略図である。 本発明の実施形態による演算ユニットの概略構成図である。 本発明の実施形態による他の演算ユニットの概略構成図である。 本発明の実施形態による他の演算アクセラレータの概略構成図である。 本発明の実施形態による更に他の演算アクセラレータの概略構成図である。 本発明の実施形態によるパディング行列(padding matrix)の概略図である。 本発明の実施形態による区分行列(partitioned matrix)の概略図である。 本発明の実施形態に従って行列乗算演算を完了するようにコントローラが演算アクセラレータを制御するフローチャートである。 本発明の実施形態に従って行列乗算演算を実現するようにCPUが演算アクセラレータを制御するフローチャートである。
以下に、この出願の実施形態における添付の図面を参照して、この出願の実施形態における技術的解決策について説明する。この出願の説明において、別段の記載がない限り、「/」は、又はを意味し、例えば、A/Bは、A又はBを示してもよく、「複数」は、2つ以上を意味する。
本発明の実施形態において提供される演算アクセラレータは、機械学習、深層学習及び畳み込みニューラルネットワークのような分野に適用されてもよく、或いは、デジタル画像処理及びデジタル信号処理のような分野に適用されてもよく、或いは、行列乗算演算に関連する他の分野に適用されてもよい。
近年、画像分類、画像認識、音声認識及び他の関連分野における畳み込みニューラルネットワークの良好な性能のため、畳み込みニューラルネットワークは、学界及び産業界における研究開発の活発な分野となっている。畳み込みニューラルネットワークは、主に畳み込み及び全結合(fully connected, 略称FC)演算を含む。畳み込み演算の計算量は、通常では全体のネットワークの計算量の70%より多くを占める可能性がある。本発明の実施形態において提供される演算アクセラレータは、畳み込みニューラルネットワークにおける畳み込み演算及びFC演算を実行し得る。
畳み込み演算は、厳密な意味で行列乗算演算と等価ではない。しかし、畳み込み演算は、適切なデータ調整を通じて行列乗算演算に変換され得る。通常では、畳み込みニューラルネットワークに複数の畳み込みカーネルが存在する。畳み込みカーネルは三次元であり、三次元のデータを含む。方向x及びyはデータの長さ及び幅であり、方向zはデータの深さと考えられてもよい。畳み込みカーネルは、実際にはフィルタ(filter)であり、主に画像から異なる特徴を抽出するように構成される。図2を参照すると、畳み込みカーネルは、実質的に一連の重みの組み合わせである。K個の畳み込みカーネルが存在すると仮定する。K個の畳み込みカーネルにおいて同じ位置にある方向zのN個の要素が抽出され、N*Kの重み行列(weight matrix)が取得できる。畳み込みカーネルは、演算アクセラレータが行列乗算演算を実行するときに呼び出すために、演算アクセラレータの仕様(具体的には、演算アクセラレータにより計算できる行列の行数及び列数)に基づいて、重み行列の形式で演算アクセラレータのメモリに予め記憶されてもよい。本発明の実施形態では、「*」は「乗算」を示す。
図3を参照すると、畳み込みカーネルのストライド(stride)(本発明の実施形態では、ストライドは1である)に基づいて、演算アクセラレータは、方向zのM個の入力点のN個のデータ、すなわち、合計でM*N個のデータを抽出してもよい。入力行列(input matrix)が形成されてもよい。演算アクセラレータは、入力行列及び重み行列に対して乗算演算を実行する必要がある。
FC演算は、実質的にベクトル及び行列の乗算演算である。FC演算の入力は9216個の要素を有するベクトルであり、4096個の点がFCにおいて出力される必要がある。この場合、FCにおいて出力される点を取得するために、9216個の要素を有するベクトル及び9216個の重みに対して点乗算演算が実行される必要があり、全ての4096個の点を取得するために、9216のベクトル及び9216×4096個の重みに対して点乗算演算が実行される必要がある。
図4は、行列C=A*Bの計算式を示し、AはM*Nの次元を有する行列であり、BはN*Kの次元を有する行列である。本発明の実施形態では、M、N及びKは正の整数である。計算を通じて行列C内の1つのデータを取得するために、行列A内の行ベクトル内のデータ及び行列B内の列ベクトル内の対応するデータに対して点乗算演算が実行される必要があり、次いで、加算が実行される。言い換えると、計算を通じて行列C内の1つのデータを取得するために、N個の乗算演算が実行される必要がある。この場合、計算を通じて行列Cを取得するために、M*N*K個の乗算演算が実行される必要がある。
演算アクセラレータ50が本発明の実施形態において提供される。図5に示すように、演算アクセラレータ50は、第1のメモリ501と、第2のメモリ502と、演算回路503と、コントローラ504とを含む。演算回路503は、バスを使用することにより、第1のメモリ501及び第2のメモリ502とデータ通信を実行してもよい。演算回路503は、第1のメモリ501及び第2のメモリ502から行列データを抽出し、乗算演算を実行するように構成される。コントローラ504は、予め設定されたプログラム又は命令に従って、乗算演算を完了するように演算回路503を制御するように構成される。
第1のメモリ501は、第1の行列を記憶するように構成され、第1の行列はM*N行列である。行列Aが第1の行列である場合、第1の行列A内の行i及び列jの要素はAijと記されてもよい。本発明のこの実施形態で言及される第1のメモリ501と、以下に言及される第2のメモリ502、第3のメモリ506及び記憶ユニットはそれぞれ、レジスタ、ランダムアクセスメモリ(random access memory, 略称RAM)、スタティックランダムアクセスメモリ、フラッシュメモリ、又は他の読み取り可能且つ書き込み可能なメモリでもよい。
第2のメモリ502は、第2の行列を記憶するように構成され、第2の行列はN*K行列である。行列Bが第2の行列である場合、第2の行列B内の行j及び列gの要素はBjgと記されてもよい。
M、N及びKは0よりも大きい整数であり、iは0よりも大きくM+1よりも小さい整数であり、gは0よりも大きくK+1よりも小さい整数であり、jは0よりも大きくN+1よりも小さい整数である。M、N及びKの中のいずれかの2つのパラメータが等しくてもよく、或いは、全てのM、N及びKが等しくてもよい。
図6に示すように、演算回路503は、1つ以上の行列乗算回路5031と、1つ以上の加算回路5032とを含んでもよい。1つの加算回路5032は、1つの行列乗算回路5031に対応してもよい。1つの加算回路5032は、代替として、複数の行列乗算回路5031に対応してもよい。演算回路503に含まれる複数の行列乗算回路5031は、それぞれの行列乗算演算を独立して実行してもよい。図6は、演算回路503が2つの行列乗算回路5031を含む例を使用することにより描かれている。行列乗算回路5031は演算ブロックを含むM個の演算グループを含み、各演算グループはK個の演算ブロックを含み、各演算ブロックはN個の演算ユニットを含み、演算ユニットは、第1のメモリ及び第2のメモリにより送信されたデータを受信するためにそれぞれ使用される2つの入力を備え、演算ユニットは、2つのデータを一緒に乗算する。加算回路5032は、各演算ブロックの計算結果を取得するために、同じ演算ブロックに属する演算ユニットの計算結果を加算するように構成される。
コントローラ504は、第1の行列と第2の行列との積を計算するために、以下の動作、すなわち、
第2の行列のK個の列ベクトルを各演算グループのK個の演算ブロックにそれぞれ書き込む動作であり、第2の行列のベクトルの第g列内の第jのデータが、各演算グループ内の第gの演算ブロック内の第jの演算ユニットに書き込まれ、演算回路503は、コントローラ504の制御下で、第2のメモリ502内の第2の行列内のデータを読み取り、第2の行列内のデータを各演算グループのK個の演算ブロックにバッファリングしてもよく、或いは、コントローラ504は、第2の行列内のデータを演算回路503内の各演算グループのK個の演算ブロックに書き込むように第2のメモリ502を制御してもよい、動作と、
第1の行列のM個の行ベクトルをM個の演算グループにそれぞれ送信する動作であり、第1の行列の第iの行ベクトルがM個の演算グループ内の第iの演算グループに送信され、第iの演算グループ内の各演算ブロック内の第jの演算ユニットが第iの行ベクトル内の第jのデータを受信し、演算回路503は、コントローラ504の制御下で、第1のメモリ501内の第1の行列内のデータを読み取ってもよく、或いは、コントローラ504は、第1の行列内のデータを演算回路503内のM個の演算グループに送信するように第1のメモリ501を制御してもよく、
それにより、M個の演算グループ内の各演算ユニットが、演算ユニットにより受信された2つのデータに対して乗算演算を実行し、加算回路5032が、第3の行列を取得するために各演算ブロック内の演算ユニットの計算結果を加算し、第3の行列は、第1の行列と第2の行列との積であり、第3の行列内の行i及び列gの要素は、第iの演算グループ内の第gの演算ブロックの計算結果である、動作と
を実行してもよい。
任意選択で、第1のメモリ501は、第1のバスを使用することにより演算回路503に接続され、第1のバスのビット幅は、Wi*N*Mである。第2のメモリ502は、第2のバスを使用することにより演算回路503に接続され、第2のバスのビット幅は、Wi*Nである。Wiは、演算ユニットにより許容される入力データの最大ビット幅である。
具体的には、Wiは、演算ユニットの入力データのタイプに基づいて設定されてもよい。例えば、int(整数)8タイプのデータは8ビットのビット幅を有し、fp(浮動小数点数)16タイプのデータは16ビットのビット幅を有し、fp32タイプのデータは32ビットのビット幅を有する等である。演算ユニットにより許容される出力データのビット幅は、演算ユニットの計算結果の範囲に基づいて設定されてもよく、或いは、他の方式で決定されてもよい。例えば、演算アクセラレータ50が、入力行列と重み行列との積を計算するように構成されるとき、入力行列内のデータ及び重み行列内のデータは、双方ともint8タイプであり、演算ユニットの出力結果もまた、int8タイプに設定されてもよい。この場合、出力データのビット幅は、入力データのビット幅に等しい。明らかに、演算ユニットの出力データは、int16タイプに変換されてもよい。この場合、出力データのビット幅は16ビットである。さらに、出力データのビット幅は、代替として、他の実際の要件に基づいて設計されてもよい。
具体的には、図6に示す演算回路503内の演算ブロック及び演算ユニットの配置方式に基づいて、図7は、演算回路503における具体的な配線の概略図である。
上記の実施形態に基づいて、演算回路503は、M*N*K個の演算ユニットを含むことが習得できる。図6及び図7を参照すると、これらの演算ユニットは、M個の演算グループに分類され、各演算グループは、N*K個の演算ユニットを含み、N*K個の演算ユニットは、K個の演算ブロックを形成するようにK個の列に配置され、各演算ブロックは、N個の演算ユニットを含む。
行列乗算演算を正式に実行する前に、演算アクセラレータ50は、事前に第2の行列内のデータをM個の演算グループにロードする必要がある。同じ第2の行列が全ての演算グループに使用されるので、第2のメモリ502は、ブロードキャストを通じて第2の行列内のデータをロードしてもよい。
図7を参照すると、演算回路503と第2のメモリ502との間に、ビット幅がWi*Nである第2のバスが存在し(Wiは演算ユニットにより許容される入力データの最大ビット幅であり、Nは1つの演算ブロック内の演算ユニットの数であり、この場合、第2のバスの幅はWi*Nである)、第2のバスは、データをブロードキャストし、M個の演算グループ内の1つの演算ブロックに対して列ベクトルのブロードキャストを毎回実行するように構成される。具体的には、第2の行列内の1つの列ベクトルは、まずM個のコピーに複製されてもよく、次いで、列ベクトルのM個のコピーは、M個の演算グループ内の対応する演算ブロックにブロードキャストされる。各演算ブロックにロードされる列ベクトルについては、図8を参照する。第2のメモリ502が、1つの列ベクトルをブロードキャストするために1つのサイクルを必要とする場合(サイクルは、特定のクロック信号に基づいて設定されるクロックサイクルでもよく、或いは、他の制御信号に基づいて生成される処理サイクルでもよい)、第2の行列内の全ての列ベクトルのブロードキャストを完了するためにK個のサイクルが必要とされる。
例えば、図6に示す演算グループ内の演算ブロックの配置方式に基づいて、行列Bが第2の行列である場合、第2の行列Bが
Figure 0007016942000001
であると仮定する。この場合、N=5且つK=4である。第2の行列B内の4つの列ベクトルが4つの演算グループ内の4つの演算ブロックにそれぞれ書き込まれた後の演算ユニット内のデータについては、図9を参照する。
演算回路503と第1のメモリ501との間に、ビット幅がWi*N*Mである第1のバスが存在し(Wiは演算ユニットにより許容される入力データの最大ビット幅であり、Nは1つの演算ブロック内の演算ユニットの数であり、Mは演算グループの数であり、この場合、第1のバスの幅はWi*N*Mである)、第1のバスは、第1の行列内のデータを送信するように構成される。各演算グループに入力されるデータのビット幅はWi*Nである。各演算グループは、第1の行列の1つの行ベクトルを受信し、各演算グループ内の全ての演算ブロックにより同時に受信される行ベクトルは同じであり、演算グループにより受信される行ベクトルは異なる。具体的には、演算グループに送信されるべき第1の行列内の行ベクトルは、演算グループ内でK個のコピーに重複されてもよく、行ベクトルのK個のコピーは、演算グループ内のK個の演算ブロックにそれぞれ送信される。各演算ブロックにロードされる行ベクトルについては、図10を参照する。各演算グループ内の1つの列における演算ユニットが同じデータを使用するので、第1のメモリ501は、行ブロードキャストを通じてデータを演算ユニットに送信してもよい。合計でM個の演算グループが存在するので、次元がM*Nである行列が1つのサイクル内で送信されてもよい。
例えば、図6に示す演算グループ内の演算ブロックの配置方式に基づいて、行列Aが第1の行列である場合、第1の行列Aが
Figure 0007016942000002
であると仮定する。この場合、M=4且つN=5である。第2の行列A内の4つの行ベクトルが4つの演算グループにそれぞれ送信された後の演算ユニット内のデータについては、図11を参照する。4つの演算グループ内の演算ユニットにより計算されたデータについては、図12を参照する。各演算ブロック内の演算ユニットの計算結果は、第1の行列Aと第2の行列Bとの積、すなわち、第3の行列Cを取得するために加算される。
本発明のこの実施形態において提供される方法が畳み込みニューラルネットワークに適用されるとき、第1の行列は入力行列でもよく、第2の行列は重み行列でもよい。
本発明のこの実施形態において提供される方法では、M個の演算グループがM*N*K個の演算ユニットを含むので、演算アクセラレータは、1つのクロックサイクル内でM*N*K個の乗算演算を実行し得る。この場合、演算アクセラレータ50は、M*N行列とN*K行列との積を計算し得る。従来技術と比較して、この方法は、行列乗算演算により必要とされる時間を大幅に低減できる。
任意選択で、1つの行列乗算回路5031が1つの加算回路5032に対応するとき、加算回路5032は、M*K個の加算木を含み、1つの加算木は、1つの演算ブロックに対応し、加算木は、対応する演算ブロック内のN個の演算ユニットに接続され、加算木は、加算木に接続されたN個の演算ユニットの計算結果を加算するように構成される。
演算ブロック内の全てのN個の演算ユニットの計算結果について累算演算が実行される必要があり、それにより、演算ブロックの計算結果が取得できる点に留意すべきである。蓄積演算は、図13に示す加算木を使用することにより、1つの演算ブロック内の全ての演算ユニットの計算結果に対して具体的に実行されてもよい。加算木は、実質的に一連の加算器の組み合わせであり、接続方式が図13に示されている。この場合、加算木はN個の演算ユニットの計算結果を加算する必要があるので、加算木の出力結果のビット幅はWaにより記され、Waは加算木の出力結果の範囲に依存する。各演算ユニットの計算結果のビット幅がWoである場合、加算木が累算を実行した後に取得された演算ブロックの出力結果は、Woにより示されることができる最大範囲を超える可能性がある。したがって、通常では、演算ブロックの出力結果を示すために、より大きいビット幅が使用される必要がある。例えば、演算ユニットの入力データの最大ビット幅は8ビットであり、加算木の出力データのビット幅は32ビットに設定されてもよい。
代替として、1つの加算回路5032は、複数の行列乗算回路5031に対応してもよい。1つの場合、1つの行列乗算回路5031は、M*K個の加算木に対応してもよく、複数の行列乗算回路5031に対応するM*K個の加算木は、1つの加算回路5032に配備されてもよい。図6を参照すると、図6に示す演算回路503に含まれる加算回路5032は、2つの行列乗算回路5031に対応する。この場合、加算回路5032は、2*M*K個の加算木を含み、2*M*K個の加算木のうちM*K個は、2つの行列乗算回路5031のうち一方におけるM*K個の演算ブロック内の演算ユニットにより出力される計算結果を加算するように構成され、2*M*K個の加算木のうち他方のM*K個の加算木は、2つの行列乗算回路5031内の他方の行列乗算回路5031におけるM*K個の演算ブロック内の演算ユニットにより出力される計算結果を加算するように構成される。
1つの場合、図14を参照すると、演算ユニットは、記憶ユニットに書き込まれるデータを記憶するように構成された記憶ユニットと、記憶ユニットに接続された乗算回路であり、受信データと記憶ユニットに記憶されたデータとの積を計算するように構成された乗算回路とを含む。具体的には、説明を容易にするために、演算ユニット内の第1の行列内のデータは「第1のデータ」と呼ばれ、第2の行列内のデータは第2のデータと呼ばれる。この場合、図14を参照すると、記憶ユニットは、第2のデータを記憶するように構成されてもよい。乗算回路は、第1のデータ及び第2のデータを入力し、計算結果を出力するように構成されたインタフェースを更に含んでもよい。記憶ユニットは、第2のデータを書き込むように構成されたインタフェースを更に含んでもよい。
他の場合、図15を参照すると、演算ユニットは、複数の記憶ユニット(図15は、演算ユニットが2つの記憶ユニットを含む例を使用することにより描かれている)と、乗算回路と、複数の記憶ユニットに接続された第1の選択回路と、複数の記憶ユニット及び乗算回路に接続された第2の選択回路とを含む。
複数の記憶ユニットは、データを記憶するように構成される。
第1の選択回路は、乗算回路が乗算演算を実行する前に、複数の記憶ユニットから、乗算回路が乗算演算を実行するときに使用されるデータを記憶するための記憶ユニットを選択するように構成される。
第2の選択回路は、乗算回路が乗算演算を実行するときに、乗算回路が乗算演算を実行するときに使用されるデータを記憶するための記憶ユニットを選択するように構成される。
乗算回路は、受信データと第2の選択回路により選択された記憶ユニットに記憶されたデータとの積を計算するように構成される。
具体的には、複数の記憶ユニットは、異なる行列内のデータを記憶してもよい。第1の選択回路は、行列内のデータが記憶される記憶ユニットを選択してもよい。
記憶ユニットは、2つのblock(ブロック)に分割されてもよい。演算ユニットが複数の記憶ユニットを含むとき、演算ユニットが1つの記憶ユニット内の1つのblock内のデータに基づいて乗算演算を実行する場合、コントローラ504は、複数の記憶ユニット内の他の記憶ユニット又は乗算演算に関与する記憶ユニット内の他のblockにデータを更に書き込んでもよく、それにより、演算ユニットの作業効率を改善する。
図15を参照すると、行列乗算回路5031が、第1の行列Aと第2の行列Bとの積を計算する必要があり、さらに、第1の行列Aと行列Dとの積を計算する必要がある場合、コントローラ504は、第2の行列Bと行列Dとの双方内のデータを、演算ユニットの記憶ユニットに書き込んでもよい。第1の選択回路は、第2の行列B内の第2のデータ0を記憶ユニット0に書き込み、行列D内の第2のデータ1を記憶ユニット1に書き込むことを選択してもよい。乗算回路が第1のデータ及び第2のデータ0に対して乗算演算を実行するとき、第2の選択回路は、記憶ユニット0内の第2のデータ0を乗算回路に出力することを選択し、乗算回路が第1のデータ及び第2のデータ1に対して乗算演算を実行するとき、第2の選択回路は、記憶ユニット1内の第2のデータ1を乗算回路に出力することを選択する。
この場合、各演算ユニットは、4つの入力、すなわち、第1のデータ、第2のデータ及び2つのレジスタ選択信号を受信する。一方のレジスタ選択信号は、乗算回路が乗算演算を実行する前に、複数の記憶ユニットから、乗算回路が乗算演算を実行するときに使用されるデータを記憶するための記憶ユニットを選択するように、第1の選択回路を制御するために使用される。他方のレジスタ選択信号は、乗算回路が乗算演算を実行するときに、乗算回路が乗算演算を実行するときに使用されるデータを記憶するための記憶ユニットを選択するように、第2の選択回路を制御するために使用される。
任意選択で、図16を参照すると、演算アクセラレータ50は、第1のメモリ501、第2のメモリ502及びコントローラ504に接続された記憶ユニットアクセスコントローラ505を更に含んでもよい。
記憶ユニットアクセスコントローラ505は、コントローラ504の制御下で、第1の行列及び第2の行列を取得し、第1の行列を第1のメモリ501に保存し、第2の行列を第2のメモリ502に保存するように構成される。
記憶ユニットアクセスコントローラ505は、ダイレクトメモリアクセスコントローラ504(Direct Memory Access Controller, 略称DMAC)又はロード/記憶ユニットでもよい。
任意選択で、図16を参照すると、演算アクセラレータ50は、
第1の行列のソースデータを記憶するように構成された第3のメモリ506と、
第1のメモリ501、第2のメモリ502、第3のメモリ506及びコントローラ504に接続された記憶ユニットアクセスコントローラ505であり、記憶ユニットアクセスコントローラ505は、コントローラ504の制御下で、第1の行列のソースデータ及び第2の行列を取得し、第1の行列のソースデータを第3のメモリ506に保存し、第2の行列を第2のメモリ502に保存するように構成される、記憶ユニットアクセスコントローラ505と、
第1のメモリ501、第3のメモリ506及びコントローラ504に接続されたベクトル計算ユニット(vector unit)507であり、ベクトル計算ユニット507は、コントローラ504の制御下で、第1の行列のソースデータを第1の行列に変換し、第1の行列を第1のメモリ501に保存するように構成される、ベクトル計算ユニット507と
を更に含んでもよい。
具体的には、適用シナリオにおいて、記憶ユニットアクセスコントローラ505により取得されるデータは、直接的には第1の行列ではない。この場合、記憶ユニットアクセスコントローラ505は、取得されたデータ(すなわち、第1の行列のソースデータ)を第3のメモリ506に保存してもよい。ベクトル計算ユニット507は、第1の行列を取得するために、第3のメモリ506内の第1の行列のソースデータを変換してもよい。
例えば、演算アクセラレータ50が、第1の行列が5*4行列であり、第1の行列のソースデータが4*4行列であることを必要とする場合、ベクトル計算ユニット507は、第1の行列のソースデータを、全てのデータが0である行ベクトルでパディング(padding)し、第1の行列を取得してもよい。例えば、第1の行列のソースデータが
Figure 0007016942000003
である場合、第1の行列は
Figure 0007016942000004
である。
他の例では、演算アクセラレータ50が、第1の行列が2*4行列であり、第1の行列のソースデータが4*4行列であることを必要とする場合、ベクトル計算ユニット507は、第1の行列として、第1の行列のソースデータ内のベクトルの最初の2つの行を含む行列を決定してもよい。例えば、第1の行列のソースデータが
Figure 0007016942000005
である場合、第1の行列は
Figure 0007016942000006
である。
或る場合、図17を参照すると、第3のメモリ506は、演算回路503に接続され、第3のメモリ506は、第3の行列を記憶するように更に構成される。この場合、第3のメモリ506は、下記の累算器508を使用することにより演算回路503に更に接続されてもよい。演算回路503は、計算結果を累算器508に出力してもよい。累算器508は、第3の行列を第3のメモリに保存してもよい。
他の場合、図16を参照すると、演算アクセラレータ50は、演算回路503、ベクトル計算ユニット507及びコントローラ504に接続された累算器508を更に含む。
累算器508は、コントローラ504の制御下で、第3の行列及び第4の行列内の対応する位置における要素を加算し、第5の行列を取得するように構成される。
ベクトル計算ユニット507は、コントローラ504の制御下で、第5の行列を第3のメモリ506に保存するように更に構成される。
第3の行列は、第1の行列と第2の行列との積であり、第1の行列は、第1の計算対象の行列の第1の部分を含み、第1の計算対象の行列の第1の部分は、第1の計算対象の行列の第1~第N列の要素であり、第2の行列は、第2の計算対象の行列の第1の部分であり、第2の計算対象の行列の第1の部分は、第2の計算対象の行列の第1~第N行の要素であり、第1の計算対象の行列は、M個の行の要素を含み、第2の計算対象の行列は、K個の列の要素を含み、第4の行列は、第1の計算対象の行列の第2の部分と第2の計算対象の行列の第2の部分との積であり、第1の計算対象の行列の第2の部分は、第1の計算対象の行列における第1の部分以外の部分であり、第2の計算対象の行列の第2の部分は、第2の計算対象の行列における第1の部分以外の部分である。
本発明のこの実施形態において提供される演算アクセラレータ50は、M*N行列とN*K行列との積を計算し得る点に留意すべきである。しかし、実際の演算では、計算される必要がある行列の次元は、M*N及びN*Kよりも大きくてもよく或いは小さくてもよい。計算される必要がある行列の次元がM*N及びN*Kよりも大きいとき、演算アクセラレータ50が計算を実行する毎に、計算される必要がある2つの行列の積の最終結果の部分的な結果のみが取得でき、複数のループ反復が更に必要とされ、部分的な結果が加算され、それにより、計算される必要がある2つの行列の積を取得する。
実質的に、計算される必要がある行列が或る程度まで変換された後に、本発明のこの実施形態において提供される演算アクセラレータ50は、いずれかの行数及び列数を有する2つの行列に対して乗算演算を実行してもよい。具体的な実現方式は以下の通りである。
演算アクセラレータ50がQ*R行列とR*T行列との積を計算する必要がある場合、以下の2つの場合が生じる。
場合1:QがMよりも小さく、RがNよりも小さく、TがKよりも小さい。
この場合、Q*R行列は、パディングを通じてM*N行列に再形成されてもよく、R*T行列は、パディングを通じてN*K行列に再形成されてもよく、次いで、本発明のこの実施形態において提供される演算アクセラレータ50は、行列乗算演算を実行するために使用される。具体的なパディング方法は、行列の周りに要素0でパディングすることであり、それにより、行列は、必要とされる行数及び列数を有する行列に変化する。例えば、M=N=8であるとき、図18は、パディングを通じて4*5行列及び5*8行列を8*8行列に別々に再形成する例を示す。
場合2:QがMよりも大きいか、RがNよりも大きいか、或いは、TがKよりも大きい。
この場合、QがMよりも大きいとき或いはRがNよりも大きいとき、Q*R行列は、M*N行列に区分けされる必要があり、区分けの前に、Q*R行列は、パディングを通じて、行数がMの倍数であり列数がNの倍数である行列に再形成される必要がある。RがNよりも大きいとき或いはTがKよりも大きいとき、R*T行列は、N*K行列に区分けされる必要があり、区分けの前に、R*T行列は、パディングを通じて、行数がNの倍数であり列数がKの倍数である行列に再形成される必要がある。
Q*R行列の行数がMの2倍であり、Q*R行列の列数がNの2倍であり、R*T行列の行数がNの2倍であり、R*T行列の列数がKの2倍であると仮定する。Q*R行列は、
Figure 0007016942000007
として記される4つのM*N行列に区分けされてもよく、A1、B1、C1及びD1はそれぞれM*N行列である。R*T行列は、
Figure 0007016942000008
として記される4つのN*K行列に区分けされてもよく、A2、B2、C2及びD2はそれぞれN*K行列である。Q*R行列とR*T行列との積Sは、
Figure 0007016942000009
である。
行列Sは、
Figure 0007016942000010

Figure 0007016942000011
との積を計算することにより取得されてもよい。
Figure 0007016942000012

Figure 0007016942000013
との積を計算するために、M*N行列とN*K行列との8つの乗算演算が完了する必要がある。M*N行列とN*K行列の8つの乗算演算は、A1A2、B1C2、A1B2、B1D2、C1A2、D1C2、C1B2及びD1D2である。8つの行列乗算演算は、演算回路503において8つの行列乗算回路5031を構成することにより完了してもよく、或いは、演算回路503において8つ以下の行列乗算回路5031により完了してもよい。例えば、2つの行列乗算回路5031が、8つの行列乗算演算を完了するために、4つの行列乗算演算をそれぞれ完了する。
8つの行列乗算演算が完了した後に、
Figure 0007016942000014
から、A1A2及びB1C2が行列Sの第1行及び第1列の要素を取得するために加算され、A1B2及びB1D2が行列Sの第1行及び第2列の要素を取得するために加算され、C1A2及びD1C2が行列Sの第2行及び第1列の要素を取得するために加算され、C1B2及びD1D2が行列Sの第2行及び第2列の要素を取得するために加算されることが習得できる。A1A2及びB1C2が例として使用される。A1A2及びB1C2はそれぞれM*K行列である。したがって、A1A2及びB1C2内の対応する位置における要素が加算され、次いで、行列Sの第1行及び第1列(ここでの行列Sの行及び列は
Figure 0007016942000015
により示される行及び列である)の要素が取得できる。
具体的には、
Figure 0007016942000016
及び
Figure 0007016942000017
内のいずれか2つの要素の積の計算結果が累算器508に記憶されてもよい。累算器508は、行列Sを取得するために、計算結果に対して加算演算を実行する。
Q*R行列及びR*T行列が4つの行列に区分けされることが、上記における説明の例として使用されている。実際には、Q*R行列及びR*T行列は、2つ、6つ又は8つの行列等に区分けされてもよい。計算原理は、上記のものと同じである。詳細は、ここでは再び説明しない。
例えば、M=N=K=3であると仮定する(この場合、行列Aの行数と列数のどちらも3ではなく、行列Bの行数と列数のどちらも3ではないので、行列Aは第1の行列ではなく、行列Bは第2の行列ではない)。行列
Figure 0007016942000018
と行列
Figure 0007016942000019
との積を計算するために、行列Aは4*5行列であるので、行列Aはパディングを通じて行列
Figure 0007016942000020
に再形成される必要があり、行列Bは5*4行列であるので、行列Bはパディングを通じて行列
Figure 0007016942000021
に再形成される必要がある。
図19を参照すると、行列A及び行列Bは、4つの3*3行列に別々に区分けされてもよい。この場合、行列Aと行列Bとの積を計算するために、3*3行列の8つの乗算演算が実行される必要がある。3*3行列の8つの乗算演算は、A1A2、B1C2、A1B2、B1D2、C1A2、D1C2、C1B2及びD1D2である。A1A2の計算結果は
Figure 0007016942000022
であり、A1A2の計算結果が取得された後に、結果が累算器508に記憶される。B1C2の計算結果は
Figure 0007016942000023
であり、B1C2の計算結果が取得された後に、結果が累算器508に記憶される。累算器508は、
Figure 0007016942000024
を取得するために、A1A2及びB1C2内の対応する位置における要素を加算し、
Figure 0007016942000025
すなわち、行列Aと行列Bとの積の最初の3つの行及び最初の3つの列の共通領域内のデータである。行列Aと行列Bとの積の他の位置におけるデータも同様に計算される。詳細は、ここでは再び説明しない。
ベクトル計算ユニット507は、M*K個の演算ユニットを含んでもよい。ベクトル計算ユニット507は、必要に応じて、累算器508により出力されたデータに対してベクトル乗算、ベクトル加算、指数演算、対数演算又は次元比較のような更なる処理を実行してもよい。例えば、ベクトル計算ユニット507は、プーリング(pooling)、バッチ正規化(batch normalization)又は局所応答正規化(local response normalization)のような、畳み込みニューラルネットワーク内の非畳み込み/非FC層のネットワーク計算を実行するように具体的に構成されてもよい。図16を参照すると、ベクトル計算ユニット507が累算器508により出力されたデータに対して更なる処理を実行しない場合、累算器508は、第5の行列を第3のメモリ506に直接保存してもよい点に留意すべきである。
任意選択で、図16及び図17を参照すると、演算アクセラレータ50は、
コントローラ504に接続された命令フェッチバッファ(instruction fetch buffer)509であり、コントローラ504により使用される命令を記憶するように構成された命令フェッチバッファ509と、
命令フェッチバッファ509、記憶ユニットアクセスコントローラ505及び外部メモリに接続されたバスインタフェースユニット510(Bus Interface Unit, 略称BIU)であり、外部メモリから命令を取得するために命令フェッチバッファ509により使用され、外部メモリから第1の行列のソースデータ、第1の行列及び第2の行列のうち少なくとも1つを取得するために記憶ユニットアクセスコントローラ505により更に使用されるバスインタフェースユニット510と
を更に含んでもよい。
具体的には、図16及び図17を参照すると、本発明のこの実施形態において提供される演算アクセラレータ50は、中央処理装置(Central Processing Unit, 略称CPU)に搭載されたコプロセッサとして使用されてもよく、CPUは、計算タスクを演算アクセラレータ50に割り当てる。具体的には、CPUは、第1の行列、第2の行列及び命令を外部メモリに記憶してもよい。演算アクセラレータ50は、外部メモリから第1の行列、第2の行列及び命令を読み取ることにより行列乗算演算を完了してもよい。外部メモリは、具体的には、ダブルデータレート・シンクロナス・ダイナミックランダムアクセスメモリ(Double Data Rate Synchronous Dynamic Random Access Memory, 略称DDR)又は他の読み取り可能且つ書き込み可能なメモリでもよい。外部メモリは、演算アクセラレータ50に対してプライベートなメモリでもよい。具体的には、第1のメモリ501、第2のメモリ502、第3のメモリ506及び命令フェッチバッファ509は、通常では、オンチップバッファ(On-Chip Buffer)である。
例えば、演算アクセラレータ50は、畳み込みニューラルネットワークに適用される。図20を参照すると、演算アクセラレータ50内のコントローラ504が、重み行列と入力行列との積の計算を完了するように演算アクセラレータ50を制御するプロセスは、以下のステップを具体的に含んでもよい。
2001.DMACは、DDRから重み行列を取得し、重み行列を第2のメモリ502に書き込む。
2002.DMACは、DDRから入力行列を取得し、入力行列を第1のメモリ501に送信する。
2003.演算回路503は、第2のメモリ502から重み行列を読み取り、重み行列のK個の列ベクトルを各演算グループのK個の演算ブロックにそれぞれ書き込む。
2004.演算回路503は、第1のメモリ501から入力行列を読み取り、入力行列内のM個の行ベクトルをM個の演算グループにそれぞれ送信する。
2005.演算回路503は、行列乗算計算を実行し、第3の行列を出力する。
第3の行列は、重み行列と入力行列との積である。
2006.演算回路503は、第3の行列を累算器508にバッファリングする。
2007.累算器508は、第3の行列が最終結果であるか否かを決定する。
はいである場合、プロセスは終了する。いいえである場合、ステップ2001に戻る。
上記のステップの具体的な実現方式及び関連する説明については、上記の説明を参照する。詳細は、ここでは再び説明しない。演算アクセラレータ50は、行列乗算演算を正式に開始する前に、ステップ2001~ステップ2004を完了する必要がある。ステップ2001~ステップ2004の実行順序は、図20に厳密に従う必要はなく、ステップ2003がステップ2001の後であり、ステップ2004がステップ2002の後であり、ステップ2005がステップ2004の後であることが確保されることのみが必要である。
演算アクセラレータ50は、CPUに搭載されたコプロセッサとして使用されてもよい。したがって、CPUが行列乗算演算を実行するように演算アクセラレータ50を制御するプロセスについて簡単に説明する。図21に示すように、プロセスは、以下のステップを具体的に含んでもよい。
2101.CPUはタスクのスケジューリングを開始する。
タスクは行列乗算演算タスクである。
2102.CPUは重み行列を用意する。
2103.CPUは重み行列をDDRに複製する。
2104.CPUは入力データ及び命令を用意する。
2105.CPUは入力データ及び命令をDDRに複製する。
2106.CPUは、演算アクセラレータ50内の命令フェッチバッファ509に命令を入れる。
このステップの後に、CPUは動作2107及び2108を実行し、演算アクセラレータ50は動作2109~2113を実行する。
2107.CPUは割込を受信する。
割込は、演算アクセラレータ50が計算結果を取得するために行列乗算演算を実行して計算結果をDDRに書き込んだ後にCPUに送信される割込であり、割込は、計算結果を処理するためにCPUにより使用される。
2108.CPUは割込を処理する。
依然として入力データが存在する場合、ステップ2104に戻る。入力データが存在しない場合、処理は終了する。
2109.演算アクセラレータ50は命令フェッチバッファ509から命令を読み取る。
2110.演算アクセラレータ50はタスクの実行を開始する。
2111.演算アクセラレータ50は命令に従って行列乗算演算を実行する。
2112.演算アクセラレータ50は計算結果をDDRに書き込む。
2113.演算アクセラレータ50は割込をCPUに送信する。
上記の実施形態の全部又は一部は、ソフトウェア、ハードウェア、ファームウェア又はこれらのいずれかの組み合わせを通じて実現されてもよい。ソフトウェアプログラムが実施形態を実現するために使用されるとき、実施形態は、完全に或いは部分的にコンピュータプログラムプロダクトの形式で実現されてもよい。コンピュータプログラムプロダクトは、1つ以上のコンピュータ命令を含む。コンピュータプログラム命令がコンピュータ上にロードされて実行されたとき、この出願の実施形態による手順又は機能が、全部或いは部分的に生成される。コンピュータは、汎用コンピュータ、専用コンピュータ、コンピュータネットワーク又は他のプログラム可能装置でもよい。コンピュータ命令は、コンピュータ読み取り可能記憶媒体に記憶でき、或いは、1つのコンピュータ読み取り可能記憶媒体から他のコンピュータ読み取り可能記憶媒体に送信できる。例えば、コンピュータ命令は、有線(例えば、同軸ケーブル、光ファイバ又はデジタル加入者回線(Digital Subscriber Line, 略称DSL))又は無線(例えば、赤外線、無線又はマイクロ波)方式で、1つのウェブサイト、コンピュータ、サーバ又はデータセンタから他のウェブサイト、コンピュータ、サーバ、又はデータセンタに送信できる。コンピュータ読み取り可能記憶媒体は、コンピュータにアクセス可能ないずれかの使用可能媒体、又は1つ以上の使用可能媒体を統合するサーバ又はデータセンタのようなデータ記憶デバイスでもよい。使用可能媒体は、磁気媒体(フロッピーディスク、ハードディスク又は磁気テープ等)、光媒体(DVD等)、半導体媒体(ソリッドステートディスク(Solid State Disk, 略称SSD)等)等でもよい。
この出願は、実施形態を参照して説明されているが、保護を請求するこの出願を実現するプロセスにおいて、当業者は、添付の図面、開示の内容及び添付の特許請求の範囲を閲覧することにより、開示された実施形態の他の変形を理解して実現し得る。特許請求の範囲において、「含む」(comprising)は、他の構成要素又は他のステップを除外せず、「1つ」は、複数の場合を除外しない。単一のプロセッサ又は他のユニットは、特許請求の範囲に列挙されるいくつかの機能を実現してもよい。いくつかの手段は、互いに異なる従属請求項に記録されるが、これは、これらの手段がより良い効果を生み出すように組み合わされることができないことを意味するのではない。
この出願は、具体的な特徴及びその実施形態を参照して記載されているが、明らかに、この出願の範囲から逸脱することなく、様々な修正及び組み合わせがそれらに対して行われてもよい。対応して、明細書及び添付の図面は、添付の特許請求の範囲により定義されるこの出願の単なる例示の説明であり、この出願の範囲をカバーする修正、変形、組み合わせ又は均等物のいずれか又は全部と考えられる。明らかに、当業者は、この出願の真意及び範囲から逸脱することなく、この出願に様々な修正及び変更を行うことができる。この出願は、以下の特許請求の範囲及びそれらの等価な技術により定義される保護の範囲内に入ることを条件として、この出願のこれらの修正及び変形をカバーすることを意図する。

Claims (14)

  1. 演算アクセラレータであって、
    第1の行列を記憶するように構成された第1のメモリであり、前記第1の行列はM*N行列である、第1のメモリと、
    第2の行列を記憶するように構成された第2のメモリであり、前記第2の行列はN*K行列である、第2のメモリと、
    前記第1のメモリ及び前記第2のメモリに接続された演算回路であり、前記演算回路は行列乗算回路と加算回路とを含み、前記行列乗算回路はM個の演算グループを含み、各演算グループはK個の演算ブロックを含み、各演算ブロックはN個の演算ユニットを含み、各演算ユニットは、前記第1のメモリ及び前記第2のメモリからそれぞれ2つのデータを受信し、前記演算ユニットは前記2つのデータを乗算し、前記加算回路は、各演算ブロックの計算結果を取得するために、同じ演算ブロックに属する演算ユニットの計算結果を加算するように構成される、演算回路と、
    前記演算回路に接続されたコントローラであり、前記コントローラが以下の動作、すなわち、
    前記第2の行列のK個の列ベクトルを各演算グループの前記K個の演算ブロックにそれぞれ書き込む動作であり、前記第2の行列のベクトルの第g列内の第jのデータが、前記K個の演算ブロック内の第gの演算ブロック内の第jの演算ユニットに書き込まれる動作と、
    前記第1の行列のM個の行ベクトルを前記M個の演算グループにそれぞれ送信する動作であり、前記第1の行列の第iの行ベクトルが前記M個の演算グループ内の第iの演算グループに送信され、前記第iの演算グループ内の各演算ブロック内の第jの演算ユニットが前記第iの行ベクトル内の第jのデータを受信し、
    それにより、前記M個の演算グループ内の各演算ユニットが、前記演算ユニットにより受信された2つのデータに対して乗算演算を実行し、前記加算回路が、第3の行列を取得するために各演算ブロック内の演算ユニットの計算結果を加算し、前記第3の行列は前記第1の行列と前記第2の行列との積であり、前記第3の行列内の行i及び列gの要素は、前記第iの演算グループ内の第gの演算ブロックの計算結果であり、M、N及びKは0よりも大きい整数であり、iは0よりも大きくM+1よりも小さい整数であり、gは0よりも大きくK+1よりも小さい整数であり、jは0よりも大きくN+1よりも小さい整数である、動作と
    を実行するように構成される、コントローラと
    を含む演算アクセラレータ。
  2. 前記加算回路は、M*K個の加算木を含み、1つの加算木は、1つの演算ブロックに対応し、前記加算木は、対応する前記演算ブロック内のN個の演算ユニットに接続され、前記加算木は、前記加算木に接続された前記N個の演算ユニットの計算結果を加算するように構成される、請求項1に記載の演算アクセラレータ。
  3. 前記演算ユニットは、
    第2のデータを記憶するように構成された記憶ユニットであり、前記第2のデータは、前記第2の行列からの前記データである、記憶ユニットと、
    前記記憶ユニットに接続された乗算回路であり、第1のデータと前記記憶ユニットに記憶された前記第2のデータとの積を計算するように構成され、前記第1のデータは、前記第1の行列からの前記データである、乗算回路と
    を含む、請求項1又は2に記載の演算アクセラレータ。
  4. 前記演算ユニットは、複数の記憶ユニットと、乗算回路と、前記複数の記憶ユニットに接続された第1の選択回路と、前記複数の記憶ユニット及び前記乗算回路に接続された第2の選択回路とを含み、前記複数の記憶ユニットは、データを記憶するように構成され、
    前記第1の選択回路は、前記乗算回路が乗算演算を実行する前に、前記複数の記憶ユニットから、前記乗算回路が前記乗算演算を実行するときに使用されるデータを記憶するための記憶ユニットを選択するように構成され、
    前記第2の選択回路は、前記乗算回路が前記乗算演算を実行するときに、前記乗算回路が前記乗算演算を実行するときに使用されるデータを記憶するための記憶ユニットを選択するように構成され、
    前記乗算回路は、受信データと前記第2の選択回路により選択された前記記憶ユニットに記憶された前記データとの積を計算するように構成される、請求項1又は2に記載の演算アクセラレータ。
  5. 前記第1のメモリは、第1のバスを使用することにより前記演算回路に接続され、前記第1のバスのビット幅は、Wi*N*Mであり、前記第2のメモリは、第2のバスを使用することにより前記演算回路に接続され、前記第2のバスのビット幅は、Wi*Nであり、Wiは、前記演算ユニットにより許容される入力データの最大ビット幅である、請求項1乃至4のうちいずれか1項に記載の演算アクセラレータ。
  6. 前記演算アクセラレータは、前記第1のメモリ、前記第2のメモリ及び前記コントローラに接続された記憶ユニットアクセスコントローラを更に含み、
    前記記憶ユニットアクセスコントローラは、前記コントローラの制御下で、前記第1の行列及び前記第2の行列を取得し、前記第1の行列を前記第1のメモリに保存し、前記第2の行列を前記第2のメモリに保存するように構成される、請求項1乃至5のうちいずれか1項に記載の演算アクセラレータ。
  7. 前記演算アクセラレータは、
    前記第1の行列のソースデータを記憶するように構成された第3のメモリと、
    前記第1のメモリ、前記第2のメモリ、前記第3のメモリ及び前記コントローラに接続された記憶ユニットアクセスコントローラであり、前記記憶ユニットアクセスコントローラは、前記コントローラの制御下で、前記第1の行列の前記ソースデータ及び前記第2の行列を取得し、前記第1の行列の前記ソースデータを前記第3のメモリに保存し、前記第2の行列を前記第2のメモリに保存するように構成される、記憶ユニットアクセスコントローラと、
    前記第1のメモリ、前記第3のメモリ及び前記コントローラに接続されたベクトル計算ユニットであり、前記ベクトル計算ユニットは、前記コントローラの制御下で、前記第1の行列の前記ソースデータを前記第1の行列に変換し、前記第1の行列を前記第1のメモリに保存するように構成される、ベクトル計算ユニットと
    を更に含む、請求項1乃至5のうちいずれか1項に記載の演算アクセラレータ。
  8. 前記第3のメモリは、前記演算回路に接続され、前記第3のメモリは、前記第3の行列を記憶するように更に構成される、請求項7に記載の演算アクセラレータ。
  9. 前記演算アクセラレータは、前記演算回路、前記ベクトル計算ユニット及び前記コントローラに接続された累算器を更に含み、
    前記累算器は、前記コントローラの制御下で、前記第3の行列及び第4の行列内の対応する位置における要素を加算し、第5の行列を取得するように構成され、
    前記ベクトル計算ユニットは、前記コントローラの制御下で、前記第5の行列を前記第3のメモリに保存するように更に構成され、
    前記第3の行列は、前記第1の行列と前記第2の行列との前記積であり、前記第1の行列は、第1の計算対象の行列の第1の部分を含み、前記第1の計算対象の行列の前記第1の部分は、前記第1の計算対象の行列の第1~第N列の要素であり、前記第2の行列は、第2の計算対象の行列の第1の部分であり、前記第2の計算対象の行列の前記第1の部分は、前記第2の計算対象の行列の第1~第N行の要素であり、前記第1の計算対象の行列は、M個の行の要素を含み、前記第2の計算対象の行列は、K個の列の要素を含み、前記第4の行列は、前記第1の計算対象の行列の第2の部分と前記第2の計算対象の行列の第2の部分との積であり、前記第1の計算対象の行列の前記第2の部分は、前記第1の計算対象の行列における前記第1の部分以外の部分であり、前記第2の計算対象の行列の前記第2の部分は、前記第2の計算対象の行列における前記第1の部分以外の部分である、請求項7に記載の演算アクセラレータ。
  10. 前記演算アクセラレータは、
    前記コントローラに接続された命令フェッチバッファであり、前記コントローラにより使用される命令を記憶するように構成された命令フェッチバッファと、
    前記命令フェッチバッファ、前記記憶ユニットアクセスコントローラ及び外部メモリに接続されたバスインタフェースユニットであり、前記外部メモリから前記命令を取得するために前記命令フェッチバッファにより使用され、前記外部メモリから前記第1の行列のソースデータ、前記第1の行列及び前記第2の行列のうち少なくとも1つを取得するために前記記憶ユニットアクセスコントローラにより更に使用されるバスインタフェースユニットと
    を更に含む、請求項6乃至9のうちいずれか1項に記載の演算アクセラレータ。
  11. 前記演算アクセラレータは畳み込みニューラルネットワークに適用され、前記第1の行列は入力行列であり、前記第2の行列は重み行列である、請求項1乃至10のうちいずれか1項に記載の演算アクセラレータ。
  12. M=N=Kである、請求項1乃至11のうちいずれか1項に記載の演算アクセラレータ。
  13. 演算回路により実行される演算方法であり、前記演算回路はM個の演算グループを含み、各演算グループはK個の演算ブロックを含み、各演算ブロックはN個の演算ユニットを含む、方法であって、
    前記演算回路は、第1のメモリから第1の行列を読み取り、前記第1の行列内のM個の行ベクトルを前記M個の演算グループにそれぞれ送信し、前記第1の行列はM*N行列であり、
    前記演算回路は、第2のメモリから第2の行列を読み取り、重み行列のK個の列ベクトルを各演算グループの前記K個の演算ブロックにそれぞれ書き込み、前記第2の行列はN*K行列であり、
    前記演算回路は、加算回路を含み、各演算ユニットは、前記第1のメモリ及び前記第2のメモリからそれぞれ2つのデータを受信し、前記演算ユニットは前記2つのデータを乗算し、前記加算回路は、各演算ブロックの計算結果を取得するために、同じ演算ブロックに属する演算ユニットの計算結果を加算するように構成され、
    前記演算回路は、以下の動作、すなわち、
    前記第2の行列のK個の列ベクトルを各演算グループの前記K個の演算ブロックにそれぞれ書き込む動作であり、前記第2の行列のベクトルの第g列内の第jのデータが、前記K個の演算ブロック内の第gの演算ブロック内の第jの演算ユニットに書き込まれる動作と、
    前記第1の行列のM個の行ベクトルを前記M個の演算グループにそれぞれ送信する動作であり、前記第1の行列の第iの行ベクトルが前記M個の演算グループ内の第iの演算グループに送信され、前記第iの演算グループ内の各演算ブロック内の第jの演算ユニットが前記第iの行ベクトル内の第jのデータを受信し、
    それにより、前記M個の演算グループ内の各演算ユニットが、前記演算ユニットにより受信された2つのデータに対して乗算演算を実行し、前記加算回路が、第3の行列を取得するために各演算ブロック内の演算ユニットの計算結果を加算し、前記第3の行列は前記第1の行列と前記第2の行列との積であり、M、N及びKは0よりも大きい整数であり、iは0よりも大きくM+1よりも小さい整数であり、gは0よりも大きくK+1よりも小さい整数であり、jは0よりも大きくN+1よりも小さい整数である、動作と
    を実行する、方法。
  14. 前記演算回路は畳み込みニューラルネットワークに適用され、前記第1の行列は入力行列であり、前記第2の行列は重み行列である、請求項13に記載の方法。
JP2020500125A 2017-07-07 2018-03-08 演算アクセラレータ Active JP7016942B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
CN201710553286.XA CN109213962B (zh) 2017-07-07 2017-07-07 运算加速器
CN201710553286.X 2017-07-07
PCT/CN2018/078407 WO2019007095A1 (zh) 2017-07-07 2018-03-08 运算加速器

Publications (2)

Publication Number Publication Date
JP2020526830A JP2020526830A (ja) 2020-08-31
JP7016942B2 true JP7016942B2 (ja) 2022-02-07

Family

ID=64949706

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2020500125A Active JP7016942B2 (ja) 2017-07-07 2018-03-08 演算アクセラレータ

Country Status (9)

Country Link
US (2) US11321423B2 (ja)
EP (1) EP3637281A4 (ja)
JP (1) JP7016942B2 (ja)
KR (1) KR102316670B1 (ja)
CN (2) CN109213962B (ja)
BR (1) BR112020000167B1 (ja)
CA (1) CA3069185C (ja)
SG (1) SG11202000140QA (ja)
WO (1) WO2019007095A1 (ja)

Families Citing this family (32)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111201525A (zh) * 2017-10-18 2020-05-26 三菱电机株式会社 运算电路以及运算方法
CN111859273A (zh) 2017-12-29 2020-10-30 华为技术有限公司 矩阵乘法器
US11169803B2 (en) 2018-02-13 2021-11-09 Shanghai Cambricon Information Technology Co., Ltd. Computing device and method
CN110147347B (zh) * 2019-03-18 2023-01-06 腾讯科技(深圳)有限公司 用于矩阵处理的芯片、矩阵处理方法、装置及存储介质
US11169957B2 (en) * 2019-03-31 2021-11-09 Intel Corporation Systems and methods for reconfigurable systolic arrays
CN110263324B (zh) * 2019-05-16 2021-02-12 华为技术有限公司 文本处理方法、模型训练方法和装置
US11334647B2 (en) * 2019-06-29 2022-05-17 Intel Corporation Apparatuses, methods, and systems for enhanced matrix multiplier architecture
CN110580324B (zh) * 2019-07-23 2020-11-17 珠海格力电器股份有限公司 图像矩阵运算方法、装置、计算机设备和存储介质
KR102372869B1 (ko) * 2019-07-31 2022-03-08 한양대학교 산학협력단 인공 신경망을 위한 행렬 연산기 및 행렬 연산 방법
KR102327234B1 (ko) * 2019-10-02 2021-11-15 고려대학교 산학협력단 행렬 연산시 메모리 데이터 변환 방법 및 컴퓨터
CN110647984B (zh) * 2019-10-25 2022-07-12 芯盟科技有限公司 芯片、集成处理设备及其操作方法
CN111124360B (zh) * 2019-12-23 2022-08-16 中国电子科技集团公司第五十八研究所 一种可配置矩阵乘法的加速器
US11537323B2 (en) 2020-01-07 2022-12-27 SK Hynix Inc. Processing-in-memory (PIM) device
US11861369B2 (en) 2020-01-07 2024-01-02 SK Hynix Inc. Processing-in-memory (PIM) device
US11630991B2 (en) * 2020-02-04 2023-04-18 Apple Inc. Broadcasting mode of planar engine for neural processor
JP6896306B1 (ja) * 2020-04-13 2021-06-30 LeapMind株式会社 ニューラルネットワーク回路、エッジデバイスおよびニューラルネットワーク演算方法
CN113536221B (zh) * 2020-04-21 2023-12-15 中科寒武纪科技股份有限公司 运算方法、处理器以及相关产品
CN113536219B (zh) * 2020-04-21 2024-01-26 中科寒武纪科技股份有限公司 运算方法、处理器以及相关产品
US20230169144A1 (en) * 2020-04-21 2023-06-01 Cambricon (Xi'an) Semiconductor Co., Ltd. Operation method, processor, and related product
CN113536220A (zh) * 2020-04-21 2021-10-22 中科寒武纪科技股份有限公司 运算方法、处理器及相关产品
US20220051086A1 (en) * 2020-08-17 2022-02-17 Alibaba Group Holding Limited Vector accelerator for artificial intelligence and machine learning
CN114168895A (zh) * 2020-09-11 2022-03-11 北京希姆计算科技有限公司 矩阵计算电路、方法、电子设备及计算机可读存储介质
CN112632464B (zh) * 2020-12-28 2022-11-29 上海壁仞智能科技有限公司 用于处理数据的处理装置
KR20220101519A (ko) 2021-01-11 2022-07-19 에스케이하이닉스 주식회사 엘리먼트-와이즈 곱셈을 위한 프로세싱-인-메모리 장치
US20220261456A1 (en) * 2021-01-14 2022-08-18 Microsoft Technology Licensing, Llc Computing partial matrices at hardware accelerator
US11544213B2 (en) 2021-03-04 2023-01-03 Samsung Electronics Co., Ltd. Neural processor
CN113110822A (zh) * 2021-04-20 2021-07-13 安徽芯纪元科技有限公司 一种可配置矩阵乘法装置及算法
CN113918120A (zh) * 2021-10-19 2022-01-11 Oppo广东移动通信有限公司 计算装置、神经网络处理设备、芯片及处理数据的方法
CN115437602A (zh) * 2021-10-20 2022-12-06 中科寒武纪科技股份有限公司 任意精度计算加速器、集成电路装置、板卡及方法
CN115860080B (zh) * 2023-02-15 2023-05-09 苏州浪潮智能科技有限公司 计算核、加速器、计算方法、装置、设备、介质及系统
CN116795432B (zh) * 2023-08-18 2023-12-05 腾讯科技(深圳)有限公司 运算指令的执行方法、装置、电路、处理器及设备
CN117093816B (zh) * 2023-10-19 2024-01-19 上海登临科技有限公司 矩阵乘运算方法、装置和电子设备

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2012133793A (ja) 1997-10-10 2012-07-12 Altera Corp プロセッサアレイ及びその形成方法

Family Cites Families (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6131308A (ja) 1984-07-20 1986-02-13 Hitachi Chem Co Ltd 黒鉛層間化合物の製造法
JPS61150067A (ja) * 1984-12-25 1986-07-08 Matsushita Electric Ind Co Ltd 演算装置
JPH0748203B2 (ja) * 1988-06-17 1995-05-24 三菱電機株式会社 3次元デバイスを用いた正方行列乗算器
US5274832A (en) * 1990-10-04 1993-12-28 National Semiconductor Corporation Systolic array for multidimensional matrix computations
JPH05324700A (ja) * 1992-05-19 1993-12-07 N T T Data Tsushin Kk 行列乗算装置
US8051124B2 (en) * 2007-07-19 2011-11-01 Itt Manufacturing Enterprises, Inc. High speed and efficient matrix multiplication hardware module
US8751556B2 (en) * 2010-06-11 2014-06-10 Massachusetts Institute Of Technology Processor for large graph algorithm computations and matrix operations
CN101980182A (zh) * 2010-10-15 2011-02-23 清华大学 基于矩阵运算的并行计算方法
CN102662623A (zh) * 2012-04-28 2012-09-12 电子科技大学 基于单fpga的并行矩阵乘法器及其实现方法
US10318308B2 (en) * 2012-10-31 2019-06-11 Mobileye Vision Technologies Ltd. Arithmetic logic unit
US9384168B2 (en) * 2013-06-11 2016-07-05 Analog Devices Global Vector matrix product accelerator for microprocessor integration
CN105589677A (zh) * 2014-11-17 2016-05-18 沈阳高精数控智能技术股份有限公司 一种基于fpga的脉动结构矩阵乘法器及其实现方法
CN104391820B (zh) * 2014-11-25 2017-06-23 清华大学 基于fpga的通用浮点矩阵处理器硬件结构
US10255547B2 (en) * 2014-12-04 2019-04-09 Nvidia Corporation Indirectly accessing sample data to perform multi-convolution operations in a parallel processing system
CN104572011B (zh) * 2014-12-22 2018-07-31 上海交通大学 基于fpga的通用矩阵定点乘法器及其计算方法
US9747546B2 (en) * 2015-05-21 2017-08-29 Google Inc. Neural network processor
CN104899182B (zh) * 2015-06-09 2017-10-31 中国人民解放军国防科学技术大学 一种支持可变分块的矩阵乘加速方法
CN106445471B (zh) * 2016-10-13 2018-06-01 北京百度网讯科技有限公司 处理器和用于在处理器上执行矩阵乘运算的方法
US10394929B2 (en) * 2016-12-20 2019-08-27 Mediatek, Inc. Adaptive execution engine for convolution computing systems
KR20190093568A (ko) * 2016-12-31 2019-08-09 인텔 코포레이션 이종 컴퓨팅을 위한 시스템들, 방법들, 및 장치들
US11132599B2 (en) * 2017-02-28 2021-09-28 Microsoft Technology Licensing, Llc Multi-function unit for programmable hardware nodes for neural network processing

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2012133793A (ja) 1997-10-10 2012-07-12 Altera Corp プロセッサアレイ及びその形成方法

Also Published As

Publication number Publication date
KR20200019736A (ko) 2020-02-24
EP3637281A4 (en) 2020-07-08
CN109213962B (zh) 2020-10-09
CN109213962A (zh) 2019-01-15
WO2019007095A1 (zh) 2019-01-10
CA3069185C (en) 2023-07-18
EP3637281A1 (en) 2020-04-15
JP2020526830A (ja) 2020-08-31
CA3069185A1 (en) 2019-01-10
CN112214726B (zh) 2024-05-03
SG11202000140QA (en) 2020-02-27
US20220327181A1 (en) 2022-10-13
CN112214726A (zh) 2021-01-12
BR112020000167B1 (pt) 2022-01-25
CN112214727A (zh) 2021-01-12
US11720646B2 (en) 2023-08-08
US20200142949A1 (en) 2020-05-07
KR102316670B1 (ko) 2021-10-22
US11321423B2 (en) 2022-05-03
BR112020000167A2 (pt) 2020-07-07

Similar Documents

Publication Publication Date Title
JP7016942B2 (ja) 演算アクセラレータ
JP6977239B2 (ja) 行列乗算器
JP6880160B2 (ja) 計算装置と計算方法
US10768894B2 (en) Processor, information processing apparatus and operation method for processor
US20180341484A1 (en) Tensor Processor Instruction Set Architecture
CN110415157B (zh) 一种矩阵乘法的计算方法及装置
EP3631622A1 (en) Tensor register files
US9910714B2 (en) Scriptable dynamic load balancing in computer systems
US20230026006A1 (en) Convolution computation engine, artificial intelligence chip, and data processing method
JP2023513608A (ja) アドレス生成方法及びユニット、深層学習処理器、チップ、電子機器並びにコンピュータプログラム
KR20210033757A (ko) 메모리 장치 및 그 동작 방법
CN112214727B (zh) 运算加速器
EP3073387A1 (en) Controlling data flow between processors in a processing system
CN116185274A (zh) 数据处理方法、计算装置及相关产品
KR20240099773A (ko) 효율적인 연산 분할을 위한 텐서 변형 방법, 메모리 액세스 방법, 및 이를 위한 뉴럴 프로세싱 유닛
CN111291884A (zh) 神经网络剪枝方法、装置、电子设备及计算机可读介质

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20200220

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20200220

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20210325

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20210427

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20210727

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20220111

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20220126