在"Julia High Performance"(第二版(中,作者给出了以下示例来解释如何在循环中获得类型稳定性:
function simdsum_fixed(x)
s = zero(eltype(x))
@simd for v in A
s += v
end
return s
end
在前面的示例中,对于不同的代码,它们只是使用zero(x)
。因此,我在没有eltype()
的情况下尝试了以下相同的函数(simdsum_fixed_b
(。他们似乎以同样的方式工作。
function simdsum_fixed_b(x)
s = zero(x)
@simd for v in A
s += v
end
return s
end
那么zero(eltype(x))
与zero(x)
有何不同?使用第一个比第二个有什么好处?
提前谢谢。
如果x
是一个容器(例如向量(,并且您想要它的元素的加性标识,请使用zero(eltype(x))
。如果要获得x
本身的加性标识,请使用zero(x)
。
矢量的例子如下,差异最明显:
julia> x = [1, 2, 3]
3-element Vector{Int64}:
1
2
3
julia> zero(x)
3-element Vector{Int64}:
0
0
0
julia> zero(eltype(x))
0