编程之美解题报告-1.1 50%CPU曲线

抓住CPU使用率的特点:1秒更新一次,思路还是比较容易想的:让CPU1秒内的时间 一半在做空循环(一直忙),一半在sleep()。

 

我电脑配置: AMD 2.2GHz,及2.2*10^9个CPU时钟周期数/秒。

 

空循环: for(int i=0; i<n; i++);转换为最接近机器语言的汇编语言:

 

loop:

move dx,i

add dx

move i,dx

cmp i,n

jl loop

一个循环是5条指令

 

平均一个CPU时钟周期执行2条指令,则每秒可以执行的空循环次数为
2.2 *10^9 * 2 / 5 = 0.88 * 10^9

 

一个CPU调度时间片大概为10ms,10ms可以执行空循环0.88*10^7次,所以我们可以进行如下控制:

 

int main(){

while(1){

 

        for(int i=0; i< 8800000;i++);//忙10ms

        sleep(10);//歇10ms

 

}

}

 

然后再根据实际的CPU率来细微调整8800000的大小。运行后大概维持在35%左右,所以加大空循环的次数。最终调大6倍,至55000000时,CPU使用率才基本维持在50%左右。这可能是双核(AMD Athlon 64 X2 Dual 4200+)的影响,速度比理论的单核确实快了很多。

 

如图:

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值