JP2018525730A - スライディングウィンドウ演算 - Google Patents

スライディングウィンドウ演算 Download PDF

Info

Publication number
JP2018525730A
JP2018525730A JP2018502081A JP2018502081A JP2018525730A JP 2018525730 A JP2018525730 A JP 2018525730A JP 2018502081 A JP2018502081 A JP 2018502081A JP 2018502081 A JP2018502081 A JP 2018502081A JP 2018525730 A JP2018525730 A JP 2018525730A
Authority
JP
Japan
Prior art keywords
lane
data element
register
input data
simd
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
JP2018502081A
Other languages
English (en)
Other versions
JP2018525730A5 (ja
JP6737869B2 (ja
Inventor
エリック・マフリン
ジャクブ・パウエル・ゴラブ
Original Assignee
クアルコム,インコーポレイテッド
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 クアルコム,インコーポレイテッド filed Critical クアルコム,インコーポレイテッド
Publication of JP2018525730A publication Critical patent/JP2018525730A/ja
Publication of JP2018525730A5 publication Critical patent/JP2018525730A5/ja
Application granted granted Critical
Publication of JP6737869B2 publication Critical patent/JP6737869B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/82Architectures of general purpose stored program computers data or demand driven
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/30134Register stacks; shift registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8007Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors single instruction multiple data [SIMD] multiprocessors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30021Compare instructions, e.g. Greater-Than, Equal-To, MINMAX
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30029Logical and Boolean instructions, e.g. XOR, NOT
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30105Register structure
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30105Register structure
    • G06F9/30112Register structure comprising data of variable length

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Mathematical Physics (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Executing Machine-Instructions (AREA)
  • Advance Control (AREA)
  • Complex Calculations (AREA)

Abstract

第1のレジスタが、第1の入力データ要素を記憶するレーンを有し、第2のレジスタが、第2の入力データ要素を記憶するレーンを有する。第2のレジスタのレーンの幅は、第1のレジスタのレーンの幅に等しい。シングルインストラクションマルチプルデータ(SIMD)レーンが、第1のレジスタのレーンの幅に等しいレーン幅を有する。SIMDレーンは、第1のレジスタのレーン内の第1の入力データ要素および第2のレジスタのレーン内の第2の入力データ要素に対してスライディングウィンドウ演算を実行するように構成される。スライディングウィンドウ演算を実行することは、第1のレジスタの第1の位置に記憶された第1の入力データ要素および第2のレジスタの第2の位置に記憶された第2の入力データ要素に基づいて結果を決定することを含む。第2の位置は第1の位置とは異なる。

Description

関連出願の相互参照
本出願は、参照によりその内容全体が本明細書に明確に組み込まれる、同一出願人が所有する2015年7月20日に出願の米国非仮特許出願第14/803,728号の優先権を主張する。
本開示は概して、シングルインストラクションマルチプルデータ(SIMD)アーキテクチャのためのスライディングウィンドウ演算に関する。より詳細には、本開示は、スライディングウィンドウ演算の実行に関連するシフトおよびレジスタの量の低減に関する。
技術の進歩が、結果として、より小型で、より強力なコンピューティングデバイスをもたらしてきた。たとえば、現在、小型で軽量であり、ユーザによって容易に携帯される、モバイルフォンおよびスマートフォンなどのワイヤレス電話、タブレットおよびラップトップコンピュータを含む、様々なポータブルパーソナルコンピューティングデバイスが存在する。これらのデバイスは、ワイヤレスネットワークを介して音声およびデータパケットを伝達することができる。さらに、多くのそのようなデバイスは、デジタルスチルカメラ、デジタルビデオカメラ、デジタルレコーダ、およびオーディオファイルプレーヤなどの追加の機能を組み込んでいる。また、そのようなデバイスは、インターネットへのアクセスに使用することができるウェブブラウザアプリケーションなどのソフトウェアアプリケーションを含む、実行可能命令を処理することができる。したがって、これらのデバイスは、高度の計算能力を含むことができる。
技術の進歩によって、信号処理(たとえば、画像処理、ビデオ処理、オーディオ処理など)を実行するプロセッサを含むワイヤレスコンピューティングデバイスも実現されている。プロセッサは、信号処理を実行するために入力信号に畳込み関数を適用する。従来の畳込み関数は、「スライディングウィンドウ」を使用して入力データストリームを処理する場合がある。入力データストリームにおけるデータ要素の一部のスライディングウィンドウが、スライディングウィンドウ内の各データ要素の関数(たとえば、積和)である第1の出力を生成するのに使用されてもよい。次の出力を決定する場合、スライディングウィンドウがシフトされ、次の出力が、シフトされたスライディングウィンドウにおける各データ要素の関数として決定される。
従来のスライディングウィンドウ命令を使用して畳込み関数を実行するために比較的多数のレジスタおよびシフトが使用される場合がある。非限定的な例として、シングルインストラクションマルチプルデータ(SIMD)アーキテクチャが、4データ入力「レーン」を使用して従来のスライディングウィンドウ命令を実行する場合がある。一例として、レーンは、レジスタからの4つのデータ入力(たとえば、スライディングウィンドウ幅が"4"である)に対して畳込み関数を実行して出力を生成することがある。追加の出力を生成する場合、データ要素が第2のレジスタ内で1ロケーション分シフトされることがあり、レーンは、第2のレジスタ内のデータ要素に対して畳込み関数を実行する場合がある。したがって、畳込み関数の出力ごとに、複数のレジスタおよびシフトが使用されることがある。
スライディングウィンドウ演算を実行するためのシフトおよびレジスタを減らすためのシステムおよび方法が開示される。たとえば、演算に関するデータを含む複数のレジスタを参照することによって単一のSIMDレーン内でスライディングウィンドウ演算を実行するための技法が開示される。一例として、スライディングウィンドウ演算が第1のレジスタおよび第2のレジスタを参照してもよい。たとえば、SIMDレーンが第1のレジスタおよび第2のレジスタを参照し、第1および第2のレジスタ内のデータに対するスライディングウィンドウ演算を実行してもよい。一例として、SIMDレーン内の第1のレジスタの一部が、入力データストリームの4つのデータ要素(たとえば、データ要素"0"、データ要素"1"、データ要素"2"、およびデータ要素"3")を記憶してもよく、SIMDレーン内の第2のレジスタの一部が、入力データストリームの次の4つのデータ要素(たとえば、データ要素"4"、データ要素"5"、データ要素"6"、およびデータ要素"7")を記憶してもよい。第1のレジスタの上記の部分に関して、第2のレジスタの対応する部分が、入力データストリームのシフトされたデータを含んでもよい。
SIMDレーンは、2つのレジスタを参照して5つまでのスライディングウィンドウ演算を実行してもよい。たとえば、SIMDアーキテクチャは、スライディングウィンドウ演算を実行するためにレジスタ内のデータを多重化してもよい。一例として、第1のSIMDレーンは、第1のレジスタ内の最初の4つのデータ要素(たとえば、データ要素"0"、データ要素"1"、データ要素"2"、およびデータ要素"3")を使用して第1のスライディングウィンドウ演算を実行し、第1のレジスタのデータ要素"1, 2, 3"ならびに第2のレジスタのデータ要素"4"を使用して第2のスライディングウィンドウ演算を実行し、第1のレジスタのデータ要素"2, 3"ならびに第2のレジスタのデータ要素"4, 5"を使用して第3のスライディングウィンドウ演算を実行し、第1のレジスタのデータ要素"3"ならびに第2のレジスタのデータ要素"4, 5, 6"を使用して第4のスライディングウィンドウ演算を実行し、他のスライディングウィンドウ演算についても同様に実行してもよい。
特定の態様では、本装置は、第1の入力データ要素を記憶するレーンを有する第1のレジスタと、第2の入力データ要素を記憶するレーンを有する第2のレジスタとを含む。第2のレジスタのレーンの幅は、第1のレジスタのレーンの幅に等しい。本装置は、第1のレジスタのレーンの幅に等しいレーン幅を有するシングルインストラクションマルチプルデータ(SIMD)レーンをさらに含む。SIMDレーンは、第1のレジスタのレーン内の第1の入力データ要素および第2のレジスタのレーン内の第2の入力データ要素に対してスライディングウィンドウ演算を実行するように構成される。スライディングウィンドウ演算を実行することは、第1のレジスタの第1の位置に記憶された第1の入力データ要素および第2のレジスタの第2の位置に記憶された第2の入力データ要素に基づいて結果を決定することを含む。第2の位置は第1の位置とは異なる。
別の特定の態様では、本方法は、第1のレジスタのレーン内に第1の入力データ要素を記憶するステップと、第2のレジスタのレーン内に第2の入力データ要素を記憶するステップであって、第2のレジスタのレーンの幅が第1のレジスタのレーンの幅に等しい、ステップとを含む。本方法は、第1のレジスタのレーンの幅に等しいレーン幅を有するシングルインストラクションマルチプルデータ(SIMD)レーンを使用して、第1のレジスタのレーン内の第1の入力データ要素および第2のレジスタのレーン内の第2の入力データ要素に対してスライディングウィンドウ演算を実行するステップをさらに含む。スライディングウィンドウ演算を実行することは、第1のレジスタの第1の位置に記憶された第1の入力データ要素および第2のレジスタの第2の位置に記憶された第2の入力データ要素に基づいて結果を決定することを含む。第2の位置は第1の位置とは異なる。
別の特定の態様では、本装置は、第1のデータを記憶するための手段と第2のデータを記憶するための手段とを含む。第1のデータを記憶するための手段は、第1の入力データ要素を記憶するレーンを有し、第2のデータを記憶するための手段は、第2の入力データ要素を記憶するレーンを有する。第2のデータを記憶するための手段のレーンの幅は、第1のデータを記憶するための手段のレーンの幅に等しい。本装置は、第1のデータを記憶するための手段のレーン内の第1の入力データ要素および第2のデータを記憶するための手段のレーン内の第2の入力データ要素に対してスライディングウィンドウ演算を実行するための手段をさらに含む。スライディングウィンドウ演算を実行するための手段は、第1のデータを記憶するための手段のレーンの幅に等しいレーン幅を有する。スライディングウィンドウ演算を実行することは、第1のデータを記憶するための手段の第1の位置に記憶された第1の入力データ要素および第2のデータを記憶するための手段の第2の位置に記憶された第2の入力データ要素に基づいて結果を決定することを含む。第2の位置は第1の位置とは異なる。
別の特定の態様では、非一時的コンピュータ可読媒体が、プロセッサによって実行されたときに、プロセッサに、第1のレジスタのレーン内に第1の入力データ要素を記憶させ、第2のレジスタのレーン内に第2の入力データ要素を記憶させる命令であって、第2のレジスタのレーンの幅が第1のレジスタのレーンの幅に等しい命令を含む。これらの命令はさらに、プロセッサに、第1のレジスタのレーンの幅に等しいレーン幅を有するシングルインストラクションマルチプルデータ(SIMD)レーンを使用して、第1のレジスタのレーン内の第1の入力データ要素および第2のレジスタのレーン内の第2の入力データ要素に対してスライディングウィンドウ演算を実行させるように実行可能である。スライディングウィンドウ演算を実行することは、第1のレジスタの第1の位置に記憶された第1の入力データ要素および第2のレジスタの第2の位置に記憶された第2の入力データ要素に基づいて結果を決定することを含む。第2の位置は第1の位置とは異なる。
開示される実装形態のうちの少なくとも1つによってもたらされる1つの特定の利点は、SIMDレーンが、従来のSIMDアーキテクチャより少ないレジスタおよびシフトを使用してスライディングウィンドウ演算を実行する場合があることである。本開示の他の態様、利点、および特徴は、以下のセクション、すなわち、図面の簡単な説明、発明を実施するための形態、および特許請求の範囲を含む本願全体のレビューの後明らかになるであろう。
スライディングウィンドウ演算を実行するためのシステムの動作を示す図である。 シングルインストラクションマルチプルデータ(SIMD)レーン内の回路を示す図である。 入力データを第1のレジスタ内にロードし、入力データのシフトされたバージョンを第2のレジスタ内にロードするように動作可能なシステムの図である。 スライディングウィンドウ演算を実行するための方法のフローチャートである。 スライディングウィンドウ演算を実行するように動作可能な構成要素を含むデバイスのブロック図である。
図1を参照すると、スライディングウィンドウ演算を実行するためのシステムの動作が示される。システムは、演算に関するデータを含む複数のレジスタを参照することによってシングルインストラクションマルチプルデータ(SIMD)レーン内でスライディングウィンドウ演算を実行してもよい。システムは、SIMDアーキテクチャ102(たとえば、畳込み関数ハードウェアおよび/またはスライディングウィンドウハードウェア)を含んでもよい。
入力データ104は、SIMDアーキテクチャ102に供給されてもよい。後述のように、スライディングウィンドウ演算を本明細書で説明する技法に従って実行するのを可能にするように入力データ104の特定の部分がシフトされ、いくつかのレジスタ位置内に記憶されてもよい。入力データ104は、64個のデータ要素(たとえば、データ要素"0"〜データ要素"63")を含んでもよい。代替実装形態では、入力データ104はさらなるデータ要素(またはより少ないデータ要素)を含んでもよい。例示的な実装形態では、入力データ104は、第1の入力データ要素106と第2の入力データ要素108とを含んでもよい。第1の入力データ要素106は、データ要素"0"と、データ要素"1"と、データ要素"2"と、データ要素"3"とを含んでもよい。第2の入力データ要素108は、データ要素"4"と、データ要素"5"と、データ要素"6"と、データ要素"7"とを含んでもよい。入力データ104に関して明示的に示されていないが、入力データ104は、第3の入力データ要素(たとえば、データ要素"8"〜データ要素"11")、第4の入力データ要素(たとえば、データ要素"12"〜データ要素"15")、第5の入力データ要素(たとえば、データ要素"16"〜データ要素"19")などを含んでもよい。
SIMDアーキテクチャ102は、入力データ104に畳込み関数を適用して出力データ110を生成するように構成されてもよい。たとえば、SIMDアーキテクチャ102は、入力データ104におけるデータ要素に「スライディングウィンドウ」関数を適用して出力データ110を生成してもよい。出力データ110の各出力データ要素は、スライディングウィンドウ内の入力データ要素の関数(たとえば、積和)であってもよい。一例として、出力データ110の第1の出力データ要素は、第1の入力データ要素106の積和であってもよい。たとえば、出力データ110の第1の出力データ要素は、データ要素"0"、データ要素"1"、データ要素"2"、およびデータ要素"3"の関数であってもよい。出力データ110の第2の出力データ要素は、データ要素"1"、データ要素"2"、データ要素"3"、およびデータ要素"4"の関数であってもよい。スライディングウィンドウ演算を実行するための技法について以下でより詳細に説明する。
SIMDアーキテクチャ102は、第1のSIMDレーン122と、第2のSIMDレーン124と、第3のSIMDレーン126と、第4のSIMDレーン128とを含んでもよい。図1には4つのSIMDレーンが示されるが、代替実装形態では、SIMDアーキテクチャ102にさらなる(またはより少ない)SIMDレーンが含まれてもよい。後述のように、各SIMDレーン122〜128は、対応するSIMDレーン122〜128内の入力データ要素に対してスライディングウィンドウ演算を実行するように構成されてもよい。
システムは、第1のレジスタ130と第2のレジスタ140とを含んでもよい。各レジスタ130、140は、入力データ104の入力データ要素を記憶してもよい。第1のレジスタ130は、第1のレーン132と、第2のレーン134と、第3のレーン136と、第4のレーン138とを含んでもよい。図示の実装形態では、第1のレジスタ130の各レーン132〜138は幅が4であってもよい。たとえば、第1のレジスタ130の各レーン132〜138は、4つのデータ要素を記憶するように割り振られてもよい。たとえば、第1のレジスタ130の各レーン132〜138は、入力データ104の4つの入力データ要素を記憶するように動作可能であってもよい。第1のレジスタ130の第1のレーン132は、入力データ104の第1の入力データ要素106(たとえば、データ要素"0"〜データ要素"3")を記憶してもよく、第1のレジスタ130の第2のレーン134は、入力データ104の第2の入力データ要素108(たとえば、データ要素"4"〜データ要素"7")を記憶してもよく、第1のレジスタ130の第3のレーン136は、入力データ104の第3の入力データ要素(たとえば、データ要素"8"〜データ要素"11")を記憶してもよく、第1のレジスタ130の第4のレーン138は、入力データ104の第4の入力データ要素(たとえば、データ要素"12"〜データ要素"15")を記憶してもよい。
さらに、第1のレジスタ130の各レーン132〜138の幅は、対応するSIMDレーン122〜128のレーン幅に等しくてもよい。たとえば、第1のSIMDレーン122のレーン幅は、第1のレジスタ130の第1のレーン132の幅に等しく、第2のSIMDレーン124のレーン幅は、第1のレジスタ130の第2のレーン134の幅に等しく、第3のSIMDレーン126のレーン幅は、第1のレジスタ130の第3のレーン136の幅に等しく、第4のSIMDレーン128のレーン幅は、第1のレジスタ130の第4のレーン138の幅に等しい。
第2のレジスタ140は、第1のレーン142と、第2のレーン144と、第3のレーン146と、第4のレーン148とを含んでもよい。図示の実装形態では、第2のレジスタ140の各レーン142〜148も幅が4であってもよい。たとえば、第2のレジスタ140の各レーン142〜148は、入力データ104の4つの入力データ要素を記憶するように動作可能であってもよい。第1のレジスタ130のレーン132〜138内に記憶された入力データ要素に関して、第2のレジスタ140の対応するレーン142〜148内に記憶された入力データ要素は、レーン幅分シフトされてもよい(たとえば、4だけシフトされてもよい)。たとえば、第2のレジスタ140の第1のレーン142は、入力データ104の第2の入力データ要素108(たとえば、データ要素"4"〜データ要素"7")を記憶してもよく、第2のレジスタ140の第2のレーン144は、入力データ104の第3の入力データ要素(たとえば、データ要素"8"〜データ要素"11")を記憶してもよく、第2のレジスタ140の第3のレーン146は、入力データ104の第4の入力データ要素(たとえば、データ要素"12"〜データ要素"15")を記憶してもよく、第2のレジスタ140の第4のレーン148は、入力データ104の第5の入力データ要素(たとえば、データ要素"16"〜データ要素"19")を記憶してもよい。
各データ要素は、対応するレジスタの特定の位置に記憶されてもよい。本明細書で使用するレジスタの「位置」は、開始アドレスに対するレジスタ内の相対アドレス(またはロケーション)に対応する。たとえば、第1の位置に記憶されるデータ要素は、レジスタの開始ロケーションに記憶されてもよく、最後の位置に記憶されるデータ要素は、レジスタの終了ロケーションに記憶されてもよい。一例として、レジスタ130、140に関して、データ要素"0"は第1のレジスタ130の第1の位置に記憶されてもよく、データ要素"4"は第2のレジスタ140の第1の位置に記憶されてもよい。データ要素"1"およびデータ要素"5"はそれぞれ、第1のレジスタ130の第2の位置および第2のレジスタ140の第2の位置に記憶されてもよい。データ要素"2"およびデータ要素"6"はそれぞれ、第1のレジスタ130の第3の位置および第2のレジスタ140の第3の位置に記憶されてもよい。データ要素"3"およびデータ要素"7"はそれぞれ、第1のレジスタ130の第4の位置および第2のレジスタ140の第4の位置に記憶されてもよい。
第1のSIMDレーン122は、第1のレジスタ130および第2のレジスタ140を参照して、レーンサイズと同等のデータに対してスライディングウィンドウ演算を実行してもよい。図2に関してより詳細に説明するように、第1のSIMDレーン122内の回路は、スライディングウィンドウ演算を実行するためにレジスタ130、140内のデータを多重化してもよい。第1のSIMDレーン122は、それぞれ第1のレジスタ130、第2のレジスタ140の第1のレーン132、142を参照して5つまでのスライディングウィンドウ演算を実行してもよい。一例として、第1のSIMDレーン122は、第1のレジスタ130内の最初の4つのデータ要素(たとえば、データ要素"0"、データ要素"1"、データ要素"2"、およびデータ要素"3")を使用して第1のスライディングウィンドウ演算を実行してもよい。第1のスライディングウィンドウ演算を実行した後、第1のSIMDレーン122は、第1のレジスタ130の第1のレーン132内のデータ要素"1"〜データ要素"3"を使用し、かつ第2のレジスタ140の第1のレーン142内のデータ要素"4"を使用して第2のスライディングウィンドウ演算を実行してもよい。
第1のSIMDレーン122は、第1のレジスタ130の第1のレーン132のデータ要素"2"およびデータ要素"3"を使用し、かつ第2のレジスタ140の第1のレーン142のデータ要素"4"およびデータ要素"5"を使用して第3のスライディングウィンドウ演算を実行するように構成されてもよい。第3のスライディングウィンドウ演算を実行した後、第1のSIMDレーン122は、第1のレジスタ130の第1のレーン132のデータ要素"3"を使用し、かつ第2のレジスタ140の第1のレーン142のデータ要素"4"〜データ要素"6"を使用して第4のスライディングウィンドウ演算を実行してもよい。第1のSIMDレーン122は、第2のレジスタ140内の最初の4つのデータ要素(たとえば、データ要素"4"〜データ要素"7")を使用して第5のスライディングウィンドウ演算を実行するようにさらに構成されてもよい。
したがって、第1のSIMDレーン122は、2つのレジスタ130、140を使用して5つのスライディングウィンドウ演算を実行してもよい。第1のレジスタ130の第1のレーン132内のデータ要素および第2のレジスタ140の第1のレーン142内のデータ要素は、入力データ104における単一のシフト(たとえば、4要素シフト)によって「オフセット」されてもよい。したがって、第1のSIMDレーン122は、2つのレジスタ130、140を使用して8つのデータ要素に「アクセス」可能であってもよい。したがって、単一のSIMDレーンが4つのレジスタおよび4つのシフト(たとえば、4つの単一要素シフト)を使用する必要がある場合がある従来のSIMDアーキテクチャと比較して、2つのレジスタ130、140を使用して5つのスライディングウィンドウ演算を実行してもよい。図1に示すように、第2のレジスタ140内のデータは1ではなく4だけシフトされるので、5つまでの出力を算出するのに必要なデータ要素のすべてに対して、第1のSIMDレーン122が2つのレジスタ130、140を使用してアクセス可能である。したがって、他のスライディングウィンドウ演算およびSIMDアーキテクチャと比較してより少ない数のレジスタおよびシフトが利用されてもよい。
第2のSIMDレーン124、第3のSIMDレーン126、および第4のSIMDレーン128の各々が、2つのレジスタ130、140を使用して5つまでのスライディングウィンドウ演算を実行してもよいことが了解されよう。SIMDレーン124〜128は、それぞれレジスタ130、140の対応するレーン134〜138、144〜148に対して、第1のSIMDレーン122がレジスタ130、140の第1のレーン132、142に対して動作するのと実質的に同様に動作してもよい。たとえば、第2のSIMDレーン124は、第1のレジスタ130の第2のレーン134内の第2の入力データ要素108を使用し、かつ第2のレジスタ140の第2のレーン144内の第3の入力データ要素を使用して5つまでのスライディングウィンドウ演算を実行してもよい。第3のSIMDレーン126は、第1のレジスタ130の第3のレーン136内の第3の入力データ要素を使用し、かつ第2のレジスタ140の第3のレーン146内の第4の入力データ要素を使用して5つまでのスライディングウィンドウ演算を実行してもよい。さらに、第4のSIMDレーン128は、第1のレジスタ130の第4のレーン138内の第4の入力データ要素を使用し、かつ第2のレジスタ140の第4のレーン148内の第5の入力データ要素を使用して5つまでのスライディングウィンドウ演算を実行してもよい。追加のSIMDレーン(図示せず)が図示のSIMDレーン122〜128と実質的に同様に動作して残りの入力データ104に対してスライディングウィンドウ演算を実行してもよい。
図2を参照すると、第1のSIMDレーン122内の回路が示される。第1のSIMDレーン122は、第1のマルチプレクサ202と、第2のマルチプレクサ204と、第3のマルチプレクサ206と、第4のマルチプレクサ208と、算術および論理ユニット(ALU)210とを含む。特定の実装形態では、ALU210は、積和回路を含んでもよい。第1のSIMDレーン122内の回路は、説明のためのものであり、限定のためのものではない。たとえば、さらなる(またはより少ない)回路構成要素が第1のSIMDレーン122に含まれてもよい。第1のSIMDレーン122内の回路が図2に示されるが、図1のシステムの他のSIMDレーン124〜128は同様の回路構成要素を含んでもよい。
第1のマルチプレクサ202の第1の入力が、第1のレジスタ130の第1のレーン132内に記憶されたデータ要素"0"に結合されてもよく、第1のマルチプレクサ202の第2の入力が、第2のレジスタ140の第1のレーン142内に記憶されたデータ要素"4"に結合されてもよい。第1のマルチプレクサ202は、第1のマルチプレクサ202に供給される選択信号(図示せず)に基づいて、データ要素"0"またはデータ要素"4"をALU210に供給してもよい。特定の態様では、命令の命令コードにおける即値フィールドが、マルチプレクサ202がALU210にデータ要素"0"(たとえば、第1のレーン132内の第1のウィンドウにおけるデータ要素)を供給するかそれともデータ要素"4"(たとえば、第1のレーン142内の第1のウィンドウにおけるデータ要素)を供給するかを決定してもよい。
第2のマルチプレクサ204の第1の入力が、第1のレジスタ130の第1のレーン132内に記憶されたデータ要素"1"に結合されてもよく、第2のマルチプレクサ204の第2の入力が、第2のレジスタ140の第1のレーン142内に記憶されたデータ要素"5"に結合されてもよい。第2のマルチプレクサ204は、第2のマルチプレクサ204に供給される選択信号(図示せず)に基づいて、データ要素"1"またはデータ要素"5"をALU210に供給してもよい。特定の態様では、命令の命令コードにおける即値フィールドが、マルチプレクサ204がALU210にデータ要素"1"(たとえば、第1のレーン132内の第2のウィンドウにおけるデータ要素)を供給するかそれともデータ要素"5"(たとえば、第1のレーン142内の第2のウィンドウにおけるデータ要素)を供給するかを決定してもよい。
第3のマルチプレクサ206の第1の入力が、第1のレジスタ130の第1のレーン132内に記憶されたデータ要素"2"に結合されてもよく、第3のマルチプレクサ206の第2の入力が、第2のレジスタ140の第1のレーン142内に記憶されたデータ要素"6"に結合されてもよい。第3のマルチプレクサ206は、第3のマルチプレクサ206に供給される選択信号(図示せず)に基づいて、データ要素"2"またはデータ要素"6"をALU210に供給してもよい。特定の態様では、命令の命令コードにおける即値フィールドが、マルチプレクサ206がALU210にデータ要素"2"(たとえば、第1のレーン132内の第3のウィンドウにおけるデータ要素)を供給するかそれともデータ要素"6"(たとえば、第1のレーン142内の第3のウィンドウにおけるデータ要素)を供給するかを決定してもよい。
さらに、第4のマルチプレクサ208の第1の入力が、第1のレジスタ130の第1のレーン132内に記憶されたデータ要素"3"に結合されてもよく、第4のマルチプレクサ208の第2の入力が、第2のレジスタ140の第1のレーン142内に記憶されたデータ要素"7"に結合されてもよい。第4のマルチプレクサ208は、第4のマルチプレクサ208に供給される選択信号(図示せず)に基づいて、データ要素"3"またはデータ要素"7"をALU210に供給してもよい。特定の態様では、命令の命令コードにおける即値フィールドが、マルチプレクサ208がALU210にデータ要素"3"(たとえば、第1のレーン132内の第4のウィンドウにおけるデータ要素)を供給するかそれともデータ要素"7"(たとえば、第1のレーン142内の第4のウィンドウにおけるデータ要素)を供給するかを決定してもよい。したがって、第1のSIMDレーン122は、命令に基づいて、第1のレジスタ130の第1のレーン132内の複数のウィンドウ、第2のレジスタ140の第1のレーン142内の複数のウィンドウ、またはそれらの任意の組合せに対して同時にスライディングウィンドウ演算を実行してもよい。
動作時には、第1のSIMDレーン122は、レジスタ130、140の第1のレーン132、142内のデータに基づいて5つまでのスライディングウィンドウ演算を実行してもよい。以下の例は、第3のスライディングウィンドウ演算(たとえば、データ要素"2"、データ要素"3"、データ要素"4"、およびデータ要素"5"を使用する積和演算)に対応するが、同様の技法を適用して第1のスライディングウィンドウ演算、第2のスライディングウィンドウ演算、第4のスライディングウィンドウ演算、および第5のスライディングウィンドウ演算を実行してもよい。
第3のスライディングウィンドウ演算を実行する場合、第1のマルチプレクサ202は、第1のマルチプレクサ202に供給される選択信号に基づいてALU210にデータ要素"4"を供給してもよく、第2のマルチプレクサ204は、第2のマルチプレクサ204に供給される選択信号に基づいてALU210にデータ要素"5"を供給してもよい。さらに、第3のマルチプレクサ206は、第3のマルチプレクサ206に供給される選択信号に基づいてALU210にデータ要素"2"を供給してもよく、第4のマルチプレクサ208は、第4のマルチプレクサ208に供給される選択信号に基づいてALU210にデータ要素"3"を供給してもよい。
ALU210は、データ要素"2"、データ要素"3"、データ要素"4"、およびデータ要素"5"の積和に基づいて出力データ110を生成するように構成されてもよい。たとえば、ALU210は、マルチプレクサ202〜208によって供給されたデータ要素に対して垂直演算(たとえば、乗算演算)を実行してもよい。乗算演算の非限定的な例として、ALU210は、データ要素"2"にデータ要素"3"を乗算して第1の積を生成し、データ要素"3"にデータ要素"4"を乗算して第2の積を生成し、データ要素"4"にデータ要素"5"を乗算して第3の積を生成し、データ要素"5"にデータ要素"2"を乗算して第4の積を生成してもよい。垂直演算の後で、ALU210は、垂直演算の結果である積に対して水平演算を実行してもよい。水平演算の非限定的な例には、加算演算、ビット単位OR演算、または乗算演算を含めてもよい。加算演算の非限定的な例として、ALU210は、第1の積、第2の積、第3の積、および第4の積を加算してもよい。したがって、水平演算は垂直演算の後で実行されてもよい。上記の例では、水平演算および垂直演算は積和に対応する。
図2はALU210を積和回路として示しているが、代替実装形態では、ALUは、スライディングウィンドウ演算を実行するために第1のSIMDレーン122とともに実装されてもよい。非限定的な例として、和積演算、論理AND演算、論理OR演算、論理NAND演算、または論理NOR演算を実行するALUが、第1のSIMDレーン122とともに実装されてもよい。
したがって、第1のSIMDレーン122内の回路は、単一のSIMDレーンが4つのレジスタおよび4つのシフト(たとえば、4つの単一要素シフト)を使用することを必要とする場合があるSIMDアーキテクチャと比較して、2つのレジスタ130、140および単一のシフト(たとえば、レジスタ130、140間の4要素シフト)を使用して5つまでのスライディングウィンドウ演算を実行してもよい。図2に示すように、第2のレジスタ140内のデータは1ではなく4だけシフトされるので、5つまでの出力を算出するのに必要なデータ要素のすべてに対して、第1のSIMDレーン122が2つのレジスタ130、140を使用してアクセス可能である。したがって、他のスライディングウィンドウ演算およびSIMDアーキテクチャと比較してより少ない数のレジスタおよびシフトが利用されてもよい。
図3を参照すると、入力データ104を第1のレジスタ130内にロードし、入力データ104のシフトされたバージョンを第2のレジスタ140内にロードするように動作可能なシステム300が示される。システム300は、プロセッサ301と、メモリ302と、第1のレジスタ130と、第2のレジスタ140とを含む。プロセッサ301は、論理シフタ回路304を含む。
プロセッサ301は、ロード命令を受信した後、メモリ302内のメモリロケーションから入力データ104を取り出してもよく、第1のレジスタ130内に入力データ104をロードしてもよい。プロセッサ301は、図1に示すアライメントに従って第1のレジスタ130内に入力データ104をロードしてもよい。たとえば、第1のレジスタ130の第1のレーン132内にデータ要素"0"〜データ要素"3"がロードされてもよく、第1のレジスタ130の第2のレーン134内にデータ要素"4"〜データ要素"7"がロードされてもよく、他のデータ要素についても同様である。
プロセッサ301は、ロード命令を受信したときに、メモリ302内のメモリロケーションから入力データ104を取り出して、論理シフタ回路304に入力データ104を供給してもよい。論理シフタ回路304は、SIMDレーン122〜128のレーン幅分入力データ104をシフトさせるように構成されてもよい。たとえば、論理シフタ回路304は、入力データ104を4だけシフトさせてシフトされた入力データ314を生成してもよい。プロセッサ301は、図1に示すアライメントに従って、シフトされた入力データ314を第2のレジスタ140内にロードしてもよい。たとえば、第2のレジスタ140の第1のレーン142内にデータ要素"4"〜データ要素"7"がロードされてもよく、第2のレジスタ140の第2のレーン144内にデータ要素"8"〜データ要素"11"がロードされてもよく、他のデータ要素についても同様である。
論理シフタ回路304は、プロセッサ301に含まれるように示されるが、他の実装形態では、論理シフタ回路304はプロセッサ301の外部に位置してもよい。特定の実装形態では、プロセッサ301は、デバイス(たとえばモバイルフォン)の中央処理ユニット(CPU)であってもよい。代替実装形態では、プロセッサ301は、CPUの外部に位置してもよい(たとえば、プロセッサ301は特定用途向け集積回路であってもよい)。
図3のシステム300は、ロード演算の間にシフトを行って図1に示すようにレジスタ130、140内のデータ要素を整列させてもよい。たとえば、論理シフタ回路304は、第2のレジスタ140の第1のレーン142が(データ要素"0"〜データ要素"3"ではなく)データ要素"4"〜データ要素"7"を記憶するように入力データ104をシフトさせてもよい。このシフトは、第1のSIMDレーン122が、図1および図2に関して説明したように2つのレジスタ130、140を使用して5つまでのスライディングウィンドウ演算を実行するのを可能にしてもよい。
図4を参照すると、スライディングウィンドウ演算を実行するための方法400のフローチャートが示される。方法400は、図1〜図3の第1のレジスタ130、図1〜図3の第2のレジスタ140、図2の出力レジスタ212、図3のメモリ302、またはそれらの任意の組合せを使用して、図1のSIMDアーキテクチャ102(たとえば、SIMDレーン122〜128)および/または図3のプロセッサ301によって実行されてもよい。
方法400は、402において第1のレジスタのレーン内に第1の入力データ要素を記憶することを含む。たとえば、図1〜図3を参照すると、プロセッサ301は、第1のレジスタ130の第1のレーン132内に入力データ104の第1の入力データ要素106(たとえば、データ要素"0"〜データ要素"3")を記憶してもよい。一例として、プロセッサ301は、ロード命令を受信したことに応答して第1のレジスタ130の第1のレーン132内に第1の入力データ要素106をロードしてもよい。さらに、プロセッサ301は、第1のレジスタ130の第2のレーン124内に入力データ104の第2の入力データ要素108(たとえば、データ要素"4"〜データ要素"7")を記憶してもよい。一例として、プロセッサ301は、ロード命令を受信したことに応答して第1のレジスタ130の第2のレーン134内に第2の入力データ要素108をロードしてもよい。
404において、第2の入力データ要素が第2のレジスタのレーン内に記憶されてもよい。たとえば、図1〜図3を参照するとわかるように、プロセッサ301は、第2のレジスタ140の第1のレーン142内に入力データの第2の入力データ要素108を記憶してもよい。一例として、プロセッサ301は、ロード命令を受信したときに、メモリ302内のメモリロケーションから入力データ104を取り出して、論理シフタ回路304に入力データ104を供給してもよい。論理シフタ回路304は、SIMDレーン122〜128のレーン幅分入力データ104をシフトさせてもよい。たとえば、論理シフタ回路304は、入力データ104を4だけシフトさせてシフトされた入力データ314を生成してもよい。プロセッサは、図1に示すアライメントに従って、シフトされた入力データ314を第2のレジスタ140内にロードしてもよい。たとえば、第2のレジスタ140の第1のレーン142内にデータ要素"4"〜データ要素"7"がロードされてもよい。第2のレジスタ140の第1のレーン142の幅は、第1のレジスタ130の第1のレーン132の幅に等しくてもよい。
406において、第1のレジスタのレーンの幅に等しいレーン幅を有するSIMDレーンを使用して、第1のレジスタのレーン内の第1の入力データ要素および第2のレジスタのレーン内の第2の入力データ要素に対してスライディングウィンドウ演算が実行されてもよい。本明細書で使用する「スライディングウィンドウ演算」は、データストリーム内の複数の近接するデータ要素(たとえば、第1の入力データ要素および第2の入力データ要素)がデータ入力とみなされ、出力が生成される任意の演算を含んでもよい。上記では積和がスライディングウィンドウ演算として記載されているが、積和が一例にすぎないことを理解されたい。スライディングウィンドウ演算の他の例には、和積、加算演算、乗算演算などを含めてもよい。スライディングウィンドウ演算を実行するステップは、第1のレジスタの第1の位置に記憶された第1の入力データ要素および第1の位置とは異なる第2のレジスタの第2の位置に記憶された第2の入力データ要素に基づいて結果を決定するステップを含む。非限定的な例として、図1および図2を参照するとわかるように、1つのスライディングウィンドウ演算の結果がデータ要素"1〜4"に基づいてもよい。データ要素"1"は、第1のレジスタ130の1つの位置(たとえば、第2の位置)に位置してもよく、データ要素"4"は、データ要素"1"の位置とは異なる第2のレジスタ140の別の位置(たとえば、第1の位置)に位置してもよい。上記で説明したように、第1のSIMDレーン122は、第1のレジスタ130の第1のレーン132内に記憶された第1の入力データ要素106を使用し、かつ第2のレジスタ140の第1のレーン142内に記憶された第2の入力データ要素108を使用して5つまでのスライディングウィンドウ演算(たとえば、5つのスライディングウィンドウ演算)を実行してもよい。したがって、第1のSIMDレーン122によって実行されるスライディングウィンドウ演算の数(たとえば、5つ)は、第1のSIMDレーン122の幅(たとえば、4)以上であってもよい。
図4の方法400は、第1のSIMDレーン122が、単一のSIMDレーンが4つのレジスタおよび4つのシフト(たとえば、4つの単一要素シフト)を使用することを必要とする場合がある別のSIMDアーキテクチャと比較して、2つのレジスタ130、140および単一のシフト(たとえば、図3に示すような論理シフタ回路304によるレジスタ130、140間の4データ要素シフト)を使用して5つまでのスライディングウィンドウ演算を実行するのを可能にしてもよい。第2のレジスタ140内のデータは1ではなく4だけシフトされるので、5つまでの出力を算出するのに必要なデータ要素のすべてに対して、第1のSIMDレーン122が2つのレジスタ130、140を使用してアクセス可能である。したがって、他のスライディングウィンドウ演算およびSIMDアーキテクチャと比較してより少ない数のレジスタおよびシフトが利用されてもよい。
特定の実装形態では、方法400は、追加のSIMDレーンにおいて同様の演算を実行することを含んでもよい。たとえば、SIMDレーン124〜128は、それぞれレジスタ130、140の対応するレーン134〜138、144〜148に対して、第1のSIMDレーン122がレジスタ130、140の第1のレーン132、142に対して動作するのと実質的に同様に動作してもよい。たとえば、第2のSIMDレーン124は、第1のレジスタ130の第2のレーン134内の第2の入力データ要素108を使用し、かつ第2のレジスタ140の第2のレーン144内の第3の入力データ要素を使用して5つまでのスライディングウィンドウ演算を実行してもよい。第3のSIMDレーン126は、第1のレジスタ130の第3のレーン136内の第3の入力データ要素を使用し、かつ第2のレジスタ140の第3のレーン146内の第4の入力データ要素を使用して5つまでのスライディングウィンドウ演算を実行してもよい。さらに、第4のSIMDレーン128は、第1のレジスタ130の第4のレーン138内の第4の入力データ要素を使用し、かつ第2のレジスタ140の第4のレーン148内の第5の入力データ要素を使用して5つまでのスライディングウィンドウ演算を実行してもよい。追加のSIMDレーン(図示せず)が図示のSIMDレーン122〜128と実質的に同様に動作して残りの入力データ104に対してスライディングウィンドウ演算を実行してもよい。
図5を参照すると、ワイヤレス通信デバイスが示されており、全体として500で示される。デバイス500は、メモリ532に結合される、デジタル信号プロセッサなどのプロセッサ510を含む。
プロセッサ510は、メモリ532内に記憶されたソフトウェア(たとえば、1つまたは複数の命令568からなるプログラム)を実行するように構成されてもよい。プロセッサ510は、図1のSIMDアーキテクチャ102、図1の第1のレジスタ130、および図1の第2のレジスタ140を含んでもよい。たとえば、SIMDアーキテクチャ102は、プロセッサ510の実行ユニット内に位置してもよく、上述のようにレジスタ130、140を参照して畳込み関数を実行してもよい。特定の実装形態では、プロセッサ510は、図4の方法400を実行するように動作可能であってもよい。たとえば、プロセッサ510(たとえば、SIMDアーキテクチャ102)は、第1のレジスタ130の第1のレーン132内に第1の入力データ要素106を記憶してもよく、第2のレジスタ140の第1のレーン142内に第2の入力データ要素108を記憶してもよい。SIMDアーキテクチャ102は、上述のように、それぞれレジスタ130、140の第1のレーン132、142内に記憶されたデータ要素を使用して5つまでのスライディングウィンドウ演算を実行してもよい。
特定の実装形態では、プロセッサ510は、図4の方法400を実行するためにメモリ532に記憶された1つまたは複数の命令568を実行するように構成されてもよい。たとえば、メモリ532は、プロセッサ510によって実行されたときに、プロセッサ510に図4の方法400を実行させる命令568を含む非一時的コンピュータ可読媒体であってもよい。
ワイヤレスインターフェース540が、プロセッサ510およびアンテナ542に結合されてもよい。コーダ/デコーダ(コーデック)534をプロセッサ510に結合することもできる。スピーカ536およびマイクロフォン538をコーデック534に結合することができる。ディスプレイコントローラ526をプロセッサ510およびディスプレイデバイス528に結合することができる。特定の実装形態では、プロセッサ510、ディスプレイコントローラ526、メモリ532、コーデック534、およびワイヤレスインターフェース540が、システムインパッケージまたはシステムオンチップデバイス522内に含まれる。特定の実装形態では、入力デバイス530および電源544がシステムオンチップデバイス522に結合される。さらに、特定の実装形態では、図5に示されるように、ディスプレイデバイス528、入力デバイス530、スピーカ536、マイクロフォン538、アンテナ542、および電源544が、システムオンチップデバイス522の外部にある。しかしながら、ディスプレイデバイス528、入力デバイス530、スピーカ536、マイクロフォン538、アンテナ542、および電源544の各々を、1つもしくは複数のインターフェースまたはコントローラのような、システムオンチップデバイス522の1つまたは複数の構成要素に結合することができる。
図1〜図4に関する畳込み関数は、デバイス500において画像処理を実行するために使用されてもよい。たとえば、畳込み関数は、画像のピクセルをぼかすこと、画像のピクセルを先鋭化すること、画像内のエッジを検出することなどのためにカーネル(たとえば、畳込み行列またはマスク)に適用されてもよい。したがって、デバイス500は、他のSIMDアーキテクチャを使用するデバイスと比較してより少ないレジスタおよびシフトを使用して画像処理を実行してもよい。
上述の実装形態に関連して、本装置は、第1のデータを記憶するための手段を含む。第1のデータを記憶するための手段は、第1の入力データ要素を記憶するレーンを有する。たとえば、第1のデータを記憶するための手段は、図1〜図3および図5の第1のレジスタ130、1つまたは複数の他のデバイス、回路、モジュール、あるいはそれらの任意の組合せを含んでもよい。
装置はさらに、第2のデータを記憶するための手段を含んでもよい。第2のデータを記憶するための手段は、第2の入力データ要素を記憶するレーンを有する。たとえば、第2のデータを記憶するための手段は、図1〜図3および図5の第2のレジスタ140、1つまたは複数の他のデバイス、回路、モジュール、あるいはそれらの任意の組合せを含んでもよい。第2のデータを記憶するための手段の第1のレーンの幅は、第1のデータを記憶するための手段の第1のレーンの幅に等しい。たとえば、第1のレジスタ130の第1のレーン132の幅(たとえば、4)は、第2のレジスタ140の第1のレーン142の幅(たとえば、4)に等しくてもよい。
本装置は、第1のデータを記憶するための手段のレーン内の第1の入力データ要素および第2のデータを記憶するための手段のレーン内の第2の入力データ要素に対してスライディングウィンドウ演算を実行するための手段をさらに含んでもよい。たとえば、スライディングウィンドウ演算を実行するための手段は、図1および図5のSIMDアーキテクチャ102、図2のマルチプレクサ202〜208、図3のプロセッサ301、図5のプロセッサ510によって実行可能な命令568、1つまたは複数の他のデバイス、回路、モジュール、あるいはそれらの任意の組合せを含んでもよい。スライディングウィンドウ演算を実行するための手段は、第1のデータを記憶するための手段のレーンの幅に等しいレーン幅を有する。スライディングウィンドウ演算を実行することは、第1のデータを記憶するための手段の第1の位置に記憶された第1の入力データ要素および第2のデータを記憶するための手段の第2の位置に記憶された第2の入力データ要素に基づいて結果を決定することを含む。第2の位置は第1の位置とは異なる。
当業者には、本明細書で開示する実装形態に関して説明する様々な例示的な論理ブロック、構成、モジュール、回路、およびアルゴリズムステップが電子ハードウェア、コンピュータソフトウェア、または両方の組合せとして実装されてもよいことがさらに了解されよう。上記では、様々な例示的な構成要素、ブロック、構成、モジュール、回路、およびステップについて、それらの機能の観点から概括的に説明した。そのような機能がハードウェアとして実装されるか、またはソフトウェアとして実装されるかは、特定の適用例およびシステム全体に課される設計制約に依存する。当業者は、記載された機能を特定の適用例ごとに様々な方法で実装してもよいが、そのような実装の決定は、本開示の範囲からの逸脱を引き起こすものと解釈されるべきではない。
本明細書において開示される実装形態に関して説明した方法またはアルゴリズムのステップは、直接ハードウェアにおいて、プロセッサによって実行されるソフトウェアモジュールにおいて、またはその2つの組合せにおいて具現化されてもよい。ソフトウェアモジュールは、ランダムアクセスメモリ(RAM)、フラッシュメモリ、読取り専用メモリ(ROM)、プログラマブル読取り専用メモリ(PROM)、消去可能プログラマブル読取り専用メモリ(EPROM)、電気的消去可能プログラマブル読取り専用メモリ(EEPROM)、レジスタ、ハードディスク、リムーバブルディスク、コンパクトディスク読取り専用メモリ(CD-ROM)、または当技術分野で知られている任意の他の形態の記憶媒体の中に存在してもよい。例示的な非一時的(たとえば、有形)記憶媒体は、プロセッサが記憶媒体から情報を読み取り、記憶媒体に情報を書き込むことができるように、プロセッサに結合される。代替形態では、記憶媒体は、プロセッサと一体に構成される場合がある。プロセッサおよび記憶媒体は特定用途向け集積回路(ASIC)内に存在してもよい。ASICは、コンピューティングデバイスまたはユーザ端末に存在してもよい。代替として、プロセッサおよび記憶媒体は、コンピューティングデバイスまたはユーザ端末中に個別の構成要素として存在してもよい。
開示された実装形態の上記の説明は、開示された実装形態を当業者が作製または使用できるようにするために提供される。これらの実装形態に対する様々な変更は、当業者には容易に明らかであり、本明細書において規定された原理は、本開示の範囲から逸脱することなく、他の実装形態に適用される場合がある。したがって、本開示は、本明細書に示される実装形態に限定するものではなく、以下の特許請求の範囲によって規定される原理および新規の特徴と一致する、考えられる最も広い範囲を与えられるべきである。
102 SIMDアーキテクチャ
104 入力データ
106 第1の入力データ要素
108 第2の入力データ要素
110 出力データ
122 第1のSIMDレーン
124 第2のSIMDレーン
126 第3のSIMDレーン
128 第4のSIMDレーン
130 第1のレジスタ
132 第1のレーン
134 第2のレーン
136 第3のレーン
138 第4のレーン
140 第2のレジスタ
142 第1のレーン
144 第2のレーン
146 第3のレーン
148 第4のレーン
202 第1のマルチプレクサ
204 第2のマルチプレクサ
206 第3のマルチプレクサ
208 第4のマルチプレクサ
210 算術および論理ユニット(ALU)
212 出力レジスタ
300 システム
301 プロセッサ
302 メモリ
304 論理シフタ回路
314 シフトされた入力データ
500 ワイヤレス通信デバイス
510 プロセッサ
522 システムオンチップデバイス
526 ディスプレイコントローラ
528 ディスプレイデバイス
530 入力デバイス
532 メモリ
534 コーダ/デコーダ(コーデック)
536 スピーカ
538 マイクロフォン
540 ワイヤレスインターフェース
542 アンテナ
544 電源
568 命令

Claims (30)

  1. 第1の入力データ要素を記憶するレーンを有する第1のレジスタと、
    第2の入力データ要素を記憶するレーンを有する第2のレジスタであって、前記第2のレジスタの前記レーンの幅が前記第1のレジスタの前記レーンの幅に等しい、第2のレジスタと、
    前記第1のレジスタの前記レーンの前記幅に等しいレーン幅を有するシングルインストラクションマルチプルデータ(SIMD)レーンであって、前記SIMDレーンが、前記第1のレジスタの前記レーン内の前記第1の入力データ要素および前記第2のレジスタの前記レーン内の前記第2の入力データ要素に対してスライディングウィンドウ演算を実行するように構成され、前記スライディングウィンドウ演算を実行することが、前記第1のレジスタの第1の位置に記憶された第1の入力データ要素および前記第2のレジスタの第2の位置に記憶された第2の入力データ要素に基づいて結果を決定することを含み、前記第2の位置が前記第1の位置とは異なる、SIMDレーンと
    を備える、装置。
  2. 前記SIMDレーンは、命令に基づいて、前記第1のレジスタの前記レーン内の複数のウィンドウ、前記第2のレジスタの前記レーン内の複数のウィンドウ、またはそれらの任意の組合せに対して同時にスライディングウィンドウ演算を実行する、請求項1に記載の装置。
  3. 前記第1のレジスタの前記レーン内の前記複数のウィンドウおよび前記第2のレジスタの前記レーン内の前記複数のウィンドウは、前記命令の命令コードにおける即値フィールドに基づいて選択される、請求項2に記載の装置。
  4. 前記SIMDレーンは、
    算術および論理ユニット(ALU)と、
    前記第1のレジスタの前記レーン内の第1の入力データ要素または前記第2のレジスタの前記レーン内の第1の入力データ要素のうちの一方を前記ALUに供給するように構成される、第1のマルチプレクサと、
    前記第1のレジスタの前記レーン内の第2の入力データ要素または前記第2のレジスタの前記レーン内の第2の入力データ要素のうちの一方を前記ALUに供給するように構成される、第2のマルチプレクサと
    を備え、
    前記ALUは、前記第1のマルチプレクサによって供給されたデータ要素および前記第2のマルチプレクサによって供給されたデータ要素に対して水平演算を実行するように動作可能である、
    請求項1に記載の装置。
  5. 前記水平演算は、加算演算、ビット単位OR演算、または乗算演算を含む、請求項4に記載の装置。
  6. 前記ALUは、前記第1のマルチプレクサによって供給された前記データ要素および前記第2のマルチプレクサによって供給された前記データ要素に対して垂直演算を実行するように動作可能であり、前記水平演算は、前記垂直演算の後に実行される、請求項4に記載の装置。
  7. 前記垂直演算は乗算演算を含む、請求項6に記載の装置。
  8. 前記SIMDレーンと第2のSIMDレーンとを含む複数のレーンであって、前記第2のSIMDレーンが、前記第1のレジスタの第2のレーン内に記憶された入力データ要素および前記第2のレジスタの第2のレーン内に記憶された入力データ要素に対してスライディングウィンドウ演算を実行するように構成される、複数のレーンをさらに備える、請求項1に記載の装置。
  9. 前記SIMDレーンによって実行される前記スライディングウィンドウ演算と前記第2のSIMDレーンによって実行される前記スライディングウィンドウ演算は並行して実行される、請求項8に記載の装置。
  10. 入力データをシフトさせ、シフトされたデータを前記第2のレジスタに供給するように構成される論理シフタ回路をさらに備える、請求項1に記載の装置。
  11. 第1のレジスタのレーン内に第1の入力データ要素を記憶するステップと、
    第2のレジスタのレーン内に第2の入力データ要素を記憶するステップであって、前記第2のレジスタの前記レーンの幅が、前記第1のレジスタの前記レーンの幅に等しい、ステップと、
    前記第1のレジスタの前記レーンの前記幅に等しいレーン幅を有するシングルインストラクションマルチプルデータ(SIMD)レーンを使用して、前記第1のレジスタの前記レーン内の前記第1の入力データ要素および前記第2のレジスタの前記レーン内の前記第2の入力データ要素に対してスライディングウィンドウ演算を実行するステップであって、前記第1のレジスタの第1の位置に記憶された第1の入力データ要素および前記第2のレジスタの第2の位置に記憶された第2の入力データ要素に基づいて結果を決定するステップを含み、前記第2の位置が前記第1の位置とは異なる、ステップと
    を含む、方法。
  12. 前記第1の入力データ要素は、第1のデータ要素から始まって第Nのデータ要素で終わるN個のデータ要素を含み、前記第2の入力データ要素は、第(N+1)のデータ要素から始まって第2*Nのデータ要素で終わるN個のデータ要素を含み、Nが前記SIMDレーンの前記レーン幅に対応する、請求項11に記載の方法。
  13. 前記SIMDレーンは、命令に基づいて、前記第1のレジスタの前記レーン内の複数のウィンドウ、前記第2のレジスタの前記レーン内の複数のウィンドウ、またはそれらの任意の組合せに対して同時にスライディングウィンドウ演算を実行する、請求項11に記載の方法。
  14. 前記第1のレジスタの前記レーン内の前記複数のウィンドウおよび前記第2のレジスタの前記レーン内の前記複数のウィンドウは、前記命令の命令コードにおける即値フィールドに基づいて選択される、請求項13に記載の方法。
  15. 第1のマルチプレクサにおいて、前記第1のレジスタの前記レーン内の第1のデータ要素または前記第2のレジスタの前記レーン内の第1の入力データ要素のうちの一方を算術および論理ユニット(ALU)に供給するステップと、
    第2のマルチプレクサにおいて、前記第1のレジスタの前記レーン内の第2のデータ要素または前記第2のレジスタの前記レーン内の第2の入力データ要素のうちの一方を前記ALUに供給するステップと
    をさらに含む、請求項11に記載の方法。
  16. 前記ALUにおいて、前記第1のマルチプレクサによって供給されたデータ要素および前記第2のマルチプレクサによって供給されたデータ要素に対して水平演算を実行するステップをさらに含む、請求項15に記載の方法。
  17. 前記水平演算は、加算演算、ビット単位OR演算、または乗算演算を含む、請求項16に記載の方法。
  18. 前記第1のマルチプレクサによって供給された前記データ要素および前記第2のマルチプレクサによって供給された前記データ要素に対して垂直演算を実行するステップであって、前記水平演算は、前記垂直演算の後に実行される、ステップをさらに含む、請求項16に記載の方法。
  19. 前記垂直演算は乗算演算を含む、請求項18に記載の方法。
  20. 複数のSIMDレーンのうちの第2のSIMDレーンを使用して前記第1のレジスタの第2のレーン内に記憶された第2の入力データ要素および前記第2のレジスタの第2のレーン内に記憶された第3の入力データ要素に対してスライディングウィンドウ演算を実行するステップであって、前記SIMDレーンが前記複数のSIMDレーンに含まれる、ステップをさらに含む、請求項11に記載の方法。
  21. 前記SIMDレーンによって実行される前記スライディングウィンドウ演算と前記第2のSIMDレーンによって実行される前記スライディングウィンドウ演算は並行して実行される、請求項20に記載の方法。
  22. 入力データをシフトさせるステップと、
    シフトされた入力データを前記第2のレジスタに供給するステップと
    をさらに含む、請求項11に記載の方法。
  23. 第1のデータを記憶するための手段であって、第1の入力データ要素を記憶するレーンを有する、手段と、
    第2のデータを記憶するための手段であって、第2の入力データ要素を記憶するレーンを有し、前記第2のデータを記憶するための手段の前記レーンの幅が、前記第1のデータを記憶するための手段の前記レーンの幅に等しい、手段と、
    前記第1のデータを記憶するための手段の前記レーン内の前記第1の入力データ要素および前記第2のデータを記憶するための手段の前記レーン内の前記第2の入力データ要素に対してスライディングウィンドウ演算を実行するための手段であって、前記第1のデータを記憶するための手段の前記レーンの前記幅に等しいレーン幅を有し、前記第1のデータを記憶するための手段の第1の位置に記憶された第1の入力データ要素および前記第2のデータを記憶するための手段の第2の位置に記憶された第2の入力データ要素に基づいて結果を決定するための手段を含み、前記第2の位置が前記第1の位置とは異なる、手段と
    を備える、装置。
  24. 前記第1の入力データ要素は、第1のデータ要素から始まって第Nのデータ要素で終わるN個のデータ要素を含み、前記第2の入力データ要素は、第(N+1)のデータ要素から始まって第2*Nのデータ要素で終わるN個のデータ要素を含み、Nが前記スライディングウィンドウ演算を前記実行するための手段の前記レーン幅に対応する、請求項23に記載の装置。
  25. 前記スライディングウィンドウ演算を前記実行するための手段は、命令に基づいて、前記第1のデータを記憶するための手段の前記レーン内の複数のウィンドウ、前記第2のデータを記憶するための手段の前記レーン内の複数のウィンドウ、またはそれらの任意の組合せに対して同時にスライディングウィンドウ演算を実行する、請求項23に記載の装置。
  26. 前記第1のデータを記憶するための手段の前記レーン内の前記複数のウィンドウおよび前記第2のデータを記憶するための手段の前記レーン内の前記複数のウィンドウは、前記命令の命令コードにおける即値フィールドに基づいて選択される、請求項25に記載の装置。
  27. 前記第1のデータを記憶するための手段の前記レーン内のデータ要素を算術および論理ユニット(ALU)に供給するための手段と、
    前記第2のデータを記憶するための手段の前記レーン内のデータ要素を前記ALUに供給するための手段と
    をさらに備える、請求項23に記載の装置。
  28. 前記第1のデータを記憶するための手段の第2のレーン内に記憶された第2の入力データ要素および前記第2のデータを記憶するための手段の第2のレーン内に記憶された第3の入力データ要素に対して第2のスライディングウィンドウ演算を実行するための手段をさらに備える、請求項23に記載の装置。
  29. 命令を含む非一時的コンピュータ可読記録媒体であって、前記命令は、プロセッサによって実行されたときに、前記プロセッサに、
    第1のレジスタのレーン内に第1の入力データ要素を記憶することと、
    第2のレジスタのレーン内に第2の入力データ要素を記憶することであって、前記第2のレジスタの前記レーンの幅が、前記第1のレジスタの前記レーンの幅に等しい、記憶することと、
    前記第1のレジスタの前記レーンの前記幅に等しいレーン幅を有するシングルインストラクションマルチプルデータ(SIMD)レーンを使用して、前記第1のレジスタの前記レーン内の前記第1の入力データ要素および前記第2のレジスタの前記レーン内の前記第2の入力データ要素に対してスライディングウィンドウ演算を実行することであって、前記第1のレジスタの第1の位置に記憶された第1の入力データ要素および前記第2のレジスタの第2の位置に記憶された第2の入力データ要素に基づいて結果を決定することを含み、前記第2の位置が前記第1の位置とは異なる、実行することと
    を行わせる、非一時的コンピュータ可読記録媒体。
  30. 前記第1の入力データ要素は、第1のデータ要素から始まって第Nのデータ要素で終わるN個のデータ要素を含み、前記第2の入力データ要素は、第(N+1)のデータ要素から始まって第2*Nのデータ要素で終わるN個のデータ要素を含み、Nが前記SIMDレーンの前記レーン幅に対応する、請求項29に記載の非一時的コンピュータ可読記録媒体。
JP2018502081A 2015-07-20 2016-07-11 スライディングウィンドウ演算 Active JP6737869B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/803,728 US10459731B2 (en) 2015-07-20 2015-07-20 Sliding window operation
US14/803,728 2015-07-20
PCT/US2016/041779 WO2017014979A1 (en) 2015-07-20 2016-07-11 Simd sliding window operation

Publications (3)

Publication Number Publication Date
JP2018525730A true JP2018525730A (ja) 2018-09-06
JP2018525730A5 JP2018525730A5 (ja) 2020-01-30
JP6737869B2 JP6737869B2 (ja) 2020-08-12

Family

ID=56511938

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2018502081A Active JP6737869B2 (ja) 2015-07-20 2016-07-11 スライディングウィンドウ演算

Country Status (8)

Country Link
US (1) US10459731B2 (ja)
EP (1) EP3326061B1 (ja)
JP (1) JP6737869B2 (ja)
KR (1) KR102092049B1 (ja)
CN (1) CN107873091B (ja)
BR (1) BR112018001183A2 (ja)
CA (1) CA2990249A1 (ja)
WO (1) WO2017014979A1 (ja)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11803377B2 (en) * 2017-09-08 2023-10-31 Oracle International Corporation Efficient direct convolution using SIMD instructions
US11403727B2 (en) 2020-01-28 2022-08-02 Nxp Usa, Inc. System and method for convolving an image
US11586442B2 (en) 2020-08-06 2023-02-21 Nxp Usa, Inc. System and method for convolving image with sparse kernels

Family Cites Families (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS5743239A (en) * 1980-08-27 1982-03-11 Hitachi Ltd Data processor
US6009505A (en) * 1996-12-02 1999-12-28 Compaq Computer Corp. System and method for routing one operand to arithmetic logic units from fixed register slots and another operand from any register slot
US6230253B1 (en) * 1998-03-31 2001-05-08 Intel Corporation Executing partial-width packed data instructions
EP1261912A2 (en) * 2000-03-08 2002-12-04 Sun Microsystems, Inc. Processing architecture having sub-word shuffling and opcode modification
DE10023319B4 (de) * 2000-05-12 2008-07-10 Man Roland Druckmaschinen Ag Verfahren zum Umspulen von Thermotransferband zum Bebildern von Druckformen
US7126991B1 (en) 2003-02-03 2006-10-24 Tibet MIMAR Method for programmable motion estimation in a SIMD processor
US7275147B2 (en) * 2003-03-31 2007-09-25 Hitachi, Ltd. Method and apparatus for data alignment and parsing in SIMD computer architecture
GB2409065B (en) 2003-12-09 2006-10-25 Advanced Risc Mach Ltd Multiplexing operations in SIMD processing
US7933405B2 (en) * 2005-04-08 2011-04-26 Icera Inc. Data access and permute unit
US7761694B2 (en) * 2006-06-30 2010-07-20 Intel Corporation Execution unit for performing shuffle and other operations
US20080100628A1 (en) 2006-10-31 2008-05-01 International Business Machines Corporation Single Precision Vector Permute Immediate with "Word" Vector Write Mask
GB2444744B (en) * 2006-12-12 2011-05-25 Advanced Risc Mach Ltd Apparatus and method for performing re-arrangement operations on data
WO2008077803A1 (en) 2006-12-22 2008-07-03 Telefonaktiebolaget L M Ericsson (Publ) Simd processor with reduction unit
CN101021832A (zh) * 2007-03-19 2007-08-22 中国人民解放军国防科学技术大学 支持局部寄存和条件执行的64位浮点整数融合运算群
CN100461095C (zh) * 2007-11-20 2009-02-11 浙江大学 一种支持多模式的媒体增强流水线乘法单元设计方法
US9081501B2 (en) * 2010-01-08 2015-07-14 International Business Machines Corporation Multi-petascale highly efficient parallel supercomputer
CN102012893B (zh) * 2010-11-25 2012-07-18 中国人民解放军国防科学技术大学 一种可扩展向量运算装置
US9588766B2 (en) * 2012-09-28 2017-03-07 Intel Corporation Accelerated interlane vector reduction instructions
US9424031B2 (en) 2013-03-13 2016-08-23 Intel Corporation Techniques for enabling bit-parallel wide string matching with a SIMD register
CN104699458A (zh) * 2015-03-30 2015-06-10 哈尔滨工业大学 定点向量处理器及其向量数据访存控制方法

Also Published As

Publication number Publication date
BR112018001183A2 (pt) 2018-09-11
WO2017014979A1 (en) 2017-01-26
EP3326061B1 (en) 2022-05-25
CA2990249A1 (en) 2017-01-26
CN107873091A (zh) 2018-04-03
KR102092049B1 (ko) 2020-04-20
JP6737869B2 (ja) 2020-08-12
KR20180030540A (ko) 2018-03-23
US10459731B2 (en) 2019-10-29
CN107873091B (zh) 2021-05-28
EP3326061A1 (en) 2018-05-30
US20170024218A1 (en) 2017-01-26

Similar Documents

Publication Publication Date Title
CN110678840B (zh) 张量寄存器文件
CN110678841B (zh) 张量处理器指令集架构
US9411726B2 (en) Low power computation architecture
EP3033670B1 (en) Vector accumulation method and apparatus
US20190340489A1 (en) Neural network processor for handling differing datatypes
JP7414930B2 (ja) 情報処理装置、情報処理方法
US20220206796A1 (en) Multi-functional execution lane for image processor
KR102121866B1 (ko) 와이드 데이터 엘리먼트들에 대한 레지스터 쌍을 사용하는 짝수-엘리먼트 및 홀수-엘리먼트 연산들을 가지는 혼합-폭 simd 연산들
JP6737869B2 (ja) スライディングウィンドウ演算
US11372804B2 (en) System and method of loading and replication of sub-vector values
CN114296798A (zh) 向量移位方法、处理器及电子设备
US20180349097A1 (en) Processor with efficient arithmetic units
US9336579B2 (en) System and method of performing multi-level integration
JP2019530091A (ja) 連続するメモリアドレスにおけるデータ記憶

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20190624

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20190624

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20191213

A871 Explanation of circumstances concerning accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A871

Effective date: 20191213

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20200424

A975 Report on accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A971005

Effective date: 20200611

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20200716

R150 Certificate of patent or registration of utility model

Ref document number: 6737869

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250