1
考慮這兩個功能:朱莉婭 - 爲什麼在模塊中包含變量佔用這麼多內存?
功能1:
function testVec(t,v,k,n)
for i=1:n
t .= v .* 3 .+ k .* 4;
end
end
功能2:
module params
r = 3;
end
function testVec2(t,v,k,n)
for i=1:n
t .= v .* params.r .+ k .* 4;
end
end
他們有完全不同的表現:
@time testVec([1 2 3 4], [2 3 4 5], [3 4 5 6], 1000)
0.000036 seconds (7 allocations: 496 bytes)
@time testVec2([1 2 3 4], [2 3 4 5], [3 4 5 6], 1000)
0.003180 seconds (4.01 k allocations: 141.109 KiB)
爲什麼包括參數r
在一個月這會讓功能變差嗎?
如果我export
模塊params
和包括在testVec2
r
不使用前綴params
,其性能提高立即(同testVec
)。爲什麼?
謝謝。有沒有辦法來檢查一個變量是否類型不穩定?例如,一個函數,如'isUnstable()'? – tryingtosolve
做@code_warntype testVec2([1 2 3 4],[2 3 4 5],[3 4 5 6],1000)'給出了很多Julia編譯器分配給計算中變量和中間值的類型的信息。注意到任何**紅色**任何類型的註釋都是一些線索,說明有什麼不對勁。 –
@tryingtosolve在'Base.Test'中還有一個'@inferred'宏。 – Gnimuc