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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何优化a [i] = -b [i] *(c [i] + d);相关的知识,希望对你有一定的参考价值。

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

int i, N;
double a[], b[], c[], d;
for (i = 0; i < N; i++) {
    a[i] = -b[i] * (c[i] + d);
}
答案

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

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

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

另一答案

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

https://godbolt.org/z/Q8sWqp

以上是关于如何优化a [i] = -b [i] *(c [i] + d);的主要内容,如果未能解决你的问题,请参考以下文章

背包问题

HDU 2829 [Lawrence] DP斜率优化

背包问题模板

如何快速地进出——C++ 读写数据 I/O 性能优化

如何快速地进出——C++ 读写数据 I/O 性能优化

c语言:实现对于给定的正整数N,依次打印出小于等于N的所有素数。两种方法及其优化