JP2014186461A - 演算処理装置及び演算処理方法 - Google Patents

演算処理装置及び演算処理方法 Download PDF

Info

Publication number
JP2014186461A
JP2014186461A JP2013060018A JP2013060018A JP2014186461A JP 2014186461 A JP2014186461 A JP 2014186461A JP 2013060018 A JP2013060018 A JP 2013060018A JP 2013060018 A JP2013060018 A JP 2013060018A JP 2014186461 A JP2014186461 A JP 2014186461A
Authority
JP
Japan
Prior art keywords
data
input
multiplier
input data
output
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.)
Granted
Application number
JP2013060018A
Other languages
English (en)
Other versions
JP6003744B2 (ja
Inventor
Yuichiro Yasujima
雄一郎 安島
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.)
Fujitsu Ltd
Original Assignee
Fujitsu 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 Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2013060018A priority Critical patent/JP6003744B2/ja
Priority to US14/159,728 priority patent/US9361065B2/en
Priority to CN201410041737.8A priority patent/CN104063357B/zh
Publication of JP2014186461A publication Critical patent/JP2014186461A/ja
Application granted granted Critical
Publication of JP6003744B2 publication Critical patent/JP6003744B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • 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/544Methods 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 for evaluating functions by calculation
    • G06F7/5443Sum of products

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Computational Mathematics (AREA)
  • Computing Systems (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Complex Calculations (AREA)

Abstract

【課題】行列積演算処理を行う演算処理装置において、演算処理全体でのデータ移動の回数を削減し消費電力を低減する。
【解決手段】複数の乗算器と複数の加算器とを有し行列積演算処理を行う演算処理装置において、行列積演算における行、列が異なる要素の演算処理を、演算処理に係る入力ベクトルデータの各データをそれぞれ2つの乗算器で使用し1つの命令で行うようにして、入力データの共有を可能にし、行列積演算処理全体でのデータの移動回数を削減し、消費電力を低減する。
【選択図】図1

Description

本発明は、演算処理装置及び演算処理方法に関する。
プロセステクノロジの進歩により、シリコンチップ上に多くのトランジスタが集積されるようになった。一方、演算処理における演算精度は32ビットもしくは64ビットで十分である場合が多い。このため、多数のトランジスタを有効に利用する処理方式として、1つの命令で多数の演算器を並列に駆動し複数のデータについて処理するSIMD(Single Instruction Multiple Data)方式が広く普及している(例えば、特許文献1参照)。
現在の一般的なSIMD方式では、例えば、128ビットや256ビットのベクトルレジスタに、32ビットや64ビットのデータを複数格納する。ベクトルデータの四則演算は、図9に一例を示すように通常の四則演算の演算器を複数並べ、対応するデータ同士の四則演算を各演算器が行うことで実現できる。図9には、4つの乗算器101−i(i=1、2、3、4)を有し、4要素のベクトルデータの積を計算する演算処理部100を一例として示している。乗算器101−iは、各入力ベクトルデータa、bの1つの要素であるデータa(i−1)及びデータb(i−1)が入力され、データa(i−1)とデータb(i−1)の積を出力ベクトルデータcの1つの要素となるデータc(i−1)として出力する。
このように現代のSIMD方式は、1サイクルで多数の演算器にデータを供給するために用いられることが多く、ベクトルレジスタ長が従来のような数千ビットのものより短く数百ビットに止まり、ショートベクトルSIMD方式とも呼ばれる。ベクトル演算は、科学技術計算で多用される行列演算の効率的な処理に適している。以下、一例としてN×N(Nは2以上の整数)の2次元行列A、B、Cについて、行列Aと行列Bの積を行列Cに加算する演算処理について説明する。
図10は、スカラー演算処理で、行列Aと行列Bの積を行列Cに加算する処理の例を示すフローチャートである。処理が開始されると、まずステップS301にて、変数jを0に初期化する。次に、ステップS302にて、変数jの値を確認し、変数jの値がNより小さければステップS303へ進み、そうでなければ処理を終了する。ステップS303にて変数iを0に初期化する。次に、ステップS304にて、変数iの値を確認し、変数iの値がNより小さければステップS305へ進み、そうでなければステップS310にて変数jの値に1を加算してステップS302へ進む。ステップS305にて変数kを0に初期化する。次に、ステップS306にて、変数kの値を確認し、変数kの値がNより小さければステップS307へ進み、そうでなければステップS309にて変数iの値に1を加算してステップS304へ進む。ステップS307にて、行列Aの第(j+1)行・第(k+1)列のデータA[j][k]と行列Bの第(k+1)行・第(i+1)列のデータB[k][i]の積を行列Cの第(j+1)行・第(i+1)列のデータC[j][i]に加算し、加算結果を行列Cの第(j+1)行・第(i+1)列のデータとする演算を行う。続いて、ステップS308にて、変数kの値に1を加算してステップS306へ進む。スカラー演算処理で実行した場合には、図10に示したように変数i、j、kの3重のループ処理によりN3回の積及び和の演算を行っている。また、必要な命令数はN3である。
図11は、4要素のベクトル演算処理で、行列Aと行列Bの積を行列Cに加算する処理の例を示すフローチャートである。図11に示すステップS401〜S406、ステップS408、及びS409での処理は、図10に示したステップS301〜S306、ステップS308、及びS309での処理に対応し、処理内容は同様であるので、その説明は省略する。ステップS406において変数kの値がNより小さい場合に進むステップS407にて、行列Aの第(j+x+1)行・第(k+1)列(x=0、1、2、3)のデータA[j+x][k]と行列Bの第(k+1)行・第(i+1)列のデータB[k][i]の積を行列Cの第(j+x+1)行・第(i+1)列のデータC[j+x][i]に加算し、行列Cの第(j+x+1)行・第(i+1)列のデータとする演算を行う。すなわち、図11に示す例では、連続する4要素についてのベクトル積演算及びベクトル和演算を1命令で行う。また、ステップS404において変数iの値がNより小さい場合に進むステップS410にて変数jの値に4を加算してステップS402へ進む。図11に示したベクトル演算処理で実行した場合には、連続する4要素でベクトル積演算及びベクトル和演算を行うので、N3回の積及び和の演算が(N3/4)の命令で実行される。
また、同一の演算処理が可能な複数のベクトル演算器に、同一のベクトルレジスタの異なる要素のデータを供給して演算処理を行うことで、未使用のベクトル演算器を有効に活用し、1サイクル当たりの処理要素数を増加させ演算能力を向上させることが可能な演算処理装置が提案されている(例えば、特許文献2参照)。
特表2008−519349号公報 特開平10−312374号公報
半導体集積回路は、現代のプロセステクノロジでは電源電圧が1V程度から下がらないにもかかわらず、集積されるトランジスタ数が増加しているため、消費電力が大きな問題となっている。特に、シリコンチップ上のデータ移動は電力消費が大きく、レジスタ等のデータ格納部に対する入出力回数を減らすことや、データ格納部と演算処理部とを近接配置することが重要になっている。前述した2つの行列の積を求める行列積演算は、行列のデータが格納されるデータ格納部と演算処理部との間でのデータの移動が多い演算処理の1つである。行列積演算は1つの要素に係る演算では同じデータを使用しないため、例えば1つの要素に係る演算をベクトル演算化しても演算処理部へのデータの入力回数が減らず、行列積演算処理を行う演算処理装置の消費電力を低減することができない。
1つの側面では、本発明の目的は、行列積演算処理を行う演算処理装置において、演算処理全体でのデータ移動の回数を削減することにより消費電力を低減することにある。
演算処理装置の一態様は、第1組の4つの入力データ及び第2組の4つの入力データを受ける複数の乗算器と、複数の乗算器の出力を加算し出力データとして加算結果を出力する複数の加算器とを有する。第1の出力データとして、第1組の第1の入力データと第2組の第1の入力データの積と、第1組の第2の入力データと第2組の第3の入力データの積との和を出力する。第2の出力データとして、第1組の第2の入力データと第2組の第4の入力データの積と、第1組の第1の入力データと第2組の第2の入力データの積との和を出力する。第3の出力データとして、第1組の第3の入力データと第2組の第1の入力データの積と、第1組の第4の入力データと第2組の第3の入力データの積との和を出力する。第4の出力データとして、第1組の第4の入力データと第2組の第4の入力データの積と、第1組の第3の入力データと第2組の第2の入力データの積との和を出力する。
2つの入力行列のデータを第1組の入力データ、第2組の入力データとして供給することにより、各入力データが2つの乗算器にそれぞれ供給されるので、行列積演算処理全体でのデータ移動の回数を削減することができ、演算処理装置の消費電力を低減することができる。
本発明の第1の実施形態における演算処理装置の構成例を示す図である。 本実施形態における演算処理装置の構成例を示す図である。 本実施形態における演算処理装置による演算処理の例を示すフローチャートである。 本発明の第2の実施形態における演算処理装置の構成例を示す図である。 本発明の第3の実施形態における演算処理装置の構成例を示す図である。 本発明の第4の実施形態における演算処理装置の構成例を示す図である。 本発明の第4の実施形態における演算処理装置の他の構成例を示す図である。 本発明の第4の実施形態における演算処理装置の他の構成例を示す図である。 従来の演算処理装置の構成例を示す図である。 従来の行列演算処理(スカラー演算処理)の例を示すフローチャートである。 従来の行列演算処理(ベクトル演算処理)の例を示すフローチャートである。
以下、本発明の実施形態を図面に基づいて説明する。
前述したように行列積演算は、1つの要素に係る演算では同じデータを使用しないため、1つの要素に係る演算をベクトル演算化してもデータ格納部と演算処理部との間でのデータの移動回数が減らない。しかし、行が異なり列が同じ要素の演算では同じ列のデータが使用され、列が異なり行が同じ要素の演算では同じ行のデータが使用される。そこで、本実施形態では、行列積演算における行、列が異なる要素の演算処理を1つの命令で行うようにして入力データの共有を可能にし、データ格納部と演算処理部との間でのデータ移動の回数を低減できるようにする。
(第1の実施形態)
本発明の第1の実施形態について説明する。
図1は、第1の実施形態における演算処理装置が有する演算処理部の構成例を示す図である。演算処理部10Aは、2つの2×2行列を入力とし、これら入力行列の行列積を出力とする行列積演算器である。第1の入力行列は、データa0、a1、a2、a3を要素とするベクトルデータaであり、第2の入力行列は、データb0、b1、b2、b3を要素とするベクトルデータbであり、出力行列は、データc0、c1、c2、c3を要素とするベクトルデータcである。ここで、データa0、b0、c0を各行列における第1行第1列のデータ、データa1、b1、c1を各行列における第1行第2列のデータ、データa2、b2、c2を各行列における第2行第1列のデータ、データa3、b3、c3を各行列における第2行第2列のデータとする。また、各データa0〜a3、b0〜b3、c0〜c3は、数値データであり、データ型は任意である。各データa0〜a3、b0〜b3、c0〜c3のデータ型は、例えば浮動小数点数型、固定小数点数型、整数型などである。
演算処理部10Aは、8つの乗算器11−1〜11−8、及び4つの加算器12−1〜12−4を有する。第1の乗算器11−1には、4要素の入力ベクトルデータaの第1要素であるデータa0が第1入力に入力され、4要素の入力ベクトルデータbの第1要素であるデータb0が第2入力に入力される。第1の乗算器11−1は、入力されるデータa0とデータb0の積を出力する。第2の乗算器11−2には、入力ベクトルデータaの第2要素であるデータa1が第1入力に入力され、入力ベクトルデータbの第3要素であるデータb2が第2入力に入力される。第2の乗算器11−2は、入力されるデータa1とデータb2の積を出力する。第1の加算器12−1は、第1の乗算器11−1の出力と第2の乗算器11−2の出力を加算して、加算結果を4要素の出力ベクトルデータcの第1要素となるデータc0として出力する。
第3の乗算器11−3には、入力ベクトルデータaのデータa1が第1入力に入力され、入力ベクトルデータbの第4要素であるデータb3が第2入力に入力される。第3の乗算器11−3は、入力されるデータa1とデータb3の積を出力する。第4の乗算器11−4には、入力ベクトルデータaのデータa0が第1入力に入力され、入力ベクトルデータbの第2要素であるデータb1が第2入力に入力される。第4の乗算器11−4は、入力されるデータa0とデータb1の積を出力する。第2の加算器12−2は、第3の乗算器11−3の出力と第4の乗算器11−4の出力を加算して、加算結果を出力ベクトルデータcの第2要素となるデータc1として出力する。
第5の乗算器11−5には、入力ベクトルデータaの第3要素であるデータa2が第1入力に入力され、入力ベクトルデータbのデータb0が第2入力に入力される。第5の乗算器11−5は、入力されるデータa2とデータb0の積を出力する。第6の乗算器11−6には、入力ベクトルデータaの第4要素であるデータa3が第1入力に入力され、入力ベクトルデータbのデータb2が第2入力に入力される。第6の乗算器11−6は、入力されるデータa3とデータb2の積を出力する。第3の加算器12−3は、第5の乗算器11−5の出力と第6の乗算器11−6の出力を加算して、加算結果を出力ベクトルデータcの第3要素となるデータc2として出力する。
第7の乗算器11−7には、入力ベクトルデータaのデータa3が第1入力に入力され、入力ベクトルデータbのデータb3が第2入力に入力される。第7の乗算器11−7は、入力されるデータa3とデータb3の積を出力する。第8の乗算器11−8には、入力ベクトルデータaのデータa2が第1入力に入力され、入力ベクトルデータbのデータb1が第2入力に入力される。第8の乗算器11−8は、入力されるデータa2とデータb1の積を出力する。第4の加算器12−4は、第7の乗算器11−7の出力と第8の乗算器11−8の出力を加算して、加算結果を出力ベクトルデータcの第4要素となるデータc3として出力する。
このように入力ベクトルデータaの第1要素であるデータa0は、第1の乗算器11−1及び第4の乗算器11−4に入力され、入力ベクトルデータaの第2要素であるデータa1は、第2の乗算器11−2及び第3の乗算器11−3に入力される。入力ベクトルデータaの第3要素であるデータa2は、第5の乗算器11−5及び第8の乗算器11−8に入力され、入力ベクトルデータaの第4要素であるデータa3は、第6の乗算器11−6及び第7の乗算器11−7に入力される。
また、入力ベクトルデータbの第1要素であるデータb0は、第1の乗算器11−1及び第5の乗算器11−5に入力され、入力ベクトルデータbの第2要素であるデータb1は、第4の乗算器11−4及び第8の乗算器11−8に入力される。入力ベクトルデータbの第3要素であるデータb2は、第2の乗算器11−2及び第6の乗算器11−6に入力され、入力ベクトルデータbの第4要素であるデータb3は、第3の乗算器11−3及び第7の乗算器11−7に入力される。
このようにして、レジスタ等のデータ格納部から読み出される各データa0〜a3、b0〜b3を、それぞれ2つの乗算器11−1〜11−8で使用して行列積演算に係る演算処理を行う。したがって、従来手法による行列積演算処理と比較して演算処理部10Aへのデータの入力回数を(1/2)に削減することができ、消費電力を低減することができる。
図2は、本実施形態における演算処理装置の構成例を示す図である。本実施形態における演算処理装置は、データ格納部31、処理制御部32、及び行列演算器33を有する。データ格納部31は、例えばレジスタやメモリであり、演算処理等に係るデータを格納する。データ格納部31には、行列演算器33での行列演算に係る入出力データが格納される。処理制御部32は、演算処理に係る各種制御を行う。処理制御部32は、例えば命令を発行したりデータの授受を制御したりする。行列演算器33は、本実施形態における演算処理部10Aを含み、処理制御部32による制御に従って行列積演算処理を行う。なお、データ格納部31と行列演算器33とが直接にデータを授受可能なようにしても良い。
図3は、本実施形態における演算処理装置での演算処理部10Aを使用したN×N行列の行列積演算処理の例を示すフローチャートである。
処理を開始すると、ステップS201にて、処理制御部32は、変数jを0に初期化する。次に、ステップS202にて、処理制御部32は、変数jの値を確認し、変数jの値がNより小さければステップS203へ進み、そうでなければ処理を終了する。ステップS203にて、処理制御部32は、変数iを0に初期化する。次に、ステップS204にて、処理制御部32は、変数iの値を確認し、変数iの値がNより小さければステップS205へ進み、そうでなければステップS210にて変数jの値に2を加算してステップS202へ進む。ステップS205にて、処理制御部32は、変数kを0に初期化する。次に、ステップS206にて、処理制御部32は、変数kの値を確認し、変数kの値がNより小さければステップS207へ進み、そうでなければステップS209にて変数iの値に2を加算してステップS204へ進む。
ステップS207にて、処理制御部32は、データ格納部31から行列Aの第(j+1)行・第(k+1)列のデータA[j][k]、第(j+1)行・第(k+2)列のデータA[j][k+1]、第(j+2)行・第(k+1)列のデータA[j+1][k]、第(j+2)行・第(k+2)列のデータA[j+1][k+1]を読み出す。また、処理制御部32は、データ格納部31から行列Bの第(k+1)行・第(i+1)列のデータB[k][i]、第(k+1)行・第(i+2)列のデータB[k][i+1]、第(k+2)行・第(i+1)列のデータB[k+1][i]、第(k+2)行・第(i+2)列のデータB[k+1][i+1]を読み出す。そして、処理制御部32は、読み出したデータA[j][k]、A[j][k+1]、A[j+1][k]、A[j+1][k+1]をデータa0、a1、a2、a3とし、データB[k][i]、B[k][i+1]、B[k+1][i]、B[k+1][i+1]をデータb0、b1、b2、b3として行列演算器33の演算処理部10Aに供給する。
行列演算器33の演算処理部10Aは、データa0、b0の積とデータa1、b2の積との和である(A[j][k]×B[k][i]+A[j][k+1]×B[k+1][i])をデータc0として出力し、データa1、b3の積とデータa0、b1の積との和である(A[j][k+1]×B[k+1][i+1]+A[j][k]×B[k][i+1])をデータc1として出力する。また、演算処理部10Aは、データa2、b0の積とデータa3、b2の積との和である(A[j+1][k]×B[k][i]+A[j+1][k+1]×B[k+1][i])をデータc2として出力し、データa3、b3の積とデータa2、b1の積との和である(A[j+1][k+1]×B[k+1][i+1]+A[j+1][k]×B[k][i+1])をデータc3として出力する。
さらに、行列演算器33は、行列Cの第(j+1)行・第(i+1)列のデータC[j][i]にデータc0を加算して行列Cの第(j+1)行・第(i+1)列のデータとし、行列Cの第(j+1)行・第(i+2)列のデータC[j][i+1]にデータc1を加算して行列Cの第(j+1)行・第(i+2)列のデータとする。同様に、行列演算器33は、行列Cの第(j+2)行・第(i+1)列のデータC[j+1][i]にデータc2を加算して行列Cの第(j+2)行・第(i+1)列のデータとし、行列Cの第(j+2)行・第(i+2)列のデータC[j+1][i+1]にデータc3を加算して行列Cの第(j+2)行・第(i+2)列のデータとする。
続いて、ステップS208にて、処理制御部32は、変数kの値に2を加算してステップS206へ進む。このようにして、処理対象のN×Nの入力行列を2×2部分行列に分割してN×N行列の行列積演算処理を行う。行列積演算処理では、演算対象の第(j+1)行及び第(j+2)行にある第1のN×N入力行列内の複数の2×2部分行列のデータを順次供給するとともに、演算対象の第(i+1)列及び第(i+2)列にある第2のN×N入力行列内の複数の2×2部分行列のデータを順次供給して演算処理が行われる。
以上のように本実施形態によれば、図3に示されるように、変数i、j、kに係るループ処理の回数がすべて(N/2)回となり、ステップS207の処理の実行回数は(N3/8)となる。ステップS207の処理の1回当たり8個のデータを使用するので、N×N行列の行列積演算処理の全体での入力データの移動回数はN3回となる。一方、従来手法では、N×N行列の行列積演算処理の全体での入力データの移動回数は2N3回である。したがって、データ格納部31と演算処理部10Aとの間でのデータ移動の回数を(1/2)に削減することができ、消費電力を低減することができる。また、N×N行列の行列積演算処理を行うための命令数が、スカラー演算処理で行う場合と比較して(1/8)となり処理時間も短縮することができる。
(第2の実施形態)
次に、本発明の第2の実施形態について説明する。なお、以下に説明する第2〜第4の実施形態の各々において、演算処理装置の全体構成、及び演算処理装置によるN×N行列の行列積演算処理は、第1の実施形態と同様であるので説明は省略し、演算処理装置が有する演算処理部の構成について説明する。
図4は、第2の実施形態における演算処理装置が有する演算処理部の構成例を示す図である。図4において、図1に示した構成要素と同一の機能を有する構成要素には同一の符号を付し、重複する説明は省略する。演算処理部10Bは、2つの2×2行列を入力とし、第1の入力行列と転置した第2の入力行列との行列積を出力とする行列積演算器である。演算処理部10Bは、入力ベクトルデータbのデータb1が乗算器11−2、11−6の第2入力に入力され、入力ベクトルデータbのデータb2が乗算器11−4、11−8の第2入力に入力される点が、図1に示した演算処理部10Aと異なる。
行列積の演算処理は、一方の行列の行方向のデータと他方の行列の列方向のデータとの乗算である。例えば行方向で先頭から最後まで連続してある行単位でデータを格納していき行方向の最後になると次の行にシフトして格納するようにして、両方の行列のデータを同じようにしてデータ格納部に格納すると、入力ベクトルデータbとして読み出されるデータは連続した領域ではなく、とびとびの領域に格納されることになる。したがって、データ格納部からのデータ読み出しにおいてオーバーヘッドが大きくなってしまう。それに対して、第2の実施形態によれば、第2の入力行列としてのベクトルデータbのデータb0、b1、b2、b3については、行列の転置と同様に入れ換えているので、両方の行列のデータを同じようにして格納しても、データ格納部からのデータ読み出しにおけるオーバーヘッドを抑制することができる。
(第3の実施形態)
次に、本発明の第3の実施形態について説明する。
図5は、第3の実施形態における演算処理装置が有する演算処理部の構成例を示す図である。図5において、図1に示した構成要素と同一の機能を有する構成要素には同一の符号を付し、重複する説明は省略する。演算処理部10Cは、2つの2×2行列及び制御信号(切り替え信号)Tを入力とし、制御信号Tによって第2の入力行列を転置するかを選択して、2つの入力行列の行列積を出力とする行列積演算器である。
演算処理部10Cは、8つの乗算器11−1〜11−8、及び4つの加算器12−1〜12−4に加え、4つのセレクタ13−1〜13−4を有する。セレクタ13−1〜13−4には、入力ベクトルデータbのデータb1、b2及び制御信号Tが入力される。第1のセレクタ13−1及び第3のセレクタ13−3は、制御信号Tがオフ状態(例えば0)であればデータb2を出力し、制御信号Tがオン状態(例えば1)であればデータb1を出力する。第2のセレクタ13−2及び第4のセレクタ13−4は、制御信号Tがオフ状態(例えば0)であればデータb1を出力し、制御信号Tがオン状態(例えば1)であればデータb0を出力する。
第1のセレクタ13−1の出力は第2の乗算器11−2の第2入力に入力し、第2のセレクタ13−2の出力は第4の乗算器11−4の第2入力に入力する。また、第3のセレクタ13−3の出力は第6の乗算器11−6の第2入力に入力し、第4のセレクタ13−4の出力は第8の乗算器11−8の第2入力に入力する。
このような構成により、入力行列のベクトルデータのデータ格納部における格納方法に応じて、第2の入力行列を転置するかを適宜選択して行列積演算処理を行うことができる。
(第4の実施形態)
次に、本発明の第4の実施形態について説明する。
図6は、第4の実施形態における演算処理装置が有する演算処理部の構成例を示す図である。図6において、図1に示した構成要素と同一の機能を有する構成要素には同一の符号を付し、重複する説明は省略する。第4の実施形態における演算処理部は、3つの2×2行列を入力とし、2つの入力行列(第1の入力行列及び第2の入力行列)の行列積と1つの入力行列(第3の入力行列)との和を出力とする行列積演算器である。
第1の入力行列は、データa0、a1、a2、a3を要素とするベクトルデータaであり、第2の入力行列は、データb0、b1、b2、b3を要素とするベクトルデータbであり、第3の入力行列は、データc0、c1、c2、c3を要素とするベクトルデータcである。また、出力行列は、データd0、d1、d2、d3を要素とするベクトルデータdである。ここで、データa0、b0、c0、d0を各行列における第1行第1列のデータ、データa1、b1、c1、d1を各行列における第1行第2列のデータ、データa2、b2、c2、d2を各行列における第2行第1列のデータ、データa3、b3、c3、d3を各行列における第2行第2列のデータとする。また、各データa0〜a3、b0〜b3、c0〜c3、d0〜d3は、数値データであり、データ型は任意である。各データa0〜a3、b0〜b3、c0〜c3、d0〜d3のデータ型は、例えば浮動小数点数型、固定小数点数型、整数型などである。
演算処理部20Aは、8つの乗算器11−1〜11−8、及び4つの加算器12−1〜12−4に加えて、4つの加算器21−1〜21−4を有する点が、図1に示した演算処理部10Aと異なる。第5の加算器21−1は、第1の加算器12−1の出力と入力ベクトルデータcの第1要素であるデータc0を加算して、加算結果を出力ベクトルデータdの第1要素となるデータd0として出力する。第6の加算器21−2は、第2の加算器12−2の出力と入力ベクトルデータcの第2要素であるデータc1を加算して、加算結果を出力ベクトルデータdの第2要素となるデータd1として出力する。
第7の加算器21−3は、第3の加算器12−3の出力と入力ベクトルデータcの第3要素であるデータc2を加算して、加算結果を出力ベクトルデータdの第3要素となるデータd2として出力する。第8の加算器21−4は、第4の加算器12−4の出力と入力ベクトルデータcの第4要素であるデータc3を加算して、加算結果を出力ベクトルデータdの第4要素となるデータd3として出力する。
このように加算器21−1〜21−4を設けることで、入力ベクトルデータa、b、cとして行列A、B、Cのデータを入力し、出力ベクトルデータdを行列Cのデータとすることで、演算処理部20Aで図2のステップS207に示す演算を1命令で実行することができる。
前述した説明では、図1に示した第1の実施形態における演算処理部に対して、4つの加算器21−1〜21−4を設けた例を説明したが、図7及び図8に示すように第2及び第3の実施形態における演算処理部に対して4つの加算器21−1〜21−4を設けるようにしても良い。
図7は、第4の実施形態における演算処理装置が有する演算処理部の他の構成例を示す図である。図7において、図1、図4、図6に示した構成要素と同一の機能を有する構成要素には同一の符号を付し、重複する説明は省略する。図7に示す演算処理部20Bは、図4に示した第2の実施形態における演算処理部に対して、4つの加算器21−1〜21−4を設けたものである。
また、図8は、第4の実施形態における演算処理装置が有する演算処理部の他の構成例を示す図である。図8において、図1、図5、図6に示した構成要素と同一の機能を有する構成要素には同一の符号を付し、重複する説明は省略する。図8に示す演算処理部20Cは、図5に示した第3の実施形態における演算処理部に対して、4つの加算器21−1〜21−4を設けたものである。
なお、前記実施形態は、何れも本発明を実施するにあたっての具体化のほんの一例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、またはその主要な特徴から逸脱することなく、様々な形で実施することができる。
10A、10B、10C 演算処理部
11−1〜11−2 乗算器
12−1〜12−4 加算器
13−1〜13−4 セレクタ
20A、20B、20C 演算処理部
21−1〜21−4 加算器
31 データ格納部
32 処理制御部
33 行列演算器

Claims (7)

  1. 第1組の4つの入力データのうちの第1の入力データを第1入力に受けるとともに、第2組の4つの入力データのうちの第1の入力データを第2入力に受けて、当該入力データの積を出力する第1の乗算器と、
    前記第1組の第2の入力データを第1入力に受けるとともに、前記第2組の第3の入力データを第2入力に受けて、当該入力データの積を出力する第2の乗算器と、
    前記第1組の前記第2の入力データを第1入力に受けるとともに、前記第2組の第4の入力データを第2入力に受けて、当該入力データの積を出力する第3の乗算器と、
    前記第1組の前記第1の入力データを第1入力に受けるとともに、前記第2組の第2の入力データを第2入力に受けて、当該入力データの積を出力する第4の乗算器と、
    前記第1組の第3の入力データを第1入力に受けるとともに、前記第2組の前記第1の入力データを第2入力に受けて、当該入力データの積を出力する第5の乗算器と、
    前記第1組の第4の入力データを第1入力に受けるとともに、前記第2組の前記第3の入力データを第2入力に受けて、当該入力データの積を出力する第6の乗算器と、
    前記第1組の前記第4の入力データを第1入力に受けるとともに、前記第2組の前記第4の入力データを第2入力に受けて、当該入力データの積を出力する第7の乗算器と、
    前記第1組の前記第3の入力データを第1入力に受けるとともに、前記第2組の前記第2の入力データを第2入力に受けて、当該入力データの積を出力する第8の乗算器と、
    前記第1の乗算器の出力と前記第2の乗算器の出力とを加算し、第1の出力データとして加算結果を出力する第1の加算器と、
    前記第3の乗算器の出力と前記第4の乗算器の出力とを加算し、第2の出力データとして加算結果を出力する第2の加算器と、
    前記第5の乗算器の出力と前記第6の乗算器の出力とを加算し、第3の出力データとして加算結果を出力する第3の加算器と、
    前記第7の乗算器の出力と前記第8の乗算器の出力とを加算し、第4の出力データとして加算結果を出力する第4の加算器とを有することを特徴とする演算処理装置。
  2. 第3組の4つの入力データのうちの第1の入力データと前記第1の加算器の出力とを加算し、前記第1の出力データとして加算結果を出力する第5の加算器と、
    前記第3組の第2の入力データと前記第2の加算器の出力とを加算し、前記第2の出力データとして加算結果を出力する第6の加算器と、
    前記第3組の第3の入力データと前記第3の加算器の出力とを加算し、前記第3の出力データとして加算結果を出力する第7の加算器と、
    前記第3組の第4の入力データと前記第4の加算器の出力とを加算し、前記第4の出力データとして加算結果を出力する第8の加算器とをさらに有することを特徴とする請求項1記載の演算処理装置。
  3. 前記第2の乗算器及び前記第6の乗算器が、前記第2組の前記第2の入力データを前記第2入力に受け、
    前記第4の乗算器及び前記第8の乗算器が、前記第2組の前記第3の入力データを前記第2入力に受けることを特徴とする請求項1又は2記載の演算処理装置。
  4. 前記第2組の前記第2の入力データ又は前記第3の入力データを、制御信号に応じて選択して出力する複数のセレクタを有し、
    前記第2の乗算器及び前記第6の乗算器は、第1のセレクタの出力を前記第2入力に受け、
    前記第2の乗算器及び前記第6の乗算器は、前記第1のセレクタが前記制御信号に応じて前記第2の入力データを出力しているときに前記第3の入力データを出力し、前記第1のセレクタが前記制御信号に応じて前記第3の入力データを出力しているときに前記第2の入力データを出力する第2のセレクタの出力を前記第2入力に受けることを特徴とする請求項1又は2記載の演算処理装置。
  5. 複数組の前記入力データが格納されるデータ格納部から前記入力データを読み出して前記乗算器に供給する処理制御部をさらに有することを特徴とする請求項1〜4の何れか1項に記載の演算処理装置。
  6. 前記データ格納部に格納される複数組の前記入力データは、N×N行列を分割した2×2部分行列における4つのデータであり、
    前記処理制御部は、N×N行列において演算対象の行に対応する第1のN×N行列内の複数の2×2部分行列における4つのデータを前記第1組の入力データとして前記乗算器に順次供給するとともに、演算対象の列に対応する第2のN×N行列内の複数の2×2部分行列における4つのデータを前記第2組の入力データとして前記乗算器に順次供給することを特徴とする請求項5記載の演算処理装置。
  7. 複数の乗算器及び複数の加算器を有する演算処理装置による演算処理方法であって、
    前記演算処理装置の第1の乗算器が、第1組の4つの入力データのうちの第1の入力データと第2組の4つの入力データのうちの第1の入力データとの積を出力し、
    前記演算処理装置の第2の乗算器が、前記第1組の第2の入力データと前記第2組の第3の入力データとの積を出力し、
    前記演算処理装置の第3の乗算器が、前記第1組の前記第2の入力データと前記第2組の第4の入力データとの積を出力し、
    前記演算処理装置の第4の乗算器が、前記第1組の前記第1の入力データと前記第2組の第2の入力データとの積を出力し、
    前記演算処理装置の第5の乗算器が、前記第1組の第3の入力データと前記第2組の前記第1の入力データとの積を出力し、
    前記演算処理装置の第6の乗算器が、前記第1組の第4の入力データと前記第2組の前記第3の入力データとの積を出力し、
    前記演算処理装置の第7の乗算器が、前記第1組の前記第4の入力データと前記第2組の前記第4の入力データとの積を出力し、
    前記演算処理装置の第8の乗算器が、前記第1組の前記第3の入力データと前記第2組の前記第2の入力データとの積を出力し、
    前記演算処理装置の第1の加算器が、前記第1の乗算器の出力と前記第2の乗算器の出力との和を第1の出力データとして出力し、
    前記演算処理装置の第2の加算器が、前記第3の乗算器の出力と前記第4の乗算器の出力との和を第2の出力データとして出力し、
    前記演算処理装置の第3の加算器が、前記第5の乗算器の出力と前記第6の乗算器の出力との和を第3の出力データとして出力し、
    前記演算処理装置の第4の加算器が、前記第7の乗算器の出力と前記第8の乗算器の出力との和を第4の出力データとして出力することを特徴とする演算処理方法。
JP2013060018A 2013-03-22 2013-03-22 演算処理装置及び演算処理方法 Active JP6003744B2 (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP2013060018A JP6003744B2 (ja) 2013-03-22 2013-03-22 演算処理装置及び演算処理方法
US14/159,728 US9361065B2 (en) 2013-03-22 2014-01-21 Processor and processing method
CN201410041737.8A CN104063357B (zh) 2013-03-22 2014-01-28 处理器以及处理方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2013060018A JP6003744B2 (ja) 2013-03-22 2013-03-22 演算処理装置及び演算処理方法

Publications (2)

Publication Number Publication Date
JP2014186461A true JP2014186461A (ja) 2014-10-02
JP6003744B2 JP6003744B2 (ja) 2016-10-05

Family

ID=51551074

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013060018A Active JP6003744B2 (ja) 2013-03-22 2013-03-22 演算処理装置及び演算処理方法

Country Status (3)

Country Link
US (1) US9361065B2 (ja)
JP (1) JP6003744B2 (ja)
CN (1) CN104063357B (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2019159440A (ja) * 2018-03-08 2019-09-19 日本電気株式会社 ベクトルプロセッサ、演算実行方法、プログラム

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6003744B2 (ja) * 2013-03-22 2016-10-05 富士通株式会社 演算処理装置及び演算処理方法
CN107305538B (zh) * 2016-04-22 2020-07-31 中科寒武纪科技股份有限公司 一种子矩阵运算装置及方法
US10824934B2 (en) * 2017-01-12 2020-11-03 Texas Instruments Incorporated Methods and apparatus for matrix processing in a convolutional neural network
CN110415157B (zh) * 2018-04-26 2024-01-30 华为技术有限公司 一种矩阵乘法的计算方法及装置
US10754649B2 (en) * 2018-07-24 2020-08-25 Apple Inc. Computation engine that operates in matrix and vector modes

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5204830A (en) * 1992-02-13 1993-04-20 Industrial Technology Research Institute Fast pipelined matrix multiplier
JPH1063647A (ja) * 1996-08-23 1998-03-06 Matsushita Electric Ind Co Ltd 行列演算装置
US20090024685A1 (en) * 2007-07-19 2009-01-22 Itt Manufacturing Enterprises, Inc. High Speed and Efficient Matrix Multiplication Hardware Module
JP2009245381A (ja) * 2008-03-31 2009-10-22 Fujitsu Ltd 積和演算回路、その設計装置、プログラム
US20100036898A1 (en) * 2008-08-08 2010-02-11 Analog Devices, Inc. Computing module for efficient fft and fir hardware accelerator
JP2013205850A (ja) * 2012-03-27 2013-10-07 Casio Comput Co Ltd 行列計算装置およびプログラム

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5021987A (en) * 1989-08-31 1991-06-04 General Electric Company Chain-serial matrix multipliers
JPH10312374A (ja) 1997-05-13 1998-11-24 Kofu Nippon Denki Kk ベクトル演算処理装置
US6427159B1 (en) * 1999-08-03 2002-07-30 Koninklijke Philips Electronics N.V. Arithmetic unit, digital signal processor, method of scheduling multiplication in an arithmetic unit, method of selectively delaying adding and method of selectively adding during a first or second clock cycle
US6526430B1 (en) * 1999-10-04 2003-02-25 Texas Instruments Incorporated Reconfigurable SIMD coprocessor architecture for sum of absolute differences and symmetric filtering (scalable MAC engine for image processing)
US20050240646A1 (en) * 2004-04-23 2005-10-27 The Research Foundation Of State University Of New York Reconfigurable matrix multiplier architecture and extended borrow parallel counter and small-multiplier circuits
WO2006048828A1 (en) 2004-11-03 2006-05-11 Koninklijke Philips Electronics N.V. Programmable data processing circuit that supports simd instruction
US8984043B2 (en) * 2009-12-23 2015-03-17 Intel Corporation Multiplying and adding matrices
CN102662623A (zh) * 2012-04-28 2012-09-12 电子科技大学 基于单fpga的并行矩阵乘法器及其实现方法
US8959136B1 (en) * 2012-05-08 2015-02-17 Altera Corporation Matrix operations in an integrated circuit device
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
JP6003744B2 (ja) * 2013-03-22 2016-10-05 富士通株式会社 演算処理装置及び演算処理方法

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5204830A (en) * 1992-02-13 1993-04-20 Industrial Technology Research Institute Fast pipelined matrix multiplier
JPH1063647A (ja) * 1996-08-23 1998-03-06 Matsushita Electric Ind Co Ltd 行列演算装置
US20090024685A1 (en) * 2007-07-19 2009-01-22 Itt Manufacturing Enterprises, Inc. High Speed and Efficient Matrix Multiplication Hardware Module
JP2009026308A (ja) * 2007-07-19 2009-02-05 Itt Manufacturing Enterprises Inc 高速かつ効率的な行列乗算ハードウェアモジュール
JP2009245381A (ja) * 2008-03-31 2009-10-22 Fujitsu Ltd 積和演算回路、その設計装置、プログラム
US20100036898A1 (en) * 2008-08-08 2010-02-11 Analog Devices, Inc. Computing module for efficient fft and fir hardware accelerator
JP2013205850A (ja) * 2012-03-27 2013-10-07 Casio Comput Co Ltd 行列計算装置およびプログラム

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2019159440A (ja) * 2018-03-08 2019-09-19 日本電気株式会社 ベクトルプロセッサ、演算実行方法、プログラム
US10877764B2 (en) 2018-03-08 2020-12-29 Nec Corporation Vector processor, operation performing method, and non-transitory computer-readable recording medium for recording program

Also Published As

Publication number Publication date
CN104063357B (zh) 2017-04-12
US20140289300A1 (en) 2014-09-25
CN104063357A (zh) 2014-09-24
US9361065B2 (en) 2016-06-07
JP6003744B2 (ja) 2016-10-05

Similar Documents

Publication Publication Date Title
JP6003744B2 (ja) 演算処理装置及び演算処理方法
US8051124B2 (en) High speed and efficient matrix multiplication hardware module
US20190155601A1 (en) Processing device and a swizzle pattern generator
JP5951570B2 (ja) 行列演算装置
JP2003296096A (ja) シリアル演算パイプライン、演算装置、算術論理演算回路およびシリアル演算パイプラインによる演算方法
JP4484756B2 (ja) リコンフィギュラブル回路および処理装置
CN109144469B (zh) 流水线结构神经网络矩阵运算架构及方法
US11640303B2 (en) Calculating device
EP4318275A1 (en) Matrix multiplier and method for controlling matrix multiplier
US8892615B2 (en) Arithmetic operation circuit and method of converting binary number
JP2006099719A (ja) 処理装置
EP4095719A1 (en) Sparse matrix multiplication in hardware
CN112446007A (zh) 一种矩阵运算方法、运算装置以及处理器
JP7435602B2 (ja) 演算装置および演算システム
CN112074810B (zh) 并行处理设备
JP7038608B2 (ja) 半導体装置
JP2009181293A (ja) 行列演算コプロセッサ
US10387118B2 (en) Arithmetic operation unit and method of controlling arithmetic operation unit
KR100960148B1 (ko) 데이터 프로세싱 회로
Feng et al. Design and evaluation of a novel reconfigurable ALU based on FPGA
CN116796816B (zh) 处理器、计算芯片和计算设备
US20210117352A1 (en) Semiconductor device and method of controlling the same
JPS6310263A (ja) ベクトル処理装置
JP5116499B2 (ja) 演算処理回路
CN114443146A (zh) 基于存算一体存储器的矢量处理器及其运行方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20151106

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20160712

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: 20160809

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20160822

R150 Certificate of patent or registration of utility model

Ref document number: 6003744

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150