软件开发: 01 2012存档

代码review

| | Comments (1) | TrackBacks (0)
我:我们有两台机,都是一样的 xeon E5620 2.4G 的CPU,但是,跑算Pi的程序,5000个迭代,一个机器跑48秒,另一个只需要32秒

coly:CPU核数一样吗?

我:一样的。不一样应该没关系,我这是单进程。

coly:内存速度不一样?

我:就一个算Pi,总共就占8MB内存,还没有CPU的L3 cache大呢

coly:要不这样,你写个死循环加法,我们看看两边的速度是不是一样

(公司的盒饭送来了,晚饭时间)

coly:你先吃,我来写吧....一个死循环我应该还是能写出来的....你要review我的代码哟~
我:....

(coly把代码写出来了

int main(void)
{
        int a=0;
        while ( a < 0) {
                a++;
        }


        return 0;
}


coly:为什么我运行瞬间就结束了?
我:应该是编译器把你的死循环优化掉了,因为a这个变量在整个main函数里都没有被其它地方使用
coly: 喔~~,我改改,在结尾加个printf把a打出来

(程序一运行还是瞬间结束)
陈同学:(看了看代码)是不是加法太快了,看不出来?咱们加几个嵌套循环
coly:好~

(程序还是瞬间结束)

coly:怪了....靠,a的值是0啊,根本进不了循环!
我,陈同学齐声:喔~~~

coly:你们两个!怎么review代码的!




后记:

死循环程序写出来了,两台机器CPU的计算速度确实有差异,原因最后由柯旻同学揭示:

跟华为2285机器的cpu 频率控制有关
CPU不开启cpuspeed就是1.6G的主频,需要

/sbin/modprobe acpi-cpufreq
echo ondemand |sudo tee /sys/devices/system/cpu/cpu13/cpufreq/scaling_governor

后,主频才上到真正的2.4G