(57)【要約】  本発明は、複数のインデックスベクトルを記憶するための第１のメモリ手段と処理手段とを備える少なくとも一つの機能的なベクトルプロセッサユニットを有するベクトルプロセッサアーキテクチャを備えるマイクロプロセッサデバイスであって、上記機能的なベクトルプロセッサユニットは、処理命令と処理されるべき少なくとも一つの入力ベクトルとを受け取るように構成されており、上記第１のメモリ手段は、上記処理命令に従って上記複数のインデックスベクトルのうちの一つを上記処理手段に対して与えるように構成されており、上記処理手段は、与えられた一つのインデックスベクトルに従って再配置される少なくとも一つの入力ベクトルの要素を有する少なくとも一つの出力ベクトルを上記命令に応じて生成するように構成されている、マイクロプロセッサデバイスに関する。上記機能的なベクトルプロセッサユニットは、処理された上記インデックスベクトルに従って上記少なくとも一つの出力ベクトルを生成する前にパラメータを受け取るとともに上記パラメータに応じて上記一つのインデックスベクトルの要素を処理するように構成されている前処理手段を更に備えている。本発明は、さらに、そのような機能的なベクトルプロセッサユニットによりベクトルを処理する方法に関する。
2008513903.tif 000002
【特許請求の範囲】
【請求項１】
複数のインデックスベクトルを記憶するための第１のメモリ手段と処理手段とを備える少なくとも一つの機能的なベクトルプロセッサユニットを有するベクトルプロセッサアーキテクチャを備えるマイクロプロセッサデバイスであって、前記機能的なベクトルプロセッサユニットは、処理命令と処理されるべき少なくとも一つの入力ベクトルとを受け取るように構成されており、前記第１のメモリ手段は、前記処理命令に従って前記複数のインデックスベクトルのうちの一つを前記処理手段に対して与えるように構成されており、前記処理手段は、与えられた一つのインデックスベクトルに従って再配置される少なくとも一つの入力ベクトルの要素を有する少なくとも一つの出力ベクトルを前記命令に応じて生成するように構成されており、そのために、前記機能的なベクトルプロセッサユニットは、処理された前記インデックスベクトルに従って前記少なくとも一つの出力ベクトルを生成する前にパラメータを受け取るとともに前記パラメータに応じて前記一つのインデックスベクトルの要素を処理するように構成されている前処理手段を更に備えていることを特徴とするマイクロプロセッサデバイス。
【請求項２】
前記機能的なベクトルプロセッサユニットは、複数のパラメータを記憶するための第２のメモリ手段を更に備え、前記第２のメモリ手段は、前記処理命令に従って前記複数のパラメータのうちの一つを前記前処理手段に対して与えるように構成されていることを特徴とする請求項１に記載のマイクロプロセッサデバイス。
【請求項３】
前記前処理手段は、符号を有するスカラー値をパラメータとして受け取るとともに、前記スカラー値及び前記符号に応じて前記インデックスベクトルの要素を処理するように構成されていることを特徴とする請求項１に記載のマイクロプロセッサデバイス。
【請求項４】
前記前処理手段は、前記パラメータ及び前記一つのインデックスベクトルの各要素のモジュロ加算を実行するように構成されていることを特徴とする請求項１に記載のマイクロプロセッサデバイス。
【請求項５】
前記前処理手段は、前記パラメータ及び前記一つのインデックスベクトルの各要素の飽和加算を実行するように構成されていることを特徴とする請求項１に記載のマイクロプロセッサデバイス。
【請求項６】
前記前処理手段は、前記パラメータ及び前記一つのインデックスベクトルの各要素に関してＸＯＲ演算を実行するように構成されていることを特徴とする請求項１に記載のマイクロプロセッサデバイス。
【請求項７】
処理命令と処理されるべき少なくとも一つの入力ベクトルとを受け取るとともに、複数のインデックスベクトルを第１のメモリ手段に記憶するステップと、
前記処理命令に従って前記複数のインデックスベクトルのうちの一つを選択するステップと、
前記命令に応じて、与えられた一つのインデックスベクトルに従って再配置される少なくとも一つの入力ベクトルの要素を有する少なくとも一つの出力ベクトルを生成するステップと、
を含む、ベクトルを処理するための方法であって、
前記少なくとも一つの出力ベクトルを生成する前記ステップの前に、
パラメータを受け取るステップと、
前記パラメータに応じて前記一つのインデックスベクトルの要素を処理するステップと、
を更に含むことを特徴とする方法。
【請求項８】
前記一つのインデックスベクトルの要素を処理する前記ステップは、前記パラメータ及び前記インデックスベクトルの各要素のモジュロ加算を含んでいることを特徴とする請求項７に記載の方法。
【請求項９】
前記一つのインデックスベクトルの要素を処理する前記ステップは、前記パラメータ及び前記インデックスベクトルの各要素の飽和加算を含んでいることを特徴とする請求項７に記載の方法。
【請求項１０】
前記一つのインデックスベクトルの要素を処理する前記ステップは、前記パラメータ及び前記インデックスベクトルの各要素に関するＸＯＲ演算を含んでいることを特徴とする請求項７に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のインデックスベクトルを記憶するためのメモリ手段と処理手段とを備える少なくとも一つの機能的なベクトルプロセッサユニットを有するベクトルプロセッサアーキテクチャを備えるマイクロプロセッサデバイスであって、機能的なベクトルプロセッサユニットは、処理命令と処理されるべき少なくとも一つの入力ベクトルとを受け取るように構成されており、メモリ手段は、処理命令に従って複数のインデックスベクトルのうちの一つを処理手段に対して与えるように構成されており、処理手段は、与えられた一つのインデックスベクトルに従って再配置される少なくとも一つの入力ベクトルの要素を有する少なくとも一つの出力ベクトルを命令に応じて生成するように構成されているマイクロプロセッサデバイスに関する。対応して、本発明は、ベクトルを処理するための方法であって、処理命令と処理されるべき少なくとも一つの入力ベクトルとを受け取るとともに、複数のインデックスベクトルを第１のメモリ手段に記憶するステップと、上記処理命令に従って上記複数のインデックスベクトルのうちの一つを選択するステップと、上記命令に応じて、与えられた一つのインデックスベクトルに従って再配置される少なくとも一つの入力ベクトルの要素を有する少なくとも一つの出力ベクトルを生成するステップと、を含む方法に関する。
【背景技術】
【０００２】
以下においてベクトルプロセッサと称されるそのようなマイクロプロセッサ及びそのような方法は、数十年前に確立されている。ベクトルプロセッサは、スカラープロセッサアーキテクチャのみを使用する（上記ベクトル又はパラレルアーキテクチャとは対照的）マイクロプロセッサにより与えられるようなスカラー命令の代わりに又は当該スカラー命令に加えて、ベクトル命令の組を与える。各命令は、典型的には、複数のデータワード又はベクトル要素、その長さ（ベクトル要素の数）、適用される演算を含むオペランドベクトルを指定する。ベクトル処理の利点は、一つのデータワードに関して連続的に演算するのではなく、ベクトルを全体的に同時に演算することができ−上記ベクトル命令のうちの一つの範囲内で−、それにより、計算速度が高められるという点である。例えば、一つのメモリアクセスにより、ベクトルプロセッサがベクトル全体を外部メモリから連続的にフェッチした後、ベクトルは、連続的に演算されて、最終的に他の一つのアクセスにより元の外部メモリに連続的に記憶される。従って、ベクトル処理は単一命令複数データ（ＳＩＭＤ）パラレル処理技術である。計算速度は、プロセッサがプロセッサの他の機能ユニットに近いその集積ベクトルレジスタに中間結果を保持できるようにするベクトルレジスタアーキテクチャを使用することにより更に高めることもでき、それにより、一時的な記憶要件、命令間の待ち時間等を低減することができる。
【０００３】
多くの異なるタイプのベクトル命令が存在し、それらのいくつかは、例えば一つのベクトルのシフト若しくはシャッフル又は二つ以上のベクトル要素等の加算、減算、乗算若しくは除算等の一つ以上のベクトルに関する演算を指定するベクトル−ベクトル命令；ベクトル及びスカラー積等のスカラーに関する演算を指定するベクトル−スカラー命令；一つ以上のベクトルに関する演算を指定し且つ外積等のスカラーを与えるベクトル−スカラー命令（ベクトル−換算）；データを外部メモリと集積ベクトルレジスタとの間で転送するためのロード及び記憶演算を指定するベクトル−メモリ命令として分類することができる。例えば、ベクトルから配列を生成する配列演算を指定する命令等、タスクに応じて、より高度な命令を実施することができる。また、ベクトルに関する論理演算を指定する命令も可能である。最近の開発では、いくつかのベクトル命令が一つの命令ワード中に圧縮されてパラレルに実行され、それにより、先と同様、処理速度が高められる。この処理タイプは、超長命令語（ＶＬＩＷ）パラレル処理技術と称されている。
【０００４】
これらの命令の総ては、対応する機能ユニット（ＦＵ）により実行される。例えば、ベクトルメモリユニット（ＶＭＵ）と称されるベクトル−メモリ命令に関与するＦＵは、集積ベクトルレジスタと、ベクトル−メモリ命令を受けて実施する処理手段とを含んでいる。後述する命令に従って、これらの処理手段は、外部メモリから要求されたベクトル要素をそのベクトルレジスタ内へロードし、又は、ベクトル要素を外部メモリ内に記憶する。通常、ＶＭＵは、プロセッサの外部の「外界」に接続される唯一のＦＵである。ＶＬＩＷ能力があるベクトルプロセッサ内には、超長命令語を受け取るとともに命令を順序付けて他の機能ユニットに対して分配するための更なる命令分配ユニット（ＩＤＵ）が組み込まれている。
【０００５】
外部メモリ内のベクトル要素をアドレス指定する異なるアクセスパターンに従ってプロセッサがメモリにアクセスできるようにするいくつかのベクトル−メモリ命令がある。ベクトル要素が総てメモリ内で隣接している場合、即ち、要求されるべきベクトルを構成するデータワードが隣り合うメモリアドレスに位置されている場合、メモリバンクの組からのベクトルのフェッチは容易なタスクである。このアクセスは、通常、ユニットストライドアクセスと称されている。ある場合には、フェッチされるべきデータワードが明確な一定の変位量分だけメモリ内において離間される。これはストライドアクセス又はストライドｎアクセスと称されている。この場合、ｎは、二つの隣り合うベクトル要素間のメモリ−アドレスの距離を示している。この場合において、命令は、ＶＭＵが一つのメモリアクセスで総てのデータをフェッチできるようにするためにストライドｎを更に指定する。
【０００６】
しかしながら、時として、ベクトルの要素としてメモリからロードされるべき及び／又は元のメモリに記憶されるべきデータワードは、一定の変位量分だけ離間されず、むしろ、メモリ内の（予め計算された）任意の位置に及び／又はメモリ内において任意の順序で配置される。また、外部メモリの例えばＰ個のメモリバンクの順序は、一般に、ベクトル要素の取り出された順序／配信された順序と一致しない。プロセッサが一つのベクトル−メモリ命令中の任意に分布された要素データにアクセスできるようにするため、ベクトル要素が記憶される総ての記憶ロケーションを示すアドレスがＶＭＵに対して与えられなければならない。これは、アドレス要素を含むアドレスベクトルを与える「ギャザー命令」と称されるベクトル−メモリ命令によって達成される。従って、いわゆる「スキャッター（ｓｃａｔｔｅｒ）命令」、即ち、他のベクトル−メモリ命令は、与えられたアドレスベクトルに従って一つのメモリアクセスでプロセッサがベクトル要素をメモリに記憶できるようにするために与えられる。
【０００７】
データワードがメモリ内の任意の位置に配置される場合、以下においてシャッフルユニット（ＳＦＵ）とも称される冒頭で説明した機能ユニットは、メモリから得られるデータ要素を再配置する必要がある。シャッフルユニットのプログラミングは、「シャッフルパターン」を含む上記インデックスベクトルをシャッフルユニットに対して与えることを伴う。シャッフルパターンにおける各要素はソース要素の位置を指定する。図１には、ギャザー命令の例示が与えられている。図１においては、第１のレジスタ１１０がメモリの開始アドレス（１００）を与える。第２のレジスタ１２０は、ロードされるべきベクトルの長さ（４）を与える。シャッフルパターン又はインデックスベクトル１３０は、例えば、位置１における値４を指定する。そのため、この場合には開始アドレス（ａｄｄｒｅｓｓ）後のメモリ１４０内の第４の要素である入力（ベクトル）の要素４の内容（ｃｏｎｔｅｎｔ）は、プログラム等によって要求されるベクトルである出力ベクトル１５０の位置１へコピーされなければならない。
【０００８】
他のシャッフル方式では、上記例の場合のようにソース位置を指定する代わりに、ベクトル内の一つの要素の送信先位置が与えられる。しかしながら、これはあまり一般的ではない。
【０００９】
スキャッター演算又はギャザー演算において、適切なシャッフルパターン、より正確にはＳＦＵ内に入力される処理命令は、アドレスベクトル中のアドレス要素の最下位ビットによって決定される。他の用途、例えば、ＦＦＴ入力ブロックの（サイズＰの）セグメントをビット反転アドレス順序で読み取らせるためのソフトウェアコードにおいては、シャッフルパターンがコードによって直接に決定される。上記ベクトルプロセッサの場合、いくつかのシャッフルパターンは、シャッフル処理手段の近くで専用のシャッフルメモリ手段内に記憶される。ＳＦＵの既知のハードウェア実現の一例が図２に概略的に与えられている。ＳＦＵ２００は、Ｐ個のマルチプレクサ２１２，２１４，．．．．，２１６からなる配列２１０を備えており、各マルチプレクサは、処理されるべき入力ベクトル２４０のためのＰ個の入力と、割り当てられたインデックスベクトルの要素又はシャッフルパターンのための一つの入力とを有している。シャッフルパターンは、要求された出力ベクトル２５０を得るために例えば入力ベクトル要素の再配置のためのプログラムコード又はアドレスベクトルから引き出される入力命令２２２に従ってシャッフルメモリ２２０から選択される。代替的な実現は、スイッチマトリクス等に基づくことができる。
【００１０】
アドレスベクトル要素がＳＦＵによって再配置された後、データワードは、ＶＭＵによってフェッチされ、その後、要求されたアドレスの位置に適合するために再び再配置される。この場合も先と同様に、適切なシャッフルパターンは、アドレス要素の最下位ビットから得ることができる。
【００１１】
このようにして、適切な順序でデータを得るために、予め計算されたシャッフルパターンに係るシャッフルを適用することができる。一般に、メモリバンクへのアクセスパターンを変更なく再使用できる場合、スキャッター又はギャザーメモリアクセス又はコンピュータコード等の所定の用途においては数少ないシャッフルパターンで十分である。しかしながら、そのような制限が取り除かれると、シャッフルパターンの数は大幅に増大し、あるいは、シャッフルパターンに先行して回転演算等が行われなければならない。前者では、多くの更なるメモリトラフィックが引き起こされる可能性があり、後者では、更なる演算サイクル、従って、計算速度にコストがかかる。
【非特許文献１】クレイグ・ハンセン（Ｃｒａｉｇ  Ｈａｎｓｅｎ）による「マイクロ・ユニティのメディア・プロセッサ・アーキテクチャ（Ｍｉｃｒｏ  Ｕｎｉｔｙ’ｓ  Ｍｅｄｉａ  Ｐｒｏｃｅｓｓｏｒ  Ａｒｃｈｉｔｅｃｔｕｒｅ）」（ＩＥＥＥマイクロ（ＩＥＥＥ  Ｍｉｃｒｏ），１９９６年８月、第３６頁乃至第３８頁）
【非特許文献２】Ｃ．Ｈ．（Ｋｅｅｓ）ｖａｎ  Ｂｅｒｋｅｌ，Ｐａｔｒｉｃｋ  Ｐ．Ｅ．Ｍｅｕｗｉｓｓｅｎ，Ｎｕｒ  Ｅｎｇｉｎ，ａｎｄ  Ｓ．Ｂａｌａｋｒｉｓｈｎａｎ，「ＣＶＰ：３Ｇモバイル・ベースバンド・プロセッシングのためのプログラマブル・コ・ベクトル・プロセッサ（Ａ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｃｏ  Ｖｅｃｔｏｒ  Ｐｒｏｃｅｓｓｏｒ  ｆｏｒ  ３Ｇ  Ｍｏｂｉｌｅ  Ｂａｓｅｂａｎｄ  Ｐｒｏｃｅｓｓｉｎｇ）」、世界無線会議（Ｗｏｒｌｄ  Ｗｉｒｅｌｅｓｓ  Ｃｏｎｇｒｅｓｓ）２００３の議事録において、及び、ＯｎＤＳＰ（ドレスデンの後、システモニックの前（ＰＳ−Ｄｒｅｓｄｅｎ，ｆｏｒｍｅｒｌｙ  Ｓｙｓｔｅｍｏｎｉｃ））において、及び、ＥＶＰ（ＰＳ’ＤＳＰイノベーション・センター（Ｉｎｎｏｖａｔｉｏｎ  Ｃｅｎｔｒｅ））において
【発明の開示】
【発明が解決しようとする課題】
【００１２】
従って、本発明の目的は、計算速度の低下を許容することなくシャッフル構成パターンの数を最小限に抑制するために上記マイクロプロセッサを進歩させることである。
【課題を解決するための手段】
【００１３】
本発明の第一の態様によれば、この目的は、冒頭の段落において述べたようなベクトルプロセッサによって達成され、そのために、上記機能的なベクトルプロセッサユニットは、処理された上記インデックスベクトルに従って上記少なくとも一つの出力ベクトルを生成する前にパラメータを受け取るとともに上記パラメータに応じて上記一つのインデックスベクトルの要素を処理するように構成されている前処理手段を更に備えている。
【００１４】
そのような前処理手段を備えるＦＵ、例えばＳＦＵを有するベクトルプロセッサは、所定のシャッフルパターンに従ってデータ（又はアドレス）ベクトル内の要素をシャッフルする機能と、好ましくはスカラー値である上記パラメータにより指示されるデータベクトルを更に処理する機能とを組み合わせる。従来の技術のハードウェア実施において、シャッフル演算及び更なるデータ処理（並び換え等）は、二つの連続するステップと、それぞれがそれ自体の制御を有する二つのスイッチネットワーク又は二つのネットワーク再使用とを必要とするが、本発明に係るシャッフル及び更なるデータ処理は、一つのステップで行うことができるとともに、制御を一つの制御ステップに組み合わせることができる。これは、実際にはインデックスベクトル自体が処理され、多くのアーキテクチャの場合のようにインデックスベクトル及びパラメータの両方が入力データベクトルの前に一つ以上のクロックサイクルに達するからであり、インデックスベクトルの処理を前もって実行できるからである。最後に、（前）処理されたインデックスベクトルに基づくデータベクトルのシャッフルは、一つのクロックサイクルで実行することができる。本発明に係るベクトルプロセッサは、特にスキャッター−ギャザーメモリアクセスと組み合わせて、アルゴリズムの大きなクラスを加速させるために使用することができ、それにより、更なるメモリトラフィックを低いレベルに維持することができる。
【００１５】
インデックスベクトルの（前）処理は、一般に、インデックスベクトル及びパラメータ又はスカラー値に関する任意の算術演算又は論理演算であってもよい。本発明の使用により、原理上、ビット操作演算さえも一つのステップで行うことができる。これに関して、ビット操作は、「マイクロ・ユニティのメディア・プロセッサ・アーキテクチャ（Ｍｉｃｒｏ  Ｕｎｉｔｙ’ｓ  Ｍｅｄｉａ  Ｐｒｏｃｅｓｓｏｒ  Ａｒｃｈｉｔｅｃｔｕｒｅ）」（ＩＥＥＥマイクロ（ＩＥＥＥ  Ｍｉｃｒｏ），１９９６年８月、第３６頁乃至第３８頁）（非特許文献１）においてクレイグ・ハンセン（Ｃｒａｉｇ  Ｈａｎｓｅｎ）によりブロードバンドメディアプロセッサに関連して記載されるような演算を示す。これらの一般化された切り換え命令は、ベクトル要素の配置を様々な態様で変更する。それにより、多くの一般に必要とされる再配置が一つの命令で行われるとともに、一連の三つの命令により再配置を適宜に得ることさえできる。グループシャッフル演算、グループスウィズル（ｇｒｏｕｐ−ｓｗｉｚｚｌｅ）演算、グループ抽出演算、グループ圧縮演算、グループデポジット演算、グループ・マージ・デポジット演算、グループ引き出し演算、グループシフト演算、グループ回転演算は、そのような単一命令演算のいくつかの例である。いくつかのパラメータは、再配置の「程度」を正確に指定する特定の命令の即値（即時）フィールドからデコードされる。例えばグループシャッフル命令の場合には、三つの命令パラメータが、一般に、ベクトルがシャッフルされるサイズ（ビットサイズ）、ベクトルのサイズ、シャッフルの程度を指定する。他の命令では、特定の数のパラメータが減少させられてもよい。
【００１６】
本発明の上記第一の態様の更なる展開を構成する第二の態様によれば、上記機能的なベクトルプロセッサユニットは、複数のパラメータを記憶するための第２のメモリ手段を更に備え、上記第２のメモリ手段は、上記処理命令に従って上記複数のパラメータのうちの一つを上記前処理手段に対して与えるように構成されている。これらの第２のメモリ手段は、オフセットメモリとも称される。
【００１７】
これは、パラメータがコンパイル時定数ではないスカラー値である場合に有益となり得る。ベクトルユニットと並行して動作するスカラー処理ユニットは、これらの「オフセット」を計算することができるとともに、それを指定されたオフセットメモリ内に記憶することができる。
【００１８】
本発明の上記第一又は第二の態様の更なる展開を構成する第三の態様によれば、上記前処理手段は、符号を有するスカラー値をパラメータとして受け取るとともに、上記スカラー値及び上記符号に応じて上記インデックスベクトルの要素を処理するように構成されている。
【００１９】
これにより、結果として、前処理機能の数を増加させることなく多種多様なインデックスベクトルを得ることができる。
【００２０】
本発明の上記第一乃至第三の態様のいずれかの更なる展開を構成する第四の態様によれば、上記前処理手段は、上記パラメータ及び上記一つのインデックスベクトルの各要素のモジュロ加算を実行するように構成されている。
【００２１】
この態様に係る一つのインデックスベクトルの処理は、一定値モジュロ（好ましくは、ベクトルの長さ）を各要素に加算することを含み、その結果、データベクトルに関する複合的なシャッフル及び回転演算が得られる。これらの場合には、以下、パラメータ又はスカラー値を回転オフセット（Ｌ）とも称する。この実施は、典型的な用途で使用されるシャッフルパターン同士が関連付けられ且つ多くの場合に前のシャッフルパターンの回転となることを考慮に入れる。尚、多くの用途においては、回転オフセットも連続して複数回再使用される。従って、特に回転機能をＳＦＵに組み入れることにより、更なるメモリトラフィックを低いレベルに維持することができる。これらの第２のメモリ手段は、回転演算の場合には、回転オフセットメモリと称される。
【００２２】
例えば、第４の態様に係るモジュロ加算と第３の態様に係る符号付きスカラー値との組み合わせにおいては、マイナス符号のＬが右回転方向を示すことができ、プラス符号のＬが左回転方向を示すことができるとともに、Ｌ＝０が入力ベクトルの０回転を示す（回転オフセットメモリが存在する場合には、回転オフセットメモリをリロードすることなく）。入力ベクトルの回転は、シャッフルの特定のケースである。従って、多くの＋Ｌ個の場所による左回転は、処理された出力ベクトルにおける同じ位置に各入力ベクトル要素をマッピングするシャッフルパターン［０，１，２，．．．．．，Ｐ］を前処理することにより得られるシャッフルパターン［Ｌ，Ｌ＋１，Ｌ＋２，．．．，Ｐ−１，０，１，．．．．Ｌ−１］によって指定することができる（Ｌ＜Ｐ）。より正確には、前処理されたシャッフルパターンを［（０＋Ｌ）ｍｏｄｕｌｏＰ，（１＋Ｌ）ｍｏｄｕｌｏＰ，（２＋Ｌ）ｍｏｄｕｌｏＰ，．．．．，（Ｐ＋Ｌ）ｍｏｄｕｌｏＰ］として示すことができる。本発明に係るＳＦＵは、回転オフセットＬの値を用いてシャッフルパターン又はインデックスベクトルの要素を（前（プレ））インクリメントするため  −尚、この前（プレ）インクリメントはモジュロＰを演算しなければならない−、計算速度の低下を許容することなく、シャッフルメモリ手段内の個々のインデックスベクトルの数を、大幅に、即ち、１／Ｐだけ低減することができる。
【００２３】
本発明の上記第一乃至第三の態様のいずれかの更なる展開を構成する第五の態様によれば、上記前処理手段は、上記パラメータ及び上記一つのインデックスベクトルの各要素の飽和加算を実行するように構成されている。
【００２４】
インデックスベクトル要素とパラメータ又はスカラー値とのこの飽和加算により、入力データ又はアドレスベクトルに関する複合的なシャッフル及びシフト演算が得られる。Ｌ位置に関するシフト左／右は、右側又は左側（シフト方向によって決まる）のＬ個の空き位置が予め設定された定数、例えば値０で満たされる回転左／右の特定のケースと見ることができる。これは、モジュロ加算／減算を上記飽和加算／減算に置き換えることにより達成される。この場合、ソースインデックス値−１及びＰ−１をプリセット定数と称する。−１の値は、対象のレジスタ内の対応する要素中の要素を上書きすべきでないことを示す。従って、インデックス値は−１乃至Ｐ−１の範囲をとることができる。
【００２５】
本発明の上記第一乃至第三の態様のいずれかの更なる展開を構成する第六の態様によれば、上記前処理手段は、上記パラメータ及び上記一つのインデックスベクトルの各要素に関してＸＯＲ演算を実行するように構成されている。
【００２６】
インデックスベクトルに関するこの演算は、入力（データ）ベクトルのその後のシャッフル演算と共に、後述する「バタフライシャッフル」演算を達成するために使用することができる。バタフライシャッフルは、ＦＦＴ、ＤＣＴ、ＦＨＴ（高速アダマール変換）のようにカーネルにおいて広く使用される。これらのカーネルにおいて、バタフライ演算の（ステップ）サイズ又はインクリメントは、通常、段階ごとに変化する。本発明のこの態様に係る実施は、各インデックスベクトル要素に関して実行されるＸＯＲ演算におけるオペランドであるスカラー入力値によってインクリメントが直接に決定されるため有益である。そうでなければ、バタフライのサイズが変化するたびに新たなシャッフルパターンをロードしなければならなくなり、それにより、データトラフィックが増加する。
【００２７】
本発明の第七の態様によれば、上記目的は、冒頭の段落において述べたような方法によってさらに達成され、そこではさらに、パラメータを受け取るステップと、上記パラメータに応じて上記一つのインデックスベクトルの要素を処理するステップとが、上記少なくとも一つの出力ベクトルを生成する上記ステップの前に、実行される。
【００２８】
主な適用分野は、例えばＣＶＰ（リサーチ（Ｒｅｓｅａｒｃｈ））で適用されるようなベクトル処理であり、Ｃ．Ｈ．（Ｋｅｅｓ）ｖａｎ  Ｂｅｒｋｅｌ，Ｐａｔｒｉｃｋ  Ｐ．Ｅ．Ｍｅｕｗｉｓｓｅｎ，Ｎｕｒ  Ｅｎｇｉｎ，ａｎｄ  Ｓ．Ｂａｌａｋｒｉｓｈｎａｎ，「ＣＶＰ：３Ｇモバイル・ベースバンド・プロセッシングのためのプログラマブル・コ・ベクトル・プロセッサ（Ａ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｃｏ  Ｖｅｃｔｏｒ  Ｐｒｏｃｅｓｓｏｒ  ｆｏｒ  ３Ｇ  Ｍｏｂｉｌｅ  Ｂａｓｅｂａｎｄ  Ｐｒｏｃｅｓｓｉｎｇ）」、世界無線会議（Ｗｏｒｌｄ  Ｗｉｒｅｌｅｓｓ  Ｃｏｎｇｒｅｓｓ）２００３の議事録において、及び、ＯｎＤＳＰ（ドレスデンの後、システモニックの前（ＰＳ−Ｄｒｅｓｄｅｎ，ｆｏｒｍｅｒｌｙ  Ｓｙｓｔｅｍｏｎｉｃ））において、及び、ＥＶＰ（ＰＳ’ＤＳＰイノベーション・センター（Ｉｎｎｏｖａｔｉｏｎ  Ｃｅｎｔｒｅ））において（非特許文献２）、を参照されたい。上記発明は、多くの信号処理カーネルを大幅にスピードアップすることができる。これは、特に、メモリ境界（近傍）であり且つ不規則なアクセスパターンを有する用途に当てはまる。これらの例としては、ビデオコーデック、ＦＦＴ、フォーマット変換、インタリービング等が挙げられる。
【発明を実施するための最良の形態】
【００２９】
本発明の前述した及び他の目的、特徴、利点は、添付図面と併せて解釈される本発明の好ましい実施の形態の以下の説明から明らかとなる。
【００３０】
図３に概略的に示される本発明の実施の形態に係る予回転（ｐｒｅ−ｒｏｔａｔｉｏｎ）能力を有するＦＵ３００は、処理手段、より正確には、Ｐ個のマルチプレクサ３１２，３１４，．．．．，３１６からなる配列３１０を備えており、これらのマルチプレクサは、並列のデバイスとして描かれているが、更に少ない数（１個に至るまで）のデバイス及びシリアル処理ステップにより実施することもできる。各マルチプレクサは、入力ベクトル３２０のＰ個の要素に対応するＰ個の入力を有している。一つの更なる入力は、インデックスベクトルの割り当てられた要素のため、又は、入力命令３２２に従ってＦＵ３００のメモリ手段即ちシャッフルメモリ３２０から選択されるシャッフルパターンのために与えられる。しかしながら、インデックスベクトル要素は、マルチプレクサ３１２，３１４，３１６に対して入力される前に、前処理手段、より正確には、いくつか（Ｐ個）のモジュロ加算器からなるコンバイナ３６０によるモジュロ加算を受ける。回転の方向及び大きさはスカラー入力３３２によって決定される。入力命令３２２及びスカラー入力３３２は、例えばアドレスベクトル又はプログラムコードから引き出される。インデックスベクトル自体は、処理された後、入力ベクトル３４０をシャッフルするためにマルチプレクサ配列３１０へ入力され、それにより、要求された出力ベクトル３５０が得られる。
【００３１】
図４のブロック図は、ＦＵによって実行される入力データ又はアドレスベクトル４４０の複合的なシャッフル・データ処理（回転、シフト、バタフライ等の演算）を一つの制御ステップにより開始することができることを、より一般的な方法で示している。前処理手段４６０は、シャッフルパターン４３０及びスカラー入力４３２を受け取るとともに、一つの命令ベクトルを処理手段４１０に対して出力する。この命令ベクトルは、前処理されたシャッフルパターンを含んでいる。
【００３２】
図５に係るプログラムコードの部分は、Ｇｏｌａｙ相関器の実施から引き出されたものである。Ｇｏｌａｙ相関器は、例えば、一次同期コード（ＰＳＣ）のための階層相関シーケンスを使用する呼び出し検索手続きにおける第３世代のモバイル技術において使用される。これは、ソフトウェアアプリケーション及びメモリアクセスで使用されるシャッフルパターンが相互に関連付けられ且つほとんどの場合に連続して複数回再使用された回転オフセットを伴う前のシャッフルパターンの回転であることを示す無数の例のうちの単なる一つに過ぎない。この例において、８個の（複素数）要素のベクトルは四つのメモリアクセス（ｒｅａｄ１乃至ｒｅａｄ４）によりフェッチされ、それにより、ｐｔｒ（ａｓｓｕｍｅ／／ａｌｉｇｎｅｄ）におけるアクセスベクトルは、回転オフセットが２に等しいため、４番目のインクリメント後に再びアライメントされる。
【００３３】
図５のコードに従ったメモリアクセスが、図６に示されている。この場合、メモリにおける二つの連続するベクトル位置６１０，６２０，６３０，６４０が左側に示されており、また、メモリからの対応する出力（ＳＦＵの観点からは入力ベクトル）６１１，６２１，６３１，６４１が右側に示されている。最終的なシャッフル回転されたデータベクトル６１２，６２２，６３２，６４２がメモリ出力の直ぐ下側に示されている。簡単のため、また、良く理解できるように、入力ベクトルの処理はプレーン回転である。プレーン回転とは、要素値がそれらの位置に等しいインデックスベクトルを使用して達成できる最初のメモリアクセス（ｒｅａｄ１）において必要とされる再配置が無く、その後のそれぞれのメモリアクセスが回転を必要とすることを意味している。詳細には、シャッフルを伴わない最初のメモリアクセス（ｒｅａｄ１）のために使用されるシャッフルパターン［７，６，５，４，３，２，１，０］は、メモリ６１０から得られる順序と同じ順序を要素が有している第１の出力ベクトル６１２をもたらす。その後、同じシャッフルパターン  −オン・ザ・フライ（ｏｎ  ｔｈｅ  ｆｌｙ）−  が６のスカラー値を用いたモジュロ８加算を受け、それにより、シャッフルパターン［５，４，３，２，１，０，７，６］が与えられる。この前処理されたシャッフルパターンは、メモリアクセス（ｒｅａｄ２）から得られる入力データベクトル６２１を二つの要素だけ残して回転させ、それにより、出力データベクトル６２２が得られる。次のステップにおいて、最初のシャッフルパターン［７，６，５，４，３，２，１，０］は４のスカラー値によるモジュロ８加算を受け、それにより、シャッフルパターン［３，２，１，０，７，６，５，４］が与えられる。このシャッフルパターンは、次のメモリアクセス（ｒｅａｄ３）により得られる入力ベクトル６３１をシャッフルして（実際にはプレーン）回転させ、要素が四つだけ残して回転される出力ベクトル６３２を得るために使用される。そして、メモリアクセス（ｒｅａｄ４）から得られる最終的な入力ベクトル６４１は、最初のシャッフルパターンのモジュロ加算及び２のスカラー値によりもたらされるシャッフルパターン［１，０，７，６，５，４，３，２］を使用して六つの要素だけ残して回転される。これにより出力ベクトル６４２が得られる。この特定の用途においては、本発明に係るベクトルプロセッサに起因して、四つの個々のシャッフルパターンの代わりに、一つのシャッフルパターンが適切な「回転」値と共に使用された。
【００３４】
多くの高速フーリエ変換（ＦＦＴ）の実施においてはＦＦＴが実行される前に入力データ配列に関してビット反転置換が行われることが一般に知られている。また、シャッフル機能を使用してビット反転置換を行うことができることも知られている。そのようなビット反転において、入力データは、バイナリレベルで、即ち、ビット反転順序で、図７に示される「ｐｅｒｍｕｔｅ＿ｂｉｔｒｅｖ」等の機能を利用して再編される。この例における入力は複素数データの二つの配列からなっているものとし、そのうちの一方は実数部分を含み、他方は虚数部分を含んでいる。しかしながら、ベクトルプロセッサの例において、入力データは複数の複素数からなる一つの配列として記憶され、各複素数の実数部分及び虚数部分は隣り合う記憶ロケーションに記憶される。従って、置換は、複素数の配列に関して実行される。図７の機能ｂｉｔｒｅｖ（）は、図８の最も左側の列に示される数を戻す。
【００３５】
図８には、３２ポイントＦＦＴのためのビット反転アクセスパターンが示されるとともに、これが予回転を伴うシャッフル演算を利用して本発明に従ってどのように改善され得るのかが示されている。ビット反転は、前述した「ギャザー」演算をサポートするアーキテクチャにおいて非常に効率的に達成することができる。図８に関しては、一つのベクトルが８個の複素数データ要素のうちの最大値を保つことができ且つメモリバンク（ベクトルインデックス（ｖｅｃｔｏｒ  ｉｎｄｅｘ））の数が８個であり、一つのバンク内の一つの記憶ロケーションが一つの複素数データ要素を記憶できるものとする。アクセスパターンは一つの（ベクトル数（ｖｅｃｔｏｒ  ｎｕｍｂｅｒ）、メモリバンク数）タプル（組（ｔｕｐｌｅ））からなる。また、例えばＤＭＡコントローラにより図示の形態でデータ項目がメモリ内に配置されると仮定する。データのための単純なメモリ編成が想定される場合には、各バンクが一つのポートを有すると、図８に列挙されるアクセスパターンがメモリバンクの競合を引き起こす。例えば、図８の第１の破線と第２の破線との間に示されるビット反転アクセスの最初のグループは、メモリバンク０（ベクトルインデックス（ｖｅｃｔｏｒ  ｉｎｄｅｘ）＝０）への四つのアクセスと、メモリバンク４（ベクトルインデックス（ｖｅｃｔｏｒ  ｉｎｄｅｘ）＝４）への四つのアクセスとを使用する。そのため、メモリへのシリアルアクセスが必要とされ、それにより、利用可能なメモリ帯域幅の使用が非効率となる。
【００３６】
この場合にデータを編成する更に優れた方法は、連続するベクトル要素の開始アドレスを１メモリバンク分だけ回転させることである。このとき、これは、データをベクトルに書き込むために以下の表１に示されるようにデータをラッピングすること（包み込むこと（ｗｒａｐｐｉｎｇ））を伴う。
【００３７】
表１：３２ポイントＦＦＴビット反転方式におけるメモリバンク競合を回避するための入力データのスキュー
ベクトル要素数
ベクトル０      ０      １      ２      ３      ４      ５      ６      ７
ベクトル１      ７      ０      １      ２      ３      ４      ５      ６
ベクトル２      ６      ７      ０      １      ２      ３      ４      ５
ベクトル３      ５      ６      ７      ０      １      ２      ３      ４
ベクトル４      ４      ５      ６      ７      ０      １      ２      ３
ベクトル５      ３      ４      ５      ６      ７      ０      １      ２
ベクトル６      ２      ３      ４      ５      ６      ７      ０      １
ベクトル７      １      ２      ３      ４      ５      ６      ７      ０
ベクトル８      ０      １      ２      ３      ４      ５      ６      ７
・・・
【００３８】
表１に示されるデータ編成を用いると、バンク競合を伴うことなく、ベクトルインデックスが特定のアクセスで示される総てのデータ項目をフェッチすることができる。従って、総てのアクセスごとにメモリの全帯域幅を使用することができる。しかしながら、メモリシステムによって戻されたデータは、図８に示されるようにデータ要素の所望の順序でベクトルを得るために再配置されなければならない。例えば、図８に関連して詳細に示されるソースエンコーディング方式を使用すると、ビット反転アクセスのためのシャッフルパターンは、最初の組（ベクトル数（ｖｅｃｔｏｒ  ｎｕｍｂｅｒ）＝０）においては［０，２，１，３，４，６，５，７］であり、次の組（ベクトル数（ｖｅｃｔｏｒ  ｎｕｍｂｅｒ）＝１）に関しては［２，４，３，５，６，０，７，１］であり、その後は［１，３，２，４，５，７，６，０］，［３，５，４，６，７，１，０，２］となる。尚、配列をベクトルのブロックに分ける場合には、シャッフルパターンの総ての数がビット反転ブロック数分だけインクリメントされる。例えば、我々は、０から始まって連続的に番号を付けることができる四つのブロックを有している。このとき、ブロック数は、０，１，２，３である。その場合、ビット反転ブロック数は、０，２，１，３である。これは、正確には、シャッフルパターンの各要素に対するインクリメントである。インクリメントは、シャッフルされたデータの回転を達成する。異なる数のポイント（２の累乗）を伴うＦＦＴにおいて同様の方式を実施することができる。
【００３９】
本発明の他の実施の形態は、図９Ａ及び図９Ｂに示されるように、バタフライ演算及びシャッフル演算の複合演算を利用する。これらの例では、３２個の要素を有する入力ベクトル９１１を想定する。実際には、単純なバタフライ演算が適用される。即ち、この例では、シャッフルメモリから最初に供給されるインデックスベクトル（図示せず）は、一つの入力ベクトルの各要素を一つの出力ベクトルにおける同じ位置にマッピングする内容［３１，３０，．．．．，１，０］を有している。任意の他の最初のシャッフルパターン（又は、インデックスベクトル）も同様に使用することができる。しかしながら、入力ベクトルをシャッフルする前に、インデックスベクトルが前処理を受ける。より正確には、図９Ａに従って、対応する前処理手段は、インデックスベクトルの各要素に関してバイナリレベルでＸＯＲ演算を実行する。これにより、図９Ａのケースにおける第２のオペランドは１の入力スカラー値となる。そのため、インデックスベクトルに対するＸＯＲ演算の結果として、場所を二つ一組でスワップする（ペアワイズスワップ（ｐａｉｒ−ｗｉｓｅ  ｓｗａｐｐｉｎｇ）する）入力（データ）ベクトル要素が得られる。このケースにおいて入力ベクトルに関して実行されるバタフライ演算のサイズ又はインクリメントは、１である。これは、各入力ベクトル要素が一つの位置だけをジャンプさせるからである。
【００４０】
図９Ｂによれば、オペランド値は４に等しい。従って、各インデックスベクトル要素のビットパターンに関してＸＯＲ演算を実行した後に入力ベクトルをシャッフルすることにより、それぞれが四つの連続するベクトル要素を含む８個の入力ベクトル要素ブロックが形成されて場所をペアワイズスワップする。このケースにおいて入力ベクトルに関して実行されるバタフライ演算のサイズは、４である。これは、各入力ベクトル要素が四つの位置をジャンプさせるからである。
【００４１】
本発明の使用は、メモリアクセス、ＦＦＴ、ＤＣＴ又はＦＨＴ用途に限定されない。本発明は、任意の種類の用途に適用することができ、また、一つ又は複数のその後の算術演算又は論理演算により以前に適用されたパターンから推定することができるシャッフルパターンを（再）使用する用途において最も有利である。その結果、少なくとも一つの機能的なベクトルプロセッサユニットを有するベクトルプロセッサアーキテクチャを備える本発明に係るマイクロプロセッサデバイスには、同じ及び／又は異なるパラメータ又はスカラー値を受け取り且つインデックスベクトルの要素をその後に及び／又はパラレルに処理するように構成されているいくつかの異なる及び／又は同一の前処理手段が設けられてもよい。いくつかのパラメータの場合、これらのパラメータは、一つの又は様々な命令からデコードすることができ及び／又は同じ若しくは異なる第２のメモリ手段から得ることができる。
【図面の簡単な説明】
【００４２】
【図１】従来の技術のシャッフルユニット（予回転を伴わない）の機能性を示している。
【図２】シャッフルユニット（ＳＦＵ）の従来の技術の実施を示すブロック図である。
【図３】予回転能力を有する本発明に係るＦＵの実施を示すブロック図である。
【図４】図３に係るＦＵの制御を示すブロック図である。
【図５】Ｇｏｌａｙ相関器の実施から引き出されるプログラムコードの部分である。
【図６】図５のコードに従ってメモリアクセスの例示を示している。
【図７】高速フーリエ変換（ＦＦＴ）におけるビット反転アクセスのためのプログラムコードによる複合的なシャッフル及び回転機能の適用可能性に関する他のデモンストレーションである。
【図８】３２ポイントＦＦＴメモリアクセスパターンにおけるビット反転置換を示している。
【図９Ａ】図９Ａ及び図９Ｂは、同じ３２要素入力ベクトルに関して実行される異なるサイズを用いた二つのバタフライシャッフル演算を示している。
【図９Ｂ】図９Ａ及び図９Ｂは、同じ３２要素入力ベクトルに関して実行される異なるサイズを用いた二つのバタフライシャッフル演算を示している。
【図１】
2008513903.tif 000003
【図２】
2008513903.tif 000004
【図３】
2008513903.tif 000005
【図４】
2008513903.tif 000006
【図５】
2008513903.tif 000007
【図６】
2008513903.tif 000008
【図７】
2008513903.tif 000009
【図８】
2008513903.tif 000010
【図９Ａ】
2008513903.tif 000011
【図９Ｂ】
2008513903.tif 000012
【国際調査報告】
2008513903.tif 000013
2008513903.tif 000014