—— 讓你的并行計算飛起來 🚀
1. 簡介??
- ??MPI (Message Passing Interface)??:用于多機分布式并行計算(進程級并行)。
- ??OpenMP??:用于單機多線程并行計算(線程級并行)。
- ??混合編程??:結合 MPI(跨節點) + OpenMP(單節點多線程),最大化并行效率。
本教程涵蓋 ??Windows(MS-MPI)?? 和 ??Linux(OpenMPI)?? 環境配置,并提供測試代碼。
??2. Windows 環境配置(MS-MPI + OpenMP)??
??2.1 安裝 MS-MPI??
-
??下載 MS-MPI??(微軟官方實現):
- MS-MPI v10.1.2(安裝包)
- MS-MPI SDK(開發工具包)
-
??安裝??:
- 先運行?
msmpisetup.exe
(安裝 MPI 運行時) - 再運行?
msmpisdk.msi
(安裝頭文件和庫)
- 先運行?
-
??驗證安裝??:
mpiexec --version # 應輸出 MS-MPI 版本
??2.2 安裝 MinGW-w64(GCC 編譯器)??
-
??下載 MinGW-w64??(帶 OpenMP 支持):
- MinGW-w64(推薦)
- 或使用?MSYS2
-
??配置環境變量??:
- 確保?
gcc
?和?g++
?可用:gcc --version # 檢查是否安裝成功
- 確保?
??2.3 測試 MPI + OpenMP 混合編程??
??示例代碼?mpi_omp_hello.c
??:
#include <mpi.h> #include <omp.h> #include <stdio.h> int main(int argc, char **argv) { MPI_Init(&argc, &argv); int rank, size; MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &size); #pragma omp parallel { int thread_id = omp_get_thread_num(); printf("MPI Rank %d / %d | OpenMP Thread %d\n", rank, size, thread_id); } MPI_Finalize(); return 0; }
編譯 & 運行??:
gcc -fopenmp mpi_omp_hello.c -o mpi_omp_hello.exe -I "C:\Program Files (x86)\Microsoft SDKs\MPI\Include" -L "C:\Program Files (x86)\Microsoft SDKs\MPI\Lib\x64" -lmsmpi mpiexec -n 4 ./mpi_omp_hello.exe
??輸出示例??:
MPI Rank 0 / 4 | OpenMP Thread 0 MPI Rank 0 / 4 | OpenMP Thread 1 MPI Rank 1 / 4 | OpenMP Thread 0 MPI Rank 1 / 4 | OpenMP Thread 1 ...
??3. Linux 環境配置(OpenMPI + OpenMP)??
??3.1 安裝 OpenMPI 和 GCC??
sudo apt update sudo apt install -y openmpi-bin libopenmpi-dev gcc # Ubuntu/Debian sudo yum install -y openmpi gcc # CentOS/RHEL
??3.2 測試 MPI + OpenMP??
??編譯 & 運行??:
gcc -fopenmp mpi_omp_hello.c -o mpi_omp_hello -lmpi mpirun -np 4 ./mpi_omp_hello
??4. 常見問題??
??Q1:?undefined reference to MPI_Init
??
? ??解決方案??:確保編譯時鏈接 MPI 庫(-lmsmpi
?/?-lmpi
)。
??Q2: OpenMP 不生效???
? ??檢查??:
- 編譯時加?
-fopenmp
- 運行時設置線程數:
export OMP_NUM_THREADS=4 # Linux set OMP_NUM_THREADS=4 # Windows
??Q3:?mpiexec
?找不到???
? ??檢查??:
- Windows:確保 MS-MPI 安裝后?
C:\Program Files\Microsoft MPI\Bin
?在?PATH
?環境變量中。 - Linux:確保?
openmpi
?正確安裝。
??5. 總結??
??系統?? | ??MPI 實現?? | ??編譯命令?? | ??運行命令?? |
---|---|---|---|
Windows | MS-MPI | gcc -fopenmp -lmsmpi | mpiexec -n 4 ./program |
Linux | OpenMPI | gcc -fopenmp -lmpi | mpirun -np 4 ./program |
有問題歡迎交流!💬