windows visual studio 2012下MPI並行環境搭建

來源:互聯網
上載者:User

標籤:mpi   並行   visual studio 2012   windows   每天編程一小時   

因為課程作業的緣故需要編寫並行計算的程式,準備寫一下MPI程式,MPI的全稱是Message Passing Interface即標準訊息傳遞介面,可以用於並行計算。MPI的具體實現一般採用MPICH。下面介紹如何在Windows 8系統下visual studio 2012中搭建MPI環境來編寫MPI程式。

安裝MPI實現庫

MPICH官網上給出了windows下的。可以看出連結到了微軟的官網,根據我的版本下載並安裝了HPC Pack 2012 SDK。然而在網上尋找資料發現都是關於MPICH2的,所以又下載安裝了這個,並根據部落格的內容進行了配置。後文的結果是我寫的hello world程式能夠成功運行,但前面安裝了兩次這個過程卻給我後面工作帶來了很大麻煩。

實現第一個MPI程式在visual studio 2012中建立控制台程式,配置mpi的include和Lib路徑。開啟應用程式屬性->VC目錄下變更。

加入代碼:

#include "stdafx.h"#include "mpi.h"#include <stdio.h>#include <math.h>#pragma comment (lib, "msmpi.lib")int _tmain(int argc, char* argv[]){int myid, numprocs;int namelen;char processor_name[MPI_MAX_PROCESSOR_NAME];MPI_Init(&argc, &argv);MPI_Comm_rank(MPI_COMM_WORLD, &myid);MPI_Comm_size(MPI_COMM_WORLD, &numprocs);MPI_Get_processor_name(processor_name, &namelen);fprintf(stderr, "Hello World! Process %d of %d on %s\n", myid, numprocs, processor_name);MPI_Finalize();return 0;}
運行得到:


說明程式正確運行。但是從程式運行中看到只運行了一個進程,沒有看到所謂的並行運算呀。別著急下一節進行介紹。

MPI並行運算

使用控制台命令調用上面的helloworld.exe程式,得到並行運算結果。輸入命令:

mpiexec -n 4 helloworld.exe

結果出現了下面的問題:

ERROR:unable to read the cmd header on the pmi context, Error = -1

stackoverflow上的大牛說明產生這個問題的原因在於系統中安裝了兩個版本的mpi,分別是c:\program files\mpich2\bin和c:\program files\microsoft hpc pack 2012\bin.

根據上面的方法,我將hpc pack 2012卸載了(因為到處都是MPICH的使用,所以就卸載了微軟提供的了),重新運行上面的命令,又產生了問題:

Please specify an authentication passphrase for smpd:

stackoverflow上提供的解決方案是使用wmpiregister進行註冊,具體方法參考資料1中提供了,但仍然沒有解決該問題。又卸載並重新安裝了MPICH這次,直接提示沒有mpiexec命令了。我猜想MPICH是由第三方庫提供的,而hpc pack 2012是微軟自己的東西,因此使用MPICH時需要進行一些環境上的配置,而hpc pack 2012不需要,所以又卸載了MPICH並安裝會pc pack 2012。這次再運行mpiexec命令竟然成功了!得到運行10次結果如下:

從上面結果還可以看出,系統調用不同線程的順序由系統隨機決定的,線程的結束時間無法確定。

一點感想:編程不光是個技術活也是個體力活,很多時候遇到一個問題需要不停的去google尋找解決方案,但我們平時遇到的大部分問題都是有很多人遇到過的,這個過程就要求我們不急不躁,仔細去尋找前人的解決方案了。

參考資料:

  1. windows xp下配置MPICH:http://blog.csdn.net/morewindows/article/details/6823436
  2. Error = -1問題的解決方案:http://stackoverflow.com/questions/10977026/mpi-runtime-errorunable-to-read-the-cmd-header-on-the-pmi-context-error-1
  3. authentication問題解決方案:http://stackoverflow.com/questions/13926882/please-specify-an-authentication-passphrase-for-smpd
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.