【问题标题】:What does this compiler message (vectorization, GCC) means?这个编译器消息(向量化,GCC)是什么意思?
【发布时间】:2014-05-06 23:05:57
【问题描述】:

在带有标志的上一代 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

(例如所有的'hem!)

我明白了:

.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 是浮点数的向量)。对log函数向量化是不是没希望了?

【问题讨论】:

    标签: c++ gcc vectorization


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 快速提问:您知道 ICC 是否能够矢量化 log()?
      • 可能不是,但这里有一些开源代码可以为您做到这一点:code.google.com/p/fastapprox
      猜你喜欢
      • 2012-11-10
      • 2021-12-26
      • 1970-01-01
      • 2010-10-01
      • 2015-06-22
      • 1970-01-01
      • 2017-04-21
      • 2014-06-24
      • 1970-01-01
      相关资源
      最近更新 更多