内存排序

✍ dations ◷ 2025-08-23 00:39:36 #内存排序

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

相关

  • 硼烷硼烷(Borane)即硼氢化合物,因其物理性质类似于烷烃,故称之为硼烷。在已知的20多种中性硼烷中,最简单的是乙硼烷 B2H6。甲硼烷只在气态状态中发现。按照硼氢个数比,中性硼烷一般可
  • 孙思克孙思克(1628年-1700年),字荩臣、号复斋,辽宁广宁人,汉军正白旗,清朝军事将领。孙得功之子。孙思克初为王府护卫。顺治八年(1651年),任牛录额真(佐领)、刑部理事官。顺治十一年(1654年),任甲
  • 日侨日侨(日语:日系人/にっけいじん)指的是已移居海外,并取得当地国籍或永久居留权,具有日本血统的侨民。现在估计大约有350万人(也包括混血)。在日本居住的日侨被称为归国日侨(在日日系
  • 各国自然灾害风险指数列表本列表列出了世界上大部分国家的自然灾害风险指数。该指数是由联合国大学环境与人类安全研究所和德国发展援助联盟基于28项指标和研究数据计算得出的,用以衡量各国遭受自然灾
  • 何塞·阿卡苏索何塞·阿卡苏索(José Acasuso,1982年8月10日-),是一位阿根廷职业网球运动员。于1999年转为职业选手。职业生涯最高世界排名第20位。是一位红土型的选手。他获得过7项赛事冠军,其
  • 哈斯桑哈斯桑(Hassan),是印度卡纳塔克邦Hassan县的一个城镇。总人口117386(2001年)。该地2001年总人口117386人,其中男性60225人,女性57161人;0—6岁人口12166人,其中男6242人,女5924人;识字
  • 赖香伶赖香伶(1968年1月5日-),台湾劳工社运人士,现任台湾民众党籍立法委员(劳工权益领域)及党团总召。曾任台北市政府劳动局局长。曾参与嘉隆纺织抗争以及正大尼龙罢工。担任过人民火大行
  • STS-94STS-94是历史上第84次航天飞机任务,也是哥伦比亚号航天飞机的第20次太空飞行。
  • 心里住着老灵魂《心里住着老灵魂》(英语:)是新加坡新传媒私人有限公司制作的奇幻亲情剧。故事讲述两位主角喝了神奇水回到了年轻的时候。该剧由陈罗密欧、何盈莹领衔主演,蔡琦慧、向云、洪凌、张耀栋、包勋评等联合演出。故事讲述石文丰(陈罗密欧饰)、白香果(刘玲玲饰)喝了神奇水“返老还童”回到了自己年轻的时候生活。突如其来的转变令他们惊讶不已。之后,只要他们向家人表明身份,说出各自的遭遇时,家人就会晕倒。奇怪的是,他们醒来后忘记一切,若无其事,像往常般过着没了他们俩的生活。
  • 多功能视频编码多功能视频编码(Versatile Video Coding,简称VVC),也称为H.266、MPEG-I第3部分或未来视频编码(FVC),是由联合视频专家组(JVET),于2020年7月6日最终确定的视频压缩标准。它是高效视频编码 (HEVC,也称为ITU-T H.265和MPEG-H第2部分)的后继标准。在2015年10月,MPEG和VCEG成立了联合视频探索小组(Joint Video Exploration Team, JVET),以评估可用的压缩技术并研究下一代视频压缩标准的要求。 在相同的编码