JPH07271738A - ソフトウエア・アーキテクチャを用いた高度並列コンピュータ・システムの制御方式 - Google Patents

ソフトウエア・アーキテクチャを用いた高度並列コンピュータ・システムの制御方式

Info

Publication number
JPH07271738A
JPH07271738A JP7041126A JP4112695A JPH07271738A JP H07271738 A JPH07271738 A JP H07271738A JP 7041126 A JP7041126 A JP 7041126A JP 4112695 A JP4112695 A JP 4112695A JP H07271738 A JPH07271738 A JP H07271738A
Authority
JP
Japan
Prior art keywords
thread
virtual
threads
processors
computer system
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.)
Granted
Application number
JP7041126A
Other languages
English (en)
Other versions
JP2848262B2 (ja
Inventor
Jiyaganasan Suretsushiyu
ジャガナサン スレッシュ
Efu Fuirubin Jieemusu
エフ.フィルビン ジェームス
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
NEC Corp
Original Assignee
NEC Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by NEC Corp filed Critical NEC Corp
Publication of JPH07271738A publication Critical patent/JPH07271738A/ja
Application granted granted Critical
Publication of JP2848262B2 publication Critical patent/JP2848262B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • G06F8/451Code distribution

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Abstract

(57)【要約】 【目的】 いくつかの抽象体の層を備えた、高度並列コ
ンピュータ・システムを制御するソフトウエア・アーキ
テクチャを用いた制御方式の提供。 【構成】 抽象物理的マシン10(第1層)は抽象物理
的プロセッサの組を含んでおり、マイクロカーネルと考
えることができる。第2層は仮想マシン2と仮想プロセ
ッサ16とを含んでいる。仮想マシンは仮想アドレス空
間と、仮想トポロジーで接続された仮想プロセッサの組
とを備えている。仮想マシンは抽象物理的マシンにマッ
ピングされ、各仮想プロセッサは抽象物理的プロセッサ
にマッピングされている。第3層は、スレッド18を定
義している。スレッドは、仮想プロセッサ上でランする
ライトウエイトのプロセスである。望ましくは、抽象物
理的マシン、抽象物理的プロセッサ、仮想マシン、仮想
プロセッサ、スレッド・グループ、ならびにスレッドは
すべてファーアストクラスのオブジェクトである。

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は、高度に並列化したコン
ピュータ・システムを制御するためのコンピュータ・ソ
フトウエア・アーキテクチャを用いた高度並列コンピュ
ータ・システムの制御方式に関し、特に、現代のプログ
ラミング言語に対して、非常に効率的なサブストレート
として役立つよう設計したコンピュータ・ソフトウエア
・アーキテクチャを用いた高度並列コンピュータ・シス
テムの制御方式に関するものである。
【0002】このコンピュータ・ソフトウエア・アーキ
テクチャを用いた制御方式は、制御の問題をポリシーの
問題から分離したオペレーティング・システムにもとづ
いている。この分離はシステムの2つの異なる抽象体レ
ベルで行っている。すなわち抽象物理的プロセッサと仮
想プロセッサとにおいてである。これら抽象体のそれぞ
れは2つの構成要素に分れている。1つは、抽象体の制
御部分を実現する“コントローラ”であり、もう1つは
コントローラに対してポリシーを決定する“ポリシー・
マネージャ”である。制御をポリシーから分離すること
によって、機能的に同一のシステムに対する異なる振舞
の定義を、抽象体のポリシー・マネージャ部分を変更す
るのみで行うことが可能となる。
【0003】具体的には、このソフトウエア・アーキテ
クチャを用いた制御方式は、制御のライトウエイト・ス
レッドと仮想プロセッサとをファーストクラスのオブジ
ェクトとしてサポートする。並行(コンカレンシー)マ
ネジメントは、ファーストクラスのプロシージャおよび
ファーストクラスのコンティニュエーションによって実
現する。それによって、ユーザが基本的なランタイム・
システムに関する知識を持っていなくても、アプリケー
ションのランタイムの振舞を最適化することが可能とな
る。
【0004】さらに具体的には、本発明は、非同期並行
構造の構築と、基本的制御メカニズムとしてコンティニ
ュエーションを用いてスレッド・コントローラの実現
と、大規模並行計算の組織化と、並列計算のための強固
なプログラミング環境との設計に関するものである。
【0005】
【従来の技術】並列計算に対する興味が高まり、その結
果、並行性を表現するために高レベルのプログラムとデ
ータの構造を明確に定義する並列プログラミング言語が
多数、生み出された。非数値的アプリケーション領域を
ターゲットにする並列言語は典型的に、動的なライトウ
エイト・プロセスの生成、高レベル同期基本命令、分散
データ構造、ならびにスペキュラティブな並行性を実現
する並行構造をサポートする(効率は異なっている)。
これらの並列言語は事実上すべて、2つの部分言語から
成ると考えられる。2つの部分言語とは、すなわち、プ
ロセスの集まりのアクティビティを管理し同期化する調
整言語と、与えられたプロセスに限定されるデータ・オ
ブジェクトを扱う計算言語とである。
【0006】伝統的に、オペレーティング・システムに
はいくつかのクラスがある。例えば、リアルタイム、イ
ンタラクティブ(会話型)、バッチなどである。これら
3つのクラスのオペレーティング・システムはユーザに
対して異なるインターフェースを提供するので、プログ
ラムをあるクラスのオペレーティング・システム(O
S)から他のクラスのオペレーティング・システムに移
動するのは困難であった。さらに、各クラスのオペレー
ティング・システムが決定するスケジューリングは異な
っているので、1つのオペレーティング・システムのた
めのプログラム(例えばリアルタイム・アプリケーショ
ン)を他のオペレーティング・システム(例えば会話型
開発システム)でデバッグすることは難しく、またアプ
リケーションがターゲット・システム上で正確かつ効率
的にランすることに関して自信を持つことは困難であ
る。
【0007】そして、これらのクラスのシステムではそ
れぞれ異なるスケジューリング方式を用いているので状
況はさらに複雑である。例えば、ある種のリアルタイム
・システムでは、複数のプロセスに対してスケジューリ
ングの順序は固定しているのに対して、別のシステムで
は優先規律を用いたり、ランニング・クオンタムを用
い、さらに他のシステムでは、それらを組み合せてい
る。会話型オペレーティング・システムあるいはバッチ
・オペレーティング・システムはスケジューリングに関
してかなりの数の選択肢を有している。
【0008】制御をポリシーから分離することによっ
て、種々のクラスのオペレーティング・システムに対し
て容易にカスタマイズできるオペレーティング・システ
ムを構築できる。本発明では、ポリシー・マネージャを
実現するモジュールは典型的にはシステムのサイズに比
べて非常に小さい。一般にコードのライン数は100未
満である。従って、ポリシーの振舞が異なるシステムを
新たに構築する場合、通常はコードの小部分を書くのみ
でよい。また、ポリシー・マネージャは良く定義された
インターフェースを提供するので、ポリシーの振舞を変
更した場合、システム全体を試験する必要はなく、新し
いポリシー・マネージャだけを試験すればよい。
【0009】Hydra(参考文献:“HYDRA/
C.mmpi:An Experimental Co
mputer System”, William W
ulf,Roy Lexia,及びSamuel Ha
rbison著,McGraw−Hill,1991)
は、制御とポリシーとの分離を意図して設計された最初
のオペレーティング・システムである。しかし、Hyd
raはポリシーのカスタマイズをカーネルのレベルでし
か認めていない。本発明ではさらに進めて、ポリシーの
決定を、それらが特定のプログラムに関連するものであ
る場合、カスタマイズできるようにする。従って、エデ
ィタやウインドウ・マネージャなどの会話型プログラム
は、流体力学のシミュレーションや有限要素法の計算な
ど、計算を主体とするプログラムとは非常に異なったポ
リシーを持つことができる。また、Hydraにおける
制御とポリシーとの分離はコストのかかるものとなって
いる。それは、カーネルとポリシー・マネージャとの間
に複数のコンテクスト・スイッチを必要とするからであ
る。本発明では、ポリシー・マネージャは一般に適当な
アドレス空間に直接リンクしており、コンテクストの切
り換えは不要である。従って本発明のポリシー・マネー
ジャは少なくとも従来のオペレーティング・システムに
おけるポリシー・マネジメント(カスタマイズできな
い)と同程度に効率的であり、そして通常は従来以上に
効率が良い。
【0010】高レベルの並列言語を実現する1つの方法
は、専用の(ユーザ・レベル)仮想マシンを構築するこ
とである。仮想マシンは基本的に、調整部分言語に見ら
れる高レベルの並行プリミティブを実現するサブストレ
ートとして機能する。調整言語Lが並行プリミティブP
をサポートする場合、Lの仮想マシン(LP )の役割
は、Pの実現に関連したことをすべて扱うことである。
そのためにはマシンが、プロセスのスケジューリング、
記憶、管理、同期化、その他を管理することがしばしば
必要となる。しかし、LP はPを効率良く実現するよう
にのみ調整されているので、非常に異なった並行プリミ
ティブを実現することは多くの場合適当でない。従っ
て、並行プリミティブP′によってLの方言を構築する
ためには通常、仮想マシンを新たに構築するか、あるい
はPを用いてP′の意味規制を表現する必要がある。こ
れら2つのアプローチには明らかに欠点がある。すなわ
ち、第1のアプローチでは複雑な仮想マシンを新たに構
築するため、コスト高である。一方、第2のアプローチ
は、Pの意味規制が高レベルであり、またLP の機能が
限定されているので、不十分である。
【0011】言語の実現において、並行性を実現するた
めに専用の仮想マシンを構築する代りに、低レベルのオ
ペレーティング・システムの機能を用いることができ
る。プロセスの生成およびスケジューリングは、OSが
管理する、制御のスレッド(ヘビーウエイトあるいはラ
イトウエイト)によって実現する。そして同期化は、低
レベルの、OSが管理する構造体を用いて扱う。このよ
うにして実現したものは一般に、専用の実行時システム
の周辺に構築したシステムより、ポータブルであり、ま
た拡張性が高い。ただし、カーネル(低レベル)はすべ
て、アプリケーションとオペレーティング・システムと
の間の保護境界を横断する必要があるので、効率は犠牲
になる。さらに、汎用のOS機能は通常、対象の並行オ
ペレータの意味規制に対して不感であるため、それらは
コンパイル時間あるいは実行時間の点で最適化をほとん
ど、あるいはまったく行わない。
【0012】
【発明が解決しようとする課題】高度並列マルチプロセ
ッサ/マルチコンピュータ・システムを制御するため
の、現代のプログラミング言語に対する非常に効率の良
いサブストレートとして役立つコンピュータのオペレー
ティング・システム・アーキテクチャを用いた高度並列
コンピュータ・システムの制御方式が得られる。 更
に、本発明によれば、カスタマイズ可能な仮想マシンに
もとづく非同期の計算のためのソフトウエア・アーキテ
クチャを用いた高度並列コンピュータ・システムの制御
方式が得られる。
【0013】また、本発明によれば、仮想プロセッサ上
でファーストクラスのオブジェクトとしてライトウエイ
ト・スレッドをサポートするソフトウエア・アーキテク
チャを用いた高度並列コンピュータ・システムの制御方
式が得られる。
【0014】更に、本発明によれば、カスタマイズ可能
なポリシー・マネージャを、特にユーザ・レベルに含む
ソフトウエア・アーキテクチャを用いた高度並列コンピ
ュータ・システムの制御方式が得られる。
【0015】また、本発明によれば、カスタマイズ可能
な仮想トポロジーを含むソフトウエア・アーキテクチャ
を用いた高度並列コンピュータ・システムの制御方式が
得られる。
【0016】また、本発明によれば、スレッド吸収、遅
延TCB割り当て、ならびに記憶装置共有の場所として
のスレッド・グループを含むソフトウエア・アーキテク
チャを用いた高度並列コンピュータ・システムの制御方
式が得られる。
【0017】更に、本発明によれば、多様な形態のポー
トを含むソフトウエア・アーキテクチャを用いた高度並
列コンピュータ・システムの制御方式が得られる。
【0018】また、本発明によれば、上述のようなソフ
トウエア・アーキテクチャを用いて制御されるコンピュ
ータ・システムが得られる。
【0019】
【課題を解決するための手段】本発明によれば、高度並
列コンピュータ・システムを制御するためのソフトウエ
ア・アーキテクチャを用いた高度並列コンピュータ・シ
ステムの制御方式において、一つのマイクロカーネルを
形成する複数の抽象物理的プロセッサを備えた複数の抽
象物理的マシンと;前記複数の抽象物理的プロセッサに
付随し、複数の仮想プロセッサを備えた複数の仮想マシ
ンと;前記複数の仮想プロセッサ上でランする複数のス
レッドを備えた複数のスレッド・グループとを備え、前
記複数の仮想プロセッサおよび前記複数のスレッドはフ
ァーストクラスのオブジェクトであることを特徴とする
ソフトウエア・アーキテクチャを用いた高度並列コンピ
ュータ・システムの制御方式が得られる。
【0020】更に本発明によれば、各々が仮想プロセッ
サ・コントローラと仮想プロセッサ・ポリシー・マネー
ジャとを有し、物理的トポロジーにおいて接続された複
数の抽象物理的プロセッサと;各々が、仮想アドレス空
間と複数の仮想プロセッサとを有する複数の仮想マシン
と;を備えたコンピュータ・システムであって、前記複
数の仮想マシンの各々の前記複数の仮想プロセッサは、
前記仮想プロセッサ・コントローラ及び前記仮想プロセ
ッサ・ポリシー・マネージャに応答して実行し、かつ、
スレッド・コントローラとスレッド・ポリシー・マネー
ジャとを有し、前記複数の仮想プロセッサは仮想トポロ
ジーにおいて接続され、各仮想プロセッサはそれぞれの
抽象物理的プロセッサにマッピングされており、前記コ
ンピュータ・システムは、前記スレッド・コントローラ
と前記スレッド・ポリシー・マネージャとに応答する前
記複数の仮想プロセッサ上でランする複数のスレッド
を、更に、備えていることを特徴とするコンピュータ・
システムが得られる。
【0021】本発明は、高レベル・プログラミング言語
のコンテクストにおいて広い範囲の並行構造体を表現す
ることを可能とする調整サブストレートの実現に関する
ものである。本発明は汎用調整モデルを定義し、そのモ
デル上で、多数の特殊調整言語を効率良く実現できるよ
うにする。本発明の実施においては、ソフトウエアのス
キーム(Scheme)(参考文献:“The Rev
ised Report on the Algori
thmic Language Scheme” AC
M Sigplan Notices,21(12),
1986, Jonathan Rees and W
iliam Clinger)を計算の基礎として用い
た。スキームはより高次の、辞書的に見たときの、Li
spの方言である。スキームは望ましい言語ではある
が、当業者にとって明らかなように、上記調整サブスト
レートの設計は、いかなる現代の(高レベルの)プログ
ラミング言語にも取り入れることができよう。
【0022】本発明のオペレーティング・システムは基
本的に、共有メモリあるいは分離メモリを用いた、MI
MD(マルチ・インストラクション−マルチ・データ)
並列コンピュータ上でランするように設計され、またワ
ークステーションのネットワークから成る分散マシン上
でランするように設計されている。本発明のソフトウエ
ア・アーキテクチャでは、分離メモリあるいは分散メモ
リを用いたマシン上で実行する場合には、共有仮想メモ
リ・モデルを用いる。その実現においては、異なる、並
列のパラダイムに対応する多数の異なるアルゴリズムを
用いた。上記並列には結果並列、マスター/スレーブ並
列、ならびに論理的並列が含まれる。いくつかの異なる
並列プログラミング・モデルを、フューチャー・ファー
ストクラスのタプル(組)空間、ならびにエンジンを備
えたオペレーティング・システム上で実現した。
【0023】本発明の望ましい実施例のフィーチャーで
ある、オペレーティング・システム(OS)を構成する
スキームの方言(スティング(Sting)と呼ぶ)
は、非同期、ライトウエイトの並行性を表現するための
調整言語(専用仮想マシンによって実現)を含み、それ
は2つのアプローチの最良点を組み合せている。他の並
列スキームのシステムおよび同種の高レベル言語の並列
方言と異なり、スティングにおける基本的な並行オブジ
ェクト(スレッド、仮想プロセッサ、ならびに物理的プ
ロセッサ)は、ストリームライン化したデータ構造であ
り、複雑な同期化を必要としない。並行性の管理をOS
によるサービスに依存する並列システムと違い、スティ
ングはスキームのオブジェクトおよびプロシージャによ
ってすべての並行管理の問題を実現し、その結果、ユー
ザは、背後のOSのサービスに関する知識を持つことな
く、アプリケーションのランタイムの振舞を最適化する
ことが可能となる。スティングは、さまざまな形態の非
同期の並列性を生成し、管理するための基本的な特徴
を、概念的に単一化したフレームワークで、かつ非常に
一般的なフレームワークによってサポートする。結果と
して、高レベル言語の種々の並列方言をその上に構築で
きる効率的なサブストレートを構築できることが分っ
た。スティングは単に、スタンドアロンの、短寿命のプ
ログラムを実現する媒介手段とすることを意図したもの
ではなく、並列計算のための豊かなプログラミング環境
を構築するためのフレームワークを提供することを期待
したものである。従って、このシステムは、スレッド・
プリエンプション、スレッドごとの非同期のガーベッジ
・コレクション、スレッド境界を越えた例外の扱い、な
らびにアプリケーションに依存するスケジューリング・
ポリシーをサポートする。さらに、このシステムは、持
続性の長寿命なオブジェクト、マルチ・アドレス空間、
その他、最新のプログラミング環境に共通する特徴を扱
うために、必要な機能を有している。
【0024】スティングでは、仮想プロセッサは抽象物
理的プロセッサ上で多重化され、スレッドは仮想プロセ
ッサ上で多重化される。この多重化に関連するポリシー
の決定はすべて、ポリシー・マネージャによって行われ
る。物理的プロセッサ上の仮想プロセッサの多重化に関
連する決定は、仮想プロセッサ・ポリシー・マネージャ
(VPPM)によって行う、仮想プロセッサ上のスレッ
ドの多重化に関する決定はスレッド・ポリシー・マネー
ジャ(TPM)によって行われる。
【0025】ポリシー・マネージャは3つのタイプの決
定を行う。すなわち、オブジェクトが生成あるいは再開
されたとき、プロセッサ(物理的あるいは仮想)に新し
いオブジェクト(VPあるいはスレッド)をいかにマッ
ピングするか、特定のプロセッサにマッピングされた複
数のオブジェクトをランさせる順序、ならびにオブジェ
クトをあるプロセッサから他のプロセッサに、いつ再マ
ッピングあるいは移動するかの3つである。
【0026】スティングは、スキーム、スモールトーク
(Small Talk)、ML、モジューラ3(Mo
dula3)、あるいはハスケル(Haskell)な
どの現代のプログラミング言語をサポートするように設
計されたオペレーティング・システムである。スティン
グは、低レベルの直交構築体の基礎を与え、それによっ
て言語の設計者あるいは使用者が、上記言語が必要とす
る種々の構築体を簡単かつ効率的に構築することを可能
とする。
【0027】現代のプログラミング言語は、従来のコボ
ル、フォートラン、C、あるいはパスカルなどのプログ
ラミング言語に比べ、より多くを要求する。スティング
は現代のプログラミング言語をサポートするように設計
されてはいるが、従来のプログラミング言語も同様に効
率良くサポートする。現代のプログラミング言語が従来
の言語と異なる点を以下にリストアップする。
【0028】・並列性:汎用のマルチ・プロセッサはま
すます利用し易くなってきており、その結果、並行プロ
グラミングのための効率的で、かつ表現力に優れたプラ
ットフォームの構築に対して興味が高まっている。高レ
ベルのプログラミング言語に並行性を組み入れるための
努力は大部分が、特殊目的の基本命令を言語に付加する
という点に払われている。
【0029】・マルチ同期化モデル:並列プログラミン
グあるいは非同期プログラミングにおいて、多くの同期
化プロトコルが用いられている。現代のオペレーティン
グ環境は、できる限りさまざまなプロトコルをサポート
する基本命令を提供するものでなければならない。
【0030】・レイジー(遅延)評価およびイーガー評
価:現代の多くの言語はレイジー評価あるいはイーガー
評価のいずれか、または両方をサポートしている。オペ
レーティング・システムにとって、レイジーからイーガ
ーまでの完全な評価ストラテジーを用意することは重要
である。
【0031】・自動記憶管理:これは現代の多数の言語
の基本的な特徴となっている。それは、自動記憶管理に
よってプログラムを一層、表現力に優れたものにでき、
同時にプログラムのエラーを低減し、かつプログラムの
複雑さを緩和できるからである。
【0032】・トポロジー・マッピング:多くのプログ
ラミング言語ではまだサポートされていないが、プログ
ラムにおける通信オーバーヘッドを低減するように、処
理のプロセッサへのマッピングを制御する能力は、マル
チ・プロセッサ・コンピュータ・システムのサイズが大
きくなり続け、かつトポロジーがより複雑になる以上、
より重要なものとなろう。
【0033】スティングはこれら種々の要素を効率良く
サポートする。スティングは、現在利用できるものより
一層、一般的でかつより効率的なアーキテクチャ・フレ
ームワークにおいてこれを行う。スティングはまた、高
い表現力および制御能力と、非並列レベルのカスタマイ
ズ能を、プログラムに提供する。
【0034】スティングは、その設計における4つの特
徴によって、他の並列言語から最もよく区別できる。
【0035】1.並行抽象体:並行性はスティングでは
制御のライトウエイト・スレッドによって表現される。
スレッドは非厳密な、ファーストクラスのデータ構造で
ある。
【0036】2.プロセッサ抽象体およびポリシー抽象
体:スレッドは、スケジューリングおよび負荷平衡・プ
ロトコルの抽象体を表す仮想プロセッサ(VP)上で実
行する。仮想プロセッサの数は、実際に利用できる物理
的プロセッサの数より多くてもかまわない。スレッドの
ように、仮想プロセッサはファーストクラスのオブジェ
クトである。1つのVPは1つのスレッド・ポリシー・
マネージャを備え、このポリシー・マネージャはそれが
実行するスレッドのためのスケジューリングと移行方式
を決定する。異なるVPは、実際には、性態の低下無し
に、異なるポリシー・マネージャを備えることができ
る。仮想プロセッサは、実際の物理的計算装置である物
理的プロセッサ上で実行する。
【0037】仮想プロセッサの集まりとアドレス空間と
は組合わさって、1つの仮想マシンを形成する。複数の
仮想マシンが単一の物理的マシン上で実行できる。物理
的マシンは1組の物理的プロセッサから成る。仮想マシ
ンおよび物理的マシンもまた指示可能な、スキームのオ
ブジェクトであり、このオブジェクトとして操作可能で
ある。
【0038】3.記憶モデル:1つのスレッドはデータ
を、そのスレッドが排他的に管理するスタックおよびヒ
ープに割り当てる。従って、複数のスレッドは、互いに
独立にそれらのプライベート・ステートのガーベッジ・
コレクションを行う。あるスレッドがプライベートのガ
ーベッジ・コレクションを始動する場合、グローバルな
同期化は不要である。データはスレッドを横断して参照
できる。スレッド境界を越えてオブジェクトのガーベッ
ジ・コレクションを行うとき、領域間の参照情報が用い
られる。記憶は世代スキャベンジング・コレクタによっ
て管理される。1つのスレッドによって割り当てられた
長寿命データあるいは持続データは、同じ仮想マシンに
おける他のスレッドもアクセスできる。
【0039】本発明の設計は記憶のローカリティという
ことに配慮している。例えば、スレッドをランさせるた
めの記憶装置はVPにキャッシュされ、そして1つのス
レッドが終了したとき、すぐに再利用できるようリサイ
クルされる。さらに、複数のスレッドは、データの依存
性が保証されるときは常に、同じ実行コンテクストを共
有することができる。
【0040】4.プログラム・モデル:スティングは、
スレッド間で横断的に扱われるべき例外を許容し、ノン
・ブロッキングI/Oをサポートし、仮想プロセッサの
スケジューリングのカスタマイズを、仮想プロセッサ上
のスレッドのスケジューリングがカスタマイズ可能であ
るのと同様に、可能とし、そしてマルチ・アドレス空間
および共有持続オブジェクトを実現する内部構造を与え
る。スティングはまた、ファーストクラスの多様な形態
のポートを用いたメッセージの効率の良い受け渡しをサ
ポートする。ポートは、分離メモリ・プラットフォーム
上の共有メモリの実現において、オーバーヘッドを緩和
するのに役立つ。
【0041】本発明の高度並列コンピュータ・システム
を制御するソフトウエア・アーキテクチャでは、オペレ
ーティング・システム(スティング)、基本言語、なら
びにコンパイラを1つの抽象的マシンに統合する。スタ
ート点はスキームなどの高レベルプログラミング言語で
ある。このプログラミング言語は、スレッド、仮想プロ
セッサ、ならびにポリシー・マネージャを含む効率的な
抽象体によって拡大されている。この優れたオペレーテ
ィング・システムは、データのローカリティにプレミア
ムを付けるという現在のアーキテクチャのトレンドを有
効に利用したメカニズムを含んでいる。
【0042】その結果、並列計算のための効率の良い調
整構造体を構築するメカニズムが得られた。ライトウエ
イトのスレッドを用いることにより、進歩的なプログラ
ミング環境の基礎が得られる。データのローカリティを
サポートすることによって、効率的な非同期システムが
得られる。
【0043】このシステムの性能にとって中心的なこと
は仮想トポロジーの概念である。仮想トポロジーは、仮
想プロセッサの集まりにおける関係を定める。ツリー、
グラフ、ハイパーキューブ、ならびにメッシュとして構
成されたプロセッサ・トポロジーはよく知られたその例
である。仮想プロセッサは、スレッドが実行するスケジ
ューリング、マイグレーション、ならびに負荷平衡のポ
リシーを定義する抽象体である。この仮想トポロジー
は、複雑なスレッドとプロセッサのマッピング(物理的
相互接続の低レベルの詳細を抽象する)を定める、単純
で表現力に優れた高レベルのフレームワークを与えるよ
う意図されている。
【0044】計算によって生成されたスレッドは、仮想
トポロジー内のプロセッサに対して、そのトポロジーに
関連したマッピング機能によってマッピングされる。ユ
ーザはこれらのマッピング機能を定義することができ
る。仮想トポロジーを用いて特定のマルチプロセッサ・
プラットフォーム上でシステムが実現されている場合、
仮想トポロジー内の仮想プロセッサをプラットフォーム
内の物理的プロセッサにマッピングするプロシージャを
定義することが可能である。
【0045】コードそれ自身は、それが物理的プロセッ
サあるいは物理的プロセッサの相互接続に対する参照を
含んでいない限り、マシンとは独立している。スレッド
・マッピングとローカリティに関するすべてのことは、
プログラムが用いる、仮想トポロジーの仕様と、プログ
ラム実行時のトポロジー内のノードの通過の仕方におい
て抽象される。
【0046】仮想トポロジーとプロセッサ・マッピング
の利益は、効率性だけでなく、移植性という点にもあ
り、それによって並列アルゴリズムの実現を個別の物理
的トポロジーごとに特殊化する必要がなくなる。スレッ
ドをプロセッサに関連づけるマッピング・アルゴリズム
は、仮想トポロジーの一部として細かく指定されるの
で、プログラマは、スレッドがどのように仮想プロセッ
サに対してマッピングされるべきかを正確に管理でき
る。ある計算において通信が必要となることが分かって
いる場合、これらのスレッドを特定の仮想プロセッサに
明確に割り当てられるという能力によって、暗黙的なマ
ッピング・ストラテジーの場合より優れた負荷平衡を行
える。並列アルゴリズムによって定義される制御とデー
タフローのグラフの構造は、種々の形で用いることがで
きる。スレッドの集まりが共通のデータを共有している
場合には、これらのスレッドが実行する仮想プロセッサ
を同一の物理的プロセッサにマッピングするトポロジー
を構築することが可能である。仮想プロセッサは物理的
プロセッサ上で、スレッドが仮想プロセッサ上で多重化
されるのと同じようにして多重化される。あるスレッド
の集まりが重要な相互の通信を必要とする場合には、そ
れらのスレッドを、仮想トポロジーにおいて互いに接近
したプロセッサにマッピングするトポロジーを構築する
ことができる。スレッドT1 が、他のスレッドT2 が発
生する値に対してデータ依存性を有している場合、T1
とT2 とは同一の仮想プロセッサにマッピングすること
が合理的である。プロセッサがほとんどビジー状態とな
るグラニュラリティの細かいプログラムでは、同一また
は近いプロセッサ上のデータ依存スレッドに対してスケ
ジューリングを行える能力によって、スレッドのグラニ
ュラリティを改善する機会が与えられる。最後に、適応
ツリー・アルゴリズムなど、ある種のアルゴリズムは計
算の進行につれて展開するというプロセス構造を有して
いる。これらのアルゴリズムは、仮想プロセッサの動的
生成が可能なトポロジー上において最も良く実行され
る。
【0047】このソフトウエア・アーキテクチャの他の
優れた面として、効率的な汎用のマルチ・スレッドのオ
ペレーティング・システムおよびプログラム環境の実現
における、コンティニュエーションおよびファーストク
ラスのプロシージャの役割がある。コンティニュエーシ
ョンは、状態遷移の操作、例外の扱い、ならびに重要な
記憶の最適化を実現するために用いられる。コンティニ
ュエーションは、プログラム・ポイントの抽象体であ
る。コンティニュエーションは、1つの引数を有するプ
ロシージャによって表され、このプロシージャは、引数
が示すプログラム・ポイントから実行すべき残りの計算
を定義している。
【0048】スティングの仮想アドレス空間は1組の領
域によって構成されている。領域は、一時的にあるいは
空間的に強いローカリティを示すデータを組織化するた
めに用いられる。スティングはさまざまな領域をサポー
トする。すなわち、スレッド制御ブロック、スタック、
スレッド・プライベート・ヒープ、スレッド共有ヒープ
などである。データは、それらの意図された仕様および
寿命にもとづいて領域に割り当てられ、従って異なる領
域は、それらに関連した異なるガーベッジ・コレクタを
備えることになる。
【0049】例外と割り込みは常に、スレッド・レベル
のコンテクスト・スイッチの場合のように、あるスレッ
ドの実行コンテクストにおいて扱われる。例外ハンドラ
ーは通常のスキームのプロシージャによって実現され、
そして例外のディスパッチは基本的にコンティニュエー
ションの操作を含んでいる。
【0050】スティングが、制御のライトウエイト・ス
レッドの生成および管理が可能なプログラミング・シス
テムである限り、いくつかの特性を、他の高レベル言語
のために開発されたスレッド・パッケージ・システムと
共有している。これらのシステムもスレッドを明らかな
データタイプと見ており、また、さまざまな程度にプリ
エンプションをサポートし、そしてある限定されたケー
スでは、プログラマが特別のスケジュール管理を指定す
ることを可能としている。これらのシステムでは、スレ
ッドの抽象体が調整部分言語を定めている。
【0051】しかし、スティングはいくつかの重要な点
でこれらのシステムと異なっている。第1に、スティン
グが使用するスケジューリングとマイグレーションのプ
ロトコルは完全にカスタマイズできる。異なるアプリケ
ーションは、スレッド・マネージャあるいは仮想プロセ
ッサの抽象体を変更することなく、異なるスケジューラ
をランさせることができる。このようなカスタマイズは
仮想マシン自身の組織化に適用することができる。第2
に、スティングによるデータのローカリティのサポー
ト、記憶の最適化、ならびにスレッドの吸収によるプロ
セスの抑圧は他のシステムでは行えない。さらに、スレ
ッドのオペレーションはすべてスレッドの仮想マシン内
で直接実現される。スレッドのオペレーションの実行の
ために実施すべき、低レベルのカーネルに対するコンテ
クスト・スイッチは無い。スティングは、長寿命のアプ
リケーション、持続性のオブジェクト、ならびにマルチ
・アドレス空間をサポートすることを意図した抽象的マ
シンにおいて構築される。スレッド・パッケージは、そ
れらが(定義によって)完全なプログラム環境を定めて
いないので、これらの機能はまったく提供しない。
【0052】スティングはシステム・プログラミング言
語として設計されているので、低レベルの平行抽象体を
提供する。アプリケーション・ライブラリは直接スレッ
ド・オブジェクトを生成でき、そしてそれら自身のスケ
ジューリングおよびスレッド・マイグレーション・スト
ラテジーを定めることができる。高レベルの平行構築体
はスレッドを用いて実現できるが、しかし効率が保証さ
れるなら、システムはユーザがスレッドのオペレーショ
ンを上述のように直接利用することを禁止するものでは
ない。具体的には、同一のアプリケーションは、同一の
実行時の環境において、異なる意味規制と異なる効率
で、平行抽象体を定めることができる。
【0053】ある点でスティングは、他の進歩的マルチ
・スレッド・オペレーティング・システムに似ている。
例えば、スティングは、コール・バック、ユーザが管理
するオーバー・インタラプト、ならびにユーザ・レベル
の操作としてのローカル・アドレス空間の管理に伴うノ
ンブロッキングI/Oコールをサポートしている。ステ
ィングはユーザ・レベルの事柄とカーネル・レベルの事
柄とを分けている。物理的プロセッサは(特権を与えら
れた)システムのオペレーション、および複数の仮想マ
シンに跨るオペレーションを扱う。仮想プロセッサはユ
ーザ・レベルのスレッドおよびローカル・アドレス空間
の機能をすべて実現する。しかし、スティングはスキー
ムの拡張方言であるため、典型的なオペレーティング・
システム環境では提供されない高レベルのプログラミン
グ言語の機能性および表現性を提供する。
【0054】スティングは、非同期プログラミング基本
命令を構築し、そして新しい並列プログラミングのパラ
ダイムを実験するためのプラットフォームである。さら
に、その設計では、異なる平行性の手法を競走的に評価
することが可能である。スキームは、意味規制が良く定
義され、全体的に簡素であり、そして効率的であるた
め、このような実験を行うための特に豊かな環境を提供
する。しかし、スティングの設計はそれ自身言語に依存
しない。従って、いかなる高レベルプログラミング言語
にも極めて容易に組み込むことができよう。
【0055】スティングは単に、興味深いと思われる各
平行パラダイムおよび各平行プリミティブに対してフッ
クを与えるものではない。そうではなく、広範囲の並列
プログラミング構造体に共通の基本構造および機能に焦
点を当てている。従って、ブロッキングの実現は論理的
な計算をサポートするために容易に用いられる。スレッ
ドの実行を抑止するために用いられるスレッド吸収の最
適化は、フューチャーとタプル空間の同期化を実現する
のに非常に適しており、そして最後に、カスタマイズ可
能なポリシー・マネージャは、他のさまざまなパラダイ
ムに対して公正で効率的なスケジューラを構築すること
を可能とする。
【0056】
【実施例】次に本発明の実施例について図面を参照して
説明する。
【0057】図1に本発明の一実施例による高度並列コ
ンピュータ・システムを制御するためのソフトウエア・
アーキテクチャを用いた高度並列コンピュータ・システ
ムの制御方式のブロック図を示す。
【0058】抽象物理的マシン(PM)10は、物理的
トポロジー(PT)11で互いに接続された抽象物理的
プロセッサ(PP)12により構成されている。この抽
象物理的マシンは1組の仮想マシン(VM)14を実行
させるために用いられる。それに対して、各仮想マシン
は、仮想トポロジー(VT)20,20′で接続された
1つ以上の仮想プロセッサ(VP)16を備えている。
スレッド(T)18は、同じ仮想マシン内の1つ以上の
仮想プロセッサ上で実行する。さらに、特定のスレッド
は、同じ仮想マシン14内の異なる仮想プロセッサ間で
移行(マイグレート)できる。スレッド・ポリシー・マ
ネージャ(TPM)19(図2,図3に示す)はスレッ
ドのスケジューリングおよびスレッドの負荷平衡・ポリ
シーを制御する。異なる要素間の関係および各要素の詳
細を以下に説明する。
【0059】ソフトウエア・アーキテクチャ(オペレー
ティング・システム・アーキテクチャという場合もあ
る)は、いくつかの抽象体の層の配列と考えることがで
きる(図2)。第1の層は抽象物理的マシン10を含
み、このマシンは抽象物理的プロセッサ12の組を含ん
でいる。この層は、現状のオペレーティング・システム
においてマイクロ・カーネルと呼ばれているものに対応
している。次の層は仮想マシン14および仮想プロセッ
サ16を含んでいる。仮想マシンは、仮想アドレス空間
と、仮想トポロジーで接続された仮想プロセッサの組と
を備えている。仮想マシンは抽象物理的マシンにマッピ
ングされ、その際、各仮想プロセッサは抽象物理的プロ
セッサにマッピングされる。抽象体の第3の層はスレッ
ド18である。これらのスレッドは、仮想プロセッサ上
でランするライトウエイトのプロセスである。
【0060】仮想トポロジーは、例えば、メッシュ・ト
ポロジーで物理的に接続された物理的プロセッサにマッ
ピングされる仮想プロセッサのツリーである。仮想トポ
ロジーによって、プログラマは、実施すべきアルゴリズ
ムに適した(仮想)トポロジーでプログラムを表現する
ことが可能となる。スティングは、仮想トポロジーか
ら、ターゲット・マシンの実際の物理的トポロジーへの
効率的なマッピングを提供する。また、仮想トポロジー
によって、並列プログラムを、異なる物理的トポロジー
間で容易に移すことが可能となる。
【0061】スティングの調整部分言語の主な構成要素
は、ライトウエイト・スレッドと仮想プロセッサであ
る。スレッドは、ローカル記憶装置(すなわち、レジス
タ、スタック、ならびにヒープ)、コード、ならびに関
連する状態情報(すなわち、ステータス、優先順位、プ
リエンプション・ビット、ロックなど)を含む単純なデ
ータ構造である。それらは独立した制御の場所を定義し
ている。このシステムは、スレッドが含むコードに対し
て制約を課さない。有効なスキームの表現はすべて、独
立したプロセスとして扱われる。
【0062】図2,図3に示すように、各仮想プロセッ
サ(VP)16はスレッド・コントローラ(TC)17
を含み、このコントローラはスレッド上およびスレッド
・ポリシー・マネージャ(TPM)19上で状態遷移機
能を実施する。そして、スレッド・ポリシー・マネージ
ャはスレッドのスケジューリングと負荷平衡/移行ポリ
シーの両方を実施する。同じ仮想マシン内で各VPはス
レッド・コントローラを共有するが、異なるVPは異な
るスレッド・ポリシー・マネージャを持つことができ
る。
【0063】仮想プロセッサ16は物理的プロセッサ1
2上に、スレッド18が仮想プロセッサ上に多重化され
ているのと同じようにして多重化されている。各物理的
プロセッサは、マルチプロセッサ環境における計算エン
ジンに対応している。各物理的プロセッサPPに関連し
ているのは仮想プロセッサ・コントローラ13および仮
想プロセッサ・ポリシー・マネージャ15である。仮想
プロセッサ・コントローラは、プリエンプションによっ
て、あるいは明示的なリクエストによって、仮想プロセ
ッサ間でコンテクスト・スイッチを行う。仮想プロセッ
サ・ポリシー・マネージャは、物理的プロセッサPP上
で実行する仮想プロセッサ16に対するスケジューリン
グの決定を扱う。例えば、仮想プロセッサは、その上で
スレッドが実行していない場合、そして他のVPからス
レッドを移転できない場合には、物理的プロセッサの制
御を放棄することができる。物理的プロセッサは、シス
テム内のいかなる仮想マシンの仮想プロセッサをもラン
させることができる。
【0064】仮想マシンは単一のアドレス空間24を含
み、関連する仮想プロセッサはそれを排他的にアクセス
することができる。仮想マシンは、グローバル記憶プー
ル26内のグローバルな情報(例えば、ライブラリ、フ
ァイル・システムなど)を共有することができ、そして
グローバル共有オブジェクト28(すなわち、グローバ
ル・アドレス空間にあるオブジェクト)をそれらのロー
カル・アドレス空間にマッピングする。仮想マシンはま
た、アドレス空間内のすべての活性オブジェクトをトレ
ースするために用いられる活性オブジェクト・グラフ
(すなわち、ルート環境30)のルートを含んでいる。
【0065】すべてのスティング・オブジェクト(スレ
ッド、VP、仮想マシンを含む)は持続性メモリ内に存
在する。このメモリは個別領域の集合として構成されて
いる。オブジェクトは、世代コレクタを用いて領域内に
集められたガーベッジである。1つのオブジェクトはそ
のアドレス空間内の他のオブジェクトをすべて参照する
ことができる。最初、オブジェクトは短寿命のスレッド
・ローカル領域に存在する。ガーベッジ・コレクション
から生き残ったオブジェクトは世代階層において上位に
移る。この機能はユーザにとっては全く明らかである。
【0066】ファーストクラスのオブジェクトは、プロ
シージャに対して引数として渡したり、結果としてプロ
シージャから戻したり、あるいはデータ構造内に記憶で
きるオブジェクトのことである。本発明の抽象物理的マ
シンの望ましい実施例では、抽象物理的プロセッサ、仮
想マシン、仮想プロセッサ、スレッドのグループ、なら
びにスレッドはすべてファーストクラスのオブジェクト
である。他の実施例では、スレッドおよび仮想プロセッ
サのみがファーストクラスのオブジェクトである。
【0067】スティング・コンパイラはオービット(O
rbit)の改良バージョンである。オービットについ
てはD.Kranzらの論文に記述されている(参考文
献:“Orbit:An Optimizing Co
mpiler for Scheme”,in ACM
SIGPLAN Notices,21(7):21
9−233,July 1986)。コンパイラにより
見えるターゲット・マシンは、現在ランしているスレッ
ド・オブジェクトに対する参照を保持する専用のスレッ
ド・レジスタを含んでいる。さらに、レジスタをコンテ
クスト・スイッチ上で退避、復元したり、あるいはスレ
ッドの記憶領域(すなわち、スタックおよびヒープ)を
割り当てたりするといった時間的な制約の厳しいオペレ
ーションは、基本オペレーションとして用意される。連
続するスキーム・プログラムは変更無しにコンパイル
し、実行される。スティングでは、フューチャー、分散
データ構造、ならびにスペキュラティブ平行オペレーシ
ョンも実現している。スキーム・プログラムは、これら
のパラダイムのいずれかによってサポートされた平行オ
ペレーションによって自由に拡大させることができる。
【0068】スレッドは、スティングにおけるファース
トクラスのオブジェクトである。従って、それらは引数
としてプロシージャに渡すことができ、また結果として
戻し、さらにデータ構造内に格納することができる。ス
レッドは、スレッドを生成したオブジェクトより長く生
き残ることができる。スレッドの状態は、サンク(th
unk)、すなわちスレッドが実行されるとき発動され
るヌラリー(nullary)プロシージャを含んでい
る。アプリケーションの値は終了時にスレッド内に格納
される。例えば、(fork−thread(+y(*
×z)))という表現を評価することによって、サンク
(lambda()(+y(*×z)))を発動する制
御のライトウエイト・スレッドが生成される。このサン
クの評価環境は、fork−threadという表現の
辞書的環境である。
【0069】スレッドは状態情報をその状態の一部とし
て記録する(図4および図5参照)。スレッドは、遅延
36、スケジュール38、評価40、吸収42、あるい
は確定44のいずれかの状態をとる。遅延されたスレッ
ドは、スレッドの値が明確に要求されない限り、ランさ
れることはない。スケジュールされたスレッドは、いず
れかのVPが知っているスレッドであるが、まだ記憶資
源は割り当てられていない。評価を行っているスレッド
はランし始めたスレッドである。スレッドは、そのサン
クのアプリケーションが結果を出すまでこの状態に留ま
る。上記結果が出たときスレッドの状態が確定する。吸
収されたスレッドは、評価中のスレッドを特別化したも
のであり、重要であるため、以下にさらに詳しく説明す
る。
【0070】状態情報および評価すべきコードに加え
て、1つのスレッドはまた、(1)それが完了するのを
待っている他のスレッドに対する参照情報と、(2)サ
ンクの動的な、そして例外の環境と、スレッドの親、兄
弟、ならびに子を含む系統情報とを含んでいる。
【0071】各スレッドも、流体(すなわち動的)結合
および例外の扱いを実現するために用いる動的な、そし
て例外の環境を有している。系統情報は、デバッグとプ
ロファイリングのツールとして有用であり、それによっ
てアプリケーションはプロセス・ツリーの動的な展開を
モニタすることが可能となる。
【0072】スレッドの実現においては、言語における
他の基本オペレーションを変更する必要はない。スレッ
ドの同期化意味規則は、例えばMultiLispの
“touch”や、Lindaのタプル空間や、CML
の”sync”によって利用できる同期化機能をより一
般的な(低レベルではあっても)形にしたものである。
【0073】アプリケーションは状態を完全に制御し、
その状態のもとで、ブロックされたスレッドを復活させ
ることができる。しかし、データフロー(すなわちフュ
ーチャー・タッチ)、非決定論的な選択、ならびに制約
にもとづく同期化または障壁同期化に対する明示的なシ
ステム・サポートがある。
【0074】ユーザは、スレッド・コントローラ(T
C)(スレッドのある状態において同期状態の遷移を実
現する)が定義する1組のプロシージャ(以下にリスト
アップする)によってスレッドを操作する。TCは、レ
ジスタの退避および復元という2つの基本オペレーショ
ンを除いて、全体をスキームによって書くことが望まし
い。スレッド・コントローラは記憶領域を割り当てな
い。従って、TCのコールはガーベッジ・コレクション
をトリガーしない。これらのオペレーションに加えて、
スレッドは、プリエンプションのため、コントローラに
入ることができる。スレッド・プロシージャを以下に示
す。
【0075】(fork−thread expr v
p)は、exprを評価するためにスレッドを生成し、
それをvp上でランするようにスケジュールする。
【0076】(dealy−thread expr)
は、(スレッド値によって)要求されたときexprを
評価する遅延されたスレッドを生成する。
【0077】(thread−run thread
vp)は、遅延された、ブロックされた、あるいは保留
されたthreadをvpのレディー待ち行列に挿入す
る。
【0078】(thread−wait threa
d)は、このオペレーションを実行しているスレッド
に、threadの状態が確定するまでブロックさせ
る。
【0079】(thread−block threa
d . blocker)は、threadにブロック
することをリクエストする。blockerは、スレッ
ドがブロックするときの条件である。
【0080】(thread−suspend thr
ead . quantum)は、スレッドに実行の保
留をリクエストする。quantum引数が与えられた
場合には、指定された期間が経過したときスレッドは再
開される。そうでない場合には、スレッドは、thre
ad−runを用いて明示的に再開されるまで、無期限
に保留される。
【0081】(thread−terminate t
hread . values)は、threadに対
してvaluesをその結果として終了することをリク
エストする。(yield−processor)は、
現在のスレッドに、そのVPの制御をやめるようリクエ
ストする。このスレッドは適切なレディー待ち行列に挿
入される。
【0082】(current−thread)は、こ
のオペレーションを実行しているスレッドを復帰する。
【0083】(current−virtual−pr
ocessor)は、このオペレーションが、その上で
評価されている仮想プロセッサを復帰される。
【0084】ユーザがいかにスレッドをプログラムでき
るかを説明するため、図6のプログラムについて考え
る。このプログラムは、簡単な素数発見手段の実現を定
義したものである。この定義ではいかなる特定の並行パ
ラダイムも参照していない。このような問題はそのop
引数によって抽象される。
【0085】この素数発見手段の実現は、ストリーム・
アクセスにおけるブロッキング・オペレーション(h
d)、およびスレッドの最後に付加するアトミック・オ
ペレーション(attach)を与える、ユーザが定義
した同期スレッド抽象体に依存している。
【0086】非同期の振舞の程度が異なる、素数発見手
段の種々の処理を定義できる。例えば、 (let((filter−list(list))) (sieve(lambda(thunk) (set filter−list(cons(dela y−thread(thunk)) (filt er−list)))))) では、フィルタがレイジーに生成される。フィルタは、
一度要求されると、反復的に入力ストリームから要素を
除去し、そして潜在的な素数を出力ストリーム上に発生
する。ラウンド・ロビン・スレッド配置規律を用いるV
P上でスケジュールした新しいフィルタを始動させるた
め、次のように書くことができる。
【0087】 (thread−run(car filer−list) (mod(1+(vm.vp−vector(vp.v m(current−virtual−processor)))) n)) (vp.vm(current−virtual−pr
ocessor))という表現は、現在のVPを一部と
する仮想マシンを定義している。仮想マシンのパブリッ
ク・ステートは、その仮想プロセッサを収容するベクト
ルを含んでいる。
【0088】シーブに対する上記コールを少し書き直す
ことにより、よりレイジーな素数発見手段の実現を表現
できる。
【0089】 (let((filter−list(list))) (sieve(lambdas(thunk) (set filter−list (cons(create−thread (begin (map threa d−run filter list) (thunk))) filter−list)) (map thread−block filter −list)) n)) この定義では、潜在的な素数pに遭遇したフィルタは、
レイジーなスレッド・オブジェクトLを生成し、チェー
ン内の他のすべてのフィルタにブロックすることをリク
エストする。Lの値が要求されたときは、フィルタはチ
ェーン内のすべての要素をアンロックし、そしてその入
力スレッドにおけるpのすべての倍数を取り除く。この
コールでは要求にもとづいて、シーブの拡張および入力
の消費を抑制する。
【0090】このシーブは次のように、よりイーガーな
バージョンに変えることもできる。
【0091】 (sieve(lambda(thunk) (fork−thread−(thunk)(curre nt−vp))) n) このアプリケーションを評価することによって、素数の
すべての倍数を取り除くための新たなスレッドがスケジ
ュールされる。このスレッドは、この操作を実行する仮
想プロセッサ上でスケジュールされる。このコールで
は、素数が新たに見つかるごとに、評価するスレッドが
発生される。
【0092】スティングでは、スレッドのオペレーショ
ンを通常のプロシージャとして扱い、スレッドのオペレ
ーションで参照されるオブジェクトを、スキームのどれ
か他のオブジェクトとして操作する。共通のストリーム
によって結ばれた2つのフィルタが終了した場合、上記
ストリームが占有する記憶領域は再利用することができ
る。スティングは、スレッドのアクセスに対して先験的
な同期化プロトコルを課さない。アプリケーション・プ
ログラムが、スレッドの調整を整える抽象体を構築する
ようにしている。
【0093】フィルタによって生成されたスレッドは2
つの方法の中の1つによって終了される。シーブに対す
るトップレベルのコールは、それがこれらのスレッドに
対して明示的なハンドルを有するように、構成すること
ができる。レイジーなシーブを生成するために用いるフ
ィルタ・リスト・データ構造はその一例である。次に、 (map thread−terminate fil
ter list) を評価して、シーブ内のすべてのスレッドを終了させる
ことができる。あるいは、アプリケーションはスレッド
のグループを用いて、これらのスレッドを集合的に管理
することができる。
【0094】<スレッド・グループ>スティングは、関
連するスレッドの集まりに対する制御を獲得する手段と
してスレッド・グループを与える。1つのスレッド・グ
ループは、fork−thread−groupに対す
るコールによって生成される。このオペレーションは、
新しいグループおよび新しいスレッドを生成し、新しい
スレッドは新しいグループのルート・スレッドになる。
子スレッドは、新しいグループを明示的に生成しない限
り、同一のグループを、その親として共有する。1つの
グループは1つの共有ヒープを含み、そのメンバーはす
べてこのヒープをアクセスできる。スレッド・グループ
が次のコールによって終了したき、 (thread−group−terminate g
roup) グループ内の生きているスレッドはすべて終了され、そ
の共有ヒープはガーベッジ・コレクトされる。
【0095】スレッド・グループはまた、そのメンバー
に対して、それをすべてひとまとめにして適用できるデ
バッグ・オペレーションおよびスレッド・オペレーショ
ンも含んでいる。スレッド・グループは、デバッグおよ
びモニタのためのオペレーション(例えば、与えられた
グループ内のすべてのスレッドのリストアップ、すべて
のグループのリストアップ、プロファイリング、系統の
報告など)と共に、通常のスレッドのオペレーション
(例えば、終了、保留など)と同種のオペレーションを
提供する。従って、スレッドTが終了したとき、ユーザ
はTのすべての子(終了されるべきTのグループの一部
として定義されている)に対して次のようにリクエスト
できる。
【0096】(thread−group−termi
nate(thread.group T)) スレッド・グループは、階層的メモリ・アーキテクチャ
において、共有を制御するための重要なツールである。
グループのメンバーが共有するオブジェクトは、グルー
プの共有ヒープ内に含まれているので、これらオブジェ
クトはメモリ内で物理的に互いに近接していることが望
ましく、それによってより良いローカリティが得られ
る。スレッド・グループはまた、スケジューリングの場
として用いることもできる。例えば、スレッド・ポリシ
ー・マネージャは、グループ内のすべてのスレッドがラ
ンすることを許可されない限り、グループ内のスレッド
はいずれもランできないというスケジューリング・ポリ
シーを実現できよう。このスケジューリング方式は“ギ
ャング・スケジューリング”プロトコルと同種のもので
ある。スレッド・グループはデータのローカリティを改
善するために仮想トポロジーと共に用いることができ
る。
【0097】<実行コンテクストおよびスレッド制御ブ
ロック>スレッドが評価を開始したとき、実行コンテク
ストがそれに対して割り当てられる。評価を行っている
スレッドはいずれも、スレッド制御ブロック(TCB)
32(図5)としても知られる実行コンテクストと関連
している。TCBはコンティニュエーションを一般的に
表したものであり、それ自身のスタック31とローカル
・ヒープ33を含んでいる。スタックとヒープはともに
拘束でき、そしてヒープは生成スキャベンジング・コレ
クタを用いてガーベッジ・コレクションされる。記憶オ
ブジェクト以外に、TCBは関連するロックと、スレッ
ドが最後にコンテクスト・スイッチを実行したとき残っ
ている、生きたレジスタすべての値と、スレッドのサブ
ステート(例えば、初期化、レディー、評価、ブロッ
ク、保留などの状態)と、スレッドが最後に実行された
VPと、スレッドの優先順位と、タイム・クオンタムと
を含んでいる。
【0098】スレッド・ステートおよびスレッド・サブ
ステートの遷移図を図4に示す。TCBの状態は、評価
を行っているスレッド上で許可されたオペレーションを
反映している。評価中のスレッドTがTCB TTCB
有しているなら、TTCB のステート・フィールドは以下
の中のいずれか1つを示す。
【0099】初期化46:TTCB に関連するスタックと
ヒープが初期化されているが、どのコードもまだ実行さ
れていない。
【0100】レディー48:Tは利用できるいかなるV
P上でも実行できるが、いずれのVP上でも現在、まだ
実行されていない。
【0101】ラン50:TはあるVP上で現在実行され
ている。
【0102】ブロック52:Tは、あるスレッド上で、
またはある条件のもとで現在ブロックされている。
【0103】保留54:Tは、基本的に無期限に保留さ
れている。
【0104】終了56:Tは実行を終了し、残りの状態
を一掃している。
【0105】スレッドとは異なり、TCBはファースト
クラスの、ユーザに見えるオブジェクトではない。スレ
ッド・コントローラとスレッド・ポリシー・マネージャ
のみがそれらをアクセスできる。新しいスレッドがラン
のレディー状態にあるとき、TCBはそれに割り当てら
れる。スレッドが確定状態となったとき、スレッド・コ
ントローラはそのTCBを、後に生成されるスレッドの
ために、利用できる。TCBはユーザが維持するデータ
構造内に逃げ込むことはない。TCBはシステム・レベ
ルのプロシージャによって排他的に操作される。
【0106】スティングの実現はスレッドに対する記憶
領域の割り当てを必要となるまで延期する。他のスレッ
ド・パッケージでは、スレッドを生成する動作は、単に
フォークされるべきスレッドに対する環境を設定するだ
けでなく、記憶領域の割り当ておよび初期化も含んでい
る。このアプローチでは2つの重要な点で効率の低下を
招く。第1に、グラニュラリティの細かい並列のもとで
は、スレッド・コントローラは、実際にスレッドをラン
させることより、それらを生成し、初期化することに、
より長い時間を消費する。第2に、スタックおよびプロ
セス制御ブロックはスレッドが生成されると直ちに割り
当てられるので、スレッド間のコンテクスト・スイッチ
はしばしば、キャッシュとページのローカリティの利点
を活用できない。さらに、TCBの割り当てが遅延され
ない場合には、システムに必要な全メモリ容量は大幅に
増加することになる。
【0107】スティングのスレッド制御ブロックは、仮
想プロセッサによって管理されるリサイクル可能な資源
である。TCBは、スレッドが評価を開始したときのみ
スレッドに対して割り当てられる。この割り当てのスト
ラテジーはデータのローカリティを改善するように設計
されている。TCBは、VP V上でランするべきスレ
ッドTに対して4つの方法の中の1つによって割り当て
ることができる。
【0108】1.現在V上で実行中のスレッドが終了し
た場合には、そのコンテクストは直ちに再割り当てのた
めに利用できる。そのTCBは割り当てのための最も良
い候補である。なぜなら、このTCBは、そのVPに対
して最も高いローカリティを有しているからである。こ
のVPに関連する物理的キャッシュおよびメモリは、最
も最近VP上でランしたスレッドの実行コンテクストを
含んでいる可能性が最も高い。
【0109】2.現在実行しているスレッドが終了して
いない場合には、Tに対するTCBは、V上に維持され
ているTCBのLIFOプールから割り当てられる。こ
こでも再び、上記実行コンテクストが、最も高いローカ
リティを有するものとなっている。
【0110】3.Vのプールが空の場合には、新しいT
CBが、これもLIFOの順序で構成されたグローバル
・プールから割り当てられる。ローカルVPプールはい
ずれも、それが保持できるTCBの数のしきい値τを維
持している。プールがオーバーフローした場合には、そ
のVPは、ローカル・プール内のTCBの半分をグロー
バル・プールに移動する。ローカル・プールがオーバー
フローしていない場合には、τ/2TCBがグローバル
・プールからVPのローカル・プールに移動される。グ
ローバル・プールは2つの役割を果たす。すなわち、
(1)TCBの割り当ておよび再使用におけるプログラ
ムの振舞の影響を最小化すること、および(2)すべて
の仮想プロセッサに対するTCBの公正な分配を保証す
ることである。
【0111】4.最後に、TCBをグローバル・プール
あるいはローカル・プールのいずれにおいても利用でき
ない場合には、τ/2TCBの新しい組が動的に生成さ
れ、Tに割り当てられる。新しいTCBは、グローバル
・プールおよびVPのローカル・プールがともに空の場
合にのみ生成されるので、スティング・プログラムの評
価の際に実際に生成されるTCBの数は、すべてのVP
によって集合的に決められる。
【0112】<仮想プロセッサ>仮想プロセッサ(拡張
して、仮想マシン)は、スティングではファーストクラ
スのオブジェクトである。ファーストクラスというVP
の状態には、スティングを高レベルのスレッド・システ
ムおよび他の非同期並列言語のいずれからも区別する重
要な意味がある。第1に、明示的にプロセスを特定の仮
想プロセッサにマッピングすることによって並列計算を
組織できる。例えば、VP V上で実行している他のス
レッドQと密接に通信することが知られているスレッド
Pは、トポロジー的にVに近いVP上で実行すべきであ
る。スティングでは、VPは直接的に示されるので、こ
のような考慮を実現することができる。例えばシストリ
ック・スタイルのプログラムは、現在のVP(例えば、
現在VP、左VP、右VP、上VPなど)から離れて自
己相対アドレシングを用いて表現することができる。こ
のシステムは、多数の共通トポロジー(例えば、ハイパ
ーキューブ、メッシュ、シストリック・アレーなど)に
対していくつかのデフォールト・アドレシング・モード
を提供する。さらに、VPは特定の物理的プロセッサに
マッピングできるので、ファーストクラスのデータ値と
して仮想プロセッサを操作できるという能力により、ス
ティングのプログラムは、種々の特定のプロセッサ・ト
ポロジーで定義される異なる並列アルゴリズムを極めて
柔軟に表現することができる。
【0113】図7のプログラムを参照して説明する。こ
のプログラムは、物理的プロセッサの2次元メッシュ上
で多重化された仮想プロセッサの3次元メッシュを生成
するものである。このアレーは、物理的マシンの高さお
よび幅と同じ高さおよび幅を有している。深さ方向の各
要素を同じ仮想プロセッサにマッピングすることによっ
て、3次元アレーを2次元アレーに縮小する。従って、
生成された仮想プロセッサの数は、物理的プロセッサの
数と同じである。同じ深さのプロセッサにマッピングさ
れたスレッドはすべて同じVP上で実行する。プロシー
ジャget−pm−heightとget−pm−wi
dthは物理的マシン・インターフェースによって与え
られる。仮想プロセッサの絶対アドレシングは、cre
ate−3D−meshだけ戻したアレーへの単純なア
レー参照である。
【0114】create−vpプロシージャは、ge
t−ppが戻した物理的プロセッサ上で走る新しいVP
を生成する。トポロジーが生成されると、現在のVPか
ら離れて自己相対アドレシング・プロシージャを構築す
ることが可能である。例えば、トポロジーにおいて1デ
ィメンジョン上方に移動する上VPプロシージャを定義
することができる。
【0115】 (define(up−VP) (let((address(vp−address(current ly−virtual−processor)))) (array−ref 3D−mesh(vector−ref address 0)))) 1.適当な物理的プロセッサにマッピングされる仮想プ
ロセッサの組を生成する。
【0116】2.仮想トポロジーにおけるアドレスを各
VPに関連づける。
【0117】3.仮想トポロジーにおいて絶対アドレシ
ングのために用いるデータ構造に仮想プロセッサを格納
し、その構造上に適切なアクセスルーチンを定義する。
【0118】4.自己相対アドレシングのプロシージャ
を定義する。
【0119】<スレッド・コントローラ>スレッド・コ
ントローラは、仮想プロセッサによる、物理的プロセッ
サやスレッドなど、他のシステム要素とのやり取りを扱
う。スレッド・コントローラの最も重要な機能は、スレ
ッドの状態遷移を扱うことである。スレッドが、その状
態遷移によって、現在その上でランしている仮想プロセ
ッサを生じた場合には、必ずスレッド・コントローラは
スレッド・ポリシー・マネージャをコールし、次にどの
スレッドをランするべきかを決める。
【0120】スティングのスレッド・コントローラを実
現する場合、いくつかの興味深い問題が明らかになる。
中心的な状態遷移プロシージャは図9および図10に示
す。これらのプロシージャで見られるTCBでの操作
は、ユーザ・アプリケーションでは利用できない。スレ
ッド・コントローラはスティングの中に書かれているの
で、TCプロシージャに対するすべての同期コールは通
常のプロシージャ・コールとして扱われる。従って、現
在のスレッドでランしているプロシージャが用いる活性
レジスタは、コントローラへのエントリのとき、スレッ
ドのTCB内に自動的に退避される。
【0121】プロシージャstart−context
−switch(図8)は、その引数として、現在のス
レッド(すなわち、TCに入ったスレッド)に対する望
ましい次の状態をとる。プリエンプションは最初にディ
スエーブルされる。次に、新しいスレッド(あるいはT
CB)が、プロシージャtpm−get−next−t
hreadによって復帰される。
【0122】ランできるスレッドが無い場合には、プロ
シージャは偽(false)を戻す。この場合、現在の
スレッドは再度ランされるか(レディー状態にあるとし
て)、あるいはプロシージャtpm−vp−idle
が、現在のVPを引数としてコールされる。プロシージ
ャtmp−vp−idleは種々の簿記操作を行うこと
ができ、また、その物理的プロセッサに他のVPに切り
換えるようリクエストすることができる。
【0123】次のオブジェクトが現在のTCBである場
合、動作は一切行われず、現在のスレッドが直ちに再開
される。戻されたオブジェクトが他のTCBの場合に
は、その状態がランに設定され、VPフィールドは現在
のVPに設定される。そして、現在のTCBは(その状
態がデッドの場合)TCBプール内でリサイクルされる
か、またはそのレジスタが退避され、そして新しいTC
Bの状態が、プロセッサ・レジスタに復元される。
【0124】戻されたオブジェクトが、実行コンテクス
トを持たないスレッドの場合には、TCBがそれに対し
て割り当てられる。このTCBは、next−stat
enoフィールドがデッドの場合には現在のTCBとな
る。あるいはVPローカル・プールまたはグローバル・
プールから割り当てられるTCBとなる。スレッドは、
基本プロシージャstart−new−tcbを用いて
実行を開始する。このスレッドは、その実行コンテクス
トとして新しいTCBを用い、プロシージャstart
−new−thread(図10参照)を応用する。
【0125】finish−context−swit
chのコード(図9)は、start−context
−switchが復帰させたスレッドによって実行され
る。その目的は、新しいスレッドのVPフィールドを設
定するためにスイッチ・アウトされたスレッド(このプ
ロシージャ内で以前にコールされている)が保持するロ
ックを解放し、適切であるなら以前のものをレディー待
ち行列に組み入れ、プリエンプションタイムを再設定す
る。新しいスレッドがVP上に設定された後でのみ以前
のものを待ち行列に組み入れることにより、コントロー
ラは、状態遷移を起させることと、スレッドをVPのレ
ディー待ち行列に組み入れることとの間の競合状態を排
除する。プロシージャtmp−enqueue−rea
dy−threadとtmp−enqueue−sus
pended−threadは、スレッド・ポリシー・
マネージャによって実現される。
【0126】start−new−threadのコー
ドを図10に示す。サンクEt を有するスレッド・オブ
ジェクトは、それに対してTCBが割り当てられると、
評価を開始でき、そしてデフォルト・エラー・ハンドラ
ーおよび適当なクリンアップ・コードと関連するように
なる。Et から出るためのスロー(start−new
−threadが設定するキャッチポイント)はスレッ
ド・スタックに適切に巻き戻させ、それによってスレッ
ドが保持するロックなどの資源が適切に解放されるよう
にする。Et の評価に続く退出のコードはスレッドのス
タックとヒープをガーベッジ・コレクションし、Et
生成した値をスレッド状態の一部として格納し、この値
を待っているスレッドをすべて目覚めさせ、状態遷移プ
ロシージャに対するテイル・リカーシブ・コールに、ラ
ンすべき新しいスレッドを選択させる。Et はダイナミ
ック・ワインド・フォーム内に包まれているので、スレ
ッドが異常終了した場合でも、スレッドの記憶領域がガ
ーベッジ・コレクションされることが保証される。
【0127】ガーベッジ・コレクションは、スレッドの
ウエイターが起される前に行われなければならない。そ
れは、スレッド(スレッドのサンクが復帰させたオブジ
ェクトを含む)より長生きであって、ローカル・ヒープ
を含んでいたオブジェクトは他の活性ヒープに移転させ
る必要があるためである。これが行われないと、他のス
レッドが、新たに終了したスレッドの記憶領域に対する
参照を得ることになるからである。確定したスレッドの
記憶領域は他のスレッドに割り当てられるので、これは
明らかにエラーとなる。
【0128】<スレッド・ポリシー・マネージャ>各仮
想プロセッサはスレッド・ポリシー・マネージャを有し
ている。スレッド・ポリシー・マネージャは、仮想プロ
セッサ上でのスレッドのスケジューリングおよび移行に
関するすべてのポリシーの決定を行う。スレッド・コン
トローラはスレッド・ポリシー・マネージャの依頼者で
あり、ユーザのコードはそれをアクセスできない。スレ
ッド・コントローラは、次のことに関連して決定を行う
必要がある場合には必ずスレッド・ポリシー・マネージ
ャをコールする。すなわち、スレッドの仮想プロセッサ
への初期マッピングと、現在のスレッドがなんらかの理
由で仮想プロセッサを解放したとき、次に仮想プロセッ
サはどのスレッドをランさせるべきかということと、い
つ、どのスレッドを仮想プロセッサに、あるいは仮想プ
ロセッサから移転させるかということである。
【0129】すべての仮想プロセッサは同一のスレッド
・コントローラを有しているが、各仮想プロセッサは異
なるポリシー・マネージャを備えることができる。この
ことは、各プロセッサが、必要なスケジューリングがさ
まざまに異なるサブシステムを制御するというリアルタ
イム・アプリケーションにとって特に重要である。
【0130】スレッド・ポリシー・マネージャはスレッ
ド・コントローラに対してよく定義されたインターフェ
ースを提供する。スレッド・ポリシー・マネージャが決
定を行うために用いるデータ構造は、スレッド・ポリシ
ー・マネージャにとって完全にプライベートなものとな
っている。それらは特定のスレッド・ポリシー・マネー
ジャに対してローカルとしたり、あるいは種々のスレッ
ド・ポリシー・マネージャが共有するようにでき、ま
た、それらの組み合せとすることもできる。しかし、シ
ステムの他の部分は一切利用できない。従って、スレッ
ド・ポリシー・マネージャは、異なる仮想マシンに対し
て異なる振舞を行うようにカスタマイズすることができ
る。その結果、ユーザは、ランさせるプログラムの種類
に応じてポリシーの決定をカスタマイズすることができ
る。
【0131】VPはそれぞれ異なるスレッド・ポリシー
・マネージャを備えることができるので、アプリケーシ
ョンによって生成された異なるグループのスレッドは、
異なるスケジューリング方式の対象とすることができ
る。仮想マシンあるいは仮想プロセッサは異なるスケジ
ューリング・プロトコルあるいは異なるスケジューリン
グ・ポリシーを扱うよう調整することができる。
【0132】スティングのスレッド・コントローラは、
スレッドの状態遷移プロシージャを定義するが、先験的
なスケジューリング・ポリシーあるいは先験的な負荷平
衡・ポリシーは定義しない。これらのポリシーはアプリ
ケーションに依存する場合がある。いくつかのデフォル
ト・ポリシーがスティングの全実行時間環境の一部とし
て与えられるが、ユーザは自身のポリシーを自由に書く
ことができる。事実、図3に示すように、各仮想プロセ
ッサ16はそれ自身のスレッド・ポリシー・マネージャ
(TPM)19を有している。従って、与えられた仮想
マシン内の異なるVPは異なるポリシーを実現できる。
TPM19はスレッドのスケジューリング、プロセッサ
/スレッドのマッピング、ならびにスレッドの移行を扱
う。
【0133】アプリケーションを個別のスケジューリン
グ・グループに分けられるということは、長寿型の並列
(あるいは会話型)プログラムにとって重要である。I
/Oに関連したプロシージャを実行するスレッドは、計
算に関連したルーチンを実行するスレッドとは異なるス
ケジューリングを必要とする。リアルタイムの制約を持
つアプリケーションは、単純なFIFOスケジューリン
グ・ポリシーのみを必要とするものとは異なるスケジュ
ーリング・プロトコルを用いて実現されるべきである。
【0134】ツリー構造の並列プログラムは、LIFO
にもとづくスケジューラを用いることによって、もっと
も良好に動作しよう。マスタ/スレーブ・アルゴリズム
あるいはワーカー・ファーム・アルゴリズムをランさせ
るアプリケーションは、公正さのためにラウンド・ロビ
ン・プリエンプション・スケジューラを用いることによ
って、より良好に動作しよう。これらのアプリケーショ
ンはすべて、大きいプログラム構造体あるいは大きいプ
ログラム環境の構成要素であるから、これらのアプリケ
ーションを異なるポリシー・マネージャによって評価す
ることで得られる柔軟性は重要である。同一の仮想マシ
ン上で評価するスレッドの集まりを独立に実行する、個
別のアプリケーションは存在し得る。さらに、各個別の
スケジューラは、異なる性能特性を有し、そして異なる
形で実現されたスレッド・ポリシー・マネージャを有す
ることができる。
【0135】本発明は、柔軟なフレームワークの提供を
探究するものである。そしてこの柔軟なフレームワーク
は、スレッド・コントローラ自身に対する変更を行うこ
となく、ユーザに対して明らかに異なるスケジューリン
グ方式を組み入れることができるものである。そのた
め、すべてのTPMは、その実現において制約は一切課
されていないが、同一のインターフェースに従わなけれ
ばならない。以下に示すインターフェースは、ランすべ
き新しいスレッドを選択し、評価中のスレッドを待ち行
列に挿入し、スレッドの優先順位を設定し、そしてスレ
ッドを移行させるためのオペレーションを提供する。こ
れらのプロシージャはTCが排他的に用いるためのもの
である。一般に、ユーザ・アプリケーションは、スレッ
ド・ポリシー・マネージャとスレッド・コントローラと
のインターフェースを承知している必要はない。
【0136】(tpm−get−next−threa
d vp)は次にvp上でランすべきレディー状態のス
レッドを戻す。
【0137】(tpm−enqueue−ready−
thread vp obj)は、スレッドあるいはT
CBのいずれかであろうobjをvpに関連するTPM
のレディー待ち行列に挿入する。
【0138】(tpm−priority prior
ity)および(tmp−quantum quant
um)は、それぞれの引数が有効な優先順位か、あるい
は有効なクオンタムかを確認するガードプロシージャで
ある。
【0139】(tpm−allocate−vp th
read)はthreadをvpに割り当てる。vpが
偽の場合には、threadはTPMによって確定され
る仮想プロセッサに割り当てられる。
【0140】(tmp−vp−idle vp)は、v
p上に評価を行っているスレッドが無い場合、スレッド
・マネージャによってコールされる。このプロシージャ
はスレッドを他の仮想プロセッサから移行させたり、簿
記を行ったり、他のVPに対するプロセッサ・スイッチ
自身を持つために物理的プロセッサをコールしたりする
ことができる。
【0141】(tpm−enqueue−suspen
d up−thread)は、vpの保留待ち行列上の
threadを保留する。
【0142】TPMは、評価中のスレッドに対するスケ
ジューリングの順序を決定する以外に、負荷平衡の2つ
の基本的決定を行う。(1)新しく生成されたスレッド
を走らせるべきVPを選択する。(2)VP上のどのス
レッドを移行できるかを決め、他のVPからどのスレッ
ドを移行させるかを決める。
【0143】最初の決定は、初期の負荷平衡を扱うため
に重要である。第2の決定は、動的負荷平衡・プロトコ
ルをサポートするために重要である。新しく評価中のス
レッドの最初の配置の決定は、しばしば現在評価中のス
レッドの移行を決めるために用いられる優先順位とは異
なる優先順位にもとづいて行われる。TPMインターフ
ェースはこの区別を保存する。
【0144】スケジューリング・ポリシーはいくつかの
重要な事柄に従って分類できる。
【0145】ローカリティ:このシステム内に単一のグ
ローバル待ち行列があるか、あるいは各TPMはそれ自
身の待ち行列を持っているか? 状態:スレッドはそれらの現在の状態にもとづいて区別
されているか・例えば、あるアプリケーションは、すべ
てのスレッドが、それらの現在の状態に関係無く単一の
待ち行列を占めるという実現法を選択するかもしれな
い。あるいは、スレッドが評価中か、スケジュールされ
たか、保留されているかなどにもとづいて、スレッドを
異なる待ち行列に分類することを選択するかもしれな
い。
【0146】順序付け:待ち行列は、FIFO、LIF
O、ラウンド・ロビン、優先順位、あるいはリアルタイ
ムの構造体として(他のものの中で)実現されているか
? 直列化:アプリケーションはどのようなロッキング構造
を種々のポリシー・マネージャの待ち行列に課すか。
【0147】この分類でどの選択肢を選ぶかによって、
結果としての性能特性に差が生じる。例えば、評価中の
スレッド(すなわち、TCBを有するスレッド)をスケ
ジュールされたスレッドから区別するグラニュラリティ
構造体を適合させ、そしてスケジュールされたスレッド
のみを移行させることができるという制約を課した場
合、評価中のスレッドの待ち行列をアクセスするのにロ
ックは不要となる。この待ち行列は、それが生成された
VPに対してローカルである。しかし、スケジュールさ
れたスレッドを保持している待ち行列は、他のVP上の
TPMによる移行のターゲットであるから、ロックされ
なければならない。この種のスケジューリング方式は、
動的負荷平衡が問題ではない場合には、有用である。従
って、多数の長寿命の、非ブロッキング・スレッド(継
続時間はほぼ同じ)が存在するときは、ほとんどのVP
は、それら自身のローカル・レディー待ち行列上のスレ
ッドの実行に、ほとんどの時間、ビジーとなる。従っ
て、このようなアプリケーションにおけるこの待ち行列
上のロックを除去することは有益である。一方、継続時
間が変動するスレッドを発生するアプリケーションは、
スケジュールされたスレッドおよび評価中のスレッドの
両方の移行が可能なTPMと共に用いたとき、ラン可能
なレディー待ち行列をロックすることに伴ってコストが
かかるが、より高いパフォーマンスを示す。
【0148】スレッド・ポリシー・マネージャが新しい
スレッドを実行する必要があるときは常に、グローバル
待ち行列はスレッド・ポリシー・マネージャ間の競合を
意味する。しかし、このような仕組にすると、多くの並
列アルゴリズムの実現において有用である。例えば、マ
スタ/スレーブ(あるいはワーカー・ファーム)プログ
ラムでは、マスタに最初にスレッドのプールを生成す
る。これらのスレッドは、それら自身はいかなる新しい
スレッドも生まない、長寿命の構造体である。これらは
一度VP上でランすれば、滅多にブロックすることはな
い。従って、このようなスレッドを実行しているTPM
は、ローカル・スレッド待ち行列を維持することのオー
バーヘッドをサポートする必要はない。しかし、ローカ
ル待ち行列は、プロセスの構造がツリーあるいはグラフ
の形をとる結果、並列プログラムの実現においては有用
である。これらの待ち行列は、仮想プロセッサの組にお
いて公正にスレッドをロード・バランスするために、こ
のようなアプリケーションで用いることができる。
【0149】<メッセージ伝達抽象体>メッセージ伝達
は分離メモリ・アーキテクチャにおいて効率の良い通信
メカニズムでなければならない。特に、グラニュラリテ
ィの粗い並列アプリケーション、あるいは既知の通信パ
ターンを有する並列アプリケーションに対してそうであ
る。ポートは、分離メモリ・アーキテクチャ上で共有メ
モリを実現することのオーバーヘッドを最小限のものと
するためにスティング内に設けられたデータ抽象体であ
る。ファーストクラスのプロシージャおよびポートは、
このコンテクストにおいて共同作業を示す。
【0150】スティングは、メッセージ伝達抽象体を共
有メモリ環境において統合することを可能とする。ポー
トはファーストクラスのデータ・オブジェクトであり、
他のスレッドから送られるメッセージに対するレセプタ
クルとして働く。スティングは共有仮想メモリ・モデル
を用いるので、いかなる複合データ構造(閉包を含む)
でもポートを通じてやり取りできる。この柔軟性のた
め、スティングのアプリケーションはユーザ・レベルの
メッセージ伝達プロトコルを明瞭な形で実現でき、そし
て単一化した環境において共有メモリとメッセージ伝達
の最も優れた長所を結合することが可能となる。
【0151】ポートはファーストクラスのデータ構造で
ある。ポートに対しては2つの基本的オペレーションが
ある。
【0152】1.(put obj port)は、o
bjをportにコピーする。この操作は送り手と非同
期である。
【0153】2.(get port)は、port内
の最初のメッセージを除去し、portが空の場合には
ブロックする。
【0154】ポートPから読み出したオブジェクトは、
Pに書き込まれたオブジェクトのコピーである。このコ
ピーは浅いコピーである。すなわち、オブジェクトの最
上位の構造体のみがコピーされており、下位の構造体は
共有されている。これらのポートは、共有メモリが不十
分な場合に用いるよう設計されているので、意味規則を
コピーすることで設計されている。putの標準バージ
ョンはシャローコピーを行うが、ディープコピーを行う
バージョンもある。そのバージョンは、最上位のオブジ
ェクトをコピーするだけでなく、下位の構造体もすべて
コピーする。
【0155】例えば、浅いコピーを用いてメッセージ内
の閉包を送る場合、閉包のコピーを構築する。しかし、
閉包が定義する環境内で束ねられたオブジェクトへの参
照は保存する。使用するコピー・メカニズムの選択は、
明らかに背後の物理的アーキテクチャとアプリケーショ
ンの分野の影響を受ける。スティング実現が存在する特
定の物理的サブストレートに適合させることのできる一
連のメッセージ伝達実現が存在する。
【0156】従って、つぎの表現の評価により、 (put(lambda()E)port) プロシージャ(lambda()E)の閉包がport
へ送出される。port上でレシーバが次のように定義
されているなら、 (define(receiver port) (let((msg(get port))) (fork−thread(msg)(current−vp)) (receiver))) 送出されたプロシージャはこのレシーバの仮想プロセッ
サ上で評価される。レシーバは、メッセージを評価する
ために新しいスレッドを生成することによって、古いリ
クエストの処理と並行して新しいリクエストを受け入れ
ることができる。
【0157】このスタイルの通信は“アクティブ・メッ
セージ”と呼ばれている。それは、メッセージを受け取
ったとき行うべき動作が、基本のシステムの一部として
コード化されておらず、メッセージそれ自身によって決
められているからである。仮想プロセッサとスレッドの
インターフェースは、メッセージ通信をサポートするた
めにいかなる変更も必要としないので、このようなモデ
ルによって極めて大きい柔軟性と単純性が得られる。ス
ティングの設計における2つのことが、この機能の実現
にとって重要である。(1)オブジェクトが共有仮想メ
モリに存在するため、すべてのオブジェクト(他のオブ
ジェクトに対するレファランスを有しているオブジェク
ト、例えば閉包を含む)は仮想プロセッサ間で自由に送
信できる。(2)ファーストクラスのプロシージャは、
ユーザが定義する複雑なメッセージ・ハンドラーの構築
を可能とする。これらのハンドラーはいずれかの仮想プ
ロセッサ上の分離したスレッド内で実行できる。分離メ
モリ・マシンでは、オブジェクトは分散共有仮想メモリ
に存在することになろう。説明のため、上述の例で、E
をデータベースの複雑な問い合わせとする。このデータ
ベースが存在するプロセッサ上でレシーバが例示された
とすると、このような問い合わせは、データベース自身
の、コストのかかる移行を伴わない。問い合わせは、デ
ータベースが存在するプロセッサに直接コピーされるの
で、通信のコストが低減される。データベースそれ自身
は問い合わせを実行するプロセッサに移行する必要がな
い。より伝統的なRPCスタイルの通信ではなくデータ
にプロシージャを送るという能力により、いくつかの点
で重要なパフォーマンスおよび表現性の向上が得られる
可能性がある。
【0158】ファーストクラスのプロシージャおよびラ
イトウエイトのスレッドは、アクティブ・メッセージに
おいて、魅力的な高レベルの通信抽象体を伝達する。こ
れらの抽象体を利用せずにアクティブ・メッセージをサ
ポートするシステムでは、この機能は典型的には低レベ
ル・サポート・プロトコルによって実現される。ファー
ストクラスのプロシージャはアクティブ・メッセージを
平凡に実現することを可能とする。アクティブ・メッセ
ージはポートに送られるプロシージャである。ファース
トクラスのポートは分散計算環境においても明確で重要
な効用を有し、そして従来のPRCより簡単で、かつ清
潔なプログラミング・モデルの実現を可能とする。
【0159】<メモリ管理>スティングは共有仮想メモ
リ・モデルを用いる。分散メモリ・プラットフォーム上
ではスティングは分散共有仮想メモリ・サブストレート
上で構築されなければならない。従って、参照の意味
は、参照がどこで発生されているか、あるいはオブジェ
クトが物理的にどこにあるか、には依存しない。
【0160】<記憶機構>スティングでは各TCB32
に関連して3つの記憶領域がある(図5)。第1はスタ
ック31であり、スレッドによって生成されたオブジェ
クトの割り当てに用いられる。このスレッドの寿命は、
それを生成したものの動的な範囲を越えない。より正確
には、スタック上に割り当てられたオブジェクトは、現
在の(あるいは前の)スタック・フレームに割り当てら
れた他のオブジェクト、あるいはヒープに割り当てられ
た他のオブジェクトしか参照できない。スタックが割り
当てられたオブジェクトはヒープ内のオブジェクトを参
照することができる。なぜなら、そのスタックに関連す
るスレッドは、ヒープ33がガーベッジ・コレクション
される間、保留となるからである。スタックに含まれて
いる参照情報は、ガーベッジ・コレクタによってトレー
スしたとされるルートの一部である。
【0161】スレッドにとってプライベートなヒープ、
すなわちローカル・ヒープ33は、割り当てられた非共
有オブジェクトに対して用いられる。このオブジェクト
は、その寿命が、オブジェクトを生成したプロシージャ
の寿命を越える可能性がある。越える可能性があるとし
たのは、スキームやMLなどのプログラミング言語では
コンパイラがオブジェクトの寿命を常に決めることがで
きるとは限らないからである。さらに、未知のプロシー
ジャに対するコールが可能な言語においては、オブジェ
クトの寿命が決められない場合もある。プライベート・
ヒープに含まれている参照情報は同じプライベート・ヒ
ープ内の他のオブジェクト、あるいは共有ヒープ、すな
わちグローバル・ヒープ35を示すことができるが、ス
タック31内のオブジェクトを示すことはできない。こ
のスタック内の参照情報はプライベート・ヒープ内のオ
ブジェクトを示すことができるが、共有ヒープ内の参照
情報はこれらのオブジェクトを示せない。プライベート
・ヒープに割り当てられたデータは、単一の、制御のス
レッドによって排他的に用いられるので、プライベート
・ヒープによってより高いローカリティが実現する。複
数のスレッド間にさしはさまれた割り当てがないという
ことは、ヒープ内で互いに接近したオブジェクトは、論
理的に互いに関連している可能性が高いことを意味す
る。
【0162】他のスレッドは、スレッドのスタックある
いはローカル・ヒープ内に含まれているオブジェクトを
アクセスできない。従って、スレッドのスタックおよび
ローカル・ヒープは共に、同期化あるいはメモリのコヒ
ーレンシーを考慮することなく、プロセッサ上のローカ
ル・メモリにおいて実現することができる。スレッドの
ローカル・ヒープは実際には、世代的に組織した一連の
ヒープである。記憶領域の割り当ては常に、他の世代的
コレクタと同様に、最も若い世代において行われる。オ
ブジェクトは、年齢が高くなるにつれて、古い世代に移
動される。ローカル・ヒープのガーベッジ・コレクショ
ンはすべてスレッドそれ自身によって行われる。ガーベ
ッジ・コレクションをサポートするほとんどのスレッド
・システムでは、システム内のスレッドはすべて、ガー
ベッジ・コレクションの間は保留されなければならな
い。それに対して、スティングのスレッドは、他のスレ
ッドと独立して、そして非同期的にそれらのローカル・
ヒープをガーベッジ・コレクションする。従って、他の
スレッドは、特定のスレッドがそのローカル・ヒープを
コレクションしている間、計算を続けることができる。
その結果、より優れた負荷平衡と高いスループットが得
られる。このガーベッジ・コレクションのストラテジィ
の第2の長所は、ローカル・ヒープのガーベッジ・コレ
クションにかかるコストが、システム内のすべてのスレ
ッドに課されるのではなく、記憶領域を割り当てるスレ
ッドにのみ課されるという点にある。
【0163】スティングは、関連するスレッドの集まり
を制御するための手段として“スレッド・グループ”を
与える。子のスレッドは、それが新しいグループの一部
として生成されたのでない限り、その親と同一のグルー
プに属する。スレッド・グループは、デバッグおよびモ
ニタのためのオペレーション(例えば、与えられたグル
ープ内のすべてのスレッドのリストアップ、すべてのグ
ループのリストアップ、プロファイリング、系統の報告
など)と共に、通常のスレッドのオペレーション(例え
ば、終了、保留など)を与える。さらに、スレッド・グ
ループはまた、そのメンバーがすべてアクセスできる
“共有ヒープ”を含んでいる。
【0164】スレッド・グループの共有ヒープ、すなわ
ちグローバル・ヒープ35は、スレッド・グループが生
成されたとき割り当てられる。ローカル・ヒープのよう
な共有ヒープは実際には、世代的に組織された一連のヒ
ープである。共有ヒープ内の参照情報は共有ヒープ内の
オブジェクトしか示せない。これは、共有オブジェクト
から参照されるオブジェクトはすべて共有オブジェクト
であり、従って、共有ヒープ内に存在しなければならな
いからである。この共有ヒープに対する制約は、(a)
共有ヒープ内にあるか、あるいは(b)ローカル・ヒー
プ内に割り当てられていて、共有ヒープ内にガーベッジ
・コレクションされているオブジェクトを、共有ヒープ
に記憶された参照情報が指示することを保証することに
よって、実施される。すなわち、参照されたオブジェク
トから到達可能なオブジェクトのグラフは、共有ヒープ
内にコピー、または配置されなければならない。このメ
モリ・モデルのオーバーヘッドは、ローカル・ヒープ上
に割り当てられたオブジェクトに対する参照情報がどれ
くらい頻繁にエスケープするかによって決まる。経験に
よれば、ファイン・グレインド並列プログラムを実現す
る場合、ローカル・ヒープに割り当てられたオブジェク
トはほとんど、関連するスレッドに対してローカルであ
り続け、共有されない。スレッド間で頻繁に共有される
オブジェクトは、言語抽象体あるいはコンパイル時の分
析によって容易に検出される。
【0165】要約すると、あるスレッドに関連するスレ
ッド領域間の参照規律は次のようになる。すなわち、
(1)スタック内の参照情報は、その現在のあるいは以
前のスタック・フレーム、またはローカル・ヒープ、ま
たは共有ヒープ内のオブジェクトを示し、(2)ローカ
ル・ヒープ内の参照情報は、そのヒープ上のオブジェク
トあるいはなんらかの共有ヒープに割り当てられたオブ
ジェクトを示し、そして(3)共有ヒープ内の参照情報
は、その共有ヒープ(あるいは、他のなんらかの共有ヒ
ープ)に割り当てられたオブジェクトを示す。
【0166】ローカル・ヒープのように、グローバル・
ヒープは世代的に組織されているが、グローバル・ヒー
プのガーベッジ・コレクションは、ローカル・ヒープに
対するものより複雑である。それは、多数の異なるスレ
ッドが、グローバル・ヒープ内のオブジェクトを同時に
アクセスする場合があるからである。なお、その結果、
グローバル・ヒープの割り当てにはヒープのロックが必
要である。
【0167】グローバル・ヒープをガーベッジ・コレク
ションするために、関連するスレッド・グループ内のす
べてのスレッド(そして、その下位のもの)は保留され
る。それは、これらのスレッドはすべてグローバル・ヒ
ープ内のデータをアクセスできるからである。しかし、
システム内の他のスレッド、すなわち、ガーベッジ・コ
レクションされるヒープに関連するグループ内にないも
のは、ガーベッジ・コレクションと無関係に実行を継続
する。
【0168】各グローバル・ヒープは、それに関連し、
そこに到来する参照情報を有している。これらの組は、
領域境界を横断する参照情報の記憶に対するチェックに
よって、維持される。グローバル・ヒープに関連するス
レッドが保留された後、ガーベッジ・コレクタは到来参
照情報の組をガーベッジ・コレクションのためのルート
として用いる。到来参照情報の組から到達できるオブジ
ェクトはすべて新しいヒープにコピーされる。ガーベッ
ジ・コレクションが終了すると、グローバル・ヒープに
関連したスレッドは再開される。
【0169】<抽象物理的マシンおよび抽象物理的プロ
セッサ>このオペレーティング・システムの最も低レベ
ルの抽象体は、抽象物理的マシン(APM)と呼ばれる
マイクロ・カーネルである。
【0170】APMはスティング・ソフトウエア・アー
キテクチャにおいて3つの重要な役割を果たす。
【0171】1.複数の仮想マシンをサポートする安全
で効率的な基礎を提供する。
【0172】2.システム内の他のすべての要素を、ハ
ードウエアに依存する特徴および特異性から分離する。
【0173】3.システムの物理的ハードウエアに対す
るアクセスを制御する。
【0174】APMはルート仮想マシンと呼ばれる特別
の仮想マシン内で実現される。このマシンは、仮想アド
レス空間、仮想プロセッサ、ならびにスレッドを含む、
他のいずれの仮想マシンでも利用できる機能に対するア
クセス手段を有している。さらに、ルート仮想マシン
は、抽象物理的プロセッサ、デバイス・ドライバ、なら
びに仮想メモリ・マネージャに対するアクセス手段を有
している。抽象物理的マシンは仮想マシンによって構成
されており、その結果、いくつかの重要な表現性が得ら
れる。ヘビーウエイトのスレッドは一切無い。すべての
スレッドはライトウエイトである。システム・コールを
実現するカーネル・スレッドあるいはスタックは無い。
すべてのシステム・コールは、システム・コールを作成
するスレッドの実行コンテクストを用いて扱われる。こ
のことは、スキームが安全な言語であり(すなわち、ダ
ングリング・ポインタ、アドレスとデータ間の自由強制
などは不可能である)、そしてAPMの部分はシステム
内のすべての仮想マシンにマッピングされているため、
可能となっている。ユーザのスレッドが利用できる非同
期のプログラミング構築体は、APM内のスレッドも利
用できる。APMに関連したスレッドは、仮想マシン内
の他のすべてのスレッドと同様に制御することができ
る。カーネル操作の実行をブロックするスレッドは、そ
のことを、それらスレッドの仮想プロセッサに通知す
る。それによってVPは他のなんらかのスレッドを自由
に実行できる。これはスレッド間の通信およびI/Oの
両方の場合に行われる。スティングは、例えば、スケジ
ューラの起動、あるいはPsycheの仮想プロセッサ
抽象体と同じ能力を提供するように、非ブロッキング・
カーネル・コールを処理する。
【0175】仮想マシンはAPMによって生成され、そ
して破壊される。新しい仮想マシンの生成には以下のこ
とが伴う。
【0176】1.新しい仮想アドレス空間を生成する。
【0177】2.このアドレス空間にAPMカーネルを
マッピングする。
【0178】3.この仮想マッピング内にルート仮想プ
ロセッサを生成する。
【0179】4.このマッピングに抽象物理的プロセッ
サを割り当てる。
【0180】5.抽象物理的プロセッサ上でランさせる
ために上記ルート仮想プロセッサをスケジュールする。
【0181】仮想マシンの破壊には、そのマシン上でラ
ンしているすべてのスレッドを終了させるための信号を
発生し、マシン内で実行しているスレッドがオープンし
たデバイスをすべてクローズし、そして最後に、このマ
シンに関連する仮想アドレス空間の割り当てを解除する
ことが伴う。
【0182】各プロセッサ抽象体12は仮想プロセッサ
・コントローラ(VPC)13と仮想プロセッサ・ポリ
シー・マネージャ(VPPM)15から成る。VPコン
トローラとVPポリシー・マネージャとの関係は、スレ
ッド・コントローラとスレッド・ポリシー・マネージャ
との関係と同種である、すなわちVPコントローラはV
Pポリシー・マネージャの依頼者である。VPコントロ
ーラがポリシーの決定を行うことが必要となった場合に
は必ず、VPコントローラはその決定を行うためにVP
ポリシー・マネージャをコールする。
【0183】物理的プロセッサはすべて同一のVPコン
トローラをランさせるが、それらは異なるVPポリシー
・マネージャをランさせることができる。その結果、マ
ルチプロセッサ・システムはシステムによる各物理的プ
ロセッサの利用をカスタマイズすることが可能となる。
また、システムは各物理的プロセッサ上で同じVPポリ
シー・マネージャをランさせることも可能である。
【0184】仮想マシンが抽象物理的プロセッサ上の仮
想プロセッサをスケジュールしようとする場合、仮想マ
シンはその物理的プロセッサ上の仮想プロセッサ・コン
トローラをコールする。同様に、仮想マシンが、抽象物
理的プロセッサから仮想プロセッサを除去しようとする
場合には、仮想マシンはその物理的プロセッサ上の仮想
プロセッサ・コントローラをコールする。各VPコント
ローラは、仮想プロセッサの状態変化を含め、その物理
的プロセッサにマッピングされた仮想プロセッサを管理
する。
【0185】VPポリシー・マネージャは、物理的プロ
セッサ上の仮想プロセッサのスケジューリングおよび移
行に係わるすべてのポリシーの決定を行う。この決定に
は3つのタイプがある。第1に、VPポリシー・マネー
ジャはVPからPPへのマッピングを決める。このマッ
ピングは2つの異なるタイミングで行われる。すなわ
ち、VPが最初にランされたときと、ブロックされてい
たVPが再びランされたときである。第2に、ポリシー
・マネージャは、PP上のVPをランさせる順番と期間
を決定する。最後に、VPポリシー・マネージャは、い
つVPをあるプロセッサから他のプロセッサに移動(移
行)させるべきかを決める。
【0186】これらの3つの決定によって、VPポリシ
ー・マネージャはマシン上のワーク・ロードのバランス
をとることができ、そして仮想マシンに関する物理的マ
シンの公正さに係わる性質を決めることができる。ま
た、物理的プロセッサが故障したとき、故障許容VMの
VPをどこに移動させるかを決めることができる。
【0187】スレッド・ポリシー・マネージャのように
VPはVPコントローラに対して良く定義されたインタ
ーフェースを提供する。VPポリシー・マネージャがそ
の決定を行うために用いるデータ構造はVPポリシー・
マネージャに対して完全にプライベートである。これら
のデータ構造は特定のVPポリシー・マネージャに対し
てローカルとできるか、またはVPポリシー・マネージ
ャの種々の場合において共有できるか、またはそれらの
組み合せとできる。しかし、システムの他の要素はそれ
らに対するアクセス手段を持たない。VPポリシー・マ
ネージャは、スティングの異なる場合に対して異なる振
舞をするようにカスタマイズすることができる。この機
能により、スティングを、リアルタイム・システムや、
会話型システムや、多量の計算を行うシステムなど、さ
まざまなオペレーテイング・システム環境に対して、カ
スタマイズすることが可能となる。
【0188】最後に、スレッド・ポリシー・マネージャ
はスレッド間の負荷平衡および公正さに係わっている
が、仮想プロセッサ・ポリシー・マネージャは、仮想マ
シン間および仮想プロセッサ間の負荷平衡および公正さ
に係わっている。
【0189】APM内の各物理的プロセッサは、仮想プ
ロセッサ・コントローラ(VPC)と仮想プロセッサ・
ポリシー・マネージャ(VPPM)を含んでいる。この
点で、物理的プロセッサは構造的に仮想プロセッサと同
一である。VPCは仮想プロセッサ上の状態変化に影響
を与える。スレッドのように、仮想プロセッサはラン、
レデイー、ブロック、あるいは終了のいずれかの状態を
とり得る。ラン状態のVPは物理的プロセッサ上で現在
実行されている。レディー状態のVPはランすることが
可能であるが、現在はランしていない。ブロック状態の
VPは、なんらかの外部イベント(例えばI/O)を待
っているスレッドを実行している。VPPMは物理的プ
ロセッサ上のVPのスケジューリングを行う。そのスケ
ジューリング・ポリシーはTPMが用いるものと同様で
ある。VPPMは良く定義されたインターフェースをV
Pコントローラに対して提供する。異なるスティングの
システムは異なるVPポリシー・マネージャを備えるこ
とができる。
【0190】<例外の扱い>同期した例外および割込は
スティングでは一様に扱われる。すべての例外には、例
外を扱うための1組の動作を実行するハンドラーが関連
している。ハンドラーはスレッド内で実行するプロシー
ジャである。プロセッサP上で生じた例外は、Pの現在
のスレッドのコンテクストを用いて実行する。スティン
グのマイクロ・カーネル内には特別の例外スタックは無
い。プロセッサP上である例外(例えば、無効命令、メ
モリ保護破壊など)が生じた場合、Pの現在のコンティ
ニュエーション(すなわち、プログラム・カウンタ、ヒ
ープ・フロンティア、スタックなど)がまず退避され
る。次に例外ディスパッチャーは例外のターゲットを見
つけるため、スレッドがランしている場合にはそれを中
断し、そしてハンドラーのコンティニュエーションおよ
び引数をターゲット・スレッドのスタック上にプッシュ
する。次に、ディスパッチャーは(a)現在のスレッド
を、単純にそれに復帰させることによって再開させる
か、(b)ターゲット・スレッドを再開させるか、ある
いは(c)このプロセッサ上の他のいずれかのスレッド
を再開させるためにスレッド・コントローラをコールす
るか、いずれかを選択する。ターゲット・スレッドが再
開された場合には、そのスレッドはそのスタックの最も
上のコンティニュエーションを実行する。これは例外ハ
ンドラーのコンティニュエーションである。
【0191】スティングにおけるこの例外処理手段はい
くつかの点で優れている。
【0192】1.この例外処理手段はプロシージャであ
るため、単にそれをコールするだけで例外を扱える。
【0193】2.例外は、実行コンテクストを受け取る
スレッドの実行コンテクストにおいて扱われる。
【0194】3.例外は現在のスレッドのコンテクスト
においてディスパッチされる。
【0195】4.一度ディスパッチされた例外はターゲ
ット・スレッドの現在のコンティニュエーションとな
り、そしてスレッドが再開されたとき自動的に実行され
る。
【0196】5.例外はターゲット・スレッドが再開さ
れたときのみ扱われる。
【0197】6.例外を扱うコードはスキームによっれ
書かれ、そしてそのコードはコンティニュエーションと
プロシージャを操作して所望の効果を達成する。
【0198】ファーストクラスのプロシージャとスレッ
ド、明白なコンティニュエーション、動的な記憶領域の
割り当て、ならびに均一なアドレシング・メカニズムは
すべてスティングの設計の中心的な特徴であり、その結
果、スティングはこの例外のモデルを与えることが可能
となっている。
【0199】同期した例外のターゲット・スレッドは常
に現在のスレッドである。非同期の例外、すなわち割り
込みはわずかに異なる形で扱われる。割り込みはどのス
レッド(現在実行中のスレッドではない)でも制御でき
るので、このような例外を扱うためには、ハンドラー
は、例外を直接処理するか、すなわち現在ランしている
スレッドを中断して例外を扱うか、あるいは新しいハン
ドラーを生成する必要がある。割込ハンドラーもスキー
ムのプロシージャであるため、ハンドラーを実行するた
めにスレッドを確立するか、あるいは現在のスレッドを
用いる場合、単に適当なスレッドの現在のコンティニュ
エーションを、ハンドラーをコールするように設定すれ
ばよい。スティングの例外ディスパッチャーのための疑
似コードを以下に示す。
【0200】 1:(define(exception−dispatchertype. args) 2: (save−current−continuation) 3: (let((target handler(get−target &handler type args))) 4: (cond((eq?target(current−thread )) 5: (apply handler args)) 6: (else 7: (signal target handler a rgs) 8: (case((exception−priorit y type)) 9: ((continue)(return)) 10: ((immediate)(switch−to −thread target)) 11; ((reschedule)(yield−pr ocessor))))))) ライン2では、現在のコンティニュエーションが現在の
スレッドのスタックに退避される。このコンティニュエ
ーションは、エスケープできず、そして一度だけコール
されるので、上記スタックに上記コンティニュエーショ
ンを退避できる。ライン3では、ディスパッチャーが、
例外の対象となるスレッドと、例外のタイプに対するハ
ンドラーとを見つける。ライン4では、例外のターゲッ
トが現在のスレッドであるかどうかがチェックされ、そ
うなら、例外コンティニュエーションはプッシュされな
い(ライン5)。ディスパッチャーはハンドラーをむし
ろ単純にその引数に適用する。ディスパッチャーはすで
に例外ターゲット(すなわち現在のスレッド)のコンテ
クストで走っているので、このことが有効である。例外
のターゲットが現在のスレッドでない場合には、ディス
パッチャーは例外をターゲット・スレッドに送る(ライ
ン7)。スレッドに信号を送ることはスレッドを中断
し、信号ハンドラーとその引数とを含むコンティニュエ
ーションをスレッドのスタックにプッシュすること、そ
して信号ハンドラーが実行されるようにするスレッドを
再開させることと等価である。ターゲット・スレッドに
信号を送った後、ハンドラーはプロセッサ上で次にどの
スレッドを走らせるかを決める(ライン8)。走らせる
のはそれ自身の場合もあり(ライン9)、あるいはター
ゲット・スレッド(ライン10)か、または最も優先順
位の高いスレッドの場合もある(ライン11)。
【0201】スティングの例外ハンドリング機能と他の
オペレーティング・システムにおけるものとは、もう1
つ重要な点で異なっている。例外を扱うスレッドは、シ
ステム内のユーザ・レベルのスレッドと違わないので
(例えば、それらは自身のスタックとヒープを持ってい
る)、また、例外ハンドラーは通常のファーストクラス
のプロシージャであるため、ハンドラーは記憶領域を自
由に割り当てることができる。ハンドラーによって生成
されたデータは、他のデータが復元されるのと同じ方法
で、ガーベッジ・コレクタによってリクレームされよ
う。例外ハンドリングのメカニズムと、より高レベルの
スティングの抽象体との間の均一性のため、デバイス・
ドライバを実現したとき、高い表現性および高い効率が
得られる。このことは、上記均一性が無い場合には、並
列言語あるいは並列オペレーティング・システムにおい
て実現しない。
【0202】ファーストクラスのプロシージャとスレッ
ド、明白なコンティニュエーション、動的な記憶領域の
割り当て、ならびに均一なアドレシング・メカニズムが
すべてスティングの設計の特徴であるため、スティング
はこの例外のモデルを与えることができる。
【0203】<並行パラダイム>以上、ソフトウエア・
アーキテクチャについて詳しく説明したが、以下におい
てはいくつかの広範は並行パラダイムについて説明し、
本発明のソフトウエア・アーキテクチャによってそれを
実現する。
【0204】結果としての並行プログラムでは、並行し
て実行する各プロセスは、複合データ構造(例えば、ア
レーあるいはリスト)の値に影響を与える。または各プ
ロセスは複合プロセスのグラフのメンバーである。プロ
セスの通信はこの結果の構造体またはグラフによる。そ
のcontributingプログラムがまだ評価中で
ある結果の要素にアクセスを試みる表現は、プログラム
が完了するまでブロックする。 フューチャーは、結果
としての並行アルゴリズムを実施するのに非常に適した
オペレーションの良い例である。MultiLispあ
るいはMul−Tの表現によって生成されたオブジェク
ト(フューチャーE)は、計算Eのためのスレッドを生
成する。そしてリターンされたオブジェクトはフューチ
ャーとして知られている。結果としてvを生じてEが終
了したとき、フューチャーが確定したと言う。フューチ
ャーにタッチする表現は、Eがまだ計算されている場合
にはブロックし、他方、フューチャーが確立した場合に
はvを与える。
【0205】図11に示す素朴なソーティング・プログ
ラムでは、フューチャーの各例は新しいスレッドの生成
を伴う。この振舞は望ましいものではない。それは、プ
ロセス・ツリーのレベルiで計算を行うフューチャーは
レベルi+1などにおいてその子に対して明らかなデー
タ依存性を有しているといった理由による。このプログ
ラムにおいてデータ依存性があった場合、プロセッサお
よび記憶装置の利用度が低下する結果となる。これは、
生成されたライトウエイトのプロセスの多くが、まだ未
評価のフューチャーのものとして他の値をリクエストす
るときブロックする必要があるか、または、例えば、小
さい素数を計算するプロセスの場合、それらを生成する
ために必要なコストに比べ、少量の計算を行うためであ
る。
【0206】スレッドの動的な状態は大きいオブジェク
ト(例えば、スタックおよびヒープ)から成るので、プ
ロセスのブロッキングが頻繁に生じる場合、あるいはプ
ロセスにグラニュラリティが小さすぎる場合、キャッシ
ュおよびページのローカリティについては妥協する。
【0207】タッチおよびフューチャーの意味規則は、
他のフューチャーGにタッチするフューチャーFは、G
がまだ確定していない場合、Gでブロックしなければな
らないということを命令する。TF およびTG をそれぞ
れFおよびGのスレッド表現とする。Gでのタッチ・オ
ペレーションのランタイム・ダイナミックスは、TBが
(a)遅延またはスケジュールされたとき、(b)評価
しているとき、(c)または確定したときのいずれかの
場合、TG に対するアクセスを伴う場合がある。最後の
ケースでは、これらのスレッド間で同期化は不要であ
る。ケース(b)の場合、TF はTG が完了するまでブ
ロックする必要がある。ケース(a)の場合、スティン
グでは重要な最適化を行う。これについては以下に説明
する。
【0208】TFは、TG内に閉じ込められた閉包(E
と呼ぶ)を、コンテクスト・スイッチをブロックし、強
制するより、むしろそれ自身のスタックトヒープとを用
いて評価することができる。実際、スティングでは、E
を通常のプロシージャとして扱い、Gのタッチを単純な
プロシージャ・コールとして扱う。この場合、TF がT
G を吸収すると言う。TF は、その他の場合には必然的
にブロックするという点でこの最適化は正しい。TF
動的なコンテクストを用いてEを適用することによっ
て、TF が動作するVPは、コンテクスト・スイッチを
実行するというオーバーヘッドを負わない。また、TF
のTCBが代りに用いられるので、TG に対してTCB
を割り当てる必要がない。
【0209】この最適化は、コールしているスレッドが
必ずしもブロックする必要がない場合に用いられたと
き、目立って異なった結果を導くのみとなる場合があ
る。例えば、TG がTF によるスペキュラティブ・コー
ルの要素であったとする。さらに、TG は分岐するが、
他のスペキュラティブ・スレッド(TH と呼ぶ)は分岐
しないとする。吸収が無い場合には、TG およびTH
共に別々のスレッド・コンテクストを生む。しかし、吸
収がある場合には、TF はTG を吸収することができ、
そして、TG がループするのでTF もループしよう。ス
レッドが吸収できるか、またはできない場合、ユーザは
スレッドの状態をパラメータ化して、TCに通知するこ
とができる。スティングはこのためのインターフェース
・プロシージャを提供する。
【0210】吸収のため、スティングはコンテクスト・
スイッチィングのオーバーヘッドを低減させ、そしてプ
ログラムにおいてプロセスが互いに強いデータ依存性を
示すとき、そのプログラムに対するプロセスのグラニュ
ラリティを増大させる。もちろん、オペレーションを最
も効果的なものにするため、スケジュールされたスレッ
ドが吸収された状態になり得るよう、スレッドのグラニ
ュラリティは十分に大きいものでなければならない。プ
ロセスのグラニュラリティが小さすぎる場合には、吸収
しているスレッドがそれらの値を要求できる前に、プロ
セッサは吸収され得る可能性のあるスレッドの評価を開
始しよう。
【0211】負荷にもとづくインライニングおよびレイ
ジーなタスク生成は、他の並列Lispシステムに応用
された2つの他の同種の最適化である。負荷にもとづく
インライニングでは、現在のシステムの負荷がある特定
のスレッシュホールドを越えた場合、スレッドはインラ
イン(すなわち、吸収)される。この最適化では、プロ
グラマの介入は不要であるだけでなく、ある種の条件の
もとでは、本来終了するはずのプログラムがデッドロッ
クあるいは長時間の停止状態になる場合がある。これは
インライニングの決定が撤回できないからである。従っ
てこの最適化では、タスクが、そのデータ依存性のため
にある順序で評価される必要があるとき、それとは異な
る特定の評価の順序をタスクに課す。スレッドの吸収
は、吸収されない場合にはスレッドがブロックするとき
のみ、そしてデータの依存性が保証されているときのみ
生じるので、この問題の影響を受けない。
【0212】レイジーなタスクの生成は、負荷にもとづ
くインライニングに係わる多くの問題を解決する。レイ
ジーなタスクの生成では、常にすべてのスレッドの評価
がインラインされるが、しかしプロセッサがアイドル状
態となったとき、このインライニング・オペレーション
を撤回可能とする。スレッドは実際に必要とされない限
り決して生成されない。この設計ではプログラマの介入
を必要とせず、本来デッドロックしないプログラムのデ
ッドロックを招かず、そして、実際に発生されるタスク
の数が低減される。
【0213】スレッドの吸収はレイジーなタスクと主に
2つの点で異なっている。(1)スレッドの吸収は、ア
プリケーションによって決まるスケジューリング・プロ
トコルが存在しても働く。レイジーなタスク生成はグロ
ーバルLIFOスケジュールと、インラインされたスレ
ッドを保持するための単一の待ち行列の存在とを仮定す
る。(2)レイジーなタスク生成は、1つのプロセッサ
に対して1つのグローバル・ヒープを用いる。レイジー
なタスクの生成では、タスクがスティールされたとき、
スレッド吸収の場合よりローカリティは低下する。第2
に、レイジーなタスク生成の場合のガーベッジ・コレク
ションでは、システム内のすべてのスレッドを停止させ
る必要がある(コレクタそれ自身が並列であっても)。
スレッドの吸収の場合にはこの制約はない。
【0214】他の例はマスタ・スレーブのパラダイムで
あり、これは並列プログラムを構成するためのポピュラ
ーな技術である。この技術では、発生されたプロセスの
コレクションは先験的に行われる。マスタ・プロセスは
いくつかのワーカー・プロセスを発生し、それらの結果
を結合する。プロセスの通信は典型的には共有並行デー
タ構造あるいは共有並行変数を通じて行われる。マスタ
・スレーブ・プログラムがしばしば、ストック・マルチ
プロセッサ・プラットフォーム上の結果の並列プログラ
ムより効率的である。それは、ワーカーが、それらの結
果を発行する場合を除いて、ほとんど互いに通信する必
要がないからである。そしてプロセスのグラニュラリテ
ィを調整でき、より高い性能が得られる。
【0215】スキームにおけるファーストクラスのタプ
ル空間を最適化して実現するためにスティングを用い
た。タプル空間は、同期化コンテント・アクセサブル・
メモリの抽象体として機能するオブジェクトである。タ
プル空間は、マスタ/スレーブにもとづく多数のアルゴ
リズムを具体化するための自然の選択である。
【0216】タプルはオブジェクトであり、タプル・オ
ペレーションはバインディング表現であって、ステート
メントではないので、ファーストクラスの指示可能なタ
プル空間の存在により、モジュール性および表現性がさ
らに向上する。望ましい実施例では、タプル空間は、同
期化したベクトル、待ち行列、ストリーム、セット、共
有変数、信号、あるいはバッグとして特殊化できる。タ
プル空間上で許可されたオペレーションは、それらの表
示において不変である。さらに、アプリケーションは必
要ならタプル空間の間の継承階級を指定できる。
【0217】プロセスは新しいタプルをタプル空間に読
み込んだり、除去したり、預けることができる。読み込
みオペレーションあるいは除去オペレーションにおける
タプル・引数は“テンプレート”と呼ばれ、“?”を前
に付けた変数を含むことができる。このような変数は
“フォーマル”と呼ばれ、マッチ・オペレーションの結
果としてバインディング値を獲得する。これらのフォー
マルによって獲得されたバインデイング値は、下位の表
現の評価において用いられる。従って、次のように書く
ことができる。
【0218】(get TS[?x] (put TS[(+x1])) これによって1つのタプルがTSから除去され、1だけ
インクリメントされ、そしてTSに再び預けられる。
【0219】この実施例ではまた、スレッド吸収も利用
して、タプル空間上で同期するグラニュラリティの細か
い並列プログラムの構築を可能とする。スレッドはタプ
ル内で真正な要素として用いられる。次の表現を実行す
るプロセスPを考える。
【0220】(rd TS[x1 x2]E) ここで、x1とx2は非フォーマルである。さらに、T
S内のタプルがオペレーション(spaun TS
[E1 2 ])の結果として預けられているとする。
このオペレーションはE1 とE2 を計算する2つのスレ
ッド(TE1 およびTE2 と呼ぶ)をスケジュールす
る。TE1 とTE2 が共に完了すると、結果としてのタ
プルは2つの確定したスレッドを含んでいる。マッチン
グ・プロシージャは、タプル内でスレッドに遭遇したと
き、thread−valueを適用する。このオペレ
ーションはそのスレッドの値を回収する。
【0221】しかし、Pが実行されるときTE1 がまだ
スケジュールされている場合には、Pはそれを自由に吸
収でき、その結果がx1に一致するときは確定する。一
致するものが存在しない場合には、Pは、スケジュール
された状態にあるかもしれないTE2 を残して、他のタ
プルのサーチへと進む。その後、他のプロセスがこの同
じタプルを調べることは可能であり、正当な理由がある
ならTE2 を吸収する。同様に、TE1 の結果がx1と
一致するなら、Pは次にTE2 を自由に吸収できる。T
1 またはTE2 のいずれかがすでに評価を行っている
場合には、Pは、1つ(または両方)のスレッドでブロ
ックするか、またはTS内で、他に一致する可能性のあ
るタプルを調べるかを選択する。タプル空間の意味規則
は、この点でこの実施例に対して制約を課さない。
【0222】スティングの、ファーストクラスのスレッ
ドとスレッド吸収との組み合せは、共有データ構造を用
いて、疑似要求によって駆動されるグラニュラリティの
細かい(結果)並列プログラムを書くことを可能とす
る。この意味で、スレッド・システムは、構造にもとづ
く同期化(例えば、タプル空間)とデータフロー・スタ
イルの同期化(例えば、フューチャー/タッチ)との間
の意味のある区別の最小化を試みる。
【0223】スペキュラティブ並列は重要なプログラミ
ング技術であるが、それを実現した際に生じるランタイ
ムのオーバーヘッドのために、しばしば効果的に用いる
ことができない。スペキュラティブ・プログラミング・
モデルをサポートするシステムに最も頻繁に係わる2つ
の特徴は、他のものより一層有望なタスクを奨励する能
力と、不要な計算を中止および再利用(そして、恐らく
取消し)する手段を有することである。
【0224】スティングは次のことによって、プログラ
マがスペキュラティブ・アプリケーションを書くことを
可能とする。
【0225】1.ユーザがスレッドの優先順位を明示的
にプログラムすることを可能とする。
【0226】2.他のスレッドが完了したとき、あるス
レッドがウエイトできるようにする。
【0227】3.スレッドが他のスレッドを終了させる
ことを可能とする。
【0228】優先順位をプログラムできるので、有望な
タスクはそうでないものより先に実行することができ
る。タスクの組の中で最初に終了するタスクαは、その
終了の際、ブロックされているスレッドをどれでも目覚
めさせることができる。この機能によって、スティング
はOR並列の有用な形態をサポートできる。タスクα
は、そのタスクの組の中の他のタスクはすべて、それら
の結果が不要であると確定されたなら、終了させること
ができる。しかし、スティングを用いた理論的計算は、
不要なタスクによってもたらされたノンローカルな副作
用を取消すことはできないであろう。このシステムは基
本的な逆戻りのメカニズムは提供しない。
【0229】wait−for−oneコンストラクト
を実現することを考える。このオペレータは、並行して
この引数のリストを評価し、その最初の引数によって生
成された値を復帰させ、終了する。従って、表現(wa
it−for−one a12 ...a1 ...
n )においてa1 からvが生じた場合、この表現はv
を復帰させ、そして、プログラマが必要とするなら、残
っているすべてのaj ,j≠1の評価を終了する。
【0230】AND並列を実現したwait−for−
allコンストラクトの仕様の同様である。これも並行
してその引数を評価する。ただしすべての引数を終った
ときのみ真を復帰させる。従って表現(wait−fo
r−all a1 2 ...a1 ...an )は、この
表現を実行するスレッドはすべてのa1 が終るまでブロ
ックされているので、障壁同期化ポイントとして機能す
る。このオペレーションの実現は、スペキュラティブw
ait−for−oneオペレーションの実現と非常に
似ている。
【0231】TCはこれらのオペレーションを、共通プ
ロシージャであるblock−onsetを用いて実現
する。スレッドおよびTCBは、この機能をサポートす
るように定義されている。例えば、TCB構造体に関連
しているのは、TCBの関連するスレッドが再開できる
前に終了しなけらばならない、グループ内のスレッドの
数に関する情報である。
【0232】block−on−setは、スレッドの
リストとカウントを取る。これらのスレッドは、上述し
たwait−for−oneオペレーションおよびwa
it−for−allオペレーションの引数に対応して
いる。カウントの引数は、現在のスレッド(すなわち、
block−on−setを実行しているスレッド)が
再開を認められる前に終了しなければならないスレッド
の数を表している。この数が1の場合、結果はwait
−for−oneを実現したものであり、上記数がnの
場合、結果はwait−for−allの実現である。
【0233】組の中のスレッドTg と、Tを待つべき現
在のスレッド(Tw )との関係は、下記のものに対する
参照を含むデータ構造(スレッド・バリア(TB)と呼
ばれる)内で維持される。
【0234】1.Tw のTCB 2.Tg 上でブロックされている他のウエイターのTB
(存在する場合)block−on−setを定義する
プログラムを、図12に示す。
【0235】次のコール (block−on−set m T1 2 ...
n ) は現在のスレッド(Tと言う)に、m個のT1 (m≦
n)が終了したときアンプロックさせる。これらT1
それぞれは、それらのウエイターのチェーン内にTに対
する参照を有している。
【0236】アプリケーションはbkock−on−s
etを、アプリケーションが終了したときa1 によって
起動されるプロシージャwakeup−waiters
と共に用いる。wakeup−waitersは、その
スレッド引数内のウエイター・スロットから、連鎖状の
ウエイターのリストを調べる。ウエイト数がゼロになる
ウエイターは、いずれかのVPのレディー待ち行列に挿
入される。TCは、スレッドTが終了したときはいつも
wakeup−waitersを起動する(例えば、T
が終了したとき、または異常に存在するときはいつ
も)。Tの終了を待っているスレッドは、すべてこのよ
うにしてリスケジュールされる。
【0237】これは2つのプロシージャが与えられる
と、wait−for−oneは次のように簡単に定義
することができる。
【0238】 (define(wait−for−one . block−group) (block−on−group 1 block−group) (map thread−terminate block−group ) Tがwait−for−oneを実行する場合、それは
block−group引数内のすべてのスレッド上で
ブロックする。Tが再開されるとき、Tは、利用できる
いずれかの仮想プロセッサのTPM内のレディー待ち行
列に配置される。Tの再開のとき実行されるマップ・プ
ロシージャは、そのグループ内のすべてのスレッドを終
了させる。
【0239】スティングのプロシージャwait−fo
r−allは、このオペレーションを省略できる。それ
は、そのブロック・グループ内のすべてのスレッドは、
このオペレーションを実行するスレッドが再開される前
に、終了することが保証されているからである。
【0240】スティングは、8プロセッサのSilic
on Graphics Power Series
(MIPS R3000)と、16プロセッサのSil
icon Graphics Challenge(M
IPS R4400)の両方において実現した。両マシ
ンは、共有(キャッシュ・コヒーレント)マルチプロセ
ッサである。この抽象物理的マシン構成では、物理的プ
ロセッサはライトウエイトのUnixスレッドにマッピ
ングされる。マシン内の各プロセッサは、このようなス
レッドの1つをランさせる。
【0241】以上、コンピュータ・ソフトウエア・アー
キテクチャの望ましい実施例について記述し、説明した
が、当業者にとって明らかなように、本発明の広範な原
理および趣旨から逸脱することなく、種々の変形や変更
を加えることは可能である。
【0242】
【発明の効果】以上説明したように本発明によれば、高
度並列マルチプロセッサ/マルチコンピュータ・システ
ムを制御するための、現代のプログラミング言語に対す
る非常に効率の良いサブストレートとして役立つコンピ
ュータのオペレーティング・システム・アーキテクチャ
を用いた高度並列コンピュータ・システムの制御方式が
得られる。
【0243】更に本発明によれば、カスタマイズ可能な
仮想マシンにもとづく非同期の計算のためのソフトウエ
ア・アーキテクチャを用いた高度並列コンピュータ・シ
ステムの制御方式が得られる。
【0244】また本発明によれば、仮想プロセッサ上で
ファーストクラスのオブジェクトとしてライトウエイト
・スレッドをサポートするソフトウエア・アーキテクチ
ャを用いた高度並列コンピュータ・システムの制御方式
が得られる。
【0245】更に本発明によれば、カスタマイズ可能な
ポリシー・マネージャを、特にユーザ・レベルに含むソ
フトウエア・アーキテクチャを用いた高度並列コンピュ
ータ・システムの制御方式が得られる。
【0246】また、本発明によれば、カスタマイズ可能
な仮想トポロジーを含むソフトウエア・アーキテクチャ
を用いた高度並列コンピュータ・システムの制御方式が
得られる。
【0247】更に本発明によれば、スレッド吸収、遅延
TCB割り当て、ならびに記憶装置共有の場所としての
スレッド・グループを含むソフトウエア・アーキテクチ
ャを用いた高度並列コンピュータ・システムの制御方式
が得られる。
【0248】また本発明によれば、多様な形態のポート
を含むソフトウエア・アーキテクチャを用いた高度並列
コンピュータ・システムの制御方式が得られる。
【0249】更に本発明によれば、上述のようなソフト
ウエア・アーキテクチャを用いて制御されるコンピュー
タ・システムが得られる。
【図面の簡単な説明】
【図1】本発明の一実施例によるソフトウエア・アーキ
テクチャを用いた制御方式を示すブロック図である。
【図2】図1の抽象物理的マシンおよび仮想マシンを示
す図である。
【図3】本発明のオペレーティング・システムの抽象ア
ーキテクチャを示す概略ブロック図である。
【図4】本発明で用いるスレッドの状態およびTCBの
状態の遷移を示す図である。
【図5】本発明で用いる記憶装置の構成を表す概略図で
ある。
【図6】本発明で用いるスレッドのプログラミングを説
明するためのプログラムを示す図である。
【図7】本発明で用いる物理的プロセッサの2Dメッシ
ュ上で多重化された仮想プロセッサの3Dメッシュを生
成するプログラムを説明するための図である。
【図8】本発明で用いるコンテクスト・スイッチを始動
するプログラムを示す図である。
【図9】本発明で用いるコンテクスト・スイッチを終了
するプログラムを示す図である。
【図10】本発明で用いる新しいスイッチを開始するプ
ログラムを示す図である。
【図11】本発明で用いるグラニュラリティの細かい適
応並列ソート・アルゴリズムのための最上位のプロシー
ジャのプログラムを示す図である。
【図12】本発明で用いるblock−on−setを
定義するプログラムを示す図である。
【符号の説明】
10 抽象物理的マシン 11 物理的トポロジー 12 抽象物理的プロセッサ 13 仮想プロセッサ・コントローラ 14 仮想マシン 15 仮想プロセッサ・ポリシー・マネージャ 16 仮想プロセッサ 17 スレッド・コントローラ 18 スレッド 19 スレッド・ポリシー・マネージャ 20,20′ 仮想トポロジー 24 仮想マシン/アドレス空間 26 グローバル記憶プール 28 グローバル共有オブジェクト 30 ルート環境 31 スタック 32 TCB 33 ローカル・ヒープ 35 グローバル・ヒープ 36 遅延 38 スケジュール 40 評価 42 吸収 44 確定 46 初期化 48 レディー 50 ラン 52 ブロック 54 保留 56 終了

Claims (20)

    【特許請求の範囲】
  1. 【請求項1】 高度並列コンピュータ・システムを制御
    するためのソフトウエア・アーキテクチャを用いた高度
    並列コンピュータ・システムの制御方式において、 一つのマイクロカーネルを形成する複数の抽象物理的プ
    ロセッサを備えた複数の抽象物理的マシンと;前記複数
    の抽象物理的プロセッサに付随し、複数の仮想プロセッ
    サを備えた複数の仮想マシンと;前記複数の仮想プロセ
    ッサ上でランする複数のスレッドを備えた複数のスレッ
    ド・グループとを備え、 前記複数の仮想プロセッサおよび前記複数のスレッドは
    ファーストクラスのオブジェクトであることを特徴とす
    るソフトウエア・アーキテクチャを用いた高度並列コン
    ピュータ・システムの制御方式。
  2. 【請求項2】 前記複数の仮想プロセッサは仮想トポロ
    ジーにおいて接続されていることを特徴とする請求項1
    記載のソフトウエア・アーキテクチャを用いた高度並列
    コンピュータ・システムの制御方式。
  3. 【請求項3】 前記マイクロカーネルのポリシーを管理
    するマイクロカーネル・ポリシー・マネージャはユーザ
    がカスタマイズできることを特徴とする請求項1記載の
    ソフトウエア・アーキテクチャを用いた高度並列コンピ
    ュータ・システムの制御方式。
  4. 【請求項4】 前記複数の仮想プロセッサは、前記複数
    のスレッドのポリシーを管理する複数のスレッド・ポリ
    シー・マネージャのうち、ユーザが、どのスレッド・ポ
    リシー・マネージャをカスタマイズできるかを含むこと
    を特徴とする請求項1記載のソフトウエア・アーキテク
    チャを用いた高度並列コンピュータ・システムの制御方
    式。
  5. 【請求項5】 前記複数のスレッド、前記複数の仮想プ
    ロセッサ、ならびに前記複数の抽象物理的プロセッサ
    は、機能的に連携し、仮想トポロジーを構築することを
    特徴とする請求項1記載のソフトウエア・アーキテクチ
    ャを用いた高度並列コンピュータ・システムの制御方
    式。
  6. 【請求項6】 前記仮想トポロジーはユーザがカスタマ
    イズできることを特徴とする請求項5記載のソフトウエ
    ア・アーキテクチャを用いた高度並列コンピュータ・シ
    ステムの制御方式。
  7. 【請求項7】 前記複数のスレッドは、それらのそれぞ
    れの実行コンテクストから分離でき、実行コンテクスト
    の遅延された割り当てを許すことを特徴とする請求項1
    記載のソフトウエア・アーキテクチャを用いた高度並列
    コンピュータ・システムの制御方式。
  8. 【請求項8】 複数の多様な形態のポートをさらに備え
    たことを特徴とする請求項1記載のソフトウエア・アー
    キテクチャを用いた高度並列コンピュータ・システムの
    制御方式。
  9. 【請求項9】 前記複数の多様な形態のポートはそれぞ
    れファーストクラスのオブジェクトであることを特徴と
    する請求項8記載のソフトウエア・アーキテクチャを用
    いた高度並列コンピュータ・システムの制御方式。
  10. 【請求項10】 前記複数のスレッドは、一般データと
    複合データとを含むメッセージを送ることを特徴とする
    請求項8記載のソフトウエア・アーキテクチャを用いた
    高度並列コンピュータ・システムの制御方式。
  11. 【請求項11】 前記複数のスレッドは、それらのそれ
    ぞれのローカル・スタックおよびヒープを、他の複数の
    スレッドとは独立に、ガーベッジ・コレクトすることを
    特徴とする請求項1記載のソフトウエア・アーキテクチ
    ャを用いた高度並列コンピュータ・システムの制御方
    式。
  12. 【請求項12】 前記複数のスレッド・グループはそれ
    らのそれぞれの共有ヒープを、無関係の複数のスレッド
    ・グループとは独立に、集めることを特徴とする請求項
    1記載のソフトウエア・アーキテクチャを用いた高度並
    列コンピュータ・システムの制御方式。
  13. 【請求項13】 前記複数の仮想プロセッサは前記複数
    の抽象物理的プロセッサ上に多重化されていることを特
    徴とする請求項1記載のソフトウエア・アーキテクチャ
    を用いた高度並列コンピュータ・システムの制御方式。
  14. 【請求項14】 前記複数の仮想プロセッサ、前記複数
    の仮想マシン、ならびに前記複数のスレッドは、持続性
    メモリ内に存在することを特徴とする請求項1記載のソ
    フトウエア・アーキテクチャを用いた高度並列コンピュ
    ータ・システムの制御方式。
  15. 【請求項15】 前記複数の抽象物理的プロセッサはフ
    ァーストクラスのオブジェクトであることを特徴とする
    請求項1記載のソフトウエア・アーキテクチャを用いた
    高度並列コンピュータ・システムの制御方式。
  16. 【請求項16】 前記複数の仮想マシンはファーストク
    ラスのオブジェクトであることを特徴とする請求項15
    記載のソフトウエア・アーキテクチャを用いた高度並列
    コンピュータ・システムの制御方式。
  17. 【請求項17】 前記複数の抽象物理的マシンおよび前
    記複数のスレッド・グループはファーストクラスのオブ
    ジェクトであることを特徴とする請求項16記載のソフ
    トウエア・アーキテクチャを用いた高度並列コンピュー
    タ・システムの制御方式。
  18. 【請求項18】 各々が仮想プロセッサ・コントローラ
    と仮想プロセッサ・ポリシー・マネージャとを有し、物
    理的トポロジーにおいて接続された複数の抽象物理的プ
    ロセッサと;各々が、仮想アドレス空間と複数の仮想プ
    ロセッサとを有する複数の仮想マシンと;を備えたコン
    ピュータ・システムであって、 前記複数の仮想マシンの各々の前記複数の仮想プロセッ
    サは、前記仮想プロセッサ・コントローラ及び前記仮想
    プロセッサ・ポリシー・マネージャに応答して実行し、
    かつ、スレッド・コントローラとスレッド・ポリシー・
    マネージャとを有し、前記複数の仮想プロセッサは仮想
    トポロジーにおいて接続され、各仮想プロセッサはそれ
    ぞれの抽象物理的プロセッサにマッピングされており、 前記コンピュータ・システムは、前記スレッド・コント
    ローラと前記スレッド・ポリシー・マネージャとに応答
    する前記複数の仮想プロセッサ上でランする複数のスレ
    ッドを、更に、備えていることを特徴とするコンピュー
    タ・システム。
  19. 【請求項19】 前記複数の仮想プロセッサは前記複数
    の抽象物理的プロセッサ上で多重化されていることを特
    徴とする請求項18記載のコンピュータ・システム。
  20. 【請求項20】 更に、持続性メモリを備え、この持続
    性メモリには、前記複数のスレッド、前記複数の仮想プ
    ロセッサ、ならびに前記複数の仮想マシンを含むオブジ
    ェクトが存在することを特徴とする請求項18記載のコ
    ンピュータ・システム。
JP7041126A 1994-03-31 1995-02-28 ソフトウエア・アーキテクチャを用いた高度並列コンピュータ・システムの制御方式 Expired - Fee Related JP2848262B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US221026 1994-03-31
US08/221,026 US5692193A (en) 1994-03-31 1994-03-31 Software architecture for control of highly parallel computer systems
US08/221026 1994-03-31

Publications (2)

Publication Number Publication Date
JPH07271738A true JPH07271738A (ja) 1995-10-20
JP2848262B2 JP2848262B2 (ja) 1999-01-20

Family

ID=22826030

Family Applications (1)

Application Number Title Priority Date Filing Date
JP7041126A Expired - Fee Related JP2848262B2 (ja) 1994-03-31 1995-02-28 ソフトウエア・アーキテクチャを用いた高度並列コンピュータ・システムの制御方式

Country Status (2)

Country Link
US (1) US5692193A (ja)
JP (1) JP2848262B2 (ja)

Cited By (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH1185547A (ja) * 1997-09-12 1999-03-30 Hitachi Ltd 仮想クラスタ構成方法
JP2006018813A (ja) * 2004-06-30 2006-01-19 Microsoft Corp 1台の仮想マシン内の複数の仮想プロセッサを初期化するためのシステムおよび方法
WO2006035729A1 (ja) * 2004-09-29 2006-04-06 Sony Corporation 情報処理装置、プロセス制御方法、並びにコンピュータ・プログラム
JP2007513426A (ja) * 2003-12-02 2007-05-24 オラクル・インターナショナル・コーポレイション 異種コンピュータシステムにわたる複雑計算
US7251814B2 (en) 2001-08-24 2007-07-31 International Business Machines Corporation Yield on multithreaded processors
US7428485B2 (en) 2001-08-24 2008-09-23 International Business Machines Corporation System for yielding to a processor
US7496494B2 (en) 2002-09-17 2009-02-24 International Business Machines Corporation Method and system for multiprocessor emulation on a multiprocessor host system
WO2010023756A1 (ja) * 2008-08-29 2010-03-04 富士通株式会社 仮想プロセッサを含む情報処理装置、情報処理方法、およびプログラム
US7953588B2 (en) 2002-09-17 2011-05-31 International Business Machines Corporation Method and system for efficient emulation of multiprocessor address translation on a multiprocessor host
US8108843B2 (en) 2002-09-17 2012-01-31 International Business Machines Corporation Hybrid mechanism for more efficient emulation and method therefor
US9043194B2 (en) 2002-09-17 2015-05-26 International Business Machines Corporation Method and system for efficient emulation of multiprocessor memory consistency

Families Citing this family (248)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6182108B1 (en) * 1995-01-31 2001-01-30 Microsoft Corporation Method and system for multi-threaded processing
JPH08286932A (ja) * 1995-04-11 1996-11-01 Hitachi Ltd ジョブの並列実行制御方法
US5870588A (en) * 1995-10-23 1999-02-09 Interuniversitair Micro-Elektronica Centrum(Imec Vzw) Design environment and a design method for hardware/software co-design
US6085233A (en) * 1995-12-29 2000-07-04 Pankosmion, Inc. System and method for cellular network computing and communications
US5826081A (en) * 1996-05-06 1998-10-20 Sun Microsystems, Inc. Real time thread dispatcher for multiprocessor applications
US5799324A (en) * 1996-05-10 1998-08-25 International Business Machines Corporation System and method for management of persistent data in a log-structured disk array
US5946487A (en) * 1996-06-10 1999-08-31 Lsi Logic Corporation Object-oriented multi-media architecture
JPH1040223A (ja) * 1996-06-17 1998-02-13 Internatl Business Mach Corp <Ibm> 分散並列システムにおける集合通信認識の最適化方法
US6012081A (en) * 1996-07-03 2000-01-04 Siemens Aktiengesellschaft Service and event synchronous/asynchronous manager
US5946463A (en) * 1996-07-22 1999-08-31 International Business Machines Corporation Method and system for automatically performing an operation on multiple computer systems within a cluster
US6026471A (en) * 1996-11-19 2000-02-15 International Business Machines Corporation Anticipating cache memory loader and method
US6647393B1 (en) 1996-11-22 2003-11-11 Mangosoft Corporation Dynamic directory service
US7058696B1 (en) 1996-11-22 2006-06-06 Mangosoft Corporation Internet-based shared file service with native PC client access and semantics
US6026474A (en) * 1996-11-22 2000-02-15 Mangosoft Corporation Shared client-side web caching using globally addressable memory
US5887191A (en) * 1996-11-26 1999-03-23 International Business Machines Corporation System and method for bounding response time jitter for high priority commands in a multimedia datastreaming system
GB2320594A (en) * 1996-12-20 1998-06-24 Ibm Dispatching client method calls to parallel execution threads within a server
US6567837B1 (en) * 1997-01-29 2003-05-20 Iq Systems Object oriented processor arrays
US6282581B1 (en) * 1997-03-27 2001-08-28 Hewlett-Packard Company Mechanism for resource allocation and for dispatching incoming calls in a distributed object environment
US6003038A (en) * 1997-03-31 1999-12-14 Sun Microsystems, Inc. Object-oriented processor architecture and operating method
US5842016A (en) * 1997-05-29 1998-11-24 Microsoft Corporation Thread synchronization in a garbage-collected system using execution barriers
US6002870A (en) * 1997-05-30 1999-12-14 Sun Microsystems, Inc. Method and apparatus for non-damaging process debugging via an agent thread
US6125394A (en) * 1997-06-06 2000-09-26 At&T Corporation Computer system having a plurality of resources and utilizing a selection mechanism to select the resources based upon historical loading
US6829764B1 (en) * 1997-06-23 2004-12-07 International Business Machines Corporation System and method for maximizing usage of computer resources in scheduling of application tasks
US6240440B1 (en) * 1997-06-30 2001-05-29 Sun Microsystems Incorporated Method and apparatus for implementing virtual threads
GB2327784B (en) * 1997-07-28 2002-04-03 Microapl Ltd A method of carrying out computer operations
US5893912A (en) * 1997-08-13 1999-04-13 International Business Machines Corporation Thread context manager for relational databases, method and computer program product for implementing thread context management for relational databases
US5974536A (en) * 1997-08-14 1999-10-26 Silicon Graphics, Inc. Method, system and computer program product for profiling thread virtual memory accesses
US6167437A (en) * 1997-09-02 2000-12-26 Silicon Graphics, Inc. Method, system, and computer program product for page replication in a non-uniform memory access system
JP3823475B2 (ja) * 1997-09-18 2006-09-20 ソニー株式会社 データ処理方法、記録媒体及びデータ処理装置
US6289424B1 (en) 1997-09-19 2001-09-11 Silicon Graphics, Inc. Method, system and computer program product for managing memory in a non-uniform memory access system
US6249802B1 (en) 1997-09-19 2001-06-19 Silicon Graphics, Inc. Method, system, and computer program product for allocating physical memory in a distributed shared memory network
US6381682B2 (en) 1998-06-10 2002-04-30 Compaq Information Technologies Group, L.P. Method and apparatus for dynamically sharing memory in a multiprocessor system
US6332180B1 (en) 1998-06-10 2001-12-18 Compaq Information Technologies Group, L.P. Method and apparatus for communication in a multi-processor computer system
US6199179B1 (en) 1998-06-10 2001-03-06 Compaq Computer Corporation Method and apparatus for failure recovery in a multi-processor computer system
US6542926B2 (en) 1998-06-10 2003-04-01 Compaq Information Technologies Group, L.P. Software partitioned multi-processor system with flexible resource sharing levels
US6260068B1 (en) * 1998-06-10 2001-07-10 Compaq Computer Corporation Method and apparatus for migrating resources in a multi-processor computer system
US6647508B2 (en) 1997-11-04 2003-11-11 Hewlett-Packard Development Company, L.P. Multiprocessor computer architecture with multiple operating system instances and software controlled resource allocation
US6633916B2 (en) 1998-06-10 2003-10-14 Hewlett-Packard Development Company, L.P. Method and apparatus for virtual resource handling in a multi-processor computer system
US6397252B1 (en) * 1997-12-19 2002-05-28 Electronic Data Systems Corporation Method and system for load balancing in a distributed object system
CA2317772A1 (en) * 1998-01-07 1999-07-15 Jeffrey I. Robinson Object oriented processor arrays
US6263212B1 (en) * 1998-02-17 2001-07-17 Alcatel Usa Sourcing, L.P. Short message service center
US6374286B1 (en) * 1998-04-06 2002-04-16 Rockwell Collins, Inc. Real time processor capable of concurrently running multiple independent JAVA machines
US6256637B1 (en) * 1998-05-05 2001-07-03 Gemstone Systems, Inc. Transactional virtual machine architecture
US6223202B1 (en) * 1998-06-05 2001-04-24 International Business Machines Corp. Virtual machine pooling
US6704764B1 (en) * 1998-06-18 2004-03-09 Hewlett-Packard Development Company, L.P. Method and apparatus for a servlet server class
JP3224782B2 (ja) * 1998-08-03 2001-11-05 インターナショナル・ビジネス・マシーンズ・コーポレーション 処理分担動的変更方法及びコンピュータ
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
US8631066B2 (en) * 1998-09-10 2014-01-14 Vmware, Inc. Mechanism for providing virtual machines for use by multiple users
US6223203B1 (en) * 1998-11-04 2001-04-24 Advanced Micro Devices, Inc. Method for performing parallel management operations including and deleting computer systems
US6487652B1 (en) * 1998-12-08 2002-11-26 Sun Microsystems, Inc. Method and apparatus for speculatively locking objects in an object-based system
GB2345160B (en) * 1998-12-23 2003-08-20 Ibm Virtual machine memory management
GB2345159B (en) * 1998-12-23 2003-08-20 Ibm Virtual machine memory management
US6609153B1 (en) 1998-12-24 2003-08-19 Redback Networks Inc. Domain isolation through virtual network machines
US7526468B2 (en) * 1999-01-08 2009-04-28 Computer Associates Think, Inc. System and method for recursive path analysis of DBMS procedures
US6842853B1 (en) * 1999-01-13 2005-01-11 Sun Microsystems, Inc. Thread suspension system and method
US6542991B1 (en) 1999-05-11 2003-04-01 Sun Microsystems, Inc. Multiple-thread processor with single-thread interface shared among threads
US6938147B1 (en) 1999-05-11 2005-08-30 Sun Microsystems, Inc. Processor with multiple-thread, vertically-threaded pipeline
US6351808B1 (en) 1999-05-11 2002-02-26 Sun Microsystems, Inc. Vertically and horizontally threaded processor with multidimensional storage for storing thread data
US6341347B1 (en) 1999-05-11 2002-01-22 Sun Microsystems, Inc. Thread switch logic in a multiple-thread processor
US6507862B1 (en) 1999-05-11 2003-01-14 Sun Microsystems, Inc. Switching method in a multi-threaded processor
US6247027B1 (en) * 1999-05-17 2001-06-12 Sun Microsystems, Inc. Facilitating garbage collection during object versioning for space and time dimensional computing
US6308313B1 (en) * 1999-06-09 2001-10-23 Nec Corporation Method for synthesis of common-case optimized circuits to improve performance and power dissipation
US6769122B1 (en) * 1999-07-02 2004-07-27 Silicon Graphics, Inc. Multithreaded layered-code processor
US7552440B1 (en) 1999-09-28 2009-06-23 Rockwell Automation Technologies, Inc. Process communication multiplexer
US6990668B1 (en) * 1999-10-20 2006-01-24 International Business Machines Corporation Apparatus and method for passively monitoring liveness of jobs in a clustered computing environment
US7039680B2 (en) * 1999-10-20 2006-05-02 International Business Machines Corporation Apparatus and method for timeout-free waiting for an ordered message in a clustered computing environment
US6842789B1 (en) * 1999-10-21 2005-01-11 Sun Microsystems, Inc. Method and apparatus for assigning unique device identifiers across a distributed computing system
US6854114B1 (en) * 1999-10-21 2005-02-08 Oracle International Corp. Using a virtual machine instance as the basic unit of user execution in a server environment
US6970893B2 (en) * 2000-10-27 2005-11-29 Bea Systems, Inc. System and method for regeneration of methods and garbage collection of unused methods
SE514318C2 (sv) * 1999-10-28 2001-02-12 Appeal Virtual Machines Ab Förfarande för att effektivisera en databehandlingsprocess vid användning av en virtuell maskin och där ett skräpsamlingsförfarande används
US6898617B2 (en) * 1999-11-18 2005-05-24 International Business Machines Corporation Method, system and program products for managing thread pools of a computing environment to avoid deadlock situations by dynamically altering eligible thread pools
US6842899B2 (en) 1999-12-21 2005-01-11 Lockheed Martin Corporation Apparatus and method for resource negotiations among autonomous agents
US6658449B1 (en) 2000-02-17 2003-12-02 International Business Machines Corporation Apparatus and method for periodic load balancing in a multiple run queue system
US6748593B1 (en) * 2000-02-17 2004-06-08 International Business Machines Corporation Apparatus and method for starvation load balancing using a global run queue in a multiple run queue system
US7073033B2 (en) * 2000-02-25 2006-07-04 Oracle International Corporation Memory model for a run-time environment
US6766437B1 (en) * 2000-02-28 2004-07-20 International Business Machines Corporation Composite uniprocessor
US6842900B2 (en) * 2000-04-18 2005-01-11 Fujitsu Limited Information processing apparatus executing processing corresponding to new thread by reusing arrangement for previous thread
JP4475614B2 (ja) * 2000-04-28 2010-06-09 大正製薬株式会社 並列処理方法におけるジョブの割り当て方法および並列処理方法
US6823351B1 (en) * 2000-05-15 2004-11-23 Sun Microsystems, Inc. Work-stealing queues for parallel garbage collection
US6684398B2 (en) * 2000-05-31 2004-01-27 Sun Microsystems, Inc. Monitor entry and exit for a speculative thread during space and time dimensional execution
US6836782B1 (en) * 2000-06-12 2004-12-28 Sun Microsystems, Inc. Method and apparatus for implementing modular garbage collectors
US7140018B1 (en) * 2000-06-20 2006-11-21 International Business Machines Corporation Method of using a distinct flow of computational control as a reusable abstract data object
EP1317832B1 (en) * 2000-07-31 2016-12-14 Intel Deutschland GmbH Method and apparatus for time-sliced and multi-threaded data processing in a communication system
US6912493B1 (en) 2000-09-29 2005-06-28 International Business Machines Corporation Technique for configuring processors in system with logical partitions
US20020073129A1 (en) * 2000-12-04 2002-06-13 Yu-Chung Wang Integrated multi-component scheduler for operating systems
US7051070B2 (en) * 2000-12-18 2006-05-23 Timothy Tuttle Asynchronous messaging using a node specialization architecture in the dynamic routing network
US8505024B2 (en) 2000-12-18 2013-08-06 Shaw Parsing Llc Storing state in a dynamic content routing network
US8924506B2 (en) 2000-12-27 2014-12-30 Bradium Technologies Llc Optimized image delivery over limited bandwidth communication channels
US7146602B2 (en) * 2001-01-16 2006-12-05 Ajile Systems, Inc. Builder tool and interface for system supporting multiple virtual machines
US7111294B2 (en) * 2001-01-16 2006-09-19 Microsoft Corporation Thread-specific heaps
US20020099759A1 (en) * 2001-01-24 2002-07-25 Gootherts Paul David Load balancer with starvation avoidance
US7461148B1 (en) * 2001-02-16 2008-12-02 Swsoft Holdings, Ltd. Virtual private server with isolation of system components
US7031989B2 (en) 2001-02-26 2006-04-18 International Business Machines Corporation Dynamic seamless reconfiguration of executing parallel software
US7233998B2 (en) 2001-03-22 2007-06-19 Sony Computer Entertainment Inc. Computer architecture and software cells for broadband networks
US6957435B2 (en) * 2001-04-19 2005-10-18 International Business Machines Corporation Method and apparatus for allocating processor resources in a logically partitioned computer system
US6934741B2 (en) * 2001-06-27 2005-08-23 Sun Microsystems, Inc. Globally distributed load balancing
US7103887B2 (en) * 2001-06-27 2006-09-05 Sun Microsystems, Inc. Load-balancing queues employing LIFO/FIFO work stealing
US8249885B2 (en) * 2001-08-08 2012-08-21 Gary Charles Berkowitz Knowledge-based e-catalog procurement system and method
US7228337B1 (en) * 2001-09-11 2007-06-05 Cisco Technology, Inc. Methods and apparatus for providing a network service to a virtual machine
US7039911B2 (en) * 2002-05-17 2006-05-02 Naturalbridge, Inc. Hybrid threads for multiplexing virtual machine
US7389506B1 (en) * 2002-07-30 2008-06-17 Unisys Corporation Selecting processor configuration based on thread usage in a multiprocessor system
US7093258B1 (en) * 2002-07-30 2006-08-15 Unisys Corporation Method and system for managing distribution of computer-executable program threads between central processing units in a multi-central processing unit computer system
US7275247B2 (en) * 2002-09-19 2007-09-25 International Business Machines Corporation Method and apparatus for handling threads in a data processing system
US7478387B2 (en) * 2002-09-25 2009-01-13 International Business Machines Corporation System and method for creating a restartable non-native language routine execution environment
CA2408474A1 (en) * 2002-10-17 2004-04-17 Ibm Canada Limited-Ibm Canada Limitee Apparatus and method for enabling efficient multi-protocol database transaction processing
US7194744B2 (en) * 2002-12-17 2007-03-20 International Business Machines Corporation System and method for dynamic exception handling using an external exception handler
US7424710B1 (en) * 2002-12-18 2008-09-09 Vmware, Inc. TCP/IP offloading for virtual machines
US7168064B2 (en) * 2003-03-25 2007-01-23 Electric Cloud, Inc. System and method for supplementing program builds with file usage information
US7395529B1 (en) 2003-03-25 2008-07-01 Electric Cloud, Inc. Conflict detection and correction in a program build environment
US7263695B1 (en) * 2003-03-25 2007-08-28 Electric Cloud, Inc. System and method for processing recursive invocations within a program build
US7676788B1 (en) 2003-03-25 2010-03-09 Electric Cloud, Inc. Architecture and method for executing program builds
US7086063B1 (en) 2003-03-25 2006-08-01 Electric Cloud, Inc. System and method for file caching in a distributed program build environment
US7539976B1 (en) 2003-03-25 2009-05-26 Electric Cloud, Inc. System and method for intelligently distributing source files within a distributed program build architecture
US7000051B2 (en) * 2003-03-31 2006-02-14 International Business Machines Corporation Apparatus and method for virtualizing interrupts in a logically partitioned computer system
US7702729B2 (en) * 2003-04-08 2010-04-20 Johanson Bradley E Event heap: a coordination infrastructure for dynamic heterogeneous application interactions in ubiquitous computing environments
US7774191B2 (en) * 2003-04-09 2010-08-10 Gary Charles Berkowitz Virtual supercomputer
US7281075B2 (en) * 2003-04-24 2007-10-09 International Business Machines Corporation Virtualization of a global interrupt queue
US7653912B2 (en) * 2003-05-30 2010-01-26 Steven Frank Virtual processor methods and apparatus with unified event notification and consumer-producer memory operations
US7469346B2 (en) * 2003-06-27 2008-12-23 Disney Enterprises, Inc. Dual virtual machine architecture for media devices
US8352724B2 (en) * 2003-07-23 2013-01-08 Semiconductor Energy Laboratory Co., Ltd. Microprocessor and grid computing system
US7512950B1 (en) * 2003-08-14 2009-03-31 Sun Microsystems, Inc. Barrier synchronization object for multi-threaded applications
US20050044301A1 (en) * 2003-08-20 2005-02-24 Vasilevsky Alexander David Method and apparatus for providing virtual computing services
US8776050B2 (en) * 2003-08-20 2014-07-08 Oracle International Corporation Distributed virtual machine monitor for managing multiple virtual resources across multiple physical nodes
US7783779B1 (en) * 2003-09-19 2010-08-24 Vmware, Inc Storage multipath management in a virtual computer system
US20050071828A1 (en) * 2003-09-25 2005-03-31 International Business Machines Corporation System and method for compiling source code for multi-processor environments
US20050071578A1 (en) * 2003-09-25 2005-03-31 International Business Machines Corporation System and method for manipulating data with a plurality of processors
US7318218B2 (en) * 2003-09-25 2008-01-08 International Business Machines Corporation System and method for processor thread for software debugging
US7444632B2 (en) * 2003-09-25 2008-10-28 International Business Machines Corporation Balancing computational load across a plurality of processors
US7496917B2 (en) 2003-09-25 2009-02-24 International Business Machines Corporation Virtual devices using a pluarlity of processors
US7146529B2 (en) * 2003-09-25 2006-12-05 International Business Machines Corporation System and method for processor thread acting as a system service processor
US7516456B2 (en) * 2003-09-25 2009-04-07 International Business Machines Corporation Asymmetric heterogeneous multi-threaded operating system
US7549145B2 (en) 2003-09-25 2009-06-16 International Business Machines Corporation Processor dedicated code handling in a multi-processor environment
US7389508B2 (en) * 2003-09-25 2008-06-17 International Business Machines Corporation System and method for grouping processors and assigning shared memory space to a group in heterogeneous computer environment
US7475257B2 (en) 2003-09-25 2009-01-06 International Business Machines Corporation System and method for selecting and using a signal processor in a multiprocessor system to operate as a security for encryption/decryption of data
US7478390B2 (en) * 2003-09-25 2009-01-13 International Business Machines Corporation Task queue management of virtual devices using a plurality of processors
US7415703B2 (en) * 2003-09-25 2008-08-19 International Business Machines Corporation Loading software on a plurality of processors
US7523157B2 (en) * 2003-09-25 2009-04-21 International Business Machines Corporation Managing a plurality of processors as devices
US7236998B2 (en) * 2003-09-25 2007-06-26 International Business Machines Corporation System and method for solving a large system of dense linear equations
US20050079508A1 (en) * 2003-10-10 2005-04-14 Judy Dering Constraints-based analysis of gene expression data
US20050108711A1 (en) * 2003-11-13 2005-05-19 Infineon Technologies North America Corporation Machine instruction for enhanced control of multiple virtual processor systems
US7380086B2 (en) * 2003-12-12 2008-05-27 International Business Machines Corporation Scalable runtime system for global address space languages on shared and distributed memory machines
US8694976B2 (en) * 2003-12-19 2014-04-08 Intel Corporation Sleep state mechanism for virtual multithreading
US7669203B2 (en) * 2003-12-19 2010-02-23 Intel Corporation Virtual multithreading translation mechanism including retrofit capability
US7844665B2 (en) 2004-04-23 2010-11-30 Waratek Pty Ltd. Modified computer architecture having coordinated deletion of corresponding replicated memory locations among plural computers
US7685354B1 (en) 2004-06-30 2010-03-23 Sun Microsystems, Inc. Multiple-core processor with flexible mapping of processor cores to cache banks
US7873776B2 (en) * 2004-06-30 2011-01-18 Oracle America, Inc. Multiple-core processor with support for multiple virtual processors
WO2006023508A1 (en) * 2004-08-17 2006-03-02 Shaw Parsing Llc Techniques for upstream failure detection and failure recovery
EP1784963B1 (en) 2004-08-17 2016-05-11 Zarbaña Digital Fund LLC Techniques for delivering personalized content with a real-time routing network
US8397237B2 (en) * 2004-08-17 2013-03-12 Shaw Parsing, L.L.C. Dynamically allocating threads from a thread pool to thread boundaries configured to perform a service for an event
US7290099B2 (en) * 2004-08-19 2007-10-30 International Business Machines Corporation Using parallelism for clear status track processing during error handling behavior in a storage system
US7590803B2 (en) 2004-09-23 2009-09-15 Sap Ag Cache eviction
JP4982971B2 (ja) * 2004-09-29 2012-07-25 ソニー株式会社 情報処理装置、プロセス制御方法、並びにコンピュータ・プログラム
US7913254B2 (en) * 2004-10-11 2011-03-22 International Business Machines Corporation Method and system for mapping threads or tasks to CPUs in a parallel computer
US7574425B2 (en) * 2004-12-03 2009-08-11 International Business Machines Corporation System and method for query management in a database management system
US20060122976A1 (en) * 2004-12-03 2006-06-08 Shumeet Baluja Predictive information retrieval
US7593930B2 (en) 2004-12-14 2009-09-22 Sap Ag Fast channel architecture
US7580915B2 (en) 2004-12-14 2009-08-25 Sap Ag Socket-like communication API for C
US7600217B2 (en) * 2004-12-14 2009-10-06 Sap Ag Socket-like communication API for Java
US7707578B1 (en) * 2004-12-16 2010-04-27 Vmware, Inc. Mechanism for scheduling execution of threads for fair resource allocation in a multi-threaded and/or multi-core processing system
US8621458B2 (en) * 2004-12-21 2013-12-31 Microsoft Corporation Systems and methods for exposing processor topology for virtual machines
US7694065B2 (en) 2004-12-28 2010-04-06 Sap Ag Distributed cache architecture
US7512737B2 (en) * 2004-12-28 2009-03-31 Sap Ag Size based eviction implementation
US7552284B2 (en) * 2004-12-28 2009-06-23 Sap Ag Least frequently used eviction implementation
US8204931B2 (en) 2004-12-28 2012-06-19 Sap Ag Session management within a multi-tiered enterprise network
US7457918B2 (en) * 2004-12-28 2008-11-25 Sap Ag Grouping and group operations
US7437516B2 (en) * 2004-12-28 2008-10-14 Sap Ag Programming models for eviction policies
US7493449B2 (en) * 2004-12-28 2009-02-17 Sap Ag Storage plug-in based on hashmaps
US7552153B2 (en) * 2004-12-28 2009-06-23 Sap Ag Virtual machine monitoring using shared memory
US20060143256A1 (en) 2004-12-28 2006-06-29 Galin Galchev Cache region concept
US7523263B2 (en) * 2004-12-28 2009-04-21 Michael Wintergerst Storage plug-in based on shared closures
US8015561B2 (en) * 2004-12-28 2011-09-06 Sap Ag System and method for managing memory of Java session objects
US7971001B2 (en) * 2004-12-28 2011-06-28 Sap Ag Least recently used eviction implementation
US7451275B2 (en) * 2004-12-28 2008-11-11 Sap Ag Programming models for storage plug-ins
US7539821B2 (en) 2004-12-28 2009-05-26 Sap Ag First in first out eviction implementation
US8281014B2 (en) * 2004-12-28 2012-10-02 Sap Ag Session lifecycle management within a multi-tiered enterprise network
US20060265704A1 (en) * 2005-04-21 2006-11-23 Holt John M Computer architecture and method of operation for multi-computer distributed processing with synchronization
US8589562B2 (en) 2005-04-29 2013-11-19 Sap Ag Flexible failover configuration
US20060248283A1 (en) * 2005-04-29 2006-11-02 Galin Galchev System and method for monitoring threads in a clustered server architecture
US8024566B2 (en) * 2005-04-29 2011-09-20 Sap Ag Persistent storage implementations for session data within a multi-tiered enterprise network
US7853698B2 (en) * 2005-04-29 2010-12-14 Sap Ag Internal persistence of session state information
US7831634B2 (en) 2005-04-29 2010-11-09 Sap Ag Initializing a cache region using a generated cache region configuration structure
US7581066B2 (en) * 2005-04-29 2009-08-25 Sap Ag Cache isolation model
US7761435B2 (en) * 2005-04-29 2010-07-20 Sap Ag External persistence of session state information
US8762547B2 (en) 2005-04-29 2014-06-24 Sap Ag Shared memory implementations for session data within a multi-tiered enterprise network
US7603707B2 (en) * 2005-06-30 2009-10-13 Intel Corporation Tamper-aware virtual TPM
US7966412B2 (en) 2005-07-19 2011-06-21 Sap Ag System and method for a pluggable protocol handler
US7823158B2 (en) * 2005-08-18 2010-10-26 International Business Machines Corporation Adaptive scheduling and management of work processing in a target context in resource contention
US7895597B2 (en) * 2005-09-15 2011-02-22 Nokia Corporation Method, apparatus and computer program product enabling full pre-emptive scheduling of green threads on a virtual machine
US8079035B2 (en) * 2005-12-27 2011-12-13 Intel Corporation Data structure and management techniques for local user-level thread data
US8707323B2 (en) 2005-12-30 2014-04-22 Sap Ag Load balancing algorithm for servicing client requests
HU0600034D0 (en) * 2006-01-16 2006-03-28 Kaposvari Egyetem Process simulation software and hardware architecture and method
KR100846499B1 (ko) * 2006-10-27 2008-07-17 삼성전자주식회사 메모리를 관리하는 방법 및 장치
US8402451B1 (en) * 2006-03-17 2013-03-19 Epic Games, Inc. Dual mode evaluation for programs containing recursive computations
US7444670B2 (en) 2006-03-21 2008-10-28 International Business Machines Corporation Method and apparatus for migrating a virtual TPM instance and preserving uniqueness and completeness of the instance
US7653794B2 (en) * 2006-05-08 2010-01-26 Microsoft Corporation Converting physical machines to virtual machines
US7865895B2 (en) * 2006-05-18 2011-01-04 International Business Machines Corporation Heuristic based affinity dispatching for shared processor partition dispatching
US7870551B2 (en) * 2006-05-18 2011-01-11 International Business Machines Corporation Optimization of thread wake up for shared processor partitions
US20080005332A1 (en) * 2006-06-08 2008-01-03 Georgia Tech Research Corporation Method for Opportunistic Computing
US7886265B2 (en) 2006-10-03 2011-02-08 Electric Cloud, Inc. Process automation system and method employing property attachment techniques
US8042089B2 (en) * 2006-10-03 2011-10-18 Electric Cloud, Inc. Process automation system and method employing multi-stage report generation
US7725524B2 (en) 2006-10-03 2010-05-25 Electric Cloud, Inc. Process automation system and method having a hierarchical architecture with multiple tiers
GB2443277B (en) 2006-10-24 2011-05-18 Advanced Risc Mach Ltd Performing diagnostics operations upon an asymmetric multiprocessor apparatus
US8321849B2 (en) * 2007-01-26 2012-11-27 Nvidia Corporation Virtual architecture and instruction set for parallel thread computing
US7926058B2 (en) * 2007-02-06 2011-04-12 Mba Sciences, Inc. Resource tracking method and apparatus
US7627621B2 (en) * 2007-02-12 2009-12-01 Sun Microsystems, Inc. Method and system for minor garbage collection
US7870171B2 (en) * 2007-02-12 2011-01-11 Oracle America, Inc. Method and system for garbage collection in a multitasking environment
US8074218B2 (en) * 2007-03-29 2011-12-06 International Business Machines Corporation Method and system for constructing virtual resources
US7681020B2 (en) * 2007-04-18 2010-03-16 International Business Machines Corporation Context switching and synchronization
US7926035B2 (en) * 2007-04-24 2011-04-12 Microsoft Corporation Testing multi-thread software using prioritized context switch limits
US20080270658A1 (en) * 2007-04-27 2008-10-30 Matsushita Electric Industrial Co., Ltd. Processor system, bus controlling method, and semiconductor device
US8060881B2 (en) * 2007-05-15 2011-11-15 Microsoft Corporation Small barrier with local spinning
US8458724B2 (en) * 2007-06-15 2013-06-04 Microsoft Corporation Automatic mutual exclusion
US20090132792A1 (en) * 2007-11-15 2009-05-21 Dennis Arthur Ruffer Method of generating internode timing diagrams for a multiprocessor array
US8566830B2 (en) * 2008-05-16 2013-10-22 Microsoft Corporation Local collections of tasks in a scheduler
US8561072B2 (en) * 2008-05-16 2013-10-15 Microsoft Corporation Scheduling collections in a scheduler
US9417914B2 (en) * 2008-06-02 2016-08-16 Microsoft Technology Licensing, Llc Regaining control of a processing resource that executes an external execution context
US9213586B2 (en) * 2009-03-18 2015-12-15 Sas Institute Inc. Computer-implemented systems for resource level locking without resource level locks
US8312100B2 (en) * 2009-03-31 2012-11-13 International Business Machines Corporation Managing orphaned requests in a multi-server environment
US9069644B2 (en) 2009-04-10 2015-06-30 Electric Cloud, Inc. Architecture and method for versioning registry entries in a distributed program build
US8572617B2 (en) 2009-07-21 2013-10-29 Sas Institute Inc. Processor-implemented systems and methods for event handling
US20110035802A1 (en) * 2009-08-07 2011-02-10 Microsoft Corporation Representing virtual object priority based on relationships
US8832712B2 (en) * 2009-09-09 2014-09-09 Ati Technologies Ulc System and method for synchronizing threads using shared memory having different buffer portions for local and remote cores in a multi-processor system
US8276147B2 (en) * 2009-10-16 2012-09-25 Microsoft Corporation Low synchronization means of scheduler finalization
KR101644800B1 (ko) * 2010-01-07 2016-08-02 삼성전자주식회사 컴퓨팅 시스템 및 방법
US8707320B2 (en) * 2010-02-25 2014-04-22 Microsoft Corporation Dynamic partitioning of data by occasionally doubling data chunk size for data-parallel applications
WO2011149558A2 (en) 2010-05-28 2011-12-01 Abelow Daniel H Reality alternate
US20120047495A1 (en) * 2010-08-18 2012-02-23 Microsoft Corporation Execution environment support for reactive programming
US8621057B2 (en) * 2011-03-07 2013-12-31 International Business Machines Corporation Establishing relationships among elements in a computing system
CN102331961B (zh) * 2011-09-13 2014-02-19 华为技术有限公司 并行模拟多个处理器的方法及系统、调度器
US9282118B2 (en) 2012-11-13 2016-03-08 Intel Corporation Policy enforcement in computing environment
US9935841B2 (en) 2013-01-28 2018-04-03 Intel Corporation Traffic forwarding for processing in network environment
US9384025B2 (en) 2013-01-28 2016-07-05 Intel Corporation Traffic and/or workload processing
US9952860B2 (en) 2013-03-13 2018-04-24 Veriscape, Inc. Dynamic memory management for a virtual supercomputer
US9436503B2 (en) * 2013-10-31 2016-09-06 Emu Solutions, Inc. Concurrency control mechanisms for highly multi-threaded systems
US9830206B2 (en) * 2013-12-18 2017-11-28 Cray Inc. Cross-thread exception handling
US9552221B1 (en) * 2013-12-23 2017-01-24 Google Inc. Monitoring application execution using probe and profiling modules to collect timing and dependency information
US9525729B2 (en) * 2014-04-02 2016-12-20 Netapp, Inc. Remote monitoring pool management
CN103995732B (zh) * 2014-05-26 2017-02-22 华为技术有限公司 一种虚拟可信平台模块功能实现方法和管理设备
US9619012B2 (en) * 2014-05-30 2017-04-11 Apple Inc. Power level control using power assertion requests
US9396089B2 (en) 2014-05-30 2016-07-19 Apple Inc. Activity tracing diagnostic systems and methods
US10061577B2 (en) 2014-10-14 2018-08-28 Electric Cloud, Inc. System and method for optimizing job scheduling within program builds
US10936369B2 (en) * 2014-11-18 2021-03-02 International Business Machines Corporation Maintenance of local and global lists of task control blocks in a processor-specific manner for allocation to tasks
US10282502B1 (en) * 2017-03-07 2019-05-07 Amazon Technologies, Inc. Flexible constraint integrated circuit implementation runs
US20190126558A1 (en) * 2017-11-02 2019-05-02 Eos Gmbh Electro Optical Systems Method and assembly for generating control data for the manufacture of a three-dimensional object by means of an additive manufacturing method
US10467722B2 (en) * 2017-11-06 2019-11-05 Basemark Oy Combined rendering and computing resource allocation management system
US10475151B2 (en) * 2017-11-06 2019-11-12 Basemark Oy Graphics engine resource management and allocation system
US10956125B2 (en) 2017-12-21 2021-03-23 International Business Machines Corporation Data shuffling with hierarchical tuple spaces
CN113284038B (zh) * 2021-03-05 2022-10-18 上海壁仞智能科技有限公司 用于执行计算的方法、计算设备、计算系统和存储介质

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4554626A (en) * 1981-05-22 1985-11-19 Data General Corporation Digital data processing system
US4545012A (en) * 1981-05-22 1985-10-01 Data General Corporation Access control system for use in a digital computer system with object-based addressing and call and return operations
JPH0814795B2 (ja) * 1986-01-14 1996-02-14 株式会社日立製作所 マルチプロセッサ仮想計算機システム
JPH0664536B2 (ja) * 1986-01-17 1994-08-22 インタ−ナショナル ビジネス マシ−ンズ コ−ポレ−ション 仮想端末サブシステムの制御方法
US4827403A (en) * 1986-11-24 1989-05-02 Thinking Machines Corporation Virtual processor techniques in a SIMD multiprocessor array
US5148544A (en) * 1987-07-01 1992-09-15 Digital Equipment Corporation Apparatus and method for control of asynchronous program interrupt events in a data processing system
US5201049A (en) * 1988-09-29 1993-04-06 International Business Machines Corporation System for executing applications program concurrently/serially on different virtual machines
US5063500A (en) * 1988-09-29 1991-11-05 Ibm Corp. System for executing segments of application program concurrently/serially on different/same virtual machine
US5129083A (en) * 1989-06-29 1992-07-07 Digital Equipment Corporation Conditional object creating system having different object pointers for accessing a set of data structure objects
US5129084A (en) * 1989-06-29 1992-07-07 Digital Equipment Corporation Object container transfer system and method in an object based computer operating system
US5136712A (en) * 1989-06-29 1992-08-04 Digital Equipment Corporation Temporary object handling system and method in an object based computer operating system
US5168554A (en) * 1989-10-13 1992-12-01 International Business Machines Corporation Converting trace data from processors executing in parallel into graphical form
US5220501A (en) * 1989-12-08 1993-06-15 Online Resources, Ltd. Method and system for remote delivery of retail banking services
US5179702A (en) * 1989-12-29 1993-01-12 Supercomputer Systems Limited Partnership System and method for controlling a highly parallel multiprocessor using an anarchy based scheduler for parallel execution thread scheduling
US5083265A (en) * 1990-04-17 1992-01-21 President And Fellows Of Harvard College Bulk-synchronous parallel computer
JP2839201B2 (ja) * 1990-07-30 1998-12-16 株式会社日立製作所 仮想計算機システム
US5247675A (en) * 1991-08-09 1993-09-21 International Business Machines Corporation Preemptive and non-preemptive scheduling and execution of program threads in a multitasking operating system

Cited By (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH1185547A (ja) * 1997-09-12 1999-03-30 Hitachi Ltd 仮想クラスタ構成方法
US8108196B2 (en) 2001-08-24 2012-01-31 International Business Machines Corporation System for yielding to a processor
US7251814B2 (en) 2001-08-24 2007-07-31 International Business Machines Corporation Yield on multithreaded processors
US7428485B2 (en) 2001-08-24 2008-09-23 International Business Machines Corporation System for yielding to a processor
US7953588B2 (en) 2002-09-17 2011-05-31 International Business Machines Corporation Method and system for efficient emulation of multiprocessor address translation on a multiprocessor host
US7496494B2 (en) 2002-09-17 2009-02-24 International Business Machines Corporation Method and system for multiprocessor emulation on a multiprocessor host system
US7844446B2 (en) 2002-09-17 2010-11-30 International Business Machines Corporation Method and system for multiprocessor emulation on a multiprocessor host system
US8108843B2 (en) 2002-09-17 2012-01-31 International Business Machines Corporation Hybrid mechanism for more efficient emulation and method therefor
US8578351B2 (en) 2002-09-17 2013-11-05 International Business Machines Corporation Hybrid mechanism for more efficient emulation and method therefor
US9043194B2 (en) 2002-09-17 2015-05-26 International Business Machines Corporation Method and system for efficient emulation of multiprocessor memory consistency
JP2007513426A (ja) * 2003-12-02 2007-05-24 オラクル・インターナショナル・コーポレイション 異種コンピュータシステムにわたる複雑計算
JP4774372B2 (ja) * 2003-12-02 2011-09-14 オラクル・インターナショナル・コーポレイション 異種コンピュータシステムにわたる複雑計算
JP2006018813A (ja) * 2004-06-30 2006-01-19 Microsoft Corp 1台の仮想マシン内の複数の仮想プロセッサを初期化するためのシステムおよび方法
US8271976B2 (en) 2004-06-30 2012-09-18 Microsoft Corporation Systems and methods for initializing multiple virtual processors within a single virtual machine
WO2006035729A1 (ja) * 2004-09-29 2006-04-06 Sony Corporation 情報処理装置、プロセス制御方法、並びにコンピュータ・プログラム
WO2010023756A1 (ja) * 2008-08-29 2010-03-04 富士通株式会社 仮想プロセッサを含む情報処理装置、情報処理方法、およびプログラム

Also Published As

Publication number Publication date
JP2848262B2 (ja) 1999-01-20
US5692193A (en) 1997-11-25

Similar Documents

Publication Publication Date Title
JP2848262B2 (ja) ソフトウエア・アーキテクチャを用いた高度並列コンピュータ・システムの制御方式
AU2019257543B2 (en) Executing graph-based program specifications
Goldstein et al. Lazy threads: Implementing a fast parallel call
CA2959534C (en) Compiling graph-based program specifications
AU2015312008B2 (en) Managing execution state of components in a graph-based program specification for controlling their associated tasks
AU2020202539B1 (en) Controlling data processing tasks
Feeley An efficient and general implementation of futures on large scale shared-memory multiprocessors
Goldstein et al. Enabling primitives for compiling parallel languages
Polychronopoulos Toward auto-scheduling compilers
Jagannathan et al. A customizable substrate for concurrent languages
Feeley An E cient and General Implementation of Futures on Large Scale Shared-Memory Multiprocessors
Philbin The design of an operating system for modern programming languages
Morrisett et al. A portable multiprocessor interface for Standard ML of New Jersey
Philbin et al. E cient Support for Multiple Concurrency Paradigms in Modern Programming Languages
Jagannathan et al. High-level abstractions for efficient concurrent systems
Mukherjee et al. A survey of multiprocessor operating system kernels (DRAFT)
Jagannathan Expressing fine-grained parallelism using concurrent data structures
Jeschke An architecture for parallel symbolic processing based on suspending construction
Jagannathan Locality abstractions for parallel and distributed computing
Philbin et al. Virtual topologies: A new concurrency abstraction for high-level parallel languages: Preliminary report
Clapp et al. Parallel language constructs for efficient parallel processing
Philbin An overview of the Sting operating system
Kluge Realisations for Strict Languages
Glässer et al. Concepts for a Distributed Implementation
Jones Computer Architectures for Multithreading

Legal Events

Date Code Title Description
A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 19980527

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

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 19981006

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

Free format text: PAYMENT UNTIL: 20071106

Year of fee payment: 9

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

Free format text: PAYMENT UNTIL: 20081106

Year of fee payment: 10

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

Free format text: PAYMENT UNTIL: 20081106

Year of fee payment: 10

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

Free format text: PAYMENT UNTIL: 20091106

Year of fee payment: 11

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

Free format text: PAYMENT UNTIL: 20091106

Year of fee payment: 11

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

Free format text: PAYMENT UNTIL: 20101106

Year of fee payment: 12

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

Free format text: PAYMENT UNTIL: 20111106

Year of fee payment: 13

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

Free format text: PAYMENT UNTIL: 20111106

Year of fee payment: 13

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

Free format text: PAYMENT UNTIL: 20121106

Year of fee payment: 14

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

Free format text: PAYMENT UNTIL: 20121106

Year of fee payment: 14

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

Free format text: PAYMENT UNTIL: 20131106

Year of fee payment: 15

LAPS Cancellation because of no payment of annual fees