我正在尝试在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)
答案 0 :(得分:5)
在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。
答案 1 :(得分:4)
通常,并行计算中有不同的“同时”概念。
由于您将问题标记为“多处理”,因此让我为您提供一个简单的多进程解决方案(该方法适用于任何Julia版本> = 0.7的情况)。因此,它利用了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
进行并行计算结帐的更多信息,例如this part of the Julia documentation或我的一个讲习班Parallel Computing in Julia中的Jupyter讲习班。