第五章小节
第五章中,主要讲各种优化技术,首先通过引入CPE的概念来量化各种优化方法得到的性能,从而给于我们更强的说服力。第二,作者指出优化的地方,什么地方应该优化,就是关键代码中的少数内部循环部分,这些部分耗用的时间通常是值得关注的。
两种优化技巧
作者举例说明了各种编码技巧对性能的提升,尤其印象深刻的,减少重复过程的调用和减少对存储器中的重复引用,可以获得非常不错的改善,比如
int i;
int *result = 0;
for( i = 0; i < strlen(str);i++)
{
*result += *str++;
}
一 、减少过程调用
第一种改善方法是,减少过程的调用,这里的过程是strlen();
int i;
int *result = 0;
int len = strlen(str);
for (i = 0; i < len; i++)
{
*result += *str++;
}
这样做的话,strlen()只会被调用一次,会提升一部分性能,接下来还有一个地方可以优化,那就是减少存储器应用。
减少存储器引用
示例如下:
int i = 0;
int *result = 0;
int len = strlen(str);
int temp = 0;
for(i = 0; i < len; i++)
{
temp += *str++
}
result += temp;
以上操作可以减少对result指向内存的引用,从而加快了性能,书上看到的效果是提升了两倍。
多路并行,多路展开
作者并没有就此止步,而是结合现代处理器流水线处理指令的结果,从而充分利用处理器的并行特性来优化 ,具体就是多路展开,多路并行,从而获得最佳效果。书中花了很大的篇幅来讲授了如何根据寄存器的变化来确定关键路径,从而更好地优化代码,说实话,这部分没怎么掌握。
GPOF工具帮助查找性能瓶颈
其次作者还提出了用性能剖析程序GPOF 来确定代码的性能瓶颈,从而找到最耗时的部分。
总结
最后作者说了这些优化技巧呢只能是第二层次的优化,第一层次的优化是设计好数据结构和算法,其次才是这些编码编码技巧。数据结构和算法没设计好,编码技巧再好也不能提高程序的性能。这里作者点明了数据结构和算法的重要性,与战略和战术的关系扯上了关系,战略错误,战术优秀也无济于事,而战略正确,而战术得当才能成功。
本章的有助于平时编写代码时,写出性能优异的代码,以及这些优化技巧比较有效的原因,所以还是很有收获的。