(57)【要約】  ヘルパーサブスレッド(140)を伴う単一スレッドコードシーケンスにおけるソフトウェアインストラクションがコンピュータシステム(100)のプロセッサ(170)において実行される。これを実行すると、コンピュータシステム(100)は、例えば、（ｉ）レイテンシの長いインストラクションに関連した情報が入手できるかどうか判断し(310)、そしてデータが入手できないときに、（ii）コンピュータシステムの状態のスナップショットを撮って、そのスナップショットの状態へロールバックするための能力を維持し(321)、（iii）ヘルパーサブスレッドにおけるヘルパーインストラクションを実行し(322)、そして（iv）ヘルパーサブスレッドにおけるヘルパーインストラクションの実行が完了したときにスナップショット状態へロールバックして(323)、実行を継続する(324)ようにさせる。ヘルパーサブスレッドは、例えば、レイテンシの長いインストラクションの完了を待機している間にデータをプリフェッチする。
2007532990.tif 000002
【特許請求の範囲】
【請求項１】
明示的ソフトウェア制御のもとで、レイテンシの長いインストラクションに関連したアイテムが入手できるかどうか判断するためのステップと、
前記判断に続いて、前記レイテンシの長いインストラクションに関連したアイテムが入手できないことが分かると、明示的ソフトウェア制御のもとで、ヘルパーサブスレッドを実行するためのステップと、
を備えたコンピュータベースの方法。
【請求項２】
明示的ソフトウェア制御のもとで、ヘルパーサブスレッドを実行するための前記ステップは、状態をチェックポイント処理してスナップショット状態を得る段階を更に含む、請求項１に記載のコンピュータベースの方法。
【請求項３】
前記状態は、プロセッサ状態を含む、請求項２に記載のコンピュータベースの方法。
【請求項４】
明示的ソフトウェア制御のもとで、ヘルパーサブスレッドを実行するための前記ステップは、前記ヘルパーサブスレッドにおけるインストラクションを実行することにより補助的なオペレーションを遂行する段階を含む、請求項２に記載のコンピュータベースの方法。
【請求項５】
明示的ソフトウェア制御のもとで、ヘルパーサブスレッドを実行するための前記ステップは、スナップショット状態へ状態をロールバックする段階を更に含む、請求項４に記載のコンピュータベースの方法。
【請求項６】
前記アイテムの実際の値を使用してオリジナルコードセグメントを実行するステップを更に備えた、請求項５に記載のコンピュータベースの方法。
【請求項７】
前記判断に続いて、前記レイテンシの長いインストラクションに関連したアイテムが入手できることが分かると、前記アイテムの実際の値を使用してオリジナルコードセグメントを実行するステップを更に備えた、請求項１に記載のコンピュータベースの方法。
【請求項８】
前記判断するステップは、レジスタ状態で分岐するインストラクションを実行する段階を含む、請求項１に記載のコンピュータベースの方法。
【請求項９】
前記レジスタ状態で分岐するインストラクションは、レディで分岐するインストラクションである、請求項７に記載のコンピュータベースの方法。
【請求項１０】
明示的ソフトウェア制御のもとで、レイテンシの長いインストラクションに関連したアイテムが入手できるかどうか判断するための手段と、
前記判断に続いて、前記レイテンシの長いインストラクションに関連したアイテムが入手できないことが分かると、明示的ソフトウェア制御のもとで、ヘルパーサブスレッドを実行するための手段と、
を備えた構造体。
【請求項１１】
明示的ソフトウェア制御のもとで、ヘルパーサブスレッドを実行するための前記手段は、状態をチェックポイント処理してスナップショット状態を得る手段を更に含む、請求項１０に記載の構造体。
【請求項１２】
前記状態はプロセッサ状態を含む、請求項１１に記載の構造体。
【請求項１３】
明示的ソフトウェア制御のもとで、ヘルパーサブスレッドを実行するための前記手段は、前記ヘルパーサブスレッドにおけるインストラクションを実行することにより補助的なオペレーションを遂行する手段を更に含む、請求項１１に記載の構造体。
【請求項１４】
明示的ソフトウェア制御のもとで、ヘルパーサブスレッドを実行するための前記手段は、スナップショット状態へ状態をロールバックする手段を更に含む、請求項１３に記載の構造体。
【請求項１５】
前記アイテムの実際の値を使用してオリジナルコードセグメントを実行する手段を更に備えた、請求項１４に記載の構造体。
【請求項１６】
前記判断に続いて、前記レイテンシの長いインストラクションに関連したアイテムが入手できることが分かると、前記アイテムの実際の値を使用してオリジナルコードセグメントを実行する手段を更に備えた、請求項１０に記載の構造体。
【請求項１７】
前記判断する手段は、レジスタ状態で分岐するインストラクションを実行する手段を含む、請求項１６に記載の構造体。
【請求項１８】
前記レジスタ状態で分岐するインストラクションは、レディで分岐するインストラクションである、請求項１６に記載の構造体。
【請求項１９】
プロセッサと、
前記プロセッサに結合され、インストラクションが記憶されたメモリと、
を備えたコンピュータシステムにおいて、前記プロセッサで前記インストラクションを実行するときに、
明示的ソフトウェア制御のもとで、レイテンシの長いインストラクションに関連したアイテムが入手できるかどうか判断するためのステップと、
前記判断に続いて、前記レイテンシの長いインストラクションに関連したアイテムが入手できないことが分かると、明示的ソフトウェア制御のもとで、ヘルパーサブスレッドを実行するためのステップと、
を備えた方法。
【請求項２０】
明示的ソフトウェア制御のもとで、レイテンシの長いインストラクションに関連したアイテムが入手できるかどうか判断するためのステップと、
前記判断に続いて、前記レイテンシの長いインストラクションに関連したアイテムが入手できないことが分かると、明示的ソフトウェア制御のもとで、ヘルパーサブスレッドを実行するためのステップと、
を備えた方法のためのコンピュータ読み取り可能なコードを記憶又は搬送するように構成された媒体を備えたコンピュータプログラム製品。
【請求項２１】
前記方法は、前記判断に続いて、前記レイテンシの長いインストラクションに関連したアイテムが入手できることが分かると、前記アイテムの実際の値を使用してオリジナルコードセグメントを実行するステップを更に備えた、請求項２０に記載のコンピュータプログラム製品。
【請求項２２】
明示的ソフトウェア制御のもとで、レイテンシの長いインストラクションに関連したアイテムが入手できるかどうか判断するためのステップと、
次のうちの１つを遂行するステップであって、
（ａ）前記判断に続いて、レイテンシの長いインストラクションに関連したアイテムが入手できないことが分かると、明示的ソフトウェア制御のもとで、ヘルパーサブスレッドを実行し、そして
前記ヘルパーサブスレッドの実行の完了に続いて前記アイテムの実際の値を使用してオリジナルコードセグメントを実行し、
（ｂ）前記判断に続いて、レイテンシの長いインストラクションに関連したアイテムが入手できることが分かると、前記アイテムの実際の値を使用してオリジナルコードセグメントを実行する、
のうちの１つを遂行するステップと、
を備えたコンピュータベースの方法。
【請求項２３】
明示的ソフトウェア制御のもとで、レイテンシの長いインストラクションに関連したアイテムが入手できるかどうか判断するための手段と、
次のうちの１つを遂行する手段であって、
（ａ）前記判断に続いて、レイテンシの長いインストラクションに関連したアイテムが入手できないことが分かると、明示的ソフトウェア制御のもとで、ヘルパーサブスレッドを実行し、そして
前記ヘルパーサブスレッドの実行の完了に続いて前記アイテムの実際の値を使用してオリジナルコードセグメントを実行し、
（ｂ）前記判断に続いて、レイテンシの長いインストラクションに関連したアイテムが入手できることが分かると、前記アイテムの実際の値を使用してオリジナルコードセグメントを実行する、
のうちの１つを遂行する手段と、
を備えた構造体。
【請求項２４】
プロセッサと、
前記プロセッサに結合され、インストラクションが記憶されたメモリと、
を備えたコンピュータシステムにおいて、前記プロセッサで前記インストラクションを実行するときに、
明示的ソフトウェア制御のもとで、レイテンシの長いインストラクションに関連したアイテムが入手できるかどうか判断するためのステップと、
次のうちの１つを遂行するステップであって、
（ａ）前記判断に続いて、レイテンシの長いインストラクションに関連したアイテムが入手できないことが分かると、明示的ソフトウェア制御のもとで、ヘルパーサブスレッドを実行し、そして
前記ヘルパーサブスレッドの実行の完了に続いて前記アイテムの実際の値を使用してオリジナルコードセグメントを実行し、
（ｂ）前記判断に続いて、レイテンシの長いインストラクションに関連したアイテムが入手できることが分かると、前記アイテムの実際の値を使用してオリジナルコードセグメントを実行する、
のうちの１つを遂行するステップと、
を備えた方法。
【請求項２５】
明示的ソフトウェア制御のもとで、レイテンシの長いインストラクションに関連したアイテムが入手できるかどうか判断するためのステップと、
次のうちの１つを遂行するステップであって、
（ａ）前記判断に続いて、レイテンシの長いインストラクションに関連したアイテムが入手できないことが分かると、明示的ソフトウェア制御のもとで、ヘルパーサブスレッドを実行し、そして
前記ヘルパーサブスレッドの実行の完了に続いて前記アイテムの実際の値を使用してオリジナルコードセグメントを実行し、
（ｂ）前記判断に続いて、レイテンシの長いインストラクションに関連したアイテムが入手できることが分かると、前記アイテムの実際の値を使用してオリジナルコードセグメントを実行する、
のうちの１つを遂行するステップと、
を備えた方法のためのコンピュータ読み取り可能なコードを記憶又は搬送するように構成された媒体を備えたコンピュータプログラム製品。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に、プロセッサの性能向上に係り、より詳細には、データがロードされるのを待機してプロセッサが費やす全体的な時間を短縮するためにメモリレベル並列性（ＭＬＰ）を向上させる方法に係る。
【０００２】
関連出願：本出願は、クリストフ・ブラウン、クインＡ．ジャコブソン、シャイレンダー・コードリー及びマルク・トレンブレーを発明者として２００４年３月３１日に出願された「Method And Structure For Explicit Software Control Of Execution Of A Thread Including A Helper Subthread」と題する米国プロビジョナル特許出願第６０／５５８，６９０号の利益を請求するもので、その全体を参考としてここに援用する。
【背景技術】
【０００３】
近代的なプロセッサの性能を向上させるために、所与の時間周期中に実行されるインストラクションの数を向上させる種々の技術が使用されている。これらの技術の１つが、プロセッサが将来必要とするデータのプリフェッチである。
【０００４】
データのプリフェッチとは、一般に、近い将来必要とされるであろうデータを予想し、そのデータをできるだけプロセッサの近くへ運ぶためのトランザクションを発生するメカニズムを指す。データをプロセッサの近くへ運ぶことで、データが必要とされるとき及びその場合にそのデータにアクセスするためのレイテンシを短縮する。
【０００５】
メモリレベル並列性（ＭＬＰ）を高めるために多数の形式のデータプリフェッチが提案されている。一形式のデータプリフェッチは、種々の発見的解決法に基づいてデータをプリフェッチするハードウェアメカニズムを使用する。別の形式のデータプリフェッチは、データプリフェッチを開始するための指令がインストラクションストリームに出される従来のソフトウェアプリフェッチを使用する。
【０００６】
ほとんどのインストラクションセットアーキテクチャーは、ソフトウェアが、近い将来、インストラクションで指定される所与の位置におそらくデータを必要とするであろうことをソフトウェアがハードウェアに通知させるようなプリフェッチインストラクションを有する。ハードウェアは、次いで、これらのプリフェッチインストラクションに応答して、プロセッサ内の近くのキャッシュにデータを潜在的に移動させる。
【発明の開示】
【発明が解決しようとする課題】
【０００７】
プリフェッチインストラクションを使用するために、ソフトウェアは、アドレスを計算するためのコードシーケンスも含まねばならない。これらのコードシーケンスは、プログラムの全体的な実行にオーバーヘッドを追加すると共に、レジスタのような幾つかのハードウェアリソースをある時間周期中にプリフェッチワーク専用に割り当てることを必要とする。データを待機してプロセッサが費やす時間を短縮するためのデータプリフェッチの潜在的な利益は、データプリフェッチのオーバーヘッドの補償よりしばしば大きいが、常にそうではない。これは、特に複雑である。というのは、どんなデータがプロセッサの近くに既にあるか及びどんなデータをプリフェッチする必要があるかについてソフトウェアがせいぜい不完全な知識しか事前に有していないからである。
【課題を解決するための手段】
【０００８】
本発明の一実施形態によれば、レイテンシの長いオペレーションの完了を待機する間に明示的ソフトウェア制御を使用してヘルパーオペレーションが実行される。ここで、レイテンシの長いインストラクションとは、それを実行するときに、ローカルキャッシュで入手できない情報のアクセスや、インストラクションの実行準備ができたときに入手できないリソースの使用を必要とするインストラクションである。
【０００９】
例えば、ロードインストラクションの実行の完了を待機する間に、１つ以上のプリフェッチインストラクションが実行されるが、プリフェッチインストラクションのアドレスを計算するために付加的な計算が必要とされる。これは、プリフェッチインストラクションの実行の完了時に、処理が、ロードインストラクションに続いてオリジナルコードセグメントに復帰し、そして実行が通常に続けられるようにして達成される。
【００１０】
従って、プロセッサがアイドルである時間周期が確認され、その後にのみ、データをプリフェッチするためのコードシーケンスが実行される。データをプリフェッチするためのコードシーケンスは、そのコードシーケンスがメインプログラムの状態又はリソース割り当てに影響しないように含まれる。
【００１１】
一実施形態では、コンピュータベースの方法は、明示的ソフトウェア制御のもとで、レイテンシの長いインストラクションに関連したアイテムが入手できるかどうか判断する。この判断オペレーションに続いて、レイテンシの長いインストラクションに関連したアイテムが入手できないことが分かると、明示的ソフトウェア制御のもとで、ヘルパーサブスレッドが実行される。
【００１２】
明示的ソフトウェア制御のもとでヘルパーサブスレッドを実行した結果、状態のチェックポイント処理が行われてスナップショット状態を得る。一実施形態では、この状態がプロセッサ状態である。又、明示的ソフトウェア制御のもとでヘルパーサブスレッドを実行した結果、ヘルパーサブスレッドにおけるインストラクションの実行により補助的なオペレーションが遂行される。補助的なオペレーションが完了すると、状態がスナップショット状態へロールバックされ、そしてアイテムの実際の値を使用してオリジナルコードセグメントが実行される。
【００１３】
或いは又、前記判断に続いて、レイテンシの長いインストラクションに関連したアイテムが入手できることが分かると、アイテムの実際の値を使用してオリジナルコードセグメントが実行される。このケースでは、ヘルパーサブスレッドが実行されない。
【００１４】
この実施形態では、構造体は、明示的ソフトウェア制御のもとで、レイテンシの長いインストラクションに関連したアイテムが入手できるかどうか判断するための手段と、この判断に続いて、レイテンシの長いインストラクションに関連したアイテムが入手できないことが分かると、明示的ソフトウェア制御のもとで、ヘルパーサブスレッドを実行するための手段とを備えている。
【００１５】
明示的ソフトウェア制御のもとでヘルパーサブスレッドを実行するための手段は、状態をチェックポイント処理してスナップショット状態を得るための手段と、ヘルパーサブスレッドにおけるインストラクションを実行することにより補助的なオペレーションを遂行するための手段と、状態をスナップショット状態へロールバックするための手段とを含む。又、この構造体は、アイテムの実際の値を使用してオリジナルコードセグメントを実行するための手段も備えている。
【００１６】
これらの手段は、例えば、記憶されたコンピュータ実行可能なインストラクションと、これらインストラクションを実行するためのコンピュータシステムのプロセッサとを使用することにより実施できる。コンピュータシステムは、ワークステーション、ポータブルコンピュータ、クライアント−サーバーシステム、或いはネットワーク編成のコンピュータ、記憶媒体等の組合せでよい。
【００１７】
この実施形態では、コンピュータシステムは、プロセッサと、このプロセッサに接続されたメモリとを備えている。メモリには、インストラクションが記憶され、プロセッサにおいてそれらのインストラクションが実行されるときに、方法は、
明示的ソフトウェア制御のもとで、レイテンシの長いインストラクションに関連したアイテムが入手できるかどうか判断するためのステップと、
この判断に続いて、レイテンシの長いインストラクションに関連したアイテムが入手できないことが分かると、明示的ソフトウェア制御のもとで、ヘルパーサブスレッドを実行するためのステップと、
を備えている。
【００１８】
又、この実施形態では、コンピュータプログラム製品は、
明示的ソフトウェア制御のもとで、レイテンシの長いインストラクションに関連したアイテムが入手できるかどうか判断するためのステップと、
この判断に続いて、レイテンシの長いインストラクションに関連したアイテムが入手できないことが分かると、明示的ソフトウェア制御のもとで、ヘルパーサブスレッドを実行するためのステップと、
を備えた前記方法のためのコンピュータ読み取り可能なコードを記憶し又は搬送するよう構成された媒体を備えている。
【００１９】
別の実施形態では、コンピュータベースの方法は、
明示的ソフトウェア制御のもとで、レイテンシの長いインストラクションに関連したアイテムが入手できるかどうか判断するためのステップと、
次のうちの１つを遂行するステップであって、
（ａ）前記判断に続いて、レイテンシの長いインストラクションに関連したアイテムが入手できないことが分かると、明示的ソフトウェア制御のもとで、ヘルパーサブスレッドを実行し、そして
ヘルパーサブスレッドの実行の完了に続いて前記アイテムの実際の値を使用してオリジナルコードセグメントを実行し、
（ｂ）前記判断に続いて、レイテンシの長いインストラクションに関連したアイテムが入手できることが分かると、前記アイテムの実際の値を使用してオリジナルコードセグメントを実行する、
のうちの１つを遂行するステップと、
を備えている。
【００２０】
別の実施形態では、構造体は、
明示的ソフトウェア制御のもとで、レイテンシの長いインストラクションに関連したアイテムが入手できるかどうか判断するための手段と、
次のうちの１つを遂行する手段であって、
（ａ）前記判断に続いて、レイテンシの長いインストラクションに関連したアイテムが入手できないことが分かると、明示的ソフトウェア制御のもとで、ヘルパーサブスレッドを実行し、そして
ヘルパーサブスレッドの実行の完了に続いて前記アイテムの実際の値を使用してオリジナルコードセグメントを実行し、
（ｂ）前記判断に続いて、レイテンシの長いインストラクションに関連したアイテムが入手できることが分かると、前記アイテムの実際の値を使用してオリジナルコードセグメントを実行する、
のうちの１つを遂行する手段と、
を備えている。
【００２１】
これらの手段は、例えば、記憶されたコンピュータ実行可能なインストラクションと、これらインストラクションを実行するためのコンピュータシステムのプロセッサとを使用することにより実施できる。コンピュータシステムは、ワークステーション、ポータブルコンピュータ、クライアント−サーバーシステム、或いはネットワーク編成のコンピュータ、記憶媒体等の組合せでよい。
【００２２】
同様に、コンピュータシステムは、プロセッサと、このプロセッサに接続されたメモリとを備えている。メモリには、インストラクションが記憶され、プロセッサにおいてそれらのインストラクションが実行されるときに、方法は、
明示的ソフトウェア制御のもとで、レイテンシの長いインストラクションに関連したアイテムが入手できるかどうか判断するためのステップと、
次のうちの１つを遂行するステップであって、
（ａ）前記判断に続いて、レイテンシの長いインストラクションに関連したアイテムが入手できないことが分かると、明示的ソフトウェア制御のもとで、ヘルパーサブスレッドを実行し、そして
ヘルパーサブスレッドの実行の完了に続いて前記アイテムの実際の値を使用してオリジナルコードセグメントを実行し、
（ｂ）前記判断に続いて、レイテンシの長いインストラクションに関連したアイテムが入手できることが分かると、前記アイテムの実際の値を使用してオリジナルコードセグメントを実行する、
のうちの１つを遂行するステップと、
を備えている。
【００２３】
又、コンピュータプログラム製品は、
明示的ソフトウェア制御のもとで、レイテンシの長いインストラクションに関連したアイテムが入手できるかどうか判断するためのステップと、
次のうちの１つを遂行するステップであって、
（ａ）前記判断に続いて、レイテンシの長いインストラクションに関連したアイテムが入手できないことが分かると、明示的ソフトウェア制御のもとで、ヘルパーサブスレッドを実行し、そして
ヘルパーサブスレッドの実行の完了に続いて前記アイテムの実際の値を使用してオリジナルコードセグメントを実行し、
（ｂ）前記判断に続いて、レイテンシの長いインストラクションに関連したアイテムが入手できることが分かると、前記アイテムの実際の値を使用してオリジナルコードセグメントを実行する、
のうちの１つを遂行するステップと、
を備えた方法のためのコンピュータ読み取り可能なコードを記憶し又は搬送するように構成された媒体を備えている。
【発明を実施するための最良の形態】
【００２４】
添付図面において、同じ参照番号をもつ要素は、同じ又は同様の要素である。又、参照番号の最初の数字は、その参照番号に関連した要素が最初に現われる図面番号を示す。
【００２５】
本発明の一実施形態によれば、スレッドにおけるレイテンシの長いインストラクションが例えばデータを待機している間に有用な作業を遂行するヘルパーサブスレッドが実行される。以下に詳細に説明するように、ヘルパーサブスレッドの実行は、明示的ソフトウェア制御のもとで遂行される。
【００２６】
ヘルパーサブスレッド１４０を伴う単一スレッドコードシーケンスにおける一連のソフトウェアインストラクションがコンピュータシステム１００のプロセッサ１７０において実行される。単一スレッドコードシーケンス１４０における一連のソフトウェアインストラクションを実行すると、コンピュータシステム１００は、例えば、（ｉ）レイテンシの長いインストラクションにより与えられるデータが入手できるかどうか判断し、そしてデータが入手できないときに、（ii）コンピュータシステム１００の状態のスナップショットを撮って、そのスナップショットの状態へロールバックするための能力を維持し、（iii）ヘルパーサブスレッドにおけるヘルパーインストラクションを実行し、そして（iv）ヘルパーサブスレッドにおけるヘルパーインストラクションの実行が完了したときにスナップショット状態へロールバックして、実行を継続するようにさせる。
【００２７】
一実施形態において、ヘルパーサブスレッドは、レイテンシの長いインストラクションが完了するのを待機しながら、データをプリフェッチする。ヘルパーサブスレッドの実行により検索されるデータは、例えば、プロセッサ１７０のスナップショット状態に影響を及ぼさない。ヘルパーサブスレッドの実行により検索されるデータは、スナップショット状態から実行が継続するときにインストラクションレベルの並列性を高めることができる。
【００２８】
ユーザは、ソースプログラム１３０において明示的ソフトウェア制御を使用してヘルパーサブスレッドの実行を制御することができる。或いは又、例えば、コンパイラー又は最適化インタープリターは、ソースプログラム１３０を処理する際に、レイテンシの長いインストラクションが予想されるポイントにおいてヘルパーサブスレッドにわたって明示的ソフトウェア制御を与えるインストラクションを挿入することができる。
【００２９】
コンパイラー又は最適化インタープリターは、結局のところ、特定のインストラクションが所与の実行に対して長いレイテンシをもつかどうか分からないことがあるので、インストラクションがソフトウェア制御のもとで長いレイテンシを経験するかどうかチェックする能力は、特定のインストラクションが長いレイテンシを経験するときだけヘルパーサブスレッドを実行することを保証する。従って、以下により完全に説明するように、ヘルパーサブスレッドは、長いレイテンシが予想されるポイントに挿入されるが、長いレイテンシに関連したデータ、機能的ユニット、又は他のファクタが入手できる場合には、ヘルパーサブスレッドを実行せずにコードが継続される。
【００３０】
より詳細には、一実施形態において、プロセス２００は、選択された位置にヘルパーサブスレッドを挿入するようにプログラムコードを変更するのに使用される。レイテンシの長いインストラクションのチェックオペレーション２０１において、インストラクションの実行が多数のプロセッササイクルを必要とすることが予想されるかどうかの判断がなされる。インストラクションが多数のプロセッササイクルを必要とすることが予想されない場合には、処理が通常に続けられ、プログラムコードのこのポイントにヘルパーサブスレッドを含むようにコードが変更されない。逆に、インストラクションが多数のプロセッササイクルを必要とすることが予想される場合には、処理がヘルパーサブスレッドの明示的ソフトウェア制御オペレーション２０２へ移行し、そこで、ヘルパーサブスレッドの実行の明示的ソフトウェア制御のためのインストラクションがソースプログラム１３０に含まれる。
【００３１】
この実施形態では、実行時にリソース／情報入手性チェックオペレーション２１０を遂行する命令（１つ又は複数）がソースプログラム１３０に追加される。以下により完全に説明するように、このインストラクションの実行は、ヘルパーサブスレッドが実行されるかどうかについての明示的制御をプログラムに与える。必要なリソース又は情報が入手できる場合には、処理が通常に続けられる。逆に、必要なリソース又は情報が入手できない場合には、リソース／情報入手性チェックオペレーション２１０は、ヘルパーサブスレッドオペレーション２１１へ処理を移行させる。
【００３２】
ヘルパーサブスレッドオペレーション２１１において、この実施形態では、ヘルパーサブスレッドの実行に応答して上述したオペレーション（ii）から（iv）が遂行されるように、インストラクションが含まれる。より詳細には、ソフトウェアインストラクションは、状態のスナップショットを撮るようにプロセッサ１７０に指令し、そしてその状態へのその後の全ての変更を管理して、必要に応じて、プロセッサ１７０がスナップショットの時間にその状態に復帰できるようにする。
【００３３】
撮られるスナップショットは、捕えられる状態に依存する。一実施形態では、状態がシステム状態である。別の実施形態では、状態がマシン状態であり、そして更に別の実施形態では、状態がプロセッサ状態である。各々の場合に、後続オペレーションが同等である。
【００３４】
スナップショットに続いて、ヘルパーコードシーケンスが実行される。ヘルパーコードシーケンスは、長いレイテンシを生じさせたインストラクションの結果を要求しないことに注意されたい。ヘルパーコードシーケンスの実行が完了すると、状態はスナップショット状態へロールバックして、実行が継続される。
【００３５】
ヘルパーコードシーケンスの明示的ソフトウェア制御が有益であるためには、ソフトウェアアプリケーションは、長いレイテンシの後に結果が得られるオペレーションを有するのが理想的である。最も一般的な原因は、キャッシュを頻繁にミスするロードのようなレイテンシの長いオペレーションである。
【００３６】
ソースプログラム１３０においてヘルパーサブスレッドをどこに挿入すべきか、例えば、その挿入ポイントを判断するための他の実施形態が、クインＡ．ヤコブソン氏の「METHOD AND STRUCTURE FOR CINVERTING DATA SPECURATION TO CONTROL SPECULATION」と題する共通に譲渡された米国特許出願第１０／３４９，４２５号に開示されている。この米国特許出願第１０／３４９，４２５号の発明の概要、図面の簡単な説明、詳細な説明、添付図面、特許請求の範囲、及び要約書の全体を参考としてここに援用する。
【００３７】
図３は、方法２００を使用して追加されるインストラクションの一実施形態に対して、ヘルパーサブスレッドの実行の明示的ソフトウェア制御を与える方法３００を示すより詳細なプロセスフローチャートである。方法３００を更に説明するために、種々の例に対する擬似コードを以下に示す。擬似コードセグメントの一例をテーブル１に示す。
テーブル１
１  Ｐｒｏｄｕｃｅｒ＿ＯＰ  Ａ、Ｂ  −＞  ％ｒＺ
・・・
２  Ｃｏｎｓｕｍｅｒ＿ＯＰ  ％ｒＺ、Ｃ−＞  Ｄ
・・・
【００３８】
行１（行番号は、擬似コードの部分ではなく、参照として使用されるに過ぎない）は、インストラクションＰｒｏｄｕｃｅｒ＿ＯＰで、これは、アイテムＡ及びＢを使用し、そしてオペレーションの結果をレジスタ％ｒＺに入れる。インストラクションＰｒｏｄｕｃｅｒ＿ＯＰの実行の結果は、長いレイテンシの後まで得られないことがある。
【００３９】
インストラクションＰｒｏｄｕｃｅｒ＿ＯＰは、インストラクションセットでサポートされるいかなるインストラクションでもよい。アイテムＡ及びＢは、この特定のオペレーションが２つの入力を必要とすることを指示するためのプレースホルダーとして単に使用される。
【００４０】
本発明の種々の実施形態は、単一の入力、又は３つ以上の入力を有するオペレーションにも適用できる。レジスタ％ｒＺは、いかなるレジスタでもよい。又、ここでは、インストラクションがアクションをとるか又は情報を使用することを述べるときには、当業者であれば、このようなアクション又は使用は、そのインストラクションの実行の結果であることが理解されよう。
【００４１】
行２は、インストラクションＣｏｎｓｕｍｅｒ＿ＯＰである。このインストラクションＣｏｎｓｕｍｅｒ＿ＯＰは、レジスタ％ｒＺに記憶されたインストラクションＰｒｏｄｕｃｅｒ＿ＯＰの実行の結果を使用する。アイテムＣ及びＤは、この特定のオペレーションが２つの入力％ＲＺ及びＣを必要とし且つ出力Ｄを有することを指示するためのプレースホルダーとして単に使用される。
【００４２】
この実施形態では、インストラクションＣｏｎｓｕｍｅｒ＿ＯＰは、一行の擬似コードで表わされるが、インストラクションＣｏｎｓｕｍｅｒ＿ＯＰは、インストラクションＰｒｏｄｕｃｅｒ＿ＯＰの結果を使用するコードセグメントを表わす。コードセグメントは、一行以上のソフトウェアコードを含んでもよい。
【００４３】
テーブル１の擬似コードに対して方法２００を使用することにより発生される擬似コードが、テーブル２の行Ｉｎｓｅｒｔ＿２１からＩｎｓｅｒｔ＿２６に表わされている。
テーブル２
１  Ｐｒｏｄｕｃｅｒ＿ＯＰ  Ａ、Ｂ  −＞  ％ｒＺ
・
・
・
Ｉｎｓｅｒｔ＿２１  ％ｒＺ入手不可の場合、予想へ分岐
・・・
Ｉｎｓｅｒｔ＿２２  オリジナル：
２  Ｃｏｎｓｕｍｅｒ＿ＯＰ  ％ｒＺ、Ｃ  −＞  Ｄ
・
・
・
Ｉｎｓｅｒｔ＿２３  予想；
Ｉｎｓｅｒｔ＿２４  チェックポイント、オリジナル
Ｉｎｓｅｒｔ＿２５  ＜ヘルパーサブスレッドコード＞
Ｉｎｓｅｒｔ＿２６  フェイル
この場合も、行番号は、擬似コードの部分ではなく、参照として使用されるに過ぎない。
【００４４】
この例では、行１は、挿入ポイントとして識別され、従って、行Ｉｎｓｅｒｔ＿２１、Ｉｎｓｅｒｔ＿２２、Ｉｎｓｅｒｔ＿２３、Ｉｎｓｅｒｔ＿２４、Ｉｎｓｅｒｔ＿２５、及びＩｎｓｅｒｔ＿２６を含むコードセグメントは、方法２００を使用して挿入される。このシーケンスのインストラクションの特定の実施は、（ｉ）ソースプログラム１３０に使用されるコンピュータプログラミング言語、（ii）コンピュータシステム１００に使用されるオペレーティングシステム、及び（iii）プロセッサ１７０のインストラクションセット、の幾つか又は全部を含むファクタに依存する。この開示に鑑み、当業者であれば、いかなる当該システムにおける変換も実施することができよう。
【００４５】
挿入される行について最初に説明し、次いで、方法３００について詳細に考える。行Ｉｎｓｅｒｔ＿２１は、実行時に、インストラクションが長いレイテンシを有するかどうか、例えば、インストラクションＰｒｏｄｕｃｅｒ＿ＯＰの実行の実際の結果が得られるかどうか判断する条件付きフロー制御ステートメントである。
【００４６】
インストラクションＰｒｏｄｕｃｅｒ＿ＯＰが長いレイテンシを有し、例えば、インストラクションＰｒｏｄｕｃｅｒ＿ＯＰの実行の結果が得られない場合には、処理が、行Ｉｎｓｅｒｔ＿２４であるラベル「予想」へと分岐する。さもなければ、処理は、行Ｉｎｓｅｒｔ＿２２であるラベル「オリジナル」を経て行２へ継続する。インストラクションＰｒｏｄｕｃｅｒ＿ＯＰの実行が長いレイテンシを有するかどうかの判断はランタイムに行われ、従って、インストラクションＰｒｏｄｕｃｅｒ＿ＯＰの実行の結果を事前に知ることに依存しない。
【００４７】
行Ｉｎｓｅｒｔ＿２４は、スナップショット状態を撮影し、そして状態をスナップショット状態へロールバックする能力を維持するようにプロセッサ１７０に指令するインストラクションである。この例では、チェックポイントインストラクションが使用される。
【００４８】
チェックポイントインストラクションに関連した方法及び構造の詳細な説明は、２００４年１月２３日に出願されたマーク・トレンブレイ、クインＡ．ヤコブソン、シャイレンダー・チャウドリー、マークＳ．モイア、及びマウライスＰ．ハーリー氏の「Selectively Unmarking Load-Marked Cache Lines During Transactional Program Execution」と題する共通に譲渡された米国特許出願第１０／７６４，４１２号に開示されている。この米国特許出願第１０／７６４，４１２号の発明の概要、図面の簡単な説明、詳細な説明、添付図面、特許請求の範囲、及び要約書の全体を参考としてここに援用する。
【００４９】
この実施形態では、チェックポイントインストラクションのシンタックスは、次の通りである。
ｃｈｅｃｋｐｏｉｎｔ、＜ｌａｂｅｌ＞
但し、インストラクション「チェックポイント」の実行は、プロセッサがこのスレッドの状態のスナップショットを撮るようにさせる。ラベル＜ｌａｂｅｌ＞は、チェックポイント処理がフェイルした場合に暗示的に又は明確に処理が移行するところの位置である。
【００５０】
プロセッサが状態のスナップショットを撮った後に、プロセッサは、例えば、スナップ状態における各位置の新たなデータをバッファする。又、プロセッサは、別のスレッドが、状態のロールバックを妨げるオペレーションを実行するかどうか、例えば、チェックポイント処理された状態における位置に書き込みするか、又はチェックポイント処理された状態における位置に値を記憶するかも監視する。このようなオペレーションが検出された場合には、スペキュレーションワークがフラッシュされ、スナップショット状態が回復され、そして処理がラベル＜ｌａｂｅｌ＞へ分岐する。これは、チェックポイントの暗示的フェイルである。
【００５１】
チェックポイント処理の明示的フェイルは、行Ｉｎｓｅｒｔ＿２６のインストラクションであるステートメント「フェイル」の実行により生じる。ステートメント「フェイル」を実行すると、プロセッサは、状態をスナップショット状態に復帰させ、そしてラベル＜ｌａｂｅｌ＞へ分岐させる。
【００５２】
行Ｉｎｓｅｒｔ＿２５は、ヘルパーサブスレッド内にヘルパーインストラクションを構成するインストラクション又はコードセグメントである。サブスレッドに対して新たなレジスタセットが使用可能とされ、例えば、サブスレッドが新たなレジスタセットへデータをプリフェッチする。行Ｉｎｓｅｒｔ＿２５の実行が完了すると、インストラクション「フェイル」が実行され、これは、チェックポイント状態を回復させると共に、処理をラベル「オリジナル」へ移行させる。
【００５３】
テーブル２のコードセグメントがプロセッサ１７０において実行されるときに、方法３００が実行される。データ入手性チェックオペレーション３１０において、潜在的にレイテンシの長いインストラクションにより必要とされるか又は発生されるデータが入手できるかどうかのチェックが行われる。例えば、このインストラクションの結果が得られる場合には、データを得るのに必要な遅延を伴わずに実行を通常に続けることができる。従って、データを入手できるときには、チェックオペレーション３１０は、オリジナルコードセグメント３２４を実行するように処理を移行させる。さもなければ、レイテンシの長いインストラクションの結果が得られないときには、チェックオペレーション３１０は、ヘルパーサブスレッド３２０へ処理を移行させる。
【００５４】
ヘルパーサブスレッド３２０の一実施形態では、状態をチェックポイント処理するようにハードウェアを指令するオペレーション３２１は、現在状態のスナップショット、即ちスナップショット状態をプロセッサ１７０により撮影するようにさせる。状態チェックポイント処理オペレーション３２１が完了すると、処理は、オペレーション３２１から補助的オペレーションの実行３２２へ移行する。
【００５５】
補助的オペレーションの実行３２２は、ヘルパーオペレーションを実行し、例えば、データをプリフェッチするインストラクションのセットを実行する。完了時に、オペレーション３２２は、状態チェックポイント処理オペレーション３２３へロールバックするように移行する。
【００５６】
オペレーション３２３では、チェックポイント処理をフェイルさせたインストラクションが実行される。その結果、スナップショット状態が実際の状態として回復され、処理は、オリジナルコードの実行３２４へ移行する。オリジナルコードを実行するオペレーション３２４は、レイテンシの長いインストラクションからの実際の値を使用してオリジナルコードセグメントを実行する。
【００５７】
一実施形態では、チェックオペレーション３１０は、状態で分岐するインストラクションの実施形態、例えば、レジスタ否レディ状態で分岐するインストラクションを使用して実施される。レジスタ状態で分岐するインストラクションの実行は、このレジスタ状態で分岐するインストラクションがディスパッチされたときにプロセッサ１７０のスコアボード１７３をテストする。レジスタの状態がレディである場合には、実行が継続される。レジスタの状態が否レディである場合には、レジスタ状態で分岐するインストラクションで指定されたラベルへ実行が分岐する。レジスタ状態で分岐するインストラクションの一実施形態に対するフォーマットは、次の通りである。
Ｂｒａｎｃｈ＿ｉｆ＿ｎｏｔ＿ｒｅａｄｙ  ％ｒｅｇ  ｌａｂｅｌ
但し、
％ｒｅｇは、この実施形態ではハードウェアインストラクションスコアボードであるスコアボード１７３におけるレジスタであり、そして
ｌａｂｅｌは、コードセグメントにおけるラベルである。
【００５８】
このインストラクションでは、テーブル２の擬似コードは、次のようになる。
テーブル３
１  Ｐｒｏｄｕｃｅｒ＿ＯＰ  Ａ、Ｂ  −＞  ％ｒＺ
Ｉｎｓｅｒｔ＿３１  Ｂｒａｎｃｈ＿ｉｆ＿ｎｏｔ＿ｒｅａｄｙ  ％ｒＺ  予想
・・・
Ｉｎｓｅｒｔ＿２２  オリジナル：
２  Ｃｏｎｓｕｍｅｒ＿ＯＰ  ％ｒＺ、Ｃ  −＞  Ｄ
・
・
・
Ｉｎｓｅｒｔ＿２３  予想；
Ｉｎｓｅｒｔ＿２４  チェックポイント、オリジナル
Ｉｎｓｅｒｔ＿２５  ＜ヘルパーサブスレッドコード＞
Ｉｎｓｅｒｔ＿２６  フェイル
【００５９】
レジスタ状態で分岐するインストラクションを使用するコードは、ディスパッチグループ分けルール及びオペレーションの予想レイテンシを理解するのが重要である。否レディで分岐するインストラクションが、ロードインストラクションの直後に発行された場合には、このインストラクションは、通常、ロードを否レディとして見る。というのは、例えば、ロードは、レベル１のデータキャッシュヒットの場合でも３サイクルの最小レイテンシがあるからである。
【００６０】
状態情報に基づく新規な分岐インストラクションの詳細な説明が、マーク・トレンブレイ、シャイレンダー・チャウドリー、及びクインＡ．ヤコブソン氏の「METHOD AND STRUCTURE FOR EXPLICIT SOFTWARE CONTROL USING SCOREBOARD STATUS INFORMATION」と題する共通に出願され且つ共通に譲渡された米国特許出願第１１／ｘｘｘ，ｘｘｘ号（代理人ドケットNo.ＳＵＮ０４００６２）に開示されている。この米国特許出願の発明の概要、詳細な説明、特許請求の範囲、要約書、それらのセクションで引用される図面、及び図面の簡単な説明を参考としてここに援用する。
【００６１】
当業者であれば、この実施形態において、方法３００に関連して上述した個々のオペレーションは、コンピュータシステム１００のプロセッサ１７０でコンピュータプログラムインストラクションを実行することにより遂行されることが容易に理解されよう。一実施形態では、記憶媒体は、方法４４０（図４）のためのコンピュータ読み取り可能なプログラムコードをインストールしており、ここで、方法４４０は、方法３００の一実施例であり、コンピュータ読み取り可能なプログラムコードを実行すると、プロセッサ１７０は、上述した個々のオペレーションを遂行する。
【００６２】
一実施形態において、コンピュータシステム１００は、パーソナルコンピュータ又はワークステーションのようなハードウェアコンフィギュレーションである。しかしながら、別の実施形態では、コンピュータシステム１００は、クライアント−サーバーコンピュータシステム４００の一部分である。クライアント−サーバーコンピュータシステム４００又はスタンドアローンコンピュータシステム１００のいずれについても、メモリ１２０は、通常、メインメモリ４１０のような揮発性メモリと、ハードディスクドライブのような不揮発性メモリ４１１の両方を含む。
【００６３】
メモリ１２０は、図１には統合構造として示されているが、これは、メモリ１２０内の全てのメモリが同じ物理的位置にあることを要求するものとして解釈してはならない。メモリ１２０の全部又は一部分は、プロセッサ１７０とは異なる物理的位置にあってもよい。例えば、方法４４０は、プロセッサ１７０とは異なる位置に物理的に置かれたメモリ、例えば、メモリ５８４に記憶されてもよい。
【００６４】
プロセッサ１７０は、方法４４０を含むメモリに結合されねばならない。これは、クライアント−サーバーシステムにおいて達成することもできるし、或いは又、モデム及びアナログライン、又はデジタルインターフェイス及びデジタルキャリアラインを経て別のコンピュータへ至る接続により達成することもできる。例えば、メモリ１２０の全部又は一部分がワールドワイドウェブポータルにあり、一方、プロセッサ１７０が、例えば、パーソナルコンピュータにあってもよい。
【００６５】
より詳細には、コンピュータシステム１００は、一実施形態において、ポータブルコンピュータ、ワークステーション、サーバーコンピュータ、又は方法４４０を実行できる他の装置でよい。同様に、別の実施形態では、コンピュータシステム１００は、多数の異なるコンピュータ、ワイヤレス装置、サーバーコンピュータ、或いはここに述べる方法４４０を遂行するように相互接続されるこれら装置の希望の組合せで構成することもできる。
【００６６】
ここでは、コンピュータプログラム製品は、方法４４０のためのコンピュータ読み取り可能なコードを記憶又は搬送するように構成されるか、又は方法４４０のためのコンピュータ読み取り可能なコードが記憶された媒体を備えている。コンピュータプログラム製品の幾つかの例は、ＣＤ−ＲＯＭディスク、ＲＯＭカード、フロッピー（登録商標）ディスク、磁気テープ、コンピュータハードディスク、ネットワーク上のサーバー、及びコンピュータ読み取り可能なプログラムコードを表わすネットワークを経て送信される信号である。
【００６７】
ここでは、コンピュータメモリは、揮発性メモリ、不揮発性メモリ、或いはその２つの組合せを指す。同様に、コンピュータ入力ユニット、例えば、キーボード４１５及びマウス４１８、並びにディスプレイユニット４１６は、上述した装置又は同等の装置のいずれかに、各々、ここに述べる情報を入力し、又、ここに述べる情報を表示するのに必要な機能を与える特徴を指す。
【００６８】
この開示に鑑み、方法４４０は、ユーザにとって関心のあるオペレーティングシステム及びコンピュータプログラミング言語を使用する種々様々なコンピュータシステムコンフィギュレーションにおいて実施することができる。更に、方法４４０は、異なる装置のメモリに異なるモジュールとして記憶することができる。例えば、方法４４０は、最初に、サーバーコンピュータ４８０に記憶することができ、次いで、必要に応じて、方法４４０のモジュールをクライアント装置へ転送してクライアント装置で実行することができる。従って、方法４４０の一部分がサーバープロセッサ４８２で実行され、そして方法４４０の別の部分がクライアント装置のプロセッサで実行される。
【００６９】
更に別の実施形態では、方法４４０は、別のコンピュータシステムのメモリに記憶される。記憶された方法４４０は、ネットワーク４０４を経て、システム１００のメモリ１２０へ転送される。
【００７０】
方法４４０は、一実施形態では、コンピュータソースプログラム１３０を使用して実施される。コンピュータプログラムは、例えば、フロッピー（登録商標）ディスク又はコンパクトディスク（ＣＤ）のような任意の通常のデータキャリア、並びにハードディスクのような任意の通常のコンピュータシステムの記憶ファシリティに記憶されてもよい。それ故、本発明の一実施形態は、本発明の方法を実施するためのコンピュータソースプログラムを記憶するデータキャリアにも係る。又、本発明の別の実施形態は、コンピュータシステムを使用して方法４４０を実施する方法にも係る。本発明の更に別の実施形態は、方法４４０を実施するコンピュータプログラムが記憶された記憶媒体をもつコンピュータシステムにも係る。
【００７１】
方法４４０は、その一実施形態に関連して以上に説明したが、当業者であれば、本発明の精神及び範囲から逸脱せずにこの実施形態に対して変更をなし得ることが容易に理解されよう。
【００７２】
機能的ユニット、即ちレジスタファイル１７１及びスコアボード１７３は、例示に過ぎず、本発明を、図１に示す特定のレイアウトに限定するものではない。プロセッサ１７０は、単一チップ上に複数のプロセッサを含んでもよい。複数のプロセッサの各々は、独立したレジスタファイル及びスコアボードを有してもよいし、或いはレジスタファイル及びスコアボードが、あるやり方で、共有又は結合されてもよい。同様に、レジスタファイル１７１は、１つ以上のレジスタファイルで作られてもよい。又、スコアボード１７３の機能は、当業者に知られた種々様々なやり方で実施することができ、例えば、スコアボードに代わって、ハードウェア状態ビットをサンプリングすることができる。それ故、状態情報を得るためのスコアボードの使用は、例示に過ぎず、本発明を、スコアボードのみの使用に限定するものではない。
【図面の簡単な説明】
【００７３】
【図１】本発明の第１の実施形態に基づき補助的なオペレーションの明示的ソフトウェア制御を与えるヘルパーサブスレッドを伴う単一スレッドコードシーケンスを含むソースプログラムを備えたシステムを示すブロック図である。
【図２】本発明の一実施形態に基づきソースコンピュータプログラムの適切なポイントにヘルパーサブスレッドを伴う単一スレッドを挿入する一実施形態を示すプロセスフローチャートである。
【図３】本発明の一実施形態に基づきヘルパーサブスレッド及び補助的なオペレーションの明示的ソフトウェア制御のためのプロセスフローチャートである。
【図４】ヘルパーサブスレッドを伴う単一スレッドを含むソースプログラムを使用するための多数の別々の実施形態を示す高レベルネットワークシステム図である。
【図１】
2007532990.tif 000003
【図２】
2007532990.tif 000004
【図３】
2007532990.tif 000005
【図４】
2007532990.tif 000006