armv8 memory system

在armv8中,因爲processor的預取,流水線, 以及多線程並行的執行方式,並且armv8-a中,使用的是一種weakly-ordered memory model,性能優化

    不保證program order和execute order一致。多線程

    因此有時須要顯式的執行一些指令,來order本身的代碼。架構

armv8涉及到的優化包括:app

  1) multiple issue of instructions,超流水線技術每一個cycle,都會有多個issue和execute,保證不了各個指令的執行order。dom

  2) out-of-order execution,不少processor,都會對non-dependent的指令,作out-of-order的執行,性能

  3) Speculation,分組預測,在遇到conditional instruction時,判斷condition以前,就會執行以後的instruction。fetch

  4) Speculative loads,預取,在執行上一條指令的同時,將下一條指令的數據,預取到cache中優化

  5) Load and Store optimizations,因爲寫主存的latency很大,processor能夠作不少優化,write-merge,write-buffer等。ui

  6) External memory systems,某些外部device,像DRAM,能夠同時接受不一樣master的req,Transaction可能會被buffered,reordered線程

  7) Cache coherent multi-core,一個cluster中的各個core,對同一個cache的update,看到的順序不會是一致的

  8) Optimizing compilers,編譯器在編譯時的性能優化,可能打亂program order。

 

armv8支持的memory types:Normal memory和Device memory

  Normal memory,主要指RAM,ROM,FLASH等memory,這類memory,processor以及compiler均可以對program作優化,

    processor還能夠增長repeate,reorder,merge的操做。

    在須要固定memory order的狀況下,須要顯式調用barrier operations

    還有一些存在address dependence的狀況,processor必須可以正確處理這些狀況。

  Device memory,一般都是peripheral對應的memory mapped。對於該memory type,processor的約束會不少;

    1) write的次數,processor內部必須與program中的相同;

    2) 不能將兩次的writes,reads,等效爲一個;

    3) 可是對於不一樣的device之間的memory access是不限制order的

    4) speculative是不容許的,對device的memory

    5) 在device memory中execute,也是不容許的;

 

Device memory的幾個attribute

  1) Gather或者non-Gather,多個memory access merge爲同一個single transaction,如兩個byte write merge爲一個halfword write

  2) Reordering,同一個block中的access是否可以reorder。

  3) Early Write Ack,write不寫入device,經過中間buffer以後,即 return ack,是否能夠。

四種device memory

  1) Device nGnRnE,最嚴的約束;

  2) Device nGnRE,容許early

  3) Device nGRE,容許reorder,early

  4) Device GRE,容許gather,reorder,early

    

 

Memory attribute,arm系統中,memory都被分爲各個region,每一個region都有本身的privilege level,memory type,cache policy

  這部分的管理是由MMU,來實現的,各個region都對應其中的一個或幾個block、page。

  對於normal memory,有shareable和cache property;

  對於device memory,老是non-cacheable,outer-shareable,

shareable,用來指定這個location是不是與其餘的core,共用的,share的。share的core之間須要保證coherency

      non-shareable,典型應用在AMP,有本身的獨自cache,

      inner,主要指processor本身的cache,在big-little中,表現爲一個cluster,(仍是取決於具體實現)

      outer,主要指processor外的cache,在big-little中,表現爲兩個cluster,(仍是取決於具體實現)

      system,整個system的master,可能會包含GPU等

    

 

 

ARM架構中,包括幾個barrier instruction,用來force必定的memory order,可是這樣的指令,會減少一些軟件的優化性能;

  因此最好在須要的時候,再加這樣的指令。

  1) Instruction Synchronization Barrier(ISB),保證當前的pipeline中沒有數據,ISB指令以前的指令都已經執行結束

      多用在context-switching code,cache control等。

  2) Data Memory Barrier(DMB),保證全部data access的指令,load,store,在DMB指令以前都已經執行結束

      並不妨礙instruction的fetch。

  3) Data Synchronization Barrier(DSB),等待某一類的指令結束,包括data access,instruction fetch。還會等待全部的

      由該processor發起的cache,tlb,BP maintenance操做都已經完成,

  DSB指令會直接stall processor,DMB不會,instruction仍然是能夠執行的

     

  DMB和DSB,均可以加params,指定某些domain,load/store

    

    store-store,load-load,any-any指相應的亂序類型

 

one-way barriers,AARCH64提供了一組顯式指定before、after的指令,Load-Acquire,Store-Rlease,

  Load-Acquire(LDAR),全部的load,store,完成以後,纔開始執行,LDAR以後的指令開始執行。

  Store-Release(STLR),全部的load,store,在STLR執行以後,纔開始執行。

    

相關文章
相關標籤/搜索