gpt4 book ai didi

C++ 程序在重新执行时加速

转载 作者:行者123 更新时间:2023-12-01 14:09:32 67 4
gpt4 key购买 nike

我目前正在对 C++ 程序进行性能测试。我需要批量插入到 std::unordered_map或其他一些类似的开源结构。我正在插入 30-40 个字符字符串作为键值对,并注意到一个有趣的行为。第一次执行代码时( Clion ),需要 20 秒才能完成,我重复了测试(什么也没改变),是 14 秒,然后是 8 秒,4 秒,现在代码运行大约 3 秒。我应该重复一遍,我的代码中唯一昂贵的操作是 bulk unordered_map 插入 ,多线程与 std::lock_guard<std::mutex> .

另一个重要的信息是我正在从文件中读取这些键和值。所以我想到了 中发生的一些文件缓存。 Ubuntu .但是我用不同的机制做同样的事情,从来没有经历过这样的事情。然后我想到了一些 RAM 分配技巧,它可能会在程序结束后保持大部分 map 完好无损。但我没有做任何事情来实现这一点。

为什么会这样?不仅如此,我该如何重置?我需要进行客观测试,因为我的代码将在多个服务器中运行,而无需任何预缓存。

谢谢。

最佳答案

第一次运行代码时,它必须:

  • 如果磁盘停止或空闲,唤醒磁盘
  • 从磁盘读取数据
  • 从磁盘读取可执行文件
  • 也可能加载到一些共享库中

  • 第二次运行代码时,它可以:
  • 从内存中的 OS 读取缓存中读取数据
  • 从内存中的操作系统读取缓存中读取可执行文件
  • 从内存中的操作系统读取缓存中读取共享库
  • 由于 CPU 处于负载状态,请将其调速到更高的频率

  • 这就是为什么在很长一段时间内多次运行测试很重要,不仅仅是几秒钟,而是至少连续 10-15 分钟。

    您的执行时间一开始会发生巨大变化,但稍后会收敛到更一致的值。您总是可以按运行时间排序并找到第 95 个百分位,即程序在 95% 的时间内运行的时间。

    关于C++ 程序在重新执行时加速,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61762436/

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