JP2021508125A - 行列乗算器 - Google Patents

行列乗算器 Download PDF

Info

Publication number
JP2021508125A
JP2021508125A JP2020536531A JP2020536531A JP2021508125A JP 2021508125 A JP2021508125 A JP 2021508125A JP 2020536531 A JP2020536531 A JP 2020536531A JP 2020536531 A JP2020536531 A JP 2020536531A JP 2021508125 A JP2021508125 A JP 2021508125A
Authority
JP
Japan
Prior art keywords
matrix
memory
row
multiplication
column
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.)
Pending
Application number
JP2020536531A
Other languages
English (en)
Inventor
リウ、フ
リアオ、ヘン
トゥ、ジアジン
ユアン、ホンフイ
ラム、ホウファン
チュー、ファン
Original Assignee
ホアウェイ・テクノロジーズ・カンパニー・リミテッド
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
Priority to CN201711499179.X priority Critical
Priority to CN201711499179.XA priority patent/CN109992743B/zh
Application filed by ホアウェイ・テクノロジーズ・カンパニー・リミテッド filed Critical ホアウェイ・テクノロジーズ・カンパニー・リミテッド
Priority to PCT/CN2018/111077 priority patent/WO2019128404A1/zh
Publication of JP2021508125A publication Critical patent/JP2021508125A/ja
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING; 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

Abstract

本発明の実施形態は行列乗算器を開示し、データコンピューティング技術の分野に関し、それにより計算のために2つの行列をブロックに分割する。行列乗算器は、第1メモリ、第2メモリ、演算回路、およびコントローラを含み、ここで、演算回路、第1メモリ、および第2メモリはバスを使用してデータ通信を実行してよく、コントローラは、予め設定されたプログラムまたは命令に従って、第1行列および第2行列を、ブロックに分割されるように制御し、演算回路を、コントローラのブロック分割結果に基づいて、第1メモリおよび第2メモリの対応するブロックで乗算演算を実行するように制御するように構成される。行列乗算器は、2つの行列で乗算演算を実行するように構成されてよい。

Description

本発明はコンピューティング技術の分野に関し、特に行列乗算器に関する。
現在、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:計算速度をさらに増加させるように、行列の乗算演算は、2次元計算アレイを使用して完了され得る。
例えば、2次元計算アレイはN*Nシストリックアレイであり得る。方式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行列の乗算演算を完了させるためには長い時間がかかり、比較的固定されて柔軟性のないコンピューティングサイズをもたらす。
本発明の実施形態は、行列乗算器および関連するデバイスを提供し、それにより、行列乗算の最中の、柔軟性のない計算および低い効率という問題を解決する。
第1の態様によると、本発明の実施形態は行列乗算器を提供し、行列乗算器は、
M*K行列である第1行列を格納するように構成された第1メモリと、
K*N行列である第2行列を格納するように構成された第2メモリと、
第1メモリおよび第2メモリに接続される演算回路と、
演算回路に接続されたコントローラと、を含み、
演算回路はX行*Y列からなる演算ユニットを含み、各演算ユニットはベクトル乗算回路および加算回路を含み、行列乗算回路は、第1メモリによって送られる行ベクトルのデータおよび第2メモリによって送られる列ベクトルのデータを受信し、2つのベクトルを乗算するように構成され、加算回路は、2つのベクトルの乗算によって取得された結果を加算し、同一の演算ユニットの計算結果を累算し、各演算ユニットの演算結果を取得するように構成される、演算回路と、
コントローラは以下の動作、すなわち、
第1行列を、サイズがX*Lであるサブブロックを単位とするブロックに分割し、同じサイズのS×R個のサブブロックを取得し、S×R個のサブブロックのうち第s行第r列におけるサブブロックはAsr,s=(1,2,3,...,およびS)、およびr=(1,2,3,...,およびR)で表される、動作と、
第2行列を、サイズがL*Yであるサブブロックを単位とするブロックに分割し、同じサイズのR×T個のサブブロックを取得し、R×T個のサブブロックのうち第r行第t列におけるサブブロックは、Brt,r=(1,2,3,...,およびR)、t=(1,2,3,...,およびT)で表される、動作とを実行するように構成され、
コントローラは、さらに以下の動作、すなわち、
任意のサブブロックAsrのX個の行ベクトルにおける第x行と、対応するサブブロックBrtのY個の列ベクトルにおける第y列とを、X行*Y列からなる演算ユニットの第x行第y列において演算ユニットに入力し、それにより、処理を実行する動作を実行するように構成され、x=(1,2,3,...,およびX)、y=(1,2,3,...,およびY)であり、任意のサブブロックAsrにおけるrと、対応するサブブロックBrtにおけるrとは同じ値を有する。
本発明の実施形態は、行列乗算器を提供し、ここで、行列乗算器は行列乗算ブロック分割方法、すなわち、MNKフラクタルを完了して、行列乗算器60における内部コントローラ604の制御ロジックを使用することによって、乗算のために大きい行列を単位行列(具体的には、X*L×L*Y行列)に分割するようにコントローラを使用する。コントローラ604の制御ロジックは、各クロックサイクルにおいて、単位行列乗算タスクを演算回路603に送り、その結果、データがパイプライン方式で実行され、X行*Y列の演算ユニットがフルロード状態で動作する。行列乗算の効率が増大し、ニューラルネットワークアルゴリズムを大幅に改善する適用効果が実現される。本発明のこの実施形態において提供される行列乗算器は、畳み込みニューラルネットワークにおける畳み込み演算およびFC演算を実行し得る。
可能な実装において、コントローラは、以下の動作を実行するように具体的に構成される。
任意のサブブロックAsrのX個の行ベクトルにおける第x行と、対応するサブブロックBrtのY個の列ベクトルにおける第y列とを、同じクロックサイクルにおいて並行して、X行*Y列からなる演算ユニットの第x行第y列において演算ユニットに入力し、それにより演算を実行する。
可能な実装において、コントローラはさらに、任意のサブブロックAsrの行ベクトルを、x個の行番号の昇順で、X行*Y列からなる演算ユニットに対応する第x行に連続的に入力するように制御するように構成され、近接する行ベクトルが同じ列で異なる行の演算ユニットに入る時点の間の差は1クロックサイクルであり、コントローラはさらに、対応するサブブロックBrtの列ベクトルを、y個の列番号の昇順で、X行*Y列からなる演算ユニットに対応する第y行に連続的に入力するように同時に制御するように構成され、近接する列ベクトルが同じ行で異なる列の演算ユニットに入る時点の間の差は1クロックサイクルである。
可能な実装において、コントローラはさらに、sおよびrの値を変更されないままにして、tの値を少なくとも2つの連続するサブブロック乗算計算サイクルにおいて変更されるように制御するように構成され、その結果、第1メモリは、少なくとも2つの連続するサブブロック乗算計算サイクル内で同じサブブロックAsrを再使用し、サブブロック乗算計算サイクルは、1つのサブブロックAsrおよび対応するサブブロックBrt上での行列乗算演算を完了させるようにX行*Y列の演算ユニットによって使用された時間である。
可能な実装において、行列乗算器はさらに、演算回路に接続された第3メモリを含み、
コントローラは、ベクトル乗算回路および加算回路の演算結果を第3メモリに格納するように、X行*Y列の演算ユニットを制御するように構成される。
可能な実装において、行列乗算器はさらに、第1メモリおよび第2メモリに接続される第4メモリと、第3メモリに接続される第5メモリとを含み、
コントローラはさらに、第1行列および第2行列の乗算演算を実行する前に、
第4メモリから、第1行列および第2行列のデータソースを、それぞれ第1メモリおよび第2メモリに移動させ、第3メモリから、計算結果を第5メモリに移動させるように、制御するように構成される。
可能な実装において、ベクトル乗算回路はL個の乗算器を含み、加算回路は入力数がL+1である加算木を含む。
可能な実装において、第1メモリ、第2メモリ、演算回路、およびコントローラはバスインタフェースユニットを使用して接続される。
可能な実装において、 S=
およびR=
であり、
M%X≠0のとき、計算は第1行列の第(M+1)行から第(S*X−M)行まで実行されず、結果の値には0が割り当てられ、K%Y≠0のとき、計算は第1行列の第(K+1)行から第(R*Y−K)行まで実行されず、結果の値には0が割り当てられる。
可能な実装において、R=
およびT=
であり、
K%Y≠0のとき、計算は第1行列の第(K+1)列から第(R*Y−K)列まで実行されず、結果の値には0が割り当てられ、N%X≠0のとき、計算は第1行列の第(N+1)行から第(T*X−N)行まで実行されず、結果の値には0が割り当てられる。
可能な実装において、行列乗算器はさらに直接メモリアクセスユニットを含み、直接メモリアクセスユニットは、第1行列を第1メモリに移動する前に第1行列に行列転置演算を実行するか、または、第2行列を第2メモリに移動する前に第2行列に行列転置演算を実行するように構成される。
可能な実装において、コントローラは第1行列の任意のサブブロックを、行形式で第1メモリに格納されるように制御し、または、第2行列の任意のサブブロックを、行形式で第2メモリに格納されるように制御する。このようにして、サブブロックが素早く読み出されることができ、サブブロックはフレキシブルに、かつ素早く転置されることができる。
第2の態様によれば、本願は電子デバイスを提供し、電子デバイスは、
第1の態様の任意の実施例において提供されるセキュアな要素と、チップに結合された個別デバイスとを含み得る。
第3の態様によれば、本願はシステムオンチップを提供し、システムオンチップは第1の態様の任意の実施例において提供されたチップを含む。システムオンチップはチップを含み得、または、チップおよび別の個別デバイスを含み得る。
本発明の実施形態または背景における技術的解決方法をより明確に説明するように、以下に、本発明の実施形態または背景を説明するために必要とされる添付の図面を簡潔に説明する。
先行技術における、2つの行列の積を計算する処理の概略図である。
先行技術における、畳み込みカーネルを重み行列に変換する概略図である。
先行技術における、入力データを入力行列に変換する概略図である。
先行技術における、2つの行列の乗算演算を実行するための方法の概略図である。
先行技術における、TPUシストリックアレイの概略図である。
本発明の実施形態による、行列乗算アクセラレータの構造図である。
本発明の実施形態による、演算ユニット6030の構造図である。
本発明の実施形態による、行列をブロックに分割する概略図である。
本発明の実施形態による、特定の演算回路603の配線の概略図である。
本発明の実施形態による、特定の演算回路603の配線の概略図である。
本発明の実施形態による、ベースが4である行列乗算器の入力フォーマットを示す図である。
M=2、N=2、およびK=2のときの、T=0の時点での行列乗算器のパイプライン実行の概略図である。
M=2、N=2、およびK=2のときの、T=1の時点での行列乗算器のパイプライン実行の概略図である。
M=2、N=2、およびK=2のときの、T=7の時点での行列乗算器のパイプライン実行の概略図である。
M=2、B=2、およびK=2のときの、T=11の時点での行列乗算器のパイプライン実行の概略図である。
本発明の実施形態による、別の行列乗算器の構造図である。
本発明の実施形態による、さらに別の行列乗算器の構造図である。
本発明の実施形態による、命令非同期実行シーケンスの概略図である。
以下に、本発明の実施形態の添付の図面を参照して、本発明の実施形態を説明する。
本願の本明細書、特許請求の範囲、および添付の図面において、用語「第1」、「第2」、「第3」、「第4」および同様のものは、異なるオブジェクトとの間の区別を意図するものであり、特定の順序を意味するものではない。加えて、用語「を含む」、「を有する」およびそれらの任意の他の変形は、非限定的な含有を含めることを意図するものである。例えば、一連の段階またはユニットを含む処理、方法、システム、製品、およびデバイスは、列挙された段階またはユニットに限定されるものではなく、任意で、列挙されていない段階またはユニットをさらに含むか、任意で、当該処理、方法、製品、またはデバイスにもともと備わった別の段階またはユニットをさらに含む。
本明細書で「実施形態」に言及することは、実施形態を参照して説明される特定の特性、構造、および特徴が、本願の少なくとも1つの実施形態に含まれ得ることを意味する。本明細書の様々な位置に示される語句は、必ずしも同じ実施形態を参照しなくともよく、独立した、または別の実施形態から排除された追加の実施形態ではない。本明細書において説明される実施形態は、別の実施形態と組み合わせされてよいことが、当業者には明確および暗示的に理解される。
本明細書で使用される「コンポーネント」、「モジュール」および「システム」などの用語は、コンピュータ関連のエンティティ、ハードウェア、ファームウェア、ハードウェアおよびソフトウェアの組み合わせ、ソフトウェア、または実行中のソフトウェアを意味するように使用される。例えば、コンポーネントは、プロセッサ上で動作する処理、プロセッサ、オブジェクト、実行可能なファイル、実行スレッド、プログラム、および/またはコンピュータであってよいが、それらに限定されるものではない。図に示されるように、コンピューティングデバイス上で動作するアプリケーションと、コンピューティングデバイスとの両者が、コンポーネントであってよい。1または複数のコンポーネントが、処理および/または実行スレッド内に存在してよく、コンポーネントは、1つのコンピュータに、および/または2つ以上のコンピュータの間で分散されて配置されてよい。加えて、これらのコンポーネントは、様々なデータ構造を格納する、様々なコンピュータ読み出し可能な媒体から実行されてよい。例えば、コンポーネントは、ローカルな、および/またはリモートな処理を使用することによって、例えば、1または複数のデータパケットを有する信号(例えば、ローカルシステムの、分散システムの、および/または、信号を使用することによって他のシステムとインタラクトするインターネットなどのネットワークにわたる、別のコンポーネントとインタラクトする2つのコンポーネントからのデータ)によって、交信してよい。
次に、解決される必要がある技術的問題と、本願の応用的シナリオが提供される。近年、画像分類、画像認識、音声認識、および他の関連する分野において、畳み込みニューラルネットワークが良好な性能であるので、畳み込みニューラルネットワークは、学界および産業界において研究および開発のホットスポットとなっている。畳み込みニューラルネットワークは主に、畳み込み演算および全結合(fully−connected、FC)演算を含む。畳み込み演算の演算量は、通常、ネットワークの全演算量の70%より多くを占有することがある。
畳み込み演算は、行列乗算演算と厳格に同等ではない。しかしながら、畳み込み演算は、適切なデータ調整によって、行列乗算演算に変換され得る。通常、畳み込みニューラルネットワークには複数の畳み込みカーネルがある。畳み込みカーネルは3次元であり、3次元のデータを含む。方向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であり、FC演算は4096の点を必要とする。この場合、FC演算によって出力される点を取得するために、ベクトル9126と9216個の重みとに対して小数点乗算演算が実行される必要があり、4096の点すべてを取得するためには、ベクトル9216と9216×4096個の重みとに対して小数点乗算演算が実行される必要がある。
図4は、行列C=A*Bの計算式を示し、ここで、AはM*Kサイズの行列を表し、BはK*Nサイズの行列を表す。本発明のこの実施形態において、M、N、およびKはそれぞれ正の整数である。計算によって行列Cの1個のデータを取得するためには、小数点乗算演算は、行列Aにおける1つの行ベクトルのデータと、行列Bにおける1つの列ベクトルの対応するデータとで実行される必要があり、そして累算が実行される。言い換えれば、計算によって行列Cの1個のデータを取得するためには、N個の乗算演算が実行される必要がある。この場合、計算によって行列Cを取得するためには、M*N*K個の乗算演算が実行される必要がある。
先行技術において、シストリックアレイコンピューティング方式、例えば、機械学習のためにGoogleによってカスタマイズされた専用チップ(ASIC)、Google TPUv1は、256×256 2−D MACアレイを使用することによって、行列乗算および畳み込み演算(図5に示されるように)に最適化されたシストリックアレイ設計を使用する。図の各セルは1つの乗算器である。乗算器が2つの行列の要素を乗算した後、計算によって取得された結果(部分和、すなわち、行列乗算における中間結果)が、図の下部の累算ユニットに伝送され、以前の関連する累算値に累算される。このようにして、データがフルロード状態で動作するとき、シストリックアレイは、各クロックサイクルにおいて1つの行列のサイズの中間値を累算する。前述の解決手段において、計算密度が低いので、行列乗算計算効率は比較的低い。加えて、畳み込み演算の最中に、シストリックアレイのコンピューティングサイズは比較的固定されているので、シストリックアレイの演算効率を増加させるように、入力および重みは多くの形態に転換される必要があり、柔軟性のない演算をもたらす。さらに、行列乗算の最中に、パイプライン実行効果を実現するように、データは大きなサイズを有する必要がある。例えば、小さい行列における256×256 2−Dシストリックアレイの計算効率は高くない。
加えて、関連する特許は、M*K*N 3−D MACアレイを実装する。TPUv1およびNVDLA 2−D MACアレイ解決方法と比較すると、行列乗算計算効率は大幅に増大する。本発明は新しいハードウェアアクセラレータアーキテクチャを提供し、その結果、新しいハードウェアアクセラレータアーキテクチャは[N×N]行列乗算演算を単一のクロックサイクルで完了することができる。ハードウェアアーキテクチャにおいて、処理エンジン(PE)に含まれる数の個数はN×N×Nであり、加算木に含まれる数の個数はN×Nである。加えて、大きい行列をより小さい行列に分割する計算方法も、また提供される。しかしながら、前述の解決手段において、ハードウェアによってサポートされるサイズとなるように、行列サイズが追加される必要がある。このことは、データ帯域幅を浪費し、計算効率を低減させる。行列が人為的に大きい行列および小さい行列に分割される場合、ソフトウェアプログラミングは複雑であり、また、関連するソフトウェアプログラミング量も格段に増大する。加えて、アクセラレータが単方向に周期的方式のみ行列の要素をロードすることができ、ソフトウェアは独立して行列を分割する必要があるので、計算モードは単一でありフレキシブルでない。さらに、行列Aおよび行列Bのメモリがすべてのデータを収容できなくなると、繰り返しの読み出しが発生する。したがって、バッファサイズはサービスアルゴリズムに比較的強く依存しており、具体的には、アクセラレータは、密結合したオンチップメモリに強く従属している。
したがって、本願において解決されるべき技術的問題は、効率的で、フレキシブルで、低いエネルギー方式で、ハードウェアを使用することによる畳み込みニューラルネットワークにおいて、多数のデータ演算をいかに実行するかである。
本発明のこの実施形態において提供される行列乗算器は、機械学習、ディープラーニング、および畳み込みニューラルネットワークなどの分野に適用されてよく、または、デジタル画像処理およびデジタル信号処理などの分野に適用されてよく、または、行列乗算演算に関連する他の分野に適用されてよいことが、理解されることができる。
前述の分析に基づいて、本願は、行列乗算アクセラレータを提供し、本願において提供される技術的問題を具体的に解析および解決する。図6は、本発明の実施形態による行列乗算アクセラレータの構造図である。図6に示されるように、行列乗算器60は第1メモリ601、第2メモリ602、演算回路603、およびコントローラ604を含む。演算回路603は、バスを使用して、第1メモリ601、第2メモリ602、およびコントローラ604とデータ通信を実行し得る。演算回路603は、第1メモリ601および第2メモリ602から行列データを取り出し、ベクトル乗算および加算演算を実行するように構成される。コントローラ604は、ベクトル演算を完了するように、予め設定されたプログラムまたは命令に従って、演算回路603を制御するように構成される。第1メモリ601は第1行列を格納するように構成される。
第1行列はM*K行列である。行列aが第1行列である場合、第1行列aの第i行第j列の要素はaijと表されてよく、ここで、i=(1,2,3,...,およびM)であり、j=(1,2,3,...,およびK)である。
本発明のこの実施形態において説明される第1メモリ601、および、以下に説明される関連する行列乗算器の第2メモリ602、第3メモリ606、および内部メモリは、それぞれ、レジスタ、ランダムアクセスメモリ(random access memory、略してRAM)、静的ランダムアクセスメモリ、フラッシュメモリ、または別の読み出しおよび書き込み可能メモリであってよい。本願において、第1行列、第2行列および演算結果のデータ型はそれぞれ、int8、fp16、またはfp32などの型であってよい。
第2メモリ602は第2行列を格納するように構成され、第2行列はK*N行列である。行列bが第2行列である場合、第2行列bの第j行第g列の要素はBjgと表されてよく、ここで、j=(1,2,3,...,およびK)であり、g=(1,2,3,...,およびN)である。
本明細書では、M、K、N、X、およびYはそれぞれ、0より大きい整数である。M、N、およびKのうちいずれか2つのパラメータが等しくてもよく、等しくなくてもよい。代替的に、M、N、およびKは、等しくてもよく、等しくなくてもよい。XおよびYは、等しくてもよく、等しくなくてもよい。これは、本願を具体的に限定するものではない。
演算回路603は、X行*Y列の演算ユニット6030(乗算累算ユニットMACと称されてよい)を含み得る。各演算ユニットは、独立してベクトル乗算演算を実行し得る。図6において、演算回路603が4*4演算ユニット6031を含む例が図に使用され、すなわち、X=4およびY=4である。演算ユニット6030は、それぞれ第1メモリ601によって送られた行ベクトルと、第2メモリ602によって送られた列ベクトルとを受信し、行ベクトルと列ベクトルとのベクトル乗算演算を実行するように使用される、2つの入力を提供される。具体的には、1つの演算回路6030はベクトル乗算回路および加算回路を含み、ここで、行列乗算回路は第1メモリ601によって送られる行ベクトルのデータと、第2メモリ602によって送られる列ベクトルのデータとを受信し、2つのベクトルを乗算するように構成され、加算回路は、2つのベクトルの乗算によって取得された結果を加算し、同一の演算ユニットの計算結果を累算し、演算ユニットの演算結果を取得するように構成される。
図7は、演算ユニット6030の構造図である。可能な実装において、ベクトル乗算回路はL個(例えば、L=4)の乗算器を含む。加算回路は、入力数がL+1である加算木を含み、具体的には、加算木はL個の乗算結果を累算し、異なるクロックサイクルの演算ユニットの計算結果を累算するように構成される。任意で、行列乗算器60は第3メモリ605をさらに含み、第3メモリ605はベクトル乗算回路および加算回路の演算結果を格納し、異なるクロックサイクルの演算結果を格納するように構成される。本願における第3メモリ605は、X*Y個のストレージユニットを含み得、各ストレージユニットは、対応する演算ユニットが演算を実行するたびに、取得された演算結果を格納するように構成されることが、理解され得る。代替的に、各演算ユニットは、第3メモリ605の指定されたストレージスペースに対応し、ストレージスペースは、演算ユニットが演算を実行するたびに取得された演算結果を格納するように使用される。
コントローラ604は、第1行列および第2行列の積を計算するように、以下の動作を実行し得る。
コントローラ604は、第1行列を、サイズがX*Lであるサブブロックを単位とするブロックに分割し、同じサイズのS×R個のサブブロックを取得し、ここで、S×R個のサブブロックのうち第s行第r列におけるサブブロックは、Asrと表され、s=(1,2,3,...,およびS)、r=(1,2,3,...,およびR)である。すなわち、本願の行列乗算器60に関して、行列乗算器60に含まれるX行*Y列の行列データは、生産または送出の後に固定され、対応する乗算回路における数Lの乗算器もまた固定される。したがって、行列演算の最中、第1行列および第2行列はフラクタルである必要があり、すなわち、ブロックに分割される必要がある。分割方式は、第1行列を、X*Lサブブロックを単位として使用したブロックに分割することである。本発明のこの実施形態において、ブロック分割の目的は、大きい行列を、行列乗算器のサイズに準拠した多くの小さい行列に分割し、そして、特定のシーケンスの小さい行列を計算し、関連する小さい行列の値を累算し、最終的に行列乗算結果を取得することである。このようにして、フレキシブルな計算が実行でき、後の再使用およびマルチレベルのキャッシングを円滑化し、計算効率がさらに増大することができ、データ移動帯域幅およびエネルギー消費を低減することができる。
第1行列がM*K行列であり、第1行列が整数個のX*Lサブブロックで正確に分割できない場合が存在し得ることに、留意すべきである。したがって、M/XまたはK/Lが整数でないとき、演算は要素0をパッディングする方式で実行されてよい。代替的に、対応する位置で全く計算が実行されず、結果の値に0が割り当てられる。具体的には、
および
であり、M%X≠0のとき、計算は第1行列の第(M+1)行から第(S*X−M)行まで実行されず、結果の値には0が割り当てられ、K%Y≠0のとき、計算は第1行列の第(K+1)行から第(R*Y−K)行まで実行されず、結果の値には0が割り当てられる。言い換えれば、演算ユニットは対応する行および列において実体的乗算計算を実行せず、処理のために、演算が実行されたが結果が0であるとみなす。このようにして、対応する演算ユニットの読み出しおよび演算電力消費は低減され得る。
対応して、コントローラ604は、第2行列を、サイズがL*Yであるサブブロックを単位とするブロックに分割し、同じサイズのR×T個のサブブロックを取得し、ここで、R×T個のサブブロックのうち第r行第t列におけるサブブロックは、Brtと表され、r=(1,2,3,...,およびR)、t=(1,2,3,...,およびT)である。コントローラ604が第1行列を、演算回路603の仕様に従ってブロックに分割されるように制御した後、第2行列もまた、第1行列に合致する方式で対応して分割されることを必要とし、そうでなければ、行列乗算計算は実行され得ない。
第2行列がK*N行列であり、第2行列が整数個のL*Yサブブロックで正確に分割できない場合が存在し得ることに、留意すべきである。したがって、K/LまたはN/Yが整数でないとき、演算は要素0をパッディングする方式で実行されてよい。代替的に、対応する位置で全く計算が実行されず、結果の値に0が割り当てられる。具体的には、
および
であり、K%Y≠0のとき、計算は第1行列の第(K+1)列から第(R*Y−K)列まで実行されず、結果の値には0が割り当てられ、N%X≠0のとき、計算は第1行列の第(N+1)行から第(T*X−N)行まで実行されず、結果の値には0が割り当てられる。言い換えれば、演算ユニットは対応する行および列において実体的乗算計算を実行せず、処理のために、演算が実行されたが結果が0であるとみなす。このようにして、対応する演算ユニットの読み出しおよび演算電力消費は低減され得る。
固定された仕様に従って、第1行列および第2行列が別々にブロックに分割された後、2つの行列は、サブブロックの間の行列乗算演算を実行するように、演算回路603に入力されてよい。具体的な計算処理において、コントローラ604は、任意のサブブロックAsrのX個の行ベクトルのうちの第x行と、対応するサブブロックBrtのY個の列ベクトルのうちの第y列とが、X行*Y列からなる演算ユニットにおける第x行第y列の演算ユニットに入力され、それにより演算を実行するように制御し得、ここで、x=(1,2,3,...,およびX)、y=(1,2,3,...,Y)であり、任意のサブブロックAsrにおけるrおよび対応するサブブロックBrtにおけるrは同じ値を有する。サブブロックAsrの行ベクトルおよびサブブロックBrtの列ベクトルが演算ユニットに入力される前に、第1行列および第2行列はブロックに分割されており、すなわちフラクタルである。したがって、特定のシーケンスにおいて、演算回路603にサブブロックAsrおよび対応するサブブロックBrtを入力する複数の実装があってよい。
可能な実装において、サブブロックAsrおよび対応するサブブロックBrtにおけるsまたはtの値のシーケンスにおいて連続的に演算が実行されてよい。図8に示されるように、例えば、第1行列はM*K行列であり、第2行列はK*N行列である。M=12、K=6、N=12、X=4、Y=4、およびL=3であると前提される。第1行列および第2行列がブロックに分割された後、S=3、R=2、およびT=3であるとわかる。この場合、第1行列
および第2行列
がブロック分割後に取得され、ここで、AはX*L行列、すなわち4*3行列を表し、Bの各要素は実際、L*Y行列、すなわち3×4行列である。
C=A*B=
第1行列および第2行列の乗算演算において、行列乗算演算が、任意の1つのサブブロックAsr、すなわち、第1行列の各サブブロックAsrと、第2行列の対応するサブブロックBrtとで実行されることが必要である。行列乗算計算がシーケンスで最初に実行される特定のシーケンスおよび特定のサブブロックを決定する、複数の実装があり得る。
方式1:行列乗算シーケンスにおいて、例えば、サブブロックはサブブロックA11およびサブブロックB11であってよい。A11のすべての行ベクトルと、対応するB11のすべての列ベクトルとが、サブブロック乗算計算サイクル(第1のラウンドとして理解されてよい)に入力され、それにより、演算を実行する。A12のすべての行ベクトルおよび対応するB21のすべての列ベクトルでの演算が、第2サブブロック乗算計算サイクル(第2のラウンドとして理解されてよい)において実行される。このようにして、演算ユニットが累算を実行した後、結果行列Cの第1行第1列における結果点C11の値が取得され得る。同様に、結果行列Cのすべての位置における結果点が取得され得る。実際、C11=
ここで、
言い換えれば、C11は実際、4*4行列である。したがって、行列計算ルールによれば、最終的に取得される行列CはM*N結果行列であり、すなわち、12*12結果行列である。
方式2:1つのサブブロックが具体的ルールによって再使用される。本発明のこの実施形態は、第1行列の1つのサブブロックAsrおよび第2行列の対応するサブブロックBrtに、サブブロックでの行列乗算演算の実行をもたらすサブブロック再使用方式を提供する。具体的には、コントローラ604はさらに、sおよびrの値を変更されないままにして、tの値を、少なくとも2つの連続するサブブロック乗算計算サイクルにおいて変更されるように制御するように構成され、その結果、第1メモリは、少なくとも2つの連続するサブブロック乗算計算サイクル内で同じサブブロックAsrを再使用し、ここで、サブブロック乗算計算サイクルは、1つのサブブロックAsrおよび対応するサブブロックBrtでの行列乗算演算を完了するように、X行*Y列の演算ユニットによって使用される時間である。
例えば、M=12、K=6、N=12、X=4、Y=4、およびL=3を前提とする前述した実施形態において、A11のすべての行ベクトルおよび対応するサブブロックB11のすべての列ベクトルが、サブブロック乗算計算サイクル(第1のラウンドとして理解されてよい)に入力され、それにより演算を実行する。第2サブブロック乗算計算サイクル(第2のラウンドとして理解されてよい)において、sおよびrの値は変更されないままであり、しかし、tの値は変更される必要があり、具体的には、A11のすべての行ベクトルおよび別の対応するサブブロックB12のすべての列ベクトルで演算が実行される。任意で、第3のサブブロック乗算計算サイクル(第3ラウンドとして理解されてよい)において、A11のすべての行ベクトルおよびさらに別の対応するサブブロックB13のすべての列ベクトルで演算が実行される。このようにして、第1メモリのA11は、複数の連続するサブブロック乗算計算サイクルで繰り返し使用されることができ、その結果、読み出しおよび書き込みオーバーヘッドが低減され、データ移動帯域幅が低減される。
方式1および方式2において、サブブロック乗算計算サイクルにおける、第1行列のサブブロックAsrおよび第2行列の対応するサブブロックBrtに関する計算ルールは、第1行列における任意のサブブロックAsrのX個の行ベクトルにおける第x行と、対応するサブブロックBrtのY個の列ベクトルのうちの第y列とが、X行*Y列からなる演算ユニットにおける第x行第y列の演算ユニットに入力され、それにより演算を実行するように制御し得、ここで、x=(1,2,3,...,およびX)、y=(1,2,3,...,Y)であり、任意のサブブロックAsrにおけるrおよび対応するサブブロックBrtにおけるrは同じ値を有する。すなわち、サブブロックAsrの任意の行ベクトルと、第2行列の対応するサブブロックBrtの任意の列ベクトルは、計算のために、X行*Y列からなる演算ユニットにおける指定された演算ユニットに入力される。例えば、A11の第2行ベクトル
および、第2行列の対応するサブブロックB11における第3列ベクトル
は、演算のために、X行*Y列からなる演算ユニットにおける第2行第3列に対応する演算ユニットに入力される、などである。
図6で示された演算回路603における演算ユニットの構成方式によると、図9は、本発明の実施形態による特定の演算回路603の配線の概略図である。
BUFAは第1行列の第1メモリ601であり、BUFBは第2行列の第2メモリ602であり、BUFCは各演算ユニット6030の計算結果を格納する第3メモリ605であり、演算回路603はX行*Y列(X=4、Y=4と前提する)からなる演算ユニット、すなわち図のMAC GRP R00C00からMAC GRP R03C03を含む。加えて、各演算ユニットMAC GRPは、X*L行列の1つの行ベクトルとL*Y行列の1つの列ベクトルで乗算演算を実行し得る。
本発明のこの実施形態において、演算回路603は、フラクタル行列乗算ユニットと称されてよく、3−D MACアレイ(MAC Cube)およびアキュムレータ(Accumulator)を含み、以下のようなフラクタル行列乗算命令を実行するように構成される。C=A*BまたはC=A*B+C、ここで、A/B/Cは2次元行列である。Aのサイズは(M*ベース)×(K*ベース)、Bのサイズは(K*ベース)×(N*ベース)、Cのサイズは(M*ベース)×(N×ベース)である。ベースは演算回路603の基本サイズであり、すなわちX*Y、例えば、8*8、16*16、および32*32である。前述のC=A*BまたはC=A*B+C計算演算は、MNK行列乗算(および累算)と称される。実際の実行処理において、コントローラは、特定のシーケンスの組み合わせ(上で説明された方式1または方式2)におけるフラクタル方式でMNK行列乗算を完了させるように、大きい行列を、ベースサイズの基本行列に分割されるように制御する。
フラクタル行列乗算ユニットの具体的なアーキテクチャは、図7に示される(ベース=4と前提する)。例えば、図7において、MACグループはN*N(4*4)からなる乗算累算グループであり、N(4)個の乗算ユニット、および、入力数がN+1(5)である累算木を含む。行列乗算に関して、乗算アキュムレータが、1つの行に1つの列を乗算して累算(すなわち、結果行列の1つの要素)を実行する演算を、実行してよい。図9において、4×4乗算累算グループの全体があり、すなわち、完全な4×4*4×4の行列乗算演算が同時に計算され得る。
図9の配線の概略図において、演算回路603は、1つのサブブロックAsrおよび対応するサブブロックBrtでの行列乗算計算を、同じクロックサイクルにおいて完了することのサポートとなり得ることが、理解されることができる。サブブロックAsrのX個の行ベクトルのすべてと、対応するサブブロックBrtのY個の列ベクトルのすべてとが、図9の配線方式において対応するBUFAおよびBUFBから同時に、対応する演算ユニット6030に到達し得るので、コントローラ604は、1つのサブブロックAsrおよび対応するサブブロックBrtでの乗算計算を1クロックサイクルで完了するように、および、次のクロックサイクルにおいて、別のサブブロックAsrおよび対応するサブブロックBrtでの乗算計算を完了するか、または、同じサブブロックAsrおよび対応する別のサブブロックBrtでの行列乗算計算を完了するように、演算回路603を制御し得る。
図10は、本発明の実施形態による特定の演算回路603の配線の概略図である。演算回路603において、図10に対応して、シストリックアレイ構造が提供される。具体的に、コントローラ604はさらに、任意のサブブロックAsrの行ベクトルを、x個の行番号の昇順で、X行*Y列からなる演算ユニットに対応する第x行に連続的に入力するように制御するように構成され、近接する行ベクトルが同じ列で異なる行の演算ユニットに入る時点の間の差は1クロックサイクルであり、コントローラはさらに、対応するサブブロックBrtの列ベクトルを、y個の列番号の昇順で、X行*Y列からなる演算ユニットに対応する第y行に連続的に入力するように同時に制御するようにさらに構成され、近接する列ベクトルが同じ行で異なる列の演算ユニットに入る時点の間の差は1クロックサイクルである。
すなわち、各演算ユニット6030(乗算アキュムレータ)をフルに利用するように、本発明のこの実施形態におけるフラクタル行列乗算ユニットは、シストリックアレイ構造を有してよい。TPUv1構造からの差は、(TPUv1におけるデータの個数は1であるが)各シストリック伝送におけるデータの個数がLであることにある。したがって、データ処理の並行性の程度は、TPUv1におけるシストリックアレイのそれより高い。
シストリックアレイアーキテクチャに基づいて、図10に対応する配線構造において、BUFA/Bが、それぞれ、第1行列/第2行列をバッファリングするように構成されるメモリである。図10において、第1行列バッファ(BUFA)は、各クロックサイクルにおいて、行列Aにおける単位行列をX個の行に分割し、同じ行のL個の要素をシストリックアレイの演算ユニットに順次送る。同様に、第2行列バッファ(BUFB)は、各クロックサイクルにおいて、第2行列における単位行列をY個の列に分割し、同じ列のL個の要素をシストリックアレイに順次送る。具体的な時間シーケンスは以下の通りである。
BUFCは、「A*B+C」計算における「C」(オフセット)行列を格納するバッファ(L0バッファまたはバッファレジスタを使用して構築されてよい)であり、また、行列乗算の中間値がBUFCに格納されてもよい。乗算アキュムレータが乗算を完了した後、累算木は、乗算後に取得されたL個の中間値と、BUFCに格納された1つのオフセットまたは中間値を累算する。
M=2、N=2、およびK=2(すなわち8×8*8×8行列乗算が使用される例。行列乗算器60のコントローラ603は、図11のフォーマットで行列乗算を分割し、全体で8個の4×4単位行列演算を取得する。MNK行列乗算演算に関して、分割シーケンスのための多くの可能性があり、分割シーケンスのルールは、MNK行列乗算演算が、方式1および方式2のシーケンスにおいて実行されてよいことである。方式2において再使用するデータの最大数倍のポリシーを使用することによって、データを読み出すための消費電力を低減し得ることが、理解されてよい。MNKフラクタル分割が実行された後、図12から図15に示されるように、コントローラ603の制御ロジックは8クロックサイクルに8個のフラクタルをシストリックアレイに入力する。図12は、M=2、N=2およびK=2のときの、時点T=0におけるフラクタル行列乗算器のパイプライン実行を示し、図13は、M=2、N=2およびK=2のときの、時点T=1における行列乗算器のパイプライン実行を示し、図14は、M=2、N=2およびK=2のときの、時点T=7におけるフラクタル行列乗算器のパイプライン実行を示し、図15は、M=2、N=2およびK=2のときの、時点T=11におけるフラクタル行列乗算器のパイプライン実行を示す。シストリックアレイは、T=6のとき、すなわち、第7クロックサイクルにおいてフルロード状態で動作を開始することがわかる。最後の6クロックサイクルにおいて、単位行列がシストリックアレイから出力され、行列全体の乗算演算もまた完了する。
任意で、図16を参照すると、行列乗算器60は、命令発送ユニット606、命令フェッチユニット607、直接メモリアクセスユニット608、ベクトルユニット609、スカラユニット610、およびバスインタフェースユニット611をさらに含んでよい。さらに、本発明のこの実施形態において提供される行列乗算器60は、コプロセッサとして使用され、中央演算処理装置(Central Processing Unit,略してCPU)80上に載置されてよく、CPUは行列乗算器60に計算タスクを割り当てる。具体的に、CPU80は第1行列、第2行列、および外部メモリ70への関連する命令を格納し得る。行列乗算器60は、第1行列、第2行列、および外部メモリ70における関連する命令を読み出すことによって、行列乗算演算を完了し得る。外部メモリ70は、具体的には、ダブルデータレートシンクロナスダイナミックランダムアクセスメモリ(Double Data Rate Synchronous Dynamic Random Access Memory、略してDDR)、または別の読み出しおよび書き込み可能メモリであってよい。外部メモリは、行列乗算器60からプライベートなメモリであってよい。具体的に、第1メモリ601、第2メモリ602、第3メモリ605、および外部メモリ70は一般的に、オンチップメモリ(On−Chip Buffer)である。
1.ベクトルユニット609(Vector Unit)は、様々な種類のマルチパラレルコンピューティングデバイス(例えば、浮動小数点乗算、浮動小数点加算、浮動小数点値比較)を含み、ここで、コンピューティングデバイスは、SIMD(Single Instruction multiple data)命令を実行するように構成され、統一されたバッファ(Unified Buffer)およびL0Cバッファのために移動する直接のデータに責任を負う。
2.スカラユニット610(Scalar Unit)は、様々な種類の整数基本演算デバイス(例えば、加算、乗算、比較、およびシフト)を含む。
3.直接メモリアクセスユニット(Direct Memory Access Unit,DMA Unit)は、各ストレージユニットにデータを移動するように、例えば、L1 RAMからL0 RAMへデータを移動するように構成される。本発明のこの実施形態における直接メモリアクセスユニットが、行列乗算器の外部メモリまたは内部メモリから、乗算演算に関与する行列データを移動するとき、直接メモリアクセスユニットは、行列がブロックに分割された後に取得された結果を格納する必要がある。例えば、2*2行列に関して、第1行列の第1行第1列のサブブロックA11
がサブブロックのユニットに格納され、A0、A1、A2およびA3が1つの行に格納される、などである。このようにして、第1行列または第2行列が、対応する第1メモリへと移動されてよいとき、または、第2行列が、対応する第2メモリに移動されてよいときは、ストレージは、前述の方式で実行されてよい。演算ユニットが読み出しの実行を必要とするとき、演算ユニットもまた、前述のストレージシーケンスにおいて読み出しを実行してよく、それにより、計算を円滑化する。行ベクトルが列ベクトルに転置される必要があるとき、転置はフレキシブルに、そして素早く実行されてよい。
4.命令フェッチユニット607(Instruction Fetch Unit,IFU)は、内部でPC(プログラムカウンタ)およびIM(命令メモリ)に統合され、メインメモリからバスインタフェースユニット(BIU)611を使用して命令をフェッチし、実行手順を復号および制御する。
5.命令発送ユニット606(Dispatch Unit)は、命令フェッチユニットによって伝送された命令を構文解析し、命令に対応するタイプ命令を4つのパイプラインユニットに提示し、ここで、パイプラインユニットは図16のスカラユニット(Scalar Unit)、ダイレクトメモリアクセス(Direct Memory Access,DMA)ユニット、ベクトルユニット(Vector Unit)、およびフラクタル行列乗算ユニットである。命令発送ユニットが、4つのパイプラインの間の順序立てた実行を制御するためのメカニズムがある。
パイプラインユニットには2つの型、すなわち非同期実行(Posted Execution)および同期実行があることに留意すべきである。すべてのタイプ命令は順序保持方式で伝送される。違いは、非同期実行ユニットによる命令の実行は非同期的に終了し、同期実行ユニットによる命令の実行は同期的に終了する、ということにある。スカラユニット(Scalar Unit)は同期実行ユニットであり、フラクタル行列乗算ユニット(Fractal Mat Mult Unit)、DMAユニット、およびベクトルユニット(Vector Unit)は非同期実行ユニットである。
可能な実装において、直接メモリアクセスユニットに関して、本発明のこの実施形態は、構成可能なオンフライト行列転置機能を提供する。例えば、第1行列のブロック行列がメモリ(例えば、行列乗算器の外部メモリ)から、別のメモリ(第1メモリなどの、行列乗算器の内部メモリ)に移動されるとき、直接メモリアクセスユニットは、当該移動の最中に行列転置演算を実行し、転置行列の順序で転置行列を格納する。行列転置は、ニューラルネットワークトレーニングプロセスの必須の演算フェーズである。移動後の転置の実行のための共通命令と比較すると、本発明のこの実施形態における構成可能なオンフライト行列転置のための移動命令は、よりフレキシブルであり、また、ソフトウェアはより容易に、およびより簡潔にされる。詳細は以下の表に示される。
共通命令:構成可能なオンフライト行列転置機能のための命令。
共通移動命令が、構成可能なオンフライト行列転置機能のための命令と比較される。構成可能なオンフライト行列転置機能をサポートすることによって、同じ命令が、異なるパラメータへの、より多くの応用的シナリオをサポートし得る。フラクタル行列乗算プロセッサアーキテクチャに適用可能な、構成可能なオンフライト行列転置方法が設計される。
図17を参照すると、データ再使用を円滑化し、消費電力を低減し、密結合されたオンチップメモリへの依存を低減するように、本発明の実施形態はさらに、マルチレベルバッファを使用するストレージ構造を提供する。すべての演算ユニットは、統一されたバッファ(Unified Buffer)を使用することによって、相互作用データを読み出し/書き込みしてよい。行列乗算器内には、2つのレベルの専用バッファL1およびL0がある。L1バッファおよび統一されたバッファは通常、ダイレクトメモリアクセスDMAユニットを使用して、外部格納空間とデータを交換する。外部格納空間は複数レベルのストレージユニットを含む。例えば、行列乗算器は複数レベルのバッファを含み、L0からL1へ、そしてL2バッファへと、容量が次第に増加し、帯域幅が次第に減少し、遅延が次第に増加し、消費電力オーバーヘッドが次第に増加する。L0は、最も内側のレベルのバッファであり、MNK乗算命令の3つの行列「第1行列」「第2行列」および「結果行列」をバッファリングするように構成されてよい。L0は計算に近いので、帯域幅および遅延に関する要件はもっとも高く、データ再使用の可能性は最大である。性能を改善して消費電力を低減させるように、A Dトリガ(DFF)がL0を構築するために使用されてよい。フラクタル命令のソースおよび宛先オペランドは、L1(図17の第5メモリ612および第4メモリ613)から来る。実行の最中に、データはL0(例えば、図17の第1メモリ601および第2メモリ602)を使用することによって再使用される。上記のフラクタル命令のようなソフトウェアは、L1を使用することによってデータを再使用し得る。マルチレベルバッファにおけるデータ再使用は、フラクタル命令を実行するシーケンスおよびフラクタル命令の上のソフトウェアを制御するシーケンスを使用することによって実装され得る。加えて、マルチレベルバッファのデータを再使用することによって、各バッファのデータのデータ移動時間もまた隠され得る。以下の表の例は、データ再使用と、バッファの複数のレベルの間の移動とを説明し得る。
以下の2つの行列:A=
およびB=
があり、2つの行列のデータ移動ステップが以下の表に示されると前提する。
時点1において、コントローラ60はL1バッファから行列のA0およびB0部分を読み出し、A0およびB0部分をL0に格納する。
時点2において、A0およびB0フラクタル行列は、L0から読み出され、演算に関与することができる。同時に、ハードウェアはL1からB1フラクタルを読み出し、B1フラクタルをL0に格納し、次の動作に関する準備を行う。加えて、データの読み出し時間もまた、計算によって隠される。この場合、ハードウェアは2つのフラクタル行列の両者を読み出す必要はなく、B1行列のみを読み出す。「A0*B1」が時点3において行列のために計算されるとき、時点1において格納されたデータA0が再使用される。前述のリストを参照すると、データが各時間単位において再使用されることが、後の計算においてわかることができる。
本発明のこの実施形態は、L1およびL0の間のデータの移動に限定されるものではないことに留意すべきである。L2(例えば、外部メモリ701および外部メモリ702)からL1バッファへとデータを移動する最中に、データもまた、帯域幅を低減させてエネルギー消費を最適化するように、再使用されてよい。本発明のこの実施形態において、行列分割方式および移動シーケンスは、限定されるものではない。データ再使用は、各時間単位にデータ移動を実現するように、データ移動の最中に最大化されるべきであり、フラクタル行列計算はフルロード状態で実行される。
本発明のこの実施形態において、マルチレベルバッファ構造、行列フラクタルデータ再使用、フラクタル命令を実行するシーケンス、およびフラクタル命令の上のソフトウェアを制御するシーケンスを使用することによって、マルチレベルバッファにおけるデータ再使用が実現でき、密結合するオンチップメモリへの依存が低減され、エネルギー効率が最適化され、ソフトウェアプログラミングの複雑性が低減される。
本発明のこの実施形態において、行列で乗算演算を実行するための命令を実行するシーケンスは、2つの方式を含む:命令同期実行および命令非同期実行である。
本発明のこの実施形態において、フラクタル行列乗算命令が実行される前に、例えば、行列サイズの計算、行列データの読み出し、および宛先アドレスの計算といった、一連の制御準備およびデータ準備が必要とされる。プロセッサの命令実行ポリシーが同期実行である場合、具体的には、すべての命令がシーケンスにコミット(commit)される必要がある場合、関連づけられていない命令が終了するまで、命令の実行が開始しないという可能性が非常に高い。このことは、大きくそして不要である、性能の損失をもたらすことがある。以下の手順は、命令同期実行シーケンスである:アドレス計算→制御準備→行列0の読み出し→行列0の乗算→アドレス計算→制御準備→行列1の読み出し→行列1の乗算。
前述の実行シーケンスにおいて、第2の時間の制御準備、アドレス計算、行列1のデータの読み出しは、行列0の乗算の終了に依存せず、そのような追加の時間は、不要な待ち時間をもたらすことがある。この問題を解決するように、本発明のこの実施形態において、ハードウェア命令発送ユニット606は、マルチチャネル順序保持方式で伝送を実行し、それにより、異なる型の命令が同時にかつ順次実行されることを可能にすることを保証する。前述の例において、制御準備およびアドレス計算が順序保持方式によってスカラチャネル上で実行され、行列読み出しおよび格納が順序保持方式によってデータ移動チャネル上で実行され、行列乗算計算もまた、順序保持方式によって行列演算チャネル上で実行される。チャネルは、オーバーラップしてよいが、順序保持はされず、互いに従属した命令が、待ちフラグ(Wait Flag)を設定することによって同期されてよい。命令非同期実行ポリシーを使用することによって、命令は並列で実行され得、これにより、ますます実行効率が増大する。前述の同期実行シーケンスの例において、非同期実行ポリシーが使用される場合、効果は図18に示される。命令非同期実行シーケンスにおいて、命令は順序保持されず、依存関係を有する関連する命令が、ソフトウェアによって追加された待ち命令を使用することによって同期されてよい。フラクタル行列乗算の制御準備オーバーヘッドは、この非同期実行方式を使用することによって隠され得る。フラクタル行列乗算プログラミング方式に適用可能な非同期実行方式が設計される。
行列乗算器が提供され、ここで、行列乗算器は行列乗算ブロック分割方法、すなわち、MNKフラクタルを完了して、行列乗算器60における内部コントローラ604の制御ロジックを使用することによって、乗算のために大きい行列を単位行列(具体的には、X*L×L*Y行列)に分割するようにコントローラを使用する。コントローラ604の制御ロジックは、各クロックサイクルにおいて、単位行列乗算タスクを演算回路603に送り、その結果、データがパイプライン方式で実行され、X行*Y列の演算ユニットがフルロード状態で動作する。行列乗算の効率が増大し、ニューラルネットワークアルゴリズムを大幅に改善する適用効果が実現される。本発明のこの実施形態において提供される行列乗算器は、畳み込みニューラルネットワークにおける畳み込み演算およびFC演算を実行し得る。
前述した実施形態のすべてまたは一部は、ソフトウェア、ハードウェア、ファームウェア、またはそれらの組み合わせによって実装されてよい。実施形態を実装するようにソフトウェアプログラムが使用されるとき、実施形態は、完全に、または部分的に、コンピュータプログラム製品の形態で実装されてよい。コンピュータプログラム製品は、1または複数のコンピュータ命令を含む。コンピュータプログラム命令がコンピュータ上でロードおよび実行されるとき、本願の実施形態による手順または機能が、すべてまたは部分的に生成される。コンピュータは汎用コンピュータ、専用コンピュータ、コンピュータネットワーク、または他のプログラマブルな装置であってよい。コンピュータ命令は、コンピュータ可読記憶媒体に格納されてよく、または、コンピュータ可読記憶媒体から別のコンピュータ可読記憶媒体に伝送されてもよい。例えば、コンピュータ命令は、ウェブサイト、コンピュータ、サーバ、またはデータセンタから、別のウェブサイト、コンピュータ、サーバ、またはデータセンタに、有線(例えば、同軸ケーブル、光ファイバ、またはデジタル加入者線(Digital Subscriber Line,略してDSL))または無線(例えば、赤外線、無線、およびマイクロ波、または同様のものなど)方式で、伝送されてよい。コンピュータ可読記憶媒体は、コンピュータによってアクセス可能な任意の可用媒体、または、1または複数の可用媒体を統合する、サーバまたはデータセンタなどのデータストレージデバイスであってよい。可用媒体は、磁気媒体(例えば、フロッピー(登録商標)ディスク、ハードディスク、または磁気テープ)、光学媒体(例えば、DVD)、半導体媒体(例えば、ソリッドステートドライブ(Solid State Disk,略してSSD))、または同様のものであってよい。
本願は、実施形態を参照して説明されてきたが、保護を請求する本願の実装の処理において、当業者は、添付の図面、開示された内容、および添付の特許請求の範囲を閲覧することによって、開示された実施形態の別の変形を理解および実装し得る。請求項において、「含む(comprising)」は、別のコンポーネントまたは別の工程を排除せず、「1つの(a)」または「1つ(one)」は、複数という意味を排除しない。単一のプロセッサまたは別のユニットが、請求項において列挙される複数の機能を実装してもよい。いくつかの測定値が互いに異なる従属請求項に記録されるが、これは、これらの測定値がより良い効果を作り出すように組み合わせられ得ないことを意味しない。
本願は具体的特徴およびそれらの実施形態を参照して説明されてきたが、明らかに、様々な修正および組み合わせが、本願の思想および範囲から逸脱することなく、行われてよい。対応して、明細書および添付の図面は単に、添付の特許請求の範囲によって画定された本願の例としての説明にすぎず、本願の範囲を含める修正、変形、組み合わせ、または均等物の、いずれかまたはすべてとみなされる。明らかに、当業者は、本願の思想および範囲から逸脱することなく、本願の様々な修正および変形を行うことができる。以下の特許請求の範囲およびそれらの均等技術によって画定される保護の範囲内に属するならば、本願は、本願へのこれらの修正および変形を含めることを意図する。
第1の態様によると、本発明の実施形態は行列乗算器を提供し、行列乗算器は、
M*K行列である第1行列を格納するように構成された第1メモリと、
K*N行列である第2行列を格納するように構成された第2メモリと、
第1メモリおよび第2メモリに接続される演算回路と、
演算回路に接続されたコントローラと、を含み、
演算回路はX行*Y列からなる演算ユニットを含み、各演算ユニットはベクトル乗算回路および加算回路を含み、ベクトル乗算回路は、第1メモリによって送られる行ベクトルのデータおよび第2メモリによって送られる列ベクトルのデータを受信し、2つのベクトルを乗算するように構成され、加算回路は、2つのベクトルの乗算によって取得された結果を加算し、同一の演算ユニットの計算結果を累算し、各演算ユニットの演算結果を取得するように構成される、演算回路と、
コントローラは以下の動作、すなわち、
第1行列を、サイズがX*Lであるサブブロックを単位とするブロックに分割し、同じサイズのS×R個のサブブロックを取得し、S×R個のサブブロックのうち第s行第r列におけるサブブロックはAsr,s=(1,2,3,...,およびS)、およびr=(1,2,3,...,およびR)で表される、動作と、
第2行列を、サイズがL*Yであるサブブロックを単位とするブロックに分割し、同じサイズのR×T個のサブブロックを取得し、R×T個のサブブロックのうち第r行第t列におけるサブブロックは、Brt,r=(1,2,3,...,およびR)、t=(1,2,3,...,およびT)で表される、動作とを実行するように構成され、
コントローラは、さらに以下の動作、すなわち、
任意のサブブロックAsrのX個の行ベクトルにおける第x行と、対応するサブブロックBrtのY個の列ベクトルにおける第y列とを、X行*Y列からなる演算ユニットの第x行第y列において演算ユニットに入力し、それにより、処理を実行する動作を実行するように構成され、x=(1,2,3,...,およびX)、y=(1,2,3,...,およびY)であり、任意のサブブロックAsrにおけるrと、対応するサブブロックBrtにおけるrとは同じ値を有する。
可能な実装において、コントローラはさらに、任意のサブブロックAsrの行ベクトルを、x個の行番号の昇順で、X行*Y列からなる演算ユニットに対応する第x行に連続的に入力するように制御するように構成され、近接する行ベクトルが同じ列で異なる行の演算ユニットに入る時点の間の差は1クロックサイクルであり、コントローラはさらに、対応するサブブロックBrtの列ベクトルを、y個の列番号の昇順で、X行*Y列からなる演算ユニットに対応する第yに連続的に入力するように同時に制御するように構成され、近接する列ベクトルが同じ行で異なる列の演算ユニットに入る時点の間の差は1クロックサイクルである。
可能な実装において、 S=
およびR=
であり、
M%X≠0のとき、計算は第1行列の第(M+1)行から第(S*X−M)行まで実行されず、結果の値には0が割り当てられ、K%Y≠0のとき、計算は第1行列の第(K+1)から第(R*Y−K)まで実行されず、結果の値には0が割り当てられる。
前述の分析に基づいて、本願は、行列乗算アクセラレータを提供し、本願において提供される技術的問題を具体的に解析および解決する。図6は、本発明の実施形態による行列乗算器60の構造図である。図6に示されるように、行列乗算器60は第1メモリ601、第2メモリ602、演算回路603、およびコントローラ604を含む。演算回路603は、バスを使用して、第1メモリ601、第2メモリ602、およびコントローラ604とデータ通信を実行し得る。演算回路603は、第1メモリ601および第2メモリ602から行列データを取り出し、ベクトル乗算および加算演算を実行するように構成される。コントローラ604は、ベクトル演算を完了するように、予め設定されたプログラムまたは命令に従って、演算回路603を制御するように構成される。第1メモリ601は第1行列を格納するように構成される。
本発明のこの実施形態において説明される第1メモリ601、および、以下に説明される関連する行列乗算器の第2メモリ602、第3メモリ605、および内部メモリは、それぞれ、レジスタ、ランダムアクセスメモリ(random access memory、略してRAM)、静的ランダムアクセスメモリ、フラッシュメモリ、または別の読み出しおよび書き込み可能メモリであってよい。本願において、第1行列、第2行列および演算結果のデータ型はそれぞれ、int8、fp16、またはfp32などの型であってよい。
演算回路603は、X行*Y列の演算ユニット6030(乗算累算ユニットMACと称されてよい)を含み得る。各演算ユニットは、独立してベクトル乗算演算を実行し得る。図6において、演算回路603が4*4演算ユニット6030を含む例が図に使用され、すなわち、X=4およびY=4である。演算ユニット6030は、それぞれ第1メモリ601によって送られた行ベクトルと、第2メモリ602によって送られた列ベクトルとを受信し、行ベクトルと列ベクトルとのベクトル乗算演算を実行するように使用される、2つの入力を提供される。具体的には、1つの演算回路6030はベクトル乗算回路および加算回路を含み、ここで、ベクトル乗算回路は第1メモリ601によって送られる行ベクトルのデータと、第2メモリ602によって送られる列ベクトルのデータとを受信し、2つのベクトルを乗算するように構成され、加算回路は、2つのベクトルの乗算によって取得された結果を加算し、同一の演算ユニットの計算結果を累算し、演算ユニット6030の演算結果を取得するように構成される。
第1行列がM*K行列であり、第1行列が整数個のX*Lサブブロックで正確に分割できない場合が存在し得ることに、留意すべきである。したがって、M/XまたはK/Lが整数でないとき、演算は要素0をパッディングする方式で実行されてよい。代替的に、対応する位置で全く計算が実行されず、結果の値に0が割り当てられる。具体的には、
および
であり、M%X≠0のとき、計算は第1行列の第(M+1)行から第(S*X−M)行まで実行されず、結果の値には0が割り当てられ、K%Y≠0のとき、計算は第1行列の第(K+1)から第(R*Y−K)まで実行されず、結果の値には0が割り当てられる。言い換えれば、演算ユニットは対応する行および列において実体的乗算計算を実行せず、処理のために、演算が実行されたが結果が0であるとみなす。このようにして、対応する演算ユニットの読み出しおよび演算電力消費は低減され得る。
方式1:行列乗算シーケンスにおいて、例えば、サブブロックはサブブロックA11およびサブブロックB11であってよい。A11のすべての行ベクトルと、対応するB11のすべての列ベクトルとが、サブブロック乗算計算サイクル(第1のラウンドとして理解されてよい)に入力され、それにより、演算を実行する。A12のすべての行ベクトルおよび対応するB21のすべての列ベクトルでの演算が、第2サブブロック乗算計算サイクル(第2のラウンドとして理解されてよい)において実行される。このようにして、演算ユニットが累算を実行した後、結果行列Cの第1行第1列における結果点C11の値が取得され得る。同様に、結果行列Cのすべての位置における結果点が取得され得る。実際、C11
ここで、
図10は、本発明の実施形態による特定の演算回路603の配線の概略図である。演算回路603において、図10に対応して、シストリックアレイ構造が提供される。具体的に、コントローラ604はさらに、任意のサブブロックAsrの行ベクトルを、x個の行番号の昇順で、X行*Y列からなる演算ユニットに対応する第x行に連続的に入力するように制御するように構成され、近接する行ベクトルが同じ列で異なる行の演算ユニットに入る時点の間の差は1クロックサイクルであり、コントローラ604はさらに、対応するサブブロックBrtの列ベクトルを、y個の列番号の昇順で、X行*Y列からなる演算ユニットに対応する第yに連続的に入力するように同時に制御するようにさらに構成され、近接する列ベクトルが同じ行で異なる列の演算ユニットに入る時点の間の差は1クロックサイクルである。
シストリックアレイアーキテクチャに基づいて、図10に対応する配線構造において、BUFA/Bが、それぞれ、第1行列/第2行列をバッファリングするように構成されるメモリである。図10において、第1行列バッファ(BUFA)は、各クロックサイクルにおいて、第1列における単位行列をX個の行に分割し、同じ行のL個の要素をシストリックアレイの演算ユニットに順次送る。同様に、第2行列バッファ(BUFB)は、各クロックサイクルにおいて、第2行列における単位行列をY個の列に分割し、同じ列のL個の要素をシストリックアレイに順次送る。具体的な時間シーケンスは以下の通りである。
M=2、N=2、およびK=2(すなわち8×8*8×8行列乗算が使用される例。行列乗算器60のコントローラ604は、図11のフォーマットで行列乗算を分割し、全体で8個の4×4単位行列演算を取得する。MNK行列乗算演算に関して、分割シーケンスのための多くの可能性があり、分割シーケンスのルールは、MNK行列乗算演算が、方式1または方式2のシーケンスにおいて実行されてよいことである。方式2において再使用するデータの最大数倍のポリシーを使用することによって、データを読み出すための消費電力を低減し得ることが、理解されてよい。MNKフラクタル分割が実行された後、図12から図15に示されるように、コントローラ604の制御ロジックは8クロックサイクルに8個のフラクタルをシストリックアレイに入力する。図12は、M=2、N=2およびK=2のときの、時点T=0におけるフラクタル行列乗算器のパイプライン実行を示し、図13は、M=2、N=2およびK=2のときの、時点T=1におけるフラクタル行列乗算器のパイプライン実行を示し、図14は、M=2、N=2およびK=2のときの、時点T=7におけるフラクタル行列乗算器のパイプライン実行を示し、図15は、M=2、N=2およびK=2のときの、時点T=11におけるフラクタル行列乗算器のパイプライン実行を示す。シストリックアレイは、T=6のとき、すなわち、第7クロックサイクルにおいてフルロード状態で動作を開始することがわかる。最後の6クロックサイクルにおいて、単位行列がシストリックアレイから出力され、行列全体の乗算演算もまた完了する。
3.直接メモリアクセスユニット(Direct Memory Access Unit,DMA Unit)は、各ストレージユニットにデータを移動するように、例えば、L1 RAMからL0 RAMへデータを移動するように構成される。本発明のこの実施形態における直接メモリアクセスユニットが、行列乗算器の外部メモリまたは内部メモリから、乗算演算に関与する行列データを移動するとき、直接メモリアクセスユニットは、行列がブロックに分割された後に取得された結果を格納する必要がある。例えば、2*2行列に関して、第1行列の第1行第1列のサブブロックA11
がサブブロックのユニットに格納され、A0、A1、A2およびA3が1つの行に格納される、などである。このようにして、第1行列が、対応する第1メモリへと移動されてよいとき、または、第2行列が、対応する第2メモリに移動されてよいときは、ストレージは、前述の方式で実行されてよい。演算ユニットが読み出しの実行を必要とするとき、演算ユニットもまた、前述のストレージシーケンスにおいて読み出しを実行してよく、それにより、計算を円滑化する。行ベクトルが列ベクトルに転置される必要があるとき、転置はフレキシブルに、そして素早く実行されてよい。
時点1において、コントローラ604はL1バッファから行列のA0およびB0部分を読み出し、A0およびB0部分をL0に格納する。
本願は具体的特徴およびそれらの実施形態を参照して説明されてきたが、明らかに、様々な修正および組み合わせが、本願の範囲から逸脱することなく、行われてよい。対応して、明細書および添付の図面は単に、添付の特許請求の範囲によって画定された本願の例としての説明にすぎず、本願の範囲を含める修正、変形、組み合わせ、または均等物の、いずれかまたはすべてとみなされる。明らかに、当業者は、本願の思想および範囲から逸脱することなく、本願の様々な修正および変形を行うことができる。以下の特許請求の範囲およびそれらの均等技術によって画定される保護の範囲内に属するならば、本願は、本願へのこれらの修正および変形を含めることを意図する。
(項目1)
M*K行列である第1行列を格納するように構成された第1メモリと、
K*N行列である第2行列を格納するように構成された第2メモリと、
上記第1メモリおよび上記第2メモリに接続される演算回路と、
上記演算回路に接続されるコントローラと、を含む、
行列乗算器であって、
上記演算回路は、X行*Y列からなる演算ユニットを含み、各上記演算ユニットは、ベクトル乗算回路および加算回路を含み、上記行列乗算回路は、上記第1メモリによって送られる行ベクトルのデータおよび上記第2メモリによって送られる列ベクトルのデータを受信し、上記2つのベクトルを乗算するように構成され、上記加算回路は、上記2つのベクトルの乗算によって取得された結果を加算し、同一の演算ユニットの計算結果を累算し、各演算ユニットの演算結果を取得するように構成され、
上記コントローラは、以下の動作、すなわち、
上記第1行列を、サイズがX*Lであるサブブロックを単位とするブロックに分割し、同じサイズのS×R個のサブブロックを取得し、上記S×R個のサブブロックのうち第s行第r列におけるサブブロックはA sr ,s=(1,2,3,...,およびS)、およびr=(1,2,3,...,およびR)で表される、動作と、
上記第2行列を、サイズがL*Yであるサブブロックを単位とするブロックに分割し、同じサイズのR×T個のサブブロックを取得し、R×T個のサブブロックのうち第r行第t列におけるサブブロックは、B rt ,r=(1,2,3,...,およびR)、t=(1,2,3,...,およびT)で表される、動作と
を実行するように構成され、
上記コントローラは、さらに以下の動作、すなわち、
任意のサブブロックA sr のX個の行ベクトルにおける第x行と、対応するサブブロックB rt のY個の列ベクトルにおける第y列とを、X行*Y列からなる演算ユニットの第x行第y列において上記演算ユニットに入力し、それにより、処理を実行する動作を実行するように構成され、x=(1,2,3,...,およびX)、y=(1,2,3,...,およびY)であり、上記任意のサブブロックA sr におけるrと、上記対応するサブブロックB rt におけるrとは同じ値を有する、
行列乗算器。
(項目2)
上記コントローラは、以下の動作、すなわち、
上記任意のサブブロックA sr の上記X個の行ベクトルにおける上記第x行と、上記対応するサブブロックB rt の上記Y個の列ベクトルにおける上記第y列とを、同じクロックサイクルにおいて並行して、X行*Y列からなる上記演算ユニットの第x行第y列において上記演算ユニットに入力し、それにより上記処理を実行する、動作
を実行するように具体的に構成される、項目1に記載の行列乗算器。
(項目3)
上記コントローラはさらに、上記任意のサブブロックA sr の行ベクトルを、x個の行番号の昇順で、X行*Y列からなる上記演算ユニットに対応する第x行に連続的に入力するように制御するように構成され、近接する行ベクトルが同じ列で異なる行の演算ユニットに入る時点の間の差は1クロックサイクルであり、上記コントローラはさらに、上記対応するサブブロックB rt の列ベクトルを、y個の列番号の昇順で、X行*Y列からなる上記演算ユニットに対応する第y行に連続的に入力するように同時に制御するように構成され、近接する列ベクトルが同じ行で異なる列の演算ユニットに入る時点の間の差は1クロックサイクルである、
項目1または2に記載の行列乗算器。
(項目4)
上記コントローラはさらに、sおよびrの値を変更されないままにして、tの値を、少なくとも2つの連続するサブブロック乗算計算サイクルにおいて変更されるように制御するように構成され、その結果、上記第1メモリは、上記少なくとも2つの連続するサブブロック乗算計算サイクル内で同じサブブロックA sr を再使用し、上記サブブロック乗算計算サイクルは、1つのサブブロックA sr および対応するサブブロックB rt 上での行列乗算演算を完了させるように、X行*Y列の上記演算ユニットによって使用される時間である、
項目1から3のいずれか一項に記載の行列乗算器。
(項目5)
上記行列乗算器はさらに、上記演算回路に接続された第3メモリを含み、
上記コントローラは、上記ベクトル乗算回路および上記加算回路の演算結果を上記第3メモリに格納するように、X行*Y列の上記演算ユニットを制御するように構成される、
項目1から4のいずれか一項に記載の行列乗算器。
(項目6)
上記行列乗算器はさらに、上記第1メモリおよび上記第2メモリに接続される第4メモリと、上記第3メモリに接続される第5メモリとを含み、
上記コントローラはさらに、上記第1行列および上記第2行列の乗算演算を実行する前に、
上記第4メモリから、上記第1行列および上記第2行列のデータソースを、それぞれ上記第1メモリおよび上記第2メモリに移動させ、上記第3メモリから、上記計算結果を上記第5メモリに移動させるように、制御するように構成される、
項目5に記載の行列乗算器。
(項目7)
上記ベクトル乗算回路はL個の乗算器を含み、上記加算回路は入力数がL+1である加算木を含む、
項目1から6のいずれか一項に記載の行列乗算器。
(項目8)
上記第1メモリ、上記第2メモリ、上記演算回路、および上記コントローラはバスインタフェースユニットを使用して接続される、
項目1から7のいずれか一項に記載の行列乗算器。
(項目9)
S=
(数22)
および
R=
(数23)
であり、
M%X≠0のとき、計算は上記第1行列の第(M+1)行から第(S*X−M)行まで実行されず、結果の値には0が割り当てられ、K%Y≠0のとき、計算は上記第1行列の第(K+1)行から第(R*Y−K)行まで実行されず、結果の値には0が割り当てられる、
項目1から8のいずれか一項に記載の行列乗算器。
(項目10)
R=
(数24)
および
T=
(数25)
であり、
K%Y≠0のとき、計算は上記第1行列の第(K+1)列から第(R*Y−K)列まで実行されず、結果の値には0が割り当てられ、N%X≠0のとき、計算は上記第1行列の第(N+1)行から第(T*X−N)行まで実行されず、結果の値には0が割り当てられる、
項目1から8のいずれか一項に記載の行列乗算器。

Claims (10)

  1. M*K行列である第1行列を格納するように構成された第1メモリと、
    K*N行列である第2行列を格納するように構成された第2メモリと、
    前記第1メモリおよび前記第2メモリに接続される演算回路と、
    前記演算回路に接続されるコントローラと、を含む、
    行列乗算器であって、
    前記演算回路は、X行*Y列からなる演算ユニットを含み、各前記演算ユニットは、ベクトル乗算回路および加算回路を含み、前記行列乗算回路は、前記第1メモリによって送られる行ベクトルのデータおよび前記第2メモリによって送られる列ベクトルのデータを受信し、前記2つのベクトルを乗算するように構成され、前記加算回路は、前記2つのベクトルの乗算によって取得された結果を加算し、同一の演算ユニットの計算結果を累算し、各演算ユニットの演算結果を取得するように構成され、
    前記コントローラは、以下の動作、すなわち、
    前記第1行列を、サイズがX*Lであるサブブロックを単位とするブロックに分割し、同じサイズのS×R個のサブブロックを取得し、前記S×R個のサブブロックのうち第s行第r列におけるサブブロックはAsr,s=(1,2,3,...,およびS)、およびr=(1,2,3,...,およびR)で表される、動作と、
    前記第2行列を、サイズがL*Yであるサブブロックを単位とするブロックに分割し、同じサイズのR×T個のサブブロックを取得し、R×T個のサブブロックのうち第r行第t列におけるサブブロックは、Brt,r=(1,2,3,...,およびR)、t=(1,2,3,...,およびT)で表される、動作と
    を実行するように構成され、
    前記コントローラは、さらに以下の動作、すなわち、
    任意のサブブロックAsrのX個の行ベクトルにおける第x行と、対応するサブブロックBrtのY個の列ベクトルにおける第y列とを、X行*Y列からなる演算ユニットの第x行第y列において前記演算ユニットに入力し、それにより、処理を実行する動作を実行するように構成され、x=(1,2,3,...,およびX)、y=(1,2,3,...,およびY)であり、前記任意のサブブロックAsrにおけるrと、前記対応するサブブロックBrtにおけるrとは同じ値を有する、
    行列乗算器。
  2. 前記コントローラは、以下の動作、すなわち、
    前記任意のサブブロックAsrの前記X個の行ベクトルにおける前記第x行と、前記対応するサブブロックBrtの前記Y個の列ベクトルにおける前記第y列とを、同じクロックサイクルにおいて並行して、X行*Y列からなる前記演算ユニットの第x行第y列において前記演算ユニットに入力し、それにより前記処理を実行する、動作
    を実行するように具体的に構成される、請求項1に記載の行列乗算器。
  3. 前記コントローラはさらに、前記任意のサブブロックAsrの行ベクトルを、x個の行番号の昇順で、X行*Y列からなる前記演算ユニットに対応する第x行に連続的に入力するように制御するように構成され、近接する行ベクトルが同じ列で異なる行の演算ユニットに入る時点の間の差は1クロックサイクルであり、前記コントローラはさらに、前記対応するサブブロックBrtの列ベクトルを、y個の列番号の昇順で、X行*Y列からなる前記演算ユニットに対応する第y行に連続的に入力するように同時に制御するように構成され、近接する列ベクトルが同じ行で異なる列の演算ユニットに入る時点の間の差は1クロックサイクルである、
    請求項1または2に記載の行列乗算器。
  4. 前記コントローラはさらに、sおよびrの値を変更されないままにして、tの値を、少なくとも2つの連続するサブブロック乗算計算サイクルにおいて変更されるように制御するように構成され、その結果、前記第1メモリは、前記少なくとも2つの連続するサブブロック乗算計算サイクル内で同じサブブロックAsrを再使用し、前記サブブロック乗算計算サイクルは、1つのサブブロックAsrおよび対応するサブブロックBrt上での行列乗算演算を完了させるように、X行*Y列の前記演算ユニットによって使用される時間である、
    請求項1から3のいずれか一項に記載の行列乗算器。
  5. 前記行列乗算器はさらに、前記演算回路に接続された第3メモリを含み、
    前記コントローラは、前記ベクトル乗算回路および前記加算回路の演算結果を前記第3メモリに格納するように、X行*Y列の前記演算ユニットを制御するように構成される、
    請求項1から4のいずれか一項に記載の行列乗算器。
  6. 前記行列乗算器はさらに、前記第1メモリおよび前記第2メモリに接続される第4メモリと、前記第3メモリに接続される第5メモリとを含み、
    前記コントローラはさらに、前記第1行列および前記第2行列の乗算演算を実行する前に、
    前記第4メモリから、前記第1行列および前記第2行列のデータソースを、それぞれ前記第1メモリおよび前記第2メモリに移動させ、前記第3メモリから、前記計算結果を前記第5メモリに移動させるように、制御するように構成される、
    請求項5に記載の行列乗算器。
  7. 前記ベクトル乗算回路はL個の乗算器を含み、前記加算回路は入力数がL+1である加算木を含む、
    請求項1から6のいずれか一項に記載の行列乗算器。
  8. 前記第1メモリ、前記第2メモリ、前記演算回路、および前記コントローラはバスインタフェースユニットを使用して接続される、
    請求項1から7のいずれか一項に記載の行列乗算器。
  9. S=
    および
    R=
    であり、
    M%X≠0のとき、計算は前記第1行列の第(M+1)行から第(S*X−M)行まで実行されず、結果の値には0が割り当てられ、K%Y≠0のとき、計算は前記第1行列の第(K+1)行から第(R*Y−K)行まで実行されず、結果の値には0が割り当てられる、
    請求項1から8のいずれか一項に記載の行列乗算器。
  10. R=
    および
    T=
    であり、
    K%Y≠0のとき、計算は前記第1行列の第(K+1)列から第(R*Y−K)列まで実行されず、結果の値には0が割り当てられ、N%X≠0のとき、計算は前記第1行列の第(N+1)行から第(T*X−N)行まで実行されず、結果の値には0が割り当てられる、
    請求項1から8のいずれか一項に記載の行列乗算器。
JP2020536531A 2017-12-29 2018-10-19 行列乗算器 Pending JP2021508125A (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
CN201711499179.X 2017-12-29
CN201711499179.XA CN109992743B (zh) 2017-12-29 2017-12-29 矩阵乘法器
PCT/CN2018/111077 WO2019128404A1 (zh) 2017-12-29 2018-10-19 矩阵乘法器

Publications (1)

Publication Number Publication Date
JP2021508125A true JP2021508125A (ja) 2021-02-25

Family

ID=67065034

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2020536531A Pending JP2021508125A (ja) 2017-12-29 2018-10-19 行列乗算器

Country Status (6)

Country Link
US (1) US20200334322A1 (ja)
EP (1) EP3726399A4 (ja)
JP (1) JP2021508125A (ja)
KR (1) KR20200098684A (ja)
CN (2) CN111859273A (ja)
WO (1) WO2019128404A1 (ja)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112446007A (zh) * 2019-08-29 2021-03-05 上海华为技术有限公司 一种矩阵运算方法、运算装置以及处理器
CN112579042A (zh) * 2019-09-29 2021-03-30 北京希姆计算科技有限公司 计算装置及方法、芯片、电子设备及计算机可读存储介质
WO2021081854A1 (zh) * 2019-10-30 2021-05-06 华为技术有限公司 一种卷积运算电路和卷积运算方法
CN111079081B (zh) * 2019-12-16 2021-02-12 海光信息技术股份有限公司 一种矩阵乘法器、数据处理方法、集成电路器件及处理器
CN111176582A (zh) * 2019-12-31 2020-05-19 北京百度网讯科技有限公司 矩阵存储方法、矩阵访问方法、装置和电子设备
CN113032723B (zh) * 2021-05-25 2021-08-10 广东省新一代通信与网络创新研究院 一种矩阵乘法器的实现方法及矩阵乘法器装置

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE4036455C1 (ja) * 1990-11-15 1992-04-02 Siemens Ag, 8000 Muenchen, De
CN100465876C (zh) * 2007-07-12 2009-03-04 浙江大学 基于单fpga的矩阵乘法器装置
CN103902509A (zh) * 2014-04-23 2014-07-02 荣成市鼎通电子信息科技有限公司 Wpan中全并行输入的循环左移准循环矩阵乘法器
CN104346318B (zh) * 2014-10-15 2017-03-15 中国人民解放军国防科学技术大学 面向通用多核dsp的矩阵乘加速方法
CN105589677A (zh) * 2014-11-17 2016-05-18 沈阳高精数控智能技术股份有限公司 一种基于fpga的脉动结构矩阵乘法器及其实现方法
CN104636316B (zh) * 2015-02-06 2018-01-12 中国人民解放军国防科学技术大学 面向gpdsp的大规模矩阵乘法计算的方法
CN104899182B (zh) * 2015-06-09 2017-10-31 中国人民解放军国防科学技术大学 一种支持可变分块的矩阵乘加速方法
CN109240746B (zh) * 2016-04-26 2020-12-18 安徽寒武纪信息科技有限公司 一种用于执行矩阵乘运算的装置和方法
CN106445471B (zh) * 2016-10-13 2018-06-01 北京百度网讯科技有限公司 处理器和用于在处理器上执行矩阵乘运算的方法

Also Published As

Publication number Publication date
EP3726399A1 (en) 2020-10-21
EP3726399A4 (en) 2021-02-17
CN111859273A (zh) 2020-10-30
KR20200098684A (ko) 2020-08-20
US20200334322A1 (en) 2020-10-22
WO2019128404A1 (zh) 2019-07-04
CN109992743A (zh) 2019-07-09
CN109992743B (zh) 2020-06-16

Similar Documents

Publication Publication Date Title
JP2021508125A (ja) 行列乗算器
US10140251B2 (en) Processor and method for executing matrix multiplication operation on processor
WO2017185389A1 (zh) 一种用于执行矩阵乘运算的装置和方法
CN104899182B (zh) 一种支持可变分块的矩阵乘加速方法
US9886377B2 (en) Pipelined convolutional operations for processing clusters
US10324730B2 (en) Memory shuffle engine for efficient work execution in a parallel computing system
US10942986B2 (en) Hardware implementation of convolutional layer of deep neural network
JP2013512511A (ja) 複数メモリ特定用途向けデジタル信号プロセッサ
US10521225B2 (en) Matrix multiplication at memory bandwidth
US10768894B2 (en) Processor, information processing apparatus and operation method for processor
JP2020526830A (ja) 演算アクセラレータ
Hinrichs et al. A 1.3-GOPS parallel DSP for high-performance image-processing applications
EP3295300A1 (en) System and method for determining concurrency factors for dispatch size of parallel processor kernels
Ciobanu et al. Separable 2D convolution with polymorphic register files
WO2019205617A1 (zh) 一种矩阵乘法的计算方法及装置
Wang et al. A faster algorithm for enumerating connected convex subgraphs in acyclic digraphs
Moore et al. Custom Computing or Vector Processing?
Zhang et al. A cache structure and corresponding data access method for Winograd algorithm
RU124011U1 (ru) Параллельная потоковая вычислительная система
Liu et al. WinoCNN: Kernel Sharing Winograd Systolic Array for Efficient Convolutional Neural Network Acceleration on FPGAs
RU124000U1 (ru) Параллельная потоковая вычислительная система
Stankovic et al. Constant geometry algorithms for galois field expressions and their implementation on gpus
GB2582868A (en) Hardware implementation of convolution layer of deep neural network
CN111178492A (zh) 计算装置及相关产品、执行人工神经网络模型的计算方法
Calhoun et al. Acceleration of Generalized Minimum Aberration Designs of Hadamard Matrices on Graphics Processing Units

Legal Events

Date Code Title Description
A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20200805

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20200805