如何优化a [i] = -b [i] *(c [i] + d);

时间:2019-04-14 11:56:42

标签: c loops optimization

想知道,鉴于下面的代码,有没有更好的方式编写代码来提高性能?

rootDir

2 个答案:

答案 0 :(得分:4)

按照书面规定,您的代码未显示正确的声明abc。如果它们实际上是指针(包括声明为数组的函数参数)或指向指向结构的数组,请确保在可能的情况下使指针restrict合格。这样可以使一个好的编译器可以向量化您的循环。

在与P__J__的答案链接的示例代码中,您可以看到restrict的效果(以及删除后会发生的情况)。没有它,编译器将无法假设a所指向的内存与bc所指向的内存没有重叠,因此编译器无法加载b[i+1]或{{1 }},直到存储c[i+1]。这完全排除了以并行方式加载它们的情况,即从本质上避免了向量化。

否则,不,您的循环是最佳的。

答案 1 :(得分:3)

编译器在优化此类内容方面非常出色

https://godbolt.org/z/Q8sWqp