0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Arm架構下的Synchronization概述和案例分析

安芯教育科技 ? 來源:安芯教育科技 ? 2023-05-11 14:45 ? 次閱讀

本文選自極術專欄“Arm服務器”,文章將帶你了解Arm架構下的Synchronization專業(yè)知識。

一、簡介

隨著近年來Arm服務器的應用越來越廣泛,越來越多的云廠商開始提供基于Arm架構的云實例,越來越多的開發(fā)人員正在為Arm平臺編寫軟件。

Synchronization是軟件遷移和優(yōu)化過程中的熱門話題?;贏rm架構的服務器通常具有比其他架構更多的CPU內核,對Synchronization的深入理解顯得更為重要。

Arm和X86 CPU之間最顯著的區(qū)別之一是它們的內存模型:Arm架構具有與x86架構的TSO(Total Store Order)模型不同的弱內存模型。不同的內存模型可能會導致程序在一種架構上運行良好,但在另一種架構上會遇到性能問題或錯誤。Arm服務器更寬松的內存模型允許更多的編譯器和硬件優(yōu)化以提高系統(tǒng)性能,但代價是它更難理解并且可能更容易編寫錯誤代碼。

我們創(chuàng)作此文檔是為了分享有關Arm架構的Synchronization專業(yè)知識,可以幫助其他架構的開發(fā)人員在Arm系統(tǒng)上進行開發(fā)。

二、Armv8-A架構上的Synchronization方法

本文檔首先介紹了Armv8-A架構上的Synchronization相關知識,包括原子操作、Arm內存順序和數(shù)據(jù)訪問屏障指令。

2.1 原子操作

鎖的實現(xiàn)要求原子訪問,Arm架構定義了兩種類型的原子訪問:

Load exclusive and store exclusive

Atomic operation, which is introduced in armv8.1-a large system extension (LSE)

2.1.1 Exclusive load and store

LDREX/LDXR - The load exclusive instruction performs a load from an addressed memory location, the PE (e.g. the CPU) also marks the physical address being accessed as an exclusive access. The exclusive access mark is checked by store exclusive instructions.

STREX/STXR - The store exclusive instruction tries to a value from a register to memory if the PE (e.g. the CPU) has exclusive access to the memory address, and returns a status value of 0 if the store was successful, or of 1 if no store was performed.

2.1.2 LSE Atomic operation

LDXR/STXR使用了try and test機制,LSE不一樣,它直接強制原子訪問,主要有如下指令:

Compare and Swap instructions, CAS, and CASP. These instructions perform a read from memory and compare it against the value held in the first register. If the comparison is equal, the value in the second register is written to memory. If the write is performed, the read and write occur atomically such that no other modification of the memory location can take place between the read and write.

Atomic memory operation instructions, LD, and ST, whereis one of ADD, CLR, EOR, SET, SMAX, SMIN, UMAX, and UMIN. Each instruction atomically loads a value from memory, performs an operation on the values, and stores the result back to memory. The LDinstructions save the originally read value in the destination register of the instruction.

Swap instruction, SWP. This instruction atomically reads a location from memory into a register and writes back a different supplied value back to the same memory location.

2.2 Arm內存順序

Arm架構定義了一種弱內存模型,內存訪問可能不會按照代碼順序:

f3f40e8c-efc5-11ed-90ce-dac502259ad0.png

2.3 Arm數(shù)據(jù)訪問屏障指令

Arm架構定義了屏障指令來保證內存訪問的順序。

DMB– Data Memory Barrier
Explicit memory accesses before the DMB are observed before any explicit access after the DMB

Does not guarantee when the operations happen, just guarantee the order

LDR X0, [X1] ;Must be seen by memory system before STR

DMB SY

ADD X2, #1 ; May be executed before or after memory system sees LDR

STR X3, [X4] ;Must be seen by memory system after LDR

DSB– Data Synchronization Barrier
A DSB is more restrictive than a DMB

Use a DSB when necessary, but do not overuse them

No instruction after a DSB will execute until:

All explicit memory accesses before the DSB in program order have completed

Any outstanding cache/TLB/branch predictor operations complete

DC ISW ; Operation must have completed before DSB can complete

STR X0, [X1] ; Access must have completed before DSB can complete

DSB SY

ADD X2, X2, #3 ;Cannot be executed until DSB completes

DMB和DSB是雙向柵欄,對兩個方向都限制,Armv8-a也設計了一種單向柵欄:load-acquire和store-release機制,只在一個方向上做限制。

Load-Acquire (LDAR)

All accesses after the LDAR are observed by memory system after the LDAR.

Accesses before the LDAR are not affected.

f412ad92-efc5-11ed-90ce-dac502259ad0.png

Store-Release (STLR)

All accesses before the STLR are observed by memory system before the STLR.

Accesses after the STLR are not affected.

f424103c-efc5-11ed-90ce-dac502259ad0.png

三、C++內存模型

有了語言層面的內存模型,對于大多數(shù)情況,開發(fā)者不需要去寫依賴于具體架構的匯編代碼,而只需要借助于良好設計的語言層面的內存模型來編寫高質量代碼,不必擔心架構差異。


C++ memory model:
https://en.cppreference.com/w/cpp/header/atomic

f439ac08-efc5-11ed-90ce-dac502259ad0.png

我們做了一個C++內存模型與Armv8-A實現(xiàn)之間的映射:

f4531328-efc5-11ed-90ce-dac502259ad0.png

四、總結

在白皮書中,為幫助讀者更好地理解,我們選取了三個典型案例進行深入分析。由于與Synchronization相關的編程非常復雜,因此我們必須仔細權衡其正確性和性能。

我們建議首先使用較重的屏障指令保證邏輯的正確性,然后通過移除一些冗余屏障或在必要時切換到較輕的屏障來繼續(xù)提高性能。對Arm內存模型和相關指令的深入理解,是對實現(xiàn)準確和高性能的Synchronization編程非常有必要的。

在附錄部分,我們還介紹了內存模型工具(The litmus test suite),它可以幫助理解內存模型并在各種架構上驗證程序。

關于以上內容更完整的講解,請參考“Arm架構下的Synchronization概述和案例分析白皮書”。

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • ARM
    ARM
    +關注

    關注

    134

    文章

    9027

    瀏覽量

    366484
  • 內核
    +關注

    關注

    3

    文章

    1360

    瀏覽量

    40185
  • cpu
    cpu
    +關注

    關注

    68

    文章

    10804

    瀏覽量

    210839
  • 服務器
    +關注

    關注

    12

    文章

    8958

    瀏覽量

    85085
  • 編譯器
    +關注

    關注

    1

    文章

    1617

    瀏覽量

    49015

原文標題:Arm架構下的Synchronization概述和案例分析白皮書|附下載

文章出處:【微信號:Ithingedu,微信公眾號:安芯教育科技】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    ARM架構是什么

    從單片機轉到ARM,主要需要學習ARM架構ARM相比單片機多了一些外設和總線。在僅僅是裸奔的情況,如果熟悉了
    發(fā)表于 07-01 09:23

    ARM架構

    ARM架構ARM架構如圖所示,ARM公司只提供內核技術,而其他外設則為芯片商設計并使用,ARM
    發(fā)表于 08-04 06:18

    介紹一ARM架構

    微型計算機(PC計算機)來說,就是降低中央處理器的頻率和規(guī)格,降低存儲器空間,這樣的改變,使之廣泛的運用在各種儀器等電子產(chǎn)品中當前,X86和ARM架構是公認的在商業(yè)化進程中表現(xiàn)最優(yōu)秀的兩大架構。之前
    發(fā)表于 11-25 08:51

    CMSIS軟件架構概述?

    目錄CMSIS軟件架構庫文件說明CMSIS軟件架構CMSIS概述? ? ?CMSIS軟件架構由四層:用戶應用層、操作系統(tǒng)及中間件接口層、CMSIS層和硬件層? ? ?由三部分構成核內外
    發(fā)表于 12-22 07:34

    介紹Armv8-A架構上的Synchronization相關知識

    1、Arm架構Synchronization概述和案例分析
    發(fā)表于 07-06 17:19

    ARM架構同步概述及案例分析

    本白皮書的目的是分享有關ARM架構的同步知識。 本文檔的目標讀者是從事ARM?架構同步工作的人員。 [警告]當我們處理鎖定優(yōu)化時,我們必須非常小心正確性。 同步導致的錯誤通常很難找出根
    發(fā)表于 08-21 07:51

    Essential synchronization tech

    Essential synchronization technologies in PXI:Many test and measurement applications
    發(fā)表于 07-23 22:43 ?9次下載

    Converter Synchronization Prov

    A novel technique allows synchronization ofpower converters with internal timing capacitorsand supports features like programmable deadtime.
    發(fā)表于 06-28 14:12 ?13次下載

    ARM的發(fā)展史以及架構解析

    本文從ARM的發(fā)展歷史著手,以S3C2440為例與51單片機進行對比分析,詳細解析了ARM架構。
    發(fā)表于 04-22 11:00 ?1.6w次閱讀

    什么叫arm架構_X86架構ARM架構有什么區(qū)別

    本文首先介紹了arm架構的概念,其次介紹了ARM架構圖與ARM的技術實現(xiàn),最后介紹了X86架構
    發(fā)表于 04-24 08:45 ?8.7w次閱讀
    什么叫<b class='flag-5'>arm</b><b class='flag-5'>架構</b>_X86<b class='flag-5'>架構</b>與<b class='flag-5'>ARM</b><b class='flag-5'>架構</b>有什么區(qū)別

    ARM架構的應用領域的發(fā)展分析

    ARM架構是一個32位精簡指令集(RISC)處理器架構,其廣泛地使用在許多嵌入式系統(tǒng)設計。由于節(jié)能的特點,ARM處理器非常適用于移動通訊領域,
    的頭像 發(fā)表于 05-22 06:04 ?5347次閱讀

    ARM7TDMI 調試架構分析

    設計中,微處理器內核不能直接從芯片外圍訪問,這增加了調試系統(tǒng)的問題。本應用筆記描述了 ARM7TDMI 調試架構如何克服這個問題以及使用這種方法的優(yōu)勢。 ARM 調試架構——
    的頭像 發(fā)表于 06-18 16:42 ?2512次閱讀
    <b class='flag-5'>ARM</b>7TDMI 調試<b class='flag-5'>架構</b><b class='flag-5'>分析</b>

    Arm架構Synchronization概述和案例分析

    DMB和DSB是雙向柵欄,對兩個方向都限制,Armv8-a也設計了一種單向柵欄:load-acquire和store-release機制,只在一個方向上做限制。
    發(fā)表于 07-07 09:19 ?1071次閱讀

    Arm架構科普解讀 Arm架構的底層邏輯和Arm架構的頂層設計

    本文主要探討了 Arm 架構的底層邏輯,介紹了Arm 架構的頂層設計;以處理器核心架構為基礎,以系統(tǒng)架構
    的頭像 發(fā)表于 02-06 05:33 ?5943次閱讀
    <b class='flag-5'>Arm</b><b class='flag-5'>架構</b>科普解讀  <b class='flag-5'>Arm</b><b class='flag-5'>架構</b>的底層邏輯和<b class='flag-5'>Arm</b><b class='flag-5'>架構</b>的頂層設計

    arm架構和x86架構區(qū)別 linux是x86還是arm

    、ARM架構和x86架構概述 1.1 ARM架構 ARM
    的頭像 發(fā)表于 01-30 13:46 ?1.6w次閱讀