(57)【要約】  プロセッサにおいて循環的にデータを供給して、重複するメモリアクセスを抑制する。  プロセッサは、循環バッファと、命令実行部とを備える。循環バッファは、複数のデータを保持して循環して読み出す機能を有する。命令実行部は、循環バッファをオペランドとして指定する命令を実行する。すなわち、このプロセッサは、循環バッファをオペランドとして指定する命令を命令セットとして有する。これにより、プロセッサによる命令の実行において循環バッファから循環的にデータを供給する。
2019039113.tif 000002
【特許請求の範囲】
【請求項１】
複数のデータを保持して循環して読み出す循環バッファと、
前記循環バッファをオペランドとして指定する命令を実行する命令実行部と
を具備するプロセッサ。
【請求項２】
前記命令実行部は、メモリから前記循環バッファにデータをロードし、または、前記循環バッファに保持されるデータを前記メモリにストアするロードストアユニットを備える請求項１記載のプロセッサ。
【請求項３】
前記ロードストアユニットは、前記循環バッファの一部にデータを追加ロードする請求項２記載のプロセッサ。
【請求項４】
前記命令実行部は、前記循環バッファをオペランドとして演算を行う演算ユニットを備える請求項１記載のプロセッサ。
【請求項５】
前記演算ユニットは、複数の前記循環バッファに保持されたデータ間の演算を行う請求項４記載のプロセッサ。
【請求項６】
前記演算ユニットは、複数の前記循環バッファに保持されたデータ間の積和演算を行う請求項５記載のプロセッサ。
【請求項７】
前記演算ユニットは、一つの前記循環バッファに保持されたフィルタ係数と他の前記循環バッファに保持された対象データとの間のフィルタ演算を実行してその演算結果をさらに他の前記循環バッファに保持させる請求項５記載のプロセッサ。
【請求項８】
前記演算ユニットは、前記循環バッファに保持されたデータと汎用レジスタに保持されたデータとの演算を行う請求項４記載のプロセッサ。
【請求項９】
前記命令実行部は、前記循環バッファと汎用レジスタとの間でデータ転送を行うデータ転送ユニットを備える請求項１記載のプロセッサ。
【請求項１０】
前記循環バッファは、
複数段のレジスタからなるシフトレジスタと、
前記シフトレジスタから出力されたデータを前記シフトレジスタに循環させ、または、新たなデータを前記シフトレジスタに入力する循環セレクタを備える
請求項１記載のプロセッサ。
【請求項１１】
前記シフトレジスタは、前記複数段のレジスタに保持されるデータを次段に進めるか否か、および、前記循環セレクタから入力されたデータを前記複数段のレジスタのうちの任意段の前記レジスタに保持させるかを制御するシフトセレクタを備える
請求項１０記載のプロセッサ。
【請求項１２】
メモリと、
前記メモリからロードした複数のデータを保持して循環して読み出す循環バッファと、
前記循環バッファをオペランドとして指定する命令を実行する命令実行部と
を具備する情報処理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本技術は、メモリからロードしたデータに対して所定の演算を行うプロセッサに関する。
【背景技術】
【０００２】
近年のＲＩＳＣ（Reduced Instruction Set Computer）に代表されるロードストアアーキテクチャでは、メモリにアクセスする命令をロード命令およびストア命令に限定することにより、命令セットアーキテクチャを単純化している。すなわち、ロード命令およびストア命令以外の命令では、オペランドとして指定できるのはレジスタだけであり、メモリアドレスやそのオフセットを指定することはできない。これにより、例えばメモリからレジスタにデータを読み出すロード命令と演算を実行する演算命令とを分離することにより、レジスタを参照する命令におけるデータ待ち時間をなくし、コンパイラによる高速化のための命令スケジューリングを容易に行うことができるようになっている。例えば、ロードストアアーキテクチャをベースとして演算処理を行うプロセッサが提案されている（例えば、特許文献１参照。）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００６−１５４９７９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
上述の従来技術では、ロードされたデータに対して演算を行った後でメモリにストアするという処理を繰り返すことによって、一連の処理が進んでいく。しかしながら、フィルタ演算のようにフィルタ係数やデータが繰り返し参照される場合には、一度参照したフィルタ係数やデータを再びメモリからロードする必要が生じる。そのため、データをロード／ストアするメモリアクセス数とそのロード／ストアするメモリのアドレス計算などのために命令数が増加し、その結果、処理時間と消費電力が増加してしまうという問題があった。【０００５】
本技術はこのような状況に鑑みて生み出されたものであり、プロセッサにおいて循環的にデータを供給して、重複するメモリアクセスを抑制することを目的とする。
【課題を解決するための手段】
【０００６】
本技術は、上述の問題点を解消するためになされたものであり、その第１の側面は、複数のデータを保持して循環して読み出す循環バッファと、上記循環バッファをオペランドとして指定する命令を実行する命令実行部とを具備するプロセッサおよびそのプロセッサを含む情報処理システムである。これにより、プロセッサによる命令の実行において循環バッファから循環的にデータを供給するという作用をもたらす。【０００７】
また、この第１の側面において、上記命令実行部は、メモリから上記循環バッファにデータをロードし、または、上記循環バッファに保持されるデータを上記メモリにストアするロードストアユニットを備えてもよい。これにより、循環バッファとメモリとの間でデータを転送させるという作用をもたらす。【０００８】
また、この第１の側面において、上記ロードストアユニットは、上記循環バッファの一部にデータを追加ロードするようにしてもよい。これにより、データを追加しながら循環バッファから循環的にデータを供給するという作用をもたらす。【０００９】
また、この第１の側面において、上記命令実行部は、上記循環バッファをオペランドとして演算を行う演算ユニットを備えてもよい。これにより、循環バッファから演算ユニットに循環的にデータを供給するという作用をもたらす。この場合において、上記演算ユニットは、複数の上記循環バッファに保持されたデータ間の演算を行うようにしてもよく、また、上記循環バッファに保持されたデータと汎用レジスタに保持されたデータとの演算を行うようにしてもよい。例えば、上記演算ユニットは、複数の上記循環バッファに保持されたデータ間の積和演算を行うようにしてもよい。また、上記演算ユニットは、一つの上記循環バッファに保持されたフィルタ係数と他の上記循環バッファに保持された対象データとの間のフィルタ演算を実行してその演算結果をさらに他の上記循環バッファに保持させるようにしてもよい。【００１０】
また、この第１の側面において、上記命令実行部は、上記循環バッファと汎用レジスタとの間でデータ転送を行うデータ転送ユニットを備えてもよい。これにより、循環バッファと汎用レジスタとの間でデータを転送させるという作用をもたらす。【００１１】
また、この第１の側面において、上記循環バッファは、複数段のレジスタからなるシフトレジスタと、上記シフトレジスタから出力されたデータを上記シフトレジスタに循環させ、または、新たなデータを上記シフトレジスタに入力する循環セレクタを備えてもよい。この場合において、上記シフトレジスタは、上記複数段のレジスタに保持されるデータを次段に進めるか否か、および、上記循環セレクタから入力されたデータを上記複数段のレジスタのうちの任意段の上記レジスタに保持させるかを制御するシフトセレクタを備えてもよい。
【発明の効果】
【００１２】
本技術によれば、プロセッサにおいて循環的にデータを供給して、重複するメモリアクセスを抑制することができるという優れた効果を奏し得る。なお、ここに記載された効果は必ずしも限定されるものではなく、本開示中に記載されたいずれかの効果であってもよい。
【図面の簡単な説明】
【００１３】
【図１】本技術の実施の形態における情報処理システムの構成例を示す図である。
【図２】本技術の実施の形態におけるプロセッサ１００の構成例を示す図である。
【図３】本技術の実施の形態におけるリングバッファ１５０の構成例を示す図である。
【図４】本技術の実施の形態におけるリングバッファ１５０に保持されるデータをソフトウェアから見た例を示す図である。
【図５】本技術の実施の形態におけるプロセッサ１００の命令セットの一例を示す図である。
【図６】本技術の実施の形態における情報処理システムの２次元画像フィルタ演算への適用例を示す図である。
【図７】本技術の実施の形態の２次元画像フィルタ演算への適用例におけるデータ参照関係を示す図である。
【図８】本技術の実施の形態の２次元画像フィルタ演算への適用例におけるプログラム例を示す図である。
【図９】本技術の実施の形態の２次元画像フィルタ演算への適用例における処理手順例を示す流れ図の前半である。
【図１０】本技術の実施の形態の２次元画像フィルタ演算への適用例における処理手順例を示す流れ図の後半である。
【発明を実施するための形態】
【００１４】
以下、本技術を実施するための形態（以下、実施の形態と称する）について説明する。説明は以下の順序により行う。
１．実施の形態（プロセッサ構成の例）
２．適用例（フィルタ演算の適用例）
【００１５】
＜１．実施の形態＞
［情報処理システムの構成］
図１は、本技術の実施の形態における情報処理システムの構成例を示す図である。この情報処理システムは、プロセッサ１００およびメモリ２００を備える。プロセッサ１００は、所定の命令セットによる命令列からなるプログラムを実行するプロセッサである。メモリ２００は、プロセッサ１００によって実行されるプログラムや、そのプログラムの実行に必要なデータを記憶するメモリである。
【００１６】
プロセッサ１００は、メモリ２００に記憶されるプログラムの各命令を、メモリ２００からフェッチして、デコードする。そして、プロセッサ１００は、そのデコード結果に従って各命令を実行する。また、プロセッサ１００は、命令の実行に必要なデータをメモリ２００からロードして、その後、処理されたデータをメモリ２００にストアする。
【００１７】
図２は、本技術の実施の形態におけるプロセッサ１００の構成例を示す図である。このプロセッサ１００は、制御系ユニットとして、命令フェッチユニット１１１と、命令デコードユニット１１２と、プログラムカウンタ１１３と、パイプライン制御部１９０とを備える。また、このプロセッサ１００は、レジスタファイル１２０と、演算ユニット１３０と、ロードストアユニット１４０と、リングバッファ１５０と、データ転送ユニット１６０とを備える。
【００１８】
命令フェッチユニット１１１は、メモリ２００から命令をフェッチするものである。命令デコードユニット１１２は、フェッチした命令をデコードするものである。プログラムカウンタ１１３は、プログラム中の実行対象となる命令のアドレスを指し示すものである。パイプライン制御部１９０は、プロセッサ１００の命令パイプラインを制御するものである。
【００１９】
レジスタファイル１２０は、命令のオペランドとして参照される汎用レジスタである。例えば、３２ビットまたは６４ビットのデータを数ワードから数十ワード程度（場合によっては百数十ワード）が汎用レジスタとして設定される。
【００２０】
演算ユニット１３０は、演算命令において指定された演算を行う実行部である。演算の種類としては、例えば、加算、減算、乗算、除算の四則演算が該当するが、これらを組み合わせた積和演算なども想定される。演算命令のオペランドとして、レジスタファイル１２０に加えて、リングバッファ１５０を指定することができる。
【００２１】
ロードストアユニット１４０は、メモリ２００からデータをロードし、または、データをメモリ２００にストアするメモリアクセス部である。ロードしたデータの格納先、および、ストアするデータの供給元として、レジスタファイル１２０に加えて、リングバッファ１５０を指定することができる。
【００２２】
リングバッファ１５０は、データを循環的に参照できるバッファである。このリングバッファ１５０は、シフトレジスタ１５１および循環セレクタ１５２を備える。シフトレジスタ１５１は、複数段のレジスタに保持されるデータをクロックに同期して順次シフトする機能を有するレジスタである。循環セレクタ１５２は、シフトレジスタ１５１から出力されたデータをシフトレジスタ１５１に循環させ、または、新たなデータをシフトレジスタ１５１に入力するよう選択するセレクタである。これにより、リングバッファ１５０は、命令に従ってデータを循環的に保持してそのデータを参照することができる。リングバッファ１５０は、複数備えるようにしてもよい。この例では、リングバッファ１５０として、ロード用に２つのリングバッファ（＃０および＃１）とストア用に１つのリングバッファ（＃２）が設けられている。
【００２３】
データ転送ユニット１６０は、レジスタ間のデータの転送を行う転送部であり、特に、レジスタファイル１２０とリングバッファ１５０との間のデータ転送を行う。これにより、リングバッファ１５０に保持されるデータを汎用レジスタに展開し、または、汎用レジスタのデータをリングバッファ１５０に蓄積していくことが可能となる。
【００２４】
なお、ロードストアユニット１４０は、特許請求の範囲に記載の循環バッファの一例である。また、演算ユニット１３０、ロードストアユニット１４０、または、データ転送ユニット１６０は、特許請求の範囲に記載の命令実行部の一例である。
【００２５】
［リングバッファ］
図３は、本技術の実施の形態におけるリングバッファ１５０の構成例を示す図である。このリングバッファ１５０は、上述のようにシフトレジスタ１５１および循環セレクタ１５２を備える。そして、シフトレジスタ１５１は、複数段のレジスタ１５３からなり、レジスタ１５３の入力にはそれぞれシフトセレクタ１５４が設けられる。
【００２６】
シフトレジスタ１５１において、各レジスタ１５３の出力は、次段のシフトセレクタ１５４に入力されるとともに、自身の入力部のシフトセレクタ１５４にも入力される。これにより、レジスタ１５３に保持されるデータを次段にシフトさせるか、自段に維持させるかを選択することができる。
【００２７】
また、シフトレジスタ１５１の最終段のレジスタ１５３の出力は、循環セレクタ１５２に入力される。循環セレクタ１５２は、最終段のレジスタ１５３の出力、および、新たなデータの何れか一方を選択して、シフトセレクタ１５４に出力する。シフトセレクタ１５４の各々は、循環セレクタ１５２からの出力を選択することができるようになっている。これにより、任意の長さで循環するリングバッファを形成することができる。また、新たなデータを任意のレジスタ１５３に設定することもできる。これらは、後述のように、命令において指定することが可能である。
【００２８】
図４は、本技術の実施の形態におけるリングバッファ１５０に保持されるデータをソフトウェアから見た例を示す図である。この例では、循環長が８のリングバッファを想定している。
【００２９】
先頭読出し位置１５８にはデータ＃０が保持されている。これは、物理的には最終段のレジスタ１５３にデータ＃０が保持されていることを意味する。その後、先頭読出し位置１５８は時計回りに移動する。これにより、データ＃１が先頭読出し位置１５８になる。これは、物理的には最終段のレジスタ１５３にデータ＃１が保持されていることを意味する。このとき、データ＃０は循環セレクタ１５２を介して末尾である８段目のレジスタ１５３に保持される。その後、先頭読出し位置１５８は時計回りに移動していく。
【００３０】
データ＃７が先頭読出し位置１５８となった後、先頭読出し位置１５８は再びデータ＃０となる。このように制御することにより、８つのデータを循環的に参照することができる。
【００３１】
また、このリングバッファ１５０には新たなデータを追加することができるため、新たなデータに更新しながら所定回数繰り返し参照することが可能となる。これは、後述のようなフィルタ演算などに特に有用である。
【００３２】
［命令セット］
図５は、本技術の実施の形態におけるプロセッサ１００の命令セットの一例を示す図である。ここでは、特にリングバッファ１５０に関連する命令を示している。
【００３３】
ＬＤ（Load）命令は、メモリ２００からデータをロードするための命令である。「ＬＤ  ＢＵＦｎ  ｓｉｚｅ  ［ａｄｄｒｅｓｓ］」の形式は、メモリ２００のａｄｄｒｅｓｓからｓｉｚｅワード分のデータを第ｎ番目のリングバッファ１５０にロードすることを意味する。また、「ＬＤ  ＢＵＦｎ  ＋ｓｉｚｅ」の形式は、メモリ２００からｓｉｚｅワード分のデータを第ｎ番目のリングバッファ１５０に追加してロードすることを意味する。なお、このＬＤ命令は、この命令の完了を待たずに後続命令を実行できるノンブロッキング命令である。
【００３４】
ＳＴ（Store）命令は、メモリ２００にデータをストアするための命令である。「ＳＴ  ＢＵＦｎ  ｓｉｚｅ  ［ａｄｄｒｅｓｓ］」の形式は、第ｎ番目のリングバッファ１５０からｓｉｚｅワード分のデータをメモリ２００のａｄｄｒｅｓｓにストアすることを意味する。なお、このＳＴ命令は、この命令の完了を待たずに後続命令を実行できるノンブロッキング命令である。
【００３５】
ＭＯＶ（Move）命令は、レジスタ間のデータ転送を行う命令である。「ＭＯＶ  ＢＵＦｎ  Ｒｎ」の形式は、第ｎ番目の汎用レジスタから第ｎ番目のリングバッファ１５０にデータを転送することを意味する。「ＭＯＶ  Ｒｎ  ＢＵＦｎ」の形式は、第ｎ番目のリングバッファ１５０から第ｎ番目の汎用レジスタにデータを転送することを意味する。
【００３６】
ＭＡＣ（Multiply Accumulate）命令は、積和演算を行う命令である。「ＭＡＣ  Ｒｎ  ＢＵＦｉ  ＢＵＦｊ」の形式は、第ｉ番目と第ｊ番目のリングバッファ１５０の乗算結果を累積加算した結果を第ｎ番目の汎用レジスタに格納することを意味する。なお、このＭＡＣは演算命令の一例であり、リングバッファ１５０同士の加算など様々な演算命令を設けることができる。
【００３７】
＜２．適用例＞
［２次元画像フィルタ演算への適用例］
図６は、本技術の実施の形態における情報処理システムの２次元画像フィルタ演算への適用例を示す図である。ここでは、次式に示す２次元画像フィルタ演算を実行するプログラムを想定する。
【数１】
2019039113.tif 000003
【数２】
2019039113.tif 000004
【００３８】
この例では、入力ｐ（ｘ，ｙ）を入力データｉｎ＿ｄａｔａとし、出力ｆ（ｘ，ｙ）を出力データｏｕｔ＿ｄａｔａとしている。フィルタ係数ｃｏｅｆは３×３の２次元フィルタであり、これを単位として入力データｉｎ＿ｄａｔａとの積和演算を行う。入力データｉｎ＿ｄａｔａはリングバッファ＃１に格納され、フィルタ係数ｃｏｅｆはリングバッファ＃０に格納される。また、出力データｏｕｔ＿ｄａｔａはリングバッファ＃２に格納される。
【００３９】
最初の３×３の積和演算の演算結果「−５」が得られた後、入力データｉｎ＿ｄａｔａにおいて下方に１行シフトして次の３×３の演算結果「５」が得られる。下方にさらに２回シフトして、その間演算結果「−３」および「−３」が得られる。その後、再び最上行に戻り右方に１列シフトして次の３×３の演算結果「２」が得られる。同様の動作を繰り返して最後の演算結果「９」が得られる。
【００４０】
図７は、本技術の実施の形態の２次元画像フィルタ演算への適用例におけるデータ参照関係を示す図である。
【００４１】
フィルタ係数ｃｏｅｆは３×３の９要素であり、繰り返しの度に同じものが参照される。そのため、フィルタ係数ｃｏｅｆは、リングバッファ＃０においてバッファサイズ「９」により循環参照される。
【００４２】
また、入力データｉｎ＿ｄａｔａは、繰り返しの度に一部ずつが異なるデータに差し替えられる。そのため、入力データｉｎ＿ｄａｔａは、リングバッファ＃１において追加ロードを繰り返しながら循環参照される。すなわち、９つのデータのうち第４番目から第９番目のデータが循環参照され、先頭の３つのデータは追加ロードにより新たなデータに差し替えられる。それ以降は、同じ要領で循環参照が行われる。
【００４３】
図８は、本技術の実施の形態の２次元画像フィルタ演算への適用例におけるプログラム例を示す図である。
【００４４】
第１行目のＬＤ命令は、メモリ２００から９つのフィルタ係数ｃｏｅｆをリングバッファ＃０にロードする命令である。ラベルＢＥＧＩＮはこのプログラムの先頭を示している。「＃９」はバッファサイズの即値「９」を意味する。
【００４５】
第２行目のＭＯＶ命令は、入力データｉｎ＿ｄａｔａのロードポインタを汎用レジスタＲ０にセットする命令である。この値は入力データｉｎ＿ｄａｔａのロード命令（第３行目および第１９行目）において参照される。
【００４６】
第３行目のＬＤ命令は、メモリ２００から入力データｉｎ＿ｄａｔａをバッファサイズ「９」のリングバッファ＃１にロードする命令である。「＃９」はバッファサイズの即値「９」を意味する。
【００４７】
第４行目のＭＯＶ命令は、出力データｏｕｔ＿ｄａｔａのストアポインタを汎用レジスタＲ１にセットする命令である。この値は出力データｏｕｔ＿ｄａｔａのストア命令（第５行目）において参照される。
【００４８】
第５行目のＳＴ命令は、この後で演算結果が出力データｏｕｔ＿ｄａｔａとして格納されるリングバッファ＃２をメモリ２００にストアする命令である。ここではバッファサイズの指定が省略されているため、バッファサイズは無限長であり、リングバッファ＃２はＦＩＦＯ（First-In First-Out：先入れ先出し）動作を行う。なお、このＳＴ命令は、メモリ２００の初期アドレスを予め設定するものであり、演算結果が格納された後にメモリ２００にストアされるタイミングについては情報処理システムの実装に依存する。アドレスポインタの管理はリングバッファ＃２において自動的に実行されるため、このＳＴ命令により初期設定をしておくことにより、アドレスポインタの管理は不要となる。
【００４９】
第６行目のＭＯＶ命令は、出力データｏｕｔ＿ｄａｔａのデータ数「１６」をループカウンタとして汎用レジスタＲ２にセットする命令である。
【００５０】
第７行目のＭＯＶ命令は、フィルタ係数ｃｏｅｆのサイズ「９」をループカウンタとして汎用レジスタＲ３にセットする命令である。ラベルＬＯＯＰ＿１６は、第１７行目の分岐命令によって形成されるループの飛び先を示している。
【００５１】
第８行目のＭＯＶ命令は、演算結果を格納する汎用レジスタＲ４をゼロにクリアする命令である。
【００５２】
第９行目のＭＡＣ命令は、フィルタ演算を行う積和演算命令であり、リングバッファ＃０とリングバッファ＃１との乗算結果を累積加算した結果を汎用レジスタＲ４に格納するものである。ラベルＬＯＯＰ＿９は、第１１行目の分岐命令によって形成されるループの飛び先を示している。
【００５３】
第１０行目のＤＥＣ命令は、ループカウンタである汎用レジスタＲ３から「１」を減算するデクリメント命令である。
【００５４】
第１１行目のＢＮＺ命令は、汎用レジスタＲ３の値がゼロでなければラベルＬＯＯＰ＿９に分岐する分岐命令である。したがって、第９行目および第１０行目の命令は、それぞれ９回繰り返されることになる。
【００５５】
第１２行目のＭＯＶ命令は、フィルタ演算結果を格納する汎用レジスタＲ４をリングバッファ＃２に転送する命令である。
【００５６】
第１３行目のＭＯＤ命令は、出力データ数のループカウンタである汎用レジスタＲ２を「４」で割った剰余を、汎用レジスタＲ５にセットする剰余算命令である。
【００５７】
第１４行目のＢＮＺ命令は、第１３行目のＭＯＤ命令における剰余算の結果がゼロでなければラベルＪＵＭＰ＿０の第１８行目に分岐する分岐命令である。入力データｉｎ＿ｄａｔａに対する３×３の演算は１行ずつシフトしながら４回実行され、その後先頭行に戻って１列シフトした３×３の演算が再び実行される。この４回ずつの演算を行うためにこのＢＮＺ命令による分岐が行われる。
【００５８】
第１５行目のＬＤ命令は、メモリ２００から新たな入力データｉｎ＿ｄａｔａをリングバッファ＃１に追加ロードする命令である。上述のように９つのデータのうち、６つのデータが引き続き循環して参照されるが、新たに３つのデータの追加が必要になる。このＬＤ命令により新たな３つのデータが追加ロードされる。
【００５９】
第１６行目のＤＥＣ命令は、出力データ数のループカウンタである汎用レジスタＲ２から「１」を減算するデクリメント命令である。
【００６０】
第１７行目のＢＮＺ命令は、出力データ数のループカウンタである汎用レジスタＲ２の値がゼロでなければラベルＬＯＯＰ＿１６に分岐する分岐命令である。したがって、第７行目から第１４行目の命令は、それぞれ１６回繰り返されることになる。
【００６１】
第１８行目のＳＵＢ命令は、入力データｉｎ＿ｄａｔａのロードポインタである汎用レジスタＲ０から「３５」を減算する命令である。これにより、入力データｉｎ＿ｄａｔａの末尾から先頭にロードポインタがリセットされる。ラベルＪＵＭＰ＿０は、第１４行目の分岐命令の飛び先である。
【００６２】
第１９行目のＬＤ命令は、メモリ２００から入力データｉｎ＿ｄａｔａをバッファサイズ「９」のリングバッファ＃１にロードする命令である。
【００６３】
第２０行目のＤＥＣ命令は、出力データ数のループカウンタである汎用レジスタＲ２から「１」を減算するデクリメント命令である。
【００６４】
第２１行目のＢＮＺ命令は、出力データ数のループカウンタである汎用レジスタＲ２がゼロでなければラベルＬＯＯＰ＿１６に分岐する分岐命令である。
【００６５】
第２２行目はＨＡＬＴ命令であり、ラベルＢＥＧＩＮからＥＮＤまでのプログラムの実行は終了する。
【００６６】
図９および図１０は、本技術の実施の形態の２次元画像フィルタ演算への適用例における処理手順例を示す流れ図である。
【００６７】
まず、第１行目のＬＤ命令により、メモリ２００から９つのフィルタ係数ｃｏｅｆをリングバッファ＃０にロードする（ステップＳ９１１）。そして、第２行目のＭＯＶ命令により、入力データｉｎ＿ｄａｔａのロードポインタを汎用レジスタＲ０にセットする（ステップＳ９１２）。
【００６８】
また、第３行目のＬＤ命令により、メモリ２００から入力データｉｎ＿ｄａｔａをバッファサイズ「９」のリングバッファ＃１にロードする（ステップＳ９１３）。そして、第４行目のＭＯＶ命令により、出力データｏｕｔ＿ｄａｔａのストアポインタを汎用レジスタＲ１にセットする（ステップＳ９１４）。
【００６９】
また、第５行目のＳＴ命令により、この後で演算結果が出力データｏｕｔ＿ｄａｔａとして格納されるリングバッファ＃２をメモリ２００にストアする（ステップＳ９１５）。そして、第６行目のＭＯＶ命令により、出力データｏｕｔ＿ｄａｔａのデータ数「１６」をループカウンタとして汎用レジスタＲ２にセットする（ステップＳ９１６）。
【００７０】
その後、出力データ数「１６」のループに入り、第７行目のＭＯＶ命令により、フィルタ係数ｃｏｅｆのサイズ「９」をループカウンタとして汎用レジスタＲ３にセットする（ステップＳ９２１）。第８行目のＭＯＶ命令により、演算結果を格納する汎用レジスタＲ４をゼロにクリアする（ステップＳ９２２）。
【００７１】
第９行目のＭＡＣ命令により、リングバッファ＃０とリングバッファ＃１との乗算結果を累積加算した結果を汎用レジスタＲ４に格納する（ステップＳ９２３）。そして、第１０行目のＤＥＣ命令により、ループカウンタである汎用レジスタＲ３から「１」を減算する（ステップＳ９２４）。この汎用レジスタＲ３の値が、第１１行目のＢＮＺ命令においてゼロでなければ（ステップＳ９２５：Ｎｏ）、ステップＳ９２３以降の処理が繰り返される。汎用レジスタＲ３の値がゼロになると（ステップＳ９２５：Ｙｅｓ）、次のステップＳ９２６に進む。
【００７２】
第１２行目のＭＯＶ命令により、フィルタ演算結果を格納する汎用レジスタＲ４をリングバッファ＃２に転送する（ステップＳ９２６）。そして、第１３行目のＭＯＤ命令により、出力データ数のループカウンタである汎用レジスタＲ２を「４」で割った剰余を求める。その結果、剰余算の結果がゼロであれば（ステップＳ９２７：Ｙｅｓ）、第１５行目のＬＤ命令により、メモリ２００から新たな入力データｉｎ＿ｄａｔａをリングバッファ＃１に追加ロードする（ステップＳ９２８）。また、第１６行目のＤＥＣ命令は、出力データ数のループカウンタである汎用レジスタＲ２から「１」を減算する（ステップＳ９２９）。その後、ステップＳ９２１以降の処理を繰り返す。
【００７３】
一方、第１３行目の剰余算の結果がゼロでなければ（ステップＳ９２７：Ｎｏ）、第１８行目のＳＵＢ命令により、入力データｉｎ＿ｄａｔａのロードポインタである汎用レジスタＲ０から「３５」を減算する（ステップＳ９３１）。そして、第１９行目のＬＤ命令により、メモリ２００から入力データｉｎ＿ｄａｔａをバッファサイズ「９」のリングバッファ＃１にロードする。また、第２０行目のＤＥＣ命令により、出力データ数のループカウンタである汎用レジスタＲ２から「１」を減算する（ステップＳ９３２）。その結果、第２１行目のＢＮＺ命令により、出力データ数のループカウンタである汎用レジスタＲ２がゼロでなければ（ステップＳ９３３：Ｎｏ）、ステップＳ９２１以降の処理を繰り返す。出力データ数のループカウンタである汎用レジスタＲ２がゼロになると（ステップＳ９３３：Ｙｅｓ）、処理を終了する。
【００７４】
このように、本技術の実施の形態によれば、プロセッサ１００においてリングバッファ１５０をオペランドとして指定する命令セットを設けることにより、循環的にデータを供給することができ、重複するメモリアクセスを抑制することができる。例えば、多次元フィルタ演算などの処理を実行する際に、命令数およびメモリアクセス数を削減することができる。また、これにより、処理時間および消費電力を削減することができる。
【００７５】
なお、上述の実施の形態は本技術を具現化するための一例を示したものであり、実施の形態における事項と、特許請求の範囲における発明特定事項とはそれぞれ対応関係を有する。同様に、特許請求の範囲における発明特定事項と、これと同一名称を付した本技術の実施の形態における事項とはそれぞれ対応関係を有する。ただし、本技術は実施の形態に限定されるものではなく、その要旨を逸脱しない範囲において実施の形態に種々の変形を施すことにより具現化することができる。
【００７６】
また、上述の実施の形態において説明した処理手順は、これら一連の手順を有する方法として捉えてもよく、また、これら一連の手順をコンピュータに実行させるためのプログラム乃至そのプログラムを記憶する記録媒体として捉えてもよい。この記録媒体として、例えば、ＣＤ（Compact Disc）、ＭＤ（MiniDisc）、ＤＶＤ（Digital Versatile Disc）、メモリカード、ブルーレイディスク（Blu-ray（登録商標）Disc）等を用いることができる。
【００７７】
なお、本明細書に記載された効果はあくまで例示であって、限定されるものではなく、また、他の効果があってもよい。
【００７８】
なお、本技術は以下のような構成もとることができる。
（１）複数のデータを保持して循環して読み出す循環バッファと、
前記循環バッファをオペランドとして指定する命令を実行する命令実行部と
を具備するプロセッサ。
（２）前記命令実行部は、メモリから前記循環バッファにデータをロードし、または、前記循環バッファに保持されるデータを前記メモリにストアするロードストアユニットを備える前記（１）に記載のプロセッサ。
（３）前記ロードストアユニットは、前記循環バッファの一部にデータを追加ロードする前記（２）に記載のプロセッサ。
（４）前記命令実行部は、前記循環バッファをオペランドとして演算を行う演算ユニットを備える前記（１）から（３）のいずれかに記載のプロセッサ。
（５）前記演算ユニットは、複数の前記循環バッファに保持されたデータ間の演算を行う前記（４）に記載のプロセッサ。
（６）前記演算ユニットは、複数の前記循環バッファに保持されたデータ間の積和演算を行う前記（５）に記載のプロセッサ。
（７）前記演算ユニットは、一つの前記循環バッファに保持されたフィルタ係数と他の前記循環バッファに保持された対象データとの間のフィルタ演算を実行してその演算結果をさらに他の前記循環バッファに保持させる前記（５）に記載のプロセッサ。
（８）前記演算ユニットは、前記循環バッファに保持されたデータと汎用レジスタに保持されたデータとの演算を行う前記（４）から（７）のいずれかに記載のプロセッサ。
（９）前記命令実行部は、前記循環バッファと汎用レジスタとの間でデータ転送を行うデータ転送ユニットを備える前記（１）から（８）のいずれかに記載のプロセッサ。
（１０）前記循環バッファは、
複数段のレジスタからなるシフトレジスタと、
前記シフトレジスタから出力されたデータを前記シフトレジスタに循環させ、または、新たなデータを前記シフトレジスタに入力する循環セレクタを備える
前記（１）から（９）のいずれかに記載のプロセッサ。
（１１）前記シフトレジスタは、前記複数段のレジスタに保持されるデータを次段に進めるか否か、および、前記循環セレクタから入力されたデータを前記複数段のレジスタのうちの任意段の前記レジスタに保持させるかを制御するシフトセレクタを備える
前記（１０）に記載のプロセッサ。
（１２）メモリと、
前記メモリからロードした複数のデータを保持して循環して読み出す循環バッファと、
前記循環バッファをオペランドとして指定する命令を実行する命令実行部と
を具備する情報処理システム。
【符号の説明】
【００７９】
１００  プロセッサ
１１１  命令フェッチユニット
１１２  命令デコードユニット
１１３  プログラムカウンタ
１２０  レジスタファイル
１３０  演算ユニット
１４０  ロードストアユニット
１５０  リングバッファ
１５１  シフトレジスタ
１５２  循環セレクタ
１５３  レジスタ
１５４  シフトセレクタ
１６０  データ転送ユニット
１９０  パイプライン制御部
２００  メモリ
【図１】
2019039113.tif 000005
【図２】
2019039113.tif 000006
【図３】
2019039113.tif 000007
【図４】
2019039113.tif 000008
【図５】
2019039113.tif 000009
【図６】
2019039113.tif 000010
【図７】
2019039113.tif 000011
【図８】
2019039113.tif 000012
【図９】
2019039113.tif 000013
【図１０】
2019039113.tif 000014
【国際調査報告】
2019039113.tif 000015
2019039113.tif 000016
2019039113.tif 000017
2019039113.tif 000018