(57)【要約】【課題】ＳＩＭＤ型マイクロプロセッサの各プロセッサエレメントにおいてデータのソート処理を高速に行う。【解決手段】複数のプロセッサエレメントを有するＳＩＭＤ型マイクロプロセッサにおいて、各プロセッサエレメントの備える特定のレジスタに格納される値と、オペランド指示されたソースレジスタに格納される値との、大小比較を行う第１のインストラクションにて、比較の結果、大きい方のデータを該特定のレジスタに格納し、小さい方のデータを、ソースレジスタに格納するか若しくはソースレジスタ以外のオペランド指示されたディスティネーションレジスタに格納することを特徴とする。【選択図】図３
2007102799.tif 000002
【特許請求の範囲】
【請求項１】
複数のプロセッサエレメントを有するＳＩＭＤ型マイクロプロセッサにおいて、
各プロセッサエレメント内にソートバッファレジスタを有し、
各プロセッサエレメントの備える特定のレジスタに格納される値と、オペランド指示されたソースレジスタに格納される値との、大小比較を行う第１のインストラクションにて、
比較の結果、大きい方のデータを該特定のレジスタに格納し、
小さい方のデータを、ソースレジスタに格納するか若しくはソースレジスタ以外のオペランド指示されたディスティネーションレジスタに格納し、
更に、
各プロセッサエレメントの備える特定のレジスタに格納される値と、オペランド指示されたソースレジスタに格納される値との、大小比較を行う第２のインストラクションにて、
比較の結果、小さい方のデータを該特定のレジスタに格納し、
大きい方のデータを、ソースレジスタに格納するか若しくはソースレジスタ以外のオペランド指示されたディスティネーションレジスタに格納し、
上記ソースレジスタ及び上記ディスティネーションレジスタとして上記ソートバッファレジスタが指示され、このことにより各プロセッサエレメント内にてソート処理が行われることを特徴とするＳＩＭＤ型マイクロプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＳＩＭＤ（Ｓｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｎ−ｓｔｒｅａｍ  Ｍｕｌｔｉｐｌｅ  Ｄａｔａ−ｓｔｒｅａｍ；単一命令多データ処理）型マイクロプロセッサに関する。
【背景技術】
【０００２】
ＳＩＭＤ型マイクロプロセッサでは、複数のデータに対して１つの命令で同時に同一の演算処理が実行可能である。この構造により、演算は同一であるがデータ量が非常に多い処理（例えば、画像処理）に係る用途において、頻用される。
【０００３】
ＳＩＭＤ型マイクロプロセッサにおける通常の演算処理では、複数の演算ユニット（Ｐｒｏｃｅｓｓｏｒ  Ｅｌｅｍｅｎｔ〔ＰＥ〕；プロセッサエレメント）を並べ同一の演算を同時に複数のデータに対して実行する。このことにより高速な演算処理が可能となっている。
【０００４】
ところで、「画像データ処理」においては、画質補正のために様々なフィルタ処理がなされる。通常のフィルタ処理は、画像の主走査方向、あるいは副走査方向に隣接する画素と対象となる画素との重み付け演算であるため、ＳＩＭＤ型マイクロプロセッサの同時演算性の利点が如何なく発揮され得る。通常の重み付けフィルタは、入力画像データのノイズ成分除去手法としても、用いられることがあるが、このような重み付けフィルタにおいては、輪郭部がぼやける等の欠点がある。
【０００５】
そこで、入力画像データのノイズ除去の有用な手法として、「メディアン・フィルタ」が知られている。輪郭部を保持したままでノイズ成分のみを除去することができるため、画像処理において頻用されるフィルタ（処理）である。
【０００６】
この「メディアン・フィルタ」とは、注目画素を中心として、隣接している画素（例えば注目画素の左、右、上、下、左上、右上、左下、右下に隣接している８画素）と注目画素とを合わせた複数の画素中から、「メディアン」、すなわちデータの大きい順に並べたときにちょうど中心の順位となるデータを求め、そのデータを注目画素のデータとして置き換える、という処理である。
【０００７】
ＳＩＭＤ型マイクロプロセッサにおいては、図５（１）のように、画素データは主走査方向に各ＰＥのレジスタ（図ではＲ２レジスタ）に並べられている。副走査方向に画素を参照しようとするには、いったん現ライン画素データを別のレジスタ（図ではＲ１レジスタ）にコピーして、ＳＩＭＤ型マイクロプロセッサの外部に設置されたＦＩＦＯメモリなどのラインバッファに格納することによって、ラインディレイを作っている。この操作を複数回繰り返すことによって副走査方向の画素が複数ライン分参照できる（図ではＲ１レジスタをラインディレイさせてＲ０レジスタを作っている。）。
【０００８】
メディアン・フィルタ処理では、全てのＰＥにおいて、自身の画素を中心にして隣接する画素との「メディアン」を取る（確定する）処理が必要となる。例えば、図５（２）において、番号［５］が付されたＰＥ、即ちＰＥ［５］に着目する。ここで、注目画素を、自身（ＰＥ［５］）のＲ１レジスタに格納されている画素「Ｅ」とする。すると、左上、左、左下の画素のデータは１つ前のＰＥ（ＰＥ［４］）のＲ０レジスタ（図では「Ａ」の画素）、Ｒ１（図では「Ｄ」の画素）、Ｒ２（図では「Ｇ」の画素）に格納され、右上、右、右下の画素のデータは１つ後のＰＥ（ＰＥ［６］）のＲ０レジスタ（図では「Ｃ」）、Ｒ１レジスタ（図では「Ｆ」）、Ｒ２（図では「Ｉ」）に格納されている。なお、ＰＥに付される番号、及び（Ｒ０、Ｒ１、Ｒ２などの）レジスタの種類については、後で説明する。
【０００９】
上記のような９画素（「Ａ」「Ｂ」「Ｃ」「Ｄ」「Ｅ」「Ｆ」「Ｇ」「Ｈ」「Ｉ」）のデータをソートしてメディアン（中心値）である５番目に大きい画素データを求めるためには、従来技術においては、画素データのソート処理を相当に多数回行なうことが欠かせない。そのような相当量のソート処理を軽減する若しくは高速化する方策が模索されている。
【００１０】
メディアン・フィルタ処理を高速化するための手法はＳＩＭＤ型マイクロプロセッサに関するものだけではない。例えば、特開平６−２７４６１７号は、「３×３」画素でのメディアン・フィルタの処理を取り上げている。そこでは、ソートする処理を３画素のソート、６画素のマージソート、９画素のマージソートと３つの段階に分けて処理の高速化を図る手法について、開示されている。また、特開平５−２６４５号には、対象となるデータをビットスライスに分割し、上位ビットから順に“１”の立っているデータの数を計数し、所望の順位のデータを求める方法について開示されている。いずれも、ＳＩＳＤ型プロセッサあるいは画像処理専用ＬＳＩにおいては有効であり、メディアン・フィルタ処理を高速に行うことが可能となっている。
【００１１】
しかし、ＳＩＭＤ型マイクロプロセッサを用いる画像処理において、上記発明を適用するのは、以下に述べるように、困難である。
【００１２】
特許文献１の発明を利用すると、６画素及び９画素でのマージソートにおいて、ＳＩＳＤなど分岐処理が可能であるプロセッサにおいては全体での処理速度が向上する。しかし、ＳＩＭＤ型マイクロプロセッサにおいては各ＰＥ毎に分岐処理を行うことができないため、全ての分岐先の演算を実行する必要が生じかえって処理時間がかかってしまう。
【００１３】
また、特許文献２においては、対象となるデータをビットスライスに分割し、上位ビットから順に“１”の立っているデータの数を計数し、所望の順位のデータを求める方法について、開示されている。このことを利用しようとすると、ＳＩＭＤ型マイクロプロセッサにおいては、注目画素の左右の画素データが隣接するＰＥのレジスタにデータが格納されているため、ビットスライスにまで分割されたデータを作るには隣接するＰＥからデータを引用してくる必要がある。そうすると、結果として配線数が増大してしまう。更に、ビットスライスに対する計数器、加算器を全ビット分まで各ＰＥに保有させると、回路規模が非現実的なまでに増大してしまう。各ビットにまで処理を分割して実行させると、膨大なサイクル数がかかってしまうことにもなる。
【００１４】
特許文献３では、ＳＩＭＤ型マイクロプロセッサにおけるメディアン・フィルタ処理が開示されている。そこでは、「３×３画素」での計算方法が示されている。まず、３画素のソート処理を「列」方向に行い、次にソート後のデータに対して、「行」方向に３画素のソート処理を行い、最後に対角線方向にソートを行うというものである。
【００１５】
上記の開示内容においては、基本となる「３画素のソート処理」に関しては示されていない。この「３画素のソート処理」を高速に行なえない、即ち「３画素のソート処理」に時間がかかってしまうと、全体処理時間も比例して増えてしまうことになる。３画素のデータをソート処理する場合、従来のＳＩＭＤ型マイクロプロセッサでは、以下のような順序で行なっている。
【００１６】
以下では、比較対象となる３画素のデータが、各ＰＥのＲ０、Ｒ１、Ｒ２レジスタに格納されており、ソート処理後のデータは、各ＰＥのＲ１６、Ｒ１７、Ｒ１８に降順に格納される。「ＭＡＸ」命令とは、２つのソースレジスタの値の比較を行い、大きい方のデータを指定したレジスタに書き戻す命令であり、同様に「ＭＩＮ」命令とは、小さい方のデータを指定したレジスタに書き戻す命令である。
【００１７】
１．Ｒ０とＲ１とのＭＡＸ演算を行い、結果をＲ１６に格納する。
２．Ｒ０とＲ１とのＭＩＮ演算を行い、結果をＲ１７に格納する。
３．Ｒ２とＲ１７とのＭＩＮ演算を行い、結果をＲ１８に格納する。
４．Ｒ２とＲ１７とのＭＡＸ演算を行い、結果をＲ１７に格納する。
５．Ｒ１６とＲ１７とのＭＡＸ演算を行い、結果をＲ１６に格納する。
６．Ｒ１６とＲ１７とのＭＩＮ演算を行い、結果をＲ１７に格納する。
【００１８】
以上のように、６サイクルの処理サイクルが必要となる。
【００１９】
特許文献３の手法により、「３×３画素」のメディアン・フィルタ処理を行なうには、
（１）「列」方向に３画素のデータをソートする（「ＳＩＭＤ」であるから、３列分、同時実行可能である。）。；６サイクル
（２）「行」方向に３画素のデータをソートする。；３行で１０サイクル
（３）対角線方向に３画素のデータをソートする。；６サイクル
となり、全体で２２サイクルが必要となる。上記（２）においては、３画素のＭＡＸ、ＭＩＮを求める際に、ソート処理が不要であり２サイクルで求められる。よって、処理時間が３行分のソートに必要な１８サイクルよりは短く済む。
【特許文献１】特開平６−２７４６１７号公報
【特許文献２】特開平５−２６４５号公報
【特許文献３】特開平１１−１４９５５４号公報
【発明の開示】
【発明が解決しようとする課題】
【００２０】
本発明は、ＳＩＭＤ型マイクロプロセッサの各プロセッサエレメントにおいて、データのソート処理を高速に行ない得ることを目的としている。
【課題を解決するための手段】
【００２１】
本発明に係る請求項１に記載のＳＩＭＤ型マイクロプロセッサは、
複数のプロセッサエレメントを有するＳＩＭＤ型マイクロプロセッサであって、
各プロセッサエレメント内にソートバッファレジスタを有し、
各プロセッサエレメントの備える特定のレジスタに格納される値と、オペランド指示されたソースレジスタに格納される値との、大小比較を行う第１のインストラクションにて、
比較の結果、大きい方のデータを該特定のレジスタに格納し、
小さい方のデータを、ソースレジスタに格納するか若しくはソースレジスタ以外のオペランド指示されたディスティネーションレジスタに格納し、
更に、
各プロセッサエレメントの備える特定のレジスタに格納される値と、オペランド指示されたソースレジスタに格納される値との、大小比較を行う第２のインストラクションにて、
比較の結果、小さい方のデータを該特定のレジスタに格納し、
大きい方のデータを、ソースレジスタに格納するか若しくはソースレジスタ以外のオペランド指示されたディスティネーションレジスタに格納し、
上記ソースレジスタ及び上記ディスティネーションレジスタとして上記ソートバッファレジスタが指示され、このことにより各プロセッサエレメント内にてソート処理が行われることを特徴とする
ＳＩＭＤ型マイクロプロセッサである。
【発明の効果】
【００２２】
以上の説明から明白なように、本発明を利用することにより以下のような効果を得ることができる。
【００２３】
本発明に係る第１の実施の形態若しくは第２の実施の形態のＳＩＭＤ型マイクロプロセッサ２を利用すると、２つのデータを比較して、大きい（あるいは小さい）データを特定のレジスタに残し、且つ、小さい（あるいは大きい）データをオペランド指示したレジスタに格納することができる。よって、ソート用のハードウェアをＳＩＭＤ型マイクロプロセッサに実装すること無しに、未ソートデータをソート済みデータとマージする際の処理時間が短縮できる。
【００２４】
更に、未ソートのデータをソートする際に処理時間を短縮できるような、処理フローを実現できる。
【発明を実施するための最良の形態】
【００２５】
以下、図面を参照して、本発明に係る好適な実施形態を説明する。
【００２６】
図１は、本発明に係るＳＩＭＤ型マイクロプロセッサ２の概略の構成を示すブロック図である。該ＳＩＭＤ型マイクロプロセッサ２は、概略、グローバルプロセッサ４、レジスタファイル６、及び演算アレイ８から構成される。
【００２７】
（１）グローバルプロセッサ４
このグローバルプロセッサ４そのものは、いわゆるＳＩＳＤ型のプロセッサであり、プログラムＲＡＭ１０とデータＲＡＭ１２を内蔵し（図２参照）、プログラムを解読し各種制御信号を生成する。この制御信号は内蔵する各種ブロック以外に、レジスタファイル６、演算アレイ８にも供給される。また、ＧＰ（グローバルプロセッサ）命令実行時は内蔵する汎用レジスタ、ＡＬＵ（算術論理演算器）等を使用して各種演算処理、プログラム制御処理をおこなう。
【００２８】
（２）レジスタファイル６
ＰＥ（プロセッサエレメント）命令で処理されるデータを保持している。ＰＥ（プロセッサエレメント）３は、公知のように、ＳＩＭＤ（Ｓｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ−Ｓｔｒｅａｍ，Ｍｕｌｔｉｐｌｅ  Ｄａｔａ−Ｓｔｒｅａｍ）型プロセッサにおいて個別の演算を実行する構成単位である。図２のレジスタファイル６及び演算アレイ８が示すように、図２のＳＩＭＤ型マイクロプロセッサ２では２５６個のＰＥ３を含んでいる。上記のＰＥ命令はＳＩＭＤ型の命令であり、レジスタファイル６に保持されている複数のデータに対し、同時に同じ処理を行なう。このレジスタファイル６からのデータの読み出し／書き込みの制御はグローバルプロセッサ４からの制御によって行なわれる。読み出されたデータは演算アレイ８に送られ、演算アレイ８での演算処理後にレジスタファイル６に書き込まれる。
【００２９】
また、レジスタファイル６はプロセッサ２外部からのアクセスが可能であり、グローバルプロセッサ４の制御とは別に、外部から特定のレジスタに対し読み出し／書き込みが行なわれる。
【００３０】
（３）演算アレイ
ＰＥ命令の演算処理が行なわれる。処理の制御はすべてグローバルプロセッサ４から行なわれる。
【００３１】
図２は、本発明に係るＳＩＭＤ型マイクロプロセッサ２の、更に詳細な構成を示すブロック図である。
【００３２】
グローバルプロセッサ４には、本プロセッサ２のプログラム格納用のプログラムＲＡＭ１０と、演算データ格納用のデータＲＡＭ１２が内蔵されている。さらに、プログラムのアドレスを保持するプログラムカウンタ（ＰＣ）１４、演算処理のデータ格納のための汎用レジスタであるＧ０、Ｇ１、Ｇ２及びＧ３レジスタ（１６、１８、２０、２２）、レジスタ退避・復帰時に退避先データＲＡＭのアドレスを保持しているスタックポインタ（ＳＰ）２４、サブルーチンコール時にコール元のアドレスを保持するリンクレジスタ（ＬＳ）２６、同じくＩＲＱ（Ｉｎｔｅｒｒｕｐｔ  ＲｅＱｕｅｓｔ；割込み要求）時とＮＭＩ（Ｎｏｎ−Ｍａｓｋａｂｌｅ  Ｉｎｔｅｒｒｕｐｔ  ｒｅｑｕｅｓｔ；禁止不能割込み要求）時の分岐元アドレスを保持するＬＩレジスタ２８及びＬＮレジスタ３０、プロセッサの状態を保持しているプロセッサステータスレジスタ（Ｐ）３２が内蔵されている。
【００３３】
これらのレジスタと、（図示していない）命令デコーダ、ＡＬＵ、ＳＣＵ（シーケンシャルユニット）、メモリ制御回路、割り込み制御回路、外部Ｉ／Ｏ制御回路及びＧＰ演算制御回路とを使用して、ＧＰ命令の実行が行なわれる。
【００３４】
また、ＰＥ命令実行時には、命令デコーダ（図示せず。）、レジスタファイル制御回路（図示せず。）、ＰＥ演算制御回路（図示せず。）を使用して、レジスタファイル６の制御と演算アレイ８の制御を行なう。さらに、データＲＡＭ１２から複数のＰＥレジスタファイル６にデータを転送できるように、設定されている。
【００３５】
レジスタファイル６においては、１つのＰＥ単位に８ビットのレジスタ３４が３２本内蔵されており、２５６個のＰＥ分の（３２本の）組が、アレイ構成になっている。レジスタ３４はＰＥ毎に、Ｒ０、Ｒ１、Ｒ２、．．．Ｒ３１と呼ばれる。それぞれのレジスタ３４は、演算アレイ８に対して１つの読み出しポートと１つの書き込みポートを備えており、８ビットのリード／ライト兼用のバスで演算アレイ８からアクセスされる。３２本のレジスタの内、２４本（Ｒ０〜Ｒ２３）はプロセッサ外部からアクセス可能であり、外部からはクロック（ＣＬＫ）とアドレス（Ａｄｄｒｅｓｓ）、リード／ライト制御（ＲＷＢ）を入力することで、任意のレジスタ３４に対し、読み書きできる。残りの８本（Ｒ２４〜Ｒ３１）のレジスタ３４は、ＰＥ演算の一時的な演算データ保存用として使用される。
【００３６】
演算アレイ８は、１６ビットＡＬＵ３６と１６ビットＡレジスタ３８、１つ又は複数のＦレジスタ４０を内蔵している。ＰＥ命令による演算は、レジスタファイル６から読み出されたデータ若しくはグローバルプロセッサ４から与えられたデータをＡＬＵ３６の片側の入力とし、Ａレジスタ３８の内容をもう片側の入力として、通常、行なわれるものである。その演算結果は、Ａレジスタ３８に格納される。したがって、Ｒ０〜Ｒ３１レジスタ３４若しくはグローバルプロセッサ４から与えられたデータと、Ａレジスタ３８に格納されるデータとの、演算が通常行なわれることになる。
【００３７】
レジスタファイル６と演算アレイ８との接続に、７ｔｏ１（７対１）のマルチプレクサ４２が置かれている。図２に示すように、あるマルチプレクサ４２から見て、左方向の３つのＰＥ３に含まれるＲ０〜Ｒ３１レジスタ３４のデータと、右方向の３つのＰＥ３に含まれるＲ０〜Ｒ３１レジスタ３４のデータと、自らが属するＰＥ３に含まれるＲ０〜Ｒ３１レジスタ３４のデータを、演算対象として選択し得るように設定されている。また、レジスタファイル６の８ビットのデータは、シフト・拡張回路４４により任意のビット分だけ、左シフトしてＡＬＵ３６に入力する。
【００３８】
さらに、８ビットの条件レジスタ（図示せず。）により、ＰＥ３別に演算実行の無効／有効の制御をしており、特定のＰＥ３だけを演算対象として選択できるようになっている。
【００３９】
各ＰＥ３には、ＰＥ番号と呼ばれる通し番号が付されている。図２のＳＩＭＤ型マイクロプロセッサ２では、ＰＥの個数が２５６個であるので、８ビットのビット列（即ち、００００００００ｂ〜１１１１１１１１ｂの２５６通り。ここで、上記のような末尾の“ｂ”は２進法表記であることを表す。）が、各ＰＥ３にＰＥ番号データとして与えられる。ＰＥ番号は、各ＰＥ３に対し、ＰＥの位置とは無関係に与えられても構わないが、本明細書においては、（左）端から順に付されているものとする。また、ＰＥ番号が「ｎ」であるＰＥを、
・ＰＥ［ｎ］
と表すことにする。従って、図２のＳＩＭＤ型マイクロプロセッサ２は、左方から、ＰＥ［０］、ＰＥ［２］、ＰＥ［３］、・・・ＰＥ［２５４］、ＰＥ［２５５］により、構成される。
【００４０】
なお、上記のＰＥ番号データは、各ＰＥ３にて８ビットの入力端子を備えさせその端子をＶＣＣ若しくはＧＮＤに結ぶ組み合わせを変えることにより、作成している。
【００４１】
≪第１の実施の形態≫
図３は、本発明の第１の実施の形態に係るＳＩＭＤ型マイクロプロセッサ２のブロック図、特に、１つのＰＥ３部分を拡大したブロック図を示す。
【００４２】
各ＰＥの演算部（演算アレイ８）は、
・ＡＬＵ３６、
・２つのＡＬＵラッチ（ＡＬＴ［１］５０−１、ＡＬＴ［２］５０−２）、
・演算結果を格納するＡレジスタ３８、
・テンポラリレジスタとして利用される２つのＦレジスタ（Ｆ１レジスタ４０−１、Ｆ２レジスタ４０−２）、
・ＡＬＵ３６より出力されるキャリーをラッチするＣＦ（キャリーフラグ）５４、
を含んでいる。Ａレジスタ３８とＡＬＵ３６との間には、マルチプレクサ５２が挿入されて設置されており、Ａレジスタ３８に格納する値として、ＡＬＵ３６での演算結果、若しくは２つのＡＬＵラッチ（ＡＬＴ［１］５０−１、ＡＬＴ［２］５０−２）の内容の、都合３つから１つのデータが選択されることが可能となっている。このマルチプレクサ５２の選択を制御する選択信号として、
・グローバルプロセッサ４からの制御信号［１］と、
・ＡＬＵ３６から出力されたキャリーと
が入力されている。ここで、ＡＬＵ３６においては、通常の演算命令を行う場合には、ＡＬＵ３６の演算結果をＡレジスタ３８に入力するようにし、（後で説明する）「ＭＡＸＳ」命令若しくは「ＭＩＮＳ」命令を実行する場合には、キャリーによってＡＬＴ［１］とＡＬＴ［２］のどちらかが選択されてＡレジスタ３８に入力するように、上記選択信号により制御されるのが望ましい。
【００４３】
Ｆ１レジスタ４０−１及びＦ２レジスタ４０−２は、ＡＬＴ［１］もしくはＡＬＴ［２］からのデータを転送することができるように構成されている。どちらのデータを入力して保持するかは図示していないが、グローバルプロセッサ４よりの制御線によって決定される。Ａレジスタ３８及び２つのＦレジスタ（Ｆ１レジスタ４０−１、Ｆ２レジスタ４０−２）は、データバス５５にデータを出力するための経路を有している。ここで、Ａレジスタ３８の出力制御は、グローバルプロセッサ４よりの制御信号２によって、２つのＦレジスタ（Ｆ１レジスタ４０−１、Ｆ２レジスタ４０−２）の出力制御は、グローバルプロセッサ４よりの制御信号３、制御信号４、及びＣＦ５４の値によって、制御される。
【００４４】
上記の第１の実施の形態に係るＳＩＭＤ型マイクロプロセッサ２の動作を説明する。
【００４５】
先ず、「ＭＡＸＳ」命令時について示す。最初、Ａレジスタ３８の値が、ＡＬＴ［２］５０−２に入力され、オペランド指示されたソースレジスタの値が、ＡＬＴ［１］５０−１に入力され、ＡＬＵ３６にて比較（減算演算）される。比較結果は、「キャリー」となってＡＬＵ３６より出力される。演算後、Ａレジスタ３８には「キャリー」の値に応じて、ＡＬＴ［１］５０−１及びＡＬＵ［２］５０−２のうち大きい（即ち、ＭＡＸＳ命令）値が入力される。
【００４６】
Ｆ１レジスタ４０−１にはＡＬＴ［１］５０−１の値が入力され、Ｆ２レジスタ４０−２にはＡＬＴ［２］５０−２の値が入力されるように、グローバルプロセッサ４より制御される。
【００４７】
ディスティネーションレジスタへのデータ転送に関しては、キャリーをラッチしたＣＦ５４の値に応じてＦ１レジスタ４０−１とＦ２レジスタ４０−２のうちで、どちらがデータバス５５にデータを出力するかが決定される。そのため、小さい（ＭＡＸＳ命令時）値を転送することが可能となる。
【００４８】
上記の説明では、ソースレジスタとディスティネーションレジスタとは別々にオペランド指示されていることが想定されている。ソースレジスタとディスティネーションとが同一のオペランド（ソースオペランドのみ）で指定されてもよい。この場合はオペランド数が少なくてすむため命令マッピング上有利である。
【００４９】
続いて、「ＭＩＮＳ」命令時について示す。ＭＩＮＳ命令は、ＡＬＵ３６における比較（減算演算）の順序を、ＭＡＸＳ命令と逆の順序にすることで実現できる。若しくは、Ａレジスタ３８の入力を選択するマルチプレクサ５２において、「キャリー」を反転して入力するようにし、Ｆ１レジスタ４０−１にＡＬＴ［２］５０−２の値を入力し、Ｆ２レジスタ４０−１にはＡＬＴ［１］５０−１の値を入力するように、グローバルプロセッサ４より制御することでも実現できる。かかる構成によれば、上記ＭＡＸＳ命令実行時と逆に、小さい方のデータがＡレジスタ３８に格納され、大きい方のデータがディスティネーションレジスタに格納される。
【００５０】
≪第２の実施の形態≫
２つの比較対象データが符号無しデータの場合は、上記のように比較結果をキャリー出力によって判断することが可能である。しかし、２つの比較対象データが符号付きデータの場合には、比較結果は、ネガティブビット（ＡＬＵ３６の減算結果の最上位ビット）と、オーバフロービットとの、排他的論理和によって判断される必要がある。
【００５１】
図４は、本発明の第２の実施の形態に係るＳＩＭＤ型マイクロプロセッサ２のブロック図、特に、１つのＰＥ３部分を拡大したブロック図を示す。
【００５２】
図４のＰＥの構成によれば、符号無しデータ、符号付きデータの何れにも対応し得る。ＡＬＵ３６より出力される各フラグ（Ｃ：キャリー、Ｖ：オーバフロー、Ｎ：ネガティブ）は、Ａレジスタ３８への入力を選択するマルチプレクサ５２及び、フラグレジスタブロック（ＰＳＲ）６８へと入力されている。マルチプレクサ５２は、比較対象データが符号なしの場合には、キャリーによってＡレジスタ３８に入力するデータを選択し、符号ありの場合はオーバフロービットとネガティブビットとの排他的論理和によってＡレジスタ３８に入力するデータを選択するように構成される。フラグレジスタブロック（ＰＳＲ）６８では、各フラグのラッチを行っている。内蔵しているマルチプレクサ６８によって、比較対象データが符号無しデータの場合はＣＦ（キャリーフラグ）を、符号ありの場合はＮＦ（ネガティブフラグ）とＶＦ（オーバフローフラグ）との排他的論理和を、Ｆ１レジスタ４０−１、Ｆ２レジスタ４０−２の出力イネーブル制御信号として出力する。
【００５３】
≪基本的なソート処理の実施について≫
まず、上記の図３又は図４にて示されるＳＩＭＤ型マイクロプロセッサ２を利用すれば、すでにソート済みのデータに対して、引き続き新たなデータが付加更新されてきた場合に、ソート処理を効率よく行うことができる。
【００５４】
以下において、５個のソート済みデータがあり、Ｒ０、Ｒ１、Ｒ２、Ｒ３、Ｒ４の各レジスタにそれぞれ格納され（但し、Ｒ０≧Ｒ１≧Ｒ２≧Ｒ３≧Ｒ４となっている）、更に、１個の未ソートデータが（付加）更新されてきた場合の、ソート処理について記述する。
【００５５】
１．Ａレジスタ３８に、未ソートデータをロードする。
２．Ａレジスタ３８とＲ４とのデータの比較を行い、大きい方のデータをＡレジスタ３８に残す。
３．Ａレジスタ３８とＲ３とのデータの比較を行い、大きい方のデータをＡレジスタ３８に残し、小さい方のデータをＲ４に格納する。
４．Ａレジスタ３８とＲ２とのデータの比較を行い、大きい方のデータをＡレジスタに残し、小さい方のデータをＲ３レジスタに格納する。
５．Ａレジスタ３８とＲ１とのデータの比較を行い、大きい方のデータをＡレジスタに残し、小さい方のデータをＲ２レジスタに格納する。
６．Ａレジスタ３８とＲ０とのデータの比較を行い、大きい方のデータをＡレジスタに残し、小さい方のデータをＲ１レジスタに格納する。
７．Ａレジスタ３８の値をＲ０レジスタに格納する。
【００５６】
ソートバッファ（Ｒ０、Ｒ１、Ｒ２、Ｒ３、Ｒ４）の上位側（即ち、値の大きい側）に伝達すべきデータが、Ａレジスタ３８に残り続けるため、上記のように連続して処理を続けることが可能となっている。以上の処理は、ソートバッファの下位順から上位順側に向かって処理を行っているが、逆に上位側から下位側に向かって行っても同様であることは自明である。
【００５７】
≪３個のデータのソート処理について≫
以下では、本発明の第１の実施の形態若しくは第２の実施の形態に係るＳＩＭＤ型マイクロプロセッサ２を利用して、３個のデータをソートする処理について説明する。
【００５８】
比較対象となるデータが各ＰＥ３のＲ０、Ｒ１、Ｒ２レジスタに格納されており、ソート後のデータが各ＰＥ３のＲ１６、Ｒ１７、Ｒ１８レジスタに格納されるものとする。但し、Ｒ１６≧Ｒ１７≧Ｒ１８となっている。
【００５９】
１．Ａレジスタ３８にＲ０レジスタの値をロードする。
２．Ａレジスタ３８とＲ１レジスタの値を比較し、大きい方のデータをＡレジスタ３８に残し、小さい方のデータをＲ１８レジスタに格納する。
３．Ａレジスタ３８とＲ２レジスタの値を比較し、小さい方のデータをＡレジスタ３８に残し、大きい方のデータをＲ１６レジスタに格納する。
４．Ａレジスタ３８とＲ１８レジスタの値を比較し、小さい方のデータをＡレジスタ３８に残し、大きい方のデータをＲ１７レジスタに格納する。
５．Ａレジスタ３８のデータをＲ１８レジスタに格納する。
【００６０】
次の処理でも、上記と同様のソートが行える。
【００６１】
１．Ａレジスタ３８にＲ０レジスタの値をロードする。
２．Ａレジスタ３８とＲ１レジスタの値を比較し、小さい方のデータをＡレジスタ３８に残し、大きい方のデータをＲ１６レジスタに格納する。
３．Ａレジスタ３８とＲ２レジスタの値を比較し、大きい方のデータをＡレジスタ３８に残し、小さい方のデータをＲ１８レジスタに格納する。
４．Ａレジスタ３８とＲ１６のデータを比較し、大きい方のデータをＡレジスタに残し、小さい方のデータをＲ１７に格納する。
５．Ａレジスタ３８のデータをＲ１６に格納する。
【００６２】
従来のＳＩＭＤ型マイクロプロセッサでは、６サイクル必要だったソート処理が、上記のように５サイクルで行えることがわかる。上記の処理において、
「１．Ａレジスタ３８にＲ０レジスタの値をロードする。」
という処理は、画像処理においては、必ず、ソートを行う以前に実施されているはずである。よって、（最後に）Ａレジスタ３８に格納されている画素データを最初のソート対象データとすることによって更に１サイクルを削減できることとなる。
【００６３】
≪メディアン・フィルタ処理の実施について≫
以下にて、本発明を用いて、「３×３」の画素領域でのメディアン・フィルタの処理について、説明する。
【００６４】
上記の場合、メディアン（中心値）は５番目のデータであるから、ソートバッファとして５個のバッファが必要であることがわかる。５個のバッファとして、ここでは、
・Ｒ１６、Ｒ１７、Ｒ１８、Ｒ１９、Ｒ２０
の各レジスタを使用することにする。
【００６５】
また、各ＰＥ３のＲ０レジスタに、一番上の行の画素データが格納されており、Ｒ１レジスタに中心の画素データが格納されており、Ｒ２レジスタに一番下の画素データが格納されているとする。ＳＩＭＤ型マイクロプロセッサ２においては、ＰＥ３は主走査方向に展開される。また、副走査方向（下向き）の一番下の画素データ（即ち、Ｒ２レジスタのデータ）が現ラインデータとされ、それよりも上の行の画素データに関しては、ＦＩＦＯメモリ等を用いるラインバッファにライン遅延させたデータを持たせることになる。ここではＲ０レジスタ、Ｒ１レジスタがライン遅延されているデータとなる（図５）。
【００６６】
１．Ｒ２レジスタのデータを、Ａレジスタ３８にロードする（現ラインデータであるから既に実施されていることが多い。）。
２．Ａレジスタ３８の値と、１つ左のＰＥのＲ０レジスタの値とを比較し、大きい方のデータをＡレジスタ３８に残し、小さい方のデータをＲ２０レジスタに格納する。
３．Ａレジスタ３８の値と、同一ＰＥ内のＲ０レジスタの値とを比較し、小さい方のデータをＡレジスタ３８に残し、大きい方のデータをＲ１８レジスタに格納する。
４．Ａレジスタ３８の値と、Ｒ２０レジスタの値とを比較し、小さい方のデータをＡレジスタ３８に残し、大きい方のデータをＲ１９レジスタに格納する。
５．Ａレジスタ３８の値と、１つ右のＰＥのＲ０レジスタの値とを比較し、大きい方のデータをＡレジスタ３８に残し、小さい方のデータをＲ２０レジスタに格納する。
６．Ａレジスタ３８の値と、Ｒ１９レジスタの値を比較し、大きい方のデータをＡレジスタ３８に残し、小さい方のデータをＲ１９レジスタに格納する。
７．Ａレジスタ３８の値と、Ｒ１８レジスタの値を比較し、大きい方のデータをＡレジスタ３８に残し、小さい方のデータをＲ１８レジスタに格納する。
８．Ａレジスタ３８の値と、１つ左のＰＥのＲ１レジスタの値とを比較し、小さい方のデータをＡレジスタ３８に残し、大きい方のデータをＲ１６レジスタに格納する。
９．Ａレジスタ３８の値と、Ｒ１８レジスタの値を比較し、小さい方のデータをＡレジスタ３８に残し、大きい方のデータをＲ１７レジスタに格納する。
１０．Ａレジスタ３８の値と、Ｒ１９レジスタの値を比較し、小さい方のデータをＡレジスタ３８に残し、大きい方のデータをＲ１８レジスタに格納する。
１１．Ａレジスタ３８の値と、Ｒ２０レジスタの値を比較し、小さい方のデータをＡレジスタ３８に残し、大きい方のデータをＲ１９レジスタに格納する。
１２．Ａレジスタ３８の値と、同一のＰＥのＲ１レジスタの値とを比較し、大きい方のデータをＡレジスタ３８に残す。
１３．Ａレジスタ３８の値と、Ｒ１９レジスタの値を比較し、大きい方のデータをＡレジスタレジスタに残し、小さい方のデータをＲ２０レジスタに格納する。
１４．Ａレジスタ３８の値と、Ｒ１８レジスタの値を比較し、大きい方のデータをＡレジスタ３８に残し、小さい方のデータをＲ１９レジスタに格納する。
１５．Ａレジスタ３８の値と、Ｒ１７レジスタの値を比較し、大きい方のデータをＡレジスタ３８に残し、小さい方のデータをＲ１８レジスタに格納する。
１６．Ａレジスタ３８の値と、Ｒ１６レジスタの値を比較し、大きい方のデータをＡレジスタ３８に残し、小さい方のデータをＲ１７レジスタに格納する。
１７．Ａレジスタ３８の値と、１つ右のＰＥのＲ１レジスタの値とを比較し、小さい方のデータをＡレジスタ３８に残し、大きい方のデータをＲ１６レジスタに格納する。
１８．Ａレジスタ３８の値と、Ｒ１７レジスタの値を比較し、小さい方のデータをＡレジスタ３８に残し、大きい方のデータをＲ１７レジスタに格納する。
１９．Ａレジスタ３８の値と、Ｒ１８レジスタの値を比較し、小さい方のデータをＡレジスタ３８に残し、大きい方のデータをＲ１８レジスタに格納する。
２０．Ａレジスタ３８の値と、Ｒ１９レジスタの値を比較し、小さい方のデータをＡレジスタ３８に残し、大きい方のデータをＲ１９レジスタに格納する。
２１．Ａレジスタ３８の値と、Ｒ２０レジスタの値を比較し、大きい方のデータをＡレジスタ３８に残す。
２２．Ａレジスタ３８の値と、１つ左のＰＥのＲ２レジスタの値とを比較し、大きい方のデータをＡレジスタ３８に残す。
２３．Ａレジスタ３８の値と、Ｒ１９レジスタの値を比較し、大きい方のデータをＡレジスタ３８に残し、小さい方のデータをＲ２０レジスタに格納する。
２４．Ａレジスタ３８の値と、Ｒ１８レジスタの値を比較し、大きい方のデータをＡレジスタ３８に残し、小さい方のデータをＲ１９レジスタに格納する。ここで、残り１画素を除いて「４位」が確定するので、これ以上ソートの必要はない。
２５．Ａレジスタ３８に１つ右のＰＥのＲ２レジスタのデータをロードする。
２６．Ａレジスタ３８の値と、Ｒ２０レジスタの値を比較して、大きい方のデータをＡレジスタ３８に残す。
２７．Ａレジスタ３８の値と、Ｒ１９レジスタの値を比較して、小さい方のデータを所望のレジスタに格納する。
【００６７】
図６、図７、図８及び図９において、上記のソート処理の概念図及びフロー図を順に示す。図において、「空」は、ソートバッファが空であることを、灰色に塗られた部分はソース指示（３×３の画素群）、ディスティネーション指定（Ｒ１６〜Ｒ２０のソートバッファ）されていることを示す。また斜線掛けされている部分はすでにデータが比較し終わっている（３×３の画素群）、すでにデータが格納されている（Ｒ１６〜Ｒ２０のソートバッファ）ことを示している。
【００６８】
上記の処理は、「１．」の処理を含めて２７サイクルであり、「１．」の処理を省いても２６サイクル必要である。よって、特開平１１−１４９５５４号に開示される発明よりも、若干処理サイクルは多く必要となる。但し、特開平１１−１４９５５４号では、ソート対象となるデータ数が自然数の積で表わされることを利用している都合上、適用できるデータ数に制限がある（３×３など）のに対して、本発明では、ソート対象のデータ数に依存せずにソート処理を行えることが利点である。
【図面の簡単な説明】
【００６９】
【図１】本発明に係るＳＩＭＤ型マイクロプロセッサの概略の構成を示すブロック図である。
【図２】本発明に係るＳＩＭＤ型マイクロプロセッサの更に詳細な構成を示すブロック図である。
【図３】本発明の第１の実施の形態に係るＳＩＭＤ型マイクロプロセッサのブロック図、特に、１つのプロセッサエレメント部分を拡大したブロック図を示す。
【図４】本発明の第２の実施の形態に係るＳＩＭＤ型マイクロプロセッサのブロック図、特に、１つのプロセッサエレメント部分を拡大したブロック図を示す。
【図５】画素とレジスタの対応を示す概念図である。
【図６】本発明を利用する、「３×３」の画素領域でのメディアン・フィルタのソート処理の、概念図及びフロー図（１）を示す。
【図７】本発明を利用する、「３×３」の画素領域でのメディアン・フィルタのソート処理の、概念図及びフロー図（２）を示す。
【図８】本発明を利用する、「３×３」の画素領域でのメディアン・フィルタのソート処理の、概念図及びフロー図（３）を示す。
【図９】本発明を利用する、「３×３」の画素領域でのメディアン・フィルタのソート処理の、概念図及びフロー図（４）を示す。
【符号の説明】
【００７０】
２・・・ＳＩＭＤ型マイクロプロセッサ、３・・・プロセッサエレメント、４グローバルプロセッサ、６・・・レジスタファイル、８・・・演算アレイ、３６・・・１６ビットＡＬＵ、３８・・・Ａレジスタ、４０−１・・・Ｆ１レジスタ、４０−２・・・Ｆ２レジスタ、４２・・・マルチプレクサ、４８・・・マルチプレクサ、５０−１・・・ＡＬＵラッチ［１］、５０−２・・・ＡＬＵラッチ［２］、５２・・・マルチプレクサ、５４・・・キャリーフラグ、６８・・・フラグレジスタブロック（ＰＳＲ）。
【図１】
2007102799.tif 000003
【図２】
2007102799.tif 000004
【図３】
2007102799.tif 000005
【図４】
2007102799.tif 000006
【図５】
2007102799.tif 000007
【図６】
2007102799.tif 000008
【図７】
2007102799.tif 000009
【図８】
2007102799.tif 000010
【図９】
2007102799.tif 000011