ARMV8 datasheet學習筆記3:AArch64應用級體系結構之Atomicity


1.前言

Atomicity是內存訪問的一個屬性,描述為原子性訪問,包括single-copy atomicity和multi-copy atomicity

2.基本概念

  • observer

可以發起對memory read/write訪問的都是observer

  • Coherent order

全局一致性,即shareability domain中所有的observer觀察到的對同個內存位置的全局的一致的寫入動作(順序);

[1]:屬於同一個shareability domain的observers共享memory space,並且能夠對同一個地址的memory進行操作。

下面我們用一個具體的例子來說明什么是“single total order”。假設系統中有四個cpu core,分別執行同樣的代碼:cpux給一個全局變量A賦值為x,然后不斷對A進行觀察(即load操作)。在這個例子中A分別被四個CPU設定了1、 2、3、4的值,當然,先賦值的操作結果會被后來賦值操作覆蓋,最后那個執行的write操作則決定了A變量最后的賦值。假設一次運行后,cpu 1看到的序列是{1,2},cpu 2看到的序列是{2},cpu 3看到的序列是{3,2},cpu 4看到的序列是{4,2},那么所有的cpu看到的順序都是符合一個全局的順序{3,1,4,2},而各個CPU並沒有能夠觀察到全部的中間過程,但是沒 有關系,至少各個cpu觀察的結果和那個全局順序是一致的(consistent)。如果cpu 1看到的序列是{2,1},那么就不存在一個一致性的全局順序了,也就不是coherent order了

  • Atomicity

是內存訪問的一個屬性,描述為原子性訪問,包括single-copy atomicity和multi-copy atomicity

單核系統上用single-copy atomicity描述內存訪問的原子性,多核系統用multi-copy atomicity描述內存訪問的原子性

  • Single-copy

訪存指令只會訪問一次內存。

[1]:當PE訪問內存的時候,例如load指令,這時候會有數據從memory copy到寄存器的動作,如果該指令的內存訪問只會觸發一次copy的動作,那么就是single-copy。對於加載奇數地址開始的2Byte load指令,其實該指令實際在執行的時候會觸發兩次的copy動作,那么就不是single-copy,而是multi-copy的(注意:這里的multi-copy並非Multi-copy atomicity中的Multi-copy,后文會描述;

  • Single-copy atomic

Single-copy atomicity描述的是單核內存訪問指令操作的原子性,分為兩部分:

(1)  Single-copy atomicity store overlap store

兩個store指令並行操作同一個內存位置,一個store看到的是要么另一個sotre已經執行完畢,要么還沒有執行,不會看到執行的中間結果;

例如:有兩個store操作,分別是A和B,那么A操作會將所有的bits作為一個原子的、不可分割的整體store,且store過程要么是在B store之前,要么是B store之后

(2)  Single-copy atomicity store overlap load

Store和load如果並行執行,則對load而言要么是store之前的結果,要么是store之后的結果,不會看到中間結果(英文與此有出入?)

 

[1]:overlap指的是並行的意思,兩條指令並行;

overlapping byte則指內存操作有重疊的部分。例如加載0x000地址的4-Byte到寄存器和加載0x02地址2-Byte有2個字節的重疊;

原文中"all of the writes from one of the stores ”這里all of the writes是指本次store操作中所涉及的每一個bit,這些bits是一個不可分隔的整體,插入到Coherence order操作序列中

  • Single-copy atomicity規則

某個異常級別的內存訪問遵循如下規則:

(1)對齊的load或者store操作是Single-copy atomicity的。針對byte的內存操作總是Single-copy atomicity的,2個Bytes的load或者store操作如果地址對齊在2上,那么也是Single-copy atomicity的。其他的可以以此類推;

(2)load pair和store pair指令,如果每個load地址都是對齊的,則被視為兩個single-copy atomic read;

(3)Load-Exclusive Pair(加載2個32-bit)指令和Store-Exclusive Pair(寫入2個32-bit數據)指令是Single-copy atomicity的

(4)Load-Exclusive/Store-Exclusive pair(加載/存儲2個64-bit)中的Store-Exclusive執行成功,會將整個內存位置都更新(???)

(5)translation table walks  read a translation table entry是single-copy atomictiy的(指頁表查找過程中讀取一個頁表項是原子的)

(6)向(從)小於等於64bits的浮點或SIMD寄存器load(store)一定數量的數據,如果這些數量的數據被對齊到load(sotre)地址就是single-copy atomicity

(7)向(從)浮點或SIMD寄存器load(store)一個128bit的值,如果load(sotre)地址是64bit對齊的,可以認為是兩個single-copy atomicity

  • Multy-copy

指訪存指令會多次訪問內存,如從奇數地址讀2字節到寄存器

[1]:此與下面的Multy-copy atomicity中的Multy-copy不是一個含義,此處的Multy-copy指的是多次拷貝,Multy-copy atomicity中的Multy-copy指的是多核拷貝的意思,如:系統中有多個CPU core,每一個core都可以對內存系統中的某個特定的地址發起寫入操作,系統中有n個CORE,那么就有可能有n個寄存器到memory的copy動作。

  • Multy-copy atomicity

Multy-copy atomicity定義的是multiprocessing 環境下,多個store操作的順序問題以及多個observer之間的交互問題,與single-copy atomicity不是對立的,是兩個不同的東西。滿足如下條件就認為是multi-copy atomicity:

(1) 系統中對同一個地址的memory的store操作是串行化的,也就是說,對於所有的observer而言,它們觀察到的寫入操作順序就是相同的一個序列。這個串行化要求比較狠,高於coherent的要求(???),也就是說,如果系統中的write操作不是coherent的(多個核上的訪存指令對這個內存位置都是coherent oreder???),那么也就不是Multi-copy atomicity的。

(2)對一個地址進行的load操作會被block,直到對該地址的寫對所有的observer都是可見的(怎么才算可見??)

3. 基本規則

  • Single-copy atomicity規則

某個異常級別的內存訪問遵循如下規則:

(1)對齊的load或者store操作是Single-copy atomicity的。針對byte的內存操作總是Single-copy atomicity的,2個Bytes的load或者store操作如果地址對齊在2上,那么也是Single-copy atomicity的。其他的可以以此類推;

(2)load pair和store pair指令,如果每個load地址都是對齊的,則被視為兩個single-copy atomic read;

(3)Load-Exclusive Pair(加載2個32-bit)指令和Store-Exclusive Pair(寫入2個32-bit數據)指令是Single-copy atomicity的

(4)Load-Exclusive/Store-Exclusive pair(加載/存儲2個64-bit)中的Store-Exclusive執行成功,會將整個內存位置都更新(???)

(5)translation table walks  read a translation table entry是single-copy atomictiy的(指頁表查找過程中讀取一個頁表項是原子的)

(6)向(從)小於等於64bits的浮點或SIMD寄存器load(store)一定數量的數據,如果這些數量的數據被對齊到load(sotre)地址就是single-copy atomicity

(7)向(從)浮點或SIMD寄存器load(store)一個128bit的值,如果load(sotre)地址是64bit對齊的,可以認為是兩個single-copy atomicity

  • Multy-copy atomicity規則

(1)對於normal memory,寫入操作不需要具備Multi-copy atomicity的特性???。

(2)如果是Device類型的memory,並且具備non-Gathering的屬性,所有符合Single-copy atomicity要求的write操作指令也都是Multi-copy atomicity的

(3)如果是Device類型的memory,並且具備Gathering的屬性,寫入操作不需要具備Multi-copy atomicity的特性???

5.參考文檔

[1] DDI0487A_k_armv8_arm_iss10775.pdf

[2] ARMv8之Atomicity

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM