gpt4 book ai didi

c++ - 防止 GCC 在基准代码中移动代码

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

我正在尝试微调我们正在使用的一些基准代码,并且想知道是否有一种方法可以明确地与 GCC 通信如何排序某些代码位。例如,给出这些代码块:

  1. 开始计时
  2. 正文
  3. 停止计时器
  4. 发布

我想告诉GCC,每个 block 必须保持上述顺序,不能有任何指令泄漏到另一个 block 中。理想情况下,计时器将仅测量第 3 步,但是,出于实际原因,测量至少第 3 步和最多第 2-4 步就足够了。我只是想确保我注意到测量了第 1 步或第 5 步的任何部分。

目前我在 Timer 函数中使用 __sync_synchronize 来发出完整的内存栅栏。我希望,除了作为栅栏之外,该功能还被标记为防止重新排序。

调用 __sync_synchronize 是否足够?同样从逻辑上讲,根据标准的文本,C++11 fence 命令是否也足够了?

最佳答案

如果 Start-Timer 是一个函数调用而 Stop-Timer 是另一个函数调用,优化器几乎没有机会移动 Body 周围,或将 Material 从 PrePost 溢出到 Body 中。

Pre 的所有副作用必须在 Start-Timer 函数被调用之前完成(那里有一个序列点)。 Stop-Timer 的所有副作用必须在执行 Post 之前完成(那里也有一个序列点)。因此,编译器必须让 Start-TimerStop-Timer 的代码对生成的代码可见,四处溢出 Material ,我不相信它即使到那时也可以这样做。

因此,总而言之,如果您使用函数调用来启动和停止计时器,我认为您不必为此担心。

关于c++ - 防止 GCC 在基准代码中移动代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9053849/

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