OpenMPI 源碼學習

參考:關於OpenMPI的代碼閱讀指導太難找了,直接讀真的是有些力不從心,後來發現官網就有,不過版本有點舊,但是不影響。

可先參考這個,http://www.aosabook.org/en/openmpi.html

博客的內容主要參考:https://www.open-mpi.org/video/?category=internals#Cisco_JeffSquyres

1. MPI 概述

  • 頂層的網絡API
    • 將底層傳輸抽象出來
    • Simple things are simple
  • 對高性能友好
    • 超低延遲傳輸
    • rapid ascent to wire-rate bandwith 快速上升到線速帶寬
  • 通常用於高性能領域但也是一個非常成熟的IPC API

2. 版本信息

  • 規則:..
  • = 奇數 新特性系列/ 偶數 穩定版
  • 1.5->1.6在一個分支,並且API兼容

3. 構建和安裝OpenMPI

  • 用戶構建:

    • 和其他開源軟件差不多make,install
    • 時間同步的網絡文件系統
    • 提示:保存構建日誌
    2>&1  | tee xx.log
    • –with-verbs 選項
  • 開發者構建:

    • 需要更多依賴,automake之類的
    • 不要覆蓋系統安裝的庫,另開一個文件夾
    • 用Autotools構建,*.pl
    • 一般情況下不需要更改autogen,除非更改版本,configure.ac,*.m4等構建文件
    • Debug 模式構建:如果./configure 監測到.git .svn之類的文件夾,自動激活debug構建
    • 會導致性能降低
    • configure
    • 也不用每次都run,除非更改了autogen或者添加或者移除一些框架和插件
    • make
    • 可以單獨make模塊
    • 有一些不被安裝的模塊
    • 自動生成的config.h
    • 頭文件
    • libtool convenience 庫

4. OpenMPI 代碼架構

4.1 概覽

  • 第三方庫
    • hardware locality (hwloc),服務器拓撲/局部性
    • libevent,文件描述符,計時器,信號事件引擎,狀態機
    • libltdl
    • VampirTrace
  • 大部分由C構成74% ohloh.net
  • 4 space tabs no tabs
  • 定值在==左邊 NULL==foo
  • 不建議C++
  • 命名規則:前綴規則
    • 基本按照模塊文件夾順序命名
    • typedef 來申明結構體( _t結尾) 和函數指針( _fn_t結尾)

4.2 抽象層架構

  • 抽象層架構:

    • OMPI
    • Public MPI API
    • 後端MPI語義和支持邏輯
    • ORTE
    • No knowledge of MPI
    • 並行運行系統支持上層
      • 啓動,監控每個進程
      • 將單獨的進程組合成jobs
    • 發送 stdin/stdout/stderr
    • OPAL
    • single process 語義 only
    • 可移植的系統級別功能:atomic,ip interfaces,hwloc
    • 基本工具 (linked lists)
    • glue code
    • 自頂向下不可逆

4.3 插件架構

  • 每個上述project結構都是
    • main/ core code
    • components (a.k.a. “plugins”)
    • frameworks
  • MCA(Modular Component Architecture) 是OpenMPI中非常關鍵的一個概念,可以理解爲模塊,每個模塊下有許多插件Components,即插即用,當一個Component和資源鏈接起來就成了一個Module,可以理解爲C++中的一個實例,而Component是一個類。

  • OpenMPI 是由Frameworks組成的一個複雜的工程

5. Run-Time 參數

6. Common Code 概覽

7. 子項目 Hardware Locality (hwloc)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章