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

最佳答案 这取决于花时间做什么来修复.

这可能是由以下原因引起的: –

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

服务启动可以是几秒钟.

磁盘缓存加速约20倍.
内存缓存大约加快6倍
状态缓存,可以是无限的.

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

点赞