JP2018129040A - 数学的関数を計算するためのシステムおよび方法 - Google Patents

数学的関数を計算するためのシステムおよび方法 Download PDF

Info

Publication number
JP2018129040A
JP2018129040A JP2018014217A JP2018014217A JP2018129040A JP 2018129040 A JP2018129040 A JP 2018129040A JP 2018014217 A JP2018014217 A JP 2018014217A JP 2018014217 A JP2018014217 A JP 2018014217A JP 2018129040 A JP2018129040 A JP 2018129040A
Authority
JP
Japan
Prior art keywords
function
electronic device
log2
frac
calculating
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2018014217A
Other languages
English (en)
Other versions
JP7228956B2 (ja
Inventor
ゾン レファン
Lefan Zhong
ゾン レファン
カオ ズィーウェイ
Zhiwei Cao
カオ ズィーウェイ
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.)
Vivante Corp
Original Assignee
Vivante 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 Vivante Corp filed Critical Vivante Corp
Publication of JP2018129040A publication Critical patent/JP2018129040A/ja
Application granted granted Critical
Publication of JP7228956B2 publication Critical patent/JP7228956B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/544Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
    • G06F7/556Logarithmic or exponential functions

Landscapes

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

Abstract

【課題】数学的関数を計算するためのシステムおよび方法を提供する。【解決手段】数学的関数は、データテーブルを用いた多項式近似(二次近似など)を行う1つのパイプラインで計算される。1つのパイプラインは、1つ以上のオペコードに従って、RCP関数、SQRT関数、EXP関数、もしくは、LOG関数のうちの少なくとも1つを計算できる。SINおよびCOSも、近似によりパイプラインを用いて計算される。【選択図】図2

Description

<関連出願>
本出願は、2014年9月15日出願の「数学的関数を計算するためのシステムおよび方法」という名称の米国特許出願第14/486891号に関連しており、この出願は参照することによって本明細書に含まれる。
<技術分野>
本発明は、一般にコンピュータシステムの分野に関連し、より詳細には、グラフィックプロセッサチップの計算機能に関する。
グラフィックプロセッサチップは、従来から、高速な描画とレンダリング速度のためにハードウェアで実装された様々な数学的関数を用いる。これらの数学的関数のいくつかの例は、逆関数(「RCP」、reciprocal function)、逆平方根関数(「SQRT」、reciprocal square root function)、指数関数(「EXP」)、対数関数(「LOG」)を含む。これらの数学的関数は、従来技術において、異なるアルゴリズムの個別の回路ブロックとして実装される。
例えば、従来技術における3サイクルのRCPの実装においては、浮動小数点数xを、上位ビット(「MSB」、most significant bits)部分x0と下位ビット(「LSB」、least significant bits)部分x1の連結として表すことができ、ここで、x1=x-x0である。xの逆数の主な計算は、仮数の計算におけるものである。仮数は、従来技術において、典型的には2つの項を持つ関数:f(x)=a+b(x-x0)で計算される。ここで、aとbはデータルックアップテーブルである。典型的な例だと、グラフィックプロセッサのために21ビット以上の精度が要求されるが、要求される精度を達成するために、データルックアップテーブルa及びbのそれぞれにおいて、16,000個を超えるエントリが必要とされる。これは、14ビットのx0と、それぞれが2の14乗(2.sup.14)個のエントリを持つデータルックアップテーブルに基づく。このような大きなデータルックアップテーブルのハードウェア実装は、データルックアップテーブルのサイズに比例した大きなゲート数をもたらす。グラフィックプロセッサチップは、幾つかの数学的関数のハードウェア実装を含むことがある。従来技術の例においては、これらの数学的関数の各々は、大きなゲート数を必要とし、典型的には他の方法と組み合わされる。これらの数学的関数の各々を個別の論理回路と個別の大きなデータルックアップテーブルを使って実装することは、従来技術において、一般的な技術である。高速さとモバイルアプリケーションがより高い集積度とより低い電力消費を要することから、これらの様々な数学的関数を実装する効率的なアルゴリズムへのニーズがある。
本発明の利点が容易に理解されるように、簡単に上述した本発明のより詳細な記述が、添付の図面に図示される特定の実施形態を参照して提供される。これらの図面が単に本発明の典型的な実施形態を図示するだけであり、従って、これらの図面は本発明の範囲を限定するものと考えられるべきではないという理解の下で、本発明は、添付の図面を用いて、追加的な特異性及び詳細とともに、記述され、説明される。
コンピュータシステムの概略ブロック図である。 本発明の実施形態による、6ステージ統合型ハードウェアパイプラインを説明するブロック図である。 本発明の実施形態による、3ステージのRCPハードウェアパイプラインを説明するブロック図である。 本発明の実施形態による、様々な例示的データルックアップテーブルを計算するアルゴリズムを説明するフローチャート図である。 本発明の実施形態による、別の統合型ハードウェアパイプラインを説明するフローチャート図である。 本発明の実施形態による、Xを計算する装置と方法を説明するブロック図である。 本発明の実施形態による、Log2(x)を計算する代替の装置と方法を説明するブロック図である。
本出願の図に一般的に記述され図示されるような、本発明のコンポーネントを、多種多様な異なる構成で配置したり、設計したりすることが可能である、ということは、容易に理解されるだろう。従って、図に表されているような本発明の実施形態についてのより詳細な以下の記述は、請求項に記載されている本発明の範囲を限定することを意図したものではなく、本発明による、現在考えられる実施形態の、ある幾つかの例を単に代表しているにすぎない。ここに記述される実施形態は、図面を参照することにより最も良く理解されるだろう。図面においては、同様な部分は、全体に渡って、同様な参照符号によって指定される。
本発明は、現在の最先端の技術に応じて、特に、現在利用可能な装置及び方法によってはまだ完全には解決されていない当分野の問題とニーズに応じて、開発された。
本発明の実施形態は、装置、方法、あるいはコンピュータプログラム製品であり得る。従って、本発明は、完全にハードウェアの実施形態、完全にソフトウェアの実施形態(ファームウェア、常駐ソフトウェア、マイクロコードなどを含む)、あるいは、ソフトウェアの態様とハードウェアの態様を組み合わせた実施形態の形を取りうる。これらは全て、本明細書において一般的に、「モジュール」あるいは「システム」と呼ばれることがある。更に、本発明は、媒体内に具現化されたコンピュータ利用可能なプログラムコードを有する任意の有形の表現媒体において具現化されたコンピュータプログラム製品、という形を取っても良い。
1つ以上の、コンピュータ利用可能あるいはコンピュータ読み取り可能な媒体の、任意の組み合わせが利用され得る。例えば、コンピュータ読み取り可能な媒体は、携帯型コンピュータ・ディスケット、ハードディスク、ランダムアクセスメモリ(RAM)装置、リードオンリメモリ(ROM)装置、イレーサブル・プログラマブル・リードオンリメモリ(EPROMあるいはフラッシュメモリ)装置、携帯型コンパクトディスク・リードオンリメモリ(CDROM)、光ストレージ装置、及び磁気ストレージ装置のうちの、1つ以上を含んでいてもよい。選択された実施形態においては、コンピュータ読み取り可能な媒体は、命令実行システム、命令実行装置、もしくは命令実行デバイスによって使用されるためのプログラム、あるいは、命令実行システム、命令実行装置、もしくは命令実行デバイスに接続して使用されるプログラムを、含み、格納し、通信し、伝播し、又は伝送することができるような、任意の非一時的媒体を含んでいてもよい。
本発明の動作を実行するためのコンピュータプログラムコードは、Java、Smalltalk、C++などのオブジェクト指向プログラミング言語や、「C」プログラミング言語あるいは同様なプログラミング言語などの従来の手続き型のプログラミング言語などを含む、一つ以上のプログラミング言語の任意の組み合わせによって、書かれてもよい。プログラムコードは、スタンドアロンのソフトウェアパッケージとして全体がコンピュータシステム上で実行されてもよく、スタンドアロンのハードウェアユニット上で実行されてもよく、当該コンピュータからある程度離れたリモートコンピュータ上で一部が実行されてもよく、あるいは、全体がリモートコンピュータ上あるいはリモートサーバ上で実行されてもよい。後者の状況では、リモートコンピュータは、ローカルエリアネットワーク(LAN)もしくはワイドエリアネットワーク(WAN)を含む、任意のタイプのネットワークを介して、コンピュータに接続されてもよく、また、その接続は、外部コンピュータに対して(例えば、インターネットサービスプロバイダを利用して、インターネットを介して)なされてもよい。
本発明の実施形態による方法、装置(システム)及びコンピュータプログラム製品の、フローチャート図、および/または、ブロック図を参照しながら、本発明が以下に記述される。フローチャート図、および/または、ブロック図の各々のブロックと、フローチャート図、および/または、ブロック図におけるブロックの組み合わせは、コンピュータプログラム命令あるいはコードによって実装され得ることが理解されるだろう。これらのコンピュータプログラム命令は、汎用コンピュータのプロセッサか、専用コンピュータのプロセッサか、あるいは、マシンを作り出す他のプログラマブルなデータ処理装置のプロセッサに、それらの命令(すなわちコンピュータあるいは他のプログラマブルなデータ処理装置のプロセッサを介して実行される命令)が、フローチャートおよび/またはブロック図の1つ以上のブロックに規定された機能/動作を実現する手段を作成するように、与えられてもよい。
これらのコンピュータプログラム命令は、また、コンピュータ又は他のプログラマブルなデータ処理装置を特定の方法で機能させることができる非一時的なコンピュータ読み取り可能な媒体に、コンピュータ読み取り可能な媒体に格納された命令が、フローチャートおよび/またはブロック図の1つ以上のブロックに規定された機能/動作を実現する命令手段を含む製品を作り出すように、格納されてもよい。
また、コンピュータあるいは他のプログラマブルな装置上で実行される命令が、フローチャートおよび/またはブロック図の1つ以上のブロックに規定された機能/動作を実現するプロセスを提供するように、コンピュータプログラム命令が、コンピュータあるいは他のプログラマブルなデータ処理装置にロードされて、コンピュータあるいは他のプログラマブルな装置上で一連の動作ステップが実行されるようにして、コンピュータで実装されたプロセスを作り出す、ということも可能である。
図1は、例示的コンピューティング装置100を図示するブロック図である。コンピューティング装置100は、本明細書で議論される手続きなどの、様々な手続きを実行するために用いられてもよい。コンピューティング装置100は、サーバ、クライアント、あるいは、任意の他のコンピューティング・エンティティとして機能することができる。コンピューティング装置は、本明細書で議論するような様々な監視機能を実行することができ、本明細書で説明されるアプリケーションプログラムなどの、一つ以上のアプリケーションプログラムを実行することができる。コンピューティング装置100は、デスクトップ・コンピュータ、ノートブック・コンピュータ、サーバ・コンピュータ、ハンドヘルド・コンピュータ、タブレット・コンピュータなどの、広範囲の様々なコンピューティング装置のうちの任意のものであって良い。
コンピューティング装置100は、1つ以上のプロセッサ102、1つ以上のメモリ装置104、1つ以上のインタフェース106、1つ以上の大容量記憶装置108、1つ以上の入出力(I/O)装置110、および、ディスプレイ装置130を含み、これらは全てバス112に接続される。プロセッサ102は、メモリ装置104および/または大容量記憶装置108に格納された命令を実行する、1つ以上のプロセッサあるいはコントローラを含む。プロセッサ102は、また、キャッシュメモリなどの、様々なタイプのコンピュータ読み取り可能な媒体を含んでも良い。
メモリ装置104は、揮発性メモリ(例えば、ランダムアクセスメモリ(RAM)114)、および/または、不揮発性メモリ(例えば、リードオンリメモリ(ROM)116)などの、様々なコンピュータ読み取り可能な媒体を含む。メモリ装置104は、また、フラッシュメモリなどの書き換え可能なROMを含んでも良い。
大容量記憶装置108は、磁気テープ、磁気ディスク、光ディスク、固体メモリ(例えば、フラッシュメモリ)などの、様々なコンピュータ読み取り可能な媒体を含む。図1に示されるように、ある特定の大容量記憶装置は、ハードディスクドライブ124である。様々なコンピュータ読み取り可能な媒体に対して読み書きを可能とするために、様々なドライブも大容量記憶装置108に含まれていてよい。大容量記憶装置108は、可搬型の媒体126および/または、可搬型ではない媒体を含む。
I/O装置110は、データおよび/または他の情報がコンピューティング装置100に入力されたりコンピューティング装置100から取り出されたりすることを可能とする、さまざまな装置を含む。例示的なI/O装置110は、カーソル制御装置、キーボード、キーパッド、マイク、モニタあるいは他のディスプレイ装置、スピーカ、プリンタ、ネットワークインタフェースカード、モデム、レンズ、CCDあるいは他の撮像装置、などを含む。
ディスプレイ装置130は、コンピューティング装置100の1人以上のユーザに対して情報を表示することができる任意のタイプの装置を含む。ディスプレイ装置130の例は、モニタ、ディスプレイ端末、ビデオ投影装置などを含む。
インタフェース106は、コンピューティング装置100が他のシステム、装置、もしくは、コンピューティング環境と相互作用することを可能とする、様々なインタフェースを含む。例示的なインタフェース106は、例えばローカルエリアネットワーク(LAN)へのインタフェース、ワイドエリアネットワーク(WAN)へのインタフェース、無線ネットワークへのインタフェース、および、インターネットへのインタフェースのような、任意の個数の異なるネットワークインタフェース120を含む。他のインタフェースは、ユーザインタフェース118と周辺装置インタフェース122を含む。インタフェース106は、また、1つ以上のユーザインタフェース要素118を含んでも良い。インタフェース106は、また、例えばプリンタ用のインタフェース、ポインティングデバイス(マウス、トラックパッドなど)用のインタフェース、キーボード用のインタフェースなどの、1つ以上の周辺装置インタフェースを含んでも良い。
バス112は、プロセッサ102、メモリ装置104、インタフェース106、大容量記憶装置108、および、I/O装置110が相互に通信することを可能とし、バス112に接続された他の装置あるいはコンポーネントについても同様である。バス112は、システムバス、PCIバス、IEEE1394バス、USBバスなどの何種類かのバス構造のうちの、1つ以上を代表している。
説明のために、プログラム及び他の実行可能なプログラムコンポーネントは、本図面には個別のブロックとして示されているが、そのようなプログラムとコンポーネントは、様々な時点においてコンピューティング装置100の異なる記憶コンポーネントに存在し得るもので、かつ、プロセッサ102によって実行されるものだ、と理解される。あるいは、本明細書に記述されるシステム及び手続きを、ハードウェアによって、あるいは、ハードウェア、ソフトウェア、および/または、ファームウェアの組み合わせによって、実装することができる。例えば、1つ以上の特定用途向け集積回路(ASIC)を、本明細書に記述されるシステムと手続きのうちの1つ以上を実行するように、プログラムすることができる。
図2は、本発明の実施形態による、6ステージ統合型ハードウェアパイプラインを説明するブロック図である。ここで、ブロック101、ブロック103、ブロック105、ブロック107、ブロック109、ブロック111、及びブロック113は、パイプラインのレジスタステージである。ブロック102は、浮動小数点から固定小数点への変換器である。ブロック112は、固定小数点から浮動小数点への変換器である。一例においては、ブロック112は、EXP関数を実装するためのオペコード(つまり、構成(configuration)命令、マイクロコードなど)に応じてバイパス回路となるように構成されてもよい。他の例においては、ブロック102は、LOG関数を実装するための他のオペコード(つまり、構成命令、マイクロコードなど)に応じてバイパス回路となるように構成されてもよい。更に他の例においては、ブロック102とブロック112の両方は、RCPあるいはSQRT関数を実装するに際し、更に他のオペコード(つまり、構成命令、マイクロコードなど)に応じてバイパス回路となるように構成されてもよい。幾つかの例においては、ブロック104、106、108、及び110は、個別のデータルックアップテーブルに基づいて、RCP、SQRT、EXP、LOGなどの数学的関数を計算するための二次近似の様々な部分を実装しても良い。例えば、ブロック104は、浮動小数点数xの仮数に対応する整数iに基づいて、cについてのデータテーブルのルックアップを実装する。同様に、ブロック106は、bについてのデータテーブルのルックアップを実装する。同一のパイプラインステージの間に、ブロック106は、また、c(x−x0)を計算する。同様に、ブロック108は、aについてのデータテーブルのルックアップを実装し、b(x−x0)とc(x−x0)(x−x1)の計算も実装する。ブロック110は、二次近似を計算するために、3個の項の合算を実装する。上記記述は、上記詳細には限定されず、上記記述により自明となったような様々な改変あるいは変更がなされてもよい。
図3は、本発明の実施形態による、3ステージのRCPハードウェアパイプラインを説明するブロック図である。ここで、ブロック201、ブロック203、ブロック205、および、ブロック207は、パイプラインのレジスタステージである。いくつかの例においては、ブロック202、204、および、206は、二次近似の様々な部分を実装しても良い。例えば、ブロック202は、浮動小数点数の仮数のMSBに対応する整数iに基づいて、bとcについてのデータテーブルのルックアップを実装する。同一のパイプラインステージの間に、ブロック202は、また、(x−x0)(x−x1)を計算する。同様に、ブロック204は、aについてのデータテーブルのルックアップを実装し、b(x−x0)とc(x−x0)(x−x1)の計算も実装する。いくつかの実装においては、(x1−x)は、NOT(x−x0)として計算されてもよく、ここで、NOTは、1を0に、0を1に変更する、ビットごとの演算である。ブロック206は、二次近似を計算するために、3個の項の合算を実装する。上記記述は、上記詳細には限定されず、上記記述によって自明となったような様々な改変あるいは変更がなされてもよい。
図4は、本発明の実施形態による、様々なデータルックアップテーブルを計算する例示的アルゴリズムを説明するフローチャート図である。ここで、例示的アルゴリズムは、SQRT用のデータテーブルa、b及びcを計算するために説明されている。この例においては、table[0][i]=a、table[1][i]=b、および、table[2][i]=c である。3つの一次方程式が、3つの値a、b、および、cを計算するために用いられる。これらの3つの方程式は、まずセグメント(301)の開始点(つまり、x)、中間点(つまり、x.sub.――5)及び終点(つまり、x1)を計算することにより、解かれる。ブロック302及び303は、浮動小数点形式でa、b、および、cを計算する。ブロック304は、a、b、および、cを整数形式に変換する。ブロック305は、丸めを行い、最終的な値を生成する。他の例として、ブロック302における「sqrt」関数は、本アルゴリズムをRCP用のデータテーブルa、b、および、cを計算することに転用するために、逆関数によって置換されてもよい。他の例においては、ブロック302における「sqrt」関数は、本アルゴリズムを他の関数(例えば、EXP、LOGなど)用のデータテーブルa、b、および、cを計算することに転用するために、これらの他の関数(EXP、LOGなど)によって置換されてもよい。上記記述は、上記詳細には限定されず、上記記述によって自明となったような様々な改変あるいは変更がなされてもよい。図4のフローチャートは、64個のエントリのテーブルを実装するのに適しているだろう。128個のエントリなどの他の個数のエントリも用いることができる。
上記方法は、例えばモバイル・グラフィックチップにおけるバーテックスシェーダやピクセルシェーダに対して、一つの統合型ハードウェアパイプラインを用いて浮動小数点値で上記の超越関数のリストを計算するための統一的方法を、提供する。この技法は、F(x)=1/x、F(x)=1/x^(1/2)、F(x)=2^x、および、F(x)=LOG2(x) の計算に基づいていてもよい。
これらの関数は、以下の関数、すなわち、F(x) = a + b(x-x0) + c(x-x0)(x-x1)(以下、「補間関数」)を実行する、統合型ハードウェアパイプによって、実装される。近似は、64個、128個あるいは、ある他の個数のセグメントで行うことができ、ここで、x0はセグメントの開始値であり、x1はセグメントの終了値である。x0は、xの上位ビット(MSB、most significant bits)部分であり、(x−x0)は、xの下位ビット(LSB、least significant bits)部分である。xの値は、x0とx1の間である(x0 <= x < x1)。値a、b及びcは、例えばハードウェアに埋め込まれたテーブルなどの、3つの個別のテーブルからのものである。
EXPに対しては、浮動小数点から固定小数点への数の変換ステージが、統合型ハードウェアパイプの前段に配置される。LOGに対しては、統合型ハードウェアパイプの後段に、固定小数点から浮動小数点への数の変換がある。ハードウェアの流れと機能は、各関数について選択されるテーブルが異なるほかは、4つの関数のそれぞれについて同一である。入力オペコードが関数を選択する。このアプローチに基づいた、低レイテンシの効率的RCP(逆数)の実装は、3サイクルにまで減少され得る。
図5を参照すると、Sin(πx)、Cos(πx)、LOG2(x)、および、DIV(つまり、y/x)の計算を高速化するために、ロジックデバイスが図1と図2のパイプラインに追加されてもよい。例えば、追加のロジックは、Sin(πx) = Sin(π*(IntX+ FracX)) = (-1)^IntX*Sin(π*FracX) という公式に基づいて実装されてもよい。ここで、IntXは入力浮動小数点引数xの整数部分であり、FracXは入力xの小数部分である。よって、直接Sin(πx)を近似するのではなくて、F(x) = Sin(π*FracX)/FracXに従って近似されてもよい。従って、図5の改変されたパイプラインは、例えば浮動小数点から固定小数点への変換ロジック202から、FracXに等しい追加の出力(output2)を生成してもよい。パイプラインは、Sin(πx) = F(x)*output2を計算するように更に改変されてもよい。ここでF(x)は、例えばパイプラインステージ203-214による、関数Sin(π*FracX)/FracXの近似である。具体的には、F(x)は、例えば上記したパイプラインと方法による、入力引数としてのFracXの値に従って選択されたテーブルのエントリ間での補間の結果である。図示された実施形態では、F(x)とoutput2の乗算は、パイプラインのステージ216において実行されてもよい。Cos(πx)については、Cos(πx) = Sin(π(x+0.5))である。従って、Sin(πx)と同じロジックが、結果を得るために用いられてもよい。ある実施形態においては、Sin(πx)は、FracX <= 0.5fならば、F(x) = Sin(π*FracX)/FracX とoutput2 = FracX とを用いて計算される。ここで0.5f は、1/2に等しい浮動小数点値である。Sin(πx)用のいくつかの実施形態においては、FracX > 0.5f ならば、F(x) = Sin(π*(1.0 - FracX) )/(1.0 - FracX)であり、output2は1.0-FracX である。例えば、より一般的には、Sin(πx)に対し、F(x) = ((-1)^IntX)*Sin(π*Min(FracX, 1.0 - FracX) )/Min(FracX, 1.0 - FracX) であり、output2 はMin(FracX, 1.0 - FracX)である。ここでIntXはxの整数部分である。
入力引数xが1.0に近いとき、Log2(x)は非常に小さい。直接LOG2(x)を近似するのではなく、F(x) = Log2(x - 1)/(x - 1)として近似してもよい。従って、LOG2について、output2は、x - 1に等しく設定されてもよい。従って、LOG2(x) = F(x)*output2であり、ここでoutput2は(x - 1)に等しく、F(x)は、本明細書に記載したようにハードウェアパイプライン内でテーブルと補間を用いて計算される、LOG2(x-1)/(x-1)の近似である。この改変が実行される対象のxの値は、用いられる浮動小数点表現に基づいて選択されるべきである。例えば、いくつかの実施形態においては、xが[0.75,1.5)の範囲内にあるとき、F(x) = LOG2(x-1)/(x-1) かつ output2 = (x-1)である。そうでない場合は、LOG2(x)に対しては、F(x) = LOG2(x) かつ output2 = 1.0fである。
DIV(例えば、y/x)については、y/x = y*(1/x) = y*Rcp(x)という関係を用いると、1/xのアンダーフローの問題があるかもしれない。つまり、|x| > 2^126のとき、32ビットの浮動小数点表現では 1/x = 0 であるかもしれない。|x| > 2^126におけるアンダーフローは、最大の浮動小数点値が、2^127*1.11111111であり、かつ、「浮動小数点正規化数表現」において、最小値が、2^(-126)であるので、発生する。非正規化数を用いる場合、最小値は、2^(-149)となり得る。この場合、入力引数xおよびyの両方は、2^32によってスケーリングされてもよく、つまり、y/x = (y/2^32)/(x/2^32)である。従って、ハードウェアパイプラインにおいては、xがある範囲を超えている(例えば、2^64より大きい)場合にy/xの両方をスケールダウンするために、追加のパイプラインステージが用いられてもよい。この追加のステージは、本明細書に記述したようにテーブル値を選択して補間ステップを実行するためのパイプラインステップの前に、実行されてもよい。
図6は、X(本明細書中では、X^Yとも記載される)を計算する方法を説明する。Xを計算する際に、(1.1)が使用されうる。
2Tとy*Log2(x)の実装がより簡単であるため、この数式は特に有用である。しかし、高い精度が要求される場合(例えば、OpenCLで相対誤差が16−ULP(最後の桁の単位)の場合など)には、このアプローチには問題がある。
Log2(x)が相対誤差ε(典型的には±2−24の範囲である)を有している場合、t = y * Log2(x) を計算すると、t’ = y *( Log2(x) (1+ε) = t + t*εが得られる。最終的な計算結果は、以下の値となる。
このため、相対誤差は、0.69314*t*εとなる。単精度計算では、2を単精度範囲(single precision range)に保つために、tは(−126,127)の範囲でありうる。従って、0.69314*t*εは、88.029*εの範囲に入りうる。これは、相対誤差がεの88倍まで増大しうることを意味する。
Log2()を実装するための従来のアプローチでは、ロジックは{M1,M2}の値を出力する。ここで、M1とM2は単精度を有する。その後、Log2(x)の最終値は、M1*M2の単精度でのコンピューティングにより計算され、その結果、相対誤差は±2−24となる。その後の計算で更なる誤差が出なかったとしても、最終的な相対誤差は、まだ88*2−24のオーダーとなるだろう。この誤差の値は、16.0ULPでの必要条件よりずいぶん大きい。
従って、図6に示すように、Log2(x)ステージ600は、M2値と共に、M1をM1HとM1Lの2つの浮動小数点値(flowing point value)として出力するようにプログラムされ得る。M1HとM1Lの値は、M1H+M1LがM1と少なくとも30ビットの精度で等しくなるような値である。例えば、M1Hは、M1の上位24ビットに相当する24ビットの精度の浮動小数点値であり得る。M1Lは、M1の下位6ビットに相当する6ビットの精度の浮動小数点値であり得る。M2は単精度値(すなわち、24ビット)のままであって良い。
図6に示すように、M1H、M1L、およびM2の値は、2入力ドット積ステージ(two input dot product (Dp2))602に入力されうる。特に、Dp2関数はM2*M1H + M2*M1L = {KH, KL} を計算する。ここで、KHとKLの各々は浮動小数点値であり、KHはDp2ステージ602の24ビット精度での計算結果の上位値であり、KLはDp2ステージ602の24ビット精度での計算結果の下位値である。
KHおよびKLの値は、Y’とともに、Dp2ステージ604に入力されうる。以下で概略を説明するように、Y’は入力引数Yについて、めったに発生しない問題となるケース(problematic corner cases)に対処するために修正されたバージョンである。他の実施形態では、Y’は単に入力引数Yと同じである。Dp2関数は、Y’*KH + Y’*KL = {TH, TL} を計算する。ここで、THおよびTLは2つの浮動小数点値(24ビット精度での上位値+24ビット精度での下位値)である。
Dp2ステージ602と604は、図示された処理の両方のステージで使用されている同じハードウェアコンポーネントであっても良いことに注意されたい。いくつかの実施形態では、Dp2関数は4入力ドット積ロジック(Dp4)の一部として実装される。
従来の Dp2 (x1*y1 + x2*y2) のハードウェア実装では、Fma(fused multiply add、すなわち a*b+c)とほぼ同じロジックが使用されている。Fmaでは、いくつかのビット相殺ケース(bit cancellation cases)を処理するために、増大するビットの全てを保持する必要があるので、中間結果は少なくとも48ビットの精度を有する。しかし、従来のDp2は24ビットの仮数(単精度浮動小数点)に丸めて、1つの浮動小数点値を出力する。このため、Dp2ステージ602、604は、これらのステージが2つの浮動小数点値を出力する(すなわち、Dp2内部での丸め処理前は全体で48ビットの精度となる)ように追加のロジックを含んでも良い。
TH値およびTL値は、入力引数Tとして、改良された精度の入力(すなわち、48ビットの精度:TH、TL)を受け付ける2を実装しているトランセンデンタルステージ(transcendental stage)606に入力されても良い。
図示されている引数では、THとTLは、トランセンデンタルステージ606に入力される前に修正されている。例えば、浮動小数点から固定小数点への変換ロジック(float-to-Fix logic)608は、THを整数部分(TH_Int)と小数部分(TH_Frac)に分離するようにプログラムされる。TLは小数部分のみを有しているだろう。その結果、プロセスは、T_ALL_Fracを得るためにTH_FracとTLを合計する処理を含んでも良い。その後、TH_IntとT_ALL_Fracが、2^(TH_Int + T_All_Frac) を計算するトランセンデンタルステージ606に入力される。トランセンデンタルステージ606は2^Tを計算するための既知の任意のアプローチを用いて、この値を計算しうる。
図7を参照すると、いくつかの実施形態では、テーブルを使用してLog2()ステージ600が実装される。例えば、図2〜図5について説明した上記のアプローチが用いられる。いくつかの実装では、Log2(x)の計算のための2つのテーブルがあり、1つのテーブルは0.75≦x<1.5のときに使用され、他方はxが前述の範囲にない場合に使用される。高度な精度が要求されるため、0.75≦x<1.5のときに使用されるテーブルを含むいくつかの実施形態では、使用されるテーブルが大きくなる。このような実施形態では、Log2()関数は、(1.2)を実装する超越関数700に置き換えられても良い。
TranscedentalForLog(X) = {n, M1H, M1L, M2} (1.2)
n、M1H、M1L、および、M2の値は以下に記載するように超越関数700によって計算されても良い。
正のXは、(1.3)の浮動小数点形式で記述できる。
x = 2k*(1+ s) (1.3)
ここで、kは整数であり、0≦s<1.0である。
(1.4)の場合、(1.5)と書き表せる。
p = s ≧ 0.5 ? (1 + s)/2 : (1+s) (1.4)
x = 2n * p(ここで 0.75≦p<1.5) (1.5)
すると、nは(1.6)に従って決定される。
n = s ≧ 0.5 ? k + 1: k (1.6)
ここでは、M2 = 1 - p、かつ、 {M1H, M1L} = (Log2(1-p))/(1-p) と計算されても良い。本実施形態では、Log2()は、0.75≦x<1.5用のテーブルを用いて実装されうる。
Log2(x)の値は(1.7)に従って計算される。
Log2(x) = n*1.0 + M1H*M2 + M1L*M2 (1.7)
(1.7)は3入力ドット積関数702(Dp3、x1*y1 + x2*y2 + x3*y3)で処理されうる。いくつかの実施例では、同じ論理回路構造を用いてDp2とDp3の両方が実装され、場合によってはDp4と同じ物理回路を用いて実装される。
上記のアプローチを用いると、(1.2)が1つの対数テーブルのみを使用するので、チップ上の領域を節約できる。(1.3)から(1.5)で通常の浮動小数点表記を用いることで、このような利点が得られた。しかしながら、(1.4)から(1.6)は非常に簡単に計算できる。(1.2)が4つの浮動小数点値を出力することに注意されたい。このため、ベクタ4GPUを用いて簡単に実装できる。
OpenCL(open computing language standard)では、(1.8)のような、いくつかの問題となるケースがある。
(-3)3 = -27、(-3)2 = 9、(-3)0.33333333 = Nan (1.8)
正確に(1.1)に従った場合、Log2(-3)=Nanであるので、エラーが発生する。従って、このような問題となるケースに対処するために、入力引数XおよびYの前処理が必要となり得る。特に、図6に示したように、前処理ステージ610が、対応した値X’、Y’、および、Signを得るために関数Preprocess(X, Y) = {X’, Y’, Sign}に従って、入力引数XおよびYを処理しうる。
上述したように、XとYの値は600〜608のステージに従って処理されても良い。図6に示すように、ステージ606の出力は、Xの最終の見積もり値を得るためにSignと掛け算されても良い。関数Preprocess(X, Y)は以下の表1に従って動作しうる。
OpenCLでのpow(x,y)=xの計算のために、最初から最後までに以下のプロセスが含まれ得る。
(1)X’、Y’、Signを得るためにXおよびYを前処理ステージ610に従って処理すること。
(2)その後、X’がLog2()ステージ600に従って処理される。前述のように、Log2()関数は、テーブルを用いて実装され得るし、M1H、M1L、および、M2を出力しうる。これらの値は、図6に示すように、KHとKLを得るために、Dp2ステージ602を用いて掛け算される。または、KHとKLはX’から図7に示すアプローチを用いて前述のように求められても良い。
(3)Dp2ステージ604は、Y’*KH + Y’*KL = {TH, TL} を計算するために使用される。ここで、THは演算の上位24ビットであり、TLは演算の下位24ビットである。
(4)THとTLは、改良された精度の入力{T_H,T_L}を受け付けるトランセンデンタルステージ606に従って処理される。上述のように、浮動小数点から固定小数点への変換ステージ608は、THを整数部分(TH_Int)と小数部分(TH_Frac)に分ける。その後、TH_Fracは、T_All_Fracを得るために、TLに加算される。その後、TH_IntとTH_Fracは、トランセンデンタルステージ606に入力される。トランセンデンタルステージ606は、2^(TH_Int + TH_Frac)の見積もり値を出力する。
(5)トランセンデンタルステージ606の出力は、Sign値と掛け算されて、X^Yの見積もり値である最終結果が得られる。
本発明の上記実施形態は、例示と説明として提供されている。これらは、本発明を、記述されたとおりの形態に限定することを意図したものではない。特に、本明細書に記述された発明の機能的実装は、ハードウェア、ソフトウェア、ファームウェア、および/または、他の利用可能な機能的なコンポーネントもしくは基本構成要素で、等価に実装され得るということ、そして、ネットワークは、有線、無線、あるいは、有線と無線の組み合わせであってよいこと、が考えられる。他の変形、および、実施形態が、上記教示の下に可能であり、従って、発明の範囲は、この詳細な説明によって限定されず、むしろ、以下の請求項によって限定されることを意図している。
本発明は、その精神あるいは本質的特性から外れることなく、他の特定の形態で実施され得る。記述された実施形態は、全ての点で、例示的であるのみであり、限定的ではない、と考えられるべきである。従って、本発明の範囲は、上記記述によってではなく、添付の請求項によって示される。請求項の均等物の意味と範囲の内にある全ての変更は、請求項の範囲内に含まれるべきである。

Claims (15)

  1. (i)電子デバイスによって、Xの関数を入力として受け付けて第1の超越関数を計算し、前記第1の超越関数は、M1H、M1L、および、M2を出力するステップと、ここで、M2は第1の精度を有し、M1HとM1Lの組合せは前記第1の精度よりも大きい第2の精度を有し、
    (ii)前記電子デバイスの2エレメントドット積(Dp2)回路によって、M1HとM2の積、および、M1LとM2の積に従って、KHとKLを計算するステップと、
    (iii)前記電子デバイスによって、有意性の高い出力THと有意性の低い出力TLを得るために、(a)Yの関数と(b)KHおよびKLの両方との積を計算するステップと、
    (iv)前記電子デバイスによって、関数THとTLに従って、XのY乗(X^Y)の見積もり値である出力を得るために、第2の超越関数を計算するステップ
    を含むことを特徴とするXのY乗の値を計算する方法。
  2. 前記Dp2回路が、KHとKLの各々がM2と同じ精度を有するように、KHとKLを生成する
    ことを特徴とする請求項1に記載の方法。
  3. Xが指数kおよび仮数sを有する浮動小数点値である場合、
    前記電子デバイスによって、p=s≧0.5 ? (1+s)/2 : (1+s)を計算するステップと、
    前記電子回路によって、M2を1−pとして計算するステップと、
    前記電子回路によって、M1Hが(Log2(1−p))/(1−p)の計算結果の有意性の高い部分であり、M1Lが(Log2(1−p))/(1−p)の計算結果の有意性の低い部分となるように、{M1H,M1L}を(Log2(1−p))/(1−p)として計算するステップと、
    前記電子回路によって、n=s≧0.5 ? k+1 : kを計算するステップと、
    前記電子回路によって、KHが n*1.0+M1H*M2+M1L*M2 の計算結果の有意性の高い部分であり、KLが n*1.0+M1H*M2+M1L*M2 の計算結果の有意性の低い部分となるように、{KH,KL}=n*1.0+M1H*M2+M1L*M2 を計算するステップ
    を前記方法がさらに含むことを特徴とする請求項1に記載の方法。
  4. (Log2(1−p))/(1−p)の計算は、前記電子回路によって、テーブルを用いて行われる
    ことを特徴とする請求項3に記載の方法。
  5. 3エレメントドット積(Dp3)回路を用いて n*1.0+M1H*M2+M1L*M2 が計算される
    ことを特徴とする請求項4に記載の方法。
  6. KHおよびKLがM2と同じ精度を有する
    ことを特徴とする請求項5に記載の方法。
  7. M1LがM1Hよりも小さいビット数の精度を有する
    ことを特徴とする請求項1に記載の方法。
  8. 前記Yの関数、および、前記Xの関数が表1に従って定義される
    ことを特徴とする請求項1に記載の方法。
  9. 表1に定義されたXとYに応じてsign値を決定するステップ
    をさらに含み、
    前記方法が、さらに、外部デバイスによって、前記sign値に応じた前記第2の超越関数からの出力をsignに設定するステップを含む
    ことを特徴とする請求項8に記載の方法。
  10. 前記第2の超越関数を前記THの関数およびTLの関数に従って計算するステップが、
    前記電子デバイスによって、THの整数部分をTH_Intとして取得するステップと、
    前記電子デバイスによって、THの小数部分をTH_Fracとして取得するステップと、
    前記電子デバイスによって、T_All_Fracを取得するために、TH_FracとTLを組合せるステップと、
    前記電子デバイスによって、前記XのY乗の見積もり値を取得するために、TH_FracおよびT_All_Fracを前記第2の超越関数に入力するステップ
    を含むことを特徴とする、請求項1に記載の方法。
  11. (i)Xの関数を入力として受け付けて、M1H、M1L、および、M2を出力するようにプログラムされた第1の超越関数ステージと、ここで、M2は第1の精度を有し、M1HとM1Lの組合せは前記第1の精度よりも大きい第2の精度を有し、
    (ii)M1HとM2の積、および、M1LとM2の積に従って、KHとKLを出力するようにプログラムされた第1のドット積ステージと、
    (iii)有意性の高い出力THと有意性の低い出力TLを得るために、(a)Yの関数と(b)KHおよびKLの両方との積を計算するようにプログラムされた第2のドット積ステージと、
    (iv)THの関数およびTLの関数を入力として受け付けて、XのY乗の見積もり値を出力するようにプログラムされた第2の超越関数ステージ
    を含み、
    M1LはM1Hよりも低いビット数の精度を有し、
    前記第1のドット積ステージ、および、前記第2のドット積ステージは、1つ以上の4エレメントドット積(Dp4)回路を用いて実装される
    ことを特徴とするXのY乗の値を計算するための電子デバイス。
  12. 前記第1のドット積ステージは、2エレメントドット積(Dp2)回路を含み、
    前記Dp2回路は、KHとKLの各々がM2と同じ精度を有するように、KHとKLを出力するようにプログラムされている
    ことを特徴とする請求項11に記載の電子デバイス。
  13. Xが指数kおよび仮数sを有する浮動小数点値である場合、
    p=s≧0.5 ? (1+s)/2 : (1+s)を計算し、
    M2を1−pとして計算し、
    M1Hが(Log2(1−p))/(1−p)の計算結果の有意性の高い部分であり、M1Lが(Log2(1−p))/(1−p)の計算結果の有意性の低い部分となるように、{M1H,M1L}を(Log2(1−p))/(1−p)として計算し、ここで、Log2(1−p)は前記第1の超越関数ステージを用いて実装され、
    n=s≧0.5 ? k+1 : kを計算し、
    KHが n*1.0+M1H*M2+M1L*M2 の計算結果の有意性の高い部分であり、KLが n*1.0+M1H*M2+M1L*M2 の計算結果の有意性の低い部分となるように、{KH,KL}=n*1.0+M1H*M2+M1L*M2 を計算する
    処理を行うように前記電子デバイスがさらにプログラムされることを特徴とする、請求項11に記載の電子デバイス。
  14. 前記電子デバイスは、表1に従って前記Xの関数、および、前記Yの関数を計算するように、さらにプログラムされ、
    前記電子デバイスは、表1に従ったXとYに応じてsign値を決定し、前記sign値に応じた前記第2の超越関数からの出力をsignに設定するように、さらにプログラムされている
    ことを特徴とする請求項11に記載の電子デバイス。
  15. 前記THの関数、および、TLの関数を計算するために、
    TH_IntをTHの整数部分として取得し、
    TH_FracをTHの小数部分として取得し、
    TH_FracおよびTLからT_All_Fracを取得し、
    TH_FracおよびT_All_Fracを前記第2の超越関数ステージに入力する
    処理を行うように、前記電子デバイスがさらにプログラムされていることを特徴とする、請求項11に記載の電子デバイス。

JP2018014217A 2017-02-02 2018-01-31 数学的関数を計算するためのシステムおよび方法 Active JP7228956B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US15/422,862 US20180217814A1 (en) 2017-02-02 2017-02-02 Systems And Methods For Computing Mathematical Functions
US15/422,862 2017-02-02

Publications (2)

Publication Number Publication Date
JP2018129040A true JP2018129040A (ja) 2018-08-16
JP7228956B2 JP7228956B2 (ja) 2023-02-27

Family

ID=61094299

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2018014217A Active JP7228956B2 (ja) 2017-02-02 2018-01-31 数学的関数を計算するためのシステムおよび方法

Country Status (4)

Country Link
US (1) US20180217814A1 (ja)
EP (1) EP3358460B1 (ja)
JP (1) JP7228956B2 (ja)
KR (1) KR102559930B1 (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10725742B2 (en) 2018-06-05 2020-07-28 Texas Instruments Incorporated Transcendental function evaluation
CN111831257A (zh) * 2020-06-29 2020-10-27 湖南毂梁微电子有限公司 一种用于计算正弦或余弦函数的实现方法及装置

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0492921A (ja) * 1990-08-03 1992-03-25 Fujitsu Ltd 指数関数演算器
JP2010033318A (ja) * 2008-07-29 2010-02-12 Sony Corp 演算処理装置および方法、並びにプログラム
JP2016201108A (ja) * 2015-04-07 2016-12-01 ビバンテ コーポレーション 数学的関数を計算するためのシステム及び方法

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6128638A (en) * 1998-07-23 2000-10-03 Silicon Graphics, Inc. Method and apparatus for calculating X to the Exponent of Y
US7539717B2 (en) * 2005-09-09 2009-05-26 Via Technologies, Inc. Logarithm processing systems and methods
US8346831B1 (en) * 2006-07-25 2013-01-01 Vivante Corporation Systems and methods for computing mathematical functions
US9465580B2 (en) * 2011-12-21 2016-10-11 Intel Corporation Math circuit for estimating a transcendental function

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0492921A (ja) * 1990-08-03 1992-03-25 Fujitsu Ltd 指数関数演算器
JP2010033318A (ja) * 2008-07-29 2010-02-12 Sony Corp 演算処理装置および方法、並びにプログラム
JP2016201108A (ja) * 2015-04-07 2016-12-01 ビバンテ コーポレーション 数学的関数を計算するためのシステム及び方法

Also Published As

Publication number Publication date
JP7228956B2 (ja) 2023-02-27
KR102559930B1 (ko) 2023-07-25
EP3358460A1 (en) 2018-08-08
EP3358460B1 (en) 2019-10-23
US20180217814A1 (en) 2018-08-02
KR20180090205A (ko) 2018-08-10

Similar Documents

Publication Publication Date Title
JP5175379B2 (ja) 選択可能な下位精度を有する浮動小数点プロセッサ
US9519460B1 (en) Universal single instruction multiple data multiplier and wide accumulator unit
CN106990937B (zh) 一种浮点数处理装置和处理方法
JP5731937B2 (ja) ベクトル浮動小数点引数削減
JP6193531B1 (ja) 融合された乗算−加算演算のエミュレーション
JP2010503935A (ja) 命令に応じた丸め処理の実行
US9600236B2 (en) Systems and methods for computing mathematical functions
US8346831B1 (en) Systems and methods for computing mathematical functions
JP7228956B2 (ja) 数学的関数を計算するためのシステムおよび方法
JP6770777B2 (ja) 数学的関数を計算するためのシステム及び方法
US9143159B2 (en) DPD/BCD to BID converters
US9703530B2 (en) Systems and methods for computing mathematical functions
JP2001125771A (ja) 固定小数点グラフィックス装置、方法、及びデータ処理システム
CN108182050B (zh) 利用四输入点积电路计算三角函数
US11314482B2 (en) Low latency floating-point division operations
EP3923132B1 (en) Device for performing multiply/accumulate operations
US9304739B1 (en) Optimized 3D lighting computations using a logarithmic number system
JP2024119962A (ja) 半導体ハードウェアにおいてニューラルネットワークを処理するための実装および方法
US9448806B2 (en) Circuit and method for identifying exception cases in a floating-point unit and graphics processing unit employing the same
Chawla et al. Hardware efficient reconfigurable arithmetic unit
JP2015082152A (ja) 誤差評価を伴う数値演算方法およびこのための装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20210115

RD03 Notification of appointment of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7423

Effective date: 20210115

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20211202

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20211207

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20220222

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20220705

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20220929

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

R150 Certificate of patent or registration of utility model

Ref document number: 7228956

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150