C++程序重新执行时速度加快

问题描述 投票:0回答:1

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

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

为什么会出现这种情况 ? 更重要的是,我怎样才能重新设置这个问题?我需要做客观测试,因为我的代码将在多个服务器上运行,没有任何预缓存。

谢谢。

c++ performance ubuntu memory-management clion
1个回答
14
投票

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

  • 唤醒磁盘,如果它是旋转下来或空闲的。
  • 读取磁盘上的数据
  • 从磁盘上读取可执行文件
  • 也可以加载一些共享库

第二次运行代码时,它可以。

  • 从操作系统的读取缓存中读取数据。
  • 从操作系统的读缓存中读取可执行文件。
  • 从操作系统的读取缓存中读取内存中的共享库。
  • 现在CPU已经有了负载,就把CPU的频率节流到更高的频率。

这就是为什么运行测试很重要的原因。多次 而对于一个 旬日不仅仅是几秒钟,而是至少连续10-15分钟。

你的执行时间一开始会有很大的差异,但以后会趋于比较一致的数值。你可以随时按运行时间排序,找到第95百分位数,即程序在95%的时间内运行的时间。

© www.soinside.com 2019 - 2024. All rights reserved.