我想了解Parallelize []行为的一些怪癖。并行化行为
如果我做的:
CloseKernels[];
LaunchKernels[1]
f[n_, g_] :=
[email protected][
g[Product[Mod[i, 2], {i, 1, n/2}]
Product[Mod[i, 2], {i, n/2 + 1, n}]]];
Clear[a, b];
a = Table[f[i, Identity], {i, 100000, 1500000, 100000}];
LaunchKernels[1]
b = Table[f[i, Parallelize], {i, 100000, 1500000, 100000}];
ListLinePlot[{a, b}, PlotStyle -> {Red, Blue}]
结果是所预期的: CPU利用率:
但如果我这样做,改变功能评价:
CloseKernels[];
LaunchKernels[1]
f[n_, g_] :=
[email protected][
g[Product[[email protected], {i, 1, n/2}]
Product[[email protected], {i, n/2 + 1, n}]]];
Clear[a, b];
a = Table[f[i, Identity], {i, 1000, 15000, 1000}];
LaunchKernels[1]
b = Table[f[i, Parallelize], {i, 1000, 15000, 1000}];
ListLinePlot[{a, b}, PlotStyle -> {Red, Blue}]
结果是:
CPU利用率:
我觉得我缺少关于并行化[]一些重要的知识来理解这一点。
任何提示?
作为您的原始信息页说您是前物理学家,我必须问:轴标签?单位?在'f'中嵌入'AbsoluteTiming'最初是令人困惑的。 – rcollyer 2011-03-20 18:34:11
@rcollyer时间单位对于问题没有意义,因为它们是机器相关的。至于标签,你可以从前面的代码中读取AbsoluteTime [] Vs是一个与迭代次数线性相关的非维数。顺便说一句,我从来没有说我是一个好物理学家:D – 2011-03-20 18:46:30
第二张图有两个几乎相同的曲线om我的quadcore笔记本电脑。 – 2011-03-20 18:48:56