(57)【要約】      （修正有）【課題】複数の命令およびロジックが、ＳＩＭＤベクトルポピュレーションカウント機能性を提供する。【解決手段】少なくとも２ビットのデータを、ベクトルレジスタまたはメモリベクトルのｎ個のデータフィールドの一部の各データフィールドに格納する。プロセッサにおいて、ベクトルレジスタまたはメモリベクトルにおけるｎ個のデータフィールドの当該一部に関して、第１の１または複数の予め定められた二進値のそれぞれに等しい複数の二進値の複数の出現をカウントし、カウントされた複数の出現が、ベクトルレジスタまたはメモリベクトルにおけるｎ個のデータフィールドの一部に対応する宛て先レジスタの一部において、第１の１または複数の予め定められた二進値に対応する第１の１または複数のカウントとして格納されるよう、ベクトルポピュレーションカウントのためのＳＩＭＤ命令を実行する。【選択図】図１７Ａ
2019050039.tif 000002
【特許請求の範囲】
【請求項１】
第１の複数のパックドデータフィールドを含むソースベクトルの第１部分を格納するストレージを備え、
前記ソースベクトルの前記第１部分における前記第１の複数のパックドデータフィールドのそれぞれは２ビットを格納し、
前記ソースベクトルの前記第１部分に対応する宛て先レジスタの一部であって、前記ソースベクトルの対応する前記第１部分における、対応する１または複数の予め定められた二進値の複数の出現の１または複数のカウントを格納する宛て先レジスタの一部と、
ベクトルポピュレーションカウント演算とパックドデータフィールドサイズとを指定する第１命令をデコードするデコードステージと、
１または複数の実行ユニットと
を備え、
前記１または複数の実行ユニットは、デコードされた前記第１命令に応答して、
前記ソースベクトルの前記第１部分における前記第１の複数のパックドデータフィールドのそれぞれの２ビットを読み取り、
前記ソースベクトルの前記第１部分における前記第１の複数のパックドデータフィールドに関して、前記１または複数の予め定められた二進値に等しい複数の二進値の前記複数の出現をカウントし、
カウントされた前記複数の出現を、前記１または複数の予め定められた二進値に対応する前記１または複数のカウントとして、前記ソースベクトルの前記第１部分に対応する前記宛て先レジスタの前記一部に格納する、プロセッサ。
【請求項２】
前記ソースベクトルの前記第１部分は、３２ビットである、請求項１に記載のプロセッサ。
【請求項３】
前記ソースベクトルの前記第１部分は６４ビットである、請求項１または２に記載のプロセッサ。
【請求項４】
前記ソースベクトルの前記第１部分を格納する前記ストレージは３２ビットレジスタである、請求項１から３のいずれか一項に記載のプロセッサ。
【請求項５】
前記ソースベクトルの前記第１部分を格納する前記ストレージは、キャッシュされた記憶位置である、請求項１から４のいずれか一項に記載のプロセッサ。
【請求項６】
前記宛て先レジスタの前記一部は３２ビットレジスタである、請求項１から５のいずれか一項に記載のプロセッサ。
【請求項７】
前記宛て先レジスタの前記一部は、６４ビットレジスタの３２ビット部分である、請求項１から６のいずれか一項に記載のプロセッサ。
【請求項８】
前記宛て先レジスタの前記一部は６４ビットレジスタである、請求項１から７のいずれか一項に記載のプロセッサ。
【請求項９】
前記パックドデータフィールドサイズは８ビットである、請求項１から８のいずれか一項に記載のプロセッサ。
【請求項１０】
前記１または複数の予め定められた二進値は、００、０１、１０、および１１である、請求項１から９のいずれか一項に記載のプロセッサ。
【請求項１１】
前記１または複数の予め定められた二進値は、即値オペランドとして前記第１命令により指定される、請求項１から１０のいずれか一項に記載のプロセッサ。
【請求項１２】
前記１または複数の予め定められた二進値は、レジスタオペランドにおける１または複数の要素として前記第１命令により指定される、請求項１から１１のいずれか一項に記載のプロセッサ。
【請求項１３】
１または複数の実行ユニットをさらに備え、
前記１または複数の実行ユニットは、前記デコードされた第１命令に応答して、
前記ソースベクトルの第２部分における前記第１の複数のパックドデータフィールドのそれぞれの２ビットを読み取り、
前記ソースベクトルの前記第２部分における同じ第１の複数のパックドデータフィールドに関して、第２の１または複数の予め定められた二進値に等しい複数の二進値の複数の出現をカウントし、
カウントされた前記複数の出現を、前記第２の１または複数の予め定められた二進値に対応する第２の１または複数のカウントとして、前記ソースベクトルの前記第２部分に対応する前記宛て先レジスタの一部に格納する、請求項１から１２のいずれか一項に記載のプロセッサ。
【請求項１４】
前記ソースベクトルの前記第１部分を格納する前記ストレージは、ベクトルレジスタの複数の３２ビット要素として前記ソースベクトルの前記第２部分も格納する、請求項１３に記載のプロセッサ。
【請求項１５】
前記ソースベクトルの前記第２部分に対応する前記宛て先レジスタの前記一部は、ベクトルレジスタの３２ビット要素である、請求項１３または１４に記載のプロセッサ。
【請求項１６】
前記第２の１または複数の予め定められた二進値は、即値オペランドとして前記第１命令により指定される、請求項１３から１５のいずれか一項に記載のプロセッサ。
【請求項１７】
前記第２の１または複数の予め定められた二進値は、００、０１、１０、および１１である、請求項１３から１６のいずれか一項に記載のプロセッサ。
【請求項１８】
第１のベクトルレジスタの複数のｎ個のデータフィールドの第１部分のそれぞれに２ビットのデータを格納する段階と、
プロセッサにおいて、ベクトルポピュレーションカウントのためのＳＩＭＤ命令を実行する段階と、
前記第１のベクトルレジスタにおける前記複数のｎ個のデータフィールドの前記第１部分に関して、第１の１または複数の予め定められた二進値のそれぞれに等しい複数の二進値の複数の出現をカウントする段階と、
カウントされた前記複数の出現を、前記第１の１または複数の予め定められた二進値に対応する第１の１または複数のカウントとして、前記第１のベクトルレジスタにおける前記複数のｎ個のデータフィールドの前記第１部分に対応する宛て先レジスタの一部に格納する段階と
を備える、方法。
【請求項１９】
前記第１の１または複数の予め定められた二進値は、００、０１、１０、および１１である、請求項１８に記載の方法。
【請求項２０】
前記第１の１または複数の予め定められた二進値は、即値オペランドとして前記ＳＩＭＤ命令により指定される、請求項１８または１９に記載の方法。
【請求項２１】
前記第１のベクトルレジスタの複数のｎ個のデータフィールドの第２部分のそれぞれに２ビットのデータを格納する段階と、
前記第１のベクトルレジスタにおける前記複数のｎ個のデータフィールドの前記第２部分に関して、第２の１または複数の予め定められた二進値のそれぞれに等しい複数の二進値の複数の出現をカウントする段階と、
カウントされた前記複数の出現を、前記第２の１または複数の予め定められた二進値に対応する第２の１または複数のカウントとして、前記第１のベクトルレジスタにおける前記複数のｎ個のデータフィールドの前記第２部分に対応する前記宛て先レジスタの一部に格納する段階と
をさらに備える、請求項１８から２０のいずれか一項に記載の方法。
【請求項２２】
前記第１のベクトルレジスタの複数のｎ個のデータフィールドの前記第２部分に対応する前記宛て先レジスタの前記一部は、前記宛て先レジスタの３２ビット要素である、請求項２１に記載の方法。
【請求項２３】
メモリと、
複数のプロセッサと
を備え、
各プロセッサは、
第１の複数のパックドデータフィールドを含むソースベクトルの第１部分を格納するストレージを有し、
前記ソースベクトルの前記第１部分における前記第１の複数のパックドデータフィールドのそれぞれは少なくとも２ビットのデータを格納し、
前記各プロセッサは、
前記ソースベクトルの前記第１部分に対応する宛て先レジスタの一部であって、前記ソースベクトルの対応する前記第１部分における、対応する１または複数の予め定められた二進値の複数の出現の１または複数のカウントを格納する宛て先レジスタの一部と、
ベクトルポピュレーションカウント演算とパックドデータフィールドサイズとを指定する第１命令をデコードするデコードステージと、
１または複数の実行ユニットと
を有し、
前記１または複数の実行ユニットは、デコードされた前記第１命令に応答して、
前記ソースベクトルの前記第１部分における前記第１の複数のパックドデータフィールドのそれぞれの少なくとも２ビットを読み取り、
前記ソースベクトルの前記第１部分における前記第１の複数のパックドデータフィールドに関して、前記１または複数の予め定められた二進値に等しい複数の二進値の前記複数の出現をカウントし、
カウントされた前記複数の出現を、前記１または複数の予め定められた二進値に対応する前記１または複数のカウントとして、前記ソースベクトルの前記第１部分に対応する前記宛て先レジスタの前記一部に格納する、プロセッシングシステム。
【請求項２４】
前記１または複数の予め定められた二進値は、００、０１、１０、および１１である、請求項２３に記載のプロセッシングシステム。
【請求項２５】
各プロセッサは１または複数の実行ユニットをさらに有し、
前記１または複数の実行ユニットは、前記デコードされた第１命令に応答して、
前記ソースベクトルの第２部分における前記第１の複数のパックドデータフィールドのそれぞれの前記少なくとも２ビットを読み取り、
前記ソースベクトルの前記第２部分における同じ第１の複数のパックドデータフィールドに関して、第２の１または複数の予め定められた二進値に等しい複数の二進値の複数の出現をカウントし、
カウントされた前記複数の出現を、前記第２の１または複数の予め定められた二進値に対応する第２の１または複数のカウントとして、前記ソースベクトルの前記第２部分に対応する前記宛て先レジスタの一部に格納する、請求項２３または２４に記載のプロセッシングシステム。
【請求項２６】
前記ソースベクトルの前記第１部分を格納する前記ストレージは、ベクトルレジスタの複数の３２ビット要素として前記ソースベクトルの前記第２部分も格納する、請求項２５に記載のプロセッシングシステム。
【請求項２７】
前記ソースベクトルの前記第２部分に対応する前記宛て先レジスタの前記一部は、ベクトルレジスタの３２ビット要素である、請求項２５または２６に記載のプロセッシングシステム。
【請求項２８】
前記第２の１または複数の予め定められた二進値は、前記ソースベクトルの前記第２部分に対応するレジスタオペランドの一部における１または複数の要素として、前記第１命令より指定される、請求項２５から２７のいずれか一項に記載のプロセッシングシステム。
【請求項２９】
前記第２の１または複数の予め定められた二進値は、即値オペランドとして前記第１命令により指定される、請求項２５から２８のいずれか一項に記載のプロセッシングシステム。
【請求項３０】
前記第２の１または複数の予め定められた二進値は、００、０１、１０、および１１である、請求項２５から２９のいずれか一項に記載のプロセッシングシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
［関連出願の相互参照］
本願は、２０１３年８月６日に提出された米国特許出願第１３／９６０，７７５号（代理人整理番号第Ｐ５６１６３号）の利益を主張する。当該出願第１３／９６０，７７５号はこれにより、ここにおいてその全体が本明細書に組み込まれる。
【０００２】
本開示は、処理ロジック、マイクロプロセッサ、および、プロセッサまたは他の処理ロジックにより実行されたときに、論理的、数学的、または他の機能的な演算を実行する関連する命令セットアーキテクチャの分野に関する。特に、本開示は、ゲノム配列決定および配列比較のためのポピュレーションカウント機能性を提供する複数の命令およびロジックに関する。
【背景技術】
【０００３】
ヒトゲノムは大量の情報を表し、そのような大量の情報を格納することは通常、４種類の塩基のヌクレオチド（チミン、シトシン、アデニン、およびグアニン（Ｔ、Ｃ、Ａ、Ｇ））をビットのペアとして表すことを伴う。ヒトゲノムにはおよそ３０億の塩基対があり、１塩基当たり２ビットで（４つの選択肢）、ヒトゲノムはおよそ６０億ビットまたはおよそ７５０ＭＢの情報を有する（各染色体の１つのコピーを格納）。典型的には、２ビットにより塩基対の各塩基のヌクレオチドを表すのがより一般的な慣例であり得、この場合、およそ１．４ＧＢの情報が必要とされる。複数のシーケンスを格納するための１つのフォーマットは、「ｐａｃｋｅｄＤｎａ」として公知である。１塩基当たり２ビットとしてパックされるＤＮＡ、またはデオキシリボ核酸は、二進の２ビット値、Ｔ＝００、Ｃ＝０１、Ａ＝１０、Ｇ＝１１として表される。第１の塩基は、バイトの最上位の２ビットにあり、最後の塩基は最下位の２ビットにある。例えば、ＴＣＡＧというシーケンスは、二進法で０００１１０１１として表される（１６進数の０ｘ１Ｂ）。いくつかの他のデータベース、データマイニングアプリケーション、および検索アプリケーションにおいて同様の複数の圧縮スキームも用いられる。
【０００４】
ゲノム配列比較における一般的な演算は、塩基対の複数の列に一致させる、または部分的に一致させるために、列内の複数のヌクレオチドの複数の出現をカウントすることである。パックドデータフォーマット（ｐａｃｋｅｄＤｎａなど）においては、技術は、列内の異なるヌクレオチドの複数の出現をカウントするために、複数のシフトおよびマスク演算と併せた複数のルックアップテーブル、および／または複数の論理演算と併せたビット単位の複数のポピュレーションカウントの使用を伴い得る。
【０００５】
現代のプロセッサは、演算集約的ではあるが、例えば、単一命令多重データ処理（ＳＩＭＤ）ベクトルレジスタなど様々なデータストレージデバイスを用いた高効率の実装を通じて活用され得る高水準のデータ並列性を提供する複数の演算を提供する複数の命令を含むことが多い。ＳＩＭＤの実行において、単一の命令は、複数のデータ要素に対して共に、または同時に演算を行う。このことは典型的には、レジスタおよび演算論理装置（ＡＬＵ）などの様々なリソースの幅を広げることにより実装され得、それらがそれぞれ、複数のデータ要素を保持する、またはそれらに対して演算を行うことを可能とする。
【０００６】
中央処理装置（ＣＰＵ）は、複数のベクトルのＳＩＭＤ処理をサポートするそのような並列ハードウェアを提供し得る。ベクトルは、複数の連続するデータ要素を保持するデータ構造である。サイズＬのベクトルレジスタは、サイズＭのベクトル要素をＮ個含み得、ここでＮ＝Ｌ／Ｍである。例えば、６４バイトのベクトルレジスタは、（ａ）それぞれの要素が１バイトを占有するデータ項目を保持する６４個のベクトル要素、（ｂ）それぞれが２バイト（または１つの「ワード」）を占有する複数のデータ項目を保持する３２個のベクトル要素、（ｃ）それぞれが４つのバイト（または１つの「ダブルワード」）を占有する複数のデータ項目を保持する１６個のベクトル要素、または（ｄ）それぞれが８つのバイト（または１つの「カッドワード」）を占有する複数のデータ項目を保持する８つのベクトル要素へと区分けされ得る。他方、いくつかのアプリケーションは、パックされた複数のサブバイトデータ要素に格納し、それらに対して演算を行い得、ここでｋビットのサイズのレジスタまたはレジスタの一部は、サイズｍのベクトル要素をｎ個含み得、ここでｎ＝ｋ／ｍである。例えば、６４ビットレジスタまたはレジスタの一部は、（ｅ）それぞれの要素が１ビットを占有するデータ項目を保持する６４個のパックド要素、（ｆ）それぞれが２ビットを占有する複数のデータ項目を保持する３２個のパックド要素、または（ｇ）それぞれが４ビット（または１つの「ニブル」）を占有する複数のデータ項目を保持する１６個のパックド要素へと区分けされ得る。３２ビットレジスタまたはレジスタの一部は、（ｈ）それぞれの要素が１ビットを占有するデータ項目を保持する３２個のパックド要素、（ｉ）それぞれが２ビットを占有する複数のデータ項目を保持する１６個のパックド要素、または（ｊ）それぞれが４ビットを占有する複数のデータ項目を保持する８個のパックド要素へと区分けされ得る。
【０００７】
複数のアプリケーションが、大量のデータレベルの並列性を有しており、ＳＩＭＤサポートから利益を受けることが可能であるかもしれない。しかし、いくつかのアプリケーションは、ＳＩＭＤの並列性を活用すべくデータを再フォーマットするなどの複数の演算に著しい長さの時間を費やす。いくつかのアプリケーション（例えば、ゲノム配列決定および配列比較、データベース、データマイニング、および検索アプリケーションなど）は、８ビットより小さい複数のデータ要素を有し得る。ＳＩＭＤの効率性を維持すべく、これらのサブバイト要素は、並列で処理される前にそれぞれが１バイトを占有するよう解凍される必要があるかもしれない。結果として、それらのようなアプリケーションは、ＳＩＭＤ演算から得られる性能上の恩恵が幾分限定され得る。
【０００８】
今日まで、そのような性能に関する懸念および関連する処理の困難に対する潜在的な解決法は十分に調査されてこなかった。
【図面の簡単な説明】
【０００９】
添付の複数の図面の複数の図において、限定としてではなく例として本願発明が示されている。
【図１Ａ】複数の命令を実行してＳＩＭＤベクトルポピュレーションカウント機能性を提供するシステムの一実施形態のブロック図である。
【図１Ｂ】複数の命令を実行してＳＩＭＤベクトルポピュレーションカウント機能性を提供するシステムの他の実施形態のブロック図である。
【図１Ｃ】複数の命令を実行してＳＩＭＤベクトルポピュレーションカウント機能性を提供するシステムの他の実施形態のブロック図である。
【図２】複数の命令を実行してＳＩＭＤベクトルポピュレーションカウント機能性を提供するプロセッサの一実施形態のブロック図である。
【図３Ａ】一実施形態に係る複数のパックドデータタイプを示す。
【図３Ｂ】一実施形態に係る複数のパックドデータタイプを示す。
【図３Ｃ】一実施形態に係る複数のパックドデータタイプを示す。
【図３Ｄ】一実施形態に係る、ＳＩＭＤベクトルポピュレーションカウント機能性を提供する命令のエンコードを示す。
【図３Ｅ】他の実施形態に係る、ＳＩＭＤベクトルポピュレーションカウント機能性を提供する命令のエンコードを示す。
【図３Ｆ】他の実施形態に係る、ＳＩＭＤベクトルポピュレーションカウント機能性を提供する命令のエンコードを示す。
【図３Ｇ】他の実施形態に係る、ＳＩＭＤベクトルポピュレーションカウント機能性を提供する命令のエンコードを示す。
【図３Ｈ】他の実施形態に係る、ＳＩＭＤベクトルポピュレーションカウント機能性を提供する命令のエンコードを示す。
【図４Ａ】ＳＩＭＤベクトルポピュレーションカウント機能性を提供する複数の命令を実行するプロセッサのマイクロアーキテクチャの一実施形態の複数の要素を示す。
【図４Ｂ】ＳＩＭＤベクトルポピュレーションカウント機能性を提供する複数の命令を実行するプロセッサのマイクロアーキテクチャの他の実施形態の複数の要素を示す。
【図５】ＳＩＭＤベクトルポピュレーションカウント機能性を提供する複数の命令を実行するプロセッサの一実施形態のブロック図である。
【図６】ＳＩＭＤベクトルポピュレーションカウント機能性を提供する複数の命令を実行するコンピュータシステムの一実施形態のブロック図である。
【図７】ＳＩＭＤベクトルポピュレーションカウント機能性を提供する複数の命令を実行するコンピュータシステムの他の実施形態のブロック図である。
【図８】ＳＩＭＤベクトルポピュレーションカウント機能性を提供する複数の命令を実行するコンピュータシステムの他の実施形態のブロック図である。
【図９】ＳＩＭＤベクトルポピュレーションカウント機能性を提供する複数の命令を実行するシステムオンチップの一実施形態のブロック図である。
【図１０】ＳＩＭＤベクトルポピュレーションカウント機能性を提供する複数の命令を実行するプロセッサの実施形態のブロック図である。
【図１１】ＳＩＭＤベクトルポピュレーションカウント機能性を提供するＩＰコア開発システムの一実施形態のブロック図である。
【図１２】ＳＩＭＤベクトルポピュレーションカウント機能性を提供するアーキテクチャエミュレートシステムの一実施形態を示す。
【図１３】ＳＩＭＤベクトルポピュレーションカウント機能性を提供する複数の命令を変換するシステムの一実施形態を示す。
【図１４】命令を使用してＳＩＭＤベクトルポピュレーションカウント機能性を提供し得るゲノム配列決定および配列比較処理の例の一実施形態に関する図を示す。
【図１５Ａ】ＳＩＭＤベクトルポピュレーションカウント機能性を提供する命令の使用に備えてのベクトルサブバイト解凍の例の一実施形態に関するフロー図を示す。
【図１５Ｂ】ＳＩＭＤベクトルポピュレーションカウント機能性を提供する命令の使用に備えてのベクトルサブバイト解凍の例の代替的な実施形態に関するフロー図を示す。
【図１６Ａ】命令を実行してＳＩＭＤベクトルポピュレーションカウント機能性を提供するための装置の実施形態を示す。
【図１６Ｂ】命令を実行してＳＩＭＤベクトルポピュレーションカウント機能性を提供するための装置の代替的な実施形態を示す。
【図１６Ｃ】命令を実行してＳＩＭＤベクトルポピュレーションカウント機能性を提供するための装置の他の代替的な実施形態を示す。
【図１６Ｄ】命令を実行してＳＩＭＤベクトルポピュレーションカウント機能性を提供するための装置の他の代替的な実施形態を示す。
【図１６Ｅ】命令を実行してＳＩＭＤベクトルポピュレーションカウント機能性を提供するための装置の他の代替的な実施形態を示す。
【図１７Ａ】命令を実行してＳＩＭＤベクトルポピュレーションカウント機能性を提供するための例示的な処理の一実施形態に関するフロー図を示す。
【図１７Ｂ】命令を実行してＳＩＭＤベクトルポピュレーションカウント機能性を提供するための例示的な処理の代替的な実施形態に関するフロー図を示す。
【図１７Ｃ】命令を実行してＳＩＭＤベクトルポピュレーションカウント機能性を提供するための例示的な処理の他の代替的な実施形態に関するフロー図を示す。
【図１７Ｄ】命令を実行してＳＩＭＤベクトルポピュレーションカウント機能性を提供するための例示的な処理の他の代替的な実施形態に関するフロー図を示す。
【図１８Ａ】命令を実行してＳＩＭＤベクトルポピュレーションカウント機能性を提供するための例示的な処理の一実施形態に関するフロー図を示す。
【図１８Ｂ】命令を実行してＳＩＭＤベクトルポピュレーションカウント機能性を提供するための例示的な処理の代替的な実施形態に関するフロー図を示す。
【図１８Ｃ】命令を実行してＳＩＭＤベクトルポピュレーションカウント機能性を提供するための例示的な処理の他の代替的な実施形態に関するフロー図を示す。
【図１８Ｄ】命令を実行してＳＩＭＤベクトルポピュレーションカウント機能性を提供するための例示的な処理の他の代替的な実施形態に関するフロー図を示す。
【発明を実施するための形態】
【００１０】
以下の説明は、プロセッサ、コンピュータシステム、または他の処理装置内で、またはそれらと関連してＳＩＭＤベクトルポピュレーションカウント機能性を提供する複数の命令および処理ロジックを開示する。いくつかの実施形態は、複数のパックドデータフィールドを備えるソースベクトルの一部を格納するレジスタまたは他の記憶媒体と、ソースベクトルの一部に対応する、ソースベクトルの対応する一部における、対応する１または複数の予め定められた二進値の複数の出現の１または複数のカウントを格納する宛て先レジスタの一部とを有する複数のプロセッサを含む。ソースベクトルの一部の複数のパックドデータフィールドのそれぞれは、少なくとも２ビットのデータを格納する。プロセッサデコードステージは、ベクトルポピュレーションカウント演算とパックドデータフィールドサイズとを指定する命令をデコードする。１または複数のプロセッサ実行ユニットは、デコードされた命令に応答し、ソースベクトルの一部における複数のパックドデータフィールドのそれぞれの複数のビットを読み取る。ソースベクトルの当該一部の複数のデータフィールドに関して、１または複数の予め定められた二進値のそれぞれに等しい複数の二進値の複数の出現のカウントが生成され、カウントされた複数の出現は、ソースベクトルの一部に対応する宛て先レジスタの一部において、対応する１または複数の予め定められた二進値のそれぞれ毎に１または複数のカウントとして格納される。
【００１１】
いくつかの実施形態は、少なくとも２ビットのデータを、ベクトルレジスタまたはメモリベクトルのｎ個のデータフィールドの一部の各データフィールドに格納する。プロセッサにおいて、ベクトルレジスタまたはメモリベクトルにおけるｎ個のデータフィールドの当該一部に関して、第１の１または複数の予め定められた二進値のそれぞれに等しい複数の二進値の複数の出現がカウントされ、カウントされた複数の出現が、ベクトルレジスタまたはメモリベクトルにおけるｎ個のデータフィールドの一部に対応する宛て先レジスタの一部において、第１の１または複数の予め定められた二進値に対応する第１の１または複数のカウントとして格納されるよう、ベクトルポピュレーションカウントのためのＳＩＭＤ命令が実行される。
【００１２】
複数のＳＩＭＤポピュレーションカウント命令が、ゲノム配列決定および配列比較処理のために用いられ得ることが理解されよう。同様の複数の圧縮スキームが、他のデータベース、データマイニングアプリケーション、および検索アプリケーションも複数のＳＩＭＤポピュレーションカウント命令を用い得るようこれらのアプリケーションにおいてもより一般的に使用される。
【００１３】
ゲノム配列比較における一般的な演算は、塩基対の複数の列に一致させる、または部分的に一致させるために列内の複数のヌクレオチドの複数の出現をカウントすることである。パックドデータフォーマット（ｐａｃｋｅｄＤｎａなど）では、列内の異なるヌクレオチドの複数の出現をカウントするために、複数のシフトおよびマスク演算と併せた複数のルックアップテーブル、および／または複数の論理演算と併せたビット単位の複数のポピュレーションカウントの使用を他の場合においては伴い得る技術は、代わりに複数のＳＩＭＤポピュレーションカウント命令を用い得る。複数のＳＩＭＤポピュレーションカウント命令を用いることにより、列内の異なるヌクレオチドの複数の出現をカウントするために以前まで必要とされていた複数の演算の多くは取り除かれ得る。したがって、ゲノム配列決定および配列比較処理などの複数のアプリケーション、および、より一般的にデータマイニングなどの複数のデータベースアプリケーションおよび検索アプリケーションの性能は、実質的に改善され得る。
【００１４】
以下の説明において、処理ロジック、プロセッサタイプ、マイクロアーキテクチャ条件、イべント、実行可能メカニズム、および同様のものなどの数多くの具体的な詳細が、本願発明の複数の実施形態のより深い理解を提供するために明記される。しかし、本願発明がそのような複数の具体的な詳細なしで実施され得ることは当業者により理解されるであろう。加えて、本願発明の複数の実施形態を不必要に曖昧にすることを避けるべく、いくつかの周知の構造、回路、および同様のものは詳細には示されていない。
【００１５】
以下の複数の実施形態はプロセッサを参照しながら説明されるが、他の複数の実施形態は、他の複数のタイプの集積回路およびロジックデバイスに適用可能である。本願発明の複数の実施形態の同様の複数の技術および教示が、より高いパイプラインスループットおよび改善された性能から恩恵を得ることが出来る他の複数のタイプの回路または半導体デバイスに適用され得る。本願発明の複数の実施形態の複数の教示は、データ操作を実行する任意のプロセッサまたはマシンに適用可能である。しかし、本願発明は、５１２ビット、２５６ビット、１２８ビット、６４ビット、３２ビット、または１６ビットデータ演算を実行するプロセッサまたはマシンに限定されず、データの操作または管理が実行される任意のプロセッサおよびマシンに適用され得る。加えて、以下の説明は、複数の例を提供し、添付の複数の図面は、例示を目的として様々な例を示す。しかし、これらの例は、本願発明の複数の実施形態の可能な全ての実装の網羅的なリストを提供するのではなく本願発明の複数の実施形態の複数の例を提供することを単に意図されているので、限定的に解釈されるべきではない。
【００１６】
以下の複数の例は、実行ユニットおよび論理回路の環境に関して命令の処理および分配を説明するが、本願発明の他の複数の実施形態は、マシンにより実行されたときに当該マシンに本願発明の少なくとも１つの実施形態に係る複数の機能を実行させる、マシン可読の有形の媒体上に格納されたデータおよび／または命令を用いて達成され得る。一実施形態において、本願発明の複数の実施形態に関連する複数の機能は、複数のマシン実行可能な命令で具現化される。それら命令は、それら命令によりプログラミングされた汎用または特定用途向けプロセッサに、本願発明の複数の段階を実行させるのに用いられ得る。本願発明の複数の実施形態は、本願発明の複数の実施形態に係る１または複数の演算を実行するようコンピュータ（または他の電子デバイス）をプログラミングするのに用いられ得る複数の命令を格納したマシンまたはコンピュータ可読媒体を含み得るコンピュータプログラムプロダクトまたはソフトウェアとして提供され得る。代替的に、本願発明の複数の実施形態の複数の段階は、それら段階を実行するための一定の機能ロジックを含む特定の複数のハードウェアコンポーネントにより、またはプログラミングされた複数のコンピュータコンポーネントと一定の機能の複数のハードウェアコンポーネントとの任意の組み合わせにより実行され得る。
【００１７】
本願発明の複数の実施形態を実行するロジックをプログラミングするのに用いられる複数の命令は、ＤＲＡＭ、キャッシュ、フラッシュメモリ、または他のストレージなどのシステムのメモリ内に格納され得る。さらに、それら命令は、ネットワークを介し、または他のコンピュータ可読媒体を用いて分配され得る。したがって、マシン可読媒体は、マシン（例えば、コンピュータ）が可読な形態で情報を格納または送信するための任意のメカニズム、フロッピー（登録商標）ディスク、光ディスク、コンパクトディスク、リードオンリーメモリ（ＣＤ−ＲＯＭ）、光磁気ディスク、リードオンリーメモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、消去可能プログラマブルリードオンリーメモリ（ＥＰＲＯＭ）、電子的消去可能プログラマブルリードオンリーメモリ（ＥＥＰＲＯＭ）、磁気または光カード、フラッシュメモリ、または、電気、光、音響、または他の形態の伝搬信号（例えば、搬送波、赤外線信号、デジタル信号等）を介したインターネット上での情報の送信に用いられる有形のマシン可読ストレージを含み得るが、これらに限定されない。したがって、コンピュータ可読媒体は、マシン（例えば、コンピュータ）により可読である形態で複数の電子命令または情報を格納または送信するのに適した任意のタイプの有形のマシン可読媒体を含む。
【００１８】
設計は、生成からシミュレーションへ、また製造へと様々なステージを経得る。設計を表すデータは、複数のやり方で設計を表し得る。まず、シミュレーションで有用なように、ハードウェアは、ハードウェア記述言語、または他の機能記述言語を用いて表され得る。加えて、ロジックおよび／またはトランジスタゲートを有する回路レベルモデルが、設計プロセスのいくつかのステージで生成され得る。さらに、殆どの設計は、何らかのステージにおいて、ハードウェアモデルにおける様々なデバイスの物理的な配置を表すあるレベルのデータに到達する。従来の半導体製造技術が用いられた場合、ハードウェアモデルを表すデータは、集積回路を製造するのに用いられる複数のマスクに関する、異なる複数のマスク層上での様々な特徴の存在または不在を指定するデータであり得る。設計の任意の表現において、データは、任意の形態のマシン可読媒体に格納され得る。ディスクなどのメモリまたは磁気若しくは光ストレージが、情報を送信するよう変調させられた、または他の場合においては生成された光波または電波を介して送信されるそのような情報を格納するマシン可読媒体であり得る。コードまたは設計を示す、または運ぶ電気搬送波が送信されるとき、電気信号のコピー、バッファ、または再送信が実行される限り新たなコピーが作成される。したがって、通信プロバイダまたはネットワークプロバイダは、有形のマシン可読媒体上に、本願発明の複数の実施形態の複数の技術を具現化した搬送波へとエンコードされた情報などの物品を少なくとも一時的に格納し得る。
【００１９】
現代のプロセッサにおいて、複数の異なる実行ユニットが、様々なコードおよび命令を処理し実行するのに用いられている。全ての命令が等しく作成されているわけではなく、いくつかのものは完了するのがより速く、他方、他のものは、完了するのに複数のクロックサイクルを要し得る。命令のスループットがより速ければ速いほど、プロセッサの全体的な性能はより良好である。したがって、出来るだけ多くの命令を出来るだけ速く実行するのが有利であろう。しかし、より高い複雑性を有し、実行時間およびプロセッサリソースの点でより多くを必要とする特定の複数の命令がある。例えば、浮動小数点命令、ロード／格納演算、データ移動等がある。
【００２０】
より多くのコンピュータシステムがインターネット、テキスト、およびマルチメディアアプリケーションにおいて用いられるにつれ、追加のプロセッサのサポートが時の経過と共にもたらされてきた。一実施形態において、命令セットは、データタイプ、命令、レジスタアーキテクチャ、アドレッシングモード、メモリアーキテクチャ、割り込みおよび例外処理、外部入力および出力（Ｉ／Ｏ）を含む１または複数のコンピュータアーキテクチャに関連付けられ得る。
【００２１】
一実施形態において、命令セットアーキテクチャ（ＩＳＡ）は、１または複数の命令セットを実装するのに用いられるプロセッサロジックおよび複数の回路を含む１または複数のマイクロアーキテクチャにより実装され得る。したがって、異なる複数のマイクロアーキテクチャを有する複数のプロセッサが、共通の命令セットの少なくとも一部を共有し得る。例えば、Ｉｎｔｅｌ（登録商標）Ｐｅｎｔｉｕｍ（登録商標）４プロセッサ、Ｉｎｔｅｌ（登録商標）Ｃｏｒｅ（商標）プロセッサ、およびカリフォルニア州サニーベール市のＡｄｖａｎｃｅｄ  Ｍｉｃｒｏ  Ｄｅｖｉｃｅｓ，Ｉｎｃ．が製造するプロセッサは、ｘ８６命令セットのほぼ同一のバージョンを実装する（より新しい複数のバージョンによっていくつかの拡張が追加された）が、異なる内部設計を有する。同様に、ＡＲＭ  Ｈｏｌｄｉｎｇｓ  Ｌｔｄ．、ＭＩＰＳなどの他の複数のプロセッサ開発会社、またはそれらのライセンシー若しくはアダプタにより設計された複数のプロセッサは、共通命令セットの少なくとも一部を共有し得るが、異なるプロセッサ設計を含み得る。例えば、ＩＳＡの同じレジスタアーキテクチャが、専用の物理的レジスタ、レジスタリネーミングメカニズムを用いる（例えば、Ｒｅｇｉｓｔｅｒ  Ａｌｉａｓ  Ｔａｂｌｅ（ＲＡＴ）、リオーダーバッファ（ＲＯＢ）、およびリタイヤレジスタファイルの使用）１または複数の動的に割り当てられた物理レジスタを含む、新たな、または周知の技術を用いる異なる複数のマイクロアーキテクチャで異なる複数のやり方で実装され得る。一実施形態において、レジスタは、ソフトウェアプログラマによりアドレッシング可能であってもなくてもよい１または複数のレジスタ、レジスタアーキテクチャ、レジスタファイル、または他のレジスタセットを含み得る。
【００２２】
一実施形態において、命令は、１または複数の命令フォーマットを含み得る。一実施形態において、命令フォーマットは、他にもあるうち、実行されることになる演算、およびその演算が実行される対象の（複数の）オペランドを指定する様々なフィールド（ビット数、ビット位置等）を示し得る。いくつかの命令フォーマットは、命令テンプレート（またはサブフォーマット）により定義されるようにさらに分割され得る。例えば、任意の命令フォーマットの複数の命令テンプレートは、命令フォーマットの複数のフィールドの異なる複数のサブセットを有するよう定義され得、および／または、異なるように翻訳される任意のフィールドを有するよう定義され得る。一実施形態において、命令は、命令フォーマットを用いて（および定義された場合には、その命令フォーマットの複数の命令テンプレートの任意の１つで）表現され、演算、および、その演算を行う対象のオペランドを指定する、または示す。
【００２３】
科学の、財務の、自動ベクトル化された汎用の、ＲＭＳ（認識、マイニング、および合成）の、並びにビジュアルおよびマルチメディアのアプリケーション（例えば、２Ｄ／３Ｄグラフィクス、画像処理、ビデオ圧縮／解凍、音声認識アルゴリズムおよびオーディオ操作）は、多数のデータ項目に対して同じ演算を実行することを必要とし得る。一実施形態において、単一命令多重データ処理（ＳＩＭＤ）は、プロセッサに、複数のデータ要素に対して演算を実行させるタイプの命令を指す。レジスタにおける複数のビットを、別個の値をそれぞれが表す一定サイズの、または可変サイズの複数のデータ要素に論理的に分割し得る複数のプロセッサにおいて、ＳＩＭＤ技術が用いられ得る。例えば、一実施形態において、６４ビットレジスタにおける複数のビットは、別個の１６ビット値をそれぞれが表す４つの別個の１６ビットのデータ要素を含むソースオペランドとして編成され得る。このタイプのデータは、「パックド」データタイプまたは「ベクトル」データタイプと呼ばれ得、このデータタイプの複数のオペランドは、パックドデータオペランドまたはベクトルオペランドと呼ばれる。一実施形態において、パックドデータ項目またはベクトルは、単一のレジスタ内に格納された一連のパックドデータ要素であり得、パックドデータオペランドまたはベクトルオペランドは、ＳＩＭＤ命令（または、「パックドデータ命令」または「ベクトル命令」）のソースまたは宛て先オペランドであり得る。一実施形態において、ＳＩＭＤ命令は、２つのソースベクトルオペランドに対して実行される単一のベクトル演算を指定して、同じである、または異なるサイズの、同じである、または異なる数のデータ要素を有する、およびデータ要素の順序が同じである、または異なる宛て先ベクトルオペランド（結果ベクトルオペランドとも呼ばれる）を生成する。
【００２４】
ｘ８６、ＭＭＸ（商標）、Ｓｔｒｅａｍｉｎｇ  ＳＩＭＤ拡張（ＳＳＥ）、ＳＳＥ２、ＳＳＥ３、ＳＳＥ４．１、およびＳＳＥ４．２命令を含む命令セットを有するＩｎｔｅｌ（登録商標）Ｃｏｒｅ（商標）プロセッサ、ベクトル浮動小数点（ＶＦＰ）および／またはＮＥＯＮ命令を含む命令セットを有するＡＲＭ  Ｃｏｒｔｅｘ（登録商標）プロセッサファミリなどのＡＲＭプロセッサ、並びに、Ｃｈｉｎｅｓｅ  Ａｃａｄｅｍｙ  ｏｆ  ＳｃｉｅｎｃｅｓのＩｎｓｔｉｔｕｔｅ  ｏｆ  Ｃｏｍｐｕｔｉｎｇ  Ｔｅｃｈｎｏｌｏｇｙ（ＩＣＴ）により開発されるＬｏｏｎｇｓｏｎプロセッサファミリなどのＭＩＰＳプロセッサにより用いられるものなどのＳＩＭＤ技術は、アプリケーション性能の著しい改善を可能とした（Ｃｏｒｅ（商標）およびＭＭＸ（商標）は、カリフォルニア州サンタクララ市のＩｎｔｅｌ  Ｃｏｒｐｏｒａｔｉｏｎの登録商標または商標である。）
【００２５】
一実施形態において、宛て先およびソースレジスタ／データは、対応するデータまたは演算のソースおよび宛て先を表す総称である。いくつかの実施形態において、それらは、レジスタ、メモリ、または描写されているもの以外の名前または機能を有する他の複数の記憶領域により実装され得る。例えば、一実施形態において、「ＤＥＳＴ１」は、一時的な記憶レジスタまたは他の記憶領域であり得、他方、「ＳＲＣ１」および「ＳＲＣ２」は、第１および第２ソース記憶レジスタまたは他の記憶領域であり得る、などである。他の複数の実施形態において、ＳＲＣおよびＤＥＳＴ記憶領域の２またはそれより多くは、同じ記憶領域（例えば、ＳＩＭＤレジスタ）内の異なるデータ記憶素子に対応し得る。一実施形態において、複数のソースレジスタの１つは、例えば、第１および第２ソースデータに対して実行された演算の結果を宛て先レジスタとして機能する２つのソースレジスタの１つに書き戻すことにより宛て先レジスタとしても動作し得る。
【００２６】
図１Ａは、本願発明の一実施形態に係る命令を実行する複数の実行ユニットを含むプロセッサと共に形成された例示的なコンピュータシステムのブロック図である。システム１００は、本明細書に説明されている実施形態など本願発明に係る、プロセスデータのための複数のアルゴリズムを実行するロジックを含む複数の実行ユニットを採用するプロセッサ１０２などのコンポーネントを含む。システム１００は、カリフォルニア州サンタクララ市のＩｎｔｅｌ  Ｃｏｒｐｏｒａｔｉｏｎから入手可能であるＰｅｎｔｉｕｍ（登録商標）ＩＩＩ、Ｐｅｎｔｉｕｍ（登録商標）４、Ｘｅｏｎ（商標）、Ｉｔａｎｉｕｍ（登録商標）、ＸＳｃａｌｅ（商標）、および／またはＳｔｒｏｎｇＡＲＭ（商標）マイクロプロセッサに基づくプロセッシングシステムを表すが、（他の複数のマイクロプロセッサを有する複数のＰＣ、エンジニアリングワークステーション、セットトップボックス、および同様のものを含む）他の複数のシステムも用いられ得る。一実施形態において、サンプルのシステム１００は、ワシントン州レドモンド市のＭｉｃｒｏｓｏｆｔ  Ｃｏｒｐｏｒａｔｉｏｎから入手可能である、あるバージョンのＷＩＮＤＯＷＳ（登録商標）オペレーティングシステムを実行し得るが、他の複数のオペレーティングシステム（例えば、ＵＮＩＸ（登録商標）およびＬｉｎｕｘ（登録商標））、組み込みソフトウェア、および／またはグラフィカルユーザインタフェースも用いられ得る。したがって、本願発明の複数の実施形態は、ハードウェア回路およびソフトウェアの任意の特定の組み合わせに限定されない。
【００２７】
複数の実施形態は、コンピュータシステムに限定されない。本願発明の代替的な複数の実施形態は、ハンドヘルドデバイスなどの他の複数のデバイス、および複数の組み込みアプリケーションにおいて用いられ得る。複数のハンドヘルドデバイスのいくつかの例は、携帯電話、インターネットプロトコルデバイス、デジタルカメラ、携帯情報端末（ＰＤＡ）、およびハンドヘルドＰＣを含む。組み込みアプリケーションは、マイクロコントローラ、デジタル信号プロセッサ（ＤＳＰ）、システムオンチップ、ネットワークコンピュータ（ＮｅｔＰＣ）、セットトップボックス、ネットワークハブ、ワイドエリアネットワーク（ＷＡＮ）スイッチ、または、少なくとも１つの実施形態に係る１または複数の命令を実行し得る任意の他のシステムを含み得る。
【００２８】
図１Ａは、本願発明の一実施形態に係る少なくとも１つの命令を実行するアルゴリズムを実行する１または複数の実行ユニット１０８を含むプロセッサ１０２と共に形成されたコンピュータシステム１００のブロック図である。一実施形態は、シングルプロセッサデスクトップまたはサーバシステムの環境に関して説明されるかもしれないが、代替的な複数の実施形態は、マルチプロセッサシステムに含まれ得る。システム１００は、「ハブ」システムアーキテクチャの例である。コンピュータシステム１００は、複数のデータ信号を処理するプロセッサ１０２を含む。プロセッサ１０２は、例えば、複合命令セットコンピュータ（ＣＩＳＣ）マイクロプロセッサ、縮小命令セットコンピューティング（ＲＩＳＣ）マイクロプロセッサ、超長命令語（ＶＬＩＷ）マイクロプロセッサ、複数の命令セットの組み合わせを実装するプロセッサ、またはデジタル信号プロセッサなどの任意の他のプロセッサデバイスであり得る。プロセッサ１０２は、プロセッサ１０２と、システム１００内の他の複数のコンポーネントとの間で複数のデータ信号を送信し得るプロセッサバス１１０に結合されている。システム１００の複数の要素は、それらの、当業者には周知である従来の複数の機能を実行する。
【００２９】
一実施形態において、プロセッサ１０２は、レベル１（Ｌ１）内部キャッシュメモリ１０４を含む。アーキテクチャ次第で、プロセッサ１０２は、単一の内部キャッシュまたは複数のレベルの内部キャッシュを有し得る。代替的に、他の実施形態において、キャッシュメモリは、プロセッサ１０２の外部に存在し得る。他の複数の実施形態は、特定の実装および必要性に応じて内部および外部両方の複数のキャッシュの組み合わせも含み得る。レジスタファイル１０６は、整数レジスタ、浮動小数点レジスタ、状態レジスタ、命令ポインタレジスタを含む様々なレジスタに、異なる複数のタイプのデータを格納し得る。
【００３０】
整数および浮動小数点演算を実行するロジックを含む実行ユニット１０８もプロセッサ１０２に存在する。プロセッサ１０２は、特定のマクロ命令のためのマイクロコードを格納するマイクロコード（ｕｃｏｄｅ）ＲＯＭも含む。一実施形態に関して、実行ユニット１０８は、パックド命令セット１０９を処理するロジックを含む。汎用プロセッサ１０２の命令セットに、それら命令を実行する関連付けられた複数の回路と共にパックド命令セット１０９を含めることにより、多くのマルチメディアアプリケーションにより用いられる複数の演算が、汎用プロセッサ１０２内のパックドデータを用いて実行され得る。したがって、パックドデータに対して複数の演算を実行するためのプロセッサのデータバスの幅全体を用いることにより、多くのマルチメディアアプリケーションが加速され得、より効率的に実行され得る。このことは、一度に１つのデータ要素に対して１または複数の演算を実行するのに、プロセッサのデータバスを通じてより小さな複数の単位のデータを転送する必要性を取り除き得る。
【００３１】
実行ユニット１０８の代替的な複数の実施形態も、マイクロコントローラ、組み込みプロセッサ、グラフィクスデバイス、ＤＳＰ、および他の複数のタイプの論理回路において用いられ得る。システム１００はメモリ１２０を含む。メモリ１２０は、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）デバイス、スタティックランダムアクセスメモリ（ＳＲＡＭ）デバイス、フラッシュメモリデバイス、または他のメモリデバイスであり得る。メモリ１２０は、プロセッサ１０２により実行され得る複数のデータ信号により表される複数の命令および／またはデータを格納し得る。
【００３２】
システムロジックチップ１１６は、プロセッサバス１１０とメモリ１２０とに結合されている。例示されている実施形態におけるシステムロジックチップ１１６はメモリコントローラハブ（ＭＣＨ）である。プロセッサ１０２は、プロセッサバス１１０を介してＭＣＨ１１６と通信を行い得る。ＭＣＨ１１６は、命令およびデータの格納のための、およびグラフィクスコマンド、データ、およびテクスチャの格納のための、メモリ１２０への高帯域幅のメモリパス１１８を提供する。ＭＣＨ１１６は、プロセッサ１０２と、メモリ１２０と、システム１００内の他の複数のコンポーネントとの間で複数のデータ信号を方向付け、プロセッサバス１１０と、メモリ１２０と、システムＩ／Ｏ１２２との間でそれらデータ信号をブリッジ接続する。いくつかの実施形態において、システムロジックチップ１１６は、グラフィクスコントローラ１１２への結合のためのグラフィクスポートを提供し得る。ＭＣＨ１１６は、メモリインタフェース１１８を通じてメモリ１２０に結合されている。グラフィクスカード１１２は、Ａｃｃｅｌｅｒａｔｅｄ  Ｇｒａｐｈｉｃｓ  Ｐｏｒｔ（ＡＧＰ）インターコネクト１１４を通じてＭＣＨ１１６に結合されている。
【００３３】
システム１００は、特許保護されたハブインタフェースバス１２２を用いて、ＭＣＨ１１６をＩ／Ｏコントローラハブ（ＩＣＨ）１３０）に結合する。ＩＣＨ１３０は、ローカルＩ／Ｏバスを介して、いくつかのＩ／Ｏデバイスへの直接的な複数の接続を提供する。ローカルＩ／Ｏバスは、複数の周辺機器をメモリ１２０、チップセット、およびプロセッサ１０２に接続するための高速Ｉ／Ｏバスである。いくつかの例は、オーディオコントローラ、ファームウェアハブ（フラッシュＢＩＯＳ）１２８、無線送受信機１２６、データストレージ１２４、ユーザ入力およびキーボードインタフェースを含むレガシーＩ／Ｏコントローラ、ユニバーサルシリアルバス（ＵＳＢ）などのシリアル拡張ポート、およびネットワークコントローラ１３４である。データストレージデバイス１２４は、ハードディスクドライブ、フロッピー（登録商標）ディスクドライブ、ＣＤ―ＲＯＭデバイス、フラッシュメモリデバイス、または他の大容量ストレージデバイスを含み得る。
【００３４】
システムの他の実施形態に関して、一実施形態に係る命令は、システムオンチップと共に用いられ得る。システムオンチップの一実施形態は、プロセッサとメモリとを含む。１つのそのようなシステムのメモリはフラッシュメモリである。フラッシュメモリは、プロセッサおよび他の複数のシステムコンポーネントと同じダイに位置付けられ得る。加えて、メモリコントローラまたはグラフィクスコントローラなどの他の複数のロジックブロックも、システムオンチップ上に位置付けられ得る。
【００３５】
図１Ｂは、本願発明の一実施形態の原理を実装するデータプロセッシングシステム１４０を示す。本明細書に説明されている複数の実施形態は、本願発明の複数の実施形態の範囲から逸脱することなく代替的な複数のプロセッシングシステムと共に用いられ得ることが当業者には容易に理解されるであろう。
【００３６】
コンピュータシステム１４０は、一実施形態に係る少なくとも１つの命令を実行可能であるプロセッシングコア１５９を備える。一実施形態に関して、プロセッシングコア１５９は、ＣＩＳＣ、ＲＩＳＣ、またはＶＬＩＷタイプのアーキテクチャを含むがこれらに限定されない任意のタイプのアーキテクチャのプロセッシングユニットを表す。プロセッシングコア１５９は、１または複数の処理技術での製造に適しているかもしれず、および、マシン可読媒体上で十分に詳細に表されることにより、上記の製造を容易にするのに適しているかもしれない。
【００３７】
プロセッシングコア１５９は、実行ユニット１４２と、（複数の）レジスタファイルのセット１４５と、デコーダ１４４とを備える。プロセッシングコア１５９は、本願発明の複数の実施形態の理解には必要ではない追加の回路（図示されていない）も含む。実行ユニット１４２は、プロセッシングコア１５９により受信される複数の命令を実行するために用いられる。典型的な複数のプロセッサ命令を実行することに加えて、実行ユニット１４２は、複数のパックドデータフォーマットに対して複数の演算を実行するためにパックド命令セット１４３に含まれる複数の命令を実行し得る。パックド命令セット１４３は、本願発明の複数の実施形態を実行するための複数の命令と、他の複数のパックド命令とを含む。実行ユニット１４２は、内部バスによりレジスタファイル１４５に結合されている。レジスタファイル１４５は、データを含む情報を格納するための、プロセッシングコア１５９上の記憶領域を表す。前に言及したように、パックドデータを格納するために用いられる記憶領域は重要ではないことが理解される。実行ユニット１４２はデコーダ１４４に結合されている。デコーダ１４４は、プロセッシングコア１５９により受信された複数の命令を、複数の制御信号および／またはマイクロコードエントリーポイントへとデコードするために用いられる。これらの制御信号および／またはマイクロコードエントリーポイントに応答して、実行ユニット１４２は適当な複数の演算を実行する。一実施形態において、デコーダは、命令内に示される対応するデータに対して実行されるべき演算が何であるかを示すであろう、命令のオペコードを翻訳するのに用いられる。
【００３８】
プロセッシングコア１５９は、例えば、シンクロナスダイナミックランダムアクセスメモリ（ＳＤＲＡＭ）コントロール１４６、スタティックランダムアクセスメモリ（ＳＲＡＭ）コントロール１４７、バーストフラッシュメモリインタフェース１４８、パーソナルコンピュータメモリカードインターナショナルアソシエーション（ＰＣＭＣＩＡ）／コンパクトフラッシュ（登録商標）（ＣＦ）カードコントロール１４９、液晶ディスプレイ（ＬＣＤ）コントロール１５０、ダイレクトメモリアクセス（ＤＭＡ）コントローラ１５１、および代替的なバスマスターインタフェース１５２を含み得るがこれらに限定されない様々な他のシステムデバイスと通信を行うためのバス１４１と結合されている。一実施形態において、データプロセッシングシステム１４０は、Ｉ／Ｏバス１５３を介して様々なＩ／Ｏデバイスと通信を行うためのＩ／Ｏブリッジ１５４も備え得る。そのような複数のＩ／Ｏデバイスは、例えば、ユニバーサルアシンクロナスレシーバ／トランスミッタ（ＵＡＲＴ）１５５、ユニバーサルシリアルバス（ＵＳＢ）１５６、Ｂｌｕｅｔｏｏｔｈ（登録商標）無線ＵＡＲＴ１５７、およびＩ／Ｏ拡張インタフェース１５８を含み得るがこれらに限定されない。
【００３９】
データプロセッシングシステム１４０の一実施形態は、モバイル、ネットワークおよび／または無線通信、並びに、文字列比較演算を含む複数のＳＩＭＤ演算を実行可能なプロセッシングコア１５９を提供する。プロセッシングコア１５９は、ウォルシュ−アダマール変換、高速フーリエ変換（ＦＦＴ）、離散コサイン変換（ＤＣＴ）、およびそれらのそれぞれの逆変換などの離散変換、色空間変換、ビデオエンコード動き推定またはビデオデコード動き補償などの圧縮／解凍技術、並びに、パルス符号変調（ＰＣＭ）などの変調／復調（ＭＯＤＥＭ）機能を含む、様々なオーディオ、ビデオ、イメージング、および通信アルゴリズムを用いてプログラミングされ得る。
【００４０】
図１Ｃは、ＳＩＭＤベクトルポピュレーションカウント機能性を提供する複数の命令を実行可能なデータプロセッシングシステムの他の代替的な実施形態を示す。代替的な一実施形態によると、データプロセッシングシステム１６０は、メインプロセッサ１６６と、ＳＩＭＤコプロセッサ１６１と、キャッシュメモリ１６７と、入出力システム１６８とを含み得る。オプションで、入出力システム１６８は、無線インタフェース１６９に結合され得る。ＳＩＭＤコプロセッサ１６１は、一実施形態に係る複数の命令を含む複数の演算を実行可能である。プロセッシングコア１７０は、１または複数の処理技術での製造に適しているかもしれず、および、マシン可読媒体上で十分に詳細に表されることにより、プロセッシングコア１７０を含むデータプロセッシングシステム１６０の全て、またはその一部の製造を容易にするのに適しているかもしれない。
【００４１】
一実施形態に関して、ＳＩＭＤコプロセッサ１６１は、実行ユニット１６２と、（複数の）レジスタファイルのセット１６４とを備える。メインプロセッサ１６６の一実施形態は、実行ユニット１６２による実行のための一実施形態に係る複数の命令を含む命令セット１６３の複数の命令を認識するデコーダ１６５を備える。代替的な複数の実施形態に関して、ＳＩＭＤコプロセッサ１６１は、命令セット１６３の複数の命令をデコードするデコーダ１６５Ｂの少なくとも一部も備える。プロセッシングコア１７０は、本願発明の複数の実施形態の理解に必要ではない追加の回路（図示されていない）も含む。
【００４２】
処理において、メインプロセッサ１６６は、キャッシュメモリ１６７および入出力システム１６８との複数のインタラクションを含む一般的なタイプの複数のデータ処理演算を制御する一連のデータ処理命令を実行する。一連のデータ処理命令には複数のＳＩＭＤコプロセッサ命令が組み込まれている。メインプロセッサ１６６のデコーダ１６５は、取り付けられたＳＩＭＤコプロセッサ１６１により実行されるべきタイプであるものとしてこれらのＳＩＭＤコプロセッサ命令を認識する。したがって、メインプロセッサ１６６は、これらＳＩＭＤコプロセッサ命令（または複数のＳＩＭＤコプロセッサ命令を表す複数の制御信号）をコプロセッサバス１７１上で発行し、ここからそれらが、任意の複数の取り付けられたＳＩＭＤコプロセッサにより受信される。この場合、ＳＩＭＤコプロセッサ１６１はそのために意図された任意の受信された複数のＳＩＭＤコプロセッサ命令を受け付け実行するであろう。
【００４３】
データが、複数のＳＩＭＤコプロセッサ命令による処理のために、無線インタフェース１６９を介して受信され得る。一例に関して、デジタル信号の形態で音声通信が受信され得、そのデジタル信号は、複数のＳＩＭＤコプロセッサ命令により処理されて、それら音声通信を表す複数のデジタルオーディオサンプルが再生成され得る。他の例に関して、圧縮されたオーディオおよび／またはビデオがデジタルビットストリームの形態で受信され得、そのデジタルビットストリームは複数のＳＩＭＤコプロセッサ命令により処理されて、複数のデジタルオーディオサンプルおよび／またはモーションビデオフレームが再生成され得る。プロセッシングコア１７０の一実施形態に関して、メインプロセッサ１６６およびＳＩＭＤコプロセッサ１６１は、一実施形態に係る複数の命令を含む命令セット１６３の複数の命令を認識する、実行ユニット１６２と、（複数の）レジスタファイルのセット１６４と、デコーダ１６５とを備えるシングルプロセッシングコア１７０へと統合され得る。
【００４４】
図２は、本願発明の一実施形態に係る複数の命令を実行する複数の論理回路を含むプロセッサ２００に関するマイクロアーキテクチャのブロック図である。いくつかの実施形態において、一実施形態に係る命令は、単精度および倍精度の整数および浮動小数点のデータタイプなどのデータタイプに加えて、バイト、ワード、ダブルワード、カッドワード等のサイズを有する複数のデータ要素に対して演算を行うよう実装され得る。一実施形態において、インオーダーフロントエンド２０１は、実行されることになる複数の命令をフェッチし、それらをプロセッサパイプラインにおいて後に用いるために用意する、プロセッサ２００の一部である。フロントエンド２０１はいくつかのユニットを含み得る。一実施形態において、命令プリフェッチャ２２６は、メモリから複数の命令をフェッチし、それらを命令デコーダ２２８へ供給し、命令デコーダ２２８はそれらをデコードまたは翻訳する。例えば、一実施形態において、デコーダは受信された命令を、マシンが実行し得る「マイクロ命令」または「マイクロ演算」と呼ばれる（マイクロｏｐまたはｕｏｐとも呼ばれる）１または複数の演算へとデコードする。他の複数の実施形態において、デコーダは、その命令を一実施形態に係る複数の演算を実行するマイクロアーキテクチャにより用いられるオペコード、並びに対応する複数のデータおよび制御フィールドへとパースする。一実施形態において、トレースキャッシュ２３０はデコードされた複数のマイクロオペレーション（ｕｏｐ）を取り込み、それらを、実行のためにｕｏｐキュー２３４においてプログラムに指示されるシーケンスまたはトレースへと組み立てる。トレースキャッシュ２３０が複合命令に遭遇したとき、マイクロコードＲＯＭ２３２は演算を完了するのに必要な複数のｕｏｐを提供する。
【００４５】
いくつかの命令は、単一のマイクロｏｐに変換され、他方、その他のものは、演算全体を完了するのにいくつかのマイクロｏｐを必要とする。一実施形態において、命令を完了するのに４つより多いマイクロｏｐが必要とされる場合、デコーダ２２８は、その命令を実行するのにマイクロコードＲＯＭ２３２にアクセスする。一実施形態に関して、命令は、命令デコーダ２２８における処理のために少数のマイクロｏｐへとデコードされ得る。他の実施形態において、演算を成し遂げるのに複数のマイクロｏｐが必要とされる場合、命令は、マイクロコードＲＯＭ２３２内に格納され得る。トレースキャッシュ２３０は、エントリーポイントプログラマブルロジックアレイ（ＰＬＡ）を参照して、一実施形態に係る１または複数の命令を完了するマイクロコードシーケンスをマイクロコードＲＯＭ２３２から読み取るために正確なマイクロ命令ポインタを判断する。マイクロコードＲＯＭ２３２が、命令のために複数のマイクロｏｐを順番に配列し終えた後に、マシンのフロントエンド２０１は、トレースキャッシュ２３０からの複数のマイクロｏｐのフェッチを再開する。
【００４６】
アウトオブオーダー実行エンジン２０３において、実行のために複数の命令の用意がされる。アウトオブオーダー実行ロジックは、複数の命令がパイプラインを下って実行のためにスケジューリングがされるときに、それらのフローを円滑にし、再び順序付けて性能を最適化する複数のバッファを有する。アロケータロジックは、各ｕｏｐが実行のために必要とする複数のマシンバッファおよびリソースを割り当てる。レジスタリネーミングロジックは、複数のロジックレジスタをレジスタファイルにおける複数のエントリーへとリネームする。またアロケータは複数の命令スケジューラ（メモリスケジューラ、高速スケジューラ２０２、低速／一般的浮動小数点スケジューラ２０４、および単純浮動小数点スケジューラ２０６）の前に、２つのｕｏｐキュー（１つはメモリ演算に関するものであり、１つは非メモリ演算に関するものである）の１つにおけるｕｏｐ毎にエントリーを割り当てる。ｕｏｐスケジューラ２０２、２０４、２０６は、それらの依存性の入力レジスタオペランドソースの用意が出来ていること、およびｕｏｐがそれらの演算を完了するのに必要とする複数の実行リソースの利用可能性に基づきｕｏｐがいつ実行する準備が出来るかを判断する。一実施形態の高速スケジューラ２０２は、メインクロックサイクルの半分毎にスケジューリングを行い得、他方、他の複数のスケジューラは、メインプロセッサのクロックサイクル毎に１回のみスケジューリングを行い得る。複数のスケジューラは、実行のために複数のｕｏｐのスケジューリングを行う複数のディスパッチポートのために仲裁を行う。
【００４７】
レジスタファイル２０８、２１０は、スケジューラ２０２、２０４、２０６と、実行ブロック２１１の実行ユニット２１２、２１４、２１６、２１８、２２０、２２２、２２４との間にある。整数および浮動小数点の演算のためにそれぞれ別個のレジスタファイル２０８、２１０がある。また一実施形態の各レジスタファイル２０８、２１０は、完了したばかりの、レジスタファイルにまだ書き込まれていない複数の結果を、新たな依存性の複数のｕｏｐへとバイパスし得る、または進め得るバイパスネットワークを含む。また整数レジスタファイル２０８および浮動小数点レジスタファイル２１０は、他のものとデータの通信が可能である。一実施形態に関して、整数レジスタファイル２０８は、２つの別個のレジスタファイル（１つのレジスタファイルは、データの下位の３２ビットのためのものであり、第２のレジスタファイルは、データの上位の３２ビットのためのもの）に分割される。複数の浮動小数点命令は典型的には、６４〜１２８ビット幅の複数のオペランドを有するので、一実施形態の浮動小数点レジスタファイル２１０は１２８ビット幅の複数のエントリーを有する。
【００４８】
実行ブロック２１１は、複数の命令が実際に実行される実行ユニット２１２、２１４、２１６、２１８、２２０、２２２、２２４を含む。このセクションは、複数のマイクロ命令を実行するために必要である複数の整数および浮動小数点データオペランド値を格納するレジスタファイル２０８、２１０を含む。一実施形態のプロセッサ２００は、複数の実行ユニットから成る：アドレス生成ユニット（ＡＧＵ）２１２、ＡＧＵ２１４、高速ＡＬＵ２１６、高速ＡＬＵ２１８、低速ＡＬＵ２２０、浮動小数点ＡＬＵ２２２、浮動小数点移動ユニット２２４。一実施形態に関して、浮動小数点実行ブロック２２２、２２４は、浮動小数点、ＭＭＸ、ＳＩＭＤ、ＳＳＥ、または他の複数の演算を実行する。一実施形態の浮動小数点ＡＬＵ２２２は、除算、平方根、および剰余マイクロｏｐを実行する６４ビット×６４ビット浮動小数点除算器を含む。本願発明の複数の実施形態に関して、浮動小数点値を伴う複数の命令は、浮動小数点ハードウェアによって処理され得る。一実施形態において、複数のＡＬＵ演算は、高速ＡＬＵ実行ユニット２１６、２１８へと向かう。一実施形態の高速ＡＬＵ２１６、２１８は、クロックサイクルの半分の実効レイテンシで高速の演算を実行し得る。一実施形態に関して、低速ＡＬＵ２２０は、乗算器、シフト、フラグロジック、および分岐処理などのレイテンシが長いタイプの演算のための整数実行ハードウェアを含むので、最も複雑な複数の整数演算は低速ＡＬＵ２２０へと向かう。複数のメモリロード／格納演算は、ＡＧＵ２１２、２１４により実行される。一実施形態に関して、整数ＡＬＵ２１６、２１８、２２０は、複数の６４ビットデータオペランドに対して複数の整数演算を実行する環境に関して説明される。代替的な複数の実施形態において、ＡＬＵ２１６、２１８、２２０は、１６、３２、１２８、２５６等を含む様々なデータビットをサポートするよう実装され得る。同様に、浮動小数点ユニット２２２、２２４は、様々な幅のビットを有するある範囲のオペランドをサポートするよう実装され得る。一実施形態に関して、浮動小数点ユニット２２２、２２４は、ＳＩＭＤおよびマルチメディア命令と合わせて、１２８ビット幅の複数のパックドデータオペランドに対して演算を行い得る。
【００４９】
一実施形態において、ｕｏｐスケジューラ２０２、２０４、２０６は、親ロードが実行を終了する前に依存性の複数の演算をディスパッチする。複数のｕｏｐはプロセッサ２００において推測でスケジューリングされ実行されるので、プロセッサ２００は、メモリのミスを処理するロジックも含む。データロードのミスがデータキャッシュで起こった場合、一時的に不正確なデータと共にスケジューラを離れた依存性の複数の演算がパイプライン内でインフライトであり得る。再生メカニズムは、不正確なデータを用いる複数の命令をトラッキングし、再実行する。複数の依存性の演算のみが再生される必要があり、非依存性のものは完了が許される。また、プロセッサの一実施形態の複数のスケジューラおよび再生メカニズムは、ＳＩＭＤベクトルポピュレーションカウント機能性を提供する複数の命令を捕らえるように設計される。
【００５０】
「レジスタ」という用語は、複数のオペランドを識別する複数の命令の一部として用いられる、ボード上の複数のプロセッサストレージ位置を指し得る。言い換えると、複数のレジスタは、プロセッサの（プログラマから見て）外部から利用可能であるものである。しかし、実施形態の複数のレジスタは、特定のタイプの回路に、その意味が限定されるべきではない。むしろ、実施形態のレジスタは、データを格納および提供可能であり、本明細書に説明されている複数の機能を実行可能である。本明細書に説明されている複数のレジスタは、専用の物理的レジスタ、レジスタリネーミングを用いる動的に割り当てられた物理レジスタ、専用の、および動的に割り当てられた物理レジスタの組み合わせ等など任意の数の異なる技術を用いてプロセッサ内で回路により実装され得る。一実施形態において、複数の整数レジスタは、３２ビットの整数データを格納する。また、一実施形態のレジスタファイルは、パックドデータのための８つのマルチメディアＳＩＭＤレジスタを含む。以下の説明に関して、複数のレジスタは、カリフォルニア州サンタクララ市のＩｎｔｅｌ  ＣｏｒｐｏｒａｔｉｏｎからのＭＭＸ技術により可能とされる複数のマイクロプロセッサにおける６４ビット幅のＭＭＸ（商標）レジスタ（いくつかの例において「ｍｍ」レジスタとも呼ばれる）などの、パックドデータを保持するよう設計されたデータレジスタであるものと理解される。整数および浮動小数点の両方の形態で利用可能あるこれらのＭＭＸレジスタは、ＳＩＭＤおよびＳＳＥ命令を伴う複数のパックドデータ要素によって演算を行い得る。同様に、ＳＳＥ２、ＳＳＥ３、ＳＳＥ４、またはさらに上のもの（包括的に「ＳＳＥｘ」と呼ぶ）の技術に関する１２８ビット幅ＸＭＭレジスタも、そのような複数のパックドデータオペランドを保持するのに用いられ得る。一実施形態において、パックドデータおよび整数データの格納において、複数のレジスタは、２つのデータタイプの間で区別する必要はない。一実施形態において、整数および浮動小数点は、同じレジスタファイル、または異なるレジスタファイルに含まれる。さらに、一実施形態において、浮動小数点および整数データは、異なるレジスタ、または同じレジスタに格納され得る。
【００５１】
以下の複数の図面の複数の例において、複数のデータオペランドが説明される。図３Ａは、本願発明の一実施形態に係る複数のマルチメディアレジスタにおける様々なパックドデータタイプの表現を示す。図３Ａは、１２８ビット幅オペランドに関するパックドバイト３１０、パックドワード３２０、およびパックドダブルワード（ｄｗｏｒｄ）３３０のデータタイプを示す。本例のパックドバイトフォーマット３１０は、１２８ビット長であり、１６個のパックドバイトデータ要素を含む。バイトはここで、８ビットのデータとして定義される。バイトデータ要素毎の情報は、バイト０に関してはビット７〜ビット０に、バイト１に関してはビット１５〜ビット８に、バイト２に関してはビット２３〜ビット１６に、最後にバイト１５に関してはビット１２０〜ビット１２７に格納される。したがって、利用可能なビットの全てがレジスタにおいて用いられる。この格納配置は、プロセッサの格納効率を高める。同じく、１６個のデータ要素がアクセスされることにより、１つの演算は、並列で１６個のデータ要素に対して実行され得るようになる。
【００５２】
一般的に、データ要素は、同じ長さの他の複数のデータ要素とともに、単一のレジスタまたは記憶位置に格納される個々のデータである。ＳＳＥｘ技術に関するパックドデータシーケンスにおいて、ＸＭＭレジスタに格納されるデータ要素の数は、１２８ビットを個々のデータ要素のビット長で除算して得た数である。同様に、ＭＭＸおよびＳＳＥ技術に関するパックドデータシーケンスにおいて、ＭＭＸレジスタに格納されるデータ要素の数は、６４ビットを、個々のデータ要素のビット長で除算して得た数である。図３Ａに示されている複数のデータタイプは１２８ビット長であるが、本願発明の複数の実施形態は、６４ビット幅、２５６ビット幅、５１２ビット幅、または他のサイズのオペランドによっても演算を行い得る。本例のパックドワードフォーマット３２０は、１２８ビット長であり、８つのパックドワードデータ要素を含む。各パックドワードは、１６ビットの情報を含む。図３Ａのパックドダブルワードフォーマット３３０は、１２８ビット長であり、４つのパックドダブルワードデータ要素を含む。各パックドダブルワードデータ要素は３２ビットの情報を含む。パックドカッドワードは１２８ビット長であり、２つのパックドカッドワードデータ要素を含む。
【００５３】
図３Ｂは、代替的な、レジスタ内のデータ記憶フォーマットを示す。各パックドデータは、１より多くの非依存性のデータ要素を含み得る。３つのパックドデータフォーマット（パックドハーフ３４１、パックドシングル３４２、およびパックドダブル３４３）が示されている。パックドハーフ３４１、パックドシングル３４２、およびパックドダブル３４３の一実施形態は、複数の固定小数点データ要素を含む。代替的な実施形態に関して、パックドハーフ３４１、パックドシングル３４２、およびパックドダブル３４３の１または複数は、浮動小数点データ要素を含み得る。パックドハーフ３４１の代替的な一実施形態は、１２８ビット長であり、８つの１６ビットデータ要素を含む。パックドシングル３４２の一実施形態は、１２８ビット長であり、４つの３２ビットデータ要素を含む。パックドダブル３４３の一実施形態は、１２８ビット長であり、２つの６４ビットデータ要素を含む。それらのようなパックドデータフォーマットは、例えば、９６ビット、１６０ビット、１９２ビット、２２４ビット、２５６ビット、５１２ビット、またはそれより大きな他のレジスタの長さへとさらに拡張され得ることが理解されよう。
【００５４】
図３Ｃは、本願発明の一実施形態に係る複数のマルチメディアレジスタにおける様々な符号付き、および符号なしパックドデータタイプの表現を示す。符号なしパックドバイト表現３４４は、ＳＩＭＤレジスタにおける符号なしパックドバイトの格納を示す。バイトデータ要素毎の情報は、バイトゼロに関してはビット７〜ビットゼロに、バイト１に関してはビット１５〜ビット８に、バイト２に関してはビット２３〜ビット１６に、等のように、そして最後にバイト１５に関してはビット１２０〜ビット１２７に格納される。したがって、利用可能なビットの全てがレジスタにおいて用いられる。この格納配置は、プロセッサの格納効率を高め得る。同じく、１６個のデータ要素がアクセスされることにより、１つの演算は、並列方式で１６個のデータ要素に対して実行され得るようになる。符号付きパックドバイト表現３４５は、符号付きパックドバイトの格納を示す。なお、各バイトデータ要素の８番目のビットは符号インジケータである。符号なしパックドワード表現３４６は、ワード７〜ワードゼロがどのようにＳＩＭＤレジスタにおいて格納されるかを示す。符号付きパックドワード表現３４７は、符号なしパックドワードのレジスタ内の表現３４６と同様である。なお、各ワードデータ要素の１６番目のビットは符号インジケータである。符号なしパックドダブルワード表現３４８は、ダブルワードのデータ要素がどのように格納されるかを示す。符号付きパックドダブルワード表現３４９は、符号なしパックドダブルワードのレジスタ内の表現３４８と同様である。なお、必要な符号ビットは、各ダブルワードのデータ要素の３２番目のビットである。
【００５５】
図３Ｄは、３２またはそれより多くのビットを有する演算エンコード（オペコード）フォーマット３６０の一実施形態、およびｉｎｔｅｌ．ｃｏｍ／ｐｒｏｄｕｃｔｓ／ｐｒｏｃｅｓｓｏｒ／ｍａｎｕａｌｓ／でワールドワイドウェブ（ｗｗｗ）上でカリフォルニア州サンタクララ市のＩｎｔｅｌ  Ｃｏｒｐｏｒａｔｉｏｎから入手可能である「Ｉｎｔｅｌ(r)  ６４  ａｎｄ  ＩＡ−３２  Ｉｎｔｅｌ  Ａｒｃｈｉｔｅｃｔｕｒｅ  Ｓｏｆｔｗａｒｅ  Ｄｅｖｅｌｏｐｅｒ'ｓ  Ｍａｎｕａｌ  Ｃｏｍｂｉｎｅｄ  Ｖｏｌｕｍｅｓ  ２Ａ  ａｎｄ  ２Ｂ：  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｓｅｔ  Ｒｅｆｅｒｅｎｃｅ  Ａ−Ｚ」に説明されているタイプのオペコードフォーマットに対応するレジスタ／メモリオペランドアドレッシングモードの描写である。一実施形態において、命令は、フィールド３６１および３６２の１または複数によりエンコードされ得る。命令毎に、最大２つのソースオペランド識別子３６４および３６５を含む最大２つのオペランド位置が識別され得る。一実施形態に関して、宛て先オペランド識別子３６６はソースオペランド識別子３６４と同じであり、他方、他の複数の実施形態において、それらは異なる。代替的な実施形態に関して、宛て先オペランド識別子３６６はソースオペランド識別子３６５と同じであり、他方、他の複数の実施形態において、それらは異なる。一実施形態において、ソースオペランド識別子３６４および３６５により識別される複数のソースオペランドの１つは、命令の複数の結果により上書きされ、他方、他の複数の実施形態において、識別子３６４は、ソースレジスタ要素に対応し、識別子３６５は、宛て先レジスタ要素に対応する。一実施形態に関して、オペランド識別子３６４および３６５は、３２ビットまたは６４ビットのソースおよび宛て先オペランドを識別するのに用いられ得る。
【００５６】
図３Ｅは、４０またはそれより多くのビットを有する他の代替的な演算エンコード（オペコード）フォーマット３７０の描写である。オペコードフォーマット３７０はオペコードフォーマット３６０に対応し、オプションのプレフィックスバイト３７８を備える。一実施形態に係る命令は、フィールド３７８、３７１および３７２の１または複数によりエンコードされ得る。命令毎に、ソースオペランド識別子３７４および３７５により、およびプレフィックスバイト３７８により最大２つのオペランド位置が識別され得る。一実施形態に関して、プレフィックスバイト３７８が３２ビットまたは６４ビットのソースおよび宛て先オペランドを識別するのに用いられ得る。一実施形態に関して、宛て先オペランド識別子３７６はソースオペランド識別子３７４と同じであり、他方、他の複数の実施形態において、それらは異なる。代替的な実施形態に関して、宛て先オペランド識別子３７６はソースオペランド識別子３７５と同じであり、他方、他の複数の実施形態において、それらは異なる。一実施形態において、命令は、オペランド識別子３７４および３７５により識別される複数のオペランドの１または複数に対して演算を行い、オペランド識別子３７４および３７５により識別される１または複数のオペランドは、命令の複数の結果により上書きされ、他方、他の複数の実施形態において、識別子３７４および３７５により識別される複数のオペランドは、他のレジスタにおいて他のデータ要素に書き込まれる。オペコードフォーマット３６０および３７０は、部分的にＭＯＤフィールド３６３および３７３により、およびオプションのスケール−インデックス−ベースおよび変位バイトにより指定されるレジスタからレジスタへの、メモリからレジスタへの、メモリによるレジスタの、レジスタによるレジスタの、即値によるレジスタの、レジスタからメモリへのアドレッシングを可能とする。
【００５７】
次に図３Ｆを参照すると、いくつかの代替的な実施形態において、６４ビット（または１２８ビット、または２５６ビット、または５１２ビット、またはそれより多くの）単一命令多重データ処理（ＳＩＭＤ）算術演算が、コプロセッサデータ処理（ＣＤＰ）命令を通じて実行され得る。演算エンコード（オペコード）フォーマット３８０は、ＣＤＰオペコードフィールド３８２および３８９を有する１つのそのようなＣＤＰ命令を描写している。代替的な複数の実施形態に関して、ＣＤＰ命令のタイプにおいて、複数の演算は、フィールド３８３、３８４、３８７および３８８の１または複数によりエンコードされ得る。命令毎に、最大２つのソースオペランド識別子３８５および３９０および１つの宛て先オペランド識別子３８６を含む最大３つのオペランド位置が識別され得る。コプロセッサのの一実施形態は、８、１６、３２、および６４ビット値に対して演算を行い得る。一実施形態に関して、命令は、複数の整数データ要素に対して実行される。いくつかの実施形態において、命令は、条件フィールド３８１を用い、条件的に実行され得る。いくつかの実施形態に関して、複数のソースデータサイズは、フィールド３８３によりエンコードされ得る。いくつかの実施形態において、ゼロ（Ｚ）、ネガティブ（Ｎ）、キャリー（Ｃ）、およびオーバーフロー（Ｖ）検出が、複数のＳＩＭＤフィールド上で行われ得る。いくつかの命令に関して、飽和のタイプはフィールド３８４によりエンコードされ得る。
【００５８】
次に図３Ｇを参照すると、図３Ｇは、ｉｎｔｅｌ．ｃｏｍ／ｐｒｏｄｕｃｔｓ／ｐｒｏｃｅｓｓｏｒ／ｍａｎｕａｌｓ／でワールドワイドウェブ（ｗｗｗ）上でカリフォルニア州サンタクララ市Ｉｎｔｅｌ  Ｃｏｒｐ．から入手可能である「Ｉｎｔｅｌ(r)  Ａｄｖａｎｃｅｄ  Ｖｅｃｔｏｒ  Ｅｘｔｅｎｓｉｏｎｓ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｒｅｆｅｒｅｎｃｅ」に説明されているタイプのオペコードフォーマットに対応する、他の実施形態に係るＳＩＭＤベクトルポピュレーションカウント機能性を提供する他の代替的な演算エンコード（オペコード）フォーマット３９７の描写である。
【００５９】
オリジナルのｘ８６命令セットは、第１の「オペコード」バイトからその存在が知られる、追加の複数のバイトに含まれた様々なフォーマットのアドレスシラブルおよび即値オペランドを有する１バイトのオペコードを提供した。加えて、オペコードに対する修飾子（命令の前に配置されなければならないのでプレフィックスと呼ばれる）として確保されている特定の複数のバイト値があった。２５６個のオペコードバイト（これらの特別なプレフィックス値を含む）のオリジナルのパレットが使い果たされたとき、単一のバイトが、２５６個のオペコードの新たなセットへのエスケープに用いられる。複数のベクトル命令（例えば、ＳＩＭＤ）が追加されたとき、より多くのオペコードの必要性が生じ、プレフィックスの使用によって拡張されたとしても「２バイト」のオペコードマップも不十分であった。この目的のために、新たな複数の命令が、２バイトに加えて、オプションのプレフィックスを識別子として用いる追加の複数のマップに追加された。
【００６０】
加えて、６４ビットモードの追加の複数のレジスタを容易にするために、追加のプレフィックス（「ＲＥＸ」と呼ばれる）が複数のプレフィックスとオペコードと（およびオペコードを判断するのに必要な任意の複数のエスケープバイトと）の間で用いられ得る。一実施形態において、ＲＥＸは、６４ビットモードの追加の複数のレジスタの使用を示す４つの「ペイロード」ビットを有し得る。他の複数の実施形態において、それは４より少ない、またはより多いビットを有し得る。（フォーマット３６０および／またはフォーマット３７０に概して対応する）少なくとも１つの命令セットの一般的なフォーマットは、以下により包括的に示される。［プレフィックス］［ｒｅｘ］エスケープ［エスケープ２］オペコードｍｏｄｒｍ（等）
【００６１】
オペコードフォーマット３９７はオペコードフォーマット３７０に対応し、殆どの他の一般的に用いられる複数のレガシー命令プレフィックスバイトおよびエスケープコードの代わりとなるオプションの複数のＶＥＸプレフィックスバイト３９１（一実施形態において、Ｃ４  ｈｅｘから開始する）を含む。例えば、以下は、第２のエスケープコードがオリジナルの命令に存在するとき、または、ＲＥＸフィールドの追加の複数のビット（例えば、ＸＢおよびＷフィールド）が用いられる必要があるときに用いられ得る、命令をエンコードする２つのフィールドを用いる実施形態を示す。以下に示されている実施形態において、レガシーのエスケープは、新たなエスケープ値により表され、レガシーの複数のプレフィックスは、複数の「ペイロード」バイトの一部として完全に圧縮され、複数のレガシープレフィックスは、リクレイムされ（ｒｅｃｌａｉｍｅｄ）将来の拡張に利用可能であり、第２のエスケープコードは、利用可能な将来のマップまたは特徴空間により「マップ」フィールドにおいて圧縮され、新たな特徴が追加される（例えば、長くなったベクトル長および追加のソースレジスタ指定子）。
【表１】
2019050039.tif 000003
【００６２】
一実施形態に係る命令は、フィールド３９１および３９２の１または複数によりエンコードされ得る。命令毎に、ソースオペランド識別子３７４および３７５との組み合わせにより、およびオプションのスケール−インデックス−ベース（ＳＩＢ）識別子３９３、オプションの変位識別子３９４、およびオプションの即値バイト３９５との組み合わせによりフィールド３９１により最大４つのオペランド位置が識別され得る。一実施形態に関して、複数のＶＥＸプレフィックスバイト３９１が、３２ビットまたは６４ビットのソースおよび宛て先オペランド、並びに／または１２８ビット若しくは２５６ビットＳＩＭＤレジスタ若しくはメモリオペランドを識別するのに用いられ得る。一実施形態に関して、オペコードフォーマット３９７により提供される機能性は、オペコードフォーマット３７０と重複し得、他方、他の複数の実施形態において、それらは異なる。オペコードフォーマット３７０および３９７は、部分的にＭＯＤフィールド３７３により、並びにオプションの（ＳＩＢ）識別子３９３、オプションの変位識別子３９４、およびオプションの即値バイト３９５により指定されるレジスタからレジスタへの、メモリからレジスタへの、メモリによるレジスタの、レジスタによるレジスタの、即値によるレジスタの、レジスタからメモリへのアドレッシングを可能とする。
【００６３】
次に図３Ｈを参照すると、図３Ｈは、他の実施形態に係るＳＩＭＤベクトルポピュレーションカウント機能性を提供する他の代替的な演算エンコード（オペコード）フォーマット３９８の描写である。オペコードフォーマット３９８はオペコードフォーマット３７０および３９７に対応し、殆どの他の一般的に用いられる複数のレガシー命令プレフィックスバイトおよびエスケープコードの代わりとなり、追加の機能性を提供するオプションの複数のＥＶＥＸプレフィックスバイト３９６（一実施形態において、６２  ｈｅｘから開始する）を含む。一実施形態に係る命令は、フィールド３９６および３９２の１または複数によりエンコードされ得る。命令毎に、ソースオペランド識別子３７４および３７５との組み合わせにより、およびオプションのスケール−インデックス−ベース（ＳＩＢ）識別子３９３、オプションの変位識別子３９４、およびオプションの即値バイト３９５との組み合わせによりフィールド３９６により最大４つのオペランド位置およびマスクが識別され得る。一実施形態に関して、複数のＥＶＥＸプレフィックスバイト３９６が、３２ビットまたは６４ビットのソースおよび宛て先オペランド、並びに／または１２８ビット、２５６ビット、若しくは５１２ビットＳＩＭＤレジスタ若しくはメモリオペランドを識別するのに用いられ得る。一実施形態に関して、オペコードフォーマット３９８により提供される機能性は、オペコードフォーマット３７０および３９７と重複し得、他方、他の複数の実施形態において、それらは異なる。オペコードフォーマット３９８は、部分的にＭＯＤフィールド３７３により、並びにオプションの（ＳＩＢ）識別子３９３、オプションの変位識別子３９４、およびオプションの即値バイト３９５により指定されるレジスタからレジスタへの、メモリからレジスタへの、メモリによるレジスタの、レジスタによるレジスタの、即値によるレジスタの、レジスタからメモリへの複数のマスクを用いたアドレッシングを可能とする。（フォーマット３６０および／またはフォーマット３７０と概して対応する）少なくとも１つの命令セットの一般的なフォーマットは、以下により包括的に示される。ｅｖｅｘ１  ＲＸＢｍｍｍｍｍ  ＷｖｖｖＬｐｐ  ｅｖｅｘ４  ｏｐｃｏｄｅ  ｍｏｄｒｍ［ｓｉｂ］［ｄｉｓｐ］［ｉｍｍ］
【００６４】
一実施形態に関して、ＥＶＥＸフォーマット３９８に従ってエンコードされた命令は、例えば、ユーザ構成可能なマスクレジスタ、または、追加のオペランド、または１２８ビット、２５６ビット、または５１２ビットベクトルレジスタからの選択、または選択し得るより多くのレジスタ等など追加の新たな複数の特徴を有するＳＩＭＤベクトルポピュレーションカウント機能性を提供するのに用いられ得る追加の複数の「ペイロード」ビットを有し得る。
【００６５】
例えば、ＶＥＸフォーマット３９７は、マスクなしのＳＩＭＤベクトルポピュレーションカウント機能性を提供するのに用いられ得るが、ＥＶＥＸフォーマット３９８は、明白なユーザ構成可能マスクありのＳＩＭＤベクトルポピュレーションカウント機能性を提供するのに用いられ得る。加えて、ＶＥＸフォーマット３９７は１２８ビットまたは２５６ビットベクトルレジスタ上でのＳＩＭＤベクトルポピュレーションカウント機能性を提供するのに用いられ得るが、ＥＶＥＸフォーマット３９８は、１２８ビット、２５６ビット、５１２ビット、またはより大きい（またはより小さい）ベクトルレジスタ上でＳＩＭＤベクトルポピュレーションカウント機能性を提供のに用いられ得る。
【００６６】
ゲノム配列決定および配列比較のためのＳＩＭＤベクトルポピュレーションカウント機能性を提供する例示的な複数の命令が、以下の複数の例により示される。
【表２】
2019050039.tif 000004
【００６７】
複数のＳＩＭＤポピュレーションカウント命令が、上記の複数の例のように、ゲノム配列決定および配列比較処理のために用いられ得ることが理解されよう。上記の複数の例において示されるように、いくつかの他のデータベース、データマイニングアプリケーション、および検索アプリケーションにおいて、これらのアプリケーションも複数のＳＩＭＤポピュレーションカウント命令を用い得るように同様の複数の圧縮スキームも用いられる。
【００６８】
ゲノム配列比較における一般的な演算は、塩基対の複数の列に一致させる、または部分的に一致させるために、列内の複数のヌクレオチドの複数の出現をカウントすることである。パックドデータフォーマット（ｐａｃｋｅｄＤｎａなど）においては、技術は他の場合においては、列内の異なるヌクレオチドの複数の出現をカウントするために、複数のシフトおよびマスク演算と併せた複数のルックアップテーブル、および／または複数の論理演算と併せたビット単位の複数のポピュレーションカウントの使用を伴い得る。複数のＳＩＭＤポピュレーションカウント命令を用いることにより、上記の複数の例のように、列内の異なるヌクレオチドの複数の出現をカウントするために以前まで必要とされていた複数の演算の多くは取り除かれ得る。したがって、ゲノム配列決定および配列比較処理などの複数のアプリケーション、および、より一般的に、データマイニングなどの複数のデータベースアプリケーション、および検索アプリケーションの性能は、実質的に改善され得る。
【００６９】
図４Ａは、本願発明の少なくとも１つの実施形態に係るインオーダーパイプライン、およびレジスタリネーミングステージ、アウトオブオーダー発行／実行パイプラインを示すブロック図である。図４Ｂは、本願発明の少なくとも１つの実施形態に係るプロセッサに含められることになるインオーダーアーキテクチャコア、およびレジスタリネーミングロジック、アウトオブオーダー発行／実行ロジックを示すブロック図である。図４Ａにおける実線の複数のボックスはインオーダーパイプラインを示し、他方、破線の複数のボックスは、レジスタリネーミング、アウトオブオーダー発行／実行パイプラインを示す。同様に、図４Ｂにおける実線の複数のボックスはインオーダーアーキテクチャロジックを示し、他方、破線の複数のボックスは、レジスタリネーミングロジック、およびアウトオブオーダー発行／実行ロジックを示す。
【００７０】
図４Ａにおいて、プロセッサパイプライン４００は、フェッチステージ４０２、長さデコードステージ４０４、デコードステージ４０６、割り当てステージ４０８、リネームステージ４１０、スケジューリング（ディスパッチまたは発行としても知られる）ステージ４１２、レジスタ読み取り／メモリ読み取りステージ４１４、実行ステージ４１６、書き戻し／メモリ書き込みステージ４１８、例外処理ステージ４２２、およびコミットステージ４２４を含む。
【００７１】
図４Ｂにおいて、複数の矢印は、２またはそれより多くのユニット間の結合を示し、矢印の方向は、それらユニット間のデータフローの方向を示す。図４Ｂは、実行エンジンユニット４５０に結合されたフロントエンドユニット４３０を含み、フロントエンドユニット４３０と実行エンジンユニット４５０との両方がメモリユニット４７０に結合されたプロセッサコア４９０を示す。
【００７２】
コア４９０は、縮小命令セットコンピューティング（ＲＩＳＣ）コア、複合命令セットコンピューティング（ＣＩＳＣ）コア、超長命令語（ＶＬＩＷ）コア、または、ハイブリッドまたは代替的なコアタイプであり得る。さらに他のオプションとして、コア４９０は、例えば、ネットワークまたは通信コア、圧縮エンジン、グラフィクスコアなど特定用途向けコア、または同様のものであり得る。
【００７３】
フロントエンドユニット４３０は、分岐予測ユニット４３２を含み、分岐予測ユニット４３２は、命令キャッシュユニット４３４に結合され、命令キャッシュユニット４３４は、命令トランスレーションルックアサイドバッファ（ＴＬＢ）４３６に結合され、ＴＬＢ４３６は、命令フェッチユニット４３８に結合され、命令フェッチユニット４３８は、デコードユニット４４０に結合されている。デコードユニットまたはデコーダは、複数の命令をデコードし得、オリジナルの命令からデコードされ、または、そうでなければオリジナルの命令を反映する、または、オリジナルの命令から導出される１または複数のマイクロ演算、マイクロコードエントリーポイント、マイクロ命令、他の命令、または他の制御信号を出力として生成し得る。デコーダは、様々な異なるメカニズムを用いて実装され得る。複数の適しているメカニズムの例には、複数のルックアップテーブル、複数のハードウェア実装、複数のプログラマブルロジックアレイ（ＰＬＡ）、複数のマイクロコードリードオンリーメモリ（ＲＯＭ）等が含まれるがこれらに限定されない。命令キャッシュユニット４３４はさらに、メモリユニット４７０内のレベル２（Ｌ２）キャッシュユニット４７６に結合されている。デコードユニット４４０は、実行エンジンユニット４５０内のリネーム／アロケータユニット４５２に結合されている。
【００７４】
実行エンジンユニット４５０は、リタイヤユニット４５４と１または複数のスケジューラユニット４５６のセットとに結合されたリネーム／アロケータユニット４５２を含む。（複数の）スケジューラユニット４５６は、複数の予約ステーション、中央命令ウィンドウ等を含む、任意の数の複数の異なるスケジューラを表す。（複数の）スケジューラユニット４５６は、（複数の）物理レジスタファイルユニット４５８に結合されている。複数の物理レジスタファイルユニット４５８のそれぞれは、互いに異なるもの同士が１または複数の異なるデータタイプを格納する１または複数の物理レジスタファイルを表す。そのようなデータタイプには、スカラ整数、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点等、状態（例えば、次に実行される命令のアドレスである命令ポインタ）等が含まれる。レジスタリネーミングおよびアウトオブオーダー実行が実装され得る様々なやり方（例えば、（複数の）リオーダーバッファおよび（複数の）リタイヤレジスタファイルを用いて、（複数の）未来のファイル（ｆｕｔｕｒｅ  ｆｉｌｅ）、（複数の）履歴バッファ（ｈｉｓｔｏｒｙ  ｂｕｆｆｅｒ）、および（複数の）リタイヤレジスタファイルを用いて、複数のレジスタマップおよび複数のレジスタのプールを用いて、等）を示すべく、（複数の）物理レジスタファイルユニット４５８にはリタイヤユニット４５４が重ねられている。一般的に、複数のアーキテクチャレジスタは、プロセッサの外部から、またはプログラマから見える。それらレジスタは、任意の公知の特定のタイプの回路に限定されない。様々な異なるタイプのレジスタが、本明細書に説明されているようにデータを格納および提供可能である限り、適している。適している複数のレジスタの複数の例は、専用の物理的レジスタ、レジスタリネーミングを用いる動的に割り当てられた物理レジスタ、専用の、および動的に割り当てられた物理レジスタの組み合わせ等を含むがこれらに限定されない。リタイヤユニット４５４および（複数の）物理レジスタファイルユニット４５８は、（複数の）実行クラスタ４６０に結合されている。（複数の）実行クラスタ４６０は、１または複数の実行ユニット４６２のセット、および１または複数のメモリアクセスユニット４６４のセットを含む。複数の実行ユニット４６２は様々な演算（例えば、シフト、加算、減算、乗算）を、様々なタイプのデータ（例えば、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点）に対して実行し得る。いくつかの実施形態には、複数の特定の機能、または複数の機能からなる複数のセットのための専用の複数の実行ユニットが含まれ得るが、他の複数の実施形態には、全ての機能を全てが実行する１つだけの実行ユニット、または複数の実行ユニットが含まれ得る。複数の特定の実施形態において、複数の特定のタイプのデータ／複数の演算に対して複数の別個のパイプライン（例えば、それぞれが自身のスケジューラユニット、物理レジスタファイルユニット、および／または実行クラスタを有する、スカラ整数パイプライン、スカラ浮動小数点／パックド整数／パックド浮動小数点／ベクトル整��／ベクトル浮動小数点パイプライン、および／または、メモリアクセスパイプライン、並びに、別個のメモリアクセスパイプラインの場合には、このパイプラインの実行クラスタのみがメモリアクセスユニット４６４を有する複数の特定の実施形態が実装される）が生成されるので、（複数の）スケジューラユニット４５６、（複数の）物理レジスタファイルユニット４５８、および（複数の）実行クラスタ４６０は、複数あり得るものとして示されている。また、複数の別個のパイプラインが用いられる場合、これらのパイプラインの１または複数は、アウトオブオーダー発行／実行であり得、残りがインオーダーであり得ることを理解されるべきである。
【００７５】
複数のメモリアクセスユニット４６４のセットが、メモリユニット４７０に結合され、メモリユニット４７０は、データキャッシュユニット４７４に結合されたデータＴＬＢユニット４７２を含む。データキャッシュユニット４７４は、レベル２（Ｌ２）キャッシュユニット４７６に結合されている。例示的な一実施形態において、複数のメモリアクセスユニット４６４は、ロードユニット、格納アドレスユニット、および、格納データユニットを含み得る。これらはそれぞれ、メモリユニット４７０内のデータＴＬＢユニット４７２に結合されている。Ｌ２キャッシュユニット４７６は、１または複数の他のレベルのキャッシュ、および、やがてメインメモリに結合されている。
【００７６】
例として、例示的なレジスタリネーミング、アウトオブオーダー発行／実行コアアーキテクチャは、以下のようにパイプライン４００を実装し得る。１）命令フェッチ４３８が、フェッチおよび長さデコードステージ４０２、４０４を実行する。２）デコードユニット４４０が、デコードステージ４０６を実行する。３）リネーム／アロケータユニット４５２が、割り当てステージ４０８およびリネームステージ４１０を実行する。４）（複数の）スケジューラユニット４５６がスケジューリングステージ４１２を実行する。５）（複数の）物理レジスタファイルユニット４５８およびメモリユニット４７０が、レジスタ読み取り／メモリ読み取りステージ４１４を実行する。実行クラスタ４６０が実行ステージ４１６を実行する。６）メモリユニット４７０および（複数の）物理レジスタファイルユニット４５８が、書き戻し／メモリ書き込みステージ４１８を実行する。７）様々なユニットが例外処理ステージ４２２に関わり得る。８）リタイヤユニット４５４および（複数の）物理レジスタファイルユニット４５８が、コミットステージ４２４を実行する。
【００７７】
コア４９０は、１または複数の命令セット（例えば、ｘ８６命令セット（複数のより新しいバージョンではいくつかの拡張が追加された）、カリフォルニア州サニーベール市のＭＩＰＳ  ＴｅｃｈｎｏｌｏｇｉｅｓのＭＩＰＳ命令セット、カリフォルニア州サニーベール市のＡＲＭ  ＨｏｌｄｉｎｇｓのＡＲＭ命令セット（ＮＥＯＮなどオプションの追加の拡張を含む）をサポートし得る。
【００７８】
コアは、マルチスレッディング（複数の演算または複数のスレッドからなる２またはそれより多くの並列セットを実行）をサポートし得、このことを様々なやり方で行い得ることが理解されるべきである。それら様々なやり方には、タイムスライスドマルチスレッディング、同時マルチスレッディング（単一の物理コアが、同物理コアが同時にマルチスレッディングを行っている複数のスレッドのそれぞれに論理コアを提供する）、または、これらの組み合わせ（例えば、Ｉｎｔｅｌ（登録商標）Ｈｙｐｅｒｔｈｒｅａｄｉｎｇ技術などのように、タイムスライスドフェッチおよびデコード、並びにその後の同時マルチスレッディング）が含まれる。
【００７９】
アウトオブオーダー実行の環境に関して、レジスタリネーミングを説明するが、レジスタリネーミングは、インオーダーアーキテクチャで用いられ得ることが理解されるべきである。また、プロセッサの例示されている実施形態は、別個の命令およびデータキャッシュユニット４３４／４７４、並びに共有されるＬ２キャッシュユニット４７６も含むが、代替的な実施形態において、例えば、レベル１（Ｌ１）内部キャッシュ、または複数のレベルの内部キャッシュなど複数の命令およびデータの両方に関して単一の内部キャッシュが用いられ得る。いくつかの実施形態において、システムは、内部キャッシュと、コアおよび／またはプロセッサの外部にある外部キャッシュとの組み合わせを含み得る。代替的に、キャッシュの全てが、コアおよび／またはプロセッサの外部にあり得る。
【００８０】
図５は、本願発明の複数の実施形態に係る、集積メモリコントローラおよびグラフィクスを有するシングルコアプロセッサおよびマルチコアプロセッサ５００のブロック図である。図５における実線の複数のボックスは、シングルコア５０２Ａ，システムエージェント５１０、１または複数のバスコントローラユニット５１６のセットを有するプロセッサ５００を示し、他方、破線の複数のボックスのオプションの追加は、マルチコア５０２Ａ〜Ｎ、システムエージェントユニット５１０における１または複数の集積メモリコントローラユニット５１４のセット、および集積グラフィクスロジック５０８を有する代替的なプロセッサ５００を示す。
【００８１】
メモリ階層は、複数のコア内の１または複数のレベルのキャッシュ、１または複数の共有キャッシュユニット５０６のセット、および、複数の集積メモリコントローラユニット５１４のセットに結合された外部メモリ（図示されていない）を含む。複数の共有キャッシュユニット５０６のセットは、レベル２（Ｌ２）、レベル３（Ｌ３），レベル４（Ｌ４），または他のレベルのキャッシュ、ラストレベルキャッシュ（ＬＬＣ）、および／またはこれらの組み合わせなどの１または複数の中間レベルのキャッシュを含み得る。一実施形態において、リングベースのインターコネクトユニット５１２が集積グラフィクスロジック５０８、複数の共有キャッシュユニット５０６のセット、およびシステムエージェントユニット５１０を相互接続するが、代替的な実施形態において、そのような複数のユニットを相互接続するための任意の数の複数の周知の技術が用いられ得る。
【００８２】
いくつかの実施形態において、コア５０２Ａ〜Ｎの１または複数は、マルチスレッディングが可能である。システムエージェント５１０は、コア５０２Ａ〜Ｎを調整し、動作させる複数のコンポーネントを含む。システムエージェントユニット５１０は、例えば、電力制御ユニット（ＰＣＵ）およびディスプレイユニットを含み得る。ＰＣＵは、コア５０２Ａ〜Ｎおよび集積グラフィクスロジック５０８の電力状態を管理するために必要なロジックまたは複数のコンポーネントであり得、または、それらを含み得る。ディスプレイユニットは、１または複数の外部接続されたディスプレイを駆動するためのものである。
【００８３】
コア５０２Ａ〜Ｎは、アーキテクチャおよび／または命令セットの点で同種または異種であり得る。例えば、コア５０２Ａ〜Ｎのいくつかは、インオーダーであり得、他方、他のものはアウトオブオーダーであり得る。他の例として、コア５０２Ａ〜Ｎの２またはそれより多くは、同じ命令セットを実行可能であり得、他方、他のものは、その命令セットのサブセットのみ、または異なる命令セットを実行可能であり得る。
【００８４】
プロセッサは、カリフォルニア州サンタクララ市のＩｎｔｅｌ  Ｃｏｒｐｏｒａｔｉｏｎから入手可能であるＣｏｒｅ（商標）ｉ３、ｉ５、ｉ７、２  ＤｕｏおよびＱｕａｄ、Ｘｅｏｎ（商標）、Ｉｔａｎｉｕｍ（商標）、ＸＳｃａｌｅ（商標）またはＳｔｒｏｎｇＡＲＭ（商標）プロセッサなどの汎用プロセッサであり得る。代替的に、プロセッサは、ＡＲＭ  Ｈｏｌｄｉｎｇ，Ｌｔｄ、ＭＩＰＳ等などの他の企業からのものであり得る。プロセッサは、例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、コプロセッサ、組み込みプロセッサ、または同様のものなど特定用途向けプロセッサであり得る。プロセッサは、１または複数のチップ上で実装され得る。プロセッサ５００は、例えば、ＢｉＣＭＯＳ、ＣＭＯＳ、またはＮＭＯＳなどの複数の処理技術のいずれかを用いる１または複数の基板の一部であり得、および／またはその上で実装され得る。
【００８５】
図６〜８は、プロセッサ５００を含むのに適した例示的なシステムであり、他方、図９は、コア５０２の１または複数を含み得る例示的なシステムオンチップ（ＳｏＣ）である。ラップトップ、デスクトップ、ハンドヘルドＰＣ、携帯情報端末、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、組み込みプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、グラフィクスデバイス、ビデオゲーム機器、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレーヤ、ハンドヘルドデバイス、および様々な他の電子デバイスに関して当技術分野で公知の他の複数のシステム設計および構成も適している。概して、本明細書において開示されるプロセッサおよび／または他の実行ロジックを組み込み可能な、非常に多種多様なシステムまたは電子デバイスが一般的に適している。
【００８６】
ここで図６を参照すると、本願発明の一実施形態に係るシステム６００のブロック図が示されている。システム６００は、グラフィクスメモリコントローラハブ（ＧＭＣＨ）６２０に結合された１または複数のプロセッサ６１０、６１５を含み得る。追加のプロセッサ６１５がオプションであるという性質は、図６において、破線によって示されている。
【００８７】
各プロセッサ６１０、６１５は、プロセッサ５００の何らかのバージョンであり得る。しかし、集積グラフィクスロジックおよび集積メモリ制御ユニットがプロセッサ６１０、６１５に存在するであろう可能性は低いであることに留意されるべきである。図６は、ＧＭＣＨ６２０が、例えば、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）であり得るメモリ６４０に結合され得ることを示している。少なくとも１つの実施形態に関して、ＤＲＡＭは不揮発性キャッシュに関連付けられ得る。
【００８８】
ＧＭＣＨ６２０はチップセットであり得、またはチップセットの一部であり得る。ＧＭＣＨ６２０は、（複数の）プロセッサ６１０、６１５と通信を行い、（複数の）プロセッサ６１０、６１５とメモリ６４０との間のインタラクションを制御し得る。ＧＭＣＨ６２０は、（複数の）プロセッサ６１０、６１５と、システム６００の他の複数の要素との間の加速化されたバスインタフェースとしても動作し得る。少なくとも１つの実施形態に関して、ＧＭＣＨ６２０は、フロントサイドバス（ＦＳＢ）６９５などのマルチドロップバスを介し、（複数の）プロセッサ６１０、６１５と通信を行う。
【００８９】
さらに、ＧＭＣＨ６２０は、ディスプレイ６４５（フラットパネルディスプレイなど）に結合されている。ＧＭＣＨ６２０は、集積グラフィクスアクセラレータを含み得る。ＧＭＣＨ６２０はさらに、様々な周辺デバイスをシステム６００を結合するのに用いられ得る入出力（Ｉ／Ｏ）コントローラハブ（ＩＣＨ）６５０に結合されている。図６の実施形態に例として示されているのは、他の周辺デバイス６７０と共に、ＩＣＨ６５０に結合された別個のグラフィクスデバイスであり得る外部グラフィクスデバイス６６０である。
【００９０】
代替的に、追加の、または異なるプロセッサもシステム６００に存在し得る。例えば、追加の（複数の）プロセッサ６１５は、プロセッサ６１０と同じである（複数の）追加のプロセッサ、プロセッサ６１０とは異種である、または非対称的な追加の（複数の）プロセッサ、アクセラレータ（例えば、グラフィクスアクセラレータまたはデジタル信号プロセッシング（ＤＳＰ）ユニットなど）、フィールドプログラマブルゲートアレイ、または任意の他のプロセッサを含み得る。アーキテクチャ的、マイクロアーキテクチャ的、熱的、電力消費特性、および同様のものを含む様々な利点に関して、物理リソース６１０、６１５間では様々な違いがあり得る。これらの違いは、プロセッサ６１０、６１５間の非対称性および異種性として有効にそれら自身が現れ得る。少なくとも１つの実施形態に関して、様々なプロセッサ６１０、６１５が同じダイパッケージに存在し得る。
【００９１】
ここで図７を参照すると、本願発明の実施形態に係る第２システム７００のブロック図が示されている。図７に示されるように、マルチプロセッサシステム７００は、ポイントツーポイントインターコネクトシステムであり、ポイントツーポイントインターコネクト７５０を介して結合された第１のプロセッサ７７０と第２のプロセッサ７８０とを含む。プロセッサ７７０および７８０のそれぞれは、プロセッサ６１０、６１５の１または複数のとしてのプロセッサ５００の何らかのバージョンであり得る。
【００９２】
２つのプロセッサ７７０、７８０でのみ示されているが、本願発明の範囲がそのように限定されないことは理解されよう。他の複数の実施形態において、１または複数の追加のプロセッサが任意のプロセッサに存在し得る。
【００９３】
プロセッサ７７０、７８０は、集積メモリコントローラユニット７７２、７８２をそれぞれ含むものとして示されている。また、プロセッサ７７０は自身のバスコントローラユニットの一部としてポイントツーポイント（Ｐ−Ｐ）インタフェース７７６、７７８を含み、同様に、第２のプロセッサ７８０は、Ｐ−Ｐインタフェース７８６および７８８を含む。プロセッサ７７０、７８０は、Ｐ−Ｐインタフェース回路７７８、７８８を用いてポイントツーポイント（Ｐ−Ｐ）インタフェース７５０を介して情報を交換し得る。図７に示されるように、ＩＭＣ７７２、７８２は、複数のプロセッサを、複数のそれぞれのプロセッサにローカルに取り付けられたメインメモリの一部であり得る複数のそれぞれのメモリ、つまり、メモリ７３２およびメモリ７３４に結合する。
【００９４】
プロセッサ７７０、７８０はそれぞれ、ポイントツーポイントインタフェース回路７７６、７９４、７８６、７９８を用い、個々のＰ−Ｐインタフェース７５２、７５４を介し、チップセット７９０と情報を交換し得る。またチップセット７９０は、高性能グラフィクスインタフェース７３９を介し、高性能グラフィクス回路７３８と情報を交換し得る。
【００９５】
共有キャッシュ（図示されていない）は、プロセッサが低電力モードに入った場合に、片方または両方のプロセッサのローカルキャッシュ情報が共有キャッシュに格納され得るよう、いずれかのプロセッサに含まれ得る、または、両方のプロセッサの外部ではあるが、Ｐ−Ｐインターコネクトを介してプロセッサと接続され得る。
【００９６】
チップセット７９０は、インタフェース７９６を介して第１のバス７１６に結合され得る。一実施形態において、第１のバス７１６はＰｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ（ＰＣＩ）バス、またはＰＣＩ  Ｅｘｐｒｅｓｓバスなどのバス若しくは他の第３世代のＩ／Ｏインターコネクトバスであり得る。ただし、本願発明の範囲はそのように限定されない。
【００９７】
図７に示されるように、様々なＩ／Ｏデバイス７１４が、第１のバス７１６を第２のバス７２０に結合するバスブリッジ７１８と共に、第１のバス７１６に結合され得る。一実施形態において、第２のバス７２０はローピンカウント（ＬＰＣ）バスであり得る。一実施形態において、例えば、キーボードおよび／またはマウス７２２、複数の通信デバイス７２７、および、命令／コードおよびデータ７３０を含み得るディスクドライブまたは他の大容量ストレージデバイスなどのストレージユニット７２８を含む様々なデバイスが第２のバス７２０に結合され得る。さらに、オーディオＩ／Ｏ７２４が、第２のバス７２０に結合され得る。なお、他の複数のアーキテクチャが可能である。例えば、図７のポイントツーポイントアーキテクチャの代わりに、システムはマルチドロップバス、または他のそのようなアーキテクチャを実装し得る。
【００９８】
ここで図８を参照すると、本願発明の実施形態に係る、第３のシステム８００のブロック図が示されている。図７および図８において同様の要素には同様の参照番号が付与され、図８の他の複数の態様を曖昧にしてしまうことを避けるために図７の特定の態様は図８において省略されている。
【００９９】
図８は、プロセッサ８７０、８８０が、集積メモリおよびＩ／Ｏ制御ロジック（「ＣＬ」）８７２および８８２をそれぞれ含み得ることを示している。少なくとも１つの実施形態に関して、ＣＬ８７２、８８２は、図５および７との関連で上記にて説明されたものなどの複数の集積メモリコントローラユニットを含み得る。加えて、ＣＬ８７２、８８２は、Ｉ／Ｏ制御ロジックも含み得る。図８は、メモリ８３２、８３４がＣＬ８７２、８８２に結合されていることのみでなく、Ｉ／Ｏデバイス８１４も制御ロジック８７２、８８２に結合されていることを示している。複数のレガシーＩ／Ｏデバイス８１５がチップセット８９０に結合されている。
【０１００】
ここで図９を参照すると、本願発明の実施形態に係るＳｏＣ９００のブロック図が示されている。図５と同様の要素には同様の参照番号が付与される。また、破線の複数のボックスは、より進化したＳｏＣにおけるオプションの複数の特徴である。図９において、インターコネクトユニット９０２は、１または複数のコア５０２Ａ〜Ｎのセットおよび（複数の）共有キャッシュユニット５０６を含むアプリケーションプロセッサ９１０と、システムエージェントユニット５１０と、バスコントローラユニット５１６と、（複数の）集積メモリコントローラユニット５１４と、集積グラフィクスロジック５０８、静止および／またはビデオカメラ機能性を提供するための画像プロセッサ９２４、ハードウェアオーディオアクセラレーションを提供するためのオーディオプロセッサ９２６、およびビデオエンコード／デコードアクセラレーションを提供するためのビデオプロセッサ９２８を含み得る１または複数のメディアプロセッサ９２０のセットと、スタティックランダムアクセスメモリ（ＳＲＡＭ）ユニット９３０と、ダイレクトメモリアクセス（ＤＭＡ）ユニット９３２と、１または複数の外部ディスプレイへの結合のためのディスプレイユニット９４０とに結合されている。
【０１０１】
図１０は、一実施形態に係る少なくとも１つの命令を実行し得る、中央処理装置（ＣＰＵ）とグラフィクスプロセッシングユニット（ＧＰＵ）とを含むプロセッサを示している。一実施形態において、少なくとも１つの実施形態に係る複数の演算を実行するための命令は、ＣＰＵにより実行され得る。他の実施形態において、命令はＧＰＵにより実行され得る。さらに他の実施形態において、命令は、ＧＰＵとＣＰＵとにより実行される複数の演算の組み合わせを通じて実行され得る。例えば、一実施形態において、一実施形態に係る命令は受信され、ＧＰＵ上での実行のためにデコードされ得る。しかし、デコードされた命令内の１または複数の演算は、ＣＰＵにより実行され得、結果が、命令の最終的なリタイヤのためにＧＰＵに戻され得る。逆に、いくつかの実施形態において、ＣＰＵはプライメアリプロセッサとして動作し得、ＧＰＵはコプロセッサとして動作し得る。
【０１０２】
いくつかの実施形態において、高度に並列であるスループットプロセッサから恩恵を受ける複数の命令は、ＧＰＵにより実行され得、他方、深くパイプライン化されたアーキテクチャから恩恵を受ける複数のプロセッサの性能から恩恵を受ける複数の命令は、ＣＰＵにより実行され得る。例えば、グラフィクス、科学アプリケーション、財務アプリケーション、および他の並列ワークロードは、ＧＰＵの性能から恩恵を受け得、それに従って実行され得、他方、オペレーティングシステムカーネルまたはアプリケーションコードなどのよりシーケンシャルなアプリケーションは、ＣＰＵにより良好に適しているかもしれない。
【０１０３】
図１０において、プロセッサ１０００は、ＣＰＵ１００５、ＧＰＵ１０１０、画像プロセッサ１０１５、ビデオプロセッサ１０２０、ＵＳＢコントローラ１０２５、ＵＡＲＴコントローラ１０３０、ＳＰＩ／ＳＤＩＯコントローラ１０３５、ディスプレイデバイス１０４０、Ｈｉｇｈ−Ｄｅｆｉｎｉｔｉｏｎ  Ｍｕｌｔｉｍｅｄｉａ  Ｉｎｔｅｒｆａｃｅ（ＨＤＭＩ（登録商標））コントローラ１０４５、ＭＩＰＩコントローラ１０５０、フラッシュメモリコントローラ１０５５、デュアルデータレート（ＤＤＲ）コントローラ１０６０、セキュリティエンジン１０６５、およびＩ２Ｓ／Ｉ２Ｃ（Ｉｎｔｅｇｒａｔｅｄ  Ｉｎｔｅｒｃｈｉｐ  Ｓｏｕｎｄ／Ｉｎｔｅｒ−Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）インタフェース１０７０を含む。より多くのＣＰＵまたはＧＰＵ、および他の複数の周辺インタフェースコントローラを含む他のロジックおよび複数の回路が、図１０のプロセッサに含まれ得る。
【０１０４】
少なくとも１つの実施形態の１または複数の態様は、マシンにより読み取られたときに当該マシンに、本明細書に説明されている複数の技術を実行するロジックを作らせる、プロセッサ内の様々なロジックを表すマシン可読媒体上に格納された代表的なデータにより実装され得る。「ＩＰコア」として公知であるそのような表現は、有形のマシン可読媒体（「テープ」）上に格納され、実際にそのロジックまたはプロセッサを作成する製造マシンにロードする様々な顧客または製造施設へと供給され得る。例えば、ＡＲＭ  Ｈｏｌｄｉｎｇｓ，Ｌｔｄ．により開発されているＣｏｒｔｅｘ（商標）ファミリのプロセッサおよびＣｈｉｎｅｓｅ  Ａｃａｄｅｍｙ  ｏｆ  ＳｃｉｅｎｃｅｓのＩｎｓｔｉｔｕｔｅ  ｏｆ  Ｃｏｍｐｕｔｉｎｇ  Ｔｅｃｈｎｏｌｏｇｙ（ＩＣＴ）により開発されているＬｏｏｎｇｓｏｎ  ＩＰコアなどのＩＰコアは、Ｔｅｘａｓ  Ｉｎｓｔｒｕｍｅｎｔｓ、Ｑｕａｌｃｏｍｍ、Ａｐｐｌｅ、またはＳａｍｓｕｎｇなどの様々な顧客またはライセンシーへとライセンスまたは販売され、これらの顧客またはライセンシーにより製造される複数のプロセッサにおいて実装され得る。
【０１０５】
図１１は、一実施形態に係るＩＰコアの開発を示しているブロック図である。ストレージ１１３０は、シミュレーションソフトウェア１１２０並びに／またはハードウェア若しくはソフトウェアモデル１１１０を含む。一実施形態において、ＩＰコア設計を表すデータは、メモリ１１４０（例えば、ハードディスク）、有線接続（例えば、インターネット）１１５０、または無線接続１１６０を介し、ストレージ１１３０に提供され得る。シミュレーションツールおよびモデルにより生成されるＩＰコア情報は、少なくとも１つの実施形態に係る少なくとも１つの命令を実行するようそれが第三者によって製造される製造施設へと送信され得る。
【０１０６】
いくつかの実施形態において、１または複数の命令は、第１のタイプのアーキテクチャ（例えば、ｘ８６）に対応し、異なるタイプのアーキテクチャ（例えば、ＡＲＭ）のプロセッサ上で変換またはエミュレートされ得る。したがって一実施形態によると、命令は、ＡＲＭ、ｘ８６、ＭＩＰＳ、ＧＰＵ、または他のプロセッサタイプまたはアーキテクチャを含む任意のプロセッサまたはプロセッサタイプ上で実行され得る。
【０１０７】
図１２は、一実施形態によると、第１のタイプの命令が異なるタイプのプロセッサによりどのようにエミュレートされるかを示す。図１２において、プログラム１２０５は、一実施形態に係る命令と同じである、または実質的に同じである機能を実行し得るいくつかの命令を含み得る。しかし、プログラム１２０５の複数の命令は、プロセッサ１２１５と異なる、または非互換であるタイプおよび／またはフォーマットのものであり得、このことは、プログラム１２０５におけるタイプの複数の命令は、プロセッサ１２１５によりネイティブに実行され得ないかもしれないことを意味している。しかし、エミュレートロジック１２１０の助けを得て、プログラム１２０５の複数の命令は、プロセッサ１２１５により実行がネイティブに可能である複数の命令へと変換される。一実施形態において、エミュレートロジックは、ハードウェアにおいて具現化される。他の実施形態において、エミュレートロジックは、プログラム１２０５におけるタイプの複数の命令をプロセッサ１２１５によりネイティブ実行可能なタイプに変換するソフトウェアを含む有形のマシン可読媒体において具現化される。他の複数の実施形態において、エミュレートロジックは、一定の機能の、またはプログラマブルハードウェアと、有形のマシン可読媒体上に格納されたプログラムとの組み合わせである。一実施形態において、プロセッサはエミュレートロジックを含み、他方、他の複数の実施形態において、エミュレートロジックは、プロセッサ外部に存在し、第三者により提供される。一実施形態において、プロセッサは、プロセッサに含まれる、またはそれに関連付けられたマイクロコードまたはファームウェアを実行することにより、ソフトウェアを含む有形のマシン可読媒体で具現化されるエミュレートロジックをロード可能である。
【０１０８】
図１３は、ソース命令セットにおける複数の二進数命令を変換するソフトウェア命令コンバータの使用を、本願発明の複数の実施形態に係るターゲット命令セットにおける複数の二進数命令と対比するブロック図である。例示されている実施形態において、命令コンバータはソフトウェア命令コンバータであるが、代替的に、命令コンバータは、ソフトウェア、ファームウェア、ハードウェア、またはこれらの様々な組み合わせで実装され得る。図１３は、高水準言語１３０２のプログラムが、少なくとも１つのｘ８６命令セットコアを有するプロセッサ１３１６によりネイティブに実行され得るｘ８６二進コード１３０６を生成するｘ８６コンパイラ１３０４を用いてコンパイルされ得ることを示す。少なくとも１つのｘ８６命令セットコアを有するプロセッサ１３１６は、少なくとも１つのｘ８６命令セットコアを備えるＩｎｔｅｌプロセッサと実質的に同じ結果を得るために、（１）Ｉｎｔｅｌ  ｘ８６命令セットコアの命令セットの実質的な部分、または、（２）少なくとも１つのｘ８６命令セットコアを備えるＩｎｔｅｌプロセッサで実行されることを目的とする複数のアプリケーションの複数のオブジェクトコードバージョンまたは他のソフトウェアを互換性を有した状態で実行する、またはそうでなければ処理することにより、少なくとも１つのｘ８６命令セットコアを備えるＩｎｔｅｌプロセッサと実質的に同じである複数の機能を実行出来る任意のプロセッサを表す。ｘ８６コンパイラ１３０４は、少なくとも１つのｘ８６命令セットコアを有するプロセッサ１３１６上で追加のリンケージ処理あり、またはなしで実行され得るｘ８６二進コード１３０６（例えば、オブジェクトコード）を生成するよう動作可能なコンパイラを表す。同様に、図１３は、高水準言語１３０２のプログラムが、少なくとも１つのｘ８６命令セットコアを有さないプロセッサ１３１４（例えば、カリフォルニア州サニーベール市のＭＩＰＳ  ＴｅｃｈｎｏｌｏｇｉｅｓのＭＩＰＳ命令セットを実行する、および／またはカリフォルニア州サニーベール市のＡＲＭ  ＨｏｌｄｉｎｇｓのＡＲＭ命令セットを実行する複数のコアを有するプロセッサ）によってネイティブに実行され得る、代替的な命令セット二進コード１３１０を生成する代替的な命令セットコンパイラ１３０８を用いてコンパイルされ得ることを示す。命令コンバータ１３１２は、ｘ８６二進コード１３０６を、ｘ８６命令セットコアを有さないプロセッサ１３１４によってネイティブに実行され得るコードに変換するのに用いられる。この変換されたコードは、代替的な命令セット二進コード１３１０と同じとなる可能性は、このことが可能な命令コンバータの作成が難しいため低いが、しかし、変換されたコードは、一般的な演算を成し遂げ、代替的な命令セットからの複数の命令からなるであろう。したがって、命令コンバータ１３１２は、エミュレート、シミュレーションまたは任意の他の処理を介して、プロセッサ若しくはｘ８６命令セットプロセッサまたはコアを有さない他の電子デバイスにｘ８６二進コード１３０６を実行させるソフトウェア、ファームウェア、ハードウェアまたはこれらの組み合わせを表す。
【０１０９】
図１４は、命令を使用してＳＩＭＤベクトルポピュレーションカウント機能性を提供し得るゲノム配列決定および配列比較処理の例の一実施形態に関する図を示す。二重らせん１４０１は、水素結合により４種類の塩基のヌクレオチド（チミン、シトシン、アデニン、およびグアニン）の複数の塩基対を通じて互いに接続された糖リン酸主鎖の２つの逆平行に指向されたストランドを含む。塩基対（例えば、１４１０および１４２０）は、１４０２に示されるように糖リン酸主鎖に沿って複数のシーケンスに編成された１４０３などの複数のヌクレオチドから成る。例えば、塩基対１４１０は、グアニンヌクレオチド１４１２およびシトシンヌクレオチド１４１４から成り、塩基対１４２０は、チミンヌクレオチド１４２２およびアデニンヌクレオチド１４２４から成る。複数の一連のヌクレオチドは、コンピュータアプリケーションソフトウェア１４０４により（例えば、Ｔ、Ｃ、Ａ、およびＧの文字の列１４４２および１４４４として。および／または、塩基のヌクレオチドの一連の２ビットの、または場合によっては４ビットの圧縮されたエンコード１４５２および１４５４として）エンコード、格納、および処理される。
【０１１０】
ヒトゲノムは大量の情報を表し、そのような大量の情報を格納することは通常、４種類の塩基のヌクレオチド（チミン、シトシン、アデニン、およびグアニン（Ｔ、Ｃ、Ａ、Ｇ））をビットのペアとして表すことを伴う。ヒトゲノムにはおよそ３０億の塩基対があり、１塩基当たり２ビットで（４つの選択肢）、ヒトゲノムはおよそ６０億ビットまたはおよそ７５０ＭＢの情報を有する（各染色体の１つのコピーを格納）。少なくとも中間的なフォーマットで、２ビットのデータにより塩基対の各塩基のヌクレオチドを表すのがより一般的な慣例であり得、この場合、およそＵ１．４ＧＢの情報が必要とされる。複数のシーケンスを格納するための１つのフォーマットは、「ｐａｃｋｅｄＤｎａ」として知られている。１塩基当たり２ビットとしてパックされるＤＮＡ、またはデオキシリボ核酸は、二進の２ビット値、Ｔ＝００、Ｃ＝０１、Ａ＝１０、Ｇ＝１１として表される。第１の塩基は、バイトの最上位の２ビットにあり、最後の塩基は最下位の２ビットにある。例えば、ＴＣＡＧというシーケンスは、二進法で０００１１０１１として表される（１６進数の０ｘ１Ｂ）。ＤＮＡ配列決定技術は、高速かつ正確な配列比較プログラムを必要とする。例えば、Ｂｕｒｒｏｗｓ−Ｗｈｅｅｌｅｒ  Ｔｒａｎｓｆｏｒｍによる後方検索に基づく１つの技術は、様々なシーケンス長さに関して塩基のヌクレオチドの出現カウントの膨大なアレイをしばしばオンザフライで構築する。したがってヌクレオチドの出現を迅速にカウントすることは、性能およびメモリストレージ要件に実質的に影響を与え得る。
【０１１１】
図１５Ａは、ＳＩＭＤベクトルポピュレーションカウント機能性を提供する命令の使用に備えてのベクトルサブバイト解凍の例の一実施形態に関するフロー図を示す。処理１５０１および本明細書に開示されている他の複数の処理は、汎用マシンにより、または特定用途向けマシンにより、または両方の組み合わせにより実行可能な、専用ハードウェアまたはソフトウェアまたはファームウェア演算コードを含み得る複数の処理ブロックにより実行される。
【０１１２】
示されている例は、要素当たりパックド２ビットのフォーマット（例えば、ｐａｃｋｅｄＤｎａなど）からバイト要素当たり８ビットのフォーマットへのベクトル解凍の例である。２は８を均等に分割するので、要素当たりパックド２ビットのフォーマットの各バイトは、４つの要素を含む−それぞれの可能な最初のビット配列の１つ。
【０１１３】
処理１５０１のシャッフル処理ブロック１５０９において、ソース１５１２の、少なくとも１番目の２つのサブバイト要素ａおよびｅを含む１番目のバイト、ゼロ（０）、および２番目のバイト、１（１）は、ベクトル１５１５の第１のベクトル要素の最下位部分（例えば、３２ビットベクトル要素）にシャッフルまたはコピーされる。少なくとも２番目の２つのサブバイト要素ｉおよびｍを含む３番目のバイト、２（２）、および４番目のバイト、３（３）は、ベクトル１５１５の第１のベクトル要素の最上位部分にシャッフルまたはコピーされる。またシャッフル処理ブロック１５０９に示されているように、シフトに備えて、ソース１５１２の、少なくとも３番目の２つのサブバイト要素ｂおよびｆを含む５番目のバイト、ゼロ（０）および６番目のバイト、１（１）は、ベクトル１５１５の第２のベクトル要素の最下位部分にシャッフルまたはコピーされ、少なくとも４番目の２つのサブバイト要素ｊおよびｎを含む７番目のバイト、２（２）、および８番目のバイト、３（３）は、ベクトル１５１５の第２のベクトル要素の最上位部分にシャッフルまたはコピーされる。１番目の２つの、および２番目の２つのサブバイト要素は全て、同じ最初のビット配列を有するかもしれず、３番目の２つの、および４番目の２つのサブバイト要素も全て、同じ最初のビット配列を有するかもしれないことが理解されよう。またシャッフル処理ブロック１５０９に示されているように、ソース１５１２の、少なくとも５番目の２つのサブバイト要素ｃおよびｇを含む９番目のバイト、ゼロ（０）、および１０番目のバイト、１（１）は、ベクトル１５１５の第３のベクトル要素の最下位部分にシャッフルまたはコピーされ、少なくとも６番目の２つのサブバイト要素ｋおよびｏを含む１１番目のバイト、２（２）、および１２番目のバイト、３（３）は、ベクトル１５１５の第３のベクトル要素の最上位部分にシャッフルまたはコピーされる。シフトに備えて、ソース１５１２の、少なくとも７番目の２つのサブバイト要素ｄおよびｈを含む１３番目のバイト、ゼロ（０）、および１４番目のバイト、１（１）は、ベクトル１５１５の第４のベクトル要素の最下位部分にシャッフルまたはコピーされ、少なくとも８番目の２つのサブバイト要素ｌおよびｐを含む１５番目のバイト、２（２）、および１６番目のバイト、３（３）は、ベクトル１５１５の第４のベクトル要素の最上位部分にシャッフルまたはコピーされる。
【０１１４】
シフト処理ブロック１５１７において、１番目の２つの、および２番目の２つのサブバイト要素（すなわち、ａ、ｅ、ｉ、およびｍ）を保持するベクトル１５１５の第１のベクトル要素は、ベクトル１５２２における第１のシフトカウント、ゼロ（０）、だけシフトされ、３番目の２つの、および４番目の２つのサブバイト要素（すなわち、ｂ、ｆ、ｊ、およびｎ）を保持する第２のベクトル要素は、第２のシフトカウント、２（２）だけシフトされ、５番目の２つの、および６番目の２つのサブバイト要素（すなわち、ｃ、ｇ、ｋ、およびｏ）を保持する第３のベクトル要素は、第３のシフトカウント、４（４）だけシフトされ、７番目の２つの、および８番目の２つのサブバイト要素（すなわち、ｄ、ｈ、ｌ、およびｐ）を保持する第４のベクトル要素は、第４のシフトカウント、６（６）だけシフトされて、それらサブバイト要素を、ベクトル１５２５におけるそれらのそれぞれのバイトの最下位ビットに合わせる。一実施形態において、これらのシフトは、ベクトル１５１５の３２ビットベクトル要素に対して、複数のＳＩＭＤシフターにより共に実行される。代替的な複数の実施形態において、より小さい、またはより大きいシフトが代わりに用いられ得、それらシフトの全てが共に実行されなくてもよい。
【０１１５】
シャッフル処理１５２８において、シフトされた第１、第２、第３および第４のベクトル要素の最下位のバイト位置のそれぞれからのバイトは、ベクトル１５３０の第１のベクトル要素（例えば、３２ビットベクトル要素）にシャッフルまたはコピーされ、シフトされた第１、第２、第３および第４のベクトル要素の２番目に最下位のバイト位置のそれぞれからのバイトは、ベクトル１５３０の第２のベクトル要素にシャッフルまたはコピーされ、シフトされた第１、第２、第３および第４のベクトル要素の２番目に最上位のバイト位置のそれぞれからのバイトは、ベクトル１５３０の第３のベクトル要素にシャッフルまたはコピーされ、シフトされた第１、第２、第３および第４のベクトル要素の最上位のバイト位置のそれぞれからのバイトは、ベクトル１５３０の第４のベクトル要素にシャッフルまたはコピーされて、それらのオリジナルのサブバイト順が復元される。一実施形態において、シャッフルまたはコピーは、ＳＩＭＤベクトルサブバイト解凍機能性を提供する１または複数の命令をデコードすることにより生成される単一のマイクロ演算またはマイクロｏｐに従って複数のＳＩＭＤシャッフラーにより共に実行され得る。代替的な複数の実施形態において、シャッフルまたはコピーは、１より多くのマイクロ演算またはマイクロｏｐに従って複数のＳＩＭＤシャッフラーまたは他の複数のＳＩＭＤ実行ユニットによっても実行され得る。
【０１１６】
ＡＮＤ処理ブロック１５４２において、ベクトル１５３０の各バイトの複数の最上位ビットが（例えば、ベクトル１５４１を用いて）補正またはマスキングされる。一実施形態において、示されているように、それら複数のビットを補正することにより、６ビットが、３２ビットベクトル要素の各バイトにおいてゼロに設定される。いくつかの実施形態において、処理１５０１のＳＩＭＤベクトルサブバイト解凍は、一連のマクロ命令若しくはマイクロコード命令として、または両方の組み合わせとして実装され得る。
【０１１７】
図１５Ｂは、ＳＩＭＤベクトルポピュレーションカウント機能性を提供する命令の使用に備えてのベクトルサブバイト解凍の例示的な処理１５０２の代替的な実施形態に関するフロー図を示す。
【０１１８】
示されている例は、要素当たりパックド４ビットのフォーマットからバイト要素当たり８ビットのフォーマットへのベクトル解凍の例である。４も８を均等に分割するので、要素当たりパックド４ビットのフォーマットの各バイトは、２つの要素を含む−それぞれの可能な最初のビット配列の１つ。
【０１１９】
処理１５０２のシャッフル処理ブロック１５１０において、ソース１５１４の、少なくとも１番目の２つのサブバイト要素ａおよびｅを含む１番目のバイト、ゼロ（０）、および２番目のバイト、２（２）は、ベクトル１５１５の第１のベクトル要素の最下位部分（例えば、３２ビットベクトル要素）にシャッフルまたはコピーされる。少なくとも２番目の２つのサブバイト要素ｉおよびｍを含む３番目のバイト、４（４）、および４番目のバイト、６（６）は、ベクトル１５１５の第１のベクトル要素の最上位部分にシャッフルまたはコピーされる。またシャッフル処理ブロック１５１０に示されているように、シフトに備えて、ソース１５１４の、少なくとも３番目の２つのサブバイト要素ｂおよびｆを含む５番目のバイト、ゼロ（０）および６番目のバイト、２（２）は、ベクトル１５１５の第２のベクトル要素の最下位部分にシャッフルまたはコピーされ、少なくとも４番目の２つのサブバイト要素ｊおよびｎを含む７番目のバイト、４（４）、および８番目のバイト、６（６）は、ベクトル１５１５の第２のベクトル要素の最上位部分にシャッフルまたはコピーされる。１番目の２つの、および２番目の２つのサブバイト要素は全て、同じ最初のビット配列を有するかもしれず、３番目の２つの、および４番目の２つのサブバイト要素も全て、同じ最初のビット配列を有するかもしれないことが理解されよう。またシャッフル処理ブロック１５１０に示されているように、ソース１５１４の、少なくとも５番目の２つのサブバイト要素ｃおよびｇを含む９番目のバイト、１（１）、および１０番目のバイト、３（３）は、ベクトル１５１５の第３のベクトル要素の最下位部分にシャッフルまたはコピーされ、少なくとも６番目の２つのサブバイト要素ｋおよびｏを含む１１番目のバイト、５（５）、および１２番目のバイト、７（７）は、ベクトル１５１５の第３のベクトル要素の最上位部分にシャッフルまたはコピーされる。シフトに備えて、ソース１５１４の、少なくとも７番目の２つのサブバイト要素ｄおよびｈを含む１３番目のバイト、１（１）、および１４番目のバイト、３（３）は、ベクトル１５１５の第４のベクトル要素の最下位部分にシャッフルまたはコピーされ、少なくとも８番目の２つのサブバイト要素ｌおよびｐを含む１５番目のバイト、５（５）、および１６番目のバイト、７（７）は、ベクトル１５１５の第４のベクトル要素の最上位部分にシャッフルまたはコピーされる。
【０１２０】
シフト処理ブロック１５１８において、１番目の２つの、および２番目の２つのサブバイト要素（すなわち、ａ、ｅ、ｉ、およびｍ）を保持するベクトル１５１５の第１のベクトル要素は、ベクトル１５２２における第１のシフトカウント、ゼロ（０）、だけシフトされ、３番目の２つの、および４番目の２つのサブバイト要素（すなわち、ｂ、ｆ、ｊ、およびｎ）を保持する第２のベクトル要素は、第２のシフトカウント、４（４）だけシフトされ、５番目の２つの、および６番目の２つのサブバイト要素（すなわち、ｃ、ｇ、ｋ、およびｏ）を保持する第３のベクトル要素は、第３のシフトカウント、ゼロ（０）だけシフトされ、７番目の２つの、および８番目の２つのサブバイト要素（すなわち、ｄ、ｈ、ｌ、およびｐ）を保持する第４のベクトル要素は、第４のシフトカウント、４（４）だけシフトされて、それらサブバイト要素を、ベクトル１５２５におけるそれらのそれぞれのバイトの最下位ビットに合わせる。一実施形態において、これらのシフトは、ベクトル１５１５の３２ビットベクトル要素に対して、複数のＳＩＭＤシフターにより共に実行される。代替的な複数の実施形態において、より小さい、またはより大きいシフトが代わりに用いられ得、それらシフトの全てが共に実行されなくてもよい。
【０１２１】
シャッフル処理１５２８において、シフトされた第１、第２、第３および第４のベクトル要素の最下位のバイト位置のそれぞれからのバイトは、ベクトル１５３０の第１のベクトル要素（例えば、３２ビットベクトル要素）にシャッフルまたはコピーされ、シフトされた第１、第２、第３および第４のベクトル要素の２番目に最下位のバイト位置のそれぞれからのバイトは、ベクトル１５３０の第２のベクトル要素にシャッフルまたはコピーされ、シフトされた第１、第２、第３および第４のベクトル要素の２番目に最上位のバイト位置のそれぞれからのバイトは、ベクトル１５３０の第３のベクトル要素にシャッフルまたはコピーされ、シフトされた第１、第２、第３および第４のベクトル要素の最上位のバイト位置のそれぞれからのバイトは、ベクトル１５３０の第４のベクトル要素にシャッフルまたはコピーされて、それらのオリジナルのサブバイト順が復元される。一実施形態において、シャッフルまたはコピーは、ＳＩＭＤベクトルサブバイト解凍機能性を提供する１または複数の命令をデコードすることにより生成される単一のマイクロ演算またはマイクロｏｐに従って複数のＳＩＭＤシャッフラーにより共に実行され得る。代替的な複数の実施形態において、シャッフルまたはコピーは、１より多くのマイクロ演算またはマイクロｏｐに従って複数のＳＩＭＤシャッフラーまたは他の複数のＳＩＭＤ実行ユニットによっても実行され得る。
【０１２２】
ＡＮＤ処理ブロック１５４４において、ベクトル１５３０の各バイトの複数の最上位ビットが（例えば、ベクトル１５４３を用いて）補正またはマスキングされる。一実施形態において、示されているように、それら複数のビットを補正することにより、４ビットが、３２ビットベクトル要素の各バイトにおいてゼロに設定される。いくつかの実施形態において、処理１５０２のＳＩＭＤベクトルサブバイト解凍は、一連のマクロ命令若しくはマイクロコード命令として、または両方の組み合わせとして実装され得る。
【０１２３】
処理１５０１および１５０２が、パックドバイトデータのためにＳＩＭＤベクトルポピュレーションカウント機能性を提供する命令を実行する前に特に有用であることが理解されよう。他方、パックド２ビットデータフォーマットのために、またはパックド４ビットデータフォーマットのために直接的にＳＩＭＤベクトルポピュレーションカウント機能性が提供する命令がサポートされているとき、処理１５０１および１５０２の処理は不必要になり得る。
【０１２４】
図１６Ａは、命令を実行してＳＩＭＤベクトルポピュレーションカウント機能性を提供するための装置の実施形態を示す。
【０１２５】
装置１６０１の複数の実施形態は、ＳＩＭＤポピュレーションカウント機能性を提供する命令の実行のためのパイプライン４００の一部（例えば、実行ステージ４１６）、またはコア４９０の一部（例えば、（複数の）実行ユニット４６２）であり得る。装置１６０１の複数の実施形態は、１または複数の可変の複数のｎ個の可変のサイズのデータ要素の複数の値を格納する１または複数の可変の複数のｎ個の可変のサイズのデータフィールドをそれぞれが含む複数のベクトルレジスタ（例えば、（複数の）物理レジスタファイルユニット４５８）に結合され得る。装置１６０１の複数の実施形態は、ベクトルポピュレーションカウント演算およびパックドデータサイズを（例えば、それ自体の記憶を助ける命令の一部として、またはオペランドとして、または制御レジスタにおいて）指定する命令をデコードするデコードステージ（例えば、デコード４０６）またはデコーダ（例えば、デコードユニット４４０）にも結合され得る。１または複数の実行ユニット（例えば、実行装置１６０１）は、デコードされた命令に応答し、指定されたパックドデータサイズに従って、（例えば、メモリに、またはレジスタに格納された）ソースベクトル１６１２の一部における各パックドデータフィールドの複数のビットを読み取り得る。ここで、ソースベクトルの当該一部における第１の複数のパックドデータフィールドのそれぞれは、指定されたパックドデータサイズに従って複数のビットを格納することになる。装置１６０１の例において示されている一実施形態において、第１の複数のパックドデータフィールドのそれぞれに格納されている複数のビットは２つである。代替的な複数の実施形態において、何らかの他の複数のビットが、第１の複数のパックドデータフィールドのそれぞれに格納され得る。
【０１２６】
例えば、装置１６０１において、ソースベクトル１６１２の一部における各パックドデータフィールドが、第２の複数の２ビットを格納することになるよう、複数のパックドデータフィールドが、ソースベクトル１６１２の第１の複数のｎ個のデータフィールドの１または複数の部分のそれぞれに格納される。処理ブロック１６２０において、ＳＩＭＤ  ２ビットポピュレーションカウント演算のための命令がプロセッサにおいて実行されたことに応答して、ソースベクトル１６１２のｎ個のデータフィールドのこの一部における複数のパックドデータフィールドが読み取られ、予め定められた値（例えば、二進数００）に等しい複数の値の複数の出現が、まず、その予め定められた値との等しさに関してこの一部における複数のパックドデータフィールドから読み取られた複数の値を比較し、そして、ＰＯＰ１６３０カウンタにおいて等しい数をカウントすることによりカウントされる。ＳＩＭＤ  ２ビットポピュレーションカウントのための命令の一実施形態において、予め定められた値（例えば、二進数００）は、即値オペランドとして命令により指定され得る。他の実施形態において、予め定められた値は、複数の値の予め定められた一定のセット１６４２の１つであり得る。他の実施形態において、予め定められた値は、レジスタオペランドにおいて１または複数の要素として命令により指定される複数の値のセット１６４２の１つであり得る。処理ブロック１６２０の結果、予め定められた値（例えば、二進数００）に等しいカウントされた複数の出現は、ソースベクトル１６１２のｎ個のデータフィールドの一部に対応する宛て先１６５２の一部に、対応する１または複数の予め定められた値（例えば、１６４２）のそれぞれ毎に１または複数のカウントとして格納され得る。
【０１２７】
オプションで、処理ブロック１６２１において、ＳＩＭＤ  ２ビットポピュレーションカウント演算のための命令が実行されることにさらに応答して、第２のオプションの予め定められた値（例えば、二進数０１）に等しいソースベクトル１６１２のｎ個のデータフィールドのこの一部における複数のパックドデータフィールドにおける複数の値の複数の出現が、まず、第２の予め定められた値との等しさに関してこの一部における複数のパックドデータフィールドから読み取られた複数の値を比較し、そして、ＰＯＰ１６３１カウンタにおいて等しい数をカウントすることによりカウントされる。ＳＩＭＤ  ２ビットポピュレーションカウントのための命令の一実施形態において、第２のオプションの予め定められた値（例えば、二進数０１）は、即値オペランドの一部として命令により指定され得る。他の実施形態において、第２の予め定められた値は、複数の値の予め定められた一定のセット１６４２の１つでもあり得る。他の実施形態において、第２の予め定められた値は、レジスタオペランドにおいて１または複数の要素として命令により指定される複数の値のセット１６４２の１つでもあり得る。また処理ブロック１６２１の結果、第２の予め定められた値（例えば、二進数０１）に等しいカウントされた複数の出現は、ソースベクトル１６１２のｎ個のデータフィールドの一部に対応する宛て先１６５２の一部に、対応する１または複数の予め定められた値（例えば、１６４２）のそれぞれ毎に１または複数のカウントとして格納され得る。
【０１２８】
オプションで、処理ブロック１６２２において、ＳＩＭＤ  ２ビットポピュレーションカウント演算のための命令が実行されることにさらに応答して、第３のオプションの予め定められた値（例えば、二進数１０）に等しいソースベクトル１６１２のｎ個のデータフィールドのこの一部における複数のパックドデータフィールドにおける複数の値の複数の出現が、まず、第３の予め定められた値との等しさに関してこの一部における複数のパックドデータフィールドから読み取られた複数の値を比較し、そして、ＰＯＰ１６３２カウンタにおいて等しい数をカウントすることによりカウントされる。ＳＩＭＤ  ２ビットポピュレーションカウントのための命令の一実施形態において、第３のオプションの予め定められた値（例えば、二進数１０）は、即値オペランドの一部として命令により指定され得る。他の実施形態において、第３の予め定められた値は、複数の値の予め定められた一定のセット１６４２の１つでもあり得る。他の実施形態において、第３の予め定められた値は、レジスタオペランドにおいて１または複数の要素として命令により指定される複数の値のセット１６４２の１つでもあり得る。また処理ブロック１６２２の結果、第３の予め定められた値（例えば、二進数１０）に等しいカウントされた複数の出現は、ソースベクトル１６１２のｎ個のデータフィールドの一部に対応する宛て先１６５２の一部に、対応する１または複数の予め定められた値（例えば、１６４２）のそれぞれ毎に１または複数のカウントとして格納され得る。
【０１２９】
オプションで、処理ブロック１６２３において、ＳＩＭＤ  ２ビットポピュレーションカウント演算のための命令が実行されることにさらに応答して、第４のオプションの予め定められた値（例えば、二進数１１）に等しいソースベクトル１６１２のｎ個のデータフィールドのこの一部における複数のパックドデータフィールドにおける複数の値の複数の出現が、まず、第４の予め定められた値との等しさに関してこの一部における複数のパックドデータフィールドから読み取られた複数の値を比較し、そして、ＰＯＰ１６３３カウンタにおいて等しい数をカウントすることによりカウントされる。ＳＩＭＤ  ２ビットポピュレーションカウントのための命令の一実施形態において、第４のオプションの予め定められた値（例えば、二進数１１）は、即値オペランドの一部として命令により指定され得る。他の実施形態において、第４の予め定められた値は、複数の値の予め定められた一定のセット１６４２の１つでもあり得る。他の実施形態において、第４の予め定められた値は、レジスタオペランドにおいて１または複数の要素として命令により指定される複数の値のセット１６４２の１つでもあり得る。また処理ブロック１６２３の結果、第４の予め定められた値（例えば、二進数１１）に等しいカウントされた複数の出現は、ソースベクトル１６１２のｎ個のデータフィールドの一部に対応する宛て先１６５２の一部に、対応する１または複数の予め定められた値（例えば、１６４２）のそれぞれ毎に１または複数のカウントとして格納され得る。
【０１３０】
複数のＳＩＭＤポピュレーションカウント命令が、ゲノム配列決定および配列比較処理のために用いられ得ることが理解されよう。同様の複数の圧縮スキームが、他のデータベース、データマイニングアプリケーション、および検索アプリケーションも複数のＳＩＭＤポピュレーションカウント命令を用い得るようこれらのアプリケーションにおいてもより一般的に使用される。
【０１３１】
ゲノム配列比較における一般的な演算は、塩基対の複数の列に一致させる、または部分的に一致させるために列内の複数のヌクレオチドの複数の出現をカウントすることである。パックドデータフォーマット（ｐａｃｋｅｄＤｎａなど）では、列内の異なるヌクレオチドの複数の出現をカウントするために、複数のシフトおよびマスク演算と併せた複数のルックアップテーブルの使用を他の場合においては伴い得る技術は、代わりに複数のＳＩＭＤポピュレーションカウント命令を用い得る。複数のＳＩＭＤポピュレーションカウント命令を用いることにより、列内の異なるヌクレオチドの複数の出現をカウントするために以前まで必要とされていた複数の演算の多くは取り除かれ得る。したがって、ゲノム配列決定および配列比較処理などの複数のアプリケーション、および、より一般的にデータマイニングなどの複数のデータベースアプリケーションおよび検索アプリケーションの性能は、実質的に改善され得る。
【０１３２】
図１６Ｂは、命令を実行してＳＩＭＤベクトルポピュレーションカウント機能性を提供するための装置１６０２の代替的な実施形態を示す。装置１６０２の複数の実施形態も、ＳＩＭＤポピュレーションカウント機能性を提供する命令の実行のためのパイプライン４００の一部（例えば、実行ステージ４１６）、またはコア４９０の一部（例えば、（複数の）実行ユニット４６２）であり得る。装置１６０２の複数の実施形態は、１または複数の可変の複数のｎ個の可変のサイズのデータ要素の複数の値を格納する１または複数の可変の複数のｎ個の可変のサイズのデータフィールドをそれぞれが含む複数のベクトルレジスタ（例えば、（複数の）物理レジスタファイルユニット４５８）に結合され得る。装置１６０２の複数の実施形態は、ベクトルポピュレーションカウント演算およびパックドデータサイズを（例えば、それ自体の記憶を助ける命令の一部として、またはオペランドとして、または制御レジスタにおいて）指定する命令をデコードするデコードステージ（例えば、デコード４０６）またはデコーダ（例えば、デコードユニット４４０）にも結合され得る。１または複数の実行ユニット（例えば、実行装置１６０２）は、デコードされた命令に応答し、指定されたパックドデータサイズに従って、（例えば、メモリに、またはレジスタに格納された）ソースベクトル１６１２の一部における各パックドデータフィールドの複数のビットを読み取り得る。ここで、ソースベクトルの当該一部における第１の複数のパックドデータフィールドのそれぞれは、指定されたパックドデータサイズに従って複数のビットを格納することになる。装置１６０２の例において示されている一実施形態において、第１の複数のパックドデータフィールドのそれぞれに格納されている複数のビットは４ビットである。代替的な複数の実施形態において、何らかの他の複数のビットが、第１の複数のパックドデータフィールドのそれぞれに格納され得る。
【０１３３】
例えば、装置１６０２において、ソースベクトル１６１４の一部における各パックドデータフィールドが、第２の複数の４ビットを格納することになるよう、複数のパックドデータフィールドが、ソースベクトル１６１４の第１の複数のｎ個のデータフィールドの１または複数の部分のそれぞれに格納される。処理ブロック１６４０において、ＳＩＭＤ  ４ビットポピュレーションカウント演算のための命令がプロセッサにおいて実行されたことに応答して、ソースベクトル１６１４のｎ個のデータフィールドのこの一部における複数のパックドデータフィールドが読み取られ、予め定められた値（例えば、Ｔ）に等しい複数の値の複数の出現が、まず、その予め定められた値との等しさに関してこの一部における複数のパックドデータフィールドから読み取られた複数の値を比較し、そして、ＰＯＰ１６３０カウンタにおいて等しい数をカウントすることによりカウントされる。ＳＩＭＤ  ４ビットポピュレーションカウントのための命令の一実施形態において、予め定められた値（例えば、Ｔ）は、即値オペランドとして命令により指定され得る。他の実施形態において、予め定められた値は、複数の値の予め定められた一定のセット１６４４の１つであり得る。他の実施形態において、予め定められた値は、レジスタオペランドにおいて１または複数の要素として命令により指定される複数の値のセット１６４４の１つであり得る。処理ブロック１６４０の結果、予め定められた値（例えば、Ｔ）に等しいカウントされた複数の出現は、ソースベクトル１６１４のｎ個のデータフィールドの一部に対応する宛て先１６５４の一部に、対応する１または複数の予め定められた値（例えば、１６４４）のそれぞれ毎に１または複数のカウントとして格納され得る。
【０１３４】
オプションで、処理ブロック１６４１において、ＳＩＭＤ  ４ビットポピュレーションカウント演算のための命令が実行されることにさらに応答して、第２のオプションの予め定められた値（例えば、Ｃ）に等しいソースベクトル１６１４のｎ個のデータフィールドのこの一部における複数のパックドデータフィールドにおける複数の値の複数の出現が、まず、第２の予め定められた値との等しさに関してこの一部における複数のパックドデータフィールドから読み取られた複数の値を比較し、そして、ＰＯＰ１６３１カウンタにおいて等しい数をカウントすることによりカウントされる。ＳＩＭＤ  ４ビットポピュレーションカウントのための命令の一実施形態において、第２のオプションの予め定められた値（例えば、Ｃ）は、即値オペランドの一部として命令により指定され得る。他の実施形態において、第２の予め定められた値は、複数の値の予め定められた一定のセット１６４４の１つでもあり得る。他の実施形態において、第２の予め定められた値は、レジスタオペランドにおいて１または複数の要素として命令により指定される複数の値のセット１６４４の１つでもあり得る。また処理ブロック１６４１の結果、第２の予め定められた値（例えば、Ｃ）に等しいカウントされた複数の出現は、ソースベクトル１６１４のｎ個のデータフィールドの一部に対応する宛て先１６５４の一部に、対応する１または複数の予め定められた値（例えば、１６４４）のそれぞれ毎に１または複数のカウントとして格納され得る。
【０１３５】
オプションで、処理ブロック１６４２において、ＳＩＭＤ  ４ビットポピュレーションカウント演算のための命令が実行されることにさらに応答して、第３のオプションの予め定められた値（例えば、Ａ）に等しいソースベクトル１６１４のｎ個のデータフィールドのこの一部における複数のパックドデータフィールドにおける複数の値の複数の出現が、まず、第３の予め定められた値との等しさに関してこの一部における複数のパックドデータフィールドから読み取られた複数の値を比較し、そして、ＰＯＰ１６３２カウンタにおいて等しい数をカウントすることによりカウントされる。ＳＩＭＤ  ４ビットポピュレーションカウントのための命令の一実施形態において、第３のオプションの予め定められた値（例えば、Ａ）は、即値オペランドの一部として命令により指定され得る。他の実施形態において、第３の予め定められた値は、複数の値の予め定められた一定のセット１６４４の１つでもあり得る。他の実施形態において、第３の予め定められた値は、レジスタオペランドにおいて１または複数の要素として命令により指定される複数の値のセット１６４４の１つでもあり得る。また処理ブロック１６４２の結果、第３の予め定められた値（例えば、Ａ）に等しいカウントされた複数の出現は、ソースベクトル１６１４のｎ個のデータフィールドの一部に対応する宛て先１６５４の一部に、対応する１または複数の予め定められた値（例えば、１６４４）のそれぞれ毎に１または複数のカウントとして格納され得る。
【０１３６】
オプションで、処理ブロック１６４３において、ＳＩＭＤ  ４ビットポピュレーションカウント演算のための命令が実行されることにさらに応答して、第４のオプションの予め定められた値（例えば、Ｇ）に等しいソースベクトル１６１４のｎ個のデータフィールドのこの一部における複数のパックドデータフィールドにおける複数の値の複数の出現が、まず、第４の予め定められた値との等しさに関してこの一部における複数のパックドデータフィールドから読み取られた複数の値を比較し、そして、ＰＯＰ１６３３カウンタにおいて等しい数をカウントすることによりカウントされる。ＳＩＭＤ  ４ビットポピュレーションカウントのための命令の一実施形態において、第４のオプションの予め定められた値（例えば、Ｇ）は、即値オペランドの一部として命令により指定され得る。他の実施形態において、第４の予め定められた値は、複数の値の予め定められた一定のセット１６４４の１つでもあり得る。他の実施形態において、第４の予め定められた値は、レジスタオペランドにおいて１または複数の要素として命令により指定される複数の値のセット１６４４の１つでもあり得る。また処理ブロック１６４３の結果、第４の予め定められた値（例えば、Ｇ）に等しいカウントされた複数の出現は、ソースベクトル１６１４のｎ個のデータフィールドの一部に対応する宛て先１６５４の一部に、対応する１または複数の予め定められた値（例えば、１６４４）のそれぞれ毎に１または複数のカウントとして格納され得る。
【０１３７】
図１６Ｃは、命令を実行してＳＩＭＤベクトルポピュレーションカウント機能性を提供するための装置１６０３の他の代替的な実施形態を示す。装置１６０３の複数の実施形態も、ＳＩＭＤポピュレーションカウント機能性を提供する命令の実行のためのパイプライン４００の一部（例えば、実行ステージ４１６）、またはコア４９０の一部（例えば、（複数の）実行ユニット４６２）であり得る。装置１６０３の複数の実施形態は、１または複数の可変の複数のｎ個の可変のサイズのデータ要素の複数の値を格納する１または複数の可変の複数のｎ個の可変のサイズのデータフィールドをそれぞれが含む複数のベクトルレジスタ（例えば、（複数の）物理レジスタファイルユニット４５８）に結合され得る。装置１６０３の複数の実施形態は、ベクトルポピュレーションカウント演算およびパックドデータサイズを（例えば、それ自体の記憶を助ける命令の一部として、またはオペランドとして、または制御レジスタにおいて）指定する命令をデコードするデコードステージ（例えば、デコード４０６）またはデコーダ（例えば、デコードユニット４４０）にも結合され得る。１または複数の実行ユニット（例えば、実行装置１６０３）は、デコードされた命令に応答し、指定されたパックドデータサイズに従って、（例えば、メモリに、またはレジスタに格納された）ソースベクトル１６１８の一部における各パックドデータフィールドの複数のビットを読み取り得る。ここで、ソースベクトルの当該一部における第１の複数のパックドデータフィールドのそれぞれは、指定されたパックドデータサイズに従って複数のビットを格納することになる。装置１６０３の例において示されている一実施形態において、第１の複数のパックドデータフィールドのそれぞれに格納されている複数のビットは８ビットである。代替的な複数の実施形態において、何らかの他の複数のビットが、第１の複数のパックドデータフィールドのそれぞれに格納され得る。
【０１３８】
例えば、装置１６０３において、ソースベクトル１６１８の一部における各パックドデータフィールドが、第２の複数の８ビットを格納することになるよう、複数のパックドデータフィールドが、ソースベクトル１６１８の第１の複数のｎ個のデータフィールドの１または複数の部分のそれぞれに格納される。処理ブロック１６８０において、ＳＩＭＤ  ８ビットポピュレーションカウント演算のための命令がプロセッサにおいて実行されたことに応答して、ソースベクトル１６１８のｎ個のデータフィールドのこの一部における複数のパックドデータフィールドが読み取られ、予め定められた値（例えば、０ｘ５８）に等しい複数の値の複数の出現が、まず、その予め定められた値との等しさに関してこの一部における複数のパックドデータフィールドから読み取られた複数の値を比較し、そして、ＰＯＰ１６３０カウンタにおいて等しい数をカウントすることによりカウントされる。ＳＩＭＤ  ８ビットポピュレーションカウントのための命令の一実施形態において、予め定められた値（例えば、０ｘ５８）は、即値オペランドとして命令により指定され得る。他の実施形態において、予め定められた値は、複数の値の予め定められた一定のセット１６４４の１つであり得る。他の実施形態において、予め定められた値は、レジスタオペランドにおいて１または複数の要素として命令により指定される複数の値のセット１６４４の１つであり得る。処理ブロック１６８０の結果、予め定められた値（例えば、０ｘ５８）に等しいカウントされた複数の出現は、ソースベクトル１６１８のｎ個のデータフィールドの一部に対応する宛て先１６５４の一部に、対応する１または複数の予め定められた値（例えば、１６４４）のそれぞれ毎に１または複数のカウントとして格納され得る。
【０１３９】
オプションで、処理ブロック１６８１において、ＳＩＭＤ  ８ビットポピュレーションカウント演算のための命令が実行されることにさらに応答して、第２のオプションの予め定められた値（例えば、０ｘ４３）に等しいソースベクトル１６１８のｎ個のデータフィールドのこの一部における複数のパックドデータフィールドにおける複数の値の複数の出現が、まず、第２の予め定められた値との等しさに関してこの一部における複数のパックドデータフィールドから読み取られた複数の値を比較し、そして、ＰＯＰ１６３１カウンタにおいて等しい数をカウントすることによりカウントされる。ＳＩＭＤ  ８ビットポピュレーションカウントのための命令の一実施形態において、第２のオプションの予め定められた値（例えば、０ｘ４３）は、即値オペランドの一部として命令により指定され得る。他の実施形態において、第２の予め定められた値は、複数の値の予め定められた一定のセット１６４４の１つでもあり得る。他の実施形態において、第２の予め定められた値は、レジスタオペランドにおいて１または複数の要素として命令により指定される複数の値のセット１６４４の１つでもあり得る。また処理ブロック１６８１の結果、第２の予め定められた値（例えば、０ｘ４３）に等しいカウントされた複数の出現は、ソースベクトル１６１８のｎ個のデータフィールドの一部に対応する宛て先１６５４の一部に、対応する１または複数の予め定められた値（例えば、１６４４）のそれぞれ毎に１または複数のカウントとして格納され得る。
【０１４０】
オプションで、処理ブロック１６８２において、ＳＩＭＤ  ８ビットポピュレーションカウント演算のための命令が実行されることにさらに応答して、第３のオプションの予め定められた値（例えば、０ｘ４１）に等しいソースベクトル１６１８のｎ個のデータフィールドのこの一部における複数のパックドデータフィールドにおける複数の値の複数の出現が、まず、第３の予め定められた値との等しさに関してこの一部における複数のパックドデータフィールドから読み取られた複数の値を比較し、そして、ＰＯＰ１６３２カウンタにおいて等しい数をカウントすることによりカウントされる。ＳＩＭＤ  ８ビットポピュレーションカウントのための命令の一実施形態において、第３のオプションの予め定められた値（例えば、０ｘ４１）は、即値オペランドの一部として命令により指定され得る。他の実施形態において、第３の予め定められた値は、複数の値の予め定められた一定のセット１６４４の１つでもあり得る。他の実施形態において、第３の予め定められた値は、レジスタオペランドにおいて１または複数の要素として命令により指定される複数の値のセット１６４４の１つでもあり得る。また処理ブロック１６８２の結果、第３の予め定められた値（例えば、０ｘ４１）に等しいカウントされた複数の出現は、ソースベクトル１６１８のｎ個のデータフィールドの一部に対応する宛て先１６５４の一部に、対応する１または複数の予め定められた値（例えば、１６４４）のそれぞれ毎に１または複数のカウントとして格納され得る。
【０１４１】
オプションで、処理ブロック１６８３において、ＳＩＭＤ  ８ビットポピュレーションカウント演算のための命令が実行されることにさらに応答して、第４のオプションの予め定められた値（例えば、０ｘ４７）に等しいソースベクトル１６１８のｎ個のデータフィールドのこの一部における複数のパックドデータフィールドにおける複数の値の複数の出現が、まず、第４の予め定められた値との等しさに関してこの一部における複数のパックドデータフィールドから読み取られた複数の値を比較し、そして、ＰＯＰ１６３３カウンタにおいて等しい数をカウントすることによりカウントされる。ＳＩＭＤ  ８ビットポピュレーションカウントのための命令の一実施形態において、第４のオプションの予め定められた値（例えば、０ｘ４７）は、即値オペランドの一部として命令により指定され得る。他の実施形態において、第４の予め定められた値は、複数の値の予め定められた一定のセット１６４４の１つでもあり得る。他の実施形態において、第４の予め定められた値は、レジスタオペランドにおいて１または複数の要素として命令により指定される複数の値のセット１６４４の１つでもあり得る。また処理ブロック１６８３の結果、第４の予め定められた値（例えば、０ｘ４７）に等しいカウントされた複数の出現は、ソースベクトル１６１８のｎ個のデータフィールドの一部に対応する宛て先１６５４の一部に、対応する１または複数の予め定められた値（例えば、１６４４）のそれぞれ毎に１または複数のカウントとして格納され得る。
【０１４２】
図１６Ｄは、命令を実行してＳＩＭＤベクトルポピュレーションカウント機能性を提供するための装置１６０４の他の代替的な実施形態を示す。装置１６０４の複数の実施形態も、ＳＩＭＤポピュレーションカウント機能性を提供する命令の実行のためのパイプライン４００の一部（例えば、実行ステージ４１６）、またはコア４９０の一部（例えば、（複数の）実行ユニット４６２）であり得る。装置１６０４の複数の実施形態は、１または複数の可変の複数のｎ個の可変のサイズのデータ要素の複数の値を格納する１または複数の可変の複数のｎ個の可変のサイズのデータフィールドをそれぞれが含む複数のベクトルレジスタ（例えば、（複数の）物理レジスタファイルユニット４５８）に結合され得る。装置１６０４の複数の実施形態は、ベクトルポピュレーションカウント演算およびパックドデータサイズを（例えば、それ自体の記憶を助ける命令の一部として、またはオペランドとして、または制御レジスタにおいて）指定する命令をデコードするデコードステージ（例えば、デコード４０６）またはデコーダ（例えば、デコードユニット４４０）にも結合され得る。１または複数の実行ユニット（例えば、実行装置１６０４）は、デコードされた命令に応答し、指定されたパックドデータサイズに従って、（例えば、メモリに、またはレジスタに格納された）ソースベクトル１６１８の一部における各パックドデータフィールドの複数のビットを読み取り得る。ここで、ソースベクトルの当該一部における第１の複数のパックドデータフィールドのそれぞれは、指定されたパックドデータサイズに従って複数のビットを格納することになる。装置１６０４の例において示されている一実施形態において、第１の複数のパックドデータフィールドのそれぞれに格納されている複数のビットは８ビットである。代替的な複数の実施形態において、何らかの他の複数のビットが、第１の複数のパックドデータフィールドのそれぞれに格納され得る。
【０１４３】
例えば、装置１６０４において、ソースベクトル１６１８の一部における各パックドデータフィールドが、複数の８ビットを格納することになるよう、複数のパックドデータフィールドが、ソースベクトル１６１８の複数のｎ個のデータフィールドの１または複数の部分のそれぞれに格納される。処理ブロック１６８４において、ＳＩＭＤ  ８ビットポピュレーションカウント演算のための命令の一実施形態がプロセッサにおいて実行されたことに応答して、ソースベクトル１６１８のｎ個のデータフィールドの一部（例えば、最下位部分）における複数のパックドデータフィールドが読み取られ、予め定められた値（例えば、０ｘ５８）に等しい複数の値の複数の出現が、まず、その予め定められた値との等しさに関してこの一部における複数のパックドデータフィールドから読み取られた複数の値を比較し、そして、ＰＯＰ１６３４カウンタにおいて等しい数をカウントすることによりカウントされる。ＳＩＭＤ  ８ビットポピュレーションカウントのための命令の一実施形態において、予め定められた値（例えば、０ｘ５８）は、即値オペランドとして命令により指定され得る。他の実施形態において、予め定められた値は、レジスタオペランドにおいて１または複数の要素として命令により指定される複数の値のセット１６４４の１つであり得る。処理ブロック１６８４の結果、予め定められた値（例えば、０ｘ５８）に等しいカウントされた（例えば、最下位部分における）複数の出現は、ソースベクトル１６１８のｎ個のデータフィールドの一部に対応する宛て先１６５４の一部に、対応する１または複数の予め定められた値（例えば、０ｘ５８）に関して１または複数のカウントとして格納され得る。
【０１４４】
処理ブロック１６８５において、ＳＩＭＤ  ８ビットポピュレーションカウント演算のための命令が実行されることにさらに応答して、第２のオプションの予め定められた値（例えば、０ｘ４３）に等しいソースベクトル１６１８のｎ個のデータフィールドの一部（例えば、２番目の最下位部分）における複数のパックドデータフィールドにおける複数の値の複数の出現が、まず、第２の予め定められた値との等しさに関してこの一部における複数のパックドデータフィールドから読み取られた複数の値を比較し、そして、ＰＯＰ１６３５カウンタにおいて等しい数をカウントすることによりカウントされる。ＳＩＭＤ  ８ビットポピュレーションカウントのための命令の一実施形態において、第２のオプションの予め定められた値（例えば、０ｘ４３）は、即値オペランドの一部として命令により指定され得る。他の実施形態において、第２の予め定められた値は、レジスタオペランドにおいて１または複数の要素として命令により指定される複数の値のセット１６４４の１つでもあり得る。また処理ブロック１６８５の結果、第２の予め定められた値（例えば、０ｘ４３）に等しいカウントされた（例えば、２番目の最下位部分における）複数の出現は、ソースベクトル１６１８のｎ個のデータフィールドの一部に対応する宛て先１６５４の一部に、対応する１または複数の予め定められた値（例えば、０ｘ４３）に関して１または複数のカウントとして格納され得る。
【０１４５】
処理ブロック１６８６において、ＳＩＭＤ  ８ビットポピュレーションカウント演算のための命令が実行されることにさらに応答して、第３のオプションの予め定められた値（例えば、０ｘ４１）に等しいソースベクトル１６１８のｎ個のデータフィールドの一部（例えば、３番目の最下位部分）における複数のパックドデータフィールドにおける複数の値の複数の出現が、まず、第３の予め定められた値との等しさに関してこの一部における複数のパックドデータフィールドから読み取られた複数の値を比較し、そして、ＰＯＰ１６３６カウンタにおいて等しい数をカウントすることによりカウントされる。ＳＩＭＤ  ８ビットポピュレーションカウントのための命令の一実施形態において、第３のオプションの予め定められた値（例えば、０ｘ４１）は、即値オペランドの一部として命令により指定され得る。他の実施形態において、第３の予め定められた値は、レジスタオペランドにおいて１または複数の要素として命令により指定される複数の値のセット１６４４の１つでもあり得る。また処理ブロック１６８６の結果、第３の予め定められた値（例えば、０ｘ４１）に等しいカウントされた（例えば、３番目の最下位部分における）複数の出現は、ソースベクトル１６１８のｎ個のデータフィールドの一部に対応する宛て先１６５４の一部に、対応する１または複数の予め定められた値（例えば、０ｘ４１）に関して１または複数のカウントとして格納され得る。
【０１４６】
処理ブロック１６８７において、ＳＩＭＤ  ８ビットポピュレーションカウント演算のための命令が実行されることにさらに応答して、第４のオプションの予め定められた値（例えば、０ｘ４７）に等しいソースベクトル１６１８のｎ個のデータフィールドの一部（例えば、４番目の最下位部分）における複数のパックドデータフィールドにおける複数の値の複数の出現が、まず、第４の予め定められた値との等しさに関してこの一部における複数のパックドデータフィールドから読み取られた複数の値を比較し、そして、ＰＯＰ１６３７カウンタにおいて等しい数をカウントすることによりカウントされる。ＳＩＭＤ  ８ビットポピュレーションカウントのための命令の一実施形態において、第４のオプションの予め定められた値（例えば、０ｘ４７）は、即値オペランドの一部として命令により指定され得る。他の実施形態において、第４の予め定められた値は、レジスタオペランドにおいて１または複数の要素として命令により指定される複数の値のセット１６４４の１つでもあり得る。また処理ブロック１６８７の結果、第４の予め定められた値（例えば、０ｘ４７）に等しいカウントされた（例えば、４番目の最下位部分における）複数の出現は、ソースベクトル１６１８のｎ個のデータフィールドの一部に対応する宛て先１６５４の一部に、対応する１または複数の予め定められた値（例えば、０ｘ４７）に関して１または複数のカウントとして格納され得る。
【０１４７】
図１６Ｅは、命令を実行してＳＩＭＤベクトルポピュレーションカウント機能性を提供するための装置の他の代替的な実施形態を示す。装置１６０５の複数の実施形態も、ＳＩＭＤポピュレーションカウント機能性を提供する命令の実行のためのパイプライン４００の一部（例えば、実行ステージ４１６）、またはコア４９０の一部（例えば、（複数の）実行ユニット４６２）であり得る。装置１６０５の複数の実施形態は、１または複数の可変の複数のｎ個の可変のサイズのデータ要素の複数の値を格納する１または複数の可変の複数のｎ個の可変のサイズのデータフィールドをそれぞれが含む複数のベクトルレジスタ（例えば、（複数の）物理レジスタファイルユニット４５８）に結合され得る。装置１６０５の複数の実施形態は、ベクトルポピュレーションカウント演算およびパックドデータサイズを（例えば、それ自体の記憶を助ける命令の一部として、またはオペランドとして、または制御レジスタにおいて）指定する命令をデコードするデコードステージ（例えば、デコード４０６）またはデコーダ（例えば、デコードユニット４４０）にも結合され得る。１または複数の実行ユニット（例えば、実行装置１６０５）は、デコードされた命令に応答し、指定されたパックドデータサイズに従って、（例えば、メモリに、またはレジスタに格納された）ソースベクトル１６１８の一部における各パックドデータフィールドの複数のビットを読み取り得る。ここで、ソースベクトルの当該一部における第１の複数のパックドデータフィールドのそれぞれは、指定されたパックドデータサイズに従って複数のビットを格納することになる。装置１６０５の例において示されている一実施形態において、第１の複数のパックドデータフィールドのそれぞれに格納されている複数のビットは８ビットである。代替的な複数の実施形態において、何らかの他の複数のビットが、第１の複数のパックドデータフィールドのそれぞれに格納され得る。
【０１４８】
例えば、装置１６０５において、ソースベクトル１６１８の一部における各パックドデータフィールドが、複数の８ビットを格納することになるよう、複数のパックドデータフィールドが、ソースベクトル１６１８の複数のｎ個のデータフィールドの１または複数の部分のそれぞれに格納される。処理ブロック１６４８において、ＳＩＭＤ  ８ビットポピュレーションカウント演算のための命令の一実施形態がプロセッサにおいて実行されたことに応答して、ソースベクトル１６１８のｎ個のデータフィールドの一部（例えば、最下位部分）における複数のパックドデータフィールドが読み取られ、１または複数の予め定められた値（例えば、１６４４）に等しい複数の値の複数の出現が、まず、その１または複数の予め定められた値（例えば、１６４４）のそれぞれとの等しさに関してこの一部における複数のパックドデータフィールドから読み取られた複数の値を比較し、そして、ＰＯＰ１６４３カウンタにおいて等しい数をカウントすることによりカウントされる。ＳＩＭＤ  ８ビットポピュレーションカウントのための命令の一実施形態において、１または複数の予め定められた値（例えば、１６４４）は、即値オペランドとして命令により指定され得る。他の実施形態において、１または複数の予め定められた値は、レジスタオペランドにおいて１または複数の要素として命令により指定される複数の値のセット１６４４の１つであり得る。処理ブロック１６４８の結果、１または複数の予め定められた値（例えば、１６４４）のそれぞれに等しいカウントされた（例えば、最下位部分における）複数の出現は、ソースベクトル１６１８のｎ個のデータフィールドの一部に対応する宛て先１６５０の一部に、対応する１または複数の予め定められた値（例えば、１６４４）のそれぞれ毎に１または複数のカウントとして格納され得る。
【０１４９】
処理ブロック１６５８において、ＳＩＭＤ  ８ビットポピュレーションカウント演算のための命令が実行されることにさらに応答して、１または複数の予め定められた値（例えば、１６４４）のそれぞれに等しいソースベクトル１６１８のｎ個のデータフィールドの一部（例えば、２番目の最下位部分）における複数のパックドデータフィールドにおける複数の値の複数の出現が、まず、１または複数の予め定められた値（例えば、１６４４）との等しさに関してこの一部における複数のパックドデータフィールドから読み取られた複数の値を比較し、そして、ＰＯＰ１６５３カウンタにおいて等しい数をカウントすることによりカウントされる。また処理ブロック１６５８の結果、１または複数の予め定められた値（例えば、１６４４）のそれぞれに等しいカウントされた（例えば、２番目の最下位部分における）複数の出現は、ソースベクトル１６１８のｎ個のデータフィールドの一部に対応する宛て先１６５０の一部に、対応する１または複数の予め定められた値（例えば、１６４４）のそれぞれ毎に１または複数のカウントとして格納され得る。
【０１５０】
処理ブロック１６６８において、ＳＩＭＤ  ８ビットポピュレーションカウント演算のための命令が実行されることにさらに応答して、１または複数の予め定められた値（例えば、１６４４）に等しいソースベクトル１６１８のｎ個のデータフィールドの一部（例えば、３番目の最下位部分）における複数のパックドデータフィールドにおける複数の値の複数の出現が、まず、１または複数の予め定められた値との等しさに関してこの一部における複数のパックドデータフィールドから読み取られた複数の値を比較し、そして、ＰＯＰ１６６３カウンタにおいて等しい数をカウントすることによりカウントされる。また処理ブロック１６６８の結果、１または複数の予め定められた値（例えば、１６４４）のそれぞれに等しいカウントされた（例えば、３番目の最下位部分における）複数の出現は、ソースベクトル１６１８のｎ個のデータフィールドの一部に対応する宛て先１６５０の一部に、対応する１または複数の予め定められた値（例えば、１６４４）のそれぞれ毎に１または複数のカウントとして格納され得る。
【０１５１】
処理ブロック１６７８において、ＳＩＭＤ  ８ビットポピュレーションカウント演算のための命令が実行されることにさらに応答して、１または複数の予め定められた値（例えば、１６４４）に等しいソースベクトル１６１８のｎ個のデータフィールドの一部（例えば、４番目の最下位部分）における複数のパックドデータフィールドにおける複数の値の複数の出現が、まず、１または複数の予め定められた値との等しさに関してこの一部における複数のパックドデータフィールドから読み取られた複数の値を比較し、そして、ＰＯＰ１６７３カウンタにおいて等しい数をカウントすることによりカウントされる。また処理ブロック１６７８の結果、１または複数の予め定められた値（例えば、１６４４）のそれぞれに等しいカウントされた（例えば、４番目の最下位部分における）複数の出現は、ソースベクトル１６１８のｎ個のデータフィールドの一部に対応する宛て先１６５０の一部に、対応する１または複数の予め定められた値（例えば、１６４４）のそれぞれ毎に１または複数のカウントとして格納され得る。
【０１５２】
複数のＳＩＭＤポピュレーションカウント命令を実行するための、本明細書に開示されている装置は、計算の効率性を改善し、電力消費を低減するべくゲノム配列決定および配列比較処理のために用いられ得ることが理解されよう。同様の複数の圧縮スキームが、他のデータベース、データマイニングアプリケーション、および検索アプリケーションも計算の効率性を改善し、電力消費を低減するべく複数のＳＩＭＤポピュレーションカウント命令を実行するための、本明細書に開示されている装置を用い得るようこれらのアプリケーションにおいてもより一般的に使用される。
【０１５３】
図１７Ａは、命令を実行してＳＩＭＤベクトルポピュレーションカウント機能性を提供するための例示的な処理１７０１の一実施形態に関するフロー図を示す。処理１７０１の処理ブロック１７１０において、ソースベクトルの一部における各データフィールドが複数のビットを格納することになるよう複数のデータフィールドが、そのソースベクトルのｎ個のデータフィールドの１または複数の部分に格納される。処理ブロック１７２０において、ＳＩＭＤポピュレーションカウント演算のための命令がプロセッサにおいて実行される。そして処理ブロック１７３０において、ソースベクトルのｎ個のデータフィールドのこの一部におけるそれらデータフィールドに関して、１または複数の予め定められた値に等しい複数の値の複数の出現がカウントされる。処理ブロック１７４０において、カウントされた複数の出現は、ソースベクトルのｎ個のデータフィールドの一部に対応する宛て先の一部に、対応する１または複数の予め定められた値のそれぞれ毎に１または複数のカウントとして格納される。処理ブロック１７９０において、処理１７０１がソースベクトルの全ての部分を処理し終えたか否かの判断がなされる。そうでない場合、処理は処理ブロック１７３０から開始して繰り返される。そうでなければ、処理は処理ブロック１７９９で終了する。
【０１５４】
図１７Ｂは、命令を実行してＳＩＭＤベクトルポピュレーションカウント機能性を提供するための例示的な処理１７０２の代替的な実施形態に関するフロー図を示す。処理１７０２の処理ブロック１７１２において、ソースベクトルの一部における各データフィールドがビットのペアを格納することになるよう複数のデータフィールドが、そのソースベクトルのｎ個の２ビットデータフィールドの１または複数の部分に格納される。処理ブロック１７２２において、ＳＩＭＤ  ２ビットポピュレーションカウント演算のための命令がプロセッサにおいて実行される。そして処理ブロック１７３２において、ソースベクトルのｎ個の２ビットデータフィールドのこの一部における複数の２ビットデータフィールドに関して、１または複数の予め定められた値に等しい複数の値の複数の出現がカウントされる。処理ブロック１７４２において、カウントされた複数の出現は、ソースベクトルのｎ個の２ビットデータフィールドの一部に対応する宛て先の一部に、対応する１または複数の予め定められた値のそれぞれ毎に１または複数のカウントとして格納される。処理ブロック１７９０において、処理１７０２がソースベクトルの全ての部分を処理し終えたか否かの判断がなされる。そうでない場合、処理は処理ブロック１７３２から開始して繰り返される。そうでなければ、処理は処理ブロック１７９９で終了する。
【０１５５】
図１７Ｃは、命令を実行してＳＩＭＤベクトルポピュレーションカウント機能性を提供するための例示的な処理１７０４の他の代替的な実施形態に関するフロー図を示す。処理１７０４の処理ブロック１７１４において、ソースベクトルの一部における各データフィールドがビットのペアを格納することになるよう複数のデータフィールドが、そのソースベクトルのｎ個の４ビットデータフィールドの１または複数の部分に格納される。処理ブロック１７２４において、ＳＩＭＤ  ４ビットポピュレーションカウント演算のための命令がプロセッサにおいて実行される。そして処理ブロック１７３４において、ソースベクトルのｎ個の４ビットデータフィールドのこの一部における複数の４ビットデータフィールドに関して、１または複数の予め定められた値に等しい複数の値の複数の出現がカウントされる。処理ブロック１７４４において、カウントされた複数の出現は、ソースベクトルのｎ個の４ビットデータフィールドの一部に対応する宛て先の一部に、対応する１または複数の予め定められた値のそれぞれ毎に１または複数のカウントとして格納される。処理ブロック１７９０において、処理１７０４がソースベクトルの全ての部分を処理し終えたか否かの判断がなされる。そうでない場合、処理は処理ブロック１７３４から開始して繰り返される。そうでなければ、処理は処理ブロック１７９９で終了する。
【０１５６】
図１７Ｄは、命令を実行してＳＩＭＤベクトルポピュレーションカウント機能性を提供するための例示的な処理１７０８の他の代替的な実施形態に関するフロー図を示す。処理１７０８の処理ブロック１７１８において、ソースベクトルの一部における各データフィールドがビットのペアを格納することになるよう複数のデータフィールドが、そのソースベクトルのｎ個の８ビットデータフィールドの１または複数の部分に格納される。処理ブロック１７２８において、ＳＩＭＤ  ８ビットポピュレーションカウント演算のための命令がプロセッサにおいて実行される。そして処理ブロック１７３８において、ソースベクトルのｎ個の８ビットデータフィールドのこの一部における複数の８ビットデータフィールドに関して、１または複数の予め定められた値に等しい複数の値の複数の出現がカウントされる。処理ブロック１７４８において、カウントされた複数の出現は、ソースベクトルのｎ個の８ビットデータフィールドの一部に対応する宛て先の一部に、対応する１または複数の予め定められた値のそれぞれ毎に１または複数のカウントとして格納される。処理ブロック１７９０において、処理１７０８がソースベクトルの全ての部分を処理し終えたか否かの判断がなされる。そうでない場合、処理は処理ブロック１７３８から開始して繰り返される。そうでなければ、処理は処理ブロック１７９９で終了する。
【０１５７】
図１８Ａは、命令を実行してＳＩＭＤベクトルポピュレーションカウント機能性を提供するための例示的な処理１８０１の一実施形態に関するフロー図を示す。処理１８０１の処理ブロック１８１０において、ソースベクトルの一部における各パックドデータフィールドが複数のビットを格納することになるよう複数のパックドデータフィールドが、そのソースベクトルの１または複数の部分のそれぞれに格納される。処理ブロック１８２０において、ＳＩＭＤポピュレーションカウント演算およびパックドデータサイズを指定する命令がデコードされる。そして処理ブロック１８３０において、デコードされた命令に応答し、ソースベクトルの１または複数の部分の一部における複数のパックドデータフィールドのそれぞれの複数のビットが読み取られる。処理ブロック１８４０において、ソースベクトルのこの一部における複数のパックドデータフィールドに関して、１または複数の予め定められた値に等しい複数の値の複数の出現がカウントされる。処理ブロック１８５０において、カウントされた複数の出現は、ソースベクトルの一部に対応する宛て先の一部において、１または複数の予め定められた値に対応する１または複数のカウントとして格納される。処理ブロック１８９０において、処理１８０１がソースベクトルの全ての部分を処理し終えたか否かの判断がなされる。そうでない場合、処理は処理ブロック１８３０から開始して繰り返される。そうでなければ、処理は処理ブロック１８９９で終了する。
【０１５８】
図１８Ｂは、命令を実行してＳＩＭＤベクトルポピュレーションカウント機能性を提供するための例示的な処理１８０２の代替的な実施形態に関するフロー図を示す。処理１８０２の処理ブロック１８１２において、ソースベクトルの一部における各パックドデータフィールドがビットのペアを格納することになるよう複数のパックドデータフィールドが、そのソースベクトルの１または複数の部分のそれぞれに格納される。処理ブロック１８２２において、ＳＩＭＤポピュレーションカウント演算およびパックドデータサイズを指定する命令がデコードされる。そして処理ブロック１８３２において、デコードされた命令に応答し、ソースベクトルの１または複数の部分の一部における複数のパックドデータフィールドのそれぞれのビットのペアが読み取られる。処理ブロック１８４２において、ソースベクトルのこの一部における複数のパックドデータフィールドに関して、１または複数の予め定められた値に等しい複数の値の複数の出現がカウントされる。処理ブロック１８５２において、カウントされた複数の出現は、ソースベクトルの一部に対応する宛て先の一部において、１または複数の予め定められた値に対応する１または複数のカウントとして格納される。処理ブロック１８９０において、処理１８０２がソースベクトルの全ての部分を処理し終えたか否かの判断がなされる。そうでない場合、処理は処理ブロック１８３２から開始して繰り返される。そうでなければ、処理は処理ブロック１８９９で終了する。
【０１５９】
図１８Ｃは、命令を実行してＳＩＭＤベクトルポピュレーションカウント機能性を提供するための例示的な処理の他の代替的な実施形態に関するフロー図を示す。処理１８０４の処理ブロック１８１４において、ソースベクトルの一部における各パックドデータフィールドがビットの４ビットニブルを格納することになるよう複数のパックドデータフィールドが、そのソースベクトルの１または複数の部分のそれぞれに格納される。処理ブロック１８２４において、ＳＩＭＤポピュレーションカウント演算およびパックドデータサイズを指定する命令がデコードされる。そして処理ブロック１８３４において、デコードされた命令に応答し、ソースベクトルの１または複数の部分の一部における複数のパックドデータフィールドのそれぞれの複数のビットのニブルが読み取られる。処理ブロック１８４４において、ソースベクトルのこの一部における複数のパックドデータフィールドに関して、１または複数の予め定められた値に等しい複数の値の複数の出現がカウントされる。処理ブロック１８５４において、カウントされた複数の出現は、ソースベクトルの一部に対応する宛て先の一部において、１または複数の予め定められた値に対応する１または複数のカウントとして格納される。処理ブロック１８９０において、処理１８０４がソースベクトルの全ての部分を処理し終えたか否かの判断がなされる。そうでない場合、処理は処理ブロック１８３４から開始して繰り返される。そうでなければ、処理は処理ブロック１８９９で終了する。
【０１６０】
図１８Ｄは、命令を実行してＳＩＭＤベクトルポピュレーションカウント機能性を提供するための例示的な処理の他の代替的な実施形態に関するフロー図を示す。処理１８０８の処理ブロック１８１８において、ソースベクトルの一部における各パックドデータフィールドがデータバイトを格納することになるよう複数のパックドデータフィールドが、そのソースベクトルの１または複数の部分のそれぞれに格納される。処理ブロック１８２８において、ＳＩＭＤポピュレーションカウント演算およびパックドデータサイズを指定する命令がデコードされる。そして処理ブロック１８３８において、デコードされた命令に応答し、ソースベクトルの１または複数の部分の一部における複数のパックドデータフィールドのそれぞれのデータバイトが読み取られる。処理ブロック１８４８において、ソースベクトルのこの一部における複数のパックドデータフィールドに関して、１または複数の予め定められた値に等しい複数の値の複数の出現がカウントされる。処理ブロック１８５８において、カウントされた複数の出現は、ソースベクトルの一部に対応する宛て先の一部において、１または複数の予め定められた値に対応する１または複数のカウントとして格納される。処理ブロック１８９０において、処理１８０８がソースベクトルの全ての部分を処理し終えたか否かの判断がなされる。そうでない場合、処理は処理ブロック１８３８から開始して繰り返される。そうでなければ、処理は処理ブロック１８９９で終了する。
【０１６１】
複数のＳＩＭＤポピュレーションカウント命令が、ゲノム配列決定および配列比較処理の効率性を改善するのに用いられ得ることが理解されよう。同様の複数の圧縮スキームが、他のデータベース、データマイニングアプリケーション、および検索アプリケーションも計算の効率性を改善するべく複数のＳＩＭＤポピュレーションカウント命令を用い得るようこれらのアプリケーションにおいてもより一般的に使用される。
【０１６２】
ゲノム配列比較における一般的な演算は、塩基対の複数の列に一致させる、または部分的に一致させるために列内の複数のヌクレオチドの複数の出現をカウントすることである。パックドデータフォーマット（ｐａｃｋｅｄＤｎａなど）では、列内の異なるヌクレオチドの複数の出現をカウントするために、複数のシフトおよびマスク演算と併せた複数のルックアップテーブルの使用を他の場合においては伴い得る技術は、代わりに複数のＳＩＭＤポピュレーションカウント命令を用い得る。複数のＳＩＭＤポピュレーションカウント命令を用いることにより、列内の異なるヌクレオチドの複数の出現をカウントするために以前まで必要とされていた複数の演算の多くは取り除かれ得る。したがって、ゲノム配列決定および配列比較処理などの複数のアプリケーション、および、より一般的にデータマイニングなどの複数のデータベースアプリケーションおよび検索アプリケーションの性能は、実質的に改善され得る。
【０１６３】
本明細書に開示されている複数のメカニズムの複数の実施形態は、ハードウェア、ソフトウェア、ファームウェア、またはそのような複数の実装アプローチの組み合わせにより実装され得る。本願発明の複数の実施形態は、少なくとも１つのプロセッサ、記憶システム（揮発性または不揮発性のメモリおよび／または複数の記憶素子を含む）、少なくとも１つの入力デバイス、および少なくとも１つの出力デバイスを備える複数のプログラマブルシステムで実行される複数のコンピュータプログラムまたはプログラムコードとして実装され得る。
【０１６４】
プログラムコードは、本明細書に説明されている複数の機能を実行し、出力情報を生成する複数の入力命令に適用され得る。出力情報は、公知の方式で、１または複数の出力デバイスに適用され得る。本明細書の目的において、プロセッシングシステムは、例えば、デジタル信号プロセッサ（ＤＳＰ）、マイクロコントローラ、特定用途向け集積回路（ＡＳＩＣ）、またはマイクロプロセッサなどのプロセッサを有する任意のシステムを含む。
【０１６５】
プログラムコードは、プロセッシングシステムと通信を行う高水準の手続き型プログラミング言語またはオブジェクト指向のプログラミング言語で実装され得る。またプログラムコードは、所望される場合、アセンブリ言語またはマシン言語で実装され得る。事実、本明細書に説明されている複数のメカニズムの範囲は、任意の特定のプログラミング言語に限定されない。いずれの場合であっても、言語はコンパイラ型言語またはインタープリタ型言語であり得る。
【０１６６】
少なくとも１つの実施形態の１または複数の態様は、マシンによって読み取られたときに当該マシンに本明細書に説明されている複数の技術を実行するロジックを作らせる、プロセッサ内の様々なロジックを表すマシン可読媒体上に格納された複数の代表的な命令によって実装され得る。「ＩＰコア」として公知であるそのような表現は、有形のマシン可読媒体上に格納され、ロジックまたはプロセッサを実際に作成する製造マシンにロードする様々な顧客または製造施設に供給され得る。
【０１６７】
そのようなマシン可読記憶媒体は、これらに限定されるわけではないが、マシンまたはデバイスによって製造または形成される、ハードディスク、フロッピー（登録商標）ディスク、光ディスク、コンパクトディスクリードオンリーメモリ（ＣＤ−ＲＯＭ）、コンパクトディスクリライタブル（ＣＤ−ＲＷ）、および光磁気ディスクを含む任意の他のタイプのディスク、リードオンリーメモリ（ＲＯＭ）などの半導体デバイス、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、スタティックランダムアクセスメモリ（ＳＲＡＭ）、などのランダムアクセスメモリ（ＲＡＭ）、消去可能プログラマブルリードオンリーメモリ（ＥＰＲＯＭ）、フラッシュメモリ、電子的消去可能プログラマブルリードオンリーメモリ（ＥＥＰＲＯＭ）、磁気または光カード、または、複数の電子命令を格納するのに適した任意の他のタイプの媒体などの記憶媒体を含む複数の物品の非一時的な有形の配置を含み得る。
【０１６８】
したがって、本願発明の複数の実施形態は、本明細書に説明されている複数の構造、複数の回路、複数の装置、複数のプロセッサ、および／または複数のシステム特徴を定める、ハードウェア記述言語（ＨＤＬ）などの複数の命令を保持する、または設計データを保持する非一時的な有形のマシン可読媒体も含む。そのような複数の実施形態は、プログラムプロダクトとも呼ばれ得る。
【０１６９】
いくつかの場合、命令コンバータは、ソース命令セットからターゲット命令セットに命令を変換するのに用いられ得る。例えば、命令コンバータは、（例えば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を用い）変換し、モーフィングし、エミュレートし、そうでなければ命令をコアにより処理されることになる１または複数の他の命令に変換し得る。命令コンバータは、ソフトウェア、ハードウェア、ファームウェア、またはこれらの組み合わせで実装され得る。命令コンバータは、プロセッサ上、プロセッサ外、または部分的にプロセッサ上であり部分的にプロセッサ外であり得る。
【０１７０】
したがって、少なくとも１つの実施形態に係る１または複数の命令を実行するための複数の技術が開示されている。特定の例示的な複数の実施形態が説明され、添付の複数の図面において示されてきたが、そのような複数の実施形態は単に幅広い本願発明を例示するものであり、限定するものではないこと、および本開示の検討により当業者は様々な他の変形例を思い付くので、本願発明は、示され説明された特定の複数の構造および複数の配置に限定されないことが理解されるべきである。成長が速く、更なる進歩が容易には予知出来ない本技術領域などの技術領域において、開示された複数の実施形態は容易に、本開示の複数の原理、または添付の複数の請求項の態様から逸脱することなく、技術進歩を可能とすることにより促されるように配置および詳細において変形可能であり得る。
【図１Ａ】
2019050039.tif 000005
【図１Ｂ】
2019050039.tif 000006
【図１Ｃ】
2019050039.tif 000007
【図２】
2019050039.tif 000008
【図３Ａ】
2019050039.tif 000009
【図３Ｂ】
2019050039.tif 000010
【図３Ｃ】
2019050039.tif 000011
【図３Ｄ】
2019050039.tif 000012
【図３Ｅ】
2019050039.tif 000013
【図３Ｆ】
2019050039.tif 000014
【図３Ｇ】
2019050039.tif 000015
【図３Ｈ】
2019050039.tif 000016
【図４Ａ】
2019050039.tif 000017
【図４Ｂ】
2019050039.tif 000018
【図５】
2019050039.tif 000019
【図６】
2019050039.tif 000020
【図７】
2019050039.tif 000021
【図８】
2019050039.tif 000022
【図９】
2019050039.tif 000023
【図１０】
2019050039.tif 000024
【図１１】
2019050039.tif 000025
【図１２】
2019050039.tif 000026
【図１３】
2019050039.tif 000027
【図１４】
2019050039.tif 000028
【図１５Ａ】
2019050039.tif 000029
【図１５Ｂ】
2019050039.tif 000030
【図１６Ａ】
2019050039.tif 000031
【図１６Ｂ】
2019050039.tif 000032
【図１６Ｃ】
2019050039.tif 000033
【図１６Ｄ】
2019050039.tif 000034
【図１６Ｅ】
2019050039.tif 000035
【図１７Ａ】
2019050039.tif 000036
【図１７Ｂ】
2019050039.tif 000037
【図１７Ｃ】
2019050039.tif 000038
【図１７Ｄ】
2019050039.tif 000039
【図１８Ａ】
2019050039.tif 000040
【図１８Ｂ】
2019050039.tif 000041
【図１８Ｃ】
2019050039.tif 000042
【図１８Ｄ】
2019050039.tif 000043
【手続補正書】
【提出日】平成30年12月26日(2018.12.26)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
ストレージと、宛て先レジスタと、デコードステージと、１または複数の実行ユニットを備えるプロセッサであって、
前記ストレージは、ソースベクトルの第１部分と、ソースベクトルの第２部分とを格納するものであり、
前記ソースベクトルの前記第１部分には、第１のパックドデータフィールドが複数個備えられており、前記ソースベクトルの前記第２部分には、第２のパックドデータフィールドが複数個備えられており、
前記第１および第２のパックドデータフィールドのそれぞれは、所定のビット数のビット列を格納するものであり、
前記宛て先レジスタは、前記ソースベクトルの前記第１部分に対応する宛て先レジスタの第１部分と、前記ソースベクトルの前記第２部分に対応する宛て先レジスタの第２部分とを含み、
ベクトルポピュレーションカウント演算を指定する第１命令の、前記デコードステージによるデコードに応答して、前記１または複数の実行ユニットは、
４つの予め定められた二進値００、０１、１０及び１１のそれぞれ毎に、前記ソースベクトルの前記第１部分内において、前記予め定められた二進値と等しいビット列を格納する前記第１のパックドデータフィールドの個数をカウントし、
前記４つの予め定められた二進値のそれぞれ毎に、前記ソースベクトルの前記第２部分内において、前記予め定められた二進値と等しいビット列を格納する前記第２のパックドデータフィールドの個数をカウントし、
前記４つの予め定められた二進値のそれぞれ毎の、前記第１のパックドデータフィールドにおいてカウントした値を、前記宛て先レジスタの前記第１部分に格納し、
前記４つの予め定められた二進値のそれぞれ毎の、前記第２のパックドデータフィールドにおいてカウントした値を、前記宛て先レジスタの前記第２部分に格納するものであり、
前記４つの予め定められた二進値の各々は、前記所定のビット数を有し、
前記所定のビット数は２であり、
前記４つの予め定められた二進値００、０１、１０及び１１は、前記第１命令に対して一定であり、前記第１命令によって指定されない
プロセッサ。
【外国語明細書】
2019050039000001.pdf