(57)【要約】      （修正有）【課題】高い電力効率および時間効率でロードを処理する方法および装置を提供する。【解決手段】コンパイラは、プロデューサーロード、コンシューマー再利用ロード、コンシューマー転送ロード、および、プロデューサー／コンシューマハイブリッドロードを特定する。この特定結果に基づき、ロードの実行をロード値バッファ、ストアバッファ、データキャッシュ等に指示することによって高効率化を図る。このような構成とすることによって、ロード値バッファおよびストアバッファから直接ロードさせることによってキャッシュに対するアクセスを低減し、ロードの処理を高効率化する。【選択図】図１
2011129103.tif 000002
【特許請求の範囲】
【請求項１】
メモリに接続されているプロセッサを用いて、新規ロードのオペレーション命令がプロデューサー（Ｐ）ロードである可能性に対応する第１の値および前記新規ロードがコンシューマー再利用（Ｃ）ロードである可能性に対応する第２の値を生成する段階と、
前記第１の値を第１のロード種類しきい値と比較することによって、前記新規ロードがＰロードであるか否かを判断する段階と、
前記新規ロードが関連するメモリ領域と関連している先行ロードがＰロードであるか否かを判断すること、および、前記第２の値を第２のロード種類しきい値と比較することによって、前記新規ロードがＣロードであるか否かを判断する段階と、
前記新規ロードがＰロードおよびＣロードのうちいずれか一方であると判断されると、前記新規ロードの判断結果を示す指標を前記メモリに格納する段階と
を備える方法。
【請求項２】
ロード値バッファをエミュレートすることによって、前記第１の値および前記第２の値を生成する段階を備える請求項１に記載の方法。
【請求項３】
エミュレートされたロード値バッファを前記先行ロードでポピュレートした後に、ポピュレートされた前記ロード値バッファによって前記新規ロードが満たされていると判断することによって、前記新規ロードがＣロードであるか否かを判断する段階を備える請求項１に記載の方法。
【請求項４】
前記第１の値および前記第２の値に基づき、前記新規ロードがＱロードであると判断する段階を備える請求項１に記載の方法。
【請求項５】
前記新規ロードが、コードループに含まれているＱロードであると判断する段階を備える請求項１に記載の方法。
【請求項６】
前記ＱロードをＰロードおよびＣロードに分割する段階を備える請求項５に記載の方法。
【請求項７】
最初に前記先行ロードを複製することに基づき、条件文に含まれている前記新規ロードがＣロードであると判断する段階を備える請求項１に記載の方法。
【請求項８】
前記第１の値および前記第２の値を前記第１のしきい値と比較することによって、前記新規ロードがＰロードであると判断する段階を備える請求項１に記載の方法。
【請求項９】
命令を格納している媒体を備える物品であって、前記命令によって、プロセッサをベースとするシステムは、
新規ロードのオペレーション命令がプロデューサー（Ｐ）ロードである可能性に対応する第１の値および前記新規ロードがコンシューマー再利用（Ｃ）ロードである可能性に対応する第２の値を生成し、
前記第１の値を第１のロード種類しきい値と比較することによって、前記新規ロードがＰロードであるか否かを判断し、
先行ロードがＰロードであるか否かを判断すること、および、前記第２の値を第２のロード種類しきい値と比較することによって、前記新規ロードがＣロードであるか否かを判断する物品。
【請求項１０】
前記プロセッサをベースとするシステムに、エミュレートされたロード値バッファを前記先行ロードでポピュレートした後に、ポピュレートされた前記ロード値バッファによって前記新規ロードが満たされていると判断することによって、前記新規ロードがＣロードであるか否かを判断させる命令をさらに格納している請求項９に記載の物品。
【請求項１１】
前記プロセッサをベースとするシステムに、前記第１の値および前記第２の値に基づき、前記新規ロードがＱロードであると判断させる命令をさらに格納している請求項９に記載の物品。
【請求項１２】
前記プロセッサをベースとするシステムに、前記新規ロードが、コードループに含まれているＱロードであると判断させる命令をさらに格納している請求項９に記載の物品。
【請求項１３】
前記プロセッサをベースとするシステムに、ＱロードをＰロードおよびＣロードに分割させる命令をさらに格納しており、前記Ｑロードは最初はコードループに含まれており、前記Ｐロードおよび前記Ｃロードは１つのメモリアドレスに関連する請求項９に記載の物品。
【請求項１４】
前記プロセッサをベースとするシステムに、最初に前記先行ロードを複製することに基づき、条件文に含まれている前記新規ロードがＣロードであるか否かを判断させる命令をさらに格納している請求項９に記載の物品。
【請求項１５】
前記プロセッサをベースとするシステムに、前記第１の値および前記第２の値を前記第１のしきい値と比較することによって、前記新規ロードがＰロードであるか否かを予備的に判断させて、後に、前記第２の値ではなく前記第１の値を前記第１のしきい値と比較することによって、前記新規ロードがＰロードであることを確認させる命令をさらに格納している請求項９に記載の物品。
【請求項１６】
第１のメモリおよび第２のメモリと、キャッシュとを有するプロセッサを備え、
前記プロセッサは、
新規ロードのオペレーション命令が、プロデューサー（Ｐ）ロード、コンシューマー転送（Ｆ）ロード、およびコンシューマー再利用（Ｃ）ロードのうちいずれか１つであるか否かを判断し、
前記新規ロードがＰロードであると判断されると、前記新規ロードを前記キャッシュに指示して、前記新規ロードに関連する値を前記第１のメモリに格納し、
前記新規ロードがＣロードであると判断されると、前記新規ロードを前記第１のメモリに指示して、前記キャッシュをバイパスさせ、
前記新規ロードがＦロードであると判断されると、前記新規ロードを前記第２のメモリに指示して、前記キャッシュをバイパスさせる装置。
【請求項１７】
前記プロセッサは、
前記新規ロードがハイブリッド（Ｑ）ロードであると判断し、
最初に前記キャッシュをバイパスさせて前記新規ロードを前記第１のメモリに指示し、後に、前記新規ロードが前記第１のメモリで満たされない場合に前記新規ロードに対応するデータを前記キャッシュに指示する
請求項１６に記載の装置。
【請求項１８】
前記プロセッサは、前記新規ロードに対応する識別子に基づいて前記新規ロードがＣロードであるか否かを判断し、前記識別子は、別のロードがＰロードであったとの判断結果に基づいて既に決定されているものである請求項１６に記載の装置。
【請求項１９】
前記プロセッサは、前記新規ロードに対応する識別子に基づいて前記新規ロードがＣロードであるか否かを判断し、前記識別子は、ロード値バッファを含む前記第１のメモリのエミュレートに応じて既に決定されているものである請求項１８に記載の装置。
【請求項２０】
前記プロセッサは、前記新規ロードに対応する識別子に基づいて前記新規ロードがＣロードであるか否かを判断し、前記識別子は、コードループに含まれているＱロードに応じて既に決定されているものである請求項１６に記載の装置。
【発明の詳細な説明】
【背景技術】
【０００１】
ロードオペレーションは、キャッシュまたはその他のメモリデバイス等のメモリから値をロードするための任意の命令、オペレーション、または、マイクロオペレーションを含むものであってよい。一部のプロセッサによると、ロードは、適切なタイミングでデータにアクセスする目的で、ストアバッファ（ＳＢ）および第１のレベルのデータキャッシュを同時に検索するとしてよい。しかし、ロードがＳＢでヒットする場合（例えば、ＳＢにあるデータでロードの要求が満たされ、当該データはキャッシュに書き込む必要がある場合）、キャッシュへのアクセスは不要であって、キャッシュにアクセスする際の消費電力が浪費されていた。
【０００２】
データに適切なタイミングでアクセスしつつも上記のような電力の浪費を避けるべく、幾つかの方法が利用され得る。第一の方法として、プロセッサがアクセスをシリアライズして、最初にＳＢを検索した後でデータキャッシュを検索する方法がある。しかし、当該方法によると、ＳＢミスが発生すると時間性能が低下してしまう可能性がある。第二の方法として、ハードウェア予測部を用いてキャッシュアクセスを必要としないロードを特定することによって、キャッシュアクセス数を減らして電力を節約する方法が考えられ得る。しかし、ハードウェア予測部を利用すると、消費電力が増大してしまう場合がある。
【図面の簡単な説明】
【０００３】
本発明の実施形態の特徴および利点は、特許請求の範囲、以下に記載する１以上の実施形態例の詳細な説明、および、対応する図面を参照することによって明らかとなる。図面は以下の通りである。
【図１】本発明の実施形態に係るプロセッサを示す図である。
【図２】ロードオペレーションを高い電力効率および時間効率で処理するロジックおよびメモリを備える実施形態を示す図である。
【図３】本発明の実施形態においてロードオペレーションを高効率で処理する方法を説明するためのフローチャートである。
【図４Ａ】ロードオペレーションを高効率で処理する方法の擬似コードの実施形態を示す図である。
【図４Ｂ】ロードオペレーションを高効率で処理する方法の擬似コードの実施形態を示す図である。
【図５】ロードオペレーションを高効率で処理するべくコードを最適化する方法の擬似コードの実施形態を示す図である。
【図６】ロードオペレーションを高効率で処理するべくコードを最適化する方法の擬似コードの実施形態を示す図である。
【発明を実施するための形態】
【０００４】
以下の説明では、具体的なプロセッサアーキテクチャ、プレフィックス値、ロードの種類、データブロックおよび対応するバッファのサイズ、ロードの種類が異なるコンパイラについての特定方法等の例など、具体的且つ詳細な内容を数多く記載して、本発明の実施形態を深く理解していただきたい。しかし、後述する具体的且つ詳細な内容は、本発明の実施形態を実施する上で必ずしも利用される必要はない。例えば、コンパイラ構成、具体的なコンパイル方法、具体的なロジック実装、および、その他の具体的な処理に関する詳細な内容などに関する構成要素または方法は、本発明の実施形態の説明が不必要にあいまいとなることを避けるべく、詳細な説明を省略している。「一実施形態」、「実施形態」、「実施形態例」、「さまざまな実施形態」等の記載は、本発明の当該実施形態が特定の特徴、構造、または特性を含むが、全ての実施形態が必ずしも同じ特徴、構造、または特性を含むとは限らないことを意味している。また、一部の実施形態は、他の実施形態と関連付けて説明された特徴のうち一部または全てを含むとしてもよいし、他の実施形態の特徴は一切含まないとしてもよい。さらに、明示していない限り、「第１」、「第２」、「第３」等を付けて共通のものを説明する場合、複数の同様のものについて個別に言及しているに過ぎず、時間的、空間的、序列的、またはその他の任意の観点から所与の順序に並んでいなければならないことを意味するものではない。また、２つ以上の部材が「接続」されている場合、互いに協働または相互作用することを意味しているが、物理的または電気的に直接接触しているとしてもよいし、直接接触していないとしてもよい。
【０００５】
本発明のさまざまな実施形態は、高い電力効率および時間効率でロードを処理する方法および装置に関する。本発明の一実施形態によると、コンパイラまたはその他のコードが、プロデューサーロード、コンシューマー再利用ロード、コンシューマー転送ロード、および、プロデューサー／コンシューマーハイブリッドロードを特定するとしてよい。このように特定した結果に基づき、当該ロードの実行は効率良く、ロード値バッファ（ＬＶＢ）、ＳＢ（ストア転送バッファ（ＳＦＢ）としても知られる）、データキャッシュ、または、その他に指示されるとしてよい。このような構成とすることによって、ＬＶＢおよびＳＢとの間で直接ロードを行うことによって、ロード性能を犠牲にすることなく、キャッシュへのアクセスを低減する。
【０００６】
図１は、高い電力効率および時間効率でロードを処理することが可能な、複数の処理要素を備えるプロセッサ１００の実施形態を示す図である。処理要素とは、予約ユニット、実行ユニット、パイプライン、および／または、高レベルのキャッシュ／メモリ等のプロセッサリソースを利用するスレッド、プロセス、コンテキスト、論理プロセッサ、ハードウェアスレッド、コア、および／または、任意の処理要素を意味する。プロセッサは、コアまたはハードウェアスレッド等、他の処理要素を有する集積回路（ＩＣ）を備えるとしてよい。コアは、独立したアーキテクチャ状態を維持可能なＩＣ上に配置されているロジックを含むとしてよい。尚、独立して維持されるアーキテクチャ状態はそれぞれが、専用の実行リソースと対応付けられている。これとは対照的に、ハードウェアスレッドは、独立したアーキテクチャ状態を維持可能なＩＣ上に配置されているロジックを含むとしてよく、独立して維持されるアーキテクチャ状態は、実行リソースに対するアクセスを共有する。プロセッサ１００は、投機的なアウトオブオーダ型のマイクロプロセッサアーキテクチャを備えるとしてよいが、本発明の実施形態は、これに限定されることなく、任意のプロセッサシステムによって、例えば、インオーダプロセッサシステムによって実装されるとしてよい。
【０００７】
プロセッサ１００は、高レベルキャッシュ１１０に対するアクセスを共有するコア１０１および１０２を備える。コア１０１は、ハードウェアスレッド１０１ａ、１０１ｂを有し、コア１０２は、ハードウェアスレッド１０２ａ、１０２ｂを有する。ソフトウェアエンティティ（例えば、オペレーティングシステム）は、プロセッサ１００を、４つのソフトウェアスレッドを実行可能な４つの別個のプロセッサと見なすとしてよい。４つのスレッドはそれぞれ、アーキテクチャ状態レジスタ１０１ａ、１０１ｂ、１０２ａ、および、１０２ｂと対応付けられているとしてよい。プロセッサ１００のコアは、非対称であるとしてもよいし（つまり、コア間で、設定、機能ユニット、および／または、ロジックが異なる）、図示されているように対称的であってもよい。このため、コア１０１と同一なものとして図示されているコア１０２の詳細な説明は省略する。
【０００８】
アーキテクチャ状態レジスタ１０１ａはアーキテクチャ状態レジスタ１０１ｂに複製が生成されるので、論理プロセッサ１０１ａおよび論理プロセッサ１０１ｂについて、個々のアーキテクチャ状態／コンテキストを格納することが可能となる。その他のより小規模のリソース、例えば、名称変更割り当てロジック１３０の名称変更ロジックおよび命令ポインタもまた、スレッド１０１ａおよび１０１ｂについて、複製が生成されるとしてよい。一部のリソース、例えば、リオーダ／退避ユニット１３５のリオーダバッファ、Ｉ−ＴＬＢ１２０、ロードストレージバッファ、ＳＢ、および、待ち行列は、パーティション化によって共有するとしてよい。その他のリソース、例えば、汎用内部レジスタ、ページテーブルベースレジスタ、低レベルデータキャッシュ、および、データ変換バッファ（ＴＬＢ）１５０、実行ユニット１４０、および、アウトオブオーダユニット１３５の一部もまた、共有化されるとしてよい。
【０００９】
バスインターフェースモジュール１０５は、プロセッサ１００の外部のデバイス、例えば、システムメモリ１７５、チップセット、ノースブリッジ、または、その他のＩＣとの間で通信を行うとしてよい。メモリ１７５は、プロセッサ１００専用としてもよいし、システム内のほかのデバイスと共有するとしてもよい。高レベルキャッシュ１１０は、最近フェッチおよび／または処理された要素をキャッシュするとしてよい。「高レベル」とは、実行ユニットからより遠く離れているキャッシュレベルを意味する。高レベルキャッシュ１１０は、第２レベルのデータキャッシュであるとしてよいが、これに限定されず、例えば命令またはトレースキャッシュに含まれるとしてもよい。トレースキャッシュは、最近デコードされたトレースを格納するべく、デコーダ１２５の後に接続されるとしてよい。
【００１０】
モジュール１２０は、実行／取得する分岐を予測する分岐ターゲットバッファと、命令についてのアドレス変換エントリを格納する命令変換バッファ（Ｉ−ＴＬＢ）とを有するとしてよい。プロセッサ１００は、投機的実行、プリフェッチ、および、予測された分岐の投機的実行が可能であるプロセッサとしてよい。
【００１１】
本発明の一実施形態によると、ロードオペレーション等の、メモリにアクセスする機械コード命令は、関連するロードの種類を特定するロード識別子（ＩＤ）またはロード指標のフィールドを含むとしてよい。コンパイラ等のコードは、ロードオペレーションの種類を判断して、ロードＩＤフィールドにロードの種類を指し示す値を含めるとしてよい。コンパイラ等のコードが特定するロードの種類には、プロデューサーロード（Ｐロード）、転送コンシューマーロード（Ｆロード）、再利用コンシューマーロード（Ｃロード）、プロデューサー／コンシューマーハイブリッドロード（Ｑロード）、および、通常ロード（Ｎロード）があるとしてよい。デコードモジュール１２５は、ユニット１２０に接続されており、ユニット１２０からの「フェッチされた要素」およびロードＩＤフィールドをデコードして、ロードオペレーションの種類を特定するとしてよい。この処理については、図２を参照しつつ詳細に後述する。
【００１２】
割当および名称変換ブロック１３０は、命令処理結果を格納するためのリソース（例えば、レジスタファイル）を予約する割当部を含むとしてよい。しかし、スレッド１０１ａおよび１０１ｂは、アウトオブオーダ実行が可能なスレッドであり、割当および名称変換ブロック１３０もまた、命令の実行結果を追跡するべくリオーダバッファ等のリソースを予約する。ユニット１３０は、プログラム／命令参照レジスタをプロセッサ１００の内部のレジスタに名称変更するレジスタ名称変更部を含むとしてよい。リオーダ／退避ユニット１３５は、アウトオブオーダ実行、および、アウトオブオーダ方式で実行された命令のインオーダ退避をサポートするためのコンポーネント（例えば、リオーダバッファ、ロードバッファ、および、ＳＢ）を含むとしてよい。
【００１３】
スケジューラおよび実行ユニットブロック１４０は、実行ユニットに対して命令／オペレーションをスケジューリングするスケジューラユニットを含むとしてよい。命令／オペレーションは、それぞれの種類のアベイラビリティに応じて、実行ユニットに対してスケジューリングされるとしてよい。実行ユニットに対応付けられているレジスタファイルは、情報命令処理結果を格納するべく設けられているとしてよい。実行ユニットの例には、浮動少数点実行ユニット、整数実行ユニット、ジャンプ実行ユニット、ロード実行ユニット、ストア実行ユニット、および、その他の実行ユニットが含まれるとしてよい。図２を参照しつつ詳細に後述するが、ブロック１４０がＳＢおよびＬＶＢをさらに含むとしてよいが、これらのバッファは、本発明のさまざまな実施形態によると、別の箇所に配置されるとしてもよい。
【００１４】
低レベルデータキャッシュおよびデータ変換バッファ（Ｄ−ＴＬＢ）１５０は、実行ユニット１４０に接続されているとしてよい。データキャッシュは、最近利用／処理された要素（例えば、データオペランド）を、ｍｏｄｉｆｉｅｄ（変更）状態、ｅｘｃｌｕｓｉｖｅ（排他）状態、ｓｈａｒｅｄ（共有）状態、および、ｉｎｖａｌｉｄ（無効）状態（ＭＥＳＩ）といったメモリコヒーレンシ状態で格納するとしてよい。Ｄ−ＴＬＢは、最近の仮想／線形アドレス−物理アドレスの変換を格納するとしてよい。プロセッサは、物理メモリを複数の仮想ページに分割するためのページテーブル構造を持つとしてよい。
【００１５】
図２は、ロード処理中に性能を維持しつつ電力を節約するべくロードの種類を特定する本発明の実施形態を説明するための図である。例えば、コンパイラ（および、同様のコード、本発明の実施形態はコンパイラと共に利用することに限定されない）は、コンパイル中、コードを最適化して、コード／スライスを並び替えて、特定のハードウェアがサポートしている特徴を利用するべくオペレーション／命令を挿入するとしてよい。他のコードを分析し、制御フロー、依存関係を決定し、または、オペレーション、関数、関数呼び出し、および、その他の実行構文等のソフトウェア構文を追加で挿入するコンパイラまたは同様のコードであればどのような方法であっても、以下に説明するようにロードを判断および特定するために利用し得る。また、ロードの種類を特定する方法を説明するために一例としてコンパイラを挙げているが、他のコード（例えば、インタプリタ、パーサ、インタプリタ、バイナリトランスレータ等）を利用して、以下に説明するように、ロードを処理するとしてよい。
【００１６】
＜Ｐロード、Ｃロード、Ｆロード、Ｑロード、およびＮロード＞
一実施形態によると、ロードはＰロード、Ｃロード、Ｆロード、Ｑロード、および／または、Ｎロードに分類される。繰り返しになるが、ロードオペレーションは、キャッシュまたはその他のメモリデバイス等のメモリから値をロードするための任意の命令、オペレーション、または、マイクロオペレーションを含むものであってよい。ロードオペレーションは、命令の一部であってよい。命令群は、複数のマイクロオペレーションにデコードされる命令を含むとしてよい。１つのマイクロオペレーションがロードオペレーションであって、ロードされた値は、他の命令に関連するマイクロオペレーションに誘導されてさらに処理されるとしてよい。
【００１７】
コンシューマーロードは、先行するストアオペレーションおよび／またはロードオペレーションの値を利用する。コンシューマーロードは、コンシューマー再利用ロード（Ｃロード）およびコンシューマー転送ロード（Ｆロード）に分けられ、それぞれ、先行ロードからロードするロードおよび先行するインフライトストアからロードするロードに対応するとしてよい。
【００１８】
Ｃロードは、プロデューサーロード（Ｐロード）等の先行ロードの対象である、または、先行ロードに含まれているデータブロックと同じデータブロックをロードするロードオペレーションを含むとしてよい。また、Ｃロードは、先行ロードでロードされたデータブロックからのロード、および、先行ロードで先にロードされた次のデータブロックからのロードを含むとしてよい。例えば、先行ロードでは、参照されたデータブロックＡのロードを実行して、さらに３つのデータブロックＢ、Ｃ、および、Ｄをロードするとしてよい。先行ロードが参照したデータブロックは、データブロックＡ、Ｂ、Ｃ、および、Ｄを含む。Ｃロードは、ブロックＡおよび／またはブロックＢ、Ｃ、およびＤのうち１つをロードする後続ロードであってよい。Ｐロードは、ブロックＡ、Ｂ、Ｃ、およびＤのロードを実行する、この先行ロードを含む。
【００１９】
Ｆロードは、Ｃロードと同様のロードであるが、例えば、Ｐロードが予測してロードしたデータに代えて、先行するインフライト・ストアオペレーションで書き込まれるデータブロックをロードするロードであってよい。例えば、ストアオペレーションは、ロードされるべき最新値（つまり、有効且つ正しい値）である、ロケーション用の新しいデータブロックと共にＳＢにおいてインフライトであるとしてよい。この結果、ロードオペレーションがインフライトストアからロードする場合、このロードオペレーションはコンシューマー転送ロード（Ｆロード）と呼ばれることが多い。
【００２０】
Ｑロードは、Ｐ／Ｃハイブリッドロードの形態を含むとしてよい。言い換えると、ある実施形態によると、ＱロードはＰロードおよびＣロードを含む。Ｑロードの一例は、ループ内のロードであってよい。ロードは、ループの実行箇所に応じて、ＰロードおよびＣロードの両方の定義を満たすとしてよい。
【００２１】
＜Ｐロード、Ｃロード、Ｆロード、Ｑロード、およびＮロードの特定＞
一実施形態によると、ＰロードおよびＣロードの対は、１つのＰロードおよび任意の数のＣロードが共に同じアドレスを参照していることに基づいて判断するとしてよい（つまり、ＣロードおよびＰロードが同じデータブロックをロードする予定である）。また、ＰロードおよびＣロードの対は、ロードアドレスが近接していることによって特定されるとしてもよい。例えば、後続のロードが先行ロードのＣロードであると判断されるのは、後続のロードによってロードされるデータブロックが先行ロードによってロードされるべきデータブロックと所与の範囲内で近接している場合であるとしてよい。
【００２２】
再度図２を参照して説明すると、ある実施形態では、キャッシュ２１５が６４バイトのキャッシュラインから成るとしてよい。各キャッシュラインは、８バイトの読出可能データブロック（例えば、エントリ２１６ａから２１６ｈ）を８個利用してデータを保持する。ロード値バッファ（ＬＶＢ）２２５は、３２バイトのライン（例えば、エントリ２２６）から成るとしてよい。各ラインは、８バイトのブロックを４つ用いてデータを保持する。このため、キャッシュライン２１６からロードすると、３２バイトまでがＬＶＢ２２５のエントリ２２６に保持され得る。第１のロードオペレーションがデータブロック２１６ｅを参照している場合、２１６ｅに隣接するいずれかの３つのデータブロック（例えば、２１６ｆ−ｈまたは２１６ｂ−ｄ）もまたロードしてロードエントリ２２６（３２バイト）に入れるとしてよい。図示されているように、データブロック２１６ｅに対する第１のロードオペレーションを実行すると、網掛けしているデータブロック２１６ｅ−ｈが予測ロードされる。このため、データブロック２１６ｅ−ｈをロードするための後続のロードが発生すると、データブロック２１６ｅ−ｈはＬＶＢ２２５に保持されており、Ｃロードと特定されて、Ｐロードである第１のロードと対になるとしてよい。ＬＶＢ２２５は、ＦＩＦＯ形式で編成されているとしてよい。
【００２３】
上記の例では、１つのデータブロックおよび当該データブロックに一方向に連続している複数のデータブロックをロードする場合について、予測ロードを説明している。しかし、ロードするデータブロックの方向は任意としてよく、例えば、ロードされるべきブロック２１６ｅの前の複数のブロック（例えば、２１６ｂ−２１６ｅ）またはロードされるべきブロック２１６ｅの前後の複数のブロック（例えば、２１６ｃ−ｆ）であるとしてもよい。方向は事前に定められるとしてもよい。参照されたブロック、ならびに、後続および隣接する複数のブロックをロードするとしてもよいが、これに代えて、方向は、コンパイラによって挿入されてハードウェアによって認識されるとしてもよい。
【００２４】
一実施形態によると、ＰロードおよびＣロードの対は、上述した基準以外の基準を用いて特定するとしてもよい。例えば、介在するロードオペレーションの数、同じコードセグメント内に含まれているか否か、および／または、ロード値バッファのエントリの数を基準としてもよい。介在するロードオペレーションの数に基づきＰロードおよびＣロードの対を特定する場合を説明すると、ＬＶＢ２２５を構成するエントリは１６個であるとしてよい。このため、バッファ２２５に入れ得るロードエントリの最大数は１６個であり、これを超えると一部のエントリを追放または上書きすることになる。このため、最初のＰロードと、当該最初のＰロードと同じデータブロックを参照する後続のロードとの間に特定されたＰロードが１６個あれば、この後続のロードは、最初のＰロードと対を成すＣロードとは特定されない。これは、Ｐロードに対応付けられているデータがもうバッファ２２５にはないためである。このため、本発明の一部の実施形態によると、ロードは、対応するＣロードがなくてもＰロードと予備的に特定され得る。これは、例えば、後続のロードがＬＶＢからロードする前にＰロードがＬＶＢから追放されるためである。
【００２５】
一実施形態によると、コンパイラは、Ｆロードを決定して対をストアするとしてよい。先行するストアオペレーションで書き込まれるべきアドレスからロードする後続のロードが、Ｆロードと特定されるとしてよい。Ｆロードオペレーションがインフライトストアからロードする場合、ストアおよびロードのアドレスを衝突アドレスと呼ぶとしてよい。コンパイラは、さらに別の基準を用いてＦロードを特定するとしてよく、例えば、ストアおよびロードのアドレスが一致する対、ストアのサイズ、ロードのサイズ、ストアおよびロードが同じコードスライスにあるか否か、および、ターゲットストアとロードとの間に介在するストアの数を用いるとしてよい。
【００２６】
一実施形態によると、Ｑロードは、ＰロードおよびＣロード両方の基準を満たすロードと判断されるとしてよい。例えば、Ｑロードは、読み出すデータブロックが後に同じロードによって参照されるロードを含む。Ｑロードの特定については後述する。Ｎロードに関して説明すると、一実施形態によると、コンパイラは、ロードをＰロード、Ｃロード、Ｆロード、または、Ｑロードのいずれとも特定しない場合、通常通りキャッシュ２１５から実行されるべきＮロードと特定する。
【００２７】
図４Ａおよび図４Ｂは、本発明の一実施形態に係る、Ｐロード、Ｃロード、Ｆロード、Ｑロード、および、Ｎロードを特定する多段階の方法を利用する擬似コードを示す。本発明の実施形態においてロードを分析する際のフェーズの数はさまざまに異なるが、図４Ａおよび図４Ｂに示す実施形態は２段階の分析方法に関するものである。図４Ａは第１フェーズを示し、図４Ｂは第２フェーズを示す。第１フェーズにおいては通常、コンパイラが、例えば、抽象化技術を用いてＳＢ２２０およびＬＶＢ２２５をモデル化またはエミュレートして、バッファを表現するためのデータ構造を決定するとしてよい。コンパイラは、エミュレーションに基づいて、ロードがＦロード、Ｐロード、Ｃロード、Ｑロード、または、Ｎロードである可能性を推定するとしてよい。具体的には、コンパイラは、ＳＢ２２０およびＬＶＢ２２５、ならびに、ターゲットコード内に存在するロードをエミュレートして、ロードをＦロード、Ｐロード、Ｃロード、および／または、Ｑロードとマーキングするとしてよい。一実施形態によると、コンパイラは、第１フェーズにおいてＦロードおよびＰロードをマーキングして、第２フェーズにおいてＣロードおよびＱロードをマーキングする。マーキングを複数の別個のフェーズに分割するのは、例えば、ＣロードはＰロードに応じて変わるので、Ｃロードを特定するのはＰロードを特定した後の方が容易になるためである。動的バイナリトランスレータを利用する実施形態によると、第１フェーズおよび第２フェーズは、ソフトウェアのパイプライン方式で実行され、第２フェーズは第１フェーズの結果を用いて動的に行われるとしてよい。
【００２８】
各フェーズは、収集ステップおよび分類ステップを含むとしてよい。図４Ａおよび図４Ｂは共に、この２つの段階を含む。図４Ａに示すフェーズ１は、Ｃｏｌｌｅｃｔ＿Ｐｈａｓｅ＿ＩおよびＣｌａｓｓｉｆｙ＿Ａ＿Ｌｏａｄ＿Ｐｈａｓｅ＿Ｉ（ｐ，ｃ，ｆ）を含む。収集ステップは、全てのロードを収集またはカウントして（ｃｏｕｎｔ＿ａｌｌ＿ｌｏａｄｓ＋＋）、例えば、メモリアドレスを確認することによって（例えば、ｉｓＨｉｔＬＶＢ  ｍ）、Ｆロード、Ｃロード、および、Ｐロードをカウントする（ｃｏｕｎｔ＿Ｆ＿ｌｏａｄｓ＋＋，ｃｏｕｎｔ_Ｃ＿ｌｏａｄｓ＋＋，ｃｏｕｎｔ＿Ｐ＿ｌｏａｄｓ＋＋）。ＦロードのカウントおよびＰロードのカウントを全ロードカウントで除算することによって、コンパイラは、ロードがＦロードである可能性、または、ロードがＰロードである可能性を算出または推定することができる。ある実施形態によると、ＳＢおよびＬＶＢのモデル化を行うのは、収集ステップのみである。分類ステップでは、例えば、所定のしきい値に基づいて、ロードをＦロードとマーキングするか、Ｐロードとマーキングするかを判断する。実施形態によると、ロードがＦロードである可能性が所定のしきい値よりも大きい場合、当該ロードはＦロードとマーキングされる。ある実施形態によると、Ｐロードは、Ｐロードのカウントが０より大きいか否か、および、ＰロードのカウントおよびＣロードのカウントの合計が所定のしきい値よりも大きいか否かに基づいて、予備的に判断されるとしてよい。他の実施形態は、上記の特定の方法に限定されない。
【００２９】
図４Ｂに示すフェーズ２は、Ｃｏｌｌｅｃｔ＿Ｐｈａｓｅ＿ＩＩおよびＣｌａｓｓｉｆｙ＿Ａ＿Ｌｏａｄ＿Ｐｈａｓｅ＿ＩI（ｐ，ｃ，ｆ）を含む。収集ステップは、第１フェーズからＦロードおよびＰロードに関する結果を受け取り（例えば、ｃｏｕｎｔ＿Ｆ＿ｌｏａｄｓ＋＋、ｃｏｕｎｔ＿Ｐ＿ｌｏａｄｓ＋＋）、ＣロードおよびＱロードのマーキングに進むとしてよい。この時点において、Ｃロードのカウントは、第１フェーズで決定する場合（例えば、Ｐロードか否かを最初に判断する前、または、それと同時）よりも高い精度で決定し得る。例えば、Ｐロードはまず、当該ロードが本当にＰロードであるか否かを予備的に推定することによって、特定されるとしてよい。後に、後続のロードがＬＶＢヒットすれば、この後続のロードはＣロードと見なされ、Ｐロードであるという予備の推定結果が確認されるとしてよい。しかし、Ｐロードが予備的に特定されていたとしても、Ｐロードに対応付けられているＬＶＢのデータブロックに後続のロードがアクセスする前に、ＬＶＢの格納内容が置き換わっている／追放されている場合があり得る。この場合、予備的にＰロードと判断されたロードは、この時点において、関連するＣロードが無いＮロードと見なされるとしてよい。このため、第１フェーズにおいてＰロードを予備的に特定して、続く第２フェーズにおいてＣロードを特定する（そして、Ｐロードに関する予備的な推定結果を確認する）方がより正確である。これは、適切にマーキングするためにはＰロードとの判断結果が必要なＱロードについても同じである。
【００３０】
図４Ｂに示す分類ステップでは、例えば、所定のしきい値に基づき、ロードＣとマーキングするか、または、Ｑロードとマーキングするかを判断する。一実施形態によると、Ｐロードの対応するしきい値基準は、フェーズ１（例えば、（ｐ＋ｃ）＞ＰＬｏａｄＴｈｒｅｓｈｏｌｄ＆＆ｐ＞０．０）とフェーズ２（例えば、ｐ＞ＰＬｏａｄＴｈｒｅｓｈｏｌｄ）では異なる。つまり、本発明の一実施形態によると、フェーズＩでＰロードに関して予備的な推定または判断を行って、フェーズＩＩでＰロードに関する推定または判断の高精度化する。このようにしきい値を変化させることは、対象となるロードをＰロードと特定するのはフェーズＩＩよりもフェーズＩの方がより困難であるので、有益であるとしてよい。このようにフェーズＩＩよりもフェーズＩの方が特定が難しいのは、例えば、ＬＶＢのターゲットロードが再度利用される（ターゲットロードはＰロードとなる）可能性もあり、利用されない（ターゲットロードはＰロード以外となる）可能性もあるためとしてよい。このため、フェーズＩＩよりもフェーズＩにおいて、Ｐロードの比較対象となるしきい値を慎重且つ予備的に低くする。例えば、フェーズＩでは（Ｐ＋Ｃ）基準を用いて、ロードがＰロードまたはＱロードである可能性を考慮する、ロードを予備的にＰロードと判断する。このように、分析の初期（フェーズＩ）では、ロードがＰロードかＱロードかを考慮して、これら２種類のロードについては明瞭に識別しない。しかし、分析の後期（フェーズＩＩ）では、最終判断を下して、ＱロードおよびＣロードをより容易に特定する。このため、ＣロードおよびＱロードを特定する能力はフェーズＩＩにおいて高くなるので、Ｐロードの分類は、比較対象となるしきい値が高くなることによって、（フェーズＩに対して）フェーズＩＩのほうがより厳しくなるとしてよい。また、ＣロードおよびＰロード両方の要件を満たしている（例えば、（ｐ＋ｃ）＞ＱＴｈｒｅｓｈｏｌｄ＆＆ｐ＞０．０）と思えるロードに基づいてＱロードと判断するとしてよい。本発明のほかの実施形態によると、Ｐロードと判断する基準は必ずしも、分析のフェーズに応じて変わるとは限らない。
【００３１】
本発明の一実施形態によると、「先読みウィンドウ」等のソフトウェア構造を利用するとしてよい。例えば、プロファイラは、分析するロード毎に、最初の推定でターゲットロードがＰロードであったか否かに基づいて、当該ロードを予備的にＰロードとマーキングできるか否かを判断する場合、「先読みウィンドウ」に相談して、問題のＰロードに対応するＣロードの数が幾つかを判断するとしてよい。プロファイラはこの後、この判断結果に基づいて、ロードをＰロードとマーキングすることが効率の面から有益であるか否かを判断するとしてよい。（例えば、関連するＣロードの数が少ないので）効率面での効果が大きくない場合、当該ロードはＰロードとはマーキングされる（つまり、Ｐロードと確認される）ことはなく、Ｎロードとされる。
【００３２】
＜コンパイラ最適化＞
図５は、本発明の一実施形態においてロードのマーキングを改善するためのコンパイラ最適化の方法を示す。領域５０１は元々のコードを示し、領域５０２は最適化されたコードを示す。ロードを先行または後続のブロックに移動させることによって、例えば、１つのロードが複製されるので、当該ロードのバッファ格納可能性が改善されるとしてよい。例えば、ライン１（１：Ｌｏａｄ  Ｘ）をＣロードまたはＰロードとマーキングすることは、ライン２が条件付きである（２：ｉｆ（・・・）Ｌｏａｄ  Ｘ）ために、難しい。ロード１（１：Ｌｏａｄ  Ｘ）は、Ｐロードとマーキングされると、ライン３で無効化される（３：Ｓｔｏｒｅ  Ｘ）前に、使用されない場合がある。しかし、ロード１をＰロードとマーキングされない場合には、（例えば、Ｐロードと判断されたものが無いので）ロード２をＣロードとマーキングする可能性はなくなる場合がある。しかし、コードの移動および複製によって、ロード１またはライン１は複製されて（領域５０２を参照のこと）、ロード１．１（１．１：Ｌｏａｄ  Ｘ）およびロード１．２（１．２：Ｌｏａｄ  Ｘ）が得られるとしてよい。このように修正されたコードには、元々のコードに含まれていた条件付き分岐からの分岐が両方とも含まれている。一方の分岐は、Ｌｏａｄ  Ｘコマンドを繰り返すこと（１．１および２）を含み、ＰロードおよびＣロードが存在することを示している。他方の分岐は（１．２および３）は、Ｌｏａｄ  Ｘには追跡ロードがなく（Ｃロードがなく）単にＮロードであることを示している。
【００３３】
図６も同様に、本発明の一実施形態においてロードのマーキングを改善するためのコンパイラ最適化の方法を示す。領域６０１は元々のコードを示し、領域６０２は最適化されたコードを示す。ループ内のロードは、ＰロードまたはＣロードであってよい。このため、一実施形態によると、これらのロードはＱロードとマーキングされるとしてよい。しかし、一実施形態によると、Ｑロードは、ＬＶＢにロードが既に存在するか否かを確認するためにまずＬＶＢを検索する必要があるので、Ｐロードよりもオーバーヘッドが多いとしてよい。これに代えて、Ｐロードは、ＬＶＢを確認することなく、直接ＤＣＵに送られるとしてもよい。このように、一実施形態によると、ループ・ピーリング（Ｌｏｏｐ  Ｐｅｅｌｉｎｇ）を用いて、１以上のＱロードをＰロードおよびＣロードに分化または分割するとしてよい。具体的に説明すると、修正後のコード（領域６０２）において、ライン１．０（１．０：Ｌｏａｄ  Ｘ）は、ｉ＝０という条件についてループから分離された（ピーリング）されたものである。残りのループは、例えば、ｉ＝１から開始される。しかし、ライン１．０からのピーリングのために、この時点においては、Ｐロード（ライン１．０）とＣロード（ライン２）とを区別すると共にＰロードおよびＣロードを特定するコンテキストがある。
【００３４】
さらに、特定結果を修正するべくコンパイラを調節するとしてよい。例えば、積極的なコンパイラは、先行するストアと同じアドレスからロードする後続のロードを、Ｆロードと特定するとしてよい。しかし、慎重なコンパイラは、Ｆロードと特定するのは、同じアドレスを参照しているストアとサイズが同じであるロードか、または、そのストアよりもサイズが大きいロードのみであり、該ストアと該ロードとの間にはストアオペレーションが介在していない場合のみであるとしてよい。また、先行するストアとコンシューマー転送ロードとの間には、所定数のストアがあるとしてもよい。例えば、コンパイラの積極性のレベルに応じて、介在するストアの数を０から最大ＳＢエントリ数までの許容範囲内で設定するとしてよい。ストアの数がこの範囲を超えている場合、積極性のレベルが低いコンパイラではターゲットロードをＦロードと特定できなくなるとしてよい。
【００３５】
一実施形態によると、コンシューマーロードを判断する際に用いられる判断基準の数（例えば、コンシューマーロードと特定することについて、コンパイラはどの程度慎重か）は、正確に特定されるコンシューマーロードの目標割合に応じて決まる。例えば、先行するストアと同じアドレスの後続のロードが全てコンシューマーロードと特定される場合、データをロードする必要がある場合に、該ストアはＳＢ２２０から割り当てを解除されるとしてよく、特定精度は低くなる。特定精度が低くなりすぎると、再実行の数が多くなる可能性があり、実行サイクルが必要となる。これに代えて、制約が多くなりすぎると、特定精度は非常に高くなるが、真のコンシューマーロードを特定しないというプラスの効果（例えば、省電力）は小さくなる可能性がある。全くの例に過ぎないが、キャッシュ２１５へのアクセスを無くして、間違って特定されたロードを再実行するための実行サイクルの数を低減することによって、より多くの正しい実行サイクルを確実に確保するべく、８０％から１００％の特定精度を目標にするとしてよい。
【００３６】
＜特定されたＰロード、Ｃロード、Ｆロード、Ｑロード、および、Ｎロードの処理＞
図２を再び参照して、さまざまなロードを処理する実施形態について以下でより詳細に説明する。ロードオペレーション２０５の一部分２０６（ロード種類フィールド）によって、ロードオペレーション２０５の種類が特定される。一部分２０６は、ロードオペレーション２０５内でどこに配置されるとしてもよいし、または、ロードオペレーション２０５とどのような方法で対応付けられるとしてもよい。一実施形態によると、一部分２０６は、ロードオペレーション２０５のプレフィックスバイトを含むか、または、プレフィックスバイトに含まれる。その他の情報、例えば、オペレーションコードおよび参照されるアドレスは、ロードオペレーション２０５の別の部分２０７に含まれるとしてよい。部分２０６の３ビットは、ロードオペレーション２０５の種類を表すために利用されるとしてよい。このバイナリ値によって、ロードオペレーション２０５がＮロード（０００）、Ｐロード（００１）、Ｃロード（０１０）、Ｆロード（０１１）、または、Ｑロード（１００）であることが示されるとしてよい。Ｎロードのマーキングは必ずしも必要でないとしてよい。
【００３７】
選択モジュール２１０は、ロードの実行を、正しいメモリ構造（例えば、キャッシュ２１５、ＳＢ２２０、ＬＶＢ２２５）に指示するとしてよい。選択モジュール２１０は、ロードオペレーション２０５または少なくとも部分２０６を受け取って、どのメモリ構造がロードオペレーションを実行するか判断するとしてよい。デコードロジック（図１のデコード１２５）は、命令をデコードするデコードロジックと同じでもよいし、別個のデコードロジックであってもよいが、部分２０６をデコードするとしてよい。デコードロジックは、部分２０６のビットにアクセスして、ロードの実行を正しいメモリ構造に指示する選択ロジック（例えば、マルチプレクサ）に当該ビットを供給するとしてよい。ロードの実行を指示するとは、ロードをメモリ構造のうちいずれか１つに転送することを含むとしてよい。選択ロジックは、ロードモジュール２３０等のモジュールに選択信号を供給して、どの構造からロードを行うかを示すとしてよい。選択モジュール２１０は、ロードモジュール２３０と共に、ロード先および／またはロード元のメモリ構造を選択する任意のロジックを含むとしてよい。本発明の一実施形態によると、ＬＶＢ２２５、ＳＢ２２０、選択モジュール２１０、および、ロードモジュール２３０は、モジュール１４０、１４１（図１）に含まれる一方、キャッシュ２１５はキャッシュ１５０、１５１（図１）に配置されるとしてよい。しかし、これらのコンポーネントについて上記のような制約が課される必要は必ずしもなく、どこに配置されるとしてもよい。
【００３８】
上記の内容を例を挙げて説明すると、部分２０６が含むプレフィックス値が、ロードオペレーション２０５がＣロードであることを示す０１０である場合を考える。デコードロジックがこれらのビットをマスクして、選択ロジックは当該ロジックの判断結果に基づいてＬＶＢ２２５からロードすると判断するとしてよい。ロードモジュール２３０は、ロードオペレーション２０５と対応付けられているアドレス値、例えば、タグ値に基づいて、ＬＶＢ２２５を検索するとしてよい。正しいエントリが見つかると（例えば、エントリ２２６）、正しいデスティネーションに供給されるとしてよい（例えば、内部プロセッサレジスタ）。
【００３９】
一実施形態によると、部分２０６が含む値がＰロードであることを示している場合には、キャッシュ２１５からのロードが行われる。キャッシュ２１５には、任意のキャッシュ（例えば、命令キャッシュ、トレースキャッシュ、データキャッシュ、同様に、任意のレベルのキャッシュであってよい）が含まれるとしてよい。Ｐロード用のデータブロック（例えば、参照されているデータブロック）は、キャッシュ２１５からロードされて、複数のデータブロックがさらにロードされるとしてよい。一例を挙げると、ＬＶＢ２２５が保持可能なエントリサイズに対応するデフォルト数または所定数のデータブロックをキャッシュ２１５からロードする。別の実施形態によると、ロードオペレーション２０５には、ロードされるべきデータブロック数、どの方向に並んでいるデータブロックをロードすべきか等を示すフィールドがある。ロードされた値は、正しいデスティネーションに加えて、ＬＶＢにもストアされる。
【００４０】
部分２０６が含む値がＣロードを示している例に戻って説明を続けると、キャッシュ２１５にアクセスすることなくＬＶＢ２２５からのロードを実行するとしてよい。一例を挙げると、ＬＶＢ２２５は、ＰロードまたはＱロードによって先にロードされたデータがあり、複数のエントリを含む。一実施形態によると、ＬＶＢ２２５は、現在のロードを追跡する既存のロードバッファの一部である。別の実施形態では、ＬＶＢ２２５は別個のバッファ構造である。ＬＶＢ２２５が持つエントリ（例えば、エントリ２２６）は、対応付けられているＰロードの値をタグフィールドに持つとしてよい。このため、ＬＶＢ２２５からロードが実行される場合には、タグ値を用いて対応付けられているエントリを検索して正しいエントリを見つけるとしてよい。
【００４１】
例えば、第１のＰロードオペレーションを受信する場合を考える。フィールド２０６の値がＰロード値であることから、キャッシュ２１５からロードするＰロードであると判断される。当該Ｐロードは、キャッシュライン２１６のデータブロック２１６ｅを参照している。このため、ＬＶＢ２２５がエントリ毎に保持することが可能な所定量のデータ（例えば、ブロック２１６ｅ−ｈ）をキャッシュライン２１６からロードモジュール２３０によってロードする。ロードモジュール２３０は、データブロック２１６ｅを正しい外部ロケーション、例えば、アーキテクチャレジスタに供給する。さらに、データブロック２１６ｅ−ｈがＬＶＢ２２５に供給されてＬＶＢのエントリ２２６にストアされる。
【００４２】
続いて、コンパイラによってＣロードと特定されたロードを受信する。尚、Ｃロードはデータブロック２１６ｆを参照している。フィールド２０６の値がＣロード値であることから、ＬＶＢ２２５から読み出すロードオペレーションであると判断される。このため、タグ値を参考にしてＬＶＢ２２５を検索して、データブロック２１６ｆをエントリ２２６からロードモジュール２３０によってロードする。ロードモジュール２３０は、データブロック２１６ｆを正しいデータロケーションに供給する。Ｃロードの実行に際して、キャッシュ２１５へのアクセスを行う必要は必ずしもない。
【００４３】
一実施形態によると、部分２０６が持つ値がＦロードであることを示している場合、ロードはＳＢ２２０から実行される。ＳＢ２２０は、インフライト・ストアオペレーションを追跡する既存のＳＢと同様であってよい。しかし、キャッシュ２１５およびＳＢ２２０を並行して検索する先述の方法とは対照的に、Ｆロードは、キャッシュ２１５にアクセスすることなく、Ｃロードをバッファ２２５からロードするのと同様の方法で、ＳＢ２２０から直接ロードを実行するように指示されるとしてよい。
【００４４】
一実施形態によると、部分２０６が持つ値がＱロードであることを示している場合、ＰロードおよびＣロードと同様にロードを処理する。Ｐロードと同様に、ＬＶＢに値がまだなければ、キャッシュ２１５へのロードおよびキャッシュ２１５からＬＶＢ２２５へのロードを実行する。また、Ｃロードと同様に、ＬＶＢ２２５からのロードを実行する。例えば、プロセッサがＬＶＢ２２５に対してＱロードを発行する。ＬＶＢ２２５でヒットすれば、ＬＶＢ２２５からデータを取得する。ヒットしなければ、キャッシュ２１５に当該ロードを再発行して、Ｐロードと同様に、データをＬＶＢ２２５に渡して今度の利用に備える。
【００４５】
一実施形態によると、ハードウェアがＣロードまたはＦロードを処理する場合、キャッシュ２１５へのアクセスなしに、ＬＶＢ２２５またはＳＢ２２０がアクセスされる。このため、ロードすべきデータがバッファ２２５または２２０に保持されていない場合には、ロードオペレーションはＮロードとして再実行されるとしてよい。
【００４６】
図３は、上述した実施形態の側面を、高効率でロードを処理する方法を説明するためのフローチャートの形で示す図である。ブロック３０５において、ロードオペレーションのプレフィックスバイトに基づきロード種類を判断する。
【００４７】
ブロック３１０において、当該ロードがＰロードであれば、データキャッシュからのロードを、本発明の一部の実施形態では複数のデータブロックを含むロードを実行する。尚、複数のデータブロックのうち少なくとも１つは、Ｐロードを実行する際にロードすべきデータブロックであるが、ほかのデータブロックは、まだ発生していない後続のＣロードによってロードされるべきデータブロックである。Ｐロードでは、所定数の物理データブロックをロードするとしてもよい。所定数とは、ＬＶＢ内のエントリのサイズに対応するとしてよい。ブロック３１５において、データブロックは、ＬＶＢのエントリにストアされる。このためこの時点において、物理的に連続した複数のブロックが、後続のコンシューマーロードによってアクセスされるように、ＬＶＢに保持されることになる。
【００４８】
ブロック３０５に戻って、当該ロードがＣロードであれば、ブロック３２０において、ＬＶＢからロードを実行する。タグ値を参照してＬＶＢを検索するとしてよく、ＬＶＢの正しいエントリを判断するとしてよい。このため、Ｃロードは、データキャッシュにアクセスするための電力を浪費することなく、ＬＶＢから直接実行するとしてよい。
【００４９】
当該ロードがＦロードであれば、ブロック３３０において、ＳＢからロードを実行する。上記と同様に、ＳＢを検索して、適切な値／データブロックをロードする。ＣロードまたはＦロードのエントリがＬＶＢまたはＳＢになければ、当該ロードはＮロードとして再実行され（ブロック３４０）、データキャッシュにアクセスする。一実施形態によると、選択ロジックはトレースキャッシュまたはその他のストレージロジックにある当該オペレーションに対応付けられているプレフィクスバイトを無視して、通常ロードが実行される。これとは対照的に、プレフィクスバイトを通常ロードの値で上書きするとしてよい。このため、当該ロードを再実行するか、または、当該ロードを最初のステップでＮロードと判断するか、どちらでもよいが、ブロック３４０において、当該ロードを通常通りにデータキャッシュから実行する。
【００５０】
当該ロードがＱロードであれば、プロセッサはブロック３２５において、当該ＱロードはＬＶＢからロードされるか否かを判断する。ＬＶＢでヒットすれば、ブロック３２０において、当該ロードをＬＶＢに指示する。ヒットしなければ、ブロック３１０において、当該ロードをＤＣＵに再発行して、Ｐロードと同様にブロック３１５において、データをＬＶＢに指示して今後の利用に備える。
【００５１】
上記から分かるように、本発明の実施形態に係るシステムは、Ｐロード、Ｃロード、Ｆロード、Ｑロード、および／または、Ｎロードを高効率で特定すると共に、電力を節約して高性能を維持しつつロードを処理し得る。ロード種類を特定するためのコード（例えば、コンパイラ）を利用することによって、プロデューサロードおよびコンシューマーロードを動的に特定するための複雑且つ高価なハードウェアロジックを用いずに済むとしてよい。また、ロードを特定する際のアグレッシブネスのレベルの変動に応じてコンパイラを調整して、精度を保証するとしてよい。このため、選択ロジックは、適切なメモリ構造から直接ロードすることができ、特定のケースでは、データキャッシュアクセスを省略できるようになる。
【００５２】
モジュールまたはユニット（例えば、ユニット１３０、１４０、１５０）は、本明細書で用いる場合、任意のハードウェア、ソフトウェア、ファームウェア、または、これらの組み合わせを意味する。別個のものとして図示されている境界は、変わるのが通常であり、重複する可能性もあることが多い。例えば、第１のモジュールおよび第２のモジュールは、ハードウェア、ソフトウェア、ファームウェア、または、これらの組み合わせを共有しているとしてもよいし、独立したハードウェア、ソフトウェア、または、ファームウェアを持つとしてもよい。一実施形態によると、「ロジック」という用語は、たとえば、トランジスタ、レジスタ、またはプログラム可能なロジックデバイス等のハードウェアを含む。しかし、別の実施形態によると、ロジックはさらに、ハードウェアと一体化されたソフトウェアまたはコード、例えば、ファームウェアまたはマイクロコードを含む。
【００５３】
本明細書では、命令、関数、手順、データ構造、アプリケーションプログラム、構成設定、コード等のデータに関連付けて本発明の実施形態を説明し得る。機械は、当該データにアクセスすると、本明細書に詳細に記載したように、タスクの実行、抽象的なデータ種類の定義、低レベルハードウェアコンテクストの構築、および／または、その他の処理の実行等を行うとしてよい。当該データは、揮発性データストレージおよび／または不揮発性データストレージに格納されているとしてよい。本開示では、「コード」または「プログラム」といった用語は、アプリケーション、ドライバ、プロセス、ルーチン、方法、モジュール、および、サブプログラムといった多岐にわたるコンポーネントおよび構文を含む。このため、「コード」または「プログラム」といった用語は、処理システムによって実行されると所望のオペレーションを実行する命令群であればどのようなものを意味するとしてもよい。また、代替的な実施形態は、本明細書に開示した全てのオペレーションの一部を利用するプロセス、さらにオペレーションが追加されるプロセス、同じオペレーションを別の順序で利用するプロセス、および、本明細書に開示される個々のオペレーションを組み合わせた、さらに分割した、または、その他の点で変更したプロセスを含むとしてよい。
【００５４】
実施形態は、コードで実装して、命令を格納する格納媒体に格納するとしてよい。当該命令を用いてシステムをプログラムして、当該命令を実行するとしてよい。格納媒体は、これらに限定されないが、任意の種類のディスク、例えば、フロッピー（登録商標）ディスク、光ディスク、光ディスク、ソリッド・ステート・ドライブ（ＳＳＤ）、コンパクトディスクリードオンリーメモリ（ＣＤ−ＲＯＭ）、コンパクトディスクリライタブル（ＣＤ−ＲＷ）、および光磁気ディスク、リードオンリーメモリ（ＲＯＭ）等の半導体デバイス、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）等のランダムアクセスメモリ（ＲＡＭ）、スタティックランダムアクセスメモリ（ＳＲＡＭ）、消去可能プログラマブルリードオンリーメモリ（ＥＰＲＯＭ）、フラッシュメモリ、電気的消去可能プログラム可能リードオンリーメモリ（ＥＥＰＲＯＭ）、磁気カードまたは光カード、または、電子的に命令を格納するのに適したその他の任意の種類の媒体を含むとしてよい。
【００５５】
限られた数の実施形態を参照しつつ本発明を説明したが、当業者であれば、上記の説明に基づき数多くの変形例および変更例に想到するであろう。そのような変形例および変更例も全て、本発明の真の思想および範囲内に入り、特許請求の範囲に含まれるものとする。
【図１】
2011129103.tif 000003
【図２】
2011129103.tif 000004
【図３】
2011129103.tif 000005
【図４Ａ】
2011129103.tif 000006
【図４Ｂ】
2011129103.tif 000007
【図５】
2011129103.tif 000008
【図６】
2011129103.tif 000009
【手続補正書】
【提出日】平成22年11月24日(2010.11.24)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
メモリに接続されているプロセッサを用いて、新規ロードのオペレーション命令がプロデューサー（Ｐ）ロードである可能性に対応する第１の値および前記新規ロードがコンシューマー再利用（Ｃ）ロードである可能性に対応する第２の値を生成する段階と、
前記第１の値を第１のロード種類しきい値と比較することによって、前記新規ロードがＰロードであるか否かを判断する段階と、
前記新規ロードが関連するメモリ領域と関連している先行ロードがＰロードであるか否かを判断すること、および、前記第２の値を第２のロード種類しきい値と比較することによって、前記新規ロードがＣロードであるか否かを判断する段階と、
前記新規ロードがＰロードおよびＣロードのうちいずれか一方であると判断されると、前記新規ロードの判断結果を示す指標を前記メモリに格納する段階と
を備える方法。
【請求項２】
ロード値バッファをエミュレートすることによって、前記第１の値および前記第２の値を生成する段階を備える請求項１に記載の方法。
【請求項３】
エミュレートされたロード値バッファを前記先行ロードでポピュレートした後に、ポピュレートされた前記ロード値バッファによって前記新規ロードが満たされていると判断することによって、前記新規ロードがＣロードであるか否かを判断する段階を備える請求項１に記載の方法。
【請求項４】
前記第１の値および前記第２の値に基づき、前記新規ロードがＱロードであると判断する段階を備える請求項１に記載の方法。
【請求項５】
前記新規ロードが、コードループに含まれているＱロードであると判断する段階を備える請求項１に記載の方法。
【請求項６】
前記ＱロードをＰロードおよびＣロードに分割する段階を備える請求項５に記載の方法。
【請求項７】
最初に前記先行ロードを複製することに基づき、条件文に含まれている前記新規ロードがＣロードであると判断する段階を備える請求項１に記載の方法。
【請求項８】
前記第１の値および前記第２の値を前記第１のしきい値と比較することによって、前記新規ロードがＰロードであると判断する段階を備える請求項１に記載の方法。
【請求項９】
コンピュータに、
新規ロードのオペレーション命令がプロデューサー（Ｐ）ロードである可能性に対応する第１の値および前記新規ロードがコンシューマー再利用（Ｃ）ロードである可能性に対応する第２の値を生成させ、
前記第１の値を第１のロード種類しきい値と比較することによって、前記新規ロードがＰロードであるか否かを判断させ、
先行ロードがＰロードであるか否かを判断すること、および、前記第２の値を第２のロード種類しきい値と比較することによって、前記新規ロードがＣロードであるか否かを判断させるためのプログラム。
【請求項１０】
前記コンピュータにさらに、
エミュレートされたロード値バッファを前記先行ロードでポピュレートした後に、ポピュレートされた前記ロード値バッファによって前記新規ロードが満たされていると判断することによって、前記新規ロードがＣロードであるか否かを判断させる請求項９に記載のプログラム。
【請求項１１】
前記コンピュータにさらに、
前記第１の値および前記第２の値に基づき、前記新規ロードがＱロードであると判断させる請求項９に記載のプログラム。
【請求項１２】
前記コンピュータにさらに、
前記新規ロードが、コードループに含まれているＱロードであると判断させる請求項９に記載のプログラム。
【請求項１３】
前記コンピュータにさらに、
ＱロードをＰロードおよびＣロードに分割させ、
前記Ｑロードは最初はコードループに含まれており、前記Ｐロードおよび前記Ｃロードは１つのメモリアドレスに関連する請求項９に記載のプログラム。
【請求項１４】
前記コンピュータにさらに、
最初に前記先行ロードを複製することに基づき、条件文に含まれている前記新規ロードがＣロードであるか否かを判断させる請求項９に記載のプログラム。
【請求項１５】
前記コンピュータにさらに、
前記第１の値および前記第２の値を前記第１のしきい値と比較することによって、前記新規ロードがＰロードであるか否かを予備的に判断させて、後に、前記第２の値ではなく前記第１の値を前記第１のしきい値と比較することによって、前記新規ロードがＰロードであることを確認させる請求項９に記載のプログラム。
【請求項１６】
第１のメモリおよび第２のメモリと、キャッシュとを有するプロセッサを備え、
前記プロセッサは、
新規ロードのオペレーション命令が、プロデューサー（Ｐ）ロード、コンシューマー転送（Ｆ）ロード、およびコンシューマー再利用（Ｃ）ロードのうちいずれか１つであるか否かを判断し、
前記新規ロードがＰロードであると判断されると、前記新規ロードを前記キャッシュに指示して、前記新規ロードに関連する値を前記第１のメモリに格納し、
前記新規ロードがＣロードであると判断されると、前記新規ロードを前記第１のメモリに指示して、前記キャッシュをバイパスさせ、
前記新規ロードがＦロードであると判断されると、前記新規ロードを前記第２のメモリに指示して、前記キャッシュをバイパスさせる装置。
【請求項１７】
前記プロセッサは、
前記新規ロードがハイブリッド（Ｑ）ロードであると判断し、
最初に前記キャッシュをバイパスさせて前記新規ロードを前記第１のメモリに指示し、後に、前記新規ロードが前記第１のメモリで満たされない場合に前記新規ロードに対応するデータを前記キャッシュに指示する
請求項１６に記載の装置。
【請求項１８】
前記プロセッサは、前記新規ロードに対応する識別子に基づいて前記新規ロードがＣロードであるか否かを判断し、前記識別子は、別のロードがＰロードであったとの判断結果に基づいて既に決定されているものである請求項１６に記載の装置。
【請求項１９】
前記プロセッサは、前記新規ロードに対応する識別子に基づいて前記新規ロードがＣロードであるか否かを判断し、前記識別子は、ロード値バッファを含む前記第１のメモリのエミュレートに応じて既に決定されているものである請求項１８に記載の装置。
【請求項２０】
前記プロセッサは、前記新規ロードに対応する識別子に基づいて前記新規ロードがＣロードであるか否かを判断し、前記識別子は、コードループに含まれているＱロードに応じて既に決定されているものである請求項１６に記載の装置。
【外国語明細書】
2011129103000001.pdf