在Ubuntu上安裝和配置MPI環(huán)境的詳細(xì)步驟
1. 安裝 OpenMPI
首先,確保系統(tǒng)是最新的,并安裝 OpenMPI。
- 更新軟件包索引:
sudo apt update
- 安裝 OpenMPI: 使用 Ubuntu 的包管理器安裝 OpenMPI:
sudo apt install openmpi-bin openmpi-common libopenmpi-dev
這個(gè)命令會(huì)安裝 OpenMPI 的二進(jìn)制文件、公共文件和開發(fā)庫(kù)(
libopenmpi-dev提供了編譯 MPI 程序所需的頭文件和庫(kù)文件)。檢查安裝是否成功: 安裝完成后,檢查 OpenMPI 是否安裝成功:
mpirun --version
- 你應(yīng)該會(huì)看到類似下面的輸出,顯示 OpenMPI 的版本信息:
mpirun (Open MPI) 4.1.1 Report bugs to http://www.open-mpi.org/community/help/
2. 配置 OpenMPI 環(huán)境
環(huán)境變量設(shè)置(可選): 通常,MPI 二進(jìn)制文件會(huì)自動(dòng)添加到
PATH中,如果你安裝了多個(gè) MPI 版本或者想確保正確的路徑配置,可以手動(dòng)設(shè)置環(huán)境變量。編輯你的
~/.bashrc文件,添加以下幾行:
export PATH=/usr/lib/openmpi/bin:$PATH export LD_LIBRARY_PATH=/usr/lib/openmpi/lib:$LD_LIBRARY_PATH
- 使更改生效: 保存并關(guān)閉文件,然后執(zhí)行以下命令使其生效:
source ~/.bashrc
3. 編寫 MPI 程序
接下來(lái),我們來(lái)編寫一個(gè)簡(jiǎn)單的 MPI 程序,以確保安裝和配置正確。
創(chuàng)建一個(gè)名為
hello_mpi.c的文件:
// hello_mpi.c
#include <mpi.h>
#include <stdio.h>
int main(int argc, char** argv)
{
MPI_Init(&argc, &argv); // 初始化MPI環(huán)境
int world_rank;
MPI_Comm_rank(MPI_COMM_WORLD, &world_rank); // 獲取當(dāng)前進(jìn)程的Rank
int world_size;
MPI_Comm_size(MPI_COMM_WORLD, &world_size); // 獲取總進(jìn)程數(shù)
printf("Hello world from processor %d out of %d processors\n", world_rank, world_size);
MPI_Finalize(); // 結(jié)束MPI環(huán)境
return 0;
}- 編譯 MPI 程序: 使用
mpicc(OpenMPI 的 C 編譯器封裝器)來(lái)編譯 MPI 程序:
mpicc hello_mpi.c -o hello_mpi
- 運(yùn)行 MPI 程序: 使用
mpirun或mpiexec來(lái)運(yùn)行 MPI 程序。指定使用的進(jìn)程數(shù)量,例如:
mpirun -np 4 ./hello_mpi
該命令使用 4 個(gè)進(jìn)程運(yùn)行程序。你應(yīng)該會(huì)看到類似以下的輸出:
Hello world from processor 0 out of 4 processors Hello world from processor 1 out of 4 processors Hello world from processor 2 out of 4 processors Hello world from processor 3 out of 4 processors
4. 運(yùn)行多節(jié)點(diǎn)的 MPI 程序(可選)
如果你有多臺(tái)機(jī)器并希望在集群上運(yùn)行 MPI 程序,步驟會(huì)稍微復(fù)雜一些。
4.1 配置免密 SSH 登錄
生成 SSH 密鑰(如果沒(méi)有):
ssh-keygen -t rsa -b 2048
按
Enter以默認(rèn)設(shè)置生成密鑰。復(fù)制 SSH 密鑰到遠(yuǎn)程節(jié)點(diǎn): 使用
ssh-copy-id將密鑰復(fù)制到其他機(jī)器上:
ssh-copy-id user@remote_host
現(xiàn)在你可以從主機(jī)通過(guò) SSH 無(wú)需密碼登錄遠(yuǎn)程主機(jī)了。
4.2 運(yùn)行多節(jié)點(diǎn) MPI 程序
創(chuàng)建主機(jī)文件: 創(chuàng)建一個(gè)包含節(jié)點(diǎn) IP 地址或主機(jī)名的主機(jī)文件,例如
hosts文件:
192.168.1.1 slots=2 192.168.1.2 slots=2
其中
slots=2表示每個(gè)節(jié)點(diǎn)上運(yùn)行 2 個(gè)進(jìn)程。運(yùn)行 MPI 程序: 使用
mpirun,指定主機(jī)文件和進(jìn)程數(shù):
mpirun --hostfile hosts -np 4 ./hello_mpi
這會(huì)在多個(gè)節(jié)點(diǎn)上啟動(dòng) 4 個(gè) MPI 進(jìn)程。
5. MPI 編譯器封裝器
MPI 提供了編譯器封裝器,使編譯 MPI 程序更簡(jiǎn)單:
- C 編譯器封裝器:
mpicc - C++ 編譯器封裝器:
mpicxx - Fortran 編譯器封裝器:
mpifort
這些封裝器自動(dòng)處理 MPI 頭文件和庫(kù)的鏈接,可以直接用它們來(lái)編譯 MPI 程序。
6. 常用 MPI 命令
mpicc:用于編譯 MPI C 程序。mpirun:用于運(yùn)行 MPI 程序,支持多節(jié)點(diǎn)、多進(jìn)程執(zhí)行。mpiexec:與mpirun類似,是 MPI 標(biāo)準(zhǔn)中指定的命令。ompi_info:查看 OpenMPI 的配置信息。
7. 驗(yàn)證 MPI 環(huán)境
你可以使用 OpenMPI 自帶的測(cè)試工具來(lái)確認(rèn) MPI 環(huán)境是否配置正確:
mpirun --host localhost -np 4 hostname
該命令將在本地機(jī)器上運(yùn)行 4 個(gè) MPI 進(jìn)程,并輸出機(jī)器名稱。如果環(huán)境配置正確,應(yīng)該會(huì)輸出本地主機(jī)名 4 次。
總結(jié)
- 安裝 OpenMPI:使用 Ubuntu 的包管理器安裝 OpenMPI 工具和庫(kù)。
- 配置環(huán)境:確保 MPI 的二進(jìn)制文件在 PATH 中,并設(shè)置相關(guān)環(huán)境變量。
- 編寫和編譯 MPI 程序:通過(guò) mpicc 編譯,并使用 mpirun 運(yùn)行 MPI 程序。
- 多節(jié)點(diǎn)運(yùn)行(可選):配置免密 SSH 登錄,使用主機(jī)文件在多臺(tái)機(jī)器上運(yùn)行 MPI 程序。
以上就是在Ubuntu上安裝和配置MPI環(huán)境的詳細(xì)步驟的詳細(xì)內(nèi)容,更多關(guān)于Ubuntu安裝和配置MPI的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
詳解Centos/Linux下調(diào)整分區(qū)大?。ㄒ詇ome和根分區(qū)為例)
本篇文章主要介紹了Centos/Linux下調(diào)整分區(qū)大?。ㄒ詇ome和根分區(qū)為例),具有一定的參加價(jià)值,有需要的同學(xué)可以了解一下2017-06-06
Linux網(wǎng)絡(luò)配置和監(jiān)控命令總結(jié)
本文介紹了Linux系統(tǒng)中常用的網(wǎng)絡(luò)配置和監(jiān)控命令,包括ifconfig、hostname、route、netstat、ss、lsof、ping、traceroute、nslookup等命令的使用方法和作用,適用于系統(tǒng)管理員在日常管理和故障排查中的網(wǎng)絡(luò)操作2024-09-09
Linux運(yùn)維基礎(chǔ)系統(tǒng)磁盤管理教程
這篇文章主要介紹了Linux運(yùn)維基礎(chǔ)系統(tǒng)磁盤管理教程,附含詳細(xì)的源碼示例,有需要的朋友可以借鑒參考下,希望可以有所幫助,祝大家同學(xué)習(xí)共進(jìn)步2021-09-09
linux grep查找的結(jié)果中顯示匹配行的上下行內(nèi)容方式
這篇文章主要介紹了linux grep查找的結(jié)果中顯示匹配行的上下行內(nèi)容方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11

