首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >优化包含for和if的C++代码块

优化包含for和if的C++代码块
EN

Stack Overflow用户
提问于 2020-04-13 14:15:18
回答 1查看 83关注 0票数 1

我正在研究一个问题,这里有一段代码比理论上的预期要糟糕得多:

代码语言:javascript
复制
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;
}

这些函数位于类中,pointskeyCount都是类的成员。points是一个keyCount*d二维数组.d是一个全局变量。对于如何优化这个代码块有任何帮助吗?谢谢..。

编辑:

我使用插值在数组中搜索,我的数据是这样的,这是可能的。人们的期望是,使用这种技术搜索任何点比线性搜索要快得多。我有这个期望的原因是因为error = 1。这意味着,对于任何一点,我都在查看3数组中最大的不同点。我有一百万个这样的阵列。每个存储点正好10个点。线性搜索的期望值为N/2,这意味着在到达查询点(同样是预期/平均值)之前,我需要查看5。因此,这个“内插代码”应该比线性搜索运行得更快,但这并没有发生。

使用的编译命令:

代码语言:javascript
复制
g++ -O3 -march=native -DNDEBUG test.cpp -o test
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-13 14:25:05

我不确定编译器是否已经这样做了,但是您可以做两件事:

在带有1 for循环的数组中循环(因为checkable.

  • Turn按顺序将它们存储在内存中),这就消除了几个索引和指针计算的需要,尽管只有当您想循环遍历所有条目,并且如果所有条目都是
  • 循环时,在您的示例中,您在
  • ()函数中使用了1,并且在func()函数中再次检查了返回的值。

您需要检查编译后的代码,看看它是否已经应用了这些优化。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61189791

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档