【发布时间】:2015-08-27 23:16:11
【问题描述】:
我有一个长循环,其中对 8 位元素执行霓虹矢量加法。问题是一段时间后,几乎可以肯定部分或全部向量分量由于溢出而饱和。有没有一种快速的方法来检测这一点,以便我可以刷新结果,将向量归零并继续?我已经尝试过检查 C 和 V 标志,但似乎霓虹灯操作没有设置它们。
编辑:这里是感兴趣的代码,稍微简化了一点。还有,我升级到16位了,还是会溢出
int16x8_t Sum;
for(int C = 0; C < 100; C++)
{
// Sum += |a - b|
Sum = vabaq_u16(
Sum,
vld1q_u16((uint16_t *)a),
vld1q_u16((uint16_t *)b)
);
}
【问题讨论】:
-
如果您显示一些代码可能会有所帮助,以便人们可以准确地看到您的意思
-
我认为 100 项目数之一是简化?我看不出你怎么可能溢出 16 位,否则累积 8 位值(65535 / 255 = 257 > 100)。
-
另外,
vld1q_u16((uint16_t *)a)中的指针看起来很可疑 -a是什么类型?如果它仍然是一个 8 位数据的数组,那么这段代码就完全被破坏了。 -
是的,这是一个简化,是的,a 有问题。 a 是 16 位的,但它是有符号的,现在我使用的是 vld1q_s16 和 (int16_t*)