我想尝试一个无效函数
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倍
状态缓存,可以是无限的.
我认为您的代码需要重置扫描对象,以确保它再次完成工作