JP7020555B2 - 情報処理装置、情報処理方法、及びプログラム - Google Patents

情報処理装置、情報処理方法、及びプログラム Download PDF

Info

Publication number
JP7020555B2
JP7020555B2 JP2020535386A JP2020535386A JP7020555B2 JP 7020555 B2 JP7020555 B2 JP 7020555B2 JP 2020535386 A JP2020535386 A JP 2020535386A JP 2020535386 A JP2020535386 A JP 2020535386A JP 7020555 B2 JP7020555 B2 JP 7020555B2
Authority
JP
Japan
Prior art keywords
matrix
processing
cost
data
information processing
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
JP2020535386A
Other languages
English (en)
Other versions
JPWO2020031281A1 (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.)
NEC Corp
Original Assignee
NEC Corp
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 NEC Corp filed Critical NEC Corp
Publication of JPWO2020031281A1 publication Critical patent/JPWO2020031281A1/ja
Application granted granted Critical
Publication of JP7020555B2 publication Critical patent/JP7020555B2/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
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks

Description

本発明は、畳み込み処理を実行する情報処理装置、情報処理方法に関し、更には、これらを実現するためのプログラムに関する。
近年、物体認識、音声認識、自然言語処理などの分野において、深層学習が多く利用されている。また、画像を入力とする深層学習においては、多くの畳み込み層を用いることが知られている。そのため、畳み込み層において、入力画像に対して実行させる畳み込み処理は、一般的に処理コストが大きくなるため、高速化が望まれている。
畳み込み処理を高速化する技術として、入力画像(入力データ:行列)を、カーネル(フィルタ:行列)を用いて、列行列を再配置する列行列変換処理(im2col処理)を実行した後、行列積(gemm:general matrix multiplication)処理を行う方法が知られている。このうち、行列積処理は、汎用の中央演算装置(CPU:Central Processing Unit)、又はGPU(Graphic Processing Unit)などのベンダが提供するBLAS(Basic Linear Algebra Subprograms)ライブラリなどを用いることで、畳み込み処理の高速化を行っている。
BLASライブラリを用いることにより行列積処理を高速化できる理由は、CPUのベクトル演算器の有効活用、メモリアクセスの最小化など、ハードウェアを高効率に活用できるように最適化しているためである。
関連する技術として、非特許文献1には、行列積処理を高速化する技術が開示されている。具体的には、非特許文献1では、元の行列を複数の所定の形状の行列に分解し、分解した行列それぞれの形状に応じて、行列積処理を行うことが開示されている。
Kazushige Goto,Robert A. van de Geijn,"Anatomy of High-Performance Matrix Multiplication" ACM Transactions on Mathematical Software (TOMS) Volume 34,2008年5月3日,Article No. 12 P.12:1-12:25,インターネット<URL:https://dl.acm.org/citation.cfm?id=1356053>
しかしながら、畳み込み処理を、量子化後に実行する場合、又は、BLASライブラリの無い環境で実行する場合、ベンダが提供するライブラリを利用できない場合がある。このような場合、ユーザは自前で開発した、ベクトル演算器を効率的に活用できるような、ユーザ関数を用意しなければならない。具体的には、並列性の異なる二つの行列の組み合わせごとに、複数のユーザ関数(行列積処理)を用意しなければならない。
並列性の異なる行列とは、例えば、対象となる二つの行列において、行列それぞれの行数は同じであるが、列数がそれぞれ異なる行列、又は、一方の行列の行数と他方の行列の列数は同じであるが、一方の行列の列数と他方の行列の行数は異なる行列などである。
更に、複数のユーザ関数(行列積処理)を効率的に利用するためには、前処理である列行列変換処理の出力データが、後処理である行列積処理で利用できるデータ構造に合致するようにしなければならない。具体的には、列行列変換処理の後に行列積処理を実行する畳み込み処理において、ベクトル演算器を有効活用するためには(行列積処理時に実行されるメモリ命令を効果的に用いるためには)、転置処理などを用いて、列行列変換処理の出力データを並び替えなければならない。そのため、列行列変換処理の出力データの並びごとに、異なるユーザ関数を用意しなければならない。
また、非特許文献1に開示の技術では、分解した行列それぞれの形状に対応するパラメータに応じて、行列積処理を切り替えている。しかし、非特許文献1に開示の技術を、畳み込み処理に適用したとしても、上述したように列行列変換処理の出力データを並び替え、分解した行列それぞれに合致する処理が必要となるため、畳み込み処理の処理速度を向上させることができない。
本発明の目的の一例は、畳み込み処理の処理速度を向上させる情報処理装置、情報処理方法、及びプログラムを提供することにある。
上記目的を達成するため、本発明の一側面における情報処理装置は、
入力データのデータサイズを表す入力データ情報と、カーネルのデータサイズを表すカーネル情報と、畳み込み処理で用いるパラメータを表すパラメータ情報とを用いて、前記畳み込み処理において実行される行列処理ごとに、メモリアクセスに基づいて、前記行列処理のコストを算出する、コスト算出部と、
前記行列処理を組み合わせ、組み合わせに含まれる前記行列処理に対応する前記コストを合計し、組み合わせごとに合計したコストのうち、最小となる前記合計したコストに対応する前記行列処理の組み合わせを選択する、行列処理選択部と、
を有することを特徴とする。
また、上記目的を達成するため、本発明の一側面における情報処理方法は、
(a)入力データのデータサイズを表す入力データ情報と、カーネルのデータサイズを表すカーネル情報と、畳み込み処理で用いるパラメータを表すパラメータ情報とを用いて、前記畳み込み処理において実行される行列処理ごとに、メモリアクセスに基づいて、前記行列処理のコストを算出する、ステップと、
(b)前記行列処理を組み合わせ、組み合わせに含まれる前記行列処理に対応する前記コストを合計し、組み合わせごとに合計したコストのうち、最小となる前記合計したコストに対応する前記行列処理の組み合わせを選択する、ステップと、
を有することを特徴とする。
更に、上記目的を達成するため、本発明の一側面におけるプログラムは
コンピュータに、
(a)入力データのデータサイズを表す入力データ情報と、カーネルのデータサイズを表すカーネル情報と、畳み込み処理で用いるパラメータを表すパラメータ情報とを用いて、前記畳み込み処理において実行される行列処理ごとに、メモリアクセスに基づいて、前記行列処理のコストを算出する、ステップと、
(b)前記行列処理を組み合わせ、組み合わせに含まれる前記行列処理に対応する前記コストを合計し、組み合わせごとに合計したコストのうち、最小となる前記合計したコストに対応する前記行列処理の組み合わせを選択する、ステップと、
を実行させることを特徴とする。
以上のように本発明によれば、畳み込み処理の処理速度を向上させることができる。
図1は、情報処理装置の一例を示す図である。 図2は、情報処理装置の構成を具体的に示す図である。 図3は、列行列変換処理のコスト算出を説明するための図である。 図4は、列行列変換処理のコスト算出の一例を示す図である。 図5は、行列積処理のプログラムの一例を示す図である。 図6は、ベクトル演算器を利用した行列積処理を説明するための図である。 図7は、ベクトル演算器を利用した行列積処理を説明するための図である。 図8は、列行列変換処理のコスト算出の一例を示す図である。 図9は、行列処理選択情報のデータ構造の一例を示す図である。 図10は、情報処理装置1の動作の一例を示す図である。 図11は、コスト算出部、行列処理選択部の動作の一例を示す図である。 図12は、情報処理装置を実現するコンピュータの一例を示す図である。
(実施の形態)
以下、本発明の実施の形態について、図1から図12を参照しながら説明する。
[装置構成]
最初に、図1を用いて、本実施の形態における情報処理装置の構成について説明する。図1は、情報処理装置の一例を示す図である。
図1に示す本実施形態における情報処理装置1は、畳み込み処理の処理速度を向上させるための装置である。図1に示すように、情報処理装置1は、コスト算出部2と、行列処理選択部3とを有する。
このうち、コスト算出部2は、入力データのデータサイズを表す入力データ情報と、カーネルのデータサイズを表すカーネル情報と、畳み込み処理で用いるパラメータを表すパラメータ情報とを用いて、畳み込み処理において実行される行列処理ごとに、メモリアクセスに基づいて、行列処理のコストを算出する。
入力データ情報は、畳み込み処理において入力される、入力データ(入力画像:行列)などの情報である。また、対象情報は、少なくとも次のようなパラメータ(num、channels、height、width)を有する。これらのパラメータは、「num」が入力データの数を表し、「channels」がチャンネル数を表し、「height」が行数を表し、「width」が列数を表している。
カーネル情報とパラメータ情報とは、畳み込み処理で用いる処理内容を示す情報である。処理内容を示す情報は、例えば、次のようなパラメータ(num_output、kernel_h、kernel_w、stride_h、stride_w、pad_h、pad_w)を有する。なお、更に次のようなパラメータ(dilation_h、dilation_w、groups)を有してもよい。
それらのパラメータは、「num_output」が出力チャネル数を表し、「kernel_h」がカーネルの行数を表し、「kernel_w」がカーネルの列数を表している。また、パラメータ「stride_h」及び「stride_w」はストライドの移動量を表し、「pad_h」及び「pad_w」がパディングする範囲のサイズを表す。また、「dilation_h」及び「dilation_w」は拡張畳み込みにおける拡張レートを表し、「groups」はグループ化畳み込み処理におけるグループ数を表す。
行列処理は、例えば、列行列変換処理(im2col処理)、行列積処理(gemm処理)、列行列変換処理と行列積処理との間のデータ変換処理(転置処理)などの処理である。
行列処理ごとのコストは、例えば、列行列変換処理、行列積処理、データ変換処理それぞれについて、後述するメモリアクセス(例えば、CPUのレジスタ、キャシュ、メモリ領域(データ領域など)などへのアクセス)に基づくコスト算出方法を用いて算出する。
行列処理選択部3は、行列処理それぞれを組み合わせ、組み合わせに含まれる行列処理に対応するコストを合計し、組み合わせごとに合計したコストのうち、最小となる合計したコストに対応する行列処理の組み合わせを選択する。
例えば、行列処理それぞれの組み合わせが、列行列変換処理A、行列積処理B、データ変換処理Cの組み合わせ、及び、列行列変換処理D、行列積処理E、データ変換処理Fの組み合わせであったとする。その場合、行列処理A、B、Cそれぞれのコストの合計と、行列処理D、E、Fそれぞれのコストの合計とを比較し、最小となる行列処理の組み合わせを選択する。
このように、本実施の形態では、メモリアクセスに基づいたコストの合計が最小となる行列処理の組み合わせを選択し、選択した行列処理の組み合わせを用いて、畳み込み処理を行うので、畳み込み処理の処理速度を向上させることができる。
続いて、図2を用いて、本実施の形態における情報処理装置1の構成をより具体的に説明する。図2は、情報処理装置の構成を具体的に示す図である。
図2に示すように、本実施の形態における情報処理装置1は、コスト算出部2と行列処理選択部3とに加えて、畳み込み処理部20を有する。畳み込み処理部20は、コスト算出部2と行列処理選択部3とを用いて選択した、行列処理の組み合わせを用いて、畳み込み処理を実行する。すなわち、畳み込み処理部20は、コストが最小となる行列処理の組み合わせを用いて、畳み込み処理を実行する。
コスト算出部2は、畳み込み処理部20が畳み込み処理を実行する場合、上述したパラメータを取得し、取得したパラメータを用いて、メモリアクセスに基づくコストを算出する。また、コスト算出部2は、列行列変換処理コスト算出部21と、行列積処理コスト算出部22と、データ変換処理コスト算出部23とを有する。
列行列変換処理コスト算出部21は、取得したパラメータを用いて、メモリアクセスに基づいて、一つ以上の種類の列行列変換処理のコストを算出する。具体的には、まず、列行列変換処理コスト算出部21は、メモリ上で一以上の連続な要素のコピーと、メモリ上で一以上の連続な定数値のコピーとに分けて、要素数と要素数に対するコピー回数を算出する。
すなわち、列行列変換処理コスト算出部21は、メモリ上で一以上の連続な要素のコピーに対して、メモリ上で一以上連続な要素数と、当該要素数に対するコピー回数とを算出する。また、列行列変換処理コスト算出部21は、定数値を出力データにコピーする場合の値のコピーを、メモリ上で一以上連続な要素数と、当該要素数に対するコピー回数を算出する。
続いて、列行列変換処理コスト算出部21は、算出した要素数に対するコピー回数と、連続な要素数に応じて設定したコピーに対するコスト設定値とを乗算した値をコストとする。また、列行列変換処理コスト算出部21は、算出した要素数における定数値のコピー回数と、連続な要素数に応じて設定した定数値コピーに対するコスト設定値とを乗算した値をコストとする。その後、列行列変換処理コスト算出部21は、上述したコストの合計を算出し、当該列行列変換処理のコスト総和とする。
図3は、図4を用いて、列行列変換処理のコスト算出について、更に詳細に説明をする。図3は、列行列変換処理のコスト算出を説明するための図である。図4は、列行列変換処理のコスト算出の一例を示す図である。
図3は、要素(a、b、c、d、e、f、g、h、i)から構成される3×3の入力データに対する列行列変換処理をし、出力データを算出した例である。また、図3において、入力データの要素a、b(破線内)から出力データの要素a、b(破線内)までの矢印は、メモリ上連続な二つの要素のコピーを示している。また、入力データの要素g、h、i(破線内)から出力データの要素g、h、i(破線内)までの矢印は、メモリ上連続な三つの要素のコピーを示している。更に、図3において、出力データにおける破線内の定数値「0」は、定数値「0」を三つの要素にコピーしたことを示している。
図3を用いて、3×3の入力データから9×9の出力データを生成する場合のメモリ上で一以上の連続な要素のコピー(メモリコピー)と、ある定数値のメモリ上で一以上の領域へのコピー(定数値コピー)の分類方法を説明する。図3の例では、対象となる入力データ情報は、num=1、channels=1、height=3、width=3とする。
また、畳み込み処理で用いる処理内容を示す情報(カーネル情報、パラメータ情報)は、num_output=1、kernel_h=3、kernel_w=3、stride_h=1、stride_w=1、pad_h=1、pad_w=1、dilation_h=1、dilation_w=1、groups=1とする。
出力データの1行目においては、定数値0を[0][0:2]にコピー(3要素の定数値コピー)、定数値0を[0][3]にコピー(1要素の定数値コピー)、入力データ[0][0:1]を出力データ[0][4:5]にコピー(2要素のメモリコピー)、定数値0を[0][6]にコピー(1要素の定数値コピー)、入力データ[1][0:1]を出力データ[0][7:8]にコピー(2要素のメモリコピー)に分類される。
出力データの2行目においては、定数値0を[1][0:2]にコピー(3要素の定数値コピー)、入力データ[0][0:2]を出力データ[1][3:5]にコピー(3要素のメモリコピー)、入力データ[1][0:2]を出力データ[1][6:8]にコピー(3要素のメモリコピー)に分類される。
出力データの3行目においては、定数値0を[2][0:2]にコピー(3要素の定数値コピー)、入力データ[0][1:2]を出力データ[2][3:4]にコピー(2要素のメモリコピー)、定数値0を[2][5]にコピー(1要素の定数値コピー)、入力データ[1][1:2]を出力データ[2][6:7]にコピー(2要素のメモリコピー)、定数値0を[2][8]にコピー(1要素の定数値コピー)に分類される。
出力データの4行目においては、定数値0を[3][0]にコピー(1要素の定数値コピー)、入力データ[0][0:1]を出力データ[3][1:2]にコピー(2要素のメモリコピー)、定数値0を[3][3]にコピー(1要素の定数値コピー)、入力データ[1][0:1]を出力データ[3][4:5]にコピー(2要素のメモリコピー)、定数値0を[3][6]にコピー(1要素の定数値コピー)、入力データ[2][0:1]を出力データ[3][7:8]にコピー(2要素のメモリコピー)に分類される。
出力データの5行目においては、入力データ[0][0:2]を出力データ[4][0:2]にコピー(3要素のメモリコピー)、入力データ[1][0:2]を出力データ[4][3:5]にコピー(3要素のメモリコピー)、入力データ[2][0:2]を出力データ[4][6:8]にコピー(3要素のメモリコピー)に分類される。
出力データの6行目においては、入力データ[0][1:2]を出力データ[5][0:1]にコピー(2要素のメモリコピー)、定数値0を[5][2]にコピー(1要素の定数値コピー)、入力データ[1][1:2]を出力データ[5][3:4]にコピー(2要素のメモリコピー)、定数値0を[5][5]にコピー(1要素の定数値コピー)、入力データ[2][1:2]を出力データ[5][6:7]にコピー(2要素のメモリコピー)、定数値0を[5][8]にコピー(1要素の定数値コピー)に分類される。
出力データの7行目においては、定数値0を[6][0]にコピー(1要素の定数値コピー)、入力データ[1][0:1]を出力データ[6][1:2]にコピー(2要素のメモリコピー)、定数値0を[6][3]にコピー(1要素の定数値コピー)、入力データ[2][0:1]を出力データ[6][4:5]にコピー(2要素のメモリコピー)、定数値0を[6][6:8]にコピー(3要素の定数値コピー)に分類される。
出力データの8行目においては、入力データ[1][0:2]を出力データ[7][0:2]にコピー(3要素のメモリコピー)、入力データ[2][0:2]を出力データ[7][3:5]にコピー(3要素のメモリコピー)、定数値0を[7][6:8]にコピー(3要素の定数値コピー)に分類される.
出力データの9行目においては、入力データ[1][1:2]を出力データ[8][0:1]にコピー(3要素のメモリコピー)、定数値0を[8][2]にコピー(1要素の定数値コピー)、入力データ[2][1:2]を出力データ[8][3:4]にコピー(3要素のメモリコピー)、定数値0を[8][5]にコピー(1要素の定数値コピー)、定数値0を[8][6:8]にコピー(3要素の定数値コピー)に分類される。
図4を用いて、図3の例に対するコスト算出の説明をする。図3の例に対して、要素数2のメモリコピー回数は14回、要素数3のメモリコピー回数は7回、要素数1の定数値コピー回数は14回、要素数3の定数値コピー回数は6回となる。
要素数2のメモリコピーの一回当たりのコスト設定値を12とすると、コストは168となる。要素数3のメモリコピーの一回当たりのコスト設定値を12とすると、コストは84となる。要素数1の定数値コピーの一回当たりのコスト設定値を10とすると、コストは140となる。要素数3の定数値コピーの一回当たりのコスト設定値を11とすると、コストは66となる。従って、このときのコスト総和は458となる。なお、コスト設定値は、コストを算出する際に用いる値で、予め実験、シミュレーションなどにより算出した値である。
行列積処理コスト算出部22は、取得したパラメータを用いて行列サイズを算出し、メモリアクセスに基づいて、一つ以上の種類の行列積処理のコストを算出する。具体的には、まず、行列積処理コスト算出部22は、利用する並列性に応じた乗算回数と、利用する並列性に応じた加算回数とを算出する。
続いて、行列積処理コスト算出部22は、算出した乗算回数と加算回数とに、メモリに対する命令ごとのコスト設定値を乗算してコストを算出する。その後、行列積処理コスト算出部22は、上述したコストの合計を算出し、当該行列積処理のコストのコスト総和とする。
図5、図6、図7、図8を用いて、行列積処理のコスト算出について、更に詳細に説明をする。図5は、行列積処理のプログラムの一例を示す図である。図5のプログラムは、6bit整数の行列A[M][K]と、6bit整数の行列B[K][N]とを用いて、32bit整数の行列C[M][N]を算出する行列積のプログラムを示す。また、図5のプログラムは、行列B[K][N]を転置して行列BT[N][K]とし、ベクトル演算器を利用しない一般的なプログラムを示す。なお、図5のプログラムでは、Mが32、Nが100、Kが288とする。
図6は、ベクトル演算器を利用した行列積処理を説明するための図である。図6は、図5に示したプログラムのK方向のループに対して、ベクトル演算器を利用した場合の動作イメージを示す。また、図6の例では、ベクトル演算器のベクトル長は256bitとする。
まず、行列AのK方向データをベクトルレジスタに読み込む。256bitのベクトルレジスタに読み込まれるため、8bitデータが、32個一括でベクトルレジスタ0(VR0)に読み込まれる。また、行列BTのK方向データをベクトルレジスタに読み込む。256bitのベクトルレジスタに読み込まれるため、8bitデータが、32個一括でベクトルレジスタ1(VR1)に読み込まれる。
データ並びを[32][8]とするベクトルレジスタ0(VR0[32][8]と表現する)と、データ並びを[32][8]とするベクトルレジスタ1(VR1[32][8]と表現する)に対して、[0][8]同士、[1][8]同士となるような同一位置の8bitデータの乗算と、[0][8]同士と[1][8]同士の乗算結果の加算をし、その結果を16bitデータが16個のベクトルレジスタ2(VR2[16][16])の[0][16]に書き込む。
次に、上述した乗算と加算により算出したベクトルレジスタ2(VR2)の結果と、総和を算出するために用いるベクトルレジスタ3(VR3[16][16])の結果とを繰り返し加算する。このようにすることで、32で除算したときの余り以外のK方向の乗算の総和は、分割された16個の総和としてベクトルレジスタ3(VR3)に書き込まれる。
ところで、行列Aと行列Bとのbit数に応じて16bitのベクトルレジスタ3(VR3)でのオーバーフローを回避するためには、16bitで保持していた結果を32bitで保持する必要がある。そこで、行列Aと行列Bとのデータのbit数の和に応じて、16bit加算がある回数ごとに32bitへの変換を行う。
図7は、ベクトル演算器を利用した行列積処理を説明するための図である。図7は、16bitでのオーバーフローを回避するための32bit化の動作イメージを示す。
図7の例では、行列Aと行列Bとがともに6bit整数の行列ため、乗算によっては最大12bitで隣の要素との加算で13bitとなる。そのため、16bitでの一時的な総和は、最大で32回の加算まで可能となる。そこで、32回に一度32bit化を行い、32bitのレジスタに書き込む。
例えば、ベクトルレジスタ3(VR3[16][16])のVR3[0][16]と、VR3[1][16]とを加算して、32bitデータが8個のVR4[8][32]のVR4[0][32]に書き込むために、16bitで値「1」が16個のベクトルレジスタ6(VR6)とVR3[16][16]を乗算する。
また、上述した乗算の結果と、総和を算出するために用いるベクトルレジスタ(VR5[32][8])の結果とをベクトル加算することで、K方向の乗算の総和は、分割された8個の総和結果となる。
最後に、分割された8個の総和結果をそれぞれ加算して32で除算したときの余り以外の総和を算出する。32で除算したときの余り部分は、ベクトル演算を用いずに一要素ずつの乗算結果を余り以外の総和に加算することでK方向の乗算の総和を算出する。
図8は、列行列変換処理のコスト算出の一例を示す図である。図8は、Mが32、Nが100、Kが288の場合のK方向ループに対してベクトル演算器を利用した場合のコストを示す。
図8において、8bit乗算+加算命令は、K方向に対して、K/32回とM×N回行われるため、当該命令回数はM×N×(K/32)回と表される。従って、当該命令では命令回数は、28800(=32×100×(288/32))となる。また、一回当たりのコスト設定値を0.5とすると、コストは14400となる。コスト設定値は、コストを算出する際に用いる値で、予め実験、シミュレーションなどにより算出した値である。
また、図8において、16bit加算命令は、K方向に対して、K/32回とM×N回行われるため、当該命令回数はM×N×(K/32)回と表される。従って、当該命令では命令回数は、28800(=32×100×(288/32))となる。また、一回当たりのコスト設定値を0.33とすると、コストは9504となる。
また、32bitベクトル変換命令は、16bit乗算+加算命令の回数は、K方向に対して、K/32/32回とM×N回(又は、最低1回)行われるため、M×N×(K/32/32)回と表される。従って、当該変換では命令回数は、900(=32×100×(288/32/32))となる。また、一回当たりのコスト設定値を0.5とすると、コストは450となる。
また、32bitベクトル加算命令において、16bit乗算+加算命令の回数は、K方向に対して、K/32/32回とM×N回(又は、最低1回)行われるため、M×N×(K/32/32)回と表される。従って、当該変換では命令回数は、900(=32×100×(288/32/32))となる。また、一回当たりのコスト設定値を0.33とすると、コストは297となる。
データ変換処理コスト算出部23は、列行列変換処理が出力した出力データ(行列)のデータ構造と、行列積処理に入力可能なデータのデータ構造とを用いて、テータ変換処理が必要であるか否かを判定する。テータ変換処理が必要である場合、メモリアクセスに基づいて、テータ変換処理コストを算出する。テータ変換処理が必要でない場合、テータ変換処理コストを算出しない。
具体的には、データ変換処理コスト算出部23は、列行列変換処理と行列積処理との全ての組み合わせにおいて、データ変換処理が必要である場合、列行列変換処理が出力した出力データのデータ構造を行列積処理に適用できるデータ構造に変換する。
データ変換処理コスト算出部23が扱うデータ変換処理として転置処理があげられる。A×Bの行列の転置処理は1要素のメモリコピーがA×B回行われると定義できる。1要素のメモリコピーのコスト設定値を12とした場合、データ変換のコストはA×B×12として算出できる。図3で示したim2colの出力データを転置する場合、データ変換処理コスト算出部23は、9×9×12=972のコストを算出する。
行列処理選択部3は、行列処理ごとのコスト(列行列変換処理(im2col処理)ごとのコストと、行列積処理(gemm処理)ごとのコストと、データ変換コスト(例えば、転置処理など))とを取得し、行列処理の組み合わせのうち最小となる、組み合わせを選択する。そして、行列処理選択部3は、コストが最小の組み合わせに含まれる行列処理を用いて、畳み込み処理をするように、畳み込み処理部20へ指示をする。
図9を用いて具体的に説明をする。図9は、行列処理選択情報のデータ構造の一例を示す図である。図9の行列処理選択情報には、ユーザ関数として列行列変換処理が二種類(NN、NT)、行列積処理が三種類(K並列_NTN、N並列_NNN、M並列_TNN)に対して、6種類の組み合わせが示されている。また、行列処理選択情報には、6種類の組み合わせに対して、列行列変換処理コスト、行列積処理コスト、データ変換処理コストの総和が示されている。
列行列変換処理の種類NNは、入力データ情報(channels×(Height×Width))を、channels×kernel_h×kernel_w×(outHeight×outWidth)へと再構成する、im2col処理である。
列行列変換処理の種類NTは、入力データ情報(channels×(Heightx Width))を、(outHeight×outWidth)×kernel_h×kernel_w×channelsへと再構成する、im2col処理である。
行列積処理の種類K並列_NTNは、K方向の並列性を利用する行列積を示し、種類K並列_NNNは、N方向の並列性を利用する行列積を示し、種類M並列_TNNは、M方向の並列性を利用する行列積を示している。
列行列変換処理コストは、列行列変換処理の種類NN、NTそれぞれのコストを示している。行列積処理コストは、行列積処理の種類K並列_NTN、K並列_NNN、M並列_TNNそれぞれのコストを示している。データ変換処理コストは、六種類の組み合わせにおける、列行列変換処理の出力データを変換するのに必要なコストを示している。
例えば、行列処理選択部3は、図9の場合であれば、コスト総和が最小の1100に対応する組み合わせを選択する。すなわち、列行列変換処理の種類NTと行列積処理の種類K並列_NTNとを選択する。
[装置構成]
次に、本発明の実施の形態における情報処理装置1の動作について図10を用いて説明する。図10は、情報処理装置の動作の一例を示す図である。以下の説明においては、適宜図2から図9を参酌する。また、本実施の形態では、情報処理装置1を動作させることにより、情報処理方法が実施される。よって、本実施の形態における情報処理方法の説明は、以下の情報処理装置1の動作説明に代える。
情報処理装置1はパラメータを取得する(ステップA1)。続いて、情報処理装置1は、取得したパラメータを用いて、メモリアクセスに基づき、行列処理(列行列変換処理(im2col処理)、行列積処理(gemm処理)、データ変換コスト(例えば、転置処理など))ごとのコストを算出する(ステップA2)。続いて、情報処理装置1は、行列処理ごとのコスト(列行列変換処理(im2col処理)ごとのコストと、行列積処理(gemm処理)ごとのコストと、データ変換コスト(例えば、転置処理など))とを取得し、行列処理の組み合わせのうち最小となる、組み合わせを選択する(ステップA3)。続いて、情報処理装置1は、コストが最小の組み合わせに含まれる行列処理を用いて、畳み込み処理部20に畳み込み処理をさせるための指示を出力する(ステップA4)。そして、情報処理装置1は、コストが最小となる組み合わせが有する行列処理を用いて、畳み込み処理を実行する(ステップA5)。
続いて、図11を用いて、図10に示したステップA2、A3について詳細に説明する。図11は、コスト算出部、行列処理選択部の動作の一例を示す図である。
ステップA111において、列行列変換処理コスト算出部21は、取得したパラメータを用いて、メモリアクセスに基づいて、一つ以上の種類の列行列変換処理に対してコストを算出する。
具体的には、まず、列行列変換処理コスト算出部21は、メモリ上で一以上の連続な要素のコピーと、メモリ上で一以上の連続な定数値のコピーとに分けて、要素数と要素数に対するコピー回数を算出する。
すなわち、列行列変換処理コスト算出部21は、メモリ上で一以上連続な要素数と、当該要素数に対するコピー回数とを算出する。また、列行列変換処理コスト算出部21は、定数値を出力データにコピーする場合の値のコピーを、メモリ上で一以上連続な要素数と、当該要素数に対するコピー回数を算出する。
続いて、列行列変換処理コスト算出部21は、算出した要素数のコピー回数と、連続な要素数に応じて設定したコピーに対するコスト設定値とを乗算してコストを算出する。また、列行列変換処理コスト算出部21は、算出した要素数における定数値のコピー回数と、連続な要素数に応じて設定した定数値コピーのコスト設定値とを乗算してコストを算出する。
その後、列行列変換処理コスト算出部21は、上述したコストの合計(当該列行列変換処理のコスト総和)を算出する。
ステップA112において、行列積処理コスト算出部22は、取得したパラメータを用いて行列サイズを算出し、メモリアクセスに基づいて、一つ以上の種類の行列積処理のコストを算出する。
具体的には、まず、行列積処理コスト算出部22は、利用する並列性に応じた乗算回数と、利用する並列性に応じた加算回数とを算出する。
続いて、行列積処理コスト算出部22は、算出した乗算回数と加算回数とに、メモリに対する命令ごとのコスト設定値を乗算してコストを算出する。その後、行列積処理コスト算出部22は、上述したコストの合計(当該行列積処理のコスト総和)を算出する。
ステップA113において、データ変換処理コスト算出部23は、列行列変換処理が出力した出力データ(行列)のデータ構造と、行列積処理に入力可能なデータのデータ構造とを用いて、テータ変換処理が必要であるか否かを判定する。続いて、テータ変換処理が必要である場合、メモリアクセスに基づいて、テータ変換処理コストを算出する。テータ変換処理が必要でない場合、テータ変換処理コストを算出しない。
具体的には、データ変換処理コスト算出部23は、列行列変換処理と行列積処理との全ての組み合わせにおいて、テータ変換処理が必要である場合、列行列変換処理が出力した出力データのデータ構造を行列積処理に適用できるデータ構造に変換する。
ステップA114において、行列処理選択部3は、行列処理ごとのコスト(列行列変換処理(im2col処理)ごとのコストと、行列積処理(gemm処理)ごとのコストと、データ変換コスト(例えば、転置処理など))とを取得し、行列処理の組み合わせのうち最小となる、組み合わせを選択する。
[本実施の形態の効果]
以上のように本実施の形態によれば、メモリアクセスに基づいたコストの合計が最小となる行列処理の組み合わせを選択し、選択した行列処理の組み合わせを用いて、畳み込み処理を行うので、畳み込み処理の処理速度を向上させることができる。
[プログラム]
本発明の実施の形態におけるプログラムは、コンピュータに、図10に示すステップA1からA5、図11に示すステップA111からA114を実行させるプログラムであればよい。このプログラムをコンピュータにインストールし、実行することによって、本実施の形態における情報処理装置と情報処理方法とを実現することができる。この場合、コンピュータのプロセッサは、コスト算出部2(列行列変換処理コスト算出部21、行列積処理コスト算出部22、データ変換処理コスト算出部23)、行列処理選択部3、畳み込み処理部20として機能し、処理を行なう。
また、本実施の形態におけるプログラムは、複数のコンピュータによって構築されたコンピュータシステムによって実行されてもよい。この場合は、例えば、各コンピュータが、それぞれ、コスト算出部2(列行列変換処理コスト算出部21、行列積処理コスト算出部22、データ変換処理コスト算出部23)、行列処理選択部3、畳み込み処理部20のいずれかとして機能してもよい。
[物理構成]
ここで、実施の形態におけるプログラムを実行することによって、情報処理装置を実現するコンピュータについて図12を用いて説明する。図12は、情報処理装置を実現するコンピュータの一例を示す図である。
図12に示すように、コンピュータ110は、CPU111と、メインメモリ112と、記憶装置113と、入力インターフェイス114と、表示コントローラ115と、データリーダ/ライタ116と、通信インターフェイス117とを備える。これらの各部は、バス121を介して、互いにデータ通信可能に接続される。なお、コンピュータ110は、CPU111に加えて、又はCPU111に代えて、GPU(Graphics Processing Unit)、又はFPGA(Field-Programmable Gate Array)を備えていてもよい。
CPU111は、記憶装置113に格納された、本実施の形態におけるプログラム(コード)をメインメモリ112に展開し、これらを所定順序で実行することにより、各種の演算を実施する。メインメモリ112は、典型的には、DRAM(Dynamic Random Access Memory)等の揮発性の記憶装置である。また、本実施の形態におけるプログラムは、コンピュータ読み取り可能な記録媒体120に格納された状態で提供される。なお、本実施の形態におけるプログラムは、通信インターフェイス117を介して接続されたインターネット上で流通するものであってもよい。
また、記憶装置113の具体例としては、ハードディスクドライブの他、フラッシュメモリ等の半導体記憶装置があげられる。入力インターフェイス114は、CPU111と、キーボード及びマウスといった入力機器118との間のデータ伝送を仲介する。表示コントローラ115は、ディスプレイ装置119と接続され、ディスプレイ装置119での表示を制御する。
データリーダ/ライタ116は、CPU111と記録媒体120との間のデータ伝送を仲介し、記録媒体120からのプログラムの読み出し、及びコンピュータ110における処理結果の記録媒体120への書き込みを実行する。通信インターフェイス117は、CPU111と、他のコンピュータとの間のデータ伝送を仲介する。
また、記録媒体120の具体例としては、CF(Compact Flash(登録商標))及びSD(Secure Digital)等の汎用的な半導体記憶デバイス、フレキシブルディスク(Flexible Disk)等の磁気記録媒体、又はCD-ROM(Compact Disk Read Only Memory)などの光学記録媒体があげられる。
[付記]
以上の実施の形態に関し、更に以下の付記を開示する。上述した実施の形態の一部又は全部は、以下に記載する(付記1)から(付記12)により表現することができるが、以下の記載に限定されるものではない。
(付記1)
入力データのデータサイズを表す入力データ情報と、カーネルのデータサイズを表すカーネル情報と、畳み込み処理で用いるパラメータを表すパラメータ情報とを用いて、前記畳み込み処理において実行される行列処理ごとに、メモリアクセスに基づいて、前記行列処理のコストを算出する、コスト算出部と、
前記行列処理を組み合わせ、組み合わせに含まれる前記行列処理に対応する前記コストを合計し、組み合わせごとに合計したコストのうち、最小となる前記合計したコストに対応する前記行列処理の組み合わせを選択する、行列処理選択部と、
を有することを特徴とする情報処理装置。
(付記2)
付記1に記載の情報処理装置であって、
前記コスト算出部は、列行列変換処理におけるメモリアクセスに基づいて、前記列行列変換処理のコストを算出する
ことを特徴とする情報処理装置。
(付記3)
付記2に記載の情報処理装置であって、
前記コスト算出部は、行列積処理におけるメモリアクセスに基づいて、前記行列積処理のコストを算出する
ことを特徴とする情報処理装置。
(付記4)
付記3に記載の情報処理装置であって、
前記コスト算出部は、前記列行列変換処理の出力データを変換するデータ変換処理におけるメモリアクセスに基づいて、前記データ変換処理のコストを算出する
ことを特徴とする情報処理装置。
(付記5)
(a)入力データのデータサイズを表す入力データ情報と、カーネルのデータサイズを表すカーネル情報と、畳み込み処理で用いるパラメータを表すパラメータ情報とを用いて、前記畳み込み処理において実行される行列処理ごとに、メモリアクセスに基づいて、前記行列処理のコストを算出する、ステップと、
(b)前記行列処理を組み合わせ、組み合わせに含まれる前記行列処理に対応する前記コストを合計し、組み合わせごとに合計したコストのうち、最小となる前記合計したコストに対応する前記行列処理の組み合わせを選択する、ステップと、
を有することを特徴とする情報処理方法。
(付記6)
付記5に記載の情報処理方法であって、
前記(a)のステップにおいて、列行列変換処理におけるメモリアクセスに基づいて、前記列行列変換処理のコストを算出する
ことを特徴とする情報処理方法。
(付記7)
付記6に記載の情報処理方法であって、
前記(a)のステップにおいて、行列積処理におけるメモリアクセスに基づいて、前記行列積処理のコストを算出する
ことを特徴とする情報処理方法。
(付記8)
付記7に記載の情報処理方法であって、
前記(a)のステップにおいて、前記列行列変換処理の出力データを変換するデータ変換処理におけるメモリアクセスに基づいて、前記データ変換処理のコストを算出する
ことを特徴とする情報処理方法。
(付記9)
コンピュータに、
(a)入力データのデータサイズを表す入力データ情報と、カーネルのデータサイズを表すカーネル情報と、畳み込み処理で用いるパラメータを表すパラメータ情報とを用いて、前記畳み込み処理において実行される行列処理ごとに、メモリアクセスに基づいて、前記行列処理のコストを算出する、ステップと、
(b)前記行列処理を組み合わせ、組み合わせに含まれる前記行列処理に対応する前記コストを合計し、組み合わせごとに合計したコストのうち、最小となる前記合計したコストに対応する前記行列処理の組み合わせを選択する、ステップと、
を実行させるプログラム。
(付記10)
付記9に記載のプログラムであって、
前記(a)のステップにおいて、列行列変換処理におけるメモリアクセスに基づいて、前記列行列変換処理のコストを算出する
プログラム。
(付記11)
付記10に記載のプログラムであって、
前記(a)のステップにおいて、行列積処理におけるメモリアクセスに基づいて、前記行列積処理のコストを算出する
プログラム。
(付記12)
付記11に記載のプログラムであって、
前記(a)のステップにおいて、前記列行列変換処理の出力データを変換するデータ変換処理におけるメモリアクセスに基づいて、前記データ変換処理のコストを算出する
プログラム。
以上、実施の形態を参照して本願発明を説明したが、本願発明は上記実施の形態に限定されるものではない。本願発明の構成や詳細には、本願発明のスコープ内で当業者が理解し得る様々な変更をすることができる。
以上のように本発明によれば、畳み込み処理の処理速度を向上させることができる。本発明は、畳み込み層を用いた深層学習を必要とする分野において有用である。例えば、物体認識、音声認識、自然言語処理、生体認証などの分野において有用である。
1 情報処理装置
2 コスト算出部
3 行列処理選択部
20 畳み込み処理部
21 列行列変換処理コスト算出部
22 行列積処理コスト算出部
23 データ変換処理コスト算出部
110 コンピュータ
111 CPU
112 メインメモリ
113 記憶装置
114 入力インターフェイス
115 表示コントローラ
116 データリーダ/ライタ
117 通信インターフェイス
118 入力機器
119 ディスプレイ装置
120 記録媒体
121 バス

Claims (10)

  1. 入力データのデータサイズを表す入力データ情報と、カーネルのデータサイズを表すカーネル情報と、畳み込み処理で用いるパラメータを表すパラメータ情報とを用いて、前記畳み込み処理において実行される行列処理ごとに、メモリアクセスに基づいて、前記行列処理のコストを算出する、コスト算出手段と、
    前記行列処理を組み合わせ、組み合わせに含まれる前記行列処理に対応する前記コストを合計し、組み合わせごとに合計したコストのうち、最小となる前記合計したコストに対応する前記行列処理の組み合わせを選択する、行列処理選択手段と、
    を有することを特徴とする情報処理装置。
  2. 請求項1に記載の情報処理装置であって、
    前記コスト算出手段は、列行列変換処理におけるメモリアクセスに基づいて、前記列行列変換処理のコストを算出する
    ことを特徴とする情報処理装置。
  3. 請求項2に記載の情報処理装置であって、
    前記コスト算出手段は、行列積処理におけるメモリアクセスに基づいて、前記行列積処理のコストを算出する
    ことを特徴とする情報処理装置。
  4. 請求項3に記載の情報処理装置であって、
    前記コスト算出手段は、前記列行列変換処理の出力データを変換するデータ変換処理におけるメモリアクセスに基づいて、前記データ変換処理のコストを算出する
    ことを特徴とする情報処理装置。
  5. コンピュータが、
    (a)入力データのデータサイズを表す入力データ情報と、カーネルのデータサイズを表すカーネル情報と、畳み込み処理で用いるパラメータを表すパラメータ情報とを用いて、前記畳み込み処理において実行される行列処理ごとに、メモリアクセスに基づいて、前記行列処理のコストを算出する、ステップと、
    (b)前記行列処理を組み合わせ、組み合わせに含まれる前記行列処理に対応する前記コストを合計し、組み合わせごとに合計したコストのうち、最小となる前記合計したコストに対応する前記行列処理の組み合わせを選択する、ステップと、
    実行することを特徴とする情報処理方法。
  6. 請求項5に記載の情報処理方法であって、
    前記(a)のステップにおいて、列行列変換処理におけるメモリアクセスに基づいて、前記列行列変換処理のコストを算出する
    とを特徴とする情報処理方法。
  7. 請求項6に記載の情報処理方法であって、
    前記(a)のステップにおいて、行列積処理におけるメモリアクセスに基づいて、前記行列積処理のコストを算出する
    とを特徴とする情報処理方法。
  8. 請求項7に記載の情報処理方法であって、
    前記(a)のステップにおいて、前記列行列変換処理の出力データを変換するデータ変換処理におけるメモリアクセスに基づいて、前記データ変換処理のコストを算出する
    とを特徴とする情報処理方法。
  9. コンピュータに、
    (a)入力データのデータサイズを表す入力データ情報と、カーネルのデータサイズを表すカーネル情報と、畳み込み処理で用いるパラメータを表すパラメータ情報とを用いて、前記畳み込み処理において実行される行列処理ごとに、メモリアクセスに基づいて、前記行列処理のコストを算出する、ステップと、
    (b)前記行列処理を組み合わせ、組み合わせに含まれる前記行列処理に対応する前記コストを合計し、組み合わせごとに合計したコストのうち、最小となる前記合計したコストに対応する前記行列処理の組み合わせを選択する、ステップと、
    を実行させるプログラム。
  10. 請求項9に記載のプログラムであって、
    前記(a)のステップにおいて、列行列変換処理におけるメモリアクセスに基づいて、前記列行列変換処理のコストを算出する
    プログラム。
JP2020535386A 2018-08-07 2018-08-07 情報処理装置、情報処理方法、及びプログラム Active JP7020555B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2018/029693 WO2020031281A1 (ja) 2018-08-07 2018-08-07 情報処理装置、情報処理方法、及びコンピュータ読み取り可能な記録媒体

Publications (2)

Publication Number Publication Date
JPWO2020031281A1 JPWO2020031281A1 (ja) 2021-08-02
JP7020555B2 true JP7020555B2 (ja) 2022-02-16

Family

ID=69415427

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2020535386A Active JP7020555B2 (ja) 2018-08-07 2018-08-07 情報処理装置、情報処理方法、及びプログラム

Country Status (3)

Country Link
US (4) US20210312013A1 (ja)
JP (1) JP7020555B2 (ja)
WO (1) WO2020031281A1 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111951269B (zh) * 2020-10-16 2021-01-05 深圳云天励飞技术股份有限公司 图像处理方法及相关设备

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2018067603A1 (en) 2016-10-04 2018-04-12 Magic Leap, Inc. Efficient data layouts for convolutional neural networks

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6635265B2 (ja) * 2016-07-29 2020-01-22 株式会社デンソーアイティーラボラトリ 予測装置、予測方法および予測プログラム
AU2017279610A1 (en) * 2017-12-19 2019-07-04 Canon Kabushiki Kaisha Memory access optimisation using per-layer computational mapping and memory allocation for CNN application
CN109993275B (zh) * 2017-12-29 2021-01-29 华为技术有限公司 一种信号处理方法及装置

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2018067603A1 (en) 2016-10-04 2018-04-12 Magic Leap, Inc. Efficient data layouts for convolutional neural networks

Also Published As

Publication number Publication date
US20210312013A1 (en) 2021-10-07
US20220179923A1 (en) 2022-06-09
US20220179924A1 (en) 2022-06-09
JPWO2020031281A1 (ja) 2021-08-02
US20220188382A1 (en) 2022-06-16
WO2020031281A1 (ja) 2020-02-13

Similar Documents

Publication Publication Date Title
CN111465924B (zh) 用于将矩阵输入转换为矩阵处理器的向量化输入的系统和方法
JP2020506454A (ja) ハードウェアにおける平均プーリングの実行
US10802956B2 (en) Accessing prologue and epilogue data
JP2023160833A (ja) Simd命令を用いた効率的な直接畳み込み
KR20200079059A (ko) 비트 연산 기반의 뉴럴 네트워크 처리 방법 및 장치
US20220137941A1 (en) Compilation method, apparatus, computing device and medium
JP7114659B2 (ja) ニューラルネットワーク方法及び装置
Kubota et al. Optimization of sparse matrix-vector multiplication by auto selecting storage schemes on GPU
JP7020555B2 (ja) 情報処理装置、情報処理方法、及びプログラム
Niederhagen et al. Implementing Joux-Vitse’s Crossbred Algorithm for Solving Systems over on GPUs
US20210319080A1 (en) Tensor data calculating apparatus, tensor data calculating method and program
Zhang et al. Pass-efficient randomized LU algorithms for computing low-rank matrix approximation
US11573765B2 (en) Fused convolution and batch normalization for neural networks
Hishinuma et al. AVX acceleration of DD arithmetic between a sparse matrix and vector
US20230161555A1 (en) System and method performing floating-point operations
KR20210089247A (ko) 그래픽 처리 장치에서 행렬 곱셈의 파이프라인 처리
CN113924610B (zh) 秘密共轭梯度法计算系统及方法、秘密计算装置、共轭梯度法计算装置及方法、以及记录介质
Coronado-Barrientos et al. Improving performance of iterative solvers with the AXC format using the Intel Xeon Phi
Ruffa et al. Parallelized solution of banded linear systems with an introduction to p-adic computation
Myllykoski et al. On solving separable block tridiagonal linear systems using a GPU implementation of radix-4 PSCR method
US20230281270A1 (en) Recording medium and information processing method
US20230118082A1 (en) Apparatus, method and system for matrix multiplication reusing multiply accumulate operation
US11853211B2 (en) Computer-readable recording medium storing data placement program, processor, and data placement method
US20230359697A1 (en) Tensor processing
Lamas Daviña et al. GPU implementation of Krylov solvers for block-tridiagonal eigenvalue problems

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20210129

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20210129

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20220117

R151 Written notification of patent or utility model registration

Ref document number: 7020555

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R151