Visual Studio 2010 (vs)中啟動 MPI 群集調試程序_第1頁
Visual Studio 2010 (vs)中啟動 MPI 群集調試程序_第2頁
Visual Studio 2010 (vs)中啟動 MPI 群集調試程序_第3頁
Visual Studio 2010 (vs)中啟動 MPI 群集調試程序_第4頁
Visual Studio 2010 (vs)中啟動 MPI 群集調試程序_第5頁
已閱讀5頁,還剩9頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、在此操作實例中,您將了解如何在本地計算機和 Microsoft Windows HPC Server 2008 群集上設置和啟動 MPI 群集調試程序會話。此操作實例包括使用消息傳遞界面 (MPI) 和打開多進程 (OpenMP) 應用程序編程界面 (API) 創建應用程序所需的步驟和示例代碼。本指南內容:· 使用 MPI 群集調試程序的要求· 在 Visual Studio 2010 中創建 C+ MPI 示例項目· 配置和啟動 MPI 群集調試程序· 附錄:除應用程序二進制外,Visual Studio 部署的文件和 CRT(如果要求)使用 MPI

2、群集調試程序的要求· 您的開發計算機上必須安裝了 Visual Studio 2010 Professional Edition 或更高版本(包括遠程調試程序)。· 您必須在群集上擁有管理權限。· Visual Studio 必須能夠訪問要運行調試會話的計算節點。以下方案提供了所需的訪問權限:o 您在群集頭節點或專用登錄節點上開發應用程序。o 所使用群集的計算節點被連接到企業網絡(拓撲 2、4 或 5),并且您的開發計算機連接到了相同的域或是與群集域有信任關系的域。· 要從客戶端計算機將應用程序提交到 HPC 群集,您必須安裝了 Microsoft HP

3、C Pack 2008。· 要使用 Microsoft 消息傳遞界面構建 MPI 程序,需要在開發計算機上安裝 Windows HPC Server 2008 SDK。在 Visual Studio 2010 中創建 C+ MPI 示例項目本部分的示例代碼用于一個使用 Monte Carlo 模擬估算 Pi 值的并行應用程序。示例代碼在每個 MPI 進程上運行 50,000,000 次迭代計算。在每次迭代計算中,示例代碼都生成間隔為 0,1 的隨機數字以確定一組 x 和 y 坐標。然后評估坐標組以確定點是否位于行 x2 + 

4、y2 = 1 下。如果點位于該行下,則變量 count 將加一。每個 MPI 的值 count 的總和將成為變量 result。將位于行 (result) 下的總點數乘以四,然后再用所乘的結果除以總迭代計算次數以估算 Pi 值。以下步驟包含 Monte Carlo 模擬的兩個實現。· 第一個示例使用的是 MPI 和 OpenMP。有關 OpenMP 的詳細信息,請參閱 OpenMP in Visual C+。· 第二個示例使用的是 MPI 和并行格式庫 (PPL)。有關 PPL 的詳細信息,請參

5、閱 Parallel Patterns Library (PLL)。創建示例項目的步驟1. 運行 Visual Studio 2010。2. 創建一個名為 ParallelPI 的新 C+ Win32 控制臺應用程序。使用一個無預編譯頭的項目。1. 在“文件”菜單上,指向“新建”,然后單擊“項目”。2. 在“新建項目”對話框中,單擊“已安裝的模板”,然后選擇“Visual C+”。 (根據 Visual Studio 的設置方式,“Visual C+”可能位于“其他語言”節點下。)3. 在模板列表中,單擊“Win32 控制臺應用程序”。4. 關于項目名稱,請鍵入:

6、ParallelPI.5. 單擊“確定”。此操作將打開“Win32 控制臺應用程序”向導。6. 單擊“下一步”。7. 在“應用程序設置”中的“其他選項”下,清除“預編譯頭”復選框。8. 單擊“結束”以關閉向導并創建項目。3. 指定此項目的其他屬性。1. 在“解決方案資源管理器”中,右鍵單擊 Parallel PI,然后單擊“屬性”。此操作將打開“屬性頁”對話框。2. 展開“配置屬性”,然后選擇“VC+ 目錄”。在“包含目錄”中,將指針指到文本框中顯示的列表的開頭,然后指定 MS MPI C 標頭文件的位置,隨后添加英文分號 (;)。例如:C:Program FilesMicrosof

7、t HPC Pack 2008 SDKInclude;3. 在“庫目錄”中,將指針指到文本框中顯示的列表的開頭,然后指定 Microsoft HPC Pack 2008 SDK 庫文件的位置,隨后添加英文分號 (;)。例如,如果您要構建和調試 32 位應用程序:C:Program FilesMicrosoft HPC Pack 2008 SDKLibi386;如果您要構建和調試 64 位應用程序:C:Program FilesMicrosoft HPC Pack 2008 SDKLibamd64;4. 在“鏈接器”下,選擇“輸入”。在“附加依賴關系”中,將指針指到文本框中顯示的列表開頭,然后鍵

8、入:msmpi.lib;5. 如果您使用的是 OpenMP 代碼示例:在“配置屬性”中展開 “C/C+”,然后選擇“語言”。在“打開 MP 支持”中,選擇“是(/openmp)”以啟用編譯器對 OpenMP 的支持。6. 單擊“確定”關閉屬性頁。4. 在主要源文件中,選擇全部代碼,然后將其刪除。5. 將以下示例代碼之一粘貼到空的源文件中。第一個示例使用的是 MPI 和 OpenMP,第二個示例使用的是 MPI 和并行格式庫 (PPL)。以下代碼示例使用的是 MPI 和 OpenMP。函數 ThrowDarts 使用 OpenMP 并行 for 循環,以利

9、用多核硬件(如果可用)。/ 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 ThrowDarts(int iterations)std:tr1:uniform_real<doubl

10、e> 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)double x, y;x = MyRandom(MyEngine)/RandMax;y = MyRandom(

11、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 time;MPI_Status s;MPI_Init(&argc, &argv);MPI_Co

12、mm_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", iterations);fflush(stdout);/Broadcast the number of it

13、erations 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_WORLD);count = ThrowDarts(iterations);/Gather and su

14、m 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(&count, &result, 1, MPI_INT, MPI_SUM, 0, MPI_COM

15、M_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;以下代碼示例使用并行格式庫 (PPL) 而非 OpenMP,使用 MPI 集體操作而非點對點操作。/ ParallelPI.cpp : Defines the entry point for the MPI application./#inc

16、lude "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<int> count;int result = 0;parallel_for(0, iterati

17、ons, &(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 < 1.0)count.local() += 1;);result = bine(int lef

18、t, 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);if(rank = 0)/Rank 0 reads the number of iterations fr

19、om 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 execute.MPI_Bcast(&iterations, 1, MPI_INT, 0, MP

20、I_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)(iterations*size); MPI_Barrier(MPI_COMM_WORLD);MPI_Fina

21、lize();6. 在“文件”菜單上單擊“全部保存”。7. 在“生成”菜單上單擊“重新生成解決方案”。配置和啟動 MPI 群集調試程序在構建您的應用程序后,即可配置和啟動調試程序。本節介紹了用于調試的三個選項:· 在本地計算機上調試一個 MPI 進程· 在本地計算機上調試多個 MPI 進程· 在群集上調試一個或多個 MPI 進程注意:在 MPI 群集調試程序中,不可未經過調試即啟動。按 Ctrl+F5(或在“調試”菜單上選擇“啟動時不要進行調試”)也可以啟動調試。在本地計算機上調試一個 MPI 進程要在本地計算機上僅使用 MPI 進程進行調試,請使用與要調試任何其

22、他應用程序相同的進程。在程序中希望的位置設置一個斷點,然后按 F5 啟動調試程序。MPI 程序通過端口上的 IP 進行通訊。首次啟動 MPI 程序時,可能會出現一條防火墻安全警告,顯示已經打開一個端口。閱讀警告消息并確保了解了您對系統所做的更改。您必須解除防火墻鎖定以繼續在本地計算機上調試。在本地計算機上調試多個 MPI 進程以下步驟描述了如何為 ParallelPI 啟動本地調試會話。在運行著四個 MPI 進程的本地計算機上啟動 MPI 群集調試程序的步驟1. 在“解決方案資源管理器”中,右鍵單擊 Parallel PI,然后單擊“屬性”。此操作將打開“屬性頁”

23、對話框。2. 展開“配置屬性”,然后選擇“調試”。3. 在“要啟動的調試程序”中,選擇“MPI 群集調試程序”。4. 在“運行環境”中,從下拉列表選擇“編輯 Hpc 節點”。此操作將打開“節點選擇器”對話框。5. 在“頭節點”下拉列表中選擇“localhost”。6. 在“進程數”中選擇“4”。7. 單擊“確定”保存更改并關閉“節點選擇器”對話框。8. ParallelPI 將接受一個確定要運行的迭代計算次數的參數。默認次數為 50,000,000。對于本地調試會話,請根據下面的步驟將迭代次數減少為 5,000:在“應用程序參數”中鍵入 5000。9. 單擊“確定”保存更改

24、并關閉“屬性頁”。10. 在并行 for 循環代碼中設置一個斷點。11. 按 F5 啟動調試程序。12. 將顯示五個控制臺窗口:一個 cmd.exe 窗口和四個 ParallelPI.exe 窗口(每個窗口用于您啟動的每個進程)。與排名 0 進程對應的控制臺窗口顯示了迭代計算數和所計算的 Pi 估值。13. 在“調試”菜單上單擊“窗口”,然后單擊“進程”。14. 通過雙擊“進程”窗口中的一個進程以設置用于調試的活動進程。注意:當調試多個進程時,默認情況下斷點將會影響所有正在調試的進程。為避免在不希望的位置中斷各個進程,請取消選擇“一個

25、進程中斷時中斷所有進程”選項。(在“工具”菜單上單擊“選項”,然后選擇調試)。有關如何更改中斷行為的詳細信息,請參閱如何:中斷執行。在群集上調試一個或多個 MPI 進程在群集上啟動 MPI 調試程序時,調試程序會將您的應用程序作為作業提交給群集。與您的項目 (x86 或 x64、調試或發布)匹配的 Visual C 運行時必須位于計算節點的工作目錄中。如果計算節點上沒有這些正確的運行時,需通過指定“要部署的其他文件”屬性將這些運行時納入調試程序部署中。以下過程包含部署 OpenMP 調試運行時 DLL 的一個步驟。默認情況下,當啟動 MPI 群集調試程序時,C 運行時 (CRT) 庫將被部署。

26、如果無正確的運行時,則嘗試運行應用程序時將會出現并列錯誤。如果未包含 OpenMP 運行時,將不會調用斷點。在群集上啟動 MPI 調試程序1. 在“解決方案資源管理器”中,右鍵單擊 Parallel PI,然后單擊“屬性”。此操作將打開“屬性頁”對話框。2. 展開“配置屬性”,然后選擇“調試”。3. 在“要啟動的調試程序”中,選擇“MPI 群集調試程序”。4. 在“運行環境”中,從下拉列表選擇“編輯 Hpc 節點”。此操作將打開“節點選擇器”對話框。5. 在“頭節點”下拉列表中,為群集選擇要使用的頭節點名稱。頭節點列表已從 Active Directory 域控制器填充。僅域中的群集

27、會顯示在列表中。如果看不到您的頭節點,請在屬性字段中鍵入頭節點名稱或 IPv4 地址。6. 在“進程數”中選擇“4”。7. 在“計劃進程”中,選擇如何分配您的進程。您可以選擇每“核”、“套接字”或“節點”分配一個進程。8. 單擊“確定”保存更改并關閉“節點選擇器”對話框。9. 在“部署目錄”中,在頭節點上指定一個共享目錄。如果部署目錄不存在,并且您擁有指定根目錄的寫入權限,將自動創建部署目錄。當 HPC Pack 2008 包安裝到頭節點上時,將創建 CcpSpoolDir 共享資源目錄。例如,鍵入以下內容,其中 <myHeadNode> 是

28、您使用的群集名稱:<myHeadNode>CcpSpoolDir10. 在“工作目錄”中,在每個計算節點上指定一個本地工作目錄。例如,鍵入以下內容,其中 <myUserName> 是您的用戶名:C:Users<myUserName>ParallelPI11. 如果使用的是含 OpenMP 的示例代碼,請添加 OpenMP 調試運行時 DLL 文件 (Microsoft.VC100.DebugOpenMPvcomp100d.dll):1. 在“要部署的其他文件”中,選擇<編輯文件>。此操作將打開“文件和文件夾選擇器”對話框。2. 單擊“添加文件”,導航到 

溫馨提示

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

評論

0/150

提交評論