(58)【調査した分野】(Int.Cl.,DB名)
単一命令複数データ(SIMD)プロセッサにおいて複数の連続するメモリアドレスにおいてデータを記憶するための方法であって、前記プロセッサが、複数のデータベクトルを並列に記憶するための1つまたは複数の位置にアクセスし、各データベクトルが有効データと無効データを含み、前記複数のデータベクトルにそれぞれについて、前記方法が、
前記複数のデータベクトルのうちの第1のデータベクトルのデータ要素のシーケンスにおける第1の有効位置における第1の有効データ値を判定し、かつ前記複数の連続するメモリアドレスの第1のメモリアドレスにおいて前記第1のデータベクトルから前記第1の有効データ値を記憶するために書き込み回路を有効にするステップと、
前記第1の有効位置に関連する第1のオフセットを判定するステップと、
前記複数のデータベクトルのうちの第2のデータベクトルの前記データ要素のシーケンスにおける第2の有効位置における第2の有効データ値を判定し、かつ前記複数の連続するメモリアドレスの第2のメモリアドレスにおいて前記第2のデータベクトルから前記第2の有効データ値を記憶するために書き込み回路を有効にするステップと、
前記第2の有効位置に関連する第2のオフセットを判定するステップであって、前記第2のオフセットが、前記第1のオフセットと、有効データに関連する前記データ要素のシーケンスにおける位置の数とに基づく、ステップと
を含み、
前記複数の連続するメモリアドレスの前記第1のメモリアドレスが前記第1のオフセットに基づき、前記複数の連続するメモリアドレスの前記第2のメモリアドレスが前記第2のオフセットに基づく、方法。
前記第2のオフセットを算出するために、有効データに関連する前記第1の有効位置と前記第2の有効位置との間の前記位置の数を前記第1のオフセットに加算するステップをさらに含む、請求項1に記載の方法。
前記メモリの前記第1のメモリアドレスに連続する追加順次メモリアドレスに、前記第1のデータベクトルからの追加有効データを記憶するステップをさらに含む、請求項1に記載の方法。
前記圧縮メモリデータベクトルに記憶された前記データをフェッチしたことに応じて前記圧縮メモリデータベクトルに記憶された前記データを処理するステップをさらに含む、請求項9に記載の方法。
単一命令複数データ(SIMD)プロセッサによって実行されたときに、前記SIMDプロセッサに、請求項1〜11のいずれか一項に記載の方法を実施させる動作を実行させる少なくとも1つの命令を含む、非一時的コンピュータ可読記憶媒体。
単一命令複数データ(SIMD)プロセッサにおいて複数の連続するメモリアドレスにおいてデータを記憶するための装置であって、前記プロセッサが、複数のデータベクトルを並列に記憶するための1つまたは複数の位置にアクセスし、各データベクトルが有効データと無効データを含み、前記複数のデータベクトルにそれぞれについて、前記装置が、
前記複数のデータベクトルのうちの第1のデータベクトルのデータ要素のシーケンスにおける第1の有効位置における第1の有効データ値を判定し、かつ前記複数の連続するメモリアドレスの第1のメモリアドレスにおいて前記第1のデータベクトルから前記第1の有効データ値を記憶するために書き込み回路を有効にするための手段と、
前記第1の有効位置に関連する第1のオフセットを判定するための手段と、
前記複数のデータベクトルのうちの第2のデータベクトルの前記データ要素のシーケンスにおける第2の有効位置における第2の有効データ値を判定し、かつ前記複数の連続するメモリアドレスの第2のメモリアドレスにおいて前記第2のデータベクトルから前記第2の有効データ値を記憶するために書き込み回路を有効にするための手段と、
前記第2の有効位置に関連する第2のオフセットを判定するための手段であって、前記第2のオフセットが、前記第1のオフセットと、有効データに関連する前記データ要素のシーケンスにおける位置の数とに基づき、前記複数の連続するメモリアドレスの前記第1のメモリアドレスが前記第1のオフセットに基づき、前記複数の連続するメモリアドレスの前記第2のメモリアドレスが前記第2のオフセットに基づく、手段と
を備える、装置。
【発明を実施するための形態】
【0011】
図1を参照すると、連続するメモリアドレスにデータを記憶するように動作可能であるシステム100が示される。システム100は、モバイル電話、携帯情報端末(PDA)、エンターテインメントユニット、ナビゲーションデバイス、音楽プレーヤ、ビデオプレーヤ、デジタルビデオプレーヤ、デジタルビデオディスク(DVD)プレーヤ、または任意の他のデバイス内に実装されてもよい。
【0012】
システム100は、プロセッサ104に結合されたメモリ102を含む。一実装形態によれば、プロセッサ104は、単一命令複数データ(SIMD)プロセッサを含んでもよい。メモリ102は、プロセッサ104によって実行可能な命令を含む非一時的コンピュータ可読媒体であってもよい。たとえば、メモリ102は、プロセッサ104によって実行可能なスキャッタ命令106と、プロセッサ104によって実行可能な並列プレフィックス有効カウント命令108とを含む。
【0013】
メモリ102はまた、圧縮メモリデータベクトル110を含む。後述のように、様々な疎なデータベクトルからの(無効データに対する)有効データが圧縮メモリデータベクトル110に記憶されてメモリ102内に「圧縮データベクトル」を生成してもよい。圧縮メモリデータベクトル110は、複数の連続するメモリアドレスを含む。例示のために、圧縮メモリデータベクトル110は、第1のメモリアドレス111、第1のメモリアドレス111に連続する第2のメモリアドレス112、第2のメモリアドレス112に連続する第3のメモリアドレス113、第3のメモリアドレス113に連続する第4のメモリアドレス114、第4のメモリアドレス114に連続する第5のメモリアドレス115、第5のメモリアドレス115に連続する第6のメモリアドレス116、第6のメモリアドレス116に連続する第7のメモリアドレス117、第7のメモリアドレス117に連続する第8のメモリアドレス118、第8のメモリアドレス118に連続する第9のメモリアドレス119、第9のメモリアドレス119に連続する第10のメモリアドレス120などを含む。
【0014】
図1において、圧縮メモリデータベクトル110は16個のメモリアドレスを含む。たとえば、圧縮メモリデータベクトル110は、第15のメモリアドレス(図示せず)に連続する第16のメモリアドレス122を含む。しかし、他の実装形態では、圧縮メモリデータベクトル110はさらなる(またはより少ない)連続するメモリアドレスを含んでもよい。非限定的な例として、圧縮メモリデータベクトル110は32個の連続するメモリアドレスを含んでもよい。
【0015】
プロセッサ104は、1つまたは複数のレジスタ130と、メモリストレージ回路140と、フェッチ回路150と、SIMD処理パイプライン152とを含む。1つまたは複数のレジスタ130は、プロセッサ104に含まれるように示されるが、他の実装形態では、1つまたは複数のレジスタ130はプロセッサ104から分離されてもよい(プロセッサ104にアクセス可能であってもよい)。他の実装形態によれば、プロセッサ104はさらなる(またはより少ない)構成要素を含んでもよい。非限定的な例として、他の実装形態では、プロセッサ104はまた、1つまたは複数の算術論理ユニット(ALU)、1つまたは複数の特定用途向け実行ユニットなどを含んでもよい。プロセッサ104は、メモリストレージ回路140と、フェッチ回路150と、SIMD処理パイプライン152とを含むように示されるが、他の実装形態では、各構成要素140、150、152の動作は単一の処理構成要素によって実行されてもよい。
【0016】
1つまたは複数のレジスタ130は、第1のデータベクトル132、第2のデータベクトル134、および第3のデータベクトル136を記憶してもよい。「データ要素のシーケンス」は、データベクトル132、134、136に記憶されたデータ要素を含んでもよい。1つまたは複数のレジスタ130内に3つのデータベクトル132、134、136が含まれるように示されるが、他の実装形態では、1つまたは複数のレジスタ130はさらなる(またはより少ない)データベクトルを含んでもよい。各データベクトル132、134、136は「疎なデータベクトル」または「疎なデータアレイ」であってもよい。たとえば、各データベクトル132、134、136は、有効データ(たとえば、注目するデータ値)と無効データ(たとえば、ドントケアデータ値、デフォルトデータ値、またはゼロデータ値)とを含んでもよい。一実装形態によれば、データベクトル132、134、136は、(1つまたは複数のレジスタ130に記憶されるのではなく)メモリ102に記憶されてもよい。
【0017】
図2を参照すると、データベクトル132、134、136がより詳細に示される。各データベクトル132、134、136は8つの位置(たとえば、「位置0」〜「位置7」)を含む。一実装形態によれば、各位置は「アレイ位置」に対応してもよい。各データベクトル132、134、136は8つの位置を含むように示されるが、他の実装形態では、各データベクトル132、134、136はさらなる(またはより少ない)位置を含んでもよい。非限定的な例として、各データベクトル132、134、136は16個の位置を含んでもよい。別の実装形態によれば、様々なデータベクトルがそれぞれに異なる数の位置を含んでもよい。非限定的な例として、1つのデータベクトルが8つの位置を含み、別のデータベクトルが16個の位置を含んでもよい。
【0018】
図2によれば、第1のデータベクトル132は、3つの有効データ値と5つの無効データ値とを含む。たとえば、第1のデータベクトル132の「位置1」は有効データ値"A"を記憶し、第1のデータベクトル132の「位置3」は有効データ値"B"を記憶し、第1のデータベクトル132の「位置6」は有効データ値"C"を記憶する。第1のデータベクトル132の他の位置は無効データ値を記憶する。第2のデータベクトル134も、3つの有効データ値と5つの無効データ値とを含む。たとえば、第2のデータベクトル134の「位置2」は有効データ値"D"を記憶し、第2のデータベクトル134の「位置3」は有効データ値"E"を記憶し、第2のデータベクトル134の「位置6」は有効データ値"F"を記憶する。第2のデータベクトル134の他の位置は無効データ値を記憶する。第3のデータベクトル136は、4つの有効データ値と4つの無効データ値とを含む。たとえば、第3のデータベクトル136の「位置0」は有効データ値"G"を記憶し、第3のデータベクトル136の「位置4」は有効データ値"H"を記憶し、第3のデータベクトル136の「位置5」は有効データ値"I"を記憶し、第3のデータベクトル136の「位置7」は有効データ値"J"を記憶する。第3のデータベクトル136の他の位置は無効データ値を記憶する。
【0019】
再び
図1を参照すると、メモリストレージ回路140はデータベクトル解析回路142と、書込み回路144と、オフセット判定回路146とを含む。データベクトル解析回路142は、第1のデータベクトル132が有効データを有する位置を含むかどうかを判定するように構成されてもよい。たとえば、データベクトル解析回路142は、第1のデータベクトル132の「位置1」に有効データ値"A"が位置する(たとえば、第1の順序位置が有効データを有する)と判定してもよい。書込み回路144は、圧縮メモリデータベクトル110の連続するメモリアドレスに有効データ値を(並列に)書き込む(たとえば、記憶する)ように構成されてもよい。たとえば、第1のデータベクトル132の「位置1」に有効データ値"A"が位置すると判定されたことに応じて、メモリストレージ回路140が書込み回路144を有効化してもよい。書込み回路144は、有効化されたことに応じて第1のメモリアドレス111に有効データ値"A"を記憶してもよい。たとえば、書込み回路144はスキャッタ命令106(たとえば、ベクトルストア命令)を実行して、第1のメモリアドレス111に有効データ値"A"を記憶してもよい。
【0020】
第1のメモリアドレス111に有効データ値"A"が記憶された後、データベクトル解析回路142は、第1のデータベクトル132が有効データを有する別の位置を含むかどうかを判定してもよい。たとえば、データベクトル解析回路142は、第1のデータベクトル132の「位置3」に有効データ値"B"が位置する(たとえば、次の順序位置が有効データを有する)と判定してもよい。第1のデータベクトル132の「位置3」に有効データ値"B"が位置すると判定されたことに応じて、メモリストレージ回路140が書込み回路144を有効化してもよい。書込み回路144は、有効化されたことに応じて第2のメモリアドレス112(たとえば、第1のメモリアドレス111の連続するメモリアドレス)に有効データ値"B"を記憶してもよい。たとえば、書込み回路144は、スキャッタ命令106を実行して、第2のメモリアドレス112に有効データ値"B"を記憶してもよい。
【0021】
第2のメモリアドレス112に有効データ値"B"が記憶された後、データベクトル解析回路142は、第1のデータベクトル132が有効データを有する別の位置を含むかどうかを判定してもよい。たとえば、データベクトル解析回路142は、第1のデータベクトル132の「位置6」に有効データ値"C"が位置する(たとえば、次の順序位置が有効データを有する)と判定してもよい。第1のデータベクトル132の「位置6」に有効データ値"C"が位置すると判定されたことに応じて、メモリストレージ回路140が書込み回路144を有効化してもよい。書込み回路144は、有効化されたことに応じて第3のメモリアドレス113(たとえば、第2のメモリアドレス112の連続するメモリアドレス)に有効データ値"C"を記憶してもよい。たとえば、書込み回路144は、スキャッタ命令106を実行して、第3のメモリアドレス113に有効データ値"C"を記憶してもよい。したがって、第1のデータベクトル132の無効データ値がバイパスされてもよく、第1のデータベクトル132の有効データ値がメモリ102内の連続するメモリアドレスに記憶されてもよい。
【0022】
第3のメモリアドレス113に有効データ値"C"が記憶された後、データベクトル解析回路142は、第1のデータベクトル132が有効データを有する別の位置を含むかどうかを判定してもよい。データベクトル解析回路142は、第1のデータベクトル132が有効データを有する別の位置を含まないと判定したことに応じて、第2のデータベクトル134が有効データを有する位置を含むかどうかを判定してもよい。たとえば、データベクトル解析回路142は、第2のデータベクトル134の「位置2」に有効データ値"D"が位置する(たとえば、第1の順序位置が有効データを有する)と判定してもよい。第2のデータベクトル134の「位置2」に有効データ値"D"が位置すると判定されたことに応じて、メモリストレージ回路140が書込み回路144を有効化してもよい。書込み回路144は、有効化されたことに応じて第4のメモリアドレス114(たとえば、第3のメモリアドレス113の連続するメモリアドレス)に有効データ値"D"を記憶してもよい。たとえば、書込み回路144は、スキャッタ命令106を実行して、第4のメモリアドレス114に有効データ値"D"を記憶してもよい。
【0023】
第4のメモリアドレス114に有効データ値"D"が記憶された後、データベクトル解析回路142は、第2のデータベクトル134が有効データを有する別の位置を含むかどうかを判定してもよい。たとえば、データベクトル解析回路142は、第2のデータベクトル134の「位置3」に有効データ値"E"が位置する(たとえば、次の順序位置が有効データを有する)と判定してもよい。第2のデータベクトル134の「位置3」に有効データ値"E"が位置すると判定されたことに応じて、メモリストレージ回路140が書込み回路144を有効化してもよい。書込み回路144は、有効化されたことに応じて第5のメモリアドレス115(たとえば、第4のメモリアドレス114の連続するメモリアドレス)に有効データ値"E"を記憶してもよい。たとえば、書込み回路144は、スキャッタ命令106を実行して、第5のメモリアドレス115に有効データ値"E"を記憶してもよい。
【0024】
第5のメモリアドレス115に有効データ値"E"が記憶された後、データベクトル解析回路142は、第2のデータベクトル134が有効データを有する別の位置を含むかどうかを判定してもよい。たとえば、データベクトル解析回路142は、第2のデータベクトル134の「位置6」に有効データ値"F"が位置する(たとえば、次の順序位置が有効データを有する)と判定してもよい。第2のデータベクトル134の「位置6」に有効データ値"F"が位置すると判定されたことに応じて、メモリストレージ回路140が書込み回路144を有効化してもよい。書込み回路144は、有効化されたことに応じて第6のメモリアドレス116(たとえば、第5のメモリアドレス115の連続するメモリアドレス)に有効データ値"F"を記憶してもよい。たとえば、書込み回路144は、スキャッタ命令106を実行して、第6のメモリアドレス116に有効データ値"F"を記憶してもよい。したがって、第2のデータベクトル134の無効データ値がバイパスされてもよく、第2のデータベクトル134の有効データ値がメモリ102内の連続するメモリアドレスに記憶されてもよい。
【0025】
第6のメモリアドレス116に有効データ値"F"が記憶された後、データベクトル解析回路142は、第2のデータベクトル134が有効データを有する別の位置を含むかどうかを判定してもよい。データベクトル解析回路142は、第2のデータベクトル134が有効データを有する別の位置を含まないと判定したことに応じて、第3のデータベクトル136が有効データを有する位置を含むかどうかを判定してもよい。たとえば、データベクトル解析回路142は、第3のデータベクトル136の「位置1」に有効データ値"G"が位置する(たとえば、第1の順序位置が有効データを有する)と判定してもよい。第3のデータベクトル136の「位置1」に有効データ値"G"が位置すると判定されたことに応じて、メモリストレージ回路140が書込み回路144を有効化してもよい。書込み回路144は、有効化されたことに応じて第7のメモリアドレス117(たとえば、第6のメモリアドレス116の連続するメモリアドレス)に有効データ値"G"を記憶してもよい。たとえば、書込み回路144は、スキャッタ命令106を実行して、第7のメモリアドレス117に有効データ値"G"を記憶してもよい。
【0026】
第7のメモリアドレス117に有効データ値"G"が記憶された後、データベクトル解析回路142は、第3のデータベクトル136が有効データを有する別の位置を含むかどうかを判定してもよい。たとえば、データベクトル解析回路142は、第3のデータベクトル136の「位置4」に有効データ値"H"が位置する(たとえば、次の順序位置が有効データを有する)と判定してもよい。第3のデータベクトル136の「位置4」に有効データ値"H"が位置すると判定されたことに応じて、メモリストレージ回路140が書込み回路144を有効化してもよい。書込み回路144は、有効化されたことに応じて第8のメモリアドレス118(たとえば、第7のメモリアドレス117の連続するメモリアドレス)に有効データ値"H"を記憶してもよい。たとえば、書込み回路144は、スキャッタ命令106を実行して、第8のメモリアドレス118に有効データ値"H"を記憶してもよい。
【0027】
第8のメモリアドレス118に有効データ値"H"が記憶された後、データベクトル解析回路142は、第3のデータベクトル136が有効データを有する別の位置を含むかどうかを判定してもよい。たとえば、データベクトル解析回路142は、第3のデータベクトル136の「位置5」に有効データ値"I"が位置する(たとえば、次の順序位置が有効データを有する)と判定してもよい。第3のデータベクトル136の「位置5」に有効データ値"I"が位置すると判定されたことに応じて、メモリストレージ回路140が書込み回路144を有効化してもよい。書込み回路144は、有効化されたことに応じて第9のメモリアドレス119(たとえば、第8のメモリアドレス118の連続するメモリアドレス)に有効データ値"I"を記憶してもよい。たとえば、書込み回路144は、スキャッタ命令106を実行して、第9のメモリアドレス119に有効データ値"I"を記憶してもよい。
【0028】
第9のメモリアドレス119に有効データ値"J"が記憶された後、データベクトル解析回路142は、第3のデータベクトル136が有効データを有する別の位置を含むかどうかを判定してもよい。たとえば、データベクトル解析回路142は、第3のデータベクトル136の「位置7」に有効データ値"J"が位置する(たとえば、次の順序位置が有効データを有する)と判定してもよい。第3のデータベクトル136の「位置7」に有効データ値"J"が位置すると判定されたことに応じて、メモリストレージ回路140が書込み回路144を有効化してもよい。書込み回路144は、有効化されたことに応じて第10のメモリアドレス120(たとえば、第9のメモリアドレス119の連続するメモリアドレス)に有効データ値"J"を記憶してもよい。たとえば、書込み回路144は、スキャッタ命令106を実行して、第10のメモリアドレス120に有効データ値"J"を記憶してもよい。したがって、第3のデータベクトル136の無効データ値がバイパスされてもよく、第3のデータベクトル136の有効データ値がメモリ102内の連続するメモリアドレスに記憶されてもよい。
【0029】
同様の動作を実行して、メモリ102の圧縮メモリデータベクトル110に追加有効データ値を記憶してもよい。
図3を参照すると、上述の記憶動作が完了した後の圧縮メモリデータベクトル110が示される。データベクトル132、134、136の各有効データ値が圧縮メモリデータベクトル110の連続するメモリアドレスに記憶されてもよい。したがって、疎なデータベクトル132、134、136から無効データを分離して、各メモリアドレスに有効データを有する圧縮メモリデータベクトル110を生成してもよい。後述のように、プロセッサ150は、メモリ102から圧縮メモリデータベクトル110をフェッチして、有効データと無効データとを処理するのではなく有効データを処理してもよい。有効データと無効データとを処理すると、プロセッサ104の使用が非効率的になることがある。
【0030】
再び
図1を参照するとわかるように、オフセット判定回路146は、圧縮メモリデータベクトル110に対するデータベクトル132、134、136ごとのオフセットを判定する(たとえば、カウントする)ように構成されてもよい。たとえば、オフセット判定回路146は、各データベクトル132、134、136について書込みイネーブルのカウント(たとえば、並列プレフィックス有効カウント)を判定してもよい。データベクトル132、134、136ごとのオフセットは、並列プレフィックス有効カウントに基づいてもよい。特定のデータベクトルに関する「オフセット」は、その特定のデータベクトルに関連する有効データが記憶される圧縮メモリデータベクトル110の第1の順次メモリアドレスである。オフセット判定回路146は、第1のデータベクトル132の第1のオフセット162、第2のデータベクトル134の第2のオフセット164、第3のデータベクトル136の第3のオフセット166を含む、データベクトル132〜136に対応する複数のオフセット160を生成してもよい。たとえば、
図4を参照しながらさらに説明するように、第1のオフセット162は、第1のデータベクトル132の有効データが圧縮メモリデータベクトル110の第1のメモリアドレス111から始まることを示すための値"1"を有してもよく、第2のオフセット164は、第2のデータベクトル134の有効データが第4のメモリアドレス114から始まることを示すための値"4"を有してもよく、第3のオフセット166は、第3のデータベクトル136の有効データが圧縮メモリデータベクトル110の第7のメモリアドレス117から始まることを示すための値"7"を有してもよい。一実装形態によれば、プロセッサ104は、並列プレフィックス有効カウント命令108を実行してオフセットを判定してもよい。
【0031】
例示のために、データベクトル132、134、136ごとのオフセットを特定するためのチャート400が
図4に示される。チャート400によれば、メモリアドレス"0"は第1のデータベクトル132のベースアドレスとして使用されてもよい。第1のデータベクトル132の並列プレフィックスカウントは、圧縮メモリデータベクトル110に有効データ値「A」を記憶することに関連するイネーブル(たとえば、書込みイネーブル)に応じて(0から1に)増加してもよい。並列プレフィックスカウントが増加するたびに、メモリアドレスも大きくなる。したがって、チャート400内の「位置1」列において、メモリアドレスはメモリアドレス"0"からメモリアドレス"1"(たとえば、第1のメモリアドレス111)へと大きくなる。したがって、圧縮メモリデータベクトル110に対する第1のデータベクトル132のオフセット162は、第1のメモリアドレス111であり、第1のメモリアドレス111を示すためのオフセット値"1"を有するように記憶されてもよい。他の実装形態では、オフセット162は、ゼロベースのインデックス付け実装形態におけるオフセット値"0"のように、第1のメモリアドレス111を示す別のオフセット値を有するように記憶されてもよい。
【0032】
並列プレフィックスカウントは、圧縮メモリデータベクトル110の第2のメモリアドレス112に有効データ値"B"を記憶することに関連するイネーブルに応じて(1から2に)増加してもよい。並列プレフィックスカウントはまた、圧縮メモリデータベクトル110の第3のメモリアドレス113に有効データ値"C"を記憶することに関連するイネーブルに応じて(2から3に)増加してもよい。上記で説明したように、直前に記憶された有効データ値のアドレスが新しいデータベクトルのベースとして使用されてもよい。メモリアドレス"3"(たとえば、第3のメモリアドレス113)は直前に記憶されたデータ値(たとえば、有効データ値"C")のアドレスであるので、第3のメモリアドレス113は、第2のデータベクトル134のベースとして使用されてもよい。第2のデータベクトル134の並列プレフィックスカウントが(0から1に)増加したときに、対応するメモリアドレスは、第2のデータベクトル134のオフセット164であってもよい。したがって、圧縮メモリデータベクトル110に対する第2のデータベクトル134のオフセット164は、第4のメモリアドレス114であり、オフセット値"4"(またはゼロベースのインデックス付け実装形態では"3")を有するように表されてもよい。同様に、チャート400によれば、圧縮メモリデータベクトル110に対する第3のデータベクトル136のオフセット166は、第7のメモリアドレス117であり、オフセット値"7"(またはゼロベースのインデックス付け実装形態では"6")を有するように表されてもよい。
【0033】
再び
図1を参照すると、(オフセット判定回路146によって判定される)オフセットは、メモリ102内のデータをデータベクトル132、134、136にマップするために使用されてもよい。たとえば、プロセッサ104は、第1のデータベクトル132のオフセット162が第1のメモリアドレス111であり、第2のデータベクトル134のオフセット164が第4のメモリアドレス114である場合、第1、第2、および第3のメモリアドレス111、112、113が第1のデータベクトル132に関連するデータを含むと判定してもよい。同様に、プロセッサ104は、第2のデータベクトル134のオフセット164が第4のメモリアドレス114であり、第3のデータベクトル136のオフセット166が第7のメモリアドレス117である場合、第4、第5、および第6のメモリアドレス114、115、116が第2のデータベクトル134に関連するデータを含むと判定してもよい。
【0034】
データ値が圧縮メモリデータベクトル110に記憶された後、フェッチ回路150は、圧縮メモリデータベクトル110に記憶されたデータをフェッチするように構成されてもよい。フェッチ回路150は、圧縮メモリデータベクトル110をSIMD処理パイプライン152に供給してもよい。圧縮メモリデータベクトル110の各メモリアドレスは有効データ値を含むので、SIMD処理パイプライン152内の処理構成要素およびハードウェアは効率的に使用されることがある。たとえば、SIMD処理パイプライン152内の処理構成要素は、無効データ値に使用されるのではなく有効データ値に対して使用されてもよい。
【0035】
図1〜
図4に関して説明した技法は、SIMD処理パイプライン152によって処理される無効データ値の量を減らすことによって処理効率を向上させることがある。有効データ値をメモリ102内の連続するアドレスに記憶することによって、フェッチ回路150はSIMD処理パイプライン152に(有効データ値と無効データ値とではなく)有効データ値を供給してもよい。さらに、記憶プロセスの間各データベクトル132、134、136について並列プレフィックス有効カウントを追跡することによって、比較的単純なアドレス指定方式が実現されてもよい。たとえば、プロセッサ104は、並列プレフィックス有効カウントに基づいて、どのデータ値および/またはメモリアドレスが各データベクトル132、134、136に対応するかを特定してもよい。
【0036】
図1〜
図4を参照しながら説明したように、並列プレフィックス有効カウント命令108は、複数のデータベクトル132〜136からの疎なデータを圧縮メモリデータベクトル110内の密なデータ配列として圧縮する間に使用されてもよい。代替的に、または追加として、並列プレフィックス有効カウント命令108は、圧縮メモリデータベクトル110からのデータをデータベクトル-132〜136内の疎なデータ配列として展開する間に使用されてもよい。たとえば、データを圧縮メモリデータベクトル110として圧縮した後、圧縮メモリデータベクトル110内のデータが、圧縮メモリデータベクトル110内に修正データを生成するようにSIMD処理パイプライン152によって処理されてもよい。この修正データをデータベクトル132〜136の対応する位置に書き戻して元の有効データに修正データを上書きしてもよい。展開動作では、
図4において説明したように、前のベクトルの最後のカウントにおける累積値を含む並列プレフィックス有効カウント命令108を使用して、データベクトル132〜136内の有効位置ごとの連続するオフセットまたはアドレスが算出されてもよい。並列プレフィックス有効カウント命令108の結果に基づいて、データを圧縮メモリデータベクトル110における各アドレスまたはオフセットからデータベクトル132〜136の有効データ位置にロードするためにロード/ギャザーが実行されてもよい。したがって、並列プレフィックス有効カウント命令108は、データ圧縮動作時に使用されるとともに、データ展開動作時にも使用されてもよい。
【0037】
図5を参照すると、連続するメモリアドレスにデータを記憶するための方法500のフローチャートが示される。方法500は
図1のシステム100によって実施されてもよい。
【0038】
方法500は、502において、並列プレフィックス有効カウント命令を実行することによって、有効データと無効データとを含むデータ要素のシーケンスにおける第1の有効位置に関連する第1のオフセットを判定することを含む。たとえば、
図1を参照すると、SIMDプロセッサ104は、並列プレフィックス有効カウント命令108を実行して第1のデータベクトル132の第1のオフセット162を判定してもよい。
【0039】
方法500はまた、504において、並列プレフィックス有効カウント命令を実行することによって、データ要素のシーケンスにおける第2の有効位置に関連する第2のオフセットを判定することを含む。第2のオフセットは、第1のオフセットと、有効データに関連するデータ要素のシーケンスにおける位置の数とに基づいてもよい。たとえば、
図1を参照すると、SIMDプロセッサ104は、並列プレフィックス有効カウント命令108を実行して第2のデータベクトル134の第2のオフセット164を判定してもよい。一実装形態によれば、第2のオフセットは、有効データに関連する第1のデータベクトル132における位置の数を第1のオフセット162に加算することによって算出されてもよい。
【0040】
方法500はまた、506において、第1のデータベクトルからの第1の有効データをメモリの第1のメモリアドレスに記憶することを含む。第1のメモリアドレスは、第1のオフセットに基づいてもよい。たとえば、
図1を参照すると、第1のデータベクトル132の「位置1」に有効データ値「A」が位置すると判定されたことに応じて、メモリストレージ回路140が書込み回路144を有効化してもよい。書込み回路144は、有効化されたことに応じて第1のメモリアドレス111に有効データ値「A」を記憶してもよい。たとえば、書込み回路144は、スキャッタ命令106を実行して、第1のメモリアドレス111に有効データ値「A」を記憶してもよい。
【0041】
方法500はまた、508において、第2のデータベクトルからの第2の有効データをメモリの特定のメモリアドレスに記憶することを含む。特定のメモリアドレスは、第2のオフセットに基づいてもよい。たとえば、
図1を参照すると、メモリストレージ回路140は、書込み回路144を有効化してもよい。書込み回路144は、有効化されたことに応じて第4のメモリアドレス114(たとえば、方法500による「第2のメモリアドレス」)に有効データ値"D"を記憶してもよい。たとえば、書込み回路144は、スキャッタ命令106を実行して、第4のメモリアドレス114に有効データ値"D"を記憶してもよい。
【0042】
一実装形態によれば、方法500は、メモリの第1のメモリアドレスに連続する追加順次メモリアドレスに、第1のデータベクトルからの追加有効データを記憶することを含んでもよい。(第2の有効データが記憶された)特定のメモリアドレスは、追加順次メモリアドレスの最後のメモリアドレスに連続してもよい。方法500の一実装形態によれば、第1の有効データと第2の有効データは並列に記憶されてもよい。たとえば、第2の有効データを第1の有効データに並列に記憶することは、第1の期間の間(たとえば、SIMDプロセッサ104の単一のクロックサイクルの間)第1の有効データを記憶し、並行して第1の期間の間第2の有効データを記憶することを含む。
【0043】
本方法500の一実装形態によれば、第1のメモリアドレスおよび特定のメモリアドレスは、圧縮メモリデータベクトル(たとえば、圧縮メモリデータベクトル110)のメモリアドレスであってもよい。方法500はまた、圧縮メモリデータベクトルに記憶されたデータをフェッチし、圧縮メモリデータベクトルに記憶されたデータをフェッチしたことに応じて圧縮メモリデータベクトルに記憶されたデータを処理することを含んでもよい。
【0044】
方法500の一実装形態によれば、圧縮メモリデータベクトルに記憶されたデータを処理した後、「展開」動作が実行されてもよい。連続するメモリにおける処理済みのデータの位置をデータの疎なシーケンスにおける有効データの位置にマップするオフセットを判定するために並列プレフィックス有効カウント命令が実行されてもよい。処理済みのデータは次いで、連続するメモリからデータの疎なシーケンスにおける有効データの位置にロードされてもよい。したがって、連続するメモリにおける処理済みのデータの圧縮された配列が、データベクトル132〜136における有効データの位置に基づいて処理済みのデータの疎な配列に展開されてもよい。
【0045】
図5の方法500は、SIMD処理パイプライン152によって処理される無効データ値の量を減らすことによって処理効率を向上させることがある。有効データ値をメモリ102内の連続するアドレスに記憶することによって、フェッチ回路150はSIMD処理パイプライン152に(有効データ値と無効データ値とではなく)有効データ値を供給してもよい。さらに、記憶プロセスの間データベクトル132、134、136ごとに並列プレフィックス有効カウントを追跡することによって、比較的単純なアドレス指定方式が実現されてもよい。たとえば、プロセッサ104は、並列プレフィックス有効カウントに基づいて、どのデータ値および/またはメモリアドレスが各データベクトル132、134、136に対応するかを特定してもよい。
【0046】
図6を参照すると、電子デバイス600のブロック図が示される。電子デバイス600は、説明的な例として、モバイルデバイス(たとえば、携帯電話)に対応してもよい。他の実装形態では、電子デバイス600は、コンピュータ(たとえば、サーバ、ラップトップコンピュータ、タブレットコンピュータ、またはデスクトップコンピュータ)、ウェアラブル電子デバイス(たとえば、パーソナルカメラ、ヘッドマウントディスプレイ、または時計)、車両制御システムもしくはコンソール、家電製品、セットトップボックス、エンターテインメントユニット、ナビゲーションデバイス、携帯情報端末(PDA)、テレビジョン、モニタ、チューナ、ラジオ(たとえば、衛星ラジオ)、音楽プレーヤ(たとえば、デジタル音楽プレーヤまたはポータブル音楽プレーヤ)、ビデオプレーヤ(たとえば、デジタルビデオディスク(DVD)プレーヤまたはポータブルデジタルビデオプレーヤなどのデジタルビデオプレーヤ)、ロボット、ヘルスケアデバイス、別の電子デバイス、またはそれらの組合せに対応する場合がある。
【0047】
電子デバイス600は、デジタル信号プロセッサ(DSP)、中央処理ユニット(CPU)、グラフィックス処理ユニット(GPU)、別の処理デバイス、またはそれらの組合せなどのプロセッサ104を含む。プロセッサ104は、1つまたは複数のレジスタ130と、メモリストレージ回路140と、フェッチ回路150と、SIMD処理パイプライン152とを含む。1つまたは複数のレジスタ110は、第1のデータベクトル132、第2のデータベクトル134、および第3のデータベクトル136を記憶する。メモリストレージ回路140は、データベクトル解析回路142と、書込み回路144と、オフセット判定回路146とを含む。プロセッサ104は、
図1に関して説明したのと実質的に同様に動作してもよい。
【0048】
電子デバイス600は、メモリ102をさらに含んでもよい。メモリ102は、プロセッサ104に結合されてもよくあるいはプロセッサ104内に組み込まれてもよい。メモリ102は、ランダムアクセスメモリ(RAM)、磁気抵抗ランダムアクセスメモリ(MRAM)、フラッシュメモリ、読取り専用メモリ(ROM)、プログラマブル読取り専用メモリ(PROM)、消去可能プログラマブル読取り専用メモリ(EPROM)、電気的消去可能プログラマブル読取り専用メモリ(EEPROM)、1つまたは複数のレジスタ、ハードディスク、リムーバブルディスク、コンパクトディスク読取り専用メモリ(CD-ROM)、別のストレージデバイス、またはそれらの組合せを含んでもよい。メモリ102は、スキャッタ命令106、並列プレフィックス有効カウント命令108、およびプロセッサ610によって実行可能な1つまたは複数の他の命令668を記憶してもよい。たとえば、プロセッサ104は、スキャッタ命令106を実行して圧縮メモリデータベクトル110に(データベクトル132、134、136の)有効データ値を記憶してもよい。プロセッサ104はまた、並列プレフィックス有効カウント命令108を実行して圧縮メモリデータベクトル110に対する各データベクトル132、134、136のオフセットを判定してもよい。プロセッサ104はまた、1つまたは複数の他の命令668を実行して
図5の方法500を実行してもよい。
【0049】
図6はまた、プロセッサ104およびディスプレイ628に結合されたディスプレイコントローラ626を示す。符号器/復号器(コーデック)634をプロセッサ104に結合することも可能である。スピーカ636およびマイクロフォン638をコーデック634に結合することができる。
図6はまた、ワイヤレスコントローラおよび/またはトランシーバのようなワイヤレスインターフェース640をプロセッサ104とアンテナ642とに結合できることを示す。
【0050】
特定の例では、プロセッサ104、ディスプレイコントローラ626、メモリ102、コーデック634、およびワイヤレスインターフェース640が、システムインパッケージまたはシステムオンチップデバイス622内に含まれる。さらに、入力デバイス630および電源644が、システムオンチップデバイス622に結合されてもよい。その上、特定の例では、
図6に示されるように、ディスプレイ628、入力デバイス630、スピーカ636、マイクロフォン638、アンテナ642、および電源644が、システムオンチップデバイス622の外部にある。しかしながら、ディスプレイ628、入力デバイス630、スピーカ636、マイクロフォン638、アンテナ642、および電源644は、インターフェースまたはコントローラなどのシステムオンチップデバイス622の構成要素に結合することができる。
【0051】
開示した例に関連して、コンピュータ可読媒体(たとえば、メモリ102)は、プロセッサ(たとえば、プロセッサ104)によって実行可能である命令を記憶して動作を実行する。動作には、メモリの第1のメモリアドレスに第1の有効データを記憶することが含まれる。第1の有効データは、有効データと無効データとを含む第1のデータベクトルの第1の特定の位置に位置してもよい。第1の特定の位置は、有効データに関連付けられてもよい。動作にはまた、第1のデータベクトルが有効データに関連する別の位置を含むかどうかを判定することが含まれる。第1のデータベクトルが有効データに関連する別の位置を含む場合、動作には、他の位置に位置する有効データを第1のメモリアドレスに連続する第2のメモリアドレスに記憶することが含まれる。動作には、第1のデータベクトルが有効データに関連する別の位置を含まない場合に第2のメモリアドレスに第2の有効データを記憶することが含まれる。第2のデータは、有効データと無効データとを含む第2のデータベクトルの第2の特定の位置に位置してもよい。第2の特定の位置は、有効データに関連付けられてもよい。
【0052】
説明した技法に関連して、装置が、並列プレフィックス有効カウント命令を実行することを介して、データ要素のシーケンスにおける第1の有効位置に関連する第1のオフセットを判定するための手段を含む。データ要素のシーケンスは、有効データと無効データとを含んでもよい。たとえば、第1のオフセットを判定するための手段は、
図1および
図6のメモリストレージ回路140と、
図1および
図6のデータベクトル解析回路142と、
図1および
図6のオフセット判定回路146と、
図1および
図6のプロセッサ104と、1つもしくは複数の他のデバイス、回路、モジュール、またはそれらの任意の組合せとを含んでもよい。
【0053】
本装置は、並列プレフィックス有効カウント命令を実行することを介して、データ要素のシーケンスにおける第2の有効位置に関連する第2のオフセットを判定するための手段を含む。第2のオフセットは、第1のオフセットと、有効データに関連するデータ要素のシーケンスにおける位置の数とに基づいてもよい。たとえば、第2のオフセットを判定するための手段は、
図1および
図6のメモリストレージ回路140と、
図1および
図6のデータベクトル解析回路142と、
図1および
図6のオフセット判定回路146と、
図1および
図6のプロセッサ104と、1つもしくは複数の他のデバイス、回路、モジュール、またはそれらの任意の組合せとを含んでもよい。
【0054】
上記で開示したデバイスおよび機能は、コンピュータファイル(たとえば、RTL、GDSII、GERBERなど)を使用して設計され表されてもよい。コンピュータファイルはコンピュータ可読媒体に記憶されてもよい。そのようなファイルの一部または全部が、そのようなファイルに基づいてデバイスを製造する製造者に提供されてもよい。得られる生成物は、次いで、ダイに切断され、集積回路(または「チップ」)にパッケージされるウエハを含む。次いで、チップは、
図6の電子デバイス600などの電子デバイスにおいて使用される。
【0055】
当業者には、本明細書で開示する実装形態に関して説明する様々な例示的な論理ブロック、構成、モジュール、回路、およびアルゴリズムステップが電子ハードウェア、コンピュータソフトウェア、または両方の組合せとして実装されてもよいことがさらに諒解されよう。上記では、様々な例示的な構成要素、ブロック、構成、モジュール、回路、およびステップについて、それらの機能の観点から概括的に説明した。そのような機能がハードウェアとして実装されるか、またはソフトウェアとして実装されるかは、特定の適用例およびシステム全体に課される設計制約に依存する。当業者は説明された機能を具体的な適用例ごとに様々な方法で実装してもよいが、そのような実装の決定は、本開示の範囲からの逸脱を引き起こすものと解釈されるべきでない。
【0056】
本明細書で開示した実装形態に関して説明した方法またはアルゴリズムのステップは、直接ハードウェアにおいて、プロセッサによって実行されるソフトウェアモジュールにおいて、またはその2つの組合せにおいて具現化されてもよい。ソフトウェアモジュールは、ランダムアクセスメモリ(RAM)、フラッシュメモリ、読取り専用メモリ(ROM)、プログラマブル読取り専用メモリ(PROM)、消去可能プログラマブル読取り専用メモリ(EPROM)、電気的消去可能プログラマブル読取り専用メモリ(EEPROM)、レジスタ、ハードディスク、リムーバブルディスク、コンパクトディスク読取り専用メモリ(CD-ROM)、または当技術分野で知られている任意の他の形態の記憶媒体の中に存在してもよい。例示的な非一時的(たとえば、有形)記憶媒体は、プロセッサが記憶媒体から情報を読み取り、記憶媒体に情報を書き込むことができるように、プロセッサに結合される。代替として、記憶媒体はプロセッサに一体化される場合がある。プロセッサおよび記憶媒体は特定用途向け集積回路(ASIC)内に存在してもよい。ASICは、コンピューティングデバイスまたはユーザ端末に存在してもよい。代替として、プロセッサおよび記憶媒体は、コンピューティングデバイスまたはユーザ端末の中に個別の構成要素として存在してもよい。
【0057】
開示された実装形態のこれまでの説明は、開示した実装形態を当業者が作成または使用することを可能にするために提供される。これらの実装形態に対する様々な修正は当業者には容易に明らかであり、本明細書で定義された原理は、本開示の範囲から逸脱することなく他の実装形態に適用されてもよい。したがって、本開示は、本明細書に示された実装形態に限定されるものではなく、以下の特許請求の範囲によって定義される原理および新規の特徴と一致する、考えられる最も広い範囲を与えられるべきである。