JP5710434B2 - アシスト・ハードウエア・スレッドの拡張可能な状態追跡のための方法、情報処理システム、およびプロセッサ - Google Patents

アシスト・ハードウエア・スレッドの拡張可能な状態追跡のための方法、情報処理システム、およびプロセッサ Download PDF

Info

Publication number
JP5710434B2
JP5710434B2 JP2011202136A JP2011202136A JP5710434B2 JP 5710434 B2 JP5710434 B2 JP 5710434B2 JP 2011202136 A JP2011202136 A JP 2011202136A JP 2011202136 A JP2011202136 A JP 2011202136A JP 5710434 B2 JP5710434 B2 JP 5710434B2
Authority
JP
Japan
Prior art keywords
assist
hardware thread
thread
assist hardware
executing
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2011202136A
Other languages
English (en)
Other versions
JP2012064215A (ja
Inventor
ジャイルズ・ロジャー・フレイザー
リチャード・ルイス・アルント
ロナルド・ホール
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Publication of JP2012064215A publication Critical patent/JP2012064215A/ja
Application granted granted Critical
Publication of JP5710434B2 publication Critical patent/JP5710434B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/30087Synchronisation or serialisation instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/3009Thread control instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/485Task life-cycle, e.g. stopping, restarting, resuming execution

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Executing Machine-Instructions (AREA)
  • Debugging And Monitoring (AREA)

Description

本開示は、ハイパーバイザの関与なしに、アシスト・ハードウエア・スレッドの状態を追跡することに関する。さらに具体的には、本開示は、アシスト・スレッド状態レジスタを用いてアシスト・ハードウエア・スレッドのアクテビティを追跡する起動ハードウエア・スレッドに関する。
昨今のコンピュータ・システムの多くは、独立した命令ストリームを実行するマルチスレッド・プロセッサを包含する。あるハードウエア・スレッド上で実行しているソフトウエア・プログラムは、監視プログラム(例、ハイパーバイザ)に対し、別のハードウエア・スレッドの制御を要求することができる。例えば、ソフトウエア・プログラムは、他のハードウエア・スレッドにコード・セグメント(例、サブルーチン)を実行してもらうため、監視プログラムに別のハードウエア・スレッドに対する要求を送信することができる。監視プログラムは、ハードウエア・スレッドが利用可能かどうかチェックし、利用可能な場合、そのソフトウエア・プログラムに対し別のハードウエア・スレッドを割り当てる。これを受け、ソフトウエア・プログラムは、その別のハードウエア・スレッドを用いてコード・セグメントを実行する。多くの場合、ソフトウエア・プログラムは、限られた時間の間その別のハードウエア・スレッドを利用する。しかして、その別のハードウエア・スレッドがコードの実行を完了すると、監視プログラムはその別のハードウエア・スレッドのリソースをソフトウエア・プログラムから解放する。
監視プログラムの関与なしに、アシスト・ハードウエア・スレッドの状態を追跡するための方法、さらに具体的には、起動ハードウエア・スレッドが、アシスト・スレッド状態レジスタを利用してアシスト・ハードウエア・スレッドのアクテビティを追跡するための方法、情報処理システム、およびプロセッサを提供する。
プロセッサは起動ハードウエア・スレッドを包含し、該スレッドは、第一コード・セグメントを実行するため第一アシスト・ハードウエア起動する。次いで、起動ハードウエア・スレッドは、第一アシスト・ハードウエア・スレッドを起動したのに応じて、アシスト・スレッド実行インジケータを設定する。設定されたアシスト・スレッド実行インジケータは、アシスト・ハードウエア・スレッドが実行中かどうかを表示する。第二アシスト・ハードウエア・スレッドが起動され、第二コード・セグメントの実行を開始する。これを受け、起動ハードウエア・スレッドは、アシスト・スレッド実行インジケータの変化を検知し、該インジケータは、第一アシスト・ハードウエア・スレッドおよび第二アシスト・ハードウエア・スレッドの両方が終了したときそのことを示す。しかして、起動ハードウエア・スレッドは、両方のアシスト・ハードウエア・スレッドが終了したのに応じ、アシスト・ハードウエア・スレッドの実行結果を評価する。
前述は要約であり、しかして必然的に、単純化、一般化、細部の省略を含み、それ故、当業者は、上記の要約が例示のためだけのものであり、決して限定を意図したものでないことをよく理解していよう。本開示の他の態様、発明的特質、および利点は請求項によってだけ定義され、これらは以下に述べる非限定的な詳細説明の中で明らかにされよう。
あるプロセッサのソフトウエア・プログラムが、マルチスレッド・プロセッサ上でアシスト・ハードウエア・スレッドを起動するのを示す例示図である。 アシスト・スレッド状態レジスタ(ATSR:assist thread status register)を示す例示図である。 図3Aは、ソフトウエア・プログラムがアシスト・ハードウエア・スレッドの状態を管理するため用いるソフトウエア状態格納領域を示す例示図であり、図3Bは、起動ハードウエア・スレッドがアシスト・ハードウエア・スレッドの状態を管理するため用いるハードウエア状態格納領域を示す例示図である。 アシスト・ハードウエア・スレッドを呼び出している起動ハードウエア・スレッドの中で実施されるステップを示す例示フローチャートである。 ソフトウエア・コードを実行しているアシスト・ハードウエア・スレッドの中で実施されるステップを示す例示フローチャートである。 分岐開始軽量(BAIL:branch and initiate lightweight)命令を示す例示図である。 分岐開始重量(BAIH:branch and initiate heavyweight)命令を示す例示図である。 アシスト・スレッド停止(SAT:stop assist thread)命令を示す例示図である。 分岐開始命令の過程で、起動ハードウエア・スレッドがアシスト・スレッド・レジスタにコピーするレジスタ値を示す例示図である。 アシスト・スレッドが実行中である条件での分岐(BCE:branch conditional if assist thread executing)命令の実行において実施されるステップを示す例示フローチャートである。 アシスト・スレッドが実行中ならば状態レジスタを設定する(CRSE:condition register set if assist thread executing)命令の実行において実施されるステップを示す例示フローチャートである。 アシスト・スレッドが実行中である条件で分岐する(BCE)命令を示す例示図である。 アシスト・スレッドが実行中ならば状態レジスタを設定する(CRSE)命令を示す例示図である。 起動ハードウエア・スレッドが、複数のアシスト・ハードウエア・スレッドを呼び出しているのを示す例示図である。 起動ハードウエア・スレッドがアシスト・ハードウエア・スレッドを呼び出し、今度はそのアシスト・ハードウエア・スレッドが他のアシスト・ハードウエア・スレッドを呼び出しているのを示す例示図である。 起動ハードウエア・スレッドが、異なるプロセッサ上のアシスト・ハードウエア・スレッドを起動しているのを示す例示図である。 本明細書に記載した方法が実行可能な情報処理システムのブロック図の例である。
当業者は、添付の図面を参照することにより、本開示をよりよく理解し、その数々の目的、特質、および利点を明らかにすることができよう。
本開示のさまざまな実施形態の徹底的理解を提供するため、以下の記述および図面においていくつか特定の詳細を説明する。本開示の各種実施形態を不必要に分かりにくくするのを避けるため、以下の開示では、コンピューティングおよびソフトウエア技術によく関連付けられる特定の周知の細目は説明しない。さらに、当業者は、以降で述べる細部の一つ以上が無くても、本開示の他の実施形態を実行できることを理解するであろう。最後に、以下の開示において、さまざまな方法が、ステップおよびシーケンスを参照しながら説明されるが、かかる説明は、本開示の実施形態の明快な実現を提供するためのものであって、これらステップおよびステップのシーケンスが、本開示の遂行に必須であると見なすべきではない。それよりむしろ、以下は本開示のある例の詳細な説明を提供することを意図したものであり、本開示自体を限定すると理解すべきではない。それどころか、いくつもの変形が本開示の範囲内に含まれ得、この範囲は本明細書に添付された請求項によって定義される。
当業者ならよく理解するであろうように、本開示の態様は、システム、方法、またはコンピュータ・プログラムとして具現することができる。従って、本開示の態様は、全体がハードウエアの実施形態、全体がソフトウエアの実施形態(ファームウエア、常駐ソフトウエア、マイクロコードなどを含む)、または本明細書では全て一般に、「回路」、「モジュール」または「システム」と呼ぶこともある、ソフトウエアおよびハードウエア態様を組み合わせた実施形態の形を取ることができる。さらに、本開示の態様は、媒体内に具現されたコンピュータ可読のプログラム・コードを有する一つ以上のコンピュータ可読媒体(群)中に体現されたコンピュータ・プログラムの形を取ることもできる。
一つ以上のコンピュータ可読媒体(群)の任意の組み合わせを用いることができる。コンピュータ可読媒体は、コンピュータ可読信号媒体、またはコンピュータ可読記憶媒体とすることができる。コンピュータ可読記憶媒体は、例えば、以下に限らないが、電子的、磁気的、光学的、電磁気的、赤外線的、または半導体のシステム、装置、またはデバイス、あるいはこれらの任意の適切な組み合わせとすることができる。コンピュータ可読記憶媒体のさらに具体的な例(限定的リスト)には、一つ以上の配線を有する電気接続、携帯コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ(RAM:random access memory)、読み取り専用メモリ(ROM:read−only memory)、消去可能プログラム可能読み取り専用メモリ(EPROM(erasable programmable read−only memory)またはフラッシュ・メモリ)、光ファイバ、携帯コンパクト・ディスク読み取り専用メモリ(CDROM:compact disc read−only memory)、光記憶デバイス、磁気記憶デバイス、またはこれらの任意の適切な組み合わせが包含されよう。本文書の文脈において、コンピュータ可読記憶媒体は、命令実行システム、装置、またはデバイスによってまたはこれらに関連させて使用するためのプログラムを、収容または格納できる任意の有形媒体とすることができる。
コンピュータ可読信号媒体には、例えばベースバンド中または搬送波の一部として、信号中に具現されたコンピュータ可読プログラム・コードを有する伝播データ信号を含めることができる。かかる伝搬信号は、以下に限らないが、電磁気的、光学的、またはこれらの任意の適切な組み合わせを含め、任意のさまざまな形をとることができる。コンピュータ可読信号媒体は、コンピュータ可読記憶媒体でなく、命令実行システム、装置、またはデバイスによってまたはこれらに関連させて使用するためのプログラムを、通信、伝搬、または移送できる、任意のコンピュータ可読媒体であり得る。
コンピュータ可読媒体中に具現されたプログラム・コードは、以下に限らないが、無線、有線ライン、光ファイバ・ケーブル、RFなど、またはこれらの任意の適切な組み合わせを含め、任意の適切な媒体を用いて送信することができる。
本開示の態様のオペレーションを実行するためのコンピュータ・プログラム・コードは、Java(R)、Smalltalk(R)、C++などのオブジェクト指向プログラミング言語、および、“C”プログラミング言語または類似のプログラミング言語などの従来式手続き型プログラミング言語を含め、一つ以上のプログラミング言語の任意の組合せで書くことができる。このプログラム・コードは、全体をユーザのコンピュータで、一部をユーザのコンピュータで、単独型ソフトウエア・パッケージとして実行することができ、一部をユーザのコンピュータで他の部分を遠隔コンピュータで、または全体を遠隔のコンピュータまたはサーバで実行することができる。後者のシナリオでは、遠隔コンピュータを、ローカル・エリア・ネットワーク(LAN:local area network)または広域ネットワーク(WAN:wide area network)を含む任意の種類のネットワークを介してユーザのコンピュータに接続することができ、あるいは(例えば、インターネット・サービス・プロバイダを使いインターネットを介し)外部のコンピュータへの接続を行うことができる。
本開示の実施形態による方法、装置(システム)およびコンピュータ・プログラムのフローチャート説明図もしくはブロック図またはその両方を参照しながら本開示の態様を以下に説明する。フローチャート説明図もしくはブロック図あるいはその両方の各ブロック、および、フローチャート説明図もしくはブロック図またはその両方のブロックの組合せは、コンピュータ・プログラム命令によって実行可能であることが理解されよう。これらのコンピュータ・プログラム命令を、汎用コンピュータ、特殊用途コンピュータ、又は他のプログラム可能データ処理装置のプロセッサに供給してマシンを形成し、コンピュータ又は他のプログラム可能データ処理装置のプロセッサを介して実行されるこれらの命令が、フローチャートもしくはブロック図またはその両方のブロックまたはブロック群中に規定された機能/処理を実施するための手段を生成するようにすることができる。また、これらのコンピュータ・プログラム命令を、コンピュータ、他のプログラム可能データ処理装置、または他のデバイスに対し特定の仕方で機能するよう命令できるコンピュータ可読媒体に格納し、該コンピュータ可読媒体に格納された命令が、フローチャートもしくはブロック図またはその両方のブロックまたはブロック群中に規定された機能/処理を実施する命令群を包含する製品を形成するようにすることができる。
同様に、コンピュータ・プログラム命令を、コンピュータ、他のプログラム可能データ処理装置、または他のデバイスにロードして、これらコンピュータ、他のプログラム可能装置、または他のデバイス上で一連のオペレーション・ステップを遂行させてコンピュータ実行のプロセスを生成し、これらコンピュータまたは他のプログラム可能装置で実行される命令が、フローチャートもしくはブロック図またはその両方のブロックまたはブロック群中に規定された機能/処理を実施するためのプロセスを提供するようにすることもできる。
以下の詳細説明は、一般的には前述の本開示の要約をたどり、必要に応じ、本開示のさまざまな態様および実施形態の定義をさらに説明、展開することにする。
図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に対し、アシスト・スレッド状態レジスタ(ATSR)130が包含するアシスト・スレッド有効(ATV:assist thread valid)ビットを設定することによって、アシスト・ハードウエア・スレッド150が利用可能であることを連絡する(さらなる詳細については、図2、図4および対応する説明文を参照)。また、起動ハードウエア・スレッド120は、アシスト・ハードウエア・スレッド150にアシスト・スレッド番号(ATN:assist thread number)値を割り当て、アシスト・ハードウエア・スレッド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:assist thread executing)ビット230であり、該ビットは、現在実行中のアシスト・ハードウエア・スレッドがあるかどうかを示す。ソフトウエア・プログラムは、一回の読み取りオペレーションでATEビット230をチェックすることができ、アシスト・ハードウエア・スレッドの全てが実行を終えているかどうかを識別する(さらなる詳細については、図4、図5および対応する説明文を参照)。
一つの実施形態において、列240〜260は、ATEビット230が、実行しているアシスト・ハードウエア・スレッドがないことを示している場合においてのみ有効である情報を含む。アシスト・スレッド状態(ATS)フィールド240は、最後のアシスト・ハードウエア・スレッドの終了理由(例、アシスト・スレッドがSAT命令を実行した、起動スレッドがSAT命令を実行した、エラーが発生した、プロセッサがリソースを先取りした、など)を示す終了インジケータを包含する。
SATパラメータ(SATP:SAT parameter)フィールド250は、実行している最後のアシスト・ハードウエア・スレッドがSAT命令を実行するとき、そのアシスト・ハードウエア・スレッドが起動ハードウエア・スレッドに渡したパラメータを包含する。例えば、SATパラメータは、アシスト・ハードウエア・スレッドがタスク(コードの実行)を成功裏に完了したどうかを示すことができる。最後に、次の命令(NI:next instruction)フィールド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:source register)位置(例、汎用レジスタの位置)を包含する。
別の実施形態において、アシスト・ハードウエア・スレッドが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−purpose register)中に格納する。状態レジスタ・ビット位置は、起動ハードウエア・スレッドが、アシスト・ハードウエア・スレッドの状態に基づいて設定する状態レジスタ・ビットに対応する(後記で説明)。次に、ソフトウエア・プログラムは、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もメモリ・コントローラに接続している。一つの実施形態において、PCI Express(R)バス1718は、メモリ・コントローラをグラフィックス・コントローラ1725に接続している。グラフィックス・コントローラ1725は、コンピュータ・モニタなどのディスプレイ・デバイス1730に接続している。
メモリ・コントローラ1715およびI/Oコントローラ1735は、バス1719を使って相互に接続している。一つの実施形態において、このバスは、メモリ・コントローラ1715とI/Oコントローラ1735との間で双方向に高速でデータを転送する、ダイレクト・メディア・インタフェース(DMI:Direct Media Interface)バスである。I/Oコントローラー・ハブ(ICH:I/O Controller Hub)(R)としても知られるI/Oコントローラ1735は、一般に、メモリ・コントローラによって提供される能力よりも、遅い速度で作動する能力を実装するチップである。I/Oコントローラ1735は、通常、さまざまなコンポーネントを接続するために使われるさまざまなバスを備える。これらのバスには、例えば、PCIおよびPCI Express(R)バス、ISAバス、システム・マネジメント・バス(SMBus(またはSMB):System Management Bus)(R)もしくはロー・ピン・カウント(LPC:Low Pin Count)(R)バス、またはこれらの組み合わせが包含される。LPCバスは、多くの場合、起動用ROM1796および(「スーパーI/O」チップを使う)「レガシー」I/Oデバイスなど、低処理能力デバイスを接続する。「レガシー」I/Oデバイス(1798)には、例えば、シリアルおよびパラレル・ポート、キーボード、マウス、もしくはフロッピー・ディスク・コントローラ、またはこれの組み合わせなどが包含される。また、LPCバスは、I/Oコントローラ1735を、トラステッド・プラットフォーム・モジュール(TPM:Trusted Platform Module)1795に接続する。I/Oコントローラ1735に大抵が包含される他のコンポーネントには、直接メモリ・アクセス(DMA:Direct Memory Access)コントローラ、プログラム可能割り込みコントローラ(PIC:Programmable Interrupt Controller)、および、バス1784を使ってI/Oコントローラ1735をハード・ディスク・ドライブなどの不揮発性記憶デバイス1785に接続する、記憶デバイス・コントローラが含まれる。
エクスプレスカード(R)1755は、ホットプラグ可能なデバイスを該情報処理システムに接続するスロットである。エクスプレスカード(R)1755は、ユニバーサル・シリアル・バス(USB:Universal Serial Bus)およびPCI Express(R)バスの両方を使って、I/Oコントローラ1735に接続しており、PCI Express(R)およびUSB両方の接続性をサポートしている。I/Oコントローラ1735は、USBにつながれているデバイスにUSB接続性を提供する、USBコントローラ1740を包含する。これらのデバイスには、ウェブカム(カメラ)1750、赤外線(IR:infrared)受信機1748、キーボードおよびトラックパッド1744、並びに、無線パーソナル・エリア・ネットワーク(PAN:personal area network)を提供するブルートゥース・デバイス1746が包含される。また、USBコントローラ1740は、マウス、着脱可能不揮発性記憶デバイス1745、モデム、ネットワーク・カード、ISDNコネクタ、ファックス、プリンタ、USBハブ、および他の多種類のUSB接続デバイスなど、他の雑多なUSB接続デバイス1742に対しUSB接続性を提供する。着脱可能不揮発性記憶デバイス1745が、USB接続デバイスとして示されているが、着脱可能不揮発性記憶デバイス1745は、ファイヤーワイヤ(R)インタフェースなど、異なるインタフェースを使って接続することも可能であろう。
無線ローカル・エリア・ネットワーク(LAN:Local Area Network)デバイス1775は、PCIまたはPCI Express(R)バス1772を介してI/Oコントローラ1735に接続している。LANデバイス1775は、通常、情報処理システム1700と別のコンピュータ・システムまたはデバイスとの間で無線通信するため、全てが同一のプロトコルを用いる無線変調技術のIEEE 802.11規格の一つを実装している。光記憶デバイス1790は、シリアルATA(SATA:Serial ATA)バス1788を用いてI/Oコントローラ1735に接続している。シリアルATAアダプタおよびデバイスは、高速シリアル・リンクを介して通信する。またシリアルATAバスは、I/Oコントローラ1735を、ハード・ディスク・ドライブなど他の形態の記憶デバイスにも接続する。サウンド・カードなどのオーディオ回路1760は、バス1758を介してI/Oコントローラ1735に接続している。また、オーディオ回路1760は、オーディオ・ライン入力および光デジタル・オーディオ入力ポート1762、光デジタル出力およびヘッドフォン・ジャック1764、内蔵スピーカ1766、および内蔵マイクロフォン1768などの機能を備える。イーサネット(R)コントローラ1770は、PCIまたはPCI Express(R)バスなどのバスを使って、I/Oコントローラ1735に接続している。イーサネット(R)コントローラ1770は、情報処理システム1700を、ローカル・エリア・ネットワーク(LAN)、インターネット、および他の公衆または個人コンピュータ・ネットワークなどの、コンピュータ・ネットワークに接続する。
図17は一つの情報処理システムを示しているが、情報処理システムは多くの形態をとり得る。例えば、情報処理システムは、デスクトップ、サーバ、携帯、ラップトップ、ノート、または他のフォーム・ファクタのコンピュータまたはデータ処理システムの形をとることができる。さらに、情報処理システムは、携帯端末(PDA:personal digital assistant)、ゲーム・デバイス、ATMマシン、携帯電話デバイス、通信デバイス、またはプロセッサとメモリとを包含する他のデバイスなど、他のフォーム・ファクタをとることもできる。
前述図面中のフローチャートおよびブロック図は、本開示のさまざまな実施形態によるシステム、方法、およびコンピュータ・プログラムの、実装可能なアーキテクチャ、機能、並びにオペレーションを示している。この点において、フローチャートまたはブロック図中の各ブロックは、規定された論理機能(群)を実施するための一つ以上の実行可能命令を含むコードのモジュール、セグメント、または部分を表し得る。また、ある別の実装においては、ブロックに記載された機能が図に記載されたのと違った順序で実施され得ることに留意すべきである。例えば、関与する機能性によっては、連続に示された2つのブロックが、実際は実質上同時に実行されることがあり、ブロック群が時として逆の順序で実行され得る。さらに、ブロック図もしくはフローチャート説明図またはその両方の各ブロック、および、ブロック図もしくはフローチャート説明図またはその両方のブロックの組合せが、特定の機能または処理を遂行する特殊用途のハードウエア・ベース・システム、または特殊用途ハードウエアとコンピュータ命令との組合せによって実行できることにも留意すべきである。
本開示の特定の実施形態を提示し説明してきたが、当業者にとって、本開示およびそのより広義な解釈から逸脱することなく、本明細書の教示に基づき、変更および修改を加えるのが可能なことは自明であろう。従って、添付の請求項は、かかる全ての変更および修改を、本開示の真の精神および範囲内にあるものとして請求範囲に包含するものである。さらに、本開示は、添付の請求項によってだけ定義されることを理解すべきである。当業者は、提示された請求要素に特定の数が意図されている場合、かかる意図は、その請求項に明示で記載され、かかる記載のない場合はそういった制限が存在しないことを理解していよう。次の添付請求項は、制限のない例に対しその理解のための補助として、請求要素を提示するための導入句「少なくとも一つの」および「一つ以上の」の使用を包含する。しかしながら、かかる語句の使用によって、不定冠詞「ある(aまたはan)」による請求要素の提示が、かかる提示の請求要素を包含するいかなる特定の請求項に対しても、たとえ同じ請求項に、導入句「少なくとも一つの」または「一つ以上の」と「ある(aまたはan)」などの不定冠詞とが含まれているとしても、その請求項を、かかる要素を一つだけ含む開示に限定することを意味すると解釈すべきではなく、請求項中の定冠詞の使用についても同じことが言える。
100 プロセッサ
105 命令
110 ソフトウエア・プログラム
115 ソフトウエア状態ストア
120 起動ハードウエア・スレッド
125 ハードウエア状態ストア
130 アシスト・スレッド状態レジスタ
140 起動スレッド・レジスタ
145 命令
150 アシスト・ハードウエア・スレッド
160 アシスト・スレッド状態レジスタ
170 アシスト・スレッド・レジスタ

Claims (12)

  1. 起動ハードウエア・スレッドによって第一アシスト・ハードウエア・スレッドを起動するステップであって、前記第一アシスト・ハードウエア・スレッドは第一コード・セグメントを実行する、前記起動するステップと、
    一つ以上の実行中のアシスト・ハードウエア・スレッドを示す、アシスト・スレッド実行インジケータを設定するステップと、
    第二アシスト・ハードウエア・スレッドを起動するステップであって、前記第二アシスト・ハードウエア・スレッドは第二コード・セグメントを実行する、前記起動するステップと、
    前記第一アシスト・ハードウエア・スレッドおよび前記第二アシスト・ハードウエア・スレッドの両方が終了していることを示す、前記アシスト・スレッド実行インジケータの変化を識別するステップと、
    前記アシスト・スレッド実行インジケータの前記変化を識別するのに応じて、アシスト・ハードウエア・スレッドの実行結果を処理するステップと、
    前記アシスト・スレッド実行インジケータを包含するアシスト・スレッド状態レジスタが、前記第一アシスト・ハードウエア・スレッドの実行を完了するステップと、
    前記第一アシスト・ハードウエア・スレッドが前記第二アシスト・ハードウエア・スレッドはまだ実行中であることを検知するのに応じて、前記第一アシスト・ハードウエア・スレッドによって、前記アシスト・ハードウエア・スレッドのビットを変更しない決定をするステップと、
    前記第一アシスト・ハードウエア・スレッドの前記完了の後、前記第二アシスト・ハードウエア・スレッドの実行を完了するステップと、
    前記第二アシスト・ハードウエア・スレッドが前記第一アシスト・ハードウエア・スレッドは実行していないことを検知するのに応じて、前記第二アシスト・ハードウエア・スレッドによって、前記アシスト・ハードウエア・スレッドのビットを変更する決定をするステップと、
    前記第二アシスト・ハードウエア・スレッドによって、前記アシスト・スレッド状態レジスタに包含されるアシスト・スレッド状態フィールド中に終了インジケータを格納するステップであって、前記終了インジケータは前記第二アシスト・ハードウエア・スレッドが終了した理由を表す、前記格納するステップと、
    を含む、マシン実装された方法。
  2. 前記第一アシスト・ハードウエア・スレッドを起動する前記起動ハードウエア・スレッドを呼び出すソフトウエア・プログラムは、前記アシスト・スレッド実行インジケータへの一回の読み取りオペレーションを実行することによって、前記第一アシスト・ハードウエア・スレッドおよび前記第二アシスト・ハードウエア・スレッドの両方が実行を停止したことを判定する、請求項1に記載の方法。
  3. 前記第二アシスト・ハードウエア・スレッドが前記第一アシスト・ハードウエア・スレッドは実行していないのを検知するのに応じて、前記方法は、
    前記第二アシスト・ハードウエア・スレッドによって、前記アシスト・スレッド状態レジスタに包含される停止アシスト・スレッド状態フィールド中に停止アシスト・スレッド・パラメータ値を格納するステップ、
    をさらに含み、
    前記停止アシスト・スレッド・パラメータ値は、前記第二アシスト・ハードウエア・スレッドが前記第二コード・セグメントの実行を成功裏に完了したかどうかを表す、
    請求項に記載の方法。
  4. 前記第一コード・セグメントおよび前記第二コード・セグメントはソフトウエア・プログラムに包含され、前記方法は、
    前記起動ハードウエア・スレッドによって、前記ソフトウエア・プログラムに包含されている、アシスト・スレッドが実行中である条件での分岐(BCE)命令を実行するステップをさらに含み、
    前記実行するステップは、
    前記BCE命令から複数の汎用レジスタ番号を抜き出すステップであって、前記複数の汎用レジスタ番号は、アシスト・プロセッサ番号およびターゲット・アドレスを包含する複数の汎用レジスタを識別する、前記抜き出すステップと、
    前記複数の汎用レジスタから、前記アシスト・プロセッサ番号および前記ターゲット・アドレスを読み出すステップと、
    前記読み出されたアシスト・プロセッサ番号が、前記第一アシスト・ハードウエア・スレッドに対応することの判定に応じて、前記第一アシスト・ハードウエア・スレッドが実行中かどうかを判定するステップと、
    前記第一アシスト・ハードウエア・スレッドが実行中との判定に応じて、前記ターゲット・アドレスに分岐するステップと、
    前記第一アシスト・ハードウエア・スレッドが実行していないとの判定に応じて、前記BCE命令に続く次の命令を実行するステップと、
    をさらに含む、
    請求項1に記載の方法。
  5. 前記起動ハードウエア・スレッドは、第一実行ユニットを包含し、
    前記第一アシスト・ハードウエア・スレッドは、前記第一実行ユニットとは異なる第二実行ユニットを包含する
    請求項1に記載の方法。
  6. 前記第一コード・セグメントおよび前記第二コード・セグメントはソフトウエア・プログラムに包含されており、前記方法は、
    前記起動ハードウエア・スレッドによって、前記ソフトウエア・プログラムに包含されている、アシスト・スレッドが実行中ならば状態レジスタを設定する(CRSE)命令を実行するステップをさらに含み、
    前記実行するステップは
    前記CRSE命令から複数の汎用レジスタ番号を抜き出すステップであって、前記複数の汎用レジスタ番号は、アシスト・プロセッサ番号および状態レジスタ・ビット番号を包含する複数の汎用レジスタを識別する、前記抜き出すステップと、
    前記複数の汎用レジスタから、前記アシスト・プロセッサ番号および前記状態レジスタ・ビット番号を読み出すステップと、
    前記読み出されたアシスト・プロセッサ番号が、前記第一アシスト・ハードウエア・スレッドに対応することの判定に応じて、前記第一アシスト・ハードウエア・スレッドが実行中かどうかを判定するステップと、
    前記第一アシスト・ハードウエア・スレッドが実行中であるとの判定に応じて、前記読み出された状態ビットレジスタ番号に対応する状態ビットを、状態レジスタにおいて設定するステップと、
    前記第一アシスト・ハードウエア・スレッドが実行していないとの判定に応じて、前記読み出された状態ビットレジスタ番号に対応する前記状態ビットを、前記状態レジスタ中においてクリアするステップと、
    をさらに含む、
    請求項1に記載の方法。
  7. 前記ソフトウエア・プログラムによって、前記状態ビットが設定されていることを検知するステップと、
    前記状態ビットが設定されていることの検知に応じて、ソフトウエア・コードを実行するステップと、
    をさらに含む、請求項に記載の方法。
  8. 前記第一アシスト・ハードウエア・スレッドが前記第二アシスト・ハードウエア・スレッドを呼び出す、請求項1に記載の方法。
  9. 前記起動ハードウエア・スレッドが前記第二アシスト・ハードウエア・スレッドを呼び出す、請求項1に記載の方法。
  10. 一つ以上のプロセッサ、
    前記プロセッサの少なくとも一つに連結されたメモリ、および
    前記メモリに格納される命令のセット、
    を含む情報処理システムであって、
    前記請求項1乃至請求項7のいずれかに記載の方法のすべてのステップの処理を遂行するため、前記プロセッサの少なくとも一つによって実行される、
    前記情報処理システム。
  11. 起動ハードウエア・スレッドと、
    前記起動ハードウエア・スレッドに起動された第一アシスト・ハードウエア・スレッドであって、前記第一アシスト・ハードウエア・スレッドは第一コード・セグメントを実行する、前記第一アシスト・ハードウエア・スレッドと、
    前記第一アシスト・ハードウエア・スレッドを起動するのに応じて、前記起動ハードウエア・スレッドによって設定されるアシスト・スレッド実行インジケータと、
    前記起動ハードウエア・スレッドによって起動された第二アシスト・ハードウエア・スレッドであって、前記第二アシスト・ハードウエア・スレッドは第二コード・セグメントを実行する、前記第二アシスト・ハードウエア・スレッドと、
    を含むプロセッサであって、
    前記起動ハードウエア・スレッドは、前記アシスト・スレッド実行インジケータの変化を検知し、前記変化は、前記第一アシスト・ハードウエア・スレッドおよび前記第二アシスト・ハードウエア・スレッドの両方が終了したことを示すことと
    前記アシスト・スレッド実行インジケータが前記変化を識別することと、
    前記アシスト・スレッド実行インジケータが前記変化を識別するのに応じて、アシスト・ハードウエア・スレッドの実行結果を処理することと、
    前記アシスト・スレッド実行インジケータを包含するアシスト・スレッド状態レジスタが、前記第一アシスト・ハードウエア・スレッドの実行を完了することと、
    前記第一アシスト・ハードウエア・スレッドが前記第二アシスト・ハードウエア・スレッドはまだ実行中であることを検知するのに応じて、前記第一アシスト・ハードウエア・スレッドによって、前記アシスト・ハードウエア・スレッドのビットを変更しない決定することと、
    前記第一アシスト・ハードウエア・スレッドの前記完了の後、前記第二アシスト・ハードウエア・スレッドの実行を完了することと、
    前記第二アシスト・ハードウエア・スレッドが前記第一アシスト・ハードウエア・スレッドは実行していないことを検知するのに応じて、前記第二アシスト・ハードウエア・スレッドによって、前記アシスト・ハードウエア・スレッドのビットを変更する決定することと、
    前記第二アシスト・ハードウエア・スレッドによって、前記アシスト・スレッド状態レジスタに包含されるアシスト・スレッド状態フィールド中に終了インジケータを格納するステップであって、前記終了インジケータは前記第二アシスト・ハードウエア・スレッドが終了した理由を表す、前記格納をする、
    前記プロセッサ。
  12. ソフトウエア・プログラムが、前記アシスト・スレッド実行インジケータへの一回の読み取りオペレーションを実行することによって、前記第一アシスト・ハードウエア・スレッドおよび前記第二アシスト・ハードウエア・スレッドの両方が実行を停止したことを判定する、請求項11に記載のプロセッサ。

JP2011202136A 2010-09-20 2011-09-15 アシスト・ハードウエア・スレッドの拡張可能な状態追跡のための方法、情報処理システム、およびプロセッサ Expired - Fee Related JP5710434B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US12/886,149 US8713290B2 (en) 2010-09-20 2010-09-20 Scaleable status tracking of multiple assist hardware threads
US12/886149 2010-09-20

Publications (2)

Publication Number Publication Date
JP2012064215A JP2012064215A (ja) 2012-03-29
JP5710434B2 true JP5710434B2 (ja) 2015-04-30

Family

ID=45818793

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2011202136A Expired - Fee Related JP5710434B2 (ja) 2010-09-20 2011-09-15 アシスト・ハードウエア・スレッドの拡張可能な状態追跡のための方法、情報処理システム、およびプロセッサ

Country Status (3)

Country Link
US (2) US8713290B2 (ja)
JP (1) JP5710434B2 (ja)
CN (1) CN102411512B (ja)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8793474B2 (en) 2010-09-20 2014-07-29 International Business Machines Corporation Obtaining and releasing hardware threads without hypervisor involvement
CN104424027B (zh) * 2013-08-22 2018-07-13 华为技术有限公司 线程运行方法及装置
US9898348B2 (en) 2014-10-22 2018-02-20 International Business Machines Corporation Resource mapping in multi-threaded central processor units
US9575802B2 (en) 2014-10-28 2017-02-21 International Business Machines Corporation Controlling execution of threads in a multi-threaded processor
US11080064B2 (en) 2014-10-28 2021-08-03 International Business Machines Corporation Instructions controlling access to shared registers of a multi-threaded processor
US10031753B2 (en) * 2015-05-22 2018-07-24 Nxp Usa, Inc. Computer systems and methods for executing contexts with autonomous functional units
US9977677B2 (en) * 2016-04-07 2018-05-22 International Business Machines Corporation Execution slice with supplemental instruction port for an instruction using a source operand from another instruction port
CN106528049B (zh) * 2016-11-17 2019-06-11 上海兆芯集成电路有限公司 在多存储体条件分支预测器中用于更新事件的随机数产生
GB2569098B (en) 2017-10-20 2020-01-08 Graphcore Ltd Combining states of multiple threads in a multi-threaded processor
GB2569269B (en) * 2017-10-20 2020-07-15 Graphcore Ltd Synchronization in a multi-tile processing arrangement
US11921843B2 (en) * 2021-09-26 2024-03-05 Ceremorphic, Inc. Multi-threaded secure processor with control flow attack detection

Family Cites Families (40)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5247676A (en) * 1989-06-29 1993-09-21 Digital Equipment Corporation RPC based computer system using transparent callback and associated method
US6233599B1 (en) 1997-07-10 2001-05-15 International Business Machines Corporation Apparatus and method for retrofitting multi-threaded operations on a computer by partitioning and overlapping registers
US5978857A (en) 1997-07-22 1999-11-02 Winnov, Inc. Multimedia driver having reduced system dependence using polling process to signal helper thread for input/output
US6105055A (en) 1998-03-13 2000-08-15 Siemens Corporate Research, Inc. Method and apparatus for asynchronous multimedia collaboration
US6438671B1 (en) 1999-07-01 2002-08-20 International Business Machines Corporation Generating partition corresponding real address in partitioned mode supporting system
US6625654B1 (en) * 1999-12-28 2003-09-23 Intel Corporation Thread signaling in multi-threaded network processor
US6952824B1 (en) 1999-12-30 2005-10-04 Intel Corporation Multi-threaded sequenced receive for fast network port stream of packets
US6629237B2 (en) 2000-09-01 2003-09-30 Intel Corporation Solving parallel problems employing hardware multi-threading in a parallel processing environment
US6742146B2 (en) 2001-02-14 2004-05-25 Emc Corporation Techniques for providing data within a data storage system
US6928645B2 (en) 2001-03-30 2005-08-09 Intel Corporation Software-based speculative pre-computation and multithreading
CA2346762A1 (en) 2001-05-07 2002-11-07 Ibm Canada Limited-Ibm Canada Limitee Compiler generation of instruction sequences for unresolved storage devices
US20020199179A1 (en) 2001-06-21 2002-12-26 Lavery Daniel M. Method and apparatus for compiler-generated triggering of auxiliary codes
JP3632635B2 (ja) * 2001-07-18 2005-03-23 日本電気株式会社 マルチスレッド実行方法及び並列プロセッサシステム
US7398518B2 (en) * 2002-12-17 2008-07-08 Intel Corporation Method and apparatus for measuring thread wait time
US7587584B2 (en) 2003-02-19 2009-09-08 Intel Corporation Mechanism to exploit synchronization overhead to improve multithreaded performance
US7849465B2 (en) 2003-02-19 2010-12-07 Intel Corporation Programmable event driven yield mechanism which may activate service threads
US7321965B2 (en) 2003-08-28 2008-01-22 Mips Technologies, Inc. Integrated mechanism for suspension and deallocation of computational threads of execution in a processor
US7404067B2 (en) 2003-09-08 2008-07-22 Intel Corporation Method and apparatus for efficient utilization for prescient instruction prefetch
US20050071438A1 (en) 2003-09-30 2005-03-31 Shih-Wei Liao Methods and apparatuses for compiler-creating helper threads for multi-threading
US20050071841A1 (en) * 2003-09-30 2005-03-31 Hoflehner Gerolf F. Methods and apparatuses for thread management of mult-threading
US7631307B2 (en) 2003-12-05 2009-12-08 Intel Corporation User-programmable low-overhead multithreading
US7676655B2 (en) 2004-06-30 2010-03-09 Sun Microsystems, Inc. Single bit control of threads in a multithreaded multicore processor
US20060080661A1 (en) 2004-10-07 2006-04-13 International Business Machines Corporation System and method for hiding memory latency
US7765547B2 (en) * 2004-11-24 2010-07-27 Maxim Integrated Products, Inc. Hardware multithreading systems with state registers having thread profiling data
US8230422B2 (en) 2005-01-13 2012-07-24 International Business Machines Corporation Assist thread for injecting cache memory in a microprocessor
US20070055852A1 (en) 2005-09-06 2007-03-08 Alcatel Processing operation management systems and methods
WO2007043130A1 (ja) * 2005-10-03 2007-04-19 Fujitsu Limited 描画装置、半導体集積回路装置及び描画方法
WO2007084700A2 (en) * 2006-01-19 2007-07-26 University Of Maryland Office Of Technology Commercialization System and method for thread handling in multithreaded parallel computing of nested threads
US8595744B2 (en) * 2006-05-18 2013-11-26 Oracle America, Inc. Anticipatory helper thread based code execution
US8041929B2 (en) 2006-06-16 2011-10-18 Cisco Technology, Inc. Techniques for hardware-assisted multi-threaded processing
US20080046689A1 (en) * 2006-08-21 2008-02-21 Tien-Fu Chen Method and apparatus for cooperative multithreading
CN101529377B (zh) 2006-10-27 2016-09-07 英特尔公司 处理器中多线程之间通信的方法、装置和系统
US8296775B2 (en) 2007-01-31 2012-10-23 Microsoft Corporation Efficient context switching of virtual processors by managing physical register states in a virtualized environment
US8214808B2 (en) 2007-05-07 2012-07-03 International Business Machines Corporation System and method for speculative thread assist in a heterogeneous processing environment
US7779234B2 (en) 2007-10-23 2010-08-17 International Business Machines Corporation System and method for implementing a hardware-supported thread assist under load lookahead mechanism for a microprocessor
US8775778B2 (en) 2008-02-01 2014-07-08 International Business Machines Corporation Use of a helper thread to asynchronously compute incoming data
CN101477458A (zh) 2008-12-15 2009-07-08 浙江大学 基于处理器和fpga混合架构的硬件线程执行方法
US20100162247A1 (en) 2008-12-19 2010-06-24 Adam Welc Methods and systems for transactional nested parallelism
US8423750B2 (en) 2010-05-12 2013-04-16 International Business Machines Corporation Hardware assist thread for increasing code parallelism
US8667253B2 (en) 2010-08-04 2014-03-04 International Business Machines Corporation Initiating assist thread upon asynchronous event for processing simultaneously with controlling thread and updating its running status in status register

Also Published As

Publication number Publication date
JP2012064215A (ja) 2012-03-29
CN102411512A (zh) 2012-04-11
US8719554B2 (en) 2014-05-06
US8713290B2 (en) 2014-04-29
US20130139168A1 (en) 2013-05-30
CN102411512B (zh) 2015-04-08
US20120072707A1 (en) 2012-03-22

Similar Documents

Publication Publication Date Title
JP5710434B2 (ja) アシスト・ハードウエア・スレッドの拡張可能な状態追跡のための方法、情報処理システム、およびプロセッサ
KR102496402B1 (ko) 사용자-레벨 포크 및 조인 프로세서, 방법, 시스템, 및 명령어
JP6837011B2 (ja) アルゴリズム整合、機能無効化、または性能制限による後方互換性
JP6430970B2 (ja) 異なる命令セットアーキテクチャを有するプロセッサ上におけるオペレーティングシステムの実行
EP2609500B1 (en) Obtaining and releasing hardware threads without hypervisor involvement
US9043789B2 (en) Managing safe removal of a passthrough device in a virtualization system
JP6501791B2 (ja) マルチスレッド・ゲスト仮想マシン(vm)をディスパッチするためのシステム、方法およびコンピュータ・プログラム製品
JP6556747B2 (ja) コンピュータ内の複数のスレッドをエグジットするための方法、システム、およびコンピュータ・プログラム
US10402218B2 (en) Detecting bus locking conditions and avoiding bus locks
US10983847B2 (en) Dynamically loadable unikernel binaries
US20160253196A1 (en) Optimized extended context management for virtual machines
US7698547B1 (en) Execution of a program module within both a PEI phase and a DXE phase of an EFI firmware
US11182168B2 (en) Post completion execution in an out-of-order processor design
WO2019212696A1 (en) Multithread framework for use in pre-boot environment of a system-on-chip
JP2022060151A (ja) 低レイテンシのブート性能を可能にするファームウェアのブートタスクの分配
US9886327B2 (en) Resource mapping in multi-threaded central processor units
US8694832B2 (en) Assist thread analysis and debug mechanism
CN114610492A (zh) 乱序执行资源的回收方法、装置、电子设备和存储介质
CN117075973A (zh) 一种基于RISC-V服务器CPU的新型LinuxBoot启动引导方法及系统

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20140409

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20141027

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20141104

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20150129

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20150217

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20150304

R150 Certificate of patent or registration of utility model

Ref document number: 5710434

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees