JP2020004247A - 情報処理装置、情報処理方法およびプログラム - Google Patents

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

Info

Publication number
JP2020004247A
JP2020004247A JP2018125129A JP2018125129A JP2020004247A JP 2020004247 A JP2020004247 A JP 2020004247A JP 2018125129 A JP2018125129 A JP 2018125129A JP 2018125129 A JP2018125129 A JP 2018125129A JP 2020004247 A JP2020004247 A JP 2020004247A
Authority
JP
Japan
Prior art keywords
data
area
pointer
write pointer
target area
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.)
Pending
Application number
JP2018125129A
Other languages
English (en)
Inventor
高橋 祐治
Yuji Takahashi
祐治 高橋
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.)
Sony Corp
Original Assignee
Sony 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 Sony Corp filed Critical Sony Corp
Priority to JP2018125129A priority Critical patent/JP2020004247A/ja
Priority to PCT/JP2019/023828 priority patent/WO2020004098A1/ja
Priority to CN201980042150.XA priority patent/CN112368687A/zh
Priority to US17/250,245 priority patent/US11520505B2/en
Publication of JP2020004247A publication Critical patent/JP2020004247A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0629Configuration or reconfiguration of storage systems
    • G06F3/0631Configuration or reconfiguration of storage systems by allocating resources to storage systems
    • 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/5443Sum of products
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0625Power saving in storage systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0659Command handling arrangements, e.g. command buffers, queues, command scheduling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • G06F3/0679Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
    • 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/52Multiplying; Dividing
    • G06F7/523Multiplying only

Abstract

【課題】演算に掛かる時間および消費電力を低減させることを可能とする技術が提供されることが望まれる。【解決手段】複数次元を有する外部メモリの読み込み対象領域から読み込んだデータを、前記複数次元を有する記憶領域に書き込む記憶制御部と、前記記憶領域のデータに基づく処理を実行する処理部と、を備え、前記記憶制御部は、前記外部メモリにおいて前記読み込み対象領域を第1の次元方向に移動させ、移動後の前記読み込み対象領域のうち前記第1の次元方向の先端領域のデータで、前記記憶領域のうち前記第1の次元方向に対応する方向の後端領域の第1の上書きを行い、前記処理部は、前記第1の上書き後の前記記憶領域のデータに基づく第1の処理を実行する、情報処理装置が提供される。【選択図】図5

Description

本開示は、情報処理装置、情報処理方法およびプログラムに関する。
近年、演算を行う回路、演算を制御する回路、入出力回路などが1つの半導体チップ上に集積化された集積回路(マイクロプロセッサ)が様々な機器において用いられている。マイクロプロセッサなどが演算を行う場合、外部メモリから命令と演算に使用されるデータとを読み込み、読み込んだ命令とデータとに基づいて演算を実行する。実行結果は、汎用レジスタから外部メモリに書き込まれる。
マイクロプロセッサによる演算対象によって必要な演算量は様々である。例えば、処理対象によっては膨大な数の演算が必要な場合がある。そこで、演算量を削減する技術として様々な技術が開発されている。例えば、畳み込み演算による演算量が膨大である場合に、その演算量を削減する技術が開示されている(例えば、特許文献1参照)。演算に必要なデータは、外部メモリからマイクロプロセッサ内の記憶領域に読み込まれる。
特開2017−79017号公報
しかし、外部メモリからマイクロプロセッサ内の記憶領域へのデータの読み込みには、時間および消費電力が掛かる。そこで、演算に掛かる時間および消費電力を低減させることを可能とする技術が提供されることが望まれる。
本開示によれば、複数次元を有する外部メモリの読み込み対象領域から読み込んだデータを、前記複数次元を有する記憶領域に書き込む記憶制御部と、前記記憶領域のデータに基づく処理を実行する処理部と、を備え、前記記憶制御部は、前記外部メモリにおいて前記読み込み対象領域を第1の次元方向に移動させ、移動後の前記読み込み対象領域のうち前記第1の次元方向の先端領域のデータで、前記記憶領域のうち前記第1の次元方向に対応する方向の後端領域の第1の上書きを行い、前記処理部は、前記第1の上書き後の前記記憶領域のデータに基づく第1の処理を実行する、情報処理装置が提供される。
本開示によれば、複数次元を有する外部メモリの読み込み対象領域から読み込んだデータを、前記複数次元を有する記憶領域に書き込むことと、前記記憶領域のデータに基づく処理を実行することと、前記外部メモリにおいて前記読み込み対象領域を第1の次元方向に移動させ、移動後の前記読み込み対象領域のうち前記第1の次元方向の先端領域のデータで、前記記憶領域のうち前記第1の次元方向に対応する方向の後端領域の第1の上書きを行うことと、前記第1の上書き後の前記記憶領域のデータに基づく第1の処理を実行することと、を含む、情報処理方法が提供される。
本開示によれば、コンピュータを、複数次元を有する外部メモリの読み込み対象領域から読み込んだデータを、前記複数次元を有する記憶領域に書き込む記憶制御部と、前記記憶領域のデータに基づく処理を実行する処理部と、を備え、前記記憶制御部は、前記外部メモリにおいて前記読み込み対象領域を第1の次元方向に移動させ、移動後の前記読み込み対象領域のうち前記第1の次元方向の先端領域のデータで、前記記憶領域のうち前記第1の次元方向に対応する方向の後端領域の第1の上書きを行い、前記処理部は、前記第1の上書き後の前記記憶領域のデータに基づく第1の処理を実行する、情報処理装置として機能させるためのプログラムが提供される。
以上説明したように本開示によれば、演算に掛かる時間および消費電力を低減させることを可能とする技術が提供される。なお、上記の効果は必ずしも限定的なものではなく、上記の効果とともに、または上記の効果に代えて、本明細書に示されたいずれかの効果、または本明細書から把握され得る他の効果が奏されてもよい。
一般的なマイクロプロセッサの構成例を示す図である。 一般的なマイクロプロセッサによる画像処理のプログラム例を示す図である。 一般的なマイクロプロセッサによる画像処理のプログラム例を示す図である。 一般的なマイクロプロセッサによる画像処理のプログラム例を示す図である。 本開示の実施形態に係る情報処理装置の構成例を示す図である。 同実施形態に係る情報処理装置が実行する処理の流れを説明するための図である。 同実施形態に係る情報処理装置が実行する処理の流れを説明するための図である。 同実施形態に係る情報処理装置が実行する処理の流れを説明するための図である。 同実施形態に係る情報処理装置が実行する処理の流れを説明するための図である。 同実施形態に係る情報処理装置が実行する処理の流れを説明するための図である。 Multidimensional Ring Buffer 1に関する定義を説明するための図である。 Read Pointerの動きの例を示す図である。 Write Pointerの動きの例を示す図である。 Write Pointerの動きの例を示す図である。 外部メモリにおける対象範囲の読み込み対象領域と、読み込み対象領域の一部または全部から読み込まれたデータが該当箇所に書き込まれたMultidimensional Ring Buffer 1との対応例を示す図である。 外部メモリにおける対象範囲の読み込み対象領域と、読み込み対象領域の一部または全部から読み込まれたデータが該当箇所に書き込まれたMultidimensional Ring Buffer 1との対応例を示す図である。 外部メモリにおける対象範囲の読み込み対象領域と、読み込み対象領域の一部または全部から読み込まれたデータが該当箇所に書き込まれたMultidimensional Ring Buffer 1との対応例を示す図である。 外部メモリにおける対象範囲の読み込み対象領域と、読み込み対象領域の一部または全部から読み込まれたデータが該当箇所に書き込まれたMultidimensional Ring Buffer 1との対応例を示す図である。 外部メモリにおける対象範囲の読み込み対象領域と、読み込み対象領域の一部または全部から読み込まれたデータが該当箇所に書き込まれたMultidimensional Ring Buffer 1との対応例を示す図である。 外部メモリにおける対象範囲の読み込み対象領域と、読み込み対象領域の一部または全部から読み込まれたデータが該当箇所に書き込まれたMultidimensional Ring Buffer 1との対応例を示す図である。 外部メモリにおける対象範囲の読み込み対象領域と、読み込み対象領域の一部または全部から読み込まれたデータが該当箇所に書き込まれたMultidimensional Ring Buffer 1との対応例を示す図である。 外部メモリにおける対象範囲の読み込み対象領域と、読み込み対象領域の一部または全部から読み込まれたデータが該当箇所に書き込まれたMultidimensional Ring Buffer 1との対応例を示す図である。 外部メモリにおける対象範囲の読み込み対象領域と、読み込み対象領域の一部または全部から読み込まれたデータが該当箇所に書き込まれたMultidimensional Ring Buffer 1との対応例を示す図である。 外部メモリにおける対象範囲の読み込み対象領域と、読み込み対象領域の一部または全部から読み込まれたデータが該当箇所に書き込まれたMultidimensional Ring Buffer 1との対応例を示す図である。 外部メモリにおける対象範囲の読み込み対象領域と、読み込み対象領域の一部または全部から読み込まれたデータが該当箇所に書き込まれたMultidimensional Ring Buffer 1との対応例を示す図である。 外部メモリにおける対象範囲の読み込み対象領域と、読み込み対象領域の一部または全部から読み込まれたデータが該当箇所に書き込まれたMultidimensional Ring Buffer 1との対応例を示す図である。 外部メモリにおける対象範囲の読み込み対象領域と、読み込み対象領域の一部または全部から読み込まれたデータが該当箇所に書き込まれたMultidimensional Ring Buffer 1との対応例を示す図である。 外部メモリにおける対象範囲の読み込み対象領域と、読み込み対象領域の一部または全部から読み込まれたデータが該当箇所に書き込まれたMultidimensional Ring Buffer 1との対応例を示す図である。 外部メモリにおける対象範囲の読み込み対象領域と、読み込み対象領域の一部または全部から読み込まれたデータが該当箇所に書き込まれたMultidimensional Ring Buffer 1との対応例を示す図である。 外部メモリにおける対象範囲の読み込み対象領域と、読み込み対象領域の一部または全部から読み込まれたデータが該当箇所に書き込まれたMultidimensional Ring Buffer 1との対応例を示す図である。 同実施形態に係る情報処理装置を実現するためのプログラムにおいて使用される各種命令の定義を示す図である。 同実施形態に係る情報処理装置を実現するためのプログラムの例を示す図である。 同実施形態に係る情報処理装置を実現するためのプログラムの例を示す図である。 同実施形態に係る情報処理装置を実現するためのプログラムの例を示す図である。 同実施形態に係る情報処理装置の動作例を示すフローチャートの注釈を示す図である。 同実施形態に係る情報処理装置の動作例を示すフローチャートである。 同実施形態に係る情報処理装置の動作例を示すフローチャートである。 同実施形態に係る情報処理装置の動作例を示すフローチャートである。 入力データが書き込まれるバッファが3次元を有する場合の例を示す図である。
以下に添付図面を参照しながら、本開示の好適な実施の形態について詳細に説明する。なお、本明細書及び図面において、実質的に同一の機能構成を有する構成要素については、同一の符号を付することにより重複説明を省略する。
また、本明細書および図面において、実質的に同一の機能構成を有する複数の構成要素を、同一の符号の後に異なる数字を付して区別する場合もある。ただし、実質的に同一の機能構成を有する複数の構成要素の各々を特に区別する必要がない場合、同一符号のみを付する。
なお、説明は以下の順序で行うものとする。
0.背景
1.本開示の実施形態
1.1.システム構成例
1.2.情報処理装置の機能詳細
1.2.1.処理の流れ
1.2.2.ポインタの動き
1.2.3.具体的な処理例
1.2.4.プログラム例
1.2.5.動作例
2.効果
3.変形例
<0.背景>
近年、演算を行う回路(演算回路)、演算を制御する回路(制御回路)、入出力回路などが1つの半導体チップ上に集積化された集積回路(マイクロプロセッサ)が様々な機器において用いられている。まず、一般的なマイクロプロセッサの構成例について説明する。
図1は、一般的なマイクロプロセッサの構成例を示す図である。図1に示されるように、一般的なマイクロプロセッサ80は、Road/Store Unit810、General Purpose Register830(汎用レジスタ)、ALU(Arithmetic Logic Unit)840、Instruction Fetch Unit850、Instruction Decode Unit860、Program Counter&Pipeline Control870を備える。
一般的なマイクロプロセッサ80によって演算が行われる場合、Instruction Fetch Unit850は、Program Counter&Pipeline Control870に格納されているカウンタ値に基づいて、外部メモリから命令を取り出す(フェッチする)。命令が取り出されると、カウンタ値が外部メモリにおける次の命令のアドレスに更新される。そして、Instruction Decode Unit860は、命令を解釈し、ALU840は、解釈結果に基づいて命令を実行する。
命令の実行には、データが使用される。具体的に、General Purpose Register830は、命令に従って、Road/Store Unit810を介して外部メモリからデータを読み込み、読み込んだデータを記憶領域(マイクロプロセッサ80内のメモリ)に書き込む。命令の実行結果は、General Purpose Register830によってRoad/Store Unit810を介して外部メモリに書き込まれる。
ここで、外部メモリからマイクロプロセッサ80内の記憶領域へのデータの読み込みには、時間および消費電力が掛かる。そこで、本開示の実施形態では、演算に掛かる時間および消費電力を低減させることを可能とする技術について主に説明する。
より具体的に、マイクロプロセッサ80による演算には、同じデータが繰り返し使用される場合がある。例えば、画像処理、DNN(Deep Learning Network)などにおいては、同じデータが繰り返し使用される場合が多い。繰り返し同じデータが使用される場合であっても、演算のたびに外部メモリからマイクロプロセッサ80内の記憶領域にデータを読み込む必要があるとすると、既に読み込んだデータを外部メモリから再度読み込むための時間および消費電力が無駄になる。
図2〜図4は、一般的なマイクロプロセッサ80による画像処理のプログラム例を示す図である。図2〜図4を参照すると、プログラムのNotation PG0が示されている。また、図2〜図4を参照すると、プログラムPG1〜PG3が示されている。プログラムPG2は、プログラムPG1に続くプログラムであり、プログラムPG3は、プログラムPG2に続くプログラムである。
プログラムPG1〜PG3では、General Purpose Register830は、Road/Store Unit810を介して、外部メモリからマイクロプロセッサ80内の記憶領域に入力画像データと3×3のフィルタ係数とを読み込む。そして、ALU840は、入力画像データと3×3のフィルタ係数とに基づいて、フィルタ適用後の画像データ(出力画像データ)を生成する。General Purpose Register830は、Road/Store Unit810を介して、出力画像データを外部メモリに書き込む。
しかし、プログラムPG1〜PG3では、繰り返し同じ(入力画像データの)画素データが使用される場合であっても、演算のたびに外部メモリからマイクロプロセッサ80内の記憶領域に画素データを読み込んでいる。そのため、プログラムPG1〜PG3では、外部メモリから画素データを読み込む命令が多くなっている。したがって、プログラムPG1〜PG3では、既に読み込んだ画素データを外部メモリから再度読み込むための時間および消費電力が無駄になっている。
本開示の実施形態に係るマイクロプロセッサは、既に外部メモリから読み込まれてマイクロプロセッサ内の記憶領域にストアされているデータと同じデータを使用する場合には、外部メモリからの再度のデータの読み込みを省略する。すなわち、本開示の実施形態では、既に外部メモリから読み込まれてマイクロプロセッサ内の記憶領域にストアされているデータを再利用することにする。これによって、外部メモリへのデータフェッチ回数が低減されるため、既に読み込んだデータを外部メモリから再度読み込むための時間および消費電力を低減することが可能である。
より詳細に、本開示の実施形態では、マイクロプロセッサ内の記憶領域を、複数次元を有するリングバッファとして使用する。かかる構成によれば、外部メモリからの読み込みが必要なデータ量を小さくすることが可能となる。したがって、かかる構成によれば、外部メモリからデータを読み込む命令を少なくし、外部メモリからデータを読み込むための時間および消費電力を効果的に低減することが可能となる。なお、以下では、本開示の実施形態に係るマイクロプロセッサ内の記憶領域を「多次元リングバッファ」と称する場合がある。しかし、「多次元」の次元数は特に限定されず、複数であればよい。
以上、本開示の実施形態の背景について説明した。
<1.本開示の実施形態>
[1.1.システム構成例]
続いて、本開示の実施形態に係る情報処理装置(例えば、マイクロプロセッサ)の構成例について説明する。図5は、本開示の実施形態に係る情報処理装置の構成例を示す図である。図5に示されたように、本開示の実施形態に係る情報処理装置10は、Road/Store Unit110、General Purpose Register130(記憶制御部)、ALU140(処理部)、Instruction Fetch Unit150、Instruction Decode Unit160、Program Counter&Pipeline Control170を備える。
これらの構成のうち、General Purpose Register130は、一般的なGeneral Purpose Register830(図1)と異なる。さらに、情報処理装置10は、Multidimensional Ring Buffer 0〜2(120〜122)を備える点において、一般的なマイクロプロセッサ80と異なる。したがって、以下では、本開示の実施形態に係る情報処理装置10が有する構成のうち、一般的なマイクロプロセッサ80が有する構成と異なる構成について主に説明し、一般的なマイクロプロセッサ80が有する構成と同じ構成についての詳細な説明は省略する。
なお、上記したように、Multidimensional Ring Buffer 0〜2(120〜122)の次元数は複数であればよい。そして、外部メモリの次元数も複数であればよい。以下では、説明を簡便にするため、Multidimensional Ring Buffer 0〜2(120〜122)および外部メモリそれぞれの次元が2次元である場合を主に説明する。そして、外部メモリの読み込み対象領域のデータが、画像データである場合を想定する。しかし、外部メモリの読み込み対象領域のデータは、画像データに限定されない。
また、General Purpose Register130は、Road/Store Unit110を介して、外部メモリから読み込んだデータを、必要に応じてMultidimensional Ring Buffer 0〜1(120〜121)に書き込む。そして、ALU140は、Multidimensional Ring Buffer 0〜1(120〜121)のデータに基づく処理を実行する。
より詳細に、本開示の実施形態では、Multidimensional Ring Buffer 0(120)には、外部メモリから読み込まれた係数データが書き込まれ、Multidimensional Ring Buffer 1(121)には、外部メモリから読み込まれた画像データが入力データとして書き込まれる場合を主に説明する。そして、本開示の実施形態では、ALU140は、このようにして書き込まれた入力データと係数データとを画素ごとに乗算し、画素ごとの乗算結果の和を算出する場合を主に説明する。
しかし、Multidimensional Ring Buffer 0〜1(120〜121)に書き込まれるデータは、かかる例に限定されない。また、Multidimensional Ring Buffer 0〜1(120〜121)のデータに基づく処理も、かかる例に限定されない。また、フィルタサイズは、3×3に限定されないし、画像データのサイズも限定されない。
なお、本開示の実施形態では、Multidimensional Ring Buffer 0〜2(120〜122)のすべてがリングバッファである場合を主に想定する。しかし、Multidimensional Ring Buffer 1(121)だけが少なくともリングバッファであればよい。すなわち、Multidimensional Ring Buffer 0、2(120、122)の両方またはいずれか一方は、リングバッファでなくてもよい。
また、上記したように、情報処理装置10は、演算回路、演算回路、入出力回路などが1つの半導体チップ上に集積化された集積回路であってよい。例えば、情報処理装置10は、1または複数のCPU(Central Processing Unit;中央演算処理装置)などといった処理装置によって構成されてよい。情報処理装置10は、記録媒体から読み出したプログラムを実行することによって、その機能を実現させる。
以上、本開示の実施形態に係る情報処理装置10の構成例について説明した。
[1.2.情報処理装置の機能詳細]
続いて、情報処理装置10の機能詳細について説明する。
(1.2.1.処理の流れ)
まず、情報処理装置10が実行する処理の流れについて説明する。図6〜図10は、情報処理装置10が実行する処理の流れを説明するための図である。図6〜図10に示されるように、外部メモリ20には、複数の係数(係数データ)が格納されている係数データ領域25、画像データが格納されている対象範囲21、命令の実行結果が書き込まれる書き込み対象領域27が存在している。その他、図6〜図10には、Multidimensional Ring Buffer 0〜2(120〜122)、ALU140が示されている。
なお、図6〜図10に示された例において、Multidimensional Ring Buffer 1(121)の対応する位置が、物理的に同じ位置を表しているとは限らない。例えば、図6に示された例と図7に示された例とにおいて、Multidimensional Ring Buffer 1(121)の左上の位置が、物理的に同じ位置を表しているとは限らない。
図6に示されたように、General Purpose Register130は、係数データ領域25に格納されている係数データを、Road/Store Unit110を介して読み込み、Multidimensional Ring Buffer 0(120)に書き込む。また、General Purpose Register130は、対象範囲21の太枠内(読み込み対象領域22)の画像データを入力データとしてRoad/Store Unit110を介して読み込み、Multidimensional Ring Buffer 1(121)に書き込む。
また、図6に示されたように、Multidimensional Ring Buffer 1(121)への入力データの書き込みが終わると、General Purpose Register130は、Multidimensional Ring Buffer 0(120)から各係数を順に読み込むとともに、Multidimensional Ring Buffer 1(121)の各位置から順にデータを読み込む。
ALU140は、Multidimensional Ring Buffer 0(120)から読み込まれた係数と、Multidimensional Ring Buffer 1(121)から読み込まれた入力データとを、対応する画素ごとに乗算する。そして、ALU140は、画素ごとの乗算結果の和を算出する。図6に示されたように、ALU140は、乗算結果の和を、Multidimensional Ring Buffer 2(122)の太枠内(書き込み対象領域)に書き込む。
図7〜図10では、このようにしてMultidimensional Ring Buffer 1(121)に、読み込み対象領域22(図6)内の画像データが入力データとして既に書き込まれている状態を基準とする。そして、次に画像データが外部メモリ20から読み出される場合を想定する。
図7に示された例では、読み込み対象領域22が、図6に示された読み込み対象領域22よりも1列左にシフトしている場合を想定する。このとき、General Purpose Register130は、読み込み対象領域22(図7)の画像データのすべてを外部メモリ20から読み込まなくてよい。
より詳細に、General Purpose Register130は、読み込み対象領域22(図7)の画像データのうち、まだ読み込まれていないデータ(差分データ)だけを外部メモリ20から読み込めばよい。これによって、General Purpose Register130が外部メモリ20から画像データを読み込むための時間および消費電力を低減することが可能である。
そして、General Purpose Register130は、読み込んだ差分データだけを、新たにMultidimensional Ring Buffer 1(121)の該当箇所に書き込めばよい。図7には、新たに書き込まれた部分が、Multidimensional Ring Buffer 1(121)の網掛け部分として示されている。
ALU140は、Multidimensional Ring Buffer 0(120)から読み込まれた係数データと、Multidimensional Ring Buffer 1(121)から読み込まれた入力データとを、対応する画素ごとに乗算し直す。そして、ALU140は、画素ごとの乗算結果の和を算出する。図7に示されたように、ALU140は、乗算結果の和を、Multidimensional Ring Buffer 2(122)の太枠内(書き込み対象領域)に書き込む。
図8〜図10に示された例においても、図7に示された例と同様に考えることが可能である。図8に示された例では、読み込み対象領域22が、図6に示された読み込み対象領域22よりも1列右にシフトしている場合を想定する。このとき、General Purpose Register130は、読み込み対象領域22(図8)の画像データのうち、まだ読み込まれていないデータ(差分データ)だけを外部メモリ20から読み込めばよい。
そして、General Purpose Register130は、読み込んだ差分データだけを、新たにMultidimensional Ring Buffer 1(121)の該当箇所に書き込めばよい。図8には、新たに書き込まれた部分が、Multidimensional Ring Buffer 1(121)の網掛け部分として示されている。
ALU140は、Multidimensional Ring Buffer 0(120)から読み込まれた係数データと、Multidimensional Ring Buffer 1(121)から読み込まれた入力データとを、対応する画素ごとに乗算し直す。そして、ALU140は、画素ごとの乗算結果の和を算出する。図8に示されたように、ALU140は、乗算結果の和を、Multidimensional Ring Buffer 2(122)の太枠内(書き込み対象領域)に書き込む。
図9に示された例では、読み込み対象領域22が、図6に示された読み込み対象領域22よりも1列下にシフトしている場合を想定する。このとき、General Purpose Register130は、読み込み対象領域22(図9)の画像データのうち、まだ読み込まれていないデータ(差分データ)だけを外部メモリ20から読み込めばよい。
そして、General Purpose Register130は、読み込んだ差分データだけを、新たにMultidimensional Ring Buffer 1(121)の該当箇所に書き込めばよい。図9には、新たに書き込まれた部分が、Multidimensional Ring Buffer 1(121)の網掛け部分として示されている。
ALU140は、Multidimensional Ring Buffer 0(120)から読み込まれた係数データと、Multidimensional Ring Buffer 1(121)から読み込まれた入力データとを、対応する画素ごとに乗算し直す。そして、ALU140は、画素ごとの乗算結果の和を算出する。図9に示されたように、ALU140は、乗算結果の和を、Multidimensional Ring Buffer 2(122)の太枠内(書き込み対象領域)に書き込む。
図10に示された例では、読み込み対象領域22が、図6に示された読み込み対象領域22よりも1列上にシフトしている場合を想定する。このとき、General Purpose Register130は、読み込み対象領域22(図10)の画像データのうち、まだ読み込まれていないデータ(差分データ)だけを外部メモリ20から読み込めばよい。
そして、General Purpose Register130は、読み込んだ差分データだけを、新たにMultidimensional Ring Buffer 1(121)の該当箇所に書き込めばよい。図10には、新たに書き込まれた部分が、Multidimensional Ring Buffer 1(121)の網掛け部分として示されている。
ALU140は、Multidimensional Ring Buffer 0(120)から読み込まれた係数データと、Multidimensional Ring Buffer 1(121)から読み込まれた入力データとを、対応する画素ごとに乗算し直す。そして、ALU140は、画素ごとの乗算結果の和を算出する。図10に示されたように、ALU140は、乗算結果の和を、Multidimensional Ring Buffer 2(122)の太枠内(書き込み対象領域)に書き込む。
Multidimensional Ring Buffer 2(122)の各位置に命令の実行結果が書き込まれると、General Purpose Register130によって、Multidimensional Ring Buffer 2(122)から実行結果が読み込まれる。そして、General Purpose Register130は、Road/Store Unit110を介して、外部メモリ20の書き込み対象領域27に実行結果を書き込む。
以上、情報処理装置10が実行する処理の流れについて説明した。
(1.2.2.ポインタの動き)
上記のように、外部メモリから読み込まれたデータは、Multidimensional Ring Buffer 1(121)の該当箇所に書き込まれる。そして、乗算時には、Multidimensional Ring Buffer 1(121)からデータが読み込まれる。以下では、Multidimensional Ring Buffer 1(121)へのデータ書き込みを、単に「書き込み」と言い、Multidimensional Ring Buffer 1(121)からのデータ読み込みを、単に「読み込み」と言う場合がある。
書き込み時には、Write Pointerが示す位置にデータが書き込まれる。一方、読み込み時には、Read Pointerが示す位置からデータが読み込まれる。本開示の実施形態では、読み込み対象領域22の移動方向として複数の移動方向が設けられており、書き込み時には、読み込み対象領域22の移動方向に応じて、Write Pointerの動きが変化する。これによって、読み込み時には、Read Pointerの動きが一定にされ得る。
より詳細に、読み込み対象領域22の移動方向としては、外部メモリ20における、第1の次元の正方向、第1の次元の負方向、第2の次元の正方向、および、第2の次元の負方向の4方向が存在する。これらの読み込み対象領域22の移動方向それぞれには、Write Pointerの異なる動きがあらかじめ関連付けされており、Write Pointerは、読み込み対象領域22の移動方向にあらかじめ関連付けられた動きに従って移動する。一方、Read Pointerの動きは、Write Pointerの動きのいずれかと同様である。
以下では、第1の次元の正方向が外部メモリ20の下方向であり、第1の次元の負方向が外部メモリ20の上方向であり、第2の次元の正方向が外部メモリ20の右方向であり、第2の次元の負方向が外部メモリ20の左方向である場合を主に想定する。しかし、これらの4方向それぞれは外部メモリ20のどちらの方向であってもよい。Write PointerおよびRead Pointerの移動方向も限定されない。
図11は、Multidimensional Ring Buffer 1(121)に関する定義を説明するための図である。図11を参照すると、Multidimensional Ring Buffer 1(121)において、外部メモリ20における第1の次元に対応する、Multidimensional Ring Buffer 1(121)における次元が「1D」と表現され、外部メモリ20における第2の次元に対応する、Multidimensional Ring Buffer 1(121)における次元が「2D」と表現されている。このように、以下では、第1の次元に対応する次元を「1D」と表現し、第2の次元に対応する次元を「2D」と表現する場合がある。
X1〜X9は、Multidimensional Ring Buffer 1(121)の物理的な位置を示すアドレス(物理アドレス)である。例えば、X1は、Multidimensional Ring Buffer 1(121)における左上の位置を示す物理アドレスであり、X9は、Multidimensional Ring Buffer 1(121)における右下の位置を示す物理アドレスである。原点Oは、各次元の値が0の点である。一方、点Aは、各次元における要素数に対応する長さを有するベクトルの和が示す点である。
図12は、Read Pointerの動きの例を示す図である。Read Pointerは、初期位置から1Dの方向に固定されたまま、2Dの正方向に所定の幅だけ移動し、2Dの正方向への移動が一巡すると、1Dの正方向に所定の幅だけ移動する。以下では、所定の幅の移動が、隣接する位置への移動である場合を想定する。しかし、所定の幅は限定されない。同様に、読み込み対象領域22も、所定の幅ずつ移動し、所定の幅の移動が、隣接する位置への移動である場合を想定するが、当該所定の幅も限定されない。これ以降、Read Pointerは、同様の移動を繰り返していく。
例えば、初期位置がX1(原点O)である場合、Read Pointerは、X1、X2、X3の順に移動した後、X1に戻る代わりにX4に移動する。そして、Read Pointerは、X4、X5、X6の順に移動した後、X4に戻る代わりにX7に移動する。そして、Read Pointerは、X7、X8、X9(点A)の順に移動した後、X7に戻る代わりにX1(原点O)に移動する。これ以降、Read Pointerは、同様の移動を繰り返していく。
図13および図14は、Write Pointerの動きの例を示す図である。上記したように、Write Pointerは、読み込み対象領域22の移動方向にあらかじめ関連付けられた動きに従って移動する。したがって、読み込み対象領域22の移動方向として4方向が存在する場合、Write Pointerの動きにも4通りの動きが存在する。
読み込み対象領域22の移動方向「第1の次元の正方向」に関連付けられた動きをする論理的なWrite Pointerを「Write Pointer(1D+)」と表現する場合がある。同様に、読み込み対象領域22の移動方向「第1の次元の負方向」に関連付けられた動きをする論理的なWrite Pointerを「Write Pointer(1D−)」と表現する場合がある。
一方、読み込み対象領域22の移動方向「第2の次元の正方向」に関連付けられた動きをする論理的なWrite Pointerを「Write Pointer(2D+)」と表現する場合がある。同様に、読み込み対象領域22の移動方向「第2の次元の負方向」に関連付けられた動きをする論理的なWrite Pointerを「Write Pointer(2D−)」と表現する場合がある。
まず、図13の「Write Pointer(1D+)」を参照しながら、Write Pointer(1D+)の動きを説明する。Write Pointer(1D+)の動きは、Read Pointerの動きと同様である。すなわち、Write Pointer(1D+)は、初期位置から1Dの方向に固定されたまま、2Dの正方向に所定の幅だけ移動し(隣接する位置に移動し)、2Dの正方向への移動が一巡すると、1Dの正方向に所定の幅だけ移動する(隣接する位置に移動する)。これ以降、Write Pointer(1D+)は、同様の移動を繰り返していく。
例えば、初期位置がX1(原点O)である場合、Write Pointer(1D+)は、X1、X2、X3の順に移動した後、X1に戻る代わりにX4に移動する。そして、Write Pointer(1D+)は、X4、X5、X6の順に移動した後、X4に戻る代わりにX7に移動する。そして、Write Pointer(1D+)は、X7、X8、X9(点A)の順に移動した後、X7に戻る代わりにX1(原点O)に移動する。これ以降、Write Pointer(1D+)は、同様の移動を繰り返していく。
Write Pointer(1D+)の初期位置がX1(原点O)でない場合もあり得る。かかる場合であっても、Write Pointer(1D+)は、X1の代わりに他の位置を初期位置に設定し、同様の動きをすればよい。例えば、初期位置がX3である場合、Write Pointer(1D+)は、X3、X1、X2の順に移動した後、X3に戻る代わりにX6に移動すればよい。そして、Write Pointer(1D+)は、X6、X4、X5の順に移動した後、X6に戻る代わりにX9に移動すればよい。そして、Write Pointer(1D+)は、X9、X7、X8の順に移動した後、X9に戻る代わりにX3に移動すればよい。これ以降、Write Pointer(1D+)は、同様の移動を繰り返せばよい。
続いて、図13の「Write Pointer(2D+)」を参照しながら、Write Pointer(2D+)の動きを説明する。Write Pointer(2D+)は、初期位置から2Dの方向に固定されたまま、1Dの正方向に所定の幅だけ移動し(隣接する位置に移動し)、1Dの正方向への移動が一巡すると、2Dの正方向に所定の幅だけ移動する(隣接する位置に移動する)。これ以降、Write Pointer(2D+)は、同様の移動を繰り返していく。
例えば、初期位置がX1(原点O)である場合、Write Pointer(2D+)は、X1、X4、X7の順に移動した後、X1に戻る代わりにX2に移動する。そして、Write Pointer(2D+)は、X2、X5、X8の順に移動した後、X2に戻る代わりにX3に移動する。そして、Write Pointer(2D+)は、X3、X6、X9(点A)の順に移動した後、X3に戻る代わりにX1(原点O)に移動する。これ以降、Write Pointer(2D+)は、同様の移動を繰り返していく。
Write Pointer(2D+)の初期位置がX1(原点O)でない場合もあり得る。かかる場合であっても、Write Pointer(2D+)は、X1の代わりに他の位置を初期位置に設定し、同様の動きをすればよい。例えば、初期位置がX4である場合、Write Pointer(2D+)は、X4、X7、X1の順に移動した後、X4に戻る代わりにX5に移動すればよい。そして、Write Pointer(2D+)は、X5、X8、X2の順に移動した後、X5に戻る代わりにX6に移動すればよい。そして、Write Pointer(2D+)は、X6、X9、X3の順に移動した後、X6に戻る代わりにX4に移動すればよい。これ以降、Write Pointer(2D+)は、同様の移動を繰り返せばよい。
続いて、図14の「Write Pointer(1D−)」を参照しながら、Write Pointer(1D−)の動きを説明する。Write Pointer(1D−)は、初期位置から1Dの方向に固定されたまま、2Dの負方向に所定の幅だけ移動し(隣接する位置に移動し)、2Dの負方向への移動が一巡すると、1Dの負方向に所定の幅だけ移動する(隣接する位置に移動する)。これ以降、Write Pointer(1D−)は、同様の移動を繰り返していく。
例えば、初期位置がX9(点A)である場合、Write Pointer(1D−)は、X9、X8、X7の順に移動した後、X9に戻る代わりにX6に移動する。そして、Write Pointer(1D−)は、X6、X5、X4の順に移動した後、X6に戻る代わりにX3に移動する。そして、Write Pointer(1D−)は、X3、X2、X1(原点O)の順に移動した後、X3に戻る代わりにX9(点A)に移動する。これ以降、Write Pointer(1D−)は、同様の移動を繰り返していく。
Write Pointer(1D−)の初期位置がX9(点A)でない場合もあり得る。かかる場合であっても、Write Pointer(1D−)は、X9の代わりに他の位置を初期位置に設定し、同様の動きをすればよい。例えば、初期位置がX7である場合、Write Pointer(1D−)は、X7、X9、X8の順に移動した後、X7に戻る代わりにX4に移動すればよい。そして、Write Pointer(1D−)は、X4、X6、X5の順に移動した後、X4に戻る代わりにX1に移動すればよい。そして、Write Pointer(1D−)は、X1、X3、X2の順に移動した後、X1に戻る代わりにX7に移動すればよい。これ以降、Write Pointer(1D−)は、同様の移動を繰り返せばよい。
続いて、図14の「Write Pointer(2D−)」を参照しながら、Write Pointer(2D−)の動きを説明する。Write Pointer(2D−)は、初期位置から2Dの方向に固定されたまま、1Dの負方向に所定の幅だけ移動し(隣接する位置に移動し)、1Dの負方向への移動が一巡すると、2Dの負方向に所定の幅だけ移動する(隣接する位置に移動する)。これ以降、Write Pointer(2D−)は、同様の移動を繰り返していく。
例えば、初期位置がX9(点A)である場合、Write Pointer(2D−)は、X9、X6、X3の順に移動した後、X9に戻る代わりにX8に移動する。そして、Write Pointer(2D−)は、X8、X5、X2の順に移動した後、X8に戻る代わりにX7に移動する。そして、Write Pointer(2D−)は、X7、X4、X1(原点O)の順に移動した後、X7に戻る代わりにX9(点A)に移動する。これ以降、Write Pointer(2D−)は、同様の移動を繰り返していく。
Write Pointer(2D−)の初期位置がX9(点A)でない場合もあり得る。かかる場合であっても、Write Pointer(2D−)は、X9の代わりに他の位置を初期位置に設定し、同様の動きをすればよい。例えば、初期位置がX3である場合、Write Pointer(2D−)は、X3、X9、X6の順に移動した後、X3に戻る代わりにX2に移動すればよい。そして、Write Pointer(2D−)は、X2、X8、X5の順に移動した後、X2に戻る代わりにX1に移動すればよい。そして、Write Pointer(2D−)は、X1、X7、X4の順に移動した後、X1に戻る代わりにX3に移動すればよい。これ以降、Write Pointer(2D−)は、同様の移動を繰り返せばよい。
以上に説明したように、Write Pointerの動きには4通りの動きが存在するため、これらの4通りの動きそれぞれに対して物理的に異なるWrite Pointerが使用されてもよいが、必ずしもこれらの4通りの動きそれぞれに対して物理的に異なるWrite Pointerが使用されなくてよい。本実施形態では、2通りの動きに対して物理的に1つのWrite Pointerが使用される場合を主に想定する(すなわち、4通りの動きに対して物理的に2つのWrite Pointerが使用される場合を想定する)。
より詳細には、読み込み対象領域22の第1の次元の移動方向(第1の次元方向)と、読み込み対象領域22の第2の次元の移動方向(第2の次元方向)との正負の別が同じ場合、各Write Pointer(第1のポインタおよび第2のポインタ)として物理的に同一のWrite Pointerが使用される場合を主に想定する。一方、読み込み対象領域22の第1の次元の移動方向(第1の次元方向)と、読み込み対象領域22の第2の次元の移動方向(第2の次元方向)との正負の別が異なる場合には、各Write Pointerとして物理的に異なるWrite Pointerが使用される場合を主に想定する。
すなわち、本開示の実施形態では、図13に示されるように、「Write Pointer(1D+)」と「Write Pointer(2D+)」との間で、物理的に同一のWrite Pointer(WP1)が使用される場合を主に想定する。また、本開示の実施形態では、図14に示されるように、「Write Pointer(1D−)」と「Write Pointer(2D−)」との間で、物理的に同一のWrite Pointer(WP2)が使用される場合を主に想定する。Write Pointer(WP1)とWrite Pointer(WP2)とは物理的に異なっている。
しかし、Write Pointer(WP1)およびWrite Pointer(WP2)それぞれの動きの対応関係があらかじめ定められていれば、Write Pointer(WP1)およびWrite Pointer(WP2)のいずれか一方のみが使用されてもよい。すなわち、Write Pointer(WP1)およびWrite Pointer(WP2)のうち、いずれか一方のみが使用され、かかる対応関係に基づいて、当該一方のWrite Pointerの位置から他方のWrite Pointerの位置が算出されてもよい。
以下に説明する例においても、Write Pointer(WP1)とWrite Pointer(WP2)とが、Multidimensional Ring Buffer 1(121)において対角に位置するという相互関係が保たれるように移動される場合を主に想定する。したがって、以下に説明する例においても、Write Pointer(WP1)とWrite Pointer(WP2)のいずれか一方のみが使用されてもよい。
なお、Write Pointer(WP1)とWrite Pointer(WP2)とが対角に位置するとは、Multidimensional Ring Buffer 1(121)において、最下行(第2行)の下に最上行(第0行)が隣接し、最右列(第2列)の右に最左列(第0列)が隣接するとした場合に、Write Pointer(WP1)が示す位置を左上隅とする3×3の矩形領域の右下隅をWrite Pointer(WP2)が示すことを言う。
以上、ポインタの動きの例について説明した。
(1.2.3.具体的な処理例)
上記したようなポインタの動きとともに情報処理装置10による処理が実行される。続いて、情報処理装置10による具体的な処理例について説明する。図15〜図30は、外部メモリ20における対象範囲21の読み込み対象領域22と、読み込み対象領域22の一部または全部から読み込まれたデータが該当箇所に書き込まれたMultidimensional Ring Buffer 1(121)との対応例を示す図である。
図15〜図30を参照すると、対象範囲21の各位置に格納されているデータがM00〜M55として表現されている。読み込み対象領域22は、対象範囲21の内部を初期位置から所定の幅ずつ次々に移動していき(隣接する位置に移動していき)、対象範囲21の内部を網羅的に移動する。具体的に、図15が初期状態を示しており、図16、図17、・・・の順に、読み込み対象領域22が次々と移動していく。図15に示された例では、読み込み対象領域22の初期位置が対象範囲21の左上であるが、読み込み対象領域22の初期位置は対象範囲21の左上に限定されない。
読み込み対象領域22の一部または全部から読み込まれたデータは、Multidimensional Ring Buffer 1(121)の該当箇所に書き込まれる。図15〜図30を参照すると、Multidimensional Ring Buffer 1(121)の各位置には、物理アドレスが括弧付きでX1〜X9として示されており、その下に各位置に書き込まれたデータが示されている。データの書き込みには、Write Pointer(WP1)およびWrite Pointer(WP2)が用いられる。
Multidimensional Ring Buffer 1(121)には、Write Pointer(WP1)およびWrite Pointer(WP2)が示されている。初期状態では、Write Pointer(WP1)がX1を示しており、Write Pointer(WP2)がX9を示している。しかし、Write Pointer(WP1)およびWrite Pointer(WP2)それぞれの初期位置も限定されない。
まず、図15に示されるように、General Purpose Register130は、Road/Store Unit110を介して、初期位置に設定した読み込み対象領域22の全部からデータを読み込む。General Purpose Register130は、読み込み対象領域22の全部から読み込んだデータを、Multidimensional Ring Buffer 1(121)に書き込む。図15を参照すると、読み込み対象領域22から読み込まれたデータM00〜M22がX1〜X9に書き込まれている。
ALU140は、このようにしてMultidimensional Ring Buffer 1(121)に書き込まれたデータに基づく処理を実行する。具体的に、ALU140は、Multidimensional Ring Buffer 1(121)から、Read Pointerを用いてX1〜X9のデータを順に読み込み、X1〜X9のデータと係数データとを画素ごとに乗算し、画素ごとの乗算結果の和を算出する。ALU140は、処理の実行結果(乗算結果の和)を、Multidimensional Ring Buffer 2(122)の該当する書き込み対象領域に書き込む。
続いて、General Purpose Register130は、読み込み対象領域22を移動させる。最初は、読み込み対象領域22の移動方向が、外部メモリ20における「第1の次元の正方向」である場合を想定する。すなわち、Write Pointerとしては、第1の次元の正方向に対応するWrite Pointer(1D+)が用いられる場合を想定する。したがって、Write Pointer(1D+)に対応するWrite Pointer(WP1)が用いられる。
図16に示されるように、General Purpose Register130は、読み込み対象領域22(図15)を第1の次元の正方向31−1に所定の幅だけ移動させる(隣接する位置へ移動させる)。ここで、移動後の読み込み対象領域22(図16)のうち、データM10〜M22は、既にMultidimensional Ring Buffer 1(121)に書き込まれている。したがって、General Purpose Register130は、移動後の読み込み対象領域22(図16)のうち、第1の次元の正方向31−1の先端領域のデータ(データM30〜M32)だけを新たに読み込めばよい。なお、先端領域は、第1の次元の正方向31−1に所定の幅を有している。
ここで、図15に示された例において、Multidimensional Ring Buffer 1(121)の第1の次元の正方向31−1に対応する方向(1Dの正方向32−1)の後端領域のデータ(すなわち、X1、X2、X3のデータ)は、次の処理に用いられないと考えられる。そこで、図16に示されたように、General Purpose Register130は、先端領域のデータ(データM30〜M32)で、後端領域(すなわち、X1、X2、X3)の上書き(第1の上書き)を行う。なお、後端領域は、第1の次元の正方向31−1に対応する方向(1Dの正方向32−1)に所定の幅を有している。
より具体的に、General Purpose Register130は、Write Pointer(WP1)を後端領域に設定し、先端領域のデータ(データM30〜M32)をWrite Pointer(WP1)が示す位置に上書きする。例えば、General Purpose Register130は、Write Pointer(1D+)の動きに従って、Write Pointer(WP1)を、X1、X2、X3の順に移動させながら、先端領域のデータ(データM30〜M32)をWrite Pointer(WP1)が示す位置に順に上書きする。
その後、General Purpose Register130は、Write Pointer(1D+)の動きに従って、Write Pointer(WP1)をX4に移動させる。このとき、General Purpose Register130は、Write Pointer(WP2)がMultidimensional Ring Buffer 1(121)においてWrite Pointer(WP1)と対角に位置するようにWrite Pointer(WP2)を(X3に)移動させる。ここで、General Purpose Register130が、Write Pointer(WP2)を移動させるタイミングは限定されない。
例えば、General Purpose Register130は、Write Pointer(WP1)を、X1、X2、X3、X4の順に移動させるのに合わせて、Write Pointer(WP2)をX9、X1、X2、X3の順に移動させてもよい。しかし、Write Pointer(WP1)の移動のたびにWrite Pointer(WP2)も移動させるとすると、多くの消費電力が掛かってしまう。また、いずれにしてもWrite Pointer(WP1)がX4に到達するまで、Write Pointer(WP1)とWrite Pointer(WP2)との間で使用されるWrite Pointerの切り替えは行われない。
したがって、General Purpose Register130は、Write Pointer(WP1)がX3に到達するまではWrite Pointer(WP1)を移動させずに、Write Pointer(WP1)がX3からX4に移動するタイミングで、Write Pointer(WP2)をX9からX3に一気に移動させればよい。図16を参照すると、後端領域のデータ(すなわち、X1、X2、X3のデータ)が、先端領域のデータ(データM30〜M32)で上書きされた様子が示されている。
ALU140は、上書き後のMultidimensional Ring Buffer 1(121)のデータに基づく処理(第1の処理)を実行する。具体的に、ALU140は、上書き後のMultidimensional Ring Buffer 1(121)から、Read Pointerを用いてX1〜X9のデータを順に読み込み、X1〜X9のデータと係数データとを画素ごとに乗算し、画素ごとの乗算結果の和を算出する。ALU140は、処理の実行結果(乗算結果の和)を、Multidimensional Ring Buffer 2(122)の該当する書き込み対象領域に書き込む。
図17に示されるように、General Purpose Register130は、Write Pointer(WP1)のX4への移動によって、Write Pointer(WP1)を第1の次元の正方向31−1に対応する方向(1Dの正方向32−1)に移動させるポインタ移動を行う。それとともに、General Purpose Register130は、読み込み対象領域22(図16)を第1の次元の正方向31−1に移動させる(隣接する位置へ移動させる)領域移動を行う。
ここで、移動後の読み込み対象領域22(図17)のうち、データM20〜M32は、既にMultidimensional Ring Buffer 1(121)に書き込まれている。したがって、General Purpose Register130は、移動後の読み込み対象領域22(図17)のうち、第1の次元の正方向31−1の先端領域のデータ(データM40〜M42)だけを新たに読み込めばよい。
そして、図17に示された例において、移動後のWrite Pointer(WP1)(図17)が示す位置のデータ(すなわち、X4、X5、X6のデータ)は、次の処理に用いられないと考えられる。そこで、図17に示されたように、General Purpose Register130は、移動後の読み込み対象領域22(図17)のうち先端領域のデータ(データM40〜M42)で、移動後のWrite Pointer(WP1)(図17)が示す位置に上書き(第2の上書き)を行う。
例えば、General Purpose Register130は、Write Pointer(1D+)の動きに従って、Write Pointer(WP1)を、X4、X5、X6の順に移動させながら、先端領域のデータ(データM40〜M42)をWrite Pointer(WP1)が示す位置に順に上書きする。
その後、General Purpose Register130は、Write Pointer(1D+)の動きに従って、Write Pointer(WP1)をX7に移動させる。
このとき、General Purpose Register130は、Write Pointer(WP2)がMultidimensional Ring Buffer 1(121)においてWrite Pointer(WP1)と対角に位置するようにWrite Pointer(WP2)を移動させる。ここで、General Purpose Register130が、Write Pointer(WP2)を移動させるタイミングは上記と同様に限定されない。
ALU140は、上書き後のMultidimensional Ring Buffer 1(121)のデータに基づく処理(第2の処理)を実行する。第2の処理は第1の処理と同様の処理であってよい。ALU140は、第2の処理の実行結果を、Multidimensional Ring Buffer 2(122)の該当する書き込み対象領域に書き込む。
このようにして、Write Pointer(WP1)の移動(ポインタ移動)と読み込み対象領域22の移動(領域移動)とWrite Pointer(WP1)が示す位置への上書き(第2の上書き)と上書き後のMultidimensional Ring Buffer 1(121)のデータに基づく処理(第2の処理)との組み合わせが実行される。かかる組み合わせは、1回実行されてもよいし、複数回実行されてもよい。
かかる組み合わせが1または複数回実行された後、さらにWrite Pointer(WP1)の移動(ポインタ移動)を行うに際して、Write Pointer(WP1)を移動させてしまうとWrite Pointer(WP1)がMultidimensional Ring Buffer 1(121)の外側に出てしまう場合が想定される。かかる場合、General Purpose Register130は、Write Pointer(WP1)を、第1の次元の正方向31−1に対応する方向(1Dの正方向32−1)の後端領域に戻せばよい。
また、かかる組み合わせが1または複数回実行された後、さらに読み込み対象領域22の移動(領域移動)を行うに際して所定の条件が満たされた場合が想定される。かかる場合、General Purpose Register130は、読み込み対象領域22を第1の次元の方向とは異なる第2の次元の方向に移動させればよい。所定の条件は限定されない。例えば、所定の条件は、読み込み対象領域22を第1の次元の方向に移動させると読み込み対象領域22が外部メモリ20の対象範囲21の外側に出てしまうという条件であってよい。
そして、General Purpose Register130は、移動後の読み込み対象領域22のうち第2の次元の方向の先端領域のデータで、Multidimensional Ring Buffer 1(121)のうち第2の次元の方向に対応する方向の後端領域の上書き(第3の上書き)を行えばよい。
より具体的には、General Purpose Register130は、Write Pointer(WP1)を第2の次元の方向に対応する方向の後端領域に設定し、移動後の読み込み対象領域22のうち第2の次元の方向の先端領域のデータで、Write Pointer(WP1)が示す位置に上書きすることによって、上書き(第3の上書き)を行えばよい。
ALU140は、第3の上書き後のMultidimensional Ring Buffer 1(121)のデータに基づく処理(第3の処理)を実行する。第3の処理は、第1の処理と同様の処理であってよい。ALU140は、第3の処理の実行結果を、Multidimensional Ring Buffer 2(122)の該当する書き込み対象領域に書き込む。
以下では、かかる組み合わせが2回実行される場合を想定する。1回目の実行結果は、図17に示された通りである。また、2回目の実行結果は、図18に示された通りである。図18を参照すると、図17に示された例と同様にして、読み込み対象領域22、Write Pointer(WP1)およびWrite Pointer(WP2)が移動され、移動後の読み込み対象領域22のうち先端領域のデータ(データM50〜M52)で、Write Pointer(WP1)が示す位置に上書きが行われている。
図18に示された例において、さらにWrite Pointer(WP1)を第1の次元の正方向31−1に対応する方向(1Dの正方向32−1)に移動させてしまうとWrite Pointer(WP1)がMultidimensional Ring Buffer 1(121)の外側に出てしまう。そこで、図19に示されるように、General Purpose Register130は、Write Pointer(WP1)を、第1の次元の正方向31−1に対応する方向(1Dの正方向32−1)の後端領域に戻せばよい。
具体的に、General Purpose Register130は、Write Pointer(1D+)の動きに従って、Write Pointer(WP1)を、X7、X8、X9の順に移動させながら、先端領域のデータ(データM50〜M52)をWrite Pointer(WP1)が示す位置に順に上書きする。図19に示されるように、General Purpose Register130は、Write Pointer(1D+)の動きに従って、Write Pointer(WP1)をX1に移動させる。なお、Write Pointer(WP2)は、Write Pointer(WP1)と対角に位置するように(X9に)移動される。
また、図18に示された例において、さらに読み込み対象領域22を第1の次元の正方向31−1に移動させてしまうと読み込み対象領域22が外部メモリ20の対象範囲21の外側に出てしまう。そこで、図19に示されるように、General Purpose Register130は、読み込み対象領域22の移動方向を第1の次元の正方向31−1とは異なる第2の次元の方向(正方向31−2)に変更すればよい。変更先の移動方向は限定されない。
そして、General Purpose Register130は、読み込み対象領域22の移動方向の変更とともに、使用する論理的なWrite Pointerも変更する。図19に示された例では、General Purpose Register130は、読み込み対象領域22の移動方向を第2の次元の正方向31−2に変更したため、第2の次元の正方向31−2に対応するWrite Pointer(2D+)に、使用する論理的なWrite Pointerを変更する。
General Purpose Register130は、Write Pointer(2D+)の動きに従って、Write Pointer(WP1)を、X1、X4、X7の順に移動させながら、先端領域のデータ(データM33、M43、M53)をWrite Pointer(WP1)が示す位置に順に上書きする。これによって、上記した第3の上書きが行われる。図20に示されるように、General Purpose Register130は、Write Pointer(2D+)の動きに従って、Write Pointer(WP1)をX2に移動させる。なお、Write Pointer(WP2)は、Write Pointer(WP1)と対角に位置するように(X7に)移動される。
読み込み対象領域22の移動方向は、第2の次元の正方向31−2のままでもよい。かかる場合には、General Purpose Register130は、引き続きWrite Pointer(WP1)を第2の次元の正方向31−2に対応する方向(2Dの正方向32−2)に移動させるとともに、外部メモリ20において読み込み対象領域22を第2の次元の正方向31−2に移動させる。General Purpose Register130は、移動後の読み込み対象領域22のうち第2の次元の正方向31−2の先端領域のデータで、移動後のWrite Pointer(WP1)が示す位置に第4の上書きを行う。
そして、ALU140は、第4の上書き後のMultidimensional Ring Buffer 1(121)のデータに基づく処理(第4の処理)を実行する。第4の処理は、第1の処理と同様の処理であってよい。ALU140は、第4の処理の実行結果を、Multidimensional Ring Buffer 2(122)の該当する書き込み対象領域に書き込む。
しかし、以下では、General Purpose Register130は、読み込み対象領域22の移動方向を、第2の次元の正方向31−2から変更する場合を想定する。図20に示された例では、General Purpose Register130は、読み込み対象領域22の移動方向を第2の次元の正方向31−2とは異なる第1の次元の方向(負方向31−3)に変更している。変更先の移動方向は限定されない。
General Purpose Register130は、読み込み対象領域22の移動方向の変更とともに、使用する論理的なWrite Pointerも変更する。図20に示された例では、General Purpose Register130は、読み込み対象領域22の移動方向を第1の次元の負方向31−3に変更したため、第1の次元の負方向31−3に対応するWrite Pointer(1D−)に、使用する論理的なWrite Pointerを変更する。そして、使用される物理的なWrite Pointerも、Write Pointer(1D−)に対応するWrite Pointer(WP2)に切り替えられる。
General Purpose Register130は、Write Pointer(1D−)の動きに従って、Write Pointer(WP2)を、X7、X9、X8の順に移動させながら、先端領域のデータ(データM23〜M21)をWrite Pointer(WP2)が示す位置に順に上書きする。ALU140は、上書き後のMultidimensional Ring Buffer 1(121)のデータに基づく処理を実行し、実行結果をMultidimensional Ring Buffer 2(122)の該当する書き込み対象領域に書き込む。図21に示されるように、General Purpose Register130は、Write Pointer(1D−)の動きに従って、Write Pointer(WP2)をX4に移動させる。なお、Write Pointer(WP1)は、Write Pointer(WP2)と対角に位置するように(X8に)移動される。
以降は、上記と同様の処理が繰り返し実行される。図21に示されるように、General Purpose Register130は、引き続き読み込み対象領域22を第1の次元の負方向31−3に移動させる。そして、General Purpose Register130は、Write Pointer(1D−)の動きに従って、Write Pointer(WP2)を、X4、X6、X5の順に移動させながら、先端領域のデータ(データM13〜M11)をWrite Pointer(WP2)が示す位置に順に上書きする。ALU140は、上書き後のMultidimensional Ring Buffer 1(121)のデータに基づく処理を実行し、実行結果をMultidimensional Ring Buffer 2(122)の該当する書き込み対象領域に書き込む。
そして、図22に示されるように、General Purpose Register130は、Write Pointer(1D−)の動きに従って、Write Pointer(WP2)をX1に移動させる。これによって、Write Pointer(WP2)が第1の次元の負方向31−3に対応する方向(1Dの負方向32−3)に移動される。このとき、図22に示されるように、General Purpose Register130は、Write Pointer(WP1)がMultidimensional Ring Buffer 1(121)においてWrite Pointer(WP2)と対角に位置するようにWrite Pointer(WP1)を(X5に)移動させる。
続いて、図22に示されるように、General Purpose Register130は、引き続き読み込み対象領域22を第1の次元の負方向31−3に移動させる。そして、General Purpose Register130は、Write Pointer(1D−)の動きに従って、Write Pointer(WP2)を、X1、X3、X2の順に移動させながら、先端領域のデータ(データM03〜M01)をWrite Pointer(WP2)が示す位置に順に上書きする。ALU140は、上書き後のMultidimensional Ring Buffer 1(121)のデータに基づく処理を実行し、実行結果をMultidimensional Ring Buffer 2(122)の該当する書き込み対象領域に書き込む。
そして、図23に示されるように、General Purpose Register130は、Write Pointer(1D−)の動きに従って、Write Pointer(WP2)をX7に移動させる。これによって、Write Pointer(WP2)が第1の次元の負方向31−3に対応する方向(1Dの負方向32−3)に移動される。このとき、図23に示されるように、General Purpose Register130は、Write Pointer(WP1)がMultidimensional Ring Buffer 1(121)においてWrite Pointer(WP2)と対角に位置するようにWrite Pointer(WP1)を(X2に)移動させる。
続いて、図23に示されるように、General Purpose Register130は、読み込み対象領域22を第2の次元の正方向31−2に移動させる。使用する論理的なWrite Pointerは、第2の次元の正方向31−2に対応するWrite Pointer(2D+)に変更される。そして、使用される物理的なWrite Pointerも、Write Pointer(2D+)に対応するWrite Pointer(WP1)に切り替えられる。General Purpose Register130は、Write Pointer(2D+)の動きに従って、Write Pointer(WP1)を、X2、X5、X8の順に移動させながら、先端領域のデータ(データM04、M14、M24)をWrite Pointer(WP1)が示す位置に順に上書きする。ALU140は、上書き後のMultidimensional Ring Buffer 1(121)のデータに基づく処理を実行し、実行結果をMultidimensional Ring Buffer 2(122)の該当する書き込み対象領域に書き込む。
そして、図24に示されるように、General Purpose Register130は、Write Pointer(2D+)の動きに従って、Write Pointer(WP1)をX3に移動させる。これによって、Write Pointer(WP1)が第2の次元の正方向31−2に対応する方向(2Dの正方向32−2)に移動される。このとき、図24に示されるように、General Purpose Register130は、Write Pointer(WP2)がMultidimensional Ring Buffer 1(121)においてWrite Pointer(WP1)と対角に位置するようにWrite Pointer(WP2)を(X8に)移動させる。
続いて、図24に示されるように、General Purpose Register130は、読み込み対象領域22を第1の次元の正方向31−1に移動させる。使用する論理的なWrite Pointerは、第1の次元の正方向31−1に対応するWrite Pointer(1D+)に変更される。General Purpose Register130は、Write Pointer(1D+)の動きに従って、Write Pointer(WP1)を、X3、X1、X2の順に移動させながら、先端領域のデータ(データM32〜M34)をWrite Pointer(WP1)が示す位置に順に上書きする。ALU140は、上書き後のMultidimensional Ring Buffer 1(121)のデータに基づく処理を実行し、実行結果をMultidimensional Ring Buffer 2(122)の該当する書き込み対象領域に書き込む。
そして、図25に示されるように、General Purpose Register130は、Write Pointer(2D+)の動きに従って、Write Pointer(WP1)をX6に移動させる。これによって、Write Pointer(WP1)が第1の次元の正方向31−1に対応する方向(1Dの正方向32−1)に移動される。このとき、図25に示されるように、General Purpose Register130は、Write Pointer(WP2)がMultidimensional Ring Buffer 1(121)においてWrite Pointer(WP1)と対角に位置するようにWrite Pointer(WP2)を(X2に)移動させる。
続いて、図25に示されるように、General Purpose Register130は、引き続き読み込み対象領域22を第1の次元の正方向31−1に移動させる。General Purpose Register130は、Write Pointer(1D+)の動きに従って、Write Pointer(WP1)を、X6、X4、X5の順に移動させながら、先端領域のデータ(データM42〜M44)をWrite Pointer(WP1)が示す位置に順に上書きする。ALU140は、上書き後のMultidimensional Ring Buffer 1(121)のデータに基づく処理を実行し、実行結果をMultidimensional Ring Buffer 2(122)の該当する書き込み対象領域に書き込む。
そして、図26に示されるように、General Purpose Register130は、Write Pointer(1D+)の動きに従って、Write Pointer(WP1)をX9に移動させる。これによって、Write Pointer(WP1)が第1の次元の正方向31−1に対応する方向(1Dの正方向32−1)に移動される。このとき、図26に示されるように、General Purpose Register130は、Write Pointer(WP2)がMultidimensional Ring Buffer 1(121)においてWrite Pointer(WP1)と対角に位置するようにWrite Pointer(WP2)を(X5に)移動させる。
続いて、図26に示されるように、General Purpose Register130は、引き続き読み込み対象領域22を第1の次元の正方向31−1に移動させる。General Purpose Register130は、Write Pointer(1D+)の動きに従って、Write Pointer(WP1)を、X9、X7、X8の順に移動させながら、先端領域のデータ(データM52〜M54)をWrite Pointer(WP1)が示す位置に順に上書きする。ALU140は、上書き後のMultidimensional Ring Buffer 1(121)のデータに基づく処理を実行し、実行結果をMultidimensional Ring Buffer 2(122)の該当する書き込み対象領域に書き込む。
そして、図27に示されるように、General Purpose Register130は、Write Pointer(1D+)の動きに従って、Write Pointer(WP1)をX3に移動させる。これによって、Write Pointer(WP1)が第1の次元の正方向31−1に対応する方向(1Dの正方向32−1)に移動される。このとき、図27に示されるように、General Purpose Register130は、Write Pointer(WP2)がMultidimensional Ring Buffer 1(121)においてWrite Pointer(WP1)と対角に位置するようにWrite Pointer(WP2)を(X8に)移動させる。
続いて、図27に示されるように、General Purpose Register130は、読み込み対象領域22を第2の次元の正方向31−2に移動させる。使用する論理的なWrite Pointerは、第2の次元の正方向31−2に対応するWrite Pointer(2D+)に変更される。General Purpose Register130は、読み込み対象領域22を第2の次元の正方向31−2に移動させる。General Purpose Register130は、Write Pointer(2D+)の動きに従って、Write Pointer(WP1)を、X3、X6、X9の順に移動させながら、先端領域のデータ(データM35、M45、M55)をWrite Pointer(WP1)が示す位置に順に上書きする。ALU140は、上書き後のMultidimensional Ring Buffer 1(121)のデータに基づく処理を実行し、実行結果をMultidimensional Ring Buffer 2(122)の該当する書き込み対象領域に書き込む。
そして、図28に示されるように、General Purpose Register130は、Write Pointer(2D+)の動きに従って、Write Pointer(WP1)をX1に移動させる。これによって、Write Pointer(WP1)が第2の次元の正方向31−2に対応する方向(2Dの正方向32−2)に移動される。このとき、図28に示されるように、General Purpose Register130は、Write Pointer(WP2)がMultidimensional Ring Buffer 1(121)においてWrite Pointer(WP1)と対角に位置するようにWrite Pointer(WP2)を(X9に)移動させる。
続いて、図28に示されるように、General Purpose Register130は、読み込み対象領域22を第1の次元の負方向31−3に移動させる。使用する論理的なWrite Pointerは、第1の次元の負方向31−3に対応するWrite Pointer(1D−)に変更される。そして、使用される物理的なWrite Pointerも、Write Pointer(1D−)に対応するWrite Pointer(WP2)に切り替えられる。General Purpose Register130は、Write Pointer(1D−)の動きに従って、Write Pointer(WP2)を、X9、X8、X7の順に移動させながら、先端領域のデータ(データM25〜M23)をWrite Pointer(WP2)が示す位置に順に上書きする。ALU140は、上書き後のMultidimensional Ring Buffer 1(121)のデータに基づく処理を実行し、実行結果をMultidimensional Ring Buffer 2(122)の該当する書き込み対象領域に書き込む。
そして、図29に示されるように、General Purpose Register130は、Write Pointer(1D−)の動きに従って、Write Pointer(WP2)をX6に移動させる。これによって、Write Pointer(WP2)が第1の次元の負方向31−3に対応する方向(1Dの負方向32−3)に移動される。このとき、図29に示されるように、General Purpose Register130は、Write Pointer(WP1)がMultidimensional Ring Buffer 1(121)においてWrite Pointer(WP2)と対角に位置するようにWrite Pointer(WP1)を(X7に)移動させる。
続いて、図29に示されるように、General Purpose Register130は、引き続き読み込み対象領域22を第1の次元の負方向31−3に移動させる。General Purpose Register130は、Write Pointer(1D−)の動きに従って、Write Pointer(WP2)を、X6、X5、X4の順に移動させながら、先端領域のデータ(データM15〜M13)をWrite Pointer(WP2)が示す位置に順に上書きする。ALU140は、上書き後のMultidimensional Ring Buffer 1(121)のデータに基づく処理を実行し、実行結果をMultidimensional Ring Buffer 2(122)の該当する書き込み対象領域に書き込む。
そして、図30に示されるように、General Purpose Register130は、Write Pointer(1D−)の動きに従って、Write Pointer(WP2)をX3に移動させる。これによって、Write Pointer(WP2)が第1の次元の負方向31−3に対応する方向(1Dの負方向32−3)に移動される。このとき、図30に示されるように、General Purpose Register130は、Write Pointer(WP1)がMultidimensional Ring Buffer 1(121)においてWrite Pointer(WP2)と対角に位置するようにWrite Pointer(WP1)を(X4に)移動させる。
続いて、図30に示されるように、General Purpose Register130は、引き続き読み込み対象領域22を第1の次元の負方向31−3に移動させる。General Purpose Register130は、Write Pointer(1D−)の動きに従って、Write Pointer(WP2)を、X3、X2、X1の順に移動させながら、先端領域のデータ(データM05〜M03)をWrite Pointer(WP2)が示す位置に順に上書きする。ALU140は、上書き後のMultidimensional Ring Buffer 1(121)のデータに基づく処理を実行し、実行結果をMultidimensional Ring Buffer 2(122)の該当する書き込み対象領域に書き込む。
以上により、Multidimensional Ring Buffer 2(122)には、外部メモリ20の対象範囲21の内部を移動した読み込み対象領域22の各位置に対応する実行結果が書き込まれる。General Purpose Register130は、Multidimensional Ring Buffer 2(122)のデータを出力データとして、Road/Store Unit110を介して、外部メモリ20の書き込み対象領域27に書き込む。
以上、情報処理装置10による具体的な処理例について説明した。
(1.2.4.プログラム例)
上記したようにして、情報処理装置10による処理が実行される。情報処理装置10による処理は、プログラムに基づいて実行され得る。以下では、情報処理装置10による処理を実現するためのプログラム例について説明する。なお、以下に説明するプログラム例は、図15〜図30に示された処理例に対応しているが、情報処理装置10による処理を実現するためのプログラムの一例を示したに過ぎない。したがって、情報処理装置10による処理を実現するためのプログラムは、以下に説明するプログラム例に限定されない。
図31は、本開示の実施形態に係る情報処理装置10を実現するためのプログラムにおいて使用される各種命令の定義を示す図である。図31に示された命令定義PG10のように、プログラムにおいて使用される各種命令が定義され得る。図32〜図34は、本開示の実施形態に係る情報処理装置10を実現するためのプログラムの例を示す図である。本開示の実施形態に係る情報処理装置10を実現するためのプログラムは、図32〜図34に示されたプログラムPG21〜PG23のように実現され得る。
以上、情報処理装置10による処理を実現するためのプログラム例について説明した。
(1.2.5.動作例)
続いて、情報処理装置10の動作例について説明する。図35は、本開示の実施形態に係る情報処理装置10の動作例を示すフローチャートの注釈を示す図である。図36〜図38は、本開示の実施形態に係る情報処理装置10の動作例を示すフローチャートである。なお、以下に説明する動作例も、図15〜図30に示された処理例に対応しているが、情報処理装置10の動作の一例を示したに過ぎない。したがって、情報処理装置10の動作は、以下に説明する動作例に限定されない。図36〜図38に登場する各変数は、図35に示されたようにして使用される。
図36に示されるように、General Purpose Register130は、係数を読み込むバッファBUF0の次元数とサイズを設定する(S11)。そして、General Purpose Register130は、Road/Store Unit110を介して係数を外部メモリからバッファBUF0へロードする(S12)。
General Purpose Register130は、入力データを読み込むバッファBUF1の次元数とサイズを設定する(S13)。General Purpose Register130は、入力データのアドレスポインタ(入力データが読み出される外部メモリにおけるアドレス)をR0にセットする(S14)。General Purpose Register130は、アドレスポインタの示す外部メモリから入力データをバッファBUF1へロードする(S15)。
General Purpose Register130は、出力データを読み込むバッファBUF2の次元数とサイズを設定する(S16)。General Purpose Register130は、出力データのアドレスポインタ(出力データが書き込まれる外部メモリにおけるアドレス)をR1にセットする(S17)。そして、General Purpose Register130は、R2に(出力データサイズ−1=)15をセットする(S18)。General Purpose Register130は、列の偶奇判断用レジスタR4に0(偶数列)をセットする(S19)。
続いて、図37に示されるように、General Purpose Register130は、R3にフィルタ係数のサイズ(3×3=9)−1=8をセットする(S21)。General Purpose Register130は、R5を0にクリアする(S22)。ALU140は、バッファBUF0とバッファBUF1とを画素ごとに乗算して乗算結果をR5に加算し(S23)、R3をデクリメントする(S24)。
General Purpose Register130は、R3が0と等しくない場合には(S25において「NO」)、S23に戻る。一方、General Purpose Register130は、R3が0と等しい場合には(S25において「YES」)、R5をバッファBUF2へ転送する(S26)。General Purpose Register130は、外部メモリからのデータ読み出し列が4度に1度変わるため、R2を4で除した余りを算出する。
General Purpose Register130は、R2を4で除した余りが0と等しくない場合には(S27において「NO」)、S41(図38)に進む。一方、General Purpose Register130は、R2を4で除した余りが0と等しい場合には(S27において「YES」)、S28に進む。
General Purpose Register130は、S28に進むと、Write Pointer(2D+)を使用して外部メモリから差分データを読み込む(S28)。General Purpose Register130は、R4が0である場合(すなわち、外部メモリからのデータ読み出し列が偶数列である場合)(S29において「YES」)、R4に1(奇数列)をセットし(S30)、S32に進む。一方、General Purpose Register130は、R4が0でない場合(すなわち、外部メモリからのデータ読み出し列が奇数列である場合)(S29において「NO」)、R4に0(偶数列)をセットし(S31)、S32に進む。General Purpose Register130は、S32に進むと、R2をデクリメントし(S32)、S21に戻る。
一方、General Purpose Register130は、S41(図38)に進むと、R4が0である場合(すなわち、外部メモリからのデータ読み出し列が偶数列である場合)(S41において「YES」)、Write Pointer(1D+)を使用して外部メモリから差分データを読み込み(S42)、S44に進む。一方、General Purpose Register130は、R4が0でない場合(すなわち、外部メモリからのデータ読み出し列が奇数列である場合)(S41において「NO」)、Write Pointer(1D−)を使用して外部メモリから差分データを読み込み(S43)、S44に進む。
General Purpose Register130は、S44に進むと、R2をデクリメントする(S44)。そして、General Purpose Register130は、R2が0と等しくない場合には(S45において「NO」)、S21(図37)に戻る。一方、General Purpose Register130は、R2が0と等しい場合には(S45において「YES」)、バッファBUF2からアドレスポインタR1の示す外部メモリへストアして(S46)、動作を終了する。
以上、情報処理装置10の動作例について説明した。
<2.効果>
以上説明したように、本開示の実施形態によれば、既に外部メモリから読み込まれてリングバッファにストアされているデータと同じデータを使用する場合には、外部メモリからの再度のデータの読み込みを省略する。すなわち、本開示の実施形態では、既に外部メモリから読み込まれてリングバッファにストアされているデータを再利用することにする。これによって、外部メモリへのデータフェッチ回数が低減されるため、既に読み込んだデータを外部メモリから再度読み込むための時間および消費電力を低減することが可能である。
特に、演算に同じデータが繰り返し使用される場合がある。例えば、画像処理、DNN(Deep Learning Network)などにおいては、同じデータが繰り返し使用される場合が多い。繰り返し同じデータが使用される場合であっても、演算のたびに外部メモリからリングバッファにデータを読み込む必要があるとすると、既に読み込んだデータを外部メモリから再度読み込むための時間および消費電力が無駄になる。本開示の実施形態に係る情報処理装置10は、このように同じデータが繰り返し使用される場合に好適である。
具体的に、上記した例と同様に2次元画像フィルタが使用される場合を想定する。すなわち、画像サイズが6×6であり、係数データおよび入力データそれぞれのサイズが3×3であり、出力データサイズが4×4であるという場合を想定する。かかる場合において、一般的なマイクロプロセッサが使用される場合および本開示の実施形態に係る情報処理装置10が使用される場合それぞれについて外部メモリへのアクセス回数を計算する。
まず、一般的なマイクロプロセッサが使用される場合、1つあたりの演算結果を得るために、係数のロードが9回必要であり、入力データのロードが9回必要である場合を想定すると、外部メモリからマイクロプロセッサ内の記憶領域へのロード回数は、9+9=18である。そして、出力データサイズが16である場合を想定すると、出力データ全体を得るために必要なロード回数は、18×16=288である。
一方、本開示の実施形態に係る情報処理装置10が使用される場合を想定すると、1つ目の演算結果を得るために必要なロード回数は、外部メモリからリングバッファへのロード回数は、9+9=18である。しかし、残りの15個の演算結果は、差分のみロードすればよいため、1つあたりの演算結果を得るために必要なロード回数は、入力データのロードが3回である。したがって、出力データ全体を得るために必要なロード回数は、18+15×3=63で済む。
<3.変形例>
以上、添付図面を参照しながら本開示の好適な実施形態について詳細に説明したが、本開示の技術的範囲はかかる例に限定されない。本開示の技術分野における通常の知識を有する者であれば、特許請求の範囲に記載された技術的思想の範疇内において、各種の変更例または修正例に想到し得ることは明らかであり、これらについても、当然に本開示の技術的範囲に属するものと了解される。
上記した例では、Multidimensional Ring Buffer 0〜1(120〜121)が2次元を有する場合を主に想定した。すなわち、上記した例では、入力データおよび係数データそれぞれが書き込まれるバッファが2次元を有する場合を主に想定した。しかし、入力データおよび係数データそれぞれが書き込まれるバッファは、複数次元を有すればよい。まず、入力データおよび係数データそれぞれが書き込まれるバッファが3次元を有する場合を想定する。図39は、入力データが書き込まれるバッファが3次元を有する場合の例を示す図である。図39に示されるように、入力データが書き込まれるバッファは、N1軸、N2軸およびN3軸を有している。
入力データおよび係数データそれぞれが書き込まれるバッファが3次元を有する場合であっても、当該バッファが2次元を有する場合と同様に、Read Pointerが1つ使用され、Write Pointerも2つ(Write Pointer(WP1)およびWrite Pointer(WP2))が使用されればよい。そして、当該バッファが3次元を有する場合であっても、当該バッファが2次元を有する場合と同様に、Write Pointer(WP1)の初期位置が原点Oであり、Write Pointer(WP2)の初期位置が点Aである。
図39に示されるように、点Aは、各次元の要素の長さをAm(mは次元数)とすると、点A=(A1,A2,A3)とベクトルとして表現され得る。そして、入力データおよび係数データそれぞれが書き込まれるバッファが3次元を有する場合、Write Pointer(WP1)およびWrite Pointer(WP2)それぞれは、以下のようにして使用されればよい。
なお、Write Pointer(WP1)を「Write Pointer(+)」と表現し、Write Pointer(WP2)を「Write Pointer(−)」と表現する。また、Nm軸の正方向に移動する論理的なWrite Pointerを「Write Pointer(NmD+)」と表現し、Nm軸の負方向に移動する論理的なWrite Pointerを「Write Pointer(NmD−)」と表現する。
Write Pointer(+)が使用される場合
・+N1軸方向にWrite Pointer(+)が1つ移動する場合(すなわち、Write Pointer N1D+が使用される場合)、N2軸方向およびN3軸方向のベクトルによって作られる面のうち原点Oを含む面のデータを、外部メモリから読み込まれたデータで上書きする。
・+N2軸方向にWrite Pointer(+)が1つ移動する場合(すなわち、Write Pointer N2D+が使用される場合)、N3軸方向およびN1軸方向のベクトルによって作られる面のうち原点Oを含む面のデータを、外部メモリから読み込まれたデータで上書きする。
・+N3軸方向にWrite Pointer(+)が1つ移動する場合(すなわち、Write Pointer N3D+が使用される場合)、N1軸方向およびN2軸方向のベクトルによって作られる面のうち原点Oを含む面のデータを、外部メモリから読み込まれたデータで上書きする。
Write Pointer(−)が使用される場合
・−N3軸方向にWrite Pointer(−)が1つ移動する場合(すなわち、Write Pointer N3D−が使用される場合)、N2軸方向およびN1軸方向のベクトルによって作られる面のうち点Aを含む面のデータを、外部メモリから読み込まれたデータで上書きする。
・−N1軸方向にWrite Pointer(−)が1つ移動する場合(すなわち、Write Pointer N1D−が使用される場合)、N3軸方向およびN2軸方向のベクトルによって作られる面のうち点Aを含む面のデータを、外部メモリから読み込まれたデータで上書きする。
・−N2軸方向にWrite Pointer(−)が1つ移動する場合(すなわち、Write Pointer N2D−が使用される場合)、N1軸方向およびN3軸方向のベクトルによって作られる面のうち点Aを含む面のデータを、外部メモリから読み込まれたデータで上書きする。
続いて、入力データおよび係数データそれぞれが書き込まれるバッファが複数次元(n次元)を有する場合を想定する(nは2以上の整数)。入力データおよび係数データそれぞれが書き込まれるバッファがn次元を有する場合、当該バッファが2次元を有する場合と同様に、Read Pointerが1つ使用され、Write Pointerも2つ(Write Pointer(+)およびWrite Pointer(−))が使用されればよい。そして、当該バッファがn次元を有する場合、当該バッファが2次元を有する場合と同様に、Write Pointer(+)の初期位置が原点Oであり、Write Pointer(−)の初期位置が点Aである。
点Aは、各次元の要素の長さをAm(mは次元数)とすると、点A=(A1,A2,A3,・・・・,An)とベクトルとして表現され得る。そして、入力データおよび係数データそれぞれが書き込まれるバッファがn次元を有する場合、Write Pointer(+)およびWrite Pointer(−)それぞれは、以下のようにして使用されればよい。
Write Pointer(+)が使用される場合
・+Nn軸方向にWrite Pointer(+)が1つ移動する場合(すなわち、Write Pointer NnD+が使用される場合)、N1軸方向、N2軸方向、N3軸方向、・・・、Nn−1軸方向のベクトルによって作られる面のうち原点Oを含む面のデータを、外部メモリから読み込まれたデータで上書きする。
・+Nn−1軸方向にWrite Pointer(+)が1つ移動する場合(すなわち、Write Pointer Nn−1D+が使用される場合)、Nn軸方向、N1軸方向、N2軸方向、・・・、Nn−2軸方向のベクトルによって作られる面のうち原点Oを含む面のデータを、外部メモリから読み込まれたデータで上書きする。
・・・・・(中略)・・・・・
・+N1軸方向にWrite Pointer(+)が1つ移動する場合(すなわち、Write Pointer N1D+が使用される場合)、N2軸方向、N3軸方向、N4軸方向、・・・、Nn軸方向のベクトルによって作られる面のうち原点Oを含む面のデータを、外部メモリから読み込まれたデータで上書きする。
Write Pointer(−)が使用される場合
・−Nn軸方向にWrite Pointer(−)が1つ移動する場合(すなわち、Write Pointer NnD−が使用される場合)、Nn−1軸方向、Nn−2軸方向、Nn−3軸方向、・・・、N1軸方向のベクトルによって作られる面のうち点Aを含む面のデータを、外部メモリから読み込まれたデータで上書きする。
・−Nn−1軸方向にWrite Pointer(−)が1つ移動する場合(すなわち、Write Pointer Nn−1D−が使用される場合)、Nn−2軸方向、Nn−3軸方向、Nn−4軸方向、・・・、N1軸方向、Nn軸方向のベクトルによって作られる面のうち点Aを含む面のデータを、外部メモリから読み込まれたデータで上書きする。
・・・・・(中略)・・・・・
・−N1軸方向にWrite Pointer(−)が1つ移動する場合(すなわち、Write Pointer N1D−が使用される場合)、Nn軸方向、Nn−1軸方向、Nn−2軸方向、・・・・、N3軸方向、N2軸方向のベクトルによって作られる面のうち点Aを含む面のデータを、外部メモリから読み込まれたデータで上書きする。
また、本明細書に記載された効果は、あくまで説明的または例示的なものであって限定的ではない。つまり、本開示に係る技術は、上記の効果とともに、または上記の効果に代えて、本明細書の記載から当業者には明らかな他の効果を奏し得る。
なお、以下のような構成も本開示の技術的範囲に属する。
(1)
複数次元を有する外部メモリの読み込み対象領域から読み込んだデータを、前記複数次元を有する記憶領域に書き込む記憶制御部と、
前記記憶領域のデータに基づく処理を実行する処理部と、を備え、
前記記憶制御部は、前記外部メモリにおいて前記読み込み対象領域を第1の次元方向に移動させ、移動後の前記読み込み対象領域のうち前記第1の次元方向の先端領域のデータで、前記記憶領域のうち前記第1の次元方向に対応する方向の後端領域の第1の上書きを行い、
前記処理部は、前記第1の上書き後の前記記憶領域のデータに基づく第1の処理を実行する、
情報処理装置。
(2)
前記記憶制御部は、前記外部メモリにおいて前記読み込み対象領域を前記第1の次元方向に所定の幅だけ移動させ、
前記第1の次元方向の先端領域は、前記第1の次元方向に前記所定の幅を有し、
前記第1の次元方向に対応する方向の後端領域は、前記第1の次元方向に対応する方向に前記所定の幅を有する、
前記(1)に記載の情報処理装置。
(3)
前記記憶制御部は、第1のポインタを前記第1の次元方向に対応する方向の後端領域に設定し、前記先端領域のデータで前記第1のポインタが示す位置に上書きすることによって、前記第1の上書きを行う、
前記(2)に記載の情報処理装置。
(4)
前記記憶制御部は、前記第1のポインタを前記第1の次元方向に対応する方向に移動させるポインタ移動と、前記外部メモリにおいて前記読み込み対象領域を前記第1の次元方向に移動させる領域移動とを行い、移動後の前記読み込み対象領域のうち前記第1の次元方向の先端領域のデータで、移動後の前記第1のポインタが示す位置に第2の上書きを行い、
前記処理部は、前記第2の上書き後の前記記憶領域のデータに基づく第2の処理を実行する、
前記(3)に記載の情報処理装置。
(5)
前記記憶制御部は、前記第1のポインタを前記第1の次元方向に対応する方向に前記所定の幅だけ移動させる、
前記(4)に記載の情報処理装置。
(6)
前記ポインタ移動と前記領域移動と前記第2の上書きと前記第2の処理との組み合わせが1または複数回実行される、
前記(4)または(5)に記載の情報処理装置。
(7)
前記記憶制御部は、前記ポインタ移動と前記領域移動と前記第2の上書きと前記第2の処理との組み合わせが1または複数回実行された後、さらに前記ポインタ移動を行うに際して、前記第1のポインタを移動させると前記第1のポインタが前記記憶領域の外側に出てしまう場合、前記第1のポインタを前記第1の次元方向に対応する方向の後端領域に戻す、
前記(6)に記載の情報処理装置。
(8)
前記記憶制御部は、前記ポインタ移動と前記領域移動と前記第2の上書きと前記第2の処理との組み合わせが1または複数回実行された後、さらに前記領域移動を行うに際して所定の条件が満たされた場合に、前記読み込み対象領域を前記第1の次元方向とは異なる第2の次元方向に移動させ、移動後の前記読み込み対象領域のうち前記第2の次元方向の先端領域のデータで、前記記憶領域のうち前記第2の次元方向に対応する方向の後端領域の第3の上書きを行い、
前記処理部は、前記第3の上書き後の前記記憶領域のデータに基づく第3の処理を実行する、
前記(6)または(7)に記載の情報処理装置。
(9)
前記所定の条件は、前記読み込み対象領域を前記第1の次元方向に移動させると前記読み込み対象領域が前記外部メモリの対象範囲の外側に出てしまうという条件である、
前記(8)に記載の情報処理装置。
(10)
前記記憶制御部は、第2のポインタを前記第2の次元方向に対応する方向の後端領域に設定し、前記第2の次元方向の先端領域のデータで前記第2のポインタが示す位置に上書きすることによって、前記第3の上書きを行う、
前記(8)または(9)に記載の情報処理装置。
(11)
前記記憶制御部は、前記第2のポインタを前記第2の次元方向に対応する方向に移動させるとともに、前記外部メモリにおいて前記読み込み対象領域を前記第2の次元方向に移動させ、移動後の前記読み込み対象領域のうち前記第2の次元方向の先端領域のデータで、移動後の前記第2のポインタが示す位置に第4の上書きを行い、
前記処理部は、前記第4の上書き後の前記記憶領域のデータに基づく第4の処理を実行する、
前記(10)に記載の情報処理装置。
(12)
前記第1の次元方向と前記第2の次元方向との正負の別が同じ場合には、前記第1のポインタおよび前記第2のポインタとして同一のポインタが使用される、
前記(10)または(11)に記載の情報処理装置。
(13)
前記第1の次元方向と前記第2の次元方向との正負の別が異なる場合には、前記第1のポインタおよび前記第2のポインタとして異なるポインタが使用される、
前記(10)または(11)に記載の情報処理装置。
(14)
前記記憶制御部は、前記記憶領域のデータに基づく処理の実行結果、および、前記第1の処理の実行結果を前記外部メモリの書き込み対象領域に書き込む、
前記(1)〜(13)のいずれか一項に記載の情報処理装置。
(15)
前記複数次元は、2次元であり、
前記読み込み対象領域のデータは、画像データである、
前記(1)〜(14)のいずれか一項に記載の情報処理装置。
(16)
前記記憶領域のデータに基づく処理は、前記画像データと係数データとを画素ごとに乗算し、画素ごとの乗算結果の和を算出する処理である、
前記(15)に記載の情報処理装置。
(17)
複数次元を有する外部メモリの読み込み対象領域から読み込んだデータを、前記複数次元を有する記憶領域に書き込むことと、
前記記憶領域のデータに基づく処理を実行することと、
前記外部メモリにおいて前記読み込み対象領域を第1の次元方向に移動させ、移動後の前記読み込み対象領域のうち前記第1の次元方向の先端領域のデータで、前記記憶領域のうち前記第1の次元方向に対応する方向の後端領域の第1の上書きを行うことと、
前記第1の上書き後の前記記憶領域のデータに基づく第1の処理を実行することと、
を含む、情報処理方法。
(18)
コンピュータを、
複数次元を有する外部メモリの読み込み対象領域から読み込んだデータを、前記複数次元を有する記憶領域に書き込む記憶制御部と、
前記記憶領域のデータに基づく処理を実行する処理部と、を備え、
前記記憶制御部は、前記外部メモリにおいて前記読み込み対象領域を第1の次元方向に移動させ、移動後の前記読み込み対象領域のうち前記第1の次元方向の先端領域のデータで、前記記憶領域のうち前記第1の次元方向に対応する方向の後端領域の第1の上書きを行い、
前記処理部は、前記第1の上書き後の前記記憶領域のデータに基づく第1の処理を実行する、
情報処理装置として機能させるためのプログラム。
10 情報処理装置
110 Road/Store Unit
130 General Purpose Register(記憶制御部)
140 ALU(処理部)
150 Instruction Fetch Unit
160 Instruction Decode Unit
170 Program Counter&Pipeline Control
20 外部メモリ
21 対象範囲
22 読み込み対象領域
25 係数データ領域
27 書き込み対象領域

Claims (18)

  1. 複数次元を有する外部メモリの読み込み対象領域から読み込んだデータを、前記複数次元を有する記憶領域に書き込む記憶制御部と、
    前記記憶領域のデータに基づく処理を実行する処理部と、を備え、
    前記記憶制御部は、前記外部メモリにおいて前記読み込み対象領域を第1の次元方向に移動させ、移動後の前記読み込み対象領域のうち前記第1の次元方向の先端領域のデータで、前記記憶領域のうち前記第1の次元方向に対応する方向の後端領域の第1の上書きを行い、
    前記処理部は、前記第1の上書き後の前記記憶領域のデータに基づく第1の処理を実行する、
    情報処理装置。
  2. 前記記憶制御部は、前記外部メモリにおいて前記読み込み対象領域を前記第1の次元方向に所定の幅だけ移動させ、
    前記第1の次元方向の先端領域は、前記第1の次元方向に前記所定の幅を有し、
    前記第1の次元方向に対応する方向の後端領域は、前記第1の次元方向に対応する方向に前記所定の幅を有する、
    請求項1に記載の情報処理装置。
  3. 前記記憶制御部は、第1のポインタを前記第1の次元方向に対応する方向の後端領域に設定し、前記先端領域のデータで前記第1のポインタが示す位置に上書きすることによって、前記第1の上書きを行う、
    請求項2に記載の情報処理装置。
  4. 前記記憶制御部は、前記第1のポインタを前記第1の次元方向に対応する方向に移動させるポインタ移動と、前記外部メモリにおいて前記読み込み対象領域を前記第1の次元方向に移動させる領域移動とを行い、移動後の前記読み込み対象領域のうち前記第1の次元方向の先端領域のデータで、移動後の前記第1のポインタが示す位置に第2の上書きを行い、
    前記処理部は、前記第2の上書き後の前記記憶領域のデータに基づく第2の処理を実行する、
    請求項3に記載の情報処理装置。
  5. 前記記憶制御部は、前記第1のポインタを前記第1の次元方向に対応する方向に前記所定の幅だけ移動させる、
    請求項4に記載の情報処理装置。
  6. 前記ポインタ移動と前記領域移動と前記第2の上書きと前記第2の処理との組み合わせが1または複数回実行される、
    請求項4に記載の情報処理装置。
  7. 前記記憶制御部は、前記ポインタ移動と前記領域移動と前記第2の上書きと前記第2の処理との組み合わせが1または複数回実行された後、さらに前記ポインタ移動を行うに際して、前記第1のポインタを移動させると前記第1のポインタが前記記憶領域の外側に出てしまう場合、前記第1のポインタを前記第1の次元方向に対応する方向の後端領域に戻す、
    請求項6に記載の情報処理装置。
  8. 前記記憶制御部は、前記ポインタ移動と前記領域移動と前記第2の上書きと前記第2の処理との組み合わせが1または複数回実行された後、さらに前記領域移動を行うに際して所定の条件が満たされた場合に、前記読み込み対象領域を前記第1の次元方向とは異なる第2の次元方向に移動させ、移動後の前記読み込み対象領域のうち前記第2の次元方向の先端領域のデータで、前記記憶領域のうち前記第2の次元方向に対応する方向の後端領域の第3の上書きを行い、
    前記処理部は、前記第3の上書き後の前記記憶領域のデータに基づく第3の処理を実行する、
    請求項6に記載の情報処理装置。
  9. 前記所定の条件は、前記読み込み対象領域を前記第1の次元方向に移動させると前記読み込み対象領域が前記外部メモリの対象範囲の外側に出てしまうという条件である、
    請求項8に記載の情報処理装置。
  10. 前記記憶制御部は、第2のポインタを前記第2の次元方向に対応する方向の後端領域に設定し、前記第2の次元方向の先端領域のデータで前記第2のポインタが示す位置に上書きすることによって、前記第3の上書きを行う、
    請求項8に記載の情報処理装置。
  11. 前記記憶制御部は、前記第2のポインタを前記第2の次元方向に対応する方向に移動させるとともに、前記外部メモリにおいて前記読み込み対象領域を前記第2の次元方向に移動させ、移動後の前記読み込み対象領域のうち前記第2の次元方向の先端領域のデータで、移動後の前記第2のポインタが示す位置に第4の上書きを行い、
    前記処理部は、前記第4の上書き後の前記記憶領域のデータに基づく第4の処理を実行する、
    請求項10に記載の情報処理装置。
  12. 前記第1の次元方向と前記第2の次元方向との正負の別が同じ場合には、前記第1のポインタおよび前記第2のポインタとして同一のポインタが使用される、
    請求項10に記載の情報処理装置。
  13. 前記第1の次元方向と前記第2の次元方向との正負の別が異なる場合には、前記第1のポインタおよび前記第2のポインタとして異なるポインタが使用される、
    請求項10に記載の情報処理装置。
  14. 前記記憶制御部は、前記記憶領域のデータに基づく処理の実行結果、および、前記第1の処理の実行結果を前記外部メモリの書き込み対象領域に書き込む、
    請求項1に記載の情報処理装置。
  15. 前記複数次元は、2次元であり、
    前記読み込み対象領域のデータは、画像データである、
    請求項1に記載の情報処理装置。
  16. 前記記憶領域のデータに基づく処理は、前記画像データと係数データとを画素ごとに乗算し、画素ごとの乗算結果の和を算出する処理である、
    請求項15に記載の情報処理装置。
  17. 複数次元を有する外部メモリの読み込み対象領域から読み込んだデータを、前記複数次元を有する記憶領域に書き込むことと、
    前記記憶領域のデータに基づく処理を実行することと、
    前記外部メモリにおいて前記読み込み対象領域を第1の次元方向に移動させ、移動後の前記読み込み対象領域のうち前記第1の次元方向の先端領域のデータで、前記記憶領域のうち前記第1の次元方向に対応する方向の後端領域の第1の上書きを行うことと、
    前記第1の上書き後の前記記憶領域のデータに基づく第1の処理を実行することと、
    を含む、情報処理方法。
  18. コンピュータを、
    複数次元を有する外部メモリの読み込み対象領域から読み込んだデータを、前記複数次元を有する記憶領域に書き込む記憶制御部と、
    前記記憶領域のデータに基づく処理を実行する処理部と、を備え、
    前記記憶制御部は、前記外部メモリにおいて前記読み込み対象領域を第1の次元方向に移動させ、移動後の前記読み込み対象領域のうち前記第1の次元方向の先端領域のデータで、前記記憶領域のうち前記第1の次元方向に対応する方向の後端領域の第1の上書きを行い、
    前記処理部は、前記第1の上書き後の前記記憶領域のデータに基づく第1の処理を実行する、
    情報処理装置として機能させるためのプログラム。


JP2018125129A 2018-06-29 2018-06-29 情報処理装置、情報処理方法およびプログラム Pending JP2020004247A (ja)

Priority Applications (4)

Application Number Priority Date Filing Date Title
JP2018125129A JP2020004247A (ja) 2018-06-29 2018-06-29 情報処理装置、情報処理方法およびプログラム
PCT/JP2019/023828 WO2020004098A1 (ja) 2018-06-29 2019-06-17 情報処理装置、情報処理方法およびプログラム
CN201980042150.XA CN112368687A (zh) 2018-06-29 2019-06-17 信息处理设备、信息处理方法和程序
US17/250,245 US11520505B2 (en) 2018-06-29 2019-06-17 Information processing apparatus and information processing method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2018125129A JP2020004247A (ja) 2018-06-29 2018-06-29 情報処理装置、情報処理方法およびプログラム

Publications (1)

Publication Number Publication Date
JP2020004247A true JP2020004247A (ja) 2020-01-09

Family

ID=68986296

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2018125129A Pending JP2020004247A (ja) 2018-06-29 2018-06-29 情報処理装置、情報処理方法およびプログラム

Country Status (4)

Country Link
US (1) US11520505B2 (ja)
JP (1) JP2020004247A (ja)
CN (1) CN112368687A (ja)
WO (1) WO2020004098A1 (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP7402623B2 (ja) * 2019-06-17 2023-12-21 キヤノン株式会社 フィルタ処理装置及びその制御方法
CN114638352B (zh) * 2022-05-18 2023-05-30 成都登临科技有限公司 一种处理器架构、处理器及电子设备

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5461718A (en) * 1992-04-24 1995-10-24 Digital Equipment Corporation System for sequential read of memory stream buffer detecting page mode cycles availability fetching data into a selected FIFO, and sending data without aceessing memory
JPH11288384A (ja) 1998-04-01 1999-10-19 Canon Inc データ格納方法及び装置
JP5071977B2 (ja) * 2004-07-14 2012-11-14 クゥアルコム・インコーポレイテッド キャッシュメモリーを管理するシステムと方法
EP1883045A4 (en) * 2005-05-20 2016-10-05 Sony Corp SIGNAL PROCESSOR
JP5040285B2 (ja) 2006-12-13 2012-10-03 ソニー株式会社 アドレス生成回路、バッファ回路、情報処理装置および撮像システム
CA2725377A1 (en) * 2008-09-08 2010-03-11 Ned M. Ahdoot Digital video filter and image processing
US8634023B2 (en) * 2009-07-21 2014-01-21 Qualcomm Incorporated System for video frame synchronization using sub-frame memories
US9092429B2 (en) * 2012-10-23 2015-07-28 Analog Devices Global DMA vector buffer
US20140184630A1 (en) * 2012-12-27 2014-07-03 Scott A. Krig Optimizing image memory access
JP6253514B2 (ja) * 2014-05-27 2017-12-27 ルネサスエレクトロニクス株式会社 プロセッサ
GB2543064B (en) * 2015-10-06 2018-08-22 Displaylink Uk Ltd Managing display data
CN106598545B (zh) * 2015-10-08 2020-04-14 上海兆芯集成电路有限公司 沟通共享资源的处理器与方法及非瞬时计算机可使用媒体
US10664751B2 (en) * 2016-12-01 2020-05-26 Via Alliance Semiconductor Co., Ltd. Processor with memory array operable as either cache memory or neural network unit memory
JP6700712B2 (ja) 2015-10-21 2020-05-27 キヤノン株式会社 畳み込み演算装置
US10430706B2 (en) * 2016-12-01 2019-10-01 Via Alliance Semiconductor Co., Ltd. Processor with memory array operable as either last level cache slice or neural network unit memory
CN106940815B (zh) * 2017-02-13 2020-07-28 西安交通大学 一种可编程卷积神经网络协处理器ip核

Also Published As

Publication number Publication date
US20210200455A1 (en) 2021-07-01
WO2020004098A1 (ja) 2020-01-02
US11520505B2 (en) 2022-12-06
CN112368687A (zh) 2021-02-12

Similar Documents

Publication Publication Date Title
KR102278658B1 (ko) 높은 성능, 전력 효율, 프로그램 가능 이미지 처리 프로세싱을 위한 아키텍처
KR102470264B1 (ko) 완전연결층 신경망 역방향 트레이닝 실행용 장치와 방법
TWI690896B (zh) 影像處理器、由其執行之方法、及非暫態機器可讀儲存媒體
US20190065199A1 (en) Saving and restoring non-contiguous blocks of preserved registers
US9141386B2 (en) Vector logical reduction operation implemented using swizzling on a semiconductor chip
CN113849182A (zh) 用以基于图注意力网络分析和增强软件的系统
WO2019127517A1 (zh) 数据处理方法、设备、dma控制器及计算机可读存储介质
US8145804B2 (en) Systems and methods for transferring data to maintain preferred slot positions in a bi-endian processor
TWI752343B (zh) 用於執行絕對差計算之加總的執行單元電路、影像處理器以及方法
WO2020004098A1 (ja) 情報処理装置、情報処理方法およびプログラム
US5119324A (en) Apparatus and method for performing arithmetic functions in a computer system
WO2009131007A1 (ja) Simd型並列計算機システム、simd型並列計算方法及び制御プログラム
WO2017185405A1 (zh) 一种用于执行向量外积运算的装置和方法
US20160070642A1 (en) Memory control and data processing using memory address generation based on differential addresses
JP2006099232A (ja) 半導体信号処理装置
JP5185242B2 (ja) コンパイル装置
US20210406031A1 (en) SIMD Operand Permutation with Selection from among Multiple Registers
JP5231949B2 (ja) 半導体装置、および、半導体装置によるデータ処理方法
US11256518B2 (en) Datapath circuitry for math operations using SIMD pipelines
JP2000322235A (ja) 情報処理装置
WO2019055738A1 (en) MEMORY ACCESS NOT ALIGNED
US11409840B2 (en) Dynamically adaptable arrays for vector and matrix operations
JP4444305B2 (ja) 半導体装置
US20210096858A1 (en) Mutli-modal gather operation
JP4989899B2 (ja) 半導体演算処理装置