美文网首页
在 Mathematica 程序包里使用并行计算

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

作者: 菜鸟No1 | 来源:发表于2018-12-29 12:29 被阅读0次

    近期因为要在 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

    相关文章

      网友评论

          本文标题:在 Mathematica 程序包里使用并行计算

          本文链接:https://www.haomeiwen.com/subject/twpulqtx.html