Grid[Map] - MPI プロセスを終了
|
使い方
|
|
Map( f, expr )
Map( f, expr, arg1, arg2, ..., argN )
|
|
パラメータ
|
|
f
|
-
|
プロシージャまたは関数
|
expr
|
-
|
任意の式
|
argN
|
-
|
(オプション) f の追加の引数
|
|
|
|
|
説明
|
|
•
|
Map コマンドは、expr のオペランドまたは要素に対して並列に f を適用します。これは、Threads[Map] に似ていますが、f の処理が別々のスレッドではなく別々のプロセスで行われるところが違います。
|
•
|
Map コマンドは、expr のオペランドまたは要素に対して並列に f を適用します。典型的な呼び出しシーケンスは Map(f, [1,2,...,n]) で、これで各要素に f が適用され新しいリスト [f(1), f(2), ..., f(n)] が作成されます。同様に Map(f,[1,2,...,n],a,b) は、Map 内の追加の引数を f の各コールに適用し、[f(1,a,b), f(2,a,b), ..., f(n,a,b)] を戻します。各 f(i) の計算は利用可能なノード全てに公平に配分されます。
|
•
|
Map コマンドは、トップレベルコマンド map と、Threads[Map] コマンドに似ています。トップレベルコマンド seq は数列全体を直列的に処理します。Threads[Map] コマンドは、数列の要素を同一プロセス内で別々のスレッドに乗せて並列に処理します。Grid[Map] コマンドは、数列の要素を別々のプロセスに乗せて並列に処理しますが、この場合はプロセスを複数マシンに分配することも可能です。
|
•
|
Map は並列計算の全ノードで呼び出されることを想定しています。グリッド外の非計算ノードから、並列計算の一部としてでなく呼び出された場合、Map は Launch コマンドにより全ノードで同コマンドを起動しようとします。そのとき、f を解析し、f 内にあるアサインされた値を各グリッドノードに予め入れておきます。この方法でほとんどのケースに対応できますが、頑健な方法ではありません。
|
•
|
Map は expr の一部を各ノードに転送しなければならないので、f が些細なプロシージャのときには効率が悪い方法です。
|
•
|
Map の計算結果はノード 0 でのみ利用可能です。結果として得られる Maple 数式を使って他のノードでさらに計算を進める場合、Send と Receive を用いて直接送る必要があります。
|
•
|
この関数は Grid パッケージに含まれているので、コマンド with(Grid) を実行してからのみ 短縮形 Grid(..) で呼び出せます。原形 のコマンド Grid[Map](..) を使えばいつでも利用できます。
|
|
|
互換性
|
|
•
|
Grid[Map] コマンドは Maple 15 より導入されました。
|
|
|
例
|
|
>
|
Grid:-Map(x->x^2,[1,2,3]);
|
| (5.1) |
>
|
Grid:-Map((x,y)->x^2+y,<1,2;3,4>,4);
|
| (5.2) |
>
|
expr := randpoly([x,y,z],terms=20);
|
| (5.3) |
>
|
Grid:-Map(x->abs(x),expr);
|
| (5.4) |
>
|
Grid:-Map(x->x^2,table({1=1,2=2,3=3,red=4,blue=y}));
|
| (5.5) |
>
|
p := proc()
uses Grid;
Map(x->x^3,[1,2,3])
end;
|
| (5.6) |
| (5.7) |
|
|