5

我有数百个单元格长的 Mathematica 文件,我想使用并行评估。我有一个 2 处理器 x 4 核,每台机器有 16 Gb 内存。我的 Mathematica 许可证允许我最多运行 2 个主内核,其中 1 个主内核可以有 4 个从内核(这是我玩了一段时间后的解释)。

我曾经在两个不同笔记本的两个主内核中运行我的代码。为了进一步加快速度,我尝试用它封装一些细胞,ParallelEvaluate[]它似乎有效。然后我还有 4 个我的代码副本通过其中一个主内核在彼此不知情的情况下运行,这很好。(我基本上是在尝试尽可能多地并行运行我的代码/数学内核。我还没有为任何真正并行的东西拍摄)。

由于我的代码太长太复杂,我不想再次编辑每个单元格以使它们并行评估。我可以在笔记本的开头放什么神奇的东西,这样之后评估的每个单元格都是默认的ParallelEvaluate[ ... cell contents.... ]吗?

4

1 回答 1

2

正如 belisarius 所建议的, $Pre=ParallelEvaluate 正是我想要的。一个问题是,当我执行 $Pre=Identity 将其关闭以便可以返回到我的主内核时,mathematica 仍然尝试在从属内核而不是主内核中评估它并失败。我最终解决它如下: SetSharedVariable[parallelcontrol]; 并行控制=并行评估;$Pre := 并行控制;...这里的一切都在奴隶中进行评估...; 并行控制 = 身份;.... 一切都只能在 master 上进行评估...这是在我的笔记本电脑上运行的示例,它有 2 个内核:

LaunchKernels[]

{KernelObject[1, "local"], KernelObject[2, "local"]}

$KernelID

0

ParallelEvaluate[$KernelID]

{1, 2}

SetSharedVariable[parcontrol]; $Pre := parcontrol; parcontrol = ParallelEvaluate

空[并行评估]

$KernelID

{1, 2}

parcontrol = Identity

{身份,身份}

$KernelID

0

parcontrol = ParallelEvaluate

并行评估

$KernelID

{1, 2}

于 2011-08-08T22:48:05.787 回答