我试图理解为什么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: loop not vectorized due to reason ‘1101’
解析度
使用短路而不是矢量化的运行时间约为800毫秒
运行时转换为所有整数和自动矢量化大约140毫秒(!!!)
最佳答案 从
this page开始,您的“循环包含一个不可向量化的转换操作(可能是隐含的)”.您是否尝试过首先转换为与float相同宽度的类型(例如int)?
有一个更具体的原因,请参见here.显然,SSE中没有直接的方法将由短向量组成的SSE寄存器转换为浮点向量,但是有一条指令将32位整数转换为浮点数.