【发布时间】:2015-09-05 17:50:01
【问题描述】:
我正在对一段代码进行矢量化处理,在某些时候我有以下设置:
register m128 a = { 99,99,99,99,99,99,99,99 }
register m128 b = { 100,50,119,30,99,40,50,20 }
我目前在这些寄存器中打包shorts,这就是为什么我每个寄存器有 8 个值。如果b 的第i 个值大于或等于a 中的值(在此在这种情况下,a 用常数 99 填充)。为此,我首先在b 和a 之间使用大于或等于运算,这会产生,例如:
register m128 c = { 1,0,1,0,1,0,0,0 }
为了完成运算,我想使用乘减法,即将运算b -= a*c 存储在b 中。结果将是:
b = { 1,50,20,30,0,40,50,20 }
有没有这样的操作?我发现的是 Haswell 的融合操作,但我目前正在研究 Sandy-Bridge。另外,如果有人对此有更好的想法,请告诉我(例如,我可以做一个逻辑减法:如果c 中的 1 则我减去,否则没有。
【问题讨论】:
-
澄清一下,你的操作应该是
b -= a*c,进行适当的减法吗?
标签: c vectorization sse