(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-06-15
(45)【発行日】2023-06-23
(54)【発明の名称】プロセッサ及びプロセッサの制御方法
(51)【国際特許分類】
G06F 9/30 20180101AFI20230616BHJP
G06F 9/302 20180101ALI20230616BHJP
G06F 9/315 20180101ALI20230616BHJP
G06F 9/38 20180101ALI20230616BHJP
【FI】
G06F9/30 350A
G06F9/302 A
G06F9/302 C
G06F9/315 S
G06F9/38 370A
(21)【出願番号】P 2019039006
(22)【出願日】2019-03-04
【審査請求日】2021-09-06
(73)【特許権者】
【識別番号】314012076
【氏名又は名称】パナソニックIPマネジメント株式会社
(74)【代理人】
【識別番号】110002527
【氏名又は名称】弁理士法人北斗特許事務所
(72)【発明者】
【氏名】林 宙輝
【審査官】坂東 博司
(56)【参考文献】
【文献】特開2002-132497(JP,A)
【文献】特開2015-191568(JP,A)
【文献】特開平03-105615(JP,A)
【文献】特開平04-076772(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/30
G06F 9/302
G06F 9/315
G06F 9/38
(57)【特許請求の範囲】
【請求項1】
第1レジスタに第1データ要素が格納され、
第2レジスタに第2データ要素が格納され、
第3レジスタに第1の値が格納され、
第4レジスタに第3データ要素が格納され、
前記第3レジスタに第2の値が更に格納され、
前記第1データ要素と前記第1の値とを乗算して乗算値を計算する乗算処理と、
前記乗算値と前記第2データ要素とを比較する比較処理と、を1つの命令で実行
し、
前記1つの命令は、
前記比較処理の比較結果に応じて、前記第4レジスタに格納された前記第3データ要素を前記第2の値に置き換える置換処理を更に実行させる、
プロセッサ。
【請求項2】
前記第3レジスタに複数の組が格納され、
前記複数の組はそれぞれ、前記第1の値及び前記第2の値からなり、
前記複数の組は、前記第3レジスタにおいて互いに異なる記憶領域に格納され、
前記1つの命令は、複数の命令ニーモニックを有し、
前記複数の命令ニーモニックは、前記複数の組のうち、互いに異なる前記記憶領域に格納された組の前記第1の値及び前記第2の値を読み出させる、
請求項
1に記載のプロセッサ。
【請求項3】
前記第1データ要素及び前記第2データ要素の各々のビット幅は、前記第3データ要素のビット幅と異なる、
請求項
1又は2に記載のプロセッサ。
【請求項4】
前記第1レジスタ、前記第2レジスタ、前記第3レジスタ及び前記第4レジスタを備え、
前記第1レジスタ、前記第2レジスタ、前記第3レジスタ及び前記第4レジスタには、識別番号としてのレジスタ番号が設定され、
前記第1レジスタ、前記第2レジスタ、前記第3レジスタ及び前記第4レジスタのうち、少なくとも1つのレジスタの前記レジスタ番号は、他のレジスタの前記レジスタ番号に対する連番である、
請求項
1~3の何れか1項に記載のプロセッサ。
【請求項5】
前記第1レジスタ、前記第2レジスタ、前記第3レジスタ及び前記第4レジスタを備え、
前記第1レジスタ、前記第2レジスタ、前記第3レジスタ及び前記第4レジスタのうち、少なくとも1つのレジスタのレジスタ番号は、固定されている、
請求項
1~4の何れか1項に記載のプロセッサ。
【請求項6】
前記第1レジスタには、前記第1データ要素が複数格納され、
前記第2レジスタには、前記第2データ要素が複数格納され、
前記第4レジスタには、前記第3データ要素が複数格納され、
前記乗算処理は、
前記複数の第1データ要素と、前記第1の値とを乗算して前記乗算値を複数生成し、前記複数の乗算値は、前記複数の第2データ要素と対応し、
前記比較処理は、
前記複数の第2データ要素を、前記複数の乗算値のうちの対応する乗算値と比較して比較結果を複数生成し、前記複数の比較結果は、前記複数の第3データ要素と対応し、
前記置換処理は、
前記第4レジスタに格納された前記複数の第3データ要素を、前記複数の比較結果のうちの対応する比較結果に応じて、前記第2の値に置換する、
請求項
1~5の何れか1項に記載のプロセッサ。
【請求項7】
前記第3レジスタに複数の組が格納され、
前記複数の組はそれぞれ、前記第1の値及び前記第2の値からなり、
前記複数の組は、一列に配列し、
前記1つの命令は、
前記乗算処理で用いる前記第1の値及び前記置換処理で用いる前記第2の値として、前記第3レジスタの所定領域に格納された組の前記第1の値及び前記第2の値を読み出させ、
前記1つの命令は、
前記所定領域の隣の領域に格納された組が前記所定領域に移動するように、前記第3レジスタに格納された前記複数の組を一方向にシフトするシフト処理を更に実行させる、
請求項
6に記載のプロセッサ。
【請求項8】
前記複数の組を複数の第1の組とし、
前記一方向を第1シフト方向とし、
第5レジスタに複数の第2の組が格納され、
前記複数の第2の組はそれぞれ、前記第1の値及び前記第2の値からなり、
前記複数の第2の組は、一列に配列し、
前記シフト処理は、
前記複数の第2の組を第2シフト方向に一組分シフトすると共に、前記複数の第2の組のうち前記第2シフト方向の一端に位置する第2の組を、前記第3レジスタにおける、前記複数の第1の組における前記第1シフト方向とは反対方向の一端に位置する第1の組の隣の領域に移動させる処理を含む、
請求項
7に記載のプロセッサ。
【請求項9】
前記第1データ要素及び前記第2データ要素は、互いに相関するデータ要素である、
請求項1~
8の何れか1項に記載のプロセッサ。
【請求項10】
前記1つの命令は、
前記第2レジスタに格納された前記第2データ要素を所定のシフト量シフトするシフト処理を更に実行させる、
請求項1~
9の何れか1項に記載のプロセッサ。
【請求項11】
前記1つの命令は、前記所定のシフト量の値を入力可能な変数を有する、
請求項
10に記載のプロセッサ。
【請求項12】
前記第3レジスタを備え、
前記第3レジスタは、汎用レジスタである、
請求項1~
11の何れか1項に記載のプロセッサ。
【請求項13】
第1レジスタに第1データ要素が格納され、第2レジスタに第2データ要素が格納され、第3レジスタに第1の値が格納され、
第4レジスタに第3データ要素が格納され、前記第3レジスタに第2の値が更に格納され、
前記第1データ要素と前記第1の値とを乗算して乗算値を計算する乗算処理と、
前記乗算値と前記第2データ要素とを比較する比較処理と、を1つの命令で実行
し、
前記1つの命令は、
前記比較処理の比較結果に応じて、前記第4レジスタに格納された前記第3データ要素を前記第2の値に置き換える置換処理を更に実行させる、
プロセッサの制御方法。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、一般にプロセッサ及びプロセッサの制御方法に関し、より詳細には、1つの命令で複数の処理を実行可能なプロセッサ及びプロセッサの制御方法に関する。
【背景技術】
【0002】
特許文献1に記載の複合演算回路(プロセッサ)は、2つのレジスタの各々に格納されたデータを乗算器で乗算する。そして、複合演算回路は、乗算器の乗算値と、2つのレジスタとは別のレジスタに格納された別のデータとを比較回路で比較し、その比較結果として、乗算器の乗算値及び別のデータのどちらを選択するかを示す選択信号をセレクタ回路に出力する。セレクタ回路は、選択信号に基づいて、乗算器の乗算値及び他のデータのうちの大きい方を選択して出力する。
【先行技術文献】
【特許文献】
【0003】
【発明の概要】
【発明が解決しようとする課題】
【0004】
特許文献1に記載の複合演算回路では、セレクタ回路の処理が、HOG(Histograms of Oriented Gradients)特徴量を生成するための処理とは異なる処理であるため、HOG特徴量を生成できない。より詳細には、上記のセレクタ回路は、選択信号に基づいて、比較回路で比較された乗算値及び他のデータのうちの大きい方を選択して出力する。しかし、HOG特徴量を生成する場合は、上記のセレクタ回路は、比較器の比較結果に応じて、上記の他のデータとは異なる別のデータを出力するか否かという処理を行う必要がある。
【0005】
本開示は、上記事由に鑑みて、HOG特徴量をより速く生成可能なプロセッサ及びプロセッサの制御方法を提供することを目的とする。
【課題を解決するための手段】
【0006】
本開示の一態様に係るプロセッサでは、第1レジスタに第1データ要素が格納され、第2レジスタに第2データ要素が格納され、第3レジスタに第1の値が格納される。第4レジスタに第3データ要素が格納され、前記第3レジスタに第2の値が更に格納される。前記プロセッサは、乗算処理と比較処理と、を1つの命令で実行する。前記乗算処理は、前記第1データ要素と前記第1の値とを乗算して乗算値を計算する。前記比較処理は、前記乗算値と前記第2データ要素とを比較する。前記1つの命令は、前記比較処理の比較結果に応じて、前記第4レジスタに格納された前記第3データ要素を前記第2の値に置き換える置換処理を更に実行させる。
【0007】
本開示の一態様に係るプロセッサの制御方法では、第1レジスタに第1データ要素が格納され、第2レジスタに第2データ要素が格納され、第3レジスタに第1の値が格納される。第4レジスタに第3データ要素が格納され、前記第3レジスタに第2の値が更に格納される。このプロセッサの制御方法では、プロセッサは、乗算処理と比較処理とを1つの命令で実行する。前記乗算処理は、前記第1データ要素と前記第1の値とを乗算して乗算値を計算する。前記比較処理は、前記乗算値と前記第2データ要素とを比較する。前記1つの命令は、前記比較処理の比較結果に応じて、前記第4レジスタに格納された前記第3データ要素を前記第2の値に置き換える置換処理を更に実行させる。
【発明の効果】
【0008】
本開示は、HOG特徴量をより速く生成可能である、という利点がある。
【図面の簡単な説明】
【0009】
【
図1】
図1は、入力画像と一定領域との関係を説明する説明図である。
【
図2】
図2は、HOG特徴量を説明する説明図である。
【
図3】
図3は、3×3画素の各画素への符号の振り方の一例を説明する説明図である。
【
図4】
図4は、ヒストグラムの階級(傾き階級)を説明する説明図である。
【
図5】
図5は、ヒストグラムの階級の境界値を説明する説明図である。
【
図6】
図6は、複数の注目画素での傾きを並列処理で計算する場合の計算方法を説明する説明図である。
【
図7】
図7は、実施形態に係るプロセッサの構成の一例を示す構成図である。
【
図8】
図8は、同上のプロセッサの処理の流れを説明する模式図である。
【
図9】
図9は、変形例1に係るプロセッサの処理の流れの一部を説明する模式図である。
【
図10】
図10Aは、変形例3における、シフト処理前の第3ベクトルレジスタを示す模式図である。
図10Bは、シフト処理後の第3ベクトルレジスタを示す模式図である。
【
図11】
図11Aは、変形例4における、シフト処理前の第3及び第5ベクトルレジスタを示す模式図である。
図11Bは、シフト処理後の第3及び第5ベクトルレジスタを示す模式図である。
【
図12】
図12は、変形例5における、複数のニーモニックの各々が読み出す、境界値逆数及び傾き階級の組を説明する模式図である。
【
図13】
図13は、変形例6に係るプロセッサにおいて、データサイズが第3データ要素よりも大きい場合の第1から第4ベクトルレジスタへのデータの格納の仕方を説明する説明図である。
【
図14】
図14は、同上のプロセッサにおいて、第4ベクトルレジスタへのデータの格納の仕方の別の例を説明する説明図である。
【
図15】
図15は、同上のプロセッサにおいて、データサイズが第3データ要素よりも小さい場合の第1から第4ベクトルレジスタへのデータの格納の仕方を説明する説明図である。
【
図16】
図16は、同上のプロセッサにおいて、第4ベクトルレジスタへのデータの格納の仕方の別の例を説明する説明図である。
【
図17】
図17Aは、実施形態における命令コードの一例を示す模式図である。
図17Bは、変形例7における命令コードの一例を示す模式図である。
【
図18】
図18は、変形例8における命令コードの一例を示す模式図である。
【
図19】
図19は、変形例9における、境界値逆数を格納する汎用レジスタ、及び傾き階級を格納する汎用レジスタの一例を示す模式図である。
【発明を実施するための形態】
【0010】
以下、実施形態に係るプロセッサについて説明する。下記の実施形態は、本開示の様々な実施形態の例に過ぎない。また、下記の実施形態は、本開示の目的を達成できれば、設計等に応じて種々の変更が可能である。
【0011】
図1~
図8を参照して、本実施形態に係るプロセッサ1について説明する。プロセッサ1は、例えば画像から特定の物体(例えば人)を検出する物体検出処理で使用可能なプロセッサである。
【0012】
なお、プロセッサとは、命令メモリ、フェッチ部、デコーダ部、レジスタファイル、演算器群及びデータメモリのうち、全てが1チップに含まれるものである。ただし、命令メモリ及びデータメモリは、チップの外にあってもよい。
【0013】
物体検出処理では、予め、特定の物体の写った大量のサンプル画像から複数の特徴量を抽出してヒストグラムを生成し、統計的学習手法を用いて特定の物体の特徴を学習させ、特定の物体の特徴を表したヒストグラム(参照ヒストグラム)を取得する。そして、入力画像に対し、複数の特徴量を抽出してヒストグラムを生成し、生成したヒストグラムと参照ヒストグラムとを比較する。この比較の結果、両者が類似又は一致する場合に、入力画像に特定の物体が写っていると判定する。
【0014】
上記の特徴量として、HOG(Histograms of Oriented Gradients)特徴量を用いることができる。
【0015】
HOG特徴量とは、画像の一定領域の各画素でのエッジの傾きをヒストグラム化した特徴量である。具体的には、
図1に示すように、入力画像F1の一定領域CR1内の各画素でのエッジEG1の傾きを求める。そして、
図2に示すように、求めた各画素でのエッジEG1の傾きをヒストグラム化する。このヒストグラムが一定領域CR1に対するHOG特徴量である。なお、
図2のヒストグラムでは、横軸の階級がエッジの傾きであり、縦軸の度数がエッジの個数である。横軸の階級は、例えば0度から180度までの範囲を8等分した8階級に設定されている。
【0016】
このように求めたHOG特徴量(ヒストグラム)を上記の参照ヒストグラムと比較し、両者が一致又は類似する場合は、一定領域CR1に特定の物体が写っていると判断される。また、両者が一致も類似もしない場合は、一定領域CR1に特定の物体は写っていないと判断される。
【0017】
HOG特徴量の計算内容の概要を説明する。
【0018】
各画素でのエッジEG1の傾きθは、下記のように計算可能である。
図3に示すように、3×3画素KR1を考える。
図3中の符号P0~P9は、各画素を識別する符号であり、符号L0~L9は、各画素P0~P9の輝度値である。中心の画素P4を注目画素とし、注目画素P4でのエッジEG1の傾きθを計算する。傾きθは、3×3画素KR1の横軸を基準にして反時計回りに回転する角度である。各画素P0~P9の輝度値をL0~L9とする。角度θは、式1に示すように、注目画素P0の上下の画素P1,P7の輝度値L1,L7の差分(L1-L7)と、注目画素P0の左右の画素P5,P3の輝度値L5,L3の差分(L5-L3)とを用いて、表現される。なお、式1のarctanは、tanの逆数である。
【0019】
θ=arctan((L1-L7)/(L5-L3))・・・式1
ヒストグラムの階級thetaを複数(例えば8つ)の傾き階級b0~b7に区分する(
図4)。そして、画像F1の一定領域CR1の各画素で角度θを計算し、計算した角度θが8つの傾き階級b0~b7のうちのどの傾き階級b0~b7に属するかを判定し、属する傾き階級b0~b7の度数に計上する。傾き階級b0~b7は、例えば、0度から180度までの範囲を8等分して構成されている。傾き階級b0~b7は、b0,b1,…,b7の順に180度側から0度側に向かって並んでいる。なお、以下の説明では、差分(L1-L7)を上下差分L17とも記載し、差分(L5-L3)を左右差分L53とも記載する。
【0020】
傾きθの計算を簡略化する方法を説明する。
【0021】
式1の除算値((L1-L7)/(L5-L3))をangleと記載する。すなわち、angleを式2のように定義する。
【0022】
angle=(L1-L7)/(L5-L3)・・・式2
式1のarctanの計算は、複雑であるため省略し、式2に基づいてangleのみを計算する。そして、angleの値が、ヒストグラムの8つの傾き階級b0~b7のどの傾き階級に属するかを判定する。具体的には、
図5に示すように、ヒストグラムの8つの傾き階級b0~b7の境界値A0~A7を予め設定しておく。そして、まず、着目した3×3画素KR1に対して、式2に基づいてangleの値を計算する。
【0023】
【0024】
そして、表1に示すように、複数の境界値A0~A7のうちの大きい境界値から順番に、angleの値と大小比較を行う。なお、複数の境界値A0~A7は、複数の傾き階級b0~b7に一対一対応している。具体的には、まず、表1の1行目のif文の大小関係(angle>A0)が成立するか否かの判定を実行する。以下、この判定を成否判定とも記載する。この大小関係が成立すれば、このangleの値で求まる式1の角度θは、境界値A0に対応する傾き階級b0に属すると判定する。この大小関係が成立しない場合は、2行目のelse if文の大小関係(angle>A1)の成否判定を実行する。この大小関係が成立すれば、このangleの値で求まる式1の角度θは、境界値A1に対応する傾き階級b1に属すると判定する。そして、残りの境界値A2~A7を順に変更して大小関係の成否判定を繰り返す。この処理により、arctanの計算を行わずに、角度θが8つの傾き階級b0~b7のどの傾き階級に属するかを判定できる。
【0025】
次に、傾きθの計算を更に簡略化する方法を説明する。
【0026】
【0027】
式2のangleは、除算を含むため、演算に時間が掛かる。このため、表1の1行目のif文の大小関係(ange>A0)を、表2の1行目のif文の大小関係(1/A0×(L1-L7))>(L5-L3))のように、除算を無くした形に変形する。そして、大小関係の成否判定を実行する。同様に、表1の2行目以後のif else文の大小関係も、表2の2行目以降のif else文の大小関係のように変形して、大小関係の成否判定を実行する。なお、表2の1/A0,1/A1,…,1/A7は、既知の数として与えられる。以下、境界値逆数1/A0~1/A7を境界値逆数a0~a7とも記載する。
【0028】
なお、表2において、1行目のif文の中の境界値逆数a0(=1/A0)及び傾き階級b0は組を成している。以後、この組を組(a0,b0)と記載する場合がある。同様に、2行目以降のif else文の中の境界値逆数及び傾き階級の組も、組(a1,b1)、…、組(a7,b7)と記載する場合がある。
【0029】
プロセッサ1の構成を詳しく説明する。
【0030】
プロセッサ1は、表2の各行の大小関係の成否判定を実行することで、HOG特徴量を生成するプロセッサである。すなわち、プロセッサ1は、上下差分L17及び左右差分L53に対し、境界値逆数a0~a7及び傾き階級b0~b7の組を順に組(a0,b0)から組(a7,b7)まで入れ替えながら、注目画素P4での傾きθが属する傾き階級b0~b7を判定する。その際、プロセッサ1は、表2の各行の大小関係の成否判定をそれぞれ1つのベクトル命令で実行する。そして、一定領域CR1の全ての画素(注目画素)に対して表2の各行の大小関係の成否判定を実行する。これにより、一定領域CR1に対するHOG特徴量が生成される。
【0031】
より詳細には、
図6に示すように、プロセッサ1は、複数(例えば4つ)の注目画素P4a~P4dの各々に対する表2の各行の大小関係の成否判定を、並列処理で実行する。すなわち、プロセッサ1は、複数の注目画素P4a~P4dの各々の上下差分L17a,L17b,L17c,L17d及び左右差分L53a,L53b,L53c,L53dに対し、境界値逆数a0~a7及傾き階級b0~b7の組を順に、組(a0,b0)から組(a0,b0)まで入れ替えながら、注目画素P4a~P4dでの傾きθが属する傾き階級theta-a~theta-dを判定する。その際、プロセッサ1は、複数の注目画素P4a~P4dの各々に対する表2の同じ行の大小関係の成否判定をそれぞれ、1つのベクトル命令で実行する。そして、一定領域CR1の全ての画素(注目画素)に対して表2の各行の大小関係の成否判定を実行する。これにより、一定領域CR1に対するHOG特徴量が生成される。
【0032】
なお、
図6中の上下差分L17a,L17b,L17c,L17dは、注目画素P4a~P4dの上下の画素の画素値の差分である。左右差分L53a,L53b,L53c,L53dは、注目画素P4a~P4dの左右の画素の画素値の差分である。
【0033】
図7に示すように、プロセッサ1は、処理部2と、命令メモリ3と、データメモリ7とを備えている。処理部2は、第1ベクトルレジスタVRa(第1レジスタ)と、第2ベクトルレジスタVRb(第2レジスタ)と、第3ベクトルレジスタVRc(第3レジスタ)と、第4ベクトルレジスタVRd(第4レジスタ)と、複数(例えば4つ)の乗算器J1~J4と、複数の比較器K1~K4と、選択器M1~M4と、フェッチ部4と、デコーダ部5と、実行部6とを備えている。
【0034】
第1~第4ベクトルレジスタVRa~VRdの記憶容量は、例えば128ビットである。なお、本実施形態では、第1ベクトルレジスタVRa、第2ベクトルレジスタVRb及び第3ベクトルレジスタVRcは、プロセッサ1に含まれるが、プロセッサ1に含まれなくてもよい。また、命令メモリ3及びデータメモリ7は、プロセッサ1に含まれなくてもよい。また、処理部2は、第1~第3ベクトルレジスタVRa~VRc以外のレジスタ(例えばベクトルレジスタ及び汎用レジスタ)や、実行部6、比較器K1~K4及び選択器M1~M4以外の演算器を含んでもよい。
【0035】
第1ベクトルレジスタVRaは、
図8に示すように、第1ベクトルデータVD1を格納する。第1ベクトルデータVD1は、複数(例えば4つ)の第1データ要素VD11~VD14で構成される。第1データ要素VD11~VD14はそれぞれ、注目画素P4a~P4dの上下の画素の輝度値の差分を表すデータ(上下差分データ)である。第1ベクトルレジスタVRaは、複数(例えば4つ)の記憶領域m11~m14を有する。記憶領域m11~m14の数及び記憶容量は、記憶領域の数×記憶領域の記憶容量がベクトルレジスタの記憶容量の128ビットであるという範囲で自由に設定される。そのため、記憶領域m11~m14の数は、本実施形態では4つであるが、4つに限定されない。複数の第1データ要素VD11~VD14は、複数の記憶領域m11~m14と一対一に対応し、対応する記憶領域m11~m14に格納される。各記憶領域m11~m14は、例えば32ビットであり、第1データ要素VD11~VD14は、例えば32ビットデータである。なお、記憶領域の記憶容量とデータ要素のサイズは、互いに一致させるのが一般的である。したがって、第1データ要素が8ビットデータの場合は、記憶領域も8ビットに設定することが望ましい。第1データ要素が8ビットデータの場合は、第1データ要素のサイズに応じて第1データ要素の数が変わり、第1データ要素の数は16となる。なお、第2~3データ要素も同様である。第1~3データ要素の数に合わせて、並列演算される第1~3データ要素の数やプロセッサの比較器、乗算器、選択器の数を変える必要があり、この場合は16となる。以下、第1データ要素VD11~VD14を上下差分データVD11~VD14とも記載する。
【0036】
第2ベクトルレジスタVRbは、
図8に示すように、第2ベクトルデータVD2を格納する。第2ベクトルデータVD2は、複数(例えば4つ)の第2データ要素VD21~VD24で構成される。第2データ要素VD21~VD24はそれぞれ、注目画素P4a~P4dの左右の画素の輝度値の差分を表すデータ(左右差分データ)である。第2データ要素VD21~VD24を左右差分データVD21~VD24とも記載する。第2データ要素VD21~VD24は、第1データ要素VD11~VD14に相関するデータである。
【0037】
第2ベクトルレジスタVRbは、複数の記憶領域m21~m24を有する。複数の第2データ要素VD21~VD24は、複数の記憶領域m21~m24と一対一に対応し、対応する複数の記憶領域m21~m24に格納される。各記憶領域m21~m24は、例えば32ビットであり、第2データ要素VD21~VD24は、例えば8ビットデータである。
【0038】
第3ベクトルレジスタVRcは、
図8に示すように、境界値逆数a0(第1の値)及び傾き階級b0(第2の値)を格納する。第3ベクトルレジスタVRcは、複数(例えば4つ)の記憶領域m31~m34を有する。境界値逆数a0は、記憶領域m34に格納され、傾き階級b0は、記憶領域m33に格納されている。本実施形態では、第3ベクトルレジスタVRcの記憶領域m31,m32は、使用されない。各記憶領域m21~m24は、例えば32ビットであり、境界値逆数a0及び傾き階級b0は、例えば8ビットデータである。なお、境界値逆数a0及び傾き階級b0は、第3ベクトルレジスタVRcの予め定められた場所であれば何処の場所に格納されてもよく、例えば、境界値逆数a0及び傾き階級b0は記憶領域m31,m32に格納されてもよい。この場合は、後述の処理で境界値逆数a0及び傾き階級b0を用いる場合は、その定められた場所から境界値逆数a0及び傾き階級b0を取り出すことになる。第4ベクトルレジスタVRdは、
図8に示すように、第3ベクトルデータVD3を格納する。第3ベクトルデータVD3は、複数(例えば4つ)の第3データ要素VD31~VD34で構成される。第4ベクトルレジスタVRdは、複数(例えば4つ)の記憶領域m41~m44を有する。各記憶領域m41~m44は、例えば32ビットである。複数の第3データ要素VD31~VD34は、複数の記憶領域m41~m44に一対一に対応し、対応する記憶領域m41~m44に格納される。
【0039】
複数の記憶領域m41~m44は、後述のように、複数の選択器M1~M4と一対一に対応する。記憶領域m41~m44には、対応する選択器M1~M4から出力された選択結果が格納される。第3データ要素VD31~VD34は、対応する記憶領域m41~m44に格納された選択結果で構成される。
【0040】
複数の記憶領域m11~m14、複数の記憶領域m21~m24、複数の記憶領域m31~m34、後述の複数の乗算器J1~J4、後述の複数の比較器K1~K4、及び後述の複数の選択器M1~M4はそれぞれ、一対一に対応する。また、複数の第1データ要素VD11~VD14、複数の第2データ要素VD21~VD24、及び複数の第3データ要素VD31~VD34はそれぞれ、一対一に対応する。互いに対応する第1データ要素VD11~VD14、第2データ要素VD21~VD23及び第3データ要素VD41~VD44は、3つのベクトルレジスタVRa,VRb,VRdにおける互いに対応する記憶領域に格納される。
【0041】
命令メモリ3は、プロセッサ1で実行する命令を格納する揮発性のメモリである。フェッチ部4は、実行する命令を命令メモリ3から読み出すブロックである。デコーダ部5は、フェッチ部4で読み出された命令の内容を解釈するブロックである。実行部6は、デコーダ部5で解釈された命令を実行するブロックである。データメモリ7は、命令メモリ3から読み出された命令によって処理されるデータを保存するメモリである。
【0042】
実行部6が実行する命令の中には、
図8に示すように、乗算処理S1と、比較処理S2と、置換処理S3とを1つの命令で実行するベクトル命令を含む。乗算処理S1、比較処理S2及び置換処理S3は、この順に実行される。
【0043】
乗算処理S1は、第1ベクトルレジスタVRaに格納された第1データ要素VD11~VD14と、第3ベクトルレジスタVRcに格納された境界値逆数a0とを乗算して乗算値JT1~JT4を計算する処理である。比較処理S2は、乗算値JT1~JT4と、第2ベクトルレジスタVRbに格納された第2データ要素VD21~VD24とを比較する処理である。置換処理S3は、第4ベクトルレジスタVRdに格納された第3データ要素VD31~VD34を、比較処理S2の比較結果に応じて、第3ベクトルレジスタVRcに格納された傾き階級b0と置き換える処理である。
【0044】
より詳細には、乗算処理S1は、第1ベクトルレジスタVRaに格納された複数の第1データ要素VD11~VD14の各々と、第3ベクトルレジスタVRcに格納された境界値逆数a0とを乗算して複数の乗算値JT1~JT4を生成する。なお、複数の乗算値JT1~JT4は、複数の第2データ要素VD21~VD24と一対一に対応している。比較処理S2は、第2ベクトルレジスタVRbに格納された複数の第2データ要素VD21~VD24の各々を、複数の乗算値JT1~JT4のうちの対応する乗算値JT1~JT4と比較して複数の比較結果KT1~KT4を生成する。複数の比較結果KT1~KT4は、複数の第3データ要素VD31~VD34に一対一に対応する。置換処理S3は、第4ベクトルレジスタVRdに格納された複数の第3データ要素VD31~VD34を、複数の比較結果KT1~KT4のうちの対応する比較結果に応じて、第3ベクトルレジスタVRcに格納された傾き階級b0に置換する。
【0045】
実行部6は、上記のベクトル命令に従って、乗算処理S1、比較処理S2及び置換処理S3を実行する。
【0046】
乗算処理S1では、
図8に示すように、実行部6は、第1ベクトルレジスタVRaの記憶領域m11~m14内の第1データ要素VD11~VD14を読み出し、読み出した第1データ要素VD11~VD14を、対応する乗算器J1~J4に入力する。また、実行部6は、第3ベクトルレジスタVRcの記憶領域m44内の境界値逆数a0を読み出して、読み出した境界値逆数a0を各乗算器J1~J4に入力する。
【0047】
これらの入力に対し、乗算器J1~J4は、入力された第1データ要素VD11~VD14と境界値逆数a0とを乗算して乗算値JT1~JT4を生成する。乗算器J1~J4は、生成した乗算値JT1~JT4を、対応する比較器K1~K4に出力する。なお、複数の乗算値JT1~JT4は、複数の比較器K1~K4と一対一に対応している。
【0048】
比較処理S2では、
図8に示すように、実行部6は、第2ベクトルレジスタVRbの記憶領域m21~m24内の第2データ要素VD21~VD24を読み出して、読み出した第2データ要素VD21~VD24を、対応する比較器K1~K4に入力する。また、比較器K1~K4には、上記のように、対応する乗算器J1~J4の乗算値JT1~JT4が入力される。
【0049】
これらの入力に対し、比較器K1~K4は、入力された乗算値JT1~JT4と第2データ要素VD21~VD24とを大小比較し、その比較結果KT1~KT4を、対応する選択器M1~M4に出力する。
【0050】
置換処理S3では、
図8に示すように、実行部6は、第3ベクトルレジスタVRcの記憶領域m33内の傾き階級b0を読み出して、読み出した傾き階級b0を各選択器M1~M4に入力する。また、実行部6は、第4ベクトルレジスタVRdの記憶領域m41~m44内の第3データ要素VD31~VD34を読み出し、読み出した第3データ要素VD31~VD34を、対応する選択器M1~M4に入力する。また、選択器M1~M4には、上記のように、対応する比較器K1~K4の比較結果KT1~KT4が入力される。
【0051】
これらの入力に対し、選択器M1~M4は、第4ベクトルレジスタVRdの記憶領域m41~m44内の第3データ要素VD31~VD34を、対応する比較結果KT1~KT4に応じて、入力された傾き階級b0に置換する。
【0052】
より詳細には、入力された比較結果KT1~KT4が、乗算値JT1~JT4が第2データ要素VD21~VD24よりも大きいという結果である場合(すなわち表2の1行目のif文の大小関係が成立する場合)は、選択器M1~M4は、入力された傾き階級b0及び第3データ要素VD31~VD34のうち、傾き階級b0を選択する。そして、選択器M1~M4は、選択した傾き階級b0を、選択結果MT1~MT4として、第4ベクトルレジスタVRdにおける、対応する記憶領域m41~m44に上書きで格納する。すなわち、選択器M1~M4は、第4ベクトルレジスタVRd内における、比較結果KT1~KT4に対応する第3データ要素VD31~VD34を、入力された傾き階級b0に置換する。これにより、第4ベクトルレジスタVRd内の第3データ要素VD31~VD34の内容が、比較結果KT1~KT4に応じて、傾き階級b0に更新される。
【0053】
他方、入力された比較結果KT1~KT4が、乗算値JT1~JT4が第2データ要素VD21~VD24以下であるという結果である場合(すなわち表2の1行目のif文の大小関係が成立しない場合)は、選択器M1~M4は、入力された傾き階級b0及び第3データ要素VD31~VD34のうち、第3データ要素VD31~VD34を選択する。そして、選択器M1~M4は、選択した第3データ要素VD31~VD34を、第4ベクトルレジスタVRdにおける、対応する記憶領域m41~m44に上書きで格納する。すなわち、選択器M1~M4は、第4ベクトルレジスタVRd内における、比較結果KT1~KT4に対応する第3データ要素VD31~VD34を、入力された第3データ要素VD31~VD34に置換する。すなわち、第4ベクトルレジスタVRd内の第3データ要素VD31~VD34は、更新されずに保持される。
【0054】
このように、上記のベクトル命令を実行することで、4つの注目画素P4a~P4dに対し、表2の1行目のif文の大小関係の成否判定が実行される。そして、4つの注目画素P4a~P4dのうち、上記の大小関係が成立した注目画素に対しては、その傾きθは傾き階級b0に属すると判定される。そして、その判定結果が第4ベクトルレジスタVRd内の対応する記憶領域m41~m44に、第3データ要素VD31~VD34として格納される。
【0055】
そして、第3ベクトルレジスタVRcに格納された境界値逆数a0及び傾き階級b0の組を、順に次の組(a1,b1)から最後の組(a7,b7)まで入れ替えながら、上記のベクトル命令を繰り返し実行する。これにより、4つの注目画素P4a~P4dに対し、表2の2行目以降のif else文の大小関係の成否判定が順に実行される。そして、その判定結果(どの傾き階級b0~b7に属するかの判定結果)が、第4ベクトルレジスタVRd内の対応する記憶領域m41~m44に、第3データ要素VD31~VD34として格納される。そして、一定領域CR1の全ての画素(注目画素)に対して表2の各行の大小関係の成否判定を実行する。これにより、一定領域CR1に対するHOG特徴量が生成される。
【0056】
【0057】
表3は、上記のベクトル命令をプロセッサ1に実装する場合の「ニーモニック」、「データタイプ」、「Read/Write」及び「動作」の一例を示す。
【0058】
表3のニーモニックの欄のpgrad.[D]の[D]には、第1データ要素VD11~VD14、第2データ要素VD21~VD24及び第3データ要素VD31~VD34のデータタイプを示す記号が入る。表3のニーモニックの欄の「VRa」「VRb」「VRc」「VRd」は、使用するベクトルレジスタを指定する。「VRa」は、第1ベクトルレジスタVRaに対応し、「VRb」は、第2ベクトルレジスタVRbに対応し、「VRc」は、第3ベクトルレジスタVRcに対応し、「VRd」は、第4ベクトルレジスタVRdに対応する。「VRd」には、2進数のデータ要素(第3データ要素VD31~VD34)が格納される。そのデータ要素のビット幅は、本実施形態では、VRa、VRb及びVRcに格納されるデータ要素(第1データ要素VD11~VD14、第2データ要素VD21~VD24、境界値逆数a0及び傾き階級)のビット幅と同じである。
【0059】
表3の「データタイプ」の欄において、「u8」は、符号無し整数又は固定小数点8ビットを示す。「s8」は、符号有り整数又は固定小数点8ビットを示す。「f16」は、半精度浮動小数点数16ビットを示す。「f32」は、単精度浮動小数点数32ビットを示す。「f64」は、倍精度浮動小数点数64ビットを示す。表3の「Read/Write」の欄は、VRa~VRdが読み出しで用いられるか、書き込みで用いられるかを示す。
【0060】
表3の「動作」の欄は、上記のベクトル命令で実行される処理(乗算処理S1、比較処理S2及び置換処理S3)を表している。「動作」の欄のVRc[7:0]等の[7:0]は、ビット位置が0から7までのデータを示す。なお、「VRa[7:0], VRc[7:0]」等の部分が乗算処理S1に対応し、「umul(VRa[7:0],VRc[7:0])>VRb[7:0]」等の部分が比較処理S2に対応し、「VRd[7:0]←( … )?VRc[7:0]:VRd[7:0]」等の部分は、( … )内の関係が成立する場合はVRc[7:0]をVRd[7:0]に入力し、( … )内の関係が成立しない場合はVRd[7:0]をVRd[7:0]に入力することを示し、置換処理S3に対応する。表3の「動作」の欄では、[D]がu8の場合、[D]がs8の場合及び[D]がu16の場合の動作が一例として記載されている。
【0061】
本実施形態では、ベクトルレジスタVRa~VRdは、128ビットのベクトルレジスタであるが、ベクトルレジスタVRa~VRdのビット幅は、128ビットに限定されず、例えば64ビット、256ビット、512ビット又は1024ビットであってもよい。ベクトルレジスタVRa~VRdのビット幅が変われば、その中に格納されるデータ要素の個数が変わるだけで、動作の本質は同じである。
【0062】
ここで、本実施形態と比較例とで、3つの処理S1~S3を実行する時間を比較する。本実施形態では、上述の通り、3つの処理S1~S3を1つのベクトル命令で実行する。比較例では、3つの処理S1~S3をそれぞれ別のベクトル命令で実行する。各処理S1~S3の処理そのものは通常1クロック未満(例えば0.1クロック)であるが、1つのベクトル命令の実行には少なくとも1クロック必要となる。本実施形態では、1つのベクトル命令で3つの処理S1~S3を順に実行するため、3つの処理S1~S3そのものは、ベクトル命令の発行時から0.3クロック(=3×0.1クロック)経過時に完了し、1つのベクトル命令の実行必要時間の1クロック以内である。よって、3つの処理S1~S3を実行するベクトル命令の実行には、1クロック掛かる。比較例では、1つ目のベクトル命令を発行して1つ目の処理S1を実行し、次のクロックで2つ目のベクトル命令を発行して2つ目の処理S2を実行し、更に次のクロックで3つ目のベクトル命令を発行して3つ目の処理S3を実行する。この結果、比較例では、1つ目のベクトル命令を発行してから3つ目の処理S3が完了するまでに、3クロック(=1クロック+1クロック+1クロック)掛かる。このように、本実施形態のように、1つのベクトル命令で3つの処理S1~S3を実行させることで、一連の3つの処理S1~S3をより速く実行できる。したがって、HOG特徴量を生成する処理をより速く実行できる。
【0063】
以上、本実施形態に係るプロセッサ1によれば、1つのベクトル命令で、乗算処理S1、比較処理S2及び置換処理S3を実行できるため、HOG特徴量を生成する処理を一層速く実行できる。
【0064】
(変形例)
以下、上記の実施形態の変形例を説明する。以下の変形例は、組み合わせて実施されてもよい。上記の実施形態は、本開示の様々な実施形態の一つに過ぎない。上記の実施形態は、本開示の目的を達成できれば、設計等に応じて種々の変更が可能である。さらに、上記の実施形態に係る態様は、プロセッサ1で具現化されることに限らない。例えば、プロセッサ1の制御方法で、上記の実施形態に係る態様が具現化されてもよい。
【0065】
上記のプロセッサの制御方法は、第1データ要素を格納する第1レジスタと、第2データ要素を格納する第2レジスタと、第1の値を格納する第3レジスタとを用いて、命令を実行可能な処理を含む。前記命令は、乗算処理と、比較処理と、を実行する1つの命令である。前記乗算処理は、前記第1レジスタに格納された前記第1データ要素と、前記第3レジスタに格納された前記第1の値とを乗算して乗算値を計算する。比較処理は、前記乗算値と、前記第2レジスタに格納された前記第2データ要素とを比較する。
【0066】
なお、以下の変形例の説明では、上記の実施形態と同じ構成要素については、同じ符号を付して説明を省略する場合がある。
【0067】
(変形例1)
上記の実施形態では、境界値逆数1/A0~1/A7は1以下の値になる場合があるため、表2の各行の大小関係の左辺(不等式の左辺)((1/A0×(L1-L7)),…、(1/A7×(L1-L7)))は1以下の数値になる場合がある。例えば1/A0~1/A7および(L1-L7)は8ビットで(L1-L7)は整数であるとすると、上記の左辺は16ビットであるが、上記のように、上記の左辺の数値が1以下の数値になる場合は、上記の左辺の数値の小数点位置は、その数値のビット列の右端(下位ビット側)から8ビット目の位置に現れる。他方、表2の各行の大小関係の右辺(L5-L3)の数値は例えば整数であるため、上記の右辺の数値の小数点位置は、その数値のビット列の右端に現れる。上記の大小関係の成否判定の演算を行う際に固定小数点演算が行えるように、上記の右辺の数値の小数点位置を上記の左辺の数値の小数点位置に一致させてもよい。すなわち、上記の右辺の数値を左に所定のシフト量(例えば8ビット)シフトして、上記の大小関係の成否判定の演算を行ってもよい。なお、所定のシフト量は、第2データ要素VD21~VD24のデータタイプに応じて固定値として設定される。
【0068】
より詳細には、
図9に示すように、ベクトル命令に、第2ベクトルレジスタVRbの記憶領域m21~m24内の第2データ要素VD21~VD24を所定のシフト量(例えば8ビット)左にシフトするシフト処理S4(小数点シフト処理)を追加してもよい。そして、所定のシフト量シフトされた第2データ要素VD21~VD24を、対応する比較器K1~K4に入力する。以降の処理は、上記の実施形態と同様である。
【0069】
【0070】
表4は、本変形例のベクトル命令をプロセッサ1に実装する場合の「ニーモニック」、「データタイプ」、「Read/Write」及び「動作」の一例を示す。この変形例は、浮動小数点数には効果がないため、「データタイプ」には、浮動点小数点数は含まれない。
【0071】
この構成によれば、第2データ要素VD21~VD24の小数点位置を、乗算処理S1で計算された乗算値JT1~JT4の小数点位置に合わせることができ、又は近づけることができる。したがって、比較処理S2での演算精度を向上できる。この結果、HOG特徴量をより速く生成できる。
【0072】
(変形例2)
変形例1では、所定のシフト量は、例えば、第2データ要素VD21~VD24のデータタイプに応じて固定値で設定されるが、命令(ベクトル命令)において即値で指定可能であってもよい。換言すれば、命令は、所定のシフト量の値を入力可能な変数(即値)を有してもよい。
【0073】
【0074】
表5は、本変形例のベクトル命令をプロセッサ1に実装する場合の「ニーモニック」、「データタイプ」、「Read/Write」及び「動作」の一例を示す。表3の「ニーモニック」の欄の「Imm」は、即値(immediate value)である。この即値を、例えば境界値逆数の値に応じて値を入力することで、境界値逆数に応じた所定のシフト量を設定できる。この変形例は、浮動小数点数には効果がないため、「データタイプ」には、浮動点小数点数は含まれない。
【0075】
この構成によれば、変数(即値)への入力値に応じて所定のシフト量を変更できる。境界値逆数a0~a7に応じて、乗算処理S1で計算される乗算値JT1~JT4の小数点位置は変化する。このため、境界値逆数a0~a7に応じて、変数への入力値を変えて所定のシフト量を変えることで、境界値逆数a0~a7が変わっても、比較処理S2での演算精度を向上できる。
【0076】
(変形例3)
上記の実施形態では、第3ベクトルレジスタVRcの記憶領域m33,m34に格納された境界値逆数a0及び傾き階級b0の組が、順に次の組(a1,b1)から最後の組(a7,b7)まで入れ替えられる。これにより、記憶領域m33,m34に、処理S1,S3で用いる境界値逆数及び傾き階級が供給される。これに対し、本変形例では、
図10Aに示すように、第3ベクトルレジスタVRcに予め複数の組(例えば組(a0,b0)及び組(a1,b1))を格納する。そして、
図10Bに示すように、その複数の組を一方向Y1に一組分ずつシフトすることで、記憶領域m33,m34に、処理S1,S3で用いる境界値逆数及び傾き階級を供給する。
【0077】
図10Aでは、複数の組として、組(a0,b0)及び組(a1,b1)が、第3ベクトルレジスタVRcに一列に並べて格納されている。組(a0,b0)は記憶領域m33,m34に格納され、組(a1,b1)は、記憶領域m33,m34の隣の記憶領域m31,m32に格納されている。
【0078】
本変形例のベクトル命令は、上記の実施形態と同様に、乗算処理S1で用いる境界値逆数a0及び置換処理S3で用いる傾き階級b0として、第3ベクトルレジスタVRcの記憶領域m33,m34(所定領域)に格納された組の境界値逆数及び傾き階級を読み出する。
【0079】
本変形例のベクトル命令は、一連の処理S1~S3を実行した後、第3ベクトルレジスタVRcに格納された上記の複数の組を一方向Y1(第1シフト方向)に一組分シフトするシフト処理を更に実行する(
図10B)。なお、一方向Y1は、記憶領域m31から記憶領域m34に向かう方向、換言すれば、本変形例では、上位ビット側から下位ビット側に向かう方向である。これにより、第3ベクトルレジスタVRcの記憶領域m33,m34(所定領域)の隣の記憶領域m31,m32(隣の領域)に格納された組(a1,b1)が、記憶領域m33,m34(所定領域)に移動される。これにより、次の一連の処理S1~S3で用いる境界値逆数a1及び傾き階級b1が、記憶領域m33,m34に格納(供給)される。なお、組(a0,b0)及び組(a1,b1)の第3ベクトルレジスタVRcの中での並びを逆にして、記憶領域m31,m32から組(a0,b0)を読み出し、一連の処理S1~S3を実行した後に記憶領域m33,m34内の組(a1,b1)を一方向Yとは逆方向に一組分シフトして記憶領域m31,m32に移動させてもよい。
【0080】
なお、上記のシフト処理で、組(a0,b0)は第3ベクトルレジスタVRcの記憶領域から追い出されて消去される。また、記憶領域m31,m32には、シフト処理後に例えば0データが格納されてゼロ初期化される。なお、この初期化は、ゼロ以外の値(例えば1)で行われてもよい。
【0081】
表6は、本変形例のベクトル命令をプロセッサ1に実装する場合の「ニーモニック」、「データタイプ」、「Read/Write」及び「動作」の一例を示す。
【0082】
【0083】
表6の「動作」の欄において、「VRc[111:0]←VRc[127:16],VRc[127:112]←0」等の部分がシフト処理に対応する。
【0084】
以上、本変形例によれば、第3ベクトルレジスタVRcに複数の組(境界値逆数及び傾き階級の組)を格納し、上記の複数の組をシフトすることで、上記の複数の組を1つずつ順番に第3ベクトルレジスタVRcの記憶領域m33,m34に移動させることができる。これにより、第3ベクトルレジスタVRcで、一連の処理S1~S3で用いる組(境界値逆数及び傾き階級の組)の入れ替えを低減でき、一連の処理S1~S3の処理速度を向上できる。なお、第3ベクトルレジスタVRcに、境界値逆数及び傾き階級の組の全て(すなわち組(a0,b0)から組(a7,b7)までの全ての組)を格納すれば、一連の処理S1~S3で用いる組の入れ替えを不要にできる。
【0085】
(変形例4)
本変形例は、
図11Aに示すように、変形例3において、第5ベクトルレジスタVRc+1(第5レジスタ)を更に備える。第5ベクトルレジスタVRc+1は、第3ベクトルレジスタVRcと同様に、複数(例えば4つ)の記憶領域m51~m54を有する。第5ベクトルレジスタVRc+1のレジスタ番号c+1は、第3ベクトルレジスタVRcのレジスタ番号cの連番である。なお、本変形例では、第5ベクトルレジスタVRc+1のレジスタ番号c+1は、第3ベクトルレジスタVRcのレジスタ番号cの連番であるが、連番に限定されない。例えば、第5ベクトルレジスタをVReと表現し、レジスタ番号をeとしてもよい。なお、レジスタ番号とは、処理で用いるレジスタを指定するためにレジスタに設定された識別番号である。
【0086】
図11Aに示すように、第3ベクトルレジスタVRcの記憶領域m31~m34には、複数(例えば2つ)の組(組(a0,b0)及び組み(a1,b1))が、下位ビット側から順に一列に並んで格納されている。第5ベクトルレジスタVRc+1の記憶領域m51~m54には、複数(例えば2つ)の組(組(a2,b2)及び組み(a3,b3))が、下位ビット側から順に一列に並んで格納されている。すなわち、複数の組(組(a0,b0)から組(a7,b7)までの全ての組)のうち、連続する4つの組(例えば組(a0,b0)から組(a3,b3)までの組)が、第3及び第5ベクトルレジスタVRc,VRc+1に格納されている。なお、データa0,b0,a1,b1はそれぞれ、第3ベクトルレジスタVRcの記憶領域m34~m31に格納されている。データa2,b2,a3,b3はそれぞれ、第5ベクトルレジスタVRc+1の記憶領域m54~m51に格納されている。
【0087】
本変形例のシフト処理は、変形例3のシフト処理において、下記の第1処理及び第2処理を含む。
【0088】
第1処理は、
図11Bに示すように、第5ベクトルレジスタVRc+1に格納された複数の組(例えば組(a2,b2)及び組(a3,b3))を一方向Y2(第2シフト方向)に一組分シフトする。一方向Y2は、記憶領域m51から記憶領域m54に向かう方向、換言すれば、本変形例では、第5ベクトルレジスタVRc+1の上位ビット側から下位ビット側に向かう方向である。第1処理で空になった記憶領域m51,m52は、0データが格納されてゼロ初期化される(
図11B参照)。なお、この初期化は、ゼロ以外の値(例えば1)が格納されることで行われてもよい。
【0089】
第2処理は、
図11Bに示すように、第5ベクトルレジスタVRc+1内の組(a2,b2)を、第3ベクトルレジスタVRcにおける組(a1,b1)の後隣の記憶領域m31,m32に移動させる。後隣とは、一方向Y1とは反対方向の隣である。なお、組(a2,b2)は、第5ベクトルレジスタVRc+1において、一列に並んで格納された複数の組(組(a2,b2)及び組み(a3,b3))のうち、一方向Y2の一端に位置する組である。また、組(a1,b1)は、第3ベクトルレジスタVRcにおいて、一列に並んだ複数の組(組(a0,b0)及び組み(a1,b1))における一方向Y1とは反対方向の一端に位置する組である。
【0090】
本変形例では、上記のシフト処理で、第3ベクトルレジスタVRc内の複数の組(組(a0,b0)及び組み(a1,b1))が一方向Y1に一組分シフトされる。このシフトに併行して又はこのシフトの後に、上記のシフト処理で、更に、第5ベクトルレジスタVRc+1内の複数の組(組(a2,b2)及び組み(a3,b3))も一方向Y2に一組分シフトされる。そして、上記のシフト処理で、第5ベクトルレジスタVRc+1における一方向Y2の一端の組(組(a2,b2))が、第3ベクトルレジスタVRcの複数の組の後隣に補充される。これにより、複数の組(例えば組(a0,b0)から組(a3,b3)までの4つの組)が2つのベクトルレジスタVRc,VRc+1に分かれて格納されても、それら複数の組を1つのベクトルレジスタに格納されているように処理できる。
【0091】
本変形例のベクトル命令のニーモニックは、表7に示すように表される。
【0092】
【0093】
なお、第3ベクトルレジスタVRcに格納された組(例えば組(a0,b0)及び組(a1,b1))が、特許請求の範囲に記載された第1の組に対応する。また、第5ベクトルレジスタVRc+1に格納された組(例えば組(a2,b2)及び組(a3,b3))が、特許請求の範囲に記載された第2の組に対応する。
【0094】
(変形例5)
変形例3では、第3ベクトルレジスタVRc内の複数の組(例えば組(a0,b0)及び組(a1,b1))は、1組ずつ記憶領域m33,m34にシフトされることで第3ベクトルレジスタVRcから読み出される。ただし、第3ベクトルレジスタVRc内の複数の組を上記のようにシフトさせずに、ベクトル命令で、第3ベクトルレジスタVRcにおいて、読み出す組が格納された記憶領域を指定してもよい。そして、指定した記憶領域から境界値逆数(第1の値)及び傾き階級(第2の値)を読み出してもよい。
【0095】
より詳細には、第3ベクトルレジスタVRc内の上記の複数の組(例えば組(a0,b0)及び組(a1,b1)は、第3ベクトルレジスタVRcにおいて互いに異なる記憶領域に格納されている。組(a0,b0)は、記憶領域m33,m34に格納され、組(a1,b1)は、記憶領域m31,m32に格納されている。
【0096】
本変形例のベクトル命令は、複数(例えば2つ)のニーモニック(命令ニーモニック)を有する。複数のニーモニックは、乗算処理S1で用いる境界値逆数及び置換処理S3で用いる傾き階級として、上記の複数の組のうち、互いに異なる記憶領域に格納された組の境界値逆数及び傾き階級を読み出させる。
【0097】
具体的には、
図12に示すように、上記の複数の組が2つの組(例えば組(a0,b0)及び組(a1,b1))である場合を想定する。この場合、本変形例のベクトル命令は、2つのニーモニックとして、pgrandh.[D]とpgrandl.[D]とを有する。pgrandh.[D]は、乗算処理S1で用いる境界値逆数、及び置換処理S3で用いる傾き階級として、上記の2つの組のうちの上位ビット側の組(組(a1,b1))が格納された記憶領域m31,m32から境界値逆数a1及び傾き階級b1を読み出す。pgrandl.[D]は、2つの組(組(a0,b0)及び組(a1,b1))のうち下位ビット側の組(組(a0,b0))が格納された記憶領域m33,m34から境界値逆数a0及び傾き階級b0を読み出す。
【0098】
ベクトル命令をプロセッサ1に実装するとき、上位ビット側の組(組(a1,b1))の境界値逆数a1及び傾き階級b1を読み出す場合は、ニーモニックとしてpgrandh.[D]を用いる。他方、下位ビット側の組(組(a0,b0))の境界値逆数a0及び傾き階級b0を読み出す場合は、ニーモニックとしてpgrandl.[D]を用いる。
【0099】
本変形例によれば、複数のニーモニック(例えばpgrandh.[D]及びpgrandl.[D])のうちのどのニーモニックを用いるかによって、第3ベクトルレジスタVRcにおいて、複数の組(例えば組(a0,b0)及び組(a1,b1))のうちの互いに異なる記憶領域に格納された組の境界値逆数及び傾き階級を読み出すことができる。すなわち、第3ベクトルレジスタVRcにおいて複数の組を変形例3,4のようにシフトせずに、異なる記憶領域に格納された組(例えば組(a0,b0)及び組(a1,b1))の境界値逆数及び傾き階級を読み出すことができる。この結果、HOG特徴量を生成する処理速度を向上できる。
【0100】
なお、第3ベクトルレジスタVRcに格納された複数の組のうちのどの組を用いるかを指定するために、ニーモニックはpgrad.[D]のままにして、即値「Imm」をニーモニックに加えて、即値で指定してもよい。この場合は、例えば、第3ベクトルレジスタVRcに格納された複数(例えば2つ)の組を下位ビットから順に0、1に対応させ、即値で0が指定されると下位側の組を読み出し、即値で1が指定されると上位側の組を読み出してもよい。
【0101】
(変形例6)
上記の実施形態では、第1データ要素VD11~VD14及び第2データ要素VD21~VD24(すなわち入力画像のデータ)の各々のビット幅は、第3データ要素VD31~VD34(すなわちHOG特徴量)のビット幅と、互いに同じであるが、互いに異なってもよい。
【0102】
図13に示すように、第1データ要素VD11~VD14及び第2データ要素VD21~VD24の各々のビット幅は、第3データ要素VD31~VD38のビット幅よりも大きくてもよい。
図13の例では、第1データ要素VD11~VD14及び第2データ要素VD21~VD24のビット幅は16ビット幅(例えばデータタイプがu16の場合)であり、第3データ要素VD31~VD38のビット幅は8ビット幅である。なお、境界値逆数a0は、16ビットであり、傾き階級b0は8ビットである。第1から第4ベクトルレジスタVRa~VRdは、128ビット幅である。なお、傾き階級b0を格納する記憶領域のビット幅を境界値逆数a0と合わせて16ビットとしてもよく、その場合、傾き階級b0の有効データはその16ビットのうち8ビットとなる。
【0103】
図13の例では、第1ベクトルレジスタVRaには、8個の第1データ要素VD11~VD18が格納される。第2ベクトルレジスタVRbにも、8個の第2データ要素VD21~VD28が格納される。第3ベクトルレジスタVRcには、境界値逆数a0及び傾き階級b0の2個のデータが格納される。第4ベクトルレジスタVRdにも、8個の第3データ要素VD31~VD38が格納される。第3データ要素VD31~VD38は、例えば、第4ベクトルレジスタVRdの下位側半分の64ビット幅の記憶領域に格納される。この場合、第4ベクトルレジスタVRcの上側半分の64ビットの記憶領域は、使用されず、空きになる。境界値逆数a0及び傾き階級b0は、例えば、第3ベクトルレジスタVRcの下位側の24ビット幅の記憶領域に格納される。第3ベクトルレジスタVRcの残りの104ビット幅の記憶領域には、使用されず、空きになる。
【0104】
なお、この場合のベクトル命令をプロセッサ1に実装する場合の「ニーモニック」、「データタイプ」、「Read/Write」及び「動作」の一例を示すと、表8になる。
【0105】
【0106】
表8の「ニーモニック」の欄のpgrad8.[D]の「8」は、VRdに格納されるデータ要素(第3データ要素VD31~VD38)のビット幅を示す。
【0107】
なお、
図14に示すように、8個の第3データ要素VD31~VD38は、第4ベクトルレジスタVRdの上位側半分の64ビット幅の記憶領域に格納されてもよい。この場合は、第4ベクトルレジスタVRdの下側半分の64ビットの記憶領域は、使用されず、空きになる。
【0108】
なお、
図14の場合のニーモニックをpgrad8h.[D]と表記し、
図13の場合のニーモニックをpgrad8l.[D]と表記してもよい。これにより、2つのニーモニック(pgrad8h.[D]、pgrad8l.[D])のうちのどちらのニーモニックを用いるかによって、第3データ要素VD31~VD38を、第4ベクトルレジスタVRdの上位側半分の記憶領域に格納するか、下位側半分の記憶領域に格納するかを選択できる。
【0109】
また、
図15に示すように、第1データ要素VD11~VD14及び第2データ要素VD21~VD24の各々のビット幅は、第3データ要素VD31~VD38のビット幅よりも小さくもよい。
図15の例では、第1データ要素VD11~VD14及び第2データ要素VD21~VD24の各々のビット幅は8ビット幅(例えばデータタイプが8uの場合)であり、第3データ要素のビット幅は16ビット幅である。なお、第1から第4ベクトルレジスタVRa~VRdは、128ビット幅である。
【0110】
図15の例では、第1ベクトルレジスタVRaには、8個の第1データ要素VD11~VD18が格納される。第2ベクトルレジスタVRbにも、8個の第2データ要素VD21~VD28が格納される。第3ベクトルレジスタVRcには、境界値逆数a0及び傾き階級b0の2つのデータが格納される。第4ベクトルレジスタVRdにも、8個の第3データ要素VD31~VD38が格納される。第1データ要素VD11~VD18は、例えば、第1ベクトルレジスタVRaの下位側半分の64ビット幅の記憶領域に格納され、第1ベクトルレジスタVRaの上側半分の64ビットの記憶領域は、使用されず、空きになる。同様に、第2データ要素VD21~VD28も、第2ベクトルレジスタVRbの下位側半分の64ビット幅の記憶領域に格納され、第2ベクトルレジスタVRbの上側半分の64ビットの記憶領域は、使用されず、空きになる。境界値逆数a0及び傾き階級b0は、例えば、第3ベクトルレジスタVRcの下位側の24ビット幅の記憶領域に格納される。第3ベクトルレジスタVRcの残りの104ビット幅の記憶領域は、使用されず、空きになる。なお、境界値逆数a0を格納する記憶領域のビット幅を傾き階級b0と合わせて16ビットとしてもよく、その場合、境界値逆数a0の有効データはその16ビットのうち8ビットとなる。
【0111】
なお、この場合のベクトル命令をプロセッサ1に実装する場合の「ニーモニック」、「データタイプ」、「Read/Write」及び「動作」の一例を示すと、表9になる。
【0112】
【0113】
表9の「ニーモニック」の欄のpgrad16.[D]の「16」は、VRdに格納されるデータ要素(第3データ要素VD31~VD38)のビット幅を示す。
【0114】
なお、
図16に示すように、8個の第1データ要素VD11~VD18は、第1ベクトルレジスタVRaの上位側半分の64ビット幅の記憶領域に格納されてもよい。この場合は、第1ベクトルレジスタVRaの下側半分の64ビットの記憶領域は、使用されず、空きになる。また、8個の第2データ要素VD21~VD28も、第2ベクトルレジスタVRbの上位側半分の64ビット幅の記憶領域に格納されてもよい。この場合は、第2ベクトルレジスタVRbの下側半分の64ビットの記憶領域は、使用されず、空きになる。
【0115】
なお、
図16の場合のニーモニックをpgrad16h.[D]と表記し、
図15の場合のニーモニックをpgrad16l.[D]と表記してもよい。これにより、2つのニーモニック(pgrad16h.[D]、pgrad16l.[D])のうちのどちらのニーモニックを用いるかによって、第1データ要素VD11~VD18及び第2データ要素VD21~VD28をそれぞれ、第1ベクトルレジスタVRa及び第2ベクトルレジスタVRbの上位側半分の記憶領域から読み出すか、下位側半分の記憶領域から読み出すかを選択できる。
【0116】
(変形例7)
上記の実施形態では、ベクトル命令のニーモニックは、表10のように、第1~第4ベクトルレジスタVRa~VRdを有する。
【0117】
【0118】
このため、ベクトル命令の命令コードQ1では、
図17Aに示すように、第1~第4ベクトルレジスタVRa~VRdのレジスタ番号a~dを指定する必要がある。なお、レジスタ番号とは、処理で用いるレジスタを指定するためにレジスタに設定された識別番号である。命令コードQ1では、命令を定義するオペコードと、レジスタを指定するレジスタ番号とを記載する必要がある。命令コードQ1の命令長は、一定(例えば32ビット)であるため、4つのベクトルレジスタVRa~VRdのレジスタ番号a~dを指定すると、レジスタ番号指定フィールドRF1のビット長が長くなり、オペコードのビット長が短くなる。レジスタ番号指定フィールドRF1とは、レジスタ番号を指定するフィールドである。この結果、命令コードQ1で、より多くの命令を定義できなくなる。
図17Aの例では、オペコードは12ビットであり、各レジスタ番号a~dは5ビットである。なお、この変形例では、一例として、命令コードQ1の命令長が32ビットであり、32個のベクトルレジスタを有するプロセッサでの実装を想定する。
【0119】
本変形例では、第1ベクトルレジスタVRa、第2ベクトルレジスタVRb、第3ベクトルレジスタVRc及び第4ベクトルレジスタVRdのうち、少なくとも1つのベクトルレジスタのレジスタ番号を、他のベクトルレジスタのレジスタ番号に対する連番とする。他のレジスタ番号の連番となったレジスタ番号は、他のレジスタ番号が決まると、自動的に、他のレジスタ番号の次のレジスタ番号又は1つ前のレジスタ番号に決まる。このため、他のレジスタ番号の連番となったレジスタ番号は、命令コードに記載する必要がなくなる。この結果、命令コードにおけるオペコードのビット長をより長くでき、より多くの命令を定義できる。
【0120】
例えば、第2ベクトルレジスタVRbのレジスタ番号bを、第1ベクトルレジスタVRaのレジスタ番号aの連番である番号a+1としてもよい。すなわち、レジスタ番号b=a+1としてもよい。この場合、第1ベクトルレジスタVRaのレジスタ番号aが指定されると、第2ベクトルレジスタVRbのレジスタ番号a+1は、レジスタ番号aの次のレジスタ番号に自動的に決まる。この場合のニーモニックは、表11になる。
【0121】
【0122】
また、この場合の命令コードQ2は、
図17Bのように、第2ベクトルレジスタVRbのレジスタ番号a+1以外の3つのベクトルレジスタVRa,VRc,VRdのレジスタ番号a,c,dが記載される。この場合、命令コードQ2において、第2ベクトルレジスタVRbのレジスタ番号a+1が記載されない分、レジスタ番号指定フィールドRF2のビット長が短くなり、その分、オペコードが長くなる。
【0123】
また、第2ベクトルレジスタVRbのレジスタ番号bを、第4ベクトルレジスタVRdのレジスタ番号dの連番である番号d+1としてもよい。すなわち、レジスタ番号b=d+1としてもよい。この場合のニーモニックは、表12になる。また、この場合の命令コードQ3は、
図17Bのようになる。なお、ベクトルレジスタVRa~VRdのうち1つのベクトルレジスタのレジスタ番号を、他のどのベクトルレジスタのレジスタ番号の連番とするかは様々な組み合わせが考えられ、設計等に応じて種々の変更が可能である。
【0124】
【0125】
(変形例8)
変形例7では、例えば第2ベクトルレジスタVRbのレジスタ番号bを他のベクトルレジスタのレジスタ番号の連番とすることで、レジスタ番号指定フィールドFR2のビット長を減らす。ただし、レジスタ番号指定フィールドFR2のビット長の減らし方は、上記のように限定されない。例えば、4つのベクトルレジスタVRa~VRdのうちの少なくとも1つのベクトルレジスタのレジスタ番号を固定する(すなわち固定値とする)ことで、レジスタ番号指定フィールドのビット長を減らしてもよい。レジスタ番号を固定すると、命令コードで、レジスタ番号を指定する必要がなくなる。これにより、レジスタ番号指定フィールドのビット長が短くなり、その分、オペコードが長くなる。
【0126】
例えば、第3ベクトルレジスタVRcのレジスタ番号cを番号0(ゼロ)に固定してもよい。すなわち、レジスタ番号c=0としてもよい。この場合のベクトル命令のニーモニックは、表13の上段のように、第3ベクトルレジスタVRcを記載してもよいし、表13の下段のように、第3ベクトルレジスタVRcを記載しなくてもよい。
【0127】
【0128】
また、この場合の命令コードQ3は、
図18のように、第3ベクトルレジスタVRcのレジスタ番号0(ゼロ)以外の3つのベクトルレジスタVRa,VRb,VRdのレジスタ番号a,b,dが記載される。この場合、命令コードQ4において、第3ベクトルレジスタVRcのレジスタ番号0(ゼロ)が記載されない分、レジスタ番号指定フィールドRF3のビット長が短くなり、その分、オペコードが長くなる。
【0129】
(変形例9)
上記の実施形態では、境界値逆数a0及び傾き階級b0の組が格納されるレジスタは、ベクトルレジスタ(第3ベクトルレジスタVRc)であるが、汎用レジスタに格納されてもよい。この場合は、プロセッサ1は、
図19に示すように、境界値逆数a0を格納する汎用レジスタRcと、傾き階級b0を格納する汎用レジスタRc+1とを備えている。
図19の例では、命令コードでの汎用レジスタ番号指定フィールドを減らすため、2つの汎用レジスタRc,Rc+1のレジスタ番号c,c+1は、連番に設定されている。この場合のベクトル命令のニーモニックは、表14のようになる。
【0130】
【0131】
(その他の変形例)
上記の実施形態では、乗算処理S1、比較処理S2及び置換処理S3を1つのベクトル命令で実行するが、3つの処理S1~S3のうち、乗算処理S1及び比較処理S2を1つのベクトル命令で実行してもよい。この場合、置換処理S3は、別のベクトル命令で実行される。
【0132】
上記の実施形態では、HOG特徴量は、画像に対して生成されたが、画像以外の物理情報(例えば音(例えば音声)に対して生成されてもよい。
【0133】
実施形態1では、複数の注目画素での傾き階級を並列処理で計算するが、1つの注目画素ずつ傾き階級を計算してもよい。
【0134】
(まとめ)
本開示の第1の態様に係るプロセッサ(1)では、第1レジスタ(VRa)に第1データ要素(VD11~DV14)が格納され、第2レジスタ(VRb)に第2データ要素(VD21~DV24)が格納され、第3レジスタ(VRc)に第1の値(a0)が格納される。プロセッサ(1)は、乗算処理(S1)と比較処理(S2)とを、1つの命令で実行する。乗算処理(S1)は、第1データ要素(VD11~DV14)と第1の値(a0)とを乗算して乗算値(JT1~JT4)を計算する。比較処理(S2)は、乗算値(JT1~JT4)と第2データ要素(VD21~DV24)とを比較する。
【0135】
この構成によれば、HOG特徴量を生成するときの乗算処理(S1)及び比較処理(S2)を1つの命令で実行できるため、HOG特徴量をより速く生成できる。
【0136】
本開示の第2の態様に係るプロセッサ(1)は、第1の態様において、第4レジスタ(VRd)に第3データ要素(VD31~DV34)が格納され、第3レジスタ(VRc)に第2の値(b0)が更に格納される。上記の1つの命令は、置換処理(S3)を更に実行させる。置換処理(S3)は、比較処理(S2)の比較結果(KT1~KT4)に応じて、第4レジスタ(VRd)に格納された第3データ要素(VD31~DV34)を第2の値(b0)に置き換える。
【0137】
この構成によれば、HOG特徴量を生成するときの乗算処理(S1)、比較処理(S2)及び置換処理(S3)を1つの命令で実行できるため、HOG特徴量をより速く生成できる。
【0138】
本開示の第3の態様に係るプロセッサ(1)は、第2の態様において、第3レジスタ(VRc)に複数の組(例えば組(a0,b0)及び組(a1,b1))が格納される。複数の組はそれぞれ、第1の値(a0)及び第2の値(b0)からなる。複数の組は、第3レジスタ(VRc)において互いに異なる記憶領域に格納される。上記の1つの命令は、複数の命令ニーモニック(例えばpgrandh.[D]及びpgrandl.[D])を有する。複数の命令ニーモニックは、複数の組のうち、互いに異なる記憶領域に格納された組の第1の値及び第2の値を読み出させる。
【0139】
この構成によれば、複数の命令ニーモニック(例えばpgrandh.[D]及びpgrandl.[D])のうちのどの命令ニーモニックを用いるかによって、第3レジスタ(VRc)において、互いに異なる記憶領域に格納された組(例えば組(a0,b0)及び組(a1,b1)の第1の値及び第2の値を読み出すことができる。すなわち、第3レジスタ(VRc)において複数の組をシフトせずに、異なる記憶領域に格納された組の第1の値及び第2の値を読み出すことができる。
【0140】
本開示の第4の態様に係るプロセッサ(1)は、第2又は第3の態様において、第1データ要素(VD11~DV14)及び第2データ要素(VD21~DV24)の各々のビット幅は、第3データ要素(VD31~DV34)のビット幅と異なる。
【0141】
この構成によれば、第1データ要素(VD11~DV14)及び第2データ要素(VD21~DV24)の各々のビット幅は、第3データ要素(VD31~DV34)のビット幅に制限されないため、第1データ要素(VD11~DV14)及び第2データ要素(VD21~DV24)のビット幅の自由度を向上できる。
【0142】
本開示の第5の態様に係るプロセッサ(1)は、第2~第4の態様の何れか1つの態様において、第1レジスタ(VRa)、第2レジスタ(VRb)、第3レジスタ(VRc)及び第4レジスタ(VRd)を備える。第1レジスタ(VRa)、第2レジスタ(VRb)、第3レジスタ(VRc)及び第4レジスタ(VRd)には、識別番号としてのレジスタ番号が設定されている。第1レジスタ(VRa)、第2レジスタ(VRb)、第3レジスタ(VRc)及び第4レジスタ(VRd)のうち、少なくとも1つのレジスタ(例えばVRb)のレジスタ番号(例えばc+1)は、他のレジスタ(例えばVRc)のレジスタ番号(例えばc)に対する連番である。
【0143】
この構成によれば、他のレジスタ番号(例えばc)の連番に設定されたレジスタ(例えばVRb)のレジスタ番号(例えばc+1)は、命令コード(Q2,Q3)のレジスタ番号指定フィールド(RF2)から省略可能である。これにより、命令コード(Q2,Q3)において、レジスタ番号指定フィールド(RF2)のビット長を短くでき、その分、オペコードのビット長を長くできる。これにより、オペコードにおいて、より多くの命令を定義できる。
【0144】
本開示の第6の態様に係るプロセッサ(1)は、第2~第5の態様の何れか1つの態様において、第1レジスタ(VRa)、第2レジスタ(VRb)、第3レジスタ(VRc)及び第4レジスタ(VRd)を備える。第1レジスタ(VRa)、第2レジスタ(VRb)、第3レジスタ(VRc)及び第4レジスタ(VRd)のうち、少なくとも1つのレジスタ(例えばVRc)のレジスタ番号(例えばc)は、固定されている。
【0145】
この構成によれば、レジスタ番号を固定にしたレジスタ(VRc)のレジスタ番号(0(ゼロ))は、命令コード(Q4)のレジスタ番号指定フィールド(RF3)から省略可能である。これにより、命令コード(Q4)において、レジスタ番号指定フィールド(RF3)のビット長を短くでき、その分、オペコードのビット長を長くできる。これにより、オペコードにおいて、より多くの命令を定義できる。
【0146】
本開示の第7の態様に係るプロセッサ(1)は、第2~第6の態様の何れか1つの態様において、第1レジスタ(VRa)には、第1データ要素(VD11~DV14)が複数格納される。第2レジスタ(VRb)には、第2データ要素(VD21~DV24)が複数格納される。第4レジスタ(VRd)には、第3データ要素(VD31~DV34)が複数格納される。乗算処理(S1)は、複数の第1データ要素(VD11~DV14)と、第1の値(a0)とを乗算して乗算値(JT1~JT4)を複数生成する。複数の乗算値(JT1~JT4)は、複数の第2データ要素(VD21~DV24)と対応する。比較処理(S2)は、複数の第2データ要素(VD21~DV24)を、複数の乗算値(JT1~JT4)のうちの対応する乗算値(JT1~JT4)と比較して比較結果(KT1~KT4)を複数生成する。複数の比較結果(KT1~KT4)は、複数の第3データ要素(VD31~DV34)と対応する。置換処理(S3)は、第4レジスタ(VRd)に格納された複数の第3データ要素(VD31~DV34)を、複数の比較結果(KT1~KT4)のうちの対応する比較結果(KT1~KT4)に応じて、第2の値(b0)に置換する。
【0147】
この構成によれば、複数の第1データ要素(VR11~VR14)、複数の第2データ要素(VR21~VR24)及び複数の第3データ要素(VR31~VR34)を、対応するデータ要素毎に並列で処理できる。したがって、複数の第1データ要素(VR11~VR14)での傾き階級を同時に計算できる。この結果、HOG特徴量をより速く生成できる。
【0148】
本開示の第8の態様に係るプロセッサ(1)は、第7の態様において、第3レジスタ(VRc)に複数の組(例えば組(a0,b0)及び組(a1,b1))が格納される。複数の組はそれぞれ、第1の値及び第2の値からなる。複数の組は、一列に配列する。上記の1つの命令は、乗算処理(S1)で用いる第1の値及び置換処理(S3)で用いる第2の値として、第3レジスタ(VRc)の所定領域(m33,m34)に格納された組の第1の値(a0)及び第2の値(b0)を読み出させる。上記の1つの命令は、所定領域(m33,m34)の隣の領域(m31,m32)に格納された組(組(a1,b1))が所定領域(m33,m34)に移動するように、第3レジスタ(VRc)に格納された上記の複数の組を一方向(Y1)にシフトするシフト処理を更に実行させる。
【0149】
この構成によれば、第3レジスタ(VRc)に複数の組(例えば組(a0,b0)及び組(a1,b1))を格納し、それら複数の組をシフトすることで、複数の組を1つずつ順番に第3レジスタ(VRc)の所定領域(m33,m34)に移動させることができる。これにより、組の入れ替えが不要になり、HOG特徴量を生成する処理速度を向上できる。
【0150】
本開示の第9の態様に係るプロセッサ(1)は、第8の態様において、上記の複数の組を複数の第1の組とし、一方向(Y1)を第1シフト方向(Y1)とする。第5レジスタ(VRc+1)に複数の第2の組(例えば組(a2,b2)及び組(a3,b3))が格納され、複数の第2の組はそれぞれ、第1の値及び第2の値からなる。複数の第2の組は、一列に配列する。上記のシフト処理は、複数の第2の組を第2シフト方向(Y2)に一組分シフトする処理を含む。上記のシフト処理は、複数の第2の組のうち第2シフト方向(Y2)の一端に位置する第2の組(例えば組(a2,b2))を、第3レジスタ(VRc)における、複数の第1の組における第1シフト方向(Y1)とは反対方向の一端に位置する第1の組(例えば組(a1,b1))の隣の領域(m31,m32)に移動させる処理を含む。
【0151】
この構成によれば、複数の組(例えば組(a0,b0)から組(a3,b3)までの4つの組)が2つのレジスタ(第3レジスタ(VRc)及び第5レジスタ)に分かれて格納されても、複数の組を1つのレジスタに格納されているように処理できる。
【0152】
本開示の第10の態様に係るプロセッサ(1)は、第1~第9の態様の何れか1つの態様において、第1データ要素(VD11~DV14)及び第2データ要素(VD21~DV24)は、互いに相関するデータ要素である。
【0153】
この構成によれば、第1データ要素(VD11~DV14)及び第2データ要素(VD21~DV24)が互いに相関する場合のHOG特徴量を生成できる。
【0154】
本開示の第11の態様に係るプロセッサ(1)は、第1~第10の態様の何れか1つの態様において、上記の1つの命令は、シフト処理(S4)を更に実行させる。シフト処理(S4)は、第2レジスタ(VRb)に格納された第2データ要素(VD21~DV24)を所定のシフト量シフトする。
【0155】
この構成によれば、第2データ要素(VD21~DV24)の小数点位置を、乗算処理(S1)で計算された乗算値(JT1~JT4)の小数点位置に合わせることができ、又は近づけることができる。したがって、比較処理(S2)での演算精度を向上できる。
【0156】
本開示の第12の態様に係るプロセッサ(1)は、第1~第11の態様の何れか1つの態様において、上記の1つの命令は、所定のシフト量の値を入力可能な変数(Imm)を有する。
【0157】
この構成によれば、変数(Imm)への入力値に応じて所定のシフト量を変更できる。第1の値(a0~a7)に応じて、乗算処理(S1)で計算される乗算値(JT1~JT4)の小数点位置は変化する。このため、第1の値(a0~a7)に応じて、変数(Imm)への入力値を変えて所定のシフト量を変えることで、第1の値(a0~a7)が変わっても、比較処理(S2)での演算精度を向上できる。
【0158】
本開示の第13の態様に係るプロセッサ(1)は、第1~第12の態様の何れか1つの態様において、第3レジスタ(VRc)を備える。第3レジスタ(VRc)は、汎用レジスタである。
【0159】
この構成によれば、第3レジスタ(VRc)は汎用レジスタであるため、使用するベクトルレジスタの数を低減できる。これにより、プロセッサをより小型化できる。
【0160】
本開示の第14の態様に係るプロセッサ(1)の制御方法では、第1レジスタ(VRa)に第1データ要素(VD11~DV14)が格納され、第2レジスタ(VRb)に第2データ要素(VD21~DV24)が格納され、第3レジスタ(VRc)に第1の値(a0)が格納される。このプロセッサ(1)の制御方法では、プロセッサ(1)は、乗算処理(S1)と比較処理(S2)と、を1つの命令で実行する。乗算処理(S1)は、第1データ要素(VD11~DV14)と第1の値(a0)とを乗算して乗算値(JT1~JT4)を計算する。比較処理(S2)は、乗算値(JT1~JT4)と第2データ要素(VD21~DV24)とを比較する。
【0161】
この構成によれば、HOG特徴量を生成するときの乗算処理(S1)及び比較処理(S2)を1つの命令で実行できるため、HOG特徴量をより速く生成できる。
【符号の説明】
【0162】
1 プロセッサ
2 処理部
a0~a7 境界値逆数(第1の値)
b0~b7 傾き階級(第2の値)
RF2,RF3 レジスタ番号指定フィールド
Imm 即値(変数)
JT1~JT4 乗算値
KT1~KT4 比較結果
m31,m32 記憶領域(隣の領域)
m33,m34 記憶領域(所定領域)
Q1~Q4 命令コード
S1 乗算処理
S2 比較処理
S3 置換処理
VD11~VD14 第1データ要素
VD21~VD24 第2データ要素
VD31~VD34 第3データ要素
VRa 第1ベクトルレジスタ(第1レジスタ)
VRb 第2ベクトルレジスタ(第2レジスタ)
VRc 第3ベクトルレジスタ(第3レジスタ)
VRd 第4ベクトルレジスタ(第4レジスタ)
VRc+1 第5ベクトルレジスタ(第5レジスタ)
Y1 一方向(第1シフト方向)
Y2 一方向(第2シフト方向)