Parallel processing Julia中的并行计算

Parallel processing Julia中的并行计算,parallel-processing,scope,julia,Parallel Processing,Scope,Julia,我正在处理Julia中的一个代码,我正在使用并行计算。这里是我正在使用的函数(从实际函数简化而来) 我试图评估我所谓的“命中时间”: 所以我运行了5条轨迹的函数(只是想看看会发生什么),下面是结果 using Distributed addprocs(4) @everywhere include("untitled.jl") (t, Fid, HittingTime) = @time action(5,10.,0.01); From worker 2:

我正在处理Julia中的一个代码,我正在使用并行计算。这里是我正在使用的函数(从实际函数简化而来)

我试图评估我所谓的“命中时间”:

所以我运行了5条轨迹的函数(只是想看看会发生什么),下面是结果

using Distributed
addprocs(4)

@everywhere include("untitled.jl")

(t, Fid, HittingTime) = @time action(5,10.,0.01);
      From worker 2:    0.01
      From worker 5:    0.01
      From worker 3:    0.01
      From worker 4:    0.01
      From worker 6:    0.01
[0.0, 0.0, 0.0, 0.0, 0.0]
  0.723837 seconds (121.59 k allocations: 6.331 MiB)
HittingTime
5-element Array{Float64,1}:
 0.0
 0.0
 0.0
 0.0
 0.0

如您所见,在for循环中,函数输入if,并存储
HittingTime[ktraj]=jt*dt
的值。但是当for循环结束时,HittingTime数组中的值似乎消失了!我不能将hcat用于
FidelitytoTarget
,因为数组具有不同的维度,因此如何编写一些代码来存储这些值?

您需要一个
SharedArray
来改变工作进程中的状态

using Distributed, SharedArrays
addprocs(4)
HittingTime=SharedArray{Float64}(nworkers())

res = @distributed (+) for i in 1:length(HittingTime)
    HittingTime[i] = rand()
    HittingTime[i]
end

@assert res ≈ sum(HittingTime)

您需要有一个
SharedArray
,以便在工作区中改变状态

using Distributed, SharedArrays
addprocs(4)
HittingTime=SharedArray{Float64}(nworkers())

res = @distributed (+) for i in 1:length(HittingTime)
    HittingTime[i] = rand()
    HittingTime[i]
end

@assert res ≈ sum(HittingTime)

既然你已经知道了答案,请简化你的问题,使之可读并可供他人使用。@PrzemyslawSzufel我确实按照你的建议简化了问题。我想现在更清楚了:)既然你知道答案,请简化你的问题,使之可读性强,便于他人使用。@PrzemyslawSzufel我确实按照你的建议简化了问题。我认为现在更清楚了:)或者多线程而不是多处理是的,只要不超过16个线程。对于大规模作业,多处理(或分布式计算)是更好的选择。或者多线程代替多处理是的,只要不超过16个线程。对于大规模作业,多处理(或分布式计算)是更好的选择。