Tim*_*iel 3 optimization julia
我是朱莉娅的新手,并不是非常擅长编程,如果有一个我错过的明显答案,对不起.我正在尝试进行计算,包括使用三个元素的矢量的大量点积,比如这样,
function foo()
z = 0.0
for i in 1:10000
z = dot([0.0, 1.0, 0.0], [1.0, 0.0, 0.0])
end
end
Run Code Online (Sandbox Code Playgroud)
但是当我跑步的时候
@time foo()
Run Code Online (Sandbox Code Playgroud)
我明白了
0.001010 seconds (20.00 k allocations: 1.831 MB)
Run Code Online (Sandbox Code Playgroud)
这似乎是这个计算的大量分配,并考虑到我需要运行它不是10000时间但更接近10 ^ 9,这需要大约5分钟并分配千兆字节的内存.我觉得它不应该分配那么多.我错了?有没有更好的方法来做这个不分配太多,可能更快?
分配来自于[1.0, 0.0, 0.0]每次创建数组的事实.如果从循环中删除此创建,它的行为与您期望的一样:
function foo2(N=10^4)
a, b = [0.0, 1.0, 0.0], [1.0, 0.0, 0.0]
z = 0.0
for i in 1:N
z += dot(a, b)
end
return z
end
@time foo2()
0.000199 seconds (7 allocations: 368 bytes)
@time foo2(10^7)
0.179523 seconds (8 allocations: 384 bytes)
Run Code Online (Sandbox Code Playgroud)