内存排序

✍ dations ◷ 2025-10-21 12:29:22 #内存排序

内存排序是指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.

相关

  • 松柏目松柏目(学名:Pinales)在生物分类学上是松柏纲中的一个目,传统分类上的裸子植物门包括五个纲(松柏纲、苏铁纲、银杏纲、买麻藤纲、红豆杉纲)。现因此五支裸子植物并非单系群,而将其
  • 宅地法《宅地法案》(Homestead Acts),又译《份地法》、《移居法》,是1862年美国联邦政府颁布的针对农业发展,以很低的价格转让或无偿分配国有土地的一系列法案。仅这一系列法案中的第一
  • 罗伯特·富尔顿罗伯特·富尔敦(英语:Robert Fulton,1765年11月14日-1815年2月24日)美国工程师、发明家。18世纪末年到19世纪初年在巴黎试验用人力旋转螺旋桨的潜水艇和用蒸汽机作为动力的船。18
  • 但汉章但汉章(1949年1月1日-1990年3月7日),台湾电影导演。高雄市人,师大附中、台湾大学法律系毕业。但汉章在学期间已经常为各报刊撰影评,后并任《影响》杂志编辑,1975年赴美就读加州大学
  • 奥斯丁·亨利·莱亚德奥斯丁·亨利·莱亚德(英语:Austen Henry Layard,一译赖尔德;1817年3月5日-1894年7月5日),英国旅游家、考古学家、楔形文字专家、艺术史学者、绘图家、收藏家、作家及外交官。他以
  • 莉雅·宾特·侯赛因公主努尔王后陛下阿莉亚公主殿下穆娜公主殿下穆罕默德王子殿下 塔吉德王妃殿下菲雅王妃殿下哈桑王子殿下 莎瓦王妃殿下巴丝玛公主殿下阿里王子殿下 莉玛王妃殿下亚森王子殿下 珊
  • 网谷正治网谷正治(1970年8月29日-),日本男编剧。出身于东京都。本名相同。编剧集团“ぶらざあのっぽ”(小山高生主宰)出身。主要参加动画系列编剧、剧本统筹的工作。从事编剧以来大多使用
  • 太阳城60坐标:35°43′45″N 139°43′05″E / 35.72917°N 139.71806°E / 35.72917; 139.71806太阳城60(日语:サンシャイン60)是日本东京都丰岛区东池袋的一栋摩天大楼,为复合商业设施
  • 铁斯托铁斯托(荷兰语:Tiësto;荷兰语:.mw-parser-output .IPA{font-family:"Charis SIL","Doulos SIL","Linux Libertine","Segoe UI","Lucida Sans Unicode","Code2000","Gentium","Gentium Alternative","TITUS Cyberbit Basic","Arial Unicode MS","IPAPANNEW","Chrysanthi Unicode","Genti
  • 维吉妮亚·席拉维吉妮亚·席拉(英语:Virginie Besson-Silla,1972年-),是一名加拿大裔法国电影制片人。她监制了各种不同的电影,包括动作片、浪漫电影、漫画改编、传记电影和动画片。席拉出生于加拿大渥太华,父亲是塞内加尔外交官,母亲是法国物理治疗师。她是瑞士男演员文森·培瑞兹的嫂子,妹妹卡琳·席拉是一名女演员和作家 。她2004年与卢·贝松结婚,育有3个孩子。