专栏
标签
M兼容如何调用Julia使得运行速度加快?
技术分享
发布于 2025-07-18 11:46:44
查看 2过去319天

情况一:针对M兼容内置函数性能慢

可以调用 Julia 底层函数,以 fft 函数为例:

Fs = 1000;
T = 1/Fs;
L = 1500;
t = (0:L-1)*T;
S = 0.7*sin(2*pi*50*t) + sin(2*pi*120*t);
X = S + 2*randn(size(t));

%M兼容
tic  
Y = fft(X); 
toc

%调用Julia
tic
X_ = Julia(X,"Vector{Float64}"); %参数的类型通过【Julia】函数转为Julia类型
Y_ = jcall("TyMath.fft",X_);  %调用函数fft,需加上函数对应的函数库,即:TyMath.fft
Y = fromJulia(Y_);     %将输出类型通过【fromJulia】函数转为适用于M兼容类型变量
toc

运行结果如下图所示,可以看出调用 Julia 可以快许多倍。
image.png

情况二:针对 M 兼容 for 循环性能慢

可以将 for 循环转为 Julia 文件,再在 M 兼容代码中调用转写的 Julia 文件。

(1).m文件示例代码:

number = 260274;
x = 64;
z = 32;
y1 = 2;
y2 = 3;
test1 = rand(1,264370);
test2 = rand(1,264370);

tic
for i = 1:number
    test1(i+(0: x -1)* z) = y1;
    test2(i+(0: x -1)* z) = y2;
end
toc

上述示例循环为 260274 次,测试结果运行时间为 277.917519 秒。
image.png

(2)将 for 循环改写为 .jl 文件:

function result_pam(number, x, z, y1, y2, test1, test2)
    for i = 1:number
        test1[i.+(0:x-1)*z] .= y1;
        test2[i.+(0:x-1)*z] .= y2;
    end
    return test1, test2;
end

(3)然后在 M 文件中调用该函数,即:

number = 260274;
x = 64;
z = 32;
y1 = 2;
y2 = 3;
test1 = rand(1,264370);
test2 = rand(1,264370);

tic  
% 所需参数的类型通过【Julia】函数转为Julia类型
number_ = Julia(number,"Int");
x_ = Julia(x,"Int"); 
z_ = Julia(z,"Int");
y1_ = Julia(y1,"Int");
y2_ = Julia(y2,"Int");
test1_ = Julia(test1,"Matrix{Float64}");
test2_ = Julia(test2,"Matrix{Float64}");

%  加载转写为Julia文件路径,这两行一般不做修改。注意:Julia文件需要与调用Julia的M文件放在同一文件夹
filename = fullfile(fileparts(mfilename('fullpath')),"result_pam.jl");
jcall("Main.include",Julia(filename,"String"));   

jv = jcall("result_pam",number_,x_,z_,y1_,y2_,test1_,test2_);  %调用改写成julia的jl文件

%将输出类型通过【fromJulia】函数转为适用于M兼容类型变量
%根据for循环可以看到输出两个变量,因此需要使用【jindex】取出,多个变量也是如此。若只输出一个变量,则与第一个例子相同方式取出。
test1 = fromJulia(jindex(jv,1));  
test2 = fromJulia(jindex(jv,2));  

toc

(4)重启终端,测试运行时间可以看到为 0.720266 秒。与直接用 M 兼容相比,调用 Julia 大大缩短了运行时间。
image.png

注意: For 循环中如果里面还嵌套了自己写的简单的函数,则可以在改写的 Julia 文件后面接着写嵌套的函数。

例如:改写的Julia文件中嵌套了函数【fun】,在后面跟着写该函数即可
image.png

所属专栏:Syslab基础平台
产品信息:Syslab科学计算环境
科学计算

全部回答

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