JP2018206128A - 演算処理装置、情報処理装置及び演算処理装置の制御方法 - Google Patents

演算処理装置、情報処理装置及び演算処理装置の制御方法 Download PDF

Info

Publication number
JP2018206128A
JP2018206128A JP2017111695A JP2017111695A JP2018206128A JP 2018206128 A JP2018206128 A JP 2018206128A JP 2017111695 A JP2017111695 A JP 2017111695A JP 2017111695 A JP2017111695 A JP 2017111695A JP 2018206128 A JP2018206128 A JP 2018206128A
Authority
JP
Japan
Prior art keywords
data
matrix
units
matrix data
unit
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
JP2017111695A
Other languages
English (en)
Other versions
JP6898554B2 (ja
Inventor
朋広 永野
Tomohiro Nagano
朋広 永野
鵜飼 昌樹
Masaki Ukai
昌樹 鵜飼
雅紀 日下田
Masaki Higeta
雅紀 日下田
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 JP2017111695A priority Critical patent/JP6898554B2/ja
Priority to US15/990,854 priority patent/US20180349061A1/en
Publication of JP2018206128A publication Critical patent/JP2018206128A/ja
Application granted granted Critical
Publication of JP6898554B2 publication Critical patent/JP6898554B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0659Command handling arrangements, e.g. command buffers, queues, command scheduling
    • 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
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0604Improving or facilitating administration, e.g. storage management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0683Plurality of storage devices
    • 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
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Mathematical Physics (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • Mathematical Analysis (AREA)
  • Computational Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Human Computer Interaction (AREA)
  • Computing Systems (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Complex Calculations (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

【課題】演算部の演算に必要なデータの転送量又はデータ保持部の容量を削減することができる演算処理装置を提供することを課題とする。
【解決手段】演算処理装置は、各々がデータを記憶する複数の第1のデータ保持部(LR1〜LR8)と、データを記憶する共有データ保持部(SR)と、各々が、前記複数の第1のデータ保持部に記憶されているデータと前記共有データ保持部に記憶されているデータをそれぞれ用いて演算を行う複数の演算部(EX1〜EX8)とを有する。
【選択図】図9

Description

本発明は、演算処理装置、情報処理装置及び演算処理装置の制御方法に関する。
複数のプロセッサから構成されるマルチプロセッサシステムが知られている(特許文献1参照)。マルチプロセッサシステムは、少なくとも二つ以上のプロセッサから参照可能なベクトルレジスタ群を共有する。各ベクトルレジスタは、当該ベクトルレジスタへのアクセスが許可されているプロセッサを識別する手段と、複数のベクトル要素データから成るベルトルデータ値を保持する手段とを有する。さらに、各ベクトルレジスタは、各ベクトル要素データに対応してそれらベクトル要素データの状態の表示及び参照の条件を制御できる手段を有する。
また、複数のアクセス経路を有する中央記憶装置と、複数の処理装置と、接続手段とを有するマルチプロセッサシステムが知られている(特許文献2参照)。複数の処理装置は、それぞれが内部情報経路を有し、それぞれが複数のポートを介して中央記憶装置のアクセス経路に接続される。ポートは、処理装置から内部情報経路を介して基準要求を受け取ると共に、アクセス経路を介して中央記憶装置へのメモリ基準を発生しかつ制御する。接続手段は、1つ又は複数の共用レジスタ、及び共用レジスタがプロセッサ内動作に比例する速度でアクセスされるように共用レジスタを処理装置のそれぞれの内部情報経路に接続する。
特開昭64−57366号公報 特開昭60−37064号公報
マルチプロセッサシステムは、複数のプロセッサを用いることにより、演算速度を向上させることができる。しかし、プロセッサの演算に必要なデータの転送量が多い場合には、データ転送時間が長くなるので、マルチプロセッサシステムは、プロセッサの数を増やしても、演算効率が低下してしまう。また、ベクトルレジスタの容量が大きい場合には、マルチプロセッサシステムの面積及びコストが増加してしまう。
1つの側面では、本発明の目的は、演算部の演算に必要なデータの転送量又はデータ保持部の容量を削減することができる演算処理装置、情報処理装置及び演算処理装置の制御方法を提供することである。
演算処理装置は、各々がデータを記憶する複数の第1のデータ保持部と、データを記憶する共有データ保持部と、各々が、前記複数の第1のデータ保持部に記憶されているデータと前記共有データ保持部に記憶されているデータをそれぞれ用いて演算を行う複数の演算部とを有する。
1つの側面では、演算部の演算に必要なデータの転送量又はデータ保持部の容量を削減することができる。
図1は、第1の実施形態による情報処理装置の構成例を示す図である。 図2は、実行部の構成例を示す図である。 図3は、第1の基本技術による実行部の構成例を示す図である。 図4は、第2の基本技術による実行部の構成例を示す図である。 図5は、演算器内の8個のFMA演算部を示す図である。 図6は、第3の基本技術による実行部の構成例を示す図である。 図7は、第4の基本技術による実行部の構成例を示す図である。 図8は、第1の実施形態による実行部の構成例を示す図である。 図9は、第1の実施形態による他の実行部の構成例を示す図である。 図10は、共有ベクトルレジスタとローカルベクトルレジスタのアドレスマップの例を示す図である。 図11は、図9の演算処理装置の制御方法を示す図である。 図12は、第2の実施形態による実行部の構成例を示す図である。 図13は、第2の実施形態による他の実行部の構成例を示す図である。 図14は、図13の演算処理装置の制御方法を示す図である。 図15は、第3の実施形態による実行部の構成例を示す図である。 図16は、図15の演算処理装置の制御方法を示す図である。
(第1の実施形態)
図1は、第1の実施形態による情報処理装置100の構成例を示す図である。情報処理装置100は、例えばサーバ又はスーパーコンピュータ等のコンピュータであり、演算処理装置101と、入出力装置102と、主記憶装置103とを有する。入出力装置102は、キーボード、表示装置、及びハードディスクドライブ装置等を有する。主記憶装置103は、メインメモリであり、データを記憶する。演算処理装置101は、入出力装置102及び主記憶装置103に接続される。
演算処理装置101は、例えばプロセッサであり、ロードストア部104と、制御部105と、実行部106とを有する。制御部105は、ロードストア部104及び実行部106を制御する。ロードストア部104は、キャッシュメモリ107を有し、入出力装置102、主記憶装置103及び実行部106に対して、データを入出力する。キャッシュメモリ107は、主記憶装置103に記憶されている命令及びデータのうちの使用頻度が高い一部の命令及びデータを記憶する。実行部106は、キャッシュメモリ107に記憶されているデータを用いて演算を行う。
図2は、実行部106の構成例を示す図である。実行部106は、データ保持部としてのローカルベクトルレジスタLR1と、FMA(fused multiply-add)演算部200とを有する。FMA演算部200は、積和演算を行う積和演算処理部であり、レジスタ201〜203と、乗算器204と、加減算器205と、レジスタ206とを有する。
制御部105は、キャッシュメモリ107とローカルベクトルレジスタLR1との間でデータを転送することができる。ローカルベクトルレジスタLR1は、データOP1、OP2及びOP3を記憶する。レジスタ201は、ローカルベクトルレジスタLR1が出力するデータOP1を記憶する。レジスタ202は、ローカルベクトルレジスタLR1が出力するデータOP2を記憶する。レジスタ203は、ローカルベクトルレジスタLR1が出力するデータOP3を記憶する。
乗算器204は、レジスタ201に記憶されているデータOP1とレジスタ202に記憶されているデータOP2の乗算を行い、乗算結果を出力する。加減算器205は、乗算器204の出力データとレジスタ203に記憶されているデータOP3との加算又は減算を行い、演算結果を出力する。レジスタ206は、加減算器205の出力データを記憶し、その記憶しているデータRRをローカルベクトルレジスタLR1に出力する。
実行部106は、式(1)のように、行列データAと行列データBの積を演算し、行列データCを出力する。行列データAは、m行n列のデータである。行列データBは、n行p列のデータである。行列データCは、m行p列のデータである。
Figure 2018206128
行列データCの要素データcijは、式(2)で表される。ここで、要素データaikは、行列データAの要素データである。要素データbkjは、行列データBの要素データである。
Figure 2018206128
例えば、要素データc11は、式(3)で表される。実行部106は、行列データAの第1の行データa11、a12、a13、a14、・・・、a1nと行列データBの第1の列データb11、b21、b31、b41、・・・、bn1との積和演算により、要素データc11を求めることができる。
11=a1111+a1221+a1331+a1441+・・・+a1nn1 ・・・(3)
まず、制御部105は、キャッシュメモリ107に記憶されている行列データA及びBをデータ保持部としてのローカルベクトルレジスタLR1に転送する。第1のサイクルでは、ローカルベクトルレジスタLR1は、データOP1として要素データa11を出力し、データOP2として要素データb11を出力し、データOP3として0を出力する。すると、FMA演算部200は、OP1×OP2+OP3の演算により、データRRとしてa1111を出力する。ローカルベクトルレジスタLR1は、データRRとしてa1111を記憶する。
次に、第2のサイクルでは、ローカルベクトルレジスタLR1は、データOP1として要素データa12を出力し、データOP2として要素データb21を出力し、データOP3として前サイクルのデータRR(=a1111)を出力する。すると、FMA演算部200は、OP1×OP2+OP3の演算により、データRRとしてa1111+a1221を出力する。ローカルベクトルレジスタLR1は、データRRとしてa1111+a1221を記憶する。
次に、第3のサイクルでは、ローカルベクトルレジスタLR1は、データOP1として要素データa13を出力し、データOP2として要素データb31を出力し、データOP3として前サイクルのデータRR(=a1111+a1221)を出力する。すると、FMA演算部200は、OP1×OP2+OP3の演算により、データRRとしてa1111+a1221+a1331を出力する。ローカルベクトルレジスタLR1は、データRRとしてa1111+a1221+a1331を記憶する。以降、実行部106は、同様の処理を繰り返し、式(3)により、要素データc11を求める。
なお、制御部105は、要素データc11を示す最終サイクルのデータRRのみをローカルベクトルレジスタLR1に書き込み、途中サイクルのデータRRをローカルベクトルレジスタLR1に書き込まないようにしてもよい。
また、要素データc12は、式(4)で表される。実行部106は、行列データAの第1の行データa11、a12、a13、a14、・・・、a1nと行列データBの第2の列データb12、b22、b32、b42、・・・、bn2との積和演算により、要素データc12を求めることができる。
12=a1112+a1222+a1332+a1442+・・・+a1nn2 ・・・(4)
また、要素データc1pは、式(5)で表される。実行部106は、行列データAの第1の行データa11、a12、a13、a14、・・・、a1nと行列データBの第pの列データb1p、b2p、b3p、b4p、・・・、bnpとの積和演算により、要素データc1pを求めることができる。
1p=a111p+a122p+a133p+a144p+・・・+a1nnp ・・・(5)
また、要素データcm1は、式(6)で表される。実行部106は、行列データAの第mの行データam1、am2、am3、am4、・・・、amnと行列データBの第1の列データb11、b21、b31、b41、・・・、bn1との積和演算により、要素データcm1を求めることができる。
m1=am111+am221+am331+am441+・・・+amnn1 ・・・(6)
また、要素データcm2は、式(7)で表される。実行部106は、行列データAの第mの行データam1、am2、am3、am4、・・・、amnと行列データBの第2の列データb12、b22、b32、b42、・・・、bn2との積和演算により、要素データcm2を求めることができる。
m2=am112+am222+am332+am442+・・・+amnn2 ・・・(7)
また、要素データcmpは、式(8)で表される。実行部106は、行列データAの第mの行データam1、am2、am3、am4、・・・、amnと行列データBの第pの列データb1p、b2p、b3p、b4p、・・・、bnpとの積和演算により、要素データcmpを求めることができる。
mp=am11p+am22p+am33p+am44p+・・・+amnnp ・・・(8)
以上のように、データOP1は、行列データAである。データOP2は、行列データBである。データRRは、行列データCである。ローカルベクトルレジスタLR1には、行列データCが書き込まれる。制御部105は、ローカルベクトルレジスタLR1の行列データCをキャッシュメモリ107に転送する。
図3は、第1の基本技術による実行部106の構成例を示す図である。実行部106は、8個のローカルベクトルレジスタLR1〜LR8と、8個の演算器EX1〜EX8と、セレクタ300を有する。演算器EX1〜EX8の各々は、1個のFMA演算部200を有する。FMA演算部200は、図2のFMA演算部200と同じ構成を有する。
キャッシュメモリ107は、行列データA及びBを記憶する。演算処理装置101は、大きな要素数をもつ行列データA及びBの積を求めるに当たり、演算器EX1〜EX8毎に小さな部分行列同士の積を算出することを繰り返す。行列データA、B及びCは、それぞれ、200×200の正方行列データである。8個のFMA演算部200の各々は、20×20行列ずつ演算する。1要素データは、4バイトである。
演算器EX1〜EX8の各々は、20×20行列の演算を行う。制御部105は、キャッシュメモリ107に記憶されている行列データAのうちの20×20行列×4バイト=1.6kバイトの部分行列データA1をローカルベクトルレジスタLR1に転送する。そして、制御部105は、キャッシュメモリ107に記憶されている行列データBのうちの20×20行列×4バイト=1.6kバイトの部分行列データB1をローカルベクトルレジスタLR1に転送する。
同様に、制御部105は、キャッシュメモリ107に記憶されている行列データAのうちの20×20行列×4バイト=1.6kバイトの異なる部分行列データA2〜A8をローカルベクトルレジスタLR2〜LR8にそれぞれ転送する。そして、制御部105は、キャッシュメモリ107に記憶されている行列データBのうちの20×20行列×4バイト=1.6kバイトの異なる部分行列データB2〜B8をローカルベクトルレジスタLR2〜LR8にそれぞれ転送する。
演算器EX1〜EX8は、それぞれ、20×20の部分行列データA1〜A8と20×20の部分行列データB1〜B8の積を演算し、行列データCのうちの異なる20×20の部分行列データC1〜C8を求める。制御部105は、演算器EX1〜EX8により求められた20×20の部分行列データC1〜C8をローカルベクトルレジスタLR1〜LR8にそれぞれ書き込む。ローカルベクトルレジスタLR1〜LR8は、それぞれ、20×20行列×4バイト=1.6kバイトの異なる部分行列データC1〜C8を記憶する。
ローカルベクトルレジスタLR1〜LR8は、それぞれ、1.6kバイト×3行列=4.8kバイトの容量を有する。ローカルベクトルレジスタLR1〜LR8の合計容量は、4.8kバイト×8=38.4kバイトである。
次に、200×200の正方行列の積を求めるための積和演算処理サイクル数を説明する。20×20の正方行列の1要素を求めるための演算回数は20回であり、20×20の正方行列の積を求めるには、20回×400要素=8000回の演算が必要である。実行部106は、20×20の正方行列の積を10回実施することにより、200×200の正方行列のうちの20要素を求めることができる。したがって、積和演算処理サイクル数は、式(9)により、20×106サイクルである。
(8000回×10回/20要素)×40000要素/8[演算器数]=20×106
・・・(9)
次に、200×200の正方行列の積を求めるために必要なデータ量は、式(10)により、96Mバイトである。
(4.8kバイト×10回/20要素)×40000要素=96Mバイト
・・・(10)
上記より、キャッシュメモリ107とローカルベクトルレジスタLR1〜LR8との間のデータ転送量は、式(11)により、4.8バイト/サイクルであり、動作周波数が1GHzである場合には、4.8Gバイト/sである。
96Mバイト/(20×106サイクル)=4.8バイト/サイクル ・・・(11)
図4は、第2の基本技術による実行部106の構成例を示す図である。図4の実行部106は、図3の実行部106に対して、演算器EX1〜EX8が異なる。図3の演算器EX1〜EX8の各々は、1個のFMA演算部200を有する。これに対し、図4の演算器EX1〜EX8の各々は、8個のFMA演算部200を有するSIMD(Single Instruction Multiple Data)演算器である。SIMD演算器EX1〜EX8は、それぞれ、一つの命令指示により、複数のデータに対して同一種の演算を行う。以下、図4の実行部106が図3の実行部106と異なる点を説明する。
図5は、演算器EX1内の8個のFMA演算部200を示す図である。8個のFMA演算部200は、それぞれ、相互に異なるデータOP1〜OP3を入力し、データRRを出力する。
次に、図4を参照しながら、データ保持部としてのローカルベクトルレジスタLR1〜LR8の容量を説明する。図4の演算器EX1〜EX8は、それぞれ、図3の演算器EX1〜EX8に対して、8倍の数のFMA演算部200を有する。したがって、図4の部分行列データA1は、図3の部分行列データA1の8倍の量であり、1.6kバイト×8=12.8kバイトである。同様に、図4の部分行列データA2〜A8、B1〜B8及びC1〜C8も、それぞれ、12.8kバイトである。ローカルベクトルレジスタLR1の容量は、12.8kバイト×3行列=38.4kバイトである。同様に、ローカルベクトルレジスタLR2〜LR8の容量も、それぞれ、12.8kバイト×3行列=38.4kバイトである。ローカルベクトルレジスタLR1〜LR8の合計容量は、38.4kバイト×8≒307kバイトである。
次に、キャッシュメモリ107とローカルベクトルレジスタLR1〜LR8との間のデータ転送量を説明する。図4のデータ転送量は、図3のデータ転送量の8倍であるので、4.8Gバイト/s×8=38.4Gバイト/sである。
次に、演算処理装置101の制御方法を説明する。キャッシュメモリ107は、行列データA及びBを記憶する。制御部105は、キャッシュメモリ107に記憶されている部分行列データA1〜A8をローカルベクトルレジスタLR1〜LR8にそれぞれ転送する。次に、制御部105は、キャッシュメモリ107に記憶されている部分行列データB1〜B8をローカルベクトルレジスタLR1〜LR8にそれぞれ転送する。次に、ローカルベクトルレジスタLR1〜LR8は、それぞれ、データOP1〜OP3をサイクル毎に演算器EX1〜EX8に出力する。演算器EX1〜EX8は、それぞれ、8個のFMA演算部200の積和演算を繰り返し、8個のデータRRを出力する。制御部105は、演算器EX1〜EX8が出力するデータRRを部分行列データC1〜C8として、ローカルベクトルレジスタLR1〜LR8にそれぞれ書き込む。そして、制御部105は、ローカルベクトルレジスタLR1〜LR8に記憶されている部分行列データC1〜C8を、セレクタ300を介して、順にキャッシュメモリ107に転送する。
演算処理装置101は、上記の38.4Gバイト/sのデータ転送速度を満たせない場合、演算器EX1〜EX8に必要なデータを供給できず、演算器EX1〜EX8を休ませることになる。すなわち、キャッシュメモリ107のバス帯域不足による性能低下となる。なお、演算処理装置101は、部分行列の演算を繰り返すためには、同じ行列要素を何度もキャッシュメモリ107からローカルベクトルレジスタLR1〜LR8に転送する必要があり、演算処理に対してデータ転送効率が悪い。後に、演算処理に対してデータ転送効率がよい演算処理装置101の実施形態を説明する。
図6は、第3の基本技術による実行部106の構成例を示す図である。図6の実行部106は、図3の実行部106に対して、ローカルベクトルレジスタLR1〜LR8が記憶するデータが異なる。演算器EX1〜EX8の各々は、1個のFMA演算部200を有する。キャッシュメモリ107は、200×200の行列データAと200×200の行列データBを記憶する。以下、図6の実行部106が図3の実行部106と異なる点を説明する。
実行部106は、大きな要素数をもつ行列データA及びBの積を求めるに当たり、演算器EX1〜EX8毎に行列の積の要素を1行(ci1,・・・,cip)ずつ算出することを繰り返す。例えば、演算器EX1は、行列データCの第1の行データc11,・・・,c1pを算出する。演算器EX2は、行列データCの第2の行データc21,・・・,c2pを算出する。演算器EX3は、行列データCの第3の行データc31,・・・,c3pを算出する。同様に、演算器EX4〜EX8は、それぞれ、行列データCの第4〜第8の行データを算出する。実行部106は、200×200の正方行列の積を求めるに当たり、1個のFMA演算部200毎に1×200行列ずつ演算する。1要素は4バイトである。
制御部105は、キャッシュメモリ107に記憶されている行列データAのうちの1×200行列×4バイト=0.8kバイトの部分行列データA1をローカルベクトルレジスタLR1に転送する。次に、制御部105は、キャッシュメモリ107に記憶されている200×200行列×4バイト=160kバイトの行列データBをローカルベクトルレジスタLR1に転送する。同様に、制御部105は、キャッシュメモリ107に記憶されている行列データAのうちの1×200行列×4バイト=0.8kバイトの異なる部分行列データA2〜A8をローカルベクトルレジスタLR2〜LR8にそれぞれ転送する。また、制御部105は、キャッシュメモリ107に記憶されている200×200行列×4バイト=160kバイトの行列データBをローカルベクトルレジスタLR2〜LR8に転送する。ローカルベクトルレジスタLR1〜LR8は、それぞれ、行列データBの全要素を記憶する。
演算器EX1〜EX8は、それぞれ、1×200の部分行列データA1〜A8と200×200の行列データBの積を演算し、行列データCのうちの異なる1×200の部分行列データC1〜C8を求める。例えば、演算器EX1は、行列データAの第1の行データと行列データBの積和演算により、行列データCの第1の行データを算出する。演算器EX2は、行列データAの第2の行データと行列データBの積和演算により、行列データCの第2の行データを算出する。制御部105は、演算器EX1〜EX8により求められた1×200の部分行列データC1〜C8をローカルベクトルレジスタLR1〜LR8にそれぞれ書き込む。ローカルベクトルレジスタLR1〜LR8は、それぞれ、1×200行列×4バイト=0.8kバイトの異なる部分行列データC1〜C8を記憶する。
ローカルベクトルレジスタLR1〜LR8は、それぞれ、0.8kバイト+160kバイト+0.8kバイト≒162kバイトの容量を有する。ローカルベクトルレジスタLR1〜LR8の合計容量は、162kバイト×8≒1.3Mバイトである。
次に、200×200の正方行列の積を求めるための積和演算処理サイクル数を説明する。行列データCの1×200の部分行列の1要素を求めるための演算回数は200回である。200×200の行列データCを算出するための積和演算処理サイクル数は、式(12)により、1×106サイクルである。
200×200行列×200回/8[演算器数]=1×106サイクル
・・・(12)
次に、200×200の正方行列の積を求めるために必要なデータ量は、式(13)により、480kバイトである。
200×200行列×3[行列数]×4バイト=480kバイト ・・・(13)
上記より、キャッシュメモリ107とローカルベクトルレジスタLR1〜LR8との間のデータ転送量は、式(14)により、0.48バイト/サイクルであり、動作周波数が1GHzである場合には、480Mバイト/sである。
480kバイト/(1×106サイクル)=0.48バイト/サイクル
・・・(14)
図7は、第4の基本技術による実行部106の構成例を示す図である。図7の実行部106は、図6の実行部106に対して、演算器EX1〜EX8が異なる。図6の演算器EX1〜EX8の各々は、1個のFMA演算部200を有する。これに対し、図7の演算器EX1〜EX8の各々は、8個のFMA演算部200を有するSIMD演算器である。以下、図7の実行部106が図6の実行部106と異なる点を説明する。
まず、ローカルベクトルレジスタLR1〜LR8の容量を説明する。図7の演算器EX1〜EX8は、それぞれ、図6の演算器EX1〜EX8に対して、8倍の数のFMA演算部200を有する。部分行列データA1は、1×200行列×8×4バイト=6.4kバイトである。同様に、部分行列データA2〜A8及びC1〜C8も、それぞれ、6.4kバイトである。行列データBは、200×200行列×4バイト=160kバイトである。ローカルベクトルレジスタLR1の容量は、6.4kバイト+160kバイト+6.4kバイト≒173kバイトである。同様に、ローカルベクトルレジスタLR2〜LR8の容量も、それぞれ、173kバイトである。ローカルベクトルレジスタLR1〜LR8の合計容量は、173kバイト×8≒1.4Mバイトである。
次に、キャッシュメモリ107とローカルベクトルレジスタLR1〜LR8との間のデータ転送量を説明する。図7のデータ転送量は、図6のデータ転送量の8倍であるので、480Mバイト/s×8=3.84Gバイト/sである。
図4の演算処理装置101は、上記のように、ローカルベクトルレジスタLR1〜LR8の合計容量が307kバイトであり、データ転送量が38.4Gバイト/sである。したがって、図7の演算処理装置101は、図4の演算処理装置101に対して、データ転送量が3.84G/38.4G=1/10であるが、ローカルベクトルレジスタLR1〜LR8の合計容量が1.4M/307k≒4倍であり、大きい。また、図7のローカルベクトルレジスタLR1〜LR8は、それぞれ、大部分が同じ行列データBであり、使用効率が悪い。後に、ローカルベクトルレジスタLR1〜LR8の合計容量が小さい演算処理装置101の実施形態を説明する。
次に、演算処理装置101の制御方法を説明する。キャッシュメモリ107は、行列データA及びBを記憶する。制御部105は、キャッシュメモリ107に記憶されている部分行列データA1〜A8をローカルベクトルレジスタLR1〜LR8にそれぞれ転送し、キャッシュメモリ107に記憶されている行列データBをローカルベクトルレジスタLR1〜LR8にそれぞれ転送する。ローカルベクトルレジスタLR1〜LR8は、それぞれ、行列データBの全要素を記憶する。次に、ローカルベクトルレジスタLR1〜LR8は、それぞれ、データOP1〜OP3をサイクル毎に演算器EX1〜EX8に出力する。演算器EX1〜EX8は、それぞれ、8個のFMA演算部200の積和演算を繰り返し、8個のデータRRを出力する。制御部105は、演算器EX1〜EX8が出力するデータRRを部分行列データC1〜C8として、ローカルベクトルレジスタLR1〜LR8にそれぞれ書き込む。そして、制御部105は、ローカルベクトルレジスタLR1〜LR8に記憶されている部分行列データC1〜C8を、セレクタ300を介して、順にキャッシュメモリ107に転送する。
図8は、第1の実施形態による実行部106の構成例を示す図である。実行部106は、8個の演算器EX1〜EX8と、セレクタ300と、演算器EX1〜EX8から共有される共有データ保持部としての共有ベクトルレジスタSRと、演算器EX1〜EX8の各々に対して備えられるデータ保持部としての8個のローカルベクトルレジスタLR1〜LR8とを有する。演算器EX1〜EX8の各々は、1個のFMA演算部200を有する。FMA演算部200は、図2のFMA演算部200と同じ構成を有する。
キャッシュメモリ107は、200×200の行列データA及び200×200行列データBを記憶する。実行部106は、行列データA及びBの積を求めるに当たり、演算器EX1〜EX8毎に行列の積の要素を1行(ci1,・・・,cip)ずつ算出することを繰り返す。例えば、演算器EX1は、行列データCの第1の行データc11,・・・,c1pを算出する。演算器EX2は、行列データCの第2の行データc21,・・・,c2pを算出する。演算器EX3は、行列データCの第3の行データc31,・・・,c3pを算出する。同様に、演算器EX4〜EX8は、それぞれ、行列データCの第4〜第8の行データを算出する。実行部106は、200×200の正方行列の積を求めるに当たり、1個のFMA演算部200毎に1×200行列ずつ演算する。1要素は4バイトである。
制御部105は、キャッシュメモリ107に記憶されている行列データAのうちの1×200行列×4バイト=0.8kバイトの第1の行の部分行列データA1をローカルベクトルレジスタLR1に転送する。同様に、制御部105は、キャッシュメモリ107に記憶されている行列データAのうちの1×200行列×4バイト=0.8kバイトの第2〜第8の行の部分行列データA2〜A8をローカルベクトルレジスタLR2〜LR8にそれぞれ転送する。また、制御部105は、キャッシュメモリ107に記憶されている200×200行列×4バイト=160kバイトの行列データBを共有ベクトルレジスタSRに転送する。共有ベクトルレジスタSRは、行列データBの全要素を記憶する。
ローカルベクトルレジスタLR1〜LR8は、それぞれ、データOP1及びOP3を演算器EX1〜EX8に出力する。共有ベクトルレジスタSRは、データOP2を演算器EX1〜EX8に出力する。データOP1は、部分行列データA1〜A8である。データOP2は、行列データBである。データOP3は、前サイクルのデータRRであり、初期値が0である。
演算器EX1〜EX8は、8×200の第1〜第8の行の部分行列データA1〜A8と200×200の行列データBの積を演算し、行列データCのうちの8×200の第1〜第8の行の部分行列データC1〜C8を求める。例えば、演算器EX1は、行列データAの第1の行データと行列データBの積和演算により、行列データCの第1の行データを算出する。演算器EX2は、行列データAの第2の行データと行列データBの積和演算により、行列データCの第2の行データを算出する。制御部105は、演算器EX1〜EX8により求められた部分行列データC1〜C8をローカルベクトルレジスタLR1〜LR8にそれぞれ書き込む。ローカルベクトルレジスタLR1〜LR8は、それぞれ、1×200行列×4バイト=0.8kバイトの異なる部分行列データC1〜C8を記憶する。
以降、演算処理装置101は、上記の処理を8行単位で繰り返す。すなわち、制御部105は、キャッシュメモリ107に記憶されている行列データAのうちの8×200の第9〜第16の行の部分行列データA1〜A8をローカルベクトルレジスタLR1〜LR8にそれぞれ転送する。演算器EX1〜EX8は、8×200の第9〜第16の行の部分行列データA1〜A8と200×200の行列データBの積を演算し、8×200の第9〜第16の行の部分行列データC1〜C8を求める。演算処理装置101は、上記の処理を第200の行まで繰り返す。
行列データBは、上記のように、160kバイトである。したがって、共有ベクトルレジスタSRは、160kバイトの容量を有する。ローカルベクトルレジスタLR1〜LR8は、それぞれ、0.8kバイト+0.8kバイト=1.6kバイトの容量を有する。ローカルベクトルレジスタLR1〜LR8の合計容量は、1.6kバイト×8≒13kバイトである。共有ベクトルレジスタSRとローカルベクトルレジスタLR1〜LR8の合計容量は、160kバイト+13kバイト=173kバイトである。
次に、200×200の正方行列の積を求めるための積和演算処理サイクル数を説明する。行列データCの1×200の部分行列の1要素を求めるための演算回数は200回である。200×200の行列データCを算出するための積和演算処理サイクル数は、式(15)により、1×106サイクルである。
200×200行列×200回/8[演算器数]=1×106サイクル
・・・(15)
次に、200×200の正方行列の積を求めるために必要なデータ量は、式(16)により、480kバイトである。
200×200行列×3[行列数]×4バイト=480kバイト ・・・(16)
上記より、キャッシュメモリ107とローカルベクトルレジスタLR1〜LR8との間のデータ転送量は、式(17)により、0.48バイト/サイクルであり、動作周波数が1GHzである場合には、480Mバイト/sである。
480kバイト/(1×106サイクル)=0.48バイト/サイクル
・・・(17)
図9は、第1の実施形態による他の実行部106の構成例を示す図である。図9の実行部106は、図8の実行部106に対して、演算器EX1〜EX8が異なる。図8の演算器EX1〜EX8の各々は、1個のFMA演算部200を有する。これに対し、図9の演算器EX1〜EX8の各々は、8個のFMA演算部200を有するSIMD演算器である。以下、図9の実行部106が図8の実行部106と異なる点を説明する。
図9の共有ベクトルレジスタSRは、図8の共有ベクトルレジスタSRと同じく、160kバイトの容量を有する。図9の演算器EX1〜EX8は、それぞれ、図8の演算器EX1〜EX8に対して、8倍の数のFMA演算部200を有する。部分行列データA1は、1×200行列×8×4バイト=6.4kバイトである。同様に、部分行列データA2〜A8及びC1〜C8も、それぞれ、6.4kバイトである。ローカルベクトルレジスタLR1の容量は、6.4kバイト+6.4kバイト≒13kバイトである。同様に、ローカルベクトルレジスタLR2〜LR8の容量も、それぞれ、13kバイトである。ローカルベクトルレジスタLR1〜LR8の合計容量は、13kバイト×8=104kバイトである。共有ベクトルレジスタSRとローカルベクトルレジスタLR1〜LR8の合計容量は、160kバイト+104kバイト=264kバイトである。
次に、キャッシュメモリ107と共有ベクトルレジスタSR及びローカルベクトルレジスタLR1〜LR8との間のデータ転送量を説明する。図9のデータ転送量は、図8のデータ転送量の8倍であるので、480Mバイト/s×8=3.84Gバイト/sである。
図4の演算処理装置101は、上記のように、ローカルベクトルレジスタLR1〜LR8の合計容量が307kバイトであり、データ転送量が38.4Gバイト/sである。また、図7の演算処理装置101は、上記のように、ローカルベクトルレジスタLR1〜LR8の合計容量が1.4Mバイトであり、データ転送量が3.84Gバイト/sである。
したがって、図9の演算処理装置101は、図4の演算処理装置101に対して、データ転送量が3.84G/38.4G=1/10であり、ベクトルレジスタの合計容量が少ない(264k/307k)。また、図9の演算処理装置101は、図7の演算処理装置101に対して、データ転送量が同じであり(3.84Gバイト/s)、ベクトルレジスタの合計容量が264k/1.4M≒1/10である。
図4の演算処理装置101は、部分行列の演算を繰り返すため、同じ行列要素を何度もキャッシュメモリ107からローカルベクトルレジスタLR1〜LR8に転送する必要があるため、データ転送量が多くなる。これに対し、図9の演算処理装置101は、行列Aの同じ行の部分行列データA1〜A8をキャッシュメモリ107からローカルベクトルレジスタLR1〜LR8に1度だけ転送し、行列データBの各要素をキャッシュメモリ107から共有ベクトルレジスタSRに1度だけ転送するので、キャッシュメモリ107とベクトルレジスタの間のデータ転送量を減らすことができる。
また、図7の演算処理装置101は、8個のローカルベクトルレジスタLR1〜LR8の各々に行列データBの全要素を格納する必要がある。これに対し、図9の演算処理装置101は、1個の共有ベクトルレジスタSRのみに行列データBの全要素を格納するため、ベクトルレジスタの合計容量を削減することができる。
また、ローカルベクトルレジスタLR1〜LR8は、それぞれ、演算器EX1〜EX8に対して、データOP1及びOP3の出力ポートと、データRRの入力ポートとを有する。これに対し、共有ベクトルレジスタSRは、演算器EX1〜EX8に対して、データOP2の出力ポートを有し、データの入力ポートを有しない。このため、図9の演算処理装置101は、図4及び図7の演算処理装置101に対して、ベクトルレジスタの面積対容量の効率がよい。以上のように、図9の演算処理装置101は、図4及び図7の演算処理装置101に対して、データ転送量及びベクトルレジスタの合計容量が少なく、演算効率及びコストメリットを向上させることができる。
図10は、共有ベクトルレジスタSRとローカルベクトルレジスタLR1〜LR8のアドレスマップの例を示す図である。共有ベクトルレジスタSRのアドレスは、ローカルベクトルレジスタLR1〜LR8のアドレスとは異なるように割り当てられる。以下、制御部105が共有ベクトルレジスタSR及びローカルベクトルレジスタLR1〜LR8への書き込み及び読み出しを制御する方法を説明する。制御部105は、プログラムを実行することにより、上記の転送及び演算の制御を行うことができる。制御部105は、プログラム等の上位層により、共有ベクトルレジスタSR及びローカルベクトルレジスタLR1〜LR8のアドレスを区別して制御する。これにより、制御部105は、部分行列データA1〜A8をキャッシュメモリ107からローカルベクトルレジスタLR1〜LR8に転送し、行列データBをキャッシュメモリ107から共有ベクトルレジスタSRに転送することができる。
図11は、図9の演算処理装置101の制御方法を示す図である。キャッシュメモリ107は、200×200の行列データAと、200×200の行列データBを記憶する。まず、制御部105は、キャッシュメモリ107に記憶されている行列データAのうちの8×200の第1〜第8の行の部分行列データA1をローカルベクトルレジスタLR1に転送する。また、制御部105は、キャッシュメモリ107に記憶されている行列データAのうちの8×200の第9〜第16の行の部分行列データA2をローカルベクトルレジスタLR2に転送する。同様に、制御部105は、キャッシュメモリ107に記憶されている行列データAのうちの48×200の第17〜第64の行の部分行列データA3〜A8をローカルベクトルレジスタLR3〜LR8に転送する。
次に、制御部105は、キャッシュメモリ107に記憶されている200×200の行列データBを共有ベクトルレジスタSRに転送する。共有ベクトルレジスタSRは、行列データBの全要素を記憶する。ローカルベクトルレジスタLR1〜LR8は、それぞれ、データOP1及びOP3を演算器EX1〜EX8に出力する。共有ベクトルレジスタSRは、データOP2を演算器EX1〜EX8に出力する。データOP1は、部分行列データA1〜A8である。データOP2は、行列データBである。データOP3は、前サイクルのデータRRであり、初期値が0である。ここで、全演算器EX1〜EX8が共有ベクトルレジスタSRから入力する行列データBは同じである。したがって、共有ベクトルレジスタSRは、全演算器EX1〜EX8に行列データBをブロードキャストで出力すればよい。
次に、制御部105は、演算器EX1〜EX8に対して、積和演算の実行開始を指示する。演算器EX1〜EX8は、それぞれ、8×200の部分行列データA1〜A8と200×200の行列データBの積を演算し、行列データCのうちの異なる8×200の部分行列データC1〜C8を求める。例えば、演算器EX1は、行列データAの第1〜第8の行データと行列データBの積和演算により、行列データCの第1〜第8の行データを算出する。演算器EX2は、行列データAの第9〜第16の行データと行列データBの積和演算により、行列データCの第9〜第16の行データを算出する。制御部105は、演算器EX1〜EX8により求められた部分行列データC1〜C8をローカルベクトルレジスタLR1〜LR8にそれぞれ書き込む。ローカルベクトルレジスタLR1〜LR8は、それぞれ、8×200の部分行列データC1〜C8を記憶する。
次に、制御部105は、ローカルベクトルレジスタLR1〜LR8に記憶されている部分行列データC1〜C8を、セレクタ300を介して、順にキャッシュメモリ107に転送する。
以降、演算処理装置101は、上記の処理を64行単位で繰り返す。すなわち、制御部105は、キャッシュメモリ107に記憶されている行列データAのうちの64×200の第65〜第128の行の部分行列データA1〜A8をローカルベクトルレジスタLR1〜LR8に転送する。演算器EX1〜EX8は、64×200の第65〜第128の行の部分行列データA1〜A8と200×200の行列データBの積を演算し、64×200の第65〜第128の行の部分行列データC1〜C8を求める。演算処理装置101は、上記の処理を第200の行まで繰り返す。これにより、キャッシュメモリ107には、200×200の行列データCが記憶される。
なお、上記の制御部105の転送と演算器EX1〜EX8の演算は、並列に行われる。そのため、制御部105が転送している時も、演算器EX1〜EX8は、演算しており、演算効率が低下しない。
(第2の実施形態)
図12は、第2の実施形態による実行部106の構成例を示す図である。図12の実行部106は、図8の実行部106に対して、ローカルベクトルレジスタLR1〜LR8の代わりに、ローカルベクトルレジスタLRA1〜LRA8及びLRC1〜LRC8を設けたものである。以下、本実施形態が第1の実施形態と異なる点を説明する。
ローカルベクトルレジスタLRA1及びLRC1は、図8のローカルベクトルレジスタLR1を分割したものである。ローカルベクトルレジスタLRA1は、キャッシュメモリ107から転送された1×200の部分行列データA1を記憶し、演算器EX1にデータOP1として部分行列データA1を出力する。ローカルベクトルレジスタLRC1は、演算器EX1が出力するデータRRを1×200の部分行列データC1として記憶し、演算器EX1にデータOP3を出力する。
同様に、ローカルベクトルレジスタLRA2〜LRA8及びLRC2〜LRC8は、それぞれ、図8のローカルベクトルレジスタLR2〜LR8を分割したものである。ローカルベクトルレジスタLRA2〜LRA8は、それぞれ、キャッシュメモリ107から転送された1×200の部分行列データA2〜A8を記憶し、演算器EX2〜EX8にデータOP1として部分行列データA2〜A8を出力する。ローカルベクトルレジスタLRC2〜LRC8は、それぞれ、演算器EX1〜EX8が出力するデータRRを1×200の部分行列データC2〜C8として記憶し、演算器EX2〜EX8にデータOP3を出力する。
制御部105は、ローカルベクトルレジスタLRC1〜LRC8に記憶されている部分行列データC1〜C8を、セレクタ300を介して、順にキャッシュメモリ107に転送する。
共有ベクトルレジスタSRとローカルベクトルレジスタLRA1〜LRA8及びLRC1〜LRC8の合計容量は、図8の共有ベクトルレジスタSRとローカルベクトルレジスタLR1〜LR8の合計容量と同じであり、173kバイトである。
また、キャッシュメモリ107と、共有ベクトルレジスタSR及びローカルベクトルレジスタLRA1〜LRA8,LRC1〜LRC8との間のデータ転送量は、図8のキャッシュメモリ107と共有ベクトルレジスタSR及びローカルベクトルレジスタLR1〜LR8との間のデータ転送量と同じであり、480Mバイト/sである。
ローカルベクトルレジスタLRC1〜LRC8は、それぞれ、演算器EX1〜EX8に対して、データOP3の出力ポートと、データRRの入力ポートとを有する。これに対し、ローカルベクトルレジスタLRA1〜LRA8は、それぞれ、演算器EX1〜EX8に対して、データOP1の出力ポートを有し、データの入力ポートを有しない。これにより、ローカルベクトルレジスタLRA1〜LRA8の物量及び配線を削減し、ベクトルレジスタの面積対容量の効率を高めることができる。
図13は、第2の実施形態による他の実行部106の構成例を示す図である。図13の実行部106は、図12の実行部106に対して、演算器EX1〜EX8が異なる。図12の演算器EX1〜EX8の各々は、1個のFMA演算部200を有する。これに対し、図13の演算器EX1〜EX8の各々は、8個のFMA演算部200を有するSIMD演算器である。以下、図13の実行部106が図12の実行部106と異なる点を説明する。
ローカルベクトルレジスタLRA1〜LRA8は、それぞれ、8×200の部分行列データA1〜A8を記憶し、容量が6.4kバイトである。ローカルベクトルレジスタLRC1〜LRC8は、それぞれ、8×200の部分行列データC1〜C8を記憶し、容量が6.4kバイトである。
共有ベクトルレジスタSRとローカルベクトルレジスタLRA1〜LRA8及びLRC1〜LRC8の合計容量は、図9の共有ベクトルレジスタSRとローカルベクトルレジスタLR1〜LR8の合計容量と同じであり、264kバイトである。
また、キャッシュメモリ107と、共有ベクトルレジスタSR及びローカルベクトルレジスタLRA1〜LRA8,LRC1〜LRC8との間のデータ転送量は、図9のキャッシュメモリ107と共有ベクトルレジスタSR及びローカルベクトルレジスタLR1〜LR8との間のデータ転送量と同じであり、3.84Gバイト/sである。
図14は、図13の演算処理装置101の制御方法を示す図である。キャッシュメモリ107は、200×200の行列データAと、200×200の行列データBを記憶する。まず、制御部105は、キャッシュメモリ107に記憶されている行列データAのうちの8×200の第1〜第8の行の部分行列データA1をローカルベクトルレジスタLRA1に転送する。また、制御部105は、キャッシュメモリ107に記憶されている行列データAのうちの8×200の第9〜第16の行の部分行列データA2をローカルベクトルレジスタLRA2に転送する。同様に、制御部105は、キャッシュメモリ107に記憶されている行列データAのうちの48×200の第17〜第64の行の部分行列データA3〜A8をローカルベクトルレジスタLRA3〜LRA8に転送する。
次に、制御部105は、キャッシュメモリ107に記憶されている200×200の行列データBを共有ベクトルレジスタSRに転送する。共有ベクトルレジスタSRは、行列データBの全要素を記憶する。ローカルベクトルレジスタLRA1〜LRA8は、それぞれ、データOP1を演算器EX1〜EX8に出力する。共有ベクトルレジスタSRは、データOP2を演算器EX1〜EX8に出力する。ローカルベクトルレジスタLRC1〜LRC8は、それぞれ、データOP3を演算器EX1〜EX8に出力する。データOP1は、部分行列データA1〜A8である。データOP2は、行列データBである。データOP3は、前サイクルのデータRRであり、初期値が0である。
次に、制御部105は、演算器EX1〜EX8に対して、積和演算の実行開始を指示する。演算器EX1〜EX8は、それぞれ、8×200の部分行列データA1〜A8と200×200の行列データBの積を演算し、行列データCのうちの異なる8×200の部分行列データC1〜C8を求める。例えば、演算器EX1は、行列データAの第1〜第8の行データと行列データBの積和演算により、行列データCの第1〜第8の行データを算出する。演算器EX2は、行列データAの第9〜第16の行データと行列データBの積和演算により、行列データCの第9〜第16の行データを算出する。制御部105は、演算器EX1〜EX8により求められた部分行列データC1〜C8をローカルベクトルレジスタLRC1〜LRC8にそれぞれ書き込む。ローカルベクトルレジスタLRC1〜LRC8は、それぞれ、8×200の部分行列データC1〜C8を記憶する。
次に、制御部105は、ローカルベクトルレジスタLRC1〜LRC8に記憶されている部分行列データC1〜C8を、セレクタ300を介して、順にキャッシュメモリ107に転送する。
以降、演算処理装置101は、上記の処理を64行単位で繰り返す。すなわち、制御部105は、キャッシュメモリ107に記憶されている行列データAのうちの64×200の第65〜第128の行の部分行列データA1〜A8をローカルベクトルレジスタLRA1〜LRA8に転送する。演算器EX1〜EX8は、64×200の第65〜第128の行の部分行列データA1〜A8と200×200の行列データBの積を演算し、64×200の第65〜第128の行の部分行列データC1〜C8を求める。演算処理装置101は、上記の処理を第200の行まで繰り返す。これにより、キャッシュメモリ107には、200×200の行列データCが記憶される。
なお、上記の制御部105の転送と演算器EX1〜EX8の演算は、並列に行われる。そのため、制御部105が転送している時も、演算器EX1〜EX8は、演算しており、演算効率が低下しない。
(第3の実施形態)
図15は、第3の実施形態による実行部106の構成例を示す図である。図15の実行部106は、図7の実行部106に対して、構成が同じであり、制御方法が異なる。実行部106は、8個のローカルベクトルレジスタLR1〜LR8と、8個の演算器EX1〜EX8と、セレクタ300とを有する。演算器EX1〜EX8の各々は、8個のFMA演算部200を有する。ローカルベクトルレジスタLR1は、8×200の部分行列データA1と、200×200の行列データBと、8×200の部分行列データC1を記憶する。同様に、ローカルベクトルレジスタLR2〜LR8は、それぞれ、8×200の部分行列データA2〜A8と、200×200の行列データBと、8×200の部分行列データC2〜C8を記憶する。ローカルベクトルレジスタLR1〜LR8の合計容量は、図7のものと同じであり、173kバイト×8=1.4Mバイトである。以下、図15の演算処理装置101が図7の演算処理装置101と異なる点を説明する。
まず、図7の演算処理装置101の制御方法を説明する。まず、制御部105は、部分行列データA1をキャッシュメモリ107からローカルベクトルレジスタLR1に転送し、行列データBをキャッシュメモリ107からローカルベクトルレジスタLR1に転送する。次に、制御部105は、部分行列データA2をキャッシュメモリ107からローカルベクトルレジスタLR2に転送し、行列データBをキャッシュメモリ107からローカルベクトルレジスタLR2に転送する。その後、同様に、制御部105は、部分行列データA3〜A8をキャッシュメモリ107からローカルベクトルレジスタLR3〜LR8に順に転送し、行列データBをキャッシュメモリ107からローカルベクトルレジスタLR3〜LR8に順に転送する。キャッシュメモリ107とローカルベクトルレジスタLR1〜LR8との間のデータ転送量は、上記のように、3.84Gバイト/sである。
次に、図15の演算処理装置101の制御方法を説明する。まず、制御部105は、部分行列データA1をキャッシュメモリ107からローカルベクトルレジスタLR1に転送する。次に、制御部105は、部分行列データA2をキャッシュメモリ107からローカルベクトルレジスタLR2に転送する。次に、制御部105は、同様に、部分行列データA3〜A8をキャッシュメモリ107からローカルベクトルレジスタLR3〜LR8に順に転送する。次に、制御部105は、キャッシュメモリ107から行列データBを読み出す。キャッシュメモリ107は、行列データBをブロードキャストでローカルベクトルレジスタLR1〜LR8に出力する。制御部105は、同じ行列データBをローカルベクトルレジスタLR1〜LR8に同時に書き込む。
図7の演算処理装置101がキャッシュメモリ107からローカルベクトルレジスタLR1〜LR8に転送する行列データBのデータ量は、160kバイト×8である。これに対し、図15の演算処理装置101がキャッシュメモリ107からローカルベクトルレジスタLR1〜LR8に転送する行列データBのデータ量は、160kバイトである。したがって、図15の演算処理装置101では、キャッシュメモリ107とローカルベクトルレジスタLR1〜LR8との間のデータ転送量は、3.84Gバイト/s−160k×7=2.72Gバイト/sであり、図7のものより少なく、演算効率が向上する。
図16は、図15の演算処理装置101の制御方法を示す図である。キャッシュメモリ107は、200×200の行列データAと、200×200の行列データBを記憶する。まず、制御部105は、キャッシュメモリ107に記憶されている行列データAのうちの8×200の第1〜第8の行の部分行列データA1を読み出し、部分行列データA1をローカルベクトルレジスタLR1に書き込む。次に、制御部105は、キャッシュメモリ107に記憶されている行列データAのうちの8×200の第9〜第16の行の部分行列データA2を読み出し、部分行列データA2をローカルベクトルレジスタLR2に書き込む。同様に、制御部105は、キャッシュメモリ107に記憶されている行列データAのうちの48×200の第17〜第64の行の部分行列データA3〜A8を順に読み出し、部分行列データA3〜A8をローカルベクトルレジスタLR3〜LR8に順に書き込む。
次に、制御部105は、キャッシュメモリ107に記憶されている200×200の行列データBを読み出す。キャッシュメモリ107は、行列データBをブロードキャストでローカルベクトルレジスタLR1〜LR8に出力する。制御部105は、同じ行列データBをローカルベクトルレジスタLR1〜LR8に同時に書き込む。ローカルベクトルレジスタLR1〜LR8は、それぞれ、データOP1〜OP3を演算器EX1〜EX8に出力する。データOP1は、部分行列データA1〜A8である。データOP2は、行列データBである。データOP3は、前サイクルのデータRRであり、初期値が0である。
次に、制御部105は、演算器EX1〜EX8に対して、積和演算の実行開始を指示する。演算器EX1〜EX8は、それぞれ、8×200の部分行列データA1〜A8と200×200の行列データBの積を演算し、行列データCのうちの異なる8×200の部分行列データC1〜C8を求める。例えば、演算器EX1は、行列データAの第1〜第8の行データと行列データBの積和演算により、行列データCの第1〜第8の行データを算出する。演算器EX2は、行列データAの第9〜第16の行データと行列データBの積和演算により、行列データCの第9〜第16の行データを算出する。制御部105は、演算器EX1〜EX8により求められた部分行列データC1〜C8をローカルベクトルレジスタLR1〜LR8にそれぞれ書き込む。ローカルベクトルレジスタLR1〜LR8は、それぞれ、8×200の部分行列データC1〜C8を記憶する。
次に、制御部105は、ローカルベクトルレジスタLR1〜LR8に記憶されている部分行列データC1〜C8を、セレクタ300を介して、順にキャッシュメモリ107に転送する。
以降、演算処理装置101は、上記の処理を64行単位で繰り返す。すなわち、制御部105は、キャッシュメモリ107に記憶されている行列データAのうちの64×200の第65〜第128の行の部分行列データA1〜A8をローカルベクトルレジスタLR1〜LR8に転送する。演算器EX1〜EX8は、64×200の第65〜第128の行の部分行列データA1〜A8と200×200の行列データBの積を演算し、64×200の第65〜第128の行の部分行列データC1〜C8を求める。演算処理装置101は、上記の処理を第200の行まで繰り返す。これにより、キャッシュメモリ107には、200×200の行列データCが記憶される。
以上のように、第1〜第3の実施形態によれば、演算器EX1〜EX8の演算に必要なデータの転送量又はベクトルレジスタの容量を削減することができる。これにより、演算処理装置101は、行列の乗算処理などの科学技術計算において、演算器EX1〜EX8の個数を増やした分だけ性能を向上させることができる。
なお、上記実施形態は、何れも本発明を実施するにあたっての具体化の例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、又はその主要な特徴から逸脱することなく、様々な形で実施することができる。
100 情報処理装置
101 演算処理装置
102 入出力装置
103 主記憶装置
104 ロードストア部
105 制御部
106 実行部
107 キャッシュメモリ
200 FMA演算部
300 セレクタ
SR 共有ベクトルレジスタ
LR1〜LR8 ローカルベクトルレジスタ
EX1〜EX8 演算器

Claims (15)

  1. 各々がデータを記憶する複数の第1のデータ保持部と、
    データを記憶する共有データ保持部と、
    各々が、前記複数の第1のデータ保持部に記憶されているデータと前記共有データ保持部に記憶されているデータをそれぞれ用いて演算を行う複数の演算部と
    を有することを特徴とする演算処理装置。
  2. 前記複数の第1のデータ保持部は、第1の行列データを記憶し、
    前記共有データ保持部は、第2の行列データを記憶し、
    前記複数の演算部は、前記第1の行列データと前記第2の行列データの演算を行うこと特徴とする請求項1に記載の演算処理装置。
  3. 前記複数の第1のデータ保持部は、それぞれ、前記第1の行列データのうちの異なる行データを記憶し、
    前記複数の演算部の各々は、積和演算処理部を有し、
    前記積和演算処理部は、前記第1の行列データのうちの1つの行データと、前記第2の行列データのうちの1つの列データとの積和演算を行い、
    前記複数の演算部は、前記第1の行列データと前記第2の行列データの積を演算し、第3の行列データを出力することを特徴とする請求項2に記載の演算処理装置。
  4. 前記複数の第1のデータ保持部は、それぞれ、前記第1の行列データのうちの異なる1つの行データを記憶し、
    前記複数の演算部の各々は、1個の積和演算処理部を有することを特徴とする請求項3に記載の演算処理装置。
  5. 前記複数の第1のデータ保持部は、それぞれ、前記第1の行列データのうちの異なる複数の行データを記憶し、
    前記複数の演算部の各々は、複数の積和演算処理部を有することを特徴とする請求項3に記載の演算処理装置。
  6. 前記複数の演算部は、前記第3の行列データをそれぞれ前記複数の第1のデータ保持部に書き込むことを特徴とする請求項3〜5のいずれか1項に記載の演算処理装置。
  7. さらに、前記第1の行列データと前記第2の行列データを記憶するメモリ部と、
    前記メモリ部に記憶されている前記第1の行列データを前記複数の第1のデータ保持部に転送し、前記メモリ部に記憶されている前記第2の行列データを前記共有データ保持部に転送し、前記複数の第1のデータ保持部に記憶されている前記第3の行列データを前記メモリ部に転送する制御部とを有することを特徴とする請求項6に記載の演算処理装置。
  8. さらに、複数の第2のデータ保持部を有し、
    前記複数の演算部は、前記第3の行列データをそれぞれ前記複数の第2のデータ保持部に書き込むことを特徴とする請求項3〜5のいずれか1項に記載の演算処理装置。
  9. さらに、前記第1の行列データと前記第2の行列データを記憶するメモリ部と、
    前記メモリ部に記憶されている前記第1の行列データを前記複数の第1のデータ保持部に転送し、前記メモリ部に記憶されている前記第2の行列データを前記共有データ保持部に転送し、前記複数の第2のデータ保持部に記憶されている前記第3の行列データを前記メモリ部に転送する制御部とを有することを特徴とする請求項8に記載の演算処理装置。
  10. データを記憶するメモリ部と、
    複数のデータ保持部と、
    前記メモリ部に記憶されている異なる第1のデータを前記複数のデータ保持部に書き込み、前記メモリ部に記憶されている同じ第2のデータを前記複数のデータ保持部に同時に書き込む制御部と、
    各々が、前記複数のデータ保持部に記憶されている前記第1のデータと前記第2のデータをそれぞれ用いて演算を行い、第3のデータを出力する複数の演算部とを有し、
    前記複数の演算部は、前記第3のデータを前記複数のデータ保持部に書き込み、
    前記制御部は、前記複数のデータ保持部に記憶されている前記第3のデータを前記メモリ部に転送することを特徴とする演算処理装置。
  11. 前記第1のデータは、第1の行列データであり、
    前記第2のデータは、第2の行列データであり、
    前記第3のデータは、第3の行列データであり、
    前記複数の演算部は、前記第1の行列データと前記第2の行列データの演算を行い、前記第3の行列データを出力すること特徴とする請求項10に記載の演算処理装置。
  12. 前記複数のデータ保持部は、それぞれ、前記第1の行列データのうちの異なる行データを記憶し、
    前記複数の演算部の各々は、積和演算処理部を有し、
    前記積和演算処理部は、前記第1の行列データのうちの1つの行データと、前記第2の行列データのうちの1つの列データとの積和演算を行い、
    前記複数の演算部は、前記第1の行列データと前記第2の行列データの積を演算し、前記第3の行列データを出力することを特徴とする請求項11に記載の演算処理装置。
  13. 前記複数のデータ保持部は、それぞれ、前記第1の行列データのうちの異なる複数の行データを記憶し、
    前記複数の演算部の各々は、複数の積和演算処理部を有することを特徴とする請求項12に記載の演算処理装置。
  14. データを記憶する主記憶装置と、
    前記主記憶装置に接続される演算処理装置とを有し、
    前記演算処理装置は、
    各々がデータを記憶する複数の第1のデータ保持部と、
    データを記憶する共有データ保持部と、
    各々が、前記複数の第1のデータ保持部に記憶されているデータと前記共有データ保持部に記憶されているデータをそれぞれ用いて演算を行う複数の演算部と
    を有することを特徴とする情報処理装置。
  15. 演算処理装置の制御方法であって、
    前記演算処理装置が有する複数の第1のデータ保持部の各々が、データを記憶し、
    前記演算処理装置が有する共有データ保持部が、データを記憶し、
    前記演算処理装置が有する複数の演算部の各々が、前記複数の第1のデータ保持部に記憶されているデータと前記共有データ保持部に記憶されているデータをそれぞれ用いて演算を行うことを特徴とする演算処理装置の制御方法。
JP2017111695A 2017-06-06 2017-06-06 演算処理装置、情報処理装置及び演算処理装置の制御方法 Active JP6898554B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2017111695A JP6898554B2 (ja) 2017-06-06 2017-06-06 演算処理装置、情報処理装置及び演算処理装置の制御方法
US15/990,854 US20180349061A1 (en) 2017-06-06 2018-05-29 Operation processing apparatus, information processing apparatus, and method of controlling operation processing apparatus

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2017111695A JP6898554B2 (ja) 2017-06-06 2017-06-06 演算処理装置、情報処理装置及び演算処理装置の制御方法

Publications (2)

Publication Number Publication Date
JP2018206128A true JP2018206128A (ja) 2018-12-27
JP6898554B2 JP6898554B2 (ja) 2021-07-07

Family

ID=64459639

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2017111695A Active JP6898554B2 (ja) 2017-06-06 2017-06-06 演算処理装置、情報処理装置及び演算処理装置の制御方法

Country Status (2)

Country Link
US (1) US20180349061A1 (ja)
JP (1) JP6898554B2 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10762035B1 (en) 2019-02-08 2020-09-01 Hewlett Packard Enterprise Development Lp Matrix tiling to accelerate computing in redundant matrices

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS61150067A (ja) * 1984-12-25 1986-07-08 Matsushita Electric Ind Co Ltd 演算装置
JP2007317179A (ja) * 2006-05-08 2007-12-06 Nvidia Corp 帯域幅要件が軽減された行列乗算
JP2009181293A (ja) * 2008-01-30 2009-08-13 Yamaha Corp 行列演算コプロセッサ

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS61150067A (ja) * 1984-12-25 1986-07-08 Matsushita Electric Ind Co Ltd 演算装置
JP2007317179A (ja) * 2006-05-08 2007-12-06 Nvidia Corp 帯域幅要件が軽減された行列乗算
JP2009181293A (ja) * 2008-01-30 2009-08-13 Yamaha Corp 行列演算コプロセッサ

Also Published As

Publication number Publication date
US20180349061A1 (en) 2018-12-06
JP6898554B2 (ja) 2021-07-07

Similar Documents

Publication Publication Date Title
US11775313B2 (en) Hardware accelerator for convolutional neural networks and method of operation thereof
TWI679590B (zh) 具有常駐在晶片上之參數的神經網路加速器
CN110678840B (zh) 张量寄存器文件
CN107315574B (zh) 一种用于执行矩阵乘运算的装置和方法
CN110678841B (zh) 张量处理器指令集架构
TWI441021B (zh) 使用多個較低連接埠數記憶體模擬單一記憶體之方法與裝置
JP2007317179A (ja) 帯域幅要件が軽減された行列乗算
JP2021507383A (ja) ニューラルネットワークプロセッサに対する統合メモリ構造
KR20200058562A (ko) 벡터 계산 장치
TWI844714B (zh) 資料處理
TWI791694B (zh) 向量帶進位加法指令
US20200356375A1 (en) Adaptive matrix multiplication accelerator for machine learning and deep learning applications
CN103455518A (zh) 一种数据处理方法及装置
JP6898554B2 (ja) 演算処理装置、情報処理装置及び演算処理装置の制御方法
JP2023145676A (ja) 伝搬レイテンシの短縮
US20220019491A1 (en) Method of determining split scheme, determining device, and computing system
JP7061742B2 (ja) プロセッサ装置
JP2012205298A (ja) デジタル信号処理装置およびプログラム
TWI850513B (zh) 用於記憶體內計算的方法及用於計算的系統
CN111291884A (zh) 神经网络剪枝方法、装置、电子设备及计算机可读介质
JP5708634B2 (ja) Simdプロセッサ
US20210357321A1 (en) Two-way interleaving in a three-rank environment
Tumeo et al. A flexible CUDA LU-based solver for small, batched linear systems
TW202203000A (zh) 用於記憶體內計算的方法及用於計算的系統
JPH0435792B2 (ja)

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20200310

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20210224

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20210309

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20210406

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20210524

R150 Certificate of patent or registration of utility model

Ref document number: 6898554

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150