02 2012 档案
摘要:开篇1、背景之前的很长一段时间里,随着加工工艺的发展,cpu的处理速度一直在提升,基本上每18个月就会翻倍。直到04年cpu主频达到了4.0GH以来,这种规律似乎已经失效,原因是人们在制造cpu的工艺方面已经达到了物理极限。除非技术有本质突破,才能进一步提高cpu的处理速度。然而需要处理的数据量并没有因此而停止增长,其中的一个方法就是采用多核、并行处理技术。这会成为并且正在成为未来发展的趋势。要理解并行技术,对线程有一定的了解是很必要的。这篇博客主要说一下自己对线程的看法,这只是从简单的角度来看问题,入门级文章,笔者认知有限,有不足之处还望不吝指正。2、我的想法关于并发编程,我觉得如果能有一种
阅读全文
摘要:开篇上一篇博文对缓存的思考——提高命中率详细介绍了高速缓存的组织结构,并通过实例说详细明了cpu从高速缓存中取数据的过程,对于缓存的工作机制应该有了清晰的认识。这篇博文就来简单讨论以下对于缓存在实际开发中的应用,这里将告诉你如何让你的程序充分利用该缓存,即如何编写高速缓存友好的代码。提示:如果高速缓存的运行机制还没有清晰的认识,请参照前面文章。注1:关于文中提到的局部性的相关知识参照:局部性原理浅析——良好代码的基本素质注2:这是一个系列的文章,收录在程序性能优化注3:文章知识有些地方不容易理解,所以用心才能看完噢。“用空间换时间”在搞算法的时候经常能听到这种说法,算法研究中通常要考虑算法的时
阅读全文
摘要:开篇编写高效的程序并不只在于算法的精巧,还应该考虑到计算机内部的组织结构,cpu微指令的执行,缓存的组织和工作原理等。好的算法在实际中不见得有高效率,如果完全没有考虑缓存、微指令实现的话。前两篇博文局部性原理浅析介绍了程序的局部性原理,如何写出局部性良好代码。提高程序性能、何为缓存讨论了存储器层次结构,计算机内部的存储结构、缓存的概念,简单的介绍了缓存的工作机制。建议先阅读前两篇博文,虽然他们之间联系不大,在前面也有一些对本文的铺垫。而且,这是一个系列的文章。旨在优化程序性能。这篇博文主要介绍的是缓存的组织、工作原理。拨开迷雾,让你更加清晰的认识缓存。通用缓存结构回顾在提高程序性能、何为缓存中
阅读全文
摘要:开篇上一篇博文局部性原理浅析——良好代码的基本素质中对程序局部性有了一个简单的介绍。基本上已经知道了如何编写有良好局部性的代码。但是为什么有良好局部性的代码就能有良好的运行效率,这个问题将在这篇博文中给出解答。至于存储器内部的组织实现,将在下篇文章中叙述。存储器层次结构我们知道,计算机里的存储器有:硬盘、主存、高速缓存(其中又有一级高速缓存、二级高速缓存等等)、在往上就是寄存器。存储器在计算机内部的组织方式如下图所示:相信上图大家并不陌生。wiki对The memory hierarchy 的介绍的时候也有此图。我们发现,越往上,存储器的容量越小、成本越高、速度越快。为什么会出现这样的结构呢?
阅读全文
摘要:开篇一个优秀的程序、优美的代码,一般都具有良好的局部性。简洁、高效是每个程序员的追求。了解程序的局部性,能编写出更高效的代码。因为有良好局部性的程序能更好的利用缓存。不过这方面的只是将在以后的文章中介绍。这篇文章就简单的介绍以下程序的局部性原理。什么是局部性局部性通常有两种形式:时间局部性(temporal locality)时间局部性指的是:被引用过一次的存储器位置在未来会被多次引用(通常在循环中)。空间局部性(spatial locality)如果一个存储器的位置被引用,那么将来他附近的位置也会被引用。(这样说过于理论了些,在下面的论述中会有例子说明)数据引用局部性例子是最好说明问题的途径
阅读全文
摘要:网上有很多关于程序员必读的书单,感觉都不是很有代表性。今天无意看到了一篇总结还算不错的书单。和园友们分享。以下书单中提到的书看过一部分,给我的感觉是经典就是经典。读过之后确实得到了很多东西,它们都潜在的影响着我。透过书更能感受到的是一种思想,理性,透过经典,能得到质的升华。另如果园友有好书、何不一起分享进步以下是原文:哪本书是对程序员最有影响、每个程序员都该阅读的书?国外知名网站stackoverflow上有一个问题调查:哪本书是对程序员最有影响、每个程序员都该阅读的书?,这个调查已历时两年,目前为止吸引了153,432人访问,读者共推荐出了478本书(还在增加),其中最火的一本书《Code
阅读全文
摘要:开篇相信有过编码经验的人都知道,程序的正常运行,只是最基本的要求。更多的,还要考虑程序的性能,运行效率,组织结构,和重用性等等。今天将简单的讨论一下如何优化程序性能。要写出高效的程序,可能多数初学者想到的是在程序中用合适的算法和数据结构。这确实是一中提高程序性能的主要方法。而这里要讨论的是另一种方法,也是很多人都忽略但确实很重要的方法。也是我们这篇文章的主题:如何编写出编译器能有效优化的源代码。编译器优化的局限性没有万能的东西,编译器也一样。现代编译器都会对源代码进行优化,以提高程序的性能。比如linux下的GCC编译器就能控制优化的等级,优化等级高,对应的程序性能好。对于给定的代码,编译器并
阅读全文