C++中void函数的重复计时

Repeated timing of a void function in C++

我正在尝试为无效函数计时

for (size_t round = 0; round < 5; round++) {
    cpu_time_start = get_cpu_time();
    wall_time_start = get_wall_time();

    scan.assign_clusters(epsilon, mu);

    cpu_time_end = get_cpu_time();
    wall_time_end = get_wall_time();
    ...
}

第一次计时产生 300 秒,而接下来的四次计时产生 0.000002 秒。这表明对 assign_clusters 的 void 函数调用已被优化。我怎样才能强制我的程序每次都执行这个耗时的函数调用,同时仍然对其余代码进行优化?

我通常做的是保存有问题的函数的结果然后打印出来,但是因为这是一个void函数,我有同样的选择吗?

我使用以下优化标志:-std=c++0x -march=native -O2

这取决于花费时间来进行修复。

这可能是由于:-

  1. 正在加载服务。您的集群可能是基于数据库的,并且需要启动数据库服务(第一次)
  2. 磁盘缓存。 OS 将记住它已读取的数据,并能够像在内存中一样提供数据。
  3. 内存缓存。 CPU 有不同的可用内存速度,两次使用相同的内存,第二次会更快。
  4. 状态缓存。数据可能处于更适合后续运行的状态。这可以被认为是对数组进行两次排序。第二次已经排序了,可以产生提速

服务启动可以是几秒。

磁盘缓存加速大约 20 倍。 内存缓存大约 6 倍加速 状态缓存,可以无界

我认为您的代码需要重置扫描对象,以确保它再次完成工作