这是为什么呢?
Test1[System`Dump`matrix_?MatrixQ, System`Dump`y___] :=
Block[{System`Dump`m = System`Dump`toRaster[System`Dump`matrix]},
Developer`ToPackedArray[System`Dump`m]]
Test3[System`Dump`matrix_?MatrixQ, System`Dump`y___] :=
System`Dump`toRaster[System`Dump`matrix]
Ember`toRaster[{x___}] := ParallelMap[Ember`toRaster, {x}]
Ember`toRaster[(Hue | GrayLevel | RGBColor | CMYKColor)[x_]] := x
Ember`toRaster[(Hue | GrayLevel | RGBColor | CMYKColor)[x_,
y__]] := {x, y}
Ember`toRaster[___] := 0
Test4[w_, y___] := Developer`ToPackedArray[Ember`toRaster[w]]
fn := (x + I y)^(x + I y)
DistributeDefinitions[fn, Test1, Test3, Ember`toRaster, Test4]
RepeatedTiming[
Test1[Table[
Hue[(Arg[fn] + \[Pi])/(2 \[Pi]), 1/(1 + 0.3 Log[Abs[fn] + 1]),
1 - 1/(1.1 + 5 Log[Abs[fn] + 1]), 1], {y, -2 + 0.0012, 2,
0.2}, {x, -2 + 0.0012, 2, 0.2}]], 120] // Short
RepeatedTiming[
Test3[ParallelTable[
Hue[(Arg[fn] + \[Pi])/(2 \[Pi]), 1/(1 + 0.3 Log[Abs[fn] + 1]),
1 - 1/(1.1 + 5 Log[Abs[fn] + 1]), 1], {y, -2 + 0.0012, 2,
0.2}, {x, -2 + 0.0012, 2, 0.2}]], 120] // Short
RepeatedTiming[
Test4[Table[
Hue[(Arg[fn] + \[Pi])/(2 \[Pi]), 1/(1 + 0.3 Log[Abs[fn] + 1]),
1 - 1/(1.1 + 5 Log[Abs[fn] + 1]), 1], {y, -2 + 0.0012, 2,
0.2}, {x, -2 + 0.0012, 2, 0.2}]], 120] // Short
RepeatedTiming[
Parallelize[
Test1[Table[
Hue[(Arg[fn] + \[Pi])/(2 \[Pi]), 1/(1 + 0.3 Log[Abs[fn] + 1]),
1 - 1/(1.1 + 5 Log[Abs[fn] + 1]), 1], {y, -2 + 0.0012, 2,
0.2}, {x, -2 + 0.0012, 2, 0.2}]]], 120] // Short
分别结果为
{0.0069,{{<<1>>},{<<1>>},<<17>>,{<<1>>}}}
{0.02,{{<<1>>},<<18>>,{{<<1>>},<<19>>}}}
{0.47,{{<<1>>},<<18>>,{{<<1>>},<<19>>}}}
{0.0071,{{<<1>>},{<<1>>},<<17>>,{<<1>>}}}
并且后两者报错。
谁能说明下并行为什么会比正常运算慢呢?