(57)【特許請求の範囲】
【請求項１】
起動ハードウエア・スレッドによって第一アシスト・ハードウエア・スレッドを起動するステップであって、前記第一アシスト・ハードウエア・スレッドは第一コード・セグメントを実行する、前記起動するステップと、
一つ以上の実行中のアシスト・ハードウエア・スレッドを示す、アシスト・スレッド実行インジケータを設定するステップと、
第二アシスト・ハードウエア・スレッドを起動するステップであって、前記第二アシスト・ハードウエア・スレッドは第二コード・セグメントを実行する、前記起動するステップと、
前記第一アシスト・ハードウエア・スレッドおよび前記第二アシスト・ハードウエア・スレッドの両方が終了していることを示す、前記アシスト・スレッド実行インジケータの変化を識別するステップと、
前記アシスト・スレッド実行インジケータの前記変化を識別するのに応じて、アシスト・ハードウエア・スレッドの実行結果を処理するステップと、
前記アシスト・スレッド実行インジケータを包含するアシスト・スレッド状態レジスタが、前記第一アシスト・ハードウエア・スレッドの実行を完了するステップと、
前記第一アシスト・ハードウエア・スレッドが前記第二アシスト・ハードウエア・スレッドはまだ実行中であることを検知するのに応じて、前記第一アシスト・ハードウエア・スレッドによって、前記アシスト・ハードウエア・スレッドのビットを変更しない決定をするステップと、
前記第一アシスト・ハードウエア・スレッドの前記完了の後、前記第二アシスト・ハードウエア・スレッドの実行を完了するステップと、
前記第二アシスト・ハードウエア・スレッドが前記第一アシスト・ハードウエア・スレッドは実行していないことを検知するのに応じて、前記第二アシスト・ハードウエア・スレッドによって、前記アシスト・ハードウエア・スレッドのビットを変更する決定をするステップと、
前記第二アシスト・ハードウエア・スレッドによって、前記アシスト・スレッド状態レジスタに包含されるアシスト・スレッド状態フィールド中に終了インジケータを格納するステップであって、前記終了インジケータは前記第二アシスト・ハードウエア・スレッドが終了した理由を表す、前記格納するステップと、
を含む、マシン実装された方法。
【請求項２】
前記第一アシスト・ハードウエア・スレッドを起動する前記起動ハードウエア・スレッドを呼び出すソフトウエア・プログラムは、前記アシスト・スレッド実行インジケータへの一回の読み取りオペレーションを実行することによって、前記第一アシスト・ハードウエア・スレッドおよび前記第二アシスト・ハードウエア・スレッドの両方が実行を停止したことを判定する、請求項１に記載の方法。
【請求項３】
前記第二アシスト・ハードウエア・スレッドが前記第一アシスト・ハードウエア・スレッドは実行していないのを検知するのに応じて、前記方法は、
前記第二アシスト・ハードウエア・スレッドによって、前記アシスト・スレッド状態レジスタに包含される停止アシスト・スレッド状態フィールド中に停止アシスト・スレッド・パラメータ値を格納するステップ、
をさらに含み、
前記停止アシスト・スレッド・パラメータ値は、前記第二アシスト・ハードウエア・スレッドが前記第二コード・セグメントの実行を成功裏に完了したかどうかを表す、
請求項１に記載の方法。
【請求項４】
前記第一コード・セグメントおよび前記第二コード・セグメントはソフトウエア・プログラムに包含され、前記方法は、
前記起動ハードウエア・スレッドによって、前記ソフトウエア・プログラムに包含されている、アシスト・スレッドが実行中である条件での分岐（ＢＣＥ）命令を実行するステップをさらに含み、
前記実行するステップは、
前記ＢＣＥ命令から複数の汎用レジスタ番号を抜き出すステップであって、前記複数の汎用レジスタ番号は、アシスト・プロセッサ番号およびターゲット・アドレスを包含する複数の汎用レジスタを識別する、前記抜き出すステップと、
前記複数の汎用レジスタから、前記アシスト・プロセッサ番号および前記ターゲット・アドレスを読み出すステップと、
前記読み出されたアシスト・プロセッサ番号が、前記第一アシスト・ハードウエア・スレッドに対応することの判定に応じて、前記第一アシスト・ハードウエア・スレッドが実行中かどうかを判定するステップと、
前記第一アシスト・ハードウエア・スレッドが実行中との判定に応じて、前記ターゲット・アドレスに分岐するステップと、
前記第一アシスト・ハードウエア・スレッドが実行していないとの判定に応じて、前記ＢＣＥ命令に続く次の命令を実行するステップと、
をさらに含む、
請求項１に記載の方法。
【請求項５】
前記起動ハードウエア・スレッドは、第一実行ユニットを包含し、
前記第一アシスト・ハードウエア・スレッドは、前記第一実行ユニットとは異なる第二実行ユニットを包含する
請求項１に記載の方法。
【請求項６】
前記第一コード・セグメントおよび前記第二コード・セグメントはソフトウエア・プログラムに包含されており、前記方法は、
前記起動ハードウエア・スレッドによって、前記ソフトウエア・プログラムに包含されている、アシスト・スレッドが実行中ならば状態レジスタを設定する（ＣＲＳＥ）命令を実行するステップをさらに含み、
前記実行するステップは
前記ＣＲＳＥ命令から複数の汎用レジスタ番号を抜き出すステップであって、前記複数の汎用レジスタ番号は、アシスト・プロセッサ番号および状態レジスタ・ビット番号を包含する複数の汎用レジスタを識別する、前記抜き出すステップと、
前記複数の汎用レジスタから、前記アシスト・プロセッサ番号および前記状態レジスタ・ビット番号を読み出すステップと、
前記読み出されたアシスト・プロセッサ番号が、前記第一アシスト・ハードウエア・スレッドに対応することの判定に応じて、前記第一アシスト・ハードウエア・スレッドが実行中かどうかを判定するステップと、
前記第一アシスト・ハードウエア・スレッドが実行中であるとの判定に応じて、前記読み出された状態ビットレジスタ番号に対応する状態ビットを、状態レジスタにおいて設定するステップと、
前記第一アシスト・ハードウエア・スレッドが実行していないとの判定に応じて、前記読み出された状態ビットレジスタ番号に対応する前記状態ビットを、前記状態レジスタ中においてクリアするステップと、
をさらに含む、
請求項１に記載の方法。
【請求項７】
前記ソフトウエア・プログラムによって、前記状態ビットが設定されていることを検知するステップと、
前記状態ビットが設定されていることの検知に応じて、ソフトウエア・コードを実行するステップと、
をさらに含む、請求項６に記載の方法。
【請求項８】
前記第一アシスト・ハードウエア・スレッドが前記第二アシスト・ハードウエア・スレッドを呼び出す、請求項１に記載の方法。
【請求項９】
前記起動ハードウエア・スレッドが前記第二アシスト・ハードウエア・スレッドを呼び出す、請求項１に記載の方法。
【請求項１０】
一つ以上のプロセッサ、
前記プロセッサの少なくとも一つに連結されたメモリ、および
前記メモリに格納される命令のセット、
を含む情報処理システムであって、
前記請求項１乃至請求項７のいずれかに記載の方法のすべてのステップの処理を遂行するため、前記プロセッサの少なくとも一つによって実行される、
前記情報処理システム。
【請求項１１】
起動ハードウエア・スレッドと、
前記起動ハードウエア・スレッドに起動された第一アシスト・ハードウエア・スレッドであって、前記第一アシスト・ハードウエア・スレッドは第一コード・セグメントを実行する、前記第一アシスト・ハードウエア・スレッドと、
前記第一アシスト・ハードウエア・スレッドを起動するのに応じて、前記起動ハードウエア・スレッドによって設定されるアシスト・スレッド実行インジケータと、
前記起動ハードウエア・スレッドによって起動された第二アシスト・ハードウエア・スレッドであって、前記第二アシスト・ハードウエア・スレッドは第二コード・セグメントを実行する、前記第二アシスト・ハードウエア・スレッドと、
を含むプロセッサであって、
前記起動ハードウエア・スレッドは、前記アシスト・スレッド実行インジケータの変化を検知し、前記変化は、前記第一アシスト・ハードウエア・スレッドおよび前記第二アシスト・ハードウエア・スレッドの両方が終了したことを示すことと、
前記アシスト・スレッド実行インジケータが前記変化を識別することと、
前記アシスト・スレッド実行インジケータが前記変化を識別するのに応じて、アシスト・ハードウエア・スレッドの実行結果を処理することと、
前記アシスト・スレッド実行インジケータを包含するアシスト・スレッド状態レジスタが、前記第一アシスト・ハードウエア・スレッドの実行を完了することと、
前記第一アシスト・ハードウエア・スレッドが前記第二アシスト・ハードウエア・スレッドはまだ実行中であることを検知するのに応じて、前記第一アシスト・ハードウエア・スレッドによって、前記アシスト・ハードウエア・スレッドのビットを変更しない決定することと、
前記第一アシスト・ハードウエア・スレッドの前記完了の後、前記第二アシスト・ハードウエア・スレッドの実行を完了することと、
前記第二アシスト・ハードウエア・スレッドが前記第一アシスト・ハードウエア・スレッドは実行していないことを検知するのに応じて、前記第二アシスト・ハードウエア・スレッドによって、前記アシスト・ハードウエア・スレッドのビットを変更する決定することと、
前記第二アシスト・ハードウエア・スレッドによって、前記アシスト・スレッド状態レジスタに包含されるアシスト・スレッド状態フィールド中に終了インジケータを格納するステップであって、前記終了インジケータは前記第二アシスト・ハードウエア・スレッドが終了した理由を表す、前記格納をする、
前記プロセッサ。
【請求項１２】
ソフトウエア・プログラムが、前記アシスト・スレッド実行インジケータへの一回の読み取りオペレーションを実行することによって、前記第一アシスト・ハードウエア・スレッドおよび前記第二アシスト・ハードウエア・スレッドの両方が実行を停止したことを判定する、請求項１１に記載のプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、ハイパーバイザの関与なしに、アシスト・ハードウエア・スレッドの状態を追跡することに関する。さらに具体的には、本開示は、アシスト・スレッド状態レジスタを用いてアシスト・ハードウエア・スレッドのアクテビティを追跡する起動ハードウエア・スレッドに関する。
【背景技術】
【０００２】
昨今のコンピュータ・システムの多くは、独立した命令ストリームを実行するマルチスレッド・プロセッサを包含する。あるハードウエア・スレッド上で実行しているソフトウエア・プログラムは、監視プログラム（例、ハイパーバイザ）に対し、別のハードウエア・スレッドの制御を要求することができる。例えば、ソフトウエア・プログラムは、他のハードウエア・スレッドにコード・セグメント（例、サブルーチン）を実行してもらうため、監視プログラムに別のハードウエア・スレッドに対する要求を送信することができる。監視プログラムは、ハードウエア・スレッドが利用可能かどうかチェックし、利用可能な場合、そのソフトウエア・プログラムに対し別のハードウエア・スレッドを割り当てる。これを受け、ソフトウエア・プログラムは、その別のハードウエア・スレッドを用いてコード・セグメントを実行する。多くの場合、ソフトウエア・プログラムは、限られた時間の間その別のハードウエア・スレッドを利用する。しかして、その別のハードウエア・スレッドがコードの実行を完了すると、監視プログラムはその別のハードウエア・スレッドのリソースをソフトウエア・プログラムから解放する。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
監視プログラムの関与なしに、アシスト・ハードウエア・スレッドの状態を追跡するための方法、さらに具体的には、起動ハードウエア・スレッドが、アシスト・スレッド状態レジスタを利用してアシスト・ハードウエア・スレッドのアクテビティを追跡するための方法、情報処理システム、およびプロセッサを提供する。
【課題を解決するための手段】
【０００４】
プロセッサは起動ハードウエア・スレッドを包含し、該スレッドは、第一コード・セグメントを実行するため第一アシスト・ハードウエア起動する。次いで、起動ハードウエア・スレッドは、第一アシスト・ハードウエア・スレッドを起動したのに応じて、アシスト・スレッド実行インジケータを設定する。設定されたアシスト・スレッド実行インジケータは、アシスト・ハードウエア・スレッドが実行中かどうかを表示する。第二アシスト・ハードウエア・スレッドが起動され、第二コード・セグメントの実行を開始する。これを受け、起動ハードウエア・スレッドは、アシスト・スレッド実行インジケータの変化を検知し、該インジケータは、第一アシスト・ハードウエア・スレッドおよび第二アシスト・ハードウエア・スレッドの両方が終了したときそのことを示す。しかして、起動ハードウエア・スレッドは、両方のアシスト・ハードウエア・スレッドが終了したのに応じ、アシスト・ハードウエア・スレッドの実行結果を評価する。
【０００５】
前述は要約であり、しかして必然的に、単純化、一般化、細部の省略を含み、それ故、当業者は、上記の要約が例示のためだけのものであり、決して限定を意図したものでないことをよく理解していよう。本開示の他の態様、発明的特質、および利点は請求項によってだけ定義され、これらは以下に述べる非限定的な詳細説明の中で明らかにされよう。
【図面の簡単な説明】
【０００６】
【図１】あるプロセッサのソフトウエア・プログラムが、マルチスレッド・プロセッサ上でアシスト・ハードウエア・スレッドを起動するのを示す例示図である。
【図２】アシスト・スレッド状態レジスタ（ＡＴＳＲ：ａｓｓｉｓｔ  ｔｈｒｅａｄ  ｓｔａｔｕｓ  ｒｅｇｉｓｔｅｒ）を示す例示図である。
【図３】図３Ａは、ソフトウエア・プログラムがアシスト・ハードウエア・スレッドの状態を管理するため用いるソフトウエア状態格納領域を示す例示図であり、図３Ｂは、起動ハードウエア・スレッドがアシスト・ハードウエア・スレッドの状態を管理するため用いるハードウエア状態格納領域を示す例示図である。
【図４】アシスト・ハードウエア・スレッドを呼び出している起動ハードウエア・スレッドの中で実施されるステップを示す例示フローチャートである。
【図５】ソフトウエア・コードを実行しているアシスト・ハードウエア・スレッドの中で実施されるステップを示す例示フローチャートである。
【図６】分岐開始軽量（ＢＡＩＬ：ｂｒａｎｃｈ  ａｎｄ  ｉｎｉｔｉａｔｅ  ｌｉｇｈｔｗｅｉｇｈｔ）命令を示す例示図である。
【図７】分岐開始重量（ＢＡＩＨ：ｂｒａｎｃｈ  ａｎｄ  ｉｎｉｔｉａｔｅ  ｈｅａｖｙｗｅｉｇｈｔ）命令を示す例示図である。
【図８】アシスト・スレッド停止（ＳＡＴ：ｓｔｏｐ  ａｓｓｉｓｔ  ｔｈｒｅａｄ）命令を示す例示図である。
【図９】分岐開始命令の過程で、起動ハードウエア・スレッドがアシスト・スレッド・レジスタにコピーするレジスタ値を示す例示図である。
【図１０】アシスト・スレッドが実行中である条件での分岐（ＢＣＥ：ｂｒａｎｃｈ  ｃｏｎｄｉｔｉｏｎａｌ  ｉｆ  ａｓｓｉｓｔ  ｔｈｒｅａｄ  ｅｘｅｃｕｔｉｎｇ）命令の実行において実施されるステップを示す例示フローチャートである。
【図１１】アシスト・スレッドが実行中ならば状態レジスタを設定する（ＣＲＳＥ：ｃｏｎｄｉｔｉｏｎ  ｒｅｇｉｓｔｅｒ  ｓｅｔ  ｉｆ  ａｓｓｉｓｔ  ｔｈｒｅａｄ  ｅｘｅｃｕｔｉｎｇ）命令の実行において実施されるステップを示す例示フローチャートである。
【図１２】アシスト・スレッドが実行中である条件で分岐する（ＢＣＥ）命令を示す例示図である。
【図１３】アシスト・スレッドが実行中ならば状態レジスタを設定する（ＣＲＳＥ）命令を示す例示図である。
【図１４】起動ハードウエア・スレッドが、複数のアシスト・ハードウエア・スレッドを呼び出しているのを示す例示図である。
【図１５】起動ハードウエア・スレッドがアシスト・ハードウエア・スレッドを呼び出し、今度はそのアシスト・ハードウエア・スレッドが他のアシスト・ハードウエア・スレッドを呼び出しているのを示す例示図である。
【図１６】起動ハードウエア・スレッドが、異なるプロセッサ上のアシスト・ハードウエア・スレッドを起動しているのを示す例示図である。
【図１７】本明細書に記載した方法が実行可能な情報処理システムのブロック図の例である。
【発明を実施するための形態】
【０００７】
当業者は、添付の図面を参照することにより、本開示をよりよく理解し、その数々の目的、特質、および利点を明らかにすることができよう。
【０００８】
本開示のさまざまな実施形態の徹底的理解を提供するため、以下の記述および図面においていくつか特定の詳細を説明する。本開示の各種実施形態を不必要に分かりにくくするのを避けるため、以下の開示では、コンピューティングおよびソフトウエア技術によく関連付けられる特定の周知の細目は説明しない。さらに、当業者は、以降で述べる細部の一つ以上が無くても、本開示の他の実施形態を実行できることを理解するであろう。最後に、以下の開示において、さまざまな方法が、ステップおよびシーケンスを参照しながら説明されるが、かかる説明は、本開示の実施形態の明快な実現を提供するためのものであって、これらステップおよびステップのシーケンスが、本開示の遂行に必須であると見なすべきではない。それよりむしろ、以下は本開示のある例の詳細な説明を提供することを意図したものであり、本開示自体を限定すると理解すべきではない。それどころか、いくつもの変形が本開示の範囲内に含まれ得、この範囲は本明細書に添付された請求項によって定義される。
【０００９】
当業者ならよく理解するであろうように、本開示の態様は、システム、方法、またはコンピュータ・プログラムとして具現することができる。従って、本開示の態様は、全体がハードウエアの実施形態、全体がソフトウエアの実施形態（ファームウエア、常駐ソフトウエア、マイクロコードなどを含む）、または本明細書では全て一般に、「回路」、「モジュール」または「システム」と呼ぶこともある、ソフトウエアおよびハードウエア態様を組み合わせた実施形態の形を取ることができる。さらに、本開示の態様は、媒体内に具現されたコンピュータ可読のプログラム・コードを有する一つ以上のコンピュータ可読媒体（群）中に体現されたコンピュータ・プログラムの形を取ることもできる。
【００１０】
一つ以上のコンピュータ可読媒体（群）の任意の組み合わせを用いることができる。コンピュータ可読媒体は、コンピュータ可読信号媒体、またはコンピュータ可読記憶媒体とすることができる。コンピュータ可読記憶媒体は、例えば、以下に限らないが、電子的、磁気的、光学的、電磁気的、赤外線的、または半導体のシステム、装置、またはデバイス、あるいはこれらの任意の適切な組み合わせとすることができる。コンピュータ可読記憶媒体のさらに具体的な例（限定的リスト）には、一つ以上の配線を有する電気接続、携帯コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ（ＲＡＭ：ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）、読み取り専用メモリ（ＲＯＭ：ｒｅａｄ−ｏｎｌｙ  ｍｅｍｏｒｙ）、消去可能プログラム可能読み取り専用メモリ（ＥＰＲＯＭ（ｅｒａｓａｂｌｅ  ｐｒｏｇｒａｍｍａｂｌｅ  ｒｅａｄ−ｏｎｌｙ  ｍｅｍｏｒｙ）またはフラッシュ・メモリ）、光ファイバ、携帯コンパクト・ディスク読み取り専用メモリ（ＣＤＲＯＭ：ｃｏｍｐａｃｔ  ｄｉｓｃ  ｒｅａｄ−ｏｎｌｙ  ｍｅｍｏｒｙ）、光記憶デバイス、磁気記憶デバイス、またはこれらの任意の適切な組み合わせが包含されよう。本文書の文脈において、コンピュータ可読記憶媒体は、命令実行システム、装置、またはデバイスによってまたはこれらに関連させて使用するためのプログラムを、収容または格納できる任意の有形媒体とすることができる。
【００１１】
コンピュータ可読信号媒体には、例えばベースバンド中または搬送波の一部として、信号中に具現されたコンピュータ可読プログラム・コードを有する伝播データ信号を含めることができる。かかる伝搬信号は、以下に限らないが、電磁気的、光学的、またはこれらの任意の適切な組み合わせを含め、任意のさまざまな形をとることができる。コンピュータ可読信号媒体は、コンピュータ可読記憶媒体でなく、命令実行システム、装置、またはデバイスによってまたはこれらに関連させて使用するためのプログラムを、通信、伝搬、または移送できる、任意のコンピュータ可読媒体であり得る。
【００１２】
コンピュータ可読媒体中に具現されたプログラム・コードは、以下に限らないが、無線、有線ライン、光ファイバ・ケーブル、ＲＦなど、またはこれらの任意の適切な組み合わせを含め、任意の適切な媒体を用いて送信することができる。
【００１３】
本開示の態様のオペレーションを実行するためのコンピュータ・プログラム・コードは、Ｊａｖａ（Ｒ）、Ｓｍａｌｌｔａｌｋ（Ｒ）、Ｃ＋＋などのオブジェクト指向プログラミング言語、および、“Ｃ”プログラミング言語または類似のプログラミング言語などの従来式手続き型プログラミング言語を含め、一つ以上のプログラミング言語の任意の組合せで書くことができる。このプログラム・コードは、全体をユーザのコンピュータで、一部をユーザのコンピュータで、単独型ソフトウエア・パッケージとして実行することができ、一部をユーザのコンピュータで他の部分を遠隔コンピュータで、または全体を遠隔のコンピュータまたはサーバで実行することができる。後者のシナリオでは、遠隔コンピュータを、ローカル・エリア・ネットワーク（ＬＡＮ：ｌｏｃａｌ  ａｒｅａ  ｎｅｔｗｏｒｋ）または広域ネットワーク（ＷＡＮ：ｗｉｄｅ  ａｒｅａ  ｎｅｔｗｏｒｋ）を含む任意の種類のネットワークを介してユーザのコンピュータに接続することができ、あるいは（例えば、インターネット・サービス・プロバイダを使いインターネットを介し）外部のコンピュータへの接続を行うことができる。
【００１４】
本開示の実施形態による方法、装置（システム）およびコンピュータ・プログラムのフローチャート説明図もしくはブロック図またはその両方を参照しながら本開示の態様を以下に説明する。フローチャート説明図もしくはブロック図あるいはその両方の各ブロック、および、フローチャート説明図もしくはブロック図またはその両方のブロックの組合せは、コンピュータ・プログラム命令によって実行可能であることが理解されよう。これらのコンピュータ・プログラム命令を、汎用コンピュータ、特殊用途コンピュータ、又は他のプログラム可能データ処理装置のプロセッサに供給してマシンを形成し、コンピュータ又は他のプログラム可能データ処理装置のプロセッサを介して実行されるこれらの命令が、フローチャートもしくはブロック図またはその両方のブロックまたはブロック群中に規定された機能／処理を実施するための手段を生成するようにすることができる。また、これらのコンピュータ・プログラム命令を、コンピュータ、他のプログラム可能データ処理装置、または他のデバイスに対し特定の仕方で機能するよう命令できるコンピュータ可読媒体に格納し、該コンピュータ可読媒体に格納された命令が、フローチャートもしくはブロック図またはその両方のブロックまたはブロック群中に規定された機能／処理を実施する命令群を包含する製品を形成するようにすることができる。
【００１５】
同様に、コンピュータ・プログラム命令を、コンピュータ、他のプログラム可能データ処理装置、または他のデバイスにロードして、これらコンピュータ、他のプログラム可能装置、または他のデバイス上で一連のオペレーション・ステップを遂行させてコンピュータ実行のプロセスを生成し、これらコンピュータまたは他のプログラム可能装置で実行される命令が、フローチャートもしくはブロック図またはその両方のブロックまたはブロック群中に規定された機能／処理を実施するためのプロセスを提供するようにすることもできる。
【００１６】
以下の詳細説明は、一般的には前述の本開示の要約をたどり、必要に応じ、本開示のさまざまな態様および実施形態の定義をさらに説明、展開することにする。
【００１７】
図１は、あるプロセッサのソフトウエア・プログラムが、ハイパーバイザを用いずに、マルチスレッド・プロセッサ上でアシスト・ハードウエア・スレッドを起動するのを示す例示図である。プロセッサ１００は、ソフトウエア・プログラム１１０が実行を開始すると、ソフトウエア・プログラム１１０に対し起動ハードウエア・スレッド１２０を割り当てる。ソフトウエア・プログラム１１０が、起動ハードウエア・スレッド１２０上で命令１０５を実行する際に、命令１０５の一つに「分岐開始命令」があり、これは、起動ハードウエア・スレッド１２０に対し、例えば、ソフトウエア・プログラム１１０の命令のサブセット（命令１４５）を実行するなどのため、別のハードウエア・スレッドが利用可能かどうかをチェックすることを命令する。
【００１８】
本開示では、２種類の分岐開始命令を説明し、これらは分岐開始軽量（ＢＡＩＬ）命令および分岐開始重量（ＢＡＩＨ）命令である。本明細書で説明するように、ＢＡＩＬ命令とＢＡＩＨ命令との違いは、ＢＡＩＨ命令は、アシスト・ハードウエア・スレッドが実行を開始したとき、起動ハードウエア・スレッドの全ての格納オペレーションが、アシスト・ハードウエア・スレッドに可視であることを確実にすることである。しかるが故、ソフトウエア・プログラムがメモリ同期を必要とする場合、ソフトウエア・プログラムは、ＢＡＩＬ命令の代わりにＢＡＩＨ命令を用いることができる。これに対し、ソフトウエア・プログラムがメモリ同期を必要としない場合、ＢＡＩＬ命令はメモリ同期を保証しないがその代りより速く実行するので、ソフトウエア・プログラムは、ＢＡＩＨ命令の代わりにＢＡＩＬ命令を用いることができる。当業者は、起動ハードウエア・スレッドにアシスト・ハードウエア・スレッドを起動するよう命令するために、他の種類の分岐開始命令が利用可能なことをよく理解することができよう。
【００１９】
起動ハードウエア・スレッド１２０が、分岐開始命令を実行するとき、起動ハードウエア・スレッド１２０は、ハードウエア状態ストア１２５をチェックして別のハードウエア・スレッドが利用可能かどうかを判定する。例えば、プロセッサ１００には、一揃いのハードウエア・スレッドを包含させることができ、ハードウエア状態ストア１２５は、どのハードウエア・スレッドが利用可能かを示す情報を含む（さらなる詳細については、図３Ｂおよび対応する説明文を参照）。アシスト・ハードウエア・スレッドが利用可能な場合、起動ハードウエア・スレッド１２０は、アシスト・ハードウエア・スレッド１５０を呼び出し、起動スレッド・レジスタ１４０からアシスト・スレッド・レジスタ１７０にレジスタ値をコピーする。一つの実施形態において、起動ハードウエア・スレッド１２０が起動スレッド・レジスタ１４０からアシスト・スレッド・レジスタ１７０にコピーするレジスタ値は、分岐開始命令の種類、および命令パラメータ値によって決まる（さらなる詳細については、図６〜７および対応する説明文を参照）。一つの実施形態では、起動ハードウエア・スレッド１２０およびアシスト・ハードウエア・スレッド１５０は、各々、命令を実行するための専用の実行ユニットを有する。
【００２０】
起動ハードウエア・スレッド１２０は、ソフトウエア・プログラム１１０に対し、アシスト・スレッド状態レジスタ（ＡＴＳＲ）１３０が包含するアシスト・スレッド有効（ＡＴＶ：ａｓｓｉｓｔ  ｔｈｒｅａｄ  ｖａｌｉｄ）ビットを設定することによって、アシスト・ハードウエア・スレッド１５０が利用可能であることを連絡する（さらなる詳細については、図２、図４および対応する説明文を参照）。また、起動ハードウエア・スレッド１２０は、アシスト・ハードウエア・スレッド１５０にアシスト・スレッド番号（ＡＴＮ：ａｓｓｉｓｔ  ｔｈｒｅａｄ  ｎｕｍｂｅｒ）値を割り当て、アシスト・ハードウエア・スレッド１５０の状態を追跡するために、起動ハードウエア・スレッド１２０はこの値をハードウエア状態ストア１２５に格納し、ソフトウエア・プログラム１１０はソフトウエア状態ストア１１５に格納する。
【００２１】
アシスト・ハードウエア・スレッド１５０が起動したならば、ソフトウエア・プログラム１１０は、アシスト・ハードウエア・スレッド１５０上で命令１４５を実行する。アシスト・ハードウエア・スレッド１５０は、例えば、アシスト・ハードウエア・スレッド１５０が、１）コードの実行を完了する、２）アシスト・スレッド停止（ＳＡＴ）命令を実行する、３）起動ハードウエア・スレッド１２０がＳＡＴ命令を実行し、アシスト・ハードウエア・スレッド１５０を終了させる、または４）プロセッサ１００がアシスト・ハードウエア・スレッド１５０を終了させる、まで命令１４５の実行を続ける（さらなる詳細については、図５、図８および対応する説明文を参照）。アシスト・ハードウエア・スレッド１５０が実行を停止するとき、アシスト・ハードウエア・スレッド１５０は、起動ハードウエア・スレッド１２０のアシスト・スレッド状態レジスタ１３０に、終了インジケータおよびアドレス情報などの情報を格納する（さらなる詳細については、図２、図８および対応する説明文を参照）。
【００２２】
一つの実施形態において、ソフトウエア・プログラム１１０は、種々のコード・セグメントを実行するために複数のアシスト・ハードウエア・スレッドを要求する。この実施形態では、最後に実行を停止したアシスト・ハードウエア・スレッドが、アシスト・スレッド状態レジスタ１３０に、終了インジケータおよびアドレス情報を書き込む（さらなる詳細については、図５、図１４および対応する説明文を参照）。
【００２３】
別の実施形態では、アシスト・ハードウエア・スレッド１５０が、後続のアシスト・ハードウエア・スレッドを呼び出すことができる。この実施形態において、アシスト・ハードウエア・スレッド１５０が、後続アシスト・ハードウエア・スレッドに対する「起動ハードウエア・スレッド」となり、アシスト・スレッド状態レジスタ１６０を使って、後続アシスト・ハードウエア・スレッドに関する情報を格納する（さらなる詳細については、図１５および対応する説明文を参照）。この実施形態において、起動ハードウエア・スレッドが、アシスト・ハードウエア・スレッド１５０を終了する命令を実行すると、アシスト・ハードウエア・スレッド１５０は、自動的に後続のアシスト・ハードウエア・スレッドを終了させる。
【００２４】
さらに別の実施形態では、ソフトウエア・プログラム１１０が、アシスト・ハードウエア・スレッド１５０がまだ実行中かどうかを判定するため、アシスト・ハードウエア・スレッド１５０の具体的状態のチェックを望むことができる。この実施形態において、ソフトウエア・プログラム１１０は、起動ハードウエア・スレッド１２０上で、アシスト・スレッドが実行中である条件での分岐（ＢＣＥ）命令、または、アシスト・スレッドが実行中ならば状態レジスタを設定する（ＣＲＳＥ）命令などの「アシスト・スレッドチェック」命令を実行する。この実施形態において、ソフトウエア・プログラム１１０は、ソフトウエア状態ストア１１５から、アシスト・ハードウエア・スレッド１５０に対応するアシスト・スレッド番号（ＡＴＮ）を読み出し、そのＡＴＮを汎用レジスタに格納する。これを受け、ソフトウエア・プログラム１１０は、ＢＣＥ命令中にこの汎用レジスタの番号を含め、該命令を起動ハードウエア・スレッド１２０が実行する。起動ハードウエア・スレッド１２０は、汎用レジスタからＡＴＮを読み出し、ハードウエア状態ストア１２５にアクセスして、アシスト・ハードウエア・スレッド１５０の状態をチェックする。これに続き、起動ハードウエア・スレッド１２０は、アシスト・ハードウエア・スレッド１５０の状態に応じて、分岐（または条件ビットを設定）する（さらなる詳細については、図１０〜１３および対応する説明文を参照）。
【００２５】
図２は、アシスト・スレッド状態レジスタ（ＡＳＴＲ）を示す例示図である。起動ハードウエア・スレッド１２０などの起動ハードウエア・スレッドは、全体的なアシスト・ハードウエア・スレッドの状態を追跡するため、ＡＳＴＲ１３０を用いる。ＡＳＴＲ１３０は、かかる追跡情報を格納するためのフィールド２１０〜２６０を包含する。
【００２６】
アシスト・スレッド番号（ＡＴＮ）フィールド２１０は、直近に起動されたアシスト・ハードウエア・スレッドに対応する番号を包含する。例えば、起動ハードウエア・スレッド１２０が、アシスト・ハードウエア・スレッド１、２、および３をこの順で起動したとすれば、ＡＴＮフィールドには番号「３」が含まれる。しかして、ＡＴＳＲ１３０は、特定の起動ハードウエア・スレッドが起動できるアシスト・ハードウエア・スレッドの数に制限を課していないので、ＡＴＳＲ１３０は（ＡＴＮフィールド２１０のビット量による制限を除けば）プラットフォーム拡張性である。
【００２７】
アシスト・スレッド有効（ＡＴＶ）ビット２２０は、ＡＴＮフィールド２１０の有効性を示すビットを包含する。ソフトウエア・プログラムは、このビットをチェックし、要求したアシスト・ハードウエア・スレッドが実際に起動しているかどうかを判定する（さらなる詳細については、図４および対応する説明文を参照）。
【００２８】
ＡＴＳＲ１３０は、アシスト・スレッド実行インジケータを包含し、一つの実施形態において、これはアシスト・スレッド実行（ＡＴＥ：ａｓｓｉｓｔ  ｔｈｒｅａｄ  ｅｘｅｃｕｔｉｎｇ）ビット２３０であり、該ビットは、現在実行中のアシスト・ハードウエア・スレッドがあるかどうかを示す。ソフトウエア・プログラムは、一回の読み取りオペレーションでＡＴＥビット２３０をチェックすることができ、アシスト・ハードウエア・スレッドの全てが実行を終えているかどうかを識別する（さらなる詳細については、図４、図５および対応する説明文を参照）。
【００２９】
一つの実施形態において、列２４０〜２６０は、ＡＴＥビット２３０が、実行しているアシスト・ハードウエア・スレッドがないことを示している場合においてのみ有効である情報を含む。アシスト・スレッド状態（ＡＴＳ）フィールド２４０は、最後のアシスト・ハードウエア・スレッドの終了理由（例、アシスト・スレッドがＳＡＴ命令を実行した、起動スレッドがＳＡＴ命令を実行した、エラーが発生した、プロセッサがリソースを先取りした、など）を示す終了インジケータを包含する。
【００３０】
ＳＡＴパラメータ（ＳＡＴＰ：ＳＡＴ  ｐａｒａｍｅｔｅｒ）フィールド２５０は、実行している最後のアシスト・ハードウエア・スレッドがＳＡＴ命令を実行するとき、そのアシスト・ハードウエア・スレッドが起動ハードウエア・スレッドに渡したパラメータを包含する。例えば、ＳＡＴパラメータは、アシスト・ハードウエア・スレッドがタスク（コードの実行）を成功裏に完了したどうかを示すことができる。最後に、次の命令（ＮＩ：ｎｅｘｔ  ｉｎｓｔｒｕｃｔｉｏｎ）フィールド２６０は、アシスト・ハードウエア・スレッドの最後に実行された命令に続く命令のアドレスを包含する。
【００３１】
図３Ａは、ソフトウエア・プログラムがアシスト・ハードウエア・スレッドの状態を管理するため用いるソフトウエア状態格納領域を示す例示図である。図示のように、ソフトウエア状態ストア１１５は、現在実行中のアシスト・ハードウエア・スレッドに対するアシスト・スレッド番号（ＡＴＮ）値（列３００）および対応する開始アドレス（列３１０）のリストを包含する。一つの実施形態において、この開始アドレスは、ＢＡＩＬ／ＢＡＩＨ命令が、アシスト・ハードウエア・スレッドに対しコードの実行を開始するよう指定したアドレスである（さらなる詳細については、図６、図７および対応する説明文を参照）。さらに別な実施形態において、ソフトウエア状態ストア１１５には、開始アドレスを含めず、それよりむしろ、対応するタスクに対する識別名を格納することができ、この実施形態では、識別名をコード・セクションに関連付ける異なったテーブルを含めることができる。ソフトウエア状態ストア１１５は、揮発性メモリ、またはコンピュータ・ハード・ドライブなどの不揮発性メモリに格納することができる。
【００３２】
図３Ｂは、ハードウエア・スレッドがアシスト・ハードウエア・スレッドの状態を管理するため用いるハードウエア状態格納領域を示す例示図である。前述のソフトウエア状態ストア１１５と同様に、ハードウエア状態ストア１２５は、ＡＴＮ値（列３２０）、アシスト・ハードウエア・スレッドに対する対応ハードウエア・スレッド番号（列３３０）、および各アシスト・ハードウエア・スレッドの状態（列３４０）のリストを包含する。一つの実施形態において、列３３０中の対応スレッド番号は、列３２０中のアシスト・スレッド番号と同一にすることができる。当業者ならよく理解できるように、ハードウエア状態ストア１２５は、情報を格納するベクトルとし、ベクトルの各エントリが特定のハードウエア・スレッドの状態を表すようにすることができる。
【００３３】
図４は、アシスト・ハードウエア・スレッドを起動している起動ハードウエア・スレッドの中で実施されるステップを示す例示図である。ソフトウエア・プログラムの処理は４００で開始され、次いでステップ４０５において、ソフトウエア・プログラムは、分岐開始軽量（ＢＡＩＬ）または分岐開始重量（ＢＡＩＨ）命令を実行する。一つの実施形態において、ＢＡＩＬ命令とＢＡＩＨ命令との間の違いは、起動ハードウエア・スレッドが実施するメモリ同期の量である（さらなる詳細については、図９および対応する説明文を参照）。
【００３４】
ソフトウエア・プログラムを実行する起動ハードウエア・スレッドの処理は、４５０で開始され、次いで、起動ハードウエア・スレッドはハードウエア状態ストア１２５にアクセスし、別のハードウエア・スレッド（アシスト・ハードウエア・スレッド）が利用可能かどうかチェックする。ハードウエア状態ストア１２５は、プロセッサのハードウエア・スレッドの利用可能性に関する情報を包含する（さらなる詳細については、図３Ｂおよび対応する説明文を参照）。
【００３５】
起動ハードウエア・スレッドは、アシスト・ハードウエア・スレッドに使うため別のハードウエア・スレッドが利用可能かどうかを判定する（判断４６０）。アシスト・ハードウエア・スレッドが利用可能でない場合、判断４６０は、「いいえ」ブランチ４６２に分岐し、次いで、起動ハードウエア・スレッドは、アシスト・スレッド状態レジスタ（ＡＴＳＲ）のＡＴＶビット２２０のアシスト・スレッド有効ビットを「０」に設定する（ステップ４６３）。次いで、アシスト・ハードウエア・スレッドが利用できないので、起動ハードウエア・スレッドは、アシスト・ハードウエア・スレッドに予定していたタスクをステップ４４０で実行し、処理は４４５で終了する。
【００３６】
また一方、アシスト・ハードウエア・スレッドが利用可能な場合、判断４６０は、「はい」ブランチ４６５に分岐し、次いで起動ハードウエア・スレッドは、ステップ４７０において、アシスト・スレッド有効（ＡＴＶ）ビットを「１」に設定する。次に、起動ハードウエア・スレッドは、（例えば、カウンタのインクリメントまたは乱数発器などによって）アシスト・スレッド番号（ＡＴＮ）を生成し、アシスト・ハードウエア・スレッドとして割り当てられたスレッドの表示（例、ＡＴＮと別の番号または同じ番号）とともに、そのアシスト・スレッド番号をハードウエア状態ストア１２５中に格納する。また、起動ハードウエア・スレッドは、ＡＴＳＲのアシスト・スレッド番号フィールド２１０中にもＡＴＮ値を格納する（ステップ４７５）。
【００３７】
ステップ４８０において、起動ハードウエア・スレッドは、自分のレジスタからアシスト・ハードウエア・スレッドのレジスタにコピーするための、特定のレジスタ値群を識別する。起動ハードウエア・スレッドは、ＢＡＩＬ／ＢＡＩＨ命令のパラメータに基づいて、レジスタ値群を選定する。ステップ４８５で、起動ハードウエア・スレッドは、識別されたレジスタ値群を、起動スレッド・レジスタ１４０からアシスト・スレッド・レジスタ１７０にコピーする。
【００３８】
戻ってソフトウエア・プログラムを参照すると、ソフトウエア・プログラムは、ステップ４１０においてＡＴＳＲのＡＴＶビット２２０をチェックし、要求したアシスト・ハードウエア・スレッドが起動しているかどうかを判定する（判断４１５）。アシスト・ハードウエア・スレッドが起動していない場合（例、ＡＴＶビット＝０）、前述したように、ソフトウエア・プログラムは、起動スレッドを使って、アシスト・ハードウエア・スレッドに予定されていたタスクを実行し（ステップ４４０）、処理は４４５で終了する。
【００３９】
また一方、要求したアシスト・ハードウエア・スレッドが起動している場合、判断４１５は「はい」ブランチ４１８に分岐し、次いで、ソフトウエア・プログラムは、一つの実施形態において、ＡＴＳＲのＡＴＮフィールド２１０からアシスト・スレッド番号を読み出し、読み出されたＡＴＮ値をソフトウエア状態ストア１１５中に格納することができる。別の実施形態において、アシスト・ハードウエア・スレッドのタスクが、起動ハードウエア・スレッドの全体的なパフォーマンスを向上させるため、データを単にキャッシュ中にプリフェッチするような場合などでは、ソフトウエア・プログラムは、アシスト・ハードウエア・スレッドの起動を追跡しないでおくことができる。ソフトウエア状態ストア１１５は、ソフトウエア・プログラムが呼び出したアシスト・ハードウエア・スレッドを追跡するための情報を包含する（さらなる詳細については、図３Ａおよび対応する説明文を参照）。次いで、ソフトウエア・プログラムは、起動されたアシスト・ハードウエア・スレッドを使って命令を実行する（所定のプロセス・ブロック４９０、さらなる詳細については、図５および対応する説明文を参照）。
【００４０】
（コード実行の完了、もしくは強制終了によって）アシスト・ハードウエア・スレッドが終了するとき、アシスト・ハードウエア・スレッドは、ＡＴＳＲのアシスト・スレッド実行（ＡＴＥ）ビット２３０をクリアする。一つの実施形態において、ソフトウエア・プログラムは、アシスト・ハードウエア・スレッドが完了するのを待つ間、他のタスクを実行する（ステップ４２５）。別の実施形態において、ソフトウエア・プログラムは、複数のアシスト・ハードウエア・スレッドに、ソフトウエア・プログラムのさまざまなセクションの実行を要求することができる。この実施形態では、最後に完了したアシスト・ハードウエア・スレッドがＡＴＳＲのＡＴＥビット２３０をクリアする（さらなる詳細については、図５および対応する説明文を参照）。
【００４１】
一つの実施形態において、アシスト・ハードウエア・スレッドが完了したとき、ソフトウエア・プログラムは、ステップ４３０において、それに続く計算の結果を使うなどして、アシスト・ハードウエア・スレッドの実行結果をチェックすることができる。ソフトウエア・プログラムと起動ハードウエア・スレッドとは、それぞれ４３５と４９５とにおいて終了する。一つの実施形態において、起動ハードウエア・スレッド上で実行しているソフトウエア・プログラムは、追加のアシスト・ハードウエア・スレッドを起動するなど、他のタスクの遂行を進めることができる。
【００４２】
図５は、命令を実行しているアシスト・ハードウエア・スレッドの中で実施されるステップを示す例示フローチャートである。アシスト・ハードウエア・スレッドの処理は５００で開始され、次いでアシスト・ハードウエア・スレッドは、ステップ５０５において、アシスト・スレッド・レジスタ１７０中に格納されているレジスタ値にアクセスし、ソフトウエア・プログラム１１０の命令を実行する。
【００４３】
命令実行の過程で、アシスト・ハードウエア・スレッドは、命令実行の完了または実行の終了指示の受信に応じて、実行を終了するかどうかを判定する（判断５１０）。一つの実施形態において、アシスト・ハードウエア・スレッドは、命令実行を完了するか、あるいは、アシスト・ハードウエア・スレッドに命令実行を終了するよう命令する、アシスト・スレッド停止（ＳＡＴ）命令を実行することができる（さらなる詳細については、図８および対応する説明文を参照）。別の実施形態において、起動ハードウエア・スレッドがＳＡＴ命令を実行し、これによりアシスト・ハードウエア・スレッドを終了することができる。さらに別の実施形態では、起動ハードウエア・スレッドおよびアシスト・ハードウエア・スレッドを制御しているプロセッサが、アシスト・ハードウエア・スレッドに他のより優先度の高いプログラムを実行させるため、あるいはアシスト・ハードウエア・スレッドのリソースを回収するため、アシスト・ハードウエア・スレッドを終了することができる。
【００４４】
アシスト・ハードウエア・スレッドが命令の実行を継続すべき場合、判断５１０は「いいえ」ブランチ５１７に分岐し、該ブランチはループ・バックして命令実行を継続する。このループは、アシスト・ハードウエア・スレッドが終了するまで続き、終了時点で判断５１０は「はい」ブランチ５１４に分岐する。
【００４５】
ステップ５２０において、アシスト・ハードウエア・スレッドは、ハードウエア状態ストア１２５中の自分の状態を「実行中」から「終了」に変更する。次に、アシスト・ハードウエア・スレッドは、他のアシスト・ハードウエア・スレッドの状態をチェックし（ステップ５２５）、他のアシスト・ハードウエア・スレッドがまだ実行中かどうかを判定する（判断５３０）。他のアシスト・ハードウエア・スレッドがまだ実行中の場合、判断５３０は「はい」ブランチ５３２に分岐し、次いでアシスト・ハードウエア・スレッドはステップ５６０で自分のリソースを解放し、アシスト・ハードウエア・スレッドの処理は５７０で終了する。一つの実施形態において、プロセッサ（例、プロセッサ１００）は、アシスト・ハードウエア・スレッドが終了した後、起動ハードウエア・スレッドのＡＴＳＲビット群を更新することができる。
【００４６】
また一方、他のアシスト・ハードウエア・スレッドが実行していない場合、判断５３０は「いいえ」ブランチ５３４に分岐し、次いでアシスト・ハードウエア・スレッドは、ステップ５４０において、ＡＴＳＲのアシスト・スレッド状態（ＡＴＳ）フィールド２４０中に終了インジケータ（例、アシスト・スレッドがＳＡＴ命令を実行した、起動スレッドがＳＡＴ命令を実行した、エラーが発生した、プロセッサがリソースを先取りしたなど）を格納する。アシスト・ハードウエア・スレッドは、ステップ５４５で、ＡＴＳＲのＳＡＴＰフィールド２５０中にＳＡＴパラメータを格納する。例えば、ＡＴＳフィールドが、アシスト・ハードウエア・スレッドがＳＡＴ命令を実行したことによってアシスト・ハードウエア・スレッドが終了したこと、を示している場合、ＳＡＴＰフィールド２５０には、そのアシスト・ハードウエア・スレッドがタスクを成功裏に完了したかどうかを表すパラメータを包含させることができる。
【００４７】
ステップ５５０において、アシスト・ハードウエア・スレッドは、アシスト・スレッドが実行した最後の命令に続く次の命令に対応するアドレスを、ＡＳＴＲのＮＩフィールド２６０に格納する。最後に、アシスト・ハードウエア・スレッドは、ステップ５５５で、ＡＴＳＲのＡＴＥフィールド２３０中のアシスト・スレッド実行中インジケータをクリアし、しかして、ソフトウエア・プログラム１１０に対し、各アシスト・ハードウエア・スレッドが実行を停止したことを示す（さらなる詳細については、図４および対応する説明文を参照）。アシスト・ハードウエア・スレッドは、５６０において自分のリソースを解放し、５７０で終了する。
【００４８】
一つの実施形態において、プロセッサは、ステップ５５５の前に、アシスト・ハードウエア・スレッドが行った全ての格納が起動ハードウエア・スレッドに可視であるのを確実にすることができる。この実施形態において、アシスト・ハードウエア・スレッドの全ての格納が起動ハードウエア・スレッドに可視であるのを確実にすることによって、起動ハードウエア・スレッドは、メモリに格納されたアシスト・ハードウエア・スレッドの実行結果を読み取ることができる（さらなる詳細については、図４および対応する説明文を参照）。
【００４９】
図６は、分岐開始軽量（ＢＡＩＬ）命令を示す例示図である。ＢＡＩＬ命令６００は、ソフトウエア・プログラム１００が、ハイパーバイザの関与なくして、ハイパーバイザのオペレーションまたは他の実行プログラムに悪影響を与えることなく、マルチスレッド・プロセッサに対しアシスト・ハードウエア・スレッドを効率的に要求することを可能にする。
【００５０】
ＢＡＩＬ命令６００は、ハードウエア・スレッドが実行するとき、該ハードウエア・スレッドに対しアシスト・ハードウエア・スレッドが利用可能かどうかチェックするよう命令する、ｏｐコード・フィールド（ビット０〜５）および拡張ｏｐコード・フィールド（ビット２１〜３０）を包含する。利用可能な場合、起動ハードウエア・スレッドは、コピー・ビット「６」に基づいて、他のレジスタ値とともに、ベース・レジスタ・セットなど（汎用レジスタ、特権制御レジスタなど）、特定のレジスタの値（不動小数点、ベクトル・ユニットなど）を、起動ハードウエア・スレッドのレジスタからアシスト・ハードウエア・スレッドのレジスタにコピーする（さらなる詳細については、図９および対応する説明文を参照）。コピーがされたならば、アシスト・ハードウエア・スレッドは、ＢＡＩＬ命令６００のビット７〜２０中に所在するターゲット・アドレスに対応するコードの実行を開始する。当業者ならよく理解できるように、ＢＡＩＬ命令６００には、図６に示されたものより多いまたは少ないビット、もしくは異なったパーティション、またはその両方を包含させることができる。
【００５１】
図７は分岐開始重量（ＢＡＩＨ）命令を示す例示図である。ＢＡＩＨ命令７００は、図６に示されたＢＡＩＬ命令と類似である。ただし、ＢＡＩＬ命令と比べると、ＢＡＩＨ命令はメモリ同期ステップも遂行することができる。
【００５２】
ＢＡＩＨ命令は、ハードウエア・スレッドが実行するとき、該ハードウエア・スレッドに対しアシスト・ハードウエア・スレッドが利用可能かどうかチェックするよう命令する、ｏｐコード・フィールド（ビット０〜５）および拡張ｏｐコード・フィールド（ビット２１〜３０）を包含する。利用可能な場合、起動ハードウエア・スレッドは、コピー・ビット「６」に基づいて、他のレジスタとともに、ベース・レジスタ・セットなど（汎用レジスタ、特権制御レジスタなど）、特定のレジスタの値（不動小数点、ベクトル・ユニットなど）をコピーする（さらなる詳細については、図９および対応する説明文を参照）。
【００５３】
起動ハードウエア・スレッドがレジスタ値をアシスト・ハードウエア・スレッドのレジスタにコピーしたならば、アシスト・ハードウエア・スレッドは、ＢＡＩＨ命令７００のビット７〜２０中に配置されたターゲット・アドレスに対応するコードの実行を開始する。当業者ならよく理解できるように、ＢＡＩＨ命令には、図７に示されたものより多いまたは少ないビット、もしくは異なったパーティション、またはその両方を包含させることができる。
【００５４】
図８は、アシスト・スレッド停止（ＳＡＴ）命令を示す例示図である。アシスト・ハードウエア・スレッドが実行しているときに、アシスト・ハードウエア・スレッド（または起動ハードウエア・スレッド）は、アシスト・ハードウエア・スレッドに実行を停止するよう命令する、ＳＡＴ命令を実行することができる。起動ハードウエア・スレッドがＳＡＴ命令８００実行すると、起動ハードウエア・スレッドは、アシスト・ハードウエア・スレッドに実行を停止（終了）することを命令する。アシスト・ハードウエア・スレッドがＳＡＴ命令８００を実行すると、該アシスト・ハードウエア・スレッドは自分の実行を停止する。
【００５５】
ＳＡＴ命令８００は、起動ハードウエア・スレッドが実行しているとき、一つ以上のアシスト・ハードウエア・スレッドに実行の停止を命令する情報を起動ハードウエア・スレッドに提供する、ｏｐコード・フィールド（ビット０〜５）および拡張ｏｐコード・フィールド（ビット２１〜３０）を包含する。また、ＳＡＴ命令８００は、起動ハードウエア・スレッドに実行されたとき、全てのアクティブなアシスト・ハードウエア・スレッドを終了させるのか、もしくは特定のアシスト・ハードウエア・スレッドを終了させるのかを起動ハードウエア・スレッドに指示する終了ビット２０を包含する。ビット２０が特定のアシスト・ハードウエアの終了を示している場合、ビット６〜１０は、終了するアシスト・ハードウエア・スレッドに対応するアシスト・スレッド番号（ＡＴＮ）を含む、ソース・レジスタ（ＲＳ：ｓｏｕｒｃｅ  ｒｅｇｉｓｔｅｒ）位置（例、汎用レジスタの位置）を包含する。
【００５６】
別の実施形態において、アシスト・ハードウエア・スレッドがＳＡＴ命令８００を実行するとき、該アシスト・ハードウエア・スレッドは、ビット２０を使って、ＳＡＴパラメータを、自分の起動ハードウエア・スレッドに送り返すことができる。例えば、アシスト・ハードウエア・スレッドは、自分がコード実行を完了したときは、ビット２０に「１」を格納することができ、コード実行を完了しなかったときは、ビット２０に「０」を格納することができる。この実施形態において、アシスト・ハードウエア・スレッドは、ＳＡＴ命令８００を実行するときビット６〜１０を無視する。
【００５７】
さらに別な実施形態において、ＳＡＴ命令８００が、ＲＳフィールド（ビット６〜１０）を持たないようにすることができる。この実施形態では、起動ハードウエア・スレッドは、ビット２０の値に関わらず（例、ビット２０を無視して）、起動した全てのアクティブなアシスト・ハードウエア・スレッドを終了させる。
【００５８】
図９は、ＢＡＩＬおよびＢＡＩＨ命令の過程で、起動ハードウエア・スレッドが、起動スレッド・レジスタからアシスト・スレッド・レジスタにコピーするレジスタ値を示す例示図である。図９は、これら命令の過程で、起動ハードウエア・スレッドが、ベース・レジスタの値（例、汎用レジスタ、条件レジスタ、およびほとんどのコンピューティング・タスクに必須の他のレジスタ）をコピーすることを示す。
【００５９】
一つの実施形態において、起動ハードウエア・スレッドは、アドレス変換レジスタの値（例、実効または仮想アドレスを実アドレスに変換するためのレジスタ値）を、起動ハードウエア・スレッドのレジスタ１４０からアシスト・ハードウエア・スレッドのレジスタ１７０にコピーする。別の実施形態において、起動ハードウエア・スレッドとアシスト・ハードウエア・スレッドとは同じアドレス変換レジスタを共用することができ、あるいは、アシスト・ハードウエア・スレッドの変換レジスタをプリセットすることができる。この実施形態では、ソフトウエア・プログラムは、起動ハードウエア・スレッドを、該起動ハードウエア・スレッドがアドレス変換レジスタの値をコピーしないように構成することができる。
【００６０】
また、起動ハードウエア・スレッドは、ＢＡＩＬ／ＢＡＩＨ命令のコピー・ビットに基づき、処理系依存のレジスタ・セットの値を、起動ハードウエア・スレッドのレジスタ１４０からアシスト・ハードウエア・スレッドのレジスタ１７０にコピーすることができる（さらなる詳細については、図６および対応する説明文を参照）。一つの実施形態において、処理系依存のレジスタ・セットには、ベクトル・レジスタ、不動小数点レジスタ、およびアシスト・ハードウエア・スレッドが時々必要とする特殊コンピューティング・タスクに関連する他のレジスタ・セットが包含される。
【００６１】
一つの実施形態において、前回の計算からの一切の残存値を除去するために、起動ハードウエア・スレッドは、アシスト・ハードウエア・スレッドのレジスタ１７０中の、起動ハードウエア・スレッドのレジスタ１４０からコピーされたレジスタ値を含まないレジスタをクリアする。
【００６２】
ＢＡＩＬおよびＢＡＩＨ命令は、同じレジスタ・コピーのセットを実行することができるが、一つの実施形態において、起動ハードウエア・スレッドのメモリ同期中の命令が異なる。例えば、バラバラの順でメモリ「格納」を行うプロセッサの場合、一つの命令で行われたメモリ格納が、後続の命令が実行される前に完了する保証はない。しかして、この例において、格納オペレーションに続く命令がアシスト・ハードウエア・スレッドを起動する場合、該アシスト・スレッドが起動する前に格納オペレーションが完了する保証はない。格納オペレーションが完了しない場合、該格納オペレーションの値が、不確定時間の間アシスト・ハードウエア・スレッドに不可視なことがあり得る。しかるが故に、アシスト・ハードウエア・スレッドが自分のタスクを実行するためにその格納された情報へのアクセスを要求する場合には問題が発生する。
【００６３】
ＢＡＩＨ命令はこの問題を軽減する。というのは、ＢＡＩＨ命令は、アシスト・ハードウエア・スレッドが起動される前に、起動ハードウエア・スレッドによって行われる格納が、アシスト・ハードウエア・スレッドの可視性のため十分なまでに完了することを確実にし、しかして、アシスト・ハードウエア・スレッドがメモリ位置を読み取りこれによりタスクを遂行することを可能にするからである。ソフトウエア・プログラムがメモリ同期を必要としない場合、ソフトウエア・プログラムは、ＢＡＩＬ命令がメモリ同期を保証しないのでその実行の速さから、該命令を利用することができる。
【００６４】
一つの実施形態において、ＢＡＩＬおよびＢＡＩＨ命令は、数多くの変形を有する。例えば、バラバラの順で格納オペレーションを実施しないプロセッサに対して、そのプロセッサは、一部の実施形態ではＢＡＩＨ命令と比べてより大きなレジスタ・セットをコピーするＢＡＩＬ命令の形を用いることはあるかもしれないが、ＢＡＩＨ命令は用いないでおくことができる。別の事例において、順序だった格納を保証しない実装はＢＡＩＨ命令を設定し、特定のアプリケーションの必要性に照らし、起動ハードウエア・スレッドが、ＢＡＩＬ命令よりも多くのレジスタをコピーするようにすることができる。
【００６５】
図１０は、アシスト・スレッドが実行中である条件での分岐（ＢＣＥ）命令の実行において実施されるステップを示す例示フローチャートである。この状況は、ソフトウエア・プログラムが、アシスト・ハードウエアの特定の状態を必要とするとき発生し得る。これらの状況において、ソフトウエア・プログラムは、起動ハードウエア・スレッド上で、条件付き分岐命令を実行することができ、これは特定のアシスト・ハードウエア・スレッドがまだ実行中であるかどうかに基づいて分岐する。
【００６６】
ＢＣＥソフトウエア・プログラムの実行は１０００で開始され、次いでソフトウエア・プログラムは、ソフトウエア状態ストア１１５から、特定のアシスト・スレッドに対応するアシスト・スレッド番号（ＡＴＮ）値を読み出す（ステップ１００５）。ステップ１０１０において、ソフトウエア・プログラムはＡＴＮ値を特定の汎用レジスタ（例、レジスタ「４」）に、ターゲット・アドレスを別の汎用レジスタ（例、レジスタ「５」）に格納し、ターゲット・アドレスは、アシスト・ハードウエア・スレッドがまだ実行中の場合に起動ハードウエア・スレッドが実行するための、コードの位置を識別する（後記で説明）。次に、ソフトウエア・プログラムは、起動ハードウエア・スレッド上で、アシスト・スレッドが実行中である条件での分岐（ＢＣＥ）命令を実行し、該命令はＡＴＮ値およびターゲット・アドレスの汎用レジスタ位置を包含する（ステップ１０１５）。
【００６７】
起動ハードウエア・スレッドの実行は１０４０で開始され、次いで起動ハードウエア・スレッドは、ＢＣＥ命令から汎用レジスタ番号を抜き出し、該汎用レジスタから、ターゲット・アドレスとともに、ＡＴＮを読み出す（ステップ１０５０）。次に、起動ハードウエア・スレッドは、ステップ１０６０で、ハードウエア状態ストア１２５中の、対応するアシスト・ハードウエア・スレッドの状態をチェックする。
【００６８】
起動ハードウエア・スレッドは、ステップ１０６０での状態に基づいて、アシスト・ハードウエア・スレッドがまだ実行中であるかどうかを判定する（判断１０７０）。アシスト・ハードウエア・スレッドがまだ実行中の場合、判断１０７０は「はい」ブランチ１０７２に分岐し、次いで起動ハードウエア・スレッドは、ステップ１０５０で読み出されたターゲット・アドレスに分岐する（ステップ１０８０）。また一方、アシスト・ハードウエア・スレッドが終了している場合、判断１０７０は「いいえ」ブランチ１０７８に分岐し、次いで起動ハードウエア・スレッドは、後続命令の実行を続ける（ステップ１０９０）。
【００６９】
ソフトウエア・プログラムは、起動ハードウエア・スレッドが「はい」に分岐したかどうかに基づいて、特定のアシスト・ハードウエア・スレッドがまだ実行中かどうかを判定する（判断１０２０）。起動ハードウエア・スレッドが分岐している場合、判断１０２０は「はい」ブランチ１０２２に分岐し、次いでソフトウエア・プログラムは、ステップ１０２４で、アシスト・スレッドに与えられたタスクと関係のないタスクの作業を続けるなど、アシスト・ハードウエア・スレッドがまだ実行中であるのに応じたタスクを遂行する。また一方、起動ハードウエア・スレッドが分岐しなかった場合、判断１０２０は「いいえ」ブランチ１０２６に分岐し、次いでソフトウエア・プログラムは、アシスト・ハードウエア・スレッドが終了いているのに応じたタスクを遂行する（ステップ１０２８）。例えば、ソフトウエア・プログラムは、共用のメモリ場所をチェックして、アシスト・ハードウエア・スレッドがそのオペレーションを成功裏に完了したがどうかを判定することができ、それに基づき追加のタスク（例、別のアシスト・スレッドの開始、他の作業の実施など）を遂行する。ソフトウエア・プログラムと起動ハードウエア・スレッドとの処理は、それぞれ１０３０と１０９５とで終了する。
【００７０】
図１１は、アシスト・スレッドが実行中ならば状態レジスタを設定する（ＣＲＳＥ）命令の実行において実施されるステップを示す例示フローチャートである。ＣＲＳＥ命令は、起動ハードウエア・スレッドが、ターゲット・アドレスに分岐する代わりに、特定のアシスト・ハードウエア・スレッドの状態に基づいて状態ビットを設定することを除けば、図１０で説明したＢＣＥ命令と同様である。
【００７１】
ＣＲＳＥソフトウエア・プログラムの実行は１１００で開始され、次いでソフトウエア・プログラムは、ソフトウエア状態ストア１１５から、特定のアシスト・スレッドに対応するアシスト・スレッド番号（ＡＴＮ）値を読み出す（ステップ１１０５）。ステップ１１１０において、ソフトウエア・プログラムは、状態レジスタ・ビット位置とともにＡＴＮ値を、特定の汎用レジスタ（ＧＲＳ：ｇｅｎｅｒａｌ−ｐｕｒｐｏｓｅ  ｒｅｇｉｓｔｅｒ）中に格納する。状態レジスタ・ビット位置は、起動ハードウエア・スレッドが、アシスト・ハードウエア・スレッドの状態に基づいて設定する状態レジスタ・ビットに対応する（後記で説明）。次に、ソフトウエア・プログラムは、ＣＲＳＥ命令の中にＧＰＲレジスタの位置を包含させ、起動ハードウエア・スレッドを使ってＣＲＳＥ命令を実行する（１１１５）。
【００７２】
起動ハードウエア・スレッドの実行は１１４０で開始され、次いで起動ハードウエア・スレッドは、ＣＲＳＥ命令から汎用レジスタ番号を抜き出し、該汎用レジスタ番号に対応する汎用レジスタから、状態レジスタ・ビット位置とともに、ＡＴＮを読み出す（ステップ１１５０）。次に、起動ハードウエア・スレッドは、ステップ１１６０で、ハードウエア状態ストア１２５中の、読み出されたＡＴＮに対応するアシスト・ハードウエア・スレッドの状態をチェックする。
【００７３】
起動ハードウエア・スレッドは、ステップ１１６０における状態に基づいて、アシスト・ハードウエア・スレッドがまだ実行中であるかどうかを判定する（判断１１７０）。アシスト・ハードウエア・スレッドがまだ実行中の場合、判断１１７０は「はい」ブランチ１１７２に分岐し、次いで起動ハードウエア・スレッドは、ステップ１１８０において、状態レジスタ・ビット１１８５を設定し、これは、前述の読み取られた状態レジスタ・ビット位置に対応する。また一方、アシスト・ハードウエア・スレッドが終了している場合、判断１１７０は「いいえ」ブランチ１１７８に分岐し、次いで起動ハードウエア・スレッドは、状態レジスタ・ビット１１８５を「０」に設定する（ステップ１１９０）。
【００７４】
ソフトウエア・プログラムは、状態レジスタ・ビット１１８５をチェックすることによって、特定のアシスト・ハードウエア・スレッドがまだ実行中かどうかを判定し、それに応じ、ステップ１１２０でタスク遂行する。ソフトウエア・プログラムと起動ハードウエア・スレッドとの処理は、それぞれ１１３０と１１９５とで終了する。
【００７５】
図１２は、アシスト・スレッドが実行中である条件で分岐する（ＢＣＥ）命令を示す例示図である。ＢＣＥ命令１２００は、起動ハードウエア・スレッドに対し、起動ハードウエア・スレッドが、特定のアシスト・ハードウエア・スレッドが実行中であると判定する場合にはターゲット・アドレスに分岐するように命令することによって、ソフトウエア・プログラムが、特定のアシスト・ハードウエア・スレッドがまだコードを実行中かどうかを判定することができるようにする。
【００７６】
ＢＣＥ命令１２００は、ハードウエア・スレッドが実行するとき、「起動」ハードウエア・スレッドに対しアシスト・ハードウエア・スレッドが実行中かどうかチェックするよう命令する、ｏｐコード・フィールド（ビット０〜５）および拡張ｏｐコード・フィールド（ビット１６〜２０）を包含する。ＢＣＥ命令１２００は、アシスト・ハードウエア・スレッドをチェックするためのアシスト・スレッド番号（ＡＴＮ）を含む汎用レジスタを識別するためのビット１１〜１５を包含する。アシスト・ハードウエア・スレッドがまだ実行中の場合、起動ハードウエア・スレッドは、ビット６〜１０によって識別される汎用レジスタ中に包含されるターゲット・アドレスに分岐する（さらなる詳細については、図１０および対応する説明文を参照）。当業者ならよく理解できるように、ＢＣＥ命令１２００には、図１２に示されたものより多いまたは少ないビット、もしくは異なったパーティション、またはその両方を包含させることができる。
【００７７】
図１３は、アシスト・スレッドが実行中ならば状態レジスタを設定する（ＣＲＳＥ）命令を示す例示図である。ＣＲＳＥ命令１３００は、起動ハードウエア・スレッドに対し、起動ハードウエア・スレッドが、特定のアシスト・ハードウエア・スレッドが実行中であると判定する場合には状態レジスタ・ビットを設定するように命令することによって、ソフトウエア・プログラムが、特定のアシスト・ハードウエア・スレッドがまだコードを実行中であるかどうかを判定することができるようにする。
【００７８】
ＣＲＳＥ命令１３００は、ハードウエア・スレッドが実行するとき、「起動」ハードウエア・スレッドに対しアシスト・ハードウエア・スレッドが実行中かどうかチェックするよう命令する、ｏｐコード・フィールド（ビット０〜５）および拡張ｏｐコード・フィールド（ビット１６〜２０）を包含する。ＣＲＳＥ命令１３００は、アシスト・ハードウエア・スレッドをチェックするためのアシスト・スレッド番号（ＡＴＮ）を含む汎用レジスタを識別する、ビット１１〜１５を包含する。ビット６〜１０は、アシスト・ハードウエア・スレッドが実行中の場合に起動ハードウエア・スレッドが設定する状態レジスタ・ビット位置を包含する汎用レジスタを特定する（さらなる詳細については、図１１および対応する説明文を参照）。当業者ならよく理解できるように、プロセッサは、さまざまな種類の分岐命令のためまたは算術演算のオーバーフローなどの状態を示すために、状態レジスタ・ビットを使用する。これも当業者ならよく理解できるように、ＣＲＳＥ命令１３００には、図１３に示されたものより多いまたは少ないビット、もしくは異なったパーティション、またはその両方を包含させることができる。
【００７９】
図１４は、起動ハードウエア・スレッドが、複数のアシスト・ハードウエア・スレッドを呼び出しているのを示す例示図である。プロセッサ１４００は、ソフトウエア・プログラム１４１０が開始されると、起動ハードウエア・スレッド１４２０をソフトウエア・プログラム１４１０に割り当てる。ソフトウエア・プログラム１４１０は、例えば、特定のタスクのいろいろなコードのセクションを実行するため、本明細書で説明した複数の分岐開始命令（例、ＢＡＩＬもしくはＢＡＩＨ命令またはその両方）を包含する。これを受けて、起動ハードウエア・スレッド１４２０は、ハードウエア・スレッドの利用可能性をチェックし、アシスト・ハードウエア・スレッド１４５０〜１４７０を起動し、各アシスト・ハードウエア・スレッドに特定のアシスト・スレッド番号（ＡＴＮ）を割り当てる。追跡目的のため、起動ハードウエア・スレッド１４２０は、ＡＴＮをハードウエア状態ストア１４４０に格納し、ソフトウエア・プログラム１４１０は、これらＡＴＮを、ソフトウエア状態ストア１４１５に格納する。
【００８０】
起動ハードウエア・スレッド１４２０はＡＴＳＲ１４３０を包含し、該ＡＴＳＲは、直近に起動されたアシスト・ハードウエア・スレッドに関する情報（例、アシスト・ハードウエア・スレッド１４７０のＡＴＮなど）を格納する。同様に、アシスト・ハードウエア・スレッド１４５０〜１４７０のうちの最後に実行を停止したスレッドが、ＡＴＳＲ１４３０中に情報を格納する（さらなる詳細については、図２、図５および対応する説明文を参照）。
【００８１】
図１５は、起動ハードウエア・スレッドがアシスト・ハードウエア・スレッドを呼び出し、今度はそのアシスト・ハードウエア・スレッドが他のアシスト・ハードウエア・スレッドを呼び出しているのを示す例示図である。プロセッサ１５００は、ソフトウエア・プログラム１５１０が開始されると、起動ハードウエア・スレッド１５２０をソフトウエア・プログラム１５１０に割り当てる。ソフトウエア・プログラム１５１０は、本明細書で説明した複数の分岐開始命令を包含し、これら命令は、例えば、ソフトウエア・コード内で階層化することができる。
【００８２】
起動ハードウエア・スレッド１５２０が分岐開始命令の一つを実行し、このため、起動ハードウエア・スレッド１５２０はアシスト・ハードウエア・スレッド１５５０を起動することになる。上記で説明したように、起動ハードウエア・スレッド１５２０は、アシスト・ハードウエア・スレッド１５５０に対応するＡＴＮをハードウエア状態ストア１５４０中に格納し、ソフトウエア・プログラム１５１０は該ＡＴＮをソフトウエア状態ストア１５１５に格納する。
【００８３】
アシスト・ハードウエア・スレッド１５５０が実行を開始し、２つの分岐開始命令を実行する。これにより、アシスト・ハードウエア・スレッド１５５０はアシスト・ハードウエア・スレッド１５８０〜１５９０を起動し、これに応じて対応するＡＴＮをハードウエア状態ストア１５７０に格納する。また、前述のように、ソフトウエア・プログラム１５１０も、これらＡＴＮをソフトウエア状態ストア１５１５に格納する。
【００８４】
さらに、アシスト・ハードウエア・スレッド１５５０は、アシスト・ハードウエア・スレッド１５８０〜１５９０を追跡するためにＡＴＳＲ１５６０を用いる。しかして、ＡＴＳＲ１５６０は、直近に起動されたアシスト・ハードウエア・スレッドの情報（例、アシスト・ハードウエア・スレッド１５９０のＡＴＮ）を包含する。同様に、アシスト・ハードウエア・スレッド１５８０〜１５９０のうちの最後に実行を停止したスレッドが、ＡＴＳＲ１５６０中に情報を格納する（さらなる詳細については、図２、図５および対応する説明文を参照）。
【００８５】
図１６は、起動ハードウエア・スレッドが、異なるプロセッサ上のアシスト・ハードウエア・スレッドを起動しているのを示す例示図である。図１６は、アシスト・ハードウエア・スレッドが、起動ハードウエア・スレッドを実行する最初のプロセッサとは異なるプロセッサ上で実行している点を除けば、図１５と同様である。
【００８６】
プロセッサ１６００は、ソフトウエア・プログラム１６１０が開始されると、起動ハードウエア・スレッド１６２０をソフトウエア・プログラム１６１０に割り当てる。ソフトウエア・プログラム１６１０は、本明細書で説明した複数の分岐開始命令を包含し、これら命令は、例えば、ソフトウエア・コード内で階層化することができる。
【００８７】
起動ハードウエア・スレッド１６２０が分岐開始命令の一つを実行し、これにより、起動ハードウエア・スレッド１５２０はプロセッサ１６５０上のアシスト・ハードウエア・スレッド１６６０を呼び出し、対応するＡＴＮをハードウエア状態ストア１６４０に格納することになる。また、ソフトウエア・プログラム１６１０は、該ＡＴＮをソフトウエア状態ストア１６１５に格納する。
【００８８】
アシスト・ハードウエア・スレッド１６６０が実行を開始し、２つの分岐開始命令を実行する。これにより、アシスト・ハードウエア・スレッド１６６０は、アシスト・ハードウエア・スレッド１６９０〜１６９５を起動し、これに応じて対応するＡＴＮをハードウエア状態ストア１６８０に格納する。また、前述のように、ソフトウエア・プログラム１６１０も、これらＡＴＮをソフトウエア状態ストア１６１５に格納する。
【００８９】
アシスト・ハードウエア・スレッド１６６０は、アシスト・ハードウエア１６９０〜１６９５を追跡するためにＡＴＳＲ１６７０を用いる。しかして、ＡＴＳＲ１６７０は、直近に起動されたアシスト・ハードウエア・スレッドの情報（例、アシスト・ハードウエア・スレッド１６９５のＡＴＮ）を包含する。同様に、アシスト・ハードウエア・スレッド１６９０〜１６９５のうちの最後に実行を停止したスレッドが、ＡＴＳＲ１６７０中に情報を格納する（さらなる詳細については、図２、図５および対応する説明文を参照）。
【００９０】
図１７は、情報処理システム１７００を示し、該システムは、本明細書で説明したコンピューティング・オペレーションを遂行する能力のあるコンピュータ・システムの単純化された例である。情報処理システム１７００は、プロセッサ・インタフェース・バス１７１２に連結された一つ以上プロセッサ１７１０を包含する。プロセッサ・インタフェース・バス１７１２は、プロセッサ１７１０を、システム・メモリ１７２０を接続しているメモリ・コントローラ１７１５に接続し、プロセッサ（群）１７１０に対しシステム・メモリにアクセスするための手段を提供する。グラフィックス・コントローラ１７２５もメモリ・コントローラに接続している。一つの実施形態において、ＰＣＩ  Ｅｘｐｒｅｓｓ（Ｒ）バス１７１８は、メモリ・コントローラをグラフィックス・コントローラ１７２５に接続している。グラフィックス・コントローラ１７２５は、コンピュータ・モニタなどのディスプレイ・デバイス１７３０に接続している。
【００９１】
メモリ・コントローラ１７１５およびＩ／Ｏコントローラ１７３５は、バス１７１９を使って相互に接続している。一つの実施形態において、このバスは、メモリ・コントローラ１７１５とＩ／Ｏコントローラ１７３５との間で双方向に高速でデータを転送する、ダイレクト・メディア・インタフェース（ＤＭＩ：Ｄｉｒｅｃｔ  Ｍｅｄｉａ  Ｉｎｔｅｒｆａｃｅ）バスである。Ｉ／Ｏコントローラー・ハブ（ＩＣＨ：Ｉ／Ｏ  Ｃｏｎｔｒｏｌｌｅｒ  Ｈｕｂ）（Ｒ）としても知られるＩ／Ｏコントローラ１７３５は、一般に、メモリ・コントローラによって提供される能力よりも、遅い速度で作動する能力を実装するチップである。Ｉ／Ｏコントローラ１７３５は、通常、さまざまなコンポーネントを接続するために使われるさまざまなバスを備える。これらのバスには、例えば、ＰＣＩおよびＰＣＩ  Ｅｘｐｒｅｓｓ（Ｒ）バス、ＩＳＡバス、システム・マネジメント・バス（ＳＭＢｕｓ（またはＳＭＢ）：Ｓｙｓｔｅｍ  Ｍａｎａｇｅｍｅｎｔ  Ｂｕｓ）（Ｒ）もしくはロー・ピン・カウント（ＬＰＣ：Ｌｏｗ  Ｐｉｎ  Ｃｏｕｎｔ）（Ｒ）バス、またはこれらの組み合わせが包含される。ＬＰＣバスは、多くの場合、起動用ＲＯＭ１７９６および（「スーパーＩ／Ｏ」チップを使う）「レガシー」Ｉ／Ｏデバイスなど、低処理能力デバイスを接続する。「レガシー」Ｉ／Ｏデバイス（１７９８）には、例えば、シリアルおよびパラレル・ポート、キーボード、マウス、もしくはフロッピー・ディスク・コントローラ、またはこれの組み合わせなどが包含される。また、ＬＰＣバスは、Ｉ／Ｏコントローラ１７３５を、トラステッド・プラットフォーム・モジュール（ＴＰＭ：Ｔｒｕｓｔｅｄ  Ｐｌａｔｆｏｒｍ  Ｍｏｄｕｌｅ）１７９５に接続する。Ｉ／Ｏコントローラ１７３５に大抵が包含される他のコンポーネントには、直接メモリ・アクセス（ＤＭＡ：Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）コントローラ、プログラム可能割り込みコントローラ（ＰＩＣ：Ｐｒｏｇｒａｍｍａｂｌｅ  Ｉｎｔｅｒｒｕｐｔ  Ｃｏｎｔｒｏｌｌｅｒ）、および、バス１７８４を使ってＩ／Ｏコントローラ１７３５をハード・ディスク・ドライブなどの不揮発性記憶デバイス１７８５に接続する、記憶デバイス・コントローラが含まれる。
【００９２】
エクスプレスカード（Ｒ）１７５５は、ホットプラグ可能なデバイスを該情報処理システムに接続するスロットである。エクスプレスカード（Ｒ）１７５５は、ユニバーサル・シリアル・バス（ＵＳＢ：Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）およびＰＣＩ  Ｅｘｐｒｅｓｓ（Ｒ）バスの両方を使って、Ｉ／Ｏコントローラ１７３５に接続しており、ＰＣＩ  Ｅｘｐｒｅｓｓ（Ｒ）およびＵＳＢ両方の接続性をサポートしている。Ｉ／Ｏコントローラ１７３５は、ＵＳＢにつながれているデバイスにＵＳＢ接続性を提供する、ＵＳＢコントローラ１７４０を包含する。これらのデバイスには、ウェブカム（カメラ）１７５０、赤外線（ＩＲ：ｉｎｆｒａｒｅｄ）受信機１７４８、キーボードおよびトラックパッド１７４４、並びに、無線パーソナル・エリア・ネットワーク（ＰＡＮ：ｐｅｒｓｏｎａｌ  ａｒｅａ  ｎｅｔｗｏｒｋ）を提供するブルートゥース・デバイス１７４６が包含される。また、ＵＳＢコントローラ１７４０は、マウス、着脱可能不揮発性記憶デバイス１７４５、モデム、ネットワーク・カード、ＩＳＤＮコネクタ、ファックス、プリンタ、ＵＳＢハブ、および他の多種類のＵＳＢ接続デバイスなど、他の雑多なＵＳＢ接続デバイス１７４２に対しＵＳＢ接続性を提供する。着脱可能不揮発性記憶デバイス１７４５が、ＵＳＢ接続デバイスとして示されているが、着脱可能不揮発性記憶デバイス１７４５は、ファイヤーワイヤ（Ｒ）インタフェースなど、異なるインタフェースを使って接続することも可能であろう。
【００９３】
無線ローカル・エリア・ネットワーク（ＬＡＮ：Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）デバイス１７７５は、ＰＣＩまたはＰＣＩ  Ｅｘｐｒｅｓｓ（Ｒ）バス１７７２を介してＩ／Ｏコントローラ１７３５に接続している。ＬＡＮデバイス１７７５は、通常、情報処理システム１７００と別のコンピュータ・システムまたはデバイスとの間で無線通信するため、全てが同一のプロトコルを用いる無線変調技術のＩＥＥＥ  ８０２．１１規格の一つを実装している。光記憶デバイス１７９０は、シリアルＡＴＡ（ＳＡＴＡ：Ｓｅｒｉａｌ  ＡＴＡ）バス１７８８を用いてＩ／Ｏコントローラ１７３５に接続している。シリアルＡＴＡアダプタおよびデバイスは、高速シリアル・リンクを介して通信する。またシリアルＡＴＡバスは、Ｉ／Ｏコントローラ１７３５を、ハード・ディスク・ドライブなど他の形態の記憶デバイスにも接続する。サウンド・カードなどのオーディオ回路１７６０は、バス１７５８を介してＩ／Ｏコントローラ１７３５に接続している。また、オーディオ回路１７６０は、オーディオ・ライン入力および光デジタル・オーディオ入力ポート１７６２、光デジタル出力およびヘッドフォン・ジャック１７６４、内蔵スピーカ１７６６、および内蔵マイクロフォン１７６８などの機能を備える。イーサネット（Ｒ）コントローラ１７７０は、ＰＣＩまたはＰＣＩ  Ｅｘｐｒｅｓｓ（Ｒ）バスなどのバスを使って、Ｉ／Ｏコントローラ１７３５に接続している。イーサネット（Ｒ）コントローラ１７７０は、情報処理システム１７００を、ローカル・エリア・ネットワーク（ＬＡＮ）、インターネット、および他の公衆または個人コンピュータ・ネットワークなどの、コンピュータ・ネットワークに接続する。
【００９４】
図１７は一つの情報処理システムを示しているが、情報処理システムは多くの形態をとり得る。例えば、情報処理システムは、デスクトップ、サーバ、携帯、ラップトップ、ノート、または他のフォーム・ファクタのコンピュータまたはデータ処理システムの形をとることができる。さらに、情報処理システムは、携帯端末（ＰＤＡ：ｐｅｒｓｏｎａｌ  ｄｉｇｉｔａｌ  ａｓｓｉｓｔａｎｔ）、ゲーム・デバイス、ＡＴＭマシン、携帯電話デバイス、通信デバイス、またはプロセッサとメモリとを包含する他のデバイスなど、他のフォーム・ファクタをとることもできる。
【００９５】
前述図面中のフローチャートおよびブロック図は、本開示のさまざまな実施形態によるシステム、方法、およびコンピュータ・プログラムの、実装可能なアーキテクチャ、機能、並びにオペレーションを示している。この点において、フローチャートまたはブロック図中の各ブロックは、規定された論理機能（群）を実施するための一つ以上の実行可能命令を含むコードのモジュール、セグメント、または部分を表し得る。また、ある別の実装においては、ブロックに記載された機能が図に記載されたのと違った順序で実施され得ることに留意すべきである。例えば、関与する機能性によっては、連続に示された２つのブロックが、実際は実質上同時に実行されることがあり、ブロック群が時として逆の順序で実行され得る。さらに、ブロック図もしくはフローチャート説明図またはその両方の各ブロック、および、ブロック図もしくはフローチャート説明図またはその両方のブロックの組合せが、特定の機能または処理を遂行する特殊用途のハードウエア・ベース・システム、または特殊用途ハードウエアとコンピュータ命令との組合せによって実行できることにも留意すべきである。
【００９６】
本開示の特定の実施形態を提示し説明してきたが、当業者にとって、本開示およびそのより広義な解釈から逸脱することなく、本明細書の教示に基づき、変更および修改を加えるのが可能なことは自明であろう。従って、添付の請求項は、かかる全ての変更および修改を、本開示の真の精神および範囲内にあるものとして請求範囲に包含するものである。さらに、本開示は、添付の請求項によってだけ定義されることを理解すべきである。当業者は、提示された請求要素に特定の数が意図されている場合、かかる意図は、その請求項に明示で記載され、かかる記載のない場合はそういった制限が存在しないことを理解していよう。次の添付請求項は、制限のない例に対しその理解のための補助として、請求要素を提示するための導入句「少なくとも一つの」および「一つ以上の」の使用を包含する。しかしながら、かかる語句の使用によって、不定冠詞「ある（ａまたはａｎ）」による請求要素の提示が、かかる提示の請求要素を包含するいかなる特定の請求項に対しても、たとえ同じ請求項に、導入句「少なくとも一つの」または「一つ以上の」と「ある（ａまたはａｎ）」などの不定冠詞とが含まれているとしても、その請求項を、かかる要素を一つだけ含む開示に限定することを意味すると解釈すべきではなく、請求項中の定冠詞の使用についても同じことが言える。
【符号の説明】
【００９７】
１００  プロセッサ
１０５  命令
１１０  ソフトウエア・プログラム
１１５  ソフトウエア状態ストア
１２０  起動ハードウエア・スレッド
１２５  ハードウエア状態ストア
１３０  アシスト・スレッド状態レジスタ
１４０  起動スレッド・レジスタ
１４５  命令
１５０  アシスト・ハードウエア・スレッド
１６０  アシスト・スレッド状態レジスタ
１７０  アシスト・スレッド・レジスタ
【図１】
0005710434.tif 000002
【図２】
0005710434.tif 000003
【図３】
0005710434.tif 000004
【図４】
0005710434.tif 000005
【図５】
0005710434.tif 000006
【図６】
0005710434.tif 000007
【図７】
0005710434.tif 000008
【図８】
0005710434.tif 000009
【図９】
0005710434.tif 000010
【図１０】
0005710434.tif 000011
【図１１】
0005710434.tif 000012
【図１２】
0005710434.tif 000013
【図１３】
0005710434.tif 000014
【図１４】
0005710434.tif 000015
【図１５】
0005710434.tif 000016
【図１６】
0005710434.tif 000017
【図１７】
0005710434.tif 000018