edA*_*a-y 5 c++ gcc intel c++11 amd-processor
关于我在下面描述的顺序,我有一些相关的问题.
鉴于这些排序保证,我在许多地方不需要明确的围栏.但是,如何向编译器表达"栅栏",特别是GCC?也就是说,只要优化器不重新排序我的程序,程序顺序的保证才适用.
是否有普通/流行的新芯片使用通用内核而不提供此类保证?
我在C++ 0x中对它的交错思想感到有点困惑.我必须使用"原子"类来利用这些保证,还是草案中还有其他一些方面也提供了一种利用这些保证的方法?
记忆订购
英特尔和AMD(至少使用x86_64)都保证内存负载与单处理器上的存储操作相关.也就是说,如果某个处理器执行这些存储:
一些其他处理器看到C(3)的那一刻,它保证也能看到先前的存储A(1)和B(2).现在,处理器之间的可见性可以是交错的,但来自任何给定处理器的存储顺序也将是顺序的.
当处理器0读取处理器1存储的值,然后写入一个值时,它们也具有传递保证,读取新值的处理器2也必须从处理器1中看到该值.
忽略处理IO和特殊设备的特殊情况.我只对一般的内存保证感兴趣:我的排序只是我最感兴趣的一点,因为它对并发算法最重要.
掌握这些类型的操作对于构建 SMP 操作系统以及与某些类型的硬件进行通信至关重要。Linux 内核文档提供了对该主题的精彩概述以及内核使用的特定解决方案。我强烈建议您查看他们的memory-barriers.txt文件。