尽可能的优化代码性能

尽可能的优化代码性能

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

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

代码如下:

#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. ….

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值