(57)【特許請求の範囲】
【請求項１】
少なくとも第１のオペランド及び第２のオペランドを指定する命令を復号する復号回路と、
前記復号回路に連結される実行回路であり、前記実行回路は復号された前記命令を実行して、
前記第２のオペランドにおいて規定された回数だけ、前記第１のオペランドのビットをシフトし、前記第１のオペランドの最上位ビットがシフトアウトされるたびに、１である最下位ビットをプルインすることにより、複数のビットを含む結果を生成する、実行回路と、
を備え、前記結果の各ビットは、アレイのデータエレメントの１つに対応し、前記第２のオペランドは、ベクトルオペレーションの残りのループにおける残りのイタレーションの数を指定する、装置。
【請求項２】
前記第２のオペランドは、前記ベクトルオペレーションに対して、ループ制限から現在のイタレーションカウントを減じた減算結果を指定する、請求項１に記載の装置。
【請求項３】
前記第１のオペランド及び前記第２のオペランドの両方は、汎用レジスタである、請求項１または２に記載の装置。
【請求項４】
前記第１のオペランドは、マスクレジスタであり、前記第２のオペランドは、汎用レジスタである、請求項１または２に記載の装置。
【請求項５】
１つまたは複数の状態レジスタは、前記結果に基づいて設定される、請求項１から３のいずれか１項に記載の装置。
【請求項６】
少なくとも第１のオペランド及び第２のオペランドを指定するマスク生成命令を復号する段階と、
復号された前記マスク生成命令に応答して、
前記第２のオペランドにおいて規定された回数だけ、前記第１のオペランドのビットをシフトすることと、
前記第１のオペランドの最上位ビットがシフトアウトされるたびに、１である最下位ビットをプルインすることにより、複数のビットを含む結果を生成することと、
により復号された前記マスク生成命令を実行する段階と、
を備え、前記結果の各ビットは、アレイのデータエレメントに対応し、前記第２のオペランドは、ベクトルオペレーションの残りのループにおける残りのイタレーションの数を指定する、方法。
【請求項７】
前記第２のオペランドは、前記ベクトルオペレーションに対して、ループ制限から現在のイタレーションカウントを減じた減算結果を指定する、請求項６に記載の方法。
【請求項８】
前記第１のオペランド及び前記第２のオペランドの両方は、汎用レジスタである、請求項６または７に記載の方法。
【請求項９】
前記第１のオペランドは、マスクレジスタであり、前記第２のオペランドは、汎用レジスタである、請求項６または７に記載の方法。
【請求項１０】
前記結果に基づいて１つまたは複数の状態レジスタを修正する段階をさらに備える、請求項６から９のいずれか１項に記載の方法。
【請求項１１】
ランダムアクセスメモリと、
前記ランダムアクセスメモリに連結されるプロセッサと、
を備え、前記プロセッサは、
少なくとも第１のオペランド及び第２のオペランドを指定するマスク生成命令を復号する命令復号回路と、
前記命令復号回路に連結された実行回路であり、前記実行回路は、復号された前記マスク生成命令を実行して、
前記第２のオペランドにおいて規定された回数だけ、前記第１のオペランドのビットをシフトし、前記第１のオペランドの最上位ビットがシフトアウトされるたびに、１である最下位ビットをプルインすることにより、複数のビットを含む結果を生成する、実行回路と、
を備え、前記結果の各ビットは、アレイのデータエレメントの１つに対応し、前記第２のオペランドは、ベクトルオペレーションの残りのループにおける残りのイタレーションの数を指定する、システム。
【請求項１２】
前記第１のオペランド及び前記第２のオペランドの両方は、汎用レジスタである、請求項１１に記載のシステム。
【請求項１３】
前記第１のオペランドは、マスクレジスタであり、前記第２のオペランドは、汎用レジスタである、請求項１１に記載のシステム。
【請求項１４】
１つまたは複数の状態レジスタは、前記結果に基づいて設定される、請求項１１から１３のいずれか１項に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、プロセッサまたは他の処理ロジックによって実行された場合に、論理的、数学的または他の複数の関数オペレーションを実行する処理ロジック、複数のマイクロプロセッサ及び関連づけられた命令セットアーキテクチャの分野に関する。
【背景技術】
【０００２】
命令セット、すなわち命令セットアーキテクチャ（ＩＳＡ）は、プログラミングに関するコンピュータアーキテクチャの一部であり、複数のネイティブデータ型、複数の命令、レジスタアーキテクチャ、複数のアドレッシングモード、メモリアーキテクチャ、割り込み及び例外処理ならびに外部入出力（Ｉ／Ｏ）を含んでもよい。命令という用語は、概して、本明細書では、プロセッサのデコーダが複数のマクロ命令を復号した結果である複数のマイクロ命令または複数のマイクロオペレーション（ｍｉｃｒｏ−ｏｐ）と対照的に、実行のためにプロセッサ（または（例えば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を用いる）変換、モーフィング、エミュレートまたは他の方法で命令をプロセッサによって処理されるべき１つまたは複数の他の命令に変換する命令変換部）に付与された複数の命令である複数のマクロ命令をいう。
【０００３】
ＩＳＡは、命令セットを実装するプロセッサの内部設計であるマイクロアーキテクチャと区別される。複数の異なるマイクロアーキテクチャを有する複数のプロセッサは、共通の命令セットを共有することができる。例えば、複数のインテル（登録商標）コア（商標）プロセッサ及びカリフォルニア州サニーベールのアドバンスト・マイクロ・デバイセズ社の複数のプロセッサは、ｘ８６命令セットの複数のほぼ同一バージョン（複数のより新しいバージョンに追加されたいくつかの拡張を有する）を実装するが、複数の内部設計は異なる。例えば、ＩＳＡの同じレジスタアーキテクチャは、複数の専用物理レジスタ、レジスタリネーミングメカニズム等を用いて動的に割り当てられた１つまたは複数の物理レジスタを含む複数の周知技術を用いて、複数の異なるマイクロアーキテクチャにおける複数の異なる態様で実装されてもよい。
【０００４】
近年の多くのＩＳＡは、パックデータオペレーションまたは単一命令複数データ（ＳＩＭＤ）オペレーションとも称される複数のベクトルオペレーションをサポートする。１つだけのデータエレメントまたは複数のデータエレメントのペアに対して動作するスカラ命令の代わりに、ベクトル命令（パックデータ命令またはＳＩＭＤ命令とも称される）は、複数のデータエレメントまたは複数のデータエレメントの複数のペアに対して、同時にまたは並列に動作してもよい。プロセッサは、ベクトル命令に応答して複数のオペレーションを同時にまたは並列に実行する並列の実行ハードウェアを有してもよい。
【０００５】
ベクトルオペレーションは、１つのオペレーションにおいて、１つのレジスタまたはメモリ位置内でパックされた複数のデータエレメントに対して動作する。これらの複数のデータエレメントは、ベクトルデータエレメントまたは複数のパックデータエレメントと称される。複数のベクトルデータエレメントのそれぞれは、他とは別個独立にオペレーションされ得る個別のデータ（例えば、ピクセルの色等）を表してもよい。
【図面の簡単な説明】
【０００６】
複数の実施形態が、添付図面の複数の図において、限定的ではなく、例として示される。
【図１】一実施形態に係る複数のベクトルレジスタ及び複数のマスクレジスタを含む命令処理装置のブロック図である。
【図２Ａ】一実施形態に係る複数のマスク生成命令の例を示す。
【図２Ｂ】一実施形態に係る複数のマスク生成命令の例を示す。
【図２Ｃ】一実施形態に係る複数のマスク生成命令の例を示す。
【図３Ａ】一実施形態に係るアレイデータアラインメントの例を示す。
【図３Ｂ】一実施形態に係るアレイデータアラインメントの例を示す。
【図３Ｃ】一実施形態に係るマスクを用いるマスクされたベクトル命令の例を示す。
【図４】一実施形態に係る所定のベクトルレジスタ幅及びデータエレメント幅に対するマスクビットの数を示す。
【図５】一実施形態に係るマスク生成命令に応答して実行されるべき複数のオペレーションを示すフロー図である。
【図６】一実施形態に係るソース命令セットにおける複数のバイナリ命令をターゲット命令セットにおける複数のバイナリ命令に変換するソフトウェア命令変換部の使用を示すブロック図である。
【図７Ａ】一実施形態に係るインオーダ及びアウトオブオーダパイプラインのブロック図である。
【図７Ｂ】一実施形態に係るインオーダ及びアウトオブオーダコアのブロック図である。
【図８Ａ】一実施形態に係るより詳細な例示的インオーダコアアーキテクチャのブロック図である。
【図８Ｂ】一実施形態に係るより詳細な例示的インオーダコアアーキテクチャのブロック図である。
【図９】一実施形態に係るプロセッサのブロック図である。
【図１０】一実施形態に係るシステムのブロック図である。
【図１１】一実施形態に係る第２のシステムのブロック図である。
【図１２】本発明の実施形態に係る第３のシステムのブロック図である。
【図１３】一実施形態に係るシステムオンチップ（ＳｏＣ）のブロック図である。
【発明を実施するための形態】
【０００７】
以下の説明では、多数の具体的な詳細が記載される。しかしながら、本発明の複数の実施形態は、これらの具体的な複数の詳細がなくとも実施可能であることを理解されたい。他の複数の例において、周知の複数の回路、構造及び技術は、この説明に対する理解を曖昧にしないよう、詳細には示されていない。
【０００８】
本明細書に記載される複数の実施形態は、複数のマスクされたベクトル命令によって用いられるマスクを生成するプロセッサを生じさせまたはもたらすように動作可能な複数のマスク生成命令を提供する。複数のマスクされたベクトル命令は、計算ループのトリップカウント（すなわち、イタレーション回数）がベクトルレジスタに収容可能な複数のエレメントの数によって割り切れないシナリオに適用可能である。したがって、複数の残りのイタレーションは、別個に処理される必要がある。複数の残りのイタレーションにおける複数のエレメントを処理するために、マスク生成命令は、例外（例えば、割り当てられたメモリの陰でのアクセスまたは／及び定義されていない複数の結果によって生じる複数の例外）が生成されないように、ベクトルレジスタの一部（例えば、最も重要な複数のエレメント）を複数の計算から省略またはマスクする適切な叙述マスクを生成する。
【０００９】
マスク生成命令は、他の複数のシナリオで用いられることもできる。例えば、命令は、複数の疎ベクトル計算のためのデータ蓄積において、制御マスクを更新するために用いられることができる。データ蓄積は、複数のイタレーションにわたって実行されてもよい。複数のイタレーションのいくつかでは、いくつかのデータエレメントは、計算を終了してもよく、いくつかの新たなデータエレメントが計算に加わってもよい。制御マスクは、さらなる計算を必要とする複数のエレメントを記録するために、更新される。制御マスクは、ベクトル計算の効率性を改善するために、複数のマスクベクトル命令で用いられることができる。
【００１０】
複数のベクトル命令と同様に、マスクされたベクトル命令は、１つまたは複数のベクトルオペランドの複数のデータエレメントに対してベクトルオペレーションを実行するプロセッサを生じさせまたはもたらすように、動作可能である。さらに、マスクされたベクトル命令のそれぞれは、ベクトルオペレーションをマスクする、叙述する、または条件に応じて制御するために、マスクを用いる。複数のマスクは、ベクトル処理をデータエレメント粒度あたりでマスクする、または条件に応じて制御するように、動作可能である。例えば、複数のマスクは、単一のソースベクトルオペランドからの個々のデータエレメントまたは２つのソースベクトルオペランドからの対応する複数のデータエレメントの個々のペアに対して実行されたベクトルオペレーションの結果がデスティネーションに格納されようとされなかろうと、マスクするように動作可能であってもよい。複数のマスクされたベクトル命令によれば、複数のデータエレメントとは別個独立に、叙述されまたは条件に応じて制御されるべき各データエレメントまたは対応する複数のデータエレメントのペアのベクトル処理が可能となる。複数のマスクされたベクトル命令、複数のオペレーション及び複数のマスクは、例えば、高められたコード密度及び／またはより高い命令スループットのような特定の複数の利点を提供してもよい。
【００１１】
図１は、本明細書に記載される複数のマスク生成命令を含む複数の命令を実行するように動作可能な回路を含む実行ユニット１４０を有する命令処理装置１１５の実施形態のブロック図である。いくつかの実施形態では、命令処理装置１１５は、プロセッサ、マルチコアプロセッサのプロセッサコアまたは電子システムの処理エレメントであってもよい。
【００１２】
デコーダ１３０は、複数の高水準機械命令または複数のマクロ命令の形で入力された複数の命令を受信し、低水準複数のマイクロオペレーション、複数のマイクロコードエントリポイント、複数のマイクロ命令、または元の高水準命令を反映し、及び／またはこれから得られる他の複数の低水準命令もしくは複数の制御信号を生成するために、これらを復号する。複数の低水準命令または複数の制御信号は、複数の低水準（例えば、回路レベルまたはハードウェアレベルの）オペレーションを介して、高水準命令のオペレーションを実装してもよい。デコーダ１３０は、様々な複数の異なるメカニズムを用いて実装されてもよい。適切な複数のメカニズムの複数の例は、限定されるものではないが、マイクロコード、複数のルックアップテーブル、複数のハードウェア実装、複数のプログラマブルロジックアレイ（ＰＬＡ）、当技術分野で公知の複数のデコーダを実装するために用いられる他の複数のメカニズム等を含む。
【００１３】
デコーダ１３０は、キャッシュ１１０、メモリ１２０または他の複数のソースに対して入力された複数の命令を受信してもよい。復号された複数の命令は、実行ユニット１４０に送信される。実行ユニット１４０は、１つまたは複数のマイクロオペレーション、複数のマイクロコードエントリポイント、複数のマイクロ命令、他の複数の命令、または受信された複数の命令を反映し、もしくはこれらから得られた他の複数の制御信号を、デコーダ１３０から受信してもよい。実行ユニット１４０は、レジスタファイル１７０、キャッシュ１１０及び／またはメモリ１２０からのデータ入力を受信し、これらへのデータ出力を生成する。
【００１４】
一実施形態では、レジスタファイル１７０は、レジスタとも称される複数のアーキテクチャレジスタを含む。他に指定され、または明らかではない限り、アーキテクチャレジスタ、レジスタファイル及びレジスタという用語は、本明細書では、ソフトウェア及び／またはプログラマに可視な（例えば、ソフトウェアビジブルな）レジスタ、及び／またはオペランドを特定するためにマクロ命令によって指定されるレジスタを指すために用いられる。これらの複数のレジスタは、所定のマイクロアーキテクチャ（例えば、複数のテンポラリレジスタ、複数のリオーダバッファ、複数のリタイアメントレジスタ等）における他の複数の非アーキテクチャレジスタと対比される。
【００１５】
代わりに、デコーダ１３０を有するのではなく、１つまたは複数の他の実施形態では、命令処理装置１１５は、命令エミュレータ、トランスレータ、モーファ、インタプリタまたは他の命令変換ロジックを代わりに有してもよい。様々な複数の異なるタイプの命令変換ロジックが、当技術分野で公知であり、ソフトウェア、ハードウェア、ファームウェアまたはこれらの組み合わせで実装されてもよい。命令変換ロジックは、複数のマスク生成命令のうちの１つまたは複数を受信し、これを１つまたは複数の対応する導出された複数の命令または複数の制御信号にエミュレート、変換、モーフィング、インタプリトまたは他の方法で変換してもよい。さらに複数の他の実施形態では、命令処理装置１１５は、デコーダ及び追加の命令変換ロジックの両方を有してもよい。例えば、命令処理装置１１５は、複数のマスク生成命令のうちの１つまたは複数を１つまたは複数の中間命令に変換する命令変換ロジック、及び１つまたは複数の中間命令を、命令処理装置のネイティブのハードウェアによって実行可能な１つまたは複数の低水準命令または複数の制御信号に復号するデコーダを有してもよい。命令変換ロジックのいくつかまたは全ては、個別のダイ上またはオフダイメモリ内のような、命令処理装置の残りからオフダイに位置してもよい。
【００１６】
一実施形態によれば、レジスタファイル１７０は、複数のベクトルレジスタ１７５のセット及び複数のマスクレジスタ１８５のセットを含み、これらの両方は、複数のマスク生成命令の複数のオペランドを格納するために用いられることができる。各ベクトルレジスタ１７５は、５１２ビット、２５６ビットまたは１２８ビット幅であってもよく、異なるベクトル幅が用いられてもよい。各マスクレジスタ１８５は、各マスクビットが複数のベクトルレジスタ１７５の１のデータエレメントの１つに対応する多数のマスクビットを含む。各マスクビットは、ベクトルレジスタのデータエレメントをマスクするために用いられるため、６４ビットのマスクレジスタは、５１２ビットレジスタの６４個の８ビットデータエレメントをマスクするために用いられることができる。異なる幅（例えば、２５６ビットまたは１２８ビット）を有するベクトルレジスタ及び異なるサイズの複数のデータエレメント（例えば、１６ビット、３２ビットまたは６４ビット）に対して、異なる数の複数のマスクビットがベクトルオペレーションに関連して用いられてもよい。
【００１７】
説明を分かりにくくしないように、比較的簡単な命令処理装置１１５が示され、記載されている。複数の他の実施形態は、１つより多くの実行ユニットを有してもよいことを理解されたい。例えば、装置１１５は、例えば、複数の算術ユニット、複数の算術ロジックユニット（ＡＬＵ）、複数の整数ユニット、複数の浮動小数点ユニット等のような複数の異なるタイプの実行ユニットを含んでもよい。命令処理装置または複数のプロセッサのさらに複数の他の実施形態は、複数のコア、複数の論理プロセッサまたは複数の実行エンジンを有してもよい。命令処理装置１１５の多数の実施形態が、図７Ａ−１３に関して提供される。
【００１８】
本発明の複数の実施形態によれば、本明細書に記載されるマスク生成命令は、命令のレジスタオペランド内の複数のビットをシフトすることによって、マスクを生成する。レジスタオペランドは、マスクレジスタまたは汎用レジスタであってもよい。図２Ａ−２Ｃは、複数のマスク生成命令のための疑似コードの複数の例を示す。これらの複数の図では、ｒ１、ｒ２は、独立したサイズの複数の汎用レジスタ（例えば、ｒ１は３２ビット、ｒ２は６４ビットであってもよい）を表し、ｋ１は、マスクレジスタを表す。値ＫＬは、命令の末尾に付されたニーモニックＢ／Ｗ／Ｄ／Ｑから判断可能なマスクビットの数を表す。
【００１９】
図２Ａは、マスク生成命令ＫＳＨＬＯＮＥＳ［Ｂ／Ｗ／Ｄ／Ｑ］ｋ１，ｒ２の例を示す。ニーモニックＢ／Ｗ／Ｄ／Ｑは、命令ＫＳＨＬＯＮＥＳが、８、１６、３２、６４ビットのマスクにそれぞれ対応するＫＳＨＬＯＮＥＳＢ、ＫＳＨＬＯＮＥＳＷ、ＫＳＨＬＯＮＥＳＤ及びＫＳＨＬＯＮＥＳＱという４つの形式を有することを意味する。
【００２０】
この例では、ｋ１マスクは、ソースオペランド及びデスティネーションの両方として機能する。他のソースオペランドは、汎用レジスタまたはメモリからの値である。
【００２１】
ＫＳＨＬＯＮＥＳ命令は、ｋ１マスクの複数のビットをソースオペランド（ｒ２またはメモリ）において規定された回数だけ左にシフトし、複数の下位ビット位置を埋めるために複数の１をプルインする。「左にシフト」または「左シフト」という用語は、本明細書では、ビットが最下位ビット（ＬＳＢ）から最上位ビット（ＭＳＢ）の方向にシフトされることを意味する。すなわち、ｋ１マスクが１つのビット位置だけ左にシフトされるたびに、最下位ビット位置を埋めるために、ビット値１がプルインされる。例えば、ｋ１＝１：０：０：０：１：１：０：０かつｒ２＝４の場合、「ＫＳＨＬＯＮＥＳＢ  ｋ１，ｒ２」は、ｋ１＝１：１：０：０：１：１：１：１という結果を生じさせ、ここで、各「０」及び「１」は、ビット値を表す。結果的な（デスティネーション）ｋ１に残ったこれらのｋ１ビットは、単に位置をシフトされただけであり、これらの値はシフトによって変更されていないことに留意されたい。複数のＬＳＢ位置に追加する新たなビットは、全て１である。
【００２２】
図２Ｂは、汎用レジスタｒ１をソースオペランド及びデスティネーションの両方として用いるマスク生成命令ＫＳＨＬＯＮＥＳ［Ｂ／Ｗ／Ｄ／Ｑ］ｒ１，ｒ２の代替的な実施形態を示す。
【００２３】
命令のこの形式により、補完的なビット操作命令としての用途が可能になる。図２Ｃは、命令が制御フローに直接用いられることができるように複数の状態フラグ（ＺＦ，ＣＦ）を修正するマスク生成命令の別の代替的な実施形態を示す。マスク生成命令の他の実施形態は、シフトされた結果（すなわち、結果的なマスク）を、複数のソースオペランド、例えば、ＫＳＨＬＯＮＥＳ  ｋ１，ｋ２，ｒ２及びＫＳＨＬＯＮＥＳ  ｒ１，ｒ２，ｒ３とは異なるデスティネーションレジスタに格納する。複数の命令の追加的な複数の代替的な実施形態は、上述された複数のマスク生成命令と同じ複数の命令フォーマットを必ずしも有さない。以下の説明では、複数のマスク生成命令の様々な複数の形式は、ＫＳＨＬＯＮＥＳ及びその複数の変形と称される。
【００２４】
図３Ａ及び３Ｂは、ＫＳＨＬＯＮＥＳ及びその複数の変形が、ベクトル計算の効率性を改善するために用いられ得る複数のシナリオの例を示す。これらの複数の例では、ベクトルオペレーションの残りのループにおける複数の残りのアレイエレメントは、ベクトルレジスタ全体を埋めない。これらの複数のエレメントでは、ベクトルレジスタは、最大で１６のアレイエレメントを格納することができ、例えば、ベクトルレジスタは５１２ビットを有し、各アレイエレメントは３２ビットのダブルワードであると仮定される。複数のアレイエレメントの総数が３５で、ループの最初がベクトルレジスタと整合される場合（図３Ａに示されるように）、ベクトル化されたループにおいて処理されておらず、別個に処理されることが必要な残りのアレイエレメントが最後に３つ存在する。複数のアレイエレメントの総数が３５で、ループの最初がベクトルレジスタと整合されない場合（図３Ｂに示されるように、第１にベクトル化されたループにおける２のアレイエレメント）、ベクトル化されたループにおいて処理されておらず、別個に処理されることが必要な残りのアレイエレメントが最後に１つ存在する。本明細書に記載されるマスク生成命令は、ループのベクトル化を改善するために、複数のマスクベクトルオペレーションにおいて、複数の残りのアレイエレメントとともに用いられることができるマスクを生成する。
【００２５】
データアクセスの効率性を改善するために、コンパイラは、最後にベクトル化されたループにおいて個別に複数の残りのアレイエレメントを処理するコードを生成することができる。しかしながら、最後にベクトル化されたループにおけるアレイエレメントの数は、概して、複数のアレイエレメントのアドレス及び／またはループトリップカウントがその時点で不明なため、コンパイル時には解消されることができない。本明細書に記載される複数の実施形態により、コンパイル時に、コンパイラは、同じ複数のタスクを実行する他の複数のコードシーケンスの代わりに、複数のマスク生成命令のうちの１つまたは複数を生成することができる。したがって、コンパイラは、ループ最適化の当該タスクを単純化するために、これらの複数のマスク生成命令を用いることができる。複数の代替的な実施形態では、複数のマスク生成命令は、プログラマまたは他のコード生成エンティティによって用いられることができる。
【００２６】
ＫＳＨＬＯＮＥＳ命令及びその複数の変形は、ループ末尾における複数の残りのデータエレメントの合計サイズが、ベクトルレジスタの幅より小さいというシナリオを処理するために用いられることができる。これは、全幅のベクトルオペレーションをなすためにループ内の複数のイタレーションが十分でない（すなわち、アレイ内の複数のデータエレメントが十分でない）場合に、ＫＳＨＬＯＮＥＳ命令及びその複数の変形が、用いられることができることを意味する。
【００２７】
図３Ｃの例では、アレイの最後の３のデータエレメント（すなわち、Ａ（３２）、Ａ（３３）、Ａ（３４））は、ソースベクトル３０７の全幅を占めない。すなわち、Ａに残された複数のエレメントは、ベクトルレジスタ全体を埋めるために十分でない。ソースベクトル３０７は、その複数の最下位データエレメントとしてＡ（３２）、Ａ（３３）、Ａ（３４）を含むため、Ａ（３２）、Ａ（３３）、Ａ（３４）に対して加算が実行されるべきであり、加算の複数の結果が格納されるべきであることを示すために、マスク３０８の最下位３ビットのみが（例えば、１に）設定される。マスク３０８の上位１３ビットは、クリアされる（例えば、０）。マスク３０８は、ＫＳＨＬＯＮＥＳ命令または当該複数の変形の１つを実行するプロセッサによって生成された結果となり得る。
【００２８】
一実施形態では、アレイの最後における複数のデータエレメントの欠如（ベクトルレジスタ全体を埋めるために）は、アレイのベースアドレスにおける初期の不整合という結果になり得る。例えば、複数の画像処理アプリケーションでは、多くの場合、画像アレイのサイズは、ベクトルレジスタ幅の整数倍である。しかしながら、画像アレイの最初が整合していない場合、ベクトルレジスタ全体を埋められない多数のデータエレメントがループの最後において残され得る。
【００２９】
マスク３０８を用いるは、アレイの複数のデータエレメントが複数のオペランドであるループの実行をベクトル化する助けとなる。図３Ｃの複数の例では、イタレーションインデックスｉ＝３２，３３及び３４は、ソースベクトル３０７がマスク３０８とともに用いられるマスクされたベクトルオペレーションによりベクトル化されることができる。一実施形態では、ループ検出時に、コンパイラは、本明細書に記載される複数のマスク生成命令のうちの１つまたは複数を含むループ最適化コードを生成することができる。
【００３０】
例示されたマスクされたベクトルオペレーション３０３に対する命令は、スカラ値に加算されるべきソースベクトルを示す。他の複数のマスクされたベクトル命令は、２つまたはそれより多くのソースベクトルを示してもよい。マスクされたベクトルオペレーション３０３の命令は、マスク３０８をさらに指定する。複数のマスクのそれぞれは、複数のマスクエレメント、叙述エレメント、条件付き制御エレメント、またはフラグを含む。図に示されるように、オペレーションが１つのソースベクトルオペランドを伴う場合、対応するソースデータエレメントの各々に対し、１つのそのようなマスクエレメントまたはフラグがあってもよい。一般に、各エレメントまたはフラグは、単一のビットであってもよい。単一のビットによれば、２つの異なる可能性（例えば、オペレーションを実行する対オペレーションを実行しない、オペレーションの結果を格納する対オペレーションの結果を格納しない等）のいずれかを指定してもよい。
【００３１】
代わりに、２つより多くの異なるオプションから選択することが望まれる場合、２つまたはそれより多くのビットが、各フラグまたはエレメントのために用いられてもよい。
【００３２】
例示された従来技術によれば、所定のマスクビットが１に設定される場合、ベクトルオペレーションの結果は、ソースベクトルの対応するデータエレメントに対して実行され、結果の対応するデータエレメントに格納される。逆に、所定のマスクビットがゼロにクリアされる場合、ベクトルオペレーションは、ソースベクトルの対応するデータエレメントについて省略される（すなわち、実行されない）、または結果が、結果の対応するデータエレメントに格納されることが許容されないのいずれかである。むしろ、別の値は、結果データエレメントに格納されてもよい。例えば、ソースベクトルからの対応するデータエレメントの数値が、格納される。代替的な実施形態では、ゼロまたは別の予め定められた値は、結果の対応するデータエレメントに格納されてもよい。図示されたものと逆の、複数の結果が格納されるようにビットがクリアされる（すなわち、０）、または複数の結果が格納されないように設定される（すなわち、１）従来技術も、可能である。
【００３３】
以下のコードシーケンスの例は、現在のイタレーションカウントはｒｂｘに、ループ制限はｒｃｘに格納される、残りのループのためのマスクを生成する。図３Ｃの例示された実施形態を用いると、現在のイタレーションカウントは３１、ループ制限は３４である。
ＳＵＢ  ｒｂｘ，  ｒｃｘ  ／／ｃａｌｃｕｌａｔｅ  ｎｕｍｂｅｒ  ｏｆ  ｒｅｍａｉｎｉｎｇ  ｉｔｅｒａｔｉｏｎｓ
ＫＸＯＲ  ｋ１，  ｋ１，  ｋ１  ／／ｚｅｒｏｉｎｇ  ｍａｓｋ
ＫＳＨＬＯＮＥＳ  ｋ１，  ｒｂｘ  ／／ｇｅｎｅｒａｔｅ  ｍａｓｋ  ｆｏｒ  ｒｅｍａｉｎｄｅｒ  ｌｏｏｐ
【００３４】
ＫＳＨＬＯＮＥＳ命令（その複数の変形を含む）を用いることには、残りのループのためにマスクを生成するために多数の利点がある。複数のＫＳＨＬＯＮＥＳ命令は、減算結果により動作する。当該オペレーションの一部として減算を含む別の命令に対して、減算前にオペランド型の比較を実行するために、追加の計算前オーバヘッドが生じる。さらに、複数のＫＳＨＬＯＮＥＳ命令は、イタレーションカウンタ及び／またはループ制限が負となり得る複数のシナリオをカバーすることにより、コンパイラにさらなる変動性を与え、コードを最適化することが可能となる。さらに、残りのループのためにマスクを生成するためのコードは、３つのフェーズ（すなわち、上述したコードシーケンスにおける３の命令）に分割されることにより、ＫＳＨＬＯＮＥＳ命令を用いる際に、実行スケジューリングを改善し、さらなる変動性及び柔軟性を提供する。複数のＫＳＨＬＯＮＥＳ命令は、それ自体または複数のオペランドの減算が必要ない他の複数の命令との組み合わせによって用いられることができる。例えば、１の個数（Ｎ）がわかる場合、ＫＳＨＬＯＮＥＳは、以下のように最下位Ｎビットに複数の１を有するマスクを生成するために用いられることができる。Ｎ＝５、ｋ１＝０：０：０：０：０：０：０：０の場合、ＫＳＨＬＯＮＥＳ  ｋ１、Ｎはｋ１＝０：０：０：１：１：１：１：１となる。
【００３５】
複数のＫＳＨＬＯＮＥＳ命令は、図４の例に示されるように、疎ベクトル計算のためのデータ蓄積でさらに用いられることができる。この例では、ベクトルレジスタのペア（Ｖ１及びＶ２）及びマスクレジスタのペア（Ｋ１及びＫ２）は、データ蓄積を実行するために用いられる。Ｖ１及びＶ２の両方は、全てのデータエレメント位置が埋められてはいない疎ベクトルである。Ｖ１は、計算のために複数のベクトルエレメントを蓄積するアキュムレータとして機能し、Ｖ２は、Ｖ１の複数の未使用スロットを埋めるために、複数の新たなデータエレメントを提供する。マスクレジスタＫ１及びＫ２は、対応する複数のベクトルレジスタ内で計算のために有効な複数のデータエレメントを含む複数の位置を示すために用いられる。この例では、有効な複数のデータエレメントに対応する複数のマスクビットが、Ｋ１及びＫ２の両方に対して１に設定される。Ｋ２の複数のビット値は、Ｖ２の同じ複数のデータエレメントに対して、反転されることができることが理解されよう。
【００３６】
図４の例では、Ｖ２は、最初、Ｂ０として示される４つのエレメントを含む。Ｋ２の対応する複数のマスクビットは、これら４つのエレメントの複数の位置を示す。Ｎ＝ＰＯＰＣＮＴ（Ｋ２）を用いることにより、Ｎの値は、１の値を有するＫ２ビットの数に設定される。したがって、この例では、Ｎ＝４である。Ｋ１の複数のマスクビットは、初期のＶ１のエレメント位置０−２に対応する３つの１を含む。Ｋ１に含まれる情報は、蓄積されたエレメントＡ０の数のみならず、Ｖ１内における空の複数のスロットの右側境界（この例では、右側境界は、第３のエレメント位置にある）を示す。Ｋ１は、そのまま用いられることができ、または、ＣＯＭＰＲＥＳＳ及び／またはＥＸＰＡＮＤ命令を含むさらなるデータ蓄積のために反転されることができる。
【００３７】
４つのＢ０のエレメントは、既存の複数のベクトル命令を用いて、Ｖ１のエレメント位置３−６に圧縮及びマージされることができる。更新されたＶ１は、初期のＶ１よりも高密度となり、故に、効率的なベクトル計算により適したものとなる。マージ後の対応するＫ１は、Ｋ１のソース値における初期の３ビットの１を保存し、さらなる４つのビットの１を加算するＫ１＝ＫＳＨＬＯＮＥＳ（Ｋ１，Ｎ）によって計算されることができる。Ｋ１のソース値を保存することにより、マージ前後におけるアキュムレータ内のエレメントの数を記録するために個別の複数のカウンタを維持する必要がなくなる。更新されたＶ１がベクトル計算で用いられた後、図４の複数のオペレーションは、アキュムレータがベクトル計算のために複数のデータエレメントを築盛し続けることができるように、繰り返されることができる。
【００３８】
本明細書に開示される複数のマスク生成命令は、一般的な用途を有する複数の汎用的な命令である。例えば、これらの複数の命令は、複数のベクトルオペレーションの残りのループのため、または疎ベクトル計算におけるデータ蓄積のためのマスクを計算するために、単独で、または他の複数の命令との組み合わせのいずれかで、用いられてもよい。他の用途も、本開示に基づいて企図されてもよい。
【００３９】
図５は、一実施形態に係るマスク生成命令を実行するための方法５００のブロックフロー図である。方法５００は、プロセッサ（より詳細には、例えば、図１の実行ユニット１４０）が、少なくとも第１のオペランド及び第２のオペランドを指定するマスク生成命令を受信することにより開始する（ブロック５１０）。複数のマスク生成命令の複数の例は、上述のように、ＫＳＨＬＯＮＥＳ命令及びその複数の変形を含む。一実施形態では、第１のオペランドは、マスクレジスタであり、第２のオペランドは、汎用レジスタである。代替的な実施形態では、第１のオペランド及び第２のオペランドは、両方とも汎用レジスタである。マスク生成命令に応答して、プロセッサは、以下の複数のオペレーションを実行する（ブロック５２０）。第２のオペランドにおいて規定された回数だけ、第１のオペランドの複数のビットを左シフトし（ブロック５３０）、第１のオペランドの最上位ビットがシフトアウト（左へ）するたびに１である最下位ビットをプルインすることにより、結果を生成する（ブロック５４０）。結果の各ビットは、データエレメントに対応する。結果は、マスクされたベクトルオペレーションで用いられるべきマスクである。
【００４０】
複数の様々な実施形態において、方法５００は、汎用プロセッサ、特別用途プロセッサ（例えば、グラフィクスプロセッサもしくはデジタルシグナルプロセッサ）、または別の型のデジタルロジックデバイスまたは命令処理装置によって実行されてもよい。いくつかの実施形態では、方法５００は、図１の命令処理装置１１５、または図７Ａ−１３に示される複数の実施形態のような同様のプロセッサ、装置もしくはシステムによって実行されてもよい。さらに、図１の命令処理装置１１５は、図７Ａ−１３に示されるプロセッサ、装置またはシステムと同様に、方法５００と同じ、同様の、または異なるもののいずれかである、複数のオペレーション及び複数の方法の複数の実施形態を実行してもよい。
【００４１】
いくつかの実施形態では、図１の命令処理装置１１５は、命令をソース命令セットからターゲット命令セットに変換する命令変換部と連携して動作してもよい。例えば、命令変換部は、コアによって処理されるべき１つまたは複数の他の複数の命令に、命令を（例えば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を用いる）変換、モーフィング、エミュレート、または他の方法で変換してもよい。命令変換部は、ソフトウェア、ハードウェア、ファームウェアまたはこれらの組み合わせで実装されてもよい。命令変換部は、プロセッサ上にあってもよく、プロセッサ外にあってもよく、または一部がプロセッサ上かつ一部がプロセッサ外にあってもよい。
【００４２】
図６は、本発明の複数の実施形態に係るソフトウェア命令変換部の使用を対比したブロック図である。例示された実施形態では、命令変換部は、ソフトウェア命令変換部であるが、代わりに、命令変換部は、ソフトウェア、ファームウェア、ハードウェアまたは様々なこれらの組み合わせで実装されてもよい。図６は、少なくとも１つのｘ８６命令セットコア６１６を有するプロセッサによってネイティブで実行され得るｘ８６バイナリコード６０６を生成するために、ｘ８６コンパイラ６０４を用いてコンパイルされ得る高水準言語６０２のプログラムを示す。少なくとも１つのｘ８６命令セットコア６１６を有するプロセッサは、少なくとも１つのｘ８６命令セットコアを有するインテル社製プロセッサと実質的に同じ結果を出すべく、（１）インテル社製ｘ８６命令セットコアの命令セットの大部分、または（２）複数のアプリケーションのオブジェクトコードバージョン、もしくは少なくとも１つのｘ８６命令セットコアを有するインテル社製プロセッサ上で動作することが想定された他のソフトウェアを互換可能に実行または他の方法で処理することにより、少なくとも１つのｘ８６命令セットコアを有するインテル社製プロセッサと実質的に同じ複数の機能を実行可能な任意のプロセッサを表す。ｘ８６コンパイラ６０４は、さらなるリンク処理の有無に関わらず、少なくとも１つのｘ８６命令セットコアを有するプロセッサ６１６上で実行可能なｘ８６バイナリコード６０６（例えば、オブジェクトコード）を生成するように動作可能なコンパイラを表す。
【００４３】
同様に、図６は、少なくとも１つのｘ８６命令セットコアを有さないプロセッサ６１４（例えば、カリフォルニア州サニーベールのＭＩＰＳテクノロジーズ（ＭＩＰＳ  Ｔｅｃｈｎｏｌｏｇｉｅｓ）のＭＩＰＳ命令セットを実行する、及び／またはカリフォルニア州サニーベールのＡＲＭホールディングス（ＡＲＭ  Ｈｏｌｄｉｎｇｓ）のＡＲＭ命令セットを実行する複数のコアを有するプロセッサ）によってネイティブで実行され得る、代替的な命令セットバイナリコード６１０を生成するべく、代替的な命令セットコンパイラ６０８を用いてコンパイルされ得る高水準言語６０２のプログラムを示す。命令変換部６１２は、ｘ８６バイナリコード６０６を、ｘ８６命令セットコアを有さないプロセッサ６１４によってネイティブで実行され得るコードに変換するために用いられる。この変換されたコードは、このような変換が可能な命令変換部の製造は難しいため、代替的な命令セットバイナリコード６１０と同じとなる可能性は低いが、しかしながら変換されたコードは、全般的なオペレーションを達成し、代替的な命令セットからの複数の命令により補完される。したがって、命令変換部６１２は、エミュレーション、シミュレーションまたは任意の他の処理を介して、プロセッサまたはｘ８６命令セットプロセッサもしくはコアを有さない他の電子デバイスにｘ８６バイナリコード６０６を実行させるソフトウェア、ファームウェア、ハードウェアまたはこれらの組み合わせを表す。
【００４４】
［例示的な複数のコアアーキテクチャ］
［インオーダ及びアウトオブオーダコアのブロック図］
図７Ａは、本発明の複数の実施形態に係る例示的なインオーダパイプライン及び例示的なレジスタリネーミング、アウトオブオーダ発行／実行パイプラインの両方を示すブロック図である。図７Ｂは、本発明の複数の実施形態に係るプロセッサに含まれるべきインオーダアーキテクチャコアの例示的な実施形態及び例示的なレジスタリネーミング、アウトオブオーダ発行／実行アーキテクチャコアの両方を示すブロック図である。図７Ａ及び７Ｂの複数の実線のボックスは、インオーダパイプライン及びインオーダコアを示し、選択的に追加された複数の破線のボックスは、レジスタリネーミング、アウトオブオーダ発行／実行パイプライン及びコアを示す。インオーダ態様がアウトオブオーダ態様のサブセットであるとして、アウトオブオーダ態様について説明する。
【００４５】
図７Ａでは、プロセッサパイプライン７００は、フェッチステージ７０２、長さ復号ステージ７０４、復号ステージ７０６、配分ステージ７０８、リネームステージ７１０、スケジューリング（ディスパッチまたは発行としても知られる）ステージ７１２、レジスタ読み出し／メモリ読み出しステージ７１４、実行ステージ７１６、ライトバック／メモリ書き込みステージ７１８、例外処理ステージ７２２及びコミットステージ７２４を含む。
【００４６】
図７Ｂは、実行エンジンユニット７５０に連結されるフロントエンドユニット７３０を含むプロセッサコア７９０を示し、両方ともメモリユニット７７０に連結される。コア７９０は、縮小命令セットコンピュータ（ＲＩＳＣ）コア、複合命令セットコンピュータ（ＣＩＳＣ）コア、超長命令語（ＶＬＩＷ）コアまたはハイブリッドもしくは代替的なコアタイプであってもよい。さらに他のオプションとして、コア７９０は、例えば、ネットワークまたは通信コア、圧縮エンジン、コプロセッサコア、汎用演算画像処理ユニット（ＧＰＧＰＵ）コア、グラフィクスコアなどのような特別用途コアであってもよい。
【００４７】
フロントエンドユニット７３０は、命令キャッシュユニット７３４に連結された分岐予測ユニット７３２を含み、命令キャッシュユニット７３４は、命令トランスレーションルックアサイドバッファ（ＴＬＢ）７３６に連結され、ＴＬＢ７３６は、命令フェッチユニット７３８に連結され、命令フェッチユニット７３８は、復号ユニット７４０に連結される。復号ユニット７４０（またはデコーダ）は、複数の命令を復号し、出力として、１つまたは複数のマイクロオペレーション、マイクロコードエントリポイント、マイクロ命令、他の命令、または元の複数の命令から復号された、もしくはこれらを他の方法で反映する、もしくはこれらから得られた他の制御信号を生成してもよい。復号ユニット７４０は、複数の様々な異なるメカニズムを用いて実装されてもよい。適切な複数のメカニズムの例は、限定されるものではないが、複数のルックアップテーブル、複数のハードウェア実装、複数のプログラマブルロジックアレイ（ＰＬＡ）、複数のマイクロコードリードオンリメモリ（ＲＯＭ）等を含む。一実施形態では、コア７９０は、マイクロコードＲＯＭまたは（例えば、復号ユニット７４０、さもなければフロントエンドユニット７３０内で）特定の複数のマクロ命令に対するマイクロコードを格納する他の媒体を含む。復号ユニット７４０は、実行エンジンユニット７５０内のリネーム／アロケータユニット７５２に連結される。
【００４８】
実行エンジンユニット７５０は、リタイアメントユニット７５４及び１つまたは複数のスケジューラユニット７５６のセットに連結されたリネーム／アロケータユニット７５２を含む。スケジューラユニット７５６は、予約ステーション、中央命令ウィンドウ等を含む任意の数の異なるスケジューラを表す。スケジューラユニット７５６は、物理レジスタファイルユニット７５８に連結される。複数の物理レジスタファイルユニット７５８のそれぞれは、１つまたは複数の物理レジスタファイルを表し、異なる物理レジスタファイルの異なるいくつかが、スカラ整数、スカラ浮動小数点、パック型整数、パック型浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス（例えば、次に実行されるべき命令のアドレスである命令ポインタ）のような、１つまたは複数の異なるデータ型を格納する。一実施形態では、物理レジスタファイルユニット７５８は、ベクトルレジスタユニット、書き込みマスクレジスタユニット及びスカラレジスタユニットを備える。これらの複数のレジスタユニットは、複数のアーキテクチャ上のベクトルレジスタ、ベクトルマスクレジスタ及び汎用レジスタを提供してもよい。物理レジスタファイルユニット７５８は、リタイアメントユニット７５４にオーバラップされることにより、レジスタリネーミング及びアウトオブオーダ実行が実装され得る様々な複数の態様（例えば、リオーダバッファ及びリタイアメントレジスタファイルを用いて、フューチャファイル、ヒストリバッファ及びリタイアメントレジスタファイルを用いて、レジスタマップ及び複数のレジスタのプールを用いて、等）を示す。リタイアメントユニット７５４及び物理レジスタファイルユニット７５８は、実行クラスタ７６０に連結される。実行クラスタ７６０は、１つまたは複数の実行ユニット７６２のセット及び１つまたは複数のメモリアクセスユニット７６４のセットを含む。複数の実行ユニット７６２は、複数の様々なタイプのデータ（例えば、スカラ浮動小数点、パック型整数、パック型浮動小数点、ベクトル整数、ベクトル浮動小数点）に対して、様々な複数のオペレーション（例えば、複数のシフト、加算、減算、乗算）を実行してもよい。いくつかの実施形態は、具体的な複数の機能または複数の機能の複数のセット専用の多数の実行ユニットを含んでもよく、複数の他の実施形態は、１つだけの実行ユニットまたは全ての機能を全てが実行する複数の実行ユニットを含んでもよい。スケジューラユニット７５６、物理レジスタファイルユニット７５８及び実行クラスタ７６０は、複数として示される可能性があるが、その理由は、特定の複数の実施形態は、特定の複数のデータ型／複数のオペレーションに対して個別の複数のパイプラインを生成するからである（例えば、各々が自己のスケジューラユニット、物理レジスタファイルユニット及び／または実行クラスタを有するスカラ整数パイプライン、スカラ浮動小数点／パック型整数／パック型浮動小数点／ベクトル整数／ベクトル浮動小数点パイプライン及び／またはメモリアクセスパイプライン、及び、個別のメモリアクセスパイプラインの場合、このパイプラインの実行クラスタのみがメモリアクセスユニット７６４を有する特定の複数の実施形態が実装される）。個別の複数のパイプラインが用いられる場合、これらのパイプラインのうちの１つまたは複数がアウトオブオーダ発行／実行であり、残りがインオーダであってもよいことも理解されたい。
【００４９】
メモリアクセスユニット７６４のセットは、データＴＬＢユニット７７２を含むメモリユニット７７０に連結され、データＴＬＢユニット７７２は、データキャッシュユニット７７４に連結され、データキャッシュユニット７７４は、二次（Ｌ２）キャッシュユニット７７６に連結される。例示的な一実施形態では、メモリアクセスユニット７６４は、ロードユニット、ストアアドレスユニット及びストアデータユニットを含んでもよく、これらのそれぞれは、メモリユニット７７０内のデータＴＬＢユニット７７２に連結される。命令キャッシュユニット７３４は、メモリユニット７７０内の二次（Ｌ２）キャッシュユニット７７６に、さらに連結される。Ｌ２キャッシュユニット７７６は、１つまたは複数の他のレベルのキャッシュ、及び最終的にはメインメモリに連結される。
【００５０】
例として、例示的なレジスタリネーミング、アウトオブオーダ発行／実行コアアーキテクチャは、パイプライン７００を以下のとおり実装してもよい。１）命令フェッチ７３８が、フェッチステージ７０２及び長さ復号ステージ７０４を実行し、２）復号ユニット７４０が、復号ステージ７０６を実行し、３）リネーム／アロケータユニット７５２が、配分ステージ７０８及びリネームステージ７１０を実行し、４）スケジューラユニット７５６が、スケジューリングステージ７１２を実行し、５）物理レジスタファイルユニット７５８及びメモリユニット７７０が、レジスタ読み出し／メモリ読み出しステージ７１４を実行し、実行クラスタ７６０が、実行ステージ７１６を実行し、６）メモリユニット７７０及び物理レジスタファイルユニット７５８が、ライトバック／メモリ書き込みステージ７１８を実行し、７）様々な複数のユニットが、例外処理ステージ７２２に関与してもよく、かつ８）リタイアメントユニット７５４及び物理レジスタファイルユニット７５８が、コミットステージ７２４を実行する。
【００５１】
コア７９０は、本明細書に記載される命令を含む１つまたは複数の命令セット（例えば、ｘ８６命令セット（複数のより新しいバージョンに追加されたいくつかの拡張を有する）、カリフォルニア州サニーベールのＭＩＰＳテクノロジーズのＭＩＰＳ命令セット、カリフォルニア州サニーベールのＡＲＭホールディングスのＡＲＭ命令セット（ＮＥＯＮなどの複数の選択的なさらなる拡張を有する））をサポートしてもよい。一実施形態では、コア７９０は、パックデータ命令セット拡張（例えば、ＳＳＥ、ＡＶＸ１、ＡＶＸ２等）をサポートするロジックを含むことによって、多くのマルチメディアアプリケーションによって用いられる複数のオペレーションが、パックデータを用いて実行される。
【００５２】
コアは、マルチスレッディング（複数のオペレーションまたは複数のスレッドの２つまたはそれより多くの並列セットを実行すること）をサポートしてもよく、時分割マルチスレッディング、同時マルチスレッディング（単一の物理的コアが複数のスレッドのそれぞれに対して論理的コアを提供することにより、物理的コアが同時マルチスレッディングを実行すること）またはこれらの組み合わせ（例えば、時分割フェッチ及び復号化、その後、インテル（登録商標）ハイパースレッディング・テクノロジーなどでの同時マルチスレッディング）を含む様々な態様で、マルチスレッディングを実行してもよいことを理解されたい。
【００５３】
レジスタリネーミングを、アウトオブオーダ実行との関連で説明しているが、インオーダアーキテクチャにおいて、レジスタリネーミングが用いられてもよいことを理解されたい。プロセッサの例示された実施形態は、個別の命令およびデータキャッシュユニット７３４／７７４、及び共有のＬ２キャッシュユニット７７６をさらに含むが、複数の代替的な実施形態は、複数の命令およびデータの両方のために、例えば、一次（Ｌ１）内部キャッシュ、または複数のレベルの内部キャッシュのような単一の内部キャッシュを有してもよい。いくつかの実施形態では、システムは、内部キャッシュとコア及び／またはプロセッサの外部にある外部キャッシュとの組み合わせを含んでもよい。代わりに、全てのキャッシュは、コア及び／またはプロセッサの外部にあってもよい。
【００５４】
［例示的なインオーダコアアーキテクチャの詳細］
【００５５】
図８Ａ−Ｂは、より詳細な、例示的なインオーダコアアーキテクチャのブロック図を示し、ここで、コアは、チップ内のいくつかの論理ブロック（同じタイプ及び／または異なるタイプの他の複数のコアを含む）の中の１つであってもよい。複数の論理ブロックは、用途に応じて、高帯域幅相互接続ネットワーク（例えば、リングネットワーク）を介して、いくつかの固定機能ロジック、メモリＩ／Ｏインターフェース及び他の必要なＩ／Ｏロジックと通信を行う。
【００５６】
図８Ａは、本発明の複数の実施形態に係る単一のプロセッサコアのブロック図であり、オンダイの相互接続ネットワーク８０２との接続及び二次（Ｌ２）キャッシュローカルサブセット８０４と共に示される。一実施形態では、命令デコーダ８００は、パックデータ命令セット拡張を有するｘ８６命令セットをサポートする。Ｌ１キャッシュ８０６によれば、キャッシュメモリによる、スカラ及びベクトルユニットへの低レイテンシアクセスが可能である。一実施形態では、（設計の単純化のために）スカラユニット８０８及びベクトルユニット８１０は、個別のレジスタセット（それぞれ、複数のスカラレジスタ８１２及び複数のベクトルレジスタ８１４）を用い、これらの間で転送されるデータは、一次（Ｌ１）キャッシュ８０６のメモリに書き込まれてから再読み出しされるが、本発明の複数の代替的な実施形態は、異なるアプローチ（例えば、単一のレジスタセットを用いる、または書き込み及び再読み出しを行うことなく、２つのレジスタファイル間でデータを転送させる通信パスを含む）を用いてもよい。
【００５７】
Ｌ２キャッシュローカルサブセット８０４は、１つのプロセッサコアあたり１つの個別のローカルサブセットに分割されるグローバルＬ２キャッシュの一部である。各プロセッサコアは、自己のＬ２キャッシュローカルサブセット８０４に対するダイレクトアクセスパスを有する。プロセッサコアに読み出されたデータは、自己のＬ２キャッシュサブセット８０４に格納され、迅速かつ、自己の複数のローカルＬ２キャッシュサブセットにアクセスする他の複数のプロセッサコアと並列に、アクセスされることができる。プロセッサコアに書き込まれたデータは、自己のＬ２キャッシュサブセット８０４に格納され、必要な場合には、他の複数のサブセットからフラッシュされる。リングネットワークは、共有のデータに対するコヒーレンシを保証する。リングネットワークが双方向であることにより、複数のプロセッサコア、複数のＬ２キャッシュ及び他の複数の論理ブロックなどのエージェントは、チップ内で互いに通信を行うことができる。各リングデータパスは、１方向あたり１０１２ビット幅である。
【００５８】
図８Ｂは、本発明の複数の実施形態に係る図８Ａのプロセッサコアの一部の拡大図である。図８Ｂは、Ｌ１キャッシュ８０６の一部であるＬ１データキャッシュ８０６Ａと、ベクトルユニット８１０及び複数のベクトルレジスタ８１４に関するさらなる詳細とを含む。
【００５９】
具体的には、ベクトルユニット８１０は、整数、単精度浮動及び倍精度浮動命令のうちの１つまたは複数を実行する１６幅ベクトル処理ユニット（ＶＰＵ）（１６幅ＡＬＵ８２８を参照）である。ＶＰＵは、再構成ユニット８２０による複数のレジスタ入力の再構成、数字変換ユニット８２２Ａ−Ｂによる数字変換、及び複製ユニット８２４によるメモリ入力に対する複製をサポートする。書き込みマスクレジスタ８２６によれば、結果的な複数のベクトルの書き込みを叙述することが可能となる。
【００６０】
［集積メモリコントローラ及びグラフィクスを有するプロセッサ］
図９は、本発明の複数の実施形態に係るプロセッサ９００のブロック図であり、プロセッサ９００は、１つより多くのコアを有してもよく、集積メモリコントローラを有してもよく、集中画像表示を有してもよい。図９の複数の実線のボックスは、単一のコア９０２Ａ、システムエージェント９１０、１つまたは複数のバスコントローラユニット９１６のセットを有するプロセッサ９００を示し、選択的に追加された複数の破線のボックスは、複数のコア９０２Ａ−Ｎを有する代替的なプロセッサ９００、システムエージェントユニット９１０内の１つまたは複数の集積メモリコントローラユニット９１４のセット及び特別用途ロジック９０８を示す。
【００６１】
したがって、プロセッサ９００の異なる複数の実装は、１）集中画像表示及び／または科学的（スループット）ロジック（１つまたは複数のコアを含んでもよい）である特別用途ロジック９０８を有するＣＰＵ、及び１つまたは複数の汎用コア（例えば、汎用インオーダコア、汎用アウトオブオーダコア、これらの２つの組み合わせ）であるコア９０２Ａ−Ｎ、２）主にグラフィクス及び／または科学的（スループット）用として意図された多数の特別用途コアであるコア９０２Ａ−Ｎを有するコプロセッサ、及び３）多数の汎用インオーダコアであるコア９０２Ａ−Ｎを有するコプロセッサを含んでもよい。したがって、プロセッサ９００は、汎用プロセッサ、コプロセッサまたは、例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、ＧＰＧＰＵ（汎用画像処理ユニット）、ハイスループット多集積コア（ＭＩＣ）コプロセッサ（３０またはそれより多くのコアを含む）、組み込みプロセッサなどのような特別用途プロセッサであってもよい。
【００６２】
プロセッサは、１つまたは複数のチップ上に実装されてもよい。プロセッサ９００は、例えば、ＢｉＣＭＯＳ、ＣＭＯＳまたはＮＭＯＳなどの多数の処理技術のいずれかを用いて、１つまたは複数の基板の一部であってもよく、及び／またはその上に実装されてもよい。
【００６３】
メモリ階層は、複数のコア、１つまたは複数の共有キャッシュユニット９０６またはそのセット、及び複数の集積メモリコントローラユニット９１４のセットに連結される外部メモリ（不図示）内に、１つまたは複数のレベルのキャッシュを含む。複数の共有キャッシュユニット９０６のセットは、二次（Ｌ２）、三次（Ｌ３）、四次（Ｌ４）または他の複数のレベルのキャッシュなどの１つまたは複数の中レベルキャッシュ、ラストレベルキャッシュ（ＬＬＣ）及び／またはこれらの組み合わせを含んでもよい。一実施形態では、リングベースの相互接続ユニット９１２が、集中画像表示ロジック９０８、複数の共有キャッシュユニット９０６のセット及びシステムエージェントユニット９１０／集積メモリコントローラユニット９１４を相互接続するが、複数の代替的な実施形態は、そのような複数のユニットを相互接続するための任意の数の周知技術を用いてもよい。一実施形態では、１つまたは複数のキャッシュユニット９０６と複数のコア９０２Ａ−Ｎとの間で、コヒーレンシが維持される。
【００６４】
いくつかの実施形態では、複数のコア９０２Ａ−Ｎのうちの１つまたは複数は、マルチスレッディングが可能である。システムエージェント９１０は、複数のコア９０２Ａ−Ｎの調整及び操作を行うこれらのコンポーネントを含む。システムエージェントユニット９１０は、例えば、電力制御ユニット（ＰＣＵ）及びディスプレイユニットを含んでもよい。ＰＣＵは、複数のコア９０２Ａ−Ｎ及び集中画像表示ロジック９０８の電力状態を調整するために必要なロジック及び複数のコンポーネントであってもよく、またはこれらを含んでもよい。ディスプレイユニットは、１つまたは複数の外部接続ディスプレイを駆動するためのものである。
【００６５】
複数のコア９０２Ａ−Ｎは、アーキテクチャ命令セットに関して同種または異種であってもよく、すなわち、複数のコア９０２Ａ−Ｎのうちの２つまたはそれより多くは、同じ命令セットを実行可能であってもよいが、他は、その命令セットまたは異なる命令セットのサブセットのみを実行可能であってもよい。
【００６６】
［例示的なコンピュータアーキテクチャ］
図１０−１３は、例示的な複数のコンピュータアーキテクチャのブロック図である。ラップトップ、デスクトップ、ハンドヘルド型ＰＣ、携帯情報端末、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、組み込みプロセッサ、デジタルシグナルプロセッサ（ＤＳＰ）、グラフィクスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレイヤ、ハンドヘルドデバイス及び様々な他の電子デバイス用の当技術分野で公知の他の複数のシステム設計及び複数の構成も、適切である。概して、本明細書で開示されるように、プロセッサ及び／または他の実行ロジックを組み込み可能な多様なシステムまたは電子デバイスが、概して適切である。
【００６７】
ここで、図１０を参照すると、本発明の一実施形態に係るシステム１０００のブロック図が示される。システム１０００は、コントローラハブ１０２０に連結される１つまたは複数のプロセッサ１０１０、１０１５を含んでもよい。一実施形態では、コントローラハブ１０２０は、（個別のチップ上にあってもよい）グラフィクスメモリコントローラハブ（ＧＭＣＨ）１０９０及び入出力ハブ（ＩＯＨ）１０５０を含み、ＧＭＣＨ１０９０は、メモリ１０４０及びコプロセッサ１０４５が連結されるメモリ及び複数のグラフィクスコントローラを含み、ＩＯＨ１０５０は、複数の入出力（Ｉ／Ｏ）デバイス１０６０をＧＭＣＨ１０９０に連結する。代わりに、メモリ及び複数のグラフィクスコントローラの一方または両方は、プロセッサ内に集積され（本明細書に記載されるように）、メモリ１０４０及びコプロセッサ１０４５は、プロセッサ１０１０及び単一のチップ内でＩＯＨ１０５０を有するコントローラハブ１０２０に直接連結される。
【００６８】
複数の追加のプロセッサ１０１５の選択的な特性が、図１０に複数の破線で示される。各プロセッサ１０１０、１０１５は、本明細書に記載される複数のプロセッサコアのうちの１つまたは複数を含んでもよく、いくつかのバージョンのプロセッサ９００であってもよい。
【００６９】
メモリ１０４０は、例えば、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、位相変化メモリ（ＰＣＭ）またはこれら２つの組み合わせであってもよい。少なくとも１つの実施形態について、コントローラハブ１０２０は、フロントサイドバス（ＦＳＢ）のようなマルチドロップバス、クイックパスインターコネクト（ＱＰＩ）のようなポイントツーポイントインターフェースまたは同様の接続１０９５を介して、プロセッサ１０１０、１０１５と通信を行う。
【００７０】
一実施形態では、コプロセッサ１０４５は、例えば、ハイスループットＭＩＣプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、ＧＰＧＰＵ、組み込みプロセッサなどのような特別用途プロセッサである。一実施形態では、コントローラハブ１０２０は、集中画像表示アクセラレータを含んでもよい。
【００７１】
物理的リソース１０１０、１０１５の間には、アーキテクチャ、マイクロアーキテクチャ、温度、電力消費特性等を含む様々な利益の基準に関して、様々な複数の違いが存在しうる。
【００７２】
一実施形態では、プロセッサ１０１０は、一般的なタイプの複数のデータ処理オペレーションを制御する複数の命令を実行する。複数の命令内に、複数のコプロセッサ命令が組み込まれていてもよい。プロセッサ１０１０は、これらの複数のコプロセッサ命令を、取り付けられたコプロセッサ１０４５によって実行されるべきタイプのものと認識する。従って、プロセッサ１０１０は、これらの複数のコプロセッサ命令（または複数のコプロセッサ命令を表す複数の制御信号）を、コプロセッサバスまたは他のインターコネクト上で、コプロセッサ１０４５に対して発行する。コプロセッサ１０４５は、受信された複数のコプロセッサ命令を受け付けて実行する。
【００７３】
ここで、図１１を参照すると、本発明の実施形態に係る第１のより詳細な例示的なシステム１１００のブロック図が示される。図１１に示されるように、マルチプロセッサシステム１１００は、ポイントツーポイントインターコネクトシステムであり、ポイントツーポイントインターコネクト１１５０を介して連結される第１のプロセッサ１１７０及び第２のプロセッサ１１８０を含む。プロセッサ１１７０および１１８０のそれぞれは、いくつかのバージョンのプロセッサ９００であってもよい。本発明の一実施形態では、プロセッサ１１７０および１１８０は、それぞれプロセッサ１０１０および１０１５であり、コプロセッサ１１３８は、コプロセッサ１０４５である。他の実施形態では、プロセッサ１１７０および１１８０は、それぞれプロセッサ１０１０、コプロセッサ１０４５である。
【００７４】
プロセッサ１１７０および１１８０は、集積メモリコントローラ（ＩＭＣ）ユニット１１７２および１１８２をそれぞれ含むものとして示される。プロセッサ１１７０は、自己のバスコントローラユニットの一部として、複数のポイントツーポイント（Ｐ−Ｐ）インターフェース１１７６および１１７８をさらに含み、同様に、第２のプロセッサ１１８０は、複数のＰ−Ｐインターフェース１１８６および１１８８を含む。複数のプロセッサ１１７０、１１８０は、複数のＰ−Ｐインターフェース回路１１７８、１１８８を用いたポイントツーポイント（Ｐ−Ｐ）インターフェース１１５０を介して、情報を交換してもよい。図１１に示されるように、ＩＭＣ１１７２および１１８２は、複数のプロセッサを個別のメモリ、すなわち、個別のプロセッサにローカルに取り付けられたメインメモリの一部となり得るメモリ１１３２及びメモリ１１３４に連結する。
【００７５】
複数のプロセッサ１１７０、１１８０の各々は、複数のポイントツーポイントインターフェース回路１１７６、１１９４、１１８６、１１９８を用いる個々のＰ−Ｐインターフェース１１５２、１１５４を介して、チップセット１１９０と情報を交換してもよい。チップセット１１９０は、高性能インターフェース１１３９を介して、コプロセッサ１１３８と任意選択的に情報を交換してもよい。一実施形態では、コプロセッサ１１３８は、例えば、ハイスループットＭＩＣプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、ＧＰＧＰＵ、組み込みプロセッサなどのような特別用途プロセッサである。
【００７６】
共有キャッシュ（不図示）は、いずれかのプロセッサの内部に含まれ、または両方のプロセッサの外部にあってもよいが、プロセッサが低電力モードであっても、いずれかまたは両方のプロセッサのローカルキャッシュ情報が共有キャッシュに格納され得るように、Ｐ−Ｐインターコネクトを介して複数のプロセッサに接続される。
【００７７】
チップセット１１９０は、インターフェース１１９６を介して、第１のバス１１１６に連結されてもよい。一実施形態では、第１のバス１１１６は、ペリフェラルコンポーネントインターコネクト（ＰＣＩ）バスまたはＰＣＩ  Ｅｘｐｒｅｓｓバスもしくは他の第３世代Ｉ／Ｏ相互接続バスなどのバスであってもよいが、本発明の範囲はこれに限定されない。
【００７８】
図１１に示されるように、様々なＩ／Ｏデバイス１１１４が、第１のバス１１１６を第２のバス１１２０に連結するバスブリッジ１１１８と共に、第１のバス１１１６に連結されてもよい。一実施形態では、コプロセッサ、ハイスループットＭＩＣプロセッサ、ＧＰＧＰＵのアクセラレータ（例えば、グラフィクスアクセラレータもしくはデジタル信号処理（ＤＳＰ）ユニットなど）、フィールドプログラマブルゲートアレイまたくは任意の他のプロセッサなどの１つまたは複数の追加のプロセッサ１１１５が、第１のバス１１１６に連結される。一実施形態では、第２のバス１１２０は、ローピンカウント（ＬＰＣ）バスであってもよい。
【００７９】
例えば、キーボード及び／またはマウス１１２２、通信デバイス１１２７、及びディスクドライブ、または複数の命令／コード及びデータ１１３０を含みうる他の大容量ストレージデバイスなどのストレージユニット１１２８を含む様々な複数のデバイスが、一実施形態では、第２のバス１１２０に連結されてもよい。さらに、オーディオＩ／Ｏ１１２４が、第２のバス１１２０に連結されてもよい。なお、他の複数のアーキテクチャが、適用可能である。例えば、図１１のポイントツーポイントアーキテクチャの代わりに、システムは、マルチドロップバスまたは他のそのようなアーキテクチャを実装してもよい。
【００８０】
ここで、図１２を参照すると、本発明の実施形態に係る第２のより詳細な、例示的なシステム１２００のブロック図が示される。図１１および１２における同様の複数のエレメントには、同様の参照番号が付され、図１１の複数の特定の態様は、図１２の他の複数の態様の妨げとならないよう、図１２では省略されている。
【００８１】
図１２は、複数のプロセッサ１１７０、１１８０は、それぞれ集積メモリ及びＩ／Ｏ制御ロジック（「ＣＬ」）１１７２及び１１８２を含んでもよいことを示す。したがって、ＣＬ１１７２、１１８２は、複数の集積メモリコントローラユニットを含み、かつ、Ｉ／Ｏ制御ロジックを含む。図１２は、メモリ１１３２、１１３４のみがＣＬ１１７２、１１８２に連結されるのではなく、複数のＩ／Ｏデバイス１２１４も、複数の制御ロジック１１７２、１１８２に連結されることを示す。複数のレガシーＩ／Ｏデバイス１２１５は、チップセット１１９０に連結される。
【００８２】
ここで、図１３を参照すると、本発明の実施形態に係るＳｏＣ１３００のブロック図が示される。図９における同様の複数のエレメントには、同様の参照番号が付される。また、複数の破線のボックスは、より高度なＳｏＣ上のオプションの機能である。図１３では、相互接続ユニット１３０２は、１つまたは複数のコア２０２Ａ―Ｎ及び共有キャッシュユニット９０６のセットを含むアプリケーションプロセッサ１３１０、システムエージェントユニット９１０、バスコントローラユニット９１６、集積メモリコントローラユニット９１４、集中画像表示ロジック、画像プロセッサ、オーディオプロセッサ及びビデオプロセッサを含み得る１つまたは複数のコプロセッサ１３２０またはそのセット、スタティックランダムアクセスメモリ（ＳＲＡＭ）ユニット１３３０、ダイレクトメモリアクセス（ＤＭＡ）ユニット１３３２及び１つまたは複数の外部ディスプレイに連結するためのディスプレイユニット１３４０に連結される。一実施形態では、コプロセッサ１３２０は、例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、ＧＰＧＰＵ、ハイスループットＭＩＣプロセッサ、組み込みプロセッサなどのような特別用途プロセッサを含む。
【００８３】
本明細書に開示される複数のメカニズムの複数の実施形態は、ハードウェア、ソフトウェア、ファームウェアまたはそのような複数の実装アプローチの組み合わせで実装されてもよい。本発明の複数の実施形態は、少なくとも１つのプロセッサ、ストレージシステム（揮発性及び不揮発性メモリ及び／または複数のストレージ要素を含む）、少なくとも１つの入力デバイスおよび少なくとも１つの出力デバイスを備えるプログラム可能な複数のシステム上で実行する複数のコンピュータプログラムまたはプログラムコードとして実装されてもよい。
【００８４】
図１１に示すコード１１３０などのプログラムコードは、本明細書に記載される複数の機能を実行し、出力情報を生成するために、複数の入力命令に適用されてもよい。出力情報は、１つまたは複数の出力デバイスに、公知の態様で適用されてもよい。この適用のために、処理システムは、例えば、デジタルシグナルプロセッサ（ＤＳＰ）、マイクロコントローラ、特定用途向け集積回路（ＡＳＩＣ）またはマイクロプロセッサなどのプロセッサを有する任意のシステムを含む。
【００８５】
プログラムコードは、処理システムと通信を行うために、高水準の手順型またはオブジェクト指向プログラミング言語で実装されてもよい。プログラムコードは、必要に応じて、アセンブリ言語または機械言語でさらに実装されてもよい。実際には、本明細書に記載される複数のメカニズムは、その範囲において、任意の特定のプログラム言語に限定されるものではない。いずれの場合であっても、言語は、コンパイラ型またはインタプリタ型言語であってもよい。
【００８６】
少なくとも１つの実施形態のうち１つまたは複数の態様は、機械可読媒体に格納された、プロセッサ内の様々なロジックを表す複数の代表的な命令によって実装されてもよく、このような命令は、機械に読み出された場合に、本明細書に記載される複数の技術を実行するべく、機械にロジックを組み立てさせる。「ＩＰコア」として知られるそのような複数の表現は、有形の機械可読媒体上に格納され、様々な顧客または製造設備に供給されて、実際にロジックまたはプロセッサを作り出す製造機械にロードされてもよい。
【００８７】
そのような機械可読記憶媒体は、限定的ではないが、ハードディスク、フロッピー（登録商標）ディスク、光ディスク、コンパクトディスクリードオンリメモリ（ＣＤ−ＲＯＭ）、書き換え可能コンパクトディスク（ＣＤ−ＲＷ）及び磁気光ディスクを含む任意の他のタイプのディスク、リードオンリメモリ（ＲＯＭ）などの半導体デバイス、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、スタティックランダムアクセスメモリ（ＳＲＡＭ）、消去可能プログラマブルＲＯＭ（ＥＰＲＯＭ）、フラッシュメモリ、電気的消去可能プログラマブルＲＯＭ（ＥＥＰＲＯＭ）、位相変化メモリ（ＰＣＭ）、磁気または光カードなどのランダムアクセスメモリ（ＲＡＭ）、または複数の電子的命令を格納するために適切な任意の他のタイプのメディアなどのストレージ媒体を含む、機械またはデバイスによって製造もしくは形成される複数の物品の非一時的かつ有形の構成を含んでもよい。
【００８８】
従って、本発明の複数の実施形態は、複数の命令を含む、または本明細書に記載される複数の構造、複数の回路、複数の装置、複数のプロセッサ及び／または複数のシステム機能を定義するハードウェア記述言語（ＨＤＬ）などの設計データを含む非一時的かつ有形の機械可読媒体をさらに含む。そのような複数の実施形態は、プログラム製品と称されてもよい。
【００８９】
特定の例示的な複数の実施形態が、複数の添付図面で説明及び図示されたが、そのような複数の実施形態は、単に例示であり、広範な発明を限定するものではなく、当業者であれば、本開示を参照することにより様々な他の複数の変更に想到し得ることから、本発明は、図示及び説明された詳細な複数の構造及び構成に限定されるものではないことが理解されよう。成長が速く、さらなる進歩が容易に予見し得ないこのような技術領域においては、本開示の原理または添付された特許請求の範囲から逸脱することなく、技術的進歩を可能とすることによって促進されるように、開示された複数の実施形態は、構成及び詳細において容易に変更され得る。
【図１】
0006373425.tif 000002
【図２Ａ】
0006373425.tif 000003
【図２Ｂ】
0006373425.tif 000004
【図２Ｃ】
0006373425.tif 000005
【図３Ａ】
0006373425.tif 000006
【図３Ｂ】
0006373425.tif 000007
【図３Ｃ】
0006373425.tif 000008
【図４】
0006373425.tif 000009
【図５】
0006373425.tif 000010
【図６】
0006373425.tif 000011
【図７Ａ】
0006373425.tif 000012
【図７Ｂ】
0006373425.tif 000013
【図８Ａ】
0006373425.tif 000014
【図８Ｂ】
0006373425.tif 000015
【図９】
0006373425.tif 000016
【図１０】
0006373425.tif 000017
【図１１】
0006373425.tif 000018
【図１２】
0006373425.tif 000019
【図１３】
0006373425.tif 000020