JP2008525921A - オペレーティング・システム介入なしにos隔離シーケンサー上でスレッドをスケジューリングする機構 - Google Patents
オペレーティング・システム介入なしにos隔離シーケンサー上でスレッドをスケジューリングする機構 Download PDFInfo
- Publication number
- JP2008525921A JP2008525921A JP2007549606A JP2007549606A JP2008525921A JP 2008525921 A JP2008525921 A JP 2008525921A JP 2007549606 A JP2007549606 A JP 2007549606A JP 2007549606 A JP2007549606 A JP 2007549606A JP 2008525921 A JP2008525921 A JP 2008525921A
- Authority
- JP
- Japan
- Prior art keywords
- sequencer
- thread
- shred
- execution
- queue
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
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/46—Multiprogramming arrangements
-
- 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/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
Abstract
OS独立な「シュレッド」をオペレーティング・システムの介入なしにスケジューリングするための方法、装置およびシステムの諸実施形態。少なくとも一つの実施形態については、シュレッドは、オペレーティング・システムではなくスケジューラ・ルーチンによって実行のためにスケジューリングされる。スケジューラ・ルーチンは、有効にされた各シーケンサー上で走りうる。スケジューラは、待ち行列システムからシュレッド記述子を取得しうる。次いでスケジューラに関連付けられたシーケンサーが記述子によって記述されるシュレッドを実行しうる。その他の実施形態も記載され、請求される。
Description
本開示は、概括的には情報処理システムに、より詳細にはオペレーティング・システム介入なしにOS隔離シーケンサー(OS-sequestered sequencers)上でスレッド実行のスケジューリングおよび制御に関する。
マイクロプロセッサを含む情報処理システムのような、情報処理システムのパフォーマンスを上げるため、ハードウェア技術およびソフトウェア技術の両方が用いられてきた。ハードウェア側では、マイクロプロセッサのパフォーマンスを改善するためのマイクロプロセッサ設計法は、増加したクロック速度、パイプライン処理、分岐予測、スーパースカラー実行、アウト・オブ・オーダ実行およびキャッシュを含んできた。多くのそのようなアプローチはトランジスタ数の増大につながり、場合によってはパフォーマンス向上の割合よりも大きな割合でのトランジスタ数の増加をもたらしていた。
厳密に追加的なトランジスタを通じてパフォーマンス向上を図るのではない、他のパフォーマンス向上は、ソフトウェア技術に関わるものである。プロセッサのパフォーマンスを改善するために用いられてきたソフトウェア・アプローチの一つは、「マルチスレッド(multithreading)」として知られている。ソフトウェア・マルチスレッドにおいては、命令ストリームは、並列に実行できる複数の命令ストリームに分割される。あるいはまた、複数の独立したソフトウェア・ストリームが並列に実行されうる。
タイムスライス・マルチスレッドまたは時間多重(time-multiplex)(「TMUX」)として知られるアプローチでは、単一のプロセッサが、決まった時間期間後にスレッドを切り換える。もう一つのアプローチでは、単一のプロセッサが、長い遅延のキャッシュミス(a long latency cache miss)といったトリガー・イベントの生起に際してスレッドを切り換える。イベント時切り換えマルチスレッド(switch-on-event multithreading)(「SoEMT」)として知られるこの後者のアプローチでは、ある所与の時間には高々一つのスレッドしかアクティブでない。
マルチスレッドはますますハードウェアでサポートされつつある。たとえば、あるアプローチでは、チップ・マルチプロセッサ(chip multiprocessor)(「CMP」)システムのようなマルチプロセッサ・システムにおける各プロセッサは、同時並行して、複数のソフトウェア・スレッドの一つに対して作用しうる。同時マルチスレッド(simultaneous multithreading)(「SMT」)と称されるもう一つのアプローチでは、単一の物理的なプロセッサが、オペレーティング・システムやユーザー・プログラムには複数の論理的なプロセッサとして見えるようにされる。SMTについては、複数のソフトウェア・スレッドが、切り換えなしに、単一のプロセッサ上で同時にアクティブであり実行されることができる。すなわち、各論理的なプロセッサがアーキテクチャ状態の完全なセットを維持するが、当該物理的なプロセッサの他の多くの資源、たとえばキャッシュ、実行ユニット、分岐予測器、制御論理およびバスは共有される。SMTについては、こうして、複数のソフトウェア・スレッドからの命令が同時並行して各論理的なプロセッサ上で実行される。
SMTおよび/またはCMPシステムのような複数ソフトウェア・スレッドの同時並行的な実行をサポートするシステムのために、ソフトウェア・スレッドのスケジューリングおよび実行をオペレーティング・システム・アプリケーションが制御しうる。しかし、典型的には、オペレーティング・システム制御はスケーリングがよくなく、オペレーティング・システム・アプリケーションがパフォーマンスに悪影響を与えることなくスレッドをスケジューリングする能力は、普通には、比較的少数のスレッドに限定される。
本発明の諸実施形態は図面を参照しつつ理解されうる。図面では、同様の要素は同様の数字で示される。図面は限定することを意図されてはおらず、OS隔離スレッドを実行のためにスケジューリングする装置、システムおよび方法の選ばれた実施形態を解説するために与えられるものである。
以下の議論は、一つまたは複数のOS隔離シーケンサー上の(「シュレッド(shred)」と称される)実行のスレッドをスケジューリングする、および/または他の仕方で制御する方法、システムおよび機構の選ばれた実施形態を記載する。OS隔離シーケンサー(OS-sequestered sequencers)は本稿では「OS不可視(OS-invisible)」と称されることがある。ここに記載される機構は単一コアまたはマルチコアのマルチスレッド・システムで利用されうる。以下の記述では、本発明のより完全なる理解を提供するために、プロセッサの種類、マルチスレッド環境、システム構成、マルチシーケンサー・システムにおけるシーケンサーの数およびトポロジー、マイクロアーキテクチャ構造および命令命名体系ならびにパラメータといった数多くの個別的な詳細が述べられる。しかしながら、そうした個別的な詳細なしでも本発明が実施されうることは当業者によって理解されるであろう。さらに、いくつかのよく知られた構造、回路などは、本発明を無用に埋没させるのを避けるために詳しく示していない。
共有メモリマルチプロセッシングのパラダイムが、並列プログラミングと称されるアプローチにおいて使用されうる。このアプローチによれば、アプリケーションのプログラマは、ソフトウェア・プログラムについて並列を表現するために、ソフトウェア・プログラム(「アプリケーション」または「プロセス」と称されることもある)を同時並行して実行される複数のタスクに分割しうる。同じソフトウェア・プログラム(「プロセス」)のすべてのスレッドは、メモリについて共通の論理的なビューを共有する。
図1は、マルチシーケンサー・マルチスレッド・システム上での並列プログラミングのアプローチの図的な表現を示すブロック図である。図1は、オペレーティング・システム140に見えるプロセス100、120を示している。これらのプロセス100、120は、ワード・プロセッシング・プログラムおよび電子メール管理プログラムといった、異なるソフトウェア・アプリケーション・プログラムであってもよい。普通、各プロセスは異なるアドレス空間内で動作する。
オペレーティング・システム(「OS」)140は普通、図1に示されるプロセス120のようなプロセスについてユーザー生成のタスクを管理することを担う。したがって、オペレーティング・システム140は、プロセス120に関連付けられたユーザー定義のタスクのそれぞれについて相異なるスレッド125、126を生成することができ、スレッド125、126をスレッド実行資源にマッピングすることができる。(これらの実行資源は図1には示されていないが、のちに詳細に議論する。)OS140は普通、これらのスレッド125、126を実行資源上での実行のためにスケジューリングすることを担う。単一のプロセスに関連付けられた諸スレッドは、典型的には、メモリについて同じビューをもち、互いの仮想アドレス空間に対する可視性をもつ。
スレッドを生成し、マッピングし、スケジューリングすることはOS140が担うので、スレッド125、126はOS140に「見える」。さらに、本発明の諸実施形態は、OS140には見えない追加的なスレッド130〜136を包含する。すなわち、これらの追加的なスレッド130〜136については、OS140は生成、管理もしくは他の仕方での認識または制御をしない。OS140によって生成も制御もされないこうした追加的なスレッドは、OSに見えるスレッドと区別するため、本稿では時に「シュレッド」130〜136と称される。シュレッドはユーザーレベルのプログラムによって生成および管理され、オペレーティング・システムからは隔離されているシーケンサー上で走るようスケジューリングされる。OS隔離シーケンサーは、OS可視シーケンサーと同じリング0状態を共有する。このように、シュレッド(shred)は、同じプロセスに関連付けられた諸スレッド(thread)のために生成される同じ実行環境(アドレス・マップ)を共有する(share)。
ここでの用法では、「スレッド」および「シュレッド」の用語は、少なくとも、あるプロセスの他のスレッドおよび/またはシュレッドと同時並行して実行されるべき命令の集合の概念を含む。したがって、スレッドおよび「シュレッド」の用語はいずれも、ソフトウェア命令の集合の概念を包含する。ここでの用法では、どちらも命令のストリームであるスレッド(これはOSに制御される)とシュレッド(これはオペレーティング・システムには見えず、その代わりユーザーによって制御される)とを区別する因子は、スレッドおよびシュレッドの命令ストリームの実行がどのように管理されるかの相違にある。スレッドはOSへのシステムコールに反応して生成される。OSがそのスレッドを生成し、そのスレッドを走らせるために資源を割り当てる。スレッドに割り当てられたそのような資源は、オペレーティング・システムがスレッドを制御およびスケジューリングするために使うデータ構造を含みうる。
これに対し、シュレッドの少なくとも一つの実施例は、ユーザー命令または「プリミティブ」を介して生成される。それがOSが認識しないシュレッドを生成するためのソフトウェア・ライブラリまたはその他のOS独立な機構を呼び出すのである。このように、シュレッドはユーザーレベルのソフトウェア・ライブラリ・コールに反応して生成されうる。
図2は、同じソフトウェア・プログラムまたはプロセスのすべてのスレッドがメモリについて共通の論理的なビューを共有するという、上記の陳述に関するさらなる詳細を図的な形で示すブロック図である。本発明の諸実施形態については、この陳述は、プロセス100、120に関連付けられたシュレッドに関しても真である。ここでは図2について、図1を参照しつつ議論する。
図2は、図1に示されるプロセス120、スレッド125、126およびシュレッド130〜136の図的な表現である。しかしながら、そのような表現は限定するものと解釈すべきではない。本発明の諸実施形態は必ずしもあるプロセスに関連付けられるスレッドまたはシュレッドの数に上限または下限を課すことはしない。下限に関しては、図1は、所与の時点において走っているあらゆるプロセスが必ずしも何らかのスレッドまたはシュレッドと関連付けられている必要はないことを示している。たとえば、図1に示したプロセス0 100は、図1に示されている特定の時点ではスレッドもシュレッドもなしに走っていることが示されている。
しかしながら、別のプロセス120が、図1に示されるように、一つまたは複数のスレッド125、126に関連付けられていることがある。さらに、プロセス120は追加的に、一つまたは複数のシュレッド130〜136とも関連付けられていることがある。プロセス120についての二つのスレッド125、126および4つのシュレッド130〜136の表現はあくまでも例示的なものであって、限定するものと解釈すべきではない。あるプロセスに関連付けられたOS可視スレッドの数はOSプログラムによって限定されうる。しかしながら、プロセスに関連付けられたシュレッドの累積数についての上限は、少なくとも一つの実施例については、実行中のある特定の時点において利用可能なスレッド実行資源の数によってのみ限定される。図2は、プロセス120に関連付けられている第二のスレッド126が第一のスレッド125とは異なる数(n)の関連付けられたスレッドをもちうることを示している。(Nはスレッド125、126の一方または両方について0であってもよい。)
図2は、ある特定のプロセス120に関連付けられたすべてのスレッド125、126によって共有されるメモリのある特定の論理的なビュー200を示している。図2は、各スレッド125、126がそれぞれ独自のアプリケーションおよびシステム状態202a、202bを有していることを示している。図2は、スレッド125、126についての該アプリケーションおよびシステム状態202が、その特定のスレッドに関連付けられたすべてのシュレッド(たとえばシュレッド130〜136)によって共有されることを示している。
したがって、図2は、本発明の少なくとも一つの実施形態についてのシステムが、スレッド125のようなOS可視スレッドと、該スレッドに関連付けられたシュレッド130〜136(これはOSには不可視)との間の一対多の関係をサポートしうることを示している。シュレッドを生成し、同期させ、その動作をその他の仕方で管理および制御するためにOSでなくプログラマがユーザーレベルの技法を用いうるという意味において、シュレッドはOS(図1の140参照)に「可視」ではない。OS140はスレッドを認識し、管理するものの、OS140はシュレッドは認識せず、管理も制御もしない。
こうして、スレッドユニット・ハードウェアとシュレッドとの間のマッピングを管理するためにオペレーティング・システムに頼る代わりに、少なくとも一つの実施例については、ユーザーがそのようなマッピングを直接的に制御でき、シュレッド実行に関連付けられた制御および状態転移を直接的に操作できる。したがって、ここに記載される方法、機構およびシステムの諸実施形態について、スレッドユニットのアーキテクチャのユーザーに見える特徴は、少なくとも、ユーザーにスレッドユニット・ハードウェアの直接操作および制御を許容する正準的な命令セットである。
ここでの用法では、スレッドユニット(ここでは交換可能的に「シーケンサー」とも称される)とは、スレッドまたはシュレッドを実行する機能のある任意の物理的または論理的なユニットでありうる。これは、所与のスレッドまたはシュレッドのために実行されるべき次の命令を決定するための次命令ポインタ論理を含みうる。たとえば、図2に示されるOSスレッド125は、図示されないシーケンサー上で実行されうる一方、アクティブなシュレッド130〜136のそれぞれは、それぞれ他のシーケンサー「seq1」〜「seq4」上で実行されうる。シーケンサーは論理的なスレッドユニットであっても物理的なスレッドユニットであってもよい。論理的なスレッドユニットと物理的なスレッドユニットとの間の区別を図3に示す。
図3は、開示されている技法を実行する機能のあるマルチシーケンサー・システムの実施例310、350の選ばれたハードウェア特徴を示すブロック図である。図3が示すのは、SMTマルチシーケンサー・マルチスレッド環境310の選ばれたハードウェア特徴を示している。図3はまた、複数コアのマルチスレッド環境350の選ばれたハードウェア特徴をも示しており、この場合、各シーケンサーは別個の物理的なプロセッサ・コアである。
SMT環境310では、単一の物理プロセッサ304は、オペレーティング・システムおよびユーザー・プログラムにとっては、複数の論理プロセッサ(図示せず)として見えるようにされる。該複数の論理プロセッサはここではLP1ないしLPnと称される。各論理プロセッサLP1ないしLPnは、それぞれ完全なセットのアーキテクチャ状態AS1〜ASnを含む。アーキテクチャ状態は、少なくとも一つの実施例については、データレジスタ、セグメントレジスタ、制御レジスタ、デバッグ・レジスタおよび大半のモデル固有のレジスタを含む。論理プロセッサLP1〜LPnは、キャッシュ、実行ユニット、分岐予測器、制御論理およびバスといった物理プロセッサ304の大半の他の資源を共有する。そのような特徴は共有されうるものの、マルチスレッド環境310における各スレッド・コンテキストは、次命令アドレスを独立して生成できる(そしてたとえば命令キャッシュ、実行命令キャッシュまたはトレース・キャッシュからのフェッチを実行できる)。こうして、プロセッサ304は、各スレッド・コンテキストについての命令をフェッチするため、論理的に独立な次命令ポインタおよびフェッチ論理320を含む。ただし、その複数の論理シーケンサーは単一の物理的なフェッチ/デコード・ユニット322において実装してもよいのであるが。SMTまたは実施例については、「シーケンサー」の用語は少なくとも、あるスレッド・コンテキストについての次命令ポインタおよびフェッチ論理320を、そのスレッド・コンテキストについての関連付けられたアーキテクチャ状態ASの少なくとも一部とともに包含する。SMTシステム310のシーケンサーが対称的である必要はないことも注意しておくべきである。たとえば、同じ物理コアのための二つのSMTシーケンサーは、そのそれぞれが維持するアーキテクチャ状態情報の量において違っていてもよい。
こうして、少なくとも一つの実施例については、マルチシーケンサー・システム310は、同時並行マルチスレッドをサポートする単一コアのプロセッサ304である。そのような実施形態については、各シーケンサーは、独自の命令次命令ポインタおよびフェッチ論理と独自のアーキテクチャ状態情報とをもつ論理プロセッサであるが、同じ物理プロセッサ・コア304がすべてのスレッド命令を実行する。そのような実施形態については、論理プロセッサは、アーキテクチャ状態については独自のバージョンを維持するが、単一のプロセッサ・コアの実行資源は同時実行されるスレッドの間で共有されうる。
図3は、マルチコア・マルチスレッド環境350の少なくとも一つの実施形態をも示している。そのような環境350は、それぞれが異なるスレッド/シュレッドを実行する機能をもつ二つ以上の別個の物理的プロセッサ304a〜304nを含んでおり、該複数の異なるスレッド/シュレッドの少なくとも一部分の実行は同時に進行しうるようになっている。各プロセッサ304aないし304nは、それぞれのスレッドまたはシュレッドのための命令情報をフェッチするため、物理的に独立なフェッチ・ユニット322を含んでいる。各プロセッサ304a〜304nが単一のスレッド/シュレッドを実行する実施形態では、フェッチ/デコード・ユニット322は単一の次命令ポインタおよびフェッチ論理320を実装する。しかしながら、各プロセッサ304a〜304nが複数スレッド・コンテキストをサポートする実施形態では、フェッチ/デコード・ユニット322は、サポートされるスレッド・コンテキストそれぞれについて相異なる次命令ポインタおよびフェッチ論理320を実装する。マルチプロセッサ環境350における追加的な次命令ポインタおよびフェッチ論理320が任意的であるという性質は、図3で点線によって表されている。
こうして、図3に示されるマルチコア・システム350の少なくとも一つの実施例については、シーケンサーのそれぞれは、単一のチップ・パッケージ360に複数のコア304a〜304nが存在しているプロセッサ・コア304でありうる。各コア304a〜304nは、単一スレッドまたはマルチスレッドのプロセッサ・コアのいずれでもありうる。図3ではチップ・パッケージ360は破線で表されているが、これはマルチコア・システム350の図示されている単一チップ実施形態が単に例示的であることを示している。他の実施形態については、マルチコア・システムのプロセッサ・コアは別個のチップ上に存在してもよい。
議論を簡単にするため、以下の議論はマルチコア・システム350の諸実施形態に焦点を当てる。しかしながら、この焦点は限定するものと解釈するべきではない。以下に記載される機構は、マルチコアまたは単一コアのマルチシーケンサー環境のいずれにおいて実行されてもよいのである。
図4は、ユーザーレベルのスレッド制御をサポートするマルチシーケンサー・マルチスレッド・システムのためのスケジューリング機構400の少なくとも一つの実施形態を示すデータフロー図である。図4は、機構400が作業待ち行列システム402を含むことを示している。該機構はまた、スケジューラ・ルーチン450をも含むが、これは複数シーケンサー403、404のそれぞれの上で実行されうる。
作業待ち行列システム402は、少なくとも一つの実施例については、実行の順番待ちをしていてしたがって「ペンディング」であるユーザー定義のシュレッドのための記述子を維持しうる。上で述べたように、OSが提供するスケジューリング機構ではないスケジューリング機構400が用いられうる。各作業記述子は、OS介入とは独立して、OS隔離されたまたはOS可視のシーケンサーのいずれかの上で実行されるべきシュレッドを記述する。
シュレッド記述子は、ユーザーレベルのシュレッド生成命令すなわちプリミティブによって生成されうる。当業者は、プログラマのコードと、シーケンサーにシュレッド記述子の生成および該記述子の作業待ち行列402への配置につながる動作を実行させる実際のアーキテクチャ命令との間に、抽象化のいくつかのレベルがありうることを認識する。ここでの用法では、プログラマまたはユーザーによって生成されると述べられる命令は、ユーザー生成されたコードに基づいてアセンブラまたはコンパイラによって、またはアセンブリ言語で作業しているプログラマによって生成されうるアーキテクチャ命令のみならず、最終的にアセンブルまたはコンパイルされてアーキテクチャ上のシュレッド制御命令になる任意の高級プリミティブまたは命令をも包含することが意図されている。アーキテクチャ上のシュレッド制御命令がさらにスレッド実行ユニットによって一つまたはマイクロ演算にデコードされうることも理解されるべきである。
図4は、シーケンサーのそれぞれについてのスケジューラ・ルーチン450a、450bが、関連付けられたシーケンサー403、404上での実行のためにシュレッドを取得するために、作業待ち行列システム402にアクセスしうることを示している。このように、図4は、シュレッドのユーザーレベルでのマッピングおよび制御を許容するスケジューリング機構の少なくとも一つの実施形態を示している。該シュレッドは、シュレッドのスケジューリングのためのOS介入なしに、互いに、および/またはOSに制御されるスレッドと同時並行して実行されうる。
図4に示されているシーケンサー403、404が対称的である必要はなく、その数も限定するものと解釈されるべきではないことを注意しておくべきである。シーケンサーの数に関しては、スケジューリング機構400はシーケンサーいくつについて利用されてもよい。たとえば、スケジューリング機構は、4個、8個、16個、32個またはそれ以上のシーケンサーを含むマルチシーケンサー・システムについて実装されうる。
対称性に関し、シーケンサー403、404は、計算の品質に影響する諸側面も含め、あらゆる仕方で異なりうる。たとえば、シーケンサーは電力消費、計算実行のスピード、機能上の特徴などに関して異なりうる。例として、ある実施形態については、シーケンサー403、404は機能性の面で異なりうる。たとえば、一つのシーケンサーは整数および浮動小数点命令を実行する機能をもつが、ストリーミングSIMD拡張3(「SSE3」)のような単一命令多重データ(single instruction multiple data)(「SIMD」)命令セット拡張は実行できないことがありうる。その一方で、別のシーケンサーは第一のシーケンサーが実行できるすべての命令を実行できる上にSSE3命令を実行できることがありうる。
機能上の非対称のもう一つの例として、本発明のある実施形態については、あるシーケンサーはOS(たとえば図1の140参照)に可視でもよく、したがってシステムコール、ページフォールトへの対応などを実行するような「リング0」動作を実行する機能をもちうる。他方、別のシーケンサーは、OSから隔離されていて、リング0動作を実行することができないこともありうる。
スケジューリング機構400が利用されるシステムのシーケンサーも、大きさ、語長および/またはデータ路サイズ、トポロジー、メモリ、電力消費、機能ユニット数、通信アーキテクチャ(マルチドロップかポイントツーポイント相互接続か)または機能性、パフォーマンス、フットプリントなどに関係する他の任意の基準といった、あらゆる仕方で異なりうる。
図5は、非対称なマルチシーケンサー・マルチスレッド・システムのためのスケジューリング機構500の少なくとも一つの実施形態を示すデータフロー図である。図5は単に非対称の一つの実施形態を示すものであり、第一のシーケンサー503はオペレーティング・システム540に可視である一方、第二のシーケンサー504はオペレーティング・システム540から隔離されている。ここでもまた、当業者は、他の型の非対称がシステムに存在していてもよく、三つ以上のシーケンサーがシステムに存在していてもよいことを認識するであろう。
図5は、OS可視シーケンサー503および隔離シーケンサー504のそれぞれについてのスケジューラ・ルーチン450a、450bが、該スケジューラのインスタンス450a、450bに対応するシーケンサー503、504上で実行されるべきシュレッドを求めて作業待ち行列システム502を探査することを示している。ここでもまた、そのような機構500は、オペレーティング・システム540の介入なしに、非対称なシーケンサー上でのシュレッドのスケジューリングを提供する。
図6は、非対称なマルチシーケンサー・マルチスレッド・システムのための、スケジューリング機構600の少なくとも一つの実施形態についてのさらなる詳細を示すデータフロー図である。図6は、作業待ち行列602が複数の作業待ち行列604、606を含みうることを示している。少なくとも一つの実施形態について、複数の作業待ち行列604、606のそれぞれは、あるシーケンサー型に関連付けられる。図6に示された見本実施形態については、第一の待ち行列604は、ここでは「A型」と称される第一の型のシーケンサー640の一つまたは複数の集合に関連付けられている。第二の待ち行列606は、ここでは「B型」と称される第二の型のシーケンサー642の一つまたは複数の集合に関連付けられている。これまでの図に示した他の実施形態の場合と同様、図6に示されるような待ち行列およびシーケンサー型の数ならびに各型のシーケンサーの数は限定するものと解釈すべきではない。
したがって、図6は、少なくとも二つの型の非対称なシーケンサー――A型シーケンサー640およびB型シーケンサー642――を含むシステムについてのスケジューリング機構600を示している。待ち行列システム602は、シーケンサーの各型に関連付けられた作業待ち行列604、606を含む。各シーケンサー640、642は、分散されたスケジューラ・ルーチン450の一部分を含む。部分450a、450bは互いに同一のコピーであってもよいが、それは必須ではない。
図6は、第一の待ち行列604がA型シーケンサー640の上で走るシュレッド623についてのシュレッド記述子を含みうることを示している。第二の待ち行列606がB型シーケンサー642の上で走るシュレッド624についてのシュレッド記述子を含みうる。A型のシュレッド623は、A型シーケンサー640によって提供される特定の機能性を利用するためにユーザーによって書かれたソフトウェア・シーケンスでありうる。同様に、B型のシュレッド624は、B型シーケンサー642によって提供される特定の機能性を利用するためにユーザーによって書かれたソフトウェア・シーケンスでありうる。
少なくとも一つの実施例については、A型およびB型シーケンサーの機能性は互いに排反でありうる。すなわち、たとえば、ある集合の諸シーケンサー640は、もう一方の集合の諸シーケンサー642がサポートしない、SSE3命令の実行のようなある特定の機能性をサポートできる。その一方、別のある集合の諸シーケンサー642は、もう一方の集合の諸シーケンサー640がサポートしない、リング0動作のようなある特定の機能性をサポートできる。
そのような実施形態について、スケジューリング機構600の動作は、第一の型のシュレッド623についての記述子はA型シーケンサー640上のスケジューラ・ルーチン450によって第一の待ち行列604から引き出すことができ、その一方、第二の型のシュレッド624についての記述子はA型シーケンサー640上のスケジューラ・ルーチン450によって第一の待ち行列604から引き出すことができるようなものである。シュレッドの適切なシーケンサーへのマッピングはユーザーレベルの命令によって指令されうる。
しかしながら、図6で図示した実施形態のような少なくとも一つの他の実施例については、A型シーケンサー640とB型シーケンサー642の機能性は、互いに排反な機能性の関係ではなく、上位集合―部分集合の機能性関係を表す。すなわち、第一の集合のシーケンサー(A型シーケンサー640のような)は、第二の集合のシーケンサー(B型シーケンサー642のような)のすべての機能性に加えて、該第二の集合のシーケンサー642によって提供されない追加的な機能性をも含む、上位集合の機能性を提供するのである。そのような実施形態については、A型シーケンサー640のためのスケジューラ・ルーチン450は、任意的に、第二の待ち行列606からのシュレッド記述子を取得しうる。この任意的な処理は、たとえばA型シーケンサーのためのすべての記述子が利用不能である(たとえば、第一の待ち行列604が空であるような)場合に実行されうる。換言すれば、上位集合の機能性をもつシーケンサーは、そのようなシーケンサーのために特に指定されたシュレッドを実行しうるが、部分集合の機能性のシーケンサーのために指定されたシュレッドをも実行しうるのである。
最後に、図6は、別のシュレッドによって、またはシュレッド認識スレッド(shred-aware thread)によって実行されたシュレッド生成命令に反応してシュレッド記述子が作業待ち行列システム602に入れられ660うることを示している。少なくとも一つの実施例については、シュレッド記述子の生成をトリガーする命令は、shred_createのようなAPI様(「アプリケーション・プログラマ・インターフェース[Application Programmer Interface]」)スレッド制御プリミティブである。ソフトウェア・ライブラリによって提供されるようなソフトウェアが、shred_createプリミティブに反応して、新たなシュレッドについてのシュレッド記述子を生成することができ、それを作業待ち行列システム602に入れることができる。
少なくとも一つの実施例については、シュレッド記述子はこうしてshred_createプリミティブに反応してソフトウェアによって生成され、待ち行列システム702に入れられる。シュレッド記述子は、少なくとも一つの実施例については、シュレッドについて少なくとも以下の属性を同定するレコードでありうる:a)シュレッドが実行を開始すべきアドレス、およびb)スタック記述子。このスタック記述子は、新たなシュレッドが、ローカル変数および戻りアドレスのような一時変数を記憶するために使うメモリ記憶領域(スタック)を同定する。
図7は、図4〜図6に示したいずれかのようなスケジューリング機構の実施形態を利用するための見本系列を示すデータフロー図であり、マルチシーケンサー・システム上での実行のためのシュレッドのユーザーレベルのスケジューリングを実行するためのものである。少なくとも一つの実施例については、方法700は、シーケンサー770上で走っているスレッドTによって実行される。少なくとも一つの実施例については、方法700は、プログラマのようなユーザーによって生成される命令に反応して実行される。図7については、そのような命令は、スレッドTの命令と称される。もちろん、方法700の諸ブロックは、図7に示したのとは異なる系列においてユーザーによってプログラムされてもよい。
図7は、シーケンサーが機能上の基準に関して非対称であるマルチシーケンサー・システムの見本実施形態を示している。すなわち、スレッドTが実行されるシーケンサー770はOS可視シーケンサーである。よって、シーケンサー770は、オペレーティング・システムとの対話を介して、リング0動作(すなわち、ページフォールトへの対応、システムコールの実行など)のような特権動作を実行しうる。これに対し、図7に示した見本実施形態は、OSに可視でない隔離シーケンサー760をも含む。よって、隔離シーケンサー760は特権動作を実行することはできない。隔離シーケンサーはたとえば、リング3動作を実行するが、リング0動作を実行することはできないように限定されうる。このように、図7は、非対称なシーケンサーを含むマルチシーケンサー・システムの見本実施形態を示しているのである。
図7に示した実施形態については、方法700はブロック701で開始され、ブロック704に進む。ブロック704では、スレッドTが、該スレッドTに関連付けられた一つまたは複数の同時並行シュレッドのユーザーレベルの制御のために初期化を実行する一つまたは複数の命令を実行する。少なくとも一つの実施例については、そのような初期化704は、作業待ち行列システム702の一つまたは複数の待ち行列(たとえば図6の604および606参照)の生成および/または初期化を含みうる。
さらに、図7は、そのような初期化704が一つまたは複数の隔離されたシーケンサー760を含みうることを示している。もちろん、当業者は、ブロック704に示された待ち行列生成およびシーケンサー初期化が必ずしも単一のルーチン、方法または関数によって実行される必要はなく、ここで論じられる逐次順で実行される必要もないことを認識するであろう。たとえば、ある代替的な実施形態では、ブロック704で行われる初期化動作は、逆順に実行されてもよいし、あるいは同時並行して実行されてもよい。
ブロック704のシーケンサー初期化ブロックは、コンピュータ・プログラマのようなユーザーによってスレッドTについての命令ストリーム中に入れられたユーザー生成のシュレッド生成命令によって指示されるシュレッドを走らせるよう、隔離シーケンサー(単数または複数)760を準備するために実行されうるものである。少なくとも一つの実施例については、そのようなシーケンサー初期化は、隔離シーケンサー760のそれぞれの上の分散されたスケジューラ・ルーチン450の呼び出しを含みうる。のちにさらに詳細に論じるように、スケジューラ・ルーチン450の呼び出しは、スケジューリング・ループの実行につながりうる。ここで、分散されたスケジューラの各部分は、対応する隔離シーケンサー760によって実行されうる作業について作業待ち行列システム702を定期的に検査することを始める。
そのような初期化704なしでは、少なくとも一つの実施例については、隔離シーケンサー(単数または複数)760がシュレッドを実行するために利用でないことが予期される。少なくとも一つの実施例については、シュレッドを実行するようシーケンサー760を準備する初期化704は、少なくとも、スケジューラ・ルーチン450の呼び出しを含む。初期化704は、スレッドTについての命令ストリーム中でユーザーによって指示される各シーケンサーのために実行されうる。少なくとも一つの実施例については、スレッドTによる実行のために初期化されたすべてのシーケンサーは、スレッドTが関連付けられているプロセスのためにオペレーティング・システムが構築した仮想メモリの同じビューを共有する。
処理はブロック704からブロック706へと進む。ブロック706では、スレッドTは、ユーザー定義のmainシュレッド関数で始まる実行のためのシュレッド記述子を生成する。少なくとも一つの実施例については、ユーザー定義のmainシュレッド関数は、伝統的なOS可視のmain()関数を置き換える。図7は、mainシュレッドについてのシュレッド記述子が、作業待ち行列システム702に入れられうることを示している。したがって、mainシュレッドは、次の機会に分散されたシュレッド・スケジューラ・ルーチン450の一つによって実行のためにスケジューリングされるべく、順番待ちに入れられる。
ブロック706から、処理はブロック708に進む。ブロック708では、OS可視スレッドTが独自のスケジューリング・ループを開始する。したがって、スレッドTは、シーケンサー770上のスケジューラ・ルーチン750を初期化するために一つまたは複数の命令を実行する。図7は、スケジューラー750が、作業を第一のシーケンサー770上にスケジューリングするために作業待ち行列システム702を参照しうることを示している。このように、図7は、すべてのシュレッド記述子が共通の待ち行列システム702に送られる実施形態を示している。すべてのスケジューラ・ルーチン450a〜450n、550はその共通の待ち行列システム702に作業を要求し、スケジューリングするのである。スケジューリング・ルーチン450a〜450nの諸インスタンスは複数の隔離シーケンサーの間に分散されているので、スケジューリング・ルーチン450はここでは「分散された」スケジューラと称されうる。
少なくとも一つの実施例については、OS可視シーケンサー770(第一の型)は、待ち行列システム702の第一の作業待ち行列(たとえば図6の604参照)に関連付けられており、一方、隔離シーケンサー(第二の型)は、待ち行列システム702の第二の作業待ち行列(たとえば図6の606参照)に関連付けられている。図6との関連で先に説明したように、少なくとも一つの実施例については、第一のシーケンサー770は、作業待ち行列システム702内のどの待ち行列からでも作業を引き出しうる。
このようにして、OS可視シーケンサー770および一つもしくは複数の隔離シーケンサー760の両方が初期化され704、706、スケジューリングのような管理をOSに頼るのではなくユーザー生成された命令に基づいてシュレッドを実行できるようになった。図示したように、そのようにする少なくとも一つの機構は、mainシュレッド・ルーチンのためのシュレッド記述子を生成するシーケンサー770上のより一般的なOS可視スケジューラ・ルーチン750を呼び出すとともに、初期化された(ブロック704参照)隔離シーケンサー760上のスケジューラ・ルーチン450を呼び出すことである(ブロック708参照)。ブロック708から、処理はブロック710に進む。
ブロック710では、シーケンサー770は、そのスケジューラ750によってシーケンサー770上にスケジューリングされた命令を実行する。ブロック710の性質は、シーケンサー770上で複数のシュレッドまたはスレッド部分が逐次的に実行されうるという意味で反復的であってもよい。ブロック710が潜在的に反復的であるという性質は、図7では破線で表されている。
シーケンサー770は、そのシーケンサー型に関連付けられた作業待ち行列システム702の待ち行列においてシュレッド記述子によって指示されるシュレッド命令を実行しうる。そのような命令は、追加的なシュレッド記述子が生成され、作業待ち行列システム702に入れられるようにする命令を含みうる。
少なくとも一つの実施例については、シーケンサー770によって実行されるシュレッドは、隔離シーケンサー760では実行できず、770のシーケンサー型によって与えられる機能性を必要とするシュレッドを含みうる。たとえば図7に示した例については、シーケンサー770に関連付けられた待ち行列は、リング0動作を要求するシュレッド命令を含みうる。すなわち、OSはOS可視シーケンサーによって発されるシステムコールにしか対応できないので、シュレッドによって実行されるオペレーティング・システム・コールは特別な扱いを要求しうるのである。OS隔離シーケンサー760上で走るシュレッドのためのシステムコールは、プロキシ機構を介することでOS可視シーケンサー770によって実行されうる。
このプロキシ機構は、OS可視シーケンサーが、特権命令について前進するためにオペレーティング・システムの注意を得るためにシュレッドのなりすましをすることを許容する。プロキシ機構を実装しうる仕方はいくらでもある。たとえば、そのような機構は、隔離シーケンサー760が、OS隔離シーケンサー上でシステムコールのような特権命令の実行を試みるときに暗黙的に呼び出されてもよい。試みられたシステムコールは例外の生成を引き起こしうる。例外のハンドラがシュレッド状態を保存し、そのシステムコールについてのシュレッド記述子を生成し、該シュレッド記述子をOS可視シーケンサー702に関連付けられた待ち行列に入れることができる。そのような記述子がOS可視シーケンサー770上での実行710のためにスケジューリングされるとき、シーケンサー770は、シュレッドの状態を得てシステムコールを実行する前に、自分自身の状態を保存しうる。そのようなプロキシ実行については、OS可視シーケンサー770上での実行は、OS隔離シーケンサー760上でのフォールトを引き起こした命令において再開される。その際、シュレッドの状態が保存され、制御はフォールトしたOS隔離シーケンサー760に返され、それによりそのシュレッドの実行を続けることができる。
少なくとも一つの他の実施例については、特権命令に対するプロキシ実行はユーザーによって明示的に制御されうる。そのような実施形態については、ユーザーは明示的に、特権命令を含んでいるシュレッドがOS可視シーケンサー770上で実行されるべきであることを示しうる。そのような指示は、シュレッド生成プリミティブのパラメータまたは変形として表現されうる。待ち行列選好パラメータを含めること、あるいは特化したシュレッド生成プリミティブを使用することは、ここではいずれもまとめてスケジューリング・ヒントと称される。
シュレッド生成プリミティブ(たとえば「shred_create()」のような)プリミティブはライブラリ関数を呼び出しうる。その関数は、新たなシュレッド記述子の生成を引き起こし、さらにその記述子の、作業待ち行列システム702の待ち行列内への配置を引き起こす。標準的なshred_create()プリミティブの任意的なパラメータは、ユーザーがその記述子についての待ち行列型を指定することを許容しうる。あるいはまた、ここではshred_create_affinity()と称される任意的な関数コールが、ユーザーがその特定のシュレッドについての待ち行列選好(preference)を表現するために利用されうる。たとえば、シュレッドが多数のシステムコールを含んでいる場合、ユーザーはリング0動作を実行できるシーケンサー型に関連付けられた作業待ち行列を指定しうる。当業者は、同様のパラメータおよび/または代替パラメータのアプローチが譲歩プリミティブ(a yield primitive)とともに利用されてもよいことを認識するであろう。
図7に示したシステムは、システムコールの扱いに関係した追加的な安全措置を含みうる。たとえば、OSコールのまわりのシリアル化を提供するためにミューテックスが利用されうる。ミューテックスは、あるスレッドと一つまたは複数のその関連付けられたシュレッドとがスレッド同期のためにオペレーティング・システムによって提供される同じロックを取得しようと試みる場合に生じうるデッドロックを最小化するために利用されうる。
ブロック710で実行されるいかなるシュレッドまたはシュレッド部分についても、シーケンサー770は、そのシュレッドの実行を、終了(exit)または譲歩(yield)プリミティブが実行されるまで継続しうる。現在のシュレッドにおいて「終了」プリミティブに遭遇した場合、現在のシュレッドの実行は完了し、スケジューラ750は、待ち行列システム702の適切な待ち行列をつついて、シーケンサー770上での実行のために別の命令シーケンスをスケジュールさせうる。少なくとも一つの実施例については、終了命令はこのようにシュレッドを完了であるとしてマークし、制御はスケジューラ750に戻る。
現在のシュレッドにおいて「譲歩」プリミティブに遭遇した場合には、その呼び出しプロセスについてのシュレッド記述子が待ち行列システムに戻されることができ、制御はスケジューラ750に戻されることができる。したがって、「譲歩」プリミティブの実行に際しては、現在のシュレッドについての残りのシュレッド命令についてのシュレッド記述子が作業待ち行列システム702内に入れられうる。
終了または譲歩のいずれの場合についても、現在のシュレッドの実行がブロック710で完了したのち、処理はブロック712で終わりになりうる。あるいはまた、新たなスレッドまたはシュレッドが実行のためにスケジューリングされてもよい。したがって、ブロック710からブロック710に戻るループをなす破線は、シーケンサー770によって追加的なスレッドまたはシュレッドが実行されうることを示している。分散されたスケジューラ750によってスケジューリングされたすべてのスレッドおよび/またはシュレッド(もしくはシュレッド部分)の実行が完了したのち、処理はブロック712で終わりうる。
ブロック710の実行後に追加的なシュレッドをスケジューリングすることに関し、譲歩または終了命令が実行されたあと、現在のシーケンサー770上の分散スケジューラ750によって新たなシュレッドが実行のためにスケジューリングされうる。少なくとも一つの実施例については、そのような動作は、スケジューラ750が、自分とは異なるシーケンサー型に関連付けられた作業待ち行列から作業を得る結果として生起する。
あるいはまた、追加的なOS可視命令がブロック710のあとに実行されうる。そのような作業は、シーケンサー770自身のシーケンサー型に関連付けられた作業待ち行列からスケジューリングされうる。上述したように、少なくとも一つの実施例については、シーケンサー770のスケジューラ750は、自分の待ち行列が空である場合、もともとOS隔離シーケンサー上で実行されるよう指定されているシュレッドしかスケジューリングしない。
図8は、OS独立なシュレッドのスケジューリングのための制御フローの少なくとも一つの実施形態を示すタイミング図である。解説の目的のため、図8のタイミング図は、図7に示された方法実施形態700の特定の例についての制御フローを示している。したがって、以下では図8は図7を参照しつつ論じる。図7に示したように、図8に示される方法800は第一のOS可視シーケンサー(870)と第二の隔離されたシーケンサー(860)によって実行されうる。
図8は、第一の型の第一のシーケンサー870上の初期化704(図7参照)の少なくとも一つの実施形態についてのさらなる詳細を示している。少なくとも一つの実施例については、シーケンサー870は、機能上の基準に関して第二のシーケンサー860と区別される。すなわち、第一のシーケンサー870はOS可視である一方、第二のシーケンサー860は隔離されている。
図8は、少なくとも二つのユーザー生成命令の実行を含みうる。ここでシュレッド・モニタ(「SEMONITOR」)命令と称される第一の命令は、OS可視シーケンサーとOS隔離シーケンサーとの間の通信のためのチャネルの確立のために使われる。第二の初期化命令は制御移行命令であり、ここではシュレッド移行(「SXFR」)命令と称される。
当業者は、ここに記載されている方法700、800およびシステムはシュレッド制御命令についてのいかなる特定の命名体系にも命令セット・アーキテクチャにも限定される必要がないことを認識するであろう。当業者はまた、SEMONITOR型命令およびSXFR型命令が、先に論じたshred_create()、shred_create_affinity()、shred_yield()およびshred_exit()といったプリミティブについてのコンパイラ、アセンブラまたはライブラリ関数の結果として生成されうることも認識するであろう。この意味で、最終的な(ultimate)命令は、より上のレベルのユーザー構築物に反応して生成されたのではあっても、やはりここでは「ユーザー生成」されたと称される。上記のシュレッド・プリミティブの部分的なリストは、限定するものと解釈すべきではない。
当業者はまた、付属の請求項が、最終的なシュレッド制御命令が必ずしもハードウェアにサポートされた命令ではない実施形態をも包含することを認識するはずである。そうではなく、少なくとも一つの実施例については、プリミティブに反応して生成される「命令」は、アーキテクチャ上の命令の代わりに、ハードウェア信号であってもよい。割り込みまたはその他のシーケンサー制御信号のような信号は、SEMONITOR型およびSXFR型の機能性を実装するためにユーザー生成されたプリミティブに反応してソフトウェアまたはファームウェア層によって生成されうる。
代わりに、方法700、800は一般的に、シーケンサー870、860がシュレッドを生成および制御するためのアーキテクチャ上のユーザーレベルの命令をサポートすること、ならびに伝統的なマルチスレッドAPIが正準的なシュレッド命令セットを使って完全に実装されうることを想定する。正準的なシュレッド命令のセットの一つの見本のさらなる議論については、「複数の命令シーケンサー上での、命令セットに基づくスレッド実行のための機構(A Mechanism For Instruction Set-Based Thread Execution on a Plurality of Instruction Sequencers)」と題する、同時係属中の米国特許出願、代理人整理番号42390.P19770を参照されたい。
少なくとも一つの実施例については、シーケンサー870、860は少なくとも、SEMONITORおよびSXFRに沿った命令を含む正準的なシュレッド命令のセットをサポートすることが想定される。複数シーケンサーの動作を制御し、特に制御のシーケンサー間での移行を実施するためにユーザーがこの型の命令を利用する機能は、ここでは「シーケンサー算術(sequencer arithmetic)」と称される。シーケンサー算術を提供するシュレッド命令は、少しばかり例を挙げれば分岐(fork)、結合(join)、譲歩(yield)、終了(exit)、ロック(lock)、待機(wait)およびロック解除(unlock)といったより高いレベルのシュレッド・プリミティブを構築するための構成要素として利用されうる。これらのプリミティブは、OSレベルのスケジューリングなしに実行される同時並行の共有メモリのシュレッドのユーザーレベルでの管理を許容するために利用されうる。このようにして、正準的なシュレッド命令は、アーキテクチャ上のシュレッド命令とアプリケーション・ソフトウェアとの間の抽象化の層を築くために利用されうる。よって正準的なシュレッド命令は、レガシー・アプリケーション・プログラム・インターフェースをサポートする抽象化の層を築くために利用されうるのである。
一般に、SXFR型の命令は、第一のシーケンサーによって実行されるとき、該第一のシーケンサーからある第二のシーケンサーに信号を送る。従って、SXFR型の命令は、サービスのためのシュレッド間信号伝達を実行する機構を提供する。SXFR型の命令の作用は同期的である。これは、ユーザーが、SXFR型命令をコード中に巧妙に位置させることによって、シュレッド命令ストリームにおける他の命令の実行に対するSXFR命令の実行のタイミングを制御できるという意味においてである。
これに対し、SEMONITOR型の命令は、非同期的なシーケンサー算術を提供する。SEMONITOR型命令はプログラマによって、第一のシーケンサーからの信号をモニタリングするようある第二のシーケンサーを構成設定するために使用されうる。
図8は、第一の初期化命令、SEMONITOR命令が、指定された目標シーケンサー上に、特定のイベント型へのハンドラ・ルーチンをマッピングすることを示している。すなわち、図8に示されるSEMONITOR命令の実施形態は、特定のルーチンのための開始命令ポインタアドレス(ここでは、分散スケジューラ・ルーチン「Scheduler」の開始)を、指定されたシーケンサーid、1についてのあるイベント型「init」にマッピングする。第一のシーケンサー上でSEMONITOR命令を実行したときの、目標シーケンサーに対する結果は、前記目標シーケンサーが指示されたイベント・インジケータをモニタリングし、指定されたアドレスで前記目標シーケンサーに対する制御のフローを開始するということである。
イベント型は、少なくとも一つの実施例については、インジケータとして実装されうる。たとえば、指定されたイベントが第一のシーケンサーによって指示されるときにアクティブになる信号線である。第一のシーケンサーSID0 870上でのSEMONITOR命令の実行の結果として、SEMONITOR命令のシーケンサー識別子パラメータ「1」によって識別される目標シーケンサーSID1 860は、ポーリングその他により「init」イベント・インジケータをモニタリングする。initインジケータがアクティブになったとき、SID1 860は指定されたアドレスに(つまり、スケジューラ・ルーチンの先頭に)ジャンプし、スケジューラ・コードの実行を開始する。図8ではSchedulerルーチンは単に一例として使われているのであって、当業者は、いかなる適切なイベント・ハンドラ・コードが利用されてもよいことを認識するであろう。こうして、SEMONITOR命令の実行は指定されたシーケンサー上における非同期的な制御移行を設定しうる。
図8に示されているSEMONITOR初期化は図8に示されている例に固有であり、限定するものと解釈すべきではない。代替的な実施形態については、一連のイベント型を特定のハンドラ・ルーチンにマッピングするために、図8に示されたSEMONITOR命令と同様のいくつかの初期化命令の組が実行されうる。図8に示されたSEMONITOR命令の実行後、イベント型「init」が分散スケジューラと関連付けられる。
次いで第二の初期化命令、SXFR命令が第一のシーケンサー870によって実行される。SXFR命令の実行は、OS隔離されたシーケンサーSID1上での実行の別個のスレッドを初期化するためのイベントを送る。802では、OS隔離されたシーケンサーSID1が「Init」シナリオを含んだ信号を検出するとき、OS隔離されたシーケンサーSID1はスレッドSを開始し、分散スケジューラ(たとえば図7の450参照)に対応する命令ストリームの実行を開始する。
図8が示す実施形態のSXFR命令は、以下のパラメータを含む:シーケンサー識別子、イベント型および任意的な同期フラグ。シーケンサー識別子(sequencer identifier)(「SID」)は、SXFR命令の実行の結果として制御が移行される先のシーケンサーを指定する。図8に示した例では、シーケンサー870についてのシーケンサー識別子は「SID0」であり、シーケンサー860についてのシーケンサー識別子は「SID1」である。
図8に示されるSXFR命令についてのイベント型パラメータは、「init」イベント型を指示する。図に示したSEMONITOR命令の以前の実行の結果として、「init」イベント型は、SXFR命令が実行される時点には分散スケジューラ(図7、450)に関連付けられている。したがって、イベント型パラメータは事実上、移行先シーケンサー(すなわち、SID1 860)に対して、シーケンサー860が実行を開始するときには分散スケジューラについてのIPアドレスにおいて実行を開始すべきであることを指示する。
図8に示された見本SXFR命令の最後のパラメータは、任意的な待機/不待機フラグである。「不待機(no wait)」を指定することにより、この命令は本質的に同時並行的なマルチスレッド状況を開始する――第一のシーケンサー870は、移行先のシーケンサー860からの同期インジケータを待つ必要がなく、SXFR命令の実行を完了したらすぐ自分の命令ストリームの実行を続けることができるのである。
ここで、SXFR命令はシュレッド生成および制御移行命令である。図8は、第一のシーケンサーによるSXFR命令の実行の結果として、シュレッドSが第二のシーケンサー860上で分散ハンドラ・ルーチンの実行を開始することを示している。したがって、SXFR命令の実行後、スレッドTおよびシュレッドSは同時並行して実行されうる。
SID0 870上でのスレッドTの実行は、「不待機」フラグのため、704でSXFR命令を実行したあと実行を継続しうる。したがって、スレッドTは先に進んで、「mainシュレッド」プログラムのためのシュレッド記述子を生成706し、そのような記述子を作業待ち行列システム702に入れる。図7との関連で先に論じたように、mainシュレッド記述子は、待ち行列が隔離されたシーケンサーSID1 860に関連付けられているところで作業待ち行列システム702(図2)に入れられうる。
次いでスレッドTはそのOS可視スケジューラ750を呼び出し、そのスケジューラ750によって指令されるように命令の実行710に進む。図7との関係で先に議論したように、スレッドTは任意的に、シュレッド記述子を探してもよく(709)、したがって710ではシュレッド命令を実行してもよい。これは少なくとも、a)OS可視スケジューラがOS隔離されたシーケンサー待ち行列から作業を引き出すことを許すような実施形態か、および/または、b)OS可視シーケンサー870上でのシュレッド命令のプロキシ実行をサポートするような実施形態についていえる。命令実行710の一回または複数回の反復を実行したのち、スレッドTの処理は712で終わりうる。
隔離シーケンサー860に関しては、図8は、シュレッドSについて実行されるべき動作の系列の少なくとも一つの実施形態を示している。先に論じたように、OS可視シーケンサーSID870上で実行されるOS可視スレッドTによって実行される初期化処理704の結果として、シーケンサー860上でスケジューリング・ループ(すなわち、分散スケジューラ450の実行)が開始されうる。
804で、SID1 860上で走っているスケジューラ・ルーチン450は、シーケンサー860による実行のために入手可能な何らかのシュレッド記述子があるかどうかを判別すべく、作業待ち行列システム702に問い合わせをする。図8に示されている見本系列については、シーケンサーSID1 860は、ブロック706(前述)がすでにSID0 870によって実行されていれば、ブロック806でmainシュレッド記述子に遭遇しうる。
記述子がみつかった場合、シーケンサー860は、その記述子によって指示されるシュレッドを実行806する。シュレッドは、a)完了まで、あるいはb)譲歩命令に遭遇するまで実行される。
シュレッドの命令が追加的なシュレッド生成命令を含みうることに注意しておくべきである。すなわち、少なくとも一つの実施例については、シュレッドは、それ自身、少なくとも二つの型のシュレッド動作を実行しうる:シュレッド制御動作(シュレッドの生成および終止に関する)と同期動作(譲歩動作のような)である。(少なくとも一つの実施例については、そのような動作は、シュレッド命令ストリームにおいてユーザーが業界標準準拠のプリミティブを使うことによって呼び出されうる。一つのそのような業界標準はたとえばPOSIX(Portable Operating System Interface)である。)図8において、806から作業待ち行列システム702への破線は、シュレッドの実行806の間に追加的なシュレッド記述子(単数または複数)が生成されうること、および該追加的な記述子(単数または複数)が作業待ち行列システム702に入れられうることを示している。
たとえば、譲歩プリミティブは、ユーザーによって、シュレッド命令ストリーム中に入れられうる。そのような譲歩プリミティブは、シーケンサーに、シュレッドの制御を譲らせる。そうする際、シーケンサー860は、シュレッド命令の残りのための記述子を、シュレッド実行を終止する前に作業待ち行列システム702に戻しておくことができる。譲歩プリミティブは、制御移行を実行する前にスタックをスワップする関数を呼び出してもよい。現在のスレッド・コンテキストがシーケンサーのスケジューラに制御を返す前に保存されるようにするのである。
図8は、SID1 860上でのシュレッドSの実行が、終止(termination)命令(終了、譲歩など)が実行されるときに終止またはサスペンドされることを示している。そのような時点では、分散スケジューラ450が任意的に、別のシュレッド記述子がないかどうか作業待ち行列システム702を調べてもよい。シーケンサーSID1 860によって実行されうる作業を同定するためである。作業待ち行列システム702のそのような任意的な反復的調査は、図8では、806から804への破線矢印によって示されている。
図8に示した例については、SID0 870上で走っているスケジューラ・ルーチン450が作業待ち行列システム702を調べる前に、SID1 860上で走っているスケジューラ・ルーチン450が、「mainシュレッド」ルーチンのためのシュレッド記述子を見出しそうでありうることも可能であることを注意しておくべきである。そのような場合、シーケンサー860、870のいずれも「mainシュレッド」ルーチンを実行する機能があるとすると、「mainシュレッド」ルーチンは、たとえその記述子がSID0 870によって生成されたとしても、SID1 860によって実行されうる。
以上の図8の議論から、少なくとも一つの実施例については、二つの例示されたシーケンサー860、870はいずれも「mainシュレッド」ルーチンを実行する機能があることは明らかであろう。したがって、少なくとも一つの実施例については、シーケンサー860、870は対称的であると想定されうる。しかし、少なくとも一つの他の実施例については、シーケンサー860、870は完全に対称的ではないが、それでいて各シーケンサー860、870はmainシュレッド・ルーチンを実行するために十分な機能をもつ。そのような実施形態は、たとえば、mainシュレッド・ルーチンがリング3の機能しか要求せず、シーケンサーSID1 860がリング3機能を有しており、SID0 870がリング3とリング0の両方の機能を有しているような場合に存しうる。そのような実施形態については、図6に示されるように、作業待ち行列システム702は第一の待ち行列(たとえばSID0 870によってしか実行できない記述子についての)およびSID0 870またはSID1 860のいずれによっても実行できる記述子についての第二の待ち行列を含みうる。
分散スケジューラ450および作業待ち行列システム702に関し、少なくとも一つの実施例については、作業待ち行列システム702は、クリティカルセクションによって保護されうる。先に論じたように、各隔離シーケンサー860は、事実上、分散スケジューラ・ルーチン450の一部分について独自のコピーを実行しており、その対応するシーケンサーを走らせるために次の準備ができた命令を処理するため、タスク待ち行列システム702の待ち行列の先頭へのアクセスを競ることを試みることができる。シーケンサー上の一つのタスクがミューテックス、条件変数(conditional variable)またはセマフォのような同期化変数を待つようなことがあれば、対応するクリティカルセクションにはいったのち、そのタスクはスケジュールから外されて、タスク待ち行列の末尾に付けられてもよい。
図8に示した例が与えられているもとでは、本発明の諸実施形態は、OSを使うことなく、OSから隔離されているシーケンサー上での実行の諸スレッドをスケジューリングできることが見て取れる。こうして、ここに開示される技術のおかげで、OSがサポートできるよりも多くのシーケンサーをもつマルチシーケンサー・システムを築き、OSによってサポートされていないマルチシーケンサー・システムのシーケンサー上でスレッドのユーザーレベルのスケジューリングを許容することが可能である。
上記の機構、システムおよび方法の少なくともいくつかの実施例については、分散スケジューラ450はイベント駆動の自己スケジューラとして動作する。そこでは、API様のスレッド制御(shred_create、shred_create_affinityなど)またはスレッド同期(shred_yieldなど)プリミティブの結果として生成される、待ち行列に入れられたスケジューリング・イベントに反応して、シュレッドが生成される。スケジューラおよび諸プリミティブは、POSIX準拠APIのような伝統的な業界標準APIと、マルチシーケンサー・システムのハードウェアとの間の中間的な抽象化層を生成するランタイム・ライブラリの一部として実装されうる。マルチシーケンサー・システムのシーケンサーは、少なくとも、ユーザーレベルのシーケンサー算術を実装する正準的なシュレッド命令のセットをサポートする。ライブラリは、上で論じた分散スケジューラ450の実施例のようなスケジューラを含みうる。ランタイム・ライブラリが中間的な抽象化レベルのはたらきをしうるので、プログラマは伝統的なスレッドAPI(たとえばPthreads APIまたはWin32 Threads APIのような)をシュレッドをサポートするハードウェアで利用できる。ライブラリは、正準的なシュレッド命令を、ユーザーがプログラムするプリミティブに基づいて透明に呼び出す関数を提供しうる。
ここで議論されたスケジューリング機構および技術は、単一コアSMTシステム(たとえば図3の310参照)およびマルチコアシステム(たとえば図3の350参照)を含め、いかなるマルチシーケンサー・システム上でも実装されうる。そのようなシステムのさらなる議論について、図9との関連で以下に論じる。
図9は、開示されている諸技法を実行する機能のあるコンピューティング・システム900の少なくとも一つの見本実施形態を示している。コンピューティング・システム900は少なくとも一つのプロセッサ・コア904およびメモリ・システム940を含む。メモリ・システム940はより大きな、比較的より遅いメモリ記憶902とともに、命令キャッシュ944および/もしくはデータキャッシュ942のような一つもしくは複数のより小さな比較的高速のキャッシュを含みうる。メモリ記憶902は、プロセッサ904の動作を制御するための命令910およびデータ912を保存しうる。命令910は分散されたスケジューラ・ルーチン450の一つまたは複数のコピーを含みうる。
メモリ・システム940はメモリの一般化された表現として意図されており、ハード・ドライブ、CD-ROM、ランダムアクセスメモリ(RAM)、動的ランダムアクセスメモリ(DRAM)、静的ランダムアクセスメモリ(SRAM)、フラッシュメモリおよび関係した回路といった多様な形のメモリを含みうる。メモリ・システム940は、プロセッサ904によって実行されうるデータ信号によって表現される命令910および/またはデータ912を保存しうる。命令910および/またはデータ912は、ここに議論された技術のいずれかまたは全部を実行するためのコードおよび/またはデータを含みうる。たとえば、データ912は、上で論じたシュレッド記述子を保存できる待ち行列システム702を形成する一つまたは複数の待ち行列を含みうる。あるいはまた、命令910が、シュレッド記述子を記憶するための待ち行列システム702を生成するための命令を含んでいてもよい。
プロセッサ904は、実行コア930に命令情報を供給するフロントエンド920を含みうる。フェッチされた命令情報は、実行コア930による実行を待つべく、キャッシュ225にバッファリングされうる。フロントエンド920は、その命令情報をプログラム順に実行コア930に供給しうる。少なくとも一つの実施例については、フロントエンド920は、実行されるべき次の命令を決めるフェッチ/デコード・ユニット322を含む。システム900の少なくとも一つの実施例については、フェッチ/デコード・ユニット322は、単一の次命令ポインタおよびフェッチ論理320を含みうる。しかしながら、各プロセッサ904が複数スレッド・コンテキストをサポートする実施形態では、フェッチ/デコード・ユニット322は、サポートされるスレッド・コンテキストそれぞれについて相異なる次命令ポインタおよびフェッチ論理320を実装する。マルチプロセッサ環境における追加的な次命令ポインタおよびフェッチ論理320が任意的であるという性質は、図9で点線によって表されている。
ここに記載される諸方法の実施形態は、ハードウェア、ハードウェア・エミュレーション・ソフトウェアもしくはその他のソフトウェア、ファームウェアまたはそのような実装手法の組み合わせにおいて実装されうる。本発明の実施形態は、少なくとも一つのプロセッサ、データ記憶システム(揮発性および不揮発性のメモリおよび/または記憶要素を含む)、少なくとも一つの入力装置ならびに少なくとも一つの出力装置を有するプログラム可能システムのために実装されうる。本出願の目的のためには、処理システムは、たとえばデジタル信号プロセッサ(DSP)、マイクロコントローラ、特定用途向け集積回路(ASIC)またはマイクロプロセッサといったプロセッサをもつ任意のシステムを含む。
プログラムは、汎用または特殊目的プログラム可能処理システムによって読み取り可能な記憶媒体またはデバイス(たとえばハードディスク・ドライブ、フロッピー(登録商標)ディスク・ドライブ、読み出し専用メモリ(ROM)、CD-ROMデバイス、フラッシュメモリ・デバイス、デジタル多用途ディスク(DVD)またはその他の記憶デバイス)上に記憶されうる。処理システム中のプロセッサにとってアクセス可能な命令が、該処理システムによって前記記憶媒体またはデバイスが読まれたときに、ここに記載される手順を実行するために、該処理システムを構成設定し、動作させることを提供する。本発明の実施形態は、処理システムとともに使用するよう構成された機械可読記憶媒体として実装されると考えられてもよい。ここで、そのように構成された記憶媒体は、処理システムをして、ここに記載される機能を実行するために特定かつ所定の仕方で動作させる。
見本システム900は、インテル社から入手可能なペンティアム(登録商標)、ペンティアム(登録商標)プロ、ペンティアム(登録商標)II、ペンティアム(登録商標)III、ペンティアム(登録商標)4およびアイテニアム(登録商標)およびアイテニアム(登録商標)2といったマイクロプロセッサに基づいた処理システムを表す。ただし、その他のシステム(他のマイクロプロセッサをもつパーソナル・コンピュータ(PC)、エンジニアリング・ワークステーション、携帯情報端末およびその他のハンドヘルド装置、セットトップボックスなどを含む)を使ってもよい。ある実施例については、見本システムはマイクロソフト社から入手可能なウィンドウズ(登録商標)オペレーティング・システムのあるバージョンを実行してもよい。ただし、他のオペレーティング・システムおよびグラフィカルユーザーインターフェースなどを使用してもよい。
本発明の具体的な実施形態について図示し、記載してきたが、付属の請求項の範囲から外れることなく変更および修正をなすことができることは当業者には明らかであろう。たとえば、作業待ち行列システム702は、複数のシーケンサー型によって競られる単一の待ち行列を含んでいてもよい。そのような実施形態については、各シュレッド記述子に資源要求が明示的に含められる。分散されたスケジューラの各シーケンサーの部分は、シュレッドの記述子がシーケンサーによる実行のために作業待ち行列から取り出される前に、そのシーケンサーがそのシュレッドを実行する機能があるかどうかを確かめるための検査を行う。
もう一つの代替的な実施形態については、作業待ち行列システム702においてハイブリッド・アプローチが実装されうる。そのようなハイブリッド・アプローチについては、作業待ち行列システム702は複数の待ち行列を含む。それでも、該複数の待ち行列のうち一つまたは複数は複数のシーケンサー型に対応する。そのようなハイブリッド実施形態のためには、二つ以上のシーケンサー型に関連付けられたいかなる待ち行列についても、各シュレッド記述子に明示的な資源指示が含められる。
上で論じた分散されたスケジューラ・ルーチンは、ラウンドロビン・スケジューリングのアプローチを使ってシュレッド記述子の実行をスケジューリングしうる。しかし、少なくとも一つの代替的な実施形態については、上で論じた分散スケジューラおよび作業待ち行列システムは、優先度に基づいたスケジューリング方式をサポートしうる。また、少なくとも一つの代替的な実施形態については、好まれるシーケンサーによってタスクが実行されるよう、複数待ち行列の待ち行列システム実施形態のための待ち行列選好がユーザーによって、あるいはランタイム・ライブラリによって設定されることができる。たとえば、ある特定のシーケンサーによって譲歩動作前に実行されるシュレッドが、そのシュレッドの残りの命令が実行されるときにその同じ特定のシーケンサーに送り返されることができる。
作業待ち行列システムへのシュレッド記述子の発送に関し、先に図7との関連で、シュレッド記述子の割り当ては、シュレッドが生成される時点でどの待ち行列に割り当てられるべきかを定義するためにユーザーが特定のパラメータまたは特定の「親和(affinity)」プリミティブを使用することによって静的に明示的に制御されうることを述べた。
少なくとも一つの代替的な実施形態では、そのような静的な割り当て手法の代わりに、あるいは追加として、動的な割り当てを利用しうる。動的な割り当ては、ミューテックスのようなユーザーレベルの同期オブジェクトを通じて実装されうる。そのようなミューテックスは、シュレッドが、自ら動的に、新生シュレッド(spawnee shred)を作業待ち行列システムの特定の待ち行列にスケジューリングすることを許容しうる。あるいはまた、動的な割り当ては、分散スケジューラが待ち行列の挙動を観察し、どの待ち行列が記述子を受け取るべきかを動的に選択するよう実装されてもよい。さらにまた、動的な割り当ては、プログラマが、「ロック」および「ロック解除」プリミティブといった同期プリミティブを使うことを通じて実行されてもよい。そのようなプリミティブはOSのミューテックス構造体を利用しうる。ロック・プリミティブの実際に際し、現在のシーケンサーは、譲歩動作を実行し、現在のシュレッドの記述子をそのミューテックスに対応する待ち行列に入れることができる。
このように、当業者はより広い諸側面における本発明から外れることなく、変更および修正がなし得ることを認識するであろう。付属の請求項の範囲内には、本発明の真の範囲内にはいるそのようなすべての変更および修正が包含される。
Claims (42)
- 同時並行シュレッドのユーザーレベルのスケジューリングのための方法であって:
ユーザー生成されたスレッド・プリミティブを実行する段階であって、スレッド制御命令を生成するライブラリ関数を呼び出すことをさらに含む段階と;
前記スレッド・プリミティブに応じて、スレッドを記述する作業記述子を生成する段階と;
前記作業記述子を待ち行列システム内に記憶させる段階と;
オペレーティング・システムの介入なしに、前記スレッドのOS隔離シーケンサー上での実行をスケジューリングする段階、
とを有する方法。 - ユーザーレベルの同時並行マルチスレッド利用を実行するよう前記シーケンサーを初期化する段階をさらに有する、
請求項1記載の方法。 - 前記初期化する段階がさらに、ユーザーレベルの分散されたスケジューラの、前記シーケンサー上での実行をトリガーする段階を有する、
請求項2記載の方法。 - 前記待ち行列システムが、第一のシーケンサー型に関連付けられた第一の待ち行列と、第二のシーケンサー型に関連付けられた第二の待ち行列とを含む、
請求項1記載の方法。 - 前記第一および第二のシーケンサーが、コンピューティング上の少なくとも一つの基準に関して非対称的である、
請求項4記載の方法。 - 前記コンピューティング上の基準が機能上の基準である、
請求項5記載の方法。 - 前記コンピューティング上の基準が電力消費基準である、
請求項5記載の方法。 - 前記機能上の基準が、リング0動作を実行する能力である、
請求項6記載の方法。 - 前記記憶させる段階が、前記作業記述子を、ユーザーが提供したヒントに基づいて前記第一の待ち行列に記憶させることをさらに含む;
請求項4記載の方法。 - 前記スレッド・プリミティブが、シュレッド生成プリミティブである、
請求項1記載の方法。 - 前記スレッド・プリミティブが、シュレッド同期プリミティブである、
請求項1記載の方法。 - 前記スレッド・プリミティブが、業界標準準拠のアプリケーション・プログラマ・インターフェースの一部である、
請求項1記載の方法。 - 分散されたオペレーティング・システム独立なスケジューラ・ルーチンの第一の部分を含む第一のスレッド実行ユニットと;
分散されたオペレーティング・システム独立なスケジューラ・ルーチンの第二の部分を含む第二のスレッド実行ユニットとを有する装置であって;
前記第一および第二のスレッド実行ユニットが同時並行のマルチスレッドを利用した実行の機能をもち;
前記第一および第二の部分がさらに、スレッドを記述する作業記述子を求めて競るために作業待ち行列に問い合わせし;
前記分散されたスケジューラ・ルーチンが、前記競りに基づいて、オペレーティング・システムの介入なしに、前記スレッドを、前記スレッド実行ユニットのうちの選択されたものでの実行のためにスケジューリングする、装置。 - 前記スレッド実行ユニットの少なくとも一つはオペレーティング・システムに可視であり、前記スレッド実行ユニットの少なくとも別の一つはオペレーティング・システムに可視ではない、
請求項13記載の装置。 - 当該装置が単一コアのプロセッサであり;
前記第一および第二の実行ユニットが論理的なプロセッサである、
請求項13記載の装置。 - 当該装置がマルチコアのプロセッサであり;
前記第一および第二の実行ユニットがプロセッサ・コアである、
請求項13記載の装置。 - 前記実行ユニットが機能的に対称的である、
請求項13記載の装置。 - 前記待ち行列システムが、前記実行ユニットの全部に適用可能な作業記述子を保持するための単一の待ち行列を含む、
請求項17記載の装置。 - 前記実行ユニットの少なくとも一つが、他の実行ユニットの一つまたは複数とコンピューティング面で非対称的である、
請求項13記載の装置。 - 前記待ち行列システムが、前記少なくとも一つの非対称的である実行ユニットのための作業記述子を保持するための第一の待ち行列を含み、前記一つまたは複数の他の実行ユニットのための記述子を保持するための第二の待ち行列をも含む、
請求項19記載の装置。 - メモリ・システムと;
第一のシーケンサー型の第一のシーケンサーと;
第二のシーケンサー型の第二のシーケンサーと;
前記メモリ・システムに保存されているソフトウェア・ライブラリであって、作業待ち行列を生成するための一つまたは複数の命令を含むライブラリ、
とを有するマルチシーケンサー・マルチスレッド・システムであって:
前記ライブラリがさらに、前記作業待ち行列からの作業をシーケンサー上での実行のために、ユーザー指令によりスケジューリングすることを実行する分散されたスケジューラを含む、システム。 - 前記分散されたスケジューラが、前記第一および第二のシーケンサーのためのスケジューリング・ループを実行する、
請求項21記載のシステム。 - 前記作業待ち行列が、ペンディングのソフトウェア・スレッドを記述する一つまたは複数のレコードを保持する、
請求項21記載のシステム。 - 前記一つまたは複数のレコードが、それぞれ対応するペンディングのソフトウェア・スレッドの開始アドレスを含む、
請求項23記載のシステム。 - 前記一つまたは複数のレコードが、それぞれ対応するペンディングのソフトウェア・スレッドについてのスタック・ポインタを含む、
請求項23記載のシステム。 - 前記分散されたスケジューラがさらに、前記作業待ち行列からの作業をシーケンサー上での実行のために、ユーザー指令によりスケジューリングすることを、前記シーケンサーが同時並行してその関連付けられた作業を実行するように実行する、
請求項23記載のシステム。 - 前記ライブラリがさらに、それぞれ関連付けられたユーザー生成されたプリミティブに応じてシュレッド命令を生成する一つまたは複数の関数を含んでおり、前記プリミティブは一般的に知られたアプリケーション・プログラマ・インターフェース規格に準拠するものである、
請求項23記載の方法。 - マルチスレッド・プロセッサにおいて、複数のシーケンサーの間でソフトウェア・シュレッドの実行をスケジューリングする方法であって:
ユーザー生成されたスレッド命令に応じて、スレッドを記述するスレッド記述子を生成する段階と;
前記スレッド記述子を待ち行列に入れる段階と;
それぞれが相異なるシーケンサーに関連付けられた複数のスケジューラ・ルーチンを実行する段階であって、前記複数のシーケンサーがオペレーティング・システムに基づくスレッド・スケジューラに従属せず、前記スケジューラ・ルーチンのそれぞれが前記待ち行列内の前記記述子を求めて競るものである、段階と;
前記スレッドを、前記シーケンサーの一つの上での実行のためにスケジューリングする段階、
とを有する方法。 - 前記ユーザー生成されたスレッド命令が、アプリケーション・プログラマ・インターフェースに含まれているプリミティブである、
請求項28記載の方法。 - 前記アプリケーション・プログラマ・インターフェースが業界標準に準拠している、
請求項28記載の方法。 - 複数の機械アクセス可能命令を有する機械アクセス可能媒体を有する物品であって、前記命令はプロセッサによって実行され、前記命令は:
ユーザー生成されたスレッド・プリミティブを実行する動作であって、スレッド制御命令を生成するライブラリ関数を呼び出すことをさらに含む動作と;
前記スレッド・プリミティブに応じて、スレッドを記述する作業記述子を生成する動作と;
前記作業記述子を待ち行列システム内に記憶させる動作と;
オペレーティング・システムの介入なしに、前記スレッドのシーケンサー上での実行をスケジューリングする動作、
とを提供する物品。 - プロセッサによって実行されたときに:
ユーザーレベルの同時並行マルチスレッド利用を実行するよう前記シーケンサーを初期化する動作、
を提供する機械アクセス可能命令をさらに有する、請求項31記載の物品。 - 前記初期化する動作を提供する命令がさらに、プロセッサによって実行されたときに、ユーザーレベルの分散されたスケジューラの、前記シーケンサー上での実行をトリガーする動作を提供する命令をさらに有する、
請求項32記載の物品。 - 前記待ち行列システムが、第一のシーケンサー型に関連付けられた第一の待ち行列と、第二のシーケンサー型に関連付けられた第二の待ち行列とを含む、
請求項31記載の物品。 - 前記第一および第二のシーケンサーが、コンピューティング上の少なくとも一つの基準に関して非対称的である、
請求項34記載の物品。 - 前記コンピューティング上の基準が機能上の基準である、
請求項35記載の物品。 - 前記コンピューティング上の基準が電力消費基準である、
請求項35記載の物品。 - 前記機能上の基準が、リング0動作を実行する能力である、
請求項36記載の物品。 - 前記記憶させる動作を提供する命令が、プロセッサによって実行されたときに、前記作業記述子を、ユーザーが提供したヒントに基づいて前記第一の待ち行列に記憶させる命令をさらに有する;
請求項34記載の物品。 - 前記スレッド・プリミティブが、シュレッド生成プリミティブである、
請求項31記載の物品。 - 前記スレッド・プリミティブが、シュレッド同期プリミティブである、
請求項31記載の物品。 - 前記スレッド・プリミティブが、業界標準準拠のアプリケーション・プログラマ・インターフェースの一部である、
請求項31記載の物品。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US11/027,445 US8607235B2 (en) | 2004-12-30 | 2004-12-30 | Mechanism to schedule threads on OS-sequestered sequencers without operating system intervention |
PCT/US2005/047334 WO2006074027A2 (en) | 2004-12-30 | 2005-12-22 | Mechanism to schedule threads on os-sequestered without operating system intervention |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2011007496A Division JP2011076639A (ja) | 2004-12-30 | 2011-01-18 | オペレーティング・システム介入なしにos隔離シーケンサー上でスレッドをスケジューリングする機構 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2008525921A true JP2008525921A (ja) | 2008-07-17 |
Family
ID=36582629
Family Applications (3)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2007549606A Pending JP2008525921A (ja) | 2004-12-30 | 2005-12-22 | オペレーティング・システム介入なしにos隔離シーケンサー上でスレッドをスケジューリングする機構 |
JP2011007496A Pending JP2011076639A (ja) | 2004-12-30 | 2011-01-18 | オペレーティング・システム介入なしにos隔離シーケンサー上でスレッドをスケジューリングする機構 |
JP2013140714A Expired - Fee Related JP5678135B2 (ja) | 2004-12-30 | 2013-07-04 | オペレーティング・システム介入なしにos隔離シーケンサー上でスレッドをスケジューリングする機構 |
Family Applications After (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2011007496A Pending JP2011076639A (ja) | 2004-12-30 | 2011-01-18 | オペレーティング・システム介入なしにos隔離シーケンサー上でスレッドをスケジューリングする機構 |
JP2013140714A Expired - Fee Related JP5678135B2 (ja) | 2004-12-30 | 2013-07-04 | オペレーティング・システム介入なしにos隔離シーケンサー上でスレッドをスケジューリングする機構 |
Country Status (6)
Country | Link |
---|---|
US (2) | US8607235B2 (ja) |
EP (1) | EP1839146B1 (ja) |
JP (3) | JP2008525921A (ja) |
KR (1) | KR20070095376A (ja) |
CN (2) | CN101702134B (ja) |
WO (1) | WO2006074027A2 (ja) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2012509529A (ja) * | 2008-12-30 | 2012-04-19 | インテル コーポレイション | トランザクショナル・メモリ・イベントの処理のためのハードウェアにおけるユーザハンドラの登録 |
JP2014182799A (ja) * | 2013-03-15 | 2014-09-29 | Intel Corp | システムコールのためのロバスト且つ高性能な命令 |
Families Citing this family (42)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
DE10331202A1 (de) * | 2003-07-10 | 2005-03-31 | S.K. Enterprise Gmbh | Verwendung von Molkenpermeat zur Behandlung des Metabolischen Syndroms |
US8607235B2 (en) | 2004-12-30 | 2013-12-10 | Intel Corporation | Mechanism to schedule threads on OS-sequestered sequencers without operating system intervention |
US8010969B2 (en) * | 2005-06-13 | 2011-08-30 | Intel Corporation | Mechanism for monitoring instruction set based thread execution on a plurality of instruction sequencers |
RU2312388C2 (ru) * | 2005-09-22 | 2007-12-10 | Андрей Игоревич Ефимов | Способ организации многопроцессорной эвм |
US8028295B2 (en) * | 2005-09-30 | 2011-09-27 | Intel Corporation | Apparatus, system, and method for persistent user-level thread |
US8079035B2 (en) * | 2005-12-27 | 2011-12-13 | Intel Corporation | Data structure and management techniques for local user-level thread data |
US8914618B2 (en) | 2005-12-29 | 2014-12-16 | Intel Corporation | Instruction set architecture-based inter-sequencer communications with a heterogeneous resource |
US8689215B2 (en) | 2006-12-19 | 2014-04-01 | Intel Corporation | Structured exception handling for application-managed thread units |
US8074274B2 (en) * | 2006-12-29 | 2011-12-06 | Intel Corporation | User-level privilege management |
US7975272B2 (en) * | 2006-12-30 | 2011-07-05 | Intel Corporation | Thread queuing method and apparatus |
KR100888675B1 (ko) | 2007-02-15 | 2009-03-13 | 고려대학교 산학협력단 | 임베디드 코어에서 멀티 쓰레드 실행을 위해 확장된프로세서 및 임베디드 코어에서 멀티 쓰레드 실행 방법 |
US7853950B2 (en) * | 2007-04-05 | 2010-12-14 | International Business Machines Corporarion | Executing multiple threads in a processor |
US20080320475A1 (en) * | 2007-06-19 | 2008-12-25 | Microsoft Corporation | Switching user mode thread context |
US8327363B2 (en) * | 2007-07-24 | 2012-12-04 | Microsoft Corporation | Application compatibility in multi-core systems |
US8544014B2 (en) * | 2007-07-24 | 2013-09-24 | Microsoft Corporation | Scheduling threads in multi-core systems |
US7904696B2 (en) * | 2007-09-14 | 2011-03-08 | Intel Corporation | Communication paths for enabling inter-sequencer communication following lock competition and accelerator registration |
CN101547212B (zh) * | 2008-03-29 | 2012-09-05 | 华为技术有限公司 | 一种分布式对象的调度方法和系统 |
KR101041777B1 (ko) | 2009-06-08 | 2011-06-17 | 엠텍비젼 주식회사 | 멀티 스레드 처리 방법 및 이를 사용하는 프로세서 디바이스 |
US8719547B2 (en) | 2009-09-18 | 2014-05-06 | Intel Corporation | Providing hardware support for shared virtual memory between local and remote physical memory |
US8464035B2 (en) * | 2009-12-18 | 2013-06-11 | Intel Corporation | Instruction for enabling a processor wait state |
US8443376B2 (en) | 2010-06-01 | 2013-05-14 | Microsoft Corporation | Hypervisor scheduler |
US8898664B2 (en) * | 2010-06-01 | 2014-11-25 | Microsoft Corporation | Exposure of virtual cache topology to a guest operating system |
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 |
US8572628B2 (en) | 2010-12-02 | 2013-10-29 | International Business Machines Corporation | Inter-thread data communications in a computer processor |
GB2507696B (en) | 2011-09-06 | 2017-08-02 | Intel Corp | Power efficient processor architecture |
CN103136047B (zh) * | 2011-11-30 | 2016-08-17 | 大唐联诚信息系统技术有限公司 | 一种多线程管理方法及架构 |
US9720730B2 (en) | 2011-12-30 | 2017-08-01 | Intel Corporation | Providing an asymmetric multicore processor system transparently to an operating system |
US20130205144A1 (en) * | 2012-02-06 | 2013-08-08 | Jeffrey R. Eastlack | Limitation of leakage power via dynamic enablement of execution units to accommodate varying performance demands |
US10255104B2 (en) * | 2012-03-29 | 2019-04-09 | Advanced Micro Devices, Inc. | System call queue between visible and invisible computing devices |
US8943343B2 (en) | 2012-06-20 | 2015-01-27 | Intel Corporation | Controlling an asymmetrical processor |
CN103532823B (zh) * | 2012-07-04 | 2018-11-23 | 中兴通讯股份有限公司 | 物联网消息处理方法、装置及系统 |
US20140075163A1 (en) * | 2012-09-07 | 2014-03-13 | Paul N. Loewenstein | Load-monitor mwait |
US10158585B2 (en) * | 2013-02-21 | 2018-12-18 | Intel Corporation | Packet processing with reduced latency |
US10725889B2 (en) * | 2013-08-28 | 2020-07-28 | Micro Focus Llc | Testing multi-threaded applications |
CN105677455A (zh) * | 2014-11-21 | 2016-06-15 | 深圳市中兴微电子技术有限公司 | 一种设备调度方法及任务管理器 |
GB2544994A (en) | 2015-12-02 | 2017-06-07 | Swarm64 As | Data processing |
EP3704595A4 (en) * | 2017-10-31 | 2021-12-22 | Micron Technology, Inc. | SYSTEM WITH A HYBRID THREADING PROCESSOR, HYBRID THREADING MATRIX WITH CONFIGURABLE COMPUTER ELEMENTS AND HYBRID CONNECTION NETWORK |
WO2019089816A2 (en) | 2017-10-31 | 2019-05-09 | Micron Technology, Inc. | System having a hybrid threading processor, a hybrid threading fabric having configurable computing elements, and a hybrid interconnection network |
US11132233B2 (en) * | 2018-05-07 | 2021-09-28 | Micron Technology, Inc. | Thread priority management in a multi-threaded, self-scheduling processor |
US11513840B2 (en) * | 2018-05-07 | 2022-11-29 | Micron Technology, Inc. | Thread creation on local or remote compute elements by a multi-threaded, self-scheduling processor |
US11068305B2 (en) * | 2018-05-07 | 2021-07-20 | Micron Technology, Inc. | System call management in a user-mode, multi-threaded, self-scheduling processor |
CN109491780B (zh) * | 2018-11-23 | 2022-04-12 | 鲍金龙 | 多任务调度方法及装置 |
Family Cites Families (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0422310A1 (en) * | 1989-10-10 | 1991-04-17 | International Business Machines Corporation | Distributed mechanism for the fast scheduling of shared objects |
US5257375A (en) * | 1991-08-23 | 1993-10-26 | International Business Machines Corp. | Method and apparatus for dispatching tasks requiring short-duration processor affinity |
US5768594A (en) * | 1995-07-14 | 1998-06-16 | Lucent Technologies Inc. | Methods and means for scheduling parallel processors |
JP3760035B2 (ja) * | 1996-08-27 | 2006-03-29 | 松下電器産業株式会社 | 複数の命令流を独立に処理し、命令流単位に処理性能を柔軟に制御するマルチスレッドプロセッサ |
US6766515B1 (en) * | 1997-02-18 | 2004-07-20 | Silicon Graphics, Inc. | Distributed scheduling of parallel jobs with no kernel-to-kernel communication |
US6289369B1 (en) * | 1998-08-25 | 2001-09-11 | International Business Machines Corporation | Affinity, locality, and load balancing in scheduling user program-level threads for execution by a computer system |
US7191440B2 (en) * | 2001-08-15 | 2007-03-13 | Intel Corporation | Tracking operating system process and thread execution and virtual machine execution in hardware or in a virtual machine monitor |
CN1284094C (zh) * | 2002-04-30 | 2006-11-08 | 电子科技大学 | 一种构建分布式并行调度网络服务器系统的方法 |
US8032891B2 (en) * | 2002-05-20 | 2011-10-04 | Texas Instruments Incorporated | Energy-aware scheduling of application execution |
US20040049580A1 (en) * | 2002-09-05 | 2004-03-11 | International Business Machines Corporation | Receive queue device with efficient queue flow control, segment placement and virtualization mechanisms |
JP4750350B2 (ja) | 2003-03-13 | 2011-08-17 | パナソニック株式会社 | タスク切換装置、方法及びプログラム |
US7093147B2 (en) * | 2003-04-25 | 2006-08-15 | Hewlett-Packard Development Company, L.P. | Dynamically selecting processor cores for overall power efficiency |
US7376954B2 (en) * | 2003-08-28 | 2008-05-20 | Mips Technologies, Inc. | Mechanisms for assuring quality of service for programs executing on a multithreaded processor |
US7516456B2 (en) * | 2003-09-25 | 2009-04-07 | International Business Machines Corporation | Asymmetric heterogeneous multi-threaded operating system |
US7451146B2 (en) * | 2004-06-30 | 2008-11-11 | Hewlett-Packard Development Company, L.P. | Almost non-blocking linked stack implementation |
US20060075404A1 (en) * | 2004-10-06 | 2006-04-06 | Daniela Rosu | Method and system for scheduling user-level I/O threads |
US8607235B2 (en) | 2004-12-30 | 2013-12-10 | Intel Corporation | Mechanism to schedule threads on OS-sequestered sequencers without operating system intervention |
-
2004
- 2004-12-30 US US11/027,445 patent/US8607235B2/en not_active Expired - Fee Related
-
2005
- 2005-12-22 KR KR1020077017501A patent/KR20070095376A/ko active Search and Examination
- 2005-12-22 CN CN200910222297.5A patent/CN101702134B/zh not_active Expired - Fee Related
- 2005-12-22 JP JP2007549606A patent/JP2008525921A/ja active Pending
- 2005-12-22 CN CN2005800457586A patent/CN101160565B/zh not_active Expired - Fee Related
- 2005-12-22 WO PCT/US2005/047334 patent/WO2006074027A2/en active Application Filing
- 2005-12-22 EP EP05855829.7A patent/EP1839146B1/en not_active Not-in-force
-
2011
- 2011-01-18 JP JP2011007496A patent/JP2011076639A/ja active Pending
-
2013
- 2013-07-04 JP JP2013140714A patent/JP5678135B2/ja not_active Expired - Fee Related
- 2013-10-30 US US14/067,223 patent/US9069605B2/en not_active Expired - Fee Related
Non-Patent Citations (7)
Title |
---|
CSNG200000160017, 森山孝男、外3名, "粒度を考慮したマルチプロセッサの資源管理", 情報処理学会研究報告, 19900718, 第90巻,第60号, pp.103−108, JP, 社団法人情報処理学会 * |
CSNG200500583008, 本田大、外2名, "ハイパースレッディング環境における投機的スレッドを用いたキャッシュ効率化", 情報処理学会研究報告, 20040731, 第2004巻,第80号, pp.43−48, JP, 社団法人情報処理学会 * |
JPN5006014387, Hong Wang et al., "Speculative Precomputation: Exploring the Use of Multithreading for Latency", Intel Technology Journal, 20020214, Vol.6 Issue 1, pp.1−14, US, Intel Corporation * |
JPN5007023879, P. Agnihotri et al., "The Penn State Computing Condominium Scheduling System", Proceedings of the 1998 ACM/IEEE conference on Supercomputing, 19981107, pp.1−28 * |
JPN6010023521, 森山孝男、外3名, "粒度を考慮したマルチプロセッサの資源管理", 情報処理学会研究報告, 19900718, 第90巻,第60号, pp.103−108, JP, 社団法人情報処理学会 * |
JPN6010023525, 本田大、外2名, "ハイパースレッディング環境における投機的スレッドを用いたキャッシュ効率化", 情報処理学会研究報告, 20040731, 第2004巻,第80号, pp.43−48, JP, 社団法人情報処理学会 * |
JPN6010023542, Perry H. Wang et al., "Helper Threads via Virtual Multithreading on an Experimental Itanium▲R▼ 2 Processor−based Platform", ACM SIGPLAN Notices, 200411, Vol.39, Iss.11, pp.144−155 * |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2012509529A (ja) * | 2008-12-30 | 2012-04-19 | インテル コーポレイション | トランザクショナル・メモリ・イベントの処理のためのハードウェアにおけるユーザハンドラの登録 |
US9785462B2 (en) | 2008-12-30 | 2017-10-10 | Intel Corporation | Registering a user-handler in hardware for transactional memory event handling |
JP2014182799A (ja) * | 2013-03-15 | 2014-09-29 | Intel Corp | システムコールのためのロバスト且つ高性能な命令 |
Also Published As
Publication number | Publication date |
---|---|
US9069605B2 (en) | 2015-06-30 |
WO2006074027A3 (en) | 2006-08-24 |
US20140115594A1 (en) | 2014-04-24 |
US8607235B2 (en) | 2013-12-10 |
EP1839146A2 (en) | 2007-10-03 |
CN101160565A (zh) | 2008-04-09 |
JP2011076639A (ja) | 2011-04-14 |
JP5678135B2 (ja) | 2015-02-25 |
US20060150184A1 (en) | 2006-07-06 |
CN101702134B (zh) | 2014-07-23 |
CN101702134A (zh) | 2010-05-05 |
KR20070095376A (ko) | 2007-09-28 |
EP1839146B1 (en) | 2018-10-24 |
CN101160565B (zh) | 2012-06-20 |
JP2013191244A (ja) | 2013-09-26 |
WO2006074027A2 (en) | 2006-07-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5678135B2 (ja) | オペレーティング・システム介入なしにos隔離シーケンサー上でスレッドをスケジューリングする機構 | |
US9542221B2 (en) | Dynamic co-scheduling of hardware contexts for parallel runtime systems on shared machines | |
US8205200B2 (en) | Compiler-based scheduling optimization hints for user-level threads | |
JP4818919B2 (ja) | プロセッサ内での実行の計算スレッドを一時停止して割り当て解除するための統合されたメカニズム | |
US20050188177A1 (en) | Method and apparatus for real-time multithreading | |
US20070150895A1 (en) | Methods and apparatus for multi-core processing with dedicated thread management | |
US8516483B2 (en) | Transparent support for operating system services for a sequestered sequencer | |
US20070074217A1 (en) | Scheduling optimizations for user-level threads | |
JP5244160B2 (ja) | 複数の命令シーケンサでのスレッド実行に基づく命令セットのためのメカニズム | |
JP2561801B2 (ja) | プロセス・スケジューリングの管理方法およびシステム | |
JP2005284749A (ja) | 並列処理コンピュータ | |
JP2007504541A (ja) | プロセッサ内での実行の計算スレッドを一時停止して割り当て解除するための統合されたメカニズム | |
WO2005048010A2 (en) | Method and system for minimizing thread switching overheads and memory usage in multithreaded processing using floating threads | |
Grossman et al. | Hardware support for fine-grained event-driven computation in Anton 2 | |
Woo et al. | Catnap: A Backoff Scheme for Kernel Spinlocks in Many-Core Systems | |
Singer et al. | An Efficient Scheduler for Task-Parallel Interactive Applications | |
Yamasaki | Responsive multithreaded processor for distributed real-time processing | |
Labarta et al. | Hybrid Parallel Programming with MPI/StarSs | |
CN115858132A (zh) | 线程调度方法、装置、芯片、电子设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20100511 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20100806 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20100921 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20110118 |