2014-03-27 68 views
5

上上代i7处理器与标志使用GCC 4.8.1:这个编译器消息(矢量化,GCC)是什么意思?

-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是花车的向量)。矢量化日志功能是无望的吗?

回答

4

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减压缩单精度浮点值
+0

快速的问题:你会知道,如果国际刑事法院将能够向量化日志()? – user189035

+0

可能不是,但是这里有一些开源代码可以帮助你:http://code.google.com/p/fastapprox/ – amdn

+1

非常感谢,陛下(希望我可以更多)! – user189035

1

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

SIMD指令允许评估几个操作的价格可以这么说。 日志及其亲属通常没有匹配的硬件指令。