4

我试图理解为什么 Visual Studio 2012 (x64) 不想矢量化从 ashort到 a的转换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);
}

信息 C5002:由于原因“1101”,循环未矢量化

解析度

使用短裤而不是矢量化的运行时是关于800ms

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

4

1 回答 1

2

从此页面看来,您的“循环包含不可矢量化的转换操作(可能是隐式的)”。您是否尝试过首先转换为与 a 宽度相同的类型float(例如int)?

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

于 2013-03-22T04:12:12.137 回答