尽可能的优化代码性能

来源:互联网 发布:网络推广策划书范文 编辑:程序博客网 时间:2024/04/30 23:38

尽可能的优化代码性能

如下代码成为了系统的瓶颈,请尽可能的优化;

要求找到优化的点和优化方案,分析说明原因。

代码如下:

#define  M  10000

#define  N  10000

#define  L    3

int arr[L][M][N];

int xxx[M * N];

int main()

{

// init arr and xxxfirst, omit

// start

for (int r=0;r<10000; ++r)

{

f(arr);

}

return 0;

}

void f( intarr[L][M][N] )

{

int k = 0;

for ( int m=0;m<M; m++ )

{

    for( int n=0; n<N; n++ )

    {

        for ( int l=0; l<L; l++)

        {

            int ss = arr[l][m][0] + 1111;

            int tmp = sss + power( log(arr[l][m][n] ), 3 );

            arr[l][m][n] = a[l][m][n] + tmp;

            xxx[k] += arr[l][m][n];

}

k = k + 1;

}

}

}

修改点:

1. power函数,可以直接写成a*a*a,这个优化效果与机器型号有关

2. 改变数据结构,arr[L][M][N]修改成arr[M][N][L],修改后的好处:

   a) 内层循环的一些共有计算可以提前

   b) 内层数据访问被连续存储,cache命中率极度提升(最重要也是最根本的优化点)

3. 改变循环方式,for l, for m, for n;配合2,修改循环方式后,可以对l循环进行循环展开,减少分支预测失败

4. ….

原创粉丝点击