forhappy / Cplusplus-Concurrency-In-Practice

A Detailed Cplusplus Concurrency Tutorial 《C++ 并发编程指南》
MIT License
5.22k stars 1.48k forks source link

内存模型的一个问题 #7

Open AthrunArthur opened 10 years ago

AthrunArthur commented 10 years ago

Hi, 我大概看了一下内存模型部分,整体来说写得不错,精神可佳,貌似你大多数部分是翻译的那本concurrency in action?有个地方貌似不太准确,请你参考。

例如,如果两个变量读写互不相关,编译器有可能将读操作提前(暂且称为预读prefetch 吧),或者尽可能延迟写操作,假设如下面的代码段:....

首先这里不能称为预读,这里编译器的优化其实是instruction reorder,是为了充分利用cpu的流水线结构,而将读写不相关的操作放到一起,这样cpu在等待一个数据从内存读过来(数千cpu周期)的时候,同时还能干别的,而不是干等着。预读是硬件的,和编译器没有太大关系。

其次,下面的这个例子。。。请问你是不是没有亲自编译看看?按照你写的这种reorder,结果都变了,这不可能的。。。

RunCross commented 10 years ago

Hi,我还没得贡献任何东西,目前只是看看已经写过的。


天 道 酬 勤 别人笑我太疯癫,我笑他人看不穿。 不见五陵豪杰墓,无花无酒锄作田。

------------------ 原始邮件 ------------------ 发件人: "AthrunArthur";notifications@github.com; 发送时间: 2013年12月10日(星期二) 上午9:39 收件人: "forhappy/A-Detailed-Cplusplus-Concurrency-Tutorial"A-Detailed-Cplusplus-Concurrency-Tutorial@noreply.github.com;

主题: [A-Detailed-Cplusplus-Concurrency-Tutorial] 内存模型的一个问题 (#7)

Hi, 我大概看了一下内存模型部分,整体来说写得不错,精神可佳,貌似你大多数部分是翻译的那本concurrency in action?有个地方貌似不太准确,请你参考。

例如,如果两个变量读写互不相关,编译器有可能将读操作提前(暂且称为预读prefetch 吧),或者尽可能延迟写操作,假设如下面的代码段:....

首先这里不能称为预读,这里编译器的优化其实是instruction reorder,是为了充分利用cpu的流水线结构,而将读写不相关的操作放到一起,这样cpu在等待一个数据从内存读过来(数千cpu周期)的时候,同时还能干别的,而不是干等着。预读是硬件的,和编译器没有太大关系。

其次,下面的这个例子。。。请问你是不是没有亲自编译看看?按照你写的这种reorder,结果都变了,这不可能的。。。

— Reply to this email directly or view it on GitHub.

forhappy commented 10 years ago

谢谢 @AthrunArthur 中肯的建议,这一部分确实有部分内容是来自C++ Concurrency In Action,比方说那副图片就是从书里面截下来的,其他的内容是自己以前积累的,在每章的末尾都写了参考的出处,比方内存模型这一章的参考资料:[https://github.com/forhappy/A-Detailed-Cplusplus-Concurrency-Tutorial/blob/master/zh/chapter8-Memory-Model/web-resources.md] ,自己最近在找工作加毕业设计开题,这上面的内容更新少了,等忙完了这一段时间再好好投入精力来写其他的内容,非常感谢 ;-)