參考書籍為 高性能計(jì)算之并行編程技術(shù)—— MPI并行程序設(shè)計(jì).pdf
1. Windows 8.1 + Visual Studio 2013 安裝 MPICH2
安裝時(shí)從 官方網(wǎng)站 這里下載三热。其中分為 32bit
和 64bit
版本嘹朗,請謹(jǐn)慎安裝:在用 Visual Studio 2013 編譯的過程中歌馍,如果 Debugger
選的是生成 32bit
程序,那必須調(diào)用 32bit
的 lib
,也就是說,裝 64bit
的 MPICH2 是不可以的,同理 64bit
也不能用 32bit
的 lib
。但是篓像!先不要急著雙擊或者管理員安裝,如果想快進(jìn)崖叫,可以參看第 3 點(diǎn)遗淳。
2. 開始編譯
這其實(shí)是我學(xué)習(xí) VS 時(shí)遇到的問題。我是第一次碰這么大的 IDE心傀,以前在 Codeblocks 或者 Dev-cpp 里的經(jīng)驗(yàn)完全沒用屈暗,而在 MPICH2 的 README
中又注明了必須用 VS 來做,原因是需要 include
和 lib
(當(dāng)然命令行也做脂男,如果探索一下的話养叛,前述兩個(gè) IDE 應(yīng)該也可以,但是我比較懶嘛)宰翅,這里不僅要在 Project 里添加路徑弃甥,還需要在鏈接里鏈接上對應(yīng)的 mpi.lib
,這個(gè)鏈接相當(dāng)于對 mpi.h
的具體實(shí)現(xiàn)汁讼,所以第 1 點(diǎn)中提到的版本問題就出在這里淆攻。
3. 執(zhí)行-1
終于把程序編譯通過了阔墩,生成 exe
后執(zhí)行也很爽啊,但是這離并行還差很遠(yuǎn)瓶珊。首先我們需要用 mpiexec
來調(diào)用執(zhí)行并行模塊啸箫,但是我的 mpiexec
一直出錯(cuò)。然后我查到了這篇文章:初探 mpich2 + vc6.0包 + Win7 + 64位單機(jī)平臺 命令行運(yùn)行伞芹。說重點(diǎn):第 1 步的安裝步驟是不可行的忘苛。正確的安裝步驟如下:
- Open an administrator command prompt (Right-click on the command prompt icon and select "Run as administrator")
- From the admin command prompt use the msiexec utility to uninstall MPICH2 (eg: Type "msiexec /x mpich2-1.2.1p1-win-ia32.msi" to uninstall MPICH2 using the mpich2-1.2.1p1-win-ia32.msi installer)
- From the admin command prompt use the msiexec utility to install MPICH2 (eg: Type "msiexec /i mpich2-1.2.1p1-win-ia32.msi" to install MPICH2 using the mpich2-1.2.1p1-win-ia32.msi installer)
- After the installation try to run a non-MPI program (mpiexec -n 2 hostname)
4. 虛擬機(jī)
既然是并行算法,沒幾臺計(jì)算機(jī)可怎么搞唱较?總不能老玩 -n
的本機(jī)并行吧扎唾?這里我用了 VMware Workstation。安裝的是 Windows 8.1南缓,有點(diǎn)小坑胸遇。
- 序列號
默認(rèn)安裝的話,VM 會(huì)讓你直接調(diào)用安裝 iso西乖,然后中間會(huì)需要輸入序列號狐榔,這里可以不輸?shù)奶吃觯f不要輸获雕,Windows 8.1 沒有可用的序列號,而且進(jìn)去后自己激活即可收捣,這一步跳過届案。 - 主機(jī)名,用戶名罢艾,密碼
由于mpiregister
需要有密碼的管理員賬號楣颠,所以最初設(shè)置的管理員賬號需要有密碼。然后 VM 可以克隆虛擬機(jī)(當(dāng)然直接復(fù)制后打開應(yīng)該也可以咐蚯,我怕有坑童漩,就慢慢克隆的),所以直接把裝好了 MPICH2 的虛擬機(jī)克隆后打開即可春锋。由于克隆是完全復(fù)制狀態(tài)矫膨,所以主機(jī)名是一樣的,而mpiexec
不能識別相同主機(jī)名(返回MPI_Init fatal error
)期奔,所以需要自己修改主機(jī)名侧馅,如 node1,node2 等呐萌。
5. 執(zhí)行-2
搞定了所有的東西后我們就可以直接用 mpiexec -hosts m node1 node2 ... nodem program
來執(zhí)行了馁痴。這里由于虛擬機(jī)是默認(rèn)在同一個(gè) Workgroup 里的,所以輸入主機(jī)名和 ip 是等價(jià)的肺孤。