Объект моего кода использует итерацию функции значения для обновления уравнения Беллмана.Скажем, двумерное уравнение Беллмана выглядит следующим образом (реальная проблема гораздо сложнее):
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
В большинстве случаев код работает нормально, поскольку все массивы предварительно распределяются, а функция является функцией на месте, поэтомупамять постоянно используется.Тем не менее, иногда использование памяти имеет форму волны, что, я сомневаюсь, Юлия копирует много объектов.Как я могу проверить, что происходит, и избежать, чтобы Джулия копировала массивы?