读《编程卓越之道:深入理解计算机》续三

    今天一口气看完了第八,九,十共三章,这三章的主要内容是布尔运算,CPU体系结构和指令集设计等。其实这三个内容分别作为一个专题都可以写一整本书,而且这本书中介绍的内容在其他的诸如数字电路,组成原理或系统结构之类的书中都涵盖了,只不过这本书将其中一些与编写卓越代码比较相关的提出来讲解了。下面摘抄了一些我个人觉得比较有帮助的东西,不过不一定全是和编写卓越代码关系很近的。
1.对于n个输入变量,共可以构造2的2的n次幂次幂个不同的布尔函数。
2.使用卡诺图可以得到一个布尔函数的最优型(即最简表达)。
3.由于CPU体系存在流水线操作,应尽量减少前后指令间的数据相关性,并将相同的运算放在一起(这个工作应该由程序员来完成,不过当使用高级语言时,也可以通过编译器来做到这一点)。
4.超标量CPU就是通过增加更多的执行单元以使CPI小于1。80x86从Pentium系列开始支持超标量。由于大多数超标量CPU并不是完全镜像复制了其原有执行单元,因此会导致有些指令执行很快而有些则不会。所以为超标量CPU编写的软件可以极大地影响其性能,在编写时最重要的原则是:尽量使用短指令(因为指令越短,CPU一次操作提取的指令数就越多)。
5.对于寄存器资源有限的CPU,可以使用寄存器重命名技术来加速,即CPU可以为每个通用寄存器创建一组寄存器,如AX,将有一组AX[0],AX[1],…,AX[n]。程序代码无法控制选用其中哪一个,这是CPU的事。
6.另一种降低CPI的技术是甚长指令字(VLIW)体系结构。其CPU一次可以取一个很大的数据块并一次解码执行,这其中可以包含2条指令甚至更多。这就要求程序员(或编译器)要合理地安排指令,不允许有任何的流水线相关或其他冲突。
7.在典型超标量CPU中,很少有指令在每个时钟周期里都能完全使用CPU的所有功能单元,与其让剩下的单元空闲着,不如让CPU同时运行2个或是更多线程。这就是所谓的超线程技术。
8.另外,对于CPU指令集设计的了解也是很重要的。这不仅仅是CPU设计师们的事,当作为软件设计师的你了解了为什么有些指令比其他指令要短要快,哪些常量值是CPU可以高效处理得比内存存取更快,哪些类型的表达式更容易翻译成机器码,为什么当代码将控制在目标代码中做长距离跳转时效率比较低,等等的这些时,就是说当你写出的代码在变成机器码后更符合CPU设计者对CPU指令集设计所做的假设时,它就是高效的,卓越的。
(To be continued...)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值