(57)【要約】  システムおよび方法が、たとえば、デジタルフィルタ内で実施される乗算および水平集約演算に関する。M+C個の被乗数要素を含む第1のベクトルであって、MおよびCは正の整数である、第1のベクトルと、M+C個の対応する乗数要素を含む第2のベクトルであって、C個の乗数要素は1の値を有する、第2のベクトルとを含む単一命令複数データ(SIMD)命令が受信される。プロセッサ内のM個の乗算器を用いて、M個の積を生成するために、M個の被乗数要素と、その値が1であるC個の乗数要素を含まない対応するM個の乗数要素とのM個の乗算が実行される。その対応するC個の乗数要素が1の値を有するC個の被乗数要素は、M個の積に加算されるか、またはM個の積と垂直に累算される。
2018523237.tif 000002
【特許請求の範囲】
【請求項１】
乗算および水平集約演算を実行する方法であって、
単一命令複数データ(SIMD)命令を受信するステップであって、前記命令は、
M+C個の被乗数要素を含む第1のベクトルであって、MおよびCは正の整数である、第1のベクトルと、
M+C個の対応する乗数要素を含む第2のベクトルであって、C個の乗数要素は1の値を有する、第2のベクトルとを含む、受信するステップと、
M個の乗算器を用いて、M個の積を生成するために、M個の被乗数要素と、その値が1である前記C個の乗数要素を含まない対応するM個の乗数要素とのM個の乗算を実行するステップと、
前記SIMD命令の結果を生成するために、その対応するC個の乗数要素が1の値を有するC個の被乗数要素を前記M個の積に加算するステップとを含む、方法。
【請求項２】
M=2^Nであり、ただし、Nは正の整数である、請求項1に記載の方法。
【請求項３】
前記M個の乗算を並列に実行するステップをさらに含む、請求項1に記載の方法。
【請求項４】
垂直累算器において前記C個の被乗数要素を前記M個の積に加算するステップをさらに含む、請求項1に記載の方法。
【請求項５】
累算器値を前記結果に垂直に累算するステップをさらに含む、請求項1に記載の方法。
【請求項６】
デジタルフィルタにおいて前記乗算および水平集約演算を実施するステップをさらに含み、前記被乗数要素はデータ要素であり、前記乗数要素は前記データ要素に対応する係数または重みである、請求項1に記載の方法。
【請求項７】
Mの値はSIMDレーンの数に等しい、請求項1に記載の方法。
【請求項８】
M+C個の被乗数要素を含む第1のベクトルであって、MおよびCは正の整数である、第1のベクトルと、M+C個の対応する乗数要素を含む第2のベクトルであって、C個の乗数要素は1の値を有する、第2のベクトルとを含む単一命令複数データ(SIMD)命令を受信するように構成されるロジックと、
M個の積を生成するために、M個の被乗数要素と、その値が1である前記C個の乗数要素を含まない対応するM個の乗数要素とのM個の乗算を実行するように構成されるm個の乗算器と、
前記SIMD命令の結果を生成するために、その対応する乗数要素が1の値を有するC個の被乗数要素を前記M個の積に加算するように構成される垂直累算器とを備える、装置。
【請求項９】
M=2^Nであり、ただし、Nは正の整数である、請求項8に記載の装置。
【請求項１０】
前記M個の乗算器は、前記M個の乗算を並列に実行するように構成される、請求項8に記載の装置。
【請求項１１】
前記垂直累算器はさらに、累算器値を前記結果に加算するように構成される、請求項8に記載の装置。
【請求項１２】
デジタルフィルタを備え、前記被乗数要素は前記デジタルフィルタのデータ要素であり、前記乗数要素は前記データ要素に対応する係数または重みである、請求項8に記載の装置。
【請求項１３】
Mの値はSIMDレーンの数に等しい、請求項8に記載の装置。
【請求項１４】
セットトップボックス、音楽プレーヤ、ビデオプレーヤ、エンターテインメントユニット、ナビゲーションデバイス、通信デバイス、携帯情報端末(PDA)、定置データユニット、およびコンピュータからなるグループから選択されるデバイスに組み込まれる、請求項8に記載の装置。
【請求項１５】
M+C個の被乗数要素を含む第1のベクトルであって、MおよびCは正の整数である、第1のベクトルと、M+C個の対応する乗数要素を含む第2のベクトルであって、C個の乗数要素は1の値を有する、第2のベクトルとを含む単一命令複数データ(SIMD)命令を受信するための手段と、
M個の積を生成するために、M個の被乗数要素と、その値が1である前記C個の乗数要素を含まない対応するM個の乗数要素とのM個の乗算を実行するための手段と、
前記SIMD命令の結果を生成するために、その対応する乗数要素が1の値を有するC個の被乗数要素を前記M個の積に加算するための手段とを備える、システム。
【請求項１６】
M=2^Nであり、ただし、Nは正の整数である、請求項15に記載のシステム。
【請求項１７】
M個の乗算を実行するための前記手段は、前記M個の乗算を並列に実行するための手段を含む、請求項15に記載のシステム。
【請求項１８】
累算器値を前記結果に加算するための手段をさらに備える、請求項15に記載のシステム。
【請求項１９】
プロセッサによって実行されるときに、前記プロセッサに乗算および水平集約演算を実行させる、前記プロセッサによって実行可能な命令を含む非一時的コンピュータ可読記憶媒体であって、前記非一時的コンピュータ可読記憶媒体は、
M+C個の被乗数要素を含む第1のベクトルであって、MおよびCは正の整数である、第1のベクトルと、M+C個の対応する乗数要素を含む第2のベクトルであって、C個の乗数要素は1の値を有する、第2のベクトルとを含む単一命令複数データ(SIMD)命令を受信するためのコードと、
M個の乗算器を用いて、M個の積を生成するために、M個の被乗数要素と、その値が1である前記C個の乗数要素を含まない対応するM個の乗数要素とのM個の乗算を実行するためのコードと、
前記SIMD命令の結果を生成するために、その対応するC個の乗数要素が1の値を有するC個の被乗数要素を前記M個の積に加算するためのコードとを含む、非一時的コンピュータ可読記憶媒体。
【請求項２０】
累算器値を前記結果に加算するためのコードをさらに含む、請求項19に記載の非一時的コンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示の態様は、特定の乗算および水平集約演算の計算複雑性を緩和し、効率を高めることに関連する。より具体的には、例示的な態様が、乗算および水平集約演算の単一命令複数データ(SIMD:single instruction multiple data)実施態様に関連する。
【背景技術】
【０００２】
単一命令複数データ(SIMD)命令は、データ並列処理を利用するための処理システムにおいて使用される場合がある。たとえば、データベクトルの2つ以上のデータ要素に関して同じまたは共通のタスクが実行される必要があるときに、データ並列処理が存在する。複数の命令を使用するのではなく、対応する複数のSIMDレーン内の複数のデータ要素上で実行されるべき同じ命令を規定する単一のSIMD命令を使用することによって、2つ以上のデータ要素に関して、共通のタスクを並列に実行することができる。
【０００３】
SIMD命令を用いて、畳込み、デジタルフィルタ、離散フーリエ変換(DFT)、離散コサイン変換(DCT)などのデジタル信号処理の特定の機能を実施することができ、ここにおいて、一連の信号サンプルが、対応する係数で重み付けされるか、または乗算され、その結果が累算されるか、または総計される。このようにして、SIMD命令を用いて、乗算および水平集約演算を実行し、これらの機能を実施することができる。たとえば、あるベクトルのデータ要素を別のベクトル内に与えられる対応する係数値と乗算し、結果として積項のベクトルを生成し、それを後続の演算において合計するか、または集約して、所望の乗算および水平集約結果を与えることができる。
【０００４】
たとえば、3つの項に関する乗算および水平集約演算を実行するために使用されるSIMD演算を考える。第1のベクトルオペランドが3つのデータ要素X、YおよびZを与えられる場合があり、第2のベクトルオペランドが対応する3つの係数c1、c2およびc3を与えられる場合がある。SIMD演算は、3つの乗算器を用いて、第1のベクトル内のデータ要素と、第2のベクトル内の対応する係数との積、すなわち、X*c1、Y*c2およびZ*c3を並列に計算し、次いで、累算器(たとえば、圧縮器および加算器を含む)においてそれらの積を合計するか、またはそれらの積を「集約し」、結果X*c1+Y*c2+Z*c3を得ることによって実施することができる。
【０００５】
デジタル信号処理において直面するいくつかの場合においては、係数のうちの1つ(たとえば、c3)が「1」の場合があり、それは、関連する計算の性質に基づいて、「1」の暗黙値とすることもできる。たとえば、「1」の係数は、信号サンプルに適用される係数のスライディングウィンドウにおいて生じる場合がある正規化された値とすることができる。
【０００６】
SIMD演算をサポートするように構成されるプロセッサは、特定の数の並列演算をサポートする機能を有することができる。サポートされる並列演算の数は、従来の実施態様では、2のべき乗とすることができる。たとえば、上記のSIMD演算を実施するために使用される従来のプロセッサでは、2つの要素(たとえば、4つの乗算の積または出力)の水平集約のための能力とともに、2つの乗算を並列に実行する2つの乗算器が利用可能な場合がある。
【０００７】
図1Aを参照すると、2つの並列乗算と、その後の2つの積項の水平集約とをサポートする従来のSIMDロジック100が示される。このようにして、第1のSIMD命令102において、対応する係数c1およびc2とともに、データ要素XおよびYが入手可能となる場合があり、ロジック100は、X*c1およびY*c2の計算を並列に実行し、積項X*c1およびY*c2を加算または集約して、第1の結果(具体的には図示されない)が得られる。次いで、第2のSIMD命令104が、対応する係数1を伴う残りのデータ要素Zを受信する。しかしながら、市販のロジックを利用するために、ダミー項が計算される。図示されるように、積項Z*1およびダミー項Q*0が計算され、ここにおいて、実効的には、Q*0は単に任意の項と0との乗算演算であり、その演算は0をもたらす。乗算および水平集約演算を完了するために、Z*1+Q*0の和も計算される。市販のロジック100を完全に利用するために、従来の実施態様は、後続の加算/集約プロセスとともに、Zと1との乗算と、Qと0との乗算とを伴うので、結果として電力消費量が増加する。
【０００８】
上記のSIMD演算を実施することができる別の従来のプロセッサは、4つの要素(たとえば、4つの乗算の積)を水平に集約する能力とともに、4つの乗算器を有することができる。たとえば、図1Bを参照すると、そのような従来のプロセッサ内に存在する場合があるSIMDロジック101が示される。SIMDロジック101は、4つの並列乗算と、後続の4つの積項の水平集約とをサポートすることができる。この場合、対応する係数c1、c2およびc3とともに、3つのデータ要素X、YおよびZを受信するSIMD命令106が使用される場合がある。しかしながら、再び、X*c1+Y*c2+Z*1+Q*0を計算するために、第4の乗算器を利用するためにQ*0のダミー計算が実行され、水平集約が実効的に実行される。
【０００９】
したがって、市販のSIMDロジックおよび集約レーンを利用するSIMDロジック100および101によって表される両方の従来の実施態様において、乗算器を使用する項Z*1およびQ*0の計算と、累算器、圧縮ハードウェア、加算器などを使用するそれらの後続の集約とのために、不要な電力消費量が生じる。
【発明の概要】
【発明が解決しようとする課題】
【００１０】
したがって、SIMD乗算および水平集約演算における電力/計算リソースの非効率および浪費を回避することが必要とされている。
【課題を解決するための手段】
【００１１】
例示的な態様が、たとえば、デジタルフィルタにおいて実施される乗算および水平集約演算に関する。M+C個の被乗数要素を含む第1のベクトルであって、MおよびCは正の整数である、第1のベクトルと、M+C個の対応する乗数要素を含む第2のベクトルであって、C個の乗数要素は1の値を有する、第2のベクトルとを含む単一命令複数データ(SIMD)命令が受信される。プロセッサ内のM個の乗算器を用いて、M個の積を生成するために、M個の被乗数要素と、その値が1であるC個の乗数要素を含まない対応するM個の乗数要素とのM個の乗算を実行する。その対応するC個の乗数要素が1の値を有するC個の被乗数要素は、M個の積に加算されるか、またはM個の積と垂直に累算される。
【００１２】
たとえば、例示的な態様が、乗算および水平集約演算を実行する方法に関し、その方法は、M+C個の被乗数要素を含む第1のベクトルであって、MおよびCは正の整数である、第1のベクトルと、M+C個の対応する乗数要素を含む第2のベクトルであって、C個の乗数要素は1の値を有する、第2のベクトルとを含む単一命令複数データ(SIMD)命令を受信することを含む。その方法は、M個の乗算器を用いて、M個の積を生成するために、M個の被乗数要素と、その値が1であるC個の乗数要素を含まない対応するM個の乗数要素とのM個の乗算を実行することと、SIMD命令の結果を生成するために、その対応するC個の乗数要素が1の値を有するC個の被乗数要素をM個の積に加算することとを含む。
【００１３】
別の例示的な態様は、M+C個の被乗数要素を含む第1のベクトルであって、MおよびCは正の整数である、第1のベクトルと、M+C個の対応する乗数要素を含む第2のベクトルであって、C個の乗数要素は1の値を有する、第2のベクトルとを含む単一命令複数データ(SIMD)命令を受信するように構成されるロジックを備える装置に関する。M個の乗算器は、M個の積を生成するために、M個の被乗数要素と、その値が1であるC個の乗数要素を含まない対応するM個の乗数要素とのM個の乗算を実行するように構成される。垂直累算器が、SIMD命令の結果を生成するために、その対応する乗数要素が1の値を有するC個の被乗数要素をM個の積に加算するように構成される。
【００１４】
さらに別の例示的な態様は、M+C個の被乗数要素を含む第1のベクトルであって、MおよびCは正の整数である、第1のベクトルと、M+C個の対応する乗数要素を含む第2のベクトルであって、C個の乗数要素は1の値を有する、第2のベクトルとを含む単一命令複数データ(SIMD)命令を受信するための手段と、M個の積を生成するために、M個の被乗数要素と、その値が1であるC個の乗数要素を含まない対応するM個の乗数要素とのM個の乗算を実行するための手段と、SIMD命令の結果を生成するために、その対応する乗数要素が1の値を有するC個の被乗数要素をM個の積に加算するための手段とを備えるシステムを対象とする。
【００１５】
さらに別の例示的な態様は、プロセッサによって実行されるときに、プロセッサに乗算および水平集約演算を実行させる、プロセッサによって実行可能な命令を含む非一時的コンピュータ可読記憶媒体を対象とし、非一時的コンピュータ可読記憶媒体は、M+C個の被乗数要素を含む第1のベクトルであって、MおよびCは正の整数である、第1のベクトルと、M+C個の対応する乗数要素を含む第2のベクトルであって、C個の乗数要素は1の値を有する、第2のベクトルとを含む単一命令複数データ(SIMD)命令を受信するためのコードと、M個の積を生成するために、M個の乗算器を用いて、M個の被乗数要素と、その値が1であるC個の乗数要素を含まない対応するM個の乗数要素とのM個の乗算を実行するためのコードと、SIMD命令の結果を生成するために、その対応するC個の乗数要素が1の値を有するC個の被乗数要素をM個の積に加算するためのコードとを含む。
【００１６】
添付の図面は、本発明の態様について説明するのを助けるために提示され、態様の例示のためだけに提供されており、態様を制限する意図はない。
【図面の簡単な説明】
【００１７】
【図１Ａ】乗算および水平集約演算の従来の実施態様を示す図である。
【図１Ｂ】乗算および水平集約演算の従来の実施態様を示す図である。
【図２Ａ】乗算-累算および集約演算の例示的な実施態様を示す図である。
【図２Ｂ】乗算-累算および集約演算の例示的な実施態様を示す図である。
【図３】例示的な態様による、SIMD命令を用いて乗算-累算および集約演算を実施するように構成されるロジックを示す図である。
【図４】例示的な態様による、乗算-累算および集約演算を実行する方法を示す図である。
【図５】本開示の態様が有利に利用される場合がある例示的なワイヤレスデバイス500を示す図である。
【発明を実施するための形態】
【００１８】
本発明の態様が、本発明の特定の態様を対象とする以下の説明および関連する図面において開示される。本発明の範囲から逸脱することなく、代替の態様を考案することができる。さらに、本発明の関連する詳細を不明瞭にしないように、本発明のよく知られている要素は詳細に説明されないか、または省略されることになる。
【００１９】
「例示的な」という単語は、本明細書では、「例、実例、または例証として機能する」を意味するために使用される。「例示的な」として本明細書において説明されるいずれの態様も、必ずしも他の態様よりも好ましいか、または有利であると解釈されるべきでない。同様に、「本発明の態様」という用語は、本発明のすべての態様が、論じられた特徴、利点、または動作モードを含むことを要求しない。
【００２０】
本明細書において使用される用語は、特定の態様について説明することのみを目的とし、本発明の態様を限定することは意図してない。本明細書において使用されるときに、単数形「1つの(a、an)」、および「その(the)」は、文脈においてはっきりと別段に指示されない限り、複数形も含むことを意図している。さらに、「備える(comprises、comprising)」、および/または「含む(includes、including)」という用語は、本明細書において使用されるときに、述べられた特徴、整数、ステップ、動作、要素、および/または構成要素の存在を明示するが、1つまたは複数の他の特徴、整数、ステップ、動作、要素、構成要素、および/またはそれらのグループの存在または追加を排除しないことは理解されよう。
【００２１】
さらに、多くの態様が、たとえば、コンピューティングデバイスの要素によって実行されるべき動作のシーケンスに関して説明される。本明細書において説明される種々の動作は、特定の回路(たとえば、特定用途向け集積回路(ASIC))によって、1つもしくは複数のプロセッサによって実行されているプログラム命令によって、または両方の組合せによって実行できることは認識されよう。さらに、本明細書において説明される動作のこれらのシーケンスは、実行時に関連するプロセッサに本明細書において説明される機能を実行させるコンピュータ命令の対応するセットを記憶している任意の形態のコンピュータ可読記憶媒体内で完全に具現化されると考えることができる。したがって、本発明の種々の態様は、そのすべてが特許請求される主題の範囲内にあると考えられているいくつかの異なる形において具現化される場合がある。加えて、本明細書において説明される態様の各々について、任意のそのような態様の対応する形態が、たとえば、説明される動作を実行する「ように構成されるロジック」として、本明細書において説明される場合がある。
【００２２】
本開示の例示的な態様は、上記の従来の実施態様において見られる不要な計算を回避することによって、乗算および水平集約演算を効率的に実施することに関する。たとえば、乗算および水平集約演算のためにいくつかの項が入手可能となり、それらの項のうちの1つまたは複数の項の係数が1であるとき、例示的なSIMD命令が、乗算および水平集約演算を乗算-累算および集約演算に、または乗算-加算および集約演算に変換し、その係数が1である項(たとえば、上記の説明におけるデータ要素Z)が、最初に乗算器において1と乗算されるのではなく、残りの積項に加算される。さらに、Q*0のようなダミー項の加算も回避される。
【００２３】
この様式における水平集約は、当該技術分野において既知であるような垂直累算と対照的である。水平集約は、本明細書において説明されるように、2つ以上のSIMDレーンからの要素(たとえば、乗算の積)を加算することに関連するが、垂直累算は、同じSIMDレーン内の要素の加算を含むことができる。たとえば、当該技術分野において既知であるような、乗算-累算演算では、乗算の積が累算器値に加算され、累算器値との加算は垂直累算または垂直集約である。対照的に、乗算および水平集約演算は、2つ以上のSIMDレーンからの、水平集約に、すなわち乗算積を加算することに関連する。
【００２４】
例示的な態様において、並列乗算演算を実行するために、(たとえば、例示的なプロセッサにおいて)任意の数の乗算器が利用可能な場合があるが、例示的な態様の説明のために、2のべき乗または2^N個の乗算器が存在すると仮定される。ただし、nは正の整数である。例示的な技法に従って実施することができる演算は、2つ以上の乗算の乗算および水平集約を伴うことができ、1つまたは複数の乗算は1による乗算(すなわち、データ要素と1との乗算)を伴う。1による乗算を伴う乗算の場合、乗算器の使用を回避することができる。むしろ、意図した乗算を加算演算に置き換えることができる。これにより、乗算および水平集約演算を、SIMDレーンまたは並列乗算ロジックが存在するより多くの項において実行できるようになる。いくつかの場合においては、SIMDレーンの数に等しい数の項に関して乗算および水平集約演算が実行されることになる場合には、並列演算のために利用可能なすべての利用可能な乗算器より少ない乗算器を利用することができるが、それらの項の1つまたは複数は1による乗算であり、それらの1による乗算を加算演算に置き換える機会を与える。
【００２５】
この説明において、並列乗算器の数より多くの項を集約する能力を例示するために、利用可能なSIMDレーン(または並列乗算器)より多くの項に関する乗算-累算および集約演算がより詳細に検討される。たとえば、「M」個のSIMDレーンが存在する場合があり、ただし、Mは正の整数(より具体的には、その値が2つ以上の並列SIMD演算に関連する2以上である正の整数)である。特定の場合においては、Mは2のべき乗または2^Nとすることができる。ただし、nは正の整数である。一例の乗算-累算および集約演算では、数S=M+C個の項を集約することができる。ただし、Cも正の整数であり、乗算されることになる要素のうちの1つが1である(たとえば、1の係数との乗算である)1つまたは複数の乗算を表す。その係数が1であるC個の項(たとえば、上記の説明におけるデータ要素Z)は、M個の乗算器によって計算されたM個の項の積に累算されるか、または加算される。C個の項は、水平に集約される前に、最初に乗算器において1と乗算されない。さらに、ダミー項(たとえば、上記の説明からのQ*0)のような、結果に寄与しない項の水平集約も回避される。
【００２６】
本明細書において説明される態様は、データ要素を含むデータベクトルおよび係数要素を含む係数ベクトルを参照するが、それらの態様は、第1のベクトルが第1の組の要素(たとえば、一般性を失うことなく、被乗数)を含み、第2のベクトルが第2の組の要素(たとえば、対応する乗数)を含む任意の2つのベクトルにも同じく適用可能であることは理解されよう。データ要素および係数という用語は、デジタルフィルタへの例示的な適用例を伝えるために使用される。しかしながら、例示的な態様は、他の処理の適用例における乗算および水平集約演算にも適用可能な場合がある。1つまたは複数の態様において、S=M+C(たとえば、2^N+C)個の被乗数/データ要素を含む第1の/データベクトルと、S=M+C(たとえば、2^N+C)個の対応する乗数/係数要素を含む第2の/係数ベクトルとの場合の乗算および水平集約演算の例示的なSIMD実施態様が説明され、ただし、C個の係数は1であるか、または代替的には、M(たとえば、2^N)個の係数要素は、値1の暗黙の付加的なC個の係数を有する。乗算および水平集約演算は、乗算演算と、後続の、その係数が1である少なくとも1つの被乗数の累算と、後続の、集約または累算とで実施されるので、例示的な演算は、乗算-累算および集約演算とも呼ばれる。
【００２７】
例示的な態様が、図を参照しながら以下にさらに詳細に説明される。
【００２８】
まず図2Aおよび図2Bを参照すると、例示的な態様の概略的な表現が示される。具体的には、図2Aは、たとえば、SIMD命令を実施するように構成されるプロセッサ(この図には示されない)内のロジックによって実施される場合がある例示的な実施態様200を示す。その場合に、実施態様200は、係数c1、c2と、値「1」の暗黙、または明白のいずれかの係数とを含む係数ベクトルとともに、3つのデータ要素X、YおよびZを含むデータベクトルを受信することを伴う。実施態様200のオプション202aおよび202bにおいて、X*c1+Y*c2+Zを計算するSIMD命令が実行され、ここにおいて、要素Zは乗算-加算または乗算-累算ロジックにおいてY*c2に加算され、その場合、乗算器を用いてY*c2を計算し、乗算器とともに、累算ロジック、圧縮器、加算器などを共有する最適化されたデータパスを用いて、データ要素Zが加算される。並列に、別の乗算器によってX*c1が計算される。次いで、項の数をX*c1+Y*c2+Zの結果として生成される最終的な値に「集約する」ために、(Y*c2+Z)およびX*c1の結果が合計される。いくつかの態様では、(Y*c2+Z)およびX*c1の中間結果が冗長フォーマット(たとえば、一対の和および桁上げベクトルとして)残される場合があり、それらは、後続のステップにおいて全加算器(たとえば、桁上げ伝搬加算器)において累算され、加算される場合がある。本開示の範囲内で、当該技術分野において既知である乗算-累算ロジックを用いてX*c1+Y*c2のための累算または集約パス内にZを含むための他の変形形態も可能である。
【００２９】
オプション202aと202bとの違いは、受信されたデータベクトル内の項ZおよびYの相対的な位置に基づくことができる。たとえば、データ要素が[X, Y, Z]と表される相対的な順序を有するか、[X, Z, Y]と表される相対的な順序を有するか(係数がそれぞれ係数ベクトル[c1, c2, 1]または[c1, 1, c2]の対応する順序に従う)に基づいて、オプション202aまたは202bが選択される場合がある。これらのオプションはいずれも、実効的には、同じ結果を得るために同じ計算を実行することがわかるであろう。
【００３０】
図2Bを参照すると、実施態様201は、実施態様200に類似であるが、Zが最初にX*c1と累算される場合があり、その結果がY*c2と累算される場合があることが異なる。オプション204aおよび204bは、いずれのオプションによっても同じ結果が得られることに留意しながら、データベクトルにおいて受信された項の相対的な順序がそれぞれ[X, Z, Y]であるか、[Z, X, Y]であるかによって決まる場合がある。さらに、最終結果が同じである、すなわち、X*c1+Y*c2+Zである場合に、たとえば、項がSIMD命令によって受信される順序に応じて、オプション202a、202b、204aおよび204bのいずれかが選択される場合がある。
【００３１】
したがって、例示的な態様は、S=M+C(たとえば、2^N+C)個の積項の和を計算するためのSIMD命令の実施態様に関する場合があり、C個の項は、M(たとえば、2^N)個の積の乗算を並列に実施し、C個の被乗数を結果に加算することによって、その値が1である乗数オペランド(たとえば、係数または重み)と乗算される被乗数オペランドを有する。図2Aおよび図2Bの上記の例において、M=2(またはN=1)およびC=1であり、2つの並列乗算が実行され、1つの被乗数Zが加算された。
【００３２】
ここで、図3を参照すると、ロジック300が例示的な態様を参照しながら例示される。ロジック300は、8ビットワイドデータ要素に関する4つ以上のSIMD演算をサポートするように構成されるプロセッサ(この図には示されない)のような装置内に設けられる場合がある。その装置は、メモリ(この図には示されない)を含むこともできる。例示的なSIMD命令が、8個の8ビットワイドデータ要素を伴う32ビットデータベクトルVuuを(たとえば、メモリから)受信する場合がある。しかしながら、この検討のために、Vuuの下半分のVu302のみが、4つの8ビット要素[3:0]で完全に例示される。2つのさらなる8ビット要素b[5]およびb[4]が、Vuuの上半分から導出される場合があるが、Vuuの上半分は完全には例示されない。64ビットワイドベクトルVuuではなく、Vu302のみがロジック300に与えられる場合には、さらなる8ビット要素b[5]およびb[4]は異なるソースによって供給される場合がある。また、4つの8ビットワイド要素または係数Rt.b[3]-Rt.b[0]を伴う32ビット係数ベクトルRt304と、2つの16ビットワイド結果h[1]およびh[0]を伴う32ビットワイド結果ベクトルVd310も示される。ベクトルVu302、Rt304およびVd310は、上記のプロセッサ内に設けられるか、またはプロセッサに通信可能に結合されるレジスタファイル(または他のメモリ、この図には示されない)の物理レジスタのための論理レジスタ名とすることができる。
【００３３】
ロジック300の一態様において、4つの乗算器306a〜306dを用いて、SIMD様式(上記のように、この場合にはM=4またはN=2)において、被乗数としてのVu302の8ビット要素b[3]-b[0]と、乗数としての8ビット要素Rt.b[3]-Rt.b[0]との4つの並列8×8ビット乗算を実行する。4つの積が2つの積項の2つのグループにそれぞれ分割され、さらなる項b[5]およびb[4]がこれらのグループの各々にそれぞれ加算される。さらなる項は係数と乗算されない、言い換えると、1の暗黙の係数と実効的に乗算される(上記のように、この場合にはC=1)。
【００３４】
たとえば、第1の演算において、乗算器306aおよび306bを用いて、積b[0]*Rt.b[0]およびb[1]*Rt.b[1](先に説明されたX*c1およびY*c2に類似)を与える。いくつかの態様において、b[0]*Rt.b[0]およびb[1]*Rt.b[1]の積は、当該技術分野において既知であるような冗長フォーマットにおいて、この段階において入手可能な場合があり、それらは、たとえば、桁上げ伝搬加算器を用いて最終値へと解決されることなく、一対の和および桁上げベクトルとして表される。そのフォーマットにかかわらず、b[0]*Rt.b[0]およびb[1]*Rt.b[1]が、加算器または垂直累算器308aに供給される。さらなる第3の項b[4]も垂直累算器308aに供給され、垂直累算器308aは、次いで、b[0]*Rt.b[0]+b[1]*Rt.b[1]+b[4]を加算し、その結果を結果ベクトルVd310の要素h[0]に記憶する。いくつかの態様において、b[0]*Rt.b[0]+b[1]*Rt.b[1]+b[4]+h[0]_oldを生成するために、結果ベクトルVd310を含むレジスタの要素h[0]に記憶された先行値(たとえば、h[0]_old)が、パス312aを介して垂直累算器308aにおいてオプションで累算される(または垂直に集約される)場合があり、最終結果がh[0]に記憶される場合がある。いくつかの場合においては、同じくX*c1+Y*c2+Zの先に説明されたフォーマットを有する異なる結果b[0]*Rt.b[0]+b[1]*Rt.b[1]+h[0]_oldを得るために、さらなる項b[4]を用いることなく、h[0]_oldが、b[0]*Rt.b[0]+b[1]*Rt.b[1]と累算される場合がある。
【００３５】
ロジック300は、第1の演算と並列に、上記の第1の演算に類似の第2の演算を実行するように構成される。類似のプロセスの包括的な説明は繰り返さないが、第2の演算は、乗算器306c〜306dと、垂直累算器308bと、パス312bを通してのh[1]_oldのオプションの累算とを用いて、b[2]*Rt.b[2]+b[3]*Rt.b[3]+b[5]またはb[2]*Rt.b[2]+b[3]*Rt.b[3]+b[5]+h[1]_oldを計算することを伴う。したがって、4つの乗算器を用いて2組の3つの項に関する乗算-累算および集約演算を実施するために、第1の演算および第2の演算を使用することができる。
【００３６】
具体的には例示されないが、本開示の範囲内で種々の代替の態様が可能である。たとえば、ロジック300の1つの変形形態は、単一の累算器内で4つすべての乗算器306a〜306dの結果を加算することと、さらに、たとえば、b[0]*Rt.b[0]+b[1]*Rt.b[1]+b[2]*Rt.b[2]+b[3]*Rt.b[3]+b[4]のような結果を生成するために、1つのさらなる項を加算することとを伴うことができる。このようにして、2^2+1個の項が集約される場合があり、2^2個の乗算の積が1つの項(1によって暗に乗算される)と累算される。広範なSIMD命令をサポートするために、オペランドのビット幅、並列SIMD計算の数、サポートされるデータパスのビット幅などに関する変形も同様に可能である。
【００３７】
したがって、先に論じられた1つまたは複数の態様において、S=M+C(たとえば、2^n+c)の数の項に関する乗算および水平集約演算を実施することができ、M個の乗算を実施し、C個の項をM個の乗算の結果と累算することによって、C個の項が1と乗算されることになる。
【００３８】
したがって、態様が、本明細書において開示したプロセス、機能、および/またはアルゴリズムを実施するための種々の方法を含むことは理解されよう。たとえば、図4に例示されるように、一態様が、乗算および水平集約演算を実行する方法400を含むことができる。
【００３９】
図示されるように、方法400のブロック402は、M+C個の被乗数要素を含む第1のベクトル(たとえば、要素b[0]およびb[1]を有し、b[4]によって供給されるさらなる要素を有するベクトルVu302)であって、MおよびCは正の整数であり、Mは正の整数(たとえば、2)である、第1のベクトルと、第2のベクトル(たとえば、Rt304がRt.b[0]およびRt.b[1]を含み、C=1個の1の暗示されるさらなる係数を有する)とを含む単一命令複数データ(SIMD)命令を受信することを含む。また、ブロック402は、M+C個の対応する乗数要素を含む第2のベクトルを受信することも含み、ただし、C個の乗数要素が1の値を有する。
【００４０】
ブロック404において、方法400は、プロセッサ内のM個の乗算器(たとえば、306a〜306b)を用いて、M個の積を生成するために、M個の被乗数要素と、その値が1であるC個の乗数要素を含まない対応するM個の乗数要素とのM個の乗算を実行することを含む。M個の乗算は並列に実行することができる。
【００４１】
ブロック406において、方法400は、SIMD命令の結果を生成するために、その対応するC個の乗数要素が1の値を有するC個の被乗数要素(たとえば、b[4])を(たとえば、垂直累算器308aにおいて)M個の積に加算することを含む。方法400において、Mは2^Nの値を有することができ、Nは正の整数である。Mの値は、SIMD命令を実施するプロセッサによってサポートされるSIMDレーンの最大数に対応することができる。方法400は、いくつかの態様において、デジタルフィルタ内で乗算および水平集約演算を実施することに対応することができ、被乗数要素はデータ要素であり、乗数要素は、データ要素に対応する係数または重みである。
【００４２】
図5を参照すると、例示的な態様による、ワイヤレスデバイス500の特定の例示的な態様のブロック図が示される。ワイヤレスデバイス500は図3のロジック300を含むことができるプロセッサ502を含む(ただし、明確にするために、ロジック300の細部はこの例示から省略される)。例示的な態様において、ワイヤレスデバイス500、より具体的には、プロセッサ502は、いくつかの場合においては、上記の図4の方法400を実行するように構成することができる。図5に示されるように、プロセッサ502はメモリ532と通信することができる。いくつかの態様において、ベクトル302、304および310の値は、メモリ532に記憶される場合があり、および/またはプロセッサ502内に設けられるレジスタファイル(図示せず)内に記憶される場合がある。図示されていないが、1つまたは複数のキャッシュまたは他のメモリ構造が、ワイヤレスデバイス500に含まれる場合もある。
【００４３】
図5は、プロセッサ502およびディスプレイ528に結合された、ディスプレイコントローラ526も示す。コーダ/デコーダ(コーデック)534(たとえば、オーディオおよび/または音声コーデック)は、プロセッサ502に結合することができる。ワイヤレスコントローラ540(モデムを含む場合もある)などの他の構成要素も例示される。スピーカ536およびマイクロフォン538は、コーデック534に結合することができる。図5は、ワイヤレスコントローラ540をワイヤレスアンテナ542に結合できることも示す。特定の態様では、プロセッサ502、ディスプレイコントローラ526、メモリ532、コーデック534、およびワイヤレスコントローラ540は、システムインパッケージデバイスまたはシステムオンチップデバイス522に含まれる。
【００４４】
特定の態様では、入力デバイス530および電源544が、システムオンチップデバイス522に結合される。さらに、特定の態様では、図5に例示されるように、ディスプレイ528、入力デバイス530、スピーカ536、マイクロフォン538、ワイヤレスアンテナ542、および電源544は、システムオンチップデバイス522の外部に位置する。しかしながら、ディスプレイ528、入力デバイス530、スピーカ536、マイクロフォン538、ワイヤレスアンテナ542、および電源544の各々は、インターフェースまたはコントローラなどの、システムオンチップデバイス522の構成要素に結合することができる。
【００４５】
図5はワイヤレス通信デバイスを示すが、プロセッサ502およびメモリ532は、セットトップボックス、音楽プレーヤ、ビデオプレーヤ、エンターテインメントユニット、ナビゲーションデバイス、携帯情報端末(PDA)、定置データユニット、またはコンピュータに組み込まれる場合もあることに留意されたい。さらに、ワイヤレスデバイス500の少なくとも1つまたは複数の例示的な態様は、少なくとも1つの半導体ダイ内に組み込まれる場合がある。
【００４６】
情報および信号が、様々な異なる技術および技法のいずれを使用しても表現できることは、当業者は理解されよう。たとえば、上記の説明全体にわたって言及される場合があるデータ、命令、コマンド、情報、信号、ビット、シンボル、およびチップは、電圧、電流、電磁波、磁場もしくは磁性粒子、光場もしくは光学粒子、またはそれらの任意の組合せによって表現される場合がある。
【００４７】
さらに、本明細書において開示される態様に関連して説明される種々の例示的な論理ブロック、モジュール、回路、およびアルゴリズムステップが、電子ハードウェア、コンピュータソフトウェア、またはその両方の組合せとして実施できることは、当業者は理解されよう。ハードウェアおよびソフトウェアのこの互換性を明確に示すために、種々の例示的な構成要素、ブロック、モジュール、回路、およびステップについて、上記では概してそれらの機能に関して説明してきた。そのような機能が、ハードウェアとして実施されるか、ソフトウェアとして実施されるのかは、特定の適用例と、システム全体に課される設計制約とによって決まる。当業者は、説明された機能を特定の適用例ごとに様々な方法で実施することができるが、そのような実施態様決定は、本発明の範囲からの逸脱を引き起こすものと解釈されるべきではない。
【００４８】
本明細書において開示される態様に関して説明される方法、シーケンスおよび/またはアルゴリズムは、直接ハードウェアにおいて具現化される場合があるか、プロセッサによって実行されるソフトウェアモジュールにおいて具現化される場合があるか、またはその2つの組合せにおいて具現化される場合がある。ソフトウェアモジュールは、RAMメモリ、フラッシュメモリ、ROMメモリ、EPROMメモリ、EEPROMメモリ、レジスタ、ハードディスク、リムーバブルディスク、CD-ROM、または当技術分野で知られている任意の他の形態の記憶媒体内に存在する場合がある。例示的な記憶媒体は、プロセッサが記憶媒体から情報を読み取り、記憶媒体に情報を書き込むことができるように、プロセッサに結合される。代替形態において、記憶媒体は、プロセッサと一体にすることができる。
【００４９】
したがって、本発明の一態様は、乗算および水平集約演算を実行するための方法を具現化するコンピュータ可読媒体を含むことができる。したがって、本発明は例示される例に限定されず、本明細書において説明される機能を実施するための任意の手段が、本発明の態様に含まれる。
【００５０】
上記の開示は本発明の例示的な態様を示すが、添付の特許請求の範囲によって規定されるような、本発明の範囲から逸脱することなく、本明細書において種々の変形および変更を行うことができることに留意されたい。本明細書において説明される本発明の態様による方法クレームの機能、ステップ、および/または動作は、任意の特定の順序で実行される必要はない。さらに、本発明の要素は、単数形で記載されるか、または特許請求される場合があるが、単数形に限ることが明確に言及されない限り、複数形を意図している。
【符号の説明】
【００５１】
100  SIMDロジック
101  SIMDロジック
102  第1のSIMD命令
104  第2のSIMD命令
106  SIMD命令
200  実施態様
201  実施態様
202a  オプション
202b  オプション
204a  オプション
204b  オプション
300  ロジック
302  Vu、ベクトル
304  Rt、ベクトル
310  Vd、ベクトル
306a  乗算器
306b  乗算器
306c  乗算器
306d  乗算器
308a  加算器または垂直累算器
308b  垂直累算器
312a  パス
312b  パス
500  ワイヤレスデバイス
502  プロセッサ
522  システムインパッケージデバイスまたはシステムオンチップデバイス
526  ディスプレイコントローラ
528  ディスプレイ
530  入力デバイス
532  メモリ
534  コーデック
536  スピーカ
538  マイクロフォン
540  ワイヤレスコントローラ
542  ワイヤレスアンテナ
544  電源
【図１Ａ】
2018523237.tif 000003
【図１Ｂ】
2018523237.tif 000004
【図２Ａ】
2018523237.tif 000005
【図２Ｂ】
2018523237.tif 000006
【図３】
2018523237.tif 000007
【図４】
2018523237.tif 000008
【図５】
2018523237.tif 000009
【手続補正書】
【提出日】平成30年2月15日(2018.2.15)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
乗算および水平集約演算を実行する方法であって、
単一命令複数データ(SIMD)命令を受信するステップであって、前記命令は、
M+C個の被乗数要素を含む第1のベクトルであって、MおよびCは正の整数である、第1のベクトルと、
M+C個の対応する乗数要素を含む第2のベクトルであって、C個の乗数要素は1の値を有する、第2のベクトルとを含む、受信するステップと、
M個の乗算器を用いて、M個の積を生成するために、M個の被乗数要素と、その値が1である前記C個の乗数要素を含まない対応するM個の乗数要素とのM個の乗算を実行するステップと、
前記SIMD命令の結果を生成するために、その対応するC個の乗数要素が1の値を有するC個の被乗数要素を前記M個の積に加算するステップとを含む、方法。
【請求項２】
M=2^Nであり、ただし、Nは正の整数である、請求項1に記載の方法。
【請求項３】
前記M個の乗算を並列に実行するステップをさらに含む、請求項1に記載の方法。
【請求項４】
垂直累算器において前記C個の被乗数要素を前記M個の積に加算するステップをさらに含む、請求項1に記載の方法。
【請求項５】
累算器値を前記結果に垂直に累算するステップをさらに含む、請求項1に記載の方法。
【請求項６】
デジタルフィルタにおいて前記乗算および水平集約演算を実施するステップをさらに含み、前記被乗数要素はデータ要素であり、前記乗数要素は前記データ要素に対応する係数または重みである、請求項1に記載の方法。
【請求項７】
Mの値はSIMDレーンの数に等しい、請求項1に記載の方法。
【請求項８】
M+C個の被乗数要素を含む第1のベクトルであって、MおよびCは正の整数である、第1のベクトルと、M+C個の対応する乗数要素を含む第2のベクトルであって、C個の乗数要素は1の値を有する、第2のベクトルとを含む単一命令複数データ(SIMD)命令を受信するように構成されるロジックと、
M個の積を生成するために、M個の被乗数要素と、その値が1である前記C個の乗数要素を含まない対応するM個の乗数要素とのM個の乗算を実行するように構成されるm個の乗算器と、
前記SIMD命令の結果を生成するために、その対応する乗数要素が1の値を有するC個の被乗数要素を前記M個の積に加算するように構成される垂直累算器とを備える、装置。
【請求項９】
M=2^Nであり、ただし、Nは正の整数である、請求項8に記載の装置。
【請求項１０】
前記M個の乗算器は、前記M個の乗算を並列に実行するように構成される、請求項8に記載の装置。
【請求項１１】
前記垂直累算器はさらに、累算器値を前記結果に加算するように構成される、請求項8に記載の装置。
【請求項１２】
デジタルフィルタを備え、前記被乗数要素は前記デジタルフィルタのデータ要素であり、前記乗数要素は前記データ要素に対応する係数または重みである、請求項8に記載の装置。
【請求項１３】
Mの値はSIMDレーンの数に等しい、請求項8に記載の装置。
【請求項１４】
請求項1から7のいずれか一項に記載の方法を実行するための手段を備えるシステム。
【請求項１５】
プロセッサによって実行されるときに、前記プロセッサに請求項1から7のいずれか一項に記載の方法を実行させる、前記プロセッサによって実行可能な命令を含む非一時的コンピュータ可読記憶媒体。
【国際調査報告】
2018523237.tif 000010
2018523237.tif 000011
2018523237.tif 000012