【问题标题】:Getting auto-vectorization with gcc?使用 gcc 进行自动矢量化?
【发布时间】:2011-06-22 08:48:43
【问题描述】:

在评估负对数似然的情况下,我必须 执行一系列可以从矢量化中受益的操作

0) for (i = 1...n) { a[i] = 0; } // 但我认为这是

std::fill(a.begin(), a.end(), 0) 已经是最优的了

1) for (i = 1...n) { a[i] += b * c[i]; }

2) 总和 = 0; for (i = 1 .. n) { sum += a[i] * log( b[i] / c ); }

你知道是否有希望让 gcc 434 去做 自动矢量化,以及我应该如何编写循环来帮助他(例如 使用索引与使用迭代器,我应该更简单地分解(2) 循环,...) 到目前为止,我正在使用双打,必须检查我是否可以移动到浮动 至少 (1)。

【问题讨论】:

  • 你指定了 -ftree-vectorize 吗?

标签: c++ gcc


【解决方案1】:

http://gcc.gnu.org/projects/tree-ssa/vectorization.html

使用所需的选项,-O3 -msse2

有关更多选项,请阅读上面的文档。

【讨论】:

  • 您可以通过添加 -ftree-vectorizer-verbose=2 来查看矢量化器是否执行了任何优化
【解决方案2】:

对于像 2) 这样的浮点减少的自动向量化,您需要启用 -funsafe-math-optimizations

在类似 i386 的目标上,您还需要添加 -mfpmath=sse

【讨论】:

    猜你喜欢
    • 2013-03-06
    • 2018-12-16
    • 1970-01-01
    • 2010-09-29
    • 1970-01-01
    • 2013-01-29
    • 2021-08-10
    • 2016-01-16
    • 2019-04-05
    相关资源
    最近更新 更多