為了完成課程作業,筆者致力於尋找最簡捷的配置方式。目的是串連三個節點運行簡單的MPI程式。
參考資料:https://www.open-mpi.org , https://blog.csdn.net/kongxx/article/details/52227572 各節點初始化
為了方便後續的SSH串連,這裡設定所有節點具有相同的username(因為 ssh IP等價於 ssh $USER@IP) 。關於建立使用者的部分請參考https://blog.csdn.net/silent56_th/article/details/80033636 。
一個方便後續輸入的可選操作是:在各個節點中通過修改/etc/hosts為其他節點的IP地址映射一個名稱,用於指代。 節點間免密碼SSH串連
詳情參考:https://blog.csdn.net/kongxx/article/details/47046817
簡單的說,是節點A用例如RSA的演算法產生了公私密金鑰做身份認證,節點B通過記錄節點A的公開金鑰,對節點A進行授權。授權完成後,節點A可以不要求輸入密碼直接存取節點B。
理論上只需要其他節點對主節點做授權,筆者為了防止bug,對所有節點之間均做了授權。 Open MPI簡介與編譯
關於MPI以及Open MPI的簡介詳見:https://www.open-mpi.org/video/?category=general
簡單的說是MPI為協議,Open MPI是具體實現。
關於Open MPI的編譯詳見:https://www.open-mpi.org/faq/?category=building#easy-build
簡易步驟為:下載解壓–>configure(--prefix用於指定安裝位置)–> sudo make all install
筆者直接將Open MPI安裝到系統中,所以 --prefix=/user/local,後續也無需設定PATH等系統參數;否則需要將相應位置的bin以及lib路徑加入到 $PATH和 $LD_LIBRARY_PATH中(可以通過 .bashrc設定) 編譯與運行代碼
mpicc命令和 gcc/cc使用方法相似,簡單操作是 mpicc <c_filename> -o <excutable_filename>
單節點執行: mpirun -np <processor_num> <filename>,其中-np指定處理器數目,第一個不可解釋的字串( <filename>)被看作可執行檔名稱。
小叢集執行: mpirun -np <processor_num> --hostfile <hostfile_name> <filename>,其中 <hostfile_name>內指定可用的節點IP地址與slot數。例如筆者的mpi-hosts檔案為:
localhost slots=2slave1 slots=2slave2 slots=2
其中localhost為本地節點,slave1/2是其他兩個節點在主節點中的IP地址指代(於/etc/hosts中設定)