(57)【特許請求の範囲】
【請求項１】
Ｎ個（Ｎ：２以上の整数）のプロセッサ要素を有し、各前記プロセッサ要素が、容量が単位サイズＳであり、該プロセッサ要素と外部メモリとの間で転送されるデータを一時的に格納するバッファを有するＳＩＭＤ（Ｓｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｍｕｌｔｉｐｌｅ  Ｄａｔａ）プロセッサに設けられたメモリコントローラであって、
前記外部メモリにおけるＮ個のアドレスＡｉ（ｉ＝１〜Ｎ）を設定可能なアドレス記憶部と、
第１のパラメータＯＳＶと、第２のパラメータＷと、第３のパラメータＬとを設定可能なパラメータ記憶部と、
前記外部メモリと、前記Ｎ個のプロセッサ要素のバッファとの間でデータ転送を行うデータ転送部とを有し、
前記データ転送部は、
前記データ転送の指示に応じて、第１の処理を前記パラメータ記憶部に記憶された前記第３のパラメータＬに合致する回数分繰り返し、
前記第１の処理は、第２の処理をすると共に第３の処理を行うことを式（１）に示すＭ回繰り返した後に、前記第２の処理をすると共に第４の処理を行う処理であり、
前記第２の処理は、
前記外部メモリから前記Ｎ個のプロセッサ要素のバッファへのデータ転送の際に、１アドレスが１プロセッサ要素に対応するように、前記アドレス記憶部に記憶されている各アドレスから夫々単位サイズＳ分のデータを読み出して、対応するプロセッサ要素のバッファに格納する処理であり、
前記Ｎ個のプロセッサ要素のバッファから前記外部メモリへのデータ転送の際に、１アドレスが１プロセッサ要素に対応するように、夫々の前記プロセッサ要素のバッファに格納されたデータを読み出して、前記アドレス記憶部に記憶されているＮ個のアドレスのうちの、対応するアドレスに書き込む処理であり、
前記第３の処理は、前記アドレス記憶部に記憶されている各アドレスＡｉを式（２）に従って増分させる処理であり、
前記第４の処理は、前記アドレス記憶部に記憶されている各アドレスＡｉを式（３）に従って増分させる処理であることを特徴とするメモリコントローラ。
Ｍ＝Ｗ／Ｓ−１      （１）
但し，Ｗ：パラメータ記憶部に記憶された第２のパラメータ
Ｓ：単位サイズ
Ａｉ＝Ａｉ＋Ｓ        （２）
但し，Ａｉ：ｉ個目のアドレス
Ｓ：単位サイズ
Ａｉ＝Ａｉ＋ＯＳＶ    （３）
但し，Ａｉ：ｉ個目のアドレス
ＯＳＶ：パラメータ記憶部に記憶された第１のパラメータ
【請求項２】
Ｎ個（Ｎ：２以上の整数）のプロセッサ要素を有し、各前記プロセッサ要素が、容量が単位サイズＳであり、該プロセッサ要素と外部メモリとの間で転送されるデータを一時的に格納するバッファを有するＳＩＭＤ（Ｓｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｍｕｌｔｉｐｌｅ  Ｄａｔａ）プロセッサに設けられたメモリコントローラであって、
前記外部メモリにおけるＮ個のアドレスＡｉ（ｉ＝１〜Ｎ）を設定可能なアドレス記憶部と、
第１のパラメータＯＳＶと、第２のパラメータＷと、第３のパラメータＬと、第４のパラメータＴを設定可能なパラメータ記憶部と、
前記外部メモリと、前記Ｎ個のプロセッサ要素のバッファとの間でデータ転送を行うデータ転送部とを有し、
前記データ転送部は、
前記データ転送の指示に応じて、第１の処理を前記パラメータ記憶部に記憶された前記第３のパラメータＬに合致する回数分繰り返し、
前記第１の処理は、第２の処理をすると共に第３の処理を行うことを式（４）に示すＭ１回繰り返した後に、前記第２の処理をすると共に第４の処理を行う処理であり、
前記第２の処理は、第５の処理をＴ回繰り返す処理であり、
前記第５の処理は、
前記外部メモリから前記Ｎ個のプロセッサ要素のバッファへのデータ転送の際に、１アドレスが隣接するＴ個のプロセッサ要素に対応するように、前記アドレス記憶部に記憶されているＮ個のアドレスのうちの「Ｎ／Ｔ」個のアドレスであって、かつ、回毎に異なる前記「Ｎ／Ｔ」個のアドレスから夫々単位サイズＳのＴ倍分のデータを読み出して、対応するＴ個のプロセッサ要素のバッファに夫々格納する処理であり、
前記Ｎ個のプロセッサ要素のバッファから前記外部メモリへのデータ転送の際に、各前記プロセッサ要素のバッファに格納されたデータを読み出すと共に、１アドレスが隣接するＴ個のプロセッサ要素に対応するように、隣接するＴ個のプロセッサ要素からなるグループ毎に、該グループ内のＴ個のプロセッサ要素のバッファから読み出したデータを、前記アドレス記憶部に記憶されているＮ個のアドレスのうちの「Ｎ／Ｔ」個のアドレスであって、かつ、回毎に異なる前記「Ｎ／Ｔ」個のアドレスのうちの、前記グループに対応する１つに書き込む処理であり、
前記第３の処理は、前記アドレス記憶部に記憶されている各アドレスＡｉを式（５）に従って増分させる処理であり、
前記第４の処理は、前記アドレス記憶部に記憶されている各アドレスＡｉを式（３）に従って増分させる処理であることを特徴とするメモリコントローラ。
Ｍ１＝［Ｗ／（Ｔ×Ｓ）］−１      （４）
但し，Ｗ：パラメータ記憶部に記憶された第２のパラメータ
Ｓ：単位サイズ
Ｔ：パラメータ記憶部に記憶された第４のパラメータ
Ａｉ＝Ａｉ＋Ｓ×Ｔ        （５）
但し，Ａｉ：ｉ個目のアドレス
Ｓ：単位サイズ
Ｔ：パラメータ記憶部に記憶された第４のパラメータ
Ａｉ＝Ａｉ＋ＯＳＶ    （３）
但し，Ａｉ：ｉ個目のアドレス
ＯＳＶ：パラメータ記憶部に記憶された第１のパラメータ
【請求項３】
前記データ転送部は、
前記外部メモリから前記Ｎ個のプロセッサ要素のバッファへのデータ転送の際に、前記Ｎ個のプロセッサ要素のバッファの全てがフルになる度に割込みを発生させ、
前記Ｎ個のプロセッサ要素のバッファから前記外部メモリへのデータ転送の際に、前記Ｎ個のプロセッサ要素のバッファの全てが空になる度に割込みを発生させることを特徴とする請求項１または２に記載のメモリコントローラ。
【請求項４】
コントロールプロセッサと、
前記コントロールプロセッサにより制御されるＮ個（Ｎ：２以上の整数）のプロセッサ要素と、
メモリコントローラとを備えるＳＩＭＤ（Ｓｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｍｕｌｔｉｐｌｅ  Ｄａｔａ）プロセッサであって、
各前記プロセッサ要素は、容量が単位サイズＳであり、該プロセッサ要素と外部メモリとの間で転送されるデータを一時的に格納するバッファを有し、
前記メモリコントローラは、
前記コントロールプロセッサにより、前記外部メモリにおけるＮ個のアドレスＡｉ（ｉ＝１〜Ｎ）を設定可能なアドレス記憶部と、
前記コントロールプロセッサにより、第１のパラメータＯＳＶと、第２のパラメータＷと、第３のパラメータＬとを設定可能なパラメータ記憶部と、
前記コントロールプロセッサからのデータ転送の指示に応じて、前記外部メモリと、前記Ｎ個のプロセッサ要素のバッファとの間でデータ転送を行うデータ転送部とを有し、
前記データ転送部は、
前記データ転送に際して、第１の処理を前記パラメータ記憶部に記憶された前記第３のパラメータＬに合致する回数分繰り返し、
前記第１の処理は、第２の処理をすると共に第３の処理を行うことを式（６）に示すＭ回繰り返した後に、前記第２の処理をすると共に第４の処理を行う処理であり、
前記第２の処理は、
前記外部メモリから前記Ｎ個のプロセッサ要素のバッファへのデータ転送の際に、１アドレスが１プロセッサ要素に対応するように、前記アドレス記憶部に記憶されている各アドレスから夫々単位サイズＳ分のデータを読み出して、対応するプロセッサ要素のバッファに格納する処理であり、
前記Ｎ個のプロセッサ要素のバッファから前記外部メモリへのデータ転送の際に、１アドレスが１プロセッサ要素に対応するように、夫々の前記プロセッサ要素のバッファに格納されたデータを読み出して、前記アドレス記憶部に記憶されているＮ個のアドレスのうちの、対応するアドレスに書き込む処理であり、
前記第３の処理は、前記アドレス記憶部に記憶されている各アドレスＡｉを式（７）に従って増分させる処理であり、
前記第４の処理は、前記アドレス記憶部に記憶されている各アドレスＡｉを式（８）に従って増分させる処理であり、
Ｍ＝Ｗ／Ｓ−１      （６）
但し，Ｗ：パラメータ記憶部に記憶された第２のパラメータ
Ｓ：単位サイズ
Ａｉ＝Ａｉ＋Ｓ        （７）
但し，Ａｉ：ｉ個目のアドレス
Ｓ：単位サイズ
Ａｉ＝Ａｉ＋ＯＳＶ    （８）
但し，Ａｉ：ｉ個目のアドレス
ＯＳＶ：パラメータ記憶部に記憶された第１のパラメータ
前記コントロールプロセッサは、
前記メモリコントローラによる前記外部メモリから前記Ｎ個のプロセッサ要素のバッファへのデータ転送の際に、前記Ｎ個のプロセッサ要素のバッファの全てがフルになる度に、各前記プロセッサ要素にライト命令を出し、
前記メモリコントローラによる前記Ｎ個のプロセッサ要素のバッファから前記外部メモリへのデータ転送の際に、前記Ｎ個のプロセッサ要素のバッファの全てが空になる度に、各前記プロセッサ要素にリード命令を出すことを特徴とするＳＩＭＤプロセッサ。
【請求項５】
前記コントロールプロセッサは、
前記Ｎ個のアドレスＡｉ（ｉ＝１〜Ｎ）として、複数の単位サイズＳのデータが２次元に配列してなる２次元データを記憶した前記外部メモリにおける、前記２次元データに含まれるＮ個の矩形領域の先頭アドレスを前記アドレス記憶部に設定し、
前記矩形領域の行方向のサイズと、前記矩形領域の行数とを、夫々第２のパラメータＷと、第３のパラメータＬとして前記パラメータ記憶部に設定することを特徴とする請求項４に記載のＳＩＭＤプロセッサ。
【請求項６】
前記コントロールプロセッサは、
前記Ｎ個の矩形領域が異なる行方向のサイズを有するときに、各前記行方向のサイズのうちの最大値を前記第２のパラメータＷとして設定し、
前記Ｎ個の矩形領域が異なる行数を有するときに、各前記行数のうちの最大値を前記第３のパラメータＬとして設定することを特徴とする請求項５に記載のＳＩＭＤプロセッサ。
【請求項７】
前記２次元データは、画像データであり、
前記単位サイズＳのデータは、１画素のデータであることを特徴とする請求項５または６に記載のＳＩＭＤプロセッサ。
【請求項８】
コントロールプロセッサと、
前記コントロールプロセッサにより制御されるＮ個（Ｎ：２以上の整数）のプロセッサ要素と、
メモリコントローラとを備えるＳＩＭＤ（Ｓｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｍｕｌｔｉｐｌｅ  Ｄａｔａ）プロセッサであって、
各前記プロセッサ要素は、容量が単位サイズＳであり、該プロセッサ要素と外部メモリとの間で転送されるデータを一時的に格納するバッファを有し、
前記メモリコントローラは、
前記コントロールプロセッサにより、前記外部メモリにおけるＮ個のアドレスＡｉ（ｉ＝１〜Ｎ）を設定可能なアドレス記憶部と、
前記コントロールプロセッサにより、第１のパラメータＯＳＶと、第２のパラメータＷと、第３のパラメータＬと、第４のパラメータＴを設定可能なパラメータ記憶部と、
前記コントロールプロセッサからのデータ転送の指示に応じて、前記外部メモリと、前記Ｎ個のプロセッサ要素のバッファとの間でデータ転送を行うデータ転送部とを有し、
前記コントロールプロセッサは、Ｎの約数を前記第４のパラメータＴとして前記パラメータ記憶部に設定し、
前記メモリコントローラにおける前記データ転送部は、
前記データ転送の指示に応じて、第１の処理を前記パラメータ記憶部に記憶された前記第３のパラメータＬに合致する回数分繰り返し、
前記第１の処理は、第２の処理をすると共に第３の処理を行うことを式（９）に示すＭ１回繰り返した後に、前記第２の処理をすると共に第４の処理を行う処理であり、
前記第２の処理は、第５の処理をＴ回繰り返す処理であり、
前記第５の処理は、
前記外部メモリから前記Ｎ個のプロセッサ要素のバッファへのデータ転送の際に、１アドレスが隣接するＴ個のプロセッサ要素に対応するように、前記アドレス記憶部に記憶されているＮ個のアドレスのうちの「Ｎ／Ｔ」個のアドレスであって、かつ、回毎に異なる前記「Ｎ／Ｔ」個のアドレスから夫々単位サイズＳのＴ倍分のデータを読み出して、対応するＴ個のプロセッサ要素のバッファに夫々格納する処理であり、
前記Ｎ個のプロセッサ要素のバッファから前記外部メモリへのデータ転送の際に、各前記プロセッサ要素のバッファに格納されたデータを読み出すと共に、１アドレスが隣接するＴ個のプロセッサ要素に対応するように、隣接するＴ個のプロセッサ要素からなるグループ毎に、該グループ内のＴ個のプロセッサ要素のバッファから読み出したデータを、前記アドレス記憶部に記憶されているＮ個のアドレスのうちの「Ｎ／Ｔ」個のアドレスであって、かつ、回毎に異なる前記「Ｎ／Ｔ」個のアドレスのうちの、前記グループに対応する１つに書き込む処理であり、
前記第３の処理は、前記アドレス記憶部に記憶されている各アドレスＡｉを式（１０）に従って増分させる処理であり、
前記第４の処理は、前記アドレス記憶部に記憶されている各アドレスＡｉを式（８）に従って増分させる処理であり、
Ｍ１＝［Ｗ／（Ｔ×Ｓ）］−１      （９）
但し，Ｗ：パラメータ記憶部に記憶された第２のパラメータ
Ｓ：単位サイズ
Ｔ：パラメータ記憶部に記憶された第４のパラメータ
Ａｉ＝Ａｉ＋Ｓ×Ｔ        （１０）
但し，Ａｉ：ｉ個目のアドレス
Ｓ：単位サイズ
Ｔ：パラメータ記憶部に記憶された第４のパラメータ
Ａｉ＝Ａｉ＋ＯＳＶ    （８）
但し，Ａｉ：ｉ個目のアドレス
ＯＳＶ：パラメータ記憶部に記憶された第１のパラメータ
前記コントロールプロセッサは、
前記Ｎ個のプロセッサ要素のバッファから前記外部メモリへのデータ転送の際には該データ転送の指示の前に、前記外部メモリから前記Ｎ個のプロセッサ要素のバッファへのデータ転送の際には該データ転送の指示に応じて前記メモリコントローラが該データ転送を完了した後に、前記Ｎ個のプロセッサ要素に対してデータ交換の命令を出し、
前記Ｎ個のプロセッサ要素は、前記データ交換の命令に応じて、隣接するプロセッサ要素同士間で、ローカルメモリ上のデータを交換することを特徴とするＳＩＭＤプロセッサ。
【請求項９】
前記メモリコントローラは、
前記外部メモリから前記Ｎ個のプロセッサ要素のバッファへのデータ転送の際に、前記Ｎ個のプロセッサ要素のバッファの全てがフルになる度に割込みを発生させ、
前記Ｎ個のプロセッサ要素のバッファから前記外部メモリへのデータ転送の際に、前記Ｎ個のプロセッサ要素のバッファの全てが空になる度に割込みを発生させ、
前記コントロールプロセッサは、前記割込みに応じて、前記Ｎ個のプロセッサ要素にリード命令またはライト命令を出すことを特徴とする請求項４から８のいずれか１項に記載のＳＩＭＤプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリアクセス制御、より具体的にはＳＩＭＤ（Ｓｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｍｕｌｔｉｐｌｅ  Ｄａｔａ）プロセッサ向けのメモリアクセス制御技術に関する。
【背景技術】
【０００２】
ＳＩＭＤプロセッサは、１回の命令により複数のデータに対して同一の処理を同時に行うことができる。図１２は、ＳＩＭＤプロセッサの構成例を示す。
【０００３】
図１２に示すＳＩＭＤプロセッサ１０は、コントロールプロセッサ２０と、プロセッサアレイ３０を備える。プロセッサアレイ３０は、１次元結合の分散メモリ型プロセッサアレイであり、複数（図示の例では６個）のプロセッサ要素を有し、これらのプロセッサ要素は、コントロールプロセッサ２０からの命令に従って、同一の処理を行う。なお、コントロールプロセッサ２０がＰＥアレイ３０に命令を出す際に、マスクビットやマスクフラグ（以下、「マスクフラグ」に統一する）によって、処理をしないプロセッサ要素を指定することができる。すなわち、ＰＥアレイ３０に含まれる複数プロセッサ要素は、同一の処理を行っているか、処理をしてないかのいずれかの状態にある。
【０００４】
以下において、コントロールプロセッサを「ＣＰ」、プロセッサアレイとプロセッサ要素を夫々「ＰＥアレイ」と「ＰＥ」という。
【０００５】
ＰＥアレイ３０に含まれる各ＰＥ（ＰＥ１〜ＰＥ６）は、構成が同様であるため、ここで、ＰＥ１を代表にして説明する。図示のように、ＰＥ１は、バッファ４２、ローカルメモリ４４、ＭＥＭＣＴＬ４６、演算部４８を備える。
【０００６】
演算部４８は、演算を実行するものであり、隣接するＰＥとデータの送受信ができる。ＭＥＭＣＴＬ４６は、ローカルメモリアクセスと外部メモリアクセスの制御を行う。
【０００７】
ローカルメモリアクセスは、ＰＥアレイ３０内部に生じたメモリアクセスであり、具体的には、演算部４８からの書込要求と読出要求がある。ＭＥＭＣＴＬ４６は、演算部４８の書込み要求に応じて演算部４８からのデータをローカルメモリ４４に書き込み、演算部４８の読出し要求に応じてローカルメモリ４４からデータを読み出して演算部４８に供する機能を担う。
【０００８】
また、ＭＥＭＣＴＬ４６は、ＰＥアレイ３０の外部（ＣＰ２０を含む）からメモリアクセスがあった際に、ライトアクセスの場合にはライト要求されたデータをローカルメモリ４４に書込み、リードアクセスの場合にはリード要求されたデータをローカルメモリ４４メモリから読み出して出力する機能を備える。
【０００９】
バッファ４２は、ＰＥ１と外部のデータ交換用のものであり、交換されるデータを一時的に格納する。具体的には、例えば、ＣＰ２０は、ローカルメモリ４４へのライトアクセスに際して、まず、ライトするデータをバッファ４２に格納し、ライト命令を出す。ＰＥ１は、ライト命令を受けると、ＭＥＭＣＴＬ４６が、バッファ４２に格納されたデータをローカルメモリ４４に書き込む。また、ＣＰ２０は、ローカルメモリ４４へのリードアクセスに際して、リードするデータの情報を含むリード命令を出す。ＰＥ１は、リード命令を受けると、ＭＥＭＣＴＬ４６が、当該データをローカルメモリ４４から読み出してバッファ４２に出力する。そして、ＣＰ２０は、バッファ４２からデータを読み出して外部に出力する。
【００１０】
このようなＳＩＭＤプロセッサ１０は、複数のデータが２次元に配列されてなるデータ群（以下「２次元データ」という）の処理に特に有用である。２次元データは、例えば、１画面の画素のデータからなる画像や、２次元の表の夫々のマスに入れるデータの集合などがある。ここで、１行の画素数が６個である画像に対して、注目画素と、注目画素の右隣の画素との平均をとるフィルタ処理をする場合を例にしてＳＩＭＤプロセッサ１０の動作を説明する。なお、以下において、特に説明が無い限り、「画素」と「画素値」を同じ意味で用いる。
【００１１】
この場合、画像の列と、ＰＥアレイ３０のＰＥとが一対一の関係にある。画像の注目行を見ると、該行に含まれる６個の画素は、バッファ４２を介してＰＥアレイ３０の６個のローカルメモリ４４に夫々格納される。各ＰＥのローカルメモリ４４は、同一の行の画素を同一のアドレスに格納する。
【００１２】
画像のＡ行の各画素が、各ＰＥのローカルメモリのアドレスＢに格納されているとする。この場合、Ａ行のフィルタ処理に際して、コントローラ２０は、各ＰＥに対して、「Ａ行の画素について、右隣の画素との平均値を求める」の命令を発行する。各ＰＥは、自身のローカルメモリからアドレスＢの画素を読み出すと共に、右隣のＰＥに対してアドレスＢの画素を要求する。そして、この要求に応じて右隣のＰＥから送信してきたデータと、自身のローカルメモリから読み出したアドレスＢの画素との平均演算を行うと共に、左隣のＰＥからの要求に応じて自身のローカルメモリから読み出したアドレスＢの画素を左隣のＰＥに出力する。
【００１３】
このように、注目行の全ての画素に対するフィルタ処理が同時にでき、効率がよい。
なお、本明細書において、画像の「行」方向は、該画像を再生した場合の横方向の意味ではなく、ＰＥの配列方向に割り当てた方向を意味する。例えば、画像を再生した場合の１行の各画素を各ＰＥに夫々割り当てたとき、画像を再生した場合の「行」と本明細書でいう「行」とは一致するが、画像を再生した場合の１列の各画素を各ＰＥに夫々割り当てたとき、画像を再生した場合の「列」が本明細書でいう「行」になる。画像以外の２次元データについても同様である。
【００１４】
なお、画像の１行の画素数は、ＰＥの数と同一であるとは限らず、通常、ＰＥ数より多い。この場合、画像をブロック分けし、ブロック毎に処理を行うことがなされている。これらの各ブロックの行方向の画素数については、ＰＥ数と同一にすればよい。
【００１５】
外部から各ＰＥのローカルメモリにデータを格納するまでの処理は、様々な視点から手法が提案されている（特許文献１や非特許文献１）。例えば、非特許文献１には、この処理を工夫することで、ＳＩＭＤプロセッサの効率を向上させる手法が提案されている。
【００１６】
ここで、非特許文献１の手法を説明する。また、ＳＩＭＤプロセッサの例として、図１２に示すＳＩＭＤプロセッサ１０を用いる。また、分かりやすいように、外部メモリからＰＥアレイ３０の各ＰＥのローカルメモリに上述したＡ行の６画素をＰＥ１〜ＰＥ６の夫々のローカルメモリ４４に格納する場合を例にする。
【００１７】
この手法によれば、ＳＩＭＤプロセッサ１０は、図１２に示す各機能ブロック以外に、さらにＤＭＡコントローラ（ＤＭＡ：Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｅｓｓ）をさらに備える。また、ＰＥ１〜ＰＥ６のバッファ４２は、同一のシフトレジスタを構成しており、夫々のバッファ４２は、該シフトレジスタの一段である。
【００１８】
まず、ＣＰ２０は、読出アドレスとして、上記Ａ行の６画素のうちの１番目の画素の外部メモリにおけるアドレスを設定する。
【００１９】
ＤＭＡコントローラは、設定された読出アドレスのデータ（Ａ行の６画素のうちの１番目の画素）を外部メモリから読み出してＰＥ１のバッファ４２に格納する。次に、ＤＭＡコントローラは、読出アドレスを１つ増分して、増分した読出アドレスのデータすなわち２番目の画素を外部メモリから読み出してＰＥ１のバッファ４２に格納する。同時に、ＰＥ１のバッファ４２に先に格納されたデータ（１番目の画素）は、シフトによってＰＥ１のバッファ４２からＰＥ２のバッファ４２に出力され、ＰＥ２のバッファ４２に格納される。このような格納とシフトが繰り返された結果、ＰＥ１のバッファ４２には６番目の画素が格納されたときに、ＰＥ２〜ＰＥ６のバッファ４２には、６番目〜２番目の画素が夫々格納されたことになる。
【００２０】
この時点で、ＤＭＡコントローラが割込みを発生させることにより、ＣＰ２０は、各ＰＥに対してライト命令を発行する。各ＰＥは、ＭＥＭＣＴＬ４６により、自身のバッファ４２に格納されたデータをローカルメモリ４４に書き込む。
【００２１】
この手法では、１回のライト命令により、外部メモリから各ＰＥのローカルメモリローカルメモリ４４に格納すべきデータがバッファ４２を介して、夫々のＰＥのローカルメモリローカルメモリ４４に格納される。各バッファへのデータの格納は、ＤＭＡコントローラにより担われるため、ＤＭＡコントローラがバッファへデータを格納している間では、各ＰＥは、演算処理を行うことができる。
【００２２】
そのため、外部メモリからＰＥのローカルメモリへデータをライトする処理がＰＥの演算処理へ与える影響を抑制することができる。なお、ＰＥのローカルメモリから外部メモリへデータを読み出す際についても同様である。
【先行技術文献】
【特許文献】
【００２３】
【特許文献１】特開平１１−６６０３３号公報
【非特許文献】
【００２４】
【非特許文献１】京  昭倫著「１２８個の４ウェイＶＬＩＷ型ＲＩＳＣコアを集積した車載向け動画認識ＬＳＩ」電子情報通信学会研究会報告、集積回路研究会(ＩＣＤ)，２００３年５月、Ｖｏｌ．１０３，Ｎｏ．８９，ｐｐ．１９−２４
【発明の概要】
【発明が解決しようとする課題】
【００２５】
２次元データにおける複数の領域のデータに対して同一の処理を施す場合を考える。例えば、図１３に示す画像Ｐに対して所定の対象物（例えば顔）の検出を行い、検出した複数の領域（図中矩形領域ＢＫ１〜ＢＫ６）に対して同一の処理を施す場合がある。勿論、各矩形領域内には、複数の画素が含まれる。
【００２６】
図１３において、各矩形領域内において、斜線により塗り潰された小さい枠は、該矩形領域の１番目の画素（通常、左上端の画素）を示し、黒く塗りつぶされた小さい枠は、該矩形領域の２番目の画素を示す。
【００２７】
この場合、１矩形領域が１ＰＥに対応するように、これらの複数の矩形領域のデータを、ＳＩＭＤプロセッサの複数のＰＥのローカルメモリに夫々書き込んでおき、各ＰＥに上記同一の処理を行わせるようにすれば、効率が良い。
【００２８】
ここで、非特許文献１の手法を適用して、画像Ｐを格納した外部メモリからＳＩＭＤプロセッサ１０の夫々のＰＥのローカルメモリ４４に矩形領域ＢＫ１〜ＢＫ６のデータを書き込むまでの処理を考える。この場合、下記のような流れが考えられる。
【００２９】
まず、ＣＰ２０は、矩形領域ＢＫ１の１番目の画素の先頭アドレスを読出アドレスとしてＤＭＡコントローラに対して設定する。
【００３０】
ＤＭＡコントローラは、設定された読出アドレスのデータ（矩形領域ＢＫ１の１番目の画素）を外部メモリから読み出してＰＥ１のバッファ４２に格納する。この画素は、最終的にＰＥ６のローカルメモリ４４に書込むべき画素である。
【００３１】
ここで、非特許文献１の手法の流れでは、ＤＭＡコントローラが次に読み出すべき画素は、ＰＥ５のローカルメモリ４４に書き込むべき画素、すなわち矩形領域ＢＫ２の１番目の画素である。しかし、ＤＭＡコントローラは、読出アドレスを１つ増分して読出しを行うと、次に読み出したデータは、矩形領域ＢＫ１の２番目の画素である。
【００３２】
そのため、ＤＭＡコントローラは、続けて読み出すべき画素を読み出すことができない。そのため、再びＣＰ２０により読出アドレス（ここでは、矩形領域ＢＫ２の１番目の画素のアドレスになる）をＤＭＡコントローラに設定し、ＤＭＡコントローラは、設定された読出アドレスのデータを外部メモリから読み出してＰＥ１のバッファ４２に格納する。この画素は、最終的にＰＥ５のローカルメモリ４４に書込むべき画素である。同時に、シフトにより、先にＰＥ１のバッファ４２に格納されたデータ（矩形領域ＢＫ１の１番目の画素）は、ＰＥ２のバッファ４２に格納される。
【００３３】
これでは、１つの画素の読出しとバッファ４２への格納は、必ずＣＰ２０による読出アドレスの設定が必要になり、ＤＭＡコントローラの効果を発揮することができず、ＳＩＭＤプロセッサ１０の効率向上を図ることができない。
【００３４】
また、各ＰＥのバッファ４２により１つのシフトレジスタを形成する構成ではなく、各バッファ４２は、別々に書き込むことができる構成とした場合にも、同様である。
【００３５】
非特許文献１の手法を適用しない場合には、ＳＩＭＤプロセッサ１０の効率がより低下する。この場合の流れの例を説明する。なお、各ＰＥのバッファ４２は、別々に書き込むことができるとする。
【００３６】
まず、ＣＰ２０は、矩形領域ＢＫ１の１番目の画素を外部メモリから読み出してＰＥ６のバッファ４２に格納する。そして、ＰＥ１〜ＰＥ５を動作させないマスクフラグ付きのライト命令を出す。
【００３７】
これにより、ＰＥ６のＭＥＭＣＴＬ４６は、ライト動作を実行し、バッファ４２から矩形領域ＢＫ１の１番目の画素をローカルメモリ４４に書き込む。
【００３８】
同様の処理が、ＣＰ２０と、ＰＥ６のＭＥＭＣＴＬ４６とにより、矩形領域ＢＫ１の画素数分回繰り返され、最後に、矩形領域ＢＫ１の全ての画素は、ＰＥ６のローカルメモリ４４に書き込まれる。
【００３９】
そして、ＣＰ２０と、ＰＥ５のＭＥＭＣＴＬ４６とにより、同様の処理が矩形領域ＢＫ２の画素数分回繰り返され、最後に、矩形領域ＢＫ２の全ての画素は、ＰＥ５のローカルメモリ４４に書き込まれる。
【００４０】
矩形領域ＢＫ３〜ＢＫ６のデータも、同様の処理によりＰＥ４〜ＰＥ１のローカルメモリ４４に書き込まれる。
【００４１】
上述の流れから分かるように、この場合、１つの矩形領域につき、ＣＰ２０によるバッファ４２へのデータの格納と、ＰＥによるライト動作が、該領域内の画素数分回繰り返される。この間、ＣＰ２０は、ＰＥアレイ３０に対して命令を放送することができず、ＰＥアレイ３０での演算処理が停止してしまうという問題がある。
【００４２】
また、ローカルメモリ４４へのデータの書込みは、矩形領域を１個ずつ行われるので、当該ＰＥのローカルメモリ４４へのアクセスが高い頻度で発生する。そのため、仮に、別の手段でＰＥアレイ３０に対し命令を放送できるようにしたとしても、該ＰＥのローカルメモリ４４がデータ転送によって占有されてしまうため、ＰＥアレイ３０での演算処理がやはり停止してしまう。
【００４３】
本発明は、上記事情に鑑みてなされたものであり、２次元データにおける複数の矩形領域のデータを、１矩形領域が１プロセッサ要素に対応するように、ＳＩＭＤプロセッサの複数のプロセッサ要素と外部との間で交換する際に、ＳＩＭＤプロセッサの効率低下を抑制するメモリアクセス制御技術を提供する。
【課題を解決するための手段】
【００４４】
本発明の１つの態様は、ＳＩＭＤプロセッサに設けられたＤＭＡコントローラである。該ＳＩＭＤプロセッサは、Ｎ個（Ｎ：２以上の整数）のプロセッサ要素を有し、各前記プロセッサ要素が、容量が単位サイズＳであり、該プロセッサ要素と外部メモリとの間で転送されるデータを一時的に格納するバッファを有する。
【００４５】
前記メモリコントローラは、アドレス記憶部と、パラメータ記憶部と、データ転送部とを備える。
【００４６】
前記アドレス記憶部は、前記外部メモリにおけるＮ個のアドレスＡｉ（ｉ＝１〜Ｎ）を設定可能である。
【００４７】
前記パラメータ設定部は、第１のパラメータＯＳＶと、第２のパラメータＷと、第３のパラメータＬとを設定可能である。
【００４８】
前記データ転送部は、前記外部メモリと、前記Ｎ個のプロセッサ要素のバッファとの間でデータ転送を行うものであり、前記データ転送の指示に応じて、第１の処理を前記パラメータ記憶部に記憶された前記第３のパラメータＬに合致する回数分繰り返す。
【００４９】
前記第１の処理は、前記第２の処理をすると共に第３の処理を行うことを式（１）に示すＭ回繰り返した後に、前記第２の処理をすると共に第４の処理を行う処理である。
Ｍ＝Ｗ／Ｓ−１      （１）
但し，Ｗ：パラメータ記憶部に記憶された第２のパラメータ
Ｓ：単位サイズ
【００５０】
前記第２の処理は、前記外部メモリから前記Ｎ個のプロセッサ要素のバッファへのデータ転送の際に、１アドレスが１プロセッサ要素に対応するように、前記アドレス記憶部に記憶されている各アドレスから夫々単位サイズＳ分のデータを読み出して、対応するプロセッサ要素のバッファに格納する処理である。
【００５１】
また、前記第２の処理は、前記Ｎ個のプロセッサ要素のバッファから前記外部メモリへのデータ転送の際に、１アドレスが１プロセッサ要素に対応するように、夫々の前記プロセッサ要素のバッファに格納されたデータを読み出して、前記アドレス記憶部に記憶されているＮ個のアドレスのうちの、対応するアドレスに書き込む処理である。
【００５２】
前記第３の処理は、前記アドレス記憶部に記憶されている各アドレスＡｉを式（２）に従って増分させる処理である。
Ａｉ＝Ａｉ＋Ｓ        （２）
但し，Ａｉ：ｉ個目のアドレス
Ｓ：単位サイズ
【００５３】
前記第４の処理は、前記アドレス記憶部に記憶されている各アドレスＡｉを式（３）に従って増分させる処理である。
Ａｉ＝Ａｉ＋ＯＳＶ    （３）
但し，Ａｉ：ｉ個目のアドレス
ＯＳＶ：パラメータ記憶部に記憶された第１のパラメータ
【００５４】
本発明の別の態様は、ＳＩＭＤプロセッサである。該ＳＩＭＤプロセッサは、コントロールプロセッサと、前記コントロールプロセッサにより制御されるＮ個（Ｎ：２以上の整数）のプロセッサ要素と、上記態様のメモリコントローラとを備える。各前記プロセッサ要素は、容量が単位サイズＳであり、該プロセッサ要素と外部メモリとの間で転送されるデータを一時的に格納するバッファを有する。
【００５５】
前記コントロールプロセッサは、前記メモリコントローラによる前記外部メモリから前記Ｎ個のプロセッサ要素のバッファへのデータ転送の際に、前記Ｎ個のプロセッサ要素のバッファの全てがフルになる度に、各前記プロセッサ要素にライト命令をする。
【００５６】
また、前記コントロールプロセッサは、前記ＤＭＡコントローラによる前記Ｎ個のプロセッサ要素のバッファから前記外部メモリへのデータ転送の際に、前記Ｎ個のプロセッサ要素のバッファの全てが空になる度に、各前記プロセッサ要素にリード命令をする。
【００５７】
なお、上記態様のメモリコントローラやコントロールプロセッサを方法や装置、システムなどに置換えて表示したものや、これらの方法をコンピュータに実行せしめるプログラムなども、本発明の態様としては有効である。
【発明の効果】
【００５８】
本発明にかかるメモリアクセス制御技術によれば、例えば、２次元データにおける複数の矩形領域のデータを、１矩形領域が１プロセッサ要素に対応するように、ＳＩＭＤプロセッサの複数のプロセッサ要素と外部との間で交換する際に、ＳＩＭＤプロセッサの効率低下を抑制することができる。
【図面の簡単な説明】
【００５９】
【図１】本発明の第１の実施の形態にかかるＳＩＭＤプロセッサを示す図である。
【図２】図１に示すＳＩＭＤプロセッサにおけるメモリコントローラを示す図である。
【図３】図１に示すＳＩＭＤプロセッサの動作を説明するための図である（その１）。
【図４】図１に示すＳＩＭＤプロセッサの動作を説明するための図である（その１）。
【図５】本発明の第２の実施の形態にかかるＳＩＭＤプロセッサを示す図である。
【図６】図５に示すＳＩＭＤプロセッサの動作を説明するための図である（その１）。
【図７】図５に示すＳＩＭＤプロセッサの動作を説明するための図である（その１）。
【図８】本発明の第２の実施の形態にかかるＳＩＭＤプロセッサを示す図である。
【図９】図８に示すＳＩＭＤプロセッサにおけるメモリコントローラを示す図である。
【図１０】図８に示すＳＩＭＤプロセッサの動作を説明するための図である（その１）。
【図１１】図８に示すＳＩＭＤプロセッサの動作を説明するための図である（その１）。
【図１２】通常のＳＩＭＤプロセッサの構成例を示す図である。
【図１３】２次元データの例となる画像を示す図である。
【発明を実施するための形態】
【００６０】
以下、図面を参照して本発明の実施の形態について説明する。説明の明確化のため、以下の記載及び図面は、適宜、省略、及び簡略化がなされている。また、様々な処理を行う機能ブロックとして図面に記載される各要素は、ハードウェアとソフトウェア（プログラム）の組合せによっていろいろな形で実現できることは当業者には理解されるところであり、ハードウェアとソフトウェアのいずれかに限定されるものではない。なお、各図面において、同一の要素には同一の符号が付されており、必要に応じて重複説明は省略されている。
【００６１】
また、上述したプログラムは、様々なタイプの非一時的なコンピュータ可読媒体（ｎｏｎ−ｔｒａｎｓｉｔｏｒｙ  ｃｏｍｐｕｔｅｒ  ｒｅａｄａｂｌｅ  ｍｅｄｉｕｍ）を用いて格納され、コンピュータに供給することができる。非一時的なコンピュータ可読媒体は、様々なタイプの実体のある記録媒体（ｔａｎｇｉｂｌｅ  ｓｔｏｒａｇｅ  ｍｅｄｉｕｍ）を含む。非一時的なコンピュータ可読媒体の例は、磁気記録媒体（例えばフレキシブルディスク、磁気テープ、ハードディスクドライブ）、光磁気記録媒体（例えば光磁気ディスク）、ＣＤ−ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）ＣＤ−Ｒ、ＣＤ−Ｒ／Ｗ、半導体メモリ（例えば、マスクＲＯＭ、ＰＲＯＭ（Ｐｒｏｇｒａｍｍａｂｌｅ  ＲＯＭ）、ＥＰＲＯＭ（Ｅｒａｓａｂｌｅ  ＰＲＯＭ）、フラッシュＲＯＭ、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ））を含む。また、プログラムは、様々なタイプの一時的なコンピュータ可読媒体（ｔｒａｎｓｉｔｏｒｙ  ｃｏｍｐｕｔｅｒ  ｒｅａｄａｂｌｅ  ｍｅｄｉｕｍ）によってコンピュータに供給されてもよい。一時的なコンピュータ可読媒体の例は、電気信号、光信号、及び電磁波を含む。一時的なコンピュータ可読媒体は、電線及び光ファイバ等の有線通信路、又は無線通信路を介して、プログラムをコンピュータに供給できる。
【００６２】
＜第１の実施の形態＞
図１は、本発明の第１の実施の形態にかかるＳＩＭＤプロセッサ１００を示す。ＳＩＭＤプロセッサ１００は、ＰＥアレイ１１０、制御ユニット１２０を備える。
【００６３】
ＰＥアレイ１１０は、Ｎ個（Ｎ：２以上の整数であり、ここでは例として、Ｎ＝６）のプロセッサ要素（ＰＥ）１〜６を有する。各ＰＥは、同一の構成を有するため、ここで、ＰＥ１を代表にする。
【００６４】
ＰＥ１は、外部メモリとの間で交換されるデータを一時的に格納するバッファ１１２と、ローカルメモリ１１４を備える。バッファ１１２の容量は、所定の単位サイズＳである。なお、この種のＰＥに通常備えられる演算部などの機能ブロックの図示は、省略する。
【００６５】
ＰＥ１は、制御ユニット１２０における後述するコントロールプロセッサ（ＣＰ）１３０により制御される。外部メモリとのデータ交換に際して、ＰＥ１は、ＣＰ１３０からのリード命令に応じて、該当するデータをローカルメモリ１１４から読み出してバッファ１１２に格納し、また、ＣＰ１３０からのライト命令に応じて、バッファ１１２に格納されたデータを読み出して、ローカルメモリ１１４の該当する番地に書き込む。
【００６６】
制御ユニット１２０は、ＣＰ１３０と、メモリコントローラ１４０を備える。ＣＰ１３０は、ＰＥアレイ１１０と、メモリコントローラ１４０の制御を行う。
【００６７】
メモリコントローラ１４０は、データ転送の指示（以下、単に転送指示という）をＣＰ１３０から受けると、ＰＥアレイ１１０の各ＰＥと、外部メモリとの間で交換されるデータのＤＭＡ転送を行う。図２を参照してメモリコントローラ１４０を詳細に説明する。
【００６８】
図２に示すように、メモリコントローラ１４０は、アドレス記憶部１４２、パラメータ記憶部１４４、データ転送部１４６を備える。
【００６９】
アドレス記憶部１４２は、ＣＰ１３０により、外部メモリにおけるＮ個（ここでは６個）のアドレスＡｉ（ｉ＝１〜６）を設定可能である。また、アドレス記憶部１４２内に記憶された各アドレスＡｉは、データ転送部１４６により変更可能である。
【００７０】
パラメータ記憶部１４４は、ＣＰ１３０により、第１のパラメータＯＳＶと、第２のパラメータＷと、第３のパラメータＬとを設定可能である。
【００７１】
データ転送部１４６は、ＣＰ１３０からの転送指示に応じて、外部メモリと、ＰＥ１〜ＰＥ６のバッファ１１２の間でデータ転送を行う。該データ転送に際して、データ転送部１４６は、アドレス記憶部１４２とパラメータ記憶部１４４の内容に基づいて、第１の処理を、パラメータ記憶部１４４に記憶された第３のパラメータＬに合致する回数分繰り返す。
【００７２】
第１の処理は、第２の処理をすると共に第３の処理を行うことを式（６）に示すＭ回繰り返した後に、第２の処理をすると共に第４の処理を行う処理である。
Ｍ＝Ｗ／Ｓ−１      （６）
但し，Ｗ：パラメータ記憶部１４４に記憶された第２のパラメータ
Ｓ：単位サイズ
【００７３】
外部メモリからＰＥアレイ１１０（具体的には、ＰＥアレイ１１０の各ＰＥのバッファ１１２）へのデータ転送の際に、第２の処理は、外部メモリから、１アドレスが１ＰＥに対応するように、アドレス記憶部１４２に記憶されている各アドレスから夫々単位サイズＳ分のデータを読み出して、対応するＰＥのバッファ１１２に格納する処理である。
【００７４】
ＰＥアレイ１１０から外部メモリへのデータ転送の際に、第２の処理は、１アドレスが１プロセッサ要素に対応するように、夫々のＰＥのバッファ１１２に格納されたデータを読み出して、アドレス記憶部１４２に記憶されている６個のアドレスのうちの、対応するアドレスに書き込む処理である。
【００７５】
第３の処理は、アドレス記憶部１４２に記憶されている各アドレスＡｉを式（７）に従って増分させる処理である。
Ａｉ＝Ａｉ＋Ｓ        （７）
但し，Ａｉ：アドレス記憶部１４２に記憶されたｉ個目のアドレス
Ｓ：単位サイズ
【００７６】
第４の処理は、アドレス記憶部１４２に記憶されている各アドレスＡｉを式（８）に従って増分させる処理である。
Ａｉ＝Ａｉ＋ＯＳＶ    （８）
但し，Ａｉ：アドレス記憶部１４２に記憶されたｉ個目のアドレス
ＯＳＶ：パラメータ記憶部１４４に記憶された第１のパラメータ
【００７７】
ＣＰ１３０は、外部メモリからＰＥアレイ１１０へのデータ転送の際に、ＰＥ１〜ＰＥ６のバッファ１１２の全てがフルになる度に、ＰＥ１〜ＰＥ６にライト命令をする。また、ＣＰ１３０は、ＰＥアレイ１１０から外部メモリへのデータ転送の際に、ＰＥ１〜ＰＥ６のバッファ１１２の全てが空になる度に、ＰＥ１〜ＰＥ６にリード命令をする。
【００７８】
本実施の形態のＳＩＭＤプロセッサ１００は、例えば、複数の単位サイズＳのデータが２次元に配列してなる２次元データにおける複数の矩形領域のデータを、１矩形領域が１ＰＥに対応するように、該ＳＩＭＤプロセッサ１００に含まれる複数のＰＥと外部メモリとの間で交換する際に、ＳＩＭＤプロセッサの効率低下を抑制することができる。
【００７９】
図１３に示す画像Ｐを２次元データの具体例として、画像Ｐにおける６個の矩形領域（矩形領域ＢＫ１〜ＢＫ６）のデータを、外部メモリから、ＰＥアレイ１１０におけるＰＥ１〜ＰＥ６のローカルメモリ１１４へ夫々書き込む処理の流れを説明する。
【００８０】
まず、ＣＰ１３０は、メモリコントローラ１４０のアドレス記憶部１４２とパラメータ記憶部１４４に対して設定を行う。
【００８１】
アドレス記憶部１４２に対して、ＣＰ１３０は、各矩形領域の外部メモリにおける先頭アドレスを設定する。これにより、アドレス記憶部１４２は、アドレスＡｉ（ｉ＝１〜６）として、矩形領域ＢＫｉ（ｉ＝１〜６）の先頭アドレスが設定される。
【００８２】
パラメータ記憶部１４４に対して、ＣＰ１３０は、画像Ｐの同一行における先端と末尾の画素のアドレスの差分を第１のパラメータＯＳＶとして設定し、矩形領域の行方向のサイズを第２のパラメータＷとして設定し、矩形領域内に含まれるデータ（画素）の行数を第３のパラメータＬとして設定する。
【００８３】
なお、ＣＰ１３０は、矩形領域ＢＫ１〜ＢＫ６の行方向のサイズが同一である場合には、該同一のサイズを第２のパラメータＷに設定し、矩形領域ＢＫ１〜ＢＫ６の行方向のサイズが異なる場合には、これらのサイズのうちの最大値を第２のパラメータＷに設定する。例えば、図１３に示す６個の矩形領域の場合、ＢＫ５の行方向のサイズが第２のパラメータＷに設定される。
【００８４】
また、ＣＰ１３０は、矩形領域ＢＫ１〜ＢＫ６の行数が同一である場合には、該行数を第３のパラメータＬに設定し、矩形領域ＢＫ１〜ＢＫ６の行数が異なる場合には、これらの行数のうちの各前記行数のうちの最大値を第３のパラメータＬに設定する。例えば、図１３に示す６個の矩形領域の場合、矩形領域ＢＫ２の行数が第３のパラメータＬに設定される。
【００８５】
ＣＰ１３０は、アドレス記憶部１４２とパラメータ記憶部１４４を設定すると、データ転送部１４６に転送指示をする。
【００８６】
メモリコントローラ１４０は、ＣＰ１３０から転送指示を受けると、外部メモリからデータを読み出してＰＥ１〜ＰＥ６のバッファ１１２に格納する。図３と図４を参照して説明する。なお、図３と図４において、各ＰＥのバッファ１１２とローカルメモリ１１４内の小さい枠は、画素を示し、画素を示す枠内の数字は、該画素が属する矩形領域の番号である。例えば、図３の最上部において、ＰＥ６のバッファ１１２には、矩形領域ＢＫ１の１番目の画素が格納されていることを示す。
【００８７】
図３に示すように、メモリコントローラ１４０のデータ転送部１４６は、ＣＰ１３０から転送指示を受けた後の１サイクル目（図中サイクル１）において、外部メモリから、アドレス記憶部１４２に記憶されたアドレスＡ１に格納された１画素分のデータを読み出してＰＥ６のバッファ１１２に格納する。これにより、矩形領域ＢＫ１の１番目の画素がＰＥ６のバッファ１１２に転送される。
【００８８】
そして、サイクル２において、データ転送部１４６は、外部メモリから、アドレス記憶部１４２に記憶されたアドレスＡ２に格納された１画素分のデータを読み出してＰＥ５のバッファ１１２に格納する。これにより、矩形領域ＢＫ２の１番目の画素がＰＥ５のバッファ１１２に転送される。
【００８９】
データ転送部１４６は、その後、外部メモリから、アドレス記憶部１４２に記憶された当該アドレスＡｉ（ｉ＝３〜６）に格納された１画素分のデータを読み出して該アドレスＡｉ（ｉ＝３〜６）に対応するＰＥｉ（ｉ＝４〜１）のバッファ１１２に格納する処理を繰り返す。その結果、サイクル６において、矩形領域ＢＫ６の１番目の画素がＰＥ１のバッファ１１２に転送される。
【００９０】
サイクル１〜６までの処理は、１回目の前述した第２の処理に該当する。データ転送部１４６は、ここで、第３の処理として、アドレス記憶部１４２に記憶されている各アドレスＡｉ（ｉ＝１〜６）を式（７）に従って増分させる。分かりやすいように、式（７）を再度示す。
【００９１】
Ａｉ＝Ａｉ＋Ｓ        （７）
但し，Ａｉ：アドレス記憶部１４２に記憶されたｉ個目のアドレス
Ｓ：単位サイズ
【００９２】
式（７）における単位サイズ「Ｓ」は、ここで、１画素のサイズに該当する。そのため、増分後の各アドレスＡｉ（ｉ＝１〜６）は、夫々の矩形領域の２番目の画素のアドレスになる。
【００９３】
また、各ＰＥのバッファ１１２の全てがフルになったため、データ転送部１４６は、割込みを発生させる。この割込みに応じて、ＣＰ１３０は、ＰＥ１〜ＰＥ６の演算処理に割り込み、ライト命令を出す。
【００９４】
各ＰＥは、ＣＰ１３０からのライト命令に応じて、バッファ１１２に格納されているデータをローカルメモリ１１４に書き込む。図示のように、サイクル７において、各矩形領域（ＢＫ１〜ＢＫ６）の１番目の画素が、対応するＰＥ（ＰＥ６〜ＰＥ１）のローカルメモリ１１４に夫々書き込まれる。
【００９５】
そして、データ転送部１４６は、第２の処理をすると共に第３の処理を行うことを繰り返す。
【００９６】
図４に示すように、サイクル８において、矩形領域ＢＫ１の２番目の画素がＰＥ６のバッファ１１２に転送され、サイクル９において、矩形領域ＢＫ２の２番目の画素がＰＥ５のバッファ１１２に転送される。
【００９７】
同様の処理が続き、サイクル１３において、矩形領域ＢＫ６の２番目の画素がＰＥ１のバッファ１１２に転送される。
【００９８】
サイクル８〜１３までの処理は、２回目の第２の処理に該当する。ここで、データ転送部１４６は、割込みを発生させると共に、２回目の第３の処理として、第３アドレス記憶部１４２に記憶されている各アドレスＡｉ（ｉ＝１〜６）を式（６）に従って増分させる。これにより、アドレス記憶部１４２に記憶されている各アドレスＡｉ（ｉ＝１〜６）は、夫々の矩形領域の３番目の画素の先頭アドレスになる。また、図示のように、サイクル１４において、各矩形領域（ＢＫ１〜ＢＫ６）の２番目の画素が、対応するＰＥ（ＰＥ６〜ＰＥ１）のローカルメモリ１１４に夫々書き込まれている。
【００９９】
データ転送部１４６は、その後、第２の処理をすると共に第３の処理を行うことを式（６）に示すＭ回繰り返す。分かりやすいように、式（６）を再度示す。
【０１００】
Ｍ＝Ｗ／Ｓ−１      （６）
但し，Ｗ：パラメータ記憶部１４４に記憶された第２のパラメータ
Ｓ：単位サイズ
【０１０１】
第２のパラメータＷが矩形領域の行方向の最大サイズであり、単位サイズＳが１画素のサイズであるため、式（６）に示すＭは、矩形領域の行方向の最多画素数から１を引いた値になる。すなわち、第２の処理をすると共に第３の処理を行うことをＭ回繰り返した後、アドレス記憶部１４２に格納された各アドレスＡｉは、当該矩形領域について、当該行の転送すべき画素のうちの、最後の画素のアドレスになる。
【０１０２】
データ転送部１４６は、第２の処理をすると共に第３の処理を行うことをＭ回繰り返した後に、第２の処理をすると共に、第４の処理として、アドレス記憶部１４２に記憶されている各アドレスＡｉを式（８）に従って増分させる。分かりやすいように、式（８）を再度示す。
【０１０３】
Ａｉ＝Ａｉ＋ＯＳＶ    （８）
但し，Ａｉ：アドレス記憶部１４２に記憶されたｉ個目のアドレス
ＯＳＶ：パラメータ記憶部１４４に記憶された第１のパラメータ
【０１０４】
前述したように、第１のパラメータＯＳＶは、画像Ｐの同一行における先端と末尾の画素のアドレスの差分であるため、第４の処理により、アドレス記憶部１４２に格納された各アドレスＡｉは、各矩形領域の次の行の１番目の画素のアドレスになる。
【０１０５】
なお、１回目の第２の処理から、１回目の第４の処理の完了までの処理は、前述した第１の処理に該当する。データ転送部１４６は、この第１の処理を、データ転送部１４６に記憶された第３のパラメータＬ回繰り返す。第３のパラメータＬは、矩形領域の最大行数であるため、第１の処理がＬ回繰り返され、加えて、各ＰＥのバッファ１１２がフルになる度にパラメータ記憶部１４４への書込みが行われた結果、各矩形領域（ＢＫ１〜ＢＫ６）のデータは、対応するＰＥ（ＰＥ６〜ＰＥ１）のローカルメモリ１１４に転送される。
【０１０６】
図３と図４を参照して、外部メモリからＰＥアレイ１１０にデータを転送する場合を説明した。ＰＥアレイ１１０から外部メモリにデータ転送する場合には、ＣＰ１３０が、ＰＥアレイ１１０にリード命令を出した後にメモリコントローラ１４０に転送指示を出す点と、その後、各ＰＥのバッファ１１２の全てが空になる度に、ＰＥアレイ１１０にリード命令をする点と、第２の処理のデータ転送方向が上述したのと逆になる点とを除き、外部メモリからＰＥアレイ１１０にデータを転送する場合と同様であるため、ここで詳細な説明を省略する。
【０１０７】
このように、本第１の実施の形態のＳＩＭＤプロセッサ１００によれば、ＣＰ１３０が１回の転送指示を出せば、メモリコントローラ１４０は、夫々の矩形領域のデータを、外部メモリと、該矩形領域に対応するＰＥのバッファ１１２との間で転送する。メモリコントローラ１４０による転送の間、ＣＰ１３０は、ＰＥアレイ１１０に対して命令を出すことができ、ＰＥアレイ１１０の各ＰＥも、演算処理を停止することが無い。従って、２次元データにおける複数の矩形領域のデータを、１矩形領域が１プロセッサ要素に対応するように、ＳＩＭＤプロセッサの複数のプロセッサ要素と外部との間で交換する際にも、ＳＩＭＤプロセッサの効率低下を抑制することができる。
【０１０８】
本実施の形態のＳＩＭＤプロセッサ１００において、ＰＥアレイ１１０の各ＰＥのバッファ１１２は、互いに独立した機能ブロックとして示されているが、これらのバッファは、例えば、同一のバッファの異なる領域であってもよい。
【０１０９】
さらに、ＳＩＭＤプロセッサ１００では、各バッファ１１２は、別々にデータを書き込まれる構成となっているが、例えば、これらのバッファ１１２が１つのシフトレジスタを形成する構成であってもよい。これについて、第２の実施の形態を用いて説明する。
【０１１０】
＜第２の実施の形態＞
図５は、本発明の第２の実施の形態にかかるＳＩＭＤプロセッサ２００を示す。該ＳＩＭＤプロセッサ２００は、ＰＥアレイ１１０の代わりにＰＥアレイ２１０が設けられている点を除き、図１に示すＳＩＭＤプロセッサ１００と同様の構成を有する。また、ＰＥアレイ２１０は、各ＰＥのバッファ１１２の代わりにシフトレジスタ２２０が設けられた点を除き、ＳＩＭＤプロセッサ１００におけるＰＥアレイ１１０と同様の構成を有する。そのため、ＳＩＭＤプロセッサ２００について、ＳＩＭＤプロセッサ１００と異なる点についてのみ詳細に説明する。ＳＩＭＤプロセッサ２００による処理の例についても、ＳＩＭＤプロセッサ１００を説明する際と同様に、図１３に示す画像Ｐの各矩形領域のデータをＰＥアレイ２１０の各ＰＥに夫々転送することを用いる。
【０１１１】
シフトレジスタ２２０は、ＰＥアレイ２１０に含まれるＰＥ数（ここでは６）と同数段を有する。シフトレジスタ２２０の各段（１段目２２１〜６段目２２６）は、単位サイズＳ（ここでは画像Ｐの１画素のサイズ）を有する。シフトレジスタ２２０の入力端（１段目２２１）にデータが入力される度に、出力端（６段目２２６）に向かってシフトが行われる。また、シフトレジスタ２２０の各段（１段目２２１〜６段目２２６）は、各ＰＥ（ＰＥ１〜ＰＥ６）に夫々対応し、各ＰＥは、自身に対応する段に対してデータの読出しと書込みができる。
【０１１２】
図１３に示す画像Ｐにおける６個の矩形領域（矩形領域ＢＫ１〜ＢＫ６）のデータを、外部メモリから、ＰＥアレイ２１０におけるＰＥ１〜ＰＥ６のローカルメモリ１１４へ夫々書き込むために、まず、ＣＰ１３０は、メモリコントローラ１４０のアドレス記憶部１４２とパラメータ記憶部１４４に対して設定を行う。設定後、ＣＰ１３０は、メモリコントローラ１４０に転送指示をする。
【０１１３】
メモリコントローラ１４０は、ＣＰ１３０から転送指示を受けると、外部メモリからデータを読み出してＳＩＭＤプロセッサ２００に順次入力する。図６と図７を参照して説明する。
【０１１４】
図６に示すように、メモリコントローラ１４０のデータ転送部１４６は、ＣＰ１３０から転送指示を受けた後の１サイクル目（図中サイクル１）において、外部メモリから、アドレス記憶部１４２に記憶されたアドレスＡ１に格納された１画素分のデータを読み出してシフトレジスタ２２０に入力する。これにより、矩形領域ＢＫ１の１番目の画素がシフトレジスタ２２０の１段目２２１に格納される。
【０１１５】
そして、サイクル２において、データ転送部１４６は、外部メモリから、アドレス記憶部１４２に記憶されたアドレスＡ２に格納された１画素分のデータを読み出してシフトレジスタ２２０に入力する。これにより、矩形領域ＢＫ２の１番目の画素がシフトレジスタ２２０の１段目２２１に格納され、矩形領域ＢＫ１の１番目の画素がシフトにより２段目２２２に格納される。
【０１１６】
サイクル１〜６までの処理、すなわち１回目の第２の処理が完了した際に、矩形領域ＢＫ１〜ＢＫ６の各１番目の画素は、シフトレジスタ２２０の６段目２２６〜１段目２２１に夫々格納される。また、アドレス記憶部１４２内の各アドレスＡｉは、１画素サイズ分増分される。
【０１１７】
サイクル７において、各ＰＥは、ＣＰ１３０からのライト命令に応じて、シフトレジスタ２２０の、自身に対応する段に格納されているデータをローカルメモリ１１４に書き込む。これにより、各矩形領域（ＢＫ１〜ＢＫ６）の１番目の画素が、対応するＰＥ（ＰＥ６〜ＰＥ１）のローカルメモリ１１４に夫々書き込まれる。
【０１１８】
次に、図７に示すように、サイクル８において、矩形領域ＢＫ１の２番目の画素は、シフトレジスタ２２０の１段目２２１に入力され、１段目２２１に格納される。そして、サイクル９において、矩形領域ＢＫ２の２番目の画素がシフトレジスタ２２０の１段目２２１に入力され、１段目２２１に格納される。同時に、矩形領域ＢＫ１の２番目の画素がシフトにより２段目２２２に格納される。
【０１１９】
同様の処理が続き、サイクル１３において、矩形領域ＢＫ６の２番目の画素がシフトレジスタ２２０の１段目２２１に入力され、１段目２２１に格納される。同時に、シフトにより、矩形領域ＢＫ５〜矩形領域ＢＫ１の２番目の画素は、６段目２２６〜２段目２２２に夫々格納される。また、アドレス記憶部１４２内の各アドレスＡｉは、１画素サイズ分増分される。
【０１２０】
そして、サイクル１４において、各ＰＥは、ＣＰ１３０からのライト命令に応じて、シフトレジスタ２２０の、自身に対応する段に格納されているデータをローカルメモリ１１４に書き込む。これにより、各矩形領域（ＢＫ１〜ＢＫ６）の２番目の画素が、対応するＰＥ（ＰＥ６〜ＰＥ１）のローカルメモリ１１４に夫々書き込まれる。図示のように、サイクル１４において、各矩形領域（ＢＫ１〜ＢＫ６）の２番目の画素が、対応するＰＥ（ＰＥ６〜ＰＥ１）のローカルメモリ１１４に夫々書き込まれている。
【０１２１】
以降の処理は、データ転送部１４６が、外部メモリから読み出したデータをシフトレジスタ２２０の１段目２２１に入力する点を除き、ＳＩＭＤプロセッサ１００による相対応の処理と同様であるので、ここで詳細な説明を省略する。
【０１２２】
なお、ＰＥアレイ２１０から外部メモリへデータ転送をする場合にも、ＳＩＭＤプロセッサ１００におけるメモリコントローラ１４０が各バッファ１１２からデータを読み出す動作を、ＳＩＭＤプロセッサ２００におけるメモリコントローラ１４０が、シフトレジスタ２２０をシフトアウトさせると共に、６段目２２６からシフトアウトされたデータを受け取る動作に置き換えれば、ＳＩＭＤプロセッサ２００とＳＩＭＤプロセッサ１００の動作が同様である。
【０１２３】
本実施の形態のＳＩＭＤプロセッサ２００も、ＳＩＭＤプロセッサ１００と同様の効果を発揮することができる。
【０１２４】
＜第３の実施の形態＞
図８は、本発明の第３の実施の形態にかかるＳＩＭＤプロセッサ３００を示す。ＳＩＭＤプロセッサ３００は、ＰＥアレイ１１０と、制御ユニット３２０を備え、ＰＥアレイ１１０は、図１に示すＳＩＭＤプロセッサ１００のＰＥアレイ１１０と同一のものであり、制御ユニット３２０は、ＣＰ３３０とメモリコントローラ３４０を備える。
【０１２５】
図９は、メモリコントローラ３４０を示す。メモリコントローラ３４０は、アドレス記憶部１４２、パラメータ記憶部３４４、データ転送部３４６を備える。
【０１２６】
アドレス記憶部１４２は、ＳＩＭＤプロセッサ１００におけるメモリコントローラ１４０のアドレス記憶部１４２と同様のものである。
【０１２７】
パラメータ記憶部３４４は、第１のパラメータＯＳＶ、第２のパラメータＷ、第３のパラメータＬに加え、さらに、ＣＰ３３０により第４のパラメータＴを設定可能である。
【０１２８】
ＣＰ３３０は、外部メモリとＰＥアレイ１１０のデータ転送に際して、アドレス記憶部１４２とパラメータ記憶部３４４に対して設定を行う。なお、ＣＰ３３０は、ＰＥアレイ１１０に含まれるＰＥの数Ｎの約数を第４のパラメータＴとしてパラメータ記憶部３４４に設定する。ここでは、Ｎが６であるため、ＣＰ３３０は、第４のパラメータＴとして、１、２、３のいずれかを設定可能である。
【０１２９】
データ転送部３４６は、ＣＰ３３０からの転送指示に応じて、外部メモリと、ＰＥ１〜ＰＥ６のバッファ１１２の間でデータ転送を行う。該データ転送に際して、データ転送部３４６は、アドレス記憶部１４２とパラメータ記憶部３４４の内容に基づいて、第１の処理を、パラメータ記憶部３４４に記憶された第３のパラメータＬに合致する回数分繰り返す。
【０１３０】
ＳＩＭＤプロセッサ１００とＳＩＭＤプロセッサ２００を説明する際に、第１の処理は、第２の処理をすると共に第３の処理を行うことを式（６）に示すＭ回繰り返した後に、第２の処理をすると共に第４の処理を行う処理であると説明した。
【０１３１】
本第３の実施の形態にかかるＳＩＭＤプロセッサ３００では、第１の処理は、第２の処理をすると共に第３の処理を行うことを、式（９）に示すＭ１回繰り返した後に、第２の処理をすると共に第４の処理を行う処理である。
Ｍ１＝［Ｗ／（Ｔ×Ｓ）］−１      （９）
但し，Ｗ：パラメータ記憶部３４４に記憶された第２のパラメータ
Ｓ：単位サイズ
Ｔ：パラメータ記憶部３４４に記憶された第４のパラメータ
【０１３２】
また、第２の処理と第３の処理は、ＳＩＭＤプロセッサ１００のときに説明した第２の処理と第３の処理と夫々異なる。なお、第４の処理については、ＳＩＭＤプロセッサ１００のときに説明した第４の処理と同様である。
【０１３３】
まず、第２の処理を説明する。
本実施の形態のＳＩＭＤプロセッサ３００において、第２の処理は、第５の処理をＴ回繰り返す処理である。
【０１３４】
外部メモリからＰＥアレイ１１０へのデータ転送の際に、第５の処理は、１アドレスが隣接するＴ個のＰＥに対応するように、アドレス記憶部１４２に記憶されているＮ（ここでは６）個のアドレスのうちの「Ｎ／Ｔ」個のアドレスであって、かつ、回毎に異なる「Ｎ／Ｔ」個のアドレスから夫々単位サイズＳのＴ倍分のデータを読み出して、対応するＴ個のＰＥのバッファ１１２に夫々格納する処理である。
【０１３５】
また、ＰＥアレイ１１０から外部メモリへのデータ転送の際に、第５の処理は、各ＰＥのバッファ１１２に格納されたデータ（単位サイズＳのデータ）を読み出すと共に、１アドレスが隣接するＴ個のＰＥに対応するように、隣接するＴ個のＰＥからなるグループ毎に、該グループ内のＴ個のＰＥのバッファ１１２から読み出したデータを、アドレス記憶部１４２に記憶されているＮ個のアドレスのうちの「Ｎ／Ｔ」個のアドレスであって、かつ、回毎に異なる「Ｎ／Ｔ」個のアドレスのうちの、上記グループに対応する１つのアドレスに書き込む処理である。
【０１３６】
本実施の形態のＳＩＭＤプロセッサ３００において、第３の処理は、アドレス記憶部１４２に記憶されている各アドレスＡｉを式（１０）に従って増分させる処理である。
Ａｉ＝Ａｉ＋Ｓ×Ｔ        （１０）
但し，Ａｉ：ｉ個目のアドレス
Ｓ：単位サイズ
Ｔ：パラメータ記憶部３４４に記憶された第４のパラメータ
【０１３７】
すなわち、ＳＩＭＤプロセッサ３００では、第３の処理によるアドレスＡｉの１回の増分量は、ＳＩＭＤプロセッサ１００のときの第３の処理によるアドレスＡｉの１回の増分量のＴ倍である。
【０１３８】
なお、前述したように、本実施の形態のＳＩＭＤプロセッサ３００における第４の処理は、ＳＩＭＤプロセッサ１００のときに説明した第４の処理と同一である。
【０１３９】
ＣＰ３３０については、外部メモリからＰＥアレイ１１０へのデータ転送の際に、ＰＥ１〜ＰＥ６のバッファ１１２の全てがフルになる度に、ＰＥ１〜ＰＥ６にライト命令をし、ＰＥアレイ１１０から外部メモリへのデータ転送の際に、ＰＥ１〜ＰＥ６のバッファ１１２の全てが空になる度に、ＰＥ１〜ＰＥ６にリード命令をする点において、ＳＩＭＤプロセッサ１００のＣＰ１３０と同様である。
【０１４０】
ＳＩＭＤプロセッサ３００は、さらに、ＰＥアレイ１１０から外部メモリへのデータ転送の際にはメモリコントローラ３４０に対してデータ転送の指示をする前に、外部メモリからＰＥアレイ１１０へのデータ転送の際には該データ転送の完了後に、ＰＥアレイ１１０に対してデータ交換の命令をする。
【０１４１】
この「データ交換」は、ローカルメモリ間のデータ交換を意味する。ＰＥアレイ１１０の各ＰＥは、該データ交換の命令に応じて、隣接するＰＥ同士で、ローカルメモリ上のデータを交換する。
【０１４２】
ここで、図１３に示す画像Ｐにおける６個の矩形領域（矩形領域ＢＫ１〜ＢＫ６）のデータを、外部メモリから、ＰＥアレイ１１０におけるＰＥ１〜ＰＥ６のローカルメモリ１１４へ夫々書き込む処理を例にして、ＳＩＭＤプロセッサ３００の処理の流れを説明する。
【０１４３】
まず、ＣＰ３３０は、メモリコントローラ３４０のアドレス記憶部１４２とパラメータ記憶部３４４に対して設定を行う。
【０１４４】
アドレス記憶部１４２に対する設定は、ＳＩＭＤプロセッサ１００におけるＣＰ１３０が行ったものと同様である。
【０１４５】
また、パラメータ記憶部３４４に対する設定のうちの第１のパラメータＯＳＶ、第２のパラメータＷ、第３のパラメータＬについても、ＳＩＭＤプロセッサ１００におけるＣＰ１３０が行ったものと同様である。
【０１４６】
ＣＰ３３０は、パラメータ記憶部３４４に対して、第４のパラメータＴとして、ＰＥアレイ１１０に含まれるＰＥ数の約数、例えば「２」を設定する。
【０１４７】
ＣＰ３３０は、アドレス記憶部１４２とパラメータ記憶部３４４を設定すると、データ転送部３４６に転送指示をする。
【０１４８】
メモリコントローラ３４０は、ＣＰ３３０から転送指示を受けると、外部メモリからデータを読み出してＰＥ１〜ＰＥ６のバッファ１１２に格納する。図１０と図１１を参照して説明する。
【０１４９】
図１０に示すように、データ転送部３４６は、ＣＰ３３０から転送指示を受けた後の１サイクル目（図中サイクル１）において、外部メモリから、アドレス記憶部１４２に記憶されたアドレスＡ１に格納されたＴ画素（ここでは２画素）分のデータを読み出してＰＥ６とＰＥ５のバッファ１１２に夫々格納する。これにより、矩形領域ＢＫ１の１番目の画素がＰＥ６のバッファ１１２に転送され、矩形領域ＢＫ１の２番目の画素がＰＥ５のバッファ１１２に転送される。
【０１５０】
そして、サイクル２において、データ転送部３４６は、外部メモリから、アドレス記憶部１４２に記憶されたアドレスＡ２に格納されたＴ画素分のデータを読み出してＰＥ４とＰＥ３のバッファ１１２に夫々格納する。これにより、矩形領域ＢＫ２の１番目の画素がＰＥ４のバッファ１１２に転送され、矩形領域ＢＫ２の２番目の画素がＰＥ３のバッファ１１２に転送される。
【０１５１】
次に、サイクル３において、データ転送部３４６は、外部メモリから、アドレス記憶部１４２に記憶されたアドレスＡ３に格納されたＴ画素分のデータを読み出してＰＥ２とＰＥ１のバッファ１１２に夫々格納する。これにより、矩形領域ＢＫ３の１番目の画素がＰＥ２のバッファ１１２に転送され、矩形領域ＢＫ３の２番目の画素がＰＥ１のバッファ１１２に転送される。
【０１５２】
サイクル１〜３までの処理は、１回目の前述した第５の処理に該当する。ここで、ＰＥ１〜ＰＥ６のバッファ１１２の全てがフルになったため、データ転送部３４６は、割込みを発生させる。この割込みに応じて、ＣＰ３３０は、ＰＥ１〜ＰＥ６の演算処理に割り込み、ライト命令を出す。
【０１５３】
各ＰＥは、ＣＰ３３０からのライト命令に応じて、バッファ１１２に格納されているデータをローカルメモリ１１４に書き込む。図示のように、サイクル４において、矩形領域ＢＫ１〜ＢＫ３の１番目の画素は、ＰＥ６、ＰＥ４、ＰＥ２のローカルメモリ１１４に夫々書き込まれ、矩形領域ＢＫ１〜ＢＫ３の２番目の画素は、ＰＥ５、ＰＥ３、ＰＥ１のローカルメモリ１１４に夫々書き込まれる。
【０１５４】
次に、データ転送部３４６は、２回目の第５の処理として、図１１に示すサイクル５〜７の処理を行う。図示のように、サイクル５において、矩形領域ＢＫ４の１番目の画素がＰＥ６のバッファ１１２に転送され、矩形領域ＢＫ４の２番目の画素がＰＥ５のバッファ１１２に転送される。
【０１５５】
そして、サイクル６において、矩形領域ＢＫ５の１番目の画素がＰＥ４のバッファ１１２に転送され、矩形領域ＢＫ５の２番目の画素がＰＥ３のバッファ１１２に転送される。
【０１５６】
次いで、サイクル７において、矩形領域ＢＫ６の１番目の画素がＰＥ２のバッファ１１２に転送され、矩形領域ＢＫ６の２番目の画素がＰＥ１のバッファ１１２に転送される。
【０１５７】
第５の処理がＴ回（２回）繰り返したため、データ転送部３４６は、ここで、第３の処理として、アドレス記憶部１４２に記憶されている各アドレスＡｉを式（１０）に従って増分させる。分かりやすいように、式（１０）を再度示す。
Ａｉ＝Ａｉ＋Ｓ×Ｔ        （１０）
但し，Ａｉ：ｉ個目のアドレス
Ｓ：単位サイズ
Ｔ：パラメータ記憶部３４４に記憶された第４のパラメータ
【０１５８】
式（１０）における単位サイズ「Ｓ」は、１画素のサイズに該当し、第４のパラメータＴは、「２」に設定されている。そのため、増分後の各アドレスＡｉ（ｉ＝１〜６）は、矩形領域ＢＫ１〜ＢＫ６の３番目の画素のアドレスになる。
【０１５９】
また、ＰＥ１〜ＰＥ６のバッファ１１２の全てがフルになったため、データ転送部３４６は、再度割込みを発生させる。この割込みに応じて、ＣＰ３３０は、ＰＥ１〜ＰＥ６の演算処理に割り込み、ライト命令を出す。これにより、図１１に示すように、サイクル８において、矩形領域ＢＫ４〜ＢＫ６の１番目の画素は、ＰＥ６、ＰＥ４、ＰＥ２のローカルメモリ１１４に夫々書き込まれ、矩形領域ＢＫ４〜ＢＫ６の２番目の画素は、ＰＥ５、ＰＥ３、ＰＥ１のローカルメモリ１１４に夫々書き込まれる。
【０１６０】
その後、上述した処理がＭ１回繰り返される。なお、「Ｍ１」は、前述した式（９）に示すＭ１である。そのため、上述した処理がＭ１回繰り返された後、夫々の矩形領域の該行について、まだ外部メモリからＰＥアレイ１１０に転送されていない画素は、末尾のＴ個（ここでは２個）であり、アドレス記憶部１４２に格納されているアドレスＡｉ（ｉ＝１〜６）は、当該矩形領域について、末尾の２つの画素のうちの先頭の画素のアドレスになっている。
【０１６１】
ここで、データ転送部３４６は、第２の処理を行うと共に、第４の処理として、アドレス記憶部１４２に格納されている各アドレスＡｉ（ｉ＝１〜６）に対して、第１のパラメータＯＳＶ分増分させる。これにより、アドレス記憶部１４２に格納された各アドレスＡｉは、対応する矩形領域の次の行の先頭アドレスになる。
【０１６２】
矩形領域ＢＫ１〜ＢＫ６の以降の各行に対して、上記と同様の処理が繰り返される。最後に、矩形領域ＢＫ１〜ＢＫ３について、行方向において奇数番（１番目、３番目など）の画素はＰＥ６、ＰＥ４、ＰＥ２のローカルメモリ１１４に夫々格納され、偶数番の画素はＰＥ５、ＰＥ３、ＰＥ１のローカルメモリ１１４に夫々格納される。
【０１６３】
また、矩形領域ＢＫ４〜ＢＫ６についても同様に、行方向において奇数番（１番目、３番目など）の画素はＰＥ６、ＰＥ４、ＰＥ２のローカルメモリ１１４に夫々格納され、偶数番の画素はＰＥ５、ＰＥ３、ＰＥ１のローカルメモリ１１４に夫々格納される。
【０１６４】
これにて外部メモリからＰＥアレイ１１０へのデータ転送が完了するが、同一の矩形領域の全ての画素が同一のＰＥのローカルメモリ１１４に格納されるようにするために、ＣＰ３３０は、ＰＥアレイ１１０に対してデータ交換の命令をする。
【０１６５】
ＰＥアレイ１１０の各ＰＥは、該命令に応じて、隣接するＰＥ同士間でローカルメモリのデータを交換する。例えば、ＰＥ５とＰＥ６間で、ＰＥ５のローカルメモリ１１４に書き込まれた矩形領域ＢＫ１の２番目の画素と、ＰＥ６のローカルメモリ１１４に書き込まれた矩形領域ＢＫ４の１番目の画素との交換により、矩形領域ＢＫ１の２番目の画素は、矩形領域ＢＫ１の１番目の画素と同様に、ＰＥ６のローカルメモリ１１４に格納されることになる。このような交換は、ＰＥアレイ１１０の各隣接するＰＥ同士間で行われた結果、図１１に示すように、矩形領域ＢＫ１〜ＢＫ６のデータは、対応するＰＥ（ＰＥ６〜ＰＥ１）のローカルメモリ１１４に夫々格納される。
【０１６６】
上記において、第４のパラメータＴが「２」に設定された場合を説明した。第４のパラメータＴが「１」に設定された場合には、ＳＩＭＤプロセッサ３００は、ＳＩＭＤプロセッサ１００と同様の動作をする。
【０１６７】
本実施の形態のＳＩＭＤプロセッサ３００は、第４のパラメータＴが「１」に設定されている場合には、ＳＩＭＤプロセッサ１００と同様の効果を得ることができる。第４のパラメータＴが「２」以上に設定された場合には、上記効果に加え、外部メモリとＰＥアレイ１１０間のデータ転送をより高速にできる。
【０１６８】
これは、データ転送部３４６は、１つの矩形領域について、外部メモリに対する１度の読出でアドレスが連続するＴ画素分のデータを読み出してＰＥアレイ１１０のバッファ１１２に転送するためである。一般的に知られているように、外部メモリへのアクセスは、通常、連続したアドレスに存在するデータを同時にアクセスした方が効率良い。
【０１６９】
なお、この場合、データ転送部３４６によるデータ転送の後に、同一の矩形領域のデータが同一のＰＥのローカルメモリに格納されるようにする処理が必要であるものの、この処理は、隣接するＰＥ同士間でデータ交換をするだけで実現できるので、高速に行うことができる。従って、この処理に伴うオーバーヘッドが小さい。
【０１７０】
以上、実施の形態をもとに本発明を説明した。実施の形態は例示であり、本発明の主旨から逸脱しない限り、上述した各実施の形態に対してさまざまな変更、増減、組合せを行ってもよい。これらの変更、増減、組合せが行われた変形例も本発明の範囲にあることは、当業者に理解されるところである。
【０１７１】
例えば、上述した各実施の形態において、第２のパラメータＷとして、矩形領域の行方向のサイズを設定しているが、他の値、例えば、矩形領域の行方向の画素数を設定するようにしてもよい。
【０１７２】
また、上述した各実施の形態の動作について、画像の場合を例にしたが、本発明にかかる技術は、画像以外の２次元データの処理にも適用することができる。
【符号の説明】
【０１７３】
１〜６  ＰＥ  １０  ＳＩＭＤプロセッサ
２０  コントロールプロセッサ（ＣＰ）  ３０  ＰＥアレイ
４２  バッファ  ４４  ローカルメモリ
４６  ＭＥＭＣＴＬ  ４８  演算部
１００  ＳＩＭＤプロセッサ  １１０  ＰＥアレイ
１１２  バッファ  １１４  ローカルメモリ
１２０  制御ユニット  １３０  ＣＰ
１４０  メモリコントローラ  １４２  アドレス記憶部
１４４  パラメータ記憶部  １４６  データ転送部
２００  ＳＩＭＤプロセッサ  ２１０  ＰＥアレイ
２２０  シフトレジスタ  ２２１〜２２６  １段目〜６段目
３００  ＳＩＭＤプロセッサ  ３２０  制御ユニット
３３０  コントロールプロセッサ（ＣＰ）  ３４０  メモリコントローラ
３４４  パラメータ記憶部  ３４６  データ転送部
Ａ１〜Ａ６  アドレス  ＢＫ１〜ＢＫ６  矩形領域
Ｐ  画像  Ｓ  単位サイズ
ＯＳＶ  第１のパラメータ
Ｗ  第２のパラメータ
Ｌ  第３のパラメータ
Ｔ  第４のパラメータ
【図１】
0005739758.tif 000002
【図２】
0005739758.tif 000003
【図３】
0005739758.tif 000004
【図４】
0005739758.tif 000005
【図５】
0005739758.tif 000006
【図６】
0005739758.tif 000007
【図７】
0005739758.tif 000008
【図８】
0005739758.tif 000009
【図９】
0005739758.tif 000010
【図１０】
0005739758.tif 000011
【図１１】
0005739758.tif 000012
【図１２】
0005739758.tif 000013
【図１３】
0005739758.tif 000014