Computer Science
安裝 Microsoft MPI with vscode in Windows
On this page
安裝 Microsoft MPI
With vscode in Windows
- 點擊官網連結,並點擊 MS-MPI 下載,點擊 MS-MPI v10.1.3,導至下載畫面,點擊 Download,選取兩個 File,兩個都要下載喔~~

- 將下載的兩個檔案點開執行

打開 cmd 輸入指令
set MSMPI,會看到 MPI 設定的環境變數,表示安裝有成功set MSMPI MSMPI_BENCHMARKS=C:\Program Files\Microsoft MPI\Benchmarks\ MSMPI_BIN=C:\Program Files\Microsoft MPI\Bin\ MSMPI_INC=C:\Program Files (x86)\Microsoft SDKs\MPI\Include\ MSMPI_LIB32=C:\Program Files (x86)\Microsoft SDKs\MPI\Lib\x86\ MSMPI_LIB64=C:\Program Files (x86)\Microsoft SDKs\MPI\Lib\x64\接下來打開 vscode 寫下測試程式,這時
#include <mpi.h>可能會有紅底線表示他找不到此 header 檔#include <mpi.h> #include <stdio.h> int main(int argc, char** argv) { // Initialize the MPI environment MPI_Init(&argc, &argv); // Get the number of processes int world_size; MPI_Comm_size(MPI_COMM_WORLD, &world_size); // Get the rank of the process int world_rank; MPI_Comm_rank(MPI_COMM_WORLD, &world_rank); // Get the name of the processor char processor_name[MPI_MAX_PROCESSOR_NAME]; int name_len; MPI_Get_processor_name(processor_name, &name_len); // Print off a hello world message printf("Hello world from processor %s, rank %d out of %d processors\n", processor_name, world_rank, world_size); // Finalize the MPI environment. MPI_Finalize(); return 0; }在
.vscode底下的c_cpp_properties.json把 MPI 的 Include 加入裡面,也就是MSMPI_INC此環境變數後面的路徑,大概會長底下這樣,可以注意有高亮的那幾行(7, 14),這兩行會根據大家路徑放置不相同,而有所不同,這樣紅底線應該就沒有了
{ "configurations": [ { "name": "Win32", "includePath": [ "${workspaceFolder}/**", "C:\\Program Files (x86)\\Microsoft SDKs\\MPI\\Include" ], "defines": [ "_DEBUG", "UNICODE", "_UNICODE" ], "compilerPath": "C:\\mingw64\\bin\\gcc.exe", "cStandard": "c11", "cppStandard": "gnu++14", "intelliSenseMode": "windows-gcc-x86" } ], "version": 4 }接下來就可以來編譯執行程式了
編譯指令
gcc hello.c -o hello -I $MSMPI_INC -L $MSMPI_LIB64 -l msmpi$MSMPI_INC環境變數如果找不到,可以寫絕對路徑,可以參考第三步所印出的東西$MSMPI_LIB64環境變數如果找不到,可以寫絕對路徑,可以參考第三步所印出的東西- 會發生抓不到環境變數的原因有可能是因為使用了 powershell,而他讀取路徑的方式使用
\辨別的,而不是/,如果上面的環境變數$MSMPI_INC和$MSMPI_LIB64印出來的是/可以更該為\
- 會發生抓不到環境變數的原因有可能是因為使用了 powershell,而他讀取路徑的方式使用
- 我在編譯的時候還有一件很特別的事,我雖然找的到 library 的路徑,但是沒有讀到
msmpi.lib,目前方法是把msmpi.lib直接放在我的檔案底下,然後在引入 library 的時候用相對路徑指定當前位置,如:-L ".",然後就有找到了
執行指令
mpiexec -n 3 hello.exe- 指令裡面的 3 表示有三個 processes 處理來這個程式
Debug
- 檢查 gcc 版本,建議下載底下提供網址的版本
可以利用
gcc --version檢查 gcc 版本,不要太舊,可能會有 library 或 include 不相容我是下載這個版本供參考

下載後解開壓縮檔,在系統環境變數上設定路徑,路徑要到資料夾內的
binTerminal 重新開啟後,再次測試
gcc --version查看版本gcc --version gcc.exe (MinGW-W64 x86_64-ucrt-posix-seh, built by Brecht Sanders) 12.3.0 Copyright (C) 2022 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.Note: 如果有留之前的 gcc 且環境變數路徑設定在新版的 gcc 之前,
gcc --version可能還是會抓到舊的,可以調整一下順序
Test MPI code
#include <mpi.h>
#include <stdio.h>
int main(int argc, char** argv) {
// Initialize the MPI environment
MPI_Init(&argc, &argv);
// Get the number of processes
int world_size;
MPI_Comm_size(MPI_COMM_WORLD, &world_size);
// Get the rank of the process
int world_rank;
MPI_Comm_rank(MPI_COMM_WORLD, &world_rank);
// Get the name of the processor
char processor_name[MPI_MAX_PROCESSOR_NAME];
int name_len;
MPI_Get_processor_name(processor_name, &name_len);
// Print off a hello world message
printf("Hello world from processor %s, rank %d out of %d processors\n",
processor_name, world_rank, world_size);
// Finalize the MPI environment.
MPI_Finalize();
return 0;
}