Hen*_*and 3 c++ boost c++-chrono
当我减去endTime - startTime时,我的macbook pro上的boost chrono library vs1.51返回负数.如果打印时间点,则会看到结束时间早于startTime.怎么会发生这种情况?
typedef boost::chrono::steady_clock clock_t;
clock_t clock;
// Start time measurement
boost::chrono::time_point<clock_t> startTime = clock.now();
short test_times = 7;
// Spend some time...
for ( int i=0; i<test_times; ++i )
{
xnodeptr spResultDoc=parser.parse(inputSrc);
xstring sXmlResult = spResultDoc->str();
const char16_t* szDbg = sXmlResult.c_str();
BOOST_CHECK(spResultDoc->getNodeType()==xnode::DOCUMENT_NODE && sXmlResult == sXml);
}
// Stop time measurement
boost::chrono::time_point<clock_t> endTime = clock.now();
clock_t::duration elapsed( endTime - startTime);
std::cout << std::endl;
std::cout << "Now time: " << clock.now() << std::endl;
std::cout << "Start time: " << startTime << std::endl;
std::cout << "End time: " << endTime << std::endl;
std::cout << std::endl << "Total Parse time: " << elapsed << std::endl;
std::cout << "Avarage Parse time per iteration: " << (boost::chrono::duration_cast<boost::chrono::milliseconds>(elapsed) / test_times) << std::endl;
Run Code Online (Sandbox Code Playgroud)
我试过不同的时钟,但没有区别.
任何帮助,将不胜感激!
编辑:忘了添加输出:
现在时间:启动后1纳秒
开始时间:自启动后140734799802912纳秒
结束时间:自启动以来的140734799802480纳秒
总解析时间:-432纳秒Avarage每次迭代的解析时间:0毫秒
超线程或只是调度干扰,Boost实现对操作系统提供单调支持:
POSIX:clock_gettime (CLOCK_MONOTONIC)虽然在校准系统时由于内核错误处理超线程仍可能失败.
WIN32: QueryPerformanceCounter()除了Nehalem体系结构之外的任何东西或更新的内核并不会在内核和线程上单调.
OSX: mach_absolute_time()即稳定和高分辨率时钟是相同的.的源代码显示,它使用RDTSC于硬件稳定性从而严格依赖性:即没有保证.
禁用超线程是一种推荐的方法,但在Windows上说你真的有限.除了丢弃定时器分辨率之外,唯一可用的方法是直接访问底层硬件定时器,同时确保线程亲和性.
它似乎是向Boost提交错误的好时机,我建议:
Win32的:使用GetTick64Count(),作为讨论在这里.
OSX:clock_get_time (SYSTEM_CLOCK)根据这个问题使用.
| 归档时间: |
|
| 查看次数: |
1425 次 |
| 最近记录: |