JP6607078B2 - 並列計算機、並列lu分解方法及び並列lu分解プログラム - Google Patents

並列計算機、並列lu分解方法及び並列lu分解プログラム Download PDF

Info

Publication number
JP6607078B2
JP6607078B2 JP2016032299A JP2016032299A JP6607078B2 JP 6607078 B2 JP6607078 B2 JP 6607078B2 JP 2016032299 A JP2016032299 A JP 2016032299A JP 2016032299 A JP2016032299 A JP 2016032299A JP 6607078 B2 JP6607078 B2 JP 6607078B2
Authority
JP
Japan
Prior art keywords
matrix
communication
size
time
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.)
Active
Application number
JP2016032299A
Other languages
English (en)
Other versions
JP2017151635A (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 JP2016032299A priority Critical patent/JP6607078B2/ja
Priority to US15/361,887 priority patent/US10417302B2/en
Publication of JP2017151635A publication Critical patent/JP2017151635A/ja
Application granted granted Critical
Publication of JP6607078B2 publication Critical patent/JP6607078B2/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
    • 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/11Complex mathematical operations for solving equations, e.g. nonlinear equations, general mathematical optimization problems
    • G06F17/12Simultaneous equations, e.g. systems of linear equations

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)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Computing Systems (AREA)
  • Operations Research (AREA)
  • Complex Calculations (AREA)

Description

本発明は、並列計算技術に関する。
物理学に現れる問題を定式化して数値計算によって解く場合、連立一次方程式を解くことに帰着することが多い。このような連立一次方程式をコンピュータシステムが解く際の計算性能を測定するためのベンチマークとして、Linpackベンチマークが知られている。LinpackベンチマークはTOP500のランク付けに使用されているため、連立一次方程式をコンピュータシステムによって高速に解く技術が注目されている。なお、Linpack自体は数値計算を行うためのソフトウエアライブラリであり、特に並列計算機システムにおける複数のノード(例えばプロセス或いはプロセッサコア等)が密行列の連立一次方程式を並列で解くためのライブラリがHPL(High-Performance Linpack)である。
通常、連立一次方程式Ax=bの計算においては、最初に行列Aが上三角行列及び下三角行列に分解され(この分解はLU分解と呼ばれる)、その後にxが求められる。従って、LU分解の実行時間を短縮することができれば、連立一次方程式を解くのに要する時間を短縮することができる。
特開平7−271760号公報
本発明の目的は、1つの側面では、並列計算機によるLU分解の実行時間を短縮するための技術を提供することである。
本発明に係る並列計算機は、LU分解を並列で実行する複数の処理部を有する。そして、複数の処理部の各々が、第1サイズの行列での行列積が完了してから複数の処理部のうち他の処理部との通信が完了するまでの時間である第1の時間を計測する計測部と、計測部により計測された第1の時間が所定時間以上である場合、行列積に使用する行列のサイズを、第1サイズより小さい第2サイズに変更する変更部とを有する。
1つの側面では、並列計算機によるLU分解の実行時間を短縮できるようになる。
図1は、並列計算機の構成を示す図である。 図2は、ノードのハードウエア構成図である。 図3は、ノードの機能ブロック図である。 図4は、本実施の形態において使用される記号について説明するための図である。 図5は、本実施の形態において使用される記号について説明するための図である。 図6は、本実施の形態において使用される記号について説明するための図である。 図7は、LU分解の進行について説明するための図である。 図8は、プロセスグリッドを示す図である。 図9は、分割された行列Aを示す図である。 図10は、各プロセスに割り当てられたブロックを示す図である。 図11は、並列計算機において実行される処理の処理フローを示す図である。 図12は、処理の内容を説明するための図である。 図13は、処理の内容を説明するための図である。 図14は、並列計算機において実行される処理の処理フローを示す図である。 図15は、Uj a及びCj aについての更新処理の処理フローを示す図である。 図16は、プロセスP2及びP3が実行する処理の内容を説明するための図である。 図17は、プロセスP2及びP3が実行する処理の内容を説明するための図である。 図18は、処理の内容を説明するための図である。 図19は、処理の内容を説明するための図である。 図20は、処理の内容を説明するための図である。 図21は、処理の内容を説明するための図である。 図22は、処理の内容を説明するための図である。 図23は、通信と行列積の計算との並列処理について説明するための図である。 図24は、通信制御処理の処理フローを示す図である。 図25は、通信制御処理の処理フローを示す図である。 図26は、通信制御処理の処理フローを示す図である。 図27は、行列積の一例を示す図である。 図28Aは、単位ブロック毎の行列積の一例を示す図である。 図28Bは、単位ブロック毎の行列積の一例を示す図である。 図29Aは、単位ブロック毎の行列積の一例を示す図である。 図29Bは、単位ブロック毎の行列積の一例を示す図である。 図30は、待ち時間の短縮について説明するための図である。 図31は、待ち時間の短縮について説明するための図である。 図32は、待ち時間の短縮について説明するための図である。
図1に、本実施の形態における並列計算機1の構成を示す。並列計算機1は、物理的な処理ユニットであるノードn0乃至n7を有する。ノードn0乃至n7の各々はインターコネクト100に接続されており、計算に使用するデータ等をインターコネクト100を介して他のノードと交換する。ノードn0乃至n7は、例えば連立一次方程式を解く等のジョブを、協調して動作することで処理する。なお、図1においてはノードの数は8であるが、数に限定は無い。
図2に、ノードn0のハードウエア構成図を示す。ノードn0は、CPU(Central Processing Unit)101と、メモリ102と、通信部103と、バス104とを有する。CPU101と、メモリ102と、通信部103とは、バス104によって接続される。本実施の形態における処理を実行するためのプログラムは、メモリ102にロードされCPU101によって実行されることで、図3に示すような各種機能を実現する。通信部103は、CPU101とは独立して動作し、他のノードにデータを送信及び他のノードからデータを受信する処理を実行する。なお、ノードn0以外のノードのハードウエア構成図はノードn0のハードウエア構成図と同じである。
図3に、ノードn0の機能ブロック図を示す。ノードn0は、計測部151と、変更部152と、計算部153と、通信制御部154とを有する。なお、ノードn0以外のノードの機能ブロック図はノードn0の機能ブロック図と同じである。
計測部151は、行列積が完了した時点から通信が終了するまでの待ち時間を計測する。変更部152は、行列積の計算に使用する行列のサイズを変更する。計算部153は、行列の処理(例えば行列積の計算等)を実行する。通信制御部154は、通信部103による通信の実行を制御(具体的には、送信の開始、受信の開始、送信完了の確認及び受信完了の確認など)する。
図4乃至図6を用いて、本実施の形態において使用される記号について説明する。図4には、LU分解の対象である行列Aが示されている。行列Aを幅がNBである正方形のブロックに分割した場合において、j(jは0以上の整数)番目の対角部分のブロックをBjと呼ぶ。Bjの下の列ブロック(列パネルとも呼ばれる)をLjと呼び、Bjの右の行ブロック(行パネルとも呼ばれる)をUjと呼ぶ。LjとUjとで囲まれた右下部分をCjと呼ぶ。
また、図5に示すように、Ujの左端部分のブロックをUj aと呼び、UjのうちUj a以外の部分をUj bと呼ぶ。Cjの左端の列ブロックをCj aと呼び、CjのうちCj a以外の部分をCj bと呼ぶ。
また、図6に示すように、Bjの下三角行列をBj Lと呼ぶ。
LU分解を実行する場合、行列Aは幅NBのブロックに分割され、複数のノードにブロックが分配される。各ノードは割り当てられたブロックに対して行列積の計算等を実行するが、全体としては、図7に示すように、矢印の方向にLU分解が進行する。そのため、LU分解においては、ノード間で行列の要素を交換するための通信が実行される。
以下では、説明を簡単にするため、図1に示した8台のノードで並列計算を実行することを考える。そして、ノードn0において動作するプロセスをP0とし、ノードn1において動作するプロセスをP1とし、ノードn2において動作するプロセスをP2とし、ノードn3において動作するプロセスをP3とし、ノードn4において動作するプロセスをP4とし、ノードn5において動作するプロセスをP5とし、ノードn6において動作するプロセスをP6とし、ノードn7において動作するプロセスをP7とする。
図8に、プロセスグリッドを示す。図8に示すように、プロセスP0乃至P7は論理的に2次元のプロセスグリッドに割り当てられる。図2の例では、8個のプロセスが2*4の2次元に割り当てられている。行列Aのブロックは、各プロセスに対してサイクリックに割り当てられる。
行列Aは図9に示すように分割され、各ブロックはプロセスP0乃至P7に割り当てられる。具体的には、ブロック00、ブロック20、ブロック40、ブロック60、ブロック04、ブロック24、ブロック44及びブロック64はプロセスP0に割り当てられる。ブロック10、ブロック30、ブロック50、ブロック70、ブロック14、ブロック34、ブロック54及びブロック74はプロセスP1に割り当てられる。ブロック01、ブロック21、ブロック41、ブロック61、ブロック05、ブロック25、ブロック45及びブロック65はプロセスP2に割り当てられる。ブロック11、ブロック31、ブロック51、ブロック71、ブロック15、ブロック35、ブロック55及びブロック75はプロセスP3に割り当てられる。ブロック02、ブロック22、ブロック42、ブロック62、ブロック06、ブロック26、ブロック46及びブロック66はプロセスP4に割り当てられる。ブロック12、ブロック32、ブロック52、ブロック72、ブロック16、ブロック36、ブロック56及びブロック76はプロセスP5に割り当てられる。ブロック03、ブロック23、ブロック43、ブロック63、ブロック07、ブロック27、ブロック47及びブロック67はプロセスP6に割り当てられる。ブロック13、ブロック33、ブロック53、ブロック73、ブロック17、ブロック37、ブロック57及びブロック77はプロセスP7に割り当てられる。
図10に、各プロセスに割り当てられたブロックを示す。各プロセスは、割り当てられたブロック及び他のプロセスから受信したブロックを用いて行列の処理(例えば行列積)を実行する。このような割り当ては、並列計算の開始前に行われる。
次に、図11乃至図32を用いて、並列計算機1の動作を説明する。
まず、並列計算機1における各ノードのプロセスは、処理対象のブロックを特定するための変数jをj=0と設定する(図11:ステップS1)。
プロセスP0及びP1は、Bj及びLjについてパネル分解を実行する(ステップS3)。例えば図12に示すように、パネル分解においては、プロセスP0とプロセスP1とが行交換のための通信を実行し、ピボットの行交換の情報はピボットデータとして保存される。また、パネル分解においては消去の処理が実行される。パネル分解はよく知られた技術であるので、ここでは詳細な説明を省略する。
並列計算機1における各ノードのプロセスは、ステップS3の処理後のBj及びLj、並びに、ステップS3において取得したピボットデータを、同じ行のプロセスの間で送受信する(ステップS5)。
ステップS5においては、例えば図13に示すように送受信が行われる。具体的には、プロセスP0はプロセスP2に対する送信を行い、プロセスP2はプロセスP0から受信したデータをプロセスP4に送信し、プロセスP4はプロセスP2から受信したデータをプロセスP6に送信し、プロセスP6はプロセスP4からデータを受信する。また、プロセスP1はプロセスP3に対する送信を行い、プロセスP3はプロセスP1から受信したデータをプロセスP5に送信し、プロセスP5はプロセスP3から受信したデータをプロセスP7に送信し、プロセスP7はプロセスP5からデータを受信する。これにより、プロセスP0、プロセスP2、プロセスP4及びプロセスP6はピボットデータとブロック00、ブロック20、ブロック40及びブロック60とを保持する。プロセスP1、プロセスP3、プロセスP5及びプロセスP7はピボットデータとブロック10、ブロック30、ブロック50及びブロック70とを保持する。HPLにおいては、この送信方法はIncreasing−ringと呼ばれる。
並列計算機1における各ノードのプロセスは、行列積の単位ブロックサイズM1及びN1を設定する(ステップS7)。M1は列方向(すなわち上下方向)のブロックサイズであり、N1は行方向(すなわち左右方向)のブロックサイズである。単位ブロックサイズは行列積の演算性能を考慮して設定されるが、ステップS7においては、初期的にM1=N1=NBと設定される。処理は端子Aを介して図14のステップS9に移行する。
図14の説明に移行し、Uj a及びCj aを保持しているプロセスP2及びP3は、Uj a及びCj aについての更新処理を実行する(図14:ステップS9)。Uj a及びCj aについての更新処理については、図15及び図16を用いて説明する。なお、ステップS9の更新処理は、ステップS11においてBj+1およびLj+1のパネル分解を実行するための準備段階の処理として行われる。
まず、プロセスP2及びP3は、Ljのパネル分解時に取得したピボットデータによって、Uj a及びCj aについて行交換を実行する(図15:ステップS31)。図16(a)に示すように、Uj aとCj aの一部とはプロセスP2に配置され、Cj aの一部がプロセスP3に配置されている。ステップS31においては、Uj a及びCj aについて、プロセスP2とP3とが通信を行いつつ行交換を実行する。
プロセスP2は、Bjを用いてUj aの更新計算を実行する(ステップS33)。図16(b)に示すように、Uj a(すなわちブロック01)を保持しているのはプロセスP2であるので、本処理はプロセスP3においては実行されない。
プロセスP2は、ステップS33の処理後のUj aを、同じ列のプロセスに送信(ここではブロードキャスト)する(ステップS35)。すなわち、図16(c)に示すように、プロセスP2からプロセスP3に対してUj aが送信される。
プロセスP2及びP3は、ステップS33の処理後のUj a等に基づき、行列積Cj a→Cj a−Ljj aを実行する(ステップS37)。そして呼び出し元の処理に戻る。ステップS37の処理によって更新されるCj aは、図16(d)において破線で囲まれた部分に相当する。
図14の説明に戻り、プロセスP2及びP3は、Bj+1及びLj+1についてパネル分解を実行する(ステップS11)。パネル分解については、ステップS3において説明したとおりである。例えば図17に示すように、プロセスP2とプロセスP3とが行交換のための通信を実行し、ピボットの行交換の情報はピボットデータとして保存される。また、パネル分解においては消去の処理が実行される。
各プロセスは、Ljのパネル分解時に取得したピボットデータによって、Uj b及びCj bについて行交換を実行する(ステップS13)。例えば図18に示すように、太線で囲まれた部分がUj bに相当し、Uj bの下に位置するブロックはCj bに相当する。ステップS13においては、Uj b及びCj bについて、プロセスP0とP1とが通信を行いつつ行交換を実行し、プロセスP2とP3とが通信を行いつつ行交換を実行し、プロセスP4とP5とが通信を行いつつ行交換を実行し、プロセスP6とP7とが通信を行いつつ行交換を実行する。
プロセスP0、プロセスP2、プロセスP4及びプロセスP6は、Bj Lを用いてUj bの更新計算を実行する(ステップS15)。Uj bは、図19において太線で囲まれた部分に相当し、Bj Lは、図19において破線で囲まれた部分に相当する。ステップS15においては、Bj LX=Uj bが解かれ、元のUj bがXで置き換えられる。ここで、Bj Lは下三角行列であるので、Uj bの各列について後退代入を行えばよい。
プロセスP0、プロセスP2、プロセスP4及びプロセスP6は、ステップS15の処理後のUj bを、同じ列のプロセスに送信(ここではブロードキャスト)する(ステップS17)。すなわち、図20に示すように、プロセスP0からプロセスP1に対してUj bの一部が送信され、プロセスP2からプロセスP3に対してUj bの一部が送信され、プロセスP4からプロセスP5に対してUj bの一部が送信され、プロセスP6からプロセスP7に対してUj bの一部が送信される。
各プロセスは、通信と行列積Cj b←Cj b−Ljj bの計算との並列処理を実行する(ステップS19)。ステップS19の処理については、図21乃至図29Bを用いて説明する。なお、通信と行列積の計算とを並列で実行する技術はLook−aheadと呼ばれる。
まず、図21を用いて、ステップS19において実行される通信について説明する。ステップS19においては、プロセスP2及びP3が、Bj+1及びLj+1、並びに、Lj+1のパネル分解時に取得したピボットデータを、プロセスP4及びP5に送信する。プロセスP4及びP5は、プロセスP2及びP3から受信したデータをプロセスP6及びP7に送信する。プロセスP6及びP7は、プロセスP4及びP5から受信したデータをプロセスP0及びP1に送信する。プロセスP0及びP1は、プロセスP6及びP7からデータを受信する。これにより、プロセスP0、プロセスP2、プロセスP4及びプロセスP6はピボットデータとブロック21、ブロック41及びブロック61とを保持する。プロセスP1、プロセスP3、プロセスP5及びプロセスP7はピボットデータとブロック11、ブロック31、ブロック51及びブロック71とを保持する。
図22を用いて、ステップS19において通信と並列で実行される行列積について説明する。実行される行列積はCj b←Cj b−Ljj bであり、Uj bは図22におけるブロック02、ブロック03、ブロック04、ブロック05、ブロック06及びブロック07に相当し、Ljは図22におけるブロック10、ブロック20、ブロック30、ブロック40、ブロック50、ブロック60及びブロック70に相当する。そして、Cj bは図22において破線で囲まれた部分に相当する。
通信と行列積の計算とは並列で実行されるが、本実施の形態においては、行列積の計算に使用する行列のサイズを変更することで、ステップS19の処理が終了するまでに要する時間を短縮する。この方法について、図23乃至図29Bを用いて説明する。
まず、計算部153は、行列積の計算が完了したか又は通信が完了したか判定する(図23:ステップS41)。行列積の計算及び通信が完了していない場合(ステップS41:Noルート)、通信制御部154は、通信制御処理を実行する(ステップS43)。通信制御処理については、図24乃至図26を用いて説明する。
まず、通信制御部154は、自プロセスが通信の中間プロセスであるか判定する(図24:ステップS71)。通信の中間プロセスとは、Bj+1、Lj+1及びピボットデータの送信と受信の両方を実行するプロセスであり、例えば図21の例であれば、プロセスP4乃至P7である。
自プロセスが通信の中間プロセスである場合(ステップS71:Yesルート)、通信制御部154は、今回の呼び出しが初回の呼び出しであるか判定する(ステップS73)。今回の呼び出しが初回の呼び出しである場合(ステップS73:Yesルート)、通信制御部154は、例えば通信ライブラリであるMPI(Message Passing Interface)における通信ルーチンMPI_Irecvを呼び出すことにより、通信部103に受信を開始させる(ステップS75)。MPI_Irecvを呼び出すと、制御はすぐにCPU101に戻されるので、通信の制御のためにCPU101が長時間占有されることはなく、計算部153は、受信の完了を待つ間、行列積の計算を継続できる。
通信制御部154は、メモリ102におけるCFLAGをCFLAG=1と設定し、メモリ102におけるEFLAGをEFLAG=0と設定する(ステップS77)。そして呼び出し元の処理に戻る。
CFLAGは通信の状態を管理するためのフラグであり、「CFLAG=1」は受信中であることを表し、「CFLAG=2」は送信中であることを表し、「CFLAG=0」は通信が完了したことを表す。
EFLAGは通信が完了したか否かを上位ルーチンに通知するためのフラグであり、「ELFAG=0」は通信が完了していないことを表す。「ELFAG=1」は通信が完了したことを表す。
一方、今回の呼び出しが初回の呼び出しではない場合(ステップS73:Noルート)、通信制御部154は、CFLAG=1であるか判定する(ステップS79)。
CFLAG=1である場合(ステップS79:Yesルート)、通信制御部154は、受信が終了したか判定する(ステップS81)。なお、MPIにおける通信ルーチンMPI_testを呼び出せば、指定した通信が終了したか否かを示す情報が返却されるので、これによって受信が終了したか否かが確認される。MPI_Irecvと同様、MPI_testの場合も制御はすぐにCPU101に戻されるので、通信の制御のためにCPU101が長時間占有されることはない。
受信が終了していない場合(ステップS81:Noルート)、通信制御部154は、メモリ102におけるEFLAGをEFLAG=0と設定し(ステップS83)、呼び出し元の処理に戻る。
一方、受信が終了した場合(ステップS81:Yesルート)、通信制御部154は、MPIにおける通信ルーチンMPI_Isendを呼び出すことにより、通信部103に送信を開始させる(ステップS85)。MPI_Irecv及びMPI_testと同様、MPI_Isendの場合も制御はすぐにCPU101に戻されるので、通信の制御のためにCPU101が長時間占有されることはなく、計算部153は、送信の完了を待つ間、行列積の計算を継続できる。
通信制御部154は、メモリ102におけるCFLAGをCFLAG=2と設定し、メモリ102におけるEFLAGをEFLAG=0と設定する(ステップS87)。そして呼び出し元の処理に戻る。
一方、CFLAG=0である場合(ステップS79:Noルート)、通信制御部154は、送信が終了したか判定する(ステップS89)。なお、MPIにおける通信ルーチンMPI_testを呼び出せば、指定した通信が終了したか否かを示す情報が返却されるので、これによって送信が終了したか否かが確認される。
送信が終了していない場合(ステップS89:Noルート)、通信制御部154は、メモリ102におけるEFLAGをEFLAG=0と設定し(ステップS91)、呼び出し元の処理に戻る。
一方、送信が終了した場合(ステップS89:Yesルート)、通信制御部154は、メモリ102におけるCFLAGをCFLAG=0と設定し、メモリ102におけるEFLAGをEFLAG=1と設定する(ステップS93)。そして呼び出し元の処理に戻る。
一方、自プロセスが通信の中間プロセスではない場合(ステップS71:Noルート)、通信制御部154は、自プロセスが通信の先頭プロセスであるか判定する(ステップS95)。通信の先頭プロセスとは、Bj+1、Lj+1及びピボットデータの送信のみを実行するプロセスであり、例えば図21の例であればプロセスP2及びP3である。
自プロセスが通信の先頭プロセスである場合(ステップS95:Yesルート)、処理は端子Cを介して図25のステップS97の処理に移行する。一方、自プロセスが通信の先頭プロセスではない場合(ステップS95:Noルート)、処理は端子Dを介して図26のステップS111の処理に移行する。
端子C以降の処理について説明する。通信制御部154は、今回の呼び出しが初回の呼び出しであるか判定する(図25:ステップS97)。今回の呼び出しが初回の呼び出しである場合(ステップS97:Yesルート)、通信制御部154は、例えばMPIにおける通信ルーチンMPI_Isendを呼び出すことにより、通信部103に送信を開始させる(ステップS99)。MPI_Isendを呼び出すと、制御はすぐにCPU101に戻されるので、通信の制御のためにCPU101が長時間占有されることはなく、計算部153は、送信の完了を待つ間、行列積の計算を継続できる。
通信制御部154は、メモリ102におけるCFLAGをCFLAG=2と設定し、メモリ102におけるEFLAGをEFLAG=0と設定する(ステップS101)。そして処理は端子Eを介して呼び出し元の処理に戻る。
一方、今回の呼び出しが初回の呼び出しではない場合(ステップS97:Noルート)、通信制御部154は、送信が終了したか判定する(ステップS103)。なお、MPIにおける通信ルーチンMPI_testを呼び出せば、指定した通信が終了したか否かを示す情報が返却されるので、これによって送信が終了したか否かが確認される。
送信が終了していない場合(ステップS103:Noルート)、通信制御部154は、メモリ102におけるEFLAGをEFLAG=0と設定し(ステップS105)、処理は端子Eを介して呼び出し元の処理に戻る。
一方、送信が終了した場合(ステップS103:Yesルート)、通信制御部154は、メモリ102におけるCFLAGをCFLAG=0と設定し、メモリ102におけるEFLAGをEFLAG=1と設定する(ステップS107)。そして処理は端子Eを介して呼び出し元の処理に戻る。
端子D以降の処理について説明する。通信制御部154は、今回の呼び出しが初回の呼び出しであるか判定する(図26:ステップS111)。今回の呼び出しが初回の呼び出しである場合(ステップS111:Yesルート)、通信制御部154は、例えばMPIにおける通信ルーチンMPI_Irecvを呼び出すことにより、通信部103に受信を開始させる(ステップS113)。MPI_Irecvを呼び出すと、制御はすぐにCPU101に戻されるので、通信の制御のためにCPU101が長時間占有されることはなく、計算部153は、受信の完了を待つ間、行列積の計算を継続できる。
通信制御部154は、メモリ102におけるCFLAGをCFLAG=1と設定し、メモリ102におけるEFLAGをEFLAG=0と設定する(ステップS115)。そして処理は端子Fを介して呼び出し元の処理に戻る。
一方、今回の呼び出しが初回の呼び出しではない場合(ステップS111:Noルート)、通信制御部154は、受信が終了したか判定する(ステップS117)。なお、MPIにおける通信ルーチンMPI_testを呼び出せば、指定した通信が終了したか否かを示す情報が返却されるので、これによって受信が終了したか否かが確認される。
受信が終了していない場合(ステップS117:Noルート)、通信制御部154は、メモリ102におけるEFLAGをEFLAG=0と設定し(ステップS119)、処理は端子Fを介して呼び出し元の処理に戻る。
一方、受信が終了した場合(ステップS117:Yesルート)、通信制御部154は、メモリ102におけるCFLAGをCFLAG=0と設定し、メモリ102におけるEFLAGをEFLAG=1と設定する(ステップS121)。そして処理は端子Fを介して呼び出し元の処理に戻る。
以上のような処理によって、プロセス間の通信が制御される。なお、実際のデータ(例えば行列の要素など)の転送は通信部103により行われるので、通信部103が通信を行う間、CPU101は通信制御のための若干の処理に要する時間を除いて、計算に専念することができる。
図23の説明に戻り、計算部153は、1つの単位ブロック(M1*N1)についての行列積を計算する(ステップS45)。そしてステップS41の処理に戻る。
例えば図27に示すような行列積を実行する例を考える。この場合、単位ブロックはブロック22、ブロック42、ブロック62、ブロック26、ブロック46及びブロック66であるので、図28A及び図28Bに示すように、6回に分けて行列積が実行される。すなわち、行列積Cj 22←Cj 22−Lj 20j 02と、行列積Cj 42←Cj 42−Lj 40j 02と、行列積Cj 62←Cj 62−Lj 60j 02と、行列積Cj 26←Cj 26−Lj 20j 06と、行列積Cj 46←Cj 46−Lj 40j 06と、行列積Cj 66←Cj 66−Lj 60j 06とが実行される。ここで、上付きの数字はブロックの番号を表す。
一方、行列積の計算又は通信が完了した場合(ステップS41:Yesルート)、計算部153は、未実行の行列積が有る場合には未実行の行列積を実行する(ステップS47)。未実行の行列積が無い場合には、ステップS47の処理はスキップされる。なお、未実行の行列積が有る場合とは、行列積の計算よりも通信の方が早く終わった場合である。
計測部151は、変数T0に現在の時刻を設定する(ステップS49)。なお、ステップS47の処理を実行した場合には行列積の計算よりも通信の方が早く終わったので、本ステップをスキップしてもよい。
通信制御部154は、EFLAG=0であるか判定する(ステップS51)。EFLAG=0である場合(ステップS51:Yesルート)、通信制御部154は、通信制御処理を実行する(ステップS53)。通信制御処理については上で説明したとおりであるので、ここでは説明を省略する。
一方、EFLAG=0ではない場合(ステップS51:Noルート)、通信は完了している。従って、計測部151は、変数T1に現在の時刻を設定する(ステップS55)。なお、ステップS47の処理を実行した場合には行列積の計算よりも通信の方が早く終わったので、本ステップをスキップしてもよい。
計測部151は、行列積が完了してから通信が完了するまでの時間(すなわち、CPU101の待ち時間)TTをTT=T1−T0によって算出する(ステップS57)。
変更部152は、Tp>Tminが成立し且つTT>Tminが成立するか判定する(ステップS59)。Tpは前回のTTであり、初回の処理である場合にはTp>Tminは成立しないと判定される。Tminは所定の時間であり、予め管理者によって設定される。
p>Tmin又はTT>Tminが成立しない場合(ステップS59:Noルート)、ステップS63の処理に移行する。一方、Tp>Tminが成立し且つTT>Tminが成立する場合(ステップS59:Yesルート)、変更部152は、単位ブロックの行方向のサイズN1をN1=MAX(1,N1*p)と設定する(ステップS61)。MAX(1,N1*p)は1とN1*pとのうちより大きい方の値を返す関数である。pは所定の割合であり、例えば0.5から0.8程度の値である。なお、ここではN1を小さくしているが、M1を小さくした方が計算の性能が上がる場合、M1を小さくしてもよい。
また、TTの条件だけでなくTpの条件をも確認することで、TTが何らかの要因で一時的に長くなった場合に誤って単位ブロックのサイズを小さくすることを防ぐことができるようになる。
計測部151は、TpをTp=TTと設定する(ステップS63)。そして呼び出し元の処理に戻る。
図14の説明に戻り、各プロセスは、jを1インクリメントし(ステップS21)、j>(行方向のブロック数−1)が満たされるか判定する(ステップS23)。行方向のブロック数とは、行列Aの行方向(すなわち左右方向)における、幅NBのブロックの数である。j>(行方向のブロック数−1)が満たされない場合(ステップS23:Noルート)、ステップS9の処理に戻る。一方、j>(行方向のブロック数−1)が満たされる場合(ステップS23:Yesルート)、処理は終了する。
例えば、図27に示した行列積について、ステップS61の処理によって行方向のサイズを半分にしたとする。この場合、図28Aに示した3回の行列積によって得られた結果は、図29Aに示した6回の行列積によって得られるようになり、図28Bに示した3回の行列積によって得られた結果は、図29Bに示した6回の行列積によって得られるようになる。図29A及び図29Bにおいて、上付きの括弧内の数字は、NB*NBのブロック内でのブロックの番号を表す。例えば、Cj 22(1)はCj 22の左半分のブロックを表し、Cj 22(2)はCj 22右半分のブロックを表す。
行列積の実行回数を増やせば、1回の行列積が終了するたびに実行される通信制御処理(ステップS43)をより高頻度で行えるようになる。これにより、通信が滞りなく進行するようになるので、行列積の完了後通信が完了するまでの待ち時間を短縮できるようになる。
図7で示したように、LU分解の計算では、処理が進行するにしたがって行列積の計算に使用する行列のサイズが小さくなっていく。これにより計算と通信のバランスが変化していく。
通信と行列積との計算とを並列で実行する場合に、処理の前半(すなわち、jが比較的小さい時)には全体の行列のサイズが大きい。このため、ブロックサイズM1及びN1を大きめに設定しても、1つのプロセスが計算する単位ブロックの数が十分多く、全ての通信は行列積の計算の裏で実行され、CPU101が通信の完了を待つことはない。
図30に、CPU101の待ち時間が生じない場合の例を示す。図30においては、図21で示した通信のうち、P2、P4、P6及びP0で行う通信が示されている。P6を例として動作を説明する。CPU101は、最初に受信開始を通信部103に指示し、そして行列積を実行する。1つの単位ブロック分の行列積を完了した後、受信の終了を確認するが、まだ通信は完了していないため、次の単位ブロックの行列積を実行する。行列積が完了して受信の終了を確認したところ、受信が終了していたため、次のノードへの送信を指示し、次の行列積を実行する。行列積が完了して送信の終了を確認したところ、送信は完了していたため、残りの行列積計算を実行する。
これに対し、処理の後半(すなわち、jが比較的大きい時)では、全体の行列のサイズが小さくなるため、行列積を計算対象の単位ブロックの数が少なくなり、通信の完了前に全ての単位ブロックの行列積の計算が完了してしまう。このとき、通信で受け取ったデータが無ければ次の行列積を実行できないので、通信が完了しないとCPU101は計算を始めることができず、通信の完了を待つことになる。
図31に、CPU101の待ち時間が生じる場合の例を示す。P6を例として動作を説明する。図31においては、P6が計算すべき行列積の単位ブロックが2つしかない。CPU101は最初に受信開始を通信部103に指示し、そして行列積を実行する。1つの単位ブロックの行列積が完了した後、受信の終了を確認するが、まだ通信は完了していないため、次の単位ブロックの行列積を実行する。行列積が完了して受信の終了を確認したところ、受信が完了していたため、次のノードへの送信を指示する。ここで、次の行列積の計算に使用する単位ブロックが無いため、CPU101の計算対象が存在せず、通信完了を待つことになる。
特に大規模なシステムにおいては、通信の先頭ノードから末端のノードまでの間のノードの数が多くなるので、CPU101が通信の完了を待つ時間が長くなる。ブロックサイズを小さくすれば、通信制御処理を実行する頻度が高くなるので、通信完了までの待ち時間を減らせることができる。しかし、行列積の計算には、行列のサイズが大きいほど計算効率が高くなるという性質がある。従って、単純に単位ブロックのサイズを小さくした場合には、行列積の計算時間が長くなるので、LU分解全体の実行時間を短縮することはできない。
このような問題に対して、本実施の形態においては、実際に発生した待ち時間がTminより長くなった段階で、単位ブロックのサイズが小さくされる。すなわち、図32に示すように、LU分解の後半においては、比較的小さな単位ブロックで行列積の計算が実行されるようになる。一方で、待ち時間が発生しない、LU分解の前半においては、比較的大きな単位ブロックで行列積が実行されるので、計算効率を落とすことなく行列積を実行することができる。これにより、全体としては、LU分解の実行時間が短縮されるようになる。
以上本発明の一実施の形態を説明したが、本発明はこれに限定されるものではない。例えば、上で説明したノードn0乃至n7の機能ブロック構成は実際のプログラムモジュール構成に一致しない場合もある。
また、処理フローにおいても、処理結果が変わらなければ処理の順番を入れ替えることも可能である。さらに、並列に実行させるようにしても良い。
以上述べた本発明の実施の形態をまとめると、以下のようになる。
本実施の形態の第1の態様に係る並列計算機は、(A)LU分解を並列で実行する複数の処理部を有する。そして、複数の処理部の各々が、(a1)第1サイズの行列での行列積が完了してから複数の処理部のうち他の処理部との通信が完了するまでの時間である第1の時間を計測する計測部と、(a2)計測部により計測された第1の時間が所定時間以上である場合、行列積に使用する行列のサイズを、第1サイズより小さい第2サイズに変更する変更部とを有する。
行列積に使用する行列のサイズが小さくなれば、1回の行列積にかかる時間は短くなるので、1回の行列積が完了した際に行う通信制御を頻繁に行えるようになる。これにより、通信がより早く完了するようになるので、第1の時間が短縮し、結果としてLU分解の実行時間を短縮できるようになる。
また、複数の処理部の各々が、(a3)行列積を実行する計算部と、(a4)他の処理部との通信を、計算部による行列積と並列で実行する通信部と、(a5)計算部による行列積が終了するたびに、通信部による通信の進行を継続させるための処理を実行する通信制御部とをさらに有してもよい。これにより、通信の進行が滞ることを抑制できるようになる。また、通信時間を隠蔽できるので、LU分解の実行時間を短縮できるようになる。
また、他の処理部との通信は、次の行列積に使用する行列及び当該行列のパネル分解時に取得したピボットデータを他の処理部から受信するための通信、および、次の行列積に使用する行列及び当該行列のパネル分解時に取得したピボットデータを他の処理部に送信するための通信の少なくともいずれかを含んでもよい。これにより、次の行列積を迅速に開始できるようになる。
また、上で述べた変更部は、(a21)行方向のサイズ及び列方向のサイズの少なくともいずれかを小さくすることにより、行列のサイズを第1サイズから第2サイズに変更してもよい。これにより、実行時間の短縮により寄与する形で行列積を実行できるようになる。
また、上で述べた計測部は、(a11)第1の時間を計測した後、第1サイズの行列で次の行列積演算を完了してから他の処理部との通信が完了までの時間である第2の時間をさらに計測してもよい。そして、上で述べた変更部は、(a22)計測部により計測された第1の時間が所定時間以上であり且つ計測部により計測された第2の時間が所定時間以上である場合、第1サイズより小さい第2サイズに変更してもよい。これにより、何らかの要因により一時的に第1の時間が長くなってしまったような場合に誤って行列のサイズを小さくしてしまうことを防げるようになる。
本実施の形態の第2の態様に係る並列LU分解方法は、LU分解を並列で実行する複数の処理部を有する並列計算機において実行される。そして、本並列LU分解方法は、複数の処理部の各々が、(B)第1サイズの行列での行列積が完了してから複数の処理部のうち他の処理部との通信が完了するまでの時間である第1の時間を計測し、(C)計測された第1の時間が所定時間以上である場合、行列積に使用する行列のサイズを、第1サイズより小さい第2サイズに変更する処理を含む。
なお、上記方法による処理をプロセッサに行わせるためのプログラムを作成することができ、当該プログラムは、例えばフレキシブルディスク、CD−ROM、光磁気ディスク、半導体メモリ、ハードディスク等のコンピュータ読み取り可能な記憶媒体又は記憶装置に格納される。尚、中間的な処理結果はメインメモリ等の記憶装置に一時保管される。
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
(付記1)
LU分解を並列で実行する複数の処理部
を有し、
前記複数の処理部の各々が、
第1サイズの行列での行列積が完了してから前記複数の処理部のうち他の処理部との通信が完了するまでの時間である第1の時間を計測する計測部と、
前記計測部により計測された前記第1の時間が所定時間以上である場合、行列積に使用する行列のサイズを、前記第1サイズより小さい第2サイズに変更する変更部と、
を有する並列計算機。
(付記2)
前記複数の処理部の各々が、
行列積を実行する計算部と、
前記他の処理部との通信を、前記計算部による行列積と並列で実行する通信部と、
前記計算部による行列積が終了するたびに、前記通信部による通信の進行を継続させるための処理を実行する通信制御部と、
をさらに有する付記1記載の並列計算機。
(付記3)
前記他の処理部との通信は、
次の行列積に使用する行列及び当該行列のパネル分解時に取得したピボットデータを前記他の処理部から受信するための通信、および、前記次の行列積に使用する行列及び当該行列のパネル分解時に取得したピボットデータを前記他の処理部に送信するための通信の少なくともいずれかを含む、
付記1又は2記載の並列計算機。
(付記4)
前記変更部は、
行方向のサイズ及び列方向のサイズの少なくともいずれかを小さくすることにより、行列のサイズを前記第1サイズから前記第2サイズに変更する、
付記1乃至3のいずれか1つ記載の並列計算機。
(付記5)
前記計測部は、
前記第1の時間を計測した後、前記第1サイズの行列で次の行列積演算を完了してから前記他の処理部との通信が完了までの時間である第2の時間をさらに計測し、
前記変更部は、
前記計測部により計測された前記第1の時間が前記所定時間以上であり且つ前記計測部により計測された前記第2の時間が前記所定時間以上である場合、行列積に使用する行列のサイズを前記第2サイズに変更する、
付記1記載の並列計算機。
(付記6)
LU分解を並列で実行する複数の処理部を有する並列計算機において実行される、並列LU分解方法であって、
前記複数の処理部の各々が、
第1サイズの行列での行列積が完了してから前記複数の処理部のうち他の処理部との通信が完了するまでの時間である第1の時間を計測し
計測された前記第1の時間が所定時間以上である場合、行列積に使用する行列のサイズを、前記第1サイズより小さい第2サイズに変更する、
処理を実行する並列LU分解方法。
(付記7)
プロセッサに、
第1サイズの行列での行列積が完了してから他のプロセッサとの通信が完了するまでの時間である第1の時間を計測し、
計測された前記第1の時間が所定時間以上である場合、行列積に使用する行列のサイズを、前記第1サイズより小さい第2サイズに変更する、
処理を実行させる並列LU分解プログラム。
1 並列計算機 100 インターコネクト
n0,n1,n2,n3,n4,n5,n6,n7 ノード
101 CPU 102 メモリ
103 通信部 104 バス
151 計測部 152 変更部
153 計算部 154 通信制御部

Claims (7)

  1. LU分解を並列で実行する複数の処理部
    を有し、
    前記複数の処理部の各々が、
    第1サイズの行列での行列積が完了してから前記複数の処理部のうち他の処理部との通信が完了するまでの時間である第1の時間を計測する計測部と、
    前記計測部により計測された前記第1の時間が所定時間以上である場合、行列積に使用する行列のサイズを、前記第1サイズより小さい第2サイズに変更する変更部と、
    を有する並列計算機。
  2. 前記複数の処理部の各々が、
    行列積を実行する計算部と、
    前記他の処理部との通信を、前記計算部による行列積と並列で実行する通信部と、
    前記計算部による行列積が終了するたびに、前記通信部による通信の進行を継続させるための処理を実行する通信制御部と、
    をさらに有する請求項1記載の並列計算機。
  3. 前記他の処理部との通信は、
    次の行列積に使用する行列及び当該行列のパネル分解時に取得したピボットデータを前記他の処理部から受信するための通信、および、前記次の行列積に使用する行列及び当該行列のパネル分解時に取得したピボットデータを前記他の処理部に送信するための通信の少なくともいずれかを含む、
    請求項1又は2記載の並列計算機。
  4. 前記変更部は、
    行方向のサイズ及び列方向のサイズの少なくともいずれかを小さくすることにより、行列のサイズを前記第1サイズから前記第2サイズに変更する、
    請求項1乃至3のいずれか1つ記載の並列計算機。
  5. 前記計測部は、
    前記第1の時間を計測した後、前記第1サイズの行列で次の行列積演算を完了してから前記他の処理部との通信が完了までの時間である第2の時間をさらに計測し、
    前記変更部は、
    前記計測部により計測された前記第1の時間が前記所定時間以上であり且つ前記計測部により計測された前記第2の時間が前記所定時間以上である場合、行列積に使用する行列のサイズを前記第2サイズに変更する、
    請求項1記載の並列計算機。
  6. LU分解を並列で実行する複数の処理部を有する並列計算機において実行される、並列LU分解方法であって、
    前記複数の処理部の各々が、
    第1サイズの行列での行列積が完了してから前記複数の処理部のうち他の処理部との通信が完了するまでの時間である第1の時間を計測し
    計測された前記第1の時間が所定時間以上である場合、行列積に使用する行列のサイズを、前記第1サイズより小さい第2サイズに変更する、
    処理を実行する並列LU分解方法。
  7. プロセッサに、
    第1サイズの行列での行列積が完了してから他のプロセッサとの通信が完了するまでの時間である第1の時間を計測し、
    計測された前記第1の時間が所定時間以上である場合、行列積に使用する行列のサイズを、前記第1サイズより小さい第2サイズに変更する、
    処理を実行させる並列LU分解プログラム。
JP2016032299A 2016-02-23 2016-02-23 並列計算機、並列lu分解方法及び並列lu分解プログラム Active JP6607078B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2016032299A JP6607078B2 (ja) 2016-02-23 2016-02-23 並列計算機、並列lu分解方法及び並列lu分解プログラム
US15/361,887 US10417302B2 (en) 2016-02-23 2016-11-28 Parallel computer, parallel LU-factorization method, and parallel LU-factorization program

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2016032299A JP6607078B2 (ja) 2016-02-23 2016-02-23 並列計算機、並列lu分解方法及び並列lu分解プログラム

Publications (2)

Publication Number Publication Date
JP2017151635A JP2017151635A (ja) 2017-08-31
JP6607078B2 true JP6607078B2 (ja) 2019-11-20

Family

ID=59629438

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016032299A Active JP6607078B2 (ja) 2016-02-23 2016-02-23 並列計算機、並列lu分解方法及び並列lu分解プログラム

Country Status (2)

Country Link
US (1) US10417302B2 (ja)
JP (1) JP6607078B2 (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11100426B1 (en) * 2017-11-07 2021-08-24 Amazon Technologies, Inc. Distributed matrix decomposition using gossip
US10331762B1 (en) 2017-12-07 2019-06-25 International Business Machines Corporation Stream processing for LU decomposition

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH06332931A (ja) * 1993-05-19 1994-12-02 Sumitomo Electric Ind Ltd Lu分解の並列演算処理方法
JP2953929B2 (ja) 1993-11-29 1999-09-27 日本電気株式会社 修正コレスキー分解計算装置
JP3639323B2 (ja) 1994-03-31 2005-04-20 富士通株式会社 メモリ分散型並列計算機による連立1次方程式計算処理方法および計算機
JP3983193B2 (ja) * 2003-03-31 2007-09-26 富士通株式会社 行列処理方法及び装置
CN101533386A (zh) * 2008-03-14 2009-09-16 国际商业机器公司 在多处理器系统上对矩阵进行qr分解的方法和装置
US8533251B2 (en) * 2008-05-23 2013-09-10 International Business Machines Corporation Optimized corner turns for local storage and bandwidth reduction
JP5343523B2 (ja) * 2008-11-17 2013-11-13 富士通株式会社 ジョブ管理装置、ジョブ管理方法およびジョブ管理プログラム
US8572622B2 (en) * 2009-12-30 2013-10-29 International Business Machines Corporation Reducing queue synchronization of multiple work items in a system with high memory latency between processing nodes
JP5725446B2 (ja) * 2011-03-25 2015-05-27 日本電気株式会社 分散並列プログラムの実行システム及び方法
US9836434B2 (en) * 2015-08-11 2017-12-05 International Business Machines Corporation Runtime of CUBLAS matrix multiplication on GPU

Also Published As

Publication number Publication date
US10417302B2 (en) 2019-09-17
JP2017151635A (ja) 2017-08-31
US20170242826A1 (en) 2017-08-24

Similar Documents

Publication Publication Date Title
Camara et al. Twisted torus topologies for enhanced interconnection networks
US10943324B2 (en) Data processing method, apparatus, and electronic device
JP2016527636A (ja) ネットワークオンチップアーキテクチャにおけるシステムレベルシミュレーション
CN111932257B (zh) 一种区块链并行化处理方法及装置
JP6607078B2 (ja) 並列計算機、並列lu分解方法及び並列lu分解プログラム
CN107479984B (zh) 基于消息的分布式空间数据处理系统
CN110908799A (zh) 一种分布式训练中的通信方法、装置、设备、介质
JP2004302928A (ja) Smpノード分散メモリ型並列計算機における行列処理装置
CN111885158B (zh) 一种集群任务处理方法、装置、电子设备及存储介质
JP2016224801A (ja) 並列計算機システム、並列計算方法及びプログラム
JP6256167B2 (ja) データセンターネットワークにおけるリスク軽減
CN109800078A (zh) 一种任务处理方法、任务分发终端及任务执行终端
CN111985181A (zh) 一种节点布局方法、装置、计算机设备及存储介质
CN113381940B (zh) 一种二维胖树网络拓扑的设计方法及装置
CN109150628B (zh) 一种系统网络拓扑自动生成方法以及装置
JPWO2021075055A5 (ja)
JP6337606B2 (ja) 情報処理装置、経路決定方法及びプログラム
JP6063882B2 (ja) 仮想マシン配置システム及び方法
CN110912837B (zh) 基于vsm系统的主备切换方法和装置
CN114416329A (zh) 计算任务部署方法、装置、电子设备及存储介质
CN113938428A (zh) 跨芯片的数据流转发方法及装置
CN113485798A (zh) 核函数生成方法、装置、设备以及存储介质
CN113626164A (zh) 一种监控平台作业调度方法、装置、终端及存储介质
JP5907607B2 (ja) 処理配置方法及びプログラム
JP6390322B2 (ja) 情報処理装置、情報処理方法及びプログラム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20181011

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20190830

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20191007

R150 Certificate of patent or registration of utility model

Ref document number: 6607078

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150