(57)【要約】【課題】乗累算演算を実行するデータ処理装置及び方法を提供する。【解決手段】該データ処理装置は、制御信号に応答して、入力データ要素において、データ処理演算を実行するデータ処理回路を含む。命令デコーダ回路は、入力オペランドとして、第１入力データ要素、第２入力データ要素及び述語値を指定する述語化された乗累算命令に応答して、データ処理回路を制御するように制御信号を生成し、第１入力データ要素および前記第２入力データ要素を乗算し、乗算データ要素を生成し、該述語値が第１の値を有する場合、該乗算データ要素を初期累算データ要素に加算して結果累算データ要素を生成し、該述語値が第２の値を有する場合、該初期累算データ要素から該乗算データ要素を減算して、該結果累算データ要素を生成することで、乗累算演算を実行する。本発明は、パフォーマンス、エネルギー消費及びコード密度を改善する。【選択図】図２
2011096254.tif 000002
【特許請求の範囲】
【請求項１】
データ処理装置であって、
制御信号に応答して、少なくとも１つの入力データ要素において、データ処理演算を実行する、データ処理回路と、
前記データ処理回路に連結し、前記制御信号を生成するようにプログラム命令に応答する、命令デコーダ回路と、を含み、
前記命令デコーダ回路は、入力オペランドとして、第１の入力データ要素と、第２の入力データ要素と、述語値を指定する、述語化された乗累算命令に応答し、前記データ処理回路を制御するように制御信号を生成し、
前記第１の入力データ要素および前記第２の入力データ要素を乗算し、乗算データ要素を生成するステップと、
前記述語値が、第１の値を有する場合、初期累算データ要素に前記乗算データ要素を加算することによって、結果累算データ要素を生成するステップと、
前記述語値が、第２の値を有する場合、前記初期累算データ要素から前記乗算データ要素を減算することによって、前記結果累算データ要素を生成するステップと、により、乗累算演算を実行する、データ処理装置。
【請求項２】
前記入力オペランドを記憶するための少なくとも１つのレジスタバンクを更に含み、前記述語化された乗累算命令は、前記述語値を含む少なくとも１つのレジスタバンクのレジスタを識別する、請求項１に記載のデータ処理装置。
【請求項３】
前記データ処理回路は、Ｎ行の並行処理を提供する、ＳＩＭＤデータ処理回路であり、Ｎは、１を超える整数であり、前記ＳＩＭＤデータ処理回路は、前記制御信号に応答し、Ｎ行の並行処理の各々において、データ処理演算を並行して実行し、
前記述語化された乗累算命令は、入力オペランドとして、第１のベクトルを形成する複数の前記第１の入力データ要素を指定し、
前記命令デコーダ回路は、前記乗累算演算への入力に対して選択される前記第１のベクトルからの前記第１の入力データ要素が、該乗累算演算が実行される並行処理のレーンに依存するように、前記述語化された乗累算命令に応答して、前記データ処理回路を制御するように制御信号を生成し、前記Ｎ行の並行処理の各々において、前記乗累算演算を並行して実行する、請求項１に記載のデータ処理装置。
【請求項４】
前記述語化された乗累算命令は、入力オペランドとして、第２のベクトルを形成する複数の前記第２の入力データ要素を指定し、
乗累算演算への入力に対して選択される前記第２のベクトルからの前記第２の入力データ要素は、該乗累算演算が実行される並行処理のレーンに依存する、請求項３に記載のデータ処理装置。
【請求項５】
前記述語化された乗累算命令は、入力オペランドとして、スカラの第２の入力データ要素を指定し、これは、次いで、第２のベクトルを形成する前記データ処理回路内で複製され、
それによって、前記同一の第２の入力データ要素は、前記乗累算演算が実行される並行処理の各レーンにおいて使用される、請求項３に記載のデータ処理装置。
【請求項６】
前記述語化された乗累算命令は、入力オペランドとして、第３のベクトルを形成する複数の前記述語値を指定し、
前記乗累算演算への入力に対して選択される前記第３のベクトルからの前記述語値は、該乗累算演算が実行される並行処理のレーンに依存する、請求項３に記載のデータ処理装置。
【請求項７】
前記第３のベクトルは、前記Ｎ行の並行処理の各々内で、前記乗累算演算が独立して、乗加算または乗減算演算を実行するよう構成されるように、Ｎの述語値を指定する、請求項６に記載のデータ処理装置。
【請求項８】
前記述語化された乗累算命令は、入力オペランドとして、前記初期累算データ要素を更に指定する、請求項１に記載のデータ処理装置。
【請求項９】
前記初期累算データ要素は、既定値である、請求項１に記載のデータ処理装置。
【請求項１０】
前記既定値は、ゼロである、請求項９に記載のデータ処理装置。
【請求項１１】
前記述語化された乗累算命令は、入力オペランドとして、第４のベクトルを形成する複数の前記初期累算データ要素を指定し、
前記乗累算演算への入力に対して選択される前記第４のベクトルからの前記初期累算データ要素は、該乗累算演算が実行される並行処理のレーンに依存する、請求項３に記載のデータ処理装置。
【請求項１２】
前記データ処理回路は、Ｎ行の並行処理を提供する、ＳＩＭＤデータ処理回路であり、Ｎは、１を超える整数であり、前記ＳＩＭＤデータ処理回路は、前記制御信号に応答し、前記Ｎ行の並行処理の各々において、データ処理演算を並行して実行し、
前記述語化された乗累算命令は、入力オペランドとして、第１のベクトルを形成する複数の前記第１の入力データ要素を指定し、
前記命令デコーダ回路は、前記乗累算演算への入力に対して選択される前記第１のベクトルからの前記第１の入力データ要素が、該乗累算演算が実行される並行処理のレーンに依存するように、前記述語化された乗累算命令に応答して、前記データ処理回路を制御するように制御信号を生成し、前記Ｎ行の並行処理の各々において、前記乗累算演算を並行して実行し、
前記述語化された乗累算命令は、入力オペランドとして、第２のベクトルを形成する複数の前記第２の入力データ要素を指定し、
前記乗累算演算への入力に対して選択される前記第２のベクトルからの前記第２の入力データ要素は、該乗累算演算が実行される並行処理のレーンに依存し、
ここで、前記第１、第２、および第４のベクトルの各々は、Ｎ行のデータ要素を有する、請求項１１に記載のデータ処理装置。
【請求項１３】
各第１の入力データ要素は、Ｘビットを含み、各第２の入力データ要素は、Ｙビットを含み、各初期累算データ要素は、少なくともＸ＋Ｙビットの大きさである、請求項１に記載のデータ処理装置。
【請求項１４】
Ｘ＝Ｙである、請求項１３に記載のデータ処理装置。
【請求項１５】
前記少なくとも１つのレジスタバンクは、前記第１および第２の入力データ要素を記憶するための入力レジスタを含む入力データ要素のレジスタバンクと、各初期累算データ要素および結果累算データ要素を記憶するための累算レジスタを有する累算レジスタバンクと、を含む、請求項２に記載のデータ処理装置。
【請求項１６】
前記第１の入力データ要素および前記第２の入力データ要素のうちの少なくとも１つは、実数部および虚数部を含む複素数であり、
データ処理回路によって実行される前記乗累算演算は、前記結果累算データ要素として、実数部および虚数部を有する複素数を生成する複素乗累算演算である、請求項１に記載のデータ処理装置。
【請求項１７】
前記第１の入力データ要素および前記第２の入力データ要素は共に、実数部および虚数部を含む複素数である、請求項１６に記載のデータ処理装置。
【請求項１８】
前記複素乗累算演算は、前記対応する複素結果累算データ要素の実数部および虚数部を生成するために、乗算、加算、および減算演算シーケンスの実行を含む、請求項１６に記載のデータ処理装置。
【請求項１９】
前記述語値は、複素乗累算演算の異なる部分を制御するために使用される、少なくとも２つの述語値を含む、請求項１６に記載のデータ処理装置。
【請求項２０】
前記述語値は、前記複素結果累算データ要素の前記実数部を生成するために実行される乗累算演算に対する第１の述語値、および前記複素結果累算データ要素の前記虚数部を生成するために実行される乗累算演算に対する第２の述語値を含む、請求項１９に記載のデータ処理装置。
【請求項２１】
前記複素結果累算データ要素の前記実数部を生成するために実行される前記乗累算演算、および前記複素結果累算データ要素の前記虚数部を生成するために実行される前記乗累算演算は共に、第１および第２の乗算演算を含み、前記述語値は、前記第１の乗算演算に対する第１の述語値、および前記第２の乗算演算に対する第２の述語値を含む、請求項１９に記載のデータ処理装置。
【請求項２２】
前記第１の入力データ要素および前記第２の入力データ要素のうちの少なくとも１つは、浮動小数点数であり、
前記データ処理回路によって実行される前記乗累算演算は、前記結果累算データ要素として、浮動小数点数を生成する、浮動小数点乗累算演算である、請求項１に記載のデータ処理装置。
【請求項２３】
前記第１の入力データ要素および前記第２の入力データ要素は共に、浮動小数点数である、請求項２２に記載のデータ処理装置。
【請求項２４】
制御信号に応答して、少なくとも１つの入力データ要素において、データ処理演算を実行するデータ処理回路と、前記データ処理回路に連結され、かつプログラム命令に応答して前記制御信号を生成する命令デコーダ回路と、を使用してデータを処理する方法であって、
制御信号を生成するために、入力オペランドとして、第１の入力データ要素、第２の入力データ要素、および述語値を指定する述語化された乗累算命令をデコードするステップと、
前記制御信号を使用して前記データ処理回路を制御し、
前記第１の入力データ要素および前記第２の入力データ要素を乗算し、乗算データ要素を生成するステップ、
前記述語値が、第１の値を有する場合、前記乗算データ要素を初期累算データ要素に加算することによって、結果累算データ要素を生成するステップ、および
前記述語値が、第２の値を有する場合、前記初期累算データ要素から前記乗算データ要素を減算することによって、前記結果累算データ要素を生成するステップにより、乗累算演算を実行するステップと、を含む、方法。
【請求項２５】
データプロセッサ上での実行時、前記データプロセッサを制御し、請求項２４に記載の方法のステップを実行する、少なくとも１つの述語化された乗累算命令を含む、コンピュータプログラム製品。
【請求項２６】
データ処理装置の仮想機械実装であって、入力オペランドとして、第１の入力データ要素、第２の入力データ要素、および述語値を指定する述語化された乗累算命令に応答して、
前記第１の入力データ要素および前記第２の入力データ要素を乗算し、乗算データ要素を生成するステップと、
前記述語値が、第１の値を有する場合、前記乗算データ要素を初期累算データ要素に加算することによって、結果累算データ要素を生成するステップと、
前記述語値が、第２の値を有する場合、前記初期累算データ要素から前記乗算データ要素を減算することによって、前記結果累算データ要素を生成するステップと、により、乗累算演算を実行する、仮想機械実装。
【請求項２７】
データ処理装置であって、
制御信号に応答して、少なくとも１つの入力データ要素において、データ処理演算を実行するためのデータ処理手段と、
前記データ処理手段に連結され、プログラム命令に応答して、前記制御信号を生成するための命令デコーダ手段と、を含み、
前記命令デコーダ手段は、入力オペランドとして、第１の入力データ要素、第２の入力データ要素、および述語値を指定する述語化された乗累算命令に応答して、
前記第１の入力データ要素および前記第２の入力データ要素を乗算し、乗算データ要素を生成するステップ、
前記述語値が、第１の値を有する場合、前記乗算データ要素を初期累算データ要素に加算することによって、結果累算データ要素を生成するステップ、および
前記述語値が、第２の値を有する場合、前記初期累算データ要素から前記乗算データ要素を減算することによって、前記結果累算データ要素を生成するステップにより、乗累算演算を実行するために前記データ処理手段を制御する、制御信号を生成する、データ処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、乗累算（ＭＡＣ）演算を実行するための装置および方法に関する。
【背景技術】
【０００２】
乗累算（ＭＡＣ）演算は、データ処理システムにおいて、頻繁に使用される。ＭＡＣ演算は、Ａ＋Ｂ＊ＣまたはＡ−Ｂ＊Ｃの形式を採り得る。乗算演算Ｂ＊Ｃは、一般に、ＢおよびＣの異なる値に対して複数回行われ、その後、各乗算結果は、実行中の累算値Ａに加算される（または減算される）。
【０００３】
多くの場合、連続ＭＡＣ演算のパフォーマンスを最適化するように、専用のＭＡＣ回路が、データ処理システム内に提供される。かかるＭＡＣ回路は、スカラ処理回路内に提供され得、ここで、乗累算命令シーケンスは、乗累算演算の必要とされる反復を起動するために、順々に起動される。しかしながら、このような演算のパフォーマンスを加速させるための１つの既知のアプローチは、ＳＩＭＤ（単一命令複数データ）アプローチを採用することである。ＳＩＭＤアプローチに従って、複数のデータ要素は、レジスタ内に並列して配置され、次いで、必要とされる演算が、多レーンの並行処理内でこれらのデータ要素において並行して実行される。単一の乗累算結果を生成するために必要とされる演算を考慮すれば、複数の別個の乗算演算が必要とされ、ＳＩＭＤデータ処理回路を使用することによって、複数のこれらの必要とされる乗算が、乗累算演算のスループットを増加させるように、並行して実行され得ることを上記の考察から理解されよう。スカラ回路と同様に、ＳＩＭＤデータ処理回路内では、専用のＭＡＣ回路が、乗累算演算のパフォーマンスを最適化するために提供され得る。
【０００４】
ＭＡＣ演算を頻繁に使用するデジタル信号処理演算の一種が、フィルタ演算である。専用のＭＡＣユニットを使用する際、複合フィルタ演算を比較的迅速に実行することが可能である。かかるフィルタ演算を使用する１つの特定例では、受信した電波信号をパイロット信号と比較する際、パイロット信号が、受信機によって既知の基準信号として使用される。パイロット信号は、一般に、既知のパイロット波形を画定するように、既知の正の振幅と既知の負の振幅を繰り返す。このようなフィルタ演算を実行する際、乗加算または乗減算演算が必要とされるかどうかを決定する任意の特定の時点において、パイロット信号の形態で、フィルタリング演算を通して、乗加算および乗減算演算を実行することが必要である。
【０００５】
スカラＭＡＣ回路内でこのような演算を実行しようとする際、実行時に、必要とされる演算を起動する、乗加算命令および乗減算命令シーケンスを構成することが可能である。しかしながら、必要とされる乗加算および乗減算演算の正確なシーケンスについての決定は、実行時間よりもむしろコンパイル時間で行われることが必要であり、したがって、シーケンスは、特定のパイロット信号に対してのみ構成され得る。したがって、このようなアプローチは、柔軟性を欠き、コード密度の観点から望ましくない。
【０００６】
更に一般には、ＳＩＭＤ  ＭＡＣ回路内でこのようなフィルタ演算を実行することが所望され得る。かかる状況において、複数の乗加算演算が多レーンの処理内で並行して実行されるように、乗加算命令を発出することができ、同様に、複数の乗減算演算が多レーンの処理内で並行して実行されるように、乗減算命令を発出することができる。先述のフィルタ演算を実行するために、一般に、例えば、乗加算命令等のある形態の命令を使用し、次いで、データ要素のベクトルとして、既定の時間間隔で、パイロット信号の振幅をコード化する、即ち、正および負の振幅値の両方を直接識別することが必要であり得る。これは、パイロット情報をコード化するためにメモリ内の多くのスペースを必要とし、情報のこれらの大きなベクトルは、パイロット信号が変更されるたびに、再計算する必要がある。更に、パイロット信号は同一のままだが、受信特性の変動によりパイロット信号の振幅が変更された場合、メモリ内のベクトルを、再プログラム化する必要がある。
【０００７】
代替的に、乗加算命令および乗減算命令の両方の試行および使用を決定した場合、これは、一般に、いくつかのデータ再配列問題、およびコード密度問題も引き起こす。
【０００８】
したがって、フィルタ演算を実行するために専用のＭＡＣ回路を使用することが望ましいが、既知のＭＡＣ技法を使用して、効率的にある種のフィルタ演算を実行することは困難である。
【０００９】
乗算データ要素の１つ（例えば、先に言及される要素Ｃ）は、一定の大きさであるが、符号変換のみ（実際には、先述のパイロット信号の場合）である際に採用され得る代替的なアプローチは、加算器ユニット内で加算および減算シーケンス、次いで、一定の振幅値による結果の単一乗算を実行することである。かかる加算器ユニット内で、述語化された加算／減算命令を提供することは公知であり、これは、命令において提供される述語値に依存して、２数の加算、あるいは２数の減算のいずれかを実行し得る。このような命令は、加算および減算演算シーケンスを実行するために柔軟性を提供する一方、加算器回路は、一般に、加算および減算演算シーケンスに対する結果の連続累算用のハードウェアに最適化されず、ひいては、専用のＭＡＣ回路が提供するパフォーマンスを提供しない可能性がある。更に、加算器ユニット内で実行中の累算値は、一般に、入力オペランドと同一の大きさのレジスタ内に保持され、それに応じて、実行中の累算値が、オーバーフロー、またはアンダーフローしないことを確実にするために、多くの配慮が必要とされ、一般に、これは、累算プロセスを通して、様々な評価およびシフト型の演算の使用を必要とし、更にパフォーマンスに影響を及ぼす。対照的に、ＭＡＣユニットにおいて、累算値は、一般に、入力オペランドより大きいレジスタ内に保持され、それによって、オーバーフローまたはアンダーフローのリスクを伴わずに、より高精度の累算値を維持することが可能である。更に、加算器回路を使用し、次いで、必要とされる加算を使用する際、起動される別個の乗算命令に対して、フィルタ演算を完了するために必要とされる乗算を実行することが必要であろう。
【００１０】
したがって、別個の加算器回路内でのかかるフィルタ演算、次いで、別個の乗算器回路内での乗算により、実行しようとすることは、概して、不可能であると考えられている。
【００１１】
したがって、乗累算演算を乗累算回路内で効率的に実行することが可能な技法を提供することが望ましく、乗加算および乗減算演算の可変シーケンスが必要とされる状況において、例としては、先述のフィルタ演算における場合である。
【発明の概要】
【課題を解決するための手段】
【００１２】
第１の態様から見ると、本発明は、制御信号に応答して、少なくとも１つの入力データ要素において、データ処理演算を実行するデータ処理回路と、前記データ処理回路に連結され、かつプログラム命令に応答して前記制御信号を生成する命令デコーダ回路と、を含む、データ処理装置を提供し、前記命令デコーダ回路は、入力オペランドとして、第１の入力データ要素、第２の入力データ要素、および述語値を指定する述語化された乗累算命令に応答して、前記データ処理回路を制御するように制御信号を生成し、前記第１の入力データ要素および前記第２の入力データ要素を乗算し、乗算データ要素を生成するステップと、該述語値が、第１の値を有する場合、該乗算データ要素を初期累算データ要素に加算することによって、結果累算データ要素を生成するステップと、該述語値が、第２の値を有する場合、該初期累算データ要素から該乗算データ要素を減算することによって、該結果累算データ要素を生成するステップと、により、乗累算演算を実行する。
【００１３】
本発明に従って、命令デコーダ回路によってデコードされる場合、該データ処理回路に、該命令によって指定される述語値の値に依存して、乗加算あるいは乗減算演算のいずれかを実行させる、述語化された乗累算命令を提供する。これらの述語化された乗累算命令のうちの１つまたはそれ以上を用いることによって、効率的な方法において、専用のＭＡＣ回路内で、複合フィルタ演算を実行することが可能である。特に、乗加算または乗減算演算が必要であるかどうかについての決定は、コンパイル時間よりもむしろ実行時間を要し、有意なコード密度の改善をもたらし得る。更に、述語値の使用は、特に、データ要素のうちの１つが、複数の乗累算演算にわたり正号または負号形式で再使用される、乗算される入力データ要素の詳細を保持するのに必要とされるメモリの量を軽減することができる。各乗累算演算に対するそのデータ要素の値を別個に記憶することを必要とする代わりに、マグニチュードは、単一のスカラレジスタにおいて記憶され得、各乗累算演算に対して別個の述語値を提供し、加算または減算を必要とするかどうかを識別し、メモリ資源の更に効率的な使用をもたらすことができる。
【００１４】
本発明のアプローチは、乗加算演算と乗減算演算の組み合わせを必要とする乗累算演算シーケンスを実行する際、専用のＭＡＣユニットを用いるパフォーマンス利益を達成することが可能である。本発明のアプローチを採用する際、既知の先行技術技法と比較して、エネルギー消費の有意な減少を達成することができる。
【００１５】
一実施形態において、該データ処理回路は、前記入力オペランドを記憶するための少なくとも１つのレジスタバンクを更に含み、ここで、前記述語化された乗累算命令は、前記述語値を含む少なくとも１つのレジスタバンクのレジスタを識別する。専用の述語レジスタバンクを提供することができる、または代替的に、汎用レジスタバンクのレジスタ内に、述語値を記憶することができる。
【００１６】
本発明の一実施形態の述語化された乗累算命令が、スカラ処理回路内で起動され得る一方、一実施形態において、データ処理回路は、Ｎ行の並行処理を提供するＳＩＭＤデータ処理回路であり、Ｎは、１を超える整数であり、ＳＩＭＤデータ処理回路は、制御信号に応答して、前記Ｎ行の並行処理の各々において、データ処理演算を並行して実行する。かかる実施形態において、前記述語化された乗累算命令は、入力オペランドとして、第１のベクトルを形成する複数の前記第１の入力データ要素を指定し、前記命令デコーダ回路は、乗累算演算への入力に対して選択される前記第１のベクトルからの第１の入力データ要素が、該乗累算演算が実行される並行処理のレーンに依存するように、述語化された乗累算命令に応答して、前記データ処理回路を制御するように制御信号を生成し、前記Ｎ行の並行処理の各々において、前記乗累算演算を並行して実行する。このようなアプローチは、乗累算演算の乗算反復を並行して実行することによって、スカラプロセッサ内でＭＡＣ演算のパフォーマンスと比較すると、有意なパフォーマンス利益を提供することができる。
【００１７】
一実施形態において、述語化された乗累算命令は、全てのレーンにわたり適合される単一の述語値を指定し得るか、または乗算述語値を指定し得、例えば、各レーンに対して別個の述語値を指定し、それによって、述語化された乗累算命令の使用において、多くの柔軟性を提供することが可能である。
【００１８】
一実施形態において、前記述語化された乗累算命令は、入力オペランドとして、第２のベクトルを形成する複数の前記第２の入力データ要素を更に指定し、乗累算演算への入力に対して選択される前記第２のベクトルからの前記第２の入力データ要素は、該乗累算演算が実行される並行処理のレーンに依存する。
【００１９】
しかしながら、代替的な実施形態において、前記述語化された乗累算命令は、入力オペランドとして、スカラの第２の入力データ要素を更に指定し、それは、その後、第２のベクトルを形成するためにデータ処理回路内で複製され、それによって、該同一の第２の入力データ要素が、前記乗累算演算が実行される並行処理の各レーンにおいて、使用される。このようなアプローチは、例えば、パイロット信号に対して先述のフィルタ演算を実行する際に使用され得、第２の入力データ要素は、述語値を有するパイロット信号の振幅（一般に、定数であり得る）を指定し、その後、振幅値の記号、ひいては、フィルタプロセスにおいて、任意の特定の点において、乗加算または乗減算演算を必要とするかどうかを識別する。
【００２０】
一実施形態において、前記述語化された乗累算命令は、入力オペランドとして、第３のベクトルを形成する複数の前記述語値を指定し、乗累算演算への入力に対して選択される前記第３のベクトルからの述語値は、該乗累算演算が実行される並行処理のレーンに依存する。第３のベクトルにおいて、述語値数は、実装に依存して異なり得る。例えば、あるレーンは、グループ化され、同一の述語値で制御され得る。しかしながら、一実施形態において、該第３のベクトルは、前記Ｎ行の並行処理の各々内で、該乗累算演算が、独立して、乗加算または乗減算演算を実行するように設定することが可能であるように、Ｎの述語値を指定する。したがって、これは、述語化された乗累算命令がどのように使用されるかにおいて、有意な柔軟性を提供し、乗累算演算の複合シーケンスを容易に実装することが可能である。
【００２１】
初期累算データ要素は、様々な方法において指定され得る。例えば、一実施形態において、述語化された乗累算命令は、入力オペランドとして、初期累算データ要素を指定し得る。代替的に、初期累算データ要素は、既定値がゼロである、即ち、初期累算データ要素がない、特定の一例において、いくつかの既定値を取り得る。
【００２２】
述語化された乗累算命令が、ＳＩＭＤデータ処理回路内で起動される、一実施形態において、述語化された乗累算命令は、入力オペランドとして、第４のベクトルを形成する複数の前記初期累算データ要素を指定し、乗累算演算への入力に対して選択される前記第４のベクトルからの初期累算データ要素が、該乗累算演算が実行される並行処理のレーンに依存する。
【００２３】
一特定の実施形態において、第１、第２、および第４のベクトルの各々は、Ｎ行のデータ要素を有する。更に、一実施形態において、第３のベクトルは、Ｎ行の述語値を有する。
【００２４】
一実施形態において、各第１の入力データ要素は、Ｘビットを含み、各第２の入力データ要素は、Ｙビットを含み、各初期累算データ要素は、少なくともＸ＋Ｙビットの大きさである。多くの場合、データ処理回路は、各累算データ要素が、Ｘ＋Ｙビットの大きさよりも大きくなるように、第１および第２の入力データ要素を提供するレジスタよりも大きいレジスタ内で累算データ要素を保持し得る。一特定例において、ＸおよびＹはそれぞれ、１６ビットであり、累算データ要素は、４０ビットレジスタ内に保持される。このようなアプローチによって、オーバーフローのリスクを伴わずに、ひいては、追加の演算の組み込みを必要とせずに、高精度の累算結果が維持され、オーバーフロー条件を識別する際、オーバーフロー状況をモニタリングし、付随するシフト操作を実行することができる。
【００２５】
第１のデータ要素および第２のデータ要素は、同一の大きさである必要がない一方、一実施形態において、Ｘは、Ｙと等しく、それに応じて、第１および第２のデータ要素は、同一の大きさである。
【００２６】
一実施形態において、述語値を含む少なくとも１つのレジスタバンクはまた、前記第１および第２の入力データ要素を記憶するための入力レジスタを含む入力データ要素レジスタバンク、ならびに各初期累算データ要素および結果累算データ要素を記憶するための累算レジスタを有する累算レジスタバンクも含む。先述のとおり、多くの場合、累算レジスタは、入力レジスタよりも大きいであろう。
【００２７】
一実施形態において、第１の入力データ要素、第２の入力データ要素、および累算データ要素は全て、実数である。しかしながら、代替的な実施形態において、第１の入力データ要素および第２の入力データ要素のうちの少なくとも１つは、実数部および虚数部を含む複素数であり、データ処理回路によって実行される乗累算演算は、結果累算データ要素として、実数部および虚数部を有する複素数を生成する複素乗累算演算である。
【００２８】
一実施形態において、第１の入力データ要素および第２の入力データ要素のうちの１つだけが、複素数である。例えば、第１の入力データ要素は、複素数であり得る一方、第２の入力データ要素は、実数として係数を提供し得る。１つのかかる実施形態において、係数データ要素は、複素乗累算演算を実行する前に、複素形式に変換され得る。
【００２９】
別の実施形態において、第１の入力データ要素および第２の入力データ要素は共に、実数部および虚数部を含む複素数である。
【００３０】
一実施形態において、複素乗累算演算は、対応する複素結果累算データ要素の実数部および虚数部を生成するために、乗加算および減算演算シーケンスのパフォーマンスを含む。
【００３１】
一実施形態において、対応する第１および第２のデータ要素の実数部および虚数部の両方に関しては、実行される乗累算演算を制御するように、単一の述語値を提供することができる。しかしながら、代替的な実施形態において、述語値は、複素乗累算演算の異なる部分を制御するために使用される少なくとも２つの述語値を含む。
【００３２】
１つの例示的な実施形態において、述語値は、複素結果累算データ要素の実数部を生成するために実行される乗累算演算に対する第１の述語値、および複素結果累算データ要素の虚数部を生成するために実行される乗累算演算に対する第２の述語値を含む。これにより、複素数に関連して、述語化された乗累算命令の使用において、更に柔軟性を提供する。
【００３３】
別の例示的な実施形態において、複素結果累算データ要素の実数部を生成するために実行される乗累算演算および複素結果累算データ要素の虚数部を生成するために実行される乗累算演算は共に、第１および第２の乗算演算を含み、述語値は、第１の乗算演算に対する第１の述語値、および第２の乗算演算に対する第２の述語値を含む。また、これにより、複素数に関連して、述語化された乗累算命令の使用において、更に柔軟性を提供する。
【００３４】
代替的な実施形態において、第１の入力データ要素および第２の入力データ要素のうちの少なくとも１つは、浮動小数点数であり、データ処理回路によって実行された乗累算演算は、結果累算データ要素として、浮動小数点数を生成する、浮動小数点の乗累算演算である。かかる実施形態において、データ処理回路は、一般に、必要とされる乗累算演算を実行するために、浮動小数点の乗算および加算回路を含み得る。
【００３５】
一実施形態において、第１の入力データ要素および第２の入力データ要素のうちの１つだけは、浮動小数点数であり、他の入力データ要素は、固定小数点数である。しかしながら、一実施形態において、第１の入力データ要素および第２の入力データ要素は共に、浮動小数点数である。
【００３６】
第２の態様から見ると、本発明は、制御信号に応答して、少なくとも１つの入力データ要素において、データ処理演算を実行するデータ処理回路と、前記データ処理回路に連結され、かつプログラム命令に応答して、前記制御信号を生成する命令デコーダ回路と、を使用してデータを処理する方法を提供し、該方法には、制御信号を生成するために、入力オペランドとして、第１の入力データ要素、第２の入力データ要素、および述語値を指定する述語化された乗累算命令をデコードするステップと、前記制御信号を使用して前記データ処理回路を制御し、前記第１の入力データ要素および前記第２の入力データ要素を乗算し、乗算データ要素を生成するステップ、該述語値が、第１の値を有する場合、該乗算データ要素を初期累算データ要素に加算することによって、結果累算データ要素を生成するステップ、および該述語値が、第２の値を有する場合、該初期累算データ要素から該乗算データ要素を減算することによって、該結果累算データ要素を生成するステップにより、乗累算演算を実行するステップと、を含む。
【００３７】
第３の態様から見ると、本発明は、データプロセッサ上での実行時、該データプロセッサを制御し、本発明の第２の態様に従う方法のステップを実行する、少なくとも１つの述語化された乗累算命令を含む、コンピュータプログラム製品を提供する。
【００３８】
第４の態様から見ると、本発明は、データ処理装置の仮想機械実装を提供し、前記仮想機械実装は、入力オペランドとして、第１の入力データ要素、第２の入力データ要素、および述語値を指定する述語化された乗累算命令に応答して、前記第１の入力データ要素および前記第２の入力データ要素を乗算し、乗算データ要素を生成するステップと、該述語値が、第１の値を有する場合、該乗算データ要素を初期累算データ要素に加算することによって、結果累算データ要素を生成するステップと、該述語値が、第２の値を有する場合、該初期累算データ要素から該乗算データ要素を減算することによって、該結果累算データ要素を生成するステップと、により、乗累算演算を実行する。
【００３９】
本発明は、以下の添付図面において説明されるように、例示として、その実施形態を参照して、更に記載され得る。
【図面の簡単な説明】
【００４０】
【図１】本発明の実施形態の技法が採用され得る、データ処理装置を図式的に説明するブロック図である。
【図２】一実施形態に従って、どのように図１のＳＩＭＤ回路を使用して、述語化された乗累算命令に応答して、乗加算および乗減算演算を実行するかを図式的に説明する図である。
【図３】一実施形態に従って、ＳＩＭＤ回路内で並行処理する各レーンに対する図２の加算器制御回路の演算を図式的に説明する。
【図４】乗加算または乗減算演算のパフォーマンスを制御するために、加算器制御回路からの出力が、どのように並行処理の各レーン内で使用されるかを説明する。
【図５】一実施形態に従って、述語化された乗累算命令に応答して、実行される乗累算処理を説明する図である。
【図６】本発明の実施形態の述語化された乗累算命令を利用するプログラムコードを実行するための仮想機械実装を図式的に説明する図である。
【発明を実施するための形態】
【００４１】
本発明の実施形態に従って、述語化された乗累算（述語化されたＭＡＣ）命令を提供する。スカラ処理回路で起動されることを目的とする命令のスカラバージョンに関しては、該命令は、入力オペランドとして、命令を起動する際、乗加算または乗減算演算を実行するかどうかを制御するために使用される第１の入力データ要素、第２の入力データ要素、および述語値を取得する。任意に、述語化されたＭＡＣ命令もまた、入力オペランドとして、初期乗累算データ要素（本明細書において、初期累算データ要素とも称される）を取得し得る。
【００４２】
しかしながら、本発明の一実施形態を説明するために、述語化された乗累算命令が、複数の乗累算演算を並行して実行するために、ＳＩＭＤ回路内で起動することを意図すると仮定され得る。かかる実施形態において、述語化されたＭＡＣ命令は、入力オペランドとして、第１の入力データ要素の第１のベクトル（ｖａ）、第２の入力データ要素の第２のベクトル（ｖｂ）、および述語値のベクトル（ｖｐ）を取得する。任意に、述語化されたＭＡＣ命令はまた、入力オペランドとして、初期累算データ要素のベクトル（ｖａｃｃ）も取得し得る。一実施形態において、第２のベクトルは、述語化されたＭＡＣ命令によって識別されたＳＩＭＤレジスタ内に直接記憶され、代替的な実施形態において、述語化されたＭＡＣ命令は、第２の入力データ要素として単一のスカラ値を指定し得、第２のベクトルは、ＳＩＭＤ回路内に存在する多レーンの並行処理にわたる単一のスカラ値を複製することによって、構成され得る。
【００４３】
一実施形態において、全てのベクトルは、本明細書において、Ｎと称される、同数の要素を有するが、各ベクトルにおいて、データ要素は、異なる幅を有し得る。例えば、一実施形態において、ベクトル累算器において、各データ要素は、少なくとも３２ビット幅である一方、入力ベクトルｖａおよびｖｂにおいて、データ要素は、１６ビット幅である。述語ベクトルにおいて、要素は、加算または減算演算が、対応するレーンの並行処理において必要されるかどうかを指定するためには、１ビット幅のみ必要とする。
【００４４】
述語化されたＭＡＣ命令が起動される際、実行された乗累算演算は、ベクトル累算器出力（ここで、０＜＝ｉ＜Ｎ）を生成する。
【００４５】
ｖａｃｃ［ｉ］＝ｖａｃｃ［ｉ］＋ｖａ［ｉ］＊ｖｂ［ｉ］  ｉｆ  ｖｐ［ｉ］＝ｔｒｕｅ
ｖａｃｃ［ｉ］＝ｖａｃｃ［ｉ］−ｖａ［ｉ］＊ｖｂ［ｉ］  ｉｆ  ｖｐ［ｉ］＝ｆａｌｓｅ
【００４６】
図１は、本発明の一実施形態に従って、データ処理装置を図示し、この特定例において、データ処理装置は、デジタルシグナルプロセッサ（ＤＳＰ）１００の形態を採る。ＤＳＰ１００によって実行された演算は、様々な形態を取得することができ、一実施形態において、ＤＳＰは、無線ベースバンド処理機能を実行するために使用され得る。無線ベースバンドは、このような集積回路の処理機能において高い需要がある。必要とされるデータスループットは、大きく、効率性が高い要素の全てを使用するために、ＤＳＰ内で提供される異なる要素の平衡を保つことは重要である。図１に示されるように、ＤＳＰは、ＳＩＭＤ乗累算回路１１０および様々な他のＳＩＭＤ処理回路１２０を含むＳＩＭＤ部分１０５を含む。ＳＩＭＤ  ＭＡＣ回路１１０および他のＳＩＭＤ処理回路１２０は共に、ＳＩＭＤ処理回路によって必要とされるデータ要素のベクトルを記憶するＳＩＭＤレジスタバンク１４０にアクセスできる。ＳＩＭＤ  ＭＡＣ回路１１０はまた、ＭＡＣ演算時、生成される累算データ要素を保持するために使用される１つまたはそれ以上のＳＩＭＤ累算レジスタ１３０にアクセスでき、更に、本発明の実施形態に従って、述語化されたＭＡＣ命令に応答して乗累算演算を実行する際、使用される述語値を記憶する１つまたはそれ以上のＳＩＭＤ述語レジスタ１３５にアクセスできる。レジスタ１３０、１３５、および１４０が、物理的に別個にレジスタバンクに提供され得る一方、代替的な実施形態において、それらは、単一のレジスタバンク１３７によって提供され得る。
【００４７】
一例において、ＳＩＭＤ  ＭＡＣ回路１１０および他のＳＩＭＤ処理回路１２０は、処理の３２並行レーン（各１６ビット幅）を有し、それは、算術値が、ＳＩＭＤレジスタバンク１４０から提供されると、乗算、加算、およびシャッフル演算を実行するために使用され得る。１６ビットのデータワードが、並行処理のレーンの各々に対して必要とされる入力値を提供するために、ＳＩＭＤレジスタバンク１４０内で、１つまたはそれ以上の入力値レジスタ内でそれぞれの要素から取得される。
【００４８】
多くの場合、ＳＩＭＤ回路は、パイプラインであり得、一実施形態において、ＳＩＭＤ  ＭＡＣ回路１１０は、計算の結果について、計算がパイプラインに出された後、３サイクルが可能であるように、３つのステージパイプラインを形成する。
【００４９】
一実施形態において、それぞれの処理レーンは、コントローラ１６０によってプログラムメモリ１６５から読み出された２５６ビットの超長命令語（ＶＬＩＷ）命令である。このＶＬＩＷ命令はまた、一般に、ＤＳＰ１００のスカラ部分１４５内でスカラ処理回路を制御するために使用されたスカラ命令も含み得、スカラ処理回路は、１つまたはそれ以上のスカラレジスタバンクにアクセスできる。コントローラ１６０は、ＶＬＩＷ命令内で命令をデコードし、かつ、ＳＩＭＤ部分１０５内の回路およびスカラ部分１４５内の回路に必要とされる制御信号を送信するために使用される１つまたはそれ以上の命令デコーダを含み得る。コントローラはまた、ＳＩＭＤレジスタバンク１４０あるいはスカラレジスタバンクのいずれかに記憶するために、または記憶されたデータをこれらのレジスタバンクからデータメモリ１７５にバックアウトするために、ロード／記憶ユニット１７０に必要とされる限り、データをデータメモリ１７５から読み出すための制御信号を送信し得る。
【００５０】
本発明の実施形態の説明の目的で、スカラ部分１４５内でスカラ処理回路の操作は、関連しない。しかしながら、概説すると、スカラ処理回路は、一般に、上述のＳＩＭＤ処理回路を用いて並行して操作し、主として、制御操作を実行するのに役立つ。スカラ処理回路の１つはまた、データメモリ１７５において、データ値にアクセスするために使用されるメモリアクセスアドレスを生成するのに関与するアドレス生成ユニットを制御し得る。一実施形態において、スカラ処理回路は、１つから３つのパイプラインステージを有し、データメモリ１７５は、３サイクルまたは６サイクルのレイテンシを有する。
【００５１】
本発明の実施形態の述語化されたＭＡＣ命令を考慮すると、このような命令は、プログラムメモリ１６５からコントローラ１６０によって読み出されたＶＬＩＷ命令内で出現し得、述語化されたＭＡＣ命令をデコードすると、制御信号は、ＳＩＭＤ部分１０５に、特に、ＳＩＭＤ  ＭＡＣ回路１１０に発出され、ＳＩＭＤ  ＭＡＣ回路に、Ｎ行の並行処理の各々において、乗累算演算を並行して実行させ得る。述語化されたＭＡＣ命令は、述語値のベクトルを含む述語レジスタ１３５内でレジスタを指定し得、各値は、レーンのうちの１つと関連し、レーンが、乗加算または乗減算演算を実施する場合に、乗累算演算が実行されるかどうかを指示する。
【００５２】
代替的な実施形態において、述語値は、他の方法において指定され得る。例えば、いくつかの状況において、各レーンに対する別個の述語値を指定するために必要としない場合があり、あるレーンは、同一の述語値を使用するために配置され得る。更に、いくつかの実施形態において、述語値は、述語レジスタに直接指定されるよりも他の情報を参照することにより指定され得る。一例として、ある命令の条件付きの実行に対応する命令セットを起動する際、通常、命令を起動するかどうかを決定するために、これらの条件の存在を評価することが可能である装置内に条件付きのコードのセットを保管する（かかるコードの一例は、ＡＲＭプロセッサにより保管されるＮ、Ｚ、Ｃ、およびＶ条件コードビットである）。いくつかの実施形態において、述語値は、これらの条件付きコードビットの１つを参照して、決定され得る。
【００５３】
図２は、述語化されたＭＡＣ命令に応答して、乗累算演算を実行する際の、ＳＩＭＤ  ＭＡＣ回路１１０の演算を図式的に説明する。述語化されたＭＡＣ命令を実行する前に、入力データ要素の必要とされるベクトルは、ベクトルレジスタバンク１４０内に記憶され得、任意の初期累算データ要素は、累算器レジスタバンク１３０において、ベクトルとして記憶され得る。同様に、述語値のベクトルは、述語レジスタバンク１３５内に記憶され得る。これらのデータ要素および述語値を、レジスタバンク内に記憶することが可能な多くの方法があることを理解されたい。例えば、ロード命令は、データメモリ１７５からレジスタに、これらのデータ要素および述語値をロードするために起動され得る、または代替的に、関連値は、ＳＩＭＤ  ＭＡＣ回路１１０または他のＳＩＭＤ処理回路１２０によって実行される前述の演算の出力として、レジスタ内に直接記憶され得る。
【００５４】
述語化されたＭＡＣ命令がデコードされると、コントローラ１６０は、述語レジスタバンク１３５内で識別されたレジスタのコンテンツに依存して、並行処理の各レーンに対して、加算器制御ブロックに制御信号を発出させるように、加算器制御ブロック２１０に制御信号を発出し得る。
【００５５】
図２に図式的に示されるように、ＳＩＭＤ  ＭＡＣ回路１１０は、図２の符号２１５、２２０によって示された並行処理の複数のレーンの各々に対して、乗算器回路２１７および加算／減算回路２１９から構成されると考えられる。入力データ要素は、各レーンにベクトルレジスタバンク１４０から読み込まれ、ここで、これらは、加算／減算回路２１９に転送された乗算データ要素を生成するために、乗算器２１７によって乗算される。加算／減算回路は、任意に、累算器レジスタバンク１３０からの初期累算値を受信し、次いで、加算器制御ブロック２１０から受信した制御信号に基づいて、累算データ要素に乗算データ要素を加算するか、あるいは、累算データ要素から乗算データ要素を減算する。結果として得られた累算データ要素は、次いで、累算器レジスタバンク１３０中に記憶するために戻される。転送パス（図示せず）はまた、累算レジスタバンクから値を読み込むことを必要とせずに、その後のＭＡＣ演算で使用するために加算／減算回路への入力として、出力累算データ要素に直接戻せるように提供され得る。
【００５６】
加算器制御ブロック２１０は、様々な方法において構成され得る。図３は、１つの好適な実施形態を説明し、ここで、加算器制御ブロックは、効率的に、並行処理の各レーンに対して、２つの入力マルチプレクサを含む（図３のマルチプレクサ２５０によって集合的に示される）。該マルチプレクサの第１の入力は、コントローラ１６０からの加算／減算制御信号出力を受信し、述語化されたＭＡＣ命令がない場合は、マルチプレクサ制御信号はまた、マルチプレクサへの第１の入力が、各レーン内の加算器回路を制御するために使用されるように、コントローラ１６０によっても発出され得る。したがって、乗加算命令が起動される場合、コントローラ１６０は、実行すべき加算を生じるように、各レーンにおいて、加算／減算回路２１９までマルチプレクサ２５０を経由し得る加算／減算制御信号を発出し得る。同様に、乗減算命令が起動される場合、コントローラ１６０によって発出される加算／減算制御信号は、実行すべき減算を生じるように、各レーンにおいて、加算／減算回路２１９までマルチプレクサを経由し得る。
【００５７】
しかしながら、述語化されたＭＡＣ命令がデコードされる場合には、代わりに、マルチプレクサ制御信号が、加算／減算回路２１９までルーティングするために、その第２の入力をマルチプレクサ２５０に選択させるように設定され得る。図３に示されるように、この第２の入力は、述語レジスタバンク１３５によって提供され、特に、述語化されたＭＡＣ命令によって識別されるように、述語レジスタバンク内のレジスタのうちの１つによって提供され得る。Ｎ行の並行処理があると仮定すれば、この第２の入力は、したがって、少なくともＮビットの大きさであり得、並行処理の各レーンに対して少なくとも１つの述語値を提供する。したがって、並行処理の各レーンに対して、その述語レジスタによって提供される述語値のベクトルにおいて、関連述語値は、加算または減算が実行されるかどうかを制御するために、そのレーンに対して、加算／減算回路２１９までマルチプレクサ２５０を経由し得る。
【００５８】
加算／減算回路２１９が、加算器制御ブロック２１０によって発出される制御信号に応答するように配置され得る多くの方法がある。図４は、一実施形態を図式的に説明し、ここで、各レーン内の乗算器２７０からの出力は、ネゲート回路２７２によってネゲートされ、次いで、元の乗算結果とネゲートされた乗算結果の両方を、入力として、マルチプレクサ２７５に提供し、これらの演算を加算器制御ブロック２１０からの出力によって制御する。次いで、マルチプレクサからの出力は、加算器２８０に入力され、マルチプレクサからの出力と任意の入力累算値との加算を実行する。したがって、並行処理の特定のレーンに対して、述語値が、乗加算演算が実行されることを示す場合、マルチプレクサ２７５にネゲートされない入力は、加算が選択され得る。反対に、対応するレーンに対して、述語値が、乗加算演算が実行されることを示す場合、マルチプレクサ２７５にネゲートされた入力は、加算器２８０への転送が選択される。
【００５９】
図５は、本発明の実施形態において、Ｎ行内のＳＩＭＤ  ＭＡＣ回路１１０によって実行される乗累算演算を図式的に説明する。図５に示されるように、乗算器回路内のＮ行は、Ｎ行の第１の入力データ要素４００およびＮ行の第２の入力データ要素４１０を受信し、それに基づいて、Ｎ行の乗算データ要素４２０の生成をもたらす、必要とされる乗算を実行する。入力データ要素の各々が、１６ビット幅であると仮定すると、乗算データ要素の各々は、少なくとも３２ビット幅であり得る。
【００６０】
その後、Ｎ行の乗算データ要素は、各レーンに対して提供される述語値に依存して、Ｎ行の初期累算データ要素に加算される、またはＮ行の初期累算データ要素から減算される。Ｎ行の初期累算データ要素は、述語化されたＭＡＣ命令によって識別された累算器レジスタのコンテンツによって指定され得る、または一実施形態において、規定され得る（例えば、ゼロ）。
【００６１】
Ｎ行内で実行される様々な加算および減算は、Ｎ行の乗累算（結果）データ要素４４０の生成をもたらし、累算器レジスタバンク１３０内の関連ＳＩＭＤ累算器レジスタに戻って記憶される。図５に示されるように、これらの個別の結果累算データ要素は、対応するレーンに適用できる述語値に依存して、乗加算演算、あるいは乗減算演算のいずれかの結果を示し得る。
【００６２】
上記の例において、述語値の「１」は、乗加算演算を示し、述語値の「０」は、乗減算演算を示すが、これらの値の意味は、必要に応じて、逆転され得る。
【００６３】
以下のＣコードは、初期累算値のベクトルを指定する述語化された乗累算命令、および初期累算値のベクトルが指定されない述語化された乗累算命令の両方に対して、標準ベクトル抽出およびスカラ乗算によるベクトルに関して、上述の乗累算演算の機能論的モデルを提供する。
【００６４】
１） 初期累算値のベクトルがある述語化されたＭＡＣ命令
【００６５】
ｖｉｎｔ３２Ｌ＿ｔ  ｖｃｍｌａｍｌｓｌ＿ｓ１６（ｖｉｎｔ３２Ｌ＿ｔ  ｖａｃｃ，  ｖｉｎｔ１６＿ｔ  ｖａ，  ｖｉｎｔ１６＿ｔ  ｖｂ，  ｖｂｏｏｌ１６＿ｔ  ｖｐ）
｛
ＶＮＥＷ＿ｓ３２Ｌ（ｒｅｓ）；
ｕｉｎｔ＿ｔ  ｉ；
ｆｏｒ  （ｉ＝０；  ｉ＜ｎ；  ｉ＋＋）  ｛
ｉｎｔ＿３２Ｌ  ｔｍｐ；
ｉｆ  （ＶＧＥＴ＿ｐ１６（ｖｐ，ｉ）  ＝＝  ｔｒｕｅ）  ｛
ｔｍｐ  ＝  ｍｌａｌ＿ｓ１６（ＶＧＥＴ＿ｓ３２Ｌ（ｖａｃｃ，ｉ），ＶＧＥＴ＿ｓ１６（ｖａ，ｉ），  ＶＧＥＴ＿ｓ１６（ｖｂ，ｉ））；
｝  ｅｌｓｅ  ｛
ｔｍｐ  ＝  ｍｌｓｌ＿ｓ１６（ＶＧＥＴ＿ｓ３２Ｌ（ｖａｃｃ，ｉ），ＶＧＥＴ＿ｓ１６（ｖａ，ｉ），  ＶＧＥＴ＿ｓ１６（ｖｂ，ｉ））；
｝
ＶＳＥＴ＿ｓ３２Ｌ（ｒｅｓ，ｉ，ｔｍｐ）；
｝
ｒｅｔｕｒｎ  ｒｅｓ；
｝
【００６６】
上記のＣコードの１行目は、入力として、入力データ要素ベクトルｖａおよびｖｂ、初期累算ベクトルｖａｃｃ、ならびに述語値ベクトルｖｐを取る、述語化された乗累算命令（本明細書において、乗加算／乗減算（ｍｌａｍｌｓ）命令と称される）を識別する。次いで、命令に応答して実行される演算は、Ｃコードの残りに設定される。第１に、結果ベクトル「ｒｅｓ」を示し、整数変数ｉを示す。２つの１６ビット入力データ要素を乗算することによって生成される乗算結果に適合するために、ベクトルｖａおよびｖｂ内の個別データ要素が、１６ビット幅である一方、ベクトルｖａｃｃおよびベクトルｒｅｓ内の個別データ要素は、３２ビット幅である。
【００６７】
次いで、ループを入力し、これは、０とＮ−１の間の全てのｉの値に対して反復される。上記のＣコードに示されるように、ループの各反復において、述語値が真であるならば、ｖａおよびｖｂの入力は、乗算され、次いで、ｖａｃｃ入力（ｍｌａｌ＿ｓ１６）に加算される。さもなければ、ｖａおよびｖｂの入力は、乗算され、次いで、ｖａｃｃ入力（ｍｌｓｌ＿ｓ３２）から減算される。結果は、３２ビットの整数「ｔｍｐ」として記憶される。
【００６８】
ＶＧＥＴ／ＶＳＥＴ＿＊機能は、例えば、ＶＳＥＴ＿ｓ３２Ｌ（ｒｅｓ，ｉ，ｔｍｐ）が、ベクトル「ｒｅｓ」において、ｉ番目の要素に、「ｔｍｐ」の値を書き込むような、１つのベクトル要素を読み込む、または書き込むために使用される。
【００６９】
２） 初期累算がない述語化されたＭＡＣ命令
【００７０】
ｖｉｎｔ３２Ｌ＿ｔ  ｖｃｍｕｌｎｅｇｌ＿ｓ１６（ｖｉｎｔ１６＿ｔ  ｖａ，  ｖｉｎｔ１６＿ｔ  ｖｂ，  ｖｂｏｏｌ１６＿ｔ  ｖｐ）
｛
ＶＮＥＷ＿ｓ３２Ｌ（ｒｅｓ）；
ｕｉｎｔ＿ｔ  ｉ；
ｆｏｒ  （ｉ＝０；  ｉ＜ｎ；  ｉ＋＋）  ｛
ｉｎｔ＿３２Ｌ  ｔｍｐ；
ｉｆ  （ＶＧＥＴ＿ｐ１６（ｖｐ，ｉ）  ＝＝  ｔｒｕｅ）  ｛
ｔｍｐ  ＝  ｍｕｌｌ＿ｓ１６（ＶＧＥＴ＿ｓ１６（ｖａ，ｉ），  ＶＧＥＴ＿ｓ１６（ｖｂ，ｉ））；
｝  ｅｌｓｅ  ｛
ｔｍｐ  ＝  ｎｅｇ＿ｓ３２（ｍｕｌｌ＿ｓ１６（ＶＧＥＴ＿ｓ１６（ｖａ，ｉ），  ＶＧＥＴ＿ｓ１６（ｖｂ，ｉ）））；
｝
ＶＳＥＴ＿ｓ３２Ｌ（ｒｅｓ，ｉ，ｔｍｐ）；
｝
ｒｅｔｕｒｎ  ｒｅｓ；
｝
【００７１】
本例において、述語化されたＭＡＣ命令は、乗算／ネゲート命令として称される。上記のＣコードに示されるように、述語値が真であるならば、入力は共に、乗算される（ｍｕｌｌ＿ｓ１６）。さもなければ、入力は共に、乗算され、次いで、結果は、ネゲートされる（ｎｅｇ＿ｓ３２）。
【００７２】
先述の例と同様に、ＶＧＥＴ／ＶＳＥＴ＿＊機能は、例えば、ＶＳＥＴ＿ｓ３２Ｌ（ｒｅｓ，ｉ，ｔｍｐ）が、ベクトル「ｒｅｓ」において、ｉ番目の要素に、「ｔｍｐ」の値を書き込むような、１つのベクトル要素を読み込む、または書き込むために使用される。
【００７３】
上述の実施形態において、第１の入力データ要素、第２の入力データ要素、および累算データ要素は全て、実数であると仮定される。しかしながら、実施形態は、実数と共に使用するとは限定されない。例えば、代替的な実施形態において、第１の入力データ要素および第２の入力データ要素のうちの１つまたは両方は、実数部および虚数部を含む複素数であり得、乗累算演算が、各レーン内のＳＩＭＤ  ＭＡＣ回路１１０によって実行される場合、結果累算データ要素として、複素数のベクトルを生成し、各々は、実数部および虚数部を有する、複素乗累算演算であり得る。
【００７４】
複素乗累算演算が実行される例を考慮すると、各々の乗算は、対応する複素乗算結果データ要素の実数部および虚数部を生成するために、乗加算および乗減算演算シーケンスのパフォーマンスを含み得る。特に、ｖａ［ｉ］＊ｖｂ［ｉ］の一般例を考慮すると、以下の計算が、実行され得る。
【００７５】
Ｍｕｌｔｉｐｌｙ  ｒｅａｌ  ｐａｒｔ  ｒｅｓｕｌｔ＝ｖｂＲ［ｉ］＊ｖａＲ［ｉ］−ｖｂＩ［ｉ］＊ｖａＩ［ｉ］
Ｍｕｌｔｉｐｌｙ  ｉｍａｇｉｎａｒｙ  ｐａｒｔ  ｒｅｓｕｌｔ＝ｖｂＲ［ｉ］＊ｖａＩ［ｉ］＋ｖｂＩ［ｉ］＊ｖａＲ［ｉ］
（ここで、「Ｒ」は、実数部を示し、「Ｉ」は、虚数部を示す）。
【００７６】
実数および虚数の乗算結果は、次いで、前述の実数および虚数累算結果と共に累算され得る。
【００７７】
上記の例において、入力データ要素は共に、複素数である一方、代替的な実施形態において、これらのうちの１つのみが、入力ベクトルにおいて、複素数として、提供され得る。例えば、第１の入力データ要素が複素数として提供され得る一方、第２の入力データ要素は、実数として提供され得る。
【００７８】
一実施形態において、このような状況は、上述の複素数実施形態の特別な場合として処理され、ここで、ｖｂにおいて、データ要素が実数である一方、ｖａおよびｖａｃｃベクトルにおいて、データ要素は、複素数である。この演算を実行するために、実数ｖｂ要素は、以下の通りに内部で複素数に変換され得る。
【００７９】
ｉｎｔｅｒｎａｌ＿ｖｂＲ［ｋ］＝ｖｂ［ｋ］
ｉｎｔｅｒｎａｌ＿ｖｂＩ［ｋ］＝０
【００８０】
次いで、複素乗累算演算が、上に述べられるように、実行され得る。
【００８１】
したがって、複素乗累算演算に対して、２つの別個の乗累算演算が、以下の通りに実行されることが見られる。
【００８２】
ｖａｃｃＲ［ｉ］＝ｖａｃｃＲ［ｉ］＋（ｖｂＲ［ｉ］＊ｖａＲ［ｉ］−ｖｂＩ［ｉ］＊ｖａＩ［ｉ］）
ｖａｃｃＩ［ｉ］＝ｖａｃｃＩ［ｉ］＋（ｖｂＲ［ｉ］＊ｖａＩ［ｉ］＋ｖｂＩ［ｉ］＊ｖａＲ［ｉ］）
【００８３】
一実施形態において、対応する第１および第２のデータ要素の実数部および虚数部の両方に関しては、実行される乗累算演算を制御するように、単一の述語値を提供することができる。その場合には、以下のオプションが、上述の２つの乗累算演算に対して可能である。
【００８４】
ｖａｃｃＲ［ｉ］＝ｖａｃｃＲ［ｉ］＋（ｖｂＲ［ｉ］＊ｖａＲ［ｉ］−ｖｂＩ［ｉ］＊ｖａＩ［ｉ］）      ｉｆ  ｖｐ［ｉ］＝ｔｒｕｅ
ｖａｃｃＲ［ｉ］＝ｖａｃｃＲ［ｉ］−（ｖｂＲ［ｉ］＊ｖａＲ［ｉ］−ｖｂＩ［ｉ］＊ｖａＩ［ｉ］）      ｉｆ  ｖｐ［ｉ］＝ｆａｌｓｅ
【００８５】
ｖａｃｃＩ［ｉ］＝ｖａｃｃＩ［ｉ］＋（ｖｂＲ［ｉ］＊ｖａＩ［ｉ］＋ｖｂＩ［ｉ］＊ｖａＲ［ｉ］）      ｉｆ  ｖｐ［ｉ］＝ｔｒｕｅ
ｖａｃｃＩ［ｉ］＝ｖａｃｃＩ［ｉ］−（ｖｂＲ［ｉ］＊ｖａＩ［ｉ］＋ｖｂＩ［ｉ］＊ｖａＲ［ｉ］）      ｉｆ  ｖｐ［ｉ］＝ｆａｌｓｅ
【００８６】
しかしながら、代替的な実施形態において、述語値は、複素結果累算データ要素の実数部を生成するために実行される乗累算演算に対する第１の述語値、および複素結果累算データ要素の虚数部を生成するために実行される乗累算演算に対する第２の述語値を含み得る。これにより、複素数に関連して、述語化された乗累算命令の使用において、更に柔軟性を提供し得る。このような実施形態において、以下のオプションが、上述の２つの乗累算演算に対して可能である。
【００８７】
ｖａｃｃＲ［ｉ］＝ｖａｃｃＲ［ｉ］＋（ｖｂＲ［ｉ］＊ｖａＲ［ｉ］−ｖｂＩ［ｉ］＊ｖａＩ［ｉ］）      ｉｆ  ｖｐＲ［ｉ］＝ｔｒｕｅ
ｖａｃｃＲ［ｉ］＝ｖａｃｃＲ［ｉ］−（ｖｂＲ［ｉ］＊ｖａＲ［ｉ］−ｖｂＩ［ｉ］＊ｖａＩ［ｉ］）      ｉｆ  ｖｐＲ［ｉ］＝ｆａｌｓｅ
【００８８】
ｖａｃｃＩ［ｉ］＝ｖａｃｃＩ［ｉ］＋（ｖｂＲ［ｉ］＊ｖａＩ［ｉ］＋ｖｂＩ［ｉ］＊ｖａＲ［ｉ］）      ｉｆ  ｖｐＩ［ｉ］＝ｔｒｕｅ
ｖａｃｃＩ［ｉ］＝ｖａｃｃＩ［ｉ］−（ｖｂＲ［ｉ］＊ｖａＩ［ｉ］＋ｖｂＩ［ｉ］＊ｖａＲ［ｉ］）      ｉｆ  ｖｐＩ［ｉ］＝ｆａｌｓｅ
【００８９】
なお更なる実施形態において、１複素数あたりの２つの述語値は、再使用され得るが、これらの述語値と共に、乗累算演算の各々において、２つの乗算演算を独立して制御するために使用される。このような実施形態において、以下のオプションが、上述の２つの乗累算演算に対して可能である。
【００９０】
ｖａｃｃＲ［ｉ］＝ｖａｃｃＲ［ｉ］＋（ｖｂＲ［ｉ］＊ｖａＲ［ｉ］）−（ｖｂＩ［ｉ］＊ｖａＩ［ｉ］）      ｉｆ  ｖｐＲ［ｉ］＝＝ｔｒｕｅ  ａｎｄ  ｖｐＩ［ｉ］＝＝ｔｒｕｅ
ｖａｃｃＲ［ｉ］＝ｖａｃｃＲ［ｉ］＋（ｖｂＲ［ｉ］＊ｖａＲ［ｉ］）＋（ｖｂＩ［ｉ］＊ｖａＩ［ｉ］）ｉｆ  ｖｐＲ［ｉ］＝＝ｔｒｕｅ  ａｎｄ  ｖｐＩ［ｉ］＝＝ｆａｌｓｅ
ｖａｃｃＲ［ｉ］＝ｖａｃｃＲ［ｉ］−（ｖｂＲ［ｉ］＊ｖａＲ［ｉ］）−（ｖｂＩ［ｉ］＊ｖａＩ［ｉ］）ｉｆ  ｖｐＲ［ｉ］＝＝ｆａｌｓｅ  ａｎｄ  ｖｐＩ［ｉ］＝＝ｔｒｕｅ
【００９１】
ｖａｃｃＲ［ｉ］＝ｖａｃｃＲ［ｉ］−（ｖｂＲ［ｉ］＊ｖａＲ［ｉ］）＋（ｖｂＩ［ｉ］＊ｖａＩ［ｉ］）ｉｆ  ｖｐＲ［ｉ］＝＝ｆａｌｓｅ  ａｎｄ  ｖｐＩ［ｉ］＝＝ｆａｌｓｅ
【００９２】
ｖａｃｃＩ［ｉ］＝ｖａｃｃＩ［ｉ］＋（ｖｂＲ［ｉ］＊ｖａＩ［ｉ］）＋（ｖｂＩ［ｉ］＊ｖａＲ［ｉ］）ｉｆ  ｖｐＲ［ｉ］＝＝ｔｒｕｅ  ａｎｄ  ｖｐＩ［ｉ］＝＝ｔｒｕｅ
ｖａｃｃＩ［ｉ］＝ｖａｃｃＩ［ｉ］＋（ｖｂＲ［ｉ］＊ｖａＩ［ｉ］）−（ｖｂＩ［ｉ］＊ｖａＲ［ｉ］）ｉｆ  ｖｐＲ［ｉ］＝＝ｔｒｕｅ  ａｎｄ  ｖｐＩ［ｉ］＝＝ｆａｌｓｅ
ｖａｃｃＩ［ｉ］＝ｖａｃｃＩ［ｉ］−（ｖｂＲ［ｉ］＊ｖａＩ［ｉ］）＋（ｖｂＩ［ｉ］＊ｖａＲ［ｉ］）ｉｆ  ｖｐＲ［ｉ］＝＝ｆａｌｓｅ  ａｎｄ  ｖｐＩ［ｉ］＝＝ｔｒｕｅ
ｖａｃｃＩ［ｉ］＝ｖａｃｃＩ［ｉ］−（ｖｂＲ［ｉ］＊ｖａＩ［ｉ］）−（ｖｂＩ［ｉ］＊ｖａＲ［ｉ］）ｉｆ  ｖｐＲ［ｉ］＝＝ｆａｌｓｅ  ａｎｄ  ｖｐＩ［ｉ］＝＝ｆａｌｓｅ
【００９３】
上記の実施形態の延長として、実数部に対する乗累算演算の設定および虚数部に対する乗累算演算の設定において完全に独立させるために、１複素数あたり４つの述語値を指定することは可能であろう。
【００９４】
更なる代替的な実施形態において、第１の入力データ要素および第２の入力データ要素のうちの少なくとも１つは、浮動小数点数であり得、乗累算演算が、データ処理回路によって実行される場合には、結果累算データ要素として、浮動小数点数を生成する浮動小数点の乗累算演算である。かかる実施形態において、ＳＩＭＤ  ＭＡＣ回路１１０は、一般に、必要とされる乗累算演算を実行するために、浮動小数点の乗算および加算回路を含み得る。
【００９５】
一実施形態において、第１の入力データ要素および第２の入力データ要素のうちの１つだけは、浮動小数点数であり得、他の入力データ要素は、固定小数点数であり得る。しかしながら、別の実施形態において、第１の入力データ要素および第２の入力データ要素は共に、浮動小数点数である。
【００９６】
本発明の実施形態の上述記載から、本発明の実施形態の述語化されたＭＡＣ命令は、データ処理装置内の乗累算演算シーケンスを実行するための特に効率的な機構を提供し、述語値の制御下で、実現され得る専用のＭＡＣ回路を利用するパフォーマンス利益を可能にする一方、同一の命令を使用して、乗加算または乗減算演算を実行するための柔軟性も提供することが見られる。該アプローチは、ＳＩＭＤ  ＭＡＣ回路と関連して採用される際、特に、有益であり、ここで、乗算乗累算演算は、乗加算あるいは乗減算演算のいずれかを実行するように対応する述語値に基づいて、独立して構成されるこれらのレーンを有する、Ｎ行の並行処理内で並行して実行され得る。このようなアプローチは、電波信号を処理する際、必要とされるような、フィルタ演算を実行するために、高パフォーマンスおよびエネルギー効率の良い機構を提供することができる。
【００９７】
上述の技法は、上述の述語化されたＭＡＣ命令を含むネイティブな命令シーケンスを起動するハードウェアによって実行され得る一方、代替的な実施形態において、かかる命令は、仮想機械環境において起動され得、ここで、該命令は、仮想機械に対してネイティブであるが、仮想機械は、異なるネイティブな命令セットを有するハードウェアにおいて起動しているソフトウェアによって実装される。仮想機械環境は、完全命令セットの起動をエミュレートする完全な仮想機械環境を提供するか、または部分的であり得、例えば、現行技法の命令を含む、いくつかの命令のみが、ハードウェアによって捕捉され、かつ、部分的な仮想機械によってエミュレートされる。
【００９８】
より具体的には、上記の述語化されたＭＡＣ命令は、完全な、または部分的な仮想機械へのネイティブな命令として、上記のＳＩＭＤ処理回路を提供するように、組み合わせてその基本となるハードウェアプラットホーム操作と一緒に仮想機械で起動され得る。
【００９９】
図６は、使用され得る、このような仮想機械実装を説明する。先述の実施形態は、関与する命令に対応する特定の処理ハードウェアを操作するための装置および方法に関して本発明を実装する一方、ハードウェアデバイスのいわゆる仮想機械実装を提供することも可能である。これらの仮想機械実装は、仮想機械プログラム５１０をサポートするホスト動作システム５２０を実行するホストプロセッサ５３０上で実行する。一般に、大きく、強力なプロセッサは、妥当な速度で起動する仮想機械実装を提供するのに必要とされるが、このようなアプローチは、互換性または再使用の理由により別のプロセッサにネイティブなコードを実行することが望ましい場合等のある状況において正当化され得る。仮想機械プログラム５１０は、アプリケーションプログラム５００にアプリケーションプログラムインターフェースを提供し、これは、仮想機械プログラム５１０によってモデル化されたデバイスである実際のハードウェアによって提供され得る、アプリケーションプログラムインターフェースと同一である。したがって、上述の述語化されたＭＡＣ命令を含む、プログラム命令は、仮想機械ハードウェアとのそれらの相互作用をモデル化するための仮想機械プログラム５１０を使用して、アプリケーションプログラム５００内から起動され得る。
【０１００】
特定の実施形態が、本明細書に記載されているが、本発明は、それに限定されず、多くの修正およびそれへの追加は、本発明の範囲内でなされ得ることを理解されよう。例えば、以下の従属請求項の特性は、本発明の範囲から逸脱することなく、独立請求項の特性と様々に組み合わされ得る。
【符号の説明】
【０１０１】
１３０  累算器レジスタバンク
１３５  述語レジスタバンク
１４０  ベクトルレジスタバンク
１６０  コントローラ
２１０  加算器制御ブロック
２１５  レーン
２１７  乗算器回路
２１９  加算／減算回路
２２０  レーン
【図１】
2011096254.tif 000003
【図２】
2011096254.tif 000004
【図３】
2011096254.tif 000005
【図４】
2011096254.tif 000006
【図５】
2011096254.tif 000007
【図６】
2011096254.tif 000008
【外国語明細書】
2011096254.tif 000009
2011096254.tif 000010
2011096254.tif 000011
2011096254.tif 000012
2011096254.tif 000013
2011096254.tif 000014
2011096254.tif 000015
2011096254.tif 000016
2011096254.tif 000017
2011096254.tif 000018
2011096254.tif 000019
2011096254.tif 000020
2011096254.tif 000021
2011096254.tif 000022
2011096254.tif 000023
2011096254.tif 000024
2011096254.tif 000025
2011096254.tif 000026
2011096254.tif 000027
2011096254.tif 000028
2011096254.tif 000029
2011096254.tif 000030
2011096254.tif 000031
2011096254.tif 000032
2011096254.tif 000033
2011096254.tif 000034
2011096254.tif 000035
2011096254.tif 000036
2011096254.tif 000037
2011096254.tif 000038
2011096254.tif 000039
2011096254.tif 000040
2011096254.tif 000041
2011096254.tif 000042
2011096254.tif 000043
2011096254.tif 000044
2011096254.tif 000045