在 Mathematica 程序包里使用并行计算

2018-12-29  本文已影响0人  菜鸟No1

近期因为要在 Linux 集群上运行一个计算量很大的 Mathematica 程序,所以我把核心的函数写为一个程序包,然后使用 Wolfram Mathematica 脚本来调用这个程序包。写完程序包之后发现在程序包的 Begin["Private`"]...End[] 内定义的函数不能直接使用并行化的函数,如 ParallelSumParallelMap 等等。

1. 症结所在

这是因为程序包里的迭代变量在命名空间 MyPackage`Private` 之内,而并行化的函数默认使用的符号定义在 Context 之内。也就是说默认情况下,并行化的函数会去 Global` 寻找变量或函数等的定义,这便出错了 [1]

2. 解决之道

很简单,我们只需要为并行化的函数指定并行计算中函数的定义。具体方法如下 [1][2]

Begin[`Private`"]

ParallelTable[m^2, {m, 10}, DistributedContexts -> {"MyPackage`Private`"}]

End[]

参考文献


  1. https://mathematica.stackexchange.com/questions/30817/errors-when-using-paralleltable-inside-a-package?answertab=votes#tab-top

  2. https://reference.wolfram.com/language/ref/DistributedContexts.html

上一篇下一篇

猜你喜欢

热点阅读