gpt4 book ai didi

c++ - boost chrono endTime - startTime 在 boost 1.51 中返回负值

转载 作者:太空狗 更新时间:2023-10-29 20:44:15 24 4
gpt4 key购买 nike

当我减去 endTime - startTime 时,我的 macbook pro 上的 boost chrono 库 vs1.51 返回负时间。如果您打印时间点,您会看到结束时间早于开始时间。怎么会这样?

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;

我尝试了不同的时钟但没有区别。

如有任何帮助,我们将不胜感激!

编辑:忘记添加输出:

现在时间:自启动后 1 纳秒

开始时间:自启动后 140734799802912 纳秒

结束时间:自启动后 140734799802480 纳秒

总解析时间:-432 纳秒每次迭代的平均解析时间:0 毫秒

最佳答案

超线程或只是调度干扰,Boost implementation平底船对操作系统的单调支持:

POSIX:clock_gettime (CLOCK_MONOTONIC) 尽管在校准系统时它仍然可能由于处理超线程的内核错误而失败。

WIN32:QueryPerformanceCounter() 除了 Nehalem 架构或更新的架构,它不会跨内核和线程保持单调。

OSX:mach_absolute_time(),即稳定和高分辨率时钟是相同的。 source code显示它使用 RDTSC 因此严格依赖于硬件稳定性:即没有保证。

禁用超线程是推荐的方法,但说在 Windows 上你真的很有限。除了放弃计时器解析外,唯一可用的方法是直接访问底层硬件计时器,同时确保线程亲和性。

现在是向 Boost 提交错误的好时机,我建议:

Win32:使用 GetTick64Count() ,正如所讨论的here .

OSX:使用 clock_get_time (SYSTEM_CLOCK)根据 this question .

关于c++ - boost chrono endTime - startTime 在 boost 1.51 中返回负值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13478093/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com