(57)【要約】【課題】ＨＯＧ特徴量をより速く生成可能なプロセッサを提供する。【解決手段】プロセッサ１は、第１レジスタＶＲａに第１データ要素ＶＤ１１〜ＤＶ１４が格納され、第２レジスタＶＲｂに第２データ要素ＶＤ２１〜ＤＶ２４が格納され、第３レジスタＶＲｃに第１の値ａ０が格納される。乗算処理Ｓ１と比較処理Ｓ２とを１つの命令で実行する。乗算処理Ｓ１は、第１データ要素ＶＤ１１〜ＤＶ１４と、第１の値ａ０とを乗算して乗算値ＪＴ１〜ＪＴ４を計算する。比較処理Ｓ２は、乗算値ＪＴ１〜ＪＴ４と、第２データ要素ＶＤ２１〜ＤＶ２４とを比較する。【選択図】図８
2020144479.tif 000002
【特許請求の範囲】
【請求項１】
第１レジスタに第１データ要素が格納され、
第２レジスタに第２データ要素が格納され、
第３レジスタに第１の値が格納され、
前記第１データ要素と前記第１の値とを乗算して乗算値を計算する乗算処理と、
前記乗算値と前記第２データ要素とを比較する比較処理と、を１つの命令で実行する、
プロセッサ。
【請求項２】
第４レジスタに第３データ要素が格納され、
前記第３レジスタに第２の値が更に格納され、
前記１つの命令は、
前記比較処理の比較結果に応じて、前記第４レジスタに格納された前記第３データ要素を前記第２の値に置き換える置換処理を更に実行させる、
請求項１に記載のプロセッサ。
【請求項３】
前記第３レジスタに複数の組が格納され、
前記複数の組はそれぞれ、前記第１の値及び前記第２の値からなり、
前記複数の組は、前記第３レジスタにおいて互いに異なる記憶領域に格納され、
前記１つの命令は、複数の命令ニーモニックを有し、
前記複数の命令ニーモニックは、前記複数の組のうち、互いに異なる前記記憶領域に格納された組の前記第１の値及び前記第２の値を読み出させる、
請求項２に記載のプロセッサ。
【請求項４】
前記第１データ要素及び前記第２データ要素の各々のビット幅は、前記第３データ要素のビット幅と異なる、
請求項２又は３に記載のプロセッサ。
【請求項５】
前記第１レジスタ、前記第２レジスタ、前記第３レジスタ及び前記第４レジスタを備え、
前記第１レジスタ、前記第２レジスタ、前記第３レジスタ及び前記第４レジスタには、識別番号としてのレジスタ番号が設定され、
前記第１レジスタ、前記第２レジスタ、前記第３レジスタ及び前記第４レジスタのうち、少なくとも１つのレジスタの前記レジスタ番号は、他のレジスタの前記レジスタ番号に対する連番である、
請求項２〜４の何れか１項に記載のプロセッサ。
【請求項６】
前記第１レジスタ、前記第２レジスタ、前記第３レジスタ及び前記第４レジスタを備え、
前記第１レジスタ、前記第２レジスタ、前記第３レジスタ及び前記第４レジスタのうち、少なくとも１つのレジスタのレジスタ番号は、固定されている、
請求項２〜５の何れか１項に記載のプロセッサ。
【請求項７】
前記第１レジスタには、前記第１データ要素が複数格納され、
前記第２レジスタには、前記第２データ要素が複数格納され、
前記第４レジスタには、前記第３データ要素が複数格納され、
前記乗算処理は、
前記複数の第１データ要素と、前記第１の値とを乗算して前記乗算値を複数生成し、前記複数の乗算値は、前記複数の第２データ要素と対応し、
前記比較処理は、
前記複数の第２データ要素を、前記複数の乗算値のうちの対応する乗算値と比較して比較結果を複数生成し、前記複数の比較結果は、前記複数の第３データ要素と対応し、
前記置換処理は、
前記第４レジスタに格納された前記複数の第３データ要素を、前記複数の比較結果のうちの対応する比較結果に応じて、前記第２の値に置換する、
請求項２〜６の何れか１項に記載のプロセッサ。
【請求項８】
前記第３レジスタに複数の組が格納され、
前記複数の組はそれぞれ、前記第１の値及び前記第２の値からなり、
前記複数の組は、一列に配列し、
前記１つの命令は、
前記乗算処理で用いる前記第１の値及び前記置換処理で用いる前記第２の値として、前記第３レジスタの所定領域に格納された組の前記第１の値及び前記第２の値を読み出させ、
前記１つの命令は、
前記所定領域の隣の領域に格納された組が前記所定領域に移動するように、前記第３レジスタに格納された前記複数の組を一方向にシフトするシフト処理を更に実行させる、
請求項７に記載のプロセッサ。
【請求項９】
前記複数の組を複数の第１の組とし、
前記一方向を第１シフト方向とし、
第５レジスタに複数の第２の組が格納され、
前記複数の第２の組はそれぞれ、前記第１の値及び前記第２の値からなり、
前記複数の第２の組は、一列に配列し、
前記シフト処理は、
前記複数の第２の組を第２シフト方向に一組分シフトすると共に、前記複数の第２の組のうち前記第２シフト方向の一端に位置する第２の組を、前記第３レジスタにおける、前記複数の第１の組における前記第１シフト方向とは反対方向の一端に位置する第１の組の隣の領域に移動させる処理を含む、
請求項８に記載のプロセッサ。
【請求項１０】
前記第１データ要素及び前記第２データ要素は、互いに相関するデータ要素である、
請求項１〜９の何れか１項に記載のプロセッサ。
【請求項１１】
前記１つの命令は、
前記第２レジスタに格納された前記第２データ要素を所定のシフト量シフトするシフト処理を更に実行させる、
請求項１〜１０の何れか１項に記載のプロセッサ。
【請求項１２】
前記１つの命令は、前記所定のシフト量の値を入力可能な変数を有する、
請求項１〜１１の何れか１項に記載のプロセッサ。
【請求項１３】
前記第３レジスタを備え、
前記第３レジスタは、汎用レジスタである、
請求項１〜１２の何れか１項に記載のプロセッサ。
【請求項１４】
第１レジスタに第１データ要素が格納され、第２レジスタに第２データ要素が格納され、第３レジスタに第１の値が格納され、
前記第１データ要素と前記第１の値とを乗算して乗算値を計算する乗算処理と、
前記乗算値と前記第２データ要素とを比較する比較処理と、を１つの命令で実行する、
プロセッサの制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、一般にプロセッサ及びプロセッサの制御方法に関し、より詳細には、１つの命令で複数の処理を実行可能なプロセッサ及びプロセッサの制御方法に関する。
【背景技術】
【０００２】
特許文献１に記載の複合演算回路（プロセッサ）は、２つのレジスタの各々に格納されたデータを乗算器で乗算する。そして、複合演算回路は、乗算器の乗算値と、２つのレジスタとは別のレジスタに格納された別のデータとを比較回路で比較し、その比較結果として、乗算器の乗算値及び別のデータのどちらを選択するかを示す選択信号をセレクタ回路に出力する。セレクタ回路は、選択信号に基づいて、乗算器の乗算値及び他のデータのうちの大きい方を選択して出力する。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】平３−１０５６１５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
特許文献１に記載の複合演算回路では、セレクタ回路の処理が、ＨＯＧ（Histograms of Oriented Gradients）特徴量を生成するための処理とは異なる処理であるため、ＨＯＧ特徴量を生成できない。より詳細には、上記のセレクタ回路は、選択信号に基づいて、比較回路で比較された乗算値及び他のデータのうちの大きい方を選択して出力する。しかし、ＨＯＧ特徴量を生成する場合は、上記のセレクタ回路は、比較器の比較結果に応じて、上記の他のデータとは異なる別のデータを出力するか否かという処理を行う必要がある。
【０００５】
本開示は、上記事由に鑑みて、ＨＯＧ特徴量をより速く生成可能なプロセッサ及びプロセッサの制御方法を提供することを目的とする。
【課題を解決するための手段】
【０００６】
本開示の一態様に係るプロセッサでは、第１レジスタに第１データ要素が格納され、第２レジスタに第２データ要素が格納され、第３レジスタに第１の値が格納される。前記プロセッサは、乗算処理と比較処理と、を１つの命令で実行する。前記乗算処理は、前記第１データ要素と前記第１の値とを乗算して乗算値を計算する。前記比較処理は、前記乗算値と前記第２データ要素とを比較する。
【０００７】
本開示の一態様に係るプロセッサの制御方法では、第１レジスタに第１データ要素が格納され、第２レジスタに第２データ要素が格納され、第３レジスタに第１の値が格納される。このプロセッサの制御方法では、プロセッサは、乗算処理と比較処理とを１つの命令で実行する。前記乗算処理は、前記第１データ要素と前記第１の値とを乗算して乗算値を計算する。前記比較処理は、前記乗算値と前記第２データ要素とを比較する。
【発明の効果】
【０００８】
本開示は、ＨＯＧ特徴量をより速く生成可能である、という利点がある。
【図面の簡単な説明】
【０００９】
【図１】図１は、入力画像と一定領域との関係を説明する説明図である。
【図２】図２は、ＨＯＧ特徴量を説明する説明図である。
【図３】図３は、３×３画素の各画素への符号の振り方の一例を説明する説明図である。
【図４】図４は、ヒストグラムの階級（傾き階級）を説明する説明図である。
【図５】図５は、ヒストグラムの階級の境界値を説明する説明図である。
【図６】図６は、複数の注目画素での傾きを並列処理で計算する場合の計算方法を説明する説明図である。
【図７】図７は、実施形態に係るプロセッサの構成の一例を示す構成図である。
【図８】図８は、同上のプロセッサの処理の流れを説明する模式図である。
【図９】図９は、変形例１に係るプロセッサの処理の流れの一部を説明する模式図である。
【図１０】図１０Ａは、変形例３における、シフト処理前の第３ベクトルレジスタを示す模式図である。図１０Ｂは、シフト処理後の第３ベクトルレジスタを示す模式図である。
【図１１】図１１Ａは、変形例４における、シフト処理前の第３及び第５ベクトルレジスタを示す模式図である。図１１Ｂは、シフト処理後の第３及び第５ベクトルレジスタを示す模式図である。
【図１２】図１２は、変形例５における、複数のニーモニックの各々が読み出す、境界値逆数及び傾き階級の組を説明する模式図である。
【図１３】図１３は、変形例６に係るプロセッサにおいて、データサイズが第３データ要素よりも大きい場合の第１から第４ベクトルレジスタへのデータの格納の仕方を説明する説明図である。
【図１４】図１４は、同上のプロセッサにおいて、第４ベクトルレジスタへのデータの格納の仕方の別の例を説明する説明図である。
【図１５】図１５は、同上のプロセッサにおいて、データサイズが第３データ要素よりも小さい場合の第１から第４ベクトルレジスタへのデータの格納の仕方を説明する説明図である。
【図１６】図１６は、同上のプロセッサにおいて、第４ベクトルレジスタへのデータの格納の仕方の別の例を説明する説明図である。
【図１７】図１７Ａは、実施形態における命令コードの一例を示す模式図である。図１７Ｂは、変形例７における命令コードの一例を示す模式図である。
【図１８】図１８は、変形例８における命令コードの一例を示す模式図である。
【図１９】図１９は、変形例９における、境界値逆数を格納する汎用レジスタ、及び傾き階級を格納する汎用レジスタの一例を示す模式図である。
【発明を実施するための形態】
【００１０】
以下、実施形態に係るプロセッサについて説明する。下記の実施形態は、本開示の様々な実施形態の例に過ぎない。また、下記の実施形態は、本開示の目的を達成できれば、設計等に応じて種々の変更が可能である。
【００１１】
図１〜図８を参照して、本実施形態に係るプロセッサ１について説明する。プロセッサ１は、例えば画像から特定の物体（例えば人）を検出する物体検出処理で使用可能なプロセッサである。
【００１２】
なお、プロセッサとは、命令メモリ、フェッチ部、デコーダ部、レジスタファイル、演算器群及びデータメモリのうち、全てが１チップに含まれるものである。ただし、命令メモリ及びデータメモリは、チップの外にあってもよい。
【００１３】
物体検出処理では、予め、特定の物体の写った大量のサンプル画像から複数の特徴量を抽出してヒストグラムを生成し、統計的学習手法を用いて特定の物体の特徴を学習させ、特定の物体の特徴を表したヒストグラム（参照ヒストグラム）を取得する。そして、入力画像に対し、複数の特徴量を抽出してヒストグラムを生成し、生成したヒストグラムと参照ヒストグラムとを比較する。この比較の結果、両者が類似又は一致する場合に、入力画像に特定の物体が写っていると判定する。
【００１４】
上記の特徴量として、ＨＯＧ（Histograms of Oriented Gradients）特徴量を用いることができる。
【００１５】
ＨＯＧ特徴量とは、画像の一定領域の各画素でのエッジの傾きをヒストグラム化した特徴量である。具体的には、図１に示すように、入力画像Ｆ１の一定領域ＣＲ１内の各画素でのエッジＥＧ１の傾きを求める。そして、図２に示すように、求めた各画素でのエッジＥＧ１の傾きをヒストグラム化する。このヒストグラムが一定領域ＣＲ１に対するＨＯＧ特徴量である。なお、図２のヒストグラムでは、横軸の階級がエッジの傾きであり、縦軸の度数がエッジの個数である。横軸の階級は、例えば０度から１８０度までの範囲を８等分した８階級に設定されている。
【００１６】
このように求めたＨＯＧ特徴量（ヒストグラム）を上記の参照ヒストグラムと比較し、両者が一致又は類似する場合は、一定領域ＣＲ１に特定の物体が写っていると判断される。また、両者が一致も類似もしない場合は、一定領域ＣＲ１に特定の物体は写っていないと判断される。
【００１７】
ＨＯＧ特徴量の計算内容の概要を説明する。
【００１８】
各画素でのエッジＥＧ１の傾きθは、下記のように計算可能である。図３に示すように、３×３画素ＫＲ１を考える。図３中の符号Ｐ０〜Ｐ９は、各画素を識別する符号であり、符号Ｌ０〜Ｌ９は、各画素Ｐ０〜Ｐ９の輝度値である。中心の画素Ｐ４を注目画素とし、注目画素Ｐ４でのエッジＥＧ１の傾きθを計算する。傾きθは、３×３画素ＫＲ１の横軸を基準にして反時計回りに回転する角度である。各画素Ｐ０〜Ｐ９の輝度値をＬ０〜Ｌ９とする。角度θは、式１に示すように、注目画素Ｐ０の上下の画素Ｐ１，Ｐ７の輝度値Ｌ１，Ｌ７の差分（Ｌ１−Ｌ７）と、注目画素Ｐ０の左右の画素Ｐ５，Ｐ３の輝度値Ｌ５，Ｌ３の差分（Ｌ５−Ｌ３）とを用いて、表現される。なお、式１のａｒｃｔａｎは、ｔａｎの逆数である。
【００１９】
θ＝ａｒｃｔａｎ（(Ｌ１−Ｌ７)／（Ｌ５−Ｌ３））・・・式１
ヒストグラムの階級ｔｈｅｔａを複数（例えば８つ）の傾き階級ｂ０〜ｂ７に区分する（図４）。そして、画像Ｆ１の一定領域ＣＲ１の各画素で角度θを計算し、計算した角度θが８つの傾き階級ｂ０〜ｂ７のうちのどの傾き階級ｂ０〜ｂ７に属するかを判定し、属する傾き階級ｂ０〜ｂ７の度数に計上する。傾き階級ｂ０〜ｂ７は、例えば、０度から１８０度までの範囲を８等分して構成されている。傾き階級ｂ０〜ｂ７は、ｂ０，ｂ１，…，ｂ７の順に１８０度側から０度側に向かって並んでいる。なお、以下の説明では、差分（Ｌ１−Ｌ７）を上下差分Ｌ１７とも記載し、差分（Ｌ５−Ｌ３）を左右差分Ｌ５３とも記載する。
【００２０】
傾きθの計算を簡略化する方法を説明する。
【００２１】
式１の除算値（(Ｌ１−Ｌ７)／（Ｌ５−Ｌ３））をａｎｇｌｅと記載する。すなわち、ａｎｇｌｅを式２のように定義する。
【００２２】
ａｎｇｌｅ＝(Ｌ１−Ｌ７)／（Ｌ５−Ｌ３）・・・式２
式１のａｒｃｔａｎの計算は、複雑であるため省略し、式２に基づいてａｎｇｌｅのみを計算する。そして、ａｎｇｌｅの値が、ヒストグラムの８つの傾き階級ｂ０〜ｂ７のどの傾き階級に属するかを判定する。具体的には、図５に示すように、ヒストグラムの８つの傾き階級ｂ０〜ｂ７の境界値Ａ０〜Ａ７を予め設定しておく。そして、まず、着目した３×３画素ＫＲ１に対して、式２に基づいてａｎｇｌｅの値を計算する。
【００２３】
【表１】
2020144479.tif 000003
【００２４】
そして、表１に示すように、複数の境界値Ａ０〜Ａ７のうちの大きい境界値から順番に、ａｎｇｌｅの値と大小比較を行う。なお、複数の境界値Ａ０〜Ａ７は、複数の傾き階級ｂ０〜ｂ７に一対一対応している。具体的には、まず、表１の１行目のｉｆ文の大小関係（ａｎｇｌｅ＞Ａ０）が成立するか否かの判定を実行する。以下、この判定を成否判定とも記載する。この大小関係が成立すれば、このａｎｇｌｅの値で求まる式１の角度θは、境界値Ａ０に対応する傾き階級ｂ０に属すると判定する。この大小関係が成立しない場合は、２行目のｅｌｓｅ  ｉｆ文の大小関係（ａｎｇｌｅ＞Ａ１）の成否判定を実行する。この大小関係が成立すれば、このａｎｇｌｅの値で求まる式１の角度θは、境界値Ａ１に対応する傾き階級ｂ１に属すると判定する。そして、残りの境界値Ａ２〜Ａ７を順に変更して大小関係の成否判定を繰り返す。この処理により、ａｒｃｔａｎの計算を行わずに、角度θが８つの傾き階級ｂ０〜ｂ７のどの傾き階級に属するかを判定できる。
【００２５】
次に、傾きθの計算を更に簡略化する方法を説明する。
【００２６】
【表２】
2020144479.tif 000004
【００２７】
式２のａｎｇｌｅは、除算を含むため、演算に時間が掛かる。このため、表１の１行目のｉｆ文の大小関係（ａｎｇｅ＞Ａ０）を、表２の１行目のｉｆ文の大小関係（１／Ａ０×（Ｌ１−Ｌ７））＞（Ｌ５−Ｌ３））のように、除算を無くした形に変形する。そして、大小関係の成否判定を実行する。同様に、表１の２行目以後のｉｆ  ｅｌｓｅ文の大小関係も、表２の２行目以降のｉｆ  ｅｌｓｅ文の大小関係のように変形して、大小関係の成否判定を実行する。なお、表２の１／Ａ０，１／Ａ１，…，１／Ａ７は、既知の数として与えられる。以下、境界値逆数１／Ａ０〜１／Ａ７を境界値逆数ａ０〜ａ７とも記載する。
【００２８】
なお、表２において、１行目のｉｆ文の中の境界値逆数ａ０（＝１／Ａ０）及び傾き階級ｂ０は組を成している。以後、この組を組（ａ０，ｂ０）と記載する場合がある。同様に、２行目以降のｉｆ  ｅｌｓｅ文の中の境界値逆数及び傾き階級の組も、組（ａ１，ｂ１）、…、組（ａ７，ｂ７）と記載する場合がある。
【００２９】
プロセッサ１の構成を詳しく説明する。
【００３０】
プロセッサ１は、表２の各行の大小関係の成否判定を実行することで、ＨＯＧ特徴量を生成するプロセッサである。すなわち、プロセッサ１は、上下差分Ｌ１７及び左右差分Ｌ５３に対し、境界値逆数ａ０〜ａ７及び傾き階級ｂ０〜ｂ７の組を順に組（ａ０，ｂ０）から組（ａ７，ｂ７）まで入れ替えながら、注目画素Ｐ４での傾きθが属する傾き階級ｂ０〜ｂ７を判定する。その際、プロセッサ１は、表２の各行の大小関係の成否判定をそれぞれ１つのベクトル命令で実行する。そして、一定領域ＣＲ１の全ての画素（注目画素）に対して表２の各行の大小関係の成否判定を実行する。これにより、一定領域ＣＲ１に対するＨＯＧ特徴量が生成される。
【００３１】
より詳細には、図６に示すように、プロセッサ１は、複数（例えば４つ）の注目画素Ｐ４ａ〜Ｐ４ｄの各々に対する表２の各行の大小関係の成否判定を、並列処理で実行する。すなわち、プロセッサ１は、複数の注目画素Ｐ４ａ〜Ｐ４ｄの各々の上下差分Ｌ１７ａ，Ｌ１７ｂ，Ｌ１７ｃ，Ｌ１７ｄ及び左右差分Ｌ５３ａ，Ｌ５３ｂ，Ｌ５３ｃ，Ｌ５３ｄに対し、境界値逆数ａ０〜ａ７及傾き階級ｂ０〜ｂ７の組を順に、組（ａ０，ｂ０）から組（ａ０，ｂ０）まで入れ替えながら、注目画素Ｐ４ａ〜Ｐ４ｄでの傾きθが属する傾き階級ｔｈｅｔａ−ａ〜ｔｈｅｔａ−ｄを判定する。その際、プロセッサ１は、複数の注目画素Ｐ４ａ〜Ｐ４ｄの各々に対する表２の同じ行の大小関係の成否判定をそれぞれ、１つのベクトル命令で実行する。そして、一定領域ＣＲ１の全ての画素（注目画素）に対して表２の各行の大小関係の成否判定を実行する。これにより、一定領域ＣＲ１に対するＨＯＧ特徴量が生成される。
【００３２】
なお、図６中の上下差分Ｌ１７ａ，Ｌ１７ｂ，Ｌ１７ｃ，Ｌ１７ｄは、注目画素Ｐ４ａ〜Ｐ４ｄの上下の画素の画素値の差分である。左右差分Ｌ５３ａ，Ｌ５３ｂ，Ｌ５３ｃ，Ｌ５３ｄは、注目画素Ｐ４ａ〜Ｐ４ｄの左右の画素の画素値の差分である。
【００３３】
図７に示すように、プロセッサ１は、処理部２と、命令メモリ３と、データメモリ７とを備えている。処理部２は、第１ベクトルレジスタＶＲａ（第１レジスタ）と、第２ベクトルレジスタＶＲｂ（第２レジスタ）と、第３ベクトルレジスタＶＲｃ（第３レジスタ）と、第４ベクトルレジスタＶＲｄ（第４レジスタ）と、複数（例えば４つ）の乗算器Ｊ１〜Ｊ４と、複数の比較器Ｋ１〜Ｋ４と、選択器Ｍ１〜Ｍ４と、フェッチ部４と、デコーダ部５と、実行部６とを備えている。
【００３４】
第１〜第４ベクトルレジスタＶＲａ〜ＶＲｄの記憶容量は、例えば１２８ビットである。なお、本実施形態では、第１ベクトルレジスタＶＲａ、第２ベクトルレジスタＶＲｂ及び第３ベクトルレジスタＶＲｃは、プロセッサ１に含まれるが、プロセッサ１に含まれなくてもよい。また、命令メモリ３及びデータメモリ７は、プロセッサ１に含まれなくてもよい。また、処理部２は、第１〜第３ベクトルレジスタＶＲａ〜ＶＲｃ以外のレジスタ（例えばベクトルレジスタ及び汎用レジスタ）や、実行部６、比較器Ｋ１〜Ｋ４及び選択器Ｍ１〜Ｍ４以外の演算器を含んでもよい。
【００３５】
第１ベクトルレジスタＶＲａは、図８に示すように、第１ベクトルデータＶＤ１を格納する。第１ベクトルデータＶＤ１は、複数（例えば４つ）の第１データ要素ＶＤ１１〜ＶＤ１４で構成される。第１データ要素ＶＤ１１〜ＶＤ１４はそれぞれ、注目画素Ｐ４ａ〜Ｐ４ｄの上下の画素の輝度値の差分を表すデータ（上下差分データ）である。第１ベクトルレジスタＶＲａは、複数（例えば４つ）の記憶領域ｍ１１〜ｍ１４を有する。記憶領域ｍ１１〜ｍ１４の数及び記憶容量は、記憶領域の数×記憶領域の記憶容量がベクトルレジスタの記憶容量の１２８ビットであるという範囲で自由に設定される。そのため、記憶領域ｍ１１〜ｍ１４の数は、本実施形態では４つであるが、４つに限定されない。複数の第１データ要素ＶＤ１１〜ＶＤ１４は、複数の記憶領域ｍ１１〜ｍ１４と一対一に対応し、対応する記憶領域ｍ１１〜ｍ１４に格納される。各記憶領域ｍ１１〜ｍ１４は、例えば３２ビットであり、第１データ要素ＶＤ１１〜ＶＤ１４は、例えば３２ビットデータである。なお、記憶領域の記憶容量とデータ要素のサイズは、互いに一致させるのが一般的である。したがって、第１データ要素が８ビットデータの場合は、記憶領域も８ビットに設定することが望ましい。第１データ要素が８ビットデータの場合は、第１データ要素のサイズに応じて第１データ要素の数が変わり、第１データ要素の数は１６となる。なお、第２〜３データ要素も同様である。第１〜３データ要素の数に合わせて、並列演算される第１〜３データ要素の数やプロセッサの比較器、乗算器、選択器の数を変える必要があり、この場合は１６となる。以下、第１データ要素ＶＤ１１〜ＶＤ１４を上下差分データＶＤ１１〜ＶＤ１４とも記載する。
【００３６】
第２ベクトルレジスタＶＲｂは、図８に示すように、第２ベクトルデータＶＤ２を格納する。第２ベクトルデータＶＤ２は、複数（例えば４つ）の第２データ要素ＶＤ２１〜ＶＤ２４で構成される。第２データ要素ＶＤ２１〜ＶＤ２４はそれぞれ、注目画素Ｐ４ａ〜Ｐ４ｄの左右の画素の輝度値の差分を表すデータ（左右差分データ）である。第２データ要素ＶＤ２１〜ＶＤ２４を左右差分データＶＤ２１〜ＶＤ２４とも記載する。第２データ要素ＶＤ２１〜ＶＤ２４は、第１データ要素ＶＤ１１〜ＶＤ１４に相関するデータである。
【００３７】
第２ベクトルレジスタＶＲｂは、複数の記憶領域ｍ２１〜ｍ２４を有する。複数の第２データ要素ＶＤ２１〜ＶＤ２４は、複数の記憶領域ｍ２１〜ｍ２４と一対一に対応し、対応する複数の記憶領域ｍ２１〜ｍ２４に格納される。各記憶領域ｍ２１〜ｍ２４は、例えば３２ビットであり、第２データ要素ＶＤ２１〜ＶＤ２４は、例えば８ビットデータである。
【００３８】
第３ベクトルレジスタＶＲｃは、図８に示すように、境界値逆数ａ０（第１の値）及び傾き階級ｂ０（第２の値）を格納する。第３ベクトルレジスタＶＲｃは、複数（例えば４つ）の記憶領域ｍ３１〜ｍ３４を有する。境界値逆数ａ０は、記憶領域ｍ３４に格納され、傾き階級ｂ０は、記憶領域ｍ３３に格納されている。本実施形態では、第３ベクトルレジスタＶＲｃの記憶領域ｍ３１，ｍ３２は、使用されない。各記憶領域ｍ２１〜ｍ２４は、例えば３２ビットであり、境界値逆数ａ０及び傾き階級ｂ０は、例えば８ビットデータである。なお、境界値逆数ａ０及び傾き階級ｂ０は、第３ベクトルレジスタＶＲｃの予め定められた場所であれば何処の場所に格納されてもよく、例えば、境界値逆数ａ０及び傾き階級ｂ０は記憶領域ｍ３１，ｍ３２に格納されてもよい。この場合は、後述の処理で境界値逆数ａ０及び傾き階級ｂ０を用いる場合は、その定められた場所から境界値逆数ａ０及び傾き階級ｂ０を取り出すことになる。第４ベクトルレジスタＶＲｄは、図８に示すように、第３ベクトルデータＶＤ３を格納する。第３ベクトルデータＶＤ３は、複数（例えば４つ）の第３データ要素ＶＤ３１〜ＶＤ３４で構成される。第４ベクトルレジスタＶＲｄは、複数（例えば４つ）の記憶領域ｍ４１〜ｍ４４を有する。各記憶領域ｍ４１〜ｍ４４は、例えば３２ビットである。複数の第３データ要素ＶＤ３１〜ＶＤ３４は、複数の記憶領域ｍ４１〜ｍ４４に一対一に対応し、対応する記憶領域ｍ４１〜ｍ４４に格納される。
【００３９】
複数の記憶領域ｍ４１〜ｍ４４は、後述のように、複数の選択器Ｍ１〜Ｍ４と一対一に対応する。記憶領域ｍ４１〜ｍ４４には、対応する選択器Ｍ１〜Ｍ４から出力された選択結果が格納される。第３データ要素ＶＤ３１〜ＶＤ３４は、対応する記憶領域ｍ４１〜ｍ４４に格納された選択結果で構成される。
【００４０】
複数の記憶領域ｍ１１〜ｍ１４、複数の記憶領域ｍ２１〜ｍ２４、複数の記憶領域ｍ３１〜ｍ３４、後述の複数の乗算器Ｊ１〜Ｊ４、後述の複数の比較器Ｋ１〜Ｋ４、及び後述の複数の選択器Ｍ１〜Ｍ４はそれぞれ、一対一に対応する。また、複数の第１データ要素ＶＤ１１〜ＶＤ１４、複数の第２データ要素ＶＤ２１〜ＶＤ２４、及び複数の第３データ要素ＶＤ３１〜ＶＤ３４はそれぞれ、一対一に対応する。互いに対応する第１データ要素ＶＤ１１〜ＶＤ１４、第２データ要素ＶＤ２１〜ＶＤ２３及び第３データ要素ＶＤ４１〜ＶＤ４４は、３つのベクトルレジスタＶＲａ，ＶＲｂ，ＶＲｄにおける互いに対応する記憶領域に格納される。
【００４１】
命令メモリ３は、プロセッサ１で実行する命令を格納する揮発性のメモリである。フェッチ部４は、実行する命令を命令メモリ３から読み出すブロックである。デコーダ部５は、フェッチ部４で読み出された命令の内容を解釈するブロックである。実行部６は、デコーダ部５で解釈された命令を実行するブロックである。データメモリ７は、命令メモリ３から読み出された命令によって処理されるデータを保存するメモリである。
【００４２】
実行部６が実行する命令の中には、図８に示すように、乗算処理Ｓ１と、比較処理Ｓ２と、置換処理Ｓ３とを１つの命令で実行するベクトル命令を含む。乗算処理Ｓ１、比較処理Ｓ２及び置換処理Ｓ３は、この順に実行される。
【００４３】
乗算処理Ｓ１は、第１ベクトルレジスタＶＲａに格納された第１データ要素ＶＤ１１〜ＶＤ１４と、第３ベクトルレジスタＶＲｃに格納された境界値逆数ａ０とを乗算して乗算値ＪＴ１〜ＪＴ４を計算する処理である。比較処理Ｓ２は、乗算値ＪＴ１〜ＪＴ４と、第２ベクトルレジスタＶＲｂに格納された第２データ要素ＶＤ２１〜ＶＤ２４とを比較する処理である。置換処理Ｓ３は、第４ベクトルレジスタＶＲｄに格納された第３データ要素ＶＤ３１〜ＶＤ３４を、比較処理Ｓ２の比較結果に応じて、第３ベクトルレジスタＶＲｃに格納された傾き階級ｂ０と置き換える処理である。
【００４４】
より詳細には、乗算処理Ｓ１は、第１ベクトルレジスタＶＲａに格納された複数の第１データ要素ＶＤ１１〜ＶＤ１４の各々と、第３ベクトルレジスタＶＲｃに格納された境界値逆数ａ０とを乗算して複数の乗算値ＪＴ１〜ＪＴ４を生成する。なお、複数の乗算値ＪＴ１〜ＪＴ４は、複数の第２データ要素ＶＤ２１〜ＶＤ２４と一対一に対応している。比較処理Ｓ２は、第２ベクトルレジスタＶＲｂに格納された複数の第２データ要素ＶＤ２１〜ＶＤ２４の各々を、複数の乗算値ＪＴ１〜ＪＴ４のうちの対応する乗算値ＪＴ１〜ＪＴ４と比較して複数の比較結果ＫＴ１〜ＫＴ４を生成する。複数の比較結果ＫＴ１〜ＫＴ４は、複数の第３データ要素ＶＤ３１〜ＶＤ３４に一対一に対応する。置換処理Ｓ３は、第４ベクトルレジスタＶＲｄに格納された複数の第３データ要素ＶＤ３１〜ＶＤ３４を、複数の比較結果ＫＴ１〜ＫＴ４のうちの対応する比較結果に応じて、第３ベクトルレジスタＶＲｃに格納された傾き階級ｂ０に置換する。
【００４５】
実行部６は、上記のベクトル命令に従って、乗算処理Ｓ１、比較処理Ｓ２及び置換処理Ｓ３を実行する。
【００４６】
乗算処理Ｓ１では、図８に示すように、実行部６は、第１ベクトルレジスタＶＲａの記憶領域ｍ１１〜ｍ１４内の第１データ要素ＶＤ１１〜ＶＤ１４を読み出し、読み出した第１データ要素ＶＤ１１〜ＶＤ１４を、対応する乗算器Ｊ１〜Ｊ４に入力する。また、実行部６は、第３ベクトルレジスタＶＲｃの記憶領域ｍ４４内の境界値逆数ａ０を読み出して、読み出した境界値逆数ａ０を各乗算器Ｊ１〜Ｊ４に入力する。
【００４７】
これらの入力に対し、乗算器Ｊ１〜Ｊ４は、入力された第１データ要素ＶＤ１１〜ＶＤ１４と境界値逆数ａ０とを乗算して乗算値ＪＴ１〜ＪＴ４を生成する。乗算器Ｊ１〜Ｊ４は、生成した乗算値ＪＴ１〜ＪＴ４を、対応する比較器Ｋ１〜Ｋ４に出力する。なお、複数の乗算値ＪＴ１〜ＪＴ４は、複数の比較器Ｋ１〜Ｋ４と一対一に対応している。
【００４８】
比較処理Ｓ２では、図８に示すように、実行部６は、第２ベクトルレジスタＶＲｂの記憶領域ｍ２１〜ｍ２４内の第２データ要素ＶＤ２１〜ＶＤ２４を読み出して、読み出した第２データ要素ＶＤ２１〜ＶＤ２４を、対応する比較器Ｋ１〜Ｋ４に入力する。また、比較器Ｋ１〜Ｋ４には、上記のように、対応する乗算器Ｊ１〜Ｊ４の乗算値ＪＴ１〜ＪＴ４が入力される。
【００４９】
これらの入力に対し、比較器Ｋ１〜Ｋ４は、入力された乗算値ＪＴ１〜ＪＴ４と第２データ要素ＶＤ２１〜ＶＤ２４とを大小比較し、その比較結果ＫＴ１〜ＫＴ４を、対応する選択器Ｍ１〜Ｍ４に出力する。
【００５０】
置換処理Ｓ３では、図８に示すように、実行部６は、第３ベクトルレジスタＶＲｃの記憶領域ｍ３３内の傾き階級ｂ０を読み出して、読み出した傾き階級ｂ０を各選択器Ｍ１〜Ｍ４に入力する。また、実行部６は、第４ベクトルレジスタＶＲｄの記憶領域ｍ４１〜ｍ４４内の第３データ要素ＶＤ３１〜ＶＤ３４を読み出し、読み出した第３データ要素ＶＤ３１〜ＶＤ３４を、対応する選択器Ｍ１〜Ｍ４に入力する。また、選択器Ｍ１〜Ｍ４には、上記のように、対応する比較器Ｋ１〜Ｋ４の比較結果ＫＴ１〜ＫＴ４が入力される。
【００５１】
これらの入力に対し、選択器Ｍ１〜Ｍ４は、第４ベクトルレジスタＶＲｄの記憶領域ｍ４１〜ｍ４４内の第３データ要素ＶＤ３１〜ＶＤ３４を、対応する比較結果ＫＴ１〜ＫＴ４に応じて、入力された傾き階級ｂ０に置換する。
【００５２】
より詳細には、入力された比較結果ＫＴ１〜ＫＴ４が、乗算値ＪＴ１〜ＪＴ４が第２データ要素ＶＤ２１〜ＶＤ２４よりも大きいという結果である場合（すなわち表２の１行目のｉｆ文の大小関係が成立する場合）は、選択器Ｍ１〜Ｍ４は、入力された傾き階級ｂ０及び第３データ要素ＶＤ３１〜ＶＤ３４のうち、傾き階級ｂ０を選択する。そして、選択器Ｍ１〜Ｍ４は、選択した傾き階級ｂ０を、選択結果ＭＴ１〜ＭＴ４として、第４ベクトルレジスタＶＲｄにおける、対応する記憶領域ｍ４１〜ｍ４４に上書きで格納する。すなわち、選択器Ｍ１〜Ｍ４は、第４ベクトルレジスタＶＲｄ内における、比較結果ＫＴ１〜ＫＴ４に対応する第３データ要素ＶＤ３１〜ＶＤ３４を、入力された傾き階級ｂ０に置換する。これにより、第４ベクトルレジスタＶＲｄ内の第３データ要素ＶＤ３１〜ＶＤ３４の内容が、比較結果ＫＴ１〜ＫＴ４に応じて、傾き階級ｂ０に更新される。
【００５３】
他方、入力された比較結果ＫＴ１〜ＫＴ４が、乗算値ＪＴ１〜ＪＴ４が第２データ要素ＶＤ２１〜ＶＤ２４以下であるという結果である場合（すなわち表２の１行目のｉｆ文の大小関係が成立しない場合）は、選択器Ｍ１〜Ｍ４は、入力された傾き階級ｂ０及び第３データ要素ＶＤ３１〜ＶＤ３４のうち、第３データ要素ＶＤ３１〜ＶＤ３４を選択する。そして、選択器Ｍ１〜Ｍ４は、選択した第３データ要素ＶＤ３１〜ＶＤ３４を、第４ベクトルレジスタＶＲｄにおける、対応する記憶領域ｍ４１〜ｍ４４に上書きで格納する。すなわち、選択器Ｍ１〜Ｍ４は、第４ベクトルレジスタＶＲｄ内における、比較結果ＫＴ１〜ＫＴ４に対応する第３データ要素ＶＤ３１〜ＶＤ３４を、入力された第３データ要素ＶＤ３１〜ＶＤ３４に置換する。すなわち、第４ベクトルレジスタＶＲｄ内の第３データ要素ＶＤ３１〜ＶＤ３４は、更新されずに保持される。
【００５４】
このように、上記のベクトル命令を実行することで、４つの注目画素Ｐ４ａ〜Ｐ４ｄに対し、表２の１行目のｉｆ文の大小関係の成否判定が実行される。そして、４つの注目画素Ｐ４ａ〜Ｐ４ｄのうち、上記の大小関係が成立した注目画素に対しては、その傾きθは傾き階級ｂ０に属すると判定される。そして、その判定結果が第４ベクトルレジスタＶＲｄ内の対応する記憶領域ｍ４１〜ｍ４４に、第３データ要素ＶＤ３１〜ＶＤ３４として格納される。
【００５５】
そして、第３ベクトルレジスタＶＲｃに格納された境界値逆数ａ０及び傾き階級ｂ０の組を、順に次の組（ａ１，ｂ１）から最後の組（ａ７，ｂ７）まで入れ替えながら、上記のベクトル命令を繰り返し実行する。これにより、４つの注目画素Ｐ４ａ〜Ｐ４ｄに対し、表２の２行目以降のｉｆ  ｅｌｓｅ文の大小関係の成否判定が順に実行される。そして、その判定結果（どの傾き階級ｂ０〜ｂ７に属するかの判定結果）が、第４ベクトルレジスタＶＲｄ内の対応する記憶領域ｍ４１〜ｍ４４に、第３データ要素ＶＤ３１〜ＶＤ３４として格納される。そして、一定領域ＣＲ１の全ての画素（注目画素）に対して表２の各行の大小関係の成否判定を実行する。これにより、一定領域ＣＲ１に対するＨＯＧ特徴量が生成される。
【００５６】
【表３】
2020144479.tif 000005
【００５７】
表３は、上記のベクトル命令をプロセッサ１に実装する場合の「ニーモニック」、「データタイプ」、「Read/Write」及び「動作」の一例を示す。
【００５８】
表３のニーモニックの欄のpgrad.[Ｄ]の[Ｄ]には、第１データ要素ＶＤ１１〜ＶＤ１４、第２データ要素ＶＤ２１〜ＶＤ２４及び第３データ要素ＶＤ３１〜ＶＤ３４のデータタイプを示す記号が入る。表３のニーモニックの欄の「VRa」「VRb」「VRc」「VRd」は、使用するベクトルレジスタを指定する。「VRa」は、第１ベクトルレジスタＶＲａに対応し、「VRb」は、第２ベクトルレジスタＶＲｂに対応し、「VRc」は、第３ベクトルレジスタＶＲｃに対応し、「VRd」は、第４ベクトルレジスタＶＲｄに対応する。「VRd」には、２進数のデータ要素（第３データ要素ＶＤ３１〜ＶＤ３４）が格納される。そのデータ要素のビット幅は、本実施形態では、VRa、VRb及びVRcに格納されるデータ要素（第１データ要素ＶＤ１１〜ＶＤ１４、第２データ要素ＶＤ２１〜ＶＤ２４、境界値逆数ａ０及び傾き階級）のビット幅と同じである。
【００５９】
表３の「データタイプ」の欄において、「u8」は、符号無し整数又は固定小数点８ビットを示す。「s8」は、符号有り整数又は固定小数点８ビットを示す。「f16」は、半精度浮動小数点数１６ビットを示す。「f32」は、単精度浮動小数点数３２ビットを示す。「f64」は、倍精度浮動小数点数６４ビットを示す。表３の「Read/Write」の欄は、VRa〜ＶＲdが読み出しで用いられるか、書き込みで用いられるかを示す。
【００６０】
表３の「動作」の欄は、上記のベクトル命令で実行される処理（乗算処理Ｓ１、比較処理Ｓ２及び置換処理Ｓ３）を表している。「動作」の欄のＶＲｃ[7:0]等の[7:0]は、ビット位置が０から７までのデータを示す。なお、「VRa[7:0], VRc[7:0]」等の部分が乗算処理Ｓ１に対応し、「umul(VRa[7:0],VRc[7:0])＞VRb[7:0]」等の部分が比較処理Ｓ２に対応し、「VRd[7:0]←( … )?VRc[7:0]:VRd[7:0]」等の部分は、( … )内の関係が成立する場合はVRc[7:0]をVRd[7:0]に入力し、( … )内の関係が成立しない場合はVRd[7:0]をVRd[7:0]に入力することを示し、置換処理Ｓ３に対応する。表３の「動作」の欄では、[Ｄ]がu8の場合、[Ｄ]がs8の場合及び[Ｄ]がu16の場合の動作が一例として記載されている。
【００６１】
本実施形態では、ベクトルレジスタＶＲａ〜ＶＲｄは、１２８ビットのベクトルレジスタであるが、ベクトルレジスタＶＲａ〜ＶＲｄのビット幅は、１２８ビットに限定されず、例えば６４ビット、２５６ビット、５１２ビット又は１０２４ビットであってもよい。ベクトルレジスタＶＲａ〜ＶＲｄのビット幅が変われば、その中に格納されるデータ要素の個数が変わるだけで、動作の本質は同じである。
【００６２】
ここで、本実施形態と比較例とで、３つの処理Ｓ１〜Ｓ３を実行する時間を比較する。本実施形態では、上述の通り、３つの処理Ｓ１〜Ｓ３を１つのベクトル命令で実行する。比較例では、３つの処理Ｓ１〜Ｓ３をそれぞれ別のベクトル命令で実行する。各処理Ｓ１〜Ｓ３の処理そのものは通常１クロック未満（例えば０．１クロック）であるが、１つのベクトル命令の実行には少なくとも１クロック必要となる。本実施形態では、１つのベクトル命令で３つの処理Ｓ１〜Ｓ３を順に実行するため、３つの処理Ｓ１〜Ｓ３そのものは、ベクトル命令の発行時から０．３クロック（＝３×０．１クロック）経過時に完了し、１つのベクトル命令の実行必要時間の１クロック以内である。よって、３つの処理Ｓ１〜Ｓ３を実行するベクトル命令の実行には、１クロック掛かる。比較例では、１つ目のベクトル命令を発行して１つ目の処理Ｓ１を実行し、次のクロックで２つ目のベクトル命令を発行して２つ目の処理Ｓ２を実行し、更に次のクロックで３つ目のベクトル命令を発行して３つ目の処理Ｓ３を実行する。この結果、比較例では、１つ目のベクトル命令を発行してから３つ目の処理Ｓ３が完了するまでに、３クロック（＝１クロック＋１クロック＋１クロック）掛かる。このように、本実施形態のように、１つのベクトル命令で３つの処理Ｓ１〜Ｓ３を実行させることで、一連の３つの処理Ｓ１〜Ｓ３をより速く実行できる。したがって、ＨＯＧ特徴量を生成する処理をより速く実行できる。
【００６３】
以上、本実施形態に係るプロセッサ１によれば、１つのベクトル命令で、乗算処理Ｓ１、比較処理Ｓ２及び置換処理Ｓ３を実行できるため、ＨＯＧ特徴量を生成する処理を一層速く実行できる。
【００６４】
（変形例）
以下、上記の実施形態の変形例を説明する。以下の変形例は、組み合わせて実施されてもよい。上記の実施形態は、本開示の様々な実施形態の一つに過ぎない。上記の実施形態は、本開示の目的を達成できれば、設計等に応じて種々の変更が可能である。さらに、上記の実施形態に係る態様は、プロセッサ１で具現化されることに限らない。例えば、プロセッサ１の制御方法で、上記の実施形態に係る態様が具現化されてもよい。
【００６５】
上記のプロセッサの制御方法は、第１データ要素を格納する第１レジスタと、第２データ要素を格納する第２レジスタと、第１の値を格納する第３レジスタとを用いて、命令を実行可能な処理を含む。前記命令は、乗算処理と、比較処理と、を実行する１つの命令である。前記乗算処理は、前記第１レジスタに格納された前記第１データ要素と、前記第３レジスタに格納された前記第１の値とを乗算して乗算値を計算する。比較処理は、前記乗算値と、前記第２レジスタに格納された前記第２データ要素とを比較する。
【００６６】
なお、以下の変形例の説明では、上記の実施形態と同じ構成要素については、同じ符号を付して説明を省略する場合がある。
【００６７】
（変形例１）
上記の実施形態では、境界値逆数１／Ａ０〜１／Ａ７は１以下の値になる場合があるため、表２の各行の大小関係の左辺（不等式の左辺）（（１／Ａ０×（Ｌ１−Ｌ７）），…、（１／Ａ７×（Ｌ１−Ｌ７）））は１以下の数値になる場合がある。例えば１／Ａ０〜１／Ａ７および（Ｌ１−Ｌ７）は８ビットで（Ｌ１−Ｌ７）は整数であるとすると、上記の左辺は１６ビットであるが、上記のように、上記の左辺の数値が１以下の数値になる場合は、上記の左辺の数値の小数点位置は、その数値のビット列の右端（下位ビット側）から８ビット目の位置に現れる。他方、表２の各行の大小関係の右辺（Ｌ５−Ｌ３）の数値は例えば整数であるため、上記の右辺の数値の小数点位置は、その数値のビット列の右端に現れる。上記の大小関係の成否判定の演算を行う際に固定小数点演算が行えるように、上記の右辺の数値の小数点位置を上記の左辺の数値の小数点位置に一致させてもよい。すなわち、上記の右辺の数値を左に所定のシフト量（例えば８ビット）シフトして、上記の大小関係の成否判定の演算を行ってもよい。なお、所定のシフト量は、第２データ要素ＶＤ２１〜ＶＤ２４のデータタイプに応じて固定値として設定される。
【００６８】
より詳細には、図９に示すように、ベクトル命令に、第２ベクトルレジスタＶＲｂの記憶領域ｍ２１〜ｍ２４内の第２データ要素ＶＤ２１〜ＶＤ２４を所定のシフト量（例えば８ビット）左にシフトするシフト処理Ｓ４（小数点シフト処理）を追加してもよい。そして、所定のシフト量シフトされた第２データ要素ＶＤ２１〜ＶＤ２４を、対応する比較器Ｋ１〜Ｋ４に入力する。以降の処理は、上記の実施形態と同様である。
【００６９】
【表４】
2020144479.tif 000006
【００７０】
表４は、本変形例のベクトル命令をプロセッサ１に実装する場合の「ニーモニック」、「データタイプ」、「Read/Write」及び「動作」の一例を示す。この変形例は、浮動小数点数には効果がないため、「データタイプ」には、浮動点小数点数は含まれない。
【００７１】
この構成によれば、第２データ要素ＶＤ２１〜ＶＤ２４の小数点位置を、乗算処理Ｓ１で計算された乗算値ＪＴ１〜ＪＴ４の小数点位置に合わせることができ、又は近づけることができる。したがって、比較処理Ｓ２での演算精度を向上できる。この結果、ＨＯＧ特徴量をより速く生成できる。
【００７２】
（変形例２）
変形例１では、所定のシフト量は、例えば、第２データ要素ＶＤ２１〜ＶＤ２４のデータタイプに応じて固定値で設定されるが、命令（ベクトル命令）において即値で指定可能であってもよい。換言すれば、命令は、所定のシフト量の値を入力可能な変数（即値）を有してもよい。
【００７３】
【表５】
2020144479.tif 000007
【００７４】
表５は、本変形例のベクトル命令をプロセッサ１に実装する場合の「ニーモニック」、「データタイプ」、「Read/Write」及び「動作」の一例を示す。表３の「ニーモニック」の欄の「Imm」は、即値（immediate value）である。この即値を、例えば境界値逆数の値に応じて値を入力することで、境界値逆数に応じた所定のシフト量を設定できる。この変形例は、浮動小数点数には効果がないため、「データタイプ」には、浮動点小数点数は含まれない。
【００７５】
この構成によれば、変数（即値）への入力値に応じて所定のシフト量を変更できる。境界値逆数ａ０〜ａ７に応じて、乗算処理Ｓ１で計算される乗算値ＪＴ１〜ＪＴ４の小数点位置は変化する。このため、境界値逆数ａ０〜ａ７に応じて、変数への入力値を変えて所定のシフト量を変えることで、境界値逆数ａ０〜ａ７が変わっても、比較処理Ｓ２での演算精度を向上できる。
【００７６】
（変形例３）
上記の実施形態では、第３ベクトルレジスタＶＲｃの記憶領域ｍ３３，ｍ３４に格納された境界値逆数ａ０及び傾き階級ｂ０の組が、順に次の組（ａ１，ｂ１）から最後の組（ａ７，ｂ７）まで入れ替えられる。これにより、記憶領域ｍ３３，ｍ３４に、処理Ｓ１，Ｓ３で用いる境界値逆数及び傾き階級が供給される。これに対し、本変形例では、図１０Ａに示すように、第３ベクトルレジスタＶＲｃに予め複数の組（例えば組（ａ０，ｂ０）及び組（ａ１，ｂ１））を格納する。そして、図１０Ｂに示すように、その複数の組を一方向Ｙ１に一組分ずつシフトすることで、記憶領域ｍ３３，ｍ３４に、処理Ｓ１，Ｓ３で用いる境界値逆数及び傾き階級を供給する。
【００７７】
図１０Ａでは、複数の組として、組（ａ０，ｂ０）及び組（ａ１，ｂ１）が、第３ベクトルレジスタＶＲｃに一列に並べて格納されている。組（ａ０，ｂ０）は記憶領域ｍ３３，ｍ３４に格納され、組（ａ１，ｂ１）は、記憶領域ｍ３３，ｍ３４の隣の記憶領域ｍ３１，ｍ３２に格納されている。
【００７８】
本変形例のベクトル命令は、上記の実施形態と同様に、乗算処理Ｓ１で用いる境界値逆数ａ０及び置換処理Ｓ３で用いる傾き階級ｂ０として、第３ベクトルレジスタＶＲｃの記憶領域ｍ３３，ｍ３４（所定領域）に格納された組の境界値逆数及び傾き階級を読み出する。
【００７９】
本変形例のベクトル命令は、一連の処理Ｓ１〜Ｓ３を実行した後、第３ベクトルレジスタＶＲｃに格納された上記の複数の組を一方向Ｙ１（第１シフト方向）に一組分シフトするシフト処理を更に実行する（図１０Ｂ）。なお、一方向Ｙ１は、記憶領域ｍ３１から記憶領域ｍ３４に向かう方向、換言すれば、本変形例では、上位ビット側から下位ビット側に向かう方向である。これにより、第３ベクトルレジスタＶＲｃの記憶領域ｍ３３，ｍ３４（所定領域）の隣の記憶領域ｍ３１，ｍ３２（隣の領域）に格納された組（ａ１，ｂ１）が、記憶領域ｍ３３，ｍ３４（所定領域）に移動される。これにより、次の一連の処理Ｓ１〜Ｓ３で用いる境界値逆数ａ１及び傾き階級ｂ１が、記憶領域ｍ３３，ｍ３４に格納（供給）される。なお、組（ａ０，ｂ０）及び組（ａ１，ｂ１）の第３ベクトルレジスタＶＲｃの中での並びを逆にして、記憶領域ｍ３１，ｍ３２から組（ａ０，ｂ０）を読み出し、一連の処理Ｓ１〜Ｓ３を実行した後に記憶領域ｍ３３，ｍ３４内の組（ａ１，ｂ１）を一方向Ｙとは逆方向に一組分シフトして記憶領域ｍ３１，ｍ３２に移動させてもよい。
【００８０】
なお、上記のシフト処理で、組（ａ０，ｂ０）は第３ベクトルレジスタＶＲｃの記憶領域から追い出されて消去される。また、記憶領域ｍ３１，ｍ３２には、シフト処理後に例えば０データが格納されてゼロ初期化される。なお、この初期化は、ゼロ以外の値（例えば１）で行われてもよい。
【００８１】
表６は、本変形例のベクトル命令をプロセッサ１に実装する場合の「ニーモニック」、「データタイプ」、「Read/Write」及び「動作」の一例を示す。
【００８２】
【表６】
2020144479.tif 000008
【００８３】
表６の「動作」の欄において、「VRc[111:0]←VRc[127:16],VRc[127:112]←0」等の部分がシフト処理に対応する。
【００８４】
以上、本変形例によれば、第３ベクトルレジスタＶＲｃに複数の組（境界値逆数及び傾き階級の組）を格納し、上記の複数の組をシフトすることで、上記の複数の組を１つずつ順番に第３ベクトルレジスタＶＲｃの記憶領域ｍ３３，ｍ３４に移動させることができる。これにより、第３ベクトルレジスタＶＲｃで、一連の処理Ｓ１〜Ｓ３で用いる組（境界値逆数及び傾き階級の組）の入れ替えを低減でき、一連の処理Ｓ１〜Ｓ３の処理速度を向上できる。なお、第３ベクトルレジスタＶＲｃに、境界値逆数及び傾き階級の組の全て（すなわち組（ａ０，ｂ０）から組（ａ７，ｂ７）までの全ての組）を格納すれば、一連の処理Ｓ１〜Ｓ３で用いる組の入れ替えを不要にできる。
【００８５】
（変形例４）
本変形例は、図１１Ａに示すように、変形例３において、第５ベクトルレジスタＶＲｃ+1（第５レジスタ）を更に備える。第５ベクトルレジスタＶＲｃ＋１は、第３ベクトルレジスタＶＲｃと同様に、複数（例えば４つ）の記憶領域ｍ５１〜ｍ５４を有する。第５ベクトルレジスタＶＲｃ＋１のレジスタ番号ｃ＋１は、第３ベクトルレジスタＶＲｃのレジスタ番号ｃの連番である。なお、本変形例では、第５ベクトルレジスタＶＲｃ＋１のレジスタ番号ｃ＋１は、第３ベクトルレジスタＶＲｃのレジスタ番号ｃの連番であるが、連番に限定されない。例えば、第５ベクトルレジスタをＶＲｅと表現し、レジスタ番号をｅとしてもよい。なお、レジスタ番号とは、処理で用いるレジスタを指定するためにレジスタに設定された識別番号である。
【００８６】
図１１Ａに示すように、第３ベクトルレジスタＶＲｃの記憶領域ｍ３１〜ｍ３４には、複数（例えば２つ）の組（組（ａ０，ｂ０）及び組み（ａ１，ｂ１））が、下位ビット側から順に一列に並んで格納されている。第５ベクトルレジスタＶＲｃ＋１の記憶領域ｍ５１〜ｍ５４には、複数（例えば２つ）の組（組（ａ２，ｂ２）及び組み（ａ３，ｂ３））が、下位ビット側から順に一列に並んで格納されている。すなわち、複数の組（組（ａ０，ｂ０）から組（ａ７，ｂ７）までの全ての組）のうち、連続する４つの組（例えば組（ａ０，ｂ０）から組（ａ３，ｂ３）までの組）が、第３及び第５ベクトルレジスタＶＲｃ，ＶＲｃ＋１に格納されている。なお、データａ０，ｂ０，ａ１，ｂ１はそれぞれ、第３ベクトルレジスタＶＲｃの記憶領域ｍ３４〜ｍ３１に格納されている。データａ２，ｂ２，ａ３，ｂ３はそれぞれ、第５ベクトルレジスタＶＲｃ＋１の記憶領域ｍ５４〜ｍ５１に格納されている。
【００８７】
本変形例のシフト処理は、変形例３のシフト処理において、下記の第１処理及び第２処理を含む。
【００８８】
第１処理は、図１１Ｂに示すように、第５ベクトルレジスタＶＲｃ＋１に格納された複数の組（例えば組（ａ２，ｂ２）及び組（ａ３，ｂ３））を一方向Ｙ２（第２シフト方向）に一組分シフトする。一方向Ｙ２は、記憶領域ｍ５１から記憶領域ｍ５４に向かう方向、換言すれば、本変形例では、第５ベクトルレジスタＶＲｃ＋１の上位ビット側から下位ビット側に向かう方向である。第１処理で空になった記憶領域ｍ５１，ｍ５２は、０データが格納されてゼロ初期化される（図１１Ｂ参照）。なお、この初期化は、ゼロ以外の値（例えば１）が格納されることで行われてもよい。
【００８９】
第２処理は、図１１Ｂに示すように、第５ベクトルレジスタＶＲｃ＋１内の組（ａ２，ｂ２）を、第３ベクトルレジスタＶＲｃにおける組（ａ１，ｂ１）の後隣の記憶領域ｍ３１，ｍ３２に移動させる。後隣とは、一方向Ｙ１とは反対方向の隣である。なお、組（ａ２，ｂ２）は、第５ベクトルレジスタＶＲｃ＋１において、一列に並んで格納された複数の組（組（ａ２，ｂ２）及び組み（ａ３，ｂ３））のうち、一方向Ｙ２の一端に位置する組である。また、組（ａ１，ｂ１）は、第３ベクトルレジスタＶＲｃにおいて、一列に並んだ複数の組（組（ａ０，ｂ０）及び組み（ａ１，ｂ１））における一方向Ｙ１とは反対方向の一端に位置する組である。
【００９０】
本変形例では、上記のシフト処理で、第３ベクトルレジスタＶＲｃ内の複数の組（組（ａ０，ｂ０）及び組み（ａ１，ｂ１））が一方向Ｙ１に一組分シフトされる。このシフトに併行して又はこのシフトの後に、上記のシフト処理で、更に、第５ベクトルレジスタＶＲｃ＋１内の複数の組（組（ａ２，ｂ２）及び組み（ａ３，ｂ３））も一方向Ｙ２に一組分シフトされる。そして、上記のシフト処理で、第５ベクトルレジスタＶＲｃ＋１における一方向Ｙ２の一端の組（組（ａ２，ｂ２））が、第３ベクトルレジスタＶＲｃの複数の組の後隣に補充される。これにより、複数の組（例えば組（ａ０，ｂ０）から組（ａ３，ｂ３）までの４つの組）が２つのベクトルレジスタＶＲｃ，ＶＲｃ＋１に分かれて格納されても、それら複数の組を１つのベクトルレジスタに格納されているように処理できる。
【００９１】
本変形例のベクトル命令のニーモニックは、表７に示すように表される。
【００９２】
【表７】
2020144479.tif 000009
【００９３】
なお、第３ベクトルレジスタＶＲｃに格納された組（例えば組（ａ０，ｂ０）及び組（ａ１，ｂ１））が、特許請求の範囲に記載された第１の組に対応する。また、第５ベクトルレジスタＶＲｃ＋１に格納された組（例えば組（ａ２，ｂ２）及び組（ａ３，ｂ３））が、特許請求の範囲に記載された第２の組に対応する。
【００９４】
（変形例５）
変形例３では、第３ベクトルレジスタＶＲｃ内の複数の組（例えば組（ａ０，ｂ０）及び組（ａ１，ｂ１））は、１組ずつ記憶領域ｍ３３，ｍ３４にシフトされることで第３ベクトルレジスタＶＲｃから読み出される。ただし、第３ベクトルレジスタＶＲｃ内の複数の組を上記のようにシフトさせずに、ベクトル命令で、第３ベクトルレジスタＶＲｃにおいて、読み出す組が格納された記憶領域を指定してもよい。そして、指定した記憶領域から境界値逆数（第１の値）及び傾き階級（第２の値）を読み出してもよい。
【００９５】
より詳細には、第３ベクトルレジスタＶＲｃ内の上記の複数の組（例えば組（ａ０，ｂ０）及び組（ａ１，ｂ１）は、第３ベクトルレジスタＶＲｃにおいて互いに異なる記憶領域に格納されている。組（ａ０，ｂ０）は、記憶領域ｍ３３，ｍ３４に格納され、組（ａ１，ｂ１）は、記憶領域ｍ３１，ｍ３２に格納されている。
【００９６】
本変形例のベクトル命令は、複数（例えば２つ）のニーモニック（命令ニーモニック）を有する。複数のニーモニックは、乗算処理Ｓ１で用いる境界値逆数及び置換処理Ｓ３で用いる傾き階級として、上記の複数の組のうち、互いに異なる記憶領域に格納された組の境界値逆数及び傾き階級を読み出させる。
【００９７】
具体的には、図１２に示すように、上記の複数の組が２つの組（例えば組（ａ０，ｂ０）及び組（ａ１，ｂ１））である場合を想定する。この場合、本変形例のベクトル命令は、２つのニーモニックとして、pgrandh.[Ｄ]とpgrandl.[Ｄ]とを有する。pgrandh.[Ｄ]は、乗算処理Ｓ１で用いる境界値逆数、及び置換処理Ｓ３で用いる傾き階級として、上記の２つの組のうちの上位ビット側の組（組（ａ１，ｂ１））が格納された記憶領域ｍ３１，ｍ３２から境界値逆数ａ１及び傾き階級ｂ１を読み出す。pgrandl.[Ｄ]は、２つの組（組（ａ０，ｂ０）及び組（ａ１，ｂ１））のうち下位ビット側の組（組（ａ０，ｂ０））が格納された記憶領域ｍ３３，ｍ３４から境界値逆数ａ０及び傾き階級ｂ０を読み出す。
【００９８】
ベクトル命令をプロセッサ１に実装するとき、上位ビット側の組（組（ａ１，ｂ１））の境界値逆数ａ１及び傾き階級ｂ１を読み出す場合は、ニーモニックとしてpgrandh.[Ｄ]を用いる。他方、下位ビット側の組（組（ａ０，ｂ０））の境界値逆数ａ０及び傾き階級ｂ０を読み出す場合は、ニーモニックとしてpgrandl.[Ｄ]を用いる。
【００９９】
本変形例によれば、複数のニーモニック（例えばpgrandh.[Ｄ]及びpgrandl.[Ｄ]）のうちのどのニーモニックを用いるかによって、第３ベクトルレジスタＶＲｃにおいて、複数の組（例えば組（ａ０，ｂ０）及び組（ａ１，ｂ１））のうちの互いに異なる記憶領域に格納された組の境界値逆数及び傾き階級を読み出すことができる。すなわち、第３ベクトルレジスタＶＲｃにおいて複数の組を変形例３，４のようにシフトせずに、異なる記憶領域に格納された組（例えば組（ａ０，ｂ０）及び組（ａ１，ｂ１））の境界値逆数及び傾き階級を読み出すことができる。この結果、ＨＯＧ特徴量を生成する処理速度を向上できる。
【０１００】
なお、第３ベクトルレジスタＶＲｃに格納された複数の組のうちのどの組を用いるかを指定するために、ニーモニックはpgrad.[D]のままにして、即値「Imm」をニーモニックに加えて、即値で指定してもよい。この場合は、例えば、第３ベクトルレジスタＶＲｃに格納された複数（例えば２つ）の組を下位ビットから順に０、１に対応させ、即値で０が指定されると下位側の組を読み出し、即値で１が指定されると上位側の組を読み出してもよい。
【０１０１】
（変形例６）
上記の実施形態では、第１データ要素ＶＤ１１〜ＶＤ１４及び第２データ要素ＶＤ２１〜ＶＤ２４（すなわち入力画像のデータ）の各々のビット幅は、第３データ要素ＶＤ３１〜ＶＤ３４（すなわちＨＯＧ特徴量）のビット幅と、互いに同じであるが、互いに異なってもよい。
【０１０２】
図１３に示すように、第１データ要素ＶＤ１１〜ＶＤ１４及び第２データ要素ＶＤ２１〜ＶＤ２４の各々のビット幅は、第３データ要素ＶＤ３１〜ＶＤ３８のビット幅よりも大きくてもよい。図１３の例では、第１データ要素ＶＤ１１〜ＶＤ１４及び第２データ要素ＶＤ２１〜ＶＤ２４のビット幅は１６ビット幅（例えばデータタイプがu16の場合）であり、第３データ要素ＶＤ３１〜ＶＤ３８のビット幅は８ビット幅である。なお、境界値逆数ａ０は、１６ビットであり、傾き階級ｂ０は８ビットである。第１から第４ベクトルレジスタＶＲａ〜ＶＲｄは、１２８ビット幅である。なお、傾き階級ｂ０を格納する記憶領域のビット幅を境界値逆数ａ０と合わせて１６ビットとしてもよく、その場合、傾き階級ｂ０の有効データはその１６ビットのうち８ビットとなる。
【０１０３】
図１３の例では、第１ベクトルレジスタＶＲａには、８個の第１データ要素ＶＤ１１〜ＶＤ１８が格納される。第２ベクトルレジスタＶＲｂにも、８個の第２データ要素ＶＤ２１〜ＶＤ２８が格納される。第３ベクトルレジスタＶＲｃには、境界値逆数ａ０及び傾き階級ｂ０の２個のデータが格納される。第４ベクトルレジスタＶＲｄにも、８個の第３データ要素ＶＤ３１〜ＶＤ３８が格納される。第３データ要素ＶＤ３１〜ＶＤ３８は、例えば、第４ベクトルレジスタＶＲｄの下位側半分の６４ビット幅の記憶領域に格納される。この場合、第４ベクトルレジスタＶＲｃの上側半分の６４ビットの記憶領域は、使用されず、空きになる。境界値逆数ａ０及び傾き階級ｂ０は、例えば、第３ベクトルレジスタＶＲｃの下位側の２４ビット幅の記憶領域に格納される。第３ベクトルレジスタＶＲｃの残りの１０４ビット幅の記憶領域には、使用されず、空きになる。
【０１０４】
なお、この場合のベクトル命令をプロセッサ１に実装する場合の「ニーモニック」、「データタイプ」、「Read/Write」及び「動作」の一例を示すと、表８になる。
【０１０５】
【表８】
2020144479.tif 000010
【０１０６】
表８の「ニーモニック」の欄のpgrad8.[Ｄ]の「8」は、VRdに格納されるデータ要素（第３データ要素ＶＤ３１〜ＶＤ３８）のビット幅を示す。
【０１０７】
なお、図１４に示すように、８個の第３データ要素ＶＤ３１〜ＶＤ３８は、第４ベクトルレジスタＶＲｄの上位側半分の６４ビット幅の記憶領域に格納されてもよい。この場合は、第４ベクトルレジスタＶＲｄの下側半分の６４ビットの記憶領域は、使用されず、空きになる。
【０１０８】
なお、図１４の場合のニーモニックをpgrad8h.[Ｄ]と表記し、図１３の場合のニーモニックをpgrad8l.[Ｄ]と表記してもよい。これにより、２つのニーモニック（pgrad8h.[Ｄ]、pgrad8l.[Ｄ]）のうちのどちらのニーモニックを用いるかによって、第３データ要素ＶＤ３１〜ＶＤ３８を、第４ベクトルレジスタＶＲｄの上位側半分の記憶領域に格納するか、下位側半分の記憶領域に格納するかを選択できる。
【０１０９】
また、図１５に示すように、第１データ要素ＶＤ１１〜ＶＤ１４及び第２データ要素ＶＤ２１〜ＶＤ２４の各々のビット幅は、第３データ要素ＶＤ３１〜ＶＤ３８のビット幅よりも小さくもよい。図１５の例では、第１データ要素ＶＤ１１〜ＶＤ１４及び第２データ要素ＶＤ２１〜ＶＤ２４の各々のビット幅は８ビット幅（例えばデータタイプが8uの場合）であり、第３データ要素のビット幅は１６ビット幅である。なお、第１から第４ベクトルレジスタＶＲａ〜ＶＲｄは、１２８ビット幅である。
【０１１０】
図１５の例では、第１ベクトルレジスタＶＲａには、８個の第１データ要素ＶＤ１１〜ＶＤ１８が格納される。第２ベクトルレジスタＶＲｂにも、８個の第２データ要素ＶＤ２１〜ＶＤ２８が格納される。第３ベクトルレジスタＶＲｃには、境界値逆数ａ０及び傾き階級ｂ０の２つのデータが格納される。第４ベクトルレジスタＶＲｄにも、８個の第３データ要素ＶＤ３１〜ＶＤ３８が格納される。第１データ要素ＶＤ１１〜ＶＤ１８は、例えば、第１ベクトルレジスタＶＲａの下位側半分の６４ビット幅の記憶領域に格納され、第１ベクトルレジスタＶＲａの上側半分の６４ビットの記憶領域は、使用されず、空きになる。同様に、第２データ要素ＶＤ２１〜ＶＤ２８も、第２ベクトルレジスタＶＲｂの下位側半分の６４ビット幅の記憶領域に格納され、第２ベクトルレジスタＶＲｂの上側半分の６４ビットの記憶領域は、使用されず、空きになる。境界値逆数ａ０及び傾き階級ｂ０は、例えば、第３ベクトルレジスタＶＲｃの下位側の２４ビット幅の記憶領域に格納される。第３ベクトルレジスタＶＲｃの残りの１０４ビット幅の記憶領域は、使用されず、空きになる。なお、境界値逆数ａ０を格納する記憶領域のビット幅を傾き階級ｂ０と合わせて１６ビットとしてもよく、その場合、境界値逆数ａ０の有効データはその１６ビットのうち８ビットとなる。
【０１１１】
なお、この場合のベクトル命令をプロセッサ１に実装する場合の「ニーモニック」、「データタイプ」、「Read/Write」及び「動作」の一例を示すと、表９になる。
【０１１２】
【表９】
2020144479.tif 000011
【０１１３】
表９の「ニーモニック」の欄のpgrad16.[Ｄ]の「16」は、VRdに格納されるデータ要素（第３データ要素ＶＤ３１〜ＶＤ３８）のビット幅を示す。
【０１１４】
なお、図１６に示すように、８個の第１データ要素ＶＤ１１〜ＶＤ１８は、第１ベクトルレジスタＶＲａの上位側半分の６４ビット幅の記憶領域に格納されてもよい。この場合は、第１ベクトルレジスタＶＲａの下側半分の６４ビットの記憶領域は、使用されず、空きになる。また、８個の第２データ要素ＶＤ２１〜ＶＤ２８も、第２ベクトルレジスタＶＲｂの上位側半分の６４ビット幅の記憶領域に格納されてもよい。この場合は、第２ベクトルレジスタＶＲｂの下側半分の６４ビットの記憶領域は、使用されず、空きになる。
【０１１５】
なお、図１６の場合のニーモニックをpgrad16h.[Ｄ]と表記し、図１５の場合のニーモニックをpgrad16l.[Ｄ]と表記してもよい。これにより、２つのニーモニック（pgrad16h.[Ｄ]、pgrad16l.[Ｄ]）のうちのどちらのニーモニックを用いるかによって、第１データ要素ＶＤ１１〜ＶＤ１８及び第２データ要素ＶＤ２１〜ＶＤ２８をそれぞれ、第１ベクトルレジスタＶＲａ及び第２ベクトルレジスタＶＲｂの上位側半分の記憶領域から読み出すか、下位側半分の記憶領域から読み出すかを選択できる。
【０１１６】
（変形例７）
上記の実施形態では、ベクトル命令のニーモニックは、表１０のように、第１〜第４ベクトルレジスタＶＲａ〜ＶＲｄを有する。
【０１１７】
【表１０】
2020144479.tif 000012
【０１１８】
このため、ベクトル命令の命令コードＱ１では、図１７Ａに示すように、第１〜第４ベクトルレジスタＶＲａ〜ＶＲｄのレジスタ番号ａ〜ｄを指定する必要がある。なお、レジスタ番号とは、処理で用いるレジスタを指定するためにレジスタに設定された識別番号である。命令コードＱ１では、命令を定義するオペコードと、レジスタを指定するレジスタ番号とを記載する必要がある。命令コードＱ１の命令長は、一定（例えば３２ビット）であるため、４つのベクトルレジスタＶＲａ〜ＶＲｄのレジスタ番号ａ〜ｄを指定すると、レジスタ番号指定フィールドＲＦ１のビット長が長くなり、オペコードのビット長が短くなる。レジスタ番号指定フィールドＲＦ１とは、レジスタ番号を指定するフィールドである。この結果、命令コードＱ１で、より多くの命令を定義できなくなる。図１７Ａの例では、オペコードは１２ビットであり、各レジスタ番号ａ〜ｄは５ビットである。なお、この変形例では、一例として、命令コードＱ１の命令長が３２ビットであり、３２個のベクトルレジスタを有するプロセッサでの実装を想定する。
【０１１９】
本変形例では、第１ベクトルレジスタＶＲａ、第２ベクトルレジスタＶＲｂ、第３ベクトルレジスタＶＲｃ及び第４ベクトルレジスタＶＲｄのうち、少なくとも１つのベクトルレジスタのレジスタ番号を、他のベクトルレジスタのレジスタ番号に対する連番とする。他のレジスタ番号の連番となったレジスタ番号は、他のレジスタ番号が決まると、自動的に、他のレジスタ番号の次のレジスタ番号又は１つ前のレジスタ番号に決まる。このため、他のレジスタ番号の連番となったレジスタ番号は、命令コードに記載する必要がなくなる。この結果、命令コードにおけるオペコードのビット長をより長くでき、より多くの命令を定義できる。
【０１２０】
例えば、第２ベクトルレジスタＶＲｂのレジスタ番号ｂを、第１ベクトルレジスタＶＲａのレジスタ番号ａの連番である番号ａ＋１としてもよい。すなわち、レジスタ番号ｂ＝ａ＋１としてもよい。この場合、第１ベクトルレジスタＶＲａのレジスタ番号ａが指定されると、第２ベクトルレジスタＶＲｂのレジスタ番号ａ＋１は、レジスタ番号ａの次のレジスタ番号に自動的に決まる。この場合のニーモニックは、表１１になる。
【０１２１】
【表１１】
2020144479.tif 000013
【０１２２】
また、この場合の命令コードＱ２は、図１７Ｂのように、第２ベクトルレジスタＶＲｂのレジスタ番号ａ＋１以外の３つのベクトルレジスタＶＲａ，ＶＲｃ，ＶＲｄのレジスタ番号ａ，ｃ，ｄが記載される。この場合、命令コードＱ２において、第２ベクトルレジスタＶＲｂのレジスタ番号ａ＋１が記載されない分、レジスタ番号指定フィールドＲＦ２のビット長が短くなり、その分、オペコードが長くなる。
【０１２３】
また、第２ベクトルレジスタＶＲｂのレジスタ番号ｂを、第４ベクトルレジスタＶＲｄのレジスタ番号ｄの連番である番号ｄ＋１としてもよい。すなわち、レジスタ番号ｂ＝ｄ＋１としてもよい。この場合のニーモニックは、表１２になる。また、この場合の命令コードＱ３は、図１７Ｂのようになる。なお、ベクトルレジスタＶＲａ〜ＶＲｄのうち１つのベクトルレジスタのレジスタ番号を、他のどのベクトルレジスタのレジスタ番号の連番とするかは様々な組み合わせが考えられ、設計等に応じて種々の変更が可能である。
【０１２４】
【表１２】
2020144479.tif 000014
【０１２５】
（変形例８）
変形例７では、例えば第２ベクトルレジスタＶＲｂのレジスタ番号ｂを他のベクトルレジスタのレジスタ番号の連番とすることで、レジスタ番号指定フィールドＦＲ２のビット長を減らす。ただし、レジスタ番号指定フィールドＦＲ２のビット長の減らし方は、上記のように限定されない。例えば、４つのベクトルレジスタＶＲａ〜ＶＲｄのうちの少なくとも１つのベクトルレジスタのレジスタ番号を固定する（すなわち固定値とする）ことで、レジスタ番号指定フィールドのビット長を減らしてもよい。レジスタ番号を固定すると、命令コードで、レジスタ番号を指定する必要がなくなる。これにより、レジスタ番号指定フィールドのビット長が短くなり、その分、オペコードが長くなる。
【０１２６】
例えば、第３ベクトルレジスタＶＲｃのレジスタ番号ｃを番号０（ゼロ）に固定してもよい。すなわち、レジスタ番号ｃ＝０としてもよい。この場合のベクトル命令のニーモニックは、表１３の上段のように、第３ベクトルレジスタＶＲｃを記載してもよいし、表１３の下段のように、第３ベクトルレジスタＶＲｃを記載しなくてもよい。
【０１２７】
【表１３】
2020144479.tif 000015
【０１２８】
また、この場合の命令コードＱ３は、図１８のように、第３ベクトルレジスタＶＲｃのレジスタ番号０（ゼロ）以外の３つのベクトルレジスタＶＲａ，ＶＲｂ，ＶＲｄのレジスタ番号ａ，ｂ，ｄが記載される。この場合、命令コードＱ４において、第３ベクトルレジスタＶＲｃのレジスタ番号０（ゼロ）が記載されない分、レジスタ番号指定フィールドＲＦ３のビット長が短くなり、その分、オペコードが長くなる。
【０１２９】
（変形例９）
上記の実施形態では、境界値逆数ａ０及び傾き階級ｂ０の組が格納されるレジスタは、ベクトルレジスタ（第３ベクトルレジスタＶＲｃ）であるが、汎用レジスタに格納されてもよい。この場合は、プロセッサ１は、図１９に示すように、境界値逆数ａ０を格納する汎用レジスタＲｃと、傾き階級ｂ０を格納する汎用レジスタＲｃ＋１とを備えている。図１９の例では、命令コードでの汎用レジスタ番号指定フィールドを減らすため、２つの汎用レジスタＲｃ，Ｒｃ＋１のレジスタ番号ｃ，ｃ＋１は、連番に設定されている。この場合のベクトル命令のニーモニックは、表１４のようになる。
【０１３０】
【表１４】
2020144479.tif 000016
【０１３１】
（その他の変形例）
上記の実施形態では、乗算処理Ｓ１、比較処理Ｓ２及び置換処理Ｓ３を１つのベクトル命令で実行するが、３つの処理Ｓ１〜Ｓ３のうち、乗算処理Ｓ１及び比較処理Ｓ２を１つのベクトル命令で実行してもよい。この場合、置換処理Ｓ３は、別のベクトル命令で実行される。
【０１３２】
上記の実施形態では、ＨＯＧ特徴量は、画像に対して生成されたが、画像以外の物理情報（例えば音（例えば音声）に対して生成されてもよい。
【０１３３】
実施形態１では、複数の注目画素での傾き階級を並列処理で計算するが、１つの注目画素ずつ傾き階級を計算してもよい。
【０１３４】
（まとめ）
本開示の第１の態様に係るプロセッサ（１）では、第１レジスタ（ＶＲａ）に第１データ要素（ＶＤ１１〜ＤＶ１４）が格納され、第２レジスタ（ＶＲｂ）に第２データ要素（ＶＤ２１〜ＤＶ２４）が格納され、第３レジスタ（ＶＲｃ）に第１の値（ａ０）が格納される。プロセッサ（１）は、乗算処理（Ｓ１）と比較処理（Ｓ２）とを、１つの命令で実行する。乗算処理（Ｓ１）は、第１データ要素（ＶＤ１１〜ＤＶ１４）と第１の値（ａ０）とを乗算して乗算値（ＪＴ１〜ＪＴ４）を計算する。比較処理（Ｓ２）は、乗算値（ＪＴ１〜ＪＴ４）と第２データ要素（ＶＤ２１〜ＤＶ２４）とを比較する。
【０１３５】
この構成によれば、ＨＯＧ特徴量を生成するときの乗算処理（Ｓ１）及び比較処理（Ｓ２）を１つの命令で実行できるため、ＨＯＧ特徴量をより速く生成できる。
【０１３６】
本開示の第２の態様に係るプロセッサ（１）は、第１の態様において、第４レジスタ（ＶＲｄ）に第３データ要素（ＶＤ３１〜ＤＶ３４）が格納され、第３レジスタ（ＶＲｃ）に第２の値（ｂ０）が更に格納される。上記の１つの命令は、置換処理（Ｓ３）を更に実行させる。置換処理（Ｓ３）は、比較処理（Ｓ２）の比較結果（ＫＴ１〜ＫＴ４）に応じて、第４レジスタ（ＶＲｄ）に格納された第３データ要素（ＶＤ３１〜ＤＶ３４）を第２の値（ｂ０）に置き換える。
【０１３７】
この構成によれば、ＨＯＧ特徴量を生成するときの乗算処理（Ｓ１）、比較処理（Ｓ２）及び置換処理（Ｓ３）を１つの命令で実行できるため、ＨＯＧ特徴量をより速く生成できる。
【０１３８】
本開示の第３の態様に係るプロセッサ（１）は、第２の態様において、第３レジスタ（ＶＲｃ）に複数の組（例えば組（ａ０，ｂ０）及び組（ａ１，ｂ１））が格納される。複数の組はそれぞれ、第１の値（ａ０）及び第２の値（ｂ０）からなる。複数の組は、第３レジスタ（ＶＲｃ）において互いに異なる記憶領域に格納される。上記の１つの命令は、複数の命令ニーモニック（例えばpgrandh.[Ｄ]及びpgrandl.[Ｄ]）を有する。複数の命令ニーモニックは、複数の組のうち、互いに異なる記憶領域に格納された組の第１の値及び第２の値を読み出させる。
【０１３９】
この構成によれば、複数の命令ニーモニック（例えばpgrandh.[Ｄ]及びpgrandl.[Ｄ]）のうちのどの命令ニーモニックを用いるかによって、第３レジスタ（ＶＲｃ）において、互いに異なる記憶領域に格納された組（例えば組（ａ０，ｂ０）及び組（ａ１，ｂ１）の第１の値及び第２の値を読み出すことができる。すなわち、第３レジスタ（ＶＲｃ）において複数の組をシフトせずに、異なる記憶領域に格納された組の第１の値及び第２の値を読み出すことができる。
【０１４０】
本開示の第４の態様に係るプロセッサ（１）は、第２又は第３の態様において、第１データ要素（ＶＤ１１〜ＤＶ１４）及び第２データ要素（ＶＤ２１〜ＤＶ２４）の各々のビット幅は、第３データ要素（ＶＤ３１〜ＤＶ３４）のビット幅と異なる。
【０１４１】
この構成によれば、第１データ要素（ＶＤ１１〜ＤＶ１４）及び第２データ要素（ＶＤ２１〜ＤＶ２４）の各々のビット幅は、第３データ要素（ＶＤ３１〜ＤＶ３４）のビット幅に制限されないため、第１データ要素（ＶＤ１１〜ＤＶ１４）及び第２データ要素（ＶＤ２１〜ＤＶ２４）のビット幅の自由度を向上できる。
【０１４２】
本開示の第５の態様に係るプロセッサ（１）は、第２〜第４の態様の何れか１つの態様において、第１レジスタ（ＶＲａ）、第２レジスタ（ＶＲｂ）、第３レジスタ（ＶＲｃ）及び第４レジスタ（ＶＲｄ）を備える。第１レジスタ（ＶＲａ）、第２レジスタ（ＶＲｂ）、第３レジスタ（ＶＲｃ）及び第４レジスタ（ＶＲｄ）には、識別番号としてのレジスタ番号が設定されている。第１レジスタ（ＶＲａ）、第２レジスタ（ＶＲｂ）、第３レジスタ（ＶＲｃ）及び第４レジスタ（ＶＲｄ）のうち、少なくとも１つのレジスタ（例えばＶＲｂ）のレジスタ番号（例えばｃ＋１）は、他のレジスタ（例えばＶＲｃ）のレジスタ番号（例えばｃ）に対する連番である。
【０１４３】
この構成によれば、他のレジスタ番号（例えばｃ）の連番に設定されたレジスタ（例えばＶＲｂ）のレジスタ番号（例えばｃ＋１）は、命令コード（Ｑ２，Ｑ３）のレジスタ番号指定フィールド（ＲＦ２）から省略可能である。これにより、命令コード（Ｑ２，Ｑ３）において、レジスタ番号指定フィールド（ＲＦ２）のビット長を短くでき、その分、オペコードのビット長を長くできる。これにより、オペコードにおいて、より多くの命令を定義できる。
【０１４４】
本開示の第６の態様に係るプロセッサ（１）は、第２〜第５の態様の何れか１つの態様において、第１レジスタ（ＶＲａ）、第２レジスタ（ＶＲｂ）、第３レジスタ（ＶＲｃ）及び第４レジスタ（ＶＲｄ）を備える。第１レジスタ（ＶＲａ）、第２レジスタ（ＶＲｂ）、第３レジスタ（ＶＲｃ）及び第４レジスタ（ＶＲｄ）のうち、少なくとも１つのレジスタ（例えばＶＲｃ）のレジスタ番号（例えばｃ）は、固定されている。
【０１４５】
この構成によれば、レジスタ番号を固定にしたレジスタ（ＶＲｃ）のレジスタ番号（０（ゼロ））は、命令コード（Ｑ４）のレジスタ番号指定フィールド（ＲＦ３）から省略可能である。これにより、命令コード（Ｑ４）において、レジスタ番号指定フィールド（ＲＦ３）のビット長を短くでき、その分、オペコードのビット長を長くできる。これにより、オペコードにおいて、より多くの命令を定義できる。
【０１４６】
本開示の第７の態様に係るプロセッサ（１）は、第２〜第６の態様の何れか１つの態様において、第１レジスタ（ＶＲａ）には、第１データ要素（ＶＤ１１〜ＤＶ１４）が複数格納される。第２レジスタ（ＶＲｂ）には、第２データ要素（ＶＤ２１〜ＤＶ２４）が複数格納される。第４レジスタ（ＶＲｄ）には、第３データ要素（ＶＤ３１〜ＤＶ３４）が複数格納される。乗算処理（Ｓ１）は、複数の第１データ要素（ＶＤ１１〜ＤＶ１４）と、第１の値（ａ０）とを乗算して乗算値（ＪＴ１〜ＪＴ４）を複数生成する。複数の乗算値（ＪＴ１〜ＪＴ４）は、複数の第２データ要素（ＶＤ２１〜ＤＶ２４）と対応する。比較処理（Ｓ２）は、複数の第２データ要素（ＶＤ２１〜ＤＶ２４）を、複数の乗算値（ＪＴ１〜ＪＴ４）のうちの対応する乗算値（ＪＴ１〜ＪＴ４）と比較して比較結果（ＫＴ１〜ＫＴ４）を複数生成する。複数の比較結果（ＫＴ１〜ＫＴ４）は、複数の第３データ要素（ＶＤ３１〜ＤＶ３４）と対応する。置換処理（Ｓ３）は、第４レジスタ（ＶＲｄ）に格納された複数の第３データ要素（ＶＤ３１〜ＤＶ３４）を、複数の比較結果（ＫＴ１〜ＫＴ４）のうちの対応する比較結果（ＫＴ１〜ＫＴ４）に応じて、第２の値（ｂ０）に置換する。
【０１４７】
この構成によれば、複数の第１データ要素（ＶＲ１１〜ＶＲ１４）、複数の第２データ要素（ＶＲ２１〜ＶＲ２４）及び複数の第３データ要素（ＶＲ３１〜ＶＲ３４）を、対応するデータ要素毎に並列で処理できる。したがって、複数の第１データ要素（ＶＲ１１〜ＶＲ１４）での傾き階級を同時に計算できる。この結果、ＨＯＧ特徴量をより速く生成できる。
【０１４８】
本開示の第８の態様に係るプロセッサ（１）は、第７の態様において、第３レジスタ（ＶＲｃ）に複数の組（例えば組（ａ０，ｂ０）及び組（ａ１，ｂ１））が格納される。複数の組はそれぞれ、第１の値及び第２の値からなる。複数の組は、一列に配列する。上記の１つの命令は、乗算処理（Ｓ１）で用いる第１の値及び置換処理（Ｓ３）で用いる第２の値として、第３レジスタ（ＶＲｃ）の所定領域（ｍ３３，ｍ３４）に格納された組の第１の値（ａ０）及び第２の値（ｂ０）を読み出させる。上記の１つの命令は、所定領域（ｍ３３，ｍ３４）の隣の領域（ｍ３１，ｍ３２）に格納された組（組（ａ１，ｂ１））が所定領域（ｍ３３，ｍ３４）に移動するように、第３レジスタ（ＶＲｃ）に格納された上記の複数の組を一方向（Ｙ１）にシフトするシフト処理を更に実行させる。
【０１４９】
この構成によれば、第３レジスタ（ＶＲｃ）に複数の組（例えば組（ａ０，ｂ０）及び組（ａ１，ｂ１））を格納し、それら複数の組をシフトすることで、複数の組を１つずつ順番に第３レジスタ（ＶＲｃ）の所定領域（ｍ３３，ｍ３４）に移動させることができる。これにより、組の入れ替えが不要になり、ＨＯＧ特徴量を生成する処理速度を向上できる。
【０１５０】
本開示の第９の態様に係るプロセッサ（１）は、第８の態様において、上記の複数の組を複数の第１の組とし、一方向（Ｙ１）を第１シフト方向（Ｙ１）とする。第５レジスタ（ＶＲｃ＋１）に複数の第２の組（例えば組（ａ２，ｂ２）及び組（ａ３，ｂ３））が格納され、複数の第２の組はそれぞれ、第１の値及び第２の値からなる。複数の第２の組は、一列に配列する。上記のシフト処理は、複数の第２の組を第２シフト方向（Ｙ２）に一組分シフトする処理を含む。上記のシフト処理は、複数の第２の組のうち第２シフト方向（Ｙ２）の一端に位置する第２の組（例えば組（ａ２，ｂ２））を、第３レジスタ（ＶＲｃ）における、複数の第１の組における第１シフト方向（Ｙ１）とは反対方向の一端に位置する第１の組（例えば組（ａ１，ｂ１））の隣の領域（ｍ３１，ｍ３２）に移動させる処理を含む。
【０１５１】
この構成によれば、複数の組（例えば組（ａ０，ｂ０）から組（ａ３，ｂ３）までの４つの組）が２つのレジスタ（第３レジスタ（ＶＲｃ）及び第５レジスタ）に分かれて格納されても、複数の組を１つのレジスタに格納されているように処理できる。
【０１５２】
本開示の第１０の態様に係るプロセッサ（１）は、第１〜第９の態様の何れか１つの態様において、第１データ要素（ＶＤ１１〜ＤＶ１４）及び第２データ要素（ＶＤ２１〜ＤＶ２４）は、互いに相関するデータ要素である。
【０１５３】
この構成によれば、第１データ要素（ＶＤ１１〜ＤＶ１４）及び第２データ要素（ＶＤ２１〜ＤＶ２４）が互いに相関する場合のＨＯＧ特徴量を生成できる。
【０１５４】
本開示の第１１の態様に係るプロセッサ（１）は、第１〜第１０の態様の何れか１つの態様において、上記の１つの命令は、シフト処理（Ｓ４）を更に実行させる。シフト処理（Ｓ４）は、第２レジスタ（ＶＲｂ）に格納された第２データ要素（ＶＤ２１〜ＤＶ２４）を所定のシフト量シフトする。
【０１５５】
この構成によれば、第２データ要素（ＶＤ２１〜ＤＶ２４）の小数点位置を、乗算処理（Ｓ１）で計算された乗算値（ＪＴ１〜ＪＴ４）の小数点位置に合わせることができ、又は近づけることができる。したがって、比較処理（Ｓ２）での演算精度を向上できる。
【０１５６】
本開示の第１２の態様に係るプロセッサ（１）は、第１〜第１１の態様の何れか１つの態様において、上記の１つの命令は、所定のシフト量の値を入力可能な変数（Ｉｍｍ）を有する。
【０１５７】
この構成によれば、変数（Ｉｍｍ）への入力値に応じて所定のシフト量を変更できる。第１の値（ａ０〜ａ７）に応じて、乗算処理（Ｓ１）で計算される乗算値（ＪＴ１〜ＪＴ４）の小数点位置は変化する。このため、第１の値（ａ０〜ａ７）に応じて、変数（Ｉｍｍ）への入力値を変えて所定のシフト量を変えることで、第１の値（ａ０〜ａ７）が変わっても、比較処理（Ｓ２）での演算精度を向上できる。
【０１５８】
本開示の第１３の態様に係るプロセッサ（１）は、第１〜第１２の態様の何れか１つの態様において、第３レジスタ（ＶＲｃ）を備える。第３レジスタ（ＶＲｃ）は、汎用レジスタである。
【０１５９】
この構成によれば、第３レジスタ（ＶＲｃ）は汎用レジスタであるため、使用するベクトルレジスタの数を低減できる。これにより、プロセッサをより小型化できる。
【０１６０】
本開示の第１４の態様に係るプロセッサ（１）の制御方法では、第１レジスタ（ＶＲａ）に第１データ要素（ＶＤ１１〜ＤＶ１４）が格納され、第２レジスタ（ＶＲｂ）に第２データ要素（ＶＤ２１〜ＤＶ２４）が格納され、第３レジスタ（ＶＲｃ）に第１の値（ａ０）が格納される。このプロセッサ（１）の制御方法では、プロセッサ（１）は、乗算処理（Ｓ１）と比較処理（Ｓ２）と、を１つの命令で実行する。乗算処理（Ｓ１）は、第１データ要素（ＶＤ１１〜ＤＶ１４）と第１の値（ａ０）とを乗算して乗算値（ＪＴ１〜ＪＴ４）を計算する。比較処理（Ｓ２）は、乗算値（ＪＴ１〜ＪＴ４）と第２データ要素（ＶＤ２１〜ＤＶ２４）とを比較する。
【０１６１】
この構成によれば、ＨＯＧ特徴量を生成するときの乗算処理（Ｓ１）及び比較処理（Ｓ２）を１つの命令で実行できるため、ＨＯＧ特徴量をより速く生成できる。
【符号の説明】
【０１６２】
１  プロセッサ
２  処理部
ａ０〜ａ７  境界値逆数（第１の値）
ｂ０〜ｂ７  傾き階級（第２の値）
ＲＦ２，ＲＦ３  レジスタ番号指定フィールド
Ｉｍｍ  即値（変数）
ＪＴ１〜ＪＴ４  乗算値
ＫＴ１〜ＫＴ４  比較結果
ｍ３１，ｍ３２  記憶領域（隣の領域）
ｍ３３，ｍ３４  記憶領域（所定領域）
Ｑ１〜Ｑ４  命令コード
Ｓ１  乗算処理
Ｓ２  比較処理
Ｓ３  置換処理
ＶＤ１１〜ＶＤ１４  第１データ要素
ＶＤ２１〜ＶＤ２４  第２データ要素
ＶＤ３１〜ＶＤ３４  第３データ要素
ＶＲａ  第１ベクトルレジスタ（第１レジスタ）
ＶＲｂ  第２ベクトルレジスタ（第２レジスタ）
ＶＲｃ  第３ベクトルレジスタ（第３レジスタ）
ＶＲｄ  第４ベクトルレジスタ（第４レジスタ）
ＶＲｃ＋１  第５ベクトルレジスタ（第５レジスタ）
Ｙ１  一方向（第１シフト方向）
Ｙ２  一方向（第２シフト方向）
【図１】
2020144479.tif 000017
【図２】
2020144479.tif 000018
【図３】
2020144479.tif 000019
【図４】
2020144479.tif 000020
【図５】
2020144479.tif 000021
【図６】
2020144479.tif 000022
【図７】
2020144479.tif 000023
【図８】
2020144479.tif 000024
【図９】
2020144479.tif 000025
【図１０】
2020144479.tif 000026
【図１１】
2020144479.tif 000027
【図１２】
2020144479.tif 000028
【図１３】
2020144479.tif 000029
【図１４】
2020144479.tif 000030
【図１５】
2020144479.tif 000031
【図１６】
2020144479.tif 000032
【図１７】
2020144479.tif 000033
【図１８】
2020144479.tif 000034
【図１９】
2020144479.tif 000035