(57)【要約】  簡潔に述べると、本発明の実施例に従って、マルチスレッド・コンピュータ・システムにおけるスレッドの実行をイネーブルにするための装置および方法が提供される。本方法は、ハードウェア資源が非実行中のスレッドの命令に対して利用できるか、または利用できることになるかどうかに少なくとも基づいて、非実行中のスレッドの実行をイネーブルにすることを含む。本装置は、ハードウェア資源が非実行中のスレッドの命令に対して利用できるか、または利用できることになるかどうかに少なくとも基づいて、保留中のスレッドの実行をイネーブルにするためのスレッド・ディスパッチ回路を含む。
2007507805.tif 000002
【特許請求の範囲】
【請求項１】
ハードウェア資源が非実行中のスレッドの命令に対して利用できるか、または利用できることになるかどうかに少なくとも基づいて、前記非実行中のスレッドの実行をイネーブルにする段階を含むことを特徴とする方法。
【請求項２】
前記ハードウェア資源が前記非実行中のスレッドの前記命令に対して利用できるか、または利用できることになる場合は、長いあるいは潜在的に長いレイテンシを有する命令を実行するスレッドの実行から前記非実行中のスレッドの実行に切り替える段階をさらに含むことを特徴とする請求項１記載の方法。
【請求項３】
前記ハードウェア資源が前記非実行中のスレッドの前記命令に対して利用できるか、または利用できることになる場合は、実行中のスレッドの実行から前記非実行中のスレッドの実行に切り替える段階をさらに含むことを特徴とする請求項１記載の方法。
【請求項４】
前記ハードウェア資源が前記非実行中のスレッドの前記命令に対して利用できるか、または利用できることになるかどうかを決定する段階をさらに含むことを特徴とする請求項３記載の方法。
【請求項５】
前記決定する段階は、
前記非実行中のスレッドの命令ストリームを調査する段階と、
前記命令ストリーム中の前記命令を識別する段階と、
前記命令に関連するハードウェア資源を識別する段階と、
をさらに含み、前記調査する段階は、前記実行中のスレッドの実行の間に生じることを特徴とする請求項４記載の方法。
【請求項６】
前記イネーブルにする段階は、前記ハードウェア資源がスコアボードに表示されるかどうかに基づいて、前記非実行中のスレッドの実行をイネーブルにする段階を含むことを特徴とする請求項１記載の方法。
【請求項７】
前記イネーブルにする段階は、レジスタ、キュー、バッファ、機能ユニット、入力／出力（Ｉ／Ｏ）装置、またはメモリ・サブシステム装置が前記非実行中のスレッドの前記命令に対して利用できるか、または利用できることになるかどうかに基づいて、前記非実行中のスレッドの実行をイネーブルにする段階を含む請求項１記載の方法。
【請求項８】
前記ハードウェア資源が前記非実行中のスレッドの前記命令に対して利用できる場合は、前記非実行中のスレッドの実行をイネーブルにし、また、前記ハードウェア資源が前記非実行中のスレッドの前記命令に対して利用できない場合は、前記非実行中のスレッドの実行をイネーブルにしない段階をさらに含むことを特徴とする請求項１記載の方法。
【請求項９】
前記ハードウェア資源が前記非実行中のスレッドの前記命令に対して利用できる場合は、第２の非実行中のスレッドの実行をイネーブルにする段階をさらに含むことを特徴とする請求項１記載の方法。
【請求項１０】
前記ハードウェア資源が前記非実行中のスレッドの前記命令に対して利用できる場合は、少なくとも２つの実行中のスレッドの実行から、前記非実行中のスレッドおよび少なくとも１つの他の非実行中のスレッドの実行に切り替える段階をさらに含むことを特徴とする請求項１記載の方法。
【請求項１１】
第１の保留中のスレッドに対して利用できないハードウェア資源の数に少なくとも基づいて、第１の実行中のスレッドから前記第１の保留中のスレッドに切り替える段階を含むことを特徴とする方法。
【請求項１２】
第２の保留中のスレッドに対して利用できないハードウェア資源の数を決定する段階をさらに含み、切り替える段階は、前記第１の保留中のスレッドに対して利用できないハードウェア資源の数が前記第２の保留中のスレッドに対して利用できないハードウェア資源の数より少ない場合は、前記第１の実行中のスレッドから前記第１の保留中のスレッドに切り替える段階を含むことを特徴とする請求項１１記載の方法。
【請求項１３】
その上に格納された命令を有する記憶媒体を含む物品は、コンピューティング・プラットフォームによって実行されたとき、
ハードウェア資源が非実行中のスレッドの命令に対して利用できるか、または利用できることになるかどうかに少なくとも基づいて、前記非実行中のスレッドの実行をイネーブルにする結果となることを特徴とする物品。
【請求項１４】
前記命令が実行されたとき、さらに、前記ハードウェア資源が前記非実行中のスレッドの前記命令に対して利用できるか、または利用できるようになる場合に、長いレイテンシの実行中のスレッドの実行から前記非実行中のスレッドの前記実行に切り替える結果となることを特徴とする請求項１３記載の物品。
【請求項１５】
前記命令が実行されたとき、さらに、前記ハードウェア資源が前記非実行中のスレッドの前記命令に対して利用できるか、または利用できるようになるかどうかを決定する結果となることを特徴とする請求項１３記載の物品。
【請求項１６】
ハードウェア資源と、
前記ハードウェア資源が非実行中のスレッドの命令に対して利用することができるか、または利用することができるようになるかどうかに少なくとも基づいて、保留中のスレッドの実行をイネーブルにするためのスレッド・ディスパッチ回路と、
から構成されることを特徴とする装置。
【請求項１７】
どのスレッドが実行され、どのスレッドが保留状態のまま残るかを決定するマルチプル・スレッドの命令を調査するために、前記スレッド・ディスパッチ回路が適合されることを特徴とする請求項１６記載の装置。
【請求項１８】
前記ハードウェア資源は、算術および論理演算を行なうため、またはロードおよび格納命令を実行するために適合された機能ユニットであることを特徴とする請求項１６記載の装置。
【請求項１９】
前記ハードウェア資源は、乗算器、加算器、除算器、整数算術論理演算ユニット（ＡＬＵ）、浮動小数点演算論理演算ユニット（ＡＬＵ）、レジスタ、ロード／格納ユニット、メモリ管理ユニット（ＭＭＵ）、マルチメディア・アクセラレータ、セキュリティ・コプロセッサ、または暗号化コプロセッサであることを特徴とする請求項１６記載の装置。
【請求項２０】
どのハードウェア資源がマルチプル・スレッドの前記命令に関係しているか決定し、かつ、前記ハードウェア資源が前記マルチプル・スレッドの前記命令対して利用できるかどうか決定するために、前記スレッド・ディスパッチ回路が適合されることを特徴とする請求項１６記載の装置。
【請求項２１】
マルチプル・スレッドの命令を格納するための命令キャッシュと、
前記スレッド・ディスパッチに結合された命令デコーダと、
レジスタ・ファイル・ユニット内でレジスタの物理的なレジスタ識別を提供し、かつ、各命令にレジスタを割り当てるためのレジスタ・ルックアップと、
をさらに含むことを特徴とする請求項１６記載の装置。
【請求項２２】
前記スレッド・ディスパッチ回路は、走行中のスレッドから前記保留中のスレッドに実行を切り替えるために適合されることを特徴とする請求項１６記載の装置。
【請求項２３】
予め定められた条件が生じるかどうかを決定する目的で、前記スレッド・ディスパッチ回路は、前記走行中のスレッドの命令を調査するために適合されることを特徴とする請求項２２記載の装置。
【請求項２４】
長いレイテンシの命令が生じるかどうかを決定する目的で、前記スレッド・ディスパッチ回路は、前記走行中のスレッドの命令を調査するために適合されることを特徴とする請求項２２記載の装置。
【請求項２５】
アンテナと、
前記アンテナに結合されたプロセッサであって、前記プロセッサは、
ハードウェア資源、および、
前記ハードウェア資源が前記非実行中のスレッドの命令に対して利用できるか、または利用できることになるかどうかに少なくとも基づいて、保留中のスレッドの実行をイネーブルにするためのスレッド・ディスパッチ回路を含む、プロセッサと、
から構成されることを特徴とするシステム。
【請求項２６】
前記ハードウェア資源は、算術および論理演算を行なうため、またはロードおよび格納命令を実行するために適合された機能ユニットであることを特徴とする請求項２５記載のシステム。
【請求項２７】
前記システムはワイヤレス電話を含み、前記ワイヤレス電話は、
前記アンテナと、
前記アンテナに結合された前記プロセッサと、
を含むことを特徴とする請求項２５記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチスレッド・コンピュータ・システムにおいてスレッドの実行をイネーブルにするための方法および装置に関する。
【背景技術】
【０００２】
マルチスレッディングは、高処理能力のコンピュータ・アーキテクチャを可能にする。スレッドとは、プロセッサによって実行される命令セットをいう。
【０００３】
非同時に１つのスレッドが実行され、他のスレッドが保留されているとき、スレッド・スイッチングとは、現在走行中のスレッドの実行と保留中のスレッドの実行との間での切り替えをいう。
【０００４】
プロセッサによって現在実行されているスレッドは、実行中のスレッド、走行中のスレッド、または活動中のスレッドと称される。プロセッサによって現在実行されていないスレッドは、保留中のスレッド、非活動中のスレッド、非実行中のスレッド、または非走行中のスレッドと称される。
【０００５】
システム性能は、特定のシステム内で使用されるスレッド・スイッチング・アルゴリズムによって異なる。システム設計者は、マルチスレッド・コンピュータ・システムにおいてスレッド・スイッチングを提供するための代替方法を絶えず模索している。
【０００６】
本発明に関する主題は、明細書に添付した請求項において特に指摘され明確にクレームされる。しかしながら、本発明は、その目的、機能、および利点と共に、オペレーションの構成および方法の両方に関して、以下の詳細な説明を添付図面と合わせて読むことにより、最も良く理解することができる。
【０００７】
図面を単純化および明瞭化するために、図中に示された要素は、必ずしも同じ寸法で図示されていないことが理解されるであろう。例えば、いくつかの要素の寸法は、明瞭化するために他の要素に比べて拡大される。さらに、適切であると考えられる場合には、参照番号は、対応または類似する要素を示すために図中で繰り返される。
【発明の開示】
【０００８】
以下の詳細な説明では、本発明についての完全な理解を提供するために、多くの特定の詳細事項が記述される。しかしながら、当業者は、本発明がこれらの特定の詳細事項の範囲を越えて実施可能であることを理解するであろう。また、例えば、周知の方法、手順、コンポーネント、および回路については、本発明を不明瞭にしないために詳細には記述されない。
【０００９】
以下の記述および請求項において、用語「含む」および「構成する」がそれらの派生語と共に用いられるが、互いに同義語として扱うと解される。さらに、以下の記述および請求項において、用語「結合された」、「接続された」がそれらの派生語と共に用いられる。これらの用語は、互いに同義語であるとは解さないと理解すべきである。特定の実施例において、「接続された」は、２つ以上の要素が互いに直接に物理的電気的に接触していることを示すために使用される。「結合された」もまた、２つ以上の要素が直接に物理的電気的に接触していることを意味する。しかしながら、「結合された」は、さらに、２つ以上の要素が互いに直接に接触していないが、互いに働き合うこと、または作用し合うことを意味する。
【００１０】
図１は、本発明の一実施例に従って、マルチスレッド・コンピュータ・システムにおいてスレッド・スイッチングを提供する方法１００を示すフローチャートである。
【００１１】
マルチスレッド・プロセッサ（図示せず）において、１つ以上のプログラムのマルチプル・スレッドは、同時または非同時のいずれかで実行される。例えば、１つのスレッドはプロセッサによって実行され、他のスレッドは保留される、すなわち、後の時点で実行されるために待機している。他の実施例では、１つのスレッドのセットが同時に実行され、他のスレッドのセットは保留される。
【００１２】
マルチスレッド・プロセッサにおいて、利用できるスレッドから命令をいつ出すのかを決定するためのロジックがプロセッサに含まれる。例えば、１つのスレッドはいくつかの予め定められた条件が生じるまで走行し、次に、プロセッサは他のスレッドを走行させるために切り替わる。スレッドの実行間における切り替えは、スレッド・スイッチングと称される。
【００１３】
図１の方法１００は、現在実行中のスレッドの命令をフェッチすることから始まる（ブロック１１０）。その命令はデコードされる（ブロック１２０）。デコードされた後に、予め定められた条件に合致するかどうかが決定される。例えば、実行中のスレッドの命令が長いレイテンシを生じるかどうかが決定される（判断ブロック１３０）。
【００１４】
予め定められた条件は、実施例によって多様であるが、実行に先立って長いレイテンシを必要とする命令は、予め定められた条件であるとみなされる。用語「長いレイテンシ(long latency)」とは、命令を受け取ってから命令を実行するまでの時間を意味し、それによってプロセッサに１以上のストールが生じる。ストールとは、プロセッサのパイプラインの一部または全部が命令を実行しないサイクルをいう。
【００１５】
したがって、長いレイテンシ時間は、レイテンシ時間中に他の命令を実行するプロセッサの処理能力により、いくつかのサイクル、または何百ものサイクルに相当する。例えば、（キャッシュ・ミスのように）システム・メモリからの情報取得を要求するロード命令は何百ものサイクルを必要とし、一方、プロセッサと密接に関連する（レベル１（Ｌ１）キャッシュのような）キャッシュからデータを取得するロード命令は１０未満のサイクルを必要とする。ある実施例では、データが処理の準備をする前にプロセッサがストール・サイクルになるので、両方のロード命令が長いレイテンシの命令とみなされる。
【００１６】
予め定められた条件は、その条件が、必然的ではないが、パイプラインのストールをもたらすレイテンシを引き起こすという知識に基づいて選択される。
【００１７】
本発明の範囲を制限するものではないが、予め定められた条件であるとみなされる他の命令の例として、格納命令および特定の算術命令が含まれる。例えば、浮動小数点除算オペレーションは予め定められた条件である。さらに、メモリ・サブシステムにアクセスする他のオペレーションも予め定められた条件である。
【００１８】
予め定められた条件が検出されたとき、他のスレッド、例えば保留中のスレッドの命令はフェッチおよび実行されるので、ストール・サイクルはほとんどまたは全く生じない。したがって、ある実施例において、パフォーマンスはマルチスレッド・コンテキストにおいて著しく向上する。
【００１９】
命令が長いレイテンシを有しない（すなわち、予め定められた条件が生じない）と決定された場合、命令は実行され（ブロック１４０）、また現在のスレッドの次の命令がフェッチされる（ブロック１１０）。
【００２０】
長いレイテンシが結果的に生じる（すなわち、予め定められた条件が生じた）と決定された場合は、次に、保留中のスレッドの命令を調査する（ブロック１５０）。保留中のスレッドの調査は、現在実行中のスレッドの長いレイテンシの命令を実行している間に行われる。次に、どのハードウェア資源が保留中のスレッドの命令に関係するかが決定される。
【００２１】
さらに、本願の方法は、次に、１つ以上のハードウェア資源が、保留中のスレッドの命令によって利用できるかどうか、または利用できることになるかを決定することを含む（判断ブロック１６０）。例えば、レジスタ、キュー、バッファ、演算器（例えば乗算器）、入力／出力（Ｉ／Ｏ）装置、またはメモリ・サブシステムが、非実行中のスレッドの命令によって利用できるかどうか決定される。
【００２２】
保留中のスレッドに対して利用できるハードウェア資源がない場合、現在実行中のスレッドの実行が継続される（ブロック１４０）。１つ以上のハードウェア資源が保留中のスレッドの命令によって利用できる場合、次に、プロセッサはスレッドを切り替える準備をする（ブロック１７０）。一実施例において、スレッドを切り替える準備は、スレッド・スイッチングに先立って現在のスレッドの残りの１つまたはいくつかの命令を実行することを含む。このような方法で、プロセッサがストールすることなく追加の命令が実行される。さらに、かかる命令は、プロセッサのパイプライン内に既に存在するので、それらをフラッシュする必要がない。したがって、第２のスレッドを実行する準備がされている間に、現在実行中のスレッドの命令は処理され続ける。
【００２３】
次に、スレッドが切り替えられる（ブロック１８０）。すなわち、プロセッサは、保留中のスレッド対して１つ以上のハードウェア資源が利用できるか、または利用できることになる場合には、現在実行中のスレッドの走行から保留中のスレッドの走行に切り替わる。
【００２４】
図１は長いレイテンシの命令を処理する方法について説明しているが、前記のように、図１のフローは他の予め定められた条件についても適用することができることを理解されたい。
【００２５】
上述したように、図１の実施例は、いつ２つのスレッド間の切り替えを行なうかを決定する方法を示す。この方法は、２つの異なるスレッド・スイッチングの基準を用いる。すなわち、１つは、現在実行中のスレッドのプロパティに基づくもの、および、他の１つは、現在非実行中のスレッドのプロパティに基づくものである。これは、走行状態から保留状態へ、そして再びそれとは逆にスレッドを移行させるという用語で表現することができる。
【００２６】
本発明の一実施例において、特別の種類の命令、例えば、長時間結果を返さない命令、すなわち、長いレイテンシの命令を出すとき、そしてさらに、保留中のスレッドが「スコアボードに表示された(scoreboarded)」資源を有しない場合は常に、走行中のスレッドは保留中のスレッドになる。スコアボードに表示された資源とは、いくつかの保留中のオペレーションが完了するまで利用することができない資源をいう。例えば、レジスタがスコアボードに表示されると、そのために保留中のスレッドの命令に対して利用できない。
【００２７】
スコアボードに表示された資源を持たないスレッドは、少なくとも１つの命令を出すことができるので、スコアボードに表示された資源を持たない保留中のスレッドへ切り替える方法は、他のスレッド・スイッチング方法と比較して、プロセッサの効率を低下させない。例えば、タイマまたはカウンタは、実行中のスレッドが切り替えられることなく走行できる時間量を制限するために使用される。しかしながら、カウンタの時間切れの前にいくつかのクロック・サイクルが通過するので、カウンタまたはタイマを使用するとシステムの総効率が低下する。
【００２８】
図２は、本発明の実施例に従ってプロセッサ・パイプライン２００を示すブロック図である。プロセッサ・パイプライン２００は、命令キャッシュ２１０、命令デコーダ２２０、スレッド・ディスパッチ２３０、およびレジスタ・ルックアップ２４０を含む。さらに、プロセッサ・パイプライン２００は、機能ユニット２５０，２６０，２７０を含む。プロセッサ・パイプラインは、マルチスレッド・プロセッサに含まれ、１以上のソフトウェア・プログラムのマルチプル・スレッドを処理するために適合される。
【００２９】
本発明の実施例に従ったパイプラインを含むプロセッサのタイプは多様であるが、一実施例において、プロセッサは比較的単純な順序のプロセッサである。他の実施例において、プロセッサは、アドバンスドＲＩＳＣマシーン（ＡＲＭ）アーキテクチャに基づくアーキテクチャのような、縮小命令セット・コンピューティング（ＲＩＳＣ）アーキテクチャを有する。例えば、ある実施例では、カリフォルニア州サンタクララ所在のインテル社から入手可能な、ＩＮＴＥＬ（登録商標）ＸＳＣＡＬＥ（商標）プロセッサの３２ビット・バージョンを使用することができる。しかしながら、他の実施例では、プロセッサは異なるプロセッサであってもよい。
【００３０】
一実施例において、命令キャッシュ２１０は、プロセッサのバス・インターフェイス・ユニット（図示せず）からの命令を受けるために結合される。命令キャッシュ２１０は、マルチプル・スレッドの命令を含む命令を格納するために使用される。命令キャッシュ２１０は、命令デコーダ２２０に命令を提供するために結合される。
【００３１】
命令デコーダ２２０は、より速く処理するために、複雑な命令をより小さな命令に分割して命令をデコードする。例えば、一実施例において、命令はマイクロ・オペレーション（μｏｐｓ）にデコードされる。しかしながら、他の実施例では、他のタイプの命令は、マクロ・オペレーションまたは他の形式の命令等にデコードされる。さらに、縮小命令セット・コンピューティング（ＲＩＳＣ）命令または複雑命令セット・コンピューティング（ＣＩＳＣ）命令のような多様な命令セットを使用できることが理解されるであろう。さらに、ある実施例において、命令デコーダ２２０は、ＣＩＳＣ命令をＲＩＳＣ命令にデコードすることができる。
【００３２】
さらに図２に関し、アクセスされるレジスタの識別を含むデコードされた命令は、スレッド・ディスパッチ２３０に提供される。
【００３３】
スレッド・ディスパッチ２３０は、例えば機能ユニット２５０〜２７０のようなハードウェア資源の１つ以上が利用できるかどうかに少なくとも基づいて保留中のスレッドの実行をイネーブルにするための回路またはロジックを含む。一実施例において、スレッド・ディスパッチ２３０は、どのハードウェア資源が利用可能であるかによって、どの保留中のスレッドが命令を出すのかを選択し、かつ、これをクロック・サイクル毎に行なうスケジューラとしての役割を果たす。さらに、いくつかの実施例では、ブロック２４０からの必要なレジスタが、命令に対して必要な値を含んでいるか、または含むであろう場合、スレッド・ディスパッチ２３０がスレッドの実行をイネーブルにする。ここで記述されたスレッドの実行をイネーブルにするための技術は、同時マルチスレッディング（ＳＭＴ）システムまたは時分割マルチスレッディング（ＴＤＭ）システムにおいて使用することができる。一例として、ＳＭＴシステムは、異なるスレッドから複数の命令を同時に出すことができるシステムをいう。スレッド・ディスパッチ２３０は、スケジューラ、スレッド・ディスパッチ回路、またはスレッド・ディスパッチ装置と称される。
【００３４】
レジスタ・ルックアップ２４０は、レジスタ・ファイル・ユニット内でレジスタの物理的なレジスタ識別を提供するために使用される。かかる方法で、レジスタが各命令に割り当てられる。
【００３５】
機能ユニット２５０，２６０，２７０は、命令を実行するために適合され、実行ユニットとも呼ばれる。いくつかの実施例では、機能ユニットは、算術および論理演算を行なうため、またはロードおよび格納命令を実行するために適合される。他の実施例では、機能ユニット２５０，２６０，２７０は、乗算器、加算器、除算器、整数算術論理演算ユニット（ＡＬＵ）、浮動小数点算術論理演算ユニット（ＡＬＵ）、レジスタ、ロード／格納ユニット、メモリ管理ユニット（ＭＭＵ）、マルチメディア・アクセラレータ、セキュリティおよび暗号化コプロセッサ、他の特殊なコプロセッサ（プロセッサ外部のコプロセッサを含む）などである。
【００３６】
パイプライン・プロセッサ２００は、図１の方法１００のオペレーションのいくつかまたは全部を実行するために適合される。例えば、命令デコーダ２２０は、方法１００のオペレーション１１０，１２０を行なうための回路を含み、スレッド・ディスパッチ２３０は、方法１００のオペレーション１３０，１５０，１６０，１７０，１８０を行なうための回路を含み、機能ユニット２５０〜２７０は、方法１００のオペレーション１４０を行なうための回路を含む。
【００３７】
上述のように、スレッド・ディスパッチ２３０は、１以上のハードウェア資源が保留中のスレッドに対して利用できるかどうかということに少なくとも基づいて、１つ以上の保留中のスレッドの実行をイネーブルにするために適合される。ある実施例において、スレッド・ディスパッチ２３０は、どのスレッドが実行され、また、どのスレッドが保留状態のまま残されるかを決定する目的で、マルチプル・スレッドの命令を調査するために適合される。スレッド・ディスパッチ２３０は、どのハードウェア資源（例えば機能ユニット）がマルチプル・スレッドの命令に関係するかを決定するために適合される。さらに、スレッド・ディスパッチ２３０は、機能ユニット２５０〜２７０が保留中のスレッドの命令に対して利用できるかどうか、または利用できることになるかどうかを決定するために機能ユニット２５０〜２７０に結合される。一実施例において、スレッド・ディスパッチ２３０は、機能ユニット２５０〜２７０およびレジスタ・ルックアップ２４０から「作動可能(ready)」信号を受信するために結合され、そこで作動可能信号は、機能ユニットが利用できるか、または利用できないかを示す。
【００３８】
他の実施例では、スレッド・ディスパッチ２３０は、走行中のスレッドから保留中のスレッドに切り替えるために適合される。スレッド・ディスパッチ２３０は、予め定められた条件が生じるかどうかを決定するために、走行中のスレッドの命令を調査するために適合される。例えば、スレッド・ディスパッチ２３０は、長いレイテンシの命令が生じるかどうかを決定するために、走行中のスレッドの命令を調査するロジックを含む。
【００３９】
本発明の範囲を制限するものではないが、一実施例において、スレッド・ディスパッチ２３０は、予め定められた条件のリストを包含するルックアップ・テーブルを含む。この方法では、命令がスレッド・ディスパッチ２３０によって受け取られるとき、命令が予め定められた条件の１つに対応するかどうか決定するために、ルックアップ・テーブル内のエントリと比較して解析される。あるいは、スレッド・ディスパッチ２３０のロジックが、予め定められた条件の存在または発生を検出するために使用される。さらに他の実施例では、スレッド・ディスパッチ２３０のマイクロコードが、予め定められた条件の存在または発生を決定する。
【００４０】
予め定められた条件が、走行中のスレッドの調査により検出された場合、次に、保留中のスレッドおよび保留中のスレッドに関連するハードウェア資源の利用可能性の調査がスレッド・ディスパッチ２３０によって行なわれる。一実施例において、スレッド・ディスパッチ２３０は、第１の保留中のスレッドが利用できないハードウェア資源の数およびタイプに少なくとも基づいて、第１の実行中のスレッドから第１の保留中のスレッドの実行に実行を切り替える。
【００４１】
他の実施例では、スレッド・ディスパッチ２３０は、２つの保留中のスレッド（例えば、スレッドＡおよびスレッドＢ）が利用できるハードウェア資源を比較する。スレッド・ディスパッチ２３０は、スレッドＡおよびＢが利用できるハードウェア資源の数を決定し、次に、スレッドＡが利用できるハードウェア資源の数が、スレッドＢが利用できるハードウェア資源の数より少ない場合には、走行中のスレッドの実行からスレッドＡの実行に切り替える。あるいは、単純に、スレッドＡが利用できないハードウェア資源の数が、スレッドＢが利用できないハードウェア資源の数より少ない場合には、スレッド・ディスパッチ２３０は、スレッドＡの実行をイネーブルにする。
【００４２】
前述のように、いくつかの実施例においてスレッド・スイッチング・システムが提供されるが、これらは、保留中のスレッドまたは他の保留中のスレッドが利用できないハードウェア資源の数およびタイプに少なくとも一部または全部が基づいて、あるいは、他の保留中のスレッドによって必要とされる利用できない資源をも考慮に入れた上で、選択され、または選択が可能である。一例において、本発明は、何が起こるかに基づいてスレッドをイネーブルにするための方法および装置を提供する、すなわち、非走行中のスレッドを調査し、非走行中のスレッドに対するハードウェア資源の利用可能性に基づいてスレッドの実行をイネーブルにする。
【００４３】
図３は、本発明の実施例に従って非実行中のスレッドの実行をイネーブルにするための方法３００を示すフローチャートである。一実施例において、ハードウェア資源が非実行中のスレッドの命令に対して利用できるか、または、利用できることになるかどうかに少なくとも基づいて、非実行中のスレッドがイネーブルにされる。本発明の範囲を制限するものではないが、ハードウェア資源は、レジスタ、キュー、バッファ、機能ユニット、入力／出力（Ｉ／Ｏ）装置、またはメモリ・サブシステム等である。一実施例において、非実行中のスレッドの実行は、例えばレジスタのようなハードウェア資源がスコアボードに表示されるかどうかに基づく。
【００４４】
方法３００は、ハードウェア資源が非実行中のスレッドの命令によって利用できるかどうかを決定する段階を含む（ブロック３２０）。決定するオペレーションは、非実行中のスレッドの命令ストリームを調査する段階、命令ストリームの命令を識別する段階、命令に関連するハードウェア資源を識別する段階を含む。ハードウェア資源が非実行中のスレッドの命令に対して利用できると決定された場合、非実行中のスレッドの実行がイネーブルになる（ブロック３３０）。換言すれば、非実行中のスレッドが実行するために選択される。反対に、ハードウェア資源が非実行中のスレッドの命令に対して利用できない場合、非実行中のスレッドの実行はイネーブルにならない（ブロック３４０）。
【００４５】
他の実施例では、ハードウェア資源が少なくとも２つの保留中のスレッドに対して利用できる場合に、プロセッサは、少なくとも２つの走行中のスレッドの実行から少なくとも２つの保留中のスレッドの実行に切り替わる。
【００４６】
図４は、本発明の実施例が使用されるワイヤレス装置のブロック図である。図４に示されるように、一実施例において、ワイヤレス装置５００はプロセッサ５１０を含み、それは、マイクロプロセッサ、マイクロコントローラ、特定用途向け集積回路（ＡＳＩＣ）、のような特別目的プロセッサ、プログラム可能なゲート・アレイ（ＰＧＡ）等の汎用または特定用途のプロセッサを含む。
【００４７】
一実施例において、プロセッサ５００は、図２に関して上述したプロセッサ・パイプライン２００を含んでもよい。また、様々な実施例において、プロセッサ５００は、上記の方法１００（図１）または方法３００（図３）を実行するために適合される場合がある。
【００４８】
ワイヤレス装置５００は、個人向け携帯型情報機器（ＰＤＡ）、ワイヤレス機能を備えたラップトップまたはポータブル・コンピュータ、ウェブ・タブレット、ワイヤレス電話（例えばコードレスまたは携帯電話）、ページャ、インスタント・メッセージング装置、デジタル音楽プレーヤ、デジタル・カメラ、あるいは、情報をワイヤレスで送信および／または受信するために適合された他の装置である。ワイヤレス装置５００は、ワイヤレス・パーソナル・エリア・ネットワーク（ＷＰＡＮ）システム、ワイヤレス・ローカル・エリア・ネットワーク（ＷＬＡＮ）システム、ワイヤレス・メトロポリタン・エリア・ネットワーク（ＷＭＡＮ）システム、または、例えばセルラ・システムのようなワイヤレス・ワイド・エリア・ネットワーク（ＷＷＡＮ）システムのようなシステムで使用することができる。
【００４９】
ＷＬＡＮシステムの例としては、米国電気電子学会（ＩＥＥＥ）８０２．１１標準規格に実質的に基づいたシステムを含む。ＷＭＡＮシステムの例としては、米国電気電子学会（ＩＥＥＥ）８０２．１６標準規格に実質的に基づいたシステムを含む。ＷＰＡＮシステムの例としては、Ｂｌｕｅｔｏｏｔｈ標準規格（Ｂｌｕｅｔｏｏｔｈはブルートゥース特別利益団体の登録商標である）に実質的に基づいたシステムを含む。ＷＰＡＮシステムの他の例としては、例えば超広帯域（ＵＷＢ）技術を使用するＩＥＥＥ８０２．１５．３ａ仕様のような米国電気電子学会（ＩＥＥＥ）８０２．１５標準規格に実質的に基づいたシステムを含む。
【００５０】
セルラ・システムの例としては、符号分割多重接続（ＣＤＭＡ）セルラ無線電話通信システム、グローバル移動体通信システム（ＧＳＭ）セルラ無線電話システム、ＧＳＭエボリューションのためのエンハンスド・データ（ＥＤＧＥ）システム、北米デジタル携帯電話（ＮＡＤＣ）セルラ無線電話システム、時分割多重接続（ＴＤＭＡ）システム、拡張ＴＤＭＡ（Ｅ−ＴＤＭＡ）セルラ無線電話システム、ＧＰＲＳ、ワイド・バンドＣＤＭＡ（ＷＣＤＭＡ）、ＣＤＭＡ−２０００、ユニバーサル・モバイル移動体通信システム（ＵＭＴＳ）等の第３世代（３Ｇ）システムを含む。
【００５１】
図４で示されるように、プロセッサ５１０は、内部バス５２０を経由してデジタル信号プロセッサ（ＤＳＰ）５３０に結合される。次に、ＤＳＰ５３０がフラッシュ・メモリ５４０に結合される。図４でさらに示されるように、フラッシュ・メモリ５４０は、マイクロプロセッサ５１０、内部バス５２０、および周辺バス５６０に結合される。
【００５２】
プロセッサ５１０は、さらに、周辺バス・インターフェイス５５０および周辺バス５６０に結合される。図４で示されるように、多くの装置が周辺バス５６０に結合され、他方でワイヤレス・インターフェイス５７０がアンテナ５８０に結合される。様々な実施例において、アンテナ５８０は、ワイヤレスで情報を通信するために適合されたダイポールアンテナ、ヘリカル・アンテナ、または他のアンテナである。ワイヤレス・インターフェイス５７０は、ワイヤレス・トランシーバでもよい。
【００５３】
本明細書は、装置５００の特定のコンポーネントについて言及しているが、ここに記述および図示された実施例には、多くの修正および変更が可能であると考えられる。
【００５４】
プロセッサ・パイプライン２００は、一実施例においてワイヤレス装置内で使用される場合について図示されるが、これは本発明を制限するものではない。代替実施例では、プロセッサ・パイプライン２００は、ワイヤレスでない情報通信のために適合された、例えばサーバ、デスクトップ、または埋込み型装置のような非ワイヤレス装置内で使用されてもよい。
【００５５】
本発明の一定の機能がここに図示され記述されたが、当業者には多くの修正、代替、変更および均等が可能であろう。したがって、本発明の正しい精神に合致する限り、添付の請求項はかかる修正および変更をすべて包含することが意図される。
【図面の簡単な説明】
【００５６】
【図１】本発明の一実施例に従って、マルチスレッド・コンピュータ・システムにおいてスレッド・スイッチングを提供する方法を示すフローチャートである。
【図２】本発明の実施例に従ったプロセッサ・パイプラインを示すブロック図である。
【図３】本発明の実施例に従って非実行中のスレッドの実行をイネーブルにするための方法を示すフローチャートである
【図４】本発明の実施例に従ったワイヤレス装置の一部を示すブロック図である。
【図１】
2007507805.tif 000003
【図２】
2007507805.tif 000004
【図３】
2007507805.tif 000005
【図４】
2007507805.tif 000006
【国際調査報告】
2007507805.tif 000007
2007507805.tif 000008