Я пытаюсь, чтобы мой вызов функции занимал как можно меньше памяти, чтобы он работал быстрее.Проблема в том, что, когда я получаю доступ к структуре, которая указана в качестве аргумента, возникает много распределений.
function mCondition(y,t,integrator)
xp, yp, zp, vx, vy, vz = y
mu = integrator.p[1]
cond = (xp - 1.0 + mu)*vx + yp*vy + zp*vz
return cond
end
struct myStr
p
u
end
y = rand(6)
t = 0.0
A = myStr([0.01215],rand(6))
#test call
mCondition(y,t,A)
using BenchmarkTools
@btime mCondition(y,t,A)
Вывод:
julia> @btime mCondition(y,t,A)
102.757 ns (9 allocations: 144 bytes)
-0.07935578340713843
Я думаю, что проблема вструктура, потому что когда я удаляю эту часть кода,
function mCondition(y,t,integrator)
xp, yp, zp, vx, vy, vz = y
cond = (xp - 1.0)*vx + yp*vy + zp*vz
return cond
end
это результат теста:
julia> @btime mCondition(y,t,A)
18.294 ns (1 allocation: 16 bytes)
-0.08427348469961408
, который ближе к тому, что я ожидал бы от того, что происходитвнутри функции (но мне все еще интересно, если это распределение даже необходимо).Если бы вы могли помочь мне понять, что происходит или даже исправить это, было бы неплохо.
Заранее спасибо:)