(57)【特許請求の範囲】
【請求項１】
入力データ要素のシーケンスを記憶するように構成される第1のレジスタであって、前記第1のレジスタは、前記入力データ要素のシーケンスの第1の入力データ要素を記憶する第1のレジスタ部分と、前記入力データ要素のシーケンスの第2の入力データ要素を記憶する第2のレジスタ部分とを有し、前記第1の入力データ要素は、前記入力データ要素のシーケンスにおいて前記第2の入力データ要素に隣接する、第1のレジスタと、
シフトされたデータ要素を生成するために、前記第1のレジスタの前記入力データ要素を前記第1のレジスタの前記第1のレジスタ部分の幅に等しいビット数だけシフトするように構成されるシフタ回路と、
前記シフトされたデータ要素を記憶するように構成される第2のレジスタであって、前記第2のレジスタは、前記シフトされたデータ要素の第1のシフトされたデータ要素を記憶する第1のレジスタ部分を有し、前記第1のシフトされたデータ要素は、前記第1のレジスタの前記第2のレジスタ部分における前記第2の入力データ要素に対応し、前記第2のレジスタの前記第1のレジスタ部分の幅は、前記第1のレジスタの前記第1のレジスタ部分の前記幅に等しい、第2のレジスタと、
第1のレーンを有するシングルインストラクションマルチプルデータ(SIMD)処理回路であって、前記第1のレーンが、前記第1のレジスタの前記第1のレジスタ部分の前記幅に等しいレーン幅を有し、前記SIMD処理回路が、前記シフタ回路による前記入力データ要素のシフトの後に、前記第1のレジスタの前記第1のレジスタ部分における前記第1の入力データ要素と、前記第2のレジスタの前記第1のレジスタ部分における前記第1のシフトされたデータ要素とに対してスライディングウィンドウ演算を実行するように構成され、前記スライディングウィンドウ演算を実行することが、前記第1のレジスタの前記第1のレジスタ部分の第1の位置において記憶される第1の入力データ要素と、前記第2のレジスタの前記第1のレジスタ部分の第2の位置において記憶される第1のシフトされたデータ要素に基づく結果を決定することを含み、前記第2のレジスタの前記第1のレジスタ部分の前記第2の位置が、前記第1のレジスタの前記第1のレジスタ部分の前記第1の位置と異なる位置を有する、SIMD処理回路と
を備える、装置。
【請求項２】
前記SIMD処理回路は、命令に基づいて、前記第1のレジスタの前記第1のレジスタの前記第1のレジスタ部分における前記第1の入力データ要素、前記第2のレジスタの前記第1のレジスタ部分における前記第1のシフトされたデータ要素、またはそれらの任意の組合せに対して同時にスライディングウィンドウ演算を実行する、請求項1に記載の装置。
【請求項３】
前記第1のレジスタの前記第1のレジスタ部分における前記第1の入力データ要素および前記第2のレジスタの前記第1のレジスタ部分における前記第1のシフトされたデータ要素は、前記命令の命令コードにおける即値フィールドに基づいて選択される、請求項2に記載の装置。
【請求項４】
前記SIMD処理回路は、
算術および論理ユニット(ALU)と、
前記第1のレジスタの前記第1のレジスタ部分における前記第1の入力データ要素のうちの1つまたは前記第2のレジスタの前記第1のレジスタ部分における前記第1のシフトされたデータ要素のうちの1つを前記ALUに供給するように構成される、第1のマルチプレクサと、
前記第1のレジスタの前記第1のレジスタ部分における前記第1の入力データ要素のうちの1つまたは前記第2のレジスタの前記第1のレジスタ部分における前記第1のシフトされたデータ要素のうちの1つを前記ALUに供給するように構成される、第2のマルチプレクサと
を備え、
前記ALUは、前記第1のマルチプレクサによって供給されたデータ要素および前記第2のマルチプレクサによって供給されたデータ要素に対して水平演算を実行するように動作可能である、
請求項1に記載の装置。
【請求項５】
前記水平演算は、加算演算、ビット単位OR演算、または乗算演算を含む、請求項4に記載の装置。
【請求項６】
前記ALUは、前記第1のマルチプレクサによって供給された前記データ要素および前記第2のマルチプレクサによって供給された前記データ要素に対して垂直演算を実行するように動作可能であり、前記水平演算は、前記垂直演算の後に実行される、請求項4に記載の装置。
【請求項７】
前記垂直演算は乗算演算を含む、請求項6に記載の装置。
【請求項８】
前記SIMD処理回路は、前記第1のレーンと第2のレーンとを含む複数のレーンであって、前記第2のSIMDレーンが、前記第1のレジスタの前記第2のレジスタ部分に記憶された前記第2の入力データ要素および前記第2のレジスタの第2のレジスタ部分に記憶される第2のシフトされたデータ要素に対してスライディングウィンドウ演算を実行するように構成される、複数のレーンをさらに備える、請求項1に記載の装置。
【請求項９】
前記第1のレーンによって実行される前記スライディングウィンドウ演算と前記第2のレーンによって実行される前記スライディングウィンドウ演算が並行して実行される、請求項8に記載の装置。
【請求項１０】
前記シフタ回路は、前記シフトされたデータを前記第2のレジスタに供給するように構成される、請求項1に記載の装置。
【請求項１１】
第1のレジスタに入力データ要素のシーケンスを記憶するステップであって、前記入力データ要素のシーケンスは、前記第1のレジスタの第1のレジスタ部分に記憶された第1の入力データ要素と、前記第1のレジスタの第2のレジスタ部分に記憶された第2の入力データ要素とを含む、ステップと、
シフトされたデータ要素を生成するために、前記第1のレジスタの前記入力データ要素を前記第1のレジスタの前記第1のレジスタ部分の幅に等しいビット数だけシフトするステップと、
第2のレジスタに前記シフトされたデータ要素を記憶するステップであって、前記シフトされたデータ要素は、第2のレジスタの第1のレジスタ部分に記憶された第1のシフトされたデータ要素を含み、前記第2のレジスタの前記第1のレジスタ部分の幅は、前記第1のレジスタの前記第1のレジスタ部分の幅に等しい、ステップと、
前記入力データ要素のシフトの後に、シングルインストラクションマルチプルデータ(SIMD)処理回路の第1のレーンを使用して、前記第1のレジスタの前記第1のレジスタ部分における前記第1の入力データ要素と、前記第2のレジスタの前記第1のレジスタ部分における前記第1のシフトされたデータ要素とに対してスライディングウィンドウ演算を実行するステップであって、前記第1のレーンは、前記第1のレジスタの前記第1のレジスタ部分の前記幅に等しいレーン幅を有し、前記スライディングウィンドウ演算を実行するステップが、前記第1のレジスタの前記第1のレジスタ部分の第1の位置において記憶された第1の入力データ要素と、前記第2のレジスタの前記第1のレジスタ部分の第2の位置において記憶された第1のシフトされたデータ要素に基づく結果を決定するステップを含み、前記第2のレジスタの前記第1のレジスタ部分の前記第2の位置が、前記第1のレジスタの前記第1のレジスタ部分の前記第1の位置と異なる位置を有する、ステップと
を含む、方法。
【請求項１２】
前記第1の入力データ要素は、第1のデータ要素から始まって第Nのデータ要素で終わるN個のデータ要素を含み、前記第1のシフトされた入力データ要素は、第(N+1)のデータ要素から始まって第2*Nのデータ要素で終わるN個のデータ要素を含み、Nが前記SIMD処理回路の前記レーン幅に対応する、請求項11に記載の方法。
【請求項１３】
前記SIMD処理回路は、命令に基づいて、前記第1のレジスタの前記第1のレジスタ部分における前記第1の入力データ要素、前記第2のレジスタの前記第1のレジスタ部分における前記第1のシフトされたデータ要素、またはそれらの任意の組合せに対して同時にスライディングウィンドウ演算を実行する、請求項11に記載の方法。
【請求項１４】
前記第1のレジスタの前記第1のレジスタ部分における前記第1の入力データ要素および前記第2のレジスタの前記第1のレジスタ部分における前記第1のシフトされたデータ要素は、前記命令の命令コードにおける即値フィールドに基づいて選択される、請求項13に記載の方法。
【請求項１５】
第1のマルチプレクサにおいて、前記第1のレジスタの前記第1のレジスタ部分における前記第1の入力データ要素のうちの1つまたは前記第2のレジスタの前記第1のレジスタ部分における前記第1のシフトされたデータ要素のうちの1つを算術および論理ユニット(ALU)に供給するステップと、
第2のマルチプレクサにおいて、前記第1のレジスタの前記第1のレジスタ部分における前記第1の入力データ要素のうちの1つまたは前記第2のレジスタの前記第1のレジスタ部分における前記第1のシフトされたデータ要素のうちの1つを前記ALUに供給するステップと
をさらに含む、請求項11に記載の方法。
【請求項１６】
前記ALUにおいて、前記第1のマルチプレクサによって供給されたデータ要素および前記第2のマルチプレクサによって供給されたデータ要素に対して水平演算を実行するステップを含む、請求項15に記載の方法。
【請求項１７】
前記水平演算は、加算演算、ビット単位OR演算、または乗算演算を含む、請求項16に記載の方法。
【請求項１８】
前記第1のマルチプレクサによって供給された前記データ要素および前記第2のマルチプレクサによって供給された前記データ要素に対して垂直演算を実行するステップであって、前記水平演算は、前記垂直演算の後に実行される、ステップをさらに含む、請求項16に記載の方法。
【請求項１９】
前記垂直演算は乗算演算を含む、請求項18に記載の方法。
【請求項２０】
前記SIMD処理回路の第2のSIMDレーンを使用して前記第1のレジスタの前記第2のレジスタ部分に記憶された第2の入力データ要素および前記第2のレジスタの第2のレジスタ部分に記憶された第2のシフトされたデータ要素に対してスライディングウィンドウ演算を実行するステップであって、前記第1のレーンが前記複数のSIMDレーンに含まれる、ステップをさらに含む、請求項11に記載の方法。
【請求項２１】
前記第1のレーンによって実行される前記スライディングウィンドウ演算と前記第2のSIMDレーンによって実行される前記スライディングウィンドウ演算が並行して実行される、請求項20に記載の方法。
【請求項２２】
前記シフトされたデータ要素を前記第2のレジスタに供給するステップをさらに含む、請求項11に記載の方法。
【請求項２３】
入力データ要素のシーケンスを記憶するための第1の手段であって、前記入力データ要素のシーケンスの第1の入力データ要素を記憶する第1の部分と、前記入力データ要素のシーケンスの第2の入力データ要素を記憶する第2の部分とを有し、前記第1の入力データ要素は、前記入力データ要素のシーケンスにおいて前記第2の入力データ要素に隣接する、第1の手段と、
シフトされたデータ要素を生成するために、前記記憶するための第1の手段の前記入力データ要素を前記記憶するための第1の手段の前記第1の部分の幅に等しいビット数だけシフトするための手段と、
前記シフトされたデータ要素を記憶するための第2の手段であって、前記シフトされたデータ要素の第1のシフトされたデータ要素を記憶するための第1の部分を有し、前記第1のシフトされたデータ要素は、前記記憶するための第1の手段の前記第2の部分の前記第2の入力データ要素に対応し、前記記憶するための第2の手段の前記第1の部分の幅は、前記記憶するための第1の手段の前記第1の前記幅に等しい、手段と、
前記記憶するための第1の手段の前記第1の部分における前記第1の入力データ要素と、前記記憶するための第2の手段の前記第1の部分における前記第1のシフトされたデータ要素とに対してスライディングウィンドウ演算を実行するための手段であって、前記記憶するための第1の手段の前記第1の部分の前記幅に等しいレーン幅を有し、前記記憶するための第1の手段の前記第1の部分の第1の位置において記憶された第1の入力データ要素と、前記記憶するための第2の手段の前記第1の部分の第2の位置において記憶された第1のシフトされたデータ要素に基づく結果を決定することを含み、前記記憶するための第2の手段の前記第1の部分の前記第2の位置が、前記記憶するための第1の手段の前記第1の部分の前記第1の位置と異なる位置を有する、手段と
を備える、装置。
【請求項２４】
前記第1の入力データ要素は、第1のデータ要素から始まって第Nのデータ要素で終わるN個のデータ要素を含み、前記第1のシフトされた入力データ要素は、第(N+1)のデータ要素から始まって第2*Nのデータ要素で終わるN個のデータ要素を含み、Nが前記スライディングウィンドウ演算を実行するための手段の前記レーン幅に対応する、請求項23に記載の装置。
【請求項２５】
前記スライディングウィンドウ演算を実行するための手段は、命令に基づいて、前記記憶するための第1の手段の前記第1の部分における前記第1の入力データ要素、前記記憶するための第2の手段の前記第1の部分における前記第1のシフトされたデータ要素、またはそれらの任意の組合せに対して同時にスライディングウィンドウ演算を実行する、請求項23に記載の装置。
【請求項２６】
前記記憶するための第1の手段の前記第1の部分における前記第1の入力データ要素および前記記憶するための第2の手段の前記第1の部分における前記第1のシフトされたデータ要素は、前記命令の命令コードにおける即値フィールドに基づいて選択される、請求項25に記載の装置。
【請求項２７】
データ要素を供給するための手段であって、前記記憶するための第1の手段の前記第1の部分における前記第1の入力データ要素のうちの1つを算術および論理ユニット(ALU)に供給するように構成される、手段と、
データ要素を供給するための第2の手段であって、前記記憶するための第2の手段の前記第1の部分における前記第1のシフトされたデータ要素のうちの1つを前記ALUに供給するように構成される、手段と
をさらに備える、請求項23に記載の装置。
【請求項２８】
前記記憶するための第1の手段の前記第2の部分に記憶された前記第2の入力データ要素および前記記憶するための第2の手段の第2の部分に記憶された第2のシフトされたデータ要素に対してスライディングウィンドウ演算を実行するための第2の手段をさらに備える、請求項23に記載の装置。
【請求項２９】
命令を含む非一時的コンピュータ可読記憶媒体であって、前記命令は、プロセッサによって実行されたときに、前記プロセッサに、
第1のレジスタに入力データ要素のシーケンスを記憶することであって、前記入力データ要素のシーケンスは、前記第1のレジスタの第1のレジスタ部分に記憶された第1の入力データ要素と、前記第1のレジスタの第2のレジスタ部分に記憶された第2の入力データ要素とを含む、記憶することと、
シフトされたデータ要素を生成するために、前記第1のレジスタの前記入力データ要素を前記第1のレジスタの前記第1のレジスタ部分の幅に等しいビット数だけシフトすることと、
第2のレジスタに前記シフトされたデータ要素を記憶することであって、前記シフトされたデータ要素は、第2のレジスタの第1のレジスタ部分に記憶された第1のシフトされたデータ要素を含み、前記第2のレジスタの前記第2のレジスタ部分の幅は、前記第1のレジスタの前記第1のレジスタ部分の幅に等しい、記憶することと、
前記入力データ要素のシフトの後に、シングルインストラクションマルチプルデータ(SIMD)処理回路のレーンを使用して、前記第1のレジスタの前記第1のレジスタ部分における前記第1の入力データ要素と、前記第2のレジスタの前記第1のレジスタ部分における前記第1のシフトされたデータ要素とに対してスライディングウィンドウ演算を実行することであって、前記レーンは、前記第1のレジスタの前記第1のレジスタ部分の前記幅に等しいレーン幅を有し、前記スライディングウィンドウ演算を実行することが、前記第1のレジスタの前記第1のレジスタ部分の第1の位置において記憶された第1の入力データ要素と、前記第2のレジスタの前記第1のレジスタ部分の第2の位置において記憶された第1のシフトされたデータ要素に基づく結果を決定することを含み、前記第2のレジスタの前記第1のレジスタ部分の前記第2の位置が、前記第1のレジスタの前記第1のレジスタ部分の前記第1の位置と異なる位置を有する、実行することと
を行わせる、非一時的コンピュータ可読記憶媒体。
【請求項３０】
前記第1の入力データ要素は、第1のデータ要素から始まって第Nのデータ要素で終わるN個のデータ要素を含み、前記第1のシフトされた入力データ要素は、第(N+1)のデータ要素から始まって第2*Nのデータ要素で終わるN個のデータ要素を含み、Nが前記SIMD処理回路の前記レーン幅に対応する、請求項29に記載の非一時的コンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願の相互参照
本出願は、参照によりその内容全体が本明細書に明確に組み込まれる、同一出願人が所有する2015年7月20日に出願の米国非仮特許出願第14/803,728号の優先権を主張する。
【０００２】
本開示は概して、シングルインストラクションマルチプルデータ(SIMD)アーキテクチャのためのスライディングウィンドウ演算に関する。より詳細には、本開示は、スライディングウィンドウ演算の実行に関連するシフトおよびレジスタの量の低減に関する。
【背景技術】
【０００３】
技術の進歩が、結果として、より小型で、より強力なコンピューティングデバイスをもたらしてきた。たとえば、現在、小型で軽量であり、ユーザによって容易に携帯される、モバイルフォンおよびスマートフォンなどのワイヤレス電話、タブレットおよびラップトップコンピュータを含む、様々なポータブルパーソナルコンピューティングデバイスが存在する。これらのデバイスは、ワイヤレスネットワークを介して音声およびデータパケットを伝達することができる。さらに、多くのそのようなデバイスは、デジタルスチルカメラ、デジタルビデオカメラ、デジタルレコーダ、およびオーディオファイルプレーヤなどの追加の機能を組み込んでいる。また、そのようなデバイスは、インターネットへのアクセスに使用することができるウェブブラウザアプリケーションなどのソフトウェアアプリケーションを含む、実行可能命令を処理することができる。したがって、これらのデバイスは、高度の計算能力を含むことができる。
【０００４】
技術の進歩によって、信号処理(たとえば、画像処理、ビデオ処理、オーディオ処理など)を実行するプロセッサを含むワイヤレスコンピューティングデバイスも実現されている。プロセッサは、信号処理を実行するために入力信号に畳込み関数を適用する。従来の畳込み関数は、「スライディングウィンドウ」を使用して入力データストリームを処理する場合がある。入力データストリームにおけるデータ要素の一部のスライディングウィンドウが、スライディングウィンドウ内の各データ要素の関数(たとえば、積和)である第1の出力を生成するのに使用されてもよい。次の出力を決定する場合、スライディングウィンドウがシフトされ、次の出力が、シフトされたスライディングウィンドウにおける各データ要素の関数として決定される。
【０００５】
従来のスライディングウィンドウ命令を使用して畳込み関数を実行するために比較的多数のレジスタおよびシフトが使用される場合がある。非限定的な例として、シングルインストラクションマルチプルデータ(SIMD)アーキテクチャが、4データ入力「レーン」を使用して従来のスライディングウィンドウ命令を実行する場合がある。一例として、レーンは、レジスタからの4つのデータ入力(たとえば、スライディングウィンドウ幅が"4"である)に対して畳込み関数を実行して出力を生成することがある。追加の出力を生成する場合、データ要素が第2のレジスタ内で1ロケーション分シフトされることがあり、レーンは、第2のレジスタ内のデータ要素に対して畳込み関数を実行する場合がある。したがって、畳込み関数の出力ごとに、複数のレジスタおよびシフトが使用されることがある。
【発明の概要】
【課題を解決するための手段】
【０００６】
スライディングウィンドウ演算を実行するためのシフトおよびレジスタを減らすためのシステムおよび方法が開示される。たとえば、演算に関するデータを含む複数のレジスタを参照することによって単一のSIMDレーン内でスライディングウィンドウ演算を実行するための技法が開示される。一例として、スライディングウィンドウ演算が第1のレジスタおよび第2のレジスタを参照してもよい。たとえば、SIMDレーンが第1のレジスタおよび第2のレジスタを参照し、第1および第2のレジスタ内のデータに対するスライディングウィンドウ演算を実行してもよい。一例として、SIMDレーン内の第1のレジスタの一部が、入力データストリームの4つのデータ要素(たとえば、データ要素"0"、データ要素"1"、データ要素"2"、およびデータ要素"3")を記憶してもよく、SIMDレーン内の第2のレジスタの一部が、入力データストリームの次の4つのデータ要素(たとえば、データ要素"4"、データ要素"5"、データ要素"6"、およびデータ要素"7")を記憶してもよい。第1のレジスタの上記の部分に関して、第2のレジスタの対応する部分が、入力データストリームのシフトされたデータを含んでもよい。
【０００７】
SIMDレーンは、2つのレジスタを参照して5つまでのスライディングウィンドウ演算を実行してもよい。たとえば、SIMDアーキテクチャは、スライディングウィンドウ演算を実行するためにレジスタ内のデータを多重化してもよい。一例として、第1のSIMDレーンは、第1のレジスタ内の最初の4つのデータ要素(たとえば、データ要素"0"、データ要素"1"、データ要素"2"、およびデータ要素"3")を使用して第1のスライディングウィンドウ演算を実行し、第1のレジスタのデータ要素"1, 2, 3"ならびに第2のレジスタのデータ要素"4"を使用して第2のスライディングウィンドウ演算を実行し、第1のレジスタのデータ要素"2, 3"ならびに第2のレジスタのデータ要素"4, 5"を使用して第3のスライディングウィンドウ演算を実行し、第1のレジスタのデータ要素"3"ならびに第2のレジスタのデータ要素"4, 5, 6"を使用して第4のスライディングウィンドウ演算を実行し、他のスライディングウィンドウ演算についても同様に実行してもよい。
【０００８】
特定の態様では、本装置は、第1の入力データ要素を記憶するレーンを有する第1のレジスタと、第2の入力データ要素を記憶するレーンを有する第2のレジスタとを含む。第2のレジスタのレーンの幅は、第1のレジスタのレーンの幅に等しい。本装置は、第1のレジスタのレーンの幅に等しいレーン幅を有するシングルインストラクションマルチプルデータ(SIMD)レーンをさらに含む。SIMDレーンは、第1のレジスタのレーン内の第1の入力データ要素および第2のレジスタのレーン内の第2の入力データ要素に対してスライディングウィンドウ演算を実行するように構成される。スライディングウィンドウ演算を実行することは、第1のレジスタの第1の位置に記憶された第1の入力データ要素および第2のレジスタの第2の位置に記憶された第2の入力データ要素に基づいて結果を決定することを含む。第2の位置は第1の位置とは異なる。
【０００９】
別の特定の態様では、本方法は、第1のレジスタのレーン内に第1の入力データ要素を記憶するステップと、第2のレジスタのレーン内に第2の入力データ要素を記憶するステップであって、第2のレジスタのレーンの幅が第1のレジスタのレーンの幅に等しい、ステップとを含む。本方法は、第1のレジスタのレーンの幅に等しいレーン幅を有するシングルインストラクションマルチプルデータ(SIMD)レーンを使用して、第1のレジスタのレーン内の第1の入力データ要素および第2のレジスタのレーン内の第2の入力データ要素に対してスライディングウィンドウ演算を実行するステップをさらに含む。スライディングウィンドウ演算を実行することは、第1のレジスタの第1の位置に記憶された第1の入力データ要素および第2のレジスタの第2の位置に記憶された第2の入力データ要素に基づいて結果を決定することを含む。第2の位置は第1の位置とは異なる。
【００１０】
別の特定の態様では、本装置は、第1のデータを記憶するための手段と第2のデータを記憶するための手段とを含む。第1のデータを記憶するための手段は、第1の入力データ要素を記憶するレーンを有し、第2のデータを記憶するための手段は、第2の入力データ要素を記憶するレーンを有する。第2のデータを記憶するための手段のレーンの幅は、第1のデータを記憶するための手段のレーンの幅に等しい。本装置は、第1のデータを記憶するための手段のレーン内の第1の入力データ要素および第2のデータを記憶するための手段のレーン内の第2の入力データ要素に対してスライディングウィンドウ演算を実行するための手段をさらに含む。スライディングウィンドウ演算を実行するための手段は、第1のデータを記憶するための手段のレーンの幅に等しいレーン幅を有する。スライディングウィンドウ演算を実行することは、第1のデータを記憶するための手段の第1の位置に記憶された第1の入力データ要素および第2のデータを記憶するための手段の第2の位置に記憶された第2の入力データ要素に基づいて結果を決定することを含む。第2の位置は第1の位置とは異なる。
【００１１】
別の特定の態様では、非一時的コンピュータ可読媒体が、プロセッサによって実行されたときに、プロセッサに、第1のレジスタのレーン内に第1の入力データ要素を記憶させ、第2のレジスタのレーン内に第2の入力データ要素を記憶させる命令であって、第2のレジスタのレーンの幅が第1のレジスタのレーンの幅に等しい命令を含む。これらの命令はさらに、プロセッサに、第1のレジスタのレーンの幅に等しいレーン幅を有するシングルインストラクションマルチプルデータ(SIMD)レーンを使用して、第1のレジスタのレーン内の第1の入力データ要素および第2のレジスタのレーン内の第2の入力データ要素に対してスライディングウィンドウ演算を実行させるように実行可能である。スライディングウィンドウ演算を実行することは、第1のレジスタの第1の位置に記憶された第1の入力データ要素および第2のレジスタの第2の位置に記憶された第2の入力データ要素に基づいて結果を決定することを含む。第2の位置は第1の位置とは異なる。
【００１２】
開示される実装形態のうちの少なくとも1つによってもたらされる1つの特定の利点は、SIMDレーンが、従来のSIMDアーキテクチャより少ないレジスタおよびシフトを使用してスライディングウィンドウ演算を実行する場合があることである。本開示の他の態様、利点、および特徴は、以下のセクション、すなわち、図面の簡単な説明、発明を実施するための形態、および特許請求の範囲を含む本願全体のレビューの後明らかになるであろう。
【図面の簡単な説明】
【００１３】
【図１】スライディングウィンドウ演算を実行するためのシステムの動作を示す図である。
【図２】シングルインストラクションマルチプルデータ(SIMD)レーン内の回路を示す図である。
【図３】入力データを第1のレジスタ内にロードし、入力データのシフトされたバージョンを第2のレジスタ内にロードするように動作可能なシステムの図である。
【図４】スライディングウィンドウ演算を実行するための方法のフローチャートである。
【図５】スライディングウィンドウ演算を実行するように動作可能な構成要素を含むデバイスのブロック図である。
【発明を実施するための形態】
【００１４】
図1を参照すると、スライディングウィンドウ演算を実行するためのシステムの動作が示される。システムは、演算に関するデータを含む複数のレジスタを参照することによってシングルインストラクションマルチプルデータ(SIMD)レーン内でスライディングウィンドウ演算を実行してもよい。システムは、SIMDアーキテクチャ102(たとえば、畳込み関数ハードウェアおよび/またはスライディングウィンドウハードウェア)を含んでもよい。
【００１５】
入力データ104は、SIMDアーキテクチャ102に供給されてもよい。後述のように、スライディングウィンドウ演算を本明細書で説明する技法に従って実行するのを可能にするように入力データ104の特定の部分がシフトされ、いくつかのレジスタ位置内に記憶されてもよい。入力データ104は、64個のデータ要素(たとえば、データ要素"0"〜データ要素"63")を含んでもよい。代替実装形態では、入力データ104はさらなるデータ要素(またはより少ないデータ要素)を含んでもよい。例示的な実装形態では、入力データ104は、第1の入力データ要素106と第2の入力データ要素108とを含んでもよい。第1の入力データ要素106は、データ要素"0"と、データ要素"1"と、データ要素"2"と、データ要素"3"とを含んでもよい。第2の入力データ要素108は、データ要素"4"と、データ要素"5"と、データ要素"6"と、データ要素"7"とを含んでもよい。入力データ104に関して明示的に示されていないが、入力データ104は、第3の入力データ要素(たとえば、データ要素"8"〜データ要素"11")、第4の入力データ要素(たとえば、データ要素"12"〜データ要素"15")、第5の入力データ要素(たとえば、データ要素"16"〜データ要素"19")などを含んでもよい。
【００１６】
SIMDアーキテクチャ102は、入力データ104に畳込み関数を適用して出力データ110を生成するように構成されてもよい。たとえば、SIMDアーキテクチャ102は、入力データ104におけるデータ要素に「スライディングウィンドウ」関数を適用して出力データ110を生成してもよい。出力データ110の各出力データ要素は、スライディングウィンドウ内の入力データ要素の関数(たとえば、積和)であってもよい。一例として、出力データ110の第1の出力データ要素は、第1の入力データ要素106の積和であってもよい。たとえば、出力データ110の第1の出力データ要素は、データ要素"0"、データ要素"1"、データ要素"2"、およびデータ要素"3"の関数であってもよい。出力データ110の第2の出力データ要素は、データ要素"1"、データ要素"2"、データ要素"3"、およびデータ要素"4"の関数であってもよい。スライディングウィンドウ演算を実行するための技法について以下でより詳細に説明する。
【００１７】
SIMDアーキテクチャ102は、第1のSIMDレーン122と、第2のSIMDレーン124と、第3のSIMDレーン126と、第4のSIMDレーン128とを含んでもよい。図1には4つのSIMDレーンが示されるが、代替実装形態では、SIMDアーキテクチャ102にさらなる(またはより少ない)SIMDレーンが含まれてもよい。後述のように、各SIMDレーン122〜128は、対応するSIMDレーン122〜128内の入力データ要素に対してスライディングウィンドウ演算を実行するように構成されてもよい。
【００１８】
システムは、第1のレジスタ130と第2のレジスタ140とを含んでもよい。各レジスタ130、140は、入力データ104の入力データ要素を記憶してもよい。第1のレジスタ130は、第1のレーン132と、第2のレーン134と、第3のレーン136と、第4のレーン138とを含んでもよい。図示の実装形態では、第1のレジスタ130の各レーン132〜138は幅が4であってもよい。たとえば、第1のレジスタ130の各レーン132〜138は、4つのデータ要素を記憶するように割り振られてもよい。たとえば、第1のレジスタ130の各レーン132〜138は、入力データ104の4つの入力データ要素を記憶するように動作可能であってもよい。第1のレジスタ130の第1のレーン132は、入力データ104の第1の入力データ要素106(たとえば、データ要素"0"〜データ要素"3")を記憶してもよく、第1のレジスタ130の第2のレーン134は、入力データ104の第2の入力データ要素108(たとえば、データ要素"4"〜データ要素"7")を記憶してもよく、第1のレジスタ130の第3のレーン136は、入力データ104の第3の入力データ要素(たとえば、データ要素"8"〜データ要素"11")を記憶してもよく、第1のレジスタ130の第4のレーン138は、入力データ104の第4の入力データ要素(たとえば、データ要素"12"〜データ要素"15")を記憶してもよい。
【００１９】
さらに、第1のレジスタ130の各レーン132〜138の幅は、対応するSIMDレーン122〜128のレーン幅に等しくてもよい。たとえば、第1のSIMDレーン122のレーン幅は、第1のレジスタ130の第1のレーン132の幅に等しく、第2のSIMDレーン124のレーン幅は、第1のレジスタ130の第2のレーン134の幅に等しく、第3のSIMDレーン126のレーン幅は、第1のレジスタ130の第3のレーン136の幅に等しく、第4のSIMDレーン128のレーン幅は、第1のレジスタ130の第4のレーン138の幅に等しい。
【００２０】
第2のレジスタ140は、第1のレーン142と、第2のレーン144と、第3のレーン146と、第4のレーン148とを含んでもよい。図示の実装形態では、第2のレジスタ140の各レーン142〜148も幅が4であってもよい。たとえば、第2のレジスタ140の各レーン142〜148は、入力データ104の4つの入力データ要素を記憶するように動作可能であってもよい。第1のレジスタ130のレーン132〜138内に記憶された入力データ要素に関して、第2のレジスタ140の対応するレーン142〜148内に記憶された入力データ要素は、レーン幅分シフトされてもよい(たとえば、4だけシフトされてもよい)。たとえば、第2のレジスタ140の第1のレーン142は、入力データ104の第2の入力データ要素108(たとえば、データ要素"4"〜データ要素"7")を記憶してもよく、第2のレジスタ140の第2のレーン144は、入力データ104の第3の入力データ要素(たとえば、データ要素"8"〜データ要素"11")を記憶してもよく、第2のレジスタ140の第3のレーン146は、入力データ104の第4の入力データ要素(たとえば、データ要素"12"〜データ要素"15")を記憶してもよく、第2のレジスタ140の第4のレーン148は、入力データ104の第5の入力データ要素(たとえば、データ要素"16"〜データ要素"19")を記憶してもよい。
【００２１】
各データ要素は、対応するレジスタの特定の位置に記憶されてもよい。本明細書で使用するレジスタの「位置」は、開始アドレスに対するレジスタ内の相対アドレス(またはロケーション)に対応する。たとえば、第1の位置に記憶されるデータ要素は、レジスタの開始ロケーションに記憶されてもよく、最後の位置に記憶されるデータ要素は、レジスタの終了ロケーションに記憶されてもよい。一例として、レジスタ130、140に関して、データ要素"0"は第1のレジスタ130の第1の位置に記憶されてもよく、データ要素"4"は第2のレジスタ140の第1の位置に記憶されてもよい。データ要素"1"およびデータ要素"5"はそれぞれ、第1のレジスタ130の第2の位置および第2のレジスタ140の第2の位置に記憶されてもよい。データ要素"2"およびデータ要素"6"はそれぞれ、第1のレジスタ130の第3の位置および第2のレジスタ140の第3の位置に記憶されてもよい。データ要素"3"およびデータ要素"7"はそれぞれ、第1のレジスタ130の第4の位置および第2のレジスタ140の第4の位置に記憶されてもよい。
【００２２】
第1のSIMDレーン122は、第1のレジスタ130および第2のレジスタ140を参照して、レーンサイズと同等のデータに対してスライディングウィンドウ演算を実行してもよい。図2に関してより詳細に説明するように、第1のSIMDレーン122内の回路は、スライディングウィンドウ演算を実行するためにレジスタ130、140内のデータを多重化してもよい。第1のSIMDレーン122は、それぞれ第1のレジスタ130、第2のレジスタ140の第1のレーン132、142を参照して5つまでのスライディングウィンドウ演算を実行してもよい。一例として、第1のSIMDレーン122は、第1のレジスタ130内の最初の4つのデータ要素(たとえば、データ要素"0"、データ要素"1"、データ要素"2"、およびデータ要素"3")を使用して第1のスライディングウィンドウ演算を実行してもよい。第1のスライディングウィンドウ演算を実行した後、第1のSIMDレーン122は、第1のレジスタ130の第1のレーン132内のデータ要素"1"〜データ要素"3"を使用し、かつ第2のレジスタ140の第1のレーン142内のデータ要素"4"を使用して第2のスライディングウィンドウ演算を実行してもよい。
【００２３】
第1のSIMDレーン122は、第1のレジスタ130の第1のレーン132のデータ要素"2"およびデータ要素"3"を使用し、かつ第2のレジスタ140の第1のレーン142のデータ要素"4"およびデータ要素"5"を使用して第3のスライディングウィンドウ演算を実行するように構成されてもよい。第3のスライディングウィンドウ演算を実行した後、第1のSIMDレーン122は、第1のレジスタ130の第1のレーン132のデータ要素"3"を使用し、かつ第2のレジスタ140の第1のレーン142のデータ要素"4"〜データ要素"6"を使用して第4のスライディングウィンドウ演算を実行してもよい。第1のSIMDレーン122は、第2のレジスタ140内の最初の4つのデータ要素(たとえば、データ要素"4"〜データ要素"7")を使用して第5のスライディングウィンドウ演算を実行するようにさらに構成されてもよい。
【００２４】
したがって、第1のSIMDレーン122は、2つのレジスタ130、140を使用して5つのスライディングウィンドウ演算を実行してもよい。第1のレジスタ130の第1のレーン132内のデータ要素および第2のレジスタ140の第1のレーン142内のデータ要素は、入力データ104における単一のシフト(たとえば、4要素シフト)によって「オフセット」されてもよい。したがって、第1のSIMDレーン122は、2つのレジスタ130、140を使用して8つのデータ要素に「アクセス」可能であってもよい。したがって、単一のSIMDレーンが4つのレジスタおよび4つのシフト(たとえば、4つの単一要素シフト)を使用する必要がある場合がある従来のSIMDアーキテクチャと比較して、2つのレジスタ130、140を使用して5つのスライディングウィンドウ演算を実行してもよい。図1に示すように、第2のレジスタ140内のデータは1ではなく4だけシフトされるので、5つまでの出力を算出するのに必要なデータ要素のすべてに対して、第1のSIMDレーン122が2つのレジスタ130、140を使用してアクセス可能である。したがって、他のスライディングウィンドウ演算およびSIMDアーキテクチャと比較してより少ない数のレジスタおよびシフトが利用されてもよい。
【００２５】
第2のSIMDレーン124、第3のSIMDレーン126、および第4のSIMDレーン128の各々が、2つのレジスタ130、140を使用して5つまでのスライディングウィンドウ演算を実行してもよいことが了解されよう。SIMDレーン124〜128は、それぞれレジスタ130、140の対応するレーン134〜138、144〜148に対して、第1のSIMDレーン122がレジスタ130、140の第1のレーン132、142に対して動作するのと実質的に同様に動作してもよい。たとえば、第2のSIMDレーン124は、第1のレジスタ130の第2のレーン134内の第2の入力データ要素108を使用し、かつ第2のレジスタ140の第2のレーン144内の第3の入力データ要素を使用して5つまでのスライディングウィンドウ演算を実行してもよい。第3のSIMDレーン126は、第1のレジスタ130の第3のレーン136内の第3の入力データ要素を使用し、かつ第2のレジスタ140の第3のレーン146内の第4の入力データ要素を使用して5つまでのスライディングウィンドウ演算を実行してもよい。さらに、第4のSIMDレーン128は、第1のレジスタ130の第4のレーン138内の第4の入力データ要素を使用し、かつ第2のレジスタ140の第4のレーン148内の第5の入力データ要素を使用して5つまでのスライディングウィンドウ演算を実行してもよい。追加のSIMDレーン(図示せず)が図示のSIMDレーン122〜128と実質的に同様に動作して残りの入力データ104に対してスライディングウィンドウ演算を実行してもよい。
【００２６】
図2を参照すると、第1のSIMDレーン122内の回路が示される。第1のSIMDレーン122は、第1のマルチプレクサ202と、第2のマルチプレクサ204と、第3のマルチプレクサ206と、第4のマルチプレクサ208と、算術および論理ユニット(ALU)210とを含む。特定の実装形態では、ALU210は、積和回路を含んでもよい。第1のSIMDレーン122内の回路は、説明のためのものであり、限定のためのものではない。たとえば、さらなる(またはより少ない)回路構成要素が第1のSIMDレーン122に含まれてもよい。第1のSIMDレーン122内の回路が図2に示されるが、図1のシステムの他のSIMDレーン124〜128は同様の回路構成要素を含んでもよい。
【００２７】
第1のマルチプレクサ202の第1の入力が、第1のレジスタ130の第1のレーン132内に記憶されたデータ要素"0"に結合されてもよく、第1のマルチプレクサ202の第2の入力が、第2のレジスタ140の第1のレーン142内に記憶されたデータ要素"4"に結合されてもよい。第1のマルチプレクサ202は、第1のマルチプレクサ202に供給される選択信号(図示せず)に基づいて、データ要素"0"またはデータ要素"4"をALU210に供給してもよい。特定の態様では、命令の命令コードにおける即値フィールドが、マルチプレクサ202がALU210にデータ要素"0"(たとえば、第1のレーン132内の第1のウィンドウにおけるデータ要素)を供給するかそれともデータ要素"4"(たとえば、第1のレーン142内の第1のウィンドウにおけるデータ要素)を供給するかを決定してもよい。
【００２８】
第2のマルチプレクサ204の第1の入力が、第1のレジスタ130の第1のレーン132内に記憶されたデータ要素"1"に結合されてもよく、第2のマルチプレクサ204の第2の入力が、第2のレジスタ140の第1のレーン142内に記憶されたデータ要素"5"に結合されてもよい。第2のマルチプレクサ204は、第2のマルチプレクサ204に供給される選択信号(図示せず)に基づいて、データ要素"1"またはデータ要素"5"をALU210に供給してもよい。特定の態様では、命令の命令コードにおける即値フィールドが、マルチプレクサ204がALU210にデータ要素"1"(たとえば、第1のレーン132内の第2のウィンドウにおけるデータ要素)を供給するかそれともデータ要素"5"(たとえば、第1のレーン142内の第2のウィンドウにおけるデータ要素)を供給するかを決定してもよい。
【００２９】
第3のマルチプレクサ206の第1の入力が、第1のレジスタ130の第1のレーン132内に記憶されたデータ要素"2"に結合されてもよく、第3のマルチプレクサ206の第2の入力が、第2のレジスタ140の第1のレーン142内に記憶されたデータ要素"6"に結合されてもよい。第3のマルチプレクサ206は、第3のマルチプレクサ206に供給される選択信号(図示せず)に基づいて、データ要素"2"またはデータ要素"6"をALU210に供給してもよい。特定の態様では、命令の命令コードにおける即値フィールドが、マルチプレクサ206がALU210にデータ要素"2"(たとえば、第1のレーン132内の第3のウィンドウにおけるデータ要素)を供給するかそれともデータ要素"6"(たとえば、第1のレーン142内の第3のウィンドウにおけるデータ要素)を供給するかを決定してもよい。
【００３０】
さらに、第4のマルチプレクサ208の第1の入力が、第1のレジスタ130の第1のレーン132内に記憶されたデータ要素"3"に結合されてもよく、第4のマルチプレクサ208の第2の入力が、第2のレジスタ140の第1のレーン142内に記憶されたデータ要素"7"に結合されてもよい。第4のマルチプレクサ208は、第4のマルチプレクサ208に供給される選択信号(図示せず)に基づいて、データ要素"3"またはデータ要素"7"をALU210に供給してもよい。特定の態様では、命令の命令コードにおける即値フィールドが、マルチプレクサ208がALU210にデータ要素"3"(たとえば、第1のレーン132内の第4のウィンドウにおけるデータ要素)を供給するかそれともデータ要素"7"(たとえば、第1のレーン142内の第4のウィンドウにおけるデータ要素)を供給するかを決定してもよい。したがって、第1のSIMDレーン122は、命令に基づいて、第1のレジスタ130の第1のレーン132内の複数のウィンドウ、第2のレジスタ140の第1のレーン142内の複数のウィンドウ、またはそれらの任意の組合せに対して同時にスライディングウィンドウ演算を実行してもよい。
【００３１】
動作時には、第1のSIMDレーン122は、レジスタ130、140の第1のレーン132、142内のデータに基づいて5つまでのスライディングウィンドウ演算を実行してもよい。以下の例は、第3のスライディングウィンドウ演算(たとえば、データ要素"2"、データ要素"3"、データ要素"4"、およびデータ要素"5"を使用する積和演算)に対応するが、同様の技法を適用して第1のスライディングウィンドウ演算、第2のスライディングウィンドウ演算、第4のスライディングウィンドウ演算、および第5のスライディングウィンドウ演算を実行してもよい。
【００３２】
第3のスライディングウィンドウ演算を実行する場合、第1のマルチプレクサ202は、第1のマルチプレクサ202に供給される選択信号に基づいてALU210にデータ要素"4"を供給してもよく、第2のマルチプレクサ204は、第2のマルチプレクサ204に供給される選択信号に基づいてALU210にデータ要素"5"を供給してもよい。さらに、第3のマルチプレクサ206は、第3のマルチプレクサ206に供給される選択信号に基づいてALU210にデータ要素"2"を供給してもよく、第4のマルチプレクサ208は、第4のマルチプレクサ208に供給される選択信号に基づいてALU210にデータ要素"3"を供給してもよい。
【００３３】
ALU210は、データ要素"2"、データ要素"3"、データ要素"4"、およびデータ要素"5"の積和に基づいて出力データ110を生成するように構成されてもよい。たとえば、ALU210は、マルチプレクサ202〜208によって供給されたデータ要素に対して垂直演算(たとえば、乗算演算)を実行してもよい。乗算演算の非限定的な例として、ALU210は、データ要素"2"にデータ要素"3"を乗算して第1の積を生成し、データ要素"3"にデータ要素"4"を乗算して第2の積を生成し、データ要素"4"にデータ要素"5"を乗算して第3の積を生成し、データ要素"5"にデータ要素"2"を乗算して第4の積を生成してもよい。垂直演算の後で、ALU210は、垂直演算の結果である積に対して水平演算を実行してもよい。水平演算の非限定的な例には、加算演算、ビット単位OR演算、または乗算演算を含めてもよい。加算演算の非限定的な例として、ALU210は、第1の積、第2の積、第3の積、および第4の積を加算してもよい。したがって、水平演算は垂直演算の後で実行されてもよい。上記の例では、水平演算および垂直演算は積和に対応する。
【００３４】
図2はALU210を積和回路として示しているが、代替実装形態では、ALUは、スライディングウィンドウ演算を実行するために第1のSIMDレーン122とともに実装されてもよい。非限定的な例として、和積演算、論理AND演算、論理OR演算、論理NAND演算、または論理NOR演算を実行するALUが、第1のSIMDレーン122とともに実装されてもよい。
【００３５】
したがって、第1のSIMDレーン122内の回路は、単一のSIMDレーンが4つのレジスタおよび4つのシフト(たとえば、4つの単一要素シフト)を使用することを必要とする場合があるSIMDアーキテクチャと比較して、2つのレジスタ130、140および単一のシフト(たとえば、レジスタ130、140間の4要素シフト)を使用して5つまでのスライディングウィンドウ演算を実行してもよい。図2に示すように、第2のレジスタ140内のデータは1ではなく4だけシフトされるので、5つまでの出力を算出するのに必要なデータ要素のすべてに対して、第1のSIMDレーン122が2つのレジスタ130、140を使用してアクセス可能である。したがって、他のスライディングウィンドウ演算およびSIMDアーキテクチャと比較してより少ない数のレジスタおよびシフトが利用されてもよい。
【００３６】
図3を参照すると、入力データ104を第1のレジスタ130内にロードし、入力データ104のシフトされたバージョンを第2のレジスタ140内にロードするように動作可能なシステム300が示される。システム300は、プロセッサ301と、メモリ302と、第1のレジスタ130と、第2のレジスタ140とを含む。プロセッサ301は、論理シフタ回路304を含む。
【００３７】
プロセッサ301は、ロード命令を受信した後、メモリ302内のメモリロケーションから入力データ104を取り出してもよく、第1のレジスタ130内に入力データ104をロードしてもよい。プロセッサ301は、図1に示すアライメントに従って第1のレジスタ130内に入力データ104をロードしてもよい。たとえば、第1のレジスタ130の第1のレーン132内にデータ要素"0"〜データ要素"3"がロードされてもよく、第1のレジスタ130の第2のレーン134内にデータ要素"4"〜データ要素"7"がロードされてもよく、他のデータ要素についても同様である。
【００３８】
プロセッサ301は、ロード命令を受信したときに、メモリ302内のメモリロケーションから入力データ104を取り出して、論理シフタ回路304に入力データ104を供給してもよい。論理シフタ回路304は、SIMDレーン122〜128のレーン幅分入力データ104をシフトさせるように構成されてもよい。たとえば、論理シフタ回路304は、入力データ104を4だけシフトさせてシフトされた入力データ314を生成してもよい。プロセッサ301は、図1に示すアライメントに従って、シフトされた入力データ314を第2のレジスタ140内にロードしてもよい。たとえば、第2のレジスタ140の第1のレーン142内にデータ要素"4"〜データ要素"7"がロードされてもよく、第2のレジスタ140の第2のレーン144内にデータ要素"8"〜データ要素"11"がロードされてもよく、他のデータ要素についても同様である。
【００３９】
論理シフタ回路304は、プロセッサ301に含まれるように示されるが、他の実装形態では、論理シフタ回路304はプロセッサ301の外部に位置してもよい。特定の実装形態では、プロセッサ301は、デバイス(たとえばモバイルフォン)の中央処理ユニット(CPU)であってもよい。代替実装形態では、プロセッサ301は、CPUの外部に位置してもよい(たとえば、プロセッサ301は特定用途向け集積回路であってもよい)。
【００４０】
図3のシステム300は、ロード演算の間にシフトを行って図1に示すようにレジスタ130、140内のデータ要素を整列させてもよい。たとえば、論理シフタ回路304は、第2のレジスタ140の第1のレーン142が(データ要素"0"〜データ要素"3"ではなく)データ要素"4"〜データ要素"7"を記憶するように入力データ104をシフトさせてもよい。このシフトは、第1のSIMDレーン122が、図1および図2に関して説明したように2つのレジスタ130、140を使用して5つまでのスライディングウィンドウ演算を実行するのを可能にしてもよい。
【００４１】
図4を参照すると、スライディングウィンドウ演算を実行するための方法400のフローチャートが示される。方法400は、図1〜図3の第1のレジスタ130、図1〜図3の第2のレジスタ140、図2の出力レジスタ212、図3のメモリ302、またはそれらの任意の組合せを使用して、図1のSIMDアーキテクチャ102(たとえば、SIMDレーン122〜128)および/または図3のプロセッサ301によって実行されてもよい。
【００４２】
方法400は、402において第1のレジスタのレーン内に第1の入力データ要素を記憶することを含む。たとえば、図1〜図3を参照すると、プロセッサ301は、第1のレジスタ130の第1のレーン132内に入力データ104の第1の入力データ要素106(たとえば、データ要素"0"〜データ要素"3")を記憶してもよい。一例として、プロセッサ301は、ロード命令を受信したことに応答して第1のレジスタ130の第1のレーン132内に第1の入力データ要素106をロードしてもよい。さらに、プロセッサ301は、第1のレジスタ130の第2のレーン124内に入力データ104の第2の入力データ要素108(たとえば、データ要素"4"〜データ要素"7")を記憶してもよい。一例として、プロセッサ301は、ロード命令を受信したことに応答して第1のレジスタ130の第2のレーン134内に第2の入力データ要素108をロードしてもよい。
【００４３】
404において、第2の入力データ要素が第2のレジスタのレーン内に記憶されてもよい。たとえば、図1〜図3を参照するとわかるように、プロセッサ301は、第2のレジスタ140の第1のレーン142内に入力データの第2の入力データ要素108を記憶してもよい。一例として、プロセッサ301は、ロード命令を受信したときに、メモリ302内のメモリロケーションから入力データ104を取り出して、論理シフタ回路304に入力データ104を供給してもよい。論理シフタ回路304は、SIMDレーン122〜128のレーン幅分入力データ104をシフトさせてもよい。たとえば、論理シフタ回路304は、入力データ104を4だけシフトさせてシフトされた入力データ314を生成してもよい。プロセッサは、図1に示すアライメントに従って、シフトされた入力データ314を第2のレジスタ140内にロードしてもよい。たとえば、第2のレジスタ140の第1のレーン142内にデータ要素"4"〜データ要素"7"がロードされてもよい。第2のレジスタ140の第1のレーン142の幅は、第1のレジスタ130の第1のレーン132の幅に等しくてもよい。
【００４４】
406において、第1のレジスタのレーンの幅に等しいレーン幅を有するSIMDレーンを使用して、第1のレジスタのレーン内の第1の入力データ要素および第2のレジスタのレーン内の第2の入力データ要素に対してスライディングウィンドウ演算が実行されてもよい。本明細書で使用する「スライディングウィンドウ演算」は、データストリーム内の複数の近接するデータ要素(たとえば、第1の入力データ要素および第2の入力データ要素)がデータ入力とみなされ、出力が生成される任意の演算を含んでもよい。上記では積和がスライディングウィンドウ演算として記載されているが、積和が一例にすぎないことを理解されたい。スライディングウィンドウ演算の他の例には、和積、加算演算、乗算演算などを含めてもよい。スライディングウィンドウ演算を実行するステップは、第1のレジスタの第1の位置に記憶された第1の入力データ要素および第1の位置とは異なる第2のレジスタの第2の位置に記憶された第2の入力データ要素に基づいて結果を決定するステップを含む。非限定的な例として、図1および図2を参照するとわかるように、1つのスライディングウィンドウ演算の結果がデータ要素"1〜4"に基づいてもよい。データ要素"1"は、第1のレジスタ130の1つの位置(たとえば、第2の位置)に位置してもよく、データ要素"4"は、データ要素"1"の位置とは異なる第2のレジスタ140の別の位置(たとえば、第1の位置)に位置してもよい。上記で説明したように、第1のSIMDレーン122は、第1のレジスタ130の第1のレーン132内に記憶された第1の入力データ要素106を使用し、かつ第2のレジスタ140の第1のレーン142内に記憶された第2の入力データ要素108を使用して5つまでのスライディングウィンドウ演算(たとえば、5つのスライディングウィンドウ演算)を実行してもよい。したがって、第1のSIMDレーン122によって実行されるスライディングウィンドウ演算の数(たとえば、5つ)は、第1のSIMDレーン122の幅(たとえば、4)以上であってもよい。
【００４５】
図4の方法400は、第1のSIMDレーン122が、単一のSIMDレーンが4つのレジスタおよび4つのシフト(たとえば、4つの単一要素シフト)を使用することを必要とする場合がある別のSIMDアーキテクチャと比較して、2つのレジスタ130、140および単一のシフト(たとえば、図3に示すような論理シフタ回路304によるレジスタ130、140間の4データ要素シフト)を使用して5つまでのスライディングウィンドウ演算を実行するのを可能にしてもよい。第2のレジスタ140内のデータは1ではなく4だけシフトされるので、5つまでの出力を算出するのに必要なデータ要素のすべてに対して、第1のSIMDレーン122が2つのレジスタ130、140を使用してアクセス可能である。したがって、他のスライディングウィンドウ演算およびSIMDアーキテクチャと比較してより少ない数のレジスタおよびシフトが利用されてもよい。
【００４６】
特定の実装形態では、方法400は、追加のSIMDレーンにおいて同様の演算を実行することを含んでもよい。たとえば、SIMDレーン124〜128は、それぞれレジスタ130、140の対応するレーン134〜138、144〜148に対して、第1のSIMDレーン122がレジスタ130、140の第1のレーン132、142に対して動作するのと実質的に同様に動作してもよい。たとえば、第2のSIMDレーン124は、第1のレジスタ130の第2のレーン134内の第2の入力データ要素108を使用し、かつ第2のレジスタ140の第2のレーン144内の第3の入力データ要素を使用して5つまでのスライディングウィンドウ演算を実行してもよい。第3のSIMDレーン126は、第1のレジスタ130の第3のレーン136内の第3の入力データ要素を使用し、かつ第2のレジスタ140の第3のレーン146内の第4の入力データ要素を使用して5つまでのスライディングウィンドウ演算を実行してもよい。さらに、第4のSIMDレーン128は、第1のレジスタ130の第4のレーン138内の第4の入力データ要素を使用し、かつ第2のレジスタ140の第4のレーン148内の第5の入力データ要素を使用して5つまでのスライディングウィンドウ演算を実行してもよい。追加のSIMDレーン(図示せず)が図示のSIMDレーン122〜128と実質的に同様に動作して残りの入力データ104に対してスライディングウィンドウ演算を実行してもよい。
【００４７】
図5を参照すると、ワイヤレス通信デバイスが示されており、全体として500で示される。デバイス500は、メモリ532に結合される、デジタル信号プロセッサなどのプロセッサ510を含む。
【００４８】
プロセッサ510は、メモリ532内に記憶されたソフトウェア(たとえば、1つまたは複数の命令568からなるプログラム)を実行するように構成されてもよい。プロセッサ510は、図1のSIMDアーキテクチャ102、図1の第1のレジスタ130、および図1の第2のレジスタ140を含んでもよい。たとえば、SIMDアーキテクチャ102は、プロセッサ510の実行ユニット内に位置してもよく、上述のようにレジスタ130、140を参照して畳込み関数を実行してもよい。特定の実装形態では、プロセッサ510は、図4の方法400を実行するように動作可能であってもよい。たとえば、プロセッサ510(たとえば、SIMDアーキテクチャ102)は、第1のレジスタ130の第1のレーン132内に第1の入力データ要素106を記憶してもよく、第2のレジスタ140の第1のレーン142内に第2の入力データ要素108を記憶してもよい。SIMDアーキテクチャ102は、上述のように、それぞれレジスタ130、140の第1のレーン132、142内に記憶されたデータ要素を使用して5つまでのスライディングウィンドウ演算を実行してもよい。
【００４９】
特定の実装形態では、プロセッサ510は、図4の方法400を実行するためにメモリ532に記憶された1つまたは複数の命令568を実行するように構成されてもよい。たとえば、メモリ532は、プロセッサ510によって実行されたときに、プロセッサ510に図4の方法400を実行させる命令568を含む非一時的コンピュータ可読媒体であってもよい。
【００５０】
ワイヤレスインターフェース540が、プロセッサ510およびアンテナ542に結合されてもよい。コーダ/デコーダ(コーデック)534をプロセッサ510に結合することもできる。スピーカ536およびマイクロフォン538をコーデック534に結合することができる。ディスプレイコントローラ526をプロセッサ510およびディスプレイデバイス528に結合することができる。特定の実装形態では、プロセッサ510、ディスプレイコントローラ526、メモリ532、コーデック534、およびワイヤレスインターフェース540が、システムインパッケージまたはシステムオンチップデバイス522内に含まれる。特定の実装形態では、入力デバイス530および電源544がシステムオンチップデバイス522に結合される。さらに、特定の実装形態では、図5に示されるように、ディスプレイデバイス528、入力デバイス530、スピーカ536、マイクロフォン538、アンテナ542、および電源544が、システムオンチップデバイス522の外部にある。しかしながら、ディスプレイデバイス528、入力デバイス530、スピーカ536、マイクロフォン538、アンテナ542、および電源544の各々を、1つもしくは複数のインターフェースまたはコントローラのような、システムオンチップデバイス522の1つまたは複数の構成要素に結合することができる。
【００５１】
図1〜図4に関する畳込み関数は、デバイス500において画像処理を実行するために使用されてもよい。たとえば、畳込み関数は、画像のピクセルをぼかすこと、画像のピクセルを先鋭化すること、画像内のエッジを検出することなどのためにカーネル(たとえば、畳込み行列またはマスク)に適用されてもよい。したがって、デバイス500は、他のSIMDアーキテクチャを使用するデバイスと比較してより少ないレジスタおよびシフトを使用して画像処理を実行してもよい。
【００５２】
上述の実装形態に関連して、本装置は、第1のデータを記憶するための手段を含む。第1のデータを記憶するための手段は、第1の入力データ要素を記憶するレーンを有する。たとえば、第1のデータを記憶するための手段は、図1〜図3および図5の第1のレジスタ130、1つまたは複数の他のデバイス、回路、モジュール、あるいはそれらの任意の組合せを含んでもよい。
【００５３】
装置はさらに、第2のデータを記憶するための手段を含んでもよい。第2のデータを記憶するための手段は、第2の入力データ要素を記憶するレーンを有する。たとえば、第2のデータを記憶するための手段は、図1〜図3および図5の第2のレジスタ140、1つまたは複数の他のデバイス、回路、モジュール、あるいはそれらの任意の組合せを含んでもよい。第2のデータを記憶するための手段の第1のレーンの幅は、第1のデータを記憶するための手段の第1のレーンの幅に等しい。たとえば、第1のレジスタ130の第1のレーン132の幅(たとえば、4)は、第2のレジスタ140の第1のレーン142の幅(たとえば、4)に等しくてもよい。
【００５４】
本装置は、第1のデータを記憶するための手段のレーン内の第1の入力データ要素および第2のデータを記憶するための手段のレーン内の第2の入力データ要素に対してスライディングウィンドウ演算を実行するための手段をさらに含んでもよい。たとえば、スライディングウィンドウ演算を実行するための手段は、図1および図5のSIMDアーキテクチャ102、図2のマルチプレクサ202〜208、図3のプロセッサ301、図5のプロセッサ510によって実行可能な命令568、1つまたは複数の他のデバイス、回路、モジュール、あるいはそれらの任意の組合せを含んでもよい。スライディングウィンドウ演算を実行するための手段は、第1のデータを記憶するための手段のレーンの幅に等しいレーン幅を有する。スライディングウィンドウ演算を実行することは、第1のデータを記憶するための手段の第1の位置に記憶された第1の入力データ要素および第2のデータを記憶するための手段の第2の位置に記憶された第2の入力データ要素に基づいて結果を決定することを含む。第2の位置は第1の位置とは異なる。
【００５５】
当業者には、本明細書で開示する実装形態に関して説明する様々な例示的な論理ブロック、構成、モジュール、回路、およびアルゴリズムステップが電子ハードウェア、コンピュータソフトウェア、または両方の組合せとして実装されてもよいことがさらに了解されよう。上記では、様々な例示的な構成要素、ブロック、構成、モジュール、回路、およびステップについて、それらの機能の観点から概括的に説明した。そのような機能がハードウェアとして実装されるか、またはソフトウェアとして実装されるかは、特定の適用例およびシステム全体に課される設計制約に依存する。当業者は、記載された機能を特定の適用例ごとに様々な方法で実装してもよいが、そのような実装の決定は、本開示の範囲からの逸脱を引き起こすものと解釈されるべきではない。
【００５６】
本明細書において開示される実装形態に関して説明した方法またはアルゴリズムのステップは、直接ハードウェアにおいて、プロセッサによって実行されるソフトウェアモジュールにおいて、またはその2つの組合せにおいて具現化されてもよい。ソフトウェアモジュールは、ランダムアクセスメモリ(RAM)、フラッシュメモリ、読取り専用メモリ(ROM)、プログラマブル読取り専用メモリ(PROM)、消去可能プログラマブル読取り専用メモリ(EPROM)、電気的消去可能プログラマブル読取り専用メモリ(EEPROM)、レジスタ、ハードディスク、リムーバブルディスク、コンパクトディスク読取り専用メモリ(CD-ROM)、または当技術分野で知られている任意の他の形態の記憶媒体の中に存在してもよい。例示的な非一時的(たとえば、有形)記憶媒体は、プロセッサが記憶媒体から情報を読み取り、記憶媒体に情報を書き込むことができるように、プロセッサに結合される。代替形態では、記憶媒体は、プロセッサと一体に構成される場合がある。プロセッサおよび記憶媒体は特定用途向け集積回路(ASIC)内に存在してもよい。ASICは、コンピューティングデバイスまたはユーザ端末に存在してもよい。代替として、プロセッサおよび記憶媒体は、コンピューティングデバイスまたはユーザ端末中に個別の構成要素として存在してもよい。
【００５７】
開示された実装形態の上記の説明は、開示された実装形態を当業者が作製または使用できるようにするために提供される。これらの実装形態に対する様々な変更は、当業者には容易に明らかであり、本明細書において規定された原理は、本開示の範囲から逸脱することなく、他の実装形態に適用される場合がある。したがって、本開示は、本明細書に示される実装形態に限定するものではなく、以下の特許請求の範囲によって規定される原理および新規の特徴と一致する、考えられる最も広い範囲を与えられるべきである。
【符号の説明】
【００５８】
102  SIMDアーキテクチャ
104  入力データ
106  第1の入力データ要素
108  第2の入力データ要素
110  出力データ
122  第1のSIMDレーン
124  第2のSIMDレーン
126  第3のSIMDレーン
128  第4のSIMDレーン
130  第1のレジスタ
132  第1のレーン
134  第2のレーン
136  第3のレーン
138  第4のレーン
140  第2のレジスタ
142  第1のレーン
144  第2のレーン
146  第3のレーン
148  第4のレーン
202  第1のマルチプレクサ
204  第2のマルチプレクサ
206  第3のマルチプレクサ
208  第4のマルチプレクサ
210  算術および論理ユニット(ALU)
212  出力レジスタ
300  システム
301  プロセッサ
302  メモリ
304  論理シフタ回路
314  シフトされた入力データ
500  ワイヤレス通信デバイス
510  プロセッサ
522  システムオンチップデバイス
526  ディスプレイコントローラ
528  ディスプレイデバイス
530  入力デバイス
532  メモリ
534  コーダ/デコーダ(コーデック)
536  スピーカ
538  マイクロフォン
540  ワイヤレスインターフェース
542  アンテナ
544  電源
568  命令
【図１】
0006737869.tif 000002
【図２】
0006737869.tif 000003
【図３】
0006737869.tif 000004
【図４】
0006737869.tif 000005
【図５】
0006737869.tif 000006