(57)【要約】  ソフトウェア構成可能処理要素のための改善されたプロセッサ命令のためのシステムのさまざまな実施形態について記述する。詳細には、ＦＥＣの符号化および復号のために有用な関数を加速するさまざまな実施形態について記述する。詳細には、プロセッサ命令の１つを受信したことに応答して、関係がある関数の１つまたは複数のインスタンスを実装するように処理要素を構成してもよい。その後、プロセッサ命令の異なる１つを受信したことに応答して、異なる関数を実装するように処理要素を再構成してもよい。クロックサイクルあたり１つまたは複数の解に近いスループットで、関係がある関数の１つまたは複数のインスタンスを処理要素が繰り返し遂行することにより、開示するプロセッサ命令の各々を繰り返し実装してもよい。【選択図】図４
2019508785.tif 000002
【特許請求の範囲】
【請求項１】
処理要素であって、
第１の入力オペランドおよび第２の入力オペランドを指定する第１の命令を実行するように構成された二重データ−処理経路を備え、前記第１の命令の実行では、前記処理要素は、
前記第１の入力オペランドの絶対値および符号関数を決定し、
前記第２の入力オペランドの絶対値および符号関数を決定し、
前記第１の入力オペランドの前記絶対値および前記第２の入力オペランドの前記絶対値の最小値を備える最小の大きさ値を決定し、
前記第１の入力オペランドの前記符号関数および前記第２の入力オペランドの前記符号関数の積を備える最終符号関数を決定し、
前記最小の大きさ値に前記最終符号関数を適用する
ように構成され、前記最小の大きさ値に前記最終符号関数を適用した結果は、前記第１の入力オペランドおよび前記第２の入力オペランドに関する結果値を構成する処理要素。
【請求項２】
前記第１の命令は、前記第１の入力オペランドが配置されたメモリ位置を指定することにより前記第１の入力オペランドを指定し、前記第２の入力オペランドが配置されたメモリ位置を指定することにより前記第２の入力オペランドを指定する、請求項１に記載の処理要素。
【請求項３】
前記第１の命令は、複数組の第１の入力オペランドおよび複数組の第２の入力オペランドをさらに指定し、前記第１の命令の実行では、前記処理要素は、前記複数組の第１の入力オペランドおよび前記複数組の第２の入力オペランドに関する複数組の結果値を作り出すように構成される、請求項１に記載の処理要素。
【請求項４】
前記二重データ−処理経路は、第１の二重データ−処理経路を備え、前記処理要素は、
前記第１の二重データ−処理経路と同じ手法で構成された第２の二重データ−処理経路
をさらに備える、請求項１に記載の処理要素。
【請求項５】
処理要素であって、
複数のパイプライン化動作ステージであって、各処理ステージは複数のデータ−処理動作を遂行するようにそれぞれ構成可能な複数のパイプライン化動作ステージを備え、
前記処理要素は、第１の命令を受信したことに応答して、
第１の入力値の絶対値および符号関数を決定し、かつ第２の入力値の絶対値および符号関数を決定するように第１の動作ステージを構成し、
前記第１の入力値の前記絶対値と前記第２の入力値の前記絶対値の最小値を決定し、かつ前記第１の入力値の前記符号関数と前記第２の入力値の前記符号関数の積を備える最終符号関数を決定するように第２の動作ステージを構成し、
前記第１の入力値の前記絶対値と前記第２の入力値の前記絶対値の前記最小値に前記最終符号関数を適用するように第３の動作ステージを構成する
ように構成される処理要素。
【請求項６】
第１のクロックサイクル中に、前記第１の入力値の前記絶対値および前記符号関数を決定し、かつ前記第２の入力値の前記絶対値および前記符号関数を決定するように前記第１の動作ステージを構成し、
第２のクロックサイクル中に、前記第１の入力値の前記絶対値と前記第２の入力値の前記絶対値の前記最小値を決定し、かつ前記最終符号関数を決定するように前記第２の動作ステージを構成し、
第３のクロックサイクル中に、前記第１の入力値の前記絶対値と前記第２の入力値の前記絶対値の前記最小値に前記最終符号関数を適用するように前記第３の動作ステージを構成する、
請求項５に記載の処理要素。
【請求項７】
前記第１の命令を受信したことに応答して、複数対の入力値を順次処理するようにさらに構成され、前記第１の入力値および前記第２の入力値は、複数対の入力値の第１対を構成し、
複数の連続するクロックサイクルの各クロックサイクル中に、それぞれの対の入力値の各入力値の絶対値および符号を決定するように前記第１の動作ステージを構成する、
請求項６に記載の処理要素。
【請求項８】
第２の異なる命令を受信したことに応答して、前記第１の命令を受信したことに応答して構成されるデータ−処理動作と異なる複数のデータ−処理動作を遂行するように少なくとも１つの動作ステージを構成するように、さらに構成される、請求項５に記載の処理要素。
【請求項９】
前記複数のパイプライン化動作ステージは、第１の複数のパイプライン化動作ステージを備え、前記処理要素は、
前記第１の複数のパイプライン化動作ステージと同じ手法で構成された第２の複数のパイプライン化動作ステージ
をさらに備える、請求項５に記載の処理要素。
【請求項１０】
動作ステージを構成するステップは、前記動作ステージにより遂行すべき複数のデータ−処理動作を選択するステップと、前記選択したデータ−処理動作への入力が提供されるレジスタを選択するステップとを備える、請求項５に記載の処理要素。
【請求項１１】
処理要素であって、
第１のオペランド値および第２のオペランド値を含む第１の入力オペランド、ならびに第３のオペランド値および第４のオペランド値を含む第２の入力オペランドを指定する第１の命令を実行するように構成された二重データ−処理経路を備え、前記第１の命令の実行では、前記処理要素は、
前記第１のオペランド値に第１の符号関数を適用することにより、第１の符号付値を決定し、
前記第２のオペランド値に第２の符号関数を適用することにより、第２の符号付値を決定し、
前記第３のオペランド値に前記第１の符号付値を加算し、
前記第４のオペランド値に前記第２の符号付値を加算する
ように構成される処理要素。
【請求項１２】
前記第１の命令は、前記第１の符号関数および前記第２の符号関数を指定する、請求項１１に記載の処理要素。
【請求項１３】
前記第１の命令は、前記第１の入力オペランドが配置されたメモリ位置を指定することにより前記第１の入力オペランドを指定し、前記第２の入力オペランドが配置されたメモリ位置を指定することにより前記第２の入力オペランドを指定する、請求項１１に記載の処理要素。
【請求項１４】
前記第１の命令は、複数組の第１の入力オペランドおよび複数組の第２の入力オペランドをさらに指定し、前記第１の命令の実行では、前記処理要素は、前記複数組の第１の入力オペランドおよび前記複数組の第２の入力オペランドに関する複数組の結果値を作り出すように構成される、請求項１１に記載の処理要素。
【請求項１５】
ビットパック型レジスタをさらに備え、前記第１の命令の実行では、前記処理要素は、
前記ビットパック型レジスタ内に、前記複数組の第１の入力オペランドの複数組の第１の入力オペランド値に対応する複数組の第１の符号関数を記憶し、
前記ビットパック型レジスタ内に、前記複数組の第１の入力オペランドの複数組の第２の入力オペランド値に対応する複数組の第２の符号関数を記憶する
ように構成される、請求項１４に記載の処理要素。
【請求項１６】
前記二重データ−処理経路は、第１の二重データ−処理経路を備え、前記処理要素は、
前記第１の二重データ−処理経路と同じ手法で構成された第２の二重データ−処理経路
をさらに備える、請求項１４に記載の処理要素。
【請求項１７】
処理要素であって、
第１のオペランド値および第２のオペランド値を含む入力オペランド、ならびに第１の符号関数および第２の符号関数を含む符号オペランドを指定する第１の命令を実行するように構成された二重データ−処理経路を備え、前記第１の命令の実行では、前記処理要素は、
前記第１のオペランド値に前記第１の符号関数を適用し、
前記第２のオペランド値に前記第２の符号関数を適用する
ように構成される処理要素。
【請求項１８】
前記第１の命令は、前記入力オペランドが配置されたメモリ位置を指定することにより前記入力オペランドを指定し、前記符号オペランドが配置されたメモリ位置を指定することにより前記符号オペランドを指定する、請求項１７に記載の処理要素。
【請求項１９】
前記第１の命令は、複数組の入力オペランドおよび複数組の符号オペランドをさらに指定し、前記第１の命令の実行では、前記処理要素は、前記複数組の入力オペランドおよび前記複数組の符号オペランドに関する複数組の結果値を作り出すように構成される、請求項１７に記載の処理要素。
【請求項２０】
前記二重データ−処理経路は、第１の二重データ−処理経路を備え、前記処理要素は、
前記第１の二重データ−処理経路と同じ手法で構成された第２の二重データ−処理経路
をさらに備える、請求項１７に記載の処理要素。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の分野は、一般にソフトウェア構成可能処理要素でのプロセッサ命令に関する。
【背景技術】
【０００２】
前方誤り訂正（Ｆｏｒｗａｒｄ  Ｅｒｒｏｒ  Ｃｏｒｒｅｃｔｉｏｎ、ＦＥＣ）は、無線、有線、または任意の他の通信チャネルで誤りを最小にするための広く普及した方法である。チャネルの送信側のＦＥＣ符号器および通信チャネルの受信側のＦＥＣ復号器によりＦＥＣを実装することができる。多くのＦＥＣの符号化および復号の方法は、かなりの計算を必要とし、同時に、「リアルタイム」で遂行する、すなわち、選んだ用途に必要とされる通信速度を維持する必要がある。
【０００３】
ＦＥＣは、符号を使用して遂行されてもよく、この場合、入力データは、符号語に符号化され、受信側に送信され、受信側は、受信した符号語を復号し、回復した入力データとして結果を出力する。ＦＥＣ符号の例は、とりわけ低密度パリティ検査符号（Ｌｏｗ−Ｄｅｎｓｉｔｙ  Ｐａｒｉｔｙ−Ｃｈｅｃｋ  ｃｏｄｅ、ＬＤＰＣ）およびポーラ符号（Ｐｏｌａｒ  ｃｏｄｅ）である。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】米国特許第７，４１５，５９４号明細書
【特許文献２】米国特許第８，８８０，８６６号明細書
【特許文献３】米国特許第９，４３０，３６９号明細書
【特許文献４】米国特許出願公開第１５／３５９，８４５号明細書
【非特許文献】
【０００５】
【非特許文献１】Ｒ．Ｇａｌｌａｇｅｒ，“Ｌｏｗ-Ｄｅｎｓｉｔｙ  Ｐａｒｉｔｙ-Ｃｈｅｃｋ  Ｃｏｄｅｓ（低密度パリティ検査符号），”ＭＩＴ  Ｐｒｅｓｓ，１９６３
【非特許文献２】Ｅ．  Ａｒｉｋａｎ，“Ｃｈａｎｎｅｌ  Ｐｏｌａｒｉｚａｔｉｏｎ：Ａ  ｍｅｔｈｏｄ  ｆｏｒ  ｃｏｎｓｔｒｕｃｔｉｎｇ  ｃａｐａｃｉｔｙ  ａｃｈｉｅｖｉｎｇ  ｃｏｄｅｓ  ｆｏｒ  ｓｙｍｍｅｔｒｉｃ  ｂｉｎａｒｙ-ｉｎｐｕｔ  ｍｅｍｏｒｙｌｅｓｓ  ｃｈａｎｎｅｌｓ（通信路分極：対称２元無記憶通信路のための符号を達成する容量を構築する方法）”，ＩＥＥＥ  Ｔｒａｎｓ．  ｏｎ  Ｉｎｆ．  Ｔｈｅｏｒｙ，ｖｏｌ．５５，ｎｏ．７，ｐｐ．３０５１−３０７３，Ｊｕｌ．２００９．
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ＦＥＣの符号器および復号器の実装は、一連の数値データに対し何度も遂行される一連の基本計算動作から構成されてもよい。これらの基本動作を加速することは、符号器および復号器のリアルタイム性のために有益である。したがって、本分野で改善が望まれる。
【課題を解決するための手段】
【０００７】
ソフトウェア構成可能処理要素のための改善されたプロセッサ命令のためのシステムおよび方法のさまざまな実施形態について説明する。詳細には、ＦＥＣの符号化および復号のために有用な関数を加速するさまざまな実施形態について説明する。
【０００８】
第１の実施形態では、処理要素は、第１の入力オペランドおよび第２の入力オペランドを指定する第１の命令を実行するように構成された二重データ−処理経路を含んでもよい。第１の命令の実行では、処理要素は、第１の入力オペランドの絶対値および符号関数を決定し、第２の入力オペランドの絶対値および符号関数を決定し、第１の入力オペランドの絶対値と第２の入力オペランドの絶対値の最小値を備える最小の大きさ値を決定し、第１の入力値の符号関数と第２の入力値の符号関数の積を備える最終符号関数を決定し、最小の大きさ値に最終符号関数を適用するように構成されてもよく、そこでは、最小の大きさ値に最終符号関数を適用した結果は、第１の入力オペランドおよび第２の入力オペランドに関する結果値を構成する。
【０００９】
いくつかのシナリオでは、第１の命令は、第１の入力オペランドが配置されたメモリ位置を指定することにより第１の入力オペランドを指定してもよく、第２の入力オペランドが配置されたメモリ位置を指定することにより第２の入力オペランドを指定してもよい。
【００１０】
いくつかのシナリオでは、第１の命令は、複数組の第１の入力オペランドおよび複数組の第２の入力オペランドをさらに指定してもよく、そこでは、第１の命令の実行では、処理要素は、複数組の第１の入力オペランドおよび複数組の第２の入力オペランドに関する複数組の結果値を作り出すように構成される。
【００１１】
いくつかのシナリオでは、二重データ−処理経路は、第１の二重データ−処理経路を含んでもよく、処理要素は、第１の二重データ−処理経路と同じ手法で構成された第２の二重データ−処理経路をさらに含んでもよい。
【００１２】
別の実施形態では、処理要素は、複数のパイプライン化動作ステージを含んでもよい。各動作ステージは、複数のデータ−処理動作を遂行するように構成可能であってもよい。第１の命令を受信したことに応答して動作ステージを構成するように、処理要素を構成する。処理要素は、第１の入力値の絶対値および符号関数を決定し、かつ第２の入力値の絶対値および符号関数を決定するように、第１の動作ステージを構成してもよい。処理要素は、第１の入力値の絶対値と第２の入力値の絶対値の最小値を決定し、かつ第１の入力値の符号関数と第２の入力値の符号関数の積を備える最終符号関数を決定するように、第２の動作ステージを構成してもよい。処理要素は、第１の入力値の絶対値と第２の入力値の絶対値の最小値に最終符号関数を適用するように、第３の動作ステージを構成してもよい。
【００１３】
いくつかのシナリオでは、第１のクロックサイクル中に、第１の入力値の絶対値および符号関数を決定し、かつ第２の入力値の絶対値および符号関数を決定するように、第１の動作ステージを構成してもよい。第２のクロックサイクル中に、第１の入力値の絶対値と第２の入力値の絶対値の最小値を決定し、かつ最終符号関数を決定するように、第２の動作ステージを構成してもよい。第３のクロックサイクル中に、第１の入力値の絶対値と第２の入力値の絶対値の最小値に最終符号関数を適用するように第３の動作ステージを構成してもよい。
【００１４】
いくつかのシナリオでは、第１の命令を受信したことに応答して、複数対の入力値を順次処理するように、処理要素をさらに構成してもよく、そこでは、第１の入力値および第２の入力値は、複数対の入力値の第１対を構成し、そこでは、複数の連続するクロックサイクルの各クロックサイクル中に、それぞれの対の入力値の各入力値の絶対値および符号を決定するように、第１の動作ステージを構成する。
【００１５】
いくつかのシナリオでは、第２の異なる命令を受信したことに応答して、第１の命令を受信したことに応答して構成されるデータ−処理動作と異なる複数のデータ−処理動作を遂行するように少なくとも１つの動作ステージを構成するように、処理要素をさらに構成してもよい。
【００１６】
いくつかのシナリオでは、複数のパイプライン化動作ステージは、第１の複数のパイプライン化動作ステージを含んでもよく、処理要素は、第１の複数のパイプライン化動作ステージと同じ手法で構成された第２の複数のパイプライン化動作ステージをさらに含んでもよい。
【００１７】
いくつかのシナリオでは、動作ステージを構成するステップは、動作ステージにより遂行すべき複数のデータ−処理動作を選択するステップ、および選択したデータ−処理動作への入力が提供されるレジスタを選択するステップを含んでもよい。
【００１８】
別の実施形態は、第１のオペランド値および第２のオペランド値を含む第１の入力オペランド、ならびに第３のオペランド値および第４のオペランド値を含む第２の入力オペランドを指定する第１の命令を実行するように構成された二重データ−処理経路を含んでもよい。第１の命令の実行では、第１のオペランド値に第１の符号関数を適用することにより第１の符号付値を決定し、第２のオペランド値に第２の符号関数を適用することにより第２の符号付値を決定し、第３のオペランド値に第１の符号付値を加算し、第４のオペランド値に第２の符号付値を加算するように、処理要素を構成してもよい。
【００１９】
いくつかのシナリオでは、第１の命令は、第１の符号関数および第２の符号関数をさらに指定してもよい。
【００２０】
いくつかのシナリオでは、第１の命令は、第１の入力オペランドが配置されたメモリ位置を指定することにより第１の入力オペランドを指定してもよく、第２の入力オペランドが配置されたメモリ位置を指定することにより第２の入力オペランドを指定してもよい。
【００２１】
いくつかのシナリオでは、第１の命令は、複数組の第１の入力オペランドおよび複数組の第２の入力オペランドをさらに指定してもよく、そこでは、第１の命令の実行では、複数組の第１の入力オペランドおよび複数組の第２の入力オペランドに関する複数組の結果値を作り出すように、処理要素を構成する。
【００２２】
いくつかのシナリオでは、処理要素は、ビットパック型レジスタをさらに含んでもよい。第１の命令の実行では、ビットパック型レジスタに複数組の第１の入力オペランドの複数組の第１のオペランド値に対応する複数組の第１の符号関数を記憶し、ビットパック型レジスタに複数組の第１の入力オペランドの複数組の第２のオペランド値に対応する複数組の第２の符号関数を記憶するように、処理要素を構成してもよい。
【００２３】
いくつかのシナリオでは、二重データ−処理経路は、第１の二重データ−処理経路であってもよく、処理要素は、第１の二重データ−処理経路と同じ手法で構成された第２の二重データ−処理経路をさらに含んでもよい。
【００２４】
別の実施形態は、第１のオペランド値および第２のオペランド値を含む入力オペランド、ならびに第１の符号関数および第２の符号関数を含む符号オペランドを指定する第１の命令を実行するように構成された二重データ−処理経路を含む処理要素を含んでもよい。第１の命令の実行では、第１のオペランド値に第１の符号関数を適用し、第２のオペランド値に第２の符号関数を適用するように、処理要素を構成してもよい。
【００２５】
いくつかのシナリオでは、第１の命令は、入力オペランドが配置されたメモリ位置を指定することにより入力オペランドを指定してもよく、符号オペランドが配置されたメモリ位置を指定することにより符号オペランドを指定してもよい。
【００２６】
いくつかのシナリオでは、第１の命令は、複数組の入力オペランドおよび複数組の符号オペランドをさらに指定してもよい。第１の命令の実行では、複数組の入力オペランドおよび複数組の符号オペランドに関する複数組の結果値を作り出すように、処理要素を構成してもよい。
【００２７】
いくつかのシナリオでは、二重データ−処理経路は、第１の二重データ−処理経路であってよく、処理要素は、第１の二重データ−処理経路と同じ手法で構成された第２の二重データ−処理経路をさらに含んでもよい。
【００２８】
好ましい実施形態に関する以下の詳細な説明を以下の図面と併せて考察するとき、本発明をよりよく理解することができる。
【図面の簡単な説明】
【００２９】
【図１】一例の無線通信システムを示す。
【図２】機器の復号器内の、一例のプロセッサシステムを示す。
【図３】開示するプロセッサ命令のいずれかに従って動的に構成されてもよい処理要素の構成図を示す。
【図４】開示するプロセッサ命令のいずれかを実行するように構成されてもよい、処理要素内に含まれる実行ユニットの構成図を示す。
【図５】近似ｍｉｎ−ｓｕｍ（最小値−和）命令を実行するように構成された実行ユニットの構成図を示す。
【図６】Ｍ−幅の符号命令を実行するように構成された実行ユニットの構成図を示す。
【図７】Ｍ−幅のａｄｄ−ｓｉｇｎ（加算−符号）命令を実行するように構成された実行ユニットの構成図を示す。
【図８】１つまたは複数のビットパック型レジスタを使用してＭ−幅のａｄｄ−ｓｉｇｎ命令を実行するように構成された実行ユニットの構成図を示す。
【発明を実施するための形態】
【００３０】
本発明は、さまざまな修正形態および代替形態が可能であるが、それらの具体的実施形態について、図面で例として示し、本明細書で詳細に記述する。しかしながら、それらの実施形態に対する図面および詳細な記述は、開示する特定の形態に本発明を限定することを意図するものではなく、それどころか、本発明は、添付の特許請求の範囲により規定されるような本発明の精神および範囲にはいるすべての修正形態、均等物、および代替形態を包含するものであることを理解されたい。
【００３１】
以下の参考文献は、あたかも本明細書にあらゆる点で完全に示されているかのように、全体が参照により本明細書に組み入れられる。
【００３２】
Ｒ．Ｇａｌｌａｇｅｒ，“Ｌｏｗ−Ｄｅｎｓｉｔｙ  Ｐａｒｉｔｙ−Ｃｈｅｃｋ  Ｃｏｄｅｓ（低密度パリティ検査符号），”ＭＩＴ  Ｐｒｅｓｓ，１９６３
【００３３】
Ｅ．Ａｒｉｋａｎ，“Ｃｈａｎｎｅｌ  Ｐｏｌａｒｉｚａｔｉｏｎ：Ａ  ｍｅｔｈｏｄ  ｆｏｒ  ｃｏｎｓｔｒｕｃｔｉｎｇ  ｃａｐａｃｉｔｙ  ａｃｈｉｅｖｉｎｇ  ｃｏｄｅｓ  ｆｏｒ  ｓｙｍｍｅｔｒｉｃ  ｂｉｎａｒｙ−ｉｎｐｕｔ  ｍｅｍｏｒｙｌｅｓｓ  ｃｈａｎｎｅｌｓ（通信路分極：対称２元無記憶通信路のための符号を達成する容量を構築する方法）”，ＩＥＥＥ  Ｔｒａｎｓ．ｏｎ  Ｉｎｆ．Ｔｈｅｏｒｙ，ｖｏｌ．５５，ｎｏ．７，ｐｐ．３０５１−３０７３，Ｊｕｌ．２００９．
【００３４】
Ｄｏｅｒｒらによる、「Ｐｒｏｃｅｓｓｉｎｇ  Ｓｙｓｔｅｍ  ｗｉｔｈ  Ｉｎｔｅｒｓｐｅｒｓｅｄ  Ｓｔａｌｌ  Ｐｒｏｐａｇａｔｉｎｇ  Ｐｒｏｃｅｓｓｏｒｓ  ａｎｄ  Ｃｏｍｍｕｎｉｃａｔｉｏｎ  Ｅｌｅｍｅｎｔｓ（散在ストール伝播プロセッサおよび通信要素を備える処理システム）」と題する米国特許第７，４１５，５９４号明細書
【００３５】
Ｄｏｅｒｒらによる、「Ｍｅｔｈｏｄ  ａｎｄ  ｓｙｓｔｅｍ  ｆｏｒ  ｄｉｓａｂｌｉｎｇ  ｃｏｍｍｕｎｉｃａｔｉｏｎ  ｐａｔｈｓ  ｉｎ  ａ  ｍｕｌｔｉｐｒｏｃｅｓｓｏｒ  ｆａｂｒｉｃ  ｂｙ  ｓｅｔｔｉｎｇ  ｒｅｇｉｓｔｅｒ  ｖａｌｕｅｓ  ｔｏ  ｄｉｓａｂｌｅ  ｔｈｅ  ｃｏｍｍｕｎｉｃａｔｉｏｎ  ｐａｔｈｓ  ｓｐｅｃｉｆｉｅｄ  ｂｙ  ａ  ｃｏｎｆｉｇｕｒａｔｉｏｎ（構成により指定された通信パスを無効にするようにレジスタ値を設定することによりマルチプロセッサ機構で通信パスを無効にするための方法およびシステム）」と題する米国特許第８，８８０，８６６号明細書
【００３６】
Ｄｏｅｒｒらによる、「Ｍｅｍｏｒｙ−Ｎｅｔｗｏｒｋ  Ｐｒｏｃｅｓｓｏｒ  ｗｉｔｈ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｏｐｔｉｍｉｚａｔｉｏｎｓ（プログラム可能な最適化を伴うメモリ−ネットワークプロセッサ）」と題する米国特許第９，４３０，３６９号明細書
【００３７】
Ｒａｚａらによる、「Ｍｅｍｏｒｙ  Ｍａｎａｇｅｍｅｎｔ  ａｎｄ  Ｐａｔｈ  Ｓｏｒｔ  Ｔｅｃｈｎｉｑｕｅｓ  ｉｎ  ａ  Ｐｏｌａｒ  Ｃｏｄｅ  Ｓｕｃｃｅｓｓｉｖｅ  Ｃａｎｃｅｌｌａｔｉｏｎ  Ｌｉｓｔ  Ｄｅｃｏｄｅｒ（ポーラ符号逐次除去リスト復号器でのメモリ管理およびパスソート技法）」と題する米国特許出願公開第１５／３５９，８４５号明細書
用語
【００３８】
以下は、本出願で使用する用語の解説である。
【００３９】
記憶媒体−さまざまなタイプのメモリ機器または記憶装置のいずれか。用語「記憶媒体」は、インストール媒体、たとえば、ＣＤ−ＲＯＭ、フロッピーディスク１０４、またはテープ装置；コンピュータ・システム・メモリ、またはＤＲＡＭ、ＤＤＲ  ＲＡＭ、ＳＲＡＭ、ＥＤＯ  ＲＡＭ、Ｒａｍｂｕｓ  ＲＡＭなどのようなランダム・アクセス・メモリ；または磁気媒体、たとえば、ハードドライブ、光学記憶装置、もしくはＲＯＭ、ＥＰＲＯＭ，フラッシュなどの不揮発性メモリを含むことが意図される。記憶媒体は、同様に他のタイプのメモリも、またはそれらの組合せを含んでもよい。さらに、記憶媒体は、プログラムが実行される第１のコンピュータ内に配置されてもよい、および／またはインターネットなどのネットワークを介して第１のコンピュータに接続する、第２の異なるコンピュータ内に配置されてもよい。第２の異なるコンピュータ内に配置される実例では、第２のコンピュータは、実行するために、第１のコンピュータにプログラム命令を提供してもよい。用語「記憶媒体」は、異なる位置に、たとえば、ネットワークを介して接続される異なるコンピュータシステム内に存在してもよい、２つ以上の記憶媒体を含んでもよい。
【００４０】
キャリア媒体−上述のような記憶媒体、ならびにバス、ネットワーク、および／または電気信号または光信号などの信号を伝達する他の物理的伝送媒体などの物理的伝送媒体。
【００４１】
プログラム可能ハードウェア素子−プログラム可能な相互接続または有線接続された相互接続を介して接続された複数のプログラム可能機能ブロックを備えるさまざまなハードウェア機器を含む。例には、ＦＰＧＡ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ、フィールド・プログラマブル・ゲート・アレイ）、ＰＬＤ（Ｐｒｏｇｒａｍｍａｂｌｅ  Ｌｏｇｉｃ  Ｄｅｖｉｃｅ）、ＦＰＯＡ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｏｂｊｅｃｔ  Ａｒｒａｙ）、およびＣＰＬＤ（Ｃｏｍｐｌｅｘ  ＰＬＤ）が含まれる。プログラム可能機能ブロックは、微細なもの（組合せ論理またはルック・アップ・テーブル）から粗大なもの（算術論理演算装置またはプロセッサコア）までに及んでもよい。プログラム可能ハードウェア素子はまた、「再構成可能論理」とも呼ばれる場合がある。
【００４２】
特定用途向け集積回路（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ、ＡＳＩＣ）−この用語は、その通常の意味の広さを完全に有することが意図される。ＡＳＩＣは、プログラム可能プロセッサコアをビルディングブロックとして含有してもよいが、用語ＡＳＩＣは、汎用プログラム可能機器というよりはむしろ特定用途のためにカスタマイズされた集積回路を含むことが意図される。携帯電話セル、ＭＰ３プレーヤチップ、および多くの他の単一機能ＩＣは、ＡＳＩＣの例である。ＡＳＩＣは、通常はＶｅｒｉｌｏｇまたはＶＨＤＬなどのハードウェア記述言語で記述される。
【００４３】
プログラム−用語「プログラム」は、その通常の意味の広さを完全に有することが意図される。用語「プログラム」は、１）メモリに記憶してもよく、かつプロセッサにより実行可能なソフトウェアプログラム、または２）プログラム可能なハードウェア素子もしくはＡＳＩＣを構成するために使用可能なハードウェア構成プログラムを含む。
【００４４】
ソフトウェアプログラム−用語「ソフトウェアプログラム」は、その通常の意味の広さを完全に有することが意図され、記憶媒体に記憶して、プロセッサにより実行してもよい、任意のタイプのプログラム命令、コード、スクリプト、および／もしくはデータ、またはそれらの組合せを含む。代表的ソフトウェアプログラムは、テキストベースのプログラミング言語、たとえば、Ｃ、Ｃ＋＋、ＰＡＳＣＡＬ、ＦＯＲＴＲＡＮ、ＣＯＢＯＬ、ＪＡＶＡ（登録商標）、アセンブラ言語などのような命令型言語もしくは手続き型言語で書かれたプログラム；グラフィカルプログラム（グラフィカルプログラミング言語で書かれたプログラム）；アセンブラ言語プログラム；機械語にコンパイルされたプログラム；スクリプト；および他のタイプの実行可能ソフトウェアを含む。ソフトウェアプログラムは、何らかの手法で相互運用する２つ以上のソフトウェアプログラムを備えてもよい。
【００４５】
ハードウェア構成プログラム−プログラム、たとえば、プログラム可能ハードウェア素子またはＡＳＩＣをプログラムする、または構成するために使用することができるネットリストまたはビットファイル。
【００４６】
コンピュータシステム−パーソナル・コンピュータ・システム（ＰＣ）、メインフレーム・コンピュータ・システム、ワークステーション、ネット家電、インターネット家電、携帯情報端末（ｐｅｒｓｏｎａｌ  ｄｉｇｉｔａｌ  ａｓｓｉｓｔａｎｔ、ＰＤＡ）、グリッド・コンピューティング・システム、もしくは他の機器、または機器の組合せを含む、さまざまなタイプのコンピューティングシステムまたは処理システムのいずれか。一般に、用語「コンピュータシステム」を、記憶媒体から命令を実行する少なくとも１つのプロセッサを有する任意の機器（または機器の組合せ）を包含するように、広範囲に規定することができる。
【００４７】
自動的に−ユーザ入力が活動または動作を直接指定または遂行することなく、コンピュータシステム（たとえば、コンピュータシステムにより実行されるソフトウェア）、または機器（回路、プログラム可能ハードウェア素子、ＡＳＩＣなど）により遂行される活動または動作を指す。したがって、用語「自動的に」は、ユーザが動作を直接遂行するための入力を提供する、ユーザにより手動で遂行される、または指定される動作とは対照をなす。自動手順は、ユーザにより提供される入力により開始されてもよいが、「自動的に」遂行される後続の活動は、ユーザにより指定されない、すなわち、遂行すべき各活動をユーザが指定する「手動で」は行われない。たとえば、ユーザが各フィールドを選択し、情報を指定する入力を提供することにより（たとえば、情報をタイプし、チェックボックス、ラジオボタン選択などを選択することにより）電子式フォームに必要事項を書き入れることは、たとえコンピュータシステムがユーザの活動に応答してフォームを更新しなければならなくても、フォームに必要事項を手動で書き入れることになる。コンピュータシステムは、フォームに必要事項を自動的に書き入れられてもよく、この場合、ユーザ入力がフィールドへの回答を指定することなく、コンピュータシステム（たとえば、コンピュータシステム上で実行されるソフトウェア）がフォームのフィールドを解析し、フォームに書き込む。上記に示したように、ユーザは、フォームの自動書込を起動してもよいが、フォームを実際に書き込むことには関与しない（たとえば、ユーザがフィールドへの回答を手動で指定するのではなく、むしろ、フィールドが自動的に記入される）。本明細書は、ユーザが行った活動に応答して、動作が自動的に遂行されるさまざまな例を提供する。
システム概観
【００４８】
図１は、無線通信機器１２と通信する基地局１０を伴う一例の通信システムを示す。基地局１０は、複数の無線通信機器とセルラ通信を遂行するセルラ基地局であってもよい。あるいは、基地局１０は、８０２．１１規格または関連規格によるなどのＷｉ−Ｆｉ通信を遂行するための無線アクセスポイントであってもよい。無線通信機器１２は、スマートホン、タブレット機器、コンピュータシステムなどのような、さまざまな機器のいずれかであってもよい。基地局１０および無線通信機器１２の一方または両方は、本明細書に記述するような復号器論理を含んでもよい。
【００４９】
図２は、基地局１０および／または無線通信機器１２の一方または両方に含有されてもよい一例のマルチプロセッサシステム（ｍｕｌｔｉ−ｐｒｏｃｅｓｓｏｒ  ｓｙｓｔｅｍ、ＭＰＳ）を示す。ＭＰＳは、本明細書で記述する方法を実装するようにプログラムされてもよい。いくつかの実施形態で使用してもよい例示的ＭＰＳアーキテクチャに関する詳細な情報については、上記で参照により組み入れられた、米国特許第７，４１５，５９４号明細書、および米国特許第８，８８０，８６６号明細書、および米国特許第９，４３０，３６９号明細書を参照されたい。プロセッサシステムの別の例は、本明細書で記述する方法を実装するように構成されてもよい、ＦＰＧＡなどのプログラム可能ハードウェア素子（Ｐｒｏｇｒａｍｍａｂｌｅ  ｈａｒｄｗａｒｅ  ｅｌｅｍｅｎｔ、ＰＨＥ）である。
【００５０】
図２に示す実施形態では、ＭＰＳは、データおよび命令を互いに伝達するように結合された、動的に構成可能なコミュニケータまたは動的に構成可能な通信要素とも呼ばれる場合がある、複数のプロセッサ要素（ｐｒｏｃｅｓｓｏｒ  ｅｌｅｍｅｎｔ、ＰＥ）（正方形で示す）および複数のデータ記憶ルータ（ｄａｔａ  ｍｅｍｏｒｙ  ｒｏｕｔｅｒ、ＤＭＲ）（円で示す）を含んでもよい。本明細書で使用するとき、ＰＥはまた、ＰＥノードを指す場合があり、ＤＭＲはまた、ＤＭＲノードを指す場合がある。
【００５１】
ＭＰＳは、ＧＰＭＣ、ＤＳＰ、ＦＰＧＡ、またはＡＳＩＣが現在使用されているさまざまなシステムおよび用途のいずれかで使用されてもよい。したがって、たとえば、処理システムは、さまざまなタイプのコンピュータシステム、または計算を必要とする他の機器のいずれかで使用されてもよい。企図される一実施形態では、処理システムは、ＦＥＣの符号器および／または復号器内の信号処理機器として使用される。
【００５２】
一実施形態では、ＰＥは、データを操作するように構成された１つまたは複数の算術論理演算装置（ａｒｉｔｈｍｅｔｉｃ−ｌｏｇｉｃ  ｕｎｉｔ、ＡＬＵ）、ＡＬＵを制御するように構成された１つまたは複数の命令処理ユニット（ｉｎｓｔｒｕｃｔｉｏｎ  ｐｒｏｃｅｓｓｉｎｇ  ｕｎｉｔ、ＩＰＵ）、命令またはデータを保持するように構成された１つまたは複数のメモリ、ならびにさまざまな種類のマルチプレクサおよび復号器を含んでもよい。そのような一実施形態は、いくつかのポート（「プロセッサポート」）を含んでもよく、ポートの一部は、ＤＭＲへ、および他のＰＥに接続するように構成されてもよい他のものへの接続用に構成されてもよい。
【００５３】
一実施形態では、ＤＭＲは、データおよび命令を保持するように構成された１つまたは複数のランダム・アクセス・メモリ（ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ、ＲＡＭ）、構成可能なコントローラ、クロスバースイッチなどのネットワークスイッチ、レジスタ、およびマルチプレクサを含んでもよい。そのような実施形態は、複数のポートを含んでもよく、複数のポートの一部は、ＰＥに接続するように構成されてもよく（本明細書ではＰＥ型ポートと呼ぶ）、複数のポートの一部は、ＤＭＲに接続するように構成されてもよい（本明細書ではＤＭＲ型ポートと呼ぶ）。任意の所与のポートについては、ＤＭＲとの間を接続するように構成されていようと、ＰＥとの間を接続するように構成されていようと、特定のクロックサイクルでそのような所与のポートを通して転送可能なデータ量は、さまざまな実施形態で変わる場合があることが留意される。たとえば、一実施形態では、所与のポートは、クロックサイクルあたり１ワードのデータを転送するように構成されてもよく、一方、別の実施形態では、所与のポートは、クロックサイクルあたり複数ワードのデータを転送するように構成されてもよい。さらに別の実施形態では、所与のポートは、時分割多重化などの技法を採用して、複数のクロックサイクルにわたり１ワードのデータを転送してもよく、それにより、ポートを備える物理的接続の数を低減する。
【００５４】
ＭＰＳの一実施形態では、各ＰＥは、命令のために確保された少ないローカルメモリを含んでもよく、非常に少ないローカルデータ記録領域を含んでもよい。そのような実施形態では、各ＰＥに隣接するＤＭＲは、オペランドを所与のＰＥに提供するように構成されてもよい。特定の実施形態では、多くのＰＥ命令のために、所与のＰＥは、１クロックサイクルで、隣接するＤＭＲからオペランドを読み出し、ＡＬＵ動作を実行し、所与の隣接するＤＭＲにＡＬＵの結果を記憶してもよい。それにより、１つのＰＥからのＡＬＵの結果は、実行後ただちにそのクロックサイクル内にいくつかの他のＰＥに利用可能になってもよい。この方式で結果を作り出すことにより、隣接するＰＥの実行を密接に調和させる、すなわち「密結合」させることが可能になる場合がある。他の実施形態では、各ＰＥは、オペランドおよび／または結果データをバッファリングするための追加レジスタを含んでもよい。
【００５５】
ＭＰＳの一実施形態では、データおよび命令を、いくつかの異なる方法の１つで、ＤＭＲの間で転送してもよい。ＭＰＳ内のすべてのメモリにシリアルバスを提供してもよく、そのようなバスを使用して、外部メモリからＭＰＳを初期化しても、ＭＰＳデータ構造の試験をサポートしてもよい。短距離転送については、所与のＰＥをプログラムして、所与のＰＥの隣接するＤＭＲとの間でデータを直接移動してもよい。より長い距離にわたりデータまたは命令を転送するために、ＤＭＲのネットワーク内で、通信経路を動的に作成し、無効にしてもよい。そのようなより長い距離のデータ転送のために、ＭＰＳ内部の相互接続されたＤＭＲのネットワークは、通信経路のための切替ルーティング機構（ｓｗｉｔｃｈｅｄ  ｒｏｕｔｉｎｇ  ｆａｂｒｉｃ、ＳＲＦ）を構成してもよい。
【００５６】
経路上でデータワードを損失する可能性を防止するために、ＭＰＳ１０のある実施形態は、経路に沿って受信側と送信側の間でフロー制御を実装してもよい。フロー制御は、送信側の対応する受信側がデータをもはや受信することができない場合、送信側を停止してもよく、かつ送信側の対応する受信側がデータを受信する準備ができるようになったとき、送信側を再始動してもよい仕組みを指す。経路上でデータの流れを停止および再始動することは、ワームホールルーティングでの、メッセージの進行の停止および再始動と多くの類似点があるので、停止および再始動を、統合した枠組みで組み合わせてもよい。
【００５７】
一実施形態では、ＭＰＳは、ＰＥが同一であってもよく、かつＤＭＲが同一であってもよい、均一なアレイの形に一緒に接続された複数のＰＥおよびＤＭＲを含んでもよい。均一なアレイでは、ＰＥの大部分は、同一であってもよく、ＰＥの大部分の各々は、ＤＭＲへの接続を同数、有してもよい。また、均一なアレイでは、ＤＭＲの大部分は、同一であってもよく、ＤＭＲの大部分の各々は、他のＤＭＲへの、およびＰＥへの接続を同数、有してもよい。ＭＰＳの一実施形態では、ＰＥおよびＤＭＲを、実質的に一様な方式で散在させてもよい。本明細書で使用するとき、実質的に一様な散在は、ＤＭＲに対するＰＥの比がアレイの副領域の大部分にわたり不変である配列を指す。
【００５８】
実質的に一様な方式で配列された均一なアレイは、予測可能な相互接続パターンを提供すること、およびソフトウェアモジュールをアレイにわたり再利用することが可能になることなどの、ある種の有利な特性を有する場合がある。一実施形態では、均一なアレイにより、ＰＥおよびＤＭＲの少数のインスタンスを設計し、試験することが可能になる場合がある。この場合、ＤＭＲおよびＰＥを備えるユニットを製作し、次いで、そのようなユニットを複数回、繰り返す、または「タイルのように並べること」により、システムを組み立ててもよい。そのような取り組み方法は、共通のシステム要素を再利用することによって、設計および試験のコストを下げる場合がある。
【００５９】
ＰＥおよびＤＭＲの構成可能な性質により、多種多様の不均一な挙動が、物理的に均一なアレイ上で行われようにプログラムすることができるようになる場合がある。しかしながら、ある代替実施形態では、ＭＰＳはまた、規則的アレイもしくは不規則なアレイで、またはランダム式でさえ接続されてもよい、不均一なＤＭＲおよびＰＥを用いて形成されてもよい。一実施形態では、ＰＥおよびＤＭＲの相互接続を、たとえば集積回路（ｉｎｔｅｇｒａｔｅｄ  ｃｉｒｃｕｉｔ、ＩＣ）、セラミック基板、またはプリント回路基板（ｐｒｉｎｔｅｄ  ｃｉｒｃｕｉｔ  ｂｏａｒｄ、ＰＣＢ）上の回路トレースとして実装してもよい。しかしながら、代替実施形態では、そのような相互接続は、たとえば、電磁エネルギー（すなわち、無線または光のエネルギー）のための導波管、無線（すなわち、導波管なしの）エネルギー、粒子（電子ビームなど）、または分子上の電位などの、さまざまな小型通信リンクのいずれかであってもよい。
【００６０】
ＭＰＳを単一集積回路上に実装してもよい。一実施形態では、複数のＭＰＳ集積回路を組み合わせて、より大きなシステムを作り出してもよい。しかしながら、ＰＥおよびＤＭＲの異なる配列を含むＭＰＳの代替実施形態が企図される。
【００６１】
いくつかの実施形態では、ＭＰＳは、ＤＳＰおよびＦＰＧＡのアーキテクチャの最も好ましい特徴を採用してもよい。ＤＳＰのように、ＭＰＳは、複数の処理ユニットおよびオン・チップ・メモリを備えるプログラム可能チップであってもよい。しかしながら、ＤＳＰに比べて、ＭＰＳ処理ユニットは簡素化されてもよく、より多くのＭＰＳ処理ユニットが存在してもよく、ＭＰＳ処理ユニットは、ＭＰＳ処理ユニット間のデータ移動の帯域幅だけではなく、チップ上のデータ移動およびチップ外のデータ移動の帯域幅も最大化するような新奇な方法で相互接続されてもよい。ＤＳＰよりも多くの処理ユニットを有することにより、ＭＰＳは、単位時間あたりより多くの処理を行うことができるようになる場合があり、簡素化された処理ユニットは、エネルギー使用を最小にする場合がある。内部並列処理を有する多くのＤＳＰは、バス指向アーキテクチャであってもよい。いくつかの実施形態では、ＭＰＳは、バスを含むのではなく、むしろ、バス指向アーキテクチャよりもかなり高い全帯域幅を提供してもよい、ＳＲＦ内に埋め込まれた、ＤＭＲなどの、隣接する共用ローカルメモリを含んでもよい。
【００６２】
ＦＰＧＡの取り組み方法と比較して、いくつかのＭＰＳの実施形態は、より粗大であってもよい。たとえば、ＭＰＳの一実施形態では、動作は、自然語長（たとえば、１６ビット）を有してもよく、計算は、自然語長の倍数であるデータを使用して遂行された場合、最も効率的であってもよい。いくつかのＭＰＳの実施形態では、ＰＥおよびＤＭＲは、ＦＰＧＡで実現される均等の構造よりも高密度であってもよく、それにより、より短い平均配線長、より小さな配線静電容量、およびより少ないエネルギー利用をもたらす場合がある。ＦＰＧＡの実装形態と対照的に、いくつかのＭＰＳの実装形態では、ＭＰＳ内のすべてのＡＬＵは、オペランドの取出し、およびＤＭＲで周囲の高速メモリへ結果を書き戻すのを容易にしてもよいプロセッサ（すなわち、ＰＥ）の一部であってもよい。ＡＬＵに関するタイミングおよびクロックスキューの問題、取出し動作、および書戻し動作は、ＩＣチップの設計中に一度解決されればよく、ＦＰＧＡ実装の特色をよく示すような新しい用途それぞれに伴い、再度解決される必要がない。
ＦＥＣ関数
【００６３】
上記で指摘したように、図２のＭＰＳは、ＦＥＣの符号器および／または復号器内で単一処理機器として使用されてもよい。ＦＥＣの符号化および復号を遂行するためのさまざまな枠組みは、以下の動作を伴ってもよい。
ｆ（ｘ、ｙ）≒ｅｘｔｓｉｇｎ（ｘ）＊ｅｘｔｓｉｇｎ（ｙ）＊ｍｉｎ（｜ｘ｜，｜ｙ｜）  （式１）
ｇ（ｕ，ｘ，ｙ）＝ｓａｔ（−１u＊ｘ＋ｙ）  （式２）
【００６４】
式１および式２では、「ｘ」および「ｙ」の各々は、数値（負、正、またはゼロ）であり、一方では、「ｕ」は、０または１の値を有する。
【００６５】
関数ｅｘｔｓｉｇｎ（ａ）は、いくつかのシナリオでは、集合［−１，０，＋１］の形の結果として戻されてもよい、「ａ」の符号を抽出する。他のシナリオでは代わりに、結果を集合［−１，＋１］または［−１，０］に制限してもよい。他のシナリオでは、代わりの符号表現を使用してもよい。
【００６６】
関数ｍｉｎ（ａ，ｂ）は、値「ａ」と「ｂ」の間の最小値を戻す。
【００６７】
関数ｓａｔ（ａ）は、事前に規定した最小値「ＭＩＮ＿ＶＡＬ」および最大値「ＭＡＸ＿ＶＡＬ」（ここで、ＭＩＮ＿ＶＡＬ＜ＭＡＸ＿ＶＡＬである）に基づき、以下のように「ａ」の「飽和」値を戻す。
ａ＜ＭＩＮ＿ＶＡＬである場合、ｓａｔ（ａ）＝ＭＩＮ＿ＶＡＬ
ａ＞ＭＡＸ＿ＶＡＬである場合、ｓａｔ（ａ）＝ＭＡＸ＿ＶＡＬ
ＭＩＮ＿ＶＡＬ≦ａ≦ＭＡＸ＿ＶＡＬである場合、ｓａｔ（ａ）＝ａ
【００６８】
低密度パリティ検査符号（ＬＤＰＣ）およびポーラ符号などのＦＥＣの符号器および復号器のいくつかの実装形態では、式１および式２を何度も計算する場合がある。リアルタイムの符号化／復号を維持するために、これらの計算を非常に迅速に遂行しなければならない。その結果、リアルタイム用途のためのＦＥＣ関数は従来、所与のリアルタイム用途に必要なスループットを提供するようにカスタム設計された専用ハードウェアの形で（たとえば、ＡＳＩＣの形で）遂行されてきた。しかしながら、そのような特定用途向けの解決策は、それが設計された特殊用途のためだけに有用であり、ＦＥＣアルゴリズム、スループット要件、またはさまざまな他の変数のいくつかが変わる場合、専用ハードウェアを再設計しなければならない。さらに、複数の復号器を必要とする場合がある用途（たとえばスマートホン）では、複数の専用ハードウェア解決策の集合体を必要とする場合があり、これにより、復号器の一部またはすべてが現在使用されていない間でさえ、大量の空間を消費する場合がある。
【００６９】
したがって、そのようなＦＥＣ関数を、図２のＭＰＳなどのソフトウェア構成可能ハードウェアで実装することが望ましい。これにより、アルゴリズムまたは他の動作パラメータの変化に応答して、ＦＥＣ関数を実装するハードウェアを再構成することができるようになる。特定のＦＥＣ符号器／復号器を動作の中で、または動作を離れて循環させるとき、ハードウェアを動的に再構成することさえしてもよい。
【００７０】
さらに、式１および式２に示す関数のような関数を、さまざまな設定で別様に利用してもよい。たとえば、式１および式２に示す関数を、ＬＤＰＣとポーラ符号の両方で使用してもよい。しかしながら、この関数を、特定のＦＥＣ解決策のためにカスタム設計された専用ハードウェア内部に埋め込んだ場合、特定の関数それぞれのために設計されたハードウェアの共用は、可能ではない場合がある。
【００７１】
したがって、任意の利用可能な１つまたは複数のソフトウェア構成可能プロセッサが関数を実装してもよいように、これらの機能を１組の機械命令として実装することが望ましい。
【００７２】
しかしながら、式１および式２の関数は従来、かなりの処理時間を必要としていた。たとえば、従来のＲＩＳＣ（「Ｒｅｄｕｃｅｄ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｓｅｔ  Ｃｏｍｐｕｔｅｒ」、縮小命令セットコンピュータ）アーキテクチャで実装された式１の関数は、７つのＲＩＳＣ動作の実行を必要とする場合があり、典型的には、関数を実行するために、プロセッサは７クロックサイクルを費やす必要がある。
【００７３】
したがって、低減されたサイクル数で実行することができる１組の機械命令としてこれらの関数を実装することが好ましい。
【００７４】
本明細書で開示するように、式１および式２の各々を、たとえば、図２のＭＰＳ上に実装された１つまたは複数のプロセッサ命令により加速してもよい。図２のＭＰＳの処理要素（ＰＥ）に関連して新しい命令について記述するが、考え方は、より一般的には他のデータ処理アーキテクチャにも同様に適用可能であるので、ＭＰＳアーキテクチャを一例として理解すべきであり、限定として理解すべきではない。
図３−処理要素
【００７５】
図３は、いくつかの実施形態による処理要素３００（たとえば、上記で論じたようなＰＥ）の構成図を示す。図３は、簡略化した構成図であり、本議論に関係がある処理要素の一部分を示すこと、ならびに追加構成要素（図示せず）および代わりの構成もまた企図されることを理解されたい。
【００７６】
図示するように、処理要素３００は、実行ユニット３０２を含んでもよい。実行ユニット３０２は、コンピュータ命令などの、１つまたは複数の命令を実行するように構成されてもよい。実行ユニット３０２は、１つまたは複数の構成可能なデータ−処理経路を含んでもよい。たとえば、実行ユニット３０２は、１つまたは複数の構成可能なＭ−幅の（たとえば、二重の）データ−処理経路を含んでもよく、そこでは、Ｍ−幅のデータ−処理経路はそれぞれ、複数の入力オペランドを処理するように構成される。１つまたは複数のＭ−幅のデータ−処理経路は、同じ手法で（たとえば、同じ命令の複数のインスタンスを遂行するように）構成されてもよい、または独立して（たとえば、異なる命令を遂行するように）構成されてもよい。より具体的な一例として、実行ユニット３０２は、各動作ステージが１つまたは複数のデータ−処理動作を遂行するように構成可能な複数のパイプライン化動作ステージを含んでもよい。
【００７７】
図示するように、処理要素３００は、図示するメモリ入力３０４Ａおよびメモリ入力３０４Ｂなどの、１つまたは複数のメモリ入力３０４を含んでもよい。メモリ入力３０４Ａは、１つもしくは複数のレジスタ、または受信した命令を実行している間、実行ユニット３０２により使用するためのデータを記憶するように構成された他のメモリ機器を含んでもよい。たとえば、メモリ入力３０４Ａは、たとえば別の処理要素から、またはＤＭＲもしくはメモリキャッシュなどの別のメモリ機器から、データを受信し、記憶してもよく、記憶したデータをたとえば１つまたは複数の入力オペランドとして実行ユニット３０２に提供してもよい。メモリ入力３０４Ｂは同様に、１つもしくは複数のレジスタ、または実行ユニット３０２により使用するためのデータを記憶するための他のメモリ機器を含んでもよい。いくつかの実施形態では、メモリ入力３０４Ａおよびメモリ入力３０４Ｂの各々は、実行ユニット３０２に１つまたは複数の入力オペランドを提供してもよい。他の実施形態では、メモリ入力３０４Ａは、１つまたは複数の入力オペランドを提供してもよく、一方では、メモリ入力３０４Ｂは、メモリ入力３０４Ａにより提供された入力オペランドを処理する助けになる他のデータを提供してもよい。いくつかの実施形態では、そのような他のデータを、入力オペランドの処理を始める前にメモリ入力３０４Ｂの中にロードしてもよい。いくつかの実施形態では、メモリ入力３０４Ａおよび３０４Ｂを、単一メモリ機器内に備えてもよい。いくつかの実施形態では、追加メモリ入力を含んでもよい。
【００７８】
図示するように、処理要素３００は、１つまたは複数のメモリ出力３０６を含んでもよい。メモリ出力３０６は、１つもしくは複数のレジスタ、または受信した命令を実行している間、実行ユニット３０２により出力されるデータを記憶するように、および記憶したデータを処理要素３００の外側にある宛先に、たとえば、別の処理要素に、またはＤＭＲもしくはメモリキャッシュなどの別のメモリ機器に提供するように構成された他のメモリ機器を含んでもよい。
【００７９】
処理要素３００は、命令を受信し、構文解析するなどのための追加要素（図示せず）をさらに含んでもよい。
【００８０】
命令（たとえば、単一命令）を受信し、かつそれに応答して、受信した命令を実行するように実行ユニットを構成するように、処理要素３００を構成してもよい。命令は、１つまたは複数の入力オペランドを含んでもよい。たとえば、命令は、入力オペランドとして使用する１つまたは複数の値を明示的に指定することにより、１つまたは複数の入力オペランドを含んでもよい。代わりにまたは追加で、命令は、少なくとも１つの入力オペランドに関して、入力オペランドが配置されたメモリ位置（たとえば、メモリアドレス）を指定することにより１つまたは複数の入力オペランドを含んでもよい。たとえば、命令を実行するのに、第１の入力オペランドおよび第２の入力オペランドを必要とする場合、命令は、第１の入力オペランドが配置されたメモリ位置、および第２の入力オペランドが配置されたメモリ位置を指定してもよい。
【００８１】
いくつかのシナリオでは、命令は、処理要素３００に、１つまたは複数の入力オペランドに対して関数を遂行させ、かつ新しい入力オペランドを毎回使用して関数を複数回、繰り返させてもよい。したがって、いくつかのシナリオでは、命令は、１つまたは複数の複数組の入力オペランドをさらに指定してもよい。たとえば、命令を実行するのに、第１の入力オペランドおよび第２の入力オペランドを必要とする場合、命令は、第１組の入力オペランドが配置されたメモリ位置、および第２組の入力オペランドが配置されたメモリ位置を指定してもよい。処理要素３００は、第１組から第１の入力オペランドを、および第２組から第１の入力オペランドを取り出して、１回目の関数を遂行してもよく、第１組から第２の入力オペランドを、および第２組から第２の入力オペランドを取り出して、２回目の関数を遂行してもよい。たとえば、第１組からの第１の入力オペランドは、第１組の入力オペランドに関して命令により指定されたメモリ位置に配置された入力オペランドであってもよく、第１組からの第２の入力オペランドは、次の連続したメモリ位置に配置された入力オペランドであってもよい。命令が完全に実装されるまで、このパターンを続けてもよい（たとえば、処理要素３００が、各組の入力オペランドに関して、連続したメモリ位置を通して増分して、メモリから入力オペランドを取り出す）。
【００８２】
命令は、たとえば、関数を繰り返す回数、各組内のオペランド数、および／または終了メモリ位置を指定してもよく、その結果、関数が、指定された回数、繰り返され、指定された数の入力オペランドを使用した、および／または終了メモリ位置に到達したとき、命令は完全に実装されている。
【００８３】
受信した命令を実行するステップは、処理要素３００が１つまたは複数の結果値を作り出し、出力するステップを含んでもよい。たとえば、処理要素３００は、命令により指定された関数を遂行するたびに、結果値を作り出してもよい。
【００８４】
命令は、１つまたは複数の結果値を記憶するための１つまたは複数のメモリ位置を指定してもよい。たとえば、命令を実行するステップが、結果値を１つだけ作り出す場合、命令は、１つの結果値を記憶するための位置を示す単一メモリ位置を指定してもよい。あるいは、命令を実行するステップが、複数の結果値を作り出す場合、命令は、複数の結果値を記憶するための１組の連続したメモリ位置の開始位置を示す単一メモリ位置を指定してもよい、または一定範囲のメモリ位置を指定してもよい、またはそうではない場合、複数の結果値を記憶するための複数のメモリ位置を指定してもよい。
【００８５】
一例として、命令は、第１の入力オペランドおよび第２の入力オペランドを指定してもよいＭ−幅の近似ｍｉｎ−ｓｕｍ（ＭＡＭＩＮＳＵＭ）命令を含んでもよい。ＭＡＭＩＮＳＵＭ命令を受信したことに応答して、処理要素３００は、式１を実装してもよいＭＡＭＩＮＳＵＭ関数を遂行してもよい。たとえば、Ｍ＝２であるとき、ＭＡＭＩＮＳＵＭ命令を遂行するステップは、第１の入力オペランドの絶対値および符号関数を決定するステップと、第２の入力オペランドの絶対値および符号関数を決定するステップと、第１の入力オペランドの絶対値と第２の入力オペランドの絶対値の最小値を備える最小の大きさ値を決定するステップと、第１の入力値の符号関数と第２の入力値の符号関数の積を備える最終符号関数を決定するステップと、最小の大きさ値に最終符号関数を適用するステップとを含んでもよく、そこでは、最小の大きさ値に最終符号関数を適用するステップの結果は、第１の入力オペランドおよび第２の入力オペランドに関する結果値を構成する。
【００８６】
ＭＡＭＩＮＳＵＭ命令は、複数組の第１の入力オペランドおよび複数組の第２の入力オペランドをさらに指定してもよい。そのようなシナリオでは、処理要素３００は、ＭＡＭＩＮＳＵＭ命令を受信したことに応答して、複数組の第１の入力オペランドおよび複数組の第２の入力オペランドに関する複数組の結果値を作り出すために、ＭＡＭＩＮＳＵＭ関数を複数回、遂行してもよい。たとえば、ＭＡＭＩＮＳＵＭ関数の各反復は、複数組の第１の入力オペランドからのそれぞれの第１の入力オペランド、および複数組の第２の入力オペランドからのそれぞれの第２の入力オペランドを含む、それぞれの対の入力オペランドを利用してもよい。
【００８７】
別の例として、命令は、第１の入力オペランドおよび第２の入力オペランドを指定してもよいＭ−幅の（たとえば、二重の）ａｄｄ−ｓｉｇｎ（ＭＡＤＤＳＩＧＮ）命令を含んでもよい。たとえば、Ｍ＝２である場合、第１の入力オペランドは、第１のオペランド値および第２のオペランド値を含んでもよく、第２の入力オペランドは、第３のオペランド値および第４のオペランド値を含んでもよい。ＭＡＤＤＳＩＧＮ命令を受信したことに応答して、処理要素３００は、式２を実装してもよいＭＡＤＤＳＩＧＮ関数を遂行してもよい。たとえば、ＭＡＤＤＳＩＧＮ関数は、第１のオペランド値に第１の符号関数を適用することにより第１の符号付値を決定するステップと、第２のオペランド値に第２の符号関数を適用することにより第２の符号付値を決定するステップと、第３のオペランド値に第１の符号付値を加算するステップと、第４のオペランド値に第２の符号付値を加算するステップとを含んでもよい。ＭＡＤＤＳＩＧＮ命令は、第１の符号関数および第２の符号関数をさらに指定してもよい。
【００８８】
ＭＡＤＤＳＩＧＮ命令は、複数組の第１の入力オペランドおよび複数組の第２の入力オペランドをさらに指定してもよい。そのようなシナリオでは、処理要素３００は、ＭＡＤＤＳＩＧＮ命令を受信したことに応答して、複数組の第１の入力オペランドおよび複数組の第２の入力オペランドに関する複数組の結果値を作り出すために、ＭＡＤＤＳＩＧＮ関数を複数回、遂行してもよい。そのようなシナリオでは、ＭＡＤＤＳＩＧＮ命令は、複数組の第１の入力オペランドの複数組の第１のオペランド値に対応する複数組の第１の符号関数、および複数組の第１の入力オペランドの複数組の第２のオペランド値に対応する複数組の第２の符号関数をさらに指定してもよい。いくつかのシナリオでは、処理要素３００は、１つまたは複数のビットパック型レジスタを備えてもよく、複数組の第１の符号関数および複数組の第２の符号関数を１つまたは複数のビットパック型レジスタにロードしてもよい。
【００８９】
別の例として、命令は、入力オペランドおよび符号オペランドを指定してもよいＭ−幅の（たとえば、二重の）ｓｉｇｎ（ＭＳＩＧＮ）命令を含んでもよい。たとえば、Ｍ＝２である場合、入力オペランドは、第１のオペランド値および第２のオペランド値を含んでもよく、符号オペランドは、第１の符号関数および第２の符号関数を含んでもよい。ＭＳＩＧＮ命令を受信したことに応答して、処理要素３００は、式２の一部分を実装してもよいＭＳＩＧＮ関数を遂行してもよい。たとえば、ＭＳＩＧＮ関数は、第１のオペランド値に第１の符号関数を適用するステップと、第２のオペランド値に第２の符号関数を適用するステップとを含んでもよい。
【００９０】
ＭＳＩＧＮ命令は、複数組の入力オペランドおよび複数組の符号オペランドをさらに指定してもよい。そのようなシナリオでは、処理要素３００は、ＭＳＩＧＮ命令を受信したことに応答して、複数組の入力オペランドおよび複数組の符号オペランドに関する複数組の結果値を作り出すために、ＭＳＩＧＮ関数を複数回、遂行してもよい。
図４−実行ユニット
【００９１】
図４は、いくつかの実施形態による、処理要素３００内部に含まれる実行ユニット３０２の構成図を示す。図４は、簡略化した構成図であり、本議論に関係がある実行ユニットの一部分を示すこと、および追加構成要素（図示せず）および代わりの構成もまた企図されることを理解されたい。
【００９２】
図示するように、実行ユニット３０２は、構成可能な二重データ−処理経路を含んでもよい。二重（Ｍ＝２）データ−処理経路の実施形態は、単なる代表例であること、および他の実施形態は、より広い（たとえば、Ｍ＝３またはＭ＝４）またはより狭い（Ｍ＝１）Ｍ−幅のデータ−処理経路を含んでもよいことを理解されたい。他の実施形態では、実行ユニット３０２は、独立に構成可能であってもよい、複数のそのようなＭ−幅のデータ−処理経路を含んでもよい。Ｍ−幅のデータ−処理経路は、複数の入力オペランド４０２を処理するように構成されてもよい。
【００９３】
図示するように、二重データ−処理経路は、複数のパイプライン化動作ステージ（４０４Ａ〜Ｃ）を含み、各動作ステージは、２つ（すなわち、Ｍ）のデータ−処理動作を遂行するように構成可能である。他の実施形態では、動作ステージの１つまたは複数は、より多数の、またはより少数のデータ−処理動作を遂行するように構成可能であってもよい。図４には３つの動作ステージを示すが、他の数の動作ステージを含んでもよい。
【００９４】
動作ステージの１つまたは複数はそれぞれ、選択モジュール４０６、第１の動作モジュール４０８、第２の動作モジュール４１０、および１つまたは複数のレジスタ４１２を含んでもよい。異なる値のＭ（Ｍ＝２以外）に関して、より少ない、またはより多くの動作モジュールを含んでもよいことを理解されたい。
【００９５】
選択モジュール４０６は、第１の動作モジュール４０８および／または第２の動作モジュール４１０に入力の１つまたは複数を誘導するための、１つもしくは複数のマルチプレクサ、または複数の入力の間で選択するように構成可能な他のハードウェアを含んでもよい。選択モジュール４０６は、動作モジュール４０８および４１０をバイパスして、レジスタ４１２に入力の１つまたは複数を誘導するようにさらに構成可能であってもよい。たとえば、動作ステージ４０４Ａの選択モジュール４０６Ａは、メモリ入力３０４から、第１の動作モジュール４０８Ａに１つまたは複数の入力オペランドを誘導し、第２の動作モジュール４１０Ａに１つまたは複数の入力オペランドを誘導し、および／または１つまたは複数のレジスタ４１２Ａに１つまたは複数の入力オペランドを誘導するように構成可能であってもよい。同様に、動作モジュール４０４Ｂの選択モジュール４０６Ｂは、第１の動作モジュール４０８Ｂ、第２の動作モジュール４１０Ｂ、および／または１つまたは複数のレジスタ４１２Ｂのうち１つまたは複数にレジスタ４１２Ａの１つまたは複数の出力を誘導するように構成可能であってもよい。
【００９６】
第１の動作モジュール４０８および第２の動作モジュール４１０はそれぞれ、複数の算術演算および／または論理演算のいずれかを遂行するように構成可能であってもよい。たとえば、動作モジュールは、加算器、乗算器、アキュムレータ、シフタ、論理演算装置、加算−比較−選択（ａｄｄ−ｃｏｍｐａｒｅ  ｓｅｌｅｃｔ、ＡＣＳ）ユニットなどのいずれかの１つまたは複数を含んでもよい。したがって、各動作モジュールは、少なくとも１つの論理関数および／または算術関数を遂行するように構成されてもよい。たとえば、各動作モジュールは、符号関数（たとえば、ＳＩＧＮ１６（ａ，ｓ））、加算関数（たとえば、ＡＤＤ１６（ａ，ｂ））、絶対値関数（ＡＢＳ１６（ａ））、最小値関数（ＭＩＮ（ａ，ｂ））、符号乗算関数（ＭＵＬＳＩＧＮ（ａ，ｂ））などのような関数を遂行するように構成可能であってもよい。各動作モジュールは、１つまたは複数のレジスタ４１２に結果値を出力してもよい。他の実施形態では、１つまたは複数の動作モジュールは、隣接するＤＭＲなどのいくつかの他のメモリ機器に直接、または（たとえば、最終選択モジュール４１４を介して）１つまたは複数のメモリ出力３０６に、結果値を出力するように構成されてもよい。
【００９７】
１つまたは複数のレジスタ４１２は、動作モジュールから結果値を受信してもよい、および／または選択モジュール４０６からの出力を受信してもよい。次いで、１つまたは複数のレジスタ４１２は、たとえば次のクロックサイクルで、次のパイプラインステージに、受信した値を出力してもよい。あるいは、１つまたは複数のレジスタは、隣接するＤＭＲなどのいくつかの他のメモリ機器に直接、または（たとえば、最終選択モジュール４１４を介して）１つまたは複数のメモリ出力３０６に、受信した値を出力してもよい。これにより、１つまたは複数の動作ステージをバイパスして、すべてよりも少ない動作ステージ４０４を使用して遂行してもよい命令を実行するように、実行ユニット３０２を構成することができるようになる場合がある。
【００９８】
いくつかの実施形態では、各動作モジュールは、自身の少なくとも１つの論理関数および／または算術関数を１クロックサイクルで遂行してもよい。その結果、図４に示すように、各動作ステージは、１クロックサイクルで、１つまたは複数の選択された入力オペランドに対して最大２つのデータ−処理動作を遂行してもよく、１つまたは複数のレジスタ４１２にデータ−処理動作の１つまたは複数からの結果値を保存してもよい。次のクロックサイクルで、パイプライン内の次の動作ステージは同様に、先行する動作ステージからの、保存された結果値の１つまたは複数に対して最大２つのデータ−処理動作を遂行してもよい。
【００９９】
他の実施形態では、より少ない関数ユニットおよび／または内部記憶レジスタを含むように、動作ステージ４０８および４１０の１つまたは複数をさらにパイプライン化してもよい。その結果、動作モジュールは、たとえば、より短いクロック周期を可能にしながら、一続きの複数のクロックサイクルにわたり関数を遂行してもよい。
【０１００】
処理要素３００が受信した命令に基づき、動作ステージ４０４Ａ〜Ｃを構成してもよい。したがって、処理要素３００が新しい、異なる命令を受信した場合、動作ステージ４０４Ａ〜Ｃを後で再構成してもよい。たとえば、処理要素３００は、ＭＡＤＤＳＩＧＮ命令を受信した場合、たとえば以下で説明するように、ＭＡＤＤＳＩＧＮ命令を実行するように動作ステージ４０４を構成してもよい。処理要素３００は、その後ＭＡＭＩＮＳＵＭ命令を受信した場合、たとえば以下で説明するように、ＭＡＭＩＮＳＵＭ命令を実行するように動作ステージ４０４を再構成してもよい。動作ステージ４０４を構成するステップは、動作ステージにより遂行すべき複数のデータ−処理動作を選択するステップ、および選択したデータ−処理動作への入力が提供されるレジスタを選択するステップを含んでもよい。
【０１０１】
たとえば、動作ステージを構成するステップは、特定の動作を遂行するように動作モジュール４０８および動作モジュール４１０のうち少なくとも一方を構成するステップを含んでもよい。動作ステージを構成するステップは、動作モジュール４０８および動作モジュール４１０の各々にどの１つまたは複数の入力を提供するかを規定するように選択モジュール４０６を構成するステップをさらに含んでもよい。たとえば、動作モジュール４０８および動作モジュール４１０への入力源の役割をどのレジスタが果たすかを選択するように選択モジュール４０６を構成してもよい。動作モジュールを構成するステップは、動作モジュール内のどこに入力が送信されるかを規定するように選択モジュール４０６を構成するステップをさらに含んでもよい。たとえば、動作モジュール４０８Ａが、加算器および乗算器を含み、かつ加算関数を遂行するように構成される場合、２つの入力オペランド（すなわち、加算すべき２つの入力オペランド）を、それらが記憶されたメモリ入力レジスタから、乗算器への入力ではなく、動作モジュール４０８Ａの加算器の入力へ提供するように選択モジュール４０６Ａを構成してもよい。
【０１０２】
実行ユニット３０２が関数を複数回、繰り返すべきであると命令が指定する場合、各動作ステージは、自身の動作を複数回、たとえば、クロックサイクルごとに１回、遂行してもよい。メモリ入力３０４は、関数を繰り返すたびに正しい入力オペランドを提供してもよい。その結果、実行ユニット３０２は、クロックサイクルごとにほぼ１つの結果のスループットで（たとえば、関数の最初の繰り返しを処理する間に付け加えられる待ち時間を除外する）関数を複数回、遂行してもよい。
図５−ＭＡＭＩＮＳＵＭ命令のために構成された実行ユニット
【０１０３】
図５は、いくつかの実施形態による、ＭＡＭＩＮＳＵＭ命令を実行するように構成された実行ユニット３０２の一例を示す。ＭＡＭＩＮＳＵＭ命令を使用して、実行ユニット３０２は、Ｌクロックサイクルの待ち時間、およびクロックサイクルあたり（Ｍ／２）＊Ｎ／（Ｎ＋Ｌ−１）インスタンスのスループットで、式１の（Ｍ／２）＊Ｎインスタンスを実装してもよい。図示するように、ＭＡＭＩＮＳＵＭ命令は、二重データ−処理経路（Ｍ＝２）で実装され、その結果、実行ユニット３０２は、３クロックサイクルの待ち時間、およびクロックサイクルあたりＮ／（Ｎ＋２）インスタンスのスループットで、式１のＮインスタンスを実装してもよい。二重データ−処理経路の実施形態は、代表的でしかないこと、および他の実施形態は、式１の追加インスタンス（たとえば、Ｍ＞２である場合）を実装するために、各動作ステージ内に追加動作モジュールを含んでもよいことを理解されたい。従来のＲＩＳＣアーキテクチャでは、ＭＡＭＩＮＳＵＭ命令はなく、７クロックサイクルの待ち時間、およびクロックサイクルあたり１／７インスタンスのスループットで類似の関数を遂行する場合があることを留意されてもよい。処理要素３００は、ＭＡＭＩＮＳＵＭ命令を受信したことに応答して、図５に示すように実行ユニット３０２を構成してもよい。
【０１０４】
ＭＡＭＩＮＳＵＭ命令は、上記で論じたように、２つの入力オペランド（ＸおよびＹ）、または２組のオペランドを指定してもよい。たとえば、各入力オペランドは、１６ビット符号付整数値であってもよい。２つの入力オペランドを、直接指定してもよい、または２つの入力オペランドが配置されたメモリ位置を指定することにより指定してもよい。図示するように、第１の入力オペランド（Ｘ）を、メモリ内のアレイＬＬＲ［］のインデックス「ｉ」に配置されるとして指定し、第２の入力オペランド（Ｙ）を、アレイＬＬＲ［］のインデックス「ｊ」に配置されるとして指定する。そのような実装では、処理要素３００は、「ｉ」および「ｊ」のインデックスを単に増分することにより、メモリ内に連続して記憶された１組のＸ値、およびメモリ内に連続して記憶された１組のＹ値の始めから終わりまで順序付けしてもよい。いくつかの実施形態では、処理要素３００は、それぞれの対のＸ値およびＹ値の始めから終わりまで、たとえば、１組のＸ値および１組のＹ値内の値をすべて使用してしまうまで、各クロックサイクルあたり１回、順序付けしてもよい。ＭＡＭＩＮＳＵＭ命令は、結果値（Ｚ）を記憶してもよいメモリ位置をさらに指定してもよい。
【０１０５】
図示するように、第１の動作モジュール４０８Ａに第１の入力オペランドＸを提供し、かつ第２の動作モジュール４１０Ａに第２の入力オペランドＹを提供するように選択モジュール４０６Ａを構成してもよい。
【０１０６】
動作モジュール４０８Ａおよび４１０Ａの各々を、それぞれの入力オペランドに対してＡＢＳ１６関数を遂行するように構成してもよい。ＡＢＳ１６関数は、２つの出力値を、すなわち、入力オペランドの絶対値（ａｂｓ＿ａ）および入力オペランドの符号関数（ｓｉｇｎ＿ａ）を提供してもよい。たとえば、絶対値は、１６ビット整数値であってもよい。符号関数は、たとえば、集合［−１，０，＋１］内の値を表す２ビット値であってもよい。他のシナリオでは、符号関数は代わりに、集合［−１，＋１］内の値または集合［−１，０］内の値を現す１ビット値であってもよい。さらに他のシナリオでは、符号関数は代わりに、上記で規定した集合に制限された有効な値を伴う１６ビット符号付整数値であってもよい。他のシナリオでは、符号関数に関して、代わりの符号表現を使用してもよい。
【０１０７】
したがって、動作モジュール４０８Ａは、Ｘの絶対値（ａｂｓ＿ｘ）およびＸの符号関数（ｓｉｇｎ＿ｘ）を決定してもよく、一方では、動作モジュール４１０Ａは、Ｙの絶対値（ａｂｓ＿ｙ）およびＹの符号関数（ｓｉｇｎ＿ｙ）を決定してもよい。これらの出力を、レジスタ４１２Ａに出力し、記憶してもよい。
【０１０８】
したがって、第１の入力値の絶対値および第１の入力値の符号関数を決定し、かつ第２の入力値の絶対値および第２の入力値の符号関数を決定するように第１の動作ステージ４０４Ａを構成してもよい。これを、たとえば第１のクロックサイクル中に遂行してもよい。
【０１０９】
図示するように、動作モジュール４０８Ｂにａｂｓ＿ｘおよびａｂｓ＿ｙを提供し、かつ動作モジュール４１０Ｂにｓｉｇｎ＿ｘおよびｓｉｇｎ＿ｙを提供するように、選択モジュール４０６Ｂを構成してもよい。
【０１１０】
２つの入力の最小値を、たとえば、ａｂｓ＿ｘおよびａｂｓ＿ｙの最小値を決定するように、動作モジュール４０８Ｂを構成してもよい。動作モジュール４０８Ｂは、たとえば、より小さな値を有する、２つの入力の一方であってもよい出力ｍｉｎ＿ｘｙを提供してもよい。出力ｍｉｎ＿ｘｙをレジスタ４１２Ｂに記憶してもよい。
【０１１１】
最終符号関数または組み合わせた符号関数（ｓｉｇｎ＿ｘｙ）を決定するように動作モジュール４１０Ｂを構成してもよい。最終符号関数ｓｉｇｎ＿ｘｙは、符号関数ｓｉｇｎ＿ｘとｓｉｇｎ＿ｙの積を表す値を含んでもよい。たとえば、ｓｉｇｎ＿ｘおよびｓｉｇｎ＿ｙに対して乗算関数を遂行することにより最終符号関数ｓｉｇｎ＿ｘｙを決定してもよい。他の実施形態では、符号関数ｓｉｇｎ＿ｘおよびｓｉｇｎ＿ｙがそれぞれ１ビットまたは２ビットしかない場合があるので、最終符号関数ｓｉｇｎ＿ｘｙは、乗算関数の結果をシミュレートする簡単な選択関数を使用して、より容易に決定してもよい。レジスタ４１２Ｂに最終符号関数ｓｉｇｎ＿ｘｙを記憶してもよい。
【０１１２】
したがって、Ｘの絶対値およびＹの絶対値の最小値を決定し、かつＸの符号関数とＹの符号関数の積を備える最終符号関数を決定するように、第２の動作ステージ４０４Ｂを構成してもよい。これを、たとえば第２のクロックサイクル中に遂行してもよい。いくつかの実施形態では、第２のクロックサイクルは、第１のクロックサイクル直後のクロックサイクルであってもよい。他の実施形態では、第２のクロックサイクルは、後で出現してもよい。
【０１１３】
図示するように、ｍｉｎ＿ｘｙおよびｓｉｇｎ＿ｘｙを動作モジュール４０８Ｃに提供するように選択モジュール４０６Ｃを構成してもよい。ＭＡＭＩＮＳＵＭ命令は、動作モジュール４１０Ｃを利用しなくてもよい。したがって、選択モジュール４０６Ｃは、動作モジュール４１０Ｃに入力を提供することも、意味のある入力を提供することもまったくない。あるいは、選択モジュール４０６Ｃは、タスクを課されない動作モジュール４１０Ｃを効率的に利用するために、たとえばＭＡＭＩＮＳＵＭ命令と無関係の別の関数に関する入力を提供してもよい。
【０１１４】
ｍｉｎ＿ｘｙに最終符号関数ｓｉｇｎ＿ｘｙを適用して、出力値Ｚを提供するように動作モジュール４０８Ｃを構成してもよい。たとえば、以下のように、ｍｉｎ＿ｘｙに最終符号関数を適用してもよい。
ｓｉｇｎ＿ｘｙ＞０（たとえば、＋１）である場合、Ｚ＝ｍｉｎ＿ｘｙ
ｓｉｇｎ＿ｘｙ＝０である場合、Ｚ＝０
ｓｉｇｎ＿ｘｙ＜０（たとえば、−１）である場合、Ｚ＝−ｍｉｎ＿ｘｙ
【０１１５】
あるいは、以下のように、ｍｉｎ＿ｘｙに最終符号関数を適用してもよい。
ｓｉｇｎ＿ｘｙ＝−１である場合、Ｚ＝−ｍｉｎ＿ｘｙ
ｓｉｇｎ＿ｘｙ≠−１である場合、Ｚ＝ｍｉｎ＿ｘｙ
【０１１６】
出力値Ｚを、レジスタ４１２Ｃに記憶してもよい、または代わりに、（たとえば、選択モジュール４１４を介して）メモリ出力３０６に、もしくは隣接するＤＭＲなどの別のメモリ機器に直接、記憶してもよい。
【０１１７】
したがって、Ｘの絶対値とＹの絶対値の最小値に最終符号関数ｓｉｇｎ＿ｘｙを適用するように第３の動作ステージ４０４Ｃを構成してもよい。これを、たとえば第３のクロックサイクル中に遂行してもよい。いくつかの実施形態では、第３のクロックサイクルは、第２のクロックサイクル直後のクロックサイクルであってもよい。他の実施形態では、第３のクロックサイクルは、後で出現してもよい。
【０１１８】
いくつかの実施形態では、メモリ出力３０６に出力値Ｚを記憶し、隣接するＤＭＲ、または別の処理要素のメモリ入力レジスタなどの、別のメモリ機器に出力してもよい。図示するように、アレイＬＬＲ［］のインデックス「ｌ」に出力値Ｚを記憶する。その結果、処理要素３００は、「１」のインデックスを単に増分することにより、連続したメモリ位置に１組の出力値を記憶してもよい。
図６−ＭＳＩＧＮ命令のために構成された実行ユニット
【０１１９】
図６は、いくつかの実施形態による、ＭＳＩＧＮ命令を実行するように構成された実行ユニット３０２の一例を示す。ＭＳＩＧＮ命令を使用して、実行ユニット３０２は、クロックサイクルあたりＭインスタンスのスループットで、式２のＭ＊Ｎインスタンスの一部分を実装してもよい。図示するように、ＭＳＩＧＮ命令は、二重データ−処理経路（Ｍ＝２）を用いて実装され、その結果、実行ユニット３０２は、クロックサイクルあたり２インスタンスのスループットで、式２の２Ｎインスタンスを実装してもよい。二重経路の実施形態は、代表的でしかないこと、および他の実施形態は、式２の異なる数のインスタンス（たとえば、Ｍ≠２である場合）を実装するために、各動作ステージ内により多くの、またはより少ない動作モジュールを含んでもよいことを理解されたい。従来のＲＩＳＣアーキテクチャでは、ＭＳＩＧＮ命令はなく、クロックサイクルあたり１／２インスタンスのスループットで類似の関数を遂行する場合があることを留意されてもよい。処理要素３００は、ＭＳＩＧＮ命令を受信したことに応答して、図６に示すように実行ユニット３０２を構成してもよい。
【０１２０】
式２を以下の形式で書き直してもよい。
ｕ＝０である場合、ｇ（ｕ，ｘ，ｙ）＝（ｙ＋ｘ）、そうではない場合、ｇ（ｕ，ｘ，ｙ）＝（ｙ−ｘ）  （式３）
【０１２１】
式３では、「ｕ」は、式２のように０または１の値を有する。あるいは、式２を以下の形式で書き直してもよく、式中ｓ＝（−１）uである。
ｓ＜０である場合、ｇ（ｓ，ｘ，ｙ）＝（ｙ−ｘ）、そうではない場合、ｇ（ｓ，ｘ，ｙ）＝（ｙ＋ｘ）  （式４）
【０１２２】
ＭＳＩＧＮ命令は、「ｓ」の値に基づき、入力ｘをｙに加算すべきか、ｙから減算すべきか（すなわち、ｙにｘを加算すべき、−ｘを加算すべきか）を決定してもよい。したがって、ＭＳＩＧＮ命令を実行した後に続いて加算関数を実行することにより式４を実装してもよい。実行ユニット３０２は、Ｍ−幅の（たとえば、二重の）データ−処理経路を含んでもよいので、ＭＳＩＧＮ命令は、（ｓのＭ個の値を使用して）ｘのＭ個（たとえば、２つ）の値に対して同時に動作してもよい。
【０１２３】
ＭＳＩＧＮ命令は、入力オペランド（Ｘ）および符号オペランド（Ｓ）を指定してもよい。あるいは、ＭＳＩＧＮ命令は、上記で論じたように、複数組の入力オペランドおよび複数組の符号オペランドを指定してもよい。たとえば、各入力オペランドＸは、第１のオペランド値Ｘ０と第２のオペランド値Ｘ１の連結を表す３２ビット値であってもよい。第１のオペランド値Ｘ０および第２のオペランド値Ｘ１の各々は、１６ビット符号付整数値であってもよい。各符号オペランドＳは、第１の符号関数Ｓ０と第２の符号関数Ｓ１の連結を表す値であってもよい。各符号関数を、１ビット値、２ビット値、１６ビット値により表してもよい、または上記で論じたように、いくつかの他の形式で表してもよい。各動作ステージ内に異なる数の動作モジュール（たとえば、Ｍ≠２である場合）を含む実施形態では、入力オペランドＸは、より多くの、またはより少ないオペランド値を含んでもよく、かつ符号オペランドＳは、より多くの、またはより少ない符号関数を含んでもよいことを理解されたい。入力オペランドＸおよび符号オペランドＳを、直接指定してもよい、または入力オペランドＸおよび符号オペランドＳが配置されるそれぞれのメモリ位置を指定することにより指定してもよい。
【０１２４】
図示するように、入力オペランド（Ｘ）を、メモリ内のアレイＬＬＲ［］のインデックス「ｉ」に配置されるとして指定し、符号オペランド（Ｓ）を、メモリ内のアレイＳ［］のインデックス「ｋ」に配置されるとして指定する。そのような実装では、処理要素３００は、「ｉ」および「ｋ」のインデックスを単に増分することにより、メモリ内に連続して記憶された１組のＸ値、およびメモリ内に連続して記憶された１組のＳ値の始めから終わりまで順序付けしてもよい。たとえば、処理要素３００は、たとえば各クロックサイクルで、それぞれの入力オペランドＸおよびそれぞれの符号オペランドＳを受信するために、「ｉ」および「ｋ」のインデックスを増分してもよい。ＭＳＩＧＮ命令は、結果値（Ｚ）を記憶してもよいメモリ位置をさらに指定してもよい。たとえば、Ｚは、第１の結果値Ｚ０および第２の結果値Ｚ１の連結を表す３２ビット値であってもよい。結果値Ｚは、各動作ステージ内に異なる数の動作モジュール（たとえば、Ｍ≠２である場合）を含む実施形態で、より多くの、またはより少ない、構成部分を成す結果値を含んでもよいことを理解されたい。
【０１２５】
図示するように、第１のオペランド値Ｘ０および第１の符号関数Ｓ０を第１の動作モジュール４０８Ａに提供し、かつ第２のオペランド値Ｘ１および第２の符号関数Ｓ１を第２の動作モジュール４１０Ａに提供するように、選択モジュール４０６Ａを構成してもよい。
【０１２６】
第１のオペランド値Ｘ０に第１の符号関数Ｓ０を適用して、第１の結果値Ｚ０を提供するように、動作モジュール４０８Ａを構成してもよい。たとえば、ＭＡＭＩＮＳＵＭ関数の動作モジュール４０８Ｃに関して上記で論じた、符号関数を適用するための手順のどちらかに従って、Ｘ０に第１の符号関数Ｓ０を適用してもよい。同様に、第２のオペランド値Ｘ１に第２の符号関数Ｓ１を適用して、第２の結果値Ｚ１を提供するように、動作モジュール４１０Ａを構成してもよい。
【０１２７】
第１および第２の結果値Ｚ０およびＺ１を、レジスタ４１２Ａに記憶してもよい、または代わりに、（たとえば、選択モジュール４１４を介して）メモリ出力３０６に、もしくは隣接するＤＭＲなどの別のメモリ機器に直接、記憶してもよい。
【０１２８】
したがって、第１のオペランド値Ｘ０に第１の符号関数Ｓ０を適用し、かつ第２のオペランド値Ｘ１に第２の符号関数Ｓ１を適用するように、第１の動作ステージ４０４Ａを構成してもよい。これを、たとえば第１のクロックサイクル中に遂行してもよい。
【０１２９】
いくつかの実施形態では、メモリ出力３０６に第１および第２の結果値Ｚ０およびＺ１を記憶してもよく、隣接するＤＭＲ、または別の処理要素のメモリ入力レジスタなどの、別のメモリ機器に、結合した結果値Ｚを出力してもよい。図示するように、アレイＬＬＲ［］のインデックス「ｌ」に結果値Ｚを記憶する。その結果、処理要素３００は、「ｌ」のインデックスを単に増分することにより、連続したメモリ位置に複数組の出力値を記憶してもよい。
図７−ＭＡＤＤＳＩＧＮ命令のために構成された実行ユニット
【０１３０】
図７は、いくつかの実施形態による、ＭＡＤＤＳＩＧＮ命令を実行するように構成された実行ユニット３０２の一例を示す。ＭＡＤＤＳＩＧＮ命令を使用して、実行ユニット３０２は、Ｌクロックサイクルの待ち時間、およびクロックサイクルあたりＭ＊Ｎ／（Ｎ＋Ｌ−１）インスタンスのスループットで、式２（または式４）のＭ＊Ｎインスタンスを実装してもよい。図示するように、二重データ−処理経路（Ｍ＝２）を用いてＭＡＤＤＳＩＧＮ命令を実装し、その結果、実行ユニット３０２は、２クロックサイクルの待ち時間、およびクロックサイクルあたり２Ｎ／（Ｎ＋１）インスタンスのスループットで、式２の２Ｎインスタンスを実装してもよい。二重データ−処理経路の実施形態は、代表的でしかないこと、および他の実施形態は、式２のより多くの、またはより少ないインスタンス（たとえば、Ｍ≠２である場合）を実装するために、各動作ステージ内により多くの、またはより少ない動作モジュールを含んでもよいことを理解されたい。従来のＲＩＳＣアーキテクチャでは、ＭＡＤＤＳＩＧＮ命令はなく、４クロックサイクルの待ち時間、およびクロックサイクルあたり１／４インスタンスのスループットで類似の関数を遂行する場合があることを留意されてもよい。処理要素３００は、ＭＡＤＤＳＩＧＮ命令を受信したことに応答して、図７に示すように実行ユニット３０２を構成してもよい。
【０１３１】
ＭＡＤＤＳＩＧＮ命令の関数は、ＭＳＩＧＮ命令の関数の後にＭ−幅の（たとえば、二重の）加算関数が続くと考えてもよい。ＭＳＩＧＮ関数とＭ−幅の加算関数を単一命令に組み合わせることは、たとえば、発行される命令の数、および遂行されるメモリアクセスの数を低減することにより、システム性能の改善をもたらす場合がある。たとえば、ＭＡＤＤＳＩＧＮにより、ＭＳＩＧＮ関数の出力を、遠隔メモリの中に書き込み、次いで、加算のために別個の処理エンティティに誘導するのではなく、内部レジスタ（たとえば、４１２Ａ）に記憶し、後続の動作ステージ（たとえば、動作ステージ４０４Ｂ）に直接パイプライン化して、加算関数を遂行することができるようになる。
【０１３２】
ＭＡＤＤＳＩＧＮ命令は、ＭＳＩＧＮ関数の均等物とＭ−幅の加算関数の両方を遂行するので、ＭＳＩＧＮ命令に比べて、追加オペランドを指定してもよい。具体的には、ＭＡＤＤＳＩＧＮ命令は、第１の入力オペランド（Ｘ）、第２の入力オペランド（Ｙ）、および符号オペランド（Ｓ）を指定してもよい。あるいは、ＭＡＤＤＳＩＧＮ命令は、上記で論じたように、複数組の第１の入力オペランド、複数組の第２の入力オペランド、および複数組の符号オペランドを指定してもよい。たとえば、各入力オペランドＸは、第１のオペランド値Ｘ０と第２のオペランド値Ｘ１の連結を表す３２ビット値であってもよい。各入力オペランドＹは、第３のオペランド値Ｙ０と第４のオペランド値Ｙ１の連結を表す３２ビット値であってもよい。第１、第２、第３、および第４のオペランド値の各々は、１６ビット符号付整数値であってもよい。各符号オペランドＳは、第１の符号関数Ｓ０と第２の符号関数Ｓ１の連結を表す値であってもよい。各符号関数を、１ビット値、２ビット値、１６ビット値により表してもよい、または上記で論じたように、いくつかの他の形式で表してもよい。各動作ステージ内により多くの、またはより少ない動作モジュール（たとえば、Ｍ≠２である場合）を含む実施形態では、第１の入力オペランドＸおよび第２の入力オペランドＹの各々は、より多くの、またはより少ないオペランド値を含んでもよく、かつ符号オペランドＳは、より多くの、またはより少ない符号関数を含んでもよいことを理解されたい。第１の入力オペランドＸ、第２の入力オペランドＹ、および符号オペランドＳを、直接指定してもよい、または第１の入力オペランドＸ、第２の入力オペランドＹ、および符号オペランドＳが配置されるそれぞれのメモリ位置を指定することにより指定してもよい。
【０１３３】
図示するように、第１の入力オペランドＸを、メモリ内のアレイＬＬＲ［］のインデックス「ｉ」に配置されるとして指定し、第２の入力オペランドＹを、アレイＬＬＲ［］のインデックス「ｊ」に配置されるとして指定し、符号オペランドＳを、メモリ内のアレイＳ［］のインデックス「ｋ」に配置されるとして指定する。そのような実装では、処理要素３００は、「ｉ」、「ｊ」、および「ｋ」のインデックスを単に増分することにより、メモリ内に連続して記憶された１組のＸ値、メモリ内に連続して記憶された１組のＹ値、およびメモリ内に連続して記憶された１組のＳ値の始めから終わりまで順序付けしてもよい。たとえば、処理要素３００は、たとえば各クロックサイクルで、それぞれの第１の入力オペランドＸ、それぞれの第２の入力オペランドＹ、およびそれぞれの符号オペランドＳを受信するために、「ｉ」、「ｊ」、および「ｋ」のインデックスを増分してもよい。ＭＡＤＤＳＩＧＮ命令は、結果値（Ｚ）を記憶してもよいメモリ位置をさらに指定してもよい。たとえば、Ｚは、第１の結果値Ｚ０および第２の結果値Ｚ１の連結を表す３２ビット値であってもよい。結果値Ｚは、各動作ステージ内に異なる数の動作モジュール（たとえば、Ｍ≠２である場合）を含む実施形態で、より多くの、またはより少ない構成成分を成す結果値を含んでもよいことを理解されたい。
【０１３４】
図示するように、第１の動作モジュール４０８Ａに第１のオペランド値Ｘ０および第１の符号関数Ｓ０を提供し、かつ第２の動作モジュール４１０Ａに第２のオペランド値Ｘ１および第２の符号関数Ｓ１を提供するように、選択モジュール４０６Ａを構成してもよい。第３のオペランド値Ｙ０および第４のオペランド値Ｙ１をレジスタ４１２Ａに直接誘導し、動作モジュールをバイパスするように、選択モジュール４０６Ａをさらに構成してもよい。
【０１３５】
第１のオペランド値Ｘ０に第１の符号関数Ｓ０を適用することにより第１の符号付値ｓｘ０を決定するように、動作モジュール４０８Ａを構成してもよい。たとえば、ＭＡＭＩＮＳＵＭ関数の動作モジュール４０８Ｃに関して上記で論じた、符号関数を提供するための手順のどちらかに従って、Ｘ０に第１の符号関数Ｓ０を適用してもよい。第２のオペランド値Ｘ１に第２の符号関数Ｓ１を適用することにより、第２の符号付値ｓｘ１を決定するように、動作モジュール４１０Ａを同様に構成してもよい。第１および第２の符号付値ｓｘ０およびｓｘ１を、レジスタ４１２Ａに記憶してもよい。
【０１３６】
したがって、第１のオペランド値Ｘ０に第１の符号関数Ｓ０を適用することにより第１の符号付値ｓｘ０を決定し、かつ第２のオペランド値Ｘ１に第２の符号関数Ｓ１を適用することにより第２の符号付値ｓｘ１を決定するように、第１の動作ステージ４０４Ａを構成してもよい。これを、たとえば第１のクロックサイクル中に遂行してもよい。
【０１３７】
図示するように、第１の動作モジュール４０８Ｂに第１の符号付値ｓｘ０および第３のオペランド値Ｙ０を提供し、かつ第２の動作モジュール４１０Ｂに第２の符号付値ｓｘ１および第４のオペランド値Ｙ１を提供するように、選択モジュール４０６Ｂを構成してもよい。
【０１３８】
第１の符号付値ｓｘ０および第３のオペランド値Ｙ０に対して加算関数を遂行して、第１の結果値Ｚ０を作り出すように、動作モジュール４０８Ｂを構成してもよい。たとえば、加算関数は、１６ビット符号付整数加算関数（Ｙ０＋ｓｘ０）を含んでもよい。いくつかのシナリオでは、加算関数は、式２に関して上記で論じたような飽和関数を含んでもよく、その結果、動作モジュール４０８Ｂは、関数ｓａｔ（Ｙ０＋ｓｘ０）を実装する。最大および最初の飽和値を、ＭＡＤＤＳＩＧＮ命令により提供してもよい、または前もって提供してもよい、または変更できないようにコードしてもよい。
【０１３９】
第２の符号付値ｓｘ１および第４のオペランド値Ｙ１に対して加算関数を遂行して、第２の結果値Ｚ１を作り出すように、動作モジュール４１０Ｂを同様に構成してもよい。たとえば、加算関数は、１６ビット符号付整数加算関数（Ｙ０＋ｓｘ０）、または飽和加算関数ｓａｔ（Ｙ０＋ｓｘ０）を含んでもよい。
【０１４０】
第１および第２の結果値Ｚ０およびＺ１を、レジスタ４１２Ｂに記憶してもよい、または代わりに、（たとえば、選択モジュール４１４を介して）メモリ出力３０６に、もしくは隣接するＤＭＲなどの別のメモリ機器に直接、記憶してもよい。
【０１４１】
したがって、第３のオペランド値Ｙ０に第１の符号付値ｓｘ０を加算し、かつ第４のオペランド値Ｙ１に第２の符号付値ｓｘ１を加算するように、第２の動作ステージ４０４Ｂを構成してもよい。これを、たとえば第２のクロックサイクル中に遂行してもよい。
【０１４２】
いくつかの実施形態では、第１および第２の出力値Ｚ０およびＺ１を、メモリ出力３０６に記憶してもよく、結合した結果値Ｚを、隣接するＤＭＲ、または別の処理要素のメモリ入力レジスタなどの、別のメモリ機器に出力してもよい。図示するように、アレイＬＬＲ［］のインデックス「ｌ」に結果値Ｚを記憶する。その結果、処理要素３００は、「ｌ」のインデックスを単に増分することにより、連続したメモリ位置に複数組の結果値を記憶してもよい。
図８−ＭＡＤＤＳＩＧＮ命令のために構成された実行ユニット
【０１４３】
図８は、いくつかの実施形態による、１つまたは複数のビットパック型レジスタ（ｂｉｔ−ｐａｃｋｅｄ  ｒｅｇｉｓｔｅｒ、ＢＰＲ）を使用してＭＡＤＤＳＩＧＮ命令を実行するように構成された実行ユニット３０２の一例を示す。動作ステージ４０４Ａおよび４０４Ｂの各々を、図７に示すのと同じ手法で構成してもよい。しかしながら、いくつかの実施形態では、処理要素３００は、一度に２つの入力値（たとえば、クロックサイクルあたり２つの３２ビット入力値）だけを受信することをサポートしてもよい。これは、ＭＡＤＤＳＩＧＮ命令が２つの入力オペランド（たとえば、２つの３２ビット入力値）に加えて符号オペランドを利用するので、図７に示すようなＭＡＤＤＳＩＧＮ命令の動作を妨げる場合がある。
【０１４４】
この制約を克服するために、メモリ入力３０４Ｂは、１つまたは複数の符号オペランドを事前にロードしてもよい１つまたは複数のＢＰＲを含んでもよい。たとえば、上記で論じたように、ＭＡＤＤＳＩＧＮ命令は、複数組の第１の入力オペランド、複数組の第２の入力オペランド、および複数組の符号オペランドを指定してもよい。具体的には、ＭＡＤＤＳＩＧＮ命令は、これらの複数組の各々が始まる、メモリ内の１つまたは複数のアレイ内の、それぞれの開始アドレスを指定してもよい。さらに、上記で論じたように、ＭＡＤＤＳＩＧＮ命令は、複数組の各々のサイズを指定してもよい（たとえば、１つまたは複数の組内のオペランド数を明示的に指定することによる、または関数を繰り返す回数、および／もしくは１つまたは複数の組の終了メモリ位置を指定することによる）。
【０１４５】
ＭＡＤＤＳＩＧＮ命令を受信したことに応答して、処理要素３００は、１つまたは複数のＢＰＲの中に複数組の符号オペランドをロードしてもよい。あるいは、処理要素は、たとえば、ＢＰＲのサイズ、入力ラインのサイズ、および／または符号オペランドのサイズにより制約されるとき、１つまたは複数のＢＰＲの中に複数組の符号オペランドのサブセットをロードしてもよい。いくつかの実施形態では、この事前ロードを単一クロックサイクルで行ってもよい。たとえば、メモリ入力３０４Ｂが３２ビットＢＰＲを含み、かつ各符号オペランドＳが２ビットオペランド（たとえば、２つの１ビット符号関数Ｓ０とＳ１の連結）である場合、単一クロックサイクルで、第１の１６対の入力オペランドに対応する１６個の符号オペランドをＢＰＲにロードしてもよい。たとえば、ＭＡＤＤＳＩＧＮ命令により複数組の符号オペランドに関して指定されたメモリ位置に配置された（またはそこから始まる）３２ビットをＢＰＲにロードしてもよい。したがって、処理要素３００は、任意の外部供給源から符号オペランドＳをさらに受信することなく、ＭＡＤＤＳＩＧＮ関数を１６回連続して遂行してもよい。したがって、処理要素３００が、たとえクロックサイクルあたり２つの入力オペランドだけを受信してもよいとしても、たとえば連続するクロックサイクルの間に、ＭＡＤＤＳＩＧＮ関数を１６回遂行してもよい。
【０１４６】
ＭＡＤＤＳＩＧＮ関数の動作中、ＢＰＲは、選択モジュール４０６Ａに符号オペランドＳを提供してもよい。たとえば、符号オペランドＳが２ビット値である場合、ＢＰＲは、選択モジュール４０６Ａに符号オペランドＳの最下位の２ビットを提供してもよい。次のクロックサイクルで、ＢＰＲは、ＢＰＲの内容を右シフトしてもよく、その結果、これまでの最下位の２ビットは削除され、次の２ビットが次の符号オペランドＳとして提供される。これは、事前にロードした符号オペランドＳの値の各々を使用してしまうまで、たとえば各クロックサイクルで繰り返されてもよい。そのとき、ＭＡＤＤＳＩＧＮ命令に従って、追加のＭＡＤＤＳＩＧＮ命令を遂行すべき場合、ＢＰＲが複数組の符号オペランドＳの次のサブセットをロードする間、動作ステージ４０４の動作は一時停止してもよい。複数組の符号オペランド全体（ならびに複数組の第１の入力オペランドおよび第２の入力オペランド）を使用してしまうまで、このサイクルを繰り返してもよい。
【０１４７】
本開示の実施形態は、さまざまな形態のいずれかで実現されてよい。たとえば、いくつかの実施形態では、本発明は、コンピュータ実装方法、コンピュータ可読記憶媒体、またはコンピュータシステムとして実現されてもよい。
【０１４８】
いくつかの実施形態では、非一時的コンピュータ可読記憶媒体は、プログラム命令および／またはデータを記憶するように構成されてもよく、この場合、プログラム命令は、コンピュータシステムにより実行された場合、方法を、たとえば、本明細書に記述する方法の実施形態のいずれか、または本明細書に記述する方法の実施形態の任意の組合せ、または本明細書に記述する方法の実施形態のいずれかからなる任意のサブセット、またはそのようなサブセットの任意の組合せを、コンピュータシステムに遂行させる。
【０１４９】
いくつかの実施形態では、コンピューティング機器は、プロセッサ（または１組のプロセッサ）および記憶媒体を含むように構成されてもよく、この場合、記憶媒体は、プログラム命令を記憶し、この場合、プロセッサは、記憶媒体からプログラム命令を読み出し、実行するように構成され、この場合、プログラム命令は、本明細書に記述するさまざまな方法の実施形態のいずれか（または本明細書に記述する方法の実施形態の任意の組合せ、または本明細書に記述する方法の実施形態のいずれかからなる任意のサブセット、またはそのようなサブセットの任意の組合せ）を実装するように実行可能である。機器は、さまざまな形態のいずれかで実現されてもよい。
【０１５０】
具体的な実施形態について上述したが、これらの実施形態は、特定の特徴に関して、単一の実施形態だけについて記述している場合でさえ、本開示の範囲を限定することを意図するものではない。本開示で提供する特徴の例は、特に指定のない限り、制限的ではなく、例示的であることが意図される。上記の記述は、本開示の恩恵を受ける当業者に明らかなように、そのような代替形態、修正形態、および均等物を包含することが意図される。
【０１５１】
本開示の範囲は、（明示的に、または暗示的に）本明細書で開示する任意の特徴もしくは特徴の組合せ、またはそれらの任意の一般化を、それが本明細書で対処する問題のいずれか、もしくはすべてを軽減してもしなくても含む。したがって、本出願（またはその優先権を主張する出願）の手続き中に、任意のそのような特徴の組合せに対して、新しい請求項を考案してもよい。詳細には、添付の特許請求の範囲を参照すると、従属クレームからの特徴は、独立クレームの特徴と組み合わせられてもよく、それぞれの独立クレームからの特徴は、添付の特許請求の範囲に列挙された具体的組合せだけではなく、任意の適切な手法で組み合わせられてもよい。
【０１５２】
以下の段落に従って他の実施形態を実装してもよい。
【０１５３】
処理要素であって、
複数のパイプライン化動作ステージであって、各動作ステージは複数のデータ−処理動作を遂行するように構成可能な複数のパイプライン化動作ステージを備え、
処理要素は、第１の命令を受信したことに応答して、
第１のオペランド値および第２のオペランド値を備える第１の入力オペランドを受信し、
第３のオペランド値および第４のオペランド値を備える第２の入力オペランドを受信し、
第１のオペランド値に第１の符号関数を適用することにより第１の符号付値を決定し、かつ第２のオペランド値に第２の符号関数を適用することにより第２の符号付値を決定するように構成されるように第１の動作ステージを構成し、
第３のオペランド値に第１の符号付値を加算し、かつ第４のオペランド値に第２の符号付値を加算するように第２の動作ステージを構成する
ように構成された処理要素。
【０１５４】
上述の処理要素では、
第１のクロックサイクル中に、第１の符号付値および第２の符号付値を決定するように第１の動作ステージを構成し、
第２のクロックサイクル中に、第３のオペランド値に第１の符号付値を加算し、かつ第４のオペランド値に第２の符号付値を加算するように第２の動作ステージを構成する。
【０１５５】
第１の命令を受信したことに応答して、複数対の入力オペランドを順次処理するように上述の処理要素をさらに構成し、第１の入力オペランドおよび第２の入力オペランドは、複数対の入力オペランドの第１対を構成し、
複数の連続するクロックサイクルの各クロックサイクル中に、それぞれの対の入力オペランドに基づき、それぞれの第１の符号付値およびそれぞれの第２の符号付値を得るように第１の動作ステージを構成する。
【０１５６】
第２の異なる命令を受信したことに応答して、第１の命令を受信したことに応答して構成されるデータ−処理動作と異なる複数のデータ−処理動作を遂行するように少なくとも１つの動作ステージを構成するように、上述の処理要素をさらに構成してもよい。
【０１５７】
上述の処理要素では、複数のパイプライン化動作ステージは、第１の複数のパイプライン化動作ステージを備え、処理要素は、
第１の複数のパイプライン化動作ステージと同じ手法で構成された第２の複数のパイプライン化動作ステージ
をさらに備える。
【０１５８】
上述の処理要素では、動作ステージを構成するステップは、動作ステージにより遂行すべき複数のデータ−処理動作を選択するステップと、選択したデータ−処理動作への入力が提供されるレジスタを選択するステップとを備える。
【０１５９】
上述の処理要素では、第１の処理要素は、第１および第２の受信した符号関数を備える複数の符号関数を記憶するビットパック型レジスタをさらに備え、処理要素は、第１のクロックサイクルより前に、ビットパック型レジスタの中に複数の符号関数をロードするように構成される。
【図１】
2019508785.tif 000003
【図２】
2019508785.tif 000004
【図３】
2019508785.tif 000005
【図４】
2019508785.tif 000006
【図５】
2019508785.tif 000007
【図６】
2019508785.tif 000008
【図７】
2019508785.tif 000009
【図８】
2019508785.tif 000010
【国際調査報告】
2019508785.tif 000011
2019508785.tif 000012
2019508785.tif 000013
2019508785.tif 000014