(这是我以前写的一个例子,
原贴)
我们经常使用
bzip2来压缩文件.如何使它跟有效呢?
使用
VTune(TM) Performance Analyzer去发现热点函数,主要瓶颈在 blocksort.c 的 mainSort(), 我们可以做如下修改:
a) Use memory runtime library instead of C Code
/*-- set up the 2-byte frequency table --*/
// for (i = 65536; i >= 0; i--) ftab[i] = 0;
/* pwang-enhance1: use memset() instead of zero-assignment in the loop */
memset(&ftab[0], 0, 26214); // length is 4*65537
b) Unroll each iteration in huge loop to make more efficiency.
/*-- Complete the initial radix sort --*/
//for (i = 1; i <= 65536; i++) ftab[i] += ftab[i-1];
/* pwang-enhance2 - unroll the loop, reduce the iteration */
for (i = 1; i <= 65536; i+=4) {
ftab[i] += ftab[i-1];
ftab[i+1] += ftab[i];
ftab[i+2] += ftab[i+1];
ftab[i+3] += ftab[i+2];
}
而且我们可以声明mainSimpleSort()作为"inline"函数,重新编译。压缩一个10MB的文档,从7.36s减少到5.9s!!
原帖含修改过的blocksort.c,也许你能做得更好。另外,解压缩"bzip2 -d"的优化工作还没做,不知你有没有兴趣用VTune来优化?