AbsoluteTiming[
Table[
Sum[
BesselJ[0, 10^-9 k]/(n + 1.6^k), {k, 0, 10000}
]
, {n, 0, 12}]
]
(* {5.67253, {etc.}} *)
AbsoluteTiming[
ParallelTable[
Sum[
BesselJ[0, 10^-9 k]/(n + 1.5^k), {k, 0, 10000}
]
, {n, 0, 12}]
]
(* {1.89187, {etc.}} *)
将上面的代码写成一个程序包
BeginPackage["package`"];
function::usage = "function[x] is a function to calculate stuff";
RunInParallel::usage = "RunInParallel is an option for function which determines whether it runs in parallel or not.";
Begin["Private`"];
Options[function] = {RunInParallel -> False};
function[x_, OptionsPattern[]] := Block[{TableCommand, SumCommand},
Which[
OptionValue[RunInParallel] === False,
TableCommand = Table; SumCommand = Sum;,
OptionValue[RunInParallel] === True,
TableCommand = ParallelTable; SumCommand = Sum;,
True, TableCommand = OptionValue[RunInParallel][[1]];
SumCommand = OptionValue[RunInParallel][[2]];
];
TableCommand[
SumCommand[
BesselJ[0, 10^-9 k]/(n + x^k), {k, 0, 50000}
]
, {n, 0, 12}]
]
End[];
EndPackage[];
函数选项中有并行运算的选项
AbsoluteTiming[function[1.1, RunInParallel -> True]]
AbsoluteTiming[function[1.2, RunInParallel -> False]]
(* {31.465, {etc.}} *)
(* {34.5198, {etc.}} *)
已经设置了并行运算,但是时间并没有减少
但是这样设置后,就可以进行并行处理
AbsoluteTiming[Activate[function[1.9, RunInParallel -> {Inactive[ParallelTable], Inactive[Sum]}]]]
AbsoluteTiming[Activate[function[1.8, RunInParallel -> {Inactive[Table], Inactive[Sum]}]]]
(* {11.7112, {etc.}} *)
(* {35.7969, {etc.}} *)
时间明显减少,请问前面进行并行设置,但是结果并没有改变,是因为什么?