什麼是NUMA(非均勻記憶體存取)

Non-Uniform Memory Access 的縮寫。有離核心近與離核心遠的記憶體,存取遠處記憶體需要較長時間的架構。將資料與執行緒放在同一側會比較快。

日文名稱: NUMA

「NUMA(非均勻記憶體存取)」出現在3領域的4道練習題中(多核心與同步, 效能評估與效能剖析, DRAM等)。

這個名詞所屬的領域: 多核心與同步

練習NUMA(非均勻記憶體存取)的題目

關於NUMA(非均勻記憶體存取)系統,下列說明何者正確?

  1. A所有核心都能以相同的時間存取所有記憶體
  2. B有離核心近的記憶體與遠的記憶體,存取遠處的記憶體需要較多時間
  3. C各核心只能讀取自己的記憶體,無法使用其他核心的記憶體
查看答案與解析

正確答案:B. 有離核心近的記憶體與遠的記憶體,存取遠處的記憶體需要較多時間

在具有多個CPU插槽的伺服器等系統中,各插槽有直接連接的記憶體,而存取其他插槽的記憶體則要經過插槽之間的連線。因此,遠處的記憶體比近處的記憶體慢,頻寬也較小。所有記憶體在單一位址空間中看起來是一體的,所以程式可以直接運作,但把資料與執行緒放在同一側可以提升效能。

在Linux的NUMA系統中常用的首次接觸(first touch)策略(將頁面放在第一次寫入該頁面的執行緒所在節點的記憶體),下列關於需要注意之處的說明何者正確?

  1. A首次接觸會把頁面放在隨機的節點
  2. B在呼叫malloc的時間點,所有頁面的放置位置就已決定
  3. C只用一個執行緒將大型陣列初始化為0的話,整個陣列會全部放在同一個節點,其他節點的執行緒就得使用遠處的記憶體
查看答案與解析

正確答案:C. 只用一個執行緒將大型陣列初始化為0的話,整個陣列會全部放在同一個節點,其他節點的執行緒就得使用遠處的記憶體

僅以malloc配置並不會分配實體頁面,而是在第一次寫入時發生的分頁錯誤(page fault)中,將頁面放在該執行緒所在節點的記憶體。因此,若以一個執行緒進行初始化,整個陣列都會集中在那個節點,在平行運算時,各執行緒負責的部分大多會落在遠處的記憶體。若初始化也以與運算相同的分工平行進行,各部分就會被放在負責它的執行緒附近。

解析中的「NUMA(非均勻記憶體存取)」

出現「NUMA(非均勻記憶體存取)」的題目(4題)

  1. 關於NUMA(非均勻記憶體存取)系統,下列說明何者正確?
  2. 在Linux的NUMA系統中常用的首次接觸(first touch)策略(將頁面放在第一次寫入該頁面的執行緒所在節點的記憶體),下列關於需要注意之處的說明何者正確?
  3. 在多核心或NUMA系統上測量效能時,有時會將執行緒固定在特定的核心上(設定親和性,affinity),其理由下列何者正確?
  4. 在現今多數電腦用處理器中,控制DRAM的記憶體控制器位於何處?

相關名詞

統一記憶體(Unified memory) 互斥鎖(Mutex) 比較並交換(Compare-and-swap) 目錄式一致性(Directory-based coherence) 交易式記憶體(Transactional memory) 死結(Deadlock) 自旋鎖(Spinlock) 屏障同步(Barrier synchronization) 原子指令(Atomic instruction) 記憶體一致性模型(Memory consistency model)

前往名詞解釋列表