gpt4 book ai didi

c++ - 为什么代码的位置会影响 C++ 的性能?

转载 作者:可可西里 更新时间:2023-11-01 17:44:01 26 4
gpt4 key购买 nike

我正在运行测试性能,发现改变代码的顺序可以在不影响结果的情况下提高速度。

性能是通过使用 chrono 库的时间执行来衡量的。

vector< vector<float> > U(matrix_size, vector<float>(matrix_size,14));
vector< vector<float> > L(matrix_size, vector<float>(matrix_size,12));
vector< vector<float> > matrix_positive_definite(matrix_size, vector<float>(matrix_size,23));

for (i = 0; i < matrix_size; ++i) {
for(j= 0; j < matrix_size; ++j){
//Part II : ________________________________________
float sum2=0;
for(k= 0; k <= (i-1); ++k){
float sum2_temp=L[i][k]*U[k][j];
sum2+=sum2_temp;
}
//Part I : _____________________________________________
float sum1=0;
for(k= 0; k <= (j-1); ++k){
float sum1_temp=L[i][k]*U[k][j];
sum1+=sum1_temp;
}
//__________________________________________
if(i>j){
L[i][j]=(matrix_positive_definite[i][j]-sum1)/U[j][j];
}
else{
U[i][j]=matrix_positive_definite[i][j]-sum2;
}
}
}

我使用 g++ -O3(Intel i5/Win10 中的 GCC 7.4.0)编译。我更改了第 I 部分和第 II 部分的顺序,如果第 II 部分在第 I 部分之前执行,我会得到更快的结果。这是怎么回事?

这是 link整个程序。

最佳答案

我会尝试使用 perf stat -d <app> 运行两个版本并查看性能计数器的差异在哪里。

进行基准测试时,您可能希望固定 CPU 频率,因此它不会影响您的分数。


在 32 字节边界上对齐循环通常可以将性能提高 8-30%。参见 Causes of Performance Instability due to Code Placement in X86 - Zia Ansari, Intel了解更多详情。

尝试使用 -O3 -falign-loops=32 -falign-functions=32 -march=native -mtune=native 编译您的代码.

关于c++ - 为什么代码的位置会影响 C++ 的性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56308339/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com