JP4949231B2 - ユーザーレベルのマルチスレッドを提供する方法およびシステム - Google Patents
ユーザーレベルのマルチスレッドを提供する方法およびシステム Download PDFInfo
- Publication number
- JP4949231B2 JP4949231B2 JP2007506565A JP2007506565A JP4949231B2 JP 4949231 B2 JP4949231 B2 JP 4949231B2 JP 2007506565 A JP2007506565 A JP 2007506565A JP 2007506565 A JP2007506565 A JP 2007506565A JP 4949231 B2 JP4949231 B2 JP 4949231B2
- Authority
- JP
- Japan
- Prior art keywords
- shred
- state
- shared
- shreds
- registers
- 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
Links
- 238000000034 method Methods 0.000 title claims description 40
- 238000004891 communication Methods 0.000 claims description 24
- 230000004044 response Effects 0.000 claims description 8
- 230000008054 signal transmission Effects 0.000 claims description 3
- 238000013519 translation Methods 0.000 claims description 3
- 230000007246 mechanism Effects 0.000 description 30
- 238000012545 processing Methods 0.000 description 20
- 230000006870 function Effects 0.000 description 17
- 230000008569 process Effects 0.000 description 16
- 230000001360 synchronised effect Effects 0.000 description 8
- 230000006399 behavior Effects 0.000 description 7
- 239000013598 vector Substances 0.000 description 6
- 238000007726 management method Methods 0.000 description 5
- 230000005055 memory storage Effects 0.000 description 5
- 230000004888 barrier function Effects 0.000 description 4
- 238000004422 calculation algorithm Methods 0.000 description 4
- 238000010586 diagram Methods 0.000 description 4
- 238000012913 prioritisation Methods 0.000 description 4
- 238000012800 visualization Methods 0.000 description 4
- 230000000694 effects Effects 0.000 description 3
- 230000007704 transition Effects 0.000 description 3
- XUIMIQQOPSSXEZ-UHFFFAOYSA-N Silicon Chemical compound [Si] XUIMIQQOPSSXEZ-UHFFFAOYSA-N 0.000 description 2
- 230000008901 benefit Effects 0.000 description 2
- 230000000903 blocking effect Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 238000004590 computer program Methods 0.000 description 2
- 239000000835 fiber Substances 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 229910052710 silicon Inorganic materials 0.000 description 2
- 239000010703 silicon Substances 0.000 description 2
- 241001522296 Erithacus rubecula Species 0.000 description 1
- 241000435574 Popa Species 0.000 description 1
- 206010000210 abortion Diseases 0.000 description 1
- 230000002411 adverse Effects 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 230000015556 catabolic process Effects 0.000 description 1
- 230000006378 damage Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000003292 diminished effect Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000009249 intrinsic sympathomimetic activity Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 238000005192 partition Methods 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 230000035755 proliferation Effects 0.000 description 1
- 239000000126 substance Substances 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30076—Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
- G06F9/30087—Synchronisation or serialisation instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30076—Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
- G06F9/3009—Thread control instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/30101—Special purpose registers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
- G06F9/3013—Organisation of register space, e.g. banked or distributed register file according to data content, e.g. floating-point registers, address registers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3838—Dependency mechanisms, e.g. register scoreboarding
- G06F9/384—Register renaming
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3851—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
- G06F9/3888—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple threads [SIMT] in parallel
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Multimedia (AREA)
- Executing Machine-Instructions (AREA)
- Advance Control (AREA)
- Multi Processors (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Debugging And Monitoring (AREA)
Description
従来のマルチスレッド・マイクロプロセッサは、従来の共有メモリ・マルチプロセッサ・システムと同じプログラミング・モデルを採用している。プログラミング・モデルは次のとおりである。マイクロプロセッサがOSに複数の実行スレッドを提供する。OSはこれらのスレッドを使って複数のアプリケーション(「プロセス」)を並行して走らせる、および/または単一のアプリケーションからの複数のスレッド(「マルチスレッド」)を並行して走らせる。いずれの場合にも、複数のスレッドはソフトウェアには独立したCPUのように見える。メインメモリはすべてのスレッドによって共有され、スレッド間の通信はメインメモリを通じて実行される。CPU内のハードウェアリソースも共有されうるが、共有はマイクロアーキテクチャによりソフトウェアからは隠されている。
1)スレッド間の通信がメインメモリを介して実行され、よって著しく遅い。キャッシングによって遅延の一部を軽減しうるが、共有を容易にするためにしばしばキャッシュラインをあるCPUコアから別のCPUコアに渡す必要がある。
2)スレッド間の同期がメモリベースのセマフォを使って実行され、よって著しく遅い。
3)スレッドの生成、破棄、サスペンドおよび再開がOSの介入を必要とし、よって著しく遅い。
4)CPUマルチスレッド機能の改良が上述したメモリ遅延およびOS遅延によって薄められてしまうため、マイクロプロセッサ発売元が最も効率的なマルチスレッド機能を提供できない。
従来システムに関する上に述べた理由のため、本方法およびシステムは、プロセッサのアーキテクチャを拡張して、マルチスレッド・アーキテクチャ拡張を通じてアーキテクチャ的に目に見えるマルチスレッド機能を含めるようにする。複数の同時的な実行スレッド、複数の命令ポインタ、単一の処理要素内のある種のアプリケーション状態(レジスタ)の複数のコピーが提供される。複数の実行スレッドは、既存の共有メモリ・スレッドとは区別できるものであり、シュレッド(shred)すなわち共有リソース・スレッド(shared resource thread)と称される。
プログラマーに見えるCPU状態は、2つの範疇に分けられる:アプリケーション状態およびシステム状態である。アプリケーション状態はアプリケーション・プログラムとOSの両方によって使用され、制御される一方、システム状態はOSによってのみ制御される。
各シュレッドについて、アプリケーション状態は2つの範疇に分けられる:シュレッド毎アプリケーション状態および共有アプリケーション状態である。ここで述べるMAXプログラミング・モデルはシュレッド毎アプリケーション状態の特有なインスタンスを提供する一方、共有アプリケーション状態は複数のシュレッドの間で共有される。システム状態のコピーは一つしかなく、所与のスレッドに対応するすべてのシュレッドが同じシステム状態を共有する。アプリケーションおよび状態の近似的な分割は次の表に呈示されている。
各共有メモリ・スレッドは複数のシュレッドからなる。シュレッドと共有メモリ・スレッドは2レベルの階層をなす。別の実施形態では、3レベルの階層が共有メモリMAXプロセッサのクラスタから構築できる。クラスタはメッセージ渡しを使って通信する。OSがスレッドのスケジューリングを扱い、一方、アプリケーション・プログラムがシュレッドのスケジューリングを扱う。任意の所与のシュレッドから見た他のシュレッドがローカルまたはリモートであるという意味において、シュレッドは非一様である。シュレッド毎アプリケーション状態は各シュレッドについて複製される。共有アプリケーションおよびシステム状態はローカルなシュレッドに共通であり、各共有メモリ・スレッドについて複製される。メモリ状態は一つのコピーのみを有する。
OSコールは、アプリケーション・プログラムからOSに制御を移し、コンテキスト切り換えを実行することにより、従来式の仕方で処理されてもよい。MAXアーキテクチャでは、一つの主要な相違は、どのシュレッドでOSをコールしても、所与のスレッドに関連するすべてのシュレッドの実行がサスペンドされるということである。同じスレッドに属するすべてのシュレッドの状態を保存し、復元するのはOSの責任である。
従来のアーキテクチャでは、例外はアプリケーション・プログラムの実行をサスペンドし、OSの例外ハンドラを呼び出す。MAXプログラミング・モデルのもとでは、この振る舞いは望ましくない。あるシュレッドをサスペンドしてOSを呼び出すことは、(所与のスレッドに関連する)あらゆるシュレッドもサスペンドしてしまうからである。
1.アプリケーション・プログラムに報告され、アプリケーション・プログラムによって手当てされる例外。たとえば、0による除算例外はその例外を引き起こしたアプリケーションに報告され、手当てもそのアプリケーションによってなされる。OSの関与は必要でもないし、望ましくもない。
2.アプリケーション・プログラムに報告され、その後、アプリケーション・プログラムが手当てのためにOSをコールする必要のある例外。アプリケーションによって起こされるページフォールトはアプリケーションに報告されてもよいが、ページ内でスワップするためにはアプリケーション・プログラムはOSをコールする必要がある。
3.OSに報告され、OSによって手当てされる必要のある例外。セキュリティ上の理由で、ハードウェア割り込みはOSに報告される必要がある。システムコール(ソフトウェア割り込み)は明らかにOSに報告される必要がある。
仮想マシンとマルチスレッド・アーキテクチャ拡張のここでの諸実施形態とは、互いに制約を課す。仮想マシンは、ソフトウェアが仮想化されているリソースにアクセスしようとするときには常に例外を発生させ、例外処理はシュレッドに対して著しいパフォーマンス上の影響をもつ。
MAXアーキテクチャではシュレッドがローカルな他のシュレッドによってサスペンドされることができるので、デッドロック回避が複雑になる。アプリケーション・ソフトウェアは、一つのシュレッドがOSに手当てされる例外またはシステムコールを被っても、ローカルなすべてのシュレッドをサスペンドしてしまうデッドロックが生じないことを保証する。
シュレッドは、従来のOSで実装されるファイバとは異なる。相違は次の表にまとめられている。
マルチスレッド・アーキテクチャ拡張をサポートするマイクロプロセッサの実装は、チップレベル・マルチプロセッサ(CMP: chip-level multiprocessor)および同時マルチスレッド・プロセッサ(SMT: simultaneous multithreaded processor)の形をとることができる。従来のCMPおよびSMTプロセッサは、CPUリソースの共有をソフトウェアから隠そうとしている。これに対し、マルチスレッド・アーキテクチャ拡張のここでの諸実施形態を実装されたときには、プロセッサは共有をアーキテクチャの一部としてさらけ出す。
MAXプログラミング・モデルのスケーラビリティは次によって決定される。
1)コンテキスト切り換えに際して保存/復元するのが実行可能である状態の量
2)コンテキスト切り換えの間に所与のスレッドに関連するあらゆるシュレッドをサスペンドすることから帰結する、並列度の減少
3)シュレッド間通信
シュレッド数が増加するにつれ、コンテキスト切り換えに際して保存/復元される必要のある状態の量が増加し、全シュレッドをサスペンドする結果として失われる潜在的な並列度が増加する。これら2つの因子が実際的なシュレッド数を制限することになる。
次の表には、シュレッドのアーキテクチャ、実装およびソフトウェア使用におけるさまざまな自由度での分類が呈示されている。
・32ビットプロセッサとネットワークプロセッサ、
・32ビットプロセッサと64ビットプロセッサ、
の間で構築されうる。
次の表は、本マルチスレッド・アーキテクチャ拡張の諸実施形態のためのいくつかの用途モデルをまとめている。
プリフェッチ用途モデルでは、メイン・スレッドは一つまたは複数のヘルパー・スレッドを生み、それがメインメモリからキャッシュラインをプリフェッチするのに使われる。ヘルパー・スレッドが生み出されるのは、メイン・スレッドでのキャッシュミスに応答してである。メインメモリへのアクセスは完了するのに数百から1000CPUクロックを必要とするので、キャッシュミスになった読み込みを失敗としてメインメモリに進むためのアーキテクチャ上の備えがされていない限り、スカラーコードの実行はメインメモリアクセスの間事実上停止することになる。
シュレッドは、従来式スレッドの高性能な置き換えとして、マルチスレッド・アプリケーションによって使われることがありうる。ユーザーレベルのソフトウェア・ライブラリが、以前にOSによって実行されたシュレッド管理機能(生成、破棄など)を実行するために提供される。ライブラリは追加的なスレッドを要求するために、必要に応じてOSをコールするほか、シュレッド命令を使用する。ソフトウェア・ライブラリのコールは、コンテキスト切り換えが必要ないためOSコールよりもずっと高速である。
コンパイラは、レジスタのようなほかのプロセッサ・リソースを使用するのと同じ仕方でシュレッドを使ってもよい。たとえば、コンパイラはプロセッサを8つの整数レジスタ、8つの浮動小数点レジスタ、8つのSSEレジスタおよび4つのシュレッドをもつものと見ることができる。シュレッドをリソースとして扱うことにより、コンパイラは、レジスタ割り当てと類似の仕方でシュレッドを割り当てる。レジスタと同様、アプリケーション・プログラムがハードウェアが提供するよりも多くの仮想シュレッドを要求する場合にシュレッドを補助記憶に散布/充填するための何らかの機構が必要である。従来のアーキテクチャでは、制御の流れは一つしかないので、通常プロセッサ・リソースとは見なされない。
管理されたランタイム環境では、シュレッドはガーベッジ・コレクション、ジャストインタイム(just-in-time)コンパイルおよびプロファイリングのような機能の専用とされる。シュレッドはそのような機能を本質的に「無償で」実行する。シュレッドは命令セットアーキテクチャ(ISA)の一部として提供されているからである。ISAは、プロセッサのうち、プログラマーまたはコンパイラ作者に見える部分である。ISAはソフトウェアおよびハードウェアの間の境界のはたらきをする。
MAXは並列プログラミング言語およびハードウェア記述言語を直接サポートする。たとえば、iHDLまたはVerilogコンパイラは、ソースコードが明示的に並列であるため、直接的に複数シュレッドのためのコードを生成する。
シュレッドはネットワーク・コプロセッサのようなI/O機能を実装するために使われる。シュレッドとして実装されるネットワーク・コプロセッサの一つの重要な相違点は、I/Oデバイスとしてではなく、CPUの一部として見えるということである。
64ビットアーキテクチャが、32ビットアーキテクチャ・アプリケーション・アーキテクチャならびに新しい64ビット命令セットを「シームレス」として知られる機構を通じて含むよう定義される。32ビットアーキテクチャの命令セットとの両立により、64ビットアーキテクチャのプロセッサは新しい64ビットアーキテクチャのアプリケーションのほか既存の32ビットアーキテクチャのアプリケーションも走らせることができる。
IA-32アーキテクチャを参照しつつ記述しているが、ここに記載される方法およびシステムはIA-64アーキテクチャのような他のアーキテクチャにも適用されうることを読者は理解する。さらに、読者は、本発明のある実施形態に基づく例示的な実行環境を理解するために図5に戻るよう指示される。IA-32にユーザーレベルのマルチスレッド機能をもたらすために、いくつかのレジスタ650〜660とともに、少数の命令が、IA-32のISAに追加される。
・拡張を有効/無効にするためにOSまたはBIOSによって使われるモデル固有レジスタ650(MAX_SHRED_ENABLE)
・プロセッサが拡張を実装しているかどうかと利用可能な物理シュレッド数とを示す、CPUID拡張機能情報の3ビット
・各シュレッドが独自に専有アプリケーション状態のコピーを有するようにする、アプリケーション状態(EAX, EBXなど)のほとんどの複製
・シュレッド間の通信および同期のために使われうる、共有レジスタSH0-SH7 655の組
・シュレッド管理のために使われる制御レジスタSC0-SC4 660の組
・シュレッドの生成/破棄:forkshred、haltshred、killshred、joinshred、getshred
・通信:共有レジスタ655への/からの移動(mov)、共有レジスタ655への/からの同期移動
・同期(セマフォ):cmpxshgsh、xaddsh、xchgsh
・信号伝送:signalshred
・マルチシュレッドモード(multi-shredded mode)への/からの遷移:entermsm、exitmsm
・状態管理:shsave、shrestore
・雑:シュレッド制御レジスタへの/からの移動
・IA-32例外機構は、例外に際して(あてはまる場合には)マルチシュレッドモードを終了して全シュレッド状態を保存する
・IA-32のIRET命令は(あてはまる場合には)全シュレッド状態を復元してマルチシュレッドモードに戻る
・ユーザーレベルの例外機構が導入されている。
モデル固有レジスタ(MSR: model specific register)650はマルチスレッド・アーキテクチャ拡張を可能にするために使われる。MSRは下記に記述される。
IA-32のCPUID命令は、設けられている物理スレッド数の計数とともに、プロセッサがマルチスレッド・アーキテクチャ拡張をサポートしていることの指標を返すよう修正される。これはECXにおいて返される拡張機能情報に3ビット(NSHRED)を追加することによってなされる。CPUID命令によって返される情報は次の表に与えられている。
マルチスレッド・アーキテクチャ拡張は、全状態を3つの範疇のうちの一つに置く。
・各シュレッドの専有
・ローカルなシュレッドの間で共有
・全シュレッドの間で共有
IA-32状態の前記範疇のそれぞれの内訳は上掲の表2に示されている。シュレッドの専有という状態は、シュレッドごとに一回繰り返される。シュレッドの専有という状態は、各シュレッドにとっての完全な専有である。特に、アーキテクチャは、よそのシュレッドからあるシュレッドの専有レジスタの読み出しや書き込みを個々に行ういかなる命令も提供しない。アーキテクチャが提供するshsaveおよびshrestore命令は、全シュレッドの専有状態のメモリへの読み出しおよび書き込みを集合的に行うためのものであるが、これらの命令は単一シュレッドモードにおいてしか実行されない。シュレッドの共有状態は上掲の表3に示されている。
シュレッドはforkshred命令を使って生成されうる。書式は次のとおり。
forkshred r16, 目標IP
2つの形が与えられている。一方はシュレッド番号を即値オペランド(immediate operand)としてもち、第二のものはシュレッド番号をレジスタオペランド(register operand)としてもつ。いずれの形についても、目標IPは即値オペランドとして指定され、その値は現在のIPではなく、コードセグメントの先頭(名目上0)を基準とする。
killshred r16
joinshred r16
シュレッドは互いとの通信を、既存の共有メモリを通じて、およびその目的のために特別に導入されたレジスタの組を通じて行う。共有レジスタSH0-SH7 655は同じスレッドに属するすべてのローカルシュレッドによってアクセス可能である。SH0-SH7レジスタ655は、はいってくるパラメータをシュレッドに渡し、シュレッドからの戻り値を通信し、セマフォ動作を実行するために使われうる。各目的のために特定の共有レジスタ655はソフトウェアの慣例によって割り当てられる。
mov sh0-sh7,r32
syncmov sh0-sh7,r32
一組の同期プリミティブが共有レジスタ655に作用する。同期プリミティブは、メモリでなく共有レジスタ655に作用するということのほかは、既存のセマフォ命令と同様である。命令は次の通り。
MAXアーキテクチャはマルチシュレッドモードと単一シュレッドモードの間の切り換えをする機構を提供する。単一シュレッドモードは、プロセッサが、一つを除いたすべてのシュレッドの実行を停止することによって秩序だった仕方でコンテキスト切り換えを実行できるようにする。SC0は現在の動作モードを次のように示す:
・どのビット位置であれちょうど一つの1を含むSC0は単一シュレッドモードを含意する。
・どのビット位置であれ一つの1という以外のパターンを含むSC0はマルチシュレッドモードを表す。
1)単一シュレッドモードに切り換えることによって一つを除いたすべてのシュレッドをサスペンドする。
2)シュレッド状態を保存する。
3)新しいシュレッド状態をロードする。
4)マルチシュレッドモードに切り換えることによってすべてのシュレッドの実行を再開する。
命令(shsaveおよびshrestore)は、集合的なシュレッド状態をそれぞれ保存および復元するため、すなわち全シュレッドの専有状態の内容をメモリに書き込むため、および全シュレッドの専有状態をメモリから読み出すために使われる。書式は次のとおり。
shrestore m16384
アドレス=512×(シュレッド番号)+(ベースアドレス)
メモリ保存領域は現在走っているシュレッドのEIPおよびESPを含む。shsaveは現在のEIPおよびESPをメモリに書き込む。分岐を避けるため、shrestore命令は現在のシュレッドのEIPやESPを上書きすることはしない。shrestore関数は、IRETの一部として実行されたとき、現在のシュレッドのEIPおよびESPを上書きする。
シュレッド制御レジスタSC0-SC4 660に書き込み、そこから読み出すための命令が提供されている。それは次のようにまとめられる。
mov sc0-sc4,r32
命令エンコードは既存の制御レジスタ660への/からのMOV、およびデバッグ・レジスタへの/からのMOVの命令と同様である。シュレッド制御レジスタへの/からのMOV命令はいかなる特権レベルで実行されてもよい。悪意のあるアプリケーション・プログラムがシュレッド制御レジスタに書き込むことによって自分以外の何らかのプロセスに影響できないことを保証するための安全措置が設けられる。
MAXは、IA-32例外機構のためにいくつかの関わりを有する。まず、ユーザーレベルの例外機構により、いくつかの型の例外がそれを発生させたシュレッドに直接報告されることが可能になる。この機構については後述する。
1)exitmsmを実行することによりマルチシュレッドモードを終了する。exitmsmは、その割り込みまたは例外を引き起こしているもの以外のすべてのシュレッドを停止させる。OSはその割り込みまたは例外を引き起こしたシュレッドを使ってはいられる。
2)SC2によって与えられる開始アドレスでshsaveを実行することにより、全シュレッドの現在の状態をメモリに保存する。
3)現在定義されているようなIA-32コンテキスト切り換えを実行する。
1)現在定義されているようなIA-32コンテキスト切り換えを実行する。
2)SC2によって与えられる開始アドレスでshrestoreを実行することにより、全シュレッドの現在の状態をメモリから復元する。これはIA-32コンテキスト切り換えにおいて保存されたEIPおよびESPを上書きする。
3)entermsmを実行することによりマルチシュレッドモードにはいる。SC1の状態によっては、entermsmの実行は、プロセッサをして単一シュレッドモードに留まらせることもある。
MAXは、ある型の例外が完全にアプリケーション・プログラム内で処理されることを可能にする、ユーザーレベルの例外機構を導入する。いかなるOS関与、特権レベル遷移あるいはコンテキスト切り換えも必要でない。
signalshred命令は、指定されたシュレッドに信号を送るために使用される。書式は次のとおり。
signalshred r16, 目標IP
目標シュレッドはレジスタオペランドまたは即値オペランドとして指定されうる。signalshred imm16, 目標IPという命令のエンコードは、既存の長距離ジャンプ命令と同様で、シュレッド番号が16ビットのセレクタの代わりに、目標IPが16/32ビットオフセットの代わりになっている。長距離ジャンプの場合と同様、signalshredの目標IPは、現在のIPを基準にするのではなく、コードセグメントの先頭(名目上0)を基準として指定される。
forkshredは、プログラムがすでに走っているシュレッドを開始させようとした場合には#SNA例外を発生させる。ソフトウェアの#SNAハンドラは既存のシュレッドに対してkillshredを実行して、forkshred命令に戻りうる。
マルチスレッド・アーキテクチャ拡張は、ユーザーレベルのソフトウェアが以下のような命令を使ってシュレッドをサスペンドまたは再開することを許容する。シュレッドをサスペンドするための命令:
1)メモリ中のシュレッド状態保存領域を初期化する。これは、サスペンド動作のためにアプリケーション・プログラムによって設定されたメモリ領域であって、SC2とポイントされるコンテキスト切り換えシュレッド状態領域とは異なる。
2)サスペンド・ハンドラをポイントするシュレッドに信号を送る。これはsignalshred 目標シュレッド, サスペンド・ハンドラIP を通じて行われる。
3)サスペンド・ハンドラが既存のmov, pusha, fxsave命令を使ってそのシュレッドの専有状態をメモリに保存する。
4)サスペンド・ハンドラがhaltshredを実行する。
5)オリジナルコードがjoinshredを実行してシュレッドが停止するまで待つ。
1)再開ハンドラをポイントするシュレッドをフォークする。これは、forkshred 目標シュレッド, 再開ハンドラIP を通じて行われる。
2)再開ハンドラが既存のmov, popa, fxrestor命令を使ってシュレッドの専有状態をメモリから復元する。
3)再開ハンドラが既存のRET命令を通じてシュレッドに復帰する。
and eax, mask
jz loop
別の実施形態では、joinshredは、複数のシュレッド上で待機するためのビットマスクを与えられる。ビットマスクがなければ、joinshredは一つのシュレッドが終了するのを待ち、複数のシュレッド上で待機するためには複数のjoinshredが必要とされる。
705 共有レジスタの値を初期化
710 forkshredを実行
715 主シュレッドを実行
720 共有レジスタから値を読む
721 シュレッドを実行
722 共有レジスタにシュレッド実行結果を書き込む
723 haltshredを実行
730 join動作を実行
735 シュレッド実行から返される値をレジスタから読む
799 終了
Claims (12)
- 第一のオペレーティング・システム(OS)生成スレッドを実行する段階であって、ここで、前記第一のOS生成スレッドは第一のシステム状態に関連付けられている、オペレーティング・システムによって生成されたスレッドである、段階と、
非特権ユーザーレベルプログラミング命令に遭遇する段階と、
非特権レベルプログラミング命令に反応して、第一のアプリケーション状態の第一の専有部分に関連付けられた第一の共有リソース・スレッド(シュレッド)を生成する段階であって、前記第一のシュレッドは、前記第一のアプリケーション状態の共有部分および前記第一のシステム状態を少なくとも第二のシュレッドと共有し、前記非特権レベルプログラミング命令は、OSの介入なしにハードウェアにおいてシュレッドを生成するためにハードウェアによって認識可能な命令セットアーキテクチャ(ISA)に含まれるものである、段階と、
前記ユーザーレベルプログラミング命令に反応して、前記第一のシュレッドを少なくとも前記第二のシュレッドと並行して実行する段階と、
前記第一のシュレッドと前記第二のシュレッドとの間で、前記第一のシュレッドおよび前記第二のシュレッドによって更新されることができるよう適応されている一つまたは複数の共有レジスタを介して通信する段階とを含み、前記一つまたは複数の共有レジスタは、前記第一のアプリケーション状態の共有部分および前記第一のシステム状態を共有するシュレッドの専有である、方法。 - 前記第一のアプリケーション状態の前記第一の専有部分が、汎用レジスタ、浮動小数点レジスタ、MMXレジスタ、セグメント・レジスタ、フラグ・レジスタ、命令ポインタ、制御および状態レジスタ、SSEレジスタおよびMXCSRレジスタを含む複数のレジスタのうちの少なくとも一つと関連付けられていることを特徴とする、請求項1記載の方法。
- 前記第一のシュレッドおよび前記第二のシュレッドが、現在の特権レベルを共有し、共通のアドレス変換を共有することを特徴とする、請求項1記載の方法。
- シュレッド破棄動作をエンコードする非特権ユーザーレベルプログラミング命令を受け取ることをさらに含むことを特徴とする、請求項1記載の方法。
- 前記通信がユーザーレベルのシュレッド信号伝送命令を介して実行されることを特徴とする、請求項1記載の方法。
- ユーザーレベルのプログラミング命令に反応して、オペレーティング・システムの介入なしに前記第一のシュレッドおよび前記第二のシュレッドをスケジューリングすることさらに含むことを特徴とする、請求項1記載の方法。
- コンテキスト切り換え要求の受領に反応して、前記一つまたは複数のシュレッドに対応する一つまたは複数の状態を保存する、ことをさらに含むことを特徴とする、請求項1記載の方法。
- オペレーティング・システムの介入なしに、ユーザーレベルの例外ハンドラコードにより、前記第一のシュレッドの実行の間に発生した例外を扱う、ことをさらに含むことを特徴とする、請求項1記載の方法。
- ある命令セットアーキテクチャ(ISA)を実装するマイクロプロセッサであって、前記マイクロプロセッサは複数のOS生成スレッドを実行し、前記マイクロプロセッサはまた、前記複数のOS生成スレッドのうちのあるOS生成スレッドに関連付けられた複数の共有リソース・スレッド(シュレッド)を並行して実行し、前記複数のシュレッドのそれぞれは前記OS生成スレッド内のある専有状態および前記OS生成スレッドの共有状態に関連付けられており、前記シュレッドのそれぞれは、前記ISAのアプリケーション・プログラム命令に反応して前記マイクロプロセッサのハードウェアを利用して生成され、前記OS生成スレッドの共有状態の一部であるレジスタが、前記複数のシュレッドによって直接更新可能であるよう適応されており、それにより前記複数のシュレッドの間の通信を許容するとともに、前記OS生成スレッドの共有状態に関連付けられていないスレッドによってはアクセス可能でない、マイクロプロセッサと、
ユーザーレベルのマルチスレッド動作を許容するための、前記ISAの一つまたは複数の命令を記憶するメモリとを有することを特徴とする、
システム。 - 前記一つまたは複数の命令が、オペレーティング・システムの介入なしにシュレッドを生成する命令を含むことを特徴とする、請求項9記載のシステム。
- 前記一つまたは複数の命令が、オペレーティング・システムの介入なしにシュレッドを破棄する命令を含むことを特徴とする、請求項9記載のシステム。
- 前記ユーザーレベルのマルチスレッド動作が、同一のスレッドに関連付けられた二つ以上のシュレッドの並行的な実行を含むことを特徴とする、請求項9記載のシステム。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US10/816,103 | 2004-03-31 | ||
US10/816,103 US9189230B2 (en) | 2004-03-31 | 2004-03-31 | Method and system to provide concurrent user-level, non-privileged shared resource thread creation and execution |
PCT/US2005/010923 WO2005098624A1 (en) | 2004-03-31 | 2005-03-31 | A method and system to provide user-level multithreading |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2012001179A Division JP2012094175A (ja) | 2004-03-31 | 2012-01-06 | ユーザーレベルのマルチスレッドを提供する方法およびシステム |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2007531167A JP2007531167A (ja) | 2007-11-01 |
JP4949231B2 true JP4949231B2 (ja) | 2012-06-06 |
Family
ID=34964349
Family Applications (8)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2007506565A Expired - Fee Related JP4949231B2 (ja) | 2004-03-31 | 2005-03-31 | ユーザーレベルのマルチスレッドを提供する方法およびシステム |
JP2012001179A Pending JP2012094175A (ja) | 2004-03-31 | 2012-01-06 | ユーザーレベルのマルチスレッドを提供する方法およびシステム |
JP2012095473A Pending JP2012160202A (ja) | 2004-03-31 | 2012-04-19 | ユーザーレベルのマルチスレッドを提供する方法およびシステム |
JP2014048903A Pending JP2014112438A (ja) | 2004-03-31 | 2014-03-12 | ユーザーレベルのマルチスレッドを提供する方法およびシステム |
JP2014154360A Pending JP2014222533A (ja) | 2004-03-31 | 2014-07-30 | ユーザーレベルのマルチスレッドを提供する方法およびシステム |
JP2014185017A Pending JP2015015041A (ja) | 2004-03-31 | 2014-09-11 | ユーザーレベルのマルチスレッドを提供する方法およびシステム |
JP2016217176A Pending JP2017027627A (ja) | 2004-03-31 | 2016-11-07 | ユーザーレベルのマルチスレッドを提供する方法およびシステム |
JP2018187423A Pending JP2018200735A (ja) | 2004-03-31 | 2018-10-02 | ユーザーレベルのマルチスレッドを提供する方法およびシステム |
Family Applications After (7)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2012001179A Pending JP2012094175A (ja) | 2004-03-31 | 2012-01-06 | ユーザーレベルのマルチスレッドを提供する方法およびシステム |
JP2012095473A Pending JP2012160202A (ja) | 2004-03-31 | 2012-04-19 | ユーザーレベルのマルチスレッドを提供する方法およびシステム |
JP2014048903A Pending JP2014112438A (ja) | 2004-03-31 | 2014-03-12 | ユーザーレベルのマルチスレッドを提供する方法およびシステム |
JP2014154360A Pending JP2014222533A (ja) | 2004-03-31 | 2014-07-30 | ユーザーレベルのマルチスレッドを提供する方法およびシステム |
JP2014185017A Pending JP2015015041A (ja) | 2004-03-31 | 2014-09-11 | ユーザーレベルのマルチスレッドを提供する方法およびシステム |
JP2016217176A Pending JP2017027627A (ja) | 2004-03-31 | 2016-11-07 | ユーザーレベルのマルチスレッドを提供する方法およびシステム |
JP2018187423A Pending JP2018200735A (ja) | 2004-03-31 | 2018-10-02 | ユーザーレベルのマルチスレッドを提供する方法およびシステム |
Country Status (6)
Country | Link |
---|---|
US (7) | US9189230B2 (ja) |
JP (8) | JP4949231B2 (ja) |
CN (2) | CN1938686B (ja) |
DE (1) | DE112005000706B4 (ja) |
TW (1) | TWI321749B (ja) |
WO (1) | WO2005098624A1 (ja) |
Families Citing this family (75)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9189230B2 (en) | 2004-03-31 | 2015-11-17 | Intel Corporation | Method and system to provide concurrent user-level, non-privileged shared resource thread creation and execution |
US8719819B2 (en) * | 2005-06-30 | 2014-05-06 | Intel Corporation | Mechanism for instruction set based thread execution on a plurality of instruction sequencers |
US7810083B2 (en) * | 2004-12-30 | 2010-10-05 | Intel Corporation | Mechanism to emulate user-level multithreading on an OS-sequestered sequencer |
US8010969B2 (en) | 2005-06-13 | 2011-08-30 | Intel Corporation | Mechanism for monitoring instruction set based thread execution on a plurality of instruction sequencers |
US8028295B2 (en) | 2005-09-30 | 2011-09-27 | Intel Corporation | Apparatus, system, and method for persistent user-level thread |
US20070079294A1 (en) * | 2005-09-30 | 2007-04-05 | Robert Knight | Profiling using a user-level control mechanism |
US8205200B2 (en) * | 2005-11-29 | 2012-06-19 | Intel Corporation | Compiler-based scheduling optimization hints for user-level threads |
US8079035B2 (en) * | 2005-12-27 | 2011-12-13 | Intel Corporation | Data structure and management techniques for local user-level thread data |
US8973094B2 (en) * | 2006-05-26 | 2015-03-03 | Intel Corporation | Execution of a secured environment initialization instruction on a point-to-point interconnect system |
US7406407B2 (en) * | 2006-06-01 | 2008-07-29 | Microsoft Corporation | Virtual machine for operating N-core application on M-core processor |
US7773090B1 (en) * | 2006-06-13 | 2010-08-10 | Nvidia Corporation | Kernel mode graphics driver for dual-core computer system |
US8468526B2 (en) * | 2006-06-30 | 2013-06-18 | Intel Corporation | Concurrent thread execution using user-level asynchronous signaling |
US8607228B2 (en) * | 2006-08-08 | 2013-12-10 | Intel Corporation | Virtualizing performance counters |
US8028290B2 (en) * | 2006-08-30 | 2011-09-27 | International Business Machines Corporation | Multiple-core processor supporting multiple instruction set architectures |
US7768518B2 (en) * | 2006-09-27 | 2010-08-03 | Intel Corporation | Enabling multiple instruction stream/multiple data stream extensions on microprocessors |
US8190982B2 (en) * | 2006-09-29 | 2012-05-29 | University Of Connecticut | Error-tolerant multi-threaded memory systems with reduced error accumulation |
US8689215B2 (en) * | 2006-12-19 | 2014-04-01 | Intel Corporation | Structured exception handling for application-managed thread units |
US8161284B1 (en) | 2006-12-28 | 2012-04-17 | Perftech, Inc. | System, method and computer readable medium for message authentication to subscribers of an internet service provider |
US8074274B2 (en) * | 2006-12-29 | 2011-12-06 | Intel Corporation | User-level privilege management |
US9003410B2 (en) | 2007-01-30 | 2015-04-07 | Hewlett-Packard Development Company, L.P. | Abstracting a multithreaded processor core to a single threaded processor core |
US20080229062A1 (en) * | 2007-03-12 | 2008-09-18 | Lorenzo Di Gregorio | Method of sharing registers in a processor and processor |
US20080320475A1 (en) * | 2007-06-19 | 2008-12-25 | Microsoft Corporation | Switching user mode thread context |
US8966488B2 (en) | 2007-07-06 | 2015-02-24 | XMOS Ltd. | Synchronising groups of threads with dedicated hardware logic |
US7743193B2 (en) | 2007-10-31 | 2010-06-22 | Tpk Touch Solutions Inc. | Logic gateway circuit for bus that supports multiple interrupt request signals |
US7996663B2 (en) * | 2007-12-27 | 2011-08-09 | Intel Corporation | Saving and restoring architectural state for processor cores |
US8321840B2 (en) * | 2007-12-27 | 2012-11-27 | Intel Corporation | Software flow tracking using multiple threads |
US8601241B2 (en) * | 2008-02-01 | 2013-12-03 | International Business Machines Corporation | General purpose register cloning |
US8707016B2 (en) * | 2008-02-01 | 2014-04-22 | International Business Machines Corporation | Thread partitioning in a multi-core environment |
US8775778B2 (en) * | 2008-02-01 | 2014-07-08 | International Business Machines Corporation | Use of a helper thread to asynchronously compute incoming data |
US8359589B2 (en) * | 2008-02-01 | 2013-01-22 | International Business Machines Corporation | Helper thread for pre-fetching data |
US7559061B1 (en) | 2008-03-16 | 2009-07-07 | International Business Machines Corporation | Simultaneous multi-threading control monitor |
US20100153934A1 (en) * | 2008-12-12 | 2010-06-17 | Peter Lachner | Prefetch for systems with heterogeneous architectures |
US9785462B2 (en) * | 2008-12-30 | 2017-10-10 | Intel Corporation | Registering a user-handler in hardware for transactional memory event handling |
US8285904B2 (en) | 2009-08-14 | 2012-10-09 | Advanced Micro Devices, Inc. | Flexible notification mechanism for user-level interrupts |
US9367462B2 (en) | 2009-12-29 | 2016-06-14 | Empire Technology Development Llc | Shared memories for energy efficient multi-core processors |
US9141422B2 (en) | 2010-05-18 | 2015-09-22 | Microsoft Technology Licensing, Llc | Plug-in task scheduler |
JP5516747B2 (ja) * | 2010-10-05 | 2014-06-11 | 富士通株式会社 | マルチコアプロセッサシステム、監視制御方法、および監視制御プログラム |
US9378019B2 (en) | 2011-04-07 | 2016-06-28 | Via Technologies, Inc. | Conditional load instructions in an out-of-order execution microprocessor |
US9274795B2 (en) | 2011-04-07 | 2016-03-01 | Via Technologies, Inc. | Conditional non-branch instruction prediction |
US8880851B2 (en) | 2011-04-07 | 2014-11-04 | Via Technologies, Inc. | Microprocessor that performs X86 ISA and arm ISA machine language program instructions by hardware translation into microinstructions executed by common execution pipeline |
US9898291B2 (en) | 2011-04-07 | 2018-02-20 | Via Technologies, Inc. | Microprocessor with arm and X86 instruction length decoders |
US9244686B2 (en) | 2011-04-07 | 2016-01-26 | Via Technologies, Inc. | Microprocessor that translates conditional load/store instructions into variable number of microinstructions |
US9336180B2 (en) * | 2011-04-07 | 2016-05-10 | Via Technologies, Inc. | Microprocessor that makes 64-bit general purpose registers available in MSR address space while operating in non-64-bit mode |
US9292470B2 (en) * | 2011-04-07 | 2016-03-22 | Via Technologies, Inc. | Microprocessor that enables ARM ISA program to access 64-bit general purpose registers written by x86 ISA program |
US9645822B2 (en) | 2011-04-07 | 2017-05-09 | Via Technologies, Inc | Conditional store instructions in an out-of-order execution microprocessor |
US9317288B2 (en) | 2011-04-07 | 2016-04-19 | Via Technologies, Inc. | Multi-core microprocessor that performs x86 ISA and ARM ISA machine language program instructions by hardware translation into microinstructions executed by common execution pipeline |
US8671309B2 (en) * | 2011-07-01 | 2014-03-11 | Intel Corporation | Mechanism for advanced server machine check recovery and associated system software enhancements |
US9965287B1 (en) | 2012-01-27 | 2018-05-08 | Open Invention Network Llc | Virtualized multicore systems with extended instruction heterogeneity |
TWI569205B (zh) * | 2012-08-31 | 2017-02-01 | 威盛電子股份有限公司 | 一種微處理器及其操作方法 |
US20140095847A1 (en) * | 2012-09-28 | 2014-04-03 | Doron Orenstein | Instruction and highly efficient micro-architecture to enable instant context switch for user-level threading |
CN104375887B (zh) * | 2013-08-16 | 2019-06-25 | 联想(北京)有限公司 | 一种信息处理方法及电子设备 |
CN104461730B (zh) * | 2013-09-22 | 2017-11-07 | 华为技术有限公司 | 一种虚拟资源分配方法及装置 |
CN103473134B (zh) * | 2013-09-23 | 2016-08-17 | 哈尔滨工程大学 | 一种异构多核处理器的依赖任务调度方法 |
US9898330B2 (en) * | 2013-11-11 | 2018-02-20 | Intel Corporation | Compacted context state management |
US9218185B2 (en) * | 2014-03-27 | 2015-12-22 | International Business Machines Corporation | Multithreading capability information retrieval |
US9921848B2 (en) * | 2014-03-27 | 2018-03-20 | International Business Machines Corporation | Address expansion and contraction in a multithreading computer system |
US9213569B2 (en) * | 2014-03-27 | 2015-12-15 | International Business Machines Corporation | Exiting multiple threads in a computer |
US9223574B2 (en) * | 2014-03-27 | 2015-12-29 | International Business Machines Corporation | Start virtual execution instruction for dispatching multiple threads in a computer |
US9621650B2 (en) * | 2014-09-30 | 2017-04-11 | Google Inc | Mobile application state identifier framework |
US9569127B2 (en) | 2014-12-29 | 2017-02-14 | International Business Machines Corporation | Computer instructions for limiting access violation reporting when accessing strings and similar data structures |
US9703721B2 (en) | 2014-12-29 | 2017-07-11 | International Business Machines Corporation | Processing page fault exceptions in supervisory software when accessing strings and similar data structures using normal load instructions |
US9747108B2 (en) * | 2015-03-27 | 2017-08-29 | Intel Corporation | User-level fork and join processors, methods, systems, and instructions |
US9734000B2 (en) * | 2015-06-18 | 2017-08-15 | Microsoft Technology Licensing, Llc | Seamless transitions between applications and devices |
US20210026950A1 (en) * | 2016-03-07 | 2021-01-28 | Crowdstrike, Inc. | Hypervisor-based redirection of system calls and interrupt-based task offloading |
US11120106B2 (en) * | 2016-07-30 | 2021-09-14 | Endgame, Inc. | Hardware—assisted system and method for detecting and analyzing system calls made to an operating system kernel |
US10437593B2 (en) * | 2017-04-27 | 2019-10-08 | Nvidia Corporation | Techniques for comprehensively synchronizing execution threads |
CN108171862B (zh) * | 2018-01-08 | 2021-03-09 | 北京值得买科技股份有限公司 | 一种发号方法及发号器 |
GB2580327B (en) * | 2018-12-31 | 2021-04-28 | Graphcore Ltd | Register files in a multi-threaded processor |
US11194815B1 (en) * | 2019-02-11 | 2021-12-07 | Amazon Technologies, Inc. | Constrained query execution |
CN110597606B (zh) * | 2019-08-13 | 2022-02-18 | 中国电子科技集团公司第二十八研究所 | 一种高速缓存友好的用户级线程调度方法 |
DE102020127704A1 (de) | 2019-10-29 | 2021-04-29 | Nvidia Corporation | Techniken zum effizienten transferieren von daten an einem prozessor |
US11080051B2 (en) * | 2019-10-29 | 2021-08-03 | Nvidia Corporation | Techniques for efficiently transferring data to a processor |
US20210157512A1 (en) * | 2021-02-02 | 2021-05-27 | Intel Corporation | Flexible configuration of storage device with translation language set |
US12079657B2 (en) | 2021-06-24 | 2024-09-03 | Hewlett Packard Enterprise Development Lp | Handling ownership of process threads |
CN113485811B (zh) * | 2021-07-23 | 2024-06-25 | 平安科技(深圳)有限公司 | 计算任务管理方法、装置、计算机设备及存储介质 |
Family Cites Families (53)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH087867B2 (ja) | 1987-07-06 | 1996-01-29 | セイコーエプソン株式会社 | 光記憶再生装置 |
JP2973480B2 (ja) | 1990-06-29 | 1999-11-08 | 日本電気株式会社 | 通信レジスタ多重化方式 |
JPH0464864A (ja) | 1990-07-03 | 1992-02-28 | Akira Sato | 風呂釜における湯の逆流防止装置 |
JPH05204656A (ja) * | 1991-11-30 | 1993-08-13 | Toshiba Corp | スレッド固有データ保持方法 |
JPH0623459A (ja) | 1992-07-08 | 1994-02-01 | Sumitomo Electric Ind Ltd | ばね成形性に優れた鋼線の製造方法。 |
US5485626A (en) | 1992-11-03 | 1996-01-16 | International Business Machines Corporation | Architectural enhancements for parallel computer systems utilizing encapsulation of queuing allowing small grain processing |
US5414740A (en) | 1992-12-17 | 1995-05-09 | International Business Machines Corporation | Synchronous communication system having multiplexed information transfer and transition phases |
JP3585510B2 (ja) * | 1993-07-20 | 2004-11-04 | 株式会社東芝 | プログラム実行管理装置及びプログラム実行管理方法 |
US5481706A (en) | 1993-11-01 | 1996-01-02 | International Business Machines Corporation | System and method for creating thread-safe shared libraries |
GB2307072B (en) * | 1994-06-10 | 1998-05-13 | Advanced Risc Mach Ltd | Interoperability with multiple instruction sets |
US5638525A (en) | 1995-02-10 | 1997-06-10 | Intel Corporation | Processor capable of executing programs that contain RISC and CISC instructions |
US5845129A (en) * | 1996-03-22 | 1998-12-01 | Philips Electronics North America Corporation | Protection domains in a single address space |
US5991790A (en) | 1996-07-01 | 1999-11-23 | Sun Microsystems, Inc. | Generation and delivery of signals in a two-level, multithreaded system |
JP2970553B2 (ja) * | 1996-08-30 | 1999-11-02 | 日本電気株式会社 | マルチスレッド実行方法 |
US6418460B1 (en) | 1997-02-18 | 2002-07-09 | Silicon Graphics, Inc. | System and method for finding preempted threads in a multi-threaded application |
AU6586898A (en) | 1997-03-21 | 1998-10-20 | University Of Maryland | Spawn-join instruction set architecture for providing explicit multithreading |
US6324623B1 (en) * | 1997-05-30 | 2001-11-27 | Oracle Corporation | Computing system for implementing a shared cache |
US6658447B2 (en) | 1997-07-08 | 2003-12-02 | Intel Corporation | Priority based simultaneous multi-threading |
US6233599B1 (en) | 1997-07-10 | 2001-05-15 | International Business Machines Corporation | Apparatus and method for retrofitting multi-threaded operations on a computer by partitioning and overlapping registers |
US6009522A (en) | 1997-09-30 | 1999-12-28 | Micron Electronics, Inc. | Attachment or integration of a BIOS device into a computer system using the system memory data bus |
US6223208B1 (en) * | 1997-10-03 | 2001-04-24 | International Business Machines Corporation | Moving data in and out of processor units using idle register/storage functional units |
US6438679B1 (en) * | 1997-11-03 | 2002-08-20 | Brecis Communications | Multiple ISA support by a processor using primitive operations |
US6079010A (en) * | 1998-03-31 | 2000-06-20 | Lucent Technologies Inc. | Multiple machine view execution in a computer system |
US6092175A (en) * | 1998-04-02 | 2000-07-18 | University Of Washington | Shared register storage mechanisms for multithreaded computer systems with out-of-order execution |
US6330584B1 (en) | 1998-04-03 | 2001-12-11 | Mmc Networks, Inc. | Systems and methods for multi-tasking, resource sharing and execution of computer instructions |
GB2338094B (en) | 1998-05-27 | 2003-05-28 | Advanced Risc Mach Ltd | Vector register addressing |
US6378067B1 (en) * | 1998-10-12 | 2002-04-23 | Idea Corporation | Exception reporting architecture for SIMD-FP instructions |
US6243860B1 (en) * | 1998-10-30 | 2001-06-05 | Westinghouse Electric Company Llc | Mechanism employing a memory area for exchanging information between a parent process and a child process compiled during execution of the parent process or between a run time compiler process and an application process |
US6622155B1 (en) * | 1998-11-24 | 2003-09-16 | Sun Microsystems, Inc. | Distributed monitor concurrency control |
JP3604029B2 (ja) | 1999-01-12 | 2004-12-22 | 日本電気株式会社 | マルチスレッドプロセッサ |
JP3790653B2 (ja) | 1999-04-19 | 2006-06-28 | 松下電器産業株式会社 | 共有メモリアクセス管理装置 |
US6535905B1 (en) | 1999-04-29 | 2003-03-18 | Intel Corporation | Method and apparatus for thread switching within a multithreaded processor |
EP1050798A1 (en) * | 1999-05-03 | 2000-11-08 | STMicroelectronics SA | Decoding instructions |
US6507862B1 (en) | 1999-05-11 | 2003-01-14 | Sun Microsystems, Inc. | Switching method in a multi-threaded processor |
US7051329B1 (en) | 1999-12-28 | 2006-05-23 | Intel Corporation | Method and apparatus for managing resources in a multithreaded processor |
US7480706B1 (en) * | 1999-12-30 | 2009-01-20 | Intel Corporation | Multi-threaded round-robin receive for fast network port |
US6567091B2 (en) | 2000-02-01 | 2003-05-20 | Interactive Silicon, Inc. | Video controller system with object display lists |
US6952751B1 (en) | 2000-04-07 | 2005-10-04 | Advanced Micro Devices, Inc. | Method and apparatus for extending legacy computer systems |
US20020069402A1 (en) * | 2000-10-05 | 2002-06-06 | Nevill Edward Colles | Scheduling control within a system having mixed hardware and software based instruction execution |
US7149878B1 (en) * | 2000-10-30 | 2006-12-12 | Mips Technologies, Inc. | Changing instruction set architecture mode by comparison of current instruction execution address with boundary address register values |
GB2372348B (en) * | 2001-02-20 | 2003-06-04 | Siroyan Ltd | Context preservation |
US6976155B2 (en) * | 2001-06-12 | 2005-12-13 | Intel Corporation | Method and apparatus for communicating between processing entities in a multi-processor |
JP3702815B2 (ja) * | 2001-07-12 | 2005-10-05 | 日本電気株式会社 | プロセッサ間レジスタ継承方法及びその装置 |
US6954846B2 (en) * | 2001-08-07 | 2005-10-11 | Sun Microsystems, Inc. | Microprocessor and method for giving each thread exclusive access to one register file in a multi-threading mode and for giving an active thread access to multiple register files in a single thread mode |
US8769508B2 (en) * | 2001-08-24 | 2014-07-01 | Nazomi Communications Inc. | Virtual machine hardware for RISC and CISC processors |
US20030126416A1 (en) * | 2001-12-31 | 2003-07-03 | Marr Deborah T. | Suspending execution of a thread in a multi-threaded processor |
US7398374B2 (en) * | 2002-02-27 | 2008-07-08 | Hewlett-Packard Development Company, L.P. | Multi-cluster processor for processing instructions of one or more instruction threads |
US7313676B2 (en) * | 2002-06-26 | 2007-12-25 | Intel Corporation | Register renaming for dynamic multi-threading |
US7519800B2 (en) * | 2003-03-27 | 2009-04-14 | Hewlett-Packard Development Company, L.P. | Apparatus and method for enforcing homogeneity within partitions of heterogeneous computer systems |
US7376954B2 (en) * | 2003-08-28 | 2008-05-20 | Mips Technologies, Inc. | Mechanisms for assuring quality of service for programs executing on a multithreaded processor |
US7707389B2 (en) | 2003-10-31 | 2010-04-27 | Mips Technologies, Inc. | Multi-ISA instruction fetch unit for a processor, and applications thereof |
US9189230B2 (en) | 2004-03-31 | 2015-11-17 | Intel Corporation | Method and system to provide concurrent user-level, non-privileged shared resource thread creation and execution |
US7260702B2 (en) * | 2004-06-30 | 2007-08-21 | Microsoft Corporation | Systems and methods for running a legacy 32-bit x86 virtual machine on a 64-bit x86 processor |
-
2004
- 2004-03-31 US US10/816,103 patent/US9189230B2/en not_active Expired - Fee Related
-
2005
- 2005-03-31 DE DE112005000706T patent/DE112005000706B4/de not_active Expired - Fee Related
- 2005-03-31 WO PCT/US2005/010923 patent/WO2005098624A1/en active Application Filing
- 2005-03-31 CN CN2005800100530A patent/CN1938686B/zh not_active Expired - Fee Related
- 2005-03-31 TW TW094110320A patent/TWI321749B/zh not_active IP Right Cessation
- 2005-03-31 CN CN201210105283.7A patent/CN102779024B/zh not_active Expired - Fee Related
- 2005-03-31 JP JP2007506565A patent/JP4949231B2/ja not_active Expired - Fee Related
-
2012
- 2012-01-06 JP JP2012001179A patent/JP2012094175A/ja active Pending
- 2012-04-19 JP JP2012095473A patent/JP2012160202A/ja active Pending
- 2012-12-20 US US13/722,481 patent/US9442721B2/en not_active Expired - Fee Related
-
2014
- 2014-03-12 JP JP2014048903A patent/JP2014112438A/ja active Pending
- 2014-07-30 JP JP2014154360A patent/JP2014222533A/ja active Pending
- 2014-09-11 JP JP2014185017A patent/JP2015015041A/ja active Pending
-
2016
- 2016-03-31 US US15/088,043 patent/US9952859B2/en not_active Expired - Fee Related
- 2016-11-07 JP JP2016217176A patent/JP2017027627A/ja active Pending
-
2018
- 2018-02-20 US US15/900,030 patent/US10585667B2/en not_active Expired - Lifetime
- 2018-04-02 US US15/943,611 patent/US10628153B2/en not_active Expired - Lifetime
- 2018-04-02 US US15/943,609 patent/US10613858B2/en not_active Expired - Lifetime
- 2018-04-02 US US15/943,614 patent/US10635438B2/en not_active Expired - Lifetime
- 2018-10-02 JP JP2018187423A patent/JP2018200735A/ja active Pending
Also Published As
Publication number | Publication date |
---|---|
TWI321749B (en) | 2010-03-11 |
US10585667B2 (en) | 2020-03-10 |
US9189230B2 (en) | 2015-11-17 |
JP2017027627A (ja) | 2017-02-02 |
US20180321936A1 (en) | 2018-11-08 |
CN102779024B (zh) | 2016-09-28 |
US20160216971A1 (en) | 2016-07-28 |
US10613858B2 (en) | 2020-04-07 |
JP2014222533A (ja) | 2014-11-27 |
DE112005000706T5 (de) | 2007-02-15 |
US20050223199A1 (en) | 2005-10-06 |
US10635438B2 (en) | 2020-04-28 |
JP2007531167A (ja) | 2007-11-01 |
TW200602971A (en) | 2006-01-16 |
CN102779024A (zh) | 2012-11-14 |
JP2018200735A (ja) | 2018-12-20 |
US10628153B2 (en) | 2020-04-21 |
US20180225118A1 (en) | 2018-08-09 |
JP2014112438A (ja) | 2014-06-19 |
JP2015015041A (ja) | 2015-01-22 |
JP2012160202A (ja) | 2012-08-23 |
DE112005000706B4 (de) | 2011-02-17 |
US9952859B2 (en) | 2018-04-24 |
US20180307484A1 (en) | 2018-10-25 |
US20180225117A1 (en) | 2018-08-09 |
CN1938686A (zh) | 2007-03-28 |
US9442721B2 (en) | 2016-09-13 |
US20130111194A1 (en) | 2013-05-02 |
WO2005098624A1 (en) | 2005-10-20 |
JP2012094175A (ja) | 2012-05-17 |
CN1938686B (zh) | 2012-06-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4949231B2 (ja) | ユーザーレベルのマルチスレッドを提供する方法およびシステム | |
US9459874B2 (en) | Instruction set architecture-based inter-sequencer communications with a heterogeneous resource | |
US7849297B2 (en) | Software emulation of directed exceptions in a multithreading processor | |
US9069605B2 (en) | Mechanism to schedule threads on OS-sequestered sequencers without operating system intervention | |
US7424599B2 (en) | Apparatus, method, and instruction for software management of multiple computational contexts in a multithreaded microprocessor | |
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 | |
GB2493607A (en) | Eliminating redundant instruction processing in an SIMT processor | |
EP1966693A1 (en) | Data structure and management techniques for local user-level thread data | |
Shimada et al. | for the Parallel Inference Machine PIE64 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20090324 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20090623 |
|
A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20090630 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20090723 |
|
A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20090730 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20090821 |
|
A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20090828 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20090907 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20100831 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20101125 |
|
A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20101202 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20101224 |
|
A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20110106 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20110126 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20110906 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20120106 |
|
A911 | Transfer to examiner for re-examination before appeal (zenchi) |
Free format text: JAPANESE INTERMEDIATE CODE: A911 Effective date: 20120116 |
|
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: 20120207 |
|
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: 20120307 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20150316 Year of fee payment: 3 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 4949231 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 |
|
LAPS | Cancellation because of no payment of annual fees |