Linux C ++时间测量库,快速打印库

时间:2012-02-26 21:20:18

标签: c++ linux

我刚刚开始在Linux中编写C ++编程,任何人都可以推荐一种测量代码运行时间的好方法,理想情况下是纳秒精度,但毫秒也可以。

还有一种快速打印方法,我现在正在使用std :: cout,但我觉得它有点慢。

感谢。

6 个答案:

答案 0 :(得分:3)

您可以使用gettimeofdayclock_gettime

答案 1 :(得分:1)

要获得以纳秒为单位的时间,请使用clock_gettime()。要测量代码所用的时间,必须使用CLOCK_MONOTONIC_RAW时钟类型。使用其他时钟类型并不是真正的解决方案,因为它们需要进行NTP调整。

至于打印部分 - 定义慢。将内置数据类型转换为ASCII字符串的“通用”代码总是很慢。还有缓冲(在大多数情况下都很好)。如果您可以对数据做出一些很好的假设,那么您可以随时将自己的转换为ASCII,这将超越通用解决方案,并使其更快。

修改

另请参阅此处使用clock_gettime()函数和OS X特定mach_absolute_time()函数的示例:

答案 2 :(得分:1)

对于计时,您可以使用<chrono>标准库:

#include <chrono>
#include <iostream>

int main() {
    using Clock = std::chrono::high_resolution_clock;
    using std::chrono::milliseconds;
    using std::chrono::nanoseconds;
    using std::chrono::duration_cast;

    auto start = Clock::now();

    // code to time
    std::this_thread::sleep_for(milliseconds(500));

    auto end = Clock::now();
    std::cout << duration_cast<nanoseconds>(end-start).count() << " ns\n";
}

实际时钟分辨率取决于实现,但这将始终输出正确的单位。

std::cout的表现也取决于实施情况。 IME,只要你不在任何地方使用std::endl,它的性能与Linux或OS X上的printf相当。微软在VC ++中的实现似乎要慢得多。

答案 3 :(得分:0)

打印东西通常很慢,因为你正在看它的终端,而不是因为你首先打印的东西。您可以将输出重定向到文件,如果您将 lot 打印到控制台,则可能会看到显着的加速。

答案 4 :(得分:0)

我想您可能还想查看time [0]命令,该命令报告特定程序完成执行所花费的时间。

[0] http://linux.about.com/library/cmd/blcmdl1_time.htm

答案 5 :(得分:0)

时间测量:

Boost.Chrono:http://www.boost.org/doc/libs/release/doc/html/chrono.html //请注意,如果你有一个现代的C ++ 11(曾经是C ++ 0x)编译器,你已经开箱即用,因为“Boost.Chrono的目标是在C ++ 0x中实现新的时间设施,正如在N2661中建议的那样 - 睡眠的基础。“

Boost.Timer:http://www.boost.org/doc/libs/release/libs/timer/

来自Boost.Date_Time的Posix时间:http://www.boost.org/doc/libs/release/doc/html/date_time/posix_time.html

快速打印:

FastFormat:http://www.fastformat.org/

基准:http://www.fastformat.org/performance.html

关于C ++流的性能 - 请记住关于std :: ios_base :: sync_with_stdio,请参阅:

http://en.cppreference.com/w/cpp/io/ios_base/sync_with_stdio

http://www.cplusplus.com/reference/iostream/ios_base/sync_with_stdio/