起動ハードウエアスレッドによって第一アシストハードウエアスレッドを起動するステップであって、前記第一アシストハードウエアスレッドは第一コードセグメントを実行する、前記起動するステップと、一つ以上の実行中のアシストハードウエアスレッドを示す、アシストスレッド実行インジケータを設定するステップと、第二アシストハードウエアスレッドを起動するステップであって、前記第二アシストハードウエアスレッドは第二コードセグメントを実行する、前記起動するステップと、前記第一アシストハードウエアスレッドおよび前記第二アシストハードウエアスレッドの両方が終了していることを示す、前記アシストスレッド実行インジケータの変化を識別するステップと、前記アシストスレッド実行インジケータの前記変化を識別するのに応じて、アシストハードウエアスレッドの実行結果を処理するステップと、を含む、マシン実装された方法。前記第一アシストハードウエアスレッドを起動する前記起動ハードウエアスレッドを呼び出すソフトウエアプログラムは、前記アシストスレッド実行インジケータへの一回の読み取りオペレーションを実行することによって、前記第一アシストハードウエアスレッドおよび前記第二アシストハードウエアスレッドの両方が実行を停止したことを判定する、請求項1に記載の方法。アシストスレッド状態レジスタは、前記アシストスレッド実行インジケータを包含し、前記方法は、前記第一アシストハードウエアスレッドの実行を完了するステップと、前記第一アシストハードウエアスレッドが前記第二アシストハードウエアスレッドはまだ実行中であることを検知するのに応じて、前記第一アシストハードウエアスレッドによって、前記アシストハードウエアスレッドのビットを変更しない決定をするステップと、前記第一アシストハードウエアスレッドの前記完了の後、前記第二アシストハードウエアスレッドの実行を完了するステップと、前記第二アシストハードウエアスレッドが前記第一アシストハードウエアスレッドは実行していないことを検知するのに応じて、前記第二アシストハードウエアスレッドによって、前記アシストハードウエアスレッドのビットを変更する決定をするステップと、前記第二アシストハードウエアスレッドによって、前記アシストスレッド状態レジスタに包含されるアシストスレッド状態フィールド中に終了インジケータを格納するステップであって、前記終了インジケータは前記第二アシストハードウエアスレッドが終了した理由を表す、前記格納するステップと、をさらに含む、請求項1に記載の方法。前記第二アシストハードウエアスレッドが前記第一アシストハードウエアスレッドは実行していないのを検知するのに応じて、前記方法は、前記第二アシストハードウエアスレッドによって、前記アシストスレッド状態レジスタに包含される停止アシストスレッド状態フィールド中に停止アシストスレッドパラメータ値を格納するステップ、をさらに含み、前記停止アシストスレッドパラメータ値は、前記第二アシストハードウエアスレッドが前記第二コードセグメントの実行を成功裏に完了したかどうかを表す、請求項3に記載の方法。前記第一コードセグメントおよび前記第二コードセグメントはソフトウエアプログラムに包含され、前記方法は、前記起動ハードウエアスレッドによって、前記ソフトウエアプログラムに包含されている、アシストスレッドが実行中である条件での分岐BCE命令を実行するステップをさらに含み、前記実行するステップは、前記BCE命令から複数の汎用レジスタ番号を抜き出すステップであって、前記複数の汎用レジスタ番号は、アシストプロセッサ番号およびターゲットアドレスを包含する複数の汎用レジスタを識別する、前記抜き出すステップと、前記複数の汎用レジスタから、前記アシストプロセッサ番号および前記ターゲットアドレスを読み出すステップと、前記読み出されたアシストプロセッサ番号が、前記第一アシストハードウエアスレッドに対応することの判定に応じて、前記第一アシストハードウエアスレッドが実行中かどうかを判定するステップと、前記第一アシストハードウエアスレッドが実行中との判定に応じて、前記ターゲットアドレスに分岐するステップと、前記第一アシストハードウエアスレッドが実行していないとの判定に応じて、前記BCE命令に続く次の命令を実行するステップと、をさらに含む、請求項1に記載の方法。前記起動ハードウエアスレッドは、第一実行ユニットを包含し、前記第一アシストハードウエアスレッドは、前記第一実行ユニットとは異なる第二実行ユニットを包含する請求項1に記載の方法。前記第一コードセグメントおよび前記第二コードセグメントはソフトウエアプログラムに包含されており、前記方法は、前記起動ハードウエアスレッドによって、前記ソフトウエアプログラムに包含されている、アシストスレッドが実行中ならば状態レジスタを設定するCRSE命令を実行するステップをさらに含み、前記実行するステップは前記CRSE命令から複数の汎用レジスタ番号を抜き出すステップであって、前記複数の汎用レジスタ番号は、アシストプロセッサ番号および状態レジスタビット番号を包含する複数の汎用レジスタを識別する、前記抜き出すステップと、前記複数の汎用レジスタから、前記アシストプロセッサ番号および前記状態レジスタビット番号を読み出すステップと、前記読み出されたアシストプロセッサ番号が、前記第一アシストハードウエアスレッドに対応することの判定に応じて、前記第一アシストハードウエアスレッドが実行中かどうかを判定するステップと、前記第一アシストハードウエアスレッドが実行中であるとの判定に応じて、前記読み出された状態ビットレジスタ番号に対応する状態ビットを、状態レジスタにおいて設定するステップと、前記第一アシストハードウエアスレッドが実行していないとの判定に応じて、前記読み出された状態ビットレジスタ番号に対応する前記状態ビットを、前記状態レジスタ中においてクリアするステップと、をさらに含む、請求項1に記載の方法。前記ソフトウエアプログラムによって、前記状態ビットが設定されていることを検知するステップと、前記状態ビットが設定されていることの検知に応じて、ソフトウエアコードを実行するステップと、をさらに含む、請求項7に記載の方法。前記第一アシストハードウエアスレッドが前記第二アシストハードウエアスレッドを呼び出す、請求項1に記載の方法。前記起動ハードウエアスレッドが前記第二アシストハードウエアスレッドを呼び出す、請求項1に記載の方法。一つ以上のプロセッサ、前記プロセッサの少なくとも一つに連結されたメモリ、および前記メモリに格納される命令のセット、を含む情報処理システムであって、前記請求項1乃至請求項8のいずれかに記載の方法のすべてのステップの処理を遂行するため、前記プロセッサの少なくとも一つによって実行される、前記情報処理システム。起動ハードウエアスレッドと、前記起動ハードウエアスレッドに起動された第一アシストハードウエアスレッドであって、前記第一アシストハードウエアスレッドは第一コードセグメントを実行する、前記第一アシストハードウエアスレッドと、前記第一アシストハードウエアスレッドを起動するのに応じて、前記起動ハードウエアスレッドによって設定されるアシストスレッド実行インジケータと、前記起動ハードウエアスレッドによって起動された第二アシストハードウエアスレッドであって、前記第二アシストハードウエアスレッドは第二コードセグメントを実行する、前記第二アシストハードウエアスレッドと、を含むプロセッサであって、前記起動ハードウエアスレッドは、前記アシストスレッド実行インジケータの変化を検知し、前記変化は、前記第一アシストハードウエアスレッドおよび前記第二アシストハードウエアスレッドの両方が終了したことを示す、前記プロセッサ。ソフトウエアプログラムが、前記アシストスレッド実行インジケータへの一回の読み取りオペレーションを実行することによって、前記第一アシストハードウエアスレッドおよび前記第二アシストハードウエアスレッドの両方が実行を停止したことを判定する、請求項12に記載のプロセッサ。監視プログラムの関与なしに、アシストハードウエアスレッドの状態を追跡するための方法、さらに具体的には、起動ハードウエアスレッドが、アシストスレッド状態レジスタを利用してアシストハードウエアスレッドのアクテビティを追跡するための方法、情報処理システム、およびプロセッサを提供する。プロセッサは起動ハードウエアスレッドを包含し、該スレッドは、第一コードセグメントを実行するため第一アシストハードウエア起動する。次いで、起動ハードウエアスレッドは、第一アシストハードウエアスレッドを起動したのに応じて、アシストスレッド実行インジケータを設定する。設定されたアシストスレッド実行インジケータは、アシストハードウエアスレッドが実行中かどうかを表示する。第二アシストハードウエアスレッドが起動され、第二コードセグメントの実行を開始する。これを受け、起動ハードウエアスレッドは、アシストスレッド実行インジケータの変化を検知し、該インジケータは、第一アシストハードウエアスレッドおよび第二アシストハードウエアスレッドの両方が終了したときそのことを示す。しかして、起動ハードウエアスレッドは、両方のアシストハードウエアスレッドが終了したのに応じ、アシストハードウエアスレッドの実行結果を評価する。前述は要約であり、しかして必然的に、単純化、一般化、細部の省略を含み、それ故、当業者は、上記の要約が例示のためだけのものであり、決して限定を意図したものでないことをよく理解していよう。本開示の他の態様、発明的特質、および利点は請求項によってだけ定義され、これらは以下に述べる非限定的な詳細説明の中で明らかにされよう。当業者は、添付の図面を参照することにより、本開示をよりよく理解し、その数々の目的、特質、および利点を明らかにすることができよう。本開示のさまざまな実施形態の徹底的理解を提供するため、以下の記述および図面においていくつか特定の詳細を説明する。本開示の各種実施形態を不必要に分かりにくくするのを避けるため、以下の開示では、コンピューティングおよびソフトウエア技術によく関連付けられる特定の周知の細目は説明しない。さらに、当業者は、以降で述べる細部の一つ以上が無くても、本開示の他の実施形態を実行できることを理解するであろう。最後に、以下の開示において、さまざまな方法が、ステップおよびシーケンスを参照しながら説明されるが、かかる説明は、本開示の実施形態の明快な実現を提供するためのものであって、これらステップおよびステップのシーケンスが、本開示の遂行に必須であると見なすべきではない。それよりむしろ、以下は本開示のある例の詳細な説明を提供することを意図したものであり、本開示自体を限定すると理解すべきではない。それどころか、いくつもの変形が本開示の範囲内に含まれ得、この範囲は本明細書に添付された請求項によって定義される。当業者ならよく理解するであろうように、本開示の態様は、システム、方法、またはコンピュータプログラムとして具現することができる。従って、本開示の態様は、全体がハードウエアの実施形態、全体がソフトウエアの実施形態ファームウエア、常駐ソフトウエア、マイクロコードなどを含む、または本明細書では全て一般に、回路、モジュールまたはシステムと呼ぶこともある、ソフトウエアおよびハードウエア態様を組み合わせた実施形態の形を取ることができる。さらに、本開示の態様は、媒体内に具現されたコンピュータ可読のプログラムコードを有する一つ以上のコンピュータ可読媒体群中に体現されたコンピュータプログラムの形を取ることもできる。一つ以上のコンピュータ可読媒体群の任意の組み合わせを用いることができる。コンピュータ可読媒体は、コンピュータ可読信号媒体、またはコンピュータ可読記憶媒体とすることができる。コンピュータ可読記憶媒体は、例えば、以下に限らないが、電子的、磁気的、光学的、電磁気的、赤外線的、または半導体のシステム、装置、またはデバイス、あるいはこれらの任意の適切な組み合わせとすることができる。コンピュータ可読記憶媒体のさらに具体的な例限定的リストには、一つ以上の配線を有する電気接続、携帯コンピュータディスケット、ハードディスク、ランダムアクセスメモリRAM:randomaccessmemory、読み取り専用メモリROM:read-onlymemory、消去可能プログラム可能読み取り専用メモリEPROMerasableprogrammableread-onlymemoryまたはフラッシュメモリ、光ファイバ、携帯コンパクトディスク読み取り専用メモリCDROM:compactdiscread-onlymemory、光記憶デバイス、磁気記憶デバイス、またはこれらの任意の適切な組み合わせが包含されよう。本文書の文脈において、コンピュータ可読記憶媒体は、命令実行システム、装置、またはデバイスによってまたはこれらに関連させて使用するためのプログラムを、収容または格納できる任意の有形媒体とすることができる。コンピュータ可読信号媒体には、例えばベースバンド中または搬送波の一部として、信号中に具現されたコンピュータ可読プログラムコードを有する伝播データ信号を含めることができる。かかる伝搬信号は、以下に限らないが、電磁気的、光学的、またはこれらの任意の適切な組み合わせを含め、任意のさまざまな形をとることができる。コンピュータ可読信号媒体は、コンピュータ可読記憶媒体でなく、命令実行システム、装置、またはデバイスによってまたはこれらに関連させて使用するためのプログラムを、通信、伝搬、または移送できる、任意のコンピュータ可読媒体であり得る。コンピュータ可読媒体中に具現されたプログラムコードは、以下に限らないが、無線、有線ライン、光ファイバケーブル、RFなど、またはこれらの任意の適切な組み合わせを含め、任意の適切な媒体を用いて送信することができる。本開示の態様のオペレーションを実行するためのコンピュータプログラムコードは、JavaR、SmalltalkR、Cなどのオブジェクト指向プログラミング言語、および、Cプログラミング言語または類似のプログラミング言語などの従来式手続き型プログラミング言語を含め、一つ以上のプログラミング言語の任意の組合せで書くことができる。このプログラムコードは、全体をユーザのコンピュータで、一部をユーザのコンピュータで、単独型ソフトウエアパッケージとして実行することができ、一部をユーザのコンピュータで他の部分を遠隔コンピュータで、または全体を遠隔のコンピュータまたはサーバで実行することができる。後者のシナリオでは、遠隔コンピュータを、ローカルエリアネットワークLAN:localareanetworkまたは広域ネットワークWAN:wideareanetworkを含む任意の種類のネットワークを介してユーザのコンピュータに接続することができ、あるいは例えば、インターネットサービスプロバイダを使いインターネットを介し外部のコンピュータへの接続を行うことができる。本開示の実施形態による方法、装置システムおよびコンピュータプログラムのフローチャート説明図もしくはブロック図またはその両方を参照しながら本開示の態様を以下に説明する。フローチャート説明図もしくはブロック図あるいはその両方の各ブロック、および、フローチャート説明図もしくはブロック図またはその両方のブロックの組合せは、コンピュータプログラム命令によって実行可能であることが理解されよう。これらのコンピュータプログラム命令を、汎用コンピュータ、特殊用途コンピュータ、又は他のプログラム可能データ処理装置のプロセッサに供給してマシンを形成し、コンピュータ又は他のプログラム可能データ処理装置のプロセッサを介して実行されるこれらの命令が、フローチャートもしくはブロック図またはその両方のブロックまたはブロック群中に規定された機能/処理を実施するための手段を生成するようにすることができる。また、これらのコンピュータプログラム命令を、コンピュータ、他のプログラム可能データ処理装置、または他のデバイスに対し特定の仕方で機能するよう命令できるコンピュータ可読媒体に格納し、該コンピュータ可読媒体に格納された命令が、フローチャートもしくはブロック図またはその両方のブロックまたはブロック群中に規定された機能/処理を実施する命令群を包含する製品を形成するようにすることができる。同様に、コンピュータプログラム命令を、コンピュータ、他のプログラム可能データ処理装置、または他のデバイスにロードして、これらコンピュータ、他のプログラム可能装置、または他のデバイス上で一連のオペレーションステップを遂行させてコンピュータ実行のプロセスを生成し、これらコンピュータまたは他のプログラム可能装置で実行される命令が、フローチャートもしくはブロック図またはその両方のブロックまたはブロック群中に規定された機能/処理を実施するためのプロセスを提供するようにすることもできる。以下の詳細説明は、一般的には前述の本開示の要約をたどり、必要に応じ、本開示のさまざまな態様および実施形態の定義をさらに説明、展開することにする。図1は、あるプロセッサのソフトウエアプログラムが、ハイパーバイザを用いずに、マルチスレッドプロセッサ上でアシストハードウエアスレッドを起動するのを示す例示図である。プロセッサ100は、ソフトウエアプログラム110が実行を開始すると、ソフトウエアプログラム110に対し起動ハードウエアスレッド120を割り当てる。ソフトウエアプログラム110が、起動ハードウエアスレッド120上で命令105を実行する際に、命令105の一つに分岐開始命令があり、これは、起動ハードウエアスレッド120に対し、例えば、ソフトウエアプログラム110の命令のサブセット命令145を実行するなどのため、別のハードウエアスレッドが利用可能かどうかをチェックすることを命令する。本開示では、2種類の分岐開始命令を説明し、これらは分岐開始軽量BAIL命令および分岐開始重量BAIH命令である。本明細書で説明するように、BAIL命令とBAIH命令との違いは、BAIH命令は、アシストハードウエアスレッドが実行を開始したとき、起動ハードウエアスレッドの全ての格納オペレーションが、アシストハードウエアスレッドに可視であることを確実にすることである。しかるが故、ソフトウエアプログラムがメモリ同期を必要とする場合、ソフトウエアプログラムは、BAIL命令の代わりにBAIH命令を用いることができる。これに対し、ソフトウエアプログラムがメモリ同期を必要としない場合、BAIL命令はメモリ同期を保証しないがその代りより速く実行するので、ソフトウエアプログラムは、BAIH命令の代わりにBAIL命令を用いることができる。当業者は、起動ハードウエアスレッドにアシストハードウエアスレッドを起動するよう命令するために、他の種類の分岐開始命令が利用可能なことをよく理解することができよう。起動ハードウエアスレッド120が、分岐開始命令を実行するとき、起動ハードウエアスレッド120は、ハードウエア状態ストア125をチェックして別のハードウエアスレッドが利用可能かどうかを判定する。例えば、プロセッサ100には、一揃いのハードウエアスレッドを包含させることができ、ハードウエア状態ストア125は、どのハードウエアスレッドが利用可能かを示す情報を含むさらなる詳細については、図3Bおよび対応する説明文を参照。アシストハードウエアスレッドが利用可能な場合、起動ハードウエアスレッド120は、アシストハードウエアスレッド150を呼び出し、起動スレッドレジスタ140からアシストスレッドレジスタ170にレジスタ値をコピーする。一つの実施形態において、起動ハードウエアスレッド120が起動スレッドレジスタ140からアシストスレッドレジスタ170にコピーするレジスタ値は、分岐開始命令の種類、および命令パラメータ値によって決まるさらなる詳細については、図6~7および対応する説明文を参照。一つの実施形態では、起動ハードウエアスレッド120およびアシストハードウエアスレッド150は、各々、命令を実行するための専用の実行ユニットを有する。起動ハードウエアスレッド120は、ソフトウエアプログラム110に対し、アシストスレッド状態レジスタATSR130が包含するアシストスレッド有効ATV:assistthreadvalidビットを設定することによって、アシストハードウエアスレッド150が利用可能であることを連絡するさらなる詳細については、図2、図4および対応する説明文を参照。また、起動ハードウエアスレッド120は、アシストハードウエアスレッド150にアシストスレッド番号ATN:assistthreadnumber値を割り当て、アシストハードウエアスレッド150の状態を追跡するために、起動ハードウエアスレッド120はこの値をハードウエア状態ストア125に格納し、ソフトウエアプログラム110はソフトウエア状態ストア115に格納する。アシストハードウエアスレッド150が起動したならば、ソフトウエアプログラム110は、アシストハードウエアスレッド150上で命令145を実行する。アシストハードウエアスレッド150は、例えば、アシストハードウエアスレッド150が、1コードの実行を完了する、2アシストスレッド停止SAT命令を実行する、3起動ハードウエアスレッド120がSAT命令を実行し、アシストハードウエアスレッド150を終了させる、または4プロセッサ100がアシストハードウエアスレッド150を終了させる、まで命令145の実行を続けるさらなる詳細については、図5、図8および対応する説明文を参照。アシストハードウエアスレッド150が実行を停止するとき、アシストハードウエアスレッド150は、起動ハードウエアスレッド120のアシストスレッド状態レジスタ130に、終了インジケータおよびアドレス情報などの情報を格納するさらなる詳細については、図2、図8および対応する説明文を参照。一つの実施形態において、ソフトウエアプログラム110は、種々のコードセグメントを実行するために複数のアシストハードウエアスレッドを要求する。この実施形態では、最後に実行を停止したアシストハードウエアスレッドが、アシストスレッド状態レジスタ130に、終了インジケータおよびアドレス情報を書き込むさらなる詳細については、図5、図14および対応する説明文を参照。別の実施形態では、アシストハードウエアスレッド150が、後続のアシストハードウエアスレッドを呼び出すことができる。この実施形態において、アシストハードウエアスレッド150が、後続アシストハードウエアスレッドに対する起動ハードウエアスレッドとなり、アシストスレッド状態レジスタ160を使って、後続アシストハードウエアスレッドに関する情報を格納するさらなる詳細については、図15および対応する説明文を参照。この実施形態において、起動ハードウエアスレッドが、アシストハードウエアスレッド150を終了する命令を実行すると、アシストハードウエアスレッド150は、自動的に後続のアシストハードウエアスレッドを終了させる。さらに別の実施形態では、ソフトウエアプログラム110が、アシストハードウエアスレッド150がまだ実行中かどうかを判定するため、アシストハードウエアスレッド150の具体的状態のチェックを望むことができる。この実施形態において、ソフトウエアプログラム110は、起動ハードウエアスレッド120上で、アシストスレッドが実行中である条件での分岐BCE命令、または、アシストスレッドが実行中ならば状態レジスタを設定するCRSE命令などのアシストスレッドチェック命令を実行する。この実施形態において、ソフトウエアプログラム110は、ソフトウエア状態ストア115から、アシストハードウエアスレッド150に対応するアシストスレッド番号ATNを読み出し、そのATNを汎用レジスタに格納する。これを受け、ソフトウエアプログラム110は、BCE命令中にこの汎用レジスタの番号を含め、該命令を起動ハードウエアスレッド120が実行する。起動ハードウエアスレッド120は、汎用レジスタからATNを読み出し、ハードウエア状態ストア125にアクセスして、アシストハードウエアスレッド150の状態をチェックする。これに続き、起動ハードウエアスレッド120は、アシストハードウエアスレッド150の状態に応じて、分岐または条件ビットを設定するさらなる詳細については、図10~13および対応する説明文を参照。図2は、アシストスレッド状態レジスタASTRを示す例示図である。起動ハードウエアスレッド120などの起動ハードウエアスレッドは、全体的なアシストハードウエアスレッドの状態を追跡するため、ASTR130を用いる。ASTR130は、かかる追跡情報を格納するためのフィールド210~260を包含する。アシストスレッド番号ATNフィールド210は、直近に起動されたアシストハードウエアスレッドに対応する番号を包含する。例えば、起動ハードウエアスレッド120が、アシストハードウエアスレッド1、2、および3をこの順で起動したとすれば、ATNフィールドには番号3が含まれる。しかして、ATSR130は、特定の起動ハードウエアスレッドが起動できるアシストハードウエアスレッドの数に制限を課していないので、ATSR130はATNフィールド210のビット量による制限を除けばプラットフォーム拡張性である。アシストスレッド有効ATVビット220は、ATNフィールド210の有効性を示すビットを包含する。ソフトウエアプログラムは、このビットをチェックし、要求したアシストハードウエアスレッドが実際に起動しているかどうかを判定するさらなる詳細については、図4および対応する説明文を参照。ATSR130は、アシストスレッド実行インジケータを包含し、一つの実施形態において、これはアシストスレッド実行ATE:assistthreadexecutingビット230であり、該ビットは、現在実行中のアシストハードウエアスレッドがあるかどうかを示す。ソフトウエアプログラムは、一回の読み取りオペレーションでATEビット230をチェックすることができ、アシストハードウエアスレッドの全てが実行を終えているかどうかを識別するさらなる詳細については、図4、図5および対応する説明文を参照。一つの実施形態において、列240~260は、ATEビット230が、実行しているアシストハードウエアスレッドがないことを示している場合においてのみ有効である情報を含む。アシストスレッド状態ATSフィールド240は、最後のアシストハードウエアスレッドの終了理由例、アシストスレッドがSAT命令を実行した、起動スレッドがSAT命令を実行した、エラーが発生した、プロセッサがリソースを先取りした、などを示す終了インジケータを包含する。SATパラメータSATP:SATparameterフィールド250は、実行している最後のアシストハードウエアスレッドがSAT命令を実行するとき、そのアシストハードウエアスレッドが起動ハードウエアスレッドに渡したパラメータを包含する。例えば、SATパラメータは、アシストハードウエアスレッドがタスクコードの実行を成功裏に完了したどうかを示すことができる。最後に、次の命令NI:nextinstructionフィールド260は、アシストハードウエアスレッドの最後に実行された命令に続く命令のアドレスを包含する。図3Aは、ソフトウエアプログラムがアシストハードウエアスレッドの状態を管理するため用いるソフトウエア状態格納領域を示す例示図である。図示のように、ソフトウエア状態ストア115は、現在実行中のアシストハードウエアスレッドに対するアシストスレッド番号ATN値列300および対応する開始アドレス列310のリストを包含する。一つの実施形態において、この開始アドレスは、BAIL/BAIH命令が、アシストハードウエアスレッドに対しコードの実行を開始するよう指定したアドレスであるさらなる詳細については、図6、図7および対応する説明文を参照。さらに別な実施形態において、ソフトウエア状態ストア115には、開始アドレスを含めず、それよりむしろ、対応するタスクに対する識別名を格納することができ、この実施形態では、識別名をコードセクションに関連付ける異なったテーブルを含めることができる。ソフトウエア状態ストア115は、揮発性メモリ、またはコンピュータハードドライブなどの不揮発性メモリに格納することができる。図3Bは、ハードウエアスレッドがアシストハードウエアスレッドの状態を管理するため用いるハードウエア状態格納領域を示す例示図である。前述のソフトウエア状態ストア115と同様に、ハードウエア状態ストア125は、ATN値列320、アシストハードウエアスレッドに対する対応ハードウエアスレッド番号列330、および各アシストハードウエアスレッドの状態列340のリストを包含する。一つの実施形態において、列330中の対応スレッド番号は、列320中のアシストスレッド番号と同一にすることができる。当業者ならよく理解できるように、ハードウエア状態ストア125は、情報を格納するベクトルとし、ベクトルの各エントリが特定のハードウエアスレッドの状態を表すようにすることができる。図4は、アシストハードウエアスレッドを起動している起動ハードウエアスレッドの中で実施されるステップを示す例示図である。ソフトウエアプログラムの処理は400で開始され、次いでステップ405において、ソフトウエアプログラムは、分岐開始軽量BAILまたは分岐開始重量BAIH命令を実行する。一つの実施形態において、BAIL命令とBAIH命令との間の違いは、起動ハードウエアスレッドが実施するメモリ同期の量であるさらなる詳細については、図9および対応する説明文を参照。ソフトウエアプログラムを実行する起動ハードウエアスレッドの処理は、450で開始され、次いで、起動ハードウエアスレッドはハードウエア状態ストア125にアクセスし、別のハードウエアスレッドアシストハードウエアスレッドが利用可能かどうかチェックする。ハードウエア状態ストア125は、プロセッサのハードウエアスレッドの利用可能性に関する情報を包含するさらなる詳細については、図3Bおよび対応する説明文を参照。起動ハードウエアスレッドは、アシストハードウエアスレッドに使うため別のハードウエアスレッドが利用可能かどうかを判定する判断460。アシストハードウエアスレッドが利用可能でない場合、判断460は、いいえブランチ462に分岐し、次いで、起動ハードウエアスレッドは、アシストスレッド状態レジスタATSRのATVビット220のアシストスレッド有効ビットを0に設定するステップ463。次いで、アシストハードウエアスレッドが利用できないので、起動ハードウエアスレッドは、アシストハードウエアスレッドに予定していたタスクをステップ440で実行し、処理は445で終了する。また一方、アシストハードウエアスレッドが利用可能な場合、判断460は、はいブランチ465に分岐し、次いで起動ハードウエアスレッドは、ステップ470において、アシストスレッド有効ATVビットを1に設定する。次に、起動ハードウエアスレッドは、例えば、カウンタのインクリメントまたは乱数発器などによってアシストスレッド番号ATNを生成し、アシストハードウエアスレッドとして割り当てられたスレッドの表示例、ATNと別の番号または同じ番号とともに、そのアシストスレッド番号をハードウエア状態ストア125中に格納する。また、起動ハードウエアスレッドは、ATSRのアシストスレッド番号フィールド210中にもATN値を格納するステップ475。ステップ480において、起動ハードウエアスレッドは、自分のレジスタからアシストハードウエアスレッドのレジスタにコピーするための、特定のレジスタ値群を識別する。起動ハードウエアスレッドは、BAIL/BAIH命令のパラメータに基づいて、レジスタ値群を選定する。ステップ485で、起動ハードウエアスレッドは、識別されたレジスタ値群を、起動スレッドレジスタ140からアシストスレッドレジスタ170にコピーする。戻ってソフトウエアプログラムを参照すると、ソフトウエアプログラムは、ステップ410においてATSRのATVビット220をチェックし、要求したアシストハードウエアスレッドが起動しているかどうかを判定する判断415。アシストハードウエアスレッドが起動していない場合例、ATVビット=0、前述したように、ソフトウエアプログラムは、起動スレッドを使って、アシストハードウエアスレッドに予定されていたタスクを実行しステップ440、処理は445で終了する。また一方、要求したアシストハードウエアスレッドが起動している場合、判断415ははいブランチ418に分岐し、次いで、ソフトウエアプログラムは、一つの実施形態において、ATSRのATNフィールド210からアシストスレッド番号を読み出し、読み出されたATN値をソフトウエア状態ストア115中に格納することができる。別の実施形態において、アシストハードウエアスレッドのタスクが、起動ハードウエアスレッドの全体的なパフォーマンスを向上させるため、データを単にキャッシュ中にプリフェッチするような場合などでは、ソフトウエアプログラムは、アシストハードウエアスレッドの起動を追跡しないでおくことができる。ソフトウエア状態ストア115は、ソフトウエアプログラムが呼び出したアシストハードウエアスレッドを追跡するための情報を包含するさらなる詳細については、図3Aおよび対応する説明文を参照。次いで、ソフトウエアプログラムは、起動されたアシストハードウエアスレッドを使って命令を実行する所定のプロセスブロック490、さらなる詳細については、図5および対応する説明文を参照。コード実行の完了、もしくは強制終了によってアシストハードウエアスレッドが終了するとき、アシストハードウエアスレッドは、ATSRのアシストスレッド実行ATEビット230をクリアする。一つの実施形態において、ソフトウエアプログラムは、アシストハードウエアスレッドが完了するのを待つ間、他のタスクを実行するステップ425。別の実施形態において、ソフトウエアプログラムは、複数のアシストハードウエアスレッドに、ソフトウエアプログラムのさまざまなセクションの実行を要求することができる。この実施形態では、最後に完了したアシストハードウエアスレッドがATSRのATEビット230をクリアするさらなる詳細については、図5および対応する説明文を参照。一つの実施形態において、アシストハードウエアスレッドが完了したとき、ソフトウエアプログラムは、ステップ430において、それに続く計算の結果を使うなどして、アシストハードウエアスレッドの実行結果をチェックすることができる。ソフトウエアプログラムと起動ハードウエアスレッドとは、それぞれ435と495とにおいて終了する。一つの実施形態において、起動ハードウエアスレッド上で実行しているソフトウエアプログラムは、追加のアシストハードウエアスレッドを起動するなど、他のタスクの遂行を進めることができる。図5は、命令を実行しているアシストハードウエアスレッドの中で実施されるステップを示す例示フローチャートである。アシストハードウエアスレッドの処理は500で開始され、次いでアシストハードウエアスレッドは、ステップ505において、アシストスレッドレジスタ170中に格納されているレジスタ値にアクセスし、ソフトウエアプログラム110の命令を実行する。命令実行の過程で、アシストハードウエアスレッドは、命令実行の完了または実行の終了指示の受信に応じて、実行を終了するかどうかを判定する判断510。一つの実施形態において、アシストハードウエアスレッドは、命令実行を完了するか、あるいは、アシストハードウエアスレッドに命令実行を終了するよう命令する、アシストスレッド停止SAT命令を実行することができるさらなる詳細については、図8および対応する説明文を参照。別の実施形態において、起動ハードウエアスレッドがSAT命令を実行し、これによりアシストハードウエアスレッドを終了することができる。さらに別の実施形態では、起動ハードウエアスレッドおよびアシストハードウエアスレッドを制御しているプロセッサが、アシストハードウエアスレッドに他のより優先度の高いプログラムを実行させるため、あるいはアシストハードウエアスレッドのリソースを回収するため、アシストハードウエアスレッドを終了することができる。アシストハードウエアスレッドが命令の実行を継続すべき場合、判断510はいいえブランチ517に分岐し、該ブランチはループバックして命令実行を継続する。このループは、アシストハードウエアスレッドが終了するまで続き、終了時点で判断510ははいブランチ514に分岐する。ステップ520において、アシストハードウエアスレッドは、ハードウエア状態ストア125中の自分の状態を実行中から終了に変更する。次に、アシストハードウエアスレッドは、他のアシストハードウエアスレッドの状態をチェックしステップ525、他のアシストハードウエアスレッドがまだ実行中かどうかを判定する判断530。他のアシストハードウエアスレッドがまだ実行中の場合、判断530ははいブランチ532に分岐し、次いでアシストハードウエアスレッドはステップ560で自分のリソースを解放し、アシストハードウエアスレッドの処理は570で終了する。一つの実施形態において、プロセッサ例、プロセッサ100は、アシストハードウエアスレッドが終了した後、起動ハードウエアスレッドのATSRビット群を更新することができる。また一方、他のアシストハードウエアスレッドが実行していない場合、判断530はいいえブランチ534に分岐し、次いでアシストハードウエアスレッドは、ステップ540において、ATSRのアシストスレッド状態ATSフィールド240中に終了インジケータ例、アシストスレッドがSAT命令を実行した、起動スレッドがSAT命令を実行した、エラーが発生した、プロセッサがリソースを先取りしたなどを格納する。アシストハードウエアスレッドは、ステップ545で、ATSRのSATPフィールド250中にSATパラメータを格納する。例えば、ATSフィールドが、アシストハードウエアスレッドがSAT命令を実行したことによってアシストハードウエアスレッドが終了したこと、を示している場合、SATPフィールド250には、そのアシストハードウエアスレッドがタスクを成功裏に完了したかどうかを表すパラメータを包含させることができる。ステップ550において、アシストハードウエアスレッドは、アシストスレッドが実行した最後の命令に続く次の命令に対応するアドレスを、ASTRのNIフィールド260に格納する。最後に、アシストハードウエアスレッドは、ステップ555で、ATSRのATEフィールド230中のアシストスレッド実行中インジケータをクリアし、しかして、ソフトウエアプログラム110に対し、各アシストハードウエアスレッドが実行を停止したことを示すさらなる詳細については、図4および対応する説明文を参照。アシストハードウエアスレッドは、560において自分のリソースを解放し、570で終了する。一つの実施形態において、プロセッサは、ステップ555の前に、アシストハードウエアスレッドが行った全ての格納が起動ハードウエアスレッドに可視であるのを確実にすることができる。この実施形態において、アシストハードウエアスレッドの全ての格納が起動ハードウエアスレッドに可視であるのを確実にすることによって、起動ハードウエアスレッドは、メモリに格納されたアシストハードウエアスレッドの実行結果を読み取ることができるさらなる詳細については、図4および対応する説明文を参照。図6は、分岐開始軽量BAIL命令を示す例示図である。BAIL命令600は、ソフトウエアプログラム100が、ハイパーバイザの関与なくして、ハイパーバイザのオペレーションまたは他の実行プログラムに悪影響を与えることなく、マルチスレッドプロセッサに対しアシストハードウエアスレッドを効率的に要求することを可能にする。BAIL命令600は、ハードウエアスレッドが実行するとき、該ハードウエアスレッドに対しアシストハードウエアスレッドが利用可能かどうかチェックするよう命令する、opコードフィールドビット0~5および拡張opコードフィールドビット21~30を包含する。利用可能な場合、起動ハードウエアスレッドは、コピービット6に基づいて、他のレジスタ値とともに、ベースレジスタセットなど汎用レジスタ、特権制御レジスタなど、特定のレジスタの値不動小数点、ベクトルユニットなどを、起動ハードウエアスレッドのレジスタからアシストハードウエアスレッドのレジスタにコピーするさらなる詳細については、図9および対応する説明文を参照。コピーがされたならば、アシストハードウエアスレッドは、BAIL命令600のビット7~20中に所在するターゲットアドレスに対応するコードの実行を開始する。当業者ならよく理解できるように、BAIL命令600には、図6に示されたものより多いまたは少ないビット、もしくは異なったパーティション、またはその両方を包含させることができる。図7は分岐開始重量BAIH命令を示す例示図である。BAIH命令700は、図6に示されたBAIL命令と類似である。ただし、BAIL命令と比べると、BAIH命令はメモリ同期ステップも遂行することができる。BAIH命令は、ハードウエアスレッドが実行するとき、該ハードウエアスレッドに対しアシストハードウエアスレッドが利用可能かどうかチェックするよう命令する、opコードフィールドビット0~5および拡張opコードフィールドビット21~30を包含する。利用可能な場合、起動ハードウエアスレッドは、コピービット6に基づいて、他のレジスタとともに、ベースレジスタセットなど汎用レジスタ、特権制御レジスタなど、特定のレジスタの値不動小数点、ベクトルユニットなどをコピーするさらなる詳細については、図9および対応する説明文を参照。起動ハードウエアスレッドがレジスタ値をアシストハードウエアスレッドのレジスタにコピーしたならば、アシストハードウエアスレッドは、BAIH命令700のビット7~20中に配置されたターゲットアドレスに対応するコードの実行を開始する。当業者ならよく理解できるように、BAIH命令には、図7に示されたものより多いまたは少ないビット、もしくは異なったパーティション、またはその両方を包含させることができる。図8は、アシストスレッド停止SAT命令を示す例示図である。アシストハードウエアスレッドが実行しているときに、アシストハードウエアスレッドまたは起動ハードウエアスレッドは、アシストハードウエアスレッドに実行を停止するよう命令する、SAT命令を実行することができる。起動ハードウエアスレッドがSAT命令800実行すると、起動ハードウエアスレッドは、アシストハードウエアスレッドに実行を停止終了することを命令する。アシストハードウエアスレッドがSAT命令800を実行すると、該アシストハードウエアスレッドは自分の実行を停止する。SAT命令800は、起動ハードウエアスレッドが実行しているとき、一つ以上のアシストハードウエアスレッドに実行の停止を命令する情報を起動ハードウエアスレッドに提供する、opコードフィールドビット0~5および拡張opコードフィールドビット21~30を包含する。また、SAT命令800は、起動ハードウエアスレッドに実行されたとき、全てのアクティブなアシストハードウエアスレッドを終了させるのか、もしくは特定のアシストハードウエアスレッドを終了させるのかを起動ハードウエアスレッドに指示する終了ビット20を包含する。ビット20が特定のアシストハードウエアの終了を示している場合、ビット6~10は、終了するアシストハードウエアスレッドに対応するアシストスレッド番号ATNを含む、ソースレジスタRS:sourceregister位置例、汎用レジスタの位置を包含する。別の実施形態において、アシストハードウエアスレッドがSAT命令800を実行するとき、該アシストハードウエアスレッドは、ビット20を使って、SATパラメータを、自分の起動ハードウエアスレッドに送り返すことができる。例えば、アシストハードウエアスレッドは、自分がコード実行を完了したときは、ビット20に1を格納することができ、コード実行を完了しなかったときは、ビット20に0を格納することができる。この実施形態において、アシストハードウエアスレッドは、SAT命令800を実行するときビット6~10を無視する。さらに別な実施形態において、SAT命令800が、RSフィールドビット6~10を持たないようにすることができる。この実施形態では、起動ハードウエアスレッドは、ビット20の値に関わらず例、ビット20を無視して、起動した全てのアクティブなアシストハードウエアスレッドを終了させる。図9は、BAILおよびBAIH命令の過程で、起動ハードウエアスレッドが、起動スレッドレジスタからアシストスレッドレジスタにコピーするレジスタ値を示す例示図である。図9は、これら命令の過程で、起動ハードウエアスレッドが、ベースレジスタの値例、汎用レジスタ、条件レジスタ、およびほとんどのコンピューティングタスクに必須の他のレジスタをコピーすることを示す。一つの実施形態において、起動ハードウエアスレッドは、アドレス変換レジスタの値例、実効または仮想アドレスを実アドレスに変換するためのレジスタ値を、起動ハードウエアスレッドのレジスタ140からアシストハードウエアスレッドのレジスタ170にコピーする。別の実施形態において、起動ハードウエアスレッドとアシストハードウエアスレッドとは同じアドレス変換レジスタを共用することができ、あるいは、アシストハードウエアスレッドの変換レジスタをプリセットすることができる。この実施形態では、ソフトウエアプログラムは、起動ハードウエアスレッドを、該起動ハードウエアスレッドがアドレス変換レジスタの値をコピーしないように構成することができる。また、起動ハードウエアスレッドは、BAIL/BAIH命令のコピービットに基づき、処理系依存のレジスタセットの値を、起動ハードウエアスレッドのレジスタ140からアシストハードウエアスレッドのレジスタ170にコピーすることができるさらなる詳細については、図6および対応する説明文を参照。一つの実施形態において、処理系依存のレジスタセットには、ベクトルレジスタ、不動小数点レジスタ、およびアシストハードウエアスレッドが時々必要とする特殊コンピューティングタスクに関連する他のレジスタセットが包含される。一つの実施形態において、前回の計算からの一切の残存値を除去するために、起動ハードウエアスレッドは、アシストハードウエアスレッドのレジスタ170中の、起動ハードウエアスレッドのレジスタ140からコピーされたレジスタ値を含まないレジスタをクリアする。BAILおよびBAIH命令は、同じレジスタコピーのセットを実行することができるが、一つの実施形態において、起動ハードウエアスレッドのメモリ同期中の命令が異なる。例えば、バラバラの順でメモリ格納を行うプロセッサの場合、一つの命令で行われたメモリ格納が、後続の命令が実行される前に完了する保証はない。しかして、この例において、格納オペレーションに続く命令がアシストハードウエアスレッドを起動する場合、該アシストスレッドが起動する前に格納オペレーションが完了する保証はない。格納オペレーションが完了しない場合、該格納オペレーションの値が、不確定時間の間アシストハードウエアスレッドに不可視なことがあり得る。しかるが故に、アシストハードウエアスレッドが自分のタスクを実行するためにその格納された情報へのアクセスを要求する場合には問題が発生する。BAIH命令はこの問題を軽減する。というのは、BAIH命令は、アシストハードウエアスレッドが起動される前に、起動ハードウエアスレッドによって行われる格納が、アシストハードウエアスレッドの可視性のため十分なまでに完了することを確実にし、しかして、アシストハードウエアスレッドがメモリ位置を読み取りこれによりタスクを遂行することを可能にするからである。ソフトウエアプログラムがメモリ同期を必要としない場合、ソフトウエアプログラムは、BAIL命令がメモリ同期を保証しないのでその実行の速さから、該命令を利用することができる。一つの実施形態において、BAILおよびBAIH命令は、数多くの変形を有する。例えば、バラバラの順で格納オペレーションを実施しないプロセッサに対して、そのプロセッサは、一部の実施形態ではBAIH命令と比べてより大きなレジスタセットをコピーするBAIL命令の形を用いることはあるかもしれないが、BAIH命令は用いないでおくことができる。別の事例において、順序だった格納を保証しない実装はBAIH命令を設定し、特定のアプリケーションの必要性に照らし、起動ハードウエアスレッドが、BAIL命令よりも多くのレジスタをコピーするようにすることができる。図10は、アシストスレッドが実行中である条件での分岐BCE命令の実行において実施されるステップを示す例示フローチャートである。この状況は、ソフトウエアプログラムが、アシストハードウエアの特定の状態を必要とするとき発生し得る。これらの状況において、ソフトウエアプログラムは、起動ハードウエアスレッド上で、条件付き分岐命令を実行することができ、これは特定のアシストハードウエアスレッドがまだ実行中であるかどうかに基づいて分岐する。BCEソフトウエアプログラムの実行は1000で開始され、次いでソフトウエアプログラムは、ソフトウエア状態ストア115から、特定のアシストスレッドに対応するアシストスレッド番号ATN値を読み出すステップ1005。ステップ1010において、ソフトウエアプログラムはATN値を特定の汎用レジスタ例、レジスタ4に、ターゲットアドレスを別の汎用レジスタ例、レジスタ5に格納し、ターゲットアドレスは、アシストハードウエアスレッドがまだ実行中の場合に起動ハードウエアスレッドが実行するための、コードの位置を識別する後記で説明。次に、ソフトウエアプログラムは、起動ハードウエアスレッド上で、アシストスレッドが実行中である条件での分岐BCE命令を実行し、該命令はATN値およびターゲットアドレスの汎用レジスタ位置を包含するステップ1015。起動ハードウエアスレッドの実行は1040で開始され、次いで起動ハードウエアスレッドは、BCE命令から汎用レジスタ番号を抜き出し、該汎用レジスタから、ターゲットアドレスとともに、ATNを読み出すステップ1050。次に、起動ハードウエアスレッドは、ステップ1060で、ハードウエア状態ストア125中の、対応するアシストハードウエアスレッドの状態をチェックする。起動ハードウエアスレッドは、ステップ1060での状態に基づいて、アシストハードウエアスレッドがまだ実行中であるかどうかを判定する判断1070。アシストハードウエアスレッドがまだ実行中の場合、判断1070ははいブランチ1072に分岐し、次いで起動ハードウエアスレッドは、ステップ1050で読み出されたターゲットアドレスに分岐するステップ1080。また一方、アシストハードウエアスレッドが終了している場合、判断1070はいいえブランチ1078に分岐し、次いで起動ハードウエアスレッドは、後続命令の実行を続けるステップ1090。ソフトウエアプログラムは、起動ハードウエアスレッドがはいに分岐したかどうかに基づいて、特定のアシストハードウエアスレッドがまだ実行中かどうかを判定する判断1020。起動ハードウエアスレッドが分岐している場合、判断1020ははいブランチ1022に分岐し、次いでソフトウエアプログラムは、ステップ1024で、アシストスレッドに与えられたタスクと関係のないタスクの作業を続けるなど、アシストハードウエアスレッドがまだ実行中であるのに応じたタスクを遂行する。また一方、起動ハードウエアスレッドが分岐しなかった場合、判断1020はいいえブランチ1026に分岐し、次いでソフトウエアプログラムは、アシストハードウエアスレッドが終了いているのに応じたタスクを遂行するステップ1028。例えば、ソフトウエアプログラムは、共用のメモリ場所をチェックして、アシストハードウエアスレッドがそのオペレーションを成功裏に完了したがどうかを判定することができ、それに基づき追加のタスク例、別のアシストスレッドの開始、他の作業の実施などを遂行する。ソフトウエアプログラムと起動ハードウエアスレッドとの処理は、それぞれ1030と1095とで終了する。図11は、アシストスレッドが実行中ならば状態レジスタを設定するCRSE命令の実行において実施されるステップを示す例示フローチャートである。CRSE命令は、起動ハードウエアスレッドが、ターゲットアドレスに分岐する代わりに、特定のアシストハードウエアスレッドの状態に基づいて状態ビットを設定することを除けば、図10で説明したBCE命令と同様である。CRSEソフトウエアプログラムの実行は1100で開始され、次いでソフトウエアプログラムは、ソフトウエア状態ストア115から、特定のアシストスレッドに対応するアシストスレッド番号ATN値を読み出すステップ1105。ステップ1110において、ソフトウエアプログラムは、状態レジスタビット位置とともにATN値を、特定の汎用レジスタGRS:general-purposeregister中に格納する。状態レジスタビット位置は、起動ハードウエアスレッドが、アシストハードウエアスレッドの状態に基づいて設定する状態レジスタビットに対応する後記で説明。次に、ソフトウエアプログラムは、CRSE命令の中にGPRレジスタの位置を包含させ、起動ハードウエアスレッドを使ってCRSE命令を実行する1115。起動ハードウエアスレッドの実行は1140で開始され、次いで起動ハードウエアスレッドは、CRSE命令から汎用レジスタ番号を抜き出し、該汎用レジスタ番号に対応する汎用レジスタから、状態レジスタビット位置とともに、ATNを読み出すステップ1150。次に、起動ハードウエアスレッドは、ステップ1160で、ハードウエア状態ストア125中の、読み出されたATNに対応するアシストハードウエアスレッドの状態をチェックする。起動ハードウエアスレッドは、ステップ1160における状態に基づいて、アシストハードウエアスレッドがまだ実行中であるかどうかを判定する判断1170。アシストハードウエアスレッドがまだ実行中の場合、判断1170ははいブランチ1172に分岐し、次いで起動ハードウエアスレッドは、ステップ1180において、状態レジスタビット1185を設定し、これは、前述の読み取られた状態レジスタビット位置に対応する。また一方、アシストハードウエアスレッドが終了している場合、判断1170はいいえブランチ1178に分岐し、次いで起動ハードウエアスレッドは、状態レジスタビット1185を0に設定するステップ1190。ソフトウエアプログラムは、状態レジスタビット1185をチェックすることによって、特定のアシストハードウエアスレッドがまだ実行中かどうかを判定し、それに応じ、ステップ1120でタスク遂行する。ソフトウエアプログラムと起動ハードウエアスレッドとの処理は、それぞれ1130と1195とで終了する。図12は、アシストスレッドが実行中である条件で分岐するBCE命令を示す例示図である。BCE命令1200は、起動ハードウエアスレッドに対し、起動ハードウエアスレッドが、特定のアシストハードウエアスレッドが実行中であると判定する場合にはターゲットアドレスに分岐するように命令することによって、ソフトウエアプログラムが、特定のアシストハードウエアスレッドがまだコードを実行中かどうかを判定することができるようにする。BCE命令1200は、ハードウエアスレッドが実行するとき、起動ハードウエアスレッドに対しアシストハードウエアスレッドが実行中かどうかチェックするよう命令する、opコードフィールドビット0~5および拡張opコードフィールドビット16~20を包含する。BCE命令1200は、アシストハードウエアスレッドをチェックするためのアシストスレッド番号ATNを含む汎用レジスタを識別するためのビット11~15を包含する。アシストハードウエアスレッドがまだ実行中の場合、起動ハードウエアスレッドは、ビット6~10によって識別される汎用レジスタ中に包含されるターゲットアドレスに分岐するさらなる詳細については、図10および対応する説明文を参照。当業者ならよく理解できるように、BCE命令1200には、図12に示されたものより多いまたは少ないビット、もしくは異なったパーティション、またはその両方を包含させることができる。図13は、アシストスレッドが実行中ならば状態レジスタを設定するCRSE命令を示す例示図である。CRSE命令1300は、起動ハードウエアスレッドに対し、起動ハードウエアスレッドが、特定のアシストハードウエアスレッドが実行中であると判定する場合には状態レジスタビットを設定するように命令することによって、ソフトウエアプログラムが、特定のアシストハードウエアスレッドがまだコードを実行中であるかどうかを判定することができるようにする。CRSE命令1300は、ハードウエアスレッドが実行するとき、起動ハードウエアスレッドに対しアシストハードウエアスレッドが実行中かどうかチェックするよう命令する、opコードフィールドビット0~5および拡張opコードフィールドビット16~20を包含する。CRSE命令1300は、アシストハードウエアスレッドをチェックするためのアシストスレッド番号ATNを含む汎用レジスタを識別する、ビット11~15を包含する。ビット6~10は、アシストハードウエアスレッドが実行中の場合に起動ハードウエアスレッドが設定する状態レジスタビット位置を包含する汎用レジスタを特定するさらなる詳細については、図11および対応する説明文を参照。当業者ならよく理解できるように、プロセッサは、さまざまな種類の分岐命令のためまたは算術演算のオーバーフローなどの状態を示すために、状態レジスタビットを使用する。これも当業者ならよく理解できるように、CRSE命令1300には、図13に示されたものより多いまたは少ないビット、もしくは異なったパーティション、またはその両方を包含させることができる。図14は、起動ハードウエアスレッドが、複数のアシストハードウエアスレッドを呼び出しているのを示す例示図である。プロセッサ1400は、ソフトウエアプログラム1410が開始されると、起動ハードウエアスレッド1420をソフトウエアプログラム1410に割り当てる。ソフトウエアプログラム1410は、例えば、特定のタスクのいろいろなコードのセクションを実行するため、本明細書で説明した複数の分岐開始命令例、BAILもしくはBAIH命令またはその両方を包含する。これを受けて、起動ハードウエアスレッド1420は、ハードウエアスレッドの利用可能性をチェックし、アシストハードウエアスレッド1450~1470を起動し、各アシストハードウエアスレッドに特定のアシストスレッド番号ATNを割り当てる。追跡目的のため、起動ハードウエアスレッド1420は、ATNをハードウエア状態ストア1440に格納し、ソフトウエアプログラム1410は、これらATNを、ソフトウエア状態ストア1415に格納する。起動ハードウエアスレッド1420はATSR1430を包含し、該ATSRは、直近に起動されたアシストハードウエアスレッドに関する情報例、アシストハードウエアスレッド1470のATNなどを格納する。同様に、アシストハードウエアスレッド1450~1470のうちの最後に実行を停止したスレッドが、ATSR1430中に情報を格納するさらなる詳細については、図2、図5および対応する説明文を参照。図15は、起動ハードウエアスレッドがアシストハードウエアスレッドを呼び出し、今度はそのアシストハードウエアスレッドが他のアシストハードウエアスレッドを呼び出しているのを示す例示図である。プロセッサ1500は、ソフトウエアプログラム1510が開始されると、起動ハードウエアスレッド1520をソフトウエアプログラム1510に割り当てる。ソフトウエアプログラム1510は、本明細書で説明した複数の分岐開始命令を包含し、これら命令は、例えば、ソフトウエアコード内で階層化することができる。起動ハードウエアスレッド1520が分岐開始命令の一つを実行し、このため、起動ハードウエアスレッド1520はアシストハードウエアスレッド1550を起動することになる。上記で説明したように、起動ハードウエアスレッド1520は、アシストハードウエアスレッド1550に対応するATNをハードウエア状態ストア1540中に格納し、ソフトウエアプログラム1510は該ATNをソフトウエア状態ストア1515に格納する。アシストハードウエアスレッド1550が実行を開始し、2つの分岐開始命令を実行する。これにより、アシストハードウエアスレッド1550はアシストハードウエアスレッド1580~1590を起動し、これに応じて対応するATNをハードウエア状態ストア1570に格納する。また、前述のように、ソフトウエアプログラム1510も、これらATNをソフトウエア状態ストア1515に格納する。さらに、アシストハードウエアスレッド1550は、アシストハードウエアスレッド1580~1590を追跡するためにATSR1560を用いる。しかして、ATSR1560は、直近に起動されたアシストハードウエアスレッドの情報例、アシストハードウエアスレッド1590のATNを包含する。同様に、アシストハードウエアスレッド1580~1590のうちの最後に実行を停止したスレッドが、ATSR1560中に情報を格納するさらなる詳細については、図2、図5および対応する説明文を参照。図16は、起動ハードウエアスレッドが、異なるプロセッサ上のアシストハードウエアスレッドを起動しているのを示す例示図である。図16は、アシストハードウエアスレッドが、起動ハードウエアスレッドを実行する最初のプロセッサとは異なるプロセッサ上で実行している点を除けば、図15と同様である。プロセッサ1600は、ソフトウエアプログラム1610が開始されると、起動ハードウエアスレッド1620をソフトウエアプログラム1610に割り当てる。ソフトウエアプログラム1610は、本明細書で説明した複数の分岐開始命令を包含し、これら命令は、例えば、ソフトウエアコード内で階層化することができる。起動ハードウエアスレッド1620が分岐開始命令の一つを実行し、これにより、起動ハードウエアスレッド1520はプロセッサ1650上のアシストハードウエアスレッド1660を呼び出し、対応するATNをハードウエア状態ストア1640に格納することになる。また、ソフトウエアプログラム1610は、該ATNをソフトウエア状態ストア1615に格納する。アシストハードウエアスレッド1660が実行を開始し、2つの分岐開始命令を実行する。これにより、アシストハードウエアスレッド1660は、アシストハードウエアスレッド1690~1695を起動し、これに応じて対応するATNをハードウエア状態ストア1680に格納する。また、前述のように、ソフトウエアプログラム1610も、これらATNをソフトウエア状態ストア1615に格納する。アシストハードウエアスレッド1660は、アシストハードウエア1690~1695を追跡するためにATSR1670を用いる。しかして、ATSR1670は、直近に起動されたアシストハードウエアスレッドの情報例、アシストハードウエアスレッド1695のATNを包含する。同様に、アシストハードウエアスレッド1690~1695のうちの最後に実行を停止したスレッドが、ATSR1670中に情報を格納するさらなる詳細については、図2、図5および対応する説明文を参照。図17は、情報処理システム1700を示し、該システムは、本明細書で説明したコンピューティングオペレーションを遂行する能力のあるコンピュータシステムの単純化された例である。情報処理システム1700は、プロセッサインタフェースバス1712に連結された一つ以上プロセッサ1710を包含する。プロセッサインタフェースバス1712は、プロセッサ1710を、システムメモリ1720を接続しているメモリコントローラ1715に接続し、プロセッサ群1710に対しシステムメモリにアクセスするための手段を提供する。グラフィックスコントローラ1725もメモリコントローラに接続している。一つの実施形態において、PCIExpressRバス1718は、メモリコントローラをグラフィックスコントローラ1725に接続している。グラフィックスコントローラ1725は、コンピュータモニタなどのディスプレイデバイス1730に接続している。メモリコントローラ1715およびI/Oコントローラ1735は、バス1719を使って相互に接続している。一つの実施形態において、このバスは、メモリコントローラ1715とI/Oコントローラ1735との間で双方向に高速でデータを転送する、ダイレクトメディアインタフェースDMI:DirectMediaInterfaceバスである。I/OコントローラーハブICH:I/OControllerHubRとしても知られるI/Oコントローラ1735は、一般に、メモリコントローラによって提供される能力よりも、遅い速度で作動する能力を実装するチップである。I/Oコントローラ1735は、通常、さまざまなコンポーネントを接続するために使われるさまざまなバスを備える。これらのバスには、例えば、PCIおよびPCIExpressRバス、ISAバス、システムマネジメントバスSMBusまたはSMB:SystemManagementBusRもしくはローピンカウントLPC:LowPinCountRバス、またはこれらの組み合わせが包含される。LPCバスは、多くの場合、起動用ROM1796およびスーパーI/Oチップを使うレガシーI/Oデバイスなど、低処理能力デバイスを接続する。レガシーI/Oデバイス1798には、例えば、シリアルおよびパラレルポート、キーボード、マウス、もしくはフロッピーディスクコントローラ、またはこれの組み合わせなどが包含される。また、LPCバスは、I/Oコントローラ1735を、トラステッドプラットフォームモジュールTPM:TrustedPlatformModule1795に接続する。I/Oコントローラ1735に大抵が包含される他のコンポーネントには、直接メモリアクセスDMA:DirectMemoryAccessコントローラ、プログラム可能割り込みコントローラPIC:ProgrammableInterruptController、および、バス1784を使ってI/Oコントローラ1735をハードディスクドライブなどの不揮発性記憶デバイス1785に接続する、記憶デバイスコントローラが含まれる。エクスプレスカードR1755は、ホットプラグ可能なデバイスを該情報処理システムに接続するスロットである。エクスプレスカードR1755は、ユニバーサルシリアルバスUSB:UniversalSerialBusおよびPCIExpressRバスの両方を使って、I/Oコントローラ1735に接続しており、PCIExpressRおよびUSB両方の接続性をサポートしている。I/Oコントローラ1735は、USBにつながれているデバイスにUSB接続性を提供する、USBコントローラ1740を包含する。これらのデバイスには、ウェブカムカメラ1750、赤外線IR:infrared受信機1748、キーボードおよびトラックパッド1744、並びに、無線パーソナルエリアネットワークPAN:personalareanetworkを提供するブルートゥースデバイス1746が包含される。また、USBコントローラ1740は、マウス、着脱可能不揮発性記憶デバイス1745、モデム、ネットワークカード、ISDNコネクタ、ファックス、プリンタ、USBハブ、および他の多種類のUSB接続デバイスなど、他の雑多なUSB接続デバイス1742に対しUSB接続性を提供する。着脱可能不揮発性記憶デバイス1745が、USB接続デバイスとして示されているが、着脱可能不揮発性記憶デバイス1745は、ファイヤーワイヤRインタフェースなど、異なるインタフェースを使って接続することも可能であろう。無線ローカルエリアネットワークLAN:LocalAreaNetworkデバイス1775は、PCIまたはPCIExpressRバス1772を介してI/Oコントローラ1735に接続している。LANデバイス1775は、通常、情報処理システム1700と別のコンピュータシステムまたはデバイスとの間で無線通信するため、全てが同一のプロトコルを用いる無線変調技術のIEEE802.11規格の一つを実装している。光記憶デバイス1790は、シリアルATASATA:SerialATAバス1788を用いてI/Oコントローラ1735に接続している。シリアルATAアダプタおよびデバイスは、高速シリアルリンクを介して通信する。またシリアルATAバスは、I/Oコントローラ1735を、ハードディスクドライブなど他の形態の記憶デバイスにも接続する。サウンドカードなどのオーディオ回路1760は、バス1758を介してI/Oコントローラ1735に接続している。また、オーディオ回路1760は、オーディオライン入力および光デジタルオーディオ入力ポート1762、光デジタル出力およびヘッドフォンジャック1764、内蔵スピーカ1766、および内蔵マイクロフォン1768などの機能を備える。イーサネットRコントローラ1770は、PCIまたはPCIExpressRバスなどのバスを使って、I/Oコントローラ1735に接続している。イーサネットRコントローラ1770は、情報処理システム1700を、ローカルエリアネットワークLAN、インターネット、および他の公衆または個人コンピュータネットワークなどの、コンピュータネットワークに接続する。図17は一つの情報処理システムを示しているが、情報処理システムは多くの形態をとり得る。例えば、情報処理システムは、デスクトップ、サーバ、携帯、ラップトップ、ノート、または他のフォームファクタのコンピュータまたはデータ処理システムの形をとることができる。さらに、情報処理システムは、携帯端末PDA:personaldigitalassistant、ゲームデバイス、ATMマシン、携帯電話デバイス、通信デバイス、またはプロセッサとメモリとを包含する他のデバイスなど、他のフォームファクタをとることもできる。前述図面中のフローチャートおよびブロック図は、本開示のさまざまな実施形態によるシステム、方法、およびコンピュータプログラムの、実装可能なアーキテクチャ、機能、並びにオペレーションを示している。この点において、フローチャートまたはブロック図中の各ブロックは、規定された論理機能群を実施するための一つ以上の実行可能命令を含むコードのモジュール、セグメント、または部分を表し得る。また、ある別の実装においては、ブロックに記載された機能が図に記載されたのと違った順序で実施され得ることに留意すべきである。例えば、関与する機能性によっては、連続に示された2つのブロックが、実際は実質上同時に実行されることがあり、ブロック群が時として逆の順序で実行され得る。さらに、ブロック図もしくはフローチャート説明図またはその両方の各ブロック、および、ブロック図もしくはフローチャート説明図またはその両方のブロックの組合せが、特定の機能または処理を遂行する特殊用途のハードウエアベースシステム、または特殊用途ハードウエアとコンピュータ命令との組合せによって実行できることにも留意すべきである。本開示の特定の実施形態を提示し説明してきたが、当業者にとって、本開示およびそのより広義な解釈から逸脱することなく、本明細書の教示に基づき、変更および修改を加えるのが可能なことは自明であろう。従って、添付の請求項は、かかる全ての変更および修改を、本開示の真の精神および範囲内にあるものとして請求範囲に包含するものである。さらに、本開示は、添付の請求項によってだけ定義されることを理解すべきである。当業者は、提示された請求要素に特定の数が意図されている場合、かかる意図は、その請求項に明示で記載され、かかる記載のない場合はそういった制限が存在しないことを理解していよう。次の添付請求項は、制限のない例に対しその理解のための補助として、請求要素を提示するための導入句少なくとも一つのおよび一つ以上のの使用を包含する。しかしながら、かかる語句の使用によって、不定冠詞あるaまたはanによる請求要素の提示が、かかる提示の請求要素を包含するいかなる特定の請求項に対しても、たとえ同じ請求項に、導入句少なくとも一つのまたは一つ以上のとあるaまたはanなどの不定冠詞とが含まれているとしても、その請求項を、かかる要素を一つだけ含む開示に限定することを意味すると解釈すべきではなく、請求項中の定冠詞の使用についても同じことが言える。