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

在 Mathematica 程序包里使用并行计算,第1张

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

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

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

……嗯。很有意思,真的很有意思,我以前都没意识到这个问题。确认一下,你的构建程序包的步骤其实是:

1 Ctrl+N或者通过顶部菜单新建了一个笔记本。

2 写完代码后直接保存,存的时候选择存为.m文件。

对吧?

如果是这样——八成就是这样吧——那么,不对。你可以把你建出来的这个.m文件打开看一下。代码的背景色是灰的吧?就像这样:

正确的方法应该是在写完代码后,选中代码单元,右键,“样式”->“Code”,然后再存为.m文件,或者在新建的时候,就使用顶部菜单,建一个.m文件,然后再在其中写代码,这种情况下,你再次打开.m文件时,代码的背景色是白的:

这样的程序包应该就可以正常载入了。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7756725.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-09
下一篇 2023-04-09

发表评论

登录后才能评论

评论列表(0条)

保存