首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >防止GCC在基准代码中移动代码

防止GCC在基准代码中移动代码
EN

Stack Overflow用户
提问于 2012-01-29 14:18:40
回答 1查看 712关注 0票数 5

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

  1. Pre
  2. Start-Timer
  3. Body
  4. Stop-Timer
  5. Post

我想告诉GCC,每个区块必须保持上述顺序,不得有任何指令泄漏到另一个区块。理想情况下,计时器只测量步骤3,然而,出于实际原因,测量至少第3步和大多数步骤2-4就足够了。我只想确定我在测量第一步或第五步的任何部分。

目前,我在计时器函数中使用一个__sync_synchronize来发出一个完整的内存围栏。我希望,除了作为一个围栏,这一功能被标记,以防止重新排序。

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

EN

回答 1

Stack Overflow用户

发布于 2012-01-29 14:29:49

如果Start-Timer是一个函数调用,而Stop-Timer是另一个函数调用,那么优化器几乎没有机会移动Body,或者将材料从PrePost泄漏到Body中。

Pre的所有副作用必须在调用Start-Timer函数之前完成(这里有一个序列点)。Stop-Timer的所有副作用必须在执行Post之前完成(也有一个序列点)。所以编译器必须让Start-TimerStop-Timer的代码对猴子来说是可见的,并在生成的代码中溢出信息,而且我也不相信它能够做到这一点。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9053849

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档