the notebook of eyu

2014-03-21
盐关观潮

盐关观潮




Read More

2014-02-21
塘溪骑行

塘溪骑行




Read More

2013-06-21
murhash简介

murhash简介

MurmurHash是一种非加密型哈希函数,由Austin Appleby在2008年发明,并且有多个变种。
特点:对于规律性较强的key,MurmurHash的随机分布特性表现更良好。

MurmurHash1是第一个版本,速度比Bob Jenkins’的lookup3,但不是非常robust.
MurmurHash2速度更快并且robust,被应用于Google,Yahoo,Microsoft的很多公司的代码中
MurmurHash3是最新的版本,开发这个版本的原因是因为第二版有一些小缺陷,MurmurHash3速度比MurmurHash2速度快一点,并且有128-bit的版本,这对于为大数据块的生成identifier是很有用的。

Read More

2012-06-21
switch语句编译分析

switch语句编译分析

最近在做sstable写性能优化的事,涉及到了switch case,作为兴趣,了解了一下switch case在GCC中的优化方法(现在还不清楚,在加-O2时,编译器处理switch是如何做的),可能实际性能影响不大。

GCC优化switch原则:
—对于小于等于4个case的switch,采用二分查找
—对于大部分case不连续的case,采用二分查找
—对于连续的case,采用映射表来处理
—对于大部分连续,少量不连续的case,或是case数值差别不大的case,采用填充冗余case,或是分成几个映射表来处理(不同的编译器做法可能不同)
—对于不是从0开始的case(相差不大时,会进行填充),相差很大时,在做映射表时,要先执行一个减指令,再用映射表来处理
—case顺序无关,GCC会对它进行排序

使用switch注意事项:
(1)case尽量连续,防止填充case
(2)case尽量从0开始,减少一条DEL指令或是填充case
(3)当有3或4个case(1,2,3,4)时,执行频度高的指令可以将其case设为2
(4)尽量避免相差很大的case,可能会完全转化为if…else….
(5)case超过四个时,条目数对性能影响不大,除非过多,超出了CPU cache的大小,
(6)case选项中使用的函数,尽量不要inline,可能导致case中代码过多超出了CPU cache的大小,触发读取内存的操作。

Read More

2012-06-21
static const reference带来的奇怪问题

static const reference带来的奇怪问题

最近和同事讨论的一个问题:

Read More

2012-06-21
__attribute_pure__带来的奇怪问题

__attribute_pure__带来的奇怪问题

先看下面的两个程序:

Read More