2013-10-15 27 views
0

我有兩個主站和從站程序。我的主人進行數據分解,從屬人員對分解數據進行計算。 MPI scaterv是爲工作分配而實現的。我首先執行我的主程序,然後它動態地派生子進程或從進程,從服務器執行不同的代碼ie.computation。現在,主人必須從奴隸收集結果並執行下一級分解。我該如何使用MPI來做到這一點?我其實想交替執行我的主代碼和奴隸代碼。我該如何實現這一點?MPI更改主站和從站的執行順序

預先感謝您..

回答

0

MPI-2(如果我沒記錯的話)引入機制動態過程管理,你可能會關心搜索mpi_comm_spawn開始瞭解這些機制。因此,編寫一個MPI程序當然是可能的,該程序在運行主任務的一個進程和運行該工作任務的多個進程之間交替(術語奴隸已被棄用)。甚至可以設計計算,以便一個程序運行主任務,另一個程序運行(多個)工作任務並使用MPI在兩者之間傳遞消息。我認爲許多資源管理者(管理並行計算機系統的人或操作系統和系統軟件如作業管理者)都不支持這種動態過程管理。想象一下使用您提出的基本設計安排和管理兩個或更多程序的複雜性。正如程序A試圖啓動2^10工作進程以及程序B和程序C一樣,而程序D試圖刪除2^8工作進程;所有這些僅在具有2^10處理器(或核心)的羣集上進行。由於多個作業爭奪稀缺資源,因此構建羣集上的作業吞吐量降至零的場景可能並不困難。

如果您的平臺支持動態流程管理,請繼續。在更有可能的情況下,您的平臺不會有至少兩個選擇,您選擇哪一個取決於主:工作時間的比率以及可能的其他因素。你可以:

  1. 做什麼我們大多數人一直做,繼續做,並要求處理器的總數整個作業,使所有但在主單獨階段其中之一閒置。對於資源管理者來說,可能會很浪費但很容易處理。編程也相對容易。
  2. 如果主人在工作人員階段之間做了很多工作,則可以修改程序,以使主人和工作人員是分開的程序。首先讓主人在一個進程上執行,並在完成後向作業管理系統提交請求,以啓動工作人員計算的第一階段。那麼,是否會啓動下一個主階段的執行,等等。
+0

是的,我正在開發代碼,它使用MPI_comm_spawn()動態創建子進程。讓我們看看它是如何工作的。 :) – user2881216