(57)【要約】【課題】演算に掛かる時間および消費電力を低減させることを可能とする技術が提供されることが望まれる。【解決手段】複数次元を有する外部メモリの読み込み対象領域から読み込んだデータを、前記複数次元を有する記憶領域に書き込む記憶制御部と、前記記憶領域のデータに基づく処理を実行する処理部と、を備え、前記記憶制御部は、前記外部メモリにおいて前記読み込み対象領域を第１の次元方向に移動させ、移動後の前記読み込み対象領域のうち前記第１の次元方向の先端領域のデータで、前記記憶領域のうち前記第１の次元方向に対応する方向の後端領域の第１の上書きを行い、前記処理部は、前記第１の上書き後の前記記憶領域のデータに基づく第１の処理を実行する、情報処理装置が提供される。【選択図】図５
2020004247.tif 000002
【特許請求の範囲】
【請求項１】
複数次元を有する外部メモリの読み込み対象領域から読み込んだデータを、前記複数次元を有する記憶領域に書き込む記憶制御部と、
前記記憶領域のデータに基づく処理を実行する処理部と、を備え、
前記記憶制御部は、前記外部メモリにおいて前記読み込み対象領域を第１の次元方向に移動させ、移動後の前記読み込み対象領域のうち前記第１の次元方向の先端領域のデータで、前記記憶領域のうち前記第１の次元方向に対応する方向の後端領域の第１の上書きを行い、
前記処理部は、前記第１の上書き後の前記記憶領域のデータに基づく第１の処理を実行する、
情報処理装置。
【請求項２】
前記記憶制御部は、前記外部メモリにおいて前記読み込み対象領域を前記第１の次元方向に所定の幅だけ移動させ、
前記第１の次元方向の先端領域は、前記第１の次元方向に前記所定の幅を有し、
前記第１の次元方向に対応する方向の後端領域は、前記第１の次元方向に対応する方向に前記所定の幅を有する、
請求項１に記載の情報処理装置。
【請求項３】
前記記憶制御部は、第１のポインタを前記第１の次元方向に対応する方向の後端領域に設定し、前記先端領域のデータで前記第１のポインタが示す位置に上書きすることによって、前記第１の上書きを行う、
請求項２に記載の情報処理装置。
【請求項４】
前記記憶制御部は、前記第１のポインタを前記第１の次元方向に対応する方向に移動させるポインタ移動と、前記外部メモリにおいて前記読み込み対象領域を前記第１の次元方向に移動させる領域移動とを行い、移動後の前記読み込み対象領域のうち前記第１の次元方向の先端領域のデータで、移動後の前記第１のポインタが示す位置に第２の上書きを行い、
前記処理部は、前記第２の上書き後の前記記憶領域のデータに基づく第２の処理を実行する、
請求項３に記載の情報処理装置。
【請求項５】
前記記憶制御部は、前記第１のポインタを前記第１の次元方向に対応する方向に前記所定の幅だけ移動させる、
請求項４に記載の情報処理装置。
【請求項６】
前記ポインタ移動と前記領域移動と前記第２の上書きと前記第２の処理との組み合わせが１または複数回実行される、
請求項４に記載の情報処理装置。
【請求項７】
前記記憶制御部は、前記ポインタ移動と前記領域移動と前記第２の上書きと前記第２の処理との組み合わせが１または複数回実行された後、さらに前記ポインタ移動を行うに際して、前記第１のポインタを移動させると前記第１のポインタが前記記憶領域の外側に出てしまう場合、前記第１のポインタを前記第１の次元方向に対応する方向の後端領域に戻す、
請求項６に記載の情報処理装置。
【請求項８】
前記記憶制御部は、前記ポインタ移動と前記領域移動と前記第２の上書きと前記第２の処理との組み合わせが１または複数回実行された後、さらに前記領域移動を行うに際して所定の条件が満たされた場合に、前記読み込み対象領域を前記第１の次元方向とは異なる第２の次元方向に移動させ、移動後の前記読み込み対象領域のうち前記第２の次元方向の先端領域のデータで、前記記憶領域のうち前記第２の次元方向に対応する方向の後端領域の第３の上書きを行い、
前記処理部は、前記第３の上書き後の前記記憶領域のデータに基づく第３の処理を実行する、
請求項６に記載の情報処理装置。
【請求項９】
前記所定の条件は、前記読み込み対象領域を前記第１の次元方向に移動させると前記読み込み対象領域が前記外部メモリの対象範囲の外側に出てしまうという条件である、
請求項８に記載の情報処理装置。
【請求項１０】
前記記憶制御部は、第２のポインタを前記第２の次元方向に対応する方向の後端領域に設定し、前記第２の次元方向の先端領域のデータで前記第２のポインタが示す位置に上書きすることによって、前記第３の上書きを行う、
請求項８に記載の情報処理装置。
【請求項１１】
前記記憶制御部は、前記第２のポインタを前記第２の次元方向に対応する方向に移動させるとともに、前記外部メモリにおいて前記読み込み対象領域を前記第２の次元方向に移動させ、移動後の前記読み込み対象領域のうち前記第２の次元方向の先端領域のデータで、移動後の前記第２のポインタが示す位置に第４の上書きを行い、
前記処理部は、前記第４の上書き後の前記記憶領域のデータに基づく第４の処理を実行する、
請求項１０に記載の情報処理装置。
【請求項１２】
前記第１の次元方向と前記第２の次元方向との正負の別が同じ場合には、前記第１のポインタおよび前記第２のポインタとして同一のポインタが使用される、
請求項１０に記載の情報処理装置。
【請求項１３】
前記第１の次元方向と前記第２の次元方向との正負の別が異なる場合には、前記第１のポインタおよび前記第２のポインタとして異なるポインタが使用される、
請求項１０に記載の情報処理装置。
【請求項１４】
前記記憶制御部は、前記記憶領域のデータに基づく処理の実行結果、および、前記第１の処理の実行結果を前記外部メモリの書き込み対象領域に書き込む、
請求項１に記載の情報処理装置。
【請求項１５】
前記複数次元は、２次元であり、
前記読み込み対象領域のデータは、画像データである、
請求項１に記載の情報処理装置。
【請求項１６】
前記記憶領域のデータに基づく処理は、前記画像データと係数データとを画素ごとに乗算し、画素ごとの乗算結果の和を算出する処理である、
請求項１５に記載の情報処理装置。
【請求項１７】
複数次元を有する外部メモリの読み込み対象領域から読み込んだデータを、前記複数次元を有する記憶領域に書き込むことと、
前記記憶領域のデータに基づく処理を実行することと、
前記外部メモリにおいて前記読み込み対象領域を第１の次元方向に移動させ、移動後の前記読み込み対象領域のうち前記第１の次元方向の先端領域のデータで、前記記憶領域のうち前記第１の次元方向に対応する方向の後端領域の第１の上書きを行うことと、
前記第１の上書き後の前記記憶領域のデータに基づく第１の処理を実行することと、
を含む、情報処理方法。
【請求項１８】
コンピュータを、
複数次元を有する外部メモリの読み込み対象領域から読み込んだデータを、前記複数次元を有する記憶領域に書き込む記憶制御部と、
前記記憶領域のデータに基づく処理を実行する処理部と、を備え、
前記記憶制御部は、前記外部メモリにおいて前記読み込み対象領域を第１の次元方向に移動させ、移動後の前記読み込み対象領域のうち前記第１の次元方向の先端領域のデータで、前記記憶領域のうち前記第１の次元方向に対応する方向の後端領域の第１の上書きを行い、
前記処理部は、前記第１の上書き後の前記記憶領域のデータに基づく第１の処理を実行する、
情報処理装置として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、情報処理装置、情報処理方法およびプログラムに関する。
【背景技術】
【０００２】
近年、演算を行う回路、演算を制御する回路、入出力回路などが１つの半導体チップ上に集積化された集積回路（マイクロプロセッサ）が様々な機器において用いられている。マイクロプロセッサなどが演算を行う場合、外部メモリから命令と演算に使用されるデータとを読み込み、読み込んだ命令とデータとに基づいて演算を実行する。実行結果は、汎用レジスタから外部メモリに書き込まれる。
【０００３】
マイクロプロセッサによる演算対象によって必要な演算量は様々である。例えば、処理対象によっては膨大な数の演算が必要な場合がある。そこで、演算量を削減する技術として様々な技術が開発されている。例えば、畳み込み演算による演算量が膨大である場合に、その演算量を削減する技術が開示されている（例えば、特許文献１参照）。演算に必要なデータは、外部メモリからマイクロプロセッサ内の記憶領域に読み込まれる。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１７−７９０１７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかし、外部メモリからマイクロプロセッサ内の記憶領域へのデータの読み込みには、時間および消費電力が掛かる。そこで、演算に掛かる時間および消費電力を低減させることを可能とする技術が提供されることが望まれる。
【課題を解決するための手段】
【０００６】
本開示によれば、複数次元を有する外部メモリの読み込み対象領域から読み込んだデータを、前記複数次元を有する記憶領域に書き込む記憶制御部と、前記記憶領域のデータに基づく処理を実行する処理部と、を備え、前記記憶制御部は、前記外部メモリにおいて前記読み込み対象領域を第１の次元方向に移動させ、移動後の前記読み込み対象領域のうち前記第１の次元方向の先端領域のデータで、前記記憶領域のうち前記第１の次元方向に対応する方向の後端領域の第１の上書きを行い、前記処理部は、前記第１の上書き後の前記記憶領域のデータに基づく第１の処理を実行する、情報処理装置が提供される。
【０００７】
本開示によれば、複数次元を有する外部メモリの読み込み対象領域から読み込んだデータを、前記複数次元を有する記憶領域に書き込むことと、前記記憶領域のデータに基づく処理を実行することと、前記外部メモリにおいて前記読み込み対象領域を第１の次元方向に移動させ、移動後の前記読み込み対象領域のうち前記第１の次元方向の先端領域のデータで、前記記憶領域のうち前記第１の次元方向に対応する方向の後端領域の第１の上書きを行うことと、前記第１の上書き後の前記記憶領域のデータに基づく第１の処理を実行することと、を含む、情報処理方法が提供される。
【０００８】
本開示によれば、コンピュータを、複数次元を有する外部メモリの読み込み対象領域から読み込んだデータを、前記複数次元を有する記憶領域に書き込む記憶制御部と、前記記憶領域のデータに基づく処理を実行する処理部と、を備え、前記記憶制御部は、前記外部メモリにおいて前記読み込み対象領域を第１の次元方向に移動させ、移動後の前記読み込み対象領域のうち前記第１の次元方向の先端領域のデータで、前記記憶領域のうち前記第１の次元方向に対応する方向の後端領域の第１の上書きを行い、前記処理部は、前記第１の上書き後の前記記憶領域のデータに基づく第１の処理を実行する、情報処理装置として機能させるためのプログラムが提供される。
【発明の効果】
【０００９】
以上説明したように本開示によれば、演算に掛かる時間および消費電力を低減させることを可能とする技術が提供される。なお、上記の効果は必ずしも限定的なものではなく、上記の効果とともに、または上記の効果に代えて、本明細書に示されたいずれかの効果、または本明細書から把握され得る他の効果が奏されてもよい。
【図面の簡単な説明】
【００１０】
【図１】一般的なマイクロプロセッサの構成例を示す図である。
【図２】一般的なマイクロプロセッサによる画像処理のプログラム例を示す図である。
【図３】一般的なマイクロプロセッサによる画像処理のプログラム例を示す図である。
【図４】一般的なマイクロプロセッサによる画像処理のプログラム例を示す図である。
【図５】本開示の実施形態に係る情報処理装置の構成例を示す図である。
【図６】同実施形態に係る情報処理装置が実行する処理の流れを説明するための図である。
【図７】同実施形態に係る情報処理装置が実行する処理の流れを説明するための図である。
【図８】同実施形態に係る情報処理装置が実行する処理の流れを説明するための図である。
【図９】同実施形態に係る情報処理装置が実行する処理の流れを説明するための図である。
【図１０】同実施形態に係る情報処理装置が実行する処理の流れを説明するための図である。
【図１１】Ｍｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １に関する定義を説明するための図である。
【図１２】Ｒｅａｄ  Ｐｏｉｎｔｅｒの動きの例を示す図である。
【図１３】Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒの動きの例を示す図である。
【図１４】Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒの動きの例を示す図である。
【図１５】外部メモリにおける対象範囲の読み込み対象領域と、読み込み対象領域の一部または全部から読み込まれたデータが該当箇所に書き込まれたＭｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １との対応例を示す図である。
【図１６】外部メモリにおける対象範囲の読み込み対象領域と、読み込み対象領域の一部または全部から読み込まれたデータが該当箇所に書き込まれたＭｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １との対応例を示す図である。
【図１７】外部メモリにおける対象範囲の読み込み対象領域と、読み込み対象領域の一部または全部から読み込まれたデータが該当箇所に書き込まれたＭｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １との対応例を示す図である。
【図１８】外部メモリにおける対象範囲の読み込み対象領域と、読み込み対象領域の一部または全部から読み込まれたデータが該当箇所に書き込まれたＭｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １との対応例を示す図である。
【図１９】外部メモリにおける対象範囲の読み込み対象領域と、読み込み対象領域の一部または全部から読み込まれたデータが該当箇所に書き込まれたＭｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １との対応例を示す図である。
【図２０】外部メモリにおける対象範囲の読み込み対象領域と、読み込み対象領域の一部または全部から読み込まれたデータが該当箇所に書き込まれたＭｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １との対応例を示す図である。
【図２１】外部メモリにおける対象範囲の読み込み対象領域と、読み込み対象領域の一部または全部から読み込まれたデータが該当箇所に書き込まれたＭｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １との対応例を示す図である。
【図２２】外部メモリにおける対象範囲の読み込み対象領域と、読み込み対象領域の一部または全部から読み込まれたデータが該当箇所に書き込まれたＭｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １との対応例を示す図である。
【図２３】外部メモリにおける対象範囲の読み込み対象領域と、読み込み対象領域の一部または全部から読み込まれたデータが該当箇所に書き込まれたＭｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １との対応例を示す図である。
【図２４】外部メモリにおける対象範囲の読み込み対象領域と、読み込み対象領域の一部または全部から読み込まれたデータが該当箇所に書き込まれたＭｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １との対応例を示す図である。
【図２５】外部メモリにおける対象範囲の読み込み対象領域と、読み込み対象領域の一部または全部から読み込まれたデータが該当箇所に書き込まれたＭｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １との対応例を示す図である。
【図２６】外部メモリにおける対象範囲の読み込み対象領域と、読み込み対象領域の一部または全部から読み込まれたデータが該当箇所に書き込まれたＭｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １との対応例を示す図である。
【図２７】外部メモリにおける対象範囲の読み込み対象領域と、読み込み対象領域の一部または全部から読み込まれたデータが該当箇所に書き込まれたＭｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １との対応例を示す図である。
【図２８】外部メモリにおける対象範囲の読み込み対象領域と、読み込み対象領域の一部または全部から読み込まれたデータが該当箇所に書き込まれたＭｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １との対応例を示す図である。
【図２９】外部メモリにおける対象範囲の読み込み対象領域と、読み込み対象領域の一部または全部から読み込まれたデータが該当箇所に書き込まれたＭｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １との対応例を示す図である。
【図３０】外部メモリにおける対象範囲の読み込み対象領域と、読み込み対象領域の一部または全部から読み込まれたデータが該当箇所に書き込まれたＭｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １との対応例を示す図である。
【図３１】同実施形態に係る情報処理装置を実現するためのプログラムにおいて使用される各種命令の定義を示す図である。
【図３２】同実施形態に係る情報処理装置を実現するためのプログラムの例を示す図である。
【図３３】同実施形態に係る情報処理装置を実現するためのプログラムの例を示す図である。
【図３４】同実施形態に係る情報処理装置を実現するためのプログラムの例を示す図である。
【図３５】同実施形態に係る情報処理装置の動作例を示すフローチャートの注釈を示す図である。
【図３６】同実施形態に係る情報処理装置の動作例を示すフローチャートである。
【図３７】同実施形態に係る情報処理装置の動作例を示すフローチャートである。
【図３８】同実施形態に係る情報処理装置の動作例を示すフローチャートである。
【図３９】入力データが書き込まれるバッファが３次元を有する場合の例を示す図である。
【発明を実施するための形態】
【００１１】
以下に添付図面を参照しながら、本開示の好適な実施の形態について詳細に説明する。なお、本明細書及び図面において、実質的に同一の機能構成を有する構成要素については、同一の符号を付することにより重複説明を省略する。
【００１２】
また、本明細書および図面において、実質的に同一の機能構成を有する複数の構成要素を、同一の符号の後に異なる数字を付して区別する場合もある。ただし、実質的に同一の機能構成を有する複数の構成要素の各々を特に区別する必要がない場合、同一符号のみを付する。
【００１３】
なお、説明は以下の順序で行うものとする。
０．背景
１．本開示の実施形態
１．１．システム構成例
１．２．情報処理装置の機能詳細
１．２．１．処理の流れ
１．２．２．ポインタの動き
１．２．３．具体的な処理例
１．２．４．プログラム例
１．２．５．動作例
２．効果
３．変形例
【００１４】
＜０．背景＞
近年、演算を行う回路（演算回路）、演算を制御する回路（制御回路）、入出力回路などが１つの半導体チップ上に集積化された集積回路（マイクロプロセッサ）が様々な機器において用いられている。まず、一般的なマイクロプロセッサの構成例について説明する。
【００１５】
図１は、一般的なマイクロプロセッサの構成例を示す図である。図１に示されるように、一般的なマイクロプロセッサ８０は、Ｒｏａｄ／Ｓｔｏｒｅ  Ｕｎｉｔ８１０、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ８３０（汎用レジスタ）、ＡＬＵ（Ａｒｉｔｈｍｅｔｉｃ  Ｌｏｇｉｃ  Ｕｎｉｔ）８４０、Ｉｎｓｔｒｕｃｔｉｏｎ  Ｆｅｔｃｈ  Ｕｎｉｔ８５０、Ｉｎｓｔｒｕｃｔｉｏｎ  Ｄｅｃｏｄｅ  Ｕｎｉｔ８６０、Ｐｒｏｇｒａｍ  Ｃｏｕｎｔｅｒ＆Ｐｉｐｅｌｉｎｅ  Ｃｏｎｔｒｏｌ８７０を備える。
【００１６】
一般的なマイクロプロセッサ８０によって演算が行われる場合、Ｉｎｓｔｒｕｃｔｉｏｎ  Ｆｅｔｃｈ  Ｕｎｉｔ８５０は、Ｐｒｏｇｒａｍ  Ｃｏｕｎｔｅｒ＆Ｐｉｐｅｌｉｎｅ  Ｃｏｎｔｒｏｌ８７０に格納されているカウンタ値に基づいて、外部メモリから命令を取り出す（フェッチする）。命令が取り出されると、カウンタ値が外部メモリにおける次の命令のアドレスに更新される。そして、Ｉｎｓｔｒｕｃｔｉｏｎ  Ｄｅｃｏｄｅ  Ｕｎｉｔ８６０は、命令を解釈し、ＡＬＵ８４０は、解釈結果に基づいて命令を実行する。
【００１７】
命令の実行には、データが使用される。具体的に、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ８３０は、命令に従って、Ｒｏａｄ／Ｓｔｏｒｅ  Ｕｎｉｔ８１０を介して外部メモリからデータを読み込み、読み込んだデータを記憶領域（マイクロプロセッサ８０内のメモリ）に書き込む。命令の実行結果は、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ８３０によってＲｏａｄ／Ｓｔｏｒｅ  Ｕｎｉｔ８１０を介して外部メモリに書き込まれる。
【００１８】
ここで、外部メモリからマイクロプロセッサ８０内の記憶領域へのデータの読み込みには、時間および消費電力が掛かる。そこで、本開示の実施形態では、演算に掛かる時間および消費電力を低減させることを可能とする技術について主に説明する。
【００１９】
より具体的に、マイクロプロセッサ８０による演算には、同じデータが繰り返し使用される場合がある。例えば、画像処理、ＤＮＮ（Ｄｅｅｐ  Ｌｅａｒｎｉｎｇ  Ｎｅｔｗｏｒｋ）などにおいては、同じデータが繰り返し使用される場合が多い。繰り返し同じデータが使用される場合であっても、演算のたびに外部メモリからマイクロプロセッサ８０内の記憶領域にデータを読み込む必要があるとすると、既に読み込んだデータを外部メモリから再度読み込むための時間および消費電力が無駄になる。
【００２０】
図２〜図４は、一般的なマイクロプロセッサ８０による画像処理のプログラム例を示す図である。図２〜図４を参照すると、プログラムのＮｏｔａｔｉｏｎ  ＰＧ０が示されている。また、図２〜図４を参照すると、プログラムＰＧ１〜ＰＧ３が示されている。プログラムＰＧ２は、プログラムＰＧ１に続くプログラムであり、プログラムＰＧ３は、プログラムＰＧ２に続くプログラムである。
【００２１】
プログラムＰＧ１〜ＰＧ３では、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ８３０は、Ｒｏａｄ／Ｓｔｏｒｅ  Ｕｎｉｔ８１０を介して、外部メモリからマイクロプロセッサ８０内の記憶領域に入力画像データと３×３のフィルタ係数とを読み込む。そして、ＡＬＵ８４０は、入力画像データと３×３のフィルタ係数とに基づいて、フィルタ適用後の画像データ（出力画像データ）を生成する。Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ８３０は、Ｒｏａｄ／Ｓｔｏｒｅ  Ｕｎｉｔ８１０を介して、出力画像データを外部メモリに書き込む。
【００２２】
しかし、プログラムＰＧ１〜ＰＧ３では、繰り返し同じ（入力画像データの）画素データが使用される場合であっても、演算のたびに外部メモリからマイクロプロセッサ８０内の記憶領域に画素データを読み込んでいる。そのため、プログラムＰＧ１〜ＰＧ３では、外部メモリから画素データを読み込む命令が多くなっている。したがって、プログラムＰＧ１〜ＰＧ３では、既に読み込んだ画素データを外部メモリから再度読み込むための時間および消費電力が無駄になっている。
【００２３】
本開示の実施形態に係るマイクロプロセッサは、既に外部メモリから読み込まれてマイクロプロセッサ内の記憶領域にストアされているデータと同じデータを使用する場合には、外部メモリからの再度のデータの読み込みを省略する。すなわち、本開示の実施形態では、既に外部メモリから読み込まれてマイクロプロセッサ内の記憶領域にストアされているデータを再利用することにする。これによって、外部メモリへのデータフェッチ回数が低減されるため、既に読み込んだデータを外部メモリから再度読み込むための時間および消費電力を低減することが可能である。
【００２４】
より詳細に、本開示の実施形態では、マイクロプロセッサ内の記憶領域を、複数次元を有するリングバッファとして使用する。かかる構成によれば、外部メモリからの読み込みが必要なデータ量を小さくすることが可能となる。したがって、かかる構成によれば、外部メモリからデータを読み込む命令を少なくし、外部メモリからデータを読み込むための時間および消費電力を効果的に低減することが可能となる。なお、以下では、本開示の実施形態に係るマイクロプロセッサ内の記憶領域を「多次元リングバッファ」と称する場合がある。しかし、「多次元」の次元数は特に限定されず、複数であればよい。
【００２５】
以上、本開示の実施形態の背景について説明した。
【００２６】
＜１．本開示の実施形態＞
［１．１．システム構成例］
続いて、本開示の実施形態に係る情報処理装置（例えば、マイクロプロセッサ）の構成例について説明する。図５は、本開示の実施形態に係る情報処理装置の構成例を示す図である。図５に示されたように、本開示の実施形態に係る情報処理装置１０は、Ｒｏａｄ／Ｓｔｏｒｅ  Ｕｎｉｔ１１０、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０（記憶制御部）、ＡＬＵ１４０（処理部）、Ｉｎｓｔｒｕｃｔｉｏｎ  Ｆｅｔｃｈ  Ｕｎｉｔ１５０、Ｉｎｓｔｒｕｃｔｉｏｎ  Ｄｅｃｏｄｅ  Ｕｎｉｔ１６０、Ｐｒｏｇｒａｍ  Ｃｏｕｎｔｅｒ＆Ｐｉｐｅｌｉｎｅ  Ｃｏｎｔｒｏｌ１７０を備える。
【００２７】
これらの構成のうち、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、一般的なＧｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ８３０（図１）と異なる。さらに、情報処理装置１０は、Ｍｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  ０〜２（１２０〜１２２）を備える点において、一般的なマイクロプロセッサ８０と異なる。したがって、以下では、本開示の実施形態に係る情報処理装置１０が有する構成のうち、一般的なマイクロプロセッサ８０が有する構成と異なる構成について主に説明し、一般的なマイクロプロセッサ８０が有する構成と同じ構成についての詳細な説明は省略する。
【００２８】
なお、上記したように、Ｍｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  ０〜２（１２０〜１２２）の次元数は複数であればよい。そして、外部メモリの次元数も複数であればよい。以下では、説明を簡便にするため、Ｍｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  ０〜２（１２０〜１２２）および外部メモリそれぞれの次元が２次元である場合を主に説明する。そして、外部メモリの読み込み対象領域のデータが、画像データである場合を想定する。しかし、外部メモリの読み込み対象領域のデータは、画像データに限定されない。
【００２９】
また、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、Ｒｏａｄ／Ｓｔｏｒｅ  Ｕｎｉｔ１１０を介して、外部メモリから読み込んだデータを、必要に応じてＭｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  ０〜１（１２０〜１２１）に書き込む。そして、ＡＬＵ１４０は、Ｍｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  ０〜１（１２０〜１２１）のデータに基づく処理を実行する。
【００３０】
より詳細に、本開示の実施形態では、Ｍｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  ０（１２０）には、外部メモリから読み込まれた係数データが書き込まれ、Ｍｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １（１２１）には、外部メモリから読み込まれた画像データが入力データとして書き込まれる場合を主に説明する。そして、本開示の実施形態では、ＡＬＵ１４０は、このようにして書き込まれた入力データと係数データとを画素ごとに乗算し、画素ごとの乗算結果の和を算出する場合を主に説明する。
【００３１】
しかし、Ｍｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  ０〜１（１２０〜１２１）に書き込まれるデータは、かかる例に限定されない。また、Ｍｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  ０〜１（１２０〜１２１）のデータに基づく処理も、かかる例に限定されない。また、フィルタサイズは、３×３に限定されないし、画像データのサイズも限定されない。
【００３２】
なお、本開示の実施形態では、Ｍｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  ０〜２（１２０〜１２２）のすべてがリングバッファである場合を主に想定する。しかし、Ｍｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １（１２１）だけが少なくともリングバッファであればよい。すなわち、Ｍｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  ０、２（１２０、１２２）の両方またはいずれか一方は、リングバッファでなくてもよい。
【００３３】
また、上記したように、情報処理装置１０は、演算回路、演算回路、入出力回路などが１つの半導体チップ上に集積化された集積回路であってよい。例えば、情報処理装置１０は、１または複数のＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ；中央演算処理装置）などといった処理装置によって構成されてよい。情報処理装置１０は、記録媒体から読み出したプログラムを実行することによって、その機能を実現させる。
【００３４】
以上、本開示の実施形態に係る情報処理装置１０の構成例について説明した。
【００３５】
［１．２．情報処理装置の機能詳細］
続いて、情報処理装置１０の機能詳細について説明する。
【００３６】
（１．２．１．処理の流れ）
まず、情報処理装置１０が実行する処理の流れについて説明する。図６〜図１０は、情報処理装置１０が実行する処理の流れを説明するための図である。図６〜図１０に示されるように、外部メモリ２０には、複数の係数（係数データ）が格納されている係数データ領域２５、画像データが格納されている対象範囲２１、命令の実行結果が書き込まれる書き込み対象領域２７が存在している。その他、図６〜図１０には、Ｍｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  ０〜２（１２０〜１２２）、ＡＬＵ１４０が示されている。
【００３７】
なお、図６〜図１０に示された例において、Ｍｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １（１２１）の対応する位置が、物理的に同じ位置を表しているとは限らない。例えば、図６に示された例と図７に示された例とにおいて、Ｍｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １（１２１）の左上の位置が、物理的に同じ位置を表しているとは限らない。
【００３８】
図６に示されたように、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、係数データ領域２５に格納されている係数データを、Ｒｏａｄ／Ｓｔｏｒｅ  Ｕｎｉｔ１１０を介して読み込み、Ｍｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  ０（１２０）に書き込む。また、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、対象範囲２１の太枠内（読み込み対象領域２２）の画像データを入力データとしてＲｏａｄ／Ｓｔｏｒｅ  Ｕｎｉｔ１１０を介して読み込み、Ｍｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １（１２１）に書き込む。
【００３９】
また、図６に示されたように、Ｍｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １（１２１）への入力データの書き込みが終わると、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、Ｍｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  ０（１２０）から各係数を順に読み込むとともに、Ｍｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １（１２１）の各位置から順にデータを読み込む。
【００４０】
ＡＬＵ１４０は、Ｍｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  ０（１２０）から読み込まれた係数と、Ｍｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １（１２１）から読み込まれた入力データとを、対応する画素ごとに乗算する。そして、ＡＬＵ１４０は、画素ごとの乗算結果の和を算出する。図６に示されたように、ＡＬＵ１４０は、乗算結果の和を、Ｍｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  ２（１２２）の太枠内（書き込み対象領域）に書き込む。
【００４１】
図７〜図１０では、このようにしてＭｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １（１２１）に、読み込み対象領域２２（図６）内の画像データが入力データとして既に書き込まれている状態を基準とする。そして、次に画像データが外部メモリ２０から読み出される場合を想定する。
【００４２】
図７に示された例では、読み込み対象領域２２が、図６に示された読み込み対象領域２２よりも１列左にシフトしている場合を想定する。このとき、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、読み込み対象領域２２（図７）の画像データのすべてを外部メモリ２０から読み込まなくてよい。
【００４３】
より詳細に、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、読み込み対象領域２２（図７）の画像データのうち、まだ読み込まれていないデータ（差分データ）だけを外部メモリ２０から読み込めばよい。これによって、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０が外部メモリ２０から画像データを読み込むための時間および消費電力を低減することが可能である。
【００４４】
そして、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、読み込んだ差分データだけを、新たにＭｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １（１２１）の該当箇所に書き込めばよい。図７には、新たに書き込まれた部分が、Ｍｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １（１２１）の網掛け部分として示されている。
【００４５】
ＡＬＵ１４０は、Ｍｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  ０（１２０）から読み込まれた係数データと、Ｍｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １（１２１）から読み込まれた入力データとを、対応する画素ごとに乗算し直す。そして、ＡＬＵ１４０は、画素ごとの乗算結果の和を算出する。図７に示されたように、ＡＬＵ１４０は、乗算結果の和を、Ｍｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  ２（１２２）の太枠内（書き込み対象領域）に書き込む。
【００４６】
図８〜図１０に示された例においても、図７に示された例と同様に考えることが可能である。図８に示された例では、読み込み対象領域２２が、図６に示された読み込み対象領域２２よりも１列右にシフトしている場合を想定する。このとき、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、読み込み対象領域２２（図８）の画像データのうち、まだ読み込まれていないデータ（差分データ）だけを外部メモリ２０から読み込めばよい。
【００４７】
そして、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、読み込んだ差分データだけを、新たにＭｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １（１２１）の該当箇所に書き込めばよい。図８には、新たに書き込まれた部分が、Ｍｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １（１２１）の網掛け部分として示されている。
【００４８】
ＡＬＵ１４０は、Ｍｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  ０（１２０）から読み込まれた係数データと、Ｍｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １（１２１）から読み込まれた入力データとを、対応する画素ごとに乗算し直す。そして、ＡＬＵ１４０は、画素ごとの乗算結果の和を算出する。図８に示されたように、ＡＬＵ１４０は、乗算結果の和を、Ｍｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  ２（１２２）の太枠内（書き込み対象領域）に書き込む。
【００４９】
図９に示された例では、読み込み対象領域２２が、図６に示された読み込み対象領域２２よりも１列下にシフトしている場合を想定する。このとき、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、読み込み対象領域２２（図９）の画像データのうち、まだ読み込まれていないデータ（差分データ）だけを外部メモリ２０から読み込めばよい。
【００５０】
そして、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、読み込んだ差分データだけを、新たにＭｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １（１２１）の該当箇所に書き込めばよい。図９には、新たに書き込まれた部分が、Ｍｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １（１２１）の網掛け部分として示されている。
【００５１】
ＡＬＵ１４０は、Ｍｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  ０（１２０）から読み込まれた係数データと、Ｍｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １（１２１）から読み込まれた入力データとを、対応する画素ごとに乗算し直す。そして、ＡＬＵ１４０は、画素ごとの乗算結果の和を算出する。図９に示されたように、ＡＬＵ１４０は、乗算結果の和を、Ｍｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  ２（１２２）の太枠内（書き込み対象領域）に書き込む。
【００５２】
図１０に示された例では、読み込み対象領域２２が、図６に示された読み込み対象領域２２よりも１列上にシフトしている場合を想定する。このとき、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、読み込み対象領域２２（図１０）の画像データのうち、まだ読み込まれていないデータ（差分データ）だけを外部メモリ２０から読み込めばよい。
【００５３】
そして、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、読み込んだ差分データだけを、新たにＭｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １（１２１）の該当箇所に書き込めばよい。図１０には、新たに書き込まれた部分が、Ｍｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １（１２１）の網掛け部分として示されている。
【００５４】
ＡＬＵ１４０は、Ｍｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  ０（１２０）から読み込まれた係数データと、Ｍｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １（１２１）から読み込まれた入力データとを、対応する画素ごとに乗算し直す。そして、ＡＬＵ１４０は、画素ごとの乗算結果の和を算出する。図１０に示されたように、ＡＬＵ１４０は、乗算結果の和を、Ｍｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  ２（１２２）の太枠内（書き込み対象領域）に書き込む。
【００５５】
Ｍｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  ２（１２２）の各位置に命令の実行結果が書き込まれると、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０によって、Ｍｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  ２（１２２）から実行結果が読み込まれる。そして、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、Ｒｏａｄ／Ｓｔｏｒｅ  Ｕｎｉｔ１１０を介して、外部メモリ２０の書き込み対象領域２７に実行結果を書き込む。
【００５６】
以上、情報処理装置１０が実行する処理の流れについて説明した。
【００５７】
（１．２．２．ポインタの動き）
上記のように、外部メモリから読み込まれたデータは、Ｍｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １（１２１）の該当箇所に書き込まれる。そして、乗算時には、Ｍｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １（１２１）からデータが読み込まれる。以下では、Ｍｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １（１２１）へのデータ書き込みを、単に「書き込み」と言い、Ｍｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １（１２１）からのデータ読み込みを、単に「読み込み」と言う場合がある。
【００５８】
書き込み時には、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒが示す位置にデータが書き込まれる。一方、読み込み時には、Ｒｅａｄ  Ｐｏｉｎｔｅｒが示す位置からデータが読み込まれる。本開示の実施形態では、読み込み対象領域２２の移動方向として複数の移動方向が設けられており、書き込み時には、読み込み対象領域２２の移動方向に応じて、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒの動きが変化する。これによって、読み込み時には、Ｒｅａｄ  Ｐｏｉｎｔｅｒの動きが一定にされ得る。
【００５９】
より詳細に、読み込み対象領域２２の移動方向としては、外部メモリ２０における、第１の次元の正方向、第１の次元の負方向、第２の次元の正方向、および、第２の次元の負方向の４方向が存在する。これらの読み込み対象領域２２の移動方向それぞれには、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒの異なる動きがあらかじめ関連付けされており、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒは、読み込み対象領域２２の移動方向にあらかじめ関連付けられた動きに従って移動する。一方、Ｒｅａｄ  Ｐｏｉｎｔｅｒの動きは、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒの動きのいずれかと同様である。
【００６０】
以下では、第１の次元の正方向が外部メモリ２０の下方向であり、第１の次元の負方向が外部メモリ２０の上方向であり、第２の次元の正方向が外部メモリ２０の右方向であり、第２の次元の負方向が外部メモリ２０の左方向である場合を主に想定する。しかし、これらの４方向それぞれは外部メモリ２０のどちらの方向であってもよい。Ｗｒｉｔｅ  ＰｏｉｎｔｅｒおよびＲｅａｄ  Ｐｏｉｎｔｅｒの移動方向も限定されない。
【００６１】
図１１は、Ｍｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １（１２１）に関する定義を説明するための図である。図１１を参照すると、Ｍｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １（１２１）において、外部メモリ２０における第１の次元に対応する、Ｍｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １（１２１）における次元が「１Ｄ」と表現され、外部メモリ２０における第２の次元に対応する、Ｍｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １（１２１）における次元が「２Ｄ」と表現されている。このように、以下では、第１の次元に対応する次元を「１Ｄ」と表現し、第２の次元に対応する次元を「２Ｄ」と表現する場合がある。
【００６２】
Ｘ１〜Ｘ９は、Ｍｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １（１２１）の物理的な位置を示すアドレス（物理アドレス）である。例えば、Ｘ１は、Ｍｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １（１２１）における左上の位置を示す物理アドレスであり、Ｘ９は、Ｍｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １（１２１）における右下の位置を示す物理アドレスである。原点Ｏは、各次元の値が０の点である。一方、点Ａは、各次元における要素数に対応する長さを有するベクトルの和が示す点である。
【００６３】
図１２は、Ｒｅａｄ  Ｐｏｉｎｔｅｒの動きの例を示す図である。Ｒｅａｄ  Ｐｏｉｎｔｅｒは、初期位置から１Ｄの方向に固定されたまま、２Ｄの正方向に所定の幅だけ移動し、２Ｄの正方向への移動が一巡すると、１Ｄの正方向に所定の幅だけ移動する。以下では、所定の幅の移動が、隣接する位置への移動である場合を想定する。しかし、所定の幅は限定されない。同様に、読み込み対象領域２２も、所定の幅ずつ移動し、所定の幅の移動が、隣接する位置への移動である場合を想定するが、当該所定の幅も限定されない。これ以降、Ｒｅａｄ  Ｐｏｉｎｔｅｒは、同様の移動を繰り返していく。
【００６４】
例えば、初期位置がＸ１（原点Ｏ）である場合、Ｒｅａｄ  Ｐｏｉｎｔｅｒは、Ｘ１、Ｘ２、Ｘ３の順に移動した後、Ｘ１に戻る代わりにＸ４に移動する。そして、Ｒｅａｄ  Ｐｏｉｎｔｅｒは、Ｘ４、Ｘ５、Ｘ６の順に移動した後、Ｘ４に戻る代わりにＸ７に移動する。そして、Ｒｅａｄ  Ｐｏｉｎｔｅｒは、Ｘ７、Ｘ８、Ｘ９（点Ａ）の順に移動した後、Ｘ７に戻る代わりにＸ１（原点Ｏ）に移動する。これ以降、Ｒｅａｄ  Ｐｏｉｎｔｅｒは、同様の移動を繰り返していく。
【００６５】
図１３および図１４は、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒの動きの例を示す図である。上記したように、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒは、読み込み対象領域２２の移動方向にあらかじめ関連付けられた動きに従って移動する。したがって、読み込み対象領域２２の移動方向として４方向が存在する場合、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒの動きにも４通りの動きが存在する。
【００６６】
読み込み対象領域２２の移動方向「第１の次元の正方向」に関連付けられた動きをする論理的なＷｒｉｔｅ  Ｐｏｉｎｔｅｒを「Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（１Ｄ＋）」と表現する場合がある。同様に、読み込み対象領域２２の移動方向「第１の次元の負方向」に関連付けられた動きをする論理的なＷｒｉｔｅ  Ｐｏｉｎｔｅｒを「Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（１Ｄ−）」と表現する場合がある。
【００６７】
一方、読み込み対象領域２２の移動方向「第２の次元の正方向」に関連付けられた動きをする論理的なＷｒｉｔｅ  Ｐｏｉｎｔｅｒを「Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（２Ｄ＋）」と表現する場合がある。同様に、読み込み対象領域２２の移動方向「第２の次元の負方向」に関連付けられた動きをする論理的なＷｒｉｔｅ  Ｐｏｉｎｔｅｒを「Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（２Ｄ−）」と表現する場合がある。
【００６８】
まず、図１３の「Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（１Ｄ＋）」を参照しながら、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（１Ｄ＋）の動きを説明する。Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（１Ｄ＋）の動きは、Ｒｅａｄ  Ｐｏｉｎｔｅｒの動きと同様である。すなわち、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（１Ｄ＋）は、初期位置から１Ｄの方向に固定されたまま、２Ｄの正方向に所定の幅だけ移動し（隣接する位置に移動し）、２Ｄの正方向への移動が一巡すると、１Ｄの正方向に所定の幅だけ移動する（隣接する位置に移動する）。これ以降、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（１Ｄ＋）は、同様の移動を繰り返していく。
【００６９】
例えば、初期位置がＸ１（原点Ｏ）である場合、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（１Ｄ＋）は、Ｘ１、Ｘ２、Ｘ３の順に移動した後、Ｘ１に戻る代わりにＸ４に移動する。そして、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（１Ｄ＋）は、Ｘ４、Ｘ５、Ｘ６の順に移動した後、Ｘ４に戻る代わりにＸ７に移動する。そして、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（１Ｄ＋）は、Ｘ７、Ｘ８、Ｘ９（点Ａ）の順に移動した後、Ｘ７に戻る代わりにＸ１（原点Ｏ）に移動する。これ以降、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（１Ｄ＋）は、同様の移動を繰り返していく。
【００７０】
Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（１Ｄ＋）の初期位置がＸ１（原点Ｏ）でない場合もあり得る。かかる場合であっても、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（１Ｄ＋）は、Ｘ１の代わりに他の位置を初期位置に設定し、同様の動きをすればよい。例えば、初期位置がＸ３である場合、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（１Ｄ＋）は、Ｘ３、Ｘ１、Ｘ２の順に移動した後、Ｘ３に戻る代わりにＸ６に移動すればよい。そして、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（１Ｄ＋）は、Ｘ６、Ｘ４、Ｘ５の順に移動した後、Ｘ６に戻る代わりにＸ９に移動すればよい。そして、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（１Ｄ＋）は、Ｘ９、Ｘ７、Ｘ８の順に移動した後、Ｘ９に戻る代わりにＸ３に移動すればよい。これ以降、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（１Ｄ＋）は、同様の移動を繰り返せばよい。
【００７１】
続いて、図１３の「Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（２Ｄ＋）」を参照しながら、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（２Ｄ＋）の動きを説明する。Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（２Ｄ＋）は、初期位置から２Ｄの方向に固定されたまま、１Ｄの正方向に所定の幅だけ移動し（隣接する位置に移動し）、１Ｄの正方向への移動が一巡すると、２Ｄの正方向に所定の幅だけ移動する（隣接する位置に移動する）。これ以降、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（２Ｄ＋）は、同様の移動を繰り返していく。
【００７２】
例えば、初期位置がＸ１（原点Ｏ）である場合、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（２Ｄ＋）は、Ｘ１、Ｘ４、Ｘ７の順に移動した後、Ｘ１に戻る代わりにＸ２に移動する。そして、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（２Ｄ＋）は、Ｘ２、Ｘ５、Ｘ８の順に移動した後、Ｘ２に戻る代わりにＸ３に移動する。そして、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（２Ｄ＋）は、Ｘ３、Ｘ６、Ｘ９（点Ａ）の順に移動した後、Ｘ３に戻る代わりにＸ１（原点Ｏ）に移動する。これ以降、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（２Ｄ＋）は、同様の移動を繰り返していく。
【００７３】
Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（２Ｄ＋）の初期位置がＸ１（原点Ｏ）でない場合もあり得る。かかる場合であっても、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（２Ｄ＋）は、Ｘ１の代わりに他の位置を初期位置に設定し、同様の動きをすればよい。例えば、初期位置がＸ４である場合、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（２Ｄ＋）は、Ｘ４、Ｘ７、Ｘ１の順に移動した後、Ｘ４に戻る代わりにＸ５に移動すればよい。そして、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（２Ｄ＋）は、Ｘ５、Ｘ８、Ｘ２の順に移動した後、Ｘ５に戻る代わりにＸ６に移動すればよい。そして、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（２Ｄ＋）は、Ｘ６、Ｘ９、Ｘ３の順に移動した後、Ｘ６に戻る代わりにＸ４に移動すればよい。これ以降、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（２Ｄ＋）は、同様の移動を繰り返せばよい。
【００７４】
続いて、図１４の「Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（１Ｄ−）」を参照しながら、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（１Ｄ−）の動きを説明する。Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（１Ｄ−）は、初期位置から１Ｄの方向に固定されたまま、２Ｄの負方向に所定の幅だけ移動し（隣接する位置に移動し）、２Ｄの負方向への移動が一巡すると、１Ｄの負方向に所定の幅だけ移動する（隣接する位置に移動する）。これ以降、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（１Ｄ−）は、同様の移動を繰り返していく。
【００７５】
例えば、初期位置がＸ９（点Ａ）である場合、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（１Ｄ−）は、Ｘ９、Ｘ８、Ｘ７の順に移動した後、Ｘ９に戻る代わりにＸ６に移動する。そして、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（１Ｄ−）は、Ｘ６、Ｘ５、Ｘ４の順に移動した後、Ｘ６に戻る代わりにＸ３に移動する。そして、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（１Ｄ−）は、Ｘ３、Ｘ２、Ｘ１（原点Ｏ）の順に移動した後、Ｘ３に戻る代わりにＸ９（点Ａ）に移動する。これ以降、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（１Ｄ−）は、同様の移動を繰り返していく。
【００７６】
Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（１Ｄ−）の初期位置がＸ９（点Ａ）でない場合もあり得る。かかる場合であっても、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（１Ｄ−）は、Ｘ９の代わりに他の位置を初期位置に設定し、同様の動きをすればよい。例えば、初期位置がＸ７である場合、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（１Ｄ−）は、Ｘ７、Ｘ９、Ｘ８の順に移動した後、Ｘ７に戻る代わりにＸ４に移動すればよい。そして、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（１Ｄ−）は、Ｘ４、Ｘ６、Ｘ５の順に移動した後、Ｘ４に戻る代わりにＸ１に移動すればよい。そして、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（１Ｄ−）は、Ｘ１、Ｘ３、Ｘ２の順に移動した後、Ｘ１に戻る代わりにＸ７に移動すればよい。これ以降、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（１Ｄ−）は、同様の移動を繰り返せばよい。
【００７７】
続いて、図１４の「Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（２Ｄ−）」を参照しながら、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（２Ｄ−）の動きを説明する。Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（２Ｄ−）は、初期位置から２Ｄの方向に固定されたまま、１Ｄの負方向に所定の幅だけ移動し（隣接する位置に移動し）、１Ｄの負方向への移動が一巡すると、２Ｄの負方向に所定の幅だけ移動する（隣接する位置に移動する）。これ以降、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（２Ｄ−）は、同様の移動を繰り返していく。
【００７８】
例えば、初期位置がＸ９（点Ａ）である場合、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（２Ｄ−）は、Ｘ９、Ｘ６、Ｘ３の順に移動した後、Ｘ９に戻る代わりにＸ８に移動する。そして、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（２Ｄ−）は、Ｘ８、Ｘ５、Ｘ２の順に移動した後、Ｘ８に戻る代わりにＸ７に移動する。そして、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（２Ｄ−）は、Ｘ７、Ｘ４、Ｘ１（原点Ｏ）の順に移動した後、Ｘ７に戻る代わりにＸ９（点Ａ）に移動する。これ以降、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（２Ｄ−）は、同様の移動を繰り返していく。
【００７９】
Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（２Ｄ−）の初期位置がＸ９（点Ａ）でない場合もあり得る。かかる場合であっても、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（２Ｄ−）は、Ｘ９の代わりに他の位置を初期位置に設定し、同様の動きをすればよい。例えば、初期位置がＸ３である場合、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（２Ｄ−）は、Ｘ３、Ｘ９、Ｘ６の順に移動した後、Ｘ３に戻る代わりにＸ２に移動すればよい。そして、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（２Ｄ−）は、Ｘ２、Ｘ８、Ｘ５の順に移動した後、Ｘ２に戻る代わりにＸ１に移動すればよい。そして、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（２Ｄ−）は、Ｘ１、Ｘ７、Ｘ４の順に移動した後、Ｘ１に戻る代わりにＸ３に移動すればよい。これ以降、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（２Ｄ−）は、同様の移動を繰り返せばよい。
【００８０】
以上に説明したように、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒの動きには４通りの動きが存在するため、これらの４通りの動きそれぞれに対して物理的に異なるＷｒｉｔｅ  Ｐｏｉｎｔｅｒが使用されてもよいが、必ずしもこれらの４通りの動きそれぞれに対して物理的に異なるＷｒｉｔｅ  Ｐｏｉｎｔｅｒが使用されなくてよい。本実施形態では、２通りの動きに対して物理的に１つのＷｒｉｔｅ  Ｐｏｉｎｔｅｒが使用される場合を主に想定する（すなわち、４通りの動きに対して物理的に２つのＷｒｉｔｅ  Ｐｏｉｎｔｅｒが使用される場合を想定する）。
【００８１】
より詳細には、読み込み対象領域２２の第１の次元の移動方向（第１の次元方向）と、読み込み対象領域２２の第２の次元の移動方向（第２の次元方向）との正負の別が同じ場合、各Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（第１のポインタおよび第２のポインタ）として物理的に同一のＷｒｉｔｅ  Ｐｏｉｎｔｅｒが使用される場合を主に想定する。一方、読み込み対象領域２２の第１の次元の移動方向（第１の次元方向）と、読み込み対象領域２２の第２の次元の移動方向（第２の次元方向）との正負の別が異なる場合には、各Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒとして物理的に異なるＷｒｉｔｅ  Ｐｏｉｎｔｅｒが使用される場合を主に想定する。
【００８２】
すなわち、本開示の実施形態では、図１３に示されるように、「Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（１Ｄ＋）」と「Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（２Ｄ＋）」との間で、物理的に同一のＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）が使用される場合を主に想定する。また、本開示の実施形態では、図１４に示されるように、「Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（１Ｄ−）」と「Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（２Ｄ−）」との間で、物理的に同一のＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ２）が使用される場合を主に想定する。Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）とＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ２）とは物理的に異なっている。
【００８３】
しかし、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）およびＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ２）それぞれの動きの対応関係があらかじめ定められていれば、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）およびＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ２）のいずれか一方のみが使用されてもよい。すなわち、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）およびＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ２）のうち、いずれか一方のみが使用され、かかる対応関係に基づいて、当該一方のＷｒｉｔｅ  Ｐｏｉｎｔｅｒの位置から他方のＷｒｉｔｅ  Ｐｏｉｎｔｅｒの位置が算出されてもよい。
【００８４】
以下に説明する例においても、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）とＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ２）とが、Ｍｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １（１２１）において対角に位置するという相互関係が保たれるように移動される場合を主に想定する。したがって、以下に説明する例においても、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）とＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ２）のいずれか一方のみが使用されてもよい。
【００８５】
なお、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）とＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ２）とが対角に位置するとは、Ｍｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １（１２１）において、最下行（第２行）の下に最上行（第０行）が隣接し、最右列（第２列）の右に最左列（第０列）が隣接するとした場合に、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）が示す位置を左上隅とする３×３の矩形領域の右下隅をＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ２）が示すことを言う。
【００８６】
以上、ポインタの動きの例について説明した。
【００８７】
（１．２．３．具体的な処理例）
上記したようなポインタの動きとともに情報処理装置１０による処理が実行される。続いて、情報処理装置１０による具体的な処理例について説明する。図１５〜図３０は、外部メモリ２０における対象範囲２１の読み込み対象領域２２と、読み込み対象領域２２の一部または全部から読み込まれたデータが該当箇所に書き込まれたＭｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １（１２１）との対応例を示す図である。
【００８８】
図１５〜図３０を参照すると、対象範囲２１の各位置に格納されているデータがＭ００〜Ｍ５５として表現されている。読み込み対象領域２２は、対象範囲２１の内部を初期位置から所定の幅ずつ次々に移動していき（隣接する位置に移動していき）、対象範囲２１の内部を網羅的に移動する。具体的に、図１５が初期状態を示しており、図１６、図１７、・・・の順に、読み込み対象領域２２が次々と移動していく。図１５に示された例では、読み込み対象領域２２の初期位置が対象範囲２１の左上であるが、読み込み対象領域２２の初期位置は対象範囲２１の左上に限定されない。
【００８９】
読み込み対象領域２２の一部または全部から読み込まれたデータは、Ｍｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １（１２１）の該当箇所に書き込まれる。図１５〜図３０を参照すると、Ｍｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １（１２１）の各位置には、物理アドレスが括弧付きでＸ１〜Ｘ９として示されており、その下に各位置に書き込まれたデータが示されている。データの書き込みには、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）およびＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ２）が用いられる。
【００９０】
Ｍｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １（１２１）には、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）およびＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ２）が示されている。初期状態では、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）がＸ１を示しており、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ２）がＸ９を示している。しかし、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）およびＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ２）それぞれの初期位置も限定されない。
【００９１】
まず、図１５に示されるように、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、Ｒｏａｄ／Ｓｔｏｒｅ  Ｕｎｉｔ１１０を介して、初期位置に設定した読み込み対象領域２２の全部からデータを読み込む。Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、読み込み対象領域２２の全部から読み込んだデータを、Ｍｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １（１２１）に書き込む。図１５を参照すると、読み込み対象領域２２から読み込まれたデータＭ００〜Ｍ２２がＸ１〜Ｘ９に書き込まれている。
【００９２】
ＡＬＵ１４０は、このようにしてＭｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １（１２１）に書き込まれたデータに基づく処理を実行する。具体的に、ＡＬＵ１４０は、Ｍｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １（１２１）から、Ｒｅａｄ  Ｐｏｉｎｔｅｒを用いてＸ１〜Ｘ９のデータを順に読み込み、Ｘ１〜Ｘ９のデータと係数データとを画素ごとに乗算し、画素ごとの乗算結果の和を算出する。ＡＬＵ１４０は、処理の実行結果（乗算結果の和）を、Ｍｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  ２（１２２）の該当する書き込み対象領域に書き込む。
【００９３】
続いて、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、読み込み対象領域２２を移動させる。最初は、読み込み対象領域２２の移動方向が、外部メモリ２０における「第１の次元の正方向」である場合を想定する。すなわち、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒとしては、第１の次元の正方向に対応するＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（１Ｄ＋）が用いられる場合を想定する。したがって、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（１Ｄ＋）に対応するＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）が用いられる。
【００９４】
図１６に示されるように、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、読み込み対象領域２２（図１５）を第１の次元の正方向３１−１に所定の幅だけ移動させる（隣接する位置へ移動させる）。ここで、移動後の読み込み対象領域２２（図１６）のうち、データＭ１０〜Ｍ２２は、既にＭｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １（１２１）に書き込まれている。したがって、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、移動後の読み込み対象領域２２（図１６）のうち、第１の次元の正方向３１−１の先端領域のデータ（データＭ３０〜Ｍ３２）だけを新たに読み込めばよい。なお、先端領域は、第１の次元の正方向３１−１に所定の幅を有している。
【００９５】
ここで、図１５に示された例において、Ｍｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １（１２１）の第１の次元の正方向３１−１に対応する方向（１Ｄの正方向３２−１）の後端領域のデータ（すなわち、Ｘ１、Ｘ２、Ｘ３のデータ）は、次の処理に用いられないと考えられる。そこで、図１６に示されたように、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、先端領域のデータ（データＭ３０〜Ｍ３２）で、後端領域（すなわち、Ｘ１、Ｘ２、Ｘ３）の上書き（第１の上書き）を行う。なお、後端領域は、第１の次元の正方向３１−１に対応する方向（１Ｄの正方向３２−１）に所定の幅を有している。
【００９６】
より具体的に、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）を後端領域に設定し、先端領域のデータ（データＭ３０〜Ｍ３２）をＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）が示す位置に上書きする。例えば、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（１Ｄ＋）の動きに従って、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）を、Ｘ１、Ｘ２、Ｘ３の順に移動させながら、先端領域のデータ（データＭ３０〜Ｍ３２）をＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）が示す位置に順に上書きする。
【００９７】
その後、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（１Ｄ＋）の動きに従って、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）をＸ４に移動させる。このとき、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ２）がＭｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １（１２１）においてＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）と対角に位置するようにＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ２）を（Ｘ３に）移動させる。ここで、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０が、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ２）を移動させるタイミングは限定されない。
【００９８】
例えば、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）を、Ｘ１、Ｘ２、Ｘ３、Ｘ４の順に移動させるのに合わせて、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ２）をＸ９、Ｘ１、Ｘ２、Ｘ３の順に移動させてもよい。しかし、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）の移動のたびにＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ２）も移動させるとすると、多くの消費電力が掛かってしまう。また、いずれにしてもＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）がＸ４に到達するまで、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）とＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ２）との間で使用されるＷｒｉｔｅ  Ｐｏｉｎｔｅｒの切り替えは行われない。
【００９９】
したがって、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）がＸ３に到達するまではＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）を移動させずに、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）がＸ３からＸ４に移動するタイミングで、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ２）をＸ９からＸ３に一気に移動させればよい。図１６を参照すると、後端領域のデータ（すなわち、Ｘ１、Ｘ２、Ｘ３のデータ）が、先端領域のデータ（データＭ３０〜Ｍ３２）で上書きされた様子が示されている。
【０１００】
ＡＬＵ１４０は、上書き後のＭｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １（１２１）のデータに基づく処理（第１の処理）を実行する。具体的に、ＡＬＵ１４０は、上書き後のＭｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １（１２１）から、Ｒｅａｄ  Ｐｏｉｎｔｅｒを用いてＸ１〜Ｘ９のデータを順に読み込み、Ｘ１〜Ｘ９のデータと係数データとを画素ごとに乗算し、画素ごとの乗算結果の和を算出する。ＡＬＵ１４０は、処理の実行結果（乗算結果の和）を、Ｍｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  ２（１２２）の該当する書き込み対象領域に書き込む。
【０１０１】
図１７に示されるように、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）のＸ４への移動によって、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）を第１の次元の正方向３１−１に対応する方向（１Ｄの正方向３２−１）に移動させるポインタ移動を行う。それとともに、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、読み込み対象領域２２（図１６）を第１の次元の正方向３１−１に移動させる（隣接する位置へ移動させる）領域移動を行う。
【０１０２】
ここで、移動後の読み込み対象領域２２（図１７）のうち、データＭ２０〜Ｍ３２は、既にＭｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １（１２１）に書き込まれている。したがって、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、移動後の読み込み対象領域２２（図１７）のうち、第１の次元の正方向３１−１の先端領域のデータ（データＭ４０〜Ｍ４２）だけを新たに読み込めばよい。
【０１０３】
そして、図１７に示された例において、移動後のＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）（図１７）が示す位置のデータ（すなわち、Ｘ４、Ｘ５、Ｘ６のデータ）は、次の処理に用いられないと考えられる。そこで、図１７に示されたように、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、移動後の読み込み対象領域２２（図１７）のうち先端領域のデータ（データＭ４０〜Ｍ４２）で、移動後のＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）（図１７）が示す位置に上書き（第２の上書き）を行う。
【０１０４】
例えば、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（１Ｄ＋）の動きに従って、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）を、Ｘ４、Ｘ５、Ｘ６の順に移動させながら、先端領域のデータ（データＭ４０〜Ｍ４２）をＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）が示す位置に順に上書きする。
【０１０５】
その後、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（１Ｄ＋）の動きに従って、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）をＸ７に移動させる。
【０１０６】
このとき、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ２）がＭｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １（１２１）においてＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）と対角に位置するようにＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ２）を移動させる。ここで、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０が、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ２）を移動させるタイミングは上記と同様に限定されない。
【０１０７】
ＡＬＵ１４０は、上書き後のＭｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １（１２１）のデータに基づく処理（第２の処理）を実行する。第２の処理は第１の処理と同様の処理であってよい。ＡＬＵ１４０は、第２の処理の実行結果を、Ｍｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  ２（１２２）の該当する書き込み対象領域に書き込む。
【０１０８】
このようにして、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）の移動（ポインタ移動）と読み込み対象領域２２の移動（領域移動）とＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）が示す位置への上書き（第２の上書き）と上書き後のＭｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １（１２１）のデータに基づく処理（第２の処理）との組み合わせが実行される。かかる組み合わせは、１回実行されてもよいし、複数回実行されてもよい。
【０１０９】
かかる組み合わせが１または複数回実行された後、さらにＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）の移動（ポインタ移動）を行うに際して、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）を移動させてしまうとＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）がＭｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １（１２１）の外側に出てしまう場合が想定される。かかる場合、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）を、第１の次元の正方向３１−１に対応する方向（１Ｄの正方向３２−１）の後端領域に戻せばよい。
【０１１０】
また、かかる組み合わせが１または複数回実行された後、さらに読み込み対象領域２２の移動（領域移動）を行うに際して所定の条件が満たされた場合が想定される。かかる場合、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、読み込み対象領域２２を第１の次元の方向とは異なる第２の次元の方向に移動させればよい。所定の条件は限定されない。例えば、所定の条件は、読み込み対象領域２２を第１の次元の方向に移動させると読み込み対象領域２２が外部メモリ２０の対象範囲２１の外側に出てしまうという条件であってよい。
【０１１１】
そして、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、移動後の読み込み対象領域２２のうち第２の次元の方向の先端領域のデータで、Ｍｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １（１２１）のうち第２の次元の方向に対応する方向の後端領域の上書き（第３の上書き）を行えばよい。
【０１１２】
より具体的には、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）を第２の次元の方向に対応する方向の後端領域に設定し、移動後の読み込み対象領域２２のうち第２の次元の方向の先端領域のデータで、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）が示す位置に上書きすることによって、上書き（第３の上書き）を行えばよい。
【０１１３】
ＡＬＵ１４０は、第３の上書き後のＭｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １（１２１）のデータに基づく処理（第３の処理）を実行する。第３の処理は、第１の処理と同様の処理であってよい。ＡＬＵ１４０は、第３の処理の実行結果を、Ｍｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  ２（１２２）の該当する書き込み対象領域に書き込む。
【０１１４】
以下では、かかる組み合わせが２回実行される場合を想定する。１回目の実行結果は、図１７に示された通りである。また、２回目の実行結果は、図１８に示された通りである。図１８を参照すると、図１７に示された例と同様にして、読み込み対象領域２２、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）およびＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ２）が移動され、移動後の読み込み対象領域２２のうち先端領域のデータ（データＭ５０〜Ｍ５２）で、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）が示す位置に上書きが行われている。
【０１１５】
図１８に示された例において、さらにＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）を第１の次元の正方向３１−１に対応する方向（１Ｄの正方向３２−１）に移動させてしまうとＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）がＭｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １（１２１）の外側に出てしまう。そこで、図１９に示されるように、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）を、第１の次元の正方向３１−１に対応する方向（１Ｄの正方向３２−１）の後端領域に戻せばよい。
【０１１６】
具体的に、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（１Ｄ＋）の動きに従って、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）を、Ｘ７、Ｘ８、Ｘ９の順に移動させながら、先端領域のデータ（データＭ５０〜Ｍ５２）をＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）が示す位置に順に上書きする。図１９に示されるように、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（１Ｄ＋）の動きに従って、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）をＸ１に移動させる。なお、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ２）は、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）と対角に位置するように（Ｘ９に）移動される。
【０１１７】
また、図１８に示された例において、さらに読み込み対象領域２２を第１の次元の正方向３１−１に移動させてしまうと読み込み対象領域２２が外部メモリ２０の対象範囲２１の外側に出てしまう。そこで、図１９に示されるように、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、読み込み対象領域２２の移動方向を第１の次元の正方向３１−１とは異なる第２の次元の方向（正方向３１−２）に変更すればよい。変更先の移動方向は限定されない。
【０１１８】
そして、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、読み込み対象領域２２の移動方向の変更とともに、使用する論理的なＷｒｉｔｅ  Ｐｏｉｎｔｅｒも変更する。図１９に示された例では、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、読み込み対象領域２２の移動方向を第２の次元の正方向３１−２に変更したため、第２の次元の正方向３１−２に対応するＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（２Ｄ＋）に、使用する論理的なＷｒｉｔｅ  Ｐｏｉｎｔｅｒを変更する。
【０１１９】
Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（２Ｄ＋）の動きに従って、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）を、Ｘ１、Ｘ４、Ｘ７の順に移動させながら、先端領域のデータ（データＭ３３、Ｍ４３、Ｍ５３）をＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）が示す位置に順に上書きする。これによって、上記した第３の上書きが行われる。図２０に示されるように、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（２Ｄ＋）の動きに従って、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）をＸ２に移動させる。なお、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ２）は、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）と対角に位置するように（Ｘ７に）移動される。
【０１２０】
読み込み対象領域２２の移動方向は、第２の次元の正方向３１−２のままでもよい。かかる場合には、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、引き続きＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）を第２の次元の正方向３１−２に対応する方向（２Ｄの正方向３２−２）に移動させるとともに、外部メモリ２０において読み込み対象領域２２を第２の次元の正方向３１−２に移動させる。Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、移動後の読み込み対象領域２２のうち第２の次元の正方向３１−２の先端領域のデータで、移動後のＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）が示す位置に第４の上書きを行う。
【０１２１】
そして、ＡＬＵ１４０は、第４の上書き後のＭｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １（１２１）のデータに基づく処理（第４の処理）を実行する。第４の処理は、第１の処理と同様の処理であってよい。ＡＬＵ１４０は、第４の処理の実行結果を、Ｍｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  ２（１２２）の該当する書き込み対象領域に書き込む。
【０１２２】
しかし、以下では、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、読み込み対象領域２２の移動方向を、第２の次元の正方向３１−２から変更する場合を想定する。図２０に示された例では、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、読み込み対象領域２２の移動方向を第２の次元の正方向３１−２とは異なる第１の次元の方向（負方向３１−３）に変更している。変更先の移動方向は限定されない。
【０１２３】
Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、読み込み対象領域２２の移動方向の変更とともに、使用する論理的なＷｒｉｔｅ  Ｐｏｉｎｔｅｒも変更する。図２０に示された例では、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、読み込み対象領域２２の移動方向を第１の次元の負方向３１−３に変更したため、第１の次元の負方向３１−３に対応するＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（１Ｄ−）に、使用する論理的なＷｒｉｔｅ  Ｐｏｉｎｔｅｒを変更する。そして、使用される物理的なＷｒｉｔｅ  Ｐｏｉｎｔｅｒも、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（１Ｄ−）に対応するＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ２）に切り替えられる。
【０１２４】
Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（１Ｄ−）の動きに従って、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ２）を、Ｘ７、Ｘ９、Ｘ８の順に移動させながら、先端領域のデータ（データＭ２３〜Ｍ２１）をＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ２）が示す位置に順に上書きする。ＡＬＵ１４０は、上書き後のＭｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １（１２１）のデータに基づく処理を実行し、実行結果をＭｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  ２（１２２）の該当する書き込み対象領域に書き込む。図２１に示されるように、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（１Ｄ−）の動きに従って、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ２）をＸ４に移動させる。なお、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）は、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ２）と対角に位置するように（Ｘ８に）移動される。
【０１２５】
以降は、上記と同様の処理が繰り返し実行される。図２１に示されるように、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、引き続き読み込み対象領域２２を第１の次元の負方向３１−３に移動させる。そして、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（１Ｄ−）の動きに従って、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ２）を、Ｘ４、Ｘ６、Ｘ５の順に移動させながら、先端領域のデータ（データＭ１３〜Ｍ１１）をＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ２）が示す位置に順に上書きする。ＡＬＵ１４０は、上書き後のＭｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １（１２１）のデータに基づく処理を実行し、実行結果をＭｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  ２（１２２）の該当する書き込み対象領域に書き込む。
【０１２６】
そして、図２２に示されるように、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（１Ｄ−）の動きに従って、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ２）をＸ１に移動させる。これによって、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ２）が第１の次元の負方向３１−３に対応する方向（１Ｄの負方向３２−３）に移動される。このとき、図２２に示されるように、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）がＭｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １（１２１）においてＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ２）と対角に位置するようにＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）を（Ｘ５に）移動させる。
【０１２７】
続いて、図２２に示されるように、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、引き続き読み込み対象領域２２を第１の次元の負方向３１−３に移動させる。そして、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（１Ｄ−）の動きに従って、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ２）を、Ｘ１、Ｘ３、Ｘ２の順に移動させながら、先端領域のデータ（データＭ０３〜Ｍ０１）をＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ２）が示す位置に順に上書きする。ＡＬＵ１４０は、上書き後のＭｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １（１２１）のデータに基づく処理を実行し、実行結果をＭｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  ２（１２２）の該当する書き込み対象領域に書き込む。
【０１２８】
そして、図２３に示されるように、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（１Ｄ−）の動きに従って、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ２）をＸ７に移動させる。これによって、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ２）が第１の次元の負方向３１−３に対応する方向（１Ｄの負方向３２−３）に移動される。このとき、図２３に示されるように、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）がＭｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １（１２１）においてＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ２）と対角に位置するようにＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）を（Ｘ２に）移動させる。
【０１２９】
続いて、図２３に示されるように、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、読み込み対象領域２２を第２の次元の正方向３１−２に移動させる。使用する論理的なＷｒｉｔｅ  Ｐｏｉｎｔｅｒは、第２の次元の正方向３１−２に対応するＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（２Ｄ＋）に変更される。そして、使用される物理的なＷｒｉｔｅ  Ｐｏｉｎｔｅｒも、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（２Ｄ＋）に対応するＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）に切り替えられる。Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（２Ｄ＋）の動きに従って、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）を、Ｘ２、Ｘ５、Ｘ８の順に移動させながら、先端領域のデータ（データＭ０４、Ｍ１４、Ｍ２４）をＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）が示す位置に順に上書きする。ＡＬＵ１４０は、上書き後のＭｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １（１２１）のデータに基づく処理を実行し、実行結果をＭｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  ２（１２２）の該当する書き込み対象領域に書き込む。
【０１３０】
そして、図２４に示されるように、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（２Ｄ＋）の動きに従って、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）をＸ３に移動させる。これによって、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）が第２の次元の正方向３１−２に対応する方向（２Ｄの正方向３２−２）に移動される。このとき、図２４に示されるように、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ２）がＭｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １（１２１）においてＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）と対角に位置するようにＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ２）を（Ｘ８に）移動させる。
【０１３１】
続いて、図２４に示されるように、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、読み込み対象領域２２を第１の次元の正方向３１−１に移動させる。使用する論理的なＷｒｉｔｅ  Ｐｏｉｎｔｅｒは、第１の次元の正方向３１−１に対応するＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（１Ｄ＋）に変更される。Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（１Ｄ＋）の動きに従って、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）を、Ｘ３、Ｘ１、Ｘ２の順に移動させながら、先端領域のデータ（データＭ３２〜Ｍ３４）をＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）が示す位置に順に上書きする。ＡＬＵ１４０は、上書き後のＭｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １（１２１）のデータに基づく処理を実行し、実行結果をＭｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  ２（１２２）の該当する書き込み対象領域に書き込む。
【０１３２】
そして、図２５に示されるように、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（２Ｄ＋）の動きに従って、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）をＸ６に移動させる。これによって、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）が第１の次元の正方向３１−１に対応する方向（１Ｄの正方向３２−１）に移動される。このとき、図２５に示されるように、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ２）がＭｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １（１２１）においてＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）と対角に位置するようにＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ２）を（Ｘ２に）移動させる。
【０１３３】
続いて、図２５に示されるように、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、引き続き読み込み対象領域２２を第１の次元の正方向３１−１に移動させる。Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（１Ｄ＋）の動きに従って、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）を、Ｘ６、Ｘ４、Ｘ５の順に移動させながら、先端領域のデータ（データＭ４２〜Ｍ４４）をＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）が示す位置に順に上書きする。ＡＬＵ１４０は、上書き後のＭｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １（１２１）のデータに基づく処理を実行し、実行結果をＭｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  ２（１２２）の該当する書き込み対象領域に書き込む。
【０１３４】
そして、図２６に示されるように、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（１Ｄ＋）の動きに従って、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）をＸ９に移動させる。これによって、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）が第１の次元の正方向３１−１に対応する方向（１Ｄの正方向３２−１）に移動される。このとき、図２６に示されるように、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ２）がＭｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １（１２１）においてＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）と対角に位置するようにＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ２）を（Ｘ５に）移動させる。
【０１３５】
続いて、図２６に示されるように、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、引き続き読み込み対象領域２２を第１の次元の正方向３１−１に移動させる。Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（１Ｄ＋）の動きに従って、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）を、Ｘ９、Ｘ７、Ｘ８の順に移動させながら、先端領域のデータ（データＭ５２〜Ｍ５４）をＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）が示す位置に順に上書きする。ＡＬＵ１４０は、上書き後のＭｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １（１２１）のデータに基づく処理を実行し、実行結果をＭｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  ２（１２２）の該当する書き込み対象領域に書き込む。
【０１３６】
そして、図２７に示されるように、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（１Ｄ＋）の動きに従って、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）をＸ３に移動させる。これによって、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）が第１の次元の正方向３１−１に対応する方向（１Ｄの正方向３２−１）に移動される。このとき、図２７に示されるように、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ２）がＭｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １（１２１）においてＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）と対角に位置するようにＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ２）を（Ｘ８に）移動させる。
【０１３７】
続いて、図２７に示されるように、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、読み込み対象領域２２を第２の次元の正方向３１−２に移動させる。使用する論理的なＷｒｉｔｅ  Ｐｏｉｎｔｅｒは、第２の次元の正方向３１−２に対応するＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（２Ｄ＋）に変更される。Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、読み込み対象領域２２を第２の次元の正方向３１−２に移動させる。Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（２Ｄ＋）の動きに従って、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）を、Ｘ３、Ｘ６、Ｘ９の順に移動させながら、先端領域のデータ（データＭ３５、Ｍ４５、Ｍ５５）をＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）が示す位置に順に上書きする。ＡＬＵ１４０は、上書き後のＭｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １（１２１）のデータに基づく処理を実行し、実行結果をＭｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  ２（１２２）の該当する書き込み対象領域に書き込む。
【０１３８】
そして、図２８に示されるように、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（２Ｄ＋）の動きに従って、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）をＸ１に移動させる。これによって、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）が第２の次元の正方向３１−２に対応する方向（２Ｄの正方向３２−２）に移動される。このとき、図２８に示されるように、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ２）がＭｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １（１２１）においてＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）と対角に位置するようにＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ２）を（Ｘ９に）移動させる。
【０１３９】
続いて、図２８に示されるように、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、読み込み対象領域２２を第１の次元の負方向３１−３に移動させる。使用する論理的なＷｒｉｔｅ  Ｐｏｉｎｔｅｒは、第１の次元の負方向３１−３に対応するＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（１Ｄ−）に変更される。そして、使用される物理的なＷｒｉｔｅ  Ｐｏｉｎｔｅｒも、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（１Ｄ−）に対応するＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ２）に切り替えられる。Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（１Ｄ−）の動きに従って、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ２）を、Ｘ９、Ｘ８、Ｘ７の順に移動させながら、先端領域のデータ（データＭ２５〜Ｍ２３）をＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ２）が示す位置に順に上書きする。ＡＬＵ１４０は、上書き後のＭｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １（１２１）のデータに基づく処理を実行し、実行結果をＭｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  ２（１２２）の該当する書き込み対象領域に書き込む。
【０１４０】
そして、図２９に示されるように、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（１Ｄ−）の動きに従って、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ２）をＸ６に移動させる。これによって、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ２）が第１の次元の負方向３１−３に対応する方向（１Ｄの負方向３２−３）に移動される。このとき、図２９に示されるように、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）がＭｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １（１２１）においてＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ２）と対角に位置するようにＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）を（Ｘ７に）移動させる。
【０１４１】
続いて、図２９に示されるように、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、引き続き読み込み対象領域２２を第１の次元の負方向３１−３に移動させる。Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（１Ｄ−）の動きに従って、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ２）を、Ｘ６、Ｘ５、Ｘ４の順に移動させながら、先端領域のデータ（データＭ１５〜Ｍ１３）をＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ２）が示す位置に順に上書きする。ＡＬＵ１４０は、上書き後のＭｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １（１２１）のデータに基づく処理を実行し、実行結果をＭｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  ２（１２２）の該当する書き込み対象領域に書き込む。
【０１４２】
そして、図３０に示されるように、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（１Ｄ−）の動きに従って、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ２）をＸ３に移動させる。これによって、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ２）が第１の次元の負方向３１−３に対応する方向（１Ｄの負方向３２−３）に移動される。このとき、図３０に示されるように、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）がＭｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １（１２１）においてＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ２）と対角に位置するようにＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）を（Ｘ４に）移動させる。
【０１４３】
続いて、図３０に示されるように、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、引き続き読み込み対象領域２２を第１の次元の負方向３１−３に移動させる。Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（１Ｄ−）の動きに従って、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ２）を、Ｘ３、Ｘ２、Ｘ１の順に移動させながら、先端領域のデータ（データＭ０５〜Ｍ０３）をＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ２）が示す位置に順に上書きする。ＡＬＵ１４０は、上書き後のＭｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  １（１２１）のデータに基づく処理を実行し、実行結果をＭｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  ２（１２２）の該当する書き込み対象領域に書き込む。
【０１４４】
以上により、Ｍｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  ２（１２２）には、外部メモリ２０の対象範囲２１の内部を移動した読み込み対象領域２２の各位置に対応する実行結果が書き込まれる。Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、Ｍｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  ２（１２２）のデータを出力データとして、Ｒｏａｄ／Ｓｔｏｒｅ  Ｕｎｉｔ１１０を介して、外部メモリ２０の書き込み対象領域２７に書き込む。
【０１４５】
以上、情報処理装置１０による具体的な処理例について説明した。
【０１４６】
（１．２．４．プログラム例）
上記したようにして、情報処理装置１０による処理が実行される。情報処理装置１０による処理は、プログラムに基づいて実行され得る。以下では、情報処理装置１０による処理を実現するためのプログラム例について説明する。なお、以下に説明するプログラム例は、図１５〜図３０に示された処理例に対応しているが、情報処理装置１０による処理を実現するためのプログラムの一例を示したに過ぎない。したがって、情報処理装置１０による処理を実現するためのプログラムは、以下に説明するプログラム例に限定されない。
【０１４７】
図３１は、本開示の実施形態に係る情報処理装置１０を実現するためのプログラムにおいて使用される各種命令の定義を示す図である。図３１に示された命令定義ＰＧ１０のように、プログラムにおいて使用される各種命令が定義され得る。図３２〜図３４は、本開示の実施形態に係る情報処理装置１０を実現するためのプログラムの例を示す図である。本開示の実施形態に係る情報処理装置１０を実現するためのプログラムは、図３２〜図３４に示されたプログラムＰＧ２１〜ＰＧ２３のように実現され得る。
【０１４８】
以上、情報処理装置１０による処理を実現するためのプログラム例について説明した。
【０１４９】
（１．２．５．動作例）
続いて、情報処理装置１０の動作例について説明する。図３５は、本開示の実施形態に係る情報処理装置１０の動作例を示すフローチャートの注釈を示す図である。図３６〜図３８は、本開示の実施形態に係る情報処理装置１０の動作例を示すフローチャートである。なお、以下に説明する動作例も、図１５〜図３０に示された処理例に対応しているが、情報処理装置１０の動作の一例を示したに過ぎない。したがって、情報処理装置１０の動作は、以下に説明する動作例に限定されない。図３６〜図３８に登場する各変数は、図３５に示されたようにして使用される。
【０１５０】
図３６に示されるように、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、係数を読み込むバッファＢＵＦ０の次元数とサイズを設定する（Ｓ１１）。そして、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、Ｒｏａｄ／Ｓｔｏｒｅ  Ｕｎｉｔ１１０を介して係数を外部メモリからバッファＢＵＦ０へロードする（Ｓ１２）。
【０１５１】
Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、入力データを読み込むバッファＢＵＦ１の次元数とサイズを設定する（Ｓ１３）。Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、入力データのアドレスポインタ（入力データが読み出される外部メモリにおけるアドレス）をＲ０にセットする（Ｓ１４）。Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、アドレスポインタの示す外部メモリから入力データをバッファＢＵＦ１へロードする（Ｓ１５）。
【０１５２】
Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、出力データを読み込むバッファＢＵＦ２の次元数とサイズを設定する（Ｓ１６）。Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、出力データのアドレスポインタ（出力データが書き込まれる外部メモリにおけるアドレス）をＲ１にセットする（Ｓ１７）。そして、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、Ｒ２に（出力データサイズ−１＝）１５をセットする（Ｓ１８）。Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、列の偶奇判断用レジスタＲ４に０（偶数列）をセットする（Ｓ１９）。
【０１５３】
続いて、図３７に示されるように、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、Ｒ３にフィルタ係数のサイズ（３×３＝９）−１＝８をセットする（Ｓ２１）。Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、Ｒ５を０にクリアする（Ｓ２２）。ＡＬＵ１４０は、バッファＢＵＦ０とバッファＢＵＦ１とを画素ごとに乗算して乗算結果をＲ５に加算し（Ｓ２３）、Ｒ３をデクリメントする（Ｓ２４）。
【０１５４】
Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、Ｒ３が０と等しくない場合には（Ｓ２５において「ＮＯ」）、Ｓ２３に戻る。一方、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、Ｒ３が０と等しい場合には（Ｓ２５において「ＹＥＳ」）、Ｒ５をバッファＢＵＦ２へ転送する（Ｓ２６）。Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、外部メモリからのデータ読み出し列が４度に１度変わるため、Ｒ２を４で除した余りを算出する。
【０１５５】
Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、Ｒ２を４で除した余りが０と等しくない場合には（Ｓ２７において「ＮＯ」）、Ｓ４１（図３８）に進む。一方、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、Ｒ２を４で除した余りが０と等しい場合には（Ｓ２７において「ＹＥＳ」）、Ｓ２８に進む。
【０１５６】
Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、Ｓ２８に進むと、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（２Ｄ＋）を使用して外部メモリから差分データを読み込む（Ｓ２８）。Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、Ｒ４が０である場合（すなわち、外部メモリからのデータ読み出し列が偶数列である場合）（Ｓ２９において「ＹＥＳ」）、Ｒ４に１（奇数列）をセットし（Ｓ３０）、Ｓ３２に進む。一方、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、Ｒ４が０でない場合（すなわち、外部メモリからのデータ読み出し列が奇数列である場合）（Ｓ２９において「ＮＯ」）、Ｒ４に０（偶数列）をセットし（Ｓ３１）、Ｓ３２に進む。Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、Ｓ３２に進むと、Ｒ２をデクリメントし（Ｓ３２）、Ｓ２１に戻る。
【０１５７】
一方、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、Ｓ４１（図３８）に進むと、Ｒ４が０である場合（すなわち、外部メモリからのデータ読み出し列が偶数列である場合）（Ｓ４１において「ＹＥＳ」）、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（１Ｄ＋）を使用して外部メモリから差分データを読み込み（Ｓ４２）、Ｓ４４に進む。一方、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、Ｒ４が０でない場合（すなわち、外部メモリからのデータ読み出し列が奇数列である場合）（Ｓ４１において「ＮＯ」）、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（１Ｄ−）を使用して外部メモリから差分データを読み込み（Ｓ４３）、Ｓ４４に進む。
【０１５８】
Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、Ｓ４４に進むと、Ｒ２をデクリメントする（Ｓ４４）。そして、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、Ｒ２が０と等しくない場合には（Ｓ４５において「ＮＯ」）、Ｓ２１（図３７）に戻る。一方、Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ１３０は、Ｒ２が０と等しい場合には（Ｓ４５において「ＹＥＳ」）、バッファＢＵＦ２からアドレスポインタＲ１の示す外部メモリへストアして（Ｓ４６）、動作を終了する。
【０１５９】
以上、情報処理装置１０の動作例について説明した。
【０１６０】
＜２．効果＞
以上説明したように、本開示の実施形態によれば、既に外部メモリから読み込まれてリングバッファにストアされているデータと同じデータを使用する場合には、外部メモリからの再度のデータの読み込みを省略する。すなわち、本開示の実施形態では、既に外部メモリから読み込まれてリングバッファにストアされているデータを再利用することにする。これによって、外部メモリへのデータフェッチ回数が低減されるため、既に読み込んだデータを外部メモリから再度読み込むための時間および消費電力を低減することが可能である。
【０１６１】
特に、演算に同じデータが繰り返し使用される場合がある。例えば、画像処理、ＤＮＮ（Ｄｅｅｐ  Ｌｅａｒｎｉｎｇ  Ｎｅｔｗｏｒｋ）などにおいては、同じデータが繰り返し使用される場合が多い。繰り返し同じデータが使用される場合であっても、演算のたびに外部メモリからリングバッファにデータを読み込む必要があるとすると、既に読み込んだデータを外部メモリから再度読み込むための時間および消費電力が無駄になる。本開示の実施形態に係る情報処理装置１０は、このように同じデータが繰り返し使用される場合に好適である。
【０１６２】
具体的に、上記した例と同様に２次元画像フィルタが使用される場合を想定する。すなわち、画像サイズが６×６であり、係数データおよび入力データそれぞれのサイズが３×３であり、出力データサイズが４×４であるという場合を想定する。かかる場合において、一般的なマイクロプロセッサが使用される場合および本開示の実施形態に係る情報処理装置１０が使用される場合それぞれについて外部メモリへのアクセス回数を計算する。
【０１６３】
まず、一般的なマイクロプロセッサが使用される場合、１つあたりの演算結果を得るために、係数のロードが９回必要であり、入力データのロードが９回必要である場合を想定すると、外部メモリからマイクロプロセッサ内の記憶領域へのロード回数は、９＋９＝１８である。そして、出力データサイズが１６である場合を想定すると、出力データ全体を得るために必要なロード回数は、１８×１６＝２８８である。
【０１６４】
一方、本開示の実施形態に係る情報処理装置１０が使用される場合を想定すると、１つ目の演算結果を得るために必要なロード回数は、外部メモリからリングバッファへのロード回数は、９＋９＝１８である。しかし、残りの１５個の演算結果は、差分のみロードすればよいため、１つあたりの演算結果を得るために必要なロード回数は、入力データのロードが３回である。したがって、出力データ全体を得るために必要なロード回数は、１８＋１５×３＝６３で済む。
【０１６５】
＜３．変形例＞
以上、添付図面を参照しながら本開示の好適な実施形態について詳細に説明したが、本開示の技術的範囲はかかる例に限定されない。本開示の技術分野における通常の知識を有する者であれば、特許請求の範囲に記載された技術的思想の範疇内において、各種の変更例または修正例に想到し得ることは明らかであり、これらについても、当然に本開示の技術的範囲に属するものと了解される。
【０１６６】
上記した例では、Ｍｕｌｔｉｄｉｍｅｎｓｉｏｎａｌ  Ｒｉｎｇ  Ｂｕｆｆｅｒ  ０〜１（１２０〜１２１）が２次元を有する場合を主に想定した。すなわち、上記した例では、入力データおよび係数データそれぞれが書き込まれるバッファが２次元を有する場合を主に想定した。しかし、入力データおよび係数データそれぞれが書き込まれるバッファは、複数次元を有すればよい。まず、入力データおよび係数データそれぞれが書き込まれるバッファが３次元を有する場合を想定する。図３９は、入力データが書き込まれるバッファが３次元を有する場合の例を示す図である。図３９に示されるように、入力データが書き込まれるバッファは、Ｎ１軸、Ｎ２軸およびＮ３軸を有している。
【０１６７】
入力データおよび係数データそれぞれが書き込まれるバッファが３次元を有する場合であっても、当該バッファが２次元を有する場合と同様に、Ｒｅａｄ  Ｐｏｉｎｔｅｒが１つ使用され、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒも２つ（Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）およびＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ２））が使用されればよい。そして、当該バッファが３次元を有する場合であっても、当該バッファが２次元を有する場合と同様に、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）の初期位置が原点Ｏであり、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ２）の初期位置が点Ａである。
【０１６８】
図３９に示されるように、点Ａは、各次元の要素の長さをＡｍ（ｍは次元数）とすると、点Ａ＝（Ａ１，Ａ２，Ａ３）とベクトルとして表現され得る。そして、入力データおよび係数データそれぞれが書き込まれるバッファが３次元を有する場合、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）およびＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ２）それぞれは、以下のようにして使用されればよい。
【０１６９】
なお、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ１）を「Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（＋）」と表現し、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＷＰ２）を「Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（−）」と表現する。また、Ｎｍ軸の正方向に移動する論理的なＷｒｉｔｅ  Ｐｏｉｎｔｅｒを「Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＮｍＤ＋）」と表現し、Ｎｍ軸の負方向に移動する論理的なＷｒｉｔｅ  Ｐｏｉｎｔｅｒを「Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（ＮｍＤ−）」と表現する。
【０１７０】
Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（＋）が使用される場合
・＋Ｎ１軸方向にＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（＋）が１つ移動する場合（すなわち、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ  Ｎ１Ｄ＋が使用される場合）、Ｎ２軸方向およびＮ３軸方向のベクトルによって作られる面のうち原点Ｏを含む面のデータを、外部メモリから読み込まれたデータで上書きする。
・＋Ｎ２軸方向にＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（＋）が１つ移動する場合（すなわち、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ  Ｎ２Ｄ＋が使用される場合）、Ｎ３軸方向およびＮ１軸方向のベクトルによって作られる面のうち原点Ｏを含む面のデータを、外部メモリから読み込まれたデータで上書きする。
・＋Ｎ３軸方向にＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（＋）が１つ移動する場合（すなわち、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ  Ｎ３Ｄ＋が使用される場合）、Ｎ１軸方向およびＮ２軸方向のベクトルによって作られる面のうち原点Ｏを含む面のデータを、外部メモリから読み込まれたデータで上書きする。
【０１７１】
Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（−）が使用される場合
・−Ｎ３軸方向にＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（−）が１つ移動する場合（すなわち、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ  Ｎ３Ｄ−が使用される場合）、Ｎ２軸方向およびＮ１軸方向のベクトルによって作られる面のうち点Ａを含む面のデータを、外部メモリから読み込まれたデータで上書きする。
・−Ｎ１軸方向にＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（−）が１つ移動する場合（すなわち、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ  Ｎ１Ｄ−が使用される場合）、Ｎ３軸方向およびＮ２軸方向のベクトルによって作られる面のうち点Ａを含む面のデータを、外部メモリから読み込まれたデータで上書きする。
・−Ｎ２軸方向にＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（−）が１つ移動する場合（すなわち、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ  Ｎ２Ｄ−が使用される場合）、Ｎ１軸方向およびＮ３軸方向のベクトルによって作られる面のうち点Ａを含む面のデータを、外部メモリから読み込まれたデータで上書きする。
【０１７２】
続いて、入力データおよび係数データそれぞれが書き込まれるバッファが複数次元（ｎ次元）を有する場合を想定する（ｎは２以上の整数）。入力データおよび係数データそれぞれが書き込まれるバッファがｎ次元を有する場合、当該バッファが２次元を有する場合と同様に、Ｒｅａｄ  Ｐｏｉｎｔｅｒが１つ使用され、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒも２つ（Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（＋）およびＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（−））が使用されればよい。そして、当該バッファがｎ次元を有する場合、当該バッファが２次元を有する場合と同様に、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（＋）の初期位置が原点Ｏであり、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（−）の初期位置が点Ａである。
【０１７３】
点Ａは、各次元の要素の長さをＡｍ（ｍは次元数）とすると、点Ａ＝（Ａ１，Ａ２，Ａ３，・・・・，Ａｎ）とベクトルとして表現され得る。そして、入力データおよび係数データそれぞれが書き込まれるバッファがｎ次元を有する場合、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（＋）およびＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（−）それぞれは、以下のようにして使用されればよい。
【０１７４】
Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（＋）が使用される場合
・＋Ｎｎ軸方向にＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（＋）が１つ移動する場合（すなわち、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ  ＮｎＤ＋が使用される場合）、Ｎ１軸方向、Ｎ２軸方向、Ｎ３軸方向、・・・、Ｎｎ−１軸方向のベクトルによって作られる面のうち原点Ｏを含む面のデータを、外部メモリから読み込まれたデータで上書きする。
・＋Ｎｎ−１軸方向にＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（＋）が１つ移動する場合（すなわち、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ  Ｎｎ−１Ｄ＋が使用される場合）、Ｎｎ軸方向、Ｎ１軸方向、Ｎ２軸方向、・・・、Ｎｎ−２軸方向のベクトルによって作られる面のうち原点Ｏを含む面のデータを、外部メモリから読み込まれたデータで上書きする。
・・・・・（中略）・・・・・
・＋Ｎ１軸方向にＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（＋）が１つ移動する場合（すなわち、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ  Ｎ１Ｄ＋が使用される場合）、Ｎ２軸方向、Ｎ３軸方向、Ｎ４軸方向、・・・、Ｎｎ軸方向のベクトルによって作られる面のうち原点Ｏを含む面のデータを、外部メモリから読み込まれたデータで上書きする。
【０１７５】
Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ（−）が使用される場合
・−Ｎｎ軸方向にＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（−）が１つ移動する場合（すなわち、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ  ＮｎＤ−が使用される場合）、Ｎｎ−１軸方向、Ｎｎ−２軸方向、Ｎｎ−３軸方向、・・・、Ｎ１軸方向のベクトルによって作られる面のうち点Ａを含む面のデータを、外部メモリから読み込まれたデータで上書きする。
・−Ｎｎ−１軸方向にＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（−）が１つ移動する場合（すなわち、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ  Ｎｎ−１Ｄ−が使用される場合）、Ｎｎ−２軸方向、Ｎｎ−３軸方向、Ｎｎ−４軸方向、・・・、Ｎ１軸方向、Ｎｎ軸方向のベクトルによって作られる面のうち点Ａを含む面のデータを、外部メモリから読み込まれたデータで上書きする。
・・・・・（中略）・・・・・
・−Ｎ１軸方向にＷｒｉｔｅ  Ｐｏｉｎｔｅｒ（−）が１つ移動する場合（すなわち、Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ  Ｎ１Ｄ−が使用される場合）、Ｎｎ軸方向、Ｎｎ−１軸方向、Ｎｎ−２軸方向、・・・・、Ｎ３軸方向、Ｎ２軸方向のベクトルによって作られる面のうち点Ａを含む面のデータを、外部メモリから読み込まれたデータで上書きする。
【０１７６】
また、本明細書に記載された効果は、あくまで説明的または例示的なものであって限定的ではない。つまり、本開示に係る技術は、上記の効果とともに、または上記の効果に代えて、本明細書の記載から当業者には明らかな他の効果を奏し得る。
【０１７７】
なお、以下のような構成も本開示の技術的範囲に属する。
（１）
複数次元を有する外部メモリの読み込み対象領域から読み込んだデータを、前記複数次元を有する記憶領域に書き込む記憶制御部と、
前記記憶領域のデータに基づく処理を実行する処理部と、を備え、
前記記憶制御部は、前記外部メモリにおいて前記読み込み対象領域を第１の次元方向に移動させ、移動後の前記読み込み対象領域のうち前記第１の次元方向の先端領域のデータで、前記記憶領域のうち前記第１の次元方向に対応する方向の後端領域の第１の上書きを行い、
前記処理部は、前記第１の上書き後の前記記憶領域のデータに基づく第１の処理を実行する、
情報処理装置。
（２）
前記記憶制御部は、前記外部メモリにおいて前記読み込み対象領域を前記第１の次元方向に所定の幅だけ移動させ、
前記第１の次元方向の先端領域は、前記第１の次元方向に前記所定の幅を有し、
前記第１の次元方向に対応する方向の後端領域は、前記第１の次元方向に対応する方向に前記所定の幅を有する、
前記（１）に記載の情報処理装置。
（３）
前記記憶制御部は、第１のポインタを前記第１の次元方向に対応する方向の後端領域に設定し、前記先端領域のデータで前記第１のポインタが示す位置に上書きすることによって、前記第１の上書きを行う、
前記（２）に記載の情報処理装置。
（４）
前記記憶制御部は、前記第１のポインタを前記第１の次元方向に対応する方向に移動させるポインタ移動と、前記外部メモリにおいて前記読み込み対象領域を前記第１の次元方向に移動させる領域移動とを行い、移動後の前記読み込み対象領域のうち前記第１の次元方向の先端領域のデータで、移動後の前記第１のポインタが示す位置に第２の上書きを行い、
前記処理部は、前記第２の上書き後の前記記憶領域のデータに基づく第２の処理を実行する、
前記（３）に記載の情報処理装置。
（５）
前記記憶制御部は、前記第１のポインタを前記第１の次元方向に対応する方向に前記所定の幅だけ移動させる、
前記（４）に記載の情報処理装置。
（６）
前記ポインタ移動と前記領域移動と前記第２の上書きと前記第２の処理との組み合わせが１または複数回実行される、
前記（４）または（５）に記載の情報処理装置。
（７）
前記記憶制御部は、前記ポインタ移動と前記領域移動と前記第２の上書きと前記第２の処理との組み合わせが１または複数回実行された後、さらに前記ポインタ移動を行うに際して、前記第１のポインタを移動させると前記第１のポインタが前記記憶領域の外側に出てしまう場合、前記第１のポインタを前記第１の次元方向に対応する方向の後端領域に戻す、
前記（６）に記載の情報処理装置。
（８）
前記記憶制御部は、前記ポインタ移動と前記領域移動と前記第２の上書きと前記第２の処理との組み合わせが１または複数回実行された後、さらに前記領域移動を行うに際して所定の条件が満たされた場合に、前記読み込み対象領域を前記第１の次元方向とは異なる第２の次元方向に移動させ、移動後の前記読み込み対象領域のうち前記第２の次元方向の先端領域のデータで、前記記憶領域のうち前記第２の次元方向に対応する方向の後端領域の第３の上書きを行い、
前記処理部は、前記第３の上書き後の前記記憶領域のデータに基づく第３の処理を実行する、
前記（６）または（７）に記載の情報処理装置。
（９）
前記所定の条件は、前記読み込み対象領域を前記第１の次元方向に移動させると前記読み込み対象領域が前記外部メモリの対象範囲の外側に出てしまうという条件である、
前記（８）に記載の情報処理装置。
（１０）
前記記憶制御部は、第２のポインタを前記第２の次元方向に対応する方向の後端領域に設定し、前記第２の次元方向の先端領域のデータで前記第２のポインタが示す位置に上書きすることによって、前記第３の上書きを行う、
前記（８）または（９）に記載の情報処理装置。
（１１）
前記記憶制御部は、前記第２のポインタを前記第２の次元方向に対応する方向に移動させるとともに、前記外部メモリにおいて前記読み込み対象領域を前記第２の次元方向に移動させ、移動後の前記読み込み対象領域のうち前記第２の次元方向の先端領域のデータで、移動後の前記第２のポインタが示す位置に第４の上書きを行い、
前記処理部は、前記第４の上書き後の前記記憶領域のデータに基づく第４の処理を実行する、
前記（１０）に記載の情報処理装置。
（１２）
前記第１の次元方向と前記第２の次元方向との正負の別が同じ場合には、前記第１のポインタおよび前記第２のポインタとして同一のポインタが使用される、
前記（１０）または（１１）に記載の情報処理装置。
（１３）
前記第１の次元方向と前記第２の次元方向との正負の別が異なる場合には、前記第１のポインタおよび前記第２のポインタとして異なるポインタが使用される、
前記（１０）または（１１）に記載の情報処理装置。
（１４）
前記記憶制御部は、前記記憶領域のデータに基づく処理の実行結果、および、前記第１の処理の実行結果を前記外部メモリの書き込み対象領域に書き込む、
前記（１）〜（１３）のいずれか一項に記載の情報処理装置。
（１５）
前記複数次元は、２次元であり、
前記読み込み対象領域のデータは、画像データである、
前記（１）〜（１４）のいずれか一項に記載の情報処理装置。
（１６）
前記記憶領域のデータに基づく処理は、前記画像データと係数データとを画素ごとに乗算し、画素ごとの乗算結果の和を算出する処理である、
前記（１５）に記載の情報処理装置。
（１７）
複数次元を有する外部メモリの読み込み対象領域から読み込んだデータを、前記複数次元を有する記憶領域に書き込むことと、
前記記憶領域のデータに基づく処理を実行することと、
前記外部メモリにおいて前記読み込み対象領域を第１の次元方向に移動させ、移動後の前記読み込み対象領域のうち前記第１の次元方向の先端領域のデータで、前記記憶領域のうち前記第１の次元方向に対応する方向の後端領域の第１の上書きを行うことと、
前記第１の上書き後の前記記憶領域のデータに基づく第１の処理を実行することと、
を含む、情報処理方法。
（１８）
コンピュータを、
複数次元を有する外部メモリの読み込み対象領域から読み込んだデータを、前記複数次元を有する記憶領域に書き込む記憶制御部と、
前記記憶領域のデータに基づく処理を実行する処理部と、を備え、
前記記憶制御部は、前記外部メモリにおいて前記読み込み対象領域を第１の次元方向に移動させ、移動後の前記読み込み対象領域のうち前記第１の次元方向の先端領域のデータで、前記記憶領域のうち前記第１の次元方向に対応する方向の後端領域の第１の上書きを行い、
前記処理部は、前記第１の上書き後の前記記憶領域のデータに基づく第１の処理を実行する、
情報処理装置として機能させるためのプログラム。
【符号の説明】
【０１７８】
１０    情報処理装置
１１０  Ｒｏａｄ／Ｓｔｏｒｅ  Ｕｎｉｔ
１３０  Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ（記憶制御部）
１４０  ＡＬＵ（処理部）
１５０  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｆｅｔｃｈ  Ｕｎｉｔ
１６０  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｄｅｃｏｄｅ  Ｕｎｉｔ
１７０  Ｐｒｏｇｒａｍ  Ｃｏｕｎｔｅｒ＆Ｐｉｐｅｌｉｎｅ  Ｃｏｎｔｒｏｌ
２０    外部メモリ
２１    対象範囲
２２    読み込み対象領域
２５    係数データ領域
２７    書き込み対象領域
【図１】
2020004247.tif 000003
【図２】
2020004247.tif 000004
【図３】
2020004247.tif 000005
【図４】
2020004247.tif 000006
【図５】
2020004247.tif 000007
【図６】
2020004247.tif 000008
【図７】
2020004247.tif 000009
【図８】
2020004247.tif 000010
【図９】
2020004247.tif 000011
【図１０】
2020004247.tif 000012
【図１１】
2020004247.tif 000013
【図１２】
2020004247.tif 000014
【図１３】
2020004247.tif 000015
【図１４】
2020004247.tif 000016
【図１５】
2020004247.tif 000017
【図１６】
2020004247.tif 000018
【図１７】
2020004247.tif 000019
【図１８】
2020004247.tif 000020
【図１９】
2020004247.tif 000021
【図２０】
2020004247.tif 000022
【図２１】
2020004247.tif 000023
【図２２】
2020004247.tif 000024
【図２３】
2020004247.tif 000025
【図２４】
2020004247.tif 000026
【図２５】
2020004247.tif 000027
【図２６】
2020004247.tif 000028
【図２７】
2020004247.tif 000029
【図２８】
2020004247.tif 000030
【図２９】
2020004247.tif 000031
【図３０】
2020004247.tif 000032
【図３１】
2020004247.tif 000033
【図３２】
2020004247.tif 000034
【図３３】
2020004247.tif 000035
【図３４】
2020004247.tif 000036
【図３５】
2020004247.tif 000037
【図３６】
2020004247.tif 000038
【図３７】
2020004247.tif 000039
【図３８】
2020004247.tif 000040
【図３９】
2020004247.tif 000041