这个编译器消息(矢量化,GCC)意味着什么?

use*_*035 5 c++ gcc vectorization

在带有标志的上一代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
Run Code Online (Sandbox Code Playgroud)

(例如所有'下摆!)

我明白了:

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

对于该行:

for(i=0;i<N5;i++)   d3[i]=std::log(d2[i]);  
Run Code Online (Sandbox Code Playgroud)

这个'错误'消息是什么意思?(d3和d2是浮点数的向量).向量化日志功能是否无望?

amd*_*mdn 4

To意味着将多个数据项打包到一个寄存器中,并使用(又名)指令vectorize并行操作它们。许多浮点运算都有形式,不是其中之一。以下是单精度打包形式向量指令的列表,来自http://docs.oracle.com/cd/E19253-01/817-5477/epmoa/index.htmlvectorpackedvectorLOG

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