JP5408913B2 - 高速かつ効率的な行列乗算ハードウェアモジュール - Google Patents

高速かつ効率的な行列乗算ハードウェアモジュール Download PDF

Info

Publication number
JP5408913B2
JP5408913B2 JP2008174002A JP2008174002A JP5408913B2 JP 5408913 B2 JP5408913 B2 JP 5408913B2 JP 2008174002 A JP2008174002 A JP 2008174002A JP 2008174002 A JP2008174002 A JP 2008174002A JP 5408913 B2 JP5408913 B2 JP 5408913B2
Authority
JP
Japan
Prior art keywords
matrix
multiplier
adder
data element
data elements
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.)
Expired - Fee Related
Application number
JP2008174002A
Other languages
English (en)
Other versions
JP2009026308A (ja
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
Application filed by エクセリス インコーポレイテッド filed Critical エクセリス インコーポレイテッド
Publication of JP2009026308A publication Critical patent/JP2009026308A/ja
Application granted granted Critical
Publication of JP5408913B2 publication Critical patent/JP5408913B2/ja
Expired - Fee Related 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
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30105Register structure
    • G06F9/30109Register structure having multiple operands in a single register

Landscapes

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

Description

本発明は、行列乗算ハードウェアモジュールまたはコアに関し、さらに詳細には、行列乗算演算のステージの間に乗算されるデータ要素に基づいた、可変の数の乗算器−加算器の使用に関する。
行列乗算は、多くの科学的用途および工学的用途における必要な計算の演算である。例えば、ナビゲーションの用途および制御の用途は、多くの場合に、行列乗算を必要としており、時には、非常に大きな行列の乗算を必要とする。
行列乗算は、かなりの数の計算のリソースを必要とする。2つのNxNの行列を乗算するために、N*N*Nの乗算演算と、(N−1)*N*Nの加算演算とが必要とされる。全ての行列乗算の解は、分散されたデータまたは分散された演算のいずれかに依存する。しかしながら、これまでに知られている全ての行列乗算の解は、一定の数の利用可能な乗算器と加算器とが存在するという想定に基づいている。
行列乗算演算の一定の用途は、最少の計算と最少のリソースとを使用し、かつ、できる限り電力消費を抑えて迅速に結果を生成するために、リソースの効率性の高い使用を必要とする。かかる用途の例は、宇宙船、および限られた供給電力を有する他の器具である。
簡潔に述べると、行列乗算モジュールと行列乗算方法とが提供され、該行列乗算モジュールと行列乗算方法とは、計算プロセスにおける特定の時点またはステージにおける処理のために利用可能な、または必要とされる行列のデータ要素の量に基づいて、可変の数の乗算器−加算器ユニットを使用する。より多くのデータ要素が利用可能となるか、または必要とされるにつれ、より多くの乗算器−加算器ユニットが、必要な乗算および加算の演算を行うために使用される。
従って、行列乗算ハードウェアモジュールまたはデバイスが提供されており、該行列乗算ハードウェアモジュールまたはデバイスは、複数の乗算器−加算器ユニットを備えており、該複数の乗算器−加算器ユニットのそれぞれは、積の値を生成するために2つのデータ要素を乗算する乗算器回路と、結果値を生成するために積の値を被加数の値で加算する加算器回路とを備えている。乗算演算が第1の行列と第2の行列とにおいて実行されるときに使用される乗算器−加算器ユニットの数は、第1の行列のどの行に対応するどの計算ステージにおいて、乗算演算が実行されるかに依存して変化する。
同様に、第1の行列と第2の行列とを乗算するための方法が提供されており、該方法は、複数の乗算器−加算器ユニットを提供することであって、該複数の乗算器−加算器ユニットのそれぞれは、積の値を生成するために、第1の行列の1つのデータ要素を、第2の行列のデータ要素と乗算することが可能であり、かつ、結果値を生成するために、積の値を被加数の値と加算することが可能である、ことと、ある数の複数の乗算器−加算器ユニットを使用することであって、その数は、計算が、第1の行列の第1の行から第1の行列の残りの行へと進捗するにつれ増加する、こととを包含する。
本発明はさらに以下の手段を提供する。
(項目1)
複数の乗算器−加算器ユニットを備えている行列乗算デバイスであって、該複数の乗算器−加算器ユニットのそれぞれが、積の値を生成するために2つのデータ要素を乗算する乗算器回路と、結果値を生成するために該積の値を被加数の値で加算する加算器回路とを備えており、乗算演算が第1の行列と第2の行列とにおいて実行されるときに使用される乗算器−加算器ユニットの数は、乗算演算が実行されているのが、第1の行列のどの行に対応するどの計算ステージであるかに依存して変化する、デバイス。
(項目2)
複数の格納ロケーションを備えている格納ユニットをさらに備えており、該格納ユニットは、第1の行列および第2の行列のデータ要素を格納し、該データ要素は、次の計算ステージにおける使用のための計算ステージの間に、上記乗算器−加算器ユニットに適用される、項目1に記載のデバイス。
(項目3)
第1のメモリおよび第2のメモリをさらに備えており、該第1のメモリは、上記第1の行列のデータ要素を格納し、該第2のメモリは、該第2の行列のデータ要素を格納する、項目2に記載のデバイス。
(項目4)
第1の入力ポート、および第2の入力ポート、上記第1のメモリと該第1の入力ポートとの間でデータを結合する第1のバス、ならびに上記第2のメモリと該第2の入力ポートとの間でデータを結合する第2のバスをさらに備えている、項目3に記載のデバイス。
(項目5)
各乗算器−加算器ユニットは、上記第1の行列のデータ要素を受信する第1の入力と、上記第2の行列のデータ要素を受信する第2の入力とを備えている、項目4に記載のデバイス。
(項目6)
上記第1の行列のj番目の行に対応するj番目の計算ステージの間、使用される乗算器−加算器ユニットの上記数は、該第1の行列の該j番目の行に関するデータ要素に、上記第2の行列のj番目の列と該第2の行列の全ての先行する列とに関するデータ要素を乗算するために、そして、該j番目の行に先行する、該第1の行列の全ての行に関するデータ要素に、該第2の行列の該j番目の列に関するデータ要素を乗算するために充分である、項目5に記載のデバイス。
(項目7)
上記j番目の計算ステージの間、上記第1の行列の上記j番目の行に関するデータ要素と、全ての先行する行に関するデータ要素とは、該j番目の計算ステージの後の計算ステージにおける使用のために、上記格納ユニットのそれぞれの格納ロケーションに格納される、項目6に記載のデバイス。
(項目8)
各計算ステージの間、使用される上記各乗算器−加算器ユニットは、上記第1の行列の行数と数が等しい複数のクロックサイクルの間、演算させられる、項目6に記載のデバイス。
(項目9)
上記各乗算器−加算器ユニットにおける上記加算器回路は、現在のクロックサイクルにおいて上記乗算器回路によって計算された上記積の値を、その計算ステージに対する先のクロックサイクルにおいて該加算器回路によって計算された上記結果値と加算する、項目8に記載のデバイス。
(項目10)
上記第1の行列の第1の行に対応する第1の計算ステージの間、単一の乗算器−加算器ユニットが、該第1の行列の第1の行のデータ要素を、上記第2の行列の第1の列のデータ要素と乗算するために使用される、項目5に記載のデバイス。
(項目11)
NxMのデータ要素を備えている第1の行列に、MxNのデータ要素備えている第2の行列を乗算するときには、計算ステージの連続の間に使用される乗算器−加算器ユニットの数は、{1,3,5,…2*N−1}となる、項目1に記載のデバイス。
(項目12)
第1の行列と第2の行列とを乗算する行列乗算ハードウェアのコアであって、
a.複数の乗算器−加算器ユニットであって、該複数の乗算器−加算器ユニットのそれぞれは、積の値を生成するために、該第1の行列からの第1のデータ要素に、該第2の行列からの第2のデータ要素を乗算し、結果値を生成するために、該積の値を被加数の値と加算し、該第1の行列と該第2の行列とを乗算するときに使用される乗算器−加算器ユニットの数は、計算が、該第1の行列の第1の行から該第1の行列の残りの行へと進捗するにつれ増加する、複数の乗算器−加算器ユニットと、
b.複数のレジスタを備えている格納ユニットであって、該複数のレジスタは、乗算器−加算器ユニットへの入力としての連続する供給のために、該第1の行列の1つ以上の行に関するデータ要素と、該第2の行列の1つ以上の列に関するデータ要素とを格納する、格納ユニットと
を備えている、行列乗算ハードウェアのコア。
(項目13)
上記第1の行列のj番目の行に対応するj番目の計算ステージの間、使用される乗算器−加算器ユニットの上記数は、該第1の行列の該j番目の行に関するデータ要素に、上記第2の行列のj番目の列と該第2の行列の全ての先行する列とに関するデータ要素を乗算するために、そして、該j番目の行に先行する、該第1の行列の全ての行に関するデータ要素に、該第2の行列の該j番目の列に関するデータ要素を乗算するために充分である、項目12に記載のデバイス。
(項目14)
上記j番目の計算ステージの間、上記第1の行列の上記j番目の行に関するデータ要素と、全ての先行する行に関するデータ要素とは、該j番目の計算ステージの後の計算ステージにおける使用のために、上記格納ユニットのそれぞれの格納ロケーションに格納される、項目13に記載のデバイス。
(項目15)
各計算ステージの間、使用される上記各乗算器−加算器ユニットは、上記第1の行列の行数と数が等しい複数のクロックサイクルの間、演算させられる、項目13に記載のデバイス。
(項目16)
上記各乗算器−加算器ユニットは、加算器回路を備えており、該加算器回路は、現在のクロックサイクルにおいて上記乗算器回路によって計算された上記積の値を、その計算ステージに対する先のクロックサイクルにおいて該加算器回路によって計算された上記結果値と加算する、項目15に記載のデバイス。
(項目17)
上記第1の行列が、NxMのデータ要素を備え、上記第2の行列が、MxNのデータ要素を備えているときには、計算ステージの進行の間に使用される乗算器−加算器ユニットの数は、{1,3,5,…2*N−1}となる、項目12に記載のデバイス。
(項目18)
第1の行列と第2の行列とを乗算する方法であって、
a.複数の乗算器−加算器ユニットを提供することであって、該複数の乗算器−加算器ユニットのそれぞれは、積の値を生成するために、該第1の行列の1つのデータ要素に、該第2の行列のデータ要素を乗算することが可能であり、かつ、結果値を生成するために、該積の値を被加数の値と加算することが可能である、ことと、
b.ある数の該複数の乗算器−加算器ユニットを使用することであって、該数は、計算が、該第1の行列の第1の行から該第1の行列の残りの行へと進捗するにつれ増加する、ことと、
を包含する、方法。
(項目19)
上記(b)使用することは、第1の行列のj番目の行に対応するj番目の計算ステージの間、ある数の乗算器−加算器ユニットを使用することであって、該数は、該第1の行列の該j番目の行に関するデータ要素に、上記第2の行列のj番目の列と該第2の行列の全ての先行する列とに関するデータ要素を乗算するために、そして、該j番目の行に先行する、該第1の行列の全ての行に関するデータ要素に、該第2の行列の該j番目の列に関するデータ要素を乗算するために充分である、項目18に記載の方法。
(項目20)
上記j番目の計算ステージの間、該j番目の計算ステージの後の計算ステージにおける使用のために、それぞれの格納ロケーションに、上記第1の行列の上記j番目の行に関するデータ要素と、全ての先行する行に関するデータ要素とを格納することをさらに包含する、項目19に記載の方法。
(項目21)
各計算ステージの間、上記第1の行列の行数と数が等しい複数のクロックサイクルの間に、上記各乗算器−加算器ユニットに演算させることをさらに包含する、項目19に記載の方法。
(項目22)
現在のクロックサイクルにおいて乗算器−加算器ユニットによって計算された上記積の値を、先のクロックサイクルにおいて該乗算器−加算器ユニットによって計算された結果によって計算された上記結果値と加算することをさらに包含する、項目21に記載の方法。
(項目23)
上記第1の行列が、NxMのデータ要素を備え、上記第2の行列が、MxNのデータ要素を備えているときには、使用することは、数列{1,3,5,…2*N−1}に従った計算ステージの連続の間に上記数の乗算器−加算器ユニットを使用することを包含する、項目18に記載の方法。
(摘要)
行列乗算モジュールと行列乗算方法とが提供され、該行列乗算モジュールと行列乗算方法とは、計算プロセスにおける特定の時点またはステージにおける処理のために利用可能な、または必要とされる行列のデータ要素の量に基づいて、可変の数の乗算器−加算器ユニットを使用する。より多くのデータ要素が利用可能となるか、または必要とされるにつれ、より多くの乗算器−加算器ユニットが、必要な乗算および加算の演算を行うために使用される。NxMの行列にMxNの行列を乗算するために、使用されるMACユニットの総(最大)数は、「2*N−1」となる。使用されるMACユニットの数は、一(1)つから始まり、各計算ステージにおいて、すなわち、第1の行列の各新たな行に関するデータ要素の読み取りの開始時において、2つのユニットずつ増加する。MACユニットの数の数列は、計算ステージに対して{1,3,5,…2*N−1}となり、計算ステージのそれぞれは、第1の行列とも呼ばれる左側の行列の各新たな行に関するデータ要素の読み取りに対応する。2つの8x8の行列の乗算に関して、性能は、クロックサイクル毎に16個の浮動小数点演算となる。100MHzで走るFPGAに関して、性能は、毎秒1.6ギガの浮動小数点演算となる。FPGAが許すときには、性能は、クロック周波数の増加およびより大規模な行列の使用と共に増加する。非常に大規模の行列は、FRGAのリソースに適合するようにより小さいブロックに分割される。部分行列の乗算からの結果が、大規模な行列の最終的な結果を形成するように組み合わせられる。
本発明に従って、(「コア」とも呼ばれる)行列乗算ハードウェアモジュールが提供され、該行列乗算ハードウェアモジュールは、処理のために利用可能なデータ要素の数に基づいて、可変の数の乗算器−加算器(MAC)ユニットを使用する。2つの行列の乗算の間に使用されるMACユニットの数は、行列の計算のステージに依存して時と共に変化する。一実施形態において、MACユニットの数は、2つの行列の計算の間、時と共に増加する。
使用されるMACユニットの総(最大)数は、乗算される行列のサイズに基づいている。行列の特定のサイズに対して、使用されるMACユニットの数は、2つの行列の計算セッションの間のデータの利用可能性に従って増加する。例えば、各行列から第1の成分を読み取るときには、1つのMACユニットだけが、乗算/加算の演算を行うために必要とされる。計算が行列を介して進捗するにつれ、読み取られるデータが多くなれば多くなるほど、より多くのMACユニットが、乗算/加算の演算を行うために使用される。従って、一実施形態において、行列乗算モジュールは、動的に増加する数のMACユニットを有する。
まず、図1を参照すると、行列乗算ハードウェアモジュールが、参照番号10で示されている。行列乗算ハードウェアモジュール10は、複数のMACユニット20(1)〜20(N)と、以下ではレジスタのアレイ(RA)30と呼ばれるデュアルポートのレジスタのアレイ30とを備えている。第1のメモリバンク40と、第2のメモリバンク50と、第1のバス60と、第2のバス70とが存在し、該第1のバス60と該第2のバス70とは、モジュール10にデータを供給し、かつ、モジュール10からデータを供給される。各メモリバンク40および50は、乗算される2つの入力行列のうちの1つに割り当てられている。別々のデータバス60および70は、モジュール10によって同時に読み取られ得る。このアーキテクチャに関して、各入力行列から1つのデータ要素を同時に読み取ることが可能である。出力結果は、いずれかのメモリバンクにセーブされ得る。メモリバンク40は、バス60に接続されており、メモリバンク50は、バス70に接続されている。モジュール10は、第1の入力ポート(In0)80と第2の入力ポート(In1)90とをそれぞれ備え、かつ、出力ポート(Out)95を備えている。バス60は、第1の入力ポート80に接続しており、バス70は、第2の入力ポート90に接続している。行列乗算モジュールの出力ポート95は、バス60またはバス70のいずれかに接続され得る。
図1において参照番号100で示されたボックスは、ボックス100の中のコンポーネントが、任意のプログラム可能なまたは固定の論理技術、例えば、フィールドプログラム可能なゲートのアレイ(FPGA)、アプリケーション固有の集積回路(ASIC)、再構成可能な固定論理回路、プログラム可能な計算構造などに実装され得るということを示すために提供される。乗算される第1の行列と第2の行列とに関するデータ要素は、コンフィギュレーションレジスタ110によって、要求デバイスまたは要求ソフトウェアから受信される。コンフィギュレーションレジスタ110は、第1の行列および第2の行列の大きさに従って行列乗算ハードウェアモジュール10を構成する。
図2を参照すると、MACユニット20(i)のポートが記述されている。MACユニット20(i)は、乗算器回路22と加算器回路24とを備えている。乗算器回路の出力25は、加算器回路の1つの入力に接続されている。合計(SUMM)ポート28が、加算回路24の別の入力に接続される。以下で記述されるように、SUMMポート28は、加算器回路24によって生成され、かつ、出力25に供給された、先の計算サイクルにおいて計算された結果値から被加数の値を受信する。2つの入力ポート(P0)26と入力ポート(P1)27とがそれぞれ存在しており、該2つの入力ポート(P0)26と入力ポート(P1)27とは、乗算される2つのデータ要素をMACユニット20(i)に供給する。入力ポート26は、第1の入力80に接続されており、該第1の入力80は、次に、第1のバス60に接続されており、該第1のバス60から、第1の行列のデータ要素が獲得される。同様に、入力ポート27は、第2の入力90に接続されており、該第2の入力90は、次に、第2のバス70に接続し、該第2のバス70から、第2の行列のデータ要素が獲得される。このようにして、2つの行列が乗算されたときには、各MACユニットは、第1の行列のデータ要素と第2の行列のデータ要素とを受信する。SUMMポート28は、第3の入力ポートであり、演算においては、SUMMポート28は、別のMACユニットからデータを受信する。MACユニット20(i)の出力ポート29は、結果(RES)データを含み、該結果(RES)データは、SUMMポートにおけるデータと乗算器22における出力25におけるデータとの合計である。
ここで、図3に参照が行われ、図3においては、レジスタのアレイ(RA)30が、さらに詳細に示されている。RA30は、ずらりと並んだ(複数の)レジスタを備えているレジスタのアレイのブロックのタイプであり、該レジスタは、1つのポートを経由して書き込まれ得、かつ、別のポートを経由して読み取られ得る。RA30は、「レジスタ#0」〜「レジスタ#N−1」と示される「N」個のレジスタ32(0)〜32(N−1)を備えている。各レジスタのセルは、乗算される行列のデータ要素を表すために必要とされるビット数と等しい数のビットを備えている。
読み取られるか、または書き込まれる、アレイ内の特定のレジスタを示すために、レジスタのポインタ(Register_Ptr)33が使用される。入力データバス(Data_In)34は、レジスタのアレイ内のレジスタのうちの任意のものに書き込むために使用されるバスである。出力データバス(Data_Out)35は、レジスタのアレイ内のレジスタのうちの任意のものから読み取るために使用されるバスである。書き込み入力信号(Write)36は、レジスタのアレイ内のレジスタのうちの任意のものに入力データの書き込み動作の信号を送信するために使用される。読み取り入力信号(Read)37は、レジスタのアレイ内のレジスタのうちの任意のものからの出力データの読み取り動作の信号を送信するために使用される。
このように、RA30は、複数の格納ロケーションを備えている格納ユニットであり、格納ロケーションのそれぞれが、次の計算ステージ(実際には、いくつかの次の計算ステージ)における使用のために、1つの計算ステージの間に、MACユニットに供給される第1の行列の行からのデータ要素と第2の行列の列からのデータ要素とを格納する。デュアルポートのブロックのRAMまたはデュアルポートのメモリチップのような、デュアルポートの格納ロケーションの任意のアレイが、RA30の機能に役立つように使用される。
上に示されたように、使用されるMACユニットの数は、乗算される行列のサイズに依存する。2つの単純な例が、行列乗算ハードウェアモジュール10の演算を例示するために提供される。乗算される2つの行列からデータを読み取る間に、全乗算演算が行われる。全ての被演算子データが読み取られるときまでには、積(2つの行列の乗算の結果)の準備ができる。これは、(図1に示されているように)2つの独立したメモリバンクが存在し、各入力行列が対応するメモリバンクに格納され、それにより2つの成分、すなわち、対応するメモリバンクに格納された各行列からの成分が、同時に読み取られ得ることを想定する。さらに、2つの行列を乗算することと関連付けられる演算ステージの数は、第1の行列における行の数に依存しており、かつ、実際には、第1の行列における行の数と等しい。
例えば、第1の行列「m1」に関するデータがメモリバンク40に格納され、第2の行列「m2」に関するデータがメモリバンク50に格納されている。行列m1x行列m2の乗算の結果が、メモリバンク40内の行列「m3」に格納される。行列m1からのデータは、入力ポート80を介して、一度に1つの成分を読み取られる。行列m2からのデータは、入力ポート90を介して、一度に1つの成分を読み取られる。行列乗算ハードウェアモジュール10は、2つのメモリバンク40および50からデータを読み取りながら、行列乗算プロセスを行う。行列乗算モジュールが、2つの入力行列m1およびm2のデータ要素を読み取ることを終えるときまでには、出力結果は、出力ポート95において、行列m3としてメモリバンク40に格納される準備が整う。
バスの幅に関しては制限がない。唯一の制限は、モジュール10を実装するために選択される論理技術おいて利用可能なリソースである。
ここで、行列乗算ハードウェアモジュール10の演算が、図4〜図7を参照してさらに詳細に記述される。図4に示されているように、この例においては、行列Aと行列Bとの計算における各行列は、2x2の行列である。計算AxBからの結果の行列は、行列Cとして格納される。
結果の行列の成分は、
C1=A1*B1+A2*B2
C2=A1*B3+A2*B4
C3=A3*B1+A4*B2
C4=A3*B3+A4*B4
となるべきである。
行列乗算ハードウェアモジュール10において、2つの入力行列がメモリに格納され、それにより乗算される2つの入力行列のうちの第1の行列(すなわち、左側の行列、この例においては行列A)が、メモリバンク40に「列方向」に格納され、第2の行列(この例においては行列B)が、メモリバンク50に「行方向」に格納される。図5に示されているように、これは、第1の行列(行列A)のデータ要素が、次の順次:
A1→A2→A3→A4
で逐次的にメモリから読み取られることを意味する。
第2の行列(行列B)のデータ要素は、次の順序:
B1→B2→B3→B4
で逐次的にメモリから読み取られる。
さらに詳細には、図5に示されているように、2x2の行列乗算演算に関する入力データの流れは、次の通りである。第1のクロックサイクルにおいて、データ要素A1およびB1が、入力ポート80および90のそれぞれに存在する。次のクロックサイクルにおいて、データ要素A2およびB2が、それぞれ入力80および90のそれぞれに存在する。次のクロックサイクルにおいて、データ要素A3およびB3が、それぞれ入力80および90のそれぞれに存在する。最後のクロックサイクルにおいて、データ要素A4およびB4が、入力80および90のそれぞれに存在する。
2x2の行列乗算の場合において、計算は、行列Aに対して2つの計算ステージに分割される。行列Aの第1の行が読み取られるときの第1の計算ステージの間、行列乗算モジュール10は、単一のMACユニットだけを使用する。行列Aの第2の行が読み取られるときの第2の計算ステージの間、行列乗算モジュールは、3つのMACユニットを使用する。
ここで、クロックサイクルごとのベースで行列乗算モジュールの演算の詳細な説明に関して、図6、図7A、図7B、図8、図9A、図9B、図10A、図10B、図11Aおよび図11Bに参照が行われる。図6、図7Aおよび図7Bは、単一のMACユニットが使用されているときの第1のクロックサイクルおよび第2のクロックサイクルの間の演算を例示する。この例において、単一のMACユニットを使用する、第1のクロックサイクルおよび第2のクロックサイクルが、第1の演算ステージである。図8、図9A、図9B、図10A、図10B、図11Aおよび図11Bは、3つのMACユニットが使用されるときの(第2の計算ステージを構成する)第3のクロックサイクルおよび第4のクロックサイクルの間の演算を例示する。このようにして、最大で3つのMACユニットが、2つの2x2の行列を乗算するときのいかなるときにおいても使用され、全行列乗算演算は、4クロックサイクルの時間間隔の間、継続し、2つの計算ステージが存在しており、2つの計算ステージのうちのそれぞれが、2つのクロックサイクルを含む。
最初の2つのクロックサイクルの間、データは、第1のMACユニット20(1)の入力に適用される。特に、図6を続けて参照すると共に、図7Aに示されているように、第1のクロックサイクルの間、データ要素A1およびB1は、メモリ(図1に示されているように、それぞれメモリバンク40および50)から読み取られ、第1のMACユニット20(1)の入力ポート26および27のそれぞれに適用される。同時に、データ要素A1およびB1は、第2の計算ステージの間の使用のために、入力データ要素A1およびB1のそれぞれの遅延バージョンA1qおよびB1qを生成するために、RA30のそれぞれの格納ロケーションに適用される。
図6を続けて参照すると共に、図7Bに示されているように、第2のクロックサイクルの間、データ要素A2およびB2が、メモリから読み取られ、MACユニット20(1)の入力ポート26および27のそれぞれに適用され、同時に、第2の計算ステージの間の使用のために、それぞれのデータ要素の遅延バージョンA2qおよびB2qを生成するために、RA30のそれぞれの格納ロケーションに適用される。第2のクロックサイクルの間、SUMMポート28における入力は、第1のクロックサイクルの終了時のA1*B1の乗算結果からの結果として受け取られる。このようにして、第1のクロックサイクルの終了時におけるポート29における出力は、第2のクロックサイクルの間に行われる計算の準備をするために、SUMMポート28にループバックさせる。データ要素A2およびB2は、入力ポート26および27のそれぞれに供給され、それによりMACユニット20(1)における乗算器回路が、A2*B2を計算し、MACユニット20(1)における加算器回路が、SUMM入力ポート28において、A2*B2の結果をA1*B1に加算する。A1*B1+A2*B2の最終的な結果が、出力ポート29に提供される。
このようにして、第2のクロック信号の後の、MACユニット20(1)の出力は、結果の行列Cのデータ要素C1である。A1=A1q、A2=A2q、B1=B1q、およびB2=B2qであるということが理解されるべきである。
図8、図9A、図9B、図10A、図10B、図11Aおよび図11Bを参照すると、第3のクロックサイクルと第4のクロックサイクルとを備えている第2の計算ステージの間の演算が記述される。さらに2つのMACユニット20(2)および20(3)が、第3のクロックサイクルの間と第4のクロックサイクルの間とに使用される。図9A、図10Aおよび図11Aは、第3のクロックサイクルの間の、3つのMACユニット20(1)、20(2)および20(3)の演算を例示し、図9B、図10Bおよび図11Bは、第4のクロックサイクルの間の、3つのMACユニット20(1)、20(2)および20(3)の演算を例示する。データ要素A3およびB3は、メモリから読み取られ、図8および図9Aに示されているように、第1のMACユニット20(1)の入力26および27のそれぞれに適用される。図8および図10Aに示されるように、データ要素A1qが、RA30から読み取られ、第2のMACユニット20(2)の入力26に適用され、データ要素B3が、メモリから読み取られ、MACユニット20(2)の入力27に適用される。最後に、図8および図11Aに示されているように、第3のクロックサイクルの間、データ要素A3が、メモリから読み取られ、第3のMACユニット20(3)の入力26に適用され、データ要素B1qが、RA30から読み取られ、第3のMACユニット20(3)の入力27に適用される。このようにして、第3のクロックサイクルの間、MACユニット20(1)は、A3*B3を計算し、MACユニット20(2)は、A1q*B3を計算し、MACユニット20(3)は、A3*B1qを計算する。
図8および図9Bを参照すると、第4のクロックサイクルの間、データ要素A4およびB4が、メモリから読み取られ、MACユニット20(1)の入力26および27のそれぞれに適用される。さらに、第3のクロックサイクルの間にMACユニット20(1)によって計算されたA3*B3の結果は、第4のクロックサイクルの開始時に、MACユニット20(1)のSUMM入力ポートにループバックされる。このようにして、第4のクロックサイクルの間、MACユニット20(1)は、A4*B4を計算し、A4*B4をA3*B3に加算する。第4のクロックサイクルの終了時におけるMACユニット20(1)の結果の出力は、結果の行列Cのデータ要素C4に対応する。
図8および図10Bを参照すると、第4のクロックサイクルの間、データ要素A2qが、DPR30から読み取られ、MACユニット20(2)の入力26に適用され、データ要素B4は、MACユニット20(2)の入力27に適用される。第3のクロックサイクルの間にMACユニット20(2)によって計算されたA1*B3の結果は、第4のクロックサイクルの開始時に、MACユニット20(2)のSUMM入力ポートにループバックされる。このようにして、第4のクロックサイクルの間、MACユニット20(2)は、A2*B4を計算し、A2*B4をA1*B3に加算し、そうする際に、その結果の出力時の出力は、結果の行列Cのデータ要素C2を出力する。
最後に、図8および図11Bを参照すると、第4のクロックサイクルの間、データ要素A3が、MACユニット20(3)の入力26に適用され、データ要素B2qは、RA30から読み取られ、MACユニット20(3)の入力27に適用される。第3のクロックサイクルの間にMACユニット20(3)によって計算されたA3*B1の結果は、第4のクロックサイクルの開始時に、MACユニット20(3)のSUMM入力ポートにループバックされる。続けて、第4のクロックサイクルの間、MACユニット20(3)は、A4*B2を計算し、その結果をA3*B1と加算することにより、その出力時に、結果の行列Cに関するデータ要素C3を生成する。
図6、図7Aおよび図7Bから注目すべきことは、行列Aの2つの行に関するデータ要素を読み取るときには、同じMACユニット、すなわち、MACユニット20(1)が使用されることである。従って、MACユニット20(1)が、4クロックサイクルの間、使用され、MACユニット20(2)は、2クロックサイクルの間、使用され、そしてMACユニット20(3)は、2クロックサイクルの間、使用される。各MACユニットに対するSUMM入力ポートは、第1の行列、すなわち、行列Aから読み取られる(データ要素の新たな行に対応する)各計算ステージの開始時に0にリセットされる。
同じ概念が、2つの4x4の行列を乗算する例に適用される。図12は、2つの4x4の行列を例示する。図13A、図13B、図13Cおよび図13Dは、図12に示された行列AおよびBを乗算するための乗算演算の詳細を示す。演算は、16個のクロックサイクルを必要し、7個だけのMACユニットを使用する。図13Aは、第1の計算ステージであり、図13Bは、第2の計算ステージであり、図13Cは、第3の計算ステージであり、そして図13Dは、第4の計算ステージである。図13A〜図13Dに示された計算ステージのそれぞれは、各MACユニットに関する4つのデータ要素のスタックによって示されているように、4クロックサイクル継続する。
動作の間、図13Aに示されているように、行列Aの第1の行を読み取るときに、1つのMACユニットが使用される。図13Bに示されているように、行列Aの第2の行を読み取るときには、2つの追加のMACユニットが使用され、合計で3つのMACユニットとなる。行列Aの第3の行から読み取るときには、さらに2つのMACユニットが使用され、合計で5つのMACユニットとなることを、図3は示す。最後に、図13Dに示されているように、行列Aの第4の行から読み取るときには、合計で7つのMACユニットが使用される。「ループバック」演算を行うことが図13A〜図13Dに示されていなくても、図12および図13A〜図13Dの4x4の行列乗算の例に示された各MACユニットは、各MACユニットの出力からSUMM入力への「ループバック」演算を行うことが、上に記述した2x2の行列乗算の例から理解されるべきである。例えば、第1の計算ステージの間、第2のクロックサイクルにおいて、MACユニット20(1)は、第1のクロックサイクルの間に計算され、かつ、(図13Aには示されていないが)MACユニット20(1)のSUMM入力にループバックされたA1*B1を、第2のクロックサイクルの間に計算されたA2*B2に加算する。さらに、A1*B1+A2*B2の加算は、MACユニット20(1)のSUMM入力にループバックされ、それにより第3のクロックサイクルの間、MACユニット20(1)は、A3*B3を計算し、A3*B3の積の値をA1*B1+A2*B2に加算する。最後に、図13Aに示された第1の計算ステージの第4のクロックサイクルの間、MACユニット20(1)は、A4*B4を計算し、A4*B4の積の値を、第3のクロックサイクルの終了時にMACユニット20(1)のSUMM入力にループバックされたA1*B1+A2*B2+A3*B3の値に加算する。このようにして、図12に示された行列の乗算に関する結果の行列Cの第1の成分C1が、MACユニット20(1)によって、4クロックサイクルで計算される。同様なループバック加算機能が、図13B、図13Cおよび図13Dのそれぞれによって表された第2、第3および第4の計算ステージにおいて、MACユニットのそれぞれによって行われる。さらに、1つの計算ステージの間に、メモリから読み取られ、かつ、MACユニットに供給された、AおよびBの行列に関するデータ要素は、2x2の行列計算の例において上に記述されたものとほぼ同じ方法で、次の計算ステージの間での使用のためにRAに書き込まれる。
第1の行列の第1の行に対応する第1の計算の間、単一のMACユニットが、第1の行列の第1の行のデータ要素を第2の行列の第1の列のデータ要素と乗算するために使用される。行列の第1の行は、行列の一番上の行である必要はなく、行列の第1の列は、行列の一番左の列である必要はないことが理解されるべきである。概して、MACユニットの総(最大)数は、左側の行列の行の総数に依存する。NxMの行列にMxNの行列を乗算するために、使用されるMACユニットの総(最大)数は、「2*N−1」となる。使用されるMACユニットの数は、第1の計算ステージ(左の行列の第1の行)の間、一(1)つから始まり、各次の計算ステージ(左の行列の各次の行)において2つのユニットずつ増加する。MACユニットの数の数列は、計算ステージに対して{1,3,5,…2*N−1}となり、ここでもやはり、各計算ステージは、第1の行列とも呼ばれる左側の行列の各新たな行に関するデータ要素の読み取りに対応する。第1の行列のj番目の行に対応するj番目計算ステージの間、使用される乗算器−加算器ユニットの数が、(i)第1の行列のj番目の行に関するデータ要素を、j番目の列に関するデータ要素で乗算するために、そして(ii)j番目の行に先行する、第1の行列の全ての行に関するデータ要素を、第2の行列のj番目の列に関するデータ要素で乗算するために必要とされる量に制限されるように、行列乗算モジュール10は演算する。さらに、j番目の計算ステージの間、第1の行列のj番目の行に関するデータ要素と、全ての先行する行に関するデータ要素とは、j番目の計算ステージの後の計算ステージにおける使用のために、格納ユニットのそれぞれの格納ロケーションに格納される。またさらに、各計算ステージの間、使用される各MACユニットは、第1の行列の行数と数が等しい複数のクロックサイクルの間、演算させられる。各MACユニットにおける加算器回路は、現在のクロックサイクルにおいて乗算器回路によって計算された積の値を、その計算ステージに対する先のクロックサイクルにおいて加算器回路によって計算された結果値と加算する。加算が、計算ステージの開始時(第1のクロックサイクル)である場合には、各MACユニットに対するSUMM入力が0にリセットされる。
行列乗算モジュール10は、拡大縮小が可能であり、大規模な行列での使用に適合され得る。例えば、モジュール10が比較的大規模なFPGAに実装される場合には、モジュール10は、16x16または32x32の行列を乗算するために使用され得る。行列乗算モジュール10は、(300万個のゲートのFPGAチップのフォームファクタの)Xilinx Vertix2 FPGAを用いて構築された。2つの8x8の行列の乗算に関して、クロックサイクル毎に16回の浮動小数点演算のピーク性能が達成された。100MHzでFPGAを走られると、毎秒1.6ギガの浮動小数点演算(GFLOPS/sec)のピーク性能が獲得され得る。このようにして、16x16または32x32の行列を乗算することが、100MHzの速度において、それぞれ32および64GFLOPS/secで実行される。概して、性能は、クロック毎に2*N回の浮動小数点演算に等しく、ここで、Nは、第1(左側)の行列の列の数には関係なく、第1(左側)の行列の行の数となる。
本明細書において記述された行列乗算の例は、正方行列を含む。しかしながら、同じ概念が、非正方行列に適用され得る。性能は、左側の行列の数に基づいている。従って、同じ概念が、16または32に等しい行数を有する左側の行列に適用されることにより、100MHzのクロックでそれぞれ走る、3.2または6.4GFLOPS/secの性能を与え得る。性能は、より速いクロック周波数を使用すると増加する。
上に記述された行列乗算モジュールは、非正方行列を乗算するために使用され得る。4xNの行列とNx4の行列とを乗算することは、2つの4x4の行列を乗算する例と同様である。唯一の違いは、Nクロックサイクルが、第1(左側)の行列の行を読み取るために必要とされる。しかしながら、性能は、上に記述された行列乗算モジュールと同じであり、第1の行列が、4行を有する場合には、クロックサイクル毎に8回の浮動小数点演算であり、第1の行列が、8行を有する場合には、クロックサイクル毎に16回の浮動小数点演算である。
非常に大規模な行列の場合において、FPGAチップのリソースは、1つのブロックにおける乗算プロセスを処理するために充分ではないことがあり得る。この場合、行列は、より小さなブロックに分割され得、それにより各ブロックがFPGAのリソースに適合し得る。行列乗算演算は、ブロック毎に実行され、次に、個々のブロックの乗算結果が、結果の行列を形成するために組み合わせられる。
しかしながら、行列乗算モジュール10は、32ビットの単精度浮動小数点データおよび64ビットの倍精度浮動小数点データのような様々なデータのタイプを使用して、2つの行列を乗算するために利用され得る。さらに、モジュール10は、使用されるメモリバンクの幅に基づいて、32ビットまたは64ビットの整数または固定少数点のデータを使用して演算し得る。さらにまた、任意の非標準的なデータのタイプが使用され得る。
RA30のレジスタのアレイは、上で述べられたように、次のクロックサイクルの間の使用ためにデータ要素をバッファリングするときには、データ要素のうちの少なくとも2つの行(各入力行列から1行)を格納するために充分な深さであることを必要とする。そうでなければ、レジスタのアレイのサイズが、設計者に委ねられる。
本明細書に記述されたシステムおよび方法は、本発明の精神または重要な特性を逸脱することなく、他の特定の形式で体現され得る。従って、上記の実施形態は、あらゆる局面において例示と考えられ、限定することを意味していない。
図1は、本発明の実施形態に従った行列乗算ハードウェアモジュールのブロック図である。 図2は、本発明の実施形態に従った行列乗算ハードウェアモジュールにおいて使用される乗算器−加算器ユニットのブロック図である。 図3は、本発明の実施形態に従った行列乗算ハードウェアモジュールの一部分を形成するデュアルポートのレジスタのアレイのブロック図である。 図4は、本発明に従った行列乗算モジュールによって乗算される2つの2x2の行列の成分を例示している図である。 図5は、本発明の実施形態に従った、図4に示された2つの行列の乗算に関する入力データの流れを例示する。 図6は、図4および図5に示された行列乗算の例における第1の乗算器−加算器ユニットの演算を例示する。 図7Aは、図6に描かれた第1のクロックサイクルの間の、第1の乗算器−加算器によって行われた計算を例示する図である。 図7Bは、図6に描かれた第2のクロックサイクルの間の、第1の乗算器−加算器によって行われた計算を例示する図である。 図8は、図4および図5に示された行列乗算の例における3つの乗算器−加算器ユニットの演算を例示する。 図9Aおよび図9Bは、図4および図5に示された行列乗算の例における連続的なクロックサイクルの間の、第1の乗算器−加算器ユニットの演算を例示する。 図9Aおよび図9Bは、図4および図5に示された行列乗算の例を用いた、連続的なクロックサイクルの間の、第1の乗算器−加算器ユニットの演算を例示する。 図10Aおよび図10Bは、図4および図5に示された行列乗算の例における連続的なクロックサイクルの間の、第2の乗算器−加算器ユニットの演算を例示する。 図10Aおよび図10Bは、図4および図5に示された行列乗算の例における連続的なクロックサイクルの間の、第2の乗算器−加算器ユニットの演算を例示する。 図11Aおよび図11Bは、図4および図5に示された行列乗算の例における連続的なクロックサイクルの間の、第3の乗算器−加算器ユニットの演算を例示する。 図11Aおよび図11Bは、図4および図5に示された行列乗算の例における連続的なクロックサイクルの間の、第3の乗算器−加算器ユニットの演算を例示する。 図12は、本発明に従った、行列乗算モジュールによって乗算された2つの4x4の行列の例を例示する。 図13Aは、図12に示された行列乗算の例の第1の計算ステージ間の、第1の乗算器−加算器ユニットの演算を例示する。 図13Bは、図12に示された行列乗算の例の第2の計算ステージ間の、3つの乗算器−加算器ユニットの演算を例示する。 図13Cは、図12に示された行列乗算の例の第3の計算ステージ間の、5つの乗算器−加算器ユニットの演算を例示する。 図13Dは、図12に示された行列乗算の例の第4の計算ステージ間の、7つの乗算器−加算器ユニットの演算を例示する。
符号の説明
10 行列乗算ハードウェアモジュール
20(1)〜20(N) MACユニット
30 レジスタのアレイ(RA)
40 第1のメモリバンク
50 第2のメモリバンク
60 第1のバス
70 第2のバス
80 第1の入力ポート
90 第2の入力ポート
100 ボックス
110 コンフィギュレーションレジスタ

Claims (13)

  1. 第1の行列と第2の行列との積を計算するための行列乗算デバイスであって、
    該第1の行列のデータ要素を格納するための第1のメモリと、該第2の行列のデータ要素を格納するための第2のメモリと、
    複数のクロックサイクルに従って作動される複数の乗算器−加算器ユニットであって、該複数の乗算器−加算器ユニットのそれぞれが、積の値を生成するために、該第1の行列の該データ要素からのデータ要素と、該第2の行列の該データ要素からのデータ要素とを乗算するように構成された乗算器回路と、結果値を生成するために、現在のクロックサイクルにおいて該乗算器回路により計算された該積の値を被加数の値で加算するように構成された加算器回路とを備えている、複数の乗算器−加算器ユニットと
    複数の格納ロケーションを備えている格納ユニットと
    を備えており、
    該複数の乗算器−加算器ユニットは、
    N個の計算ステージにおいて該第1の行列と該第2の行列との該乗算を実行することであって、Nは、該第1の行列の行数であり、Nは、1よりも大きい、ことと、
    1からNまでの各整数jに対して、j番目の計算ステージの間に、該第1のメモリからの該第1の行列のj番目の行のデータ要素と、該第2のメモリからの該第2の行列のj番目の列のデータ要素とを読み取ることと
    を行うように構成されており、
    1からNまでの各整数jに対して、j番目の計算ステージの間に、該格納ユニットが、該複数の乗算器−加算器ユニットが該j番目の計算ステージの後の計算ステージにおいて使用するために該第1の行列のj番目の行のデータ要素と該第2の行列のj番目の列のデータ要素とを格納し、
    該複数の乗算器−加算器ユニットは、
    該j番目の計算ステージの間に、該複数の乗算器−加算器ユニットのうちの2j−1個を使用して、該第1の行列の該j番目の行のデータ要素に、該第2の行列の該j番目の列のデータ要素と、該格納ユニットに格納された該j番目の列に先行する該第2の行列の各列のデータ要素とを乗算し、該格納ユニットに格納された該j番目の行に先行する該第1の行列の各行のデータ要素に、該第2の行列の該j番目の列のデータ要素を乗算するようにさらに構成されており、
    第1のクロックサイクルにおいて、該被加数の値は、ゼロに等しく、後続のクロックサイクルにおいて、該被加数の値は、その計算ステージに対する先のクロックサイクルにおいて該加算器回路により計算された結果値に等しい、デバイス。
  2. 1の入力ポートおよび第2の入力ポートと、前記第1のメモリと該第1の入力ポートとの間でデータを結合する第1のバスと、前記第2のメモリと該第2の入力ポートとの間でデータを結合する第2のバスとをさらに備えており、各乗算器−加算器ユニットは、該第1の入力ポートに接続された第1の入力と、該第2の入力ポートに接続された第2の入力とを備えている、請求項1に記載のデバイス。
  3. 前記第1の入力は、前記第1の行列のデータ要素を受信し、前記第2の入力は、前記第2の行列のデータ要素を受信する請求項に記載のデバイス。
  4. 前記j番目の計算ステージの間、それぞれの格納ロケーションが、前記第1の行列の前記j番目の行に関するデータ要素と、全ての先行する行に関するデータ要素と、前記第2の行列の前記j番目の列に関するデータ要素と、全ての先行する列に関するデータ要素とを格納し、前記格納ユニットのそれぞれの格納ロケーションは、それぞれの乗算器−加算器ユニットの前記第1の入力または前記第2の入力のいずれかに接続される、請求項に記載のデバイス。
  5. 前記複数のクロックサイクルは、前記第1の行列の行数と数が等しい請求項に記載のデバイス。
  6. 前記第1の行列の第1の行に対応する第1の計算ステージの間、単一の乗算器−加算器ユニットが、該第1の行列の第1の行のデータ要素を、前記第2の行列の第1の列のデータ要素と乗算するために使用される、請求項に記載のデバイス。
  7. 第1の行列と第2の行列とを乗算する行列乗算ハードウェアデバイスであって、
    該第1の行列のデータ要素を格納するための第1のメモリと、該第2の行列のデータ要素を格納するための第2のメモリと、
    複数のクロックサイクルに従って作動される複数の乗算器−加算器ユニットであって、該複数の乗算器−加算器ユニットのそれぞれは、積の値を生成するために、該第1の行列からの第1のデータ要素に、該第2の行列からの第2のデータ要素を乗算し、結果値を生成するために、現在のクロックサイクルにおいて該乗算器−加算器ユニットにより計算された該積の値を被加数の値と加算するように構成されている、複数の乗算器−加算器ユニットと、
    複数のレジスタを備えている格納ユニットであって、該複数のレジスタは、乗算器−加算器ユニットへの入力としての連続する供給のために、該第1の行列データ要素と、該第2の行列データ要素とを格納する、格納ユニットと
    を備えており、
    該複数の乗算器−加算器ユニットは、
    N個の計算ステージにおいて該第1の行列と該第2の行列との該乗算を実行することであって、Nは、該第1の行列の行数であり、Nは、1よりも大きい、ことと、
    1からNまでの各整数jに対して、j番目の計算ステージの間に、該第1のメモリからの該第1の行列のj番目の行のデータ要素と、該第2のメモリからの該第2の行列のj番目の列のデータ要素とを読み取ることと
    を行うように構成されており、
    1からNまでの各整数jに対して、j番目の計算ステージの間に、該格納ユニットが、該複数の乗算器−加算器ユニットが該j番目の計算ステージの後の計算ステージにおいて使用するために該第1の行列のj番目の行のデータ要素と該第2の行列のj番目の列のデータ要素とを格納し、
    該複数の乗算器−加算器ユニットは、
    該j番目の計算ステージの間に、該複数の乗算器−加算器ユニットのうちの2j−1個を使用して、該第1の行列の該j番目の行のデータ要素に、該第2の行列の該j番目の列のデータ要素と、該格納ユニットに格納された該j番目の列に先行する該第2の行列の各列のデータ要素とを乗算し、該格納ユニットに格納された該j番目の行に先行する該第1の行列の各行のデータ要素に、該第2の行列の該j番目の列のデータ要素を乗算するようにさらに構成されており、
    第1のクロックサイクルにおいて、該被加数の値は、ゼロに等しく、後続のクロックサイクルにおいて、該被加数の値は、その計算ステージに対する先のクロックサイクルにおいて該乗算器−加算器ユニットにより計算された結果値に等しい、デバイス。
  8. 前記j番目の計算ステージの間、前記第1の行列の前記j番目の行に関するデータ要素と、全ての先行する行に関するデータ要素と、前記第2の行列の前記j番目の列に関するデータ要素と、全ての先行する列に関するデータ要素とは、該j番目の計算ステージの後の計算ステージにおける使用のために、前記格納ユニットのそれぞれの格納ロケーションに格納される、請求項に記載のデバイス。
  9. 前記複数のクロックサイクルは、前記第1の行列の行数と数が等しい請求項に記載のデバイス。
  10. 各乗算器−加算器回路は、加算器回路を備えており、該加算器回路は、前記現在のクロックサイクルにおいて前記乗算器回路によって計算された前記積の値を、その計算ステージに対する先のクロックサイクルにおいて該加算器回路によって計算された前記結果値と加算する、請求項に記載のデバイス。
  11. 第1の行列と第2の行列とを乗算する方法であって、
    第1のメモリが、該第1の行列のデータ要素を格納し、第2のメモリが、該第2の行列のデータ要素を格納することと、
    複数のクロックサイクルに従って作動される複数の乗算器−加算器ユニットが、積の値を生成するために、該第1の行列の1つのデータ要素に、該第2の行列のデータ要素を乗算し、結果値を生成するために、現在のクロックサイクルにおいて該乗算器−加算器ユニットにより計算された該積の値を被加数の値と加算することと
    を包含し、
    該複数の乗算器−加算器ユニットは、N個の計算ステージにおいて該第1の行列と該第2の行列との該乗算を実行し、Nは、該第1の行列の行数であり、Nは、1よりも大きく、
    1からNまでの各整数jに対して、該複数の乗算器−加算器ユニットは、j番目の計算ステージの間に、該第1のメモリからの該第1の行列のj番目の行のデータ要素と、該第2のメモリからの該第2の行列のj番目の列のデータ要素とを読み取り、
    j番目の計算ステージの間に、格納ユニットが、該j番目の計算ステージの後の計算ステージにおいて使用するためにそれぞれの格納ロケーションにおいて該第1の行列のj番目の行に関するデータ要素と全ての先行する行に関するデータ要素とを格納し、
    該j番目の計算ステージの間に、該複数の乗算器−加算器ユニットのうちの2j−1個は、該第1の行列の該j番目の行のデータ要素に、該第2の行列の該j番目の列のデータ要素と、該格納ユニットに格納された該j番目の列に先行する該第2の行列の各列のデータ要素とを乗算し、該格納ユニットに格納された該j番目の行に先行する該第1の行列の各行のデータ要素に、該第2の行列の該j番目の列のデータ要素を乗算し、
    第1のクロックサイクルにおいて、該被加数の値は、ゼロに等しく、後続のクロックサイクルにおいて、該被加数の値は、その計算ステージに対する先のクロックサイクルにおいて該乗算器−加算器ユニットにより計算された結果値に等しい、方法。
  12. 前記複数のクロックサイクルは、前記第1の行列の行数と数が等しい請求項11に記載の方法。
  13. 加算器回路が、前記現在のクロックサイクルにおいて乗算器−加算器ユニットによって計算された前記積の値を、先のクロックサイクルにおいて該乗算器−加算器ユニットによって計算された結果によって計算された前記結果値と加算することをさらに包含する、請求項12に記載の方法。
JP2008174002A 2007-07-19 2008-07-02 高速かつ効率的な行列乗算ハードウェアモジュール Expired - Fee Related JP5408913B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US11/779,935 2007-07-19
US11/779,935 US8051124B2 (en) 2007-07-19 2007-07-19 High speed and efficient matrix multiplication hardware module

Publications (2)

Publication Number Publication Date
JP2009026308A JP2009026308A (ja) 2009-02-05
JP5408913B2 true JP5408913B2 (ja) 2014-02-05

Family

ID=39929976

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008174002A Expired - Fee Related JP5408913B2 (ja) 2007-07-19 2008-07-02 高速かつ効率的な行列乗算ハードウェアモジュール

Country Status (4)

Country Link
US (1) US8051124B2 (ja)
EP (1) EP2017743B1 (ja)
JP (1) JP5408913B2 (ja)
AU (1) AU2008202591B2 (ja)

Families Citing this family (47)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101577025B (zh) * 2009-06-15 2011-11-23 上海华魏光纤传感技术有限公司 一种新型数据采集累加器及其实现方法
TW201232476A (en) * 2011-01-27 2012-08-01 Univ Nat Taiwan Detection system and signal processing method thereof
CN102411558B (zh) * 2011-10-31 2015-05-13 中国人民解放军国防科学技术大学 面向向量处理器的大矩阵相乘的向量化实现方法
CN102629189B (zh) * 2012-03-15 2014-12-10 湖南大学 基于fpga的流水浮点乘累加方法
CN104662531A (zh) * 2012-04-23 2015-05-27 惠普发展公司,有限责任合伙企业 使用图形处理单元的统计分析
US9201848B2 (en) * 2012-07-27 2015-12-01 The United States Of America As Represented By The Secretary Of The Air Force Floating point matrix multiplication co-processor
CN103135960A (zh) * 2013-02-28 2013-06-05 浪潮集团有限公司 一种基于fpga的集成浮点运算器的设计方法
JP6003744B2 (ja) * 2013-03-22 2016-10-05 富士通株式会社 演算処理装置及び演算処理方法
US9384168B2 (en) * 2013-06-11 2016-07-05 Analog Devices Global Vector matrix product accelerator for microprocessor integration
JP5951570B2 (ja) * 2013-09-13 2016-07-13 株式会社東芝 行列演算装置
CN105893333B (zh) * 2016-03-25 2018-07-03 合肥工业大学 一种用于music算法中计算协方差矩阵的硬件电路
US10466928B2 (en) 2016-09-15 2019-11-05 Micron Technology, Inc. Updating a register in memory
CN108021528B (zh) * 2016-11-03 2020-03-13 中科寒武纪科技股份有限公司 Slam运算装置和方法
KR20180073118A (ko) 2016-12-22 2018-07-02 삼성전자주식회사 컨볼루션 신경망 처리 방법 및 장치
WO2018174931A1 (en) 2017-03-20 2018-09-27 Intel Corporation Systems, methods, and appartus for tile configuration
KR102415508B1 (ko) 2017-03-28 2022-07-01 삼성전자주식회사 컨볼루션 신경망 처리 방법 및 장치
US10338919B2 (en) 2017-05-08 2019-07-02 Nvidia Corporation Generalized acceleration of matrix multiply accumulate operations
DE102018110607A1 (de) 2017-05-08 2018-11-08 Nvidia Corporation Verallgemeinerte Beschleunigung von Matrix-Multiplikations-und-Akkumulations-Operationen
WO2018228703A1 (en) * 2017-06-16 2018-12-20 Huawei Technologies Co., Ltd. Multiply accumulator array and processor device
WO2019009870A1 (en) 2017-07-01 2019-01-10 Intel Corporation SAVE BACKGROUND TO VARIABLE BACKUP STATUS SIZE
CN112214726B (zh) * 2017-07-07 2024-05-03 华为技术有限公司 运算加速器
US10860924B2 (en) 2017-08-18 2020-12-08 Microsoft Technology Licensing, Llc Hardware node having a mixed-signal matrix vector unit
US10167800B1 (en) 2017-08-18 2019-01-01 Microsoft Technology Licensing, Llc Hardware node having a matrix vector unit with block-floating point processing
US10346163B2 (en) 2017-11-01 2019-07-09 Apple Inc. Matrix computation engine
CN109992742A (zh) * 2017-12-29 2019-07-09 华为技术有限公司 一种信号处理方法及装置
US10642620B2 (en) 2018-04-05 2020-05-05 Apple Inc. Computation engine with strided dot product
US10970078B2 (en) 2018-04-05 2021-04-06 Apple Inc. Computation engine with upsize/interleave and downsize/deinterleave options
US10387122B1 (en) 2018-05-04 2019-08-20 Olsen Ip Reserve, Llc Residue number matrix multiplier
US10754649B2 (en) 2018-07-24 2020-08-25 Apple Inc. Computation engine that operates in matrix and vector modes
CN110765413B (zh) * 2018-07-25 2024-05-07 赛灵思公司 矩阵求和结构及神经网络计算平台
US10831488B1 (en) 2018-08-20 2020-11-10 Apple Inc. Computation engine with extract instructions to minimize memory access
WO2020046642A1 (en) 2018-08-31 2020-03-05 Flex Logix Technologies, Inc. Multiplier-accumulator circuit, logic tile architecture for multiply-accumulate and ic including logic tile array
JP7132043B2 (ja) * 2018-09-10 2022-09-06 東京計器株式会社 リコンフィギュラブルプロセッサ
US11093580B2 (en) * 2018-10-31 2021-08-17 Advanced Micro Devices, Inc. Matrix multiplier with submatrix sequencing
US10992314B2 (en) 2019-01-21 2021-04-27 Olsen Ip Reserve, Llc Residue number systems and methods for arithmetic error detection and correction
US11475102B2 (en) 2019-02-21 2022-10-18 Samsung Electronics Co., Ltd. Adaptive matrix multiplication accelerator for machine learning and deep learning applications
US11194585B2 (en) 2019-03-25 2021-12-07 Flex Logix Technologies, Inc. Multiplier-accumulator circuitry having processing pipelines and methods of operating same
US11314504B2 (en) 2019-04-09 2022-04-26 Flex Logix Technologies, Inc. Multiplier-accumulator processing pipelines and processing component, and methods of operating same
US11288076B2 (en) 2019-09-13 2022-03-29 Flex Logix Technologies, Inc. IC including logic tile, having reconfigurable MAC pipeline, and reconfigurable memory
US11455368B2 (en) 2019-10-02 2022-09-27 Flex Logix Technologies, Inc. MAC processing pipeline having conversion circuitry, and methods of operating same
US12015428B2 (en) 2019-11-05 2024-06-18 Flex Logix Technologies, Inc. MAC processing pipeline using filter weights having enhanced dynamic range, and methods of operating same
US11693625B2 (en) 2019-12-04 2023-07-04 Flex Logix Technologies, Inc. Logarithmic addition-accumulator circuitry, processing pipeline including same, and methods of operation
US11960856B1 (en) 2020-01-15 2024-04-16 Flex Logix Technologies, Inc. Multiplier-accumulator processing pipeline using filter weights having gaussian floating point data format
US11442881B2 (en) 2020-04-18 2022-09-13 Flex Logix Technologies, Inc. MAC processing pipelines, circuitry to control and configure same, and methods of operating same
US11604645B2 (en) 2020-07-22 2023-03-14 Flex Logix Technologies, Inc. MAC processing pipelines having programmable granularity, and methods of operating same
CN112632464B (zh) * 2020-12-28 2022-11-29 上海壁仞智能科技有限公司 用于处理数据的处理装置
US12072952B2 (en) * 2021-03-26 2024-08-27 Advanced Micro Devices, Inc. Data compressor for approximation of matrices for matrix multiply operations

Family Cites Families (25)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
USRE25340E (en) * 1957-06-25 1963-02-26 haynes
US3055586A (en) * 1958-11-12 1962-09-25 Iuternat Business Machines Cor Digit-by-digit decimal core matrix multiplier
US3157779A (en) * 1960-06-28 1964-11-17 Ibm Core matrix calculator
US3621219A (en) * 1967-08-15 1971-11-16 Hayakawa Denki Kogyo Kk Arithmetic unit utilizing magnetic core matrix registers
US3535694A (en) * 1968-01-15 1970-10-20 Ibm Information transposing system
US4588255A (en) * 1982-06-21 1986-05-13 The Board Of Trustees Of The Leland Stanford Junior University Optical guided wave signal processor for matrix-vector multiplication and filtering
US5226171A (en) * 1984-12-03 1993-07-06 Cray Research, Inc. Parallel vector processing system for individual and broadcast distribution of operands and control information
JPH05324700A (ja) * 1992-05-19 1993-12-07 N T T Data Tsushin Kk 行列乗算装置
US6421695B1 (en) * 1995-10-28 2002-07-16 Lg Electronics Inc. Apparatus for implementing inverse discrete cosine transform in digital image processing system
US5818532A (en) * 1996-05-03 1998-10-06 Lsi Logic Corporation Micro architecture of video core for MPEG-2 decoder
JPH1063647A (ja) * 1996-08-23 1998-03-06 Matsushita Electric Ind Co Ltd 行列演算装置
US5978895A (en) * 1997-04-04 1999-11-02 Cirrus Logic, Inc. Method for speeding mathematical operations in a processor core
US6061749A (en) * 1997-04-30 2000-05-09 Canon Kabushiki Kaisha Transformation of a first dataword received from a FIFO into an input register and subsequent dataword from the FIFO into a normalized output dataword
US6195674B1 (en) * 1997-04-30 2001-02-27 Canon Kabushiki Kaisha Fast DCT apparatus
US6014144A (en) * 1998-02-03 2000-01-11 Sun Microsystems, Inc. Rapid computation of local eye vectors in a fixed point lighting unit
US6640239B1 (en) * 1999-11-10 2003-10-28 Garuda Network Corporation Apparatus and method for intelligent scalable switching network
US6681052B2 (en) * 2000-01-15 2004-01-20 Sony Corporation Methods and systems for performing inverse quantization and inverse weighting of DV video
US6898204B2 (en) * 2000-04-07 2005-05-24 Broadcom Corporation Method of determining a collision between a plurality of transmitting stations in a frame-based communications network
AUPR464601A0 (en) * 2001-04-30 2001-05-24 Commonwealth Of Australia, The Shapes vector
AU2002351525A1 (en) * 2001-06-28 2003-03-03 Oak Technology, Inc. System-on-a-chip controller
US7044911B2 (en) * 2001-06-29 2006-05-16 Philometron, Inc. Gateway platform for biological monitoring and delivery of therapeutic compounds
US7107464B2 (en) * 2001-07-10 2006-09-12 Telecom Italia S.P.A. Virtual private network mechanism incorporating security association processor
WO2003029922A2 (en) * 2001-10-01 2003-04-10 Kline & Walker, Llc Pfn/trac system faa upgrades for accountable remote and robotics control
US6986021B2 (en) * 2001-11-30 2006-01-10 Quick Silver Technology, Inc. Apparatus, method, system and executable module for configuration and operation of adaptive integrated circuitry having fixed, application specific computational elements
US6968454B2 (en) * 2001-12-27 2005-11-22 Quicksilver Technology, Inc. Apparatus, method and system for generating a unique hardware adaptation inseparable from correspondingly unique content

Also Published As

Publication number Publication date
EP2017743B1 (en) 2012-12-12
AU2008202591B2 (en) 2010-09-23
AU2008202591A1 (en) 2009-02-05
EP2017743A2 (en) 2009-01-21
US8051124B2 (en) 2011-11-01
JP2009026308A (ja) 2009-02-05
US20090024685A1 (en) 2009-01-22
EP2017743A3 (en) 2009-07-22

Similar Documents

Publication Publication Date Title
JP5408913B2 (ja) 高速かつ効率的な行列乗算ハードウェアモジュール
JP7474586B2 (ja) テンソル計算データフロー加速器半導体回路
CN110383237B (zh) 可重新配置的矩阵乘法器系统和方法
CN109992743B (zh) 矩阵乘法器
CN100405361C (zh) 用于执行计算操作的方法、系统以及设备
JP2018055677A (ja) 外積累算演算のためのプロセッサおよび方法
JP2022533221A (ja) 行列演算用の装置及び方法
GB2403567A (en) Multiplying numbers in encryption systems
US9372665B2 (en) Method and apparatus for multiplying binary operands
JPS6125188B2 (ja)
TWI808259B (zh) 具有壓縮進位之數位電路
CN116710912A (zh) 一种矩阵乘法器及矩阵乘法器的控制方法
KR102601034B1 (ko) 하드웨어에서의 희소 행렬 곱셈
WO2021168644A1 (zh) 数据处理装置、电子设备和数据处理方法
GB2352309A (en) A system for performing modular multiplication
CN113032723A (zh) 一种矩阵乘法器的实现方法及矩阵乘法器装置
CN109634556B (zh) 一种乘累加器及累加输出方法
EP3232321A1 (en) Signal processing apparatus with register file having dual two-dimensional register banks
Kamp et al. Multiply accumulate unit optimised for fast dot-product evaluation
Sonawane et al. Systolic architecture for integer point matrix multiplication using FPGA
CN115576895B (zh) 计算装置、计算方法及计算机可读存储介质
EP4195027A1 (en) Computational circuit with hierarchical accumulator
Sonawane et al. Resource efficient 64-bit floating point matrix multiplication algorithm using FPGA
US20140032626A1 (en) Multiply accumulate unit architecture optimized for both real and complex multiplication operations and single instruction, multiple data processing unit incorporating the same
JPH0298777A (ja) 並列積和演算回路及びベクトル行列積演算方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20110502

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120420

A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A711

Effective date: 20120426

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20130130

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130205

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130502

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130531

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20130830

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20130904

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130927

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20131016

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20131105

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees