Юлия параллельное выполнение функции с волнообразной памятью - PullRequest
0 голосов
/ 24 января 2019

Объект моего кода использует итерацию функции значения для обновления уравнения Беллмана.Скажем, двумерное уравнение Беллмана выглядит следующим образом (реальная проблема гораздо сложнее):

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

В большинстве случаев код работает нормально, поскольку все массивы предварительно распределяются, а функция является функцией на месте, поэтомупамять постоянно используется.Тем не менее, иногда использование памяти имеет форму волны, что, я сомневаюсь, Юлия копирует много объектов.Как я могу проверить, что происходит, и избежать, чтобы Джулия копировала массивы?

...