如何在julia中同时运行两个函数



我试图在julia中同时运行两个函数,但我不知道如何做到

function area(side::Float64)
return side*side
end
function f(n::Int64)
mat = zeros(n,n)
for i=1:n
for j=1:n
mat[i,j] = area(rand())
end
end
return mat
end
function g(n::Int64)
mat = zeros(n,n)
for i=1:n
for j=1:n
mat[i,j] = area(rand()*rand())
end
end
return mat
end
s1 = f(10)
s2 = g(10)
hcat(s1,s2)

在Julia 1.3中,您可以使用Threads.@spawn:生成将在不同线程上调度的任务

begin
s1 = Threads.@spawn f(10)
s2 = Threads.@spawn g(10)
s1 = fetch(s1)
s2 = fetch(s2)
end

有关更多信息,请参阅公告博客文章:https://julialang.org/blog/2019/07/multithreading.

通常,在并行计算中有不同的"同时"概念。

既然你把你的问题标记为"多处理",让我给你一个简单的多进程解决方案(它应该适用于任何>=0.7的Julia版本(。因此,它使用了Julias内置的Distributed计算工具。

using Distributed
nworkers() < 2 && addprocs(2) # add two worker processes if necessary
@everywhere begin # define your functions on both workers
area(side::Float64) = side*side
function f(n::Int64)
mat = zeros(n,n)
for i=1:n
for j=1:n
mat[i,j] = area(rand())
end
end
return mat
end
function g(n::Int64)
mat = zeros(n,n)
for i=1:n
for j=1:n
mat[i,j] = area(rand()*rand())
end
end
return mat
end
end
# spawn tasks on the two workers (non-blocking)
t1 = @spawn f(10)
t2 = @spawn g(10)
# fetch the results (blocking until workers have finished)
r1 = fetch(t1)
r2 = fetch(t2)
hcat(r1,r2)

关于如何使用Distributed进行并行计算检查的更多信息,例如,Julia文档的这一部分或我的一个研讨会上的Jupyter研讨会:Julia中的并行计算。

相关内容

  • 没有找到相关文章

最新更新