JP6912703B2 - 演算方法、演算装置、演算プログラム及び演算システム - Google Patents

演算方法、演算装置、演算プログラム及び演算システム Download PDF

Info

Publication number
JP6912703B2
JP6912703B2 JP2017033409A JP2017033409A JP6912703B2 JP 6912703 B2 JP6912703 B2 JP 6912703B2 JP 2017033409 A JP2017033409 A JP 2017033409A JP 2017033409 A JP2017033409 A JP 2017033409A JP 6912703 B2 JP6912703 B2 JP 6912703B2
Authority
JP
Japan
Prior art keywords
matrix
unit
division
stored
arithmetic
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2017033409A
Other languages
English (en)
Other versions
JP2018139045A (ja
Inventor
明彦 笠置
明彦 笠置
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
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 JP2017033409A priority Critical patent/JP6912703B2/ja
Priority to EP18156090.5A priority patent/EP3370162B1/en
Priority to US15/894,995 priority patent/US10558730B2/en
Priority to CN201810155419.2A priority patent/CN108509384B/zh
Publication of JP2018139045A publication Critical patent/JP2018139045A/ja
Application granted granted Critical
Publication of JP6912703B2 publication Critical patent/JP6912703B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization

Landscapes

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

Description

本発明は、演算方法、演算装置、演算プログラム及び演算システムに関する。
近年、2重トラース構造を構成する演算器を有するプロセッサの研究が行われている。2重トラース構造を構成する演算器とは、例えば、行方向に配置されたM(Mは1以上の整数)個の演算器と列方向に配置されたN(Nは1以上の整数)個の演算器とがそれぞれトラース接続されたM×N個の演算器である。
このような演算器を有するプロセッサでは、各演算器のレジスタに記憶されたデータを複数の演算器間で共有しながら処理を行うことにより、処理中におけるメモリ(例えば、DRAM(Dynamic Ramdom Access Memory))に対するアクセス頻度を抑制する。これにより、上記のようなプロセッサは、処理の高速化を実現することが可能になる(例えば、特許文献1参照)。
特開平6−175986号公報
上記のようなプロセッサでは、例えば、行列の積を算出する場合、算出対象の行列の部分行列を複数の演算器のレジスタにそれぞれ記憶させ、各レジスタに記憶されたデータを複数の演算器間で共有しながら処理を行う。これにより、プロセッサは、行列の積の算出を行う場合においても処理の高速化を実現することが可能になる。
しかしながら、上記のようなプロセッサでは、同一の部分行列を用いる処理が複数の演算器において同時に行われる場合がある。そのため、この場合、プロセッサでは、他の演算器における処理の終了を待つ必要がある演算器が発生し、行列の積の算出を効率的(高速)に行うことができない場合がある。
そこで、一つの側面では、行列の積の算出を効率的に行うこと可能とする演算方法、演算装置、演算プログラム及び演算システムを提供することを目的とする。
実施の形態の一つの態様によれば、行方向に配置されたM(Mは1以上の整数)個の演算器と列方向に配置されたN(Nは1以上の整数)個の演算器とがそれぞれトラース接続されたM×N個の演算器を有する情報処理装置において、第1行列と第2行列との積を算出する演算方法であって、前記第1行列を、前記行方向において前記Mと前記Nとの最小公倍数で分割し、前記列方向において前記Nで分割することによって1以上の第1分割行列を生成し、前記第2行列を、前記行方向において前記Mで分割し、前記列方向において前記最小公倍数で分割することによって1以上の第2分割行列を生成し、前記第1行列において同一列に位置する前記1以上の第1分割行列が、前記情報処理装置において異なる列に配置された前記演算器に記憶されるように、前記1以上の第1分割行列を前記演算器の記憶部にそれぞれ記憶し、前記第2行列において同一行に位置する前記1以上の第2分割行列が、前記情報処理装置において異なる行に配置された前記演算器に記憶されるように、前記1以上の第2分割行列を前記演算器の前記記憶部にそれぞれ記憶し、前記演算器毎に、前記記憶部に記憶された前記1以上の第1分割行列と前記1以上の第2分割行列との第1の積を、前記記憶部に記憶された第1結果行列に加算し、前記演算器毎に、前記記憶部に記憶された前記1以上の第1分割行列を、前記行方向においてトラース接続された他の演算器のうち、直接接続された演算器に送信し、前記演算器毎に、前記記憶部に記憶された前記1以上の第2分割行列を、前記列方向においてトラース接続された他の演算器のうち、直接接続された演算器に送信し、前記演算器毎に、他の演算器から前記1以上の第1分割行列と前記1以上の第2分割行列とを受信したことに応じて、受信した前記1以上の第1分割行列と前記1以上の第2分割行列との第2の積を、前記記憶部に記憶された前記第1結果行列に加算し、前記第1分割行列を送信する工程と、前記第2分割行列を送信する工程と、前記第2の積を加算する工程とを、前記第1の積のそれぞれがトラース接続された前記演算器のそれぞれにおいて前記第1結果行列に加算されるまで繰り返す。
一つの側面によれば、行列の積の算出を効率的に行うこと可能とする。
図1は、情報処理システム10の構成を示す図である。 図2は、DLU111の構成を示す図である。 図3は、DPU00からDPU23における部分行列の記憶を説明する図である。 図4は、DPU00からDPU23に対して部分行列を記憶する際の具体例について説明する図である。 図5は、情報処理システム10のハードウエア構成を説明する図である。 図6は、DLU111の機能ブロック図である。 図7は、第1の実施の形態における行列演算処理の概略を説明するフローチャートである。 図8は、第1の実施の形態における行列演算処理の概略を説明するフローチャートである。 図9は、S4及びS5の処理の具体例を説明する図である。 図10は、S4及びS5の処理の具体例を説明する図である。 図11は、S4及びS5の処理の具体例を説明する図である。 図12は、S11からS15の処理の具体例を説明する図である。 図13は、S11からS15の処理の具体例を説明する図である。 図14は、S11からS15の処理の具体例を説明する図である。 図15は、第1の実施の形態における行列演算処理の詳細を説明するフローチャートである。 図16は、第1の実施の形態における行列演算処理の詳細を説明するフローチャートである。 図17は、第1の実施の形態における行列演算処理の詳細を説明するフローチャートである。 図18は、第1の実施の形態における行列演算処理の詳細を説明するフローチャートである。 図19は、第1の実施の形態における行列演算処理の詳細を説明する図である。 図20は、第1の実施の形態における行列演算処理の詳細を説明する図である。 図21は、第1の実施の形態における行列演算処理の詳細を説明する図である。 図22は、第1の実施の形態における行列演算処理の詳細を説明する図である。 図23は、第1の実施の形態における行列演算処理の詳細を説明する図である。 図24は、第1の実施の形態における行列演算処理の詳細を説明する図である。 図25は、第1の実施の形態における行列演算処理の詳細を説明する図である。 図26は、第1の実施の形態における行列演算処理の詳細を説明する図である。 図27は、第1の実施の形態における行列演算処理の詳細を説明する図である。 図28は、第1の実施の形態における行列演算処理の詳細を説明する図である。 図29は、第1の実施の形態における行列演算処理の詳細を説明する図である。 図30は、第1の実施の形態における行列演算処理の詳細を説明する図である。
[情報処理システムの構成]
初めに、情報処理システム10の構成について説明を行う。図1は、情報処理システム10の構成を示す図である。図1に示す情報処理システム10は、情報処理装置1と情報処理装置2とを有する。そして、情報処理装置1は、プロセッサ111と、メモリ112とを有し、情報処理装置2は、CPU101と、メモリ102とを有する。なお、以下、プロセッサ111が富士通社製のDLU(登録商標)であるものとして説明を行う。
CPU101は、例えば、プロセッサの研究者(以下、単に研究者とも呼ぶ)が情報処理装置2に対して行列の入力を行った場合、入力された行列をメモリ102に記憶する。そして、CPU101は、例えば、DLU111において行列の積の算出が行われる場合、メモリ102に記憶された行列をメモリ112に記憶する。
DLU111は、2重トラース構造を構成するM×N個の演算器(以下、DPUとも呼ぶ)を有するプロセッサである。DLU111は、所定のタイミング(例えば、情報処理装置1に対して行列の積の算出を行う旨の入力があった場合)に、メモリ112に記憶された行列(以下、第1行列及び第2行列とも呼ぶ)を取得し、第1行列と第2行列との積の算出を行う。
次に、DLU111の構成について説明を行う。図2は、DLU111の構成を示す図である。
DLU111は、図2に示すように、例えば、列方向(図2における縦方向)に6個配置され、行方向(図2における横方向)に4個配置された計24個のDPUを有する。各DPUは、例えば、第1行列及び第2行列の部分行列を記憶する記憶部をそれぞれ有する。
そして、図2に示すように、同一列に配置された6個のDPU(例えば、DPU00、DPU04、DPU08、DPU12、DPU16及びDPU20)は、トラース構造TR21を構成している。具体的に、例えば、DPU00は、DPU20及びDPU04と接続し、DPU04は、DPU00及びDPU08と接続している。
また、図2に示すように、同一行に配置された4個のDPU(例えば、DPU00、DPU01、DPU02及びDPU03)は、トラース構造TR11を構成している。具体的に、例えば、DPU00は、DPU03及びDPU01と接続し、DPU01は、DPU00及びDPU02と接続している。
すなわち、DLU111に配置された24個のDPUは、同一列に配置された6個のDPUがそれぞれ構成する4個のトラース構造(TR21、TR22、TR23及びTR24)と、同一行に配置された4個のDPUがそれぞれ構成する6個のトラース構造(TR11、TR12、TR13、TR14、TR15及びTR16)とからなる2重トラース構造を構成する。
これにより、例えば、DPU00は、トラース構造TR21を構成する他のDPUであるDPU04、DPU08、DPU12、DPU16及びDPU20がそれぞれ記憶する部分行列を共有(参照)することが可能になる。また、DPU00は、トラース構造TR11を構成する他のDPUであるDPU01、DPU02及びDPU03がそれぞれ記憶する部分行列を共有(参照)することが可能になる。
そのため、DLU111は、例えば、第1行列と第2行列との積を算出する際に、DPU00、DPU01、DPU02及びDPU03のそれぞれに記憶された部分行列と乗加算を行う必要がある部分行列を、DPU00、DPU00、DPU04、DPU08、DPU12、DPU16及びDPU20のいずれかに記憶することで、第1行列と第2行列との積の算出中におけるメモリ112へのアクセス頻度を抑制することが可能になる。以下、第1行列及び第2行列の各部分行列をDPU00からDPU23のいずれかに記憶した場合について説明を行う。
[各DPUにおける部分行列の記憶]
図3は、DPU00からDPU23における部分行列の記憶を説明する図である。具体的に、図3は、第1行列MAと第2行列MBとの積の算出が行われる際の部分行列の記憶を説明する図である。なお、以下、第1行列MAと第2行列MBとの積の算出結果が第3行列MCであるものとして説明を行う。
DLU111は、図3に示すように、例えば、第1行列MA及び第2行列MBをそれぞれ24分割する。具体的に、DLU111は、図3に示すように、DLU111における各DPUに配置に合わせて、第1行列MA及び第2行列MBのそれぞれを列方向に6分割し、行方向に4分割する。
そして、DLU111は、第3行列MCの部分行列の算出を行う際に同時に用いられる第1行列MAの部分行列が、トラース構造を構成するDPUのいずれかに記憶されるように、第1行列MAの各部分行列の記憶を行う。また、DLU111は、第3行列MCの部分行列の算出を行う際に同時に用いられる第2行列MBの部分行列が、トラース構造を構成するDPUのいずれかに記憶されるように、第2行列MBの各部分行列の記憶を行う。さらに、DLU111は、第3行列MCの部分行列が記憶されるDPUを、その部分行列の算出に用いられる第1行列MAの部分行列と第2行列MBの部分行列との両方が記憶されるDPUに決定する。すなわち、DLU111は、DPU00からDPU23のそれぞれに、第1行列MA、第2行列MB及び第3行列MCの部分行列を記憶する。
具体的に、DLU111は、例えば、第3行列MCの部分行列のうちの特定の部分行列の算出に用いられる第1行列MAの部分行列を、DPU00、DPU01、DPU02及びDPU03のいずれかに記憶する。また、DLU111は、例えば、第3行列MCの部分行列のうちの特定の部分行列の算出に用いられる第2行列MBの部分行列を、DPU00、DPU04、DPU08、DPU12、DPU16及びDPU20のいずれかに記憶する。さらに、DLU111は、この場合、第3行列MCの部分行列のうちの特定の部分行列を、第1行列MAの部分行列を記憶したDPUと第2行列MBの部分行列を記憶したDPUとの間において共通するDPU00に記憶する。
これにより、DLU111は、第3行列MCの部分行列を算出する際に、メモリ112に対してアクセスを行う必要がなくなる。
[各DPUに対する部分行列の記憶の具体例]
次に、DPU00からDPU23に対して部分行列を記憶する際の具体例について説明を行う。図4は、DPU00からDPU23に対して部分行列を記憶する際の具体例について説明する図である。なお、図4では、第1行列MAのうち、DPU00、DPU01、DPU02及びDPU03に記憶される部分行列と、第2行列MBのうち、DPU00、DPU04、DPU08、DPU12、DPU16及びDPU20に記憶される部分行列と、第3行列MCのうち、DPU00に記憶される部分行列についてのみ表記している。また、図4に示す例において、MA1からMA12、MB1からMB12及びMC1は、第1行列MA及び第2行列MBからそれぞれ分割された行列(以下、分割行列とも呼ぶ)である。さらに、第3行列MCの各成分の初期値は、それぞれ0であるものとする。
DLU111は、各DPUに対して部分行列の記憶を行う場合、行列の積の算出が効率的に行われるように、各DPUに対する部分行列の記憶を可能な限り均等に行うことが好ましい。そのため、DLU111は、例えば、第1行列MAを、行方向においてM(行方向に配置されたDPUの数)とN(列方向に配置されたDPUの数)との最小公倍数で分割し、列方向においてNで分割することによって、1以上の分割行列を生成する。そして、DLU111は、生成した1以上の分割行列を、行方向の分割行列の数が最小公倍数をMで除算した数であって列方向の分割行列の数が1である分割行列毎に各DPUに記憶する。また、DLU111は、例えば、第2行列MBを、行方向においてMで分割し、列方向においてMとNとの最小公倍数で分割することによって、1以上の分割行列を生成する。そして、DLU111は、生成した1以上の分割行列を、行方向の分割行列の数が1であって列方向の分割行列の数が最小公倍数をNで除算した数である分割行列毎に各DPUに記憶する。
具体的に、図2に示す例において、行方向に配置されたDPUの数は4個であり、列方向に配置されたDPUの数は6個である。そのため、DLU111は、この場合、図4に示すように、第1行列MAの行方向及び第2行列MBの列方向のそれぞれを、行方向に配置されたDPUの数と列方向に配置されたDPUの数との最小公倍数である12で分割する。そして、DLU111は、図4に示すように、行方向の分割行列の数が3個である部分行列を、DPU00、DPU01、DPU02及びDPU03にそれぞれ記憶し、列方向の分割行列の数が2個である部分行列を、DPU00、DPU04、DPU08、DPU12、DPU16及びDPU20にそれぞれ記憶する。
これにより、DLU111は、各DPUに対する部分行列の記憶を可能な限り均等に行うことが可能になる。
[第1行列と第2行列との積の算出]
次に、第1行列MAと第2行列MBとの積(第3行列MC)の算出について説明を行う。
図4に示す例において、DPU00は、トラース構造を構成するDPU01、DPU02及びDPU03との間において、各DPUが記憶する分割行列の循環を行う。また、DPU00は、トラース構造を構成するDPU04、DPU08、DPU12、DPU16及びDPU20との間において、各DPUが記憶する分割行列の循環を行う。そして、DPU00は、第3行列MCのうちのDPU00に記憶された部分行列の算出を行う。
具体的に、DPU00は、図4に示す例において、分割行列MA1と分割行列MB1との積と、分割行列MA2と分割行列MB2との積とを加算し、算出した行列と現在の分割行列MC1との和を、新たな分割行列MC1として記憶する。続いて、DPU00は、図4に示す例において、分割行列MA3と分割行列MB3(分割行列の循環によってDPU04からDPU00に送信された分割行列)との積とを加算し、算出した行列と現在の分割行列MC1との和を、新たな分割行列MC1として記憶する。さらに、DPU00は、図4に示す例において、分割行列MA4(分割行列の循環によってDPU01からDPU00に送信された分割行列)と分割行列MB4(分割行列の循環によってDPU04からDPU00に送信された分割行列)との積とを加算し、算出した行列と現在の分割行列MC1との和を、新たな分割行列MC1として記憶する。同様に、DPU00は、MA1からMA12と、MB1からMB12との乗加算を行い、分割行列MC1の算出を行う。
そして、DLU111は、この場合、第1行列MAの部分行列と第2行列MBの部分行列との積の算出を、DPU00以外のDPUにおいても並行して行う。これにより、DLU111は、行列の積の算出を行う場合における処理の高速化を実現することが可能になる。
しかしながら、DLU111では、同一の部分行列を用いる処理(演算)が複数のDPUにおいて同時に行われる場合がある。具体的に、図3に示す例において、第3行列MCのうちのDPU00に記憶される部分行列の算出と、第3行列MCのうちのDPU01に記憶される部分行列の算出とのそれぞれにおいて、第1行列MAのうちのDPU00に記憶された部分行列が同時に用いられる場合がこれに該当する。
そのため、この場合、DLU111では、他のDPUにおける処理の終了を待つ必要があるDPUが発生し、行列の積の算出を効率的(高速)に行うことができない。
そこで、本実施の形態におけるDLU111は、図4で説明したように、第1行列MAを、第1行列の行方向においてM(行方向に配置されたDPUの数)とN(列方向に配置されたDPUの数)との最小公倍数で分割し、第1行列MAの列方向においてNで分割することによって1以上の分割行列(以下、第1分割行列とも呼ぶ)を生成する。また、DLU111は、図4で説明したように、第2行列MBを、第2行列の行方向においてMで分割し、第2行列の列方向においてMとNの最小公倍数で分割することによって1以上の分割行列(以下、第2分割行列とも呼ぶ)を生成する。
そして、DLU111は、第1行列MAにおいて同一列に位置する1以上の第1分割行列が、DLU111において異なる列に配置されたDPUに記憶されるように、1以上の第1分割行列をDPUの記憶部にそれぞれ記憶する。また、DLU111は、第2行列MAにおいて同一行に位置する1以上の第2分割行列が、DLU111において異なる行に配置されたDPUに記憶されるように、1以上の第2分割行列をDPUの記憶部にそれぞれ記憶する。
すなわち、DLU111は、複数のDPUが同一の部分行列をそれぞれ用いるタイミングが重複しないように、各部分行列を記憶させるDPUを決定する。これにより、DLU111は、各DPUにおける待ち時間の発生を抑制することが可能になる。
さらに、DLU111は、DPU毎に、記憶部に記憶された1以上の第1分割行列と1以上の第2分割行列との積(以下、第1の積とも呼ぶ)を、記憶部に記憶された第3行列の部分行列(以下、第1結果行列とも呼ぶ)に加算する。そして、DLU111は、DPU毎に、記憶部に記憶された第1分割行列を、行方向においてトラース接続された他のDPUのうち、直接接続されたDPUに送信する。また、DLU111は、DPU毎に、記憶部に記憶された1以上の第2分割行列を、列方向においてトラース接続された他のDPUのうち、直接接続されたDPUに送信する。
その後、DLU111は、DPU毎に、他のDPUから1以上の第1分割行列と1以上の第2分割行列とを受信したことに応じて、受信した1以上の第1分割行列と1以上の第2分割行列との積(以下、第2の積とも呼ぶ)を、記憶部に記憶された第1結果行列に加算する。
そして、DLU111は、第1分割行列を送信する工程と、第2分割行列を送信する工程と、第2の積を加算する工程とを、各DPUの記憶部に記憶された1以上の第1分割行列から算出される積が、トラース接続されたDPUのそれぞれにおいて第1結果行列に加算され、各DPUの記憶部に記憶された1以上の第2分割行列から算出される積が、トラース接続されたDPUのそれぞれにおいて第1結果行列に加算されるまで繰り返す。
これにより、DLU111は、第1行列MAと第2行列MBとの積の算出を効率的(高速)に行うことが可能になる。
[情報処理システムのハードウエア構成]
次に、情報処理システム10のハードウエア構成について説明する。図5は、情報処理システム10のハードウエア構成を説明する図である。
情報処理装置1は、プロセッサであるDLU111と、メモリ112と、外部インターフェース(I/Oユニット)113と、記憶媒体(ストレージ)114とを有する。各部は、バス115を介して互いに接続される。
記憶媒体114は、記憶媒体114内のプログラム格納領域(図示しない)に、第1行列MAと第2行列MBとの積を算出する処理(以下、行列演算処理とも呼ぶ)を行うためのプログラム120を記憶する。
DLU111は、プログラム120の実行時に、プログラム120を記憶媒体114からメモリ112にロードし、プログラム120と協働して行列演算処理を行う。また、外部インターフェース113は、情報処理装置2と通信を行う。
そして、情報処理装置2は、プロセッサであるCPU101と、メモリ102と、外部インターフェース(I/Oユニット)103と、記憶媒体(ストレージ)104とを有する。各部は、バス105を介して互いに接続される。
記憶媒体104は、記憶媒体104内のプログラム格納領域(図示しない)に、メモリ102に記憶された第1行列MA及び第2行列MBをメモリ112に記憶する処理(以下、行列記憶処理とも呼ぶ)を行うためのプログラム110を記憶する。
CPU101は、図5に示すように、プログラム110の実行時に、プログラム110を記憶媒体104からメモリ112にロードし、プログラム120と協働して行列記憶処理を行う。また、外部インターフェース103は、情報処理装置1と通信を行う。
[DLUの機能]
次に、DLU111の機能ブロック図について説明する。図6は、DLU111の機能ブロック図である。DLU111は、図6に示すように、プログラム120と協働することにより、第1行列分割部121と、第2行列分割部122と、行列記憶部123と、行列演算部124と、行列送受信部125と、行列出力部126として動作する。
第1行列分割部121は、例えば、第1行列MAを、行方向においてMとNとの最小公倍数で分割し、列方向においてNで分割することによって、1以上の第1分割行列を生成する。
第2行列分割部122は、例えば、第2行列MBを、行方向においてMで分割し、列方向においてMとNの最小公倍数で分割することによって、1以上の第2分割行列を生成する。
行列記憶部123は、例えば、第1行列MAにおいて同一列に位置する1以上の第1分割行列が、DLU111において異なる列に配置されたDPUに記憶されるように、第1行列分割部121が生成した1以上の第1分割行列をDPUの記憶部にそれぞれ記憶する。また、行列記憶部123は、例えば、第2行列MBにおいて同一行に位置する1以上の第2分割行列が、DLU111において異なる行に配置されたDPUに記憶されるように、第2行列分割部122が生成した1以上の第2分割行列をDPUの記憶部にそれぞれ記憶する。
行列演算部124は、例えば、DPU毎に、記憶部に記憶された1以上の第1分割行列と1以上の第2分割行列との第1の積を、記憶部に記憶された第1結果行列に加算する。
行列送受信部125は、例えば、DPU毎に、記憶部に記憶された1以上の第1分割行列を、行方向においてトラース接続された他のDPUのうち、直接接続されたDPUに送信する。また、行列送受信部125は、例えば、DPU毎に、記憶部に記憶された1以上の第2分割行列を、列方向においてトラース接続された他のDPUのうち、直接接続されたDPUに送信する。その後、行列演算部124は、例えば、DPU毎に、行列送受信部125が他のDPUから1以上の第1分割行列と1以上の第2分割行列とを受信したことに応じて、受信した1以上の第1分割行列と1以上の第2分割行列との第2の積を、記憶部に記憶された第1結果行列に加算する。
そして、行列送受信部125及び行列演算部124は、第2分割行列群の送信と第2の積の加算とを、各工程がトラース接続されたDPUの全てにおいて行われるまで繰り返す。
行列出力部126は、各工程がトラース接続されたDPUの全てにおいて第2分割行列群の送信と第2の積の加算とが行われた後、第1結果行列を情報処理装置2等に出力する。
[第1の実施の形態の概略]
次に、第1の実施の形態の概略について説明する。図7及び図8は、第1の実施の形態における行列演算処理の概略を説明するフローチャートである。
DLU111は、図7に示すように、演算開始タイミングまで待機する(S1のNO)。演算開始タイミングは、例えば、研究者が情報処理装置1に対して第1行列MAと第2行列MBとの積の算出を開始する旨の入力を行ったタイミングであってよい。
そして、演算開始タイミングになった場合(S1のYES)、DLU111は、例えば、第1行列MAを、行方向においてMとNとの最小公倍数で分割し、列方向においてNで分割することによって1以上の第1分割行列を生成する(S2)。また、DLU111は、例えば、第2行列MBを、行方向においてMで分割し、列方向においてMとNの最小公倍数で分割することによって1以上の第2分割行列を生成する(S3)。
続いて、DLU111は、例えば、第1行列MAにおいて同一列に位置する1以上の第1分割行列が、DLU111において異なる列に配置されたDPUに記憶されるように、1以上の第1分割行列をDPUの記憶部にそれぞれ記憶する(S4)。また、DLU111は、例えば、第2行列MBにおいて同一行に位置する1以上の第2分割行列が、DLU111において異なる行に配置されたDPUに記憶されるように、1以上の第2分割行列をDPUの記憶部にそれぞれ記憶する(S5)。
そして、DLU111は、図8に示すように、例えば、DPU毎に、記憶部に記憶された1以上の第1分割行列と1以上の第2分割行列との第1の積を、記憶部に記憶された第1結果行列に加算する(S11)。
その後、DLU111は、例えば、DPU毎に、記憶部に記憶された1以上の第1分割行列を、行方向においてトラース接続された他のDPUのうち、直接接続されたDPUに送信する(S12)。また、DLU111は、例えば、DPU毎に、記憶部に記憶された1以上の第2分割行列を、列方向においてトラース接続された他のDPUのうち、直接接続されたDPUに送信する(S13)。
さらに、DLU111は、例えば、DPU毎に、他のDPUから1以上の第1分割行列と1以上の第2分割行列とを受信したことに応じて、受信した1以上の第1分割行列と1以上の第2分割行列との第2の積を、記憶部に記憶された第1結果行列に加算する(S14)。
そして、DLU111は、各DPUの記憶部に記憶された1以上の第1分割行列から算出される積がトラース接続されたDPUのそれぞれにおいて第1結果行列に加算され、各DPUの記憶部に記憶された1以上の第2分割行列から算出される積がトラース接続されたDPUのそれぞれにおいて第1結果行列に加算されたか否かを判定する(S15)。その結果、トラース接続されたDPUのそれぞれにおいて第1結果行列に加算されたと判定した場合(S15のYES)、DLU111は、行列演算処理を終了する。一方、トラース接続されたDPUのそれぞれにおいて第1結果行列に加算されていないと判定した場合(S15のNO)、DLU111は、S12以降の処理を再度行う。
すなわち、DLU111は、複数のDPUによって同一の部分行列が用いられるタイミングが重複しないように、各部分行列を保持させるDPUを決定する。
これにより、DLU111は、各DPUにおける待ち時間の発生を抑制することが可能になる。そのため、DLU111は、第1行列MAと第2行列MBとの積の算出を効率的(高速)に行うことが可能になる。
[S4及びS5の処理の具体例]
次に、S4及びS5の処理の具体例について説明を行う。図9から図11は、S4及びS5の処理の具体例を説明する図である。図9から図11に示す例において、第1行列MA、第2行列MB及び第3行列MCは、図3及び図4で説明した第1行列MA、第2行列MB及び第3行列MCにそれぞれ対応する。また、図9に示す例において、第1行列MAにおけるA0等は、S2の処理で生成された分割行列(第1分割行列)であり、第2行列MBにおけるB0等は、S3の処理で生成された分割行列(第2分割行列)である。さらに、図9に示す例において、第3行列MCにおけるC0等は、各DPUに記憶される部分行列である。
なお、図9に示す例において、各DPUには、第1行列MAにおける各分割行列の位置に従って、行方向の分割行列の数が1個であって列方向の分割行列の数が3個である部分行列が記憶される。また、図9に示す例において、各DPUには、第2行列MBにおける各分割行列の位置に従って、行方向の分割行列の数が2個であって列方向の分割行列の数が1個である部分行列が記憶される。そのため、例えば、DPU00には、分割行列A0、A1及びA2からなる部分行列と、分割行列B0及びB4からなる部分行列と、部分行列C0が記憶される。また、例えば、DPU01には、分割行列A3、A4及びA5からなる部分行列と、分割行列B1及びB5からなる部分行列と、部分行列C1が記憶される。さらに、例えば、DPU04には、分割行列A12、A13及びA14からなる部分行列と、分割行列B8及びB12からなる部分行列と、部分行列C0が記憶される。
具体的に、図9に示す例において、部分行列C0は、分割行列A0、A1、A2、A3、A4、A5、A6、A7、A8、A9、A10及びA11と、分割行列B0、B4、B8、B12、B16、B20、B24、B28、B32、B36、B40及びB44とを乗加算することによって算出される。また、図9に示す例において、部分行列C4は、分割行列A12、A13、A14、A15、A16、A17、A18、A19、A20、A21、A22及びA23と、分割行列B0、B4、B8、B12、B16、B20、B24、B28、B32、B36、B40及びB44とを乗加算することによって算出される。
すなわち、各DPUにおいて、図9に示すように各分割行列の記憶が行われている場合、DPU00及びDPU04は、それぞれ部分行列C0及び部分行列C4の算出を行う際に、例えば、分割行列B0、B4、B8、B12、B16、B20、B24、B28、B32、B36、B40及びB44を同じ順序で用いることになる。そのため、DPU00では、この場合、部分行列C0の算出を行う際に、DPU04の処理の待ち時間が発生する可能性がある。同様に、DPU04では、この場合、部分行列C4の算出を行う際に、DPU00の処理の待ち時間が発生する可能性がある。
そこで、DLU111は、図9に示す第1行列MAの各分割行列のうち、上からy番目であって左からx番目に位置する分割行列(以下、A[y][x]とも表記する)の配置を、以下の式1に従って変更する(S4)。なお、以下の式1におけるLは、M(DLU111において列方向に配置されたDPUの数)とN(DLU111において行方向に配置されたDPUの数)の最小公倍数を示す定数である。

A[y][(x+y*(L/N))%L] ・・・ (1)

具体的に、DLU111は、例えば、図10に示すように、分割行列A12、A13、A14、A15、A16、A17、A18、A19、A20、A21、A22及びA23を、分割行列A22、A23、A12、A13、A14、A15、A16、A17、A18、A19、A20及びA21の順になるように再配置してから各DPUに記憶する(S4)。
すなわち、DLU111は、各行の分割行列を移動させる数として、例えば、第1行列MAの列の数である「12」を第1行列MAの行の数である「6」で除算することによって算出される「2」を用いる。そのため、DLU111は、例えば、図10に示すように、第1行列MAの第2行に含まれる分割行列を移動させる数として「2」を特定し、第1行列MAの第3行に含まれる分割行列を移動させる数として「4」を特定し、第1行列MAの第4行に含まれる分割行列を移動させる数として「6」を特定する。
これにより、DLU111は、第1行列MAにおいて同一列に位置する1以上の第1分割行列が異なるDPUに記憶されるように、各DPUに対する1以上の第1分割行列の記憶を行うことが可能になる。
また、各DPUにおいて、図9に示すように各分割行列の記憶が行われている場合、DPU00及びDPU01は、それぞれ部分行列C0及び部分行列C1の算出を行う際に、分割行列A0、A1、A2、A3、A4、A5、A6、A7、A8、A9、A10及びA11を同じ順序で用いることになる。そのため、この場合、DPU00では、例えば、部分行列C0の算出を行う際に、DPU01の処理の待ち時間が発生する可能性がある。同様に、DPU01では、この場合、部分行列C1の算出を行う際に、DPU00の処理の待ち時間が発生する可能性がある。
そこで、DLU111は、図9に示す第2行列MBの各分割行列のうち、上からy番目であって左からx番目に位置する分割行列(以下、B[y][x]とも表記する)の配置を、以下の式2に従って変更する(S5)。

B[(L−y+x*(L/M))%L][x] ・・・ (2)

具体的に、DLU111は、例えば、図10に示すように、分割行列B1、B5、B9、B13、B17、B21、B25、B29、B33、B37、B41及びB45を、分割行列B37、B41、B45、B1、B5、B9、B13、B17、B21、B25、B29及びB33の順になるように再配置してから各DPUに記憶する。
すなわち、DLU111は、各行の分割行列を移動させる数として、例えば、第2行列MBの行の数である「12」を第2行列MBの列の数である「4」で除算することによって算出される「3」を用いる。そのため、DLU111は、例えば、図10に示すように、第2行列MBの第2列に含まれる分割行列を移動させる数として「3」を特定し、第2行列MBの第3列に含まれる分割行列を移動させる数として「6」を特定する。
これにより、DLU111は、第2行列MBにおいて同一行に位置する1以上の第2分割行列が異なるDPUに記憶されるように、各DPUに対する1以上の第2分割行列の記憶を行うことが可能になる。
なお、DLU111は、S4の処理において、例えば、以下の式3に従って、第1行列MAにおける各分割行列の配置を変更するものであってもよい。

A[y][((L−1)−x+(N−y)*(L/N))%L] ・・・ (3)

具体的に、DLU111は、例えば、図11に示すように、分割行列A0、A1、A2、A3、A4、A5、A6、A7、A8、A9、A10及びA11を、分割行列A11、A10、A9、A8、A7、A6、A5、A4、A3、A2、A1及びA0の順になるように再配置してから各DPUに記憶する。また、DLU111は、例えば、分割行列A12、A13、A14、A15、A16、A17、A18、A19、A20、A21、A22及びA23を、分割行列A21、A20、A19、A18、A17、A16、A15、A14、A13、A12、A23及びA22の順になるように再配置してから各DPUに記憶する。
また、DLU111は、S5の処理において、例えば、以下の式4に従って、第2行列MBにおける各分割行列の配置を変更するものであってもよい。

B[((L−1)−y+(M−x)*(L/M))%L][x] ・・・ (4)

具体的に、DLU111は、例えば、図11に示すように、分割行列B0、B4、B8、B12、B16、B20、B24、B28、B32、B36、B40及びB44を、分割行列B44、B40、B36、B32、B28、B24、B20、B16、B12、B8、B4及びB0の順になるように再配置してから各DPUに記憶する。また、DLU111は、例えば、分割行列B1、B5、B9、B13、B17、B21、B25、B29、B33、B37、B41及びB45を、分割行列B33、B29、B25、B21、B17、B13、B9、B5、B1、B45、B41及びB37の順になるように再配置してから各DPUに記憶する。
[S11からS15の処理の具体例]
次に、S11からS15の処理の具体例について説明を行う。図12から図14は、S11からS15の処理の具体例を説明する図である。図12等におけるA0等は、図9等で説明した分割行列A0に対応する。また、図12等におけるDPU00等は、図2等で説明したDPU00に対応する。なお、以下、S4及びS5において図11で説明した分割行列の再配置が行われたものとして説明を行う。
図12に示す例において、例えば、DPU00には、分割行列A9、A10及びA11と、分割行列B40及びB44と、部分行列C0とが記憶されている。そして、図12に示すDPU00は、DPU00に記憶された分割行列A11と分割行列B44の乗算を行い、算出結果を部分行列C0に加算する。また、図12に示すDPU00には、分割行列A9及びA10と分割行列B40とが記憶されている。すなわち、分割行列A9及びA10と分割行列B40は、次以降に乗加算が行われる分割行列としてDPU00に記憶されている。
続いて、DPU00は、図13に示すように、分割行列A10と分割行列B40の乗算を行い、算出結果を部分行列C0に加算する。すなわち、DPU00は、図12に示す状態において待機させていた分割行列のうち、最も先にDPU00に記憶された分割行列の組合せによる乗加算を行う。
また、図13に示すDPU00は、図12に示す状態においてDPU00とトラース構造を構成するDPU01に記憶されていた分割行列A8と、同じくトラース構造を構成するDPU04に記憶されていた分割行列B36とを受信している。一方、図13に示すDPU00は、図12に示す状態において乗加算が行われていた分割行列A11と分割行列B44とを、それぞれDPU00とトラース構造を構成するDPU03とDPU20とに送信している。
その後、DPU00は、図14に示すように、分割行列A9と分割行列B36の乗算を行い、算出結果を部分行列C0に加算する。すなわち、DPU00は、図13に示す状態において待機させていた分割行列のうち、最も先にDPU00に記憶された分割行列の組合せによる乗加算を行う。
また、図14に示すDPU00は、図13に示す状態においてDPU00とトラース構造を構成するDPU01に記憶されていた分割行列A7と、同じくトラース構造を構成するDPU04に記憶されていた分割行列B32とを受信している。一方、図14に示すDPU00は、図13に示す状態において乗加算が行われていた分割行列A10と分割行列B40とを、それぞれDPU00とトラース構造を構成するDPU03とDPU20とに送信している。
すなわち、DPU00は、トラース構造に従って分割行列の循環を繰り返すことによって、部分行列C0の算出に要する分割行列の全てを受信することが可能になる。そのため、DPU00は、メモリ112に対してアクセスを行うことなく、部分行列C0の算出を行うことが可能になる。
[第1の実施の形態の詳細]
次に、第1の実施の形態の詳細について説明する。図15から図18は、第1の実施の形態における行列演算処理の詳細を説明するフローチャートである。また、図19から図30は、第1の実施の形態における行列演算処理の詳細を説明する図である。図19から図30を参照しながら、図15から図18に示す行列演算処理を説明する。
情報処理装置1の第1行列分割部121は、図15に示すように、演算開始タイミングまで待機する(S31のNO)。そして、演算開始タイミングになった場合(S31のYES)、第1行列分割部121は、例えば、第1行列MAを、行方向においてMとNの最小公倍数と整数(以下、第1整数とも呼ぶ)とを乗算した数で分割し、列方向においてNと整数(以下、第2整数とも呼ぶ)とを乗算した数で分割することによって1以上の第1分割行列を生成する(S32)。
具体的に、第1行列分割部121は、例えば、図19に示すように、第1行列MAを、行方向においてMとNの最小公倍数の1倍の数で分割し、列方向においてNの2倍の数で分割することにより、1以上の第1分割行列を生成する。すなわち、第1行列分割部121は、この場合、図9で説明した分割行列と比較して、第2行列MAを2倍の数の第1分割行列に分割する。
また、情報処理装置1の第2行列分割部122は、例えば、第2行列MBを、行方向においてMと整数(以下、第3整数とも呼ぶ)とで乗算した数で分割し、列方向においてMとNの最小公倍数と整数(以下、第4整数とも呼ぶ)とで乗算した数で分割することによって1以上の第2分割行列を生成する(S33)。
具体的に、第2行列分割部122は、例えば、図19に示すように、第2行列MBを、行方向においてMの2倍の数で分割し、列方向においてMとNの最小公倍数の2倍の数で分割することにより、1以上の第2分割行列を生成する。すなわち、第2行列分割部122は、この場合、図9で説明した分割行列と比較して、第2行列MBを4倍の数の第2分割行列に分割する。
続いて、情報処理装置1の行列記憶部123は、例えば、第1行列MAにおいて同一列に位置する第2整数毎の第1分割行列が、DLU111において異なる列に配置されたDPUに記憶され、かつ、行方向の数が第1整数であって列方向の数が第2整数である第1分割行列からなる部分行列がDPUの記憶部のそれぞれに記憶されるように、1以上の第1分割行列をDPUの記憶部にそれぞれ記憶する(S34)。
すなわち、例えば、第1行列分割部121が第1行列MAをDPUの数よりも多い数の第1分割行列に分割した場合、行列記憶部123は、少なくとも1個のDPUにおいて複数の第1分割行列からなる部分行列の記憶を行う。
また、行列記憶部123は、例えば、第2行列MBにおいて同一行に位置する1以上の第2分割行列が、DLU111において異なる行に配置されたDPUに記憶されるように、1以上の第2分割行列のうち、行方向の数がMであって列方向の数がMとNの最小公倍数である1以上の第2分割行列をDPUの記憶部にそれぞれ記憶する(S35)。
すなわち、DLU111は、S33の処理において生成された1以上の第2分割行列の数がDPUの数よりも多い場合、各DPUに少なくとも1以上の第2分割行列が記憶されたことに応じて、トラース構造を構成するDPU間において分割行列の循環を開始することが可能になる。そのため、DLU111は、例えば、S35の処理において、生成された1以上の第2分割行列の一部のみをDPUの記憶部のそれぞれに記憶して後続処理を行う。
具体的に、行列記憶部123は、図20に示すように、例えば、図19で説明した1以上の第2分割行列のうち、1行目から12行目に位置する第2分割行列であって1列目から4列目に位置する第2分割行列を各DPUの記憶部のそれぞれに記憶する。
その後、行列演算部124は、図16に示すように、DPU毎に、記憶部に記憶された1以上の第1分割行列と1以上の第2分割行列との第1の積を、記憶部に記憶された第1結果行列に加算する(S41)。
具体的に、情報処理装置1の行列演算部124は、例えば、図20に示すように、S34の処理で記憶された第1分割行列と、S35の処理で記憶された第2分割行列(S33の処理で生成された1以上の第2分割行列の一部)との第1の積を、第1結果行列(図19に示す第3行列MCの1列目から4列目に位置する部分行列)に加算する。
これにより、行列演算部124は、各DPUに対する第2行列MBの一部の記憶が完了したことに応じて、DPUに対する第2行列MBの全ての記憶の完了を待つことなく、第1行列MAと第2行列MBの一部との積の算出を開始することが可能になる。また、行列記憶部123は、行列演算部124が第1行列MAと第2行列MBの一部の積の算出を行っている間に、DPUに対する第2行列MBの他の一部の記憶を行うことが可能になる。
そのため、情報処理装置1は、各DPUに対する第2行列MBの記憶と、第1行列MAと第2行列MBとの積の算出とを並行して行うことが可能になる。したがって、情報処理装置1は、第1行列MAと第2行列MBとの積の算出をより効率的(高速)に行うことが可能になる。
なお、行列記憶部123は、S35の処理において、例えば、第2行列MBにおいて同一行に位置する第3整数毎の第2分割行列が、DLU111において異なる行に配置されたDPUに記憶され、かつ、行方向の数が第3整数であって列方向の数が第4整数である第2分割行列からなる部分行列がDPUの記憶部のそれぞれに記憶されるように、1以上の第2分割行列をDPUの記憶部にそれぞれ記憶するものであってもよい。この場合、DLU111は、1以上の第2分割行列の全てがDPUの記憶部に記憶されてから後続処理を行う。以下、S34からS41の処理の詳細について説明を行う。
[S34からS41の処理の詳細]
次に、S34からS41の処理の詳細について説明を行う。図17及び図18は、S34からS41の処理の詳細を説明するフローチャートである。
初めに、DPUの構成について説明を行う。図21は、DPU00の構成を示す図である。DPU00は、図21に示すように、16個配置された演算器(以下、DPEまたは単位演算器とも呼ぶ)を有する。そして、DPU00では、各DPEがトラース構造TR31を構成している。
具体的に、図21に示す例において、例えば、DPE0は、DPE15及びDPE2と接続し、DPE1は、DPE0及びDPE2と接続している。これにより、例えば、DPE0は、トラース構造TR31を構成する他のDPEがそれぞれ記憶する行列を共有(参照)することが可能になる。図21に含まれる他の構成については説明を省略する。
続いて、DPEの構成について説明を行う。図22は、DPE0の構成を示す図である。DPE0は、図22に示すように、部分行列等を記憶するレジスタDPE0a(以下、単位記憶部DPE0aとも呼ぶ)と、部分行列の積の算出等を行う演算器DPE0bとを有する。すなわち、DPE0からDPU15が有する各レジスタは、DPU00の記憶部として機能する。なお、以下、DPE0からDPU15が有する各レジスタを総称して、単位記憶部DPEaとも呼ぶ。
次に、S34からS41の処理のフローチャートについて説明を行う。
行列演算部124は、DPU毎に、各DPUに記憶された1以上の第1分割行列を行方向及び列方向においてk(kは1以上の整数)でそれぞれ分割することによって、1以上の単位分割値を生成する(S61)。すなわち、例えば、kが各DPUに配置されたDPEの数である場合、行列演算部124は、各DPUに記憶された1以上の第1分割行列を256(16×16)分割することによって1以上の単位分割値を生成する。具体的に、行列演算部124は、例えば、第1行列MAのうち、DPU00に記憶された分割行列である分割行列A0、A1及びA2を256分割することによって1以上の単位分割値を生成する。
そして、行列演算部124は、DPU毎に、各DPUに記憶された1以上の第1分割行列において同一列に位置する1以上の単位分割値が同一のDPEの単位記憶部DPEaに記憶されるように、1以上の単位分割値をDPEの単位記憶部DPEaのそれぞれに記憶する(S62)。
また、行列演算部124は、DPU毎に、各DPUに記憶された1以上の第2分割行列を列方向においてkで分割することによって、1以上の単位分割行列を生成する(S63)。すなわち、例えば、kが各DPUに配置されたDPEの数である場合、行列演算部124は、各DPUに記憶された1以上の第2分割行列を列方向において16分割することにより1以上の単位分割行列を生成する。具体的に、行列演算部124は、例えば、第2行列MBのうち、DPU00に記憶された分割行列である分割行列B0及びB1を列方向において16分割することによって1以上の単位分割行列を生成する。
そして、行列演算部124は、DPU毎に、1以上の単位分割行列をDPEの単位記憶部DPEaのそれぞれに記憶する(S64)。
次に、行列演算部124は、図18に示すように、DPE毎に、単位記憶部DPEaに記憶された1以上の単位分割値のうち、各DPEの識別情報に対応する単位分割値と、記憶部DEPaに記憶された1以上の単位分割行列との第3の積を、単位記憶部DPEaに記憶された第2結果行列に加算する(S71)。
続いて、行列演算部124は、DPE毎に、単位記憶部DPEaに記憶された1以上の単位分割行列を、トラース接続された他のDPEのうち、直接接続されたDPEに送信する(S72)。
その後、行列演算部124は、DPE毎に、他のDPEから受信した単位分割行列と、単位記憶部DPEaに記憶された1以上の単位分割値のうち、単位分割行列を送信した他のDPEの識別情報に対応する単位分割値との第4の積を、単位記憶部DPEaに記憶された第2結果行列に加算する(S73)。
そして、行列演算部は、各DPEに記憶された前記1以上の単位分割行列から算出される積が、トラース接続されたDPEのそれぞれにおいて第2結果行列に加算されたか否かを判定する(S74)。その結果、トラース接続されたDPEのそれぞれにおいて第2結果行列に加算されたと判定された場合(S74のYES)、行列演算部124は、S34からS41の処理を終了する。一方、トラース接続されたDPEのそれぞれにおいて第2結果行列に加算されていないと判定された場合(S74のNO)、行列演算部124は、S72以降の処理を再度行う。
[S61からS74の処理の具体例]
次に、S61からS74の処理の具体例について説明を行う。図23から図28は、S61からS74の処理の具体例について説明を行う図である。具体的に、図23から図28は、DPU00において行われるS61からS74の処理の具体例を説明する図である。なお、図23から図28では、単位分割値及び単位分割行列の一部についてのみ表記する。
行列演算部124は、例えば、DPU00に記憶された第1行列MAの分割行列である分割行列A0、A1及びA2を256分割し、256個の単位分割値を生成する(S61)。そして、行列演算部124は、生成した256個の単位分割値を、同一列に位置する単位分割値毎に各DPEの単位記憶部DPEaにそれぞれ記憶する(S62)。
具体的に、行列演算部124は、図23に示すように、例えば、生成した256個の単位分割値のうち、単位分割値A00、A01からA0FをDPE0に記憶し、単位分割値A10、A11及びA1FをDPE1に記憶する。
また、行列演算部124は、DPU00に記憶された第2行列MBの分割行列である分割行列B0及びB1を列方向において16分割し、16個の単位分割行列を生成する(S63)。そして、行列演算部124は、生成した16個の単位分割行列を、各DPEの単位記憶部DPEaにそれぞれ記憶する(S64)。
具体的に、行列演算部124は、図23に示すように、例えば、生成した16個の単位分割行列のうち、値B00からB0Fを含む単位分割行列をDPE0に記憶し、値B10からB1Fを含む単位分割行列をDPE1に記憶する。
その後、行列演算部124は、DPE0に記憶された単位分割値のうち、DPE0の識別情報に対応する単位分割値と、DPE0に記憶された単位分割行列との第3の積を、DPE0に記憶された第2結果行列に加算する(S71)。各DPEの識別番号は、例えば、DPEの末尾に付加された番号である。また、単位分割値における識別番号は、例えば、各単位分割値が記憶される位置毎に付加される番号である。
具体的に、行列演算部124は、図23に示すように、DPE0の識別情報及び単位分割値A00の識別情報が「0」である場合、DPE0に記憶された単位分割値から単位分割値A00を特定する。そして、行列演算部124は、この場合、図23に示すように、DPE0に記憶された値B00からB0Fを含む単位分割行列と単位分割値A00とを乗算し、DPE0に記憶された第2結果行列C00からC0Fに加算する。
同様に、行列演算部124は、図24に示すように、DPE1の識別情報及び単位分割値A11の識別情報が「1」である場合、DPE1に記憶された単位分割値から単位分割値A11を特定する。そして、行列演算部124は、この場合、図24に示すように、DPE1に記憶された値B10からB1Fを含む単位分割行列と単位分割値A11とを乗算し、DPE1に記憶された第2結果行列C10からC1Fに加算する。
続いて、行列演算部124は、例えば、各DPEに記憶された1以上の単位分割行列を、トラース接続された他の単位演算器のうち、直接接続されたDPEに送信する(S72)。
具体的に、行列演算部124は、図25に示すように、例えば、DPE1に記憶された値B10からB1Fを含む単位分割行列をDPE2に送信し、DPE0に記憶された値B00からB0Fを含む単位分割行列をDPE1に送信する。
そして、行列演算部124は、例えば、DPE15から受信した単位分割行列と、DPE15に記憶された単位分割値のうち、受信した単位分割行列を最初に記憶していたDPE15の識別情報に対応する単位分割値との第4の積を、DPE0に記憶された第2結果行列に加算する(S73)。
具体的に、行列演算部124は、図25に示すように、DPE0が受信した単位分割行列を最初に記憶していたDPE15の識別情報及び単位分割値A0Fの識別情報が「15」である場合、DPE0に記憶された単位分割値から単位分割値A0Fを特定する。そして、行列演算部124は、図25に示すように、DPE0に記憶された値BF0からBFFを含む単位分割行列と単位分割値A0Fとを乗算し、DPE0に記憶された第2結果行列C00からC0Fに加算する。
同様に、行列演算部124は、図26に示すように、DPE1が受信した単位分割行列を最初に記憶していたDPE0の識別情報及び単位分割値A10の識別情報が「0」である場合、DPE1に記憶された単位分割値から単位分割値A10を特定する。そして、行列演算部124は、図26に示すように、DPE1に記憶された値B00からB0Fを含む単位分割行列と単位分割値A10とを乗算し、DPE1に記憶された第2結果行列C10からC1Fに加算する。
そして、S72及びS73の処理がトラース接続されたDPEの全てにおいて行われていない場合(S74のNO)、行列演算部124は、S72以降の処理を再度行う。
具体的に、行列演算部124は、図27に示すように、DPE0が受信した単位分割行列を最初に記憶していたDPE14の識別情報及び単位分割値A0Eの識別情報が「14」である場合、DPE0に記憶された単位分割値から単位分割値A0Eを特定する。そして、行列演算部124は、図27に示すように、DPE0に記憶された値BE0からBEFを含む単位分割行列と単位分割値A0Eとを乗算し、DPE0に記憶された第2結果行列C00からC0Fに加算する。
同様に、行列演算部124は、図28に示すように、DPE1が受信した単位分割行列を最初に記憶していたDPE15の識別情報及び単位分割値A1Fの識別情報が「15」である場合、DPE1に記憶された単位分割値から単位分割値A1Fを特定する。そして、行列演算部124は、図28に示すように、DPE1に記憶された値BF0からBFFを含む単位分割行列と単位分割値A1Fとを乗算し、DPE1に記憶された第2結果行列C10からC1Fに加算する。
これにより、行列演算部124は、各DPUにおける行列の積の算出をより効率的に行うことが可能になる。
図16に戻り、行列送受信部125は、例えば、DPU毎に、記憶部に記憶された1以上の第1分割行列を、行方向においてトラース接続された他のDPUのうち、直接接続されたDPUに送信する(S42)。また、行列送受信部125は、例えば、DPU毎に、記憶部に記憶された1以上の第2分割行列を、列方向においてトラース接続された他のDPUのうち、直接接続されたDPUに送信する(S43)。
さらに、行列演算部124は、例えば、DPU毎に、行列送受信部125が他のDPUから1以上の第1分割行列と1以上の第2分割行列とを受信したことに応じて、受信した1以上の第1分割行列と1以上の第2分割行列との第2の積を、記憶部に記憶された第1結果行列に加算する(S44)。
そして、行列演算部124は、各DPUの記憶部に記憶された1以上の第1分割行列から算出される積がトラース接続されたDPUのそれぞれにおいて第1結果行列に加算され、各DPUの記憶部に記憶された1以上の第2分割行列から算出される積がトラース接続されたDPUのそれぞれにおいて第1結果行列に加算されたか否かを判定する(S45)。
その結果、トラース接続されたDPUのそれぞれにおいて第1結果行列に加算されていないと判定した場合(S45のNO)、行列演算部124は、S42以降の処理を再度行う。
一方、トラース接続されたDPUのそれぞれにおいて第1結果行列に加算されたと判定した場合(S45のYES)、行列演算部124は、S34からS45の処理が第2分割行列の全てのついて行われたか否かを判定する(S46)。その結果、S34からS45の処理が第2分割行列の全てのついて行われたと判定した場合(S46のYES)、行列演算部124は、行列演算処理を終了する。また、S34からS45の処理が第2分割行列の全てのついて行われていないと判定した場合(S46のNO)、行列演算部124は、S34以降の処理を再度行う。
具体的に、行列記憶部123は、例えば、S35の処理を2回目に行う場合、図29に示すように、図19で説明した1以上の第2分割行列のうち、13行目から24行目に位置する第2分割行列であって1列目から4列目に位置する第2分割行列のみを各DPUの記憶部に記憶する。そして、行列演算部124は、例えば、S41の処理を2回目に行う場合、S34の処理でDPUの記憶部に記憶された第1分割行列と、2回目のS35の処理でDPUの記憶部に記憶された第2分割行列との第1の積を、第1結果行列(図19に示す第3行列MCの1列目から4列目に位置する部分行列)に加算する。
さらに、行列記憶部123は、例えば、S35の処理を3回目に行う場合、図30に示すように、図19で説明した1以上の第2分割行列のうち、1行目から12行目に位置する第2分割行列であって5列目から8列目に位置する第2分割行列のみを各DPUの記憶部に記憶する。そして、行列演算部124は、例えば、S41の処理を3回目に行う場合、S34の処理でDPUの記憶部に記憶された第1分割行列と、3回目のS35の処理でDPUの記憶部に記憶された第2分割行列との第1の積を、第1結果行列(図19に示す第3行列MCにおける5列目から8列目に位置する部分行列)に加算する。S35の処理等が4回目に行われる場合の具体例については説明を省略する。
これにより、情報処理装置1は、第1行列MAと第2行列MBとの積の算出を効率的(高速)に行うことが可能になる。
以上の実施の形態をまとめると、以下の付記の通りである。
(付記1)
行方向に配置されたM(Mは1以上の整数)個の演算器と列方向に配置されたN(Nは1以上の整数)個の演算器とがそれぞれトラース接続されたM×N個の演算器を有する情報処理装置において、第1行列と第2行列との積を算出する演算方法であって、
前記第1行列を、前記行方向において前記Mと前記Nとの最小公倍数で分割し、前記列方向において前記Nで分割することによって1以上の第1分割行列を生成し、
前記第2行列を、前記行方向において前記Mで分割し、前記列方向において前記最小公倍数で分割することによって1以上の第2分割行列を生成し、
前記第1行列において同一列に位置する前記1以上の第1分割行列が、前記情報処理装置において異なる列に配置された前記演算器に記憶されるように、生成された前記1以上の第1分割行列を前記演算器の記憶部にそれぞれ記憶し、
前記第2行列において同一行に位置する前記1以上の第2分割行列が、前記情報処理装置において異なる行に配置された前記演算器に記憶されるように、生成された前記1以上の第2分割行列を前記記憶部にそれぞれ記憶し、
前記演算器毎に、各演算器の前記記憶部に記憶された前記1以上の第1分割行列と前記1以上の第2分割行列との第1の積を、各演算器の前記記憶部に記憶された第1結果行列に加算し、
前記演算器毎に、各演算器の前記記憶部に記憶された前記1以上の第1分割行列を、前記行方向においてトラース接続された他の演算器のうち、直接接続された演算器に送信し、
前記演算器毎に、各演算器の前記記憶部に記憶された前記1以上の第2分割行列を、前記列方向においてトラース接続された他の演算器のうち、直接接続された演算器に送信し、
前記演算器毎に、他の演算器から前記1以上の第1分割行列と前記1以上の第2分割行列とを受信したことに応じて、受信した前記1以上の第1分割行列と前記1以上の第2分割行列との第2の積を、各演算器の前記記憶部に記憶された前記第1結果行列に加算し、
前記第1分割行列を送信する工程と、前記第2分割行列を送信する工程と、前記第2の積を加算する工程とを、各演算器の前記記憶部に記憶された前記1以上の第1分割行列から算出される積が、トラース接続された前記演算器のそれぞれにおいて前記第1結果行列に加算され、各演算器の前記記憶部に記憶された前記1以上の第2分割行列から算出される積が、トラース接続された前記演算器のそれぞれにおいて前記第1結果行列に加算されるまで繰り返す、
ことを特徴とする演算方法。
(付記2)
付記1において、さらに、
他の演算器から前記1以上の第1分割行列または前記1以上の第2分割行列を受信した場合、受信した前記1以上の第1分割行列または前記1以上の第2分割行列を前記記憶部に記憶し、
前記第2の積を加算する工程では、
前記演算器毎に、各演算器の前記記憶部から、最も先に受信した前記1以上の第1分割行列と前記1以上の第2分割行列とを順次取得し、
前記演算器毎に、取得した前記1以上の第1分割行列と前記1以上の第2分割行列との前記第2の積を、各演算器の前記記憶部に記憶された前記第1結果行列に順次加算する、
ことを特徴とする演算方法。
(付記3)
付記1において、
前記第1分割行列を生成する工程では、前記第1行列を、前記行方向において前記最小公倍数と第1整数とを乗算した数で分割し、前記列方向において前記Nと第2整数とを乗算した数で分割することによって前記1以上の第1分割行列を生成し、
前記第2分割行列を生成する工程では、前記第2行列を、前記行方向において前記Mと第3整数とを乗算した数で分割し、前記列方向において前記最小公倍数と第4整数とを乗算した数で分割することによって前記1以上の第2分割行列の生成を行い、
前記第1分割行列を記憶する工程では、前記第1行列において同一列に位置する前記第2整数毎の第1分割行列が、前記情報処理装置において異なる列に配置された前記演算器に記憶され、前記行方向の数が前記第1整数であって前記列方向の数が前記第2整数である第1分割行列が前記記憶部のそれぞれに記憶されるように、前記1以上の第1分割行列を前記記憶部にそれぞれ記憶し、
前記第2分割行列を記憶する工程では、前記第2行列において同一行に位置する前記第3整数毎の第2分割行列が、前記情報処理装置において異なる行に配置された前記演算器に記憶され、前記行方向の数が前記第3整数であって前記列方向の数が前記第4整数である第2分割行列が前記記憶部のそれぞれに記憶されるように、前記1以上の第2分割行列を前記記憶部にそれぞれ記憶する、
ことを特徴とする演算方法。
(付記4)
付記1において、
前記第2分割行列を生成する工程では、前記第2行列を、前記行方向において前記Mと第1整数とを乗算した数で分割し、前記列方向において前記最小公倍数と第2整数とを乗算した数で分割することによって前記1以上の第2分割行列の生成を行い、
前記第2分割行列を記憶する工程では、前記第2行列において同一行に位置する前記1以上の第2分割行列が、前記情報処理装置において異なる行に配置された前記演算器に記憶されるように、前記1以上の第2分割行列のうち、前記行方向の数が前記Mであって前記列方向の数が前記最小公倍数である前記1以上の第2分割行列を前記記憶部にそれぞれ記憶し、さらに、
前記第2分割行列を記憶する工程と、前記第1の積を加算する工程と、前記第1分割行列を送信する工程と、前記第2分割行列を送信する工程と、前記第2の積を加算する工程と、前記積の加算を繰り返す工程とを、各工程が前記1以上の第2分割行列の全てについて行われるまで繰り返す、
ことを特徴とする演算方法。
(付記5)
付記4において、
前記各工程を繰り返す工程では、次に各工程が行われる前記1以上の第2分割行列についての前記第2分割行列を記憶する工程を並行して行う、
ことを特徴とする演算方法。
(付記6)
付記1において、
前記演算器のそれぞれは、トラース接続されたk個(kは1以上の整数)の単位演算器を有し、
前記第1の積を加算する工程では、
前記演算器毎に、各演算器の前記記憶部に記憶された前記1以上の第1分割行列を、行方向及び列方向のそれぞれにおいて前記kで分割することによって、1以上の単位分割値を生成し、
前記演算器毎に、各演算器の前記記憶部に記憶された前記1以上の第1分割行列において同一列に位置する前記1以上の単位分割値が同一の前記単位演算器に記憶されるように、生成された前記1以上の単位分割値を前記単位演算器の単位記憶部のそれぞれに記憶し、
前記演算器毎に、各演算器の前記記憶部に記憶された前記1以上の第2分割行列を、列方向において前記kで分割することによって、1以上の単位分割行列を生成し、
前記演算器毎に、生成された前記1以上の単位分割行列を前記単位演算器の前記単位記憶部のそれぞれに記憶し、
前記単位演算器毎に、各単位演算器の前記単位記憶部に記憶された前記1以上の単位分割値のうち、各単位演算器を識別する識別情報に対応する単位分割値と、各単位演算器の前記単位記憶部に記憶された前記1以上の単位分割行列との第3の積を、各単位演算器の前記単位記憶部に記憶された第2結果行列に加算し、
前記単位演算器毎に、各単位演算器の前記単位記憶部に記憶された前記1以上の単位分割行列を、トラース接続された他の単位演算器のうち、直接接続された単位演算器に送信し、
前記単位演算器毎に、他の単位演算器から前記1以上の単位分割行列を受信したことに応じて、他の単位演算器から受信した前記1以上の単位分割行列と、各単位演算器の前記単位記憶部に記憶された前記1以上の単位分割値のうち、受信した前記1以上の単位分割行列を最初に記憶していた他の単位演算器を識別する識別情報に対応する単位分割値との第4の積を、前記単位記憶部に記憶された前記第2結果行列に加算し、
前記単位分割行列を送信する工程と、前記第4の積を加算する工程とを、各単位演算器の前記単位記憶部に記憶された前記1以上の単位分割行列から算出される積が、トラース接続された前記単位演算器のそれぞれにおいて前記第2結果行列に加算されるまで繰り返し、
前記第1分割行列を送信する工程では、前記単位演算器毎に、各単位演算器の前記単位記憶部のそれぞれに記憶された前記第2結果行列からなる行列を、前記1以上の第1分割行列として送信し、
前記第2分割行列を送信する工程では、前記単位演算器毎に、各単位演算器の前記単位記憶部のそれぞれに記憶された前記第2結果行列からなる行列を、前記1以上の第2分割行列として送信する、
ことを特徴とする演算方法。
(付記7)
付記6において、
前記単位演算器は、各単位演算器を識別する第1識別情報を有し、
前記単位分割値を記憶する工程では、前記単位演算器毎に、前記単位分割値と各単位分割値を識別する第2識別情報とを対応付けて記憶し、
前記第3の積を加算する工程では、
前記単位演算器毎に、各単位演算器に対応する前記第1識別情報を特定し、
前記単位演算器毎に、各単位演算器の前記単位記憶部に記憶された前記単位分割値のうち、特定した前記第1識別情報に対応する単位分割値と、各単位演算器の前記単位記憶部に記憶された前記単位分割行列との前記第3の積を、各単位演算器の前記単位記憶部に記憶された前記第2結果行列に加算し、
前記第4の積を加算する工程では、
前記単位演算器毎に、受信した前記単位分割行列を最初に記憶していた他の単位演算器に対応する第2識別情報を特定し、
前記単位演算器毎に、受信した前記単位分割行列と、各単位演算器の前記単位記憶部に記憶された前記単位分割値のうち、特定した前記第2識別情報に対応する単位分割値との前記第4の積を、前記単位記憶部に記憶された前記第2結果行列に加算する、
ことを特徴とする演算方法。
(付記8)
付記1において、さらに、
前記積の加算を繰り返す工程の後、前記第1結果行列を出力する、
ことを特徴とする演算方法。
(付記9)
行方向に配置されたM(Mは1以上の整数)個の演算器と列方向に配置されたN(Nは1以上の整数)個の演算器とがそれぞれトラース接続されたM×N個の演算器を有する情報処理装置において、
第1行列を、前記行方向において前記Mと前記Nとの最小公倍数で分割し、前記列方向において前記Nで分割することによって1以上の第1分割行列を生成する第1行列分割部と、
第2行列を、前記行方向において前記Mで分割し、前記列方向において前記最小公倍数で分割することによって1以上の第2分割行列を生成する第2行列分割部と、
前記第1行列において同一列に位置する前記1以上の第1分割行列が、前記情報処理装置において異なる列に配置された前記演算器に記憶されるように、生成された前記1以上の第1分割行列を前記演算器の記憶部にそれぞれ記憶し、前記第2行列において同一行に位置する前記1以上の第2分割行列が、前記情報処理装置において異なる行に配置された前記演算器に記憶されるように、生成された前記1以上の第2分割行列を前記記憶部にそれぞれ記憶する行列記憶部と、
前記演算器毎に、各演算器の前記記憶部に記憶された前記1以上の第1分割行列と前記1以上の第2分割行列との第1の積を、各演算器の前記記憶部に記憶された第1結果行列に加算する行列演算部と、
前記演算器毎に、各演算器の前記記憶部に記憶された前記1以上の第1分割行列を、前記行方向においてトラース接続された他の演算器のうち、直接接続された演算器に送信し、前記演算器毎に、各演算器の前記記憶部に記憶された前記1以上の第2分割行列を、前記列方向においてトラース接続された他の演算器のうち、直接接続された演算器に送信する行列送受信部と、を有し、
前記行列演算部は、前記演算器毎に、他の演算器から前記1以上の第1分割行列と前記1以上の第2分割行列とを受信したことに応じて、受信した前記1以上の第1分割行列と前記1以上の第2分割行列との第2の積を、各演算器の前記記憶部に記憶された前記第1結果行列に加算し、
前記行列送受信部は、前記1以上の第1分割行列の送信と、前記1以上の第2分割行列の送信とを、各演算器の前記記憶部に記憶された前記1以上の第1分割行列から算出される積が、トラース接続された前記演算器のそれぞれにおいて前記第1結果行列に加算され、各演算器の前記記憶部に記憶された前記1以上の第2分割行列から算出される積が、トラース接続された前記演算器のそれぞれにおいて前記第1結果行列に加算されるまで繰り返し、
前記行列演算部は、前記第2の積の加算を、各演算器の前記記憶部に記憶された前記1以上の第1分割行列から算出される積が、トラース接続された前記演算器のそれぞれにおいて前記第1結果行列に加算され、各演算器の前記記憶部に記憶された前記1以上の第2分割行列から算出される積が、トラース接続された前記演算器のそれぞれにおいて前記第1結果行列に加算されるまで繰り返す、
ことを特徴とする演算装置。
(付記10)
行方向に配置されたM(Mは1以上の整数)個の演算器と列方向に配置されたN(Nは1以上の整数)個の演算器とがそれぞれトラース接続されたM×N個の演算器を有する情報処理装置に、第1行列と第2行列との積を算出する処理を実行させる演算プログラムであって、
前記第1行列を、前記行方向において前記Mと前記Nとの最小公倍数で分割し、前記列方向において前記Nで分割することによって1以上の第1分割行列を生成し、
前記第2行列を、前記行方向において前記Mで分割し、前記列方向において前記最小公倍数で分割することによって1以上の第2分割行列を生成し、
前記第1行列において同一列に位置する前記1以上の第1分割行列が、前記情報処理装置において異なる列に配置された前記演算器に記憶されるように、生成された前記1以上の第1分割行列を前記演算器の記憶部にそれぞれ記憶し、
前記第2行列において同一行に位置する前記1以上の第2分割行列が、前記情報処理装置において異なる行に配置された前記演算器に記憶されるように、生成された前記1以上の第2分割行列を前記記憶部にそれぞれ記憶し、
前記演算器毎に、各演算器の前記記憶部に記憶された前記1以上の第1分割行列と前記1以上の第2分割行列との第1の積を、各演算器の前記記憶部に記憶された第1結果行列に加算し、
前記演算器毎に、各演算器の前記記憶部に記憶された前記1以上の第1分割行列を、前記行方向においてトラース接続された他の演算器のうち、直接接続された演算器に送信し、
前記演算器毎に、各演算器の前記記憶部に記憶された前記1以上の第2分割行列を、前記列方向においてトラース接続された他の演算器のうち、直接接続された演算器に送信し、
前記演算器毎に、他の演算器から前記1以上の第1分割行列と前記1以上の第2分割行列とを受信したことに応じて、受信した前記1以上の第1分割行列と前記1以上の第2分割行列との第2の積を、各演算器の前記記憶部に記憶された前記第1結果行列に加算し、
前記第1分割行列を送信する処理と、前記第2分割行列を送信する処理と、前記第2の積を加算する処理とを、各演算器の前記記憶部に記憶された前記1以上の第1分割行列から算出される積が、トラース接続された前記演算器のそれぞれにおいて前記第1結果行列に加算され、各演算器の前記記憶部に記憶された前記1以上の第2分割行列から算出される積が、トラース接続された前記演算器のそれぞれにおいて前記第1結果行列に加算されるまで繰り返す、
処理を前記情報処理装置に実行させることを特徴とする演算プログラム。
(付記11)
行方向に配置されたM(Mは1以上の整数)個の演算器と列方向に配置されたN(Nは1以上の整数)個の演算器とがそれぞれトラース接続されたM×N個の演算器を有する情報処理装置と、
第1行列及び第2行列を記憶する記憶装置と、を有し、
前記情報処理装置は、
前記記憶装置に記憶された前記第1行列を、前記行方向において前記Mと前記Nとの最小公倍数で分割し、前記列方向において前記Nで分割することによって1以上の第1分割行列を生成する第1行列分割部と、
前記記憶装置に記憶された前記第2行列を、前記行方向において前記Mで分割し、前記列方向において前記最小公倍数で分割することによって1以上の第2分割行列を生成する第2行列分割部と、
前記第1行列において同一列に位置する前記1以上の第1分割行列が、前記情報処理装置において異なる列に配置された前記演算器に記憶されるように、生成された前記1以上の第1分割行列を前記演算器の記憶部にそれぞれ記憶し、前記第2行列において同一行に位置する前記1以上の第2分割行列が、前記情報処理装置において異なる行に配置された前記演算器に記憶されるように、生成された前記1以上の第2分割行列を前記記憶部にそれぞれ記憶する行列記憶部と、
前記演算器毎に、各演算器の前記記憶部に記憶された前記1以上の第1分割行列と前記1以上の第2分割行列との第1の積を、各演算器の前記記憶部に記憶された第1結果行列に加算する行列演算部と、
前記演算器毎に、各演算器の前記記憶部に記憶された前記1以上の第1分割行列を、前記行方向においてトラース接続された他の演算器のうち、直接接続された演算器に送信し、前記演算器毎に、各演算器の前記記憶部に記憶された前記1以上の第2分割行列を、前記列方向においてトラース接続された他の演算器のうち、直接接続された演算器に送信する行列送受信部と、を有し、
前記行列演算部は、前記演算器毎に、他の演算器から前記1以上の第1分割行列と前記1以上の第2分割行列とを受信したことに応じて、受信した前記1以上の第1分割行列と前記1以上の第2分割行列との第2の積を、各演算器の前記記憶部に記憶された前記第1結果行列に加算し、
前記行列送受信部は、前記1以上の第1分割行列の送信と、前記1以上の第2分割行列の送信とを、各演算器の前記記憶部に記憶された前記1以上の第1分割行列から算出される積が、トラース接続された前記演算器のそれぞれにおいて前記第1結果行列に加算され、各演算器の前記記憶部に記憶された前記1以上の第2分割行列から算出される積が、トラース接続された前記演算器のそれぞれにおいて前記第1結果行列に加算されるまで繰り返し、
前記行列演算部は、前記第2の積の加算を、各演算器の前記記憶部に記憶された前記1以上の第1分割行列から算出される積が、トラース接続された前記演算器のそれぞれにおいて前記第1結果行列に加算され、各演算器の前記記憶部に記憶された前記1以上の第2分割行列から算出される積が、トラース接続された前記演算器のそれぞれにおいて前記第1結果行列に加算されるまで繰り返す、
ことを特徴とする演算システム。
1:情報処理装置 2:情報処理装置
101:CPU 102:メモリ
111:DLU 112:メモリ

Claims (10)

  1. 行方向に配置されたM(Mは1以上の整数)個の演算器と列方向に配置されたN(Nは1以上の整数、かつ、N≠M)個の演算器とがそれぞれトラース接続されたM×N個の演算器を有する情報処理装置において、第1行列と第2行列との積を算出する演算方法であって、
    前記第1行列を、前記行方向において前記Mと前記Nとの最小公倍数で分割し、前記列方向において前記Nで分割することによって1以上の第1分割行列を生成し、
    前記第2行列を、前記行方向において前記Mで分割し、前記列方向において前記最小公倍数で分割することによって1以上の第2分割行列を生成し、
    前記第1行列において同一列に位置する前記1以上の第1分割行列が、前記情報処理装置において異なる列に配置された前記演算器に記憶されるように、生成された前記1以上の第1分割行列を前記演算器の記憶部にそれぞれ記憶し、
    前記第2行列において同一行に位置する前記1以上の第2分割行列が、前記情報処理装置において異なる行に配置された前記演算器に記憶されるように、生成された前記1以上の第2分割行列を前記記憶部にそれぞれ記憶し、
    前記演算器毎に、各演算器の前記記憶部に記憶された前記1以上の第1分割行列と前記1以上の第2分割行列との第1の積を、各演算器の前記記憶部に記憶された第1結果行列に加算し、
    前記演算器毎に、各演算器の前記記憶部に記憶された前記1以上の第1分割行列を、前記行方向においてトラース接続された他の演算器のうち、直接接続された演算器に送信し、
    前記演算器毎に、各演算器の前記記憶部に記憶された前記1以上の第2分割行列を、前記列方向においてトラース接続された他の演算器のうち、直接接続された演算器に送信し、
    前記演算器毎に、他の演算器から前記1以上の第1分割行列と前記1以上の第2分割行列とを受信したことに応じて、受信した前記1以上の第1分割行列と前記1以上の第2分割行列との第2の積を、各演算器の前記記憶部に記憶された前記第1結果行列に加算し、
    前記第1分割行列を送信する工程と、前記第2分割行列を送信する工程と、前記第2の積を加算する工程とを、各演算器の前記記憶部に記憶された前記1以上の第1分割行列から算出される積が、トラース接続された前記演算器のそれぞれにおいて前記第1結果行列に加算され、各演算器の前記記憶部に記憶された前記1以上の第2分割行列から算出される積が、トラース接続された前記演算器のそれぞれにおいて前記第1結果行列に加算されるまで繰り返す、
    ことを特徴とする演算方法。
  2. 請求項1において、さらに、
    他の演算器から前記1以上の第1分割行列または前記1以上の第2分割行列を受信した場合、受信した前記1以上の第1分割行列または前記1以上の第2分割行列を前記記憶部に記憶し、
    前記第2の積を加算する工程では、
    前記演算器毎に、各演算器の前記記憶部から、最も先に受信した前記1以上の第1分割行列と前記1以上の第2分割行列とを順次取得し、
    前記演算器毎に、取得した前記1以上の第1分割行列と前記1以上の第2分割行列との前記第2の積を、各演算器の前記記憶部に記憶された前記第1結果行列に順次加算する、
    ことを特徴とする演算方法。
  3. 請求項1において、
    前記第1分割行列を生成する工程では、前記第1行列を、前記行方向において前記最小公倍数と第1整数とを乗算した数で分割し、前記列方向において前記Nと第2整数とを乗算した数で分割することによって前記1以上の第1分割行列を生成し、
    前記第2分割行列を生成する工程では、前記第2行列を、前記行方向において前記Mと第3整数とを乗算した数で分割し、前記列方向において前記最小公倍数と第4整数とを乗算した数で分割することによって前記1以上の第2分割行列の生成を行い、
    前記第1分割行列を記憶する工程では、前記第1行列において同一列に位置する前記第2整数毎の第1分割行列が、前記情報処理装置において異なる列に配置された前記演算器に記憶され、前記行方向の数が前記第1整数であって前記列方向の数が前記第2整数である第1分割行列が前記記憶部のそれぞれに記憶されるように、前記1以上の第1分割行列を前記記憶部にそれぞれ記憶し、
    前記第2分割行列を記憶する工程では、前記第2行列において同一行に位置する前記第3整数毎の第2分割行列が、前記情報処理装置において異なる行に配置された前記演算器に記憶され、前記行方向の数が前記第3整数であって前記列方向の数が前記第4整数である第2分割行列が前記記憶部のそれぞれに記憶されるように、前記1以上の第2分割行列を前記記憶部にそれぞれ記憶する、
    ことを特徴とする演算方法。
  4. 請求項1において、
    前記第2分割行列を生成する工程では、前記第2行列を、前記行方向において前記Mと第1整数とを乗算した数で分割し、前記列方向において前記最小公倍数と第2整数とを乗算した数で分割することによって前記1以上の第2分割行列の生成を行い、
    前記第2分割行列を記憶する工程では、前記第2行列において同一行に位置する前記1以上の第2分割行列が、前記情報処理装置において異なる行に配置された前記演算器に記憶されるように、前記1以上の第2分割行列のうち、前記行方向の数が前記Mであって前記列方向の数が前記最小公倍数である前記1以上の第2分割行列を前記記憶部にそれぞれ記憶し、さらに、
    前記第2分割行列を記憶する工程と、前記第1の積を加算する工程と、前記第1分割行列を送信する工程と、前記第2分割行列を送信する工程と、前記第2の積を加算する工程と、前記積の加算を繰り返す工程とを、各工程が前記1以上の第2分割行列の全てについて行われるまで繰り返す、
    ことを特徴とする演算方法。
  5. 請求項4において、
    前記各工程を繰り返す工程では、次に各工程が行われる前記1以上の第2分割行列についての前記第2分割行列を記憶する工程を並行して行う、
    ことを特徴とする演算方法。
  6. 請求項1において、
    前記演算器のそれぞれは、トラース接続されたk個(kは1以上の整数)の単位演算器を有し、
    前記第1の積を加算する工程では、
    前記演算器毎に、各演算器の前記記憶部に記憶された前記1以上の第1分割行列を、行方向及び列方向のそれぞれにおいて前記kで分割することによって、1以上の単位分割値を生成し、
    前記演算器毎に、各演算器の前記記憶部に記憶された前記1以上の第1分割行列において同一列に位置する前記1以上の単位分割値が同一の前記単位演算器に記憶されるように、生成された前記1以上の単位分割値を前記単位演算器の単位記憶部のそれぞれに記憶し、
    前記演算器毎に、各演算器の前記記憶部に記憶された前記1以上の第2分割行列を、列方向において前記kで分割することによって、1以上の単位分割行列を生成し、
    前記演算器毎に、生成された前記1以上の単位分割行列を前記単位演算器の前記単位記憶部のそれぞれに記憶し、
    前記単位演算器毎に、各単位演算器の前記単位記憶部に記憶された前記1以上の単位分割値のうち、各単位演算器を識別する識別情報に対応する単位分割値と、各単位演算器の前記単位記憶部に記憶された前記1以上の単位分割行列との第3の積を、各単位演算器の前記単位記憶部に記憶された第2結果行列に加算し、
    前記単位演算器毎に、各単位演算器の前記単位記憶部に記憶された前記1以上の単位分割行列を、トラース接続された他の単位演算器のうち、直接接続された単位演算器に送信し、
    前記単位演算器毎に、他の単位演算器から前記1以上の単位分割行列を受信したことに応じて、他の単位演算器から受信した前記1以上の単位分割行列と、各単位演算器の前記単位記憶部に記憶された前記1以上の単位分割値のうち、受信した前記1以上の単位分割行列を最初に記憶していた他の単位演算器を識別する識別情報に対応する単位分割値との第4の積を、前記単位記憶部に記憶された前記第2結果行列に加算し、
    前記単位分割行列を送信する工程と、前記第4の積を加算する工程とを、各単位演算器の前記単位記憶部に記憶された前記1以上の単位分割行列から算出される積が、トラース接続された前記単位演算器のそれぞれにおいて前記第2結果行列に加算されるまで繰り返し、
    前記第1分割行列を送信する工程では、前記単位演算器毎に、各単位演算器の前記単位記憶部のそれぞれに記憶された前記第2結果行列からなる行列を、前記1以上の第1分割行列として送信し、
    前記第2分割行列を送信する工程では、前記単位演算器毎に、各単位演算器の前記単位記憶部のそれぞれに記憶された前記第2結果行列からなる行列を、前記1以上の第2分割行列として送信する、
    ことを特徴とする演算方法。
  7. 請求項6において、
    前記単位演算器は、各単位演算器を識別する第1識別情報を有し、
    前記単位分割値を記憶する工程では、前記単位演算器毎に、前記単位分割値と各単位分割値を識別する第2識別情報とを対応付けて記憶し、
    前記第3の積を加算する工程では、
    前記単位演算器毎に、各単位演算器に対応する前記第1識別情報を特定し、
    前記単位演算器毎に、各単位演算器の前記単位記憶部に記憶された前記単位分割値のうち、特定した前記第1識別情報に対応する単位分割値と、各単位演算器の前記単位記憶部に記憶された前記単位分割行列との前記第3の積を、各単位演算器の前記単位記憶部に記憶された前記第2結果行列に加算し、
    前記第4の積を加算する工程では、
    前記単位演算器毎に、受信した前記単位分割行列を最初に記憶していた他の単位演算器に対応する第2識別情報を特定し、
    前記単位演算器毎に、受信した前記単位分割行列と、各単位演算器の前記単位記憶部に記憶された前記単位分割値のうち、特定した前記第2識別情報に対応する単位分割値との前記第4の積を、前記単位記憶部に記憶された前記第2結果行列に加算する、
    ことを特徴とする演算方法。
  8. 行方向に配置されたM(Mは1以上の整数)個の演算器と列方向に配置されたN(Nは1以上の整数、かつ、N≠M)個の演算器とがそれぞれトラース接続されたM×N個の演算器を有する情報処理装置において、
    第1行列を、前記行方向において前記Mと前記Nとの最小公倍数で分割し、前記列方向において前記Nで分割することによって1以上の第1分割行列を生成する第1行列分割部と、
    第2行列を、前記行方向において前記Mで分割し、前記列方向において前記最小公倍数で分割することによって1以上の第2分割行列を生成する第2行列分割部と、
    前記第1行列において同一列に位置する前記1以上の第1分割行列が、前記情報処理装置において異なる列に配置された前記演算器に記憶されるように、生成された前記1以上の第1分割行列を前記演算器の記憶部にそれぞれ記憶し、前記第2行列において同一行に位置する前記1以上の第2分割行列が、前記情報処理装置において異なる行に配置された前記演算器に記憶されるように、生成された前記1以上の第2分割行列を前記記憶部にそれぞれ記憶する行列記憶部と、
    前記演算器毎に、各演算器の前記記憶部に記憶された前記1以上の第1分割行列と前記1以上の第2分割行列との第1の積を、各演算器の前記記憶部に記憶された第1結果行列に加算する行列演算部と、
    前記演算器毎に、各演算器の前記記憶部に記憶された前記1以上の第1分割行列を、前記行方向においてトラース接続された他の演算器のうち、直接接続された演算器に送信し、前記演算器毎に、各演算器の前記記憶部に記憶された前記1以上の第2分割行列を、前記列方向においてトラース接続された他の演算器のうち、直接接続された演算器に送信する行列送受信部と、を有し、
    前記行列演算部は、前記演算器毎に、他の演算器から前記1以上の第1分割行列と前記1以上の第2分割行列とを受信したことに応じて、受信した前記1以上の第1分割行列と前記1以上の第2分割行列との第2の積を、各演算器の前記記憶部に記憶された前記第1結果行列に加算し、
    前記行列送受信部は、前記1以上の第1分割行列の送信と、前記1以上の第2分割行列の送信とを、各演算器の前記記憶部に記憶された前記1以上の第1分割行列から算出される積が、トラース接続された前記演算器のそれぞれにおいて前記第1結果行列に加算され、各演算器の前記記憶部に記憶された前記1以上の第2分割行列から算出される積が、トラース接続された前記演算器のそれぞれにおいて前記第1結果行列に加算されるまで繰り返し、
    前記行列演算部は、前記第2の積の加算を、各演算器の前記記憶部に記憶された前記1以上の第1分割行列から算出される積が、トラース接続された前記演算器のそれぞれにおいて前記第1結果行列に加算され、各演算器の前記記憶部に記憶された前記1以上の第2分割行列から算出される積が、トラース接続された前記演算器のそれぞれにおいて前記第1結果行列に加算されるまで繰り返す、
    ことを特徴とする演算装置。
  9. 行方向に配置されたM(Mは1以上の整数)個の演算器と列方向に配置されたN(Nは1以上の整数、かつ、N≠M)個の演算器とがそれぞれトラース接続されたM×N個の演算器を有する情報処理装置に、第1行列と第2行列との積を算出する処理を実行させる演算プログラムであって、
    前記第1行列を、前記行方向において前記Mと前記Nとの最小公倍数で分割し、前記列方向において前記Nで分割することによって1以上の第1分割行列を生成し、
    前記第2行列を、前記行方向において前記Mで分割し、前記列方向において前記最小公倍数で分割することによって1以上の第2分割行列を生成し、
    前記第1行列において同一列に位置する前記1以上の第1分割行列が、前記情報処理装置において異なる列に配置された前記演算器に記憶されるように、生成された前記1以上の第1分割行列を前記演算器の記憶部にそれぞれ記憶し、
    前記第2行列において同一行に位置する前記1以上の第2分割行列が、前記情報処理装置において異なる行に配置された前記演算器に記憶されるように、生成された前記1以上の第2分割行列を前記記憶部にそれぞれ記憶し、
    前記演算器毎に、各演算器の前記記憶部に記憶された前記1以上の第1分割行列と前記1以上の第2分割行列との第1の積を、各演算器の前記記憶部に記憶された第1結果行列に加算し、
    前記演算器毎に、各演算器の前記記憶部に記憶された前記1以上の第1分割行列を、前記行方向においてトラース接続された他の演算器のうち、直接接続された演算器に送信し

    前記演算器毎に、各演算器の前記記憶部に記憶された前記1以上の第2分割行列を、前記列方向においてトラース接続された他の演算器のうち、直接接続された演算器に送信し、
    前記演算器毎に、他の演算器から前記1以上の第1分割行列と前記1以上の第2分割行列とを受信したことに応じて、受信した前記1以上の第1分割行列と前記1以上の第2分割行列との第2の積を、各演算器の前記記憶部に記憶された前記第1結果行列に加算し、
    前記第1分割行列を送信する処理と、前記第2分割行列を送信する処理と、前記第2の積を加算する処理とを、各演算器の前記記憶部に記憶された前記1以上の第1分割行列から算出される積が、トラース接続された前記演算器のそれぞれにおいて前記第1結果行列に加算され、各演算器の前記記憶部に記憶された前記1以上の第2分割行列から算出される積が、トラース接続された前記演算器のそれぞれにおいて前記第1結果行列に加算されるまで繰り返す、
    処理を前記情報処理装置に実行させることを特徴とする演算プログラム。
  10. 行方向に配置されたM(Mは1以上の整数)個の演算器と列方向に配置されたN(Nは1以上の整数、かつ、N≠M)個の演算器とがそれぞれトラース接続されたM×N個の演算器を有する情報処理装置と、
    第1行列及び第2行列を記憶する記憶装置と、を有し、
    前記情報処理装置は、
    前記記憶装置に記憶された前記第1行列を、前記行方向において前記Mと前記Nとの最小公倍数で分割し、前記列方向において前記Nで分割することによって1以上の第1分割行列を生成する第1行列分割部と、
    前記記憶装置に記憶された前記第2行列を、前記行方向において前記Mで分割し、前記列方向において前記最小公倍数で分割することによって1以上の第2分割行列を生成する第2行列分割部と、
    前記第1行列において同一列に位置する前記1以上の第1分割行列が、前記情報処理装置において異なる列に配置された前記演算器に記憶されるように、生成された前記1以上の第1分割行列を前記演算器の記憶部にそれぞれ記憶し、前記第2行列において同一行に位置する前記1以上の第2分割行列が、前記情報処理装置において異なる行に配置された前記演算器に記憶されるように、生成された前記1以上の第2分割行列を前記記憶部にそれぞれ記憶する行列記憶部と、
    前記演算器毎に、各演算器の前記記憶部に記憶された前記1以上の第1分割行列と前記1以上の第2分割行列との第1の積を、各演算器の前記記憶部に記憶された第1結果行列に加算する行列演算部と、
    前記演算器毎に、各演算器の前記記憶部に記憶された前記1以上の第1分割行列を、前記行方向においてトラース接続された他の演算器のうち、直接接続された演算器に送信し、前記演算器毎に、各演算器の前記記憶部に記憶された前記1以上の第2分割行列を、前記列方向においてトラース接続された他の演算器のうち、直接接続された演算器に送信する行列送受信部と、を有し、
    前記行列演算部は、前記演算器毎に、他の演算器から前記1以上の第1分割行列と前記1以上の第2分割行列とを受信したことに応じて、受信した前記1以上の第1分割行列と前記1以上の第2分割行列との第2の積を、各演算器の前記記憶部に記憶された前記第1結果行列に加算し、
    前記行列送受信部は、前記1以上の第1分割行列の送信と、前記1以上の第2分割行列の送信とを、各演算器の前記記憶部に記憶された前記1以上の第1分割行列から算出される積が、トラース接続された前記演算器のそれぞれにおいて前記第1結果行列に加算され、各演算器の前記記憶部に記憶された前記1以上の第2分割行列から算出される積が、トラース接続された前記演算器のそれぞれにおいて前記第1結果行列に加算されるまで繰り返し、
    前記行列演算部は、前記第2の積の加算を、各演算器の前記記憶部に記憶された前記1以上の第1分割行列から算出される積が、トラース接続された前記演算器のそれぞれにおいて前記第1結果行列に加算され、各演算器の前記記憶部に記憶された前記1以上の第2分割行列から算出される積が、トラース接続された前記演算器のそれぞれにおいて前記第1結果行列に加算されるまで繰り返す、
    ことを特徴とする演算システム。
JP2017033409A 2017-02-24 2017-02-24 演算方法、演算装置、演算プログラム及び演算システム Active JP6912703B2 (ja)

Priority Applications (4)

Application Number Priority Date Filing Date Title
JP2017033409A JP6912703B2 (ja) 2017-02-24 2017-02-24 演算方法、演算装置、演算プログラム及び演算システム
EP18156090.5A EP3370162B1 (en) 2017-02-24 2018-02-09 Computing method, information processing apparatus, computing program, and information processing system
US15/894,995 US10558730B2 (en) 2017-02-24 2018-02-13 Computing method, information processing apparatus, computing program, and information processing system
CN201810155419.2A CN108509384B (zh) 2017-02-24 2018-02-23 计算方法、信息处理装置、计算程序及信息处理系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2017033409A JP6912703B2 (ja) 2017-02-24 2017-02-24 演算方法、演算装置、演算プログラム及び演算システム

Publications (2)

Publication Number Publication Date
JP2018139045A JP2018139045A (ja) 2018-09-06
JP6912703B2 true JP6912703B2 (ja) 2021-08-04

Family

ID=61192728

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2017033409A Active JP6912703B2 (ja) 2017-02-24 2017-02-24 演算方法、演算装置、演算プログラム及び演算システム

Country Status (4)

Country Link
US (1) US10558730B2 (ja)
EP (1) EP3370162B1 (ja)
JP (1) JP6912703B2 (ja)
CN (1) CN108509384B (ja)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP3602278B1 (en) 2017-03-20 2022-09-28 Intel Corporation Systems, methods, and apparatuses for tile matrix multiplication and accumulation
US11138291B2 (en) * 2017-09-26 2021-10-05 Oracle International Corporation Assymetric allocation of SRAM and data layout for efficient matrix multiplication
CN111859273A (zh) * 2017-12-29 2020-10-30 华为技术有限公司 矩阵乘法器
US11093580B2 (en) * 2018-10-31 2021-08-17 Advanced Micro Devices, Inc. Matrix multiplier with submatrix sequencing

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH06175986A (ja) * 1992-12-10 1994-06-24 Nippon Telegr & Teleph Corp <Ntt> 行列演算の並列処理方法
CN102411558B (zh) * 2011-10-31 2015-05-13 中国人民解放军国防科学技术大学 面向向量处理器的大矩阵相乘的向量化实现方法
CN103294648B (zh) * 2013-05-08 2016-06-01 中国人民解放军国防科学技术大学 支持多mac运算部件向量处理器的分块矩阵乘法向量化方法
CN103440121B (zh) * 2013-08-20 2016-06-29 中国人民解放军国防科学技术大学 一种面向向量处理器的三角矩阵乘法向量化方法
CN104572587B (zh) * 2014-12-23 2017-11-14 中国电子科技集团公司第三十八研究所 数据矩阵相乘的加速运算方法和装置
CN104899182B (zh) * 2015-06-09 2017-10-31 中国人民解放军国防科学技术大学 一种支持可变分块的矩阵乘加速方法
US9805001B2 (en) * 2016-02-05 2017-10-31 Google Inc. Matrix processing apparatus

Also Published As

Publication number Publication date
US20180246854A1 (en) 2018-08-30
JP2018139045A (ja) 2018-09-06
CN108509384B (zh) 2022-04-12
US10558730B2 (en) 2020-02-11
EP3370162A3 (en) 2018-09-12
EP3370162B1 (en) 2023-06-07
CN108509384A (zh) 2018-09-07
EP3370162A2 (en) 2018-09-05

Similar Documents

Publication Publication Date Title
JP6912703B2 (ja) 演算方法、演算装置、演算プログラム及び演算システム
EP3557484A1 (en) Neural network convolution operation device and method
US9231999B2 (en) Multi-level load balancer
US11169808B2 (en) Blockwise matrix multiplication system
US9886418B2 (en) Matrix operands for linear algebra operations
CN111984189B (zh) 神经网络计算装置和数据读取、数据存储方法及相关设备
CN111476718A (zh) 一种图像放大方法、装置、存储介质及终端设备
CN110580324A (zh) 矩阵运算方法、装置、计算机设备和存储介质
CN110719345A (zh) 虚拟机mac地址生成方法、系统、设备及计算机介质
WO2021036729A1 (zh) 一种矩阵运算方法、运算装置以及处理器
JP2018197906A (ja) 情報処理装置、マルチスレッド行列演算方法、およびマルチスレッド行列演算プログラム
CN117273084A (zh) 神经网络模型的计算方法、装置、电子设备及存储介质
CN107705838A (zh) 一种医学影像的传输方法、装置、服务器、介质及系统
CN112000485A (zh) 任务分配方法、装置、电子设备及计算机可读存储介质
US20220253507A1 (en) Information processing apparatus
CN113205578B (zh) 图层处理方法、图层渲染方法及相关设备
CN113377536B (zh) 一种网格生成系统及方法
US11960946B2 (en) Message-based processing system and method of operating the same
JP4035557B1 (ja) アイテム配分システム及び方法
CN107247673B (zh) 一种内存分配方法和装置
US20240195866A1 (en) Distributed Computing in a Hosted Spreadsheet Application
CN112966180B (zh) 请求处理方法、装置、设备、介质和程序产品
US20220004363A1 (en) Semiconductor device, data generation methods used for the same, and method of controlling the same
US8423884B1 (en) System, method and computer readable storage medium for storing the method for operating graphic user interface
Fasi et al. Fast Generation of Extreme-Scale Matrices with Pre-Assigned 2-Norm Condition Number

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20191112

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20201030

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20201117

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20201221

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20210621

R150 Certificate of patent or registration of utility model

Ref document number: 6912703

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150