(57)【要約】  一実施形態において、本発明は、順次命令から別個の複数のスレッドを生成し、依存関係を有するソースの前に同期化ビットを設定し、依存関係を有するソースの後に同期化ビットを消去する同期化ビットを設定するプロセッサ命令を挿入することにより、することにより順次命令を並列化する投機実行エンジンについて記載する。同期化ビットは、別個のコアで実行されるスレッドから、依存関係を有するシンクをストールするように設計される。その他の実施形態についても説明及び特許請求される。【選択図】図１
2013527549.tif 000002
【特許請求の範囲】
【請求項１】
コンテンツを備える記憶媒体であって、
前記コンテンツは、アクセス機械によって実行されると、前記アクセス機械に、
マルチコアプロセッサの第１コアにおける命令を実行させ、
依存関係を有するシンクの一部として、投機的キャッシュ内のデータのアドレスを決定させ、
第２コア内の依存関係を有するソースによって、前記データに関連付けられた同期化ビットが設定された場合には、前記データへのアクセスするのを待たせる記憶媒体。
【請求項２】
アクセス機械によって実行されると、前記アクセス機械に、
プロセッサ命令を実行することにより、前記同期化ビットを設定させるコンテンツを更に備える請求項１に記載の記憶媒体。
【請求項３】
アクセス機械によって実行されると、前記アクセス機械に、
プロセッサ命令を実行することにより、前記同期化ビットを消去させるコンテンツを更に備える請求項２に記載の記憶媒体。
【請求項４】
前記依存関係を有するシンクは、ロード命令を含む請求項３に記載の記憶媒体。
【請求項５】
前記依存関係を有するソースは、ストア命令を含む請求項３に記載の記憶媒体。
【請求項６】
前記データと関連付けられた前記同期化ビットは、キャッシュラインビットを含む請求項３に記載の記憶媒体。
【請求項７】
前記データと関連付けられた前記同期化ビットは、キャッシュワードビットを含む請求項３に記載の記憶媒体。
【請求項８】
プロセッサ命令を実行することにより前記同期化ビットを設定させる前記コンテンツは、依存関係を有するソースアドレスが生成された場合に前記同期化ビットを設定するコンテンツを含む請求項３に記載の記憶媒体。
【請求項９】
命令を実行する第１コア及び第２コアを有するプロセッサと、
データ及び前記プロセッサの命令を格納する投機的キャッシュと、
順次命令を格納し、前記プロセッサに接続されるダイナミックランダムアクセスメモリ（ＤＲＡＭ）と、
別個の複数のスレッドを生成することにより前記順次命令を並列化し、依存関係を有するソースの前に同期化ビットを設定するべく、プロセッサ命令を挿入する投機実行エンジンとを備え、
前記投機的キャッシュは、関連付けられたデータが依存関係を有するソースの影響を受けるかを示す前記同期化ビットを含み、前記同期化ビットが設定された場合には依存関係を有するシンクオペレーションをストールさせるシステム。
【請求項１０】
依存関係を有するソースの後の前記同期化ビットを消去するべく、対応するプロセッサ命令を挿入する前記投機実行エンジンを更に備える請求項９に記載のシステム。
【請求項１１】
前記依存関係を有するソースは、ストア命令を含む請求項１０に記載のシステム。
【請求項１２】
前記依存関係を有するシンクは、ロード命令を含む請求項１０に記載のシステム。
【請求項１３】
前記同期化ビットは、キャッシュラインビットを含む請求項９に記載のシステム。
【請求項１４】
前記同期化ビットは、キャッシュラインワードを含む請求項９に記載のシステム。
【請求項１５】
専用投機実行エンジンによって実行される方法であって、
順次命令のセットから並列化されたスレッドを生成する段階と、
依存関係を有するソースの前に同期化ビットを設定し、前記依存関係を有するソースの後に前記同期化ビットを消去するべく、前記スレッド内にプロセッサ命令を挿入する段階と、
マルチコアプロセッサの複数のコアで前記並列化されたスレッドを実行する段階とを備え、
前記同期化ビットは、設定されると、依存関係を有するシンクをストールする方法。
【請求項１６】
前記依存関係を有するソースは、ストア命令を含む請求項１５に記載の方法。
【請求項１７】
前記依存関係を有するシンクは、ロード命令を含む請求項１５に記載の方法。
【請求項１８】
前記同期化ビットは、キャッシュラインビットを含む請求項１５に記載の方法。
【請求項１９】
前記同期化ビットは、キャッシュワードビットを含む請求項１５に記載の方法。
【請求項２０】
前記依存関係を有するソースの前に同期化ビットを設定するべく前記スレッド内にプロセッサ命令を挿入する段階は、
依存関係を有するソースアドレスが生成された場合に前記同期化ビットを設定するべく、プロセッサ命令を挿入する段階を含む請求項１５に記載の方法。
【発明の詳細な説明】
【背景技術】
【０００１】
現代のプロセッサでは、並列に実行を行うことが可能な複数のコンピュータコアを有するのが普通になっている。しかしながら、多くのシーケンシャル（順次）又はシリアル（逐次）アプリケーション及びプログラムは、並列アーキテクチャを有効に利用できていない。スレッドレベル投機（ＴＬＳ）は、静的又は動的コンパイラを使用してシーケンシャルプログラムを並列化し、投機実行の失敗が発生した場合にはハードウェアを使用して回復を行う。しかしながら、依存関係を有するロード（読み込み）命令とストア（格納）命令との間の適切な同期なしに、例えば、格納の前に読み込みを実行すると、投機スレッドが破棄（squash）されてしまうデータバイオレーションが発生し、再読み込みを行ったデータで再実行を行う必要がある。
【図面の簡単な説明】
【０００２】
【図１】本発明の一実施形態に係るシステムのブロック図の一例である。
【図２】本発明の一実施形態に係る投機エンジンの一例を示したブロック図である。
【図３Ａ】本発明の一実施形態に係るソフトウェアコードの例を示したブロック図である。
【図３Ｂ】本発明の一実施形態に係るソフトウェアコードの例を示したブロック図である。
【図４】本発明の一実施形態に係るスレッドレベルにおける動的データ同期のフローチャートである。
【図５】本発明の一実施形態に係るシステムのブロック図である。
【発明を実施するための形態】
【０００３】
様々な実施形態において、設定されるとキャッシュライン又はワードの読み出しをストールする同期化ビットを伴う投機的キャッシュ（speculative cache）と共に、プロセッサについての説明がなされる。当業者であれば、このような構成により、投機の失敗及びそれに付随するスレッド破棄による非効率を防ぐことができることを理解できる。また、同期化ビット（synchronization bit）を設定及び消去するプロセッサ命令についても記載する。コンパイラは、データ依存関係を同期させるべく、これらの命令を利用してもよい。本発明は、更なる並列化及び／又はスレッド投機（speculation）機能を含んでもよいプロセッサ及びシステムで実施されることを意図している。
【０００４】
図１は、本発明の一実施形態に係るシステムの一例を示したブロック図である。図１に示すように、システム１００は、プロセッサ１０２、及び、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）のようなメモリ１０４を備えてもよい。プロセッサ１０２は、コア１０６〜１１０、投機的キャッシュ１１２及び投機実行エンジン１１８を有してもよい。コア１０６〜１１０は、互いに独立して命令を実行可能であってもよく、任意の種類のアーキテクチャを有してもよい。図では、３つのコアを含むように示されているが、プロセッサ１０２は、任意の数のコアを有してもよく、図示しないその他の構成要素又はコントローラを含んでもよい。一実施形態において、プロセッサ１０２は、システムオンチップ（ＳＯＣ）である。
【０００５】
投機的キャッシュ１１２は、任意の数の独立したキャッシュを含んでもよく、また任意の数のエントリを含んでもよい。レイテンシの低いレベル１キャッシュとして、投機的キャッシュ１１２を、任意の階層レベルに任意のメモリ技術で実装してもよい。投機的キャッシュ１１２は、キャッシュライン又はキャッシュワード１１６と関連付けられる同期化ビット１１４を含む。同期化ビット１１４が設定されると、以下に詳細に説明するように、コアは、ライン又はワード１１６をロード（読み込み）不可能となる。これは、例えば、ロードが関連している格納を別のコアが実行していることから、不可能とされる。一実施形態において、同期化ビット１１４が設定されている場合にコアがキャッシュライン又はワード１１６からロードを行おうとすると、同期化ビット１１４が消去されるまでストールとなる。
【０００６】
投機実行エンジン１１８は、例えば、以下に図４を参照して説明するように、スレッドレベル投機における動的データ同期のための方法を実装し、図２を参照して説明するようなアーキテクチャを有してもよい。投機エンジン１１８は、プロセッサ１０２とは別個に設けられてもよく、ハードウェア、ソフトウェア又はハードウェアとソフトウェアとの組み合わせに実装されてもよい。
【０００７】
図２は、本発明の一実施形態に係る投機実行エンジンの一例を示したブロック図である。図２に示すように、投機実行エンジン１１８は、並列化サービス２０２、並列化出力コード２０４及びシリアル入力コード２０６を含んでもよい。並列化サービス２０２は、シリアル命令を並列化しスレッドレベル投機における動的データ同期を付加する能力を有する投機実行エンジン１１８を提供してもよい。
【０００８】
並列化サービス２０２は、スレッドレベルサービス２０８、同期化設定サービス２１０及び同期化消去サービス２１２を含んでもよく、これらはそれぞれ、順次命令から並列スレッドを生成し、依存するソースの前に同期化ビットを設定するべくプロセッサ命令を挿入し、依存するソースの後に同期化ビットを消去するべくプロセッサ命令を挿入する。並列化サービス２０２は、（例えば、図３Ａに示すような）シリアル入力コード２０６から、（例えば、図３Ｂに示すような）並列化出力コード２０４を生成してもよい。図３Ａ及び図３Ｂには、本発明の一実施形態に係るソフトウェアコードの一例を示したブロック図が示されている。図３Ａに示すように、順次命令３００は、順次進行する様々なロード及びストアを含み、プロセッサの１つのコアにより実行されることを意図している。順次命令３００は、投機実行エンジン１１８の順次入力コード２０６として機能してもよい。図３Ｂに示すように、並行化命令３０２は、投機実行エンジン１１８の並行出力コード２０４を表していてもよい。スレッド３０４〜３０８は、コア１０６〜１１０によって別個に実行可能であってもよい。
【０００９】
スレッド３０４〜３０８はそれぞれ、実行されると、ストア命令のような依存関係のあるソースの前に、特定のキャッシュライン又はワード１１６に対して同期化ビット１１４を設定するプロセッサ命令（例えば、mark_comm_addr）を含んでもよい。スレッド３０４〜３０８はそれぞれ、実行されると、依存関係を有するソースの後の同期化ビット１１４を消去する対応プロセッサ命令（例えば、clear_comm_addr）を含んでもよい。データ依存関係の一例がスレッド３０４及びスレッド３０８に示されており、依存関係にあるシンクは、依存関係にあるソースが同期化ビットを完了及び消去するのを待つ必要がある。この場合、ロード３１０は、ストア３１２が完了するまでスレッド３０８の進行をストール（一時的に停止）し、スレッド３０４が関連付けられた同期化ビットを消去する。
【００１０】
図４には、本発明の一実施形態に係るスレッドレベル投機における動的データ同期のフローチャートが示されている。図４に示すように、方法は、順次命令から並列スレッドを生成する段階（４０２）から開始する。一実施形態において、順次命令３００から並列命令３０２を生成するべく、スレッドサービス２０８が呼び出される。別の実施形態では、生成されるスレッド（３０４〜３０８）の数は、少なくとも部分的に、プロセッサ内のコア（１０６〜１１０）の数に依存する。
【００１１】
方法は、同期化ビットを設定及び消去するプロセッサ命令を挿入する段階（４０４）へと続く。一実施形態において、同期化設定サービス２１０は、依存関係を有するソース、又は、アドレスが生成された時点の、依存関係の可能性があるソースの前の早い時点で、命令を（mark_comm_addr）スレッド３０４〜３０８に挿入する。別の実施形態では、同期化消去サービス２１２は、依存関係を有するソース又は依存関係を有する可能性のあるソースの後に、命令（clear_comm_addr）をスレッド３０４〜３０８に挿入する。
【００１２】
マルチコアプロセッサのコアで並列スレッドを実行する段階（４０６）で、方法が終了する。一実施形態において、スレッド３０４〜３０８はそれぞれ、コア１０６〜１１０で実行される。一実施形態において、コア１０６で実行されているスレッド３０４によって同期化ビット１１４が消去されるまで、コア１１０の実行がロード３１０で一時停止されてもよい。
【００１３】
実施形態は、数多くの異なるシステムタイプに実装されてもよい。図５には、本発明の一実施形態に係るシステムのブロック図が示されている。図５に示すように、マルチプロセッサシステム５００は、ポイント・ツー・ポイント接続システムであり、ポイント・ツー・ポイント接続５５０を介して互いに結合される第１プロセッサ５７０及び第２プロセッサ５８０を備える。図５に示すように、プロセッサ５７０及びプロセッサ５８０は各々が、第１及び第２プロセッサコア（すなわち、プロセッサコア５７４ａ及び５７４ｂ、並びに、プロセッサコア５８４ａ及び５８４ｂ）を含むマルチコアプロセッサであってもよい。プロセッサはそれぞれ、本発明の一実施形態に係る、動的データ同期化スレッドレベル投機ハードウェア、ソフトウェア及びファームウェを含んでもよい。
【００１４】
図５に示すように、第１プロセッサ５７０は更に、メモリコントローラハブ（ＭＣＨ）５７２並びにポイント・ツー・ポイント（Ｐ−Ｐ）インターフェース５７６及び５７８を有する。同様に、第２プロセッサ５８０は、ＭＣＨ５８２並びにＰ−Ｐインターフェース５８６及び５８８を有する。図５に示すように、ＭＣＨ５７２及び５８２は、プロセッサをそれぞれのメモリに、すなわち、それぞれのプロセッサに局所的に取り付けられているメインメモリ（例えば、ダイナミックランダムアクセスメモリ（ＤＲＡＭ））の一部分であってもよい、メモリ５３２及びメモリ５３４と接続されており、それぞれが本発明の一実施形態に係る拡張ページテーブルを含んでもよい。第１プロセッサ５７０及び第２プロセッサ５８０は、Ｐ−Ｐ接続５５２及び５５４をそれぞれ介して、チップセット５９０と接続されてもよい。図５に示すように、チップセット５９０は、Ｐ−Ｐインターフェース５９４及び５９８を含む。
【００１５】
更に、チップセット５９０は、チップセット５９０と高性能グラフィックスエンジンと５３８とを接続するインターフェース５９２を含む。そして、チップセット５９０は、インターフェース５９６を介して第１バス５１６と接続されてもよい。図５に示すように、第１バス５１６には、第１バス５１６を第２バス５２０へと接続するバスブリッジ５１８と共に、様々なＩ／Ｏデバイス５１４が接続されてもよい。様々なデバイスが、第２バス５２０に接続されてもよく、一実施形態において、例えば、キーボード／マウス５２２、通信デバイス５２６、及び、コード５３０を含んでもよいディスクドライブ又はその他のマスストレージデバイスのようなデータ格納ユニット５２８が含まれる。更に、オーディオＩ／Ｏ５２４を第２バス５２０に接続してもよい。
【００１６】
実施形態は、コードに実装されてもよく、また、命令を実行するようにシステムをプログラムするのに使用可能な命令を格納する記憶媒体に格納されてもよい。記憶媒体としては、特にこれに限定されないが、フロッピー（登録商標）ディスク、光ディスク、コンパクトディスクリードオンリーメモリ（ＣＤ−ＲＯＭ）、再書き込み可能コンパクトディスク（ＣＤ−ＲＷ）及び磁気光学ディスクを含むあらゆるディスク、並びに、リードオンリーメモリ（ＲＯＭ）、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）及びスタティックランダムアクセスメモリ（ＳＲＡＭ）のようなランダムアクセスメモリ（ＲＡＭ）、消去可能−プログラム可能リードオンリーメモリ（ＥＰＲＯＭ）、フラッシュメモリ、電気的消去可能−プログラム可能リードオンリーメモリ（ＥＥＰＲＯＭ）、磁気又は光学カードのような半導体デバイス、又は、電気的命令を格納するのに適したその他の種類の媒体が含まれる。
【００１７】
本発明が、限られた数の実施形態を参照して説明されたが、数多くの改良及び変更が可能であることは、当業者にとって明らかである。添付の特許請求の範囲は、本発明の精神及び範囲におけるこのような改良及び変更も含むことを意図している。
【図１】
2013527549.tif 000003
【図２】
2013527549.tif 000004
【図３Ａ】
2013527549.tif 000005
【図３Ｂ】
2013527549.tif 000006
【図４】
2013527549.tif 000007
【図５】
2013527549.tif 000008
【手続補正書】
【提出日】平成24年11月29日(2012.11.29)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
コンピュータに、
依存関係を有するシンクの一部として、投機的キャッシュ内のデータのアドレスを決定する段階と、
依存関係を有するソースによって、前記データに関連付けられた同期化ビットが設定された場合には、前記データへのアクセスするのを待つ段階と
を実行させるためのプログラム。
【請求項２】
前記同期化ビットを設定する段階を更に実行させる請求項１に記載のプログラム。
【請求項３】
前記同期化ビットを消去する段階を更に実行させる請求項２に記載のプログラム。
【請求項４】
前記依存関係を有するシンクは、ロード命令を含む請求項３に記載のプログラム。
【請求項５】
前記依存関係を有するソースは、ストア命令を含む請求項３に記載のプログラム。
【請求項６】
前記データと関連付けられた前記同期化ビットは、キャッシュラインビットを含む請求項３に記載のプログラム。
【請求項７】
前記データと関連付けられた前記同期化ビットは、キャッシュワードビットを含む請求項３に記載のプログラム。
【請求項８】
前記同期化ビットを設定する段階は、依存関係を有するソースアドレスが生成された場合に前記同期化ビットを設定する段階を含む請求項３に記載のプログラム。
【請求項９】
命令を実行する第１コア及び第２コアを有するプロセッサと、
データ及び前記プロセッサの命令を格納する投機的キャッシュと、
順次命令を格納し、前記プロセッサに接続されるダイナミックランダムアクセスメモリ（ＤＲＡＭ）と、
別個の複数のスレッドを生成することにより前記順次命令を並列化し、依存関係を有するソースの前に同期化ビットを設定するべく、プロセッサ命令を挿入する投機実行エンジンとを備え、
前記投機的キャッシュは、関連付けられたデータが依存関係を有するソースの影響を受けるかを示す前記同期化ビットを含み、前記同期化ビットが設定された場合には依存関係を有するシンクオペレーションをストールさせるシステム。
【請求項１０】
依存関係を有するソースの後の前記同期化ビットを消去するべく、対応するプロセッサ命令を挿入する前記投機実行エンジンを更に備える請求項９に記載のシステム。
【請求項１１】
前記依存関係を有するソースは、ストア命令を含む請求項１０に記載のシステム。
【請求項１２】
前記依存関係を有するシンクは、ロード命令を含む請求項１０に記載のシステム。
【請求項１３】
前記同期化ビットは、キャッシュラインビットを含む請求項９に記載のシステム。
【請求項１４】
前記同期化ビットは、キャッシュラインワードを含む請求項９に記載のシステム。
【請求項１５】
専用投機実行エンジンによって実行される方法であって、
順次命令のセットから並列化されたスレッドを生成する段階と、
依存関係を有するソースの前に同期化ビットを設定し、前記依存関係を有するソースの後に前記同期化ビットを消去するべく、前記スレッド内にプロセッサ命令を挿入する段階と、
マルチコアプロセッサの複数のコアで前記並列化されたスレッドを実行する段階とを備え、
前記同期化ビットは、設定されると、依存関係を有するシンクをストールする方法。
【請求項１６】
前記依存関係を有するソースは、ストア命令を含む請求項１５に記載の方法。
【請求項１７】
前記依存関係を有するシンクは、ロード命令を含む請求項１５に記載の方法。
【請求項１８】
前記同期化ビットは、キャッシュラインビットを含む請求項１５に記載の方法。
【請求項１９】
前記同期化ビットは、キャッシュワードビットを含む請求項１５に記載の方法。
【請求項２０】
前記依存関係を有するソースの前に同期化ビットを設定するべく前記スレッド内にプロセッサ命令を挿入する段階は、
依存関係を有するソースアドレスが生成された場合に前記同期化ビットを設定するべく、プロセッサ命令を挿入する段階を含む請求項１５に記載の方法。
【国際調査報告】
2013527549.tif 000009
2013527549.tif 000010