JP2007504541A - プロセッサ内での実行の計算スレッドを一時停止して割り当て解除するための統合されたメカニズム - Google Patents

プロセッサ内での実行の計算スレッドを一時停止して割り当て解除するための統合されたメカニズム Download PDF

Info

Publication number
JP2007504541A
JP2007504541A JP2006524961A JP2006524961A JP2007504541A JP 2007504541 A JP2007504541 A JP 2007504541A JP 2006524961 A JP2006524961 A JP 2006524961A JP 2006524961 A JP2006524961 A JP 2006524961A JP 2007504541 A JP2007504541 A JP 2007504541A
Authority
JP
Japan
Prior art keywords
thread
parameters
value
instruction
another
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.)
Pending
Application number
JP2006524961A
Other languages
English (en)
Inventor
キセル,ケビン
Original Assignee
ミップス テクノロジーズ インコーポレイテッド
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 ミップス テクノロジーズ インコーポレイテッド filed Critical ミップス テクノロジーズ インコーポレイテッド
Publication of JP2007504541A publication Critical patent/JP2007504541A/ja
Pending legal-status Critical Current

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/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/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4441Reducing the execution time required by the program code
    • G06F8/4442Reducing the number of cache misses; Data prefetching
    • 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, 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

Abstract

複数のプログラムスレッドをサポートして実行することができるプロセッサにおける処理用のメカニズムは、プログラムスレッドをスケジュールするためのパラメータ602と、プログラムスレッド内に配置されてパラメータへアクセスすることができる命令600とを含む。パラメータが第1の値に等しい場合に、命令は、プログラムスレッドによって発行されると、パラメータ内でコード化されている1つまたは複数の条件に従って、プログラムスレッドをスケジュール変更する。

Description

本出願は、
(1)2003年8月28日に出願された「Multithreading Application Specific Extension」という名称の米国仮特許出願第60/499,180号(弁理士整理番号P3865、発明者Kevin D.Kissell、速達便番号EV 315085819 US)、
(2)2003年9月12日に出願された「Multithreading Application Specific Extension to a Processor Architecture」という名称の米国仮特許出願第60/502,358号(弁理士整理番号0188.02US、発明者Kevin D.Kissell、速達便番号ER 456368993 US)、および
(3)2003年9月12日に出願された「Multithreading Application Specific Extension to a Processor Architecture」という名称の米国仮特許出願第60/502,359号(弁理士整理番号0188.03US、発明者Kevin D.Kissell、速達便番号ER 456369013 US)の恩恵について請求するものであり、これらそれぞれの米国仮特許出願については、その全体をすべての目的から参照によって本明細書に組み込む。
本出願は、2003年10月10日に出願された「Mechanisms for Assuring Quality of Service for Programs Executing on a Multithreaded Processor」という名称の同時係属の米国非仮出願第(番号はまだ受け取っていない)(弁理士整理番号3865.01、発明者Kevin D.Kissell、速達便番号EL 988990749 US)に関連し、この出願については、その全体をすべての目的から参照によって本明細書に組み込む。
本発明は、デジタルプロセッサ(たとえばマイクロプロセッサ、デジタルシグナルプロセッサ、マイクロコントローラなど)の分野におけるものであり、より詳細には、シングルプロセッサにおいて複数のスレッドの実行を管理することに関連する装置および方法に関する。
デジタルコンピューティングの領域において、演算能力の発展の歴史には、多くの分野における着実な進歩が含まれる。たとえば、プロセッサに対するデバイスの密度、演算の速度に影響を与える相互接続技術、より高速のクロック速度を許容して使用する能力、およびさらに多くの分野において、着実な進歩がもたらされている。全般的な演算能力に影響を与える別の分野は、並列処理の分野であり、この分野には、複数の別個のプロセッサによる並列演算以上のものが含まれる。
並列処理という概念には、複数の別個のプロセッサの間でタスクを分担する能力が含まれるが、シングルプロセッサで複数のプログラムを並行して実行するためのスキームも含まれる。このスキームは、一般にマルチスレッディングと呼ばれる。
マルチスレッディングという概念は、次のように説明される。プロセッサの演算頻度が高まるにつれて、コンピュータシステムの演算につきものの待ち時間を感じさせないようにすることが、ますます困難になる。所与のアプリケーションの命令の1%に関するデータキャッシュにおいて、ミスを犯すハイエンドのプロセッサは、外部RAMに対して50サイクルの待ち時間を有する場合、約50%の時間にわたって失速する可能性がある。キャッシュミスの間にプロセッサが失速しているときに、別のアプリケーションに向けられた命令を実行することができれば、プロセッサのパフォーマンスを改善することができ、効果的にメモリの待ち時間の一部または全体を感じさせないようにすることができる。たとえば図1Aは、キャッシュミスを経験して失速している単一の命令ストリーム101を示している。サポートするマシンは、一度に単一のスレッドまたはタスクを実行することしかできない。対照的に、図1Bは、ストリーム101が失速している間に、実行できる命令ストリーム102を示している。この場合、サポートするマシンは、2つのスレッドを並行してサポートすることができ、これによってそのリソースをより効率よく利用することができる。
より一般的には、個々のコンピュータ命令は、固有のセマンティクスを有し、これによって、異なるクラスの命令は、所望の演算を実行するために異なるリソースを必要とする。レジスタのシフトが、ロード/ストアユニットのリソースを必要としないのと同様に、整数のロードでは、浮動小数点ユニットの論理またはレジスタを利用しない。単一の命令が、プロセッサのリソースのすべてを消費することはなく、また平均的な命令によって使用されるプロセッサリソース全体の比率は、より多くのパイプラインステージおよび並列機能ユニットがパフォーマンスの高い設計に追加されるにつれて低下する。
単一の順次処理型のプログラムでは、基本的にプロセッサのリソースを十分に効率よく活用できない場合、プロセッサは、プログラムを実行する複数の並行するスレッドの間で、それらのリソースの一部を共有できるべきであるという考えから、マルチスレッディングが大いに行われている。結果としては、必ずしもいずれかの特定のプログラムがより速く実行されるようにはならず、実際には、いくつかのマルチスレッディングスキームによって、プログラムを実行する単一のスレッドのパフォーマンスは実質的に低下するが、これによって、並行する命令ストリームの集合全体は、より短い時間で、および/またはより少ない数のプロセッサで実行することができる。この概念は、図2Aおよび図2Bに示されており、この図2Aおよび図2Bは、シングルスレッドプロセッサ210およびデュアルスレッドプロセッサ250をそれぞれ示している。プロセッサ210は、単一のスレッド212をサポートし、これは、ロード/ストアユニット214を利用して示されている。キャッシュ216にアクセスしている間にミスが発生した場合、行方不明のデータが検索されるまで、プロセッサ210は(図1Aに従って)失速することになる。このプロセスの間、乗算/除算ユニット218は、休止して十分に活用されないままとなる。しかしプロセッサ250は、2つのスレッド、すなわち212および262をサポートする。したがって、スレッド212が失速した場合、プロセッサ250は、スレッド262および乗算/除算ユニット218を並行して利用することができ、これによって、(図1Bに従って)そのリソースをよりよく利用することができる。
しかしシングルプロセッサのマルチスレッディングは、改善されたマルチタスクのスループットを上回る利点を提供することができる。プログラムスレッドを重要なイベントに結び付けることによって、イベントへの応答時間を短縮することができ、スレッドレベルの並列性は、原則として、単一のアプリケーションプログラム内で利用することができる。
複数の多様なマルチスレッディングが提案されている。それらの1つが、インターリーブドマルチスレッディングであり、これは、発行されるそれぞれの命令ごとに、1つのスレッドから別のスレッドへ切り替える時分割マルチプレックス(TDM)(time−division multiplexed)スキームである。このスキームは、スケジューリングにおいて一定の「公平性」を課すが、スレッドに対するスロットの発行を静的に割り当てる実装形態は、一般に単一のプログラムスレッドのパフォーマンスを制限する。動的なインターリービングは、この問題を改善するが、実施するには、かえって複雑である。
別のマルチスレッディングスキームが、ブロックドマルチスレッディングであり、このスキームは、キャッシュミスやリプレイトラップなど、何らかの指定されたブロッキングイベントによって、たとえばそのスレッドが一時停止されて、別のスレッドがアクティブ化されるまで、単一のプログラムスレッドから連続した命令を発行する。ブロックドマルチスレッディングは、スレッドを変更する頻度が低いため、その実装形態は、簡略化することができる。その一方で、ブロッキングは、スレッドのスケジューリングにおける「公平性」が低い。単一のスレッドが、幸運にもそのデータのすべてをキャッシュ内で見つけるのに十分である場合、長時間にわたってプロセッサを独占することがある。ブロックドマルチスレッディングの要素とインターリーブドマルチスレッディングの要素を組み合わせた複合型のスケジューリングスキームも構築され、研究されている。
さらに別の形態のマルチスレッディングが、同時マルチスレッディングであり、これは、スーパースケーラプロセッサで実施されるスキームである。同時マルチスレッディングでは、別々のスレッドからの命令を、並行して発行することができる。たとえばスーパースケーラ縮小命令セットコンピュータ(RISC)(reduced instruction set computer)が、サイクルごとに最大2つの命令を発行し、同時マルチスレッド化されたスーパースケーラパイプラインが、2つのスレッドのどちらかからサイクルごとに最大2つの命令を発行すると仮定する。依存状態や失速によって、単一のプログラムスレッドではプロセッサを十分に活用できなかったこれらのサイクルが、別のスレッド用の命令を発行することによって満たされる。
同時マルチスレッディングは、スーパースケーラパイプラインにおいて失われた効率性を回復するためのこのように非常に強力な技術である。これはまた、所与のサイクルで複数のスレッドをアクティブにすることができ、メモリアクセス保護の実装形態が複雑になることなどのため、実装する上では、おそらく間違いなく最も複雑なマルチスレッディングシステムである。おそらくは注目に値することだが、所与の作業負荷に関して、中央処理ユニット(CPU)(central processing unit)のオペレーションを完全にパイプライン化できればできるほど、マルチスレッディングを実装することに対して効率面で見込まれる利得は小さくなる。
マルチスレッディングとマルチプロセッシングは、密接に関連している。実際に、その違いは、程度の違いにすぎないと言える。マルチプロセッサは、メモリおよび/または接続性のみを共有するが、マルチスレッド化されたプロセッサは、メモリおよび/または接続性を共有し、命令のフェッチおよび発行論理、ならびに場合によってはその他のプロセッサリソースも共有する。単一のマルチスレッド化されたプロセッサでは、さまざまなスレッドが、発行スロットおよびその他のリソースを求めて競合し、これによって並列性が制限される。いくつかのマルチスレッド化されたプログラミングモデルおよびアーキテクチャモデルでは、新しいスレッドは、十分に並列に実行するために、別個のプロセッサに割り当てられることを前提とする。
本出願の提出時に利用可能であった、現況技術のマルチスレッディングソリューションに伴う複数の顕著な問題が存在する。これらの1つが、リアルタイムのスレッドの扱いである。通常、リアルタイムのマルチメディアアルゴリズムは、サービス品質(QoS)(quality−of−service)および応答時間を確保するために、専用のプロセッサ/DSPで実行され、複数のスレッドの混合した中に含まれてマルチスレッディングスキーム内で共有されることはない。これは、リアルタイムのソフトウェアが、タイムリーな形で実行されることを容易には保証できないためである。
この点において明らかに必要とされているのは、1つまたは複数のリアルタイムのスレッドまたは仮想プロセッサが、命令と命令の間に指定の間隔を保ちつつ、マルチスレッド化されたプロセッサ内に指定の割合の命令発行スロットを保証され、これによって計算帯域幅および応答時間をうまく規定できるようにする、スキームおよびメカニズムである。このようなメカニズムが利用可能ならば、厳格なQoS要件を伴うスレッドを、マルチスレッディングの混合の中に含めることができる。さらに、このようなシステムにおける(DSP関連のスレッドなどの)リアルタイムのスレッドは、割り込みを受けることを何らかの形で免れることができ、実行時間の変動の重大な要因が取り除かれる。この種のテクノロジーは、消費者向けマルチメディアアプリケーションにおいて、別々のRISCコアとDSPコアを使用する代わりに、DSPによって強化されたRISCプロセッサおよびコアを受け入れる上で決定的に重要となる可能性が高い。
本出願の出願時における、現況技術のマルチスレッディングスキームに伴う別の顕著な問題は、プロセッサ内でアクティブなスレッドを作成および破棄することにある。相対的にきめ細かいマルチスレッディングをサポートするには、プログラムを実行する並列のスレッドが、可能な最小限のオーバーヘッドで、かつ少なくとも通常の場合はオペレーティングシステムの介入を必要とすることなく、作成および破棄されることが望ましい。この点において明らかに必要とされているのは、ある種のFORK(スレッドの作成)命令およびJOIN(スレッドの終了)命令である。スレッドが何らかのリソースによってブロックされるまで、スケジューリングポリシーがスレッドを実行させる状況において、リソースによるブロックのないスレッドが、それにもかかわらずプロセッサを他の何らかのスレッドに明け渡す必要がある場合に、マルチスレッド化されたプロセッサに関する別の問題が存在する。この点において明らかに必要とされているのは、明確なPAUSEまたはYIELD命令である。
本発明の原則としての目的は、最小限のオーバーヘッドで、スレッドを作成および破棄することができるきめ細かいマルチスレッディングのための堅固なシステムを提供することである。
この目的に従って、本発明の好ましい一実施形態では、複数のプログラムスレッドをサポートして実行することができるプロセッサにおいて、プログラムスレッドをスケジュールするためのパラメータと、プログラムスレッド内に配置されてパラメータへアクセスすることができる命令とを含む、処理用のメカニズムが提供される。パラメータが第1の値に等しい場合に、命令は、パラメータ内でコード化されている1つまたは複数の条件に従ってプログラムスレッドをスケジュール変更する。このメカニズムの好ましい一実施形態では、パラメータは、データストレージデバイス内に保持される。また好ましい一実施形態では、パラメータが第2の値に等しく、その第2の値が第1の値とは異なる場合に、命令は、プログラムスレッドを割り当て解除する。いくつかの実施形態では、第2の値はゼロである。
いくつかの実施形態では、パラメータが第2の値に等しく、その第2の値が第1の値とは異なる場合に、命令は、プログラムスレッドを無条件にスケジュール変更する。またいくつかの実施形態では、第2の値は奇数値である。他のいくつかの実施形態では、第2の値はマイナス1である。
いくつかの実施形態では、1つまたは複数の条件のうちの1つの条件は、1つの条件が満たされるまで、実行を別のスレッドに譲っているプログラムスレッドに関連付けられている。またいくつかの実施形態では、1つの条件は、パラメータ内のビットベクトルまたはビットフィールドのうちの1つにおいてコード化されている。またいくつかの実施形態では、プログラムスレッドがスケジュール変更される状況において、そのプログラムスレッドの実行は、命令に続くスレッド内の場所で再開する。さらに他の実施形態では、パラメータが第3の値に等しく、その第3の値が第1の値および第2の値とは異なる場合に、命令は、プログラムスレッドを無条件にスケジュール変更する。
このメカニズムのいくつかの実施形態では、1つまたは複数の条件のうちの1つの条件は、ハードウェアの割り込みである。またいくつかの実施形態では、1つまたは複数の条件のうちの1つの条件は、ソフトウェアの割り込みである。多くの実施形態では、プログラムスレッドがスケジュール変更される状況において、そのプログラムスレッドの実行は、命令に続くスレッド内の場所で再開する。
本発明の別の態様では、複数のプログラムスレッドをサポートして実行することができるプロセッサにおいて、実行をスケジュール変更するか、またはスレッドによってそれ自体を割り当て解除する方法が提供され、この方法は、(a)スレッドがスケジュール変更される際またはスケジュール変更されない際に基づく1つまたは複数の条件に関連付けられている1つまたは複数のパラメータをコード化しているデータストレージデバイス内のレコードの一部に、アクセスする命令を発行するステップと、(b)レコードのその一部の中の1つまたは複数のパラメータによるスケジュール変更のための条件に従うか、またはスレッドを割り当て解除するステップとを含む。好ましい一実施形態では、レコードは、汎用レジスタ(GPR)(general purpose register)内に存在する。また好ましい一実施形態では、パラメータのうちの1つは、スケジュール変更されるのではなく割り当て解除されるスレッドに関連付けられている。いくつかの実施形態では、割り当て解除されるスレッドに関連付けられているパラメータは、ゼロの値である。
この方法のいくつかの実施形態では、パラメータのうちの1つは、スケジューリングのために再びキューに入れられるスレッドに関連付けられている。またいくつかの実施形態では、パラメータは任意の奇数値である。いくつかの実施形態では、パラメータは、2の補数のマイナス1の値である。いくつかの実施形態では、パラメータのうちの1つは、特定の条件が満たされるまで、実行を別のスレッドに譲っているスレッドに関連付けられている。他の実施形態では、パラメータは、レコード内のビットベクトルあるいは1つまたは複数の値フィールドのうちの1つにおいてコード化されている。
さらにこの方法の多くの実施形態では、スレッドが命令を発行してスケジュール変更される状況において、そのスレッドの実行は、1つまたは複数の条件が満たされた際に、スレッドが発行した命令に続くスレッド命令ストリーム内の場所で再開する。いくつかの実施形態では、パラメータのうちの1つは、スケジュール変更されるのではなく割り当て解除されるスレッドに関連付けられており、パラメータのうちの別の1つは、スケジューリングのために再びキューに入れられるスレッドに関連付けられている。他の実施形態では、パラメータのうちの1つは、スケジュール変更されるのではなく割り当て解除されるスレッドに関連付けられており、パラメータのうちの別の1つは、特定の条件が満たされるまで、実行を別のスレッドに譲ることに関連付けられている。さらに他の実施形態では、パラメータのうちの1つは、スケジュール変更のために再びキューに入れられるスレッドに関連付けられており、パラメータのうちの別の1つは、特定の条件が満たされるまで、実行を別のスレッドに譲ることに関連付けられている。さらに他の実施形態では、パラメータのうちの1つは、スケジュール変更されるのではなく割り当て解除されるスレッドに関連付けられており、パラメータのうちの別の1つは、スケジューリングのために再びキューに入れられるスレッドに関連付けられており、パラメータのうちの別の1つは、特定の条件が満たされるまで、実行を別のスレッドに譲ることに関連付けられている。
本発明の別の態様では、複数のソフトウェアエンティティをサポートして実行するためのデジタルプロセッサが提供され、このデジタルプロセッサは、スレッドがいったん実行を別のスレッドに譲った後に、スケジュール変更される際またはスケジュール変更されない際に基づく1つまたは複数の条件に関連付けられている1つまたは複数のパラメータをコード化しているデータストレージデバイス内のレコードの一部を含む。
このプロセッサのいくつかの好ましい実施形態では、レコードの一部は、汎用レジスタ(GPR)(general purpose register)内に存在する。他のいくつかの好ましい実施形態では、パラメータのうちの1つは、スケジュール変更されるのではなく割り当て解除されるスレッドに関連付けられている。さらに他の好ましい実施形態では、割り当て解除されるスレッドに関連付けられているパラメータは、ゼロの値である。
このプロセッサの他の実施形態では、パラメータのうちの1つは、スケジューリングのために再びキューに入れられるスレッドに関連付けられている。他の実施形態では、パラメータは任意の奇数値である。さらに他の実施形態では、パラメータは、2の補数のマイナス1の値である。さらに他の実施形態では、パラメータのうちの1つは、特定の条件が満たされるまで、実行を別のスレッドに譲っているスレッドに関連付けられている。場合によっては、パラメータは、レコード内のビットベクトルあるいは1つまたは複数の値フィールドのうちの1つにおいてコード化することができる。
このプロセッサの他のいくつかの実施形態では、パラメータのうちの1つは、スケジュール変更されるのではなく割り当て解除されるスレッドに関連付けられており、パラメータのうちの別の1つは、スケジューリングのために再びキューに入れられるスレッドに関連付けられている。さらに他の実施形態では、パラメータのうちの1つは、スケジュール変更されるのではなく割り当て解除されるスレッドに関連付けられており、パラメータのうちの別の1つは、特定の条件が満たされるまで、実行を別のスレッドに譲ることに関連付けられている。さらに他の実施形態では、パラメータのうちの1つは、スケジュール変更のために再びキューに入れられるスレッドに関連付けられており、パラメータのうちの別の1つは、特定の条件が満たされるまで、実行を別のスレッドに譲ることに関連付けられている。
さらに他のいくつかの実施形態では、パラメータのうちの1つは、スケジュール変更されるのではなく割り当て解除されるスレッドに関連付けられており、パラメータのうちの別の1つは、スケジューリングのために再びキューに入れられるスレッドに関連付けられており、パラメータのうちの別の1つは、特定の条件が満たされるまで、実行を別のスレッドに譲ることに関連付けられている。
本発明のさらに別の態様では、複数のプログラムスレッドをサポートして実行することができる処理システムが提供され、この処理システムは、デジタルプロセッサと、スレッドがスケジュール変更される際またはスケジュール変更されない際に基づく1つまたは複数の条件に関連付けられている1つまたは複数のパラメータをコード化しているデータストレージデバイス内のレコードの一部と、スレッドをスケジュール変更および割り当て解除するための命令を含む命令セットとを含む。命令は、スレッドによって発行されると、レコードの1つまたは複数のパラメータにアクセスし、処理システムは、レコードのその一部の1つまたは複数のパラメータに従って、発行スレッドをスケジュール変更または割り当て解除するための1つまたは複数の条件に従う。
この処理システムのいくつかの好ましい実施形態では、レコードは、汎用レジスタ(GPR)(general purpose register)内に存在する。またいくつかの好ましい実施形態では、パラメータのうちの1つは、スケジュール変更されるのではなく割り当て解除されるスレッドに関連付けられている。いくつかの実施形態では、割り当て解除されるスレッドに関連付けられているパラメータは、ゼロの値である。他のいくつかの実施形態では、パラメータのうちの1つは、スケジューリングのために再びキューに入れられるスレッドに関連付けられている。いくつかの実施形態では、スケジュール変更のためのパラメータは、任意の奇数値である。他のいくつかの実施形態では、スケジュール変更のためのパラメータは、2の補数のマイナス1の値である。
このシステムのいくつかの実施形態では、パラメータのうちの1つは、特定の条件が満たされるまで、実行を別のスレッドに譲っているスレッドに関連付けられている。またいくつかの実施形態では、パラメータは、レコード内のビットベクトルあるいは1つまたは複数の値フィールドのうちの1つにおいてコード化されている。多くの実施形態では、スレッドが命令を発行して条件付きでスケジュール変更される状況において、そのスレッドの実行は、1つまたは複数の条件が満たされた際に、命令に続くスレッド命令ストリーム内の場所で再開する。
この処理システムのいくつかの実施形態では、パラメータのうちの1つは、スケジュール変更されるのではなく割り当て解除されるスレッドに関連付けられており、パラメータのうちの別の1つは、スケジューリングのために再びキューに入れられるスレッドに関連付けられている。またいくつかの実施形態では、パラメータのうちの1つは、スケジュール変更されるのではなく割り当て解除されるスレッドに関連付けられており、パラメータのうちの別の1つは、特定の条件が満たされるまで、実行を別のスレッドに譲ることに関連付けられている。
他のいくつかの実施形態では、パラメータのうちの1つは、スケジュール変更のために再びキューに入れられるスレッドに関連付けられており、パラメータのうちの別の1つは、特定の条件が満たされるまで、実行を別のスレッドに譲ることに関連付けられている。さらに他の実施形態では、パラメータのうちの1つは、スケジュール変更されるのではなく割り当て解除されるスレッドに関連付けられており、パラメータのうちの別の1つは、スケジューリングのために再びキューに入れられるスレッドに関連付けられており、パラメータのうちの別の1つは、特定の条件が満たされるまで、実行を別のスレッドに譲ることに関連付けられている。
本発明のさらに別の態様では、複数のソフトウェアスレッドのうちの個々のスレッドを1つのデジタルプロセッサで実行するための1つの命令セットからの複数の命令を、その上に書き込まれているデジタルストレージメディアが提供され、その命令セットは1つの命令を含み、この1つの命令によって発行スレッドは実行を譲り、データストレージデバイス内のレコードの一部の中のパラメータにアクセスし、割り当て解除またはスケジュール変更のための条件が、そのパラメータに関連付けられており、レコードのその一部のパラメータによる割り当て解除またはスケジュール変更のための条件が準拠される。
このメディアのいくつかの実施形態では、レコードは、汎用レジスタ(GPR)(general purpose register)内に存在する。またこのメディアのいくつかの実施形態では、パラメータのうちの1つは、スケジュール変更されるのではなく割り当て解除されるスレッドに関連付けられている。いくつかの実施形態では、割り当て解除されるスレッドに関連付けられているパラメータは、ゼロの値である。他のいくつかの実施形態では、パラメータのうちの1つは、スケジューリングのために再びキューに入れられるスレッドに関連付けられている。さらに他の実施形態では、パラメータは、任意の奇数値である。さらに他の実施形態では、パラメータは、2の補数のマイナス1の値である。
このメディアのさらに他の実施形態では、パラメータのうちの1つは、特定の条件が満たされるまで、実行を別のスレッドに譲っているスレッドに関連付けられている。さらに他の実施形態では、パラメータは、レコード内のビットベクトルあるいは1つまたは複数の値フィールドのうちの1つにおいてコード化されている。さらに他の実施形態では、パラメータのうちの1つは、スケジュール変更されるのではなく割り当て解除されるスレッドに関連付けられており、パラメータのうちの別の1つは、スケジューリングのために再びキューに入れられるスレッドに関連付けられている。さらに他の実施形態では、パラメータのうちの1つは、スケジュール変更されるのではなく割り当て解除されるスレッドに関連付けられており、パラメータのうちの別の1つは、特定の条件が満たされるまで、実行を別のスレッドに譲ることに関連付けられている。
このメカニズムのいくつかの実施形態では、パラメータのうちの1つは、スケジュール変更のために再びキューに入れられるスレッドに関連付けられており、パラメータのうちの別の1つは、特定の条件が満たされるまで、実行を別のスレッドに譲ることに関連付けられている。また、このデジタルストレージメディアのいくつかの実施形態では、パラメータのうちの1つは、スケジュール変更されるのではなく割り当て解除されるスレッドに関連付けられており、パラメータのうちの別の1つは、スケジューリングのために再びキューに入れられるスレッドに関連付けられており、パラメータのうちの別の1つは、特定の条件が満たされるまで、実行を別のスレッドに譲ることに関連付けられている。
このメカニズムのいくつかの実施形態では、命令はYIELD命令である。またこのメカニズムのいくつかの実施形態では、レコードの一部は、ビットベクトルを含む。このメカニズムのその他の実施形態では、レコードの一部は、1つまたは複数のマルチビットフィールドを含む。
この方法のいくつかの実施形態では、命令はYIELD命令であり、またこの処理システムのいくつかの実施形態では、命令はYIELD命令である。
このデジタルストレージメディアのいくつかの実施形態では、命令はYIELD命令である。
本発明のさらに別の態様では、伝送メディアにおいて具体化されるコンピュータデータ信号が提供され、このコンピュータデータ信号は、複数のプログラムスレッドをサポートして実行することができるプロセッサを記述するためのコンピュータ可読プログラムコードを含み、このコンピュータ可読プログラムコードは、スレッドをスケジュール変更および割り当て解除するためのメカニズムを含み、そのコンピュータ可読プログラムコードは、スレッドがスケジュール変更される際またはスケジュール変更されない際に基づく1つまたは複数の条件に関連付けられている1つまたは複数のパラメータをコード化しているデータストレージデバイス内のレコードの一部を記述するための第1のプログラムコードセグメントと、レコードの1つまたは複数のパラメータにアクセスすることができる命令を記述するための第2のプログラムコードセグメントとを含み、その命令は、スレッドによって発行されると、レコード内の1つまたは複数の値にアクセスし、その1つまたは複数の値によるスケジュール変更のための1つまたは複数の条件に従うか、またはスレッドを割り当て解除する。
別の態様では、複数のプログラムスレッドをサポートすることができるプロセッサにおいて、スレッドのスケジューリングに関連するパラメータにアクセスする命令を実行するステップであって、その命令がプログラムスレッド内に含まれる、アクセスする命令を実行するステップと、パラメータが第1の値に等しい場合に、命令に応答してプログラムスレッドを割り当て解除するステップとを含む、方法が提供される。この方法のいくつかの実施形態では、第1の値はゼロである。またこの方法のいくつかの実施形態では、パラメータが第2の値に等しい場合に、命令に応答してプログラムスレッドの実行を一時停止するステップがさらに存在し、その第2の値が第1の値とは異なる。この方法のいくつかの実施形態では、第2の値は、プログラムスレッドの実行に必要とされる条件が満たされていないことを示す。
この方法の他のいくつかの実施形態では、条件は、パラメータ内でビットベクトルまたは値フィールドとしてコード化されている。他のいくつかの実施形態では、パラメータが第3の値に等しい場合に、命令に応答してプログラムスレッドをスケジュール変更するステップを含み、その第3の値が、第1の値および第2の値とは異なる。他の実施形態では、第3の値はマイナス1である。さらに他の実施形態では、第3の値は奇数値である。
本発明のさらに別の態様では、複数のプログラムスレッドをサポートすることができるプロセッサにおいて、スレッドのスケジューリングに関連するパラメータにアクセスする命令を実行するステップであって、その命令がプログラムスレッド内に含まれる、アクセスする命令を実行するステップと、パラメータが第1の値に等しい場合に、命令に応答してプログラムスレッドの実行を一時停止するステップとを含む方法が提供される。この方法のいくつかの実施形態では、パラメータが第2の値に等しい場合に、命令に応答してプログラムスレッドをスケジュール変更するステップがさらに存在し、その第2の値が第1の値とは異なる。
さらに別の態様では、複数のプログラムスレッドをサポートすることができるプロセッサにおいて、スレッドのスケジューリングに関連するパラメータにアクセスする命令を実行するステップであって、その命令がプログラムスレッド内に含まれる、アクセスする命令を実行するステップと、パラメータが第1の値に等しい場合に、命令に応答してプログラムスレッドをスケジュール変更するステップとを含む、方法が提供される。この方法のいくつかの実施形態では、パラメータが第2の値に等しい場合に、命令に応答してプログラムスレッドを割り当て解除するステップがさらに存在し、その第2の値が第1の値とは異なる。
可能な限り詳細に後述する本発明の実施形態において、スレッドを作成および破棄するためのオーバーヘッドを最小限に抑えた、きめ細かいマルチスレッディングのための真に堅固なシステムが、初めて提供される。
本発明の好ましい一実施形態では、プロセッサアーキテクチャは、互換プロセッサ上でマルチスレッディングを使用可能にする機能、関数、および命令を備える命令セットを含む。本発明は、いずれの特定のプロセッサアーキテクチャおよび命令セットにも限定されるものではないが、典型的な例として、よく知られているMIPSのアーキテクチャ、命令セット、およびプロセッサテクノロジー(「MIPSテクノロジー」と総称する)を参照し、可能な限り詳細に後述する本発明の実施形態については、MIPSテクノロジーを伴うコンテキストにおいて説明する。MIPSテクノロジーに関するさらなる情報(以降で参照する資料を含む)は、(カリフォルニア州マウンテンビューにある)MIPS Technologies,Inc.およびウェブ上のwww.mips.com(同社のウェブサイト)から入手することができる。
本明細書で使用される「プロセッサ」および「デジタルプロセッサ」という用語は、ハードウェア(たとえばアプリケーション固有のシリコンチップ、FPGAなど)、ソフトウェア(たとえばハードウェア記述言語、C、C+など)、あるいはそれらのその他の任意のインスタンス化(または組合せ)において、プログラム可能な任意のデバイス(たとえばマイクロプロセッサ、マイクロコントローラ、デジタル信号プロセッサ、中央処理装置、プロセッサコアなど)を意味することを意図している。
本明細書で使用される「スレッド」および「プログラムスレッド」という用語は、同じ意味を有する。
概要
本発明の実施形態における記述のための「スレッドコンテキスト」とは、プロセッサ内での命令ストリームの実行の状態を記述するのに必要なプロセッサの状態の集合である。この状態は、通常、プロセッサレジスタの内容に反映される。たとえば業界標準のMIPS32 Instruction Set Architectureおよび/またはMIPS64 Instruction Set Architecture(「MIPS Processor」)と互換性のあるプロセッサでは、スレッドコンテキストは、汎用レジスタ(GPR)(general purpose register)、高低乗算器結果レジスタ、プログラムカウンタ(PC)の何らかの代表、および何らかの関連付けられた特権を有するシステム制御状態のセットを含む。システム制御状態は、通常はコプロセッサゼロ「CP0」(coprocessor zero)と呼ばれるMIPS Processorのその部分に保持され、大きくはシステム制御レジスタおよび(使用する場合は)「TLB」(Translation Lookaside Buffer)によって維持される。対照的に「プロセッサコンテキスト」とは、プロセッサの状態のさらに大きな集合であり、少なくとも1つのスレッドコンテキストを含む。再びMIPS Processorを参照すると、この場合のプロセッサコンテキストは、(上述のように)少なくとも1つのスレッドコンテキスト、ならびによく知られているMIPS32またはMIPS64の「PRA」(Privileged Resource Architecture)のインスタンス化を記述するのに必要なCP0およびシステムの状態を含むであろう(要するに、PRAは、命令セットアーキテクチャが動作する上で基づく環境および機能のセットである。PRAは、オペレーティングシステムが、プロセッサのリソース、たとえば仮想メモリ、キャッシュ、例外、およびユーザコンテキストを管理するのに必要なメカニズムを提供する)。
本発明の一実施形態によれば、命令セットアーキテクチャおよびPRAに対する「Multithreading ASE」(multithreading application−specific extension)によって、2つの別個の、しかし互いに排他的ではないマルチスレッディング機能を、所与のプロセッサ内に含むことができる。最初に、シングルプロセッサは、いくつかのプロセッサコンテキストを含むことができ、そのそれぞれは、そのプロセッサ内の特定のリソースを共有すること、および命令セットアーキテクチャをサポートすることを通じて、独立した処理要素として機能することができる。本明細書では、これらの独立した処理要素を、「VPE」(Virtual Processing Element)と呼ぶ。ソフトウェアにとって、N VPEプロセッサは、まさにNウェイ「SMP」(symmetric multiprocessor)のように見える。これによって、既存のSMP対応のオペレーティングシステムは、VPEのセットを管理することができ、このVPEのセットは、プロセッサの実行ユニットを透過的に共有する。
図3は、レジスタの状態0 302およびシステムコプロセッサの状態0 304を含む、第1のVPE(「VPE0」)をサポートするシングルプロセッサ301を用いて、この機能を示している。プロセッサ301は、レジスタの状態1 306およびシステムコプロセッサの状態1 308を含む、第2のVPE(「VPE1」)もサポートする。VPE0およびVPE1によって共有されるプロセッサ301のそれらの部分は、フェッチ、デコード、および実行のパイプライン、ならびにキャッシュ310を含む。SMP対応のオペレーティングシステム320は、プロセッサ301で作動しているものとして示されており、VPE0とVPE1の双方をサポートする。ソフトウェアプロセスA322およびプロセスC326は、あたかも2つの異なるプロセッサで作動しているかのように、VPE0とVPE1それぞれで別々に作動しているものとして示されている。プロセスB324はキューに入れられ、VPE0またはVPE1で作動することができる。
Multithreading ASEによって可能となる第2の機能は、それぞれのプロセッサまたはVPEが、ベースアーキテクチャによって必要とされる単一のスレッドコンテキストだけでなく、複数のスレッドコンテキストを含むこともできるという点である。マルチスレッド化されたVPEは、明確なオペレーティングシステムのサポートを必要とするが、このようなサポートがあれば、軽量できめ細かいマルチスレッド化されたプログラミングモデルが提供され、このプログラミングモデルでは、通常の場合は、オペレーティングシステムが介入することなくスレッドを作成および破棄することができ、また外的な条件(たとえば、イベントなど)に応答して、割り込みの待ち時間をゼロにして、システムサービススレッドをスケジュールすることができる。
図4は、(3つのスレッド422をサポートする)レジスタの状態402、404、および406と、システムコプロセッサの状態408とを含む、単一のVPEをサポートするプロセッサ401を用いて、この第2の機能を示している。図3とは異なり、このインスタンスでは、3つのスレッドが、単一のアプリケーションアドレス空間内にあり、単一のVPE上でCP0リソース(ならびにハードウェアリソース)を共有している。専用のマルチスレッディングオペレーティングシステム420も示されている。この例では、マルチスレッド化されたVPEは、ブロードバンドネットワーク450からのパケットを処理しており、ここではパケットのロードは、FIFO452のバンク(そのそれぞれは、マルチスレッド化されたVPEのI/Oメモリスペース内における個別のアドレスを有する)にわたって散らばっている。制御アプリケーションプログラムは、自分が有する提供用のFIFOと同じ数のスレッドを作成し、それぞれのスレッドを、それらのFIFOを読み取るタイトループに配置する。
スレッドコンテキストは、4つの状態のうちの1つの状態の下に置くことができる。その状態は、フリーな状態、アクティブ化された状態、停止された状態、またはワイヤードの状態とすることができる。フリーなスレッドコンテキストは、有効なコンテンツを持たず、命令を発行するようにスケジュールすることはできない。アクティブ化されたスレッドコンテキストは、実装されているポリシーに従って、そのプログラムカウンタから命令をフェッチおよび発行するようにスケジュールされる。停止されたスレッドコンテキストは、有効なコンテンツを有しているが、命令をフェッチおよび発行することを禁止されている。ワイヤードのスレッドコンテキストは、Shadow Registerストレージとして使用するように割り当てられており、つまりこれは、例外ハンドラの排他的な使用に備えて保持され、レジスタコンテキストをそのハンドラ内に保存して復元するオーバーヘッドを回避する。フリーなスレッドコンテキストは、アクティブ化されておらず、停止もされておらず、ワイヤードでもないスレッドコンテキストである。アクティブ化されたスレッドコンテキストのみが、スケジュールすることができる。フリーなスレッドコンテキストのみが、新しいスレッドを作成するために割り当てることができる。
連携するスレッドのきめ細かい同期化を可能にするために、「ITC」(inter−thread communication)メモリスペースが、空いている/満たされたビットのセマンティクスと共に仮想メモリ内に作成され、これによってスレッドは、他のスレッドによってデータが生成または消費されるまで、ロードまたはストア上でブロックすることができる。スレッドの作成/破棄、および同期化の機能は、一般的な場合ではオペレーティングシステムの介入なしに機能するが、操作されるリソースは、オペレーティングシステムを介してすべて仮想化することができる。これによって、VPE上に存在するスレッドコンテキストよりも多くの仮想スレッドと共に、またスレッドを移行してマルチプロセッサシステム内の負荷のバランスをとるために、マルチスレッド化されたプログラムを実行することができる。
スレッドは、その実行におけるいずれかの特定の時点において、特定のVPE上の特定のスレッドコンテキストに結合される。スレッドコンテキストのそのVPEのセットへのインデックスは、その時点における一意の識別子を提供する。しかしコンテキストの切り替えおよび移行によって、単一の順次処理型の実行のスレッドが、たとえば一連の異なるVPE上に、一連の異なるスレッドインデックスを有するようにすることができる。
スレッドコンテキストの動的結合、TLBエントリ、および同一のプロセッサ上の複数のVPEにとってのその他のリソースは、特別なプロセッサリセット構成状態において実行される。それぞれのVPEは、そのリセットベクトルを、まさにそれが別個のプロセッサであるかのように入力する。
マルチスレッド化された実行および例外モデル
Multithreading ASEは、並列のスレッドおよびVPEの実行に対して、何らかの特定の実装またはスケジューリングモデルを強制するものではない。スケジューリングは、ラウンドロビン方式、任意のきめ細かさでタイムスライスされた方式、または同時方式とすることができる。しかし1つの実装によって、ブロックされているスレッドが、いずれかの共有されているプロセッサリソースを独占して、ハードウェアのデッドロックが引き起こされることがあってはならない。
MIPS Processorでは、単一のVPE上で実行されている複数のスレッドは、すべて、同じシステムコプロセッサ(CP0)、同じTLB、および同じ仮想アドレス空間を共有する。それぞれのスレッドは、命令のデコードおよびメモリへのアクセスの目的で、独立したKernel/Supeivisor/Userの状態を有する。例外が取られる場合は、その例外を取っているスレッド以外のすべてのスレッドが停止されて、StatusワードのEXLおよびERLビットがクリアされるまで保留されるか、またはEJTAG Debug例外の場合は、Debug状態が終了する。Statusワードは、ステータスレジスタ内に存在し、ステータスレジスタはCP0内に配置されている。EXLおよびERLビットならびにEJTAGデバッグ例外に関する詳細については、MIPS32(商標)Architecture for Programmers Volume III:The MIPS32(商標)Privileged Resource Architecture,Rev.2.00,MIPS Technologies,Inc.(2003)、およびMIPS64(商標)Architecture for Programmers Volume III:The MIPS64(商標)Privileged Resource Architecture,Rev.2.00,MIPS Technologies,Inc.(2003)という2つの資料で見ることができ、それら資料それぞれは、MIPS Technologies,Inc.から入手することができ、その全体をすべての目的から参照によって本明細書に組み込む。
TLBミスなど、命令ストリームの実行によって引き起こされる同期例外、および浮動小数点例外のための例外ハンドラは、問題の命令ストリームを実行しているスレッドによって実行される。割り込みなど、マスクされていない非同期例外が、VPEに対して生じる場合、どのスレッドが例外ハンドラを実行するかは、実装形態による。
例外ハンドラを実行するために、シャドウレジスタセットが使用される場合でも、それぞれの例外は、スレッドコンテキストに関連付けられている。この関連付けられているスレッドコンテキストは、例外ハンドラによって実行されるすべてのRDPGPRおよびWRPGPR命令のターゲットである。(シャドウレジスタにアクセスするために使用される)RDPGPRおよびWRPGPR命令に関する詳細については、MIPS32(商標)Architecture for Programmers Volume II:The MIPS32(商標)Instruction Set,Rev.2.00,MIPS Technologies,Inc.(2003)、およびMIPS64(商標)Architecture for Programmers Volume II:The MIPS64(商標)Instruction Set,Rev.2.00,MIPS Technologies,Inc.(2003)という2つの資料で見ることができ、それら資料それぞれは、MIPS Technologies,Inc.から入手することができ、その全体をすべての目的から参照によって本明細書に組み込む。
Multithreading ASEは、2つの例外条件を含む。これら例外条件の1つめが、Thread Unavailable条件であり、ここではスレッドの割り当て要求を満たすことができない。例外条件の2つめが、Thread Underflow条件であり、ここではスレッドの終了および割り当て解除によって、VPE上に割り当てられているスレッドはなくなる。これらの2つの例外条件は、単一の新しいThread例外にマップされる。これらは、例外が生じた際に、CP0レジスタビットセットに基づいて区別することができる。
命令
好ましい実施形態におけるMultithreading ASEは、7つの命令を含む。FORKおよびYIELD命令は、スレッドの割り当て、割り当て解除、およびスケジューリングを制御し、実装され使用可能にされると、すべての実行モードにおいて利用することができる。MFTRおよびMTTR命令は、特権を有するシステムソフトウェアがスレッドの状態を管理するために利用できる、システムコプロセッサ(Cop0)命令である。新しいEMT命令および新しいDMT命令は、VPEのマルチスレッド化されたオペレーションを使用可能にしたり使用不可能にしたりするための特権を有するCop0命令である。最後に、新しいECONF命令は、特別なプロセッサ構成状態を終了させてそのプロセッサを再び初期化するための特権を有するCop0命令である。
FORK−新しいスレッドを割り当て、スケジュールする
FORK命令によって、フリーなスレッドコンテキストが割り当てられ、アクティブ化される。そのフォーマット500が、図5に示されている。FORK命令は、フィールド502(rs)および504(rt)において識別されるGPRから2つのオペランド値を取る。GPR rsのコンテンツは、新しいスレッドのためのフェッチおよび実行を開始するアドレスとして使用される。GPR rtのコンテンツは、新しいスレッドのGPRへと渡される値である。宛先GPRは、CP0のThreadConfigレジスタのForkTargetフィールドの値によって決定され、これについては図21に示されており、また以降で説明する。新しいスレッドのKernel/Supervisor/User状態は、FORKを行っているスレッドの状態に設定される。フォークのために利用できるフリーなスレッドコンテキストがない場合は、FORK命令に対してThread Exceptionが生じる。
YIELD−スレッドをスケジュール解除し、条件付きで割り当て解除する
YIELD命令によって、現在のスレッドがスケジュール解除される。そのフォーマット600が図6に示されており、図32は、本発明の一実施形態におけるシステムのYIELD命令の関数をアサートするオペレーションを示すフローチャート3200である。
YIELD命令は、たとえばフィールド602(rs)において識別されるGPRから単一のオペランド値を取る。好ましい一実施形態では、GPRが使用されるが、代替実施形態では、オペランド値は、システムにとってアクセス可能な本質的にすべてのデータストレージデバイス(たとえばGPR以外のレジスタ、メモリなど)に保存して、そこから検索することができる。一実施形態では、GPR rsのコンテンツは、発行スレッドをスケジュール変更すべき状況を記述する記述子とみなすことができる。図32のステップ3202に示されているように、GPR rsのコンテンツがゼロである場合(すなわち、オペランドの値がゼロである場合)、スレッドはまったくスケジュール変更されず、代わりにステップ3204に示されているように割り当て解除され(すなわち終了されるか、またはその他の形でさらなる実行を永久に停止され)、その関連付けられているスレッドコンテキストストレージ(すなわち、状態を保存するために上で識別されたレジスタ)は、その他の何らかのスレッドによって発行される後続のFORK命令による割り当て用として解放される。GPR rsの最下位ビットが、設定された場合(すなわち、rs=1の場合)、スレッドは、図32のステップ3206に示されているように直ちにスケジュール変更可能であり、取って代わるその他の実行可能なスレッドがなければ、すぐに実行を継続することができる。この実施形態では、GPR rsのコンテンツは、図7のテーブル700によって記述されている15ビットのクォリファイヤマスク(すなわち、さまざまな条件をコード化しているビットベクトル)として、その他の形で処理される。
テーブル700を参照すると、GPR rsのビット15から10は、プロセッサに提示されるハードウェアの割り込み信号を示しており、ビット9および8は、プロセッサによって生成されるソフトウェアの割り込みを示しており、ビット7および6は、MIPSアーキテクチャのLoad LinkedおよびStore Conditional同期化プリミティブのオペレーションを示しており、ビット5から2は、プロセッサに提示される割り込み以外の外部信号を示している。
GPR rsのコンテンツが偶数であり(すなわち、ビットゼロが設定されておらず)、GPR rsのクォリファイヤマスク内のその他の任意のビットが設定されている場合(ステップ3208)、スレッドは、少なくとも1つの対応する条件が満たされるまで、一時停止される。もしもこのような状況が発生した場合、スレッドは、スケジュール変更され(ステップ3210)、YIELDに続く命令において実行を再開する。この使用可能化は、CP0.Status.IMn割り込みマスクビットによる影響を受けず、これによって、この実施形態では、(図7に示されている)ビット15〜10および5〜2によってコード化されている最大で10個までの外部条件(たとえばイベントなど)、および(図7に示されている)ビット9〜6によってコード化されている4つのソフトウェア条件を使用して、プロセッサが例外を取る必要をまったく伴わずに、独立したスレッドが外部信号に応答できるようにすることができる。この特定の例では、ハードウェアの割り込み信号が6つ、ハードウェアの割り込み以外の信号が4つ、およびソフトウェアの割り込み信号が2つ、ソフトウェアの割り込み以外の信号が2つ、ならびに専用のスケジュール変更関数(すなわちrs)が1つ存在し、合計で15個の条件がある(CP0.Status.iMn割り込みマスクビットは、MIPS Processorに対する8つの基本的な割り込み入力を任意選択でマスクできる、CP0 Statusレジスタ内の8ビットのセットである。IMビットが設定されている場合、関連付けられている割り込み入力は、アサートされたときに、プロセッサに対して例外を引き起こすことはない)。
EIC割り込みモードでは、直交表示のベクトルを表すのではなく、IP2〜IP7ビットは、優先順位の最も高い使用可能にされている割り込みの値をコード化する。したがって、プロセッサがEIC割り込みモードを使用しているときに、YIELD命令内でIP2〜IP7に関連付けられているGPR rsビットは、もはや特定の外部イベントでスレッドのスケジューリングを再び使用可能にするために使用することはできない。EICモードでは、システムに依存する外部イベント表示(すなわち、この実施形態のGPR rsのビット5から2)のみを、YIELDクォリファイヤとして使用すべきである。EIC割り込みモードおよびIP2〜IP7ビットについては、その全体を特定して本明細書に組み込んだ、前述のMIPS32(商標)Architecture for Programmers Volume III:The MIPS32(商標)Privileged Resource Architecture、およびMIPS64(商標)Architecture for Programmers Volume III:The MIPS64(商標)Privileged Resource Architectureという資料でさらに説明されている。
YIELDを実行した結果、プロセッサまたはVPE上で最後に割り当てられたスレッドが割り当て解除された場合、CP0のThreadStatusレジスタ内のアンダーフロー表示(図18に示されており、以降で説明する)を伴うThread Exceptionが、YIELD命令上に生じる。
前述の実施形態は、YIELD命令のGPR rs内に含まれているオペランドを、スレッドスケジューリングパラメータとして利用する。この場合、パラメータは、直交表示の15ビットベクトルとして処理される(図7を参照すると、ビット1および15が確保されているため、この好ましい実施形態においてコード化されている条件は、15個しかない)。この実施形態は、また、パラメータを指定の値として処理する(すなわち、所与のスレッドを割り当て解除すべきかどうかを判断するために処理する。図32のステップ3202を参照されたい)。しかし、このようなパラメータの特性は、命令の別の実施形態に適合するように変更することができる。たとえば、スレッドをすぐにスケジュール変更できるかどうかを判断するために、最下位ビット(すなわちrs)に依存するのではなく、パラメータ自体の値(たとえば、2の補数形態でのマイナス1{−1}の値)を使用して、スレッドをすぐにスケジュール変更すべきかどうか(すなわち、スケジューリングのために再びキューに入れるべきかどうか)を判断することができる。
この命令のその他の実施形態は、このようなスレッドスケジューリングパラメータを、1つまたは複数のマルチビット値フィールドを含むものとして処理することができ、これによってスレッドは、大きな(たとえば32ビット以上の)イベントネームスペースからの単一のイベント上でYIELDを行うように指定することができる。このような実施形態では、少なくとも、その1つのターゲットイベントに関連付けられているビットは、その従属するYIELD命令によってアクセスされることになる。もちろん、特定の実施形態での要望に応じて、さらなるビットフィールドを、(さらなるイベントに関連付けられている)命令に渡すことができる。
YIELD命令のその他の実施形態は、その命令によってアクセスされるスレッドスケジューリングパラメータ内における前述のビットベクトルおよび値フィールドの組合せ、または(たとえば)特定の実装形態のニーズを満たすための、アプリケーションに固有のその他の修正および機能強化を含むことができる。YIELD命令の代替実施形態は、上述のようなスレッドスケジューリングパラメータに従来の任意の方法で、たとえば(図6に示されているように)GPRから、(メモリを含む)その他の任意のデータストレージデバイスから、そして命令自体の中にある直接の値として、アクセスすることができる。
MFTR−スレッドレジスタから移動する
MFTR命令は、1つのスレッド上で実行されているオペレーティングシステムが、別のスレッドコンテキストにアクセスできるようにする特権を有する(Cop0)命令である。そのフォーマット800が、図8に示されている。
アクセスされるスレッドコンテキストは、CP0のThreadControlレジスタのAlternateThreadフィールドの値によって決定され、これについては図16に示されており、以降で説明する。選択されたスレッドコンテキスト内で読み取られるレジスタは、フィールド802において識別されるrtオペランドレジスタ内の値と、フィールド804および806においてそれぞれ提供され、図9として含まれているテーブル900に従って解釈されるMFTR命令のuおよびselビットとによって決定される。結果として生じる値は、フィールド808において識別されるターゲットレジスタrdに書き込まれる。
MTTR−スレッドレジスタへ移動する
MTTR命令は、MFTRの逆である。これは、レジスタの値を、現在のスレッドのスレッドコンテキストから別のスレッドコンテキスト内のレジスタへコピーする、特権を有するCop0命令である。そのフォーマット1000が、図10に示されている。
アクセスされるスレッドコンテキストは、CP0のThreadControlレジスタのAlternateThreadフィールドの値によって決定され、これについては図16に示されており、以降で説明する。選択されたスレッドコンテキスト内で書き込まれるレジスタは、フィールド1002において識別されるrdオペランドレジスタ内の値と、フィールド1004および1006においてそれぞれ提供され、図11において提供されているテーブル1100(コード化は、MFTRの場合と同様)に従って解釈される、MTTR命令のuおよびselビットとによって決定される。フィールド1008において識別されるレジスタrt内の値が、選択されたレジスタにコピーされる。
EMT−マルチスレッディングを使用可能にする
EMT命令は、CP0のThreadControlレジスタのTEビットを設定することによって、複数のスレッドの並行実行を使用可能にする特権を有するCop0命令であり、これについては図16に示されており、以降で説明する。そのフォーマット1200が、図12に示されている。EMTの実行に先立つTE(Threads Enabled)ビット値を含む、ThreadControlレジスタの値が、レジスタrt内に返される。
DMT−マルチスレッディングを使用不可能にする
DMT命令は、CP0のThreadControlレジスタのTEビットをクリアすることによって、複数のスレッドの並行実行を禁止する特権を有するCop0命令であり、これについては図16に示されており、以降で説明する。そのフォーマット1300が、図13に示されている。
DMT命令を発行しているスレッド以外のすべてのスレッドが、さらなる命令のフェッチおよび実行を禁止される。これは、任意のスレッドごとに停止している状態からは独立している。DMTの実行に先立つTE(Threads Enabled)ビット値を含む、ThreadControlレジスタの値が、レジスタrt内に返される。
ECONF−プロセッサの構成を終了する
ECONF命令は、VPEの構成の終了を知らせてマルチVPEの実行を使用可能にする特権を有するCop0命令である。そのフォーマット1400が、図14に示されている。
ECONFが実行されると、(以降で説明する)Config3レジスタのVPCビットがクリアされ、この同じレジスタのMVPビットが、その現在の値で読み取り専用になり、そのECONFを実行しているVPEを含むプロセッサのすべてのVPEが、Reset例外を取る。
特権を有するリソース
図15のテーブル1500は、Multithreading ASEに関連するシステムコプロセッサの特権を有するリソースの概要をまとめたものである。特段の記載がない限り、以降で特定される新規のコプロセッサゼロ(CP0)レジスタおよび修正されたコプロセッサゼロ(CP0)レジスタは、コプロセッサゼロの(すなわちMIPS Processorの)従来のシステム制御レジスタのようにアクセスする(すなわち、書き込みおよび読み取りを行う)ことができる。
新規の特権を有するリソース
(A)ThreadControl Register(Coprocessor 0 Register 7,Select 1)
ThreadControlレジスタは、VPEごとにシステムコプロセッサの一部としてインスタンス化される。そのレイアウト1600が、図16に示されている。ThreadControl Registerフィールドは、図17のテーブル1700に従って定義される。
(B)ThreadStatus Register(Coprocessor 0 Register 12,Select 4)
ThreadStatusレジスタは、スレッドコンテキストごとにインスタンス化される。それぞれのスレッドは、自分自身のThreadStatusのコピーを見て、特権を有するコードは、MFTRおよびMTTR命令を介して他のスレッドのThreadStatusのコピーにアクセスすることができる。そのレイアウト1800が、図18に示されている。ThreadStatus Registerフィールドは、図19のテーブル1900において定義される。
アクティブ化されているスレッドのHaltedビットに1を書き込むと、アクティブ化されているスレッドは、命令をフェッチすることをやめて、その内部のリスタートPCを、発行される次の命令に設定する。アクティブ化されているスレッドのHaltedビットに0を書き込むことによって、そのスレッドをスケジュールして、内部のリスタートPCアドレスからフェッチおよび実行することができる。アクティブ化されていないスレッドのActivatedビットまたはHaltedビットのいずれかに1を書き込むと、そのスレッドが、FORK命令によって割り当てられてアクティブ化されることが防止される。
(C)ThreadContext Register(Coprocessor 0 Register 4,Select 1)
ThreadContextレジスタ2000は、図20に示されているように、プロセッサGPRと同じ幅でスレッドごとにインスタンス化される。これは純粋に、スレッド固有のストレージ、たとえばスレッドコンテキスト保存エリアへのポインタとしてオペレーティングシステムによって使用できる、ソフトウェア読み取り/書き込みレジスタである。
(D)ThreadConfig Register(Coprocessor 0 Register 6,Select 1)
ThreadConfigレジスタは、プロセッサまたはVPEごとにインスタンス化される。そのレイアウト2100が、図21に示されている。ThreadConfigレジスタフィールドは、図22のテーブル2200において定義される。
ThreadConfigのWiredThreadフィールドによって、VPE上で利用可能なスレッドコンテキストのセットを、Shadow Registerセットと並列実行スレッドとの間で区切ることができる。WiredThreadレジスタの値より小さいインデックスを有するスレッドコンテキストは、シャドウレジスタセットとして使用することができる。
(E)ThreadSchedule Register(Coprocessor 0 Register 6,Select 2)
ThreadScheduleレジスタは任意選択のものだが、実装する際は、スレッドごとに実装することが好ましい。そのレイアウト2300が、図23に示されている。
Schedule Vector(図示されているように、好ましい実施形態では32ビット幅である)は、関連付けられているスレッドに関する要求されている発行帯域幅のスケジューリングを記述したものである。この実施形態では、それぞれのビットは、プロセッサまたはVPEの発行帯域幅の1/32を表し、それぞれのビットロケーションは、32スロットのスケジューリングサイクルにおける個別のスロットを表す。
スレッドのThreadScheduleレジスタ内の1つのビットが設定されると、そのスレッドは、関連付けられているプロセッサまたはVPE上で可能な32の連続した発行のすべてに関して、対応する1つの発行スロットを使用できる保証を有する。あるスレッドのThreadScheduleレジスタ内の1つのビットに1を書き込む際に、同じプロセッサまたはVPE上の他の何らかのスレッドが、既に同じThreadScheduleビットセットを有している場合、結果としてThread例外が生じる。32ビットが、ThreadScheduleレジスタの好ましい幅であるが、この幅は、他の実施形態において使用する場合には変更される(すなわち増やされる、または減らされる)可能性があると予想される。
(F)VPESchedule Register(Coprocessor 0 Register 6,Select 3)
VPEScheduleレジスタは任意選択のものであり、VPEごとにインスタンス化することが好ましい。これは、Config3レジスタのMVPビットが、設定された場合にのみ、書き込み可能となる(図29を参照されたい)。そのフォーマット2400が、図24に示されている。
Schedule Vector(図示されているように、好ましい実施形態では32ビット幅である)は、関連付けられているVPEに関する要求されている発行帯域幅のスケジューリングを記述したものである。この実施形態では、それぞれのビットは、マルチVPEプロセッサの全発行帯域幅の1/32を表し、それぞれのビットロケーションは、32スロットのスケジューリングサイクルにおける個別のスロットを表す。
VPEのVPEScheduleレジスタ内の1つのビットが設定されると、そのスレッドは、プロセッサ上で可能な32の連続した発行のすべてに関して、対応する1つの発行スロットを使用できる保証を有する。あるVPEのVPEScheduleレジスタ内の1つのビットに1を書き込む際に、他の何らかのVPEが、既に同じVPEScheduleビットセットを有している場合、結果としてThread例外が生じる。
いずれのスレッドによっても具体的にスケジュールされていない発行スロットは、プロセッサのその時点でのデフォルトのスレッドスケジューリングポリシー(たとえばラウンドロビン方式など)に従って、任意の実行可能なVPE/スレッドに自由に割り当てることができる。
VPEScheduleレジスタおよびThreadScheduleレジスタは、発行帯域幅の割り当ての階層を作成する。VPEScheduleレジスタのセットは、VPEに対して、プロセッサまたはコアで利用可能な全体のうちの一部として帯域幅を割り当て、その一方でThreadScheduleレジスタは、スレッドに対して、それらのスレッドを含むVPEにとって利用可能なものの一部として帯域幅を割り当てる。
32ビットが、VPEScheduleレジスタの好ましい幅であるが、この幅は、他の実施形態において使用する場合には、変更される(すなわち増やされる、または減らされる)可能性があると予想される。
(G)Config4 Register(Coprocessor 0 Register 16,Select 4)
Config4 Registerは、プロセッサごとにインスタンス化される。これは、動的なマルチVPEプロセッサの構成に必要な構成情報を含む。プロセッサが、VPE構成状態(すなわち、Config3レジスタのVMCビットが設定されている状態)にない場合、M(継続)フィールド以外のすべてのフィールドの値は、実装形態によって変わり、予測できない可能性がある。そのレイアウト2500が、図25に示されている。Config4のレジスタフィールドは、図26のテーブル2600に示されているように定義される。いくつかの実施形態では、Config3レジスタ用のVMCビットが存在することができ、これは、それまで確保されていた/割り当てられていないビットとすることができる。
既存の特権を有するリソースアーキテクチャに対する修正
Multithreading ASEは、現在のMIPS32およびMIPS64のPRAのいくつかの要素を修正する。
(A)Status Register
StatusレジスタのCUビットは、マルチスレッド化された構成において、さらなる意味を持つようになっている。CUビットを設定するという動作は、コプロセッサコンテキストを、そのCUビットに関連付けられているスレッドに結合したいという要求である。コプロセッサコンテキストは、利用可能である場合には、スレッドに結合され、これによって、そのスレッドによって発行される命令は、コプロセッサに達することができ、CUビットは、そこに書き込まれている1の値を保持する。コプロセッサコンテキストがまったく利用できない場合、CUビットは、0として読み戻される。設定されているCUビットに0を書き込むと、関連付けられているすべてのコプロセッサが、割り当て解除される。
(B)Cause Register
図27に示されているように、Thread例外にとって必要とされる新規のCauseレジスタExcCode値がある。
(C)EntryLo Register
図28に示されているように、それまで確保されていたキャッシュ属性が、ITCインジケータとなる。
(D)Config3 Register
図29のテーブル2900に示されているように、Multithreading ASEの利用可能度および複数のスレッドコンテキストの利用可能度を表すために定義される、新規のConfig3レジスタフィールドがある。
(E)EBase
図30に示されているように、EBaseレジスタのそれまで確保されていたビット30が、VPEコンテキストごとのVPE禁止ビットとなる。
(F)SRSCtl
それまで事前に設定されていたHSSフィールドが、今度はThreadConfig WiredThreadフィールドの関数として作成される。
FORKを伴わないスレッドの割り当ておよび初期化
好ましい実施形態において、オペレーティングシステムがスレッドを「手動で」作成するためのプロシージャは、次のとおりである。
1.DMTを実行して、他のスレッドの実行および場合によってはFORKを停止する。
2.ThreadControlレジスタのAlternateThreadフィールドを、連続した値に設定し、MFTR命令を用いてThreadStatusレジスタを読み取ることによって、利用可能なThreadContextを識別する。フリーなスレッドは、そのThreadStatusレジスタセットのHaltedでもなくActivatedでもないビットを有することになる。
3.選択されたスレッドのThreadStatusレジスタのHaltedビットを設定して、それが別のスレッドによって割り当てられることを防止する。
4.EMT命令を実行して、マルチスレッディングを再び使用可能にする。
5.uフィールドを1に設定した状態でMTTR命令を使用して、所望のすべてのGPRを、選択されたスレッドコンテキストへコピーする。
6.uおよびselフィールドをゼロに設定し、rtフィールドを14(EPC)に設定した状態でMTTR命令を使用して、所望の実行開始アドレスをスレッドの内部のリスタートアドレスレジスタに書き込む。
7.MTTR命令を使用して、HaltedビットにゼロをActivatedビットに1を有する値を、選択されたThreadStatusレジスタに書き込む。
その結果、新たに割り当てられるスレッドが、スケジュール可能となる。プロシージャ中にEXLまたはERLが設定される場合には、それらが、マルチスレッド化された実行を暗に禁止するため、DMTを実行するステップ、新しいスレッドのHaltedビットを設定するステップ、およびEMTを実行するステップは、省略することができる。
YIELDを伴わないスレッドの終了および割り当て解除
好ましい実施形態において、オペレーティングシステムが現在のスレッドを終了するためのプロシージャは、次のとおりである。
1.OSが、Thread Underflow状態でのThread例外に対するサポートをまったく有していない場合には、MFTR命令を用いてThreadStatusレジスタのセットをスキャンして、プロセッサ上に別の実行可能なスレッドがあることを確認するか、またはそうでない場合には、プログラムにエラーを知らせる。
2.重要なGPRレジスタの値をすべてメモリに書き込む。
3.Status/ThreadStatusレジスタ内でKernelモードを設定する。
4.EXL/ERLをクリアして、現在のスレッドが特権を有する状態に留まっている間に、他のスレッドをスケジュールできるようにする。
5.標準的なMTC0命令を使用して、ThreadStatusレジスタのHaltedビットとActivatedビットの双方にゼロを有する値を書き込む。
通常のプロシージャは、この方法でスレッドが自分自身を終了させることである。特権を有するモードで実行中の1つのスレッドが、MTTR命令を使用して別のスレッドを終了させることもできるが、これを行うと、OSにとっては、どのスレッドコンテキストを割り当て解除すべきか、そしてどの時点でそのスレッドの計算の状態が安定するかを判断するという、さらなる問題が提示されることになる。
Inter−Thread Communication Storage
ITC(Inter−Thread Communication)Storageは、きめ細かいマルチスレッディングのためのLoad−Linked/Store−Conditionalの同期化に対する代替方法を提供する任意選択の機能である。これは、ロードおよびストアによって操作されるため、命令セットアーキテクチャには見えないが、Privileged Resource Architectureには見え、相当なマイクロアーキテクチャ上のサポートを必要とする。
そのTLBエントリが、ITCストレージとしてタグ付けされている仮想メモリページへの参照は、特別な属性を有するストアに帰着する。それぞれのページは、1〜128の64ビットのストレージロケーションのセットをマップし、そのそれぞれは、それに関連付けられているEmpty/Fullビットの状態を有し、標準的なロード命令およびストア命令を使用して、4つの方法のうちの1つでアクセスすることができる。アクセスモードは、図31のテーブル3100に示されているように、作成された仮想アドレスの最下位(および変換されていない)ビット内でコード化される。
それぞれのストレージロケーションは、Cの構造によって、次のように記述することができる。
struct {
uint64 ef_sync_location;
uint64 force_ef_location;
uint64 bypass_location;
uint64 ef_state;
} ITC_location;
ここでは、4つのロケーションすべてが、基礎をなすストレージの同じ64ビットを参照する。このストレージへの参照は、アクセスごとに基づき同じEmpty/Fullプロトコルを義務付けられている状態で、64ビット未満のアクセスタイプ(たとえばLW、LH、LB)を有することができる。
EmptyビットとFullビットは、別個のものであり、これによって、FIFOなどの切り離されているマルチエントリデータバッファを、ITCストレージへマップすることができる。
ITCストレージは、{bypass_location,ef_state}のペアを一般的なストレージへコピーすること、および一般的なストレージからコピーすることによって、保存および復元することができる。bypass_locationの64ビットを保持しなければならないが、厳密に言えば、ef_stateの最下位ビットのみを操作する必要がある。マルチエントリデータバッファの場合、それぞれのロケーションをEmptyまで読み取って、コピー上でそのバッファを空にしなければならない。
4Kページごとのロケーションの数、およびVPEごとのITCページの数は、VPEまたはプロセッサの構成パラメータである。ITCストレージの「物理アドレス空間」は、マルチプロセッサシステム内のすべてのVPEおよびプロセッサにわたってグローバルにすることができ、これによってスレッドは、自分が実行中であるVPEとは別のVPE上のロケーションで同期化することができる。グローバルITCストレージアドレスは、それぞれのVPEのEBaseレジスタのCPUNumフィールドから得られる。CPUNumの10ビットは、ITCストレージアドレスの上位10ビットに対応する。ユニプロセッサアプリケーション用に設計されているプロセッサまたはコアは、物理インターフェースをITCストレージにエクスポートする必要はなく、プロセッサ内部のリソースとして処理することができる。
マルチVPEプロセッサ
コアまたはプロセッサは、機能ユニットなどの複数のVPE共有リソースを実装することができる。それぞれのVPEは、MIPS32またはMIPS64命令、および特権を有するリソースアーキテクチャの自分自身のインスタンス化を見る。それぞれは、自分自身のレジスタファイルまたはスレッドコンテキストアレイを見て、それぞれは、自分自身のCP0システムコプロセッサおよび自分自身のTLB状態を見る。同じプロセッサ上の2つのVPEは、2CPUのキャッシュコヒーレントなSMPマルチプロセッサからのソフトウェアにとっては見分けがつかない。
1つのプロセッサ上のそれぞれのVPEは、CP0のEbaseレジスタのCPUNumフィールド内の別個の値を見る。
スレッドコンテキストおよびTLBストレージならびにコプロセッサなどの、プロセッサアーキテクチャ上のリソースは、ハードワイヤードの構成においてVPEに結合することもでき、あるいは必要な構成機能をサポートするプロセッサ内で動的に構成することもできる。
リセットおよび仮想プロセッサの構成
MIPS32およびMIPS64のPRAとの下位互換性を有するには、設定によって変更できるようにマルチスレッド化された//マルチVPEプロセッサは、リセット時に、健全なデフォルトのスレッド/VPE構成を有していなければならない。これは、単一のスレッドコンテキストを有する単一のVPEの構成である場合が典型的だが、必ずしもその必要はない。リセット時に、Config3レジスタのMVPビットをサンプリングして、動的なVPE構成が可能かどうかを判断することができる。この機能が、レガシーソフトウェアによるものとして無視される場合、プロセッサは、デフォルト構成用の指定に従って動作することになる。
MVPビットが設定されている場合、Config3レジスタのVPC(Virtual Processor Configuration)ビットを、ソフトウェアによって設定することができる。これによって、プロセッサは構成状態に置かれ、この構成状態では、Config4レジスタのコンテンツを読み取って、利用可能なVPEコンテキスト、スレッドコンテキスト、TLBエントリ、およびコプロセッサ、ならびに書き込み可能になるConfigレジスタの通常は読み取り専用である特定の「事前に設定されている」フィールドの数を、決定することができる。構成状態の命令ストリームに制約を課すことができ、たとえばそれらの命令ストリームに対しては、キャッシュされたまたはTLBにマップされたメモリアドレスを使用することを禁止することができる。
構成状態では、設定によって変更できるVPEの総数は、Config4レジスタのPVPEフィールド内にコード化される。それぞれのVPEは、そのインデックスをEBaseレジスタのCPUNumフィールドに書き込むことによって選択することができる。選択されたVPEに関しては、場合によっては、下記のレジスタフィールドに書き込みを行うことによって、これらのレジスタフィールドを設定することができる。
Config1.MMU_Size
Config1.FP
Config1.MX
Config1.C2
Config3.NThreads
Config3.NITC_Pages
Config3.NITC_PLocs
Config3.MVP
VPESchedule
上記の構成パラメータのすべてが、設定によって変更できる必要はない。たとえばVPEごとのITCページが設定によって変更できる場合でも、ページごとのITCロケーションの数は固定することができ、あるいは双方のパラメータを固定することもでき、FPUを、VPEごとに事前に割り当ててハードワイヤードとすることなどもできる。
コプロセッサは、別々のユニットとしてVPEに割り当てられる。コプロセッサがマルチスレッド化される程度は、コプロセッサ固有のコントロールレジスタおよびステータスレジスタを介して表示および制御すべきである。
VPEは、EBaseレジスタ内のVPI禁止ビットをクリアすることによって、構成後の実行用に使用可能にされる。
構成状態は、ECONF命令を発行することによって終了する。この命令によって、禁止されていないVPEはすべて、リセット例外を取り、並行して実行を開始する。構成中に、Config3レジスタのMVPビットがクリアされ、ECONF命令によってゼロにラッチされた場合、VPCビットはもはや設定できず、プロセッサ構成は、次のプロセッサリセットまで効果的に凍結される。MVPが設定されたままの場合、オペレーティングシステムは、再びVPCビットを設定することによって、再び構成モードに入ることができる。再び構成モードに入るプロセッサの実行中のVPEに対する結果は、予測できない可能性がある。
マルチスレッド化されたプロセッサのためのQuality of Serviceのスケジューリング
本明細書はここまで、マルチスレッディングを提供するためのMIPS互換システム用のアプリケーション固有の拡張について説明している。前述のように、説明されている機能およびメカニズムは、MIPSシステム以外にも適用できるため、説明されているMIPSの実装形態は、典型的なものであり、限定的なものではない。
背景技術の部分で見た問題、すなわちリアルタイムのスレッドおよびリアルタイムに近いスレッドのためのマルチスレッディングにおける特別なサービスの問題については、ThreadScheduleレジスタ(図23)およびVPEScheduleレジスタ(図24)を対象とした前述の考察において簡単に触れた。本明細書の残りでは、この問題をさらに詳しく扱い、特にスレッドレベルの「QoS」(quality−of−service)を扱うための特定の拡張について教示する。
背景
マルチメディアデータを移送するために設計されたネットワークによって、1つのネットワーク内のさまざまなデータストリームに、さまざまなポリシーを適用する必要性を記述するための「QoS」(Quality−of−Service)という概念が発展した。たとえば音声接続は、相対的に帯域幅を必要としないが、数十ミリ秒を超える遅延を許容することはできない。ブロードバンドマルチメディアネットワーク内のQoSプロトコルは、時間が決定的に重要となる転送に際して、タイムリーな配信を確保するのに必要な特別な取り扱いおよび優先順位はいかなるものでも得られるように保証する。
単一のチップ上で「RISC」と「DSP」のプログラム実行を組み合わせることに対して提起される主な反論の1つは、DSPコードの厳密なリアルタイムの実行を保証することが、組み合わされたマルチタスク環境ではよりいっそう困難であるということである。したがってDSPアプリケーションは、プロセッサの帯域幅に関する「QoS」の要件を有しているとみなすことができる。
マルチスレッディングおよびQoS
複数のスレッドから命令の発行をスケジュールする複数の方法が存在する。インターリーブドスケジューラは、サイクルごとにスレッドを変更し、その一方でブロッキングスケジューラは、キャッシュミスやその他の重大な失速が生じるたびにスレッドを変更する。詳細に前述したMultithreading ASEは、特定のスレッドスケジューリングメカニズムまたはポリシーへのいかなる依存状態も回避しようと試みる、明確にマルチスレッド化されたプロセッサのためのフレームワークを提供する。しかしスケジューリングポリシーは、さまざまなスレッドの実行に関して、どんなQoS保証が可能かということに対して大きな影響を与える可能性がある。
DSPによって拡張されたRISCは、リアルタイムのDSPコードに関してQoS保証を作成できる場合には、より著しく有用となる。このようなプロセッサ上にマルチスレッディングを実装し、それによってDSPコードが、別個のスレッド内で、ことによると別個の仮想プロセッサ内でさえ実行され、また保証されたQoSを提供するために、DSPスレッドのハードウェアスケジューリングをプログラム可能に決定することができれば、DSPによって強化されたRISCのパラダイムを受け入れることに対する主要な障壁が、論理的に取り除かれる。
QoSスレッドスケジューリングアルゴリズム
Quality of Serviceのスレッドスケジューリングは、プログラマやシステム設計者が、コードの特定の断片の実行時間に関して自信を持って予測するステートメントを作成できるようにする、スケジューリングメカニズムおよびポリシーのセットとして大まかに定義することができる。これらのステートメントは一般に、「このコードは、Nmax以下かつNmin以上のサイクルで実行される」というフォームを有する。多くの場合、実際に重要な数値はNmaxの数値のみであるが、いくつかのアプリケーションでは、スケジュールに先んじて実行することも問題となり、したがってNminも重要となる可能性がある。NminとNmaxとの間の範囲が小さければ小さいほど、それだけシステム全体の動作を正確に予測することができる。
単純な優先順位スキーム
マルチスレッド化された発行スケジューリングに一定レベルのQoSを提供するために提案されてきた1つの単純なモデルは、単一の指定されたリアルタイムのスレッドに最高の優先順位を単純に割り当てることであり、これによってそのスレッドは、実行可能である場合、常に選択されて命令を発行することになる。これによって、Nminの最小値が提供されることになり、指定されたスレッドに関して可能なNmaxの最小値が提供されるように見えるかもしれないが、いくつかの悪影響がある。
第1に、このようなスキームでは単一のスレッドしか、いかなるQoS保証も有することができない。このアルゴリズムは、指定されたリアルタイムのスレッド以外のスレッド内における任意のコードに関するNmaxが、事実上無限になることを意味する。第2に、指定されたスレッド内のコードブロックに関するNminの数値を最小化しつつも、このモデルには例外を考慮に入れなければならない。指定されたスレッドによって例外が取られる場合、Nmaxの値はより複雑になり、場合によっては確定することが不可能になる。指定されたスレッド以外のスレッドによって例外が取られる場合、Nmaxは、指定されたスレッド内のコードのために厳密に限界を設定されるが、プロセッサの割り込み応答時間は無限になる。
このような優先順位スキームは、場合によっては役に立つかもしれないし、ハードウェアの実装においてはいくつかの実用面での利点があるかもしれないが、全般的なQoSスケジューリングソリューションを提供するものではない。
確保ベースのスキーム
代替となる、より強力で、ユニークなスレッドスケジューリングモデルは、発行スロットを確保することに基づく。このようなスキームにおけるハードウェアスケジューリングメカニズムは、1つまたは複数のスレッドに、それぞれM個の連続した発行スロットのうちのN個を割り当てることができる。このようなスキームは、割り込みの自由な環境におけるリアルタイムのコード断片用の優先順位スキームほど低いNminの値を提供しないが、次のようなその他の長所を有する。
複数のスレッドが、保証されたQoSを有することができる。
割り込みが、最も高い優先順位を有するスレッド以外のスレッドに結合されている場合でも、割り込み待ち時間の上限を設定することができる。これによって、リアルタイムのコードブロックに関するNmaxの引き下げを潜在的に可能にすることができる。
確保方式のスケジューリングの1つの簡単な形式では、N個ごとの発行スロットをリアルタイムのスレッドに割り当てる。Nには1と2の中間の値がないため、これは、マルチスレッディング環境内におけるリアルタイムのスレッドが、プロセッサの発行スロットの最大でも50%しか得ることができないことを意味する。リアルタイムのタスクは、組み込まれたプロセッサの帯域幅の50%超を消費する可能性があるため、発行帯域幅のより柔軟な割り当てを可能にするスキームが、きわめて望ましい。
QoSを有する複合型のスレッドスケジューリング
上述のマルチスレッディングシステムは、意図的にスケジューリングポリシーについては中立であるが、複合型のスケジューリングモデルを可能にするように拡張することができる。このモデルでは、リアルタイムのスレッドには、スレッド発行スロットの一定割合の固定されたスケジューリングを与え、残りのスロットは、実装形態に応じたデフォルトのスケジューリングスキームによって割り当てることができる。
発行スロットへのスレッドの結合
プロセッサにおいては、命令は、連続して速いペースで発行される。マルチスレッディング環境では、所与の固定数のスロットの中でそれぞれのスレッドが発行するスロットの比例配分した数を述べることによって、混合状態の中でそれぞれのスレッドによって消費される帯域幅を定量化することができる。逆に本発明者は、スロットの固定数を任意に述べてから、1つの特定のスレッドに対する固定数のうちの一定数のスロットを確保しておくように、プロセッサに制約を課す手段を叙述することができると認識している。そしてリアルタイムのスレッドに対して保証される帯域幅の固定された分数を指定することができる。
スロットを、複数のリアルタイムのスレッドに比例配分して割り当てることができることは明らかであり、このスキームが機能する際のきめ細かさは、比例配分される対象となる発行スロットの固定数によって制約を受ける。たとえば32個のスロットを選択すると、任意の特定のスレッドには、帯域幅の1/32から32/32までを保証することができる。
そしておそらくは、固定された発行帯域幅をスレッドに割り当てるための最も一般的なモデルは、それぞれのスレッドを、そのスレッドに割り当てられている発行スロットの分数(たとえば1/2、4/5)の分子および分母を形成する、整数のペア{N,D}に関連付けることである。認められる整数の範囲が十分に大きい場合、このモデルは、スレッドの優先順位の割り当てをほとんど任意にきめ細かく調整することができるが、いくつかの重大な欠点がある。1つの問題としては、{{N,D},{N,D},...{N,D}}というペアの大きなセットを、1つの発行スケジュールへと変換するためのハードウェアロジックは、軽微なものとは言えず、スロットの100%超が割り当てられるエラーのケースを検知することは、必ずしも容易ではない。別の問題としては、このようなスキームによって、長期にわたり、1つのスレッドに発行スロットのN/Dが割り当てられることになる指定が可能だが、どの発行スロットが、より短いサブセットのコード断片よりも1つのスレッドに割り当てられることになるかに関する、あらゆるステートメントを作成できるようには必ずしもならない。
したがって本発明の好ましい実施形態では、リアルタイムの帯域幅のQoSが望まれるそれぞれのスレッドは、整数のペアの代わりに、そのスレッドに割り当てられるべきスケジューリングスロットを表すビットベクトルに関連付けられる。好ましい実施形態では、このベクトルは、システムソフトウェアにとっては、前述のThreadSchedule Register(図23)のコンテンツとして見ることができる。ThreadSchedule Registerは、32ビット幅のスケジューリング「マスク」を含むが、代替実施形態では、このマスク内のビット数をより多くしたり、あるいはより少なくしたりすることができる。32ビット幅のスレッドスケジューリングマスクによって、1つのスレッドに、プロセッサの発行帯域幅の1/32から32/32までを割り当てることができ、さらに特定の発行パターンを指定することもできる。32ビットのマスクの場合、0xaaaaaaaaという値は、1つおきのスロットをスレッドに割り当てる。0x0000ffffという値も、発行帯域幅の50%をスレッドに割り当てるが、16個の連続したスロットのブロックで割り当てを行う。0xeeeeeeeeという値をスレッドXに割り当て、0x01010101という値をスレッドYに割り当てると、4サイクルごとに3サイクル(32サイクルのうちの24サイクル)がスレッドXに与えられ、8サイクルごとに1サイクル(32サイクルのうちの4サイクル)がスレッドYに与えられ、32サイクルのグループごとの残りの4サイクルは、他の、場合によってはより決定性の低いハードウェアアルゴリズムによって他のスレッドに割り当てられるために残される。さらに、スレッドXは、4サイクルごとに3サイクルを有することになるということ、およびスレッドYには、連続する命令の間に8サイクルを超える間隔が生じることはないということがわかる。
この実施形態におけるスケジューリングの衝突は、いかなるビットも、複数のスレッドのThreadSchedule Register内に設定されるはずはないという点から、きわめて簡単に検知することができる。すなわち、ある特定のビットが1つのスレッドに対して設定された場合、そのビットは、発行マスクが割り当てられる他のすべてのスレッドに対してはゼロでなければならない。衝突は、このように比較的容易に検知される。
リアルタイムのスレッドに関する発行ロジックは、比較的簡単である。それぞれの発行機会は、32を法とするインデックスに関連付けられ、このインデックスは、準備ができているすべてのスレッドに送信することができ、それらのスレッドの多くとも1つが、関連付けられている発行スロットを割り当てられることになる。そのスロット上にヒットがある場合、関連付けられているスレッドは、その次の命令を発行する。そのスロットを所有するスレッドがない場合、プロセッサは、実行可能なリアルタイムではないスレッドを選択する。
32ビット未満のThreadSchedule Registerの実装形態であれば、スレッドごとのストレージおよびロジックのサイズは小さくなるが、スケジューリングの柔軟性も低下することになる。原理上は、このレジスタは、64ビットまで拡張することもでき、あるいは(MIPS Processorの場合、)MIPS32 CP0レジスタスペース内のインクリメントする選択値における一連のレジスタとして実装して、さらにいっそう長いスケジューリングベクトルを提供することさえできる。
スレッドに対する割り込みサービスの免除
前述のように、割り込みサービスによって、例外を取るスレッドの実行時間に相当な変動が生じることがある。したがって厳格なQoS保証を必要とするスレッドには、割り込みサービスを免除することが望ましい。これは、好ましい一実施形態において達成され、この実施形態は、スレッドごとに単一のビットを有し、オペレーティングシステムにとって見ることができ、生じたいかなる非同期例外も、免除されないスレッドがスケジュールされるまで保留する(すなわちThreadStatus RegisterのビットIXMT、図18および図19を参照されたい)。これによって、割り込みの待ち時間が増えるが、これは、ThreadSchedule Registerの値を選択することによって、上限を設定して制御できる程度である。割り込みハンドラの実行が、免除されているリアルタイムのQoSスレッドに割り当てられていない発行スロットの間でしか生じないのであれば、割り込みサービスは、そのようなリアルタイムのコードの実行時間に対して一次的な影響をまったく及ぼさない。
スレッドへの発行スロットの割り当てと、Virtual Processing Elementへの発行スロットの割り当て
可能な限り詳細に前述したMultithreading ASEは、スレッドリソースの階層的な割り当てについて記述し、ここでは複数のVPE(Virtual Processing Element)が、それぞれ複数のスレッドを含む。それぞれのVPEは、(MIPS Processor上で構成される場合には)CP0および特権を有するリソースアーキテクチャの1つの実装を有するため、1つのVPE上で実行されているオペレーティングシステムソフトウェア(「OS」)は、別のVPE上でどの発行スロットが要求されているかを直接把握して制御することはできない。したがって、それぞれのVPEの発行スロットネームスペースは、そのVPEに関連し、これは、発行スロットの割り当ての階層を意味する。
図34は、スレッドリソースのこの階層的な割り当てを示す、スケジューリング回路3400のブロック図である。Processor Scheduler3402(すなわちホストプロセッサの全体的なスケジューリングロジック)は、「Slot Select」信号3403を介して、ホストプロセッサ内のすべてのVPE内に配置されているすべてのVPEScheduleレジスタに、1つの発行スロット番号を伝達する。信号3403は、VPEScheduleレジスタ内の1つのビット位置に対応する(この実施形態では、32個の位置のうちの1つに対応することになる)。Scheduler3402は、このようなビット位置の全体にわたって信号3403をくり返し循環させ、それぞれの発行スロットが生じるたびにその位置をインクリメントし、最上位のビット位置(すなわち、この実施形態では31)に達すると、最下位の位置(すなわち0)にリセットする。
図34を参照すると、一例として、ビット位置1(すなわち「Slot 1」)が、信号3403を介して、ホストプロセッサ内のすべてのVPEScheduleレジスタ、すなわちレジスタ3414および3416に伝達されている。対応するビットが「設定されている」(すなわち、ロジック1を保持している)いずれかのVPEScheduleレジスタが、「VPE Issue Request」信号を用いて、この事実をプロセッサスケジューラに伝える。これに応答して、スケジューラは、「VPE Issue Grant」信号を用いて対象のVPEに現在の発行スロットを許可する。再び図34を参照すると、(VPE0の)VPEScheduleレジスタ3414は、ビット位置1を設定されており、したがってVPE Issue Request信号3415をProcessor Scheduler3402に送信し、Processor Scheduler3402は、VPE Issue Grant信号3405を用いて応答する。
1つのVPEは、発行を許可されると、そのVPEのレベルで同様のロジックを採用する。再び図34を参照すると、VPE Scheduler3412(すなわちVPE0 3406のスケジューリングロジック)は、信号3405に応答して、Slot Select信号3413を介して、そのVPE内に配置されているすべてのThreadScheduleレジスタに1つの発行スロット番号を提示する。これらのThreadScheduleレジスタはそれぞれ、対象のVPEによってサポートされているスレッドに関連付けられる。信号3413は、ThreadScheduleレジスタ内の1つのビット位置に対応する(この実施形態では、32個の位置のうちの1つに対応することになる)。Scheduler3412は、このようなビット位置の全体にわたって信号3413をくり返し循環させ、それぞれの発行スロットが生じるたびにその位置をインクリメントし、最上位のビット位置(すなわち、この実施形態では31)に達すると、最下位のビット位置(すなわち0)にリセットする。このスロット番号は、VPEScheduleレベルで使用されるスロット番号とは無関係である。
図34を参照すると、一例として、ビット位置0(すなわち「Slot 0」)が、信号3413で対象のVPE内のすべてのThreadScheduleレジスタ、すなわちレジスタ3418および3420に伝達されている。そのThreadScheduleレジスタの選択された位置に1つのビットが設定されているいずれかのスレッドが、その事実をVPEスケジューラに示し、そのスレッドが、現在の発行スロットを許可される。図34を参照すると、(Thread 0の)ThreadScheduleレジスタ3418は、ビット位置0を設定されており、したがってThread Issue Request信号3419をVPE Scheduler3412に送信し、VPE Scheduler3412は、Thread Issue Grant信号3417を用いて応答する(これによって、Thread 0に現在の発行スロットを許可する)。示されたスロットに関して、VPEScheduleビットがまったく設定されていないサイクルや、示されたスロットに関して、ThreadScheduleビットがまったく設定されていないサイクルでは、プロセッサスケジューラやVPEスケジューラは、その他の何らかのデフォルトのスケジューリングアルゴリズムに従って、次の発行を許可することになる。
上述の説明によれば、好ましい一実施形態におけるそれぞれのVPE、たとえば図34のVPE 0(3406)およびVPE 1(3404)は、VPESchedule Register(図24に示されているフォーマット)を割り当てられ、これによって、そのレジスタのコンテンツの長さを法とする特定のスロットを、そのVPEに確定的に割り当てることができる。図34のVPEScheduleレジスタは、VPE 0用のレジスタ3414およびVPE 1用のレジスタ3416である。いずれのVPEにも割り当てられないこれらの発行スロットは、実装形態に固有の割り当てポリシーによって割り当てられる。
また上述の説明によれば、VPE内のスレッドに割り当てられるスロットは、そのVPEに与えられた割り当てから割り当てられる。具体的な例を挙げると、図34に示されているように、1つのプロセッサが2つのVPEを設定されており、これによって一方が、0xaaaaaaaaを含むVPESchedule Registerを有し、他方が0x55555555を含むVPESchedule Registerを有する場合、発行スロットは、2つのVPEの間で交互に切り替わることになる。これらのVPEのうちの一方の上のスレッドが、0x55555555を含むThreadSchedule Registerを有する場合、そのスレッドは、そのスレッド自身を含むVPEの発行スロットを1つおきに、すなわちプロセッサ全体の発行スロットを3つおきに得ることになる。
このように、それぞれのVPEに関連付けられているVPEScheduleレジスタの値は、どの処理スロットがそれぞれのVPEに与えられるかを決定する。VPE 0内に示されているThread 0およびThread 1など、具体的なスレッドがそれぞれのVPEに割り当てられている。図示されていないその他のスレッドは、同様にVPE 1に割り当てられている。たとえばThread 0用のレジスタ3418およびThread 1用のレジスタ3420など、それぞれのスレッドに1つのThreadScheduleレジスタが関連付けられている。ThreadScheduleレジスタの値は、VPEに割り当てられているそれぞれのThread用の処理スロットの割り当てを決定する。
スケジューラ3402および3412は、上述の機能を実行するための簡単な組合せロジックから構築することができ、本明細書で提供されている開示を与えられれば、必要以上の実験を伴うことなく、当業者の技術の範囲内でこれらのスケジューラを構築することができるであろう。これらは、たとえば組合せロジック、プログラマブルロジック、ソフトウェア等によってなど、説明した機能を実行するための任意の従来の方法で構築することができる。
図33は、本発明のさまざまな実施形態を実施できる、一般的な形態のコンピュータシステム3300を示している。このシステムは、前述の命令(すなわちFORK、YIELD、MFTR、MTTR、EMT、DMT、およびECONF)のうちの1つまたは複数をサポートするための、(当業者には明らかであるような)必要なデコードおよび実行ロジックと共に構成されているプロセッサ3302を含む。好ましい一実施形態では、コア3302はまた、図34に示されているスケジューリング回路3400を含み、前述のような「ホストプロセッサ」に相当する。システム3300はまた、プロセッサと双方向通信状態にあるシステムインターフェースコントローラ3304と、このシステムインターフェースコントローラによってアクセスできるRAM3316およびROM3314と、バス3312上でシステムインターフェースコントローラと通信する3つのI/Oデバイス3306、3308、および3310とを含む。本明細書で可能な限り詳細に説明した装置およびコードの応用を通じて、システム3300は、マルチスレッド化されたシステムとして機能することができる。図33に示されている一般的な形態に対して多くの変更形態が存在できることは、当業者にとって明らかであろう。たとえばバス3312は、複数の形態のうちのいずれの形態をとることもでき、いくつかの実施形態ではオンチップバスとすることができる。同様にI/Oデバイスの数も典型的なものであり、システムごとに変更することができる。さらに、デバイス3306のみが、割り込み要求を発行するものとして示されているが、他のデバイスも、割り込み要求を発行できることは明らかなはずである。
さらなる改良
ここまで説明した固定された32ビットのThreadScheduleレジスタおよびVPEScheduleレジスタ用の実施形態では、発行帯域幅の厳密な奇数の分数を割り当てることができない。すべての発行スロットの厳密に1/3を所与のスレッドに割り当てたいプログラマは、10/32または11/32を近似値としなければならないであろう。一実施形態におけるさらなるプログラム可能なマスクまたは長さのレジスタによって、プログラマは、ThreadSchedule Registerおよび/またはVPESchedule Register内のビットのサブセットが、シーケンスを再スタートさせる前に、発行ロジックによって使用されるように指定することができる。たとえばプログラマは、30ビットのみが有効であると指定し、0x24924924によって適切なVPESchedule Registerおよび/またはThreadSchedule Registerをプログラムする。
もちろん本出願に記載されているMultithreading ASEは、たとえば「CPU」(Central Processing Unit)、マイクロプロセッサ、マイクロコントローラ、デジタルシグナルプロセッサ、プロセッサコア、「SOC」(System on Chip)、あるいはその他の任意のプログラム可能なデバイス内にある、またはそれらに結合されている、ハードウェアで具体化することができる。さらにMultithreading ASEは、たとえばソフトウェアを格納するように構成されている、コンピュータで使用可能な(たとえば読み取り可能な)メディア内に配置されたソフトウェア(たとえばソース、オブジェクト、マシン語などの任意の形式で配置された、コンピュータ可読コード、プログラムコード、命令、および/またはデータ)で具体化することができる。このようなソフトウェアによって、本明細書に記載されている装置およびプロセスの機能、製作、モデリング、シミュレーション、記述、および/またはテストが可能となる。たとえばこれは、一般的なプログラミング言語(たとえばC、C++)、GDSIIデータベース、Verilog HDL、VHDL、AHDL(Altera HDL)などを含むHDL(hardware description languages)、あるいはその他の利用可能なプログラム、データベース、および/または回路(すなわち回路図)取り込みツールを使用することを通じて達成することができる。このようなソフトウェアは、半導体、磁気ディスク、光ディスク(たとえばCD−ROM、DVD−ROMなど)を含む任意の知られている、コンピュータで使用可能なメディア内に、またコンピュータで使用可能な(たとえば読み取り可能な)伝送メディアに、(たとえば搬送波、あるいはデジタルメディア、光メディア、またはアナログベースのメディアを含むその他の任意のメディア)で具体化されるコンピュータデータ信号として、配置することができる。そのようなものとして、このソフトウェアは、インターネットおよびイントラネットを含む通信ネットワークを介して伝送することができる。
ソフトウェアで具体化されるMultithreading ASEは、(たとえばHDLで具体化される)プロセッサコアなどの半導体知的所有権の中核に含むことができ、集積回路を製造する際にハードウェアへと変形することができる。さらに、本明細書に記載されているMultithreading ASEは、ハードウェアとソフトウェアの組合せとして具体化することができる。
本発明の趣旨および範囲から逸脱することなく、本明細書に記載の実施形態にさまざまな変更を施すことができることは、当業者にとって明らかであろう。たとえば記載されている実施形態については、具体的な例としてMIPSのプロセッサ、アーキテクチャ、および技術を使用して説明した。さまざまな実施形態における本発明は、より広く応用することができ、そのような例に特に限定されるものではない。さらに当業者ならば、微妙に異なるやり方で上述の機能をプログラムする方法を見つける可能性があり、それも本発明の範囲内に収まるはずである。QoSに関する教示においては、ThreadSchedule RegisterおよびVPESchedule Registerのコンテンツは、長さに限定されるものではなく、本発明の趣旨および範囲内で多くの変更を施すことができる。
したがって本発明は、特許請求の範囲によってのみ限定される。
キャッシュミスを経験して失速している単一の命令ストリームを示す図である。 図1Aのストリームが失速している間に実行できる命令ストリームを示す図である。 シングルスレッドプロセッサを示す図である。 デュアルスレッドプロセッサ250を示す図である。 本発明の一実施形態における第1および第2のVPEをサポートするプロセッサを示す図である。 本発明の一実施形態における3つのスレッドを順にサポートする単一のVPEをサポートするプロセッサを示す図である。 本発明の一実施形態におけるFORK命令用のフォーマットを示す図である。 本発明の一実施形態におけるYIELD命令用のフォーマットを示す図である。 GPR rs用の16ビットのクォリファイヤマスクを示すテーブルである。 本発明の一実施形態におけるMFTR命令用のフォーマットを示す図である。 本発明の一実施形態におけるMFTR命令のフィールドを解釈するためのテーブルである。 本発明の一実施形態におけるMTTR命令用のフォーマットを示す図である。 本発明の一実施形態におけるMTTR命令のuおよびselビットを解釈するためのテーブルである。 本発明の一実施形態におけるEMT命令用のフォーマットを示す図である。 本発明の一実施形態におけるDMT命令用のフォーマットを示す図である。 本発明の一実施形態におけるECONF命令用のフォーマットを示す図である。 本発明の一実施形態におけるシステムコプロセッサの特権を有するリソースのテーブルである。 本発明の一実施形態におけるThreadControlレジスタのレイアウトを示す図である。 本発明の一実施形態におけるThreadControlレジスタフィールドを定義するテーブルである。 本発明の一実施形態におけるThreadStatusレジスタ用のレイアウトを示す図である。 本発明の一実施形態におけるThreadStatusレジスタのフィールドを定義するテーブルである。 本発明の一実施形態におけるThreadContextレジスタのレイアウトを示す図である。 本発明の一実施形態におけるThreadConfigレジスタのレイアウトを示す図である。 本発明の一実施形態におけるThreadConfigレジスタのフィールドを定義するテーブルである。 本発明の一実施形態におけるThreadScheduleレジスタのレイアウトを示す図である。 本発明の一実施形態におけるVPEScheduleレジスタのレイアウトを示す図である。 本発明の一実施形態におけるConfig4レジスタのレイアウトを示す図である。 本発明の一実施形態におけるConfig4レジスタのフィールドを定義するテーブルである。 スレッド例外にとって必要とされるCauseレジスタExcCode値を定義するテーブルである。 ITCインジケータを定義するテーブルである。 Config3レジスタフィールドを定義するテーブルである。 VPEコンテキストごとのVPE禁止ビットを示すテーブルである。 ITCストレージの動作を示すテーブルである。 本発明の一実施形態におけるYIELD関数のオペレーションを示す流れ図である。 本発明の一実施形態におけるコンピューティングシステムを示す図である。 本発明の一実施形態における、プロセッサ内ではVPEにより、およびVPE内ではスレッドによるスケジューリングを示す図である。

Claims (87)

  1. 複数のプログラムスレッドをサポートして実行することができるプロセッサにおいて、
    プログラムスレッドをスケジュールするためのパラメータと、
    プログラムスレッド内に配置されてパラメータへアクセスすることができる命令とを含む、処理用のメカニズムであって、
    パラメータが第1の値に等しい場合に、命令が、パラメータ内でコード化されている1つまたは複数の条件に従ってプログラムスレッドをスケジュール変更する、処理用のメカニズム。
  2. パラメータが、データストレージデバイス内に保持される、請求項1に記載のメカニズム。
  3. パラメータが第2の値に等しく、該第2の値が第1の値とは異なる場合に、命令が、プログラムスレッドを割り当て解除する、請求項1に記載のメカニズム。
  4. 第2の値がゼロである、請求項3に記載のメカニズム。
  5. パラメータが第2の値に等しく、該第2の値が第1の値とは異なる場合に、命令が、プログラムスレッドを無条件にスケジュール変更する、請求項1に記載のメカニズム。
  6. 第2の値が奇数値である、請求項5に記載のメカニズム。
  7. 第2の値がマイナス1である、請求項5に記載のメカニズム。
  8. 1つまたは複数の条件のうちの1つの条件が、該1つの条件が満たされるまで、実行を別のスレッドに譲っているプログラムスレッドに関連付けられている、請求項1に記載のメカニズム。
  9. 1つの条件が、パラメータ内のビットベクトルまたはビットフィールドのうちの1つにおいてコード化されている、請求項8に記載のメカニズム。
  10. プログラムスレッドがスケジュール変更される状況において、プログラムスレッドの実行が、命令に続くスレッド内の場所で再開する、請求項5に記載のメカニズム。
  11. パラメータが第3の値に等しく、該第3の値が第1の値および第2の値とは異なる場合に、命令が、プログラムスレッドを無条件にスケジュール変更する、請求項3に記載のメカニズム。
  12. 1つまたは複数の条件のうちの1つの条件が、ハードウェアの割り込みである、請求項1に記載のメカニズム。
  13. 1つまたは複数の条件のうちの1つの条件が、ソフトウェアの割り込みである、請求項1に記載のメカニズム。
  14. プログラムスレッドがスケジュール変更される状況において、プログラムスレッドの実行が、命令に続くスレッド内の場所で再開する、請求項1に記載のメカニズム。
  15. 複数のプログラムスレッドをサポートして実行することができるプロセッサにおいて、実行をスケジュール変更するか、またはスレッドによって自体を割り当て解除する方法であって、
    (a)スレッドがスケジュール変更される際またはスケジュール変更されない際に基づく1つまたは複数の条件に関連付けられている1つまたは複数のパラメータをコード化しているデータストレージデバイス内のレコードの一部に、アクセスする命令を発行するステップと、
    (b)レコードの一部の中の1つまたは複数のパラメータによるスケジュール変更のための条件に従うか、またはスレッドを割り当て解除するステップとを含む方法。
  16. レコードが、汎用レジスタ(GPR)内に存在する、請求項15に記載の方法。
  17. パラメータのうちの1つが、スケジュール変更されるのではなく割り当て解除されるスレッドに関連付けられている、請求項15に記載の方法。
  18. 割り当て解除されるスレッドに関連付けられているパラメータが、ゼロの値である、請求項17に記載の方法。
  19. パラメータのうちの1つが、スケジューリングのために再びキューに入れられるスレッドに関連付けられている、請求項15に記載の方法。
  20. パラメータが任意の奇数値である、請求項19に記載の方法。
  21. パラメータが、2の補数のマイナス1の値である、請求項19に記載の方法。
  22. パラメータのうちの1つが、特定の条件が満たされるまで、実行を別のスレッドに譲っているスレッドに関連付けられている、請求項15に記載の方法。
  23. パラメータが、レコード内のビットベクトルあるいは1つまたは複数の値フィールドのうちの1つにおいてコード化されている、請求項22に記載の方法。
  24. スレッドが命令を発行してスケジュール変更される状況において、スレッドの実行が、1つまたは複数の条件が満たされた際に、スレッドが発行した命令に続くスレッド命令ストリーム内の場所で再開する、請求項15に記載の方法。
  25. パラメータのうちの1つが、スケジュール変更されるのではなく割り当て解除されるスレッドに関連付けられており、パラメータのうちの別の1つが、スケジューリングのために再びキューに入れられるスレッドに関連付けられている、請求項15に記載の方法。
  26. パラメータのうちの1つが、スケジュール変更されるのではなく割り当て解除されるスレッドに関連付けられており、パラメータのうちの別の1つが、特定の条件が満たされるまで、実行を別のスレッドに譲ることに関連付けられている、請求項15に記載の方法。
  27. パラメータのうちの1つが、スケジュール変更のために再びキューに入れられるスレッドに関連付けられており、パラメータのうちの別の1つが、特定の条件が満たされるまで、実行を別のスレッドに譲ることに関連付けられている、請求項15に記載の方法。
  28. パラメータのうちの1つが、スケジュール変更されるのではなく割り当て解除されるスレッドに関連付けられており、パラメータのうちの別の1つが、スケジューリングのために再びキューに入れられるスレッドに関連付けられており、パラメータのうちの別の1つが、特定の条件が満たされるまで、実行を別のスレッドに譲ることに関連付けられている、請求項15に記載の方法。
  29. 複数のソフトウェアエンティティをサポートして実行するためのデジタルプロセッサであって、
    スレッドがいったん実行を別のスレッドに譲った後に、スケジュール変更される際またはスケジュール変更されない際に基づく1つまたは複数の条件に関連付けられている1つまたは複数のパラメータをコード化しているデータストレージデバイス内のレコードの一部を含む、デジタルプロセッサ。
  30. レコードの一部が汎用レジスタ(GPR)内に存在する、請求項29に記載のデジタルプロセッサ。
  31. パラメータのうちの1つが、スケジュール変更されるのではなく割り当て解除されるスレッドに関連付けられている、請求項29に記載のデジタルプロセッサ。
  32. 割り当て解除されるスレッドに関連付けられているパラメータが、ゼロの値である、請求項31に記載のデジタルプロセッサ。
  33. パラメータのうちの1つが、スケジューリングのために再びキューに入れられるスレッドに関連付けられている、請求項29に記載のデジタルプロセッサ。
  34. パラメータが任意の奇数値である、請求項33に記載のデジタルプロセッサ。
  35. パラメータが、2の補数のマイナス1の値である、請求項33に記載のデジタルプロセッサ。
  36. パラメータのうちの1つが、特定の条件が満たされるまで、実行を別のスレッドに譲っているスレッドに関連付けられている、請求項29に記載のデジタルプロセッサ。
  37. パラメータが、レコード内のビットベクトルあるいは1つまたは複数の値フィールドのうちの1つにおいてコード化されている、請求項36に記載のデジタルプロセッサ。
  38. パラメータのうちの1つが、スケジュール変更されるのではなく割り当て解除されるスレッドに関連付けられており、パラメータのうちの別の1つが、スケジューリングのために再びキューに入れられるスレッドに関連付けられている、請求項29に記載のデジタルプロセッサ。
  39. パラメータのうちの1つが、スケジュール変更されるのではなく割り当て解除されるスレッドに関連付けられており、パラメータのうちの別の1つが、特定の条件が満たされるまで、実行を別のスレッドに譲ることに関連付けられている、請求項29に記載のデジタルプロセッサ。
  40. パラメータのうちの1つが、スケジュール変更のために再びキューに入れられるスレッドに関連付けられており、パラメータのうちの別の1つが、特定の条件が満たされるまで、実行を別のスレッドに譲ることに関連付けられている、請求項29に記載のデジタルプロセッサ。
  41. パラメータのうちの1つが、スケジュール変更されるのではなく割り当て解除されるスレッドに関連付けられており、パラメータのうちの別の1つが、スケジューリングのために再びキューに入れられるスレッドに関連付けられており、パラメータのうちの別の1つが、特定の条件が満たされるまで、実行を別のスレッドに譲ることに関連付けられている、請求項29に記載のデジタルプロセッサ。
  42. 複数のプログラムスレッドをサポートして実行することができる処理システムであって、
    デジタルプロセッサと、
    スレッドがスケジュール変更される際またはスケジュール変更されない際に基づく1つまたは複数の条件に関連付けられている1つまたは複数のパラメータをコード化しているデータストレージデバイス内のレコードの一部と、
    スレッドをスケジュール変更および割り当て解除するための命令を含む命令セットとを含み、
    命令が、スレッドによって発行されると、レコードの1つまたは複数のパラメータにアクセスし、処理システムが、レコードの一部の1つまたは複数のパラメータに従って、発行スレッドをスケジュール変更または割り当て解除するための1つまたは複数の条件に従う、処理システム。
  43. レコードが汎用レジスタ(GPR)内に存在する、請求項42に記載の処理システム。
  44. パラメータのうちの1つが、スケジュール変更されるのではなく割り当て解除されるスレッドに関連付けられている、請求項41に記載の処理システム。
  45. 割り当て解除されるスレッドに関連付けられているパラメータが、ゼロの値である、請求項44に記載の処理システム。
  46. パラメータのうちの1つが、スケジューリングのために再びキューに入れられるスレッドに関連付けられている、請求項44に記載の処理システム。
  47. パラメータが任意の奇数値である、請求項46に記載の処理システム。
  48. パラメータが、2の補数のマイナス1の値である、請求項46に記載の処理システム。
  49. パラメータのうちの1つが、特定の条件が満たされるまで、実行を別のスレッドに譲っているスレッドに関連付けられている、請求項41に記載の処理システム。
  50. パラメータが、レコード内のビットベクトルあるいは1つまたは複数の値フィールドのうちの1つにおいてコード化されている、請求項49に記載の処理システム。
  51. スレッドが命令を発行して条件付きでスケジュール変更される状況において、スレッドの実行が、1つまたは複数の条件が満たされた際に、命令に続くスレッド命令ストリーム内の場所で再開する、請求項44に記載の処理システム。
  52. パラメータのうちの1つが、スケジュール変更されるのではなく割り当て解除されるスレッドに関連付けられており、パラメータのうちの別の1つが、スケジューリングのために再びキューに入れられるスレッドに関連付けられている、請求項42に記載の処理システム。
  53. パラメータのうちの1つが、スケジュール変更されるのではなく割り当て解除されるスレッドに関連付けられており、パラメータのうちの別の1つが、特定の条件が満たされるまで、実行を別のスレッドに譲ることに関連付けられている、請求項42に記載の処理システム。
  54. パラメータのうちの1つが、スケジュール変更のために再びキューに入れられるスレッドに関連付けられており、パラメータのうちの別の1つが、特定の条件が満たされるまで、実行を別のスレッドに譲ることに関連付けられている、請求項42に記載の処理システム。
  55. パラメータのうちの1つが、スケジュール変更されるのではなく割り当て解除されるスレッドに関連付けられており、パラメータのうちの別の1つが、スケジューリングのために再びキューに入れられるスレッドに関連付けられており、パラメータのうちの別の1つが、特定の条件が満たされるまで、実行を別のスレッドに譲ることに関連付けられている、請求項42に記載の処理システム。
  56. 複数のソフトウェアスレッドのうちの個々のスレッドを1つのデジタルプロセッサで実行するための1つの命令セットからの複数の命令を書き込まれているデジタルストレージメディアであって、命令セットが1つの命令を含み、該1つの命令によって発行スレッドが実行を譲り、データストレージデバイス内のレコードの一部の中のパラメータにアクセスし、割り当て解除またはスケジュール変更のための条件が、パラメータに関連付けられており、レコードの一部のパラメータによる割り当て解除またはスケジュール変更のための条件が準拠される、デジタルストレージメディア。
  57. レコードが汎用レジスタ(GPR)内に存在する、請求項56に記載のデジタルストレージメディア。
  58. パラメータのうちの1つが、スケジュール変更されるのではなく割り当て解除されるスレッドに関連付けられている、請求項57に記載のデジタルストレージメディア。
  59. 割り当て解除されるスレッドに関連付けられているパラメータが、ゼロの値である、請求項58に記載のデジタルストレージメディア。
  60. パラメータのうちの1つが、スケジューリングのために再びキューに入れられるスレッドに関連付けられている、請求項56に記載のデジタルストレージメディア。
  61. パラメータが任意の奇数値である、請求項60に記載のデジタルストレージメディア。
  62. パラメータが、2の補数のマイナス1の値である、請求項60に記載のデジタルストレージメディア。
  63. パラメータのうちの1つが、特定の条件が満たされるまで、実行を別のスレッドに譲っているスレッドに関連付けられている、請求項16に記載のデジタルストレージメディア。
  64. パラメータが、レコード内のビットベクトルあるいは1つまたは複数の値フィールドのうちの1つにおいてコード化されている、請求項63に記載のデジタルストレージメディア。
  65. パラメータのうちの1つが、スケジュール変更されるのではなく割り当て解除されるスレッドに関連付けられており、パラメータのうちの別の1つが、スケジューリングのために再びキューに入れられるスレッドに関連付けられている、請求項56に記載のデジタルストレージメディア。
  66. パラメータのうちの1つが、スケジュール変更されるのではなく割り当て解除されるスレッドに関連付けられており、パラメータのうちの別の1つが、特定の条件が満たされるまで、実行を別のスレッドに譲ることに関連付けられている、請求項56に記載のデジタルストレージメディア。
  67. パラメータのうちの1つが、スケジュール変更のために再びキューに入れられるスレッドに関連付けられており、パラメータのうちの別の1つが、特定の条件が満たされるまで、実行を別のスレッドに譲ることに関連付けられている、請求項56に記載のメカニズム。
  68. パラメータのうちの1つが、スケジュール変更されるのではなく割り当て解除されるスレッドに関連付けられており、パラメータのうちの別の1つが、スケジューリングのために再びキューに入れられるスレッドに関連付けられており、パラメータのうちの別の1つが、特定の条件が満たされるまで、実行を別のスレッドに譲ることに関連付けられている、請求項56に記載のデジタルストレージメディア。
  69. 命令が、YIELD命令である、請求項1に記載のメカニズム。
  70. レコードの一部が、ビットベクトルを含む、請求項1に記載のメカニズム。
  71. レコードの一部が、1つまたは複数のマルチビットフィールドを含む、請求項1に記載のメカニズム。
  72. 命令が、YIELD命令である、請求項15に記載の方法。
  73. 命令が、YIELD命令である、請求項42に記載の処理システム。
  74. 命令が、YIELD命令である、請求項56に記載のデジタルストレージメディア。
  75. 伝送メディアにおいて具体化されるコンピュータデータ信号であって、
    複数のプログラムスレッドをサポートして実行することができるプロセッサを記述し、かつスレッドをスケジュール変更および割り当て解除するためのメカニズムを含むコンピュータ可読プログラムコードを含み、該コンピュータ可読プログラムコードが、
    スレッドがスケジュール変更される際またはスケジュール変更されない際に基づく1つまたは複数の条件に関連付けられている1つまたは複数のパラメータをコード化しているデータストレージデバイス内のレコードの一部を記述するための第1のプログラムコードセグメントと、
    レコードの1つまたは複数のパラメータにアクセスすることができる命令を記述するための第2のプログラムコードセグメントとを含み、命令が、スレッドによって発行されると、レコード内の1つまたは複数の値にアクセスし、該1つまたは複数の値によるスケジュール変更のための1つまたは複数の条件に従うか、またはスレッドを割り当て解除する、コンピュータデータ信号。
  76. 複数のプログラムスレッドをサポートすることができるプロセッサにおいて、
    スレッドのスケジューリングに関連するパラメータにアクセスする命令を実行するステップであって、前記命令がプログラムスレッド内に含まれる、アクセスする命令を実行するステップと、
    パラメータが第1の値に等しい場合に、命令に応答してプログラムスレッドを割り当て解除するステップとを含む、方法。
  77. 第1の値がゼロである、請求項76に記載の方法。
  78. パラメータが第2の値に等しい場合に、命令に応答してプログラムスレッドの実行を一時停止するステップをさらに含み、第2の値が第1の値とは異なる、請求項76に記載の方法。
  79. 第2の値が、プログラムスレッドの実行に必要とされる条件が満たされていないことを示す、請求項78に記載の方法。
  80. 条件が、パラメータ内でビットベクトルまたは値フィールドとしてコード化されている、請求項79に記載の方法。
  81. パラメータが第3の値に等しい場合に、命令に応答してプログラムスレッドをスケジュール変更するステップをさらに含み、第3の値が、第1の値および第2の値とは異なる、請求項78に記載の方法。
  82. 第3の値がマイナス1である、請求項81に記載の方法。
  83. 第3の値が奇数値である、請求項81に記載の方法。
  84. 複数のプログラムスレッドをサポートすることができるプロセッサにおいて、
    スレッドのスケジューリングに関連するパラメータにアクセスする命令を実行するステップであって、命令がプログラムスレッド内に含まれる、アクセスする命令を実行するステップと、
    パラメータが第1の値に等しい場合に、命令に応答してプログラムスレッドの実行を一時停止するステップとを含む、方法。
  85. パラメータが第2の値に等しい場合に、命令に応答してプログラムスレッドをスケジュール変更するステップをさらに含み、第2の値が第1の値とは異なる、請求項84に記載の方法。
  86. 複数のプログラムスレッドをサポートすることができるプロセッサにおいて、
    スレッドのスケジューリングに関連するパラメータにアクセスする命令を実行するステップであって、命令がプログラムスレッド内に含まれる、アクセスする命令を実行するステップと、
    パラメータが第1の値に等しい場合に、命令に応答してプログラムスレッドをスケジュール変更するステップとを含む、方法。
  87. パラメータが第2の値に等しい場合に、命令に応答してプログラムスレッドを割り当て解除するステップをさらに含み、第2の値が第1の値とは異なる、請求項86に記載の方法。
JP2006524961A 2003-08-28 2004-08-26 プロセッサ内での実行の計算スレッドを一時停止して割り当て解除するための統合されたメカニズム Pending JP2007504541A (ja)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US49918003P 2003-08-28 2003-08-28
US50235903P 2003-09-12 2003-09-12
US50235803P 2003-09-12 2003-09-12
US10/684,348 US20050050305A1 (en) 2003-08-28 2003-10-10 Integrated mechanism for suspension and deallocation of computational threads of execution in a processor
PCT/US2004/029272 WO2005022386A2 (en) 2003-08-28 2004-08-26 Integrated mechanism for suspension and deallocation of computational threads of execution in a processor

Publications (1)

Publication Number Publication Date
JP2007504541A true JP2007504541A (ja) 2007-03-01

Family

ID=34222595

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2006524961A Pending JP2007504541A (ja) 2003-08-28 2004-08-26 プロセッサ内での実行の計算スレッドを一時停止して割り当て解除するための統合されたメカニズム

Country Status (5)

Country Link
US (1) US20050050305A1 (ja)
EP (1) EP1660999A2 (ja)
JP (1) JP2007504541A (ja)
CN (1) CN102880447B (ja)
WO (1) WO2005022386A2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2016173836A (ja) * 2011-07-29 2016-09-29 インテル コーポレイション 中央処理ユニット及び画像処理ユニットの同期機構

Families Citing this family (47)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE602004017879D1 (de) * 2003-08-28 2009-01-02 Mips Tech Inc Integrierter mechanismus zum suspendieren und endznem prozessor
US7870553B2 (en) * 2003-08-28 2011-01-11 Mips Technologies, Inc. Symmetric multiprocessor operating system for execution on non-independent lightweight thread contexts
US7836450B2 (en) * 2003-08-28 2010-11-16 Mips Technologies, Inc. Symmetric multiprocessor operating system for execution on non-independent lightweight thread contexts
US7418585B2 (en) * 2003-08-28 2008-08-26 Mips Technologies, Inc. Symmetric multiprocessor operating system for execution on non-independent lightweight thread contexts
US9032404B2 (en) * 2003-08-28 2015-05-12 Mips Technologies, Inc. Preemptive multitasking employing software emulation of directed exceptions in a multithreading processor
US7594089B2 (en) 2003-08-28 2009-09-22 Mips Technologies, Inc. Smart memory based synchronization controller for a multi-threaded multiprocessor SoC
US7849297B2 (en) 2003-08-28 2010-12-07 Mips Technologies, Inc. Software emulation of directed exceptions in a multithreading processor
US7711931B2 (en) 2003-08-28 2010-05-04 Mips Technologies, Inc. Synchronized storage providing multiple synchronization semantics
US7496921B2 (en) * 2003-08-29 2009-02-24 Intel Corporation Processing block with integrated light weight multi-threading support
US7477255B1 (en) * 2004-04-12 2009-01-13 Nvidia Corporation System and method for synchronizing divergent samples in a programmable graphics processing unit
US7324112B1 (en) 2004-04-12 2008-01-29 Nvidia Corporation System and method for processing divergent samples in a programmable graphics processing unit
US7664928B1 (en) * 2005-01-19 2010-02-16 Tensilica, Inc. Method and apparatus for providing user-defined interfaces for a configurable processor
US7814487B2 (en) * 2005-04-26 2010-10-12 Qualcomm Incorporated System and method of executing program threads in a multi-threaded processor
US8205146B2 (en) * 2005-07-21 2012-06-19 Hewlett-Packard Development Company, L.P. Persistent error detection in digital memory
US7984281B2 (en) * 2005-10-18 2011-07-19 Qualcomm Incorporated Shared interrupt controller for a multi-threaded processor
US7702889B2 (en) * 2005-10-18 2010-04-20 Qualcomm Incorporated Shared interrupt control method and system for a digital signal processor
US7913255B2 (en) * 2005-10-20 2011-03-22 Qualcomm Incorporated Background thread processing in a multithread digital signal processor
US7971205B2 (en) 2005-12-01 2011-06-28 International Business Machines Corporation Handling of user mode thread using no context switch attribute to designate near interrupt disabled priority status
US8156493B2 (en) * 2006-04-12 2012-04-10 The Mathworks, Inc. Exception handling in a concurrent computing process
US8081184B1 (en) * 2006-05-05 2011-12-20 Nvidia Corporation Pixel shader program thread assembly
US8046775B2 (en) * 2006-08-14 2011-10-25 Marvell World Trade Ltd. Event-based bandwidth allocation mode switching method and apparatus
US9665970B2 (en) * 2006-09-19 2017-05-30 Imagination Technologies Limited Variable-sized concurrent grouping for multiprocessing
US8402463B2 (en) * 2006-10-30 2013-03-19 Hewlett-Packard Development Company, L.P. Hardware threads processor core utilization
US7698540B2 (en) * 2006-10-31 2010-04-13 Hewlett-Packard Development Company, L.P. Dynamic hardware multithreading and partitioned hardware multithreading
US8261049B1 (en) 2007-04-10 2012-09-04 Marvell International Ltd. Determinative branch prediction indexing
GB2451845B (en) * 2007-08-14 2010-03-17 Imagination Tech Ltd Compound instructions in a multi-threaded processor
US9009020B1 (en) * 2007-12-12 2015-04-14 F5 Networks, Inc. Automatic identification of interesting interleavings in a multithreaded program
US8433884B2 (en) * 2008-06-19 2013-04-30 Panasonic Corporation Multiprocessor
US9785462B2 (en) * 2008-12-30 2017-10-10 Intel Corporation Registering a user-handler in hardware for transactional memory event handling
GB201001621D0 (en) * 2010-02-01 2010-03-17 Univ Catholique Louvain A tile-based processor architecture model for high efficiency embedded homogenous multicore platforms
JP5488697B2 (ja) * 2010-08-30 2014-05-14 富士通株式会社 マルチコアプロセッサシステム、同期制御方法、および同期制御プログラム
CN102183922A (zh) * 2011-03-21 2011-09-14 浙江机电职业技术学院 Acs运动控制器实时暂停的实现方法
CN102833120B (zh) * 2011-06-14 2017-06-13 中兴通讯股份有限公司 一种快速自动化测试中处理网管服务器异常的方法及系统
US8832417B2 (en) 2011-09-07 2014-09-09 Qualcomm Incorporated Program flow control for multiple divergent SIMD threads using a minimum resume counter
US9513975B2 (en) * 2012-05-02 2016-12-06 Nvidia Corporation Technique for computational nested parallelism
US9256429B2 (en) 2012-08-08 2016-02-09 Qualcomm Incorporated Selectively activating a resume check operation in a multi-threaded processing system
US9229721B2 (en) 2012-09-10 2016-01-05 Qualcomm Incorporated Executing subroutines in a multi-threaded processing system
US9811364B2 (en) * 2013-06-13 2017-11-07 Microsoft Technology Licensing, Llc Thread operation across virtualization contexts
CN106651748B (zh) 2015-10-30 2019-10-22 华为技术有限公司 一种图像处理方法与图像处理装置
CN105677487B (zh) * 2016-01-12 2019-02-15 浪潮通用软件有限公司 一种控制资源占用的方法及装置
US10459778B1 (en) 2018-07-16 2019-10-29 Microsoft Technology Licensing, Llc Sending messages between threads
CN109039732B (zh) * 2018-07-26 2021-07-23 中国建设银行股份有限公司 消息处理系统及消息处理方法
GB2580327B (en) * 2018-12-31 2021-04-28 Graphcore Ltd Register files in a multi-threaded processor
CN110278488B (zh) * 2019-06-28 2021-07-27 百度在线网络技术(北京)有限公司 一种播放控制方法及装置
US11599441B2 (en) * 2020-04-02 2023-03-07 EMC IP Holding Company LLC Throttling processing threads
CN112559160B (zh) * 2021-02-19 2021-06-04 智道网联科技(北京)有限公司 地图引擎多线程的控制方法及装置
CN116954950B (zh) * 2023-09-04 2024-03-12 北京凯芯微科技有限公司 一种核间通信方法和电子设备

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH08249195A (ja) * 1995-02-03 1996-09-27 Internatl Business Mach Corp <Ibm> 命令スレッドを処理するための方法およびシステム
WO2003019360A2 (en) * 2001-08-24 2003-03-06 International Business Machines Corporation System for yielding to a processor

Family Cites Families (84)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3665404A (en) * 1970-04-09 1972-05-23 Burroughs Corp Multi-processor processing system having interprocessor interrupt apparatus
JPS6258341A (ja) * 1985-09-03 1987-03-14 Fujitsu Ltd 入出力割込処理方式
CN1040588C (zh) * 1986-08-20 1998-11-04 东芝机械株式会社 适用于实现顺序控制和伺服控制的计算机控制系统和方法
US4817051A (en) * 1987-07-02 1989-03-28 Fairchild Semiconductor Corporation Expandable multi-port random access memory
US4843541A (en) * 1987-07-29 1989-06-27 International Business Machines Corporation Logical resource partitioning of a data processing system
US5428754A (en) * 1988-03-23 1995-06-27 3Dlabs Ltd Computer system with clock shared between processors executing separate instruction streams
EP0473714A1 (en) * 1989-05-26 1992-03-11 Massachusetts Institute Of Technology Parallel multithreaded data processing system
US5410710A (en) * 1990-12-21 1995-04-25 Intel Corporation Multiprocessor programmable interrupt controller system adapted to functional redundancy checking processor systems
FR2677474B1 (fr) * 1991-06-04 1993-09-24 Sextant Avionique Dispositif permettant d'accroitre les performances d'un noyau d'executif temps reel associe a une structure multiprocesseur pouvant comprendre un nombre eleve de processeurs.
US5542076A (en) * 1991-06-14 1996-07-30 Digital Equipment Corporation Method and apparatus for adaptive interrupt servicing in data processing system
JPH05204656A (ja) * 1991-11-30 1993-08-13 Toshiba Corp スレッド固有データ保持方法
US5515538A (en) * 1992-05-29 1996-05-07 Sun Microsystems, Inc. Apparatus and method for interrupt handling in a multi-threaded operating system kernel
CA2100540A1 (en) * 1992-10-19 1994-04-20 Jonel George System and method for performing resource reconfiguration in a computer system
US5758142A (en) * 1994-05-31 1998-05-26 Digital Equipment Corporation Trainable apparatus for predicting instruction outcomes in pipelined processors
US5481719A (en) * 1994-09-09 1996-01-02 International Business Machines Corporation Exception handling method and apparatus for a microkernel data processing system
JP3169779B2 (ja) * 1994-12-19 2001-05-28 日本電気株式会社 マルチスレッドプロセッサ
US5867704A (en) * 1995-02-24 1999-02-02 Matsushita Electric Industrial Co., Ltd. Multiprocessor system shaving processor based idle state detection and method of executing tasks in such a multiprocessor system
US5727203A (en) * 1995-03-31 1998-03-10 Sun Microsystems, Inc. Methods and apparatus for managing a database in a distributed object operating environment using persistent and transient cache
US5799188A (en) * 1995-12-15 1998-08-25 International Business Machines Corporation System and method for managing variable weight thread contexts in a multithreaded computer system
US5706514A (en) * 1996-03-04 1998-01-06 Compaq Computer Corporation Distributed execution of mode mismatched commands in multiprocessor computer systems
US5790871A (en) * 1996-05-17 1998-08-04 Advanced Micro Devices System and method for testing and debugging a multiprocessing interrupt controller
US5944816A (en) * 1996-05-17 1999-08-31 Advanced Micro Devices, Inc. Microprocessor configured to execute multiple threads including interrupt service routines
US5933627A (en) * 1996-07-01 1999-08-03 Sun Microsystems Thread switch on blocked load or store using instruction thread field
US5949994A (en) * 1997-02-12 1999-09-07 The Dow Chemical Company Dedicated context-cycling computer with timed context
US6175916B1 (en) * 1997-05-06 2001-01-16 Microsoft Corporation Common-thread inter-process function calls invoked by jumps to invalid addresses
US5991856A (en) * 1997-09-30 1999-11-23 Network Associates, Inc. System and method for computer operating system protection
US6697935B1 (en) * 1997-10-23 2004-02-24 International Business Machines Corporation Method and apparatus for selecting thread switch events in a multithreaded processor
US6061710A (en) * 1997-10-29 2000-05-09 International Business Machines Corporation Multithreaded processor incorporating a thread latch register for interrupt service new pending threads
US6088787A (en) * 1998-03-30 2000-07-11 Celestica International Inc. Enhanced program counter stack for multi-tasking central processing unit
US6560626B1 (en) * 1998-04-02 2003-05-06 Microsoft Corporation Thread interruption with minimal resource usage using an asynchronous procedure call
US6496847B1 (en) * 1998-05-15 2002-12-17 Vmware, Inc. System and method for virtualizing computer systems
US6189093B1 (en) * 1998-07-21 2001-02-13 Lsi Logic Corporation System for initiating exception routine in response to memory access exception by storing exception information and exception bit within architectured register
US6253306B1 (en) * 1998-07-29 2001-06-26 Advanced Micro Devices, Inc. Prefetch instruction mechanism for processor
US6920634B1 (en) * 1998-08-03 2005-07-19 International Business Machines Corporation Detecting and causing unsafe latent accesses to a resource in multi-threaded programs
US6223228B1 (en) * 1998-09-17 2001-04-24 Bull Hn Information Systems Inc. Apparatus for synchronizing multiple processors in a data processing system
US6205414B1 (en) * 1998-10-02 2001-03-20 International Business Machines Corporation Methodology for emulation of multi-threaded processes in a single-threaded operating system
US6205543B1 (en) * 1998-12-03 2001-03-20 Sun Microsystems, Inc. Efficient handling of a large register file for context switching
US6401155B1 (en) * 1998-12-22 2002-06-04 Philips Electronics North America Corporation Interrupt/software-controlled thread processing
US7111290B1 (en) * 1999-01-28 2006-09-19 Ati International Srl Profiling program execution to identify frequently-executed portions and to assist binary translation
JP2000305795A (ja) * 1999-04-20 2000-11-02 Nec Corp 並列処理装置
US6542991B1 (en) * 1999-05-11 2003-04-01 Sun Microsystems, Inc. Multiple-thread processor with single-thread interface shared among threads
US6493741B1 (en) * 1999-10-01 2002-12-10 Compaq Information Technologies Group, L.P. Method and apparatus to quiesce a portion of a simultaneous multithreaded central processing unit
US6738796B1 (en) * 1999-10-08 2004-05-18 Globespanvirata, Inc. Optimization of memory requirements for multi-threaded operating systems
US6889319B1 (en) * 1999-12-09 2005-05-03 Intel Corporation Method and apparatus for entering and exiting multiple threads within a multithreaded processor
US7649901B2 (en) * 2000-02-08 2010-01-19 Mips Technologies, Inc. Method and apparatus for optimizing selection of available contexts for packet processing in multi-stream packet processing
US6658449B1 (en) * 2000-02-17 2003-12-02 International Business Machines Corporation Apparatus and method for periodic load balancing in a multiple run queue system
US20020016869A1 (en) * 2000-06-22 2002-02-07 Guillaume Comeau Data path engine
US6591379B1 (en) * 2000-06-23 2003-07-08 Microsoft Corporation Method and system for injecting an exception to recover unsaved data
SE522271C2 (sv) * 2000-07-05 2004-01-27 Ericsson Telefon Ab L M Förfarande och anordning i kopplingsnod för ett telesystem
WO2002021323A2 (en) * 2000-09-08 2002-03-14 Avaz Networks Hardware function generator support in a dsp
US6728846B2 (en) * 2000-12-22 2004-04-27 Bull Hn Information Systems Inc. Method and data processing system for performing atomic multiple word writes
US6907520B2 (en) * 2001-01-11 2005-06-14 Sun Microsystems, Inc. Threshold-based load address prediction and new thread identification in a multithreaded microprocessor
US20020103847A1 (en) * 2001-02-01 2002-08-01 Hanan Potash Efficient mechanism for inter-thread communication within a multi-threaded computer system
JP3702813B2 (ja) * 2001-07-12 2005-10-05 日本電気株式会社 マルチスレッド実行方法及び並列プロセッサシステム
JP3702815B2 (ja) * 2001-07-12 2005-10-05 日本電気株式会社 プロセッサ間レジスタ継承方法及びその装置
JP3632635B2 (ja) * 2001-07-18 2005-03-23 日本電気株式会社 マルチスレッド実行方法及び並列プロセッサシステム
US7185183B1 (en) * 2001-08-02 2007-02-27 Mips Technologies, Inc. Atomic update of CPO state
US7181600B1 (en) * 2001-08-02 2007-02-20 Mips Technologies, Inc. Read-only access to CPO registers
US7487339B2 (en) * 2001-10-12 2009-02-03 Mips Technologies, Inc. Method and apparatus for binding shadow registers to vectored interrupts
US6877083B2 (en) * 2001-10-16 2005-04-05 International Business Machines Corporation Address mapping mechanism for behavioral memory enablement within a data processing system
US7120762B2 (en) * 2001-10-19 2006-10-10 Wisconsin Alumni Research Foundation Concurrent execution of critical sections by eliding ownership of locks
US6957323B2 (en) * 2001-11-14 2005-10-18 Elan Research, Inc. Operand file using pointers and reference counters and a method of use
US7428732B2 (en) * 2001-12-05 2008-09-23 Intel Corporation Method and apparatus for controlling access to shared resources in an environment with multiple logical processors
JP4054572B2 (ja) * 2001-12-17 2008-02-27 キヤノン株式会社 アプリケーション実行システム
US7216338B2 (en) * 2002-02-20 2007-05-08 Microsoft Corporation Conformance execution of non-deterministic specifications for components
US6922745B2 (en) * 2002-05-02 2005-07-26 Intel Corporation Method and apparatus for handling locks
US20040015684A1 (en) * 2002-05-30 2004-01-22 International Business Machines Corporation Method, apparatus and computer program product for scheduling multiple threads for a processor
US7334086B2 (en) * 2002-10-08 2008-02-19 Rmi Corporation Advanced processor with system on a chip interconnect technology
US20050033889A1 (en) * 2002-10-08 2005-02-10 Hass David T. Advanced processor with interrupt delivery mechanism for multi-threaded multi-CPU system on a chip
US6971103B2 (en) * 2002-10-15 2005-11-29 Sandbridge Technologies, Inc. Inter-thread communications using shared interrupt register
US7073042B2 (en) * 2002-12-12 2006-07-04 Intel Corporation Reclaiming existing fields in address translation data structures to extend control over memory accesses
US7203823B2 (en) * 2003-01-09 2007-04-10 Sony Corporation Partial and start-over threads in embedded real-time kernel
US7376954B2 (en) * 2003-08-28 2008-05-20 Mips Technologies, Inc. Mechanisms for assuring quality of service for programs executing on a multithreaded processor
US9032404B2 (en) * 2003-08-28 2015-05-12 Mips Technologies, Inc. Preemptive multitasking employing software emulation of directed exceptions in a multithreading processor
US7870553B2 (en) * 2003-08-28 2011-01-11 Mips Technologies, Inc. Symmetric multiprocessor operating system for execution on non-independent lightweight thread contexts
US7711931B2 (en) * 2003-08-28 2010-05-04 Mips Technologies, Inc. Synchronized storage providing multiple synchronization semantics
US7849297B2 (en) * 2003-08-28 2010-12-07 Mips Technologies, Inc. Software emulation of directed exceptions in a multithreading processor
US7836450B2 (en) * 2003-08-28 2010-11-16 Mips Technologies, Inc. Symmetric multiprocessor operating system for execution on non-independent lightweight thread contexts
US7418585B2 (en) * 2003-08-28 2008-08-26 Mips Technologies, Inc. Symmetric multiprocessor operating system for execution on non-independent lightweight thread contexts
DE602004017879D1 (de) * 2003-08-28 2009-01-02 Mips Tech Inc Integrierter mechanismus zum suspendieren und endznem prozessor
US6993598B2 (en) * 2003-10-09 2006-01-31 International Business Machines Corporation Method and apparatus for efficient sharing of DMA resource
US7689867B2 (en) * 2005-06-09 2010-03-30 Intel Corporation Multiprocessor breakpoint
US7386636B2 (en) * 2005-08-19 2008-06-10 International Business Machines Corporation System and method for communicating command parameters between a processor and a memory flow controller
US7657683B2 (en) * 2008-02-01 2010-02-02 Redpine Signals, Inc. Cross-thread interrupt controller for a multi-thread processor

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH08249195A (ja) * 1995-02-03 1996-09-27 Internatl Business Mach Corp <Ibm> 命令スレッドを処理するための方法およびシステム
WO2003019360A2 (en) * 2001-08-24 2003-03-06 International Business Machines Corporation System for yielding to a processor

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2016173836A (ja) * 2011-07-29 2016-09-29 インテル コーポレイション 中央処理ユニット及び画像処理ユニットの同期機構

Also Published As

Publication number Publication date
WO2005022386A3 (en) 2005-04-28
CN102880447A (zh) 2013-01-16
US20050050305A1 (en) 2005-03-03
CN102880447B (zh) 2018-02-06
EP1660999A2 (en) 2006-05-31
WO2005022386A2 (en) 2005-03-10

Similar Documents

Publication Publication Date Title
JP4818919B2 (ja) プロセッサ内での実行の計算スレッドを一時停止して割り当て解除するための統合されたメカニズム
JP2007504541A (ja) プロセッサ内での実行の計算スレッドを一時停止して割り当て解除するための統合されたメカニズム
US7376954B2 (en) Mechanisms for assuring quality of service for programs executing on a multithreaded processor
US9069605B2 (en) Mechanism to schedule threads on OS-sequestered sequencers without operating system intervention
US7676664B2 (en) Symmetric multiprocessor operating system for execution on non-independent lightweight thread contexts
US7870553B2 (en) Symmetric multiprocessor operating system for execution on non-independent lightweight thread contexts
US8266620B2 (en) Symmetric multiprocessor operating system for execution on non-independent lightweight thread contexts
WO2005022384A1 (en) Apparatus, method, and instruction for initiation of concurrent instruction streams in a multithreading microprocessor

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20081202

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20090224

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20090303

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20090601

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20100608

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20100902

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20100909

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20101208

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20110802