我正在研究一个问题,这里有一段代码比理论上的预期要糟糕得多:
inline bool check(const int index, const float* f) const{
for(int j=0; j<d; j++)
if(points[index][j] != f[j])
return false;
return true;
}
bool func(int p_cap, const float* f) const{
int i = (p_cap - error > 0? p_cap - error: 0);
int l = (p_cap + error + 1 < keyCount? p_cap + error + 1: keyCount);
for(; i<l; i++)
if(check(i, f))
return true;
return false;
}这些函数位于类中,points和keyCount都是类的成员。points是一个keyCount*d二维数组.d是一个全局变量。对于如何优化这个代码块有任何帮助吗?谢谢..。
编辑:
我使用插值在数组中搜索,我的数据是这样的,这是可能的。人们的期望是,使用这种技术搜索任何点比线性搜索要快得多。我有这个期望的原因是因为error = 1。这意味着,对于任何一点,我都在查看3数组中最大的不同点。我有一百万个这样的阵列。每个存储点正好10个点。线性搜索的期望值为N/2,这意味着在到达查询点(同样是预期/平均值)之前,我需要查看5。因此,这个“内插代码”应该比线性搜索运行得更快,但这并没有发生。
使用的编译命令:
g++ -O3 -march=native -DNDEBUG test.cpp -o test发布于 2020-04-13 14:25:05
我不确定编译器是否已经这样做了,但是您可以做两件事:
在带有1 for循环的数组中循环(因为checkable.
您需要检查编译后的代码,看看它是否已经应用了这些优化。
https://stackoverflow.com/questions/61189791
复制相似问题