专栏
标签
类似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,并重新启动命令行窗口查看此时的线程数。
image.png

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科学计算环境
科学计算

全部回答

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