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
这取决于花费时间来进行修复。
这可能是由于:-
- 正在加载服务。您的集群可能是基于数据库的,并且需要启动数据库服务(第一次)
- 磁盘缓存。 OS 将记住它已读取的数据,并能够像在内存中一样提供数据。
- 内存缓存。 CPU 有不同的可用内存速度,两次使用相同的内存,第二次会更快。
- 状态缓存。数据可能处于更适合后续运行的状态。这可以被认为是对数组进行两次排序。第二次已经排序了,可以产生提速
服务启动可以是几秒。
磁盘缓存加速大约 20 倍。
内存缓存大约 6 倍加速
状态缓存,可以无界
我认为您的代码需要重置扫描对象,以确保它再次完成工作
我正在尝试为无效函数计时
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
这取决于花费时间来进行修复。
这可能是由于:-
- 正在加载服务。您的集群可能是基于数据库的,并且需要启动数据库服务(第一次)
- 磁盘缓存。 OS 将记住它已读取的数据,并能够像在内存中一样提供数据。
- 内存缓存。 CPU 有不同的可用内存速度,两次使用相同的内存,第二次会更快。
- 状态缓存。数据可能处于更适合后续运行的状态。这可以被认为是对数组进行两次排序。第二次已经排序了,可以产生提速
服务启动可以是几秒。
磁盘缓存加速大约 20 倍。 内存缓存大约 6 倍加速 状态缓存,可以无界
我认为您的代码需要重置扫描对象,以确保它再次完成工作