我正在尝试为一个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
这取决于修复所需的时间。
这可能是由以下原因引起的:-
- 装载服务。您的集群可能是基于数据库的,并且需要启动数据库服务(第一次)
- 磁盘缓存。操作系统将记住它读取的数据,并能够像在内存中一样提供数据
- 内存缓存。CPU有不同的可用内存速度,使用同一内存两次,第二次会更快
- 状态缓存。数据可能处于更适合后续运行的状态。这可以被认为是对数组进行两次排序。第二次已经排序,这可以加快速度
服务启动可能需要几秒钟。
磁盘缓存速度提高约20倍。内存缓存速度提高约6倍状态缓存,可以是无限制的。
我认为您的代码需要重置扫描对象,以确保它再次工作