2016-12-31 87 views
0

給定一個由多個節點組成的集羣,每個節點承載多核處理器,在使用純全MPI的節點上使用MPI節點間節點之間是否有優勢?如果我理解正確,如果我在單個節點上運行MPI程序,並指出進程的數量等於核心數量,那麼我將擁有在不同核心上運行的多個進程的真實並行MPI作業。那麼爲什麼還要在節點之間使用線程和MPI之間的混合並行化來解決這個問題呢?對於MPI + CUDA混合體系,我毫無疑問,因爲MPI不能使用GPU,但它可以使用CPU核心,所以爲什麼要使用線程?MPI +線程並行化與僅MPI-的優勢(如果有的話)有什麼區別?

+1

因爲在線程之間共享數據比過程更容易,更快速。 – user3528438

+0

好的,如果並行任務之間的通信不是密集的,那麼MPI +線程可能不會提供比純MPI更多的收益? – Maximko

回答

4

使用OpenMP/pthread線程和MPI進程的組合稱爲混合編程。編程比純MPI更難,但最近使用OpenMP減少了延遲,因此使用Hybrid MPI很有意義。一些優點是:

  1. 避免數據複製:由於線程可以在節點內共享數據,如果需要任何數據進程之間進行復制,我們能避免這種情況。
  2. 輕量級:線程是輕量級的,因此您可以減少與進程相關的元數據。
  3. 消息數量減少:節點內的單個進程可以與其他進程通信,減少了節點之間的消息數量(從而減少了網絡接口卡上的壓力)。參與集體交流的信息數量顯着。
  4. 更快的通信:正如上面的@ user3528438指出的那樣,由於線程使用共享內存進行通信,因此可以避免在節點內使用點對點MPI通信。最近的一種方法(2012)建議使用RMA共享內存而不是節點內的線程 - 該模型稱爲MPI + MPI(使用MPI + MPI搜索谷歌學者)。

但是混合MPI也有它的缺點,但你只問了一下優點。