知識を広げる 並列プログラムとGPUプログラムの作成 リスト、並列操作、ParallelTable、待ち行列、ParallelSubmit、WaitAllコマンド
ハンズ・オン・スタートMathematica® -Wolfram言語™によるプログラミング (C・ヘイスティング(著)、K・ミショー(著)、M・モリソン(著)、ウルフラム・リサーチ(翻訳)、丸善出版)の第2部(知識を広げる)、第25章(並列プログラムとGPUプログラムの作成)の練習問題1、2、3、4、5、6、7、8、9、10の解答を求めてみる。
ParallelEvaluate[RandomInteger[{1, 25}]]
{12, 1, 23, 6}
var25 = RandomInteger[{1, 25}, 5]
{8, 14, 22, 16, 7}
ParallelTable[v^2, {v, var25}]
{64, 196, 484, 256, 49}
ParallelTable[
v^2,
{v, ParallelTable[RandomInteger[{1, 25}], {i, 1, 5}]}
]
{529, 289, 1, 25, 324}
FindRoot[Sin[x] + Exp[x], {x, 1}]
ParallelSubmitコマンドがJupyter上では上手く動かなかったから、Terminal上でWolframscriptを起動して実行
% wolframscript mma 12.0.1 Engine for Mac OS X x86 (64-bit) Copyright 1988-2019 Wolfram Research, Inc.
In[1]:= Table[
ParallelSubmit[
{i},
FindRoot[Sin[x] + Exp[x], {x, i}]
],
{i, -3, 3, 1}
]
Out[1]= {EvaluationObject[1, FindRoot[«2»], <>],
EvaluationObject[2, FindRoot[«2»], <>],
EvaluationObject[3, FindRoot[«2»], <>],
EvaluationObject[4, FindRoot[«2»], <>],
EvaluationObject[5, FindRoot[«2»], <>],
EvaluationObject[6, FindRoot[«2»], <>],
EvaluationObject[7, FindRoot[«2»], <>]}
In[2]:= WaitAll[%]
Launching kernels…
Out[2]= {{x -> -3.09636}, {x -> -3.09636}, {x -> -0.588533}, {x -> -0.588533},
{x -> -0.588533}, {x -> -0.588533}, {x -> -0.588533}}
In[3]:=
ParallelTable[
FindRoot[Sin[x] + Exp[x], {x, i}],
{i, -3, 3, 1}
]
ParallelTable[
Plot3D[
Sin[x] Cos[a y],
{x, -2 Pi, 2 Pi},
{y, -2 Pi, 2 Pi},
PlotLabel -> "sin(x)cos(" <> ToString[a] <> "y)"
],
{a, 1, 3, 1}
]
Column[%]
ParallelTable[
ListPlot[
{
Range[1, 100],
ParallelTable[n^i, {n, 1 100}]
}
],
{i, 2, 5}
]
fun25[data25_] := ParallelTable[
ListPlot[
{
data25,
ParallelTable[k^i, {k, data25}]
}
],
{i, 2, 5, 1}
]
fun25[ParallelTable[{j, j^2}, {j, 1, 100, 1}]]
Column[%]