向量化短到浮点的转换
Vectorize short to float conversion?
我试图理解为什么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
运行时转换为所有int和自动向量化大约是140ms
(!!)
从这个页面来看,你的"循环包含一个不可向量化的转换操作(可能是隐式的)"。您是否尝试过首先转换为与float
(如int
)相同宽度的类型?
要了解更具体的原因,请参阅此处。显然,在SSE中没有直接的方法将由short型向量组成的SSE寄存器转换为float型向量,但是有一条指令将32位整数转换为float。
相关文章:
- Visual Studio 2017循环自动向量化问题
- 我写的 ASCII 到二进制转换器C++向后显示二进制,如何使其正确显示?
- 从父类的向量访问子类函数,而无需向下转换
- 从基类的共享指针向下转换到派生类的引用
- C++中有向无环图的邻接列表到邻接矩阵的转换
- C++可以有条件地向下转换类指针吗
- 在C++中自动向下转换函数参数
- 为什么静态向下转换unique_ptr不安全?
- NEON向量化无符号字节积和:(a[i]-int1) * (b[i]-int2)
- 为什么GCC不自动向量化这个循环?
- 明确的向量化
- 英特尔编译器不能向量化这个简单的循环
- 用特征向量化表达式
- 对于小型查找表,表查找是可向量化的
- 向量化(SIMD)树操作
- 优化向量化嵌套循环
- 向量化短到浮点的转换
- 需要帮助向量化此代码
- 重叠数组的和,自动向量化,和限制
- 如何使GCC向量化此循环