像思考软件一样思考硬件
本书总的来说还是比较高级的内容,对内存模型,缓存结构方式的概念原理等都略过不讲。专心讲 quantitative 的部分。如果对体系结构不熟悉,应该先读 <Computer Organization and Design
> 或者 <Computer Systems: A Programmer's Perspective>。
本书最大的特点就是,讨论计算机组成的每一个部件,每一个细节,以及他们为什么这么设计,并用计算的方式表示出来,让你知道这么做不是一个心血来潮,而是经过仔细计算审慎的结果。
我以前也学习过如何让软件运行得更快地方法,主要是从算法本身和利用机器能力这两个方面。而本书的角度是,如何选用合适的机器部件,来组合出一个最优的机器。对我来讲最新鲜的内容应该是电能 (power) 这个角度。每一个指令,每一个动作都会消耗电力,哪个多哪个少都是可以计算的。这样,就可以从更深的层次去评价一个任务。不仅软件运行要快,而且还要省机器部件,而且还要省电。
在算法设计时,会有一个最大值,表示任务不可能在少于这个时间内完成,那硬件同样有类似的情况。只不过软件计算的方式选择变成了硬件设计的选择,这两者一脉相承。
如果不是专业做硬件架构,我猜这本书实际的用处不是太大,比如大家都知道,google 首页用了压缩代码,因为 google 首页每天有数十亿访问量,代码节省一个字节都是可观的成本下降。但这个技巧对一般人来说,几乎就是没用了。
接下来要读的书是 <Foundations of Analog and Digital Electronic Circuits>,完了之后,计算机技能版图就差不多画全了,可以再深入地学习某些内容。
> 或者 <Computer Systems: A Programmer's Perspective>。
本书最大的特点就是,讨论计算机组成的每一个部件,每一个细节,以及他们为什么这么设计,并用计算的方式表示出来,让你知道这么做不是一个心血来潮,而是经过仔细计算审慎的结果。
我以前也学习过如何让软件运行得更快地方法,主要是从算法本身和利用机器能力这两个方面。而本书的角度是,如何选用合适的机器部件,来组合出一个最优的机器。对我来讲最新鲜的内容应该是电能 (power) 这个角度。每一个指令,每一个动作都会消耗电力,哪个多哪个少都是可以计算的。这样,就可以从更深的层次去评价一个任务。不仅软件运行要快,而且还要省机器部件,而且还要省电。
在算法设计时,会有一个最大值,表示任务不可能在少于这个时间内完成,那硬件同样有类似的情况。只不过软件计算的方式选择变成了硬件设计的选择,这两者一脉相承。
如果不是专业做硬件架构,我猜这本书实际的用处不是太大,比如大家都知道,google 首页用了压缩代码,因为 google 首页每天有数十亿访问量,代码节省一个字节都是可观的成本下降。但这个技巧对一般人来说,几乎就是没用了。
接下来要读的书是 <Foundations of Analog and Digital Electronic Circuits>,完了之后,计算机技能版图就差不多画全了,可以再深入地学习某些内容。
有关键情节透露