JP7230744B2 - 畳込み演算方法及び演算処理装置 - Google Patents

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

Info

Publication number
JP7230744B2
JP7230744B2 JP2019155433A JP2019155433A JP7230744B2 JP 7230744 B2 JP7230744 B2 JP 7230744B2 JP 2019155433 A JP2019155433 A JP 2019155433A JP 2019155433 A JP2019155433 A JP 2019155433A JP 7230744 B2 JP7230744 B2 JP 7230744B2
Authority
JP
Japan
Prior art keywords
multiplier
multiplicand
convolution operation
partial products
value
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
JP2019155433A
Other languages
English (en)
Other versions
JP2021033813A (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.)
Denso Corp
Original Assignee
Denso 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 Denso Corp filed Critical Denso Corp
Priority to JP2019155433A priority Critical patent/JP7230744B2/ja
Publication of JP2021033813A publication Critical patent/JP2021033813A/ja
Application granted granted Critical
Publication of JP7230744B2 publication Critical patent/JP7230744B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Description

本発明は、畳込み演算方法及び演算処理装置に関する。
画像認識や音声認識などで活用されるCNN(Convolutional Neural Network)では、画像や音声信号の特徴量と重み係数との畳込み演算が繰り返し行われる。近年は、処理速度の向上やネットワークモデルのサイズ削減のため、特徴量や重み係数の低ビット化が進んでいる。ただし、低ビット化と認識性能にはトレードオフの関係があり、ネットワークやレイヤによって高精度演算と低精度演算とを使い分けて実行する混合精度の畳込み演算が必要となる。そこで、このような混合精度の畳込み演算の効率的な実行方法が求められている。
本発明に関連する技術として以下の先行技術がある。
特開平7-44533号公報 特開平7-121354号公報
図45は、特許文献1に記載の演算装置による演算を模式化して示す図である。この演算装置は、24ビットの高精度乗算器を用いて、高精度の演算を行う場合には、(a)に示すように、被乗数部と乗数部にそれぞれ24ビットのデータを配置して乗算を行い、低精度の演算を行う場合には、(b)に示すように、低精度の部分演算(Int8×3×3)に分割して必要な演算部分だけが演算結果に出力されるように乗算器の出力を切り替えることで並列乗算を行う。
図46は、特許文献2に記載の乗算器による演算を模式化して示す図である。この乗算器では、高精度(倍精度)乗算器を用いて、高精度(倍精度)の演算を行う場合には、(a)に示すように、被乗数部と乗数部にそれぞれ倍精度のデータを配置して乗算を行い、低精度(単精度)の演算を行う場合には、(b)及び(c)に示すように、被乗数部と乗数部の上位と下位にそれぞれ単精度のデータを配置し、不要な部分演算がゼロとなるように回路を切り替えることで単精度の並列乗算及び内積演算を行う。
しかしながら、特許文献1に記載の演算装置及び特許文献2に記載の乗算器は、低ビット化率(即ち、低精度時のビット長/高精度時のビット長)が1/Nのときに、演算効率は高々N倍程度にしかできない。
本発明は、上記の問題点を鑑みてなされたものであり、高精度、低精度を切り替えて畳込み演算でき、かつ、低精度の畳込み演算を効率的に行うことができることを目的とする
上記目的を達成するために、本発明に係る畳込み演算方法は、特徴量が1次元以上の格子状に配置された特徴マップに対して、重み係数が1次元以上の格子状に配置されたフィルタをスライドさせながら畳込み演算を行うための畳込み演算方法であって、乗算器の被乗数部及び乗数部の何れか一方に少なくとも1つの前記特徴量を配置し、前記乗算器の乗数部及び被乗数部の何れか他方に少なくとも1つの前記重み係数を配置して、前記特徴量と前記重み係数との乗算、及び乗算結果の加算を繰り返し実行して、前記畳込み演算を行うことを含み、前記被乗数部及び乗数部の何れか一方に配置される値は、前記被乗数部及び乗数部の何れか他方と同じビット幅の値であるか、又は、-1、0、及び+1のいずれかである。
また、本発明に係る演算処理装置は、特徴量が1次元以上の格子状に配置された特徴マップに対して、重み係数が1次元以上の格子状に配置されたフィルタをスライドさせながら畳込み演算を行うための演算処理装置であって、被乗数部及び乗数部を備えた乗算器と、加算器と、乗算器の被乗数部及び乗数部の何れか一方に少なくとも1つの前記特徴量を配置し、前記乗算器の乗数部及び被乗数部の何れか他方に少なくとも1つの前記重み係数を配置して、前記特徴量と前記重み係数との乗算、及び乗算結果の加算を繰り返し実行して、前記畳込み演算を行うように、前記乗算器及び前記加算器を制御する制御部と、を含み、前記被乗数部及び乗数部の何れか一方に配置される値は、前記被乗数部及び乗数部の何れか他方と同じビット幅の値であるか、又は、-1、0、及び+1のいずれかである。
本発明に係る畳込み演算方法及び演算処理装置によれば、高精度、低精度を切り替えて畳込み演算でき、かつ、低精度の畳込み演算を効率的に行うことができる。
本発明の実施の形態における高精度な特徴量と重み係数との畳込み演算の処理イメージを模式的に示す図である。 本発明の実施の形態における低精度の畳込み演算を行う場合の処理イメージを模式的に示す図である。 実行可能な演算パターンを説明するための図である。 実行可能な演算パターンを説明するための図である。 本発明の実施の形態に係る演算処理装置の構成を示すブロック図である。 本発明の実施の形態に係る演算処理装置のデータ処理部の構成を示すブロック図である。 乗数が高精度である場合の乗数部の動作を説明するための図である。 エンコーダが出力するマルチプレクサへの選択信号を定めた表である。 乗数が3値である場合の乗数部の動作を説明するための図である。 エンコーダが出力するマルチプレクサへの選択信号を定めた表である。 乗数が2値である場合の乗数部の動作を説明するための図である。 エンコーダが出力するマルチプレクサへの選択信号を定めた表である。 乗数のモード毎の選択信号、エンコーダシフト量、及び計算回数を示す表である。 被乗数が高精度である場合の被乗数部の動作を説明するための図である。 被乗数が低精度である場合の被乗数部の動作を説明するための図である。 被乗数及び乗数が高精度である場合の加算部の動作を説明するための図である。 加算部の具体的な構造を示すブロック図である。 加算器の数を説明するための図である。 乗数が低精度である場合の加算部の動作を説明するための図である。 データ整形部の動作を説明するための図である。 被乗数がInt8であり、乗数が3値である場合の加算部の動作を説明するための図である。 被乗数がInt4であり、乗数が3値である場合の加算部の動作を説明するための図である。 被乗数が2値であり、乗数が3値である場合の加算部の動作を説明するための図である。 被乗数が2値であり、乗数が2値である場合の加算部の動作を説明するための図である。 被乗数が1bitであり、乗数が2値である場合の加算部の動作を説明するための図である。 被乗数及び乗数がInt8である場合の加算部の動作を説明するための図である。 CNNのネットワーク構造の一例を示す図である。 CNNにおける処理ループを説明するための図である。 畳込み演算での並列処理の一例を示す図である。 CNNの1層目の畳込み演算での並列処理の一例を示す図である。 CNNの1層目の畳込み演算での並列処理の一例を示す図である。 CNNの1層目の畳込み演算における処理の流れを示すタイムチャートである。 畳込み演算での並列処理の一例を示す図である。 CNNの2層目の畳込み演算での並列処理の一例を示す図である。 CNNの2層目の畳込み演算での並列処理の一例を示す図である。 CNNの2層目の畳込み演算における処理の流れを示すタイムチャートである。 畳込み演算での逐次処理の一例を示す図である。 CNNの8層目の畳込み演算での逐次処理の一例を示す図である。 CNNの8層目の畳込み演算における処理の流れを示すタイムチャートである。 本発明の実施の形態の他の例におけるデータ処理部の構成を示すブロック図である。 本発明の実施の形態の他の例における加算部の動作を説明するための図である。 加算器を削減する原理を説明するための図である。 本発明の実施の形態の他の例における加算部の動作を説明するための図である。 加算器を削減する原理を説明するための図である。 (a)従来の演算装置による演算(高精度)を模式化して示す図、及び(b)従来の演算装置による演算(低精度)を模式化して示す図である。 (a)従来の乗算器による演算(倍精度)を模式化して示す図、及び(b)従来の乗算器による演算(単精度)を模式化して示す図である。
<本実施の形態の概要>
以下、本発明に係る畳込み演算方法の実施の形態について図面を参照しながら説明する。図1は、本発明の実施の形態におけるCNNにおける特徴量と重み係数との畳込み演算の処理イメージを模式的に示す図である。高精度の畳込み演算を行う場合には、被乗数部に高精度の特徴量Aが配置され、乗数部に高精度の重み係数Bが配置され、乗算が実行され、乗算結果として、A×Bが得られる。
図2は、低精度の畳込み演算を行う場合の処理イメージを模式的に示す図である。
畳込み演算において乗算結果を加算するときに隣の乗算結果と混じる部分がある場合には、正しい値が得られない。ここで、演算結果が混じる要因には2つある。一つは、乗算時の桁上げ(ひし形が重なりあった部分の加算)によるもので、もう一つは、加算時の桁上げ(異なるひし形同士の加算)によるものである。この両方の要因を解決すると演算効率を上げられる。
そこで、本実施の形態では、低精度の畳込み演算において、乗算時の桁上げ(ひし形が重なりあった部分の加算)により演算結果が混じるのを解決するために、乗数として2値、3値のみを対象とする。
また、加算時の桁上げ(異なるひし形同士の加算)により演算結果が混じるのを解決するために、各部分積間のシフト量の調整により、演算結果が混じるのを解決する。
ここで、図2中のCの部分が0となるのはB-0・B-1にマッピングする値を{+1,-1,0}に限定し、A-0×B-1が、A-0を「そのまま出す」、「符号反転」、「0」の3パターンのいずれかとなり、A-0とビット幅が変わらないからである。
また、図2中のDのシフト量は分割数によって決定できる。また、乗算時の桁上げを考える必要がないため、最終的な計算結果のビット幅を削減することができる。
また、本実施の形態では、図3に示すように、IntN×IntN(IntNは、Nビットで表される整数を示す)の高精度な乗算と、3値もしくは2値を乗数とした低精度な乗算とを含む複数の演算パターンを切り替えて行うことができる。例えば、実行可能な演算パターンが、図4に示すように、乗数及び被乗数の各々がInt8(Int8は、8ビットで表される整数を示す)の組み合わせ、乗数が3値と、被乗数が、Int8、Int4(Int4は、4ビットで表される整数を示す)、3値、2値の各々との組み合わせ、並びに、乗数が2値と、被乗数が、Int8、Int4、3値、2値の各々との組み合わせの各パターンである。
このように、本実施の形態では、高精度な乗算と、低精度な乗算とを切り替えて行うと共に、回路面積の増加を抑えつつ高効率に畳込み演算が行える。
<本実施の形態に係る演算処理装置の構成>
次に、本実施の形態に係る演算処理装置の構成について説明する。図5に示すように、本実施の形態に係る演算処理装置100は、制御部50と、メモリ52と、入力バッファ部54と、データ処理部56と、出力バッファ部58とを備えている。制御部50と、メモリ52と、入力バッファ部54と、データ処理部56と、出力バッファ部58とは、バス60を介して相互に接続されている。なお、データ処理部56は、乗算器の一例である。
データ処理部56は、図6に示すように、被乗数部62と、乗数部64と、加算部66とを備えている。
被乗数部62は、被乗数を選択する選択回路であり、被乗数を格納するレジスタ70と、被乗数の-2倍を出力する変換回路72と、被乗数のビット反転を出力する変換回路74と、0を出力する変換回路76と、被乗数の1倍を出力する変換回路78と、被乗数の2倍を出力する変換回路80と、変換回路72~変換回路80の何れかの出力を部分積として選択するマルチプレクサ82とを備えている。
乗数部64は、Boothエンコーダを改良した回路であり、乗数を格納するレジスタ84と、出力部分をシフトさせながら乗数の一部を出力するシフト回路86と、シフト回路86の出力に応じて定まる、マルチプレクサ82への選択信号を出力するエンコーダ88とを備えている。
加算部66は、複数の部分積の加算による桁上げを考慮して、部分積を整形すると共に、複数の部分積を加算する際の桁合わせのために、複数の部分積を、複数の加算器に分配するデータ整形部90と、データ整形部90の出力を加算する加算器92と、レジスタ94とを備えている。
制御部50は、データ処理部56の被乗数部62及び乗数部64の何れか一方に同じビット幅の少なくとも1つの特徴量を配置し、被乗数部62及び乗数部64の何れか他方に少なくとも1つの同じビット幅の重み係数を配置して、特徴量と重み係数との乗算及び乗算結果の加算を繰り返し実行して、畳込み演算を行うように、被乗数部62、乗数部64、及び加算部66の各々を制御する。本実施の形態では、被乗数部62に特徴量を配置し、乗数部64に重み係数を配置する場合を例に説明する。
具体的には、制御部50は、以下に説明する被乗数部62、乗数部64、及び加算部66の各々の具体的な動作が行われるように制御する。
まず、乗数部64の具体的な動作について、乗数が高精度(Int8)である場合と、3値である場合と、2値である場合とに分けて説明する。
乗数が高精度(Int8)である場合について説明する。従来既知のBoothエンコーダを用いた方法と同様に、図7に示すように、レジスタ84に格納された、8ビットで表される1つの乗数のうちの3ビットを、シフト回路86により読み出して、エンコーダ88に入力する。エンコーダ88は、図8に示す表に従ってマルチプレクサ82への選択信号を出力する。
また、シフト回路86は、読み出す3ビットを2ビットずつシフトさせる。これにより、被乗数をMとすると、マルチプレクサ82により、例えば、+M、-2M、+2M、0、0が順次選択される。
次に、乗数が3値{-1,0,+1}の場合について説明する。
図9に示すように、レジスタ84に格納された、各々2ビットで表される4個の乗数のうちの3ビットを、シフト回路86により読み出して、エンコーダ88に入力する。エンコーダ88は、図10(B)に示す表に従ってマルチプレクサ82の選択信号を出力する。なお、図10(B)の表は、図10(A)に示す3値符号化に基づいて定められる。また、図10(A)、図10(B)の表は、一例であり、これに限定されるものではない。また、図10(B)における「X」は、ドントケアであること(0でも1でもよいこと)を示している。
また、シフト回路86は、読み出す3ビットを2ビットずつシフトさせる。これにより、被乗数をMとすると、マルチプレクサ82により、例えば、+M、-M、+M、0が順次選択され、4サイクルで演算が完了する。
次に、乗数が2値{-1,+1}の場合について説明する。
図11に示すように、レジスタ84に格納された、各々1ビットで表される8個の乗数のうちの3ビットを、シフト回路86により読み出して、エンコーダ88に入力する。エンコーダ88は、図12(B)に示す表に従ってマルチプレクサ82への選択信号を出力する。なお、図12(B)の表は、図12(A)に示す2値符号化に基づいて定められる。
また、シフト回路86は、読み出す3ビットを2ビットずつシフトさせる。これにより、被乗数をMとすると、マルチプレクサ82により、例えば、-M、+M、+M、-M、-M、+M、+M、+Mが順次選択され、8サイクルで演算が完了する。
制御部50は、乗数のモードが、高精度(Int8)モード、3値モード、2値モードの何れであるかに応じて、図13に示すように、マルチプレクサ82への選択信号、エンコーダシフト量、及び部分積の計算回数(計算段数)を変更することで、乗数の全モードに対応する。
また、実行時間は乗数のモードよって決定される。高精度(Int8)モード、3値モード、2値モードの各々の実行サイクル数は、以下のようになる。
Figure 0007230744000001
また、一般的に、高精度演算の乗数をIntN(Nは整数)とした場合の実行サイクル数は、以下のようになる。
Figure 0007230744000002
次に、被乗数部62の具体的な動作について、被乗数が高精度(Int8)である場合と、低精度(Int4)である場合とに分けて説明する。
被乗数が高精度(Int8)である場合について説明する。
図14に示すように、例えば、8ビットで表される被乗数である25が、レジスタ70に格納され、変換回路72により、-2×25が出力され、変換回路74により、25のビット反転が出力され、変換回路76により、0が出力され、変換回路78により、1×25が出力され、変換回路80により、2×25が出力される。
マルチプレクサ82は、入力される選択信号に応じて、-2×25、25のビット反転、0、1×25、及び2×25の何れかを加算部66へ出力する。
ここで、2の補数である、数xの-1倍は、
-x= ̄x+1
で計算できるため、後の加算器92で+1を行うようにして、変換回路74では、-1倍を作るのではなく、ビット反転を行うようにする。これにより、変換回路74では、ビット反転を行えば済むため、任意のビット幅に対して一括した演算が可能であり、変換回路74の回路面積を小さくすることができる。ただし、「 ̄x」は、xのビット反転を表す。
次に、被乗数が低精度(Int4)である場合について説明する。乗数は、3値及び2値に限定されているものとする。
図15に示すように、例えば、2つの被乗数のペアである(1、-7)が、レジスタ70に格納され、変換回路74により、(1のビット反転、-7のビット反転)が出力され、変換回路76により、(0×1、0×-7)が出力され、変換回路78により、(1×1、1×-7)が出力される。乗数が3値、2値に限定されているため、変換回路72、80は使用されない。
マルチプレクサ82は、入力される選択信号に応じて、(1のビット反転、-7のビット反転)、(0×1、0×-7)、及び(1×1、1×-7)の何れかを加算部66へ出力する。
ここで、2の補数である、数(x、y)の-1倍は
(-x,-y)=( ̄x+1, ̄y+1)
で計算できる。
+1の部分を後の加算器92で行うようにするため、この部分で行う処理は( ̄x、 ̄y)だけでよく、これは(x,y)をまとめてビット反転しても変わらない。
なお、被乗数が低精度(2値、3値)である場合については、被乗数がInt4である場合と同様であるため、説明を省略する。
次に、加算部66の具体的な動作について、被乗数及び乗数が高精度(Int8)である場合と、低精度である場合とに分けて説明する。
被乗数及び乗数が高精度(Int8)である場合には、図16に示すように、部分積を加算するときの桁合わせのために、データ整形部90により、2ビットシフトを行って、加算器92により加算を行う。
乗数が低精度である場合の動作を説明する前に、加算部66の具体的な構成について説明する。
図17に示すように、加算部66の加算器92は、複数の加算器95及び複数の選択回路96を備えている。このように、複数の加算器95に分割されており、加算器95の数は、全ての演算パターンを考慮したときに必要な加算器の数の最大数である。
例えば、高精度の被乗数及び乗数がInt8であるとすると、図18に示すように、演算パターン毎に、加算器のビット数、加算器の数、全ビット数から、使用する加算器の構成が定められる。上記図18の例では、被乗数が2値で、乗数が3値であるパターンと、被乗数が2値で、乗数が2値であるパターンとでは、4ビットの加算器を8個使用する。それ以外のパターンでは、4ビットの加算器を4個使用する。従って、4ビットの加算器を8個用意すれば、すべての演算パターンで実行が可能となる。
選択回路96は、被乗数及び乗数が高精度(Int8)である場合に、複数の加算器95を大きな加算器として使用するためにキャリーを選択して、加算器95間を接続する。
選択回路96は、乗数が低精度であり、被乗数部62において、対応する部分積に対してマルチプレクサ82が、ビット反転を作る変換回路74を選択した場合に、1を選択する。選択回路96は、それ以外の場合に、0を選択する。
被乗数がInt4、乗数が3値の場合には、図19に示すように、データ整形部90は、Int4の2つの被乗数を、それぞれの加算器95へ分配するように出力する。
P[7:4]はビットセレクトを示し、Pの7ビット目から4ビット目までを表すものとすると、例えば5つの加算器95へ配分される被乗数a〔0〕~a〔4〕は、以下のように定められる。
p1=P[7:4];p0=P[3:0];
a〔d+1〕=p1;a〔d〕=p0
ただし、dは0~3の加算(エンコーダ)実行回数である。すわなち、エンコーダ88による選択信号の決定回数である。また、a〔n〕は、複数の信号をまとめた信号におけるn番目の信号を表し、上記のa〔d〕は、4ビットの信号を表す。
具体的には、データ整形部90は、エンコーダ88によるk回目の選択信号により得られた部分積Pk、レジスタ70に同時に格納される被乗数の数M、レジスタ84に同時に格納される乗数の数N、及び加算器95の数Dを用いて、d番目の加算器95へ出力する被乗数a〔d〕を決定する。ただし、k,M,N,D>0である。また、それぞれの変数にはD=N+M-1の関係性がある。
データ整形部90へ入力される被乗数Pkが、M個の被乗数pM-1,...,p0で構成される場合には、以下のように表される。
Pk=(pM-1,...,pm,...,p1,p0)
M+k-1>d-1>=k-1の場合、加算器95へ出力する被乗数a〔d〕は、以下のように定められる。
a〔d-1〕=pk-1
a〔d〕=pk
...
a〔M+k-2〕=pk+M-2
M+k-1>d-1>=k-1でない場合には、加算器95へ出力する被乗数a〔d〕は、以下のように定められる。
a〔d〕= 0
これにより、図20に示すように、桁合わせのために、2分割した被乗数の出力先となる加算器95が、順番に変更される。
そして、複数の加算器95でそれぞれの部分積が加算される。
上述したように被乗数部62、乗数部64、及び加算部66の各々が動作することにより、被乗数がInt8であり、乗数が3値である場合には、図21に示すように、部分積の計算単位が8bitとなり、加算単位が32bitとなる。
この例のように、乗数が3値{-1、0、+1}の場合には、被乗数の値と部分積のビット幅とが同じになるため、乗算時の桁上げが発生しない。このため、データ処理部56の使用効率を向上させることができる。
なお、上記では、データ整形部90は、複数の加算器95に対して、部分積を分割し、それに合わせて桁上げを考慮して、分割した部分積を入力する加算器95を選択することにより、分割した部分積を、複数の加算器95に分配する場合を例に説明したが、これに限定されるものではない。例えば、データ整形部90は、部分積を、細粒度で桁上げを考慮して1つの大きな加算器に入力するようにしてもよい。
具体的には、被乗数がInt4であり、乗数が3値である場合には、図22に示すように、部分積の計算単位が8bit(=4bit×2)となり、加算単位が25bit(=5bit×5)となる。
この例でも、乗数が3値{-1、0、+1}であり、被乗数の値と部分積のビット幅とが同じになるため、乗算時の桁上げが発生しないが、加算時の桁上げを考慮して、分割単位毎に、1ビットのスペースが挿入されている。
また、被乗数がInt2であり、乗数が3値である場合には、図23に示すように、部分積の計算単位が8bit(=2bit×4)となり、加算単位が28bit(=4bit×7)となる。
この例でも、乗数が3値{-1、0、+1}であり、被乗数の値と部分積のビット幅とが同じになるため、乗算時の桁上げが発生しないが、加算時の桁上げを考慮して、分割単位毎に、2ビットのスペースが挿入されている。
また、被乗数がInt2であり、乗数が2値である場合には、図24に示すように、部分積の計算単位が8bit(=2bit×4)となり、加算単位が44bit(=4bit×11)となる。
この例でも、乗数が2値{-1、+1}であり、被乗数の値と部分積のビット幅とが同じになるため、乗算時の桁上げが発生しないが、加算時の桁上げを考慮して、分割単位毎に、2ビットのスペースが挿入されている。
また、被乗数がInt1であり、乗数が2値である場合には、図25に示すように、部分積の計算単位が8bit(=1bit×8)となり、加算単位が60bit(=4bit×15)となる。
この例でも、乗数が2値{-1、+1}であり、被乗数の値と部分積のビット幅とが同じになるため、乗算時の桁上げが発生しないが、加算時の桁上げを考慮して、分割単位毎に、3ビットのスペースが挿入されている。
上記のように、加算時の桁上げを回避するためにスペースが挿入される。スペースの挿入位置とスペースの挿入量は、以下のように、レジスタ70に格納される被乗数の個数とレジスタ84に格納される乗数の個数による。
挿入位置=1つの被乗数のビット幅
(被乗数がIntNであり、乗数が3値の場合)
挿入量=ceil(log2(レジスタ70に格納される被乗数全体のビット幅/1つの被乗数のビット幅))
(被乗数が2値であり、乗数が3値の場合)
挿入量=2
(被乗数が2値であり、乗数が2値の場合)
挿入量=3
また、桁合わせのためのシフト量と、レジスタ94のビット幅は、以下のように求められる。
シフト量=1つの被乗数のビット幅+挿入量
レジスタ94のビット幅=レジスタ70に格納される被乗数全体のビット幅+挿入量×(被乗数全体のビット幅/1つの被乗数のビット幅)+シフト量の最大値
また、被乗数及び乗数がInt8である場合には、図26に示すように、全体で一つの値となり、重なり合った部分で桁上げを含めた加算が実行される。
<適用例>
上記実施形態の演算処理装置100で、畳込みニューラルネットワークの計算を行う場合の適用例について説明する。
例えば、図27に示すようなネットワーク構造のCNNを用いた物体認識処理を行う場合を例に説明する。また、以下では、下記(例1)~(例3)の異なる種類の演算精度について詳しく処理手順を述べる。
(例1)1層目:Int8×2値
(例2)2層目:2値×3値
(例3)8層目:Int8×Int8
ここで、ループの時間・空間方向の展開の考え方について説明する。
時間方向に展開する場合には、逐次実行が行われる。この場合には、回路面積が小さくなり、柔軟性が向上するものの、処理時間が増加する。
一方、空間方向に展開する場合には、並列実行が行われる。この場合には、回路面積が大きくなり、柔軟性が低下するものの、処理時間が短くなる。
図28に示すように、CNNは、ループL1~ループL7の7重ループで処理を表せる。ループL1では、前層の入力が必要なので、逐次処理又はパイプライン処理が一般的である。ループL2では、出力を並列で出すために、演算ユニットを複数準備して並列処理することが多い。ループL3では、画像データを垂直方向に走査すると連続とならないため一般的に逐次処理が行われる。
このように、CNNの層によってループのどこを時間・空間方向に展開するが異なる。
次に、(例1)1層目 Int8×2値の処理について説明する。特徴マップの特徴量xをInt8とし、重みWを2値とし、入力チャネル数ich=3、出力チャネル数och=64の場合を例に説明する。
まず、以下の表3に示すように、出力チャネルに対するループL2で並列処理を行い、その他のループでは逐次処理を行う。
Figure 0007230744000003
ここで、各記号について以下のように定義する(図29参照)。
ich0: 入力チャンネル0
och0: 出力チャンネル0
W0: 出力チャンネル0の重み
w0:入力チャンネル0の重み
W0w0:出力チャンネル0入力チャンネル0の重み
x=0,y=0:入出力チャンネルの画素の座標
kx=0,ky=0:重みカーネルの座標(3×3の時は 0≦kx,ky<3)
ループL2の並列処理では、図29に示すように、複数の出力チャネルに対して並列に畳込み演算の処理結果が出力されるように実行される。
具体的には、図30に示すように、エンコーダ88により出力される1回目の選択信号に応じて、出力チャネルoch0~och7のx=0,y=0の一部を計算する。このとき、入力チャネルich0のx=0,y=0で、出力チャネル0の重みW0のw0~出力チャネル7の重みW7のw0のkx=0,ky=0を、データ処理部56により並列に計算する。
そして、図31に示すように、エンコーダ88により出力される2回目の選択信号に応じて、出力チャネルoch0~och7のx=0,y=0の一部を計算する。このとき、入力チャネルich1のx=0,y=0で、出力チャネル0の重みW0のw1~出力チャネル7の重みW7のw1のkx=0,ky=0を、データ処理部56により並列に計算する。
1層目計算の全体のタイムチャートを、図32に示す。
まず、レジスタ94にバイアス項をロードしておく。そして、エンコーダ88により出力される1回目~216回目の選択信号の各々に応じて以下のように計算される。
1回目:och0~och7のx=0,y=0の一部を計算する。ich0のx=0,y=0でW0のw0~W7のw0のkx=0,ky=0を、並列に計算する(並列数は8)。
2回目:och0~och7のx=0,y=0の一部を計算する。ich1のx=0,y=0でW0のw1~W7のw1のkx=0,ky=0を、並列に計算する(並列数は8)。
3回目:och0~och7のx=0,y=0の一部を計算する。ich2のx=0,y=0でW0のw2~W7のw2のkx=0,ky=0を、並列に計算する(並列数は8)。
この時点でoch0~7のx=0,y=0の畳込みのkx=0,ky=0の計算が終了する。
4回目:och0~och7のx=0,y=0の一部を計算する。ich0のx=1,y=0でW0のw0~W7のw0のkx=1,ky=0を、並列に計算する(並列数は8)。
...
27回目:och0~och7のx=0,y=0の一部を計算する。ich2のx=2,y=2で W0のw2~W7のw2のkx=2, ky=2を、並列に計算する(並列数は8)。
この時点でoch0~och7のx=0,y=0の計算が終了する。
...
216回目:ich2のx=2,y=2でW55のw2~W63のw2のkx=2,ky=2を並列に計算する(並列数は8)。
216(回)=27×64/8(回)である。och0~2のすべてのx=0,y=0の計算が終了し、レジスタ94をリセットする。
そして、上記と同様の処理を、出力画像のサイズ分繰り返し実行する。
次に、(例2)2層目:2値×3値の処理について説明する。特徴マップの特徴量xを2値とし、重みWを3値とし、入力チャネル数ich=64,出力チャネル数och=64の場合を例に説明する。
まず、以下の表4に示すように、出力画素横方向に対するループL4、及びフィルタ横方向に対するループL6で並列処理を行い、その他のループでは逐次処理を行う。
Figure 0007230744000004
ループL4、L6の並列処理では、図33に示すように、横方向に対して並列に畳込み演算の処理結果が出力されるように実行される。
具体的には、図34に示すように、エンコーダ88により出力される1回目の選択信号に応じて、出力チャネルoch0のx=0,y=0~x=10の一部を計算する。このとき、入力チャネルich0のx=0,y=0~x=7,y=0と、出力チャネル0の重みW0のkx=0,ky=0とkx=1,ky=0とkx=2,ky=0とを、データ処理部56により並列に計算する。
そして、図35に示すように、エンコーダ88により出力される2回目の選択信号に応じて、出力チャネルoch0のx=0,y=0~x=10の一部を計算する。このとき、入力チャネルich0のx=0,y=1~x=7,y=1と、出力チャネル0の重みW0のkx=0,ky=0とkx=1,ky=0とkx=2,ky=0とを、データ処理部56により並列に計算する。
2層目計算の全体のタイムチャートを、図36に示す。
まず、レジスタ94にバイアス項をロードしておく。そして、エンコーダ88により出力される1回目~12288回目の選択信号の各々に応じて以下のように計算される。
1回目:och0x=0,y=0~x=10の一部を計算する。ich0のx=0,y=0~x=7,y=0とW0w0のkx=0,ky=0とkx=1,ky=0とkx=2,ky=0を、並列に計算する(並列数は11)。
2回目:och0x=0,y=0~x=10の一部を計算する。ich0のx=0,y=1~x=7,y=1とW0w0のkx=0,ky=1とkx=1,ky=1とkx=2,ky=1を、並列に計算する(並列数は11)。
3回目:och0x=0,y=0~x=10の一部を計算する。ich0のx=0,y=2~x=7,y=2とW0w0のkx=0,ky=2とkx=1,ky=2とkx=2,ky=2を、並列に計算する(並列数は11)。
この時点でoch0のx=0,y=0~x=10,y=0の畳込みのw0の計算が終了となる。
4回目:och0x=0,y=0~x=10の一部を計算する。ich1のx=0,y=0~x=7,y=0とW0w1のkx=0,ky=0とkx=1,ky=0とkx=2,ky=0を、並列に計算する(並列数は11)。
...
192回目:och0x=0,y=0~x=10の一部を計算する。ich63のx=0,y=0~x=7,y=0とW0w63のkx=0,ky=2とkx=1,ky=2とkx=2,ky=2を、並列に計算する(並列数は11)。
この時点で och0のx=0,y=0~x=10,y=0の畳込みが計算完了となる。レジスタ94をリセットする。
193回目:och1x=0,y=0~x=10の一部を計算する。ich0のx=0,y=0~x=7,y=0とW1w0のkx=0,ky=0とkx=1,ky=0とkx=2,ky=0を、並列に計算する(並列数は11)。
...
12288回目(3×64×64回目):och63x=0,y=0~x=10の一部を計算する。ich63のx=0, y=0~x=7,y=0とW63w63のkx=0,ky=2とkx=1,ky=2とkx=2,ky=2を、並列に計算する(並列数は11)。
この時点で出力x=0,y=0~x=10,y=0の畳込み計算が完了となる。
そして、上記と同様の処理を、出力画像のサイズ分繰り返し実行する。
次に、(例3)8層目:Int8×Int8の処理について説明する。特徴マップの特徴量xをInt8とし、重みWをInt8とし、入力チャネル数ich=32,出力チャネル数och=32の場合を例に説明する。
まず、以下の表5に示すように、全てのループで逐次処理を行う。
Figure 0007230744000005
高精度な演算であるため、図37に示すように、畳込み演算の処理結果が逐次出力されるように実行される。
具体的には、図38(A)に示すように、エンコーダ88により出力される1回目の選択信号に応じて、出力チャネルoch0のx=0,y=0の一部を計算する。このとき、入力チャネルich0のx=0,y=0で、出力チャネル0の重みW0のkx=0,ky=0を、データ処理部56により計算する。
そして、図38(B)に示すように、エンコーダ88により出力される2回目の選択信号に応じて、出力チャネルoch0のx=0,y=0の一部を計算する。このとき、入力チャネルich1のx=0,y=0で、出力チャネル0の重みW1のkx=0,ky=0を、データ処理部56により並列に計算する。
8層目計算の全体のタイムチャートを、図39に示す。
まず、レジスタ94にバイアス項をロードしておく。そして、エンコーダ88により出力される1回目~289回目の選択信号の各々に応じて以下のように計算される。
1回目:och0のx=0,y=0の一部を計算する。ich0のx=0,y=0でW0のw0のkx=0,ky=0を計算する。
2回目:och0のx=0,y=0の一部を計算する。ich1のx=0,y=0でW0のw1のkx=0,ky=0を計算する。
...
32回目:och0のx=0,y=0の一部を計算する。ich31のx=0,y=0でW0のw31のkx=0,ky=0を計算する。
この時点でoch0のx=0,y=0の一部の畳込みの(kx=0,ky=0)が終了となる。
33回目:och0のx=0,y=0の一部を計算する。ich0の座標x=1,y=0でW0のw0のkx=1,ky=0を計算する。
...
288回目:och0のx=0,y=0の一部を計算する。ich31の座標x=2,y=2でW0のw2のkx=2,ky=2を計算する。
och0のx=0,y=0の計算が終了となる。レジスタ94をリセットする。
289回目:och0のx=1,y=0の一部を計算する。x=2,y=2でW55のw2~W63のw2のkx=2,ky=2を計算する。
そして、上記と同様の処理を、och分(64回)×出力画像サイズ分繰り返しを行えば良い。
以上説明したように、本発明の実施の形態に係る演算処理装置によれば、ニューラルネットワークの層毎に、非乗数又は乗数の精度を、高精度又は低精度に切り替えて畳込み演算でき、かつ、低精度の畳込み演算を効率的に行うことができる。
また、実数・整数演算の乗算器を用いて、面積増加を抑えつつも従来の乗算だけでなく、2値・3値の乗算も効率的に行え、高精度・低精度の畳込み演算を可変して実行できる。
また、本発明の実施の形態に係る演算処理装置を用いることで、演算精度を変更し、必要な認識精度を維持しつつも、従来よりも省面積・高速にニューラルネットワークの計算が実行できる。
<変形例1>
特徴量および重み係数の部分積の計算を並列に行い、部分積すべてもしくは一部を前記特徴量および重み係数のビット幅より決定されるシフトを行った上で同時に加算するように構成してもよい。
例えば、図40に示すように、乗数部64のシフト回路86及びエンコーダ88を並列数分だけ設け、被乗数部62のマルチプレクサ82を並列数分だけ設け、加算部66のデータ整形部90を並列数だけ設けるように構成すればよい。
<変形例2>
また、図41に示すように、加算計算が完了した部分積の和を、順次、記憶素子(例えば、入力バッファ部54内のメモリ)へ書き出すように制御してもよい。これにより、加算器92とレジスタ94のビット幅を削減することができる。
例えば、図42に示すように、エンコーダ88によりk回目に決定された選択信号に応じて得られた部分積を加算するために使用される加算器95(図42の斜線部分及びドット部分)は一部であり、その他の加算器95は未使用である。そこで、部分積の加算が完了した加算器95(図42のドット部分)のレジスタ97の値を、記憶素子に書き出すようにする。これにより、加算器95を節約できる。この例の場合には、加算器95は2個(2分割)で十分である。
<変形例3>
上記変形例2で説明したように、加算計算が完了した部分積の和を、順次、記憶素子へ書き出すように制御した場合に、畳込み演算では、乗算と加算を複数回繰り返すため、図43に示すように、記憶素子から必要な部分積の和を読み出すことで、加算器92とレジスタ94のビット幅を削減することができる。
例えば、前回までの部分積の和を、記憶素子から読み出して、予め、レジスタ97に格納しておくことで、連続した実行でも加算器95を削減することができる。具体的には、図44に示すように、エンコーダ88によりk=1回目の選択信号を決定する前に、前回までの部分積の和(図44の右下斜め方向の斜線部分)を読み出してレジスタ97に格納しておく。k=2回目以降についても、直前までに、前回までの部分積の和(図44の右下斜め方向の斜線部分)を読み出してレジスタ97に格納しておく。
<変形例4>
変換回路74が、ビット反転ではなく、-1倍を作る回路となるように構成してもよい。この場合には、変換回路74を選んだ場合の後段の加算器95での+1が不要となる。
<変形例5>
被乗数部62、乗数部64、及び加算部66を、Boothエンコーダを用いて構成した場合を例に説明したが、これに限定されるものではなく、被乗数部62、乗数部64、及び加算部66を、Boothエンコーダを用いずに構成してもよい。例えば、被乗数部62、乗数部64、及び加算部66を、Wallaceツリーを用いて構成してもよい。
<変形例6>
上記実施の形態において、被乗数部62及び乗数部64を入れ替えるように構成してもよい。
<変形例7>
また、本発明は、上述した実施の形態に限定されるものではなく、この発明の要旨を逸脱しない範囲内で様々な変形や応用が可能である。
50 制御部
52 メモリ
54 入力バッファ部
56 データ処理部
58 出力バッファ部
60 バス
62 被乗数部
64 乗数部
66 加算部
70 レジスタ
72、74、76、78、80 変換回路
82 マルチプレクサ
84、94、97 レジスタ
86 シフト回路
88 エンコーダ
90 データ整形部
92、95 加算器
96 選択回路
100 演算処理装置

Claims (8)

  1. 特徴量が1次元以上の格子状に配置された特徴マップに対して、重み係数が1次元以上の格子状に配置されたフィルタをスライドさせながら畳込み演算を行うための畳込み演算方法であって、
    乗算器の被乗数部及び乗数部の何れか一方に少なくとも1つの前記特徴量を配置し、前記乗算器の乗数部及び被乗数部の何れか他方に少なくとも1つの前記重み係数を配置して、前記特徴量と前記重み係数との乗算、及び乗算結果の加算を繰り返し実行して、前記畳込み演算を行うことを含み、
    前記被乗数部及び乗数部の何れか一方に配置される値は、前記被乗数部及び乗数部の何れか他方と同じビット幅の値であるか、又は、-1、0、及び+1のいずれかであり、
    前記乗数部に配置される値のビット幅又は値の種類数に応じて、Boothエンコーダの出力を切り替え、前記Boothエンコーダの出力に応じて定まる、前記被乗数部に配置される値への係数と、前記被乗数部に配置された値とから求められる部分積を加算することを繰り返し実行することにより、前記畳込み演算を実行する
    畳込み演算方法。
  2. 前記乗数部に配置された値の一部に応じて、前記被乗数部に配置された値の-2倍、ビット反転、0倍、1倍、及び2倍のいずれかから選択した部分積を求め、前記部分積を加算することを繰り返し実行することにより、前記畳込みを実行し、
    前記ビット反転が選択された場合、前記部分積を加算する際に更に1を加算する請求項記載の畳込み演算方法。
  3. 前記被乗数部に配置される複数の値と、前記乗数部に配置される値とから求められる複数の部分積を、少なくとも1つの加算器で同時に加算するために、前記複数の部分積を、前記少なくとも1つの加算器に分配すると共に、加算時の桁上げ出力に応じて前記部分積毎に所定ビットのスペースを挿入して、前記加算器に入力する請求項1又は2記載の畳込み演算方法。
  4. 前記被乗数部に配置される複数の値と、前記乗数部に配置される値との部分積の計算を並列に行う請求項記載の畳込み演算方法。
  5. 前記部分積の加算が完了した場合に、前記部分積の加算により求められた和を、順次、メモリへ書き出す請求項~請求項の何れか1項記載の畳込み演算方法。
  6. 前記部分積の計算、及び前記部分積の加算を繰り返し実行する場合において、順次、前記メモリから前記和を読み出し、
    前記メモリから読み出した和に対して、前記部分積を加算する請求項記載の畳込み演算方法。
  7. 特徴量が1次元以上の格子状に配置された特徴マップに対して、重み係数が1次元以上の格子状に配置されたフィルタをスライドさせながら畳込み演算を行うための演算処理装置であって、
    被乗数部及び乗数部を備えた乗算器と、
    加算器と、
    乗算器の被乗数部及び乗数部の何れか一方に少なくとも1つの前記特徴量を配置し、前記乗算器の乗数部及び被乗数部の何れか他方に少なくとも1つの前記重み係数を配置して、前記特徴量と前記重み係数との乗算、及び乗算結果の加算を繰り返し実行して、前記畳込み演算を行うように、前記乗算器及び前記加算器を制御する制御部と、
    を含み、
    前記被乗数部及び乗数部の何れか一方に配置される値は、前記乗数部及び被乗数部の何れか他方と同じビット幅の値であるか、又は、-1、0、及び+1のいずれかであり、
    前記乗数部に配置される値のビット幅又は値の種類数に応じて、Boothエンコーダの出力を切り替え、前記Boothエンコーダの出力に応じて定まる、前記被乗数部に配置される値への係数と、前記被乗数部に配置された値とから求められる部分積を加算することを繰り返し実行することにより、前記畳込み演算を実行する
    演算処理装置。
  8. ニューラルネットワークを用いた画像処理の一部として、前記畳込み演算を行う請求項記載の演算処理装置。
JP2019155433A 2019-08-28 2019-08-28 畳込み演算方法及び演算処理装置 Active JP7230744B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2019155433A JP7230744B2 (ja) 2019-08-28 2019-08-28 畳込み演算方法及び演算処理装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2019155433A JP7230744B2 (ja) 2019-08-28 2019-08-28 畳込み演算方法及び演算処理装置

Publications (2)

Publication Number Publication Date
JP2021033813A JP2021033813A (ja) 2021-03-01
JP7230744B2 true JP7230744B2 (ja) 2023-03-01

Family

ID=74676637

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2019155433A Active JP7230744B2 (ja) 2019-08-28 2019-08-28 畳込み演算方法及び演算処理装置

Country Status (1)

Country Link
JP (1) JP7230744B2 (ja)

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008131336A (ja) 2006-11-21 2008-06-05 Nec Electronics Corp フィルタ演算器及び動き補償装置
JP2016045685A (ja) 2014-08-22 2016-04-04 富士通株式会社 乗算回路及びその乗算方法
CN105824601A (zh) 2016-03-31 2016-08-03 同济大学 一种支持多模式乘法器的部分积复用方法
WO2019023046A1 (en) 2017-07-24 2019-01-31 Tesla, Inc. ACCELERATED MATHEMATICAL MOTOR
US20190056916A1 (en) 2018-10-15 2019-02-21 Aditya Varma Method and apparatus for efficient binary and ternary support in fused multiply-add (fma) circuits
JP2019079183A (ja) 2017-10-23 2019-05-23 日立オートモティブシステムズ株式会社 演算装置及び車載制御装置
US20190227769A1 (en) 2018-01-19 2019-07-25 Shanghai Zhaoxin Semiconductor Co., Ltd. Microprocessor with booth multiplication

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3579087B2 (ja) * 1994-07-08 2004-10-20 株式会社日立製作所 演算器およびマイクロプロセッサ
JP3526135B2 (ja) * 1996-05-24 2004-05-10 株式会社ルネサステクノロジ ディジタル信号処理装置

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008131336A (ja) 2006-11-21 2008-06-05 Nec Electronics Corp フィルタ演算器及び動き補償装置
JP2016045685A (ja) 2014-08-22 2016-04-04 富士通株式会社 乗算回路及びその乗算方法
CN105824601A (zh) 2016-03-31 2016-08-03 同济大学 一种支持多模式乘法器的部分积复用方法
WO2019023046A1 (en) 2017-07-24 2019-01-31 Tesla, Inc. ACCELERATED MATHEMATICAL MOTOR
JP2019079183A (ja) 2017-10-23 2019-05-23 日立オートモティブシステムズ株式会社 演算装置及び車載制御装置
US20190227769A1 (en) 2018-01-19 2019-07-25 Shanghai Zhaoxin Semiconductor Co., Ltd. Microprocessor with booth multiplication
US20190056916A1 (en) 2018-10-15 2019-02-21 Aditya Varma Method and apparatus for efficient binary and ternary support in fused multiply-add (fma) circuits

Also Published As

Publication number Publication date
JP2021033813A (ja) 2021-03-01

Similar Documents

Publication Publication Date Title
KR20070039490A (ko) Simd 어레이 프로세서를 위한 비트 직렬 프로세싱 소자
TWI512686B (zh) 用於通用性運算之紋理單元
US7257609B1 (en) Multiplier and shift device using signed digit representation
EP3093757B1 (en) Multi-dimensional sliding window operation for a vector processor
US10853037B1 (en) Digital circuit with compressed carry
US20230394626A1 (en) ASTC Interpolation
US6370556B1 (en) Method and arrangement in a transposed digital FIR filter for multiplying a binary input signal with tap coefficients and a method for designing a transposed digital filter
US9082476B2 (en) Data accessing method to boost performance of FIR operation on balanced throughput data-path architecture
US6675286B1 (en) Multimedia instruction set for wide data paths
JP7230744B2 (ja) 畳込み演算方法及び演算処理装置
CN110858137A (zh) 除以整数常数的浮点除法
CN114281755B (zh) 一种面向向量处理器的半精度向量化卷积方法及系统
JP2023542261A (ja) 複数のアキュムレータを有するシストリックアレイセル
TWI733334B (zh) 卷積神經網路運算裝置及其運算的方法
KR101527103B1 (ko) 이산 코사인 변환 장치 및 방법
JPH0816903B2 (ja) 積和演算回路
JP2001084242A (ja) 可変演算プロセッサ
US11295485B2 (en) ASTC interpolation
US20030126169A1 (en) Progressive two-dimensional (2D) pyramid filter
CN115328440A (zh) 一种基于2d脉动阵列的通用稀疏矩阵乘法实现方法及装置
CN115079997A (zh) 对数执行硬件高效无偏舍入的方法
Deepika et al. Low power FIR filter design using truncated multiplier
JPH04307662A (ja) 離散コサイン変換装置および逆離散コサイン変換装置
KR20040100044A (ko) 고속의 저전력 이산 코사인 변환 장치 및 방법
Gil et al. Accelerating a modified Gaussian pyramid with a customized processor

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20211217

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20221026

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20221108

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20221228

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20230130

R151 Written notification of patent or utility model registration

Ref document number: 7230744

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R151