我在Ubuntu上运行我的代码,我需要获取我程序中某个函数所花费的时间。我需要一个非常准确的时间,例如纳秒或至少微秒。

我读过有关chrono.h的信息,但它使用系统时间,我更喜欢使用CPU时间。

有没有办法做到这一点,并具有这种粒度(纳米秒)?

最佳答案

时钟可达到的精度是仍然会渗入几乎每种语言的不同硬件/操作系统的特性之一,老实说,在相同的情况下,我发现自己构建了一个足以满足您情况的抽象通常是唯一的选择。

话虽如此,我将避免使用STL进行高精度计时。由于它是一种没有真正实现的库标准,因此它必须创建一个抽象,这意味着:

  • 使用最小公分母
  • 通过平台相关的行为
  • 泄漏硬件/操作系统详细信息

    在第二种情况下,如果您要具有统一的行为,则基本上可以回到开始的地方。如果您可以承担可能造成的精度损失或标准时钟的偏差,那么请务必使用它。时钟是困难而微妙的。

    如果您知道目标环境,则可以按照老式的方式(#ifdef PLATFORM_ID...)选择适当的时钟,例如 clock_gettime() QPC ),并实现您可以获得的最精确的抽象。当然,您受到STL必须做出的相同选择的限制,但是通过减少平台集,通常可以提高LCD要求。

    如果您需要一种更理论上的方法来使自己信服此论点,则可以考虑最大精度的时钟集以及对当前时间的访问顺序。对于以统一步长一致地前进的时钟,如果两次访问发生的时间快于一个时钟的最大精度,但慢于另一个时钟的最大精度,则势必会出现不同的行为。另一方面,如果您确保两次访问至少是最慢时钟的最大精度,则行为是相同的。当然,现在实际的时钟不是均匀地前进(时钟漂移),也不是单位步进。

    关于c++ - 如何获得非常精确的耗时C++,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40105144/

    10-11 15:13