gpt4 book ai didi

c++ - 对一段代码进行计时时是否需要 volatile?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:24:56 26 4
gpt4 key购买 nike

我想自动调整我的代码,为此必须测量某些代码部分所需的时间,例如

auto t0 = std::chrono::high_resolution_clock::now();
section_of_code_to_be_timed(arguments);
auto dt = std::chrono::duration_cast<std::chrono::nanoseconds>
(std::chrono::high_resolution_clock::now()-t0).counts();
// ... using dt to tweak auto-tuning parameters

我担心的是编译器可能会重新安排对 std::chrono::high_resolution_clock::now()section_of_code_to_be_timed() 的调用,从而使我的计时测量无效。这是一个有效的担忧吗?如果是这样,我可以通过声明 t0 volatile 或其他方式(如何)来阻止它吗?

(我注意到我可以使用 RAII 习语,类似于 std::lock_guard,它似乎没有使用 volatile...)

最佳答案

正式的还是实际的?正式地,调用std::chrono::high_resolution_clock::now() 不可观察行为,因此编译器可以按需要的方式重新排列它们。实际上,编译器会将它们视为可观察的行为,所以你在这个分数上不会有任何问题。在另一手,你最好做点什么来确保section_of_code_to_be_timed 实际上做了一些事情。 (我经常使它成为一个类的虚拟成员,这就足够了间接欺骗大多数编译器。在函数本身中,我确保它产生的结果在外面可见的功能。)

请注意,无论哪种方式,volatile 都是无关紧要的。关于这一切确保 t0dt 以正确的顺序写入(实际上,它通常不能确保这一点);它使不关于 section_of_code_to_be_timed 的保证t0dt

关于c++ - 对一段代码进行计时时是否需要 volatile?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20350941/

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