我有这么多数百个细胞长的Mathematica文件,我想使用并行评估。我有一个2处理器x 4核心每台机器16 Gb内存。我的Mathematica许可证允许我运行最多2个主内核,其中1个主机可能有4个从属内核(这是我在使用它一段时间后的解释)。
我曾经在两个不同笔记本中的两个主内核中运行我的代码。为了进一步加快速度,我试图用ParallelEvaluate[]
封装一些单元格,它似乎有效。然后我还有4个我的代码副本通过其中一个主内核不知道彼此运行,这很好。 (我基本上试图尽可能多地并行运行我的代码/数学内核副本。我不是在拍摄任何真正平行的东西。)
由于我的代码太长而且复杂,我不想再次编辑每个单元格以使它们并行评估。我可以在笔记本的开头添加任何神奇的内容,以便在此之后评估的每个单元格默认为ParallelEvaluate[ ... cell contents.... ]
吗?
答案 0 :(得分:2)
正如belisarius所建议的那样,$ Pre = ParallelEvaluate完全符合我的要求。一个问题是,当我执行$ Pre = Identity将其关闭以便我可以返回到我的主内核时,mathematica仍然会尝试在从属内核而不是主内核中进行评估并失败。我最终解决了它如下:SetSharedVariable [parallelcontrol]; parallelcontrol = ParallelEvaluate; $ Pre:= parallelcontrol; ......这里的一切都是奴隶评估的......; parallelcontrol = Identity; ....所有东西都回去仅在主人身上进行评估......以下是我的笔记本电脑上运行的样本,它有2个内核:
LaunchKernels[]
{KernelObject [1,“local”],KernelObject [2,“local”]}
$KernelID
0
ParallelEvaluate[$KernelID]
{1,2}
SetSharedVariable[parcontrol]; $Pre := parcontrol; parcontrol = ParallelEvaluate
空[ParallelEvaluate]
$KernelID
{1,2}
parcontrol = Identity
{Identity,Identity}
$KernelID
0
parcontrol = ParallelEvaluate
ParallelEvaluate
$KernelID
{1,2}