【问题标题】:How compiler and processor optimization works to speed up code execution?编译器和处理器优化如何加速代码执行?
【发布时间】:2019-09-02 19:21:17
【问题描述】:

Linux Kernel Development (3rd Edition),内核同步方法、排序和障碍。有一个例子:

我对本书中的陈述感到困惑:

同样,没有内存屏障,可以设置 b 在将 pp 设置为 p 之前为 pp。

那么,作者的意思是如果没有read_barrier_depends()b = *pp会在pp = p之前执行?这怎么可能?

【问题讨论】:

  • 他们很可能在 pp was set to p 之前表示 b to be set to *p,而 p 可能会在两者之间更改其值。
  • 那么,read_barrier_depends() 是做什么的?
  • 它告诉编译器不要重新排序之前和之后的内存读取。例如,必须先发出之前的所有读取和写入,然后才能发出屏障之后的所有读取。
  • 1, all the reads and writes beforeall the reads before? 2、read_barrier_depends只影响编译器不影响处理器重排序?

标签: compiler-construction processor instruction-reordering


【解决方案1】:

我对你的问题很感兴趣,所以我搜索了更长的时间。我在内核列表中找到了 read_barrier_depends 功能的帖子,并做了一些解释:

https://lwn.net/Articles/5159/

【讨论】:

    猜你喜欢
    • 2016-02-14
    • 2010-09-30
    • 2019-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多