【解決手段】SIMDプロセッサ1000では、レンジ判断演算ユニットS14に2つの値を保持することができる第1レジスタおよび第2レジスタを備えており、この2つの値と、レジスタファイル部から入力されるソースデータの3つの値を用いて、レンジ判断処理の処理対象データ、レンジ判断処理の処理対象範囲を決める2つの境界値を、柔軟に設定することができる。
命令フェッチ処理と、命令デコード処理とを実行するとともに、所定の演算を実行させるためのレンジ制御信号と、レンジ方向設定信号と、第1等価制御信号と、第2等価制御信号とを生成する命令制御部と、
ソースデータを保持するレジスタを含む複数のレジスタを有するレジスタファイル部と、
条件フラグを格納することができ、前記条件フラグに基づいて、条件付き演算を実行するための条件制御信号を生成する条件レジスタ部と、
レンジ判断演算ユニットを含む第1スロットを有する命令実行部と、
を備え、
前記レンジ判断演算ユニットは、
前記レジスタファイル部から、前記ソースデータを入力し、
第1レジスタ値を格納する第1レジスタと、
第2レジスタ値を格納する第2レジスタと、
前記レンジ制御信号に応じて、前記レジスタファイル部から入力した前記ソースデータ、および、前記第2レジスタ値のいずれかを選択するセレクタと、
前記レンジ制御信号と前記レンジ方向設定信号とに基づいて、第1比較制御信号と、第2比較制御信号と、統合制御信号とを生成する制御信号生成部と、
前記制御信号生成部が生成した第1比較制御信号と、前記第1等価制御信号とに基づき、前記セレクタから出力される値と、前記第1レジスタ値とを比較し、比較結果を第1比較データとして取得する第1比較部と、
前記制御信号生成部が生成した第2比較制御信号と、前記第2等価制御信号とに基づき、前記ソースデータと、前記第2レジスタ値とを比較し、比較結果を第2比較データとして取得する第2比較部と、
前記統合制御信号に基づいて、前記第1比較データと前記第2比較データとを統合することで前記条件フラグを取得する統合部と、
を備え、
前記第1レジスタは、前記レンジ制御信号が非アクティブである場合、前記第1レジスタ値を前記ソースデータにより更新し、
前記条件レジスタ部は、前記統合部により取得された前記条件フラグを格納する、
SIMDプロセッサ。
【発明の概要】
【発明が解決しようとする課題】
【0009】
上記の輝度勾配ヒストグラムHOGを取得する処理は、例えば、画像中の全画素を処理対象として実行されるため、データ並列処理により処理を実行することが好ましい。つまり、このような処理は、SIMDプロセッサ向きの処理であると言える。
【0010】
しかしながら、輝度勾配ヒストグラムHOGを取得する処理では、勾配ベクトル方向を決定するために、勾配ベクトル角度gradient(x,y)に応じた条件分岐処理を実行する必要がある。このような条件分岐処理をSIMDプロセッサで実行する場合、条件フラグを用いて処理を実行することが考えられる。SIMDプロセッサでは、各プロセッサ・エレメント(PE)は、同じ命令を実行することしかできないため、データ値に応じて処理内容を変更する必要がある場合、プロセッサ・エレメント(PE)ごとに、条件フラグを設定し、設定された条件フラグに応じて、各プロセッサ・エレメントが、処理を実行する必要がある。つまり、SIMDプロセッサでは、条件フラグを用いて条件分岐処理を行う場合、非常に煩雑な処理を数多く実行する必要があり、その結果、演算処理効率が低下する。
【0011】
このような課題を解決するために、特許文献1の技術では、輝度勾配ヒストグラムHOGを取得する処理を専用に実行する演算器(ハードウェア)を追加し、当該演算器で、輝度勾配ヒストグラムHOGを取得する処理を実行することで演算処理効率の低下を防止している。
【0012】
しかしながら、特許文献1の技術では、輝度勾配ヒストグラムHOGのビン数、および、各ビンの範囲(角度範囲)が固定されており、ビン数や各ビンの範囲(角度範囲)を可変にすることができない。また、輝度勾配ヒストグラムHOGを取得する処理を実行する演算器(ハードウェア)は、当該処理の専用回路として構成されているため、他の用途に使用することができない。特許文献1の技術では、例えば、輝度勾配ヒストグラムHOGを取得する処理で使用されるレンジ判断処理のための回路を、他の用途で使用されるレンジ判断処理において使用することができない。このレンジ判断処理は、画像処理や画像認識処理において多用されるため、汎用性の高いハードウェアとして、SIMDプロセッサ内に構成されることが好ましい。
【0013】
そこで、本発明は、上記課題に鑑み、画像処理および画像認識で多用されるレンジ判断処理を、効率的に実行可能なハードウェア構成を有するSIMDプロセッサを実現することを目的とする。
【課題を解決するための手段】
【0014】
上記課題を解決するために、第1の発明は、命令制御部と、レジスタファイル部と、条件レジスタ部と、命令実行部と、第1レジスタと、第2レジスタと、セレクタと、制御信号生成部と、第1比較部と、第2比較部と、統合部と、を備えるSIMDプロセッサである。
【0015】
命令制御部は、命令フェッチ処理と、命令デコード処理とを実行するとともに、所定の演算を実行させるためのレンジ制御信号と、レンジ方向設定信号と、第1等価制御信号と、第2等価制御信号とを生成する。
【0016】
レジスタファイル部は、ソースデータを保持するレジスタを含む複数のレジスタを有する。
【0017】
条件レジスタ部は、条件フラグを格納することができ、条件フラグに基づいて、条件付き演算を実行するための条件制御信号を生成する。
【0018】
命令実行部は、レンジ判断演算ユニットを含む第1スロットを有する。
【0019】
そして、レンジ判断演算ユニットは、レジスタファイル部から、ソースデータを入力する。また、レンジ判断演算ユニットは、第1レジスタと、第2レジスタと、セレクタと、制御信号生成部と、第1比較部と、第2比較部と、統合部と、を備える。
【0020】
第1レジスタは、第1レジスタ値を格納する。
【0021】
第2レジスタは、第2レジスタ値を格納する。
【0022】
セレクタは、レンジ制御信号に応じて、レジスタファイル部から入力したソースデータ、および、第2レジスタ値のいずれかを選択する。
【0023】
制御信号生成部は、レンジ制御信号とレンジ方向設定信号とに基づいて、第1比較制御信号と、第2比較制御信号と、統合制御信号とを生成する。
【0024】
第1比較部は、制御信号生成部が生成した第1比較制御信号と、第1等価制御信号とに基づき、セレクタから出力される値と、第1レジスタ値とを比較し、比較結果を第1比較データとして取得する。
【0025】
第2比較部は、制御信号生成部が生成した第2比較制御信号と、第2等価制御信号とに基づき、ソースデータと、第2レジスタ値とを比較し、比較結果を第2比較データとして取得する。
【0026】
統合部は、統合制御信号に基づいて、第1比較データと第2比較データとを統合することで条件フラグを取得する。
【0027】
第1レジスタは、レンジ制御信号が非アクティブである場合、第1レジスタ値をソースデータにより更新する。
【0028】
条件レジスタ部は、統合部により取得された条件フラグを格納する。
【0029】
このSIMDプロセッサでは、命令実行部のレンジ判断演算ユニットに2つの値を保持することができる第1レジスタおよび第2レジスタを備えており、この2つの値と、レジスタファイル部から入力されるソースデータの3つの値を用いて、レンジ判断処理の処理対象データ、レンジ判断処理の処理対象範囲を決める2つの境界値を、柔軟に設定することができる。
【0030】
そして、このSIMDプロセッサでは、レンジ判断演算ユニットに、2つの比較部である第1比較部と第2比較部とを備えており、レンジ制御信号と、レンジ方向設定信号と、第1等価制御信号と、第2等価制御信号とにより、比較対象データ、および、比較範囲を柔軟に変更することができ、処理対象データが、設定された範囲内に含まれるか否かの判定結果を、条件フラグCFとして出力することができる。
【0031】
さらに、このSIMDプロセッサでは、第1レジスタの第1レジスタ値は、レンジ制御信号が非アクティブである場合、第1レジスタ値をソースデータにより更新されるので、レンジ判断処理の範囲を1サイクル毎に変更することも容易に可能となる。その結果、このSIMDプロセッサでは、例えば、ヒストグラム算出処理のレンジ判断処理(処理対象データが各ビンに含まれるか否かの判断処理)を効率良く実行することができる。
【0032】
したがって、このSIMDプロセッサでは、画像処理および画像認識で多用されるレンジ判断処理を、汎用性の高いハードウェア構成により、効率的に実行することができる。
【0033】
なお、「非アクティブ」とは、正論理では、「0」に相当する値であり、負論理では、「1」に相当する値である。そして、「アクティブ」とは、正論理では、「1」に相当する値であり、負論理では、「0」に相当する値である。
【0034】
第2の発明は、第1の発明であって、命令制御部は、命令実行部に対して、レンジ判断命令を発行する場合、レンジ判断演算ユニットに対して、条件フラグを取得する処理を実行させるためのレンジ制御信号と、レンジ方向設定信号と、第1等価制御信号と、第2等価制御信号とを出力し、レンジ判断演算ユニットに、条件フラグを取得する処理を実行させる。
【0035】
これにより、このSIMDプロセッサでは、命令制御部が、命令実行部に対して、レンジ判断命令を発行することで、レンジ判断演算ユニットに、条件フラグを取得する処理を実行させることができる。
【0036】
第3の発明は、第1または第2の発明であって、
(1)ヒストグラム算出処理を実行する場合であって、処理対象データが、ヒストグラム算出するための所定のビンの範囲に含まれているか否かを判断する場合、命令制御部は、レンジ制御信号の信号値を「0」に設定し、セレクタは、レンジ制御信号に基づいて、第2レジスタ値を選択する。
(2)処理対象データが、第1レジスタ値および第2レジスタ値により規定される範囲内であるか否かを判断する場合、命令制御部は、レンジ制御信号の信号値を「1」に設定し、セレクタは、レンジ制御信号に基づいて、レジスタファイル部から入力したソースデータを選択する。
【0037】
これにより、このSIMDプロセッサでは、レンジ制御信号の信号値を設定することで、(1)ヒストグラム算出処理のレンジ判断処理のように、サイクルごとに、レンジ判断処理の範囲を変更する処理と、(2)一定期間、レンジ判断処理の範囲を固定にして、実行されるレンジ判断処理との両方を、同じハードウェア構成で実行することができる。
【0038】
なお、信号値の「1」、「0」は、論理値であり、例えば、正論理では、所定のレベル以上の信号(H信号)を「1」に、所定のレベル未満の信号(L信号)を「0」に対応づける、あるいは、負論理では、所定のレベル以上の信号(H信号)を「0」に、所定のレベル未満の信号(L信号)を「1」に対応づけることで実現される。
【0039】
第4の発明は、第1から第3のいずれかの発明であって、ヒストグラム算出処理を実行する場合であって、処理対象データが、ヒストグラム算出するための所定のビンの範囲に含まれているか否かを判断する場合、
(1)処理対象データがビンの範囲内であるとき、条件フラグの値が「1」に設定されるように、命令制御部は、レンジ方向設定信号の信号値を「0」に設定し、
(2)処理対象データがビンの範囲外であるとき、条件フラグの値が「1」に設定されるように、命令制御部は、レンジ方向設定信号の信号値を「1」に設定する。
【0040】
これにより、このSIMDプロセッサでは、レンジ方向設定信号の信号値により、処理対象データが範囲内であるときに条件フラグの値を「1」にするか、あるいは、処理対象データが範囲外であるときに条件フラグの値を「1」にするか、を選択することができる。
【0041】
第5の発明は、第1から第4のいずれかの発明であって、
(1)命令制御部により生成される第1等価制御信号の信号値が「1」に設定されている場合、レンジ判断演算ユニットは、処理対象データに対するレンジ判断処理において、処理対象データが、レンジ判断処理の範囲を規定する2つの境界値のうちの小さい方の値である第1境界値と等しい場合、条件フラグの値を「1」にして出力する。
(2)命令制御部により生成される第2等価制御信号の信号値が「1」に設定されている場合、レンジ判断演算ユニットは、処理対象データに対するレンジ判断処理において、処理対象データが、レンジ判断処理の範囲を規定する2つの境界値のうちの大きい方の値である第2境界値と等しい場合、条件フラグの値を「1」にして出力する。
【0042】
これにより、このSIMDプロセッサでは、第1等価制御信号および/または第2等価制御信号により、処理対象データがレンジ判断処理の範囲を規定する境界値と等しい場合に、条件フラグを「1」として出力するか否かを設定することができる。
【0043】
第6の発明は、第1から第5のいずれかの発明であって、制御信号生成部は、
(1)レンジ制御信号の信号値が「1」であり、レンジ方向設定信号の信号値が「1」である場合、第1比較制御信号の信号値を「1」とし、それ以外の場合、第1比較制御信号の信号値を「0」とし、
(2)レンジ制御信号の信号値が「1」であり、レンジ方向設定信号の信号値が「0」である場合、第2比較制御信号の信号値を「1」とし、それ以外の場合、第2比較制御信号の信号値を「0」とし、
(3)レンジ制御信号の信号値が「1」であり、レンジ方向設定信号の信号値が「1」である場合、統合制御信号の信号値を「1」とし、それ以外の場合、統合制御信号の信号値を「0」とする。
【0044】
これにより、このSIMDプロセッサでは、上記条件により、各種制御信号を生成する制御信号発生部を実現することができる。
【0045】
第7の発明は、第6の発明である。
(1)第1比較部は、第1比較制御信号の信号値が「0」であり、第1等価制御信号の信号値が「0」である場合、第1比較部に入力される第1入力データDin11および第2入力データDin12が、Din11>Din12であるときは、第1比較部からの出力データD1outを「1」にして出力し、Din11≦Din12であるときは、第1比較部からの出力データD1outを「0」にして出力する。
(2)第1比較部は、第1比較制御信号の信号値が「0」であり、第1等価制御信号の信号値が「1」である場合、第1比較部に入力される第1入力データDin11および第2入力データDin12が、Din11≧Din12であるときは、第1比較部からの出力データD1outを「1」にして出力し、Din11<Din12であるときは、第1比較部からの出力データD1outを「0」にして出力する。
(3)第1比較部は、第1比較制御信号の信号値が「1」であり、第1等価制御信号の信号値が「0」である場合、第1比較部に入力される第1入力データDin11および第2入力データDin12が、Din11<Din12であるときは、第1比較部からの出力データD1outを「1」にして出力し、Din11≧Din12であるときは、第1比較部からの出力データD1outを「0」にして出力する。
(4)第1比較部は、第1比較制御信号の信号値が「1」であり、第1等価制御信号の信号値が「1」である場合、第1比較部に入力される第1入力データDin11および第2入力データDin12が、Din11≦Din12であるときは、第1比較部からの出力データD1outを「1」にして出力し、Din11>Din12であるときは、第1比較部からの出力データD1outを「0」にして出力する。
【0046】
これにより、このSIMDプロセッサでは、上記条件により、比較結果を示す信号を生成する第1比較部を実現することができる。
【0047】
第8の発明は、第6または第7の発明である。
(1)第2比較部は、第2比較制御信号の信号値が「0」であり、第2等価制御信号の信号値が「0」である場合、第2比較部に入力される第1入力データDin21および第2入力データDin22が、Din21>Din22であるときは、第2比較部からの出力データD2outを「1」にして出力し、Din21≦Din22であるときは、第2比較部からの出力データD2outを「0」にして出力する。
(2)第2比較部は、第2比較制御信号の信号値が「0」であり、第2等価制御信号の信号値が「1」である場合、第2比較部に入力される第1入力データDin21および第2入力データDin22が、Din21≧Din22であるときは、第2比較部からの出力データD2outを「1」にして出力し、Din21<Din22であるときは、第2比較部からの出力データD2outを「0」にして出力する。
(3)第2比較部は、第2比較制御信号の信号値が「1」であり、第2等価制御信号の信号値が「0」である場合、第2比較部に入力される第1入力データDin21および第2入力データDin22が、Din21<Din22であるときは、第2比較部からの出力データD2outを「1」にして出力し、Din21≧Din22であるときは、第2比較部からの出力データD2outを「0」にして出力する。
(4)第2比較部は、第1比較制御信号の信号値が「1」であり、第2等価制御信号の信号値が「1」である場合、第2比較部に入力される第1入力データDin21および第2入力データDin22が、Din21≦Din22であるときは、第2比較部からの出力データD2outを「1」にして出力し、Din21>Din22であるときは、第2比較部からの出力データD2outを「0」にして出力する。
【0048】
これにより、このSIMDプロセッサでは、上記条件により、比較結果を示す信号を生成する第2比較部を実現することができる。
【0049】
第9の発明は、第6から第8のいずれかの発明であって、統合部は、ANDゲートと、ORゲートと、第2セレクタと、を備える。
【0050】
ANDゲートは、第1比較部からの出力と第2比較部からの出力とを入力とし、第1比較部からの出力と第2比較部からの出力との論理積をとる。
【0051】
ORゲートは、第1比較部からの出力と第2比較部からの出力とを入力とし、第1比較部からの出力と第2比較部からの出力との論理和をとる。
【0052】
第2セレクタは、ANDゲートの出力、および、ORゲートの出力のいずれか一方を選択して出力する第2セレクタであって、統合制御信号の信号値が「0」である場合、ANDゲートの出力を選択して出力し、統合制御信号の信号値が「1」である場合、ORゲートの出力を選択して出力する。
【0053】
これにより、このSIMDプロセッサでは、上記条件により、統合制御信号を生成する統合部を実現することができる。
【0054】
第10の発明は、第1から第9のいずれかの発明であって、ヒストグラム算出処理を実行する場合であって、処理対象データが、ヒストグラム算出するための所定のビンの範囲に含まれているか否かを判断する場合、命令制御部は、レンジ判断命令を命令実行部に対して発行する前に、ヒストグラムの下限値を第1レジスタの第1レジスタ値に設定し、処理対象データを第2レジスタの第2レジスタ値に設定する書き込み命令を、命令実行部に対して発行する。
【0055】
これにより、このSIMDプロセッサでは、レンジ判断処理を実行する前に、書き込み命令を発行し、レンジ判断処理に用いられる境界値を、第1レジスタ値、および/または、第2レジスタ値に設定することができる。
【0056】
第11の発明は、第1から第10のいずれかの発明であって、処理対象データが、第1レジスタ値および第2レジスタ値により規定される範囲内であるか否かを判断する場合、命令制御部は、レンジ判断命令を命令実行部に対して発行する前に、レンジ判断命令の判断対象となる範囲の下限値を第1レジスタの第1レジスタ値に設定し、レンジ判断命令の判断対象となる範囲の上限値を第2レジスタの第1レジスタ値に設定する書き込み命令を、命令実行部に対して発行する。
【0057】
これにより、このSIMDプロセッサでは、レンジ判断処理を実行する前に、書き込み命令を発行し、レンジ判断処理に用いられる境界値を、第1レジスタ値、および/または、第2レジスタ値に設定することができる。
【0058】
第12の発明は、第1から第11のいずれかの発明であって、命令実行部は、第2スロットと、第3スロットとをさらに備える。
【0059】
第2スロットは、レジスタファイル部からの出力データを入力するためのN×2ビット(N:自然数)の入力ポートと、レジスタファイル部にデータを出力するためのNビットの出力ポートと、を備える。
【0060】
第3スロットは、レジスタファイル部からの出力データを入力するためのN×2ビット(N:自然数)の入力ポートと、レジスタファイル部にデータを出力するためのNビットの出力ポートと、を備える。
【0061】
また、第1スロットは、レジスタファイル部からの出力データを入力するためのN×2ビット(N:自然数)の入力ポートと、レジスタファイル部にデータを出力するためのNビットの出力ポートと、命令制御部から命令実行部に対して、第1レジスタおよび前記第2レジスタの少なくとも一方にデータを書き込むための書き込み命令が発行された場合、当該書き込み命令を実行するための書き込み演算ユニットと、を備える。
【0062】
第2スロットは、ロード/ストア命令を実行するためのロード/ストア・ユニットを備える。
【0063】
第3スロットは、条件フラグがアクティブである場合、加算処理を実行し、条件フラグがアクティブでない場合、加算処理を実行しない条件付き加算ユニットを備える。
【0064】
これにより、このSIMDプロセッサでは、レンジ判断処理を効率良く実行することができる。つまり、このSIMDプロセッサでは、レンジ判断処理を行うスロットと、データのロード/ストア処理を行うスロットと、条件付き演算処理を行うスロットとが、異なるようにできるため、並列処理の効率を上げることができる。その結果、このSIMDプロセッサでは、レンジ判断処理のような条件付き判断処理の演算効率を向上させることができる。
【発明の効果】
【0065】
本発明によれば、画像処理および画像認識で多用されるレンジ判断処理を、効率的に実行可能なハードウェア構成を有するSIMDプロセッサを実現することができる。
【発明を実施するための形態】
【0067】
[第1実施形態]
第1実施形態について、図面を参照しながら、以下、説明する。
【0068】
<1.1:SIMDプロセッサの構成>
図1は、第1実施形態に係るSIMDプロセッサ1000の概略構成図である。
【0069】
SIMDプロセッサ1000は、Nビット(N:自然数)単位の演算、および/または、2×Nビット単位の演算を行うプロセッサである。
【0070】
なお、以下では、説明便宜のため、N=16、つまり、SIMDプロセッサ1000が、16ビット単位の演算および/または32ビット単位の演算を行うプロセッサである場合について、説明する。
【0071】
SIMDプロセッサ1000は、
図1に示すように、命令制御部1と、レジスタファイル部2と、命令実行部3と、条件レジスタ部4と、命令メモリM1と、データメモリM2とを備える。
【0072】
命令制御部1は、命令メモリM1から命令を読み出し(命令フェッチ処理を行い)、読み出した命令をデコードする(命令デコード処理を行う)。そして、命令制御部1は、命令デコード処理の結果に基づいて、レジスタファイル部2を制御するための制御信号Ctl1を生成し、生成した制御信号Ctl1をレジスタファイル部2に出力する。
【0073】
また、命令制御部1は、命令デコード処理の結果に基づいて、命令実行部3を制御するための制御信号Ctl2を生成し、生成した制御信号Ctl2を命令実行部3に出力する。
【0074】
レジスタファイル部2は、複数のレジスタを有しており、制御信号Ctl1に基づいて、所定のレジスタのデータを命令実行部3の所定のスロットに出力する。また、レジスタファイル部2は、制御信号Ctl1に基づいて、命令実行部3から出力されるデータを、所定のレジスタに入力されるように制御する。
【0075】
命令実行部3は、1サイクル(1クロックサイクル)で複数の命令を実行するために、1サイクルで同時に演算可能な複数の命令スロットを備える。以下では、説明便宜のため、命令スロット数が「3」である場合について説明する。
【0076】
命令実行部3は、
図1に示すように、3つのスロット、すなわち、第1スロットS1、第2スロットS2、および、第3スロットS3を有している。
【0077】
第3スロットS3は、データメモリM2に対して16ビットのデータのロード/ストアを行うロード/ストアユニットS31を備える。
【0078】
第2スロットS2は、16ビットデータの条件付き加算処理を行う条件付き加算ユニットS21と、乱数を生成する演算を行う乱数生成ユニットS22と、2つの16ビットのデータを乗算する処理を行う乗算ユニットS23と、を備える。なお、「条件付き加算処理」は、条件付き加減算処理あるいは条件付き減算処理を含む概念である(以下、同様)。
【0079】
第1スロットS1は、16ビットデータの加算処理を行う加算ユニットS11と、16ビットデータに対して論理演算を行う論理演算ユニットS12と、データ書き込み演算ユニットS13と、レンジ判断処理を行うレンジ判断演算ユニットS14と、を備える。なお、「加算処理」は、加減算処理あるいは減算処理を含む概念である(以下、同様)。
【0080】
ここで、レンジ判断演算ユニットS14の構成例(一例)について、
図2〜
図5を用いて説明する。
【0081】
図2は、レンジ判断演算ユニットS14の構成例(一例)を示す図であり、命令制御部1と、レジスタファイル部2と、条件レジスタ部4と、レンジ判断演算ユニットS14を抽出して図示した概略構成図である。
【0082】
図3は、レンジ判断演算ユニットS14の制御信号生成部303の構成(一例)を示す図である。
【0083】
図4は、レンジ判断演算ユニットS14の第1比較部305の構成(一例)を示す図である。
【0084】
図5は、レンジ判断演算ユニットS14の統合部307の構成(一例)を示す図である。
【0085】
図2に示すように、レンジ判断演算ユニットS14は、第1レジスタ301と、第2レジスタ302と、制御信号生成部303と、セレクタ304と、第1比較部305と、第2比較部306と、統合部307と、を備える。
【0086】
なお、
図1に制御信号CtlRとして示している信号は、
図2における制御信号range、レンジ方向設定信号dir、第1等価制御信号eq1、および、第2等価制御信号eq2に相当する。
【0087】
第1レジスタ301は、第1レジスタ値val1を格納するためのレジスタである。第1レジスタ値val1は、データ書き込み演算ユニットS13により、設定される(データ書き込み処理が実行される)。第1レジスタ301は、第1レジスタ値val1を第1比較部305に出力する。
【0088】
また、第1レジスタ301は、命令制御部1から出力される制御信号rangeを入力とする。さらに、第1レジスタ301は、レジスタファイル部2から出力されるデータsrcを入力することができるように構成されている。第1レジスタ301は、レジスタファイル部2からデータsrcを入力した場合、命令制御部1からの制御信号rangeに従い、第1レジスタ値val1をデータsrcに書き換え、当該データsrcを第1比較部305に出力する。
【0089】
第2レジスタ302は、第2レジスタ値val2を格納するためのレジスタである。第2レジスタ値val2は、データ書き込み演算ユニットS13により、設定される(データ書き込み処理が実行される)。第2レジスタ302は、第2レジスタ値val2を、セレクタ304および第2比較部306に出力する。
【0090】
制御信号生成部303は、
図2に示すように、命令制御部1から出力される制御信号range(1ビット信号)と、レンジ方向設定信号dir(1ビット信号)とを入力とする。
【0091】
制御信号生成部303は、
図3に示すように、3つのANDゲート3031、3033、3034と、NOTゲート3032とを備える。
【0092】
ANDゲート3031は、制御信号rangeと、レンジ方向設定信号dirとを入力とし、制御信号rangeと、レンジ方向設定信号dirとに対して、AND演算を行い、その演算結果を信号値とする制御信号cctl1として取得する。ANDゲート3031は、取得した制御信号cctl1を第1比較部305に出力する。
【0093】
NOTゲート3032は、レンジ方向設定信号dirを入力とし、レンジ方向設定信号dirに対して、NOT演算を行い、その演算結果をANDゲート3033に出力する。
【0094】
ANDゲート3033は、制御信号rangeと、NOTゲート3032の出力とを入力とし、制御信号rangeと、NOTゲート3032の出力とに対して、AND演算を行い、その演算結果を信号値とする制御信号cctl2として取得する。ANDゲート3033は、取得した制御信号cctl2を第2比較部306に出力する。
【0095】
ANDゲート3034は、制御信号rangeと、レンジ方向設定信号dirとを入力とし、制御信号rangeと、レンジ方向設定信号dirとに対して、AND演算を行い、その演算結果を信号値とする制御信号bctlとして取得する。ANDゲート3034は、取得した制御信号bctlを統合部307に出力する。
【0096】
セレクタ304は、レジスタファイル部2から出力されるデータsrcと、第2レジスタ302から出力される第2レジスタ値val2とを入力とする。また、セレクタ304は、命令制御部1から出力される制御信号rangeを入力とする。セレクタ304は、制御信号rangeの信号値に基づいて、レジスタファイル部2から出力されるデータsrc、および、第2レジスタ302から出力される第2レジスタ値val2のいずれか一方を選択して、第1比較部305に出力する。
【0097】
第1比較部305は、
図4に示すように、減算器3051と、入力データの値が「0」であるか否かを検出する非ゼロ判定器3052と、NOTゲート3053と、ANDゲート3054と、ORゲート3055と、XORゲート3056と、NOTゲート3057と、ORゲート3058と、ANDゲート3059と、を備える。第1比較部305は、2つの入力データDin1、Din2の値の大小関係を検出する。なお、第1比較部305の入力データDin1は、セレクタ304から出力されるデータであり、入力データDin2は、第1レジスタ301から出力されるデータである。
【0098】
減算器3051は、入力データDin1と、入力データDin2とを入力とし、減算処理を行う。つまり、減算器3051は、
Dsub=Din1−Din2
により、減算結果データDsubを取得し、取得したデータDsubを非ゼロ判定器3052に出力する。
【0099】
また、減算器3051は、減算結果データDsubの最上位ビット(MSB)をORゲート3055に出力する。なお、減算結果データDsubがゼロまたは正の値であるとき、減算結果データDsubの最上位ビット(MSB)は、「0」であり、減算結果データDsubが負の値であるとき、減算結果データDsubの最上位ビット(MSB)は、「1」である。
【0100】
非ゼロ判定器3052は、減算器3051から出力される減算結果データDsubを入力とする。非ゼロ判定器3052は、
(1)減算結果データDsubが「0」である場合、判定結果信号non_zero_detの信号値を「0」に設定し、
(2)減算結果データDsubが「0」でない場合、判定結果信号non_zero_detの信号値を「1」に設定する。
【0101】
そして、非ゼロ判定器3052は、判定結果信号non_zero_detをNOTゲート3053とORゲート3058とに出力する。
【0102】
NOTゲート3053は、非ゼロ判定器3052の出力を入力とし、入力された値を反転させて、ANDゲート3054に出力する。
【0103】
ANDゲート3054は、第1等価制御信号eq1と、NOTゲート3053の出力とを入力とし、両者に対してAND演算を行い、その結果をORゲート3055に出力する。
【0104】
ORゲート3055は、減算結果データDsubの最上位ビット(MSB)と、ANDゲート3054の出力を入力とし、両者に対してOR演算を行い、その結果をXORゲート3056に出力する。
【0105】
XORゲート3056は、制御信号生成部303から出力される制御信号cctl1(
図4では、「cctl」と表記。)と、ORゲート3055の出力とを入力とする。XORゲート3056は、入力された2つのデータに対して、XOR演算を行い、演算結果をNOTゲート3057に出力する。
【0106】
NOTゲート3057は、XORゲート3056からの出力を入力とする。NOTゲート3057は、入力されたデータに対して、NOT演算を行い、演算結果をANDゲート3059に出力する。
【0107】
ORゲート3058は、非ゼロ判定器3052から出力される判定結果信号non_zero_detと、命令制御部1から出力される等価条件を制御するための信号である制御信号eq1(以下、この制御信号を「第1等価制御信号」という。)と、を入力とする。ORゲート3058は、入力された2つのデータに対して、OR演算を行い、演算結果をAND3059に出力する。
【0108】
ANDゲート3059は、NOTゲート3057からの出力と、ORゲート3058からの出力とを入力とする。ANDゲート3059は、入力された2つのデータに対して、AND演算を行い、演算結果を出力データD1として、統合部307に出力する。
【0109】
第2比較部306は、第1比較部305と同様の構成を有している。なお、第2比較部306では、
図4で示した制御信号cctlは、制御信号生成部303から出力される制御信号cctl2であり、
図4で示した制御信号eqは、命令制御部1から出力される等価条件を制御するための制御信号eq2(以下、この制御信号を「第2等価制御信号」という。)である。また、第2比較部306は、比較結果を出力データD2として、統合部307に出力する。また、第2比較部306では、
図4の入力データDin1は、レジスタファイル部2から出力されるデータsrcであり、
図4の入力データDin2は、第2レジスタ302から出力される第2レジスタ値val2である。
【0110】
統合部307は、
図5に示すように、ANDゲート3071と、ORゲート3072と、セレクタ3073とを備える。
【0111】
ANDゲート3071は、第1比較部305から出力される出力データD1と、第2比較部306から出力される出力データD2と、を入力とする。ANDゲート3071は、2つの入力されたデータに対して、AND演算を行い、その演算結果をセレクタ3073に出力する。
【0112】
ORゲート3072は、第1比較部305から出力される出力データD1と、第2比較部306から出力される出力データD2と、を入力とする。ORゲート3072は、2つの入力されたデータに対して、OR演算を行い、その演算結果をセレクタ3073に出力する。
【0113】
セレクタ3073は、ANDゲート3071から出力されるデータと、ORゲート3072から出力されるデータとを入力とする。また、セレクタ3073は、制御信号生成部303から出力される制御信号bctlを入力とする。セレクタ3073は、制御信号bctlの信号値に基づいて、入力された2つのデータのいずれか一方を選択し、選択したデータを、条件フラグCFとして、条件レジスタ部4に出力する。
【0114】
条件レジスタ部4は、命令実行部3から出力される条件フラグCFを入力とする。条件レジスタ部4は、入力された条件フラグCFを格納するレジスタを有している。また、条件レジスタ部4は、条件フラグCFに応じて、命令実行部3に、所定の処理を実行させるための制御信号CFctlを生成し、生成した制御信号CFctlを命令実行部3に出力する。例えば、
図1に示す場合、条件レジスタ部4は、命令実行部3のレンジ判断演算ユニットS14から出力される条件フラグCFを入力し、所定のレジスタに格納する。そして、条件レジスタ部4は、当該条件フラグCFに基づいて、制御信号CFctlを生成し、例えば、生成した制御信号CFctlを命令実行部3の条件付き加算ユニットS21に出力する。
【0115】
命令メモリM1は、命令制御部1がフェッチする命令および/またはデータを記憶するためのメモリである。そして、命令メモリM1は、命令制御部1によりアクセス可能なメモリである。
【0116】
データメモリM2は、命令実行部3によりロード/ストアされるデータを記憶するためのメモリである。データメモリM2は、命令実行部3の第3スロットS3のロード/ストアユニットS31によりアクセス可能なメモリである。
【0117】
<1.2:SIMDプロセッサの動作>
以上のように構成されたSIMDプロセッサ1000の動作について、以下、図面を参照しながら、説明する。
【0118】
以下では、レンジ判断処理を用いて実行される処理として、(1)輝度勾配ヒストグラム算出処理と、(2)パーティクルフィルタ処理とを例に、SIMDプロセッサ1000の動作について、説明する。
(1.2.1:ヒストグラム算出処理)
まず、SIMDプロセッサ1000において、輝度勾配ヒストグラム算出処理を実行する場合について説明する。
【0119】
この場合、以下の(手順1)〜(手順4)により処理が実行される。
【0120】
(手順1):
SIMDプロセッサ1000において、例えば、画像上のN画素×M画素(N、M:自然数)からなる矩形の画像領域を輝度勾配ヒストグラム算出処理の対象領域に設定し、当該画像領域に含まれる画素ごとに、勾配ベクトル角度gradient(x,y)を算出する。なお、勾配ベクトル角度gradient(x,y)は、処理対象画素である注目画素の座標を(x,y)とし、その画素値をI(x,y)と表記すると、以下のように算出される。
(1)処理対象の画像領域に含まれる画素(注目画素)ごとに、注目画素と、当該注目画素と左右に隣接する画素との間のX方向の勾配強度dx(x,y)が、
dx(x,y)=I(x+1,y)−I(x−1,y)
により算出される。
【0121】
また、注目画素と、当該注目画素と上下に隣接する画素との間のY方向の勾配強度dy(x,y)が、
dy(x,y)=I(x,y+1)−I(x,y−1)
により算出される。
(2)次に、Y方向の勾配強度dy(x,y)をX方向の勾配強度dx(x,y)で除算して取得した値に基づいて、注目画素の勾配ベクトル角度gradient(x,y)が、
gradient(x,y)=atan(dy(x,y)/dx(x,y))
atan():逆正接関数(アークタンジェント)
により、算出される。
【0122】
上記のようにして算出された勾配ベクトル角度gradient(x,y)は、例えば、データメモリM2の連続したメモリ領域に格納される。
【0123】
(手順2):
SIMDプロセッサ1000において、輝度勾配ヒストグラムの各ビンの範囲を決定するための境界値を設定し、設定した境界値は、例えば、データメモリM2の連続したメモリ領域に格納される。
【0124】
(手順3):
SIMDプロセッサ1000において、輝度勾配ヒストグラムの各ビンのヒストグラム値(処理対象データが各ビンの範囲に含まれると判定されたときにカウントされるカウント値(頻度累積値))を格納する領域を、レジスタファイル部2に確保し(例えば、レジスタファイル部2において、各ビンのヒストグラム値を格納するためのレジスタを確保し)、各ビンのヒストグラム値を「0」に初期化する。
【0125】
(手順4):SIMDプロセッサ1000において、輝度勾配ヒストグラムを生成するための命令を実行する。この輝度勾配ヒストグラムを生成するための命令の命令スケジュールの一例を
図6に示す。
図6には、(1)各サイクルにおいて、各スロットSlot1〜3に割り当てられる演算を示した図(左図)と、(2)各サイクルにおいて設定されている、第1レジスタ値val1、第2レジスタ値val2、および、レジスタファイル部2からレンジ判断演算ユニットS14に入力されるデータsrcを示した図(右図)とを示している。
【0126】
ここで、
図6を用いて、輝度勾配ヒストグラムを生成するための命令スケジュールについて説明する。なお、説明便宜のため、ビン数を「4」として説明する。
【0127】
(Cyc0):
サイクル0において、第3スロットのL/SユニットS31は、勾配ベクトル角度grad1をロードする。そして、ロードされた勾配ベクトル角度grad1は、
図1に示すように、データパスDo3を介して、レジスタファイル部2に出力される。レジスタファイル部2は、第3スロットS3から出力された勾配ベクトル角度grad1を、所定のレジスタに格納する。
【0128】
(Cyc1):
サイクル1において、命令制御部1は、命令実行部3に対して、データ書き込み命令(Write命令)を発行する。命令実行部3の第1スロットS1のデータ書き込み演算ユニットS13は、当該データ書き込み命令(Write命令)に基づいて、データ書き込み処理を実行する。具体的には、データ書き込み演算ユニットS13は、レジスタファイル部2から、データパスDi11、Di12を介して、サイクル0でロードした勾配ベクトル角度grad1と、ヒストグラムの下限値histL1を入力し、当該2つの入力されたデータに対して、データ書き込み処理を実行する。つまり、データ書き込み演算ユニットS13は、
(第1レジスタ値val1)=histL1
(第2レジスタ値val2)=grad1
となるように、第1レジスタ値および第2レジスタ値を設定する。
【0129】
なお、ヒストグラムの下限値histL1は、レジスタファイル部2の所定のレジスタに保持されているものとする。
【0130】
また、第3スロットのL/SユニットS31は、輝度勾配ヒストグラムの次の境界値histL2を、データメモリM2からロードする。ロードされた輝度勾配ヒストグラムの次の境界値histL2は、データパスDo3を介して、レジスタファイル部2に出力される。
【0131】
(Cyc2):
サイクル2において、命令制御部1は、命令実行部3に対して、レンジ判断命令(RngD)を発行する。命令実行部3の第1スロットS1のレンジ判断演算ユニットS14は、当該レンジ判断命令(RngD命令)に基づいて、レンジ判断処理を実行する。具体的には、レンジ判断演算ユニットS14は、レジスタファイル部2から、サイクル1でロードされたヒストグラムの境界値histL2をデータsrcとして入力する。
【0132】
SIMDプロセッサ1000において、輝度勾配ヒストグラムの算出処理を行う場合、命令制御部1は、制御信号rangeを「0」に設定する。したがって、
図2に示すように、セレクタ304は、第2レジスタ302からの入力を、第1比較部305に出力する。
【0133】
また、制御信号rangeが「0」であるので、制御信号生成部303により生成される制御信号cctl1およびcctl2は、ともに、その信号値が「0」に設定される。
【0134】
ここで、まず、第1比較部305の動作(サイクル2の動作)について、説明する。
【0135】
第1比較部305の入力は、以下のようになる。なお、第1等価制御信号eq1は、その信号値が「0」に設定されているとする。
【0136】
cctl1=0
Din1=val2=grad1
Din2=val1=histL1
src=histL2
eq1=0
(1)cctl1、Din1、Din2、src、eq1が上記のように設定されている場合であって、かつ、Din2<Din1、つまり、histL1<grad1である場合、
Dsub=Din1―Din2>0
MSB=0
non_zero_det=1
であるので、ANDゲート3059から出力されるデータD1は、「1」となる。
(2)cctl1、Din1、Din2、src、eq1が上記のように設定されている場合であって、かつ、Din2>Din1、つまり、histL1>grad1である場合、
Dsub=Din1―Din2<0
MSB=1
non_zero_det=1
であるので、ANDゲート3059から出力されるデータD1は、「0」となる。
(3)cctl1、Din1、Din2、src、eq1が上記のように設定されている場合であって、かつ、Din2=Din1、つまり、histL1=grad1である場合、
Dsub=Din1―Din2=0
MSB=0
non_zero_det=0
であるので、ANDゲート3059から出力されるデータD1は、「0」となる。
【0137】
なお、この場合((3)の場合)において、eq1=1に設定されているときは、ORゲート3058の出力が「1」となり、ANDゲート3059の出力が「1」となる。つまり、出力データD1は、「1」となる。
【0138】
以上のように、
cctl1=0
Din1=val2=grad1
Din2=val1=histL1
src=histL2
eq1=0
である場合において、Din2<Din1、つまり、histL1<grad1であるとき、第1比較部305の出力データD1が「1」となり、それ以外の場合、第1比較部305の出力データは「0」となる。
【0139】
なお、eq1=1に設定すると、Din2≦Din1、つまり、histL1≦grad1であるとき、第1比較部305の出力データD1が「1」となり、それ以外の場合、第1比較部305の出力データD1は「0」となる。
【0140】
次に、第2比較部306の動作(サイクル2の動作)について説明する。
【0141】
第2比較部306の入力は、以下のようになる。なお、第2等価制御信号eq2は、その信号値が「0」に設定されているとする。
【0142】
cctl2=0
Din1=src=histL2
Din2=val2=grad1
eq2=0
(1)cctl2、Din1、Din2、eq2が上記のように設定されている場合であって、かつ、Din2<Din1、つまり、grad1<histL2である場合、
Dsub=Din1―Din2>0
MSB=0
non_zero_det=1
であるので、ANDゲート3059から出力されるデータD2(第2比較部306の出力データD2)は、「1」となる。
(2)cctl2、Din1、Din2、eq2が上記のように設定されている場合であって、かつ、Din2>Din1、つまり、grad1>histL2である場合、
Dsub=Din1―Din2<0
MSB=1
non_zero_det=1
であるので、ANDゲート3059から出力されるデータD2(第2比較部306の出力データD2)は、「0」となる。
(3)cctl2、Din1、Din2、eq2が上記のように設定されている場合であって、かつ、Din2=Din1、つまり、grad1=histL2である場合、
Dsub=Din1―Din2=0
MSB=0
non_zero_det=0
であるので、ANDゲート3059から出力されるデータD1は、「0」となる。
【0143】
なお、この場合((3)の場合)において、eq2=1に設定されているときは、ORゲート3058の出力が「1」となり、ANDゲート3059の出力が「1」となる。つまり、第2比較部306の出力データD2は、「1」となる。
【0144】
以上のように、
cctl2=0
Din1=src=histL2
Din2=val2=grad1
eq2=0
である場合において、Din2<Din1、つまり、grad1<histL2であるとき、第2比較部306の出力データD2が「1」となり、それ以外の場合、第2比較部306の出力データD2は「0」となる。
【0145】
なお、eq2=1に設定すると、Din2≦Din1、つまり、grad1≦histL2であるとき、第2比較部306の出力データD2が「1」となり、それ以外の場合、第2比較部306の出力データD2は「0」となる。
【0146】
次に、統合部307の動作(サイクル2の動作)について説明する。
【0147】
range=0であるので、制御信号生成部303から出力される制御信号bctlの信号値は「0」である。したがって、セレクタ3073は、ANDゲート3071の出力を選択して出力する。つまり、統合部307は、第1比較部305の出力データD1と、第2比較部306の出力データD2とのAND演算結果を、条件フラグCFとして、条件レジスタ部4に出力する。
【0148】
すなわち、サイクル2において、レンジ判断演算ユニットS14は、条件フラグCFを、以下の値に設定して、条件レジスタ部4に出力する。
(1)eq1=0、かつ、eq2=0である場合、
(1A)histL1<grad1<histL2であるとき、CF=1
(1B)上記(1A)以外のとき、CF=0
(2)eq1=1、かつ、eq2=0である場合、
(2A)histL1≦grad1<histL2であるとき、CF=1
(2B)上記(2A)以外のとき、CF=0
(3)eq1=0、かつ、eq2=1である場合、
(3A)histL1<grad1≦histL2であるとき、CF=1
(3B)上記(3A)以外のとき、CF=0
(4)eq1=1、かつ、eq2=1である場合、
(4A)histL1≦grad1≦histL2であるとき、CF=1
(4B)上記(4A)以外のとき、CF=0
つまり、サイクル2において、レンジ判断演算ユニットS14は、第2レジスタに設定されている値grad1(=val2)が、境界値histL1およびhistL2により規定される範囲に含まれるか否かの判定を行い、その判定結果を示す条件フラグCFを条件レジスタ部4に出力する。
【0149】
また、サイクル2において、第3スロットのL/SユニットS31は、輝度勾配ヒストグラムの次の境界値histL3を、データメモリM2からロードする。ロードされた輝度勾配ヒストグラムの次の境界値histL3は、データパスDo3を介して、レジスタファイル部2に出力される。
【0150】
(Cyc3):
サイクル3において、命令制御部1は、命令実行部3に対して、条件付き加算命令(Addt命令)を発行する。命令実行部3の第2スロットS2の条件付き加算ユニットS21は、条件付き加算命令(Addt命令)に基づいて、条件付き加算処理を実行する。具体的には、条件付き加算ユニットS21は、レジスタファイル部2から、第1ビン(ヒストグラム下限値histL1と、境界値histL2とにより規定されるビン)のヒストグラム値hist_bin1を入力し、条件レジスタ部4から出力される制御信号CFctlに基づいて、ヒストグラム値hist_bin1に対して、条件付き加算処理を実行する。
【0151】
サイクル2において、レンジ判断演算ユニットS14により、処理対象画素の勾配ベクトル角度grad1が、第1ビン内の値(ヒストグラム下限値histL1と、境界値histL2とにより規定される範囲内の値)であると判定された場合、CF=1となり、当該条件フラグCFの値に基づいて、条件レジスタ部4は、制御信号CFctlの信号値を「1」に設定し、条件付き加算ユニットS21に出力する。そして、条件付き加算ユニットS21は、制御信号CFctlの信号値が「1」であるので、第1ビンのヒストグラム値hist_bin1を、1だけインクリメントする。つまり、条件付き加算ユニットS21は、第1ビンのヒストグラム値hist_bin1に「1」を加算した値を取得し、取得した値を、データパスDo2を介して、レジスタファイル部2に出力する。レジスタファイル部2は、条件付き加算ユニットS21により条件付き加算処理された値を、第1ビンのヒストグラム値hist_bin1として、所定のレジスタに格納する。
【0152】
一方、サイクル2において、レンジ判断演算ユニットS14により、処理対象画素の勾配ベクトル角度grad1が、第1ビン内の値(ヒストグラム下限値histL1と、境界値histL2とにより規定される範囲内の値)ではないと判定された場合、CF=0となり、当該条件フラグCFの値に基づいて、条件レジスタ部4は、制御信号CFctlの信号値を「0」に設定し、条件付き加算ユニットS21に出力する。そして、条件付き加算ユニットS21は、制御信号CFctlの信号値が「0」であるので、第1ビンのヒストグラム値hist_bin1に対する加算処理を実行しない。つまり、この場合、レジスタファイル部2で保持されている第1ビンのヒストグラム値hist_bin1は、更新されることはなく、そのままの値が保持されることになる。
【0153】
また、サイクル3では、レンジ判断演算ユニットS14は、
val1=histL2
val2=grad1
src=histL3
として、サイクル2で説明したのと同様の処理を実行する。
【0154】
これにより、サイクル3において、レンジ判断演算ユニットS14は、条件フラグCFを、以下の値に設定して、条件レジスタ部4に出力する。
(1)eq1=0、かつ、eq2=0である場合、
(1A)histL2<grad1<histL3であるとき、CF=1
(1B)上記(1A)以外のとき、CF=0
(2)eq1=1、かつ、eq2=0である場合、
(2A)histL2≦grad1<histL3であるとき、CF=1
(2B)上記(2A)以外のとき、CF=0
(3)eq1=0、かつ、eq2=1である場合、
(3A)histL2<grad1≦histL3であるとき、CF=1
(3B)上記(3A)以外のとき、CF=0
(4)eq1=1、かつ、eq2=1である場合、
(4A)histL2≦grad1≦histL3であるとき、CF=1
(4B)上記(4A)以外のとき、CF=0
つまり、サイクル3において、レンジ判断演算ユニットS14は、第2レジスタに設定されている値grad1(=val2)が、境界値histL2およびhistL3により規定される範囲に含まれるか否かの判定を行い、その判定結果を示す条件フラグCFを条件レジスタ部4に出力する。
【0155】
なお、第1レジスタ301は、制御信号rangeの信号値が「0」である場合、サイクル2で、レジスタファイル部2から入力されたsrc値(=histL2)を、サイクル3で、第1レジスタ値val1として、第1比較部305に出力するように、第1レジスタ値val1を更新する。
【0156】
また、サイクル3において、第3スロットのL/SユニットS31は、輝度勾配ヒストグラムの次の境界値histL4を、データメモリM2からロードする。ロードされた輝度勾配ヒストグラムの次の境界値histL4は、データパスDo3を介して、レジスタファイル部2に出力される。
【0157】
(Cyc4):
サイクル4において、命令制御部1は、命令実行部3に対して、条件付き加算命令(Addt命令)を発行する。命令実行部3の第2スロットS2の条件付き加算ユニットS21は、条件付き加算命令(Addt命令)に基づいて、条件付き加算処理を実行する。具体的には、条件付き加算ユニットS21は、レジスタファイル部2から、第2ビン(ヒストグラム境界値histL2と、境界値histL3とにより規定されるビン)のヒストグラム値hist_bin2を入力し、条件レジスタ部4から出力される制御信号CFctlに基づいて、ヒストグラム値hist_bin2に対して、条件付き加算処理を実行する。
【0158】
サイクル3において、レンジ判断演算ユニットS14により、処理対象画素の勾配ベクトル角度grad1が、第2ビン内の値(ヒストグラム境界値histL2と、境界値histL3とにより規定される範囲内の値)であると判定された場合、CF=1となり、当該条件フラグCFの値に基づいて、条件レジスタ部4は、制御信号CFctlの信号値を「1」に設定し、条件付き加算ユニットS21に出力する。そして、条件付き加算ユニットS21は、制御信号CFctlの信号値が「1」であるので、第2ビンのヒストグラム値hist_bin2を、1だけインクリメントする。つまり、条件付き加算ユニットS21は、第2ビンのヒストグラム値hist_bin2に「1」を加算した値を取得し、取得した値を、データパスDo2を介して、レジスタファイル部2に出力する。レジスタファイル部2は、条件付き加算ユニットS21により条件付き加算処理された値を、第2ビンのヒストグラム値hist_bin2として、所定のレジスタに格納する。
【0159】
一方、サイクル3において、レンジ判断演算ユニットS14により、処理対象画素の勾配ベクトル角度grad1が、第2ビン内の値(ヒストグラム境界値histL2と、境界値histL3とにより規定される範囲内の値)ではないと判定された場合、CF=0となり、当該条件フラグCFの値に基づいて、条件レジスタ部4は、制御信号CFctlの信号値を「0」に設定し、条件付き加算ユニットS21に出力する。そして、条件付き加算ユニットS21は、制御信号CFctlの信号値が「0」であるので、第2ビンのヒストグラム値hist_bin2に対する加算処理を実行しない。つまり、この場合、レジスタファイル部2で保持されている第2ビンのヒストグラム値hist_bin2は、更新されることはなく、そのままの値が保持されることになる。
【0160】
また、サイクル4では、レンジ判断演算ユニットS14は、
val1=histL3
val2=grad1
src=histL4
として、サイクル2で説明したのと同様の処理を実行する。
【0161】
これにより、サイクル4において、レンジ判断演算ユニットS14は、条件フラグCFを、以下の値に設定して、条件レジスタ部4に出力する。
(1)eq1=0、かつ、eq2=0である場合、
(1A)histL3<grad1<histL4であるとき、CF=1
(1B)上記(1A)以外のとき、CF=0
(2)eq1=1、かつ、eq2=0である場合、
(2A)histL3≦grad1<histL4であるとき、CF=1
(2B)上記(2A)以外のとき、CF=0
(3)eq1=0、かつ、eq2=1である場合、
(3A)histL3<grad1≦histL4であるとき、CF=1
(3B)上記(3A)以外のとき、CF=0
(4)eq1=1、かつ、eq2=1である場合、
(4A)histL3≦grad1≦histL4であるとき、CF=1
(4B)上記(4A)以外のとき、CF=0
つまり、サイクル4において、レンジ判断演算ユニットS14は、第2レジスタに設定されている値grad1(=val2)が、境界値histL3およびhistL4により規定される範囲に含まれるか否かの判定を行い、その判定結果を示す条件フラグCFを条件レジスタ部4に出力する。
【0162】
なお、第1レジスタ301は、サイクル3で、レジスタファイル部2から入力されたsrc値(=histL3)を、サイクル4で、第1レジスタ値val1として、第1比較部305に出力するように、第1レジスタ値val1を更新する。
【0163】
また、サイクル4において、第3スロットのL/SユニットS31は、輝度勾配ヒストグラムの次の境界値histL5を、データメモリM2からロードする。ロードされた輝度勾配ヒストグラムの次の境界値histL5は、データパスDo3を介して、レジスタファイル部2に出力される。
【0164】
(Cyc5):
サイクル5において、命令制御部1は、命令実行部3に対して、条件付き加算命令(Addt命令)を発行する。命令実行部3の第2スロットS2の条件付き加算ユニットS21は、条件付き加算命令(Addt命令)に基づいて、条件付き加算処理を実行する。具体的には、条件付き加算ユニットS21は、レジスタファイル部2から、第3ビン(ヒストグラム境界値histL3と、境界値histL4とにより規定されるビン)のヒストグラム値hist_bin3を入力し、条件レジスタ部4から出力される制御信号CFctlに基づいて、ヒストグラム値hist_bin3に対して、条件付き加算処理を実行する。
【0165】
サイクル4において、レンジ判断演算ユニットS14により、処理対象画素の勾配ベクトル角度grad1が、第3ビン内の値(ヒストグラム境界値histL3と、境界値histL4とにより規定される範囲内の値)であると判定された場合、CF=1となり、当該条件フラグCFの値に基づいて、条件レジスタ部4は、制御信号CFctlの信号値を「1」に設定し、条件付き加算ユニットS21に出力する。そして、条件付き加算ユニットS21は、制御信号CFctlの信号値が「1」であるので、第3ビンのヒストグラム値hist_bin3を、1だけインクリメントする。つまり、条件付き加算ユニットS21は、第3ビンのヒストグラム値hist_bin3に「1」を加算した値を取得し、取得した値を、データパスDo2を介して、レジスタファイル部2に出力する。レジスタファイル部2は、条件付き加算ユニットS21により条件付き加算処理された値を、第3ビンのヒストグラム値hist_bin3として、所定のレジスタに格納する。
【0166】
一方、サイクル4において、レンジ判断演算ユニットS14により、処理対象画素の勾配ベクトル角度grad1が、第3ビン内の値(ヒストグラム境界値histL3と、境界値histL4とにより規定される範囲内の値)ではないと判定された場合、CF=0となり、当該条件フラグCFの値に基づいて、条件レジスタ部4は、制御信号CFctlの信号値を「0」に設定し、条件付き加算ユニットS21に出力する。そして、条件付き加算ユニットS21は、制御信号CFctlの信号値が「0」であるので、第3ビンのヒストグラム値hist_bin3に対する加算処理を実行しない。つまり、この場合、レジスタファイル部2で保持されている第3ビンのヒストグラム値hist_bin3は、更新されることはなく、そのままの値が保持されることになる。
【0167】
また、サイクル5では、レンジ判断演算ユニットS14は、
val1=histL4
val2=grad1
src=histL5
として、サイクル2で説明したのと同様の処理を実行する。
【0168】
これにより、サイクル5において、レンジ判断演算ユニットS14は、条件フラグCFを、以下の値に設定して、条件レジスタ部4に出力する。
(1)eq1=0、かつ、eq2=0である場合、
(1A)histL4<grad1<histL5であるとき、CF=1
(1B)上記(1A)以外のとき、CF=0
(2)eq1=1、かつ、eq2=0である場合、
(2A)histL4≦grad1<histL5であるとき、CF=1
(2B)上記(2A)以外のとき、CF=0
(3)eq1=0、かつ、eq2=1である場合、
(3A)histL4<grad1≦histL5であるとき、CF=1
(3B)上記(3A)以外のとき、CF=0
(4)eq1=1、かつ、eq2=1である場合、
(4A)histL4≦grad1≦histL5であるとき、CF=1
(4B)上記(4A)以外のとき、CF=0
つまり、サイクル5において、レンジ判断演算ユニットS14は、第2レジスタに設定されている値grad1(=val2)が、境界値histL4およびhistL5により規定される範囲に含まれるか否かの判定を行い、その判定結果を示す条件フラグCFを条件レジスタ部4に出力する。
【0169】
なお、第1レジスタ301は、サイクル4で、レジスタファイル部2から入力されたsrc値(=histL4)を、サイクル5で、第1レジスタ値val1として、第1比較部305に出力するように、第1レジスタ値val1を更新する。
【0170】
また、サイクル5において、第3スロットのL/SユニットS31は、勾配ベクトル角度grad2をロードする。そして、ロードされた勾配ベクトル角度grad2は、データパスDo3を介して、レジスタファイル部2に出力される。レジスタファイル部2は、第3スロットS3から出力された勾配ベクトル角度grad2を、所定のレジスタに格納する。
【0171】
(Cyc6):
サイクル6において、命令制御部1は、命令実行部3に対して、データ書き込み命令(Write命令)を発行する。命令実行部3の第1スロットS1のデータ書き込み演算ユニットS13は、当該データ書き込み命令(Write命令)に基づいて、データ書き込み処理を実行する。具体的には、データ書き込み演算ユニットS13は、レジスタファイル部2から、データパスDi11、Di12を介して、サイクル5でロードした勾配ベクトル角度grad2と、ヒストグラムの下限値histL1を入力し、当該2つの入力されたデータに対して、データ書き込み処理を実行する。つまり、データ書き込み演算ユニットS13は、
(第1レジスタ値val1)=histL1
(第2レジスタ値val2)=grad2
となるように、第1レジスタ値および第2レジスタ値を設定する。
【0172】
また、第3スロットのL/SユニットS31は、輝度勾配ヒストグラムの次の境界値histL2を、データメモリM2からロードする。ロードされた輝度勾配ヒストグラムの次の境界値histL2は、データパスDo3を介して、レジスタファイル部2に出力される。
【0173】
また、サイクル6において、命令制御部1は、命令実行部3に対して、条件付き加算命令(Addt命令)を発行する。命令実行部3の第2スロットS2の条件付き加算ユニットS21は、条件付き加算命令(Addt命令)に基づいて、条件付き加算処理を実行する。具体的には、条件付き加算ユニットS21は、レジスタファイル部2から、第4ビン(ヒストグラム境界値histL4と、境界値histL5とにより規定されるビン)のヒストグラム値hist_bin4を入力し、条件レジスタ部4から出力される制御信号CFctlに基づいて、ヒストグラム値hist_bin4に対して、条件付き加算処理を実行する。
【0174】
サイクル5において、レンジ判断演算ユニットS14により、処理対象画素の勾配ベクトル角度grad1が、第4ビン内の値(ヒストグラム境界値histL4と、境界値histL5とにより規定される範囲内の値)であると判定された場合、CF=1となり、当該条件フラグCFの値に基づいて、条件レジスタ部4は、制御信号CFctlの信号値を「1」に設定し、条件付き加算ユニットS21に出力する。そして、条件付き加算ユニットS21は、制御信号CFctlの信号値が「1」であるので、第4ビンのヒストグラム値hist_bin4を、1だけインクリメントする。つまり、条件付き加算ユニットS21は、第4ビンのヒストグラム値hist_bin4に「1」を加算した値を取得し、取得した値を、データパスDo2を介して、レジスタファイル部2に出力する。レジスタファイル部2は、条件付き加算ユニットS21により条件付き加算処理された値を、第4ビンのヒストグラム値hist_bin4として、所定のレジスタに格納する。
【0175】
一方、サイクル5において、レンジ判断演算ユニットS14により、処理対象画素の勾配ベクトル角度grad1が、第4ビン内の値(ヒストグラム境界値histL4と、境界値histL5とにより規定される範囲内の値)ではないと判定された場合、CF=0となり、当該条件フラグCFの値に基づいて、条件レジスタ部4は、制御信号CFctlの信号値を「0」に設定し、条件付き加算ユニットS21に出力する。そして、条件付き加算ユニットS21は、制御信号CFctlの信号値が「0」であるので、第4ビンのヒストグラム値hist_bin4に対する加算処理を実行しない。つまり、この場合、レジスタファイル部2で保持されている第4ビンのヒストグラム値hist_bin4は、更新されることはなく、そのままの値が保持されることになる。
【0176】
(Cyc7以降):
サイクル7〜11では、サイクル2〜6と同様の処理が実行される。これにより、処理対象画素の勾配ベクトル角度grad2が、ビン1〜4のいずれに含まれるか判断され、ヒストグラム算出処理が実行される。
【0177】
以降、上記処理を繰り返すことで、複数のデータ(勾配ベクトル角度)に対して、ヒストグラム算出処理を実行することができる。
【0178】
以上の処理により、SIMDプロセッサ1000において、輝度勾配ヒストグラム算出処理を実行することができる。
(1.2.2:パーティクルフィルタ処理)
次に、SIMDプロセッサ1000において、パーティクルフィルタ処理を実行する場合について説明する。
【0179】
パーティクルフィルタは、ベイズモデルを推定するために用いられる手法であり、条件付分布をその分布から多数の実現値で近似表現することにより実現される。パーティクルフィルタは、例えば、画像認識処理に用いられる。
【0180】
ここで、パーティクルフィルタ処理について、
図7を用いて説明する。
【0181】
図7は、パーティクルフィルタ処理について説明するための図であり、横軸(X軸)を一致させて、(1)パーティクル(粒子)の事前確率分布と、(2)時刻tにおける実際の観測と、(3)時刻tにおける尤度と、(4)時刻tにおけるパーティクルの事後確率分布と、(5)次の時刻(時刻t+1)におけるパーティクルの事前確率分布と、(6)時刻t+1における実際の観測と、(7)時刻t+1における尤度とを模式的に示す図である。なお、パーティクルフィルタを画像認識処理に用いる場合、2次元の処理を行う必要があるが、説明便宜のため、
図7を用いた説明では、1次元の処理(1次元のデータを扱うパーティクルフィルタ)として説明する。
【0182】
ここでは、画像上の黄色の物体を検出する画像認識処理を、パーティクルフィルタを用いて実現する場合を例に説明する。この処理は、以下の(1)〜(7)により、実行される。
(1)まず、時刻tにおいて、パーティクルをランダムに配置し、パーティクルの事前確率分布が取得される。
(2)時刻tにおいて、実際の観測データが取得される。つまり、画像上の全てのデータについての黄色度合いが取得される。この黄色度合いを示すデータが、
図7の(2)に示す時刻tの実際の観測データ(実際の観測)である。
(3)時刻tの事前確率分布に従い配置されたパーティクルごとに、尤度が取得される。
図7の(3)において、このように取得された尤度を示しており、尤度が大きい程、大きな円として描いている。
(4)求めた尤度に基づいて、パーティクルの事後確率分布が取得される。つまり、
図7の(4)に示すように、尤度が大きい領域ほど、多数のパーティクルが配置されるように、パーティクルの事後確率分布が取得される。
(5)次の時刻(時刻t+1)におけるパーティクル事前確率分布が取得される。このとき、パーティクルの事後確率分布において取得されたパーティクルの位置に、乱数を加算または減算して取得した位置に、パーティクルを配置することで、時刻t+1におけるパーティクル事前確率分布が取得される。
(6)時刻t+1において、実際の観測データが取得される。つまり、画像上の全てのデータについての黄色度合いが取得される。この黄色度合いを示すデータが、
図7の(6)に示す時刻t+1の実際の観測データ(実際の観測)である。
(7)時刻t+1の事前確率分布に従い配置されたパーティクルごとに、尤度が取得される。
【0183】
このように、処理を行うことで、黄色度合いの高い部分に多くのパーティクルが配置されることになる。したがって、配置されているパーティクル数が多い部分を検出することで、画像上の黄色の物体を検出する画像認識処理を実現することができる。
【0184】
しかしながら、上記で説明したように、次の時刻のパーティクルの事前確率分布を取得するときに、乱数を用いて、パーティクルの位置を決める(再配置する)必要がある。このとき、パーティクルの位置が画像領域外となることがあり、この場合、例外処理を実行する必要がある。
【0185】
例えば、X軸方向(横軸方向)のパーティクルが取り得る範囲の最大値が、
図7に示す最大値Xmaxで示す位置である場合、
図7に示したパーティクルp1が、パーティクルの取り得る範囲外となっている。つまり、次の時刻(時刻t+1)の事前確率分布を求めるときに、パーティクルp1に相当する位置が再配置位置と算出されるが、この再配置位置は、パーティクルの取り得る範囲外となるため、例外処理を実行する必要がある。
【0186】
パーティクルフィルタは、パーティクルごとの処理が多いため、並列処理を行うと効率が良くなる。つまり、パーティクルフィルタは、SIMDプロセッサ向きの処理である。しかし、上記のような例外処理を行う必要があるので、この例外処理を効率良く行うことで、処理効率を高めることができる。
【0187】
SIMDプロセッサ1000では、
図1に示す構成により、パーティクルフィルタの例外処理を効率良く処理する。その結果、SIMDプロセッサ1000では、パーティクルフィルタ処理の効率を良くすることができる。これについて、以下、説明する。
【0188】
SIMDプロセッサ1000において、パーティクルフィルタ処理を実行する場合、以下の(手順1)〜(手順3)により処理が実行される。
【0189】
(手順1):
SIMDプロセッサ1000において、各パーティクルの画像上のX位置(X座標値)、Y位置(X座標値)は、例えば、データメモリM2のそれぞれ別々の連続したメモリ領域に格納される。
【0190】
(手順2):
命令制御部1は、命令実行部3に対して、データ書き込み命令(Write命令)を発行する。命令実行部3の第1スロットS1のデータ書き込み演算ユニットS13は、当該データ書き込み命令(Write命令)に基づいて、データ書き込み処理を実行する。具体的には、データ書き込み演算ユニットS13は、レジスタファイル部2から、データパスDi11、Di12を介して、パーティクルの取り得る上限位置および下限位置を、第1レジスタ301および第2レジスタ302に書き込む。例えば、パーティクルの取り得るX軸方向の上限位置をXmaxとし、パーティクルの取り得るX軸方向の下限位置をXminとすると、データ書き込み演算ユニットS13は、
(第1レジスタ値val1)=Xmin
(第2レジスタ値val2)=Xmax
となるように、第1レジスタ値および第2レジスタ値を設定する。なお、以下では、説明便宜のため、パーティクルのX軸方向の位置について処理を行う場合について説明する。
【0191】
(手順3):
図8に、各パーティクルの位置を変更(再配置)するときの命令スケジュールを示す。
【0192】
(Cyc0):
サイクル0において、命令制御部1は、命令実行部3に対して、ロード命令(Load命令)および乱数生成命令(Rand命令)を発行する。第3スロットS3のL/SユニットS31は、1つ目のパーティクルの位置情報(X座標位置)x1をロードし、ロードしたX座標位置x1を、データパスDo3を介して、レジスタファイル部2に出力する。レジスタファイル部2は、当該X座標位置x1を所定のレジスタに格納する。第2スロットS2の乱数生成ユニットS22は、1つ目のパーティクルの位置情報(X座標位置)x1に付加する変動量Δx1(Δx1:実数)を生成し、生成した変動量Δx1を、データパスDo2を介して、レジスタファイル部2に出力する。レジスタファイル部2は、当該変動量Δx1を所定のレジスタに格納する。
【0193】
(Cyc1):
サイクル1において、命令制御部1は、命令実行部3に対して、加算命令(Add)を発行する。命令実行部3の第1スロットS1の加算ユニットS11は、当該加算命令(Add命令)に基づいて、サイクル0で取得された1つ目のパーティクルのX座標位置x1と、その変動量Δx1とを加算し、その加算結果x1+Δx1を、データパスDo1を介して、レジスタファイル部2に出力する。
【0194】
(Cyc2):
サイクル2において、命令制御部1は、命令実行部3に対して、レンジ判断命令(RngD)を発行する。命令実行部3の第3スロットS1のレンジ判断演算ユニットS14は、当該レンジ判断命令(RngD命令)に基づいて、レンジ判断処理を実行する。具体的には、レンジ判断演算ユニットS14は、レジスタファイル部2から、サイクル1で取得された加算結果x1+Δx1を入力し、当該加算結果x1+Δx1に対して、レンジ判断処理を行う。
【0195】
SIMDプロセッサ1000において、パーティクルフィルタ処理を行う場合、命令制御部1は、制御信号rangeを「1」に設定する。したがって、
図2に示すように、セレクタ304は、レジスタファイル部2からの入力srcを、第1比較部305に出力する。
【0196】
また、制御信号rangeが「1」に設定されており、レンジ方向設定信号dirが「0」に設定されている場合、制御信号生成部303により生成される制御信号cctl1は、その信号値が「0」に設定され、制御信号cctl2は、その信号値が「1」に設定される。
【0197】
ここで、まず、第1比較部305の動作(サイクル2の動作)について、説明する。
【0198】
第1比較部305の入力は、以下のようになる。なお、第1等価制御信号eq1は、その信号値が「0」に設定されているとする。
【0199】
cctl1=1
Din1=src=x1+Δx1
Din2=val1=Xmin
eq1=0
(1)cctl1、Din1、Din2、eq1が上記のように設定されている場合であって、かつ、Din2<Din1、つまり、Xmin<x1+Δx1である場合、
Dsub=Din1―Din2>0
MSB=0
non_zero_det=1
であるので、ANDゲート3059から出力されるデータD1は、「1」となる。
(2)cctl1、Din1、Din2、eq1が上記のように設定されている場合であって、かつ、Din2>Din1、つまり、Xmin>x1+Δx1である場合、
Dsub=Din1―Din2<0
MSB=1
non_zero_det=1
であるので、ANDゲート3059から出力されるデータD1は、「0」となる。
(3)cctl1、Din1、Din2、eq1が上記のように設定されている場合であって、かつ、Din2=Din1、つまり、Xmin=x1+Δx1である場合、
Dsub=Din1―Din2=0
MSB=0
non_zero_det=0
であるので、ANDゲート3059から出力されるデータD1は、「0」となる。
【0200】
なお、この場合((3)の場合)において、eq1=1に設定されているときは、ORゲート3058の出力が「1」となり、ANDゲート3059の出力が「1」となる。つまり、出力データD1は、「1」となる。
【0201】
以上のように、
cctl1=1
Din1=src=x1+Δx1
Din2=val1=Xmin
eq1=0
である場合において、Din2<Din1、つまり、Xmin<x1+Δx1であるとき、第1比較部305の出力データD1が「1」となり、それ以外の場合、第1比較部305の出力データは「0」となる。
【0202】
なお、eq1=1に設定すると、Din2≦Din1、つまり、Xmin≦x1+Δx1であるとき、第1比較部305の出力データD1が「1」となり、それ以外の場合、第1比較部305の出力データD1は「0」となる。
【0203】
次に、第2比較部306の動作(サイクル2の動作)について説明する。
【0204】
第2比較部306の入力は、以下のようになる。なお、第2等価制御信号eq2は、その信号値が「0」に設定されているとする。
【0205】
cctl2=1
Din1=src=x1+Δx1
Din2=val2=Xmax
eq2=0
(1)cctl2、Din1、Din2、eq2が上記のように設定されている場合であって、かつ、Din2<Din1、つまり、Xmax<x1+Δx1である場合、
Dsub=Din1―Din2>0
MSB=0
cctl2=1
non_zero_det=1
であるので、ANDゲート3059から出力されるデータD2(第2比較部306の出力データD2)は、「0」となる。
(2)cctl2、Din1、Din2、eq2が上記のように設定されている場合であって、かつ、Din2>Din1、つまり、Xmax>x1+Δx1である場合、
Dsub=Din1―Din2<0
MSB=1
cctl2=1
non_zero_det=1
であるので、ANDゲート3059から出力されるデータD2(第2比較部306の出力データD2)は、「1」となる。
(3)cctl2、Din1、Din2、eq2が上記のように設定されている場合であって、かつ、Din2=Din1、つまり、Xmax=x1+Δx1である場合、
Dsub=Din1―Din2=0
MSB=0
cctl2=1
non_zero_det=0
であるので、ANDゲート3059から出力されるデータD1は、「0」となる。
【0206】
なお、この場合((3)の場合)において、eq2=1に設定されているときは、ORゲート3058の出力が「1」となり、また、NOTゲート3057の出力が「1」であるので、ANDゲート3054の出力が「1」となり、XORゲート3056の出力が「0」となり、NOTゲート3057の出力が「1」となり、ANDゲート3059の出力が「1」となる。つまり、第2比較部306の出力データD2は、「1」となる。
【0207】
以上のように、
cctl2=1
Din1=src=x1+Δx1
Din2=val2=Xmax
eq2=0
である場合において、Din1<Din2、つまり、x1+Δx1<Xmaxであるとき、第2比較部306の出力データD2が「1」となり、それ以外の場合、第2比較部306の出力データD2は「0」となる。
【0208】
なお、eq2=1に設定すると、Din1≦Din2、つまり、x1+Δx1≦Xmaxであるとき、第2比較部306の出力データD2が「1」となり、それ以外の場合、第2比較部306の出力データD2は「0」となる。
【0209】
次に、統合部307の動作(サイクル2の動作)について説明する。
【0210】
range=1であり、dir=0であるので、制御信号生成部303から出力される制御信号bctlの信号値は「0」である。したがって、セレクタ3073は、ANDゲート3071の出力を選択して出力する。つまり、統合部307は、第1比較部305の出力データD1と、第2比較部306の出力データD2とのAND演算結果を、条件フラグCFとして、条件レジスタ部4に出力する。
【0211】
すなわち、サイクル2において、レンジ判断演算ユニットS14は、条件フラグCFを、以下の値に設定して、条件レジスタ部4に出力する。
(1)eq1=0、かつ、eq2=0である場合、
(1A)Xmin<x1<Xmaxであるとき、CF=1
(1B)上記(1A)以外のとき、CF=0
(2)eq1=1、かつ、eq2=0である場合、
(2A)Xmin≦x1<Xmaxであるとき、CF=1
(2B)上記(2A)以外のとき、CF=0
(3)eq1=0、かつ、eq2=1である場合、
(3A)Xmin<x1≦Xmaxであるとき、CF=1
(3B)上記(3A)以外のとき、CF=0
(4)eq1=1、かつ、eq2=1である場合、
(4A)Xmin≦x1≦Xmaxであるとき、CF=1
(4B)上記(4A)以外のとき、CF=0
つまり、サイクル2において、レンジ判断演算ユニットS14は、レジスタファイル部2から出力される値src(=x1)が、パーティクルの限界値(下限値および上限値)XminおよびXmaxにより規定される範囲に含まれるか否かの判定を行い、その判定結果を示す条件フラグCFを条件レジスタ部4に出力する。
【0212】
また、サイクル2において、第3スロットのL/SユニットS31は、次のパーティクルの座標位置x2を、データメモリM2からロードする。ロードされた次のパーティクルの座標位置x2は、データパスDo3を介して、レジスタファイル部2に出力される。
【0213】
また、サイクル2において、第2スロットS2の乱数生成ユニットS22は、2つ目のパーティクルの位置情報(X座標位置)x2に付加する変動量Δx2(Δx2:実数)を生成し、生成した変動量Δx2を、データパスDo2を介して、レジスタファイル部2に出力する。レジスタファイル部2は、当該変動量Δx2を所定のレジスタに格納する。
【0214】
(Cyc3):
サイクル3において、命令制御部1は、命令実行部3に対して、条件付き加算命令(Addt命令)を発行する。命令実行部3の第2スロットS2の条件付き加算ユニットS21は、条件付き加算命令(Addt命令)に基づいて、条件付き加算処理を実行する。具体的には、条件付き加算ユニットS21は、レジスタファイル部2から、1つ目のパーティクルの座標位置x1と、その変動量Δx1とを入力し、条件レジスタ部4から出力される制御信号CFctlに基づいて、1つ目のパーティクルの加算結果x1+Δx1に対して、条件付き加算処理を実行する。
【0215】
サイクル2において、レンジ判断演算ユニットS14により、1つ目のパーティクルの加算結果x1+Δx1が、パーティクルの限界値Xmin、Xmaxで規定される範囲内の値であると判定された場合、CF=1となり、当該条件フラグCFの値に基づいて、条件レジスタ部4は、制御信号CFctlの信号値を「1」に設定し、条件付き加算ユニットS21に出力する。そして、条件付き加算ユニットS21は、制御信号CFctlの信号値が「1」であるので、1つ目のパーティクルの座標位置x1と、その変動量Δx1と加算する。そして、条件付き加算ユニットS21は、加算した値を、データパスDo2を介して、レジスタファイル部2に出力する。レジスタファイル部2は、条件付き加算ユニットS21により条件付き加算処理された値を、1つ目のパーティクルの再配置位置(次の時刻(時刻t+1)の事前確率分布により決定される座標位置)として、所定のレジスタに格納する。
【0216】
一方、サイクル2において、レンジ判断演算ユニットS14により、1つ目のパーティクルの加算結果x1+Δx1が、パーティクルの限界値Xmin、Xmaxで規定される範囲内の値ではないと判定された場合、CF=0となり、当該条件フラグCFの値に基づいて、条件レジスタ部4は、制御信号CFctlの信号値を「0」に設定し、条件付き加算ユニットS21に出力する。そして、条件付き加算ユニットS21は、制御信号CFctlの信号値が「0」であるので、1つ目のパーティクルの座標位置x1と、その変動量Δx1とに対する加算処理を実行しない。つまり、この場合、1つ目のパーティクルの座標位置の再配置位置(次の時刻(時刻t+1)の事前確率分布により決定される座標位置)を算出する処理を行わない。
【0217】
また、サイクル3において、第3スロットのL/SユニットS31は、次のパーティクルの座標位置x3を、データメモリM2からロードする。ロードされた次のパーティクルの座標位置x3は、データパスDo3を介して、レジスタファイル部2に出力される。
【0218】
また、サイクル3において、命令制御部1は、命令実行部3に対して、加算命令(Add)を発行する。命令実行部3の第1スロットS1の加算ユニットS11は、当該加算命令(Add命令)に基づいて、サイクル2で取得された2つ目のパーティクルのX座標位置x2と、その変動量Δx2とを加算し、その加算結果x2+Δx2を、データパスDo1を介して、レジスタファイル部2に出力する。
【0219】
(Cyc4):
サイクル4において、命令制御部1は、命令実行部3に対して、ストア命令(Store命令)を発行する。命令実行部3の第3スロットS3のロード/ストアユニットS31は、当該ストア命令に基づいて、サイクル3で取得(確定)された1つ目のパーティクルのX座標位置をデータメモリM2に格納する。
【0220】
また、サイクル4において、サイクル0のRand命令の実行処理と同様に、第2スロットS2が、Rand命令を実行し、3つ目のパーティクルの変動量Δx3を取得する。
【0221】
また、サイクル4において、サイクル1のAdd命令の実行処理と同様に、第1スロットS1が、Add命令を実行し、2つ目のパーティクルの座標位置x2とその変動量Δx2とを加算する。
【0222】
(Cyc5〜):
サイクル5以降において、
図8に示す命令スケジュールに従い、上記処理と同様の処理が実行され、2つ目以降のパーティクルの座標位置が確定される。
【0223】
なお、上記では、レンジ方向設定信号dirが「0」である場合のSIMDプロセッサ1000の動作、すなわち、第1レジスタ値val1(=Xmin)と第2レジスタ値val2(=Xmax)により規定される範囲内に含まれるか否かを判定する場合の動作について説明した。つまり、SIMDプロセッサ1000では、レンジ方向設定信号dirが「0」である場合、(1)処理対象値srcが、第1レジスタ値val1(=Xmin)と第2レジスタ値val2(=Xmax)により規定される範囲内に含まれる場合、条件フラグが「1」となり、(2)処理対象値srcが、第1レジスタ値val1(=Xmin)と第2レジスタ値val2(=Xmax)により規定される範囲内に含まれない場合、条件フラグが「0」となる。
【0224】
一方、SIMDプロセッサ1000では、レンジ方向設定信号dirを「1」とすることで、第1レジスタ値val1(=Xmin)と第2レジスタ値val2(=Xmax)により規定される範囲外であるか否かを判定することができる。つまり、SIMDプロセッサ1000では、レンジ方向設定信号dirが「1」である場合、(1)処理対象値srcが、第1レジスタ値val1(=Xmin)と第2レジスタ値val2(=Xmax)により規定される範囲内に含まれない場合、条件フラグが「1」となり、(2)処理対象値srcが、第1レジスタ値val1(=Xmin)と第2レジスタ値val2(=Xmax)により規定される範囲内に含まれる場合、条件フラグが「0」となる。
【0225】
以上のように、SIMDプロセッサ1000では、(1)制御信号rangeを「0」に設定し、上記(1.2.1)で説明した処理を実行することで、輝度勾配ヒストグラム算出処理を実行することができ、(2)制御信号rangeを「1」に設定し、上記(1.2.2)で説明した処理を実行することで、パーティクルフィルタ処理を実行することができる。
【0226】
つまり、SIMDプロセッサ1000では、制御信号range、レンジ方向設定信号dir、第1等価制御信号eq1、および、第2等価制御信号eq2を、所定の値に設定することで、レンジ判断演算ユニットS14が、条件フラグCFを「1」として出力する条件を設定することができる。
図9に、SIMDプロセッサ1000において、制御信号range、レンジ方向設定信号dir、第1等価制御信号eq1、および、第2等価制御信号eq2と、レンジ判断演算ユニットS14が、条件フラグCFを「1」として出力する条件との関係図を示す。
【0227】
SIMDプロセッサ1000では、条件レジスタ部4が、
図9に示す関係図により取得された条件フラグCFに基づいて、所定の演算ユニットに条件付き演算を実行させるための制御信号CFctlを生成し、当該制御信号CFctlに基づいて、所定の演算ユニットが条件付き演算を実行する。これにより、SIMDプロセッサ1000では、各スロット(各プロセッサ・エレメント)の演算器ごとに、条件フラグを設定するためのハードウェアを設ける必要がなく、従来技術に比べて、ハードウェア規模を小さくすることができる。
【0228】
また、上記のように、SIMDプロセッサ1000では、制御信号range、レンジ方向設定信号dir、第1等価制御信号eq1、および、第2等価制御信号eq2を、所定の値に設定し、第1レジスタ値val1、第2レジスタ値val2、および、レジスタファイル部2からの出力値srcを所定の値に設定することで、多様なレンジ判断処理を行うことができる。例えば、上記(1.2.1)で説明したように、ヒストグラム算出処理において、境界値(histL1、histL2、...)を所定の値に設定することで、1つのビンの範囲を容易に変更することができる(可変にすることができる)。
【0229】
このように、SIMDプロセッサ1000では、画像処理および画像認識で多用されるレンジ判断処理を、汎用性の高いハードウェア構成により、効率的に実行することができる。
【0230】
[他の実施形態]
上記実施形態において、レンジ判断演算ユニットS14は、
図2〜
図5に示すハードウェア構成を有する場合について説明したが、これに限定されることはない。レンジ判断演算ユニットS14は、
図9に示した関係図を満たすものであれば、他の回路構成により実現されるものであってもよい。また、レンジ判断演算ユニットS14は、
図9に示した関係図を満たすように、一部に、ルックアップテーブルを有するものであってもよい。
【0231】
また、レンジ判断演算ユニットS14は、
図2〜
図5に示した回路構成に限定されることはなく、
図9に示した関係図を満たす回路であれば他の回路構成であってもよい。例えば、
図4に示した第1比較部305(または第2比較部306)において、非ゼロ判定器3052の出力をRORと表記すると、第1比較部305(または第2比較部306)は、下記論理式に相当する回路としてもよい。
【0232】
(!cctrl&!MSB&ROR)|(eq&!ROR)|(cctrl&MSB)
MSB:減算結果データDsubの最上位ビット
eq:等価制御信号(第1等価制御信号eq1、または、第2等価制御信号eq2)
cctrl:制御信号生成部303から出力される制御信号cctl1
ROR:非ゼロ判定器3052の出力
なお、上記論理式のROR、MSB、eq、cctrlは、論理値「0」または「1」をとるものとする。
【0233】
また、上記実施形態では、SIMDプロセッサ1000において、命令実行部3のスロット数が「3」の場合について説明したが、これに限定されることはなく、命令実行部3は、他の数のスロットを有するものであってもよい。
【0234】
また、上記実施形態では、SIMDプロセッサ1000において、条件付き演算ユニットとして、第2スロットS2に条件付き加算ユニットS21を有する場合について説明したが、これに限定されることはない。例えば、SIMDプロセッサ1000において、他の条件付き演算処理を行う演算ユニットを設けるようにしてもよい。また、SIMDプロセッサ1000において、演算ユニットの割り当ては、
図1に示すものに限定されるものではなく、本発明の趣旨を逸脱しない範囲で、他の演算ユニットの割り当ても可能である。
【0235】
また、上記実施形態の一部または全部を組み合わせるようにしてもよい。
【0236】
また、上記実施形態における処理方法の実行順序は、必ずしも、上記実施形態の記載に制限されるものではなく、発明の要旨を逸脱しない範囲で、実行順序を入れ替えることができるものである。
【0237】
なお、本発明の具体的な構成は、前述の実施形態に限られるものではなく、発明の要旨を逸脱しない範囲で種々の変更および修正が可能である。