具有波形存储器的Julia并行函数执行

时间:2019-01-24 19:48:21

标签: multithreading parallel-processing julia

我的代码的目标是使用值函数迭代来更新Bellman方程。假设像下面这样的二维Bellman方程(实际问题要复杂得多):

V(x,y)= max_ {yp} g(x,y,yp)+ E [V(xp,yp)| x]

为了并行执行计算,我构造了以下函数:

f(V,y,g,EV(xp,yp | x)),此函数的伪代码为:

for x=xmin:xmax, yp=ymin:ymax
    vnew=g(x,y,yp)+E[V(xp,yp)|x]
    if vnew>V(x,y)
        V(x,y)=vnew
    end
end

基本思想是分配V(二维矩阵),g(三维矩阵)和EV(二维矩阵),f是就地函数更新V的特定部分,因此我可以并行计算V通过:

Threads.@threads for y=ymin:ymax
    f(V,y,g,EV(xp,yp|x))
end

在大多数情况下,代码都能正常工作,因为所有数组都已预先分配,并且该函数是就地函数,因此可以稳定地使用内存。但是,有时内存使用情况呈波形变化,我怀疑Julia正在复制很多对象。我该如何检查发生了什么并避免Julia复制数组?

0 个答案:

没有答案