查看單個文章
舊 2011-10-30, 12:29 PM   #62 (permalink)
米奇
列管會員
榮譽勳章
UID - 262935
在線等級: 級別:100 | 在線時長:10579小時 | 升級還需:26小時級別:100 | 在線時長:10579小時 | 升級還需:26小時級別:100 | 在線時長:10579小時 | 升級還需:26小時級別:100 | 在線時長:10579小時 | 升級還需:26小時級別:100 | 在線時長:10579小時 | 升級還需:26小時級別:100 | 在線時長:10579小時 | 升級還需:26小時級別:100 | 在線時長:10579小時 | 升級還需:26小時級別:100 | 在線時長:10579小時 | 升級還需:26小時級別:100 | 在線時長:10579小時 | 升級還需:26小時級別:100 | 在線時長:10579小時 | 升級還需:26小時
註冊日期: 2007-03-03
文章: 10025
精華: 0
現金: 6807 金幣
資產: 118863 金幣
預設 承迪西的解惑...

觀念的分享

NUMA (Non-Uniform Memory Access) 的設計簡化了匯流排的複雜程度,
NUMA 把系統切成數個節點 (node),每個處理器及記憶體就位在某一個節點上,當處理器存取同一個節點的記憶體時,可以有較高的存取速度;而存取其他節點的記憶體時,就需要透過節點間的資料傳遞,會耗費較多時間。

http://img847.imageshack.us/img847/9485/201012201508001.gif

作業系統中為了提高記憶體存取的效率,會針對硬體的 NUMA 配置來設定記憶體存取的策略 (policy),並提供 NUMA 相關的程式介面 (API) 來查詢系統 NUMA 配置和修改存取策略。

以 GNU Linux 為例,作業系統的核心 (kernel) 在2.6版後,就會依據硬體架構的 NUMA 設計,進行記憶體的配置,並提供 NUMA 相關的系統呼叫函式 (system call) 供程式使用;在 /proc 這個程序虛擬檔案系統 (proc file system) 裡,也有 numa_maps 檔案可以查詢某個程序 (process) 的記憶體配置。另外也有 numactl 指令,可以查詢系統的 NUMA 狀況及改變記憶體配置的策略。

http://img818.imageshack.us/img818/371/201012201508002.gif

因為 NUMA 架構的影響,當利用共享記憶體進行需要資料交換的平行計算時,如果進行計算的執行緒在不同節點的核心的話,共享記憶體存取的效率就會下降,所以需要了解每個執行緒是被那一個核心所執行。在 Linux 的環境中,要觀察目前正在執行的程式狀態可以使用 top 指令,配合-H參數可以顯示所有的執行緒,進入 top 指令的介面後,打開 Last used CPU 的資訊,就可以了解每一個執行緒是被那一個核心執行的。
參考 numactl 指令得到的 NUMA 架構資訊,可以知道每一個核心所屬的節點和每個節點的記憶體配置,利用這些資訊就能規劃執行緒與核心的分配。

http://img818.imageshack.us/img818/2613/201012201508003.jpg

進一步對 NUMA 了解,可參考此文
http://technet.microsoft.com/zh-tw/l.../ms345345.aspx

本文參考文章
周秉誼 / 臺灣大學計算機及資訊網路中心作業管理組碩士後研究人員
http://www.cc.ntu.edu.tw/chinese/epa...01220_1508.htm
米奇 目前離線  
送花文章: 33547, 收花文章: 8703 篇, 收花: 40416 次
回覆時引用此帖
有 5 位會員向 米奇 送花:
86449 (2011-10-31),a471 (2011-10-30),getter (2011-10-30),K22514 (2011-10-30),ppp0600 (2011-10-30)
感謝您發表一篇好文章