我正在观看Herb Sutter关于GPGPU和新的C++ AMP库的视频this。他谈到了内存模型,提到了弱内存模型和强内存模型,我认为他指的是读写排序等,但我不确定。
谷歌上有一些有趣的结果(大多数是科学论文)关于内存模型,但有人能解释一下什么是弱内存模型,什么是强内存模型以及它们与并发的关系吗?
谷歌上有一些有趣的结果(大多数是科学论文)关于内存模型,但有人能解释一下什么是弱内存模型,什么是强内存模型以及它们与并发的关系吗?
是的,你说得对 - 弱内存模型和强内存模型之间的区别在于可用的优化方式(读/写顺序及相关屏障)不同。
您可以通过从顺序一致模型(最严格或最强的模型)开始,然后指定如何引入、删除或移动单个线程的读写操作来指定内存模型
在此模型(顺序一致性)中,内存独立于使用它的任何处理器(线程)。内存通过控制器连接到每个线程,该控制器从每个线程提供读取和写入请求。单个线程的读取和写入按照线程指定的顺序 完全 到达内存,但可能以未指定的方式与其他线程的读取和写入交错。
然而,在强内存模型和弱内存模型之间并没有确切的界限,除非您考虑顺序一致性模型与其他模型的区别。其中一些模型只是比其他模型更强或更弱,因此更容易通过重新排序进行优化。例如,.NET 2.0中针对x86的内存模型允许比.NET 1.1中的版本更多的优化,因此可以认为它是一个较弱的模型。