IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ アドバンスド クラスター システムズ、インコーポレイテッドの特許一覧

特開2022-65008アプリケーションプログラムのためのクラスタコンピューティングのサポート
<>
  • 特開-アプリケーションプログラムのためのクラスタコンピューティングのサポート 図1
  • 特開-アプリケーションプログラムのためのクラスタコンピューティングのサポート 図2
  • 特開-アプリケーションプログラムのためのクラスタコンピューティングのサポート 図3
  • 特開-アプリケーションプログラムのためのクラスタコンピューティングのサポート 図4
  • 特開-アプリケーションプログラムのためのクラスタコンピューティングのサポート 図5
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2022065008
(43)【公開日】2022-04-26
(54)【発明の名称】アプリケーションプログラムのためのクラスタコンピューティングのサポート
(51)【国際特許分類】
   G06F 9/50 20060101AFI20220419BHJP
   G06F 9/54 20060101ALN20220419BHJP
【FI】
G06F9/50 150Z
G06F9/54 B
【審査請求】有
【請求項の数】14
【出願形態】OL
(21)【出願番号】P 2022016640
(22)【出願日】2022-02-04
(62)【分割の表示】P 2019128168の分割
【原出願日】2007-06-07
(31)【優先権主張番号】60/813,738
(32)【優先日】2006-06-13
(33)【優先権主張国・地域又は機関】US
(31)【優先権主張番号】60/850,908
(32)【優先日】2006-10-11
(33)【優先権主張国・地域又は機関】US
(31)【優先権主張番号】11/744,461
(32)【優先日】2007-05-04
(33)【優先権主張国・地域又は機関】US
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.UNIX
2.SOLARIS
3.IRIX
(71)【出願人】
【識別番号】519313253
【氏名又は名称】アドバンスド クラスター システムズ、インコーポレイテッド
【氏名又は名称原語表記】ADVANCED CLUSTER SYSTEMS,INC.
(74)【代理人】
【識別番号】110000729
【氏名又は名称】特許業務法人 ユニアス国際特許事務所
(72)【発明者】
【氏名】タンネンバウム、ズヴィ
(72)【発明者】
【氏名】ドーガー、ディーン、イー.
(57)【要約】
【課題】複数のノードと、ユーザインタフェースおよびプログラムコード命令を翻訳するカーネルを含むソフトウェアパッケージと、を含むコンピュータクラスタシステムが提供される。
【解決手段】一実施形態では、クラスタノードモジュールが、カーネルおよび他のクラスタノードモジュールと通信するように構成される。クラスタノードモジュールは、互いに通信し、かつカーネルと通信しているいくつかのクラスタノードモジュールがコンピュータクラスタとして動作することが可能であるように、ユーザインタフェースからの命令を受け付け、それらの命令のうちの少なくともいくつかを翻訳する。
【選択図】図2
【特許請求の範囲】
【請求項1】
複数のノードと、前記複数のノードの1つが、ユーザインターフェースモジュールまたはスクリプトとの通信を確立し、当該通信を確立した後で、当該ユーザインターフェースモジュールまたはスクリプトから命令を受信するように構成され、コンピュータクラスタのクラスタ初期化処理を開始するように構成され、
前記クラスタ初期化処理が、ピアツーピアアーキテクチャを用いて、前記複数のノードの少なくとも送信元ノードと宛先ノードとの間で通信することを確立する処理であり、
非同期呼び出しを用いて、互いに通信する前記送信元ノードと宛先ノードのためのメカニズムと、を有し、
前記メカニズムが、前記送信元ノードから前記宛先ノードによって受信されることが期待される数式に関する情報を記憶するように構成されたメッセージ受信キューを有しており、
クラスタ初期化処理の後で、前記ノードの少なくとも一つと通信するユーザインターフェースモジュールまたはスクリプトからユーザ命令を受信することによって、前記ノードのそれぞれが、ユーザ命令を翻訳処理する機能をマイクロプロセッサに実現させるためのシングルノードカーネルモジュールのプログラムコードを含む非一時的なコンピュータ可読媒体にアクセスし、前記マイクロプロセッサによって前記プログラムコードが実行されるように構成され、
前記ノードの少なくとも一つが、前記ユーザインターフェースモジュールまたは前記スクリプトへ結果を返す、コンピュータクラスタ。
【請求項2】
前記非同期呼び出しは、ペイロードとして送信される数式とその数式が送信されるターゲットノードとを含む第一パケットを作る第一命令を含み、
前記ノードの少なくとも一つが、前記数式を前記ターゲットノードへ送るように構成される、請求項1に記載のコンピュータクラスタ。
【請求項3】
前記シングルノードカーネルモジュールが、前記第一パケットを前記シングルノードカーネルモジュールに接続されたローカルのクラスタノードモジュールへ送るように構成される、請求項2に記載のコンピュータクラスタ。
【請求項4】
前記非同期呼び出しは、
前記数式を受け取ることを期待する場所、および前記数式の出所として期待される送信ノードを指定する第二パケットを作成する第二命令を含み、
前記ノードの少なくとも一つが、前記第二パケットのコンテンツをメッセージ受信キューに記憶するように構成される、請求項2に記載のコンピュータクラスタ。
【請求項5】
前記シングルノードカーネルモジュールが、前記第二パケットを前記シングルノードカーネルモジュールに接続されたローカルのクラスタノードモジュールへ送るように構成される、請求項4に記載のコンピュータクラスタ。
【請求項6】
前記クラスタ初期化処理が、さらに、少なくとも前記送信元ノードと前記宛先ノードにおいて前記メッセージ受信キューを作成する、ことを含む、請求項1に記載のコンピュータクラスタ。
【請求項7】
複数のノードと、前記複数のノードの1つが、ユーザインターフェースモジュールまたはスクリプトとの通信を確立し、当該通信を確立した後で、当該ユーザインターフェースモジュールまたはスクリプトから命令を受信し、コンピュータクラスタのクラスタ初期化処理を開始するように構成され、前記クラスタ初期化処理が複数のノードの少なくとも送信元ノードと宛先ノードとの間で、通信を確立する処理であり、
互いに通信する前記送信元ノードと宛先ノードのためのメカニズムを受信するように構成され、
前記メカニズムが、前記送信元ノードから前記宛先ノードによって受信されることが期待される数式に関する情報を記憶するように構成されたメッセージ受信キューを有しており、
前記ノードのそれぞれが、ユーザ命令を翻訳処理する機能を、特別目的のマイクロプロセッサによって実行可能なコマンドへ実現させるためのシングルノードカーネルモジュールのプログラムコードを含む非一時的なコンピュータ可読媒体にアクセスするように構成され、
前記ノードの少なくとも一つが、ユーザインターフェースモジュールまたはスクリプトへ結果を送る、コンピュータクラスタ。
【請求項8】
前記特別目的のマイクロプロセッサは、デジタル信号プロセッサを含む、請求項7に記載のコンピュータクラスタ。
【請求項9】
前記複数のノードは、2つ以上のノードのサブセットグループに編成される、請求項7に記載のコンピュータクラスタ。
【請求項10】
前記2つ以上のノードのサブセットグループの少なくとも一つにおいて、前記複数のノードが、前記特別目的のマイクロプロセッサとデータを交換する、請求項9に記載のコンピュータクラスタ。
【請求項11】
複数のクラスタノードモジュールをさらに含み、
前記クラスタノードモジュールのそれぞれが、コンピュータ可読媒体に記憶され、および、
前記クラスタノードモジュールのそれぞれが、1以上の他のクラスタノードモジュールおよびシングルノードカーネルモジュールと通信し、指令を受け、かつ前記複数のクラスタノードモジュールが他の一つとピアツーピアアーキテクチャを用いて互いに通信するように、少なくともいくつかの前記指令を翻訳する機能をマイクロプロセッサに実現させることを特徴とする、請求項7に記載のコンピュータクラスタ。
【請求項12】
前記複数のクラスタノードモジュールがプロセッサキャッシュメモリに記憶されるように構成されている、請求項11に記載のコンピュータクラスタ。
【請求項13】
前記シングルノードカーネルモジュールがプロセッサキャッシュメモリに記憶されるように構成されている、請求項7に記載のコンピュータクラスタ。
【請求項14】
前記クラスタ初期化処理が、さらに、少なくとも前記送信元ノードと前記宛先ノードにおいて前記メッセージ受信キューを作成する、ことを含む、請求項7に記載のコンピュータクラスタ。
【発明の詳細な説明】
【技術分野】
【0001】
(優先権情報)
本出願は、2006年6月13日に出願された米国特許仮出願第60/813738号、ならびに2006年10月11日に出願された米国特許仮出願第60/850908号の優先権を主張するものである。上記参照された各出願は、その全体が、参照によって本明細書に組み込まれ、本明細書の一部になっている。
【0002】
本開示は、主としてクラスタコンピューティングの分野に関し、特に、コンピュータプログラムにクラスタコンピューティング機能性を追加するシステムおよび方法に関する。
【背景技術】
【0003】
コンピュータクラスタは、相互通信することにより、あたかも単一のコンピュータであるかのようにタスクを達成することが可能である、2つ以上のコンピュータ、マイクロプロセッサ、および/またはプロセッサコア(「ノード」)からなるグループを含む。現在、多くのコンピュータアプリケーションプログラムは、たとえ、それらが、クラスタとして動作することが可能なノードのグループにおいて実行されているとしても、コンピュータクラスタが提供しうる利点の恩恵を受けるようには設計されていない。コンピュータプログラムの中には、単一ノードでしか実行できないものがあるが、これは、たとえば、それらがタスクを直列に実行するようにコーディングされているためであったり、単一ノードのみを認識するように、あるいは単一ノードにのみ命令を送信するように設計されているためであったりする。
【発明の概要】
【発明が解決しようとする課題】
【0004】
アプリケーションプログラムの中には、ユーザ、スクリプト、または別のソースによってそのプログラムに与えられる命令を実行するインタプリタを含むものがある。そのようなインタプリタは、「カーネル」と呼ばれることがあり、それは、たとえば、インタプリタが、コンピュータシステムの少なくともいくつかのハードウェアリソースを管理することが可能であるため、かつ/または、それらのリソースとソフトウェア(たとえば、高級プログラミング言語を含むことが可能な与えられた命令)との間の通信を管理することが可能であるためである。ソフトウェアプログラムの中には、単一ノードと通信するように設計されたカーネルを含むものがある。単一ノードと通信するように設計されたカーネルを含むソフトウェアパッケージの一例として、Wolfram Research,Inc.製のMathematica(登録商標)(「Mathematica」)がある。他のベンダ製の数学ソフトウェアパッケージや他の種類のソフトウェアも、そのようなカーネルを含むことが可能である。
【0005】
同じくWolfram Research,Inc.製である、gridMathematicaとして知られる製品が、「分散コンピューティング」として知られる形式のグリッドコンピューティングを実行する機能を、Mathematicaに与える。グリッドコンピュータは、一般にピアとして互いに通信することがない複数のノードを含む。分散コンピューティングは、計算処理時にジョブ間でデータを共有する必要がない、多数の独立ジョブ、作業パケットからなる作業負荷に対して最適化されることが可能である。グリッドコンピュータは、複数のスレーブノードまたは計算ノードを管理する、マスタノードとして知られる、少なくとも1つのノードを含む。gridMathematicaでは、複数のカーネルのそれぞれが、単一ノードで実行される。1つのカーネルが、他のカーネル(計算カーネルまたはスレーブカーネル)のすべての入力、出力、およびスケジューリングを取り扱うマスタカーネルに指定される。計算カーネルは、マスタカーネルを実行しているノードからのみコマンドおよびデータを受け取る。各計算カーネルは、各自の作業を、他の計算カーネルとは独立に実行し、あるジョブの中間結果は、他のノードで進行中の他のジョブに影響を及ぼさない。
【課題を解決するための手段】
【0006】
本明細書に記載の実施形態は、いくつかの特徴を有するが、それらの1つ1つは、それぞれの望ましい属性を単独で担うものではない。以下では、特許請求の範囲で表される本発明の範囲を限定することなく、有利な特徴のいくつかについて簡単に説明する。
【0007】
本明細書に記載のいくつかの実施形態は、コンピュータアプリケーションにクラスタコンピューティング機能性を便利に追加する手法を提供する。一実施形態では、ソフトウェアパッケージのユーザが、そのソフトウェアがクラスタ内の複数のノードから恩恵を受けることを可能にすることにより、そのソフトウェアパッケージから、より高い性能、および/または、より高い可用性を達成できるであろう。一実施形態は、スーパコンピュータレベルの性能を有するコンピュータクラスタで実行されることが可能なアプリケーションを、ユーザが、Mathematicaのような高級言語を用いて作成することを可能にする。一実施形態は、Mathematicaフロントエンド、コマンドラインインタフェース、1つまたは複数の高級コマンド、またはCやFORTRANのようなプログラミング言語を用いる、そのような高性能コンピューティングへのアクセスを提供する。
【0008】
一実施形態は、シングルノードで実行されるように設計された、たとえば、Mathematicaカーネルなどのソフトウェアモジュールを、たとえそのソフトウェアモジュールがサポートを提供するように設計されていない場合であっても、クラスタコンピューティングをサポートするよう適応させる。一実施形態は、そのプログラムのソースコードへのアクセスが可能でない場合でも、アプリケーションプログラムの並列化を提供する。一実施形態は、メッセージパッシングインタフェース(「MPI」)呼び出しを、たとえば、Mathematicaプログラミング環境などのユーザインタフェースの中から直接追加およびサポートする。一実施形態では、MPI呼び出しは、Mathematicaフロントエンドなどのインタラクティブプログラミング環境に追加され、そこから使用できるようにされる。
【0009】
一実施形態は、第1のプロセッサ、第2のプロセッサ、および第3のプロセッサを含むコンピュータクラスタを提供する。クラスタは、第1のプロセッサ、第2のプロセッサ、または第3のプロセッサのうちの少なくとも1つと通信している少なくとも1つのコンピュータ可読媒体を含む。第1のカーネルが、少なくとも1つのコンピュータ可読媒体に常駐し、コマンドを、第1のプロセッサで実行されるコードに変換するように構成される。第1のクラスタノードモジュールが、少なくとも1つのコンピュータ可読媒体に常駐する。第1のクラスタノードモジュールは、第1のカーネルへコマンドを送信し、ユーザインタフェースからコマンドを受信するように構成される。第2のカーネルが、少なくとも1つのコンピュータ可読媒体に常駐する。第2のカーネルは、コマンドを、第2のプロセッサで実行されるコードに変換するように構成される。第2のクラスタノードモジュールが、少なくとも1つのコンピュータ可読媒体に常駐する。第2のクラスタノードモジュールは、第2のカーネルへコマンドを送信するように構成され、第1のクラスタノードモジュールと通信する。第3のカーネルが、少なくとも1つのコンピュータ可読媒体に常駐する。第3のカーネルは、コマンドを、第3のプロセッサで実行されるコードに変換するように構成される。第3のクラスタノードモジュールが、少なくとも1つのコンピュータ可読媒体に常駐する。第3のクラスタノードモジュールは、第3のカーネルへコマンドを送信するように構成され、第1のクラスタノードモジュールおよび第2のクラスタノードモジュールと通信するように構成される。第1のクラスタノードモジュールは、第2および第3のクラスタノードモジュールから発せられたメッセージが記憶されるデータ構造を備える。
【0010】
別の実施形態は、複数のノードと、ユーザインタフェースおよびプログラムコード命令を翻訳するシングルノードカーネルを含むソフトウェアパッケージと、を含むコンピュータクラスタを提供する。クラスタノードモジュールが、シングルノードカーネルおよび他のクラスタノードモジュールと通信するように構成される。クラスタノードモジュールは、互いに通信しているいくつかのクラスタノードモジュールがクラスタとして動作するように、ユーザインタフェースからの命令を受け付け、それらの命令のうちの少なくともいくつかを翻訳する。クラスタノードモジュールは、ユーザインタフェースからは、シングルノードカーネルのように見える。一実施形態では、この、シングルノードカーネルは、Mathematicaカーネルを含む。実施形態によっては、ユーザインタフェースは、Mathematicaフロントエンドまたはコマンドラインのうちの少なくとも一方を含むことが可能である。実施形態によっては、クラスタノードモジュールは、MPI呼び出しの少なくとも一部を実施するライブラリ呼び出しを含むツールキットを含む。実施形態によっては、クラスタノードモジュールは、高級クラスタコンピューティングコマンドを含むツールキットを含む。一実施形態では、クラスタシステムは、複数のMacintosh(登録商標)コンピュータ(「Mac」)、Windows(登録商標)ベースのパーソナルコンピュータ(「PC」)、および/またはUmx/Linuxベースのワークステーションを含むことが可能である。
【0011】
さらなる実施形態は、複数のノードを含むコンピュータクラスタを提供する。各ノードは、ユーザインタフェースのプログラムコードと、ユーザ命令を翻訳するように構成されたシングルノードカーネルモジュールのプログラムコードと、を備えるコンピュータ可読媒体にアクセスするように構成される。クラスタは、複数のクラスタノードモジュールを含む。この複数のクラスタノードモジュールが互いに通信してクラスタとして動作するように、各クラスタノードモジュールは、シングルノードカーネルおよび1つまたは複数の他のクラスタノードモジュールと通信することと、ユーザインタフェースから命令を受け付けることと、ユーザ命令の少なくともいくつかを翻訳することと、を行うように構成される。通信ネットワークが、これらのノードを接続する。複数のクラスタノードモジュールの1つが、結果をユーザインタフェースへ返す。
【0012】
別の実施形態は、コンピュータクラスタにおいてコマンドを評価する方法を提供する。ユーザインタフェースまたはスクリプトの少なくとも一方からのコマンドが、コンピュータクラスタ内の1つまたは複数のクラスタノードモジュールに伝達される。その1つまたは複数のクラスタノードモジュールのそれぞれが、そのコマンドに基づくメッセージを、そのクラスタノードモジュールに関連付けられた各カーネルモジュールに伝達する。その1つまたは複数のクラスタノードモジュールのそれぞれが、そのクラスタノードモジュールに関連付けられた各カーネルモジュールから結果を受け取る。その1つまたは複数のクラスタノードモジュールのうちの少なくとも1つが、他のクラスタノードモジュールからのメッセージに応答する。
【0013】
別の実施形態は、複数のノードにおいてMathematicaコードを実行するコンピューティングシステムを提供する。このコンピューティングシステムは、第1のノードで実行されている第1のMathematicaカーネルと通信する第1のノードモジュールと、第2のノードで実行されている第2のMathematicaカーネルと通信する第2のノードモジュールと、第3のノードで実行されている第3のMathematicaカーネルと通信する第3のノードモジュールと、を含む。第1のノードモジュール、第2のノードモジュール、および第3のノードモジュールは、ピアツーピアアーキテクチャを用いて互いに通信するように構成される。実施形態によっては、第1のノードモジュール、第2のノードモジュール、および第3のノードモジュールのそれぞれは、他のノードモジュールから発せられたメッセージを保持するデータ構造と、メッセージの受信先として期待されるロケーション、およびそのメッセージの送信元として期待されるノードの識別子を指定するデータを保持するデータ構造と、を含む。
【0014】
図面を参照しながら、種々の特徴を実施する全体のアーキテクチャを説明する。各図面および関連する説明は、実施形態を例示するために提供されており、本開示の範囲を限定するものではない。図面全体を通じて、参照される要素の間の対応を示すために、参照符号を繰り返し使用している。
【図面の簡単な説明】
【0015】
図1】コンピュータクラスタの一実施形態のブロック図である。
図2】コンピュータクラスタの一実施形態で実行されているソフトウェアモジュール同士の関係を示すブロック図である。
図3】クラスタノードモジュールの一実施形態のブロック図である。
図4】クラスタ初期化プロセスの一実施形態を示すフローチャートである。
図5】クラスタノードモジュールの動作の一実施形態を示すフローチャートである。
【発明を実施するための形態】
【0016】
本明細書では、例示を目的として、いくつかの実施形態を、Mathematicaソフトウェアを用いるクラスタコンピューティングのコンテキストで説明する。本開示は、単一のソフトウェアプログラムに限定されず、本システムおよび方法は、他のアプリケーションソフトウェアとともに使用されることが可能であり、そのようなソフトウェアとして、たとえば、Maple(登録商標)、MATLAB(登録商標)、MathCAD(登録商標)、Apple Shake(登録商標)、Apple(登録商標) Compressor、IDL(登録商標)、他の、インタプリタまたはカーネルを用いるアプリケーション、Microsoft Excel(登録商標)、Adobe After Effects(登録商標)、Adobe Premiere(登録商標)、Adobe Photoshop(登録商標)、Apple Final Cut Pro(登録商標)、Apple iMovie(登録商標)などがある。しかしながら、いくつかの図面および/または説明は、Mathematicaを実行するコンピュータクラスタの実施形態に関連している。本システムは、多様な用途を含むことが可能であり、そのような用途には、これらに限定されないが、学生、教育者、科学者、技術者、数学者、研究者、技能者などが含まれる。また、他の実施形態では、本システムおよび方法は、単一モジュールとして実装されること、および/または、他の様々なモジュールとともに実装されることが可能であることも理解されよう。さらに、本明細書に記載の個々の実施態様は、本開示を限定するためではなく、本開示の例を示すために説明されている。
I.概要
【0017】
本明細書に記載のクラスタコンピューティングシステムは、一般に、1つまたは複数の通信ネットワークを介して互いに接続された1つまたは複数のコンピュータシステムを含む。この通信ネットワークは、ローカルエリアネットワーク(「LAN」)、ワイドエリアネットワーク(「WAN」)、イントラネット、インターネットなどのうちの1つまたは複数を含むことが可能である。一実施形態では、コンピュータシステムは、たとえば、1つまたは複数のプロセッサコア(「ノード」)を含むことが可能なマイクロプロセッサのような、1つまたは複数のプロセッサを備える。「ノード」という用語は、コードのシングルスレッド実行が可能なプロセッサユニットまたはプロセッササブユニットを意味する。プロセッサは、たとえば、ランダムアクセスメモリ(「RAM」)のような、1つまたは複数のメモリ装置、および/または、たとえば、ハードディスクのような、1つまたは複数の光ストレージ装置に接続されることが可能である。プロセッサとそのような他の装置との間の通信は、たとえば、コンピュータシステムの1つまたは複数のローカルバスを介して、あるいは、LAN、WAN、ストレージエリアネットワーク(「SAN」)、および/または他の任意の、コンピュータシステムコンポーネント間で信号を搬送することが可能な通信ネットワークを介して、行われることが可能である。一実施形態では、カーネルのような、1つまたは複数のソフトウェアモジュールが、相互接続された複数のコンピュータシステムの中のノードで実行される。一実施形態では、カーネルは、単一ノードでのみ実行されるように設計される。一実施形態では、クラスタコンピューティング機能性を実装するために、クラスタノードモジュールが、カーネルと通信し、クラスタノードモジュール同士で通信する。
【0018】
図1は、コンピュータクラスタ100の一実施形態のブロック図であり、ここでは、コンピュータシステム110、120、130が、通信ネットワーク102を介して互いに通信している。ネットワーク102は、LAN、WAN、無線ネットワーク、イントラネット、またはインターネットのうちの1つまたは複数を含む。本コンピュータクラスタの一実施形態では、コンピュータシステム110は、プロセッサ112a、112b、メモリ114、およびオプションのストレージ116を含む。他のコンピュータシステム120、130も同様の装置を含むことが可能であり、それらの装置は、一般に、コンピュータシステム内で、ローカルバス(図示せず)のようなローカル通信アーキテクチャを介して互いに通信している。コンピュータシステムは、1つまたは複数のプロセッサを含むことが可能であり、各プロセッサは、シングルスレッド実行が可能な、1つまたは複数のプロセッサコアを含むことが可能である。プロセッサコアは、一般には、独立したマイクロプロセッサであるが、複数のプロセッサコアが単一チップパッケージに含まれることも可能である。シングルスレッド実行を行うように設計されたソフトウェアコードは、一般に、一度に1つのプロセッサコアで実行されることが可能である。たとえば、シングルスレッドソフトウェアコードは、典型的には、コンピュータシステム内に複数のプロセッサコアがあることの恩恵を受けない。
【0019】
図2は、コンピュータクラスタ100の一実施形態で実行されているソフトウェアモジュール同士の関係を示すブロック図である。図2に示された実施形態では、カーネルモジュール206a~eは、シングルスレッド実行を行うように設計されている。たとえば、図1に示されたプロセッサ112a、112b、122a、122b、132のそれぞれが、プロセッサコアを1つだけ含む場合、コンピュータシステム110のメモリ114にロードされた2つのカーネルモジュール(たとえば、カーネルモジュール206a、206b)は、2つのプロセッサ112a、112bの処理用帯域幅の少なくとも一部を活用することが可能である。同様に、コンピュータシステム120のメモリ124にロードされた2つのカーネルモジュール206c、206dは、2つのプロセッサ122a、122bの処理用帯域幅の少なくとも一部を活用することが可能である。同様に、コンピュータシステム130のプロセッサ132の帯域幅は、コンピュータシステムのメモリ134にロードされた、クラスタノードモジュール204eの単一インスタンスによって利用されることが可能である。
【0020】
図2に示された実施形態では、カーネルモジュール206a~eのそれぞれが、単一クラスタノードモジュール204a~eとそれぞれ通信している。たとえば、カーネルモジュール206aは、クラスタノードモジュール204aと通信しており、カーネルモジュール206bは、クラスタノードモジュール206bと通信しており、他も同様である。一実施形態では、クラスタノードモジュール204a~eの1つのインスタンスが、コンピュータシステムで実行されているカーネルモジュール206a~eのインスタンスごとに、コンピュータシステムのメモリ114、124、134にロードされている。図2に示されるように、クラスタノードモジュール204a~eのそれぞれが、他のクラスタノードモジュール204a~eのそれぞれと通信している。たとえば、1つのクラスタノードモジュール204aは、他のすべてのクラスタノードモジュール204b~eと通信している。クラスタノードモジュール204aは、たとえば、両方のクラスタノードモジュール204a~bが同じコンピュータシステム110にあるプロセッサ112a、112bで実行されている場合に、ローカルバス(図示せず)を介して別のクラスタノードモジュール204bと通信することが可能である。クラスタノードモジュール204aはまた、たとえば、クラスタノードモジュール204a、cが、異なるコンピュータシステム110、120にあるプロセッサ112a、122aで実行されている場合に、通信ネットワーク102を介して別のクラスタノードモジュール204cと通信することも可能である。
【0021】
図2に示されるように、たとえば、Mathematicaフロントエンドおよび/またはコマンドラインインタフェースなどのオプションのユーザインタフェースモジュール202が、クラスタノードモジュール204aに接続可能である。ユーザインタフェースモジュールは、クラスタノードモジュール204aが実行されている、同じコンピュータシステム110および/または同じマイクロプロセッサ112aで実行可能である。クラスタノードモジュール204a~eは、シングルスレッドカーネルモジュールにクラスタコンピューティング機能を実装するMPI呼び出しおよび/または高度クラスタ機能を提供する。クラスタノードモジュール204a~eは、ユーザインタフェースモジュール202から見れば、カーネルモジュール206aのように見えてカーネルモジュール206aのようにふるまうように構成されている。同様に、クラスタノードモジュール202a~eは、カーネルモジュール206aから見れば、ユーザインタフェースモジュール202のように見えてユーザインタフェースモジュール202のようにふるまうように構成されている。第1のクラスタノードモジュール204aは、他の1つまたは複数のクラスタノードモジュール204b、204cなどと通信しており、これらのそれぞれが、MPI呼び出しおよび/または高度クラスタコマンドのセットを提供する。一実施形態では、MPIは、コンピュータクラスタにおけるノード間メッセージ送信に用いられることが可能である。
【0022】
「隣接する」カーネル同士の間に限らない、任意の2つ以上のクラスタノードモジュールの間(たとえば、クラスタノードモジュール204aと別のクラスタノードモジュール204cとの間)で通信が行われることが可能である。クラスタノードモジュール204a~eのそれぞれは、それぞれのカーネルモジュール206a~eと通信している。したがって、クラスタノードモジュール204aは、カーネルモジュール206aと通信している。MPI呼び出しおよび高度クラスタコマンドは、オプションのユーザインタフェースモジュール208から受け取られたプログラムコードを並列化し、タスクをカーネルモジュール206a~eに分配するために用いられる。クラスタノードモジュール204a~eは、それらのタスクが実行されている間のカーネルモジュール206a~e間の通信を提供する。カーネルモジュール206a~eによって実行された評価の結果は、クラスタノードモジュール204a~eを介して第1のクラスタノードモジュール204aへ返され、第1のクラスタノードモジュール204aは、それらの結果をユーザインタフェースモジュール208へ伝達する。
【0023】
スレッド実行の間のカーネルモジュール206a~e間の相互通信は、クラスタノードモジュール204a~eによって可能にされ、たとえば、様々な種類の数学的問題および科学的問題に取り組むことに関して有利に働く。クラスタコンピューティングによって提供される相互通信は、並列計算の過程におけるノード間の情報交換を可能にする。本開示の諸実施形態は、そのような相互通信を、Mathematicaのようなソフトウェアプログラムに提供する一方、グリッドコンピューティングソリューションは、1つのマスタノードと多数のスレーブノードとの間でのみ通信を実施することが可能である。グリッドコンピューティングでは、スレッド実行の間は、スレーブノード間で通信を行うことができない。
【0024】
本明細書では、いくつかの実施形態の概要を与える目的で、本発明の特定の態様、利点、利益、および新規な特徴について説明する。本発明の任意の特定の実施形態によれば、そのような利点または利益のすべてが、必ずしも実現可能ではないことを理解されたい。したがって、たとえば、当業者であれば理解されるように、本発明は、本明細書で教示されるように1つまたは複数の利点を達成する様式で、本明細書で教示または提案されうるような他の利点または利益を必ずしも達成することなく、実施または実行されることが可能である。
II.コンピュータクラスタ100
【0025】
図1に示されるように、クラスタシステム100の一実施形態は、通信ネットワーク102を介して互いに通信しているコンピュータシステム110、120、130を含む。第1のコンピュータシステム110は、1つまたは複数のプロセッサ112a~b、メモリ装置114、およびオプションのストレージ装置116を含むことが可能である。同様に、第2のコンピュータシステム120は、1つまたは複数のプロセッサ122a~b、メモリ装置124、およびオプションのストレージ装置126を含むことが可能である。同様に、第3のコンピュータシステム130は、1つまたは複数のプロセッサ132、メモリ装置134、およびオプションのストレージ装置136を含むことが可能である。コンピュータシステム110、120、130のそれぞれは、通信ネットワーク102に接続されるためのネットワークインタフェース(図示せず)を含み、通信ネットワーク102は、LAN、WAN、イントラネット、無線ネットワーク、および/またはインターネットのうちの1つまたは複数を含むことが可能である。
A.コンピュータシステム110
【0026】
一実施形態では、第1のコンピュータシステム110は、コンピュータクラスタ100の一部として、ネットワーク102を介して、他のコンピュータシステム120、130と通信している。一実施形態では、コンピュータシステム110は、1つまたは複数のプロセッサ112a~b、メモリ装置114、オプションのストレージ装置116、ならびに、ネットワーク102との通信のためのネットワークインタフェースモジュール(図示せず)を含むパーソナルコンピュータ、ワークステーション、サーバ、またはブレードである。
1.プロセッサ112a~b
【0027】
一実施形態では、コンピュータシステム110は、1つまたは複数のプロセッサ112a~bを含む。プロセッサ112a~bは、1つまたは複数の汎用シングルコアマイクロプロセッサまたはマルチコアマイクロプロセッサであることが可能であり、そのようなプロセッサとして、たとえば、Pentium(登録商標)プロセッサ、Pentium(登録商標) IIプロセッサ、Pentium(登録商標) Proプロセッサ、Pentium(登録商標) IIIプロセッサ、Pentium(登録商標) 4プロセッサ、Core Duo(登録商標)プロセッサ、Core 2 Duo(登録商標)プロセッサ、Xeon(登録商標)プロセッサ、Itanium(登録商標)プロセッサ、Pentium(登録商標) Mプロセッサ、x86プロセッサ、Athlon(登録商標)プロセッサ、8051プロセッサ、MIPS(登録商標)プロセッサ、PowerPC(登録商標)プロセッサ、ALPHA(登録商標)プロセッサなどがある。さらに、プロセッサ112a~bのうちの1つまたは複数が、デジタル信号プロセッサのような専用マイクロプロセッサであることが可能である。コンピュータシステム110内にあるすべてのプロセッサ112a~bの中のプロセッサコア(たとえば、シングルスレッド実行が可能なプロセッサユニット)の総数は、コンピュータシステム110内で使用可能なノードの数に対応する。たとえば、プロセッサ112a~bのそれぞれが、2つのプロセッサコアを有するCore 2 Duo(登録商標)プロセッサであった場合、コンピュータシステム110は、全部で4つのノードを有することになる。各ノードは、シングルスレッドカーネルモジュールのようなプログラムモジュールの1つまたは複数のインスタンスを実行することが可能である。
2.ネットワークインタフェースモジュール
【0028】
コンピュータシステム110はさらに、コンピュータシステム110と他のコンピュータシステム120、130との間の、通信ネットワーク102を介する通信を容易にするネットワークインタフェースモジュール(図示せず)を含むことが可能である。
【0029】
ネットワークインタフェースモジュールは、様々なネットワークプロトコルを使用することが可能である。一実施形態では、ネットワークインタフェースモジュールは、TCP/IPを含む。しかしながら、他の種類のネットワーク通信プロトコル、たとえば、ポイントツーポイントプロトコル(「PPP」)、サーバメッセージブロック(「SMB」)、シリアルラインインターネットプロトコル(「SLIP」)、トンネリングPPP、AppleTalkなども使用可能であることを理解されたい。
3.メモリ114およびストレージ116
【0030】
コンピュータシステム110は、メモリ114を含むことが可能である。メモリ114は、たとえば、プロセッサキャッシュメモリ(プロセッサコア別のキャッシュメモリや、複数のプロセッサコアによって共有されるキャッシュメモリなど)、動的ランダムアクセスメモリ(「DRAM」)、静的ランダムアクセスメモリ(「SRAM」)、または、他の任意の種類の、コンピュータデータ、命令、またはプログラムコードを記憶できるメモリ装置を含むことが可能である。コンピュータシステム110はさらに、オプションのストレージ116を含むことが可能である。ストレージ116は、たとえば、1つまたは複数のハードディスクドライブ、フロッピーディスク、フラッシュメモリ、磁気ストレージメディア、CD-ROM、DVD、光ストレージメディア、または他の任意の種類の、コンピュータデータ、命令、およびプログラムコードを記憶できるストレージ装置を含むことが可能である。
4.コンピュータシステム110情報
【0031】
コンピュータシステム110は、様々なオペレーティングシステムとともに使用されることが可能であり、たとえば、Microsoft(登録商標) Windows(登録商標) 3.X、Windows 95(登録商標)、Windows 98(登録商標)、Windows NT(登録商標)、Windows 2000(登録商標)、Windows XP(登録商標)、Windows CE(登録商標)、Palm Pilot OS、OS/2、Apple(登録商標) MacOS(登録商標)、MacOS X(登録商標)、MacOS X Server(登録商標)、ディスク オペレーティングシステム(DOS)、UNIX、Linux(登録商標)、VxWorks(IBM(登録商標) OS/2(登録商標))、Sun OS、Solaris OS、IRIX OSなどのオペレーティングシステムとともに使用されることが可能である。
【0032】
一実施形態では、コンピュータシステム110は、パーソナルコンピュータ、ラップトップコンピュータ、Blackberry(登録商標)装置、ポータブルコンピューティング装置、サーバ、コンピュータワークステーション、個々のコンピュータからなるローカルエリアネットワーク、インタラクティブキオスク、携帯情報端末、インタラクティブ無線通信装置、ハンドヘルドコンピュータ、埋め込みコンピューティング装置などである。
【0033】
当業者であれば理解されるように、コンピュータシステム110は、様々なサブルーチン、プロシージャ、定義文、およびマクロを含むことが可能である。上記各モジュールは、典型的には、別々にコンパイルされて、1つの実行可能プログラムにリンクされる。しかしながら、当業者であれば理解されるように、それらのモジュールのうちの選択されたモジュールによって実行されたプロセスは、その他のモジュールのいずれかに任意に再分配されるか、1つのモジュールにまとめられるか、共有可能なダイナミックリンクライブラリのかたちで使用可能にされるか、他の任意の論理様式で分割されることが可能である。
B.コンピュータシステム120
【0034】
一実施形態では、第2のコンピュータシステム120は、コンピュータクラスタ100の一部として、ネットワーク102を介して、他のコンピュータシステム110、130と通信している。一実施形態では、コンピュータシステム120は、1つまたは複数のプロセッサ122a~b、メモリ装置124、オプションのストレージ装置126、ならびに、ネットワーク102との通信のためのネットワークインタフェースモジュール(図示せず)を含むパーソナルコンピュータ、ワークステーション、サーバ、またはブレードである。
1.プロセッサ112a~b
【0035】
一実施形態では、コンピュータシステム120は、1つまたは複数のプロセッサ122a~bを含む。プロセッサ122a~bは、1つまたは複数の汎用シングルコアマイクロプロセッサまたはマルチコアマイクロプロセッサであることが可能であり、そのようなプロセッサとして、たとえば、Pentium(登録商標)プロセッサ、Pentium(登録商標) IIプロセッサ、Pentium(登録商標) Proプロセッサ、Pentium(登録商標) IIIプロセッサ、Pentium(登録商標) 4プロセッサ、Core Duo(登録商標)プロセッサ、Core 2 Duo(登録商標)プロセッサ、Xeon(登録商標)プロセッサ、Itanium(登録商標)プロセッサ、Pentium(登録商標) Mプロセッサ、x86プロセッサ、Athlon(登録商標)プロセッサ、8051プロセッサ、MIPS(登録商標)プロセッサ、PowerPC(登録商標)プロセッサ、ALPHA(登録商標)プロセッサなどがある。さらに、プロセッサ122a~bは、デジタル信号プロセッサのような任意の専用マイクロプロセッサであることが可能である。コンピュータシステム120内にあるすべてのプロセッサ122a~bの中のプロセッサコア(たとえば、シングルスレッド実行が可能なプロセッサユニット)の総数は、コンピュータシステム120内で使用可能なノードの数に対応する。たとえば、プロセッサ122a~bのそれぞれが、2つのプロセッサコアを有するCore 2 Duo(登録商標)プロセッサであった場合、コンピュータシステム120は、全部で4つのノードを有することになる。各ノードは、シングルスレッドカーネルモジュールのようなプログラムモジュールの1つまたは複数のインスタンスを実行することが可能である。
2.ネットワークインタフェースモジュール
【0036】
コンピュータシステム120はさらに、コンピュータシステム120と他のコンピュータシステム110、130との間の、通信ネットワーク102を介する通信を容易にするネットワークインタフェースモジュール(図示せず)を含むことが可能である。
【0037】
ネットワークインタフェースモジュールは、様々なネットワークプロトコルを使用することが可能である。一実施形態では、ネットワークインタフェースモジュールは、TCP/IPを含む。しかしながら、他の種類のネットワーク通信プロトコル、たとえば、ポイントツーポイントプロトコル(「PPP」)、サーバメッセージブロック(「SMB」)、シリアルラインインターネットプロトコル(「SLIP」)、トンネリングPPP、AppleTalkなども使用可能であることを理解されたい。
3.メモリ124およびストレージ126
【0038】
コンピュータシステム120は、メモリ124を含むことが可能である。メモリ124は、たとえば、プロセッサキャッシュメモリ(プロセッサコア別のキャッシュメモリや、複数のプロセッサコアによって共有されるキャッシュメモリなど)、動的ランダムアクセスメモリ(「DRAM」)、静的ランダムアクセスメモリ(「SRAM」)、または、他の任意の種類の、コンピュータデータ、命令、またはプログラムコードを記憶できるメモリ装置を含むことが可能である。コンピュータシステム120はさらに、オプションのストレージ126を含むことが可能である。ストレージ126は、たとえば、1つまたは複数のハードディスクドライブ、フロッピーディスク、フラッシュメモリ、磁気ストレージメディア、CD-ROM、DVD、光ストレージメディア、または他の任意の種類の、コンピュータデータ、命令、およびプログラムコードを記憶できるストレージ装置を含むことが可能である。
4.コンピュータシステム120情報
【0039】
コンピュータシステム120は、様々なオペレーティングシステムとともに使用されることが可能であり、たとえば、Microsoft(登録商標) Windows(登録商標) 3.X、Windows 95(登録商標)、Windows 98(登録商標)、Windows NT(登録商標)、Windows 2000(登録商標)、Windows XP(登録商標)、Windows CE(登録商標)、Palm Pilot OS、OS/2、Apple(登録商標) MacOS(登録商標)、MacOS X(登録商標)、MacOS X Server(登録商標)、ディスク オペレーティングシステム(DOS)、UNIX、Linux(登録商標)、VxWorks(IBM(登録商標) OS/2(登録商標))、Sun OS、Solaris OS、IRIX OSなどのオペレーティングシステムとともに使用されることが可能である。
【0040】
一実施形態では、コンピュータシステム120は、パーソナルコンピュータ、ラップトップコンピュータ、Blackberry(登録商標)装置、ポータブルコンピューティング装置、サーバ、コンピュータワークステーション、個々のコンピュータからなるローカルエリアネットワーク、インタラクティブキオスク、携帯情報端末、インタラクティブ無線通信装置、ハンドヘルドコンピュータ、埋め込みコンピューティング装置などである。
【0041】
当業者であれば理解されるように、コンピュータシステム120は、様々なサブルーチン、プロシージャ、定義文、およびマクロを含むことが可能である。上記各モジュールは、典型的には、別々にコンパイルされて、1つの実行可能プログラムにリンクされる。しかしながら、当業者であれば理解されるように、それらのモジュールのうちの選択されたモジュールによって実行されたプロセスは、その他のモジュールのいずれかに任意に再分配されるか、1つのモジュールにまとめられるか、共有可能なダイナミックリンクライブラリのかたちで使用可能にされるか、他の任意の論理様式で分割されることが可能である。
C.コンピュータシステム130
【0042】
一実施形態では、第3のコンピュータシステム130は、コンピュータクラスタ100の一部として、ネットワーク102を介して、他のコンピュータシステム110、120と通信している。一実施形態では、コンピュータシステム130は、1つまたは複数のプロセッサ132、メモリ装置134、オプションのストレージ装置136、ならびに、ネットワーク102との通信のためのネットワークインタフェースモジュール(図示せず)を含むパーソナルコンピュータ、ワークステーション、サーバ、またはブレードである。
1.プロセッサ112a~b
【0043】
一実施形態では、コンピュータシステム130は、プロセッサ132を含む。プロセッサ132は、汎用シングルコアマイクロプロセッサまたはマルチコアマイクロプロセッサであることが可能であり、そのようなプロセッサとして、たとえば、Pentium(登録商標)プロセッサ、Pentium(登録商標) IIプロセッサ、Pentium(登録商標) Proプロセッサ、Pentium(登録商標) IIIプロセッサ、Pentium(登録商標) 4プロセッサ、Core Duo(登録商標)プロセッサ、Core 2 Duo(登録商標)プロセッサ、Xeon(登録商標)プロセッサ、Itanium(登録商標)プロセッサ、Pentium(登録商標) Mプロセッサ、x86プロセッサ、Athlon(登録商標)プロセッサ、8051プロセッサ、MIPS(登録商標)プロセッサ、PowerPC(登録商標)プロセッサ、ALPHA(登録商標)プロセッサなどがある。さらに、プロセッサ132は、デジタル信号プロセッサのような任意の専用マイクロプロセッサであることが可能である。コンピュータシステム130内にあるプロセッサ132の中のプロセッサコア(たとえば、シングルスレッド実行が可能なプロセッサユニット)の総数は、コンピュータシステム130内で使用可能なノードの数に対応する。たとえば、プロセッサ132が、2つのプロセッサコアを有するCore 2 Duo(登録商標)プロセッサであった場合、コンピュータシステム130は、2つのノードを有することになる。各ノードは、シングルスレッドカーネルモジュールのようなプログラムモジュールの1つまたは複数のインスタンスを実行することが可能である。
2.ネットワークインタフェースモジュール
【0044】
コンピュータシステム130はさらに、コンピュータシステム130と他のコンピュータシステム110、120との間の、通信ネットワーク102を介する通信を容易にするネットワークインタフェースモジュール(図示せず)を含むことが可能である。
【0045】
ネットワークインタフェースモジュールは、様々なネットワークプロトコルを使用することが可能である。一実施形態では、ネットワークインタフェースモジュールは、TCP/IPを含む。しかしながら、他の種類のネットワーク通信プロトコル、たとえば、ポイントツーポイントプロトコル(「PPP」)、サーバメッセージブロック(「SMB」)、シリアルラインインターネットプロトコル(「SLIP」)、トンネリングPPP、AppleTalkなども使用可能であることを理解されたい。
3.メモリ134およびストレージ136
【0046】
コンピュータシステム130は、メモリ134を含むことが可能である。メモリ134は、たとえば、プロセッサキャッシュメモリ(プロセッサコア別のキャッシュメモリや、複数のプロセッサコアによって共有されるキャッシュメモリなど)、動的ランダムアクセスメモリ(「DRAM」)、静的ランダムアクセスメモリ(「SRAM」)、または、他の任意の種類の、コンピュータデータ、命令、またはプログラムコードを記憶できるメモリ装置を含むことが可能である。コンピュータシステム130はさらに、オプションのストレージ136を含むことが可能である。ストレージ136は、たとえば、1つまたは複数のハードディスクドライブ、フロッピーディスク、フラッシュメモリ、磁気ストレージメディア、CD-ROM、DVD、光ストレージメディア、または他の任意の種類の、コンピュータデータ、命令、およびプログラムコードを記憶できるストレージ装置を含むことが可能である。
4.コンピュータシステム130情報
【0047】
コンピュータシステム130は、様々なオペレーティングシステムとともに使用されることが可能であり、たとえば、Microsoft(登録商標) Windows(登録商標) 3.X、Windows 95(登録商標)、Windows 98(登録商標)、Windows NT(登録商標)、Windows 2000(登録商標)、Windows XP(登録商標)、Windows CE(登録商標)、Palm Pilot OS、OS/2、Apple(登録商標) MacOS(登録商標)、MacOS X(登録商標)、MacOS X Server(登録商標)、ディスク オペレーティングシステム(DOS)、UNIX、Linux(登録商標)、VxWorks(IBM(登録商標) OS/2(登録商標))、Sun OS、Solaris OS、IRIX OSなどのオペレーティングシステムとともに使用されることが可能である。
【0048】
一実施形態では、コンピュータシステム130は、パーソナルコンピュータ、ラップトップコンピュータ、Blackberry(登録商標)装置、ポータブルコンピューティング装置、サーバ、コンピュータワークステーション、個々のコンピュータからなるローカルエリアネットワーク、インタラクティブキオスク、携帯情報端末、インタラクティブ無線通信装置、ハンドヘルドコンピュータ、埋め込みコンピューティング装置などである。
【0049】
当業者であれば理解されるように、コンピュータシステム130は、様々なサブルーチン、プロシージャ、定義文、およびマクロを含むことが可能である。上記各モジュールは、典型的には、別々にコンパイルされて、1つの実行可能プログラムにリンクされる。しかしながら、当業者であれば理解されるように、それらのモジュールのうちの選択されたモジュールによって実行されたプロセスは、その他のモジュールのいずれかに任意に再分配されるか、1つのモジュールにまとめられるか、共有可能なダイナミックリンクライブラリのかたちで使用可能にされるか、他の任意の論理様式で分割されることが可能である。
E.通信ネットワーク102
【0050】
一実施形態では、コンピュータシステム110、120、130は、通信ネットワーク102を介して、互いに通信している。
【0051】
通信ネットワーク102は、1つまたは複数の、任意の種類の、電子的に接続されたコンピュータのグループを含むことが可能であり、そのようなグループとして、たとえば、仮想プライベートネットワーク、パブリックインターネット、プライベートインターネット、セキュアインターネット、プライベートネットワーク、パブリックネットワーク、付加価値ネットワーク、有線ネットワーク、無線ネットワーク、イントラネットなどのネットワークがある。さらに、ネットワークとの接続性は、たとえば、モデム、イーサネット(登録商標)(IEEE 802.3)、ギガビットイーサネット(登録商標)、10ギガビットイーサネット(登録商標)、トークンリング(IEEE 802.5)、ファイバ分散データリンクインタフェース(FDDI:Fiber Distributed Datalink Interface)、フレームリレー、インフィニバンド(InfiniBand)、ミリネット(Myrinet)、非同期転送モード(ATM)、または別のインタフェースであることが可能である。通信ネットワーク102は、コンピュータシステム110、120、130と、たとえば、モデムによって、またはそれらのシステムのそれぞれにあるネットワークインタフェースカードによって、接続可能である。
【0052】
さらに、同じ、あるいは別々の通信ネットワーク102を使用して、第1のコンピュータシステム110と第2のコンピュータシステム120との間の通信、第1のコンピュータシステム110と第3のコンピュータシステム130との間の通信、および第2のコンピュータシステム120と第3のコンピュータシステム130との間の通信を容易にすることが可能である。
III.ソフトウェアモジュール
【0053】
図1および図2に示されるように、クラスタシステム100の一実施形態は、第1のクラスタノードモジュール204aと通信することによって複数のカーネルモジュール206a~eにアクセスすることが可能なユーザインタフェースモジュール202を含む。ユーザインタフェースモジュールは、(たとえば、実行中は)メモリ114、124、134に記憶されることが可能であり、かつ/または、ストレージ装置116、126、136に記憶されることが可能である。第1のクラスタノードモジュール204aは、他のクラスタノードモジュール204b~eのそれぞれと通信している。カーネルモジュール206a~eは、それらが実行される1つまたは複数のコンピュータシステムのメモリに常駐することが可能である。たとえば、第1のコンピュータシステム110のメモリ114は、カーネルモジュール206a~bのインスタンスを記憶することが可能であり、第2のコンピュータシステム120のメモリ124は、カーネルモジュール206c~dのインスタンスを記憶することが可能であり、第3のコンピュータシステム130のメモリ134は、カーネルモジュール206eのインスタンスを記憶することが可能である。
カーネルモジュール206a~eは、シングルスレッドプログラムコードを含み、それぞれが、プロセッサ112a、112b、122a、122b、132のうちの1つに関連付けられている。コンピュータシステム110、120、130のうちの1つまたは複数、またはリモートコンピュータシステムに記憶されたクラスタ構成モジュールが、たとえば、クラスタノードモジュール204a~eとの通信を確立することが可能である。一実施形態では、クラスタ構成モジュール208とクラスタノードモジュール204a~eとの間の通信によって、クラスタノードモジュール204a~eが初期化されて、コンピュータクラスタ100のクラスタコンピューティングサポートが提供される。
A.クラスタノードモジュール204
【0054】
一実施形態では、クラスタノードモジュール204a~eは、コンピュータクラスタ100で実行されている様々なカーネルモジュール206a~e、たとえば、Mathematicaカーネルなど、が互いに通信するための手段を提供する。クラスタノードモジュール204は、スーパコンピュータおよびクラスタの、いくつかのインストレーションで用いられている、メッセージパッシングインタフェース(「MPI」)として知られるアプリケーションプログラミングインタフェース(「API」)の少なくとも一部を含むことが可能である。クラスタノードモジュール204a~e間の接続(たとえば、図2に示された矢印)からなるネットワークは、たとえば、イーサネット(登録商標)上の TCP/IPのような通信ネットワーク102を用いて実装されることが可能であるが、これらの接続は、他の任意の種類のネットワーク上またはローカルコンピュータバス上でも行われることが可能である。
【0055】
クラスタノードモジュール204は、アプリケーション別のツールキットか、たとえば、MathematicaのMathLink、Add-Ons、またはパケットなどのインタフェースを用いてアプリケーションと対話することが可能である。Mathematicaカーネルを、Mathematicaフロントエンドとして知られるユーザインタフェースまたは他のMathematicaカーネルに接続するために通常使用されるMathLinkは、これらのエンティティのうちの任意のエンティティ間でメッセージ、コマンド、またはデータを含む「パケット」を送信する双方向プロトコルである。MathLinkは、コマンドまたはスレッドの実行中は、直接クラスタコンピューティングのような、Mathematicaカーネル間の同時通信を許可しない。MathLinkはさらに、複数の同時ネットワーク接続を実行するようには設計されていない。実施形態によっては、クラスタノードモジュール204は、同じコンピュータにあるエンティティ同士の接続に、アプリケーション別のツールキット、たとえば、MathLinkなどを用いることが可能である。
【0056】
クラスタまたは他の並列コンピュータに対するプロシージャまたはアクションに関して言えば、すべてのアクションが順番に実行されるとは限らず、順番に実行されなければならないわけでもない。たとえば、古典的な「チューリングマシン」モデルのシングルプロセッサコードとは対照的に、並列コードは、その複数のコピーがクラスタ全体で実行され、典型的には、各プロセッサ(または「プロセッサエレメント」または「コア」)に対して1つのコピーが実行される。そのような並列コードは、同じコードの別々のインスタンスが互いに通信し、共同作業を行い、作業内容を調整し合うことが可能であるように書かれる。これらのコードの複数のインスタンスは、同時に並列に実行されることが可能である。
【0057】
コードインスタンスの数が整数Nであれば、コード実行の各インスタンスは、0からN-1までのラベルが付けられることが可能である。たとえば、コンピュータクラスタは、それぞれがプロセッサを含む、N個の接続されたコンピュータを含むことが可能である。第1のコンピュータは、プロセッサ0で実行されるカーネルモジュール0に、クラスタノードモジュール0が接続されている。次のコンピュータは、プロセッサ1で実行されるカーネルモジュール1に、クラスタノードモジュール1が接続されており、接続されたN個のコンピュータのそれぞれについて同様である。それらのプロシージャのいくつかのステップは共同作業であり、いくつかのステップは単独作業である。これらのエンティティは、必ずしもロックステップにはなっていないが、必ず、初期化、主ループ動作(たとえば、クラスタノードモジュール動作)、およびシャットダウンのパターンに従う。
【0058】
これに対し、gridMathematicaソフトウェアパッケージの一部として与えられる並列コンピューティングツールキット(PCT:parallel computing toolkit)は、別々のノードで実行されている、同じコードのインスタンスがインスタンス同士で通信し、共同作業を行い、作業内容を調整し合うための手段を提供しない。PCTは、Mathematicaカーネルを、本明細書で開示されているいくつかの実施形態で実現されるピアツーピア関係ではなく、マスタスレーブ関係で接続するコマンドを提供する。ピアツーピアノードアーキテクチャを有するコンピュータクラスタで実行される計算は、マスタスレーブノードアーキテクチャを有するグリッドコンピュータで実行される同等の計算より、効率が良く、設計しやすく、かつ/または、信頼性が高いことが可能である。さらに、マスタスレーブノードアーキテクチャを用いるシステムでは、計算の性質によっては、プログラマが、マルチノード処理能力を利用できない場合がある。
【0059】
図3は、MPI呼び出しおよび高度MPI関数を実装するクラスタノードモジュール204の一実施形態を示す。図3に示された実施形態では、クラスタノードモジュール204は、MPIモジュール302、高度機能モジュール304、受信済みメッセージキュー306、およびメッセージ受信キュー308を含む。
1.MPIモジュール302
【0060】
一実施形態では、クラスタノードモジュール204は、MPIモジュール302を含む。MPIモジュール302は、少なくとも5種類のMPI命令またはMPI呼び出しのうちの1つまたは複数に対応するプログラムコードを含むことが可能である。MPIモジュール302によって実装されることが可能な、選択された定数、命令、および/または呼び出しは、以下のとおりである。
<MPI定数>
【0061】
ノード識別子は、メッセージをノードへ送信したり、メッセージをノードから受信したりするために使用される。MPIでは、これは、0から始まる一意の整数($IdProc)を各ノードに割り当てることによって行われる。総数($NProc)がわかっていれば、このデータは、任意の測定可能なエンティティをプログラムで分割することを可能にする。
【表1】
表A

<基本MPI呼び出し>
【0062】
一実施形態では、MPIモジュール302は、たとえば、他の言語(CやFortranなど)でよく使用されるMPI呼び出しをマッピングする比較的低級のルーチン群など、基本MPI呼び出しを含むことが可能であり、それによって、そのような呼び出しをMathematicaユーザインタフェース204から直接使用できるようにすることが可能になる。実施形態によっては、基本MPI呼び出しは、データ、方程式、公式、および/または他の数式を送信する呼び出しを含む。
【0063】
以下の最も基本的なMPI呼び出しを用いれば、1つのノードから別のノードへ数式を単純に送信することが可能である。1つのノードが、数式を送信することを呼び出し、他のノードが、送信された数式を受信する、対応するルーチンを呼び出すことが可能である。メッセージが送信側ノードを離れても、受信側がまだmpiRecvを呼び出していない可能性があるため、mpiSendの完了は、メッセージが受信されたことの確認にはならない。
【表2】
表B

<非同期MPI呼び出し>
【0064】
非同期呼び出しは、複数の通信が同時進行している間にカーネルが作業を行うことを可能にする。また、待機中に、別のノードがデータをまだ送信または受信できないようにして、1つのカーネルが作業を続行できるようにすることが可能である。
【表3】
表C
【0065】
mpiISend[]コマンドは、カーネルモジュール206(たとえば、Mathematicaカーネル)の中から呼び出されることが可能である。mpiISend[]コマンドは、ペイロードとして送信されるMathematica数式と、その数式の送信先とを含むパケットを作成する。このパケット自体は、そのローカルのクラスタノードモジュールだけを宛先とされる。このパケットは、そのローカルのクラスタノードモジュールによって受信された後に復号され、そのペイロードが、パケットで指定されたクラスタノードモジュールに転送される。
【0066】
mpiIRecv[]コマンドも、カーネルモジュール206の中から呼び出されることが可能である。mpiIRecv[]コマンドは、数式を受け取ることを期待する場所、およびこの数式の出所として期待されるプロセッサを指定するパケットを作成する。このパケットは、そのローカルのクラスタノードモジュールによって受信された後に復号され、そのコンテンツが、メッセージ受信キュー(MRQ)308(図3)に記憶される。
【0067】
mpiTest[]コマンドは、カーネルモジュール206の中から呼び出されることが可能である。mpiTest[]コマンドは、どのメッセージを完了のためにテストするかを指定するパケットを作成し、その後、評価すべき数式の応答を待つ。このパケットは、そのカーネルモジュールが関連付けられたクラスタノードモジュール204によって受信された後に復号され、そのメッセージ指定子を用いて、その受信済みメッセージキュー(RMQ)306の中で、完了されたものとしてリストされている、一致する数式が検索される。そのような完了された数式が見つかった場合は、その数式が、mpiTest[]内の応答の一部として、そのローカルのカーネルモジュールに送信される。カーネルモジュールは、この応答の数式を受け取って評価し、これによって、カーネルモジュールの変数が、必要に応じて更新される。
【0068】
他のMPI呼び出しは、基本呼び出しmpiISend、mpiIRecv、およびmpiTestの上に構築される。たとえば、mpiBcast(ブロードキャスト)は、他のプロセッサがRecvを実行している間にブロードキャストプロセッサから他のすべてのプロセッサへ情報を送信する命令を作成する。同様に、ツールキットの高級呼び出しは、MPI呼び出しの集合体の最上部に構築されることが可能である。
集団MPI呼び出し
【0069】
一実施形態では、MPIモジュール302は、集団MPI呼び出し(たとえば、ノード間の基本マルチノードデータ移動を与える呼び出し)を実施するプログラムコードを含むことが可能である。集団MPI呼び出しは、たとえば、ブロードキャスト、収集、転置、および他のベクトル操作や行列操作を含むことが可能である。集団呼び出しはまた、ノードのグループ間で数式を送信するために一般に使用されているメカニズムを提供することも可能である。
【表4】
表D

一実施形態では、MPIモジュール302は、多数のノードにわたって記憶されているデータの並列和および他のリダクション操作を実施するプログラムコードを含む。MPIモジュール302はまた、単純な並列入出力呼び出し(たとえば、複数のノードにあるオブジェクトをクラスタシステム200がロードおよび記憶することを可能にする呼び出し)を実施するプログラムコードを含むことが可能である。
【表5】
表E
【0070】
以下の追加の集団呼び出しは、データを並列にリダクションする操作を実行する。操作の引数は、下記の定数のいずれかであることが可能である。
【表6】
表F

<MPIコミュニケータ呼び出し>
【0071】
一実施形態では、MPIモジュール302は、コミュニケータワールド呼び出し(たとえば、ノードのサブセットがあたかもサブクラスタであるかのように動作することを可能にする呼び出し)を実施するプログラムコードを含む。コミュニケータは、ノードのグループをユーザ定義サブセットに編成する。mpiCommSplit[]によって返されるコミュニケータ値は、他のMPI呼び出しでmpiCommWorldの代わりに使用可能である。
【表7】
表G

<他のMPIサポート呼び出し>
【0072】
共通機能を提供する他の呼び出しとして、以下のものがある。
【表8】
表H

2.高度関数モジュール304
【0073】
一実施形態では、クラスタノードモジュール204は、高度関数モジュール304を含む。高度関数モジュール304は、MPIモジュール302によって実装されるMPI命令およびMPI呼び出しを用いて実行することが不便または非現実的である関数のツールキットを提供するプログラムコードを含むことが可能である。高度関数モジュール304は、高度関数を実装するにあたり、MPIモジュール302によって実装される呼び出しおよび命令に、少なくとも部分的に依存することが可能である。一実施形態では、高度関数モジュール304は、指示または関数のカスタムセットを含む。一代替実施形態では、高度関数モジュール304は、標準のMathematica言語をインタセプトし、これを、クラスタ実行に最適化された1つまたは複数の関数に変換する。そのような実施形態は、Mathematica関数になじんだユーザにとってはより使いやすいものであり得るが、プログラムデバッグプロセスが複雑になる可能性もある。高度関数モジュール304によって実装されるいくつかの関数は、並列コンピューティングを用いるセットアップが困難または複雑である操作を簡略化することが可能である。高度関数モジュール304によって実装可能な、そのような関数のいくつかの例を、以下に示す。
【0074】
以下で説明される呼び出しは、MPI呼び出しの上に構築され、Mathematica機能の、よく使用される通信パターンまたは並列バージョンを提供する。これらは、特に断らない限り、デフォルトが$mpiCommWorldであるコミュニケータmpiCommWorldにおいて実行されるが、実行時に、有効なコミュニケータに変更可能である。
<一般的な分割統治並列評価>
【0075】
一実施形態では、高度関数モジュール304は、基本的な並列化に備える関数、たとえば、多数のノードに記憶されている多数のデータ要素またはデータ入力に対して同じ操作を行うルーチンなどを含む。これらの関数は、並列化されたforループなどに匹敵しうる。以下の呼び出しは、一般的なタスクの単純な並列化を扱う。呼び出しの説明において、「expr」は数式を意味し、「loopspec」は、数式の評価方法を決定するルールのセットを意味する。実施形態によっては、高度関数モジュール304は、{var,count}、{var,start,stop}、および{var,start,stop,increment}を含む、少なくとも3つの形式のloopspecをサポートし、{var,count}の場合、呼び出しは、1から整数「count」までの変数「var」を反復し、{var,start,stop}の場合、呼び出しは、「start」から「stop」までの変数「var」(すべて整数)を反復し、{var,start,stop,increment}の場合、呼び出しは、反復のたびに「increment」が追加される「start」から、「stop」を超えるまでの変数「var」(非整数であってよい)を反復する。
【表9】
表I

<保護セル管理>
【0076】
一実施形態では、高度関数モジュール304は、保護セル操作に備える関数、たとえば、(1D、2D、および/または3Dに最適化された)任意の数の次元のローカル配列のエッジを維持するために最近隣通信を実行するルーチンなどを含む。典型的には、問題の空間は、パーティションに分割されている。しかしながら、各パーティションの隣接するエッジ同士は、相互作用する可能性が非常に高いため、両方のエッジに対して、「保護セル」が、隣接するデータの代わりに挿入される。したがって、あるプロセッサから見える空間は、そのプロセッサが担当する実際の空間より要素2つ分だけ広い。EdgeCellは、これらの保護セルの維持を支援する。
【表10】
表J

<行列およびベクトルの操作>
【0077】
高度関数モジュール304は、線形代数演算に備える関数、たとえば、多数のノードに分割された構造に対する、基本線形代数の並列化バージョンなどを含むことも可能である。そのような線形代数演算では、行列およびベクトルの操作や、たとえば、行列式、トレースなどの他の演算を実行するために、必要に応じてデータを再編成することが可能である。行列は、クラスタ全体にわたる各プロセッサに分割されて記憶される。以下の呼び出しは、これらの行列を一般的な様式で操作する。
【表11】
表K

<要素管理>
【0078】
一実施形態では、高度関数モジュール304は、要素管理操作を含む。たとえば、空間内の複数のノードに切り分けられた要素または小片の大規模ビンが、ルールまたは条件(たとえば、それらの空間座標)に基づいてノード間を移動しなければならない場合がある。そのような操作によって、データはノード間を移動する。分割統治アプローチに加えて、要素のリストを、任意の様式で分割することも可能である。これは、要素を複数のプロセッサに編成またはソートしなければならない場合に有用である。たとえば、システムの各小片が、1つのプロセッサの空間から別のプロセッサの空間へ流れ出る場合があるので、それらのデータは、定期的に再分配される必要がある。
【表12】
表L

<フーリエ変換>
【0079】
一実施形態では、高度関数モジュール304は、大規模並列高速フーリエ変換(「FFT」)を実施するプログラムコードを含む。たとえば、そのような関数は、1つのノードではなく多数のノードに記憶されている大量のデータに対して、1次元、2次元、および/または3次元のFFTを実行することが可能である。非常に大きな配列のフーリエ変換は、メモリ要件の問題にとどまらず、管理が困難である可能性がある。フーリエ変換を並列化することにより、クラスタ全体におけるすべての空きメモリを活用することが可能になり、1つのプロセッサが単独で行うことができないと考えられる問題サイズの操作を行うことが可能になる。
【表13】
表M

<並列ディスクI/O>
【0080】
一実施形態では、高度関数モジュール304は、並列ディスクの入力呼び出しおよび出力呼び出しを含む。たとえば、データがクラスタ全体にわたって均一に分散しているようなクラスタにデータを読み込ませたり、そのようなクラスタからデータを読み出したりすることが必要になる場合がある。以下の表の各呼び出しは、データを1つまたは複数のプロセッサからストレージに保存したり、ストレージからデータを取り出したりすることを可能にする。
【表14】
表N

<自動ロードバランシング>
【0081】
いくつかの関数呼び出しは、完了までの処理時間の長さに一貫性がない可能性がある。たとえば、Mathematicaでは、呼び出しf[20]の評価には、一般に、f[19]の場合よりかなり長い時間がかかる可能性がある。さらに、クラスタ内の1つまたは複数のプロセッサの速度が異なる場合(たとえば、いくつかのプロセッサが2.6GHzのコア周波数で動作していて、他のプロセッサが1GHz未満のコア周波数で動作している場合)は、1つのプロセッサが別のプロセッサより早くタスクを終了する可能性がある。
【0082】
実施形態によっては、高度関数モジュール304は、そのような状況におけるコンピュータクラスタ100の動作を改良することが可能な呼び出しを含む。実施形態によっては、rootプロセッサは、可能な関数呼び出しの小さなサブセットを、クラスタ100上の各プロセッサに割り当てる。結果を最初に返したプロセッサには、可能な呼び出しの第2の小さなサブセットが割り当てられる。rootプロセッサは、評価が完了するまでは結果を受け取るので、可能な呼び出しの小さなサブセットを割り当て続ける。各プロセッサが終了する順番は、数式が評価されるたびに変わる可能性があるが、rootプロセッサは、使用可能になったプロセッサにさらなる作業を割り当て続ける。
【0083】
一実例として、4つのプロセッサと、評価対象のf[1]からf[100]までを考える。これは、プロセッサ0から3までのそれぞれに、f[1]、f[2]、f[3]、f[4]を割り当てることによって実装可能である(rootは自身に割り当てることが可能)。f[2]の結果が最初に返されると、プロセッサ1にはf[5]が割り当てられる。f[4]の結果が次に返されると、プロセッサ3にはf[6]が割り当てられる。これらの割り当ては、すべての結果が計算されるまで続けられる。これらの結果は、ユーザに返される出力のために編成される。
【0084】
代替実施形態では、可能な呼び出しのサブセットは、順次的ではなく、任意の順番で割り当てられることが可能であり、あるいは、バッチ割り当てされることが可能である(たとえば、f[1]、f[5]、f[9]がプロセッサ1に割り当てられる、など)。また、これらのサブセットは、委託によって編成されることも可能である。たとえば、あるプロセッサノードが、その他のプロセッサによって直接制御されるわけでは必ずしもない。代わりに、大きなサブセットをプロセッサに割り当てることが可能であり、そのプロセッサは、それの作業のサブセットを他のプロセッサに割り当てるであろう。この結果として、巨大な軍隊のような割り当ての階層が作成されるであろう。
【表15】
表O
3.受信済みメッセージキュー306
【0085】
一実施形態では、クラスタノードモジュール204は、受信済みメッセージキュー306を含む。受信済みメッセージキュー306は、他のクラスタノードモジュールから受信されたメッセージを記憶するデータ構造を含む。たとえば数式が完了しているかどうかなど、受信されたメッセージに関係する関連データも、受信済みメッセージキュー306に記憶されることが可能である。受信済みメッセージキュー306は、キューおよび/または別の種類のデータ構造、たとえば、スタック、リンクされたリスト、配列、ツリーなどを含むことが可能である。
4.メッセージ受信キュー308
【0086】
一実施形態では、クラスタノードモジュール204は、メッセージ受信キュー308を含む。メッセージ受信キュー308は、式の送信先として期待されるロケーション、およびその式の送信元として期待されるプロセッサに関する情報を記憶するデータ構造を含む。メッセージ受信キュー308は、キューおよび/または別の種類のデータ構造、たとえば、スタック、リンクされたリスト、配列、ツリーなどを含むことが可能である。
B.クラスタ構成モジュール208
【0087】
クラスタ構成モジュール208は、コンピュータシステム110、120、130にクラスタコンピューティングサポートを追加するために、複数のクラスタノードモジュールを初期化するプログラムコードを含む。参照により全体が本明細書に組み込まれて、本明細書の一部をなしている、Daugerに対して発行された米国特許第7136924号(「’924特許」)明細書には、コンピュータクラスタの並列動作および制御のための方法およびシステムが開示されている。1つの方法は、一般に、ネットワークサービスによって発見可能なオペレーティングシステムを有する1つまたは複数のパーソナルコンピュータを取得することを含む。実施形態によっては、この方法は、カーネルモジュールを実行することが可能な1つまたは複数のプロセッサまたはプロセッサコアを取得することを含む。’924特許に記載されるように、ソフトウェアアプリケーションのクラスタノード制御およびインタフェース(CNCI:cluster node control and interface)グループが各ノードにコピーされる。CNCIアプリケーションがノードで実行されている場合、クラスタ構成モジュール208は、クラスタノードモジュール204が、カーネルモジュール206との組み合わせで、そのノードの処理用リソースを使用して、コンピュータクラスタの一部として並列計算タスクを実行できるようにすることが可能である。クラスタ構成モジュール208は、本開示に関連して、クラスタ作成プロセスを大幅に自動化することが可能である。
C.ユーザインタフェースモジュール202
【0088】
実施形態によっては、コンピュータクラスタ100は、たとえば、Mathematicaフロントエンドやコマンドラインインタフェースのようなユーザインタフェースモジュール202を含み、ユーザインタフェースモジュール202は、カーネルモジュール206が、グラフィカル出力を提供し、グラフィカル入力を受け付け、他の、グラフィカルユーザインタフェースまたはコマンドラインインタフェースが提供するユーザ通信方法を提供するための、プログラムコードを含む。ユーザインタフェースモジュール202をサポートするために、実施形態によっては、クラスタノードモジュール204aの動作が変更される。ユーザインタフェースモジュール202は、出力をユーザに直接送信したり、入力をユーザから直接受信したりする代わりに、ユーザインタフェースモジュール202が接続されているクラスタノードモジュール204aを起動し、クラスタノードモジュール204aとユーザインタフェースモジュール202との間の接続、たとえば、MathLink接続などを形成するパラメータを指定する。ユーザインタフェースモジュールによるクラスタノードモジュール204aの起動により、クラスタ上の残りのクラスタノードモジュール204b~eを起動する命令、およびクラスタ上のすべてのカーネルモジュール206a~eを起動するシーケンスを完了する命令の実行が開始されることが可能である。正規にはカーネルモジュール206aに宛てられた、ユーザインタフェースモジュール202からのパケットは、クラスタノードモジュール204aによって、ユーザコマンドとして受け付けられる。クラスタノードモジュール204aに関連付けられたカーネルモジュール206aからの出力は、ユーザに対する表示のために、ユーザインタフェースモジュール202に転送されることが可能である。クラスタノードモジュール204a~eのいずれもが、ユーザインタフェースモジュール202と通信するように構成可能である。
D.カーネルモジュール206
【0089】
カーネルモジュール206は、典型的には、ユーザまたはスクリプトから与えられる高級コード、コマンド、および/または命令を、低級コード、たとえば、機械語やアセンブリ言語などに翻訳するプログラムコードを含む。一実施形態では、各クラスタノードモジュール204a~eは、他のすべてのクラスタノードモジュールに接続され、各カーネルモジュール206a~eは、1つのクラスタノードモジュール204だけが割り当てられ、それに接続される。一実施形態では、プロセッサごとに、クラスタノードモジュールとカーネルモジュールのペアが1つ存在する。たとえば、シングルプロセッサコンピュータシステムを含むコンピュータクラスタ100の一実施形態では、クラスタノードモジュールとカーネルモジュールの各ペアが、シングルプロセッサコンピュータに常駐することが可能である。コンピュータが複数のプロセッサまたはプロセッサコアを含む場合、このコンピュータは、クラスタノードモジュールとカーネルモジュールの複数のペアを含むことが可能であるが、その場合でも、それらのペアは、クラスタノードモジュールのネットワーク接続を介して通信することが可能である。
IV.クラスタコンピューティング方法
【0090】
一実施形態では、コンピュータクラスタ100は、クラスタ初期化プロセス、クラスタノードモジュールの操作方法、およびクラスタシャットダウンプロセスを含む。
A.クラスタ初期化プロセス
【0091】
一実施形態では、クラスタ構成モジュール202は、図4に示されるように、1つまたは複数のカーネルモジュール206にクラスタコンピューティングサポートを提供するために、1つまたは複数のクラスタノードモジュール204を初期化する。
【0092】
402では、コンピュータクラスタ100において、クラスタノードモジュールが起動される。一実施形態では、(たとえば、ユーザが位置する)第1のプロセッサ112aで実行されているクラスタノードモジュール204aが、クラスタ構成モジュール208を介して、コンピュータクラスタ100上の他のプロセッサ112b、122a~b、132にアクセスして、クラスタノードモジュール204b~eをクラスタ全体に向けて起動する。一代替実施形態では、クラスタ構成モジュール208が、通信ネットワーク102を介して互いに接続されているプロセッサ112a~b、122a~b、132をサーチし、プロセッサ112a~b、122a~b、132のそれぞれにおいてクラスタノードモジュール204a~eを起動する。
【0093】
404では、クラスタノードモジュール204a~eが、互いの間の通信を確立する。一実施形態では、クラスタノードモジュール204a~eのそれぞれが、クラスタ構成モジュール208によってコンピュータクラスタ100上で起動された他のクラスタノードモジュール204a~eとの直接通信を、MPI_Initコマンドを用いて確立する。
【0094】
406では、各クラスタノードモジュール204が、カーネルモジュール206に接続することを試みる。一実施形態では、クラスタノードモジュール204a~eの各インスタンスが、居場所を定め、起動され、MathLink接続および/または同様の、たとえば、カーネルモジュール206に組み込まれた接続ツールを介してローカルカーネルモジュールに接続する。
【0095】
408では、カーネルモジュール206に接続されていないクラスタノードモジュール204がシャットダウンされる。一実施形態では、各クラスタノードモジュール204は、ローカルカーネルモジュールが見つからないかどうか、あるいは接続されていないかどうかを判定する。一実施形態では、各クラスタノードモジュール204は、カーネルモジュール206との接続に失敗した場合には、そのことを、コンピュータクラスタ100上の他のクラスタノードモジュールに報告し、終了する。
【0096】
410では、残りのクラスタノードモジュール204にプロセッサ識別番号が割り当てられる。一実施形態では、残りの各クラスタノードモジュール204は、アクティブなプロセッサの総数(N)を計算し、アクティブなクラスタノードモジュール204a~eおよびカーネルモジュール206a~eの残りのサブセットを表す識別番号を決定する。この新しい、クラスタノードモジュールとカーネルモジュールのペアのセットは、たとえば、0からN-1の番号が付けられることが可能である。
【0097】
412では、カーネルモジュール206a~eにおいてメッセージパッシングサポートが初期化される。一実施形態では、各クラスタノードモジュール204は、メッセージパッシングをサポートするために、ローカルカーネルモジュール206に初期化コード(たとえば、Mathematica初期化コード)を与える。
【0098】
最後に、414では、クラスタノードモジュール204a~eは、ユーザエントリを受け付けるループに入る。一実施形態では、他のクラスタノードモジュール204のそれぞれが、ネットワーク102に接続されている他のすべてのクラスタノードモジュール204a~eからのメッセージを待っている間に、第1のプロセッサ112aにおけるクラスタノードモジュール204aがユーザ制御に戻った後に、主ループ(たとえば、クラスタ動作ループ)が実行を開始する。
【0099】
初期化プロセスでは、カーネルモジュール206a~eがメッセージを互いに送信するための様式を可能にする構造が作成される。実施形態によっては、初期化が完了した時点で、クラスタ内において、任意のカーネルモジュールが他の任意のカーネルモジュールにデータを送信したり、他の任意のカーネルモジュールからデータを受信したりすることが可能になる。クラスタノードモジュールは、カーネルモジュールが他のカーネルモジュールと直接通信しているという錯覚を起こさせる。初期化プロセスは、図2の例で示されるような、コンピュータクラスタ100上のカーネルモジュール間の関係を作り上げることが可能である。
B.クラスタノードモジュールの操作
【0100】
一実施形態では、クラスタノードモジュール204は、図5に示されるように、主ループの間に、カーネルモジュール206に対するクラスタコンピューティングサポートを実装する。
【0101】
502では、クラスタノードモジュール204は、他のクラスタノードモジュールからのユーザコマンドまたはメッセージを待つ。一実施形態では、他のクラスタノードモジュール204b~eがメッセージのチェックを続けている間に、ユーザインタフェースモジュール202に接続されたクラスタノードモジュール204aは、ユーザコマンドを待つ。
【0102】
コマンドまたはメッセージが受信されたら、504へ進む。504では、クラスタノードモジュール204aは、受信されたメッセージが終了(quit)コマンドかどうかを判定する。終了コマンドが受信された場合、クラスタノードモジュール204aは、ループを終了し、505のクラスタノードモジュールシャットダウンプロセスへ進む。受信されたメッセージが終了コマンドでない場合は、プロセスは506へ進む。
【0103】
506では、受信されたコマンドが、コンピュータクラスタ100上のすべてのクラスタノードモジュール204a~eへ伝達される。一実施形態では、ユーザがユーザインタフェースモジュール202にコマンドを入力すると、ユーザインタフェースモジュール202に接続されたクラスタノードモジュール204aが、そのユーザコマンドを、コンピュータクラスタ100の他のすべてのクラスタノードモジュール204b~eにサブミットする。ユーザコマンドは、シンプルであってよいが(たとえば、「1+1」)、カーネルモジュール206a~e(たとえば、Mathematicaカーネル)間のメッセージパッシングを実行する、ユーザインタフェースモジュール202(たとえば、Mathematicaフロントエンド)内からのMPI呼び出しを含む、コード(たとえば、Mathematicaコードなど)の完全なサブルーチンおよびシーケンスであってもよい。これらは、クラスタノードモジュール204とそのローカルカーネルモジュール206との間で特別に識別されたメッセージを用いて実装される基本MPI呼び出しを含む。
【0104】
508では、メッセージ(またはユーザコマンド)が、カーネルモジュール206a~eへ伝達される。一実施形態では、ユーザインタフェースモジュール202に接続されたクラスタノードモジュール204aは、ユーザコマンドを、クラスタノードモジュール204aが接続されているカーネルモジュール206aへサブミットする。他のクラスタノードモジュール204b~eのそれぞれは、メッセージを受信した後に、接続されている、カーネルモジュール206b~eのそれぞれへコマンドをサブミットする。
【0105】
510では、クラスタノードモジュール204がカーネルモジュール206から結果を受け取る。一実施形態では、カーネルモジュール206は、その評価を完了した後、そのカーネルモジュールの出力を、そのカーネルモジュールが接続されているクラスタノードモジュール204に返す。カーネルモジュールからの結果の性質に応じて、クラスタノードモジュール204は、その結果を、ローカルコンピュータシステムに報告するか、メッセージとして別のクラスタノードモジュール204に渡すことが可能である。たとえば、第1のプロセッサ112aで実行されているクラスタノードモジュール204aは、出力を、そのローカルコンピュータシステム110に報告する。たとえば、第1のプロセッサ112aでは、クラスタノードモジュール204aが、カーネルモジュール206aの出力を直接報告するだけである。
【0106】
512では、他のクラスタノードモジュール204からのメッセージに対する応答が行われる。一実施形態では、各クラスタノードモジュール(たとえば、クラスタノードモジュール204a)は、他のクラスタノードモジュール204b~eおよびカーネルモジュール206aからのメッセージを、それらがなくなるまで繰り返しチェックし、それらに応答する。一実施形態では、カーネルモジュール206からの出力メッセージが、ローカルコンピュータシステムの出力に転送される。他のクラスタノードモジュール204からのメッセージは、受信済みメッセージキュー306(「RMQ」)に転送される。メッセージ受信キュー308(「MRQ」)内の各エントリからのデータが、RMQ306内のエントリと照合される(たとえば、前述のmpiIRecv[]呼び出しの説明を参照)。MRQ308からのデータが合致すれば、そのデータが、RMQ306内の対応するデータと結合され、「完了」としてマーキングされる(たとえば、前述のmpiTest[]呼び出しの説明を参照)。このプロセスは、クラスタノードモジュール204a~eのピアツーピア動作を提供する。この仕組みにより、複数の同時に実行されるカーネルモジュール(たとえば、Mathematicaカーネル)において実行されるコードは、ペア単位または集団で対話することにより、1つのカーネルが単独で実行した場合より大規模かつ/または高速に、計算、処理、または他の作業を実行することが可能である。このようにして、どのような作業が行われるかをユーザコマンドで指定する、ユーザが入力した命令およびデータが、より迅速に、かつ/または、より確実に実行されることが可能である。メッセージへの応答が完了すると、プロセスは502へ戻る。
C.クラスタシャットダウンプロセス
【0107】
一実施形態では、コンピュータクラスタ100は、システムをシャットダウンするプロシージャを含む。ユーザインタフェースモジュール202に接続されたクラスタノードモジュール204aにおける動作プロセス(または主ループ)が、「Quit」または「Exit」コマンド(終了コマンド)を検出するか、他の方法で、シャットダウンを示すメッセージをユーザから受け取った場合は、クラスタノードモジュール204a~eおよびカーネルモジュール206a~eをシャットダウンするシーケンスが起動される。一実施形態では、ユーザインタフェースモジュール202に接続されたクラスタノードモジュール204aは、他のすべてのクラスタノードモジュール204b~eに終了メッセージを送信する。各クラスタノードモジュール204は、その終了コマンドを、それぞれのローカルカーネルモジュール206に転送する。各クラスタノードモジュール204は、それぞれのMathematicaカーネルが終了した後、それぞれの、他のクラスタノードモジュールとの通信ネットワークを切断することに進む(たとえば、前述のMPI_Finalizeコマンドの説明を参照)。プロセスの最後に、各クラスタノードモジュール204が実行を終了する。
V.運用例
【0108】
例示を目的として、コンピュータクラスタシステムが実運用で使用されるサンプルシナリオを説明する。以下のサンプルシナリオでは、Mathematicaコードの例が与えられ、クラスタシステムによってコードがどのように実行されるかの説明が行われる。
基本MPI
【0109】
各ノードが使用できる基本データは、ノードの識別番号およびプロセッサの総数を含む。
[数1]
【0110】
第1の要素は、プロセッサごとに一意でなければならず、第2の要素は、一般に、すべてのプロセッサに対して同じである。プロセッサ0は、他のどのような値がmpiGather[]などの集団(後述)通信呼び出しを使用しているかを知ることが可能である。
[数2]

<ピアツーピアMPI>
【0111】
mpiSendおよびmpiRecvコマンドは、可能な基本メッセージパッシングを行うが、どのプロセッサをターゲットとするかを定義する必要がある。以下では、プロセッサの各ペアが互いをポイントするように、新しい変数targetProcを定義している。
[数3]
【0112】
この例では、偶数プロセッサが、それぞれの「右」プロセッサをターゲットとし、奇数プロセッサが、それぞれの「左」プロセッサをポイントとする。たとえば、プロセッサが列に並べられ、順に番号が付けられた場合は、すべての偶数番号プロセッサが、その列における直後のプロセッサとペアになり、すべての奇数番号プロセッサが、直前のプロセッサとペアになる。その場合は、次のようにメッセージが送信されることが可能である。
[数4]
【0113】
If[]文は、それらのプロセッサに別々のコードを評価させる。すなわち、奇数プロセッサがπの22桁を送信し、偶数プロセッサがそのメッセージを受信する。これらのMPI呼び出しは何も返さないことに注意されたい。受信済みメッセージは、変数aの中にある。
[数5]
【0114】
奇数プロセッサの変数aは、何も定義されない。さらに、$NProcが8の場合、プロセッサ3がプロセッサ2にπを送信し、プロセッサ5がプロセッサ4にπを送信し、以降も同様である。これらのメッセージは、プロセッサ0を介しては送信されず、それらだけで伝達されている。
【0115】
mpiISendおよびmpiIRecvコマンドの文字「I」は、非同期動作を示しており、非同期動作は、メッセージが送受信されている間、または、他のプロセッサがビジーの場合に他の作業を行うことを可能にする。したがって、前述の例は、次のように、非同期で行われることが可能である。
[数6]
【0116】
変数eは、メッセージを識別する重要データを有し、mpiTest[e]は、それらの数式がアクセス対象になるまでは、Trueを返すことが可能である。この時点で、他の多くの評価を実行することが可能である。次に、これらのデータが必要になるタイミングを、以下のように、mpiTestを用いてチェックすることが可能である。
[数7]
【0117】
mpiWait[e]コマンドも使用されていることが可能であり、これは、mpiTest[e]がTrueを返すまで戻らない。これらのピアツーピア呼び出しを使用する権限を持つと、任意の問題に対して任意のメッセージパッシングパターンを構築することが可能になる。
集団MPI
【0118】
ケースによっては、そのような明示的な制御は不要であり、一般に使用される通信パターンで十分である。プロセッサ0が、すべてのプロセッサが有することを意図された、bという数式を有するものとする。ブロードキャストMPI呼び出しが、以下を行う。
[数8]
【0119】
第2の引数は、どのプロセッサがこのブロードキャストの「root」かを指定する。他のすべてのプロセッサは、それぞれのbが上書きされる。すべてのプロセッサから値を収集するために、次のように、mpiGatherDを用いる。
[数9]
【0120】
プロセッサ0の変数cは、mpiCommWorldにあるすべてのプロセッサのすべてのbのリストを用いて書き込まれる。次のように、時間的に反対であるのが、mpiScatterである。
[数10]
【0121】
mpiScatterコマンドは、(可能な場合には)変数aを偶数個の小片に切り分け、それらを各プロセッサに分散させる。これは、$NProc=2の場合の結果であり、$NProc=4の場合、bは{2}を有するだけである。
【0122】
MPIは、メッセージングと混合されたシンプルな計算を実行するためにリダクション操作を行う。以下について考える。
[数11]
【0123】
mpiSum定数は、すべてのプロセッサの変数aが合計されることを示す。この場合では、$NProcが2なので、同一でない要素は奇数側の合計をもたらし、同一である要素は偶数側の合計をもたらしている。
【0124】
すべてが指定されているとは限らない場合、これらの呼び出しのほとんどは、デフォルト値を有する。たとえば、以下の呼び出しのそれぞれは、前述のmpiGather[]呼び出しと等価の効果を有する。
[数12]

<高級呼び出し>
【0125】
高級呼び出しは、よく使用されるアプリケーションプログラム呼び出し(たとえば、Mathematica呼び出し)の便利な並列バージョンを含むことが可能である。たとえば、ParallelTable[]は、評価が分散様式で自動的に行われること以外は、Table[]と同様である。

[数13]
【0126】
第3の引数は、答えをプロセッサ0と突き合わせることを指定する。これは、多数の呼び出しを並列化して複雑な関数にするための、有用かつシンプルな方法である。以下のように、広い範囲の入力に対して、複雑な関数を定義し、それを評価することが可能である。
[数14]
【0127】
ParallelFunctionToList[]も、この形式の並列化を実行するための簡略化された方法を提供する。
単純でない通信の操作
<行列操作>
【0128】
実施形態によっては、以下のように、1つまたは複数の関数が並列に、行列計算の解決を支援することが可能である。
[数15]

<フーリエ変換>
【0129】
大きな配列のフーリエ変換は、並列化によって高速の解決が可能である。あるいは、クラスタ上で解決可能にされることが可能である。これは、フーリエ変換がすべてメモリに保持されることが可能だからである。前述の例の2次元フーリエ変換は、以下のとおりである。
[数16]

<エッジセル管理>
【0130】
多くの問題が、パーティション間の対話を必要とするが、これはエッジ要素上でのみ行われる。これらのエッジを維持することは、EdgeCell[]を用いて行われることが可能である。
[数17]

<要素管理>
【0131】
小片ベースの問題では、各アイテムが空間内をドリフトする可能性があり、場合によっては、個々のプロセッサのパーティションの外へ出る可能性がある。これは、以下のように、ElementManage[]で解決可能である。
[数18]
【0132】
ElementManageの第2の引数は、リストの要素をテストする方法を示している。fcn識別子は、どのプロセッサがその要素の「ホーム」であるかを返す。整数を渡すことは、各要素がそれ自体リストであって、その第1の要素が、0から渡された引数までの範囲の数であることを仮定している。
【0133】
前述の各例は、Mathematicaソフトウェアと、MPI呼び出しおよびクラスタコマンドの特定の実施形態とに関連していたが、これらの実施形態は、本発明のシステムおよび方法の種々の実施形態の特徴を例示するためにのみ用いられていることを理解されたい。
VI.さらなる実施形態
【0134】
特定の実施形態を参照して、クラスタコンピューティングの手法、モジュール、呼び出し、および関数が開示されているが、本開示は、それによって限定されることを意図するものではない。むしろ、当業者であれば、本明細書における開示から、クラスタ呼び出し、関数、および管理システムの本開示そのものの選択に対して幅広い代替があることを理解されよう。たとえば、本明細書に記載のように、シングルノードカーネルは、様々な管理ツールを用いて管理されることが可能であり、かつ/または、ユーザによって手動で管理されることが可能である。別の例として、クラスタノードモジュールは、クラスタコンピューティングに無関係の呼び出しおよびプロシージャを含む、本明細書で開示されていない、さらなる呼び出しおよびプロシージャを含むことが可能である。
【0135】
当業者であれば、本明細書における開示から、他の実施形態も明らかであろう。さらに、記載された実施形態は、例としてのみ提示されており、本開示の範囲を限定するものではない。実際、本明細書に記載の新規な方法およびシステムは、本発明の趣旨から逸脱しない他の様々な形態で実施されることが可能である。したがって、当業者であれば、本明細書における開示に鑑みて、他の組み合わせ、省略、置換、および修正が明らかであろう。したがって、本開示は、開示された実施形態によって限定されるものではなく、添付の特許請求の範囲の参照によって規定されるものとする。添付の特許請求の範囲およびそれらの等価物は、本発明の範囲および趣旨を逸脱しない形態または修正を包含するものとする。
図1
図2
図3
図4
図5