GoGPT Best VPN GoSearch

OnWorksファビコン

mpy.mpich2 - クラウドでオンライン

Ubuntu Online、Fedora Online、Windows オンライン エミュレーター、または MAC OS オンライン エミュレーター上の OnWorks 無料ホスティング プロバイダーで mpy.mpich2 を実行します。

これは、Ubuntu Online、Fedora Online、Windows オンライン エミュレーター、MAC OS オンライン エミュレーターなどの複数の無料オンライン ワークステーションの 2 つを使用して、OnWorks 無料ホスティング プロバイダーで実行できるコマンド mpy.mpichXNUMX です。

プログラム:

NAME


mpy - メッセージパッシング Yorick

SYNOPSIS


mpirun -np mp_size mpy [ -NS pfile1.i [ -NS pfile2.i [ ... ]]] [ -私 ファイル1.i [ -私 ファイル2.i [
... ]]]
mpirun -np mp_size mpy -バッチ ファイル.i

DESCRIPTION


ヨリック Basic や Lisp のようなインタプリタ型言語ですが、はるかに高速です。 見る ヨリック (1)〜
それについてもっと学びましょう。
ミピー の並列バージョンです ヨリック メッセージ パッシング インターフェイス (MPI) に基づいています。 の
並列ジョブを起動するための正確な構文は、MPI 環境によって異なります。 そうかも知れない
呼び出す前に特別なデーモンを起動する必要がある ミルン または同等のコマンド。

説明
mpy パッケージは、yorick を MPI 並列プログラミング ライブラリに接続します。 MPI の略です
メッセージパッシングインターフェイス。 アイデアは、yorick の複数のインスタンスを接続することです。
メッセージを介して相互に通信します。 Mpy は、単純な実行も高度な並列実行も可能です
タスクを純粋に解釈されたプログラムとして実行することも、任意に複雑なコンパイル済みプログラムを開始して操作することもできます。
コンパイルされた MPI API を無料で使用できるパッケージ。 解釈された API は意図されていません
MPI ラッパーであること。 代わりに、最小限のものまで取り除かれます。

これは mpy のバージョン 2 (2010 年リリース) です。 mpy のバージョン 1 とは互換性がありません
(1990 年代半ばにリリース)、バージョン 1 には多数の設計上の欠陥があったため、
競合状態のないプログラムを書くのは難しく、数百万に拡張することは不可能
プロセッサーの。 ただし、次のようにすることで、バージョン 1 のほとんどの mpy プログラムをバージョン 2 で実行できます。
mp_include,"mpy1.i" mp_include する前に、mpy1 並列タスクを定義するファイル (つまり、
mp_task への呼び出しを含むファイルの前。)

使用法 ノート
MPI 環境は実際には標準で指定されていません。 既存の環境は
非常に粗雑で、非対話型のバッチ ジョブを強く好みます。 プロセス数は
MPI が開始される前に修正されます。 各プロセスにはランクがあり、0 から XNUMX 未満の数値が付けられます。
プロセスの数。 ランクをメッセージ送信用のアドレスとして使用し、そのプロセスを
メッセージを受信すると、どのランクがメッセージを送信したかを調べることができます。
それらのメッセージを受け取ります。

メッセージパッシングプログラムを作成する際の大きな問題は、イベントまたはメッセージの処理です。
予定外の順番で到着。 MPI は、一連のメッセージが送信されることのみを保証します。
ランクAからランクBまで発送順に届きます。 順番については保証はありません
それらのメッセージの到着は、第 XNUMX ランク C から B に送信されたメッセージと比較して、
特に、A が B にメッセージを送信し、次に A が C にメッセージを送信する (または交換することもある) とします。
C とのいくつかのメッセージ)その結果、C は B にメッセージを送信します。C からのメッセージ
A からのメッセージよりも先に B に到着する可能性があります。MPI プログラムではこれが許可されていません。
「競合状態」と呼ばれるバグがある可能性があります。 競合状態は非常に微妙な場合があります。
特にプロセス数が多い場合。

基本的な mpy 解釈インターフェイスは XNUMX つの変数で構成されます。
mp_size = プロセス数
mp_rank = このプロセスと XNUMX つの関数のランク:
mp_send、to、msg; // ランク「to」にメッセージを送信します
msg = mp_recv(from); // ランク「from」からメッセージを受信します
ランク = mp_probe(ブロック); // 保留中のメッセージの送信者をクエリします
mp_exec、文字列; // ランクごとに文字列を解析して実行します

並列タスクを開始するには、ランク 0 で mp_exec を呼び出します。 このようにしてメインプログラムを作成すると、
終了すると、ランク 0 以外のすべてのランクはアイドル ループに戻り、次のループを待ちます。
mp_exec。 ランク 0 は、stdin から次の入力行を取得します (つまり、その行で入力を待ちます)
対話型セッションではプロンプトが表示されます)、または入力がなくなった場合はすべてのプロセスが終了します
バッチセッションで利用可能です。

mpy パッケージは、yorick が #include パーサー ディレクティブを処理する方法を変更します。
そして機能が必要です。 つまり、並列タスクが実行中の場合 (つまり、関数が開始された場合)
by mp_exec)、これらはすべて一括操作になります。 つまり、ランク 0 は全体を読み取ります。
ファイルの内容を取得し、その内容を MPI メッセージとして他のプロセスに送信します (例:
ファイル内容の mp_exec)。 ランク 0 以外のすべてのプロセスは、次の期間のみ実行されます。
並列タスク。 ランク 0 のみが実行されている場合 (および他のすべてのランクが実行されている場合)、並列タスクの外側で
次の mp_exec を待っています)、#include ディレクティブ、および include および require
関数は通常のシリアル操作に戻り、ランク 0 のみに影響します。

mpy が起動すると、並列モードになるため、すべてのファイルが yorick の起動時にインクルードされます。
開始 (Y_SITE/i0 内のファイル) は一括操作として含まれます。 これがなければ
この機能を使用すると、すべての yorick プロセスがスタートアップ インクルード ファイルを開いて読み取ろうとします。
mpy が開始される前にファイル システムに過負荷がかかります。 これらの内容を渡すと、
ファイルを MPI メッセージとして保存することが、すべてのファイルに十分な帯域幅を確保する唯一の方法です。
単一のファイルの内容を読み取るプロセス。

起動時に含まれる最後のファイルは、-batch オプションで指定されたファイル、または
Custom.i ファイル。 安全ではない可能性がある、custom.i 内のコードの問題を回避するには
並列実行では、mpy は、custom.i ではなく、custommp.i を探します。 の
-batch ファイルまたはcustommp.i 内の命令は、ランク 0 のシリアル モードで実行されます。
のみ。 同様に、mpy は通常の process_argv 関数をオーバーライドします。そのため、-i および other
コマンド ライン オプションは、シリアル モードのランク 0 でのみ処理されます。 これらすべてに込められた意図は、
場合は、-batch またはcustommp.i または -i インクルード ファイルをランク 0 でのみ実行するようにすることです。
そこに対話的に入力した場合。 これらのいずれかから自由に mp_exec を呼び出すことができます。
ファイルを使用して並列タスクを開始しますが、ファイル自体はシリアルです。

追加のコマンド ライン オプションが通常のセットに追加されます。
mpy -j somefile.i
すべてのランクに並列モードで somefile.i が含まれます (繰り返しますが、-i other.i には other.i のみが含まれます)
シリアルモードのランク0)。 複数の -j オプションがある場合、並列インクルードが発生します。
コマンドラインの順序で。 ただし、-j オプションと -i オプションが混在している場合は、すべての -j インクルードが発生します。
-i が含まれる前に。

mpy のインクルード関数の複雑さの副作用として、オートロード機能は次のようになります。
無効; コードが実際に自動ロードされた関数を呼び出してインクルードをトリガーする場合、mpy
エラーで止まってしまいます。 並列処理に必要な関数を明示的にロードする必要があります。
require 関数を使用するタスクは、並列タスク内で自分自身を呼び出します。

mp_send 関数は、任意の数値 yorick 配列 (char、short、int、long、
float、double、または complex)、またはスカラー文字列値。 メッセージを送信するプロセス
MPI 経由では要素の数のみが保持されるため、mp_recv はスカラー値のみを生成するか、
mp_send に渡された次元に関係なく、値の 1D 配列。

mp_recv 関数では、メッセージの送信者を指定する必要があります。
受け取る。 その送信者からメッセージが実際に到着するまでブロックされ、メッセージがあればキューに入れられます。
他の送信者からのメッセージが事前に到着する可能性があります。 キューに入れられたメッセージは次のようになります。
一致する送信者に対して mp_recv を呼び出したときに受信した順序で取得されます。 の
キュー機能により、最も単純なタイプの競合状態を回避することが大幅に容易になります。
解釈された並列プログラムを作成するとき。

mp_probe 関数は、キューに入れられたメッセージのすべての送信者のリストを返します (または、nil の場合は nil を返します)。
キューは空です)。 電話 mp_プローブ(0) は、キューが空であってもすぐに戻ります。
コー​​ル mp_プローブ(1) キューが空の場合はブロックし、少なくとも XNUMX つのメッセージが発生した場合にのみ返します。
mp_recv で使用できます。 電話 mp_プローブ(2) 新しいメッセージが到着するまでブロックします。
一部のメッセージは現在利用可能です。

mp_exec 関数は対数ファンアウトを使用します。ランク 0 は F プロセスに送信します。
すべてのプロセスがメッセージを受け取るまで、さらに F に送信します。 プロセスごとに
すべての送信操作を完了すると、メッセージの内容を解析して実行します。
ファンアウト アルゴリズムは、N ステップのベース F までの対数で N プロセスに達します。 F プロセス
ランク 0 の送信先は、ランク 1、2、3、...、F です。一般に、ランク r のプロセスは、
r*F+1、r*F+2、...、r*F+F をランク付けします (これらが N プロセスに対して N-1 未満の場合)。 このセット
ランクrの「スタッフ」と呼ばれます。 r>0 のランクはランク (r-1)/F からメッセージを受け取ります。
rの「ボス」と呼ばれます。 mp_exec 呼び出しは mp_recv キューと相互運用します。
つまり、mp_exec ファンアウト中のボス以外のランクからのメッセージは、
後の mp_recv による取得のためにキューに入れられます。 (この機能がないと、並列タスクは
対数ファンアウト以外のメッセージ パターンを使用すると、競合の影響を受けやすくなります
条件。)

対数ファンアウトとそれに相当する内部関数は非常に便利なので、mpy はいくつかの機能を提供します。
mp_exec と同じファンアウト パターンを使用する高レベル関数:
mp_handout、メッセージ;
合計 = mp_handin(値);
mp_handout を使用するには、ランク 0 がメッセージを計算し、すべてのランクが mp_handout を呼び出してメッセージを送信します。
(0 以外のすべてのランクの出力) mp_exec と同じファンアウトによるどこでも。 使用するには
mp_handin、すべてのプロセスが値を計算してから mp_handin を呼び出し、次の合計を返します。
自身の値とすべてのスタッフを含むため、ランク 0 では mp_handin は次の値の合計を返します。
あらゆるプロセスから得られる価値観。

mp_handin を引数なしで関数として呼び出して、同期として機能させることができます。 いつ
このような呼び出しの後もランク 0 が継続すると、他のすべてのランクがそのポイントに到達したことがわかります。
すべての並列タスク (mp_exec で開始されたもの) は、mp_handin の呼び出しで終了する必要があります。
または、タスクが終了したときにすべてのプロセスがアイドル状態に戻っているという同等の保証
ランク0で終了。

mp_nfan 関数を使用して、ファンアウト パラメータ F を取得または変更できます。 デフォルト
値は 16 ですが、これはプロセス数が非常に多い場合でも妥当な値です。

XNUMX つの特別な並列タスクは mp_connect と呼ばれ、解釈されたデータをフィードするために使用できます。
他のすべてのランクがアイドル状態にある間、コマンド ラインは 0 以外の単一のランクに送信されます。 ランク 0 は、
ループはキーボードを読み取り、行を「接続済み」ランクに送信し、実行します。
mp_disconnect 関数を実行して、ランク 0 に確認応答を返します。
並列タスクを完了し、ランク 0 に戻ります。

最後に、エラー回復についてのメモです。 並列タスク中にエラーが発生した場合、
mpy は mp_exec を正常に終了しようとします。そのため、ランク 0 が戻ると、他のすべてのランクが
これらはアイドル状態であることがわかっており、次の mp_exec の準備ができています。 存在する場合、このプロシージャは永久にハングします。
プロセスの XNUMX つが無限ループになっているか、無限ループに陥ることはありません。
MPI には信号を送信する手段がないため、mp_send、mp_recv、または mp_probe を呼び出します。
すべてのプロセスを中断します。 (これは、MPI 環境を構築する方法の XNUMX つです。
) ランク 0 のプロセスには、最初に報告されたプロセスのランクが残ります。
障害に加えて、障害以外の理由で障害が発生したプロセスの数のカウント
別のランクに障害が発生したというメッセージを送信しました。 最初に障害が発生したプロセスが dbug に入る可能性があります
mp_connect 経由のモード。 mp_disconnect または dbexit を使用して、ランク 0 のシリアル モードに戻ります。

オプション
-j ファイル.i Yorick ソース ファイルが含まれています ファイル.i mpy が並列モードで開始されるため
すべてのランクで。 これは、mpy の後の mp_include 関数と同等です。
開始しました。

-i ファイル.i Yorick ソース ファイルが含まれています ファイル.i mpy が起動すると、シリアル モードで実行されます。
これは、mpy が開始された後の #include ディレクティブと同等です。

-バッチ ファイル.i Yorick ソース ファイルが含まれています ファイル.i mpy が起動すると、シリアル モードで実行されます。
カスタマイズ ファイルcustommp.i (存在する場合) 読み取り、mpy は
バッチモードに設定されます。 バッチ関数で help コマンドを使用する
(ヘルプ、バッチ) バッチ モードの詳細を確認します。 バッチモードでは、すべて
エラーは致命的です。 通常、mpy は実行を停止し、さらに待機します。
エラー後の入力。

onworks.net サービスを使用してオンラインで mpy.mpich2 を使用する


無料のサーバーとワークステーション

Windows と Linux のアプリをダウンロード

Linuxコマンド

Ad




×
Advertisement
❤️ここでショッピング、予約、購入してください。料金はかかりません。これにより、サービスが無料で維持されます。