gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 10:03:56 29 4
gpt4 key购买 nike

我正在解决一个问题,这里有一段代码比理论预期的效果要差得多:

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成为类(class)的成员。 pointskeyCount*d二维数组。 d是一个全局变量。关于如何优化此代码块的任何帮助?谢谢...

编辑:

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

使用的编译命令:
g++ -O3 -march=native -DNDEBUG test.cpp -o test

最佳答案

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

  • 使用 1 个 for 循环遍历数组(因为 C++ 将它们按顺序存储在内存中),这消除了多次索引和指针计算的需要,但前提是您要遍历所有条目并且所有条目都是可检查的。
  • 将其转换为单个 if 检查,在您的示例中,您在 check() 函数中使用 1 ,并且在 func() 函数中再次检查返回的值。

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

    关于c++ - 优化包含 for 和 if 的 C++ 代码块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61189791/

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