如何优化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);
}
答案
如上所述,您的代码未显示a
,b
和c
的正确声明。如果它们实际上是指针(包括声明为数组的函数参数)或指向结构中的数组,请确保在可能的情况下使指针restrict
合格。这将使它成为一个像样的编译器可以矢量化你的循环。
你可以在从P__J __的答案链接的示例代码中看到restrict
的效果(如果删除它会发生什么)。没有它,编译器不能假设a
没有指向与b
或c
指向的内存重叠,所以它不能加载b[i+1]
或c[i+1]
直到存储a[i]
。这完全排除了并行加载它们,即基本上排除了矢量化。
否则,不,你的循环是最佳的。
另一答案
编译器在优化这样的东西方面非常好
以上是关于如何优化a [i] = -b [i] *(c [i] + d);的主要内容,如果未能解决你的问题,请参考以下文章