我想了解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