在VisualStudio2010(vs)中啟動(dòng)MPI群集調(diào)試程序_第1頁(yè)
在VisualStudio2010(vs)中啟動(dòng)MPI群集調(diào)試程序_第2頁(yè)
在VisualStudio2010(vs)中啟動(dòng)MPI群集調(diào)試程序_第3頁(yè)
在VisualStudio2010(vs)中啟動(dòng)MPI群集調(diào)試程序_第4頁(yè)
在VisualStudio2010(vs)中啟動(dòng)MPI群集調(diào)試程序_第5頁(yè)
已閱讀5頁(yè),還剩6頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、在此操作實(shí)例中,您將了解如何在本地計(jì)算機(jī)和 Microsoft Windows HPC Server 2008 群集上設(shè)置和啟動(dòng) MPI 群集調(diào)試程序會(huì)話。此操作實(shí)例包括使用消息傳遞界面 (MPI) 和打開多進(jìn)程 (OpenMP) 應(yīng)用程序編程界面 (API) 創(chuàng)建應(yīng)用程序所需的步驟和示例代碼。本指南內(nèi)容:使用 MPI 群集調(diào)試程序的要求在 Visual Studio 2010 中創(chuàng)建 C+ MPI 示例項(xiàng)目配置和啟動(dòng) MPI 群集調(diào)試程序附錄:除應(yīng)用程序二進(jìn)制外,Visual Studio 部署的文件和 CRT(如果要求)使用 MPI 群集調(diào)試程序的要求您的開發(fā)計(jì)算機(jī)上必須安裝了 Visua

2、l Studio 2010 Professional Edition 或更高版本(包括遠(yuǎn)程調(diào)試程序)。您必須在群集上擁有管理權(quán)限。Visual Studio 必須能夠訪問(wèn)要運(yùn)行調(diào)試會(huì)話的計(jì)算節(jié)點(diǎn)。以下方案提供了所需的訪問(wèn)權(quán)限:您在群集頭節(jié)點(diǎn)或?qū)S玫卿浌?jié)點(diǎn)上開發(fā)應(yīng)用程序。所使用群集的計(jì)算節(jié)點(diǎn)被連接到企業(yè)網(wǎng)絡(luò)(拓?fù)?2、4 或 5),并且您的開發(fā)計(jì)算機(jī)連接到了相同的域或是與群集域有信任關(guān)系的域。要從客戶端計(jì)算機(jī)將應(yīng)用程序提交到 HPC 群集,您必須安裝了 Microsoft HPC Pack 2008。要使用 Microsoft 消息傳遞界面構(gòu)建 MPI 程序,需要在開發(fā)計(jì)算機(jī)上安裝 Window

3、s HPC Server 2008 SDK。在 Visual Studio 2010 中創(chuàng)建 C+ MPI 示例項(xiàng)目本部分的示例代碼用于一個(gè)使用 Monte Carlo 模擬估算 Pi 值的并行應(yīng)用程序。示例代碼在每個(gè) MPI 進(jìn)程上運(yùn)行 50,000,000 次迭代計(jì)算。在每次迭代計(jì)算中,示例代碼都生成間隔為 0,1 的隨機(jī)數(shù)字以確定一組 x 和 y 坐標(biāo)。然后評(píng)估坐標(biāo)組以確定點(diǎn)是否位于行 x2 + y2 = 1 下。如果點(diǎn)位于該行下,則變量 count 將加一。每個(gè) MPI 的值 count 的總和將成為變量 result。將位于行 (result) 下的總點(diǎn)數(shù)乘以四,然后再用所乘的結(jié)果除

4、以總迭代計(jì)算次數(shù)以估算 Pi 值。以下步驟包含 Monte Carlo 模擬的兩個(gè)實(shí)現(xiàn)。第一個(gè)示例使用的是 MPI 和 OpenMP。有關(guān) OpenMP 的詳細(xì)信息,請(qǐng)參閱 OpenMP in Visual C+。第二個(gè)示例使用的是 MPI 和并行格式庫(kù) (PPL)。有關(guān) PPL 的詳細(xì)信息,請(qǐng)參閱 Parallel Patterns Library (PLL)。創(chuàng)建示例項(xiàng)目的步驟運(yùn)行 Visual Studio 2010。創(chuàng)建一個(gè)名為 ParallelPI 的新 C+ Win32 控制臺(tái)應(yīng)用程序。使用一個(gè)無(wú)預(yù)編譯頭的項(xiàng)目。在“文件”菜單上,指向“新建”,然后單擊“項(xiàng)目”。在“新建項(xiàng)目”對(duì)話框

5、中,單擊“已安裝的模板”,然后選擇“Visual C+”。 (根據(jù) Visual Studio 的設(shè)置方式,“Visual C+”可能位于“其他語(yǔ)言”節(jié)點(diǎn)下。)在模板列表中,單擊“Win32 控制臺(tái)應(yīng)用程序”。關(guān)于項(xiàng)目名稱,請(qǐng)鍵入:ParallelPI.單擊“確定”。此操作將打開“Win32 控制臺(tái)應(yīng)用程序”向?qū)А螕簟跋乱徊健薄T凇皯?yīng)用程序設(shè)置”中的“其他選項(xiàng)”下,清除“預(yù)編譯頭”復(fù)選框。單擊“結(jié)束”以關(guān)閉向?qū)Р?chuàng)建項(xiàng)目。指定此項(xiàng)目的其他屬性。在“解決方案資源管理器”中,右鍵單擊 Parallel PI,然后單擊“屬性”。此操作將打開“屬性頁(yè)”對(duì)話框。展開“配置屬性”,然后選擇“VC+ 目錄

6、”。在“包含目錄”中,將指針指到文本框中顯示的列表的開頭,然后指定 MS MPI C 標(biāo)頭文件的位置,隨后添加英文分號(hào) (;)。例如:C:Program FilesMicrosoft HPC Pack 2008 SDKInclude;在“庫(kù)目錄”中,將指針指到文本框中顯示的列表的開頭,然后指定 Microsoft HPC Pack 2008 SDK 庫(kù)文件的位置,隨后添加英文分號(hào) (;)。例如,如果您要構(gòu)建和調(diào)試 32 位應(yīng)用程序:C:Program FilesMicrosoft HPC Pack 2008 SDKLibi386;如果您要構(gòu)建和調(diào)試 64 位應(yīng)用程序:C:Program Fil

7、esMicrosoft HPC Pack 2008 SDKLibamd64;在“鏈接器”下,選擇“輸入”。在“附加依賴關(guān)系”中,將指針指到文本框中顯示的列表開頭,然后鍵入:msmpi.lib;如果您使用的是 OpenMP 代碼示例:在“配置屬性”中展開 “C/C+”,然后選擇“語(yǔ)言”。在“打開 MP 支持”中,選擇“是(/openmp)”以啟用編譯器對(duì) OpenMP 的支持。單擊“確定”關(guān)閉屬性頁(yè)。在主要源文件中,選擇全部代碼,然后將其刪除。將以下示例代碼之一粘貼到空的源文件中。第一個(gè)示例使用的是 MPI 和 OpenMP,第二個(gè)示例使用的是 MPI 和并行格式庫(kù) (PPL)。以下代碼示例使用

8、的是 MPI 和 OpenMP。函數(shù) ThrowDarts 使用 OpenMP 并行 for 循環(huán),以利用多核硬件(如果可用)。/ ParallelPI.cpp : Defines the entry point for the MPI application./#include "mpi.h"#include "stdio.h"#include "stdlib.h"#include "limits.h"#include "omp.h"#include <random>int Thr

9、owDarts(int iterations)std:tr1:uniform_real<double> MyRandom;std:tr1:minstd_rand0 MyEngine;double RandMax = MyRandom.max();int count = 0;omp_lock_t MyOmpLock;omp_init_lock(&MyOmpLock);/Compute approximation of pi on each node#pragma omp parallel forfor(int i = 0; i < iterations; +i)doub

10、le x, y;x = MyRandom(MyEngine)/RandMax;y = MyRandom(MyEngine)/RandMax; if(x*x + y*y < 1.0)omp_set_lock(&MyOmpLock);count+;omp_unset_lock(&MyOmpLock);omp_destroy_lock(&MyOmpLock);return count;int main(int argc, char* argv)int rank;int size;int iterations;int count;int result;double tim

11、e;MPI_Status s;MPI_Init(&argc, &argv);MPI_Comm_rank(MPI_COMM_WORLD,&rank);MPI_Comm_size(MPI_COMM_WORLD,&size);if(rank = 0)/Rank 0 asks the number of iterations from the user.iterations = 50000000;if(argc > 1)iterations = atoi(argv1);printf("Executing %d iterations.n", it

12、erations);fflush(stdout);/Broadcast the number of iterations to execute.if(rank = 0)for(int i = 1; i < size; +i)MPI_Ssend(&iterations, 1, MPI_INT, i, 0, MPI_COMM_WORLD);elseMPI_Recv(&iterations, 1, MPI_INT, 0, 0, MPI_COMM_WORLD, &s);/MPI_Bcast(&iterations, 1, MPI_INT, 0, MPI_COMM_

13、WORLD);count = ThrowDarts(iterations);/Gather and sum resultsif(rank != 0)MPI_Ssend(&count, 1, MPI_INT, 0, 0, MPI_COMM_WORLD);elsefor(int i = 1; i < size; +i)int TempCount = 0;MPI_Recv(&TempCount, 1, MPI_INT, i, 0, MPI_COMM_WORLD, &s);count += TempCount;result = count;/MPI_Reduce(&

14、;count, &result, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD);if(rank = 0)printf("The value of PI is approximated to be: %16f", 4*(float)result/(float)(iterations*size); MPI_Barrier(MPI_COMM_WORLD);MPI_Finalize();return 0;以下代碼示例使用并行格式庫(kù) (PPL) 而非 OpenMP,使用 MPI 集體操作而非點(diǎn)對(duì)點(diǎn)操作。/ ParallelPI.cpp : D

15、efines the entry point for the MPI application./#include "mpi.h"#include "stdio.h"#include "stdlib.h"#include "limits.h"#include <ppl.h>#include <random>#include <time.h>using namespace Concurrency;int ThrowDarts(int iterations)combinable<

16、int> count;int result = 0;parallel_for(0, iterations, &(int i)std:tr1:uniform_real<double> MyRandom;double RandMax = MyRandom.max();std:tr1:minstd_rand0 MyEngine;double x, y;MyEngine.seed(unsigned int)time(NULL);x = MyRandom(MyEngine)/RandMax;y = MyRandom(MyEngine)/RandMax; if(x*x + y*y

17、 < 1.0)count.local() += 1;);result = bine(int left, int right) return left + right; );return result;void main(int argc, char* argv)int rank;int size;int iterations;int count;int result;MPI_Init(&argc, &argv);MPI_Comm_rank(MPI_COMM_WORLD,&rank);MPI_Comm_size(MPI_COMM_WORLD,&size);i

18、f(rank = 0)/Rank 0 reads the number of iterations from the command line./50M iterations is the default.iterations = 50000000;if(argc > 1)iterations = atoi(argvargc-1);printf("Executing %d iterations on %d nodes.n", iterations, size);fflush(stdout);/Broadcast the number of iterations to

19、execute.MPI_Bcast(&iterations, 1, MPI_INT, 0, MPI_COMM_WORLD);count = ThrowDarts(iterations);/Gather and sum resultsMPI_Reduce(&count, &result, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD);if(rank = 0)printf("The value of PI is approximated to be: %16f", 4*(double)result/(double)(it

20、erations*size); MPI_Barrier(MPI_COMM_WORLD);MPI_Finalize();在“文件”菜單上單擊“全部保存”。在“生成”菜單上單擊“重新生成解決方案”。配置和啟動(dòng) MPI 群集調(diào)試程序在構(gòu)建您的應(yīng)用程序后,即可配置和啟動(dòng)調(diào)試程序。本節(jié)介紹了用于調(diào)試的三個(gè)選項(xiàng):在本地計(jì)算機(jī)上調(diào)試一個(gè) MPI 進(jìn)程在本地計(jì)算機(jī)上調(diào)試多個(gè) MPI 進(jìn)程在群集上調(diào)試一個(gè)或多個(gè) MPI 進(jìn)程Ee441265.note(zh-cn,VS.100).gif注意:在 MPI 群集調(diào)試程序中,不可未經(jīng)過(guò)調(diào)試即啟動(dòng)。按 Ctrl+F5(或在“調(diào)試”菜單上選擇“啟動(dòng)時(shí)不要進(jìn)行調(diào)試”)也可以

21、啟動(dòng)調(diào)試。在本地計(jì)算機(jī)上調(diào)試一個(gè) MPI 進(jìn)程要在本地計(jì)算機(jī)上僅使用 MPI 進(jìn)程進(jìn)行調(diào)試,請(qǐng)使用與要調(diào)試任何其他應(yīng)用程序相同的進(jìn)程。在程序中希望的位置設(shè)置一個(gè)斷點(diǎn),然后按 F5 啟動(dòng)調(diào)試程序。MPI 程序通過(guò)端口上的 IP 進(jìn)行通訊。首次啟動(dòng) MPI 程序時(shí),可能會(huì)出現(xiàn)一條防火墻安全警告,顯示已經(jīng)打開一個(gè)端口。閱讀警告消息并確保了解了您對(duì)系統(tǒng)所做的更改。您必須解除防火墻鎖定以繼續(xù)在本地計(jì)算機(jī)上調(diào)試。在本地計(jì)算機(jī)上調(diào)試多個(gè) MPI 進(jìn)程以下步驟描述了如何為 ParallelPI 啟動(dòng)本地調(diào)試會(huì)話。在運(yùn)行著四個(gè) MPI 進(jìn)程的本地計(jì)算機(jī)上啟動(dòng) MPI 群集調(diào)試程序的步驟在“解決方案資源管理器”中

22、,右鍵單擊 Parallel PI,然后單擊“屬性”。此操作將打開“屬性頁(yè)”對(duì)話框。展開“配置屬性”,然后選擇“調(diào)試”。在“要啟動(dòng)的調(diào)試程序”中,選擇“MPI 群集調(diào)試程序”。在“運(yùn)行環(huán)境”中,從下拉列表選擇“編輯 Hpc 節(jié)點(diǎn)”。此操作將打開“節(jié)點(diǎn)選擇器”對(duì)話框。在“頭節(jié)點(diǎn)”下拉列表中選擇“l(fā)ocalhost”。在“進(jìn)程數(shù)”中選擇“4”。單擊“確定”保存更改并關(guān)閉“節(jié)點(diǎn)選擇器”對(duì)話框。ParallelPI 將接受一個(gè)確定要運(yùn)行的迭代計(jì)算次數(shù)的參數(shù)。默認(rèn)次數(shù)為 50,000,000。對(duì)于本地調(diào)試會(huì)話,請(qǐng)根據(jù)下面的步驟將迭代次數(shù)減少為 5,000:在“應(yīng)用程序參數(shù)”中鍵入 5000。單擊“確定”

23、保存更改并關(guān)閉“屬性頁(yè)”。在并行 for 循環(huán)代碼中設(shè)置一個(gè)斷點(diǎn)。按 F5 啟動(dòng)調(diào)試程序。將顯示五個(gè)控制臺(tái)窗口:一個(gè) cmd.exe 窗口和四個(gè) ParallelPI.exe 窗口(每個(gè)窗口用于您啟動(dòng)的每個(gè)進(jìn)程)。與排名 0 進(jìn)程對(duì)應(yīng)的控制臺(tái)窗口顯示了迭代計(jì)算數(shù)和所計(jì)算的 Pi 估值。在“調(diào)試”菜單上單擊“窗口”,然后單擊“進(jìn)程”。通過(guò)雙擊“進(jìn)程”窗口中的一個(gè)進(jìn)程以設(shè)置用于調(diào)試的活動(dòng)進(jìn)程。Ee441265.note(zh-cn,VS.100).gif注意:當(dāng)調(diào)試多個(gè)進(jìn)程時(shí),默認(rèn)情況下斷點(diǎn)將會(huì)影響所有正在調(diào)試的進(jìn)程。為避免在不希望的位置中斷各個(gè)進(jìn)程,請(qǐng)取消選擇“一個(gè)進(jìn)程中斷時(shí)中斷所有進(jìn)程”選項(xiàng)。

24、(在“工具”菜單上單擊“選項(xiàng)”,然后選擇調(diào)試)。有關(guān)如何更改中斷行為的詳細(xì)信息,請(qǐng)參閱如何:中斷執(zhí)行。在群集上調(diào)試一個(gè)或多個(gè) MPI 進(jìn)程在群集上啟動(dòng) MPI 調(diào)試程序時(shí),調(diào)試程序會(huì)將您的應(yīng)用程序作為作業(yè)提交給群集。與您的項(xiàng)目 (x86 或 x64、調(diào)試或發(fā)布)匹配的 Visual C 運(yùn)行時(shí)必須位于計(jì)算節(jié)點(diǎn)的工作目錄中。如果計(jì)算節(jié)點(diǎn)上沒(méi)有這些正確的運(yùn)行時(shí),需通過(guò)指定“要部署的其他文件”屬性將這些運(yùn)行時(shí)納入調(diào)試程序部署中。以下過(guò)程包含部署 OpenMP 調(diào)試運(yùn)行時(shí) DLL 的一個(gè)步驟。默認(rèn)情況下,當(dāng)啟動(dòng) MPI 群集調(diào)試程序時(shí),C 運(yùn)行時(shí) (CRT) 庫(kù)將被部署。如果無(wú)正確的運(yùn)行時(shí),則嘗試運(yùn)行

25、應(yīng)用程序時(shí)將會(huì)出現(xiàn)并列錯(cuò)誤。如果未包含 OpenMP 運(yùn)行時(shí),將不會(huì)調(diào)用斷點(diǎn)。在群集上啟動(dòng) MPI 調(diào)試程序在“解決方案資源管理器”中,右鍵單擊 Parallel PI,然后單擊“屬性”。此操作將打開“屬性頁(yè)”對(duì)話框。展開“配置屬性”,然后選擇“調(diào)試”。在“要啟動(dòng)的調(diào)試程序”中,選擇“MPI 群集調(diào)試程序”。在“運(yùn)行環(huán)境”中,從下拉列表選擇“編輯 Hpc 節(jié)點(diǎn)”。此操作將打開“節(jié)點(diǎn)選擇器”對(duì)話框。在“頭節(jié)點(diǎn)”下拉列表中,為群集選擇要使用的頭節(jié)點(diǎn)名稱。頭節(jié)點(diǎn)列表已從 Active Directory 域控制器填充。僅域中的群集會(huì)顯示在列表中。如果看不到您的頭節(jié)點(diǎn),請(qǐng)?jiān)趯傩宰侄沃墟I入頭節(jié)點(diǎn)名稱或

26、IPv4 地址。在“進(jìn)程數(shù)”中選擇“4”。在“計(jì)劃進(jìn)程”中,選擇如何分配您的進(jìn)程。您可以選擇每“核”、“套接字”或“節(jié)點(diǎn)”分配一個(gè)進(jìn)程。單擊“確定”保存更改并關(guān)閉“節(jié)點(diǎn)選擇器”對(duì)話框。在“部署目錄”中,在頭節(jié)點(diǎn)上指定一個(gè)共享目錄。如果部署目錄不存在,并且您擁有指定根目錄的寫入權(quán)限,將自動(dòng)創(chuàng)建部署目錄。當(dāng) HPC Pack 2008 包安裝到頭節(jié)點(diǎn)上時(shí),將創(chuàng)建 CcpSpoolDir 共享資源目錄。例如,鍵入以下內(nèi)容,其中 <myHeadNode> 是您使用的群集名稱:<myHeadNode>CcpSpoolDir在“工作目錄”中,在每個(gè)計(jì)算節(jié)點(diǎn)上指定一個(gè)本地工作目錄。例如,鍵入以下內(nèi)容,其中 <myUserName> 是您的用戶名:C:Users<myUserName>ParallelPI如果使用的是含 OpenMP 的示例代碼,請(qǐng)?zhí)砑?OpenMP 調(diào)試運(yùn)行時(shí) DLL 文件 (Mi

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論