内存排序

✍ dations ◷ 2025-09-14 03:58:13 #内存排序

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

相关

  • 10的百科知识|10的意思解释|10是什么意思国际疾病伤害及死因分类标准第十版(英语:The International Statistical Classification of Diseases and Related Health Problems 10th Revision,ICD-10)是世界卫生组织依据疾
  • 拟病毒拟病毒(Virusoid)也称为类病毒,它是一种环状单链RNA。它的侵染对象是植物病毒。被侵染的植物病毒被称为辅助病毒,拟病毒必须通过辅助病毒才能复制。单独的辅助病毒或拟病毒都不
  • 霜冻酸奶冻酸奶是用酸奶,有时候用其他乳制品制成的冷冻甜点。它通常比冰淇淋酸,脂肪也比较少 (因为使用的是牛奶而不是奶油)。它跟牛奶冻 (近几年被称之为低脂肪或轻冰淇淋)和常见的霜淇淋
  • 亚历克斯·弗格森亚历克斯·查普曼·弗格森爵士,CBE(英语:Alexander Chapman Ferguson,1941年12月31日-),苏格兰已退役足球运动员及主教练,在1986至2013年间担任英格兰豪门曼联主教练一职,被不少媒体
  • 锯齿龙类锯齿龙科(学名:Pareiasauridae)又译颊龙,是一类副爬行动物,繁盛于二叠纪中期至晚期,是晚古生代非常特别的植食性副爬行动物。这些动物的体型矮胖,中型到大型(身长60cm到3m长),有非常大
  • 德属新几内亚德属新几内亚﹝德语:Deutsch-Neuguinea﹞,是德意志帝国在大洋洲的一块殖民地。其范围包含新几内亚的北半部以及附近的一些岛屿。现在全境属于巴布亚新几内亚。此地主要由新几内亚
  • 进程控制块进程控制块(英语:Process Control Block,PCB)是操作系统核心中一种数据结构,主要表示行程状态。虽各实际情况不尽相同,PCB通常记载行程之相关信息,包括:总言之,PCB如其名,内容不脱离各
  • 向涛 (1963年)向涛(1963年4月12日-),男,湖北兴山人,中国凝聚态物理学家。现任中国科学院物理研究所研究员。1984年毕业于清华大学物理系,1986年获该校硕士学位,1990年获中国科学院理论物理研究所
  • 收容遣送收容遣送(简称收遣,1949年—2003年7月31日)制度是中华人民共和国的一个已被废止的制度,其并非依据法律条例,而是依据中华人民共和国国务院相关法规的一种强制行政措施,由民政机关
  • 瓦尔格兰德山坐标:46°13′34″N 8°08′20″E / 46.22611°N 8.13889°E / 46.22611; 8.13889瓦尔格兰德山(Punta Valgrande)是欧洲的山峰,位于瑞士和意大利接壤的边境,由皮埃蒙特大区和瓦莱