gpt4 book ai didi

multithreading - 线性系统求解器在 Julia 中是否也像在 Matlab 中一样是多线程的?以及如何在 Julia 中对其进行 "multithread"处理?

转载 作者:行者123 更新时间:2023-12-03 12:58:25 30 4
gpt4 key购买 nike

我正在尝试比较 Matlab 和 Julia 之间的速度和性能。我正在查看一个代码,该代码对承受给定负载的连续体结构进行拓扑优化。我正在查看的代码是公共(public)代码topopt88.m:https://www.topopt.mek.dtu.dk/Apps-and-software/Efficient-topology-optimization-in-MATLAB
本质上,它是一种迭代算法,其中在每次迭代中求解 Ax=b 系统(x=A\b),其中 A 取决于结构设计(它是有限元刚度矩阵),并且在每次迭代中都会更新。
在 Julia 中,相同的代码运行速度比 Matlab 慢。我在 Julia 中做了一些代码优化,在函数定义中声明类型,尽可能使用函数,避免使用全局变量,以及实现我在互联网上找到的其他技巧。但是 Julia 仍然比相同的 Matlab 代码慢(在概念步骤的意义上相同)。
我的问题:由于Matlab系统解决“\”是multi threaded by default , Julia 也是这样吗?如果没有,如何多线程 Julia 的\运算符,或者类似地从并行化中获得加速?

最佳答案

默认情况下,Julia 使用 BLAS/OpenBLAS,您可以将其配置为多线程。这需要在多线程设置中运行 Julia 并设置 BLAS.set_num_threads()配置。
方法如下:
在开始 Julia 之前:

set JULIA_NUM_THREADS=4
或在 Linux 上
export JULIA_NUM_THREADS=4
现在让我们在一个线程中测试:
julia> using BenchmarkTools, Random

julia> const b = rand(50);

julia> const A = rand(50,50);

julia> @btime A \ b;
424.899 μs (4 allocations: 20.61 KiB)
现在是多线程:
julia> using LinearAlgebra

julia> BLAS.set_num_threads(4)

julia> @btime A \ b;
175.701 μs (4 allocations: 20.61 KiB)
你可以看到在我的机器上加速超过了 2 倍。
另一个加快速度的选择是将 Julia 切换到 MKL。
julia> pkg"add https://github.com/JuliaComputing/MKL.jl"
julia> pkg "build MKL"
# restart Julia
我没用过 MKL.jl所以如果你试一试,请写下它是如何进行基准测试的。

关于multithreading - 线性系统求解器在 Julia 中是否也像在 Matlab 中一样是多线程的?以及如何在 Julia 中对其进行 "multithread"处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64091728/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com