内存排序

✍ dations ◷ 2025-03-03 04:24:07 #内存排序

内存排序是指CPU访问主存时的顺序。可以是编译器在编译时产生,也可以是CPU在运行时产生。反映了内存操作重排序,乱序执行,从而充分利用不同内存的总线带宽。

现代处理器大都是乱序执行。因此需要内存屏障以确保多线程的同步。

这些内存屏障阻止编译器在编译时乱序指令,但在运行时无效。

asm volatile("" ::: "memory");

或者

__asm__ __volatile__ ("" ::: "memory");

阻止GCC编译器跨越它乱序读/写指令。

atomic_signal_fence(memory_order_acq_rel);

阻止编译器跨越它乱序读/写指令。

__memory_barrier()

指令。

_ReadWriteBarrier()

运行时内存排序

  • happens-before:按照程序的代码序执行
  • synchronized-with:不同线程间,对于同一个原子操作,需要同步关系,store()操作一定要先于 load(),也就是说 对于一个原子变量x,先写x,然后读x是一个同步的操作

对称多处理器(SMP)系统

对称多处理器(SMP)系统有多个内存一致模型。

某些老的x86有更弱内存序。

SPARC 内存序:

lfence (asm), void _mm_lfence(void)sfence (asm), void _mm_sfence(void)mfence (asm), void _mm_mfence(void)
  • PowerPC
sync (asm)
  • MIPS
sync (asm)
  • Itanium
mf (asm)
  • POWER
dcs (asm)
  • ARMv7
dmb (asm)dsb (asm)isb (asm)

编译器对硬件内存屏障的支持

  • GCC, version 4.4.0 and later, has __sync_synchronize.
  • C11/C++11 atomic_thread_fence()支持一条命令
  • Microsoft Visual C++ has MemoryBarrier().
  • Sun Studio Compiler Suite has __machine_r_barrier, __machine_w_barrier and __machine_rw_barrier.

参见

  • 内存模型 (程序设计)(英语:Memory model (programming))

参考文献

  1. ^ GCC compiler-gcc.h. . (原始内容存档于2011-07-24). 
  2. ^ 存档副本. . (原始内容存档于2020-08-10). 
  3. ^ ECC compiler-intel.h. . (原始内容存档于2011-07-24). 
  4. ^ Intel(R) C++ Compiler Intrinsics Reference (页面存档备份,存于互联网档案馆)

    Creates a barrier across which the compiler will not schedule any data access instruction. The compiler may allocate local data in registers across a memory barrier, but not global data.

相关

  • 泛称在生物分类中,俗名是指任何非拉丁学名的名称。在同一种语言的俗名中,又分普通名(common name)和别名。普通名是在该语言中被广泛接受使用名称;别名是普通名之外的其他所有俗名
  • 宋志平宋志平(1956年10月-),河北深泽人。中国建筑材料集团有限公司、中国建材股份有限公司(3323.HK)前董事长及常务董事。毕业于河北大学化学系、工商管理硕士和管理工程博士,以及武汉
  • 氟化锌氟化锌(化学式:ZnF2)是锌最常见的氟化物。无色针状晶体或白色粉末。有无水物和四水合物两种。与其他卤化锌不同,有明显的离子键化合物特性:熔点很高,溶解度也较小。金红石型结构,锌
  • 武汉市新洲区公交线路2015年,新洲邾城开通7条公交线路,由湖北公路客运(集团)新洲公交有限公司运营。
  • 阿卜杜尔·穆伊斯阿卜杜尔·穆伊斯(印尼语:Abdul Muis,1886年7月3日-1959年6月17日),印尼作家、记者,在荷属东印度时期参与了印度尼西亚的独立运动,并曾因此多次入狱。他的代表作为《错误的教育(英语:S
  • 你们在哪里?我在这里《你们在哪里?我在这里》(意大利语:)是于1993年上映的意大利剧情片。该片由莉莉安娜·卡瓦尼(英语:Liliana Cavani)执导。电影入选第50届威尼斯电影节,而安娜·博纳奥图赢得沃尔庇杯
  • 毁灭者柯南《毁灭者柯南》(英语:Conan the Destroyer)是一部于1984年上映的美国剑与魔法冒险电影,由理查德·弗莱彻执导,阿诺德·施瓦辛格领衔,其他演员包括葛蕾丝·琼斯、奥利薇亚·阿波、
  • 威廉一世 (巴伐利亚)威廉一世,(1330年5月12日-1389年4月),维特尔斯巴赫家族成员,巴伐利亚公爵(1347年—1388年在位)、荷兰伯爵(是为威廉五世)、泽兰伯爵(是为威廉四世)和埃诺伯爵(英语:County of Hainaut)(是为
  • 马路须加学园3《马路须加学园3》(日语:マジすか学園3)是东京电视台系列电视剧24(每周星期五24:12 - 24:53、JST)由岛崎遥香主演的电视剧。马路须加学园系列的第三作,也是全系列唯一背景设定不同的作品。前作担任主演的前田敦子更替为岛崎遥香主演。同时,主要成员和角色设定也大幅度地变更。而且,舞台与前作的以不良学园的设定也改变,以20XX年的少年刑务所(民间更生教育法人的“监狱 HOPE”经营)为设定。20XX年,少年法被修正,法务省矫正局委托由民间企业经营管理的少女监狱。没有记忆的少女・Paru被监狱监禁的地
  • 数学能力及性别一般人常认为数学能力会因为性别不同而有差异。男性通常被认为在数学方面的表现会比女性好。有两个领域被认为有这种差异:第二个说法的争议性相当高。在工程师等以数学为基础的职业里,女性与男性的从业人数有相当大的差距。 因为这些事业会要求数学能力显著高于一般人的人。有性别引起的技能差异比一般的高。所以,当讨论女性在工程事业上的数量的时候,比较一般水平并非十分有用,而且应该比较女性工程师在女性当中的比例而非比较男、女工程师的比例。有很多理论解释性别所造成的数学能力差距。有些研究者认为是环境造成。例如,由家庭与学校中,