計算機科学のブログ

知識を広げる 並列プログラムと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}]
Output

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}
]
Output
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}
]
Output
Column[%]
Output
ParallelTable[
    ListPlot[
        {
            Range[1, 100],
            ParallelTable[n^i, {n, 1 100}]
        }
    ],
    {i, 2, 5}
]
Output
fun25[data25_] := ParallelTable[
    ListPlot[
        {
            data25,
            ParallelTable[k^i, {k, data25}]
        }
    ],
    {i, 2, 5, 1}
]
fun25[ParallelTable[{j, j^2}, {j, 1, 100, 1}]]
Output
Column[%]
Output