(57)【要約】      （修正有）【課題】複数のノードと、ユーザインタフェースおよびプログラムコード命令を翻訳するカーネルを含むソフトウェアパッケージと、を含むコンピュータクラスタシステムを提供する。【解決手段】クラスタノードモジュールが、カーネルおよび他のクラスタノードモジュールと通信するように構成される。クラスタノードモジュールは、互いに通信し、かつ、カーネルと通信しているいくつかのクラスタノードモジュールがコンピュータクラスタとして動作することが可能であるように、ユーザインタフェースからの命令を受け付け、それらの命令のうちの少なくともいくつかを翻訳する。【選択図】図２
2017016693.tif 000002
【特許請求の範囲】
【請求項１】
１つまたは１つ以上の特別目的のマイクロプロセッサ上でコマンドを実行することによ
って、フロントエンドから受けた命令を実行するためのシステムであって、
複数のノードであって、各ノードが、シングルノードカーネルモジュールのプログラム
コードを含むコンピュータ可読のメモリ装置にアクセスするように構成された複数のノー
ドを備え、各シングルノードカーネルモジュールは、シングルノードカーネルモジュール
によって受けた命令を、前記特別目的のマイクロプロセッサによって実行可能なコマンド
に解釈し、
複数のクラスタノードモジュールであって、前記複数のクラスタノードモジュールが前
記コンピュータ可読のメモリ装置に記憶され、かつ互いに通信して、１つまたは１つ以上
のハードウエアプロセッサを用いてコマンドを実行するクラスタとして動作するように、
命令を受けるために、シングルノードカーネルモジュールおよび１つまたは複数の他のク
ラスタノードモジュールと通信すること、前記命令の少なくともいくつかを解釈すること
、を行うように構成された、複数のクラスタノードモジュールと、
前記複数のノード同士を接続するように構成された通信システムと、を備え、
前記複数のクラスタノードモジュールは、複数のシングルノードカーネルモジュールに
よる実行のための命令を、必要に応じて解釈することと翻訳することとを協働して行い、
前記複数のクラスタノードモジュールの少なくとも１つが、結果を前記フロントエンドへ
返す、システム。
【請求項２】
前記特別目的のマイクロプロセッサは、デジタル信号プロセッサを備える、請求項１に
記載のシステム。
【請求項３】
前記複数のノードは、２つまたは２つ以上のグループのノードのサブセットとして編成
される、請求項１に記載のシステム。
【請求項４】
前記２つまたは２つ以上のグループのノードのサブセットは、前記特別目的のマイクロ
プロセッサとデータのやり取りをする、請求項３に記載のシステム。
【請求項５】
前記特別目的のマイクロプロセッサは、マルチプルプロセッサコアを備える、請求項１
に記載のシステム。
【請求項６】
前記複数のクラスタノードモジュールの少なくとも１つは、プロセッサキャッシュメモ
リに記憶されている、請求項１に記載のシステム。
【請求項７】
前記各シングルノードカーネルモジュールは、プロセッサキャッシュメモリに記憶され
ている、請求項１に記載のシステム。
【請求項８】
１つまたは１つ以上のハードウエアプロセッサ上でコマンドを実行することによって、
フロントエンドから受けた命令を実行するためのシステムであって、
複数のノードであって、各ノードが、シングルノードカーネルモジュールのプログラム
コードを含むコンピュータ可読のメモリ装置にアクセスするように構成された複数のノー
ドを備え、各シングルノードカーネルモジュールは、シングルノードカーネルモジュール
によって受けた命令を、前記ハードウエアプロセッサによって実行可能なコマンドに解釈
し、前記コマンドが、要素のリストから１つまたは１つ以上の要素上で計算が行われるよ
うに構成され、
複数のクラスタノードモジュールであって、前記複数のクラスタノードモジュールが前
記コンピュータ可読のメモリ装置に記憶され、かつ互いに通信して、要素のリスト上で計
算が行われるクラスタとして動作するように、命令を受けるために、シングルノードカー
ネルモジュールおよび１つまたは複数の他のクラスタノードモジュールと通信すること、
前記命令の少なくともいくつかを解釈すること、を行うように構成された、複数のクラス
タノードモジュールと、
前記複数のノード同士を接続するように構成された通信システムと、を備え、
前記複数のクラスタノードモジュールは、複数のシングルノードカーネルモジュールに
よる実行のための命令を、必要に応じて解釈することと翻訳することとを協働して行い、
前記要素のリストが、複数のノードの実行のために分割され、前記複数のクラスタノー
ドモジュールの少なくとも１つが、結果を前記フロントエンドへ返す、システム。
【請求項９】
前記要素のリストの１つまたは１つ以上の要素が、異なるノードに移行する、請求項８
に記載のシステム。
【請求項１０】
コンピュータクラスタにおいてコマンドを評価する方法であって、
ユーザインタフェースまたはスクリプトの少なくとも一方からのコマンドを、前記コン
ピュータクラスタ内の１つまたは複数のクラスタノードモジュールに伝達するステップと
、
前記１つまたは複数のクラスタノードモジュールのそれぞれが、前記コマンドに基づく
メッセージを、前記クラスタノードモジュールに関連付けられた各カーネルモジュールに
伝達するステップと、
前記１つまたは複数のクラスタノードモジュールのそれぞれが、前記クラスタノードモ
ジュールに関連付けられた前記各カーネルモジュールから結果を受け取るステップと、
前記１つまたは複数のクラスタノードモジュールのうちの少なくとも１つが、他のクラ
スタノードモジュールからのメッセージに応答するステップと、を含む方法。
【請求項１１】
前記コマンドに基づくメッセージを、前記クラスタノードモジュールに関連付けられた
各カーネルモジュールに伝達する前記ステップは、特別に識別されたメッセージを前記各
カーネルモジュールに伝達するステップを含む、請求項１０に記載の方法。
【請求項１２】
前記クラスタノードモジュールのうちの少なくとも１つが、前記クラスタノードモジュ
ールと同じコンピュータシステムで実行されているユーザインタフェースまたはスクリプ
トのうちの少なくとも一方へ前記結果を転送するステップをさらに含む、請求項１０に記
載の方法。
【請求項１３】
前記クラスタノードモジュールのうちの少なくとも１つが、前記結果を、メッセージと
して、１つまたは複数の他のクラスタノードモジュールに伝達するステップをさらに含む
、請求項１０に記載の方法。
【請求項１４】
他のクラスタノードモジュールからのメッセージに応答する前記ステップは、
前記他のクラスタノードモジュールからのメッセージを、受信済みメッセージキューに
転送するステップと、
メッセージ受信キュー内の各エントリからのデータを、前記受信済みメッセージキュー
内のエントリと照合するステップと、
前記メッセージ受信キューからのデータを、前記受信済みメッセージキュー内の合致す
るデータと結合するステップと、
前記合致データを完了としてマーキングするステップと、を含む、請求項１０に記載の
方法。
【請求項１５】
ユーザインタフェースまたはスクリプトの少なくとも一方からのコマンドを、前記コン
ピュータクラスタ内の１つまたは複数のクラスタノードモジュールに伝達する前記ステッ
プは、Ｍａｔｈｅｍａｔｉｃａフロントエンドからの命令を第１のクラスタノードモジュ
ールに伝達するステップを含み、前記第１のクラスタノードモジュールは、前記命令を、
前記コンピュータクラスタで実行されている他のクラスタノードモジュールに転送する、
請求項１０に記載の方法。
【請求項１６】
前記第１のクラスタノードモジュールは、メッセージパッシングインタフェースからの
コマンドを用いて、前記命令を、前記コンピュータクラスタで実行されている他のクラス
タノードモジュールに転送する、請求項１５に記載の方法。
【請求項１７】
前記１つまたは複数のクラスタノードモジュールのそれぞれは、ＭａｔｈＬｉｎｋを用
いて、それぞれのカーネルモジュールと通信している、請求項１０に記載の方法。
【請求項１８】
複数のノードにおいてＭａｔｈｅｍａｔｉｃａコードを実行するコンピューティングシ
ステムであって、
第１のノードで実行されている第１のＭａｔｈｅｍａｔｉｃａカーネルと通信している
、第１のノードモジュールと、
第２のノードで実行されている第２のＭａｔｈｅｍａｔｉｃａカーネルと通信している
、第２のノードモジュールと、
第３のノードで実行されている第３のＭａｔｈｅｍａｔｉｃａカーネルと通信している
、第３のノードモジュールと、を備え、
前記第１のノードモジュール、前記第２のノードモジュール、および前記第３のノード
モジュールは、ピアツーピアアーキテクチャを用いて互いに通信するように構成された、
コンピューティングシステム。
【請求項１９】
前記第１のノードモジュール、前記第２のノードモジュール、および前記第３のノード
モジュールのそれぞれは、他のノードモジュールから発せられたメッセージを保持するデ
ータ構造と、メッセージの受信先として期待されるロケーションと、前記メッセージの送
信元として期待されるノードの識別子と、を指定するデータを保持するデータ構造と、を
備える、請求項１８に記載のコンピューティングシステム。
【請求項２０】
前記複数のクラスタノードモジュールは、少なくとも３つのクラスタノードモジュール
を備える、請求項１に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
（優先権情報）
本出願は、２００６年６月１３日に出願された米国特許仮出願第６０／８１３７３８号
、ならびに２００６年１０月１１日に出願された米国特許仮出願第６０／８５０９０８号
の優先権を主張するものである。上記参照された各出願は、その全体が、参照によって本
明細書に組み込まれ、本明細書の一部になっている。
【０００２】
本開示は、主としてクラスタコンピューティングの分野に関し、特に、コンピュータプ
ログラムにクラスタコンピューティング機能性を追加するシステムおよび方法に関する。
【背景技術】
【０００３】
コンピュータクラスタは、相互通信することにより、あたかも単一のコンピュータであ
るかのようにタスクを達成することが可能である、２つ以上のコンピュータ、マイクロプ
ロセッサ、および／またはプロセッサコア（「ノード」）からなるグループを含む。現在
、多くのコンピュータアプリケーションプログラムは、たとえ、それらが、クラスタとし
て動作することが可能なノードのグループにおいて実行されているとしても、コンピュー
タクラスタが提供しうる利点の恩恵を受けるようには設計されていない。コンピュータプ
ログラムの中には、単一ノードでしか実行できないものがあるが、これは、たとえば、そ
れらがタスクを直列に実行するようにコーディングされているためであったり、単一ノー
ドのみを認識するように、あるいは単一ノードにのみ命令を送信するように設計されてい
るためであったりする。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
アプリケーションプログラムの中には、ユーザ、スクリプト、または別のソースによっ
てそのプログラムに与えられる命令を実行するインタプリタを含むものがある。そのよう
なインタプリタは、「カーネル」と呼ばれることがあり、それは、たとえば、インタプリ
タが、コンピュータシステムの少なくともいくつかのハードウェアリソースを管理するこ
とが可能であるため、かつ／または、それらのリソースとソフトウェア（たとえば、高級
プログラミング言語を含むことが可能な与えられた命令）との間の通信を管理することが
可能であるためである。ソフトウェアプログラムの中には、単一ノードと通信するように
設計されたカーネルを含むものがある。単一ノードと通信するように設計されたカーネル
を含むソフトウェアパッケージの一例として、Ｗｏｌｆｒａｍ  Ｒｅｓｅａｒｃｈ，Ｉｎ
ｃ．製のＭａｔｈｅｍａｔｉｃａ（登録商標）（「Ｍａｔｈｅｍａｔｉｃａ」）がある。
他のベンダ製の数学ソフトウェアパッケージや他の種類のソフトウェアも、そのようなカ
ーネルを含むことが可能である。
【０００５】
同じくＷｏｌｆｒａｍ  Ｒｅｓｅａｒｃｈ，Ｉｎｃ．製である、ｇｒｉｄＭａｔｈｅｍ
ａｔｉｃａとして知られる製品が、「分散コンピューティング」として知られる形式のグ
リッドコンピューティングを実行する機能を、Ｍａｔｈｅｍａｔｉｃａに与える。グリッ
ドコンピュータは、一般にピアとして互いに通信することがない複数のノードを含む。分
散コンピューティングは、計算処理時にジョブ間でデータを共有する必要がない、多数の
独立ジョブ、作業パケットからなる作業負荷に対して最適化されることが可能である。グ
リッドコンピュータは、複数のスレーブノードまたは計算ノードを管理する、マスタノー
ドとして知られる、少なくとも１つのノードを含む。ｇｒｉｄＭａｔｈｅｍａｔｉｃａで
は、複数のカーネルのそれぞれが、単一ノードで実行される。１つのカーネルが、他のカ
ーネル（計算カーネルまたはスレーブカーネル）のすべての入力、出力、およびスケジュ
ーリングを取り扱うマスタカーネルに指定される。計算カーネルは、マスタカーネルを実
行しているノードからのみコマンドおよびデータを受け取る。各計算カーネルは、各自の
作業を、他の計算カーネルとは独立に実行し、あるジョブの中間結果は、他のノードで進
行中の他のジョブに影響を及ぼさない。
【課題を解決するための手段】
【０００６】
本明細書に記載の実施形態は、いくつかの特徴を有するが、それらの１つ１つは、それ
ぞれの望ましい属性を単独で担うものではない。以下では、特許請求の範囲で表される本
発明の範囲を限定することなく、有利な特徴のいくつかについて簡単に説明する。
【０００７】
本明細書に記載のいくつかの実施形態は、コンピュータアプリケーションにクラスタコ
ンピューティング機能性を便利に追加する手法を提供する。一実施形態では、ソフトウェ
アパッケージのユーザが、そのソフトウェアがクラスタ内の複数のノードから恩恵を受け
ることを可能にすることにより、そのソフトウェアパッケージから、より高い性能、およ
び／または、より高い可用性を達成できるであろう。一実施形態は、スーパコンピュータ
レベルの性能を有するコンピュータクラスタで実行されることが可能なアプリケーション
を、ユーザが、Ｍａｔｈｅｍａｔｉｃａのような高級言語を用いて作成することを可能に
する。一実施形態は、Ｍａｔｈｅｍａｔｉｃａフロントエンド、コマンドラインインタフ
ェース、１つまたは複数の高級コマンド、またはＣやＦＯＲＴＲＡＮのようなプログラミ
ング言語を用いる、そのような高性能コンピューティングへのアクセスを提供する。
【０００８】
一実施形態は、シングルノードで実行されるように設計された、たとえば、Ｍａｔｈｅ
ｍａｔｉｃａカーネルなどのソフトウェアモジュールを、たとえそのソフトウェアモジュ
ールがサポートを提供するように設計されていない場合であっても、クラスタコンピュー
ティングをサポートするよう適応させる。一実施形態は、そのプログラムのソースコード
へのアクセスが可能でない場合でも、アプリケーションプログラムの並列化を提供する。
一実施形態は、メッセージパッシングインタフェース（「ＭＰＩ」）呼び出しを、たとえ
ば、Ｍａｔｈｅｍａｔｉｃａプログラミング環境などのユーザインタフェースの中から直
接追加およびサポートする。一実施形態では、ＭＰＩ呼び出しは、Ｍａｔｈｅｍａｔｉｃ
ａフロントエンドなどのインタラクティブプログラミング環境に追加され、そこから使用
できるようにされる。
【０００９】
一実施形態は、第１のプロセッサ、第２のプロセッサ、および第３のプロセッサを含む
コンピュータクラスタを提供する。クラスタは、第１のプロセッサ、第２のプロセッサ、
または第３のプロセッサのうちの少なくとも１つと通信している少なくとも１つのコンピ
ュータ可読媒体を含む。第１のカーネルが、少なくとも１つのコンピュータ可読媒体に常
駐し、コマンドを、第１のプロセッサで実行されるコードに変換するように構成される。
第１のクラスタノードモジュールが、少なくとも１つのコンピュータ可読媒体に常駐する
。第１のクラスタノードモジュールは、第１のカーネルへコマンドを送信し、ユーザイン
タフェースからコマンドを受信するように構成される。第２のカーネルが、少なくとも１
つのコンピュータ可読媒体に常駐する。第２のカーネルは、コマンドを、第２のプロセッ
サで実行されるコードに変換するように構成される。第２のクラスタノードモジュールが
、少なくとも１つのコンピュータ可読媒体に常駐する。第２のクラスタノードモジュール
は、第２のカーネルへコマンドを送信するように構成され、第１のクラスタノードモジュ
ールと通信する。第３のカーネルが、少なくとも１つのコンピュータ可読媒体に常駐する
。第３のカーネルは、コマンドを、第３のプロセッサで実行されるコードに変換するよう
に構成される。第３のクラスタノードモジュールが、少なくとも１つのコンピュータ可読
媒体に常駐する。第３のクラスタノードモジュールは、第３のカーネルへコマンドを送信
するように構成され、第１のクラスタノードモジュールおよび第２のクラスタノードモジ
ュールと通信するように構成される。第１のクラスタノードモジュールは、第２および第
３のクラスタノードモジュールから発せられたメッセージが記憶されるデータ構造を備え
る。
【００１０】
別の実施形態は、複数のノードと、ユーザインタフェースおよびプログラムコード命令
を翻訳するシングルノードカーネルを含むソフトウェアパッケージと、を含むコンピュー
タクラスタを提供する。クラスタノードモジュールが、シングルノードカーネルおよび他
のクラスタノードモジュールと通信するように構成される。クラスタノードモジュールは
、互いに通信しているいくつかのクラスタノードモジュールがクラスタとして動作するよ
うに、ユーザインタフェースからの命令を受け付け、それらの命令のうちの少なくともい
くつかを翻訳する。クラスタノードモジュールは、ユーザインタフェースからは、シング
ルノードカーネルのように見える。一実施形態では、この、シングルノードカーネルは、
Ｍａｔｈｅｍａｔｉｃａカーネルを含む。実施形態によっては、ユーザインタフェースは
、Ｍａｔｈｅｍａｔｉｃａフロントエンドまたはコマンドラインのうちの少なくとも一方
を含むことが可能である。実施形態によっては、クラスタノードモジュールは、ＭＰＩ呼
び出しの少なくとも一部を実施するライブラリ呼び出しを含むツールキットを含む。実施
形態によっては、クラスタノードモジュールは、高級クラスタコンピューティングコマン
ドを含むツールキットを含む。一実施形態では、クラスタシステムは、複数のＭａｃｉｎ
ｔｏｓｈ（登録商標）コンピュータ（「Ｍａｃ」）、Ｗｉｎｄｏｗｓ（登録商標）ベース
のパーソナルコンピュータ（「ＰＣ」）、および／またはＵｍｘ／Ｌｉｎｕｘベースのワ
ークステーションを含むことが可能である。
【００１１】
さらなる実施形態は、複数のノードを含むコンピュータクラスタを提供する。各ノード
は、ユーザインタフェースのプログラムコードと、ユーザ命令を翻訳するように構成され
たシングルノードカーネルモジュールのプログラムコードと、を備えるコンピュータ可読
媒体にアクセスするように構成される。クラスタは、複数のクラスタノードモジュールを
含む。この複数のクラスタノードモジュールが互いに通信してクラスタとして動作するよ
うに、各クラスタノードモジュールは、シングルノードカーネルおよび１つまたは複数の
他のクラスタノードモジュールと通信することと、ユーザインタフェースから命令を受け
付けることと、ユーザ命令の少なくともいくつかを翻訳することと、を行うように構成さ
れる。通信ネットワークが、これらのノードを接続する。複数のクラスタノードモジュー
ルの１つが、結果をユーザインタフェースへ返す。
【００１２】
別の実施形態は、コンピュータクラスタにおいてコマンドを評価する方法を提供する。
ユーザインタフェースまたはスクリプトの少なくとも一方からのコマンドが、コンピュー
タクラスタ内の１つまたは複数のクラスタノードモジュールに伝達される。その１つまた
は複数のクラスタノードモジュールのそれぞれが、そのコマンドに基づくメッセージを、
そのクラスタノードモジュールに関連付けられた各カーネルモジュールに伝達する。その
１つまたは複数のクラスタノードモジュールのそれぞれが、そのクラスタノードモジュー
ルに関連付けられた各カーネルモジュールから結果を受け取る。その１つまたは複数のク
ラスタノードモジュールのうちの少なくとも１つが、他のクラスタノードモジュールから
のメッセージに応答する。
【００１３】
別の実施形態は、複数のノードにおいてＭａｔｈｅｍａｔｉｃａコードを実行するコン
ピューティングシステムを提供する。このコンピューティングシステムは、第１のノード
で実行されている第１のＭａｔｈｅｍａｔｉｃａカーネルと通信する第１のノードモジュ
ールと、第２のノードで実行されている第２のＭａｔｈｅｍａｔｉｃａカーネルと通信す
る第２のノードモジュールと、第３のノードで実行されている第３のＭａｔｈｅｍａｔｉ
ｃａカーネルと通信する第３のノードモジュールと、を含む。第１のノードモジュール、
第２のノードモジュール、および第３のノードモジュールは、ピアツーピアアーキテクチ
ャを用いて互いに通信するように構成される。実施形態によっては、第１のノードモジュ
ール、第２のノードモジュール、および第３のノードモジュールのそれぞれは、他のノー
ドモジュールから発せられたメッセージを保持するデータ構造と、メッセージの受信先と
して期待されるロケーション、およびそのメッセージの送信元として期待されるノードの
識別子を指定するデータを保持するデータ構造と、を含む。
【００１４】
図面を参照しながら、種々の特徴を実施する全体のアーキテクチャを説明する。各図面
および関連する説明は、実施形態を例示するために提供されており、本開示の範囲を限定
するものではない。図面全体を通じて、参照される要素の間の対応を示すために、参照符
号を繰り返し使用している。
【図面の簡単な説明】
【００１５】
【図１】コンピュータクラスタの一実施形態のブロック図である。
【図２】コンピュータクラスタの一実施形態で実行されているソフトウェアモジュール同士の関係を示すブロック図である。
【図３】クラスタノードモジュールの一実施形態のブロック図である。
【図４】クラスタ初期化プロセスの一実施形態を示すフローチャートである。
【図５】クラスタノードモジュールの動作の一実施形態を示すフローチャートである。
【発明を実施するための形態】
【００１６】
本明細書では、例示を目的として、いくつかの実施形態を、Ｍａｔｈｅｍａｔｉｃａソ
フトウェアを用いるクラスタコンピューティングのコンテキストで説明する。本開示は、
単一のソフトウェアプログラムに限定されず、本システムおよび方法は、他のアプリケー
ションソフトウェアとともに使用されることが可能であり、そのようなソフトウェアとし
て、たとえば、Ｍａｐｌｅ（登録商標）、ＭＡＴＬＡＢ（登録商標）、ＭａｔｈＣＡＤ（
登録商標）、Ａｐｐｌｅ  Ｓｈａｋｅ（登録商標）、Ａｐｐｌｅ（登録商標）  Ｃｏｍｐ
ｒｅｓｓｏｒ、ＩＤＬ（登録商標）、他の、インタプリタまたはカーネルを用いるアプリ
ケーション、Ｍｉｃｒｏｓｏｆｔ  Ｅｘｃｅｌ（登録商標）、Ａｄｏｂｅ  Ａｆｔｅｒ  
Ｅｆｆｅｃｔｓ（登録商標）、Ａｄｏｂｅ  Ｐｒｅｍｉｅｒｅ（登録商標）、Ａｄｏｂｅ
Ｐｈｏｔｏｓｈｏｐ（登録商標）、Ａｐｐｌｅ  Ｆｉｎａｌ  Ｃｕｔ  Ｐｒｏ（登録商
標）、Ａｐｐｌｅ  ｉＭｏｖｉｅ（登録商標）などがある。しかしながら、いくつかの図
面および／または説明は、Ｍａｔｈｅｍａｔｉｃａを実行するコンピュータクラスタの実
施形態に関連している。本システムは、多様な用途を含むことが可能であり、そのような
用途には、これらに限定されないが、学生、教育者、科学者、技術者、数学者、研究者、
技能者などが含まれる。また、他の実施形態では、本システムおよび方法は、単一モジュ
ールとして実装されること、および／または、他の様々なモジュールとともに実装される
ことが可能であることも理解されよう。さらに、本明細書に記載の個々の実施態様は、本
開示を限定するためではなく、本開示の例を示すために説明されている。
Ｉ．概要
【００１７】
本明細書に記載のクラスタコンピューティングシステムは、一般に、１つまたは複数の
通信ネットワークを介して互いに接続された１つまたは複数のコンピュータシステムを含
む。この通信ネットワークは、ローカルエリアネットワーク（「ＬＡＮ」）、ワイドエリ
アネットワーク（「ＷＡＮ」）、イントラネット、インターネットなどのうちの１つまた
は複数を含むことが可能である。一実施形態では、コンピュータシステムは、たとえば、
１つまたは複数のプロセッサコア（「ノード」）を含むことが可能なマイクロプロセッサ
のような、１つまたは複数のプロセッサを備える。「ノード」という用語は、コードのシ
ングルスレッド実行が可能なプロセッサユニットまたはプロセッササブユニットを意味す
る。プロセッサは、たとえば、ランダムアクセスメモリ（「ＲＡＭ」）のような、１つま
たは複数のメモリ装置、および／または、たとえば、ハードディスクのような、１つまた
は複数の光ストレージ装置に接続されることが可能である。プロセッサとそのような他の
装置との間の通信は、たとえば、コンピュータシステムの１つまたは複数のローカルバス
を介して、あるいは、ＬＡＮ、ＷＡＮ、ストレージエリアネットワーク（「ＳＡＮ」）、
および／または他の任意の、コンピュータシステムコンポーネント間で信号を搬送するこ
とが可能な通信ネットワークを介して、行われることが可能である。一実施形態では、カ
ーネルのような、１つまたは複数のソフトウェアモジュールが、相互接続された複数のコ
ンピュータシステムの中のノードで実行される。一実施形態では、カーネルは、単一ノー
ドでのみ実行されるように設計される。一実施形態では、クラスタコンピューティング機
能性を実装するために、クラスタノードモジュールが、カーネルと通信し、クラスタノー
ドモジュール同士で通信する。
【００１８】
図１は、コンピュータクラスタ１００の一実施形態のブロック図であり、ここでは、コ
ンピュータシステム１１０、１２０、１３０が、通信ネットワーク１０２を介して互いに
通信している。ネットワーク１０２は、ＬＡＮ、ＷＡＮ、無線ネットワーク、イントラネ
ット、またはインターネットのうちの１つまたは複数を含む。本コンピュータクラスタの
一実施形態では、コンピュータシステム１１０は、プロセッサ１１２ａ、１１２ｂ、メモ
リ１１４、およびオプションのストレージ１１６を含む。他のコンピュータシステム１２
０、１３０も同様の装置を含むことが可能であり、それらの装置は、一般に、コンピュー
タシステム内で、ローカルバス（図示せず）のようなローカル通信アーキテクチャを介し
て互いに通信している。コンピュータシステムは、１つまたは複数のプロセッサを含むこ
とが可能であり、各プロセッサは、シングルスレッド実行が可能な、１つまたは複数のプ
ロセッサコアを含むことが可能である。プロセッサコアは、一般には、独立したマイクロ
プロセッサであるが、複数のプロセッサコアが単一チップパッケージに含まれることも可
能である。シングルスレッド実行を行うように設計されたソフトウェアコードは、一般に
、一度に１つのプロセッサコアで実行されることが可能である。たとえば、シングルスレ
ッドソフトウェアコードは、典型的には、コンピュータシステム内に複数のプロセッサコ
アがあることの恩恵を受けない。
【００１９】
図２は、コンピュータクラスタ１００の一実施形態で実行されているソフトウェアモジ
ュール同士の関係を示すブロック図である。図２に示された実施形態では、カーネルモジ
ュール２０６ａ〜ｅは、シングルスレッド実行を行うように設計されている。たとえば、
図１に示されたプロセッサ１１２ａ、１１２ｂ、１２２ａ、１２２ｂ、１３２のそれぞれ
が、プロセッサコアを１つだけ含む場合、コンピュータシステム１１０のメモリ１１４に
ロードされた２つのカーネルモジュール（たとえば、カーネルモジュール２０６ａ、２０
６ｂ）は、２つのプロセッサ１１２ａ、１１２ｂの処理用帯域幅の少なくとも一部を活用
することが可能である。同様に、コンピュータシステム１２０のメモリ１２４にロードさ
れた２つのカーネルモジュール２０６ｃ、２０６ｄは、２つのプロセッサ１２２ａ、１２
２ｂの処理用帯域幅の少なくとも一部を活用することが可能である。同様に、コンピュー
タシステム１３０のプロセッサ１３２の帯域幅は、コンピュータシステムのメモリ１３４
にロードされた、クラスタノードモジュール２０４ｅの単一インスタンスによって利用さ
れることが可能である。
【００２０】
図２に示された実施形態では、カーネルモジュール２０６ａ〜ｅのそれぞれが、単一ク
ラスタノードモジュール２０４ａ〜ｅとそれぞれ通信している。たとえば、カーネルモジ
ュール２０６ａは、クラスタノードモジュール２０４ａと通信しており、カーネルモジュ
ール２０６ｂは、クラスタノードモジュール２０６ｂと通信しており、他も同様である。
一実施形態では、クラスタノードモジュール２０４ａ〜ｅの１つのインスタンスが、コン
ピュータシステムで実行されているカーネルモジュール２０６ａ〜ｅのインスタンスごと
に、コンピュータシステムのメモリ１１４、１２４、１３４にロードされている。図２に
示されるように、クラスタノードモジュール２０４ａ〜ｅのそれぞれが、他のクラスタノ
ードモジュール２０４ａ〜ｅのそれぞれと通信している。たとえば、１つのクラスタノー
ドモジュール２０４ａは、他のすべてのクラスタノードモジュール２０４ｂ〜ｅと通信し
ている。クラスタノードモジュール２０４ａは、たとえば、両方のクラスタノードモジュ
ール２０４ａ〜ｂが同じコンピュータシステム１１０にあるプロセッサ１１２ａ、１１２
ｂで実行されている場合に、ローカルバス（図示せず）を介して別のクラスタノードモジ
ュール２０４ｂと通信することが可能である。クラスタノードモジュール２０４ａはまた
、たとえば、クラスタノードモジュール２０４ａ、ｃが、異なるコンピュータシステム１
１０、１２０にあるプロセッサ１１２ａ、１２２ａで実行されている場合に、通信ネット
ワーク１０２を介して別のクラスタノードモジュール２０４ｃと通信することも可能であ
る。
【００２１】
図２に示されるように、たとえば、Ｍａｔｈｅｍａｔｉｃａフロントエンドおよび／ま
たはコマンドラインインタフェースなどのオプションのユーザインタフェースモジュール
２０２が、クラスタノードモジュール２０４ａに接続可能である。ユーザインタフェース
モジュールは、クラスタノードモジュール２０４ａが実行されている、同じコンピュータ
システム１１０および／または同じマイクロプロセッサ１１２ａで実行可能である。クラ
スタノードモジュール２０４ａ〜ｅは、シングルスレッドカーネルモジュールにクラスタ
コンピューティング機能を実装するＭＰＩ呼び出しおよび／または高度クラスタ機能を提
供する。クラスタノードモジュール２０４ａ〜ｅは、ユーザインタフェースモジュール２
０２から見れば、カーネルモジュール２０６ａのように見えてカーネルモジュール２０６
ａのようにふるまうように構成されている。同様に、クラスタノードモジュール２０２ａ
〜ｅは、カーネルモジュール２０６ａから見れば、ユーザインタフェースモジュール２０
２のように見えてユーザインタフェースモジュール２０２のようにふるまうように構成さ
れている。第１のクラスタノードモジュール２０４ａは、他の１つまたは複数のクラスタ
ノードモジュール２０４ｂ、２０４ｃなどと通信しており、これらのそれぞれが、ＭＰＩ
呼び出しおよび／または高度クラスタコマンドのセットを提供する。一実施形態では、Ｍ
ＰＩは、コンピュータクラスタにおけるノード間メッセージ送信に用いられることが可能
である。
【００２２】
「隣接する」カーネル同士の間に限らない、任意の２つ以上のクラスタノードモジュー
ルの間（たとえば、クラスタノードモジュール２０４ａと別のクラスタノードモジュール
２０４ｃとの間）で通信が行われることが可能である。クラスタノードモジュール２０４
ａ〜ｅのそれぞれは、それぞれのカーネルモジュール２０６ａ〜ｅと通信している。した
がって、クラスタノードモジュール２０４ａは、カーネルモジュール２０６ａと通信して
いる。ＭＰＩ呼び出しおよび高度クラスタコマンドは、オプションのユーザインタフェー
スモジュール２０８から受け取られたプログラムコードを並列化し、タスクをカーネルモ
ジュール２０６ａ〜ｅに分配するために用いられる。クラスタノードモジュール２０４ａ
〜ｅは、それらのタスクが実行されている間のカーネルモジュール２０６ａ〜ｅ間の通信
を提供する。カーネルモジュール２０６ａ〜ｅによって実行された評価の結果は、クラス
タノードモジュール２０４ａ〜ｅを介して第１のクラスタノードモジュール２０４ａへ返
され、第１のクラスタノードモジュール２０４ａは、それらの結果をユーザインタフェー
スモジュール２０８へ伝達する。
【００２３】
スレッド実行の間のカーネルモジュール２０６ａ〜ｅ間の相互通信は、クラスタノード
モジュール２０４ａ〜ｅによって可能にされ、たとえば、様々な種類の数学的問題および
科学的問題に取り組むことに関して有利に働く。クラスタコンピューティングによって提
供される相互通信は、並列計算の過程におけるノード間の情報交換を可能にする。本開示
の諸実施形態は、そのような相互通信を、Ｍａｔｈｅｍａｔｉｃａのようなソフトウェア
プログラムに提供する一方、グリッドコンピューティングソリューションは、１つのマス
タノードと多数のスレーブノードとの間でのみ通信を実施することが可能である。グリッ
ドコンピューティングでは、スレッド実行の間は、スレーブノード間で通信を行うことが
できない。
【００２４】
本明細書では、いくつかの実施形態の概要を与える目的で、本発明の特定の態様、利点
、利益、および新規な特徴について説明する。本発明の任意の特定の実施形態によれば、
そのような利点または利益のすべてが、必ずしも実現可能ではないことを理解されたい。
したがって、たとえば、当業者であれば理解されるように、本発明は、本明細書で教示さ
れるように１つまたは複数の利点を達成する様式で、本明細書で教示または提案されうる
ような他の利点または利益を必ずしも達成することなく、実施または実行されることが可
能である。
ＩＩ．コンピュータクラスタ１００
【００２５】
図１に示されるように、クラスタシステム１００の一実施形態は、通信ネットワーク１
０２を介して互いに通信しているコンピュータシステム１１０、１２０、１３０を含む。
第１のコンピュータシステム１１０は、１つまたは複数のプロセッサ１１２ａ〜ｂ、メモ
リ装置１１４、およびオプションのストレージ装置１１６を含むことが可能である。同様
に、第２のコンピュータシステム１２０は、１つまたは複数のプロセッサ１２２ａ〜ｂ、
メモリ装置１２４、およびオプションのストレージ装置１２６を含むことが可能である。
同様に、第３のコンピュータシステム１３０は、１つまたは複数のプロセッサ１３２、メ
モリ装置１３４、およびオプションのストレージ装置１３６を含むことが可能である。コ
ンピュータシステム１１０、１２０、１３０のそれぞれは、通信ネットワーク１０２に接
続されるためのネットワークインタフェース（図示せず）を含み、通信ネットワーク１０
２は、ＬＡＮ、ＷＡＮ、イントラネット、無線ネットワーク、および／またはインターネ
ットのうちの１つまたは複数を含むことが可能である。
Ａ．コンピュータシステム１１０
【００２６】
一実施形態では、第１のコンピュータシステム１１０は、コンピュータクラスタ１００
の一部として、ネットワーク１０２を介して、他のコンピュータシステム１２０、１３０
と通信している。一実施形態では、コンピュータシステム１１０は、１つまたは複数のプ
ロセッサ１１２ａ〜ｂ、メモリ装置１１４、オプションのストレージ装置１１６、ならび
に、ネットワーク１０２との通信のためのネットワークインタフェースモジュール（図示
せず）を含むパーソナルコンピュータ、ワークステーション、サーバ、またはブレードで
ある。
１．プロセッサ１１２ａ〜ｂ
【００２７】
一実施形態では、コンピュータシステム１１０は、１つまたは複数のプロセッサ１１２
ａ〜ｂを含む。プロセッサ１１２ａ〜ｂは、１つまたは複数の汎用シングルコアマイクロ
プロセッサまたはマルチコアマイクロプロセッサであることが可能であり、そのようなプ
ロセッサとして、たとえば、Ｐｅｎｔｉｕｍ（登録商標）プロセッサ、Ｐｅｎｔｉｕｍ（
登録商標）  ＩＩプロセッサ、Ｐｅｎｔｉｕｍ（登録商標）  Ｐｒｏプロセッサ、Ｐｅｎ
ｔｉｕｍ（登録商標）  ＩＩＩプロセッサ、Ｐｅｎｔｉｕｍ（登録商標）  ４プロセッサ
、Ｃｏｒｅ  Ｄｕｏ（登録商標）プロセッサ、Ｃｏｒｅ  ２  Ｄｕｏ（登録商標）プロセ
ッサ、Ｘｅｏｎ（登録商標）プロセッサ、Ｉｔａｎｉｕｍ（登録商標）プロセッサ、Ｐｅ
ｎｔｉｕｍ（登録商標）  Ｍプロセッサ、ｘ８６プロセッサ、Ａｔｈｌｏｎ（登録商標）
プロセッサ、８０５１プロセッサ、ＭＩＰＳ（登録商標）プロセッサ、ＰｏｗｅｒＰＣ（
登録商標）プロセッサ、ＡＬＰＨＡ（登録商標）プロセッサなどがある。さらに、プロセ
ッサ１１２ａ〜ｂのうちの１つまたは複数が、デジタル信号プロセッサのような専用マイ
クロプロセッサであることが可能である。コンピュータシステム１１０内にあるすべての
プロセッサ１１２ａ〜ｂの中のプロセッサコア（たとえば、シングルスレッド実行が可能
なプロセッサユニット）の総数は、コンピュータシステム１１０内で使用可能なノードの
数に対応する。たとえば、プロセッサ１１２ａ〜ｂのそれぞれが、２つのプロセッサコア
を有するＣｏｒｅ  ２  Ｄｕｏ（登録商標）プロセッサであった場合、コンピュータシス
テム１１０は、全部で４つのノードを有することになる。各ノードは、シングルスレッド
カーネルモジュールのようなプログラムモジュールの１つまたは複数のインスタンスを実
行することが可能である。
２．ネットワークインタフェースモジュール
【００２８】
コンピュータシステム１１０はさらに、コンピュータシステム１１０と他のコンピュー
タシステム１２０、１３０との間の、通信ネットワーク１０２を介する通信を容易にする
ネットワークインタフェースモジュール（図示せず）を含むことが可能である。
【００２９】
ネットワークインタフェースモジュールは、様々なネットワークプロトコルを使用する
ことが可能である。一実施形態では、ネットワークインタフェースモジュールは、ＴＣＰ
／ＩＰを含む。しかしながら、他の種類のネットワーク通信プロトコル、たとえば、ポイ
ントツーポイントプロトコル（「ＰＰＰ」）、サーバメッセージブロック（「ＳＭＢ」）
、シリアルラインインターネットプロトコル（「ＳＬＩＰ」）、トンネリングＰＰＰ、Ａ
ｐｐｌｅＴａｌｋなども使用可能であることを理解されたい。
３．メモリ１１４およびストレージ１１６
【００３０】
コンピュータシステム１１０は、メモリ１１４を含むことが可能である。メモリ１１４
は、たとえば、プロセッサキャッシュメモリ（プロセッサコア別のキャッシュメモリや、
複数のプロセッサコアによって共有されるキャッシュメモリなど）、動的ランダムアクセ
スメモリ（「ＤＲＡＭ」）、静的ランダムアクセスメモリ（「ＳＲＡＭ」）、または、他
の任意の種類の、コンピュータデータ、命令、またはプログラムコードを記憶できるメモ
リ装置を含むことが可能である。コンピュータシステム１１０はさらに、オプションのス
トレージ１１６を含むことが可能である。ストレージ１１６は、たとえば、１つまたは複
数のハードディスクドライブ、フロッピーディスク、フラッシュメモリ、磁気ストレージ
メディア、ＣＤ−ＲＯＭ、ＤＶＤ、光ストレージメディア、または他の任意の種類の、コ
ンピュータデータ、命令、およびプログラムコードを記憶できるストレージ装置を含むこ
とが可能である。
４．コンピュータシステム１１０情報
【００３１】
コンピュータシステム１１０は、様々なオペレーティングシステムとともに使用される
ことが可能であり、たとえば、Ｍｉｃｒｏｓｏｆｔ（登録商標）  Ｗｉｎｄｏｗｓ（登録
商標）  ３．Ｘ、Ｗｉｎｄｏｗｓ  ９５（登録商標）、Ｗｉｎｄｏｗｓ  ９８（登録商標
）、Ｗｉｎｄｏｗｓ  ＮＴ（登録商標）、Ｗｉｎｄｏｗｓ  ２０００（登録商標）、Ｗｉ
ｎｄｏｗｓ  ＸＰ（登録商標）、Ｗｉｎｄｏｗｓ  ＣＥ（登録商標）、Ｐａｌｍ  Ｐｉｌ
ｏｔ  ＯＳ、ＯＳ／２、Ａｐｐｌｅ（登録商標）  ＭａｃＯＳ（登録商標）、ＭａｃＯＳ
Ｘ（登録商標）、ＭａｃＯＳ  Ｘ  Ｓｅｒｖｅｒ（登録商標）、ディスク  オペレーテ
ィングシステム（ＤＯＳ）、ＵＮＩＸ、Ｌｉｎｕｘ（登録商標）、ＶｘＷｏｒｋｓ（ＩＢ
Ｍ（登録商標）  ＯＳ／２（登録商標））、Ｓｕｎ  ＯＳ、Ｓｏｌａｒｉｓ  ＯＳ、ＩＲ
ＩＸ  ＯＳなどのオペレーティングシステムとともに使用されることが可能である。
【００３２】
一実施形態では、コンピュータシステム１１０は、パーソナルコンピュータ、ラップト
ップコンピュータ、Ｂｌａｃｋｂｅｒｒｙ（登録商標）装置、ポータブルコンピューティ
ング装置、サーバ、コンピュータワークステーション、個々のコンピュータからなるロー
カルエリアネットワーク、インタラクティブキオスク、携帯情報端末、インタラクティブ
無線通信装置、ハンドヘルドコンピュータ、埋め込みコンピューティング装置などである
。
【００３３】
当業者であれば理解されるように、コンピュータシステム１１０は、様々なサブルーチ
ン、プロシージャ、定義文、およびマクロを含むことが可能である。上記各モジュールは
、典型的には、別々にコンパイルされて、１つの実行可能プログラムにリンクされる。し
かしながら、当業者であれば理解されるように、それらのモジュールのうちの選択された
モジュールによって実行されたプロセスは、その他のモジュールのいずれかに任意に再分
配されるか、１つのモジュールにまとめられるか、共有可能なダイナミックリンクライブ
ラリのかたちで使用可能にされるか、他の任意の論理様式で分割されることが可能である
。
Ｂ．コンピュータシステム１２０
【００３４】
一実施形態では、第２のコンピュータシステム１２０は、コンピュータクラスタ１００
の一部として、ネットワーク１０２を介して、他のコンピュータシステム１１０、１３０
と通信している。一実施形態では、コンピュータシステム１２０は、１つまたは複数のプ
ロセッサ１２２ａ〜ｂ、メモリ装置１２４、オプションのストレージ装置１２６、ならび
に、ネットワーク１０２との通信のためのネットワークインタフェースモジュール（図示
せず）を含むパーソナルコンピュータ、ワークステーション、サーバ、またはブレードで
ある。
１．プロセッサ１１２ａ〜ｂ
【００３５】
一実施形態では、コンピュータシステム１２０は、１つまたは複数のプロセッサ１２２
ａ〜ｂを含む。プロセッサ１２２ａ〜ｂは、１つまたは複数の汎用シングルコアマイクロ
プロセッサまたはマルチコアマイクロプロセッサであることが可能であり、そのようなプ
ロセッサとして、たとえば、Ｐｅｎｔｉｕｍ（登録商標）プロセッサ、Ｐｅｎｔｉｕｍ（
登録商標）  ＩＩプロセッサ、Ｐｅｎｔｉｕｍ（登録商標）  Ｐｒｏプロセッサ、Ｐｅｎ
ｔｉｕｍ（登録商標）  ＩＩＩプロセッサ、Ｐｅｎｔｉｕｍ（登録商標）  ４プロセッサ
、Ｃｏｒｅ  Ｄｕｏ（登録商標）プロセッサ、Ｃｏｒｅ  ２  Ｄｕｏ（登録商標）プロセ
ッサ、Ｘｅｏｎ（登録商標）プロセッサ、Ｉｔａｎｉｕｍ（登録商標）プロセッサ、Ｐｅ
ｎｔｉｕｍ（登録商標）  Ｍプロセッサ、ｘ８６プロセッサ、Ａｔｈｌｏｎ（登録商標）
プロセッサ、８０５１プロセッサ、ＭＩＰＳ（登録商標）プロセッサ、ＰｏｗｅｒＰＣ（
登録商標）プロセッサ、ＡＬＰＨＡ（登録商標）プロセッサなどがある。さらに、プロセ
ッサ１２２ａ〜ｂは、デジタル信号プロセッサのような任意の専用マイクロプロセッサで
あることが可能である。コンピュータシステム１２０内にあるすべてのプロセッサ１２２
ａ〜ｂの中のプロセッサコア（たとえば、シングルスレッド実行が可能なプロセッサユニ
ット）の総数は、コンピュータシステム１２０内で使用可能なノードの数に対応する。た
とえば、プロセッサ１２２ａ〜ｂのそれぞれが、２つのプロセッサコアを有するＣｏｒｅ
２  Ｄｕｏ（登録商標）プロセッサであった場合、コンピュータシステム１２０は、全
部で４つのノードを有することになる。各ノードは、シングルスレッドカーネルモジュー
ルのようなプログラムモジュールの１つまたは複数のインスタンスを実行することが可能
である。
２．ネットワークインタフェースモジュール
【００３６】
コンピュータシステム１２０はさらに、コンピュータシステム１２０と他のコンピュー
タシステム１１０、１３０との間の、通信ネットワーク１０２を介する通信を容易にする
ネットワークインタフェースモジュール（図示せず）を含むことが可能である。
【００３７】
ネットワークインタフェースモジュールは、様々なネットワークプロトコルを使用する
ことが可能である。一実施形態では、ネットワークインタフェースモジュールは、ＴＣＰ
／ＩＰを含む。しかしながら、他の種類のネットワーク通信プロトコル、たとえば、ポイ
ントツーポイントプロトコル（「ＰＰＰ」）、サーバメッセージブロック（「ＳＭＢ」）
、シリアルラインインターネットプロトコル（「ＳＬＩＰ」）、トンネリングＰＰＰ、Ａ
ｐｐｌｅＴａｌｋなども使用可能であることを理解されたい。
３．メモリ１２４およびストレージ１２６
【００３８】
コンピュータシステム１２０は、メモリ１２４を含むことが可能である。メモリ１２４
は、たとえば、プロセッサキャッシュメモリ（プロセッサコア別のキャッシュメモリや、
複数のプロセッサコアによって共有されるキャッシュメモリなど）、動的ランダムアクセ
スメモリ（「ＤＲＡＭ」）、静的ランダムアクセスメモリ（「ＳＲＡＭ」）、または、他
の任意の種類の、コンピュータデータ、命令、またはプログラムコードを記憶できるメモ
リ装置を含むことが可能である。コンピュータシステム１２０はさらに、オプションのス
トレージ１２６を含むことが可能である。ストレージ１２６は、たとえば、１つまたは複
数のハードディスクドライブ、フロッピーディスク、フラッシュメモリ、磁気ストレージ
メディア、ＣＤ−ＲＯＭ、ＤＶＤ、光ストレージメディア、または他の任意の種類の、コ
ンピュータデータ、命令、およびプログラムコードを記憶できるストレージ装置を含むこ
とが可能である。
４．コンピュータシステム１２０情報
【００３９】
コンピュータシステム１２０は、様々なオペレーティングシステムとともに使用される
ことが可能であり、たとえば、Ｍｉｃｒｏｓｏｆｔ（登録商標）  Ｗｉｎｄｏｗｓ（登録
商標）  ３．Ｘ、Ｗｉｎｄｏｗｓ  ９５（登録商標）、Ｗｉｎｄｏｗｓ  ９８（登録商標
）、Ｗｉｎｄｏｗｓ  ＮＴ（登録商標）、Ｗｉｎｄｏｗｓ  ２０００（登録商標）、Ｗｉ
ｎｄｏｗｓ  ＸＰ（登録商標）、Ｗｉｎｄｏｗｓ  ＣＥ（登録商標）、Ｐａｌｍ  Ｐｉｌ
ｏｔ  ＯＳ、ＯＳ／２、Ａｐｐｌｅ（登録商標）  ＭａｃＯＳ（登録商標）、ＭａｃＯＳ
Ｘ（登録商標）、ＭａｃＯＳ  Ｘ  Ｓｅｒｖｅｒ（登録商標）、ディスク  オペレーテ
ィングシステム（ＤＯＳ）、ＵＮＩＸ、Ｌｉｎｕｘ（登録商標）、ＶｘＷｏｒｋｓ（ＩＢ
Ｍ（登録商標）  ＯＳ／２（登録商標））、Ｓｕｎ  ＯＳ、Ｓｏｌａｒｉｓ  ＯＳ、ＩＲ
ＩＸ  ＯＳなどのオペレーティングシステムとともに使用されることが可能である。
【００４０】
一実施形態では、コンピュータシステム１２０は、パーソナルコンピュータ、ラップト
ップコンピュータ、Ｂｌａｃｋｂｅｒｒｙ（登録商標）装置、ポータブルコンピューティ
ング装置、サーバ、コンピュータワークステーション、個々のコンピュータからなるロー
カルエリアネットワーク、インタラクティブキオスク、携帯情報端末、インタラクティブ
無線通信装置、ハンドヘルドコンピュータ、埋め込みコンピューティング装置などである
。
【００４１】
当業者であれば理解されるように、コンピュータシステム１２０は、様々なサブルーチ
ン、プロシージャ、定義文、およびマクロを含むことが可能である。上記各モジュールは
、典型的には、別々にコンパイルされて、１つの実行可能プログラムにリンクされる。し
かしながら、当業者であれば理解されるように、それらのモジュールのうちの選択された
モジュールによって実行されたプロセスは、その他のモジュールのいずれかに任意に再分
配されるか、１つのモジュールにまとめられるか、共有可能なダイナミックリンクライブ
ラリのかたちで使用可能にされるか、他の任意の論理様式で分割されることが可能である
。
Ｃ．コンピュータシステム１３０
【００４２】
一実施形態では、第３のコンピュータシステム１３０は、コンピュータクラスタ１００
の一部として、ネットワーク１０２を介して、他のコンピュータシステム１１０、１２０
と通信している。一実施形態では、コンピュータシステム１３０は、１つまたは複数のプ
ロセッサ１３２、メモリ装置１３４、オプションのストレージ装置１３６、ならびに、ネ
ットワーク１０２との通信のためのネットワークインタフェースモジュール（図示せず）
を含むパーソナルコンピュータ、ワークステーション、サーバ、またはブレードである。
１．プロセッサ１１２ａ〜ｂ
【００４３】
一実施形態では、コンピュータシステム１３０は、プロセッサ１３２を含む。プロセッ
サ１３２は、汎用シングルコアマイクロプロセッサまたはマルチコアマイクロプロセッサ
であることが可能であり、そのようなプロセッサとして、たとえば、Ｐｅｎｔｉｕｍ（登
録商標）プロセッサ、Ｐｅｎｔｉｕｍ（登録商標）  ＩＩプロセッサ、Ｐｅｎｔｉｕｍ（
登録商標）  Ｐｒｏプロセッサ、Ｐｅｎｔｉｕｍ（登録商標）  ＩＩＩプロセッサ、Ｐｅ
ｎｔｉｕｍ（登録商標）  ４プロセッサ、Ｃｏｒｅ  Ｄｕｏ（登録商標）プロセッサ、Ｃ
ｏｒｅ  ２  Ｄｕｏ（登録商標）プロセッサ、Ｘｅｏｎ（登録商標）プロセッサ、Ｉｔａ
ｎｉｕｍ（登録商標）プロセッサ、Ｐｅｎｔｉｕｍ（登録商標）  Ｍプロセッサ、ｘ８６
プロセッサ、Ａｔｈｌｏｎ（登録商標）プロセッサ、８０５１プロセッサ、ＭＩＰＳ（登
録商標）プロセッサ、ＰｏｗｅｒＰＣ（登録商標）プロセッサ、ＡＬＰＨＡ（登録商標）
プロセッサなどがある。さらに、プロセッサ１３２は、デジタル信号プロセッサのような
任意の専用マイクロプロセッサであることが可能である。コンピュータシステム１３０内
にあるプロセッサ１３２の中のプロセッサコア（たとえば、シングルスレッド実行が可能
なプロセッサユニット）の総数は、コンピュータシステム１３０内で使用可能なノードの
数に対応する。たとえば、プロセッサ１３２が、２つのプロセッサコアを有するＣｏｒｅ
２  Ｄｕｏ（登録商標）プロセッサであった場合、コンピュータシステム１３０は、２
つのノードを有することになる。各ノードは、シングルスレッドカーネルモジュールのよ
うなプログラムモジュールの１つまたは複数のインスタンスを実行することが可能である
。
２．ネットワークインタフェースモジュール
【００４４】
コンピュータシステム１３０はさらに、コンピュータシステム１３０と他のコンピュー
タシステム１１０、１２０との間の、通信ネットワーク１０２を介する通信を容易にする
ネットワークインタフェースモジュール（図示せず）を含むことが可能である。
【００４５】
ネットワークインタフェースモジュールは、様々なネットワークプロトコルを使用する
ことが可能である。一実施形態では、ネットワークインタフェースモジュールは、ＴＣＰ
／ＩＰを含む。しかしながら、他の種類のネットワーク通信プロトコル、たとえば、ポイ
ントツーポイントプロトコル（「ＰＰＰ」）、サーバメッセージブロック（「ＳＭＢ」）
、シリアルラインインターネットプロトコル（「ＳＬＩＰ」）、トンネリングＰＰＰ、Ａ
ｐｐｌｅＴａｌｋなども使用可能であることを理解されたい。
３．メモリ１３４およびストレージ１３６
【００４６】
コンピュータシステム１３０は、メモリ１３４を含むことが可能である。メモリ１３４
は、たとえば、プロセッサキャッシュメモリ（プロセッサコア別のキャッシュメモリや、
複数のプロセッサコアによって共有されるキャッシュメモリなど）、動的ランダムアクセ
スメモリ（「ＤＲＡＭ」）、静的ランダムアクセスメモリ（「ＳＲＡＭ」）、または、他
の任意の種類の、コンピュータデータ、命令、またはプログラムコードを記憶できるメモ
リ装置を含むことが可能である。コンピュータシステム１３０はさらに、オプションのス
トレージ１３６を含むことが可能である。ストレージ１３６は、たとえば、１つまたは複
数のハードディスクドライブ、フロッピーディスク、フラッシュメモリ、磁気ストレージ
メディア、ＣＤ−ＲＯＭ、ＤＶＤ、光ストレージメディア、または他の任意の種類の、コ
ンピュータデータ、命令、およびプログラムコードを記憶できるストレージ装置を含むこ
とが可能である。
４．コンピュータシステム１３０情報
【００４７】
コンピュータシステム１３０は、様々なオペレーティングシステムとともに使用される
ことが可能であり、たとえば、Ｍｉｃｒｏｓｏｆｔ（登録商標）  Ｗｉｎｄｏｗｓ（登録
商標）  ３．Ｘ、Ｗｉｎｄｏｗｓ  ９５（登録商標）、Ｗｉｎｄｏｗｓ  ９８（登録商標
）、Ｗｉｎｄｏｗｓ  ＮＴ（登録商標）、Ｗｉｎｄｏｗｓ  ２０００（登録商標）、Ｗｉ
ｎｄｏｗｓ  ＸＰ（登録商標）、Ｗｉｎｄｏｗｓ  ＣＥ（登録商標）、Ｐａｌｍ  Ｐｉｌ
ｏｔ  ＯＳ、ＯＳ／２、Ａｐｐｌｅ（登録商標）  ＭａｃＯＳ（登録商標）、ＭａｃＯＳ
Ｘ（登録商標）、ＭａｃＯＳ  Ｘ  Ｓｅｒｖｅｒ（登録商標）、ディスク  オペレーテ
ィングシステム（ＤＯＳ）、ＵＮＩＸ、Ｌｉｎｕｘ（登録商標）、ＶｘＷｏｒｋｓ（ＩＢ
Ｍ（登録商標）  ＯＳ／２（登録商標））、Ｓｕｎ  ＯＳ、Ｓｏｌａｒｉｓ  ＯＳ、ＩＲ
ＩＸ  ＯＳなどのオペレーティングシステムとともに使用されることが可能である。
【００４８】
一実施形態では、コンピュータシステム１３０は、パーソナルコンピュータ、ラップト
ップコンピュータ、Ｂｌａｃｋｂｅｒｒｙ（登録商標）装置、ポータブルコンピューティ
ング装置、サーバ、コンピュータワークステーション、個々のコンピュータからなるロー
カルエリアネットワーク、インタラクティブキオスク、携帯情報端末、インタラクティブ
無線通信装置、ハンドヘルドコンピュータ、埋め込みコンピューティング装置などである
。
【００４９】
当業者であれば理解されるように、コンピュータシステム１３０は、様々なサブルーチ
ン、プロシージャ、定義文、およびマクロを含むことが可能である。上記各モジュールは
、典型的には、別々にコンパイルされて、１つの実行可能プログラムにリンクされる。し
かしながら、当業者であれば理解されるように、それらのモジュールのうちの選択された
モジュールによって実行されたプロセスは、その他のモジュールのいずれかに任意に再分
配されるか、１つのモジュールにまとめられるか、共有可能なダイナミックリンクライブ
ラリのかたちで使用可能にされるか、他の任意の論理様式で分割されることが可能である
。
Ｅ．通信ネットワーク１０２
【００５０】
一実施形態では、コンピュータシステム１１０、１２０、１３０は、通信ネットワーク
１０２を介して、互いに通信している。
【００５１】
通信ネットワーク１０２は、１つまたは複数の、任意の種類の、電子的に接続されたコ
ンピュータのグループを含むことが可能であり、そのようなグループとして、たとえば、
仮想プライベートネットワーク、パブリックインターネット、プライベートインターネッ
ト、セキュアインターネット、プライベートネットワーク、パブリックネットワーク、付
加価値ネットワーク、有線ネットワーク、無線ネットワーク、イントラネットなどのネッ
トワークがある。さらに、ネットワークとの接続性は、たとえば、モデム、イーサネット
（登録商標）（ＩＥＥＥ  ８０２．３）、ギガビットイーサネット（登録商標）、１０ギ
ガビットイーサネット（登録商標）、トークンリング（ＩＥＥＥ  ８０２．５）、ファイ
バ分散データリンクインタフェース（ＦＤＤＩ：Ｆｉｂｅｒ  Ｄｉｓｔｒｉｂｕｔｅｄ  
Ｄａｔａｌｉｎｋ  Ｉｎｔｅｒｆａｃｅ）、フレームリレー、インフィニバンド（Ｉｎｆ
ｉｎｉＢａｎｄ）、ミリネット（Ｍｙｒｉｎｅｔ）、非同期転送モード（ＡＴＭ）、また
は別のインタフェースであることが可能である。通信ネットワーク１０２は、コンピュー
タシステム１１０、１２０、１３０と、たとえば、モデムによって、またはそれらのシス
テムのそれぞれにあるネットワークインタフェースカードによって、接続可能である。
【００５２】
さらに、同じ、あるいは別々の通信ネットワーク１０２を使用して、第１のコンピュー
タシステム１１０と第２のコンピュータシステム１２０との間の通信、第１のコンピュー
タシステム１１０と第３のコンピュータシステム１３０との間の通信、および第２のコン
ピュータシステム１２０と第３のコンピュータシステム１３０との間の通信を容易にする
ことが可能である。
ＩＩＩ．ソフトウェアモジュール
【００５３】
図１および図２に示されるように、クラスタシステム１００の一実施形態は、第１のク
ラスタノードモジュール２０４ａと通信することによって複数のカーネルモジュール２０
６ａ〜ｅにアクセスすることが可能なユーザインタフェースモジュール２０２を含む。ユ
ーザインタフェースモジュールは、（たとえば、実行中は）メモリ１１４、１２４、１３
４に記憶されることが可能であり、かつ／または、ストレージ装置１１６、１２６、１３
６に記憶されることが可能である。第１のクラスタノードモジュール２０４ａは、他のク
ラスタノードモジュール２０４ｂ〜ｅのそれぞれと通信している。カーネルモジュール２
０６ａ〜ｅは、それらが実行される１つまたは複数のコンピュータシステムのメモリに常
駐することが可能である。たとえば、第１のコンピュータシステム１１０のメモリ１１４
は、カーネルモジュール２０６ａ〜ｂのインスタンスを記憶することが可能であり、第２
のコンピュータシステム１２０のメモリ１２４は、カーネルモジュール２０６ｃ〜ｄのイ
ンスタンスを記憶することが可能であり、第３のコンピュータシステム１３０のメモリ１
３４は、カーネルモジュール２０６ｅのインスタンスを記憶することが可能である。
カーネルモジュール２０６ａ〜ｅは、シングルスレッドプログラムコードを含み、それぞ
れが、プロセッサ１１２ａ、１１２ｂ、１２２ａ、１２２ｂ、１３２のうちの１つに関連
付けられている。コンピュータシステム１１０、１２０、１３０のうちの１つまたは複数
、またはリモートコンピュータシステムに記憶されたクラスタ構成モジュールが、たとえ
ば、クラスタノードモジュール２０４ａ〜ｅとの通信を確立することが可能である。一実
施形態では、クラスタ構成モジュール２０８とクラスタノードモジュール２０４ａ〜ｅと
の間の通信によって、クラスタノードモジュール２０４ａ〜ｅが初期化されて、コンピュ
ータクラスタ１００のクラスタコンピューティングサポートが提供される。
Ａ．クラスタノードモジュール２０４
【００５４】
一実施形態では、クラスタノードモジュール２０４ａ〜ｅは、コンピュータクラスタ１
００で実行されている様々なカーネルモジュール２０６ａ〜ｅ、たとえば、Ｍａｔｈｅｍ
ａｔｉｃａカーネルなど、が互いに通信するための手段を提供する。クラスタノードモジ
ュール２０４は、スーパコンピュータおよびクラスタの、いくつかのインストレーション
で用いられている、メッセージパッシングインタフェース（「ＭＰＩ」）として知られる
アプリケーションプログラミングインタフェース（「ＡＰＩ」）の少なくとも一部を含む
ことが可能である。クラスタノードモジュール２０４ａ〜ｅ間の接続（たとえば、図２に
示された矢印）からなるネットワークは、たとえば、イーサネット（登録商標）上の  Ｔ
ＣＰ／ＩＰのような通信ネットワーク１０２を用いて実装されることが可能であるが、こ
れらの接続は、他の任意の種類のネットワーク上またはローカルコンピュータバス上でも
行われることが可能である。
【００５５】
クラスタノードモジュール２０４は、アプリケーション別のツールキットか、たとえば
、ＭａｔｈｅｍａｔｉｃａのＭａｔｈＬｉｎｋ、Ａｄｄ−Ｏｎｓ、またはパケットなどの
インタフェースを用いてアプリケーションと対話することが可能である。Ｍａｔｈｅｍａ
ｔｉｃａカーネルを、Ｍａｔｈｅｍａｔｉｃａフロントエンドとして知られるユーザイン
タフェースまたは他のＭａｔｈｅｍａｔｉｃａカーネルに接続するために通常使用される
ＭａｔｈＬｉｎｋは、これらのエンティティのうちの任意のエンティティ間でメッセージ
、コマンド、またはデータを含む「パケット」を送信する双方向プロトコルである。Ｍａ
ｔｈＬｉｎｋは、コマンドまたはスレッドの実行中は、直接クラスタコンピューティング
のような、Ｍａｔｈｅｍａｔｉｃａカーネル間の同時通信を許可しない。ＭａｔｈＬｉｎ
ｋはさらに、複数の同時ネットワーク接続を実行するようには設計されていない。実施形
態によっては、クラスタノードモジュール２０４は、同じコンピュータにあるエンティテ
ィ同士の接続に、アプリケーション別のツールキット、たとえば、ＭａｔｈＬｉｎｋなど
を用いることが可能である。
【００５６】
クラスタまたは他の並列コンピュータに対するプロシージャまたはアクションに関して
言えば、すべてのアクションが順番に実行されるとは限らず、順番に実行されなければな
らないわけでもない。たとえば、古典的な「チューリングマシン」モデルのシングルプロ
セッサコードとは対照的に、並列コードは、その複数のコピーがクラスタ全体で実行され
、典型的には、各プロセッサ（または「プロセッサエレメント」または「コア」）に対し
て１つのコピーが実行される。そのような並列コードは、同じコードの別々のインスタン
スが互いに通信し、共同作業を行い、作業内容を調整し合うことが可能であるように書か
れる。これらのコードの複数のインスタンスは、同時に並列に実行されることが可能であ
る。
【００５７】
コードインスタンスの数が整数Ｎであれば、コード実行の各インスタンスは、０からＮ
−１までのラベルが付けられることが可能である。たとえば、コンピュータクラスタは、
それぞれがプロセッサを含む、Ｎ個の接続されたコンピュータを含むことが可能である。
第１のコンピュータは、プロセッサ０で実行されるカーネルモジュール０に、クラスタノ
ードモジュール０が接続されている。次のコンピュータは、プロセッサ１で実行されるカ
ーネルモジュール１に、クラスタノードモジュール１が接続されており、接続されたＮ個
のコンピュータのそれぞれについて同様である。それらのプロシージャのいくつかのステ
ップは共同作業であり、いくつかのステップは単独作業である。これらのエンティティは
、必ずしもロックステップにはなっていないが、必ず、初期化、主ループ動作（たとえば
、クラスタノードモジュール動作）、およびシャットダウンのパターンに従う。
【００５８】
これに対し、ｇｒｉｄＭａｔｈｅｍａｔｉｃａソフトウェアパッケージの一部として与
えられる並列コンピューティングツールキット（ＰＣＴ：ｐａｒａｌｌｅｌ  ｃｏｍｐｕ
ｔｉｎｇ  ｔｏｏｌｋｉｔ）は、別々のノードで実行されている、同じコードのインスタ
ンスがインスタンス同士で通信し、共同作業を行い、作業内容を調整し合うための手段を
提供しない。ＰＣＴは、Ｍａｔｈｅｍａｔｉｃａカーネルを、本明細書で開示されている
いくつかの実施形態で実現されるピアツーピア関係ではなく、マスタスレーブ関係で接続
するコマンドを提供する。ピアツーピアノードアーキテクチャを有するコンピュータクラ
スタで実行される計算は、マスタスレーブノードアーキテクチャを有するグリッドコンピ
ュータで実行される同等の計算より、効率が良く、設計しやすく、かつ／または、信頼性
が高いことが可能である。さらに、マスタスレーブノードアーキテクチャを用いるシステ
ムでは、計算の性質によっては、プログラマが、マルチノード処理能力を利用できない場
合がある。
【００５９】
図３は、ＭＰＩ呼び出しおよび高度ＭＰＩ関数を実装するクラスタノードモジュール２
０４の一実施形態を示す。図３に示された実施形態では、クラスタノードモジュール２０
４は、ＭＰＩモジュール３０２、高度機能モジュール３０４、受信済みメッセージキュー
３０６、およびメッセージ受信キュー３０８を含む。
１．ＭＰＩモジュール３０２
【００６０】
一実施形態では、クラスタノードモジュール２０４は、ＭＰＩモジュール３０２を含む
。ＭＰＩモジュール３０２は、少なくとも５種類のＭＰＩ命令またはＭＰＩ呼び出しのう
ちの１つまたは複数に対応するプログラムコードを含むことが可能である。ＭＰＩモジュ
ール３０２によって実装されることが可能な、選択された定数、命令、および／または呼
び出しは、以下のとおりである。
ＭＰＩ定数
【００６１】
ノード識別子は、メッセージをノードへ送信したり、メッセージをノードから受信した
りするために使用される。ＭＰＩでは、これは、０から始まる一意の整数（＄ＩｄＰｒｏ
ｃ）を各ノードに割り当てることによって行われる。総数（＄ＮＰｒｏｃ）がわかってい
れば、このデータは、任意の測定可能なエンティティをプログラムで分割することを可能
にする。
【表１】
2017016693.tif 000003
表Ａ
基本ＭＰＩ呼び出し
【００６２】
一実施形態では、ＭＰＩモジュール３０２は、たとえば、他の言語（ＣやＦｏｒｔｒａ
ｎなど）でよく使用されるＭＰＩ呼び出しをマッピングする比較的低級のルーチン群など
、基本ＭＰＩ呼び出しを含むことが可能であり、それによって、そのような呼び出しをＭ
ａｔｈｅｍａｔｉｃａユーザインタフェース２０４から直接使用できるようにすることが
可能になる。実施形態によっては、基本ＭＰＩ呼び出しは、データ、方程式、公式、およ
び／または他の数式を送信する呼び出しを含む。
【００６３】
以下の最も基本的なＭＰＩ呼び出しを用いれば、１つのノードから別のノードへ数式を
単純に送信することが可能である。１つのノードが、数式を送信することを呼び出し、他
のノードが、送信された数式を受信する、対応するルーチンを呼び出すことが可能である
。メッセージが送信側ノードを離れても、受信側がまだｍｐｉＲｅｃｖを呼び出していな
い可能性があるため、ｍｐｉＳｅｎｄの完了は、メッセージが受信されたことの確認には
ならない。
【表２】
2017016693.tif 000004
表Ｂ
非同期ＭＰＩ呼び出し
【００６４】
非同期呼び出しは、複数の通信が同時進行している間にカーネルが作業を行うことを可
能にする。また、待機中に、別のノードがデータをまだ送信または受信できないようにし
て、１つのカーネルが作業を続行できるようにすることが可能である。
【表３】
2017016693.tif 000005
表Ｃ
【００６５】
ｍｐｉＩＳｅｎｄ［］コマンドは、カーネルモジュール２０６（たとえば、Ｍａｔｈｅ
ｍａｔｉｃａカーネル）の中から呼び出されることが可能である。ｍｐｉＩＳｅｎｄ［］
コマンドは、ペイロードとして送信されるＭａｔｈｅｍａｔｉｃａ数式と、その数式の送
信先とを含むパケットを作成する。このパケット自体は、そのローカルのクラスタノード
モジュールだけを宛先とされる。このパケットは、そのローカルのクラスタノードモジュ
ールによって受信された後に復号され、そのペイロードが、パケットで指定されたクラス
タノードモジュールに転送される。
【００６６】
ｍｐｉＩＲｅｃｖ［］コマンドも、カーネルモジュール２０６の中から呼び出されるこ
とが可能である。ｍｐｉＩＲｅｃｖ［］コマンドは、数式を受け取ることを期待する場所
、およびこの数式の出所として期待されるプロセッサを指定するパケットを作成する。こ
のパケットは、そのローカルのクラスタノードモジュールによって受信された後に復号さ
れ、そのコンテンツが、メッセージ受信キュー（ＭＲＱ）３０８（図３）に記憶される。
【００６７】
ｍｐｉＴｅｓｔ［］コマンドは、カーネルモジュール２０６の中から呼び出されること
が可能である。ｍｐｉＴｅｓｔ［］コマンドは、どのメッセージを完了のためにテストす
るかを指定するパケットを作成し、その後、評価すべき数式の応答を待つ。このパケット
は、そのカーネルモジュールが関連付けられたクラスタノードモジュール２０４によって
受信された後に復号され、そのメッセージ指定子を用いて、その受信済みメッセージキュ
ー（ＲＭＱ）３０６の中で、完了されたものとしてリストされている、一致する数式が検
索される。そのような完了された数式が見つかった場合は、その数式が、ｍｐｉＴｅｓｔ
［］内の応答の一部として、そのローカルのカーネルモジュールに送信される。カーネル
モジュールは、この応答の数式を受け取って評価し、これによって、カーネルモジュール
の変数が、必要に応じて更新される。
【００６８】
他のＭＰＩ呼び出しは、基本呼び出しｍｐｉＩＳｅｎｄ、ｍｐｉＩＲｅｃｖ、およびｍ
ｐｉＴｅｓｔの上に構築される。たとえば、ｍｐｉＢｃａｓｔ（ブロードキャスト）は、
他のプロセッサがＲｅｃｖを実行している間にブロードキャストプロセッサから他のすべ
てのプロセッサへ情報を送信する命令を作成する。同様に、ツールキットの高級呼び出し
は、ＭＰＩ呼び出しの集合体の最上部に構築されることが可能である。
集団ＭＰＩ呼び出し
【００６９】
一実施形態では、ＭＰＩモジュール３０２は、集団ＭＰＩ呼び出し（たとえば、ノード
間の基本マルチノードデータ移動を与える呼び出し）を実施するプログラムコードを含む
ことが可能である。集団ＭＰＩ呼び出しは、たとえば、ブロードキャスト、収集、転置、
および他のベクトル操作や行列操作を含むことが可能である。集団呼び出しはまた、ノー
ドのグループ間で数式を送信するために一般に使用されているメカニズムを提供すること
も可能である。
【表４】
2017016693.tif 000006
表Ｄ
一実施形態では、ＭＰＩモジュール３０２は、多数のノードにわたって記憶されている
データの並列和および他のリダクション操作を実施するプログラムコードを含む。ＭＰＩ
モジュール３０２はまた、単純な並列入出力呼び出し（たとえば、複数のノードにあるオ
ブジェクトをクラスタシステム２００がロードおよび記憶することを可能にする呼び出し
）を実施するプログラムコードを含むことが可能である。
【表５】
2017016693.tif 000007
表Ｅ
【００７０】
以下の追加の集団呼び出しは、データを並列にリダクションする操作を実行する。操作
の引数は、下記の定数のいずれかであることが可能である。
【表６】
2017016693.tif 000008
表Ｆ
ＭＰＩコミュニケータ呼び出し
【００７１】
一実施形態では、ＭＰＩモジュール３０２は、コミュニケータワールド呼び出し（たと
えば、ノードのサブセットがあたかもサブクラスタであるかのように動作することを可能
にする呼び出し）を実施するプログラムコードを含む。コミュニケータは、ノードのグル
ープをユーザ定義サブセットに編成する。ｍｐｉＣｏｍｍＳｐｌｉｔ［］によって返され
るコミュニケータ値は、他のＭＰＩ呼び出しでｍｐｉＣｏｍｍＷｏｒｌｄの代わりに使用
可能である。
【表７】
2017016693.tif 000009
表Ｇ
他のＭＰＩサポート呼び出し
【００７２】
共通機能を提供する他の呼び出しとして、以下のものがある。
【表８】
2017016693.tif 000010
表Ｈ
２．高度関数モジュール３０４
【００７３】
一実施形態では、クラスタノードモジュール２０４は、高度関数モジュール３０４を含
む。高度関数モジュール３０４は、ＭＰＩモジュール３０２によって実装されるＭＰＩ命
令およびＭＰＩ呼び出しを用いて実行することが不便または非現実的である関数のツール
キットを提供するプログラムコードを含むことが可能である。高度関数モジュール３０４
は、高度関数を実装するにあたり、ＭＰＩモジュール３０２によって実装される呼び出し
および命令に、少なくとも部分的に依存することが可能である。一実施形態では、高度関
数モジュール３０４は、指示または関数のカスタムセットを含む。一代替実施形態では、
高度関数モジュール３０４は、標準のＭａｔｈｅｍａｔｉｃａ言語をインタセプトし、こ
れを、クラスタ実行に最適化された１つまたは複数の関数に変換する。そのような実施形
態は、Ｍａｔｈｅｍａｔｉｃａ関数になじんだユーザにとってはより使いやすいものであ
り得るが、プログラムデバッグプロセスが複雑になる可能性もある。高度関数モジュール
３０４によって実装されるいくつかの関数は、並列コンピューティングを用いるセットア
ップが困難または複雑である操作を簡略化することが可能である。高度関数モジュール３
０４によって実装可能な、そのような関数のいくつかの例を、以下に示す。
【００７４】
以下で説明される呼び出しは、ＭＰＩ呼び出しの上に構築され、Ｍａｔｈｅｍａｔｉｃ
ａ機能の、よく使用される通信パターンまたは並列バージョンを提供する。これらは、特
に断らない限り、デフォルトが＄ｍｐｉＣｏｍｍＷｏｒｌｄであるコミュニケータｍｐｉ
ＣｏｍｍＷｏｒｌｄにおいて実行されるが、実行時に、有効なコミュニケータに変更可能
である。
一般的な分割統治並列評価
【００７５】
一実施形態では、高度関数モジュール３０４は、基本的な並列化に備える関数、たとえ
ば、多数のノードに記憶されている多数のデータ要素またはデータ入力に対して同じ操作
を行うルーチンなどを含む。これらの関数は、並列化されたｆｏｒループなどに匹敵しう
る。以下の呼び出しは、一般的なタスクの単純な並列化を扱う。呼び出しの説明において
、「ｅｘｐｒ」は数式を意味し、「ｌｏｏｐｓｐｅｃ」は、数式の評価方法を決定するル
ールのセットを意味する。実施形態によっては、高度関数モジュール３０４は、｛ｖａｒ
，ｃｏｕｎｔ｝、｛ｖａｒ，ｓｔａｒｔ，ｓｔｏｐ｝、および｛ｖａｒ，ｓｔａｒｔ，ｓ
ｔｏｐ，ｉｎｃｒｅｍｅｎｔ｝を含む、少なくとも３つの形式のｌｏｏｐｓｐｅｃをサポ
ートし、｛ｖａｒ，ｃｏｕｎｔ｝の場合、呼び出しは、１から整数「ｃｏｕｎｔ」までの
変数「ｖａｒ」を反復し、｛ｖａｒ，ｓｔａｒｔ，ｓｔｏｐ｝の場合、呼び出しは、「ｓ
ｔａｒｔ」から「ｓｔｏｐ」までの変数「ｖａｒ」（すべて整数）を反復し、｛ｖａｒ，
ｓｔａｒｔ，ｓｔｏｐ，ｉｎｃｒｅｍｅｎｔ｝の場合、呼び出しは、反復のたびに「ｉｎ
ｃｒｅｍｅｎｔ」が追加される「ｓｔａｒｔ」から、「ｓｔｏｐ」を超えるまでの変数「
ｖａｒ」（非整数であってよい）を反復する。
【表９】
2017016693.tif 000011
表Ｉ
保護セル管理
【００７６】
一実施形態では、高度関数モジュール３０４は、保護セル操作に備える関数、たとえば
、（１Ｄ、２Ｄ、および／または３Ｄに最適化された）任意の数の次元のローカル配列の
エッジを維持するために最近隣通信を実行するルーチンなどを含む。典型的には、問題の
空間は、パーティションに分割されている。しかしながら、各パーティションの隣接する
エッジ同士は、相互作用する可能性が非常に高いため、両方のエッジに対して、「保護セ
ル」が、隣接するデータの代わりに挿入される。したがって、あるプロセッサから見える
空間は、そのプロセッサが担当する実際の空間より要素２つ分だけ広い。ＥｄｇｅＣｅｌ
ｌは、これらの保護セルの維持を支援する。
【表１０】
2017016693.tif 000012
表Ｊ
行列およびベクトルの操作
【００７７】
高度関数モジュール３０４は、線形代数演算に備える関数、たとえば、多数のノードに
分割された構造に対する、基本線形代数の並列化バージョンなどを含むことも可能である
。そのような線形代数演算では、行列およびベクトルの操作や、たとえば、行列式、トレ
ースなどの他の演算を実行するために、必要に応じてデータを再編成することが可能であ
る。行列は、クラスタ全体にわたる各プロセッサに分割されて記憶される。以下の呼び出
しは、これらの行列を一般的な様式で操作する。
【表１１】
2017016693.tif 000013
表Ｋ
要素管理
【００７８】
一実施形態では、高度関数モジュール３０４は、要素管理操作を含む。たとえば、空間
内の複数のノードに切り分けられた要素または小片の大規模ビンが、ルールまたは条件（
たとえば、それらの空間座標）に基づいてノード間を移動しなければならない場合がある
。そのような操作によって、データはノード間を移動する。分割統治アプローチに加えて
、要素のリストを、任意の様式で分割することも可能である。これは、要素を複数のプロ
セッサに編成またはソートしなければならない場合に有用である。たとえば、システムの
各小片が、１つのプロセッサの空間から別のプロセッサの空間へ流れ出る場合があるので
、それらのデータは、定期的に再分配される必要がある。
【表１２】
2017016693.tif 000014
表Ｌ
フーリエ変換
【００７９】
一実施形態では、高度関数モジュール３０４は、大規模並列高速フーリエ変換（「ＦＦ
Ｔ」）を実施するプログラムコードを含む。たとえば、そのような関数は、１つのノード
ではなく多数のノードに記憶されている大量のデータに対して、１次元、２次元、および
／または３次元のＦＦＴを実行することが可能である。非常に大きな配列のフーリエ変換
は、メモリ要件の問題にとどまらず、管理が困難である可能性がある。フーリエ変換を並
列化することにより、クラスタ全体におけるすべての空きメモリを活用することが可能に
なり、１つのプロセッサが単独で行うことができないと考えられる問題サイズの操作を行
うことが可能になる。
【表１３】
2017016693.tif 000015
表Ｍ
並列ディスクＩ／Ｏ
【００８０】
一実施形態では、高度関数モジュール３０４は、並列ディスクの入力呼び出しおよび出
力呼び出しを含む。たとえば、データがクラスタ全体にわたって均一に分散しているよう
なクラスタにデータを読み込ませたり、そのようなクラスタからデータを読み出したりす
ることが必要になる場合がある。以下の表の各呼び出しは、データを１つまたは複数のプ
ロセッサからストレージに保存したり、ストレージからデータを取り出したりすることを
可能にする。
【表１４】
2017016693.tif 000016
表Ｎ
自動ロードバランシング
【００８１】
いくつかの関数呼び出しは、完了までの処理時間の長さに一貫性がない可能性がある。
たとえば、Ｍａｔｈｅｍａｔｉｃａでは、呼び出しｆ［２０］の評価には、一般に、ｆ［
１９］の場合よりかなり長い時間がかかる可能性がある。さらに、クラスタ内の１つまた
は複数のプロセッサの速度が異なる場合（たとえば、いくつかのプロセッサが２．６ＧＨ
ｚのコア周波数で動作していて、他のプロセッサが１ＧＨｚ未満のコア周波数で動作して
いる場合）は、１つのプロセッサが別のプロセッサより早くタスクを終了する可能性があ
る。
【００８２】
実施形態によっては、高度関数モジュール３０４は、そのような状況におけるコンピュ
ータクラスタ１００の動作を改良することが可能な呼び出しを含む。実施形態によっては
、ｒｏｏｔプロセッサは、可能な関数呼び出しの小さなサブセットを、クラスタ１００上
の各プロセッサに割り当てる。結果を最初に返したプロセッサには、可能な呼び出しの第
２の小さなサブセットが割り当てられる。ｒｏｏｔプロセッサは、評価が完了するまでは
結果を受け取るので、可能な呼び出しの小さなサブセットを割り当て続ける。各プロセッ
サが終了する順番は、数式が評価されるたびに変わる可能性があるが、ｒｏｏｔプロセッ
サは、使用可能になったプロセッサにさらなる作業を割り当て続ける。
【００８３】
一実例として、４つのプロセッサと、評価対象のｆ［１］からｆ［１００］までを考え
る。これは、プロセッサ０から３までのそれぞれに、ｆ［１］、ｆ［２］、ｆ［３］、ｆ
［４］を割り当てることによって実装可能である（ｒｏｏｔは自身に割り当てることが可
能）。ｆ［２］の結果が最初に返されると、プロセッサ１にはｆ［５］が割り当てられる
。ｆ［４］の結果が次に返されると、プロセッサ３にはｆ［６］が割り当てられる。これ
らの割り当ては、すべての結果が計算されるまで続けられる。これらの結果は、ユーザに
返される出力のために編成される。
【００８４】
代替実施形態では、可能な呼び出しのサブセットは、順次的ではなく、任意の順番で割
り当てられることが可能であり、あるいは、バッチ割り当てされることが可能である（た
とえば、ｆ［１］、ｆ［５］、ｆ［９］がプロセッサ１に割り当てられる、など）。また
、これらのサブセットは、委託によって編成されることも可能である。たとえば、あるプ
ロセッサノードが、その他のプロセッサによって直接制御されるわけでは必ずしもない。
代わりに、大きなサブセットをプロセッサに割り当てることが可能であり、そのプロセッ
サは、それの作業のサブセットを他のプロセッサに割り当てるであろう。この結果として
、巨大な軍隊のような割り当ての階層が作成されるであろう。
【表１５】
2017016693.tif 000017
表Ｏ
３．受信済みメッセージキュー３０６
【００８５】
一実施形態では、クラスタノードモジュール２０４は、受信済みメッセージキュー３０
６を含む。受信済みメッセージキュー３０６は、他のクラスタノードモジュールから受信
されたメッセージを記憶するデータ構造を含む。たとえば数式が完了しているかどうかな
ど、受信されたメッセージに関係する関連データも、受信済みメッセージキュー３０６に
記憶されることが可能である。受信済みメッセージキュー３０６は、キューおよび／また
は別の種類のデータ構造、たとえば、スタック、リンクされたリスト、配列、ツリーなど
を含むことが可能である。
４．メッセージ受信キュー３０８
【００８６】
一実施形態では、クラスタノードモジュール２０４は、メッセージ受信キュー３０８を
含む。メッセージ受信キュー３０８は、式の送信先として期待されるロケーション、およ
びその式の送信元として期待されるプロセッサに関する情報を記憶するデータ構造を含む
。メッセージ受信キュー３０８は、キューおよび／または別の種類のデータ構造、たとえ
ば、スタック、リンクされたリスト、配列、ツリーなどを含むことが可能である。
Ｂ．クラスタ構成モジュール２０８
【００８７】
クラスタ構成モジュール２０８は、コンピュータシステム１１０、１２０、１３０にク
ラスタコンピューティングサポートを追加するために、複数のクラスタノードモジュール
を初期化するプログラムコードを含む。参照により全体が本明細書に組み込まれて、本明
細書の一部をなしている、Ｄａｕｇｅｒに対して発行された米国特許第７１３６９２４号
（「’９２４特許」）明細書には、コンピュータクラスタの並列動作および制御のための
方法およびシステムが開示されている。１つの方法は、一般に、ネットワークサービスに
よって発見可能なオペレーティングシステムを有する１つまたは複数のパーソナルコンピ
ュータを取得することを含む。実施形態によっては、この方法は、カーネルモジュールを
実行することが可能な１つまたは複数のプロセッサまたはプロセッサコアを取得すること
を含む。’９２４特許に記載されるように、ソフトウェアアプリケーションのクラスタノ
ード制御およびインタフェース（ＣＮＣＩ：ｃｌｕｓｔｅｒ  ｎｏｄｅ  ｃｏｎｔｒｏｌ
ａｎｄ  ｉｎｔｅｒｆａｃｅ）グループが各ノードにコピーされる。ＣＮＣＩアプリケ
ーションがノードで実行されている場合、クラスタ構成モジュール２０８は、クラスタノ
ードモジュール２０４が、カーネルモジュール２０６との組み合わせで、そのノードの処
理用リソースを使用して、コンピュータクラスタの一部として並列計算タスクを実行でき
るようにすることが可能である。クラスタ構成モジュール２０８は、本開示に関連して、
クラスタ作成プロセスを大幅に自動化することが可能である。
Ｃ．ユーザインタフェースモジュール２０２
【００８８】
実施形態によっては、コンピュータクラスタ１００は、たとえば、Ｍａｔｈｅｍａｔｉ
ｃａフロントエンドやコマンドラインインタフェースのようなユーザインタフェースモジ
ュール２０２を含み、ユーザインタフェースモジュール２０２は、カーネルモジュール２
０６が、グラフィカル出力を提供し、グラフィカル入力を受け付け、他の、グラフィカル
ユーザインタフェースまたはコマンドラインインタフェースが提供するユーザ通信方法を
提供するための、プログラムコードを含む。ユーザインタフェースモジュール２０２をサ
ポートするために、実施形態によっては、クラスタノードモジュール２０４ａの動作が変
更される。ユーザインタフェースモジュール２０２は、出力をユーザに直接送信したり、
入力をユーザから直接受信したりする代わりに、ユーザインタフェースモジュール２０２
が接続されているクラスタノードモジュール２０４ａを起動し、クラスタノードモジュー
ル２０４ａとユーザインタフェースモジュール２０２との間の接続、たとえば、Ｍａｔｈ
Ｌｉｎｋ接続などを形成するパラメータを指定する。ユーザインタフェースモジュールに
よるクラスタノードモジュール２０４ａの起動により、クラスタ上の残りのクラスタノー
ドモジュール２０４ｂ〜ｅを起動する命令、およびクラスタ上のすべてのカーネルモジュ
ール２０６ａ〜ｅを起動するシーケンスを完了する命令の実行が開始されることが可能で
ある。正規にはカーネルモジュール２０６ａに宛てられた、ユーザインタフェースモジュ
ール２０２からのパケットは、クラスタノードモジュール２０４ａによって、ユーザコマ
ンドとして受け付けられる。クラスタノードモジュール２０４ａに関連付けられたカーネ
ルモジュール２０６ａからの出力は、ユーザに対する表示のために、ユーザインタフェー
スモジュール２０２に転送されることが可能である。クラスタノードモジュール２０４ａ
〜ｅのいずれもが、ユーザインタフェースモジュール２０２と通信するように構成可能で
ある。
Ｄ．カーネルモジュール２０６
【００８９】
カーネルモジュール２０６は、典型的には、ユーザまたはスクリプトから与えられる高
級コード、コマンド、および／または命令を、低級コード、たとえば、機械語やアセンブ
リ言語などに翻訳するプログラムコードを含む。一実施形態では、各クラスタノードモジ
ュール２０４ａ〜ｅは、他のすべてのクラスタノードモジュールに接続され、各カーネル
モジュール２０６ａ〜ｅは、１つのクラスタノードモジュール２０４だけが割り当てられ
、それに接続される。一実施形態では、プロセッサごとに、クラスタノードモジュールと
カーネルモジュールのペアが１つ存在する。たとえば、シングルプロセッサコンピュータ
システムを含むコンピュータクラスタ１００の一実施形態では、クラスタノードモジュー
ルとカーネルモジュールの各ペアが、シングルプロセッサコンピュータに常駐することが
可能である。コンピュータが複数のプロセッサまたはプロセッサコアを含む場合、このコ
ンピュータは、クラスタノードモジュールとカーネルモジュールの複数のペアを含むこと
が可能であるが、その場合でも、それらのペアは、クラスタノードモジュールのネットワ
ーク接続を介して通信することが可能である。
ＩＶ．クラスタコンピューティング方法
【００９０】
一実施形態では、コンピュータクラスタ１００は、クラスタ初期化プロセス、クラスタ
ノードモジュールの操作方法、およびクラスタシャットダウンプロセスを含む。
Ａ．クラスタ初期化プロセス
【００９１】
一実施形態では、クラスタ構成モジュール２０２は、図４に示されるように、１つまた
は複数のカーネルモジュール２０６にクラスタコンピューティングサポートを提供するた
めに、１つまたは複数のクラスタノードモジュール２０４を初期化する。
【００９２】
４０２では、コンピュータクラスタ１００において、クラスタノードモジュールが起動
される。一実施形態では、（たとえば、ユーザが位置する）第１のプロセッサ１１２ａで
実行されているクラスタノードモジュール２０４ａが、クラスタ構成モジュール２０８を
介して、コンピュータクラスタ１００上の他のプロセッサ１１２ｂ、１２２ａ〜ｂ、１３
２にアクセスして、クラスタノードモジュール２０４ｂ〜ｅをクラスタ全体に向けて起動
する。一代替実施形態では、クラスタ構成モジュール２０８が、通信ネットワーク１０２
を介して互いに接続されているプロセッサ１１２ａ〜ｂ、１２２ａ〜ｂ、１３２をサーチ
し、プロセッサ１１２ａ〜ｂ、１２２ａ〜ｂ、１３２のそれぞれにおいてクラスタノード
モジュール２０４ａ〜ｅを起動する。
【００９３】
４０４では、クラスタノードモジュール２０４ａ〜ｅが、互いの間の通信を確立する。
一実施形態では、クラスタノードモジュール２０４ａ〜ｅのそれぞれが、クラスタ構成モ
ジュール２０８によってコンピュータクラスタ１００上で起動された他のクラスタノード
モジュール２０４ａ〜ｅとの直接通信を、ＭＰＩ＿Ｉｎｉｔコマンドを用いて確立する。
【００９４】
４０６では、各クラスタノードモジュール２０４が、カーネルモジュール２０６に接続
することを試みる。一実施形態では、クラスタノードモジュール２０４ａ〜ｅの各インス
タンスが、居場所を定め、起動され、ＭａｔｈＬｉｎｋ接続および／または同様の、たと
えば、カーネルモジュール２０６に組み込まれた接続ツールを介してローカルカーネルモ
ジュールに接続する。
【００９５】
４０８では、カーネルモジュール２０６に接続されていないクラスタノードモジュール
２０４がシャットダウンされる。一実施形態では、各クラスタノードモジュール２０４は
、ローカルカーネルモジュールが見つからないかどうか、あるいは接続されていないかど
うかを判定する。一実施形態では、各クラスタノードモジュール２０４は、カーネルモジ
ュール２０６との接続に失敗した場合には、そのことを、コンピュータクラスタ１００上
の他のクラスタノードモジュールに報告し、終了する。
【００９６】
４１０では、残りのクラスタノードモジュール２０４にプロセッサ識別番号が割り当て
られる。一実施形態では、残りの各クラスタノードモジュール２０４は、アクティブなプ
ロセッサの総数（Ｎ）を計算し、アクティブなクラスタノードモジュール２０４ａ〜ｅお
よびカーネルモジュール２０６ａ〜ｅの残りのサブセットを表す識別番号を決定する。こ
の新しい、クラスタノードモジュールとカーネルモジュールのペアのセットは、たとえば
、０からＮ−１の番号が付けられることが可能である。
【００９７】
４１２では、カーネルモジュール２０６ａ〜ｅにおいてメッセージパッシングサポート
が初期化される。一実施形態では、各クラスタノードモジュール２０４は、メッセージパ
ッシングをサポートするために、ローカルカーネルモジュール２０６に初期化コード（た
とえば、Ｍａｔｈｅｍａｔｉｃａ初期化コード）を与える。
【００９８】
最後に、４１４では、クラスタノードモジュール２０４ａ〜ｅは、ユーザエントリを受
け付けるループに入る。一実施形態では、他のクラスタノードモジュール２０４のそれぞ
れが、ネットワーク１０２に接続されている他のすべてのクラスタノードモジュール２０
４ａ〜ｅからのメッセージを待っている間に、第１のプロセッサ１１２ａにおけるクラス
タノードモジュール２０４ａがユーザ制御に戻った後に、主ループ（たとえば、クラスタ
動作ループ）が実行を開始する。
【００９９】
初期化プロセスでは、カーネルモジュール２０６ａ〜ｅがメッセージを互いに送信する
ための様式を可能にする構造が作成される。実施形態によっては、初期化が完了した時点
で、クラスタ内において、任意のカーネルモジュールが他の任意のカーネルモジュールに
データを送信したり、他の任意のカーネルモジュールからデータを受信したりすることが
可能になる。クラスタノードモジュールは、カーネルモジュールが他のカーネルモジュー
ルと直接通信しているという錯覚を起こさせる。初期化プロセスは、図２の例で示される
ような、コンピュータクラスタ１００上のカーネルモジュール間の関係を作り上げること
が可能である。
Ｂ．クラスタノードモジュールの操作
【０１００】
一実施形態では、クラスタノードモジュール２０４は、図５に示されるように、主ルー
プの間に、カーネルモジュール２０６に対するクラスタコンピューティングサポートを実
装する。
【０１０１】
５０２では、クラスタノードモジュール２０４は、他のクラスタノードモジュールから
のユーザコマンドまたはメッセージを待つ。一実施形態では、他のクラスタノードモジュ
ール２０４ｂ〜ｅがメッセージのチェックを続けている間に、ユーザインタフェースモジ
ュール２０２に接続されたクラスタノードモジュール２０４ａは、ユーザコマンドを待つ
。
【０１０２】
コマンドまたはメッセージが受信されたら、５０４へ進む。５０４では、クラスタノー
ドモジュール２０４ａは、受信されたメッセージが終了（ｑｕｉｔ）コマンドかどうかを
判定する。終了コマンドが受信された場合、クラスタノードモジュール２０４ａは、ルー
プを終了し、５０５のクラスタノードモジュールシャットダウンプロセスへ進む。受信さ
れたメッセージが終了コマンドでない場合は、プロセスは５０６へ進む。
【０１０３】
５０６では、受信されたコマンドが、コンピュータクラスタ１００上のすべてのクラス
タノードモジュール２０４ａ〜ｅへ伝達される。一実施形態では、ユーザがユーザインタ
フェースモジュール２０２にコマンドを入力すると、ユーザインタフェースモジュール２
０２に接続されたクラスタノードモジュール２０４ａが、そのユーザコマンドを、コンピ
ュータクラスタ１００の他のすべてのクラスタノードモジュール２０４ｂ〜ｅにサブミッ
トする。ユーザコマンドは、シンプルであってよいが（たとえば、「１＋１」）、カーネ
ルモジュール２０６ａ〜ｅ（たとえば、Ｍａｔｈｅｍａｔｉｃａカーネル）間のメッセー
ジパッシングを実行する、ユーザインタフェースモジュール２０２（たとえば、Ｍａｔｈ
ｅｍａｔｉｃａフロントエンド）内からのＭＰＩ呼び出しを含む、コード（たとえば、Ｍ
ａｔｈｅｍａｔｉｃａコードなど）の完全なサブルーチンおよびシーケンスであってもよ
い。これらは、クラスタノードモジュール２０４とそのローカルカーネルモジュール２０
６との間で特別に識別されたメッセージを用いて実装される基本ＭＰＩ呼び出しを含む。
【０１０４】
５０８では、メッセージ（またはユーザコマンド）が、カーネルモジュール２０６ａ〜
ｅへ伝達される。一実施形態では、ユーザインタフェースモジュール２０２に接続された
クラスタノードモジュール２０４ａは、ユーザコマンドを、クラスタノードモジュール２
０４ａが接続されているカーネルモジュール２０６ａへサブミットする。他のクラスタノ
ードモジュール２０４ｂ〜ｅのそれぞれは、メッセージを受信した後に、接続されている
、カーネルモジュール２０６ｂ〜ｅのそれぞれへコマンドをサブミットする。
【０１０５】
５１０では、クラスタノードモジュール２０４がカーネルモジュール２０６から結果を
受け取る。一実施形態では、カーネルモジュール２０６は、その評価を完了した後、その
カーネルモジュールの出力を、そのカーネルモジュールが接続されているクラスタノード
モジュール２０４に返す。カーネルモジュールからの結果の性質に応じて、クラスタノー
ドモジュール２０４は、その結果を、ローカルコンピュータシステムに報告するか、メッ
セージとして別のクラスタノードモジュール２０４に渡すことが可能である。たとえば、
第１のプロセッサ１１２ａで実行されているクラスタノードモジュール２０４ａは、出力
を、そのローカルコンピュータシステム１１０に報告する。たとえば、第１のプロセッサ
１１２ａでは、クラスタノードモジュール２０４ａが、カーネルモジュール２０６ａの出
力を直接報告するだけである。
【０１０６】
５１２では、他のクラスタノードモジュール２０４からのメッセージに対する応答が行
われる。一実施形態では、各クラスタノードモジュール（たとえば、クラスタノードモジ
ュール２０４ａ）は、他のクラスタノードモジュール２０４ｂ〜ｅおよびカーネルモジュ
ール２０６ａからのメッセージを、それらがなくなるまで繰り返しチェックし、それらに
応答する。一実施形態では、カーネルモジュール２０６からの出力メッセージが、ローカ
ルコンピュータシステムの出力に転送される。他のクラスタノードモジュール２０４から
のメッセージは、受信済みメッセージキュー３０６（「ＲＭＱ」）に転送される。メッセ
ージ受信キュー３０８（「ＭＲＱ」）内の各エントリからのデータが、ＲＭＱ３０６内の
エントリと照合される（たとえば、前述のｍｐｉＩＲｅｃｖ［］呼び出しの説明を参照）
。ＭＲＱ３０８からのデータが合致すれば、そのデータが、ＲＭＱ３０６内の対応するデ
ータと結合され、「完了」としてマーキングされる（たとえば、前述のｍｐｉＴｅｓｔ［
］呼び出しの説明を参照）。このプロセスは、クラスタノードモジュール２０４ａ〜ｅの
ピアツーピア動作を提供する。この仕組みにより、複数の同時に実行されるカーネルモジ
ュール（たとえば、Ｍａｔｈｅｍａｔｉｃａカーネル）において実行されるコードは、ペ
ア単位または集団で対話することにより、１つのカーネルが単独で実行した場合より大規
模かつ／または高速に、計算、処理、または他の作業を実行することが可能である。この
ようにして、どのような作業が行われるかをユーザコマンドで指定する、ユーザが入力し
た命令およびデータが、より迅速に、かつ／または、より確実に実行されることが可能で
ある。メッセージへの応答が完了すると、プロセスは５０２へ戻る。
Ｃ．クラスタシャットダウンプロセス
【０１０７】
一実施形態では、コンピュータクラスタ１００は、システムをシャットダウンするプロ
シージャを含む。ユーザインタフェースモジュール２０２に接続されたクラスタノードモ
ジュール２０４ａにおける動作プロセス（または主ループ）が、「Ｑｕｉｔ」または「Ｅ
ｘｉｔ」コマンド（終了コマンド）を検出するか、他の方法で、シャットダウンを示すメ
ッセージをユーザから受け取った場合は、クラスタノードモジュール２０４ａ〜ｅおよび
カーネルモジュール２０６ａ〜ｅをシャットダウンするシーケンスが起動される。一実施
形態では、ユーザインタフェースモジュール２０２に接続されたクラスタノードモジュー
ル２０４ａは、他のすべてのクラスタノードモジュール２０４ｂ〜ｅに終了メッセージを
送信する。各クラスタノードモジュール２０４は、その終了コマンドを、それぞれのロー
カルカーネルモジュール２０６に転送する。各クラスタノードモジュール２０４は、それ
ぞれのＭａｔｈｅｍａｔｉｃａカーネルが終了した後、それぞれの、他のクラスタノード
モジュールとの通信ネットワークを切断することに進む（たとえば、前述のＭＰＩ＿Ｆｉ
ｎａｌｉｚｅコマンドの説明を参照）。プロセスの最後に、各クラスタノードモジュール
２０４が実行を終了する。
Ｖ．運用例
【０１０８】
例示を目的として、コンピュータクラスタシステムが実運用で使用されるサンプルシナ
リオを説明する。以下のサンプルシナリオでは、Ｍａｔｈｅｍａｔｉｃａコードの例が与
えられ、クラスタシステムによってコードがどのように実行されるかの説明が行われる。
基本ＭＰＩ
【０１０９】
各ノードが使用できる基本データは、ノードの識別番号およびプロセッサの総数を含む
。
【数１】
2017016693.tif 000018
【０１１０】
第１の要素は、プロセッサごとに一意でなければならず、第２の要素は、一般に、すべ
てのプロセッサに対して同じである。プロセッサ０は、他のどのような値がｍｐｉＧａｔ
ｈｅｒ［］などの集団（後述）通信呼び出しを使用しているかを知ることが可能である。
【数２】
2017016693.tif 000019
ピアツーピアＭＰＩ
【０１１１】
ｍｐｉＳｅｎｄおよびｍｐｉＲｅｃｖコマンドは、可能な基本メッセージパッシングを
行うが、どのプロセッサをターゲットとするかを定義する必要がある。以下では、プロセ
ッサの各ペアが互いをポイントするように、新しい変数ｔａｒｇｅｔＰｒｏｃを定義して
いる。
【数３】
2017016693.tif 000020
【０１１２】
この例では、偶数プロセッサが、それぞれの「右」プロセッサをターゲットとし、奇数
プロセッサが、それぞれの「左」プロセッサをポイントとする。たとえば、プロセッサが
列に並べられ、順に番号が付けられた場合は、すべての偶数番号プロセッサが、その列に
おける直後のプロセッサとペアになり、すべての奇数番号プロセッサが、直前のプロセッ
サとペアになる。その場合は、次のようにメッセージが送信されることが可能である。
【数４】
2017016693.tif 000021
【０１１３】
Ｉｆ［］文は、それらのプロセッサに別々のコードを評価させる。すなわち、奇数プロ
セッサがπの２２桁を送信し、偶数プロセッサがそのメッセージを受信する。これらのＭ
ＰＩ呼び出しは何も返さないことに注意されたい。受信済みメッセージは、変数ａの中に
ある。
【数５】
2017016693.tif 000022
【０１１４】
奇数プロセッサの変数ａは、何も定義されない。さらに、＄ＮＰｒｏｃが８の場合、プ
ロセッサ３がプロセッサ２にπを送信し、プロセッサ５がプロセッサ４にπを送信し、以
降も同様である。これらのメッセージは、プロセッサ０を介しては送信されず、それらだ
けで伝達されている。
【０１１５】
ｍｐｉＩＳｅｎｄおよびｍｐｉＩＲｅｃｖコマンドの文字「Ｉ」は、非同期動作を示し
ており、非同期動作は、メッセージが送受信されている間、または、他のプロセッサがビ
ジーの場合に他の作業を行うことを可能にする。したがって、前述の例は、次のように、
非同期で行われることが可能である。
【数６】
2017016693.tif 000023
【０１１６】
変数ｅは、メッセージを識別する重要データを有し、ｍｐｉＴｅｓｔ［ｅ］は、それら
の数式がアクセス対象になるまでは、Ｔｒｕｅを返すことが可能である。この時点で、他
の多くの評価を実行することが可能である。次に、これらのデータが必要になるタイミン
グを、以下のように、ｍｐｉＴｅｓｔを用いてチェックすることが可能である。
【数７】
2017016693.tif 000024
【０１１７】
ｍｐｉＷａｉｔ［ｅ］コマンドも使用されていることが可能であり、これは、ｍｐｉＴ
ｅｓｔ［ｅ］がＴｒｕｅを返すまで戻らない。これらのピアツーピア呼び出しを使用する
権限を持つと、任意の問題に対して任意のメッセージパッシングパターンを構築すること
が可能になる。
集団ＭＰＩ
【０１１８】
ケースによっては、そのような明示的な制御は不要であり、一般に使用される通信パタ
ーンで十分である。プロセッサ０が、すべてのプロセッサが有することを意図された、ｂ
という数式を有するものとする。ブロードキャストＭＰＩ呼び出しが、以下を行う。
【数８】
2017016693.tif 000025
【０１１９】
第２の引数は、どのプロセッサがこのブロードキャストの「ｒｏｏｔ」かを指定する。
他のすべてのプロセッサは、それぞれのｂが上書きされる。すべてのプロセッサから値を
収集するために、次のように、ｍｐｉＧａｔｈｅｒＤを用いる。
【数９】
2017016693.tif 000026
【０１２０】
プロセッサ０の変数ｃは、ｍｐｉＣｏｍｍＷｏｒｌｄにあるすべてのプロセッサのすべ
てのｂのリストを用いて書き込まれる。次のように、時間的に反対であるのが、ｍｐｉＳ
ｃａｔｔｅｒである。
【数１０】
2017016693.tif 000027
【０１２１】
ｍｐｉＳｃａｔｔｅｒコマンドは、（可能な場合には）変数ａを偶数個の小片に切り分
け、それらを各プロセッサに分散させる。これは、＄ＮＰｒｏｃ＝２の場合の結果であり
、＄ＮＰｒｏｃ＝４の場合、ｂは｛２｝を有するだけである。
【０１２２】
ＭＰＩは、メッセージングと混合されたシンプルな計算を実行するためにリダクション
操作を行う。以下について考える。
【数１１】
2017016693.tif 000028
【０１２３】
ｍｐｉＳｕｍ定数は、すべてのプロセッサの変数ａが合計されることを示す。この場合
では、＄ＮＰｒｏｃが２なので、同一でない要素は奇数側の合計をもたらし、同一である
要素は偶数側の合計をもたらしている。
【０１２４】
すべてが指定されているとは限らない場合、これらの呼び出しのほとんどは、デフォル
ト値を有する。たとえば、以下の呼び出しのそれぞれは、前述のｍｐｉＧａｔｈｅｒ［］
呼び出しと等価の効果を有する。
【数１２】
2017016693.tif 000029
高級呼び出し
【０１２５】
高級呼び出しは、よく使用されるアプリケーションプログラム呼び出し（たとえば、Ｍ
ａｔｈｅｍａｔｉｃａ呼び出し）の便利な並列バージョンを含むことが可能である。たと
えば、ＰａｒａｌｌｅｌＴａｂｌｅ［］は、評価が分散様式で自動的に行われること以外
は、Ｔａｂｌｅ［］と同様である。
【数１３】
2017016693.tif 000030
【０１２６】
第３の引数は、答えをプロセッサ０と突き合わせることを指定する。これは、多数の呼
び出しを並列化して複雑な関数にするための、有用かつシンプルな方法である。以下のよ
うに、広い範囲の入力に対して、複雑な関数を定義し、それを評価することが可能である
。
【数１４】
2017016693.tif 000031
【０１２７】
ＰａｒａｌｌｅｌＦｕｎｃｔｉｏｎＴｏＬｉｓｔ［］も、この形式の並列化を実行する
ための簡略化された方法を提供する。
単純でない通信の操作
行列操作
【０１２８】
実施形態によっては、以下のように、１つまたは複数の関数が並列に、行列計算の解決
を支援することが可能である。
【数１５】
2017016693.tif 000032
フーリエ変換
【０１２９】
大きな配列のフーリエ変換は、並列化によって高速の解決が可能である。あるいは、ク
ラスタ上で解決可能にされることが可能である。これは、フーリエ変換がすべてメモリに
保持されることが可能だからである。前述の例の２次元フーリエ変換は、以下のとおりで
ある。
【数１６】
2017016693.tif 000033
エッジセル管理
【０１３０】
多くの問題が、パーティション間の対話を必要とするが、これはエッジ要素上でのみ行
われる。これらのエッジを維持することは、ＥｄｇｅＣｅｌｌ［］を用いて行われること
が可能である。
【数１７】
2017016693.tif 000034
要素管理
【０１３１】
小片ベースの問題では、各アイテムが空間内をドリフトする可能性があり、場合によっ
ては、個々のプロセッサのパーティションの外へ出る可能性がある。これは、以下のよう
に、ＥｌｅｍｅｎｔＭａｎａｇｅ［］で解決可能である。
【数１８】
2017016693.tif 000035
【０１３２】
ＥｌｅｍｅｎｔＭａｎａｇｅの第２の引数は、リストの要素をテストする方法を示して
いる。ｆｃｎ識別子は、どのプロセッサがその要素の「ホーム」であるかを返す。整数を
渡すことは、各要素がそれ自体リストであって、その第１の要素が、０から渡された引数
までの範囲の数であることを仮定している。
【０１３３】
前述の各例は、Ｍａｔｈｅｍａｔｉｃａソフトウェアと、ＭＰＩ呼び出しおよびクラス
タコマンドの特定の実施形態とに関連していたが、これらの実施形態は、本発明のシステ
ムおよび方法の種々の実施形態の特徴を例示するためにのみ用いられていることを理解さ
れたい。
ＶＩ．さらなる実施形態
【０１３４】
特定の実施形態を参照して、クラスタコンピューティングの手法、モジュール、呼び出
し、および関数が開示されているが、本開示は、それによって限定されることを意図する
ものではない。むしろ、当業者であれば、本明細書における開示から、クラスタ呼び出し
、関数、および管理システムの本開示そのものの選択に対して幅広い代替があることを理
解されよう。たとえば、本明細書に記載のように、シングルノードカーネルは、様々な管
理ツールを用いて管理されることが可能であり、かつ／または、ユーザによって手動で管
理されることが可能である。別の例として、クラスタノードモジュールは、クラスタコン
ピューティングに無関係の呼び出しおよびプロシージャを含む、本明細書で開示されてい
ない、さらなる呼び出しおよびプロシージャを含むことが可能である。
【０１３５】
当業者であれば、本明細書における開示から、他の実施形態も明らかであろう。さらに
、記載された実施形態は、例としてのみ提示されており、本開示の範囲を限定するもので
はない。実際、本明細書に記載の新規な方法およびシステムは、本発明の趣旨から逸脱し
ない他の様々な形態で実施されることが可能である。したがって、当業者であれば、本明
細書における開示に鑑みて、他の組み合わせ、省略、置換、および修正が明らかであろう
。したがって、本開示は、開示された実施形態によって限定されるものではなく、添付の
特許請求の範囲の参照によって規定されるものとする。添付の特許請求の範囲およびそれ
らの等価物は、本発明の範囲および趣旨を逸脱しない形態または修正を包含するものとす
る。
【図１】
2017016693.tif 000036
【図２】
2017016693.tif 000037
【図３】
2017016693.tif 000038
【図４】
2017016693.tif 000039
【図５】
2017016693.tif 000040
【手続補正書】
【提出日】平成28年11月16日(2016.11.16)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
複数のノードと、
非同期呼び出しを用いて、互いに通信する前記ノードのためのメカニズムと、を有し、
前記ノードの１または２以上が、コマンドを受信し、コンピュータクラスタのクラスタ初期化処理を開始するように構成され、ここで前記クラスタ初期化処理が２または３以上の前記ノードの通信を確立する処理であり、
前記ノードのそれぞれが、ユーザ命令を翻訳処理するように構成されたシングルノードカーネルモジュールのプログラムコードを含む非一時的なコンピュータ可読媒体にアクセスするように構成され、
少なくとも一つの前記ノードが、ユーザインターフェースモジュールまたはスクリプトに結果を返す、コンピュータクラスタ。
【請求項２】
前記非同期呼び出しは、ペイロードとして送信される数式とその数式が送信されるターゲットノードとを含む第一パケットを作る第一命令を含み、
少なくとも一つの前記ノードが、前記数式を前記ターゲットノードへ送るように構成される、請求項１に記載のコンピュータクラスタ。
【請求項３】
前記シングルノードカーネルモジュールが、前記第一パケットをローカルクラスタノードモジュールへ送るように構成される、請求項２に記載のコンピュータクラスタ。
【請求項４】
前記非同期呼び出しは、前記数式が受信されることが期待される場所、および前記数式が受信されることが期待される送信ノードとを含む第二パケットを作る第二命令を含み、
少なくとも一つの前記ノードが、前記第二パケットコンテンツをメッセージ受信キューに記憶するように構成される、請求項２に記載のコンピュータクラスタ。
【請求項５】
前記シングルノードカーネルモジュールが、前記第二パケットをローカルクラスタノードモジュールへ送るように構成される、請求項４に記載のコンピュータクラスタ。
【請求項６】
複数のノードと、
互いに通信する前記ノードのためのメカニズムと、を有し、
前記ノードの１または２以上が、コマンドを受信し、コンピュータクラスタのクラスタ初期化処理を開始するように構成され、ここで前記クラスタ初期化処理が２または３以上の前記ノードの通信を確立する処理であり、
前記ノードのそれぞれが、特別目的のマイクロプロセッサによって実行されるコマンドの中にユーザ命令を翻訳処理するように構成されたシングルノードカーネルモジュールのプログラムコードを含む非一時的なコンピュータ可読媒体にアクセスするように構成され、
少なくとも一つの前記ノードが、ユーザインターフェースモジュールまたはスクリプトに結果を返す、コンピュータクラスタ。
【請求項７】
前記特別目的のマイクロプロセッサは、デジタル信号プロセッサを含む、請求項６に記載のコンピュータクラスタ。
【請求項８】
前記複数のノードが、２つ以上のノードサブセットグループの中に組織されている、請求項６に記載のコンピュータクラスタ。
【請求項９】
前記２つ以上のノードサブセットグループの少なくとも一つが、前記特別目的のマイクロプロセッサとデータを交換する、請求項８に記載のコンピュータクラスタ。
【請求項１０】
複数のクラスタノードモジュールをさらに含み、
前記クラスタノードモジュールのそれぞれが、コンピュータ可読媒体に記憶され、および、シングルノードカーネルモジュールと通信し、かつ１または２以上のその他のクラスタノードモジュールと通信し、指令を受け、かつ前記複数のクラスタノードモジュールが他の一つとピアツーピアアーキテクチャを用いて互いに通信するように、少なくともいくつかの前記指令を翻訳する、請求項６に記載のコンピュータクラスタ。
【請求項１１】
前記複数のクラスタノードモジュールがプロセッサキャッシュメモリに格納されている、請求項１０に記載のコンピュータクラスタ。
【請求項１２】
前記シングルノードカーネルモジュールがプロセッサキャッシュメモリに格納されている、請求項６に記載のコンピュータクラスタ。