(57)【特許請求の範囲】
【請求項１】
リング状に接続され、順次番号が付与されたＮ個（Ｎ：２以上の整数）のプロセッサ要素と、前記Ｎ個のプロセッサ要素を制御するコントロールプロセッサとを有し、横幅がＮより大きいＷ（Ｗ：Ｎの整数倍）である２次元データを幅がＮであり、行数がＭ（Ｍ：１以上の整数）であるブロックに分割し、上に位置するブロックほど優先的に転送され、同一のブロック内の同一行のＮ個のデータが前記Ｎ個のプロセッサ要素のローカルメモリの同一のローカルアドレスに夫々格納されるように前記２次元データを外部メモリから前記ローカルメモリに転送するＳＩＭＤ（Ｓｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｍｕｌｔｉｐｌｅ  Ｄａｔａ）プロセッサであって、
前記コントロールプロセッサは、
前記ローカルメモリに格納された、前記２次元データにおける座標値が（Ｘ，Ｙ）である先頭データから行方向に並ぶＮ個のデータのローカルアドレスのなり得るローカルアドレスＡ１と、ローカルアドレスＡ２と、該２つのローカルアドレスのうちのいずれか１つを選択するための基準となるプロセッサ要素の番号の閾値である閾値番号Ｚとを、Ｘ、Ｙ、Ｍ、Ｗ、Ｎに基づいて算出するアドレス算出部を備え、
前記Ｎ個のデータのローカルアドレスを前記Ｎ個のプロセッサ要素に対して指定する際に、前記アドレス算出部により得られた、前記ローカルアドレスＡ１と、前記ローカルアドレスＡ２と、前記閾値番号Ｚとを前記Ｎ個のプロセッサ要素に放送し、
前記Ｎ個のプロセッサ要素は、
前記閾値番号Ｚと、自身の番号との大小関係を比較すると共に、比較結果に応じて前記ローカルアドレスＡ１とローカルアドレスＡ２のいずれかを選択するアドレス選択部を有することを特徴とするＳＩＭＤプロセッサ。
【請求項２】
前記アドレス算出部は、
前記２次元データの左上端のデータの座標値を（０，０）とした場合に、式（１）〜式（３）に従って、前記ローカルアドレスＡ１、前記ローカルアドレスＡ２、前記閾値番号Ｚを夫々算出することを特徴とする請求項１に記載のＳＩＭＤプロセッサ。
A1＝BASEADDRESS＋floor(Y/M)×(M×W/N)＋floor(X/N)×M＋Y%M            （１）
A2＝BASEADDRESS＋floor(Y/M)×(M×W/N)＋floor(X/N)×M＋Y%M＋M         （2）
Z＝X%N    (3)
但し，
X：先頭データのＸ方向座標値
Y：先頭データのＹ方向座標値
N：プロセッサ要素の数
W：２次元データの横幅
M：ブロックの行数
【請求項３】
前記プロセッサ要素の数Ｎと前記ブロックの行数Ｍは、２のべき乗であり、
前記アドレス算出部は、
前記Ｍと、「Ｍ−１」であるＭ１と、ｌｏｇ２Ｍと、「（Ｗ＞＞ｌｏｇ２Ｎ）＜＜ｌｏｇ２Ｍ」であるＱと、「Ｎ−１」であるＮ１と、ｌｏｇ２Ｎとを記憶するパラメータ記憶部と、
前記パラメータ記憶部に記憶された各パラメータを用いて、式（４）〜式（６）が示す演算を行って前記ローカルアドレスＡ１、前記ローカルアドレスＡ２、前記閾値番号Ｚを得る演算回路とを備えることを特徴とする請求項２に記載のＳＩＭＤプロセッサ。
A1＝BASEADDRESS＋(Y>>log2M)×Q＋Y&M1＋(X>>log2N)<<log2M             (4)
A2＝BASEADDRESS＋(Y>>log2M)×Q＋Y&M1＋(X>>log2N)<<log2M＋M          (5)
Z＝X&N1    (6)
【請求項４】
前記プロセッサ要素の数Ｎと前記ブロックの行数Ｍは、２のべき乗であり、
前記アドレス算出部は、
「Ｍ−１」であるＭ１と、ｌｏｇ２Ｍと、「（Ｗ＞＞ｌｏｇ２Ｎ）＜＜ｌｏｇ２Ｍ」であるＱと、「Ｎ−１」であるＮ１と、ｌｏｇ２Ｎとを記憶するパラメータ記憶部と、
前記パラメータ記憶部に記憶された各パラメータを用いて、式（４）、式（７）、式（６）が示す演算を行って前記ローカルアドレスＡ１、前記ローカルアドレスＡ２、前記閾値番号Ｚを得る演算回路とを備えることを特徴とする請求項２に記載のＳＩＭＤプロセッサ。
A1＝BASEADDRESS＋(Y>>log2M)×Q＋Y&M1＋(X>>log2N)<<log2M             (4)
A2＝BASEADDRESS＋(Y>>log2M)×Q＋Y&M1＋（(X>>log2N)＋1）<<log2M          (7)
Z＝X&N1    (6)
【請求項５】
リング状に接続され、順次番号が付与されたＮ個（Ｎ：２以上の整数）のプロセッサ要素を有し、横幅がＮより大きいＷ（Ｗ：Ｎの整数倍）である２次元データを幅がＮであり、行数がＭ（Ｍ：１以上の整数）であるブロックに分割し、上に位置するブロックほど優先的に転送され、同一のブロック内の同一行のＮ個のデータが前記Ｎ個のプロセッサ要素のローカルメモリの同一のローカルアドレスに夫々格納されるように前記２次元データを外部メモリから前記ローカルメモリに転送するＳＩＭＤ（Ｓｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｍｕｌｔｉｐｌｅ  Ｄａｔａ）プロセッサにおける前記Ｎ個のプロセッサ要素を制御するコントロールプロセッサであって、
前記ローカルメモリに格納された、前記２次元データにおける座標値が（Ｘ，Ｙ）である先頭データから行方向に並ぶＮ個のデータのローカルアドレスのなり得るローカルアドレスＡ１と、ローカルアドレスＡ２と、該２つのローカルアドレスのうちのいずれか１つを選択するための基準となるプロセッサ要素の番号の閾値である閾値番号Ｚとを、Ｘ、Ｙ、Ｍ、Ｗ、Ｎに基づいて算出するアドレス算出部を備え、
前記Ｎ個のデータのローカルアドレスを前記Ｎ個のプロセッサ要素に対して指定する際に、前記アドレス算出部により得られた、前記ローカルアドレスＡ１と、前記ローカルアドレスＡ２と、前記閾値番号Ｚとを前記Ｎ個のプロセッサ要素に放送することを特徴とするコントロールプロセッサ。
【請求項６】
前記アドレス算出部は、
前記２次元データの左上端のデータの座標値を（０，０）とした場合に、式（１２）〜式（１４）に従って、前記ローカルアドレスＡ１、前記ローカルアドレスＡ２、前記閾値番号Ｚを夫々算出することを特徴とする請求項５に記載のコントロールプロセッサ。
A1＝BASEADDRESS＋floor(Y/M)×(M×W/N)＋floor(X/N)×M＋Y%M            （12）
A2＝BASEADDRESS＋floor(Y/M)×(M×W/N)＋floor(X/N)×M＋Y%M＋M         （13）
Z＝X%N    (14)
但し，
X：先頭データのＸ方向座標値
Y：先頭データのＹ方向座標値
N：プロセッサ要素の数
W：２次元データの横幅
M：ブロックの行数
【請求項７】
前記プロセッサ要素の数Ｎと前記ブロックの行数Ｍは、２のべき乗であり、
前記アドレス算出部は、
前記Ｍと、「Ｍ−１」であるＭ１と、ｌｏｇ２Ｍと、「（Ｗ＞＞ｌｏｇ２Ｎ）＜＜ｌｏｇ２Ｍ」であるＱと、「Ｎ−１」であるＮ１と、ｌｏｇ２Ｎとを記憶するパラメータ記憶部と、
前記パラメータ記憶部に記憶された各パラメータを用いて、式（１５）〜式（１７）が示す演算を行って前記ローカルアドレスＡ１、前記ローカルアドレスＡ２、前記閾値番号Ｚを得る演算回路とを備えることを特徴とする請求項６に記載のコントロールプロセッサ。
A1＝BASEADDRESS＋(Y>>log2M)×Q＋Y&M1＋(X>>log2N)<<log2M             (15)
A2＝BASEADDRESS＋(Y>>log2M)×Q＋Y&M1＋(X>>log2N)<<log2M＋M          (16)
Z＝X&N1    (17)
【請求項８】
前記プロセッサ要素の数Ｎと前記ブロックの行数Ｍは、２のべき乗であり、
前記アドレス算出部は、
「Ｍ−１」であるＭ１と、ｌｏｇ２Ｍと、「（Ｗ＞＞ｌｏｇ２Ｎ）＜＜ｌｏｇ２Ｍ」であるＱと、「Ｎ−１」であるＮ１と、ｌｏｇ２Ｎとを記憶するパラメータ記憶部と、
前記パラメータ記憶部に記憶された各パラメータを用いて、式（１５）、式（１８）、式（１７）が示す演算を行って前記ローカルアドレスＡ１、前記ローカルアドレスＡ２、前記閾値番号Ｚを得る演算回路とを備えることを特徴とする請求項６に記載のコントロールプロセッサ。
A1＝BASEADDRESS＋(Y>>log2M)×Q＋Y&M1＋(X>>log2N)<<log2M             (15)
A2＝BASEADDRESS＋(Y>>log2M)×Q＋Y&M1＋（(X>>log2N)＋1）<<log2M          (18)
Z＝X&N1    (17)
【請求項９】
リング状に接続され、順次番号が付与されたＮ個（Ｎ：２以上の整数）のプロセッサ要素と、前記Ｎ個のプロセッサ要素を制御するコントロールプロセッサとを有し、横幅がＮより大きいＷ（Ｗ：Ｎの整数倍）である２次元データを幅がＮであり、行数がＭ（Ｍ：１以上の整数）であるブロックに分割し、上に位置するブロックほど優先的に転送され、同一のブロック内の同一行のＮ個のデータが前記Ｎ個のプロセッサ要素のローカルメモリの同一のローカルアドレスに夫々格納されるように前記２次元データを外部メモリから前記ローカルメモリに転送するＳＩＭＤ（Ｓｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｍｕｌｔｉｐｌｅ  Ｄａｔａ）プロセッサにおける前記プロセッサ要素であって、
各前記プロセッサ要素は、
前記コントロールプロセッサから放送されたローカルアドレスＡ１と、ローカルアドレスＡ２と、閾値番号Ｚとを受信した際に、前記閾値番号Ｚと、自身の番号との大小関係を比較すると共に、比較結果に応じて前記ローカルアドレスＡ１とローカルアドレスＡ２のいずれかを選択するアドレス選択部を有することを特徴とするプロセッサ要素。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＳＩＭＤ（Ｓｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｍｕｌｔｉｐｌｅ  Ｄａｔａ）プロセッサに関する。
【背景技術】
【０００２】
１回の命令により複数のデータに対して同一の処理を同時に行うことができるＳＩＭＤプロセッサに関して、種々の技術が提案されている（特許文献１〜３、非特許文献１）。
【０００３】
図１０は、非特許文献１に開示されたＳＩＭＤプロセッサを概略的に示す図である。該ＳＩＭＤプロセッサ１０は、コントロールプロセッサ２０と、プロセッサアレイ３０を備える。プロセッサアレイ３０は、１次元結合の分散メモリ型プロセッサアレイであり、Ｎ（Ｎ：２以上の整数）個のプロセッサ要素を有し、これらのプロセッサ要素は、リング状に接続されており、コントロールプロセッサ２０からの命令に従って、同一の処理を行う。なお、コントロールプロセッサ２０がプロセッサアレイ３０に命令を出す際に、マスクビットやマスクフラグ（以下、「マスクフラグ」に統一する）によって、処理をしないプロセッサ要素を指定することができる。すなわち、プロセッサアレイ３０に含まれる複数プロセッサ要素は、同一の処理を行っているか、処理をしてないかのいずれかの状態にある。
【０００４】
以下において、コントロールプロセッサを「ＣＰ」、プロセッサアレイとプロセッサ要素を夫々「ＰＥアレイ」と「ＰＥ」という。
【０００５】
ＰＥアレイ３０に含まれる各ＰＥ（ＰＥ１〜ＰＥＮ）は、構成が同様であるため、ここで、ＰＥ１を代表にして説明する。図示のように、ＰＥ１は、ローカルメモリ４４、メモリコントローラ（ＭＥＭＣＴＬ）４６、演算部４８を備える。
【０００６】
演算部４８は、演算を実行するものであり、隣接するＰＥとデータの送受信ができる。ＭＥＭＣＴＬ４６は、ローカルメモリアクセスと外部メモリアクセスの制御を行う。
【０００７】
ローカルメモリアクセスは、ＰＥアレイ３０内部に生じたメモリアクセスであり、具体的には、演算部４８からの書込要求と読出要求がある。ＭＥＭＣＴＬ４６は、演算部４８の書込み要求に応じて演算部４８からのデータをローカルメモリ４４に書き込み、演算部４８の読出し要求に応じてローカルメモリ４４からデータを読み出して演算部４８に供する機能を担う。
【０００８】
また、ＭＥＭＣＴＬ４６は、ＰＥアレイ３０の外部（ＣＰ２０を含む）からメモリアクセスがあった際に、ライトアクセスの場合にはライト要求されたデータをローカルメモリ４４に書込み、リードアクセスの場合にはリード要求されたデータをローカルメモリ４４メモリから読み出して出力する機能を備える。
【０００９】
このようなＳＩＭＤプロセッサ１０は、複数のデータが２次元に配列されてなるデータ群（以下「２次元データ」という）の処理に特に有用である。２次元データは、例えば、１画面の画素のデータからなる画像データや、２次元の表の夫々のマスに入れるデータの集合などがある。以下において、２次元データの例としては画像データを用いるが、画像データを例にした全ての説明を他の２次元データにも適用できることを理解されたい。また、特に説明が無い限り、「画素」と「画素値」を同じ意味で用いる。
【００１０】
通常、画像の幅（行方向の画素数）がＰＥ数Ｎより多いため、ＳＩＭＤプロセッサ１０は、図１１に示すように、外部メモリに格納された画像データを幅がＮであり、行数がＭ（Ｍ：１以上の整数）であるブロックに分割し、複数のブロックをＰＥアレイ３０の各ＰＥのローカルメモリ４４に格納してからＰＥに処理を行わせるようになっている。
【００１１】
通常、ＰＥアレイ３０内の各ローカルメモリの容量の総和が外部メモリの容量より遥かに小さいため、同時にローカルメモリに格納し得るブロックの数が限定されている。ブロックのローカルメモリへの格納態様に関しては、「縦方向優先」と「横方向優先」の２種類が考えられる。図１２と図１３を参照して説明する。
【００１２】
図１２は、「縦方向優先」の場合の例を示す。図１２において、丸の中の数字はブロック番号を示す。また、ローカルメモリ４４内に小さな長方形は、画素を示す。画素を示す小さな長方形にある「Ａ（Ｂ，Ｃ）」（Ａ、Ｂ、Ｃ：数字）における「Ａ」は、ブロック番号を示し、「（Ｂ，Ｃ）」は、該画素が該ブロックに位置する列と行の番号を夫々示す。例えば、１（１，１）は、ブロック１における１列目、１行目の画素を示す。なお、該画素の（Ｘ，Ｙ）座標は（０，０）である。また、Ｗは、画像の幅（Ｘ方向の画素数すなわち列数）を示し、Ｈは、画像の高さ（Ｙ方向の画素数すなわち行数）を示す。これらについては、以降の各図面においても同様である。
【００１３】
図１２に示す「縦方向優先」の格納態様は、同列の画素をできるだけ多く同時にＰＥアレイ３０のローカルメモリに存在させる格納方式である。この場合、左のブロックほど優先的に格納され、同列の各ブロックに関しては、上のブロックほど優先的に格納される。
【００１４】
図１２に示す例では、画像高さＨは、ブロックの行数Ｍの５倍である。そのため、ブロックの行数は、５である。図示のように、まず、外部メモリにある画像データにおける最左端（１列目）のブロック１〜５は、ブロック１、２、３、４、５の順に格納され、次いで、左から２列目のブロック６〜１０は、ブロック６、７、・・・の順に格納される。
【００１５】
なお、夫々のブロック内のデータに関しては、行順に、各行のＮ個の画素がＮ個のＰＥのローカルメモリ４４の同一のアドレス（以下「ローカルアドレス」という）に夫々格納される。例えば、ブロック１に関して、まず、１行目の各画素（１（１、１）、１（２，１）、１（３，１）、・・・、１（Ｎ，１））は、ＰＥ１〜ＰＥＮのローカルメモリ４４の同一のローカルアドレスに夫々格納される。２行目の各画素は、１行目の同列の画素に続いて該画素と同一のＰＥのローカルメモリ４４の次のローカルアドレスに夫々格納される。例えば、ブロック１の１列目、２行目の画素１（１，２）（図示せず）は、ＰＥ１のローカルメモリ４４における１列目、１行目の画素１（１，１）のローカルアドレスの次のローカルアドレスに格納される。
【００１６】
例えば、ローカルメモリ４４におけるベースアドレスＢＡＳＥＡＤＤＲＥＳＳ（画素１（１，１）が格納されるアドレス）を０とすると、ブロック１の１行目の各画素のローカルアドレスは「０」となり、Ｍ行目の各画素のローカルアドレスは「Ｍ−１」となる、また、ブロック２の１行目の各画素のローカルアドレスは「Ｍ」となり、ブロック２のＭ行目の各画素のローカルアドレスは「２×Ｍ−１」となる。同様に、ブロック６の１行目のローカルアドレスは、「５×Ｍ」となり、ブロック６のＭ行目の各画素のローカルアドレスは「６×Ｍ−１」となる。
【００１７】
図１３は、「横方向優先」の場合の例を示す。「横方向優先」の格納態様は、同行の画素をできるだけ多く同時にＰＥアレイ３０のローカルメモリに存在させる格納方式であり、上のブロックほど優先的に格納され、同行の各ブロックに関しては、左のブロックほど優先的に格納される。
【００１８】
図１３に示す例では、画像幅Ｗは、ＰＥ数Ｎの４倍である。そのため、ブロックの列数は、４である。図示のように、まず、外部メモリにある画像データにおける最上行（１行目）のブロック１〜４は、ブロック１、２、３、４の順に格納され、次いで、上から２行目のブロック５〜８は、ブロック５、６、・・・の順に格納される。
【００１９】
なお、夫々のブロック内のデータに関しては、図１２に示す縦方向優先の場合と同様に、行順に、各行のＮ個の画素がＮ個のＰＥのローカルメモリ４４の同一のローカルアドレスに夫々格納される。
【００２０】
画像の同行の全ての画素が同時にＰＥアレイ３０のローカルメモリに存在したほうが処理手順を組み立て易いなどの場合において、図１３に示す横方向優先の格納態様が用いられる。この場合、ローカルメモリの容量を鑑みて、ブロックにおける画素の行数Ｍを調整することによって、画像の同行の全ての画素を同時にＰＥアレイ３０のローカルメモリに格納することができる。
【先行技術文献】
【特許文献】
【００２１】
【特許文献１】特表２０１０−５３１５０２号公報
【特許文献２】特開平０７−２１９９１９号公報
【特許文献３】国際公開第２００６／０４９３３１号
【非特許文献】
【００２２】
【非特許文献１】京  昭倫著「１２８個の４ウェイＶＬＩＷ型ＲＩＳＣコアを集積した車載向け動画認識ＬＳＩ」電子情報通信学会研究会報告、集積回路研究会(ＩＣＤ)，２００３年５月、Ｖｏｌ．１０３，Ｎｏ．８９，ｐｐ．１９−２４
【発明の概要】
【発明が解決しようとする課題】
【００２３】
ここで、横方向優先方式で画素データがＰＥアレイ３０のローカルメモリに格納されている場合に、ＣＰ２０がＰＥアレイ３０に処理を行わせる場合のローカルアドレスの指定について考える。画像データの例としては、図１３に示すものを用いる。
【００２４】
例えば、図１４に示すように、ブロック１の１行目の各画素（図中太線で示す）をＰＥアレイ３０に処理させる場合に、ＣＰ２０は、処理対象の画素のローカルアドレスとして、ＰＥアレイ３０に「０」を放送する。これにより、１度の命令により全てのＰＥがアクセス対象の画素を特定することができる。
【００２５】
同様に、例えば、図１５に示すように、ブロック６のＭ行目の各画素をＰＥアレイ３０に処理させる場合に、ＣＰ２０は、処理対象の画素のローカルアドレスとして、ＰＥアレイ３０に「６×Ｍ−１」を放送する。これにより、１度の命令により全てのＰＥがアクセス対象の画素を取得することができる。
【００２６】
上述した２つの例では、処理対象のＮ個の画素は、同一のブロック内の１行の画素である。言い換えれば、これらの画素は、画像の左上端の画素の座標値を（０，０）とした場合に、Ｘ方向の座標値がＮの整数倍である画素から始まるＮ個の画素である。
【００２７】
ところで、処理対象のＮ個の画素は、Ｘ方向の座標値がＮの整数倍である画素（ブロックの１列目の画素）から始まるとは限らず、ブロックの２列目以降の画素から始まるＮ個の画素である可能性がある。この場合、これらのＮ個の画素は、ブロックを跨ぐことになる。
【００２８】
例えば、図１６に示すように、座標値が（２，４）である画素、すなわちブロック５の１行目における３列目の画素（画素５（３，１））を起点とするＮ個の画素の場合、これらのＮ個の画素は、ブロック５の１行目の（Ｎ−２）個の画素（画素５（３，１）、５（４，１）、・・・、５（Ｎ，１））と、ブロック６の１行目の先頭の２つの画素（画素６（１，１）、６（２，１））となる。
【００２９】
この場合、ブロック５の（Ｎ−２）個の画素のローカルアドレスは、「４Ｍ」になるが、ブロック６の２つの画素のローカルアドレスは、「５Ｍ」になる。
【００３０】
そのため、ＣＰ２０は、ＰＥ１〜ＰＥＮに画素５（３，１）〜画素６（２，１）のＮ個の画素を夫々参照させるために、まず、図１７に示すように、ＰＥ３〜ＰＥＮに対して、ローカルアドレス「４Ｍ」を指定して、これらのＰＥのローカルメモリの「４Ｍ」に格納された画素を夫々該ＰＥ内の一時記憶装置４２にロードさせる。
【００３１】
そして、ＣＰ２０は、図１８に示すように、ＰＥ１〜ＰＥ２に対して、ローカルアドレス「５Ｍ」を指定して、これらのＰＥのローカルメモリの「５Ｍ」に格納された画素を夫々該ＰＥ内の一時記憶装置４２にロードさせる。
【００３２】
そして、ＣＰ２０は、ＰＥ間リング結合を利用したデータ交換をＰＥアレイ３０に指示する。図１９に示すように、その結果、ＰＥ１〜ＰＥＮは、画素５（３，１）〜画素６（２，１）のＮ個の画素を夫々取得する。
【００３３】
以上の説明から分かるように、画像データを幅がＰＥ数Ｎであるブロックに分割して横方向優先方式でＰＥのローカルメモリに格納するＳＩＭＤプロセッサにおいて、所定の画素から始まるＮ個の画素をＮ個のＰＥに夫々参照させる際に、該所定の画素のＸ方向の座標値がＮの整数倍ではない場合に、上記Ｎ個の画素のローカルアドレスが異なるため、処理が煩雑になり、効率が良くないという問題がある。
【課題を解決するための手段】
【００３４】
本発明の１つの態様は、ＳＩＭＤプロセッサにおけるコントロールプロセッサである。該ＳＩＭＤプロセッサは、リング状に接続され、順次番号が付与されたＮ個（Ｎ：２以上の整数）のプロセッサ要素と、該Ｎ個のプロセッサ要素を制御する前記コントロールプロセッサとを有し、横幅がＮより大きいＷ（Ｗ：Ｎの整数倍）である２次元データを幅がＮであり、行数がＭ（Ｍ：１以上の整数）であるブロックに分割し、上に位置するブロックほど優先的に転送され、同一のブロック内の同一行のＮ個のデータが前記Ｎ個のプロセッサ要素のローカルメモリの同一のローカルアドレスに夫々格納されるように前記２次元データを外部メモリから前記ローカルメモリに転送する。
【００３５】
前記コントロールプロセッサは、アドレス算出部を備え、前記ローカルメモリに格納された、前記２次元データにおける座標値が（Ｘ，Ｙ）である先頭データから行方向に並ぶＮ個のデータのローカルアドレスを前記Ｎ個のプロセッサ要素に対して指定する際に、前記アドレス算出部が算出した、ローカルアドレスＡ１と、ローカルアドレスＡ２と、閾値番号Ｚとを前記Ｎ個のプロセッサ要素に放送する。
【００３６】
前記ローカルアドレスＡ１とローカルアドレスＡ２は、前記Ｎ個のデータのローカルアドレスのなり得るものであり、前記閾値番号Ｚは、該２つのローカルアドレスのうちのいずれか１つを選択するための基準となるプロセッサ要素の番号の閾値である。前記アドレス算出部は、Ｘ、Ｙ、Ｍ、Ｗ、Ｎに基づいてローカルアドレスＡ１、Ａ２、閾値番号Ｚを算出する。
【００３７】
本発明の別の態様は、上記ＳＩＭＤプロセッサにおけるプロセッサ要素である。該プロセッサ要素は、前記ＳＩＭＤプロセッサにおけるコントロールプロセッサから放送されたローカルアドレスＡ１と、ローカルアドレスＡ２と、閾値番号Ｚとを受信した際に、前記閾値番号Ｚと、自身の番号との大小関係を比較すると共に、比較結果に応じて前記ローカルアドレスＡ１とローカルアドレスＡ２のいずれかを選択するアドレス選択部を有する。
【００３８】
本発明の更なる別の態様は、ＳＩＭＤプロセッサである。該ＳＩＭＤプロセッサにおけるコントロールプロセッサとプロセッサ要素は、本発明の態様として説明した上記のコントロールプロセッサとプロセッサ要素である。
【００３９】
なお、上記態様のコントロールプロセッサ、プロセッサ要素、ＳＩＭＤプロセッサを方法や装置、システムなどに置換えて表示したものや、これらの方法をコンピュータに実行せしめるプログラムなども、本発明の態様としては有効である。
【発明の効果】
【００４０】
本発明にかかる技術によれば、画像データを幅がＰＥ数Ｎであるブロックに分割して横方向優先方式でＰＥのローカルメモリに格納するＳＩＭＤプロセッサの処理効率を向上させることができる。
【図面の簡単な説明】
【００４１】
【図１】本発明の第１の実施の形態にかかるＳＩＭＤプロセッサを示す図である。
【図２】図１に示すＳＩＭＤプロセッサにおけるコントロールプロセッサ（ＣＰ）を示す図である。
【図３】図１に示すＳＩＭＤプロセッサにおけるＰＥのメモリコントローラ（ＭＥＭＣＴＬ）を示す図である。
【図４】本発明の第２の実施の形態にかかるＳＩＭＤプロセッサにおけるアドレス算出部を示す図である。
【図５】本発明の第３の実施の形態にかかるＳＩＭＤプロセッサにおけるアドレス算出部を示す図である。
【図６】本発明の第４の実施の形態にかかるＳＩＭＤプロセッサにおけるアドレス算出部を示す図である。
【図７】本発明の第５の実施の形態にかかるＳＩＭＤプロセッサにおけるアドレス算出部を示す図である。
【図８】本発明の第６の実施の形態にかかるＳＩＭＤプロセッサにおけるアドレス算出部を示す図である。
【図９】本発明の第７の実施の形態にかかるＳＩＭＤプロセッサにおけるアドレス算出部を示す図である。
【図１０】非特許文献１に開示されたＳＩＭＤプロセッサを概略的に示す図である。
【図１１】図１０に示すＳＩＭＤプロセッサにおいて画像データをローカルメモリへの格納態様を示す図である。
【図１２】図１１に示す格納態様のうちの縦方向優先方式を説明するための図である。
【図１３】図１１に示す格納態様のうちの横方向優先方式を説明するための図である。
【図１４】図１３に示す格納態様のときに、処理対象のＮ個の画素のローカルアドレスの例を示す図である（その１）。
【図１５】図１３に示す格納態様のときに、処理対象のＮ個の画素のローカルアドレスの例を示す図である（その２）。
【図１６】図１３に示す格納態様のときに、処理対象のＮ個の画素のローカルアドレスの例を示す図である（その３）。
【図１７】図１６に示す例の場合におけるＳＩＭＤプロセッサの処理手順を説明するための図である（その１）。
【図１８】図１６に示す例の場合におけるＳＩＭＤプロセッサの処理手順を説明するための図である（その２）。
【図１９】図１６に示す例の場合におけるＳＩＭＤプロセッサの処理手順を説明するための図である（その３）。
【発明を実施するための形態】
【００４２】
以下、図面を参照して本発明の実施の形態について説明する。説明の明確化のため、以下の記載及び図面は、適宜、省略、及び簡略化がなされている。また、様々な処理を行う機能ブロックとして図面に記載される各要素は、ハードウェアとソフトウェア（プログラム）の組合せによっていろいろな形で実現できることは当業者には理解されるところであり、ハードウェアとソフトウェアのいずれかに限定されるものではない。なお、各図面において、同一の要素には同一の符号が付されており、必要に応じて重複説明は省略されている。
【００４３】
また、上述したプログラムは、様々なタイプの非一時的なコンピュータ可読媒体（ｎｏｎ−ｔｒａｎｓｉｔｏｒｙ  ｃｏｍｐｕｔｅｒ  ｒｅａｄａｂｌｅ  ｍｅｄｉｕｍ）を用いて格納され、コンピュータに供給することができる。非一時的なコンピュータ可読媒体は、様々なタイプの実体のある記録媒体（ｔａｎｇｉｂｌｅ  ｓｔｏｒａｇｅ  ｍｅｄｉｕｍ）を含む。非一時的なコンピュータ可読媒体の例は、磁気記録媒体（例えばフレキシブルディスク、磁気テープ、ハードディスクドライブ）、光磁気記録媒体（例えば光磁気ディスク）、ＣＤ−ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）ＣＤ−Ｒ、ＣＤ−Ｒ／Ｗ、半導体メモリ（例えば、マスクＲＯＭ、ＰＲＯＭ（Ｐｒｏｇｒａｍｍａｂｌｅ  ＲＯＭ）、ＥＰＲＯＭ（Ｅｒａｓａｂｌｅ  ＰＲＯＭ）、フラッシュＲＯＭ、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ））を含む。また、プログラムは、様々なタイプの一時的なコンピュータ可読媒体（ｔｒａｎｓｉｔｏｒｙ  ｃｏｍｐｕｔｅｒ  ｒｅａｄａｂｌｅ  ｍｅｄｉｕｍ）によってコンピュータに供給されてもよい。一時的なコンピュータ可読媒体の例は、電気信号、光信号、及び電磁波を含む。一時的なコンピュータ可読媒体は、電線及び光ファイバ等の有線通信路、又は無線通信路を介して、プログラムをコンピュータに供給できる。
【００４４】
＜第１の実施の形態＞
図１は、本発明の第１の実施の形態にかかるＳＩＭＤプロセッサ１００を示す。ＳＩＭＤプロセッサ１００は、ＰＥアレイ１１０、制御ユニット１３０を備える。
【００４５】
ＰＥアレイ１１０は、Ｎ個（Ｎ：２以上の整数）のプロセッサ要素（ＰＥ）を有する。これらのＰＥは、リング状に接続され、順次番号が付与されている。図１に示す例では、これらのＰＥに対して、１〜Ｎの番号が付与されている。以下、各ＰＥに付与された番号をＰＥ番号という。なお、各ＰＥは、同一の構成を有するため、ここで、ＰＥ１を代表にして説明する。
【００４６】
ＰＥ１は、外部メモリとの間で交換されるデータを一時的に格納するバッファ１１２と、ローカルメモリ１１４、メモリコントローラ（ＭＥＭＣＴＬ）１１６、演算部１１８を備える。
【００４７】
ＭＥＭＣＴＬ１１６は、この種のＰＥに通常備えられるメモリコントローラの機能を有する。例えば、外部メモリとのデータ交換に際して、ＭＥＭＣＴＬ１１６は、制御ユニット１３０における後述するコントロールプロセッサ（ＣＰ）１５０からのリード命令に応じて、該当するデータをローカルメモリ１１４から読み出してバッファ１１２に格納し、また、ＣＰ１５０からのライト命令に応じて、バッファ１１２に格納されたデータを読み出して、ローカルメモリ１１４の該当する番地に書き込む。
【００４８】
本実施の形態において、ＭＥＭＣＴＬ１１６は、アドレス選択機能をさらに備える。これについては、後述する。
【００４９】
演算部１１８は、このＰＥに通常備えられる演算部と同様の機能を有し、ここで、詳細な説明を省略する。
【００５０】
制御ユニット１３０は、ＤＭＡ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）コントローラ１４０と、ＣＰ１５０を備える。ＣＰ１５０は、ＰＥアレイ１１０と、ＤＭＡコントローラ１４０の制御を行う。
【００５１】
ＤＭＡコントローラ１４０は、データ転送の指示（以下、単に転送指示という）をＣＰ１５０から受けると、ＰＥアレイ１１０の各ＰＥと、外部メモリとの間で交換されるデータのＤＭＡ転送を行う。具体的には、外部メモリから各ＰＥのローカルメモリ１１４への転送指示の場合には、ＤＭＡコントローラ１４０は、外部メモリから該当する各データを夫々のＰＥのバッファ１１２に転送し、ローカルメモリ１１４から外部メモリへの転送指示の場合には、夫々のバッファ１１２に格納されたデータを外部メモリに転送する。
【００５２】
本実施の形態にかかるＳＩＭＤプロセッサ１００は、横方向優先方式で、外部メモリに格納された２次元データ（以下「画像データ」を例とする）をローカルメモリ１１４へ転送することができる。横方向優先方式は、前述したように、画像データを幅がＮ（ＰＥの数）であり、行数がＭ（Ｍ：１以上の整数）であるブロックに分割し、上に位置するブロックほど優先的に転送され、同一のブロック内の同一行のＮ個のデータがＮ個のプロセッサ要素のローカルメモリの同一のローカルアドレスに夫々格納されるように該画像データを外部メモリからローカルメモリバッファ１１２に転送する方式である。
【００５３】
このような転送とローカルメモリへの格納は、ＣＰ１５０の指示に従って、ＣＰ１５０と各ＰＥのＭＥＭＣＴＬ１１６により行われる。
【００５４】
また、本実施の形態において、外部メモリからバッファ１１２に転送される画像データの横幅（１行の画素数）がＮより大きいＷ（Ｗ：Ｎの整数倍）であるとする。
【００５５】
以下において、外部メモリに記憶された画像データ一部が、既にＤＭＡコントローラ１４０と各ＰＥのＭＥＭＣＴＬ１１６により、バッファ１１２を介して横方向優先方式でＰＥアレイ１１０に転送され、夫々のローカルメモリ１１４に格納されているとして説明する。
【００５６】
図２は、ＣＰ１５０を示す図である。図示のように、ＣＰ１５０は、アドレス算出部１６０を有する。アドレス算出部１６０は、ローカルメモリ１１４上のアドレス（ローカルアドレス）であるローカルアドレスＡ１、ローカルアドレスＡ２、閾値番号Ｚを得るものである。ＣＰ１５０は、各ＰＥのローカルメモリ１１４に夫々格納された、画像データにおける座標値が（Ｘ，Ｙ）である先頭データから行方向に並ぶＮ個のデータのローカルアドレスをＰＥアレイ１１０に対して指定する際に、アドレス算出部１６０が得られた、ローカルアドレスＡ１と、ローカルアドレスＡ２と、閾値番号ＺとをＰＥアレイ１１０の各ＰＥに一斉放送する。
【００５７】
ローカルアドレスＡ１とローカルアドレスＡ２は、上記Ｎ個のデータのローカルアドレスのなり得るものであり、閾値番号Ｚは、該２つのローカルアドレスのうちのいずれか１つを選択するための基準となるプロセッサ要素の番号の閾値である。アドレス算出部１６０は、Ｘ、Ｙ、Ｍ、Ｗ、Ｎに基づいてローカルアドレスＡ１、Ａ２、閾値番号Ｚを算出する。
【００５８】
具体的には、例えば、上記画像データの左上端の画素の座標値を（０，０）とした場合に、アドレス算出部１６０は、した式（１）〜（３）に従ってローカルアドレスＡ１、ローカルアドレスＡ２、閾値番号Ｚを算出する。
【００５９】
A1＝BASEADDRESS＋floor(Y/M)×(M×W/N)＋floor(X/N)×M＋Y%M            （１）
A2＝BASEADDRESS＋floor(Y/M)×(M×W/N)＋floor(X/N)×M＋Y%M＋M         （2）
Z＝X%N    (3)
但し，
X：先頭データのＸ方向座標値
Y：先頭データのＹ方向座標値
N：プロセッサ要素の数
W：２次元データの横幅
M：ブロックの行数
【００６０】
ここで、式（１）、式（２）、及び以降の説明の中で用いる関数や、演算記号をまとめて説明する。
【００６１】
ｆｌｏｏｒ（）は、括弧内の値の整数部分を求める床関数である。
「／」は、左側の値と右側の値の割り算を示す。例えば、「Ｙ／Ｍ」は、ＹとＭの割り算を示す。また、「×」は、左側の値と右側の値の乗算を示す。
【００６２】
「％」は、左側の値を右側の値で割った余りを示す。例えば、「Ｙ％Ｍ」は、ＹをＭで割った余りを示す。
【００６３】
「＞＞」は、左側の値を右の値が示す桁の分だけ右に算術シフトするビット演算を示す。例えば、「Ａ＞＞Ｂ」は、ＡをＢ桁右に算術シフトするビット演算を示す。
【００６４】
「＜＜」は、左側の値を右の値が示す桁の分だけ左に算術シフトするビット演算を示す。例えば、「Ａ＜＜Ｂ」は、ＡをＢ桁左に算術シフトするビット演算を示す。
【００６５】
ここで、まず、各ＰＥのアドレス選択機能を説明してから、ローカルアドレスＡ１、ローカルアドレスＡ２、閾値番号Ｚの意義を説明する。
【００６６】
図３は、ＭＥＭＣＴＬ１１６を示す。図示のように、ＭＥＭＣＴＬ１１６は、アドレス選択部１２０を有する。アドレス選択部１２０は、ＣＰ１５０が放送したローカルアドレスＡ１、ローカルアドレスＡ２から自身が設けられたＰＥで使うべきローカルアドレスＡを選択するものであり、この選択は、ＣＰ１５０が放送した閾値番号Ｚに基づいて行われる。
【００６７】
図示のように、アドレス選択部１２０は、比較器１２２とデマルチプレクサ１２４を備える。比較器１２２は、ＰＥ番号（図中ＰＥＩＤ）と閾値番号Ｚが入力され、ＰＥＩＤと閾値番号Ｚとを比較して、比較結果をデマルチプレクサ１２４に出力する。
【００６８】
デマルチプレクサ１２４は、２入力１出力デマルチプレクサであり、比較器１２２からの比較結果に応じて、２つの入力（ローカルアドレスＡ１、ローカルアドレスＡ２）のいずれかを出力となるローカルアドレスＡに選択する。
【００６９】
上記構成により、アドレス選択部１２０は、自身が設けられたＰＥの番号が閾値番号Ｚより大きいときにローカルアドレスＡ１をローカルアドレスＡに選択し、上記ＰＥの番号が閾値番号Ｚ以下であるときにローカルアドレスＡ２をローカルアドレスＡに選択する。
【００７０】
図１４〜図１６に示す具体例を用いて、ＳＩＭＤプロセッサ１００において、座標値が（Ｘ，Ｙ）である先頭データから始まるＮ個の画素のローカルアドレスをＰＥアレイ１１０に対して指定する際の関連する機能ブロックの動作を説明する。なお、「Ｗ／Ｎ」が「４」であるとする。
【００７１】
図１４〜図１６は、ベースアドレスＢＡＳＥＡＤＤＲＥＳＳが０であるとして各ローカルアドレスを示しているため、ベースアドレスＢＡＳＥＡＤＤＲＥＳＳが０ではない場合には、図示の各ローカルアドレスは、図示の値にベースアドレスＢＡＳＥＡＤＤＲＥＳＳを加算した値になる。以下の説明において、「ＢＡＳＥＡＤＤＲＥＳＳ」を略して「ＢＡＳＥ」とも表記する。
【００７２】
図１４の例は、ブロック１の１行目のＮ個の画素のローカルアドレスをＰＥアレイ１１０に対して指定する場合である。この場合、式（１）〜式（３）におけるＸとＹ（すなわち先頭データの座標値）は、共に「０」であるため、ＳＩＭＤプロセッサ１００のＣＰ１５０におけるアドレス算出部１６０が算出したローカルアドレスＡ１、ローカルアドレスＡ２、閾値番号Ｚは、「ＢＡＳＥ」、「ＢＡＳＥ＋Ｍ」、「０」である。
【００７３】
ＰＥアレイ１１０の各ＰＥのＭＥＭＣＴＬ１１６におけるアドレス選択部１２０は、一斉放送されたＡ１、Ａ２、Ｚを受信すると、自身が設けられたＰＥのＰＥ番号とＺとを比較をする。例えば、ＰＥ１のＰＥ番号が「１」であり、閾値番号Ｚが「０」より大きいため、ＰＥ１のアドレス選択部１２０は、ＰＥ１が使うローカルアドレスＡとしてローカルアドレスＡ１（ベースアドレスＢＡＳＥ）を選択する。
【００７４】
ＰＥ２〜ＰＥＮの各アドレス選択部１２０も、同様に、ローカルアドレスＡとしてローカルアドレスＡ１（ベースアドレスＢＡＳＥ）を選択する。
【００７５】
その結果、ＰＥ１〜ＰＥＮのローカルメモリのベースアドレスＢＡＳＥに格納されたデータ、すなわちブロック１の１行目のデータが特定される。
【００７６】
図１５の例は、ブロック６のＭ行目のＮ個の画素のローカルアドレスをＰＥアレイ１１０に対して指定する場合である。この場合、式（１）〜式（３）におけるＸとＹは、夫々「Ｎ」と「２Ｍ−１」である。そのため、ＳＩＭＤプロセッサ１００のＣＰ１５０におけるアドレス算出部１６０が算出したローカルアドレスＡ１、ローカルアドレスＡ２、閾値番号Ｚは、「ベースアドレスＢＡＳＥ＋（６Ｍ−１）」、「「ベースアドレスＢＡＳＥ＋（７Ｍ−１）」、「０」である。
【００７７】
ＰＥ１〜ＰＥＮのいずれのＰＥ番号も「０」である閾値番号Ｚより大きいため、ＰＥアレイ１１０の各ＰＥのＭＥＭＣＴＬ１１６におけるアドレス選択部１２０は、一斉放送されたＡ１、Ａ２、Ｚを受信すると、ローカルアドレスＡとしてローカルアドレスＡ１を選択する。
【００７８】
その結果、ＰＥ１〜ＰＥＮのローカルメモリの「ベースアドレスＢＡＳＥ＋（６Ｍ−１）」に格納されたデータ、すなわちブロック６のＭ行目のデータが特定される。
【００７９】
すなわち、本実施の形態のＳＩＭＤプロセッサ１００によれば、Ｘ方向の座標値がＮの整数倍である先頭データから始まるＮ個のデータをＰＥアレイ１１０に対して指定ことを、ローカルアドレスＡ１、ローカルアドレスＡ２、閾値番号Ｚの一度の一斉放送で実現することができる。
【００８０】
図１６を参照して、Ｘ方向の座標値がＮの整数倍ではない先頭データから始まるＮ個のデータをＰＥアレイ１１０に対して指定する場合を説明する。
【００８１】
図１６の例は、ブロック５の１行目における３列目の画素（画素５（３，１））を起点とするＮ個の画素（画素５（３，１）、５（４，１）、・・・、５（Ｎ，１）、６（１，１）、６（２，１））のローカルアドレスをＰＥアレイ１１０に対して指定する場合である。この場合、式（１）〜式（３）におけるＸとＹは、夫々「２」と「Ｍ」である。そのため、ＳＩＭＤプロセッサ１００のＣＰ１５０におけるアドレス算出部１６０が算出したローカルアドレスＡ１、ローカルアドレスＡ２、閾値番号Ｚは、「ベースアドレスＢＡＳＥ＋４Ｍ」、「「ベースアドレスＢＡＳＥ＋５Ｍ」、「２」である。
【００８２】
ＰＥ１とＰＥ２のＰＥ番号が閾値番号Ｚ（２）以下であるため、該２つのＰＥにおけるアドレス選択部１２０は、ローカルアドレスＡとしてローカルアドレスＡ２を選択する。
【００８３】
一方、ＰＥ３〜ＰＥＮのＰＥ番号が閾値番号Ｚより大きいため、これらのＰＥにおけるアドレス選択部１２０は、ローカルアドレスＡとしてローカルアドレスＡ１を選択する。
【００８４】
その結果、ＰＥ１〜ＰＥ２のローカルメモリの「ベースアドレスＢＡＳＥ＋５Ｍ」に格納されたデータ、すなわちブロック６の１行目の１列目と２列目のデータと、ＰＥ３〜ＰＥＮのローカルメモリの「ベースアドレスＢＡＳＥ＋４Ｍ」に格納された、すなわちブロック５の１行目の３列目〜Ｎ列目のデータとが特定される。
【００８５】
すなわち、本実施の形態のＳＩＭＤプロセッサ１００によれば、Ｘ方向の座標値がＮの整数倍ではない先頭データから始まるＮ個のデータをＰＥアレイ１１０に対して指定ことも、ローカルアドレスＡ１、ローカルアドレスＡ２、閾値番号Ｚの一度の一斉放送で実現することができる。
【００８６】
このように、画像データをブロック分けして横方向優先方式でＰＥのローカルメモリに格納するＳＩＭＤプロセッサ１００において、ＣＰ１５０は、各ＰＥのアドレス選択部１２０が算出したローカルアドレスＡ１、ローカルアドレスＡ２、閾値番号Ｚを一斉放送し、各ＰＥにおけるアドレス選択部１２０は、閾値番号Ｚと自身のＰＥ番号とを比較した結果に応じてローカルアドレスＡ１とローカルアドレスＡ２のいずれかをローカルアドレスＡとして選択する。これにより、先頭データのＸ方向の座標値がＮの整数場合であるか否かに関わらず、１つの命令で、先頭データから始まるＮ個のデータをＰＥアレイ１１０に対して指定することができ、ひいては、ＳＩＭＤプロセッサ１００全体の処理効率を向上させることができる。
【００８７】
なお、ＳＩＭＤプロセッサ１００において、ＰＥアレイ１１０内のＰＥに対して１〜ＮのＰＥ番号を付与し、アドレス選択部１２０は、ＰＥ番号が閾値番号Ｚより大きいときにローカルアドレスＡ１を選択し、ＰＥ番号が閾値番号Ｚ以下であるときにローカルアドレスＡ２を選択するようになっている。例えば、ＰＥアレイ１１０のＰＥに対して０〜（Ｎ−１）のＰＥ番号を付与している場合には、アドレス選択部１２０は、ＰＥ番号が閾値番号Ｚ以上であるときにローカルアドレスＡ１を選択し、ＰＥ番号が閾値番号Ｚより小さいときにローカルアドレスＡ２を選択するようにすればよい。
【００８８】
＜第２の実施の形態＞
第１の実施の形態にかかるＳＩＭＤプロセッサ１００におけるＣＰ１５０は、式（１）〜式（３）の演算を行うことによりローカルアドレスＡ１、ローカルアドレスＡ２、通常の閾値番号Ｚを得ている。コントロールプロセッサは、通常、汎用的なプロセッサが持つものと類似した命令セットしか持たないため、式（１）と式（２）の演算を実行するためには、多くの処理サイクルを必要とし、結果的には、大きなオーバーヘッドが発生してしまう恐れがある。ＣＰ１５０におけるアドレス算出部１６０を工夫して、上記オーバーヘッドを抑制する技術に関して、第２の実施の形態を用いて説明する。
【００８９】
本発明の第２の実施の形態も、ＳＩＭＤプロセッサである。このＳＩＭＤプロセッサは、下記の２点を除き、ＳＩＭＤプロセッサ１００と同一である。そのため、第２の実施の形態のＳＩＭＤプロセッサについて、ＳＩＭＤプロセッサ１００と異なる点のみを説明する。
【００９０】
（１）該ＳＩＭＤプロセッサにおけるＰＥ数Ｎと、ブロックの行数Ｍに対して、２のべき乗である制限が加えられている。
【００９１】
（２）ＣＰ１５０において、アドレス算出部１６０の代わりに、図４に示すアドレス算出部２００が設けられている。
【００９２】
図４に示すように、アドレス算出部２００は、演算回路２０１と、演算回路２０１以外の、太線枠で示す複数の記憶部を含むパラメータ記憶部とを備える。
【００９３】
パラメータ記憶部は、具体的には、「（Ｗ＞＞ｌｏｇ２Ｎ）＜＜ｌｏｇ２Ｍ」であるＱを記憶した記憶部２１１と、ブロックの行数Ｍから１を減算して得たＭ１（＝（Ｍ−１））を記憶した記憶部２１２と、ｌｏｇ２Ｍを記憶した記憶部２１３と、ｌｏｇ２Ｎを記憶した記憶部２１４と、Ｍを記憶した記憶部２１５と、「Ｎ−１」であるＮ１を記憶した記憶部２１６を含む。なお、ＭとＮが共に２のべき乗であるため、ｌｏｇ２Ｍとｌｏｇ２Ｎは、整数である。
【００９４】
演算回路２０１は、上記各記憶部に格納されたパラメータを用いて、ローカルアドレスＡ１、ローカルアドレスＡ２、閾値番号Ｚを算出する。
【００９５】
図示のように、演算回路２０１は、算術シフト回路２２１、論理積回路２２２、乗算器２２３、加算器２２４、加算器２２５、加算器２２６、算術シフト回路２３１、算術シフト回路２３２、加算器２３３、加算器２３４、論理積回路２４０を備える。
【００９６】
算術シフト回路２２１は、Ｙ（先頭データのＹ座標値）と、記憶部２１３からのｌｏｇ２Ｍとが入力され、Ｙをｌｏｇ２Ｍ桁右に算術シフトすると共に、結果を乗算器２２３に出力する。
【００９７】
乗算器２２３は、算術シフト回路２２１の出力と、記憶部２１１からのＱとを乗算して、結果を加算器２２４に出力する。
【００９８】
論理積回路２２２は、Ｙと、記憶部２１２からのＭ１とが入力され、ＹとＭ１をビットに対してビット毎の論理積演算を行って、結果を加算器２２４に出力する。論理積回路２２２が行う演算は、「Ｙ％Ｍ」と等価である。
【００９９】
加算器２２４は、乗算器２２３と論理積回路２２２の出力を加算して、加算器２２５に出力する。
【０１００】
算術シフト回路２３１は、Ｘ（先頭データのＸ座標値）と、記憶部２１４からのｌｏｇ２Ｎとが入力され、Ｘをｌｏｇ２Ｎ桁右に算術シフトすると共に、結果を算術シフト回路２３２に出力する。
【０１０１】
算術シフト回路２３２は、記憶部２１３からのｌｏｇ２Ｍと、算術シフト回路２３１の出力とが入力され、算術シフト回路２３１の出力をｌｏｇ２Ｍ桁左に算術シフトすると共に、結果を加算器２２５に出力する。
【０１０２】
加算器２２５は、加算器２２４の出力と、算術シフト回路２３２の出力とを加算して加算器２２６と加算器２３３に出力する。
【０１０３】
加算器２２６は、ベースアドレスＢＡＳＥと、加算器２２５の出力とを加算して結果を出力する。加算器２２６の出力は、ローカルアドレスＡ１になる。
【０１０４】
加算器２３３は、加算器２２５の出力と、記憶部２１５からのＭとを加算して結果を加算器２３４に出力する。
【０１０５】
加算器２３４は、ベースアドレスＢＡＳＥと、加算器２３３の出力とを加算して結果を出力する。加算器２３４の出力は、ローカルアドレスＡ２になる。
【０１０６】
論理積回路２４０は、Ｘと、記憶部２１６からのＮ１とが入力され、ＸとＮ１をビットに対してビット毎の論理積演算を行って結果を出力する。論理積回路２４０が行う演算は、「Ｘ％Ｎ」と等価である。すなわち、論理積回路２４０の出力は、閾値番号Ｚになる。
【０１０７】
演算回路２０１が行う演算は、下記の式（４）〜式（６）で示すことができる。
A1＝BASEADDRESS＋(Y>>log2M)×Q＋Y&M1＋(X>>log2N)<<log2M             (4)
A2＝BASEADDRESS＋(Y>>log2M)×Q＋Y&M1＋(X>>log2N)<<log2M＋M          (5)
Z＝X&N1    (6)
【０１０８】
これらの式が示す演算は、式（１）〜式（３）が示す演算と等価である。
このように、本発明の第２の実施の形態のＳＩＭＤプロセッサは、ＰＥ数Ｎが２のべき乗であると共に、ブロックの行数Ｍも２のべき乗に制限すると共に、アドレス算出部２００により演算を行うことにより、ローカルアドレスＡ１、ローカルアドレスＡ２、閾値番号Ｚを算出するための乗算回数と除算回数を減らしている。その結果、回路の実現コストを低減すると共に、ローカルアドレスＡ１などを算出するためのオーバーヘッドを抑制することができる。
【０１０９】
＜第３の実施の形態＞
本発明の第３の実施の形態は、第２の実施の形態にかかるＳＩＭＤプロセッサに対して、アドレス算出部２００の代わりに、図５に示すアドレス算出部３００が設けられたＳＩＭＤプロセッサである。
【０１１０】
図５に示すように、アドレス算出部３００は、演算回路３０１と、演算回路３０１以外のパラメータ記憶部を有する。
【０１１１】
アドレス算出部３００において、アドレス算出部２００と比較すると、パラメータ記憶部には、Ｍを記憶部２１５が無い。また、演算回路３０１には、算術シフト回路２３１の出力に対して「１」を加算する加算器３３１と、加算器３３１の出力をｌｏｇ２Ｍ桁左に算術シフトする算術シフト回路３３２が設けられている。さらに、加算器２３３の代わりに、加算器２２４の出力と、算術シフト回路３３２の出力とを加算する加算器３３３が設けられている。
【０１１２】
アドレス算出部３００における演算回路３０１が行う演算は、式（４）、式（７）、式（６）で示すことができる。なお、式（４）と式（６）は、前に述べたが、分かりやすいように、再度示す。
A1＝BASEADDRESS＋(Y>>log2M)×Q＋Y&M1＋(X>>log2N)<<log2M             (4)
A2＝BASEADDRESS＋(Y>>log2M)×Q＋Y&M1＋（(X>>log2N)＋1）<<log2M      (7)
Z＝X&N1    (6)
【０１１３】
すなわち、演算回路３０１は、ローカルアドレスＡ２の計算に、演算回路２０１が行った式（５）の演算の代わりに、式（７）の演算を実行する。なお、式（４）、式（７）、式（６）で示す演算も、式（１）〜式（３）が示す演算と等価である。
【０１１４】
アドレス算出部３００を備えた本実施の形態のＳＩＭＤプロセッサも、アドレス算出部２００を備えた第２の実施の形態のＳＩＭＤプロセッサと同様の効果を得ることができる。
【０１１５】
＜第４の実施の形態＞
本発明の第４の実施の形態は、第２の実施の形態にかかるＳＩＭＤプロセッサに対して、アドレス算出部２００の代わりに、図６に示すアドレス算出部４００が設けられたＳＩＭＤプロセッサである。
【０１１６】
図６に示すように、アドレス算出部４００は、演算回路４０１と、演算回路４０１以外のパラメータ記憶部を有する。
【０１１７】
アドレス算出部４００において、アドレス算出部２００と比較すると、パラメータ記憶部には、ｌｏｇ２Ｎを記憶する記憶部２１４の代わりに、ＢＩＤを記憶する記憶部４１４が設けられている。なお、ＢＩＤは、Ｎ個のデータのうちの先頭データが位置するブロックの番号である。また、演算回路４０１には、算術シフト回路２３１の代わりに、記憶部４１４からのブロック番号ＢＩＤと、論理積回路２４０により得られた閾値番号Ｚとを加算する加算器４３１が設けられている。また、算術シフト回路２３２の代わりに設けられた算術シフト回路４３２は、加算器４３１の出力をｌｏｇ２Ｍ桁左にシフトして、結果を加算器２２５に出力する。
【０１１８】
アドレス算出部４００における演算回路４０１が行う演算は、式（８）〜式（１０）で示すことができる。
Z＝X&N1    (8)
A1＝BASEADDRESS＋(Y>>log2M)×Q＋Y&M1＋(BID＋Z)<<log2M             (9)
A2＝BASEADDRESS＋(Y>>log2M)×Q＋Y&M1＋(BID＋Z)<<log2M＋M          (10)
【０１１９】
これらの式が示す演算も、式（１）〜式（３）が示す演算と等価である。
【０１２０】
アドレス算出部４００を備えた本実施の形態のＳＩＭＤプロセッサも、アドレス算出部２００を備えた第２の実施の形態のＳＩＭＤプロセッサと同様の効果を得ることができる。
【０１２１】
＜第５の実施の形態＞
本発明の第５の実施の形態は、第４の実施の形態にかかるＳＩＭＤプロセッサに対して、アドレス算出部４００の代わりに、図７に示すアドレス算出部５００が設けられたＳＩＭＤプロセッサである。
【０１２２】
図７に示すように、アドレス算出部５００は、演算回路５０１と、演算回路５０１以外のパラメータ記憶部を有する。
【０１２３】
アドレス算出部５００は、Ｘ、Ｙ、ベースアドレスＢＡＳＥが入力されるアドレス算出部４００と異なり、閾値番号Ｚ、Ｙ、ベースアドレスＢＡＳＥが入力される。
【０１２４】
また、アドレス算出部４００と比較すると、アドレス算出部５００のパラメータ記憶部は、「Ｎ−１」であるＮ１を記憶する記憶部２１６が無い点を除き、アドレス算出部４００のパラメータ記憶部と同様である。また、演算回路５０１は、ＸとＮ１から閾値番号Ｚを算出する論理積回路２４０が無い点を除き、アドレス算出部４００の演算回路４０１と同様である。
【０１２５】
すなわち、本実施の形態のＳＩＭＤプロセッサにおけるアドレス算出部５００は、閾値番号Ｚが外部から入力されることにより、アドレス算出部４００より小さい回路規模でアドレス算出部４００と同様の演算ができる。
【０１２６】
＜第６の実施の形態＞
本発明の第６の実施の形態は、図５に示すアドレス算出部３００と、図６に示すアドレス算出部４００とを組み合わせたアドレス算出回路６００が設けられたＳＩＭＤプロセッサである。
【０１２７】
図８に示すように、アドレス算出部６００は、演算回路６０１と、演算回路６０１以外のパラメータ記憶部を有する。
【０１２８】
アドレス算出部３００のパラメータ記憶部と同様に、アドレス算出回路６００のパラメータ記憶部には、Ｍを記憶する記憶部２１５が無い。
【０１２９】
また、アドレス算出部４００のパラメータ記憶部と同様に、アドレス算出回路６００のパラメータ記憶部には、記憶部２１４の代わりに、ブロック番号ＢＩＤを記憶する記憶部４１４が設けられている。
【０１３０】
また、演算回路６０１には、記憶部４１４からのブロック番号ＢＩＤと、論理積回路２４０により得られた閾値番号Ｚとを加算する加算器４３１が設けられている。算術シフト回路４３２は、加算器４３１の出力をｌｏｇ２Ｍ桁左にシフトして、結果を加算器２２５に出力する。また、加算器４３１の出力に対して「１」を加算する加算器３３１と、加算器３３１の出力をｌｏｇ２Ｍ桁左に算術シフトする算術シフト回路３３２が設けられている。さらに、加算器２２４の出力と、算術シフト回路３３２の出力とを加算して加算器２３４に出力する加算器３３３が設けられている。
【０１３１】
演算回路６０１が行う演算は、式（８）、式（９）、式（１１）により示すことができる。
Z＝X&N1    (8)
A1＝BASEADDRESS＋(Y>>log2M)×Q＋Y&M1＋(BID＋Z)<<log2M             (9)
A2＝BASEADDRESS＋(Y>>log2M)×Q＋Y&M1＋(BID＋Z＋1)<<log2M          (11)
これらの式が示す演算も、式（１）〜式（３）が示す演算と等価である。
【０１３２】
＜第７の実施の形態＞
本発明の第７の実施の形態は、図７に示すアドレス算出部５００と、図８に示すアドレス算出部６００とを組み合わせたアドレス算出回路７００が設けられたＳＩＭＤプロセッサである。
【０１３３】
図９に示すように、アドレス算出部７００は、演算回路７０１と、演算回路７０１以外のパラメータ記憶部を有する。該アドレス算出回路７００は、アドレス算出部５００と同様に、閾値番号Ｚ、Ｙ、ベースアドレスＢＡＳＥが入力される。
【０１３４】
また、アドレス算出部５００のパラメータ記憶部と同様に、アドレス算出回路７００のパラメータ記憶部には、Ｎ１を記憶する記憶部２１６と、ｌｏｇ２Ｎを記憶する記憶部２１４が無く、ブロック番号ＢＩＤを記憶する記憶部４１４が設けられている。
【０１３５】
さらに、アドレス算出部６００のパラメータ記憶部と同様に、アドレス算出回路７００のパラメータ記憶部には、Ｍを記憶する記憶部２１５が無い。
【０１３６】
すなわち、アドレス算出回路７００において、パラメータ記憶部は、Ｑ、Ｍ１、ｌｏｇ２Ｍ、ブロック番号ＢＩＤのみを記憶している。
【０１３７】
また、演算回路７０１に関しては、ＸとＮ１から閾値番号Ｚを算出する論理積回路２４０が無い点を除き、アドレス算出回路６００の演算回路６０１と同様である。
【０１３８】
すなわち、演算回路７０１は、上記式（９）と式（１１）が示す演算を実行してローカルアドレスＡ１とローカルアドレスＡ２を得る。
【０１３９】
以上、実施の形態をもとに本発明を説明した。実施の形態は例示であり、本発明の主旨から逸脱しない限り、上述した各実施の形態に対してさまざまな変更、増減、組合せを行ってもよい。これらの変更、増減、組合せが行われた変形例も本発明の範囲にあることは、当業者に理解されるところである。
【０１４０】
例えば、上述した各実施の形態を説明する際に画像を例にしたが、本発明にかかる技術は、画像以外の２次元データを処理するＳＩＭＤプロセッサにも適用することができる。
【符号の説明】
【０１４１】
１０  ＳＩＭＤプロセッサ  ２０  コントロールプロセッサ
３０  ＰＥアレイ  ４２  一時記憶装置
４４  ローカルメモリ  ４６  ＭＥＭＣＴＬ
４８  演算部  １００  ＳＩＭＤプロセッサ
１１０  ＰＥアレイ  １１２  バッファ
１１４  ローカルメモリ  １１６  メモリコントローラ
１２０  アドレス選択部  １２２  比較器
１２４  デマルチプレクサ  １１８  演算部
１３０  制御ユニット  １４０  ＤＭＡコントローラ
１５０  ＣＰ  １６０  アドレス算出部
２００  アドレス算出部  ２０１  演算回路
２１１〜２１６  記憶部  ２２１  算術シフト回路
２２２  論理積回路  ２２３  乗算器
２２４〜２２６  加算器  ２３１  算術シフト回路
２３２  算術シフト回路  ２３３〜２３４  加算器
２４０  論理積回路  ３００  アドレス算出部
３０１  演算回路  ３３１  加算器
３３２  算術シフト回路  ３３３  加算器
４００  アドレス算出部  ４０１  演算回路
４１４  記憶部  ４３１  加算器
４３２  算術シフト回路  ５００  アドレス算出部
５０１  演算回路  ６００  アドレス算出回路
６０１  演算回路  ７００  アドレス算出回路
７０１  演算回路  Ａ  ローカルアドレス
Ａ１  ローカルアドレス  Ａ２  ローカルアドレス
Ｍブロックの行数  Ｎ  ＰＥ数
ＢＩＤ  ブロック番号  ＰＥＩＤ  ＰＥ番号
Ｗ  横幅  Ｚ  閾値番号
【図１】
0005739779.tif 000002
【図２】
0005739779.tif 000003
【図３】
0005739779.tif 000004
【図４】
0005739779.tif 000005
【図５】
0005739779.tif 000006
【図６】
0005739779.tif 000007
【図７】
0005739779.tif 000008
【図８】
0005739779.tif 000009
【図９】
0005739779.tif 000010
【図１０】
0005739779.tif 000011
【図１１】
0005739779.tif 000012
【図１２】
0005739779.tif 000013
【図１３】
0005739779.tif 000014
【図１４】
0005739779.tif 000015
【図１５】
0005739779.tif 000016
【図１６】
0005739779.tif 000017
【図１７】
0005739779.tif 000018
【図１８】
0005739779.tif 000019
【図１９】
0005739779.tif 000020