(57)【特許請求の範囲】
【請求項１】
メモリ・デバイスに結合されるプロセッサから構成される装置であって、前記プロセッサは、Ｍ個のデータ・エレメントを並列に処理するために形成された複数の実行ユニットを含むパイプライン、および、Ｎ／Ｍ個の機械語命令に応答して極限値を求めてＮ個のデータ・エレメントのアレイを探索するようにパイプラインに指示するために形成された制御ユニットを含み、前記機械語命令に応答して前記パイプラインは、
単一のフェッチ・サイクル中に単一のデータ量として前記Ｎ個のデータ・エレメントのアレイからＭ個のデータ・エレメントを引き出し、
前記引き出されたＭ個のデータ・エレメントを、対応するＭ個の現在の極限値と同時に比較し、前記比較に基づいて前記Ｍ個の現在の極限値に関連するアキュミュレータおよびポインタを更新し、前記ポインタは前記Ｎ個のデータ・エレメントのアレイ内の極限値のアドレスを示す情報を格納するためのＭ個のポインタ・レジスタを含み、
前記Ｎ／Ｍ個の機械語命令の結果を分析して、前記アレイ内の極限値の値および位置を識別し、前記極限値は、前記アレイ内で１回以上発生する極限値を含み、かつ、前記アレイ内の前記極限値の位置は、前記アレイ内で前記１回以上発生する極限値の最初の発生および最後の発生のうちの予め定める１つの位置を含む、
ことを特徴とする装置。
【請求項２】
前記メモリ・デバイスをさらに含むことを特徴とする請求項１記載の装置。
【請求項３】
前記メモリ・デバイスは、スタティック・ランダム・アクセス・メモリを含むことを特徴とする請求項２記載の装置。
【請求項４】
前記メモリ・デバイスは、フラッシュ・メモリを含むことを特徴とする請求項２記載の装置。
【請求項５】
前記パイプラインは、前記アキュミュレータおよびポインタを格納するために形成されたＭ個のレジスタを含むことを特徴とする請求項１記載の装置。
【請求項６】
前記レジスタは、前記アレイの第１および第２の極限値のアドレスを示す情報を格納するための第１および第２のポインタ・レジスタを含むことを特徴とする請求項５記載の装置。
【請求項７】
前記レジスタは、汎用のデータ・レジスタであることを特徴とする請求項５記載の装置。
【請求項８】
単一のフェッチ動作中に単一のデータ量としてエレメントのアレイから一対のデータ・エレメントを引き出す段階であって、前記一対のデータ・エレメントは偶数データ・エレメントおよび奇数データ・エレメントを含む、段階と、
前記一対のデータ・エレメントのうちの偶数エレメントを偶数極限値と実質的に比較する段階と、
前記一対のデータ・エレメントのうちの偶数エレメントが前記偶数極限値を超える場合には、前記一対のデータ・エレメントのうちの偶数エレメントを前記偶数極限値として格納し、かつ、ポインタ・レジスタ内に前記一対のデータ・エレメントのうちの偶数エレメントの前記アドレスを示すパラメータを格納する段階であって、前記ポインタ・レジスタ内に前記一対のデータ・エレメントのうちの偶数エレメントの前記アドレスを示すパラメータを格納する段階は、前記偶数データ・エレメントの前記極限値のためのアドレスを格納するように第１ポインタ・レジスタを維持する段階を含む、段階と、
前記一対のデータ・エレメントのうちの偶数エレメントを前記偶数極限値と比較する段階と同時に、前記一対のデータ・エレメントのうちの奇数エレメントを奇数極限値と比較する段階と、
前記一対のデータ・エレメントのうちの奇数エレメントが前記奇数極限値を超える場合には、前記一対のデータ・エレメントのうちの奇数エレメントを前記奇数極限値として格納する段階、および、前記奇数データ・エレメントの前記極限値のためのアドレスを格納するように第２ポインタ・レジスタを維持する段階をさらに含む、段階と、
前記アレイの前記データ・エレメントが全て処理されるまで、前記アレイのデータ・エレメントの残りの対を実質的にフェッチし、かつ、比較する段階と、
パイプライン内のステージが多数であるため、前記データ・エレメントが全て処理された後、前記ポインタ・レジスタの少なくとも１つを調整する段階と、
から構成されることを特徴とする方法。
【請求項９】
前記偶数エレメントのための最小値を格納するように第１アキュミュレータを維持し、かつ、前記奇数エレメントのための最小値を格納するように第２アキュミュレータを維持する段階をさらに含むことを特徴とする請求項８記載の方法。
【請求項１０】
前記方法は、Ｎ／Ｍ個の機械語命令をプログラム可能なプロセッサへ出すことによって起動され、Ｎは前記アレイ中のエレメント数に等しく、Ｍは前記プロセッサが同時に比較することのできるデータ・エレメント数に等しく、Ｍ＝２であることを特徴とする請求項８記載の方法。
【発明の詳細な説明】
【０００１】
【従来の技術】
本発明は、コンピュータ用アレイ探索動作に関する。
【０００２】
デジタル信号プロセッサ（ＤＳＰ）のような多くの従来のプログラム可能なプロセッサは、データのアレイを操作するための多数の命令を含む豊富な命令セットをサポートする。これらの動作は、典型的には、計算集約的で、プロセッサ内の乗算−累積ユニット（ＭＡＣ）のような実行ユニットの数に依存して、かなりの演算時間を要求する。
【０００３】
【詳細な説明】
図１は、実行パイプライン４および制御ユニット６を有するプログラム可能なプロセッサ２を図示するブロック図である。以下詳細に説明されるように、プロセッサ２は、アレイ操作動作によって要求される計算時間を削減する。特に、プロセッサ２は、ＳＥＡＲＣＨ命令と称される機械語命令をサポートするが、それはパイプライン方式の処理環境で多くのアレイ数を探索する計算上の時間を削減する。
【０００４】
パイプライン４は、命令を処理するための多くのステージを具備する。各ステージは、他のステージと同時に処理し、各クロック・サイクルで結果をパイプライン４中の次のステージへ渡す。各命令の最終結果は、パイプラインの終端で連続して出現する。
【０００５】
制御装置６は、パイプライン４の多様なステージを通って命令とデータの流れを制御する。例えば、命令の処理中に、制御ユニット６は、命令を取り込んで解読し、対応する動作を行ない、メモリまたはローカル・レジスタにその結果を書き戻すようにパイプライン方式の多様なコンポーネントに命令する。
【０００６】
図２は、本発明に従って構成されたパイプライン４の一例を図示する。パイプライン４は、例えば、５つのステージ、すなわち、命令フェッチ（ＩＦ），デコード（ＤＥＣ），アドレス計算（ＡＣ），実行（ＥＸ）および書き戻し（ライトバック）（ＷＢ）を具備する。命令は、フェッチ・ユニット２１によるＩＦステージ中に、メモリまたは命令キャッシュから取り込まれ、ＤＥＣステージ中にアドレス・レジスタ２２内で解読される。次のクロック・サイクルで、その結果はＡＣステージに渡し、そこで、データ・アドレス生成器２３は、その動作を実行するために必要なすべてのメモリ・アドレスを計算する。
【０００７】
ＥＸステージ中に、実行ユニット２５Ａないし２５Ｍは、例えば、数の加算または乗算のような特定の動作を並行して実行する。実行ユニット２５は、例えば、１つ以上の演算論理ユニット（ＡＬＵ）、浮動小数点ユニット（ＦＰＵ）およびバレル・シフタを含む動作を行なうための特別のハードウェアを含んでもよい。データ・アドレス生成器２３によって生成されたアドレス、データ・メモリ１８から引き出されたデータ、あるいはデータ・レジスタ２４から引き出されたデータのような多種多様のデータが、実行ユニット２５に適用される。最終段階（ＷＢ）において、その結果は、データ・メモリに、またはデータ・レジスタ２４に書き戻される。
【０００８】
プロセッサ２によってサポートされたＳＥＡＲＣＨ命令は、Ｍがパイプライン４の実行ユニット２５によって並列に処理されるデータ・エレメント数である場合、Ｎ／Ｍ探索命令を出すことにより、ソフトウェア・アプリケーションがＮ個のデータ・エレメントのアレイを探索することが可能となる。しかしながら、単一の実行ユニットは、２つまたはそれ以上の動作を並列に実行することができることに注意せよ。例えば、実行ユニットは、２つの１６ビットの数を同時に比較することができる３２ビットのＡＬＵを含めることができる。
【０００９】
一般に、ＳＥＡＲＣＨ命令のシーケンスによって、そのプロセッサは、各セットに対して最大または最小のような「極限値(extreme value)」を識別するためにＭセットのエレメントを並列に処理することができる。探索命令の実行中に、プロセッサ２は、Ｍセットの各エレメントの極限値の場所に対するリファレンスを格納する。Ｎ／Ｍ命令の完了に際して、以下詳細に記述されるように、ソフトウェア・アプリケーションは、各セットに対する極限値へのリファレンスを解析し、アレイに対する極限値をすばやく識別する。例えば、その命令によって、ソフトウェア・アプリケーションが最大または最小値の最初の発生または最後の発生のいずれかを速く識別することを可能にする。更に、以下詳細に説明されるように、プロセッサ２は、Ｍ個の実行ユニット２５を介してパイプライン方式のプロセッサにおいてベクトル化にふさわしい方法で動作を実行する。
【００１０】
上述されたように、ソフトウェア・アプリケーションは、プロセッサ２へＮ／Ｍ個のＳＥＡＲＣＨ機械語命令を出すことによりデータのアレイを探索する。図３は、単一のＳＥＡＲＣＨ機械語命令を受け取るときにプロセッサ２のための動作モード２０の一例を図示するフローチャートである。プロセス２０は、エレメントのアレイ内で最小値の最後の発生を識別することに関して記述されるが、しかしながら、プロセス２０は、最小値の最初の発生、最大値の最初の発生または最大値の最後の発生を識別するような他の機能を実行するために容易に修正することができる。
【００１１】
典型的な目的のために、プロセス２０は、Ｍが２に等しいと仮定して記述され、つまり、プロセッサ２は、各セットがＮ／２エレメントを有する２セットのエレメントを同時に処理する。しかしながら、そのプロセスはそのように制限されるものではなく、同時に２セットを越えるエレメントを処理するために容易に拡張可能である。一般に、プロセス２０は、単一のデータ量として対のエレメントを取り込むことにより、かつパイプライン４によってエレメント対を並列に処理することにより、探索プロセスのベクトル化を促進し、それによって、アレイ内の最小値を識別するのに必要なクロック・サイクルの総数を削減する。他のアーキテクチャに適用可能であるが、プロセス２０は、ＥＸステージで複数の実行ユニットを有するパイプライン方式のプロセッサ２によく適している。エレメントの各セットについては、プロセス２０は、対応するセット内における現在の極限値の位置を格納する２つのポインタ・レジスタ、ＰＥｖｅｎおよびＰＯｄｄを保持する。さらに、プロセス２０は、２つのアキュミュレータＡ０およびＡ１を有し、セットに対する現在の極限値を保持する。
しかしながら、ポインタ・レジスタおよびアキュミュレータは、プロセス３０から逸脱せずに、汎用のデータ・レジスタとして容易に実行されてもよい。
【００１２】
図３を参照して、各ＳＥＡＲＣＨ命令に応答して、プロセッサ２は、単一のデータ量として１クロック・サイクルで１対のエレメントを取り込む（２１）。例えば、プロセッサ２は、１つの３２ビットの量として２つの隣接した１６ビットの値を取り込む。次に、プロセッサ２は、その対の偶数のエレメントを偶数のエレメントのために現在の最小値と比較し（２２）、その対の奇数のエレメントを奇数のエレメントのために現在の最小値と比較する（２４）。
【００１３】
偶数のエレメントに対して新しい最小値が検出されると、プロセッサ２は新しい最小値を保持するためにアキュミュレータＡ０を更新し、アレイ内の対応するデータ量にポインタを保持するためにポインタ・レジスタＰＥｖｅｎを更新する（２３）。同様に、奇数のエレメントに対して新しい最小値が検出されたとき、プロセッサ２はアキュミュレータＡ１およびポインタ・レジスタＰＯｄｄを更新する（２５）。この実例において、そのプロセスはこのように制限されるものではないが、ポインタ・レジスタＰＥｖｅｎおよびＰＯｄｄは、それぞれ、個々のエレメントではなくデータ量を指す。アレイ内のエレメントがすべて処理されるまで、プロセッサ２はこのプロセスを繰り返す（２６）。プロセッサ２はパイプライン方式なので、アレイが処理されるまで、エレメント対が取り込まれる。
【００１４】
下記は機械語命令を起動するための典型的なシンタックスを示す。
【００１５】
(PＯdd, PＥven)=SEARCH RDataLE, RData=[Pfetch_addr++]
新しく取り込まれたデータ・エレメントの各対を格納するために、データ・レジスタＲＤａｔａは、ＲＤａｔａの最下位ワードが奇数のエレメントを保持し、かつＲＤａｔａの最上位ワードが偶数のエレメントを保持して、スクラッチ・レジスタとして使用される。２つのアキュミュレータ、Ａ０およびＡ１は、その結果の実際の値を格納するために暗黙的に使用される。ＳＥＡＲＣＨ命令が出され、アレイ内のＮ／２データ数量に対して繰り返すべきポインタとして使用されるとき、追加レジスタ、Ｐｆｅｔｃｈ_ａｄｄｒが追加される。上記の実例で「未満または等しい」（ＬＥ）のように定義された条件は、どの比較が実行されるか、また、アキュミュレータＡ０およびＡ１と同様にポインタ・レジスタＰＥｖｅｎおよびＰＯｄｄがいつ更新されるかを制御する。「ＬＥ」は、例えば、プロセッサ２が最小値の最後の発生を識別することを指示する。
【００１６】
代表的なアプリケーションでは、プログラマは、多くの場合ループ構成内から、Ｎ／Ｍ探索命令を出すソフトウェア・アプリケーションまたはサブルーチンを開発する。プログラマは、アセンブリ言語または高級レベルのソフトウェア言語でソフトウェア・アプリケーションを書く。コンパイラは、高級レベルのソフトウェア・アプリケーションを処理するために一般的に呼び出され、データのアレイの探索のためのＳＥＡＲＣＨ機械語命令を含むプロセッサ２用の適切な機械語命令を生成する。
【００１７】
図４は、上述した機械語命令の一例を起動するための実例としてのソフトウェア・ルーチン３０のフローチャートである。最初に、ソフトウェア・ルーチン３０は、Ａ０およびＡ１を初期化し、ＰＥｖｅｎおよびＰＯｄｄをアレイ内の第１のデータ量へ仕向けることを含み、レジスタを初期化する（３１）。ある実施例では、ソフトウェア・ルーチン３０は、ループ・カウント・レジスタを生起すべきＳＥＡＲＣＨ命令の数（Ｎ／Ｍ）に初期化する。次に、ルーチン３０は、ＳＥＡＲＣＨ機械語命令をＮ／Ｍ回送出する。これは、多くの方法、たとえば、プロセッサ２によってサポートされたハードウェア・ループ構成を起動することによって達成され得る。しかしながら、しばしば、コンパイラは、同一のＳＥＡＲＣＨ命令のシーケンスへソフトウェア・ループを展開してもよい（３２）。
【００１８】
Ｎ／Ｍ個の探索命令を出した後に、Ａ０とＡ１はそれぞれ最小の偶数値の最終発生および最小の奇数値の最終発生を保持する。更に、ＰＥｖｅｎとＰＯｄｄは、最小の偶数値の最終発生および最小の奇数値の最終発生を保持する２つのデータ量の場所を格納する。
【００１９】
次に、全アレイに対して最小値の最終発生を識別するために、ルーチン３０は、まずによってＰＯｄｄを単一のエレメントだけ増加させ、その結果ＰＯｄｄは最小の奇数のエレメントを直接示す（３３）。ルーチン３０は、アキュミュレータが同じ値を含むかどうか、つまり奇数のエレメントの最小が偶数のエレメントの最小に等しいかどうかを決めるためにアキュミュレータＡ０およびＡ１を比較する（３４）。もしそうならば、ルーチン３０は、ＰＯｄｄがＰＥｖｅｎ未満であるかどうか決めるためにポインタを比較する。したがって、ＰＯｄｄおよびＰＥｖｅｎは最小偶数値がアレイ中に以前生じたかである（３５）。その比較に基づいて、ルーチンは、ＰＯｄｄをＰＥｖｅｎにコピーするべきかどうか決める（３７）。
【００２０】
アキュミュレータＡ０およびＡ１が同じでないとき、ルーチンはどれが最小値を保持するかどうかを決めるために、Ａ０をＡ１と比較する（３６）。そのときＡ１がＡ０未満であるならば、ルーチン３０はＰＥｖｅｎをＰＯｄｄに等しく設定し、それによってそのポインタをＰＯｄｄからＰＥｖｅｎに最小値へコピーする（３７）。
【００２１】
この時点で、ＰＥｖｅｎは、全アレイに対し最小値の最終発生を指す。次に、ルーチン３０は、プロセッサ２のパイプライン方式の構成に導びかれたエラーに対する補正を行うためにＰＥｖｅｎを調整する（３８）。例えば、上述した比較は、ポインタ・レジスタＰｆｅｔｃｈ_ａｄｄｒの増加がＡＣステージ中に発生する間、パイプライン４のＥＸステージ中で典型的に実行され、それによって、ＰＯｄｄとＰＥｖｅｎが既知数によって不正確になる。ＰＥｖｅｎを調整した後に、ルーチン３０は、ポインタとして、アレイ内の最小値の最終発生にＰＥｖｅｎを返す（３９）。
【００２２】
図５は、プロセッサ２がＭ個の実行ユニットを含み、プロセッサ２がアレイのＭ個のエレメントを並列に処理することができる場合に一般化されるように、単一のＳＥＡＲＣＨ命令の動作を図示する。ＳＥＡＲＣＨ命令によって、プロセッサ２は単一のフェッチ・サイクル中にＭ個のエレメントを取り込む（５１）。更に、この例では、プロセッサ２は、Ｍセットのエレメントの各々に対して対応する極限値のアドレス（場所）を格納するためにＭ個のポインタ・レジスタを維持する。Ｍ個のエレメントを取り込んだ後に、Ｍ個のアキュムレータに格納されるとき、プロセッサ２は同時にＭ個のエレメントをそれぞれのエレメント・セットに対する現在の極限値と比較する（５２）。その比較に基づいて、プロセッサ２は、Ｍ個のアキュムレータおよびＭ個のポインタ・レジスタを更新する（５３）。
【００２３】
図６は、ソフトウェア・アプリケーションがＮ／Ｍ個のＳＥＡＲＣＨ命令を出し、命令の完了に際して、全アレイに対する極限値を決定する一般的なケースを示す。最初に、ソフトウェア・アプリケーションは、ループ・カウンタ、Ｍ個のエレメント・セットに対する現在の極限値を格納するために使用されるＭ個のアキュムレータ、および極限値の場所を格納するために使用されるＭ個のポインタを初期化する（６１）。次に、ソフトウェア・アプリケーションは、Ｎ／Ｍ個のＳＥＡＲＣＨ命令を出す（６２）。命令の完了の後、ソフトウェア・アプリケーションは、それぞれの極限値を正確に参照するために、極限値を保持するデータ数量の代わりに、Ｍ個のポインタ・レジスタを調整する（６３）。ポインタ・レジスタを調整した後に、ソフトウェア・アプリケーションは、Ｍ個のエレメント・セットに対するＭ個の極限値を比較し、全アレイに対する極限値、つまり最大値、最小値を識別する（６４）。その後、ソフトウェア・アプリケーションは、１を超えるエレメント・セットがアレイの極限値に等しい極限値を有しているかどうかを決定するためにポインタ・レジスタを使用し、もしそうであるなら、所望の探索機能に依存して、どの極限値が最初に、または最後に生じたかを決定する（６５）。
【００２４】
本発明の多様な実施例が記述された。例えば、単一の機械語命令が説明され、それはパイプライン方式のプロセッサ内で探索プロセスのベクトル化を促進する方法でデータのアレイを探索する。本プロセッサは、一般目的の計算機システム、デジタル処理システム、ラップトップ・コンピュータ、個人用デジタル情報処理端末（ＰＤＡ）および携帯電話を含む多種多様のシステムで実行され得る。例えば、携帯電話は、電話機の３６０度の周囲で利用可能なサービスのための信号強度を表わす多くの値をしばしば保持する。この意味で、上記議論したプロセスは、利用可能なサービスを調べ、かつ速くその最良のサービスを選択するために携帯電話の初期化で容易に使用することができる。このようなシステムでは、プロセッサは、オペレーティング・システムおよび他のソフトウェア・アプリケーションを格納するフラッシュ（ＦＬＡＳＨ）メモリ・デバイスまたはスタティックＳＲＡＭ（ＳＲＡＭ）のようなメモリ・デバイスに結合される。上記および他の実施例は、添付の請求項の範囲内にある。
【図面の簡単な説明】
【図１】  本発明によるパイプライン方式のプログラム可能なプロセッサの例を図示するブロック図である。
【図２】  プログラム可能なプロセッサのための実行パイプラインの一例を図示するブロック図である。
【図３】  本発明によるアレイ操作の機械語命令を実行するためのフローチャートである。
【図４】  機械語命令を起動するためのルーチン例のフローチャートである。
【図５】  探索命令を示す。
【図６】  Ｎ／Ｍ探索命令を示す。
【図１】
0004380987.tif 000002
【図２】
0004380987.tif 000003
【図３】
0004380987.tif 000004
【図４】
0004380987.tif 000005
【図５】
0004380987.tif 000006
【図６】
0004380987.tif 000007