提交 fd137b07 编写于 作者: A antirez

hllSparseAdd(): faster code removing conditional.

Bottleneck found profiling. Big run time improvement found when testing
after the change.
上级 8b3d5a8e
......@@ -202,7 +202,7 @@ struct hllhdr {
#define HLL_SPARSE 1 /* Sparse encoding */
#define HLL_MAX_ENCODING 1
#define HLL_SPARSE_MAX 3000
#define HLL_SPARSE_MAX 12000
/* =========================== Low level bit macros ========================= */
......@@ -663,14 +663,23 @@ int hllSparseAdd(robj *o, unsigned char *ele, size_t elesize) {
next = NULL; /* Points to the next opcode at the end of the loop. */
span = 0;
while(p < end) {
int oplen;
/* Set span to the number of registers covered by this opcode. */
if (HLL_SPARSE_IS_ZERO(p)) span = HLL_SPARSE_ZERO_LEN(p);
else if (HLL_SPARSE_IS_XZERO(p)) span = HLL_SPARSE_XZERO_LEN(p);
else span = HLL_SPARSE_VAL_LEN(p);
if (HLL_SPARSE_IS_ZERO(p)) {
span = HLL_SPARSE_ZERO_LEN(p);
oplen = 1;
} else if (HLL_SPARSE_IS_XZERO(p)) {
span = HLL_SPARSE_XZERO_LEN(p);
oplen = 2;
} else {
span = HLL_SPARSE_VAL_LEN(p);
oplen = 1;
}
/* Break if this opcode covers the register as 'index'. */
if (index <= first+span-1) break;
prev = p;
p += (HLL_SPARSE_IS_XZERO(p)) ? 2 : 1;
p += oplen;
first += span;
}
if (span == 0) return -1; /* Invalid format. */
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册