在《Julia High Performance》(第二版)中,作者给出了以下示例来解释如何在循环中获得类型稳定性:
function simdsum_fixed(x)
s = zero(eltype(x))
@simd for v in A
s += v
end
return s
end
Run Code Online (Sandbox Code Playgroud)
在前面的示例中,他们只是使用不同的代码来使用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
Run Code Online (Sandbox Code Playgroud)
那么与 有何zero(eltype(x))
不同zero(x)
?使用第一个比使用第二个有什么优势?
提前致谢。
zero(eltype(x))
如果x
是一个容器(例如向量)并且您想要其元素的附加标识,请使用。zero(x)
如果您想获得其自身的附加身份,请使用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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
429 次 |
最近记录: |