Mathematica 9 is now available
THIS IS DOCUMENTATION FOR AN OBSOLETE PRODUCT.
SEE THE DOCUMENTATION CENTER FOR THE LATEST INFORMATION.
Mathematica > システムインターフェースと配備 > 並列計算 > データの並列性 > ParallelMap >
Mathematica > コアとなる言語 > 調整とデバッグ > 並列計算 > データの並列性 > ParallelMap >

ParallelMap

ParallelMap
expr の第1レベルの各要素に f を並列適用する.
ParallelMap
levelspec で指定された expr の部分に f を並列適用する.
  • ParallelMapMapの並列版で,自動的に異なるカーネルとプロセッサ間に f をさまざまに分配適用する.
  • ParallelMapは,計算中の副次的な作用を除き,Mapと同じ結果を返す.
  • ParallelMapMapと同じレベル指定を使う.すべてのレベル指定が並列化できる訳ではない.
  • ParallelMapのインスタンスが並列化できない場合,そのインスタンスはMapを使って評価される.
ParallelMapは並列でMapと同じように作用する:
ParallelMapは任意の関数と一緒に使うことができる:
明示的な純関数を使う:
インタラクティブに定義された関数はすぐに並列で使用できる:
ParallelMapは並列でMapと同じように作用する:
In[1]:=
Click for copyable input
Out[1]=
In[2]:=
Click for copyable input
Out[2]=
 
ParallelMapは任意の関数と一緒に使うことができる:
In[1]:=
Click for copyable input
Out[1]=
明示的な純関数を使う:
In[2]:=
Click for copyable input
Out[2]=
 
インタラクティブに定義された関数はすぐに並列で使用できる:
In[1]:=
Click for copyable input
In[2]:=
Click for copyable input
Out[2]=
レベル1でマップする(デフォルト):
レベル2までマップする:
レベル2でマップする:
レベル3までマップする:
レベル1から始めてすべてのレベルでマップする:
負のレベル:
正負のレベルを混ぜてもよい:
各レベルに異なる頭部:
すべてのレベルが並列化できる訳ではない:
ParallelMapは任意の頭部の式に使うことができる:
属性Listableを持つ関数は自動的にマップされる:
計算を実行可能な最小のサブユニットに分割する:
計算を使用可能なカーネル数に分割する:
カーネル1個の計算の評価数が最大でも2つになるようにジョブ全体を分割する:
各評価の要素数が最高でも5つになるように計算を分割する:
デフォルトのオプション設定では評価のサイズと評価数のバランスが取られる:
ランタイムが大きく異なる計算はできるだけきめ細かく並列化しなければならない:
多数の簡単な計算は可能な限り少ないまとまりとして分配されるべきである:
デフォルトで,現行コンテキストの定義は自動的に配布される:
関数の定義は配布しない:
並列計算に現れるすべてのコンテキストのすべての記号の定義を配布する:
指定されたコンテキストの定義だけを配布する:
DistributedContextsオプションの値をデフォルト値に戻す:
結果が求まるたびに現れるのを見る:
算術パズルを解く:
上記を記号形式で書く:
各文字に一桁の数字を割り当てる:
次に各単語を底が10の数字として解釈する:
特定の数字の割当ての検証を自動化する:
この割当てを組織的に解くために,まず文字のリストを得る:
8つの数字のすべての部分集合のすべての順列を考えることでこのパズルを解くことができる:
上記を並列化する:
一般に の解のみが考慮される:
ParallelTryを使い,自明ではない解が見付かったところで検索を中止することもできる:
並列化は使用されている最も外側のレベルで行われる:
Mapは,事実上ParallelMapを使って自動的に並列化される:
サイズが分かっているタスクでロードのバランスを取った効果を示す:
ランタイムが分かっているタスクの数を定義する:
並列実行の時間を測る:
スピードアップ(大きいほどよい):
スケジューリングのキメが細かいほどロードのバランスがよくなりスピードアップにも繋がる:
大きなタスクを最初にスケジュールすると結果がさらによくなる:
複数の引数を持つ関数はMapThreadで並列化することができる:
Parallelizeを使って並列化バージョンを得る:
MapIndexedは要素の指標をマップされた関数に渡す:
Parallelizeを使って並列化バージョンを得る:
ScanMapと同じことを行うが結果は返さない:
インタラクティブに定義された関数は必要なときに自動的にすべてのカーネルに配布される:
手動で定義を配布し自動配布を停止する:
パッケージからの関数には,DistributeDefinitionsよりParallelNeedsを使うとよい:
レベル指定が並列化を妨げている場合,ParallelMapMapのような評価を行う:
並列でマップされた関数では副次的な効果は使えない:
副次的な効果をサポートする共有変数を使う:
並列カーネルにとって既知ではない関数を使うと計算が順番に行われることがある:
すべての並列カーネルで関数を定義する:
これで,関数が並列カーネルで評価されるようになった:
現行コンテキストの関数の定義は自動的に配布される:
デフォルトコンテキスト以外のコンテキストからの定義は自動的には配布されない:
DistributeDefinitionsを使ってそのような定義を配布する:
すべてのコンテキストを含むようにDistributedContextsオプションを設定することもできる:
簡単な操作は並列化した方が時間がかかることがある:
最小の並列伝達のオーバーヘッドを測る:
マスターカーネル自身で行われた簡単な計算と比べる:
関数が短い引数リストを簡約することはあるが,リストが長いと簡約は行われない:
部分式のこのような簡約は並列マッピングを不可能にすることがある:
部分式の簡約を阻止し最後にのみ所望の関数を適用する:
バージョン 7 の新機能 | バージョン 8 での修正機能
Ask a question about this page  |  Suggest an improvement  |  Leave a message for the team
フォーマット:   HTML  |  CDF