这是我在这里的第一个问题,我也是C ++的新手,但我会尽我所能尽可能具体。请告诉我,我是否要模糊:
我试图通过使用chrono和duration_cast来测量排序方法(合并排序)对给定的整数数组进行排序所需的时间。以下是相关代码段:
auto t1 = std::chrono::high_resolution_clock::now();
mergesort(sortingArray, temp, 0, num - 1);
auto t2 = std::chrono::high_resolution_clock::now();
std::chrono::duration<double, std::milli> fp_ms = t2 - t1;
std::cout << fp_ms.count() << " seconds\n";
我得到的输出总是&#34; 0秒&#34;,无论我做多大都需要排序。即使它排序了一百万个整数并且有一个明显的执行时间,它仍然给我相同的输出。
我基本上遵循此处给出的示例:http://en.cppreference.com/w/cpp/chrono/duration/duration_cast
我只使用我的mergesort函数而不是f()。如何正确测量我的排序方法?
编辑:我在Windows 10中使用minGW通过Powershell进行编译。命令如下所示:g++ -std=c++11 .\Merge.cpp
答案 0 :(得分:1)
TL; DR :看起来std::chrono
实现(libstdc ++)在Windows上相当差,你不会得到比秒更好的东西。
长版:
libstdc ++ typedef
s std::chrono::high_resolution_clock
至std::chrono::system_clock
。根据{{3}},对std::chrono::system_clock::now()
的调用将导致对以下某项内容的调用,具体取决于平台:
syscall(SYS_clock_gettime, CLOCK_REALTIME, ...)
,这是一个Linux系统调用clock_gettime(CLOCK_REALTIME, ...)
,这是Windows不支持的POSIX系统调用gettimeofday(...)
,这是Windows不支持的POSIX功能std::time()
作为后备补充因此,在Windows上内部调用std::time()
。未指定std::time()
的编码;但是,大多数系统都遵循implementation:
time()函数应返回自纪元以来秒的时间值。
Microsoft本身POSIX specification:
自1970年1月1日午夜起经过秒时返回时间,如果出现错误,则返回-1。
我认为可以肯定地说,你不会使用MingW std::chrono
获得更高的分辨率。
至于你的问题,你有两个选择: