繁体   English   中英

此编译器消息(矢量化,GCC)是什么意思?

[英]What does this compiler message (vectorization, GCC) means?

在带有标志的上一代i7处理器上使用GCC 4.8.1:

 -O3 -ftree-vectorizer-verbose=5  -fomit-frame-pointer -DNDEBUG -fno-operator-names -msse2 -mfpmath=sse -march=native -funsafe-math-optimizations -ffast-math

(例如所有下摆!)

我得到:

.cpp:31:note: not vectorized: relevant stmt not supported: D.56044_367 = __builtin_logf (D.55726_232);

对于该行:

for(i=0;i<N5;i++)   d3[i]=std::log(d2[i]);  

此“错误”消息是什么意思? (d3和d2是浮点数的向量)。 向量化对数函数是否没有希望?

vectorize意味着将多个数据项打包到一个寄存器中,并使用vector (又称packed )指令对其并行进行操作。 许多浮点运算具有vector形式, LOG不是其中之一。 这是来自http://docs.oracle.com/cd/E19253-01/817-5477/epmoa/index.html的单精度打包形式矢量指令列表。

  • ADDPS添加压缩的单精度浮点值
  • DIVPS划分打包的单精度浮点值
  • MAXPS返回最大打包的单精度浮点值
  • MINPS返回最小打包单精度浮点值
  • MULPS乘以压缩的单精度浮点值
  • RCPPS计算压缩的单精度浮点值的倒数
  • RSQRTPS计算压缩的单精度浮点值的平方根的倒数
  • SQRTPS计算压缩的单精度浮点值的平方根
  • SUBPS减去压缩的单精度浮点值

这意味着编译器没有SIMD(SSE)指令来评估日志。

SIMD指令允许以一个价格来评估多个操作。 Log及其亲属通常没有匹配的硬件说明。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM