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

问题描述 投票:-2回答:2

只是想知道,鉴于下面的代码,是否有更好的方法来编写它以提高性能?

int i, N;
double a[], b[], c[], d;
for (i = 0; i < N; i++) {
    a[i] = -b[i] * (c[i] + d);
}
c loops optimization
2个回答
4
投票

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

你可以在从P__J __的答案链接的示例代码中看到restrict的效果(如果删除它会发生什么)。没有它,编译器不能假设a没有指向与bc指向的内存重叠,所以它不能加载b[i+1]c[i+1]直到存储a[i]。这完全排除了并行加载它们,即基本上排除了矢量化。

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


3
投票

编译器在优化这样的东西方面非常好

https://godbolt.org/z/Q8sWqp

© www.soinside.com 2019 - 2024. All rights reserved.