Vectorize short to float conversion?

时间:2013-03-22 04:08:09

标签: c++ visual-studio-2012 vectorization

我试图理解为什么Visual Studio 2012(x64)不希望将转换从short矢量化为float。有人有理由或有办法吗?

//unsigned short* __restrict A,B,C,D    
for (int j = 0; j < H*W;j++) 
{
    float Gs = D[j]-B[j];
    float Gc = A[j]-C[j];
    in[j]=atan2f(Gs,Gc);
}
  

info C5002:由于原因'1101'

,循环未向量化

解决

使用短片而非矢量化的运行时约为800ms

运行时转换为所有整数和自动向量化约为140ms(!!!)

1 个答案:

答案 0 :(得分:2)

this page开始,您的“循环包含一个不可向量化的转换操作(可能是隐含的)”。您是否尝试过首次转换为与float宽度相同的类型(例如int)?

更具体的原因,请参阅here。显然,在SSE中没有直接的方法将由短向量组成的SSE寄存器转换为浮点向量,但是有一条指令将32位整数转换为浮点数。