在《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 次 |
| 最近记录: |