gpt4 book ai didi

c - 我需要对此函数进行哪些更改来优化执行时间?

转载 作者:行者123 更新时间:2023-11-30 20:37:35 26 4
gpt4 key购买 nike

unsigned int lookup_bloom(unsigned char (*id)[HEXXID], unsigned int len,
void *bf)
{
int i;
struct bloom_structure *filter = (struct bloom_structure *) bf;
unsigned int *nexthop = NULL;
// The returned values of counting_bloom_check() are 0 if found else 1
unsigned char matchvec[WDIST] = {1};
unsigned char tmp1[HEXXID + 1] = {0};
unsigned char tmp2[HEXXID] = {0};

memcpy(tmp1, id, HEXXID);
memcpy(tmp2, tmp2, HEXXID);
// Although the paper suggests to perform parallel membership queries
for (i = len; i >= MINLENGTH; i--) {
tmp1[i / BYTE] = tmp1[i / BYTE] >> (BYTE - i % BYTE) <<
(BYTE - i % BYTE);
if (!filter->flag[i - MINLENGTH])
continue;
matchvec[i - MINLENGTH] =
counting_bloom_check(filter->bloom[i - MINLENGTH], tmp1,
HEXXID);
}
// Parse the matchvec from longest to shortest to perform table search
for (i = len; i >= MINLENGTH; i--) {
tmp2[i / BYTE] = tmp2[i / BYTE] >> (BYTE - i % BYTE) <<
(BYTE - i % BYTE);
if (matchvec[i - MINLENGTH] || !filter->flag[i - MINLENGTH])
continue;
nexthop = hashit_lookup(filter->hashtable[i - MINLENGTH],
tmp2);
if (nexthop)
return *nexthop;
}

return 0;
}

以下是代码中使用的一些定义:

#define WDIST 140
#define MINLENGTH 20

struct bloom_structure {
bool flag[WDIST];
unsigned int length[WDIST];
int low[WDIST];
int high[WDIST];
counting_bloom_t *bloom[WDIST];
hash_t hashtable[WDIST];
};

我正在测量这个函数的执行时间。有人可以帮我优化这个例程吗?

如果有人可以建议对编写循环进行任何更改以减少执行时间,那就太好了。

提前谢谢您!

最佳答案

根据此函数的重要性,您可以尝试最小化执行的除法次数(/和 % ),因为它们是 CPU 成本最高的操作。

您可以合并两个循环,因为它们使用相同的范围。这样您就可以在变量中使用相同的索引计算(那些暗示除法的计算)。

如果您确实想插入这一点,您可以预先计算所有暗示除法计算的索引,以便从数组或任何认为合适的容器访问这些值。

关于c - 我需要对此函数进行哪些更改来优化执行时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32297781/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com