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



我正在尝试为一个void函数计时

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. 磁盘缓存。操作系统将记住它读取的数据,并能够像在内存中一样提供数据
  3. 内存缓存。CPU有不同的可用内存速度,使用同一内存两次,第二次会更快
  4. 状态缓存。数据可能处于更适合后续运行的状态。这可以被认为是对数组进行两次排序。第二次已经排序,这可以加快速度

服务启动可能需要几秒钟。

磁盘缓存速度提高约20倍。内存缓存速度提高约6倍状态缓存,可以是无限制的。

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

相关内容

  • 没有找到相关文章

最新更新