ARM 架構的存儲器模型

ARM 架構的存儲器模型

ARM 的存儲器模型是一個相對復雜但設計精密的體系,它定義了處理器如何與內存進行交互,包括內存訪問的順序、可見性以及緩存行為等。這對于理解多核編程、并發控制和底層系統性能至關重要。

ARM 架構,特別是 ARMv8 及以后的版本,采用了一種稱為 弱一致性內存模型(Weakly Ordered Memory Model) 的設計。

核心特征:弱一致性內存模型

與 x86 的 強一致性內存模型(Strongly Ordered Memory Model) 相比,ARM 的弱序模型有以下幾個關鍵特點:

  1. 允許重排序:為了極致的性能,處理器和編譯器可以對內存訪問指令進行大量的重排序(Reordering),只要在單線程上下文中最終結果正確即可。

    • 寫-寫重排序:兩個寫操作可以以不同于程序順序的順序提交到內存。
    • 讀-讀重排序:兩個讀操作可以以不同的順序執行。
    • 讀-寫重排序:讀操作可能會被重排到寫操作之前,寫操作也可能會被重排到讀操作之前。
    • 注意:存在數據依賴關系的操作(例如,先讀地址 A,再向地址 A 寫)不會被重排序,否則會破壞程序的正確性。
  2. 多核系統中的可見性:在一個核心上執行的內存寫操作,不會立即被其他核心看到。寫入的值會先存在于該核心的寫緩沖區(Store Buffer)中,然后才異步地刷新到共享緩存和主內存中。這意味著,不同核心看待內存的“順序”可能是不一致的。

為什么需要內存屏障?

由于存在重排序和可見性延遲,在多線程編程中,如果沒有任何約束,程序的行為將是不可預測的。為了解決這個問題,ARM 提供了一組 內存屏障指令(Memory Barrier Instructions),讓程序員和編譯器能夠強制約束內存訪問的順序和可見性。

內存屏障就像一道“柵欄”,確保在屏障之前的所有內存操作(在某種意義上)完成后,才執行屏障之后的內存操作。

ARMv8 架構主要提供了以下三種內存屏障指令:

  1. 數據存儲屏障(Data Memory Barrier, DMB)

    • 作用:確保在 DMB 指令之前的所有內存訪問(讀和寫)都完成后,才執行其之后的內存訪問

    • 使用場景:主要用于保證對內存的訪問順序。例如,在更新一個數據結構指針之前,確保所有對數據結構本身的寫入都已經完成(對其它核心可見)。

    • 舉例

      STR X0, [X1]  ; 將數據寫入數據結構(將寄存器 X0 中的值存儲到以寄存器 X1 中的值為地址的內存位置)
      DMB ISH       ; 等待上面的寫入對所有核心可見
      STR X1, [X2]  ; 更新指針,指向新的數據結構
      ; 如果沒有 DMB,其他核心可能看到一個更新了的指針,但指向的卻是舊數據
      
  2. 數據同步屏障(Data Synchronization Barrier, DSB)

    • 作用:比 DMB 更嚴格。它確保在 DSB 指令之前的所有內存訪問高速緩存、分支預測、TLB 維護等所有指令都完成后,才執行其之后的任何指令(不僅僅是內存訪問)。
    • 使用場景:當你需要確保內存操作完全完成后才能做下一件事時。例如,在配置完內存映射寄存器(如 MMU)后,必須使用 DSB 來確保配置生效,然后才能繼續執行后續指令。
  3. 指令同步屏障(Instruction Synchronization Barrier, ISB)

    • 作用:它會刷新處理器的流水線(pipeline),確保在 ISB 之后的所有指令都從緩存或內存中重新預取。這意味著在 ISB 之前的所有上下文更改(如系統寄存器的修改)對后續指令完全可見。
    • 使用場景:在修改了會影響指令行為的系統控制寄存器(如 MMU、FPU 的設置)后,必須使用 ISB 來確保后續指令使用新的設置被執行。

簡單類比

  • DMB:像是一個倉庫管理員,確保所有貨物(數據)都按順序擺上貨架(內存)后,才允許貼出新的庫存清單(指針)。
  • DSB:不僅是管理員,他還要求所有記賬、清點工作都完成后,才允許你離開倉庫去做別的事。
  • ISB:是要求所有工人都忘掉舊的工作方式,重新閱讀新的工作手冊后再開始干活。

共享域(Shareability Domains)

ARM 架構還有一個重要的概念叫“共享域”,它定義了內存屏障操作的范圍。在多集群(Multi-Cluster)設計中,并非所有核心都能直接看到彼此的內存操作。屏障指令可以指定其作用的域:

  • ISH:Inner Shareable Domain。最常見的選擇,通常包括一個芯片上的所有核心。
  • NSH:Non-shareable。僅針對本處理器。
  • OSH:Outer Shareable Domain。包括可能不在同一個芯片上的處理器(如 big.LITTLE 集群之間)。
  • SY:Full System。包括所有組件,如 GPU、DMA 等。

例如,DMB ISH 表示屏障在“內部可共享域”內生效。

與高級語言的關系

作為應用程序開發者,你通常不會直接使用這些匯編指令。高級編程語言(如 C++11、Java)的并發原語(如 std::atomicvolatile (有特定語義時)、鎖mutex)在編譯時,編譯器會根據目標架構(如 ARM)插入正確的內存屏障指令。

例如,在 C++ 中,std::atomic<int> 的存儲(store)操作默認使用 memory_order_seq_cst 排序,編譯器在 ARM 上會為其生成類似 DMB ISH 的指令來保證強順序一致性。

總結

特性ARM (弱序模型)x86 (強序模型)
核心特點允許大量重排序以提升性能基本保持程序順序,重排序較少
硬件要求需要顯式使用內存屏障來保證順序大部分情況下硬件自動保證順序,屏障開銷小
性能更高效,能更好地利用流水線和緩存相對更保守,但編程模型更簡單
編程復雜性底層編程時需要開發者更深入地理解內存模型底層編程時心智負擔更輕

記住關鍵點:ARM 為了功耗和性能優勢,采用了弱一致性內存模型。這意味著在多核編程中,不能依賴指令的自然順序來保證同步,必須正確使用內存屏障(或依賴高級語言中正確的同步原語)來強制內存訪問的順序和可見性,從而編寫出正確的并發程序。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/99030.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/99030.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/99030.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

機器學習-多層感知機MLP

線性方法->多層感知機&#xff08;MLP&#xff09; 一個全連接&#xff08;線性、dense&#xff09;層有參數W∈Rm?nW\in\R^{m*n}W∈Rm?n,b∈Rmb\in\R^mb∈Rm&#xff0c;其用于計算輸出yWxb∈RmyWxb\in\R^myWxb∈Rm 線性回歸&#xff1a;全連接層有1個輸出softmax 回歸&a…

PostgreSQL——并行查詢

這里寫目錄標題一、并行查詢相關自己置參數二、并行掃描2.1、并行順序掃描2.2、并行索引掃描2.3、并行index-only掃描2.4、并行bitmap heap掃描三、并行聚合四、多表關聯4.1、Nested loop多表關聯4.2、Merge join多表關聯4.3、Hash join多表關聯了解 Oracle 的朋友應該知道 Ora…

智能體賦能金融多模態報告自動化生成:技術原理與實現流程全解析

在金融領域&#xff0c;研報作為決策參考的核心載體&#xff0c;其生成過程往往涉及海量數據采集、多維度分析及專業內容整合&#xff0c;傳統人工制作模式不僅耗時耗力&#xff0c;還難以滿足實時性與標準化需求。隨著人工智能技術的發展&#xff0c;“智能體賦能的金融多模態…

uniapp和vue3項目中引入echarts 、lime-echart(微信小程序、H5等)

目錄標題1、獲取 lime-echart插件2、安裝 echarts3、相關代碼4、在線定制5、效果截圖1、獲取 lime-echart插件 https://gitee.com/liangei/lime-echart 將其中組件和靜態資源分別放入當前項目對應的文件夾中&#xff1a; 2、安裝 echarts npm install echarts --save具體查…

ZYNQ7020+AD9361裸機驅動驗證

1. 程序編譯驗證 a. 下載源代碼 首先需要從GitHub下載相應的源碼&#xff0c;打開git bash&#xff0c;然后在mingwin中使用以下命令下載源碼。 git clone --recursive https://github.com/MicroPhase/antsdr_standalone.git 注意&#xff1a;在下載源碼的時候&#xff0c;使…

Grafana配置連接時候證書與mongosqld啟動證書的關系

目錄 證書角色說明 1. BI Connector 端的證書 (--sslPEMKeyFile) 2. Grafana 端的證書 (TLS/SSL Client Certificate & Key) 它們之間的關系 配置建議 情況一&#xff1a;只需要服務器驗證&#xff08;最常見&#xff09; 情況二&#xff1a;需要雙向SSL認證&#x…

解決HTML/JS開發中的常見問題與實用資源

在前端開發過程中&#xff0c;即使是經驗豐富的開發者也會遇到各種小問題。本文將聚焦于兩個常見問題的解決方案&#xff0c;并推薦一些國內可訪問的優質源碼學習網站&#xff0c;幫助開發者提升效率。 一、字符編碼與亂碼問題解決 在HTML和JavaScript開發中&#xff0c;字符編…

SQLI-labs[Part 2]

本篇為SQLI-labs的Write-Up的第二部分包含Level 23- Level 27Level 23 過濾注釋符 字符注入拼接語句發現注釋符沒有生效 應該是被過濾了那只能通過拼接語句來除去后面的影響拼接?id1 or 11?id1%27%20or%20%271%27%271源碼中最后的導致語句閉合 Level 24 字符二次注入成功登錄…

宋紅康 JVM 筆記 Day17|垃圾回收器

一、今日視頻區間 P169-P203 二、一句話總結 GC分類與性能指標&#xff1b;不同的垃圾回收器概述&#xff1b;Serial回收器&#xff1a;串行回收&#xff1b;ParNew回收器&#xff1a;并行回收&#xff1b;Parallel回收器&#xff1a;吞吐量優先&#xff1b;CMS回收器&#xff…

[硬件電路-194]:NPN三極管、MOS-N, IGBT比較

NPN三極管、MOS-N&#xff08;N溝道MOS管&#xff09;和IGBT&#xff08;絕緣柵雙極型晶體管&#xff09;在電子電路設計中各有其獨特的應用場景和優勢&#xff0c;以下從工作原理、特性、應用領域三個維度進行比較&#xff1a;工作原理NPN三極管&#xff1a;結構&#xff1a;由…

【代碼隨想錄day 25】 力扣 46. 全排列

視頻講解&#xff1a;https://www.bilibili.com/video/BV19v4y1S79W/?vd_sourcea935eaede74a204ec74fd041b917810c 文檔講解&#xff1a;https://programmercarl.com/0046.%E5%85%A8%E6%8E%92%E5%88%97.html#%E6%80%9D%E8%B7%AF 力扣題目&#xff1a;https://leetcode.cn/prob…

指針(五)后半

1、 qsort 函數1.1、qsort 函數排列結構體在這里&#xff0c;我們創建結構體類型的數組&#xff0c;用于 qsort 函數的傳參。#include<stdio.h> #include<stdlib.h> #include<string.h>struct Stu//創建結構體變量 {char name[30];int age; };struct Stu arr…

TDengine 特殊選擇函數 MODE() 用戶手冊

MODE 函數用戶手冊 函數定義 MODE(expr)功能說明 MODE() 函數返回指定列中出現頻率最高的值&#xff08;眾數&#xff09;。如果有多個值具有相同的最高頻率&#xff0c;系統會返回其中一個值。該函數會忽略 NULL 值。 算法原理 MODE 函數的計算過程如下&#xff1a; 數據…

智能外骨骼技術應用場景及價格可接受區間分析

一、引言 智能外骨骼機器人融合機械、人工智能和傳感器技術,增強或恢復人體運動能力。2025年,該技術在醫療康復、工業生產、軍事應用和消費市場快速普及。本文分析其應用場景、市場需求、典型產品、價格可接受區間及相關來源,探討普及的關鍵因素。 二、主要應用場景及產品…

Vue模板中傳遞對象或數組時,避免直接使用字面量[]和{}

在 Vue 中&#xff0c;直接在模板中使用 [] 或 {} 作為 prop 值會導致子組件不必要的重新渲染&#xff0c;因為每次父組件渲染時都會創建新的引用。以下是解決方案和最佳實踐&#xff1a; 1. 避免在模板中直接使用字面量 <!-- 避免這樣寫 --> <ChildComponent :items&…

【C++】list容器的模擬實現

目錄 1. 節點(list_node) 的結構 2. 哨兵位頭節點 3. list容器的成員變量 4. 插入/刪除操作 4.1 插入操作&#xff08;insert&#xff09; 4.2 刪除操作&#xff08;erase&#xff09; 5. 迭代器的實現 6. 不同迭代器和const容器的限制 7. 重載operator-> 8. 迭代器…

三大運營商eSIM手機業務開通加速

截至2025年9月11日&#xff0c;中國三大運營商eSIM手機業務開通情況呈現明顯差異化&#xff1a;中國聯通已率先支持eSIM手機業務&#xff0c;但僅限于特定城市和設備&#xff1b;中國移動和中國電信則處于"技術準備就緒&#xff0c;等待政策批復"階段&#xff0c;預計…

基于SpringBoot的足球論壇系統+論文示例參考

1.項目介紹 系統角色&#xff1a;管理員、普通用戶功能模塊&#xff1a;用戶管理、足球賽事、球員信息、推薦話題、帖子信息、周邊商城、訂單信息、系統管理等技術選型&#xff1a;SpringBoot&#xff0c;Vue等 測試環境&#xff1a;idea2024&#xff0c;jdk1.8&#xff0c;mys…

數據庫中悲觀鎖小結

實際上&#xff0c;悲觀并發控制實際上是“先取鎖再訪問”的保守策略&#xff0c;為數據處理的安全提供了保證。但是在效率方面&#xff0c;處理加鎖的機制會讓數據庫產生額外的開銷&#xff0c;還有增加產生死鎖的機會&#xff1b;另外&#xff0c;在只讀型事務處理中由于不會…

結構光三維重建原理詳解(1)

1. 基本原理概述 結構光三維重建&#xff08;Structured Light 3D Reconstruction&#xff09;是一種主動式光學測量方法。其核心思想是&#xff1a; 向物體表面投射一組 已知的、編碼好的光柵/條紋圖案&#xff1b;使用一個或多個攝像機拍攝這些條紋在物體表面的變形情況&…