求助,linux命令行如何新建mathmatica内核?
mathematica吧
全部回复
仅看楼主
level 3
各位前辈好,最近有一个很大的数据集需要用mathematica处理,楼主将之分成了小块希望能够并行化,以充分利用服务器资源。但遇到了许多问题。首先是尝试使用P打头的自动并行方法,失败。然后楼主又试着增加内核数量,手动并行。但在网上查找了一圈(在自带帮助发现了可能有用的math命令,wolfram命令和WolframKernel命令都失败了,谷歌,必应,百度也都没有结果,哭)也没有成功在命令行新建并调用内核。不知道有没有前辈遇到过这个情况,请前辈指教,谢谢。
2023年01月08日 07点01分 1
level 3
实验室服务器的图形化界面没开,笔记本模式用不了[泪],只能考虑命令行运行。
2023年01月08日 07点01分 2
level 3
之前都用的python,还没怎么写过mathematica函数,这次的要求是读入存储在文件里的数据,进行处理获得结果后输出到文件。大佬看看这个要求原则上能不能complie然后自动并行啊,我原以为新建kernel会简单一点,现在后悔了[泪]
2023年01月08日 07点01分 3
到英文互联网上古哥了一下,有一个老哥和我的问题相同,他是13年提的问,现在还没有人回他。在linux的terminal中新建mathematica kernel这个方向应该是不行的。
2023年01月09日 12点01分
level 3
之前是我的mathematica水平太低,再次尝试使用P打头函数后,我好像解决了一点问题。但又出现了新的问题[笑眼]。这里发表一下个人观点(纯新手,带误导性),下面的图是在自己的电脑上的实验。
2023年01月09日 05点01分 5
level 3
和上面的函数的差别主要是Ambient1的定义上,之前我是直接在文件里定义的Ambient1(文件里直接存储了MMA命令,想法是读取行然后将命令直接ToExpression就直接定义了)
2023年01月09日 05点01分 6
level 3
这个函数单独运行不开并行化是没有问题的,能跑出来我想要的结果,但是开并行以后就出现了问题,我这次有了点自知自明没用什么complie,换了一个ParallelMap函数(找来实验发现这个函数调用了多个内核觉得和我的要求相性很好[呵呵]
2023年01月09日 06点01分 9
吧务
level 10
你这函数太复杂了我懒得看。
要不你先搞点简单例子学学,看看学习过程有没有碰到问题再来问?
2023年01月10日 19点01分 11
好的,十分感谢,正在恶补。感觉可能是变量命名出了问题,如果多核并行是完全各跑各的,应该没有问题才对,因为不并行的时候程序是正常的。
2023年01月11日 07点01分
感谢大佬的关注
2023年01月12日 07点01分
level 3
mathematica的上下文真是把我折磨惨了,传递的参数老是带上下文消都消不掉,用不习惯,局部变量就局部变量吧,用完了它还给你留个把在那儿。我不想要这个把,它还老给我传递这个把儿,不过快了,感觉要搞好了。
2023年01月12日 07点01分 12
level 3
我总结一下我犯的错误,给可能需要的兄弟。
1、在建立package的时候,直接复制。
package的代码似乎需要是一整块。还需要把代码类型设置为Initialization Cells。package格式不对会影响函数调用。
2、函数或者变量重名。推荐使用函数的全名,也就是带上下文的那种。不使用全名会遇到各种各样的问题,这是和mma的计算(搜索)顺序有关的。总之就是要关注上下文。
3、关于我这里的问题。
我这里的特殊情况是大佬的函数用ReadList调用了一个可执行文件,并且这个文件好像是拒绝并行的,我把大佬的问档复制了一份,两个进程调用两个不同的可执行文件,已经运行成功了,没有报错。
2023年01月12日 07点01分 13
推荐大家古哥,并使用英文搜索,在国外的mma论坛上,基本都有你的问题的解答。
2023年01月12日 07点01分
吧务
level 15
1、在建立package的时候,直接复制。
package的代码似乎需要是一整块。还需要把代码类型设置为Initialization Cells。package格式不对会影响函数调用。
……你是不是在说这个?:
《写程序包的时候单元样式必须是Code》
https://tieba.baidu.com/p/2734694875
2、函数或者变量重名。推荐使用函数的全名,也就是带上下文的那种。不使用全名会遇到各种各样的问题,这是和mma的计算(搜索)顺序有关的。总之就是要关注上下文。
……你在用那堆并行函数的时候是不是忘了调DistributedContexts选项?这个选项的默认值是当前上下文。你要带程序包,要么把相应上下文加上,要么直接设All。
顺便,我个人的建议是,如果没搞清楚上下文,那就不要碰程序包。
绝对不要因为“这样显得比较专业”之类的无聊理由去使用程序包。如果是因为在服务器之类的地方没法用笔记本界面,那你大可以不写BeginPackage和Begin,这样代码就全在Global`下面了。
3、关于我这里的问题。
我这里的特殊情况是大佬的函数用ReadList调用了一个可执行文件,并且这个文件好像是拒绝并行的,我把大佬的问档复制了一份,两个进程调用两个不同的可执行文件,已经运行成功了,没有报错。
如果代码涉及文件读写,那么并行很可能占不了什么便宜,读写是个巨大的瓶颈。当然,需要具体问题具体分析。
最后,我重复11楼的话。
2023年02月04日 03点02分 14
好的,谢谢吧主,今天才看到您也回我了[吐舌]。我再仔细瞅瞅[吐舌]
2023年02月20日 08点02分
1