在《Julia高性能》(第2版)一书中,作者给出了以下示例来解释如何在循环中获得类型稳定性:
在之前的例子中,他们使用了不同的代码,只是简单地使用了
那么,
谢谢。
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)
有什么区别呢?使用第一个的优点是什么?谢谢。
zero(x)
进行初始化,但是迭代另一个变量A
,该变量可能为全局变量。如果你修复这个错误,在输入向量x
时,你的第二个例子应该会失败。 - DNF