以下の説明は、プロセッサ、コンピュータシステム、または他の処理装置内で、またはそれらと関連してSIMDベクトルポピュレーションカウント機能性を提供する複数の命令および処理ロジックを開示する。いくつかの実施形態は、複数のパックドデータフィールドを備えるソースベクトルの一部を格納するレジスタまたは他の記憶媒体と、ソースベクトルの一部に対応する、ソースベクトルの対応する一部における、対応する1または複数の予め定められた二進値の複数の出現の1または複数のカウントを格納する宛て先レジスタの一部とを有する複数のプロセッサを含む。ソースベクトルの一部の複数のパックドデータフィールドのそれぞれは、少なくとも4ビットのデータを格納する。プロセッサデコードステージは、ベクトルポピュレーションカウント演算とパックドデータフィールドサイズとを指定する命令をデコードする。1または複数のプロセッサ実行ユニットは、デコードされた命令に応答し、ソースベクトルの一部における複数のパックドデータフィールドのそれぞれの複数のビットを読み取る。ソースベクトルの当該一部の複数のデータフィールドに関して、1または複数の予め定められた二進値のそれぞれに等しい複数の二進値の複数の出現のカウントが生成され、カウントされた複数の出現は、ソースベクトルの一部に対応する宛て先レジスタの一部において、対応する1または複数の予め定められた二進値のそれぞれ毎に1または複数のカウントとして格納される。
いくつかの実施形態は、少なくとも4ビットのデータを、ベクトルレジスタまたはメモリベクトルのn個のデータフィールドの一部の各データフィールドに格納する。プロセッサにおいて、ベクトルレジスタまたはメモリベクトルにおけるn個のデータフィールドの当該一部に関して、第1の1または複数の予め定められた二進値のそれぞれに等しい複数の二進値の複数の出現がカウントされ、カウントされた複数の出現が、ベクトルレジスタまたはメモリベクトルにおけるn個のデータフィールドの一部に対応する宛て先レジスタの一部において、第1の1または複数の予め定められた二進値に対応する第1の1または複数のカウントとして格納されるよう、ベクトルポピュレーションカウントのためのSIMD命令が実行される。
複数のSIMDポピュレーションカウント命令が、ゲノム配列決定および配列比較処理のために用いられ得ることが理解されよう。同様の複数の圧縮スキームが、他のデータベース、データマイニングアプリケーション、および検索アプリケーションも複数のSIMDポピュレーションカウント命令を用い得るようこれらのアプリケーションにおいてもより一般的に使用される。
ゲノム配列比較における一般的な演算は、塩基対の複数の列に一致させる、または部分的に一致させるために列内の複数のヌクレオチドの複数の出現をカウントすることである。パックドデータフォーマット(packedDnaなど)では、列内の異なるヌクレオチドの複数の出現をカウントするために、複数のシフトおよびマスク演算と併せた複数のルックアップテーブル、および/または複数の論理演算と併せたビット単位の複数のポピュレーションカウントの使用を他の場合においては伴い得る技術は、代わりに複数のSIMDポピュレーションカウント命令を用い得る。複数のSIMDポピュレーションカウント命令を用いることにより、列内の異なるヌクレオチドの複数の出現をカウントするために以前まで必要とされていた複数の演算の多くは取り除かれ得る。したがって、ゲノム配列決定および配列比較処理などの複数のアプリケーション、および、より一般的にデータマイニングなどの複数のデータベースアプリケーションおよび検索アプリケーションの性能は、実質的に改善され得る。
以下の説明において、処理ロジック、プロセッサタイプ、マイクロアーキテクチャ条件、イべント、実行可能メカニズム、および同様のものなどの数多くの具体的な詳細が、本願発明の複数の実施形態のより深い理解を提供するために明記される。しかし、本願発明がそのような複数の具体的な詳細なしで実施され得ることは当業者により理解されるであろう。加えて、本願発明の複数の実施形態を不必要に曖昧にすることを避けるべく、いくつかの周知の構造、回路、および同様のものは詳細には示されていない。
以下の複数の実施形態はプロセッサを参照しながら説明されるが、他の複数の実施形態は、他の複数のタイプの集積回路およびロジックデバイスに適用可能である。本願発明の複数の実施形態の同様の複数の技術および教示が、より高いパイプラインスループットおよび改善された性能から恩恵を得ることが出来る他の複数のタイプの回路または半導体デバイスに適用され得る。本願発明の複数の実施形態の複数の教示は、データ操作を実行する任意のプロセッサまたはマシンに適用可能である。しかし、本願発明は、512ビット、256ビット、128ビット、64ビット、32ビット、または16ビットデータ演算を実行するプロセッサまたはマシンに限定されず、データの操作または管理が実行される任意のプロセッサおよびマシンに適用され得る。加えて、以下の説明は、複数の例を提供し、添付の複数の図面は、例示を目的として様々な例を示す。しかし、これらの例は、本願発明の複数の実施形態の可能な全ての実装の網羅的なリストを提供するのではなく本願発明の複数の実施形態の複数の例を提供することを単に意図されているので、限定的に解釈されるべきではない。
以下の複数の例は、実行ユニットおよび論理回路の環境に関して命令の処理および分配を説明するが、本願発明の他の複数の実施形態は、マシンにより実行されたときに当該マシンに本願発明の少なくとも1つの実施形態に係る複数の機能を実行させる、マシン可読の有形の媒体上に格納されたデータおよび/または命令を用いて達成され得る。一実施形態において、本願発明の複数の実施形態に関連する複数の機能は、複数のマシン実行可能な命令で具現化される。それら命令は、それら命令によりプログラミングされた汎用または特定用途向けプロセッサに、本願発明の複数の段階を実行させるのに用いられ得る。本願発明の複数の実施形態は、本願発明の複数の実施形態に係る1または複数の演算を実行するようコンピュータ(または他の電子デバイス)をプログラミングするのに用いられ得る複数の命令を格納したマシンまたはコンピュータ可読媒体を含み得るコンピュータプログラムプロダクトまたはソフトウェアとして提供され得る。代替的に、本願発明の複数の実施形態の複数の段階は、それら段階を実行するための一定の機能ロジックを含む特定の複数のハードウェアコンポーネントにより、またはプログラミングされた複数のコンピュータコンポーネントと一定の機能の複数のハードウェアコンポーネントとの任意の組み合わせにより実行され得る。
本願発明の複数の実施形態を実行するロジックをプログラミングするのに用いられる複数の命令は、DRAM、キャッシュ、フラッシュメモリ、または他のストレージなどのシステムのメモリ内に格納され得る。さらに、それら命令は、ネットワークを介し、または他のコンピュータ可読媒体を用いて分配され得る。したがって、マシン可読媒体は、マシン(例えば、コンピュータ)が可読な形態で情報を格納または送信するための任意のメカニズム、フロッピー(登録商標)ディスク、光ディスク、コンパクトディスク、リードオンリーメモリ(CD−ROM)、光磁気ディスク、リードオンリーメモリ(ROM)、ランダムアクセスメモリ(RAM)、消去可能プログラマブルリードオンリーメモリ(EPROM)、電子的消去可能プログラマブルリードオンリーメモリ(EEPROM)、磁気または光カード、フラッシュメモリ、または、電気、光、音響、または他の形態の伝搬信号(例えば、搬送波、赤外線信号、デジタル信号等)を介したインターネット上での情報の送信に用いられる有形のマシン可読ストレージを含み得るが、これらに限定されない。したがって、コンピュータ可読媒体は、マシン(例えば、コンピュータ)により可読である形態で複数の電子命令または情報を格納または送信するのに適した任意のタイプの有形のマシン可読媒体を含む。
設計は、生成からシミュレーションへ、また製造へと様々なステージを経得る。設計を表すデータは、複数のやり方で設計を表し得る。まず、シミュレーションで有用なように、ハードウェアは、ハードウェア記述言語、または他の機能記述言語を用いて表され得る。加えて、ロジックおよび/またはトランジスタゲートを有する回路レベルモデルが、設計プロセスのいくつかのステージで生成され得る。さらに、殆どの設計は、何らかのステージにおいて、ハードウェアモデルにおける様々なデバイスの物理的な配置を表すあるレベルのデータに到達する。従来の半導体製造技術が用いられた場合、ハードウェアモデルを表すデータは、集積回路を製造するのに用いられる複数のマスクに関する、異なる複数のマスク層上での様々な特徴の存在または不在を指定するデータであり得る。設計の任意の表現において、データは、任意の形態のマシン可読媒体に格納され得る。ディスクなどのメモリまたは磁気若しくは光ストレージが、情報を送信するよう変調させられた、または他の場合においては生成された光波または電波を介して送信されるそのような情報を格納するマシン可読媒体であり得る。コードまたは設計を示す、または運ぶ電気搬送波が送信されるとき、電気信号のコピー、バッファ、または再送信が実行される限り新たなコピーが作成される。したがって、通信プロバイダまたはネットワークプロバイダは、有形のマシン可読媒体上に、本願発明の複数の実施形態の複数の技術を具現化した搬送波へとエンコードされた情報などの物品を少なくとも一時的に格納し得る。
現代のプロセッサにおいて、複数の異なる実行ユニットが、様々なコードおよび命令を処理し実行するのに用いられている。全ての命令が等しく作成されているわけではなく、いくつかのものは完了するのがより速く、他方、他のものは、完了するのに複数のクロックサイクルを要し得る。命令のスループットがより速ければ速いほど、プロセッサの全体的な性能はより良好である。したがって、出来るだけ多くの命令を出来るだけ速く実行するのが有利であろう。しかし、より高い複雑性を有し、実行時間およびプロセッサリソースの点でより多くを必要とする特定の複数の命令がある。例えば、浮動小数点命令、ロード/格納演算、データ移動等がある。
より多くのコンピュータシステムがインターネット、テキスト、およびマルチメディアアプリケーションにおいて用いられるにつれ、追加のプロセッサのサポートが時の経過と共にもたらされてきた。一実施形態において、命令セットは、データタイプ、命令、レジスタアーキテクチャ、アドレッシングモード、メモリアーキテクチャ、割り込みおよび例外処理、外部入力および出力(I/O)を含む1または複数のコンピュータアーキテクチャに関連付けられ得る。
一実施形態において、命令セットアーキテクチャ(ISA)は、1または複数の命令セットを実装するのに用いられるプロセッサロジックおよび複数の回路を含む1または複数のマイクロアーキテクチャにより実装され得る。したがって、異なる複数のマイクロアーキテクチャを有する複数のプロセッサが、共通の命令セットの少なくとも一部を共有し得る。例えば、Intel(登録商標)Pentium(登録商標)4プロセッサ、Intel(登録商標)Core(商標)プロセッサ、およびカリフォルニア州サニーベール市のAdvanced Micro Devices,Inc.が製造するプロセッサは、x86命令セットのほぼ同一のバージョンを実装する(より新しい複数のバージョンによっていくつかの拡張が追加された)が、異なる内部設計を有する。同様に、ARM Holdings Ltd.、MIPSなどの他の複数のプロセッサ開発会社、またはそれらのライセンシー若しくはアダプタにより設計された複数のプロセッサは、共通命令セットの少なくとも一部を共有し得るが、異なるプロセッサ設計を含み得る。例えば、ISAの同じレジスタアーキテクチャが、専用の物理的レジスタ、レジスタリネーミングメカニズムを用いる(例えば、Register Alias Table(RAT)、リオーダーバッファ(ROB)、およびリタイヤレジスタファイルの使用)1または複数の動的に割り当てられた物理レジスタを含む、新たな、または周知の技術を用いる異なる複数のマイクロアーキテクチャで異なる複数のやり方で実装され得る。一実施形態において、レジスタは、ソフトウェアプログラマによりアドレッシング可能であってもなくてもよい1または複数のレジスタ、レジスタアーキテクチャ、レジスタファイル、または他のレジスタセットを含み得る。
一実施形態において、命令は、1または複数の命令フォーマットを含み得る。一実施形態において、命令フォーマットは、他にもあるうち、実行されることになる演算、およびその演算が実行される対象の(複数の)オペランドを指定する様々なフィールド(ビット数、ビット位置等)を示し得る。いくつかの命令フォーマットは、命令テンプレート(またはサブフォーマット)により定義されるようにさらに分割され得る。例えば、任意の命令フォーマットの複数の命令テンプレートは、命令フォーマットの複数のフィールドの異なる複数のサブセットを有するよう定義され得、および/または、異なるように翻訳される任意のフィールドを有するよう定義され得る。一実施形態において、命令は、命令フォーマットを用いて(および定義された場合には、その命令フォーマットの複数の命令テンプレートの任意の1つで)表現され、演算、および、その演算を行う対象のオペランドを指定する、または示す。
科学の、財務の、自動ベクトル化された汎用の、RMS(認識、マイニング、および合成)の、並びにビジュアルおよびマルチメディアのアプリケーション(例えば、2D/3Dグラフィクス、画像処理、ビデオ圧縮/解凍、音声認識アルゴリズムおよびオーディオ操作)は、多数のデータ項目に対して同じ演算を実行することを必要とし得る。一実施形態において、単一命令多重データ処理(SIMD)は、プロセッサに、複数のデータ要素に対して演算を実行させるタイプの命令を指す。レジスタにおける複数のビットを、別個の値をそれぞれが表す一定サイズの、または可変サイズの複数のデータ要素に論理的に分割し得る複数のプロセッサにおいて、SIMD技術が用いられ得る。例えば、一実施形態において、64ビットレジスタにおける複数のビットは、別個の16ビット値をそれぞれが表す4つの別個の16ビットのデータ要素を含むソースオペランドとして編成され得る。このタイプのデータは、「パックド」データタイプまたは「ベクトル」データタイプと呼ばれ得、このデータタイプの複数のオペランドは、パックドデータオペランドまたはベクトルオペランドと呼ばれる。一実施形態において、パックドデータ項目またはベクトルは、単一のレジスタ内に格納された一連のパックドデータ要素であり得、パックドデータオペランドまたはベクトルオペランドは、SIMD命令(または、「パックドデータ命令」または「ベクトル命令」)のソースまたは宛て先オペランドであり得る。一実施形態において、SIMD命令は、2つのソースベクトルオペランドに対して実行される単一のベクトル演算を指定して、同じである、または異なるサイズの、同じである、または異なる数のデータ要素を有する、およびデータ要素の順序が同じである、または異なる宛て先ベクトルオペランド(結果ベクトルオペランドとも呼ばれる)を生成する。
x86、MMX(商標)、Streaming SIMD拡張(SSE)、SSE2、SSE3、SSE4.1、およびSSE4.2命令を含む命令セットを有するIntel(登録商標)Core(商標)プロセッサ、ベクトル浮動小数点(VFP)および/またはNEON命令を含む命令セットを有するARM Cortex(登録商標)プロセッサファミリなどのARMプロセッサ、並びに、Chinese Academy of SciencesのInstitute of Computing Technology(ICT)により開発されるLoongsonプロセッサファミリなどのMIPSプロセッサにより用いられるものなどのSIMD技術は、アプリケーション性能の著しい改善を可能とした(Core(商標)およびMMX(商標)は、カリフォルニア州サンタクララ市のIntel Corporationの登録商標または商標である。)
一実施形態において、宛て先およびソースレジスタ/データは、対応するデータまたは演算のソースおよび宛て先を表す総称である。いくつかの実施形態において、それらは、レジスタ、メモリ、または描写されているもの以外の名前または機能を有する他の複数の記憶領域により実装され得る。例えば、一実施形態において、「DEST1」は、一時的な記憶レジスタまたは他の記憶領域であり得、他方、「SRC1」および「SRC2」は、第1および第2ソース記憶レジスタまたは他の記憶領域であり得る、などである。他の複数の実施形態において、SRCおよびDEST記憶領域の2またはそれより多くは、同じ記憶領域(例えば、SIMDレジスタ)内の異なるデータ記憶素子に対応し得る。一実施形態において、複数のソースレジスタの1つは、例えば、第1および第2ソースデータに対して実行された演算の結果を宛て先レジスタとして機能する2つのソースレジスタの1つに書き戻すことにより宛て先レジスタとしても動作し得る。
図1Aは、本願発明の一実施形態に係る命令を実行する複数の実行ユニットを含むプロセッサと共に形成された例示的なコンピュータシステムのブロック図である。システム100は、本明細書に説明されている実施形態など本願発明に係る、プロセスデータのための複数のアルゴリズムを実行するロジックを含む複数の実行ユニットを採用するプロセッサ102などのコンポーネントを含む。システム100は、カリフォルニア州サンタクララ市のIntel Corporationから入手可能であるPentium(登録商標)III、Pentium(登録商標)4、Xeon(商標)、Itanium(登録商標)、XScale(商標)、および/またはStrongARM(商標)マイクロプロセッサに基づくプロセッシングシステムを表すが、(他の複数のマイクロプロセッサを有する複数のPC、エンジニアリングワークステーション、セットトップボックス、および同様のものを含む)他の複数のシステムも用いられ得る。一実施形態において、サンプルのシステム100は、ワシントン州レドモンド市のMicrosoft Corporationから入手可能である、あるバージョンのWINDOWS(登録商標)オペレーティングシステムを実行し得るが、他の複数のオペレーティングシステム(例えば、UNIX(登録商標)およびLinux(登録商標))、組み込みソフトウェア、および/またはグラフィカルユーザインタフェースも用いられ得る。したがって、本願発明の複数の実施形態は、ハードウェア回路およびソフトウェアの任意の特定の組み合わせに限定されない。
複数の実施形態は、コンピュータシステムに限定されない。本願発明の代替的な複数の実施形態は、ハンドヘルドデバイスなどの他の複数のデバイス、および複数の組み込みアプリケーションにおいて用いられ得る。複数のハンドヘルドデバイスのいくつかの例は、携帯電話、インターネットプロトコルデバイス、デジタルカメラ、携帯情報端末(PDA)、およびハンドヘルドPCを含む。組み込みアプリケーションは、マイクロコントローラ、デジタル信号プロセッサ(DSP)、システムオンチップ、ネットワークコンピュータ(NetPC)、セットトップボックス、ネットワークハブ、ワイドエリアネットワーク(WAN)スイッチ、または、少なくとも1つの実施形態に係る1または複数の命令を実行し得る任意の他のシステムを含み得る。
図1Aは、本願発明の一実施形態に係る少なくとも1つの命令を実行するアルゴリズムを実行する1または複数の実行ユニット108を含むプロセッサ102と共に形成されたコンピュータシステム100のブロック図である。一実施形態は、シングルプロセッサデスクトップまたはサーバシステムの環境に関して説明されるかもしれないが、代替的な複数の実施形態は、マルチプロセッサシステムに含まれ得る。システム100は、「ハブ」システムアーキテクチャの例である。コンピュータシステム100は、複数のデータ信号を処理するプロセッサ102を含む。プロセッサ102は、例えば、複合命令セットコンピュータ(CISC)マイクロプロセッサ、縮小命令セットコンピューティング(RISC)マイクロプロセッサ、超長命令語(VLIW)マイクロプロセッサ、複数の命令セットの組み合わせを実装するプロセッサ、またはデジタル信号プロセッサなどの任意の他のプロセッサデバイスであり得る。プロセッサ102は、プロセッサ102と、システム100内の他の複数のコンポーネントとの間で複数のデータ信号を送信し得るプロセッサバス110に結合されている。システム100の複数の要素は、それらの、当業者には周知である従来の複数の機能を実行する。
一実施形態において、プロセッサ102は、レベル1(L1)内部キャッシュメモリ104を含む。アーキテクチャ次第で、プロセッサ102は、単一の内部キャッシュまたは複数のレベルの内部キャッシュを有し得る。代替的に、他の実施形態において、キャッシュメモリは、プロセッサ102の外部に存在し得る。他の複数の実施形態は、特定の実装および必要性に応じて内部および外部両方の複数のキャッシュの組み合わせも含み得る。レジスタファイル106は、整数レジスタ、浮動小数点レジスタ、状態レジスタ、命令ポインタレジスタを含む様々なレジスタに、異なる複数のタイプのデータを格納し得る。
整数および浮動小数点演算を実行するロジックを含む実行ユニット108もプロセッサ102に存在する。プロセッサ102は、特定のマクロ命令のためのマイクロコードを格納するマイクロコード(ucode)ROMも含む。一実施形態に関して、実行ユニット108は、パックド命令セット109を処理するロジックを含む。汎用プロセッサ102の命令セットに、それら命令を実行する関連付けられた複数の回路と共にパックド命令セット109を含めることにより、多くのマルチメディアアプリケーションにより用いられる複数の演算が、汎用プロセッサ102内のパックドデータを用いて実行され得る。したがって、パックドデータに対して複数の演算を実行するためのプロセッサのデータバスの幅全体を用いることにより、多くのマルチメディアアプリケーションが加速され得、より効率的に実行され得る。このことは、一度に1つのデータ要素に対して1または複数の演算を実行するのに、プロセッサのデータバスを通じてより小さな複数の単位のデータを転送する必要性を取り除き得る。
実行ユニット108の代替的な複数の実施形態も、マイクロコントローラ、組み込みプロセッサ、グラフィクスデバイス、DSP、および他の複数のタイプの論理回路において用いられ得る。システム100はメモリ120を含む。メモリ120は、ダイナミックランダムアクセスメモリ(DRAM)デバイス、スタティックランダムアクセスメモリ(SRAM)デバイス、フラッシュメモリデバイス、または他のメモリデバイスであり得る。メモリ120は、プロセッサ102により実行され得る複数のデータ信号により表される複数の命令および/またはデータを格納し得る。
システムロジックチップ116は、プロセッサバス110とメモリ120とに結合されている。例示されている実施形態におけるシステムロジックチップ116はメモリコントローラハブ(MCH)である。プロセッサ102は、プロセッサバス110を介してMCH116と通信を行い得る。MCH116は、命令およびデータの格納のための、およびグラフィクスコマンド、データ、およびテクスチャの格納のための、メモリ120への高帯域幅のメモリパス118を提供する。MCH116は、プロセッサ102と、メモリ120と、システム100内の他の複数のコンポーネントとの間で複数のデータ信号を方向付け、プロセッサバス110と、メモリ120と、システムI/O122との間でそれらデータ信号をブリッジ接続する。いくつかの実施形態において、システムロジックチップ116は、グラフィクスコントローラ112への結合のためのグラフィクスポートを提供し得る。MCH116は、メモリインタフェース118を通じてメモリ120に結合されている。グラフィクスカード112は、Accelerated Graphics Port(AGP)インターコネクト114を通じてMCH116に結合されている。
システム100は、特許保護されたハブインタフェースバス122を用いて、MCH116をI/Oコントローラハブ(ICH)130)に結合する。ICH130は、ローカルI/Oバスを介して、いくつかのI/Oデバイスへの直接的な複数の接続を提供する。ローカルI/Oバスは、複数の周辺機器をメモリ120、チップセット、およびプロセッサ102に接続するための高速I/Oバスである。いくつかの例は、オーディオコントローラ、ファームウェアハブ(フラッシュBIOS)128、無線送受信機126、データストレージ124、ユーザ入力およびキーボードインタフェースを含むレガシーI/Oコントローラ、ユニバーサルシリアルバス(USB)などのシリアル拡張ポート、およびネットワークコントローラ134である。データストレージデバイス124は、ハードディスクドライブ、フロッピー(登録商標)ディスクドライブ、CD―ROMデバイス、フラッシュメモリデバイス、または他の大容量ストレージデバイスを含み得る。
システムの他の実施形態に関して、一実施形態に係る命令は、システムオンチップと共に用いられ得る。システムオンチップの一実施形態は、プロセッサとメモリとを含む。1つのそのようなシステムのメモリはフラッシュメモリである。フラッシュメモリは、プロセッサおよび他の複数のシステムコンポーネントと同じダイに位置付けられ得る。加えて、メモリコントローラまたはグラフィクスコントローラなどの他の複数のロジックブロックも、システムオンチップ上に位置付けられ得る。
図1Bは、本願発明の一実施形態の原理を実装するデータプロセッシングシステム140を示す。本明細書に説明されている複数の実施形態は、本願発明の複数の実施形態の範囲から逸脱することなく代替的な複数のプロセッシングシステムと共に用いられ得ることが当業者には容易に理解されるであろう。
コンピュータシステム140は、一実施形態に係る少なくとも1つの命令を実行可能であるプロセッシングコア159を備える。一実施形態に関して、プロセッシングコア159は、CISC、RISC、またはVLIWタイプのアーキテクチャを含むがこれらに限定されない任意のタイプのアーキテクチャのプロセッシングユニットを表す。プロセッシングコア159は、1または複数の処理技術での製造に適しているかもしれず、および、マシン可読媒体上で十分に詳細に表されることにより、上記の製造を容易にするのに適しているかもしれない。
プロセッシングコア159は、実行ユニット142と、(複数の)レジスタファイルのセット145と、デコーダ144とを備える。プロセッシングコア159は、本願発明の複数の実施形態の理解には必要ではない追加の回路(図示されていない)も含む。実行ユニット142は、プロセッシングコア159により受信される複数の命令を実行するために用いられる。典型的な複数のプロセッサ命令を実行することに加えて、実行ユニット142は、複数のパックドデータフォーマットに対して複数の演算を実行するためにパックド命令セット143に含まれる複数の命令を実行し得る。パックド命令セット143は、本願発明の複数の実施形態を実行するための複数の命令と、他の複数のパックド命令とを含む。実行ユニット142は、内部バスによりレジスタファイル145に結合されている。レジスタファイル145は、データを含む情報を格納するための、プロセッシングコア159上の記憶領域を表す。前に言及したように、パックドデータを格納するために用いられる記憶領域は重要ではないことが理解される。実行ユニット142はデコーダ144に結合されている。デコーダ144は、プロセッシングコア159により受信された複数の命令を、複数の制御信号および/またはマイクロコードエントリーポイントへとデコードするために用いられる。これらの制御信号および/またはマイクロコードエントリーポイントに応答して、実行ユニット142は適当な複数の演算を実行する。一実施形態において、デコーダは、命令内に示される対応するデータに対して実行されるべき演算が何であるかを示すであろう、命令のオペコードを翻訳するのに用いられる。
プロセッシングコア159は、例えば、シンクロナスダイナミックランダムアクセスメモリ(SDRAM)コントロール146、スタティックランダムアクセスメモリ(SRAM)コントロール147、バーストフラッシュメモリインタフェース148、パーソナルコンピュータメモリカードインターナショナルアソシエーション(PCMCIA)/コンパクトフラッシュ(登録商標)(CF)カードコントロール149、液晶ディスプレイ(LCD)コントロール150、ダイレクトメモリアクセス(DMA)コントローラ151、および代替的なバスマスターインタフェース152を含み得るがこれらに限定されない様々な他のシステムデバイスと通信を行うためのバス141と結合されている。一実施形態において、データプロセッシングシステム140は、I/Oバス153を介して様々なI/Oデバイスと通信を行うためのI/Oブリッジ154も備え得る。そのような複数のI/Oデバイスは、例えば、ユニバーサルアシンクロナスレシーバ/トランスミッタ(UART)155、ユニバーサルシリアルバス(USB)156、Bluetooth(登録商標)無線UART157、およびI/O拡張インタフェース158を含み得るがこれらに限定されない。
データプロセッシングシステム140の一実施形態は、モバイル、ネットワークおよび/または無線通信、並びに、文字列比較演算を含む複数のSIMD演算を実行可能なプロセッシングコア159を提供する。プロセッシングコア159は、ウォルシュ−アダマール変換、高速フーリエ変換(FFT)、離散コサイン変換(DCT)、およびそれらのそれぞれの逆変換などの離散変換、色空間変換、ビデオエンコード動き推定またはビデオデコード動き補償などの圧縮/解凍技術、並びに、パルス符号変調(PCM)などの変調/復調(MODEM)機能を含む、様々なオーディオ、ビデオ、イメージング、および通信アルゴリズムを用いてプログラミングされ得る。
図1Cは、SIMDベクトルポピュレーションカウント機能性を提供する複数の命令を実行可能なデータプロセッシングシステムの他の代替的な実施形態を示す。代替的な一実施形態によると、データプロセッシングシステム160は、メインプロセッサ166と、SIMDコプロセッサ161と、キャッシュメモリ167と、入出力システム168とを含み得る。オプションで、入出力システム168は、無線インタフェース169に結合され得る。SIMDコプロセッサ161は、一実施形態に係る複数の命令を含む複数の演算を実行可能である。プロセッシングコア170は、1または複数の処理技術での製造に適しているかもしれず、および、マシン可読媒体上で十分に詳細に表されることにより、プロセッシングコア170を含むデータプロセッシングシステム160の全て、またはその一部の製造を容易にするのに適しているかもしれない。
一実施形態に関して、SIMDコプロセッサ161は、実行ユニット162と、(複数の)レジスタファイルのセット164とを備える。メインプロセッサ166の一実施形態は、実行ユニット162による実行のための一実施形態に係る複数の命令を含む命令セット163の複数の命令を認識するデコーダ165を備える。代替的な複数の実施形態に関して、SIMDコプロセッサ161は、命令セット163の複数の命令をデコードするデコーダ165Bの少なくとも一部も備える。プロセッシングコア170は、本願発明の複数の実施形態の理解に必要ではない追加の回路(図示されていない)も含む。
処理において、メインプロセッサ166は、キャッシュメモリ167および入出力システム168との複数のインタラクションを含む一般的なタイプの複数のデータ処理演算を制御する一連のデータ処理命令を実行する。一連のデータ処理命令には複数のSIMDコプロセッサ命令が組み込まれている。メインプロセッサ166のデコーダ165は、取り付けられたSIMDコプロセッサ161により実行されるべきタイプであるものとしてこれらのSIMDコプロセッサ命令を認識する。したがって、メインプロセッサ166は、これらSIMDコプロセッサ命令(または複数のSIMDコプロセッサ命令を表す複数の制御信号)をコプロセッサバス171上で発行し、ここからそれらが、任意の複数の取り付けられたSIMDコプロセッサにより受信される。この場合、SIMDコプロセッサ161はそのために意図された任意の受信された複数のSIMDコプロセッサ命令を受け付け実行するであろう。
データが、複数のSIMDコプロセッサ命令による処理のために、無線インタフェース169を介して受信され得る。一例に関して、デジタル信号の形態で音声通信が受信され得、そのデジタル信号は、複数のSIMDコプロセッサ命令により処理されて、それら音声通信を表す複数のデジタルオーディオサンプルが再生成され得る。他の例に関して、圧縮されたオーディオおよび/またはビデオがデジタルビットストリームの形態で受信され得、そのデジタルビットストリームは複数のSIMDコプロセッサ命令により処理されて、複数のデジタルオーディオサンプルおよび/またはモーションビデオフレームが再生成され得る。プロセッシングコア170の一実施形態に関して、メインプロセッサ166およびSIMDコプロセッサ161は、一実施形態に係る複数の命令を含む命令セット163の複数の命令を認識する、実行ユニット162と、(複数の)レジスタファイルのセット164と、デコーダ165とを備えるシングルプロセッシングコア170へと統合され得る。
図2は、本願発明の一実施形態に係る複数の命令を実行する複数の論理回路を含むプロセッサ200に関するマイクロアーキテクチャのブロック図である。いくつかの実施形態において、一実施形態に係る命令は、単精度および倍精度の整数および浮動小数点のデータタイプなどのデータタイプに加えて、バイト、ワード、ダブルワード、カッドワード等のサイズを有する複数のデータ要素に対して演算を行うよう実装され得る。一実施形態において、インオーダーフロントエンド201は、実行されることになる複数の命令をフェッチし、それらをプロセッサパイプラインにおいて後に用いるために用意する、プロセッサ200の一部である。フロントエンド201はいくつかのユニットを含み得る。一実施形態において、命令プリフェッチャ226は、メモリから複数の命令をフェッチし、それらを命令デコーダ228へ供給し、命令デコーダ228はそれらをデコードまたは翻訳する。例えば、一実施形態において、デコーダは受信された命令を、マシンが実行し得る「マイクロ命令」または「マイクロ演算」と呼ばれる(マイクロopまたはuopとも呼ばれる)1または複数の演算へとデコードする。他の複数の実施形態において、デコーダは、その命令を一実施形態に係る複数の演算を実行するマイクロアーキテクチャにより用いられるオペコード、並びに対応する複数のデータおよび制御フィールドへとパースする。一実施形態において、トレースキャッシュ230はデコードされた複数のマイクロオペレーション(uop)を取り込み、それらを、実行のためにuopキュー234においてプログラムに指示されるシーケンスまたはトレースへと組み立てる。トレースキャッシュ230が複合命令に遭遇したとき、マイクロコードROM232は演算を完了するのに必要な複数のuopを提供する。
いくつかの命令は、単一のマイクロopに変換され、他方、その他のものは、演算全体を完了するのにいくつかのマイクロopを必要とする。一実施形態において、命令を完了するのに4つより多いマイクロopが必要とされる場合、デコーダ228は、その命令を実行するのにマイクロコードROM232にアクセスする。一実施形態に関して、命令は、命令デコーダ228における処理のために少数のマイクロopへとデコードされ得る。他の実施形態において、演算を成し遂げるのに複数のマイクロopが必要とされる場合、命令は、マイクロコードROM232内に格納され得る。トレースキャッシュ230は、エントリーポイントプログラマブルロジックアレイ(PLA)を参照して、一実施形態に係る1または複数の命令を完了するマイクロコードシーケンスをマイクロコードROM232から読み取るために正確なマイクロ命令ポインタを判断する。マイクロコードROM232が、命令のために複数のマイクロopを順番に配列し終えた後に、マシンのフロントエンド201は、トレースキャッシュ230からの複数のマイクロopのフェッチを再開する。
アウトオブオーダー実行エンジン203において、実行のために複数の命令の用意がされる。アウトオブオーダー実行ロジックは、複数の命令がパイプラインを下って実行のためにスケジューリングがされるときに、それらのフローを円滑にし、再び順序付けて性能を最適化する複数のバッファを有する。アロケータロジックは、各uopが実行のために必要とする複数のマシンバッファおよびリソースを割り当てる。レジスタリネーミングロジックは、複数のロジックレジスタをレジスタファイルにおける複数のエントリーへとリネームする。またアロケータは複数の命令スケジューラ(メモリスケジューラ、高速スケジューラ202、低速/一般的浮動小数点スケジューラ204、および単純浮動小数点スケジューラ206)の前に、2つのuopキュー(1つはメモリ演算に関するものであり、1つは非メモリ演算に関するものである)の1つにおけるuop毎にエントリーを割り当てる。uopスケジューラ202、204、206は、それらの依存性の入力レジスタオペランドソースの用意が出来ていること、およびuopがそれらの演算を完了するのに必要とする複数の実行リソースの利用可能性に基づきuopがいつ実行する準備が出来るかを判断する。一実施形態の高速スケジューラ202は、メインクロックサイクルの半分毎にスケジューリングを行い得、他方、他の複数のスケジューラは、メインプロセッサのクロックサイクル毎に1回のみスケジューリングを行い得る。複数のスケジューラは、実行のために複数のuopのスケジューリングを行う複数のディスパッチポートのために仲裁を行う。
レジスタファイル208、210は、スケジューラ202、204、206と、実行ブロック211の実行ユニット212、214、216、218、220、222、224との間にある。整数および浮動小数点の演算のためにそれぞれ別個のレジスタファイル208、210がある。また一実施形態の各レジスタファイル208、210は、完了したばかりの、レジスタファイルにまだ書き込まれていない複数の結果を、新たな依存性の複数のuopへとバイパスし得る、または進め得るバイパスネットワークを含む。また整数レジスタファイル208および浮動小数点レジスタファイル210は、他のものとデータの通信が可能である。一実施形態に関して、整数レジスタファイル208は、2つの別個のレジスタファイル(1つのレジスタファイルは、データの下位の32ビットのためのものであり、第2のレジスタファイルは、データの上位の32ビットのためのもの)に分割される。複数の浮動小数点命令は典型的には、64〜128ビット幅の複数のオペランドを有するので、一実施形態の浮動小数点レジスタファイル210は128ビット幅の複数のエントリーを有する。
実行ブロック211は、複数の命令が実際に実行される実行ユニット212、214、216、218、220、222、224を含む。このセクションは、複数のマイクロ命令を実行するために必要である複数の整数および浮動小数点データオペランド値を格納するレジスタファイル208、210を含む。一実施形態のプロセッサ200は、複数の実行ユニットから成る:アドレス生成ユニット(AGU)212、AGU214、高速ALU216、高速ALU218、低速ALU220、浮動小数点ALU222、浮動小数点移動ユニット224。一実施形態に関して、浮動小数点実行ブロック222、224は、浮動小数点、MMX、SIMD、SSE、または他の複数の演算を実行する。一実施形態の浮動小数点ALU222は、除算、平方根、および剰余マイクロopを実行する64ビット×64ビット浮動小数点除算器を含む。本願発明の複数の実施形態に関して、浮動小数点値を伴う複数の命令は、浮動小数点ハードウェアによって処理され得る。一実施形態において、複数のALU演算は、高速ALU実行ユニット216、218へと向かう。一実施形態の高速ALU216、218は、クロックサイクルの半分の実効レイテンシで高速の演算を実行し得る。一実施形態に関して、低速ALU220は、乗算器、シフト、フラグロジック、および分岐処理などのレイテンシが長いタイプの演算のための整数実行ハードウェアを含むので、最も複雑な複数の整数演算は低速ALU220へと向かう。複数のメモリロード/格納演算は、AGU212、214により実行される。一実施形態に関して、整数ALU216、218、220は、複数の64ビットデータオペランドに対して複数の整数演算を実行する環境に関して説明される。代替的な複数の実施形態において、ALU216、218、220は、16、32、128、256等を含む様々なデータビットをサポートするよう実装され得る。同様に、浮動小数点ユニット222、224は、様々な幅のビットを有するある範囲のオペランドをサポートするよう実装され得る。一実施形態に関して、浮動小数点ユニット222、224は、SIMDおよびマルチメディア命令と合わせて、128ビット幅の複数のパックドデータオペランドに対して演算を行い得る。
一実施形態において、uopスケジューラ202、204、206は、親ロードが実行を終了する前に依存性の複数の演算をディスパッチする。複数のuopはプロセッサ200において推測でスケジューリングされ実行されるので、プロセッサ200は、メモリのミスを処理するロジックも含む。データロードのミスがデータキャッシュで起こった場合、一時的に不正確なデータと共にスケジューラを離れた依存性の複数の演算がパイプライン内でインフライトであり得る。再生メカニズムは、不正確なデータを用いる複数の命令をトラッキングし、再実行する。複数の依存性の演算のみが再生される必要があり、非依存性のものは完了が許される。また、プロセッサの一実施形態の複数のスケジューラおよび再生メカニズムは、SIMDベクトルポピュレーションカウント機能性を提供する複数の命令を捕らえるように設計される。
「レジスタ」という用語は、複数のオペランドを識別する複数の命令の一部として用いられる、ボード上の複数のプロセッサストレージ位置を指し得る。言い換えると、複数のレジスタは、プロセッサの(プログラマから見て)外部から利用可能であるものである。しかし、実施形態の複数のレジスタは、特定のタイプの回路に、その意味が限定されるべきではない。むしろ、実施形態のレジスタは、データを格納および提供可能であり、本明細書に説明されている複数の機能を実行可能である。本明細書に説明されている複数のレジスタは、専用の物理的レジスタ、レジスタリネーミングを用いる動的に割り当てられた物理レジスタ、専用の、および動的に割り当てられた物理レジスタの組み合わせ等など任意の数の異なる技術を用いてプロセッサ内で回路により実装され得る。一実施形態において、複数の整数レジスタは、32ビットの整数データを格納する。また、一実施形態のレジスタファイルは、パックドデータのための8つのマルチメディアSIMDレジスタを含む。以下の説明に関して、複数のレジスタは、カリフォルニア州サンタクララ市のIntel CorporationからのMMX技術により可能とされる複数のマイクロプロセッサにおける64ビット幅のMMX(商標)レジスタ(いくつかの例において「mm」レジスタとも呼ばれる)などの、パックドデータを保持するよう設計されたデータレジスタであるものと理解される。整数および浮動小数点の両方の形態で利用可能あるこれらのMMXレジスタは、SIMDおよびSSE命令を伴う複数のパックドデータ要素によって演算を行い得る。同様に、SSE2、SSE3、SSE4、またはさらに上のもの(包括的に「SSEx」と呼ぶ)の技術に関する128ビット幅XMMレジスタも、そのような複数のパックドデータオペランドを保持するのに用いられ得る。一実施形態において、パックドデータおよび整数データの格納において、複数のレジスタは、2つのデータタイプの間で区別する必要はない。一実施形態において、整数および浮動小数点は、同じレジスタファイル、または異なるレジスタファイルに含まれる。さらに、一実施形態において、浮動小数点および整数データは、異なるレジスタ、または同じレジスタに格納され得る。
以下の複数の図面の複数の例において、複数のデータオペランドが説明される。図3Aは、本願発明の一実施形態に係る複数のマルチメディアレジスタにおける様々なパックドデータタイプの表現を示す。図3Aは、128ビット幅オペランドに関するパックドバイト310、パックドワード320、およびパックドダブルワード(dword)330のデータタイプを示す。本例のパックドバイトフォーマット310は、128ビット長であり、16個のパックドバイトデータ要素を含む。バイトはここで、8ビットのデータとして定義される。バイトデータ要素毎の情報は、バイト0に関してはビット7〜ビット0に、バイト1に関してはビット15〜ビット8に、バイト2に関してはビット23〜ビット16に、最後にバイト15に関してはビット120〜ビット127に格納される。したがって、利用可能なビットの全てがレジスタにおいて用いられる。この格納配置は、プロセッサの格納効率を高める。同じく、16個のデータ要素がアクセスされることにより、1つの演算は、並列で16個のデータ要素に対して実行され得るようになる。
一般的に、データ要素は、同じ長さの他の複数のデータ要素とともに、単一のレジスタまたは記憶位置に格納される個々のデータである。SSEx技術に関するパックドデータシーケンスにおいて、XMMレジスタに格納されるデータ要素の数は、128ビットを個々のデータ要素のビット長で除算して得た数である。同様に、MMXおよびSSE技術に関するパックドデータシーケンスにおいて、MMXレジスタに格納されるデータ要素の数は、64ビットを、個々のデータ要素のビット長で除算して得た数である。図3Aに示されている複数のデータタイプは128ビット長であるが、本願発明の複数の実施形態は、64ビット幅、256ビット幅、512ビット幅、または他のサイズのオペランドによっても演算を行い得る。本例のパックドワードフォーマット320は、128ビット長であり、8つのパックドワードデータ要素を含む。各パックドワードは、16ビットの情報を含む。図3Aのパックドダブルワードフォーマット330は、128ビット長であり、4つのパックドダブルワードデータ要素を含む。各パックドダブルワードデータ要素は32ビットの情報を含む。パックドカッドワードは128ビット長であり、2つのパックドカッドワードデータ要素を含む。
図3Bは、代替的な、レジスタ内のデータ記憶フォーマットを示す。各パックドデータは、1より多くの非依存性のデータ要素を含み得る。3つのパックドデータフォーマット(パックドハーフ341、パックドシングル342、およびパックドダブル343)が示されている。パックドハーフ341、パックドシングル342、およびパックドダブル343の一実施形態は、複数の固定小数点データ要素を含む。代替的な実施形態に関して、パックドハーフ341、パックドシングル342、およびパックドダブル343の1または複数は、浮動小数点データ要素を含み得る。パックドハーフ341の代替的な一実施形態は、128ビット長であり、8つの16ビットデータ要素を含む。パックドシングル342の一実施形態は、128ビット長であり、4つの32ビットデータ要素を含む。パックドダブル343の一実施形態は、128ビット長であり、2つの64ビットデータ要素を含む。それらのようなパックドデータフォーマットは、例えば、96ビット、160ビット、192ビット、224ビット、256ビット、512ビット、またはそれより大きな他のレジスタの長さへとさらに拡張され得ることが理解されよう。
図3Cは、本願発明の一実施形態に係る複数のマルチメディアレジスタにおける様々な符号付き、および符号なしパックドデータタイプの表現を示す。符号なしパックドバイト表現344は、SIMDレジスタにおける符号なしパックドバイトの格納を示す。バイトデータ要素毎の情報は、バイトゼロに関してはビット7〜ビットゼロに、バイト1に関してはビット15〜ビット8に、バイト2に関してはビット23〜ビット16に、等のように、そして最後にバイト15に関してはビット120〜ビット127に格納される。したがって、利用可能なビットの全てがレジスタにおいて用いられる。この格納配置は、プロセッサの格納効率を高め得る。同じく、16個のデータ要素がアクセスされることにより、1つの演算は、並列方式で16個のデータ要素に対して実行され得るようになる。符号付きパックドバイト表現345は、符号付きパックドバイトの格納を示す。なお、各バイトデータ要素の8番目のビットは符号インジケータである。符号なしパックドワード表現346は、ワード7〜ワードゼロがどのようにSIMDレジスタにおいて格納されるかを示す。符号付きパックドワード表現347は、符号なしパックドワードのレジスタ内の表現346と同様である。なお、各ワードデータ要素の16番目のビットは符号インジケータである。符号なしパックドダブルワード表現348は、ダブルワードのデータ要素がどのように格納されるかを示す。符号付きパックドダブルワード表現349は、符号なしパックドダブルワードのレジスタ内の表現348と同様である。なお、必要な符号ビットは、各ダブルワードのデータ要素の32番目のビットである。
図3Dは、32またはそれより多くのビットを有する演算エンコード(オペコード)フォーマット360の一実施形態、およびintel.com/products/processor/manuals/でワールドワイドウェブ(www)上でカリフォルニア州サンタクララ市のIntel Corporationから入手可能である「Intel(r) 64 and IA−32 Intel Architecture Software Developer's Manual Combined Volumes 2A and 2B: Instruction Set Reference A−Z」に説明されているタイプのオペコードフォーマットに対応するレジスタ/メモリオペランドアドレッシングモードの描写である。一実施形態において、命令は、フィールド361および362の1または複数によりエンコードされ得る。命令毎に、最大2つのソースオペランド識別子364および365を含む最大2つのオペランド位置が識別され得る。一実施形態に関して、宛て先オペランド識別子366はソースオペランド識別子364と同じであり、他方、他の複数の実施形態において、それらは異なる。代替的な実施形態に関して、宛て先オペランド識別子366はソースオペランド識別子365と同じであり、他方、他の複数の実施形態において、それらは異なる。一実施形態において、ソースオペランド識別子364および365により識別される複数のソースオペランドの1つは、命令の複数の結果により上書きされ、他方、他の複数の実施形態において、識別子364は、ソースレジスタ要素に対応し、識別子365は、宛て先レジスタ要素に対応する。一実施形態に関して、オペランド識別子364および365は、32ビットまたは64ビットのソースおよび宛て先オペランドを識別するのに用いられ得る。
図3Eは、40またはそれより多くのビットを有する他の代替的な演算エンコード(オペコード)フォーマット370の描写である。オペコードフォーマット370はオペコードフォーマット360に対応し、オプションのプレフィックスバイト378を備える。一実施形態に係る命令は、フィールド378、371および372の1または複数によりエンコードされ得る。命令毎に、ソースオペランド識別子374および375により、およびプレフィックスバイト378により最大2つのオペランド位置が識別され得る。一実施形態に関して、プレフィックスバイト378が32ビットまたは64ビットのソースおよび宛て先オペランドを識別するのに用いられ得る。一実施形態に関して、宛て先オペランド識別子376はソースオペランド識別子374と同じであり、他方、他の複数の実施形態において、それらは異なる。代替的な実施形態に関して、宛て先オペランド識別子376はソースオペランド識別子375と同じであり、他方、他の複数の実施形態において、それらは異なる。一実施形態において、命令は、オペランド識別子374および375により識別される複数のオペランドの1または複数に対して演算を行い、オペランド識別子374および375により識別される1または複数のオペランドは、命令の複数の結果により上書きされ、他方、他の複数の実施形態において、識別子374および375により識別される複数のオペランドは、他のレジスタにおいて他のデータ要素に書き込まれる。オペコードフォーマット360および370は、部分的にMODフィールド363および373により、およびオプションのスケール−インデックス−ベースおよび変位バイトにより指定されるレジスタからレジスタへの、メモリからレジスタへの、メモリによるレジスタの、レジスタによるレジスタの、即値によるレジスタの、レジスタからメモリへのアドレッシングを可能とする。
次に図3Fを参照すると、いくつかの代替的な実施形態において、64ビット(または128ビット、または256ビット、または512ビット、またはそれより多くの)単一命令多重データ処理(SIMD)算術演算が、コプロセッサデータ処理(CDP)命令を通じて実行され得る。演算エンコード(オペコード)フォーマット380は、CDPオペコードフィールド382および389を有する1つのそのようなCDP命令を描写している。代替的な複数の実施形態に関して、CDP命令のタイプにおいて、複数の演算は、フィールド383、384、387および388の1または複数によりエンコードされ得る。命令毎に、最大2つのソースオペランド識別子385および390および1つの宛て先オペランド識別子386を含む最大3つのオペランド位置が識別され得る。コプロセッサのの一実施形態は、8、16、32、および64ビット値に対して演算を行い得る。一実施形態に関して、命令は、複数の整数データ要素に対して実行される。いくつかの実施形態において、命令は、条件フィールド381を用い、条件的に実行され得る。いくつかの実施形態に関して、複数のソースデータサイズは、フィールド383によりエンコードされ得る。いくつかの実施形態において、ゼロ(Z)、ネガティブ(N)、キャリー(C)、およびオーバーフロー(V)検出が、複数のSIMDフィールド上で行われ得る。いくつかの命令に関して、飽和のタイプはフィールド384によりエンコードされ得る。
次に図3Gを参照すると、図3Gは、intel.com/products/processor/manuals/でワールドワイドウェブ(www)上でカリフォルニア州サンタクララ市Intel Corp.から入手可能である「Intel(r) Advanced Vector Extensions Programming Reference」に説明されているタイプのオペコードフォーマットに対応する、他の実施形態に係るSIMDベクトルポピュレーションカウント機能性を提供する他の代替的な演算エンコード(オペコード)フォーマット397の描写である。
オリジナルのx86命令セットは、第1の「オペコード」バイトからその存在が知られる、追加の複数のバイトに含まれた様々なフォーマットのアドレスシラブルおよび即値オペランドを有する1バイトのオペコードを提供した。加えて、オペコードに対する修飾子(命令の前に配置されなければならないのでプレフィックスと呼ばれる)として確保されている特定の複数のバイト値があった。256個のオペコードバイト(これらの特別なプレフィックス値を含む)のオリジナルのパレットが使い果たされたとき、単一のバイトが、256個のオペコードの新たなセットへのエスケープに用いられる。複数のベクトル命令(例えば、SIMD)が追加されたとき、より多くのオペコードの必要性が生じ、プレフィックスの使用によって拡張されたとしても「2バイト」のオペコードマップも不十分であった。この目的のために、新たな複数の命令が、2バイトに加えて、オプションのプレフィックスを識別子として用いる追加の複数のマップに追加された。
加えて、64ビットモードの追加の複数のレジスタを容易にするために、追加のプレフィックス(「REX」と呼ばれる)が複数のプレフィックスとオペコードと(およびオペコードを判断するのに必要な任意の複数のエスケープバイトと)の間で用いられ得る。一実施形態において、REXは、64ビットモードの追加の複数のレジスタの使用を示す4つの「ペイロード」ビットを有し得る。他の複数の実施形態において、それは4より少ない、またはより多いビットを有し得る。(フォーマット360および/またはフォーマット370に概して対応する)少なくとも1つの命令セットの一般的なフォーマットは、以下により包括的に示される。[プレフィックス][rex]エスケープ[エスケープ2]オペコードmodrm(等)
オペコードフォーマット397はオペコードフォーマット370に対応し、殆どの他の一般的に用いられる複数のレガシー命令プレフィックスバイトおよびエスケープコードの代わりとなるオプションの複数のVEXプレフィックスバイト391(一実施形態において、C4 hexから開始する)を含む。例えば、以下は、第2のエスケープコードがオリジナルの命令に存在するとき、または、REXフィールドの追加の複数のビット(例えば、XBおよびWフィールド)が用いられる必要があるときに用いられ得る、命令をエンコードする2つのフィールドを用いる実施形態を示す。以下に示されている実施形態において、レガシーのエスケープは、新たなエスケープ値により表され、レガシーの複数のプレフィックスは、複数の「ペイロード」バイトの一部として完全に圧縮され、複数のレガシープレフィックスは、リクレイムされ(reclaimed)将来の拡張に利用可能であり、第2のエスケープコードは、利用可能な将来のマップまたは特徴空間により「マップ」フィールドにおいて圧縮され、新たな特徴が追加される(例えば、長くなったベクトル長および追加のソースレジスタ指定子)。
一実施形態に係る命令は、フィールド391および392の1または複数によりエンコードされ得る。命令毎に、ソースオペランド識別子374および375との組み合わせにより、およびオプションのスケール−インデックス−ベース(SIB)識別子393、オプションの変位識別子394、およびオプションの即値バイト395との組み合わせによりフィールド391により最大4つのオペランド位置が識別され得る。一実施形態に関して、複数のVEXプレフィックスバイト391が、32ビットまたは64ビットのソースおよび宛て先オペランド、並びに/または128ビット若しくは256ビットSIMDレジスタ若しくはメモリオペランドを識別するのに用いられ得る。一実施形態に関して、オペコードフォーマット397により提供される機能性は、オペコードフォーマット370と重複し得、他方、他の複数の実施形態において、それらは異なる。オペコードフォーマット370および397は、部分的にMODフィールド373により、並びにオプションの(SIB)識別子393、オプションの変位識別子394、およびオプションの即値バイト395により指定されるレジスタからレジスタへの、メモリからレジスタへの、メモリによるレジスタの、レジスタによるレジスタの、即値によるレジスタの、レジスタからメモリへのアドレッシングを可能とする。
次に図3Hを参照すると、図3Hは、他の実施形態に係るSIMDベクトルポピュレーションカウント機能性を提供する他の代替的な演算エンコード(オペコード)フォーマット398の描写である。オペコードフォーマット398はオペコードフォーマット370および397に対応し、殆どの他の一般的に用いられる複数のレガシー命令プレフィックスバイトおよびエスケープコードの代わりとなり、追加の機能性を提供するオプションの複数のEVEXプレフィックスバイト396(一実施形態において、62 hexから開始する)を含む。一実施形態に係る命令は、フィールド396および392の1または複数によりエンコードされ得る。命令毎に、ソースオペランド識別子374および375との組み合わせにより、およびオプションのスケール−インデックス−ベース(SIB)識別子393、オプションの変位識別子394、およびオプションの即値バイト395との組み合わせによりフィールド396により最大4つのオペランド位置およびマスクが識別され得る。一実施形態に関して、複数のEVEXプレフィックスバイト396が、32ビットまたは64ビットのソースおよび宛て先オペランド、並びに/または128ビット、256ビット、若しくは512ビットSIMDレジスタ若しくはメモリオペランドを識別するのに用いられ得る。一実施形態に関して、オペコードフォーマット398により提供される機能性は、オペコードフォーマット370および397と重複し得、他方、他の複数の実施形態において、それらは異なる。オペコードフォーマット398は、部分的にMODフィールド373により、並びにオプションの(SIB)識別子393、オプションの変位識別子394、およびオプションの即値バイト395により指定されるレジスタからレジスタへの、メモリからレジスタへの、メモリによるレジスタの、レジスタによるレジスタの、即値によるレジスタの、レジスタからメモリへの複数のマスクを用いたアドレッシングを可能とする。(フォーマット360および/またはフォーマット370と概して対応する)少なくとも1つの命令セットの一般的なフォーマットは、以下により包括的に示される。evex1 RXBmmmmm WvvvLpp evex4 opcode modrm[sib][disp][imm]
一実施形態に関して、EVEXフォーマット398に従ってエンコードされた命令は、例えば、ユーザ構成可能なマスクレジスタ、または、追加のオペランド、または128ビット、256ビット、または512ビットベクトルレジスタからの選択、または選択し得るより多くのレジスタ等など追加の新たな複数の特徴を有するSIMDベクトルポピュレーションカウント機能性を提供するのに用いられ得る追加の複数の「ペイロード」ビットを有し得る。
例えば、VEXフォーマット397は、マスクなしのSIMDベクトルポピュレーションカウント機能性を提供するのに用いられ得るが、EVEXフォーマット398は、明白なユーザ構成可能マスクありのSIMDベクトルポピュレーションカウント機能性を提供するのに用いられ得る。加えて、VEXフォーマット397は128ビットまたは256ビットベクトルレジスタ上でのSIMDベクトルポピュレーションカウント機能性を提供するのに用いられ得るが、EVEXフォーマット398は、128ビット、256ビット、512ビット、またはより大きい(またはより小さい)ベクトルレジスタ上でSIMDベクトルポピュレーションカウント機能性を提供のに用いられ得る。
ゲノム配列決定および配列比較のためのSIMDベクトルポピュレーションカウント機能性を提供する例示的な複数の命令が、以下の複数の例により示される。
複数のSIMDポピュレーションカウント命令が、上記の複数の例のように、ゲノム配列決定および配列比較処理のために用いられ得ることが理解されよう。上記の複数の例において示されるように、いくつかの他のデータベース、データマイニングアプリケーション、および検索アプリケーションにおいて、これらのアプリケーションも複数のSIMDポピュレーションカウント命令を用い得るように同様の複数の圧縮スキームも用いられる。
ゲノム配列比較における一般的な演算は、塩基対の複数の列に一致させる、または部分的に一致させるために、列内の複数のヌクレオチドの複数の出現をカウントすることである。パックドデータフォーマット(packedDnaなど)においては、技術は他の場合においては、列内の異なるヌクレオチドの複数の出現をカウントするために、複数のシフトおよびマスク演算と併せた複数のルックアップテーブル、および/または複数の論理演算と併せたビット単位の複数のポピュレーションカウントの使用を伴い得る。複数のSIMDポピュレーションカウント命令を用いることにより、上記の複数の例のように、列内の異なるヌクレオチドの複数の出現をカウントするために以前まで必要とされていた複数の演算の多くは取り除かれ得る。したがって、ゲノム配列決定および配列比較処理などの複数のアプリケーション、および、より一般的に、データマイニングなどの複数のデータベースアプリケーション、および検索アプリケーションの性能は、実質的に改善され得る。
図4Aは、本願発明の少なくとも1つの実施形態に係るインオーダーパイプライン、およびレジスタリネーミングステージ、アウトオブオーダー発行/実行パイプラインを示すブロック図である。図4Bは、本願発明の少なくとも1つの実施形態に係るプロセッサに含められることになるインオーダーアーキテクチャコア、およびレジスタリネーミングロジック、アウトオブオーダー発行/実行ロジックを示すブロック図である。図4Aにおける実線の複数のボックスはインオーダーパイプラインを示し、他方、破線の複数のボックスは、レジスタリネーミング、アウトオブオーダー発行/実行パイプラインを示す。同様に、図4Bにおける実線の複数のボックスはインオーダーアーキテクチャロジックを示し、他方、破線の複数のボックスは、レジスタリネーミングロジック、およびアウトオブオーダー発行/実行ロジックを示す。
図4Aにおいて、プロセッサパイプライン400は、フェッチステージ402、長さデコードステージ404、デコードステージ406、割り当てステージ408、リネームステージ410、スケジューリング(ディスパッチまたは発行としても知られる)ステージ412、レジスタ読み取り/メモリ読み取りステージ414、実行ステージ416、書き戻し/メモリ書き込みステージ418、例外処理ステージ422、およびコミットステージ424を含む。
図4Bにおいて、複数の矢印は、2またはそれより多くのユニット間の結合を示し、矢印の方向は、それらユニット間のデータフローの方向を示す。図4Bは、実行エンジンユニット450に結合されたフロントエンドユニット430を含み、フロントエンドユニット430と実行エンジンユニット450との両方がメモリユニット470に結合されたプロセッサコア490を示す。
コア490は、縮小命令セットコンピューティング(RISC)コア、複合命令セットコンピューティング(CISC)コア、超長命令語(VLIW)コア、または、ハイブリッドまたは代替的なコアタイプであり得る。さらに他のオプションとして、コア490は、例えば、ネットワークまたは通信コア、圧縮エンジン、グラフィクスコアなど特定用途向けコア、または同様のものであり得る。
フロントエンドユニット430は、分岐予測ユニット432を含み、分岐予測ユニット432は、命令キャッシュユニット434に結合され、命令キャッシュユニット434は、命令トランスレーションルックアサイドバッファ(TLB)436に結合され、TLB436は、命令フェッチユニット438に結合され、命令フェッチユニット438は、デコードユニット440に結合されている。デコードユニットまたはデコーダは、複数の命令をデコードし得、オリジナルの命令からデコードされ、または、そうでなければオリジナルの命令を反映する、または、オリジナルの命令から導出される1または複数のマイクロ演算、マイクロコードエントリーポイント、マイクロ命令、他の命令、または他の制御信号を出力として生成し得る。デコーダは、様々な異なるメカニズムを用いて実装され得る。複数の適しているメカニズムの例には、複数のルックアップテーブル、複数のハードウェア実装、複数のプログラマブルロジックアレイ(PLA)、複数のマイクロコードリードオンリーメモリ(ROM)等が含まれるがこれらに限定されない。命令キャッシュユニット434はさらに、メモリユニット470内のレベル2(L2)キャッシュユニット476に結合されている。デコードユニット440は、実行エンジンユニット450内のリネーム/アロケータユニット452に結合されている。
実行エンジンユニット450は、リタイヤユニット454と1または複数のスケジューラユニット456のセットとに結合されたリネーム/アロケータユニット452を含む。(複数の)スケジューラユニット456は、複数の予約ステーション、中央命令ウィンドウ等を含む、任意の数の複数の異なるスケジューラを表す。(複数の)スケジューラユニット456は、(複数の)物理レジスタファイルユニット458に結合されている。複数の物理レジスタファイルユニット458のそれぞれは、互いに異なるもの同士が1または複数の異なるデータタイプを格納する1または複数の物理レジスタファイルを表す。そのようなデータタイプには、スカラ整数、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点等、状態(例えば、次に実行される命令のアドレスである命令ポインタ)等が含まれる。レジスタリネーミングおよびアウトオブオーダー実行が実装され得る様々なやり方(例えば、(複数の)リオーダーバッファおよび(複数の)リタイヤレジスタファイルを用いて、(複数の)未来のファイル(future file)、(複数の)履歴バッファ(history buffer)、および(複数の)リタイヤレジスタファイルを用いて、複数のレジスタマップおよび複数のレジスタのプールを用いて、等)を示すべく、(複数の)物理レジスタファイルユニット458にはリタイヤユニット454が重ねられている。一般的に、複数のアーキテクチャレジスタは、プロセッサの外部から、またはプログラマから見える。それらレジスタは、任意の公知の特定のタイプの回路に限定されない。様々な異なるタイプのレジスタが、本明細書に説明されているようにデータを格納および提供可能である限り、適している。適している複数のレジスタの複数の例は、専用の物理的レジスタ、レジスタリネーミングを用いる動的に割り当てられた物理レジスタ、専用の、および動的に割り当てられた物理レジスタの組み合わせ等を含むがこれらに限定されない。リタイヤユニット454および(複数の)物理レジスタファイルユニット458は、(複数の)実行クラスタ460に結合されている。(複数の)実行クラスタ460は、1または複数の実行ユニット462のセット、および1または複数のメモリアクセスユニット464のセットを含む。複数の実行ユニット462は様々な演算(例えば、シフト、加算、減算、乗算)を、様々なタイプのデータ(例えば、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点)に対して実行し得る。いくつかの実施形態には、複数の特定の機能、または複数の機能からなる複数のセットのための専用の複数の実行ユニットが含まれ得るが、他の複数の実施形態には、全ての機能を全てが実行する1つだけの実行ユニット、または複数の実行ユニットが含まれ得る。複数の特定の実施形態において、複数の特定のタイプのデータ/複数の演算に対して複数の別個のパイプライン(例えば、それぞれが自身のスケジューラユニット、物理レジスタファイルユニット、および/または実行クラスタを有する、スカラ整数パイプライン、スカラ浮動小数点/パックド整数/パックド浮動小数点/ベクトル整数/ベクトル浮動小数点パイプライン、および/または、メモリアクセスパイプライン、並びに、別個のメモリアクセスパイプラインの場合には、このパイプラインの実行クラスタのみがメモリアクセスユニット464を有する複数の特定の実施形態が実装される)が生成されるので、(複数の)スケジューラユニット456、(複数の)物理レジスタファイルユニット458、および(複数の)実行クラスタ460は、複数あり得るものとして示されている。また、複数の別個のパイプラインが用いられる場合、これらのパイプラインの1または複数は、アウトオブオーダー発行/実行であり得、残りがインオーダーであり得ることを理解されるべきである。
複数のメモリアクセスユニット464のセットが、メモリユニット470に結合され、メモリユニット470は、データキャッシュユニット474に結合されたデータTLBユニット472を含む。データキャッシュユニット474は、レベル2(L2)キャッシュユニット476に結合されている。例示的な一実施形態において、複数のメモリアクセスユニット464は、ロードユニット、格納アドレスユニット、および、格納データユニットを含み得る。これらはそれぞれ、メモリユニット470内のデータTLBユニット472に結合されている。L2キャッシュユニット476は、1または複数の他のレベルのキャッシュ、および、やがてメインメモリに結合されている。
例として、例示的なレジスタリネーミング、アウトオブオーダー発行/実行コアアーキテクチャは、以下のようにパイプライン400を実装し得る。1)命令フェッチ438が、フェッチおよび長さデコードステージ402、404を実行する。2)デコードユニット440が、デコードステージ406を実行する。3)リネーム/アロケータユニット452が、割り当てステージ408およびリネームステージ410を実行する。4)(複数の)スケジューラユニット456がスケジューリングステージ412を実行する。5)(複数の)物理レジスタファイルユニット458およびメモリユニット470が、レジスタ読み取り/メモリ読み取りステージ414を実行する。実行クラスタ460が実行ステージ416を実行する。6)メモリユニット470および(複数の)物理レジスタファイルユニット458が、書き戻し/メモリ書き込みステージ418を実行する。7)様々なユニットが例外処理ステージ422に関わり得る。8)リタイヤユニット454および(複数の)物理レジスタファイルユニット458が、コミットステージ424を実行する。
コア490は、1または複数の命令セット(例えば、x86命令セット(複数のより新しいバージョンではいくつかの拡張が追加された)、カリフォルニア州サニーベール市のMIPS TechnologiesのMIPS命令セット、カリフォルニア州サニーベール市のARM HoldingsのARM命令セット(NEONなどオプションの追加の拡張を含む)をサポートし得る。
コアは、マルチスレッディング(複数の演算または複数のスレッドからなる2またはそれより多くの並列セットを実行)をサポートし得、このことを様々なやり方で行い得ることが理解されるべきである。それら様々なやり方には、タイムスライスドマルチスレッディング、同時マルチスレッディング(単一の物理コアが、同物理コアが同時にマルチスレッディングを行っている複数のスレッドのそれぞれに論理コアを提供する)、または、これらの組み合わせ(例えば、Intel(登録商標)Hyperthreading技術などのように、タイムスライスドフェッチおよびデコード、並びにその後の同時マルチスレッディング)が含まれる。
アウトオブオーダー実行の環境に関して、レジスタリネーミングを説明するが、レジスタリネーミングは、インオーダーアーキテクチャで用いられ得ることが理解されるべきである。また、プロセッサの例示されている実施形態は、別個の命令およびデータキャッシュユニット434/474、並びに共有されるL2キャッシュユニット476も含むが、代替的な実施形態において、例えば、レベル1(L1)内部キャッシュ、または複数のレベルの内部キャッシュなど複数の命令およびデータの両方に関して単一の内部キャッシュが用いられ得る。いくつかの実施形態において、システムは、内部キャッシュと、コアおよび/またはプロセッサの外部にある外部キャッシュとの組み合わせを含み得る。代替的に、キャッシュの全てが、コアおよび/またはプロセッサの外部にあり得る。
図5は、本願発明の複数の実施形態に係る、集積メモリコントローラおよびグラフィクスを有するシングルコアプロセッサおよびマルチコアプロセッサ500のブロック図である。図5における実線の複数のボックスは、シングルコア502A,システムエージェント510、1または複数のバスコントローラユニット516のセットを有するプロセッサ500を示し、他方、破線の複数のボックスのオプションの追加は、マルチコア502A〜N、システムエージェントユニット510における1または複数の集積メモリコントローラユニット514のセット、および集積グラフィクスロジック508を有する代替的なプロセッサ500を示す。
メモリ階層は、複数のコア内の1または複数のレベルのキャッシュ、1または複数の共有キャッシュユニット506のセット、および、複数の集積メモリコントローラユニット514のセットに結合された外部メモリ(図示されていない)を含む。複数の共有キャッシュユニット506のセットは、レベル2(L2)、レベル3(L3),レベル4(L4),または他のレベルのキャッシュ、ラストレベルキャッシュ(LLC)、および/またはこれらの組み合わせなどの1または複数の中間レベルのキャッシュを含み得る。一実施形態において、リングベースのインターコネクトユニット512が集積グラフィクスロジック508、複数の共有キャッシュユニット506のセット、およびシステムエージェントユニット510を相互接続するが、代替的な実施形態において、そのような複数のユニットを相互接続するための任意の数の複数の周知の技術が用いられ得る。
いくつかの実施形態において、コア502A〜Nの1または複数は、マルチスレッディングが可能である。システムエージェント510は、コア502A〜Nを調整し、動作させる複数のコンポーネントを含む。システムエージェントユニット510は、例えば、電力制御ユニット(PCU)およびディスプレイユニットを含み得る。PCUは、コア502A〜Nおよび集積グラフィクスロジック508の電力状態を管理するために必要なロジックまたは複数のコンポーネントであり得、または、それらを含み得る。ディスプレイユニットは、1または複数の外部接続されたディスプレイを駆動するためのものである。
コア502A〜Nは、アーキテクチャおよび/または命令セットの点で同種または異種であり得る。例えば、コア502A〜Nのいくつかは、インオーダーであり得、他方、他のものはアウトオブオーダーであり得る。他の例として、コア502A〜Nの2またはそれより多くは、同じ命令セットを実行可能であり得、他方、他のものは、その命令セットのサブセットのみ、または異なる命令セットを実行可能であり得る。
プロセッサは、カリフォルニア州サンタクララ市のIntel Corporationから入手可能であるCore(商標)i3、i5、i7、2 DuoおよびQuad、Xeon(商標)、Itanium(商標)、XScale(商標)またはStrongARM(商標)プロセッサなどの汎用プロセッサであり得る。代替的に、プロセッサは、ARM Holding,Ltd、MIPS等などの他の企業からのものであり得る。プロセッサは、例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、コプロセッサ、組み込みプロセッサ、または同様のものなど特定用途向けプロセッサであり得る。プロセッサは、1または複数のチップ上で実装され得る。プロセッサ500は、例えば、BiCMOS、CMOS、またはNMOSなどの複数の処理技術のいずれかを用いる1または複数の基板の一部であり得、および/またはその上で実装され得る。
図6〜8は、プロセッサ500を含むのに適した例示的なシステムであり、他方、図9は、コア502の1または複数を含み得る例示的なシステムオンチップ(SoC)である。ラップトップ、デスクトップ、ハンドヘルドPC、携帯情報端末、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、組み込みプロセッサ、デジタル信号プロセッサ(DSP)、グラフィクスデバイス、ビデオゲーム機器、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレーヤ、ハンドヘルドデバイス、および様々な他の電子デバイスに関して当技術分野で公知の他の複数のシステム設計および構成も適している。概して、本明細書において開示されるプロセッサおよび/または他の実行ロジックを組み込み可能な、非常に多種多様なシステムまたは電子デバイスが一般的に適している。
ここで図6を参照すると、本願発明の一実施形態に係るシステム600のブロック図が示されている。システム600は、グラフィクスメモリコントローラハブ(GMCH)620に結合された1または複数のプロセッサ610、615を含み得る。追加のプロセッサ615がオプションであるという性質は、図6において、破線によって示されている。
各プロセッサ610、615は、プロセッサ500の何らかのバージョンであり得る。しかし、集積グラフィクスロジックおよび集積メモリ制御ユニットがプロセッサ610、615に存在するであろう可能性は低いであることに留意されるべきである。図6は、GMCH620が、例えば、ダイナミックランダムアクセスメモリ(DRAM)であり得るメモリ640に結合され得ることを示している。少なくとも1つの実施形態に関して、DRAMは不揮発性キャッシュに関連付けられ得る。
GMCH620はチップセットであり得、またはチップセットの一部であり得る。GMCH620は、(複数の)プロセッサ610、615と通信を行い、(複数の)プロセッサ610、615とメモリ640との間のインタラクションを制御し得る。GMCH620は、(複数の)プロセッサ610、615と、システム600の他の複数の要素との間の加速化されたバスインタフェースとしても動作し得る。少なくとも1つの実施形態に関して、GMCH620は、フロントサイドバス(FSB)695などのマルチドロップバスを介し、(複数の)プロセッサ610、615と通信を行う。
さらに、GMCH620は、ディスプレイ645(フラットパネルディスプレイなど)に結合されている。GMCH620は、集積グラフィクスアクセラレータを含み得る。GMCH620はさらに、様々な周辺デバイスをシステム600を結合するのに用いられ得る入出力(I/O)コントローラハブ(ICH)650に結合されている。図6の実施形態に例として示されているのは、他の周辺デバイス670と共に、ICH650に結合された別個のグラフィクスデバイスであり得る外部グラフィクスデバイス660である。
代替的に、追加の、または異なるプロセッサもシステム600に存在し得る。例えば、追加の(複数の)プロセッサ615は、プロセッサ610と同じである(複数の)追加のプロセッサ、プロセッサ610とは異種である、または非対称的な追加の(複数の)プロセッサ、アクセラレータ(例えば、グラフィクスアクセラレータまたはデジタル信号プロセッシング(DSP)ユニットなど)、フィールドプログラマブルゲートアレイ、または任意の他のプロセッサを含み得る。アーキテクチャ的、マイクロアーキテクチャ的、熱的、電力消費特性、および同様のものを含む様々な利点に関して、物理リソース610、615間では様々な違いがあり得る。これらの違いは、プロセッサ610、615間の非対称性および異種性として有効にそれら自身が現れ得る。少なくとも1つの実施形態に関して、様々なプロセッサ610、615が同じダイパッケージに存在し得る。
ここで図7を参照すると、本願発明の実施形態に係る第2システム700のブロック図が示されている。図7に示されるように、マルチプロセッサシステム700は、ポイントツーポイントインターコネクトシステムであり、ポイントツーポイントインターコネクト750を介して結合された第1のプロセッサ770と第2のプロセッサ780とを含む。プロセッサ770および780のそれぞれは、プロセッサ610、615の1または複数のとしてのプロセッサ500の何らかのバージョンであり得る。
2つのプロセッサ770、780でのみ示されているが、本願発明の範囲がそのように限定されないことは理解されよう。他の複数の実施形態において、1または複数の追加のプロセッサが任意のプロセッサに存在し得る。
プロセッサ770、780は、集積メモリコントローラユニット772、782をそれぞれ含むものとして示されている。また、プロセッサ770は自身のバスコントローラユニットの一部としてポイントツーポイント(P−P)インタフェース776、778を含み、同様に、第2のプロセッサ780は、P−Pインタフェース786および788を含む。プロセッサ770、780は、P−Pインタフェース回路778、788を用いてポイントツーポイント(P−P)インタフェース750を介して情報を交換し得る。図7に示されるように、IMC772、782は、複数のプロセッサを、複数のそれぞれのプロセッサにローカルに取り付けられたメインメモリの一部であり得る複数のそれぞれのメモリ、つまり、メモリ732およびメモリ734に結合する。
プロセッサ770、780はそれぞれ、ポイントツーポイントインタフェース回路776、794、786、798を用い、個々のP−Pインタフェース752、754を介し、チップセット790と情報を交換し得る。またチップセット790は、高性能グラフィクスインタフェース739を介し、高性能グラフィクス回路738と情報を交換し得る。
共有キャッシュ(図示されていない)は、プロセッサが低電力モードに入った場合に、片方または両方のプロセッサのローカルキャッシュ情報が共有キャッシュに格納され得るよう、いずれかのプロセッサに含まれ得る、または、両方のプロセッサの外部ではあるが、P−Pインターコネクトを介してプロセッサと接続され得る。
チップセット790は、インタフェース796を介して第1のバス716に結合され得る。一実施形態において、第1のバス716はPeripheral Component Interconnect(PCI)バス、またはPCI Expressバスなどのバス若しくは他の第3世代のI/Oインターコネクトバスであり得る。ただし、本願発明の範囲はそのように限定されない。
図7に示されるように、様々なI/Oデバイス714が、第1のバス716を第2のバス720に結合するバスブリッジ718と共に、第1のバス716に結合され得る。一実施形態において、第2のバス720はローピンカウント(LPC)バスであり得る。一実施形態において、例えば、キーボードおよび/またはマウス722、複数の通信デバイス727、および、命令/コードおよびデータ730を含み得るディスクドライブまたは他の大容量ストレージデバイスなどのストレージユニット728を含む様々なデバイスが第2のバス720に結合され得る。さらに、オーディオI/O724が、第2のバス720に結合され得る。なお、他の複数のアーキテクチャが可能である。例えば、図7のポイントツーポイントアーキテクチャの代わりに、システムはマルチドロップバス、または他のそのようなアーキテクチャを実装し得る。
ここで図8を参照すると、本願発明の実施形態に係る、第3のシステム800のブロック図が示されている。図7および図8において同様の要素には同様の参照番号が付与され、図8の他の複数の態様を曖昧にしてしまうことを避けるために図7の特定の態様は図8において省略されている。
図8は、プロセッサ870、880が、集積メモリおよびI/O制御ロジック(「CL」)872および882をそれぞれ含み得ることを示している。少なくとも1つの実施形態に関して、CL872、882は、図5および7との関連で上記にて説明されたものなどの複数の集積メモリコントローラユニットを含み得る。加えて、CL872、882は、I/O制御ロジックも含み得る。図8は、メモリ832、834がCL872、882に結合されていることのみでなく、I/Oデバイス814も制御ロジック872、882に結合されていることを示している。複数のレガシーI/Oデバイス815がチップセット890に結合されている。
ここで図9を参照すると、本願発明の実施形態に係るSoC900のブロック図が示されている。図5と同様の要素には同様の参照番号が付与される。また、破線の複数のボックスは、より進化したSoCにおけるオプションの複数の特徴である。図9において、インターコネクトユニット902は、1または複数のコア502A〜Nのセットおよび(複数の)共有キャッシュユニット506を含むアプリケーションプロセッサ910と、システムエージェントユニット510と、バスコントローラユニット516と、(複数の)集積メモリコントローラユニット514と、集積グラフィクスロジック508、静止および/またはビデオカメラ機能性を提供するための画像プロセッサ924、ハードウェアオーディオアクセラレーションを提供するためのオーディオプロセッサ926、およびビデオエンコード/デコードアクセラレーションを提供するためのビデオプロセッサ928を含み得る1または複数のメディアプロセッサ920のセットと、スタティックランダムアクセスメモリ(SRAM)ユニット930と、ダイレクトメモリアクセス(DMA)ユニット932と、1または複数の外部ディスプレイへの結合のためのディスプレイユニット940とに結合されている。
図10は、一実施形態に係る少なくとも1つの命令を実行し得る、中央処理装置(CPU)とグラフィクスプロセッシングユニット(GPU)とを含むプロセッサを示している。一実施形態において、少なくとも1つの実施形態に係る複数の演算を実行するための命令は、CPUにより実行され得る。他の実施形態において、命令はGPUにより実行され得る。さらに他の実施形態において、命令は、GPUとCPUとにより実行される複数の演算の組み合わせを通じて実行され得る。例えば、一実施形態において、一実施形態に係る命令は受信され、GPU上での実行のためにデコードされ得る。しかし、デコードされた命令内の1または複数の演算は、CPUにより実行され得、結果が、命令の最終的なリタイヤのためにGPUに戻され得る。逆に、いくつかの実施形態において、CPUはプライメアリプロセッサとして動作し得、GPUはコプロセッサとして動作し得る。
いくつかの実施形態において、高度に並列であるスループットプロセッサから恩恵を受ける複数の命令は、GPUにより実行され得、他方、深くパイプライン化されたアーキテクチャから恩恵を受ける複数のプロセッサの性能から恩恵を受ける複数の命令は、CPUにより実行され得る。例えば、グラフィクス、科学アプリケーション、財務アプリケーション、および他の並列ワークロードは、GPUの性能から恩恵を受け得、それに従って実行され得、他方、オペレーティングシステムカーネルまたはアプリケーションコードなどのよりシーケンシャルなアプリケーションは、CPUにより良好に適しているかもしれない。
図10において、プロセッサ1000は、CPU1005、GPU1010、画像プロセッサ1015、ビデオプロセッサ1020、USBコントローラ1025、UARTコントローラ1030、SPI/SDIOコントローラ1035、ディスプレイデバイス1040、High−Definition Multimedia Interface(HDMI(登録商標))コントローラ1045、MIPIコントローラ1050、フラッシュメモリコントローラ1055、デュアルデータレート(DDR)コントローラ1060、セキュリティエンジン1065、およびI2S/I2C(Integrated Interchip Sound/Inter−Integrated Circuit)インタフェース1070を含む。より多くのCPUまたはGPU、および他の複数の周辺インタフェースコントローラを含む他のロジックおよび複数の回路が、図10のプロセッサに含まれ得る。
少なくとも1つの実施形態の1または複数の態様は、マシンにより読み取られたときに当該マシンに、本明細書に説明されている複数の技術を実行するロジックを作らせる、プロセッサ内の様々なロジックを表すマシン可読媒体上に格納された代表的なデータにより実装され得る。「IPコア」として公知であるそのような表現は、有形のマシン可読媒体(「テープ」)上に格納され、実際にそのロジックまたはプロセッサを作成する製造マシンにロードする様々な顧客または製造施設へと供給され得る。例えば、ARM Holdings,Ltd.により開発されているCortex(商標)ファミリのプロセッサおよびChinese Academy of SciencesのInstitute of Computing Technology(ICT)により開発されているLoongson IPコアなどのIPコアは、Texas Instruments、Qualcomm、Apple、またはSamsungなどの様々な顧客またはライセンシーへとライセンスまたは販売され、これらの顧客またはライセンシーにより製造される複数のプロセッサにおいて実装され得る。
図11は、一実施形態に係るIPコアの開発を示しているブロック図である。ストレージ1130は、シミュレーションソフトウェア1120並びに/またはハードウェア若しくはソフトウェアモデル1110を含む。一実施形態において、IPコア設計を表すデータは、メモリ1140(例えば、ハードディスク)、有線接続(例えば、インターネット)1150、または無線接続1160を介し、ストレージ1130に提供され得る。シミュレーションツールおよびモデルにより生成されるIPコア情報は、少なくとも1つの実施形態に係る少なくとも1つの命令を実行するようそれが第三者によって製造される製造施設へと送信され得る。
いくつかの実施形態において、1または複数の命令は、第1のタイプのアーキテクチャ(例えば、x86)に対応し、異なるタイプのアーキテクチャ(例えば、ARM)のプロセッサ上で変換またはエミュレートされ得る。したがって一実施形態によると、命令は、ARM、x86、MIPS、GPU、または他のプロセッサタイプまたはアーキテクチャを含む任意のプロセッサまたはプロセッサタイプ上で実行され得る。
図12は、一実施形態によると、第1のタイプの命令が異なるタイプのプロセッサによりどのようにエミュレートされるかを示す。図12において、プログラム1205は、一実施形態に係る命令と同じである、または実質的に同じである機能を実行し得るいくつかの命令を含み得る。しかし、プログラム1205の複数の命令は、プロセッサ1215と異なる、または非互換であるタイプおよび/またはフォーマットのものであり得、このことは、プログラム1205におけるタイプの複数の命令は、プロセッサ1215によりネイティブに実行され得ないかもしれないことを意味している。しかし、エミュレートロジック1210の助けを得て、プログラム1205の複数の命令は、プロセッサ1215により実行がネイティブに可能である複数の命令へと変換される。一実施形態において、エミュレートロジックは、ハードウェアにおいて具現化される。他の実施形態において、エミュレートロジックは、プログラム1205におけるタイプの複数の命令をプロセッサ1215によりネイティブ実行可能なタイプに変換するソフトウェアを含む有形のマシン可読媒体において具現化される。他の複数の実施形態において、エミュレートロジックは、一定の機能の、またはプログラマブルハードウェアと、有形のマシン可読媒体上に格納されたプログラムとの組み合わせである。一実施形態において、プロセッサはエミュレートロジックを含み、他方、他の複数の実施形態において、エミュレートロジックは、プロセッサ外部に存在し、第三者により提供される。一実施形態において、プロセッサは、プロセッサに含まれる、またはそれに関連付けられたマイクロコードまたはファームウェアを実行することにより、ソフトウェアを含む有形のマシン可読媒体で具現化されるエミュレートロジックをロード可能である。
図13は、ソース命令セットにおける複数の二進数命令を変換するソフトウェア命令コンバータの使用を、本願発明の複数の実施形態に係るターゲット命令セットにおける複数の二進数命令と対比するブロック図である。例示されている実施形態において、命令コンバータはソフトウェア命令コンバータであるが、代替的に、命令コンバータは、ソフトウェア、ファームウェア、ハードウェア、またはこれらの様々な組み合わせで実装され得る。図13は、高水準言語1302のプログラムが、少なくとも1つのx86命令セットコアを有するプロセッサ1316によりネイティブに実行され得るx86二進コード1306を生成するx86コンパイラ1304を用いてコンパイルされ得ることを示す。少なくとも1つのx86命令セットコアを有するプロセッサ1316は、少なくとも1つのx86命令セットコアを備えるIntelプロセッサと実質的に同じ結果を得るために、(1)Intel x86命令セットコアの命令セットの実質的な部分、または、(2)少なくとも1つのx86命令セットコアを備えるIntelプロセッサで実行されることを目的とする複数のアプリケーションの複数のオブジェクトコードバージョンまたは他のソフトウェアを互換性を有した状態で実行する、またはそうでなければ処理することにより、少なくとも1つのx86命令セットコアを備えるIntelプロセッサと実質的に同じである複数の機能を実行出来る任意のプロセッサを表す。x86コンパイラ1304は、少なくとも1つのx86命令セットコアを有するプロセッサ1316上で追加のリンケージ処理あり、またはなしで実行され得るx86二進コード1306(例えば、オブジェクトコード)を生成するよう動作可能なコンパイラを表す。同様に、図13は、高水準言語1302のプログラムが、少なくとも1つのx86命令セットコアを有さないプロセッサ1314(例えば、カリフォルニア州サニーベール市のMIPS TechnologiesのMIPS命令セットを実行する、および/またはカリフォルニア州サニーベール市のARM HoldingsのARM命令セットを実行する複数のコアを有するプロセッサ)によってネイティブに実行され得る、代替的な命令セット二進コード1310を生成する代替的な命令セットコンパイラ1308を用いてコンパイルされ得ることを示す。命令コンバータ1312は、x86二進コード1306を、x86命令セットコアを有さないプロセッサ1314によってネイティブに実行され得るコードに変換するのに用いられる。この変換されたコードは、代替的な命令セット二進コード1310と同じとなる可能性は、このことが可能な命令コンバータの作成が難しいため低いが、しかし、変換されたコードは、一般的な演算を成し遂げ、代替的な命令セットからの複数の命令からなるであろう。したがって、命令コンバータ1312は、エミュレート、シミュレーションまたは任意の他の処理を介して、プロセッサ若しくはx86命令セットプロセッサまたはコアを有さない他の電子デバイスにx86二進コード1306を実行させるソフトウェア、ファームウェア、ハードウェアまたはこれらの組み合わせを表す。
図14は、命令を使用してSIMDベクトルポピュレーションカウント機能性を提供し得るゲノム配列決定および配列比較処理の例の一実施形態に関する図を示す。二重らせん1401は、水素結合により4種類の塩基のヌクレオチド(チミン、シトシン、アデニン、およびグアニン)の複数の塩基対を通じて互いに接続された糖リン酸主鎖の2つの逆平行に指向されたストランドを含む。塩基対(例えば、1410および1420)は、1402に示されるように糖リン酸主鎖に沿って複数のシーケンスに編成された1403などの複数のヌクレオチドから成る。例えば、塩基対1410は、グアニンヌクレオチド1412およびシトシンヌクレオチド1414から成り、塩基対1420は、チミンヌクレオチド1422およびアデニンヌクレオチド1424から成る。複数の一連のヌクレオチドは、コンピュータアプリケーションソフトウェア1404により(例えば、T、C、A、およびGの文字の列1442および1444として。および/または、塩基のヌクレオチドの一連の2ビットの、または場合によっては4ビットの圧縮されたエンコード1452および1454として)エンコード、格納、および処理される。
ヒトゲノムは大量の情報を表し、そのような大量の情報を格納することは通常、4種類の塩基のヌクレオチド(チミン、シトシン、アデニン、およびグアニン(T、C、A、G))をビットのペアとして表すことを伴う。ヒトゲノムにはおよそ30億の塩基対があり、1塩基当たり2ビットで(4つの選択肢)、ヒトゲノムはおよそ60億ビットまたはおよそ750MBの情報を有する(各染色体の1つのコピーを格納)。少なくとも中間的なフォーマットで、2ビットのデータにより塩基対の各塩基のヌクレオチドを表すのがより一般的な慣例であり得、この場合、およそU1.4GBの情報が必要とされる。複数のシーケンスを格納するための1つのフォーマットは、「packedDna」として知られている。1塩基当たり2ビットとしてパックされるDNA、またはデオキシリボ核酸は、二進の2ビット値、T=00、C=01、A=10、G=11として表される。第1の塩基は、バイトの最上位の2ビットにあり、最後の塩基は最下位の2ビットにある。例えば、TCAGというシーケンスは、二進法で00011011として表される(16進数の0x1B)。DNA配列決定技術は、高速かつ正確な配列比較プログラムを必要とする。例えば、Burrows−Wheeler Transformによる後方検索に基づく1つの技術は、様々なシーケンス長さに関して塩基のヌクレオチドの出現カウントの膨大なアレイをしばしばオンザフライで構築する。したがってヌクレオチドの出現を迅速にカウントすることは、性能およびメモリストレージ要件に実質的に影響を与え得る。
図15Aは、SIMDベクトルポピュレーションカウント機能性を提供する命令の使用に備えてのベクトルサブバイト解凍の例の一実施形態に関するフロー図を示す。処理1501および本明細書に開示されている他の複数の処理は、汎用マシンにより、または特定用途向けマシンにより、または両方の組み合わせにより実行可能な、専用ハードウェアまたはソフトウェアまたはファームウェア演算コードを含み得る複数の処理ブロックにより実行される。
示されている例は、要素当たりパックド2ビットのフォーマット(例えば、packedDnaなど)からバイト要素当たり8ビットのフォーマットへのベクトル解凍の例である。2は8を均等に分割するので、要素当たりパックド2ビットのフォーマットの各バイトは、4つの要素を含む−それぞれの可能な最初のビット配列の1つ。
処理1501のシャッフル処理ブロック1509において、ソース1512の、少なくとも1番目の2つのサブバイト要素aおよびeを含む1番目のバイト、ゼロ(0)、および2番目のバイト、1(1)は、ベクトル1515の第1のベクトル要素の最下位部分(例えば、32ビットベクトル要素)にシャッフルまたはコピーされる。少なくとも2番目の2つのサブバイト要素iおよびmを含む3番目のバイト、2(2)、および4番目のバイト、3(3)は、ベクトル1515の第1のベクトル要素の最上位部分にシャッフルまたはコピーされる。またシャッフル処理ブロック1509に示されているように、シフトに備えて、ソース1512の、少なくとも3番目の2つのサブバイト要素bおよびfを含む5番目のバイト、ゼロ(0)および6番目のバイト、1(1)は、ベクトル1515の第2のベクトル要素の最下位部分にシャッフルまたはコピーされ、少なくとも4番目の2つのサブバイト要素jおよびnを含む7番目のバイト、2(2)、および8番目のバイト、3(3)は、ベクトル1515の第2のベクトル要素の最上位部分にシャッフルまたはコピーされる。1番目の2つの、および2番目の2つのサブバイト要素は全て、同じ最初のビット配列を有するかもしれず、3番目の2つの、および4番目の2つのサブバイト要素も全て、同じ最初のビット配列を有するかもしれないことが理解されよう。またシャッフル処理ブロック1509に示されているように、ソース1512の、少なくとも5番目の2つのサブバイト要素cおよびgを含む9番目のバイト、ゼロ(0)、および10番目のバイト、1(1)は、ベクトル1515の第3のベクトル要素の最下位部分にシャッフルまたはコピーされ、少なくとも6番目の2つのサブバイト要素kおよびoを含む11番目のバイト、2(2)、および12番目のバイト、3(3)は、ベクトル1515の第3のベクトル要素の最上位部分にシャッフルまたはコピーされる。シフトに備えて、ソース1512の、少なくとも7番目の2つのサブバイト要素dおよびhを含む13番目のバイト、ゼロ(0)、および14番目のバイト、1(1)は、ベクトル1515の第4のベクトル要素の最下位部分にシャッフルまたはコピーされ、少なくとも8番目の2つのサブバイト要素lおよびpを含む15番目のバイト、2(2)、および16番目のバイト、3(3)は、ベクトル1515の第4のベクトル要素の最上位部分にシャッフルまたはコピーされる。
シフト処理ブロック1517において、1番目の2つの、および2番目の2つのサブバイト要素(すなわち、a、e、i、およびm)を保持するベクトル1515の第1のベクトル要素は、ベクトル1522における第1のシフトカウント、ゼロ(0)、だけシフトされ、3番目の2つの、および4番目の2つのサブバイト要素(すなわち、b、f、j、およびn)を保持する第2のベクトル要素は、第2のシフトカウント、2(2)だけシフトされ、5番目の2つの、および6番目の2つのサブバイト要素(すなわち、c、g、k、およびo)を保持する第3のベクトル要素は、第3のシフトカウント、4(4)だけシフトされ、7番目の2つの、および8番目の2つのサブバイト要素(すなわち、d、h、l、およびp)を保持する第4のベクトル要素は、第4のシフトカウント、6(6)だけシフトされて、それらサブバイト要素を、ベクトル1525におけるそれらのそれぞれのバイトの最下位ビットに合わせる。一実施形態において、これらのシフトは、ベクトル1515の32ビットベクトル要素に対して、複数のSIMDシフターにより共に実行される。代替的な複数の実施形態において、より小さい、またはより大きいシフトが代わりに用いられ得、それらシフトの全てが共に実行されなくてもよい。
シャッフル処理1528において、シフトされた第1、第2、第3および第4のベクトル要素の最下位のバイト位置のそれぞれからのバイトは、ベクトル1530の第1のベクトル要素(例えば、32ビットベクトル要素)にシャッフルまたはコピーされ、シフトされた第1、第2、第3および第4のベクトル要素の2番目に最下位のバイト位置のそれぞれからのバイトは、ベクトル1530の第2のベクトル要素にシャッフルまたはコピーされ、シフトされた第1、第2、第3および第4のベクトル要素の2番目に最上位のバイト位置のそれぞれからのバイトは、ベクトル1530の第3のベクトル要素にシャッフルまたはコピーされ、シフトされた第1、第2、第3および第4のベクトル要素の最上位のバイト位置のそれぞれからのバイトは、ベクトル1530の第4のベクトル要素にシャッフルまたはコピーされて、それらのオリジナルのサブバイト順が復元される。一実施形態において、シャッフルまたはコピーは、SIMDベクトルサブバイト解凍機能性を提供する1または複数の命令をデコードすることにより生成される単一のマイクロ演算またはマイクロopに従って複数のSIMDシャッフラーにより共に実行され得る。代替的な複数の実施形態において、シャッフルまたはコピーは、1より多くのマイクロ演算またはマイクロopに従って複数のSIMDシャッフラーまたは他の複数のSIMD実行ユニットによっても実行され得る。
AND処理ブロック1542において、ベクトル1530の各バイトの複数の最上位ビットが(例えば、ベクトル1541を用いて)補正またはマスキングされる。一実施形態において、示されているように、それら複数のビットを補正することにより、6ビットが、32ビットベクトル要素の各バイトにおいてゼロに設定される。いくつかの実施形態において、処理1501のSIMDベクトルサブバイト解凍は、一連のマクロ命令若しくはマイクロコード命令として、または両方の組み合わせとして実装され得る。
図15Bは、SIMDベクトルポピュレーションカウント機能性を提供する命令の使用に備えてのベクトルサブバイト解凍の例示的な処理1502の代替的な実施形態に関するフロー図を示す。
示されている例は、要素当たりパックド4ビットのフォーマットからバイト要素当たり8ビットのフォーマットへのベクトル解凍の例である。4も8を均等に分割するので、要素当たりパックド4ビットのフォーマットの各バイトは、2つの要素を含む−それぞれの可能な最初のビット配列の1つ。
処理1502のシャッフル処理ブロック1510において、ソース1514の、少なくとも1番目の2つのサブバイト要素aおよびeを含む1番目のバイト、ゼロ(0)、および2番目のバイト、2(2)は、ベクトル1515の第1のベクトル要素の最下位部分(例えば、32ビットベクトル要素)にシャッフルまたはコピーされる。少なくとも2番目の2つのサブバイト要素iおよびmを含む3番目のバイト、4(4)、および4番目のバイト、6(6)は、ベクトル1515の第1のベクトル要素の最上位部分にシャッフルまたはコピーされる。またシャッフル処理ブロック1510に示されているように、シフトに備えて、ソース1514の、少なくとも3番目の2つのサブバイト要素bおよびfを含む5番目のバイト、ゼロ(0)および6番目のバイト、2(2)は、ベクトル1515の第2のベクトル要素の最下位部分にシャッフルまたはコピーされ、少なくとも4番目の2つのサブバイト要素jおよびnを含む7番目のバイト、4(4)、および8番目のバイト、6(6)は、ベクトル1515の第2のベクトル要素の最上位部分にシャッフルまたはコピーされる。1番目の2つの、および2番目の2つのサブバイト要素は全て、同じ最初のビット配列を有するかもしれず、3番目の2つの、および4番目の2つのサブバイト要素も全て、同じ最初のビット配列を有するかもしれないことが理解されよう。またシャッフル処理ブロック1510に示されているように、ソース1514の、少なくとも5番目の2つのサブバイト要素cおよびgを含む9番目のバイト、1(1)、および10番目のバイト、3(3)は、ベクトル1515の第3のベクトル要素の最下位部分にシャッフルまたはコピーされ、少なくとも6番目の2つのサブバイト要素kおよびoを含む11番目のバイト、5(5)、および12番目のバイト、7(7)は、ベクトル1515の第3のベクトル要素の最上位部分にシャッフルまたはコピーされる。シフトに備えて、ソース1514の、少なくとも7番目の2つのサブバイト要素dおよびhを含む13番目のバイト、1(1)、および14番目のバイト、3(3)は、ベクトル1515の第4のベクトル要素の最下位部分にシャッフルまたはコピーされ、少なくとも8番目の2つのサブバイト要素lおよびpを含む15番目のバイト、5(5)、および16番目のバイト、7(7)は、ベクトル1515の第4のベクトル要素の最上位部分にシャッフルまたはコピーされる。
シフト処理ブロック1518において、1番目の2つの、および2番目の2つのサブバイト要素(すなわち、a、e、i、およびm)を保持するベクトル1515の第1のベクトル要素は、ベクトル1522における第1のシフトカウント、ゼロ(0)、だけシフトされ、3番目の2つの、および4番目の2つのサブバイト要素(すなわち、b、f、j、およびn)を保持する第2のベクトル要素は、第2のシフトカウント、4(4)だけシフトされ、5番目の2つの、および6番目の2つのサブバイト要素(すなわち、c、g、k、およびo)を保持する第3のベクトル要素は、第3のシフトカウント、ゼロ(0)だけシフトされ、7番目の2つの、および8番目の2つのサブバイト要素(すなわち、d、h、l、およびp)を保持する第4のベクトル要素は、第4のシフトカウント、4(4)だけシフトされて、それらサブバイト要素を、ベクトル1525におけるそれらのそれぞれのバイトの最下位ビットに合わせる。一実施形態において、これらのシフトは、ベクトル1515の32ビットベクトル要素に対して、複数のSIMDシフターにより共に実行される。代替的な複数の実施形態において、より小さい、またはより大きいシフトが代わりに用いられ得、それらシフトの全てが共に実行されなくてもよい。
シャッフル処理1528において、シフトされた第1、第2、第3および第4のベクトル要素の最下位のバイト位置のそれぞれからのバイトは、ベクトル1530の第1のベクトル要素(例えば、32ビットベクトル要素)にシャッフルまたはコピーされ、シフトされた第1、第2、第3および第4のベクトル要素の2番目に最下位のバイト位置のそれぞれからのバイトは、ベクトル1530の第2のベクトル要素にシャッフルまたはコピーされ、シフトされた第1、第2、第3および第4のベクトル要素の2番目に最上位のバイト位置のそれぞれからのバイトは、ベクトル1530の第3のベクトル要素にシャッフルまたはコピーされ、シフトされた第1、第2、第3および第4のベクトル要素の最上位のバイト位置のそれぞれからのバイトは、ベクトル1530の第4のベクトル要素にシャッフルまたはコピーされて、それらのオリジナルのサブバイト順が復元される。一実施形態において、シャッフルまたはコピーは、SIMDベクトルサブバイト解凍機能性を提供する1または複数の命令をデコードすることにより生成される単一のマイクロ演算またはマイクロopに従って複数のSIMDシャッフラーにより共に実行され得る。代替的な複数の実施形態において、シャッフルまたはコピーは、1より多くのマイクロ演算またはマイクロopに従って複数のSIMDシャッフラーまたは他の複数のSIMD実行ユニットによっても実行され得る。
AND処理ブロック1544において、ベクトル1530の各バイトの複数の最上位ビットが(例えば、ベクトル1543を用いて)補正またはマスキングされる。一実施形態において、示されているように、それら複数のビットを補正することにより、4ビットが、32ビットベクトル要素の各バイトにおいてゼロに設定される。いくつかの実施形態において、処理1502のSIMDベクトルサブバイト解凍は、一連のマクロ命令若しくはマイクロコード命令として、または両方の組み合わせとして実装され得る。
処理1501および1502が、パックドバイトデータのためにSIMDベクトルポピュレーションカウント機能性を提供する命令を実行する前に特に有用であることが理解されよう。他方、パックド2ビットデータフォーマットのために、またはパックド4ビットデータフォーマットのために直接的にSIMDベクトルポピュレーションカウント機能性が提供する命令がサポートされているとき、処理1501および1502の処理は不必要になり得る。
図16Aは、命令を実行してSIMDベクトルポピュレーションカウント機能性を提供するための装置の実施形態を示す。
装置1601の複数の実施形態は、SIMDポピュレーションカウント機能性を提供する命令の実行のためのパイプライン400の一部(例えば、実行ステージ416)、またはコア490の一部(例えば、(複数の)実行ユニット462)であり得る。装置1601の複数の実施形態は、1または複数の可変の複数のn個の可変のサイズのデータ要素の複数の値を格納する1または複数の可変の複数のn個の可変のサイズのデータフィールドをそれぞれが含む複数のベクトルレジスタ(例えば、(複数の)物理レジスタファイルユニット458)に結合され得る。装置1601の複数の実施形態は、ベクトルポピュレーションカウント演算およびパックドデータサイズを(例えば、それ自体の記憶を助ける命令の一部として、またはオペランドとして、または制御レジスタにおいて)指定する命令をデコードするデコードステージ(例えば、デコード406)またはデコーダ(例えば、デコードユニット440)にも結合され得る。1または複数の実行ユニット(例えば、実行装置1601)は、デコードされた命令に応答し、指定されたパックドデータサイズに従って、(例えば、メモリに、またはレジスタに格納された)ソースベクトル1612の一部における各パックドデータフィールドの複数のビットを読み取り得る。ここで、ソースベクトルの当該一部における第1の複数のパックドデータフィールドのそれぞれは、指定されたパックドデータサイズに従って複数のビットを格納することになる。装置1601の例において示されている一実施形態において、第1の複数のパックドデータフィールドのそれぞれに格納されている複数のビットは2つである。代替的な複数の実施形態において、何らかの他の複数のビットが、第1の複数のパックドデータフィールドのそれぞれに格納され得る。
例えば、装置1601において、ソースベクトル1612の一部における各パックドデータフィールドが、第2の複数の2ビットを格納することになるよう、複数のパックドデータフィールドが、ソースベクトル1612の第1の複数のn個のデータフィールドの1または複数の部分のそれぞれに格納される。処理ブロック1620において、SIMD 2ビットポピュレーションカウント演算のための命令がプロセッサにおいて実行されたことに応答して、ソースベクトル1612のn個のデータフィールドのこの一部における複数のパックドデータフィールドが読み取られ、予め定められた値(例えば、二進数00)に等しい複数の値の複数の出現が、まず、その予め定められた値との等しさに関してこの一部における複数のパックドデータフィールドから読み取られた複数の値を比較し、そして、POP1630カウンタにおいて等しい数をカウントすることによりカウントされる。SIMD 2ビットポピュレーションカウントのための命令の一実施形態において、予め定められた値(例えば、二進数00)は、即値オペランドとして命令により指定され得る。他の実施形態において、予め定められた値は、複数の値の予め定められた一定のセット1642の1つであり得る。他の実施形態において、予め定められた値は、レジスタオペランドにおいて1または複数の要素として命令により指定される複数の値のセット1642の1つであり得る。処理ブロック1620の結果、予め定められた値(例えば、二進数00)に等しいカウントされた複数の出現は、ソースベクトル1612のn個のデータフィールドの一部に対応する宛て先1652の一部に、対応する1または複数の予め定められた値(例えば、1642)のそれぞれ毎に1または複数のカウントとして格納され得る。
オプションで、処理ブロック1621において、SIMD 2ビットポピュレーションカウント演算のための命令が実行されることにさらに応答して、第2のオプションの予め定められた値(例えば、二進数01)に等しいソースベクトル1612のn個のデータフィールドのこの一部における複数のパックドデータフィールドにおける複数の値の複数の出現が、まず、第2の予め定められた値との等しさに関してこの一部における複数のパックドデータフィールドから読み取られた複数の値を比較し、そして、POP1631カウンタにおいて等しい数をカウントすることによりカウントされる。SIMD 2ビットポピュレーションカウントのための命令の一実施形態において、第2のオプションの予め定められた値(例えば、二進数01)は、即値オペランドの一部として命令により指定され得る。他の実施形態において、第2の予め定められた値は、複数の値の予め定められた一定のセット1642の1つでもあり得る。他の実施形態において、第2の予め定められた値は、レジスタオペランドにおいて1または複数の要素として命令により指定される複数の値のセット1642の1つでもあり得る。また処理ブロック1621の結果、第2の予め定められた値(例えば、二進数01)に等しいカウントされた複数の出現は、ソースベクトル1612のn個のデータフィールドの一部に対応する宛て先1652の一部に、対応する1または複数の予め定められた値(例えば、1642)のそれぞれ毎に1または複数のカウントとして格納され得る。
オプションで、処理ブロック1622において、SIMD 2ビットポピュレーションカウント演算のための命令が実行されることにさらに応答して、第3のオプションの予め定められた値(例えば、二進数10)に等しいソースベクトル1612のn個のデータフィールドのこの一部における複数のパックドデータフィールドにおける複数の値の複数の出現が、まず、第3の予め定められた値との等しさに関してこの一部における複数のパックドデータフィールドから読み取られた複数の値を比較し、そして、POP1632カウンタにおいて等しい数をカウントすることによりカウントされる。SIMD 2ビットポピュレーションカウントのための命令の一実施形態において、第3のオプションの予め定められた値(例えば、二進数10)は、即値オペランドの一部として命令により指定され得る。他の実施形態において、第3の予め定められた値は、複数の値の予め定められた一定のセット1642の1つでもあり得る。他の実施形態において、第3の予め定められた値は、レジスタオペランドにおいて1または複数の要素として命令により指定される複数の値のセット1642の1つでもあり得る。また処理ブロック1622の結果、第3の予め定められた値(例えば、二進数10)に等しいカウントされた複数の出現は、ソースベクトル1612のn個のデータフィールドの一部に対応する宛て先1652の一部に、対応する1または複数の予め定められた値(例えば、1642)のそれぞれ毎に1または複数のカウントとして格納され得る。
オプションで、処理ブロック1623において、SIMD 2ビットポピュレーションカウント演算のための命令が実行されることにさらに応答して、第4のオプションの予め定められた値(例えば、二進数11)に等しいソースベクトル1612のn個のデータフィールドのこの一部における複数のパックドデータフィールドにおける複数の値の複数の出現が、まず、第4の予め定められた値との等しさに関してこの一部における複数のパックドデータフィールドから読み取られた複数の値を比較し、そして、POP1633カウンタにおいて等しい数をカウントすることによりカウントされる。SIMD 2ビットポピュレーションカウントのための命令の一実施形態において、第4のオプションの予め定められた値(例えば、二進数11)は、即値オペランドの一部として命令により指定され得る。他の実施形態において、第4の予め定められた値は、複数の値の予め定められた一定のセット1642の1つでもあり得る。他の実施形態において、第4の予め定められた値は、レジスタオペランドにおいて1または複数の要素として命令により指定される複数の値のセット1642の1つでもあり得る。また処理ブロック1623の結果、第4の予め定められた値(例えば、二進数11)に等しいカウントされた複数の出現は、ソースベクトル1612のn個のデータフィールドの一部に対応する宛て先1652の一部に、対応する1または複数の予め定められた値(例えば、1642)のそれぞれ毎に1または複数のカウントとして格納され得る。
複数のSIMDポピュレーションカウント命令が、ゲノム配列決定および配列比較処理のために用いられ得ることが理解されよう。同様の複数の圧縮スキームが、他のデータベース、データマイニングアプリケーション、および検索アプリケーションも複数のSIMDポピュレーションカウント命令を用い得るようこれらのアプリケーションにおいてもより一般的に使用される。
ゲノム配列比較における一般的な演算は、塩基対の複数の列に一致させる、または部分的に一致させるために列内の複数のヌクレオチドの複数の出現をカウントすることである。パックドデータフォーマット(packedDnaなど)では、列内の異なるヌクレオチドの複数の出現をカウントするために、複数のシフトおよびマスク演算と併せた複数のルックアップテーブルの使用を他の場合においては伴い得る技術は、代わりに複数のSIMDポピュレーションカウント命令を用い得る。複数のSIMDポピュレーションカウント命令を用いることにより、列内の異なるヌクレオチドの複数の出現をカウントするために以前まで必要とされていた複数の演算の多くは取り除かれ得る。したがって、ゲノム配列決定および配列比較処理などの複数のアプリケーション、および、より一般的にデータマイニングなどの複数のデータベースアプリケーションおよび検索アプリケーションの性能は、実質的に改善され得る。
図16Bは、命令を実行してSIMDベクトルポピュレーションカウント機能性を提供するための装置1602の代替的な実施形態を示す。装置1602の複数の実施形態も、SIMDポピュレーションカウント機能性を提供する命令の実行のためのパイプライン400の一部(例えば、実行ステージ416)、またはコア490の一部(例えば、(複数の)実行ユニット462)であり得る。装置1602の複数の実施形態は、1または複数の可変の複数のn個の可変のサイズのデータ要素の複数の値を格納する1または複数の可変の複数のn個の可変のサイズのデータフィールドをそれぞれが含む複数のベクトルレジスタ(例えば、(複数の)物理レジスタファイルユニット458)に結合され得る。装置1602の複数の実施形態は、ベクトルポピュレーションカウント演算およびパックドデータサイズを(例えば、それ自体の記憶を助ける命令の一部として、またはオペランドとして、または制御レジスタにおいて)指定する命令をデコードするデコードステージ(例えば、デコード406)またはデコーダ(例えば、デコードユニット440)にも結合され得る。1または複数の実行ユニット(例えば、実行装置1602)は、デコードされた命令に応答し、指定されたパックドデータサイズに従って、(例えば、メモリに、またはレジスタに格納された)ソースベクトル1612の一部における各パックドデータフィールドの複数のビットを読み取り得る。ここで、ソースベクトルの当該一部における第1の複数のパックドデータフィールドのそれぞれは、指定されたパックドデータサイズに従って複数のビットを格納することになる。装置1602の例において示されている一実施形態において、第1の複数のパックドデータフィールドのそれぞれに格納されている複数のビットは4ビットである。代替的な複数の実施形態において、何らかの他の複数のビットが、第1の複数のパックドデータフィールドのそれぞれに格納され得る。
例えば、装置1602において、ソースベクトル1614の一部における各パックドデータフィールドが、第2の複数の4ビットを格納することになるよう、複数のパックドデータフィールドが、ソースベクトル1614の第1の複数のn個のデータフィールドの1または複数の部分のそれぞれに格納される。処理ブロック1640において、SIMD 4ビットポピュレーションカウント演算のための命令がプロセッサにおいて実行されたことに応答して、ソースベクトル1614のn個のデータフィールドのこの一部における複数のパックドデータフィールドが読み取られ、予め定められた値(例えば、T)に等しい複数の値の複数の出現が、まず、その予め定められた値との等しさに関してこの一部における複数のパックドデータフィールドから読み取られた複数の値を比較し、そして、POP1630カウンタにおいて等しい数をカウントすることによりカウントされる。SIMD 4ビットポピュレーションカウントのための命令の一実施形態において、予め定められた値(例えば、T)は、即値オペランドとして命令により指定され得る。他の実施形態において、予め定められた値は、複数の値の予め定められた一定のセット1644の1つであり得る。他の実施形態において、予め定められた値は、レジスタオペランドにおいて1または複数の要素として命令により指定される複数の値のセット1644の1つであり得る。処理ブロック1640の結果、予め定められた値(例えば、T)に等しいカウントされた複数の出現は、ソースベクトル1614のn個のデータフィールドの一部に対応する宛て先1654の一部に、対応する1または複数の予め定められた値(例えば、1644)のそれぞれ毎に1または複数のカウントとして格納され得る。
オプションで、処理ブロック1641において、SIMD 4ビットポピュレーションカウント演算のための命令が実行されることにさらに応答して、第2のオプションの予め定められた値(例えば、C)に等しいソースベクトル1614のn個のデータフィールドのこの一部における複数のパックドデータフィールドにおける複数の値の複数の出現が、まず、第2の予め定められた値との等しさに関してこの一部における複数のパックドデータフィールドから読み取られた複数の値を比較し、そして、POP1631カウンタにおいて等しい数をカウントすることによりカウントされる。SIMD 4ビットポピュレーションカウントのための命令の一実施形態において、第2のオプションの予め定められた値(例えば、C)は、即値オペランドの一部として命令により指定され得る。他の実施形態において、第2の予め定められた値は、複数の値の予め定められた一定のセット1644の1つでもあり得る。他の実施形態において、第2の予め定められた値は、レジスタオペランドにおいて1または複数の要素として命令により指定される複数の値のセット1644の1つでもあり得る。また処理ブロック1641の結果、第2の予め定められた値(例えば、C)に等しいカウントされた複数の出現は、ソースベクトル1614のn個のデータフィールドの一部に対応する宛て先1654の一部に、対応する1または複数の予め定められた値(例えば、1644)のそれぞれ毎に1または複数のカウントとして格納され得る。
オプションで、処理ブロック1642において、SIMD 4ビットポピュレーションカウント演算のための命令が実行されることにさらに応答して、第3のオプションの予め定められた値(例えば、A)に等しいソースベクトル1614のn個のデータフィールドのこの一部における複数のパックドデータフィールドにおける複数の値の複数の出現が、まず、第3の予め定められた値との等しさに関してこの一部における複数のパックドデータフィールドから読み取られた複数の値を比較し、そして、POP1632カウンタにおいて等しい数をカウントすることによりカウントされる。SIMD 4ビットポピュレーションカウントのための命令の一実施形態において、第3のオプションの予め定められた値(例えば、A)は、即値オペランドの一部として命令により指定され得る。他の実施形態において、第3の予め定められた値は、複数の値の予め定められた一定のセット1644の1つでもあり得る。他の実施形態において、第3の予め定められた値は、レジスタオペランドにおいて1または複数の要素として命令により指定される複数の値のセット1644の1つでもあり得る。また処理ブロック1642の結果、第3の予め定められた値(例えば、A)に等しいカウントされた複数の出現は、ソースベクトル1614のn個のデータフィールドの一部に対応する宛て先1654の一部に、対応する1または複数の予め定められた値(例えば、1644)のそれぞれ毎に1または複数のカウントとして格納され得る。
オプションで、処理ブロック1643において、SIMD 4ビットポピュレーションカウント演算のための命令が実行されることにさらに応答して、第4のオプションの予め定められた値(例えば、G)に等しいソースベクトル1614のn個のデータフィールドのこの一部における複数のパックドデータフィールドにおける複数の値の複数の出現が、まず、第4の予め定められた値との等しさに関してこの一部における複数のパックドデータフィールドから読み取られた複数の値を比較し、そして、POP1633カウンタにおいて等しい数をカウントすることによりカウントされる。SIMD 4ビットポピュレーションカウントのための命令の一実施形態において、第4のオプションの予め定められた値(例えば、G)は、即値オペランドの一部として命令により指定され得る。他の実施形態において、第4の予め定められた値は、複数の値の予め定められた一定のセット1644の1つでもあり得る。他の実施形態において、第4の予め定められた値は、レジスタオペランドにおいて1または複数の要素として命令により指定される複数の値のセット1644の1つでもあり得る。また処理ブロック1643の結果、第4の予め定められた値(例えば、G)に等しいカウントされた複数の出現は、ソースベクトル1614のn個のデータフィールドの一部に対応する宛て先1654の一部に、対応する1または複数の予め定められた値(例えば、1644)のそれぞれ毎に1または複数のカウントとして格納され得る。
図16Cは、命令を実行してSIMDベクトルポピュレーションカウント機能性を提供するための装置1603の他の代替的な実施形態を示す。装置1603の複数の実施形態も、SIMDポピュレーションカウント機能性を提供する命令の実行のためのパイプライン400の一部(例えば、実行ステージ416)、またはコア490の一部(例えば、(複数の)実行ユニット462)であり得る。装置1603の複数の実施形態は、1または複数の可変の複数のn個の可変のサイズのデータ要素の複数の値を格納する1または複数の可変の複数のn個の可変のサイズのデータフィールドをそれぞれが含む複数のベクトルレジスタ(例えば、(複数の)物理レジスタファイルユニット458)に結合され得る。装置1603の複数の実施形態は、ベクトルポピュレーションカウント演算およびパックドデータサイズを(例えば、それ自体の記憶を助ける命令の一部として、またはオペランドとして、または制御レジスタにおいて)指定する命令をデコードするデコードステージ(例えば、デコード406)またはデコーダ(例えば、デコードユニット440)にも結合され得る。1または複数の実行ユニット(例えば、実行装置1603)は、デコードされた命令に応答し、指定されたパックドデータサイズに従って、(例えば、メモリに、またはレジスタに格納された)ソースベクトル1618の一部における各パックドデータフィールドの複数のビットを読み取り得る。ここで、ソースベクトルの当該一部における第1の複数のパックドデータフィールドのそれぞれは、指定されたパックドデータサイズに従って複数のビットを格納することになる。装置1603の例において示されている一実施形態において、第1の複数のパックドデータフィールドのそれぞれに格納されている複数のビットは8ビットである。代替的な複数の実施形態において、何らかの他の複数のビットが、第1の複数のパックドデータフィールドのそれぞれに格納され得る。
例えば、装置1603において、ソースベクトル1618の一部における各パックドデータフィールドが、第2の複数の8ビットを格納することになるよう、複数のパックドデータフィールドが、ソースベクトル1618の第1の複数のn個のデータフィールドの1または複数の部分のそれぞれに格納される。処理ブロック1680において、SIMD 8ビットポピュレーションカウント演算のための命令がプロセッサにおいて実行されたことに応答して、ソースベクトル1618のn個のデータフィールドのこの一部における複数のパックドデータフィールドが読み取られ、予め定められた値(例えば、0x58)に等しい複数の値の複数の出現が、まず、その予め定められた値との等しさに関してこの一部における複数のパックドデータフィールドから読み取られた複数の値を比較し、そして、POP1630カウンタにおいて等しい数をカウントすることによりカウントされる。SIMD 8ビットポピュレーションカウントのための命令の一実施形態において、予め定められた値(例えば、0x58)は、即値オペランドとして命令により指定され得る。他の実施形態において、予め定められた値は、複数の値の予め定められた一定のセット1644の1つであり得る。他の実施形態において、予め定められた値は、レジスタオペランドにおいて1または複数の要素として命令により指定される複数の値のセット1644の1つであり得る。処理ブロック1680の結果、予め定められた値(例えば、0x58)に等しいカウントされた複数の出現は、ソースベクトル1618のn個のデータフィールドの一部に対応する宛て先1654の一部に、対応する1または複数の予め定められた値(例えば、1644)のそれぞれ毎に1または複数のカウントとして格納され得る。
オプションで、処理ブロック1681において、SIMD 8ビットポピュレーションカウント演算のための命令が実行されることにさらに応答して、第2のオプションの予め定められた値(例えば、0x43)に等しいソースベクトル1618のn個のデータフィールドのこの一部における複数のパックドデータフィールドにおける複数の値の複数の出現が、まず、第2の予め定められた値との等しさに関してこの一部における複数のパックドデータフィールドから読み取られた複数の値を比較し、そして、POP1631カウンタにおいて等しい数をカウントすることによりカウントされる。SIMD 8ビットポピュレーションカウントのための命令の一実施形態において、第2のオプションの予め定められた値(例えば、0x43)は、即値オペランドの一部として命令により指定され得る。他の実施形態において、第2の予め定められた値は、複数の値の予め定められた一定のセット1644の1つでもあり得る。他の実施形態において、第2の予め定められた値は、レジスタオペランドにおいて1または複数の要素として命令により指定される複数の値のセット1644の1つでもあり得る。また処理ブロック1681の結果、第2の予め定められた値(例えば、0x43)に等しいカウントされた複数の出現は、ソースベクトル1618のn個のデータフィールドの一部に対応する宛て先1654の一部に、対応する1または複数の予め定められた値(例えば、1644)のそれぞれ毎に1または複数のカウントとして格納され得る。
オプションで、処理ブロック1682において、SIMD 8ビットポピュレーションカウント演算のための命令が実行されることにさらに応答して、第3のオプションの予め定められた値(例えば、0x41)に等しいソースベクトル1618のn個のデータフィールドのこの一部における複数のパックドデータフィールドにおける複数の値の複数の出現が、まず、第3の予め定められた値との等しさに関してこの一部における複数のパックドデータフィールドから読み取られた複数の値を比較し、そして、POP1632カウンタにおいて等しい数をカウントすることによりカウントされる。SIMD 8ビットポピュレーションカウントのための命令の一実施形態において、第3のオプションの予め定められた値(例えば、0x41)は、即値オペランドの一部として命令により指定され得る。他の実施形態において、第3の予め定められた値は、複数の値の予め定められた一定のセット1644の1つでもあり得る。他の実施形態において、第3の予め定められた値は、レジスタオペランドにおいて1または複数の要素として命令により指定される複数の値のセット1644の1つでもあり得る。また処理ブロック1682の結果、第3の予め定められた値(例えば、0x41)に等しいカウントされた複数の出現は、ソースベクトル1618のn個のデータフィールドの一部に対応する宛て先1654の一部に、対応する1または複数の予め定められた値(例えば、1644)のそれぞれ毎に1または複数のカウントとして格納され得る。
オプションで、処理ブロック1683において、SIMD 8ビットポピュレーションカウント演算のための命令が実行されることにさらに応答して、第4のオプションの予め定められた値(例えば、0x47)に等しいソースベクトル1618のn個のデータフィールドのこの一部における複数のパックドデータフィールドにおける複数の値の複数の出現が、まず、第4の予め定められた値との等しさに関してこの一部における複数のパックドデータフィールドから読み取られた複数の値を比較し、そして、POP1633カウンタにおいて等しい数をカウントすることによりカウントされる。SIMD 8ビットポピュレーションカウントのための命令の一実施形態において、第4のオプションの予め定められた値(例えば、0x47)は、即値オペランドの一部として命令により指定され得る。他の実施形態において、第4の予め定められた値は、複数の値の予め定められた一定のセット1644の1つでもあり得る。他の実施形態において、第4の予め定められた値は、レジスタオペランドにおいて1または複数の要素として命令により指定される複数の値のセット1644の1つでもあり得る。また処理ブロック1683の結果、第4の予め定められた値(例えば、0x47)に等しいカウントされた複数の出現は、ソースベクトル1618のn個のデータフィールドの一部に対応する宛て先1654の一部に、対応する1または複数の予め定められた値(例えば、1644)のそれぞれ毎に1または複数のカウントとして格納され得る。
図16Dは、命令を実行してSIMDベクトルポピュレーションカウント機能性を提供するための装置1604の他の代替的な実施形態を示す。装置1604の複数の実施形態も、SIMDポピュレーションカウント機能性を提供する命令の実行のためのパイプライン400の一部(例えば、実行ステージ416)、またはコア490の一部(例えば、(複数の)実行ユニット462)であり得る。装置1604の複数の実施形態は、1または複数の可変の複数のn個の可変のサイズのデータ要素の複数の値を格納する1または複数の可変の複数のn個の可変のサイズのデータフィールドをそれぞれが含む複数のベクトルレジスタ(例えば、(複数の)物理レジスタファイルユニット458)に結合され得る。装置1604の複数の実施形態は、ベクトルポピュレーションカウント演算およびパックドデータサイズを(例えば、それ自体の記憶を助ける命令の一部として、またはオペランドとして、または制御レジスタにおいて)指定する命令をデコードするデコードステージ(例えば、デコード406)またはデコーダ(例えば、デコードユニット440)にも結合され得る。1または複数の実行ユニット(例えば、実行装置1604)は、デコードされた命令に応答し、指定されたパックドデータサイズに従って、(例えば、メモリに、またはレジスタに格納された)ソースベクトル1618の一部における各パックドデータフィールドの複数のビットを読み取り得る。ここで、ソースベクトルの当該一部における第1の複数のパックドデータフィールドのそれぞれは、指定されたパックドデータサイズに従って複数のビットを格納することになる。装置1604の例において示されている一実施形態において、第1の複数のパックドデータフィールドのそれぞれに格納されている複数のビットは8ビットである。代替的な複数の実施形態において、何らかの他の複数のビットが、第1の複数のパックドデータフィールドのそれぞれに格納され得る。
例えば、装置1604において、ソースベクトル1618の一部における各パックドデータフィールドが、複数の8ビットを格納することになるよう、複数のパックドデータフィールドが、ソースベクトル1618の複数のn個のデータフィールドの1または複数の部分のそれぞれに格納される。処理ブロック1684において、SIMD 8ビットポピュレーションカウント演算のための命令の一実施形態がプロセッサにおいて実行されたことに応答して、ソースベクトル1618のn個のデータフィールドの一部(例えば、最下位部分)における複数のパックドデータフィールドが読み取られ、予め定められた値(例えば、0x58)に等しい複数の値の複数の出現が、まず、その予め定められた値との等しさに関してこの一部における複数のパックドデータフィールドから読み取られた複数の値を比較し、そして、POP1634カウンタにおいて等しい数をカウントすることによりカウントされる。SIMD 8ビットポピュレーションカウントのための命令の一実施形態において、予め定められた値(例えば、0x58)は、即値オペランドとして命令により指定され得る。他の実施形態において、予め定められた値は、レジスタオペランドにおいて1または複数の要素として命令により指定される複数の値のセット1644の1つであり得る。処理ブロック1684の結果、予め定められた値(例えば、0x58)に等しいカウントされた(例えば、最下位部分における)複数の出現は、ソースベクトル1618のn個のデータフィールドの一部に対応する宛て先1654の一部に、対応する1または複数の予め定められた値(例えば、0x58)に関して1または複数のカウントとして格納され得る。
処理ブロック1685において、SIMD 8ビットポピュレーションカウント演算のための命令が実行されることにさらに応答して、第2のオプションの予め定められた値(例えば、0x43)に等しいソースベクトル1618のn個のデータフィールドの一部(例えば、2番目の最下位部分)における複数のパックドデータフィールドにおける複数の値の複数の出現が、まず、第2の予め定められた値との等しさに関してこの一部における複数のパックドデータフィールドから読み取られた複数の値を比較し、そして、POP1635カウンタにおいて等しい数をカウントすることによりカウントされる。SIMD 8ビットポピュレーションカウントのための命令の一実施形態において、第2のオプションの予め定められた値(例えば、0x43)は、即値オペランドの一部として命令により指定され得る。他の実施形態において、第2の予め定められた値は、レジスタオペランドにおいて1または複数の要素として命令により指定される複数の値のセット1644の1つでもあり得る。また処理ブロック1685の結果、第2の予め定められた値(例えば、0x43)に等しいカウントされた(例えば、2番目の最下位部分における)複数の出現は、ソースベクトル1618のn個のデータフィールドの一部に対応する宛て先1654の一部に、対応する1または複数の予め定められた値(例えば、0x43)に関して1または複数のカウントとして格納され得る。
処理ブロック1686において、SIMD 8ビットポピュレーションカウント演算のための命令が実行されることにさらに応答して、第3のオプションの予め定められた値(例えば、0x41)に等しいソースベクトル1618のn個のデータフィールドの一部(例えば、3番目の最下位部分)における複数のパックドデータフィールドにおける複数の値の複数の出現が、まず、第3の予め定められた値との等しさに関してこの一部における複数のパックドデータフィールドから読み取られた複数の値を比較し、そして、POP1636カウンタにおいて等しい数をカウントすることによりカウントされる。SIMD 8ビットポピュレーションカウントのための命令の一実施形態において、第3のオプションの予め定められた値(例えば、0x41)は、即値オペランドの一部として命令により指定され得る。他の実施形態において、第3の予め定められた値は、レジスタオペランドにおいて1または複数の要素として命令により指定される複数の値のセット1644の1つでもあり得る。また処理ブロック1686の結果、第3の予め定められた値(例えば、0x41)に等しいカウントされた(例えば、3番目の最下位部分における)複数の出現は、ソースベクトル1618のn個のデータフィールドの一部に対応する宛て先1654の一部に、対応する1または複数の予め定められた値(例えば、0x41)に関して1または複数のカウントとして格納され得る。
処理ブロック1687において、SIMD 8ビットポピュレーションカウント演算のための命令が実行されることにさらに応答して、第4のオプションの予め定められた値(例えば、0x47)に等しいソースベクトル1618のn個のデータフィールドの一部(例えば、4番目の最下位部分)における複数のパックドデータフィールドにおける複数の値の複数の出現が、まず、第4の予め定められた値との等しさに関してこの一部における複数のパックドデータフィールドから読み取られた複数の値を比較し、そして、POP1637カウンタにおいて等しい数をカウントすることによりカウントされる。SIMD 8ビットポピュレーションカウントのための命令の一実施形態において、第4のオプションの予め定められた値(例えば、0x47)は、即値オペランドの一部として命令により指定され得る。他の実施形態において、第4の予め定められた値は、レジスタオペランドにおいて1または複数の要素として命令により指定される複数の値のセット1644の1つでもあり得る。また処理ブロック1687の結果、第4の予め定められた値(例えば、0x47)に等しいカウントされた(例えば、4番目の最下位部分における)複数の出現は、ソースベクトル1618のn個のデータフィールドの一部に対応する宛て先1654の一部に、対応する1または複数の予め定められた値(例えば、0x47)に関して1または複数のカウントとして格納され得る。
図16Eは、命令を実行してSIMDベクトルポピュレーションカウント機能性を提供するための装置の他の代替的な実施形態を示す。装置1605の複数の実施形態も、SIMDポピュレーションカウント機能性を提供する命令の実行のためのパイプライン400の一部(例えば、実行ステージ416)、またはコア490の一部(例えば、(複数の)実行ユニット462)であり得る。装置1605の複数の実施形態は、1または複数の可変の複数のn個の可変のサイズのデータ要素の複数の値を格納する1または複数の可変の複数のn個の可変のサイズのデータフィールドをそれぞれが含む複数のベクトルレジスタ(例えば、(複数の)物理レジスタファイルユニット458)に結合され得る。装置1605の複数の実施形態は、ベクトルポピュレーションカウント演算およびパックドデータサイズを(例えば、それ自体の記憶を助ける命令の一部として、またはオペランドとして、または制御レジスタにおいて)指定する命令をデコードするデコードステージ(例えば、デコード406)またはデコーダ(例えば、デコードユニット440)にも結合され得る。1または複数の実行ユニット(例えば、実行装置1605)は、デコードされた命令に応答し、指定されたパックドデータサイズに従って、(例えば、メモリに、またはレジスタに格納された)ソースベクトル1618の一部における各パックドデータフィールドの複数のビットを読み取り得る。ここで、ソースベクトルの当該一部における第1の複数のパックドデータフィールドのそれぞれは、指定されたパックドデータサイズに従って複数のビットを格納することになる。装置1605の例において示されている一実施形態において、第1の複数のパックドデータフィールドのそれぞれに格納されている複数のビットは8ビットである。代替的な複数の実施形態において、何らかの他の複数のビットが、第1の複数のパックドデータフィールドのそれぞれに格納され得る。
例えば、装置1605において、ソースベクトル1618の一部における各パックドデータフィールドが、複数の8ビットを格納することになるよう、複数のパックドデータフィールドが、ソースベクトル1618の複数のn個のデータフィールドの1または複数の部分のそれぞれに格納される。処理ブロック1648において、SIMD 8ビットポピュレーションカウント演算のための命令の一実施形態がプロセッサにおいて実行されたことに応答して、ソースベクトル1618のn個のデータフィールドの一部(例えば、最下位部分)における複数のパックドデータフィールドが読み取られ、1または複数の予め定められた値(例えば、1644)に等しい複数の値の複数の出現が、まず、その1または複数の予め定められた値(例えば、1644)のそれぞれとの等しさに関してこの一部における複数のパックドデータフィールドから読み取られた複数の値を比較し、そして、POP1643カウンタにおいて等しい数をカウントすることによりカウントされる。SIMD 8ビットポピュレーションカウントのための命令の一実施形態において、1または複数の予め定められた値(例えば、1644)は、即値オペランドとして命令により指定され得る。他の実施形態において、1または複数の予め定められた値は、レジスタオペランドにおいて1または複数の要素として命令により指定される複数の値のセット1644の1つであり得る。処理ブロック1648の結果、1または複数の予め定められた値(例えば、1644)のそれぞれに等しいカウントされた(例えば、最下位部分における)複数の出現は、ソースベクトル1618のn個のデータフィールドの一部に対応する宛て先1650の一部に、対応する1または複数の予め定められた値(例えば、1644)のそれぞれ毎に1または複数のカウントとして格納され得る。
処理ブロック1658において、SIMD 8ビットポピュレーションカウント演算のための命令が実行されることにさらに応答して、1または複数の予め定められた値(例えば、1644)のそれぞれに等しいソースベクトル1618のn個のデータフィールドの一部(例えば、2番目の最下位部分)における複数のパックドデータフィールドにおける複数の値の複数の出現が、まず、1または複数の予め定められた値(例えば、1644)との等しさに関してこの一部における複数のパックドデータフィールドから読み取られた複数の値を比較し、そして、POP1653カウンタにおいて等しい数をカウントすることによりカウントされる。また処理ブロック1658の結果、1または複数の予め定められた値(例えば、1644)のそれぞれに等しいカウントされた(例えば、2番目の最下位部分における)複数の出現は、ソースベクトル1618のn個のデータフィールドの一部に対応する宛て先1650の一部に、対応する1または複数の予め定められた値(例えば、1644)のそれぞれ毎に1または複数のカウントとして格納され得る。
処理ブロック1668において、SIMD 8ビットポピュレーションカウント演算のための命令が実行されることにさらに応答して、1または複数の予め定められた値(例えば、1644)に等しいソースベクトル1618のn個のデータフィールドの一部(例えば、3番目の最下位部分)における複数のパックドデータフィールドにおける複数の値の複数の出現が、まず、1または複数の予め定められた値との等しさに関してこの一部における複数のパックドデータフィールドから読み取られた複数の値を比較し、そして、POP1663カウンタにおいて等しい数をカウントすることによりカウントされる。また処理ブロック1668の結果、1または複数の予め定められた値(例えば、1644)のそれぞれに等しいカウントされた(例えば、3番目の最下位部分における)複数の出現は、ソースベクトル1618のn個のデータフィールドの一部に対応する宛て先1650の一部に、対応する1または複数の予め定められた値(例えば、1644)のそれぞれ毎に1または複数のカウントとして格納され得る。
処理ブロック1678において、SIMD 8ビットポピュレーションカウント演算のための命令が実行されることにさらに応答して、1または複数の予め定められた値(例えば、1644)に等しいソースベクトル1618のn個のデータフィールドの一部(例えば、4番目の最下位部分)における複数のパックドデータフィールドにおける複数の値の複数の出現が、まず、1または複数の予め定められた値との等しさに関してこの一部における複数のパックドデータフィールドから読み取られた複数の値を比較し、そして、POP1673カウンタにおいて等しい数をカウントすることによりカウントされる。また処理ブロック1678の結果、1または複数の予め定められた値(例えば、1644)のそれぞれに等しいカウントされた(例えば、4番目の最下位部分における)複数の出現は、ソースベクトル1618のn個のデータフィールドの一部に対応する宛て先1650の一部に、対応する1または複数の予め定められた値(例えば、1644)のそれぞれ毎に1または複数のカウントとして格納され得る。
複数のSIMDポピュレーションカウント命令を実行するための、本明細書に開示されている装置は、計算の効率性を改善し、電力消費を低減するべくゲノム配列決定および配列比較処理のために用いられ得ることが理解されよう。同様の複数の圧縮スキームが、他のデータベース、データマイニングアプリケーション、および検索アプリケーションも計算の効率性を改善し、電力消費を低減するべく複数のSIMDポピュレーションカウント命令を実行するための、本明細書に開示されている装置を用い得るようこれらのアプリケーションにおいてもより一般的に使用される。
図17Aは、命令を実行してSIMDベクトルポピュレーションカウント機能性を提供するための例示的な処理1701の一実施形態に関するフロー図を示す。処理1701の処理ブロック1710において、ソースベクトルの一部における各データフィールドが複数のビットを格納することになるよう複数のデータフィールドが、そのソースベクトルのn個のデータフィールドの1または複数の部分に格納される。処理ブロック1720において、SIMDポピュレーションカウント演算のための命令がプロセッサにおいて実行される。そして処理ブロック1730において、ソースベクトルのn個のデータフィールドのこの一部におけるそれらデータフィールドに関して、1または複数の予め定められた値に等しい複数の値の複数の出現がカウントされる。処理ブロック1740において、カウントされた複数の出現は、ソースベクトルのn個のデータフィールドの一部に対応する宛て先の一部に、対応する1または複数の予め定められた値のそれぞれ毎に1または複数のカウントとして格納される。処理ブロック1790において、処理1701がソースベクトルの全ての部分を処理し終えたか否かの判断がなされる。そうでない場合、処理は処理ブロック1730から開始して繰り返される。そうでなければ、処理は処理ブロック1799で終了する。
図17Bは、命令を実行してSIMDベクトルポピュレーションカウント機能性を提供するための例示的な処理1702の代替的な実施形態に関するフロー図を示す。処理1702の処理ブロック1712において、ソースベクトルの一部における各データフィールドがビットのペアを格納することになるよう複数のデータフィールドが、そのソースベクトルのn個の2ビットデータフィールドの1または複数の部分に格納される。処理ブロック1722において、SIMD 2ビットポピュレーションカウント演算のための命令がプロセッサにおいて実行される。そして処理ブロック1732において、ソースベクトルのn個の2ビットデータフィールドのこの一部における複数の2ビットデータフィールドに関して、1または複数の予め定められた値に等しい複数の値の複数の出現がカウントされる。処理ブロック1742において、カウントされた複数の出現は、ソースベクトルのn個の2ビットデータフィールドの一部に対応する宛て先の一部に、対応する1または複数の予め定められた値のそれぞれ毎に1または複数のカウントとして格納される。処理ブロック1790において、処理1702がソースベクトルの全ての部分を処理し終えたか否かの判断がなされる。そうでない場合、処理は処理ブロック1732から開始して繰り返される。そうでなければ、処理は処理ブロック1799で終了する。
図17Cは、命令を実行してSIMDベクトルポピュレーションカウント機能性を提供するための例示的な処理1704の他の代替的な実施形態に関するフロー図を示す。処理1704の処理ブロック1714において、ソースベクトルの一部における各データフィールドがビットのペアを格納することになるよう複数のデータフィールドが、そのソースベクトルのn個の4ビットデータフィールドの1または複数の部分に格納される。処理ブロック1724において、SIMD 4ビットポピュレーションカウント演算のための命令がプロセッサにおいて実行される。そして処理ブロック1734において、ソースベクトルのn個の4ビットデータフィールドのこの一部における複数の4ビットデータフィールドに関して、1または複数の予め定められた値に等しい複数の値の複数の出現がカウントされる。処理ブロック1744において、カウントされた複数の出現は、ソースベクトルのn個の4ビットデータフィールドの一部に対応する宛て先の一部に、対応する1または複数の予め定められた値のそれぞれ毎に1または複数のカウントとして格納される。処理ブロック1790において、処理1704がソースベクトルの全ての部分を処理し終えたか否かの判断がなされる。そうでない場合、処理は処理ブロック1734から開始して繰り返される。そうでなければ、処理は処理ブロック1799で終了する。
図17Dは、命令を実行してSIMDベクトルポピュレーションカウント機能性を提供するための例示的な処理1708の他の代替的な実施形態に関するフロー図を示す。処理1708の処理ブロック1718において、ソースベクトルの一部における各データフィールドがビットのペアを格納することになるよう複数のデータフィールドが、そのソースベクトルのn個の8ビットデータフィールドの1または複数の部分に格納される。処理ブロック1728において、SIMD 8ビットポピュレーションカウント演算のための命令がプロセッサにおいて実行される。そして処理ブロック1738において、ソースベクトルのn個の8ビットデータフィールドのこの一部における複数の8ビットデータフィールドに関して、1または複数の予め定められた値に等しい複数の値の複数の出現がカウントされる。処理ブロック1748において、カウントされた複数の出現は、ソースベクトルのn個の8ビットデータフィールドの一部に対応する宛て先の一部に、対応する1または複数の予め定められた値のそれぞれ毎に1または複数のカウントとして格納される。処理ブロック1790において、処理1708がソースベクトルの全ての部分を処理し終えたか否かの判断がなされる。そうでない場合、処理は処理ブロック1738から開始して繰り返される。そうでなければ、処理は処理ブロック1799で終了する。
図18Aは、命令を実行してSIMDベクトルポピュレーションカウント機能性を提供するための例示的な処理1801の一実施形態に関するフロー図を示す。処理1801の処理ブロック1810において、ソースベクトルの一部における各パックドデータフィールドが複数のビットを格納することになるよう複数のパックドデータフィールドが、そのソースベクトルの1または複数の部分のそれぞれに格納される。処理ブロック1820において、SIMDポピュレーションカウント演算およびパックドデータサイズを指定する命令がデコードされる。そして処理ブロック1830において、デコードされた命令に応答し、ソースベクトルの1または複数の部分の一部における複数のパックドデータフィールドのそれぞれの複数のビットが読み取られる。処理ブロック1840において、ソースベクトルのこの一部における複数のパックドデータフィールドに関して、1または複数の予め定められた値に等しい複数の値の複数の出現がカウントされる。処理ブロック1850において、カウントされた複数の出現は、ソースベクトルの一部に対応する宛て先の一部において、1または複数の予め定められた値に対応する1または複数のカウントとして格納される。処理ブロック1890において、処理1801がソースベクトルの全ての部分を処理し終えたか否かの判断がなされる。そうでない場合、処理は処理ブロック1830から開始して繰り返される。そうでなければ、処理は処理ブロック1899で終了する。
図18Bは、命令を実行してSIMDベクトルポピュレーションカウント機能性を提供するための例示的な処理1802の代替的な実施形態に関するフロー図を示す。処理1802の処理ブロック1812において、ソースベクトルの一部における各パックドデータフィールドがビットのペアを格納することになるよう複数のパックドデータフィールドが、そのソースベクトルの1または複数の部分のそれぞれに格納される。処理ブロック1822において、SIMDポピュレーションカウント演算およびパックドデータサイズを指定する命令がデコードされる。そして処理ブロック1832において、デコードされた命令に応答し、ソースベクトルの1または複数の部分の一部における複数のパックドデータフィールドのそれぞれのビットのペアが読み取られる。処理ブロック1842において、ソースベクトルのこの一部における複数のパックドデータフィールドに関して、1または複数の予め定められた値に等しい複数の値の複数の出現がカウントされる。処理ブロック1852において、カウントされた複数の出現は、ソースベクトルの一部に対応する宛て先の一部において、1または複数の予め定められた値に対応する1または複数のカウントとして格納される。処理ブロック1890において、処理1802がソースベクトルの全ての部分を処理し終えたか否かの判断がなされる。そうでない場合、処理は処理ブロック1832から開始して繰り返される。そうでなければ、処理は処理ブロック1899で終了する。
図18Cは、命令を実行してSIMDベクトルポピュレーションカウント機能性を提供するための例示的な処理の他の代替的な実施形態に関するフロー図を示す。処理1804の処理ブロック1814において、ソースベクトルの一部における各パックドデータフィールドがビットの4ビットニブルを格納することになるよう複数のパックドデータフィールドが、そのソースベクトルの1または複数の部分のそれぞれに格納される。処理ブロック1824において、SIMDポピュレーションカウント演算およびパックドデータサイズを指定する命令がデコードされる。そして処理ブロック1834において、デコードされた命令に応答し、ソースベクトルの1または複数の部分の一部における複数のパックドデータフィールドのそれぞれの複数のビットのニブルが読み取られる。処理ブロック1844において、ソースベクトルのこの一部における複数のパックドデータフィールドに関して、1または複数の予め定められた値に等しい複数の値の複数の出現がカウントされる。処理ブロック1854において、カウントされた複数の出現は、ソースベクトルの一部に対応する宛て先の一部において、1または複数の予め定められた値に対応する1または複数のカウントとして格納される。処理ブロック1890において、処理1804がソースベクトルの全ての部分を処理し終えたか否かの判断がなされる。そうでない場合、処理は処理ブロック1834から開始して繰り返される。そうでなければ、処理は処理ブロック1899で終了する。
図18Dは、命令を実行してSIMDベクトルポピュレーションカウント機能性を提供するための例示的な処理の他の代替的な実施形態に関するフロー図を示す。処理1808の処理ブロック1818において、ソースベクトルの一部における各パックドデータフィールドがデータバイトを格納することになるよう複数のパックドデータフィールドが、そのソースベクトルの1または複数の部分のそれぞれに格納される。処理ブロック1828において、SIMDポピュレーションカウント演算およびパックドデータサイズを指定する命令がデコードされる。そして処理ブロック1838において、デコードされた命令に応答し、ソースベクトルの1または複数の部分の一部における複数のパックドデータフィールドのそれぞれのデータバイトが読み取られる。処理ブロック1848において、ソースベクトルのこの一部における複数のパックドデータフィールドに関して、1または複数の予め定められた値に等しい複数の値の複数の出現がカウントされる。処理ブロック1858において、カウントされた複数の出現は、ソースベクトルの一部に対応する宛て先の一部において、1または複数の予め定められた値に対応する1または複数のカウントとして格納される。処理ブロック1890において、処理1808がソースベクトルの全ての部分を処理し終えたか否かの判断がなされる。そうでない場合、処理は処理ブロック1838から開始して繰り返される。そうでなければ、処理は処理ブロック1899で終了する。
複数のSIMDポピュレーションカウント命令が、ゲノム配列決定および配列比較処理の効率性を改善するのに用いられ得ることが理解されよう。同様の複数の圧縮スキームが、他のデータベース、データマイニングアプリケーション、および検索アプリケーションも計算の効率性を改善するべく複数のSIMDポピュレーションカウント命令を用い得るようこれらのアプリケーションにおいてもより一般的に使用される。
ゲノム配列比較における一般的な演算は、塩基対の複数の列に一致させる、または部分的に一致させるために列内の複数のヌクレオチドの複数の出現をカウントすることである。パックドデータフォーマット(packedDnaなど)では、列内の異なるヌクレオチドの複数の出現をカウントするために、複数のシフトおよびマスク演算と併せた複数のルックアップテーブルの使用を他の場合においては伴い得る技術は、代わりに複数のSIMDポピュレーションカウント命令を用い得る。複数のSIMDポピュレーションカウント命令を用いることにより、列内の異なるヌクレオチドの複数の出現をカウントするために以前まで必要とされていた複数の演算の多くは取り除かれ得る。したがって、ゲノム配列決定および配列比較処理などの複数のアプリケーション、および、より一般的にデータマイニングなどの複数のデータベースアプリケーションおよび検索アプリケーションの性能は、実質的に改善され得る。
本明細書に開示されている複数のメカニズムの複数の実施形態は、ハードウェア、ソフトウェア、ファームウェア、またはそのような複数の実装アプローチの組み合わせにより実装され得る。本願発明の複数の実施形態は、少なくとも1つのプロセッサ、記憶システム(揮発性または不揮発性のメモリおよび/または複数の記憶素子を含む)、少なくとも1つの入力デバイス、および少なくとも1つの出力デバイスを備える複数のプログラマブルシステムで実行される複数のコンピュータプログラムまたはプログラムコードとして実装され得る。
プログラムコードは、本明細書に説明されている複数の機能を実行し、出力情報を生成する複数の入力命令に適用され得る。出力情報は、公知の方式で、1または複数の出力デバイスに適用され得る。本明細書の目的において、プロセッシングシステムは、例えば、デジタル信号プロセッサ(DSP)、マイクロコントローラ、特定用途向け集積回路(ASIC)、またはマイクロプロセッサなどのプロセッサを有する任意のシステムを含む。
プログラムコードは、プロセッシングシステムと通信を行う高水準の手続き型プログラミング言語またはオブジェクト指向のプログラミング言語で実装され得る。またプログラムコードは、所望される場合、アセンブリ言語またはマシン言語で実装され得る。事実、本明細書に説明されている複数のメカニズムの範囲は、任意の特定のプログラミング言語に限定されない。いずれの場合であっても、言語はコンパイラ型言語またはインタープリタ型言語であり得る。
少なくとも1つの実施形態の1または複数の態様は、マシンによって読み取られたときに当該マシンに本明細書に説明されている複数の技術を実行するロジックを作らせる、プロセッサ内の様々なロジックを表すマシン可読媒体上に格納された複数の代表的な命令によって実装され得る。「IPコア」として公知であるそのような表現は、有形のマシン可読媒体上に格納され、ロジックまたはプロセッサを実際に作成する製造マシンにロードする様々な顧客または製造施設に供給され得る。
そのようなマシン可読記憶媒体は、これらに限定されるわけではないが、マシンまたはデバイスによって製造または形成される、ハードディスク、フロッピー(登録商標)ディスク、光ディスク、コンパクトディスクリードオンリーメモリ(CD−ROM)、コンパクトディスクリライタブル(CD−RW)、および光磁気ディスクを含む任意の他のタイプのディスク、リードオンリーメモリ(ROM)などの半導体デバイス、ダイナミックランダムアクセスメモリ(DRAM)、スタティックランダムアクセスメモリ(SRAM)、などのランダムアクセスメモリ(RAM)、消去可能プログラマブルリードオンリーメモリ(EPROM)、フラッシュメモリ、電子的消去可能プログラマブルリードオンリーメモリ(EEPROM)、磁気または光カード、または、複数の電子命令を格納するのに適した任意の他のタイプの媒体などの記憶媒体を含む複数の物品の非一時的な有形の配置を含み得る。
したがって、本願発明の複数の実施形態は、本明細書に説明されている複数の構造、複数の回路、複数の装置、複数のプロセッサ、および/または複数のシステム特徴を定める、ハードウェア記述言語(HDL)などの複数の命令を保持する、または設計データを保持する非一時的な有形のマシン可読媒体も含む。そのような複数の実施形態は、プログラムプロダクトとも呼ばれ得る。
いくつかの場合、命令コンバータは、ソース命令セットからターゲット命令セットに命令を変換するのに用いられ得る。例えば、命令コンバータは、(例えば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を用い)変換し、モーフィングし、エミュレートし、そうでなければ命令をコアにより処理されることになる1または複数の他の命令に変換し得る。命令コンバータは、ソフトウェア、ハードウェア、ファームウェア、またはこれらの組み合わせで実装され得る。命令コンバータは、プロセッサ上、プロセッサ外、または部分的にプロセッサ上であり部分的にプロセッサ外であり得る。
したがって、少なくとも1つの実施形態に係る1または複数の命令を実行するための複数の技術が開示されている。特定の例示的な複数の実施形態が説明され、添付の複数の図面において示されてきたが、そのような複数の実施形態は単に幅広い本願発明を例示するものであり、限定するものではないこと、および本開示の検討により当業者は様々な他の変形例を思い付くので、本願発明は、示され説明された特定の複数の構造および複数の配置に限定されないことが理解されるべきである。成長が速く、更なる進歩が容易には予知出来ない本技術領域などの技術領域において、開示された複数の実施形態は容易に、本開示の複数の原理、または添付の複数の請求項の態様から逸脱することなく、技術進歩を可能とすることにより促されるように配置および詳細において変形可能であり得る。