我将列表的集成更改为集成列表,以便我可以使用ParallelTable
:
X1par=ParallelTable[Integrate[i, {x, -1, 1}], {i, Nw.Transpose[Nw]}];
X1par==X1
(* ===> True *)
Y1par = ParallelTable[Integrate[i,{x,-1,1}],{i,D[Nw,{x,2}].Transpose[D[Nw,{x,2}]]}]
Y1 == Y1par
(* ===> True *)
在我的时间里,与{j, 5, 30, 1}
代替{j, 5, 200, 1}
为了稍微限制使用的时间,这在我的 quod-core 上大约快了 3.4 倍。但可以通过以下方法更快地完成:
X2par = Parallelize[Integrate[#, {x, -1, 1}] & /@ (Nw.Transpose[Nw])]
X2par == X1par == X1
(* ===> True *)
这大约快了 6.8 倍,其中 2.3 倍是由于Parallelize
.
Timing
and AbsoluteTiming
当涉及并行执行时,它们不太值得信赖。我用了AbsoluteTime
每行之前和之后并取差值。
EDIT
我们不应该忘记 ParallelMap:
在最粗略的列表级别 (1):
ParallelMap[Integrate[#, {x, -1, 1}] &, Nw.Transpose[Nw], {1}]
在最深的列表级别(最细粒度的并行化):
ParallelMap[Integrate[#, {x, -1, 1}] &, Nw.Transpose[Nw], {2}]