专栏
标签
如何实现在多进程中调用 m 兼容和自定义的 m 函数
技术分享
发布于 2025-07-10 10:35:55
查看 1过去327天

使用 @everywhere 将所有进程共用的表达式广播出去,确保每一个进程都可以打开 m兼容、可以加载 mlang 函数库、可以找到自定义 m 函数路径。
示例如下:
1.创建自定义 m 函数 Main_t,写入下面代码:

function time = Main_t(a,b)
    time = a*b
    disp(['start=',num2str(a),'finish=',num2str(b)])
end

image.png
2.编写多进程代码,如下,其中的路径需要替换成自定义 m 函数 Main_t 所在的路径:

using Distributed
#每一个进程都要 using TyMLangCore
@everywhere using TyMLangCore
#加载 mlang 函数库,num2str 函数是 mlang 函数库里的,不是内需函数
@everywhere TyMLangCore.load_PreloadMPackages
#每一个进程都要把 m 函数路径加进去
@everywhere TyMLangCore.eval_mcode!("addpath('/home/wangerjia/Syslab/case')")   #自定义 m 函数 Main_t 路径
@sync @distributed for i in 1:4
    println("循环 i=$i 在进程 $(myid())上执行")
    start =TyMLangCore.to_mlang(float(i));
    fnish =TyMLangCore.to_mlang(float(i));
    mv =TyMLangCore.mexCallMLang("Main_t",1,[start,fnish])
    time = TyMLangCore.from_mlang(mv[1])
    println(time);
    println("end");
end

3.运行上述代码,可以看到成功实现了在多进程中调用 m 兼容和自定义 m 函数:
image.png

所属专栏:Julia语言
产品信息:Syslab科学计算环境
科学计算

全部回答

暂无数据
暂无数据
用户
和原帖交流更多问题细节吧,去
我要发帖 我要发帖
资料中心 资料中心
查看更多>
热门帖子 热门帖子
主要贡献者 主要贡献者
过去7天