本開示の特定の実装形態が、図面を参照して以下で説明される。説明において、共通の特徴は図面全体で共通の参照番号によって指定されている。本明細書で使用される場合、様々な用語は、特定の実装形態を説明することのみが目的であり、実装形態を限定することは意図されない。たとえば、単数形「a」、「an」、および「the」は、文脈が別段に明確に示さない限り複数形を含むことを意図する。「備える」(「comprises」および「comprising」)という用語は、「含む」(「includes」または「including」)と互換可能に使用され得ることがさらに理解され得る。加えて、「ここにおいて(wherein)」という用語は、「ここで(where)」と互換可能に使用され得ることが理解されよう。本明細書において使用される場合、構造、構成要素、動作などの要素を修飾するために使用される序数の用語(たとえば、「第1の」、「第2の」、「第3の」など)は、それ自体が要素の別の要素に対する任意の優先度または順序を示すものではなく、むしろ、(序数の用語を使用しなければ)同じ名称を有する別の要素から、その要素を区別するものにすぎない。本明細書において使用される場合、「セット」という用語は、1つまたは複数の(one or more)特定の要素を指し、「複数(plurality)」という用語は、複数(multiple)(たとえば、2つ以上)の特定の要素を指す。
本開示は、少数の命令(たとえば、1つまたは2つの命令)を実行することによって、区分線形近似を使用して関数の出力値を推定することを説明する。たとえば、プロセッサは、(関数の入力値に対応する)入力値のベクトルを受信することができ、複数の区分線形係数を選択することができる。いくつかの実装形態では、プロセッサは、複数の区分分析係数を含む区分分析係数のベクトルを生成することができる。ある特定の実装形態では、関数は非線形であることがあり、区分分析係数は非線形関数の一次テイラー展開(たとえば、線形近似)に基づくことがある。複数の区分分析係数は、複数の区分分析係数を含むテーブルから選択され得る。置換ネットワーク(permutation network)が、入力値のベクトルおよびテーブルに基づいて、複数の区分分析係数を選択するために(または区分分析係数のベクトルを生成するために)プロセッサによって使用され得る。例示すると、置換ネットワークは、入力値のベクトルに基づいて複数の区分分析係数(たとえば、区分分析係数のベクトル)を含むテーブルに含まれる複数の区分分析係数のうちの1つまたは複数を選択し、それらを第1のレジスタから第2のレジスタにルーティングするために使用され得る。入力値のベクトルの各入力値は、区分分析係数のセットに対応し得る。さらに、複数の区分分析係数を選択することは、単一の命令の実行を介して実行され得る。
加えて、プロセッサは、複数の区分分析係数および入力値のベクトルに基づいて、関数の推定出力値を決定(たとえば、生成)することができる。たとえば、算術論理回路は、第1の区分分析係数を第1の入力値と乗算することによって積を生成することができる。算術論理回路は、その積を第2の区分分析係数に加算することによって、第1の推定出力値を生成することができる。いくつかの実装形態では、関数の推定出力値を決定することは、別の単一の命令を実行することによって実行され得る。他の実装形態では、複数の区分分析係数を選択することと推定出力値を決定することの両方が、同じ単一の命令に応答して実行され得る。
他の近似技法と比較して、線形近似を使用して非線形関数の値を推定することによって、より少ない命令を使用して関数の推定出力値を生成することができる。他の近似技法と比較して、推定出力値を生成するために使用される命令の数を減らすことによって、推定出力値を生成するために使用される計算リソースの量の減少を達成することができる。加えて、要素ごとまたはレーンごとのルックアップテーブルと比較して、区分分析係数をルーティングするための置換ネットワークを使用することによって、テーブルを記憶するために、推定出力値を生成するために、または両方のために使用されるメモリの量の減少を達成することができる。
図1を参照すると、区分分析を使用して1つまたは複数の入力値に対応する関数の推定出力値を生成するためのシステム100が図示される。いくつかの実装形態によれば、区分分析は、一次テイラー展開を使用した関数の線形近似(たとえば、y=a*x+b)に基づき得る。いくつかの実装形態では、関数は、非線形関数を含むことがあり、またはそれに対応することがある。たとえば、関数は、逆関数、平方根関数、逆平方根関数、指数関数、対数関数、三角関数、逆三角関数(たとえば、逆正接関数)、またはこれらの組合せを含むことがあり、もしくはそれらに対応することがある。
システム100は、プロセッサ102とメモリ106とを含む。メモリ106は、プロセッサ102に結合されることがあり、1つまたは複数の係数テーブル(たとえば、ルックアップテーブル)などのデータを記憶するように構成されることがある。たとえば、メモリ106は入力係数テーブル120を記憶することができる。入力係数テーブル120は、特定の関数(たとえば、逆平方根関数)の区分分析近似と関連付けられる区分分析係数の複数のセットを含み得る。たとえば、入力係数テーブル120は、区分分析係数の第1のセットa0およびb0ならびに区分分析係数の第2のセットa1およびb1を含み得る。他の例では、入力係数テーブル120は、区分分析係数の2つより少ない、または2つより多いセットを含み得る。いくつかの実装形態では、メモリ106は複数の入力係数テーブルを記憶することがあり、各入力係数テーブルは、異なる関数、異なる程度の推定精度(たとえば、区分分析に使用されるセグメントの数)、またはこれらの組合せに対応し得る。メモリ106は図1ではプロセッサ102とは別個であるものとして示されているが、他の実装形態では、メモリ106はプロセッサ102に含まれることがある。
プロセッサ102は、テーブルロード命令を受信したことに応答して、プロセッサ102の1つまたは複数のレジスタ(たとえば、レジスタファイル)へと1つまたは複数の係数テーブルをロードするように構成され得る。例示すると、プロセッサ102は、メモリ106から入力係数テーブル120を取り出し(または受信し)、入力係数テーブル120をプロセッサ102の1つまたは複数のレジスタに記憶するように構成され得る。
プロセッサ102は、(図1に示されない)1つまたは複数のベクトル命令を受信するように構成され得る。1つまたは複数のベクトル命令は、図2〜図7を参照して説明されるベクトル命令を含むことがあり、またはそれに対応することがある。いくつかの実装形態では、プロセッサ102は、1つまたは複数のベクトル命令を受信する前に、1つまたは複数の係数テーブルを1つまたは複数のレジスタにロードすることができる。1つまたは複数のベクトル命令の実行の間、プロセッサ102は、入力ベクトル110および入力係数テーブル120を受信することができ、プロセッサ102は推定出力値ベクトル116を生成することができる。入力ベクトル110(たとえば、入力値のベクトル)は、特定の関数の1つまたは複数の入力値を含むことがあり、またはそれに対応することがある。推定出力値ベクトル116は、入力ベクトル110に対応する入力値を有する特定の関数の1つまたは複数の推定(たとえば、近似)出力値を含むことがあり、またはそれに対応することがある。
プロセッサ102は、係数決定ユニット104および算術論理回路112を含み得る。係数決定ユニット104は、入力ベクトル110および入力係数テーブル120を受信し(または取り出し)、複数の係数140を選択するように構成され得る。いくつかの実装形態では、係数決定ユニット104は、プロセッサ102の1つまたは複数のレジスタから入力係数テーブル120を取り出す(または受け取る)ことができる。他の実装形態では、係数決定ユニット104は、メモリ106から入力係数テーブル120を取り出す(または受信する)ことができる。複数の係数140は、図2〜図5を参照して説明されるような係数ベクトル、または、図6および図7を参照して説明されるような区分分析係数の1つまたは複数の選択されたセットを含むことがあり、もしくはそれに対応することがある。複数の係数140は、区分分析係数の1つまたは複数のセットを含み得る。たとえば、入力ベクトル110の特定の入力値に対して、プロセッサ102の係数決定ユニット104は、対応する複数のビット(たとえば、二進形式でビット値を示す複数のビット)を決定することができる。複数のビットは、特定の入力値の二進表現と関連付けられる上位ビットの数に基づいて決定され得る。複数のビットが、入力係数テーブル120に対するルックアップを実行するためのインデックス値として使用され得る。他の実装形態では、単一のビット値が、係数決定ユニット104によって決定され、ルックアップを実行するためにインデックス値として使用され得る。ルックアップに基づいて、プロセッサ102の係数決定ユニット104は、特定の入力値に対応する区分分析係数の特定のセットを決定することができる。例示すると、入力ベクトル110の各入力値に対して、係数決定ユニット104は、入力係数テーブル120から区分分析係数のペアなどの特定のセットを選択することができる。複数の係数140は、区分分析係数の選択されたセットを含み得る。したがって、複数の係数140は、入力ベクトル110の(たとえば、それに含まれる)各入力値に対する、区分分析係数の対応するセットを含み得る。たとえば、区分分析係数の各々の選択されたセットは、入力ベクトル110の入力値に対応し得る。
いくつかの実装形態では、係数決定ユニット104は、1つまたは複数のシフト値を適用することによって、入力ベクトル110の入力値に対応するビット値を決定することができる。たとえば、係数決定ユニット104は、1つまたは複数のシフト値を使用して1つまたは複数の二進シフト演算を実行することができる。例示すると、係数決定ユニット104は、入力値を右シフトする(たとえば、除算する)ことができる。入力値(たとえば、その二進表現)は、ビット値を生成するためにあるシフト値(たとえば、0の数)によって右シフトされ得る。そのビット値の特定の数の「最上位」の桁が、インデックス値を生成するために使用され得る。ある特定の実装形態では、入力値は係数決定ユニット104による受信の前に正規化され、入力値はインデックス値に対応するビット値の後続の桁の数(たとえば、2、3、4、5など)を決定するために、シフト値によって右シフトされる。
いくつかの実装形態では、入力係数テーブル120は、1つまたは複数のシフト値を含む。ある特定の実装形態では、1つまたは複数のシフト値は同じ値を有し得る。たとえば、同じシフト値は入力ベクトル110の各入力値に適用され得る。他の実装形態では、プロセッサ102はシフト値のベクトルを受信または生成することができる。たとえば、図9を参照して説明されるように、プロセッサ102はシフト値生成器を含み得る。
いくつかの実装形態では、係数決定ユニット104は置換ネットワーク114を含み得る。置換ネットワーク114は、複数の係数140を選択するために、区分分析係数を選択してルーティングするように構成され得る。たとえば、置換ネットワーク114は、入力ベクトル110の各入力値に対して、入力係数テーブル120から区分分析係数の特定のセット(たとえば、ペア)を選択することができる。置換ネットワーク114は、入力係数テーブル120を記憶するレジスタから別のレジスタに区分分析係数の選択されたセットをルーティングすることができ、それにより複数の係数140を生み出す。したがって、複数の係数140は、入力ベクトル110に含まれる各入力値に対する、区分分析係数の対応するセットを含み得る。置換ネットワーク114は図1では係数決定ユニット104に含まれるものとして示されているが、他の実装形態では、置換ネットワーク114は係数決定ユニット104とは別個であり得る。
いくつかの実装形態では、係数決定ユニット104は、複数の係数140に基づいて区分分析係数の係数ベクトル(たとえば、図2〜図5を参照して説明されるような係数ベクトル)を生成することができる。たとえば、置換ネットワーク114は、係数ベクトルを生成するために、区分分析係数を選択してルーティングするように構成され得る。例示すると、置換ネットワーク114は、入力ベクトル110の各入力値に対して、入力係数テーブル120から区分分析係数の対応するセット(たとえば、ペア)を選択することができる。置換ネットワーク114は、入力係数テーブル120を記憶するレジスタから別のレジスタに区分分析係数の選択されたセットをルーティングすることができ、それにより係数ベクトルを生み出す。したがって、係数ベクトルは複数の係数140を含み得る。
プロセッサ102はまた、算術演算を実行するように構成された算術論理回路112を含み得る。算術論理位回路112は、1つまたは複数の加算器、減算器、乗算器、除算器、またはこれらの組合せを含み得る。プロセッサ102は、算術論理回路112を使用して、入力ベクトル110および複数の係数140に対して1つまたは複数の算術演算を実行するように構成され得る。たとえば、算術論理回路112は入力ベクトル110および複数の係数140を受信することができ、算術論理回路112は入力ベクトル110および複数の係数140に対して1つまたは複数の算術演算を実行することができる。例示すると、算術論理回路112は、区分分析係数のセットのうちの第1の区分分析係数と対応する入力値との積を生成するために、乗算演算を実行することができる。さらに、算術論理回路112は、乗算演算の積と区分分析係数のセットのうちの第2の区分分析係数との和を生成するために、加算演算を実行することができる。したがって、入力ベクトル110に含まれる各入力値に対して、システム100は、特定の関数と関連付けられる対応する推定出力値を生成するように構成され得る。推定出力値は、推定出力値ベクトル116として記憶され得る。
いくつかの実装形態では、プロセッサ102(たとえば、係数決定ユニット104)は、複数の係数140を選択するための第1の単一の命令(たとえば、図2を参照して説明されるようなベクトル化されたテーブルルックアップ命令201)を実行するように構成され得る。さらに、プロセッサ102(たとえば、算術論理回路112)は、推定出力値ベクトル116を生成するための第2の単一の命令(たとえば、図3を参照して説明されるようなベクトル算術命令301)を実行するように構成され得る。他の実装形態では、プロセッサ102は、複数の係数140および推定出力値ベクトル116を選択するために、単一の命令(たとえば、図6を参照して説明されるような、単一の区分近似命令601)を実行するように構成され得る。
いくつかの実装形態では、プロセッサ102は、様々なベクトルを記憶するように構成される1つまたは複数のレジスタ(図示せず)を含み得る。たとえば、プロセッサ102は、入力ベクトル110、入力係数テーブル120、複数の係数140、および推定出力値ベクトル116、またはこれらの組合せを記憶するように構成される、レジスタを含み得る。レジスタは、図3、図4、および図6を参照してさらに詳細に説明される。
いくつかの実装形態では、入力ベクトル110の入力値の1つまたは複数は、目標範囲へと正規化され得る。目標範囲は、名目値の範囲を含むことがあり、またはそれに対応することがある。目標範囲は、入力係数テーブル120の区分分析係数の複数のセットの値のビットサイズを減らすように選択され得る。説明のための非限定的な例として、目標範囲は、約0.5から1の、または約0から1の範囲を含み得る。シフト値を入力値に適用することで、目標範囲内の値(たとえば、正規化された値)を生成することができる。
いくつかの実装形態では、プロセッサ102は、係数決定ユニット104における入力値の受信の前に正規化された入力値を生成するために、ある特定の入力値をあるシフト値によって左シフトする(たとえば、乗算する)ことができる。プロセッサ102(たとえば、係数決定ユニット104)は、その特定の入力値をあるシフト値によって右シフトし(たとえば、除算し)、インデックス値を生成することができる。いくつかの実装形態では、係数決定ユニット104は、正規化されていない入力値を受信することがあり、係数決定ユニット104は、入力値を右シフトする前に入力値を正規化(たとえば、左シフト)して、インデックス値を生成することがある。ある特定の実装形態では、図2を参照して説明されるように、入力ベクトル110の入力値の1つまたは複数は、インデックス値ベクトルを生成する前に目標範囲へ正規化され得る。正規化された値を生成するために使用されるシフト値(たとえば、0の数)は、インデックス値を生成するために使用されるシフト値と同じであることがあり、またはそれとは異なることがある。他の実装形態では、係数決定ユニット104は、入力値を1つまたは複数のシフト値によって左シフト(たとえば、乗算)し、ビット値を決定することができる。
動作の間、プロセッサ102は入力ベクトル110を受信し得る。入力ベクトル110は、図2を参照して説明されるように、プロセッサ102の第1のレジスタに記憶され得る。係数決定ユニット104および算術論理回路112は、入力ベクトル110を受信する(または取り出す)ために第1のレジスタにアクセスすることができる。いくつかの実装形態では、入力ベクトル110はベクトル命令のオペランドによって示され得る。
プロセッサ102は、複数の係数140を生成するための単一の命令を実行することができる。プロセッサ102の係数決定ユニット104は、複数の係数140を選択するために、入力係数テーブル120を取り出し、受信し、またはそれにアクセスすることができる。入力係数テーブル120は、プロセッサ102の第2のレジスタに記憶され得る。いくつかの実装形態では、入力ベクトル110の各入力値に対して、複数の係数140は、図2を参照してさらに説明されるように、区分分析係数の対応するセットを含み得る。
プロセッサ102は、入力ベクトル110および複数の係数140に基づいて、推定出力値ベクトル116を生成することができる。例示すると、算術論理回路112は、入力ベクトル110の各入力値および複数の係数140の中の区分分析係数の対応するセットに対してベクトル算術演算を実行し、推定出力値ベクトル116の推定出力値を生成することができる。たとえば、算術論理回路112は、入力ベクトル110の入力値を区分分析係数の対応するセットの第1の区分分析係数と乗算して、積を生成することができる。算術論理回路112は、この積と、区分分析係数の対応するセットのうちの第2の区分分析係数とを加算して、推定出力値ベクトル116の推定出力値を生成することができる。
単一のベクトル命令の実行の間に複数の係数140を生成することによって、システム100は、複数のベクトル命令の実行の間に複数の係数140を選択する他のシステムと比較して、使用するメモリおよび電力がより少なく、より高速であることがある。加えて、1つ(または2つ)のベクトル命令の実行の間に推定出力値ベクトル116を生成することで、2つより多くのベクトル命令の実行の間に推定出力値ベクトル116を生成する他のシステムと比較して、さらに高速化し、さらに電力消費を減らすことができる。さらに、ベクトル化されたテーブルルックアップを実行することで(たとえば、置換ネットワーク114を使用して区分分析係数をルーティングし、複数の係数140を選択することで)、要素ごとまたはレーンごとのルックアップテーブル(たとえば、各入力値に対する別個のルックアップテーブル)を使用する他のシステムと比較して、より複雑ではなく、使用するメモリおよび処理リソースがより少ないことがある。
上で説明された説明の態様では、実行される様々な機能は、図1のシステム100のいくつかの回路または構成要素によって実行されるものとして説明されている。しかし、この回路および構成要素という区分は、説明のためのものにすぎない。代替の例では、特定の回路または構成要素によって実行される機能は、代わりに、複数の回路または構成要素の間で分割され得る。その上、他の代替の例では、システム100の2つ以上の回路または構成要素が、単一の回路または構成要素に統合され得る。図1に示される各回路および構成要素は、ハードウェア(たとえば、特定用途向け集積回路(ASIC)、中央演算処理装置(CPU)などの処理装置、デジタル信号プロセッサ(DSP)、コントローラ、別のハードウェアデバイス、ファームウェアデバイス、またはこれらの任意の組合せ)を使用して実装され得る。
図2を参照すると、ベクトル化されたテーブルルックアップ命令201を実行する説明のための処理の図200が開示される。ベクトル化されたテーブルルックアップ命令201は、図1のプロセッサ102などのプロセッサによって実行され得る。図2に示されるように、ベクトル化されたテーブルルックアップ命令201は、命令名203(vlut4segh)(たとえば、オペコード)を含み得る。命令名203は、セグメントインジケータ204およびワード長インジケータ205を含み得る。セグメントインジケータ204の値は、区分分析のセグメントの数を示し得る。セグメントインジケータ204の値はまた、区分分析係数のセットの数を示すことがあり、またはそれに対応することがある。図2に示される例では、セグメントインジケータ204は、区分分析の4つのセグメントがあること(たとえば、区分分析係数の4つのセットがあること)を示す。ワード長インジケータ205の値は、入力値のビットサイズを示し得る。図2に示される例では、ワード長インジケータ205の値は「h」であり、入力値のサイズが命令ワードの「半分」(たとえば、16ビット)であることを表記するために使用され得る。他の実装形態では、ワード長インジケータ205は、異なるビットサイズを示す異なる値を有し得る。
ベクトル化されたテーブルルックアップ命令201はまた、第1のフィールド202(Vdd)、第2のフィールド206(Vuu)、および第3のフィールド207(Vv)などの、1つまたは複数のフィールド(たとえば、オペランド)を含み得る。第1のフィールド202に記憶される第1の値は、図3を参照して説明されるように、ベクトル算術命令の実行の間に使用するための係数ベクトル240(たとえば、ベクトルVdd)を示し得る。第2のフィールド206に記憶される第2の値は入力係数テーブル220(たとえば、ベクトルVuu)を示すことがあり、第3のフィールド207に記憶される第3の値は入力ベクトル210(たとえば、ベクトルVv)を示すことがある。3つのフィールドが示されるが、他の実装形態では、ベクトル化されたテーブルルックアップ命令201は、3つより多くのフィールドまたは3つより少ないフィールドを含み得る。
プロセッサは、ベクトル化されたテーブルルックアップ命令201の実行の間に様々な動作を実行するように構成され得る。プロセッサは、x0、x1、x2、およびx3などの、複数の入力値を含む入力ベクトル210(Vv)を受信するように構成され得る。入力ベクトル210(たとえば、入力値のベクトル)は、プロセッサの第1のレジスタ212に記憶され得る。プロセッサは、図1のメモリ106などのメモリから、入力係数テーブル220を受信(または取り出す)ように構成され得る。入力係数テーブル220は、a0およびb0、a1およびb1、a2およびb2、ならびにa3およびb3などの、区分分析係数の複数のセットを含み得る。区分分析係数の複数のセットの区分分析係数の各セットは、0、1、2、および3などのインデックス値に対応し得る。たとえば、a0およびb0は0というインデックス値に対応することがあり、a1およびb1は1というインデックス値に対応することがある。入力係数テーブル220はまた、shiftvalue0〜shiftvalue3などの1つまたは複数のシフト値を含み得る。ある特定の実装形態では、プロセッサは、プロセッサの第2のレジスタ222に入力係数テーブル220を記憶することができる。他の実装形態では、プロセッサは、ベクトル化されたテーブルルックアップ命令201の実行の前に、入力係数テーブル220を第2のレジスタ222にロードすることができる。プロセッサは、ベクトル化されたテーブルルックアップ命令201の実行の前に、第2のレジスタ222から入力係数テーブル220を取り出す(または受信する)ことができる。
別の特定の実装形態では、入力係数テーブル220はプロセッサの複数のレジスタに記憶され得る。たとえば、入力係数テーブル220は、1つまたは複数のシフト値を含む第1の部分と、区分分析係数の複数のセットを含む第2の部分とを含み得る。入力係数テーブル220の第1の部分は第2のレジスタ222に記憶されることがあり、入力係数テーブル220の第2の部分は別のレジスタに記憶されることがある。
プロセッサは、入力係数テーブル220を使用して入力ベクトル210を処理し、インデックス値ベクトル230を生成することができる。インデックス値ベクトル230は、プロセッサの第3のレジスタ232に記憶されることがあり、2、3、0、および1などの複数のインデックス値を含むことがある。複数のインデックス値の各インデックス値は、入力ベクトル210の入力値に対応し得る。図2は、インデックス値がインデックス値ベクトル230において繰り返される(たとえば、2回以上現れる)例を示す。他の例では、特定のインデックス値が、インデックス値ベクトル230に2回以上現れることがある。加えて、または代わりに、あり得るインデックス値がインデックス値ベクトル230に現れないことがある。複数のインデックス値の各インデックス値は、入力係数テーブル220の区分分析係数のセットに対応し得る。たとえば、0というインデックス値はa0およびb0に対応することがあり、1というインデックス値はa1およびb1に対応することがある。
インデックス値ベクトル230の複数のインデックス値は、入力ベクトル210の入力値および入力係数テーブル220の1つまたは複数のシフト値に基づいて生成され得る。たとえば、プロセッサは、入力係数テーブル220の1つまたは複数のシフト値を使用して、入力ベクトル210の入力値に対して1つまたは複数の二進シフト演算を実行することができる。例示すると、プロセッサは、対応するシフト値によって各入力値を右シフトする(たとえば、除算する)ことができる。たとえば、プロセッサは、入力係数テーブル220の第1のシフト値shiftvalue0によって入力ベクトル210の第1の入力値を右シフトして、第1のビット値(たとえば、複数桁のビット値)を生成することができる。第1のビット値のある特定の数の上位の桁が、インデックス値ベクトル230の第1のインデックス値2を生成するために使用され得る。いくつかの実装形態では、シフト値の各々は同じ値を有し得る。他の実装形態では、1つまたは複数のシフト値は異なる値を有し得る。
インデックス値ベクトル230の複数のインデックス値は、係数ベクトル240を生成するためにプロセッサによって使用され得る。係数ベクトル240は、第4のレジスタ242に記憶され得る。プロセッサは、係数ベクトル240を生成するために、図1の置換ネットワーク114などの置換ネットワークのための入力として、インデックス値ベクトル230を使用することができる。例示すると、置換ネットワークは、インデックス値ベクトル230に基づいて、区分分析係数の1つまたは複数のセットを選択し、それを(入力係数テーブル220を含む)第2のレジスタ222から第4のレジスタ242にルーティングして、係数ベクトル240を生成することができる。係数ベクトル240は、図3を参照して説明されるように、ベクトル算術命令の実行の間に使用され得る。たとえば、置換ネットワークは、インデックス値ベクトル230の第1のインデックス値2に基づいて、区分分析係数の第1のセットa2およびb2を選択することができる。置換ネットワークは、対応する入力値である第1の入力値x0に基づいて、区分分析係数の第1のセットを第4のレジスタ242にルーティングすることができる。入力ベクトル210の第1の入力値x0に対応する区分分析係数の第1のセットは、係数ベクトル240の第1の部分に記憶され得る。係数ベクトル240の第1の部分は、偶数番目の入力値(たとえば、x0およびx2)に対する区分分析係数に対応し得る。
別の例として、第2の入力値x1に対応する区分分析係数の第2のセットa3およびb3は、係数ベクトル240の第2の部分に記憶され得る。係数ベクトル240の第2の部分は、奇数番目の入力値(たとえば、x1およびx3)に対する区分分析係数に対応し得る。いくつかの実装形態では、係数ベクトル240の第2の部分は別のレジスタに記憶され得る。
演算の間に、プロセッサは、ベクトル化されたテーブルルックアップ命令201を受信し得る。プロセッサは、入力ベクトル210の入力値および入力係数テーブル220の1つまたは複数のシフト値を使用してベクトル化されたテーブルルックアップ命令201を実行し、各入力値に対して、インデックス値ベクトル230のインデックス値を生成することができる。プロセッサは、入力ベクトル210を受信し、入力ベクトル210を第1のレジスタ212に記憶することができる。ある特定の実装形態では、入力ベクトル210の入力値は、プロセッサによって受信される前に目標範囲へ正規化され得る。
プロセッサは、入力係数テーブル220をメモリから取り出す(または受信する)ことができる。プロセッサは、第2のレジスタ222に入力係数テーブル220を記憶することができる。いくつかの実装形態では、プロセッサは、ベクトル化されたテーブルルックアップ命令201を実行する前に、入力係数テーブル220を第2のレジスタ222にロードすることができる。プロセッサは、テーブルロード命令に応答して、第2のレジスタ222に入力係数テーブル220をロードすることができる。ある特定の実装形態では、プロセッサ102は、入力係数テーブル220の第1の部分を第2のレジスタ222に記憶し、入力係数テーブル220の第2の部分を別のレジスタに記憶することができる。プロセッサは、1つまたは複数のシフト値を入力ベクトル210の入力値に適用してインデックス値を生成することができる。ある例として、プロセッサは、6というシフト値によって入力値を右シフト(たとえば、除算)して(たとえば、入力値の二進表現の最初に6個の0を追加して)、インデックス値を生成することができる。図1を参照して説明されるように、インデックス値は、シフトされた入力値の二進表現と関連付けられる上位ビットの数を表し得る。
ベクトル化されたテーブルルックアップ命令201の実行はまた、インデックス値ベクトル230のインデックス値を使用して入力係数テーブル220の区分分析係数の1つまたは複数のセットを選択し、係数ベクトル240を生成することを含み得る。したがって、プロセッサは、各入力値に対して、係数ベクトル240に含まれるべき区分分析係数の対応するセットを選択することができる。たとえば、置換ネットワークは、インデックス値を使用して、入力係数テーブル220の区分分析係数の1つまたは複数のセットを選択し、区分分析係数の1つまたは複数のセットを第2のレジスタ222から第4のレジスタ242にルーティングして係数ベクトル240を生成することができる。
図2に示されるように、係数ベクトル240は、「クロスバー」構成を使用して区分分析係数の1つまたは複数の選択されたセット(たとえば、対応するセット)を記憶することができる。たとえば、クロスバー構成は、偶数番目の入力値(たとえば、x0、x2など)に対応する係数を係数ベクトルの第1の部分(たとえば、第4のレジスタ242または第4のレジスタ242の第1の部分)に記憶し、奇数番目の入力値(たとえば、x1、x3など)に対応する係数を係数ベクトルの第2の部分(たとえば、第4のレジスタ242の第2の部分または別のレジスタ)に記憶するために使用され得る。クロスバー構成に従って区分分析係数の1つまたは複数の選択されたセットをルーティングして記憶する(たとえば、クロスバー構成を含む係数ベクトル240を生成する)ことによって、置換ネットワークは、番号順に従って区分分析係数の1つまたは複数の選択されたセットをルーティングして記憶することによるものより速く、係数ベクトル240をルーティングして生成することが可能であり得る。加えて、クロスバー構成に従ってデータを記憶することによって、ベクトル化されたテーブルルックアップ命令201は、従来の置換ネットワークに適合し得る(たとえば、それによって実行され得る)。
例示すると、入力ベクトル210の第1の入力値x0に対して、置換ネットワークは、インデックス値ベクトル230の第1のインデックス値に基づいて区分分析係数の対応するセットを選択することができる。たとえば、置換ネットワークは、第1のインデックス値2に対応する区分分析係数a2およびb2という第1のセットを選択する。置換ネットワークは、区分分析係数の第1のセットのうちの第1の区分分析係数a2および第2の区分分析係数b2を第2のレジスタ222(入力係数テーブル220を含む)から第4のレジスタ242にルーティングすることができる。区分分析係数の第1のセットのうちの第1の区分分析係数a2および第2の区分分析係数b2は、第1の入力値に基づいて第4のレジスタ242に記憶され得る。たとえば、第1の入力値x0が偶数番目の値であるので、区分分析係数の第1のセットのうちの第1の区分分析係数a2および第2の区分分析係数b2は、第4のレジスタ242の第1の半分に記憶され得る。区分分析係数が記憶される、第4のレジスタ242の第1の半分の中の位置は、入力ベクトル210の中の対応する入力値の場所に対応し得る。たとえば、区分分析係数の第1のセットa2およびb2は、第4のレジスタ242の第1の半分の最初の2つの位置に記憶されることがあり、次の偶数番目の入力値(たとえば、x2)に対応する区分係数は、第4のレジスタ242の第1の半分の中の次の2つの位置に記憶されることがある。したがって、置換ネットワークは、係数ベクトル240に含まれるべき区分分析係数の1つまたは複数のセットの区分分析係数の第1のセットを選択する(または生成する)ことができる。
入力ベクトル210の第2の入力値x1に対して、置換ネットワークは、インデックス値ベクトル230の第2のインデックス値に基づいて区分分析係数の対応するセットを選択することができる。たとえば、置換ネットワークは、第2のインデックス値3に対応する区分分析係数の第2のセットa3およびb3を選択する。置換ネットワークは、区分分析係数の第2のセットのうちの第1の区分分析係数a3および第2の区分分析係数b3を第2のレジスタ222(入力係数テーブル220を含む)から第4のレジスタ242にルーティングすることができる。区分分析係数の第2のセットのうちの第1の区分分析係数a3および第2の区分分析係数b3は、第2の入力値に基づいて第4のレジスタ242に記憶され得る。たとえば、第2の入力値x1が奇数番目の値であるので、区分分析係数の第2のセットのうちの第1の区分分析係数a3および第2の区分分析係数b3は、第4のレジスタ242の第2の半分に(または別のレジスタに)記憶され得る。上で説明されたように、第4のレジスタ242の第2の半分の中の区分分析係数の位置は、入力値ベクトル210の中の対応する入力値の場所に対応し得る。
さらに例示すると、入力ベクトル210の第3の入力値x2に対して、置換ネットワークは、インデックス値ベクトル230の第3のインデックス値に基づいて区分分析係数の対応するセットを選択することができる。たとえば、置換ネットワークは、第3のインデックス値0に対応する区分分析係数の第3のセットa0およびb0を選択する。置換ネットワークは、区分分析係数の第3のセットのうちの第1の区分分析係数a0および第2の区分分析係数b0を第2のレジスタ222(入力係数テーブル220を含む)から第4のレジスタ242にルーティングすることができる。区分分析係数の第3のセットのうちの第3の区分分析係数a0および第2の区分分析係数b0は、第3の入力値に基づいて第4のレジスタ242に記憶され得る。たとえば、第3の入力値x2が偶数番目の値であるので、区分分析係数の第3のセットのうちの第1の区分分析係数a0および第2の区分分析係数b0は、第4のレジスタ242の第1の半分内の第2の位置に記憶され得る。
入力ベクトル210の第4の入力値x3に対して、置換ネットワークは、インデックス値ベクトル230の第4のインデックス値に基づいて区分分析係数の対応するセットを選択することができる。たとえば、置換ネットワークは、第4のインデックス値1に対応する区分分析係数の第4のセットa1およびb1を選択する。置換ネットワークは、区分分析係数の第4のセットのうちの第1の区分分析係数a1および第2の区分分析係数b1を第2のレジスタ222(入力係数テーブル220を含む)から第4のレジスタ242にルーティングすることができる。区分分析係数の第4のセットのうちの第1の区分分析係数a1および第2の区分分析係数b1は、第4の入力値に基づいて第4のレジスタ242に記憶され得る。たとえば、第4の入力値x3が奇数番目の値であるので、区分分析係数の第4のセットのうちの第1の区分分析係数a1および第2の区分分析係数b1は、第4のレジスタ242の第2の半分内の第2の位置に(または別のレジスタに)記憶され得る。したがって、置換ネットワークは、区分分析係数の1つまたは複数のセットを選択して第4のレジスタに(または第4のレジスタ242および別のレジスタに)ルーティングすることによって、係数ベクトル240を生成することができる。
係数ベクトル240は、図3および図5を参照して説明されるように、ベクトル算術命令のための入力として使用され得る。単一の命令の実行の間に係数ベクトル240を生成することによって、システムは、係数ベクトル240を生成するために複数の命令を実行するシステムと比較して、使用するメモリおよび電力がより少なく、より高速であることがある。置換ネットワークを使用して係数ベクトル240を生成することによって、システムはさらに、レーンごとまたは要素ごとのルックアップテーブル(たとえば、各入力値のための別々のルックアップテーブル)と比較して、高速化してシステムの複雑さを下げることができる。
図3を参照すると、ベクトル算術命令301を実行する説明のための処理の図300が開示される。ベクトル算術命令301は、図1のプロセッサ102などのプロセッサによって実行され得る。図3に示されるように、ベクトル算術命令301は、命令名303(vmpyaddeoh)(たとえば、オペコード)を含み得る。図3の具体的な実装形態では、命令名はベクトル乗算演算(たとえば、mpy)およびベクトル加算演算(たとえば、add)を示し得る。命令名は、ベクトル演算の順序を示し得る。たとえば、「mpy」は第1のタイプの(たとえば、それを有する)係数を入力値と乗算することを示すことができ、「add」は第2のタイプの(たとえば、それを有する)係数を、第1のタイプの係数と入力値との積に加算することを示すことができる。命令名303は、構成インジケータ304およびワード長インジケータ305を含み得る。構成インジケータ304(eo)の値は、係数ベクトル240の順序を示し得る。構成インジケータ304(eo)の値は、係数ベクトル240の奇数-偶数の方向を示し得る。たとえば、奇数-偶数の方向は「クロスバー」構成を含むことがあり、またはそれに対応することがあり、クロスバー構成では、偶数番目の入力値(たとえば、x0、x2など)に対応する係数が係数ベクトル240の第1の部分に記憶されることがあり、奇数番目の入力値(たとえば、x1、x3など)に対応する係数が係数ベクトル240の第2の部分に記憶されることがある。ワード長インジケータ305の値は、入力値のビットサイズを示し得る。図2に示される例では、ワード長インジケータ305の値は「h」であり、入力値のサイズが命令ワードの「半分」(たとえば、16ビット)であることを表記するために使用され得る。
ベクトル算術命令301はまた、第1のフィールド302(Vd)、第2のフィールド306(Vdd)、および第3のフィールド307(Vv)などの、1つまたは複数のフィールド(たとえば、オペランド)を含み得る。第1のフィールド302に記憶される第1の値は、結果ベクトル350(たとえば、ベクトルVd)を示し得る。第2のフィールド306に記憶される第2の値は係数ベクトル240(たとえば、ベクトルVdd)を示すことがあり、第3のフィールド307に記憶される第3の値は入力ベクトル210(たとえば、ベクトルVv)を示すことがある。3つのフィールドが示されるが、他の実装形態では、ベクトル算術命令301は、3つより多くのフィールドまたは3つより少ないフィールドを含み得る。
プロセッサは、ベクトル算術命令301の実行の間に様々な動作を実行するように構成され得る。図2を参照して説明されるように、ベクトル化されたテーブルルックアップ命令201の実行の間、入力ベクトル210(Vv)が第1のレジスタ212に記憶され、係数ベクトル240(Vdd)が第4のレジスタ242に記憶される。プロセッサは、入力ベクトル210および係数ベクトル240を処理することができ、結果ベクトル350を生成することができる。結果ベクトル350は、第5のレジスタ352に記憶され得る。結果ベクトル350は関数の推定出力値を含み得る。図3では、推定出力値はy0〜y3を含む。推定出力値は、入力値に基づく関数の近似に対応し得る。例示すると、ベクトル算術命令301を実行することは、入力ベクトル210の特定の入力値および係数ベクトル240の区分分析係数の対応するセットに対して1つまたは複数の算術演算を実行することによって、特定の推定出力値を生成することができる。
いくつかの実装形態では、結果ベクトル350は、図1の算術論理回路112などのプロセッサの算術論理回路によって生成され得る。算術論理回路は、入力ベクトル210および係数ベクトル240に対する算術演算を実行するように構成され得る。たとえば、算術論理回路112は、入力ベクトル210の入力値を係数ベクトル240の第1のタイプの(たとえば、それを有する)区分分析係数と乗算して積を生成することができる。算術論理回路は、この積と、係数ベクトル240の第2のタイプの(たとえば、それを有する)区分分析係数とに基づいて和を生成して、結果ベクトル350に含まれる推定出力値を生成することができる。例示すると、算術論理回路は、第1の入力値x0を第1のタイプの第1の区分分析係数a2と乗算して、第1の積a2*x0を生成することができる。算術論理回路は、積a2*x0を第2のタイプの第2の区分分析係数b2と加算して、第1の推定出力値y0=a2*x0+b2を生成することができる。y1-y3の推定出力値は同様の方式で生成され得る。
演算の間に、プロセッサはベクトル算術命令301を受信し得る。プロセッサは、入力ベクトル210の入力値および係数ベクトル240の区分分析係数を使用してベクトル算術命令301を実行し、結果ベクトル350の推定出力値を生成することができる。プロセッサの算術論理回路は、入力ベクトル210および係数ベクトル240を使用して1つまたは複数の算術演算を実行し、結果ベクトル350を生成することができる。例示すると、プロセッサの算術論理回路は、入力ベクトル210の各入力値に対して、入力値を(係数ベクトル240からの)区分分析係数の対応するセットの第1の区分分析係数と乗算して、積を生成することができる。プロセッサの算術論理回路は、この積と、区分分析係数の対応するセットの第2の区分分析係数に基づく和を生成することができる。この和は、結果ベクトル350の推定出力値として記憶され得る。推定出力値は、関数の入力値の推定(または近似)を表し得る。単一の命令の実行の間に結果ベクトル350を生成することによって、システムは、結果ベクトル350を生成するために複数の命令を実行するシステムと比較して、使用するメモリおよび電力がより少なく、より高速であることがある。
乗算演算および加算演算が説明されたが、ベクトル算術命令301はそのように限定されない。たとえば、ベクトル算術命令301は、入力ベクトル210および係数ベクトル240を使用して実行されるべき1つまたは複数の算術演算を示し得る。1つまたは複数の算術演算は、加算演算、減算演算、乗算演算、除算演算、またはこれらの組合せを含み得る。1つまたは複数の算術演算は、命令名303によって示され得る。いくつかの実装形態では、関数の出力値を推定するために使用される1つまたは複数の算術演算は、関数の非線形近似(たとえば、y(a,x,b))に対応し得る。説明のための非限定的な例として、非線形近似は入力値によって係数を割ること(たとえば、a/x)を含み得る。
図4を参照すると、ベクトル化されたテーブルルックアップ命令401を実行する別の説明のための処理の図400が開示される。ベクトル化されたテーブルルックアップ命令401は、図1のプロセッサ102などのプロセッサによって実行され得る。図4に示されるように、ベクトル化されたテーブルルックアップ命令401は、オペコードなどの命令名203(vlutNsegh)を含み得る。図2を参照して説明されるように、ベクトル化されたテーブルルックアップ命令401は、1つまたは複数のインジケータ、1つまたは複数のフィールド(たとえば、オペランド)、またはこれらの組合せを含み得る。セグメントインジケータ「N」は、区分分析のセグメントの数を示し得る。説明のための非限定的な例として、Nは2、4、8、16、32などの値に対応し得る。
プロセッサは、ベクトル化されたテーブルルックアップ命令401の実行の間に様々な動作を実行するように構成され得る。プロセッサは入力ベクトル410を受信し得る。入力ベクトル410は入力値の数Mを含み得る。ある特定の実装形態では、Mは64である。他の実装形態では、Mは64より小さいことがあり、または64より大きいことがある。プロセッサ(または係数決定ユニット)は、入力係数テーブル420を取り出す(または受信する)ことがある。入力係数テーブル420は複数のシフト値を含み得る。入力係数テーブル420に含まれるシフト値の数は、入力値の数(たとえば、M)と同じであり得る。入力係数テーブル420はまた、区分分析係数の複数のセットを含み得る。区分分析係数のセットの数は、区分分析のセグメントの数(たとえば、N)と同じであり得る。プロセッサは、図2を参照して説明された方式でインデックス値ベクトル430を生成することができる。インデックス値ベクトル430は複数のインデックス値を含み得る。入力係数テーブル420に含まれるインデックス値の数は、入力値の数(たとえば、M)と同じであり得る。
プロセッサは、図2を参照して説明されたこの方式で係数ベクトル440を生成することができる。係数ベクトル440は、区分分析係数の複数のセットを含み得る。係数ベクトル440に含まれる区分分析係数のセットの数は、入力値の数(たとえば、M)と同じであり得る。図2を参照して説明されるように、区分分析係数のセットは、クロスバー構成で係数ベクトル440に記憶され得る。たとえば、偶数番目の入力値(たとえば、x0、x2、...、xM-2)に対応する係数が係数ベクトル440の第1の部分に記憶されることがあり、奇数番目の入力値(たとえば、x1、x3、...、xM-1など)に対応する係数が係数ベクトル440の第2の部分に記憶されることがある。加えて、入力係数テーブル420および係数ベクトル440は、入力ベクトル410、インデックス値ベクトル430、または両方の2倍のビットを含み得る。たとえば、2つの係数が各入力値に対して選択され得るので、係数ベクトル440は入力ベクトル410の2倍多い要素を記憶し得る。
いくつかの実装形態では、プロセッサのレジスタは特定のサイズであり得る(たとえば、第1の数のビットを記憶するように構成され得る)。入力ベクトル410、インデックス値ベクトル430、または両方が、特定のサイズであり得る。入力係数テーブル420および係数ベクトル440は特定のサイズより大きいことがある。いくつかの実装形態では、入力係数テーブル420および係数ベクトル440はレジスタの2倍の大きさであり得る。たとえば、レジスタは1024ビットを記憶することができ、入力係数テーブル420および係数ベクトル440は2048ビットを記憶することができる。したがって、入力係数テーブル420および係数ベクトル440は各々、2つのレジスタなどの複数のレジスタに記憶され得る。たとえば、偶数番目の入力値(たとえば、x0、x2など)に対応する区分分析係数のセットを含む係数ベクトル440の第1の部分が第1のレジスタに記憶されることがあり、奇数番目の入力値(たとえば、x1、x3など)に対応する区分分析係数のセットを含む係数ベクトル440の第2の部分が第2のレジスタに記憶されることがある。
演算の間に、プロセッサは、ベクトル化されたテーブルルックアップ命令401を受信し得る。プロセッサは、入力ベクトル410の入力値および入力係数テーブル420の1つまたは複数のシフト値を使用してベクトル化されたテーブルルックアップ命令401を実行し、各入力値に対して、インデックス値ベクトル430のインデックス値を生成することができる。図1および図2を参照して説明されるように、インデックス値は、シフトされた入力値の二進表現と関連付けられる上位ビットの数を表し得る。
ベクトル化されたテーブルルックアップ命令401の実行はまた、インデックス値ベクトル430のインデックス値および入力係数テーブル420の区分分析係数の1つまたは複数のセットを使用して、各入力値に対して、係数ベクトル440の区分分析係数の対応するセットを生成する(または選択する)ことを含み得る。例示すると、入力ベクトル410の第1の入力値x0に対して、置換ネットワークは、インデックス値ベクトル430の第1のインデックス値2に基づいて区分分析係数の対応するセットa2およびb2を選択することができる。図2を参照して説明されるように、係数ベクトル440は、クロスバー構成を使用して区分分析係数の1つまたは複数のセット(たとえば、対応するセット)を記憶することができる。
係数ベクトル440は、図3および図5を参照して説明されるように、ベクトル算術命令のための入力として使用され得る。単一の命令の実行の間に係数ベクトル440を生成することによって、システムは、係数ベクトル440を生成するために複数の命令を実行するシステムと比較して、使用するメモリおよび電力がより少なく、より高速であることがある。置換ネットワークを使用して係数ベクトル440を生成することによって、システムはさらに、レーンごとまたは要素ごとのルックアップテーブル(たとえば、各入力値のための別々のルックアップテーブル)と比較して、使用するメモリがより少なく、より高速であり得る。
図5を参照すると、ベクトル算術命令501を実行する別の説明のための処理の図500が開示される。ベクトル算術命令501は、図1のプロセッサ102などのプロセッサによって実行され得る。図5に示されるように、ベクトル算術命令501は、オペコードなどの命令名(vmpyaddeoh)を含み得る。図3を参照して説明されるように、ベクトル算術命令501は、1つまたは複数のインジケータ、1つまたは複数のフィールド(たとえば、オペランド)、またはこれらの組合せを含み得る。
プロセッサは、ベクトル算術命令501の実行の間に様々な動作を実行するように構成され得る。図4を参照して説明されるように、ベクトル化されたテーブルルックアップ命令401の実行の間、入力ベクトル410(Vv)が受信され、係数ベクトル440(Vdd)が生成される。ベクトル算術命令501の実行の間、プロセッサは、入力ベクトル410および係数ベクトル440を処理することができ、結果ベクトル550を生成することができる。結果ベクトル550は関数の複数の推定出力値を含み得る。関数の推定出力値の数は、入力ベクトル410の入力値の数と同じであり得る(たとえば、入力ベクトル410および結果ベクトル550はM個の要素を含み得る)。
演算の間に、プロセッサはベクトル算術命令501を受信し得る。図3を参照して説明されるように、プロセッサは、入力ベクトル410の入力値および係数ベクトル440の区分分析係数を使用してベクトル算術命令501を実行し、結果ベクトル550の推定出力値を生成することができる。例示すると、算術論理回路は、第1の入力値x0を第1のタイプの第1の区分分析係数a2と乗算して、第1の積a2*x0を生成することができる。算術論理回路は、積a2*x0を第2のタイプの第2の区分分析係数b2と加算して、第1の推定出力値y0=a2*x0+b2を生成することができる。y1〜yM-1の推定出力値は同様の方式で生成され得る。単一の命令の実行の間に結果ベクトル550を生成することによって、システムは、結果ベクトル550を生成するために複数の命令を実行するシステムと比較して、使用するメモリおよび電力がより少なく、より高速であることがある。
図6を参照すると、単一の区分近似命令601を実行する特定の説明のための処理の図600が開示される。単一の区分近似命令601は単一のベクトル命令であり得る。単一の区分近似命令601は、図1のプロセッサ102などのプロセッサによって実行され得る。
図6に示されるように、単一の区分近似命令601は、命令名603(pwlalut2segh)(たとえば、オペコード)を含み得る。命令名603は、セグメントインジケータ604およびワード長インジケータ605などの、1つまたは複数のインジケータを含み得る。セグメントインジケータ604の値は、区分分析のセグメントの数を示し得る。セグメントインジケータ604の値はまた、入力係数テーブル620の中の区分分析係数のグループを構成する区分分析係数の数を示すことがあり、またはそれに対応することがある。区分分析係数(たとえば、区分分析係数のグループ)は、入力係数テーブル620において1回または複数回繰り返され得る。図6に示される例では、セグメントインジケータは、区分分析の2つのセグメントがあること(たとえば、グループの中に区分分析係数の2つのセット(または4つの区分分析係数)があること))を示す。区分分析係数の繰り返されるグループがあることによって、入力値の数がセグメントインジケータ604により示されるセグメントの数より大きいとき、ベクトル演算が単一の命令において(または単一の演算で)実行され得る。区分分析係数のセットの数は入力値の数と一致し得るので、ベクトル演算は単一の命令で実行され得る。たとえば、図6に示されるように、入力ベクトル610は4つの入力値(x0〜x3)を含み、セグメントインジケータは2セグメントの区分近似(区分分析係数の2つのセットa0〜a1、b0〜b1)を示す。したがって、第2のグループ(グループ2)があることによって、区分分析係数のセットの数(たとえば、4(グループ1のa0〜a1、b0〜b1およびグループ2のa0〜a1、b0〜b1))は入力値の数(たとえば、4)と一致し得る。したがって、単一の区分近似命令601は、区分近似の複雑さを増すことなくより大きい入力ベクトルを受信することができる。
ワード長インジケータ605の値は、入力値のビットサイズを示し得る。図6に示される例では、ワード長インジケータ605の値は「h」であり、入力値のサイズが命令ワードの「半分」(たとえば、16ビット)であることを表記するために使用され得る。入力係数テーブル620は2つのグループを有するものとして示されているが、入力係数テーブル620はより多数または少数のグループを含み得る。入力係数テーブル620のグループの数は、セグメントインジケータ604、入力ベクトル610の入力値の数、入力値のワード長、またはこれらの組合せに基づき得る。
単一の区分近似命令601はまた、第1のフィールド602(Vd)、第2のフィールド606(Vuu)、および第3のフィールド607(Vv)などの、1つまたは複数のフィールド(たとえば、オペランド)を含み得る。第1のフィールド602に記憶される第1の値は、結果ベクトル650(たとえば、ベクトルVd)を示し得る。第2のフィールド606に記憶される第2の値は入力係数テーブル620(たとえば、ベクトルVuu)を示すことがあり、第3のフィールド607に記憶される第3の値は入力ベクトル610(たとえば、ベクトルVv)を示すことがある。3つのフィールドが示されるが、他の実装形態では、単一の区分近似命令601は、3つより多くのフィールドまたは3つより少ないフィールドを含み得る。
プロセッサは、単一の区分近似命令601の実行の間に様々な動作を実行するように構成され得る。プロセッサは、x0、x1、x2、およびx3などの、複数の入力値を含む入力ベクトル610(Vv)を受信するように構成され得る。入力ベクトル610(たとえば、入力値のベクトル)は、プロセッサの第1のレジスタ612に記憶され得る。入力ベクトル610の複数の入力値はグループへと編成され得る。たとえば、x0およびx1は入力値618の第1のグループ(たとえば、グループ1)の一部であることがあり、x2およびx3は入力値の第2のグループ(たとえば、グループ2)の一部であることがある。グループは、入力係数テーブル620の中の区分分析係数のグループに対応し得る。たとえば、入力値618の第1のグループ(たとえば、グループ1)は、入力係数テーブル620の中の区分分析係数628の第1のグループ(たとえば、グループ1)に対応し得る。
プロセッサは、1つまたは複数のシフト値を使用して入力ベクトル610を処理し、インデックス値ベクトル630を生成することができる。いくつかの実装形態では、単一のシフト値が使用され得る。たとえば、単一のシフト値(たとえば、5つの0)が入力ベクトル610の各入力値に適用されることがあり、または、同じ値を有するシフト値のベクトルが入力ベクトル610の入力値に適用されることがある。他の実装形態では、異なるシフト値が使用され得る。説明のための非限定的な例として、第1のシフト値(たとえば、3つの0)が第1の入力値に適用されることがあり、第2のシフト値(たとえば、6つの0)が第2の入力値に適用されることがある。1つまたは複数のシフト値が固定され得る(たとえば、記憶または事前規定され得る)。1つまたは複数のシフト値は、プロセッサによって生成され、またはメモリに記憶されプロセッサによってアクセスされ得る。ある特定の実装形態では、図9を参照して説明されるように、1つまたは複数のシフト値はシフト値生成器によって生成され得る。1つまたは複数のシフト値は、入力ベクトル610の入力値を目標範囲に正規化するためにプロセッサによって使用され得る。インデックス値ベクトル630は、プロセッサの第2のレジスタ622に記憶されることがあり、複数のインデックス値を含むことがある。複数のインデックス値の各インデックス値は、入力ベクトル610の入力値に対応し得る。図6は、インデックス値がインデックス値ベクトル630の各グループにおいて繰り返される(たとえば、2回以上現れる)例を示す。他の例では、特定のインデックス値が、インデックス値ベクトル630の各グループに1回現れることがある。加えて、または代わりに、あり得るインデックス値がインデックス値ベクトル630の1つまたは複数のグループに現れないことがある。
プロセッサは、図1のメモリ106などのメモリから、入力係数テーブル620を受信する(または取り出す)ように構成され得る。プロセッサは、第3のレジスタ632に入力係数テーブル620を記憶するように構成され得る。入力係数テーブル620は、第1のセット(a0およびb0)および第2のセット(a1およびb1)などの、区分分析係数の複数のセットを含み得る。入力係数テーブル620の区分分析係数の複数のセットが繰り返され得る。たとえば、入力係数テーブル620は、区分分析係数の複数のグループを含み得る。区分分析係数の各グループは、区分分析係数の複数のセットの各セットからの区分分析係数を含み得る。図6に示されるように、区分分析係数628の第1のグループはa0およびa1を含み、第2のグループはa0およびa1を含む。他の実装形態では、プロセッサは、単一の区分近似命令601の実行の前に、入力係数テーブル620をメモリから第3のレジスタ632にロードすることができる。プロセッサは、単一の区分近似命令601の実行の間に、第3のレジスタ632から入力係数テーブル620を取り出す(または受信する)ことができる。
別の特定の実装形態では、入力係数テーブル620はプロセッサの複数のレジスタに記憶され得る。たとえば、入力係数テーブル620は、第1のタイプ(a)の複数の区分分析係数を含む第1のセクション(または部分)と、第2のタイプ(b)の複数の区分分析係数を含む第2のセクション(または部分)とを含み得る。入力係数テーブル620の第1のセクションは第3のレジスタ632に記憶されることがあり、入力係数テーブル620の第2のセクションは別のレジスタに記憶されることがある。入力係数テーブル620の各セクションは、入力ベクトルのグループに対応する区分分析係数のグループ(またはその一部分)を含み得る。たとえば、入力係数テーブル620の第1のセクションおよび第2のセクションは各々、入力値618の第1のグループ(たとえば、グループ1)に対応する区分分析係数628の第1のグループ(たとえば、グループ1)の一部分を含み得る。入力係数テーブル620の第1のセクションおよび第2のセクションはまた、入力値の第2のグループ(たとえば、グループ2)に対応する区分分析係数の第2のグループ(たとえば、グループ2)の一部分を各々含み得る。
インデックス値ベクトル630の複数のインデックス値は、結果ベクトル650を生成するためにプロセッサによって使用され得る。結果ベクトル650は、第4のレジスタ642に記憶され得る。プロセッサは、結果ベクトル650を生成するために、図1の置換ネットワーク114などの置換ネットワークのための入力として、インデックス値ベクトル630を使用することができる。例示すると、置換ネットワークは、インデックス値ベクトル630に基づいて、区分分析係数の1つまたは複数のセットを選択し、それを(入力係数テーブル620を含む)第3のレジスタ632から算術論理回路にルーティングすることができる。区分分析係数の1つまたは複数の選択されたセットは図1の複数の係数140を含むことがあり、またはそれに対応することがあり、算術論理回路は図1の算術論理回路112を含むことがあり、またはそれに対応することがある。算術論理回路は、入力ベクトル610および入力係数テーブル620からの区分分析係数の選択されたセットに対して算術演算を実行して、結果ベクトル650を生成するように構成され得る。結果ベクトル650は関数の推定出力値を含み得る。図6では、推定出力値はy0〜y3を含む。推定出力値は、入力値に基づく関数の近似に対応し得る。
演算の間に、プロセッサは、単一の区分近似命令601を受信し得る。プロセッサは、入力ベクトル610の入力値および1つまたは複数のシフト値を使用して単一の区分近似命令601を実行し、各入力値に対して、インデックス値ベクトル630のインデックス値を生成することができる。
プロセッサ(または係数決定ユニット)は、1つまたは複数のシフト値を入力ベクトル610の入力値に適用してインデックス値を生成することができる。ある例として、プロセッサは入力値を右シフトしてインデックス値を生成することができる。図1を参照して説明されるように、インデックス値は、シフトされた入力値の二進表現と関連付けられるある特定の数の上位ビットを表し得る。ある特定の実装形態では、入力ベクトル610の入力値は、プロセッサによって受信される前に目標範囲へ正規化され得る。
プロセッサ(または係数決定ユニット)はメモリから入力係数テーブル620を取り出す(または受信する)ことができ、プロセッサは入力係数テーブル620を第3のレジスタ632に記憶することができる。ある特定の実装形態では、プロセッサは、入力係数テーブル620の第1のセクションを第3のレジスタ632に記憶し、入力係数テーブル620の第2のセクションを別のレジスタに記憶することができる。いくつかの実装形態では、プロセッサは、単一の区分近似命令601を実行する前に、入力係数テーブル620を第3のレジスタ632にロードすることができる。プロセッサは、テーブルロード命令を受信したことに応答して、第3のレジスタ632に入力係数テーブル620をロードすることができる。
単一の区分近似命令601の実行はまた、インデックス値ベクトル630のインデックス値および入力係数テーブル620の区分分析係数の1つまたは複数のセットを使用して、各入力値に対して、係数ベクトル640の区分分析係数の対応するセットを選択することを含み得る。いくつかの実装形態では、置換ネットワークは、インデックス値を使用して、入力係数テーブル220の区分分析係数の1つまたは複数のセットを選択し、区分分析係数の1つまたは複数のセットを第3のレジスタ632からプロセッサの算術論理回路にルーティングすることができる。置換ネットワークは、図1の置換ネットワーク114を含むことがあり、またはそれに対応することがある。
算術論理回路は、入力ベクトル610の入力値を第1のタイプ(a)の区分分析係数と乗算して積を生成することができる。算術論理回路は、この積(a*x)と、第2のタイプ(b)を有する区分分析係数とに基づいて和を生成して、結果ベクトル650の推定出力値を生成することができる。例示すると、算術論理回路は、入力値618の第1のグループの第1の入力値x0と区分分析係数628の第1のグループの第1の区分分析係数a1とを乗算して、第1の積a1*x0を生成することができる。算術論理回路は、積a1*x0を区分分析係数628の第1のグループの第2の区分分析係数b1と加算して、第1の推定出力値y0=a1*x0+b1を生成することができる。
別の例として、算術論理回路は、入力値の第2のグループの第2の入力値x3と区分分析係数の第2のグループの第3の区分分析係数a1とを乗算して、第2の積a1*x3を生成することができる。算術論理回路は、第2の積a1*x3を区分分析係数の第2のグループの第4の区分分析係数b1と加算して、第2の推定出力値y3=a1*x3+b1を生成することができる。第3の区分分析係数a1は第1の区分分析係数a1と同じ値を有し得るが、第3の区分分析係数a1は異なるグループ(たとえば、グループ2)から選択され得る。y1およびy2の推定出力値は同様の方式で生成され得る。単一の命令の実行の間に結果ベクトル650を生成することによって、システムは、結果ベクトル650を生成するために複数の命令を実行するシステムと比較して、使用するメモリおよび電力がより少なく、より高速であることがある。
図7を参照すると、単一の区分近似命令701を実行する別の説明のための処理の図700が開示される。単一の区分近似命令701は単一のベクトル命令であり得る。図7に示されるように、単一の区分近似命令701は、オペコードなどの命令名(pwlalut4segh)を含み得る。図6を参照して説明されるように、単一の区分近似命令701は、1つまたは複数のインジケータ、1つまたは複数のフィールド(たとえば、オペランド)、またはこれらの組合せを含み得る。図7に示される例では、単一の区分近似命令701は4セグメントの区分分析に対応する。グループの数(k)は、セグメントの数、入力ベクトル710の入力値の数(M)、入力値のビットの数、またはこれらの組合せに対応し得る。説明のための非限定的な例として、kは16という値を有し得る。他の例では、kの値は16より小さいことがあり、または16より大きいことがある。区分分析係数の繰り返されるセット(たとえば、グループ)があることによって、入力値の数が図7に示されるような4セグメント(a0〜a3、b0〜b3)などの区分近似のセグメントの数より大きいとき、ベクトル演算が単一の命令において(または単一の動作で)実行され得る。区分分析係数のセットの数は入力値の数と一致し得るので、ベクトル演算は単一の命令で実行され得る。たとえば、図7は4セグメントの演算を示すので、64個の入力値がある場合、64個の入力値と照合すべき(各々区分分析係数の4つのセット各々の)区分分析係数の16個のグループがあり得る。したがって、単一の区分近似命令701は、区分近似の複雑さを増すことなくより大きい入力ベクトルを受信することができる。
単一の区分近似命令701は、図1のプロセッサ102などのプロセッサによって実行され得る。プロセッサは、複数の入力値を含む入力ベクトル710を受信することができる。図6を参照して説明されるように、プロセッサは、複数の入力値を処理し、結果ベクトル750の複数の推定出力値(たとえば、内容)を同時に生成することができる。
演算の間に、プロセッサは、単一の区分近似命令701を受信し得る。プロセッサは、入力ベクトル710の入力値および1つまたは複数のシフト値を使用して単一の区分近似命令701を実行し、各入力値に対して、インデックス値ベクトル730のインデックス値を生成することができる。プロセッサは、入力係数テーブル720を取り出し、または受信することができる。図6を参照して説明されるように、プロセッサは、入力係数テーブル720から複数の係数を決定または選択することができる。図7は、インデックス値がインデックス値ベクトル730の各グループにおいて繰り返されない(たとえば、2回以上現れる)例を示す。他の例では、特定のインデックス値が、インデックス値ベクトル730の各グループに2回以上現れることがある。加えて、または代わりに、あり得るインデックス値がインデックス値ベクトル730の1つまたは複数のグループに現れないことがある。
図6を参照して説明されるように、プロセッサは、入力ベクトル710の入力値および複数の係数を使用して結果ベクトル750を生成することができる。例示すると、算術論理回路は、第1の入力値x0を入力係数テーブル720の区分分析係数の第1のグループの第1の区分分析係数a1と乗算して、第1の積a1*x0を生成することができる。算術論理回路は、積a1*x0を入力係数テーブル720の区分分析係数の第2のグループの第2の区分分析係数b1と加算して、第1の推定出力値y0=a1*x0+b1を生成することができる。y1〜yM-1の推定出力値は同様の方式で生成され得る。単一の命令の実行の間に結果ベクトル750を生成することによって、システムは、結果ベクトル750を生成するために複数の命令を実行するシステムと比較して、使用するメモリおよび電力がより少なく、より高速であることがある。
図8を参照すると、推定値を生成する方法の特定の説明のための例のフローチャートが開示され、全体が800で指定される。方法800は、図1のプロセッサ102などのプロセッサによって実行され得る。方法800は、802において、入力値のベクトルを受信するステップを含む。たとえば、入力値のベクトルは、図1の入力ベクトル110、図2および図3の入力ベクトル210、図4および図5の入力ベクトル410、図6の入力ベクトル610、または図7の入力ベクトル710を含むことがあり、もしくはそれらに対応することがある。いくつかの実装形態では、入力値のベクトルは関数の入力値に対応し得る。例示すると、図1を参照して説明されたように、プロセッサ102の係数決定ユニット104は、入力ベクトル110を受信し得る。
方法800はまた、804において、複数の区分分析係数を選択するために単一の命令を実行するステップを含む。たとえば、複数の区分分析係数を選択するための単一の命令は、図2のベクトル化されたテーブルルックアップ命令201、図1のベクトル化されたテーブルルックアップ命令401、図6の単一の区分近似命令601、または図7の単一の区分線形近似命令を含むことがあり、もしくはそれらに対応することがある。複数の区分分析係数は、図1の複数の区分分析係数、図2および図3の係数ベクトル240、図4および図5の係数ベクトル340、または図6および図7の複数の区分分析係数の1つまたは複数の選択されたセットを含むことがあり、もしくはそれらに対応することがある。複数の区分分析係数は区分分析係数の1つまたは複数のセットを含むことがあり、区分分析係数の各セットは入力値のベクトルの入力値に対応することがある。例示すると、図1を参照して説明されたように、係数決定ユニット104の置換ネットワーク114は、複数の係数140を選択することができる。
方法800はさらに、806において、区分分析係数のベクトルおよび入力値のベクトルに基づいて、関数の推定出力値を決定するステップを含む。関数の推定出力値は、図1の推定出力値ベクトル116、図3の結果ベクトル350、図5の結果ベクトル550、図6の結果ベクトル650、または図7の結果ベクトル750を含むことがあり、もしくはそれらに対応することがある。例示すると、図1を参照して説明されたように、プロセッサ102の算術論理回路112は、推定出力値ベクトル116を決定し得る。
いくつかの実装形態では、方法800は、複数の区分分析係数を含む区分分析係数のベクトルを生成するステップを含み得る。たとえば、図1のプロセッサ102の置換ネットワーク114は、図2および図3の係数ベクトル240または図4および図5の係数ベクトル440を生成することができる。ある特定の実装形態では、区分分析係数のベクトルを生成するステップは、入力値のベクトルの各入力値に対して、入力値に基づいてテーブルから区分分析係数のセットを選択するステップを含み得る。テーブルは、図1の入力係数テーブル120、図2および図3の入力係数テーブル220、図4および図5の入力係数テーブル420、図6の入力係数テーブル620、または図7の入力係数テーブル720を含むことがあり、もしくはそれらに対応することがある。テーブルは、区分分析係数の複数のセットを含み得る。置換ネットワークを使用することによって、方法800は、関数を近似するために使用される係数を選択するのに、レーンごとまたは要素ごとのルックアップテーブル(たとえば、各入力値のための別々のルックアップテーブル)を使用するシステムと比較して、使用するメモリがより少なく、より高速であり得る。
いくつかの実装形態では、単一の命令を実行するステップはさらに、関数の推定出力値を決定するステップを含む。たとえば、図6の単一の区分近似命令601または図7の単一の区分近似命令701を実行するステップはそれぞれ、結果ベクトル650または結果ベクトル750を決定することができる。結果ベクトル650および結果ベクトル750は複数の推定出力値を含み得る。線形近似(たとえば、一次テイラー展開)およびベクトル化されたテーブルルックアップを使用することによって、単一の命令の実行で推定出力値を決定することができる。単一の命令で推定出力値を決定することによって、プロセッサは、非線形近似、要素ごとのルックアップ、レーンごとのルックアップ、またはこれらの組合せを使用するプロセッサよりも、使用するリソースおよび処理サイクルを少なくすることができる。
いくつかの実装形態では、単一の命令を実行して複数の区分分析係数を選択するステップは、入力値のベクトルの第1の入力値に対応する複数のビットに基づいて、区分分析係数のテーブルに対するルックアップを実行するステップを含み得る。単一の命令を実行して複数の区分分析係数を選択するステップはまた、ルックアップに基づいて、第1の入力値に対応する区分分析係数の第1のセットを決定するステップを含み得る。たとえば、図2を参照して説明されるように、ベクトル化されたテーブルルックアップ命令201を実行するステップは、プロセッサが、入力ベクトル210の第1の入力値x0に対応する複数のビット(たとえば、複数桁のビット値)に基づいて入力係数テーブル220に対するルックアップを実行するステップと、第1の入力値x0に対応する区分分析係数の第1のセットa2およびb2を決定するステップとを含み得る。
いくつかの実装形態では、複数の区分分析係数を選択するために単一の命令を実行するステップは、第1の入力値およびシフト値に基づいて複数のビットを生成するステップを含み得る。たとえば、図2を参照して説明されるように、複数のビット(たとえば、ビット値)は、第1の入力値x0および第1のシフト値shiftvalue0に基づいて生成され得る。
いくつかの実装形態では、方法800は、関数に基づいて複数のテーブルから区分分析係数のテーブルを選択するステップを含み得る。たとえば、プロセッサ102は、プロセッサ102の1つまたは複数のレジスタから入力係数テーブル120を取り出すことができる。図1を参照して説明されるように、プロセッサ102は、入力ベクトル110を受信する前に入力係数テーブル120を受信する(または取り出す)ことができる。
いくつかの実装形態では、区分分析係数の複数のセットの各セットは、第1のタイプの少なくとも1つの係数および第2のタイプの少なくとも1つの係数を含む。たとえば、図1を参照すると、区分分析係数の各セットは、少なくとも1つの「a」係数および少なくとも1つの「b」係数を含む。いくつかの実装形態では、図2〜図5を参照して説明されるように、テーブルは、区分分析係数の複数のセットを含む第1の部分と、1つまたは複数のシフト値を含む第2の部分とを含む。他の実装形態では、図6および図7を参照して説明されるように、テーブルは、第1のタイプの複数の区分分析係数を含む第1のセクションと、第2のタイプの複数の区分分析係数を含む第2のセクションとを含む。
いくつかの実装形態では、テーブルは、区分分析係数の複数のグループを含み得る。たとえば、図6の入力係数テーブル620および図7の入力係数テーブル720は、グループ1およびグループ2などの複数のグループを含み得る。区分分析係数の複数のグループの少なくとも2つのグループの区分分析係数は同じであり得る。たとえば、図6の入力係数テーブル620の第1のセクションのグループ1およびグループ2は、a0およびa1を含み得る。
いくつかの実装形態では、複数の区分分析係数は区分分析係数の複数のセットを含むことがあり、区分分析係数の複数のセットの中の区分分析係数の各セットは2つの区分分析係数を含むことがある。たとえば、図2の係数ベクトル240は、第1のセットa0およびb0ならびに第2のセットa1およびb1などの、置換ネットワークによって選択される区分分析係数の複数のセットを含み得る。ある特定の実装形態では、区分分析係数の複数のセットの各セットは、第1のタイプの少なくとも1つの係数および第2のタイプの少なくとも1つの係数を含み得る。たとえば、第1のタイプは、「a」タイプの係数を含むことがあり、またはそれに対応することがあり、第2のタイプは、「b」タイプの係数を含むことがあり、またはそれに対応することがある。いくつかの実装形態では、複数の区分分析係数は線形分析係数に対応することがある。
いくつかの実装形態では、関数は非線形関数を含み得る。たとえば、図1を参照して説明されるように、関数は、逆関数、平方根関数、指数関数、対数関数、逆正接関数、またはこれらの組合せを含み得る。
いくつかの実装形態では、推定出力値は第2の単一の命令を実行することによって決定され得る。たとえば、第2の単一の命令は、図3のベクトル算術命令301または図5のベクトル算術命令501を含み、もしくはそれに対応し得る。第2の単一の命令を実行するステップは、複数の区分分析係数の第1の区分分析係数と入力値のベクトルの第1の入力値との積を生成するステップを含み得る。第2の単一の命令を実行するステップはまた、この積と、複数の区分分析係数の第2の区分分析係数との和に基づいて、第1の推定出力値を生成するステップを含み得る。
いくつかの実装形態では、方法800は、入力値のベクトルおよび目標範囲に基づいてシフト値を計算するステップを含み得る。たとえば、図1のプロセッサまたは図9のシフト値生成器990は、シフト値を計算することができる。方法800はまた、入力値のベクトルの各入力値に対して、入力値およびシフト値に基づいて複数のビットを生成するステップを含み得る。複数のビットの上位ビットの数が、目標範囲内にあり得る。他の実装形態では、単一のビットが生成され得る。
したがって、方法800は、プロセッサが少数の命令を使用して関数の推定出力値を生成することを可能にし得る。たとえば、プロセッサは、1つまたは2つの命令を実行して推定出力値を生成することができる。少数の命令はより少ない処理リソースを使用し得る。より少ない処理リソースを使用することによって、方法800は、使用するメモリおよび電力がより少なく、より高速であり得る。
特定の態様では、図8の方法800は、フィールドプログラマブルゲートアレイ(FPGA)デバイス(たとえば、ASIC、DSP、コントローラ、FPGAデバイスなど)、ソフトウェア(たとえば、プロセッサによって実行可能な命令など)、またはこれらの任意の組合せによって実施され得る。ある例として、図8の方法800は、図9を参照して説明されるように、命令を実行するプロセッサによって実行され得る。例示すると、図8の方法800の一部分は、図8の方法800の第2の部分と組み合わされ得る。加えて、図8を参照して説明された1つまたは複数の動作は、任意選択であることがあり、少なくとも部分的に同時に実行されることがあり、示される順序もしくは説明される順序とは異なる順序で実行されることがあり、またはそれらの組合せであることがある。
図9を参照すると、デバイス(たとえば、ワイヤレス通信デバイス)の特定の説明のための例のブロック図が描かれており、全体的に900と指定される。様々な実施態様において、デバイス900は、図9に示されるよりも多数または少数の構成要素を有し得る。説明のための例では、デバイス900は図8の方法800に従って動作し得る。
ある特定の実施態様において、デバイス900は、プロセッサ906(たとえば、CPU)およびメモリ932を含む。デバイス900は、プロセッサ910(たとえば、DSP)などの、1つまたは複数の追加のプロセッサを含み得る。プロセッサ906、プロセッサ910、または両方が、図1のプロセッサ102を含むことがあり、またはそれに対応することがあり、メモリ932が、図1のメモリ106を含むことがあり、またはそれに対応することがある。プロセッサ910は、レジスタ980およびシフト値生成器990を含み得る。レジスタ980は、図1〜図7を参照して説明されたように、レジスタを含むことがあり、またはそれに対応することがある。シフト値生成器990は、1つまたは複数のシフト値を生成(または計算)するように構成され得る。シフト値生成器990は、入力値の範囲および入力値の目標範囲に基づいて、シフト値を生成(または計算)することができる。図1および図2を参照して説明されるように、1つまたは複数のシフト値が、インデックス値を生成するために入力値に適用され得る。加えて、または代わりに、1つまたは複数のシフト値は、入力値を目標範囲へ正規化するために使用され得る。
プロセッサ910は、図1の係数決定ユニット104、算術論理回路112、および置換ネットワーク114を含み得る。レジスタ980はプロセッサ910の構成要素として示されているが、他の例では、レジスタ980の1つまたは複数の構成要素が、プロセッサ906、コーダ-デコーダ(コーデック)934、別の処理構成要素、またはそれらの組合せに含まれ得る。加えて、図1の係数決定ユニット104、算術論理回路112、および置換ネットワーク114は、プロセッサ906、コーデック934、別の処理構成要素、またはこれらの組合せに含まれ得る。
プロセッサ910は、発話および音楽コーデック908と、干渉キャンセラ912とを含み得る。発話および音楽コーデック908は、ボコーダエンコーダなどのエンコーダ992を含み得る。発話および音楽コーデック908はプロセッサ910の構成要素として示されているが、他の例では、発話および音楽コーデック908の1つまたは複数の構成要素が、プロセッサ906、コーデック934、別の処理構成要素、またはそれらの組合せに含まれ得る。
デバイス900は、メモリ932およびコーデック934を含み得る。コーデック934は、デジタル-アナログ変換器(DAC)902およびアナログ-デジタル変換器(ADC)904を含み得る。スピーカ936、マイクロフォン938、またはその両方が、コーデック934に結合され得る。コーデック934は、マイクロフォン938からアナログ信号を受信し、アナログデジタル変換器904を使用してそのアナログ信号をデジタル信号に変換し、発話および音楽コーデック908にそのデジタル信号を与え得る。発話および音楽コーデック908はデジタル信号を処理し得る。いくつかの実装形態では、発話および音楽コーデック908は、コーデック934にデジタル信号を与え得る。コーデック934は、デジタル-アナログ変換器902を使用してデジタル信号をアナログ信号に変換することができ、アナログ信号をスピーカ936に与えることができる。
デバイス900は、トランシーバ950(たとえば、送信機、受信機、またはそれらの組合せ)を介してアンテナ942に結合されたワイヤレスコントローラ940を含み得る。デバイス900は、コンピュータ可読媒体またはコンピュータ可読記憶デバイスなどのメモリ932を含み得る。メモリ932は、図8の方法800を実行するための、プロセッサ906、プロセッサ910、またはそれらの組合せによって実行可能である、1つまたは複数の命令などの命令960を含み得る。
説明のための例として、メモリ932は、プロセッサ906、プロセッサ910、またはそれらの組合せによって実行されると、プロセッサ906、プロセッサ910、またはそれらの組合せに、入力値のベクトルに基づいて複数の区分分析係数を選択させる、少なくとも単一の命令を記憶することができる。複数の区分分析係数は区分分析係数の1つまたは複数のセットを含むことがあり、区分分析係数の各セットは入力値のベクトルの入力値に対応することがある。少なくとも単一の命令はさらに、実行されると、プロセッサ906、プロセッサ910、またはこれらの組合せに、選択された複数の区分分析係数に基づいて区分分析係数のベクトルを生成させ得る。たとえば、プロセッサ906、プロセッサ910、またはこれらの組合せは、置換ネットワークに、区分分析係数のベクトルを生成するために、選択された複数の区分分析係数を1つまたは複数のレジスタへルーティングさせ得る。
いくつかの実装形態では、少なくとも単一の命令はさらに、実行されると、プロセッサ906、プロセッサ910、またはこれらの組合せに、区分分析係数のベクトルおよび入力値のベクトルに基づいて関数の推定出力値を決定させ得る。他の実装形態では、少なくとも単一の命令はさらに、実行されると、プロセッサ906、プロセッサ910、またはこれらの組合せに、区分分析係数のベクトルおよび入力値のベクトルに基づいて関数の推定出力値を決定させ得る、第2の命令を含む。
いくつかの実装形態では、少なくとも単一の命令はさらに、実行されると、プロセッサに、入力値のベクトルの第1の入力値およびシフト値に基づいて複数のビットを生成させ、複数のビットに基づいて係数テーブルに対するルックアップを実行させ、ルックアップに基づいて第1の入力値に対応する区分分析係数の第1のセットを決定させ得る。
いくつかの実装形態では、メモリ932は、プロセッサ906、プロセッサ910、または両方によって、プロセッサ906、プロセッサ910、または両方に、図1のプロセッサ102を参照して説明されたような機能を実行させ、図8の方法800の少なくとも一部分を実行させ、またはそれらの組合せを実行させるように実行され得る、コード(たとえば、解釈またはコンパイルされるプログラム命令)を含み得る。さらに例示すると、実施例1〜3は、説明のための命令を示し、コンパイルされメモリ932に記憶され得る擬似コード(たとえば、簡略化されたCコード)を示す。擬似コードは、図1〜図8を参照して説明された態様の可能な実装形態を示す。擬似コードは、実行可能コードの一部ではないコメントを含む。擬似コードにおいて、コメントの始まりはフォワードスラッシュおよびアスタリスクによって示され(たとえば、「/*」)、コメントの終わりは、アスタリスクおよびフォワードスラッシュによって示される(たとえば、「*/」)。例として、コメント「COMMENT」は、擬似コードにおいて「/* COMMENT */」として現れ得る。
与えられる例において、「==」演算子は、Aの値がBの値と等しいとき、「A==B」がTRUEの値を有し、それ以外の場合はFALSEの値を有するような、等価性比較を示す。「&&」演算子は、論理AND演算を示す。「||」演算子は、論理OR演算を示す。「>」(より大きい)演算子は「より大きい」を表し、「≧」演算子は「以上」を表し、「<」演算子は「未満」を示す。
与えられる例において、「*」は乗算演算を表すことができ、「+」または「sum」は加算演算を表すことができ、「-」は減算演算を示すことができ、「/」は除算演算を表すことができる。「=」演算子は、割当てを表す(たとえば、「a=1」は、変数「a」に1の値を割り当てる)。「>>」は右シフト演算を表すことができる。他の実装形態は、実施例1〜3の条件のセットに加えて、またはその代わりに、1つまたは複数の条件を含み得る。
Vdd=vlut32segh(Vuu,Vv)
/*Vvは64個の16sの値x63,...,x3,x2,x1,x0を含み、Vuu.Hは32x(b,a)セグメントを含み、Vuu.Lはスプラット付きのShift値を含む*/
for (i = 0; i < 1024/32; i++) {
Vdd.V16s[2*i] = Vuu.V16s[64+Vv.V16s[2*i]>>Vuu.V16s[2*i] modulo
2^5] ;
Vdd.V16s[2*i+1] = Vuu.V16s[64+Vv.V16s[2*i]>>Vuu.V16s[2*i]
modulo 2^5 +1 ] ;
Vdd.V16s[64+2*i] = Vuu.V16s[64+Vv.V16s[2*i+1]>>Vuu.V16s[2*i+1]
modulo 2^5] ;
Vdd.V16s[64+2*i+1] =
Vuu.V16s[64+Vv.V16s[2*i+1]>>Vuu.V16s[2*i+1] modulo 2^5 +1 ] ;
};
Vd=vmpyaddeoh(Vdd,Vv)
/*Vvは64個の16sの値x63,...,x3,x2,x1,x0を含み、Vdd.Lは偶数番目の要素のための(b,a)のペアを含み、Vdd.Hは奇数番目の要素のための(b,a)のペアを含む*/
for (i = 0; i < 1024/32; i++) {
Vd.V16s[2*i]=sat_16(Vdd.V16s[2*i+1]+(((Vdd.V16s[2*i] *
Vv.V16s[2*i])+0x4000)>>15)) ;
Vd.V16s[2*i+1]=sat_16(Vdd.V16s[64+2*i+1]+(((Vdd.V16s[64+2*i] *
Vv.V16s[2*i+1])+0x4000)>>15)) ;
};
Vd=pwlalut4segh(Vuu,Vv)
/*Vvはx3,x2,x1,x0を含み、Vuu.Lはa3,a2,a1,a0を含み、Vuu.Hはb3,b2,b1,b0を含む*/
for (i = 0; i < 1024/16; i++) {
Vd.V16s[i]=sat_16(Vuu.V16s[Vv.V16s[i]>>12&3+((64+i)>>2)<<2]+(((V
uu.V16s[Vv.V16s[i]>>12&3+(i>>2)<<2] * Vv.V16s[i])+0x4000)>>15));
};
メモリ932は、図8の方法800などの本明細書に開示された方法およびプロセスを実行するために、プロセッサ906、プロセッサ910、コーデック834、デバイス900の別の処理ユニット、またはそれらの組合せによって実行可能な命令960を含み得る。図1のシステム100の1つまたは複数の構成要素は、専用ハードウェア(たとえば、回路)を介して、1つまたは複数のタスクを実行するための命令(たとえば、命令960)を実行するプロセッサによって、またはそれらの組合せによって実装され得る。ある例として、メモリ932またはプロセッサ906、プロセッサ910、コーデック934の1つまたは複数の構成要素、またはそれらの組合せは、ランダムアクセスメモリ(RAM)、磁気抵抗ランダムアクセスメモリ(MRAM)、スピン注入型MRAM(STT-MRAM)、フラッシュメモリ、読取り専用メモリ(ROM)、プログラマブル読取り専用メモリ(PROM)、消去可能プログラマブル読取り専用メモリ(EPROM)、電気的消去可能プログラマブル読取り専用メモリ(EEPROM)、レジスタ、ハードディスク、リムーバブルディスク、またはコンパクトディスク読取り専用メモリ(CD-ROM)などのメモリデバイスであり得る。メモリデバイスは、コンピュータ(たとえば、コーデック934のプロセッサ、プロセッサ906、プロセッサ910、またはそれらの組合せ)によって実行されると、図8の方法800の少なくとも一部分をコンピュータに実行させ得る命令(たとえば、命令960)を含み得る。ある例として、メモリ932またはプロセッサ906、プロセッサ910、コーデック934の1つまたは複数の構成要素は、コンピュータ(たとえば、コーデック934の中のプロセッサ、プロセッサ906、プロセッサ910またはそれらの組合せ)によって実行されると、コンピュータに図8の方法800の少なくとも一部分を実行させる命令(たとえば、命令960)を含む非一時的コンピュータ可読媒体であり得る。
ある特定の実装形態において、デバイス900は、システムインパッケージまたはシステムオンチップデバイス922に含まれ得る。いくつかの実装形態では、メモリ932、プロセッサ906、プロセッサ910、ディスプレイコントローラ926、コーデック934、ワイヤレスコントローラ940、およびトランシーバ950は、システムインパッケージデバイスまたはシステムオンチップデバイス922に含まれる。いくつかの実装形態では、入力デバイス930および電源944は、システムオンチップデバイス922に結合される。その上、特定の実装形態において、図9に示されるように、ディスプレイ928、入力デバイス930、スピーカ936、マイクロフォン938、アンテナ942、および電源944は、システムオンチップデバイス922の外部にある。他の実装形態では、ディスプレイ928、入力デバイス930、スピーカ936、マイクロフォン938、アンテナ942、および電源944の各々は、システムオンチップデバイス922のインターフェースまたはコントローラなどの、システムオンチップデバイス922の構成要素に結合され得る。説明のための例では、デバイス900は、通信デバイス、モバイル通信デバイス、スマートフォン、セルラー電話、ラップトップコンピュータ、コンピュータ、タブレットコンピュータ、携帯情報端末、セットトップボックス、ディスプレイデバイス、テレビ、ゲーミングコンソール、音楽プレーヤ、ラジオ、デジタルビデオプレーヤ、デジタルビデオディスク(DVD)プレーヤ、光ディスクプレーヤ、チューナー、カメラ、ナビゲーションデバイス、デコーダシステム、エンコーダシステム、またはそれらの任意の組合せに対応する。
説明のための例では、プロセッサ910は、図1〜図8を参照して説明された方法または動作のすべてまたは一部分を実行するように動作可能であり得る。たとえば、プロセッサ910は入力値のベクトルを受け取ることができる。入力値は、アンテナ942によって受信される信号のサンプルを含むことがあり、またはそれに対応することがある。係数決定ユニット104は入力係数テーブルを取り出すことができる。プロセッサ910は、入力係数テーブルから複数の区分分析係数を選択するために単一の命令を実行することができる。いくつかの実装形態では、置換ネットワーク114は、複数の区分分析係数を含む係数ベクトルを生成することができる。算術論理回路112は、推定出力値を含む結果ベクトルを生成することができる。
説明される態様とともに、装置は、入力値のベクトルを受信するための手段を含み得る。たとえば、入力値のベクトルを受信するための手段は、図1のプロセッサ102、メモリ106、係数決定ユニット104、置換ネットワーク114、算術論理回路112、図2の第1のレジスタ212、図4の第1のレジスタ412、図6の第1のレジスタ612、図7の第1のレジスタ712、トランシーバ950、ワイヤレスコントローラ940、レジスタ980、図9の命令960を実行するようにプログラムされたプロセッサ906、910の1つまたは複数、入力値のベクトルを受信するための1つまたは複数の他の構造、デバイス、回路、モジュール、もしくは命令、またはこれらの組合せを、含むことがあり、またはそれらに対応することがある。
装置はまた、複数の区分分析係数を選択するために単一の命令を実行するための手段を含み得る。たとえば、実行するための手段は、図1のプロセッサ102、係数決定ユニット104、置換ネットワーク114、図9の命令960を実行するようにプログラムされるプロセッサ910、906の1つまたは複数、複数の区分分析係数を選択するための単一の命令を実行するための1つまたは複数の他の構造、デバイス、回路、モジュール、もしくは命令、またはこれらの組合せを含むことがあり、それらに対応することがある。複数の区分分析係数は区分分析係数の1つまたは複数のセットを含むことがあり、区分分析係数の各セットは入力値のベクトルの入力値に対応することがある。
装置はさらに、複数の区分分析係数および入力値のベクトルに基づいて、関数の推定出力値を決定するための手段を含み得る。たとえば、決定するための手段は、図1のプロセッサ102、算術論理回路112、図9の命令960を実行するようにプログラムされるプロセッサ910、906の1つまたは複数、関数の推定出力値を決定するための1つまたは複数の他の構造、デバイス、回路、モジュール、もしくは命令、またはこれらの組合せを含むことがあり、それらに対応することがある。
装置はまた、区分分析係数のベクトルを記憶するための手段を含み得る。たとえば、区分分析係数のベクトルを記憶するための手段は、図1のプロセッサ102、メモリ106、係数決定ユニット104、置換ネットワーク114、算術論理回路112、図2の第4のレジスタ242、図4の第4のレジスタ442、レジスタ980、図9の命令960を実行するようにプログラムされたプロセッサ910、906の1つまたは複数、区分分析係数のベクトルを記憶するための1つまたは複数の他の構造、デバイス、回路、モジュール、もしくは命令、またはこれらの組合せを、含むことがあり、またはそれらに対応することがある。区分分析係数のベクトルは、複数の区分分析係数を含み得る。
いくつかの実装形態では、受信するための手段、実行するための手段、および決定するための手段は、携帯電話、セルラー電話、コンピュータ、ポータブルコンピュータ、チューナー、ラジオ、衛星ラジオ、通信デバイス、モデム、ポータブル音楽プレーヤ、ポータブルデジタルビデオプレーヤ、ナビゲーションデバイス、携帯情報端末(PDA)、モバイル位置データユニット、またはこれらの組合せに組み込まれる。
上で説明された説明の態様において、実行される様々な機能は、図1のシステム100、図9のデバイス900、またはそれらの組合せの回路もしくは構成要素などの、特定の回路または構成要素によって実行されるものとして説明された。しかし、この回路および構成要素という区分は、説明のためのものにすぎない。代替の例では、特定の回路または構成要素によって実行される機能は、代わりに、複数の回路または構成要素の間で分割され得る。その上、他の代替の例では、図1〜図7および図9の2つ以上の回路または構成要素が単一の回路または構成要素に統合され得る。図1〜図7および図9に示された各回路および構成要素は、ハードウェア(たとえば、ASIC、DSP、コントローラ、FPGAデバイスなど)、ソフトウェア(たとえば、プロセッサによって実行可能な論理、モジュール、命令など)、またはそれらの任意の組合せを使用して実装され得る。
さらに、本明細書で開示された態様に関して説明された様々な例示的な論理ブロック、構成、モジュール、回路、およびアルゴリズムステップは、電子ハードウェア、プロセッサによって実行されるコンピュータソフトウェア、または両方の組合せとして実装され得ることを、当業者は理解されよう。様々な例示的な構成要素、ブロック、構成、モジュール、回路、およびステップが、上では概してそれらの機能に関して説明された。そのような機能がハードウェアとして実装されるか、プロセッサ実行可能命令として実装されるかは、具体的な適用例および全体的なシステムに課された設計制約に依存する。当業者は、説明された機能を、具体的な適用例ごとに様々な方法で実装することができ、そのような実装の決定は、本開示の範囲からの逸脱を引き起こすと解釈されるべきではない。
本明細書で開示された態様に関して説明された方法またはアルゴリズムのステップは、ハードウェアに直接に含まれ、プロセッサによって実行されるソフトウェアモジュールに含まれ、またはその2つの組合せに含まれ得る。ソフトウェアモジュールは、RAM、フラッシュメモリ、ROM、PROM、EPROM、EEPROM、レジスタ、ハードディスク、リムーバブルディスク、CD-ROM、または当技術分野で知られている任意の他の形態の非一時的記憶媒体中に存在し得る。特定の記憶媒体は、プロセッサがその記憶媒体から情報を読み取り、その記憶媒体に情報を書き込むことができるようにプロセッサに結合され得る。代わりに、記憶媒体はプロセッサと一体であり得る。プロセッサおよび記憶媒体は、ASICの中に存在し得る。ASICは、コンピューティングデバイスまたはユーザ端末の中に存在し得る。代わりに、プロセッサおよび記憶媒体は、コンピューティングデバイスまたはユーザ端末の中に個別の構成要素として存在し得る。
上記の説明は、開示された態様を当業者が製作または使用することを可能にするために与えられる。これらの態様への様々な修正は当業者には容易に明らかになり、本明細書で定義された原理は、本開示の範囲から逸脱することなく他の態様に適用され得る。したがって、本開示は、本明細書に示された態様に限定されるものではなく、以下の特許請求の範囲によって定義される原理および新規の特徴と一致する、可能な最も広い範囲を与えられるべきである。