类似matlab的parfor,Syslab目前有没有比较好的代替方法?
技术分享
发布于 2025-10-16 19:54:59
查看 1过去229天
问题现象
类似matlab的parfor,Syslab目前有没有比较好的代替方法?
仿真的包数非常多,并行度要求比较高,需要把客户端软件装在集群上,长时间仿真。
解决方法
使用多线程来实现parfor功能替代
示例:将for循环转换为parfor循环
为计算密集型任务创建并行 for 循环,并测试产生的加速。
在 Syslab 编辑器中,输入下面的 for 循环,测试所需要的时间。
using TyMath
using BenchmarkTools
n = 200
A = 500
s = zeros(1, n)
@btime for i in 1:n
s[i] = maximum(abs, eigvals(rand(A, A)))
end
运行该脚本,并注意所消耗的时间。
30.532 s (4201 allocations: 794.54 MiB)
在首选项中设置julia进程启动线程数,将线程数修改为4,并重新启动命令行窗口查看此时的线程数。

println(Threads.nthreads())
在脚本中,用多线程替换 for 循环。
using BenchmarkTools
using TyMath
n = 200;
A = 500;
a = zeros(1, n);
@btime begin
Threads.@threads for i in 1:n
a[i] = maximum(abs, eigvals(rand(A, A)))
end
end
使用多线程所消耗的时间如下:
13.349 s (3430 allocations: 793.74 MiB)
注意,通过在 4 个线程上将 for 循环转换为多线程循环,可以加快计算速度。
所属专栏:Syslab基础平台
产品信息:Syslab科学计算环境