(57)【要約】高性能コンピューティングアプリケーションのためのランタイム環境。アルゴリズム、アルゴリズムにおいて使用されるカーネル、アルゴリズムへの入力およびそこからの出力、ならびにアルゴリズムの各々の各ステップを実行する際に使用されるコンピューティングノードの数が、最初に定義される。アルゴリズムおよびカーネルは、それぞれのライブラリに追加される。アルゴリズムのうちの１つの実行のための要求が受信され、アルゴリズムのためのコンピューティングシステムへの入力データセットがシステムに転送される。要求されたアルゴリズムが、次いで、出力データセットを生成するために実行される。
2013534347.tif 000002
【特許請求の範囲】
【請求項１】
複数のコンピューティングノードを含む並列処理コンピューティングシステム上でのアプリケーションの実行の方法であって、前記方法は、
複数のアルゴリズムを受信し、前記アルゴリズムをアルゴリズムライブラリに追加することと、
カーネルを受信し、前記カーネルをカーネルライブラリに追加することであって、前記カーネルは、前記アルゴリズムの実行によって呼び出される実行可能プログラムである、ことと、
前記アルゴリズムのうちの要求された１つの実行のための要求を受信することと、
前記アルゴリズムのうちの要求された１つを前記アルゴリズムライブラリから前記コンピューティングシステムに転送することと、
前記コンピューティングシステムに、前記アルゴリズムによって使用される入力データセットを転送することと、
前記入力データセットを使用して、前記コンピューティングシステム上で前記アルゴリズムのうちの要求された１つを実行し、１つ以上の出力データセットを生成することであって、前記アルゴリズムのうちの要求された１つによって前記呼び出されるカーネルの各々は、前記カーネルライブラリから前記コンピューティングシステムに転送され、前記アルゴリズムの実行をもたらす、ことと
を含み、前記アルゴリズムの各々は、呼び出されるべき前記カーネル、使用されるべき前記入力データセットの名称、生成されるべき前記出力データセットの名称、および前記アルゴリズムの各々の各ステップを実行する際に使用されるべき前記ノードの数を示す、方法。
【請求項２】
前記アルゴリズムの各々は、状態および状態遷移を備えている状態機械であり、前記状態の各々は、カーネル呼び出しである、請求項１に記載の方法。
【請求項３】
前記カーネルの各々を実行することは、前記カーネルをコールする１状態アルゴリズムを実行することを含む、請求項１に記載の方法。
【請求項４】
前記要求は、前記並列処理コンピューティングシステム外部の第２のコンピューティングシステムから受信され、
第３のコンピューティングシステムが、前記アルゴリズムを受信し、前記要求を受信し、前記アルゴリズムおよび前記入力データセットを前記並列処理コンピューティングシステムに転送する機能を果たす、請求項１に記載の方法。
【請求項５】
前記アルゴリズムの各々は、一組の状態を備えている状態機械であり、前記状態の各々は、単一のカーネルを備え、前記単一のカーネルは、コンパイルされたソフトウェアと状態遷移のリストとを含み、前記状態遷移のリストは、制御が前記状態のうちの別の１つに転送される条件を示し、
前記状態の各々は、
実行されるべきカーネルを特定する印と、
前記実行されるべきカーネルによって使用可能な最小数、最大数、および最適数の前記ノードを動的に規定するクラスタノード割当エントリと、
前記状態のうちの１つを１つ以上の他の状態と一緒に条件付きでリンクする状態リストと
を含み、前記状態の各々は、前記ノードのうちの別個の１つ上で実行される、請求項１に記載の方法。
【請求項６】
前記ノードの各々は、複数のプロセッサを有することにより、複数の前記プロセッサ上で、並列スレッドが単一の状態遷移から生み出されることを可能にする、請求項５に記載の方法。
【請求項７】
前記実行されるべきカーネルを特定する印は、カーネルライブラリ内のカーネルのアドレスである、請求項５に記載の方法。
【請求項８】
複数のコンピューティングノードを含む並列処理コンピューティングシステム上でのアプリケーションの実行のためのシステムであって、
アルゴリズムを含むアルゴリズムライブラリと、
前記アルゴリズムによって使用されるカーネルを含むカーネルライブラリと、
アルゴリズム実行モジュールと、
カーネル実行モジュールと、
を備え、
呼び出されるカーネルと、前記アルゴリズムによって使用される入力データセットおよび前記アルゴリズムの各々からの出力データセットの名称と、前記アルゴリズムの各々の各ステップを実行する際に使用されるべき前記ノードの数とは、前記アルゴリズムの各々において示され、
前記アルゴリズムのうちの要求された１つは、前記アルゴリズムライブラリから前記コンピューティングシステム内にロードされ、
前記アルゴリズムによって使用される前記入力データセットは、前記コンピューティングシステムに転送され、
前記アルゴリズムのうちの要求された１つは、前記コンピューティングシステムによって実行され、前記出力データセットを生成し、
前記アルゴリズムのうちの要求された１つは、前記アルゴリズム実行モジュールの制御の下で実行され、前記アルゴリズムによって呼び出される前記カーネルの各々は、前記カーネル実行モジュールの制御の下で実行され、
前記カーネルは、前記カーネルライブラリから転送され、前記カーネルの実行に先立って、前記コンピューティングシステム内にロードされる、
システム。
【請求項９】
前記アルゴリズムの各々は、状態および状態遷移を備えている状態機械であり、前記状態の各々は、カーネル呼び出しである、請求項８に記載のシステム。
【請求項１０】
前記カーネルの各々を実行することは、前記カーネルをコールする１状態アルゴリズムを実行することを含む、請求項８に記載のシステム。
【請求項１１】
前記アルゴリズムのうちの要求された１つの実行のための要求は、前記コンピューティングシステム外部のシステムから受信される、請求項８に記載のシステム。
【請求項１２】
前記アルゴリズムの各々は、一組の状態を備えている状態機械であり、前記状態の各々は、単一のカーネルを備え、前記単一のカーネルは、コンパイルされたソフトウェアと状態遷移のリストとを含み、前記状態遷移のリストは、制御が前記状態のうちの別の１つに転送される条件を示し、
前記状態の各々は、
前記実行されるべきカーネルを特定する印と、
前記実行されるべきカーネルによって使用可能な最小数、最大数、および最適数の前記ノードを動的に規定するクラスタノード割当エントリと、
前記状態のうちの１つを１つ以上の他の状態と一緒に条件付きでリンクする状態リストと
を含み、前記状態の各々は、前記ノードのうちの別個の１つ上で実行される、請求項８に記載の方法。
【請求項１３】
前記ノードの各々は、複数のプロセッサを有することにより、複数の前記プロセッサ上で、並列スレッドが単一の状態遷移から生み出されることを可能にする、請求項１２に記載の方法。
【請求項１４】
前記実行されるべきカーネルを特定する印は、カーネルライブラリ内のカーネルのアドレスである、請求項１２に記載の方法。
【請求項１５】
複数のコンピューティングノードを含む並列処理コンピューティングシステム上で実行可能な状態機械であって、前記状態機械は、一組の状態を備え、
前記状態の各々は、単一のカーネルを備え、前記単一のカーネルは、コンパイルされたソフトウェアと、制御が別の前記状態のうちの１つに転送される条件を示す状態遷移とを含み、
前記状態の各々は、
実行されるべきカーネルを特定する印と、
前記実行されるべきカーネルによって使用可能な最小数、最大数、および最適数の前記ノードを動的に規定するクラスタノード割当エントリと、
前記状態のうちの１つを１つ以上の他の状態と一緒に条件付きでリンクする状態リストと
を含み、前記状態の各々は、前記ノードのうちの別個の１つ上で実行される、状態機械。
【請求項１６】
前記ノードの各々は、複数のプロセッサを有することにより、複数の前記プロセッサ上で、並列スレッドが単一の状態遷移から生み出されることを可能にする、請求項１２に記載の状態機械。
【請求項１７】
前記実行されるべきカーネルを特定する印は、カーネルライブラリ内のカーネルのアドレスである、請求項１２に記載の状態機械。
【発明の詳細な説明】
【技術分野】
【０００１】
本システムは、並列コンピューティングおよび他の高性能アプリケーションのためのランタイム環境を備えている。
【発明の概要】
【課題を解決するための手段】
【０００２】
本システムの主要機能は、カーネルと呼ばれる、小さなランタイム状態機械関連プログラムを記憶、制御、および実行することを含む。システムは、４つのインターフェース方法：カーネル管理、アルゴリズム管理、カーネル実行、およびアルゴリズム実行を使用する。
【０００３】
アルゴリズムと、アルゴリズムにおいて使用されるカーネルと、アルゴリズムへの入力およびそこからの出力と、アルゴリズムの各々の各ステップを実行する際に使用されるコンピューティングノードの数とは、最初に定義される。アルゴリズムおよびカーネルは、それぞれのライブラリに追加される。アルゴリズムのうちの１つの実行のための要求が受信され、アルゴリズムのための入力データセットがシステムに転送される。要求されたアルゴリズムは、次いで、出力データセットを生成するために実行される。
【図面の簡単な説明】
【０００４】
【図１】図１は、本システムの一実施形態における、高レベル構成要素を示す、例示的略図である。
【図２】図２は、リクエスタ−システムの相互作用の例示的例証である。
【図３】図３は、アルゴリズムを実行する際、本システムによって行われるステップの例示的セットを示す、流れ図である。
【図４】図４は、ＨＰＣ状態機械の例示的例証である。
【発明を実施するための形態】
【０００５】
図１は、高性能コンピューティングアプリケーションの実行のための本システム１００の一実施形態における高レベル構成要素を示す例示的略図である。アプリケーションは、本明細書では、エンドユーザアクセス可能アルゴリズムと定義される。図１に示されるように、システム１００は、動作時、カーネル管理モジュール１１０、アルゴリズム管理モジュール１０５、カーネル実行モジュール１３０、およびアルゴリズム実行モジュール１２５を実行する、プロセッサ１０１を含む。システム１００はさらに、それぞれ、アルゴリズム１１７およびカーネル１２２を記憶する、ライブラリ１１５／１２０を含む。
【０００６】
システム１００は、システム関数の管理を提供し、システム要求を発行する、ホスト管理システム１４５に結合される。アルゴリズム実行モジュール１２５は、実行されるアルゴリズムによって呼び出される、カーネルの実行を開始する。アルゴリズム実行システム１３５は、システム１００内に記憶されたカーネルを実行することができる、複数のコンピューティングノード１４０を伴う任意のコンピューティングシステムを備え得る。管理システム１４５は、本システム１００からのサービスを要求する、任意の外部クライアントコンピュータシステムであることができる。以下に詳細に説明される、これらのサービスは、カーネルまたはアルゴリズムが、現在のシステム内のそれぞれのライブラリに追加／変更／そこから削除されるよう要求することを含む。加えて、外部クライアントシステムは、カーネル／アルゴリズムが実行されるよう要求することができる。カーネルおよびアルゴリズム管理ならびに実行の説明は、単に、例示であって、請求されるシステムは、本明細書に提示される具体的ファイル名、フォーマット、および命令に限定されないことに留意されたい。
【０００７】
（カーネル管理）
カーネルは、データ変換／データコードを含み、プログラム実行制御コードを含まない実行可能コンピュータプログラムまたはプログラムセグメントである。実行制御コードは、どのコードが、次に実行されるべきかを変更することができる、任意のコードである。本明細書に説明される例示的実施形態では、カーネル１２２は、カーネルライブラリ１２０内のカーネルライブラリファイル１２１に記憶される。システム１００は、例示的実施形態では、．ＤＬＬ（Ｄｙｎａｍｉｃ  Ｌｉｎｋｅｄ  Ｌｉｂｒａｒｙ）または．ＳＯ（Ｓｈａｒｅｄ  Ｏｂｊｅｃｔ）ライブラリ、あるいは着目カーネルを含む他のライブラリファイルを追加、更新、または削除することによって、カーネルライブラリファイル１２１内のカーネルを追加、変更、または削除するカーネル管理を提供する。このセクションにおける「システム」の参照は、一般に、システム１００を指し、適用可能実施形態では、より具体的には、カーネル管理モジュール１１０を指す。
【０００８】
ホストシステム１４５からシステム１００に送信される全カーネル管理メッセージは、ライブラリおよびカーネル情報を含む。カーネル情報フィールドは、Ｌｉｂｒａｒｙ＿ＴｉｔｌｅおよびＫｅｒｎｅｌ＿Ｔｉｔｌｅである。管理タスクの完了に応じて、システムは、完了ステータスを含むＲｅｔｕｒｎ  Ｓｔａｔｕｓメッセージを作成および送信する。Ｓｔａｔｕｓフィールドは、タスクが正常に完了した場合のゼロ、またはタスクが完了され得なかった場合の非ゼロを含む。
【０００９】
カーネル１２２は、最初のカーネルが追加されると作成され、最後のカーネルが削除されると削除されるカーネルライブラリファイル１２１内において、同一発信元組織およびカテゴリからの他のカーネルとグループ化される。ライブラリファイルの名称（Ｌｉｂｒａｒｙ＿Ｔｉｔｌｅ）は、その間に文字「＿」を伴う、組織名とカテゴリ名との連結である。ライブラリは、システムによって、プラットフォームとして使用される、オペレーティングシステムに応じて、ファイルタイプ．ＤＬＬ、．ＳＯ、または他のライブラリファイルタイプである。
【００１０】
ライブラリ（Ｋｅｒｎｅｌ＿Ｔｉｔｌｅ）内のカーネルの関数名は、その間に文字「＿」を伴う、ユーザ名と連結されたカーネル名である。ユーザ名内の文字「＠」は、文字列「＿ＭＰＴ＿」と置換される。Ｋｅｒｎｅｌ＿Ｔｉｔｌｅはさらに、カーネルがポストまたは公開された場所に応じて、文字列「＿ＯＷＮ」、「＿ＰＯＳＴ」、または「＿ＰＵＢＬＩＳＨ」と連結される。関数は、所有者／組織の所望および開発ステータスに応じて、同時に、ＯＷＮ、ＰＯＳＴ、およびＰＵＢＬＩＳＨ形式において存在し得る。
【００１１】
（カーネルの追加）
システムが、Ｋｅｒｎｅｌ＿Ａｄｄ＿Ｒｅｑｕｅｓｔメッセージを受信すると、システムは、システムカーネルリスト（Ｌｉｂｒａｒｙ＿Ｋｅｒｎｅｌ＿Ｔａｂｌｅ＿Ｌｉｓｔ）１６０への新しいカーネルの追加を試行する。Ｌｉｂｒａｒｙ＿Ｔｉｔｌｅは、カーネルを含む、ライブラリファイルの名称であって、Ｋｅｒｎｅｌ＿Ｔｉｔｌｅは、追加するカーネルの名称である。Ｋｅｒｎｅｌ＿Ａｄｄ＿Ｒｅｑｕｅｓｔメッセージは、以下のように定義される。
【００１２】
【化１】
2013534347.tif 000003
Ｋｅｒｎｅｌ＿Ａｄｄ＿Ｒｅｑｕｅｓｔメッセージの受信に応じて、システムは、Ｌｉｂｒａｒｙ＿Ｔｉｔｌｅと名付けられたライブラリが存在するかどうか決定する。ライブラリの存在は、Ｌｉｂｒａｒｙ＿ＴｉｔｌｅをＬｉｂｒａｒｙ＿Ｋｅｒｎｅｌ＿Ｔａｂｌｅ＿Ｌｉｓｔ１６０内の全ライブラリタイトルと比較することによって確認される。ライブラリが存在しない場合、システムは、Ｋｅｒｎｅｌ＿ＴｉｔｌｅをＬｉｂｒａｒｙ＿Ｋｅｒｎｅｌ＿Ｔａｂｌｅ１６１内に記憶された全Ｋｅｒｎｅｌ＿Ｔｉｔｌｅｓ１６２と比較することによって、カーネルがライブラリ内に存在するかどうか決定する。
ＬｉｂｒａｒｙＫｅｒｎｅｌテーブルの定義は、以下の表１に与えられる。
【００１３】
【表１】
2013534347.tif 000004
ライブラリ内のＫｅｒｎｅｌ＿Ｔｉｔｌｅの存在は、システムに、そのＳｔａｔｕｓフィールド内に１９（Ｋｅｒｎｅｌ  Ａｌｒｅａｄｙ  Ｅｘｉｓｔｓ  Ｅｒｒｏｒ）を含むＲｅｔｕｒｎ＿Ｓｔａｔｕｓメッセージを生成し、例示的実施形態では、ホスト管理システム１４５であるリクエスタに送信させる。
【００１４】
Ｒｅｔｕｒｎ＿Ｓｔａｔｕｓメッセージは、以下のように定義される。
【００１５】
【化２】
2013534347.tif 000005
ライブラリ内のカーネルの非存在は、システムに、カーネルのカーネルライブラリファイル１２１への追加を試行させる。カーネルのライブラリへの追加失敗は、システムに、そのＳｔａｔｕｓフィールド内に２２（Ｋｅｒｎｅｌ  Ａｄｄ／Ｕｐｄａｔｅ  Ｅｒｒｏｒ）を含むＲｅｔｕｒｎ＿Ｓｔａｔｕｓメッセージを作成および送信させる。カーネルのライブラリへの追加は、ライブラリファイルが、リクエスタの情報によって置換されることを要求する。
【００１６】
ライブラリの置換成功、および、Ｌｉｂｒａｒｙ＿Ｋｅｒｎｅｌ＿Ｔａｂｌｅの非存在は、システムに、Ｌｉｂｒａｒｙ＿Ｋｅｒｎｅｌ＿Ｔａｂｌｅ１６１を作成させ、それをＬｉｂｒａｒｙ＿Ｋｅｒｎｅｌ＿Ｔａｂｌｅ＿Ｌｉｓｔ１６０に追加させる。Ｌｉｂｒａｒｙ＿Ｋｅｒｎｅｌ＿Ｔａｂｌｅの作成失敗は、システムに、ライブラリを除去し、そのＳｔａｔｕｓフィールド内に２２（Ｋｅｒｎｅｌ  Ａｄｄ／Ｕｐｄａｔｅ  Ｅｒｒｏｒ）を含むＲｅｔｕｒｎ＿Ｓｔａｔｕｓメッセージを生成し、リクエスタに送信させる。
【００１７】
Ｌｉｂｒａｒｙ＿Ｋｅｒｎｅｌ＿Ｔａｂｌｅの作成成功は、システムに、カーネル情報をＬｉｂｒａｒｙ＿Ｋｅｒｎｅｌ＿Ｔａｂｌｅに追加させる。カーネル情報のＬｉｂｒａｒｙ＿Ｋｅｒｎｅｌ＿Ｔａｂｌｅへの追加失敗は、システムに、新しい場合、ライブラリおよびＬｉｂｒａｒｙ＿Ｋｅｒｎｅｌ＿Ｔａｂｌｅを除去させるか、またはそのオリジナルコンテンツを置換し、次いで、そのＳｔａｔｕｓフィールド内に２０（Ｋｅｒｎｅｌ  Ｎｏｔ  Ａｄｄｅｄ  Ｓｕｃｃｅｓｓｆｕｌｌｙ）を含むＲｅｔｕｒｎ＿Ｓｔａｔｕｓメッセージを生成し、リクエスタに送信させる。
【００１８】
カーネル情報のＬｉｂｒａｒｙ＿Ｋｅｒｎｅｌ＿Ｔａｂｌｅへの追加成功は、システムに、ライブラリ内の全カーネルに対するＬｉｂｒａｒｙ＿Ｋｅｒｎｅｌ＿Ｔａｂｌｅ＿Ａｄｄｒｅｓｓのリロードを試行させる。ライブラリ内の全カーネルに対するＬｉｂｒａｒｙ＿Ｋｅｒｎｅｌ＿Ｔａｂｌｅ＿Ａｄｄｒｅｓｓのリロード失敗は、システムに、ライブラリの以前のコンテンツを復元し、追加されたカーネルをＬｉｂｒａｒｙ＿Ｋｅｒｎｅｌ＿Ｔａｂｌｅから除去し、Ｌｉｂｒａｒｙ＿Ｋｅｒｎｅｌ＿Ｔａｂｌｅのアドレスリストを復元し、そのＳｔａｔｕｓフィールド内に２３（Ｋｅｒｎｅｌ  Ｎｏｔ  Ａｄｄｅｄ／Ｃｈａｎｇｅｄ  Ｅｒｒｏｒ−カーネルがライブラリ内に見つからない）を含むＲｅｔｕｒｎ＿Ｓｔａｔｕｓメッセージを生成し、リクエスタに送信させる。
【００１９】
ライブラリ内の全カーネルに対するＬｉｂｒａｒｙ＿Ｋｅｒｎｅｌ＿Ｔａｂｌｅ＿Ａｄｄｒｅｓｓのリロード成功は、システムに、そのＳｔａｔｕｓフィールド内にゼロを含むＲｅｔｕｒｎ＿Ｓｔａｔｕｓメッセージを生成し、リクエスタに送信させる。
【００２０】
【表２】
2013534347.tif 000006
（カーネルの変更）
システムが、Ｋｅｒｎｅｌ＿Ｃｈａｎｇｅ＿Ｒｅｑｕｅｓｔメッセージを管理システム１４５から受信すると、システムは、そのカーネルのライブラリ内の既存のカーネルの変更を試行する。Ｌｉｂｒａｒｙ＿Ｔｉｔｌｅは、カーネルを含む、ライブラリファイルの名称であって、Ｋｅｒｎｅｌ＿Ｔｉｔｌｅは、追加するカーネルの名称である。
Ｋｅｒｎｅｌ＿Ｃｈａｎｇｅ＿Ｒｅｑｕｅｓｔメッセージは、以下のように定義される。
【００２１】
【化３】
2013534347.tif 000007
Ｋｅｒｎｅｌ＿Ｃｈａｎｇｅ＿Ｒｅｑｕｅｓｔメッセージの受信に応じて、システムは、Ｌｉｂｒａｒｙ＿ＴｉｔｌｅをＬｉｂｒａｒｙ＿Ｋｅｒｎｅｌ＿Ｔａｂｌｅ＿Ｌｉｓｔ内の全Ｌｉｂｒａｒｙ＿Ｔｉｔｌｅｓと比較することによって、Ｌｉｂｒａｒｙ＿Ｔｉｔｌｅが存在するかどうか決定する。ライブラリが存在する場合、システムは、Ｋｅｒｎｅｌ＿Ｔｉｔｌｅをライブラリカーネルテーブル内に記憶された全Ｋｅｒｎｅｌ＿Ｔｉｔｌｅｓと比較することによって、ライブラリ内にカーネルが存在するかどうか決定する。
【００２２】
ライブラリが存在しない、またはそのライブラリのためのＬｉｂｒａｒｙ＿Ｋｅｒｎｅｌ＿Ｔａｂｌｅ内にＫｅｒｎｅｌ＿Ｔｉｔｌｅが存在しない場合、システムは、そのＳｔａｔｕｓフィールド内に２１（Ｋｅｒｎｅｌ  Ｄｏｅｓ  Ｎｏｔ  Ｅｘｉｓｔ  Ｅｒｒｏｒ）を含むＲｅｔｕｒｎ＿Ｓｔａｔｕｓメッセージを生成し、リクエスタに送信する。
【００２３】
ライブラリが存在し、Ｋｅｒｎｅｌ＿Ｔｉｔｌｅがそのライブラリ内に存在しない場合、システムは、Ｌｉｂｒａｒｙ＿Ｔｉｔｌｅライブラリファイルのコンテンツを置換することによって、古いカーネル情報を新しいカーネル定義からの情報と置換する。ライブラリの置換失敗は、システムに、そのＳｔａｔｕｓフィールド内に２２（Ｋｅｒｎｅｌ  Ａｄｄ／Ｕｐｄａｔｅ  Ｅｒｒｏｒ−ライブラリが置換されない）を含むＲｅｔｕｒｎ＿Ｓｔａｔｕｓメッセージを生成し、リクエスタに送信させる。
【００２４】
ライブラリの置換成功は、システムに、ライブラリ内の全カーネルに対するＬｉｂｒａｒｙ＿Ｋｅｒｎｅｌ＿Ｔａｂｌｅ＿Ａｄｄｒｅｓｓをリロードさせる。ライブラリ内の全カーネルに対するＬｉｂｒａｒｙ＿Ｋｅｒｎｅｌ＿Ｔａｂｌｅ＿Ａｄｄｒｅｓｓのリロード失敗は、システムに、ライブラリの以前のコンテンツを復元し、Ｌｉｂｒａｒｙ＿Ｋｅｒｎｅｌ＿Ｔａｂｌｅから追加されたカーネルを除去し、Ｌｉｂｒａｒｙ＿Ｋｅｒｎｅｌ＿Ｔａｂｌｅのアドレスリストを復元させる。次いで、そのＳｔａｔｕｓフィールド内に２３（Ｋｅｒｎｅｌ  Ｎｏｔ  Ａｄｄｅｄ／Ｃｈａｎｇｅｄ  Ｅｒｒｏｒ−カーネルがライブラリ内に見つからない）を含むＲｅｔｕｒｎ＿Ｓｔａｔｕｓメッセージを生成し、リクエスタに送信する。
【００２５】
ライブラリ内の全カーネルに対するＬｉｂｒａｒｙ＿Ｋｅｒｎｅｌ＿Ｔａｂｌｅ＿Ａｄｄｒｅｓｓのリロード成功は、システムに、そのＳｔａｔｕｓフィールド内にゼロを含むＲｅｔｕｒｎ＿Ｓｔａｔｕｓメッセージを生成し、リクエスタに送信させる。
【００２６】
（カーネルの削除）
システムは、Ｋｅｒｎｅｌ＿Ｄｅｌｅｔｅ＿Ｒｅｑｕｅｓｔメッセージを管理システム１４５から受信し、そのカーネルのライブラリ内の既存のカーネルの削除を試行する。Ｋｅｒｎｅｌ＿Ｄｅｌｅｔｅ＿Ｒｅｑｕｅｓｔは、以下のように定義される。
【００２７】
【化４】
2013534347.tif 000008
Ｋｅｒｎｅｌ＿Ｄｅｌｅｔｅ＿Ｒｅｑｕｅｓｔメッセージの受信に応じて、システムは、Ｌｉｂｒａｒｙ＿ＴｉｔｌｅをＬｉｂｒａｒｙ＿Ｋｅｒｎｅｌ＿Ｔａｂｌｅ＿Ｌｉｓｔ内の全Ｌｉｂｒａｒｙ＿Ｔｉｔｌｅｓと比較することによって、Ｌｉｂｒａｒｙ＿Ｔｉｔｌｅが存在するかどうか決定する。ライブラリが存在する場合、システムはＫｅｒｎｅｌ＿Ｔｉｔｌｅをライブラリカーネルテーブル内に記憶された全Ｋｅｒｎｅｌ＿Ｔｉｔｌｅｓと比較することによって、カーネルがライブラリ内に存在するかどうか決定する。
【００２８】
Ｌｉｂｒａｒｙ＿ＴｉｔｌｅがＬｉｂｒａｒｙ＿Ｋｅｒｎｅｌ＿Ｔａｂｌｅ＿Ｌｉｓｔ内に存在しない、またはＫｅｒｎｅｌ＿ＴｉｔｌｅがＬｉｂｒａｒｙ＿Ｋｅｒｎｅｌ＿Ｔａｂｌｅ内に存在しない場合、システムは、そのＳｔａｔｕｓフィールド内に２１（Ｋｅｒｎｅｌ  Ｄｏｅｓ  Ｎｏｔ  Ｅｘｉｓｔ  Ｅｒｒｏｒ）を含むＲｅｔｕｒｎ＿Ｓｔａｔｕｓメッセージを生成し、リクエスタに送信する。
【００２９】
ライブラリが存在し、カーネルがライブラリ内に存在する場合、システムは、Ｌｉｂｒａｒｙ＿Ｔｉｔｌｅライブラリファイルのコンテンツを置換することによって、古いカーネル情報を新しいカーネル定義からの情報と置換する。ライブラリの置換失敗は、システムに、そのＳｔａｔｕｓフィールド内に２４（Ｋｅｒｎｅｌ  Ｎｏｔ  Ｄｅｌｅｔｅｄ  Ｅｒｒｏｒ−ライブラリが置換されない）を含むＲｅｔｕｒｎ＿Ｓｔａｔｕｓメッセージを生成し、リクエスタに送信させる。
【００３０】
ライブラリ置換成功は、システムに、削除されたカーネルが、ライブラリ内にないことを検証させる。削除されたカーネルが、ライブラリ内に存在する場合、システムは、ライブラリの以前のコンテンツを復元し、削除されたカーネルをＬｉｂｒａｒｙ＿Ｋｅｒｎｅｌ＿Ｔａｂｌｅに復元し、Ｌｉｂｒａｒｙ＿Ｋｅｒｎｅｌ＿Ｔａｂｌｅのアドレスリストを復元する。次いで、そのＳｔａｔｕｓフィールド内に５４（Ｋｅｒｎｅｌ  Ｎｏｔ  Ｄｅｌｅｔｅｄ  Ｅｒｒｏｒ−カーネルが、依然として、ライブラリ内に見つかる）を含むＲｅｔｕｒｎ＿Ｓｔａｔｕｓメッセージをリクエスタに送信する。
【００３１】
ライブラリ内の削除されたカーネルの存在は、システムに、Ｋｅｒｎｅｌ＿ＴｉｔｌｅをＬｉｂｒａｒｙ＿Ｋｅｒｎｅｌ＿Ｔａｂｌｅから削除させる。Ｋｅｒｎｅｌ＿ＴｉｔｌｅのＬｉｂｒａｒｙ＿Ｋｅｒｎｅｌ＿Ｔａｂｌｅからの削除失敗は、システムに、ライブラリの以前のコンテンツを復元し、削除されたカーネルをＬｉｂｒａｒｙ＿Ｋｅｒｎｅｌ＿Ｔａｂｌｅに復元し、Ｌｉｂｒａｒｙ＿Ｋｅｒｎｅｌ＿Ｔａｂｌｅのアドレスリストを復元させる。次いで、そのＳｔａｔｕｓフィールド内に５３（Ｋｅｒｎｅｌ  Ｎｏｔ  Ｄｅｌｅｔｅｄ  Ｅｒｒｏｒ−カーネルがライブラリ内に見つからない）を含むＲｅｔｕｒｎ＿Ｓｔａｔｕｓメッセージをリクエスタに送信する。
【００３２】
Ｋｅｒｎｅｌ＿ＴｉｔｌｅのＬｉｂｒａｒｙ＿Ｋｅｒｎｅｌ＿Ｔａｂｌｅからの削除成功は、システムに、そのＳｔａｔｕｓフィールド内にゼロを含むＲｅｔｕｒｎ＿Ｓｔａｔｕｓメッセージを生成し、リクエスタに送信させる。
【００３３】
（アルゴリズム管理）
アルゴリズム管理は、本システム１００に、アルゴリズムの追加、変更、または削除を可能にする。アルゴリズムは、状態（カーネル呼び出し）および状態遷移（ある状態から別の状態に移行するために必要とされる条件）を備えている状態機械である。このセクションにおける「システム」の参照は、一般に、システム１００を指し、適用可能実施形態では、アルゴリズム管理モジュール１０５を指す。
【００３４】
各アルゴリズム１１７は、名称のそれぞれの間に文字「＿」を伴う、組織名、カテゴリ名、アルゴリズム名、およびユーザ名の連結である、名称（Ａｌｇｏｒｉｔｈｍ＿Ｔｉｔｌｅ）を有するアルゴリズムライブラリ１１５内のアルゴリズム定義ファイル１１６に維持される。ユーザ名内の文字「＠」は、文字列「＿ＭＰＴ＿」と置換される。Ａｌｇｏｒｉｔｈｍ＿Ｔｉｔｌｅはさらに、カーネルがポストまたは公開された場所に応じて、文字列「＿ＯＷＮ」、「＿ＰＯＳＴ」、または「＿ＰＵＢＬＩＳＨ」と連結される。アルゴリズムは、所有者／組織の所望および開発ステータスに応じて、同時に、ＯＷＮ、ＰＯＳＴ、およびＰＵＢＬＩＳＨ形式において存在し得る。ファイルのファイルタイプは、「．ＭＰＴ」である。
【００３５】
（アルゴリズムの追加）
システム１００が、Ａｌｇｏｒｉｔｈｍ＿Ａｄｄ＿Ｒｅｑｕｅｓｔメッセージを受信すると、システムは、アルゴリズムのシステムＡｌｇｏｒｉｔｈｍ＿Ｔａｂｌｅ１５０への追加を試行する。Ａｌｇｏｒｉｔｈｍ＿Ｔｉｔｌｅは、追加するアルゴリズムを含むファイルの名称である。Ａｌｇｏｒｉｔｈｍ＿Ａｄｄ＿Ｒｅｑｕｅｓｔは、以下のように定義される。
【００３６】
【化５】
2013534347.tif 000009
Ａｌｇｏｒｉｔｈｍ＿Ａｄｄ＿Ｒｅｑｕｅｓｔメッセージの受信に応じて、システムは、Ａｌｇｏｒｉｔｈｍ＿ＴｉｔｌｅをＡｌｇｏｒｉｔｈｍ＿Ｔａｂｌｅ１５０内の全Ａｌｇｏｒｉｔｈｍ＿Ｔｉｔｌｅｓ１５１と比較することによって、アルゴリズムが存在するかどうか確認する。アルゴリズムテーブル内のアルゴリズムの存在は、システムに、そのＳｔａｔｕｓフィールド内に２９（Ａｌｇｏｒｉｔｈｍ  Ａｌｒｅａｄｙ  Ｅｘｉｓｔｓ  Ｅｒｒｏｒ）を含むＲｅｔｕｒｎ＿Ｓｔａｔｕｓメッセージを生成し、リクエスタに送信させる。
【００３７】
Ａｌｇｏｒｉｔｈｍテーブル内のアルゴリズムの非存在は、システムに、アルゴリズムデータをアルゴリズム定義ファイル１１６に保存させる。アルゴリズムデータのアルゴリズムライブラリ１１５内のアルゴリズム定義ファイル１１６への保存失敗は、システムに、そのＳｔａｔｕｓフィールド内に２９（Ａｌｇｏｒｉｔｈｍ  Ａｌｒｅａｄｙ  Ｅｘｉｓｔｓ  Ｅｒｒｏｒ）を含むＲｅｔｕｒｎ＿Ｓｔａｔｕｓメッセージを生成し、リクエスタに送信させる。
【００３８】
アルゴリズムデータのアルゴリズムファイルへの保存成功は、システムに、Ａｌｇｏｒｉｔｈｍ＿ＴｉｔｌｅをＡｌｇｏｒｉｔｈｍ＿Ｔａｂｌｅ１５０に追加させる。Ａｌｇｏｒｉｔｈｍ＿ＴｉｔｌｅのＡｌｇｏｒｉｔｈｍ＿Ｔａｂｌｅへの追加失敗は、システムに、追加されたアルゴリズムファイルを除去させ、そのＳｔａｔｕｓフィールド内に３３（Ａｌｇｏｒｉｔｈｍ  Ａｄｄ  ｔｏ  Ｔａｂｌｅ  Ｅｒｒｏｒ）を含むＲｅｔｕｒｎ＿Ｓｔａｔｕｓメッセージを生成し、リクエスタに送信させる。
【００３９】
アルゴリズムのＡｌｇｏｒｉｔｈｍ＿Ｔａｂｌｅ１５０内のアルゴリズムタイトルリスト１５１への追加成功は、システムに、そのＳｔａｔｕｓフィールド内にゼロを含むＲｅｔｕｒｎ＿Ｓｔａｔｕｓメッセージを生成し、リクエスタに送信させる。
【００４０】
（アルゴリズムの変更）
システムが、Ａｌｇｏｒｉｔｈｍ＿Ｃｈａｎｇｅ＿Ｒｅｑｕｅｓｔメッセージを受信すると、システムは、Ａｌｇｏｒｉｔｈｍ＿Ｔａｂｌｅ１５０内のシステムアルゴリズムタイトルリスト１５１におけるアルゴリズムの変更を試行する。Ａｌｇｏｒｉｔｈｍ＿Ｔｉｔｌｅは、変更するアルゴリズムを含む、ファイルの名称である。Ａｌｇｏｒｉｔｈｍ＿Ｃｈａｎｇｅ＿Ｒｅｑｕｅｓｔメッセージは、以下のように定義される。
【００４１】
【化６】
2013534347.tif 000010
Ａｌｇｏｒｉｔｈｍ＿Ｃｈａｎｇｅ＿Ｒｅｑｕｅｓｔメッセージの受信に応じて、システムは、Ａｌｇｏｒｉｔｈｍ＿ＴｉｔｌｅをＡｌｇｏｒｉｔｈｍ＿Ｔａｂｌｅ内の全Ａｌｇｏｒｉｔｈｍ＿Ｔｉｔｌｅｓと比較することによって、アルゴリズムの存在を確認する。Ａｌｇｏｒｉｔｈｍ＿Ｔａｂｌｅ内のアルゴリズムの非存在は、システムに、そのＳｔａｔｕｓフィールド内に３１（Ａｌｇｏｒｉｔｈｍ  Ｄｏｅｓ  Ｎｏｔ  Ｅｘｉｓｔ  Ｅｒｒｏｒ）を含むＲｅｔｕｒｎ＿Ｓｔａｔｕｓメッセージを生成し、リクエスタに送信させる。
【００４２】
Ａｌｇｏｒｉｔｈｍ＿Ｔａｂｌｅ内のアルゴリズムの存在は、システムに、そのファイル内のアルゴリズム情報を新しいコンテンツと置換させる。アルゴリズムファイルコンテンツの変更失敗は、システムに、そのＳｔａｔｕｓフィールド内に３２（Ａｌｇｏｒｉｔｈｍ  Ｕｎｓｕｃｃｅｓｓｆｕｌｌｙ  Ｃｈａｎｇｅｄ  Ｅｒｒｏｒ）を含むＲｅｔｕｒｎ＿Ｓｔａｔｕｓメッセージを生成し、リクエスタに送信させる。
【００４３】
アルゴリズムファイルコンテンツの変更成功は、システムに、そのＳｔａｔｕｓフィールド内にゼロを含むＲｅｔｕｒｎ＿Ｓｔａｔｕｓメッセージを生成し、リクエスタに送信させる。
【００４４】
（アルゴリズムの削除）
システムが、Ａｌｇｏｒｉｔｈｍ＿Ｄｅｌｅｔｅ＿Ｒｅｑｕｅｓｔメッセージを受信すると、システムは、アルゴリズムのシステムＡｌｇｏｒｉｔｈｍＬｉｓｔからの削除を試行する。Ａｌｇｏｒｉｔｈｍ＿Ｔｉｔｌｅは、削除するアルゴリズムを含む、ファイルの名称である。Ａｌｇｏｒｉｔｈｍ＿Ｄｅｌｅｔｅ＿Ｒｅｑｕｅｓｔメッセージは、以下のように定義される。
【００４５】
【化７】
2013534347.tif 000011
Ａｌｇｏｒｉｔｈｍ＿Ｃｈａｎｇｅ＿Ｒｅｑｕｅｓｔメッセージの受信に応じて、システムは、Ａｌｇｏｒｉｔｈｍ＿ＴｉｔｌｅをＡｌｇｏｒｉｔｈｍ＿Ｔａｂｌｅ内の全Ａｌｇｏｒｉｔｈｍ＿Ｔｉｔｌｅｓと比較することによって、アルゴリズムの存在を確認する。アルゴリズムの非存在は、システムに、そのＳｔａｔｕｓフィールド内に３１（Ａｌｇｏｒｉｔｈｍ  Ｄｏｅｓ  Ｎｏｔ  Ｅｘｉｓｔ  Ｅｒｒｏｒ）を含むＲｅｔｕｒｎ＿Ｓｔａｔｕｓメッセージを生成し、リクエスタに送信させる。
【００４６】
Ａｌｇｏｒｉｔｈｍ＿Ｔａｂｌｅ内のアルゴリズムの存在は、システムに、アルゴリズムをＡｌｇｏｒｉｔｈｍ＿Ｔａｂｌｅから削除させる。アルゴリズムのＡｌｇｏｒｉｔｈｍ＿Ｔａｂｌｅからの削除失敗は、システムに、そのＳｔａｔｕｓフィールド内に３４（Ａｌｇｏｒｉｔｈｍ  Ｎｏｔ  Ｓｕｃｃｅｓｓｆｕｌｌｙ  Ｄｅｌｅｔｅｄ  Ｅｒｒｏｒ）を含むＲｅｔｕｒｎ＿Ｓｔａｔｕｓメッセージを生成し、リクエスタに送信させる。
【００４７】
アルゴリズムのＡｌｇｏｒｉｔｈｍ＿Ｔａｂｌｅからの削除成功は、システムに、アルゴリズムファイルを削除させる。システムは、次いで、そのＳｔａｔｕｓフィールド内にゼロを含むＲｅｔｕｒｎ＿Ｓｔａｔｕｓメッセージを生成し、リクエスタに送信する。
【００４８】
（アルゴリズムの実行）
図２は、リクエスタ１４５−システム１００の相互作用の例示的例証である。アルゴリズムの実行は、システムが、ステップ２０１において、「実行」要求に応答して、アルゴリズム１１７（それぞれのアルゴリズム定義ファイル１１６内に含まれる）にアクセスし、完了まで、含まれる状態機械を実行することを意味する。実行は、第１の状態から開始し、完了状態が実行されるまで、またはエラーに遭遇するまで、各要求される遷移を通して、新しい状態まで継続する。
【００４９】
アルゴリズムを実行するために、いくつかのステップが、順番に完了されることが必要とされる。最初に、システムは、アルゴリズムが、そのＡｌｇｏｒｉｔｈｍテーブル内に存在することを検証する。システムは、全実行パラメータを検証する。これらの確認のいずれかが失敗する場合、ユーザは、通知され、要求は、拒否される。これは、全入力データセットをシステムに転送するための投入が行われる前に、行われるべきである。
【００５０】
アルゴリズムの存在および実行パラメータが検証されると、入力データセットが、信頼性のある様式において、システムに送信される必要がある。この転送を促進するために、システムは、各データセットをリクエスタから要求する。データセットは、データセットバッファ１０３に、１回に１つずつ転送され、確実な転送が達成されるよう保証する。システムは、各規定されたデータセットを実行リクエスタ（典型的には、ホスト管理システム１４５）から要求し、次のデータセットに移行する前に、データセットの受信を完了する。データセットを入力するこのプロシージャは、集合的に、括弧２０５によって示される一連のステップによって示される。
【００５１】
全入力データセットが転送されると、システムは、アルゴリズムの実行を開始する。アルゴリズム実行は、アルゴリズムの最終状態に到達するまで、エラーに遭遇するまで、またはユーザが実行を中止するまで継続する。実行が完了すると、ステップ２０７において、システムは、リクエスタに、実行の完了ステータスを通知する。
【００５２】
この時点において、リクエスタは、出力データセットのリクエスタへの送信を要求し得る。この転送は、本質的に、入力データセットが、システムに送信された方法と逆に行われる。リクエスタは、各データセットに対する要求を送信し、システムは、括弧２１０によって参照される一連のステップによって示されるように、データセットまたは利用不可能である理由によって応答する。データセットは、リクエスタが中止する場合、または実行中にエラーが生じる場合、利用不可能であり得る。
【００５３】
リクエスタが、全所望のデータセットを要求し終わると、ステップ２１２において、リクエスタは、システムに、それが終了し、システムが、全データセットおよびコンピューティングリソースを含む、アルゴリズム実行中に使用していた全リソースの割当を解除することができることを通知する。システムが、この要求に応答し終えると、ステップ２１４において、実行プロセスは、完了する。
【００５４】
前述のように、アルゴリズムの実行は、リクエスタからの要求メッセージから開始する。Ａｌｇｏｒｉｔｈｍ＿Ｅｘｅｃｕｔｅ＿Ｒｅｑｕｅｓｔメッセージは、このタスクのために使用され、以下のように定義される。
【００５５】
【化８】
2013534347.tif 000012
Ａｌｇｏｒｉｔｈｍ＿Ｅｘｅｃｕｔｅ＿Ｒｅｑｕｅｓｔメッセージが受信されると、システムは、Ａｌｇｏｒｉｔｈｍ＿ＴｉｔｌｅをＡｌｇｏｒｉｔｈｍ＿Ｔａｂｌｅ内の全Ａｌｇｏｒｉｔｈｍ＿Ｔｉｔｌｅｓと比較することによって、アルゴリズムの存在を確認する。アルゴリズムの非存在は、システムに、そのＳｔａｔｕｓフィールド内に３１（Ａｌｇｏｒｉｔｈｍ  Ｄｏｅｓ  Ｎｏｔ  Ｅｘｉｓｔ  Ｅｒｒｏｒ）を含むＲｅｔｕｒｎ＿Ｓｔａｔｕｓメッセージを生成し、リクエスタに送信させる。
【００５６】
アルゴリズムの存在は、システムに、アルゴリズム実行が、各特定のセットをコールするのにつれて、データセットをリクエスタから、１回に１つずつ、要求することを開始させる。各データセットに対して、システムは、Ｄａｔａｓｅｔ＿Ｒｅｑｕｅｓｔメッセージをリクエスタに送信し、データセットがシステムに返される。Ｄａｔａｓｅｔ＿Ｒｅｑｕｅｓｔメッセージは、以下のように表される。
【００５７】
【化９−１】
2013534347.tif 000013
【００５８】
【化９−２】
2013534347.tif 000014
データセット名が、リクエスタによって認識されない場合、リクエスタは、Ｄａｔａｓｅｔ＿Ｒｅｓｐｏｎｓｅメッセージを生成し、５６（Ｄａｔａｓｅｔ  Ｎａｍｅ  Ｎｏｔ  Ｒｅｃｏｇｎｉｚｅｄ）に設定されたＳｔａｔｕｓフィールドとともに、システムに送信する。
【００５９】
データセット名が、認識されるが、リクエスタが、データセットコンテンツを送信不可能である場合、リクエスタは、Ｄａｔａｓｅｔ＿Ｒｅｓｐｏｎｓｅメッセージを生成し、５７（Ｄａｔａｓｅｔ  Ｎｏｔ  Ａｖａｉｌａｂｌｅ）に設定されたＳｔａｔｕｓフィールドとともに、システムに送信する。
【００６０】
データセット名が、認識され、リクエスタが、データセットコンテンツを送信可能である場合、リクエスタは、Ｄａｔａｓｅｔ＿Ｒｅｓｐｏｎｓｅメッセージを生成し、０（Ｓｕｃｃｅｓｓ）に設定されたＳｔａｔｕｓフィールドとともに、システムに送信する。データセットのコンテンツは、Ｄａｔａｓｅｔ＿Ｒｅｓｐｏｎｓｅメッセージの直後に続く。
【００６１】
任意のエラーコードが、リクエスタによって返される場合、システムは、そのＳｔａｔｕｓフィールド内に５９（Ｄａｔａｓｅｔ  Ｒｅｃｅｉｖｅ  Ｆａｉｌｅｄ）を含むＡｌｇｏｒｉｔｈｍ＿Ｅｘｅｃｕｓｉｏｎ＿Ｒｅｓｐｏｎｓｅメッセージを生成し、Ｅｒｒｏｒ＿Ｓｔａｔｕｓ＿Ｓｕｐｐｌｅｍｅｎｔａｌフィールド内のリクエスタによって返されたステータスおよびＥｒｒｏｒ＿Ｅｎｔｉｔｙ＿Ｎａｍｅフィールド内のデータセット名とともに、リクエスタに送信する。
【００６２】
Ａｌｇｏｒｉｔｈｍ＿Ｅｘｅｃｕｓｉｏｎ＿Ｒｅｓｐｏｎｓｅメッセージは、以下のように表される。
【００６３】
【化１０−１】
2013534347.tif 000015
【００６４】
【化１０−２】
2013534347.tif 000016
システムが、受信したデータセットコンテンツを記憶することができない場合、システムは、そのＳｔａｔｕｓフィールド内に６０（Ｄａｔａｓｅｔ  Ｓｔｏｒｅ  Ｆａｉｌｅｄ）を含むＡｌｇｏｒｉｔｈｍ＿Ｅｘｅｃｕｓｉｏｎ＿Ｒｅｓｐｏｎｓｅメッセージを生成し、Ｅｒｒｏｒ＿Ｅｎｔｉｔｙ＿Ｎａｍｅフィールド内のデータセット名、およびＥｒｒｏｒ＿Ｓｔａｔｕｓ＿Ｓｕｐｐｌｅｍｅｎｔａｌフィールド内の任意のシステムエラーコードをリクエスタに送信する。
【００６５】
全入力データセットが、システムによって受信されると、アルゴリズム実行モジュール１２５は、アルゴリズム実行システム１３５のノード１４０上でのアルゴリズムの実行の開始へと進む。実行が、何らかの理由から、完了すると、システムはＡｌｇｏｒｉｔｈｍ＿Ｅｘｅｃｕｓｉｏｎ＿Ｒｅｓｐｏｎｓｅメッセージ、を生成し、リクエスタに送信する。返される場合に、ステータスが非ゼロである場合、補足エラーフィールドは、エラーの原因を決定する補助となり得る、追加の情報を含み得る。加えて、出力データセットフィールドも有用情報を含み得る。
【００６６】
実行完了ステータスに関わらず、リクエスタは、本システムが、入力データセットをリクエスタから読み出すために使用するものと同一プロトコルを使用して、出力データセットをシステムから読み出し得る。
【００６７】
リクエスタは、Ｄａｔａｓｅｔ＿Ｒｅｑｕｅｓｔを生成し、読み出されるデータセットの名称に設定されたｄａｔａｓｅｔ＿ｎａｍｅとともに送信する。データセットが、利用不可能である場合（データセットは、実行後、データセットバッファ１０３内に記憶されること、および／またはユーザへの伝送後、削除されることができる）、システムは、Ｄａｔａｓｅｔ＿Ｒｅｓｐｏｎｓｅメッセージを生成し、５７（Ｄａｔａｓｅｔ  Ｎｏｔ  Ａｖａｉｌａｂｌｅ）に設定されたＳｔａｔｕｓフィールドとともに、リクエスタに送信する。データセットが、利用可能である場合、システムは、Ｄａｔａｓｅｔ＿Ｒｅｓｐｏｎｓｅメッセージを生成し、０に設定されたＳｔａｔｕｓフィールドとともに、リクエスタに送信する。Ｄａｔａｓｅｔ＿Ｒｅｓｐｏｎｓｅ後、データセットのコンテンツが続く。リクエスタは、特に、実行が、失敗で終了する場合、任意の他のデータセットを要求し得る。この場合、システムは、０ステータスおよびデータセットコンテンツで応答し得るか、または５７（Ｄａｔａｓｅｔ  Ｎｏｔ  Ａｖａｉｌａｂｌｅ）に設定されたＳｔａｔｕｓフィールドとともに、リクエスタに応答し得る。
【００６８】
全データセットが、リクエスタから読み出されると、リクエスタは、Ｅｘｅｃｕｔｅ＿Ｒｅｌｅａｓｅ＿Ｒｅｑｕｅｓｔメッセージを生成し、システムに送信する。Ｅｘｅｃｕｔｅ＿Ｒｅｌｅａｓｅ＿Ｒｅｑｕｅｓｔメッセージは、以下のように表される。
【００６９】
【化１１】
2013534347.tif 000017
本メッセージは、システムに、実行ジョブを終了させ、ジョブと関連付けられたメモリおよびデータセット等の全リソースを解放させる。全リソースが解放されると、システムは、Ｓｔａｔｕｓ＿ｒｅｔｕｒｎメッセージを生成し、０に設定されたステータスとともに、リクエスタに送信する。ジョブが、依然として実行中である間に本メッセージが受信される場合、システムは、Ｓｔａｔｕｓ＿ｒｅｔｕｒｎメッセージを生成し、６６（Ｅｘｅｃｕｔｅ  Ｓｔｉｌｌ  Ｒｕｎｎｉｎｇ）に設定されたステータスとともに、リクエスタに送信する。他のエラーステータス値も、必要に応じて、返される。
【００７０】
アルゴリズム実行中に、随時、リクエスタは、以下のように表される、Ｅｘｅｃｕｔｅ＿Ｃａｎｃｅｌメッセージを送信し得る。
【００７１】
【化１２】
2013534347.tif 000018
アルゴリズム実行が、もはや生じていない場合、システムは、Ｒｅｔｕｒｎ＿Ｓｔａｔｕｓメッセージを生成し、６７（Ｅｘｅｃｕｔｅ  Ｎｏｔ  Ｒｕｎｎｉｎｇ）に設定されたＳｔａｔｕｓフィールドとともに、リクエスタに送信する。アルゴリズム実行が、依然として実行中である場合、システムは、実行が停止されると、Ｒｅｔｕｒｎ＿Ｓｔａｔｕｓメッセージを生成し、０に設定されたＳｔａｔｕｓフィールドとともに、リクエスタに送信する。
【００７２】
（カーネルの実行）
カーネルは、常時、１つの状態である一方、アルゴリズムは、常に２つ以上の状態である。ＨＰＣ（高性能コンピューティング）状態機械は、本明細書に定義されるように、効果的に、一組の「状態」を構成し、その各々は、コンパイルされたソフトウェアと、制御がそれに基づいてある状態から別の状態に転送される条件である状態遷移（または、状態ベクトル）とを含む単一のカーネルである。
【００７３】
カーネルの実行は、システムが、カーネルをコールする単純な１状態アルゴリズムを実行することを意味する。このため、ジョブ開始および終了時のデータセット読み出しのため、ならびにジョブ中止およびリソース解放のための全メッセージングは、前述のようなアルゴリズムの実行のように見え、進行する。この例外は、Ａｌｇｏｒｉｔｈｍ＿Ｅｘｅｃｕｔｅ＿Ｒｅｑｕｅｓｔおよびシステム＿Ａｌｇｏｒｉｔｈｍ＿Ｅｘｅｃｕｔｅ＿Ｒｅｓｐｏｎｓｅの代わりに使用されるＫｅｒｎｅｌ＿Ｅｘｅｃｕｔｅ＿ＲｅｑｕｅｓｔおよびＫｅｒｎｅｌ＿Ｅｘｅｃｕｔｅ＿Ｒｅｓｐｏｎｓｅである。
【００７４】
Ｋｅｒｎｅｌ＿Ｅｘｅｃｕｔｅ＿Ｒｅｑｕｅｓのフォーマットは、以下のようである。
【００７５】
【化１３−１】
2013534347.tif 000019
【００７６】
【化１３−２】
2013534347.tif 000020
（アルゴリズム定義）
アルゴリズムは、本明細書では、計算または他のコンピュータベースのアクティビティを完了するために行われる、一連のステップを含む、直接実行可能なＦｉｎｉｔｅ  Ｓｔａｔｅ  Ｍａｃｈｉｎｅと定義される。これらのステップは、状態と呼ばれ、アルゴリズム実行パラメータまたは前のステップの出力に依存し得る順番においてたどられる。各ステップに対して、アルゴリズムは、使用されるべき入力、産出されるべき出力、および実行すべき次のステップを定義しなければならない。
【００７７】
アルゴリズム定義は、２つ以上の状態から構成される解析可能かつ明確なテキスト記述である。アルゴリズム定義は、アルゴリズム管理モジュール１０５によって、インデックス番号、カーネル、遷移条件、および遷移されるべきカーネルのインデックスを含む、テーブルまたはリストに変換される。定義内の文字はすべて、印刷可能ＡＳＣＩＩ文字である。アルゴリズムの状態定義は、通常、大文字と小文字を区別しないように定義されるが、カーネル識別子（実行されるカーネルの識別子）は、通常、大文字と小文字を区別する。改行、復帰改行、および空白文字は、無視される。状態エントリは、セミコロンによって分離され、４つのサブセクション−ノードカウント、入力データセット、出力データセット、および遷移から成る。ヒト可読性は、要求されないが（アルゴリズム定義は、管理システム１４５によって生成され得る）、このフォーマット内で適応されることができる。
【００７８】
（ステップフォーマット定義）
以下のセクションは、アルゴリズムのステップ（状態遷移テーブルまたはアルゴリズム内のエントリ）を示す。構文は、以下のようになる。
【００７９】
ＳｔａｔｅＮｕｍｂｅｒ，Ｋｅｒｎｅｌｌｄｅｎｔｉｆｉｅｒ（ｎｏｄｅｃｎｔ）（ｉｎｐｕｔｄａｔａｓｅｔｓ）（ｏｕｔｐｕｔｄａｔａｓｅｔｓ）（ｔｒａｎｓｉｔｉｏｎｓ）
ＳｔａｔｅＮｕｍｂｅｒは、この状態に対するインデックスであって、アルゴリズムの残りに、この状態を指すインデックスを与える。ＳｔａｔｅＮｕｍｂｅｒの値は、１から開始し、１ずつインクリメントすべきである。０の次の状態は、実行が完了したことを示すので、それは決して０にはならない。
【００８０】
Ｋｅｒｎｅｌｌｄｅｎｔｉｆｅｒは、この状態の間、実行すべきカーネルの識別子である。その間の文字「：」によって連結される、Ｌｉｂｒａｒｙ＿ＴｉｔｌｅおよびカーネルのＫｅｒｎｅｌ＿Ｔｉｔｌｅから成る。それは、カーネルに対するコードおよびカーネルの関数名を含む、動的ライブラリの名称に対応すべきである。
【００８１】
Ｎｏｄｅ  Ｃｏｕｎｔサブセクションは、カーネルを実行するために使用される、ノードの数を定義する。それは、以下のフォーマットを有する：Ｍｉｎ，Ｏｐｔ，Ｍａｘ。
【００８２】
Ｍｉｎ値は、カーネルを実行するために使用されるノードの最小数を示す。これは、通常、１である。また、０であり得、これも、１を意味する。Ｏｐｔ値は、カーネルを実行するために使用されるノードの最適数を示す。０の値は、使用されるノードの数に制限または推奨が存在しない場合、規定されるべきである。／ｎの値は、ランタイムにおいて、ユーザに規定されるノードの数の除算が、使用されるべき場合、規定され得る。同様に、＊ｎの値は、ランタイムにおいて、ユーザに規定されるノードの数の乗算が、使用されるべき場合、規定され得る。
【００８３】
Ｍａｘ値は、カーネルを実行するために使用されるノードの最大数を示す。これは、通常、０であって、ランタイムにおいて、ユーザに規定されるノードの数を使用することを示す。ランタイムにおいて、ユーザに規定されるノードの数の除算または乗算が所望される場合、ここでは、Ｏｐｔ値と同一構文が、使用され得る。
【００８４】
（入力データセット）
Ｉｎｐｕｔ  Ｄａｔａｓｅｔｓサブセクションは、カーネルを実行するために使用される入力データセットの名称を定義する。これらの名称は、アルゴリズムへの入力であるデータセット、または、別の状態におけるカーネルの実行によって産生されるデータセットのいずれかに対応する。名称は、位置的に、実行されるカーネルの実装に依存し、コンマによって分離される。
【００８５】
（出力データセット）
Ｏｕｔｐｕｔ  Ｄａｔａｓｅｔｓサブセクションは、カーネルが実行された場合に産生されるべき出力データセットの名称を定義する。名称は、位置的に、実行されるカーネルの実装に依存し、コンマによって分離される。
【００８６】
（遷移）
Ｔｒａｎｓｉｔｉｏｎｓサブセクションは、本カーネルの実行後、遷移されるべき次の状態を定義する。遷移は、コンマによって分離される、一対の条件およびｎｅｘｔ＿ｓｔａｔｅインデックスの形式である。対は、左から右にスキャンされ、処理は、第１の真の条件に遭遇すると、停止する。その条件に対する対応するｎｅｘｔ＿ｓｔａｔｅへの状態遷移、および他のｃｏｎｄｉｔｉｏｎ／ｎｅｘｔ＿ｓｔａｔｅ対はすべて、無視される。Ｔｒａｎｓｉｔｉｏｎｓサブセクションに対するフォーマットは、以下となる。
［ｃｏｎｄｉｔｉｏｎ，ｎｅｘｔ＿ｓｔａｔｅ］，［ｃｏｎｄｉｔｉｏｎ，ｎｅｘｔ＿ｓｔａｔｅ］，［ｃｏｎｄｉｔｉｏｎ，ｎｅｘｔ＿ｓｔａｔｅ］
次の状態を決定するために、ｃｏｎｄｉｔｉｏｎ／ｎｅｘｔ＿ｓｔａｔｅ対は、左から開始して、左から右へと調べられる。条件が、真であると判明すると、ｎｅｘｔ＿ｓｔａｔｅは、アルゴリズムに対して実行されるべき次の状態に対して使用される。いずれの条件も、真であると判明されない場合、アルゴリズムの実行は、完了と宣言される。
【００８７】
（条件）
条件のフォーマットは、以下のようになる。
（ｄａｔａｓｅｔ＿ｎａｍｅ［ｉｎｄｅｘ］，ｄａｔａｓｅｔ＿ｅｌｅｍｅｎｔ＿ｔｙｐｅ，ｖａｌｕｅ，ｃｏｍｐａｒａｔｏｒ）
Ｄａｔａｓｅｔ＿ｎａｍｅは、アルゴリズムへの入力であるデータセット、または別の状態におけるカーネルの実行によって産生されるデータセットのいずれかに対応しなければならない。複数の要素は、特定の要素を見つけるために、データベースへのオフセットとして使用されるインデックスの使用を介してアクセスされる。
【００８８】
ｄａｔａｓｅｔ＿ｅｌｅｍｅｎｔ＿ｔｙｐｅは、以下の表３に示されるものの１つである。
【００８９】
【表３】
2013534347.tif 000021
値（ｖａｌｕｅ）は、表４に示される形式である。
【００９０】
【表４】
2013534347.tif 000022
コンパレータ（ｃｏｍｐａｒｅｔｏｒ）は、以下の表５に示されるもののうちの１つである。
【００９１】
【表５】
2013534347.tif 000023
条件の評価は、ＡＮＳＩ規格Ｃ言語優先規則に従う。
【００９２】
（次の状態）
次の状態は、常時、アルゴリズム内の別の状態のインデックスである。０（ゼロ）の次の状態は、常時、アルゴリズムの実行が完了したことを示す。
【００９３】
（最終状態）
前述のように、いずれの条件も真であると評価しない場合、その状態は、最終状態であると宣言され、実行は、完了する。真であると評価する任意の条件付けに対するｎｅｘｔ＿ｓｔａｔｅが、０である場合、これも、実行が完了したことを示す。状態をＡｌｇｏｒｉｔｈｍ内の（無条件）最終状態にすることが所望される場合、Ｔｒａｎｓｉｔｉｏｎセクションのフォーマットは、以下のように短縮され得る。
（０）
（実施例）
以下は、アルゴリズムのステップ（アルゴリズムである、状態遷移テーブル内のエントリ）の実施例である。種々の構成要素を明確にするために、改行およびインデントを有する。
【００９４】
【化１４−１】
2013534347.tif 000024
【００９５】
【化１４−２】
2013534347.tif 000025
前述のコードは、アルゴリズム内のステップ１２である。Ｋｅｒｎｅｌｌｄｅｎｔｉｆｉｅｒは、以下となる。
【００９６】
【化１５】
2013534347.tif 000026
カーネルは、ライブラリ（Ｌｉｂｒａｒｙ＿Ｔｉｔｌｅ）Ｓｈｏｐ＿Ｔｏｏｌｓ（組織名は、Ｓｈｏｐであって、カテゴリ名は、Ｔｏｏｌｓである）によってもたらされる。Ｋｅｒｎｅｌ＿Ｔｉｔｌｅは、ｉｓＣｏｎｖｏｌｖｅＷｉｔｈＦｉｌｔｅｒ＿ｂｏｂ＿ＭＰＴ＿Ｓｈｏｐ．ｃｏｍ＿ＰＯＳＴであって、ＫｅｒｎｅｌＮａｍｅは、ユーザｂｏｂ＠Ｓｈｏｐ．ｃｏｍによって所有される、ＣｏｎｖｏｌｖｅＷｉｔｈＦｉｌｔｅｒである。規定されるカーネルは、ポストされた状態にあるものである。
【００９７】
ノードカウント指定子は、少なくとも１つのノードが、使用されなければならず、そうでなければ、使用する計算ノードの数に制限はないことを示す。
Ｉｎｐｕｔ  Ｄａｔａｓｅｔリストは、３つの要素（データセット）を有する。
【００９８】
【化１６−１】
2013534347.tif 000027
Ｏｕｔｐｕｔ  Ｄａｔａｓｅｔリストは、２つの要素（データセット）を有する。
【００９９】
【化１６−２】
2013534347.tif 000028
Ｔｒａｎｓｉｔｉｏｎは、以下の意味を有する。
【０１００】
【化１６−３】
2013534347.tif 000029
このリストの最後に含まれるのは、以下である。
【０１０１】
【化１６−４】
2013534347.tif 000030
これは、アルゴリズム終了インジケータである。他の条件付け状態遷移が、適用されない場合、アルゴリズム実行は、完了する。
【０１０２】
図３は、アルゴリズムの実行において、本システムによって行われるステップの例示的セットを要約する、流れ図である。図３に示されるように、ステップ３０５において、実行される各アルゴリズムに対して、定義が、前述のように、使用されるべきカーネル、使用されるべき入力データセットの名称、生成されるべき出力データセットの名称、実行すべき次のステップ、および各カーネル（または、ステップ）を実行するために使用されるべきノードの数に対して提供される。
【０１０３】
実行されるカーネル１２２は、ステップ３１０において、カーネルライブラリ１２０に追加され、実行されるアルゴリズム１１７は、ステップ３２０において、アルゴリズムライブラリ１１５に追加される。アルゴリズム実行要求に応答して、ステップ３２５および３３０において、それぞれ、要求されたアルゴリズムの存在が検証され、アルゴリズムの実行パラメータが検証される。アルゴリズムは、次いで、ステップ３３３において、アルゴリズムライブラリ１１５からアルゴリズム実行システム３５に転送される。
【０１０４】
ステップ３３５において、アルゴリズムに対する入力データセットが、１回に１つずつ、アルゴリズム実行システム１３５に転送され、ステップ３４０において、アルゴリズム内の各状態遷移が、評価され、アルゴリズムの最終状態に到達するまで、順番に、条件付きで実行される。実行に先立って、アルゴリズムによって呼び出される各カーネルは、カーネルライブラリ１２０からアルゴリズム実行システム１３５に転送される。最後に、ステップ３４５において、アルゴリズム完了ステータスおよび全出力データセットが、リクエスタに返される。
【０１０５】
以下の表６は、ＨＰＣアルゴリズム定義／ＨＰＣ  Ｓｔａｔｅ  Ｍａｃｈｉｎｅの実施例である。
【０１０６】
【表６−１】
2013534347.tif 000031
【０１０７】
【表６−２】
2013534347.tif 000032
図４は、システムコンテキストにおける、ＨＰＣ状態機械４０１の例示的例証である。ＨＰＣ  Ａｌｇｏｒｉｔｈｍ  Ｄｅｆｉｎｉｔｉｏｎ／ＨＰＣ状態機械４０１と標準的状態機械との間に、いくつかの差異が存在する。ＨＰＣＳｔａｔｅＭａｃｈｉｎｅでは、状態番号（状態＃）は、状態を保持するアルゴリズム定義内の行を識別するインデックスである。ゼロ状態インデックスは、最後の状態条件を示す。状態は、実際には、図４の矢印４０３によって示されるように、実行されるライブラリおよびカーネル名である。ＨＰＣ状態機械内のＣｌｕｓｔｅｒ  Ｎｏｄｅ  Ａｌｌｏｃａｔｉｏｎエントリは、実行されるカーネルによって使用可能な最小、最大、および最適ノードカウントを動的に規定する方法を提供する。ノードカウントを規定するための能力は、標準的状態機械と異なり、ＨＰＣ状態機械が、並列処理に好適であることを意味する。
【０１０８】
使用される実際のノードカウントの選択は、指定される条件の関数である。入力および出力変数リストは、変数のメモリアドレス、変数タイプ、および変数と関連付けられた次元数から成る。「Ｃｏｎｄｉｔｉｏｎ」によって使用される全変数は、入力／出力変数リスト内に見出される変数、定数、またはループ内で計算されたインデックス値のいずれかでなければならない。これは、状態遷移ベクトルに、特殊コードをカーネルのソースコード内にコンパイルする必要なく、要求される変数にアクセス可能にする。
【０１０９】
標準的高性能コンピュータシステムは、有限状態機械（ＦＳＭ）を使用しない。すなわち、そのコード内に埋め込まれたＭｅｓｓａｇｅ  Ｐａｓｓｉｎｇ  Ｉｎｔｅｒｆａｃｅ（ＭＰＩ）関数を有する、コンピュータプログラムを実行する。ＭＰＩ関数を標準的ソフトウェアに追加することは、そのソフトウェアを変更し、可能性として、新しいバグをその中にもたらすことを意味する。本方法を使用することによって、並列状態が、オリジナルコードを再コンパイルまたは変更することなく、ＦＳＭにもたらされることができる。
【０１１０】
標準的状態機械では、状態遷移は、２つの状態を一緒にリンクする、条件およびベクトルから成る。ＨＰＣ状態機械では、条件は、ある状態を複数の状態（状態リストと呼ばれる）とともにリンクすることができる。状態リスト内の各状態は、図４の矢印４０５および４０６によって示されるように、別個のノード上で実行される。各ノードは、単一あるいは複数のプロセッサ、および／または単一あるいは複数のコアを有することができ、これは、複数の機械上の複数の並列スレッドが、単一遷移から生み出されることができることを意味する。単一ノードに逆に畳み込むためには、「Ｃｏｌｌａｐｓｅ」と呼ばれる特殊遷移が使用される。この遷移は、単一ノードへの「畳み込み」および新しい状態への遷移の両方を行う。ループは、遷移を効率的に自らコールさせ、初期化し、インデックス値を計算し、次いで、１つ以上の新しい状態に遷移する。
【０１１１】
本明細書に説明されるものの範囲から逸脱することなく、前述の方法およびシステムに、ある変更が行われてもよい。前述の説明に含有され、または付随の図面に示される、あらゆる事柄は、限定的意味ではなく、例証として解釈されるべきであることに留意されたい。例えば、付随の図面に示されるシステムは、示されるものと異なる構成要素を含んでもよい。以下の請求項は、本明細書に説明されるあらゆる包括的かつ具体的特徴、ならびに文言上、その行間にあると言え得る、本方法、システム、および構造の範囲のあらゆる記述を網羅することが意図される。
【図１】
2013534347.tif 000033
【図２】
2013534347.tif 000034
【図３】
2013534347.tif 000035
【図４】
2013534347.tif 000036
【国際調査報告】
2013534347.tif 000037
2013534347.tif 000038