1

我有一个适用于迭代的程序。例如,如果我有 50000 次迭代,程序执行 50000 次迭代,最后停止。当我测量 1000 次迭代的计算时间时,我得到了(例如)1 秒,但对于 50000 次迭代,我得到了 10 秒。

我应该期望与迭代次数和计算时间成正比吗?对于给出的示例,我不应该期望 50000 次迭代需要 50 秒吗?我只是对结果感到困惑……</p>

我正在使用 clock() 函数来测量它。在迭代之前,我从 srand(time(NULL)); 比定义clock_t startTime;开始时间 = 时钟();.....并使用 ((double)(clock() - startTime)) / CLOCKS_PER_SEC) 测量最终迭代时间:

4

1 回答 1

2

在现代处理器上测量性能可能很棘手,因为例如它们中的许多具有可变的时钟速度。

这意味着它们通常运行缓慢,因为不需要 CPU,而且它们可以使用更少的能量并产生更少的热量。

当您需要大量计算时,操作系统会检测到 CPU 现在有工作,并且可以提高时钟速度(以及热量和电流)以更快地获得结果。

为了避免这个特定问题,您应该测量计算使用的时钟周期,而不是 CPU 时间(或更差的挂钟时间)。一个好的分析器应该给你这个选项(我正在使用oprofile)。

于 2013-09-22T14:55:13.503 回答