使用gcc实现自动向量化?

3

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

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) sum = 0; for (i = 1..n) { sum += a[i] * log(b[i] / c); }

您知道是否有希望让gcc 434进行自动矢量化,并且应该如何编写循环以帮助它(例如使用索引还是使用迭代器,应该将(2)分解为更简单的循环等)目前我正在使用双精度,必须检查是否至少可以将(1)移动到浮点数。


1
你是否指定了 -ftree-vectorize? - mattn
2个回答

2

2
你可以通过添加“-ftree-vectorizer-verbose=2”来查看向量化器是否进行了任何优化。 - Sean McCauliff

0

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接