向量化短到浮点的转换

Vectorize short to float conversion?

本文关键字:转换 向量化      更新时间:2023-10-16

我试图理解为什么Visual Studio 2012 (x64)不想从shortfloat的矢量化转换。有人知道原因或解决办法吗?

//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

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

从这个页面来看,你的"循环包含一个不可向量化的转换操作(可能是隐式的)"。您是否尝试过首先转换为与float(如int)相同宽度的类型?

要了解更具体的原因,请参阅此处。显然,在SSE中没有直接的方法将由short型向量组成的SSE寄存器转换为float型向量,但是有一条指令将32位整数转换为float。