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

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

Info

Publication number
JP4818919B2
JP4818919B2 JP2006524929A JP2006524929A JP4818919B2 JP 4818919 B2 JP4818919 B2 JP 4818919B2 JP 2006524929 A JP2006524929 A JP 2006524929A JP 2006524929 A JP2006524929 A JP 2006524929A JP 4818919 B2 JP4818919 B2 JP 4818919B2
Authority
JP
Japan
Prior art keywords
microprocessor
thread
instruction
operand
program
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2006524929A
Other languages
English (en)
Other versions
JP2007504539A (ja
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
Priority claimed from US10/684,348 external-priority patent/US20050050305A1/en
Priority claimed from US10/684,350 external-priority patent/US7376954B2/en
Application filed by ミップス テクノロジーズ インコーポレイテッド filed Critical ミップス テクノロジーズ インコーポレイテッド
Publication of JP2007504539A publication Critical patent/JP2007504539A/ja
Application granted granted Critical
Publication of JP4818919B2 publication Critical patent/JP4818919B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/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
    • 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/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
    • 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/3861Recovery, e.g. branch miss-prediction, exception handling
    • 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/3885Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
    • 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
    • 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/54Interprogram communication

Description

本出願は、下記の同時係属の米国特許非仮出願の一部継続出願(CIP)であり、これらの米国特許非仮出願については、その全体をすべての目的から参照によって本明細書に組み込む。
Figure 0004818919
上記の同時係属の米国特許非仮出願は、下記の米国特許仮出願の恩恵について請求するものであり、これらの米国特許仮出願のそれぞれの恩恵については、本出願でも請求しており、これらの米国特許仮出願については、その全体をすべての目的から参照によって本明細書に組み込む。
Figure 0004818919
本出願は、下記の米国特許非仮出願に関連し、これらと同時に出願されたものであり、これらの米国特許非仮出願については、その全体をすべての目的から参照によって本明細書に組み込む。
Figure 0004818919
本発明は、デジタルプロセッサ(たとえばマイクロプロセッサ、デジタルシグナルプロセッサ、マイクロコントローラなど)の分野におけるものであり、より詳細には、シングルプロセッサにおいて複数のスレッドの実行を管理することに関連する装置および方法に関する。
デジタルコンピューティングの領域において、演算能力の発展の歴史には、多くの分野における着実な進歩が含まれる。たとえば、プロセッサに対するデバイスの密度、演算の速度に影響を与える相互接続技術、より高速のクロック速度を許容して使用する能力、およびさらに多くの分野において、着実な進歩がもたらされている。全般的な演算能力に影響を与える別の分野は、並列処理の分野であり、この分野には、複数の別個のプロセッサによる並列演算以上のものが含まれる。
並列処理という概念には、複数の別個のプロセッサの間でタスクを分担する能力が含まれるが、シングルプロセッサで複数のプログラムを並行して実行するためのスキームも含まれる。このスキームは、一般にマルチスレッディングと呼ばれる。
マルチスレッディングという概念は、次のように説明される。プロセッサの演算頻度が高まるにつれて、コンピュータシステムの演算につきものの待ち時間を感じさせないようにすることが、ますます困難になる。所与のアプリケーション内の命令の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命令である。さらにマイクロプロセッサ命令セットのオペコードスペースは、アーキテクチャ上の貴重なリソースであり、こうしたリソースは、とりわけRISC命令セット内では限定される可能性がある。したがって必要とされているのは、オペコードスペースを節約するために、FORK、JOIN、およびYIELDタイプの命令のうちの2つまたはそれ以上を組み合わせて、単一の命令デコードにするための手段である。
一態様では、本発明は、並行したプログラムスレッドを実行するように構成されているマイクロプロセッサで実行するためのyield命令を提供する。この命令は、スレッドの実行を一時停止するようマイクロプロセッサに指示するオペコードを含む。このyield命令は、そのスレッド内の命令である。この命令はまた、1つのレジスタを指定する1つのオペランドを含む。レジスタが、第1の所定の値を含む場合、マイクロプロセッサは、スレッドの実行を終了させる。レジスタが、第2の所定の値を含む場合、マイクロプロセッサは、実行用にスレッドを無条件にスケジュール変更する。レジスタが、所定の値のセット内の値を含む場合、マイクロプロセッサは、実行用にスレッドを条件付きでスケジュール変更する。この所定の値のセットは、第1および第2の所定の値を除く。
さらに別の態様では、本発明は、命令を含むプログラムスレッドの実行を選択的にスケジュールするかまたは終了させるよう、マイクロプロセッサに指示する命令を実行するためのマイクロプロセッサを提供する。マイクロプロセッサは、命令のオペランドを保存するためのレジスタと、そのレジスタに結合されているスケジューラとを含む。スケジューラは、オペランドが第1の所定の値である場合には、スレッドの実行を終了させ、またオペランドが第2の所定の値である場合には、実行用にスレッドをスケジュールする。
さらに別の態様では、本発明は、イベント信号を受け取るマイクロプロセッサ内でプログラムスレッドの実行を選択的に一時停止するかまたは終了させる方法を提供する。この方法は、プログラムスレッド内の命令を発行するステップを含む。その命令は、第1の所定の値、第2の所定の値、またはその第1および第2の所定の値を除く所定の値のセット内の値を指定する、1つのオペランドを指定する。このオペランドは、所定の値のセット内にある場合に、イベント信号の1つまたは複数を指定する。この方法は、オペランドが第1の所定の値である場合に、スレッドの実行を終了させるステップをさらに含む。この方法は、オペランドが第2の所定の値である場合に、スレッドの実行を無条件にスケジュール変更するステップをさらに含む。この方法は、オペランドが所定の値のセット内にある場合に、そのオペランドによって指定されたイベント信号の1つまたは複数のうちの少なくとも1つが真になるまで、スレッドの実行を一時停止するステップをさらに含む。
さらに別の態様では、本発明は、1つの処理システムを提供する。この処理システムは、複数の信号ソースと、その複数の信号ソースによって生成される複数の信号を受け取るために結合されているマイクロプロセッサとを含む。マイクロプロセッサは、プログラムスレッド内の命令を実行する。マイクロプロセッサは、命令のオペランドが第1の所定の値である場合には、スレッドの実行を終了させ、そうでない場合には、オペランドによって指定された複数の信号のうちの1つまたは複数の条件に基づいて実行用にスレッドをスケジュール変更する。
さらに別の態様では、本発明は、コンピューティングデバイスと共に使用するためのコンピュータプログラム製品を提供する。このコンピュータプログラム製品は、マイクロプロセッサに指示する命令を実行するためのマイクロプロセッサに、その命令を含むプログラムスレッドの実行を選択的にスケジュールさせるかまたは終了させるための、メディアで具体化されるコンピュータ可読プログラムコードを有する、コンピュータで使用可能なメディアを含む。このコンピュータ可読プログラムコードは、命令のオペランドを保存するレジスタを提供するための第1のプログラムコードを含む。このコンピュータ可読プログラムコードはまた、オペランドが第1の所定の値である場合には、スレッドの実行を終了させ、オペランドが第2の所定の値である場合には、実行用にスレッドをスケジュールする、レジスタに結合されている、スケジューラを提供するための第2のプログラムコードを含む。
さらに別の態様では、本発明は、伝送メディアで具体化されるコンピュータデータ信号を提供し、このコンピュータデータ信号は、命令を含むプログラムスレッドの実行を選択的にスケジュールするかまたは終了させるよう、マイクロプロセッサに指示する命令を実行するためのマイクロプロセッサを提供するための、コンピュータ可読プログラムコードを含む。このプログラムコードは、命令のオペランドを保存するレジスタを提供するための第1のプログラムコードを含む。このプログラムコードはまた、オペランドが第1の所定の値である場合には、スレッドの実行を終了させ、オペランドが第2の所定の値である場合には、実行用にスレッドをスケジュールする、レジスタに結合されている、スケジューラを提供するための第2のプログラムコードを含む。
このYIELD命令の利点は、きわめてわずかなオーバーヘッドで、典型的にはRISC方式における単一のクロックサイクルで、通常の場合はオペレーティングシステムの介入を必要とすることなく、プロセッサの実行を別のスレッドに明け渡すためのプログラム用の手段を提供することである。したがって、たとえば組み込みシステムは、割り込みサービスルーチンを別々のスレッドへと変換することができ、そのスレッドが、1つのYIELD命令を含み、そのYIELD命令が、割り込みソースが1つのイベントを示すまでスレッドを一時停止し、その時点でスレッドがスケジュール変更され、これによって、本質的にオーバーヘッドがゼロの割り込みサービスが達成される。有利なことに、このYIELD命令は、プログラムスレッドの実行を効率よく一時停止する能力と、プログラムスレッドの終了とを単一の命令に統合し、これによって命令セット内の貴重なオペコードスペースを節約する。最後に、このYIELD命令が、命令に対する入力オペランドの値に基づいて、スレッドを条件付きで終了させるための手段を提供するという事実によって、マルチスレッド化されたコードをよりコンパクトにすることができ、マイクロプロセッサパイプライン内でさらに効率よく実行することができる。
本発明の一実施形態では、プロセッサアーキテクチャは、互換プロセッサでマルチスレッディングを使用可能にする機能、関数、および命令を備える命令セットを含む。本発明は、いずれの特定のプロセッサアーキテクチャおよび命令セットにも限定されるものではないが、典型的な例として、よく知られているMIPSのアーキテクチャ、命令セット、およびプロセッサ技術(「MIPS技術」と総称する)を参照し、可能な限り詳細に後述する本発明の実施形態については、MIPS技術を伴うコンテキストにおいて説明する。MIPS技術に関するさらなる情報(以降で参照する資料を含む)は、(カリフォルニア州マウンテンビューにある)MIPS Technologies,Inc.およびウェブ上のwww.mips.com(同社のウェブサイト)から入手することができる。
本明細書で使用される「プロセッサ」および「デジタルプロセッサ」という用語は、ハードウェア(たとえばアプリケーション固有のシリコンチップ、FPGAなど)、ソフトウェア(たとえばハードウェア記述言語、C、C+など)、あるいはそれらのその他の任意のインスタンス化(または組合せ)において、プログラム可能な任意のデバイス(たとえばマイクロプロセッサ、マイクロコントローラ、デジタル信号プロセッサ、中央処理装置、プロセッサコアなど)を意味することを意図している。
本明細書で使用される「スレッド」および「プログラムスレッド」という用語は、同じ意味を有する。スレッドとは、コンピュータ命令のシーケンスと、それらの命令の実行に関連付けられているプロセッサの状態変化の関連付けられているシーケンスである。命令のシーケンスは、必ずしも常にではないが、通常は、分岐命令などの1つまたは複数のプログラム制御命令を含む。したがって命令は、連続したメモリアドレスを有する可能性もあり、あるいは有さない可能性もある。命令のシーケンスは、単一のプログラムから生じる。
概要
本発明の実施形態における記述のための「スレッドコンテキスト」とは、プロセッサ内での命令ストリームの実行の状態を記述するのに必要なプロセッサの状態の集合である。この状態は通常、プロセッサレジスタの内容に反映される。たとえば業界標準のMIPS32 Instruction Set Architecture、および/またはMIPS64 Instruction Set Architecture(「MIPS Processor」)と互換性のあるプロセッサでは、スレッドコンテキストは、汎用レジスタ(GPR)(general purpose register)、高低乗算器結果レジスタ、プログラムカウンタ(PC)(program counter)のある表示、および何らかの関連付けられた特権を有するシステム制御状態のセットを含む。システム制御状態は、通常は「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−スレッドをスケジュール解除し、条件付きで割り当て解除する(第1の実施形態)
YIELD命令によって、現在のスレッドが選択的にスケジュール解除される。第1の実施形態によるYIELD命令600のフォーマットが、図6に示されており、図32は、本発明の一実施形態におけるシステムによる、図6のYIELD命令の機能をアサートするオペレーションを示すフローチャート3200である。YIELD命令3500の第2の実施形態については、以降で図35から図40を参照して説明する。
YIELD命令600は、たとえばフィールド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命令600に続く命令において実行を再開する。この使用可能化は、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命令600内で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という資料でさらに説明されている。
YIELD600を実行した結果、プロセッサまたはVPEで最後に割り当てられたスレッドが割り当て解除された場合、CP0のThreadStatusレジスタ内のアンダーフロー表示(図18に示されており、以降で説明する)を伴うThread Exceptionが、YIELD命令600に生じる。
前述の実施形態は、YIELD命令600のGPR rs内に含まれているオペランドを、スレッドスケジューリングパラメータとして利用する。この場合、パラメータは、直交表示の15ビットベクトルとして処理される(図7を参照すると、ビット1および15が確保されているため、この実施形態においてコード化されている条件は、15個しかない)。この実施形態はまた、パラメータを指定の値として処理する(すなわち、所与のスレッドを、割り当て解除すべきかどうかを判断するために処理する。図32のステップ3202を参照されたい)。しかし、このようなパラメータの特性は、命令の別の実施形態に適合するように変更することができる。たとえば、スレッドをすぐにスケジュール変更できるかどうかを判断する上で最下位ビット(すなわちrs)に依存するのではなく、パラメータ自体の値(たとえば、2の補数形態でのマイナス1{−1}の値)を使用して、スレッドを、追加の遅延なしにスケジュール変更すべきかどうか(すなわち、スケジューリングのために再びキューに入れるべきかどうか)を判断することができる。
この命令のその他の実施形態は、このようなスレッドスケジューリングパラメータを、1つまたは複数のマルチビット値フィールドを含むものとして処理することができ、これによってスレッドは、大きな(たとえば32ビット以上の)イベントネームスペースからの単一のイベントでYIELDを行うように指定することができる。このような実施形態では、少なくとも、その1つのターゲットイベントに関連付けられているビットは、その従属するYIELD命令600によってアクセスされることになる。もちろん、特定の実施形態での要望に応じて、さらなるビットフィールドを、(さらなるイベントに関連付けられている)命令に渡すことができる。
YIELD命令600のその他の実施形態は、その命令によってアクセスされるスレッドスケジューリングパラメータ内における前述のビットベクトルおよび値フィールドの組合せや、(たとえば)特定の実装形態のニーズを満たすための、アプリケーションに固有のその他の修正および機能強化を含むことができる。YIELD命令600の代替実施形態は、上述のようなスレッドスケジューリングパラメータに、従来の任意の方法で、たとえば(図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例外を取る。ECONF命令は、図35から図40のMultithreading ASEの代替実施形態には含まれていない。
特権を有するリソース
図15のテーブル1500は、Multithreading ASEに関連するシステムコプロセッサの特権を有するリソースの概要をまとめたものである。特段の記載がない限り、以降で特定される新規のかつ修正されたコプロセッサゼロ(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をプログラムする。
YIELD−スレッドをスケジュール解除し、条件付きで割り当て解除する(第2の実施形態)
次いで図35を参照すると、本発明の代替実施形態によるYIELD命令3500のフォーマットを示すブロック図が示されている。図35のYIELD命令3500は、図示されているように、図6の命令600に類似している。しかし図35のYIELD命令3500は、2つの相違点を含む。第1に、以降で説明するように、rsフィールド3502によって指定されているレジスタに保存されている値の意味が、若干異なる。第2に、図35のYIELD命令3500はまた、第2のオペランドフィールドrd 3504を含む。図35の実施形態では、rdオペランドフィールド3504は、YIELD命令3500のビット11から15を含む。rdオペランドフィールド3504は、以降で説明するように、YIELD命令3500の完了時に、結果値を受け取るGPRなどの宛先レジスタを指定する。
次いで図36を参照すると、本発明の図35の代替実施形態による、図35のYIELD命令3500を実行するためのプロセッサコア3302のブロック図が示されている。図36のプロセッサコア3302は、図33のシステム3300のプロセッサコア3302に類似している。プロセッサコア3302は、図34のスケジューラ3400を含む。プロセッサコア3302はまた、図35のrsフィールド3502によって指定されるrsレジスタ3602、および図35のrdフィールド3504によって指定されるrdレジスタ3604、YQMask Register3606、31個の2つの入力のANDゲート3608のブロック、および制御ロジック3612を含む。
プロセッサコア3302は、YQ0〜YQ30と示されている、31個のYIELD Qualifier(YQ)入力3614を受け取る。YQ入力3614は、プロセッサコア3302の外部の回路によって生成される信号を受け取ることができ、これらの信号は、図33のI/Oデバイス3306などのI/Oデバイスによって生成される割り込み信号を含むが、それには限定されない。YQ入力3614は、プロセッサコア3302によって内部で生成される信号を受け取ることもでき、これらの信号は、ソフトウェア割り込み信号およびキャッシュミス信号を含むが、それらには限定されない。さらにYQ入力3614は、プロセッサコア3302の外部で生成される信号と内部で生成される信号との組合せを受け取ることができる。一実施形態では、1つの信号ソースを、プロセッサコア3302へのYQ入力3614と割り込み入力の双方に結合することができる。一実施形態では、YQ入力3614のうちの1つまたは複数を、1つの信号ソースに接続することはできないが、その代わりに、適切なように論理的な1または0の値に接続することができる。
簡単に図37を参照すると、図36のYQMask Register3606のフォーマットを示すブロック図が示されている。YQMask Register3606は、32ビットのレジスタである。ビット31はゼロである。ビット0〜30は、Maskフィールド3702を含む。Maskフィールド3702は、オペレーティングシステムなどのソフトウェアによってプログラムできるビットベクトルであり、YIELD命令3500を発行しているスレッドをスケジュール変更するための条件として、YQ入力3614のうちのどれが使用可能かを指定する。具体的には、YIELD命令3500が、YQMask Register3606内で指定されていないYQ入力3614を指定した場合、以降で説明するように、プロセッサコア3302は例外を立てる。一実施形態では、YQMaskレジスタ3606は、VPEごとに定義される。
再び図36を参照すると、ANDゲート3608のそれぞれは、その入力のうちの1つ上で、対応するYQ入力3614を受け取る。ANDゲート3608のそれぞれは、その他の入力で、YQMaskレジスタ3606内に保存されている31ビットベクトルの対応するビットを受け取る。ANDゲート3608の31個の出力ビットが、YIELD命令3500の完了時に、rdレジスタ3604内に保存するための1つのビットベクトルとして提供される。rdレジスタ3604の結果値は、図37に示されているように、アーキテクチャ上はYQ入力3614と同じビット構成および配置を有するように定義される。
本明細書で説明したように、rsレジスタ3602は、YIELD命令3500を発行しているスレッドをスケジュール変更すべき状況の記述子を保存する。具体的には、rsレジスタ3602は、正の値を含む場合、YQ入力3614のビットベクトルを指定する。rs3602ビットベクトル内で指定されているYQ入力3614のうちの1つが真である場合、プロセッサコア3302は、そのスレッドをスケジュール変更する。
制御ロジック3612は、YQ入力3614、YQMaskレジスタ3606のコンテンツ、およびrsレジスタ3602のコンテンツを受け取る。制御ロジック3612は、本明細書に記載されている機能を実行するように構成されている、組合せおよびシーケンシャルロジック、プログラマブルロジック、ソフトウェアなどを含むことができるが、それらには限定されない。制御ロジック3612は、例外信号3622、スレッド終了信号3624、スレッド一時停止信号3626、およびスレッドスケジュール変更信号3628を生成し、これらはすべてスケジューラ3400に提供される。一実施形態では、制御ロジック3612とスケジューラ3400は統合される。
例外信号3622は、YIELD命令3500によって例外が生じていることを示す。一実施形態では、rsレジスタ3602ビットベクトルの値が、YQMaskレジスタ3606内の対応するビットが空いているYQ入力3614を指定する場合に、YIELD命令3500によって例外が生じる。一実施形態では、そのスレッドが終了されるよう(すなわちゼロのrsレジスタ3602の値を介するよう)YIELD命令3500が指定している一方で、そのYIELD命令3500を発行しているスレッドが、動的に割り当て可能なスレッドではない場合、すなわちそのスレッドがワイヤードのスレッドである場合に、そのYIELD命令3500によって例外が生じる。一実施形態では、そのスレッドが終了されるよう(すなわちゼロのrsレジスタ3602の値を介するよう)、YIELD命令3500が指定している一方で、スケジューリングに利用できる他のスレッドがまったくない場合に、そのYIELD命令3500によって例外が生じる。
終了信号3624は、YIELD命令3500を発行しているスレッドを、終了させるべきであること、すなわち割り当て解除すべきであることを示す。プロセッサコア3302は、スレッドから命令をフェッチおよび発行することを停止することによって、そのスレッドを終了させる、すなわち割り当て解除する。さらにプロセッサコア3302は、それまでそのスレッドの実行用として割り当てられていたハードウェアの状態、またはリソース、すなわちスレッドコンテキストを解放して、その解放されたハードウェア状態を、別のスレッドによる割り当てに利用できるようにする。一実施形態では、ハードウェアリソースは、図15に示されているレジスタの一部などを含む、プログラムカウンタレジスタ、汎用レジスタのセット、乗算器結果レジスタ、および/あるいは1つまたは複数の特権を有するシステムコプロセッサリソースを含むことができるが、それらには限定されない。
一時停止信号3626は、YIELD命令3500を発行しているスレッドを、一時停止すべきであること、すなわちブロックすべきであることを示す。プロセッサコア3302は、スレッドから命令をフェッチおよび発行することを停止することによって、そのスレッドを一時停止する、すなわちブロックする。
スケジュール変更信号3628は、YIELD命令3500を発行しているスレッドを、スケジュール変更すべきであることを示す。プロセッサコア3302は、スレッドスケジューリングポリシーに従ってスレッドを実行に適格であると指定することによって、そのスレッドをスケジュール変更する。すなわちプロセッサコア3302は、そのスレッドをその時点で実行の準備が整っているスレッドのリストに追加し、これによってプロセッサコア3302は、そのスレッドのプログラムカウンタから命令をフェッチおよび発行するようスケジューラ3400に指定されると、その処理を開始する。
次いで図38を参照すると、本発明による図35の代替実施形態のYIELD命令3500を実行するための、図36のプロセッサコア3302のオペレーションを示すフローチャートが示されている。フローは、判定ブロック3802において開始する。
判定ブロック3802において、図36の制御ロジック3612は、rsレジスタ3602を点検して、その値がゼロであるかどうかを判定する。その値がゼロである場合、フローはブロック3804へ進み、その値がゼロではない場合、フローは判定ブロック3806へ進む。
ブロック3804において、制御ロジック3612は、図36の終了信号3624に真の値を生成して、そのスレッドを終了させる。すなわち、そのスレッドは、スケジュール変更されず、そのスレッドのコンテキストは、割り当て解除され、後続のFORK命令300による割り当て用として解放される。一実施形態では、YIELD命令3500がそのスレッドを終了させ、スケジューリングに利用できる他のスレッドがまったくない場合、プロセッサコア3302は例外を立てる。一実施形態では、プロセッサコア3302がそのスレッドを終了させた場合、rdレジスタ3604内には何の値も返されない。フローは、ブロック3804において終了する。
判定ブロック3806において、制御ロジック3612は、rsレジスタ3602を点検して、その値がマイナス1(−1)であるかどうかを判定する。その値がマイナス1である場合、フローはブロック3818へ進み、その値がマイナス1ではない場合、フローは判定ブロック3808へ進む。
ブロック3808において、制御ロジック3612は、rsレジスタ3602内に保存されているビットベクトルを、YQMask Register3606内に保存されているビットベクトルと比較する。一実施形態では、−1以外のrsレジスタ3602の負の値は確保され、したがってブロック3808において、rsレジスタ3602内に保存されている値は正の値であることがわかる。フローは、判定ブロック3812へ進む。
判定ブロック3812において、制御ロジック3612は、rsレジスタ3602内に設定されているビット0〜30のいずれかが、YQMask Register3606内の対応する空いているビットを有しているかどうかを判定する。対応する空いているビットを有している場合、フローはブロック3814へ進み、対応する空いているビットを有していない場合、フローは判定ブロック3816へ進む。
ブロック3814において、制御ロジック3612は、例外信号3622に真の値を生成して、そのスレッドが無効なYQ入力3614を指定されていることを示す。フローは、ブロック3814において終了する。
判定ブロック3816において、制御ロジック3612は、YQ入力3614を点検して、rsレジスタ3602に設定されているビットによって指定されているYQ入力3614が、すべて偽であるかどうかを判定する。rsレジスタ3602に設定されているビットによって指定されているYQ入力3614が、すべて偽である場合、フローは判定ブロック3816へ戻り、制御ロジック3612は、一時停止信号3626に引き続き真の値を生成して、rsレジスタ3602内の設定されているビットによって指定されているYQ入力3614のうちの1つが、真になるまで、そのスレッドを一時停止したままにする。rsレジスタ3602に設定されているビットによって指定されているYQ入力3614が、すべて偽というわけではない場合、フローはブロック3818へ進む。
ブロック3818において、制御ロジック3612は、図36のスケジュール変更信号3628に真の値を生成して、スケジューラ3400にスレッドをスケジュール変更させる。すなわち、そのスレッドは、次の機会のスケジューリングには適格であるが、スケジューラ3400に働きかけて、スケジューラ3400のスケジューリングポリシーに従って、最初に実行すべき他のスレッドのためにプロセッサコア3302を譲る。フローは、ブロック3822へ進む。
ブロック3822において、プロセッサコア3302は、YQMask Register3606の値によってマスクされたYQ入力3614の信号値、すなわち図36のANDゲートの出力を、rdレジスタ3604内に保存する。一実施形態では、YQ入力3614の信号値は、YIELD命令3500がプロセッサコア3302によって引き下げられる時点でサンプリングされる。フローは、ブロック3822において終了する。
一実施形態では、スケジューラ3400が、YIELD命令3500を含むスレッドをブロック3818においてスケジュール変更した後に、そのスレッドの実行を開始するまで、プロセッサコア3302はそのスレッド内の命令を発行しない。
図35〜図40では、YIELD命令3500への入力オペランドが、汎用レジスタすなわちrsレジスタ3602内に提供される一実施形態について説明しているが、他の実施形態では、入力オペランドは、メモリを介して、あるいは汎用以外のレジスタを介してなど、その他の手段を介して提供することができる。たとえば、プロセッサ3302が、レジスタベースのプロセッサである実施形態について説明してきたが、プロセッサが、Java(登録商標)バーチャルマシンコードを効率よく実行するように構成されているプロセッサなど、スタックベースのプロセッサであるその他の実施形態も考えられる。そのような実施形態では、YIELD命令3500の入力オペランドは、レジスタ内ではなくメモリ内のオペランドスタック内に指定することができる。たとえば、それぞれのスレッドコンテキストは、スタックポインタレジスタを含むことができ、YIELD命令3500のフィールドは、プロセッサのレジスタスペース内にレジスタを指定するのではなく、そのスタックポインタレジスタの値に関連してスタックメモリへのYIELD入力オペランドのオフセットを指定することができる。同様に、YIELD命令3500の戻り値は、レジスタ内ではなくオペランドスタックに戻すことができる。
上述の説明からわかるように、本発明のYIELD命令3500は、有利なことに、rs3602入力オペランドの値に基づいて、スレッドを条件付きで終了させるための手段を提供する。並列の、またはマルチスレッド化された計算においては、実行のスレッドを終了させる条件は、ランタイムに計算することができる。たとえばループは、満たすべき条件のセットに関してテストを行うことができ、これに応じてテストに基づいてループを選択的に終了させることができる。本発明のYIELD命令3500によって、スレッドは、rsレジスタ3602内にゼロまたはマイナス1のいずれかの値を生成する計算を実行することができ、その結果、スレッドは、rsレジスタ3602の値にYIELD命令3500を実行して、(ゼロで)終了するか、または(マイナス1で)継続し、分岐してループの最初に戻るかのいずれかとなる。さらなる比較および分岐命令を用いて、同様の効果を達成することもできるが、本発明の条件付きの値に基づくYIELD命令3500によって、マルチスレッド化されたコードをよりコンパクトにすることができ、マイクロプロセッサ100パイプライン内でさらに効率よく実行することができる。
上述の説明からわかるように、YQMask Register3606をプログラムして、rdレジスタ3604の戻り値を特定の方法で使用することによって、プログラムは、ブロックしているYIELD命令3500のオペレーションの2つの潜在的に有用なシミュレーションを実行することができる。
第1に、オペレーティングシステムは、特定のYQ入力3614でブロックするYIELD命令3500のオペレーションを、たとえそのYQ入力3614に接続される信号のハードウェアソースが存在していなくても、アプリケーションプログラムを修正することなく、シミュレートすることができる。このシミュレーションは、ハードウェア信号ソースの開発中に、あるいはそのプロトタイプの開発中に、アプリケーションプログラムをテストする上で役に立つ可能性がある。オペレーティングシステムは、欠けているYQ入力3614に対応するビットをクリアするように、YQMask Register3606をプログラムすることができ、これによって、rsレジスタ3602内に設定されている対応するビットを有するYIELD rd、rs3500は、例外を起こす。その例外に応答して、オペレーティングシステムは、「仮想の」YQ入力3614が真であるとシミュレートするのが妥当な時点まで、スレッドを一時停止する。その時点で、オペレーティングシステムは、YIELD命令3500のrdフィールド3504をデコードして、どのレジスタが、rdレジスタ3604として選択されたかを判断し、適切な値をrdレジスタ3604に書き込み、スレッドのプログラムカウンタをYIELD命令3500の直後の命令まで進め、スレッドの実行を再開する。アプリケーションプログラムにとっては、まるでYIELD命令3500が、指定されたYQ入力3614での真の値に応答してブロックし、待機し、スケジュール変更されているかのように見える。さらにオペレーティングシステムは、複数のプロセッサコア3302の間でロードバランシングを実行することなど、スレッドを1つのプロセッサコア3302から別のプロセッサコアへ移行する際に、プログラムオペレーションを保証するために、YQMask Register3606を採用することができる。
第2に、アプリケーションプログラムは、rsレジスタ3602によって指定されているYQ入力3614のセットが真になるまで、YIELD命令3500の実行をブロックすることによって、プロセッサコア3302がハードウェア内で実行するオペレーションをソフトウェア内で明確にシミュレートすることができる。このソフトウェアシミュレーションは、ハードウェアが、割り込み要求に応答して実行を割り込みサービスルーチンに移行できるようにすることよりも、むしろ割り込みを求めてポーリングを行うプログラムに類似している。通常の場合、すなわちシミュレーション以外の場合には、YQMask Register3606は、1つまたは複数のビットを設定され、YIELD rd、rs3500は、rsレジスタ3602内の対応するビットが設定された場合に実行されることを前提とする。プロセッサコア3302は、指定されているYQ入力3614のうちの1つが真になるまで、スレッドがYIELD命令3500を発行するのを一時停止する。このオペレーションをシミュレートするために、プログラムは、問題のYQ入力3614のセットを指定するビットベクトルをYQMask Register3606内に保存する。プログラムは、YIELD rd、rs3500を発行し、そこではrsレジスタ3602の値は−1であり、これによってスレッドは、ブロックすることなくスケジュール変更される。YIELD命令3500が完了した時点で、rdレジスタ3604内の戻り値には、YQMask Register3606内で指定されているYQ入力3614の信号値が含まれていることになる。次いでアプリケーションプログラムは、その戻り値をテストし、その戻り値がゼロである場合には、その戻り値がゼロ以外の値になるまで、YIELD命令3500にループバックする。したがって、−1というrsレジスタ3602の値を指定するYIELD命令3500は、YQ入力3614をポーリングまたはサンプリングする手段となり、これは、それ以外の場合には、YIELD命令3500を発行しているスレッドの実行をブロックするために、プロセッサコア3302のハードウェアによって使用されることになる。プログラムスレッドの実行は、依然として実際の指定されているYQ入力3614に基づいて制御されるが、ハードウェアによるスレッドのブロッキングは、プロセッサコア3302ではなくプログラム自体によってシミュレートされるという点に留意されたい。
次いで図39を参照すると、本発明の図35の代替実施形態によるYIELD命令3500を実行するための図36のプロセッサコア3302を含む、図33の処理システム3300などの処理システム3300を示すブロック図が示されている。システム3300は、信号3912を生成する信号ソース3908を含み、信号3912は、図33のI/Oデバイス3306によって生成される割り込み要求信号などであるが、それらには限定されない。
システム3300は、また、YQ入力管理ブロック3902を含む。YQ入力管理ブロック3902は、対応する多重通信回路3904を制御する31個のYQ Map Register3906を含む。図39の実施形態は、YQ Map Register 0 3906、YQ Map Register 1 3906、およびYQ Map Register 30 3906と表示されている、3つのYQ Map Register3906を示しており、それらの対応する多重通信回路3904の出力が、YQ入力0 3614、YQ入力1 3614、およびYQ入力30 3614にそれぞれ結合されている。多重通信回路3904のそれぞれは、信号ソース3908からの信号3912をすべて受け取り、そのそれぞれのYQ Map Register3906によって提供される選択入力に基づいて、そのそれぞれのYQ入力3614に提供するためにそれらの信号3912のうちの1つを選択する。一実施形態では、YQ Map Register3906は、プロセッサコア3302で実行されているプログラムによってプログラムすることができる。一実施形態では、YQ入力管理ブロック3902は、プロセッサコア3302の外部に存在するのではなく、プロセッサコア3302内に含まれる。別の実施形態では、YQ入力管理ブロック3902は、プロセッサコア3302に対するコプロセッサ内に含まれる。
次いで図40を参照すると、本発明による図35の代替実施形態の代替実施形態による図35のYIELD命令3500のrsフィールド3502内で指定されている、rsレジスタ3602のセマンティックを示すブロック図が示されている。図40の実施形態は、図36のYQ入力3614のうち31個ではなく4つのみを受け取る、プロセッサコア3302において採用される。この4つのYQ入力3614は、図39のYQ入力管理ブロックと同様のYQ入力管理ブロック3902内にプログラムされた値に基づいて選択される。一実施形態では、YQ入力管理ブロック3902は、プロセッサコア3302に対するコプロセッサ内に含まれる。一実施形態では、それぞれのスレッドコンテキストは、1つのYQ入力管理ブロック3902を含む。
rsレジスタ3602は、8つの4ビットフィールドに分割される。それらのフィールドのうちの4つは、反転マスクフィールドであり、INV3、INV2、INV1、およびINV0と表示されている。それらのフィールドのうちの4つは、AND対応タームフィールドであり、AND3、AND2、AND1、およびAND0と表示されている。図40に示されているテーブルは、これらのフィールドのそれぞれについて記述している。
制御ロジック3612は、rsレジスタ3602の値に基づいて、YQ入力3614に対して下記の操作を実行するための回路を含む。YQ入力3614の4つの値は、信号3912への自身のマッピングを、YQ入力管理ブロック3902によって制御され、4つの独立したXORゲートのセットに持ち込まれ、そこでは、対応するINVxフィールド内に設定されているビットを反転して、アクティブな高い値の条件付きのセットが作成される。4つの条件付きのクォリファイヤのそれぞれが、独立したn−Way ANDブロックに提供され、そこでは、関連付けられているANDxフィールドによって選択されたビットのセットが、インプリシットの1(すなわち1つのANDxビットのみが設定されている場合、出力は、対応する入力を追跡する)と共にAND処理されて、4つのゲート制御されたクォリファイヤのうちの1つが作成される。次いで4つのゲート制御されたクォリファイヤが、一緒にOR処理される。その結果がゼロ以外である場合、制御ロジック3612は、スケジュール変更信号3628に真の値を生成して、スレッドをスケジュール変更する。
一実施形態では、rdレジスタ3604内に保存される戻り値は、4つのゲート制御されたクォリファイヤの値のベクトルである。一実施形態では、戻り値は、rdレジスタ3604の最下位ビット内に保存される。別の実施形態では、戻り値は、2ビットだけ左にシフトされてアドレスオフセットを作成し、スケジュール変更の理由に基づいてソフトウェアの切り替えを容易にする。
図35の実施形態におけるように、rsレジスタ3602のゼロの値は、スレッドを終了させる。しかし、−1によって図35において指定されているスレッドの無条件のスケジュール変更を達成するために、rsレジスタ3602は、INVおよびANDマスクを使用した値を用いて、4つのYQ入力3614のうちの任意の「A」に関して(A)|(〜A)を作成するようにプログラムされる。
31個のYQ入力3614が提供される実施形態について説明し、また32ビットのアーキテクチャについて説明してきたが、本明細書に記載されているYIELD命令3500は、これらの実施形態に限定されるものではなく、さまざまな入力数およびレジスタサイズへと拡張または縮小することができる。
もちろん本出願に記載されている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命令用のフォーマットを示す図である。 本発明の第1の実施形態における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内ではスレッドによるスケジューリングを示す図である。 本発明の代替実施形態によるYIELD命令のフォーマットを示すブロック図である。 本発明の図35の代替実施形態による、図35のYIELD命令を実行するためのプロセッサコアを示すブロック図である。 図36のYQMask Registerのフォーマットを示すブロック図である。 本発明の図35の代替実施形態による、図35のYIELD命令を実行するための図36のプロセッサコアのオペレーションを示すフローチャートである。 本発明の図35の代替実施形態による、YIELD命令を実行するための図36のプロセッサコアを含む、図33の処理システムなどの処理システムを示すブロック図である。 本発明による代替実施形態による、図35のYIELD命令のrsレジスタのセマンティックを示すブロック図である。

Claims (82)

  1. マイクロプロセッサアーキテクチュアにおいて、yield命令セットを有するマイクロプロセッサであって、該マイクロプロセッサは、
    複数のプログラムスレッドの命令を同時に実行するように構成されたコアを含み
    マイクロプロセッサの命令セットに含まれるyield命令が、プログラムスレッドの命令の発行を一時停止するようマイクロプロセッサコアに指示するためのオペコードを含み、前記プログラムスレッドは、前記複数の同時に実行されるプログラムスレッドのうちの1つのプログラムスレッドであり、yield命令が、前記プログラムスレッド内の命令であり、
    前記マイクロプロセッサがさらに、
    第1のオペランドと、
    前記プログラムスレッドの他の命令によって使用可能な命令の結果値を受け取る宛先を特定するオペランドフィールドを含む第2のオペランドとを含み、前記第1のオペランドが第1の所定の値である場合には、マイクロプロセッサコアが、前記プログラムスレッドの命令を発行することを終了させ、前記第1のオペランドが第2の所定の値である場合には、マイクロプロセッサコアが、前記プログラムスレッドの命令を発行することを無条件にスケジュール変更する、マイクロプロセッサ。
  2. 前記第1のオペランドの値が、マイクロプロセッサのレジスタ内に保存されている、請求項1に記載のマイクロプロセッサ。
  3. 前記レジスタが、命令によって指定される複数の汎用レジスタのうちの1つである、請求項1に記載のマイクロプロセッサ。
  4. 前記第1のオペランドの値が、スタックメモリ内に保存されている、請求項1に記載のマイクロプロセッサ。
  5. 前記スレッドの命令を発行することをスケジュール変更するマイクロプロセッサが、スレッドスケジューリングポリシーに従って前記スレッドを命令の発行に適格であると指定するマイクロプロセッサを含む、請求項1に記載のマイクロプロセッサ。
  6. 前記第1のオペランドが所定の値のセット内の値である場合に、マイクロプロセッサが、前記スレッドの命令を発行することを条件付きでスケジュール変更し、前記所定の値のセットが、前記第1および第2の所定の値を除く、請求項1に記載のマイクロプロセッサ。
  7. 命令を発行するための前記スレッドを条件付きでスケジュール変更するマイクロプロセッサが、前記第1のオペランドによって指定された条件が満たされて初めて、スレッドスケジューリングポリシーに従って前記スレッドを命令の発行に適格であると指定するマイクロプロセッサを含む、請求項6に記載のマイクロプロセッサ。
  8. 前記第1のオペランドが、クォリファイヤの複数の入力の1つまたは複数を指定し、前記クォリファイヤの複数の入力の前記1つまたは複数のうちの少なくとも1つが真である場合に、前記条件が満たされる、請求項7に記載のマイクロプロセッサ。
  9. 前記結果値が、前記命令に応答してサンプリングされた前記クォリファイヤの複数の入力の状態を指定する、請求項8に記載のマイクロプロセッサ。
  10. 前記結果値が、1つのビットベクトルを含む、請求項9に記載のマイクロプロセッサ。
  11. 前記第1のオペランドが、マイクロプロセッサのプログラム可能なマスクレジスタ内で指定されていない、マイクロプロセッサによって受け取られた前記クォリファイヤの複数の入力のうちの1つまたは複数を指定する場合に、マイクロプロセッサが、yield命令に対して例外を立てる、請求項8に記載のマイクロプロセッサ。
  12. 前記所定の値のセットが、正の整数を含む、請求項6に記載のマイクロプロセッサ。
  13. 前記第2のオペランドの値が、マイクロプロセッサのレジスタ内に保存されている、請求項1に記載のマイクロプロセッサ。
  14. 前記レジスタが、命令によって指定される複数の汎用レジスタのうちの1つである、請求項13に記載のマイクロプロセッサ。
  15. 前記第2のオペランドの値が、スタックメモリ内に保存されている、請求項1に記載のマイクロプロセッサ。
  16. 前記オペコードが、前記スレッドの命令をフェッチすることを一時停止するようにマイクロプロセッサコアに指示する、請求項1に記載のマイクロプロセッサ。
  17. 前記第1のオペランドが前記第1の所定の値である場合に、マイクロプロセッサコアが、前記スレッド内の命令をフェッチすることを終了させる、請求項1に記載のマイクロプロセッサ。
  18. 前記第1のオペランドが前記第1の所定の値である場合に、マイクロプロセッサコアが、それまで前記スレッドの実行用として割り当てられていたハードウェアリソースを解放して、前記解放されたハードウェアリソースを、別のスレッドによる割り当てに利用できるようにするマイクロプロセッサを含む、請求項1に記載のマイクロプロセッサ。
  19. 前記ハードウェアリソースが、プログラムカウンタレジスタを含む、請求項18に記載のマイクロプロセッサ。
  20. 前記ハードウェアリソースが、汎用レジスタのセットを含む、請求項18に記載のマイクロプロセッサ。
  21. 前記第1の所定の値が、ゼロ(0)である、請求項1に記載のマイクロプロセッサ。
  22. 前記第2の所定の値が、マイナス1(−1)である、請求項1に記載のマイクロプロセッサ。
  23. 前記スレッドが、プログラム命令のシーケンスを含む、請求項1に記載のマイクロプロセッサ。
  24. 前記スレッドが、前記プログラム命令のシーケンスの実行に関連付けられているマイクロプロセッサの状態変化のシーケンスをさらに含む、請求項23に記載のマイクロプロセッサ。
  25. マイクロプロセッサ内でプログラムスレッドの実行を選択的に一時停止するかまたは終了させる方法であって、
    プログラムスレッド内に、1つのオペランドを指定する命令であってマイクロプロセッサの命令セット内の命令である命令を発行するステップと、
    オペランドが第1の所定の値である場合に、スレッドの実行を終了させるステップと、
    オペランドが第2の所定の値である場合に、スレッドの命令を発行することを無条件にスケジュール変更するステップとを含み、前記第1の所定の値と前記第2の所定の値が異なり、
    前記マイクロプロセッサは、独立して生じる複数のイベントを示すイベント信号を監視するように構成されており、前記オペランドが前記第1および第2の所定の値を除く所定の値のセットにある場合に、1つまたは複数のイベント信号を指定しており、
    オペランドが所定の値のセットにある場合に、オペランドによって指定される1つまたは複数のイベント信号のうちの少なくとも1つが真になるまで、スレッドの命令を発行することを一時停止するステップと、
    前記発行することの後に、1つまたは複数のイベント信号の値をサンプリングするステップと、
    命令の結果値としてサンプリングされた値を保存するステップとを含む、方法。
  26. サンプリングされた値を保存する前記ステップが、サンプリングされた値を、命令によって指定された結果レジスタ内に保存するステップを含み、前記結果レジスタ内に保存された前記サンプリングされた値はプログラムスレッドの他の命令によって使用可能である、請求項25に記載の方法。
  27. オペランドによって指定されたイベント信号の1つまたは複数のうちのすべてが、マイクロプロセッサのマスクレジスタ内でも指定されているかどうかを判定するステップと、
    オペランドによって指定されたイベント信号の1つまたは複数のうちのすべてより少ないイベント信号が、マスクレジスタ内でイネーブルされていない場合に、命令に対して例外を立てるステップとをさらに含む、請求項25に記載の方法。
  28. オペランドによって指定されたイベント信号の1つまたは複数のうちの少なくとも1つが真になると、スレッドの命令を発行するためのスレッドをスケジュール変更するステップをさらに含む、請求項25に記載の方法。
  29. 第1の所定の値が、ゼロ(0)であり、第2の所定の値が、マイナス1(−1)であり、所定の値のセットが、正の整数を含む、請求項25に記載の方法。
  30. オペランドが第1の所定の値である場合に、それまでスレッドに割り当てられていたスレッドコンテキストを、新たなスレッドによるその後の使用のために解放するステップをさらに含む、請求項25に記載の方法。
  31. 第1の所定の値が、ゼロ(0)であり、第2の所定の値が、マイナス1(−1)である、請求項25に記載の方法。
  32. 前記yield命令は、メモリ以外にアクセスする命令である、請求項1に記載のマイクロプロセッサ。
  33. 前記クォリファイヤの複数の入力は、対応する複数の、独立して生じるイベントを示す複数の信号を受信するように構成される、請求項8に記載のマイクロプロセッサ。
  34. 前記対応する複数の独立して生じるイベントの少なくとも1つが生じた場合に、マイクロプロセッサコアは、前記yield命令の直後に、前記スレッドの命令を発行することを再開する、請求項33に記載のマイクロプロセッサ。
  35. 前記複数の、独立して生じるイベントは少なくとも4つの独立して生じるイベントを含む、請求項33に記載のマイクロプロセッサ。
  36. 前記ビットベクトルは、前記クォリファイヤの複数の入力に対応する複数のビットを含み、前記クォリファイヤの複数の入力は、対応する複数の信号を受信するように構成されており、複数の信号は対応する複数のイベント信号を示す、請求項10に記載のマイクロプロセッサ。
  37. 前記複数の、独立して生じるイベントは、メモリ以外にアクセスするイベントを含む、請求項25に記載の方法。
  38. 前記複数の、独立して生じるイベントは少なくとも4つの独立して生じるイベントを含む、請求項25に記載の方法。
  39. 前記イベント信号はメモリ以外にアクセスする信号である、請求項38に記載の方法。
  40. 前記スケジュール変更することの後に、前記イベントを処理するためのイベント処理ルーチンを実行することでなく、前記命令の直後にスレッドの命令を発行することを再開することをさらに含む、請求項28に記載の方法。
  41. コアに複数のプログラムスレッドの命令を同時に実行させる第1の処理と、
    マイクロプロセッサの命令セットに含まれる、yield命令を提供するための第2の処理とを含み、yield命令は、
    プログラムスレッドの命令を発行することを一時停止するようにマイクロプロセッサコアに指示するためのオペコードを含み、前記プログラムスレッドは、前記複数の同時に実行されるプログラムスレッドのうちの1つであり、yield命令は前記プログラムスレッド内の命令であり、yield命令はさらに、
    第1のオペランドと、
    プログラムスレッドの他の命令によって使用可能である命令の結果値を受け取る宛先を特定するオペランドフィールドを含む第2のオペランドとを含み、
    前記第1のオペランドが、第1の所定の値である場合に、マイクロプロセッサコアは前記プログラムスレッドの命令を発行することを終了ており、前記第1のオペランドが、第2の所定の値である場合に、マイクロプロセッサコアは前記プログラムスレッドの命令を発行することを無条件にスケジュール変更する、コンピュータに実行させるプログラム。
  42. 前記第1のオペランドが所定の値のセット内の値である場合に、マイクロプロセッサは命令を発行するための前記スレッドを条件付でスケジュール変更しており、前記所定の値のセットは前記第1および第2の所定の値を含まない、請求項41に記載のプログラム。
  43. 前記第1のオペランドは、クオリファイヤの1つまたは複数の入力を指定しており、前記条件は、クオリファイヤの1つまたは複数の入力のうちの少なくとも1つが真である場合に満たされる、請求項41に記載のプログラム。
  44. 前記結果値は、前記命令に応答して、サンプリングされる、前記クオリファイヤの複数の入力の状態を指定する、請求項43に記載のプログラム。
  45. 前記結果値はビットベクトルを含む、請求項44に記載のプログラム。
  46. 前記ビットベクトルは、前記クオリファイヤの複数の入力に対応する複数のビットを含み、前記クオリファイヤの複数の入力は、対応する複数の信号を受信するように構成されており、複数の信号は対応する複数のイベント信号を示す、請求項45に記載のプログラム。
  47. 前記第1のオペランドが、マイクロプロセッサのプログラム可能なマスクレジスタにおいて指定されていない、マイクロプロセッサによって受信される、前記クオリファイヤの複数の入力のうちの1または複数の入力を指定する場合に、マイクロプロセッサはyield命令に対して例外を立てる、請求項43に記載のプログラム。
  48. 前記命令は、メモリ以外にアクセスする命令である、請求項43に記載のプログラム。
  49. 命令セットアーキテクチュア内に命令を有するマイクロプロセッサであって、
    複数のプログラムスレッドの命令を同時に実行するように構成されたコアと、
    命令セットアーキテクチュア内に含まれるyield命令とを含み、yield命令は、
    プログラムスレッドの命令を発行することを一時停止するようにマイクロプロセッサコアに指示するためのオペコードを含み、前記プログラムスレッドは、前記複数の同時に実行されるプログラムスレッドのうちの1つであり、yield命令は前記プログラムスレッド内の命令であり、yield命令はさらに、
    第1のオペランドを含み、
    前記オペランドが、第1の所定の値である場合に、マイクロプロセッサコアは前記プログラムスレッドの命令を発行することを終了しており、前記オペランドが、第2の所定の値である場合に、マイクロプロセッサコアは前記プログラムスレッドの命令を発行することを無条件にスケジュール変更しており、
    前記オペランドが所定の値のセット内の値である場合に、マイクロプロセッサは命令を発行するための前記プログラムスレッドを条件付でスケジュール変更しており、
    前記所定の値のセットは前記第1および第2の所定の値を含んでおらず、
    マイクロプロセッサが命令を発行するために条件付きでスケジュール変更することは、前記オペランドによって指定される条件が満たされた後のみに、マイクロプロセッサがスレッドスケジューリングポリシーに付される命令の発行に適格な前記プログラムスレッドを指定することを含み、
    前記オペランドは、クオリファイヤの複数の入力のうちの1つまたは複数の入力を指定しており、
    前記クオリファイヤの複数の入力のうちの1つまたは複数の入力の少なくとも1つが真である場合に、前記条件は満たされており、
    前記オペランドが、マイクロプロセッサのプログラム可能なマスクレジスタにおいて指定されていない、マイクロプロセッサによって受信される、前記クオリファイヤの複数の入力のうちの1または複数の入力を指定する場合に、マイクロプロセッサはyield命令に対して例外を立てる、マイクロプロセッサ。
  50. 前記オペランドの値は、マイクロプロセッサのレジスタに保存される、請求項49に記載のマイクロプロセッサ。
  51. 前記レジスタは、命令によって指定される複数の汎用レジスタのうちの1つである、請求項50に記載のマイクロプロセッサ。
  52. 前記オペランドの値は、スタックメモリに保存される、請求項49に記載のマイクロプロセッサ。
  53. マイクロプロセッサが前記スレッドの命令をスケジュール変更することは、スレッドスケジューリングポリシーに付される命令の発行に適格な前記スレッドを指定することを含む、請求項49に記載のマイクロプロセッサ。
  54. 前記yield命令は、
    プログラムスレッドの他の命令によって使用可能である命令の結果値を受信するための第2のオペランドを含み、前記結果値は、前記命令に応答して、サンプリングされる、前記クオリファイヤの複数の入力の状態を指定する、請求項49に記載のマイクロプロセッサ。
  55. 前記結果値はビットベクトルを含む、請求項54に記載のマイクロプロセッサ。
  56. 前記所定の値のセットは正の整数を含む、請求項49に記載のマイクロプロセッサ。
  57. 前記yield命令は、プログラムスレッドの他の命令によって使用可能である命令の結果値を受信するための第2のオペランドを含む、請求項49に記載のマイクロプロセッサ。
  58. 前記第2のオペランドの値は、マイクロプロセッサのレジスタに保存される、請求項57に記載のマイクロプロセッサ。
  59. 前記レジスタは、命令によって指定される複数の汎用レジスタのうちの1つである、請求項58に記載のマイクロプロセッサ。
  60. 前記第2のオペランドの値は、スタックメモリに保存される、請求項57に記載のマイクロプロセッサ。
  61. 前記オペコードが、前記スレッドの命令をフェッチすることを一時停止するようにマイクロプロセッサコアに指示する、請求項49に記載のマイクロプロセッサ。
  62. 前記オペランドが前記第1の所定の値である場合に、マイクロプロセッサコアが、前記スレッド内の命令をフェッチすることを終了させる、請求項49に記載のマイクロプロセッサ。
  63. 前記オペランドが前記第1の所定の値である場合に、マイクロプロセッサコアが、それまで前記スレッドの実行用として割り当てられていたハードウェアリソースを解放して、前記解放されたハードウェアリソースを、別のスレッドによる割り当てに利用できるようにするマイクロプロセッサを含む、請求項49に記載のマイクロプロセッサ。
  64. 前記ハードウェアリソースが、プログラムカウンタレジスタを含む、請求項63に記載のマイクロプロセッサ。
  65. 前記ハードウェアリソースが、汎用レジスタのセットを含む、請求項63に記載のマイクロプロセッサ。
  66. 前記第1の所定の値が、ゼロ(0)である、請求項49に記載のマイクロプロセッサ。
  67. 前記第2の所定の値が、マイナス1(−1)である、請求項49に記載のマイクロプロセッサ。
  68. 前記スレッドが、プログラム命令のシーケンスを含む、請求項49に記載のマイクロプロセッサ。
  69. 前記スレッドが、前記プログラム命令のシーケンスの実行に関連付けられているマイクロプロセッサの状態変化のシーケンスをさらに含む、請求項68に記載のマイクロプロセッサ。
  70. マイクロプロセッサ内でプログラムスレッドの実行を選択的に一時停止するかまたは終了させる方法であって、
    オペランドを指定する命令であってマイクロプロセッサの命令セット内の命令である命令をプログラムスレッド内で発行するステップと、
    オペランドが第1の所定の値である場合に、プログラムスレッドの実行を終了させるステップと、
    オペランドが第2の所定の値である場合に、プログラムスレッドの命令を発行することを無条件にスケジュール変更するステップとを含み、前記第1の所定の値と前記第2の所定の値とは異なり、
    前記マイクロプロセッサは、独立して生じる複数のイベントを示すイベント信号を監視するように構成されており、前記オペランドが前記第1および第2の所定の値を除く所定の値のセットにある場合に、1つまたは複数のイベント信号を指定しており、
    オペランドが所定の値のセットにある場合に、オペランドによって指定される1つまたは複数のイベント信号のうちの少なくとも1つが真になるまで、プログラムスレッドの命令を発行することを一時停止するステップと、
    オペランドによって指定される1つまたは複数のイベント信号のすべてがマイクロプロセッサのマスクレジスタにおいても指定されるかどうかを判定するステップと、
    オペランドによって指定される1つまたは複数のイベント信号のすべてより少ないイベント信号がマスクレジスタ内でエネーブルにされる場合に、命令に対して例外を立てるステップとを含む、方法。
  71. 前記発行することの後に、1つまたは複数のイベント信号の値をサンプリングするステップと、
    命令の結果値としてサンプリングされた値を保存するステップとをさらに含む、請求項70に記載の方法。
  72. サンプリングされた値を保存する前記ステップが、サンプリングされた値を、命令によって指定された結果レジスタ内に保存するステップを含み、前記結果レジスタ内に保存された前記サンプリングされた値はプログラムスレッドの他の命令によって使用可能である、請求項71に記載の方法。
  73. オペランドによって指定されたイベント信号の1つまたは複数のうちの少なくとも1つが真になると、スレッドの命令を発行するためのスレッドをスケジュール変更するステップをさらに含む、請求項70に記載の方法。
  74. 第1の所定の値が、ゼロ(0)であり、第2の所定の値が、マイナス1(−1)であり、所定の値のセットが、正の整数を含む、請求項70に記載の方法。
  75. オペランドが第1の所定の値である場合に、それまでに割り当てられていたスレッドコンテキストを、新たなスレッドによるその後の使用のために解放するステップをさらに含む、請求項70に記載の方法。
  76. 第1の所定の値が、ゼロ(0)であり、第2の所定の値が、マイナス1(−1)である、請求項70に記載の方法。
  77. コアに複数のプログラムスレッドの命令を同時に実行させる第1の処理と、
    マイクロプロセッサの命令セットに含まれる、yield命令を提供するための第2の処理とを含み、yield命令は、
    プログラムスレッドの命令を発行することを一時停止するようにマイクロプロセッサコアに指示するためのオペコードを含み、前記プログラムスレッドは、前記複数の同時に実行されるプログラムスレッドのうちの1つであり、yield命令は前記プログラムスレッド内の命令であり、yield命令はさらに、
    オペランドを含み、前記オペランドが、第1の所定の値である場合に、マイクロプロセッサコアは前記プログラムスレッドの命令を発行することを終了しており、前記オペランドが、第2の所定の値である場合に、マイクロプロセッサコアは前記プログラムスレッドの命令を発行することを無条件にスケジュール変更しており、
    前記オペランドが所定の値のセット内の値である場合に、マイクロプロセッサは命令を発行するための前記プログラムスレッドを条件付でスケジュール変更しており、前記所定の値のセットは前記第1および第2の所定の値を含んでおらず、前記オペランドは、クオリファイヤの1つまたは複数の入力を指定しており、前記条件は、クオリファイヤの1つまたは複数の入力のうちの少なくとも1つが真である場合に満たされており、前記オペランドが、マイクロプロセッサのプログラム可能なマスクレジスタにおいて指定されていない、マイクロプロセッサによって受信される、前記クオリファイヤの複数の入力のうちの1または複数の入力を指定する場合に、マイクロプロセッサはyield命令に対して例外を立てる、コンピュータに実行させるプログラム。
  78. 前記yield命令は、プログラムスレッドの他の命令によって使用可能である命令の結果値を受信するための第2のオペランドをさらに含み、前記結果値は、前記命令に応答して、サンプリングされる、前記クオリファイヤの複数の入力の状態を指定する、請求項77に記載のプログラム。
  79. 前記結果値はビットベクトルを含む、請求項78に記載のプログラム。
  80. 前記ビットベクトルは、前記クオリファイヤの複数の入力に対応する複数のビットを含み、前記クオリファイヤの複数の入力は、対応する複数の信号を受信するように構成されており、複数の信号は対応する複数のイベント信号を示す、請求項79に記載のプログラム。
  81. 前記yield命令は、プログラムスレッドの他の命令によって使用可能である命令の結果値を受信するための第2のオペランドをさらに含む、請求項77に記載のプログラム。
  82. 前記命令は、メモリ以外にアクセスする命令である、請求項77記載のプログラム。
JP2006524929A 2003-08-28 2004-08-27 プロセッサ内での実行の計算スレッドを一時停止して割り当て解除するための統合されたメカニズム Expired - Fee Related JP4818919B2 (ja)

Applications Claiming Priority (11)

Application Number Priority Date Filing Date Title
US49918003P 2003-08-28 2003-08-28
US60/499,180 2003-08-28
US50235903P 2003-09-12 2003-09-12
US50235803P 2003-09-12 2003-09-12
US60/502,358 2003-09-12
US60/502,359 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
US10/684,350 US7376954B2 (en) 2003-08-28 2003-10-10 Mechanisms for assuring quality of service for programs executing on a multithreaded processor
US10/684,350 2003-10-10
US10/684,348 2003-10-10
PCT/US2004/028108 WO2005022381A2 (en) 2003-08-28 2004-08-27 Integrated mechanism for suspension and deallocation of computational threads of execution in a processor

Publications (2)

Publication Number Publication Date
JP2007504539A JP2007504539A (ja) 2007-03-01
JP4818919B2 true JP4818919B2 (ja) 2011-11-16

Family

ID=34624066

Family Applications (3)

Application Number Title Priority Date Filing Date
JP2006524929A Expired - Fee Related JP4818919B2 (ja) 2003-08-28 2004-08-27 プロセッサ内での実行の計算スレッドを一時停止して割り当て解除するための統合されたメカニズム
JP2006524868A Expired - Fee Related JP4818918B2 (ja) 2003-08-28 2004-08-27 マルチスレッド化されたマイクロプロセッサで並行命令ストリームを開始する命令
JP2006524900A Expired - Fee Related JP4740851B2 (ja) 2003-08-28 2004-08-27 仮想プロセッサリソースの動的構成のための機構体

Family Applications After (2)

Application Number Title Priority Date Filing Date
JP2006524868A Expired - Fee Related JP4818918B2 (ja) 2003-08-28 2004-08-27 マルチスレッド化されたマイクロプロセッサで並行命令ストリームを開始する命令
JP2006524900A Expired - Fee Related JP4740851B2 (ja) 2003-08-28 2004-08-27 仮想プロセッサリソースの動的構成のための機構体

Country Status (5)

Country Link
US (6) US7694304B2 (ja)
EP (3) EP1660998A1 (ja)
JP (3) JP4818919B2 (ja)
DE (1) DE602004017879D1 (ja)
WO (1) WO2005022381A2 (ja)

Families Citing this family (229)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
FR2836407B1 (fr) * 2002-02-28 2004-05-14 Thermagen Procede de fabrication d'emballage metallique
US7627721B2 (en) * 2002-10-08 2009-12-01 Rmi Corporation Advanced processor with cache coherency
KR100591755B1 (ko) * 2003-07-22 2006-06-22 삼성전자주식회사 복수의 스레드를 동시에 처리하는 장치 및 방법
US7711931B2 (en) 2003-08-28 2010-05-04 Mips Technologies, Inc. Synchronized storage providing multiple synchronization semantics
US7418585B2 (en) 2003-08-28 2008-08-26 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
US7594089B2 (en) 2003-08-28 2009-09-22 Mips Technologies, Inc. Smart memory based synchronization controller for a multi-threaded multiprocessor SoC
US7870553B2 (en) 2003-08-28 2011-01-11 Mips Technologies, Inc. Symmetric multiprocessor operating system for execution on non-independent lightweight thread contexts
US20050050305A1 (en) * 2003-08-28 2005-03-03 Kissell Kevin D. Integrated mechanism for suspension and deallocation of computational threads of execution in a processor
US7849297B2 (en) 2003-08-28 2010-12-07 Mips Technologies, Inc. Software emulation of directed exceptions in a multithreading processor
JP4818919B2 (ja) * 2003-08-28 2011-11-16 ミップス テクノロジーズ インコーポレイテッド プロセッサ内での実行の計算スレッドを一時停止して割り当て解除するための統合されたメカニズム
US9032404B2 (en) 2003-08-28 2015-05-12 Mips Technologies, Inc. Preemptive multitasking employing software emulation of directed exceptions in a multithreading processor
US7376954B2 (en) * 2003-08-28 2008-05-20 Mips Technologies, Inc. Mechanisms for assuring quality of service for programs executing on a multithreaded processor
US8775112B2 (en) 2003-09-15 2014-07-08 Nvidia Corporation System and method for increasing die yield
US8732644B1 (en) 2003-09-15 2014-05-20 Nvidia Corporation Micro electro mechanical switch system and method for testing and configuring semiconductor functional circuits
US8775997B2 (en) 2003-09-15 2014-07-08 Nvidia Corporation System and method for testing and configuring semiconductor functional circuits
US20050094551A1 (en) * 2003-09-25 2005-05-05 Broadcom Corporation Processor instruction for DMT encoding
US7903810B2 (en) * 2003-09-26 2011-03-08 Broadcom Corporation Single instruction for data scrambling
US7756273B2 (en) * 2003-09-26 2010-07-13 Broadcom Corporation System and method for bit-reversing and scrambling payload bytes in an asynchronous transfer mode cell
US7751557B2 (en) * 2003-09-26 2010-07-06 Broadcom Corporation Data de-scrambler
US6897871B1 (en) 2003-11-20 2005-05-24 Ati Technologies Inc. Graphics processing architecture employing a unified shader
US8711161B1 (en) 2003-12-18 2014-04-29 Nvidia Corporation Functional component compensation reconfiguration system and method
US7770169B2 (en) * 2004-05-17 2010-08-03 Oracle America, Inc. Thread rendezvous for read-only code in an object-oriented computing environment
EP1622009A1 (en) * 2004-07-27 2006-02-01 Texas Instruments Incorporated JSM architecture and systems
US7890735B2 (en) * 2004-08-30 2011-02-15 Texas Instruments Incorporated Multi-threading processors, integrated circuit devices, systems, and processes of operation and manufacture
US7320063B1 (en) 2005-02-04 2008-01-15 Sun Microsystems, Inc. Synchronization primitives for flexible scheduling of functional unit operations
US8723231B1 (en) 2004-09-15 2014-05-13 Nvidia Corporation Semiconductor die micro electro-mechanical switch management system and method
US8711156B1 (en) * 2004-09-30 2014-04-29 Nvidia Corporation Method and system for remapping processing elements in a pipeline of a graphics processing unit
US7203100B2 (en) 2004-11-01 2007-04-10 Sun Mircosystems, Inc. Efficient implementation of a read scheme for multi-threaded register file
US7707578B1 (en) 2004-12-16 2010-04-27 Vmware, Inc. Mechanism for scheduling execution of threads for fair resource allocation in a multi-threaded and/or multi-core processing system
US20060136919A1 (en) * 2004-12-17 2006-06-22 Sun Microsystems, Inc. System and method for controlling thread suspension in a multithreaded processor
US8539211B2 (en) * 2005-01-25 2013-09-17 Nytell Software LLC Allocating registers for loop variables in a multi-threaded processor
US8254411B2 (en) * 2005-02-10 2012-08-28 International Business Machines Corporation Data processing system, method and interconnect fabric having a flow governor
US7483422B2 (en) * 2005-02-10 2009-01-27 International Business Machines Corporation Data processing system, method and interconnect fabric for selective link information allocation in a data processing system
US7743233B2 (en) * 2005-04-05 2010-06-22 Intel Corporation Sequencer address management
US7389403B1 (en) * 2005-08-10 2008-06-17 Sun Microsystems, Inc. Adaptive computing ensemble microprocessor architecture
US7721151B2 (en) * 2005-08-30 2010-05-18 Cisco Technology, Inc. Selective error recovery of processing complex using privilege-level error discrimination
US7844971B2 (en) * 2005-09-28 2010-11-30 Intel Corporation Method and apparatus for detecting cross-thread stack access in multithreaded programs
US8185895B2 (en) * 2005-11-30 2012-05-22 International Business Machines Corporation Method, apparatus and program storage device for providing an anchor pointer in an operating system context structure for improving the efficiency of accessing thread specific data
KR100663709B1 (ko) * 2005-12-28 2007-01-03 삼성전자주식회사 재구성 아키텍처에서의 예외 처리 방법 및 장치
US8108863B2 (en) 2005-12-30 2012-01-31 Intel Corporation Load balancing for multi-threaded applications via asymmetric power throttling
US20070226795A1 (en) * 2006-02-09 2007-09-27 Texas Instruments Incorporated Virtual cores and hardware-supported hypervisor integrated circuits, systems, methods and processes of manufacture
KR100714710B1 (ko) * 2006-02-22 2007-05-04 삼성전자주식회사 입출력 작업에 의해 블로킹된 스레드를 강제 종료하는 장치및 방법
KR100770034B1 (ko) * 2006-03-02 2007-10-26 삼성전자주식회사 복수의 레지스터 파일을 이용한 문맥 교환 방법 및 시스템
GB0605383D0 (en) * 2006-03-17 2006-04-26 Williams Paul N Processing system
US7802073B1 (en) * 2006-03-29 2010-09-21 Oracle America, Inc. Virtual core management
WO2007115429A1 (en) * 2006-03-31 2007-10-18 Intel Corporation Managing and supporting multithreaded resources for native code in a heterogeneous managed runtime environment
EP2477109B1 (en) 2006-04-12 2016-07-13 Soft Machines, Inc. Apparatus and method for processing an instruction matrix specifying parallel and dependent operations
US7912889B1 (en) * 2006-06-16 2011-03-22 Nvidia Corporation Mapping the threads of a CTA to the elements of a tile for efficient matrix multiplication
US7792895B1 (en) * 2006-06-16 2010-09-07 Nvidia Corporation Efficient matrix multiplication on a parallel processing device
US8046775B2 (en) * 2006-08-14 2011-10-25 Marvell World Trade Ltd. Event-based bandwidth allocation mode switching method and apparatus
US7650465B2 (en) * 2006-08-18 2010-01-19 Mips Technologies, Inc. Micro tag array having way selection bits for reducing data cache access power
US7657708B2 (en) * 2006-08-18 2010-02-02 Mips Technologies, Inc. Methods for reducing data cache access power in a processor using way selection bits
US9665970B2 (en) * 2006-09-19 2017-05-30 Imagination Technologies Limited Variable-sized concurrent grouping for multiprocessing
US7594079B2 (en) 2006-09-29 2009-09-22 Mips Technologies, Inc. Data cache virtual hint way prediction, and applications thereof
US20080082793A1 (en) * 2006-09-29 2008-04-03 Mips Technologies, Inc. Detection and prevention of write-after-write hazards, and applications thereof
US9946547B2 (en) 2006-09-29 2018-04-17 Arm Finance Overseas Limited Load/store unit for a processor, and applications thereof
US7493436B2 (en) * 2006-10-26 2009-02-17 International Business Machines Corporation Interrupt handling using simultaneous multi-threading
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
EP2527972A3 (en) 2006-11-14 2014-08-06 Soft Machines, Inc. Apparatus and method for processing complex instruction formats in a multi- threaded architecture supporting various context switch modes and virtualization schemes
US7975272B2 (en) * 2006-12-30 2011-07-05 Intel Corporation Thread queuing method and apparatus
US8321849B2 (en) * 2007-01-26 2012-11-27 Nvidia Corporation Virtual architecture and instruction set for parallel thread computing
JP5595633B2 (ja) * 2007-02-26 2014-09-24 スパンション エルエルシー シミュレーション方法及びシミュレーション装置
US9367321B2 (en) * 2007-03-14 2016-06-14 Xmos Limited Processor instruction set for controlling an event source to generate events used to schedule threads
US8219789B2 (en) * 2007-03-14 2012-07-10 XMOS Ltd. Interface processor
US8095782B1 (en) * 2007-04-05 2012-01-10 Nvidia Corporation Multiple simultaneous context architecture for rebalancing contexts on multithreaded processing cores upon a context change
US7979683B1 (en) * 2007-04-05 2011-07-12 Nvidia Corporation Multiple simultaneous context architecture
US8521993B2 (en) * 2007-04-09 2013-08-27 Intel Corporation Providing thread fairness by biasing selection away from a stalling thread using a stall-cycle counter in a hyper-threaded microprocessor
US8261049B1 (en) 2007-04-10 2012-09-04 Marvell International Ltd. Determinative branch prediction indexing
US7681020B2 (en) * 2007-04-18 2010-03-16 International Business Machines Corporation Context switching and synchronization
WO2008132761A2 (en) * 2007-04-26 2008-11-06 Hewlett-Packard Development Company L.P. Method and system for managing heap across process replication
US7797512B1 (en) 2007-07-23 2010-09-14 Oracle America, Inc. Virtual core management
US8132170B2 (en) * 2007-08-07 2012-03-06 International Business Machines Corporation Call stack sampling in a data processing system
JP5043560B2 (ja) * 2007-08-24 2012-10-10 パナソニック株式会社 プログラム実行制御装置
US20090063881A1 (en) * 2007-08-31 2009-03-05 Mips Technologies, Inc. Low-overhead/power-saving processor synchronization mechanism, and applications thereof
US8782779B2 (en) * 2007-09-26 2014-07-15 Hewlett-Packard Development Company, L.P. System and method for achieving protected region within computer system
US20090089031A1 (en) * 2007-09-28 2009-04-02 Rockwell Automation Technologies, Inc. Integrated simulation of controllers and devices
US20090089234A1 (en) * 2007-09-28 2009-04-02 Rockwell Automation Technologies, Inc. Automated code generation for simulators
US8548777B2 (en) * 2007-09-28 2013-10-01 Rockwell Automation Technologies, Inc. Automated recommendations from simulation
US20090089029A1 (en) * 2007-09-28 2009-04-02 Rockwell Automation Technologies, Inc. Enhanced execution speed to improve simulation performance
US8069021B2 (en) * 2007-09-28 2011-11-29 Rockwell Automation Technologies, Inc. Distributed simulation and synchronization
US7801710B2 (en) * 2007-09-28 2010-09-21 Rockwell Automation Technologies, Inc. Simulation controls for model variability and randomness
US20090100249A1 (en) * 2007-10-10 2009-04-16 Eichenberger Alexandre E Method and apparatus for allocating architectural register resources among threads in a multi-threaded microprocessor core
US8724483B2 (en) 2007-10-22 2014-05-13 Nvidia Corporation Loopback configuration for bi-directional interfaces
US8321840B2 (en) * 2007-12-27 2012-11-27 Intel Corporation Software flow tracking using multiple threads
US20090210873A1 (en) * 2008-02-15 2009-08-20 International Business Machines Corporation Re-tasking a managed virtual machine image in a virtualization data processing system
WO2009101976A1 (ja) * 2008-02-15 2009-08-20 Nec Corporation プログラム並列化装置、プログラム並列化方法及びプログラム並列化プログラム
EP2257874A4 (en) 2008-03-27 2013-07-17 Rocketick Technologies Ltd DESIGN SIMULATION ON THE BASIS OF PARALLEL PROCESSORS
JP4996519B2 (ja) * 2008-03-27 2012-08-08 パナソニック株式会社 仮想マルチプロセッサ、システムlsi、携帯電話機器、及び仮想マルチプロセッサの制御方法
US8566830B2 (en) * 2008-05-16 2013-10-22 Microsoft Corporation Local collections of tasks in a scheduler
US8561072B2 (en) * 2008-05-16 2013-10-15 Microsoft Corporation Scheduling collections in a scheduler
WO2009153977A1 (ja) * 2008-06-19 2009-12-23 パナソニック株式会社 マルチプロセッサ
US9032377B2 (en) * 2008-07-10 2015-05-12 Rocketick Technologies Ltd. Efficient parallel computation of dependency problems
US20100011357A1 (en) * 2008-07-13 2010-01-14 International Business Machines Corporation System and method for garbage collection in a virtual machine
US20100017583A1 (en) * 2008-07-15 2010-01-21 International Business Machines Corporation Call Stack Sampling for a Multi-Processor System
US9418005B2 (en) 2008-07-15 2016-08-16 International Business Machines Corporation Managing garbage collection in a data processing system
US8024732B2 (en) * 2008-07-28 2011-09-20 Microsoft Corporation State separation for application changes
US9449314B2 (en) * 2008-10-02 2016-09-20 International Business Machines Corporation Virtualization of a central processing unit measurement facility
US7827321B2 (en) * 2008-10-02 2010-11-02 International Business Machines Corporation Central processing unit measurement facility
US8209559B2 (en) * 2008-12-24 2012-06-26 Intel Corporation Low power polling techniques
WO2010095182A1 (ja) * 2009-02-17 2010-08-26 パナソニック株式会社 マルチスレッドプロセッサ及びデジタルテレビシステム
JP2010204874A (ja) * 2009-03-03 2010-09-16 Nec Corp スレッド制御システム、方法及びプログラム
US8561040B2 (en) * 2009-03-10 2013-10-15 Oracle America, Inc. One-pass compilation of virtual instructions
US9250973B2 (en) * 2009-03-12 2016-02-02 Polycore Software, Inc. Apparatus and associated methodology of generating a multi-core communications topology
US8910171B2 (en) * 2009-04-27 2014-12-09 Lsi Corporation Thread synchronization in a multi-thread network communications processor architecture
US9444757B2 (en) 2009-04-27 2016-09-13 Intel Corporation Dynamic configuration of processing modules in a network communications processor architecture
US9461930B2 (en) 2009-04-27 2016-10-04 Intel Corporation Modifying data streams without reordering in a multi-thread, multi-flow network processor
US20100333071A1 (en) * 2009-06-30 2010-12-30 International Business Machines Corporation Time Based Context Sampling of Trace Data with Support for Multiple Virtual Machines
US8593472B1 (en) * 2009-07-31 2013-11-26 Nvidia Corporation System and method for accessing a frame buffer via a storage driver
US10169072B2 (en) * 2009-09-23 2019-01-01 Nvidia Corporation Hardware for parallel command list generation
GB2474521B (en) * 2009-10-19 2014-10-15 Ublox Ag Program flow control
US20110173420A1 (en) * 2010-01-08 2011-07-14 International Business Machines Corporation Processor resume unit
US8447960B2 (en) * 2010-01-08 2013-05-21 International Business Machines Corporation Pausing and activating thread state upon pin assertion by external logic monitoring polling loop exit time condition
KR101644800B1 (ko) * 2010-01-07 2016-08-02 삼성전자주식회사 컴퓨팅 시스템 및 방법
US9331869B2 (en) 2010-03-04 2016-05-03 Nvidia Corporation Input/output request packet handling techniques by a device specific kernel mode driver
US9176783B2 (en) 2010-05-24 2015-11-03 International Business Machines Corporation Idle transitions sampling with execution context
JP5548037B2 (ja) * 2010-06-11 2014-07-16 パナソニック株式会社 命令発行制御装置及び方法
US8843684B2 (en) 2010-06-11 2014-09-23 International Business Machines Corporation Performing call stack sampling by setting affinity of target thread to a current process to prevent target thread migration
US8516492B2 (en) * 2010-06-11 2013-08-20 International Business Machines Corporation Soft partitions and load balancing
US8799872B2 (en) 2010-06-27 2014-08-05 International Business Machines Corporation Sampling with sample pacing
US8667253B2 (en) 2010-08-04 2014-03-04 International Business Machines Corporation Initiating assist thread upon asynchronous event for processing simultaneously with controlling thread and updating its running status in status register
CN103080921B (zh) 2010-08-30 2015-11-25 富士通株式会社 多核处理器系统、同步控制系统、同步控制装置、信息生成方法
EP2616928B1 (en) 2010-09-17 2016-11-02 Soft Machines, Inc. Single cycle multi-branch prediction including shadow cache for early far branch prediction
US8713290B2 (en) 2010-09-20 2014-04-29 International Business Machines Corporation Scaleable status tracking of multiple assist hardware threads
US8793474B2 (en) 2010-09-20 2014-07-29 International Business Machines Corporation Obtaining and releasing hardware threads without hypervisor involvement
US8572628B2 (en) 2010-12-02 2013-10-29 International Business Machines Corporation Inter-thread data communications in a computer processor
US8561070B2 (en) * 2010-12-02 2013-10-15 International Business Machines Corporation Creating a thread of execution in a computer processor without operating system intervention
JP5780243B2 (ja) * 2011-01-07 2015-09-16 富士通株式会社 スケジューリング方法、およびマルチコアプロセッサシステム
US8799904B2 (en) 2011-01-21 2014-08-05 International Business Machines Corporation Scalable system call stack sampling
WO2012135041A2 (en) 2011-03-25 2012-10-04 Soft Machines, Inc. Register file segments for supporting code block execution by using virtual cores instantiated by partitionable engines
EP2689327B1 (en) 2011-03-25 2021-07-28 Intel Corporation Executing instruction sequence code blocks by using virtual cores instantiated by partitionable engines
EP2689326B1 (en) 2011-03-25 2022-11-16 Intel Corporation Memory fragments for supporting code block execution by using virtual cores instantiated by partitionable engines
US9128748B2 (en) 2011-04-12 2015-09-08 Rocketick Technologies Ltd. Parallel simulation using multiple co-simulators
US9158592B2 (en) * 2011-05-02 2015-10-13 Green Hills Software, Inc. System and method for time variant scheduling of affinity groups comprising processor core and address spaces on a synchronized multicore processor
WO2012162188A2 (en) 2011-05-20 2012-11-29 Soft Machines, Inc. Decentralized allocation of resources and interconnect structures to support the execution of instruction sequences by a plurality of engines
CN103649931B (zh) 2011-05-20 2016-10-12 索夫特机械公司 用于支持由多个引擎执行指令序列的互连结构
US9026630B2 (en) 2011-06-14 2015-05-05 Vmware, Inc. Managing resources in a distributed system using dynamic clusters
US8856784B2 (en) 2011-06-14 2014-10-07 Vmware, Inc. Decentralized management of virtualized hosts
US8701107B2 (en) 2011-06-14 2014-04-15 Vmware, Inc. Decentralized management of virtualized hosts
CN103765376B (zh) * 2011-06-16 2017-05-31 想象技术有限公司 具有无阻塞并行架构的图形处理器
CN104809058B (zh) * 2011-06-17 2018-05-18 阿里巴巴集团控股有限公司 一种在测试执行中动态调度并发数量的方法及装置
US8695010B2 (en) * 2011-10-03 2014-04-08 International Business Machines Corporation Privilege level aware processor hardware resource management facility
CN102495726B (zh) * 2011-11-15 2015-05-20 无锡德思普科技有限公司 机会多线程方法及处理器
KR101832679B1 (ko) 2011-11-22 2018-02-26 소프트 머신즈, 인크. 마이크로프로세서 가속 코드 최적화기
KR101703401B1 (ko) 2011-11-22 2017-02-06 소프트 머신즈, 인크. 다중 엔진 마이크로프로세서용 가속 코드 최적화기
FR2984554B1 (fr) * 2011-12-16 2016-08-12 Sagemcom Broadband Sas Bus logiciel
WO2013100959A1 (en) * 2011-12-28 2013-07-04 Intel Corporation Processor accelerator interface virtualization
CN104081344B (zh) * 2012-01-31 2017-10-31 西门子公司 用于运行处理器的方法
JP5894496B2 (ja) * 2012-05-01 2016-03-30 ルネサスエレクトロニクス株式会社 半導体装置
US9003218B2 (en) 2012-05-21 2015-04-07 International Business Machines Corporation Power shifting in multicore platforms by varying SMT levels
US9223687B2 (en) 2012-06-15 2015-12-29 International Business Machines Corporation Determining the logical address of a transaction abort
US9311101B2 (en) 2012-06-15 2016-04-12 International Business Machines Corporation Intra-instructional transaction abort handling
US9262320B2 (en) 2012-06-15 2016-02-16 International Business Machines Corporation Tracking transactional execution footprint
US9298469B2 (en) * 2012-06-15 2016-03-29 International Business Machines Corporation Management of multiple nested transactions
US9298631B2 (en) 2012-06-15 2016-03-29 International Business Machines Corporation Managing transactional and non-transactional store observability
US9904625B2 (en) 2013-03-15 2018-02-27 Intel Corporation Methods, systems and apparatus for predicting the way of a set associative cache
US10275255B2 (en) 2013-03-15 2019-04-30 Intel Corporation Method for dependency broadcasting through a source organized source view data structure
US9632825B2 (en) 2013-03-15 2017-04-25 Intel Corporation Method and apparatus for efficient scheduling for asymmetrical execution units
US9569216B2 (en) 2013-03-15 2017-02-14 Soft Machines, Inc. Method for populating a source view data structure by using register template snapshots
US9891924B2 (en) 2013-03-15 2018-02-13 Intel Corporation Method for implementing a reduced size register view data structure in a microprocessor
WO2014150971A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for dependency broadcasting through a block organized source view data structure
WO2014150991A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for implementing a reduced size register view data structure in a microprocessor
US9811342B2 (en) 2013-03-15 2017-11-07 Intel Corporation Method for performing dual dispatch of blocks and half blocks
US9886279B2 (en) 2013-03-15 2018-02-06 Intel Corporation Method for populating and instruction view data structure by using register template snapshots
WO2014150806A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for populating register view data structure by using register template snapshots
KR20150130510A (ko) 2013-03-15 2015-11-23 소프트 머신즈, 인크. 네이티브 분산된 플래그 아키텍처를 이용하여 게스트 중앙 플래그 아키텍처를 에뮬레이션하는 방법
US10140138B2 (en) 2013-03-15 2018-11-27 Intel Corporation Methods, systems and apparatus for supporting wide and efficient front-end operation with guest-architecture emulation
KR102063656B1 (ko) * 2013-03-15 2020-01-09 소프트 머신즈, 인크. 블록들로 그룹화된 멀티스레드 명령어들을 실행하기 위한 방법
US10534421B2 (en) 2013-06-13 2020-01-14 Microsoft Technology Licensing, Llc Virtual per-processor timers for multiprocessor systems
US9367325B2 (en) * 2013-06-29 2016-06-14 Intel Corporation Common architecture state presentation for processor having processing cores of different types
US9251071B2 (en) 2013-08-30 2016-02-02 Apple Inc. Concurrent inline cache optimization in accessing dynamically typed objects
US9477628B2 (en) * 2013-09-28 2016-10-25 Intel Corporation Collective communications apparatus and method for parallel systems
GB2526018B (en) * 2013-10-31 2018-11-14 Silicon Tailor Ltd Multistage switch
US9830206B2 (en) * 2013-12-18 2017-11-28 Cray Inc. Cross-thread exception handling
US9558000B2 (en) 2014-02-06 2017-01-31 Optimum Semiconductor Technologies, Inc. Multithreading using an ordered list of hardware contexts
US9766894B2 (en) 2014-02-06 2017-09-19 Optimum Semiconductor Technologies, Inc. Method and apparatus for enabling a processor to generate pipeline control signals
US10102004B2 (en) 2014-03-27 2018-10-16 International Business Machines Corporation Hardware counters to track utilization in a multithreading computer system
US9354883B2 (en) 2014-03-27 2016-05-31 International Business Machines Corporation Dynamic enablement of multithreading
US9195493B2 (en) * 2014-03-27 2015-11-24 International Business Machines Corporation Dispatching multiple threads in a computer
US9772867B2 (en) 2014-03-27 2017-09-26 International Business Machines Corporation Control area for managing multiple threads in a computer
US9921848B2 (en) 2014-03-27 2018-03-20 International Business Machines Corporation Address expansion and contraction in a multithreading computer system
US9594660B2 (en) 2014-03-27 2017-03-14 International Business Machines Corporation Multithreading computer system and program product for executing a query instruction for idle time accumulation among cores
US9213569B2 (en) 2014-03-27 2015-12-15 International Business Machines Corporation Exiting multiple threads in a computer
US9417876B2 (en) 2014-03-27 2016-08-16 International Business Machines Corporation Thread context restoration in a multithreading computer system
US9804846B2 (en) * 2014-03-27 2017-10-31 International Business Machines Corporation Thread context preservation in a multithreading computer system
US9223574B2 (en) 2014-03-27 2015-12-29 International Business Machines Corporation Start virtual execution instruction for dispatching multiple threads in a computer
GB201406392D0 (en) * 2014-04-09 2014-05-21 Advanced Risc Mach Ltd Data processing systems
US9652262B2 (en) * 2014-10-09 2017-05-16 The Regents Of The University Of Michigan Operation parameter control based upon queued instruction characteristics
US9733987B2 (en) * 2015-02-20 2017-08-15 Intel Corporation Techniques to dynamically allocate resources of configurable computing resources
US9747108B2 (en) * 2015-03-27 2017-08-29 Intel Corporation User-level fork and join processors, methods, systems, and instructions
US20160381050A1 (en) 2015-06-26 2016-12-29 Intel Corporation Processors, methods, systems, and instructions to protect shadow stacks
RU2609744C1 (ru) * 2015-10-05 2017-02-02 Олег Александрович Козелков Логический процессор
US20170139740A1 (en) * 2015-11-12 2017-05-18 Futurewei Technologies, Inc. Systems and Methods for Real Time Context Based Isolation and Virtualization
US10394556B2 (en) 2015-12-20 2019-08-27 Intel Corporation Hardware apparatuses and methods to switch shadow stack pointers
US10592252B2 (en) 2015-12-31 2020-03-17 Microsoft Technology Licensing, Llc Efficient instruction processing for sparse data
US10459727B2 (en) 2015-12-31 2019-10-29 Microsoft Technology Licensing, Llc Loop code processor optimizations
US10430580B2 (en) 2016-02-04 2019-10-01 Intel Corporation Processor extensions to protect stacks during ring transitions
US10318356B2 (en) * 2016-03-31 2019-06-11 International Business Machines Corporation Operation of a multi-slice processor implementing a hardware level transfer of an execution thread
US10558463B2 (en) 2016-06-03 2020-02-11 Synopsys, Inc. Communication between threads of multi-thread processor
US10628320B2 (en) 2016-06-03 2020-04-21 Synopsys, Inc. Modulization of cache structure utilizing independent tag array and data array in microprocessor
US10318302B2 (en) * 2016-06-03 2019-06-11 Synopsys, Inc. Thread switching in microprocessor without full save and restore of register file
US10249017B2 (en) * 2016-08-11 2019-04-02 Intel Corporation Apparatus and method for shared resource partitioning through credit management
US10552158B2 (en) 2016-08-18 2020-02-04 Synopsys, Inc. Reorder buffer scoreboard having multiple valid bits to indicate a location of data
US10613859B2 (en) 2016-08-18 2020-04-07 Synopsys, Inc. Triple-pass execution using a retire queue having a functional unit to independently execute long latency instructions and dependent instructions
US10678599B2 (en) * 2016-09-13 2020-06-09 Rockley Photonics Limited Hardware efficient system and method for load balancing using a random number
US10552212B2 (en) * 2016-11-28 2020-02-04 Arm Limited Data processing
US10579499B2 (en) * 2017-04-04 2020-03-03 International Business Machines Corporation Task latency debugging in symmetric multiprocessing computer systems
US10353826B2 (en) * 2017-07-14 2019-07-16 Arm Limited Method and apparatus for fast context cloning in a data processing system
US10565126B2 (en) 2017-07-14 2020-02-18 Arm Limited Method and apparatus for two-layer copy-on-write
US10592424B2 (en) 2017-07-14 2020-03-17 Arm Limited Range-based memory system
US10613989B2 (en) 2017-07-14 2020-04-07 Arm Limited Fast address translation for virtual machines
US10489304B2 (en) 2017-07-14 2019-11-26 Arm Limited Memory address translation
US10534719B2 (en) 2017-07-14 2020-01-14 Arm Limited Memory system for a data processing network
US10467159B2 (en) 2017-07-14 2019-11-05 Arm Limited Memory node controller
GB2565338B (en) * 2017-08-10 2020-06-03 Mips Tech Llc Fault detecting and fault tolerant multi-threaded processors
US20190065199A1 (en) 2017-08-31 2019-02-28 MIPS Tech, LLC Saving and restoring non-contiguous blocks of preserved registers
US11269782B2 (en) * 2018-03-28 2022-03-08 Intel Corporation Address space identifier management in complex input/output virtualization environments
US10884850B2 (en) 2018-07-24 2021-01-05 Arm Limited Fault tolerant memory system
US10740104B2 (en) * 2018-08-16 2020-08-11 International Business Machines Corporation Tagging target branch predictors with context with index modification and late stop fetch on tag mismatch
CN110955503B (zh) * 2018-09-27 2023-06-27 深圳市创客工场科技有限公司 任务调度方法及装置
GB2580327B (en) * 2018-12-31 2021-04-28 Graphcore Ltd Register files in a multi-threaded processor
US11080062B2 (en) 2019-01-12 2021-08-03 MIPS Tech, LLC Address manipulation using indices and tags
GB2581821B (en) * 2019-02-28 2021-06-30 Advanced Risc Mach Ltd Conditional yield to hypervisor instruction
US11474861B1 (en) * 2019-11-27 2022-10-18 Meta Platforms Technologies, Llc Methods and systems for managing asynchronous function calls
US11294709B2 (en) 2020-02-18 2022-04-05 Nxp Usa, Inc. System and method of obtaining multiple factor performance gain in processing system
GB202012418D0 (en) * 2020-08-10 2020-09-23 Nordic Semiconductor Asa Processing apparatus
US11586443B2 (en) * 2020-10-20 2023-02-21 Micron Technology, Inc. Thread-based processor halting
US20230058935A1 (en) * 2021-08-18 2023-02-23 Micron Technology, Inc. Managing return parameter allocation

Citations (1)

* 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> 命令スレッドを処理するための方法およびシステム

Family Cites Families (147)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US578142A (en) * 1897-03-02 Jacob fierz
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 入出力割込処理方式
DE3688506T2 (de) 1986-08-13 1993-09-09 Toshiba Machine Co Ltd Datenverarbeitungsanlage.
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
US5159686A (en) 1988-02-29 1992-10-27 Convex Computer Corporation Multi-processor computer system having process-independent communication register addressing
US5428754A (en) * 1988-03-23 1995-06-27 3Dlabs Ltd Computer system with clock shared between processors executing separate instruction streams
WO1990014629A2 (en) 1989-05-26 1990-11-29 Massachusetts Institute Of Technology Parallel multithreaded data processing system
US5253308A (en) * 1989-06-21 1993-10-12 Amber Engineering, Inc. Massively parallel digital image data processor using pixel-mapped input/output and relative indexed addressing
US5148538A (en) * 1989-10-20 1992-09-15 International Business Machines Corporation Translation look ahead based cache access
US5247694A (en) * 1990-06-14 1993-09-21 Thinking Machines Corporation System and method for generating communications arrangements for routing data in a massively parallel 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
US5301298A (en) * 1991-10-11 1994-04-05 Intel Corporation Processor for multiple cache coherent protocols
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
US5784589A (en) * 1993-10-18 1998-07-21 Cyrix Corporation Distributed free register tracking for register renaming using an availability tracking register associated with each stage of an execution pipeline
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
SE9404294D0 (sv) * 1994-12-09 1994-12-09 Ellemtel Utvecklings Ab sätt och anordning vid telekommunikation
JP3169779B2 (ja) 1994-12-19 2001-05-28 日本電気株式会社 マルチスレッドプロセッサ
US6128720A (en) 1994-12-29 2000-10-03 International Business Machines Corporation Distributed processing array with component processors performing customized interpretation of instructions
US5812811A (en) 1995-02-03 1998-09-22 International Business Machines Corporation Executing speculative parallel instructions threads with forking and inter-thread communication
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
US5835748A (en) 1995-12-19 1998-11-10 Intel Corporation Method for executing different sets of instructions that cause a processor to perform different data type operations on different physical registers files that logically appear to software as a single aliased register file
US5706514A (en) 1996-03-04 1998-01-06 Compaq Computer Corporation Distributed execution of mode mismatched commands in multiprocessor computer systems
US5892934A (en) 1996-04-02 1999-04-06 Advanced Micro Devices, Inc. Microprocessor configured to detect a branch to a DSP routine and to direct a DSP to execute said routine
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
JP2882475B2 (ja) 1996-07-12 1999-04-12 日本電気株式会社 スレッド実行方法
US5812830A (en) * 1996-11-14 1998-09-22 Hewlett-Packard Company Debug system with raw mode trigger capability
US5854922A (en) * 1997-01-16 1998-12-29 Ford Motor Company Micro-sequencer apparatus and method of combination state machine and instruction memory
US5949994A (en) 1997-02-12 1999-09-07 The Dow Chemical Company Dedicated context-cycling computer with timed context
US6314511B2 (en) * 1997-04-03 2001-11-06 University Of Washington Mechanism for freeing registers on processors that perform dynamic out-of-order execution of instructions using renaming registers
US6067608A (en) * 1997-04-15 2000-05-23 Bull Hn Information Systems Inc. High performance mechanism for managing allocation of virtual memory buffers to virtual processes on a least recently used basis
US6175916B1 (en) 1997-05-06 2001-01-16 Microsoft Corporation Common-thread inter-process function calls invoked by jumps to invalid addresses
US5870597A (en) * 1997-06-25 1999-02-09 Sun Microsystems, Inc. Method for speculative calculation of physical register addresses in an out of order processor
US6658447B2 (en) * 1997-07-08 2003-12-02 Intel Corporation Priority based simultaneous multi-threading
US6128641A (en) * 1997-09-12 2000-10-03 Siemens Aktiengesellschaft Data processing unit with hardware assisted context switching capability
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
US5923892A (en) * 1997-10-27 1999-07-13 Levy; Paul S. Host processor and coprocessor arrangement for processing platform-independent code
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
US6647508B2 (en) 1997-11-04 2003-11-11 Hewlett-Packard Development Company, L.P. Multiprocessor computer architecture with multiple operating system instances and software controlled resource allocation
US6014737A (en) * 1997-11-19 2000-01-11 Sony Corporation Of Japan Method and system for allowing a processor to perform read bypassing while automatically maintaining input/output data integrity
US6189083B1 (en) * 1998-02-26 2001-02-13 Compaq Computer Corporation Method and apparatus for accessing a cache memory utilization distingushing bit RAMs
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
US6092175A (en) * 1998-04-02 2000-07-18 University Of Washington Shared register storage mechanisms for multithreaded computer systems with out-of-order execution
JP3611964B2 (ja) * 1998-04-16 2005-01-19 富士通株式会社 記憶装置、記憶制御方法及び記憶媒体
JP3209205B2 (ja) 1998-04-28 2001-09-17 日本電気株式会社 プロセッサにおけるレジスタ内容の継承装置
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
US6189064B1 (en) * 1998-11-09 2001-02-13 Broadcom Corporation Graphics display system with unified memory architecture
US6952827B1 (en) 1998-11-13 2005-10-04 Cray Inc. User program and operating system interface in a multithreaded environment
US6286027B1 (en) * 1998-11-30 2001-09-04 Lucent Technologies Inc. Two step thread creation with register renaming
US6205543B1 (en) * 1998-12-03 2001-03-20 Sun Microsystems, Inc. Efficient handling of a large register file for context switching
US7020879B1 (en) * 1998-12-16 2006-03-28 Mips Technologies, Inc. Interrupt and exception handling for multi-streaming digital processors
US6401155B1 (en) 1998-12-22 2002-06-04 Philips Electronics North America Corporation Interrupt/software-controlled thread processing
US7275246B1 (en) 1999-01-28 2007-09-25 Ati International Srl Executing programs for a first computer architecture on a computer of a second architecture
US7111290B1 (en) 1999-01-28 2006-09-19 Ati International Srl Profiling program execution to identify frequently-executed portions and to assist binary translation
US6330656B1 (en) 1999-03-31 2001-12-11 International Business Machines Corporation PCI slot control apparatus with dynamic configuration for partitioned systems
JP5285828B2 (ja) * 1999-04-09 2013-09-11 ラムバス・インコーポレーテッド 並列データ処理装置
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
US6986137B1 (en) 1999-09-28 2006-01-10 International Business Machines Corporation Method, system and program products for managing logical processors of a computing environment
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
US6671795B1 (en) 2000-01-21 2003-12-30 Intel Corporation Method and apparatus for pausing execution in a processor or the like
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
US20010052053A1 (en) 2000-02-08 2001-12-13 Mario Nemirovsky Stream processing unit for a multi-streaming processor
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
US6957432B2 (en) 2000-03-21 2005-10-18 Microsoft Corporation Real-time scheduler
US20010034751A1 (en) 2000-04-21 2001-10-25 Shinichiro Eto Real-time OS simulator
US6668308B2 (en) * 2000-06-10 2003-12-23 Hewlett-Packard Development Company, L.P. Scalable architecture based on single-chip multiprocessing
US6480845B1 (en) 2000-06-14 2002-11-12 Bull Hn Information Systems Inc. Method and data processing system for emulating virtual memory working spaces
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
US6941353B1 (en) 2000-06-29 2005-09-06 Auran Holdings Pty Ltd E-commerce system and method relating to program objects
SE522271C2 (sv) * 2000-07-05 2004-01-27 Ericsson Telefon Ab L M Förfarande och anordning i kopplingsnod för ett telesystem
AU2001289045A1 (en) 2000-09-08 2002-03-22 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
US6643759B2 (en) 2001-03-30 2003-11-04 Mips Technologies, Inc. Mechanism to extend computer memory protection schemes
US6671791B1 (en) * 2001-06-15 2003-12-30 Advanced Micro Devices, Inc. Processor including a translation unit for selectively translating virtual addresses of different sizes using a plurality of paging tables and mapping mechanisms
JP3630118B2 (ja) 2001-07-12 2005-03-16 日本電気株式会社 スレッド終了方法及び装置並びに並列プロセッサシステム
JP3702813B2 (ja) * 2001-07-12 2005-10-05 日本電気株式会社 マルチスレッド実行方法及び並列プロセッサシステム
JP3702814B2 (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
US7428485B2 (en) * 2001-08-24 2008-09-23 International Business Machines Corporation System for yielding to a processor
US6779065B2 (en) * 2001-08-31 2004-08-17 Intel Corporation Mechanism for interrupt handling in computer systems that support concurrent execution of multiple threads
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
JP2003167748A (ja) * 2001-11-30 2003-06-13 Fujitsu Ltd マルチスレッド計算機
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 キヤノン株式会社 アプリケーション実行システム
US7127561B2 (en) 2001-12-31 2006-10-24 Intel Corporation Coherency techniques for suspending execution of a thread until a specified memory access occurs
US20030126416A1 (en) * 2001-12-31 2003-07-03 Marr Deborah T. Suspending execution of a thread in a multi-threaded processor
US6925550B2 (en) 2002-01-02 2005-08-02 Intel Corporation Speculative scheduling of instructions with source operand validity bit and rescheduling upon carried over destination operand invalid bit detection
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
US20030225816A1 (en) * 2002-06-03 2003-12-04 Morrow Michael W. Architecture to support multiple concurrent threads of execution on an arm-compatible processor
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
US7334086B2 (en) 2002-10-08 2008-02-19 Rmi Corporation Advanced processor with system on a chip interconnect technology
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
US7152170B2 (en) * 2003-02-20 2006-12-19 Samsung Electronics Co., Ltd. Simultaneous multi-threading processor circuits and computer program products configured to operate at different performance levels based on a number of operating threads and methods of operating
US6977093B2 (en) * 2003-03-24 2005-12-20 Hung Chien-Lung Health food processing process using germinated rice to make health food containing natural eatable fibers, GABA, IP6, and probiotic
DE60323811D1 (de) 2003-04-09 2008-11-13 Jaluna S A Betriebssysteme
US7093106B2 (en) * 2003-04-23 2006-08-15 International Business Machines Corporation Register rename array with individual thread bits set upon allocation and cleared upon instruction completion
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
US7418585B2 (en) 2003-08-28 2008-08-26 Mips Technologies, Inc. Symmetric multiprocessor operating system for execution on non-independent lightweight thread contexts
JP4818919B2 (ja) * 2003-08-28 2011-11-16 ミップス テクノロジーズ インコーポレイテッド プロセッサ内での実行の計算スレッドを一時停止して割り当て解除するための統合されたメカニズム
US7836450B2 (en) 2003-08-28 2010-11-16 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
WO2005022384A1 (en) 2003-08-28 2005-03-10 Mips Technologies, Inc. Apparatus, method, and instruction for initiation of concurrent instruction streams in a multithreading microprocessor
US20050050305A1 (en) 2003-08-28 2005-03-03 Kissell Kevin D. Integrated mechanism for suspension and deallocation of computational threads of execution in a processor
US7870553B2 (en) 2003-08-28 2011-01-11 Mips Technologies, Inc. Symmetric multiprocessor operating system for execution on non-independent lightweight thread contexts
US7376954B2 (en) 2003-08-28 2008-05-20 Mips Technologies, Inc. Mechanisms for assuring quality of service for programs executing on a multithreaded processor
US7594089B2 (en) 2003-08-28 2009-09-22 Mips Technologies, Inc. Smart memory based synchronization controller for a multi-threaded multiprocessor SoC
US6993598B2 (en) 2003-10-09 2006-01-31 International Business Machines Corporation Method and apparatus for efficient sharing of DMA resource
US7558939B2 (en) * 2005-03-08 2009-07-07 Mips Technologies, Inc. Three-tiered translation lookaside buffer hierarchy in a multithreading microprocessor
US7627770B2 (en) 2005-04-14 2009-12-01 Mips Technologies, Inc. Apparatus and method for automatic low power mode invocation in a multi-threaded processor
US7600135B2 (en) 2005-04-14 2009-10-06 Mips Technologies, Inc. Apparatus and method for software specified power management performance using low power virtual threads
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 (1)

* 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> 命令スレッドを処理するための方法およびシステム

Also Published As

Publication number Publication date
EP1660993A2 (en) 2006-05-31
EP1658563A1 (en) 2006-05-24
US20080140998A1 (en) 2008-06-12
US8145884B2 (en) 2012-03-27
DE602004017879D1 (de) 2009-01-02
US20100115243A1 (en) 2010-05-06
EP1660993B1 (en) 2008-11-19
US7424599B2 (en) 2008-09-09
US7676660B2 (en) 2010-03-09
JP4740851B2 (ja) 2011-08-03
US20050125795A1 (en) 2005-06-09
JP2007504536A (ja) 2007-03-01
US7321965B2 (en) 2008-01-22
US20050120194A1 (en) 2005-06-02
JP4818918B2 (ja) 2011-11-16
WO2005022381A2 (en) 2005-03-10
JP2007504535A (ja) 2007-03-01
US7694304B2 (en) 2010-04-06
EP1660998A1 (en) 2006-05-31
US7610473B2 (en) 2009-10-27
US20050125629A1 (en) 2005-06-09
EP1658563B1 (en) 2013-06-05
JP2007504539A (ja) 2007-03-01
WO2005022381A3 (en) 2005-06-16
US20050240936A1 (en) 2005-10-27

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
US9032404B2 (en) Preemptive multitasking employing software emulation of directed exceptions in a multithreading processor
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
US7849297B2 (en) Software emulation of directed exceptions in a multithreading processor

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: 20090602

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

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

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20110802

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20110831

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20140909

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Ref document number: 4818919

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees